站友福音:在水木bbs上用Emacs的键绑定
作为一个Emacs狂人,在用ssh上水木发贴子的时候发现 C-y
会把整行都删掉而不是
粘贴简直让我快疯了。疯了疯了疯了疯了!
下面说一下我用Expect实现的一个上水木的 bbs-robot 脚本(其实现中用到的代 码生成的编程技巧见 给任意语言插上宏定义的翅膀 )。
用法(如果在utf-8的locale下用需要一个额外的 gbk-exec 脚本,如果在gbk环 境下用的话需要自己改一下bbs-robot,把gbk-exec删掉):
bbs-robot -- -u USERNAME -p PASSWORD -b emacs
主要功能有:
- 根据参数指定,自动登录并选择版面
- 加
C-q
前缀可以取得各个C-
按键原本的功能 (quoted-insert) - C-p/C-n键上下移动,C-f/C-b前进后退,等等等等
- C-o(open-line),C-y(yank)
其中C-y是指把系统剪贴板中的内容粘贴上去(与gnome-terminal等的右键-> 粘贴功能一致),是用命令行上的clipboard工具xclip(1)程序实现的。
- 重头戏:
C-c t
/C-c n
/C-c p
不论在普通模式下还是在原作模式下,分别用来作当前主题、下一主题和上一 主题的同主题阅读。
实现这个功能的好处与
C-g 2
的同主题阅读模式相比是显而易见的 (C-g 2
不能方便傻瓜的跳到下一主题、上一主题)。另外如果你在 原作 模式下按C-t
的话,你会看到下面这样的一段话(从而让这个原作模式显 得相当的鸡肋):水木社区快捷键回收第一号令 同志们,朋友们!快捷键回收啦! 您刚才按的键已经被技术站务私吞。 请使用 Ctrl+G 2 进入同主题阅读 ╭︿︿︿╮ {/-◎◎-\} ( (oo) ) ︶
所以我们的这几个按键,就相当于让那个猪头把那个快捷键“吃了我的给我吐 出来”了:-)
以
C-c t
为例,这个快捷键真正发过去的按键是:& $CTRLG 4 $CTRLM q $RIGHT $RIGHT
- 第一个
&
字符不论当前在阅读还是在列表界面,都会回到列表界面并跳 到同主题第一篇(即使当前是“原作”模式也不影响&
的功能)。 - 接下来的
$CTRLG 4 $CTRLM
会强制切换到“原作”模式(即使当前已经在 原作模式),并且继续保持在列表界面。而因为之前已经跳到同主题第一篇, 所以即使这时候模式从普通变为原作也继续指向这篇文章。(Edit: 注意我刚发现此技巧只能在原作模式下已经看过一篇文章的情况下 才能正确工作,否则从普通模式跳到原作模式并不会指向同一篇文章:从原 作模式退出到普通模式总是会指向该主题第一篇,但从普通回到原作模式则 还是指向原来的文章)
- 接下来的
q
会切换到普通模式,并且保持在同主题第一篇 - 接下来的两个
$RIGHT
会进入同主题阅读
- 第一个