Pregunta

Pregunta:

¿Cómo puedo crear combinaciones de teclas personalizadas para los modos menores? Algo como esto .

Esto es lo que tengo hasta ahora. Estoy tratando de conseguir sólo una combinación de teclas personalizada para el trabajo:

(define-minor-mode num-mode
       "Toggle the Num pad keys.
     With no argument, this command toggles the mode.
     Non-null prefix argument turns on the mode.
     Null prefix argument turns off the mode.

     When Num mode is enabled, the num pad inserts the
     keys you see on the pad. This may over ried existing
     definitions, and is probably only usefule if you aref
     running Emacs through a terminal."
      ;; The initial value.
      nil
      ;; The indicator for the mode line.
      " NumPad"
      ;; The minor mode bindings.
      ;; This doesn't work right now!!!!
       '(((kbd "<kp-1>") . "a"))
      :global 1
)

Cuando llegué a "1" en el teclado numérico después de llamar a mi modo menor a medida "num-mode" y verificar que está en memoria intermedia en el mini, me sale el error <kp-1> is undefined. Lo que quiero que suceda es a se imprime en el que el puntero es cuando golpeo <kp-1>. (Sólo una prueba)

Contexto:

Así que, por lo general uso mi teclado numérico para desplazarse entre las memorias intermedias (las teclas de flecha me mueven las direcciones apropiadas). Esto se establece a nivel mundial. Quiero crear un modo menor que puedo llamar cuando quiero usar mi pad numérico simplemente introducir números.

Por defecto, las teclas de mi pad numérico no están definidos. Yo uso <kp-0> a <kp-9> para definir las combinaciones de teclas para las teclas del teclado numérico.

Me puede crear un modo menor que puedo llamar, pero no puedo adjuntar ningún combinaciones de teclas. Esto es cierto para todas las combinaciones de teclas, incluyendo uno no definido en otro sitio.

Gracias por cualquier ayuda!

¿Fue útil?

Solución

Respuesta corta

línea Problema:

'(((kbd "<kp-1>") . "a"))

Solution (fuerza de la evaluación de la macro):

;; Single quote changed to back-quote and added a comma
`((,(kbd "<kp-1>") . "a"))

Respuesta larga

El define-minor-mode macro le permite crear modos menores con relativa facilidad (por lo que Emacs) va.

En primer lugar voy a mostrar cómo se hace, a continuación, voy a explicar cómo funciona:

En forma general:

(define-minor-mode NAME-mode
  "DOCUMENTATION"
  INIT-VALUE
  "LIGHTER"
  ;; keymap
  '(
    (KEY-SEQUENCE . DEFINITION)
    (KEY-SEQUENCE . DEFINITION)
    ... ETC ...
   )
  ;; other options
  :KEYWORD-ARG VALUE
  :KEYWORD-ARG VALUE
  ... ETC ...       
)

Ejemplo específico con la evaluación forzada de macros en la alista:

;; Custom Minor Mode
(define-minor-mode custom-mode
  "Doc description, yada yada yada."
  ;; The initial value - Set to 1 to enable by default
  nil
  ;; The indicator for the mode line.
  " CustomMode"
  ;; The minor mode keymap
  `(
    (,(kbd "C-c C-a") . some-command)
    (,(kbd "C-c C-b") . other-command)
    ("\C-c\C-c" . "This works too")
   )
   ;; Make mode global rather than buffer local
   :global 1
)

Una forma alternativa, si desea utilizar una variable para el mapa de teclado es definir la variable de mapa de teclas y el mapa de teclas antes de del modo menor declaración de algo como esto:

