¿Cómo inicio un shell automáticamente después de iniciar emacs?

8

Una de mis principales razones para usar Emacs es obtener un entorno potente después sshde ingresar a una máquina remota. Lo primero que hago después de iniciar Emacs es correr M-x shellpara obtener una línea de comando. Como Emacs tarda un poco en iniciarse, sería muy conveniente tener una opción para pedirle a Emacs que inicie un shell cuando lo ejecute, después de analizar mi archivo de inicialización (tengo algunos ganchos de shell configurados para hacer una cosa y otra ) Idealmente, me gustaría poder ejecutarlo con una opción adicional para no tener que agregar nada específico a mi archivo de inicialización en las máquinas remotas (podría configurar un bashalias si quisiera). Algo como esto:

emacs afile1 afile2 -startShell

De hecho, dado que establecer la conexión segura lleva unos 30 segundos, lo que realmente me gustaría hacer es compilar el "inicio de un shell" en el sshcomando en sí, utilizando sshcon -tpara iniciar un programa basado en pantalla .

ssh -t me@remote emacs afile1 afile2 -startShell

Eché un vistazo a la documentación de argumentos de la línea de comandos para Emacs, pero todavía estoy comenzando con Emacs y Lisp y la personalización, y no era inmediatamente obvio cómo proceder para tratar los argumentos de la línea de comandos. ¿Cómo haría para hacer esto?

( Pregunta relacionadaeshell mencionada por el usuario @Name.)

TooTone
fuente
puede :). ssh -t me@remote 'emacs -f shell'Funciona como un sueño.
TooTone
@ Nombre, gracias. Lo intenté, pero estaba diciendo que podría agregar su comentario como respuesta y lo aceptaría porque soluciona mi problema. O tal vez mi pregunta debería marcarse como un duplicado. Sería bueno no dejarlo abierto, de cualquier manera.
TooTone

Respuestas:

4

Puede usar el modificador -f para llamar a una función emacs desde la línea de comandos.

El comentario muestra cómo hacer esto sobre ssh usando -t y esa es una forma. Sin embargo, tiene algunas desventajas. El principal es que ejecuta emacs de forma remota, lo que significa que necesitará tener todas sus cosas de configuración de emacs en el sistema remoto, así como mantener algunas localmente para su versión local. También pierde algo de flexibilidad si desea hacer cosas localmente y remotamente y tal vez moverse entre ellas.

Una alternativa sería ejecutar sus emacs localmente e iniciar un shell desde la línea de comando y luego ssh desde ese shell. Puede usar el vagabundo sobre ssh para editar archivos, etc. y luego usar el shell para ejecutar una sesión ssh interactiva.

emacs -f shell

Una vez que te sientas cómodo con eso, puedes mirar algunos de los paquetes relacionados con ssh disponibles para emacs. Entonces debería ser posible llamar a una función desde uno de esos paquetes desde la línea de comandos para automatizar la creación de una sesión ssh. Es posible que deba escribir una función de contenedor simple para facilitar esto. Entonces solo tendrá que administrar 1 configuración de configuración de emacs y obtendrá la flexibilidad adicional.

Tim X
fuente
1
Tiene razón en que la principal desventaja de usar ssh -t ... 'emacs -f shell'directamente desde un terminal es que tengo que mantener actualizada una configuración de emacs remota y separada. He jugado con tramp, y ahora he reducido el tiempo de inicio a un nivel aceptable con el uso compartido de conexiones ssh , es útil y extremadamente útil para, por ejemplo, scpcompletar nombres de archivos remotos. Sin embargo, todavía no es una solución perfecta para ejecutarse dentro de una sola sesión, y sus desventajas actualmente superan sus ventajas.
TooTone
Otras opciones de ssh que pueden ayudar incluyen obtener el nivel correcto de compresión ssh. ¿Cuáles son los inconvenientes de la sesión única que está experimentando?
Tim X
Ayer tuve un problema en el que un archivo que abrí era de solo lectura, y también cuando lo hago, sshel indicador se muestra mal con algunos ^caracteres prefijados. Hoy lo intenté nuevamente y la edición de archivos es perfecta, pero el mensaje aún está en mal estado. También mi sospecha es que no todo será perfecto. Por ejemplo, ejecutar agun proceso en la máquina remota pero tuve menos suerte haciendo un rgrep. Ciertamente parece que vale la pena investigar un poco más ( github.com/ieure/ssh-el en melpa parece interesante) cuando tengo tiempo, y volver a publicar cualquier pregunta en este sitio; Gracias por plantearlo.
TooTone
Dependiendo de su caso de uso, obtener un vagabundo exactamente correcto puede ser un desafío, pero vale la pena el esfuerzo. El mensaje en mal estado suena como si pudieras tener caracteres de escape de color ansi. Quizás sea necesario cargar el paquete ansi-color. Además, intente simplemente usar vagabundo sin ninguna configuración: los valores predeterminados generalmente son acertados. Tamp es potente, pero complejo de configurar a veces.
Tim X