Отправка команд bash в открытый буфер терминала в emacs

В последнее время я пытался улучшить свою жизнь в emacs, и я сделал одну вещь: projectile а также perspective организовать мои буферы разумно.

В рамках этого я написал функцию elisp для открытия (или возврата в) именованного буфера ansi-term, который зависит от проекта. Это позволяет мне быстро подключиться к терминалу bash для проекта, на который я сейчас смотрю.

У меня возникли проблемы с выяснением ситуации после того, как я подключился к веб-сетям: можно ли отправлять команды bash в открытый буфер ANSI-Term изнутри emacs. В частности, я пытаюсь удостовериться в том, что ANS-термин буферизирует компакт-диски к правильному корневому каталогу проекта при его первом открытии. Это требует захвата контекста из projectile сначала пакет, так что это не то, что я могу шлепнуть в мой .bashrc,

В идеале я мог бы написать функцию elisp, которая:

1) выбирает буфер по имени (так как у меня может быть один открытый с уникальным именем для каждого проекта)

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))))

1 ответ

Решение

Это работает для вас? Он переключается на буфер с именем *terminal* и работает echo hello:

(defun my-echo ()
  (interactive)
  (switch-to-buffer "*terminal*")
  (end-of-buffer)
  (insert "echo hello")
  (term-send-input))
Другие вопросы по тегам