【问题标题】:Emacs and ansi-term: Elisp iterate through a list of buffersEmacs 和 ansi-term: Elisp 遍历缓冲区列表
【发布时间】:2012-04-02 20:58:09
【问题描述】:

我正在使用以下代码打开 ansi-term。我找到了这个here

(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-term 正在运行,它会询问我是否要重命名它。我将其重命名为 BUILD。我想要一个函数并绑定到 Say [F3] 以遍历打开的 ansi-terms 列表。

我是一个 ELISP 文盲。很高兴有人指出可以帮助我做到这一点的参考资料。

谢谢。

【问题讨论】:

    标签: emacs elisp


    【解决方案1】:

    以下代码/绑定循环遍历主要模式为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)))))
    

    【讨论】:

    • @Tery Jackson:谢谢,正是我想要的。
    • @Tery Jackson:嗨,当我第一次尝试这个时,我只尝试了 2 个可以正常工作的术语......但是有多个这样的术语:. * 另一个 20 项:char run * 其他 20 个项:char run * 一些 19 项:char run 这个循环仅通过最近打开的缓冲区中的 2 个... 如何消除此限制?谢谢。
    • @Tery Jackson:非常感谢......现在它循环通过所有开放的 ansi-term 缓冲区。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    • 2012-09-14
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多