]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/files.el (read-only-mode): New minor mode.
authorStefan Monnier <monnier@iro.umontreal.ca>
Wed, 29 Aug 2012 15:11:51 +0000 (11:11 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Wed, 29 Aug 2012 15:11:51 +0000 (11:11 -0400)
(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.

etc/NEWS
lisp/ChangeLog
lisp/emacs-lisp/gv.el
lisp/ffap.el
lisp/files.el
lisp/ibuffer.el
lisp/obsolete/vc-mcvs.el
lisp/vc/vc-cvs.el
lisp/vc/vc.el

index fb8722ab8f881391d2c74275608ff245af3eb203..1da3931813b87aab0a9b9f016cf20f0928cc5632 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -588,6 +588,8 @@ are deprecated and will be removed eventually.
 \f
 * 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'.
index bfca3f073f2f3b79e1650fda9404b4e8eb3342f7..48403c7f046940e3510c0eec8badc66f9eca3093 100644 (file)
@@ -1,3 +1,13 @@
+2012-08-29  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * 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  <michael.albinus@gmx.de>
 
        * eshell/esh-ext.el (eshell-external-command): Do not examine
index d1f997c99c4064c1e992e958513f16634980d6fd..4caa0a7386625514749f678badf6721e0219cf14 100644 (file)
@@ -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
index d0f3b639cf2a9498142fd0baad871255b8932464..ebe8b6dee94c9da9e6ec4cac9e87738ce0313346 100644 (file)
@@ -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.
index fecb02020e68c8dd3b603294d7253f673445083b..5c8e1ef396b03197e6bba03997e8b313f8e27f93 100644 (file)
@@ -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.
index 648c4c3b0af30d6f28d86ceafa0ce61b9257bad4..c6e799252a22844b655fb5081a8cff6c203887e9 100644 (file)
@@ -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.
index 94db90f1d6a24e9608b227e17f1b1c7b88049607..782219450732b31b80a2e9105a3a25e2c1155bcc 100644 (file)
@@ -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
index c1c4b750267a62e52c322867532461e85570d5ce..ae1a3cf92f8423937e0f5f55071ddea3975febc9 100644 (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
index ddb9565544da26d6d55f15c5c6ce1571561a2993..1ef4faaa0081cb6eefea6507fb7500585a9c719f 100644 (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
        (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))