Android 的 Emacs 好像没法在 termux 环境下调用 emacsclient,但是可以使用 adb 打开文件:
am start -a android.intent.action.VIEW -n org.gnu.emacs/.EmacsOpenActivity -d file:///storeage/emulated/0/1.txt org.gnu.emacs
因此也可以调用 org-protocol:
am start -a android.intent.action.VIEW -n org.gnu.emacs/.EmacsOpenActivity -d org-protocol://test?a=a org.gnu.emacs
但是要先 advice 以下函数,因为传给 emacs 的参数前面会加上 emacs 的家目录导致 org-protocol 识别不了
(with-eval-after-load 'org-protocol
(define-advice org-protocol-check-filename-for-protocol
(:filter-args (args) compat-android)
"Remove prefix when called by intent."
(let ((h (getenv "HOME"))
(f (car args)))
(when (string-prefix-p (format "%s/%s:/" h org-protocol-the-protocol) f)
(setcar args (substring f (1+ (length h)))))
args)))
也就可以使用 Tasker 或者 Fooview 这种自动化或手势软件方便地执行命令:
但有个问题就是每次运行,Emacs 都会弹到前台来,假如我想后台执行命令大伙有什么想法吗,另外我没搞懂怎么使用 termux 普通的权限执行 am 命令,理论上应该是可以的
(用这个开 http 服务器能实现后台执行还能方便地返回数据,但还是想用自带的功能GitHub - skeeto/emacs-web-server: Extensible Emacs HTTP 1.1 server