Commit 35e62fc9 authored by Stefan Monnier's avatar Stefan Monnier
Browse files

* lisp/files.el (read-only-mode): New minor mode.

(toggle-read-only): Use it and mark obsolete.
* lisp/vc/vc.el (vc-next-action, vc-checkout):
* lisp/vc/vc-cvs.el (vc-cvs-checkout):
* lisp/obsolete/vc-mcvs.el (vc-mcvs-update):
* lisp/ffap.el (ffap--toggle-read-only): Update callers.
parent c2c43c23
......@@ -588,6 +588,8 @@ are deprecated and will be removed eventually.
* Lisp changes in Emacs 24.3
** New minor mode `read-only-mode' to replace toggle-read-only (now obsolete).
** New functions `autoloadp' and `autoload-do-load'.
** New function `posnp' to test if an object is a `posn'.
2012-08-29 Stefan Monnier <>
* files.el (read-only-mode): New minor mode.
(toggle-read-only): Use it and mark obsolete.
* vc/vc.el (vc-next-action, vc-checkout):
* vc/vc-cvs.el (vc-cvs-checkout):
* obsolete/vc-mcvs.el (vc-mcvs-update):
* ffap.el (ffap--toggle-read-only): Update callers.
2012-08-29 Michael Albinus <>
* eshell/esh-ext.el (eshell-external-command): Do not examine
......@@ -191,8 +191,9 @@ well for simple place forms.
Assignments of VAL to (NAME ARGS...) are expanded by binding the argument
forms (VAL ARGS...) according to ARGLIST, then executing BODY, which must
return a Lisp form that does the assignment.
Actually, ARGLIST may be bound to temporary variables which are introduced
automatically to preserve proper execution order of the arguments. Example:
The first arg in ARLIST (the one that receives VAL) receives an expression
which can do arbitrary things, whereas the other arguments are all guaranteed
to be pure and copyable. Example use:
(gv-define-setter aref (v a i) `(aset ,a ,i ,v))"
(declare (indent 2) (debug (&define name sexp body)))
`(gv-define-expander ,name
......@@ -1703,7 +1703,7 @@ Only intended for interactive use."
(list buffer-or-list)))
(with-current-buffer buffer
(toggle-read-only 1))))
(read-only-mode 1))))
(defun ffap-read-only ()
"Like `ffap', but mark buffer as read-only.
......@@ -1456,7 +1456,7 @@ file names with wildcards."
(file-exists-p filename))
(error "%s does not exist" filename))
(let ((value (funcall fun filename wildcards)))
(mapc (lambda (b) (with-current-buffer b (toggle-read-only 1)))
(mapc (lambda (b) (with-current-buffer b (read-only-mode 1)))
(if (listp value) value (list value)))
......@@ -4818,18 +4818,11 @@ 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 message)
"Toggle the read-only state of the current buffer.
(define-minor-mode read-only-mode
"Change whether the current buffer is read-only.
With prefix argument ARG, make the buffer read-only if ARG is
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
positive, otherwise make it writable. If buffer is read-only
and `view-read-only' is non-nil, enter view mode.
Do not call this from a Lisp program unless you really intend to
do the same thing as the \\[toggle-read-only] command, including
......@@ -4839,30 +4832,24 @@ 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")
:variable buffer-read-only
;; Do nothing if `buffer-read-only' already matches the state
;; specified by ARG.
((and arg
(if (> (prefix-numeric-value arg) 0)
(not buffer-read-only))))
;; If View mode is enabled, exit it.
((and buffer-read-only view-mode)
((and (not buffer-read-only) view-mode)
(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)))
;; The usual action: flip `buffer-read-only'.
(t (setq buffer-read-only (not buffer-read-only))
(if (or message (called-interactively-p 'interactive))
(message "Read-only %s for this buffer"
(if buffer-read-only "enabled" "disabled"))))
(make-local-variable 'view-read-only)
(setq view-read-only t)) ; Must leave view mode.
((and 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)))
(defun toggle-read-only (&optional arg interactive)
(declare (obsolete read-only-mode "24.3"))
(interactive (list current-prefix-arg t))
(if interactive
(call-interactively 'read-only-mode)
(read-only-mode (or arg 'toggle))))
(defun insert-file (filename)
"Insert contents of file FILENAME into buffer after point.
......@@ -2401,7 +2401,7 @@ Operations on marked buffers:
buffer's file as an argument.
'\\[ibuffer-do-eval]' - Evaluate a form in each of the marked buffers. This
is a very flexible command. For example, if you want to make all
of the marked buffers read only, try using (toggle-read-only 1) as
of the marked buffers read only, try using (read-only-mode 1) as
the input form.
'\\[ibuffer-do-view-and-eval]' - As above, but view each buffer while the form
is evaluated.
......@@ -329,7 +329,7 @@ This is only possible if Meta-CVS is responsible for FILE's directory.")
(if vc-mcvs-use-edit
(vc-mcvs-command nil 0 file "edit")
(set-file-modes file (logior (file-modes file) 128))
(if (equal file buffer-file-name) (toggle-read-only -1))))
(if (equal file buffer-file-name) (read-only-mode -1))))
;; Check out a particular revision (or recreate the file).
(vc-file-setprop file 'vc-working-revision nil)
(apply 'vc-mcvs-command nil 0 file
......@@ -394,7 +394,7 @@ REV is the revision to check out."
(if vc-cvs-use-edit
(vc-cvs-command nil 0 file "edit")
(set-file-modes file (logior (file-modes file) 128))
(if (equal file buffer-file-name) (toggle-read-only -1))))
(if (equal file buffer-file-name) (read-only-mode -1))))
;; Check out a particular revision (or recreate the file).
(vc-file-setprop file 'vc-working-revision nil)
(apply 'vc-cvs-command nil 0 file
......@@ -1133,7 +1133,7 @@ For old-style locking-based version control systems, like RCS:
(let ((visited (get-file-buffer file)))
(when visited
(with-current-buffer visited
(toggle-read-only -1))))))
(read-only-mode -1))))))
;; Allow user to revert files with no changes
(dolist (file files)
......@@ -1344,7 +1344,7 @@ After check-out, runs the normal hook `vc-checkout-hook'."
;; Maybe the backend is not installed ;-(
(when writable
(let ((buf (get-file-buffer file)))
(when buf (with-current-buffer buf (toggle-read-only -1)))))
(when buf (with-current-buffer buf (read-only-mode -1)))))
(signal (car err) (cdr err))))
`((vc-state . ,(if (or (eq (vc-checkout-model backend (list file)) 'implicit)
(not writable))
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment