这让我疯狂了很久,我想知道是否有办法解决它?希望我可以很好的形容情况.
为了简单起见,说我有以下目录结构:〜jer / dirA和〜jer / dirB
在emacs内的shell中,我从我的顶级目录(〜jer)开始,键入’cd dir’,然后点击tab.
我的窗口分为2,我有一个*达成*缓冲区.这很酷;我看到我的选择是’dirA’和’dirB’,我键入一个’A'(所以我的完整命令是’cd dirA’),然后按回车键,但*达成*缓冲区保持打开,我必须手动关闭它(通常使用’Cx 1′,因为我在我要保存的shell缓冲区中,但是如果我已经有一个分割窗口,这更令人讨厌,因为* Completions *缓冲区取代了另一个已经在那里,我必须切换到那个,并按Cx k手动杀死它).
所以我的问题是:一旦完成我的命令,有没有办法使* Completions *自动死机?在上面的例子中,一键输入’cd DirA’后,我打算输入缓冲区即可.
谢谢,我希望这是有道理的.注意,我不认为这是Is there any way to automatically close filename completetion buffers in Emacs?的重复,因为这是关于使用find-file(在这种情况下* * Completions *缓冲区关闭.
我想这正是你想要的.
每次输入命令时都会执行delete-completion-window-buffer功能.它找到所有当前窗口,并从中获取缓冲区.检查缓冲区的名称是否“* Completions *”,缓冲区让你生气,如果是这样杀死缓冲区并删除相应的窗口.
最后,它将输出字符串传递给您的下一个钩子comint-preoutput-filter-functions.
为什么有输出参数?请参阅comint-preoutput-filter-functions的文档.最好在那里解释
每次输入命令时都会执行delete-completion-window-buffer功能.它找到所有当前窗口,并从中获取缓冲区.检查缓冲区的名称是否“* Completions *”,缓冲区让你生气,如果是这样杀死缓冲区并删除相应的窗口.
最后,它将输出字符串传递给您的下一个钩子comint-preoutput-filter-functions.
为什么有输出参数?请参阅comint-preoutput-filter-functions的文档.最好在那里解释
(defun delete-completion-window-buffer (&optional output) (interactive) (dolist (win (window-list)) (when (string= (buffer-name (window-buffer win)) "*Completions*") (delete-window win) (kill-buffer "*Completions*"))) output) (add-hook 'comint-preoutput-filter-functions 'delete-completion-window-buffer)
但是,实际上,完成缓冲区不会给我很多困扰.令人困扰的是,这个命令是“清除”的
工作得很好为了解决你的问题我goolge shell模式,没有什么.
但是我有一个解决我的问题EmacsWiki.
(defun clear-shell () (interactive) (let ((comint-buffer-maximum-size 0)) (comint-truncate-buffer))) (define-key shell-mode-map (kbd "C-l") 'clear-shell)
我绑定到Ctrl-L,正常的终端绑定.尼斯代码希望你喜欢!