Emacs启动外部GUI程序

引子

自开始折腾 Emacs 后,后遗症明显:欲用键盘操纵一切。

现在更甚,“开始”->“所有程序”->“XXX”都懒得操作,网上觅得各种快速启动软件逐一测试。花哨的,不喜,低调的我辜负了软件设计者的良苦之心;功能多的,不喜,你一快速启动软件,整那么多事儿烦不?

最后,顺心者有两款:ALTRunRunfast。可惜,都已停止维护。ALTRun 时有崩溃; Runfast 添加新程序,初次运行,无响应,需再次快捷键打开,方可运行。没娘的娃儿啊…

曙光

实为偶然得之。Win 的 Cmd 太不顺手了,各种 Google欲换之而后快,找到 Alternativeto 这个神网站,自我介绍是:

AlternativeTo is a free service that helps you find better alternatives to the products you love and hate.

于是了解到还有 ConEmucmder 等好玩好用的 console。

ConEmu

亮点多,不必多说。缺点暂有一个,不支持中文,ls下中文一片乱码。解决无果,弃。

cmder

亮点更多,阅者可 google。中文乱码可解决,但不是网上给lsalias 个别名,而是把 Git 的 ls.exe 复制到 cmder 的 bin 文件夹。

哦?!即然可以这样,那么直接给某个程序 alias 个别名,不就可以启动想打开程序!实践之:

启动 cmder,Win+Alt+p 打开设置,依次点击 Startup->Environment,在右边输入框内操作。例如要启动 firefox:

1
alias ff="C:\Program Files\Mozilla Firefox\firefox.exe"

重启 cmder,即可在命令行输入 ff 启动 firefox 了,熟悉的小狐狸来了!

至此,忽然心一动,能煮咖啡的 Emacs 难道不能做这件事吗?google 之。

万能的 Emacs

当然,Emacs 完全可以胜任启动外部程序的重任。路子还挺多:

  • 写个调用函数,放在 .emacs 里。
  • Eshell 中打开

额外辅助:Cygwin 的 run.exe 程序。

函数

还是以 firefox 为例,将以下函数放到 .emacs 里。

1
;;;; run firfox
(defun run-ff()
  (interactive)
  (w32-shell-execute "open" "C://Program Files//Mozilla Firefox//firefox.exe")
  )

打开 Emacs,Alt+x,命令行输入:run-ff

Eshell

Emacs文件来夹->.emacs.d->eshell,有个 alias 文件,用 Emacs(或其他文本编辑器)打开,填写:

1
alias run ff="C:\Program Files\Mozilla Firefox\firefox.exe"

打开 Eshell,输入ff,好了,可以告别快速启动软件了。

PS 不使用 Cygwin 的 run 也可以,会出现要么打不开有 GUI 的程序,要么打开后开启独占模式,Eshell 只有等进程退出后才能缓过劲来。