![](/img/trans.png)
[英]OSX + Terminal.app + Emacs + make command key operate as meta
[英]change directory in osx terminal.app from emacs -nw
假设我从Terminal.app(osx 10.9.5)的DIRECTORY_A
启动emacs -nw
。 然后,在emacs中,我导航到DIRECTORY_B
(例如,使用Dired)。 在这一点上,如果我关闭emacs( Cx Cc
)或执行Mx suspend-frame
我会发现自己处于DIRECTORY_A
(当然,这是标准行为)。
我希望能够从emacss内部执行将DIRECTORY_A
(我从其调用emacs -nw
DIRECTORY_B
)更改为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
)。 但是,如果我执行Mx suspend-frame
,然后从终端的提示符下发出env
,则会得到DIRECTORY_A
。 因此,从emacs中更改PWD的值似乎不能解决问题(可能我做错了事)。
解决方法,目前我正在使用
(defun my-open-terminal-in-current-dir ()
(interactive)
(shell-command (concat "open -b com.apple.terminal " (expand-file-name "."))))
在当前目录中打开一个新的终端应用程序。 不幸的是,这不是很方便,所以我将对解决原始问题的任何想法表示赞赏。
您好,这是另一种解决方案。
;; 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)))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.