Buka terminal dari emacs

11

Apakah ada cara cepat (pintasan keyboard) untuk membuka terminal emulator (dalam urxvt kasus saya) di direktori yang sama dengan file di buffer emacs saat ini?

siswa
sumber

Jawaban:

15

Kombinasi ini M-!memungkinkan Anda untuk meluncurkan perintah shell. Anda dapat menggunakannya untuk meluncurkan yang terpisah urxvt.

M-! urxvt RET

Saya baru saja mencobanya dengan xterm(saya tidak punya urxvt) dan itu terbuka di direktori yang sama dengan file di buffer.

Jika Anda ingin menetapkan pintasan, tambahkan sesuatu yang serupa di file init Anda:

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

Dalam kasus saya, saya mengikat pintasan ke: Ctrl+ C- S.

rahmu
sumber
9

Saya biasanya menggunakan M-x term.

Anda juga dapat checkout:

  • M-x terminal
  • M-x shell

M-x termsecara efektif meluncurkan terminal emulator yang ditulis dalam elisp. Dari bantuan:

istilah
M-x ... RET Mulai terminal-emulator di buffer baru. (istilah PROGRAM)

term adalah fungsi Lisp interaktif yang dikompilasi dalam `term.el '.

Mulai terminal-emulator di buffer baru. Buffer berada dalam mode Term; lihat `term-mode ' untuk perintah yang digunakan dalam buffer itu.

Ketik Cc b untuk beralih ke buffer lain.

rahmu
sumber
1
Terima kasih, saya tidak tahu M-x term, sepertinya menyenangkan tetapi tidak persis seperti yang saya inginkan. Saya ingin memulai bukan shell (misalnya bashatau zshdalam buffer emacs tetapi emulator terminal ( xtermatau urxvt...)
siswa
1
@student lihatmulti-term
Ulrich Dangel
8

Perintah emacs M-x shellakan memulai shell di buffer baru (atau beralih ke buffer shell yang ada, jika ada). Jika ini adalah buffer shell baru, itu akan dimulai di direktori file yang sedang dikunjungi di buffer saat ini. Jika ini merupakan buffer shell yang ada, itu masih akan berada di direktori tempat Anda meninggalkannya setelah terakhir menggunakannya. Agar selalu mendapatkan perilaku yang Anda inginkan, ingat untuk membunuh buffer shell ketika Anda selesai melakukannya ( C-x k)

Jika M-x shellterlalu banyak mengetik, Anda dapat mengatur kunci global untuk memulai shell untuk Anda. Sesuatu seperti (global-set-key (kbd "C-x S") 'shell)dalam file startup Anda harus melakukannya (tetapi berhati-hatilah untuk tidak menutupi perintah lain yang berguna dengan pintasan Anda!)

Perlu diketahui juga bahwa ini adalah "terminal bisu" sehingga beberapa perintah seperti git commitopsi kebutuhan seperti -mdan kata sandi akan ada dalam plaintext di layar Anda.

D_Bye
sumber
3

Saya ingin menjalankan aplikasi terminal khusus konsole,. Saya ingin membuka tab baru di konsole jika sedang berjalan, atau mengaktifkannya jika tidak.

Karena saya masih muda maka saya membagi implementasi antara emacs dan bash. Saya memanggil defun berikut dari 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*")))

Defun panggilan bash script, 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
Adobe
sumber
1

Sebagian besar waktu saya gunakan shell-mode. Jadi saya banyak menggunakan shell-sini . Tetapi ketika saya membutuhkan terminal eksternal. Saya menggunakan urxvt-client dengan tmux menggunakan ini:

  • Buat file bernama 'term-here' di / usr / local / bin / yang berisi
urxvtc -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
  • Buat fungsi baru di emacs
(defun term-here ()
  (interactive)
  (start-process "" nil "term-here"))
  • Ikat kunci favorit Anda

Ini akan membuka urxvt-client (dengan tmux) di direktori Anda saat ini. Saya mengikatnya di dired-mode-map.

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

Saya memilih urxvt-client karena cepat dan sederhana. Jangan lupa jalankan urxvt-daemon Anda saat startup.

azzamsa
sumber
1

Jika Anda telah helmmenginstal kerangka penyelesaian, Anda dapat menggunakan helm-run-external-command (C-x c C-c C-x)untuk menjalankan terminal-emulator pilihan Anda atau program eksternal lainnya di direktori buffer saat ini.

Chrimuelle
sumber