aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lisp/ChangeLog24
-rw-r--r--lisp/Makefile.in12
-rw-r--r--lisp/emacs-lisp/cl-extra.el16
-rw-r--r--lisp/emacs-lisp/cl-lib.el108
-rw-r--r--lisp/emacs-lisp/cl-loaddefs.el4
-rw-r--r--lisp/emacs-lisp/cl-macs.el200
-rw-r--r--lisp/emacs-lisp/cl.el18
-rw-r--r--lisp/emacs-lisp/gv.el117
-rw-r--r--lisp/env.el2
-rw-r--r--lisp/faces.el29
-rw-r--r--lisp/files.el14
-rw-r--r--lisp/ldefs-boot.el225
-rw-r--r--lisp/startup.el4
-rw-r--r--lisp/subr.el1
-rw-r--r--lisp/window.el4
15 files changed, 449 insertions, 329 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index f99b3e4d32a..4a92a427342 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,27 @@
12012-06-22 Stefan Monnier <monnier@iro.umontreal.ca>
2
3 Further GV/CL cleanups.
4 * emacs-lisp/gv.el (gv-get): Autoload functions to find their
5 gv-expander.
6 (gv--defun-declaration): New function.
7 (defun-declarations-alist): Use it.
8 (gv-define-modify-macro, gv-pushnew!, gv-inc!, gv-dec!): Remove.
9 (gv-place): Autoload.
10 * emacs-lisp/cl.el (cl--dotimes, cl--dolist): Remember subr.el's
11 original definition of dotimes and dolist.
12 * emacs-lisp/cl-macs.el (cl-expr-access-order): Remove unused.
13 (cl-dolist, cl-dotimes): Use `dolist' and `dotimes'.
14 * emacs-lisp/cl-lib.el: Move gv handlers from cl-macs to here.
15 (cl-fifth, cl-sixth, cl-seventh, cl-eighth)
16 (cl-ninth, cl-tenth): Move gv handler to the function's definition.
17 * emacs-lisp/cl-extra.el (cl-subseq, cl-get, cl-getf): Move gv handler
18 to the function's definition.
19 * Makefile.in (COMPILE_FIRST): Re-order to speed it up by about 50%.
20 * window.el:
21 * files.el:
22 * faces.el:
23 * env.el: Don't use CL.
24
12012-06-22 Paul Eggert <eggert@cs.ucla.edu> 252012-06-22 Paul Eggert <eggert@cs.ucla.edu>
2 26
3 Support higher-resolution time stamps (Bug#9000). 27 Support higher-resolution time stamps (Bug#9000).
diff --git a/lisp/Makefile.in b/lisp/Makefile.in
index 4af584e77dc..6140b4fe953 100644
--- a/lisp/Makefile.in
+++ b/lisp/Makefile.in
@@ -92,13 +92,17 @@ BIG_STACK_OPTS = --eval "(setq max-lisp-eval-depth $(BIG_STACK_DEPTH))"
92BYTE_COMPILE_FLAGS = $(BIG_STACK_OPTS) $(BYTE_COMPILE_EXTRA_FLAGS) 92BYTE_COMPILE_FLAGS = $(BIG_STACK_OPTS) $(BYTE_COMPILE_EXTRA_FLAGS)
93 93
94# Files to compile before others during a bootstrap. This is done to 94# Files to compile before others during a bootstrap. This is done to
95# speed up the bootstrap process. 95# speed up the bootstrap process. They're ordered by size, so we use
96# the slowest-compiler on the smallest file and move to larger files as the
97# compiler gets faster. `autoload.elc' comes last because it is not used by
98# the compiler (so its compilation does not speed up subsequent compilations),
99# it's only placed here so as to speed up generation of the loaddefs.el file.
96 100
97COMPILE_FIRST = \ 101COMPILE_FIRST = \
98 $(lisp)/emacs-lisp/bytecomp.elc \
99 $(lisp)/emacs-lisp/byte-opt.elc \
100 $(lisp)/emacs-lisp/macroexp.elc \ 102 $(lisp)/emacs-lisp/macroexp.elc \
101 $(lisp)/emacs-lisp/cconv.elc \ 103 $(lisp)/emacs-lisp/cconv.elc \
104 $(lisp)/emacs-lisp/byte-opt.elc \
105 $(lisp)/emacs-lisp/bytecomp.elc \
102 $(lisp)/emacs-lisp/autoload.elc 106 $(lisp)/emacs-lisp/autoload.elc
103 107
104# The actual Emacs command run in the targets below. 108# The actual Emacs command run in the targets below.
diff --git a/lisp/emacs-lisp/cl-extra.el b/lisp/emacs-lisp/cl-extra.el
index e64623ab44e..b721ceba2ef 100644
--- a/lisp/emacs-lisp/cl-extra.el
+++ b/lisp/emacs-lisp/cl-extra.el
@@ -523,6 +523,10 @@ This sets the values of: `cl-most-positive-float', `cl-most-negative-float',
523 "Return the subsequence of SEQ from START to END. 523 "Return the subsequence of SEQ from START to END.
524If END is omitted, it defaults to the length of the sequence. 524If END is omitted, it defaults to the length of the sequence.
525If START or END is negative, it counts from the end." 525If START or END is negative, it counts from the end."
526 (declare (gv-setter
527 (lambda (new)
528 `(progn (cl-replace ,seq ,new :start1 ,start :end1 ,end)
529 ,new))))
526 (if (stringp seq) (substring seq start end) 530 (if (stringp seq) (substring seq start end)
527 (let (len) 531 (let (len)
528 (and end (< end 0) (setq end (+ end (setq len (length seq))))) 532 (and end (< end 0) (setq end (+ end (setq len (length seq)))))
@@ -587,7 +591,8 @@ If START or END is negative, it counts from the end."
587(defun cl-get (sym tag &optional def) 591(defun cl-get (sym tag &optional def)
588 "Return the value of SYMBOL's PROPNAME property, or DEFAULT if none. 592 "Return the value of SYMBOL's PROPNAME property, or DEFAULT if none.
589\n(fn SYMBOL PROPNAME &optional DEFAULT)" 593\n(fn SYMBOL PROPNAME &optional DEFAULT)"
590 (declare (compiler-macro cl--compiler-macro-get)) 594 (declare (compiler-macro cl--compiler-macro-get)
595 (gv-setter (lambda (store) `(put ,sym ,tag ,store))))
591 (or (get sym tag) 596 (or (get sym tag)
592 (and def 597 (and def
593 ;; Make sure `def' is really absent as opposed to set to nil. 598 ;; Make sure `def' is really absent as opposed to set to nil.
@@ -602,6 +607,15 @@ If START or END is negative, it counts from the end."
602 "Search PROPLIST for property PROPNAME; return its value or DEFAULT. 607 "Search PROPLIST for property PROPNAME; return its value or DEFAULT.
603PROPLIST is a list of the sort returned by `symbol-plist'. 608PROPLIST is a list of the sort returned by `symbol-plist'.
604\n(fn PROPLIST PROPNAME &optional DEFAULT)" 609\n(fn PROPLIST PROPNAME &optional DEFAULT)"
610 (declare (gv-expander
611 (lambda (do)
612 (gv-letplace (getter setter) plist
613 (macroexp-let2 nil k tag
614 (macroexp-let2 nil d def
615 (funcall do `(cl-getf ,getter ,k ,d)
616 (lambda (v)
617 (funcall setter
618 `(cl--set-getf ,getter ,k ,v))))))))))
605 (setplist '--cl-getf-symbol-- plist) 619 (setplist '--cl-getf-symbol-- plist)
606 (or (get '--cl-getf-symbol-- tag) 620 (or (get '--cl-getf-symbol-- tag)
607 ;; Originally we called cl-get here, 621 ;; Originally we called cl-get here,
diff --git a/lisp/emacs-lisp/cl-lib.el b/lisp/emacs-lisp/cl-lib.el
index 2422aa8fbb6..990e66d91aa 100644
--- a/lisp/emacs-lisp/cl-lib.el
+++ b/lisp/emacs-lisp/cl-lib.el
@@ -378,26 +378,32 @@ SEQ, this is like `mapcar'. With several, it is like the Common Lisp
378 378
379(defsubst cl-fifth (x) 379(defsubst cl-fifth (x)
380 "Return the fifth element of the list X." 380 "Return the fifth element of the list X."
381 (declare (gv-setter (lambda (store) `(setcar (nthcdr 4 ,x) ,store))))
381 (nth 4 x)) 382 (nth 4 x))
382 383
383(defsubst cl-sixth (x) 384(defsubst cl-sixth (x)
384 "Return the sixth element of the list X." 385 "Return the sixth element of the list X."
386 (declare (gv-setter (lambda (store) `(setcar (nthcdr 5 ,x) ,store))))
385 (nth 5 x)) 387 (nth 5 x))
386 388
387(defsubst cl-seventh (x) 389(defsubst cl-seventh (x)
388 "Return the seventh element of the list X." 390 "Return the seventh element of the list X."
391 (declare (gv-setter (lambda (store) `(setcar (nthcdr 6 ,x) ,store))))
389 (nth 6 x)) 392 (nth 6 x))
390 393
391(defsubst cl-eighth (x) 394(defsubst cl-eighth (x)
392 "Return the eighth element of the list X." 395 "Return the eighth element of the list X."
396 (declare (gv-setter (lambda (store) `(setcar (nthcdr 7 ,x) ,store))))
393 (nth 7 x)) 397 (nth 7 x))
394 398
395(defsubst cl-ninth (x) 399(defsubst cl-ninth (x)
396 "Return the ninth element of the list X." 400 "Return the ninth element of the list X."
401 (declare (gv-setter (lambda (store) `(setcar (nthcdr 8 ,x) ,store))))
397 (nth 8 x)) 402 (nth 8 x))
398 403
399(defsubst cl-tenth (x) 404(defsubst cl-tenth (x)
400 "Return the tenth element of the list X." 405 "Return the tenth element of the list X."
406 (declare (gv-setter (lambda (store) `(setcar (nthcdr 9 ,x) ,store))))
401 (nth 9 x)) 407 (nth 9 x))
402 408
403(defun cl-caaar (x) 409(defun cl-caaar (x)
@@ -612,6 +618,108 @@ If ALIST is non-nil, the new pairs are prepended to it."
612 (nconc (cl-mapcar 'cons keys values) alist)) 618 (nconc (cl-mapcar 'cons keys values) alist))
613 619
614 620
621;;; Generalized variables.
622
623;; These used to be in cl-macs.el since all macros that use them (like setf)
624;; were autoloaded from cl-macs.el. But now that setf, push, and pop are in
625;; core Elisp, they need to either be right here or be autoloaded via
626;; cl-loaddefs.el, which is more trouble than it is worth.
627
628;; Some more Emacs-related place types.
629(gv-define-simple-setter buffer-file-name set-visited-file-name t)
630(gv-define-setter buffer-modified-p (flag &optional buf)
631 `(with-current-buffer ,buf
632 (set-buffer-modified-p ,flag)))
633(gv-define-simple-setter buffer-name rename-buffer t)
634(gv-define-setter buffer-string (store)
635 `(progn (erase-buffer) (insert ,store)))
636(gv-define-simple-setter buffer-substring cl--set-buffer-substring)
637(gv-define-simple-setter current-buffer set-buffer)
638(gv-define-simple-setter current-case-table set-case-table)
639(gv-define-simple-setter current-column move-to-column t)
640(gv-define-simple-setter current-global-map use-global-map t)
641(gv-define-setter current-input-mode (store)
642 `(progn (apply #'set-input-mode ,store) ,store))
643(gv-define-simple-setter current-local-map use-local-map t)
644(gv-define-simple-setter current-window-configuration
645 set-window-configuration t)
646(gv-define-simple-setter default-file-modes set-default-file-modes t)
647(gv-define-simple-setter documentation-property put)
648(gv-define-setter face-background (x f &optional s)
649 `(set-face-background ,f ,x ,s))
650(gv-define-setter face-background-pixmap (x f &optional s)
651 `(set-face-background-pixmap ,f ,x ,s))
652(gv-define-setter face-font (x f &optional s) `(set-face-font ,f ,x ,s))
653(gv-define-setter face-foreground (x f &optional s)
654 `(set-face-foreground ,f ,x ,s))
655(gv-define-setter face-underline-p (x f &optional s)
656 `(set-face-underline-p ,f ,x ,s))
657(gv-define-simple-setter file-modes set-file-modes t)
658(gv-define-simple-setter frame-height set-screen-height t)
659(gv-define-simple-setter frame-parameters modify-frame-parameters t)
660(gv-define-simple-setter frame-visible-p cl--set-frame-visible-p)
661(gv-define-simple-setter frame-width set-screen-width t)
662(gv-define-simple-setter getenv setenv t)
663(gv-define-simple-setter get-register set-register)
664(gv-define-simple-setter global-key-binding global-set-key)
665(gv-define-simple-setter local-key-binding local-set-key)
666(gv-define-simple-setter mark set-mark t)
667(gv-define-simple-setter mark-marker set-mark t)
668(gv-define-simple-setter marker-position set-marker t)
669(gv-define-setter mouse-position (store scr)
670 `(set-mouse-position ,scr (car ,store) (cadr ,store)
671 (cddr ,store)))
672(gv-define-simple-setter point goto-char)
673(gv-define-simple-setter point-marker goto-char t)
674(gv-define-setter point-max (store)
675 `(progn (narrow-to-region (point-min) ,store) ,store))
676(gv-define-setter point-min (store)
677 `(progn (narrow-to-region ,store (point-max)) ,store))
678(gv-define-setter read-mouse-position (store scr)
679 `(set-mouse-position ,scr (car ,store) (cdr ,store)))
680(gv-define-simple-setter screen-height set-screen-height t)
681(gv-define-simple-setter screen-width set-screen-width t)
682(gv-define-simple-setter selected-window select-window)
683(gv-define-simple-setter selected-screen select-screen)
684(gv-define-simple-setter selected-frame select-frame)
685(gv-define-simple-setter standard-case-table set-standard-case-table)
686(gv-define-simple-setter syntax-table set-syntax-table)
687(gv-define-simple-setter visited-file-modtime set-visited-file-modtime t)
688(gv-define-setter window-height (store)
689 `(progn (enlarge-window (- ,store (window-height))) ,store))
690(gv-define-setter window-width (store)
691 `(progn (enlarge-window (- ,store (window-width)) t) ,store))
692(gv-define-simple-setter x-get-secondary-selection x-own-secondary-selection t)
693(gv-define-simple-setter x-get-selection x-own-selection t)
694
695;; More complex setf-methods.
696
697;; This is a hack that allows (setf (eq a 7) B) to mean either
698;; (setq a 7) or (setq a nil) depending on whether B is nil or not.
699;; This is useful when you have control over the PLACE but not over
700;; the VALUE, as is the case in define-minor-mode's :variable.
701;; It turned out that :variable needed more flexibility anyway, so
702;; this doesn't seem too useful now.
703(gv-define-expander eq
704 (lambda (do place val)
705 (gv-letplace (getter setter) place
706 (macroexp-let2 nil val val
707 (funcall do `(eq ,getter ,val)
708 (lambda (v)
709 `(cond
710 (,v ,(funcall setter val))
711 ((eq ,getter ,val) ,(funcall setter `(not ,val))))))))))
712
713(gv-define-expander substring
714 (lambda (do place from &optional to)
715 (gv-letplace (getter setter) place
716 (macroexp-let2 nil start from
717 (macroexp-let2 nil end to
718 (funcall do `(substring ,getter ,start ,end)
719 (lambda (v)
720 (funcall setter `(cl--set-substring
721 ,getter ,start ,end ,v)))))))))
722
615;;; Miscellaneous. 723;;; Miscellaneous.
616 724
617;;;###autoload 725;;;###autoload
diff --git a/lisp/emacs-lisp/cl-loaddefs.el b/lisp/emacs-lisp/cl-loaddefs.el
index 220715e6a9b..79f4d775e1a 100644
--- a/lisp/emacs-lisp/cl-loaddefs.el
+++ b/lisp/emacs-lisp/cl-loaddefs.el
@@ -11,7 +11,7 @@
11;;;;;; cl--set-frame-visible-p cl--map-overlays cl--map-intervals 11;;;;;; cl--set-frame-visible-p cl--map-overlays cl--map-intervals
12;;;;;; cl--map-keymap-recursively cl-notevery cl-notany cl-every 12;;;;;; cl--map-keymap-recursively cl-notevery cl-notany cl-every
13;;;;;; cl-some cl-mapcon cl-mapcan cl-mapl cl-maplist cl-map cl--mapcar-many 13;;;;;; cl-some cl-mapcon cl-mapcan cl-mapl cl-maplist cl-map cl--mapcar-many
14;;;;;; cl-equalp cl-coerce) "cl-extra" "cl-extra.el" "edc8a08741d81c74be36b27664d3555a") 14;;;;;; cl-equalp cl-coerce) "cl-extra" "cl-extra.el" "25963dec757a527e3be3ba7f7abc49ee")
15;;; Generated autoloads from cl-extra.el 15;;; Generated autoloads from cl-extra.el
16 16
17(autoload 'cl-coerce "cl-extra" "\ 17(autoload 'cl-coerce "cl-extra" "\
@@ -265,7 +265,7 @@ Remove from SYMBOL's plist the property PROPNAME and its value.
265;;;;;; cl-return cl-block cl-etypecase cl-typecase cl-ecase cl-case 265;;;;;; cl-return cl-block cl-etypecase cl-typecase cl-ecase cl-case
266;;;;;; cl-load-time-value cl-eval-when cl-destructuring-bind cl-function 266;;;;;; cl-load-time-value cl-eval-when cl-destructuring-bind cl-function
267;;;;;; cl-defmacro cl-defun cl-gentemp cl-gensym) "cl-macs" "cl-macs.el" 267;;;;;; cl-defmacro cl-defun cl-gentemp cl-gensym) "cl-macs" "cl-macs.el"
268;;;;;; "e37cb1001378ce1d677b67760fb6994b") 268;;;;;; "66d8d151a97f91a79ebe3d1a9d699483")
269;;; Generated autoloads from cl-macs.el 269;;; Generated autoloads from cl-macs.el
270 270
271(autoload 'cl-gensym "cl-macs" "\ 271(autoload 'cl-gensym "cl-macs" "\
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index 234879c9cc3..d4bd73827d2 100644
--- a/lisp/emacs-lisp/cl-macs.el
+++ b/lisp/emacs-lisp/cl-macs.el
@@ -110,20 +110,6 @@
110(defun cl--const-expr-val (x) 110(defun cl--const-expr-val (x)
111 (and (macroexp-const-p x) (if (consp x) (nth 1 x) x))) 111 (and (macroexp-const-p x) (if (consp x) (nth 1 x) x)))
112 112
113(defun cl-expr-access-order (x v)
114 ;; This apparently tries to return nil iff the expression X evaluates
115 ;; the variables V in the same order as they appear in V (so as to
116 ;; be able to replace those vars with the expressions they're bound
117 ;; to).
118 ;; FIXME: This is very naive, it doesn't even check to see if those
119 ;; variables appear more than once.
120 (if (macroexp-const-p x) v
121 (if (consp x)
122 (progn
123 (while (setq x (cdr x)) (setq v (cl-expr-access-order (car x) v)))
124 v)
125 (if (eq x (car v)) (cdr v) '(t)))))
126
127(defun cl--expr-contains (x y) 113(defun cl--expr-contains (x y)
128 "Count number of times X refers to Y. Return nil for 0 times." 114 "Count number of times X refers to Y. Return nil for 0 times."
129 ;; FIXME: This is naive, and it will cl-count Y as referred twice in 115 ;; FIXME: This is naive, and it will cl-count Y as referred twice in
@@ -1489,30 +1475,9 @@ An implicit nil block is established around the loop.
1489 1475
1490\(fn (VAR LIST [RESULT]) BODY...)" 1476\(fn (VAR LIST [RESULT]) BODY...)"
1491 (declare (debug ((symbolp form &optional form) cl-declarations body))) 1477 (declare (debug ((symbolp form &optional form) cl-declarations body)))
1492 (let ((temp (make-symbol "--cl-dolist-temp--"))) 1478 `(cl-block nil
1493 ;; FIXME: Copy&pasted from subr.el. 1479 (,(if (eq 'cl-dolist (symbol-function 'dolist)) 'cl--dolist 'dolist)
1494 `(cl-block nil 1480 ,spec ,@body)))
1495 ;; This is not a reliable test, but it does not matter because both
1496 ;; semantics are acceptable, tho one is slightly faster with dynamic
1497 ;; scoping and the other is slightly faster (and has cleaner semantics)
1498 ;; with lexical scoping.
1499 ,(if lexical-binding
1500 `(let ((,temp ,(nth 1 spec)))
1501 (while ,temp
1502 (let ((,(car spec) (car ,temp)))
1503 ,@body
1504 (setq ,temp (cdr ,temp))))
1505 ,@(if (cdr (cdr spec))
1506 ;; FIXME: This let often leads to "unused var" warnings.
1507 `((let ((,(car spec) nil)) ,@(cdr (cdr spec))))))
1508 `(let ((,temp ,(nth 1 spec))
1509 ,(car spec))
1510 (while ,temp
1511 (setq ,(car spec) (car ,temp))
1512 ,@body
1513 (setq ,temp (cdr ,temp)))
1514 ,@(if (cdr (cdr spec))
1515 `((setq ,(car spec) nil) ,@(cddr spec))))))))
1516 1481
1517;;;###autoload 1482;;;###autoload
1518(defmacro cl-dotimes (spec &rest body) 1483(defmacro cl-dotimes (spec &rest body)
@@ -1523,30 +1488,9 @@ nil.
1523 1488
1524\(fn (VAR COUNT [RESULT]) BODY...)" 1489\(fn (VAR COUNT [RESULT]) BODY...)"
1525 (declare (debug cl-dolist)) 1490 (declare (debug cl-dolist))
1526 (let ((temp (make-symbol "--cl-dotimes-temp--")) 1491 `(cl-block nil
1527 (end (nth 1 spec))) 1492 (,(if (eq 'cl-dotimes (symbol-function 'dotimes)) 'cl--dotimes 'dotimes)
1528 ;; FIXME: Copy&pasted from subr.el. 1493 ,spec ,@body)))
1529 `(cl-block nil
1530 ;; This is not a reliable test, but it does not matter because both
1531 ;; semantics are acceptable, tho one is slightly faster with dynamic
1532 ;; scoping and the other has cleaner semantics.
1533 ,(if lexical-binding
1534 (let ((counter '--dotimes-counter--))
1535 `(let ((,temp ,end)
1536 (,counter 0))
1537 (while (< ,counter ,temp)
1538 (let ((,(car spec) ,counter))
1539 ,@body)
1540 (setq ,counter (1+ ,counter)))
1541 ,@(if (cddr spec)
1542 ;; FIXME: This let often leads to "unused var" warnings.
1543 `((let ((,(car spec) ,counter)) ,@(cddr spec))))))
1544 `(let ((,temp ,end)
1545 (,(car spec) 0))
1546 (while (< ,(car spec) ,temp)
1547 ,@body
1548 (cl-incf ,(car spec)))
1549 ,@(cdr (cdr spec)))))))
1550 1494
1551;;;###autoload 1495;;;###autoload
1552(defmacro cl-do-symbols (spec &rest body) 1496(defmacro cl-do-symbols (spec &rest body)
@@ -1730,7 +1674,7 @@ by EXPANSION, and (setq NAME ...) will act like (setf EXPANSION ...).
1730 (declare (indent 1) (debug ((&rest (symbol sexp)) cl-declarations body))) 1674 (declare (indent 1) (debug ((&rest (symbol sexp)) cl-declarations body)))
1731 (cond 1675 (cond
1732 ((cdr bindings) 1676 ((cdr bindings)
1733 `(cl-symbol-macrolet (,(car bindings)) 1677 `(cl-symbol-macrolet (,(car bindings))
1734 (cl-symbol-macrolet ,(cdr bindings) ,@body))) 1678 (cl-symbol-macrolet ,(cdr bindings) ,@body)))
1735 ((null bindings) (macroexp-progn body)) 1679 ((null bindings) (macroexp-progn body))
1736 (t 1680 (t
@@ -1740,8 +1684,8 @@ by EXPANSION, and (setq NAME ...) will act like (setf EXPANSION ...).
1740 (fset 'macroexpand #'cl--sm-macroexpand) 1684 (fset 'macroexpand #'cl--sm-macroexpand)
1741 ;; FIXME: For N bindings, this will traverse `body' N times! 1685 ;; FIXME: For N bindings, this will traverse `body' N times!
1742 (macroexpand-all (cons 'progn body) 1686 (macroexpand-all (cons 'progn body)
1743 (cons (list (symbol-name (caar bindings)) 1687 (cons (list (symbol-name (caar bindings))
1744 (cl-cadar bindings)) 1688 (cl-cadar bindings))
1745 macroexpand-all-environment))) 1689 macroexpand-all-environment)))
1746 (fset 'macroexpand previous-macroexpand)))))) 1690 (fset 'macroexpand previous-macroexpand))))))
1747 1691
@@ -1864,130 +1808,6 @@ See Info node `(cl)Declarations' for details."
1864 1808
1865 1809
1866 1810
1867;;; Generalized variables.
1868
1869;;; Some standard place types from Common Lisp.
1870(gv-define-setter cl-get (store x y &optional d) `(put ,x ,y ,store))
1871(gv-define-setter cl-subseq (new seq start &optional end)
1872 `(progn (cl-replace ,seq ,new :start1 ,start :end1 ,end) ,new))
1873
1874;;; Various car/cdr aliases. Note that `cadr' is handled specially.
1875(gv-define-setter cl-fourth (store x) `(setcar (cl-cdddr ,x) ,store))
1876(gv-define-setter cl-fifth (store x) `(setcar (nthcdr 4 ,x) ,store))
1877(gv-define-setter cl-sixth (store x) `(setcar (nthcdr 5 ,x) ,store))
1878(gv-define-setter cl-seventh (store x) `(setcar (nthcdr 6 ,x) ,store))
1879(gv-define-setter cl-eighth (store x) `(setcar (nthcdr 7 ,x) ,store))
1880(gv-define-setter cl-ninth (store x) `(setcar (nthcdr 8 ,x) ,store))
1881(gv-define-setter cl-tenth (store x) `(setcar (nthcdr 9 ,x) ,store))
1882
1883;;; Some more Emacs-related place types.
1884(gv-define-simple-setter buffer-file-name set-visited-file-name t)
1885(gv-define-setter buffer-modified-p (flag &optional buf)
1886 `(with-current-buffer ,buf
1887 (set-buffer-modified-p ,flag)))
1888(gv-define-simple-setter buffer-name rename-buffer t)
1889(gv-define-setter buffer-string (store)
1890 `(progn (erase-buffer) (insert ,store)))
1891(gv-define-simple-setter buffer-substring cl--set-buffer-substring)
1892(gv-define-simple-setter current-buffer set-buffer)
1893(gv-define-simple-setter current-case-table set-case-table)
1894(gv-define-simple-setter current-column move-to-column t)
1895(gv-define-simple-setter current-global-map use-global-map t)
1896(gv-define-setter current-input-mode (store)
1897 `(progn (apply #'set-input-mode ,store) ,store))
1898(gv-define-simple-setter current-local-map use-local-map t)
1899(gv-define-simple-setter current-window-configuration set-window-configuration t)
1900(gv-define-simple-setter default-file-modes set-default-file-modes t)
1901(gv-define-simple-setter documentation-property put)
1902(gv-define-setter face-background (x f &optional s) `(set-face-background ,f ,x ,s))
1903(gv-define-setter face-background-pixmap (x f &optional s)
1904 `(set-face-background-pixmap ,f ,x ,s))
1905(gv-define-setter face-font (x f &optional s) `(set-face-font ,f ,x ,s))
1906(gv-define-setter face-foreground (x f &optional s) `(set-face-foreground ,f ,x ,s))
1907(gv-define-setter face-underline-p (x f &optional s)
1908 `(set-face-underline-p ,f ,x ,s))
1909(gv-define-simple-setter file-modes set-file-modes t)
1910(gv-define-simple-setter frame-height set-screen-height t)
1911(gv-define-simple-setter frame-parameters modify-frame-parameters t)
1912(gv-define-simple-setter frame-visible-p cl--set-frame-visible-p)
1913(gv-define-simple-setter frame-width set-screen-width t)
1914(gv-define-simple-setter getenv setenv t)
1915(gv-define-simple-setter get-register set-register)
1916(gv-define-simple-setter global-key-binding global-set-key)
1917(gv-define-simple-setter local-key-binding local-set-key)
1918(gv-define-simple-setter mark set-mark t)
1919(gv-define-simple-setter mark-marker set-mark t)
1920(gv-define-simple-setter marker-position set-marker t)
1921(gv-define-setter mouse-position (store scr)
1922 `(set-mouse-position ,scr (car ,store) (cadr ,store)
1923 (cddr ,store)))
1924(gv-define-simple-setter point goto-char)
1925(gv-define-simple-setter point-marker goto-char t)
1926(gv-define-setter point-max (store)
1927 `(progn (narrow-to-region (point-min) ,store) ,store))
1928(gv-define-setter point-min (store)
1929 `(progn (narrow-to-region ,store (point-max)) ,store))
1930(gv-define-setter read-mouse-position (store scr)
1931 `(set-mouse-position ,scr (car ,store) (cdr ,store)))
1932(gv-define-simple-setter screen-height set-screen-height t)
1933(gv-define-simple-setter screen-width set-screen-width t)
1934(gv-define-simple-setter selected-window select-window)
1935(gv-define-simple-setter selected-screen select-screen)
1936(gv-define-simple-setter selected-frame select-frame)
1937(gv-define-simple-setter standard-case-table set-standard-case-table)
1938(gv-define-simple-setter syntax-table set-syntax-table)
1939(gv-define-simple-setter visited-file-modtime set-visited-file-modtime t)
1940(gv-define-setter window-height (store)
1941 `(progn (enlarge-window (- ,store (window-height))) ,store))
1942(gv-define-setter window-width (store)
1943 `(progn (enlarge-window (- ,store (window-width)) t) ,store))
1944(gv-define-simple-setter x-get-secondary-selection x-own-secondary-selection t)
1945(gv-define-simple-setter x-get-selection x-own-selection t)
1946
1947;;; More complex setf-methods.
1948
1949;; This is a hack that allows (setf (eq a 7) B) to mean either
1950;; (setq a 7) or (setq a nil) depending on whether B is nil or not.
1951;; This is useful when you have control over the PLACE but not over
1952;; the VALUE, as is the case in define-minor-mode's :variable.
1953;; It turned out that :variable needed more flexibility anyway, so
1954;; this doesn't seem too useful now.
1955(gv-define-expander eq
1956 (lambda (do place val)
1957 (gv-letplace (getter setter) place
1958 (macroexp-let2 nil val val
1959 (funcall do `(eq ,getter ,val)
1960 (lambda (v)
1961 `(cond
1962 (,v ,(funcall setter val))
1963 ((eq ,getter ,val) ,(funcall setter `(not ,val))))))))))
1964
1965(gv-define-expander nthcdr
1966 (lambda (do n place)
1967 (macroexp-let2 nil idx n
1968 (gv-letplace (getter setter) place
1969 (funcall do `(nthcdr ,idx ,getter)
1970 (lambda (v) `(if (<= ,idx 0) ,(funcall setter v)
1971 (setcdr (nthcdr (1- ,idx) ,getter) ,v))))))))
1972
1973(gv-define-expander cl-getf
1974 (lambda (do place tag &optional def)
1975 (gv-letplace (getter setter) place
1976 (macroexp-let2 nil k tag
1977 (macroexp-let2 nil d def
1978 (funcall do `(cl-getf ,getter ,k ,d)
1979 (lambda (v) (funcall setter `(cl--set-getf ,getter ,k ,v)))))))))
1980
1981(gv-define-expander substring
1982 (lambda (do place from &optional to)
1983 (gv-letplace (getter setter) place
1984 (macroexp-let2 nil start from
1985 (macroexp-let2 nil end to
1986 (funcall do `(substring ,getter ,start ,end)
1987 (lambda (v)
1988 (funcall setter `(cl--set-substring
1989 ,getter ,start ,end ,v)))))))))
1990
1991;;; The standard modify macros. 1811;;; The standard modify macros.
1992 1812
1993;; `setf' is now part of core Elisp, defined in gv.el. 1813;; `setf' is now part of core Elisp, defined in gv.el.
@@ -2571,8 +2391,6 @@ surrounded by (cl-block NAME ...).
2571 2391
2572 2392
2573;; Compile-time optimizations for some functions defined in this package. 2393;; Compile-time optimizations for some functions defined in this package.
2574;; Note that cl.el arranges to force cl-macs to be loaded at compile-time,
2575;; mainly to make sure these macros will be present.
2576 2394
2577(defun cl--compiler-macro-member (form a list &rest keys) 2395(defun cl--compiler-macro-member (form a list &rest keys)
2578 (let ((test (and (= (length keys) 2) (eq (car keys) :test) 2396 (let ((test (and (= (length keys) 2) (eq (car keys) :test)
diff --git a/lisp/emacs-lisp/cl.el b/lisp/emacs-lisp/cl.el
index c7a48c500c0..b17d6f4e671 100644
--- a/lisp/emacs-lisp/cl.el
+++ b/lisp/emacs-lisp/cl.el
@@ -107,6 +107,14 @@
107 )) 107 ))
108 (defvaralias var (intern (format "cl-%s" var)))) 108 (defvaralias var (intern (format "cl-%s" var))))
109 109
110;; Before overwriting subr.el's `dotimes' and `dolist', let's remember
111;; them under a different name, so we can use them in our implementation
112;; of `dotimes' and `dolist'.
113(unless (fboundp 'cl--dotimes)
114 (defalias 'cl--dotimes (symbol-function 'dotimes) "The non-CL `dotimes'."))
115(unless (fboundp 'cl--dolist)
116 (defalias 'cl--dolist (symbol-function 'dolist) "The non-CL `dolist'."))
117
110(dolist (fun '( 118(dolist (fun '(
111 (get* . cl-get) 119 (get* . cl-get)
112 (random* . cl-random) 120 (random* . cl-random)
@@ -501,6 +509,10 @@ Unlike `flet', this macro is fully compliant with the Common Lisp standard.
501;; not 100% compatible: not worth the trouble to add them to cl-lib.el, but we 509;; not 100% compatible: not worth the trouble to add them to cl-lib.el, but we
502;; still to support old users of cl.el. 510;; still to support old users of cl.el.
503 511
512;; FIXME: `letf' is unsatisfactory because it does not really "restore" the
513;; previous state. If the getter/setter loses information, that info is
514;; not recovered.
515
504(defun cl--letf (bindings simplebinds binds body) 516(defun cl--letf (bindings simplebinds binds body)
505 ;; It's not quite clear what the semantics of let! should be. 517 ;; It's not quite clear what the semantics of let! should be.
506 ;; E.g. in (let! ((PLACE1 VAL1) (PLACE2 VAL2)) BODY), while it's clear 518 ;; E.g. in (let! ((PLACE1 VAL1) (PLACE2 VAL2)) BODY), while it's clear
@@ -581,7 +593,9 @@ the PLACE is not modified before executing BODY.
581 (declare (indent 1) (debug letf)) 593 (declare (indent 1) (debug letf))
582 (cl--letf* bindings body)) 594 (cl--letf* bindings body))
583 595
584(defun cl--gv-adapt (cl-gv do) ;FIXME: needed during setf expansion! 596(defun cl--gv-adapt (cl-gv do)
597 ;; This function is used by all .elc files that use define-setf-expander and
598 ;; were compiled with Emacs>=24.2.
585 (let ((vars (nth 0 cl-gv)) 599 (let ((vars (nth 0 cl-gv))
586 (vals (nth 1 cl-gv)) 600 (vals (nth 1 cl-gv))
587 (binds ()) 601 (binds ())
@@ -774,7 +788,5 @@ from ARGLIST using FUNC: (define-modify-macro incf (&optional (n 1)) +)"
774 ,store))) 788 ,store)))
775 (list accessor temp)))) 789 (list accessor temp))))
776 790
777;; FIXME: More candidates: define-modify-macro, define-setf-expander.
778
779(provide 'cl) 791(provide 'cl)
780;;; cl.el ends here 792;;; cl.el ends here
diff --git a/lisp/emacs-lisp/gv.el b/lisp/emacs-lisp/gv.el
index ed7c6ed1d9d..147ae5d4870 100644
--- a/lisp/emacs-lisp/gv.el
+++ b/lisp/emacs-lisp/gv.el
@@ -53,12 +53,6 @@
53;; `gv-letplace' macro) is actually much easier and more elegant than the old 53;; `gv-letplace' macro) is actually much easier and more elegant than the old
54;; approach which is clunky and often leads to unreadable code. 54;; approach which is clunky and often leads to unreadable code.
55 55
56;; FIXME: `let!' is unsatisfactory because it does not really "restore" the
57;; previous state. If the getter/setter loses information, that info is
58;; not recovered.
59
60;; FIXME: Add to defun-declarations-alist.
61
62;; Food for thought: the syntax of places does not actually conflict with the 56;; Food for thought: the syntax of places does not actually conflict with the
63;; pcase patterns. The `cons' gv works just like a `(,a . ,b) pcase 57;; pcase patterns. The `cons' gv works just like a `(,a . ,b) pcase
64;; pattern, and actually the `logand' gv is even closer since it should 58;; pattern, and actually the `logand' gv is even closer since it should
@@ -91,6 +85,13 @@ DO must return an Elisp expression."
91 (funcall do place (lambda (v) `(setq ,place ,v))) 85 (funcall do place (lambda (v) `(setq ,place ,v)))
92 (let* ((head (car place)) 86 (let* ((head (car place))
93 (gf (get head 'gv-expander))) 87 (gf (get head 'gv-expander)))
88 ;; Autoload the head, if applicable, since that might define
89 ;; `gv-expander'.
90 (when (and (null gf) (fboundp head)
91 (eq 'autoload (car-safe (symbol-function head))))
92 (with-demoted-errors
93 (load (nth 1 (symbol-function head)) 'noerror 'nomsg)
94 (setq gf (get head 'gv-expander))))
94 (if gf (apply gf do (cdr place)) 95 (if gf (apply gf do (cdr place))
95 (let ((me (macroexpand place ;FIXME: expand one step at a time! 96 (let ((me (macroexpand place ;FIXME: expand one step at a time!
96 ;; (append macroexpand-all-environment 97 ;; (append macroexpand-all-environment
@@ -139,23 +140,30 @@ arguments as NAME. DO is a function as defined in `gv-get'."
139 ;; cleanly without affecting the running Emacs. 140 ;; cleanly without affecting the running Emacs.
140 `(eval-and-compile (put ',name 'gv-expander ,handler))) 141 `(eval-and-compile (put ',name 'gv-expander ,handler)))
141 142
142;; (eval-and-compile 143;;;###autoload
143;; (defun gv--defun-declaration (name args handler) 144(defun gv--defun-declaration (symbol name args handler &optional fix)
144;; (pcase handler 145 `(progn
145;; (`(lambda (,do) . ,body) 146 ;; No need to autoload this part, since gv-get will auto-load the
146;; `(gv-define-expander ,name (lambda (,do ,@args) ,@body))) 147 ;; function's definition before checking the `gv-expander' property.
147;; ;; (`(expand ,expander) `(gv-define-expand ,name ,expander)) 148 :autoload-end
148;; ;; FIXME: If `setter' is a lambda, give it a name rather 149 ,(pcase (cons symbol handler)
149;; ;; than duplicate it at each setf use. 150 (`(gv-expander . (lambda (,do) . ,body))
150;; (`(setter ,setter) `(gv-define-simple-setter ,name ,setter)) 151 `(gv-define-expander ,name (lambda (,do ,@args) ,@body)))
151;; (`(setter (,arg) . ,body) 152 (`(gv-expander . ,(pred symbolp))
152;; `(gv-define-setter ,name (,arg ,@args) ,@body)) 153 `(gv-define-expander ,name #',handler))
153;; ;; FIXME: Should we prefer gv-define-simple-setter in this case? 154 (`(gv-setter . (lambda (,store) . ,body))
154;; ;;((pred symbolp) `(gv-define-expander ,name #',handler)) 155 `(gv-define-setter ,name (,store ,@args) ,@body))
155;; (_ (message "Unknown gv-expander declaration %S" handler) nil))) 156 (`(gv-setter . ,(pred symbolp))
156 157 `(gv-define-simple-setter ,name ,handler ,fix))
157;; (push `(gv-expander ,#'gv--defun-declaration) defun-declarations-alist) 158 ;; (`(expand ,expander) `(gv-define-expand ,name ,expander))
158;; ) 159 (_ (message "Unknown %s declaration %S" symbol handler) nil))))
160
161;;;###autoload
162(push `(gv-expander ,(apply-partially #'gv--defun-declaration 'gv-expander))
163 defun-declarations-alist)
164;;;###autoload
165(push `(gv-setter ,(apply-partially #'gv--defun-declaration 'gv-setter))
166 defun-declarations-alist)
159 167
160;; (defmacro gv-define-expand (name expander) 168;; (defmacro gv-define-expand (name expander)
161;; "Use EXPANDER to handle NAME as a generalized var. 169;; "Use EXPANDER to handle NAME as a generalized var.
@@ -212,24 +220,6 @@ so as to preserve the semantics of `setf'."
212 `(gv-define-setter ,name (val &rest args) 220 `(gv-define-setter ,name (val &rest args)
213 ,(if fix-return `(list 'prog1 val ,set-call) set-call)))) 221 ,(if fix-return `(list 'prog1 val ,set-call) set-call))))
214 222
215;;; CL compatibility.
216
217(defmacro gv-define-modify-macro (name arglist func &optional doc)
218 (let* ((args (copy-sequence arglist))
219 (rest (memq '&rest args)))
220 (setq args (delq '&optional (delq '&rest args)))
221 `(defmacro ,name (place ,@arglist)
222 ,doc
223 (gv-letplace (getter setter) place
224 (macroexp-let2 nil v
225 ,(list '\`
226 (append (list func ',getter)
227 (mapcar (lambda (arg) (list '\, arg)) args)
228 (if rest (list (list '\,@ (cadr rest))))))
229 (funcall setter v))))))
230
231(gv-define-simple-setter gv--tree-get gv--tree-set)
232
233;;; Typical operations on generalized variables. 223;;; Typical operations on generalized variables.
234 224
235;;;###autoload 225;;;###autoload
@@ -251,32 +241,35 @@ The return value is the last VAL in the list.
251 (while args (push `(setf ,(pop args) ,(pop args)) sets)) 241 (while args (push `(setf ,(pop args) ,(pop args)) sets))
252 (cons 'progn (nreverse sets))))) 242 (cons 'progn (nreverse sets)))))
253 243
254(defmacro gv-pushnew! (val place) 244;; (defmacro gv-pushnew! (val place)
255 "Like `gv-push!' but only adds VAL if it's not yet in PLACE. 245;; "Like `gv-push!' but only adds VAL if it's not yet in PLACE.
256Presence is checked with `member'. 246;; Presence is checked with `member'.
257The return value is unspecified." 247;; The return value is unspecified."
258 (declare (debug (form gv-place))) 248;; (declare (debug (form gv-place)))
259 (macroexp-let2 macroexp-copyable-p v val 249;; (macroexp-let2 macroexp-copyable-p v val
260 (gv-letplace (getter setter) place 250;; (gv-letplace (getter setter) place
261 `(if (member ,v ,getter) nil 251;; `(if (member ,v ,getter) nil
262 ,(funcall setter `(cons ,v ,getter)))))) 252;; ,(funcall setter `(cons ,v ,getter))))))
263 253
264(defmacro gv-inc! (place &optional val) 254;; (defmacro gv-inc! (place &optional val)
265 "Increment PLACE by VAL (default to 1)." 255;; "Increment PLACE by VAL (default to 1)."
266 (declare (debug (gv-place &optional form))) 256;; (declare (debug (gv-place &optional form)))
267 (gv-letplace (getter setter) place 257;; (gv-letplace (getter setter) place
268 (funcall setter `(+ ,getter ,(or val 1))))) 258;; (funcall setter `(+ ,getter ,(or val 1)))))
269 259
270(defmacro gv-dec! (place &optional val) 260;; (defmacro gv-dec! (place &optional val)
271 "Decrement PLACE by VAL (default to 1)." 261;; "Decrement PLACE by VAL (default to 1)."
272 (declare (debug (gv-place &optional form))) 262;; (declare (debug (gv-place &optional form)))
273 (gv-letplace (getter setter) place 263;; (gv-letplace (getter setter) place
274 (funcall setter `(- ,getter ,(or val 1))))) 264;; (funcall setter `(- ,getter ,(or val 1)))))
275 265
276;; For Edebug, the idea is to let Edebug instrument gv-places just like it does 266;; For Edebug, the idea is to let Edebug instrument gv-places just like it does
277;; for normal expressions, and then give it a gv-expander to DTRT. 267;; for normal expressions, and then give it a gv-expander to DTRT.
278;; Maybe this should really be in edebug.el rather than here. 268;; Maybe this should really be in edebug.el rather than here.
279 269
270;; Autoload this `put' since a user might use C-u C-M-x on an expression
271;; containing a non-trivial `push' even before gv.el was loaded.
272;;;###autoload
280(put 'gv-place 'edebug-form-spec 'edebug-match-form) 273(put 'gv-place 'edebug-form-spec 'edebug-match-form)
281;; CL did the equivalent of: 274;; CL did the equivalent of:
282;;(gv-define-expand edebug-after (lambda (before index place) place)) 275;;(gv-define-expand edebug-after (lambda (before index place) place))
diff --git a/lisp/env.el b/lisp/env.el
index 53922b5e262..d0d8ed0b998 100644
--- a/lisp/env.el
+++ b/lisp/env.el
@@ -34,8 +34,6 @@
34 34
35;;; Code: 35;;; Code:
36 36
37(eval-when-compile (require 'cl))
38
39;; History list for environment variable names. 37;; History list for environment variable names.
40(defvar read-envvar-name-history nil) 38(defvar read-envvar-name-history nil)
41 39
diff --git a/lisp/faces.el b/lisp/faces.el
index 40b45187f6c..68700c2455b 100644
--- a/lisp/faces.el
+++ b/lisp/faces.el
@@ -25,9 +25,6 @@
25 25
26;;; Code: 26;;; Code:
27 27
28(eval-when-compile
29 (require 'cl))
30
31(defcustom term-file-prefix (purecopy "term/") 28(defcustom term-file-prefix (purecopy "term/")
32 "If non-nil, Emacs startup performs terminal-specific initialization. 29 "If non-nil, Emacs startup performs terminal-specific initialization.
33It does this by: (load (concat term-file-prefix (getenv \"TERM\"))) 30It does this by: (load (concat term-file-prefix (getenv \"TERM\")))
@@ -996,28 +993,28 @@ Value is an alist of (NAME . VALUE) if ATTRIBUTE expects a value out
996of a set of discrete values. Value is `integerp' if ATTRIBUTE expects 993of a set of discrete values. Value is `integerp' if ATTRIBUTE expects
997an integer value." 994an integer value."
998 (let ((valid 995 (let ((valid
999 (case attribute 996 (pcase attribute
1000 (:family 997 (`:family
1001 (if (window-system frame) 998 (if (window-system frame)
1002 (mapcar (lambda (x) (cons x x)) 999 (mapcar (lambda (x) (cons x x))
1003 (font-family-list)) 1000 (font-family-list))
1004 ;; Only one font on TTYs. 1001 ;; Only one font on TTYs.
1005 (list (cons "default" "default")))) 1002 (list (cons "default" "default"))))
1006 (:foundry 1003 (`:foundry
1007 (list nil)) 1004 (list nil))
1008 (:width 1005 (`:width
1009 (mapcar #'(lambda (x) (cons (symbol-name (aref x 1)) (aref x 1))) 1006 (mapcar #'(lambda (x) (cons (symbol-name (aref x 1)) (aref x 1)))
1010 font-width-table)) 1007 font-width-table))
1011 (:weight 1008 (`:weight
1012 (mapcar #'(lambda (x) (cons (symbol-name (aref x 1)) (aref x 1))) 1009 (mapcar #'(lambda (x) (cons (symbol-name (aref x 1)) (aref x 1)))
1013 font-weight-table)) 1010 font-weight-table))
1014 (:slant 1011 (`:slant
1015 (mapcar #'(lambda (x) (cons (symbol-name (aref x 1)) (aref x 1))) 1012 (mapcar #'(lambda (x) (cons (symbol-name (aref x 1)) (aref x 1)))
1016 font-slant-table)) 1013 font-slant-table))
1017 (:inverse-video 1014 (`:inverse-video
1018 (mapcar #'(lambda (x) (cons (symbol-name x) x)) 1015 (mapcar #'(lambda (x) (cons (symbol-name x) x))
1019 (internal-lisp-face-attribute-values attribute))) 1016 (internal-lisp-face-attribute-values attribute)))
1020 ((:underline :overline :strike-through :box) 1017 ((or `:underline `:overline `:strike-through `:box)
1021 (if (window-system frame) 1018 (if (window-system frame)
1022 (nconc (mapcar #'(lambda (x) (cons (symbol-name x) x)) 1019 (nconc (mapcar #'(lambda (x) (cons (symbol-name x) x))
1023 (internal-lisp-face-attribute-values attribute)) 1020 (internal-lisp-face-attribute-values attribute))
@@ -1025,12 +1022,12 @@ an integer value."
1025 (defined-colors frame))) 1022 (defined-colors frame)))
1026 (mapcar #'(lambda (x) (cons (symbol-name x) x)) 1023 (mapcar #'(lambda (x) (cons (symbol-name x) x))
1027 (internal-lisp-face-attribute-values attribute)))) 1024 (internal-lisp-face-attribute-values attribute))))
1028 ((:foreground :background) 1025 ((or `:foreground `:background)
1029 (mapcar #'(lambda (c) (cons c c)) 1026 (mapcar #'(lambda (c) (cons c c))
1030 (defined-colors frame))) 1027 (defined-colors frame)))
1031 ((:height) 1028 (`:height
1032 'integerp) 1029 'integerp)
1033 (:stipple 1030 (`:stipple
1034 (and (memq (window-system frame) '(x ns)) ; No stipple on w32 1031 (and (memq (window-system frame) '(x ns)) ; No stipple on w32
1035 (mapcar #'list 1032 (mapcar #'list
1036 (apply #'nconc 1033 (apply #'nconc
@@ -1039,11 +1036,11 @@ an integer value."
1039 (file-directory-p dir) 1036 (file-directory-p dir)
1040 (directory-files dir))) 1037 (directory-files dir)))
1041 x-bitmap-file-path))))) 1038 x-bitmap-file-path)))))
1042 (:inherit 1039 (`:inherit
1043 (cons '("none" . nil) 1040 (cons '("none" . nil)
1044 (mapcar #'(lambda (c) (cons (symbol-name c) c)) 1041 (mapcar #'(lambda (c) (cons (symbol-name c) c))
1045 (face-list)))) 1042 (face-list))))
1046 (t 1043 (_
1047 (error "Internal error"))))) 1044 (error "Internal error")))))
1048 (if (and (listp valid) (not (memq attribute '(:inherit)))) 1045 (if (and (listp valid) (not (memq attribute '(:inherit))))
1049 (nconc (list (cons "unspecified" 'unspecified)) valid) 1046 (nconc (list (cons "unspecified" 'unspecified)) valid)
diff --git a/lisp/files.el b/lisp/files.el
index 857dbc981f0..e19d1d2f16e 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -28,8 +28,6 @@
28 28
29;;; Code: 29;;; Code:
30 30
31(eval-when-compile (require 'cl-lib))
32
33(defvar font-lock-keywords) 31(defvar font-lock-keywords)
34 32
35(defgroup backup nil 33(defgroup backup nil
@@ -6464,19 +6462,19 @@ only these files will be asked to be saved."
6464 "/" 6462 "/"
6465 (substring (car pair) 2))))) 6463 (substring (car pair) 2)))))
6466 (setq file-arg-indices (cdr file-arg-indices)))) 6464 (setq file-arg-indices (cdr file-arg-indices))))
6467 (cl-case method 6465 (pcase method
6468 (identity (car arguments)) 6466 (`identity (car arguments))
6469 (add (concat "/:" (apply operation arguments))) 6467 (`add (concat "/:" (apply operation arguments)))
6470 (insert-file-contents 6468 (`insert-file-contents
6471 (let ((visit (nth 1 arguments))) 6469 (let ((visit (nth 1 arguments)))
6472 (prog1 6470 (prog1
6473 (apply operation arguments) 6471 (apply operation arguments)
6474 (when (and visit buffer-file-name) 6472 (when (and visit buffer-file-name)
6475 (setq buffer-file-name (concat "/:" buffer-file-name)))))) 6473 (setq buffer-file-name (concat "/:" buffer-file-name))))))
6476 (unquote-then-quote 6474 (`unquote-then-quote
6477 (let ((buffer-file-name (substring buffer-file-name 2))) 6475 (let ((buffer-file-name (substring buffer-file-name 2)))
6478 (apply operation arguments))) 6476 (apply operation arguments)))
6479 (t 6477 (_
6480 (apply operation arguments))))) 6478 (apply operation arguments)))))
6481 6479
6482;; Symbolic modes and read-file-modes. 6480;; Symbolic modes and read-file-modes.
diff --git a/lisp/ldefs-boot.el b/lisp/ldefs-boot.el
index 7d63c8c10fd..d39a4b02b32 100644
--- a/lisp/ldefs-boot.el
+++ b/lisp/ldefs-boot.el
@@ -2712,7 +2712,7 @@ Like `bug-reference-mode', but only buttonize in comments and strings.
2712;;;;;; batch-byte-compile-if-not-done display-call-tree byte-compile 2712;;;;;; batch-byte-compile-if-not-done display-call-tree byte-compile
2713;;;;;; compile-defun byte-compile-file byte-recompile-directory 2713;;;;;; compile-defun byte-compile-file byte-recompile-directory
2714;;;;;; byte-force-recompile byte-compile-enable-warning byte-compile-disable-warning) 2714;;;;;; byte-force-recompile byte-compile-enable-warning byte-compile-disable-warning)
2715;;;;;; "bytecomp" "emacs-lisp/bytecomp.el" (20451 21087)) 2715;;;;;; "bytecomp" "emacs-lisp/bytecomp.el" (20452 43334))
2716;;; Generated autoloads from emacs-lisp/bytecomp.el 2716;;; Generated autoloads from emacs-lisp/bytecomp.el
2717(put 'byte-compile-dynamic 'safe-local-variable 'booleanp) 2717(put 'byte-compile-dynamic 'safe-local-variable 'booleanp)
2718(put 'byte-compile-disable-print-circle 'safe-local-variable 'booleanp) 2718(put 'byte-compile-disable-print-circle 'safe-local-variable 'booleanp)
@@ -2978,8 +2978,8 @@ See the documentation for `calculator-mode' for more information.
2978 2978
2979;;;*** 2979;;;***
2980 2980
2981;;;### (autoloads (calendar) "calendar" "calendar/calendar.el" (20432 2981;;;### (autoloads (calendar) "calendar" "calendar/calendar.el" (20452
2982;;;;;; 42254)) 2982;;;;;; 43334))
2983;;; Generated autoloads from calendar/calendar.el 2983;;; Generated autoloads from calendar/calendar.el
2984 2984
2985(autoload 'calendar "calendar" "\ 2985(autoload 'calendar "calendar" "\
@@ -3699,7 +3699,7 @@ See the documentation of `define-ccl-program' for the detail of CCL program.
3699;;;*** 3699;;;***
3700 3700
3701;;;### (autoloads (cconv-closure-convert) "cconv" "emacs-lisp/cconv.el" 3701;;;### (autoloads (cconv-closure-convert) "cconv" "emacs-lisp/cconv.el"
3702;;;;;; (20451 21087)) 3702;;;;;; (20452 43334))
3703;;; Generated autoloads from emacs-lisp/cconv.el 3703;;; Generated autoloads from emacs-lisp/cconv.el
3704 3704
3705(autoload 'cconv-closure-convert "cconv" "\ 3705(autoload 'cconv-closure-convert "cconv" "\
@@ -4121,7 +4121,7 @@ For example, the function `case' has an indent property
4121 4121
4122;;;*** 4122;;;***
4123 4123
4124;;;### (autoloads nil "cl-lib" "emacs-lisp/cl-lib.el" (20451 21087)) 4124;;;### (autoloads nil "cl-lib" "emacs-lisp/cl-lib.el" (20452 55920))
4125;;; Generated autoloads from emacs-lisp/cl-lib.el 4125;;; Generated autoloads from emacs-lisp/cl-lib.el
4126 4126
4127(define-obsolete-variable-alias 'custom-print-functions 'cl-custom-print-functions "24.2") 4127(define-obsolete-variable-alias 'custom-print-functions 'cl-custom-print-functions "24.2")
@@ -6409,7 +6409,7 @@ Optional arguments are passed to `dig-invoke'.
6409;;;*** 6409;;;***
6410 6410
6411;;;### (autoloads (dired-mode dired-noselect dired-other-frame dired-other-window 6411;;;### (autoloads (dired-mode dired-noselect dired-other-frame dired-other-window
6412;;;;;; dired dired-listing-switches) "dired" "dired.el" (20428 57510)) 6412;;;;;; dired dired-listing-switches) "dired" "dired.el" (20452 43334))
6413;;; Generated autoloads from dired.el 6413;;; Generated autoloads from dired.el
6414 6414
6415(defvar dired-listing-switches (purecopy "-al") "\ 6415(defvar dired-listing-switches (purecopy "-al") "\
@@ -7402,13 +7402,14 @@ See `ebnf-style-database' documentation.
7402;;;;;; ebrowse-electric-position-menu ebrowse-forward-in-position-stack 7402;;;;;; ebrowse-electric-position-menu ebrowse-forward-in-position-stack
7403;;;;;; ebrowse-back-in-position-stack ebrowse-tags-search-member-use 7403;;;;;; ebrowse-back-in-position-stack ebrowse-tags-search-member-use
7404;;;;;; ebrowse-tags-query-replace ebrowse-tags-search ebrowse-tags-loop-continue 7404;;;;;; ebrowse-tags-query-replace ebrowse-tags-search ebrowse-tags-loop-continue
7405;;;;;; ebrowse-tags-find-definition-other-frame ebrowse-tags-view-definition-other-frame 7405;;;;;; ebrowse-tags-complete-symbol ebrowse-tags-find-definition-other-frame
7406;;;;;; ebrowse-tags-find-declaration-other-frame ebrowse-tags-find-definition-other-window 7406;;;;;; ebrowse-tags-view-definition-other-frame ebrowse-tags-find-declaration-other-frame
7407;;;;;; ebrowse-tags-view-definition-other-window ebrowse-tags-find-declaration-other-window 7407;;;;;; ebrowse-tags-find-definition-other-window ebrowse-tags-view-definition-other-window
7408;;;;;; ebrowse-tags-find-definition ebrowse-tags-view-definition 7408;;;;;; ebrowse-tags-find-declaration-other-window ebrowse-tags-find-definition
7409;;;;;; ebrowse-tags-find-declaration ebrowse-tags-view-declaration 7409;;;;;; ebrowse-tags-view-definition ebrowse-tags-find-declaration
7410;;;;;; ebrowse-member-mode ebrowse-electric-choose-tree ebrowse-tree-mode) 7410;;;;;; ebrowse-tags-view-declaration ebrowse-member-mode ebrowse-electric-choose-tree
7411;;;;;; "ebrowse" "progmodes/ebrowse.el" (20434 28080)) 7411;;;;;; ebrowse-tree-mode) "ebrowse" "progmodes/ebrowse.el" (20434
7412;;;;;; 28080))
7412;;; Generated autoloads from progmodes/ebrowse.el 7413;;; Generated autoloads from progmodes/ebrowse.el
7413 7414
7414(autoload 'ebrowse-tree-mode "ebrowse" "\ 7415(autoload 'ebrowse-tree-mode "ebrowse" "\
@@ -7483,6 +7484,14 @@ Find definition of member at point in other frame.
7483 7484
7484\(fn)" t nil) 7485\(fn)" t nil)
7485 7486
7487(autoload 'ebrowse-tags-complete-symbol "ebrowse" "\
7488Perform completion on the C++ symbol preceding point.
7489A second call of this function without changing point inserts the next match.
7490A call with prefix PREFIX reads the symbol to insert from the minibuffer with
7491completion.
7492
7493\(fn PREFIX)" t nil)
7494
7486(autoload 'ebrowse-tags-loop-continue "ebrowse" "\ 7495(autoload 'ebrowse-tags-loop-continue "ebrowse" "\
7487Repeat last operation on files in tree. 7496Repeat last operation on files in tree.
7488FIRST-TIME non-nil means this is not a repetition, but the first time. 7497FIRST-TIME non-nil means this is not a repetition, but the first time.
@@ -8770,7 +8779,7 @@ Look at CONFIG and try to expand GROUP.
8770 8779
8771;;;*** 8780;;;***
8772 8781
8773;;;### (autoloads (erc-handle-irc-url erc-tls erc-select-read-args) 8782;;;### (autoloads (erc-handle-irc-url erc-tls erc erc-select-read-args)
8774;;;;;; "erc" "erc/erc.el" (20446 34252)) 8783;;;;;; "erc" "erc/erc.el" (20446 34252))
8775;;; Generated autoloads from erc/erc.el 8784;;; Generated autoloads from erc/erc.el
8776 8785
@@ -8779,6 +8788,29 @@ Prompt the user for values of nick, server, port, and password.
8779 8788
8780\(fn)" nil nil) 8789\(fn)" nil nil)
8781 8790
8791(autoload 'erc "erc" "\
8792ERC is a powerful, modular, and extensible IRC client.
8793This function is the main entry point for ERC.
8794
8795It permits you to select connection parameters, and then starts ERC.
8796
8797Non-interactively, it takes the keyword arguments
8798 (server (erc-compute-server))
8799 (port (erc-compute-port))
8800 (nick (erc-compute-nick))
8801 password
8802 (full-name (erc-compute-full-name)))
8803
8804That is, if called with
8805
8806 (erc :server \"irc.freenode.net\" :full-name \"Harry S Truman\")
8807
8808then the server and full-name will be set to those values, whereas
8809`erc-compute-port', `erc-compute-nick' and `erc-compute-full-name' will
8810be invoked for the values of the other parameters.
8811
8812\(fn &key (server (erc-compute-server)) (port (erc-compute-port)) (nick (erc-compute-nick)) PASSWORD (full-name (erc-compute-full-name)))" t nil)
8813
8782(defalias 'erc-select 'erc) 8814(defalias 'erc-select 'erc)
8783 8815
8784(autoload 'erc-tls "erc" "\ 8816(autoload 'erc-tls "erc" "\
@@ -9242,10 +9274,27 @@ Add a file to `erc-xdcc-files'.
9242;;;*** 9274;;;***
9243 9275
9244;;;### (autoloads (ert-describe-test ert-run-tests-interactively 9276;;;### (autoloads (ert-describe-test ert-run-tests-interactively
9245;;;;;; ert-run-tests-batch-and-exit ert-run-tests-batch) "ert" "emacs-lisp/ert.el" 9277;;;;;; ert-run-tests-batch-and-exit ert-run-tests-batch ert-deftest)
9246;;;;;; (20356 35090)) 9278;;;;;; "ert" "emacs-lisp/ert.el" (20356 35090))
9247;;; Generated autoloads from emacs-lisp/ert.el 9279;;; Generated autoloads from emacs-lisp/ert.el
9248 9280
9281(autoload 'ert-deftest "ert" "\
9282Define NAME (a symbol) as a test.
9283
9284BODY is evaluated as a `progn' when the test is run. It should
9285signal a condition on failure or just return if the test passes.
9286
9287`should', `should-not' and `should-error' are useful for
9288assertions in BODY.
9289
9290Use `ert' to run tests interactively.
9291
9292Tests that are expected to fail can be marked as such
9293using :expected-result. See `ert-test-result-type-p' for a
9294description of valid values for RESULT-TYPE.
9295
9296\(fn NAME () [DOCSTRING] [:expected-result RESULT-TYPE] [:tags '(TAG...)] BODY...)" nil (quote macro))
9297
9249(put 'ert-deftest 'lisp-indent-function 2) 9298(put 'ert-deftest 'lisp-indent-function 2)
9250 9299
9251(put 'ert-info 'lisp-indent-function 1) 9300(put 'ert-info 'lisp-indent-function 1)
@@ -9966,8 +10015,8 @@ Edit the hotlist of directory servers in a specialized buffer.
9966 10015
9967;;;*** 10016;;;***
9968 10017
9969;;;### (autoloads (ewoc-create) "ewoc" "emacs-lisp/ewoc.el" (20451 10018;;;### (autoloads (ewoc-create) "ewoc" "emacs-lisp/ewoc.el" (20452
9970;;;;;; 21087)) 10019;;;;;; 43334))
9971;;; Generated autoloads from emacs-lisp/ewoc.el 10020;;; Generated autoloads from emacs-lisp/ewoc.el
9972 10021
9973(autoload 'ewoc-create "ewoc" "\ 10022(autoload 'ewoc-create "ewoc" "\
@@ -12691,8 +12740,8 @@ it if ARG is omitted or nil.
12691;;;*** 12740;;;***
12692 12741
12693;;;### (autoloads (setf gv-define-simple-setter gv-define-setter 12742;;;### (autoloads (setf gv-define-simple-setter gv-define-setter
12694;;;;;; gv-define-expander gv-letplace gv-get) "gv" "emacs-lisp/gv.el" 12743;;;;;; gv--defun-declaration gv-define-expander gv-letplace gv-get)
12695;;;;;; (20451 34840)) 12744;;;;;; "gv" "emacs-lisp/gv.el" (20452 56419))
12696;;; Generated autoloads from emacs-lisp/gv.el 12745;;; Generated autoloads from emacs-lisp/gv.el
12697 12746
12698(autoload 'gv-get "gv" "\ 12747(autoload 'gv-get "gv" "\
@@ -12732,6 +12781,15 @@ arguments as NAME. DO is a function as defined in `gv-get'.
12732 12781
12733(put 'gv-define-expander 'lisp-indent-function '1) 12782(put 'gv-define-expander 'lisp-indent-function '1)
12734 12783
12784(autoload 'gv--defun-declaration "gv" "\
12785
12786
12787\(fn SYMBOL NAME ARGS HANDLER &optional FIX)" nil nil)
12788
12789(push `(gv-expander ,(apply-partially #'gv--defun-declaration 'gv-expander)) defun-declarations-alist)
12790
12791(push `(gv-setter ,(apply-partially #'gv--defun-declaration 'gv-setter)) defun-declarations-alist)
12792
12735(autoload 'gv-define-setter "gv" "\ 12793(autoload 'gv-define-setter "gv" "\
12736Define a setter method for generalized variable NAME. 12794Define a setter method for generalized variable NAME.
12737This macro is an easy-to-use substitute for `gv-define-expander' that works 12795This macro is an easy-to-use substitute for `gv-define-expander' that works
@@ -12767,6 +12825,8 @@ The return value is the last VAL in the list.
12767 12825
12768\(fn PLACE VAL PLACE VAL ...)" nil t) 12826\(fn PLACE VAL PLACE VAL ...)" nil t)
12769 12827
12828(put 'gv-place 'edebug-form-spec 'edebug-match-form)
12829
12770;;;*** 12830;;;***
12771 12831
12772;;;### (autoloads (handwrite) "handwrite" "play/handwrite.el" (20318 12832;;;### (autoloads (handwrite) "handwrite" "play/handwrite.el" (20318
@@ -14004,11 +14064,96 @@ You may also want to set `hfy-page-header' and `hfy-page-footer'.
14004\(fn SRCDIR DSTDIR &optional F-EXT L-EXT)" t nil) 14064\(fn SRCDIR DSTDIR &optional F-EXT L-EXT)" t nil)
14005 14065
14006;;;*** 14066;;;***
14007
14008;;;***
14009 14067
14010;;;### (autoloads nil "ibuf-macs" "ibuf-macs.el" (20412 11425)) 14068;;;### (autoloads (define-ibuffer-filter define-ibuffer-op define-ibuffer-sorter
14069;;;;;; define-ibuffer-column) "ibuf-macs" "ibuf-macs.el" (20412
14070;;;;;; 11425))
14011;;; Generated autoloads from ibuf-macs.el 14071;;; Generated autoloads from ibuf-macs.el
14072
14073(autoload 'define-ibuffer-column "ibuf-macs" "\
14074Define a column SYMBOL for use with `ibuffer-formats'.
14075
14076BODY will be called with `buffer' bound to the buffer object, and
14077`mark' bound to the current mark on the buffer. The original ibuffer
14078buffer will be bound to `ibuffer-buf'.
14079
14080If NAME is given, it will be used as a title for the column.
14081Otherwise, the title will default to a capitalized version of the
14082SYMBOL's name. PROPS is a plist of additional properties to add to
14083the text, such as `mouse-face'. And SUMMARIZER, if given, is a
14084function which will be passed a list of all the strings in its column;
14085it should return a string to display at the bottom.
14086
14087If HEADER-MOUSE-MAP is given, it will be used as a keymap for the
14088title of the column.
14089
14090Note that this macro expands into a `defun' for a function named
14091ibuffer-make-column-NAME. If INLINE is non-nil, then the form will be
14092inlined into the compiled format versions. This means that if you
14093change its definition, you should explicitly call
14094`ibuffer-recompile-formats'.
14095
14096\(fn SYMBOL (&key NAME INLINE PROPS SUMMARIZER) &rest BODY)" nil (quote macro))
14097
14098(autoload 'define-ibuffer-sorter "ibuf-macs" "\
14099Define a method of sorting named NAME.
14100DOCUMENTATION is the documentation of the function, which will be called
14101`ibuffer-do-sort-by-NAME'.
14102DESCRIPTION is a short string describing the sorting method.
14103
14104For sorting, the forms in BODY will be evaluated with `a' bound to one
14105buffer object, and `b' bound to another. BODY should return a non-nil
14106value if and only if `a' is \"less than\" `b'.
14107
14108\(fn NAME DOCUMENTATION (&key DESCRIPTION) &rest BODY)" nil (quote macro))
14109
14110(autoload 'define-ibuffer-op "ibuf-macs" "\
14111Generate a function which operates on a buffer.
14112OP becomes the name of the function; if it doesn't begin with
14113`ibuffer-do-', then that is prepended to it.
14114When an operation is performed, this function will be called once for
14115each marked buffer, with that buffer current.
14116
14117ARGS becomes the formal parameters of the function.
14118DOCUMENTATION becomes the docstring of the function.
14119INTERACTIVE becomes the interactive specification of the function.
14120MARK describes which type of mark (:deletion, or nil) this operation
14121uses. :deletion means the function operates on buffers marked for
14122deletion, otherwise it acts on normally marked buffers.
14123MODIFIER-P describes how the function modifies buffers. This is used
14124to set the modification flag of the Ibuffer buffer itself. Valid
14125values are:
14126 nil - the function never modifiers buffers
14127 t - the function it always modifies buffers
14128 :maybe - attempt to discover this information by comparing the
14129 buffer's modification flag.
14130DANGEROUS is a boolean which should be set if the user should be
14131prompted before performing this operation.
14132OPSTRING is a string which will be displayed to the user after the
14133operation is complete, in the form:
14134 \"Operation complete; OPSTRING x buffers\"
14135ACTIVE-OPSTRING is a string which will be displayed to the user in a
14136confirmation message, in the form:
14137 \"Really ACTIVE-OPSTRING x buffers?\"
14138COMPLEX means this function is special; see the source code of this
14139macro for exactly what it does.
14140
14141\(fn OP ARGS DOCUMENTATION (&key INTERACTIVE MARK MODIFIER-P DANGEROUS OPSTRING ACTIVE-OPSTRING COMPLEX) &rest BODY)" nil (quote macro))
14142
14143(autoload 'define-ibuffer-filter "ibuf-macs" "\
14144Define a filter named NAME.
14145DOCUMENTATION is the documentation of the function.
14146READER is a form which should read a qualifier from the user.
14147DESCRIPTION is a short string describing the filter.
14148
14149BODY should contain forms which will be evaluated to test whether or
14150not a particular buffer should be displayed or not. The forms in BODY
14151will be evaluated with BUF bound to the buffer object, and QUALIFIER
14152bound to the current value of the filter.
14153
14154\(fn NAME DOCUMENTATION (&key READER DESCRIPTION) &rest BODY)" nil (quote macro))
14155
14156;;;***
14012 14157
14013;;;### (autoloads (ibuffer ibuffer-other-window ibuffer-list-buffers) 14158;;;### (autoloads (ibuffer ibuffer-other-window ibuffer-list-buffers)
14014;;;;;; "ibuffer" "ibuffer.el" (20412 11425)) 14159;;;;;; "ibuffer" "ibuffer.el" (20412 11425))
@@ -14104,8 +14249,8 @@ buffer `*icalendar-errors*'.
14104 14249
14105;;;*** 14250;;;***
14106 14251
14107;;;### (autoloads (icomplete-mode) "icomplete" "icomplete.el" (20318 14252;;;### (autoloads (icomplete-mode) "icomplete" "icomplete.el" (20452
14108;;;;;; 5885)) 14253;;;;;; 44311))
14109;;; Generated autoloads from icomplete.el 14254;;; Generated autoloads from icomplete.el
14110 14255
14111(defvar icomplete-mode nil "\ 14256(defvar icomplete-mode nil "\
@@ -16891,7 +17036,7 @@ A major mode to edit m4 macro files.
16891;;;*** 17036;;;***
16892 17037
16893;;;### (autoloads (macroexpand-all) "macroexp" "emacs-lisp/macroexp.el" 17038;;;### (autoloads (macroexpand-all) "macroexp" "emacs-lisp/macroexp.el"
16894;;;;;; (20451 34676)) 17039;;;;;; (20452 43334))
16895;;; Generated autoloads from emacs-lisp/macroexp.el 17040;;; Generated autoloads from emacs-lisp/macroexp.el
16896 17041
16897(autoload 'macroexpand-all "macroexp" "\ 17042(autoload 'macroexpand-all "macroexp" "\
@@ -21489,7 +21634,7 @@ Check if KEY is in the cache.
21489;;;*** 21634;;;***
21490 21635
21491;;;### (autoloads (pcase-let pcase-let* pcase) "pcase" "emacs-lisp/pcase.el" 21636;;;### (autoloads (pcase-let pcase-let* pcase) "pcase" "emacs-lisp/pcase.el"
21492;;;;;; (20451 34853)) 21637;;;;;; (20452 43334))
21493;;; Generated autoloads from emacs-lisp/pcase.el 21638;;; Generated autoloads from emacs-lisp/pcase.el
21494 21639
21495(autoload 'pcase "pcase" "\ 21640(autoload 'pcase "pcase" "\
@@ -21608,8 +21753,8 @@ Completion for GNU/Linux `mount'.
21608 21753
21609;;;*** 21754;;;***
21610 21755
21611;;;### (autoloads (pcomplete/rpm) "pcmpl-rpm" "pcmpl-rpm.el" (20373 21756;;;### (autoloads (pcomplete/rpm) "pcmpl-rpm" "pcmpl-rpm.el" (20452
21612;;;;;; 41604)) 21757;;;;;; 43334))
21613;;; Generated autoloads from pcmpl-rpm.el 21758;;; Generated autoloads from pcmpl-rpm.el
21614 21759
21615(autoload 'pcomplete/rpm "pcmpl-rpm" "\ 21760(autoload 'pcomplete/rpm "pcmpl-rpm" "\
@@ -23262,7 +23407,8 @@ of each directory.
23262 23407
23263;;;### (autoloads (quickurl-list quickurl-list-mode quickurl-edit-urls 23408;;;### (autoloads (quickurl-list quickurl-list-mode quickurl-edit-urls
23264;;;;;; quickurl-browse-url-ask quickurl-browse-url quickurl-add-url 23409;;;;;; quickurl-browse-url-ask quickurl-browse-url quickurl-add-url
23265;;;;;; quickurl-ask) "quickurl" "net/quickurl.el" (20356 35090)) 23410;;;;;; quickurl-ask quickurl) "quickurl" "net/quickurl.el" (20356
23411;;;;;; 35090))
23266;;; Generated autoloads from net/quickurl.el 23412;;; Generated autoloads from net/quickurl.el
23267 23413
23268(defconst quickurl-reread-hook-postfix "\n;; Local Variables:\n;; eval: (progn (require 'quickurl) (add-hook 'local-write-file-hooks (lambda () (quickurl-read) nil)))\n;; End:\n" "\ 23414(defconst quickurl-reread-hook-postfix "\n;; Local Variables:\n;; eval: (progn (require 'quickurl) (add-hook 'local-write-file-hooks (lambda () (quickurl-read) nil)))\n;; End:\n" "\
@@ -23276,6 +23422,15 @@ To make use of this do something like:
23276 23422
23277in your ~/.emacs (after loading/requiring quickurl).") 23423in your ~/.emacs (after loading/requiring quickurl).")
23278 23424
23425(autoload 'quickurl "quickurl" "\
23426Insert a URL based on LOOKUP.
23427
23428If not supplied LOOKUP is taken to be the word at point in the current
23429buffer, this default action can be modified via
23430`quickurl-grab-lookup-function'.
23431
23432\(fn &optional LOOKUP)" t nil)
23433
23279(autoload 'quickurl-ask "quickurl" "\ 23434(autoload 'quickurl-ask "quickurl" "\
23280Insert a URL, with `completing-read' prompt, based on LOOKUP. 23435Insert a URL, with `completing-read' prompt, based on LOOKUP.
23281 23436
@@ -24785,8 +24940,8 @@ enclosed in `(and ...)'.
24785 24940
24786;;;*** 24941;;;***
24787 24942
24788;;;### (autoloads (savehist-mode) "savehist" "savehist.el" (20318 24943;;;### (autoloads (savehist-mode) "savehist" "savehist.el" (20452
24789;;;;;; 5885)) 24944;;;;;; 43636))
24790;;; Generated autoloads from savehist.el 24945;;; Generated autoloads from savehist.el
24791 24946
24792(defvar savehist-mode nil "\ 24947(defvar savehist-mode nil "\
@@ -32255,7 +32410,7 @@ this is equivalent to `display-warning', using
32255;;;*** 32410;;;***
32256 32411
32257;;;### (autoloads (wdired-change-to-wdired-mode) "wdired" "wdired.el" 32412;;;### (autoloads (wdired-change-to-wdired-mode) "wdired" "wdired.el"
32258;;;;;; (20244 35516)) 32413;;;;;; (20452 43334))
32259;;; Generated autoloads from wdired.el 32414;;; Generated autoloads from wdired.el
32260 32415
32261(autoload 'wdired-change-to-wdired-mode "wdired" "\ 32416(autoload 'wdired-change-to-wdired-mode "wdired" "\
@@ -32850,7 +33005,7 @@ Default MODIFIER is 'shift.
32850;;;*** 33005;;;***
32851 33006
32852;;;### (autoloads (winner-mode winner-mode) "winner" "winner.el" 33007;;;### (autoloads (winner-mode winner-mode) "winner" "winner.el"
32853;;;;;; (20244 35516)) 33008;;;;;; (20452 43334))
32854;;; Generated autoloads from winner.el 33009;;; Generated autoloads from winner.el
32855 33010
32856(defvar winner-mode nil "\ 33011(defvar winner-mode nil "\
@@ -33379,7 +33534,7 @@ Zone out, completely.
33379;;;;;; "vc/ediff-ptch.el" "vc/ediff-vers.el" "vc/ediff-wind.el" 33534;;;;;; "vc/ediff-ptch.el" "vc/ediff-vers.el" "vc/ediff-wind.el"
33380;;;;;; "vc/pcvs-info.el" "vc/pcvs-parse.el" "vc/pcvs-util.el" "vc/vc-dav.el" 33535;;;;;; "vc/pcvs-info.el" "vc/pcvs-parse.el" "vc/pcvs-util.el" "vc/vc-dav.el"
33381;;;;;; "vcursor.el" "vt-control.el" "vt100-led.el" "w32-fns.el" 33536;;;;;; "vcursor.el" "vt-control.el" "vt100-led.el" "w32-fns.el"
33382;;;;;; "w32-vars.el" "x-dnd.el") (20451 34928 615251)) 33537;;;;;; "w32-vars.el" "x-dnd.el") (20452 56581 711508))
33383 33538
33384;;;*** 33539;;;***
33385 33540
diff --git a/lisp/startup.el b/lisp/startup.el
index e71fe323066..3adc2caa04a 100644
--- a/lisp/startup.el
+++ b/lisp/startup.el
@@ -123,8 +123,8 @@ altering `command-line-args-left' to remove them.")
123 "Default directory to use for command line arguments. 123 "Default directory to use for command line arguments.
124This is normally copied from `default-directory' when Emacs starts.") 124This is normally copied from `default-directory' when Emacs starts.")
125 125
126;;; This is here, rather than in x-win.el, so that we can ignore these 126;; This is here, rather than in x-win.el, so that we can ignore these
127;;; options when we are not using X. 127;; options when we are not using X.
128(defconst command-line-x-option-alist 128(defconst command-line-x-option-alist
129 '(("-bw" 1 x-handle-numeric-switch border-width) 129 '(("-bw" 1 x-handle-numeric-switch border-width)
130 ("-d" 1 x-handle-display) 130 ("-d" 1 x-handle-display)
diff --git a/lisp/subr.el b/lisp/subr.el
index 7e56fe7c3ee..93273b1d41d 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -272,6 +272,7 @@ the return value (nil if RESULT is omitted).
272 "Do not evaluate any arguments and return nil. 272 "Do not evaluate any arguments and return nil.
273Treated as a declaration when used at the right place in a 273Treated as a declaration when used at the right place in a
274`defmacro' form. \(See Info anchor `(elisp)Definition of declare'.)" 274`defmacro' form. \(See Info anchor `(elisp)Definition of declare'.)"
275 ;; FIXME: edebug spec should pay attention to defun-declarations-alist.
275 nil) 276 nil)
276)) 277))
277 278
diff --git a/lisp/window.el b/lisp/window.el
index 7c3fe1a082f..b362f40d8ad 100644
--- a/lisp/window.el
+++ b/lisp/window.el
@@ -28,8 +28,6 @@
28 28
29;;; Code: 29;;; Code:
30 30
31(eval-when-compile (require 'cl))
32
33(defmacro save-selected-window (&rest body) 31(defmacro save-selected-window (&rest body)
34 "Execute BODY, then select the previously selected window. 32 "Execute BODY, then select the previously selected window.
35The value returned is the value of the last form in BODY. 33The value returned is the value of the last form in BODY.
@@ -2557,7 +2555,7 @@ This may be a useful alternative binding for \\[delete-other-windows]
2557 (while (not (eq (setq w (next-window w 1)) window)) 2555 (while (not (eq (setq w (next-window w 1)) window))
2558 (let ((e (window-edges w))) 2556 (let ((e (window-edges w)))
2559 (when (and (= (car e) (car edges)) 2557 (when (and (= (car e) (car edges))
2560 (= (caddr e) (caddr edges))) 2558 (= (nth 2 e) (nth 2 edges)))
2561 (push w delenda)))) 2559 (push w delenda))))
2562 (mapc 'delete-window delenda))) 2560 (mapc 'delete-window delenda)))
2563 2561