파일이 읽기 전용 모드로 설정되어 있으면 Emacs 내에서 파일을 쓰기 모드로 변경하거나 그 반대로 변경하려면 어떻게해야합니까?
답변
MX 토글 읽기 전용
또는 최신 버전의 Emacs
MX 읽기 전용 모드
내 Windows 상자에서 Alt-x에 도달하면 메타 프롬프트가 표시되고 “toggle-read-only”를 입력하여 올바른 elisp 함수를 호출합니다.
기본 키보드 바인딩을 사용하는 경우
Cx Cq
( “Control-X Control-Q”라고 큰 소리로 읽음) 효과는 동일합니다. 그러나 emacs가 본질적으로 무한정 재구성 가능하다는 점을 감안하면 마일리지가 다를 수 있습니다.
주석에서 후속 조치 : 버퍼의 쓰기 가능 상태는 파일의 쓰기 가능 권한을 변경하지 않습니다. 읽기 전용 파일 에 쓰려고 하면 확인 메시지가 나타납니다. 그러나 파일을 소유 한 경우 파일에 대한 권한을 변경 하지 않고 변경 사항 을 작성할 수 있습니다 .
쓰기 권한 추가, 변경 쓰기, 쓰기 권한 제거의 여러 단계를 거치지 않고 파일을 빠르게 변경하려는 경우 매우 편리합니다. 마지막 단계는 잊어 버리고 나중에 실수로 변경 될 수 있도록 잠재적으로 중요한 파일을 열어 둡니다.
답변
‘file’과 ‘buffer’를 혼동하지 마십시오. C-x C-q
( toggle-read-only
)를 사용 하여 버퍼를 읽기 전용으로 설정하고 다시 되돌릴 수 있습니다 . 파일을 읽을 수는 있지만 쓸 수는 없지만 파일을 방문 할 때 얻게되는 버퍼 ( C-x C-f
또는 find-file
)는 자동으로 읽기 전용 모드로 설정됩니다. 파일 시스템의 파일에 대한 권한을 변경하려면 파일 dired
이 포함 된 디렉토리에서 시작 하십시오. dired에 대한 설명서는 info에서 찾을 수 있습니다. C-h i (emacs)dired RET
.
답변
내가 찾은 것은 M-x set-file-modes filename mode
내 Windows Vista 상자에서 작동했습니다. 예를 들면 다음과 같습니다.M-x set-file-modes <RET> ReadOnlyFile.txt <RET> 0666
답변
다른 사람이 언급했듯이 Mx 토글 읽기 전용 이 작동합니다.
그러나 이것은 더 이상 사용되지 않으며 Mx 읽기 전용 모드 는 현재 Cx Cq 키 바인딩으로 설정되어 있습니다.
답변
CTRL + X + CTRL + Q
답변
파일이 아닌 버퍼 만 읽기 전용 인 경우 toggle-read-only
일반적으로에 바인딩 된을 사용할 수 있습니다 C-x C-q
.
그러나 파일 자체가 읽기 전용 인 경우 다음 기능이 유용 할 수 있습니다.
(defun set-buffer-file-writable ()
"Make the file shown in the current buffer writable.
Make the buffer writable as well."
(interactive)
(unix-output "chmod" "+w" (buffer-file-name))
(toggle-read-only nil)
(message (trim-right '(?\n) (unix-output "ls" "-l" (buffer-file-name)))))
이 함수에 의존 unix-output
하고 trim-right
:
(defun unix-output (command &rest args)
"Run a unix command and, if it returns 0, return the output as a string.
Otherwise, signal an error. The error message is the first line of the output."
(let ((output-buffer (generate-new-buffer "*stdout*")))
(unwind-protect
(let ((return-value (apply 'call-process command nil
output-buffer nil args)))
(set-buffer output-buffer)
(save-excursion
(unless (= return-value 0)
(goto-char (point-min))
(end-of-line)
(if (= (point-min) (point))
(error "Command failed: %s%s" command
(with-output-to-string
(dolist (arg args)
(princ " ")
(princ arg))))
(error "%s" (buffer-substring-no-properties (point-min)
(point)))))
(buffer-substring-no-properties (point-min) (point-max))))
(kill-buffer output-buffer))))
(defun trim-right (bag string &optional start end)
(setq bag (if (eq bag t) '(?\ ?\n ?\t ?\v ?\r ?\f) bag)
start (or start 0)
end (or end (length string)))
(while (and (> end 0)
(member (aref string (1- end)) bag))
(decf end))
(substring string start end))
에 기능을 배치 ~/.emacs.el
하고 평가하거나 emacs를 다시 시작하십시오. 그런 다음을 사용하여 현재 버퍼의 파일을 쓸 수있게 만들 수 있습니다 M-x set-buffer-file-writable
.
답변
파일 디렉토리 (디렉토리)를보고있는 경우 파일 Shift + M
이름을 modespec
사용하고 chmod
명령에 사용 된 것과 동일한 속성을 입력 할 수 있습니다 .
M modespec <RET>
http://www.gnu.org/s/libtool/manual/emacs/Operating-on-Files.html 의 디렉토리 목록에서 파일에 대한 다른 유용한 명령을
참조하십시오.