2012-04-02 2 views
0

私は次のコードを使ってansi-termを開きます。私はこれを見つけたhereEmacsとansi-term:Elispはバッファリストを反復します

(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と改名します。私は関数が好きで、[F3]と結び付けて、オープンされたansi-termsのリストを徹底的に反復するように言います。

私はELISPをよく知らない人です。誰かがこれを行うのを助けるかもしれない参照を指摘してうれしいでしょう。

ありがとうございました。

答えて

3

メジャーモード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ジャクソン:おかげで、私が探していたまさに。 – asp5

+0

@Tery Jackson:こんにちは、私が最初にこれを試してみましたが、うまく動作する2つの言葉で試しましたが、このような複数の言葉で。 *別の20 Term:char run * other 20 Term:char run * some 19 Term:charこのループは、最近開かれたバッファのうち2つのみを使って実行します。ありがとう。 – asp5

+0

@ asp5 Fixed .... –