2012-04-02 11 views
0

Ich benutze den folgenden Code, um Ansi-Term zu öffnen. Ich habe dieses here gefunden.Emacs und Ansi-Term: Elisp durchlaufen eine Liste von Puffern

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

Jetzt mag ich dies ändern, so dass nach einem Puffer es erinnert seinen Namen umbenennen und wenn ich eine Tastenkombination über die umbenannte Puffer Liste iterieren.

also, wenn ich [F2] drücke und es findet, dass ansi-term läuft, fragt es mich, ob ich es umbenennen möchte. Ich benenne es um, um zu sagen, BUILD. Ich hätte gerne eine Funktion und binde an Say [F3], um die Liste der geöffneten Ansi-Begriffe zu durchlaufen.

Ich bin ein ELISP Analphabet. Ich wäre froh, wenn jemand darauf hingewiesen hätte, was mir dabei helfen könnte.

Danke.

Antwort

3

Die folgende Code/Bindungszyklen durch alle Puffer, dessen Hauptmodus 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))))) 
+0

@Tery Jackson: Danke, genau das, was ich suchte. – asp5

+0

@Tery Jackson: Hallo, Als ich das erste Mal versuchte, habe ich es mit nur 2 Begriffen versucht, was gut funktioniert ... aber mit mehreren Begriffen wie diesem:. * ein weiterer 20 Begriff: char run * andere 20 Begriff: char run * einige 19 Begriff: char führen diese Schleifen nur 2 der kürzlich geöffneten Puffer ... Wie entferne ich diese Einschränkung? Vielen Dank. – asp5

+0

@ asp5 Fixed .... –

Verwandte Themen