2015-10-06 1 views
1

Я пытаюсь улучшить мою жизнь emacs в последнее время, и одна вещь, которую я сделал, - использовать projectile и perspective, чтобы упорядочить мои буферы разумно.Отправка команд bash в открытый буфер терминала в emacs

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

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

меня идеально было бы иметь возможность написать функцию Elisp, что:

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

2) посылает и выполняет команду в этом буфере

Есть ли способ сделать это?

EDIT

Окончательное решение для тех, кто заинтересован:

(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)))) 
+0

Звучит здорово, что даст попробовать. Вы заглянули в «shell-pop» и «shell-here»? http://wikemacs.org/wiki/Shell#shell-pop они не полностью отвечают на ваш вопрос, потому что shell-pop будет использовать одно окно оболочки, если вы хотите много для разных проектов (и меня тоже!), но их код может помочь. – Ehvince

ответ

4

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

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

Отлично, да, это работает. :-) – cmw

 Смежные вопросы

  • Нет связанных вопросов^_^