【问题标题】:Sending bash commands to an open terminal buffer in emacs将 bash 命令发送到 emacs 中的打开终端缓冲区
【发布时间】:2015-10-06 19:06:34
【问题描述】:

我最近一直在努力改善我的 emacs 生活,我做的一件事是利用 projectileperspective 来合理地组织我的缓冲区。

作为其中的一部分,我编写了一个 elisp 函数来打开(或返回)一个特定于项目的命名 ansi-term 缓冲区。这让我可以快速进入我正在查看的项目的 bash 终端。

在探索互联网后我一直难以发现的是是否可以从 emacs 中将 bash 命令发送到打开的 ansi-term 缓冲区。具体来说,我试图确保 ansi-term 缓冲区在第一次打开时 cds 到正确的项目根目录。这需要首先从projectile 包中获取上下文,所以我不能将它放入我的.bashrc

理想情况下,我可以编写一个 elisp 函数:

1) 按名称选择一个 ansi-term 缓冲区(因为我可以为每个项目打开一个具有唯一名称的缓冲区)

2) 在该缓冲区中发送并执行命令

有什么办法吗?

编辑

任何有兴趣的人的最终解决方案:

(defun visit-project-term-buffer ()
  "Create or visit a terminal buffer."
  (interactive)
  (if (not (get-buffer (persp-ansi-buffer-name)))
  (progn
    (split-window-sensibly (selected-window))
    (other-window 1)
    (ansi-term (getenv "SHELL"))
    (rename-buffer (persp-ansi-buffer-name))
    (end-of-buffer)
    (insert (format "cd %s" (projectile-project-root)))
    (term-send-input))
(switch-to-buffer-other-window (persp-ansi-buffer-name))))

【问题讨论】:

  • 听起来很酷,会试一试。您是否查看过 shell-popshell-herewikemacs.org/wiki/Shell#shell-pop 他们没有完全回答您的问题,因为当您需要多个用于不同项目(我也是!)时,shell-pop 将使用一个单一的 shell 窗口,但他们的代码可能会有所帮助。

标签: bash emacs ansi-term


【解决方案1】:

这对你有用吗?它切换到名为*terminal* 的缓冲区并运行echo hello

(defun my-echo ()
  (interactive)
  (switch-to-buffer "*terminal*")
  (end-of-buffer)
  (insert "echo hello")
  (term-send-input))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    相关资源
    最近更新 更多