aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorKenichi Handa2012-08-30 21:07:42 +0900
committerKenichi Handa2012-08-30 21:07:42 +0900
commit31e7d6e0902a895e13833204907dfb86268b5acf (patch)
tree445b59dd5e87c8e2a8b969356386f45cae8cd6d9 /lisp
parent4eb4de01df384be9b8d811f7ab476eeb37ece748 (diff)
parentf17e1d00e0513d781d2bd9a80af24bb047d32d5c (diff)
downloademacs-31e7d6e0902a895e13833204907dfb86268b5acf.tar.gz
emacs-31e7d6e0902a895e13833204907dfb86268b5acf.zip
merge trunk
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ChangeLog110
-rw-r--r--lisp/emacs-lisp/cl-lib.el2
-rw-r--r--lisp/emacs-lisp/gv.el5
-rw-r--r--lisp/eshell/esh-ext.el6
-rw-r--r--lisp/ffap.el2
-rw-r--r--lisp/files.el56
-rw-r--r--lisp/gnus/ChangeLog6
-rw-r--r--lisp/gnus/gnus-notifications.el157
-rw-r--r--lisp/ibuffer.el2
-rw-r--r--lisp/net/rcirc.el40
-rw-r--r--lisp/net/tramp-sh.el6
-rw-r--r--lisp/obsolete/vc-mcvs.el2
-rw-r--r--lisp/paren.el11
-rw-r--r--lisp/progmodes/compile.el8
-rw-r--r--lisp/progmodes/hideif.el2
-rw-r--r--lisp/progmodes/hideshow.el2
-rw-r--r--lisp/progmodes/sh-script.el30
-rw-r--r--lisp/simple.el26
-rw-r--r--lisp/skeleton.el2
-rw-r--r--lisp/vc/vc-cvs.el2
-rw-r--r--lisp/vc/vc.el4
-rw-r--r--lisp/window.el6
22 files changed, 373 insertions, 114 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 3dd2b7b1272..5229c3332b2 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,80 @@
12012-08-30 Andreas Schwab <schwab@linux-m68k.org>
2
3 * progmodes/compile.el (compilation-always-kill): Doc fix.
4
52012-08-30 Chong Yidong <cyd@gnu.org>
6
7 * window.el (display-buffer-reuse-frames): Make the obsolescence
8 message more informative.
9
102012-08-30 Glenn Morris <rgm@gnu.org>
11
12 * paren.el (show-paren-delay):
13 Add a :set function. Doc fix. (Bug#12297)
14
152012-08-29 Martin Blais <blais@furius.ca> (tiny change)
16
17 * progmodes/compile.el (compilation-always-kill): New var.
18 (compilation-start): Use it.
19
202012-08-29 Stefan Monnier <monnier@iro.umontreal.ca>
21
22 * simple.el (read-only-mode): Move from files.el for bootstrapping.
23 * files.el (read-only-mode): Move to simple.el.
24
25 * files.el (read-only-mode): New minor mode.
26 (toggle-read-only): Use it and mark obsolete.
27 (find-file--read-only):
28 * vc/vc.el (vc-next-action, vc-checkout):
29 * vc/vc-cvs.el (vc-cvs-checkout):
30 * obsolete/vc-mcvs.el (vc-mcvs-update):
31 * ffap.el (ffap--toggle-read-only): Update callers.
32
332012-08-29 Michael Albinus <michael.albinus@gmx.de>
34
35 * eshell/esh-ext.el (eshell-external-command): Do not examine
36 remote shell scripts. See
37 <https://bugs.launchpad.net/ubuntu/+source/emacs23/+bug/1035790>.
38
39 * net/tramp-sh.el (tramp-remote-path): Add "/sbin" and
40 "/usr/local/sbin".
41
422012-08-28 Stefan Monnier <monnier@iro.umontreal.ca>
43
44 * emacs-lisp/cl-lib.el (buffer-string): Fix setter macro (bug#12293).
45
462012-08-28 Leo Liu <sdl.web@gmail.com>
47
48 * progmodes/sh-script.el (sh-dynamic-complete-functions): Adapt to
49 completion-at-point. (Bug#12220)
50
51 * skeleton.el (skeleton-untabify): Change to nil (bug#12223).
52
53 * progmodes/sh-script.el (sh-indent-comment): Change to t (bug#12267).
54
552012-08-28 Stefan Monnier <monnier@iro.umontreal.ca>
56
57 * files.el (safe-local-eval-forms): Fix before-save-hook entry to
58 be buffer-local; add delete-trailing-whitespace (bug#12259).
59
602012-08-28 Jeremy Moore <jmoore@ieee.org> (tiny change)
61
62 * progmodes/hideif.el (hif-compress-define-list):
63 Fix typo. (Bug#11951)
64
652012-08-28 Dan Nicolaescu <dann@gnu.org>
66
67 * progmodes/hideshow.el (hs-block-end-regexp): Restore lost
68 buffer local setting.
69
70 * net/rcirc.el (rcirc-split-message): Fix for buffer-local
71 rcirc-encode-coding-system.
72
732012-08-28 Leo Liu <sdl.web@gmail.com>
74
75 * net/rcirc.el (rcirc-split-message): New function.
76 (rcirc-send-message): Use it. (Bug#12051)
77
12012-08-28 Juri Linkov <juri@jurta.org> 782012-08-28 Juri Linkov <juri@jurta.org>
2 79
3 * info.el (Info-fontify-node): Hide empty lines at the end of 80 * info.el (Info-fontify-node): Hide empty lines at the end of
@@ -21,8 +98,8 @@
21 98
222012-08-26 Chong Yidong <cyd@gnu.org> 992012-08-26 Chong Yidong <cyd@gnu.org>
23 100
24 * progmodes/gdb-mi.el (gdb-display-buffer-other-frame-action): New 101 * progmodes/gdb-mi.el (gdb-display-buffer-other-frame-action):
25 variable, replacing gdb-frame-parameters. 102 New variable, replacing gdb-frame-parameters.
26 (gdb-frame-io-buffer, gdb-frame-breakpoints-buffer) 103 (gdb-frame-io-buffer, gdb-frame-breakpoints-buffer)
27 (gdb-frame-threads-buffer, gdb-frame-memory-buffer) 104 (gdb-frame-threads-buffer, gdb-frame-memory-buffer)
28 (gdb-frame-disassembly-buffer, gdb-frame-stack-buffer) 105 (gdb-frame-disassembly-buffer, gdb-frame-stack-buffer)
@@ -98,17 +175,17 @@
98 175
992012-08-22 Martin Rudalics <rudalics@gmx.at> 1762012-08-22 Martin Rudalics <rudalics@gmx.at>
100 177
101 * window.el (walk-window-tree, window-with-parameter): New 178 * window.el (walk-window-tree, window-with-parameter):
102 optional argument MINIBUF to control whether these functions 179 New optional argument MINIBUF to control whether these functions
103 should run on the minibuffer window. 180 should run on the minibuffer window.
104 (window-at-side-list): Don't operate on minibuffer window. 181 (window-at-side-list): Don't operate on minibuffer window.
105 (window-in-direction): Simplify and rewrite doc-string. 182 (window-in-direction): Simplify and rewrite doc-string.
106 (window--size-ignore): Rename to window--size-ignore-p. Update 183 (window--size-ignore): Rename to window--size-ignore-p.
107 callers. 184 Update callers.
108 (display-buffer-in-atom-window, window--major-non-side-window) 185 (display-buffer-in-atom-window, window--major-non-side-window)
109 (window--major-side-window, display-buffer-in-major-side-window) 186 (window--major-side-window, display-buffer-in-major-side-window)
110 (delete-side-window, display-buffer-in-side-window): New 187 (delete-side-window, display-buffer-in-side-window):
111 functions. 188 New functions.
112 (window--side-check, window-deletable-p, delete-window) 189 (window--side-check, window-deletable-p, delete-window)
113 (delete-other-windows, split-window): Handle side windows and 190 (delete-other-windows, split-window): Handle side windows and
114 atomic windows appropriately. 191 atomic windows appropriately.
@@ -160,8 +237,8 @@
160 * window.el (window-point-1, set-window-point-1): Remove. 237 * window.el (window-point-1, set-window-point-1): Remove.
161 (window-in-direction, record-window-buffer) 238 (window-in-direction, record-window-buffer)
162 (set-window-buffer-start-and-point, split-window-below) 239 (set-window-buffer-start-and-point, split-window-below)
163 (window--state-get-1, display-buffer-record-window): Replace 240 (window--state-get-1, display-buffer-record-window):
164 calls to window-point-1 and set-window-point-1 by calls to 241 Replace calls to window-point-1 and set-window-point-1 by calls to
165 window-point and set-window-point respectively. 242 window-point and set-window-point respectively.
166 243
1672012-08-21 Glenn Morris <rgm@gnu.org> 2442012-08-21 Glenn Morris <rgm@gnu.org>
@@ -279,8 +356,8 @@
279 (yank-excluded-properties): Add font-lock-face and category. 356 (yank-excluded-properties): Add font-lock-face and category.
280 (yank): Doc fix. 357 (yank): Doc fix.
281 358
282 * subr.el (remove-yank-excluded-properties): Obey 359 * subr.el (remove-yank-excluded-properties):
283 yank-handled-properties. The special handling of font-lock-face 360 Obey yank-handled-properties. The special handling of font-lock-face
284 and category is now done this way, instead of being hard-coded. 361 and category is now done this way, instead of being hard-coded.
285 (insert-for-yank-1): Remove font-lock-face handling. 362 (insert-for-yank-1): Remove font-lock-face handling.
286 (yank-handle-font-lock-face-property) 363 (yank-handle-font-lock-face-property)
@@ -294,8 +371,8 @@
294 371
2952012-08-17 Michael Albinus <michael.albinus@gmx.de> 3722012-08-17 Michael Albinus <michael.albinus@gmx.de>
296 373
297 * net/tramp-sh.el (tramp-sh-handle-start-file-process): Eliminate 374 * net/tramp-sh.el (tramp-sh-handle-start-file-process):
298 superfluous prompt. (Bug#12203) 375 Eliminate superfluous prompt. (Bug#12203)
299 376
3002012-08-17 Chong Yidong <cyd@gnu.org> 3772012-08-17 Chong Yidong <cyd@gnu.org>
301 378
@@ -322,8 +399,8 @@
322 (next-buffer, previous-buffer, split-window, balance-windows-2) 399 (next-buffer, previous-buffer, split-window, balance-windows-2)
323 (set-window-text-height, window-buffer-height) 400 (set-window-text-height, window-buffer-height)
324 (fit-window-to-buffer, shrink-window-if-larger-than-buffer) 401 (fit-window-to-buffer, shrink-window-if-larger-than-buffer)
325 (truncated-partial-width-window-p): Minor code adjustments. In 402 (truncated-partial-width-window-p): Minor code adjustments.
326 doc-strings state whether the argument window has to denote a 403 In doc-strings state whether the argument window has to denote a
327 live, valid or any window. 404 live, valid or any window.
328 405
3292012-08-16 Phil Sainty <psainty@orcon.net.nz> (tiny change) 4062012-08-16 Phil Sainty <psainty@orcon.net.nz> (tiny change)
@@ -566,6 +643,7 @@
566 * files.el (hack-local-variables-filter): If an eval: form is not 643 * files.el (hack-local-variables-filter): If an eval: form is not
567 known to be safe, and enable-local-variables is :safe, then ignore 644 known to be safe, and enable-local-variables is :safe, then ignore
568 the form totally, as is done for non-eval forms. (Bug#12155) 645 the form totally, as is done for non-eval forms. (Bug#12155)
646 This is CVE-2012-3479.
569 647
5702012-08-10 Stefan Monnier <monnier@iro.umontreal.ca> 6482012-08-10 Stefan Monnier <monnier@iro.umontreal.ca>
571 649
diff --git a/lisp/emacs-lisp/cl-lib.el b/lisp/emacs-lisp/cl-lib.el
index 86497a3c73f..532c81c502c 100644
--- a/lisp/emacs-lisp/cl-lib.el
+++ b/lisp/emacs-lisp/cl-lib.el
@@ -635,7 +635,7 @@ If ALIST is non-nil, the new pairs are prepended to it."
635 (set-buffer-modified-p ,flag))) 635 (set-buffer-modified-p ,flag)))
636(gv-define-simple-setter buffer-name rename-buffer t) 636(gv-define-simple-setter buffer-name rename-buffer t)
637(gv-define-setter buffer-string (store) 637(gv-define-setter buffer-string (store)
638 `(progn (erase-buffer) (insert ,store))) 638 `(insert (prog1 ,store (erase-buffer))))
639(gv-define-simple-setter buffer-substring cl--set-buffer-substring) 639(gv-define-simple-setter buffer-substring cl--set-buffer-substring)
640(gv-define-simple-setter current-buffer set-buffer) 640(gv-define-simple-setter current-buffer set-buffer)
641(gv-define-simple-setter current-case-table set-case-table) 641(gv-define-simple-setter current-case-table set-case-table)
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.
191Assignments of VAL to (NAME ARGS...) are expanded by binding the argument 191Assignments of VAL to (NAME ARGS...) are expanded by binding the argument
192forms (VAL ARGS...) according to ARGLIST, then executing BODY, which must 192forms (VAL ARGS...) according to ARGLIST, then executing BODY, which must
193return a Lisp form that does the assignment. 193return a Lisp form that does the assignment.
194Actually, ARGLIST may be bound to temporary variables which are introduced 194The first arg in ARLIST (the one that receives VAL) receives an expression
195automatically to preserve proper execution order of the arguments. Example: 195which can do arbitrary things, whereas the other arguments are all guaranteed
196to be pure and copyable. Example use:
196 (gv-define-setter aref (v a i) `(aset ,a ,i ,v))" 197 (gv-define-setter aref (v a i) `(aset ,a ,i ,v))"
197 (declare (indent 2) (debug (&define name sexp body))) 198 (declare (indent 2) (debug (&define name sexp body)))
198 `(gv-define-expander ,name 199 `(gv-define-expander ,name
diff --git a/lisp/eshell/esh-ext.el b/lisp/eshell/esh-ext.el
index 52df1587d5f..f9f9b1a558f 100644
--- a/lisp/eshell/esh-ext.el
+++ b/lisp/eshell/esh-ext.el
@@ -209,7 +209,11 @@ causing the user to wonder if anything's really going on..."
209 (setq args (eshell-stringify-list (eshell-flatten-list args))) 209 (setq args (eshell-stringify-list (eshell-flatten-list args)))
210 ;; (if (file-remote-p default-directory) 210 ;; (if (file-remote-p default-directory)
211 ;; (eshell-remote-command command args)) 211 ;; (eshell-remote-command command args))
212 (let ((interp (eshell-find-interpreter command))) 212 (let ((interp (eshell-find-interpreter
213 command
214 ;; Do not examine remote shell scripts.
215 (or (and (stringp command) (file-remote-p command))
216 (file-remote-p default-directory)))))
213 (cl-assert interp) 217 (cl-assert interp)
214 (if (functionp (car interp)) 218 (if (functionp (car interp))
215 (apply (car interp) (append (cdr interp) args)) 219 (apply (car interp) (append (cdr interp) args))
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."
1703 buffer-or-list 1703 buffer-or-list
1704 (list buffer-or-list))) 1704 (list buffer-or-list)))
1705 (with-current-buffer buffer 1705 (with-current-buffer buffer
1706 (toggle-read-only 1)))) 1706 (read-only-mode 1))))
1707 1707
1708(defun ffap-read-only () 1708(defun ffap-read-only ()
1709 "Like `ffap', but mark buffer as read-only. 1709 "Like `ffap', but mark buffer as read-only.
diff --git a/lisp/files.el b/lisp/files.el
index 5caa4681884..ef7f8e43a41 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -1456,7 +1456,7 @@ file names with wildcards."
1456 (file-exists-p filename)) 1456 (file-exists-p filename))
1457 (error "%s does not exist" filename)) 1457 (error "%s does not exist" filename))
1458 (let ((value (funcall fun filename wildcards))) 1458 (let ((value (funcall fun filename wildcards)))
1459 (mapc (lambda (b) (with-current-buffer b (toggle-read-only 1))) 1459 (mapc (lambda (b) (with-current-buffer b (read-only-mode 1)))
1460 (if (listp value) value (list value))) 1460 (if (listp value) value (list value)))
1461 value)) 1461 value))
1462 1462
@@ -2837,7 +2837,8 @@ symbol and VAL is a value that is considered safe."
2837 ;; This should be here at least as long as Emacs supports write-file-hooks. 2837 ;; This should be here at least as long as Emacs supports write-file-hooks.
2838 '((add-hook 'write-file-hooks 'time-stamp) 2838 '((add-hook 'write-file-hooks 'time-stamp)
2839 (add-hook 'write-file-functions 'time-stamp) 2839 (add-hook 'write-file-functions 'time-stamp)
2840 (add-hook 'before-save-hook 'time-stamp)) 2840 (add-hook 'before-save-hook 'time-stamp nil t)
2841 (add-hook 'before-save-hook 'delete-trailing-whitespace nil t))
2841 "Expressions that are considered safe in an `eval:' local variable. 2842 "Expressions that are considered safe in an `eval:' local variable.
2842Add expressions to this list if you want Emacs to evaluate them, when 2843Add expressions to this list if you want Emacs to evaluate them, when
2843they appear in an `eval' local variable specification, without first 2844they appear in an `eval' local variable specification, without first
@@ -4817,51 +4818,12 @@ prints a message in the minibuffer. Instead, use `set-buffer-modified-p'."
4817 "Modification-flag cleared")) 4818 "Modification-flag cleared"))
4818 (set-buffer-modified-p arg)) 4819 (set-buffer-modified-p arg))
4819 4820
4820(defun toggle-read-only (&optional arg message) 4821(defun toggle-read-only (&optional arg interactive)
4821 "Toggle the read-only state of the current buffer. 4822 (declare (obsolete read-only-mode "24.3"))
4822With prefix argument ARG, make the buffer read-only if ARG is 4823 (interactive (list current-prefix-arg t))
4823positive; otherwise make it writable. 4824 (if interactive
4824 4825 (call-interactively 'read-only-mode)
4825When making the buffer read-only, enable View mode if 4826 (read-only-mode (or arg 'toggle))))
4826`view-read-only' is non-nil. When making the buffer writable,
4827disable View mode if View mode is enabled.
4828
4829If called interactively, or if called from Lisp with MESSAGE
4830non-nil, print a message reporting the buffer's new read-only
4831status.
4832
4833Do not call this from a Lisp program unless you really intend to
4834do the same thing as the \\[toggle-read-only] command, including
4835possibly enabling or disabling View mode. Also, note that this
4836command works by setting the variable `buffer-read-only', which
4837does not affect read-only regions caused by text properties. To
4838ignore read-only status in a Lisp program (whether due to text
4839properties or buffer state), bind `inhibit-read-only' temporarily
4840to a non-nil value."
4841 (interactive "P")
4842 (cond
4843 ;; Do nothing if `buffer-read-only' already matches the state
4844 ;; specified by ARG.
4845 ((and arg
4846 (if (> (prefix-numeric-value arg) 0)
4847 buffer-read-only
4848 (not buffer-read-only))))
4849 ;; If View mode is enabled, exit it.
4850 ((and buffer-read-only view-mode)
4851 (View-exit-and-edit)
4852 (set (make-local-variable 'view-read-only) t))
4853 ;; If `view-read-only' is non-nil, enable View mode.
4854 ((and view-read-only
4855 (not buffer-read-only)
4856 (not view-mode)
4857 (not (eq (get major-mode 'mode-class) 'special)))
4858 (view-mode-enter))
4859 ;; The usual action: flip `buffer-read-only'.
4860 (t (setq buffer-read-only (not buffer-read-only))
4861 (force-mode-line-update)))
4862 (if (or message (called-interactively-p 'interactive))
4863 (message "Read-only %s for this buffer"
4864 (if buffer-read-only "enabled" "disabled"))))
4865 4827
4866(defun insert-file (filename) 4828(defun insert-file (filename)
4867 "Insert contents of file FILENAME into buffer after point. 4829 "Insert contents of file FILENAME into buffer after point.
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 4b56d351ac2..4db752f13a4 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,9 @@
12012-08-29 Julien Danjou <julien@danjou.info>
2
3 * gnus-notifications.el: New file.
4 (gnus-notifications-notify): New function.
5 (gnus-notifications): Use `gnus-notifications-notify'.
6
12012-08-28 Katsumi Yamaoka <yamaoka@jpl.org> 72012-08-28 Katsumi Yamaoka <yamaoka@jpl.org>
2 8
3 * gnus-sum.el (gnus-summary-enter-digest-group): Decode content 9 * gnus-sum.el (gnus-summary-enter-digest-group): Decode content
diff --git a/lisp/gnus/gnus-notifications.el b/lisp/gnus/gnus-notifications.el
new file mode 100644
index 00000000000..8811b47ba42
--- /dev/null
+++ b/lisp/gnus/gnus-notifications.el
@@ -0,0 +1,157 @@
1;; gnus-notifications.el -- Send notification on new message in Gnus
2
3;; Copyright (C) 2012 Free Software Foundation, Inc.
4
5;; Author: Julien Danjou <julien@danjou.info>
6;; Keywords: news
7
8;; This file is part of GNU Emacs.
9
10;; GNU Emacs is free software: you can redistribute it and/or modify
11;; it under the terms of the GNU General Public License as published by
12;; the Free Software Foundation, either version 3 of the License, or
13;; (at your option) any later version.
14
15;; GNU Emacs is distributed in the hope that it will be useful,
16;; but WITHOUT ANY WARRANTY; without even the implied warranty of
17;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18;; GNU General Public License for more details.
19
20;; You should have received a copy of the GNU General Public License
21;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
22
23;;; Commentary:
24
25;; This implements notifications using `notifications-notify' on new
26;; messages received.
27;; Use (add-hook 'gnus-after-getting-new-news-hook 'gnus-notifications)
28;; to get notifications just after getting the new news.
29
30;;; Code:
31
32(require 'notifications nil t)
33(require 'gnus-sum)
34(require 'gnus-group)
35(require 'gnus-int)
36(require 'gnus-art)
37(require 'gnus-util)
38(require 'google-contacts nil t) ; Optional
39
40(defgroup gnus-notifications nil
41 "Send notifications on new message in Gnus."
42 :group 'gnus)
43
44(defcustom gnus-notifications-use-google-contacts t
45 "Use Google Contacts to retrieve photo."
46 :type 'boolean
47 :group 'gnus-notifications)
48
49(defcustom gnus-notifications-use-gravatar t
50 "Use Gravatar to retrieve photo."
51 :type 'boolean
52 :group 'gnus-notifications)
53
54(defcustom gnus-notifications-minimum-level 1
55 "Minimum group level the message should have to be notified.
56Any message in a group that has a greater value than this will
57not get notifications."
58 :type 'integer
59 :group 'gnus-notifications)
60
61(defvar gnus-notifications-sent nil
62 "Notifications already sent.")
63
64(defun gnus-notifications-notify (from subject photo-file)
65 "Send a notification about a new mail."
66 (if (fboundp 'notifications-notify)
67 (notifications-notify
68 :title from
69 :body subject
70 :app-icon (image-search-load-path "gnus/gnus.png")
71 :app-name "Gnus"
72 :category "email.arrived"
73 :image-path photo-file)
74 (message "New message from %s: %s" from subject)))
75
76(defun gnus-notifications-get-photo (mail-address)
77 "Get photo for mail address."
78 (let ((google-photo (when (and gnus-notifications-use-google-contacts
79 (fboundp 'google-contacts-get-photo))
80 (ignore-errors
81 (google-contacts-get-photo mail-address)))))
82 (if google-photo
83 google-photo
84 (when gnus-notifications-use-gravatar
85 (let ((gravatar (ignore-errors
86 (gravatar-retrieve-synchronously mail-address))))
87 (if (eq gravatar 'error)
88 nil
89 (plist-get (cdr gravatar) :data)))))))
90
91(defun gnus-notifications-get-photo-file (mail-address)
92 "Get a temporary file with an image for MAIL-ADDRESS.
93You have to delete the temporary image yourself using
94`delete-image'.
95
96Returns nil if no image found."
97 (let ((photo (gnus-notifications-get-photo mail-address)))
98 (when photo
99 (let ((photo-file (make-temp-file "gnus-notifications-photo-"))
100 (coding-system-for-write 'binary))
101 (with-temp-file photo-file
102 (insert photo))
103 photo-file))))
104
105;;;###autoload
106(defun gnus-notifications ()
107 "Send a notification on new message.
108This check for new messages that are in group with a level lower
109or equal to `gnus-notifications-minimum-level' and send a
110notification using `notifications-notify' for it.
111
112This is typically a function to add in
113`gnus-after-getting-new-news-hook'"
114 (dolist (entry gnus-newsrc-alist)
115 (let ((group (car entry)))
116 ;; Check that the group level is less than
117 ;; `gnus-notifications-minimum-level' and the the group has unread
118 ;; messages.
119 (when (and (<= (gnus-group-level group) gnus-notifications-minimum-level)
120 (let ((unread (gnus-group-unread group)))
121 (and (numberp unread)
122 (> unread 0))))
123 ;; Each group should have an entry in the `gnus-notifications-sent'
124 ;; alist. If not, we add one at this time.
125 (let ((group-notifications (or (assoc group gnus-notifications-sent)
126 ;; Nothing, add one and return it.
127 (assoc group
128 (add-to-list
129 'gnus-notifications-sent
130 (cons group nil))))))
131 (dolist (article (gnus-list-of-unread-articles group))
132 ;; Check if the article already has been notified
133 (unless (memq article (cdr group-notifications))
134 (with-current-buffer nntp-server-buffer
135 (gnus-request-head article group)
136 (article-decode-encoded-words) ; to decode mail addresses, subjects, etc
137 (let* ((address-components (mail-extract-address-components
138 (or (mail-fetch-field "From") "")))
139 (address (cadr address-components))
140 (photo-file (gnus-notifications-get-photo-file
141 address)))
142 (when (or
143 ;; Ignore mails from ourselves
144 (gnus-string-match-p gnus-ignored-from-addresses
145 address)
146 (gnus-notifications-notify
147 (or (car address-components) address)
148 (mail-fetch-field "Subject")
149 photo-file))
150 ;; Register that we did notify this message
151 (setcdr group-notifications (cons article (cdr group-notifications))))
152 (when photo-file
153 (delete-file photo-file)))))))))))
154
155(provide 'gnus-notifications)
156
157;;; gnus-notifications.el ends here
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:
2401 buffer's file as an argument. 2401 buffer's file as an argument.
2402 '\\[ibuffer-do-eval]' - Evaluate a form in each of the marked buffers. This 2402 '\\[ibuffer-do-eval]' - Evaluate a form in each of the marked buffers. This
2403 is a very flexible command. For example, if you want to make all 2403 is a very flexible command. For example, if you want to make all
2404 of the marked buffers read only, try using (toggle-read-only 1) as 2404 of the marked buffers read only, try using (read-only-mode 1) as
2405 the input form. 2405 the input form.
2406 '\\[ibuffer-do-view-and-eval]' - As above, but view each buffer while the form 2406 '\\[ibuffer-do-view-and-eval]' - As above, but view each buffer while the form
2407 is evaluated. 2407 is evaluated.
diff --git a/lisp/net/rcirc.el b/lisp/net/rcirc.el
index 27cf50f06ca..dd345630b9b 100644
--- a/lisp/net/rcirc.el
+++ b/lisp/net/rcirc.el
@@ -802,26 +802,36 @@ With no argument or nil as argument, use the current buffer."
802(defvar rcirc-max-message-length 420 802(defvar rcirc-max-message-length 420
803 "Messages longer than this value will be split.") 803 "Messages longer than this value will be split.")
804 804
805(defun rcirc-split-message (message)
806 "Split MESSAGE into chunks within `rcirc-max-message-length'."
807 ;; `rcirc-encode-coding-system' can have buffer-local value.
808 (let ((encoding rcirc-encode-coding-system))
809 (with-temp-buffer
810 (insert message)
811 (goto-char (point-min))
812 (let (result)
813 (while (not (eobp))
814 (goto-char (or (byte-to-position rcirc-max-message-length)
815 (point-max)))
816 ;; max message length is 512 including CRLF
817 (while (and (not (bobp))
818 (> (length (encode-coding-region
819 (point-min) (point) encoding t))
820 rcirc-max-message-length))
821 (forward-char -1))
822 (push (delete-and-extract-region (point-min) (point)) result))
823 (nreverse result)))))
824
805(defun rcirc-send-message (process target message &optional noticep silent) 825(defun rcirc-send-message (process target message &optional noticep silent)
806 "Send TARGET associated with PROCESS a privmsg with text MESSAGE. 826 "Send TARGET associated with PROCESS a privmsg with text MESSAGE.
807If NOTICEP is non-nil, send a notice instead of privmsg. 827If NOTICEP is non-nil, send a notice instead of privmsg.
808If SILENT is non-nil, do not print the message in any irc buffer." 828If SILENT is non-nil, do not print the message in any irc buffer."
809 ;; max message length is 512 including CRLF 829 (let ((response (if noticep "NOTICE" "PRIVMSG")))
810 (let* ((response (if noticep "NOTICE" "PRIVMSG"))
811 (oversize (> (length message) rcirc-max-message-length))
812 (text (if oversize
813 (substring message 0 rcirc-max-message-length)
814 message))
815 (text (if (string= text "")
816 " "
817 text))
818 (more (if oversize
819 (substring message rcirc-max-message-length))))
820 (rcirc-get-buffer-create process target) 830 (rcirc-get-buffer-create process target)
821 (rcirc-send-string process (concat response " " target " :" text)) 831 (dolist (msg (rcirc-split-message message))
822 (unless silent 832 (rcirc-send-string process (concat response " " target " :" msg))
823 (rcirc-print process (rcirc-nick process) response target text)) 833 (unless silent
824 (when more (rcirc-send-message process target more noticep)))) 834 (rcirc-print process (rcirc-nick process) response target msg)))))
825 835
826(defvar rcirc-input-ring nil) 836(defvar rcirc-input-ring nil)
827(defvar rcirc-input-ring-index 0) 837(defvar rcirc-input-ring-index 0)
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index 6283188d46a..2c1af3e83fa 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -512,9 +512,9 @@ detected as prompt when being sent on echoing hosts, therefore.")
512;; IRIX64: /usr/bin 512;; IRIX64: /usr/bin
513;;;###tramp-autoload 513;;;###tramp-autoload
514(defcustom tramp-remote-path 514(defcustom tramp-remote-path
515 '(tramp-default-remote-path "/bin" "/usr/bin" "/usr/sbin" 515 '(tramp-default-remote-path "/bin" "/usr/bin" "/sbin" "/usr/sbin"
516 "/usr/local/bin" "/local/bin" "/local/freeware/bin" "/local/gnu/bin" 516 "/usr/local/bin" "/usr/local/sbin" "/local/bin" "/local/freeware/bin"
517 "/usr/freeware/bin" "/usr/pkg/bin" "/usr/contrib/bin" 517 "/local/gnu/bin" "/usr/freeware/bin" "/usr/pkg/bin" "/usr/contrib/bin"
518 "/opt/bin" "/opt/sbin" "/opt/local/bin") 518 "/opt/bin" "/opt/sbin" "/opt/local/bin")
519 "List of directories to search for executables on remote host. 519 "List of directories to search for executables on remote host.
520For every remote host, this variable will be set buffer local, 520For every remote host, this variable will be set buffer local,
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.")
329 (if vc-mcvs-use-edit 329 (if vc-mcvs-use-edit
330 (vc-mcvs-command nil 0 file "edit") 330 (vc-mcvs-command nil 0 file "edit")
331 (set-file-modes file (logior (file-modes file) 128)) 331 (set-file-modes file (logior (file-modes file) 128))
332 (if (equal file buffer-file-name) (toggle-read-only -1)))) 332 (if (equal file buffer-file-name) (read-only-mode -1))))
333 ;; Check out a particular revision (or recreate the file). 333 ;; Check out a particular revision (or recreate the file).
334 (vc-file-setprop file 'vc-working-revision nil) 334 (vc-file-setprop file 'vc-working-revision nil)
335 (apply 'vc-mcvs-command nil 0 file 335 (apply 'vc-mcvs-command nil 0 file
diff --git a/lisp/paren.el b/lisp/paren.el
index 2d6c42478e1..ab856380d3f 100644
--- a/lisp/paren.el
+++ b/lisp/paren.el
@@ -52,8 +52,17 @@ otherwise)."
52 :group 'paren-showing) 52 :group 'paren-showing)
53 53
54(defcustom show-paren-delay 0.125 54(defcustom show-paren-delay 0.125
55 "Time in seconds to delay before showing a matching paren." 55 "Time in seconds to delay before showing a matching paren.
56If you change this without using customize while `show-paren-mode' is
57active, you must toggle the mode off and on again for this to take effect."
56 :type '(number :tag "seconds") 58 :type '(number :tag "seconds")
59 :initialize 'custom-initialize-default
60 :set (lambda (sym val)
61 (if (not show-paren-mode)
62 (set sym val)
63 (show-paren-mode -1)
64 (set sym val)
65 (show-paren-mode 1)))
57 :group 'paren-showing) 66 :group 'paren-showing)
58 67
59(defcustom show-paren-priority 1000 68(defcustom show-paren-priority 1000
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index eb966e8a90d..fbb0c9e204a 100644
--- a/lisp/progmodes/compile.el
+++ b/lisp/progmodes/compile.el
@@ -1503,6 +1503,13 @@ Otherwise, construct a buffer name from NAME-OF-MODE."
1503 (compilation-start command nil name-function highlight-regexp))) 1503 (compilation-start command nil name-function highlight-regexp)))
1504(make-obsolete 'compile-internal 'compilation-start "22.1") 1504(make-obsolete 'compile-internal 'compilation-start "22.1")
1505 1505
1506(defcustom compilation-always-kill nil
1507 "If t, always kill a running compilation process before starting a new one.
1508If nil, ask to kill it."
1509 :type 'boolean
1510 :version "24.3"
1511 :group 'compilation)
1512
1506;;;###autoload 1513;;;###autoload
1507(defun compilation-start (command &optional mode name-function highlight-regexp) 1514(defun compilation-start (command &optional mode name-function highlight-regexp)
1508 "Run compilation command COMMAND (low level interface). 1515 "Run compilation command COMMAND (low level interface).
@@ -1537,6 +1544,7 @@ Returns the compilation buffer created."
1537 (let ((comp-proc (get-buffer-process (current-buffer)))) 1544 (let ((comp-proc (get-buffer-process (current-buffer))))
1538 (if comp-proc 1545 (if comp-proc
1539 (if (or (not (eq (process-status comp-proc) 'run)) 1546 (if (or (not (eq (process-status comp-proc) 'run))
1547 compilation-always-kill
1540 (yes-or-no-p 1548 (yes-or-no-p
1541 (format "A %s process is running; kill it? " 1549 (format "A %s process is running; kill it? "
1542 name-of-mode))) 1550 name-of-mode)))
diff --git a/lisp/progmodes/hideif.el b/lisp/progmodes/hideif.el
index 3e3d7adc0b6..4b77c6dab1a 100644
--- a/lisp/progmodes/hideif.el
+++ b/lisp/progmodes/hideif.el
@@ -1003,7 +1003,7 @@ Return as (TOP . BOTTOM) the extent of ifdef block."
1003 "Compress the define list ENV into a list of defined symbols only." 1003 "Compress the define list ENV into a list of defined symbols only."
1004 (let ((new-defs nil)) 1004 (let ((new-defs nil))
1005 (dolist (def env new-defs) 1005 (dolist (def env new-defs)
1006 (if (hif-lookup (car def)) (push (car env) new-defs))))) 1006 (if (hif-lookup (car def)) (push (car def) new-defs)))))
1007 1007
1008(defun hide-ifdef-set-define-alist (name) 1008(defun hide-ifdef-set-define-alist (name)
1009 "Set the association for NAME to `hide-ifdef-env'." 1009 "Set the association for NAME to `hide-ifdef-env'."
diff --git a/lisp/progmodes/hideshow.el b/lisp/progmodes/hideshow.el
index b6d2b5e319c..233b9a5212e 100644
--- a/lisp/progmodes/hideshow.el
+++ b/lisp/progmodes/hideshow.el
@@ -408,6 +408,8 @@ element (using `match-beginning') before calling `hs-forward-sexp-func'.")
408 408
409(defvar hs-block-end-regexp nil 409(defvar hs-block-end-regexp nil
410 "Regexp for end of block.") 410 "Regexp for end of block.")
411(make-variable-buffer-local 'hs-block-end-regexp)
412
411 413
412(defvar hs-forward-sexp-func 'forward-sexp 414(defvar hs-forward-sexp-func 'forward-sexp
413 "Function used to do a `forward-sexp'. 415 "Function used to do a `forward-sexp'.
diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el
index a6089aabb04..a422462775d 100644
--- a/lisp/progmodes/sh-script.el
+++ b/lisp/progmodes/sh-script.el
@@ -202,6 +202,11 @@
202 (require 'comint)) 202 (require 'comint))
203(require 'executable) 203(require 'executable)
204 204
205(autoload 'comint-completion-at-point "comint")
206(autoload 'comint-filename-completion "comint")
207(autoload 'shell-command-completion "shell")
208(autoload 'shell-environment-variable-completion "shell")
209
205(defvar font-lock-comment-face) 210(defvar font-lock-comment-face)
206(defvar font-lock-set-defaults) 211(defvar font-lock-set-defaults)
207(defvar font-lock-string-face) 212(defvar font-lock-string-face)
@@ -470,7 +475,6 @@ This is buffer-local in every such buffer.")
470 (define-key map "\C-\M-x" 'sh-execute-region) 475 (define-key map "\C-\M-x" 'sh-execute-region)
471 (define-key map "\C-c\C-x" 'executable-interpret) 476 (define-key map "\C-c\C-x" 'executable-interpret)
472 477
473 (define-key map [remap complete-tag] 'comint-dynamic-complete)
474 (define-key map [remap delete-backward-char] 478 (define-key map [remap delete-backward-char]
475 'backward-delete-char-untabify) 479 'backward-delete-char-untabify)
476 (define-key map "\C-c:" 'sh-set-shell) 480 (define-key map "\C-c:" 'sh-set-shell)
@@ -553,9 +557,9 @@ This is buffer-local in every such buffer.")
553 "Value to use for `skeleton-pair-default-alist' in Shell-Script mode.") 557 "Value to use for `skeleton-pair-default-alist' in Shell-Script mode.")
554 558
555(defcustom sh-dynamic-complete-functions 559(defcustom sh-dynamic-complete-functions
556 '(shell-dynamic-complete-environment-variable 560 '(shell-environment-variable-completion
557 shell-dynamic-complete-command 561 shell-command-completion
558 comint-dynamic-complete-filename) 562 comint-filename-completion)
559 "Functions for doing TAB dynamic completion." 563 "Functions for doing TAB dynamic completion."
560 :type '(repeat function) 564 :type '(repeat function)
561 :group 'sh-script) 565 :group 'sh-script)
@@ -1187,7 +1191,7 @@ This value is used for the `+' and `-' symbols in an indentation variable."
1187 :group 'sh-indentation) 1191 :group 'sh-indentation)
1188(put 'sh-basic-offset 'safe-local-variable 'integerp) 1192(put 'sh-basic-offset 'safe-local-variable 'integerp)
1189 1193
1190(defcustom sh-indent-comment nil 1194(defcustom sh-indent-comment t
1191 "How a comment line is to be indented. 1195 "How a comment line is to be indented.
1192nil means leave it as it is; 1196nil means leave it as it is;
1193t means indent it as a normal line, aligning it to previous non-blank 1197t means indent it as a normal line, aligning it to previous non-blank
@@ -1198,6 +1202,7 @@ a number means align to that column, e.g. 0 means first column."
1198 (const :tag "Indent as a normal line." t) 1202 (const :tag "Indent as a normal line." t)
1199 (integer :menu-tag "Indent to this col (0 means first col)." 1203 (integer :menu-tag "Indent to this col (0 means first col)."
1200 :tag "Indent to column number.") ) 1204 :tag "Indent to column number.") )
1205 :version "24.3"
1201 :group 'sh-indentation) 1206 :group 'sh-indentation)
1202 1207
1203 1208
@@ -1485,6 +1490,7 @@ with your script for an edit-interpret-debug cycle."
1485 (set (make-local-variable 'local-abbrev-table) sh-mode-abbrev-table) 1490 (set (make-local-variable 'local-abbrev-table) sh-mode-abbrev-table)
1486 (set (make-local-variable 'comint-dynamic-complete-functions) 1491 (set (make-local-variable 'comint-dynamic-complete-functions)
1487 sh-dynamic-complete-functions) 1492 sh-dynamic-complete-functions)
1493 (add-hook 'completion-at-point-functions 'comint-completion-at-point nil t)
1488 ;; we can't look if previous line ended with `\' 1494 ;; we can't look if previous line ended with `\'
1489 (set (make-local-variable 'comint-prompt-regexp) "^[ \t]*") 1495 (set (make-local-variable 'comint-prompt-regexp) "^[ \t]*")
1490 (set (make-local-variable 'imenu-case-fold-search) nil) 1496 (set (make-local-variable 'imenu-case-fold-search) nil)
@@ -4109,20 +4115,6 @@ The document is bounded by `sh-here-document-word'."
4109 4115
4110;; various other commands 4116;; various other commands
4111 4117
4112(autoload 'comint-dynamic-complete "comint"
4113 "Dynamically perform completion at point." t)
4114
4115(autoload 'shell-dynamic-complete-command "shell"
4116 "Dynamically complete the command at point." t)
4117
4118(autoload 'comint-dynamic-complete-filename "comint"
4119 "Dynamically complete the filename at point." t)
4120
4121(autoload 'shell-dynamic-complete-environment-variable "shell"
4122 "Dynamically complete the environment variable at point." t)
4123
4124
4125
4126(defun sh-beginning-of-command () 4118(defun sh-beginning-of-command ()
4127 ;; FIXME: Redefine using SMIE. 4119 ;; FIXME: Redefine using SMIE.
4128 "Move point to successive beginnings of commands." 4120 "Move point to successive beginnings of commands."
diff --git a/lisp/simple.el b/lisp/simple.el
index 1080757f7d2..7673e4c5d6e 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -6961,6 +6961,32 @@ See also `normal-erase-is-backspace'."
6961(defvar vis-mode-saved-buffer-invisibility-spec nil 6961(defvar vis-mode-saved-buffer-invisibility-spec nil
6962 "Saved value of `buffer-invisibility-spec' when Visible mode is on.") 6962 "Saved value of `buffer-invisibility-spec' when Visible mode is on.")
6963 6963
6964(define-minor-mode read-only-mode
6965 "Change whether the current buffer is read-only.
6966With prefix argument ARG, make the buffer read-only if ARG is
6967positive, otherwise make it writable. If buffer is read-only
6968and `view-read-only' is non-nil, enter view mode.
6969
6970Do not call this from a Lisp program unless you really intend to
6971do the same thing as the \\[toggle-read-only] command, including
6972possibly enabling or disabling View mode. Also, note that this
6973command works by setting the variable `buffer-read-only', which
6974does not affect read-only regions caused by text properties. To
6975ignore read-only status in a Lisp program (whether due to text
6976properties or buffer state), bind `inhibit-read-only' temporarily
6977to a non-nil value."
6978 :variable buffer-read-only
6979 (cond
6980 ((and (not buffer-read-only) view-mode)
6981 (View-exit-and-edit)
6982 (make-local-variable 'view-read-only)
6983 (setq view-read-only t)) ; Must leave view mode.
6984 ((and buffer-read-only view-read-only
6985 ;; If view-mode is already active, `view-mode-enter' is a nop.
6986 (not view-mode)
6987 (not (eq (get major-mode 'mode-class) 'special)))
6988 (view-mode-enter))))
6989
6964(define-minor-mode visible-mode 6990(define-minor-mode visible-mode
6965 "Toggle making all invisible text temporarily visible (Visible mode). 6991 "Toggle making all invisible text temporarily visible (Visible mode).
6966With a prefix argument ARG, enable Visible mode if ARG is 6992With a prefix argument ARG, enable Visible mode if ARG is
diff --git a/lisp/skeleton.el b/lisp/skeleton.el
index 34d69a74369..b6e1d0a58f2 100644
--- a/lisp/skeleton.el
+++ b/lisp/skeleton.el
@@ -77,7 +77,7 @@ The variables `v1' and `v2' are still set when calling this.")
77 "Function for transforming a skeleton proxy's aliases' variable value.") 77 "Function for transforming a skeleton proxy's aliases' variable value.")
78(defvaralias 'skeleton-filter 'skeleton-filter-function) 78(defvaralias 'skeleton-filter 'skeleton-filter-function)
79 79
80(defvar skeleton-untabify t 80(defvar skeleton-untabify nil ; bug#12223
81 "When non-nil untabifies when deleting backwards with element -ARG.") 81 "When non-nil untabifies when deleting backwards with element -ARG.")
82 82
83(defvar skeleton-newline-indent-rigidly nil 83(defvar skeleton-newline-indent-rigidly nil
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."
394 (if vc-cvs-use-edit 394 (if vc-cvs-use-edit
395 (vc-cvs-command nil 0 file "edit") 395 (vc-cvs-command nil 0 file "edit")
396 (set-file-modes file (logior (file-modes file) 128)) 396 (set-file-modes file (logior (file-modes file) 128))
397 (if (equal file buffer-file-name) (toggle-read-only -1)))) 397 (if (equal file buffer-file-name) (read-only-mode -1))))
398 ;; Check out a particular revision (or recreate the file). 398 ;; Check out a particular revision (or recreate the file).
399 (vc-file-setprop file 'vc-working-revision nil) 399 (vc-file-setprop file 'vc-working-revision nil)
400 (apply 'vc-cvs-command nil 0 file 400 (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:
1133 (let ((visited (get-file-buffer file))) 1133 (let ((visited (get-file-buffer file)))
1134 (when visited 1134 (when visited
1135 (with-current-buffer visited 1135 (with-current-buffer visited
1136 (toggle-read-only -1)))))) 1136 (read-only-mode -1))))))
1137 ;; Allow user to revert files with no changes 1137 ;; Allow user to revert files with no changes
1138 (save-excursion 1138 (save-excursion
1139 (dolist (file files) 1139 (dolist (file files)
@@ -1344,7 +1344,7 @@ After check-out, runs the normal hook `vc-checkout-hook'."
1344 ;; Maybe the backend is not installed ;-( 1344 ;; Maybe the backend is not installed ;-(
1345 (when writable 1345 (when writable
1346 (let ((buf (get-file-buffer file))) 1346 (let ((buf (get-file-buffer file)))
1347 (when buf (with-current-buffer buf (toggle-read-only -1))))) 1347 (when buf (with-current-buffer buf (read-only-mode -1)))))
1348 (signal (car err) (cdr err)))) 1348 (signal (car err) (cdr err))))
1349 `((vc-state . ,(if (or (eq (vc-checkout-model backend (list file)) 'implicit) 1349 `((vc-state . ,(if (or (eq (vc-checkout-model backend (list file)) 'implicit)
1350 (not writable)) 1350 (not writable))
diff --git a/lisp/window.el b/lisp/window.el
index 3599ff5527f..8f410ea3d4d 100644
--- a/lisp/window.el
+++ b/lisp/window.el
@@ -4710,7 +4710,11 @@ that frame."
4710 :type 'boolean 4710 :type 'boolean
4711 :version "21.1" 4711 :version "21.1"
4712 :group 'windows) 4712 :group 'windows)
4713(make-obsolete-variable 'display-buffer-reuse-frames 'display-buffer-alist "24.3") 4713
4714(make-obsolete-variable
4715 'display-buffer-reuse-frames
4716 "use a `reusable-frames' alist entry in `display-buffer-alist'."
4717 "24.3")
4714 4718
4715(defcustom pop-up-windows t 4719(defcustom pop-up-windows t
4716 "Non-nil means `display-buffer' should make a new window." 4720 "Non-nil means `display-buffer' should make a new window."