2010-01-21 8 views
16

De la documentación que puedo ver puedo acceder a los argumentos de la línea de comandos (command-line-args). Me gustaría agregar mis propios argumentos, pero Emacs se queja al inicio de que no los reconoce.Argumento de línea de comandos personalizado de Emacs

E.g.

emacs -my_argument 

me sale:

 
command-line-1: Unknown option `-my_argument' 

Qué es una forma adecuada para definir mis argumentos personalizados y proporcionar información a mi sesión de Emacs? ¿Hay alguna forma de mostrar un argumento desde una línea de comando?

Respuesta

26

añadir algo como esto a su ~/.emacs, ~/.emacs.el, o ~/.emacs.d/init.el archivo:

(defun my-argument-fn (switch) 
    (message "i was passed -my_argument")) 

(add-to-list 'command-switch-alist '("-my_argument" . my-argument-fn)) 

A continuación, puede ejecutar emacs -my_argument y se debe imprimir i was passed -my_argument a la minibuffer. Puede encontrar más información en el GNU elisp reference.

8

Como se indica en otra publicación, puede agregar sus conmutadores personalizados al command-switch-alist y emacs llamará a la función de controlador para cualquier conmutador coincidente pasado en la línea de comandos. Sin embargo, esta operación se realiza después de que se haya evaluado su archivo .emacs. Esto está bien para la mayoría de los casos, pero es posible que desee un argumento de línea de comando para alterar la ruta de ejecución o el comportamiento de su evaluación .emacs; A menudo hago esto para habilitar/deshabilitar fragmentos de configuración (principalmente para la depuración).

Para lograr esto, puede leer command-line-args y comprobar su cambio manualmente y luego eliminarlo de la lista, esto detendrá emacs quejándose de un argumento desconocido.

(setq my-switch-found (member "-myswitch" command-line-args)) 
(setq command-line-args (delete "-myswitch" command-line-args)) 

que pueden alterar su evaluación .emacs así:

(unless my-switch-found 
    (message "Didn't find inhibit switch, loading some config.") 
    ...) 

Y se podría construir esto en un solo paso:

;; This was written in SO text-box, not been tested. 
(defun found-custom-arg (switch) 
    (let ((found-switch (member switch command-line-args))) 
    (setq command-line-args (delete switch command-line-args)) 
    found-switch)) 

(unless (found-custom-arg "-myswitch") 
    (message "Loading config...") 
    ...) 
+0

probado el código marcado "no se han probado". Funciona exactamente como se describe. –

Cuestiones relacionadas