给Emacs安装一个脚踏板: 用Windows/Menu键作为key modifier
是不是觉得Emacs的按键都很长,很难记(比如打开文件是C-x C-f,矩形填充是C-x r t,CEDET跳转是C-c . j)? 想要修改吧,各个键都有自己本来的含义,Emacs留给用户的只有C-c a到C-c Z(以及其它更长更复杂的按键)。所以才会有“Emacs用户都恨不得给电脑安装两个脚踏板的说法。
ergoemacs ( http://code.google.com/p/ergoemacs/ )的keybinding是个好东西,尤其是对于普通用户,你可以用C-c拷贝、C-v粘贴, C-z恢复,C-o打开文件。 不过跟 上面同样的问题,对于老手,原来习惯的按键用不上了(尤其是是找不到原来的M-x了!);而且要是习惯了这样的按键,换个地方又无所适从了。
有没有即保留原来的按键,又能支持新的方式呢?
除了真的安装一个脚踏板, 我也不知道这个问题是否真的有答案。不过我无疑中发现了可以用目前常见键盘上的Windows键和Menu键来作为新的key modifier(可用作super或者hyper)。在Windows下只要用(setq w32-lwindow-modifier 'super)初始化一下就行了,然后它就能将Windows+i识别为S-i,于是你就可以绑定到函数了。(在Linux下如何设置待有时间再来研究)
下面是我根据这个思路搞的配置,将Menu键(在键盘右边,Emacs里面叫做apps键)和左边的Windows键都设定为hyper了,然后可以用H-c来拷贝, H-o来打开文件。
注 意对于windows键相关的组合,如果已经注册为系统热键(Windows自带的Win+r/Win+e或者程序通过RegisterHotKey注册 的),则系统优先使用,Emacs抢不到(我原本是想将Windows设置为super,Menu设置为hyper,这样就有两个"脚踏板"了,但由于我 已经用别的工具注册了大部分Windows+?键,而且键盘左边又没有Menu键,所以最后将左边的Windows和右边的Menu都绑定到了 hyper)
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 | ;;(setq w32-pass-apps-to-system nil) (setq w32-apps-modifier 'hyper ) (setq w32-pass-lwindow-to-system nil ) (setq w32-lwindow-modifier 'hyper ) ;; editing (global-set-key (kbd "H-c" ) 'kill-ring-save ) ;; copy (global-set-key (kbd "H-x" ) 'kill-region ) ;; cut (global-set-key (kbd "H-v" ) 'yank ) ;; paste (global-set-key (kbd "H-a" ) 'mark-whole-buffer ) ;; select all ( if (featurep 'undo-trees ) ( progn (global-set-key (kbd "H-z" ) 'undo-tree-undo ) (global-set-key (kbd "H-S-z" ) 'undo-tree-redo ) (global-set-key (kbd "H-y" ) 'undo-tree-redo )) ( progn (global-set-key (kbd "H-z" ) 'undo ) ( if (featurep 'redo ) ( progn (global-set-key (kbd "H-S-z" ) 'redo ) (global-set-key (kbd "H-y" ) 'redo ))))) ;; files ;;(global-set-key (kbd "H-n") 'create-empty-buffer) ;;FIXME (global-set-key (kbd "H-o" ) 'menu-find-file-existing ) (global-set-key (kbd "H-s" ) 'save-buffer ) (global-set-key (kbd "H-S-s" ) 'write-file ) ;; search (global-set-key (kbd "H-f" ) 'isearch-forward ) (global-set-key (kbd "H-h" ) 'query-replace ) (global-set-key [H-f3] 'nonincremental-repeat-search-forward ) (global-set-key [C-H-f3] 'nonincremental-repeat-search-backward ) ;; bookmarks (within buffer) ( if (featurep 'bm ) ( progn (global-set-key [H-f2] 'bm-next ) (global-set-key [C-H-f2] 'bm-toggle ) (global-set-key [S-H-f2] 'bm-previous ))) ;; completion (Emacs default: M-TAB - lisp-complete-symbol, M-/ - dabbrev-expand) (global-set-key (kbd "H-/" ) 'hippie-expand ) |
EMACS下按关键字查询chm帮助(windows)
首先,需要下载一个叫做KeyHH 的小工具,KeyHH is a program that augments HTML Help. 有了这个工具之后,可以通过如下命令行来按关键字查询帮助
1 | keyhh -MyID - #klink "keyword" foobar.chm |
于是~/.emacs配置如下就可以了:
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 | ;;KeyHH -MyHelp -#klink "ActiveX Control Wizard" htmlhelp.chm ( defun chm-keyword-lookup (typeid help-file) "lookup a keyword in a CHM file and display it" (interactive) (start-process "CHM keyword lookup" nil "keyhh.exe" (concat "-" typeid) "-#klink" ( format "'%s'" (thing-at-point 'symbol )) help-file ) ) ;;php ( defun chm-keyword-lookup-php () (interactive) (chm-keyword-lookup "PHP" "e:/Apache2.2/php_manual_en.chm" ) ) (define-key php-mode-map (kbd "C-h C-k" ) 'chm-keyword-lookup-php ) ;;python ( defun chm-keyword-lookup-py () (interactive) (chm-keyword-lookup "PYTHON" "e:/Python24/Doc/ActivePython24.chm" ) ) (define-key py-mode-map (kbd "C-h C-k" ) 'chm-keyword-lookup-py ) |
BTW: 对于.hlp文件可以用:
1 | winhlp32 -k keyword path /to/foobar.hlp |