C-x d *.org to list only files with
.org extension. Is there a way to make this permanent for that directory? I have to do this every time I open that directory, it would be nice to have it permanently.
How to have Dired always list only the files that have extension `.org`, for a particular directory?
EDIT: add better solution in response to comment
The earlier given solutions were the easiest I could think of (and I hoped they would satisfy your requirements). However, I now found that the exact solution to your question actually is more or less as easy.
This time, we just add the following
:filter-args advice on
(defun my-dired-org-filter-advice (args) (let ((dir (expand-file-name (file-name-as-directory (car args))))) (when (string= dir "/full-path-to-dir/") ; include final slash here (setf (car args) (concat dir "*.org"))) args)) (advice-add 'dired-noselect :filter-args #'my-dired-org-filter-advice)
I'll keep the original answer below for the alternative solutions and for the 'modification' suggestions.
It is probably easiest to simply define a custom command for it. The exact form of the function then depends on your exact requirements. Here is a simplest example, in case you'd only use it for opening a single directory.
(defun my-open-org-dir () (interactive) (dired "/path-to-dir/*.org"))
Of course, the function can be made more general, where you could prompt for selecting a dir first.
After evaluating the above code, e.g. by adding it to your init file, and restart Emacs, you can call the function via
M-x or bind the function to some key(-sequence).
If you prefer to 'modify' the original
dired (C-x d) command, then you could add a :filter-return advice on the function
dired-read-dir-and-switches to conditionally add (
*.org after the filename for certain (matching) directories.
For example, you could use the following advice for it:
(defun my-dired-org-filter-advice (output) (let ((dir (car output))) (when (string= dir "/full-path-to-directory/") ;; include the final slash (setf (car output) (concat dir "*.org"))) (print output))) (advice-add 'dired-read-dir-and-switches :filter-return #'my-dired-org-filter-advice)
where, of course, you should fill in the correct full directory path.
If you'd like to use it for multiple dirs, then replace
string= by member and pass your list of directories.
Thanks, but I didn't exactly understand how I can use this. I will be pasting the code to my
.emacsthen how do activate it?– zeynelDec 17, 2022 at 15:48
OP: You invoke it using
M-x my-open-org-dir. Or bind that command to a key and use the key to invoke it.– DrewDec 17, 2022 at 16:53
@dalanicolai: You might want to show an example of defining the advice.– DrewDec 17, 2022 at 16:55
1I have added usage instructions and an example advice to the answer. Dec 17, 2022 at 19:52
1I always prefer solutions where the code is generic and I can influence it from the outside, without having to modify it. But you are right: that's a different question.– NickDDec 19, 2022 at 16:22