【经验分享】在 Android Emacs 中使用 doom-emacs

非常感谢 @oldosfan !让我有机会再安卓系统使用GUI emacs,并且帮助我在安卓 emacs 中成功 配置doom-emacs (对比 Android-native Emacs 和 Termux中安装的emacs - Emacs-general - Emacs China)。

目前看到的安卓emacs大多使用vanilla或者Spacemacs,因为doom-emacs配置起来确实麻烦不少😂

本经验分享的范围:

  • 初始情况:一个没有安装emacs的安卓设备
  • 目标情况:安装了GUI emacs,成功加载doom-emacs配置,并且能使用termux管理emacs使用的工具链
  • 分享内容:如何安装android emacs,以及在此基础之上,如何在Android Emacs 中使用 doom-emacs

还是更习惯用 org-mode 来写作,所以发布到了个人博客:在 Android Emacs 中使用 doom-emacs | 跬步

好久没写博客了,年久失修,src 的排版没有正确渲染,大家先将就一下。

5 个赞

我也最近装了一下,参考了 emacswiki 和楼主的。 我用的是 emacs-31.0.50-21-arm64-v8a.apk,其他 31 版没成功。 31 会比 30 快很多,我安装(doom install)用了 8 到 10 分钟。 我也尝试用 30 安装成功过,但是需要定到以前的某个提交,最新的没成功。而且安装非常慢。

安装了两个后,先打开 emacs,这样会生成一些文件。 termux 正常使用就可以。因为目录是互通的,可以写一个脚本简化安装过程。而且你可能会反复重装 emacs。

