2011-12-25 14 views
8

Quiero jugar y experimentar con una serie de herramientas de software, cada una de las cuales tendrá una interfaz de línea de comando. Algunas de estas herramientas incluyen hbase, pig, erlang y prolog. Quiero usar emacs como interfaz de usuario para estas herramientas de la misma manera que puedo ejecutar un shell python con M-x run-python o un intérprete Lisp con el modo ielm.receta para crear un modo envoltorio emacs alrededor de un programa de línea de comando?

¿Hay alguna receta que pueda seguir para envolver una de estas herramientas de línea de comandos en modo emacs? Estoy buscando algo que muestre el mensaje de la herramienta, permítame buscar a través del historial con C-c C-n/C-p, enviar la entrada actual al proceso de la herramienta que presiono Enter, y mostrar la salida de la herramienta.

Sé que muchas de estas herramientas probablemente ya tienen modos emacs, estoy interesado en cómo crear rápidamente uno si no existe nada.

+0

No responde del todo su pregunta, pero si crea una envoltura de ceceo de emacs para la herramienta, puede usarla desde el ielm. Hago esto con mi envoltorio emacs redis por ejemplo. http://code.google.com/p/eredis/ – justinhj

Respuesta

7

Recientemente construí un "modo Gosu inferior" para el idioma gosu. En realidad, resultó ser bastante simple: acabo de extender comint, que es el modo en el que se basan tanto shell como ielm. Aquí está la parte importante del código:

(require 'comint) 
(defun inferior-gosu-mode() 
    (interactive) 
    (comint-mode) 
    (setq comint-prompt-regex inferior-gosu-prompt) 
    (setq major-mode 'inferior-gosu-mode) 
    (setq mode-name "Inferior Gosu") 
    (setq mode-line-process '(":%s")) 
    (use-local-map 'inferior-gosu-mode-map)) 

El bit use-local-map es justo donde se definen las asociaciones de teclas especiales; Tengo sólo como una copia de los enlaces COMINT:

(defvar inferior-gosu-mode-map nil) 
(unless inferior-gosu-mode-map 
    (setq inferior-gosu-mode-map (copy-keymap comint-mode-map))) 

Después de esto tuve un código simple que define un comando para poner en marcha un proceso que meter abrir el buffer *inferior-gosu* si existiera. También agregué un poco de código al modo Gosu normal para abrir un shell de gosu inferior.

En resumen: use comint.

Aquí hay un enlace a todo el código, pero no hay mucho más que eso: https://github.com/TikhonJelvis/Gosu-Mode/blob/master/inferior-gosu-mode.el

Naturalmente no dude en utilizar ese código que le apetezca; es posible que también desee ver el modo Gosu normal para ver cómo puede integrar su erlang y su prólogo en los respectivos modos de edición de los idiomas.

+5

Parece una respuesta útil, pero probablemente no es la mejor forma de crear tu modo. Esperaba ver '(define-derived-mode)' usado, con 'comint-mode' especificado como padre. – phils

Cuestiones relacionadas