Ulkoisen päätelaitteen avaaminen emacsista
On joulukuu 1, 2020 by adminUpouusi emacs-käyttäjä täällä.
Haluan pystyä avaamaan päätelaitteen, jolla on nykyinen tiedostopolku emacsista, kuten mitä open terminal here
-paketti tekee ylevässä tekstissä 2.
Päätteellä tarkoitan erillistä ulkoista pääteemulaattoria, joka käyttää bash: ta tai zsh: ää, kuten gnome-terminal, ei emacien sisällä olevia emulointeja, kuten M-x shell
M-x eshell
, jota en voi arvostaa toistaiseksi.
Googlen, mutta minulta ei löytynyt mitään … Näyttää siltä, että emacs-kaverit todella nauttivat elämästä emacsissa.
Kommentit
Vastaa
Toinen yritys, joka kieltää prosessin, jotta päätelaitteesi selviytyy myös sen jälkeen emacs tapetaan.
(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))
Kommentit
- Onko mahdollista sitoa kutunut terminaali emacs-prosessin käyttöikä?
- Tämä ’ ei toimi (emacs jäätyy, kunnes pääte poistuu), jos päätelaitteesi luo virheenkorjausviestejä ladattaessa. Korjaa korjaamalla
2>&1
– ja>/dev/null
-järjestys (jotta>/dev/null
tulee ensin) . - Kun yritän tätä, Emacs ei anna ’ edes antaa minun kutsua toimintoa. Arvioinnin jälkeen minipuskuri sanoo
gnome-terminal-here
, mutta kun syötätgnome-terminal-here
, se sanoo[No match]
. - @ UTF-8 Tämä ’ johtuu siitä, että funktiota ei ’ ilmoitettu interaktiivisena komennona. Katso muokkaukseni.
Vastaa
Mitä pääteemulaattoria käytät? Ota esimerkkinä KDE ”s Konsole
, kirjoita vain funktio:
(defun open-konsole () (interactive) (call-process "konsole" nil 0 nil "--workdir" default-directory))
Viidennen sijan argit ovat konsole argumentti. Katso haluamasi päätesimulaattorin man-sivu.
M-x open-konsole
avaa uuden konsole-prosessin ja käyttää nykyistä default-directory
(pwd
ELispissä) työhakemistona.
Kommentit
- Uusi välilehti voidaan avata, jos konsole on jo käynnissä
(call-process "konsole" nil 0 nil "--new-tab" "--workdir" default-directory)
-palvelun kanssa. Myös(call-process "wmctrl" nil 0 nil "-a" "\" – Konsole\"")
aktivoi ikkunansa.
Vastaa
Voit käyttää ulkoista pakettia terminal-here . Tämä tekee vain yhden asian, mutta ei se hyvin; tarkalleen mitä pyysit. Ja toimii minulle useilla käyttöjärjestelmillä.
Vastaus
Muut vastaukset eivät toimineet minulle. Tämä koodi:
(defun open-gnome-terminal () (interactive) (shell-command "gnome-terminal"))
Vastaa
Suurimman osan ajastani käytän shell-mode
. Joten käytän voimakkaasti shell-here . Mutta kun tarvitsen ulkoista päätelaitetta. Käytän urxvt-clientia tmux: n kanssa seuraavasti:
- Luo ”term-here” -niminen tiedosto kansioon / usr / local / bin / sisältävä
urxvtc -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
- Luo uusi toiminto emacsissa
(defun term-here () (interactive) (start-process "" nil "term-here"))
- Sitoutu suosikkinäppäimeen
Tämä avaa urxvt-clientin (tmux: lla) nykyiseen hakemistoon. Sidon sen dired-mode-mapiin.
(use-package dired :ensure nil :ensure-system-package urxvt :bind ((:map dired-mode-map ("," . term-here))))
Valitsin urxvt-client, koska se on nopea ja yksinkertainen. Älä unohda suorittaa urxvt-daemonia käynnistyksen yhteydessä.
Vastaa
Rakentamalla päätelaitteeseen, kuten aiemmin ehdotettiin, I luonut pienen toiminnon, joka määrittää suoritettavan ohjelman järjestelmästä ja työpöytäympäristöstä riippuen.Se voi olla hyödyllinen, jos haluat vaihtaa työpöytää tai pitää .emacs
synkronoituna useiden tietokoneiden välillä. Huomaa, että en testannut Windows / darwin / gnome / … -koodikoodia, vain KDE on tällä hetkellä testattu.
;; ########################################################## ;; ### 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))
Vastaa
Tämä toimi minulle hyvin: (delete-window (async-shell-command "gnome-terminal"))
. Vaihda päätelaitteesi komento.
M-x
ansi-term
? Se ’ on paljon parempi kuinshell
. Käytän sitä ja se toimii todella hyvin. Vai tarkoitatteko uutta graafista päätelaitetta (kuten avaamallagnome-terminal
)?M-! gnome-terminal
, se toimii. ’ Mietin, miksiM-! bash
ei voinut tehdä ’ sitä.bash
on kuori,M-! bash
voitti varmasti ’ t tekemään mitä haluat. Selvitä, mitä pääteemulaattoria ’ käytät ensin.