或许是异想天开之类的,想在手机端能够通过ssh链接emacs使用。

不过,虽然termux能够有软键盘能够输入Ctrl之类的前置特殊键,但是,想在移动端使用Ctrl之类的快捷键进行操作太过麻烦。因此打算设置一些新的快捷键(或者说输入序列……?),通过移动端的 符号 功能快速输入。

在这里记录一下折腾的过程

前戳字符

由于Ctrl之类的前戳字符输入很麻烦,所以需要选择一个新的,比较方便插入的符号作为前戳字符。而且,为了避免出现误触发的情况,最好应该选择一个冷门字符。

就选择一个在unicode标准中「自定义区域」1的符号。嗯,就决定是""这个符号了,U+F8FF。

1
注:视平台/浏览器/字体不同,符号可能无法正常渲染显示。一般来说至少能够看到一个黑色框框(显示为一个占位符,表示使用的字体中没有这个符号)。如果看不到这个""符号,完全不显示的话,下面会用"%"符号重复代替表示其中一部分。请自行将""或“%”替换成打算用作前置符的不常使用的字符。

emacs配置前戳键

emacs中,配置快捷键是通过 global-set-key 函数进行的。不过,直接尝试用""(%)这个字符开头的绑定序列并不能正常工作。

1
2
(global-set-key (kbd " 关 闭 窗 口") 'delete-frame)
;;;(global-set-key (kbd "% 关 闭 窗 口") 'delete-frame)
1
2
报错提示: global-set-key: Key sequence  关 闭 窗 口 starts with non-prefix key 
;;;;global-set-key: Key sequence % 关 闭 窗 口 starts with non-prefix key %

就像这样,报错“键序列不是以前戳键开头”的错误,因为u+f8ff并不是emacs所认可的前置键,所以还需要想办法将这个符号映射为前戳键。

使用 define-prefix-command 函数来配置一个键序列2, 3

1
2
(define-prefix-command 'u+f8ff-map)
;;;u+f8ff-map可以替换成其他名称,大概

然后,再调用 global-set-key 将键序列与前戳键符号""(或"%")进行关联。

1
2
(global-set-key (kbd "") 'u+f8ff-map)
;;(global-set-key (kbd "%") 'u+f8ff-map)

嗯,就这个emacswiki关于前戳键的介绍页面3来看,只执行上述步骤,有时候可能会由于编码问题而不工作。不过我没有遇到到,就不介绍了。

1
2
3
4
5
6
7
8
9
(global-set-key (kbd "打开") 'find-file)
(global-set-key (kbd "保存") 'save-buffer)
(global-set-key (kbd "撤销") 'undo)
(global-set-key (kbd "关闭窗口") 'delete-frame)

(global-set-key (kbd "%打开") 'find-file)
(global-set-key (kbd "%保存") 'save-buffer)
(global-set-key (kbd "%撤销") 'undo)
(global-set-key (kbd "%关闭窗口") 'delete-frame)

最后,像这样慢慢配置各种各样的输入序列,就可以了。

百度输入法(安卓版)配置符号文件

百度输入法支持导出和导入符号文件,可以通过在符号文件中记录序列来执行操作

首先,进入百度输入法的设置界面(「系统设置-语言或输入法-输入法管理-百度输入法-设置」或者「输入法面板-更多设置」进入)

然后,进入「高级设置」

选择「符号文件」,再选择「导出符号文件」

然后,一般就会在 /storage/emulated/0/baidu/ime/sym.ini 导出一个符号文件。

默认符号文件内容大致如下

1
2
3
4
5
6
7
8
[中文符,1,0] , 。 ? ! : 、 @ …… “” ; ‘’ ~ . - () 《》 〈〉 〔〕 * & [] 【】 —— · ` # ¥ % ˇ • + = {} ˉ ¨ . | 〃 ‖ 々 「」 『』 〖〗 ∶ ' " / * & \ # $ % ︿ _ + - = <
[英文符,1,0] , . ? ! : / @ ... " ; ' ~ ( ) < > () [] {} <> * & [ ] \ ` # $ % ^ _ + - = { } |
[网络,1,0] . / @ www. wap. blog. bbs. .com .cn .net .org http:// ftp:// @126.com @163.com @sina.com @sina.cn @hotmail.com @live.cn @gmail.com @qq.com @sohu.com
[数学,0,0] +-×÷≈≡≠=±√≤≥<>≮≯∷╱╲∫∮∝∞∧∨∑∏∪∩∈∵∴⊥∥∠⌒⊙≌∽≒≦≧º¹²³ⁿ½¼¾⅛⅜⅝⅞$%F′″℃Å¢£¥¤℉‰ℓ㏄㎜㎝㎞㎡㎎㎏Ω
[箭头,0,0] ↖↑↗←↹→↙↓↘
[平假,0,1] あいうえおぁぃぅぇぉかきくけこがぎぐげごさしすせそざじずぜぞたちつてとだぢづでどっなにぬねのはひふへほばびぶべぼぱぴぷぺぽまみむめもやゆよゃゅょらりるれろわをんゎ
[片假,0,1] アイウエオァィゥェォカキクケコガギグゲゴサシスセソザジズゼゾタチツテトダヂヅデドッナニヌネノハヒフヘホバビブベボパピプペポマミムメモヤユヨャュョラリルレロワヲンヮ
[制表,0,1] ┌┍┎┏┐┑┒┓─┄┈├┝┞┟┠┡┢┣│┆┊┬┭┮┯┰┱┲┳┼┽┾┿╀╁╂└┕┖┗┘┙┚┛━┅┉┤┥┦┧┨┩┪┫┴┵┶┷┸┹┺┻╄╅╆╇╈╉╊╋

要往里面添加符号的话,需要符合符号文件的格式,其格式如下4

  • 开头的方括号记录着符号的一些原始信息
    • 方括号的第一个参数是符号类目名称,不建议超过三个中文(全角)或4个英文(半角)字符
    • 第二个参数则是作为分隔符号的空格的数量,此值越大,则作为分隔符号所需要的空格越多。
    • 第三个参数只有0或1,表示此符号面板是否默认锁定(手动返回输入界面),还是输入一次后自动返回输入界面。0不锁定,1锁定
  • 然后,方括号后则放置准备增加的符号文件
1
2
[emcs,1,1] 打开 撤销 选择 剪切 复制 粘贴 执行 取消 保存 另存为 切换窗格 关闭窗口 杀死缓冲区
[emcs,1,1] %打开 %撤销 %选择 %剪切 %复制 %粘贴 %执行 %取消 %保存 %另存为 %切换窗格 %关闭窗口 %杀死缓冲区

类似于这样子,符号组叫做emcs,各个符号之间的分隔符号为1个空格,默认锁定。

在把新加入的符号追加进去后,就可以导入了。

一些建议?以及简要的配置

这里,虽然设置的是快捷键,不过,与其说是快捷键不如说是操作序列,或者说按钮?

因此,比起方便输入,可能选择可读性更好的方式或许更好?

最终配置的效果大致如下图

然后,这边目前的配置大致如下(注:有对于awesome-tab插件的快捷键部分)

  • lisp

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    ;;;配置前戳键
    (define-prefix-command 'u+f8ff-map)
    (global-set-key (kbd "") 'u+f8ff-map)
    ;;;配置快捷键
    ;;;;emcs
    (global-set-key (kbd "打开") 'find-file)
    (global-set-key (kbd "撤销") 'undo)
    (global-set-key (kbd "选择") 'set-mark-command)
    (global-set-key (kbd "剪切") 'kill-region)
    (global-set-key (kbd "复制") 'kill-ring-save)
    (global-set-key (kbd "粘贴") 'yank)
    (global-set-key (kbd "执行") 'execute-extended-command)
    (global-set-key (kbd "取消") 'keyboard-quit)
    (global-set-key (kbd "保存") 'save-buffer)
    (global-set-key (kbd "另存为") 'write-file)
    (global-set-key (kbd "切换窗格") 'other-window)
    (global-set-key (kbd "杀死缓冲区") 'kill-buffer)
    (global-set-key (kbd "关闭窗口") 'delete-frame)
    ;;;;;标签组
    (global-set-key (kbd "标签←") 'awesome-tab-backward-tab)
    (global-set-key (kbd "标签→") 'awesome-tab-forward-tab)
    (global-set-key (kbd "标签组←") 'awesome-tab-backward-group)
    (global-set-key (kbd "标签组→") 'awesome-tab-forward-group)
    (global-set-key (kbd "标签跳转") 'awesome-tab-ace-jump)
    
  • 符号文件

    1
    
    [emcs,1,1] 打开 撤销 选择 剪切 复制 粘贴 执行 取消 保存 另存为 标签← 标签→ 标签组← 标签组→ 标签跳转 切换窗格 关闭窗口 杀死缓冲区
    

大概就是这样子吧?虽然感觉没有什么用就是了……?


  1. 知乎关于这个自定义区域的一个问题https://www.zhihu.com/question/432116248/answer/1610197647 ↩︎

  2. emacs官方关于前戳键的文档(en)https://www.gnu.org/software/emacs/manual/html%5Fnode/elisp/Prefix-Keys.html ↩︎

  3. emacswiki关于前戳键的页面(en)https://www.emacswiki.org/emacs/PrefixKey ↩︎ ↩︎

  4. 符号文件修改教程-百度手机输入法吧_百度贴吧:https://tieba.baidu.com/p/2087940382?red%5Ftag=0524456151 ↩︎