emacs에서 외부 터미널을 여는 방법
On 12월 1, 2020 by admin새로운 emacs 사용자는 여기에 있습니다.
open terminal here
패키지가 숭고한 텍스트 2에서하는 것과 같이 emacs에서 현재 파일 경로로 터미널을 여는 기능을 갖고 싶습니다.
터미널이란 M-x shell
, 지금은 감사 할 수 없습니다.
Google을 봤지만 아무것도 찾지 못했습니다. emacs 사람들은 emacs에서 사는 것을 정말 좋아하는 것 같습니다.
Comments
답변
프로세스를 거부하여 터미널이 emacs가 종료됩니다.
(defun run-gnome-terminal-here () (interactive "@") (shell-command (concat "konsole --workdir" (file-name-directory (or load-file-name buffer-file-name)) " > /dev/null 2>&1 & disown") nil nil))
댓글
- 생성 된 터미널을 연결하는 방법이 있습니까? emacs 프로세스의 수명은 무엇입니까?
- 로드 할 때 터미널에서 디버그 메시지를 생성하면 작동하지 않습니다. ' (emacs는 터미널이 종료 될 때까지 정지됨) 문제를 해결하려면
2>&1
와>/dev/null
의 순서를 바꾸세요 (>/dev/null
가 먼저 오도록) . - 내가 이것을 시도 할 때 Emacs는 ' 내가 함수를 호출하도록 허용하지 않습니다. 평가 후 미니 버퍼에
gnome-terminal-here
라고 표시되지만gnome-terminal-here
를 입력하면[No match]
로 표시됩니다. - @ UTF-8 ' 함수가 대화 형 명령으로 선언되지 않았기 때문입니다 '. 내 수정 사항을 참조하세요.
답변
어떤 터미널 에뮬레이터를 사용하고 있습니까? KDE의 Konsole
를 예로 들어, 함수를 작성하세요 :
(defun open-konsole () (interactive) (call-process "konsole" nil 0 nil "--workdir" default-directory))
5 위의 인수는 konsole입니다. “의 주장. 선호하는 터미널 시뮬레이터의 매뉴얼 페이지를 참조하십시오.
M-x open-konsole
는 새 콘솔 프로세스를 열고 현재 default-directory
를 사용합니다. (ELisp의 pwd
) 작업 디렉토리로.
댓글
- 콘솔이있는 경우 새 탭을 열 수 있습니다. 이 (가) 이미
(call-process "konsole" nil 0 nil "--new-tab" "--workdir" default-directory)
로 실행되고 있습니다. 또한(call-process "wmctrl" nil 0 nil "-a" "\" – Konsole\"")
창을 활성화합니다.
답변
외부 패키지 terminal-here 를 사용할 수 있습니다. 이것은 한 가지 작업 만 수행하지만 요청한대로 정확하게 작동합니다. 여러 OS에서 저에게 적합합니다.
답변
다른 답변은 작동하지 않았습니다. 나를 위해. 이 코드는 다음을 수행합니다.
(defun open-gnome-terminal () (interactive) (shell-command "gnome-terminal"))
Answer
대부분의 경우 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"))
- 좋아하는 키에 바인딩
현재 디렉토리에서 urxvt-client (tmux 포함)가 열립니다. 나는 그것을 dired-mode-map에서 묶는다.
(use-package dired :ensure nil :ensure-system-package urxvt :bind ((:map dired-mode-map ("," . term-here))))
저는 빠르고 간단하기 때문에 urxvt-client를 선택합니다. 시작할 때 urxvt-daemon을 실행하는 것을 잊지 마십시오.
답변
이전에 제안한대로 터미널에서 빌드합니다. 시스템 및 데스크톱 환경에 따라 실행할 프로그램을 결정하는 작은 기능을 만들었습니다.데스크톱 변경을 좋아하거나 여러 컴퓨터간에 .emacs
동기화를 유지하는 경우 유용 할 수 있습니다. 내가 “windows / darwin / gnome / … 쉘 코드를 테스트하지 않았으며 현재 KDE 만 테스트되었습니다.
;; ########################################################## ;; ### Open terminal ;; ########################################################## ;; Define a function to recognize the desktop environment easily ;; You shouldn"t need to touch this function (defun get-desktop-environment () (interactive) (let ( ;; Create new variable with DE name (de_env (getenv "XDG_CURRENT_DESKTOP")) ;; Make sure search is case insensitive (case-fold-search t)) (cond ((eq system-type "darwin) "darwin") ((memq system-type "(windows-nt ms-dos cygwin)) "windows") ((string-match ".*kde.*" de_env) "kde") ((string-match ".*gnome.*" de_env) "gnome") ((string-match ".*unity.*" de_env) "unity") ((string-match ".*xfce.*" de_env) "xfce") ((string-match ".*lxde.*" de_env) "lxde") ((string-match ".*mate.*" de_env) "mate") ((string-match ".*cinnamon.*" de_env) "cinnamon") (t "unknown")))) ;; You can edit this function if you want to change the default command for a specific desktop (defun get-terminal (path) (alist-get (get-desktop-environment) "(("darwin" . ("open" "-a" "Terminal.app" ".")) ("windows" . ("cmd.exe" "/C" "start" "cmd.exe")) ("kde" . ("konsole" "--workdir" ".")) ("gnome" . ("gnome-terminal" "--working-directory=.")) ("xfce" . ("xfce4-terminal" "--working-directory=."))) "("x-terminal-emulator") nil "equal)) (use-package terminal-here :ensure t :bind (("<f6>" . terminal-here-launch)) :config (setq terminal-here-terminal-command #"get-terminal))
답변
저에게는 완벽하게 작동했습니다 : (delete-window (async-shell-command "gnome-terminal"))
. 터미널 명령을 바꾸세요.
M-x
ansi-term
사용해 보셨습니까? '가shell
보다 훨씬 낫습니다. 저는 그것을 사용하고 정말 잘 작동합니다. 아니면 새로운 그래픽 터미널을 의미합니까 (gnome-terminal
)?M-! gnome-terminal
를 시도했습니다. 작동합니다. ' 왜M-! bash
가 ' 할 수 없는지 궁금합니다.bash
는 셸이며,M-! bash
확실히 이겼습니다 ' 원하는 작업을 수행하지 못했습니다. 먼저 사용중인 터미널 에뮬레이터를 ' 찾으세요.