Créer un raccourci ================== Sommaire ================= 1 Créer un raccourci global 2 Trouver les touches 3 Une commande? 4 Un peu d'elisp 5 Raccourcis locaux 1 Créer un raccourci global ~~~~~~~~~~~~~~~~~~~~~~~~~~ Un raccourci global fonctionnera quelque soit le mode utilisé, (enfin presque, voir la discussion sur les raccourcis locaux) Pour créer un raccourci global, il suffit d'ajouter : (global-set-key (kdb "touches") 'commande) dans son fichier .emacs 2 Trouver les touches ~~~~~~~~~~~~~~~~~~~~ Pour trouver ce qu'il faut mettre à la place de "touches", il suffit d'utiliser : C-h k suivi de la combinaison de touches désirées. Par exemple C-h k C-c l affichera quelque chose comme: : C-c l is undefined dans le mini-buffer. La description des touches après C-h k est écrite dans le format accepté par kbd. Donc: : (global-set-key (kbd "C-c l") 'commande) C-h k peut aussi vous révèler qu'une commande est déjà associée à votre séquence de touche. C-c suivit d'une lettre et F5-F9 sont les touches réservés, vous êtes sûr qu'aucun mode n'utilisera ces combinaisons... C-h b permet d'afficher une liste de tous les raccourcis dans le buffer actif. 3 Une commande? ~~~~~~~~~~~~~~ En bref une commande est tout ce qui est accessible via M-x. Pour trouver une commande C-h a est utile Par exemple si on veut une commande permettant d'aller à la ligne : C-h a line RET nous affiche toutes les commandes comprenant "line" dans leur nom, dont goto-line. Nous a avons tout ce qu'il nous faut pour notre raccourci: : (global-set-key (kbd "C-c l") 'goto-line) une fois dans le .emacs placer le curseur après la dernière parenthèse et faites C-x C-e pour l'activer (redémarrer emacs fonctionne aussi) 4 Un peu d'elisp ~~~~~~~~~~~~~~~ Une limitation de cette forme est que l'on ne peut pas passer de paramètre à la commande. Supposons que nous voulions créer un raccourci vers la commande compile qui executera toujours "make" : (global-set-key (kbd "C-c c") 'compile) fonctionne mais nous oblige à appuyer sur RET à chaque fois. : C-h f compile RET nous apprends que compile accepte un argument "command". Malheureusement (global-set-key (kbd "C-c c") '(compile "make")) ne fonctionne pas. Pour l'ajouter dans notre raccourci nous avons besoin de créer une nouvelle commande, cela est facile il suffit d'ajouter (lamda () (interative) ): :(global-set-key (kbd "C-c c") : (lambda () (interactive) (compile "make"))) La même forme est utile pour les fonctions qui ne sont pas des commandes (ie qui n'ont pas (interactive) dans leur définition. 5 Raccourcis locaux ~~~~~~~~~~~~~~~~~~~ Les raccourcis locaux sont des raccourcis qui ne marchent que dans un mode donné. En tant qu'utilisateurs, nous pourrions presque nous passer d'eux, après tout si un raccourci destiné au c-mode fonctionne ailleurs, peu nous importe c'est notre problème. Mais voilà, les raccourcis locaux ont la précédence sur les raccourcis globaux, il est donc nécessaire de définir un raccourci local pour modifier un raccourci local. Heureusement ce n'est pas très compliqué, il suffit d'utiliser: : (add-hook 'lehookdumode-hook : (lambda () : (local-set-key (kbd "lestouches") 'lacommande) : (local-set-key (kbd "autrestouches") 'autrecommande))) Nous savons déjà comment remplir "lestouches" et 'lacommande, il ne reste donc qu'à trouver lehookdumode-hook. Pour cela pas vraiment de méthode, plutôt quelques pistes: - M-x apropos-variable RET nomdumodeSPC hook RET nous donne la liste des variables dont le nom comprend nomdumode et hook - Dans un buffer dans le mode souhaité C-h m nous donne un déscription du mode et les hook peuvent être mentionner - Verifier avec C-h v qu'une variable nomdumode-hook existe (les modes ont presque toujours un hook nommé nomdumode-hook - C-h f nomdumode RET cliquer sur le fichier source et rechercher "hook" Par exemple si nous voulons que RET effectue newline-and-indent dans le c-mode, C-h m dans un buffer contenant un fichier .c nous parle de c-mode-common-hook, et il nous reste qu'à ajouter dans le .emacs: : (add-hook 'c-mode-common-hook : (lambda () : (local-set-key (kbd "RET") 'newline-and-indent ) )) Author: Pierre Gaston Date: 2007/10/03 09:41:07 AM Ecrit pour http://emacsfr.tuxfamily.org/