As part of some Woodchuck-related work, I’ve done a fair
amount of Python programming on Maemo. Python, being an interpreted
language, runs the source code; there is no need to compile it to some
binary representation as is the case with C. This is a great
convenience when developing for a device such as the N900: there is no
need to compile the code and copy the resulting binaries; I just edit
the code on the device and run it. The trade-off is that I need to
edit the files directly on the device: but, I want my Emacs (qemacs is
not enough!), git and the regular GNU tools. It turns out that I was
able to get pretty close.
Using Emacs to edit files on the N900 does not necessarily mean
running Emacs on the N900: Emacs’ tramp mode makes it
possible to edit files on another system! I had read about tramp mode
in the past, but most systems I use already have Emacs installed, so I
never bothered to investigate it further (or at least, it was easier
to install Emacs than learn about tramp mode). Using tramp mode to
edit a file is embarrassingly easy: you just prefix the login
information to the filename that you want to edit. In my case, I add
‘/user@n900:’ to access my home directory on my N900. (To avoid
constantly typing in your password, you’ll want to add an ssh key to
your $HOME/.ssh/authorized_keys file on your device).
Tramp mode is not just for editing: many Emacs functions support
tramp. For instance, tab completion knows about tramp, as does dired.
Even grep-find is tramp enabled: tramp knows how to run
grep and find on the remote machine!
grep-find assumes relatively feature-complete tools. By default, the
N900 includes busybox’s grep and find, which have rather limited
functionality. Happily, Thomas Tanner has packaged many of the GNU
tools for Maemo and they are just an apt-get install away. (The
packages you need are: grep-gnu, sed-gnu, findutils-gnu,
coreutils-gnu, and diffutils-gnu.)
Installing Thomas’s packages does not immediately make grep-find work:
the packages do not replace the busybox tools; the binaries are
installed in /usr/bin/gnu, which is not in the user’s default path.
To fix this problem, I first installed bash and edited my .bashrc file
And my .bash_profile to read:
I also changed the user’s default shell to bash using chsh. Now when
I run grep at the command line, I get GNU grep, not Busybox’s.
This is still not enough to get grep-find to work: by default, tramp
does not respect the PATH variable on the remote machine.
(See for more details.) This behavior can be overridden by
adding the following to your .emacs file:
(add-to-list ‘tramp-remote-path ‘tramp-own-remote-path)
Now, Emacs’s grep-find function works.
The last piece of the puzzle is working with git repositories. My
primary interface to git is via Magit. Unfortunately, Magit
v0.7, which is distributed with Debian Squeeze, does not fully support
tramp mode. Magit v1.0, however, does and it is available in Debian
testing. (Note: if you are a Magit v0.7 user and you customized
magit-diff-options, you’ll need to change the value from a string to a
list, e.g., ‘(setq magit-diff-options ‘(“–patience”))’)
This set up is great and I’m happy. As a final tweak, I tend to use
USB networking, because access over WiFi has a fair
amount of latency.