回答:
C-u M-x shell それを行います。
新しいシェルの名前の入力を求められます。デフォルトのreturnキーを押すだけです(これは次のようになります) *shell*<2>
。
eshellでも動作します。
eshellを使用する場合の別のトリック:(新しいeshellを開始するのではなく)M-x eshell戻るのと同じように*eshell*
、数値のプレフィックス引数を使用すると、そのeshellバッファーに移動します。たとえば、C-3M-xeshellに移動します*eshell*<3>
。悲しいことに、(eshellではなく)シェルを使用する場合、このトリックは機能しないようです(少なくとも、私のEmacs 24.0.50.1では)。
C-u
コマンドを実行しuniversal-argument
ます。これは、次のコマンドに引数を注入する方法です。あなたはそれについてもっと読むことができますC-h k C-u
(C-h k
run describe-key
、非常に便利です!)
C-h f eshell
(C-h f
runs describe-function
)は、関数eshell
がオプションの引数を取ることを示しています。引用:数値のプレフィックス引数(などC-u 42 M-x eshell RET
)は、その番号のセッションに切り替え、必要に応じて作成します。非数値のプレフィックスargは、新しいセッションを作成することを意味します。
シェルに画面のようなインターフェースを使用すると便利な場合もあります。私は自分で書きましたが、他にもEmacsScreenなどがあります。
4年以上経過した後も、この問題をまだ検討している人がいるので、シェルをロードしてその名前を尋ねるように書いた関数を公開します。これにより、ファイルのソート専用のシェルには「sort-files」、ハイブクエリの実行専用のシェルには「hive」という名前を付けることができます。私はそれを毎日使用しています(emacs 24):
(defun create-shell ()
"creates a shell with a given name"
(interactive);; "Prompt\n shell name:")
(let ((shell-name (read-string "shell name: " nil)))
(shell (concat "*" shell-name "*"))))
これにより、たまたま使用しているバッファに新しいシェルインスタンスが自動生成されます。それをMSまたはそのようなものにバインドし、即座に喜びます:
(defun new-shell ()
(interactive)
(let (
(currentbuf (get-buffer-window (current-buffer)))
(newbuf (generate-new-buffer-name "*shell*"))
)
(generate-new-buffer newbuf)
(set-window-dedicated-p currentbuf nil)
(set-window-buffer currentbuf newbuf)
(shell newbuf)
)
)
結果がさらにひどい括弧であるにもかかわらず、letを使用した書き換えを推奨してくれたphilsに感謝します...:\
let
ローカルでの使用を目的としている場合は、変数をバインドする必要があります。現在、currentbuf
およびのグローバル値がありnewbuf
ます。
これにより、関数を呼び出すたびに新しいシェルが開き、必要に応じて自動的に名前が変更されます。追加されたプラスは、ファイルをリモートで編集している場合(dired / tramp ...)、これによりリモートホストでシェルが開き、リモートホスト名で自動的に名前が変更されます。
(defun ggshell (&optional buffer)
(interactive)
(let* (
(tramp-path (when (tramp-tramp-file-p default-directory)
(tramp-dissect-file-name default-directory)))
(host (tramp-file-name-real-host tramp-path))
(user (if (tramp-file-name-user tramp-path)
(format "%s@" (tramp-file-name-user tramp-path)) ""))
(new-buffer-nameA (format "*shell:%s*" host))
(new-buffer-nameB (generate-new-buffer-name new-buffer-nameA))
(currentbuf (get-buffer-window (current-buffer)))
)
(generate-new-buffer new-buffer-nameB)
(set-window-dedicated-p currentbuf nil)
(set-window-buffer currentbuf new-buffer-nameB)
(shell new-buffer-nameB)
))