URL: https://linuxfr.org/forums/programmationautre/posts/emacs-lisp-definition-des-touches-pour-un-mode-majeur Title: [Emacs.Lisp] Définition des touches pour un mode majeur Authors: iOops Date: 2012年09月11日T00:32:53+02:00 Tags: emacs, lisp et keymap Score: 0 Bonsoir à tous, Je me suis lancé il y a environ une semaine dans l'apprentissage du langage de programmation Lisp. Je souhaite créer un mode majeur qui me permettrait de lancer mes applications à l'aide d'un menu principal. J'aimerais que ce menu ressemble à celui de mu4e : ![Titre de l'image](http://www.djcbsoftware.nl/code/mu/mu4e-1.png) Pour écrire le code de mon mode majeur je me suis donc inspiré de celui de [mu4e](https://github.com/emacsmirror/mu4e) et de text-mode.el Bien évidement je me documente sur le [Wiki d'Emacs](http://www.emacswiki.org/emacs/KeyBindingDiscussion) et le site gnu.org à l'aide de _"[An Introduction to Programming in Emacs Lisp](http://www.gnu.org/software/emacs/manual/html_node/elisp/Changing-Key-Bindings.html)"_. ```bash ; (defconst rct-mode-buffer-name "*rct-main*" "*internal* Name of the rct main view buffer.") ; ; let the user have the possibility to run his hown code (defcustom rct-mode-hook nil "Normal hook run when entering Text mode and many related modes." :type 'hook :group 'data) ; ; Keymap (defvar rct-mode-map (let ((map (make-sparse-keymap))) (define-key map (kbd "C-c m") (lambda() (interactive) (message "C-c m pressed"))) (define-key map (kbd "") (lambda() (interactive) (message " pressed"))) (define-key map (kbd "") (lambda() (interactive) (message " pressed"))) map ) "Keymap for `rct-mode'.") ; ; h1 first header in blue (defface h1 '((t :inherit default (:background "blue") )) "Face for a header without any special flags." :group 'rct-faces) ; (define-derived-mode rct-mode special-mode "rct:main" "Major mode for remote connections \\{rct-main-mode-map}." (setq debug-on-error t) (use-local-map rct-mode-map) (run-hooks 'rct-mode-hook) (main-menu)) ; ; Main Menu (defun main-menu () "This function display the main menu of the RCT mode." (with-current-buffer (get-buffer-create rct-mode-buffer-name) (erase-buffer) (insert "\n\n\n\n" (propertize "~~ Welcome to the Remote Connection Tool for Emacs ~~" 'face 'h1) "\n\n" "Main commands" "\n\n" "\t[Q] To quit the RCT-mode" "\n\n" "Section 1" "\n\n" "\t[F2] To Start XXXX\n" "\t[F3] To Start YYYYY\n" "\n" "Section 2" "\n\n" "\t[F4] To Start ZZZZZ\n" "\n\n" ); end-of insert );end-of with-current-buffer ;);end-of let (switch-to-buffer rct-mode-buffer-name) (toggle-read-only t) );end-of main-menu ; (provide 'rct-mode) ``` Je rencontre actuellement deux principaux problèmes avec mon code : - lorsque je lance mon mode-majeur la définition des touches n'est pas prise en compte et n'est pas chargée par la fonction (use-local-map). A chaque pression de la touche fx ou même C-c m les messages " is not defined"_ ou bien _"no kbd macro is defined"_ s'affichent dans le mini-buffer, - le texte auquel j'ai attribué une "face" dite "h1" pour apparaître en bleu est affiché avec la couleur par défaut : en noir. Je vous remercie par avance de votre aide.

AltStyle によって変換されたページ (->オリジナル) /