Scrivi una funzione personalizzata per dired-initial-position-hook. In questa funzione è possibile utilizzare varie funzioni dirette per cercare file ed eventualmente chiamare dired-goto-fileper spostare il punto sul file "migliore":
(defun my-dired-goto-important-file ()
"Go to an important file in the current dired buffer."
(unless (bound-and-true-p save-place)
(let ((candidates '("master.tex" "AndroidManifest.xml"))
candidate)
(while (and candidates
(not (dired-goto-file (expand-file-name (pop candidates)))))
nil))))
(add-hook 'dired-initial-position-hook #'my-dired-goto-important-file)
Di seguito spiegherò aspetti specifici di questa funzione ed evidenzierò potenziali estensioni.
Saltare ai file
dired-goto-fileritorna nilse il file non esiste nel buffer diretto corrente, quindi è sicuro chiamare senza controllo preventivo. Tuttavia dired-goto-filerichiede un nome file assoluto (errori sui nomi relativi), quindi expand-file-name.
Ricerca di file
Dired non fornisce un'API diretta per la ricerca di file. In generale, puoi iterare su tutti i file proprio come faresti su tutte le righe di un buffer:
(let (files)
(goto-char (point-min))
(while (not (eobp))
(let ((filename (dired-get-filename nil 'no-error)))
(when filename
(push filename files)))
(forward-line 1))
;; Now `files' is a list of files, which you can search for patterns
;; …
)
Tuttavia, è più comodo utilizzare le funzioni di marcatura. Basta fare attenzione a usare un marcatore "insolito" per non perdere i segni interattivi esistenti:
(unwind-protect
(when (dired-mark-files-regexp (rx ".tex" string-end) ?t)
(dired-goto-file (expand-file-name "master.tex")))
(dired-unmark-all-files ?t))
Salva modalità luogo
È inoltre necessario prestare attenzione per quanto riguarda la modalità Salva luogo, nel caso in cui sia stata abilitata. Nei buffer Dired, la modalità Salva luogo non ricorda il valore del punto come in altre modalità, ma era attivo l'ultimo punto del nome file. Ripristina questo nome di file proprio come facciamo noi: si aggancia dired-initial-position-hooke chiama dired-goto-file(in effetti è lì che ho rubato quel codice :)).
Se il nostro hook viene prima del salvataggio del luogo, la modalità Salva luogo sovrascriverà incondizionatamente la nostra posizione. Tuttavia, se viene prima del nostro hook (come nel caso in cui Save Place è abilitato dopo aver configurato questo hook), la nostra funzione sovrascriverà effettivamente Save Place che non è desiderabile. Tuttavia, come in qualsiasi buffer, Save Place imposta la variabile locale save-placesu un valore diverso da zero, quindi possiamo semplicemente controllarlo e agire solo Save Place non ha ripristinato un nome di file.
Se preferisci che Save Place sia “loose”, rimuovi il segno di spunta save-placee assicurati che il nostro hook sia eseguito dopo Save Place, abilitando prima la modalità Save Place e quindi chiamando add-hookcon un valore diverso da zero per l' APPENDargomento.
bound-and-true-p. :-)