Précédent   Forum du club des développeurs et IT Pro > Autres langages > Langages fonctionnels > Lisp
Lisp Forum d'entraide sur la programmation en langages fonctionnels Lisp et Common Lisp
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 11/09/2012, 13h31   #1
iOops
Invité de passage
 
Inscription : mai 2006
Messages : 47
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 47
Points : 4
Points : 4
Par défaut 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 :

mu4e-1.png

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.
iOops est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2012, 12h18   #2
jack-ft
Membre Expert
 
Inscription : avril 2008
Messages : 789
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 789
Points : 1 792
Points : 1 792
Citation:
Envoyé par iOops Voir le message
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,
Pour commencer, j'explorerais la map.

Dans la fenêtre où tourne ton mode, tu "captures" la valeur de la local-map avec M-: (setq jdm (current-local-map)) puis dans une fenêtre ielm, tu tapes jdm RET et tu regardes si tu retrouves ou non tes lambdas.
jack-ft est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 15h24.


 
 
 
 
Partenaires

Hébergement Web