2013-08-02 50 views
3

我想實現一個函數,讓我只能通過打開的目錄緩衝區循環,並跳過文件或暫存緩衝區。 我會怎麼做呢?函數只循環打開的目錄

+1

這看起來非常接近您可能要查找的內容 - 將'my-ido-ignore-dired-buffers'設置爲'nil',並將其排除在文件之外:http://scottfrazersblog.blogspot.com/ 2010/01/emacs-filtered-buffer-switching.html它甚至包含與您的其他問題有關的字體鎖示例的獎金。 – lawlist

+0

你想要一個返回一個列表(或一個函數參數)或交互功能的庫函數嗎? – seanmcl

+0

我正在尋找一種交互功能,我可以綁定到一個F鍵,只需在已打開的目錄和另一個功能之間切換以在已打開的文件之間切換 – SFbay007

回答

1

看看的TabBar模式 - 可以定義組,任何你想要的(例如,dired),並與tabbar-backward-grouptabbar-forward-group羣體之間的循環:

http://www.emacswiki.org/emacs/TabBarMode

tabbar-buffer-list-function可以用來進一步定義某些文件是否顯示(或隱藏)。

tabbar-buffer-groups是默認組,可以用setq修改爲默認組。如果您想創建其他分組方法,則可以使用tabbar-buffer-groups-function

如果dired是一個組,那麼您可以使用(setq tabbar-cycle-scope 'tabs)tabbar-backwardtabbar-forward在這些緩衝區之間切換。

0

如果您想要實施一些東西, 看看Buffer-menu-mode。它已經得到一個切換T爲 只顯示文件。 然後它只是一個問題,看看它是如何建立的名單 與

(eq major-mode 'dired-mode) 

源過濾它是相當小的奇怪665線。

0

我爲此使用緩衝區堆棧。

我寫了兩個不同的函數使用該包:一個用於在dired緩衝區之間切換,另一個用於在同一模式的緩衝區之間切換。我都緊張地使用。這就是我要做的事:

;; For shorter keybindings 
(defmacro command (&rest body) 
    `(lambda() 
    (interactive) 
    ,@body)) 

(defvar buffer-stack-mode) 

(defun buffer-op-by-mode (op &optional mode) 
    (let ((buffer-stack-filter 'buffer-stack-filter-by-mode) 
     (buffer-stack-mode (or mode major-mode))) 
    (funcall op))) 

(defun buffer-stack-filter-by-mode (buffer) 
    (with-current-buffer buffer 
    (equal major-mode buffer-stack-mode))) 

(global-set-key [(meta kp-7)] 
       (command (buffer-op-by-mode 'buffer-stack-up))) 
(global-set-key [(meta kp-9)] 
       (command (buffer-op-by-mode 'buffer-stack-down))) 
(global-set-key [(meta kp-3)] 
       (command (buffer-op-by-mode 'buffer-stack-down 'dired-mode))) 
(global-set-key [(meta kp-1)] 
       (command (buffer-op-by-mode 'buffer-stack-up 'dired-mode))) 

編輯:

我包括我使用的命令鍵綁定

+0

感謝juanleon .... 當我將您的代碼添加到我的dotemacs文件中時,我在啓動時收到此消息: 符號的函數定義爲void:command – SFbay007

+0

@Ammari,ooops ...我忘了包括一個我使用的便利宏。編輯。 – juanleon

+0

有些事情是不對的。首先你有一個額外的)在最後。 然後,我將密鑰綁定更改爲f1 - f4,如下所示: (global-set-key [f1] (command-by-mode-buffer'stack-up))) 我仍然獲取此消息: funcall:符號的函數定義是void:緩衝區堆棧 – SFbay007

0

Icicles提供了幾個方法可以做到這一點的宏。

  • 開始在Dired緩衝和做C-0 C-x b TAB

  • C-x b,然後C-x m +,然後輸入dired-mode(使用完畢),然後TAB

那些給你只Dired緩衝區作爲可用的候選人,然後您可以按名稱匹配。 使用箭頭鍵(​​,C-down),可以在與輸入匹配的緩衝區之間循環。使用RETC-g結束。

  • 前綴ARG 0意味着候選是在相同的模式作爲當前緩衝器中的緩衝器---因此上面的第一個選項。

  • 完成時,C-x C-m +提示輸入一個模式,然後過濾掉所有候選,其模式是不一樣的或從輸入的模式(在這種情況下,dired-mode)衍生---上面因此第二個選項。

C-x bIcicle模式綁定到icicle-buffer。如果您想在不同的窗口中打開緩衝區,請使用C-x 4 bicicle-buffer-other-window)。

有關更多信息,請參閱http://www.emacswiki.org/emacs/Icicles_-_Buffer-Name_Input