сменить каталог в osx terminal.app с emacs -nw

Допустим, я запускаю emacs -nw из DIRECTORY_A в Terminal.app (osx 10.9.5). Затем внутри 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.

Я (наивно) попытался добиться этого с помощью команды оболочки:

(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. Следовательно, изменение значения PWD из emacs, похоже, не решает проблему (возможно, я делаю что-то не так).


person Dimitar    schedule 02.04.2015    source источник
comment
возможный дубликат Emacs, изменение переменной $ PWD   -  person l'L'l    schedule 02.04.2015
comment
Спасибо за предложение, но я не думаю, что это решит мою проблему.   -  person Dimitar    schedule 02.04.2015


Ответы (2)


В качестве обходного пути в настоящее время я использую

(defun my-open-terminal-in-current-dir ()
  (interactive)
  (shell-command (concat "open -b com.apple.terminal " (expand-file-name "."))))

для открытия нового терминального приложения в текущем каталоге. К сожалению, это не очень удобно, поэтому я был бы признателен за любые идеи, как решить исходную проблему.

person Dimitar    schedule 15.04.2015

Привет, вот еще одно решение.

;; 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)))
person jidaikobo-shibata    schedule 02.09.2016