2012-02-25 28 views
5

EDITAR: Resulta que la segunda edición de mi archivo .emacs realmente funciona. (Vea los comentarios debajo de esta entrada.)emacs: abra todos los archivos .txt en un directorio específico en un modo principal específico

Probé un par de adiciones a .emacs para hacer que todos los archivos txt abiertos en emacs usen el modo orgmode. No funcionaron ¿Cómo puedo hacer que suceda?

;;SET EMACS AS DEFAULT MAJOR MODE TO FOR ALL FILES WITH AN UNSPECIFIED MODE 
(setq default-major-mode 'org-mode) 

;;OPEN ALL TXT FILES IN ORGMODE 
(add-to-list 'auto-mode-alist '("\\.txt$" . org-mode)) 

Además:

Sería aún mejor para abrir únicamente archivos .txt en un determinado directorio org-mode. También se agradecería cualquier sugerencia sobre cómo se podría hacer eso.

+1

El código debe abrir archivos txt en modo org. Al menos, funciona para mí. Verifique su archivo .emacs si no modifica un modo para archivos txt más tarde. –

+0

No es un .emacs muy corto porque soy nuevo en esto. Pero me acabo de dar cuenta de que ahora recibo este mensaje cada vez que inicio emacs: "Advertencia (inicialización): Se produjo un error al cargar' /Users/Klsrd/.emacs ': Fin del archivo durante el análisis:/Users/Klsrd /. emacs Para garantizar el funcionamiento normal, debe investigar y eliminar la causa del error en su archivo de inicialización. Inicie Emacs con la opción '--debug-init 'para ver un error completo en la traza inversa."¿Podría ser esa la causa? –

+1

Hay algún problema con tus archivos .emacs. Elimina todo y pon solo (agregar a la lista 'auto-mode-alist' (" \\. Txt $ ". Org-mode)) para ver si funciona –

Respuesta

2

Se puede implementar un gancho que verifica el directorio de archivos y modifica el modo de memoria intermedia:

(add-hook 'find-file-hooks 
      (lambda() 
      (let ((file (buffer-file-name))) 
       (when (and file (equal (file-name-directory file) "c:/temp/")) 
       (org-mode))))) 

Como alternativa, se puede agregar la línea de modo en el principio del archivo de texto. En este caso, emacs establecerá el modo especificado.

; -*- mode: org;-*- 
* header 1 
** header 2 
+0

No necesitas a; antes '- * - modo: org - * -' – Tom

3

la expresión regular en auto-mode-alist podría ser algo más complejo, como "^/path/to/.*\\.txt$"

4

Otra forma de hacer esto es el uso de variables de directorio local. Esto es bueno porque puede poner un archivo en cualquier directorio donde desee que este comportamiento participe, y funciona recursivamente en cualquier subdirectorio.

Cree un archivo llamado .dir-locals.el en el directorio deseado.

Aquí son los contenidos:

((nil (eval . (if (string-match ".txt$" (buffer-file-name))(org-mode))))) 

leer este modo: para cualquier major-mode (nil), eval luar la siguiente forma:

(if .... (org-mode)) 
0

I pegadas entre sí un cierto código de Oleg La respuesta de Pavliv aquí, y de yibe en elisp - File extension hook in Emacs - Stack Overflow

(defun use-org-mode-for-dot-txt-files-in-owncloud() 
    (when (and (string-match owncloud buffer-file-name) 
      (string-match "\\.txt\\'" buffer-file-name)) 
    (org-mode))) 
(add-hook 'find-file-hook 'use-org-mode-for-dot-txt-files-in-owncloud) 

De esta forma, aunque ownCloud Web y las aplicaciones para teléfonos actualmente son amigables solo con los archivos .txt, desde mi PC puedo usar el modo Org de Emacs para ellos.

(Si fijo todos .txt archivos para usar el modo Org, se rompe todotxt-mode.)

(Tenga en cuenta que owncloud es variable de una cadena igual a mi camino ownCloud.)

Cuestiones relacionadas