1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
#+TITLE: My Emacs on Android Setup
#+DATE: 2020-09-11T03:03:37Z
#+DRAFT: true
#+DESCRIPTION:
#+TAGS[]: emacs android termux
#+KEYWORDS[]: emacs android termux
#+SLUG:
#+SUMMARY:
#+ATTR_HTML: :title Android, Termux, and Emacs
#+ATTR_HTML: :alt Android, Termux, and Emacs
[[file:cover.png]]
Not too long ago I purchased a Samsung Galaxy Tab A. I bought it
mostly for browsing the internet and reading PDFs, but I've been using
it a lot more for working in Emacs recently.
With the help of Termux, I've gotten more or less a fully operational
development and writing environment which has both a small size, and
long battery life. With the use of a bluetooth keyboard, I have
everything required to work, and comfortably at that.
I use the HHKB Professional Hybrid, which I highly recommend for the
task, as it's nearly impossible to rebind keys on Android, and I need
the control key to be in the place of caps lock to be effective at
using Emacs.
In addition, I have a stand case for my tablet, so it is able to sit
up in landscape mode by itself.
It's also possible to connect a bluetooth mouse, then to enable
=xterm-mouse-mode= in Emacs, but I rarely find that necessary.
Thanks to the mostly frontend agnostic nature of Emacs, everything I
would normally do on my desktop computer or laptop work almost
identically when working from within Termux.
I actually often find it much easier to write on my tablet than I do
on my computer, since the fullscreen nature of Termux tends to stop me
from getting distracted by other things I'm working on in the
background.
#+ATTR_HTML: :title The Emacs welcome screen
#+ATTR_HTML: :alt Emacs running on termux, showing the emacs welcome screen
[[file:termux emacs screenshot.jpg]]
The first thing I had to do was install Emacs and git, which are as
easy as running a single command.
#+BEGIN_SRC shell
pkg install emacs git
#+END_SRC
Since I host my Emacs on [[https://github.com/dantecatalfamo/emacs.d][GitHub]], getting things started here is
effortless. All I had to do was clone it onto my system, and open
Emacs, it even sets itself up courtesy of =use-package=, which
installs all the required packages and dependencies without requiring
my intervention.
Because I host my blog's contents in a git repository as well, I'm
also able to clone that and work on it using the =hugo= package.
#+BEGIN_SRC shell
pkg install hugo
#+END_SRC
I can even run the development server in a =shell= buffer in Emacs and
check out how the post I'm writing looks in Firefox, all on the
tablet. In fact, this post itself was written entirely from my tablet!
From there I'm able to much of the same things as I do anywhere
else. For writing C, I installed =clang= and =gdb=, which are both
available from the default repo as well.
#+BEGIN_SRC shell
pkg install clang gdb
#+END_SRC
This setup works particularely well because of Emacs' excellent =gdb=
debugging interface. Thanks to not needing any sort of graphical
interface beyind Emacs, my ability to get things done is completely
unhindered. I'm a huge fan of =gdb= mode, especially with =(setq
gdb-many-windows t)=.
#+ATTR_HTML: :title An example gdb session in Emacs
#+ATTR_HTML: :alt An example gdb session in Emacs
[[file:termux emacs gdb screenshot.jpg]]
I'm also able to work on my Org documents, which I store in a personal
Nextcloud instance, thanks to =rclone=. I have two small scripts which
I've written so I'm able to sync the files before I start editing
them, and after I'm done.
Setting up =rclone= to work with my nextcloud instance is incredibly
easy and only took me a minute using [[https://rclone.org/webdav/][this]] guide from the =rclone=
website.
Both scripts are incredibly simple, consisting mainly of a single line each.
=nextcloud-pull.sh=
#+BEGIN_SRC shell
#!/bin/sh
echo
echo "############################"
echo "## PULLING FROM NEXTCLOUD ##"
echo "############################"
echo
rclone sync -i nextcloud:Org Org
#+END_SRC
=nextcloud-push.sh=
#+BEGIN_SRC shell
#!/bin/sh
echo
echo "##########################"
echo "## PUSHING TO NEXTCLOUD ##"
echo "##########################"
echo
rclone sync -i Org nextcloud:Org
#+END_SRC
There's even a spectacular third-party repository called [[https://github.com/its-pointless/its-pointless.github.io][its-pointless]],
which provides tools which aren't available in the main Termux
repo.
Perhaps most importantly from an Emacs perspective, they province
=ecl=. Because to this, I'm able to have a full interactive Common
Lisp development environment on my tablet. There's something about
that I find really cool! Of course because of how =ecl= works, the
first time I launched =sly= it took a couple seconds while =ecl=
compiled everything.
Something which is important to note is that even though it's not
installed as a dependency by default, =ecl= requires the
=libatomic-ops-dev= package in order to function correctly.
They also provide an up to date version of [[https://raku.org/][Raku]], a language which I
really enjoy toying around with, along with [[https://julialang.org/][Julia]], [[https://www.gnu.org/software/octave/][octave]], and [[https://www.r-project.org/][R]],
among other things.
|