source - emacs para mac
Función de llamada emacs lisp con argumento de prefijo programáticamente (2)
Quiero llamar a una función desde algún código elisp como si lo hubiera llamado interactivamente con un argumento de prefijo. Específicamente, quiero llamar a grep con un prefijo.
Lo más cerca que he estado de hacerlo funcionar es usando execute-extended-command
, pero eso aún requiere que escriba el comando que quiero llamar con un prefijo ...
;; calls command with a prefix, but I have to type the command to be called...
(global-set-key (kbd "C-c m g")
(lambda () (interactive)
(execute-extended-command t)))
La documentación dice que execute-extended-command
usa command-execute
para ejecutar el comando read del minibúfer, pero no he podido hacerlo funcionar:
;; doesn''t call with prefix...
(global-set-key (kbd "C-c m g")
(lambda () (interactive)
(command-execute ''grep t [t] t)))
¿Hay alguna forma de llamar a una función con un prefijo pero sin interactividad ?
O simplemente puedes usar una macro de teclado
(global-set-key (kbd "s-l") (kbd "C-u C-SPC"))
En este ejemplo, la combinación de teclas "sl" (s ("super") es la tecla "logotipo de Windows" en el teclado de una PC) retrocederá el anillo de marca, tal como usted escribió "Cu C-SPC".
Si te estoy entendiendo bien, estás tratando de hacer una combinación de teclas que actúe como si escribieras Cu Mx grep <ENTER>
. Prueba esto:
(global-set-key (kbd "C-c m g")
(lambda () (interactive)
(setq current-prefix-arg ''(4)) ; C-u
(call-interactively ''grep)))
Aunque probablemente haga una función nombrada para esto:
(defun grep-with-prefix-arg ()
(interactive)
(setq current-prefix-arg ''(4)) ; C-u
(call-interactively ''grep))
(global-set-key (kbd "C-c m g") ''grep-with-prefix-arg)