web-dev-qa-db-ja.com

emacsからターミナルを開く

現在のemacsバッファー内のファイルと同じ同じディレクトリでターミナルエミュレーター(私の場合はurxvt)を開く高速な方法(キーボードショートカット)はありますか?

10
student

組み合わせ M-!を使用すると、シェルコマンドを起動できます。これを使用して、別のurxvtを起動できます。

M-! urxvt RET

私はxtermurxvtを持っていません)で試したところ、バッファ内のファイルと同じディレクトリで開いていました。

ショートカットを定義したい場合は、initファイルに同様のものを追加します。

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

私の場合、ショートカットを以下にバインドしました: Ctrl+CS

15
rahmu

私は通常M-x term

チェックアウトすることもできます:

  • M-x terminal
  • M-x Shell

M-x termは、elispで記述された端末エミュレータを効果的に起動しています。ヘルプから:

用語
M-x ... RET新しいバッファでターミナルエミュレータを起動します。 (期間プログラム)

termは、 `term.el '内のインタラクティブにコンパイルされたLISP関数です。

ターミナルエミュレータを新しいバッファで起動します。バッファは期間モードです。そのバッファーで使用するコマンドについては、 `term-mode 'を参照してください。

C-c bと入力して、別のバッファーに切り替えます。

8
rahmu

EmacsコマンドM-x Shellは、新しいバッファーでシェルを開始します(または、既存のシェルバッファーがある場合はそれに切り替えます)。新しいシェルバッファの場合は、現在のバッファでアクセスされているファイルのディレクトリから開始されます。それが既存のシェルバッファである場合は、最後に使用した後に残したディレクトリに残ります。常に希望する動作を得るには、シェルバッファーを使い終わったら、必ずキルしてください(C-x k

M-x Shellの入力が多すぎる場合は、グローバルキーを設定してシェルを起動できます。スタートアップファイルの(global-set-key (kbd "C-x S") 'Shell)のようなもので実行できます(ただし、ショートカットで別の便利なコマンドをマスクしないように注意してください)。

また、これは「ダム端末」であるため、git commitなどの一部のコマンドには-mなどのオプションが必要であり、パスワードは画面上にプレーンテキストで表示されます。

8
D_Bye

専用のターミナルアプリケーションkonsoleを実行したかった。実行中の場合はkonsoleで新しいタブを開き、実行していない場合は起動します。

私は若い頃から、実装をemacsとbashに分割しました。 emacsから次のdefunを呼び出します。

(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は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
3
Adobe

ほとんどの場合、私はShell-mode。だから私は Shell-here を多用しています。しかし、外部端子が必要な場合。私はこれを使用してtmuxでurxvt-clientを使用します:

  • / usr/local/bin /に「term-here」という名前のファイルを作成します。
urxvtc -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
  • Emacsで新しい関数を作成する
(defun term-here ()
  (interactive)
  (start-process "" nil "term-here"))
  • お気に入りのキーにバインド

これにより、現在のディレクトリで(tmuxを使用して)urxvt-clientが開きます。 dired-mode-mapにバインドします。

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

Urxvt-clientを選択したのは、高速でシンプルだからです。起動時にurxvt-daemonを実行することを忘れないでください。

1
azzamsa

helm完了フレームワークがインストールされている場合は、helm-run-external-command (C-x c C-c C-x)を使用して、選択したターミナルエミュレーターまたは現在のバッファーのディレクトリにある他の外部プログラムを実行できます。

1
chrimuelle