diff options
| author | Chong Yidong <cyd@gnu.org> | 2012-07-13 15:06:09 +0800 |
|---|---|---|
| committer | Chong Yidong <cyd@gnu.org> | 2012-07-13 15:06:09 +0800 |
| commit | b68b33375caeb82a4b3418d43c75bc8ccd43633a (patch) | |
| tree | 2e14569d03369d1de85cfd81bb5a404373ec1245 /lisp/files.el | |
| parent | 1a95276708930fe579fff152c590df875c29570e (diff) | |
| download | emacs-b68b33375caeb82a4b3418d43c75bc8ccd43633a.tar.gz | |
Don't warn on toggle-read-only calls.
Clarify the documentation of toggle-read-only, and audit the code tree
for uses of toggle-read-only; where appropriate, switch to setting the
variable buffer-read-only or calling toggle-read-only with a (new)
second arg.
* lisp/files.el (toggle-read-only): Doc fix and code cleanup. New arg
to allow printing the message when called from Lisp.
* lisp/emacs-lisp/bytecomp.el (byte-compile-interactive-only-functions):
Remove toggle-read-only.
* lisp/bindings.el (mode-line-toggle-read-only):
* lisp/dired.el (dired-toggle-read-only):
* lisp/ibuffer.el (ibuffer-do-toggle-read-only): Call toggle-read-only
with non-nil second arg.
* lisp/bs.el (bs-toggle-readonly):
* lisp/buff-menu.el (Buffer-menu-toggle-read-only): Remove
with-no-warnings around toggle-read-only.
* lisp/ffap.el (ffap--toggle-read-only): Accept a list of buffers.
Remove with-no-warnings around toggle-read-only.
(ffap-read-only, ffap-read-only-other-window)
(ffap-read-only-other-frame): Callers changed.
* lisp/help-mode.el: Don't require view package.
(help-mode-finish): Set buffer-read-only instead of calling
toggle-read-only.
* lisp/emacs-lisp/eieio-custom.el (eieio-customize-object):
* lisp/vc/ediff.el (ediff-set-read-only-in-buf-A): Set buffer-read-only
directly.
* lisp/gnus/smime.el (smime-certificate-info): Set buffer-read-only directly,
instead of calling toggle-read-only with a (bogus) argument.
* doc/emacs/buffers.texi (Misc Buffer): Document view-read-only.
* doc/lispref/buffers.texi (Read Only Buffers): Document toggle-read-only
changes. Reword to account for the fact that read-only is currently not
supported in overlay properties.
Diffstat (limited to 'lisp/files.el')
| -rw-r--r-- | lisp/files.el | 76 |
1 files changed, 43 insertions, 33 deletions
diff --git a/lisp/files.el b/lisp/files.el index 53b701dbcbe..7fc7ccc8553 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -4824,41 +4824,51 @@ prints a message in the minibuffer. Instead, use `set-buffer-modified-p'." "Modification-flag cleared")) (set-buffer-modified-p arg)) -(defun toggle-read-only (&optional arg) - "Change whether this buffer is read-only. +(defun toggle-read-only (&optional arg message) + "Toggle the read-only state of the current buffer. With prefix argument ARG, make the buffer read-only if ARG is -positive, otherwise make it writable. If buffer is read-only -and `view-read-only' is non-nil, enter view mode. - -This function is usually the wrong thing to use in a Lisp program. -It can have side-effects beyond changing the read-only status of a buffer -\(e.g., enabling view mode), and does not affect read-only regions that -are caused by text properties. To make a buffer read-only in Lisp code, -set `buffer-read-only'. To ignore read-only status (whether due to text -properties or buffer state) and make changes, temporarily bind -`inhibit-read-only'." +positive; otherwise make it writable. + +When making the buffer read-only, enable View mode if +`view-read-only' is non-nil. When making the buffer writable, +disable View mode if View mode is enabled. + +If called interactively, or if called from Lisp with MESSAGE +non-nil, print a message reporting the buffer's new read-only +status. + +Do not call this from a Lisp program unless you really intend to +do the same thing as the \\[toggle-read-only] command, including +possibly enabling or disabling View mode. Also, note that this +command works by setting the variable `buffer-read-only', which +does not affect read-only regions caused by text properties. To +ignore read-only status in a Lisp program (whether due to text +properties or buffer state), bind `inhibit-read-only' temporarily +to a non-nil value." (interactive "P") - (if (and arg - (if (> (prefix-numeric-value arg) 0) buffer-read-only - (not buffer-read-only))) ; If buffer-read-only is set correctly, - nil ; do nothing. - ;; Toggle. - (progn - (cond - ((and buffer-read-only view-mode) - (View-exit-and-edit) - (make-local-variable 'view-read-only) - (setq view-read-only t)) ; Must leave view mode. - ((and (not buffer-read-only) view-read-only - ;; If view-mode is already active, `view-mode-enter' is a nop. - (not view-mode) - (not (eq (get major-mode 'mode-class) 'special))) - (view-mode-enter)) - (t (setq buffer-read-only (not buffer-read-only)) - (force-mode-line-update)))) - (if (called-interactively-p 'interactive) - (message "Read-only %s for this buffer" - (if buffer-read-only "enabled" "disabled"))))) + (cond + ;; Do nothing if `buffer-read-only' already matches the state + ;; specified by ARG. + ((and arg + (if (> (prefix-numeric-value arg) 0) + buffer-read-only + (not buffer-read-only)))) + ;; If View mode is enabled, exit it. + ((and buffer-read-only view-mode) + (View-exit-and-edit) + (set (make-local-variable 'view-read-only) t)) + ;; If `view-read-only' is non-nil, enable View mode. + ((and view-read-only + (not buffer-read-only) + (not view-mode) + (not (eq (get major-mode 'mode-class) 'special))) + (view-mode-enter)) + ;; The usual action: flip `buffer-read-only'. + (t (setq buffer-read-only (not buffer-read-only)) + (force-mode-line-update))) + (if (or message (called-interactively-p 'interactive)) + (message "Read-only %s for this buffer" + (if buffer-read-only "enabled" "disabled")))) (defun insert-file (filename) "Insert contents of file FILENAME into buffer after point. |
