¿Cómo vincular un comando con un prefijo Cu a una clave diferente?


7

C-c C-x C-vLlama a la org-toggle-inline-imagesfunción. Con la tecla de prefijo, pasa algunos argumentos a esta función (no sé cuál).

¿Cómo puedo asignar la función con argumentos al F12botón para que haga lo mismo que C-u C-c C-x C-v?

Respuestas:


11

C-ues el argumento del prefijo universal. A menudo se usa para comandos que solo tienen dos estados (con y sin argumento), aunque también se puede interpretar como un prefijo numérico (4).

En este caso, al mirar el código fuente org-toggle-inline-images, veo que solo verifica si el argumento está configurado, por lo que el valor específico que pasa no importa.

Puede definir una función que llame (org-toggle-inline-images t). Para hacerlo con una lambda:

(define-key org-mode-map  (kbd "<f12>")
    (lambda () (interactive) (org-toggle-inline-images t)))

Esto une F12 en modo org, dejando el enlace global en su lugar para otros modos.

Para obtener más información sobre las asociaciones de teclas, esta es una buena lectura: Dominar las asociaciones de teclas en Emacs . Y, por supuesto, hay muchos detalles en el manual de Emacs Lisp .


3

La respuesta en general es mirar el código que define el comando. En particular (pero no necesariamente solo) la interactiveespecificación.

Lo que busca es lo que hace la función con un prefijo arg. Y luego define un comando que hace lo mismo.

Por lo general, el prefijo arg se usa para definir algún valor que luego se pasa en el código a otra función. Entonces solo necesita llamar a esa otra función, pasándole el argumento que se habría proporcionado a través del prefijo arg en el comando original. IOW, normalmente puede usar el mismo código, simplemente pasando un valor en lugar del valor que se determinaría a partir del prefijo arg.


3
También puede emular un C-uprefijo con esto: (let ((current-prefix-arg '(4))) (call-interactively #'whatever-command)). Eso podría ser útil si no puede averiguar qué está haciendo el comando que está llamando con su argumento.
glucas

@glucas: Eso es apropiado solo si el prefijo particular arg utilizado no importa para el comando dado, o si el comportamiento que desea del comando es simple C-u. No es apropiado si el comando tiene un comportamiento diferente en función de si llano C-use utiliza o no (por ejemplo, la distinción de C--o C-3, o C-u C-ude sólo C-uMi consejo es comprobar siempre cómo el comando que se trata de un prefijo arg..
dibujó

Es cierto, buen punto. Simplemente proporcionándolo como una opción para el caso específico de "llamar a esto como si presionase Cu primero".
glucas

@glucas: lo que es más, en el caso de que cites, normalmente puedes (pero no siempre) prescindir por completo del uso interactivo y simplemente pasar '(4)al comando (sin molestarte call-interactively). (Pero eso no funcionará, por ejemplo, si el comando no tiene un parámetro que corresponda al prefijo arg, sino que se prueba current-prefix-argen el cuerpo del comando.)
Dibujó el

@glucas: Sí, fue bueno que lo mencionaras.
Dibujó el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.