"버퍼는 읽기 전용"경고를 비활성화하는 방법이 있습니까?


9

이 경고는 에코 영역의 현재 텍스트를 잠깐 동안 숨기므로 특히 유용하고주의가 산만하지 않습니다. 어쨌든 읽기 전용 영역에 쓸 수 없다는 것을 알 수 있기 때문에 불필요한 것 같습니다. 비활성화하는 방법이 있습니까?

답변:


9

예, 신호 command-error-function를 무시하는 기능 으로 설정 하여 이러한 메시지를 비활성화 할 수 있습니다 buffer-read-only.

(defun my-command-error-function (data context caller)
  "Ignore the buffer-read-only signal; pass the rest to the default handler."
  (when (not (eq (car data) 'buffer-read-only))
    (command-error-default-function data context caller)))

(setq command-error-function #'my-command-error-function)

(GNU Emacs 24.5.1을 사용하여 테스트했습니다.)


호기심에서 command-error-function값을 재정의 하지 않고 "버퍼 읽기 전용"오류뿐만 아니라 모든 오류에 영향을 미치지 않습니까? 이 모든 변경 사항이 소스 코드에서 어떤 영향을 줄지 정확히 알 수 없습니다.
Kaushal Modi

1
그렇습니다. 이것이 바로 (when ...)코드 스 니펫에 양식 이있는 이유입니다 .이 방법으로 우리가 신경 쓰지 않는 신호는 기본 처리기로 전달되고 buffer-read-only무시됩니다.
콘스탄틴

아 좋아, 나는 그 전화를 완전히 놓쳤다 command-error-default-function.
Kaushal Modi

1
Sweet, 나는 미니 버퍼에서만 "텍스트는 읽기 전용"쓰레기를 제거하는 쉬운 방법을 찾고 있었다.
whacka

1
@ mcb : 내가 아는 한 에코 영역과 미니 버퍼를 분리하는 것은 불가능합니다. 나는 당신이 연결 한 답변phils 이 정확 하다고 믿습니다 . 즉, 우리는 이것을 위해 새로운 C 코드가 필요합니다.
Constantine

3

'버퍼 읽기 전용'오류의 원인

그 오류의 원인은 Buffer is read-only: <#BUFFER-NAME>C 소스 코드에 있다고 생각합니다 .

이에 대한 해결책은 이 특정 라인 을 주석 처리하여 소스 코드를 조정하고 로컬로 emacs를 빌드하는 것 입니다.

참고로 다음은 해당 오류를 발생시키는 코드 스 니펫입니다.

if (!NILP (BVAR (current_buffer, read_only))
    && NILP (Vinhibit_read_only)
    && NILP (Fget_text_property (pos, Qinhibit_read_only, Qnil)))
  xsignal1 (Qbuffer_read_only, Fcurrent_buffer ());
return Qnil;

.. 그리고 그 xsignal라인을 주석 처리하면 트릭을 수행 할 수 있습니다.


제안 된 접근법

읽기 전용 버퍼에서 작업하는 동안이 성가심을 피하는 훨씬 쉬운 방법이 있습니다. 일시적으로 읽기 전용으로 만들 수 없습니다.

  • 이렇게하면 M-x read-only-mode(기본적 구속 C-x C-q) 전환 있는 읽기 전용 모드와 편집 모드 사이의 버퍼를.

따라서 이러한 오류가 많이 발생하면을 눌러 버퍼를 임시로 편집 할 수있게하십시오 C-x C-q.


경고에 대한 참고 사항 : C 소스 해킹을 수행하는 것은 앞으로 혼란의 주요 원인이 될 수 있습니다. 그래서 나는 그것을하지 않을 것입니다.


1
내가 말할 수있는 (defun barf-if-buffer-read-only () nil)한 이콜에 주석을 달고 xsignal1이맥스를 재건 하는 것과 같은 효과가 있습니다 . :-)
Constantine

elisp에서 C 함수를 무시할 수있는 @Constantine TIL. 감사!
Kaushal Modi

elisp를 사용하여 내용을 수정하는 것과 관련하여 nil: emacs.stackexchange.com/questions/2935/how-can-i-bring-back-nil
Constantine
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.