(defvar custom-mode-keymap (make-keymap) "num-mode keymap.")
(define-key custom-mode-keymap (kbd "C-c C-a") 'some-command)

Y luego, en la definición del modo menor, simple lista el nombre de variable para su mapa de teclado, en lugar de la alista

(define-key custom-mode-keymap (kbd "C-c C-b") 'other-command)
;; Num pad enable
(define-minor-mode custom-mode
...

      ;; The minor mode bindings.
      custom-mode-keymap

¿Cómo funciona todo

De arriba a abajo, justo después de definir-minor-mode que definir un nombre de comando para cambiar el modo menor. custom-mode en este caso (M-x custom-mode para alternar el modo). Esto también define una variable del mismo nombre.

Justo después del nombre del comando, que lista la cadena de documentación para el modo menor entre comillas. Esto puede ser más o menos todo el tiempo que desee.

A continuación tenemos varias opciones. La elección más simple es simplemente una lista de tres cosas y luego las opciones adicionales. Las tres cosas tienen que ser enumerados en el orden siguiente. Estas tres cosas son:

  1. El valor de la variable initilization modo menor. nil tendrá el modo por defecto. Algo que no sea nil lo tendrá de forma predeterminada.

  2. El encendedor. El encendedor es simplemente lo que es la pantalla en la línea de modo en la parte inferior cuando el modo menor está encendido. Esto debe ser corto, y va a menudo ayuda, en términos de formato, para comenzar con un espacio.

  3. El mapa de teclado. El mapa de teclas o bien puede ser definido como una variable o una alista (lista de asociación). Dado que el uso de un alista es más simple y más corto, eso es lo que he usado en el ejemplo. El alist debe estar en la forma (key-sequence . definition).

Si se define el mapa de teclado como una alista, hay algunas cosas a tener en cuenta, sobre todo si estás acostumbrado a definir combinaciones de teclas globales. En primer lugar, los nombres de comandos no se citan. En segundo lugar, si desea utilizar una macro, usted tiene que forzarlo para evaluar ( y el SO ) . Esto se hace con una combinación de la parte posterior de comillas (no comilla simple) y la coma. Se puede ver cómo se hace esto en el ejemplo con la macro kbd. También he incluido una definición de pulsaciones de teclas, si no se utiliza la macro kbd. Si simplemente citar una cadena en su mapa de teclado, que va a imprimir cuando se pulsa la combinación de teclas definida (igual que para la definición de las asociaciones de teclas globales).

El mapa de teclado no funcionará con macros kbd si no forzar la evaluación de las macros kbd con una combinación de la cita de ida y coma De esta manera:.

`((,(kbd "C-c C-a") . some-command))

Por último, se puede añadir opciones adicionales usando la palabra clave-args de la forma :blah. En el ejemplo utilicé :global. Podríamos haber definido el modo entero con la palabra clave-args, pero es más corto a la lista de sólo el valor de init, más ligero, y mapa de teclas en el orden correcto.

Otros consejos

Es necesario tener un código como éste en la definición del modo menor:

(defvar your-mode-map
  (let ((map (make-sparse-keymap)))
    (set-keymap-parent map parent-mode-shared-map)
    (define-key map "\C-c\C-a" 'some-defun)
    (define-key map "\C-c\C-b" 'some-other-sexp)
    map)

(use-local-map your-mode-map)

Se puede echar un vistazo a los muchos modos disponibles en EmacsWiki de referencia.

Tener un vistazo a esto (sólo para información acerca de las combinaciones de teclas):

http: // www .gnu.org / software / emacs / manual / html_node / emacs / Key-Bindings.html # atajos de teclado

http: // www .gnu.org / software / emacs / manual / html_node / emacs / local-Keymaps.html # local-mapas de teclado

http://xahlee.org/emacs/reclaim_keybindings.html :

modos mayor bien escritos se ejecutarán gancho en el extremo. Por lo tanto, se puede utilizar un gancho para definir su combinación de teclas. Los modos menores normalmente no tienen ganchos. En ese caso, puede llamar “(requiere )” en primer lugar, a continuación, definir su combinación de teclas.

También es posible echar un vistazo a: http://www.cs.utah.edu/ dept / edad / textinfo / emacs19 / emacs_35.html # SEC347

Tal vez la respuesta aceptada aquí también le ayuda.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top