繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM