To z pewnością pytanie powierzchowne.
Chociaż ansi-term
zaczyna się zachowywać poprawnie, gdy go otwieram po raz pierwszy, wydaje się, że po kilku poleceniach przechodzi w tryb „edytowalny”, np. Kiedy to zrobię C-a
(początek linii), a następnie C-k
(zabijanie linii), wymazuje cały monit.
Jeśli chodzi o moje zdrowie psychiczne, czy istnieje sposób, aby podpowiedzi i poprzednie wyniki były nieedytowalne (dla shell
)? (Zaktualizowano, aby wykluczyć ansi-term z uwagi na znaczące różnice).
Używam zsh w Emacs 24.4; System operacyjny to LXDE (Ubuntu 14.04) przez Virtual Box.
(Idealnie nadal byłbym w stanie poruszać kursorem ...)
C-c C-j
. Spróbuj dowiedzieć się, czy to ustawienie domyślne, lub przejdź do trybu char za pomocąC-c C-k
.shell-mode
/term-mode
odpowiednio nie / nie pochodzącomint-mode
, zadajesz tutaj dwa bardzo różne pytania jednocześnie. Może podzielisz to na dwa osobne pytania?Odpowiedzi:
tryby generowane przez komendę (takie jak
shell
,ielm
...) obsługują funkcje filtrów, następujący fragment kodu powoduje, że dane wyjściowe i monit są tylko do odczytu:Jeśli chodzi o
ansi-term
(który nie pochodzi z komendy ), ma dwa tryby działania,char mode
który pozostaje jak najbardziej zgodny z powiązaniami powłoki i uruchomionego w niej oprogramowania iline mode
który pozwala ci edytować bufor, jak chcesz. Zasadniczo powinieneś pozostać wchar mode
(związany zC-c C-k
) i czasami przełączyć się naline mode
(związany zC-c C-j
) w celu edycji danych wyjściowych polecenia.źródło
Po zmieszaniu
term
zshell-mode
zmiennacomint-use-prompt-regexp
wydaje się ustawić sporadycznie. Powoduje to zachowanie trochę tak, jak opisałeś: w trybie powłoki C-a przejdzie na początek linii, C-kzabije całą linię, łącznie z pytaniem.Prostym rozwiązaniem jest zresetowanie
comint-use-prompt-regexp
z C-: (setq comint-use-prompt-regexp nil)zmuszając trybie powłoki do wykorzystania właściwości tekstu, które klawisze przemieszczania kursora są świadomi.Opis tego, jak to działa, znajduje się w podręczniku GNU Emacs: https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Prompts.html
źródło
Spróbuj dostosować zmienną
comint-prompt-read-only
dot
.Wpłynie to na
shell-mode
inne i wywodzą się z nichcomint-mode
, ale nie na ich podstawieterm-mode
.źródło