From: Stefan Monnier Date: Wed, 29 Aug 2012 15:11:51 +0000 (-0400) Subject: * lisp/files.el (read-only-mode): New minor mode. X-Git-Tag: emacs-24.2.90~479 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=35e62fc984b108f717c5525ffecf60586eb0737e;p=emacs.git * lisp/files.el (read-only-mode): New minor mode. (toggle-read-only): Use it and mark obsolete. (find-file--read-only): * 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. --- diff --git a/etc/NEWS b/etc/NEWS index fb8722ab8f8..1da3931813b 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -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'. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index bfca3f073f2..48403c7f046 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,13 @@ +2012-08-29 Stefan Monnier + + * files.el (read-only-mode): New minor mode. + (toggle-read-only): Use it and mark obsolete. + (find-file--read-only): + * 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 diff --git a/lisp/emacs-lisp/gv.el b/lisp/emacs-lisp/gv.el index d1f997c99c4..4caa0a73866 100644 --- a/lisp/emacs-lisp/gv.el +++ b/lisp/emacs-lisp/gv.el @@ -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 diff --git a/lisp/ffap.el b/lisp/ffap.el index d0f3b639cf2..ebe8b6dee94 100644 --- a/lisp/ffap.el +++ b/lisp/ffap.el @@ -1703,7 +1703,7 @@ Only intended for interactive use." buffer-or-list (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. diff --git a/lisp/files.el b/lisp/files.el index fecb02020e6..5c8e1ef396b 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -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))) 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 -status. +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 (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) + ((and (not 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")))) + (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))) + (view-mode-enter)))) + +(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. diff --git a/lisp/ibuffer.el b/lisp/ibuffer.el index 648c4c3b0af..c6e799252a2 100644 --- a/lisp/ibuffer.el +++ b/lisp/ibuffer.el @@ -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. diff --git a/lisp/obsolete/vc-mcvs.el b/lisp/obsolete/vc-mcvs.el index 94db90f1d6a..78221945073 100644 --- a/lisp/obsolete/vc-mcvs.el +++ b/lisp/obsolete/vc-mcvs.el @@ -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 diff --git a/lisp/vc/vc-cvs.el b/lisp/vc/vc-cvs.el index c1c4b750267..ae1a3cf92f8 100644 --- a/lisp/vc/vc-cvs.el +++ b/lisp/vc/vc-cvs.el @@ -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 diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index ddb9565544d..1ef4faaa008 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -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 (save-excursion (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))