쉘 / 터미널 모드에서 프롬프트 및 이전 출력을 편집 할 수 없게 만드는 방법은 무엇입니까?


9

이것은 명백히 피상적 인 질문입니다.

ansi-term처음 열 때 올바르게 작동하기 시작 하지만 몇 가지 명령, 예를 들어 C-a(라인 시작) 다음에 C-k(킬 라인) 명령을 수행하면 '편집 가능'모드로 저하되는 것처럼 보이 므로 전체 프롬프트가 지워집니다.

내 미적 정신을 위해 프롬프트와 이전 출력을 편집 할 수 없게 만드는 방법이 shell있습니까? (의미있는 차이가있을 때 ansi-term을 제외하도록 업데이트되었습니다.)

저는 Emacs 24.4에서 zsh를 사용하고 있습니다. OS는 Virtual Box를 통한 LXDE (Ubuntu 14.04)입니다.

(이상적으로 여전히 커서를 움직일 수 있습니다 ...)


1
우연히 "홀수"운영 체제에 있습니까? 일반적으로 셸 모드에서 Ca 는 프롬프트 후에 명령 줄의 시작 부분으로 이동 하며, 맨 처음으로 이동하려면 두 번째 Ca가 필요합니다. 윈도우와 솔라리스 (이전의 삶)에서 나는 보통 Ca가 맥 OS, 리눅스 등에서 처음으로 뛰어 올랐다는 것을 알았다. 그것은 나에게 예상대로 작동한다.
Mark Aufflick

@Mark A : 현재 설정을 포함하여 몇 가지 세부 정보를 포함하도록 원본 게시물을 업데이트했습니다.
iceman

설명 된 이상 음의 동작은 이상한 기본값 또는로 선 모드로 전환 한 것처럼 들립니다 C-c C-j. 해당 기본값을 찾거나를 사용하여 문자 모드로 전환하십시오 C-c C-k.
wasamasa

1
shell-mode/ term-mode각각은 /에서 파생되지 않기 때문에 comint-mode동시에 두 가지 매우 다른 질문을하고 있습니다. 이것을 두 가지 질문으로 나누었습니까?
purple_arrows

답변:


16

comint 파생 모드 (예 shell: ielm, ...)는 필터 기능을 지원하며 다음 코드 조각은 출력 및 프롬프트를 읽기 전용으로 만듭니다.

(setq comint-prompt-read-only t)

(defun my-comint-preoutput-turn-buffer-read-only (text)
  (propertize text 'read-only t))

(add-hook 'comint-preoutput-filter-functions 'my-comint-preoutput-turn-buffer-read-only)

에 관해서는 ansi-term(에서 파생되지 않는 COMINT , 두 개의 작동 모드, 기능) char mode쉘의 바인딩과 가능한 한에서 실행되는 소프트웨어에 대한 진실과 같은 숙박을하고 line mode당신으로 편집 할 수있는 버퍼를 당신을 기쁘게 할 수있다. 명령 출력을 편집 하려면 일반적으로 char mode(바인딩 C-c C-k) 상태를 유지하고 때로는 line mode(바인딩 C-c C-j)으로 전환해야 합니다.


이것은 정말 예뻤지만 작동을 멈췄습니다… :( 상당히 많은 코드를 필요로하는 작업 솔루션이 있습니다 → github.com/michalrus/dotfiles/commit/…
Michal Rus

Dunno, 여전히 25.2에서 작동합니다.
wasamasa

어떤 의미에서는이 텍스트를 삭제할 수 없지만 변경 불가능한 새 텍스트를 삽입 할 수는 있습니다.
Michal Rus

1
나는 그것을 구체적으로 테스트하지 않았다.
wasamasa

죄송합니다. 찾는 사람이 한 가지 더 있습니다. 나는 몇 가지 허점을 놓쳤다. 이것은 나를 위해 완벽하게 작동합니다. github.com/michalrus/dotfiles/blob/…
Michal Rus

2

term와 혼합 shell-mode하면 변수가 comint-use-prompt-regexp가끔 설정되는 것처럼 보입니다. 지역 : 이것은 당신이 설명한 것 같은 약간의 동작이 발생 쉘 모드 C-a 하여 라인의 시작에 갈 것이다는 C-k프롬프트를 포함, 전체 라인을 죽일 것이다.

간단한 수정은으로 재설정 comint-use-prompt-regexp하여 C-: (setq comint-use-prompt-regexp nil)셸 모드에서 커서 이동 키가 인식하는 텍스트 속성을 사용하도록하는 것입니다.

GNU Emacs 매뉴얼에 이것이 어떻게 작동하는지에 대한 설명이 있습니다 : https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Prompts.html


1

변수 comint-prompt-read-only를로 맞춤 설정해보십시오 t.

이것은 영향을 미치며 shell-mode, 다른 것에서 comint-mode는 파생 되지만 그렇지 않습니다 term-mode.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.