key-bindings – Cómo especificar el argumento de prefijo en el enlace de claves

Pregunta:

La descripción de Cx Ce menciona:

… Interactivamente, con un argumento de prefijo que no sea '-', imprime la salida en el búfer actual.

Entiendo que esto significa que esta lógica se activa cuando Cu Cx Ce , pero ¿cómo vincularía esto a Cc c ? ¿Cómo especifico el prefijo en el enlace?

Lo mismo para C-SPC :

Con un argumento de prefijo (por ejemplo, Cu C-SPC), salte a la marca y establezca la marca desde la posición que salió del anillo de marca local (esto no afecta el anillo de marca global).

Mi enlace normal se ve así:

(global-set-key (kbd "C-c ,") 'pop-global-mark)

Respuesta:

Cu invoca la función universal-argument , y desea asegurarse de que eval-last-sexp se llame como si lo hubiera invocado de forma interactiva, lo que se hace con call-interactively . Puede simular universal-argument mediante el enlace let current-prefix-arg .

Poniendo todo eso junto para Cu Cx Ce :

(global-set-key (kbd "C-c c") (lambda ()
                                (interactive)
                                (let ((current-prefix-arg 1))
                                  (call-interactively #'eval-last-sexp))))

Para Cu C-SPC :

(global-set-key (kbd "C-c ,") (lambda ()
                                (interactive)
                                (let ((current-prefix-arg '(4)))
                                  (call-interactively #'set-mark-command))))

Estrictamente hablando, como señala @NickD, current-prefix-arg debería estar vinculado a '(4) para ser exactamente equivalente a Cu , pero para eval-last-sexp eso no importa.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım