1 pièce(s) jointe(s)
Emacs.lisp definition d'un mappage de clavier local
Bonjour,
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 :
Pièce jointe 105392
Pour écrire le code de mon mode majeur je me suis donc inspiré de celui de mu4e et de text-mode.el
Bien évidement je me documente sur le Wiki d'Emacs et le site gnu.org à l'aide de "An Introduction to Programming in Emacs Lisp".
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| ;
(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 "<f4>")
(lambda() (interactive) (message "<f4> pressed")))
(define-key map (kbd "<f5>")
(lambda() (interactive) (message "<f5> 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 ~~" '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 " <fx>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.