2010-03-06 3 views
2

Si j'ai un fichier Python (ou tout autre langage) dans un tampon en mode fondamental, existe-t-il une commande que je peux utiliser pour que le tampon détecte automatiquement la langue dans laquelle il doit être et permute en conséquence?Détection automatique du langage dans Emacs

Répondre

6

La réponse est simple: Alt + x-mode normalEntrez

normal-mode is an interactive compiled Lisp function in `files.el'. 

(normal-mode &optional find-file) 

Choose the major mode for this buffer automatically. 
Also sets up any specified local variables of the file. 
Uses the visited file name, the -*- line, and the local variables spec. 

This function is called automatically from `find-file'. In that case, 
we may set up the file-specified mode and local variables, 
depending on the value of `enable-local-variables'. 
In addition, if `local-enable-local-variables' is nil, we do 
not set local variables (though we do notice a mode specified with -*-.) 

`enable-local-variables' is ignored if you run `normal-mode' interactively, 
or from Lisp without specifying the optional argument find-file; 
in that case, this function acts as if `enable-local-variables' were t. 

Cela ne fonctionne, cependant, s'il y a des indices dans la mémoire tampon (par exemple #!/bin/python à le haut du fichier) ou le nom de fichier que le tampon est sauvegardé (le cas échéant) a une extension python (et il existe d'autres façons, voir la définition ci-dessus et set-auto-mode pour plus d'informations sur ce qu'ils sont tous).

Vous pouvez également définir le mode spécifiquement, si vous savez quel mode vous voulez. J'ai dans mes .emacs:

;;;; ------------------------------------------------------------------------ 
;;;; --- F3 - multi-purpose prefix keymap 
;;;; ------------------------------------------------------------------------ 
(setq my-F3-keymap (make-sparse-keymap)) 
(global-set-key [(f3)] my-F3-keymap) 


;; --- m -- generic (major) modes --- 
(require 'generic) 
(require 'generic-x) 

;; stolen shamelessly from generic-x Samba mode 
(define-generic-mode 'generic-rc-mode 
    (list ?#) 
    nil 
    '(
    ("^\\s-*\\(.+\\)=\\([^\r\n]*\\)" 
     (1 'font-lock-variable-name-face) 
     (2 'font-lock-type-face)) 
    ) 
    (list "\\(/\\.[^/]+rc$\\|\\.rc$\\)" "weblogic[^/\\]*\\.conf\\'" "oc4j[^/\\]*\\.conf\\'" "tomcat[^/\\]*\\.conf\\'") 
    nil 
    "Generic RC mode.") 

(setq my-F3:m-keymap (make-sparse-keymap)) 
(define-key my-F3-keymap [(m)] my-F3:m-keymap) 
(define-key my-F3:m-keymap [(a)] 'apache-conf-generic-mode) 
(define-key my-F3:m-keymap [(b)] 'bat-generic-mode) 
(define-key my-F3:m-keymap [(f)] 'fundamental-mode) 
(define-key my-F3:m-keymap [(i)] 'ini-generic-mode) 
(define-key my-F3:m-keymap [(j)] 'javascript-generic-mode) 
(define-key my-F3:m-keymap [(J)] 'java-properties-generic-mode) 
(define-key my-F3:m-keymap [(l)] 'emacs-lisp-mode) 
    (define-key my-F3:m-keymap [(L)] 'lisp-interaction-mode) 
(define-key my-F3:m-keymap [(n)] 'nxml-mode) 
(define-key my-F3:m-keymap [(p)] 'cperl-mode) 
(define-key my-F3:m-keymap [(r)] 'generic-rc-mode) 
(define-key my-F3:m-keymap [(s)] 'sgml-mode) 
(define-key my-F3:m-keymap [(S)] 'shell-script-mode) 
(define-key my-F3:m-keymap [(t)] 'text-mode) 

;; --- M -- generic (minor) modes --- 
(setq my-F3:M-keymap (make-sparse-keymap)) 
(define-key my-F3-keymap [(M)] my-F3:M-keymap) 
(define-key my-F3:M-keymap [(l)] 'longlines-mode) 
(define-key my-F3:M-keymap [(v)] 'view-mode) 
(define-key my-F3:M-keymap [(V)] 'visible-whitespace-mode) 

Avec ce que je peux mettre mon principal mode de cperl avec un mode mineur de mode d'affichage en faisant: F3mpF3Mv

1

Hm, ce n'était pas une simple réponse ci-dessus. Une réponse plus simple est la suivante: Emacs n'a appris à reconnaître les fichiers Python que dans la version 22.1 (juin 2007). Si vous utilisez un emacs plus ancien, cela l'expliquerait. Avec les versions les plus récentes, il devrait simplement fonctionner, au moins si le nom du fichier se termine par ".py".

+1

Vous pouvez utiliser 'auto-mode-alist' pour définir le mode via l'extension de fichier, en remontant (au moins) vers la version 18.x, IIRC (18.58 ou 18.85 était la première version dont je me souviens avoir utilisé). –

Questions connexes