我目前使用的終端終結者, 和我有一個bash函數 set_title() { printf '\e]2;%s\a' "$*"; }
至極允許我設定的終止窗口標題執行shell命令
所以,我想知道,如果它是可能執行這個特定的shell命令(像這樣): set_title ##filename
在emacs中每次打開(或重新打開)上述文件?
(順便說一句英語不是我的母語,請放縱!)
我目前使用的終端終結者, 和我有一個bash函數 set_title() { printf '\e]2;%s\a' "$*"; }
至極允許我設定的終止窗口標題執行shell命令
所以,我想知道,如果它是可能執行這個特定的shell命令(像這樣): set_title ##filename
在emacs中每次打開(或重新打開)上述文件?
(順便說一句英語不是我的母語,請放縱!)
如果你的意思你在Terminator裏面運行非GUI Emacs,你想讓Terminator的標題反映Emacs中的當前文件,那麼bash位於它們之間對你來說是沒有用的:Emacs在這裏控制着。
但是你可以定義一個elisp的功能,將做同樣的工作,爲您的SET_TITLE:
(defun my-set-title (title)
(send-string-to-terminal (format "\e]2;%s\a" title)))
然後你可以通過查找文件鉤使用它:
(add-hook 'find-file-hook (lambda() (my-set-title buffer-file-name)))
注意這會將終端的標題設置爲Emacs訪問的最後一個文件,因此如果通過C-x C-b
切換回到先前的文件緩衝區,標題將不會更新以反映當前緩衝區的文件名。如果你想這樣做,你需要更多的東西:
(defvar my-last-file nil)
(defun my-keep-file-title()
(when (and buffer-file-name
(not (equal buffer-file-name my-last-file)))
(setq my-last-file buffer-file-name)
(my-set-title buffer-file-name)))
(add-hook 'post-command-hook #'my-keep-file-title)
至於建議由@丹,你可以做
(add-hook find-file-hook
(lambda()
(when (string= buffer-file-name "my-file")
(shell-command "printf ...."))))
打電話printf
當您打開"my-file"
。
但是,如果你想要的是設置幀標題(Emacs的呼籲「框架」經理所說的「窗口」什麼窗口), 您應該設置frame-title-format
,如:
(setq frame-title-format
'(buffer-file-name "%b - %f" ; File buffer
(dired-directory dired-directory ; Dired buffer
(revert-buffer-function "%b" ; Buffer Menu
("%b - Dir: " default-directory)))) ; Plain buffer
icon-title-format "%b")
你可以使用['shell-command'](http://www.emacswiki.org/emacs/ExecuteExternalCommand)和['find-file-hook'](http://www.gnu.org/software/emacs/manual/html_node/elisp/Visiting-Functions.html#Visiting-Functions)來實現此功能。 – Dan 2014-09-19 11:28:57