Kopiuj/Wklej w Emacs ANSI-term shell
Skonfigurowałem mój emacs do uruchamiania zsh shell w ramach ANSI-term. Jednak kopiowanie / wklejanie nie działa, tzn. nic nie jest wklejane z kill-ring do terminala. Zmiana terminu na vt100 lub eterm nie rozwiązuje problemu.
Będziemy wdzięczni za wszelkie pomysły i rozwiązania.Aby podać kontekst skonfigurowałem ansi-term w następujący sposób:
(global-set-key "\C-x\C-a" '(lambda ()(interactive)(ansi-term "/bin/zsh")))
(global-set-key "\C-x\ a" '(lambda ()(interactive)(ansi-term "/bin/zsh")))
6 answers
Możesz po prostu przełączać się między trybem znakowym i liniowym podczas korzystania z terminala. C-c C-j uruchomi term-line-mode
, który traktuje bufor terminala bardziej jak zwykły bufor tekstowy, w którym można przesuwać kursor i przesuwać tekst. Możesz wrócić do trybu znakowego, uruchamiając term-char-mode
z C-c C-k .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-11 14:53:44
Jak opisano w ten piękny fragment bloga , istnieje funkcja, term-paste
, w term.el
, która robi dokładnie to, co chcesz. Domyślnie jest to związane tylko z S-insert
, ale blog jest zalecany C-c C-y
wydaje się dobrą sugestią.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-31 21:49:44
ansi-term
, w char-mode
, pobiera zwykłe wiązania dla emulacji terminala. Potrzebujesz nowego wiązania oraz sposobu na poprawne wyjście ansi-term
. Używam tego:
(defun ash-term-hooks ()
;; dabbrev-expand in term
(define-key term-raw-escape-map "/"
(lambda ()
(interactive)
(let ((beg (point)))
(dabbrev-expand nil)
(kill-region beg (point)))
(term-send-raw-string (substring-no-properties (current-kill 0)))))
;; yank in term (bound to C-c C-y)
(define-key term-raw-escape-map "\C-y"
(lambda ()
(interactive)
(term-send-raw-string (current-kill 0)))))
(add-hook 'term-mode-hook 'ash-term-hooks)
Kiedy to zrobisz, C-c-Y będą szarpać. Robi tylko jedno szarpnięcie, a ty nie możesz przechodzić przez swój bufor śmierci. Jest to możliwe, ale jeszcze tego nie wdrożyłem.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-06 14:42:50
Powyższe rozwiązania dobrze sprawdzają się przy kopiowaniu tekstu z jakiegoś bufora do ANSI-term, ale nie są w stanie skopiować tekstu z ANSI-term do innego bufora (np. skopiuj polecenie, które właśnie uruchomiłeś do edytowanego skryptu powłoki). Dodaję to do mojego .plik emacs rozwiązał ten problem dla mnie (w Emacs 24.4):
(defun my-term-mode-hook ()
(define-key term-raw-map (kbd "C-y") 'term-paste)
(define-key term-raw-map (kbd "C-k")
(lambda ()
(interactive)
(term-send-raw-string "\C-k")
(kill-line))))
(add-hook 'term-mode-hook 'my-term-mode-hook)
Zauważ, że jeśli chcesz powiązać kill / yank z naciśnięciem klawisza, który zaczyna się od znaków escape ANSI-term (domyślnie C-C i C-x), i chcesz, aby to działało w mało prawdopodobnym przypadku, gdy te Zmień, możesz zamiast tego zdefiniować swoje naciśnięcia klawiszy (bez wiodącej ucieczki) na term-raw-escape-map
, Jak to jest zrobione w odpowiedzi user347585.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-14 03:17:24
Te inne rozwiązania nie działają dobrze dla mnie, przełączanie między trybem znakowym i liniowym powoduje, że ansi-term przestaje działać poprawnie losowo, a ustawienie term-paste ANSI-term na C-c C-y( na podstawie łącza glifu), nie zadziałało fragment kodu był dla term, a nie ANSI-term:
(eval-after-load "ansi-term"
'(define-key ansi-term-raw-map (kbd "C-c C-y") 'term-paste))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-13 18:14:17
Włączyłem xterm-mouse-mode
, potem mogłem wybrać tekst za pomocą myszy i skopiować za pomocą standardowego przycisku Mac command C w ansi-term
w Emacs GUI W Mac OS X,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-25 00:37:44