IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lisp Discussion :

Emacs.lisp definition d'un mappage de clavier local


Sujet :

Lisp

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 48
    Points : 14
    Points
    14
    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 :

    Nom : mu4e-1.png
Affichages : 113
Taille : 47,0 Ko

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    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.

Discussions similaires

  1. Ouvrir buffer par fichiers Emacs LISP
    Par akrogames dans le forum Lisp
    Réponses: 1
    Dernier message: 01/06/2013, 00h53
  2. [EMACS LISP] Colorer les occurences d'un mot
    Par freedonadd dans le forum Lisp
    Réponses: 2
    Dernier message: 17/02/2011, 11h11
  3. [EMACS LISP] Mettre de la couleur
    Par topgun1223 dans le forum Lisp
    Réponses: 2
    Dernier message: 06/01/2010, 16h13
  4. indentation du lisp sous Emacs?
    Par maissa019 dans le forum Lisp
    Réponses: 2
    Dernier message: 15/04/2008, 11h45
  5. Cygwin+emacs, clavier mal reconnu
    Par al1_24 dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 22/01/2007, 19h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo