Paul Fertser edited this page Feb 6, 2013 · 33 revisions
Clone this wiki locally

This project is an attempt to create an Emacs interface for the most typical GSM telephony-related usecases: calling, text messages, contacts management and everything that makes smartphone usage more productive.

The objectives:

  • make the UI usable directly on the device with touchscreen
  • make the UI usable via ssh
  • integrate well with other Emacs applications (please drop me a line with explanations what exactly do you want from BBDB <-> opimd integration, i also need feedback about Linphone integration : do you need it, whether the linphone mode works for you at all and what modifications are required)
  • provide user with reasonable customisation options

Screenshots of the user interface.


  • FreeSmartphone.org middleware running on host (compatible with 10 Nov 2012 git HEAD and for all the versions for about a year before)
  • Emacs 23 (with dbus support) (available both from SHR feeds and Debian repositories) (Emacs works too; Emacs 24.2.1 is known to miss signals, so do not expect it to work sanely)

Quick start guide contains everything you need to get started.


  • you can use many clients with the same FSO instance simultaneously without conflicts, e.g. running SHR on phone and fso.el on your desktop via dbus-daemon-proxy
  • configuration options can be edited with M-x customize-mode <RET>
  • xterm-mouse-mode enables mouse clicks for the text-mode frames
  • you can open another frame (either text-mode or X11) with emacsclient -c thanks to Emacs23’s multitty support
  • you can bind emacsclient -e '(fso-gsm-activate-incoming)' to a key handled by your WM to be able to activate an incoming call promptly even when the Emacs window is hidden
  • there is a set of hooks you can use to customise the status display and perform various actions on certain events, e.g.
(add-hook 'fso-status-buffer-hook
          (lambda ()
            (condition-case nil
                (let ((sc (fso-gsm-get-serving-cell)))
                  (insert "\n\n\nServing cell information:\n\n")
                  (insert (format "LAC: %5d   CID: %5d   ARFCN: %3d\n"
                                  (cdr (assoc "lac" sc))
                                  (cdr (assoc "cid" sc))
                                  (cdr (assoc "arfcn" sc))))
                  (insert (format "TA: %2d   RXLEV: %2d   TXLEV: %2d"
                                  (cdr (assoc "tav" sc))
                                  (cdr (assoc "rxlev" sc))
                                  (cdr (assoc "txlev" sc)))))
              (error nil))))

General Emacs on smartphone hints:

  • Emacs takes very long to start if you have no network connectivity and non-empty /etc/resolv.conf
  • ido-mode saves quite some typing when switching buffers and opening files
  • in customisation options for erc disable the fill module, it’ll save you some precious screen estate, timestamps should either be disabled or Erc Insert Timestamp Function set to Left (alternatively, activate Hide Timestamps and Echo Timestamps and you’ll be able to see the timestamp of any message by moving point to it)
  • BitlBee is a nice IRC<->IM (Jabber/XMPP and others supported by libpurple) free gateway software and service, you might like to use it for your IM’ing needs
  • I sometimes accidentally press in the echo area and the screen splits in half to show *Messages*. To avoid that, use
(global-set-key [down-mouse-1]
                (lambda (start-event)
                  (interactive "e")
                  (let ((w (posn-window (event-start start-event))))
                    (if (or (not (window-minibuffer-p w))
                            (minibuffer-window-active-p w))
                        (mouse-drag-region start-event)))))

Please send your feedback to:
Smartphones-userland mailing list with Cc to “Paul Fertser <fercerpav@gmail.com>”

Enjoy and happy hacking! :)