< Emacs sur Mac OS X - 2 - vers les raccourcis clavier standards >
Nous avons vu dans l’article précédent Emacs sur Mac OS X - 1 - Installation et introduction comment installer et utiliser Emacs sur votre Mac. Maintenant autre chose : comment se débarrasser des raccourcis clavier de base ridiculement compliqués d’Emacs.
Ce n’est pas qu’apprendre qu’il faille taper C-x C-f pour ouvrir un fichier soit compliqué, mais au bout de plusieurs heures d’utilisation, on se met à tapper C-x C-s quand on veut sauvergarder un fichier photoshop ou n’importe quoi d’autre. Les raccourcis claviers sont un tel reflexe que personne ne veut avoir à se demander s’il doit tapper pomme+O ou C-x C-f pour ouvrir un nouveau fichier.
Imaginez l’enfer si à chaque nouveau logiciel, il fallait ré-apprendre tous les raccourcis clavier ! ! !
Notations pour les raccourcis clavier
Tout au long de cet article, j’utilise deux types de notations pour les raccourcis clavier :
la notation Mac : pomme+V, alt+(, etc ...
la notation usuelle Emacs : C-x C-f, M-x, ....
S’il y a un +, c’est la notation habituelle sur Mac, s’il y a un -, c’est un raccourcis Emacs. Et comme j’ai configuré mon Emacs pour que la touche pomme soit la touche META, on a équivalence entre M-x et Pomme+X.
Un Emacs avec des raccourcis classiques
La problématique est donc de configurer Emacs pour que les raccourvcis claviers usuels soient toujours de mise.
Il semble y avoir deux méthodes : celle d’Ovidiu Predescu.
En gros, il associe la touche ALT à la touche META d’Emacs (le M-bidule). Du coup, la touche pomme devient la touche alt et il l’utilise pour associer les fonctions aux touches habituelles. Extrait de son fichier .emacs :
(setq mac-command-key-is-meta nil)
;; Define the return key to avoid problems on MacOS X
(define-key function-key-map [return] [13])
(global-set-key [(alt a)] 'mark-whole-buffer)
(global-set-key [(alt v)] 'yank)
(global-set-key [(alt c)] 'kill-ring-save)
(global-set-key [(alt x)] 'kill-region)
(global-set-key [(alt s)] 'save-buffer)
(global-set-key [(alt l)] 'goto-line)
(global-set-key [(alt o)] 'find-file)
(global-set-key [(alt f)] 'isearch-forward)
(global-set-key [(alt g)] 'isearch-repeat-forward)
(global-set-key [(alt w)]
(lambda () (interactive) (kill-buffer (current-buffer))))
(global-set-key [(alt .)] 'keyboard-quit)
;; I disabled this since I want to avoid hitting Cmd-q accidentally.
;(global-set-key [(alt q)] 'save-buffers-kill-emacs)
(require 'redo)
(global-set-key [(alt z)] 'undo)
(global-set-key [(alt shift z)] 'redo)
Pour la dernière commande, il fourni une petite fonction redo.el à installer dans le répertorie /emacs/. Celà vous oblige aussi à ajouter celà à votre fichier de configuration .emacs :
(defvar emacs-directory "~/emacs/"
"The directory containing the emacs configuration files.")
; Define the load-path
(pushnew (expand-file-name emacs-directory) load-path)
La question est, avec cette méthode, puisque la touche mac ALT est utilisée comme touche META, comment utiliser la touche ALT comme une touche ALT, et ainsi accèder à : Les caractères à la con sur Mac OS ?
Ma méthode de configuration d’Emacs
Ma methode est d’utiliser la touche pomme comme touche META et de redéfinir les associations de raccourcis suivantes :
(define-key function-key-map [return] [13])
(cua-mode t)
(global-set-key "\M-o" 'find-file)
(global-set-key "\M-w" 'kill-buffer)
(global-set-key "\M-x" 'kill-region)
(global-set-key "\M-c" 'kill-ring-save)
(global-set-key "\M-v" 'cua-paste)
(global-set-key "\M-s" 'save-buffer)
(global-set-key "\M-\S-s" 'write-file)
(global-set-key "\M-q" 'save-buffers-kill-emacs)
(global-set-key "\M-e" 'execute-extended-command)
(require 'redo)
(global-set-key "\M-z" 'undo)
(global-set-key "\M-\S-z" 'redo)
(global-set-key [(ctrl tab)] 'prev-buffer)
(global-set-key [(ctrl shift tab)] 'next-buffer)
(global-set-key "\M-b" 'electric-buffer-list)
le cua-mode est un mode qui permet d’utiliser Ctrl+C, Ctrl+X, Ctrl+V etc ... comme si on était sur PC. C’est en fait exactement ce que nous voulons obtenir, mais avec la touche Pomme. D’autre part, le cua-mode permet de sélectionner du texte en appuyant sur la touche shift et les touches flèches, comme dans tous les autres éditeurs de texte.
J’utilise tout de même les fonctions undo et redo d’Ovidiu Predescu pour pomme+Z et pomme+shift+Z.
problème avec pomme+V
Problème cependant avec le Pomme+V : le cua-mode associe la fonction "coller" avec C-v et réserve le M-v (pomme+V donc) pour une fonction obscure à laquelle je n’ai rien compris. Même un (global-unset-key "\M-v") ne sert à rien : M-v reste définitivement hors de portée. Pour pallier à celà, je suis allé commenter la définition du raccourci M-v dans le fichier /Applications/Emacs.app/Contents/Ressources/lisp/emulation/cua-base.el. Mettez en commentaire la ligne 1110 (suffit de mettre un ; en début de ligne) :
(define-key cua--cua-keys-keymap [(meta v)] 'cua-repeat-replace-region).
Comme cette modification n’avait aucun effet, j’ai aussi renommé le fichier compilé cua-base.elc en cua-base.elc.bkp. La première fois que j’ai redémarré Emacs après celà, le redémarrage a pris un peu plus de temps que d’habitude sans pour autant recréer de fichier cua-base.elc : je me demande s’il a compilé les modifications de cua-base.el ailleur ou non.
Bref, comme ça on a enfin la possibilité d’utiliser M-v (cad pomme+V) comme on veut.
problème avec pomme+S
Là je n’ai pas trop compris ce qu’il se passe. Suivant certains modes, pomme+S ne marche pas (il me centre le contenu de la ligne plutôt que de sauvegarder le buffer). Dans ce cas là, le raccourcis classique C-x C-s fonctionne tout à fait.
Et le M-x dans tout ça ?
Vous avez vu que pomme+X (donc M-x) est utilisé pour "couper". Du coup, pour retrouver la fonction du M-x (qui est très utile pour appeler certaines commandes Emacs) j’ai arbitrairement utilisé M-e. Pour les habitués d’Emacs c’est probablement un scandale, mais pour ceux qui comme moi, se mettent à Emacs pour avoir un éditeur puissant, gratuit, extensible sans pour autant vouloir tout changer à leur habitudes de travail et garder les raccourcis habituels, c’est une solution.
Sauter d’un buffer à l’autre
J’ai aussi ajouté C-tab et C-S-tab pour sauter d’un buffer à l’autre. Je l’utilise très souvent car j’ai toujours une demie-douzaine de buffer ouverts en permanence.
Si d’aillleur vous êtes comme moi, je vous invite à utiliser très fréquement l’electric buffer list (M-b), ça vous permet d’avoir accès à une liste intéractive de tous vos buffers.
Ce qu’il reste à améliorer
pouvoir taper des caractères accentués sans que ça déconne
que le M-w (kill buffer) n’ait pas besoin d’avoir de confirmation quant au nom du buffer à fermer. (faut appuyer sur return à chaque fois qu’on fait un pomme+W)
désactiver le soft-wrap par défaut (j’aime pas les retours à la ligne automatiques dans mon code php)
Ce qu’il reste à améliorer pour la saisie d’XHTML
pouvoir, comme dans homesite (mon ancien éditeur windows) utiliser la complétion via TAB pour les tags et arguments html.
avoir une commande magique qui ferme automatiquement le tag html en cours.
dans la même veine, lorsqu’on ferme un tag ouvrant, que le tag fermant apparaisse immédiatement.
J’imagine que tout celà existe déjà dans un mode XHTML précis, mais je n’ai pas encore eu le temps de lire toute la doc.
Cet article évoluera donc. Et n’hésitez surtout pas à me faire part de vos remarques, astuces ou problèmes.
3 commentaires
et pour l humour :
http://www.barbery.net/divers/emacs.htm
pétition pour la déstitution de sarkozy, j’ai signé et je vous invite à signer et à diffuser largemet, signez sur : http://www.antisarkozysme.com


Merci beaucoup ! Pour les gens qui comme moi sont passes de pc a mac et en ont marre de changer leurs habitudes !
Il manque peut etre ce petit lien pour les pciste ...
http://www.cua.dk/
et les autres...
Merci pour ce site et a bientot je pense (votre site est dans mes favoris...)