假设我在Terminal.app(osx 10.9.5)中从emacs -nw
启动DIRECTORY_A
。然后,在emacs内部,我导航到DIRECTORY_B
(例如,使用dired)。此时,如果我关闭emacs(C-x C-c
)或我M-x suspend-frame
,我发现自己在DIRECTORY_A
(当然这是标准行为)。
我希望能够从emacss中执行一个命令,该命令将DIRECTORY_A
(我调用的目录emacs -nw
)更改为DIRECTORY_B
(emacs中的当前目录)。因此,当我退出emacs时,我最终会进入DIRECTORY_B
。
我(天真地)尝试使用shell命令实现此目的:
(defun my-cd-to-current-dir ()
(interactive)
(shell-command (concat "cd " (expand-file-name "."))))
在*Messages*
缓冲区中我可以看到
(Shell command succeeded with no output)
但是当我退出emacs时,我仍然在DIRECTORY_A
。
澄清:
当我在emacs中更改目录时,环境变量PWD(通过M-! env
访问)的值正确反映当前目录(DIRECTORY_B
)。但是,如果我M-x suspend-frame
然后从终端的提示中发出env
,我会DIRECTORY_A
。因此,从emacs中改变PWD的值似乎并没有解决问题(我可能做错了)。
答案 0 :(得分:0)
作为解决方法,目前我正在使用
(defun my-open-terminal-in-current-dir ()
(interactive)
(shell-command (concat "open -b com.apple.terminal " (expand-file-name "."))))
在当前目录中打开一个新的终端应用程序。不幸的是,这不是很方便,所以我很感激如何解决原始问题的任何想法。
答案 1 :(得分:0)
嗨,这是另一种解决方案。
;; thx http://superuser.com/questions/466619/open-new-terminal-tab-and-execute-script
;; thx http://qiita.com/ganmacs/items/cfc5f9c2213a6a9e6579
(defun cd-on-terminal (&optional command)
"Change directory to current buffer path by Terminal.app. COMMAND is execute after cd."
(interactive)
(util/execute-on-terminal
(concat (format "cd %s" default-directory) command)))
(defun util/execute-on-terminal (command)
"Change directory to current buffer path by Terminal.app. COMMAND."
(interactive "MCommand: ")
(do-applescript
(format "tell application \"Terminal\"
activate
tell application \"System Events\" to keystroke \"t\" using command down
repeat while contents of selected tab of window 1 starts with linefeed
delay 0.01
end repeat
do script \"%s\" in window 1
end tell"
command)))