[emacs] Emacs에서 여러 쉘을 실행하는 방법

Windows 7에서 Emacs 23.3.1을 사용하고 있습니다. Mx 쉘을 사용하여 emacs에서 쉘을 실행할 수 있다는 것을 알고 있습니다. 동시에 여러 개의 셸 창을 갖고 싶지만 Mx 셸을 두 번 입력하면 동일한 셸 창이 열립니다.

다른 쉘 윈도우를 가질 수있는 방법이 있습니까?



답변

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에서는).


답변

쉘 버퍼의 이름을로 바꿀 수 있습니다 M-x rename-buffer. 그런 다음 두 번째 쉘을 시작할 수 있습니다.


답변

MultiTerm살펴보면 Emacs에서 여러 터미널을 훨씬 쉽게 관리 할 수 ​​있습니다.


답변

쉘과 같은 화면 인터페이스를 사용하는 것도 유용 할 수 있습니다. 나는 내 자신을 작성했지만 EmacsScreen 과 같은 다른 것들이 있습니다.


답변

4 년이 지난 후에도 일부 사람들이 여전히이 문제를보고 있다는 것을 알게되었으므로 쉘을로드하고 이름을 묻는 빠른 기능을 게시 할 것입니다. 그렇게하면 파일 정렬 전용 쉘인 “sort-files”와 하이브 쿼리 실행 전용 인 다른 “하이브”의 이름을 지정할 수 있습니다. 나는 매일 그것을 사용합니다 (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을 사용하여 다시 쓰기를 권장하는 필 덕분에 많은 감사를드립니다 … : \


답변

함수를 호출 할 때마다 새 쉘이 열리고 필요한 경우 자동으로 이름이 바뀝니다. 추가 된 것은 원격으로 파일을 편집하는 경우 (dird / 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)
  ))