J'ai un mode mineur. Si ce mode est actif et que l'utilisateur frappe del, je Voulez-vous faire une action, mais seulement si une condition est tirée. Si la Conditions conteste et l'action est exécutée, je veux ne rien faire de plus après ça. Mais si la condition échoue, je ne veux rien faire et laissez l'action par défaut del action exécuter.
Vous ne savez pas comment je pourrais résoudre ce problème. Mais je suppose que je pourrais le faire de deux manières: p>
(add-hook 'pre-command-hook
(lambda()
(when (equal last-input-event 'backspace)
;; Do something and then stop (do not execute the
;; command that backspace is bound to)
)))
3 Réponses :
Il ne semble pas y avoir un moyen de faire ce que vous voulez de manière fiable. Si votre nouvelle commande est liée à Del, alors tout ce qui était liée à Del avant dans le Keymap actuel n'est plus là. L'autre approche que vous avez proposée ne fonctionnera pas car les crochets de pré-commandement n'empêchent pas l'action suivante d'avoir lieu. Vous pouvez également penser à interrompre une nouvelle exécution avec ^ g (clavier-cessé), mais c'est une interruption incontrôlée qui pourrait empêcher plus de choses que vous ne le souhaitez. P>
Même si vous faites le processus de configuration de la nouvelle liaison un peu plus sophistiquée que de retirez simplement et rappelez-vous ce qui était lié auparavant, vous pouvez donc l'appeler ensuite, vous n'avez pas vraiment ce que vous recherchez. . Si quelqu'un veut reculer l'action "Par défaut", ils doivent le faire en modifiant à votre fonction plutôt que de remplacer la liaison de clé. P>
Ce que vous voulez faire ne contient pas le modèle d'EMACS de la manière dont les travaux de liaison de clés. p>
La manière de le faire est de désactiver temporairement votre mode mineur, puis recherchez la liaison de la clé.
prétendre que vous avez lié si vous utilisez 'do-baisse code> à del KBD>. Ensuite, cela ferait l'astuce (en supposant que la condition que vous souhaitez déclencher est
(égale à l'éventualité de l'événement d'entrée) code>: p>
Mode-Map-alist code>
en ajoutant un élément < Code> (My-MODE-MODE. MY-MODE-MODE-KEYMAP) CODE>. C'est la manière dont le document code> indique code> fonctionne, il lève la liaison souhaitée avec votre mode temporairement désactivé. p> MODE DEFINER-MORT-MODE CODE>
pour définir votre mineur Mode, le Keymap est configuré automatiquement de la "voie de droite". P> p>
Qu'en est-il d'une relevette arbitraire, où vous ne savez pas à l'avance quelle est la clé dont vous souhaitez revenir? Comment pouvez-vous rechercher programmable la liaison à utiliser pour la valeur de l'original-Func? (NEUVEDMIND: On dirait que l'on utilise cette touche-commandes-vector).
C'est ce que j'utilise pour mon package intelligent-onglet code> qui fait exactement cela.
(if (smart-tab-must-expand prefix)
;; use smart tab
(smart-tab-default))
Est-ce que Del et Backspace sont les mêmes?