![](/img/trans.png)
[英]How can I change emacs helm-find-file default action on directory to be go inside the directory instead of open in in dired?
[英]How can I create a file in a sub-directory in Emacs Dired?
我使用dired瀏覽帶有i
的目錄及其子目錄( dired-maybe-insert-subdir
)
當光標位於子目錄中並且我執行Cx Cf
,默認目錄是緩沖區的根目錄,是否可以更改該目錄?
因此,如果我訪問/ foo / bar,然后在bar的緩沖區中插入/ foo / bar / baz的內容並將光標放在此處,則當我要求訪問文件時,使用/foo/bar/baz/
獲得一個迷你緩沖區(使用默認的快捷鍵綁定或其他快捷鍵,這對我來說無關緊要)。
以下是我自己的解決方案。
(defun dired-subdir-aware (orig-fun &rest args)
(if (eq major-mode 'dired-mode)
(let ((default-directory (dired-current-directory)))
(apply orig-fun args))
(apply orig-fun args)))
(advice-add 'find-file-read-args :around 'dired-subdir-aware)
我剛剛學習了如何使用建議功能來擴展現有功能(和宏)。 請參閱(省略號)建議功能 。
現在,如果您轉到dired下的子目錄並運行Cx Cf
,將提示您輸入正確的路徑。
更新 :
最近,我開始和(ido)Top一起玩。 在定義了dired-subdir-aware
,我可以使用以下代碼輕松擴展ido-find-file
以識別subdir。
(dolist (fun '(find-file-read-args ido-expand-directory))
(advice-add fun :around 'dired-subdir-aware))
不, default-directory
是緩沖區本地的,而不僅僅是緩沖區的一部分。 這是設計使然,無法更改它。
但是您當然可以定義一個命令,該命令選擇subdir目錄,然后在讀取文件名進行訪問時將default-directory
綁定到該default-directory
,等等。
例如,此命令將讀取一個文件名,默認目錄為您想要的文件名,然后訪問該文件:
(defun foo (file)
"..."
(interactive
(let ((default-directory (dired-current-directory)))
(list (read-file-name "File: "))))
(find-file file))
而且,開箱即用,您當然可以在另一個Dired緩沖區中訪問子目錄,該default-directory
是您想要的default-directory
。 諸如dired-do-find-marked-files
( F
)和dired-display-file
( Co
)之類的命令可以做到這一點。
但是,為什么要讓default-directory
反映您所在列表default-directory
? 您的用例是什么?
我完善了Drew對一個功能的回答 ,該功能完全滿足我的要求:
(defun dired-find-file ()
"Find a file in the current dired directory"
(interactive)
(let ((default-directory (dired-current-directory)))
(find-file (read-file-name "Find file:"))))
然后,我將此功能綁定到方便的組合鍵:
(add-hook 'dired-mode-hook
(lambda ()
(local-set-key (kbd "C-x M-f") 'dired-find-file)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.