Apri terminale da emacs


11

Esiste un modo rapido (scorciatoia da tastiera) per aprire un emulatore di terminale (nel mio caso urxvt) nella stessa directory del file nel buffer emacs corrente?

Risposte:


15

La combinazione M-!consente di avviare i comandi della shell. Potresti usarlo per lanciarne uno separato urxvt.

M-! urxvt RET

L'ho appena provato con xterm(non ho urxvt) e si è aperto nella stessa directory del file nel buffer.

Se vuoi definire un collegamento aggiungi qualcosa di simile nel tuo file init:

(global-set-key (kbd "C-c s") (kbd "M-! urxvt RET"))

Nel mio caso ho associato il collegamento a: Ctrl+ C- S.


9

Di solito uso M-x term.

Puoi anche effettuare il checkout:

  • M-x terminal
  • M-x shell

M-x termsta effettivamente lanciando un emulatore di terminale scritto in elisp. Dall'aiuto:

termine
M-x ... RET Avvia un emulatore di terminale in un nuovo buffer. (termine PROGRAMMA)

term è una funzione Lisp compilata interattiva in `term.el '.

Avviare un emulatore di terminale in un nuovo buffer. Il buffer è in modalità Term; vedi `term-mode ' per i comandi da usare in quel buffer.

Digitare Cc b per passare a un altro buffer.


1
Grazie, non lo sapevo M-x term, sembra carino ma non è esattamente quello che voglio. Voglio iniziare non una shell (ad esempio basho zshin un buffer emacs ma un emulatore di terminale ( xtermo urxvt...).
studente

1
@student dai un'occhiata amulti-term
Ulrich Dangel

8

Il comando emacs M-x shellavvierà una shell in un nuovo buffer (o passerà a un buffer di shell esistente, se presente). Se si tratta di un nuovo buffer della shell, verrà avviato nella directory del file visitato nel buffer corrente. Se è un buffer di shell esistente, rimarrà comunque nella directory in cui è stato lasciato dopo l'ultimo utilizzo. Per ottenere sempre il comportamento desiderato, ricordati di eliminare il buffer della shell quando hai finito ( C-x k)

Se M-x shellsi digita troppo, è possibile impostare una chiave globale per avviare una shell. Qualcosa come (global-set-key (kbd "C-x S") 'shell)nel tuo file di avvio dovrebbe farlo (ma fai attenzione a non mascherare un altro comando utile con il tuo collegamento!)

Inoltre, tieni presente che si tratta di un "terminale stupido", quindi alcuni comandi come git commitopzioni come -me le password saranno in chiaro sullo schermo.


3

Ho voluto eseguire un'applicazione terminale dedicato, konsole. Volevo aprire una nuova scheda in konsole se è in esecuzione, o accenderne una in caso contrario.

Da quando ero più giovane allora ho diviso l'implementazione tra emacs e bash. Chiamo il seguente defun da emacs:

(defun bk-konsoles ()
  "Calls: bk_konsoles.bash -- which starts new tab in a running konsole,"
  (interactive)
  (let ((curDir default-directory))
    (shell-command (concat "bk_konsoles.bash \"" curDir "\" 2>&1 > /dev/null & disown") nil nil)
    (kill-buffer "*Shell Command Output*")))

Il defun chiama script bash, bk_konsoles.bash:

#!/bin/bash

myPath=`echo $@ | sed 's/.$//'`

runningKonsole=`ps -e | grep konsole`
if [ "$runningKonsole"!="" ]; then
    if [ "$@"!="" ]; then
        konsole --new-tab --workdir "$myPath" 2>&1 > /dev/null
    else
        konsole --new-tab 2>&1 > /dev/null
    fi
    wmctrl -a " – Konsole"
else
    konsole
fi

1

Il più delle volte che uso shell-mode. Quindi uso pesantemente shell-qui . Ma quando ho bisogno di un terminale esterno. Uso urxvt-client con tmux usando questo:

  • Crea il file "term-here" in / usr / local / bin / contenente
urxvtc -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
  • Crea una nuova funzione in emacs
(defun term-here ()
  (interactive)
  (start-process "" nil "term-here"))
  • Associa alla tua chiave preferita

Questo aprirà urxvt-client (con tmux) nella directory corrente. Lo associo a map-mode-map.

(use-package dired
  :ensure nil
  :ensure-system-package urxvt
  :bind ((:map dired-mode-map
           ("," . term-here))))

Ho scelto urxvt-client perché è veloce e semplice. Non dimenticare di eseguire urxvt-daemon all'avvio.


1

Se è installato il helmframework di completamento, è possibile utilizzare helm-run-external-command (C-x c C-c C-x)per eseguire un emulatore di terminale di propria scelta o qualsiasi altro programma esterno nella directory del buffer corrente.

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.