如何使grep-find始终在窗口中打开,其中包含* ansi-term *

时间:2014-06-09 10:31:25

标签: emacs grep elisp

当我处理一个项目时,我总是在一个窗口中使用bash shell ansi-term 。是否可以指示grep-find始终在我有*ansi-term*缓冲区的窗口中打开(如果存在)?

我的功能是运行grep-find over git repo我在。我只需要在我*ansi-term*的窗口中指示函数打开。

3 个答案:

答案 0 :(得分:0)

这似乎符合您的要求,但我只是进行了非常简短的测试。

(defadvice find-grep (around switch-to-ansi-term activate)
  (let ((b (get-buffer "*ansi-term*")))
    (and b (select-window (get-buffer-window b t))) )
  ad-do-it
  (and b (delete-window)) )

答案 1 :(得分:0)

我创建了这两个函数:

(defun windows-buffer-match (regex)
  "return window for open buffer that match regex"
  (let ((list '()))
    (walk-windows (lambda (window)
                    (let ((buffer (window-buffer window)))
                      (if (string-match regex (buffer-name buffer))
                          (setq list (cons window list))))))
    list))

(defun window-match-jump (regex)
  (interactive "sBuffer: ")
  (let ((windows (windows-buffer-match regex)))
    (if (not (null windows))
        (select-window (car windows)))))

正如@tripleee在他的回答中建议的那样,我将它与devadvice一起使用:

(defadvice find-grep (around switch-to-ansi-term activate)
  (window-match-jump (regexp-quote "*ansi-term*")))

此函数也可用于在窗口中打开grep,其名称与ansi-term不同。

答案 2 :(得分:-1)

您可以使用FIFO。在你的ansi-term

mkfifo ~/ansi
while :; do cat ~/ansi; done

和其他地方

grep xyz abc > ~/ansi