从emacs -nw更改osx terminal.app中的目录

时间:2015-04-02 04:13:48

标签: macos emacs terminal

假设我在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的值似乎并没有解决问题(我可能做错了)。

2 个答案:

答案 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)))