Emacs и ansi-term: Elisp перебирает список буферов - PullRequest
0 голосов
/ 03 апреля 2012

Я использую следующий код, чтобы открыть ansi-term.Я нашел это здесь .

(require 'term)
(defun visit-ansi-term ()
  "If the current buffer is:
     1) a running ansi-term named *ansi-term*, rename it.
     2) a stopped ansi-term, kill it and create a new one.
     3) a non ansi-term, go to an already running ansi-term
        or start a new one while killing a defunt one"
  (interactive)
  (let ((is-term (string= "term-mode" major-mode))
        (is-running (term-check-proc (buffer-name)))
        (term-cmd "/usr/local/bin/bash")
        (anon-term (get-buffer "*ansi-term*")))
    (if is-term
        (if is-running
            (if (string= "*ansi-term*" (buffer-name))
                (call-interactively 'rename-buffer)
              (if anon-term
                  (switch-to-buffer "*ansi-term*")
                (ansi-term term-cmd)))
          (kill-buffer (buffer-name))
          (ansi-term term-cmd))
      (if anon-term
          (if (term-check-proc "*ansi-term*")
              (switch-to-buffer "*ansi-term*")
            (kill-buffer "*ansi-term*")
            (ansi-term term-cmd))
        (ansi-term term-cmd)))))

(global-set-key (kbd "<f2>") 'visit-ansi-term)

Теперь я хочу изменить это так, что после переименования буфера он запоминает свое имя и когда я используюсочетание клавиш для перебора списка переименованных буферов.

, поэтому, если я нажимаю [F2] и обнаруживает, что работает ANSI-термин, он спрашивает меня, хочу ли я его переименовать.Я переименую это, чтобы сказать, BUILD .Я хотел бы, чтобы функция и привязка к Сэю [F3] повторяли полный список открытых терминов.

Я неграмотный ELISP.был бы рад, если бы кто-то указал ссылки, которые могут помочь мне сделать это.

Спасибо.

1 Ответ

3 голосов
/ 03 апреля 2012

Следующий код / ​​привязка циклически перебирает все буферы, основной режим которых term-mode:

(global-set-key (kbd "<f3>") 'cycle-ansi-term)
(defun cycle-ansi-term ()
  "cycle through buffers whose major mode is term-mode"
  (interactive)
  (when (string= "term-mode" major-mode)
    (bury-buffer))
  (let ((buffers (cdr (buffer-list))))
    (while buffers
      (when (with-current-buffer (car buffers) (string= "term-mode" major-mode))
        (switch-to-buffer (car buffers))
        (setq buffers nil))
      (setq buffers (cdr buffers)))))
...