aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorMiles Bader2007-11-09 09:45:30 +0000
committerMiles Bader2007-11-09 09:45:30 +0000
commitc12ecb0af9679cc0e2fa0409931c34c035763469 (patch)
treebd118c7ebc571de0dab542f48ad0c1648c6ccf72 /lisp
parente83d1fe87564d06d2fcbb4006dfd9133bc340aa8 (diff)
parent9d2185d10e3da9062672d96d3b59fcea31ff17ed (diff)
downloademacs-c12ecb0af9679cc0e2fa0409931c34c035763469.tar.gz
emacs-c12ecb0af9679cc0e2fa0409931c34c035763469.zip
Merge from emacs--rel--22
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-923
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ChangeLog75
-rw-r--r--lisp/dired-aux.el11
-rw-r--r--lisp/ediff-hook.el22
-rw-r--r--lisp/emacs-lisp/elp.el20
-rw-r--r--lisp/emacs-lisp/unsafep.el19
-rw-r--r--lisp/follow.el4
-rw-r--r--lisp/gnus/ChangeLog8
-rw-r--r--lisp/gnus/gnus-sum.el1
-rw-r--r--lisp/gnus/qp.el2
-rw-r--r--lisp/loadhist.el2
-rw-r--r--lisp/msb.el19
-rw-r--r--lisp/net/tls.el3
-rw-r--r--lisp/progmodes/gdb-ui.el10
-rw-r--r--lisp/progmodes/gud.el19
-rw-r--r--lisp/savehist.el3
-rw-r--r--lisp/server.el4
-rw-r--r--lisp/ses.el15
-rw-r--r--lisp/shadowfile.el29
-rw-r--r--lisp/strokes.el4
-rw-r--r--lisp/uniquify.el51
-rw-r--r--lisp/whitespace.el16
21 files changed, 239 insertions, 98 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index bac3ee7a691..707a2ec45a4 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,78 @@
12007-11-09 Nick Roberts <nickrob@snap.net.nz>
2
3 * progmodes/gud.el (gud-gdb): Remove vestigial gdba doc and code.
4
52007-11-09 Sven Joachim <svenjoac@gmx.de>
6
7 * dired-aux.el (dired-copy-file-recursive):
8 Preserve directory permissions.
9
102007-11-09 Juanma Barranquero <lekktu@gmail.com>
11
12 * whitespace.el (whitespace-write-file-hook): Remove interactive spec.
13 (whitespace-unload-function): New-style unload function. When run,
14 unintern `whitespace-unload-hook' and call `unload-feature' recursively
15 to stop the old hook from messing with the unloading.
16
172007-11-09 Juanma Barranquero <lekktu@gmail.com>
18
19 * emacs-lisp/elp.el (elp-report-limit, elp-restore-all)
20 (elp-unset-master, elp-results): Fix typos.
21 (elp-sort-by-function, elp-use-standard-output, elp-recycle-buffers-p):
22 Doc fixes.
23
24 * msb.el (msb--many-menus): Remove variable.
25 (msb-max-menu-items, msb--add-to-menu): Doc fixes.
26 (msb-menu-cond, msb-item-handling-function, msb--create-function-info)
27 (msb--toggle-menu-type): Fix typos in docstrings.
28
29 * shadowfile.el (shadow-inhibit-overload, shadow-remove-from-todo)
30 (shadow-insert-var): Doc fixes.
31 (shadow-file-match, shadow-define-cluster, shadow-define-regexp-group):
32 Reflow docstrings.
33 (shadow-parse-fullname, shadow-read-files): Fix typos in docstrings.
34
352007-11-09 Juanma Barranquero <lekktu@gmail.com>
36
37 * ediff-hook.el (ediff, ediff-files, ediff-buffers, ebuffers, ediff3)
38 (ediff-files3, ediff-buffers3, ebuffers3, erevision, ediff-revision):
39 Fix typos in autoload docstrings.
40
412007-11-09 Richard Stallman <rms@gnu.org>
42
43 * savehist.el (savehist-save): Obey savehist-ignored-variables.
44
452007-11-09 Nick Roberts <nickrob@snap.net.nz>
46
47 * progmodes/gdb-ui.el (gdb-delete-out-of-scope): New option.
48 (gdb-var-update-handler-1): Use it.
49
502007-11-09 Juanma Barranquero <lekktu@gmail.com>
51
52 * loadhist.el (unload-feature): Remove erroneous check for the
53 FEATURE-unload-function variable; check the existence of the
54 function (that's what the docstring says, and it makes more sense).
55
56 * follow.el (follow-unload-function): Add docstring.
57 (follow-unload-function): Remove variable.
58
59 * server.el (server-unload-function): Remove variable.
60 (server-unload-function): Unbind `server-edit' from `C-x #'.
61
62 * uniquify.el (uniquify-unload-function): Add docstring.
63 (uniquify-unload-function): Remove variable.
64
65 * ses.el (ses-unload-function): New function.
66
672007-11-09 Juanma Barranquero <lekktu@gmail.com>
68
69 * emacs-lisp/unsafep.el (unsafep, unsafep-function)
70 (unsafep-progn, unsafep-let): Fix typos in docstrings.
71
72 * uniquify.el (uniquify-maybe-rerationalize-w/o-cb): Define it
73 before use to avoid a warning in packages that require uniquify.
74 (uniquify-unload-function): New function and var.
75
12007-11-09 Dan Nicolaescu <dann@ics.uci.edu> 762007-11-09 Dan Nicolaescu <dann@ics.uci.edu>
2 77
3 * ediff-init.el (ediff-xemacs-p, ediff-emacs-p): Remove. 78 * ediff-init.el (ediff-xemacs-p, ediff-emacs-p): Remove.
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index e0749f375ae..b9ceb728dbc 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -1160,7 +1160,8 @@ Special value `always' suppresses confirmation."
1160 (or (eq recursive 'always) 1160 (or (eq recursive 'always)
1161 (yes-or-no-p (format "Recursive copies of %s? " from)))) 1161 (yes-or-no-p (format "Recursive copies of %s? " from))))
1162 ;; This is a directory. 1162 ;; This is a directory.
1163 (let ((files 1163 (let ((mode (file-modes from))
1164 (files
1164 (condition-case err 1165 (condition-case err
1165 (directory-files from nil dired-re-no-dot) 1166 (directory-files from nil dired-re-no-dot)
1166 (file-error 1167 (file-error
@@ -1174,7 +1175,9 @@ Special value `always' suppresses confirmation."
1174 (if (file-exists-p to) 1175 (if (file-exists-p to)
1175 (or top (dired-handle-overwrite to)) 1176 (or top (dired-handle-overwrite to))
1176 (condition-case err 1177 (condition-case err
1177 (make-directory to) 1178 (progn
1179 (make-directory to)
1180 (set-file-modes to #o700))
1178 (file-error 1181 (file-error
1179 (push (dired-make-relative from) 1182 (push (dired-make-relative from)
1180 dired-create-files-failures) 1183 dired-create-files-failures)
@@ -1193,7 +1196,9 @@ Special value `always' suppresses confirmation."
1193 (file-error 1196 (file-error
1194 (push (dired-make-relative thisfrom) 1197 (push (dired-make-relative thisfrom)
1195 dired-create-files-failures) 1198 dired-create-files-failures)
1196 (dired-log "Copying error for %s:\n%s\n" thisfrom err)))))) 1199 (dired-log "Copying error for %s:\n%s\n" thisfrom err)))))
1200 (when (file-directory-p to)
1201 (set-file-modes to mode)))
1197 ;; Not a directory. 1202 ;; Not a directory.
1198 (or top (dired-handle-overwrite to)) 1203 (or top (dired-handle-overwrite to))
1199 (condition-case err 1204 (condition-case err
diff --git a/lisp/ediff-hook.el b/lisp/ediff-hook.el
index 00e6ba6bab2..306b2ed670c 100644
--- a/lisp/ediff-hook.el
+++ b/lisp/ediff-hook.el
@@ -261,17 +261,17 @@
261 () ; if dumping, autoloads are set up in loaddefs.el 261 () ; if dumping, autoloads are set up in loaddefs.el
262 ;; if the user decides to load this file, set up autoloads 262 ;; if the user decides to load this file, set up autoloads
263 ;; compare files and buffers 263 ;; compare files and buffers
264 (autoload 'ediff "ediff" "Compare two files" t) 264 (autoload 'ediff "ediff" "Compare two files." t)
265 (autoload 'ediff-files "ediff" "Compare two files" t) 265 (autoload 'ediff-files "ediff" "Compare two files." t)
266 (autoload 'ediff-buffers "ediff" "Compare two bufers" t) 266 (autoload 'ediff-buffers "ediff" "Compare two buffers." t)
267 (autoload 'ebuffers "ediff" "Compare two bufers" t) 267 (autoload 'ebuffers "ediff" "Compare two buffers." t)
268 (autoload 'ediff3 "ediff" "Compare three files" t) 268 (autoload 'ediff3 "ediff" "Compare three files." t)
269 (autoload 'ediff-files3 "ediff" "Compare three files" t) 269 (autoload 'ediff-files3 "ediff" "Compare three files." t)
270 (autoload 'ediff-buffers3 "ediff" "Compare three bufers" t) 270 (autoload 'ediff-buffers3 "ediff" "Compare three buffers." t)
271 (autoload 'ebuffers3 "ediff" "Compare three bufers" t) 271 (autoload 'ebuffers3 "ediff" "Compare three buffers." t)
272 272
273 (autoload 'erevision "ediff" "Compare versions of a file" t) 273 (autoload 'erevision "ediff" "Compare versions of a file." t)
274 (autoload 'ediff-revision "ediff" "Compare versions of a file" t) 274 (autoload 'ediff-revision "ediff" "Compare versions of a file." t)
275 275
276 ;; compare regions and windows 276 ;; compare regions and windows
277 (autoload 'ediff-windows-wordwise 277 (autoload 'ediff-windows-wordwise
diff --git a/lisp/emacs-lisp/elp.el b/lisp/emacs-lisp/elp.el
index 71231a86df9..c4ba3e4ca9c 100644
--- a/lisp/emacs-lisp/elp.el
+++ b/lisp/emacs-lisp/elp.el
@@ -147,16 +147,16 @@ Results are displayed with the `elp-results' command."
147 :group 'elp) 147 :group 'elp)
148 148
149(defcustom elp-sort-by-function 'elp-sort-by-total-time 149(defcustom elp-sort-by-function 'elp-sort-by-total-time
150 "*Non-nil specifies elp results sorting function. 150 "*Non-nil specifies ELP results sorting function.
151These functions are currently available: 151These functions are currently available:
152 152
153 elp-sort-by-call-count -- sort by the highest call count 153 elp-sort-by-call-count -- sort by the highest call count
154 elp-sort-by-total-time -- sort by the highest total time 154 elp-sort-by-total-time -- sort by the highest total time
155 elp-sort-by-average-time -- sort by the highest average times 155 elp-sort-by-average-time -- sort by the highest average times
156 156
157You can write you're own sort function. It should adhere to the 157You can write your own sort function. It should adhere to the
158interface specified by the PRED argument for the `sort' defun. Each 158interface specified by the PREDICATE argument for `sort'.
159\"element of LIST\" is really a 4 element vector where element 0 is 159Each \"element of LIST\" is really a 4 element vector where element 0 is
160the call count, element 1 is the total time spent in the function, 160the call count, element 1 is the total time spent in the function,
161element 2 is the average time spent in the function, and element 3 is 161element 2 is the average time spent in the function, and element 3 is
162the symbol's name string." 162the symbol's name string."
@@ -164,7 +164,7 @@ the symbol's name string."
164 :group 'elp) 164 :group 'elp)
165 165
166(defcustom elp-report-limit 1 166(defcustom elp-report-limit 1
167 "*Prevents some functions from being displayed in the results buffer. 167 "*Prevent some functions from being displayed in the results buffer.
168If a number, no function that has been called fewer than that number 168If a number, no function that has been called fewer than that number
169of times will be displayed in the output buffer. If nil, all 169of times will be displayed in the output buffer. If nil, all
170functions will be displayed." 170functions will be displayed."
@@ -173,12 +173,12 @@ functions will be displayed."
173 :group 'elp) 173 :group 'elp)
174 174
175(defcustom elp-use-standard-output nil 175(defcustom elp-use-standard-output nil
176 "*Non-nil says to output to `standard-output' instead of a buffer." 176 "*If non-nil, output to `standard-output' instead of a buffer."
177 :type 'boolean 177 :type 'boolean
178 :group 'elp) 178 :group 'elp)
179 179
180(defcustom elp-recycle-buffers-p t 180(defcustom elp-recycle-buffers-p t
181 "*nil says to not recycle the `elp-results-buffer'. 181 "*If nil, don't recycle the `elp-results-buffer'.
182In other words, a new unique buffer is create every time you run 182In other words, a new unique buffer is create every time you run
183\\[elp-results]." 183\\[elp-results]."
184 :type 'boolean 184 :type 'boolean
@@ -372,7 +372,7 @@ Use optional LIST if provided instead."
372 (mapcar 'elp-restore-function list))) 372 (mapcar 'elp-restore-function list)))
373 373
374(defun elp-restore-all () 374(defun elp-restore-all ()
375 "Restores the original definitions of all functions being profiled." 375 "Restore the original definitions of all functions being profiled."
376 (interactive) 376 (interactive)
377 (elp-restore-list elp-all-instrumented-list)) 377 (elp-restore-list elp-all-instrumented-list))
378 378
@@ -412,7 +412,7 @@ Use optional LIST if provided instead."
412 (elp-instrument-function funsym))) 412 (elp-instrument-function funsym)))
413 413
414(defun elp-unset-master () 414(defun elp-unset-master ()
415 "Unsets the master function." 415 "Unset the master function."
416 (interactive) 416 (interactive)
417 ;; when there's no master function, recording is turned on by default. 417 ;; when there's no master function, recording is turned on by default.
418 (setq elp-master nil 418 (setq elp-master nil
@@ -558,7 +558,7 @@ original definition, use \\[elp-restore-function] or \\[elp-restore-all]."
558(defun elp-results () 558(defun elp-results ()
559 "Display current profiling results. 559 "Display current profiling results.
560If `elp-reset-after-results' is non-nil, then current profiling 560If `elp-reset-after-results' is non-nil, then current profiling
561information for all instrumented functions are reset after results are 561information for all instrumented functions is reset after results are
562displayed." 562displayed."
563 (interactive) 563 (interactive)
564 (let ((curbuf (current-buffer)) 564 (let ((curbuf (current-buffer))
diff --git a/lisp/emacs-lisp/unsafep.el b/lisp/emacs-lisp/unsafep.el
index d7dd1f19300..3bb93334c3c 100644
--- a/lisp/emacs-lisp/unsafep.el
+++ b/lisp/emacs-lisp/unsafep.el
@@ -116,9 +116,9 @@ in the parse.")
116 116
117;;;###autoload 117;;;###autoload
118(defun unsafep (form &optional unsafep-vars) 118(defun unsafep (form &optional unsafep-vars)
119 "Return nil if evaluating FORM couldn't possibly do any harm; 119 "Return nil if evaluating FORM couldn't possibly do any harm.
120otherwise result is a reason why FORM is unsafe. UNSAFEP-VARS is a list 120Otherwise result is a reason why FORM is unsafe.
121of symbols with local bindings." 121UNSAFEP-VARS is a list of symbols with local bindings."
122 (catch 'unsafep 122 (catch 'unsafep
123 (if (or (eq safe-functions t) ;User turned off safety-checking 123 (if (or (eq safe-functions t) ;User turned off safety-checking
124 (atom form)) ;Atoms are never unsafe 124 (atom form)) ;Atoms are never unsafe
@@ -213,8 +213,8 @@ of symbols with local bindings."
213 213
214(defun unsafep-function (fun) 214(defun unsafep-function (fun)
215 "Return nil if FUN is a safe function. 215 "Return nil if FUN is a safe function.
216\(either a safe lambda or a symbol that names a safe function). Otherwise 216\(Either a safe lambda or a symbol that names a safe function).
217result is a reason code." 217Otherwise result is a reason code."
218 (cond 218 (cond
219 ((eq (car-safe fun) 'lambda) 219 ((eq (car-safe fun) 'lambda)
220 (unsafep fun unsafep-vars)) 220 (unsafep fun unsafep-vars))
@@ -226,8 +226,8 @@ result is a reason code."
226 `(function ,fun)))) 226 `(function ,fun))))
227 227
228(defun unsafep-progn (list) 228(defun unsafep-progn (list)
229 "Return nil if all forms in LIST are safe, or the reason 229 "Return nil if all forms in LIST are safe.
230for the first unsafe form." 230Else, return the reason for the first unsafe form."
231 (catch 'unsafep-progn 231 (catch 'unsafep-progn
232 (let (reason) 232 (let (reason)
233 (dolist (x list) 233 (dolist (x list)
@@ -236,8 +236,9 @@ for the first unsafe form."
236 236
237(defun unsafep-let (clause) 237(defun unsafep-let (clause)
238 "Check the safety of a let binding. 238 "Check the safety of a let binding.
239CLAUSE is a let-binding, either SYM or (SYM) or (SYM VAL). Checks VAL 239CLAUSE is a let-binding, either SYM or (SYM) or (SYM VAL).
240and throws a reason to `unsafep' if unsafe. Returns SYM." 240Check VAL and throw a reason to `unsafep' if unsafe.
241Return SYM."
241 (let (reason sym) 242 (let (reason sym)
242 (if (atom clause) 243 (if (atom clause)
243 (setq sym clause) 244 (setq sym clause)
diff --git a/lisp/follow.el b/lisp/follow.el
index 50760cd9909..3edc62e5784 100644
--- a/lisp/follow.el
+++ b/lisp/follow.el
@@ -2163,6 +2163,7 @@ This prevents `mouse-drag-region' from messing things up."
2163;;{{{ The end 2163;;{{{ The end
2164 2164
2165(defun follow-unload-function () 2165(defun follow-unload-function ()
2166 "Unload Follow mode library."
2166 (easy-menu-remove-item nil '("Tools") "Follow") 2167 (easy-menu-remove-item nil '("Tools") "Follow")
2167 (follow-stop-intercept-process-output) 2168 (follow-stop-intercept-process-output)
2168 (dolist (group '((before 2169 (dolist (group '((before
@@ -2189,10 +2190,9 @@ This prevents `mouse-drag-region' from messing things up."
2189 (intern (concat "follow-" (symbol-name fun)))) 2190 (intern (concat "follow-" (symbol-name fun))))
2190 (ad-update fun)) 2191 (ad-update fun))
2191 (error nil)))))) 2192 (error nil))))))
2193 ;; continue standard processing
2192 nil) 2194 nil)
2193 2195
2194(defvar follow-unload-function 'follow-unload-function)
2195
2196;; 2196;;
2197;; We're done! 2197;; We're done!
2198;; 2198;;
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 77e1650f88d..bc07acae287 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,7 @@
12007-11-03 Reiner Steib <Reiner.Steib@gmx.de>
2
3 * gnus-sum.el (gnus-summary-highlight): Mark as risky local variable.
4
12007-11-01 Reiner Steib <Reiner.Steib@gmx.de> 52007-11-01 Reiner Steib <Reiner.Steib@gmx.de>
2 6
3 * mm-util.el (mm-charset-eval-alist): Mark as risky local variable. 7 * mm-util.el (mm-charset-eval-alist): Mark as risky local variable.
@@ -21,6 +25,10 @@
21 (gnus-article-prev-page): Honor gnus-article-over-scroll when moving 25 (gnus-article-prev-page): Honor gnus-article-over-scroll when moving
22 back to the previous page. 26 back to the previous page.
23 27
282007-10-30 Reiner Steib <Reiner.Steib@gmx.de>
29
30 * qp.el (quoted-printable-decode-string): Fix typo in doc string.
31
242007-10-30 Katsumi Yamaoka <yamaoka@jpl.org> 322007-10-30 Katsumi Yamaoka <yamaoka@jpl.org>
25 33
26 * gnus-ems.el (gnus-x-splash): Work even if there's no scroll bar. 34 * gnus-ems.el (gnus-x-splash): Work even if there's no scroll bar.
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
index 5709de62b19..bc5ed9f0fb5 100644
--- a/lisp/gnus/gnus-sum.el
+++ b/lisp/gnus/gnus-sum.el
@@ -1080,6 +1080,7 @@ uncached: Non-nil if the article is uncached."
1080 :group 'gnus-summary-visual 1080 :group 'gnus-summary-visual
1081 :type '(repeat (cons (sexp :tag "Form" nil) 1081 :type '(repeat (cons (sexp :tag "Form" nil)
1082 face))) 1082 face)))
1083(put 'gnus-summary-highlight 'risky-local-variable t)
1083 1084
1084(defcustom gnus-alter-header-function nil 1085(defcustom gnus-alter-header-function nil
1085 "Function called to allow alteration of article header structures. 1086 "Function called to allow alteration of article header structures.
diff --git a/lisp/gnus/qp.el b/lisp/gnus/qp.el
index d601222160d..5689a70f3ac 100644
--- a/lisp/gnus/qp.el
+++ b/lisp/gnus/qp.el
@@ -82,7 +82,7 @@ them into characters should be done separately."
82 82
83(defun quoted-printable-decode-string (string &optional coding-system) 83(defun quoted-printable-decode-string (string &optional coding-system)
84 "Decode the quoted-printable encoded STRING and return the result. 84 "Decode the quoted-printable encoded STRING and return the result.
85If CODING-SYSTEM is non-nil, decode the region with coding-system. 85If CODING-SYSTEM is non-nil, decode the string with coding-system.
86Use of CODING-SYSTEM is deprecated; this function should deal with 86Use of CODING-SYSTEM is deprecated; this function should deal with
87raw bytes, and coding conversion should be done separately." 87raw bytes, and coding conversion should be done separately."
88 (mm-with-unibyte-buffer 88 (mm-with-unibyte-buffer
diff --git a/lisp/loadhist.el b/lisp/loadhist.el
index 82bab11a7ce..0c1766143d6 100644
--- a/lisp/loadhist.el
+++ b/lisp/loadhist.el
@@ -191,7 +191,7 @@ something strange, such as redefining an Emacs function."
191 (unload-func (intern-soft (concat name "-unload-function")))) 191 (unload-func (intern-soft (concat name "-unload-function"))))
192 ;; If FEATURE-unload-function is defined and returns non-nil, 192 ;; If FEATURE-unload-function is defined and returns non-nil,
193 ;; don't try to do anything more; otherwise proceed normally. 193 ;; don't try to do anything more; otherwise proceed normally.
194 (unless (and (bound-and-true-p unload-func) 194 (unless (and (fboundp unload-func)
195 (funcall unload-func)) 195 (funcall unload-func))
196 ;; Try to avoid losing badly when hooks installed in critical 196 ;; Try to avoid losing badly when hooks installed in critical
197 ;; places go away. (Some packages install things on 197 ;; places go away. (Some packages install things on
diff --git a/lisp/msb.el b/lisp/msb.el
index b67e471c229..cc5a0adcded 100644
--- a/lisp/msb.el
+++ b/lisp/msb.el
@@ -190,9 +190,6 @@
190 3099 190 3099
191 "Other files (%d)"))) 191 "Other files (%d)")))
192 192
193;; msb--many-menus is obsolete
194(defvar msb--many-menus msb--very-many-menus)
195
196;;; 193;;;
197;;; Customizable variables 194;;; Customizable variables
198;;; 195;;;
@@ -235,12 +232,12 @@ A value of nil means don't display this menu.
235MENU-TITLE is really a format. If you add %d in it, the %d is 232MENU-TITLE is really a format. If you add %d in it, the %d is
236replaced with the number of items in that menu. 233replaced with the number of items in that menu.
237 234
238ITEM-HANDLING-FN, is optional. If it is supplied and is a function, 235ITEM-HANDLING-FN is optional. If it is supplied and is a function,
239than it is used for displaying the items in that particular buffer 236then it is used for displaying the items in that particular buffer
240menu, otherwise the function pointed out by 237menu, otherwise the function pointed out by
241`msb-item-handling-function' is used. 238`msb-item-handling-function' is used.
242 239
243ITEM-SORT-FN, is also optional. 240ITEM-SORT-FN is also optional.
244If it is not supplied, the function pointed out by 241If it is not supplied, the function pointed out by
245`msb-item-sort-function' is used. 242`msb-item-sort-function' is used.
246If it is nil, then no sort takes place and the buffers are presented 243If it is nil, then no sort takes place and the buffers are presented
@@ -282,7 +279,7 @@ that differs by this value or more."
282(defcustom msb-max-menu-items 15 279(defcustom msb-max-menu-items 15
283 "*The maximum number of items in a menu. 280 "*The maximum number of items in a menu.
284If this variable is set to 15 for instance, then the submenu will be 281If this variable is set to 15 for instance, then the submenu will be
285split up in minor parts, 15 items each. nil means no limit." 282split up in minor parts, 15 items each. A value of nil means no limit."
286 :type '(choice integer (const nil)) 283 :type '(choice integer (const nil))
287 :set 'msb-custom-set 284 :set 'msb-custom-set
288 :group 'msb) 285 :group 'msb)
@@ -336,7 +333,7 @@ names that starts with a space character."
336 "*The appearance of a buffer menu. 333 "*The appearance of a buffer menu.
337 334
338The default function to call for handling the appearance of a menu 335The default function to call for handling the appearance of a menu
339item. It should take to arguments, BUFFER and MAX-BUFFER-NAME-LENGTH, 336item. It should take two arguments, BUFFER and MAX-BUFFER-NAME-LENGTH,
340where the latter is the max length of all buffer names. 337where the latter is the max length of all buffer names.
341 338
342The function should return the string to use in the menu. 339The function should return the string to use in the menu.
@@ -664,7 +661,7 @@ If the argument is left out or nil, then the current buffer is considered."
664(defun msb--create-function-info (menu-cond-elt) 661(defun msb--create-function-info (menu-cond-elt)
665 "Create a vector from an element MENU-COND-ELT of `msb-menu-cond'. 662 "Create a vector from an element MENU-COND-ELT of `msb-menu-cond'.
666This takes the form: 663This takes the form:
667\]BUFFER-LIST-VARIABLE CONDITION MENU-SORT-KEY MENU-TITLE ITEM-HANDLER SORTER) 664\[BUFFER-LIST-VARIABLE CONDITION MENU-SORT-KEY MENU-TITLE ITEM-HANDLER SORTER]
668See `msb-menu-cond' for a description of its elements." 665See `msb-menu-cond' for a description of its elements."
669 (let* ((list-symbol (make-symbol "-msb-buffer-list")) 666 (let* ((list-symbol (make-symbol "-msb-buffer-list"))
670 (tmp-ih (and (> (length menu-cond-elt) 3) 667 (tmp-ih (and (> (length menu-cond-elt) 3)
@@ -727,7 +724,7 @@ See `msb-menu-cond' for a description of its elements."
727(defun msb--add-to-menu (buffer function-info max-buffer-name-length) 724(defun msb--add-to-menu (buffer function-info max-buffer-name-length)
728 "Add BUFFER to the menu depicted by FUNCTION-INFO. 725 "Add BUFFER to the menu depicted by FUNCTION-INFO.
729All side-effects. Adds an element of form (BUFFER-TITLE . BUFFER) 726All side-effects. Adds an element of form (BUFFER-TITLE . BUFFER)
730to the buffer-list variable in function-info." 727to the buffer-list variable in FUNCTION-INFO."
731 (let ((list-symbol (aref function-info 0))) ;BUFFER-LIST-VARIABLE 728 (let ((list-symbol (aref function-info 0))) ;BUFFER-LIST-VARIABLE
732 ;; Here comes the hairy side-effect! 729 ;; Here comes the hairy side-effect!
733 (set list-symbol 730 (set list-symbol
@@ -961,7 +958,7 @@ It takes the form ((TITLE . BUFFER-LIST)...)."
961 (msb--create-buffer-menu-2)))) 958 (msb--create-buffer-menu-2))))
962 959
963(defun msb--toggle-menu-type () 960(defun msb--toggle-menu-type ()
964 "Multi purpose function for selecting a buffer with the mouse." 961 "Multi-purpose function for selecting a buffer with the mouse."
965 (interactive) 962 (interactive)
966 (setq msb-files-by-directory (not msb-files-by-directory)) 963 (setq msb-files-by-directory (not msb-files-by-directory))
967 ;; This gets a warning, but it is correct, 964 ;; This gets a warning, but it is correct,
diff --git a/lisp/net/tls.el b/lisp/net/tls.el
index 0643aca5d80..c2d9a826157 100644
--- a/lisp/net/tls.el
+++ b/lisp/net/tls.el
@@ -51,6 +51,9 @@
51 (autoload 'format-spec "format-spec") 51 (autoload 'format-spec "format-spec")
52 (autoload 'format-spec-make "format-spec")) 52 (autoload 'format-spec-make "format-spec"))
53 53
54(eval-when-compile
55 (require 'rx))
56
54(defgroup tls nil 57(defgroup tls nil
55 "Transport Layer Security (TLS) parameters." 58 "Transport Layer Security (TLS) parameters."
56 :group 'comm) 59 :group 'comm)
diff --git a/lisp/progmodes/gdb-ui.el b/lisp/progmodes/gdb-ui.el
index c6ae98c5b12..0d1a4b05d65 100644
--- a/lisp/progmodes/gdb-ui.el
+++ b/lisp/progmodes/gdb-ui.el
@@ -947,6 +947,12 @@ Changed values are highlighted with the face `font-lock-warning-face'."
947 :group 'gud 947 :group 'gud
948 :version "22.1") 948 :version "22.1")
949 949
950(defcustom gdb-delete-out-of-scope t
951 "If non-nil delete watch expressions automatically when they go out of scope."
952 :type 'boolean
953 :group 'gud
954 :version "22.2")
955
950(defun gdb-speedbar-expand-node (text token indent) 956(defun gdb-speedbar-expand-node (text token indent)
951 "Expand the node the user clicked on. 957 "Expand the node the user clicked on.
952TEXT is the text of the button we clicked on, a + or - item. 958TEXT is the text of the button we clicked on, a + or - item.
@@ -3515,7 +3521,9 @@ in_scope=\"\\(.*?\\)\".*?}")
3515 (when var 3521 (when var
3516 (let ((match (match-string 3))) 3522 (let ((match (match-string 3)))
3517 (cond ((string-equal match "false") 3523 (cond ((string-equal match "false")
3518 (setcar (nthcdr 5 var) 'out-of-scope)) 3524 (if gdb-delete-out-of-scope
3525 (gdb-var-delete-1 varnum)
3526 (setcar (nthcdr 5 var) 'out-of-scope)))
3519 ((string-equal match "true") 3527 ((string-equal match "true")
3520 (setcar (nthcdr 5 var) 'changed) 3528 (setcar (nthcdr 5 var) 'changed)
3521 (setcar (nthcdr 4 var) 3529 (setcar (nthcdr 4 var)
diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el
index 50dcd6a83bf..ce231f4c662 100644
--- a/lisp/progmodes/gud.el
+++ b/lisp/progmodes/gud.el
@@ -709,25 +709,14 @@ The option \"--fullname\" must be included in this value."
709(defvar gud-filter-pending-text nil 709(defvar gud-filter-pending-text nil
710 "Non-nil means this is text that has been saved for later in `gud-filter'.") 710 "Non-nil means this is text that has been saved for later in `gud-filter'.")
711 711
712;; The old gdb command. The new one is in gdb-ui.el. 712;; The old gdb command (text command mode). The new one is in gdb-ui.el.
713;;;###autoload 713;;;###autoload
714(defun gud-gdb (command-line) 714(defun gud-gdb (command-line)
715 "Run gdb on program FILE in buffer *gud-FILE*. 715 "Run gdb on program FILE in buffer *gud-FILE*.
716The directory containing FILE becomes the initial working 716The directory containing FILE becomes the initial working
717directory and source-file directory for your debugger. By 717directory and source-file directory for your debugger."
718default this command starts GDB using a graphical interface. See
719`gdba' for more information.
720
721To run GDB in text command mode, replace the GDB \"--annotate=3\"
722option with \"--fullname\" either in the minibuffer for the
723current Emacs session, or the custom variable
724`gud-gdb-command-name' for all future sessions. You need to use
725text command mode to debug multiple programs within one Emacs
726session."
727 (interactive (list (gud-query-cmdline 'gud-gdb))) 718 (interactive (list (gud-query-cmdline 'gud-gdb)))
728 719
729 (require 'gdb-ui)
730
731 (when (and gud-comint-buffer 720 (when (and gud-comint-buffer
732 (buffer-name gud-comint-buffer) 721 (buffer-name gud-comint-buffer)
733 (get-buffer-process gud-comint-buffer) 722 (get-buffer-process gud-comint-buffer)
@@ -736,8 +725,8 @@ session."
736 (error 725 (error
737 "Multiple debugging requires restarting in text command mode")) 726 "Multiple debugging requires restarting in text command mode"))
738 727
739 (gud-common-init command-line nil 'gud-gdba-marker-filter) 728 (gud-common-init command-line nil 'gud-gdb-marker-filter)
740 (set (make-local-variable 'gud-minor-mode) 'gdba) 729 (set (make-local-variable 'gud-minor-mode) 'gdb)
741 730
742 (gud-def gud-break "break %f:%l" "\C-b" "Set breakpoint at current line.") 731 (gud-def gud-break "break %f:%l" "\C-b" "Set breakpoint at current line.")
743 (gud-def gud-tbreak "tbreak %f:%l" "\C-t" 732 (gud-def gud-tbreak "tbreak %f:%l" "\C-t"
diff --git a/lisp/savehist.el b/lisp/savehist.el
index 7cc56842d4b..705be69088d 100644
--- a/lisp/savehist.el
+++ b/lisp/savehist.el
@@ -308,7 +308,8 @@ If AUTO-SAVE is non-nil, compare the saved contents to the one last saved,
308 (current-buffer)) 308 (current-buffer))
309 (insert ?\n) 309 (insert ?\n)
310 (dolist (symbol savehist-minibuffer-history-variables) 310 (dolist (symbol savehist-minibuffer-history-variables)
311 (when (boundp symbol) 311 (when (and (boundp symbol)
312 (not (memq symbol savehist-ignored-variables)))
312 (let ((value (savehist-trim-history (symbol-value symbol))) 313 (let ((value (savehist-trim-history (symbol-value symbol)))
313 excess-space) 314 excess-space)
314 (when value ; Don't save empty histories. 315 (when value ; Don't save empty histories.
diff --git a/lisp/server.el b/lisp/server.el
index bbebe784636..c263a21a6cf 100644
--- a/lisp/server.el
+++ b/lisp/server.el
@@ -1287,6 +1287,7 @@ only these files will be asked to be saved."
1287(defun server-unload-function () 1287(defun server-unload-function ()
1288 "Unload the server library." 1288 "Unload the server library."
1289 (server-mode -1) 1289 (server-mode -1)
1290 (substitute-key-definition 'server-edit nil ctl-x-map)
1290 (save-current-buffer 1291 (save-current-buffer
1291 (dolist (buffer (buffer-list)) 1292 (dolist (buffer (buffer-list))
1292 (set-buffer buffer) 1293 (set-buffer buffer)
@@ -1294,7 +1295,10 @@ only these files will be asked to be saved."
1294 ;; continue standard unloading 1295 ;; continue standard unloading
1295 nil) 1296 nil)
1296 1297
1298(add-hook 'kill-emacs-hook (lambda () (server-mode -1))) ;Cleanup upon exit.
1299
1297(defvar server-unload-function 'server-unload-function) 1300(defvar server-unload-function 'server-unload-function)
1301
1298 1302
1299(provide 'server) 1303(provide 'server)
1300 1304
diff --git a/lisp/ses.el b/lisp/ses.el
index 62067471b60..f76befa874d 100644
--- a/lisp/ses.el
+++ b/lisp/ses.el
@@ -2921,7 +2921,7 @@ TEST is evaluated."
2921;;---------------------------------------------------------------------------- 2921;;----------------------------------------------------------------------------
2922 2922
2923;;These functions use the variables 'row' and 'col' that are 2923;;These functions use the variables 'row' and 'col' that are
2924;;dynamically bound by ses-print-cell. We define these varables at 2924;;dynamically bound by ses-print-cell. We define these variables at
2925;;compile-time to make the compiler happy. 2925;;compile-time to make the compiler happy.
2926(eval-when-compile 2926(eval-when-compile
2927 (dolist (x '(row col)) 2927 (dolist (x '(row col))
@@ -2980,6 +2980,19 @@ current column and continues until the next nonblank column."
2980(dolist (x (cons 'ses-unsafe ses-standard-printer-functions)) 2980(dolist (x (cons 'ses-unsafe ses-standard-printer-functions))
2981 (put x 'side-effect-free t)) 2981 (put x 'side-effect-free t))
2982 2982
2983(defun ses-unload-function ()
2984 "Unload the Simple Emacs Spreadsheet."
2985 (dolist (fun '(copy-region-as-kill yank))
2986 (ad-remove-advice fun 'around (intern (concat "ses-" (symbol-name fun))))
2987 (ad-update fun))
2988 (save-current-buffer
2989 (dolist (buf (buffer-list))
2990 (set-buffer buf)
2991 (when (eq major-mode 'ses-mode)
2992 (funcall (or default-major-mode 'fundamental-mode)))))
2993 ;; continue standard unloading
2994 nil)
2995
2983(provide 'ses) 2996(provide 'ses)
2984 2997
2985;; arch-tag: 88c1ccf0-4293-4824-8c5d-0757b52217f3 2998;; arch-tag: 88c1ccf0-4293-4824-8c5d-0757b52217f3
diff --git a/lisp/shadowfile.el b/lisp/shadowfile.el
index ca06ace2214..be30ccc8c6a 100644
--- a/lisp/shadowfile.el
+++ b/lisp/shadowfile.el
@@ -103,8 +103,8 @@ is no buffer currently visiting the file."
103 103
104(defcustom shadow-inhibit-overload nil 104(defcustom shadow-inhibit-overload nil
105 "If non-nil, shadowfile won't redefine \\[save-buffers-kill-emacs]. 105 "If non-nil, shadowfile won't redefine \\[save-buffers-kill-emacs].
106Normally it overloads the function `save-buffers-kill-emacs' to check 106Normally it overloads the function `save-buffers-kill-emacs' to check for
107for files have been changed and need to be copied to other systems." 107files that have been changed and need to be copied to other systems."
108 :type 'boolean 108 :type 'boolean
109 :group 'shadow) 109 :group 'shadow)
110 110
@@ -299,7 +299,7 @@ be matched against the primary of SITE2."
299 299
300(defun shadow-parse-fullname (fullname) 300(defun shadow-parse-fullname (fullname)
301 "Parse FULLNAME into \(site user path) list. 301 "Parse FULLNAME into \(site user path) list.
302Leave it alone if it already is one. Returns nil if the argument is 302Leave it alone if it already is one. Return nil if the argument is
303not a full ange-ftp pathname." 303not a full ange-ftp pathname."
304 (if (listp fullname) 304 (if (listp fullname)
305 fullname 305 fullname
@@ -392,9 +392,9 @@ local filename."
392 "Return t if PATTERN matches FILE. 392 "Return t if PATTERN matches FILE.
393If REGEXP is supplied and non-nil, the file part of the pattern is a regular 393If REGEXP is supplied and non-nil, the file part of the pattern is a regular
394expression, otherwise it must match exactly. The sites and usernames must 394expression, otherwise it must match exactly. The sites and usernames must
395match---see `shadow-same-site'. The pattern must be in full ange-ftp format, but 395match---see `shadow-same-site'. The pattern must be in full ange-ftp format,
396the file can be any valid filename. This function does not do any filename 396but the file can be any valid filename. This function does not do any
397expansion or contraction, you must do that yourself first." 397filename expansion or contraction, you must do that yourself first."
398 (let* ((pattern-sup (shadow-parse-fullname pattern)) 398 (let* ((pattern-sup (shadow-parse-fullname pattern))
399 (file-sup (shadow-parse-name file))) 399 (file-sup (shadow-parse-name file)))
400 (and (shadow-same-site pattern-sup file-sup) 400 (and (shadow-same-site pattern-sup file-sup)
@@ -412,8 +412,8 @@ expansion or contraction, you must do that yourself first."
412This is a group of hosts that share directories, so that copying to or from 412This is a group of hosts that share directories, so that copying to or from
413one of them is sufficient to update the file on all of them. Clusters are 413one of them is sufficient to update the file on all of them. Clusters are
414defined by a name, the network address of a primary host \(the one we copy 414defined by a name, the network address of a primary host \(the one we copy
415files to), and a regular expression that matches the hostnames of all the sites 415files to), and a regular expression that matches the hostnames of all the
416in the cluster." 416sites in the cluster."
417 (interactive (list (completing-read "Cluster name: " shadow-clusters () ()))) 417 (interactive (list (completing-read "Cluster name: " shadow-clusters () ())))
418 (let* ((old (shadow-get-cluster name)) 418 (let* ((old (shadow-get-cluster name))
419 (primary (read-string "Primary host: " 419 (primary (read-string "Primary host: "
@@ -469,8 +469,8 @@ specific hostnames, or names of clusters \(see `shadow-define-cluster')."
469 "Make each of a group of files be shared between hosts. 469 "Make each of a group of files be shared between hosts.
470Prompts for regular expression; files matching this are shared between a list 470Prompts for regular expression; files matching this are shared between a list
471of sites, which are also prompted for. The filenames must be identical on all 471of sites, which are also prompted for. The filenames must be identical on all
472hosts \(if they aren't, use `shadow-define-literal-group' instead of this function). 472hosts \(if they aren't, use `shadow-define-literal-group' instead of this
473Each site can be either a hostname or the name of a cluster \(see 473function). Each site can be either a hostname or the name of a cluster \(see
474`shadow-define-cluster')." 474`shadow-define-cluster')."
475 (interactive) 475 (interactive)
476 (let ((regexp (read-string 476 (let ((regexp (read-string
@@ -639,7 +639,7 @@ Consider them as regular expressions if third arg REGEXP is true."
639 639
640(defun shadow-remove-from-todo (pair) 640(defun shadow-remove-from-todo (pair)
641 "Remove PAIR from `shadow-files-to-copy'. 641 "Remove PAIR from `shadow-files-to-copy'.
642PAIR must be (eq to) one of the elements of that list." 642PAIR must be `eq' to one of the elements of that list."
643 (setq shadow-files-to-copy 643 (setq shadow-files-to-copy
644 (shadow-remove-if (function (lambda (s) (eq s pair))) 644 (shadow-remove-if (function (lambda (s) (eq s pair)))
645 shadow-files-to-copy))) 645 shadow-files-to-copy)))
@@ -647,7 +647,7 @@ PAIR must be (eq to) one of the elements of that list."
647(defun shadow-read-files () 647(defun shadow-read-files ()
648 "Visit and load `shadow-info-file' and `shadow-todo-file'. 648 "Visit and load `shadow-info-file' and `shadow-todo-file'.
649Thus restores shadowfile's state from your last Emacs session. 649Thus restores shadowfile's state from your last Emacs session.
650Returns t unless files were locked; then returns nil." 650Return t unless files were locked; then return nil."
651 (interactive) 651 (interactive)
652 (if (and (fboundp 'file-locked-p) 652 (if (and (fboundp 'file-locked-p)
653 (or (stringp (file-locked-p shadow-info-file)) 653 (or (stringp (file-locked-p shadow-info-file))
@@ -723,8 +723,9 @@ With non-nil argument also saves the buffer."
723 (setq shadow-hashtable (make-vector 37 0))) 723 (setq shadow-hashtable (make-vector 37 0)))
724 724
725(defun shadow-insert-var (variable) 725(defun shadow-insert-var (variable)
726 "Prettily insert a `setq' command for VARIABLE, 726 "Build a `setq' to restore VARIABLE.
727which, when later evaluated, will restore it to its current setting. 727Prettily insert a `setq' command which, when later evaluated,
728will restore VARIABLE to its current setting.
728VARIABLE must be the name of a variable whose value is a list." 729VARIABLE must be the name of a variable whose value is a list."
729 (let ((standard-output (current-buffer))) 730 (let ((standard-output (current-buffer)))
730 (insert (format "(setq %s" variable)) 731 (insert (format "(setq %s" variable))
diff --git a/lisp/strokes.el b/lisp/strokes.el
index 73e5594664a..d4fcdb66f61 100644
--- a/lisp/strokes.el
+++ b/lisp/strokes.el
@@ -1371,7 +1371,9 @@ If STROKES-MAP is not given, `strokes-global-map' will be used instead."
1371 1371
1372(defun strokes-alphabetic-lessp (stroke1 stroke2) 1372(defun strokes-alphabetic-lessp (stroke1 stroke2)
1373 "Return t if STROKE1's command name precedes STROKE2's in lexicographic order." 1373 "Return t if STROKE1's command name precedes STROKE2's in lexicographic order."
1374 (string-lessp (cdr stroke1) (cdr stroke2))) 1374 (let ((command-name-1 (symbol-name (cdr stroke1)))
1375 (command-name-2 (symbol-name (cdr stroke2))))
1376 (string-lessp command-name-1 command-name-2)))
1375 1377
1376(defvar strokes-mode-map 1378(defvar strokes-mode-map
1377 (let ((map (make-sparse-keymap))) 1379 (let ((map (make-sparse-keymap)))
diff --git a/lisp/uniquify.el b/lisp/uniquify.el
index 254832ed700..492918c7f96 100644
--- a/lisp/uniquify.el
+++ b/lisp/uniquify.el
@@ -421,6 +421,23 @@ in `uniquify-list-buffers-directory-modes', otherwise returns nil."
421 421
422;;; Hooks from the rest of Emacs 422;;; Hooks from the rest of Emacs
423 423
424;; Buffer deletion
425;; Rerationalize after a buffer is killed, to reduce coinciding buffer names.
426;; This mechanism uses `kill-buffer-hook', which runs *before* deletion, so
427;; it calls `uniquify-rerationalize-w/o-cb' to rerationalize the buffer list
428;; ignoring the current buffer (which is going to be deleted anyway).
429(defun uniquify-maybe-rerationalize-w/o-cb ()
430 "Re-rationalize buffer names, ignoring current buffer.
431For use on `kill-buffer-hook'."
432 (if (and (cdr uniquify-managed)
433 uniquify-buffer-name-style
434 uniquify-after-kill-buffer-p)
435 (uniquify-rerationalize-w/o-cb uniquify-managed)))
436
437;; Ideally we'd like to add it buffer-locally, but that doesn't work
438;; because kill-buffer-hook is not permanent-local :-(
439(add-hook 'kill-buffer-hook 'uniquify-maybe-rerationalize-w/o-cb)
440
424;; The logical place to put all this code is in generate-new-buffer-name. 441;; The logical place to put all this code is in generate-new-buffer-name.
425;; It's written in C, so we would add a generate-new-buffer-name-function 442;; It's written in C, so we would add a generate-new-buffer-name-function
426;; which, if non-nil, would be called instead of the C. One problem with 443;; which, if non-nil, would be called instead of the C. One problem with
@@ -458,22 +475,24 @@ in `uniquify-list-buffers-directory-modes', otherwise returns nil."
458 (file-name-nondirectory filename) 475 (file-name-nondirectory filename)
459 (file-name-directory filename) ad-return-value)))) 476 (file-name-directory filename) ad-return-value))))
460 477
461;; Buffer deletion 478;;; The End
462;; Rerationalize after a buffer is killed, to reduce coinciding buffer names. 479
463;; This mechanism uses `kill-buffer-hook', which runs *before* deletion, so 480(defun uniquify-unload-function ()
464;; it calls `uniquify-rerationalize-w/o-cb' to rerationalize the buffer list 481 "Unload the uniquify library."
465;; ignoring the current buffer (which is going to be deleted anyway). 482 (save-current-buffer
466(defun uniquify-maybe-rerationalize-w/o-cb () 483 (let ((buffers nil))
467 "Re-rationalize buffer names, ignoring current buffer. 484 (dolist (buf (buffer-list))
468For use on `kill-buffer-hook'." 485 (set-buffer buf)
469 (if (and (cdr uniquify-managed) 486 (when uniquify-managed
470 uniquify-buffer-name-style 487 (push (cons buf (uniquify-item-base (car uniquify-managed))) buffers)))
471 uniquify-after-kill-buffer-p) 488 (dolist (fun '(rename-buffer create-file-buffer))
472 (uniquify-rerationalize-w/o-cb uniquify-managed))) 489 (ad-remove-advice fun 'after (intern (concat (symbol-name fun) "-uniquify")))
473 490 (ad-update fun))
474;; Ideally we'd like to add it buffer-locally, but that doesn't work 491 (dolist (buf buffers)
475;; because kill-buffer-hook is not permanent-local :-( 492 (set-buffer (car buf))
476(add-hook 'kill-buffer-hook 'uniquify-maybe-rerationalize-w/o-cb) 493 (rename-buffer (cdr buf) t))))
494 ;; continue standard uploading
495 nil)
477 496
478(provide 'uniquify) 497(provide 'uniquify)
479 498
diff --git a/lisp/whitespace.el b/lisp/whitespace.el
index 6e6aeb5fbb7..f6c94534a00 100644
--- a/lisp/whitespace.el
+++ b/lisp/whitespace.el
@@ -784,7 +784,6 @@ When this mode is active, `whitespace-buffer' is added to
784(defun whitespace-write-file-hook () 784(defun whitespace-write-file-hook ()
785 "Hook function to be called on the buffer when whitespace check is enabled. 785 "Hook function to be called on the buffer when whitespace check is enabled.
786This is meant to be added buffer-locally to `write-file-functions'." 786This is meant to be added buffer-locally to `write-file-functions'."
787 (interactive)
788 (let ((werr nil)) 787 (let ((werr nil))
789 (if whitespace-auto-cleanup 788 (if whitespace-auto-cleanup
790 (whitespace-cleanup-internal) 789 (whitespace-cleanup-internal)
@@ -794,6 +793,21 @@ This is meant to be added buffer-locally to `write-file-functions'."
794 buffer-file-name)))) 793 buffer-file-name))))
795 nil) 794 nil)
796 795
796(defun whitespace-unload-function ()
797 "Unload the whitespace library."
798 (if (unintern "whitespace-unload-hook")
799 ;; if whitespace-unload-hook is defined, let's get rid of it
800 ;; and recursively call `unload-feature'
801 (progn (unload-feature 'whitespace) t)
802 ;; this only happens in the recursive call
803 (whitespace-global-mode -1)
804 (save-current-buffer
805 (dolist (buf (buffer-list))
806 (set-buffer buf)
807 (remove-hook 'write-file-functions 'whitespace-write-file-hook t)))
808 ;; continue standard unloading
809 nil))
810
797(defun whitespace-unload-hook () 811(defun whitespace-unload-hook ()
798 (remove-hook 'find-file-hook 'whitespace-buffer) 812 (remove-hook 'find-file-hook 'whitespace-buffer)
799 (remove-hook 'write-file-functions 'whitespace-write-file-hook t) 813 (remove-hook 'write-file-functions 'whitespace-write-file-hook t)