我的~/.emacs
文件包含了在Ubuntu 12.10下使用Emacs 24打开特定文件的以下设置:
(setq dired-guess-shell-alist-user
'(("\\.pdf\\'" "okular ? &")
("\\.djvu\\'" "okular ? &")
("\\.mp3\\'" "vlc ? &")
("\\.mp4\\'" "vlc ? &")
))
当我在dired-mode
中导航到一个.pdf文件并按下!
时,它会在Okular中打开.pdf文件,但dired缓冲区被分成两个部分,第二个部分现在是一个无用的包含内容的*Async Shell Command*
缓冲区。
okular(25393)/kdecore (KConfigSkeleton) KCoreConfigSkeleton::writeConfig:
okular(25393)/kdecore (KConfigSkeleton) KCoreConfigSkeleton::writeConfig:
okular(25393)/kdecore (KConfigSkeleton) KCoreConfigSkeleton::writeConfig:
okular(25393)/kdecore (KConfigSkeleton) KCoreConfigSkeleton::writeConfig:
我该如何防止该缓冲区被打开?(除非发生错误并且此信息有用)。我在这里和这里找到了相关问题,但它们似乎处理特定的异步执行命令,而不是一般情况下的*Async Shell Command*
。(如果可能的话,我想改变异步进程的行为,而不只是针对某些文件类型)
.../lisp/simple.el
源代码中的实际函数--即defun shell-command
和defun async-shell-command
。您甚至可以创建自己的自定义函数和/或使用defalias
。在使用start-process
时,第二个参数是输出缓冲区名称--使用nil
作为第二个参数可以防止创建输出缓冲区。您可以将set-process-sentinel
与start-process
结合使用。 - lawlistasync-shell-command
的文档字符串指出:在 Elisp 中,直接调用start-process
通常更好,因为它提供了更多的控制,并且不强制使用 shell(需要引用参数)。 - lawlist