Un'altra possibile costrutto che potrebbe lavorare per questo sarebbe quello di utilizzare eval-after-load
anziché add-hook
. Imposterà i valori una sola volta all'avvio, non dovrai preoccuparti che le voci vengano aggiunte o meno (a meno che tu non ricarichi periodicamente l'org).
Combina quello con setcdr
ed è possibile evitare di dover eliminare dall'elenco e quindi aggiungere nuovamente, aggiungere if
e ti assicurerai di aggiungere o modificare il valore. L'if è necessario solo per i valori che non sono nella lista di default, solo per essere sicuri di non finire con conflitti da qualche parte lungo la linea.
(eval-after-load "org"
'(progn
;; .txt files aren't in the list initially, but in case that changes
;; in a future version of org, use if to avoid errors
(if (assoc "\\.txt\\'" org-file-apps)
(setcdr (assoc "\\.txt\\'" org-file-apps) "notepad.exe %s")
(add-to-list 'org-file-apps '("\\.txt\\'" . "notepad.exe %s") t))
;; Change .pdf association directly within the alist
(setcdr (assoc "\\.pdf\\'" org-file-apps) "evince %s")))
Modifica chiarimenti
eval-after-load
valuta solo il blocco quando (require 'org)
si chiama. Se l'org è già caricato, lo valuterà immediatamente (ho erroneamente pensato che fosse eseguito ogni volta che veniva caricata una libreria, ma sembra essere solo la prima volta). La differenza tra add-hook
e eval-after-load
è spiegata here.
Dal org-file-apps
è un defcustom
non cambierà i valori, se li si imposta prima org è caricato, se si crea la lista da zero (compresi i valori predefiniti come nella soluzione secondo (brutta)) si può semplicemente setq
in il tuo init.el e tutto funzionerebbe. Significa anche che non sovrascriverà le tue modifiche.
Aggiunta (if (assoc
alla voce PDF non male a nessuno, sarà semplicemente garantire che, se i PDF vengono mai rimossi dal default org-file-apps
che sarà ancora aggiunto. L'unica soluzione che non fallirebbe se i PDF fossero stati rimossi è il tuo secondo.Tutti gli altri presuppongono che la voce esista in una forma o nell'altra.
fonte
2012-02-02 16:32:07
A volte carico la modalità org per i buffer più volte in una sessione. Ciò influisce su questa soluzione? O è solo se uso 'org-reload'? Inoltre, potrei aggiungere un '(if (struttura per i file PDF per renderlo una prova futura? –
@NN aggiunti alcuni dettagli in una modifica che dovrebbe rispondere a questa domanda –
Grazie per la tua elaborazione. Questa soluzione è la più elegante finora . –