2015-05-24 53 views
2

我想編寫代碼,以便使用可以使用dired或其他文件對話框而不是minibuffer爲操作選擇文件。例如,他調用「獲取文件統計信息」命令,直接出現,他選擇並顯示統計信息。 (這變得更加有趣find-dired。)emacs/elisp用dired/file對話框選擇文件,然後執行操作?

但我可以看到這樣做的兩種方式 - 啓動一個帶有改變的鍵盤映射的dired,以便選擇一個文件調用一個fn來完成命令,並提供建議直接尋找文件 - 對於我認爲是一項常見任務而言似乎很奇怪。我錯過了什麼嗎?

+1

您是否在尋找像'dired-獲取文件換visit',這點得到的文件/目錄名,或'dired-GET-英文標明功能文件「,它將獲得所有標記文件/目錄下的文件/目錄名稱 - 它會返回一個列表?說實話,你的問題有點不清楚 - 也許你應該考慮澄清一下。 – lawlist

+0

以下鏈接是我稱爲'dired-read-file-name'的概念的自定義版本 - http://stackoverflow.com/q/19899595/2112489也許這就是您正在尋找的概念?當彈出打開dired緩衝區來選擇文件/目錄時,它使用'recursive-edit'。我爲文件/目錄的自定義'樹視圖'模式做同樣的事情。 – lawlist

回答

1

爲什麼不把彈出的Dired離開它,並讓用戶自己做呢?

只需將dired-mode-map中的一個鍵綁定到標記文件(或當前文件,如果沒有標記),執行任何您喜歡的操作(例如show stats)即可。

這是典型的Dired方法,Dired代碼爲您提供了所有需要的構建塊,特別是dired-get-marked-files。例如,請參閱dired-aux.el中定義的許多dired-do-*命令的代碼。

例如:

(defun my-dired-do-stats (&optional arg) 
    "Do stats for the marked files." 
    (interactive "P") 
    (dolist (file (dired-get-marked-files nil arg)) 
    (my-stats-function file)))) 
+0

或者''define-derived-mode''繼承'dired-mode',如果你想更偏離它的話。 – tripleee