#!/system/bin/sh
emacs_data="/data/data/org.gnu.emacs"
emacs_home="$emacs_data/files"
termux_data="/data/data/com.termux"
termux_home="$termux_data/files"
ln -sf $emacs_data/lib/libandroid-emacs.so $termux_home/usr/bin/emacs
git clone --depth 1 https://github.com/doomemacs/doomemacs $emacs_home/.config/emacs
for i in $emacs_home/.config/emacs/bin/*; do
  grep -q '^#!/usr/bin/env sh' $i && sed -i '1 s;/usr/bin/env sh;/system/bin/sh;' $i
  grep -q '^#!/bin/bash' $i && sed -i '1 s;/bin/bash;/system/bin/sh;' $i
done
cat << EOF > $emacs_home/.emacs.d/early-init.el
;; -*- lexical-binding: t; -*-
(when (string-equal system-type "android")
  ;; Add Termux binaries to PATH environment
  ;; It is important that termuxpath is prepended, not appended.
  ;; Otherwise we will get Androids incompatible diff executable, instead of the one in Termux.
  (let ((termuxpath "$termux_home/usr/bin"))
    (setenv "PATH" (format "%s:%s" termuxpath
                       (getenv "PATH")))
    (setenv "PATH" (format "%s:%s" "$emacs_home/.config/emacs/bin"
                       (getenv "PATH")))
    (push termuxpath exec-path)
    (push "$emacs_home/.config/emacs/bin" exec-path)))
EOF

在 termux 中执行后,在 emacs shell 中 doom install 就可以。

最后把 .emacs.d 删除,链接到 .config/emacs 就可以了。

感谢分享,从 在 doom-emacs 升级不兼容后,再次讨论 emacs 的配置 之后,我又从doom回到vanilla了,没有那么酷炫,但是更稳定

啊,应该不至于吧。

我是在 nixos 上用 doomemacs,它有定版本,大不了回退到那里去,应该没事。

因为 emacs 会保留前面的版本,应该会越来越好才对。

doom emacs 也可以定外部仓库的版本,小心一点,把需要用的文件都进 git,应该是没问题的,吧?

你可以看下我上面的帖子,看下其他人的讨论。只要一开始花点时间配置,vanilla有种如臂使指的快感,doom有时必须了解它的封装才能改对

我现在主要把doom作为学习材料

我试过,不行,太费时间了。不对,是我太菜了。

我觉得你的问题是,不能回滚,所以炸了。但是,因为这个,就从零开始写,是不是有点,过了。因为,你把原来的一个问题用一个更复杂的问题来代替。

doom这个问题在我这里不是第一次了,以前通过重装都解决了,这次回滚重装也解决不了。封装带来操作简便的同时,也增加了理解的困难。

没有哪个更好,只有哪个更适合自己。

对我来说,我已经从「快点实现这个功能」进入到了「希望理解功能是怎么实现的,愿意花时间配置,不要安装一堆我不知道是干什么的package」的阶段。懒猫等人的回复让我觉得,为了这个目标,从doom转向或许是个必然的选择。

1 个赞

并不是用更复杂的问题来代替。doom 本身就是从简单的配置慢慢累积了这么多年累积起来的,中间还有重构。但是这个演变的过程,普通用户是无感知的。但自己从 vanilla 慢慢累积的配置是实打实自己掌握的配置,掌握了每个细节和演变过程,为什么要这么写,这么写实现了什么功能,接续了自己哪些工作流程,都是一清二楚的。对于普通用户来讲,doom 才是复杂的系统,自己累积的配置才是简单的系统。

我觉得不值得。

其实,你自己写的代码,三个月或者一年后,也会变成「别人」的代码。

我觉得「重写」比原版越好的情况下,越有价值。

如果是为了回避一些问题,个人的话,最好不要,你就失去了解决的问题机会。商业的话,相反吧。

我自己写的当然会最接近我的理想,最好,最稳定,但我需要不是最好,是更好。使用别人的代码是必须的。

我转到手机上面也是这样,配置也是从十几年的电脑配置开始精简重构,还要适配手机的触屏,不过是在termux下面跑emacs,资源占用更低,目前基本上满足了手机的日常应用

你也说了,那是你而已

怎么就默认别人的更好了,那只是一套解决方案。自己学着写的一开始当然不够好,借鉴他人不可耻,慢慢地就会越来越好,doom作者也不是生来就会写代码的。

对,这是我思考方式的不同。如果我喜欢简单,我还是用我的 vim 就可以了。

这可以更抽象,我们用别人的代码是通过代码,程序在和作者和交流,这和文学非常像。

这也是我为什么说,需要更好的重写,就相当于把我的想法告诉别人。

如果是我写给我自己,就修日记一样,可以写也可以不写。

不是别人的代码,是我需要更好,这个更好可以是别人的,也可以是自己写,问题是你怎么做到呢?

就是要不停看,用别人的代码,看别人的代码,把自己的和别人的比较。

你需要更好的,你当然可以自己写也可以去找现成方案,不过别人是选择现成方案还是自己从头攒配置貌似也是自由的吧,你这样搞得好像是谁要强迫你改变一样

这,就很奇怪。

我在看待这件事的时候,我觉得这是一个消极的回应。好像很多人告诉他应该这么做,本人好像认为这是一个很正面的决定。

关键是,这个世界上就有很多你从来不知道,但你会觉得应该早点知道的东西。

能不能不要我觉得我认为,尊重一下每个人的独立自主的选择权,实在是绷不住了,我就是非it人士,大部分包我都不明所以,只对我自己实现的包了解相对深入一些,对于类似我这种情况的使用者群体,实现需要的功能,让它能用就是目的,不需要向你这样那么深入,如果在后续使用有兴趣进一步那自然会去了解,这是一个顺其自然的过程,不需要那么刻意

另外建议你开个新帖,相信有人会愿意跟你继续深入讨论,不要把楼带歪了

没事没事,大家理性讨论。

如果我没理解错, @Ellen_Cotto 的核心观点是,使用社区配置可以通过给上游报bug提升社区配置,理解社区配置提升自身水平。这个观点我是认可的。

所以,我觉得如果新手没有人带领,从社区配置入手也是不错的选择。

至于用了一段时间之后,究竟是继续用社区配置更适合自己,还是换成其他方案更好,每个人会根据自己的情况有不同的选择。

我理解也接受在现代社会,会有很多事情不需要我深入了解,也能默默地良好运行。企图弄清每个细节是不现实的。只要在需要的时候有办法理解相关事物即可。

现在的问题是,当我调整配置时,除了需要理解emacs,还需要理解doom-emacs的封装、理解每次变更的影响范围是什么,多少是额外的认知成本。而且,在手机端的配置确实没有vanilla方便。

1 个赞

我还没放弃 :smiling_face_with_tear:

这是不对的,需要先打开 termux,再是 emacs。

在 emacs 中使用 rime 输入法

一般会 (setq overriding-text-conversion-style nil) 关闭输入法,但实际上输入法还是在的。

我用的是 f-droid 上的 trime,它的配置文件夹可以设定,方便我们用 adb 把配置文件上传。

可以在 trime 中让候选框跟随光标并在浮动。

但这样你打开 emacs 还是看不到候选框,我不知道原因,但有一个方法。

你可以用安装一个可以切换输入法的工具,比如 f-droid 的 8vim,切换到 8vim 中,切换中英文状态,或者换另一个输入法,再换回 trime,或者关闭 8vim 再来。直到你可以看到候选框,再切回到 emacs 中,你就可以看到候选框了。

你可以切换其他应用,只要 emacs 不关闭。换句话说,只要你关闭了 emacs,就需要重来一遍。

可以装一个 Edge Canary,它可以安装插件,是的,你可以用 vimium c,在手机上。

这样你就具备了一个简单的环境,一个浏览器和编辑器,而且都用键盘控制。

1 个赞

试试安卓上的另外一个rime输入法。