Come posso avviare automaticamente una shell dopo aver avviato emacs


8

Uno dei miei motivi principali per l'utilizzo di Emacs è quello di ottenere un ambiente potente dopo aver sshinserito un computer remoto. La prima cosa che faccio dopo aver avviato Emacs è correre M-x shellper ottenere una riga di comando. Poiché l'avvio di Emacs impiega un po 'di tempo, sarebbe molto comodo avere un'opzione per chiedere a Emacs di avviare una shell quando la eseguo, dopo aver analizzato il mio file di inizializzazione (ho alcuni hook di shell impostati per fare una cosa e l'altra ). Idealmente mi piacerebbe essere in grado di eseguirlo con un'opzione aggiuntiva in modo da non dover aggiungere nulla di specifico al mio file di inizializzazione sui computer remoti (potrei impostare un bashalias se lo volessi). Qualcosa come questo:

emacs afile1 afile2 -startShell

In effetti, dato che stabilire la connessione sicura richiede circa 30 secondi, quello che mi piacerebbe davvero fare è costruire "start a shell" nel sshcomando stesso, usando sshcon -tper avviare un programma basato su schermo .

ssh -t me@remote emacs afile1 afile2 -startShell

Ho dato un'occhiata alla documentazione degli argomenti della riga di comando per Emacs, ma sto ancora iniziando su Emacs, Lisp e la personalizzazione e non era immediatamente ovvio come procedere per gestire gli argomenti della riga di comando. Come potrei fare per fare questo?

( Domanda correlata sueshell menzionata dall'utente @Name.)


può :). ssh -t me@remote 'emacs -f shell'funziona come un sogno.
TooTone,

@Nome grazie l'ho provato, ma stavo dicendo che potresti aggiungere il tuo commento come risposta e lo accetterei perché risolve il mio problema. O forse la mia domanda dovrebbe essere contrassegnata come duplicata. Sarebbe bene non lasciarlo aperto, in entrambi i casi.
TooTone,

Risposte:


4

Puoi usare l'opzione -f per chiamare una funzione emacs dalla riga di comando.

Il commento mostra come farlo su ssh usando -t e questo è un modo. Tuttavia, presenta alcuni svantaggi. Il principale è che il tuo emacs in esecuzione da remoto, il che significa che dovrai avere tutte le tue cose di configurazione di emacs sul sistema remoto e mantenerle localmente per la tua versione locale. Si perde anche un po 'di flessibilità se si desidera fare cose a livello locale e remoto e magari spostarsi nel mezzo.

Un'alternativa sarebbe quella di eseguire emacs localmente e avviare una shell dalla riga di comando e quindi ssh da quella shell. È possibile utilizzare il vagabondo su ssh per modificare file ecc., Quindi utilizzare la shell per eseguire una sessione ssh interattiva.

emacs -f shell

Una volta che ti senti a tuo agio, potresti guardare alcuni dei pacchetti relativi a ssh là fuori per emacs. Dovrebbe quindi essere possibile chiamare una funzione da uno di quei pacchetti dalla riga di comando per automatizzare la creazione di una sessione ssh. Potrebbe essere necessario scrivere una semplice funzione wrapper per semplificare l'operazione. Quindi avrai solo 1 configurazione di emacs config da gestire e otterrai la flessibilità aggiuntiva.


1
Hai ragione nel ssh -t ... 'emacs -f shell'dire che il principale svantaggio di usare direttamente da un terminale è che devo mantenere aggiornata una configurazione emacs remota separata. Ho giocato con il vagabondo e ora ho ridotto i tempi di avvio a un livello accettabile con la condivisione della connessione ssh , è utilizzabile ed estremamente utile, ad esempio, per il scpcompletamento di nomi di file remoti. Tuttavia, non è ancora una soluzione perfetta per l'esecuzione all'interno di una singola sessione e i suoi svantaggi attualmente superano i suoi vantaggi.
TooTone,

Altre opzioni ssh che possono aiutare a ottenere il giusto livello di compressione ssh. Quali sono gli inconvenienti della singola sessione che stai riscontrando?
Tim X

Ieri ho avuto un problema in cui un file che ho aperto era di sola lettura e anche quando lo faccio sshil messaggio viene visualizzato male con alcuni ^caratteri prefissati. Oggi ho provato di nuovo e la modifica dei file è semplice, ma il prompt è ancora incasinato. Anche il mio suspicioun è che non tutto sarà senza soluzione di continuità. Ad esempio, l'esecuzione ha agavviato un processo sulla macchina remota, ma ho avuto meno fortuna a farlo rgrep. Sembra certamente che valga la pena esaminarne un po 'di più ( github.com/ieure/ssh-el su melpa sembra interessante) quando avrò tempo - e postare eventuali domande su questo sito; grazie per averlo sollevato.
TooTone,

A seconda del tuo caso d'uso, ottenere il vagabondo esattamente giusto può essere una sfida, ma ne vale la pena. Il messaggio incasinato sembra che potresti avere caratteri di escape ansi-color. Forse il pacchetto ansi-color deve essere caricato. Inoltre, prova a utilizzare solo il vagabondo senza alcuna configurazione: le impostazioni predefinite sono in genere esatte. Tamp è potente, ma a volte complesso da configurare.
Tim X
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.