QA@IT

Emacsでssh接続しているウィンドウからterminalをopenできない

2522 PV

init.elで
(defun open-terminal ()
(interactive)
(shell-command-to-string "open -a terminal"))
という関数を定義しました。

Emacsを使っている最中にこの関数を呼んでアクティブウィンドウをターミナルに切り替えています。
しかし、サーバーにssh接続したあとのdiredやサーバー上のファイルを編集している(Emacsの)ウィンドウでこの関数を呼んでもターミナルのウィンドウがアクティブになりません。
これを解決するにはどのような設定をしたら良いでしょうか。

回答

TRAMP でカレントディレクトリがリモートになっているバッファ上でうまくいかないということであっているでしょうか。

そうだとすると (message "%s" (shell-command-to-string "open -a terminal")) に書き換えて確認してみるとわかりますが、コマンドがリモートで実行されてエラーになっています。

以下のように一時的なバッファでカレントディレクトリをローカルのディレクトリにしてから実行すればうまく動いているようです。

(defun open-terminal ()
  (interactive)
  (with-temp-buffer
    (cd "/")
    (shell-command-to-string "open -a terminal")))
編集 履歴 (0)
  • すごくわかりやすい解説ありがとうございます、解決しました!
    エラーメッセージの確認の仕方や一時的なバッファの使用方などとても勉強になりました。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。