gpt4 book ai didi

shell - 是否可以从 emacs 向 xterm 发送 'cd' 命令?

转载 作者:行者123 更新时间:2023-12-01 16:57:29 26 4
gpt4 key购买 nike

在 Emacs 中,我不喜欢 shell-mode/eshell-mode因为他们无法充分利用zsh而且它们很糟糕。

所以我希望使用xterm作为外部子进程。

(global-set-key (kbd "M-<f2>")
(lambda () (interactive)
(start-process "XTerm" nil "xterm")))

现在xterm的密码已经和Emacs同步了default-directory现在这个词已经是一个完整的词了。但有一个问题:子程序的启动时间总是令人失望。

所以我希望只在 Emacs 中启动 xterm 一次,如果它发现有一个名为 XTerm 的子进程。运行,1)切换到它2)将xterm中运行的shell的PWD设置为default-directory Emacs 的。

可以这样做吗?

如果两者都不可能,则使用 tmux ,我们能实现这个目标吗?

最佳答案

这是我的设置:

(defvar terminal-process)
(defun terminal ()
"Switch to terminal. Launch if nonexistant."
(interactive)
(if (get-buffer "*terminal*")
(switch-to-buffer "*terminal*")
(term "/bin/bash"))
(setq terminal-process (get-buffer-process "*terminal*")))

(global-set-key "\C-t" 'terminal)

您能详细说明一下启动时间吗?我的是0.3s左右。

UPD 我的 dired 自定义的一个小片段

我的 dired 设置中有这个:

(add-hook
'dired-mode-hook
(lambda()
(define-key dired-mode-map (kbd "`")
(lambda()(interactive)
(let ((current-dir (dired-current-directory)))
(term-send-string
(terminal)
(format "cd %s\n" current-dir)))))))

其中终端是:

(defun terminal ()
"Switch to terminal. Launch if nonexistant."
(interactive)
(if (get-buffer "*terminal*")
(switch-to-buffer "*terminal*")
(term "/bin/bash"))
(setq terminal-process (get-buffer-process "*terminal*")))

它的作用是为与 dired 缓冲区相同的目录打开一个终端,重用现有的*terminal*,或者创建一个新的(如果不存在)。

总结您的问题的答案:

是的,这是可能的。完成后:

(term-send-string
(terminal)
(format "cd %s\n" default-directory))

关于shell - 是否可以从 emacs 向 xterm 发送 'cd' 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17813587/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com