답변:
예, 신호 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을 사용하여 테스트했습니다.)
(when ...)
코드 스 니펫에 양식 이있는 이유입니다 .이 방법으로 우리가 신경 쓰지 않는 신호는 기본 처리기로 전달되고 buffer-read-only
무시됩니다.
command-error-default-function
.
phils
이 정확 하다고 믿습니다 . 즉, 우리는 이것을 위해 새로운 C 코드가 필요합니다.
그 오류의 원인은 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 소스 해킹을 수행하는 것은 앞으로 혼란의 주요 원인이 될 수 있습니다. 그래서 나는 그것을하지 않을 것입니다.
(defun barf-if-buffer-read-only () nil)
한 이콜에 주석을 달고 xsignal1
이맥스를 재건 하는 것과 같은 효과가 있습니다 . :-)
nil
: emacs.stackexchange.com/questions/2935/how-can-i-bring-back-nil
command-error-function
값을 재정의 하지 않고 "버퍼 읽기 전용"오류뿐만 아니라 모든 오류에 영향을 미치지 않습니까? 이 모든 변경 사항이 소스 코드에서 어떤 영향을 줄지 정확히 알 수 없습니다.