commit 25224ab284edd16d41eb199d90c579340f29e8e4 (HEAD, refs/remotes/origin/master) Author: Eric Abrahamsen Date: Wed Feb 4 05:45:02 2015 +0000 lisp/gnus/nnir.el: Revert "Enable non-ASCII IMAP searches" diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 7668331..b4cc341 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,7 @@ +2015-02-04 Eric Abrahamsen + + * nnir.el: Revert "Enable non-ASCII IMAP searches". + 2015-01-30 Glenn Morris * gnus-registry.el (gnus-registry-max-pruned-entries) diff --git a/lisp/gnus/nnir.el b/lisp/gnus/nnir.el index 6d111e8..08ca7c7 100644 --- a/lisp/gnus/nnir.el +++ b/lisp/gnus/nnir.el @@ -284,8 +284,6 @@ is `(valuefunc member)'." (eval-when-compile (autoload 'nnimap-buffer "nnimap") (autoload 'nnimap-command "nnimap") - (autoload 'nnimap-capability "nnimap") - (autoload 'nnimap-wait-for-line "nnimap") (autoload 'nnimap-change-group "nnimap") (autoload 'nnimap-make-thread-query "nnimap") (autoload 'gnus-registry-action "gnus-registry") @@ -970,52 +968,33 @@ details on the language and supported extensions." (catch 'found (mapcar #'(lambda (group) - (let (artlist) - (condition-case () - (when (nnimap-change-group - (gnus-group-short-name group) server) - (with-current-buffer (nnimap-buffer) - (message "Searching %s..." group) - (let* ((arts 0) - (literal+ (nnimap-capability "LITERAL+")) - (search (split-string - (if (string= criteria "") - qstring - (nnir-imap-make-query - criteria qstring)) - "\n")) - (coding (upcase - (replace-regexp-in-string - "-\\(unix\\|dos\\|mac\\)" "" - (symbol-name - (cdr default-process-coding-system))))) - call result) - (setq call (nnimap-send-command - "UID SEARCH CHARSET %s %s" coding (pop search))) - (while search ; Non-ascii search terms - (unless literal+ - (nnimap-wait-for-line "^\\+\\(.*\\)\n")) - (process-send-string (get-buffer-process (current-buffer)) (pop search)) - (process-send-string (get-buffer-process (current-buffer)) - (if (nnimap-newlinep nnimap-object) - "\n" - "\r\n"))) - (setq result (nnimap-get-response call)) - (mapc - (lambda (artnum) - (let ((artn (string-to-number artnum))) - (when (> artn 0) - (push (vector group artn 100) - artlist) - (when (assq 'shortcut query) - (throw 'found (list artlist))) - (setq arts (1+ arts))))) - (and (car result) - (cdr (assoc "SEARCH" (cdr result))))) - (message "Searching %s... %d matches" group arts))) - (message "Searching %s...done" group)) - (quit nil)) - (nreverse artlist))) + (let (artlist) + (condition-case () + (when (nnimap-change-group + (gnus-group-short-name group) server) + (with-current-buffer (nnimap-buffer) + (message "Searching %s..." group) + (let ((arts 0) + (result (nnimap-command "UID SEARCH %s" + (if (string= criteria "") + qstring + (nnir-imap-make-query + criteria qstring))))) + (mapc + (lambda (artnum) + (let ((artn (string-to-number artnum))) + (when (> artn 0) + (push (vector group artn 100) + artlist) + (when (assq 'shortcut query) + (throw 'found (list artlist))) + (setq arts (1+ arts))))) + (and (car result) + (cdr (assoc "SEARCH" (cdr result))))) + (message "Searching %s... %d matches" group arts))) + (message "Searching %s...done" group)) + (quit nil)) + (nreverse artlist))) groups)))))) (defun nnir-imap-make-query (criteria qstring) @@ -1069,30 +1048,25 @@ In future the following will be added to the language: (defun nnir-imap-expr-to-imap (criteria expr) "Convert EXPR into an IMAP search expression on CRITERIA" ;; What sort of expression is this, eh? - (let ((literal+ (nnimap-capability "LITERAL+"))) - (cond - ;; Simple string term - ((stringp expr) - (format "%s %S" criteria expr)) - ;; Trivial term: and - ((eq expr 'and) nil) - ;; Composite term: or expression - ((eq (car-safe expr) 'or) - (format "OR %s %s" - (nnir-imap-expr-to-imap criteria (second expr)) - (nnir-imap-expr-to-imap criteria (third expr)))) - ;; Composite term: just the fax, mam - ((eq (car-safe expr) 'not) - (format "NOT (%s)" (nnir-imap-query-to-imap criteria (rest expr)))) - ;; Composite term: non-ascii search term - ((numberp (car-safe expr)) - (format "%s {%d%s}\n%s" criteria (car expr) - (if literal+ "+" "") (second expr))) - ;; Composite term: just expand it all. - ((and (not (null expr)) (listp expr)) - (format "(%s)" (nnir-imap-query-to-imap criteria expr))) - ;; Complex value, give up for now. - (t (error "Unhandled input: %S" expr))))) + (cond + ;; Simple string term + ((stringp expr) + (format "%s %S" criteria expr)) + ;; Trivial term: and + ((eq expr 'and) nil) + ;; Composite term: or expression + ((eq (car-safe expr) 'or) + (format "OR %s %s" + (nnir-imap-expr-to-imap criteria (second expr)) + (nnir-imap-expr-to-imap criteria (third expr)))) + ;; Composite term: just the fax, mam + ((eq (car-safe expr) 'not) + (format "NOT (%s)" (nnir-imap-query-to-imap criteria (rest expr)))) + ;; Composite term: just expand it all. + ((and (not (null expr)) (listp expr)) + (format "(%s)" (nnir-imap-query-to-imap criteria expr))) + ;; Complex value, give up for now. + (t (error "Unhandled input: %S" expr)))) (defun nnir-imap-parse-query (string) @@ -1134,11 +1108,6 @@ that the search language can then understand and use." ((eq term 'and) 'and) ;; negated term ((eq term 'not) (list 'not (nnir-imap-next-expr))) - ;; non-ascii search string - ((and (stringp term) - (not (= (string-bytes term) - (length term)))) - (list (string-bytes term) term)) ;; generic term (t term)))) commit ac27180cca90fa1919ba0331e01794602901e7bc Author: Paul Eggert Date: Tue Feb 3 18:53:15 2015 -0800 Remove no-longer-used two_byte_p calculations * dispextern.h (struct glyph_string): Remove member two_byte_p. All uses removed. * xdisp.c (get_glyph_face_and_encoding): Remove arg two_byte_p. All callers changed. diff --git a/src/ChangeLog b/src/ChangeLog index a1d4c7d..6b56abb 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2015-02-04 Paul Eggert + + Remove no-longer-used two_byte_p calculations + * dispextern.h (struct glyph_string): Remove member two_byte_p. + All uses removed. + * xdisp.c (get_glyph_face_and_encoding): Remove arg two_byte_p. + All callers changed. + 2015-02-03 Paul Eggert Omit unnecessary var if GTK or NS diff --git a/src/dispextern.h b/src/dispextern.h index 4139479..b0f2944 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -1306,9 +1306,6 @@ struct glyph_string /* True means the background of this string has been drawn. */ bool_bf background_filled_p : 1; - /* True means glyph string must be drawn with 16-bit functions. */ - bool_bf two_byte_p : 1; - /* True means that the original font determined for drawing this glyph string could not be loaded. The member `font' has been set to the frame's default font in this case. */ diff --git a/src/xdisp.c b/src/xdisp.c index 8f6695a..3c928f7 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -24241,7 +24241,7 @@ get_char_face_and_encoding (struct frame *f, int c, int face_id, static struct face * get_glyph_face_and_encoding (struct frame *f, struct glyph *glyph, - XChar2b *char2b, int *two_byte_p) + XChar2b *char2b) { struct face *face; unsigned code = 0; @@ -24253,9 +24253,6 @@ get_glyph_face_and_encoding (struct frame *f, struct glyph *glyph, eassert (face != NULL); prepare_face_for_display (f, face); - if (two_byte_p) - *two_byte_p = 0; - if (face->font) { if (CHAR_BYTE8_P (glyph->u.ch)) @@ -24368,9 +24365,6 @@ fill_composite_glyph_string (struct glyph_string *s, struct face *base_face, /* Adjust base line for subscript/superscript text. */ s->ybase += s->first_glyph->voffset; - /* This glyph string must always be drawn with 16-bit functions. */ - s->two_byte_p = 1; - return s->cmp_to; } @@ -24481,12 +24475,8 @@ fill_glyph_string (struct glyph_string *s, int face_id, && glyph->face_id == face_id && glyph->glyph_not_available_p == glyph_not_available_p) { - int two_byte_p; - s->face = get_glyph_face_and_encoding (s->f, glyph, - s->char2b + s->nchars, - &two_byte_p); - s->two_byte_p = two_byte_p; + s->char2b + s->nchars); ++s->nchars; eassert (s->nchars <= end - start); s->width += glyph->pixel_width; @@ -24600,17 +24590,18 @@ x_get_glyph_overhangs (struct glyph *glyph, struct frame *f, int *left, int *rig if (glyph->type == CHAR_GLYPH) { - struct face *face; XChar2b char2b; - struct font_metrics *pcm; - - face = get_glyph_face_and_encoding (f, glyph, &char2b, NULL); - if (face->font && (pcm = get_per_char_metric (face->font, &char2b))) + struct face *face = get_glyph_face_and_encoding (f, glyph, &char2b); + if (face->font) { - if (pcm->rbearing > pcm->width) - *right = pcm->rbearing - pcm->width; - if (pcm->lbearing < 0) - *left = -pcm->lbearing; + struct font_metrics *pcm = get_per_char_metric (face->font, &char2b); + if (pcm) + { + if (pcm->rbearing > pcm->width) + *right = pcm->rbearing - pcm->width; + if (pcm->lbearing < 0) + *left = -pcm->lbearing; + } } } else if (glyph->type == COMPOSITE_GLYPH) commit 0f5e0449960621d58f2b751078235f593530ebc5 Author: Paul Eggert Date: Tue Feb 3 18:25:00 2015 -0800 * texinfo.tex: Update from gnulib. diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index e75589f..534dd10 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,3 +1,7 @@ +2015-02-04 Paul Eggert + + * texinfo.tex: Update from gnulib. + 2015-01-23 Thomas Fitzsimmons * eudc.texi (LDAP Configuration): Rename from LDAP Requirements diff --git a/doc/misc/texinfo.tex b/doc/misc/texinfo.tex index 370d450..96b212d 100644 --- a/doc/misc/texinfo.tex +++ b/doc/misc/texinfo.tex @@ -3,11 +3,12 @@ % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % -\def\texinfoversion{2014-12-03.16} +\def\texinfoversion{2015-01-31.10} % % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, -% 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. +% 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 +% Free Software Foundation, Inc. % % This texinfo.tex file is free software: you can redistribute it and/or % modify it under the terms of the GNU General Public License as @@ -8952,6 +8953,7 @@ directory should work if nowhere else does.} \catcode\count255=#1\relax \advance\count255 by 1 \repeat + } % @documentencoding sets the definition of non-ASCII characters @@ -8986,10 +8988,12 @@ directory should work if nowhere else does.} % \else \ifx \declaredencoding \utfeight \setnonasciicharscatcode\active - \utfeightchardefs + % since we already invoked \utfeightchardefs at the top level + % (below), do not re-invoke it, then our check for duplicated + % definitions triggers. Making non-ascii chars active is enough. % \else - \message{Unknown document encoding #1, ignoring.}% + \message{Ignoring unknown document encoding: #1.}% % \fi % utfeight \fi % latnine @@ -8998,10 +9002,11 @@ directory should work if nowhere else does.} \fi % ascii } +% emacs-page % A message to be logged when using a character that isn't available % the default font encoding (OT1). % -\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}} +\def\missingcharmsg#1{\message{Character missing, sorry: #1.}} % Take account of \c (plain) vs. \, (Texinfo) difference. \def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} @@ -9037,12 +9042,10 @@ directory should work if nowhere else does.} \gdef^^b4{\'{}} \gdef^^b5{$\mu$} \gdef^^b6{\P} - % - \gdef^^b7{$^.$} + \gdef^^b7{\ifmmode\cdot\else $\cdot$\fi} \gdef^^b8{\cedilla\ } \gdef^^b9{$^1$} \gdef^^ba{\ordm} - % \gdef^^bb{\guillemetright} \gdef^^bc{$1\over4$} \gdef^^bd{$1\over2$} @@ -9331,6 +9334,11 @@ directory should work if nowhere else does.} \expandafter\expandafter\expandafter\expandafter \expandafter\expandafter\expandafter \gdef\UTFviiiTmp{#2}% + % + \expandafter\ifx\csname uni:#1\endcsname \relax \else + \errmessage{Internal error, already defined: #1}% + \fi + % % define an additional control sequence for this code point. \expandafter\globallet\csname uni:#1\endcsname \UTFviiiTmp \endgroup} @@ -9370,23 +9378,49 @@ directory should work if nowhere else does.} \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} \endgroup +% https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_M +% U+0000..U+007F = https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block) +% U+0080..U+00FF = https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block) +% U+0100..U+017F = https://en.wikipedia.org/wiki/Latin_Extended-A +% U+0180..U+024F = https://en.wikipedia.org/wiki/Latin_Extended-B +% +% Many of our renditions are less than wonderful, and all the missing +% characters are available somewhere. Loading the necessary fonts +% awaits user request. We can't truly support Unicode without +% reimplementing everything that's been done in LaTeX for many years, +% plus probably using luatex or xetex, and who knows what else. +% We won't be doing that here in this simple file. But we can try to at +% least make most of the characters not bomb out. +% \def\utfeightchardefs{% \DeclareUnicodeCharacter{00A0}{\tie} \DeclareUnicodeCharacter{00A1}{\exclamdown} \DeclareUnicodeCharacter{00A3}{\pounds} + \DeclareUnicodeCharacter{00A7}{\S} \DeclareUnicodeCharacter{00A8}{\"{ }} \DeclareUnicodeCharacter{00A9}{\copyright} \DeclareUnicodeCharacter{00AA}{\ordf} \DeclareUnicodeCharacter{00AB}{\guillemetleft} + \DeclareUnicodeCharacter{00AC}{\ifmmode\lnot\else $\lnot$\fi} \DeclareUnicodeCharacter{00AD}{\-} \DeclareUnicodeCharacter{00AE}{\registeredsymbol} \DeclareUnicodeCharacter{00AF}{\={ }} \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} + \DeclareUnicodeCharacter{00B1}{\ifmmode\pm\else $\pm$\fi} + \DeclareUnicodeCharacter{00B2}{$^2$} + \DeclareUnicodeCharacter{00B3}{$^3$} \DeclareUnicodeCharacter{00B4}{\'{ }} + \DeclareUnicodeCharacter{00B5}{$\mu$} + \DeclareUnicodeCharacter{00B6}{\P} + \DeclareUnicodeCharacter{00B7}{\ifmmode\cdot\else $\cdot$\fi} \DeclareUnicodeCharacter{00B8}{\cedilla{ }} + \DeclareUnicodeCharacter{00B9}{$^1$} \DeclareUnicodeCharacter{00BA}{\ordm} \DeclareUnicodeCharacter{00BB}{\guillemetright} + \DeclareUnicodeCharacter{00BC}{$1\over4$} + \DeclareUnicodeCharacter{00BD}{$1\over2$} + \DeclareUnicodeCharacter{00BE}{$3\over4$} \DeclareUnicodeCharacter{00BF}{\questiondown} \DeclareUnicodeCharacter{00C0}{\`A} @@ -9413,6 +9447,7 @@ directory should work if nowhere else does.} \DeclareUnicodeCharacter{00D4}{\^O} \DeclareUnicodeCharacter{00D5}{\~O} \DeclareUnicodeCharacter{00D6}{\"O} + \DeclareUnicodeCharacter{00D7}{\ifmmode\times\else $\times$\fi} \DeclareUnicodeCharacter{00D8}{\O} \DeclareUnicodeCharacter{00D9}{\`U} \DeclareUnicodeCharacter{00DA}{\'U} @@ -9446,6 +9481,7 @@ directory should work if nowhere else does.} \DeclareUnicodeCharacter{00F4}{\^o} \DeclareUnicodeCharacter{00F5}{\~o} \DeclareUnicodeCharacter{00F6}{\"o} + \DeclareUnicodeCharacter{00F7}{\ifmmode\div\else $\div$\fi} \DeclareUnicodeCharacter{00F8}{\o} \DeclareUnicodeCharacter{00F9}{\`u} \DeclareUnicodeCharacter{00FA}{\'u} @@ -9465,20 +9501,23 @@ directory should work if nowhere else does.} \DeclareUnicodeCharacter{0107}{\'c} \DeclareUnicodeCharacter{0108}{\^C} \DeclareUnicodeCharacter{0109}{\^c} - \DeclareUnicodeCharacter{0118}{\ogonek{E}} - \DeclareUnicodeCharacter{0119}{\ogonek{e}} \DeclareUnicodeCharacter{010A}{\dotaccent{C}} \DeclareUnicodeCharacter{010B}{\dotaccent{c}} \DeclareUnicodeCharacter{010C}{\v{C}} \DeclareUnicodeCharacter{010D}{\v{c}} \DeclareUnicodeCharacter{010E}{\v{D}} + \DeclareUnicodeCharacter{010F}{d'} + \DeclareUnicodeCharacter{0110}{\DH} + \DeclareUnicodeCharacter{0111}{\dh} \DeclareUnicodeCharacter{0112}{\=E} \DeclareUnicodeCharacter{0113}{\=e} \DeclareUnicodeCharacter{0114}{\u{E}} \DeclareUnicodeCharacter{0115}{\u{e}} \DeclareUnicodeCharacter{0116}{\dotaccent{E}} \DeclareUnicodeCharacter{0117}{\dotaccent{e}} + \DeclareUnicodeCharacter{0118}{\ogonek{E}} + \DeclareUnicodeCharacter{0119}{\ogonek{e}} \DeclareUnicodeCharacter{011A}{\v{E}} \DeclareUnicodeCharacter{011B}{\v{e}} \DeclareUnicodeCharacter{011C}{\^G} @@ -9488,14 +9527,20 @@ directory should work if nowhere else does.} \DeclareUnicodeCharacter{0120}{\dotaccent{G}} \DeclareUnicodeCharacter{0121}{\dotaccent{g}} + \DeclareUnicodeCharacter{0122}{\cedilla{G}} + \DeclareUnicodeCharacter{0123}{\cedilla{g}} \DeclareUnicodeCharacter{0124}{\^H} \DeclareUnicodeCharacter{0125}{\^h} + \DeclareUnicodeCharacter{0126}{\missingcharmsg{H WITH STROKE}} + \DeclareUnicodeCharacter{0127}{\missingcharmsg{h WITH STROKE}} \DeclareUnicodeCharacter{0128}{\~I} \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} \DeclareUnicodeCharacter{012A}{\=I} \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} \DeclareUnicodeCharacter{012C}{\u{I}} \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} + \DeclareUnicodeCharacter{012E}{\ogonek{I}} + \DeclareUnicodeCharacter{012F}{\ogonek{i}} \DeclareUnicodeCharacter{0130}{\dotaccent{I}} \DeclareUnicodeCharacter{0131}{\dotless{i}} @@ -9503,15 +9548,29 @@ directory should work if nowhere else does.} \DeclareUnicodeCharacter{0133}{ij} \DeclareUnicodeCharacter{0134}{\^J} \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} + \DeclareUnicodeCharacter{0136}{\cedilla{K}} + \DeclareUnicodeCharacter{0137}{\cedilla{k}} + \DeclareUnicodeCharacter{0138}{\ifmmode\kappa\else $\kappa$\fi} \DeclareUnicodeCharacter{0139}{\'L} \DeclareUnicodeCharacter{013A}{\'l} + \DeclareUnicodeCharacter{013B}{\cedilla{L}} + \DeclareUnicodeCharacter{013C}{\cedilla{l}} + \DeclareUnicodeCharacter{013D}{L'}% should kern + \DeclareUnicodeCharacter{013E}{l'}% should kern + \DeclareUnicodeCharacter{013F}{L\U{00B7}} + \DeclareUnicodeCharacter{0140}{l\U{00B7}} \DeclareUnicodeCharacter{0141}{\L} \DeclareUnicodeCharacter{0142}{\l} \DeclareUnicodeCharacter{0143}{\'N} \DeclareUnicodeCharacter{0144}{\'n} + \DeclareUnicodeCharacter{0145}{\cedilla{N}} + \DeclareUnicodeCharacter{0146}{\cedilla{n}} \DeclareUnicodeCharacter{0147}{\v{N}} \DeclareUnicodeCharacter{0148}{\v{n}} + \DeclareUnicodeCharacter{0149}{'n} + \DeclareUnicodeCharacter{014A}{\missingcharmsg{ENG}} + \DeclareUnicodeCharacter{014B}{\missingcharmsg{eng}} \DeclareUnicodeCharacter{014C}{\=O} \DeclareUnicodeCharacter{014D}{\=o} \DeclareUnicodeCharacter{014E}{\u{O}} @@ -9523,6 +9582,8 @@ directory should work if nowhere else does.} \DeclareUnicodeCharacter{0153}{\oe} \DeclareUnicodeCharacter{0154}{\'R} \DeclareUnicodeCharacter{0155}{\'r} + \DeclareUnicodeCharacter{0156}{\cedilla{R}} + \DeclareUnicodeCharacter{0157}{\cedilla{r}} \DeclareUnicodeCharacter{0158}{\v{R}} \DeclareUnicodeCharacter{0159}{\v{r}} \DeclareUnicodeCharacter{015A}{\'S} @@ -9534,10 +9595,12 @@ directory should work if nowhere else does.} \DeclareUnicodeCharacter{0160}{\v{S}} \DeclareUnicodeCharacter{0161}{\v{s}} - \DeclareUnicodeCharacter{0162}{\cedilla{t}} - \DeclareUnicodeCharacter{0163}{\cedilla{T}} + \DeclareUnicodeCharacter{0162}{\cedilla{T}} + \DeclareUnicodeCharacter{0163}{\cedilla{t}} \DeclareUnicodeCharacter{0164}{\v{T}} - + \DeclareUnicodeCharacter{0165}{\v{t}} + \DeclareUnicodeCharacter{0166}{\missingcharmsg{H WITH STROKE}} + \DeclareUnicodeCharacter{0167}{\missingcharmsg{h WITH STROKE}} \DeclareUnicodeCharacter{0168}{\~U} \DeclareUnicodeCharacter{0169}{\~u} \DeclareUnicodeCharacter{016A}{\=U} @@ -9549,6 +9612,8 @@ directory should work if nowhere else does.} \DeclareUnicodeCharacter{0170}{\H{U}} \DeclareUnicodeCharacter{0171}{\H{u}} + \DeclareUnicodeCharacter{0172}{\ogonek{U}} + \DeclareUnicodeCharacter{0173}{\ogonek{u}} \DeclareUnicodeCharacter{0174}{\^W} \DeclareUnicodeCharacter{0175}{\^w} \DeclareUnicodeCharacter{0176}{\^Y} @@ -9560,6 +9625,7 @@ directory should work if nowhere else does.} \DeclareUnicodeCharacter{017C}{\dotaccent{z}} \DeclareUnicodeCharacter{017D}{\v{Z}} \DeclareUnicodeCharacter{017E}{\v{z}} + \DeclareUnicodeCharacter{017F}{\missingcharmsg{LONG S}} \DeclareUnicodeCharacter{01C4}{D\v{Z}} \DeclareUnicodeCharacter{01C5}{D\v{z}} @@ -9771,6 +9837,9 @@ directory should work if nowhere else does.} \relax } +% define all the unicode characters we know about, for the sake of @U. +\utfeightchardefs + % Make non-ASCII characters printable again for compatibility with % existing Texinfo documents that may use them, even without declaring a % document encoding. @@ -10192,7 +10261,7 @@ directory should work if nowhere else does.} @c Local variables: @c eval: (add-hook 'write-file-hooks 'time-stamp) -@c page-delimiter: "^\\\\message" +@c page-delimiter: "^\\\\message\\|emacs-page" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d.%02H" @c time-stamp-end: "}" commit 5b82ae859936ec786ffb7dbefb28500587c34e5a Author: Paul Eggert Date: Tue Feb 3 18:24:50 2015 -0800 * .gitattributes: Ignore blanks at EOL in texinfo.tex. diff --git a/.gitattributes b/.gitattributes index c568ba2..c3bbf66 100644 --- a/.gitattributes +++ b/.gitattributes @@ -27,6 +27,9 @@ leim/MISC-DIC/pinyin.map -whitespace lib-src/update-game-score.exe.manifest -whitespace nt/nmake.defs -whitespace +# The upstream maintainer does not want to remove trailing whitespace. +doc/misc/texinfo.tex -whitespace=blank-at-eol + # Some files should not be treated as text when diffing or merging. *.gpg binary *.gz binary diff --git a/ChangeLog b/ChangeLog index d7fd76c..ca9f44a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2015-02-04 Paul Eggert + + * .gitattributes: Ignore blanks at EOL in texinfo.tex. + 2015-01-28 Paul Eggert Merge from gnulib and try to repair bad merge commit 200a47d45cf8550e5995dd23025acaf3edf81b4a Author: Artur Malabarba Date: Tue Feb 3 18:14:28 2015 -0200 emacs-lisp/package.el (package--read-pkg-desc): Fix tar-desc reference. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 38d41b27..c18a8ff 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -25,6 +25,9 @@ (package-autoremove): Use it. (package-menu-execute): Offer to remove unneeded packages. + (package--read-pkg-desc, package-tar-file-info): Fix reference to + tar-desc. + 2015-02-03 Thierry Volpiatto * emacs-lisp/package.el (package-reinstall): Don't change package's selected status. diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index d013fd4..fa620eb 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -1345,7 +1345,9 @@ The return result is a `package-desc'." (error "No package descriptor file found")) (with-current-buffer (tar--extract tar-desc) (unwind-protect - (package--read-pkg-desc 'tar) + (or (package--read-pkg-desc 'tar) + (error "Can't find define-package in %s" + (tar-header-name tar-desc))) (kill-buffer (current-buffer)))))) (defun package-dir-info () @@ -1378,13 +1380,12 @@ Return the pkg-desc, with desc-kind set to KIND." (unwind-protect (let* ((pkg-def-parsed (read (current-buffer))) (pkg-desc - (if (not (eq (car pkg-def-parsed) 'define-package)) - (error "Can't find define-package in %s" - (tar-header-name tar-desc)) + (when (eq (car pkg-def-parsed) 'define-package) (apply #'package-desc-from-define (append (cdr pkg-def-parsed)))))) - (setf (package-desc-kind pkg-desc) kind) - pkg-desc))) + (when pkg-desc + (setf (package-desc-kind pkg-desc) kind) + pkg-desc)))) ;;;###autoload commit 2a4a5069a6a0dba8888d72e60b66a3df5ed5a8cb Author: Artur Malabarba Date: Tue Feb 3 17:51:39 2015 -0200 emacs-lisp/package.el (package-menu-execute): Offer to remove packages. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c834d7c..38d41b27 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -21,6 +21,10 @@ (package-menu-mark-delete, package-menu--find-upgrades) (package-menu--status-predicate, describe-package-1): Use it + (package--removable-packages): New function. + (package-autoremove): Use it. + (package-menu-execute): Offer to remove unneeded packages. + 2015-02-03 Thierry Volpiatto * emacs-lisp/package.el (package-reinstall): Don't change package's selected status. diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 298604e..d013fd4 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -1536,6 +1536,18 @@ If NOSAVE is non-nil, the package is not removed from 'package-selected-packages (remove name package-selected-packages))) (message "Package `%s' deleted." (package-desc-full-name pkg-desc)))))) +(defun package--removable-packages () + "Return a list of names of packages no longer needed. +These are packages which are neither contained in +`package-selected-packages' nor a dependency of one that is." + (let ((needed (cl-loop for p in package-selected-packages + if (assq p package-alist) + ;; `p' and its dependencies are needed. + append (cons p (package--get-deps p))))) + (cl-loop for p in (mapcar #'car package-alist) + unless (memq p needed) + collect p))) + ;;;###autoload (defun package-autoremove () "Remove packages that are no more needed. @@ -1550,22 +1562,16 @@ will be deleted." (when (or package-selected-packages (yes-or-no-p "`package-selected-packages' is empty! Really remove ALL packages? ")) - (let ((needed (cl-loop for p in package-selected-packages - if (assq p package-alist) - ;; `p' and its dependencies are needed. - append (cons p (package--get-deps p))))) - (cl-loop for p in (mapcar #'car package-alist) - unless (memq p needed) - collect p into lst - finally (if lst - (when (y-or-n-p - (format "%s packages will be deleted:\n%s, proceed? " - (length lst) - (mapconcat #'symbol-name lst ", "))) - (mapc (lambda (p) - (package-delete (cadr (assq p package-alist)) t)) - lst)) - (message "Nothing to autoremove")))))) + (let ((removable (package--removable-packages))) + (if removable + (when (y-or-n-p + (format "%s packages will be deleted:\n%s, proceed? " + (length removable) + (mapconcat #'symbol-name removable ", "))) + (mapc (lambda (p) + (package-delete (cadr (assq p package-alist)) t)) + removable) + (message "Nothing to autoremove")))))) (defun package-archive-base (desc) "Return the archive containing the package NAME." @@ -2377,9 +2383,18 @@ Optional argument NOQUERY non-nil means do not ask the user to confirm." (package-delete elt) (error (message (cadr err))))) (error "Aborted"))) - (if (or delete-list install-list) - (package-menu--generate t t) - (message "No operations specified.")))) + (if (not (or delete-list install-list)) + (message "No operations specified.") + (when package-selected-packages + (let ((removable (package--removable-packages))) + (when (and removable + (y-or-n-p + (format "These %d packages are no longer needed, delete them (%s)? " + (length removable) + (mapconcat #'symbol-name removable ", ")))) + (mapc (lambda (p) (package-delete (cadr (assq p package-alist)))) + removable)))) + (package-menu--generate t t)))) (defun package-menu--version-predicate (A B) (let ((vA (or (aref (cadr A) 1) '(0))) commit 504fada7e7502b9052076c20f16f55d7e9bd3c58 Author: Artur Malabarba Date: Tue Feb 3 13:56:13 2015 +0000 emacs-lisp/package.el (package-desc-status): Add "dependency" status to Package Menu. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d385031..c834d7c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -15,6 +15,12 @@ Special handling for empty `package-selected-packages'. (package-install): Fix when PKG is a package-desc. + (package-desc-status): Add "dependency" status to the Package + Menu. + (package-menu--status-predicate, package-menu--print-info) + (package-menu-mark-delete, package-menu--find-upgrades) + (package-menu--status-predicate, describe-package-1): Use it + 2015-02-03 Thierry Volpiatto * emacs-lisp/package.el (package-reinstall): Don't change package's selected status. diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index bda88b6..298604e 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -1759,7 +1759,7 @@ If optional arg NO-ACTIVATE is non-nil, don't activate packages." 'font-lock-face 'font-lock-builtin-face) ".")) (pkg-dir - (insert (propertize (if (equal status "unsigned") + (insert (propertize (if (member status '("unsigned" "dependency")) "Installed" (capitalize status)) ;FIXME: Why comment-face? 'font-lock-face 'font-lock-comment-face)) @@ -2025,7 +2025,8 @@ package PKG-DESC, add one. The alist is keyed with PKG-DESC." (lle (assq name package-load-list)) (held (cadr lle)) (version (package-desc-version pkg-desc)) - (signed (package-desc-signed pkg-desc))) + (signed (or (not package-list-unsigned) + (package-desc-signed pkg-desc)))) (cond ((eq dir 'builtin) "built-in") ((and lle (null held)) "disabled") @@ -2040,7 +2041,9 @@ package PKG-DESC, add one. The alist is keyed with PKG-DESC." (cond ((not (file-exists-p (package-desc-dir pkg-desc))) "deleted") ((eq pkg-desc (cadr (assq name package-alist))) - (if (or (not package-list-unsigned) signed) "installed" "unsigned")) + (if (not signed) "unsigned" + (if (package--user-selected-p name) + "installed" "dependency"))) (t "obsolete"))) (t (let* ((ins (cadr (assq name package-alist))) @@ -2051,8 +2054,9 @@ package PKG-DESC, add one. The alist is keyed with PKG-DESC." "new" "available")) ((version-list-< version ins-v) "obsolete") ((version-list-= version ins-v) - (if (or (not package-list-unsigned) signed) - "installed" "unsigned")))))))) + (if (not signed) "unsigned" + (if (package--user-selected-p name) + "installed" "dependency"))))))))) (defun package-menu--refresh (&optional packages keywords) "Re-populate the `tabulated-list-entries'. @@ -2181,6 +2185,7 @@ Return (PKG-DESC [NAME VERSION STATUS DOC])." (`"held" 'font-lock-constant-face) (`"disabled" 'font-lock-warning-face) (`"installed" 'font-lock-comment-face) + (`"dependency" 'font-lock-comment-face) (`"unsigned" 'font-lock-warning-face) (_ 'font-lock-warning-face)))) ; obsolete. (list pkg-desc @@ -2223,7 +2228,8 @@ If optional arg BUTTON is non-nil, describe its associated package." (defun package-menu-mark-delete (&optional _num) "Mark a package for deletion and move to the next line." (interactive "p") - (if (member (package-menu-get-status) '("installed" "obsolete" "unsigned")) + (if (member (package-menu-get-status) + '("installed" "dependency" "obsolete" "unsigned")) (tabulated-list-put-tag "D" t) (forward-line))) @@ -2277,7 +2283,7 @@ If optional arg BUTTON is non-nil, describe its associated package." ;; ENTRY is (PKG-DESC [NAME VERSION STATUS DOC]) (let ((pkg-desc (car entry)) (status (aref (cadr entry) 2))) - (cond ((member status '("installed" "unsigned")) + (cond ((member status '("installed" "dependency" "unsigned")) (push pkg-desc installed)) ((member status '("available" "new")) (setq available (package--append-to-alist pkg-desc available)))))) @@ -2393,6 +2399,8 @@ Optional argument NOQUERY non-nil means do not ask the user to confirm." ((string= sB "available") nil) ((string= sA "installed") t) ((string= sB "installed") nil) + ((string= sA "dependency") t) + ((string= sB "dependency") nil) ((string= sA "unsigned") t) ((string= sB "unsigned") nil) ((string= sA "held") t) commit c184e85ea2adfc5b63f1fe55a6fa2eaaacbda97b Author: Artur Malabarba Date: Tue Feb 3 13:43:10 2015 +0000 emacs-lisp/package.el (package--user-selected-p): New function. Populates `package-selected-packages' if necessary, and then checks if symbol PKG is contained in it. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 61e0570..d385031 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -2,6 +2,18 @@ * emacs-lisp/package.el (package-delete): Document NOSAVE. (package--get-deps): delete-dups when ONLY is nil. + (package-autoremove): Warn the user if `package-selected-packages' + is empty. + + (package--user-selected-p): New function. + (package-delete, package-install, package-install-from-buffer): + Use it + (package-selected-packages): Mention it. + + (package-initialize): Don't populate `package-selected-packages'. + (package-install-user-selected-packages, package-autoremove): + Special handling for empty `package-selected-packages'. + (package-install): Fix when PKG is a package-desc. 2015-02-03 Thierry Volpiatto diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index ade36d7..bda88b6 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -340,7 +340,11 @@ when installing a new package. This variable will be used by `package-autoremove' to decide which packages are no more needed. You can use it to (re)install packages on other machines -by running `package-user-selected-packages-install'." +by running `package-user-selected-packages-install'. + +To check if a package is contained in this list here, use +`package--user-selected-p', as it may populate the variable with +a sane initial value." :group 'package :type '(repeat symbol)) @@ -1189,6 +1193,17 @@ number." nil)) alist))) +(defun package--user-selected-p (pkg) + "Return non-nil if PKG is a package was installed by the user. +PKG is a package name. +This looks into `package-selected-packages', populating it first +if it is still empty." + (unless (consp package-selected-packages) + (customize-save-variable + 'package-selected-packages + (setq package-selected-packages (package--find-non-dependencies)))) + (memq pkg package-selected-packages)) + (defun package-download-transaction (packages) "Download and install all the packages in PACKAGES. PACKAGES should be a list of package-desc. @@ -1222,9 +1237,12 @@ to `package-selected-packages'." package-archive-contents)) nil t)) t))) - (when (and mark-selected (not (memq pkg package-selected-packages))) - (customize-save-variable 'package-selected-packages - (cons pkg package-selected-packages))) + (let ((name (if (package-desc-p pkg) + (package-desc-name pkg) + pkg))) + (when (and mark-selected (not (package--user-selected-p name))) + (customize-save-variable 'package-selected-packages + (cons name package-selected-packages)))) (package-download-transaction (if (package-desc-p pkg) (package-compute-transaction (list pkg) @@ -1239,8 +1257,7 @@ to `package-selected-packages'." "Reinstall package: " (mapcar #'symbol-name (mapcar #'car package-alist)))))) - (package-delete (cadr (assq pkg package-alist)) 'force - (memq pkg package-selected-packages)) + (package-delete (cadr (assq pkg package-alist)) 'force 'nosave) (package-install pkg)) (defun package-strip-rcs-id (str) @@ -1402,10 +1419,9 @@ Downloads and installs required packages as needed." (package-download-transaction transaction)) ;; Install the package itself. (package-unpack pkg-desc) - (unless (memq name package-selected-packages) - (push name package-selected-packages) + (unless (package--user-selected-p name) (customize-save-variable 'package-selected-packages - package-selected-packages)) + (cons name package-selected-packages))) pkg-desc)) ;;;###autoload @@ -1443,17 +1459,22 @@ The file can either be a tar file or an Emacs Lisp file." "Ensure packages in `package-selected-packages' are installed. If some packages are not installed propose to install them." (interactive) - (cl-loop for p in package-selected-packages - unless (package-installed-p p) - collect p into lst - finally - (if lst - (when (y-or-n-p - (format "%s packages will be installed:\n%s, proceed?" - (length lst) - (mapconcat #'symbol-name lst ", "))) - (mapc #'package-install lst)) - (message "All your packages are already installed")))) + ;; We don't need to populate `package-selected-packages' before + ;; using here, because the outcome is the same either way (nothing + ;; gets installed). + (if (not package-selected-packages) + (message "`package-selected-packages' is empty, nothing to install") + (cl-loop for p in package-selected-packages + unless (package-installed-p p) + collect p into lst + finally + (if lst + (when (y-or-n-p + (format "%s packages will be installed:\n%s, proceed?" + (length lst) + (mapconcat #'symbol-name lst ", "))) + (mapc #'package-install lst)) + (message "All your packages are already installed"))))) (defun package--used-elsewhere-p (pkg-desc &optional pkg-list) "Non-nil if PKG-DESC is a dependency of a package in PKG-LIST. @@ -1509,8 +1530,8 @@ If NOSAVE is non-nil, the package is not removed from (unless (cdr pkgs) (setq package-alist (delq pkgs package-alist)))) ;; Update package-selected-packages. - (when (and (memq name package-selected-packages) - (null nosave)) + (when (and (null nosave) + (package--user-selected-p name)) (customize-save-variable 'package-selected-packages (remove name package-selected-packages))) (message "Package `%s' deleted." (package-desc-full-name pkg-desc)))))) @@ -1523,21 +1544,28 @@ Packages that are no more needed by other packages in `package-selected-packages' and their dependencies will be deleted." (interactive) - (let ((needed (cl-loop for p in package-selected-packages - if (assq p package-alist) - append (package--get-deps p)))) - (cl-loop for p in (mapcar #'car package-alist) - unless (or (memq p needed) - (memq p package-selected-packages)) - collect p into lst - finally (if lst - (when (y-or-n-p (format "%s packages will be deleted:\n%s, proceed? " - (length lst) - (mapconcat #'symbol-name lst ", "))) - (mapc (lambda (p) - (package-delete (cadr (assq p package-alist)) t)) - lst)) - (message "Nothing to autoremove"))))) + ;; If `package-selected-packages' is nil, it would make no sense to + ;; try to populate it here, because then `package-autoremove' will + ;; do absolutely nothing. + (when (or package-selected-packages + (yes-or-no-p + "`package-selected-packages' is empty! Really remove ALL packages? ")) + (let ((needed (cl-loop for p in package-selected-packages + if (assq p package-alist) + ;; `p' and its dependencies are needed. + append (cons p (package--get-deps p))))) + (cl-loop for p in (mapcar #'car package-alist) + unless (memq p needed) + collect p into lst + finally (if lst + (when (y-or-n-p + (format "%s packages will be deleted:\n%s, proceed? " + (length lst) + (mapconcat #'symbol-name lst ", "))) + (mapc (lambda (p) + (package-delete (cadr (assq p package-alist)) t)) + lst)) + (message "Nothing to autoremove")))))) (defun package-archive-base (desc) "Return the archive containing the package NAME." @@ -1663,9 +1691,6 @@ If optional arg NO-ACTIVATE is non-nil, don't activate packages." (unless no-activate (dolist (elt package-alist) (package-activate (car elt)))) - (when (and package-alist (not package-selected-packages)) - (customize-save-variable 'package-selected-packages - (package--find-non-dependencies))) (setq package--initialized t)) commit 6d767f961fe9f3bff9f59f5902db7925e6da19ef Author: Artur Malabarba Date: Tue Feb 3 11:38:08 2015 +0000 automated/package-test.el (package-test-get-deps): New test. diff --git a/test/ChangeLog b/test/ChangeLog index a9834cc..56e3ac0 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,7 @@ +2015-02-03 Artur Malabarba + + * automated/package-test.el (package-test-get-deps): New test. + 2015-01-31 Stefan Monnier * automated/eieio-tests.el (eieio-test-23-inheritance-check): Simplify. diff --git a/test/automated/package-test.el b/test/automated/package-test.el index a848865..004e2e8 100644 --- a/test/automated/package-test.el +++ b/test/automated/package-test.el @@ -73,6 +73,24 @@ :kind 'single) "Expected `package-desc' parsed from new-pkg-1.0.el.") +(defvar simple-depend-desc-1 + (package-desc-create :name 'simple-depend-1 + :version '(1 0) + :summary "A single-file package with a dependency." + :kind 'single + :reqs '((simple-depend (1 0)) + (multi-file (0 1)))) + "`package-desc' used for testing dependencies.") + +(defvar simple-depend-desc-2 + (package-desc-create :name 'simple-depend-2 + :version '(1 0) + :summary "A single-file package with a dependency." + :kind 'single + :reqs '((simple-depend-1 (1 0)) + (multi-file (0 1)))) + "`package-desc' used for testing dependencies.") + (defvar package-test-data-dir (expand-file-name "data/package" package-test-file-dir) "Base directory of package test files.") @@ -479,6 +497,35 @@ Must called from within a `tar-mode' buffer." (should (equal archive-contents (list 1 package-x-test--single-archive-entry-1-4)))))) +(ert-deftest package-test-get-deps () + "Test `package-test-get-deps' with complex structures." + (let ((package-alist + (mapcar (lambda (p) (list (package-desc-name p) p)) + (list simple-single-desc + simple-depend-desc + multi-file-desc + new-pkg-desc + simple-depend-desc-1 + simple-depend-desc-2)))) + (should + (equal (package--get-deps 'simple-depend) + '(simple-single))) + (should + (equal (package--get-deps 'simple-depend 'indirect) + nil)) + (should + (equal (package--get-deps 'simple-depend 'direct) + '(simple-single))) + (should + (equal (package--get-deps 'simple-depend-2) + '(simple-depend-1 multi-file simple-depend simple-single))) + (should + (equal (package--get-deps 'simple-depend-2 'indirect) + '(simple-depend multi-file simple-single))) + (should + (equal (package--get-deps 'simple-depend-2 'direct) + '(simple-depend-1 multi-file))))) + (provide 'package-test) ;;; package-test.el ends here commit 2a4a94db1a42c297fc902eba3a2b99afdfc957bc Author: Artur Malabarba Date: Tue Feb 3 11:36:10 2015 +0000 emacs-lisp/package.el (package--get-deps): delete-dups when ONLY is nil. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d1c0256..61e0570 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,6 +1,7 @@ 2015-02-03 Artur Malabarba * emacs-lisp/package.el (package-delete): Document NOSAVE. + (package--get-deps): delete-dups when ONLY is nil. 2015-02-03 Thierry Volpiatto diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 9a0c982..ade36d7 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -1436,7 +1436,7 @@ The file can either be a tar file or an Emacs Lisp file." (direct direct-deps) (separate (list direct-deps indirect-deps)) (indirect indirect-deps) - (t (append direct-deps indirect-deps))))) + (t (delete-dups (append direct-deps indirect-deps)))))) ;;;###autoload (defun package-install-user-selected-packages () commit 0ee15a20bc4f0039a32a095fea956f578ef8f002 Author: Artur Malabarba Date: Tue Feb 3 11:19:56 2015 +0000 emacs-lisp/package.el (package-delete): Document NOSAVE. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7132626..d1c0256 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2015-02-03 Artur Malabarba + + * emacs-lisp/package.el (package-delete): Document NOSAVE. + 2015-02-03 Thierry Volpiatto * emacs-lisp/package.el (package-reinstall): Don't change package's selected status. diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 869b2f0..9a0c982 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -1477,8 +1477,10 @@ with PKG-DESC entry removed." Argument PKG-DESC is a full description of package as vector. When package is used elsewhere as dependency of another package, refuse deleting it and return an error. -If FORCE is non--nil package will be deleted even if it is used -elsewhere." +If FORCE is non-nil package will be deleted even if it is used +elsewhere. +If NOSAVE is non-nil, the package is not removed from +`package-selected-packages'." (let ((dir (package-desc-dir pkg-desc)) (name (package-desc-name pkg-desc)) pkg-used-elsewhere-by) commit 88acd70e67a1096200fb18b586310a4126ea024a Author: Thierry Volpiatto Date: Mon Feb 2 21:35:29 2015 +0100 emacs-lisp/package.el (package-reinstall): Don't change selected status. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 80ee86a..7132626 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2015-02-03 Thierry Volpiatto + + * emacs-lisp/package.el (package-reinstall): Don't change package's selected status. + (package-delete): New NOSAVE argument. + 2015-02-03 Michael Albinus * net/tramp-sh.el (tramp-histfile-override): Fix docstring. diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 1627106..869b2f0 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -1239,7 +1239,8 @@ to `package-selected-packages'." "Reinstall package: " (mapcar #'symbol-name (mapcar #'car package-alist)))))) - (package-delete (cadr (assq pkg package-alist)) t) + (package-delete (cadr (assq pkg package-alist)) 'force + (memq pkg package-selected-packages)) (package-install pkg)) (defun package-strip-rcs-id (str) @@ -1470,7 +1471,7 @@ with PKG-DESC entry removed." (and (memq pkg (mapcar #'car (package-desc-reqs (cadr p)))) (car p)))))) -(defun package-delete (pkg-desc &optional force) +(defun package-delete (pkg-desc &optional force nosave) "Delete package PKG-DESC. Argument PKG-DESC is a full description of package as vector. @@ -1506,7 +1507,8 @@ elsewhere." (unless (cdr pkgs) (setq package-alist (delq pkgs package-alist)))) ;; Update package-selected-packages. - (when (memq name package-selected-packages) + (when (and (memq name package-selected-packages) + (null nosave)) (customize-save-variable 'package-selected-packages (remove name package-selected-packages))) (message "Package `%s' deleted." (package-desc-full-name pkg-desc)))))) commit e17d033781b8cd995cf23899543025e9f9ce1e23 Author: Artur Malabarba Date: Tue Feb 3 11:08:02 2015 +0000 NEWS: Document package.el's improved dependency-handling. diff --git a/etc/ChangeLog b/etc/ChangeLog index 8bc1afb..3703189 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,7 @@ +2015-02-03 Artur Malabarba + + * NEWS: Document package.el's improved dependency-handling. + 2015-01-29 Francesc Rocher * images/splash.svg, images/splash.png: diff --git a/etc/NEWS b/etc/NEWS index 4b0a268..72e2356 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -66,10 +66,6 @@ so if you want to use it, you can always take a copy from an older Emacs. * Changes in Emacs 25.1 -** `package-install-from-buffer' and `package-install-file' work on directories. -This follows the same rules as installing from a .tar file, except the --pkg file is optional. - ** New function `custom-prompt-customize-unsaved-options' checks for unsaved customizations and prompts user to customize (if found). @@ -201,6 +197,24 @@ Unicode standards. * Changes in Specialized Modes and Packages in Emacs 25.1 +** package.el +*** `package-install-from-buffer' and `package-install-file' work on directories. +This follows the same rules as installing from a .tar file, except the +-pkg file is optional. + +*** Packages which are dependencies of other packages cannot be deleted. +The FORCE argument to `package-delete' overrides this. + +*** New custom variable `package-selected-packages' tracks packages +which were installed by the user (as opposed to installed as +dependencies). This variable can also be manually customized. + +*** New command `package-install-user-selected-packages' installs all +packages from `package-selected-packages' which are currently missing. + +*** New command `package-autoremove' removes all packages which were +installed strictly as dependencies but are no longer needed. + ** Shell When you invoke `shell' interactively, the *shell* buffer will now commit 24fa4ff944c63cda41ea8ad041f9e434603157fc Author: Michael Albinus Date: Tue Feb 3 09:24:57 2015 +0100 Further work on suppressing shell history in Tramp Fixes: debbugs:19731 * net/tramp-sh.el (tramp-histfile-override): Fix docstring. (tramp-open-shell, tramp-maybe-open-connection): Set also HISTFILESIZE and HISTSIZE when needed. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 77361bc..80ee86a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2015-02-03 Michael Albinus + + * net/tramp-sh.el (tramp-histfile-override): Fix docstring. + (tramp-open-shell, tramp-maybe-open-connection): Set also + HISTFILESIZE and HISTSIZE when needed. (Bug#19731) + 2015-02-02 Artur Malabarba * emacs-lisp/package.el (package--find-non-dependencies): New diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 8e519b1..9c8a222 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -71,10 +71,11 @@ When setting to a string, it redirects the shell history to that file. Be careful when setting to \"/dev/null\"; this might result in undesired results when using \"bash\" as shell. -The value t, the default value, unsets any setting of HISTFILE. -If you set this variable to nil, however, the *override* is -disabled, so the history will go to the default storage -location, e.g. \"$HOME/.sh_history\"." +The value t, the default value, unsets any setting of HISTFILE, +and sets both HISTFILESIZE and HISTSIZE to 0. If you set this +variable to nil, however, the *override* is disabled, so the +history will go to the default storage location, +e.g. \"$HOME/.sh_history\"." :group 'tramp :version "25.1" :type '(choice (const :tag "Do not override HISTFILE" nil) @@ -3901,15 +3902,16 @@ file exists and nonzero exit status otherwise." ;; when called as sh) on startup; this way, we avoid the startup ;; file clobbering $PS1. $PROMPT_COMMAND is another way to set ;; the prompt in /bin/bash, it must be discarded as well. + ;; $HISTFILE is set according to `tramp-histfile-override'. (tramp-send-command vec (format "exec env ENV='' %s PROMPT_COMMAND='' PS1=%s PS2='' PS3='' %s %s" - (if tramp-histfile-override - (concat - "HISTFILE=" - (if (stringp tramp-histfile-override) - (tramp-shell-quote-argument tramp-histfile-override) "")) - "") + (if (stringp tramp-histfile-override) + (format "HISTFILE=%s" + (tramp-shell-quote-argument tramp-histfile-override)) + (if tramp-histfile-override + "HISTFILE='' HISTFILESIZE=0 HISTSIZE=0" + "")) (tramp-shell-quote-argument tramp-end-of-output) shell (or extra-args "")) t)) @@ -4631,10 +4633,13 @@ connection if a previous connection has died for some reason." (delete-process p)) (setenv "TERM" tramp-terminal-type) (setenv "LC_ALL" "en_US.utf8") - (when tramp-histfile-override - (setenv "HISTFILE" - (and (stringp tramp-histfile-override) - tramp-histfile-override))) + (if (stringp tramp-histfile-override) + (setenv "HISTFILE" tramp-histfile-override) + (if tramp-histfile-override + (progn + (setenv "HISTFILE") + (setenv "HISTFILESIZE" "0") + (setenv "HISTSIZE" "0")))) (setenv "PROMPT_COMMAND") (setenv "PS1" tramp-initial-end-of-output) (let* ((target-alist (tramp-compute-multi-hops vec)) commit 1905cb763738396e16849006ffb07b24c9795b4d Author: Paul Eggert Date: Mon Feb 2 16:20:55 2015 -0800 Omit unnecessary var if GTK or NS * frame.c, frame.h (frame_default_tool_bar_height) [USE_GTK||HAVE_NS]: Now a constant zero on these platforms. diff --git a/src/ChangeLog b/src/ChangeLog index d3f667e..a1d4c7d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2015-02-03 Paul Eggert + + Omit unnecessary var if GTK or NS + * frame.c, frame.h (frame_default_tool_bar_height) [USE_GTK||HAVE_NS]: + Now a constant zero on these platforms. + 2015-02-01 Martin Rudalics * xdisp.c (Fwindow_text_pixel_size): Add optional argument BUFFER. diff --git a/src/frame.c b/src/frame.c index e4adfe8..890e897 100644 --- a/src/frame.c +++ b/src/frame.c @@ -68,7 +68,11 @@ static struct frame *last_nonminibuf_frame; bool frame_garbaged; /* The default tool bar height for future frames. */ +#if defined USE_GTK || defined HAVE_NS +enum { frame_default_tool_bar_height = 0 }; +#else int frame_default_tool_bar_height; +#endif #ifdef HAVE_WINDOW_SYSTEM static void x_report_frame_params (struct frame *, Lisp_Object *); diff --git a/src/frame.h b/src/frame.h index cb0044c..0c08d12 100644 --- a/src/frame.h +++ b/src/frame.h @@ -1100,7 +1100,9 @@ SET_FRAME_VISIBLE (struct frame *f, int v) extern Lisp_Object selected_frame; +#if ! (defined USE_GTK || defined HAVE_NS) extern int frame_default_tool_bar_height; +#endif extern struct frame *decode_window_system_frame (Lisp_Object); extern struct frame *decode_live_frame (Lisp_Object); commit c10828bd8520db83cc06a2ad5de6f8a1ad74b83c Author: Michael Albinus Date: Mon Feb 2 20:47:31 2015 +0100 * net/tramp-sh.el (tramp-histfile-override): Use t instead of `unset'. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 6e5b078..77361bc 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -8,8 +8,8 @@ 2015-02-02 Michael Albinus - * net/tramp-sh.el (tramp-histfile-override): Add another choice - 'unset. Use it as default. + * net/tramp-sh.el (tramp-histfile-override): Add another choice t. + Use it as default. (tramp-open-shell, tramp-maybe-open-connection): Support it. (Bug#19731) diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 20e32e9..8e519b1 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -65,21 +65,20 @@ files conditionalize this setup based on the TERM environment variable." :type 'string) ;;;###tramp-autoload -(defcustom tramp-histfile-override 'unset +(defcustom tramp-histfile-override t "When invoking a shell, override the HISTFILE with this value. -By default, it is set to the symbol `unset', which unsets any -setting of HISTFILE. When setting to a string, it redirects the -shell history to that file. Be careful when setting to -\"/dev/null\"; this might result in undesired results when using -\"bash\" as shell. +When setting to a string, it redirects the shell history to that +file. Be careful when setting to \"/dev/null\"; this might +result in undesired results when using \"bash\" as shell. +The value t, the default value, unsets any setting of HISTFILE. If you set this variable to nil, however, the *override* is disabled, so the history will go to the default storage location, e.g. \"$HOME/.sh_history\"." :group 'tramp :version "25.1" :type '(choice (const :tag "Do not override HISTFILE" nil) - (const :tag "Unset HISTFILE" unset) + (const :tag "Unset HISTFILE" t) (string :tag "Redirect to a file"))) ;;;###tramp-autoload @@ -3908,9 +3907,8 @@ file exists and nonzero exit status otherwise." (if tramp-histfile-override (concat "HISTFILE=" - (if (eq tramp-histfile-override 'unset) - "" - (tramp-shell-quote-argument tramp-histfile-override))) + (if (stringp tramp-histfile-override) + (tramp-shell-quote-argument tramp-histfile-override) "")) "") (tramp-shell-quote-argument tramp-end-of-output) shell (or extra-args "")) @@ -4635,7 +4633,7 @@ connection if a previous connection has died for some reason." (setenv "LC_ALL" "en_US.utf8") (when tramp-histfile-override (setenv "HISTFILE" - (and (not (eq tramp-histfile-override 'unset)) + (and (stringp tramp-histfile-override) tramp-histfile-override))) (setenv "PROMPT_COMMAND") (setenv "PS1" tramp-initial-end-of-output) commit 954ca0f017f62f52ee679f2aa68effb20c917278 Author: Michael Albinus Date: Mon Feb 2 16:42:01 2015 +0100 * net/tramp-sh.el (tramp-histfile-override): Use `unset' as default. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 382b653..6e5b078 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -8,7 +8,8 @@ 2015-02-02 Michael Albinus - * net/tramp-sh.el (tramp-histfile-override): Add another choice 'unset. + * net/tramp-sh.el (tramp-histfile-override): Add another choice + 'unset. Use it as default. (tramp-open-shell, tramp-maybe-open-connection): Support it. (Bug#19731) diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index ae0dad7..20e32e9 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -65,13 +65,13 @@ files conditionalize this setup based on the TERM environment variable." :type 'string) ;;;###tramp-autoload -(defcustom tramp-histfile-override "/dev/null" +(defcustom tramp-histfile-override 'unset "When invoking a shell, override the HISTFILE with this value. -By default, the HISTFILE is set to the \"/dev/null\" value, which -is special on Unix systems and indicates the shell history should -not be logged (this avoids clutter due to Tramp commands). - -The symbol `unset' removes any setting of HISTFILE. +By default, it is set to the symbol `unset', which unsets any +setting of HISTFILE. When setting to a string, it redirects the +shell history to that file. Be careful when setting to +\"/dev/null\"; this might result in undesired results when using +\"bash\" as shell. If you set this variable to nil, however, the *override* is disabled, so the history will go to the default storage @@ -79,8 +79,7 @@ location, e.g. \"$HOME/.sh_history\"." :group 'tramp :version "25.1" :type '(choice (const :tag "Do not override HISTFILE" nil) - (const :tag "Unset HISTFILE" 'unset) - (const :tag "Empty the history (/dev/null)" "/dev/null") + (const :tag "Unset HISTFILE" unset) (string :tag "Redirect to a file"))) ;;;###tramp-autoload commit 8ad2ee33a1107afe2d35e3ba4506d45dbb4c13d2 Author: Artur Malabarba Date: Mon Feb 2 13:26:40 2015 -0200 emacs-lisp/package.el (package--get-deps): Fix returning duplicates. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 1c0518b..382b653 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -4,6 +4,7 @@ function. (package-initialize): Use it to populate `package-selected-packages'. (package-menu-execute): Clean unnecessary `and'. + (package--get-deps): Fix returning duplicates. 2015-02-02 Michael Albinus diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index c4a658b..1627106 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -1428,9 +1428,9 @@ The file can either be a tar file or an Emacs Lisp file." when (assq name package-alist) collect name)) (indirect-deps (unless (eq only 'direct) - (apply #'append - direct-deps - (mapcar #'package--get-deps direct-deps))))) + (delete-dups + (cl-loop for p in direct-deps + append (package--get-deps p)))))) (cl-case only (direct direct-deps) (separate (list direct-deps indirect-deps)) commit ef6fa2fe0dbc09a637239b039bce5668c5215321 Author: Artur Malabarba Date: Sun Feb 1 21:08:35 2015 -0200 emacs-lisp/package.el (package-menu-execute): Clean unnecessary `and'. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index dd8605a..1c0518b 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -3,6 +3,7 @@ * emacs-lisp/package.el (package--find-non-dependencies): New function. (package-initialize): Use it to populate `package-selected-packages'. + (package-menu-execute): Clean unnecessary `and'. 2015-02-02 Michael Albinus diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 9a29d63..c4a658b 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -2323,7 +2323,7 @@ Optional argument NOQUERY non-nil means do not ask the user to confirm." (mapconcat #'package-desc-full-name install-list ", "))))) (mapc (lambda (p) - (package-install p (and (null (package-installed-p p)) 1))) + (package-install p (null (package-installed-p p)))) install-list))) ;; Delete packages, prompting if necessary. (when delete-list commit 219119e906f2e49e37567f29a7d9a1f82ece1760 Author: Michael Albinus Date: Mon Feb 2 13:49:57 2015 +0100 Fix last tramp-sh.el commit diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 9a5be77..ae0dad7 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -3911,7 +3911,7 @@ file exists and nonzero exit status otherwise." "HISTFILE=" (if (eq tramp-histfile-override 'unset) "" - (tramp-shell-quote-argument tramp-histfile-override)))) + (tramp-shell-quote-argument tramp-histfile-override))) "") (tramp-shell-quote-argument tramp-end-of-output) shell (or extra-args "")) commit fe188b2e4fd66dfba7f56bbe7c2fb32faef6f5f8 Author: Artur Malabarba Date: Mon Feb 2 11:55:24 2015 +0000 emacs-lisp/package.el (package-initialize): Populate `package-selected-packages'. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index fe0a3db..dd8605a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2015-02-02 Artur Malabarba + + * emacs-lisp/package.el (package--find-non-dependencies): New + function. + (package-initialize): Use it to populate `package-selected-packages'. + 2015-02-02 Michael Albinus * net/tramp-sh.el (tramp-histfile-override): Add another choice 'unset. diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index d95bc5e..9a29d63 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -295,8 +295,8 @@ packages in `package-directory-list'." (let (result) (dolist (f load-path) (and (stringp f) - (equal (file-name-nondirectory f) "site-lisp") - (push (expand-file-name "elpa" f) result))) + (equal (file-name-nondirectory f) "site-lisp") + (push (expand-file-name "elpa" f) result))) (nreverse result)) "List of additional directories containing Emacs Lisp packages. Each directory name should be absolute. @@ -320,8 +320,8 @@ it is unsigned. This also applies to the \"archive-contents\" file that lists the contents of the archive." :type '(choice (const nil :tag "Never") - (const allow-unsigned :tag "Allow unsigned") - (const t :tag "Check always")) + (const allow-unsigned :tag "Allow unsigned") + (const t :tag "Check always")) :risky t :group 'package :version "24.4") @@ -387,20 +387,20 @@ Slots: `version' Version of the package, as a version list. `summary' Short description of the package, typically taken from - the first line of the file. + the first line of the file. `reqs' Requirements of the package. A list of (PACKAGE - VERSION-LIST) naming the dependent package and the minimum - required version. + VERSION-LIST) naming the dependent package and the minimum + required version. `kind' The distribution format of the package. Currently, it is - either `single' or `tar'. + either `single' or `tar'. `archive' The name of the archive (as a string) whence this - package came. + package came. `dir' The directory where the package is installed (if installed), - `builtin' if it is built-in, or nil otherwise. + `builtin' if it is built-in, or nil otherwise. `extras' Optional alist of additional keyword-value pairs. @@ -477,32 +477,32 @@ This is, approximately, the inverse of `version-to-list'. "" (let ((str-list (list "." (int-to-string (car vlist))))) (dolist (num (cdr vlist)) - (cond - ((>= num 0) - (push (int-to-string num) str-list) - (push "." str-list)) - ((< num -4) - (error "Invalid version list `%s'" vlist)) - (t - ;; pre, or beta, or alpha - (cond ((equal "." (car str-list)) - (pop str-list)) - ((not (string-match "[0-9]+" (car str-list))) - (error "Invalid version list `%s'" vlist))) - (push (cond ((= num -1) "pre") - ((= num -2) "beta") - ((= num -3) "alpha") + (cond + ((>= num 0) + (push (int-to-string num) str-list) + (push "." str-list)) + ((< num -4) + (error "Invalid version list `%s'" vlist)) + (t + ;; pre, or beta, or alpha + (cond ((equal "." (car str-list)) + (pop str-list)) + ((not (string-match "[0-9]+" (car str-list))) + (error "Invalid version list `%s'" vlist))) + (push (cond ((= num -1) "pre") + ((= num -2) "beta") + ((= num -3) "alpha") ((= num -4) "snapshot")) - str-list)))) + str-list)))) (if (equal "." (car str-list)) - (pop str-list)) + (pop str-list)) (apply 'concat (nreverse str-list))))) (defun package-load-descriptor (pkg-dir) "Load the description file in directory PKG-DIR." (let ((pkg-file (expand-file-name (package--description-file pkg-dir) pkg-dir)) - (signed-file (concat pkg-dir ".signed"))) + (signed-file (concat pkg-dir ".signed"))) (when (file-exists-p pkg-file) (with-temp-buffer (insert-file-contents pkg-file) @@ -510,8 +510,8 @@ This is, approximately, the inverse of `version-to-list'. (let ((pkg-desc (package-process-define-package (read (current-buffer)) pkg-file))) (setf (package-desc-dir pkg-desc) pkg-dir) - (if (file-exists-p signed-file) - (setf (package-desc-signed pkg-desc) t)) + (if (file-exists-p signed-file) + (setf (package-desc-signed pkg-desc) t)) pkg-desc))))) (defun package-load-all-descriptors () @@ -551,11 +551,11 @@ If RELOAD is non-nil, also `load' any files inside the package which correspond to previously loaded files (those returned by `package--list-loaded-files')." (let* ((name (package-desc-name pkg-desc)) - (pkg-dir (package-desc-dir pkg-desc)) + (pkg-dir (package-desc-dir pkg-desc)) (pkg-dir-dir (file-name-as-directory pkg-dir))) (unless pkg-dir (error "Internal error: unable to find directory for `%s'" - (package-desc-full-name pkg-desc))) + (package-desc-full-name pkg-desc))) ;; Add to load path, add autoloads, and activate the package. (let* ((old-lp load-path) (autoloads-file (expand-file-name @@ -575,7 +575,7 @@ correspond to previously loaded files (those returned by ;; depends on this new definition, not doing this update would cause ;; compilation errors and break the installation. (with-demoted-errors "Error in package-activate-1: %s" - (mapc (lambda (feature) (load feature nil t)) + (mapc (lambda (feature) (load feature nil t)) ;; Skip autoloads file since we already evaluated it above. (remove (file-truename autoloads-file) loaded-files-list)))) ;; Add info node. @@ -674,12 +674,12 @@ If FORCE is true, (re-)activate it if it's already activated." (dolist (req (package-desc-reqs pkg-vec)) (unless (package-activate (car req)) (throw 'dep-failure req)))))) - (if fail - (warn "Unable to activate package `%s'. + (if fail + (warn "Unable to activate package `%s'. Required package `%s-%s' is unavailable" - package (car fail) (package-version-join (cadr fail))) - ;; If all goes well, activate the package itself. - (package-activate-1 pkg-vec force))))))) + package (car fail) (package-version-join (cadr fail))) + ;; If all goes well, activate the package itself. + (package-activate-1 pkg-vec force))))))) (defun define-package (_name-string _version-string &optional _docstring _requirements @@ -722,17 +722,17 @@ EXTRA-PROPERTIES is currently unused." (unless (file-exists-p file) (write-region (concat ";;; " (file-name-nondirectory file) - " --- automatically extracted autoloads\n" - ";;\n" - ";;; Code:\n" + " --- automatically extracted autoloads\n" + ";;\n" + ";;; Code:\n" "(add-to-list 'load-path (or (file-name-directory #$) (car load-path)))\n" - " \n;; Local Variables:\n" - ";; version-control: never\n" - ";; no-byte-compile: t\n" - ";; no-update-autoloads: t\n" - ";; End:\n" - ";;; " (file-name-nondirectory file) - " ends here\n") + " \n;; Local Variables:\n" + ";; version-control: never\n" + ";; no-byte-compile: t\n" + ";; no-update-autoloads: t\n" + ";; End:\n" + ";;; " (file-name-nondirectory file) + " ends here\n") nil file nil 'silent)) file) @@ -741,10 +741,10 @@ EXTRA-PROPERTIES is currently unused." (defun package-generate-autoloads (name pkg-dir) (let* ((auto-name (format "%s-autoloads.el" name)) - ;;(ignore-name (concat name "-pkg.el")) - (generated-autoload-file (expand-file-name auto-name pkg-dir)) + ;;(ignore-name (concat name "-pkg.el")) + (generated-autoload-file (expand-file-name auto-name pkg-dir)) (backup-inhibited t) - (version-control 'never)) + (version-control 'never)) (package-autoload-ensure-default-file generated-autoload-file) (update-directory-autoloads pkg-dir) (let ((buf (find-buffer-visiting generated-autoload-file))) @@ -764,15 +764,15 @@ untar into a directory named DIR; otherwise, signal an error." (tar-mode) ;; Make sure everything extracts into DIR. (let ((regexp (concat "\\`" (regexp-quote (expand-file-name dir)) "/")) - (case-fold-search (memq system-type '(windows-nt ms-dos cygwin)))) + (case-fold-search (memq system-type '(windows-nt ms-dos cygwin)))) (dolist (tar-data tar-parse-info) (let ((name (expand-file-name (tar-header-name tar-data)))) - (or (string-match regexp name) - ;; Tarballs created by some utilities don't list - ;; directories with a trailing slash (Bug#13136). - (and (string-equal dir name) - (eq (tar-header-link-type tar-data) 5)) - (error "Package does not untar cleanly into directory %s/" dir))))) + (or (string-match regexp name) + ;; Tarballs created by some utilities don't list + ;; directories with a trailing slash (Bug#13136). + (and (string-equal dir name) + (eq (tar-header-link-type tar-data) 5)) + (error "Package does not untar cleanly into directory %s/" dir))))) (tar-untar-buffer)) (defun package-generate-description-file (pkg-desc pkg-file) @@ -811,7 +811,7 @@ untar into a directory named DIR; otherwise, signal an error." "Install the contents of the current buffer as a package." (let* ((name (package-desc-name pkg-desc)) (dirname (package-desc-full-name pkg-desc)) - (pkg-dir (expand-file-name dirname package-user-dir))) + (pkg-dir (expand-file-name dirname package-user-dir))) (pcase (package-desc-kind pkg-desc) (`dir (make-directory pkg-dir t) @@ -880,28 +880,28 @@ buffer is killed afterwards. Return the last value in BODY." (declare (indent 2) (debug t)) `(with-temp-buffer (if (string-match-p "\\`https?:" ,location) - (url-insert-file-contents (concat ,location ,file)) + (url-insert-file-contents (concat ,location ,file)) (unless (file-name-absolute-p ,location) - (error "Archive location %s is not an absolute file name" - ,location)) + (error "Archive location %s is not an absolute file name" + ,location)) (insert-file-contents (expand-file-name ,file ,location))) ,@body)) (defun package--archive-file-exists-p (location file) (let ((http (string-match "\\`https?:" location))) (if http - (progn - (require 'url-http) - (url-http-file-exists-p (concat location file))) + (progn + (require 'url-http) + (url-http-file-exists-p (concat location file))) (file-exists-p (expand-file-name file location))))) (declare-function epg-make-context "epg" - (&optional protocol armor textmode include-certs - cipher-algorithm - digest-algorithm - compress-algorithm)) + (&optional protocol armor textmode include-certs + cipher-algorithm + digest-algorithm + compress-algorithm)) (declare-function epg-verify-string "epg" (context signature - &optional signed-text)) + &optional signed-text)) (declare-function epg-context-result-for "epg" (context name)) (declare-function epg-signature-status "epg" (signature)) (declare-function epg-signature-to-string "epg" (signature)) @@ -910,13 +910,13 @@ buffer is killed afterwards. Return the last value in BODY." (unless (equal (epg-context-error-output context) "") (with-output-to-temp-buffer "*Error*" (with-current-buffer standard-output - (if (epg-context-result-for context 'verify) - (insert (format "Failed to verify signature %s:\n" sig-file) - (mapconcat #'epg-signature-to-string - (epg-context-result-for context 'verify) - "\n")) - (insert (format "Error while verifying signature %s:\n" sig-file))) - (insert "\nCommand output:\n" (epg-context-error-output context)))))) + (if (epg-context-result-for context 'verify) + (insert (format "Failed to verify signature %s:\n" sig-file) + (mapconcat #'epg-signature-to-string + (epg-context-result-for context 'verify) + "\n")) + (insert (format "Error while verifying signature %s:\n" sig-file))) + (insert "\nCommand output:\n" (epg-context-error-output context)))))) (defun package--check-signature (location file) "Check signature of the current buffer. @@ -925,10 +925,10 @@ GnuPG keyring is located under \"gnupg\" in `package-user-dir'." (homedir (expand-file-name "gnupg" package-user-dir)) (sig-file (concat file ".sig")) (sig-content (package--with-work-buffer location sig-file - (buffer-string)))) + (buffer-string)))) (setf (epg-context-home-directory context) homedir) (condition-case error - (epg-verify-string context sig-content (buffer-string)) + (epg-verify-string context sig-content (buffer-string)) (error (package--display-verify-error context sig-file) (signal (car error) (cdr error)))) @@ -936,18 +936,18 @@ GnuPG keyring is located under \"gnupg\" in `package-user-dir'." ;; The .sig file may contain multiple signatures. Success if one ;; of the signatures is good. (dolist (sig (epg-context-result-for context 'verify)) - (if (eq (epg-signature-status sig) 'good) - (push sig good-signatures) - ;; If package-check-signature is allow-unsigned, don't - ;; signal error when we can't verify signature because of - ;; missing public key. Other errors are still treated as - ;; fatal (bug#17625). - (unless (and (eq package-check-signature 'allow-unsigned) - (eq (epg-signature-status sig) 'no-pubkey)) - (setq had-fatal-error t)))) + (if (eq (epg-signature-status sig) 'good) + (push sig good-signatures) + ;; If package-check-signature is allow-unsigned, don't + ;; signal error when we can't verify signature because of + ;; missing public key. Other errors are still treated as + ;; fatal (bug#17625). + (unless (and (eq package-check-signature 'allow-unsigned) + (eq (epg-signature-status sig) 'no-pubkey)) + (setq had-fatal-error t)))) (when (and (null good-signatures) had-fatal-error) - (package--display-verify-error context sig-file) - (error "Failed to verify signature %s" sig-file)) + (package--display-verify-error context sig-file) + (error "Failed to verify signature %s" sig-file)) good-signatures))) (defun package-install-from-archive (pkg-desc) @@ -956,37 +956,37 @@ GnuPG keyring is located under \"gnupg\" in `package-user-dir'." (when (eq (package-desc-kind pkg-desc) 'dir) (error "Can't install directory package from archive")) (let* ((location (package-archive-base pkg-desc)) - (file (concat (package-desc-full-name pkg-desc) - (package-desc-suffix pkg-desc))) - (sig-file (concat file ".sig")) - good-signatures pkg-descs) + (file (concat (package-desc-full-name pkg-desc) + (package-desc-suffix pkg-desc))) + (sig-file (concat file ".sig")) + good-signatures pkg-descs) (package--with-work-buffer location file (if (and package-check-signature - (not (member (package-desc-archive pkg-desc) - package-unsigned-archives))) - (if (package--archive-file-exists-p location sig-file) - (setq good-signatures (package--check-signature location file)) - (unless (eq package-check-signature 'allow-unsigned) - (error "Unsigned package: `%s'" - (package-desc-name pkg-desc))))) + (not (member (package-desc-archive pkg-desc) + package-unsigned-archives))) + (if (package--archive-file-exists-p location sig-file) + (setq good-signatures (package--check-signature location file)) + (unless (eq package-check-signature 'allow-unsigned) + (error "Unsigned package: `%s'" + (package-desc-name pkg-desc))))) (package-unpack pkg-desc)) ;; Here the package has been installed successfully, mark it as ;; signed if appropriate. (when good-signatures ;; Write out good signatures into NAME-VERSION.signed file. (write-region (mapconcat #'epg-signature-to-string good-signatures "\n") - nil - (expand-file-name - (concat (package-desc-full-name pkg-desc) - ".signed") - package-user-dir) + nil + (expand-file-name + (concat (package-desc-full-name pkg-desc) + ".signed") + package-user-dir) nil 'silent) ;; Update the old pkg-desc which will be shown on the description buffer. (setf (package-desc-signed pkg-desc) t) ;; Update the new (activated) pkg-desc as well. (setq pkg-descs (cdr (assq (package-desc-name pkg-desc) package-alist))) (if pkg-descs - (setf (package-desc-signed (car pkg-descs)) t))))) + (setf (package-desc-signed (car pkg-descs)) t))))) (defvar package--initialized nil) @@ -997,8 +997,8 @@ MIN-VERSION should be a version list." (or (let ((pkg-descs (cdr (assq package package-alist)))) (and pkg-descs - (version-list-<= min-version - (package-desc-version (car pkg-descs))))) + (version-list-<= min-version + (package-desc-version (car pkg-descs))))) ;; Also check built-in packages. (package-built-in-p package min-version))) @@ -1024,7 +1024,7 @@ SEEN is used internally to detect infinite recursion." ;; older bar-1.3). (dolist (elt requirements) (let* ((next-pkg (car elt)) - (next-version (cadr elt)) + (next-version (cadr elt)) (already ())) (dolist (pkg packages) (if (eq next-pkg (package-desc-name pkg)) @@ -1048,9 +1048,9 @@ SEEN is used internally to detect infinite recursion." ((package-installed-p next-pkg next-version) nil) (t - ;; A package is required, but not installed. It might also be - ;; blocked via `package-load-list'. - (let ((pkg-descs (cdr (assq next-pkg package-archive-contents))) + ;; A package is required, but not installed. It might also be + ;; blocked via `package-load-list'. + (let ((pkg-descs (cdr (assq next-pkg package-archive-contents))) (found nil) (problem nil)) (while (and pkg-descs (not found)) @@ -1074,14 +1074,14 @@ but version %s required" (format "Required package '%s' is disabled" next-pkg))))) (t (setq found pkg-desc))))) - (unless found + (unless found (if problem (error "%s" problem) (error "Package `%s-%s' is unavailable" next-pkg (package-version-join next-version)))) - (setq packages - (package-compute-transaction (cons found packages) - (package-desc-reqs found) + (setq packages + (package-compute-transaction (cons found packages) + (package-desc-reqs found) (cons found seen)))))))) packages) @@ -1089,13 +1089,13 @@ but version %s required" "Read a Lisp expression from STR. Signal an error if the entire string was not used." (let* ((read-data (read-from-string str)) - (more-left - (condition-case nil - ;; The call to `ignore' suppresses a compiler warning. - (progn (ignore (read-from-string - (substring str (cdr read-data)))) - t) - (end-of-file nil)))) + (more-left + (condition-case nil + ;; The call to `ignore' suppresses a compiler warning. + (progn (ignore (read-from-string + (substring str (cdr read-data)))) + t) + (end-of-file nil)))) (if more-left (error "Can't read whole string") (car read-data)))) @@ -1107,12 +1107,12 @@ Will throw an error if the archive version is too new." (let ((filename (expand-file-name file package-user-dir))) (when (file-exists-p filename) (with-temp-buffer - (insert-file-contents-literally filename) - (let ((contents (read (current-buffer)))) - (if (> (car contents) package-archive-version) - (error "Package archive version %d is higher than %d" - (car contents) package-archive-version)) - (cdr contents)))))) + (insert-file-contents-literally filename) + (let ((contents (read (current-buffer)))) + (if (> (car contents) package-archive-version) + (error "Package archive version %d is higher than %d" + (car contents) package-archive-version)) + (cdr contents)))))) (defun package-read-all-archive-contents () "Re-read `archive-contents', if it exists. @@ -1128,10 +1128,10 @@ If the archive version is too new, signal an error." ;; Version 1 of 'archive-contents' is identical to our internal ;; representation. (let* ((contents-file (format "archives/%s/archive-contents" archive)) - (contents (package--read-archive-file contents-file))) + (contents (package--read-archive-file contents-file))) (when contents (dolist (package contents) - (package--add-to-archive-contents package archive))))) + (package--add-to-archive-contents package archive))))) ;; Package descriptor objects used inside the "archive-contents" file. ;; Changing this defstruct implies changing the format of the @@ -1250,8 +1250,8 @@ Otherwise return nil." (when (string-match "\\`[ \t]*[$]Revision:[ \t]+" str) (setq str (substring str (match-end 0)))) (condition-case nil - (if (version-to-list str) - str) + (if (version-to-list str) + str) (error nil)))) (declare-function lm-homepage "lisp-mnt" (&optional file)) @@ -1285,8 +1285,8 @@ boundaries." (unless (re-search-forward "^;;; \\([^ ]*\\)\\.el ---[ \t]*\\(.*?\\)[ \t]*\\(-\\*-.*-\\*-[ \t]*\\)?$" nil t) (error "Package lacks a file header")) (let ((file-name (match-string-no-properties 1)) - (desc (match-string-no-properties 2)) - (start (line-beginning-position))) + (desc (match-string-no-properties 2)) + (start (line-beginning-position))) (unless (search-forward (concat ";;; " file-name ".el ends here")) (error "Package lacks a terminating comment")) ;; Try to include a trailing newline. @@ -1295,15 +1295,15 @@ boundaries." (require 'lisp-mnt) ;; Use some headers we've invented to drive the process. (let* ((requires-str (lm-header "package-requires")) - ;; Prefer Package-Version; if defined, the package author - ;; probably wants us to use it. Otherwise try Version. - (pkg-version - (or (package-strip-rcs-id (lm-header "package-version")) - (package-strip-rcs-id (lm-header "version")))) + ;; Prefer Package-Version; if defined, the package author + ;; probably wants us to use it. Otherwise try Version. + (pkg-version + (or (package-strip-rcs-id (lm-header "package-version")) + (package-strip-rcs-id (lm-header "version")))) (homepage (lm-homepage))) (unless pkg-version - (error - "Package lacks a \"Version\" or \"Package-Version\" header")) + (error + "Package lacks a \"Version\" or \"Package-Version\" header")) (package-desc-from-define file-name pkg-version desc (if requires-str @@ -1564,33 +1564,33 @@ ARCHIVE should be a cons cell of the form (NAME . LOCATION), similar to an entry in `package-alist'. Save the cached copy to \"archives/NAME/archive-contents\" in `package-user-dir'." (let ((dir (expand-file-name (format "archives/%s" (car archive)) - package-user-dir)) - (sig-file (concat file ".sig")) - good-signatures) + package-user-dir)) + (sig-file (concat file ".sig")) + good-signatures) (package--with-work-buffer (cdr archive) file ;; Check signature of archive-contents, if desired. (if (and package-check-signature - (not (member archive package-unsigned-archives))) - (if (package--archive-file-exists-p (cdr archive) sig-file) - (setq good-signatures (package--check-signature (cdr archive) - file)) - (unless (eq package-check-signature 'allow-unsigned) - (error "Unsigned archive `%s'" - (car archive))))) + (not (member archive package-unsigned-archives))) + (if (package--archive-file-exists-p (cdr archive) sig-file) + (setq good-signatures (package--check-signature (cdr archive) + file)) + (unless (eq package-check-signature 'allow-unsigned) + (error "Unsigned archive `%s'" + (car archive))))) ;; Read the retrieved buffer to make sure it is valid (e.g. it ;; may fetch a URL redirect page). (when (listp (read (current-buffer))) - (make-directory dir t) + (make-directory dir t) (write-region nil nil (expand-file-name file dir) nil 'silent))) (when good-signatures ;; Write out good signatures into archive-contents.signed file. (write-region (mapconcat #'epg-signature-to-string good-signatures "\n") - nil - (expand-file-name (concat file ".signed") dir) + nil + (expand-file-name (concat file ".signed") dir) nil 'silent)))) (declare-function epg-check-configuration "epg-config" - (config &optional minimum-version)) + (config &optional minimum-version)) (declare-function epg-configuration "epg-config" ()) (declare-function epg-import-keys-from-file "epg" (context keys)) @@ -1600,7 +1600,7 @@ similar to an entry in `package-alist'. Save the cached copy to (interactive "fFile: ") (setq file (expand-file-name file)) (let ((context (epg-make-context 'OpenPGP)) - (homedir (expand-file-name "gnupg" package-user-dir))) + (homedir (expand-file-name "gnupg" package-user-dir))) (with-file-modes 448 (make-directory homedir t)) (setf (epg-context-home-directory context) homedir) @@ -1618,20 +1618,35 @@ makes them available for download." (unless (file-exists-p package-user-dir) (make-directory package-user-dir t)) (let ((default-keyring (expand-file-name "package-keyring.gpg" - data-directory))) + data-directory))) (when (and package-check-signature (file-exists-p default-keyring)) (condition-case-unless-debug error - (progn - (epg-check-configuration (epg-configuration)) - (package-import-keyring default-keyring)) - (error (message "Cannot import default keyring: %S" (cdr error)))))) + (progn + (epg-check-configuration (epg-configuration)) + (package-import-keyring default-keyring)) + (error (message "Cannot import default keyring: %S" (cdr error)))))) (dolist (archive package-archives) (condition-case-unless-debug nil - (package--download-one-archive archive "archive-contents") + (package--download-one-archive archive "archive-contents") (error (message "Failed to download `%s' archive." - (car archive))))) + (car archive))))) (package-read-all-archive-contents)) +(defun package--find-non-dependencies () + "Return a list of installed packages which are not dependencies. +Finds all packages in `package-alist' which are not dependencies +of any other packages. +Used to populate `package-selected-packages'." + (let ((dep-list + (delete-dups + (apply #'append + (mapcar (lambda (p) (mapcar #'car (package-desc-reqs (cadr p)))) + package-alist))))) + (cl-loop for p in package-alist + for name = (car p) + unless (memq name dep-list) + collect name))) + ;;;###autoload (defun package-initialize (&optional no-activate) "Load Emacs Lisp packages, and activate them. @@ -1644,6 +1659,9 @@ If optional arg NO-ACTIVATE is non-nil, don't activate packages." (unless no-activate (dolist (elt package-alist) (package-activate (car elt)))) + (when (and package-alist (not package-selected-packages)) + (customize-save-variable 'package-selected-packages + (package--find-non-dependencies))) (setq package--initialized t)) @@ -1674,10 +1692,10 @@ If optional arg NO-ACTIVATE is non-nil, don't activate packages." (if (not (or (package-desc-p package) (and package (symbolp package)))) (message "No package specified") (help-setup-xref (list #'describe-package package) - (called-interactively-p 'interactive)) + (called-interactively-p 'interactive)) (with-help-window (help-buffer) (with-current-buffer standard-output - (describe-package-1 package))))) + (describe-package-1 package))))) (defun describe-package-1 (pkg) (require 'lisp-mnt) @@ -1708,64 +1726,64 @@ If optional arg NO-ACTIVATE is non-nil, don't activate packages." (insert " " (propertize "Status" 'font-lock-face 'bold) ": ") (cond (built-in - (insert (propertize (capitalize status) + (insert (propertize (capitalize status) 'font-lock-face 'font-lock-builtin-face) ".")) - (pkg-dir - (insert (propertize (if (equal status "unsigned") - "Installed" - (capitalize status)) ;FIXME: Why comment-face? - 'font-lock-face 'font-lock-comment-face)) - (insert " in `") - ;; Todo: Add button for uninstalling. - (help-insert-xref-button (abbreviate-file-name + (pkg-dir + (insert (propertize (if (equal status "unsigned") + "Installed" + (capitalize status)) ;FIXME: Why comment-face? + 'font-lock-face 'font-lock-comment-face)) + (insert " in `") + ;; Todo: Add button for uninstalling. + (help-insert-xref-button (abbreviate-file-name (file-name-as-directory pkg-dir)) - 'help-package-def pkg-dir) - (if (and (package-built-in-p name) + 'help-package-def pkg-dir) + (if (and (package-built-in-p name) (not (package-built-in-p name version))) - (insert "',\n shadowing a " - (propertize "built-in package" - 'font-lock-face 'font-lock-builtin-face)) - (insert "'")) - (if signed - (insert ".") - (insert " (unsigned)."))) - (installable + (insert "',\n shadowing a " + (propertize "built-in package" + 'font-lock-face 'font-lock-builtin-face)) + (insert "'")) + (if signed + (insert ".") + (insert " (unsigned)."))) + (installable (insert (capitalize status)) - (insert " from " (format "%s" archive)) - (insert " -- ") + (insert " from " (format "%s" archive)) + (insert " -- ") (package-make-button "Install" 'action 'package-install-button-action 'package-desc desc)) - (t (insert (capitalize status) "."))) + (t (insert (capitalize status) "."))) (insert "\n") (insert " " (propertize "Archive" 'font-lock-face 'bold) - ": " (or archive "n/a") "\n") + ": " (or archive "n/a") "\n") (and version - (insert " " - (propertize "Version" 'font-lock-face 'bold) ": " + (insert " " + (propertize "Version" 'font-lock-face 'bold) ": " (package-version-join version) "\n")) (setq reqs (if desc (package-desc-reqs desc))) (when reqs (insert " " (propertize "Requires" 'font-lock-face 'bold) ": ") (let ((first t) - name vers text) - (dolist (req reqs) - (setq name (car req) - vers (cadr req) - text (format "%s-%s" (symbol-name name) - (package-version-join vers))) - (cond (first (setq first nil)) - ((>= (+ 2 (current-column) (length text)) - (window-width)) - (insert ",\n ")) - (t (insert ", "))) - (help-insert-xref-button text 'help-package name)) - (insert "\n"))) + name vers text) + (dolist (req reqs) + (setq name (car req) + vers (cadr req) + text (format "%s-%s" (symbol-name name) + (package-version-join vers))) + (cond (first (setq first nil)) + ((>= (+ 2 (current-column) (length text)) + (window-width)) + (insert ",\n ")) + (t (insert ", "))) + (help-insert-xref-button text 'help-package name)) + (insert "\n"))) (insert " " (propertize "Summary" 'font-lock-face 'bold) - ": " (if desc (package-desc-summary desc)) "\n") + ": " (if desc (package-desc-summary desc)) "\n") (when homepage (insert " " (propertize "Homepage" 'font-lock-face 'bold) ": ") (help-insert-xref-button homepage 'help-url homepage) @@ -1807,23 +1825,23 @@ If optional arg NO-ACTIVATE is non-nil, don't activate packages." (insert "\n") (if built-in - ;; For built-in packages, insert the commentary. - (let ((fn (locate-file (format "%s.el" name) load-path - load-file-rep-suffixes)) - (opoint (point))) - (insert (or (lm-commentary fn) "")) - (save-excursion - (goto-char opoint) - (when (re-search-forward "^;;; Commentary:\n" nil t) - (replace-match "")) - (while (re-search-forward "^\\(;+ ?\\)" nil t) - (replace-match "")))) + ;; For built-in packages, insert the commentary. + (let ((fn (locate-file (format "%s.el" name) load-path + load-file-rep-suffixes)) + (opoint (point))) + (insert (or (lm-commentary fn) "")) + (save-excursion + (goto-char opoint) + (when (re-search-forward "^;;; Commentary:\n" nil t) + (replace-match "")) + (while (re-search-forward "^\\(;+ ?\\)" nil t) + (replace-match "")))) (let ((readme (expand-file-name (format "%s-readme.txt" name) - package-user-dir)) - readme-string) - ;; For elpa packages, try downloading the commentary. If that - ;; fails, try an existing readme file in `package-user-dir'. - (cond ((condition-case nil + package-user-dir)) + readme-string) + ;; For elpa packages, try downloading the commentary. If that + ;; fails, try an existing readme file in `package-user-dir'. + (cond ((condition-case nil (save-excursion (package--with-work-buffer (package-archive-base desc) @@ -1837,11 +1855,11 @@ If optional arg NO-ACTIVATE is non-nil, don't activate packages." nil 'silent) (setq readme-string (buffer-string)) t)) - (error nil)) - (insert readme-string)) - ((file-readable-p readme) - (insert-file-contents readme) - (goto-char (point-max)))))))) + (error nil)) + (insert readme-string)) + ((file-readable-p readme) + (insert-file-contents readme) + (goto-char (point-max)))))))) (defun package-install-button-action (button) (let ((pkg-desc (button-get button 'package-desc))) @@ -1870,7 +1888,7 @@ If optional arg NO-ACTIVATE is non-nil, don't activate packages." (defvar package-menu-mode-map (let ((map (make-sparse-keymap)) - (menu-map (make-sparse-keymap "Package"))) + (menu-map (make-sparse-keymap "Package"))) (set-keymap-parent map tabulated-list-mode-map) (define-key map "\C-m" 'package-menu-describe-package) (define-key map "u" 'package-menu-mark-unmark) @@ -1887,54 +1905,54 @@ If optional arg NO-ACTIVATE is non-nil, don't activate packages." (define-key map [menu-bar package-menu] (cons "Package" menu-map)) (define-key menu-map [mq] '(menu-item "Quit" quit-window - :help "Quit package selection")) + :help "Quit package selection")) (define-key menu-map [s1] '("--")) (define-key menu-map [mn] '(menu-item "Next" next-line - :help "Next Line")) + :help "Next Line")) (define-key menu-map [mp] '(menu-item "Previous" previous-line - :help "Previous Line")) + :help "Previous Line")) (define-key menu-map [s2] '("--")) (define-key menu-map [mu] '(menu-item "Unmark" package-menu-mark-unmark - :help "Clear any marks on a package and move to the next line")) + :help "Clear any marks on a package and move to the next line")) (define-key menu-map [munm] '(menu-item "Unmark Backwards" package-menu-backup-unmark - :help "Back up one line and clear any marks on that package")) + :help "Back up one line and clear any marks on that package")) (define-key menu-map [md] '(menu-item "Mark for Deletion" package-menu-mark-delete - :help "Mark a package for deletion and move to the next line")) + :help "Mark a package for deletion and move to the next line")) (define-key menu-map [mi] '(menu-item "Mark for Install" package-menu-mark-install - :help "Mark a package for installation and move to the next line")) + :help "Mark a package for installation and move to the next line")) (define-key menu-map [mupgrades] '(menu-item "Mark Upgradable Packages" package-menu-mark-upgrades - :help "Mark packages that have a newer version for upgrading")) + :help "Mark packages that have a newer version for upgrading")) (define-key menu-map [s3] '("--")) (define-key menu-map [mf] '(menu-item "Filter Package List..." package-menu-filter - :help "Filter package selection (q to go back)")) + :help "Filter package selection (q to go back)")) (define-key menu-map [mg] '(menu-item "Update Package List" revert-buffer - :help "Update the list of packages")) + :help "Update the list of packages")) (define-key menu-map [mr] '(menu-item "Refresh Package List" package-menu-refresh - :help "Download the ELPA archive")) + :help "Download the ELPA archive")) (define-key menu-map [s4] '("--")) (define-key menu-map [mt] '(menu-item "Mark Obsolete Packages" package-menu-mark-obsolete-for-deletion - :help "Mark all obsolete packages for deletion")) + :help "Mark all obsolete packages for deletion")) (define-key menu-map [mx] '(menu-item "Execute Actions" package-menu-execute - :help "Perform all the marked actions")) + :help "Perform all the marked actions")) (define-key menu-map [s5] '("--")) (define-key menu-map [mh] '(menu-item "Help" package-menu-quick-help - :help "Show short key binding help for package-menu-mode")) + :help "Show short key binding help for package-menu-mode")) (define-key menu-map [mc] '(menu-item "Describe Package" package-menu-describe-package - :help "Display information about this package")) + :help "Display information about this package")) map) "Local keymap for `package-menu-mode' buffers.") @@ -2029,8 +2047,8 @@ KEYWORDS should be nil or a list of keywords." (package--has-keyword-p (package--from-builtin elt) keywords) (or package-list-unversioned (package--bi-desc-version (cdr elt))) - (or (eq packages t) (memq name packages))) - (package--push (package--from-builtin elt) "built-in" info-list))) + (or (eq packages t) (memq name packages))) + (package--push (package--from-builtin elt) "built-in" info-list))) ;; Available and disabled packages: (dolist (elt package-archive-contents) @@ -2075,7 +2093,7 @@ Built-in packages are converted with `package--from-builtin'." (when (and (not (eq name 'emacs)) ; Hide the `emacs' package. (or package-list-unversioned (package--bi-desc-version (cdr elt))) - (or (eq packages t) (memq name packages))) + (or (eq packages t) (memq name packages))) (funcall function (package--from-builtin elt)))) ;; Available and disabled packages: @@ -2126,8 +2144,8 @@ shown." PKG has the form (PKG-DESC . STATUS). Return (PKG-DESC [NAME VERSION STATUS DOC])." (let* ((pkg-desc (car pkg)) - (status (cdr pkg)) - (face (pcase status + (status (cdr pkg)) + (face (pcase status (`"built-in" 'font-lock-builtin-face) (`"available" 'default) (`"new" 'bold) @@ -2137,7 +2155,7 @@ Return (PKG-DESC [NAME VERSION STATUS DOC])." (`"unsigned" 'font-lock-warning-face) (_ 'font-lock-warning-face)))) ; obsolete. (list pkg-desc - `[,(list (symbol-name (package-desc-name pkg-desc)) + `[,(list (symbol-name (package-desc-name pkg-desc)) 'face 'link 'follow-link t 'package-desc pkg-desc @@ -2167,9 +2185,9 @@ This fetches the contents of each archive specified in If optional arg BUTTON is non-nil, describe its associated package." (interactive) (let ((pkg-desc (if button (button-get button 'package-desc) - (tabulated-list-get-id)))) + (tabulated-list-get-id)))) (if pkg-desc - (describe-package pkg-desc) + (describe-package pkg-desc) (user-error "No package here")))) ;; fixme numeric argument @@ -2205,8 +2223,8 @@ If optional arg BUTTON is non-nil, describe its associated package." (goto-char (point-min)) (while (not (eobp)) (if (equal (package-menu-get-status) "obsolete") - (tabulated-list-put-tag "D" t) - (forward-line 1))))) + (tabulated-list-put-tag "D" t) + (forward-line 1))))) (defun package-menu-quick-help () "Show short key binding help for package-menu-mode." @@ -2218,9 +2236,9 @@ If optional arg BUTTON is non-nil, describe its associated package." (defun package-menu-get-status () (let* ((id (tabulated-list-get-id)) - (entry (and id (assq id tabulated-list-entries)))) + (entry (and id (assq id tabulated-list-entries)))) (if entry - (aref (cadr entry) 2) + (aref (cadr entry) 2) ""))) (defun package-menu--find-upgrades () @@ -2229,7 +2247,7 @@ If optional arg BUTTON is non-nil, describe its associated package." (dolist (entry tabulated-list-entries) ;; ENTRY is (PKG-DESC [NAME VERSION STATUS DOC]) (let ((pkg-desc (car entry)) - (status (aref (cadr entry) 2))) + (status (aref (cadr entry) 2))) (cond ((member status '("installed" "unsigned")) (push pkg-desc installed)) ((member status '("available" "new")) @@ -2255,22 +2273,22 @@ call will upgrade the package." (error "The current buffer is not a Package Menu")) (let ((upgrades (package-menu--find-upgrades))) (if (null upgrades) - (message "No packages to upgrade.") + (message "No packages to upgrade.") (widen) (save-excursion - (goto-char (point-min)) - (while (not (eobp)) - (let* ((pkg-desc (tabulated-list-get-id)) - (upgrade (cdr (assq (package-desc-name pkg-desc) upgrades)))) - (cond ((null upgrade) - (forward-line 1)) - ((equal pkg-desc upgrade) - (package-menu-mark-install)) - (t - (package-menu-mark-delete)))))) + (goto-char (point-min)) + (while (not (eobp)) + (let* ((pkg-desc (tabulated-list-get-id)) + (upgrade (cdr (assq (package-desc-name pkg-desc) upgrades)))) + (cond ((null upgrade) + (forward-line 1)) + ((equal pkg-desc upgrade) + (package-menu-mark-install)) + (t + (package-menu-mark-delete)))))) (message "%d package%s marked for upgrading." - (length upgrades) - (if (= (length upgrades) 1) "" "s"))))) + (length upgrades) + (if (= (length upgrades) 1) "" "s"))))) (defun package-menu-execute (&optional noquery) "Perform marked Package Menu actions. @@ -2284,15 +2302,15 @@ Optional argument NOQUERY non-nil means do not ask the user to confirm." (save-excursion (goto-char (point-min)) (while (not (eobp)) - (setq cmd (char-after)) - (unless (eq cmd ?\s) - ;; This is the key PKG-DESC. - (setq pkg-desc (tabulated-list-get-id)) - (cond ((eq cmd ?D) - (push pkg-desc delete-list)) - ((eq cmd ?I) - (push pkg-desc install-list)))) - (forward-line))) + (setq cmd (char-after)) + (unless (eq cmd ?\s) + ;; This is the key PKG-DESC. + (setq pkg-desc (tabulated-list-get-id)) + (cond ((eq cmd ?D) + (push pkg-desc delete-list)) + ((eq cmd ?I) + (push pkg-desc install-list)))) + (forward-line))) (when install-list (if (or noquery @@ -2312,64 +2330,64 @@ Optional argument NOQUERY non-nil means do not ask the user to confirm." (if (or noquery (yes-or-no-p - (if (= (length delete-list) 1) - (format "Delete package `%s'? " + (if (= (length delete-list) 1) + (format "Delete package `%s'? " (package-desc-full-name (car delete-list))) - (format "Delete these %d packages (%s)? " - (length delete-list) - (mapconcat #'package-desc-full-name - delete-list ", "))))) - (dolist (elt delete-list) - (condition-case-unless-debug err - (package-delete elt) - (error (message (cadr err))))) - (error "Aborted"))) + (format "Delete these %d packages (%s)? " + (length delete-list) + (mapconcat #'package-desc-full-name + delete-list ", "))))) + (dolist (elt delete-list) + (condition-case-unless-debug err + (package-delete elt) + (error (message (cadr err))))) + (error "Aborted"))) (if (or delete-list install-list) - (package-menu--generate t t) + (package-menu--generate t t) (message "No operations specified.")))) (defun package-menu--version-predicate (A B) (let ((vA (or (aref (cadr A) 1) '(0))) - (vB (or (aref (cadr B) 1) '(0)))) + (vB (or (aref (cadr B) 1) '(0)))) (if (version-list-= vA vB) - (package-menu--name-predicate A B) + (package-menu--name-predicate A B) (version-list-< vA vB)))) (defun package-menu--status-predicate (A B) (let ((sA (aref (cadr A) 2)) - (sB (aref (cadr B) 2))) + (sB (aref (cadr B) 2))) (cond ((string= sA sB) - (package-menu--name-predicate A B)) - ((string= sA "new") t) - ((string= sB "new") nil) - ((string= sA "available") t) - ((string= sB "available") nil) - ((string= sA "installed") t) - ((string= sB "installed") nil) - ((string= sA "unsigned") t) - ((string= sB "unsigned") nil) - ((string= sA "held") t) - ((string= sB "held") nil) - ((string= sA "built-in") t) - ((string= sB "built-in") nil) - ((string= sA "obsolete") t) - ((string= sB "obsolete") nil) - (t (string< sA sB))))) + (package-menu--name-predicate A B)) + ((string= sA "new") t) + ((string= sB "new") nil) + ((string= sA "available") t) + ((string= sB "available") nil) + ((string= sA "installed") t) + ((string= sB "installed") nil) + ((string= sA "unsigned") t) + ((string= sB "unsigned") nil) + ((string= sA "held") t) + ((string= sB "held") nil) + ((string= sA "built-in") t) + ((string= sB "built-in") nil) + ((string= sA "obsolete") t) + ((string= sB "obsolete") nil) + (t (string< sA sB))))) (defun package-menu--description-predicate (A B) (let ((dA (aref (cadr A) 3)) - (dB (aref (cadr B) 3))) + (dB (aref (cadr B) 3))) (if (string= dA dB) - (package-menu--name-predicate A B) + (package-menu--name-predicate A B) (string< dA dB)))) (defun package-menu--name-predicate (A B) (string< (symbol-name (package-desc-name (car A))) - (symbol-name (package-desc-name (car B))))) + (symbol-name (package-desc-name (car B))))) (defun package-menu--archive-predicate (A B) (string< (or (package-desc-archive (car A)) "") - (or (package-desc-archive (car B)) ""))) + (or (package-desc-archive (car B)) ""))) ;;;###autoload (defun list-packages (&optional no-fetch) @@ -2391,27 +2409,27 @@ The list is displayed in a buffer named `*Packages*'." (package-refresh-contents) ;; Find which packages are new. (dolist (elt package-archive-contents) - (unless (assq (car elt) old-archives) - (push (car elt) new-packages)))) + (unless (assq (car elt) old-archives) + (push (car elt) new-packages)))) ;; Generate the Package Menu. (let ((buf (get-buffer-create "*Packages*"))) (with-current-buffer buf - (package-menu-mode) - (set (make-local-variable 'package-menu--new-package-list) - new-packages) - (package-menu--generate nil t)) + (package-menu-mode) + (set (make-local-variable 'package-menu--new-package-list) + new-packages) + (package-menu--generate nil t)) ;; The package menu buffer has keybindings. If the user types ;; `M-x list-packages', that suggests it should become current. (switch-to-buffer buf)) (let ((upgrades (package-menu--find-upgrades))) (if upgrades - (message "%d package%s can be upgraded; type `%s' to mark %s for upgrading." - (length upgrades) - (if (= (length upgrades) 1) "" "s") - (substitute-command-keys "\\[package-menu-mark-upgrades]") - (if (= (length upgrades) 1) "it" "them")))))) + (message "%d package%s can be upgraded; type `%s' to mark %s for upgrading." + (length upgrades) + (if (= (length upgrades) 1) "" "s") + (substitute-command-keys "\\[package-menu-mark-upgrades]") + (if (= (length upgrades) 1) "it" "them")))))) ;;;###autoload (defalias 'package-list-packages 'list-packages) commit 6f8372ded12d52b389527d33232eba7951096d18 Author: Michael Albinus Date: Mon Feb 2 12:38:36 2015 +0100 Tramp: Support unsetting HISTFILE. Fixes: debbugs:19731 * lisp/net/tramp-sh.el (tramp-histfile-override): Add another choice 'unset. (tramp-open-shell, tramp-maybe-open-connection): Support it. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 846da3b..fe0a3db 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2015-02-02 Michael Albinus + + * net/tramp-sh.el (tramp-histfile-override): Add another choice 'unset. + (tramp-open-shell, tramp-maybe-open-connection): Support it. + (Bug#19731) + 2015-02-02 Thierry Volpiatto * emacs-lisp/package.el (package-delete): Remove package from diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 80a256c..9a5be77 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -71,12 +71,15 @@ By default, the HISTFILE is set to the \"/dev/null\" value, which is special on Unix systems and indicates the shell history should not be logged (this avoids clutter due to Tramp commands). +The symbol `unset' removes any setting of HISTFILE. + If you set this variable to nil, however, the *override* is disabled, so the history will go to the default storage location, e.g. \"$HOME/.sh_history\"." :group 'tramp :version "25.1" :type '(choice (const :tag "Do not override HISTFILE" nil) + (const :tag "Unset HISTFILE" 'unset) (const :tag "Empty the history (/dev/null)" "/dev/null") (string :tag "Redirect to a file"))) @@ -3902,9 +3905,13 @@ file exists and nonzero exit status otherwise." ;; the prompt in /bin/bash, it must be discarded as well. (tramp-send-command vec (format - "exec env ENV=''%s PROMPT_COMMAND='' PS1=%s PS2='' PS3='' %s %s" + "exec env ENV='' %s PROMPT_COMMAND='' PS1=%s PS2='' PS3='' %s %s" (if tramp-histfile-override - (concat " HISTFILE=" tramp-histfile-override) + (concat + "HISTFILE=" + (if (eq tramp-histfile-override 'unset) + "" + (tramp-shell-quote-argument tramp-histfile-override)))) "") (tramp-shell-quote-argument tramp-end-of-output) shell (or extra-args "")) @@ -4628,7 +4635,9 @@ connection if a previous connection has died for some reason." (setenv "TERM" tramp-terminal-type) (setenv "LC_ALL" "en_US.utf8") (when tramp-histfile-override - (setenv "HISTFILE" tramp-histfile-override)) + (setenv "HISTFILE" + (and (not (eq tramp-histfile-override 'unset)) + tramp-histfile-override))) (setenv "PROMPT_COMMAND") (setenv "PS1" tramp-initial-end-of-output) (let* ((target-alist (tramp-compute-multi-hops vec)) commit 060dc145902f048bed22919232ce0e7b0e22d4b1 Author: Thierry Volpiatto Date: Mon Feb 2 10:24:46 2015 +0100 emacs-lisp/package.el: Fix previous patch diff --git a/lisp/ChangeLog b/lisp/ChangeLog index cba38ff..846da3b 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2015-02-02 Thierry Volpiatto + + * emacs-lisp/package.el (package-delete): Remove package from + package-selected-packages. + (package-autoremove): Remove unneeded variable. + 2015-02-01 Artur Malabarba * emacs-lisp/package.el (package-selected-packages): Fix :type diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 3b22962..d95bc5e 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -1505,6 +1505,10 @@ elsewhere." (delete pkg-desc pkgs) (unless (cdr pkgs) (setq package-alist (delq pkgs package-alist)))) + ;; Update package-selected-packages. + (when (memq name package-selected-packages) + (customize-save-variable + 'package-selected-packages (remove name package-selected-packages))) (message "Package `%s' deleted." (package-desc-full-name pkg-desc)))))) ;;;###autoload @@ -1515,12 +1519,9 @@ Packages that are no more needed by other packages in `package-selected-packages' and their dependencies will be deleted." (interactive) - (let* (old-direct - (needed (cl-loop for p in package-selected-packages - if (assq p package-alist) - append (package--get-deps p) into lst - else do (push p old-direct) - finally return lst))) + (let ((needed (cl-loop for p in package-selected-packages + if (assq p package-alist) + append (package--get-deps p)))) (cl-loop for p in (mapcar #'car package-alist) unless (or (memq p needed) (memq p package-selected-packages)) commit 0326960d3d8b49fd31c3f4e16418bf13c86efa02 Author: Artur Malabarba Date: Sun Feb 1 21:01:37 2015 -0200 emacs-lisp/package.el: Many style changes diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5498967..cba38ff 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -3,6 +3,12 @@ * emacs-lisp/package.el (package-selected-packages): Fix :type (package-install): Rename ARG to MARK-SELECTED. (package--get-deps): Fix for indirect dependencies. + (package-used-elsewhere-p): Rename to + (package--used-elsewhere-p): New function. + (package-reinstall, package-user-selected-packages-install) + (package-autoremove): Use sharp-quote. + (package-user-selected-packages-install): Reindent and rename to + (package-install-user-selected-packages): New function. 2015-02-01 Thierry Volpiatto diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index eae7562..3b22962 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -1237,8 +1237,8 @@ to `package-selected-packages'." "Reinstall package PKG." (interactive (list (intern (completing-read "Reinstall package: " - (mapcar 'symbol-name - (mapcar 'car package-alist)))))) + (mapcar #'symbol-name + (mapcar #'car package-alist)))))) (package-delete (cadr (assq pkg package-alist)) t) (package-install pkg)) @@ -1438,7 +1438,7 @@ The file can either be a tar file or an Emacs Lisp file." (t (append direct-deps indirect-deps))))) ;;;###autoload -(defun package-user-selected-packages-install () +(defun package-install-user-selected-packages () "Ensure packages in `package-selected-packages' are installed. If some packages are not installed propose to install them." (interactive) @@ -1450,23 +1450,24 @@ If some packages are not installed propose to install them." (when (y-or-n-p (format "%s packages will be installed:\n%s, proceed?" (length lst) - (mapconcat 'symbol-name lst ", "))) - (mapc 'package-install lst)) - (message "All your packages are already installed")))) + (mapconcat #'symbol-name lst ", "))) + (mapc #'package-install lst)) + (message "All your packages are already installed")))) -(defun package-used-elsewhere-p (pkg-desc &optional pkg-list) - "Check in PKG-LIST if PKG-DESC is used elsewhere as dependency. +(defun package--used-elsewhere-p (pkg-desc &optional pkg-list) + "Non-nil if PKG-DESC is a dependency of a package in PKG-LIST. +Return the first package found in PKG-LIST of which PKG is a +dependency. -When not specified, PKG-LIST default to `package-alist' -with PKG-DESC entry removed. -Returns the first package found in PKG-LIST where PKG is used as dependency." +When not specified, PKG-LIST defaults to `package-alist' +with PKG-DESC entry removed." (unless (string= (package-desc-status pkg-desc) "obsolete") (let ((pkg (package-desc-name pkg-desc))) (cl-loop with alist = (or pkg-list (remove (assq pkg package-alist) package-alist)) for p in alist thereis - (and (memq pkg (mapcar 'car (package-desc-reqs (cadr p)))) + (and (memq pkg (mapcar #'car (package-desc-reqs (cadr p)))) (car p)))))) (defun package-delete (pkg-desc &optional force) @@ -1488,7 +1489,7 @@ elsewhere." (package-desc-full-name pkg-desc))) ((and (null force) (setq pkg-used-elsewhere-by - (package-used-elsewhere-p pkg-desc))) + (package--used-elsewhere-p pkg-desc))) ;; Don't delete packages used as dependency elsewhere. (error "Package `%s' is used by `%s' as dependency, not deleting" (package-desc-full-name pkg-desc) @@ -1520,14 +1521,14 @@ will be deleted." append (package--get-deps p) into lst else do (push p old-direct) finally return lst))) - (cl-loop for p in (mapcar 'car package-alist) + (cl-loop for p in (mapcar #'car package-alist) unless (or (memq p needed) (memq p package-selected-packages)) collect p into lst finally (if lst (when (y-or-n-p (format "%s packages will be deleted:\n%s, proceed? " (length lst) - (mapconcat 'symbol-name lst ", "))) + (mapconcat #'symbol-name lst ", "))) (mapc (lambda (p) (package-delete (cadr (assq p package-alist)) t)) lst)) commit 8334021e5a9918ba8beb56fd35643c6e248e9eec Author: Artur Malabarba Date: Sun Feb 1 20:50:13 2015 -0200 package.el (package--get-deps): Fix for indirect dependencies. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 149c807..5498967 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -2,6 +2,7 @@ * emacs-lisp/package.el (package-selected-packages): Fix :type (package-install): Rename ARG to MARK-SELECTED. + (package--get-deps): Fix for indirect dependencies. 2015-02-01 Thierry Volpiatto diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index c322ce8..eae7562 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -1428,12 +1428,9 @@ The file can either be a tar file or an Emacs Lisp file." when (assq name package-alist) collect name)) (indirect-deps (unless (eq only 'direct) - (cl-loop for p in direct-deps - for dep = (cadr (assq p package-alist)) - when (and dep (assq p package-alist)) - append (mapcar 'car - (package-desc-reqs - dep)))))) + (apply #'append + direct-deps + (mapcar #'package--get-deps direct-deps))))) (cl-case only (direct direct-deps) (separate (list direct-deps indirect-deps)) commit 5329208bafa0b51b4fe07c185972b1d98af98c1d Author: Artur Malabarba Date: Sun Feb 1 20:34:16 2015 -0200 emacs-lisp/package.el (package-install): Rename ARG to MARK-SELECTED. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e3d654d..149c807 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,6 +1,7 @@ 2015-02-01 Artur Malabarba * emacs-lisp/package.el (package-selected-packages): Fix :type + (package-install): Rename ARG to MARK-SELECTED. 2015-02-01 Thierry Volpiatto diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 4fa77b6..c322ce8 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -1198,13 +1198,13 @@ using `package-compute-transaction'." (mapc #'package-install-from-archive packages)) ;;;###autoload -(defun package-install (pkg &optional arg) +(defun package-install (pkg &optional mark-selected) "Install the package PKG. PKG can be a package-desc or the package name of one the available packages -in an archive in `package-archives'. Interactively, prompt for its name -and add PKG to `package-selected-packages'. -When called from lisp you will have to use ARG if you want to -simulate an interactive call to add PKG to `package-selected-packages'." +in an archive in `package-archives'. Interactively, prompt for its name. + +If called interactively or if MARK-SELECTED is non-nil, add PKG +to `package-selected-packages'." (interactive (progn ;; Initialize the package system to get the list of package @@ -1221,8 +1221,8 @@ simulate an interactive call to add PKG to `package-selected-packages'." (symbol-name (car elt)))) package-archive-contents)) nil t)) - "\p"))) - (when (and arg (not (memq pkg package-selected-packages))) + t))) + (when (and mark-selected (not (memq pkg package-selected-packages))) (customize-save-variable 'package-selected-packages (cons pkg package-selected-packages))) (package-download-transaction commit 0ade763b7498496eb8f6fac9d136a23be052d1b7 Author: Artur Malabarba Date: Sun Feb 1 20:28:21 2015 -0200 emacs-lisp/package.el (package-selected-packages): Fix :type diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 742aced..e3d654d 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2015-02-01 Artur Malabarba + + * emacs-lisp/package.el (package-selected-packages): Fix :type + 2015-02-01 Thierry Volpiatto * emacs-lisp/package.el: Don't allow deleting dependencies. diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index db8d868..4fa77b6 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -342,7 +342,7 @@ which packages are no more needed. You can use it to (re)install packages on other machines by running `package-user-selected-packages-install'." :group 'package - :type '(repeat (choice symbol))) + :type '(repeat symbol)) (defvar package--default-summary "No description available.") commit e2f0f263df89a156ff5b4b05e3b3aae457eb38a9 Author: Thierry Volpiatto Date: Sun Feb 1 19:45:47 2015 -0200 emacs-lisp/package.el: Don't allow deleting dependencies. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0a3c7c9..742aced 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,29 @@ +2015-02-01 Thierry Volpiatto + + * emacs-lisp/package.el: Don't allow deleting dependencies. + + (package-used-elsewhere-p): New function. + (package-delete): Use it, return now an error when trying to + delete a package used as dependency by another package. + + Add a reinstall package command. + (package-reinstall): New function. + + Add a package-autoremove command. + (package-selected-packages): New user var. + (package-install): Add an optional arg to notify interactive use. + Fix docstring. Save installed package to + packages-installed-directly. + (package-install-from-buffer): Same. + (package-user-selected-packages-install): Allow installing all + packages in packages-installed-directly at once. + (package--get-deps): New function. + (package-autoremove): New function. + (package-install-button-action): Call package-install with + interactive arg. + (package-menu-execute): Same but only for only for not installed + packages. + 2015-01-31 Stefan Monnier * emacs-lisp/eieio.el (defclass): Use new eieio-make-class-predicate diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 88fc950..db8d868 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -333,6 +333,17 @@ contents of the archive." :group 'package :version "24.4") +(defcustom package-selected-packages nil + "Store here packages installed explicitely by user. +This variable will be feeded automatically by emacs, +when installing a new package. +This variable will be used by `package-autoremove' to decide +which packages are no more needed. +You can use it to (re)install packages on other machines +by running `package-user-selected-packages-install'." + :group 'package + :type '(repeat (choice symbol))) + (defvar package--default-summary "No description available.") (cl-defstruct (package-desc @@ -1187,10 +1198,13 @@ using `package-compute-transaction'." (mapc #'package-install-from-archive packages)) ;;;###autoload -(defun package-install (pkg) +(defun package-install (pkg &optional arg) "Install the package PKG. PKG can be a package-desc or the package name of one the available packages -in an archive in `package-archives'. Interactively, prompt for its name." +in an archive in `package-archives'. Interactively, prompt for its name +and add PKG to `package-selected-packages'. +When called from lisp you will have to use ARG if you want to +simulate an interactive call to add PKG to `package-selected-packages'." (interactive (progn ;; Initialize the package system to get the list of package @@ -1206,7 +1220,11 @@ in an archive in `package-archives'. Interactively, prompt for its name." (unless (package-installed-p (car elt)) (symbol-name (car elt)))) package-archive-contents)) - nil t))))) + nil t)) + "\p"))) + (when (and arg (not (memq pkg package-selected-packages))) + (customize-save-variable 'package-selected-packages + (cons pkg package-selected-packages))) (package-download-transaction (if (package-desc-p pkg) (package-compute-transaction (list pkg) @@ -1214,6 +1232,16 @@ in an archive in `package-archives'. Interactively, prompt for its name." (package-compute-transaction () (list (list pkg)))))) +;;;###autoload +(defun package-reinstall (pkg) + "Reinstall package PKG." + (interactive (list (intern (completing-read + "Reinstall package: " + (mapcar 'symbol-name + (mapcar 'car package-alist)))))) + (package-delete (cadr (assq pkg package-alist)) t) + (package-install pkg)) + (defun package-strip-rcs-id (str) "Strip RCS version ID from the version string STR. If the result looks like a dotted numeric version, return it. @@ -1354,24 +1382,29 @@ is derived from the main .el file in the directory. Downloads and installs required packages as needed." (interactive) - (let ((pkg-desc - (cond - ((derived-mode-p 'dired-mode) - ;; This is the only way a package-desc object with a `dir' - ;; desc-kind can be created. Such packages can't be - ;; uploaded or installed from archives, they can only be - ;; installed from local buffers or directories. - (package-dir-info)) - ((derived-mode-p 'tar-mode) - (package-tar-file-info)) - (t - (package-buffer-info))))) + (let* ((pkg-desc + (cond + ((derived-mode-p 'dired-mode) + ;; This is the only way a package-desc object with a `dir' + ;; desc-kind can be created. Such packages can't be + ;; uploaded or installed from archives, they can only be + ;; installed from local buffers or directories. + (package-dir-info)) + ((derived-mode-p 'tar-mode) + (package-tar-file-info)) + (t + (package-buffer-info)))) + (name (package-desc-name pkg-desc))) ;; Download and install the dependencies. (let* ((requires (package-desc-reqs pkg-desc)) (transaction (package-compute-transaction nil requires))) (package-download-transaction transaction)) ;; Install the package itself. (package-unpack pkg-desc) + (unless (memq name package-selected-packages) + (push name package-selected-packages) + (customize-save-variable 'package-selected-packages + package-selected-packages)) pkg-desc)) ;;;###autoload @@ -1388,26 +1421,120 @@ The file can either be a tar file or an Emacs Lisp file." (when (string-match "\\.tar\\'" file) (tar-mode))) (package-install-from-buffer))) -(defun package-delete (pkg-desc) - (let ((dir (package-desc-dir pkg-desc))) - (if (not (string-prefix-p (file-name-as-directory - (expand-file-name package-user-dir)) - (expand-file-name dir))) - ;; Don't delete "system" packages. - (error "Package `%s' is a system package, not deleting" - (package-desc-full-name pkg-desc)) - (delete-directory dir t t) - ;; Remove NAME-VERSION.signed file. - (let ((signed-file (concat dir ".signed"))) - (if (file-exists-p signed-file) - (delete-file signed-file))) - ;; Update package-alist. - (let* ((name (package-desc-name pkg-desc)) - (pkgs (assq name package-alist))) - (delete pkg-desc pkgs) - (unless (cdr pkgs) - (setq package-alist (delq pkgs package-alist)))) - (message "Package `%s' deleted." (package-desc-full-name pkg-desc))))) +(defun package--get-deps (pkg &optional only) + (let* ((pkg-desc (cadr (assq pkg package-alist))) + (direct-deps (cl-loop for p in (package-desc-reqs pkg-desc) + for name = (car p) + when (assq name package-alist) + collect name)) + (indirect-deps (unless (eq only 'direct) + (cl-loop for p in direct-deps + for dep = (cadr (assq p package-alist)) + when (and dep (assq p package-alist)) + append (mapcar 'car + (package-desc-reqs + dep)))))) + (cl-case only + (direct direct-deps) + (separate (list direct-deps indirect-deps)) + (indirect indirect-deps) + (t (append direct-deps indirect-deps))))) + +;;;###autoload +(defun package-user-selected-packages-install () + "Ensure packages in `package-selected-packages' are installed. +If some packages are not installed propose to install them." + (interactive) + (cl-loop for p in package-selected-packages + unless (package-installed-p p) + collect p into lst + finally + (if lst + (when (y-or-n-p + (format "%s packages will be installed:\n%s, proceed?" + (length lst) + (mapconcat 'symbol-name lst ", "))) + (mapc 'package-install lst)) + (message "All your packages are already installed")))) + +(defun package-used-elsewhere-p (pkg-desc &optional pkg-list) + "Check in PKG-LIST if PKG-DESC is used elsewhere as dependency. + +When not specified, PKG-LIST default to `package-alist' +with PKG-DESC entry removed. +Returns the first package found in PKG-LIST where PKG is used as dependency." + (unless (string= (package-desc-status pkg-desc) "obsolete") + (let ((pkg (package-desc-name pkg-desc))) + (cl-loop with alist = (or pkg-list + (remove (assq pkg package-alist) + package-alist)) + for p in alist thereis + (and (memq pkg (mapcar 'car (package-desc-reqs (cadr p)))) + (car p)))))) + +(defun package-delete (pkg-desc &optional force) + "Delete package PKG-DESC. + +Argument PKG-DESC is a full description of package as vector. +When package is used elsewhere as dependency of another package, +refuse deleting it and return an error. +If FORCE is non--nil package will be deleted even if it is used +elsewhere." + (let ((dir (package-desc-dir pkg-desc)) + (name (package-desc-name pkg-desc)) + pkg-used-elsewhere-by) + (cond ((not (string-prefix-p (file-name-as-directory + (expand-file-name package-user-dir)) + (expand-file-name dir))) + ;; Don't delete "system" packages. + (error "Package `%s' is a system package, not deleting" + (package-desc-full-name pkg-desc))) + ((and (null force) + (setq pkg-used-elsewhere-by + (package-used-elsewhere-p pkg-desc))) + ;; Don't delete packages used as dependency elsewhere. + (error "Package `%s' is used by `%s' as dependency, not deleting" + (package-desc-full-name pkg-desc) + pkg-used-elsewhere-by)) + (t + (delete-directory dir t t) + ;; Remove NAME-VERSION.signed file. + (let ((signed-file (concat dir ".signed"))) + (if (file-exists-p signed-file) + (delete-file signed-file))) + ;; Update package-alist. + (let ((pkgs (assq name package-alist))) + (delete pkg-desc pkgs) + (unless (cdr pkgs) + (setq package-alist (delq pkgs package-alist)))) + (message "Package `%s' deleted." (package-desc-full-name pkg-desc)))))) + +;;;###autoload +(defun package-autoremove () + "Remove packages that are no more needed. + +Packages that are no more needed by other packages in +`package-selected-packages' and their dependencies +will be deleted." + (interactive) + (let* (old-direct + (needed (cl-loop for p in package-selected-packages + if (assq p package-alist) + append (package--get-deps p) into lst + else do (push p old-direct) + finally return lst))) + (cl-loop for p in (mapcar 'car package-alist) + unless (or (memq p needed) + (memq p package-selected-packages)) + collect p into lst + finally (if lst + (when (y-or-n-p (format "%s packages will be deleted:\n%s, proceed? " + (length lst) + (mapconcat 'symbol-name lst ", "))) + (mapc (lambda (p) + (package-delete (cadr (assq p package-alist)) t)) + lst)) + (message "Nothing to autoremove"))))) (defun package-archive-base (desc) "Return the archive containing the package NAME." @@ -1721,7 +1848,7 @@ If optional arg NO-ACTIVATE is non-nil, don't activate packages." (let ((pkg-desc (button-get button 'package-desc))) (when (y-or-n-p (format "Install package `%s'? " (package-desc-full-name pkg-desc))) - (package-install pkg-desc) + (package-install pkg-desc 1) (revert-buffer nil t) (goto-char (point-min))))) @@ -2178,7 +2305,9 @@ Optional argument NOQUERY non-nil means do not ask the user to confirm." (length install-list) (mapconcat #'package-desc-full-name install-list ", "))))) - (mapc 'package-install install-list))) + (mapc (lambda (p) + (package-install p (and (null (package-installed-p p)) 1))) + install-list))) ;; Delete packages, prompting if necessary. (when delete-list (if (or commit 92a8dec54ed3314ca06f40cd0c226c4267a160e8 Author: Martin Rudalics Date: Sun Feb 1 12:00:14 2015 -0800 Give `window-text-pixel-size' optional BUFFER argument. [This reinstalls commit 1d1162479caf1fdf48564f1486fa84e3cdacaa9b, which I mistakenly reverted. --eggert] * xdisp.c (Fwindow_text_pixel_size): Add optional argument BUFFER. * display.texi (Size of Displayed Text): Describe optional argument BUFFER of `window-text-pixel-size'. diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 2cde2fb..aa4d320 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,8 @@ +2015-02-01 Martin Rudalics + + * display.texi (Size of Displayed Text): Describe optional + argument BUFFER of `window-text-pixel-size'. + 2015-01-28 Eli Zaretskii * searching.texi (Regexp Search): Add a cross-reference to "Syntax diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index b09b82a..10b17a3 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi @@ -1880,7 +1880,7 @@ displayed in a given window. This function is used by @code{fit-frame-to-buffer} (@pxref{Size and Position}) to make a window exactly as large as the text it contains. -@defun window-text-pixel-size &optional window from to x-limit y-limit mode-and-header-line +@defun window-text-pixel-size &optional window from to x-limit y-limit mode-and-header-line buffer This function returns the size of the text of @var{window}'s buffer in pixels. @var{window} must be a live window and defaults to the selected one. The return value is a cons of the maximum pixel-width of any text @@ -1919,6 +1919,13 @@ means to not include the height of the mode- or header-line of @code{mode-line} or @code{header-line}, include only the height of that line, if present, in the return value. If it is @code{t}, include the height of both, if present, in the return value. + +The optional argument @var{buffer} allows to specify an alternate buffer +whose text size will be calculated. If @var{buffer} is @code{nil} or +omitted, then operate on the buffer of @var{window}. If it is @code{t}, +then operate on the current buffer as if it were displayed in +@var{window}. If it specifies a live buffer, then operate on that +buffer as if it were displayed in @var{window}. @end defun diff --git a/src/ChangeLog b/src/ChangeLog index 9e564ea..d3f667e 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2015-02-01 Martin Rudalics + + * xdisp.c (Fwindow_text_pixel_size): Add optional argument BUFFER. + 2015-01-31 Eli Zaretskii * coding.c (raw_text_coding_system_p): New function. diff --git a/src/xdisp.c b/src/xdisp.c index 68c0fa5..8f6695a 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -9650,7 +9650,7 @@ in_display_vector_p (struct it *it) && it->dpvec + it->current.dpvec_index != it->dpend); } -DEFUN ("window-text-pixel-size", Fwindow_text_pixel_size, Swindow_text_pixel_size, 0, 6, 0, +DEFUN ("window-text-pixel-size", Fwindow_text_pixel_size, Swindow_text_pixel_size, 0, 7, 0, doc: /* Return the size of the text of WINDOW's buffer in pixels. WINDOW must be a live window and defaults to the selected one. The return value is a cons of the maximum pixel-width of any text line and @@ -9683,28 +9683,42 @@ Optional argument MODE-AND-HEADER-LINE nil or omitted means do not include the height of the mode- or header-line of WINDOW in the return value. If it is either the symbol `mode-line' or `header-line', include only the height of that line, if present, in the return value. If t, -include the height of both, if present, in the return value. */) - (Lisp_Object window, Lisp_Object from, Lisp_Object to, Lisp_Object x_limit, Lisp_Object y_limit, - Lisp_Object mode_and_header_line) +include the height of both, if present, in the return value. + +Optional argument BUFFER nil means to return the size of the text of +WINDOW's buffer. BUFFER t means to return the size of the text of the +current buffer as if it were displayed in WINDOW. Else BUFFER has to +specify a live buffer and this function returns the size of the text of +BUFFER as if it were displayed in WINDOW. */) + (Lisp_Object window, Lisp_Object from, Lisp_Object to, Lisp_Object x_limit, + Lisp_Object y_limit, Lisp_Object mode_and_header_line, Lisp_Object buffer) { struct window *w = decode_live_window (window); - Lisp_Object buf; struct buffer *b; struct it it; - struct buffer *old_buffer = NULL; + struct buffer *old_b = NULL; ptrdiff_t start, end, pos; struct text_pos startp; void *itdata = NULL; int c, max_y = -1, x = 0, y = 0; - buf = w->contents; - CHECK_BUFFER (buf); - b = XBUFFER (buf); - - if (b != current_buffer) + if (EQ (buffer, Qt)) + b = current_buffer; + else { - old_buffer = current_buffer; - set_buffer_internal (b); + if (NILP (buffer)) + buffer = w->contents; + + CHECK_BUFFER (buffer); + if (!BUFFER_LIVE_P (XBUFFER (buffer))) + error ("Not a live buffer"); + + b = XBUFFER (buffer); + if (b != current_buffer) + { + old_b = current_buffer; + set_buffer_internal (b); + } } if (NILP (from)) @@ -9780,8 +9794,8 @@ include the height of both, if present, in the return value. */) bidi_unshelve_cache (itdata, 0); - if (old_buffer) - set_buffer_internal (old_buffer); + if (old_b) + set_buffer_internal (old_b); return Fcons (make_number (x), make_number (y)); } commit 241260cc2819e5df254ad85953588b06388ade61 Author: Paul Eggert Date: Sun Feb 1 11:39:36 2015 -0800 Revert changes installed by xwidgets merge diff --git a/ChangeLog b/ChangeLog index 7c2e53e..d7fd76c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,3 @@ -2015-02-01 Joakim Verona - Support for the new Xwidget feature. - * configure.ac: - 2015-01-28 Paul Eggert Merge from gnulib and try to repair bad merge diff --git a/README.xwidget b/README.xwidget deleted file mode 100644 index cfde411..0000000 --- a/README.xwidget +++ /dev/null @@ -1,2 +0,0 @@ --*-org-*- -Please see https://github.com/jave/xwidget-aux for documentation. diff --git a/configure.ac b/configure.ac index a679bd0..5776e4e 100644 --- a/configure.ac +++ b/configure.ac @@ -374,8 +374,6 @@ otherwise for the first of `gfile' or `inotify' that is usable.]) ], [with_file_notification=$with_features]) -OPTION_DEFAULT_OFF([xwidgets],[enable use of some gtk widgets in Emacs buffers]) - ## For the times when you want to build Emacs but don't have ## a suitable makeinfo, and can live without the manuals. dnl http://lists.gnu.org/archive/html/emacs-devel/2008-04/msg01844.html @@ -2529,41 +2527,6 @@ if test "${HAVE_GTK}" = "yes"; then term_header=gtkutil.h fi - -HAVE_XWIDGETS=no -HAVE_WEBKIT=no -HAVE_GIR=no - -if test "${with_xwidgets}" != "no" && test "${USE_GTK_TOOLKIT}" = "GTK3" && test "$window_system" != "none" ; then - echo "xwidgets enabled, checking webkit, and others" - HAVE_XWIDGETS=yes - AC_DEFINE(HAVE_XWIDGETS, 1, [Define to 1 if you have xwidgets support.]) -dnl xwidgets -dnl - enable only if GTK3 is enabled, and we have a window system -dnl - check for webkit and gobject introspection - - -#webkit version for gtk3. - WEBKIT_REQUIRED=1.4.0 - WEBKIT_MODULES="webkitgtk-3.0 >= $WEBKIT_REQUIRED" - - if test "${with_gtk3}" = "yes"; then - PKG_CHECK_MODULES(WEBKIT, $WEBKIT_MODULES, HAVE_WEBKIT=yes, HAVE_WEBKIT=no) - if test $HAVE_WEBKIT = yes; then - AC_DEFINE(HAVE_WEBKIT_OSR, 1, [Define to 1 if you have webkit_osr support.]) - fi - fi - - GIR_REQUIRED=1.32.1 - GIR_MODULES="gobject-introspection-1.0 >= $GIR_REQUIRED" - PKG_CHECK_MODULES(GIR, $GIR_MODULES, HAVE_GIR=yes, HAVE_GIR=no) - if test $HAVE_GIR = yes; then - AC_DEFINE(HAVE_GIR, 1, [Define to 1 if you have GIR support.]) - fi - - -fi - CFLAGS=$OLD_CFLAGS LIBS=$OLD_LIBS @@ -4843,7 +4806,7 @@ TOOLKIT_LIBW= case "$USE_X_TOOLKIT" in MOTIF) TOOLKIT_LIBW="$MOTIF_LIBW" ;; LUCID) TOOLKIT_LIBW="$LUCID_LIBW" ;; - none) test "x$HAVE_GTK" = "xyes" && TOOLKIT_LIBW="$GTK_LIBS -lXcomposite" ;; + none) test "x$HAVE_GTK" = "xyes" && TOOLKIT_LIBW="$GTK_LIBS" ;; esac AC_SUBST(TOOLKIT_LIBW) @@ -5164,10 +5127,6 @@ echo " Does Emacs use -lxft? ${HAVE_XFT}" echo " Does Emacs directly use zlib? ${HAVE_ZLIB}" echo " Does Emacs use toolkit scroll bars? ${USE_TOOLKIT_SCROLL_BARS}" - -echo " Does Emacs support Xwidgets? ${HAVE_XWIDGETS}" -echo " Does xwidgets support webkit(requires gtk3)? ${HAVE_WEBKIT}" -echo " Does xwidgets support gobject introspection? ${HAVE_GIR}" echo if test -n "${EMACSDATA}"; then diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index aa4d320..2cde2fb 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,8 +1,3 @@ -2015-02-01 Martin Rudalics - - * display.texi (Size of Displayed Text): Describe optional - argument BUFFER of `window-text-pixel-size'. - 2015-01-28 Eli Zaretskii * searching.texi (Regexp Search): Add a cross-reference to "Syntax diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index 10b17a3..b09b82a 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi @@ -1880,7 +1880,7 @@ displayed in a given window. This function is used by @code{fit-frame-to-buffer} (@pxref{Size and Position}) to make a window exactly as large as the text it contains. -@defun window-text-pixel-size &optional window from to x-limit y-limit mode-and-header-line buffer +@defun window-text-pixel-size &optional window from to x-limit y-limit mode-and-header-line This function returns the size of the text of @var{window}'s buffer in pixels. @var{window} must be a live window and defaults to the selected one. The return value is a cons of the maximum pixel-width of any text @@ -1919,13 +1919,6 @@ means to not include the height of the mode- or header-line of @code{mode-line} or @code{header-line}, include only the height of that line, if present, in the return value. If it is @code{t}, include the height of both, if present, in the return value. - -The optional argument @var{buffer} allows to specify an alternate buffer -whose text size will be calculated. If @var{buffer} is @code{nil} or -omitted, then operate on the buffer of @var{window}. If it is @code{t}, -then operate on the current buffer as if it were displayed in -@var{window}. If it specifies a live buffer, then operate on that -buffer as if it were displayed in @var{window}. @end defun diff --git a/etc/NEWS b/etc/NEWS index 4371a01..4b0a268 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -65,9 +65,7 @@ so if you want to use it, you can always take a copy from an older Emacs. * Changes in Emacs 25.1 -** Xwidgets : A new feature for embedding native widgets -inside Emacs buffers. If you have gtk3 and webkit-devel installed, -you can try the embedded webkit browser with m-x xwidget-webkit-browse-url. + ** `package-install-from-buffer' and `package-install-file' work on directories. This follows the same rules as installing from a .tar file, except the -pkg file is optional. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b9570ba..0a3c7c9 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,12 +1,3 @@ -2015-02-01 Joakim Verona - Support for the new Xwidget feature. - * xwidget.el: - -2015-02-01 Grégoire Jadi - Support for testing xwidgets - * emacs-parallel/parallell-remote.el, emacs-parallel/parallell-xwidget.el: - * emacs-parallel/parallell.el: - 2015-01-31 Stefan Monnier * emacs-lisp/eieio.el (defclass): Use new eieio-make-class-predicate diff --git a/lisp/emacs-parallel/README.org b/lisp/emacs-parallel/README.org deleted file mode 100644 index 7430505..0000000 --- a/lisp/emacs-parallel/README.org +++ /dev/null @@ -1,147 +0,0 @@ -* Emacs Parallel - - Emacs Parallel is yet another library to simulate parallel - computations in Emacs (because it lacks threads support in Elisp). - -* STARTED HowTo - - You can execute a simple function a retrive the result like this: - #+BEGIN_SRC emacs-lisp - (parallel-get-result (parallel-start (lambda () (* 42 42)))) - ⇒ 1764 - #+END_SRC - - Though you won't benefit from the parallelism because - ~parallel-get-result~ is blocking, that is it waits for the function - to be executed. - - So you can use define a callback to be called when the function is - finished: - #+BEGIN_SRC emacs-lisp - (parallel-start (lambda () (sleep-for 4.2) "Hello World") - :post-exec (lambda (results _status) - (message (first results)))) - ⊣ Hello World - #+END_SRC - - Here, why ~(first results)~ and not ~result~? Because you can send - data from the remote instance while it's running with - ~parallel-remote-send~: - #+BEGIN_SRC emacs-lisp - (parallel-start (lambda () - (parallel-remote-send "Hello") - (sleep-for 4.2) - "World") - :post-exec (lambda (results _status) - (message "%s" - (mapconcat #'identity (reverse results) " ")))) - ⊣ Hello World - #+END_SRC - As you may have noticed the results are pushed in a list, so the - first element is the result returned by the function called, the - second is the last piece of data send, and so on... - - And of course you can execute some code when you receive data from - the remote instance: - #+BEGIN_SRC emacs-lisp - (parallel-start (lambda () - (parallel-remote-send 42) - (sleep-for 4.2) ; heavy computation to compute PI - pi) - :on-event (lambda (data) - (message "Received %S" data))) - ⊣ Received 42 - ⊣ Received 3.141592653589793 - #+END_SRC - - Because the function is executed in another Emacs instance (in Batch - Mode by default), the environment isn't the same. However you can - send some data with the ~env~ parameter: - #+BEGIN_SRC emacs-lisp - (let ((a 42) - (b 12)) - (parallel-get-result (parallel-start (lambda (a b) (+ a b)) - :env (list a b)))) - ⇒ 54 - #+END_SRC - - By default, the remote Emacs instance is exited when the function is - executed, but you can keep it running with the - ~:continue-when-executed~ option and send new code to be executed - with ~parellel-send~. - #+BEGIN_SRC emacs-lisp - (let ((task (parallel-start (lambda () 42) - :continue-when-executed t))) - (sleep-for 4.2) - (parallel-send task (lambda () (setq parallel-continue-when-executed nil) 12)) - (parallel-get-results task)) - ⇒ (12 42) - #+END_SRC - - As you can see, to stop the remote instance you have to set the - variable ~parallel-continue-when-executed~ to nil. - -* Modules - -** Parallel XWidget - - [[http://www.emacswiki.org/emacs/EmacsXWidgets][Emacs XWidget]] is an experimental branch which permits to embed GTK+ - widget inside Emacs buffers. For instance, it is possible to use it - to render an HTML page using the webkit engine within an Emacs - buffer. - - With this module, you can configure your "main" Emacs to use - another one to render web pages. - - Let's assume that you've cloned [[https://github.com/jave/xwidget-emacs][the Emacs XWidget repository]] in - ~$HOME/src/emacs-xwidget/~. Once you've compiled it, an Emacs - executable is available ~$HOME/src/emacs-xwidget/src/emacs~. - - Configure ~parallel-xwidget~ to use it: - #+BEGIN_SRC emacs-lisp - (setq parallel-xwidget-config (list :emacs-path - (concat (getenv "HOME") - "/src/emacs-xwidget/src/emacs"))) - #+END_SRC - - Then configure your current Emacs to use it: - #+BEGIN_SRC emacs-lisp - (setq browse-url-browser-function 'parallel-xwidget-browse-url) - #+END_SRC - - You can check it out with M-x browse-url RET google.com RET. - -* Tips & Tricks - - If your windows manager is smart enough (like StumpwWM) you can use - it to move graphical windows (Emacs frames) in another desktop. - - For example, I use this to move Emacs frames (with the title - "emacs-debug") to the group (aka desktop) 9: - #+BEGIN_SRC lisp - (define-frame-preference "9" - (0 nil t :title "emacs-debug")) - #+END_SRC - - And this to specify the title of the frame: - #+BEGIN_SRC emacs-lisp - (parallel-start (lambda () 42) - :no-batch t - :emacs-args '("-T" "emacs-debug")) - #+END_SRC - -* TODO How does it work? - -* Known limitations - - You can only send data to the remote (with the ~env~ parameter) or - from the remote (with ~parallel-send~ and ~parallel-remote-send~) - that have a printed representation (see [[info:elisp#Printed%20Representation][info:elisp#Printed - Representation]]). - - So you can pass around numbers, symbols, strings, lists, vectors, - hash-table but you can't pass buffers, windows, frames... - - - It lacks documentation, tests and probably a clean API, but I'm - working on it! diff --git a/lisp/emacs-parallel/parallel-remote.el b/lisp/emacs-parallel/parallel-remote.el deleted file mode 100644 index 54626af..0000000 --- a/lisp/emacs-parallel/parallel-remote.el +++ /dev/null @@ -1,81 +0,0 @@ -;; -*- mode: emacs-lisp; lexical-binding: t; -*- -;;; parallel-remote.el --- - -;; Copyright (C) 2013 Grégoire Jadi - -;; Author: Grégoire Jadi - -;; This program is free software: you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation, either version 3 of -;; the License, or (at your option) any later version. - -;; This program is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with this program. If not, see . - -;;; Commentary: - -;;; Code: - -(require 'cl) - -(defvar parallel-service nil) -(defvar parallel-task-id nil) -(defvar parallel-client nil) -(defvar parallel--executed nil) -(defvar parallel-continue-when-executed nil) - -(defun parallel-remote-send (data) - (process-send-string parallel-client - (format "%S " (cons parallel-task-id data)))) - -(defun parallel-remote--init () - (setq parallel-client (make-network-process :name "emacs-parallel" - :buffer nil - :server nil - :service parallel-service - :host "localhost" - :family 'ipv4)) - (set-process-filter parallel-client #'parallel-remote--filter) - (parallel-remote-send 'code) - (when noninteractive ; Batch Mode - ;; The evaluation is done in the `parallel--filter' but in Batch - ;; Mode, Emacs doesn't wait for the input, it stops as soon as - ;; `parallel--init' has been executed. - (while (null parallel--executed) - (sleep-for 10)))) ; arbitrary chosen - -(defun parallel-remote--filter (_proc output) - (dolist (code (parallel--read-output output)) - (parallel-remote-send - (if (or noninteractive - (not debug-on-error)) - (condition-case err - (eval code) - (error err)) - (eval code)))) - (unless parallel-continue-when-executed - (setq parallel--executed t) - (kill-emacs))) - -(defun parallel--read-output (output) - "Read lisp forms from output and return them as a list." - (loop with output = (replace-regexp-in-string - "\\`[ \t\n]*" "" - (replace-regexp-in-string "[ \t\n]*\\'" "" output)) ; trim string - with start = 0 - with end = (length output) - for ret = (read-from-string output start end) - for data = (first ret) - do (setq start (rest ret)) - collect data - until (= start end))) - -(provide 'parallel-remote) - -;;; parallel-remote.el ends here diff --git a/lisp/emacs-parallel/parallel-xwidget.el b/lisp/emacs-parallel/parallel-xwidget.el deleted file mode 100644 index 7e23863..0000000 --- a/lisp/emacs-parallel/parallel-xwidget.el +++ /dev/null @@ -1,59 +0,0 @@ -;;; parallel-xwidget.el --- - -;; Copyright (C) 2013 Grégoire Jadi - -;; Author: Grégoire Jadi - -;; This program is free software: you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation, either version 3 of -;; the License, or (at your option) any later version. - -;; This program is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with this program. If not, see . - -;;; Commentary: - -;;; Code: - -(require 'parallel) -(require 'browse-url) - -(defgroup parallel-xwidget nil - "Browse the web in another emacs instance with XWidget." - :group 'emacs) - -(defvar parallel-xwidget--task nil) - -(defcustom parallel-xwidget-config nil - "Parallel configuration." - :type 'alist - :group 'parallel-xwidget) - -(defun parallel-xwidget--init () - (setq parallel-xwidget--task - (parallel-start (lambda () - (require 'xwidget)) - :graphical t - :continue-when-executed t - :config parallel-xwidget-config))) - -(defun parallel-xwidget-browse-url (url &optional new-session) - "Browse URL in another Emacs instance." - (interactive (browse-url-interactive-arg "xwidget-webkit URL: ")) - (unless (and parallel-xwidget--task - (eq 'run (parallel-status parallel-xwidget--task))) - (parallel-xwidget--init)) - (parallel-send parallel-xwidget--task - (lambda (url new-session) - (xwidget-webkit-browse-url url new-session)) - (url-tidy url) new-session)) - -(provide 'parallel-xwidget) - -;;; parallel-xwidget.el ends here diff --git a/lisp/emacs-parallel/parallel.el b/lisp/emacs-parallel/parallel.el deleted file mode 100644 index 3e5eccf..0000000 --- a/lisp/emacs-parallel/parallel.el +++ /dev/null @@ -1,310 +0,0 @@ -;; -*- lexical-binding: t; -*- -;;; parallel.el --- - -;; Copyright (C) 2013 Grégoire Jadi - -;; Author: Grégoire Jadi - -;; This program is free software: you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation, either version 3 of -;; the License, or (at your option) any later version. - -;; This program is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with this program. If not, see . - -;;; Commentary: - -;;; Code: - -(require 'cl) -(require 'parallel-remote) - -(defgroup parallel nil - "Execute stuff in parallel" - :group 'emacs) - -(defcustom parallel-sleep 0.05 - "How many sec should we wait while polling." - :type 'number - :group 'parallel) - -(defcustom parallel-config nil - "Global config setting to use." - :type 'plist - :group 'parallel) - -(defvar parallel--server nil) -(defvar parallel--tasks nil) -(defvar parallel--tunnels nil) - -;; Declare external function -(declare-function parallel-send "parallel-remote") - -(defun parallel-make-tunnel (username hostname) - (parallel--init-server) - (let ((tunnel (find-if (lambda (tun) - (and (string= username - (process-get tun 'username)) - (string= hostname - (process-get tun 'hostname)))) - parallel--tunnels))) - (unless tunnel - (setq tunnel (start-process "parallel-ssh" nil "ssh" - "-N" "-R" (format "0:localhost:%s" - (process-contact parallel--server :service)) - (format "%s@%s" username hostname))) - (process-put tunnel 'username username) - (process-put tunnel 'hostname hostname) - (set-process-filter tunnel #'parallel--tunnel-filter) - (while (null (process-get tunnel 'service)) - (sleep-for 0.01)) - (push tunnel parallel--tunnels)) - tunnel)) - -(defun parallel-stop-tunnel (tunnel) - (setq parallel--tunnels (delq tunnel parallel--tunnels)) - (delete-process tunnel)) - -(defun parallel--tunnel-filter (proc output) - (if (string-match "\\([0-9]+\\)" output) - (process-put proc 'service (match-string 1 output)))) - -(defmacro parallel--set-option (place config) - `(setf ,place (or ,place - (plist-get ,config ,(intern (format ":%s" (symbol-name place)))) - (plist-get parallel-config ,(intern (format ":%s" (symbol-name place))))))) - -(defmacro parallel--set-options (config &rest options) - `(progn - ,@(loop for option in options - collect `(parallel--set-option ,option ,config)))) - -(defun* parallel-start (exec-fun &key post-exec env timeout - emacs-path library-path emacs-args - graphical debug on-event continue-when-executed - username hostname hostport - config) - (parallel--init-server) - - ;; Initialize parameters - (parallel--set-options config - post-exec - env - timeout - emacs-args - graphical - debug - on-event - continue-when-executed - username - hostname - hostport) - - (setq emacs-path (or emacs-path - (plist-get config :emacs-path) - (plist-get parallel-config :emacs-path) - (expand-file-name invocation-name - invocation-directory)) - library-path (or library-path - (plist-get config :library-path) - (plist-get parallel-config :library-path) - (locate-library "parallel-remote"))) - - (let ((task (parallel--new-task)) - proc tunnel ssh-args) - (push task parallel--tasks) - (put task 'initialized nil) - (put task 'exec-fun exec-fun) - (put task 'env env) - (when (functionp post-exec) - (put task 'post-exec post-exec)) - (when (functionp on-event) - (put task 'on-event on-event)) - (put task 'results nil) - (put task 'status 'run) - (put task 'queue nil) - - ;; We need to get the tunnel if it exists so we can send the right - ;; `service' to the remote. - (when (and username hostname) - (if hostport - (setq ssh-args (list "-R" (format "%s:localhost:%s" hostport - (process-contact parallel--server :service))) - tunnel t) - (setq tunnel (parallel-make-tunnel username hostname) - hostport (process-get tunnel 'service))) - (setq ssh-args (append - ssh-args - (if graphical (list "-X")) - (list (format "%s@%s" username hostname))))) - (setq emacs-args (remq nil - (list* "-Q" "-l" library-path - (if graphical nil "-batch") - "--eval" (format "(setq parallel-service '%S)" - (if tunnel - hostport - (process-contact parallel--server :service))) - "--eval" (format "(setq parallel-task-id '%S)" task) - "--eval" (format "(setq debug-on-error '%S)" debug) - "--eval" (format "(setq parallel-continue-when-executed '%S)" continue-when-executed) - "-f" "parallel-remote--init" - emacs-args))) - - ;; Reformat emacs-args if we use a tunnel (escape string) - (when tunnel - (setq emacs-args (list (mapconcat (lambda (string) - (if (find ?' string) - (prin1-to-string string) - string)) - emacs-args " ")))) - (setq proc (apply #'start-process "parallel" nil - `(,@(when tunnel - (list* "ssh" ssh-args)) - ,emacs-path - ,@emacs-args))) - (put task 'proc proc) - (set-process-sentinel (get task 'proc) #'parallel--sentinel) - (when timeout - (run-at-time timeout nil (lambda () - (when (memq (parallel-status task) - '(run stop)) - (parallel-stop task))))) - task)) - -(defun parallel--new-task () - "Generate a new task by enforcing a unique name." - (let ((symbol-name (make-temp-name "parallel-task-"))) - (while (intern-soft symbol-name) - (setq symbol-name (make-temp-name "parallel-task-"))) - (intern symbol-name))) - -(defun parallel--init-server () - "Initialize `parallel--server'." - (when (or (null parallel--server) - (not (eq (process-status parallel--server) - 'listen))) - (setq parallel--server - (make-network-process :name "parallel-server" - :buffer nil - :server t - :host "localhost" - :service t - :family 'ipv4 - :filter #'parallel--filter - :filter-multibyte t)))) - -(defun parallel--get-task-process (proc) - "Return the task running the given PROC." - (find-if (lambda (task) - (eq (get task 'proc) proc)) - parallel--tasks)) - -(defun parallel--sentinel (proc _event) - "Sentinel to watch over the remote process. - -This function do the necessary cleanup when the remote process is -finished." - (when (memq (process-status proc) '(exit signal)) - (let* ((task (parallel--get-task-process proc)) - (results (get task 'results)) - (status (process-status proc))) - ;; 0 means that the remote process has terminated normally (no - ;; SIGNUM 0). - (if (zerop (process-exit-status proc)) - (setq status 'success) - ;; on failure, push the exit-code or signal number on the - ;; results stack. - (push (process-exit-status proc) results)) - (put task 'results results) - (put task 'status status) - - (when (functionp (get task 'post-exec)) - (funcall (get task 'post-exec) - results status)) - (setq parallel--tasks (delq task parallel--tasks))))) - -(defun parallel--call-with-env (fun env) - "Return a string which can be READ/EVAL by the remote process -to `funcall' FUN with ENV as arguments." - (format "(funcall (read %S) %s)" - (prin1-to-string fun) - (mapconcat (lambda (obj) - ;; We need to quote it because the remote - ;; process will READ/EVAL it. - (format "'%S" obj)) env " "))) - -(defun parallel--filter (connection output) - "Server filter used to retrieve the results send by the remote -process and send the code to be executed by it." - (dolist (data (parallel--read-output output)) - (parallel--process-output connection (first data) (rest data)))) - -(defun parallel--process-output (connection task result) - (put task 'connection connection) - (cond ((and (not (get task 'initialized)) - (eq result 'code)) - (apply #'parallel-send - task - (get task 'exec-fun) - (get task 'env)) - (let ((code nil)) - (while (setq code (pop (get task 'queue))) - (apply #'parallel-send task (car code) (cdr code)))) - (put task 'initialized t)) - (t - (push result (get task 'results)) - (if (functionp (get task 'on-event)) - (funcall (get task 'on-event) result))))) - -(defun parallel-ready-p (task) - "Determine whether TASK is finished and if the results are -available." - (memq (parallel-status task) '(success exit signal))) - -(defun parallel-get-result (task) - "Return the last result send by the remote call, that is the -result returned by exec-fun." - (first (parallel-get-results task))) - -(defun parallel-get-results (task) - "Return all results send during the call of exec-fun." - (parallel-wait task) - (get task 'results)) - -(defun parallel-success-p (task) - "Determine whether TASK has ended successfully." - (parallel-wait task) - (eq (parallel-status task) 'success)) - -(defun parallel-status (task) - "Return TASK status." - (get task 'status)) - -(defun parallel-wait (task) - "Wait for TASK." - (while (not (parallel-ready-p task)) - (sleep-for parallel-sleep)) - t) ; for REPL - -(defun parallel-stop (task) - "Stop TASK." - (delete-process (get task 'proc))) - -(defun parallel-send (task fun &rest env) - "Send FUN to be evaluated by TASK in ENV." - (let ((connection (get task 'connection))) - (if connection - (process-send-string - connection - (parallel--call-with-env fun env)) - (push (cons fun env) (get task 'queue))))) - -(provide 'parallel) - -;;; parallel.el ends here diff --git a/lisp/ldefs-boot.el b/lisp/ldefs-boot.el index 8fc14de..8341c38 100644 --- a/lisp/ldefs-boot.el +++ b/lisp/ldefs-boot.el @@ -3,7 +3,7 @@ ;;; Code: -;;;### (autoloads nil "5x5" "play/5x5.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "5x5" "play/5x5.el" (21710 32133 703297 588000)) ;;; Generated autoloads from play/5x5.el (autoload '5x5 "5x5" "\ @@ -65,8 +65,8 @@ should return a grid vector array that is the new solution. ;;;*** -;;;### (autoloads nil "ada-mode" "progmodes/ada-mode.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "ada-mode" "progmodes/ada-mode.el" (21710 32133 +;;;;;; 713297 640000)) ;;; Generated autoloads from progmodes/ada-mode.el (autoload 'ada-add-extensions "ada-mode" "\ @@ -85,8 +85,8 @@ Ada mode is the major mode for editing Ada code. ;;;*** -;;;### (autoloads nil "ada-stmt" "progmodes/ada-stmt.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "ada-stmt" "progmodes/ada-stmt.el" (21710 32133 +;;;;;; 713297 640000)) ;;; Generated autoloads from progmodes/ada-stmt.el (autoload 'ada-header "ada-stmt" "\ @@ -96,8 +96,8 @@ Insert a descriptive header at the top of the file. ;;;*** -;;;### (autoloads nil "ada-xref" "progmodes/ada-xref.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "ada-xref" "progmodes/ada-xref.el" (21710 32133 +;;;;;; 714297 645000)) ;;; Generated autoloads from progmodes/ada-xref.el (autoload 'ada-find-file "ada-xref" "\ @@ -108,8 +108,8 @@ Completion is available. ;;;*** -;;;### (autoloads nil "add-log" "vc/add-log.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "add-log" "vc/add-log.el" (21710 32133 814298 +;;;;;; 165000)) ;;; Generated autoloads from vc/add-log.el (put 'change-log-default-name 'safe-local-variable 'string-or-null-p) @@ -238,8 +238,8 @@ old-style time formats for entries are supported. ;;;*** -;;;### (autoloads nil "advice" "emacs-lisp/advice.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "advice" "emacs-lisp/advice.el" (21710 32133 +;;;;;; 447296 257000)) ;;; Generated autoloads from emacs-lisp/advice.el (defvar ad-redefinition-action 'warn "\ @@ -374,7 +374,7 @@ usage: (defadvice FUNCTION (CLASS NAME [POSITION] [ARGLIST] FLAG...) ;;;*** -;;;### (autoloads nil "align" "align.el" (21670 32330 885624 725000)) +;;;### (autoloads nil "align" "align.el" (21710 32133 376295 888000)) ;;; Generated autoloads from align.el (autoload 'align "align" "\ @@ -477,7 +477,7 @@ A replacement function for `newline-and-indent', aligning as it goes. ;;;*** -;;;### (autoloads nil "allout" "allout.el" (21670 32330 885624 725000)) +;;;### (autoloads nil "allout" "allout.el" (21710 32133 379295 903000)) ;;; Generated autoloads from allout.el (push (purecopy '(allout 2 3)) package--builtin-versions) @@ -837,8 +837,8 @@ for details on preparing Emacs for automatic allout activation. ;;;*** -;;;### (autoloads nil "allout-widgets" "allout-widgets.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "allout-widgets" "allout-widgets.el" (21710 +;;;;;; 32133 377295 893000)) ;;; Generated autoloads from allout-widgets.el (push (purecopy '(allout-widgets 1 0)) package--builtin-versions) @@ -896,8 +896,8 @@ outline hot-spot navigation (see `allout-mode'). ;;;*** -;;;### (autoloads nil "ange-ftp" "net/ange-ftp.el" (21696 56380 925320 -;;;;;; 624000)) +;;;### (autoloads nil "ange-ftp" "net/ange-ftp.el" (21710 32133 627297 +;;;;;; 192000)) ;;; Generated autoloads from net/ange-ftp.el (defalias 'ange-ftp-re-read-dir 'ange-ftp-reread-dir) @@ -918,8 +918,8 @@ directory, so that Emacs will know its current contents. ;;;*** -;;;### (autoloads nil "animate" "play/animate.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "animate" "play/animate.el" (21710 32133 704297 +;;;;;; 593000)) ;;; Generated autoloads from play/animate.el (autoload 'animate-string "animate" "\ @@ -951,8 +951,8 @@ the buffer *Birthday-Present-for-Name*. ;;;*** -;;;### (autoloads nil "ansi-color" "ansi-color.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "ansi-color" "ansi-color.el" (21710 32133 379295 +;;;;;; 903000)) ;;; Generated autoloads from ansi-color.el (push (purecopy '(ansi-color 3 4 2)) package--builtin-versions) @@ -978,8 +978,8 @@ This is a good function to put in `comint-output-filter-functions'. ;;;*** -;;;### (autoloads nil "antlr-mode" "progmodes/antlr-mode.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "antlr-mode" "progmodes/antlr-mode.el" (21710 +;;;;;; 32133 715297 650000)) ;;; Generated autoloads from progmodes/antlr-mode.el (push (purecopy '(antlr-mode 2 2 3)) package--builtin-versions) @@ -1015,8 +1015,8 @@ Used in `antlr-mode'. Also a useful function in `java-mode-hook'. ;;;*** -;;;### (autoloads nil "appt" "calendar/appt.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "appt" "calendar/appt.el" (21710 32133 399296 +;;;;;; 7000)) ;;; Generated autoloads from calendar/appt.el (autoload 'appt-add "appt" "\ @@ -1037,8 +1037,8 @@ ARG is positive, otherwise off. ;;;*** -;;;### (autoloads nil "apropos" "apropos.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "apropos" "apropos.el" (21710 32133 380295 +;;;;;; 908000)) ;;; Generated autoloads from apropos.el (autoload 'apropos-read-pattern "apropos" "\ @@ -1153,8 +1153,8 @@ Returns list of symbols and documentation found. ;;;*** -;;;### (autoloads nil "arc-mode" "arc-mode.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "arc-mode" "arc-mode.el" (21710 32133 380295 +;;;;;; 908000)) ;;; Generated autoloads from arc-mode.el (autoload 'archive-mode "arc-mode" "\ @@ -1174,7 +1174,7 @@ archive. ;;;*** -;;;### (autoloads nil "array" "array.el" (21670 32330 885624 725000)) +;;;### (autoloads nil "array" "array.el" (21710 32133 381295 913000)) ;;; Generated autoloads from array.el (autoload 'array-mode "array" "\ @@ -1245,8 +1245,8 @@ Entering array mode calls the function `array-mode-hook'. ;;;*** -;;;### (autoloads nil "artist" "textmodes/artist.el" (21704 50495 -;;;;;; 455324 752000)) +;;;### (autoloads nil "artist" "textmodes/artist.el" (21710 32133 +;;;;;; 788298 29000)) ;;; Generated autoloads from textmodes/artist.el (push (purecopy '(artist 1 2 6)) package--builtin-versions) @@ -1452,8 +1452,8 @@ Keymap summary ;;;*** -;;;### (autoloads nil "asm-mode" "progmodes/asm-mode.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "asm-mode" "progmodes/asm-mode.el" (21710 32133 +;;;;;; 715297 650000)) ;;; Generated autoloads from progmodes/asm-mode.el (autoload 'asm-mode "asm-mode" "\ @@ -1480,8 +1480,8 @@ Special commands: ;;;*** -;;;### (autoloads nil "auth-source" "gnus/auth-source.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "auth-source" "gnus/auth-source.el" (21710 +;;;;;; 32133 514296 605000)) ;;; Generated autoloads from gnus/auth-source.el (defvar auth-source-cache-expiry 7200 "\ @@ -1493,8 +1493,8 @@ let-binding.") ;;;*** -;;;### (autoloads nil "autoarg" "autoarg.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "autoarg" "autoarg.el" (21710 32133 381295 +;;;;;; 913000)) ;;; Generated autoloads from autoarg.el (defvar autoarg-mode nil "\ @@ -1554,8 +1554,8 @@ This is similar to `autoarg-mode' but rebinds the keypad keys ;;;*** -;;;### (autoloads nil "autoconf" "progmodes/autoconf.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "autoconf" "progmodes/autoconf.el" (21710 32133 +;;;;;; 715297 650000)) ;;; Generated autoloads from progmodes/autoconf.el (autoload 'autoconf-mode "autoconf" "\ @@ -1565,8 +1565,8 @@ Major mode for editing Autoconf configure.ac files. ;;;*** -;;;### (autoloads nil "autoinsert" "autoinsert.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "autoinsert" "autoinsert.el" (21710 32133 381295 +;;;;;; 913000)) ;;; Generated autoloads from autoinsert.el (autoload 'auto-insert "autoinsert" "\ @@ -1604,8 +1604,8 @@ insert a template for the file depending on the mode of the buffer. ;;;*** -;;;### (autoloads nil "autoload" "emacs-lisp/autoload.el" (21673 -;;;;;; 8506 69195 402000)) +;;;### (autoloads nil "autoload" "emacs-lisp/autoload.el" (21710 +;;;;;; 32133 448296 262000)) ;;; Generated autoloads from emacs-lisp/autoload.el (put 'generated-autoload-file 'safe-local-variable 'stringp) @@ -1656,8 +1656,8 @@ should be non-nil). ;;;*** -;;;### (autoloads nil "autorevert" "autorevert.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "autorevert" "autorevert.el" (21710 32133 381295 +;;;;;; 913000)) ;;; Generated autoloads from autorevert.el (autoload 'auto-revert-mode "autorevert" "\ @@ -1745,7 +1745,7 @@ specifies in the mode line. ;;;*** -;;;### (autoloads nil "avoid" "avoid.el" (21670 32330 885624 725000)) +;;;### (autoloads nil "avoid" "avoid.el" (21710 32133 381295 913000)) ;;; Generated autoloads from avoid.el (defvar mouse-avoidance-mode nil "\ @@ -1783,8 +1783,8 @@ definition of \"random distance\".) ;;;*** -;;;### (autoloads nil "bat-mode" "progmodes/bat-mode.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "bat-mode" "progmodes/bat-mode.el" (21710 32133 +;;;;;; 715297 650000)) ;;; Generated autoloads from progmodes/bat-mode.el (add-to-list 'auto-mode-alist '("\\.\\(bat\\|cmd\\)\\'" . bat-mode)) @@ -1802,8 +1802,8 @@ Run script using `bat-run' and `bat-run-args'. ;;;*** -;;;### (autoloads nil "battery" "battery.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "battery" "battery.el" (21710 32133 382295 +;;;;;; 919000)) ;;; Generated autoloads from battery.el (put 'battery-mode-line-string 'risky-local-variable t) @@ -1838,8 +1838,8 @@ seconds. ;;;*** -;;;### (autoloads nil "benchmark" "emacs-lisp/benchmark.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "benchmark" "emacs-lisp/benchmark.el" (21710 +;;;;;; 32133 448296 262000)) ;;; Generated autoloads from emacs-lisp/benchmark.el (autoload 'benchmark-run "benchmark" "\ @@ -1875,8 +1875,8 @@ For non-interactive use see also `benchmark-run' and ;;;*** -;;;### (autoloads nil "bibtex" "textmodes/bibtex.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "bibtex" "textmodes/bibtex.el" (21710 32133 +;;;;;; 790298 40000)) ;;; Generated autoloads from textmodes/bibtex.el (autoload 'bibtex-initialize "bibtex" "\ @@ -1968,7 +1968,7 @@ A prefix arg negates the value of `bibtex-search-entry-globally'. ;;;*** ;;;### (autoloads nil "bibtex-style" "textmodes/bibtex-style.el" -;;;;;; (21670 32331 885635 586000)) +;;;;;; (21710 32133 788298 29000)) ;;; Generated autoloads from textmodes/bibtex-style.el (autoload 'bibtex-style-mode "bibtex-style" "\ @@ -1978,8 +1978,8 @@ Major mode for editing BibTeX style files. ;;;*** -;;;### (autoloads nil "binhex" "mail/binhex.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "binhex" "mail/binhex.el" (21710 32133 599297 +;;;;;; 47000)) ;;; Generated autoloads from mail/binhex.el (defconst binhex-begin-line "^:...............................................................$" "\ @@ -2003,8 +2003,8 @@ Binhex decode region between START and END. ;;;*** -;;;### (autoloads nil "blackbox" "play/blackbox.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "blackbox" "play/blackbox.el" (21710 32133 +;;;;;; 704297 593000)) ;;; Generated autoloads from play/blackbox.el (autoload 'blackbox "blackbox" "\ @@ -2123,8 +2123,8 @@ a reflection. ;;;*** -;;;### (autoloads nil "bookmark" "bookmark.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "bookmark" "bookmark.el" (21710 32133 383295 +;;;;;; 924000)) ;;; Generated autoloads from bookmark.el (define-key ctl-x-r-map "b" 'bookmark-jump) (define-key ctl-x-r-map "m" 'bookmark-set) @@ -2317,8 +2317,8 @@ Incremental search of bookmarks, hiding the non-matches as we go. ;;;*** -;;;### (autoloads nil "browse-url" "net/browse-url.el" (21710 2878 -;;;;;; 794621 967000)) +;;;### (autoloads nil "browse-url" "net/browse-url.el" (21710 32384 +;;;;;; 457601 257000)) ;;; Generated autoloads from net/browse-url.el (defvar browse-url-browser-function 'browse-url-default-browser "\ @@ -2633,7 +2633,7 @@ from `browse-url-elinks-wrapper'. ;;;*** -;;;### (autoloads nil "bs" "bs.el" (21670 32330 885624 725000)) +;;;### (autoloads nil "bs" "bs.el" (21710 32133 383295 924000)) ;;; Generated autoloads from bs.el (push (purecopy '(bs 1 17)) package--builtin-versions) @@ -2674,8 +2674,8 @@ name of buffer configuration. ;;;*** -;;;### (autoloads nil "bubbles" "play/bubbles.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "bubbles" "play/bubbles.el" (21710 32133 704297 +;;;;;; 593000)) ;;; Generated autoloads from play/bubbles.el (autoload 'bubbles "bubbles" "\ @@ -2697,7 +2697,7 @@ columns on its right towards the left. ;;;*** ;;;### (autoloads nil "bug-reference" "progmodes/bug-reference.el" -;;;;;; (21670 32331 385639 720000)) +;;;;;; (21710 32133 715297 650000)) ;;; Generated autoloads from progmodes/bug-reference.el (put 'bug-reference-url-format 'safe-local-variable (lambda (s) (or (stringp s) (and (symbolp s) (get s 'bug-reference-url-format))))) @@ -2717,8 +2717,8 @@ Like `bug-reference-mode', but only buttonize in comments and strings. ;;;*** -;;;### (autoloads nil "bytecomp" "emacs-lisp/bytecomp.el" (21696 -;;;;;; 56380 925320 624000)) +;;;### (autoloads nil "bytecomp" "emacs-lisp/bytecomp.el" (21710 +;;;;;; 32133 451296 277000)) ;;; Generated autoloads from emacs-lisp/bytecomp.el (put 'byte-compile-dynamic 'safe-local-variable 'booleanp) (put 'byte-compile-disable-print-circle 'safe-local-variable 'booleanp) @@ -2838,8 +2838,8 @@ and corresponding effects. ;;;*** -;;;### (autoloads nil "cal-china" "calendar/cal-china.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "cal-china" "calendar/cal-china.el" (21710 +;;;;;; 32133 399296 7000)) ;;; Generated autoloads from calendar/cal-china.el (put 'calendar-chinese-time-zone 'risky-local-variable t) @@ -2848,8 +2848,8 @@ and corresponding effects. ;;;*** -;;;### (autoloads nil "cal-dst" "calendar/cal-dst.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "cal-dst" "calendar/cal-dst.el" (21710 32133 +;;;;;; 400296 12000)) ;;; Generated autoloads from calendar/cal-dst.el (put 'calendar-daylight-savings-starts 'risky-local-variable t) @@ -2860,8 +2860,8 @@ and corresponding effects. ;;;*** -;;;### (autoloads nil "cal-hebrew" "calendar/cal-hebrew.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "cal-hebrew" "calendar/cal-hebrew.el" (21710 +;;;;;; 32133 400296 12000)) ;;; Generated autoloads from calendar/cal-hebrew.el (autoload 'calendar-hebrew-list-yahrzeits "cal-hebrew" "\ @@ -2873,7 +2873,7 @@ from the cursor position. ;;;*** -;;;### (autoloads nil "calc" "calc/calc.el" (21670 32330 885624 725000)) +;;;### (autoloads nil "calc" "calc/calc.el" (21710 32133 396295 992000)) ;;; Generated autoloads from calc/calc.el (define-key ctl-x-map "*" 'calc-dispatch) @@ -2959,8 +2959,8 @@ See Info node `(calc)Defining Functions'. ;;;*** -;;;### (autoloads nil "calc-undo" "calc/calc-undo.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "calc-undo" "calc/calc-undo.el" (21710 32133 +;;;;;; 394295 981000)) ;;; Generated autoloads from calc/calc-undo.el (autoload 'calc-undo "calc-undo" "\ @@ -2970,8 +2970,8 @@ See Info node `(calc)Defining Functions'. ;;;*** -;;;### (autoloads nil "calculator" "calculator.el" (21702 8774 274627 -;;;;;; 813000)) +;;;### (autoloads nil "calculator" "calculator.el" (21710 32133 399296 +;;;;;; 7000)) ;;; Generated autoloads from calculator.el (autoload 'calculator "calculator" "\ @@ -2982,8 +2982,8 @@ See the documentation for `calculator-mode' for more information. ;;;*** -;;;### (autoloads nil "calendar" "calendar/calendar.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "calendar" "calendar/calendar.el" (21710 32133 +;;;;;; 403296 28000)) ;;; Generated autoloads from calendar/calendar.el (autoload 'calendar "calendar" "\ @@ -3026,8 +3026,8 @@ This function is suitable for execution in an init file. ;;;*** -;;;### (autoloads nil "canlock" "gnus/canlock.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "canlock" "gnus/canlock.el" (21710 32133 514296 +;;;;;; 605000)) ;;; Generated autoloads from gnus/canlock.el (autoload 'canlock-insert-header "canlock" "\ @@ -3044,8 +3044,8 @@ it fails. ;;;*** -;;;### (autoloads nil "cc-engine" "progmodes/cc-engine.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "cc-engine" "progmodes/cc-engine.el" (21710 +;;;;;; 32133 721297 681000)) ;;; Generated autoloads from progmodes/cc-engine.el (autoload 'c-guess-basic-syntax "cc-engine" "\ @@ -3055,8 +3055,8 @@ Return the syntactic context of the current line. ;;;*** -;;;### (autoloads nil "cc-guess" "progmodes/cc-guess.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "cc-guess" "progmodes/cc-guess.el" (21710 32133 +;;;;;; 722297 686000)) ;;; Generated autoloads from progmodes/cc-guess.el (defvar c-guess-guessed-offsets-alist nil "\ @@ -3154,8 +3154,8 @@ the absolute file name of the file if STYLE-NAME is nil. ;;;*** -;;;### (autoloads nil "cc-mode" "progmodes/cc-mode.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "cc-mode" "progmodes/cc-mode.el" (21710 32133 +;;;;;; 724297 697000)) ;;; Generated autoloads from progmodes/cc-mode.el (autoload 'c-initialize-cc-mode "cc-mode" "\ @@ -3312,8 +3312,8 @@ Key bindings: ;;;*** -;;;### (autoloads nil "cc-styles" "progmodes/cc-styles.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "cc-styles" "progmodes/cc-styles.el" (21710 +;;;;;; 32133 724297 697000)) ;;; Generated autoloads from progmodes/cc-styles.el (autoload 'c-set-style "cc-styles" "\ @@ -3364,8 +3364,8 @@ and exists only for compatibility reasons. ;;;*** -;;;### (autoloads nil "cc-vars" "progmodes/cc-vars.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "cc-vars" "progmodes/cc-vars.el" (21710 32133 +;;;;;; 725297 702000)) ;;; Generated autoloads from progmodes/cc-vars.el (put 'c-basic-offset 'safe-local-variable 'integerp) (put 'c-backslash-column 'safe-local-variable 'integerp) @@ -3373,8 +3373,8 @@ and exists only for compatibility reasons. ;;;*** -;;;### (autoloads nil "ccl" "international/ccl.el" (21682 23484 726747 -;;;;;; 991000)) +;;;### (autoloads nil "ccl" "international/ccl.el" (21710 32133 564296 +;;;;;; 865000)) ;;; Generated autoloads from international/ccl.el (autoload 'ccl-compile "ccl" "\ @@ -3667,8 +3667,8 @@ See the documentation of `define-ccl-program' for the detail of CCL program. ;;;*** -;;;### (autoloads nil "cconv" "emacs-lisp/cconv.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "cconv" "emacs-lisp/cconv.el" (21710 32133 +;;;;;; 451296 277000)) ;;; Generated autoloads from emacs-lisp/cconv.el (autoload 'cconv-closure-convert "cconv" "\ @@ -3687,15 +3687,15 @@ Add the warnings that closure conversion would encounter. ;;;*** -;;;### (autoloads nil "cedet" "cedet/cedet.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "cedet" "cedet/cedet.el" (21710 32133 409296 +;;;;;; 59000)) ;;; Generated autoloads from cedet/cedet.el (push (purecopy '(cedet 2 0)) package--builtin-versions) ;;;*** -;;;### (autoloads nil "cfengine" "progmodes/cfengine.el" (21695 35516 -;;;;;; 595262 313000)) +;;;### (autoloads nil "cfengine" "progmodes/cfengine.el" (21710 32133 +;;;;;; 725297 702000)) ;;; Generated autoloads from progmodes/cfengine.el (push (purecopy '(cfengine 1 3)) package--builtin-versions) @@ -3724,15 +3724,15 @@ Choose `cfengine2-mode' or `cfengine3-mode' by buffer contents. ;;;*** -;;;### (autoloads nil "chart" "emacs-lisp/chart.el" (21679 47292 -;;;;;; 556033 759000)) +;;;### (autoloads nil "chart" "emacs-lisp/chart.el" (21710 32133 +;;;;;; 451296 277000)) ;;; Generated autoloads from emacs-lisp/chart.el (push (purecopy '(chart 0 2)) package--builtin-versions) ;;;*** ;;;### (autoloads nil "check-declare" "emacs-lisp/check-declare.el" -;;;;;; (21670 32330 885624 725000)) +;;;;;; (21710 32133 451296 277000)) ;;; Generated autoloads from emacs-lisp/check-declare.el (autoload 'check-declare-file "check-declare" "\ @@ -3749,8 +3749,8 @@ Returns non-nil if any false statements are found. ;;;*** -;;;### (autoloads nil "checkdoc" "emacs-lisp/checkdoc.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "checkdoc" "emacs-lisp/checkdoc.el" (21710 +;;;;;; 32133 452296 283000)) ;;; Generated autoloads from emacs-lisp/checkdoc.el (push (purecopy '(checkdoc 0 6 2)) package--builtin-versions) (put 'checkdoc-force-docstrings-flag 'safe-local-variable #'booleanp) @@ -3950,8 +3950,8 @@ checking of documentation strings. ;;;*** -;;;### (autoloads nil "china-util" "language/china-util.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "china-util" "language/china-util.el" (21710 +;;;;;; 32133 574296 917000)) ;;; Generated autoloads from language/china-util.el (autoload 'decode-hz-region "china-util" "\ @@ -3988,8 +3988,8 @@ Encode the text in the current buffer to HZ. ;;;*** -;;;### (autoloads nil "chistory" "chistory.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "chistory" "chistory.el" (21710 32133 434296 +;;;;;; 189000)) ;;; Generated autoloads from chistory.el (autoload 'repeat-matching-complex-command "chistory" "\ @@ -4028,8 +4028,8 @@ and runs the normal hook `command-history-hook'. ;;;*** -;;;### (autoloads nil "cl-indent" "emacs-lisp/cl-indent.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "cl-indent" "emacs-lisp/cl-indent.el" (21710 +;;;;;; 32133 453296 288000)) ;;; Generated autoloads from emacs-lisp/cl-indent.el (autoload 'common-lisp-indent-function "cl-indent" "\ @@ -4112,8 +4112,8 @@ instead. ;;;*** -;;;### (autoloads nil "cl-lib" "emacs-lisp/cl-lib.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "cl-lib" "emacs-lisp/cl-lib.el" (21710 32133 +;;;;;; 453296 288000)) ;;; Generated autoloads from emacs-lisp/cl-lib.el (push (purecopy '(cl-lib 1 0)) package--builtin-versions) @@ -4143,8 +4143,8 @@ a future Emacs interpreter will be able to use it.") ;;;*** -;;;### (autoloads nil "cmacexp" "progmodes/cmacexp.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "cmacexp" "progmodes/cmacexp.el" (21710 32133 +;;;;;; 725297 702000)) ;;; Generated autoloads from progmodes/cmacexp.el (autoload 'c-macro-expand "cmacexp" "\ @@ -4164,8 +4164,8 @@ For use inside Lisp programs, see also `c-macro-expansion'. ;;;*** -;;;### (autoloads nil "cmuscheme" "cmuscheme.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "cmuscheme" "cmuscheme.el" (21710 32133 434296 +;;;;;; 189000)) ;;; Generated autoloads from cmuscheme.el (autoload 'run-scheme "cmuscheme" "\ @@ -4185,7 +4185,7 @@ is run). ;;;*** -;;;### (autoloads nil "color" "color.el" (21670 32330 885624 725000)) +;;;### (autoloads nil "color" "color.el" (21710 32133 435296 194000)) ;;; Generated autoloads from color.el (autoload 'color-name-to-rgb "color" "\ @@ -4204,7 +4204,7 @@ If FRAME cannot display COLOR, return nil. ;;;*** -;;;### (autoloads nil "comint" "comint.el" (21670 32330 885624 725000)) +;;;### (autoloads nil "comint" "comint.el" (21710 32133 436296 200000)) ;;; Generated autoloads from comint.el (defvar comint-output-filter-functions '(ansi-color-process-output comint-postoutput-scroll-to-bottom comint-watch-for-password-prompt) "\ @@ -4305,8 +4305,8 @@ REGEXP-GROUP is the regular expression group in REGEXP to use. ;;;*** -;;;### (autoloads nil "compare-w" "vc/compare-w.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "compare-w" "vc/compare-w.el" (21710 32133 +;;;;;; 814298 165000)) ;;; Generated autoloads from vc/compare-w.el (autoload 'compare-windows "compare-w" "\ @@ -4342,8 +4342,8 @@ on third call it again advances points to the next difference and so on. ;;;*** -;;;### (autoloads nil "compile" "progmodes/compile.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "compile" "progmodes/compile.el" (21710 32133 +;;;;;; 726297 707000)) ;;; Generated autoloads from progmodes/compile.el (defvar compilation-mode-hook nil "\ @@ -4524,8 +4524,8 @@ This is the value of `next-error-function' in Compilation buffers. ;;;*** -;;;### (autoloads nil "completion" "completion.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "completion" "completion.el" (21710 32133 436296 +;;;;;; 200000)) ;;; Generated autoloads from completion.el (defvar dynamic-completion-mode nil "\ @@ -4547,8 +4547,8 @@ if ARG is omitted or nil. ;;;*** -;;;### (autoloads nil "conf-mode" "textmodes/conf-mode.el" (21670 -;;;;;; 32331 885635 586000)) +;;;### (autoloads nil "conf-mode" "textmodes/conf-mode.el" (21710 +;;;;;; 32133 790298 40000)) ;;; Generated autoloads from textmodes/conf-mode.el (autoload 'conf-mode "conf-mode" "\ @@ -4703,8 +4703,8 @@ For details see `conf-mode'. Example: ;;;*** -;;;### (autoloads nil "cookie1" "play/cookie1.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "cookie1" "play/cookie1.el" (21710 32133 704297 +;;;;;; 593000)) ;;; Generated autoloads from play/cookie1.el (autoload 'cookie "cookie1" "\ @@ -4732,8 +4732,8 @@ and subsequent calls on the same file won't go to disk. ;;;*** -;;;### (autoloads nil "copyright" "emacs-lisp/copyright.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "copyright" "emacs-lisp/copyright.el" (21710 +;;;;;; 32133 455296 298000)) ;;; Generated autoloads from emacs-lisp/copyright.el (put 'copyright-at-end-flag 'safe-local-variable 'booleanp) (put 'copyright-names-regexp 'safe-local-variable 'stringp) @@ -4771,8 +4771,8 @@ If FIX is non-nil, run `copyright-fix-years' instead. ;;;*** -;;;### (autoloads nil "cperl-mode" "progmodes/cperl-mode.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "cperl-mode" "progmodes/cperl-mode.el" (21710 +;;;;;; 32133 729297 723000)) ;;; Generated autoloads from progmodes/cperl-mode.el (put 'cperl-indent-level 'safe-local-variable 'integerp) (put 'cperl-brace-offset 'safe-local-variable 'integerp) @@ -4970,8 +4970,8 @@ Run a `perldoc' on the word around point. ;;;*** -;;;### (autoloads nil "cpp" "progmodes/cpp.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "cpp" "progmodes/cpp.el" (21710 32133 729297 +;;;;;; 723000)) ;;; Generated autoloads from progmodes/cpp.el (autoload 'cpp-highlight-buffer "cpp" "\ @@ -4989,8 +4989,8 @@ Edit display information for cpp conditionals. ;;;*** -;;;### (autoloads nil "crm" "emacs-lisp/crm.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "crm" "emacs-lisp/crm.el" (21710 32133 455296 +;;;;;; 298000)) ;;; Generated autoloads from emacs-lisp/crm.el (autoload 'completing-read-multiple "crm" "\ @@ -5016,8 +5016,8 @@ with empty strings removed. ;;;*** -;;;### (autoloads nil "css-mode" "textmodes/css-mode.el" (21669 40225 -;;;;;; 825176 608000)) +;;;### (autoloads nil "css-mode" "textmodes/css-mode.el" (21710 32133 +;;;;;; 790298 40000)) ;;; Generated autoloads from textmodes/css-mode.el (autoload 'css-mode "css-mode" "\ @@ -5033,8 +5033,8 @@ Major mode to edit \"Sassy CSS\" files. ;;;*** -;;;### (autoloads nil "cua-base" "emulation/cua-base.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "cua-base" "emulation/cua-base.el" (21710 32133 +;;;;;; 469296 371000)) ;;; Generated autoloads from emulation/cua-base.el (defvar cua-mode nil "\ @@ -5079,8 +5079,8 @@ Enable CUA selection mode without the C-z/C-x/C-c/C-v bindings. ;;;*** -;;;### (autoloads nil "cua-rect" "emulation/cua-rect.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "cua-rect" "emulation/cua-rect.el" (21710 32133 +;;;;;; 470296 376000)) ;;; Generated autoloads from emulation/cua-rect.el (autoload 'cua-rectangle-mark-mode "cua-rect" "\ @@ -5091,8 +5091,8 @@ Activates the region if needed. Only lasts until the region is deactivated. ;;;*** -;;;### (autoloads nil "cus-edit" "cus-edit.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "cus-edit" "cus-edit.el" (21710 32133 438296 +;;;;;; 210000)) ;;; Generated autoloads from cus-edit.el (defvar custom-browse-sort-alphabetically nil "\ @@ -5411,8 +5411,8 @@ The format is suitable for use with `easy-menu-define'. ;;;*** -;;;### (autoloads nil "cus-theme" "cus-theme.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "cus-theme" "cus-theme.el" (21710 32133 439296 +;;;;;; 215000)) ;;; Generated autoloads from cus-theme.el (autoload 'customize-create-theme "cus-theme" "\ @@ -5445,8 +5445,8 @@ omitted, a buffer named *Custom Themes* is used. ;;;*** -;;;### (autoloads nil "cvs-status" "vc/cvs-status.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "cvs-status" "vc/cvs-status.el" (21710 32133 +;;;;;; 815298 170000)) ;;; Generated autoloads from vc/cvs-status.el (autoload 'cvs-status-mode "cvs-status" "\ @@ -5456,8 +5456,8 @@ Mode used for cvs status output. ;;;*** -;;;### (autoloads nil "cwarn" "progmodes/cwarn.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "cwarn" "progmodes/cwarn.el" (21710 32133 729297 +;;;;;; 723000)) ;;; Generated autoloads from progmodes/cwarn.el (push (purecopy '(cwarn 1 3 1)) package--builtin-versions) @@ -5501,8 +5501,8 @@ See `cwarn-mode' for more information on Cwarn mode. ;;;*** -;;;### (autoloads nil "cyril-util" "language/cyril-util.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "cyril-util" "language/cyril-util.el" (21710 +;;;;;; 32133 574296 917000)) ;;; Generated autoloads from language/cyril-util.el (autoload 'cyrillic-encode-koi8-r-char "cyril-util" "\ @@ -5530,8 +5530,8 @@ If the argument is nil, we return the display table to its standard state. ;;;*** -;;;### (autoloads nil "dabbrev" "dabbrev.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "dabbrev" "dabbrev.el" (21710 32133 439296 +;;;;;; 215000)) ;;; Generated autoloads from dabbrev.el (put 'dabbrev-case-fold-search 'risky-local-variable t) (put 'dabbrev-case-replace 'risky-local-variable t) @@ -5577,8 +5577,8 @@ See also `dabbrev-abbrev-char-regexp' and \\[dabbrev-completion]. ;;;*** -;;;### (autoloads nil "data-debug" "cedet/data-debug.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "data-debug" "cedet/data-debug.el" (21710 32133 +;;;;;; 409296 59000)) ;;; Generated autoloads from cedet/data-debug.el (autoload 'data-debug-new-buffer "data-debug" "\ @@ -5588,7 +5588,7 @@ Create a new data-debug buffer with NAME. ;;;*** -;;;### (autoloads nil "dbus" "net/dbus.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "dbus" "net/dbus.el" (21710 32133 628297 198000)) ;;; Generated autoloads from net/dbus.el (autoload 'dbus-handle-event "dbus" "\ @@ -5601,8 +5601,8 @@ If the HANDLER returns a `dbus-error', it is propagated as return message. ;;;*** -;;;### (autoloads nil "dcl-mode" "progmodes/dcl-mode.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "dcl-mode" "progmodes/dcl-mode.el" (21710 32133 +;;;;;; 729297 723000)) ;;; Generated autoloads from progmodes/dcl-mode.el (autoload 'dcl-mode "dcl-mode" "\ @@ -5728,8 +5728,8 @@ There is some minimal font-lock support (see vars ;;;*** -;;;### (autoloads nil "debug" "emacs-lisp/debug.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "debug" "emacs-lisp/debug.el" (21710 32133 +;;;;;; 455296 298000)) ;;; Generated autoloads from emacs-lisp/debug.el (setq debugger 'debug) @@ -5772,8 +5772,8 @@ To specify a nil argument interactively, exit with an empty minibuffer. ;;;*** -;;;### (autoloads nil "decipher" "play/decipher.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "decipher" "play/decipher.el" (21710 32133 +;;;;;; 705297 598000)) ;;; Generated autoloads from play/decipher.el (autoload 'decipher "decipher" "\ @@ -5801,8 +5801,8 @@ The most useful commands are: ;;;*** -;;;### (autoloads nil "delim-col" "delim-col.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "delim-col" "delim-col.el" (21710 32133 440296 +;;;;;; 220000)) ;;; Generated autoloads from delim-col.el (push (purecopy '(delim-col 2 1)) package--builtin-versions) @@ -5827,7 +5827,7 @@ START and END delimits the corners of text rectangle. ;;;*** -;;;### (autoloads nil "delsel" "delsel.el" (21670 32330 885624 725000)) +;;;### (autoloads nil "delsel" "delsel.el" (21710 32133 440296 220000)) ;;; Generated autoloads from delsel.el (defalias 'pending-delete-mode 'delete-selection-mode) @@ -5855,8 +5855,8 @@ point regardless of any selection. ;;;*** -;;;### (autoloads nil "derived" "emacs-lisp/derived.el" (21703 29629 -;;;;;; 608890 826000)) +;;;### (autoloads nil "derived" "emacs-lisp/derived.el" (21710 32133 +;;;;;; 456296 304000)) ;;; Generated autoloads from emacs-lisp/derived.el (autoload 'define-derived-mode "derived" "\ @@ -5924,8 +5924,8 @@ the first time the mode is used. ;;;*** -;;;### (autoloads nil "descr-text" "descr-text.el" (21695 35516 595262 -;;;;;; 313000)) +;;;### (autoloads nil "descr-text" "descr-text.el" (21710 32133 440296 +;;;;;; 220000)) ;;; Generated autoloads from descr-text.el (autoload 'describe-text-properties "descr-text" "\ @@ -5974,7 +5974,8 @@ This function is meant to be used as a value of ;;;*** -;;;### (autoloads nil "desktop" "desktop.el" (21691 38459 74604 918000)) +;;;### (autoloads nil "desktop" "desktop.el" (21710 32133 441296 +;;;;;; 225000)) ;;; Generated autoloads from desktop.el (defvar desktop-save-mode nil "\ @@ -6179,8 +6180,8 @@ Revert to the last loaded desktop. ;;;*** -;;;### (autoloads nil "deuglify" "gnus/deuglify.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "deuglify" "gnus/deuglify.el" (21710 32133 +;;;;;; 514296 605000)) ;;; Generated autoloads from gnus/deuglify.el (autoload 'gnus-article-outlook-unwrap-lines "deuglify" "\ @@ -6212,8 +6213,8 @@ Deuglify broken Outlook (Express) articles and redisplay. ;;;*** -;;;### (autoloads nil "diary-lib" "calendar/diary-lib.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "diary-lib" "calendar/diary-lib.el" (21710 +;;;;;; 32133 403296 28000)) ;;; Generated autoloads from calendar/diary-lib.el (autoload 'diary "diary-lib" "\ @@ -6255,7 +6256,7 @@ Major mode for editing the diary file. ;;;*** -;;;### (autoloads nil "diff" "vc/diff.el" (21670 32331 885635 586000)) +;;;### (autoloads nil "diff" "vc/diff.el" (21710 32133 815298 170000)) ;;; Generated autoloads from vc/diff.el (defvar diff-switches (purecopy "-c") "\ @@ -6303,8 +6304,8 @@ This requires the external program `diff' to be in your `exec-path'. ;;;*** -;;;### (autoloads nil "diff-mode" "vc/diff-mode.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "diff-mode" "vc/diff-mode.el" (21710 32133 +;;;;;; 815298 170000)) ;;; Generated autoloads from vc/diff-mode.el (autoload 'diff-mode "diff-mode" "\ @@ -6336,7 +6337,7 @@ the mode if ARG is omitted or nil. ;;;*** -;;;### (autoloads nil "dig" "net/dig.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "dig" "net/dig.el" (21710 32133 628297 198000)) ;;; Generated autoloads from net/dig.el (autoload 'dig "dig" "\ @@ -6347,7 +6348,7 @@ Optional arguments are passed to `dig-invoke'. ;;;*** -;;;### (autoloads nil "dired" "dired.el" (21670 32624 385626 484000)) +;;;### (autoloads nil "dired" "dired.el" (21710 32133 443296 236000)) ;;; Generated autoloads from dired.el (defvar dired-listing-switches (purecopy "-al") "\ @@ -6467,8 +6468,8 @@ Keybindings: ;;;*** -;;;### (autoloads nil "dirtrack" "dirtrack.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "dirtrack" "dirtrack.el" (21710 32133 444296 +;;;;;; 241000)) ;;; Generated autoloads from dirtrack.el (autoload 'dirtrack-mode "dirtrack" "\ @@ -6498,8 +6499,8 @@ from `default-directory'. ;;;*** -;;;### (autoloads nil "disass" "emacs-lisp/disass.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "disass" "emacs-lisp/disass.el" (21710 32133 +;;;;;; 456296 304000)) ;;; Generated autoloads from emacs-lisp/disass.el (autoload 'disassemble "disass" "\ @@ -6513,8 +6514,8 @@ redefine OBJECT if it is a symbol. ;;;*** -;;;### (autoloads nil "disp-table" "disp-table.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "disp-table" "disp-table.el" (21710 32133 444296 +;;;;;; 241000)) ;;; Generated autoloads from disp-table.el (autoload 'make-display-table "disp-table" "\ @@ -6635,8 +6636,8 @@ in `.emacs'. ;;;*** -;;;### (autoloads nil "dissociate" "play/dissociate.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "dissociate" "play/dissociate.el" (21710 32133 +;;;;;; 705297 598000)) ;;; Generated autoloads from play/dissociate.el (autoload 'dissociated-press "dissociate" "\ @@ -6652,7 +6653,7 @@ Default is 2. ;;;*** -;;;### (autoloads nil "dnd" "dnd.el" (21670 32330 885624 725000)) +;;;### (autoloads nil "dnd" "dnd.el" (21710 32133 444296 241000)) ;;; Generated autoloads from dnd.el (defvar dnd-protocol-alist `((,(purecopy "^file:///") . dnd-open-local-file) (,(purecopy "^file://") . dnd-open-file) (,(purecopy "^file:") . dnd-open-local-file) (,(purecopy "^\\(https?\\|ftp\\|file\\|nfs\\)://") . dnd-open-file)) "\ @@ -6672,8 +6673,8 @@ if some action was made, or nil if the URL is ignored.") ;;;*** -;;;### (autoloads nil "dns-mode" "textmodes/dns-mode.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "dns-mode" "textmodes/dns-mode.el" (21710 32133 +;;;;;; 790298 40000)) ;;; Generated autoloads from textmodes/dns-mode.el (autoload 'dns-mode "dns-mode" "\ @@ -6696,8 +6697,8 @@ Locate SOA record and increment the serial field. ;;;*** -;;;### (autoloads nil "doc-view" "doc-view.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "doc-view" "doc-view.el" (21710 32133 444296 +;;;;;; 241000)) ;;; Generated autoloads from doc-view.el (autoload 'doc-view-mode-p "doc-view" "\ @@ -6743,8 +6744,8 @@ See the command `doc-view-mode' for more information on this mode. ;;;*** -;;;### (autoloads nil "doctor" "play/doctor.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "doctor" "play/doctor.el" (21710 32133 705297 +;;;;;; 598000)) ;;; Generated autoloads from play/doctor.el (autoload 'doctor "doctor" "\ @@ -6754,7 +6755,7 @@ Switch to *doctor* buffer and start giving psychotherapy. ;;;*** -;;;### (autoloads nil "double" "double.el" (21670 32330 885624 725000)) +;;;### (autoloads nil "double" "double.el" (21710 32133 445296 246000)) ;;; Generated autoloads from double.el (autoload 'double-mode "double" "\ @@ -6770,8 +6771,8 @@ strings when pressed twice. See `double-map' for details. ;;;*** -;;;### (autoloads nil "dunnet" "play/dunnet.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "dunnet" "play/dunnet.el" (21710 32133 706297 +;;;;;; 603000)) ;;; Generated autoloads from play/dunnet.el (push (purecopy '(dunnet 2 1)) package--builtin-versions) @@ -6782,8 +6783,8 @@ Switch to *dungeon* buffer and start game. ;;;*** -;;;### (autoloads nil "easy-mmode" "emacs-lisp/easy-mmode.el" (21708 -;;;;;; 47547 478182 210000)) +;;;### (autoloads nil "easy-mmode" "emacs-lisp/easy-mmode.el" (21710 +;;;;;; 32133 456296 304000)) ;;; Generated autoloads from emacs-lisp/easy-mmode.el (defalias 'easy-mmode-define-minor-mode 'define-minor-mode) @@ -6924,8 +6925,8 @@ CSS contains a list of syntax specifications of the form (CHAR . SYNTAX). ;;;*** -;;;### (autoloads nil "easymenu" "emacs-lisp/easymenu.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "easymenu" "emacs-lisp/easymenu.el" (21710 +;;;;;; 32133 456296 304000)) ;;; Generated autoloads from emacs-lisp/easymenu.el (autoload 'easy-menu-define "easymenu" "\ @@ -7063,8 +7064,8 @@ To implement dynamic menus, either call this from ;;;*** -;;;### (autoloads nil "ebnf2ps" "progmodes/ebnf2ps.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "ebnf2ps" "progmodes/ebnf2ps.el" (21710 32133 +;;;;;; 732297 738000)) ;;; Generated autoloads from progmodes/ebnf2ps.el (push (purecopy '(ebnf2ps 4 4)) package--builtin-versions) @@ -7329,8 +7330,8 @@ See `ebnf-style-database' documentation. ;;;*** -;;;### (autoloads nil "ebrowse" "progmodes/ebrowse.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "ebrowse" "progmodes/ebrowse.el" (21710 32133 +;;;;;; 733297 744000)) ;;; Generated autoloads from progmodes/ebrowse.el (autoload 'ebrowse-tree-mode "ebrowse" "\ @@ -7478,8 +7479,8 @@ Display statistics for a class tree. ;;;*** -;;;### (autoloads nil "ebuff-menu" "ebuff-menu.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "ebuff-menu" "ebuff-menu.el" (21710 32133 445296 +;;;;;; 246000)) ;;; Generated autoloads from ebuff-menu.el (autoload 'electric-buffer-list "ebuff-menu" "\ @@ -7511,8 +7512,8 @@ Run hooks in `electric-buffer-menu-mode-hook' on entry. ;;;*** -;;;### (autoloads nil "echistory" "echistory.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "echistory" "echistory.el" (21710 32133 445296 +;;;;;; 246000)) ;;; Generated autoloads from echistory.el (autoload 'Electric-command-history-redo-expression "echistory" "\ @@ -7523,8 +7524,8 @@ With prefix arg NOCONFIRM, execute current line as-is without editing. ;;;*** -;;;### (autoloads nil "ecomplete" "gnus/ecomplete.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "ecomplete" "gnus/ecomplete.el" (21710 32133 +;;;;;; 514296 605000)) ;;; Generated autoloads from gnus/ecomplete.el (autoload 'ecomplete-setup "ecomplete" "\ @@ -7534,7 +7535,7 @@ With prefix arg NOCONFIRM, execute current line as-is without editing. ;;;*** -;;;### (autoloads nil "ede" "cedet/ede.el" (21679 47292 556033 759000)) +;;;### (autoloads nil "ede" "cedet/ede.el" (21710 32133 410296 64000)) ;;; Generated autoloads from cedet/ede.el (push (purecopy '(ede 1 2)) package--builtin-versions) @@ -7560,8 +7561,8 @@ an EDE controlled project. ;;;*** -;;;### (autoloads nil "edebug" "emacs-lisp/edebug.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "edebug" "emacs-lisp/edebug.el" (21710 32133 +;;;;;; 457296 309000)) ;;; Generated autoloads from emacs-lisp/edebug.el (defvar edebug-all-defs nil "\ @@ -7625,7 +7626,7 @@ Toggle edebugging of all forms. ;;;*** -;;;### (autoloads nil "ediff" "vc/ediff.el" (21670 32331 885635 586000)) +;;;### (autoloads nil "ediff" "vc/ediff.el" (21710 32133 820298 196000)) ;;; Generated autoloads from vc/ediff.el (push (purecopy '(ediff 2 81 4)) package--builtin-versions) @@ -7897,8 +7898,8 @@ With optional NODE, goes to that node. ;;;*** -;;;### (autoloads nil "ediff-help" "vc/ediff-help.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "ediff-help" "vc/ediff-help.el" (21710 32133 +;;;;;; 816298 175000)) ;;; Generated autoloads from vc/ediff-help.el (autoload 'ediff-customize "ediff-help" "\ @@ -7908,8 +7909,8 @@ With optional NODE, goes to that node. ;;;*** -;;;### (autoloads nil "ediff-mult" "vc/ediff-mult.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "ediff-mult" "vc/ediff-mult.el" (21710 32133 +;;;;;; 817298 180000)) ;;; Generated autoloads from vc/ediff-mult.el (autoload 'ediff-show-registry "ediff-mult" "\ @@ -7921,8 +7922,8 @@ Display Ediff's registry. ;;;*** -;;;### (autoloads nil "ediff-util" "vc/ediff-util.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "ediff-util" "vc/ediff-util.el" (21710 32133 +;;;;;; 819298 191000)) ;;; Generated autoloads from vc/ediff-util.el (autoload 'ediff-toggle-multiframe "ediff-util" "\ @@ -7941,8 +7942,8 @@ To change the default, set the variable `ediff-use-toolbar-p', which see. ;;;*** -;;;### (autoloads nil "edmacro" "edmacro.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "edmacro" "edmacro.el" (21710 32133 446296 +;;;;;; 252000)) ;;; Generated autoloads from edmacro.el (push (purecopy '(edmacro 2 1)) package--builtin-versions) @@ -7991,8 +7992,8 @@ or nil, use a compact 80-column format. ;;;*** -;;;### (autoloads nil "edt" "emulation/edt.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "edt" "emulation/edt.el" (21710 32133 471296 +;;;;;; 381000)) ;;; Generated autoloads from emulation/edt.el (autoload 'edt-set-scroll-margins "edt" "\ @@ -8009,7 +8010,7 @@ Turn on EDT Emulation. ;;;*** -;;;### (autoloads nil "ehelp" "ehelp.el" (21670 32330 885624 725000)) +;;;### (autoloads nil "ehelp" "ehelp.el" (21710 32133 446296 252000)) ;;; Generated autoloads from ehelp.el (autoload 'with-electric-help "ehelp" "\ @@ -8045,15 +8046,15 @@ BUFFER is put back into its original major mode. ;;;*** -;;;### (autoloads nil "eieio" "emacs-lisp/eieio.el" (21708 47547 -;;;;;; 478182 210000)) +;;;### (autoloads nil "eieio" "emacs-lisp/eieio.el" (21710 32133 +;;;;;; 459296 319000)) ;;; Generated autoloads from emacs-lisp/eieio.el (push (purecopy '(eieio 1 4)) package--builtin-versions) ;;;*** -;;;### (autoloads nil "eieio-core" "emacs-lisp/eieio-core.el" (21708 -;;;;;; 47547 478182 210000)) +;;;### (autoloads nil "eieio-core" "emacs-lisp/eieio-core.el" (21710 +;;;;;; 32133 458296 314000)) ;;; Generated autoloads from emacs-lisp/eieio-core.el (push (purecopy '(eieio-core 1 4)) package--builtin-versions) @@ -8069,8 +8070,8 @@ It creates an autoload function for CNAME's constructor. ;;;*** -;;;### (autoloads nil "elec-pair" "elec-pair.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "elec-pair" "elec-pair.el" (21710 32133 446296 +;;;;;; 252000)) ;;; Generated autoloads from elec-pair.el (defvar electric-pair-text-pairs '((34 . 34)) "\ @@ -8105,8 +8106,8 @@ closing parenthesis. (Likewise for brackets, etc.). ;;;*** -;;;### (autoloads nil "elide-head" "elide-head.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "elide-head" "elide-head.el" (21710 32133 446296 +;;;;;; 252000)) ;;; Generated autoloads from elide-head.el (autoload 'elide-head "elide-head" "\ @@ -8121,8 +8122,8 @@ This is suitable as an entry on `find-file-hook' or appropriate mode hooks. ;;;*** -;;;### (autoloads nil "elint" "emacs-lisp/elint.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "elint" "emacs-lisp/elint.el" (21710 32133 +;;;;;; 460296 324000)) ;;; Generated autoloads from emacs-lisp/elint.el (autoload 'elint-file "elint" "\ @@ -8157,8 +8158,8 @@ optional prefix argument REINIT is non-nil. ;;;*** -;;;### (autoloads nil "elp" "emacs-lisp/elp.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "elp" "emacs-lisp/elp.el" (21710 32133 460296 +;;;;;; 324000)) ;;; Generated autoloads from emacs-lisp/elp.el (autoload 'elp-instrument-function "elp" "\ @@ -8192,8 +8193,8 @@ displayed. ;;;*** -;;;### (autoloads nil "emacs-lock" "emacs-lock.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "emacs-lock" "emacs-lock.el" (21710 32133 468296 +;;;;;; 366000)) ;;; Generated autoloads from emacs-lock.el (autoload 'emacs-lock-mode "emacs-lock" "\ @@ -8220,8 +8221,8 @@ Other values are interpreted as usual. ;;;*** -;;;### (autoloads nil "emacsbug" "mail/emacsbug.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "emacsbug" "mail/emacsbug.el" (21710 32133 +;;;;;; 600297 52000)) ;;; Generated autoloads from mail/emacsbug.el (autoload 'report-emacs-bug "emacsbug" "\ @@ -8234,8 +8235,8 @@ Prompts for bug subject. Leaves you in a mail buffer. ;;;*** -;;;### (autoloads nil "emerge" "vc/emerge.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "emerge" "vc/emerge.el" (21710 32133 820298 +;;;;;; 196000)) ;;; Generated autoloads from vc/emerge.el (autoload 'emerge-files "emerge" "\ @@ -8295,8 +8296,8 @@ Emerge two RCS revisions of a file, with another revision as ancestor. ;;;*** -;;;### (autoloads nil "enriched" "textmodes/enriched.el" (21691 38459 -;;;;;; 74604 918000)) +;;;### (autoloads nil "enriched" "textmodes/enriched.el" (21710 32133 +;;;;;; 791298 45000)) ;;; Generated autoloads from textmodes/enriched.el (autoload 'enriched-mode "enriched" "\ @@ -8331,7 +8332,7 @@ Commands: ;;;*** -;;;### (autoloads nil "epa" "epa.el" (21670 32330 885624 725000)) +;;;### (autoloads nil "epa" "epa.el" (21710 32133 475296 402000)) ;;; Generated autoloads from epa.el (autoload 'epa-list-keys "epa" "\ @@ -8519,8 +8520,8 @@ Insert selected KEYS after the point. ;;;*** -;;;### (autoloads nil "epa-dired" "epa-dired.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "epa-dired" "epa-dired.el" (21710 32133 475296 +;;;;;; 402000)) ;;; Generated autoloads from epa-dired.el (autoload 'epa-dired-do-decrypt "epa-dired" "\ @@ -8545,8 +8546,8 @@ Encrypt marked files. ;;;*** -;;;### (autoloads nil "epa-file" "epa-file.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "epa-file" "epa-file.el" (21710 32133 475296 +;;;;;; 402000)) ;;; Generated autoloads from epa-file.el (autoload 'epa-file-handler "epa-file" "\ @@ -8566,8 +8567,8 @@ Encrypt marked files. ;;;*** -;;;### (autoloads nil "epa-mail" "epa-mail.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "epa-mail" "epa-mail.el" (21710 32133 475296 +;;;;;; 402000)) ;;; Generated autoloads from epa-mail.el (autoload 'epa-mail-mode "epa-mail" "\ @@ -8644,7 +8645,7 @@ if ARG is omitted or nil. ;;;*** -;;;### (autoloads nil "epg" "epg.el" (21670 32330 885624 725000)) +;;;### (autoloads nil "epg" "epg.el" (21710 32133 476296 407000)) ;;; Generated autoloads from epg.el (push (purecopy '(epg 1 0 0)) package--builtin-versions) @@ -8655,8 +8656,8 @@ Return a context object. ;;;*** -;;;### (autoloads nil "epg-config" "epg-config.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "epg-config" "epg-config.el" (21710 32133 475296 +;;;;;; 402000)) ;;; Generated autoloads from epg-config.el (autoload 'epg-configuration "epg-config" "\ @@ -8676,7 +8677,7 @@ Look at CONFIG and try to expand GROUP. ;;;*** -;;;### (autoloads nil "erc" "erc/erc.el" (21670 32330 885624 725000)) +;;;### (autoloads nil "erc" "erc/erc.el" (21710 32133 487296 465000)) ;;; Generated autoloads from erc/erc.el (autoload 'erc-select-read-args "erc" "\ @@ -8724,36 +8725,36 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL. ;;;*** -;;;### (autoloads nil "erc-autoaway" "erc/erc-autoaway.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "erc-autoaway" "erc/erc-autoaway.el" (21710 +;;;;;; 32133 480296 428000)) ;;; Generated autoloads from erc/erc-autoaway.el (autoload 'erc-autoaway-mode "erc-autoaway") ;;;*** -;;;### (autoloads nil "erc-button" "erc/erc-button.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "erc-button" "erc/erc-button.el" (21710 32133 +;;;;;; 481296 433000)) ;;; Generated autoloads from erc/erc-button.el (autoload 'erc-button-mode "erc-button" nil t) ;;;*** -;;;### (autoloads nil "erc-capab" "erc/erc-capab.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "erc-capab" "erc/erc-capab.el" (21710 32133 +;;;;;; 481296 433000)) ;;; Generated autoloads from erc/erc-capab.el (autoload 'erc-capab-identify-mode "erc-capab" nil t) ;;;*** -;;;### (autoloads nil "erc-compat" "erc/erc-compat.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "erc-compat" "erc/erc-compat.el" (21710 32133 +;;;;;; 481296 433000)) ;;; Generated autoloads from erc/erc-compat.el (autoload 'erc-define-minor-mode "erc-compat") ;;;*** -;;;### (autoloads nil "erc-dcc" "erc/erc-dcc.el" (21696 56380 925320 -;;;;;; 624000)) +;;;### (autoloads nil "erc-dcc" "erc/erc-dcc.el" (21710 32133 481296 +;;;;;; 433000)) ;;; Generated autoloads from erc/erc-dcc.el (autoload 'erc-dcc-mode "erc-dcc") @@ -8783,14 +8784,14 @@ that subcommand. ;;;*** ;;;### (autoloads nil "erc-desktop-notifications" "erc/erc-desktop-notifications.el" -;;;;;; (21670 32330 885624 725000)) +;;;;;; (21710 32133 481296 433000)) ;;; Generated autoloads from erc/erc-desktop-notifications.el (autoload 'erc-notifications-mode "erc-desktop-notifications" "" t) ;;;*** -;;;### (autoloads nil "erc-ezbounce" "erc/erc-ezbounce.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "erc-ezbounce" "erc/erc-ezbounce.el" (21710 +;;;;;; 32133 482296 439000)) ;;; Generated autoloads from erc/erc-ezbounce.el (autoload 'erc-cmd-ezb "erc-ezbounce" "\ @@ -8852,8 +8853,8 @@ Add EZBouncer convenience functions to ERC. ;;;*** -;;;### (autoloads nil "erc-fill" "erc/erc-fill.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "erc-fill" "erc/erc-fill.el" (21710 32133 482296 +;;;;;; 439000)) ;;; Generated autoloads from erc/erc-fill.el (autoload 'erc-fill-mode "erc-fill" nil t) @@ -8865,8 +8866,8 @@ You can put this on `erc-insert-modify-hook' and/or `erc-send-modify-hook'. ;;;*** -;;;### (autoloads nil "erc-identd" "erc/erc-identd.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "erc-identd" "erc/erc-identd.el" (21710 32133 +;;;;;; 482296 439000)) ;;; Generated autoloads from erc/erc-identd.el (autoload 'erc-identd-mode "erc-identd") @@ -8887,8 +8888,8 @@ system. ;;;*** -;;;### (autoloads nil "erc-imenu" "erc/erc-imenu.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "erc-imenu" "erc/erc-imenu.el" (21710 32133 +;;;;;; 482296 439000)) ;;; Generated autoloads from erc/erc-imenu.el (autoload 'erc-create-imenu-index "erc-imenu" "\ @@ -8898,22 +8899,22 @@ system. ;;;*** -;;;### (autoloads nil "erc-join" "erc/erc-join.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "erc-join" "erc/erc-join.el" (21710 32133 482296 +;;;;;; 439000)) ;;; Generated autoloads from erc/erc-join.el (autoload 'erc-autojoin-mode "erc-join" nil t) ;;;*** -;;;### (autoloads nil "erc-list" "erc/erc-list.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "erc-list" "erc/erc-list.el" (21710 32133 482296 +;;;;;; 439000)) ;;; Generated autoloads from erc/erc-list.el (autoload 'erc-list-mode "erc-list") ;;;*** -;;;### (autoloads nil "erc-log" "erc/erc-log.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "erc-log" "erc/erc-log.el" (21710 32133 483296 +;;;;;; 444000)) ;;; Generated autoloads from erc/erc-log.el (autoload 'erc-log-mode "erc-log" nil t) @@ -8942,8 +8943,8 @@ You can save every individual message by putting this function on ;;;*** -;;;### (autoloads nil "erc-match" "erc/erc-match.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "erc-match" "erc/erc-match.el" (21710 32133 +;;;;;; 483296 444000)) ;;; Generated autoloads from erc/erc-match.el (autoload 'erc-match-mode "erc-match") @@ -8989,15 +8990,15 @@ Delete dangerous-host interactively to `erc-dangerous-hosts'. ;;;*** -;;;### (autoloads nil "erc-menu" "erc/erc-menu.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "erc-menu" "erc/erc-menu.el" (21710 32133 483296 +;;;;;; 444000)) ;;; Generated autoloads from erc/erc-menu.el (autoload 'erc-menu-mode "erc-menu" nil t) ;;;*** -;;;### (autoloads nil "erc-netsplit" "erc/erc-netsplit.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "erc-netsplit" "erc/erc-netsplit.el" (21710 +;;;;;; 32133 483296 444000)) ;;; Generated autoloads from erc/erc-netsplit.el (autoload 'erc-netsplit-mode "erc-netsplit") @@ -9008,8 +9009,8 @@ Show who's gone. ;;;*** -;;;### (autoloads nil "erc-networks" "erc/erc-networks.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "erc-networks" "erc/erc-networks.el" (21710 +;;;;;; 32133 483296 444000)) ;;; Generated autoloads from erc/erc-networks.el (autoload 'erc-determine-network "erc-networks" "\ @@ -9026,8 +9027,8 @@ Interactively select a server to connect to using `erc-server-alist'. ;;;*** -;;;### (autoloads nil "erc-notify" "erc/erc-notify.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "erc-notify" "erc/erc-notify.el" (21710 32133 +;;;;;; 483296 444000)) ;;; Generated autoloads from erc/erc-notify.el (autoload 'erc-notify-mode "erc-notify" nil t) @@ -9045,36 +9046,36 @@ with args, toggle notify status of people. ;;;*** -;;;### (autoloads nil "erc-page" "erc/erc-page.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "erc-page" "erc/erc-page.el" (21710 32133 483296 +;;;;;; 444000)) ;;; Generated autoloads from erc/erc-page.el (autoload 'erc-page-mode "erc-page") ;;;*** -;;;### (autoloads nil "erc-pcomplete" "erc/erc-pcomplete.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "erc-pcomplete" "erc/erc-pcomplete.el" (21710 +;;;;;; 32133 484296 449000)) ;;; Generated autoloads from erc/erc-pcomplete.el (autoload 'erc-completion-mode "erc-pcomplete" nil t) ;;;*** -;;;### (autoloads nil "erc-replace" "erc/erc-replace.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "erc-replace" "erc/erc-replace.el" (21710 32133 +;;;;;; 484296 449000)) ;;; Generated autoloads from erc/erc-replace.el (autoload 'erc-replace-mode "erc-replace") ;;;*** -;;;### (autoloads nil "erc-ring" "erc/erc-ring.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "erc-ring" "erc/erc-ring.el" (21710 32133 484296 +;;;;;; 449000)) ;;; Generated autoloads from erc/erc-ring.el (autoload 'erc-ring-mode "erc-ring" nil t) ;;;*** -;;;### (autoloads nil "erc-services" "erc/erc-services.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "erc-services" "erc/erc-services.el" (21710 +;;;;;; 32133 484296 449000)) ;;; Generated autoloads from erc/erc-services.el (autoload 'erc-services-mode "erc-services" nil t) @@ -9091,15 +9092,15 @@ When called interactively, read the password using `read-passwd'. ;;;*** -;;;### (autoloads nil "erc-sound" "erc/erc-sound.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "erc-sound" "erc/erc-sound.el" (21710 32133 +;;;;;; 484296 449000)) ;;; Generated autoloads from erc/erc-sound.el (autoload 'erc-sound-mode "erc-sound") ;;;*** -;;;### (autoloads nil "erc-speedbar" "erc/erc-speedbar.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "erc-speedbar" "erc/erc-speedbar.el" (21710 +;;;;;; 32133 484296 449000)) ;;; Generated autoloads from erc/erc-speedbar.el (autoload 'erc-speedbar-browser "erc-speedbar" "\ @@ -9110,22 +9111,22 @@ This will add a speedbar major display mode. ;;;*** -;;;### (autoloads nil "erc-spelling" "erc/erc-spelling.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "erc-spelling" "erc/erc-spelling.el" (21710 +;;;;;; 32133 484296 449000)) ;;; Generated autoloads from erc/erc-spelling.el (autoload 'erc-spelling-mode "erc-spelling" nil t) ;;;*** -;;;### (autoloads nil "erc-stamp" "erc/erc-stamp.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "erc-stamp" "erc/erc-stamp.el" (21710 32133 +;;;;;; 484296 449000)) ;;; Generated autoloads from erc/erc-stamp.el (autoload 'erc-timestamp-mode "erc-stamp" nil t) ;;;*** -;;;### (autoloads nil "erc-track" "erc/erc-track.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "erc-track" "erc/erc-track.el" (21710 32133 +;;;;;; 485296 454000)) ;;; Generated autoloads from erc/erc-track.el (defvar erc-track-minor-mode nil "\ @@ -9150,8 +9151,8 @@ keybindings will not do anything useful. ;;;*** -;;;### (autoloads nil "erc-truncate" "erc/erc-truncate.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "erc-truncate" "erc/erc-truncate.el" (21710 +;;;;;; 32133 485296 454000)) ;;; Generated autoloads from erc/erc-truncate.el (autoload 'erc-truncate-mode "erc-truncate" nil t) @@ -9170,8 +9171,8 @@ Meant to be used in hooks, like `erc-insert-post-hook'. ;;;*** -;;;### (autoloads nil "erc-xdcc" "erc/erc-xdcc.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "erc-xdcc" "erc/erc-xdcc.el" (21710 32133 485296 +;;;;;; 454000)) ;;; Generated autoloads from erc/erc-xdcc.el (autoload 'erc-xdcc-mode "erc-xdcc") @@ -9182,8 +9183,8 @@ Add a file to `erc-xdcc-files'. ;;;*** -;;;### (autoloads nil "ert" "emacs-lisp/ert.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "ert" "emacs-lisp/ert.el" (21710 32133 461296 +;;;;;; 329000)) ;;; Generated autoloads from emacs-lisp/ert.el (autoload 'ert-deftest "ert" "\ @@ -9252,8 +9253,8 @@ Display the documentation for TEST-OR-TEST-NAME (a symbol or ert-test). ;;;*** -;;;### (autoloads nil "ert-x" "emacs-lisp/ert-x.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "ert-x" "emacs-lisp/ert-x.el" (21710 32133 +;;;;;; 460296 324000)) ;;; Generated autoloads from emacs-lisp/ert-x.el (put 'ert-with-test-buffer 'lisp-indent-function 1) @@ -9265,8 +9266,8 @@ Kill all test buffers that are still live. ;;;*** -;;;### (autoloads nil "esh-mode" "eshell/esh-mode.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "esh-mode" "eshell/esh-mode.el" (21710 32133 +;;;;;; 490296 480000)) ;;; Generated autoloads from eshell/esh-mode.el (autoload 'eshell-mode "esh-mode" "\ @@ -9276,8 +9277,8 @@ Emacs shell interactive mode. ;;;*** -;;;### (autoloads nil "eshell" "eshell/eshell.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "eshell" "eshell/eshell.el" (21710 32133 491296 +;;;;;; 485000)) ;;; Generated autoloads from eshell/eshell.el (push (purecopy '(eshell 2 4 2)) package--builtin-versions) @@ -9312,8 +9313,8 @@ corresponding to a successful execution. ;;;*** -;;;### (autoloads nil "etags" "progmodes/etags.el" (21696 56380 925320 -;;;;;; 624000)) +;;;### (autoloads nil "etags" "progmodes/etags.el" (21710 32133 734297 +;;;;;; 749000)) ;;; Generated autoloads from progmodes/etags.el (defvar tags-file-name nil "\ @@ -9628,8 +9629,8 @@ for \\[find-tag] (which see). ;;;*** -;;;### (autoloads nil "ethio-util" "language/ethio-util.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "ethio-util" "language/ethio-util.el" (21710 +;;;;;; 32133 575296 922000)) ;;; Generated autoloads from language/ethio-util.el (autoload 'setup-ethiopic-environment-internal "ethio-util" "\ @@ -9797,7 +9798,7 @@ With ARG, insert that many delimiters. ;;;*** -;;;### (autoloads nil "eudc" "net/eudc.el" (21704 50495 455324 752000)) +;;;### (autoloads nil "eudc" "net/eudc.el" (21710 32133 629297 203000)) ;;; Generated autoloads from net/eudc.el (autoload 'eudc-set-server "eudc" "\ @@ -9851,8 +9852,8 @@ This does nothing except loading eudc by autoload side-effect. ;;;*** -;;;### (autoloads nil "eudc-bob" "net/eudc-bob.el" (21704 50495 455324 -;;;;;; 752000)) +;;;### (autoloads nil "eudc-bob" "net/eudc-bob.el" (21710 32133 628297 +;;;;;; 198000)) ;;; Generated autoloads from net/eudc-bob.el (autoload 'eudc-display-generic-binary "eudc-bob" "\ @@ -9887,8 +9888,8 @@ Display a button for the JPEG DATA. ;;;*** -;;;### (autoloads nil "eudc-export" "net/eudc-export.el" (21704 50495 -;;;;;; 455324 752000)) +;;;### (autoloads nil "eudc-export" "net/eudc-export.el" (21710 32133 +;;;;;; 629297 203000)) ;;; Generated autoloads from net/eudc-export.el (autoload 'eudc-insert-record-at-point-into-bbdb "eudc-export" "\ @@ -9904,8 +9905,8 @@ Call `eudc-insert-record-at-point-into-bbdb' if on a record. ;;;*** -;;;### (autoloads nil "eudc-hotlist" "net/eudc-hotlist.el" (21704 -;;;;;; 50495 455324 752000)) +;;;### (autoloads nil "eudc-hotlist" "net/eudc-hotlist.el" (21710 +;;;;;; 32133 629297 203000)) ;;; Generated autoloads from net/eudc-hotlist.el (autoload 'eudc-edit-hotlist "eudc-hotlist" "\ @@ -9915,8 +9916,8 @@ Edit the hotlist of directory servers in a specialized buffer. ;;;*** -;;;### (autoloads nil "ewoc" "emacs-lisp/ewoc.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "ewoc" "emacs-lisp/ewoc.el" (21710 32133 461296 +;;;;;; 329000)) ;;; Generated autoloads from emacs-lisp/ewoc.el (autoload 'ewoc-create "ewoc" "\ @@ -9942,7 +9943,7 @@ fourth arg NOSEP non-nil inhibits this. ;;;*** -;;;### (autoloads nil "eww" "net/eww.el" (21702 8774 274627 813000)) +;;;### (autoloads nil "eww" "net/eww.el" (21710 32133 630297 208000)) ;;; Generated autoloads from net/eww.el (autoload 'eww "eww" "\ @@ -9976,8 +9977,8 @@ Display the bookmarks. ;;;*** -;;;### (autoloads nil "executable" "progmodes/executable.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "executable" "progmodes/executable.el" (21710 +;;;;;; 32133 734297 749000)) ;;; Generated autoloads from progmodes/executable.el (autoload 'executable-command-find-posix-p "executable" "\ @@ -10018,7 +10019,7 @@ file modes. ;;;*** -;;;### (autoloads nil "expand" "expand.el" (21670 32330 885624 725000)) +;;;### (autoloads nil "expand" "expand.el" (21710 32133 492296 491000)) ;;; Generated autoloads from expand.el (autoload 'expand-add-abbrevs "expand" "\ @@ -10067,8 +10068,8 @@ This is used only in conjunction with `expand-add-abbrevs'. ;;;*** -;;;### (autoloads nil "f90" "progmodes/f90.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "f90" "progmodes/f90.el" (21710 32133 735297 +;;;;;; 754000)) ;;; Generated autoloads from progmodes/f90.el (autoload 'f90-mode "f90" "\ @@ -10135,8 +10136,8 @@ with no args, if that value is non-nil. ;;;*** -;;;### (autoloads nil "face-remap" "face-remap.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "face-remap" "face-remap.el" (21710 32133 492296 +;;;;;; 491000)) ;;; Generated autoloads from face-remap.el (autoload 'face-remap-add-relative "face-remap" "\ @@ -10295,8 +10296,8 @@ Besides the choice of face, it is the same as `buffer-face-mode'. ;;;*** -;;;### (autoloads nil "feedmail" "mail/feedmail.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "feedmail" "mail/feedmail.el" (21710 32133 +;;;;;; 601297 57000)) ;;; Generated autoloads from mail/feedmail.el (push (purecopy '(feedmail 11)) package--builtin-versions) @@ -10350,7 +10351,7 @@ you can set `feedmail-queue-reminder-alist' to nil. ;;;*** -;;;### (autoloads nil "ffap" "ffap.el" (21696 56380 925320 624000)) +;;;### (autoloads nil "ffap" "ffap.el" (21710 32133 494296 501000)) ;;; Generated autoloads from ffap.el (autoload 'ffap-next "ffap" "\ @@ -10413,8 +10414,8 @@ Evaluate the forms in variable `ffap-bindings'. ;;;*** -;;;### (autoloads nil "filecache" "filecache.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "filecache" "filecache.el" (21710 32133 494296 +;;;;;; 501000)) ;;; Generated autoloads from filecache.el (autoload 'file-cache-add-directory "filecache" "\ @@ -10471,8 +10472,8 @@ the name is considered already unique; only the second substitution ;;;*** -;;;### (autoloads nil "filenotify" "filenotify.el" (21704 50495 455324 -;;;;;; 752000)) +;;;### (autoloads nil "filenotify" "filenotify.el" (21710 32133 494296 +;;;;;; 501000)) ;;; Generated autoloads from filenotify.el (autoload 'file-notify-handle-event "filenotify" "\ @@ -10487,8 +10488,8 @@ Otherwise, signal a `file-notify-error'. ;;;*** -;;;### (autoloads nil "files-x" "files-x.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "files-x" "files-x.el" (21710 32133 494296 +;;;;;; 501000)) ;;; Generated autoloads from files-x.el (autoload 'add-file-local-variable "files-x" "\ @@ -10553,8 +10554,8 @@ Copy directory-local variables to the -*- line. ;;;*** -;;;### (autoloads nil "filesets" "filesets.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "filesets" "filesets.el" (21710 32133 497296 +;;;;;; 517000)) ;;; Generated autoloads from filesets.el (autoload 'filesets-init "filesets" "\ @@ -10565,8 +10566,8 @@ Set up hooks, load the cache file -- if existing -- and build the menu. ;;;*** -;;;### (autoloads nil "find-cmd" "find-cmd.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "find-cmd" "find-cmd.el" (21710 32133 497296 +;;;;;; 517000)) ;;; Generated autoloads from find-cmd.el (push (purecopy '(find-cmd 0 6)) package--builtin-versions) @@ -10586,8 +10587,8 @@ result is a string that should be ready for the command line. ;;;*** -;;;### (autoloads nil "find-dired" "find-dired.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "find-dired" "find-dired.el" (21710 32133 497296 +;;;;;; 517000)) ;;; Generated autoloads from find-dired.el (autoload 'find-dired "find-dired" "\ @@ -10627,8 +10628,8 @@ use in place of \"-ls\" as the final argument. ;;;*** -;;;### (autoloads nil "find-file" "find-file.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "find-file" "find-file.el" (21710 32133 498296 +;;;;;; 522000)) ;;; Generated autoloads from find-file.el (defvar ff-special-constructs `((,(purecopy "^#\\s *\\(include\\|import\\)\\s +[<\"]\\(.*\\)[>\"]") lambda nil (buffer-substring (match-beginning 2) (match-end 2)))) "\ @@ -10718,8 +10719,8 @@ Visit the file you click on in another window. ;;;*** -;;;### (autoloads nil "find-func" "emacs-lisp/find-func.el" (21700 -;;;;;; 53432 444919 658000)) +;;;### (autoloads nil "find-func" "emacs-lisp/find-func.el" (21710 +;;;;;; 32133 461296 329000)) ;;; Generated autoloads from emacs-lisp/find-func.el (autoload 'find-library "find-func" "\ @@ -10877,8 +10878,8 @@ Define some key bindings for the find-function family of functions. ;;;*** -;;;### (autoloads nil "find-lisp" "find-lisp.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "find-lisp" "find-lisp.el" (21710 32133 498296 +;;;;;; 522000)) ;;; Generated autoloads from find-lisp.el (autoload 'find-lisp-find-dired "find-lisp" "\ @@ -10898,7 +10899,7 @@ Change the filter on a `find-lisp-find-dired' buffer to REGEXP. ;;;*** -;;;### (autoloads nil "finder" "finder.el" (21670 32330 885624 725000)) +;;;### (autoloads nil "finder" "finder.el" (21710 32133 498296 522000)) ;;; Generated autoloads from finder.el (push (purecopy '(finder 1 0)) package--builtin-versions) @@ -10920,8 +10921,8 @@ Find packages matching a given keyword. ;;;*** -;;;### (autoloads nil "flow-ctrl" "flow-ctrl.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "flow-ctrl" "flow-ctrl.el" (21710 32133 498296 +;;;;;; 522000)) ;;; Generated autoloads from flow-ctrl.el (autoload 'enable-flow-control "flow-ctrl" "\ @@ -10942,8 +10943,8 @@ to get the effect of a C-q. ;;;*** -;;;### (autoloads nil "flow-fill" "gnus/flow-fill.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "flow-fill" "gnus/flow-fill.el" (21710 32133 +;;;;;; 514296 605000)) ;;; Generated autoloads from gnus/flow-fill.el (autoload 'fill-flowed-encode "flow-fill" "\ @@ -10958,8 +10959,8 @@ to get the effect of a C-q. ;;;*** -;;;### (autoloads nil "flymake" "progmodes/flymake.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "flymake" "progmodes/flymake.el" (21710 32133 +;;;;;; 736297 759000)) ;;; Generated autoloads from progmodes/flymake.el (push (purecopy '(flymake 0 3)) package--builtin-versions) @@ -10989,8 +10990,8 @@ Turn flymake mode off. ;;;*** -;;;### (autoloads nil "flyspell" "textmodes/flyspell.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "flyspell" "textmodes/flyspell.el" (21710 32133 +;;;;;; 792298 50000)) ;;; Generated autoloads from textmodes/flyspell.el (autoload 'flyspell-prog-mode "flyspell" "\ @@ -11060,14 +11061,14 @@ Flyspell whole buffer. ;;;*** -;;;### (autoloads nil "foldout" "foldout.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "foldout" "foldout.el" (21710 32133 498296 +;;;;;; 522000)) ;;; Generated autoloads from foldout.el (push (purecopy '(foldout 1 10)) package--builtin-versions) ;;;*** -;;;### (autoloads nil "follow" "follow.el" (21670 32330 885624 725000)) +;;;### (autoloads nil "follow" "follow.el" (21710 32133 499296 527000)) ;;; Generated autoloads from follow.el (autoload 'turn-on-follow-mode "follow" "\ @@ -11135,8 +11136,8 @@ selected if the original window is the first one in the frame. ;;;*** -;;;### (autoloads nil "footnote" "mail/footnote.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "footnote" "mail/footnote.el" (21710 32133 +;;;;;; 601297 57000)) ;;; Generated autoloads from mail/footnote.el (push (purecopy '(footnote 0 19)) package--builtin-versions) @@ -11155,7 +11156,7 @@ play around with the following keys: ;;;*** -;;;### (autoloads nil "forms" "forms.el" (21670 32330 885624 725000)) +;;;### (autoloads nil "forms" "forms.el" (21710 32133 500296 532000)) ;;; Generated autoloads from forms.el (autoload 'forms-mode "forms" "\ @@ -11191,8 +11192,8 @@ Visit a file in Forms mode in other window. ;;;*** -;;;### (autoloads nil "fortran" "progmodes/fortran.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "fortran" "progmodes/fortran.el" (21710 32133 +;;;;;; 736297 759000)) ;;; Generated autoloads from progmodes/fortran.el (autoload 'fortran-mode "fortran" "\ @@ -11269,8 +11270,8 @@ with no args, if that value is non-nil. ;;;*** -;;;### (autoloads nil "fortune" "play/fortune.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "fortune" "play/fortune.el" (21710 32133 706297 +;;;;;; 603000)) ;;; Generated autoloads from play/fortune.el (autoload 'fortune-add-fortune "fortune" "\ @@ -11318,8 +11319,8 @@ and choose the directory as the fortune-file. ;;;*** -;;;### (autoloads nil "frameset" "frameset.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "frameset" "frameset.el" (21710 32133 502296 +;;;;;; 543000)) ;;; Generated autoloads from frameset.el (defvar frameset-session-filter-alist '((name . :never) (left . frameset-filter-iconified) (minibuffer . frameset-filter-minibuffer) (top . frameset-filter-iconified)) "\ @@ -11505,15 +11506,15 @@ Interactively, reads the register using `register-read-with-preview'. ;;;*** -;;;### (autoloads nil "gamegrid" "play/gamegrid.el" (21696 56380 -;;;;;; 925320 624000)) +;;;### (autoloads nil "gamegrid" "play/gamegrid.el" (21710 32133 +;;;;;; 706297 603000)) ;;; Generated autoloads from play/gamegrid.el (push (purecopy '(gamegrid 1 2)) package--builtin-versions) ;;;*** -;;;### (autoloads nil "gdb-mi" "progmodes/gdb-mi.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "gdb-mi" "progmodes/gdb-mi.el" (21710 32133 +;;;;;; 738297 770000)) ;;; Generated autoloads from progmodes/gdb-mi.el (defvar gdb-enable-debug nil "\ @@ -11590,8 +11591,8 @@ detailed description of this mode. ;;;*** -;;;### (autoloads nil "generic" "emacs-lisp/generic.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "generic" "emacs-lisp/generic.el" (21710 32133 +;;;;;; 461296 329000)) ;;; Generated autoloads from emacs-lisp/generic.el (defvar generic-mode-list nil "\ @@ -11671,8 +11672,8 @@ regular expression that can be used as an element of ;;;*** -;;;### (autoloads nil "glasses" "progmodes/glasses.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "glasses" "progmodes/glasses.el" (21710 32133 +;;;;;; 738297 770000)) ;;; Generated autoloads from progmodes/glasses.el (autoload 'glasses-mode "glasses" "\ @@ -11686,8 +11687,8 @@ add virtual separators (like underscores) at places they belong to. ;;;*** -;;;### (autoloads nil "gmm-utils" "gnus/gmm-utils.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "gmm-utils" "gnus/gmm-utils.el" (21710 32133 +;;;;;; 515296 610000)) ;;; Generated autoloads from gnus/gmm-utils.el (autoload 'gmm-regexp-concat "gmm-utils" "\ @@ -11741,7 +11742,7 @@ DEFAULT-MAP specifies the default key map for ICON-LIST. ;;;*** -;;;### (autoloads nil "gnus" "gnus/gnus.el" (21670 32330 885624 725000)) +;;;### (autoloads nil "gnus" "gnus/gnus.el" (21710 32133 534296 709000)) ;;; Generated autoloads from gnus/gnus.el (push (purecopy '(gnus 5 13)) package--builtin-versions) (when (fboundp 'custom-autoload) @@ -11791,8 +11792,8 @@ prompt the user for the name of an NNTP server to use. ;;;*** -;;;### (autoloads nil "gnus-agent" "gnus/gnus-agent.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "gnus-agent" "gnus/gnus-agent.el" (21710 32133 +;;;;;; 516296 615000)) ;;; Generated autoloads from gnus/gnus-agent.el (autoload 'gnus-unplugged "gnus-agent" "\ @@ -11882,8 +11883,8 @@ CLEAN is obsolete and ignored. ;;;*** -;;;### (autoloads nil "gnus-art" "gnus/gnus-art.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "gnus-art" "gnus/gnus-art.el" (21710 32133 +;;;;;; 518296 626000)) ;;; Generated autoloads from gnus/gnus-art.el (autoload 'gnus-article-prepare-display "gnus-art" "\ @@ -11893,8 +11894,8 @@ Make the current buffer look like a nice article. ;;;*** -;;;### (autoloads nil "gnus-bookmark" "gnus/gnus-bookmark.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "gnus-bookmark" "gnus/gnus-bookmark.el" (21710 +;;;;;; 32133 518296 626000)) ;;; Generated autoloads from gnus/gnus-bookmark.el (autoload 'gnus-bookmark-set "gnus-bookmark" "\ @@ -11917,8 +11918,8 @@ deletion, or > if it is flagged for displaying. ;;;*** -;;;### (autoloads nil "gnus-cache" "gnus/gnus-cache.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "gnus-cache" "gnus/gnus-cache.el" (21710 32133 +;;;;;; 519296 631000)) ;;; Generated autoloads from gnus/gnus-cache.el (autoload 'gnus-jog-cache "gnus-cache" "\ @@ -11959,8 +11960,8 @@ supported. ;;;*** -;;;### (autoloads nil "gnus-delay" "gnus/gnus-delay.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "gnus-delay" "gnus/gnus-delay.el" (21710 32133 +;;;;;; 520296 636000)) ;;; Generated autoloads from gnus/gnus-delay.el (autoload 'gnus-delay-article "gnus-delay" "\ @@ -11995,8 +11996,8 @@ Checking delayed messages is skipped if optional arg NO-CHECK is non-nil. ;;;*** -;;;### (autoloads nil "gnus-diary" "gnus/gnus-diary.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "gnus-diary" "gnus/gnus-diary.el" (21710 32133 +;;;;;; 520296 636000)) ;;; Generated autoloads from gnus/gnus-diary.el (autoload 'gnus-user-format-function-d "gnus-diary" "\ @@ -12011,8 +12012,8 @@ Checking delayed messages is skipped if optional arg NO-CHECK is non-nil. ;;;*** -;;;### (autoloads nil "gnus-dired" "gnus/gnus-dired.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "gnus-dired" "gnus/gnus-dired.el" (21710 32133 +;;;;;; 520296 636000)) ;;; Generated autoloads from gnus/gnus-dired.el (autoload 'turn-on-gnus-dired-mode "gnus-dired" "\ @@ -12022,8 +12023,8 @@ Convenience method to turn on gnus-dired-mode. ;;;*** -;;;### (autoloads nil "gnus-draft" "gnus/gnus-draft.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "gnus-draft" "gnus/gnus-draft.el" (21710 32133 +;;;;;; 520296 636000)) ;;; Generated autoloads from gnus/gnus-draft.el (autoload 'gnus-draft-reminder "gnus-draft" "\ @@ -12033,8 +12034,8 @@ Reminder user if there are unsent drafts. ;;;*** -;;;### (autoloads nil "gnus-fun" "gnus/gnus-fun.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "gnus-fun" "gnus/gnus-fun.el" (21710 32133 +;;;;;; 520296 636000)) ;;; Generated autoloads from gnus/gnus-fun.el (autoload 'gnus--random-face-with-type "gnus-fun" "\ @@ -12099,8 +12100,8 @@ Insert a random Face header from `gnus-face-directory'. ;;;*** -;;;### (autoloads nil "gnus-gravatar" "gnus/gnus-gravatar.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "gnus-gravatar" "gnus/gnus-gravatar.el" (21710 +;;;;;; 32133 521296 641000)) ;;; Generated autoloads from gnus/gnus-gravatar.el (autoload 'gnus-treat-from-gravatar "gnus-gravatar" "\ @@ -12117,8 +12118,8 @@ If gravatars are already displayed, remove them. ;;;*** -;;;### (autoloads nil "gnus-group" "gnus/gnus-group.el" (21702 8774 -;;;;;; 274627 813000)) +;;;### (autoloads nil "gnus-group" "gnus/gnus-group.el" (21710 32133 +;;;;;; 522296 647000)) ;;; Generated autoloads from gnus/gnus-group.el (autoload 'gnus-fetch-group "gnus-group" "\ @@ -12135,8 +12136,8 @@ Pop up a frame and enter GROUP. ;;;*** -;;;### (autoloads nil "gnus-html" "gnus/gnus-html.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "gnus-html" "gnus/gnus-html.el" (21710 32133 +;;;;;; 522296 647000)) ;;; Generated autoloads from gnus/gnus-html.el (autoload 'gnus-article-html "gnus-html" "\ @@ -12151,8 +12152,8 @@ Pop up a frame and enter GROUP. ;;;*** -;;;### (autoloads nil "gnus-kill" "gnus/gnus-kill.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "gnus-kill" "gnus/gnus-kill.el" (21710 32133 +;;;;;; 523296 652000)) ;;; Generated autoloads from gnus/gnus-kill.el (defalias 'gnus-batch-kill 'gnus-batch-score) @@ -12165,8 +12166,8 @@ Usage: emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score ;;;*** -;;;### (autoloads nil "gnus-ml" "gnus/gnus-ml.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "gnus-ml" "gnus/gnus-ml.el" (21710 32133 523296 +;;;;;; 652000)) ;;; Generated autoloads from gnus/gnus-ml.el (autoload 'turn-on-gnus-mailing-list-mode "gnus-ml" "\ @@ -12189,8 +12190,8 @@ Minor mode for providing mailing-list commands. ;;;*** -;;;### (autoloads nil "gnus-mlspl" "gnus/gnus-mlspl.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "gnus-mlspl" "gnus/gnus-mlspl.el" (21710 32133 +;;;;;; 523296 652000)) ;;; Generated autoloads from gnus/gnus-mlspl.el (autoload 'gnus-group-split-setup "gnus-mlspl" "\ @@ -12290,8 +12291,8 @@ Calling (gnus-group-split-fancy nil nil \"mail.others\") returns: ;;;*** -;;;### (autoloads nil "gnus-msg" "gnus/gnus-msg.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "gnus-msg" "gnus/gnus-msg.el" (21710 32133 +;;;;;; 524296 657000)) ;;; Generated autoloads from gnus/gnus-msg.el (autoload 'gnus-msg-mail "gnus-msg" "\ @@ -12318,7 +12319,7 @@ Like `message-reply'. ;;;*** ;;;### (autoloads nil "gnus-notifications" "gnus/gnus-notifications.el" -;;;;;; (21670 32330 885624 725000)) +;;;;;; (21710 32133 524296 657000)) ;;; Generated autoloads from gnus/gnus-notifications.el (autoload 'gnus-notifications "gnus-notifications" "\ @@ -12334,8 +12335,8 @@ This is typically a function to add in ;;;*** -;;;### (autoloads nil "gnus-picon" "gnus/gnus-picon.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "gnus-picon" "gnus/gnus-picon.el" (21710 32133 +;;;;;; 524296 657000)) ;;; Generated autoloads from gnus/gnus-picon.el (autoload 'gnus-treat-from-picon "gnus-picon" "\ @@ -12358,8 +12359,8 @@ If picons are already displayed, remove them. ;;;*** -;;;### (autoloads nil "gnus-range" "gnus/gnus-range.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "gnus-range" "gnus/gnus-range.el" (21710 32133 +;;;;;; 524296 657000)) ;;; Generated autoloads from gnus/gnus-range.el (autoload 'gnus-sorted-difference "gnus-range" "\ @@ -12426,8 +12427,8 @@ Add NUM into sorted LIST by side effect. ;;;*** -;;;### (autoloads nil "gnus-registry" "gnus/gnus-registry.el" (21707 -;;;;;; 26689 135319 638000)) +;;;### (autoloads nil "gnus-registry" "gnus/gnus-registry.el" (21710 +;;;;;; 32133 525296 662000)) ;;; Generated autoloads from gnus/gnus-registry.el (autoload 'gnus-registry-initialize "gnus-registry" "\ @@ -12442,8 +12443,8 @@ Install the registry hooks. ;;;*** -;;;### (autoloads nil "gnus-sieve" "gnus/gnus-sieve.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "gnus-sieve" "gnus/gnus-sieve.el" (21710 32133 +;;;;;; 526296 667000)) ;;; Generated autoloads from gnus/gnus-sieve.el (autoload 'gnus-sieve-update "gnus-sieve" "\ @@ -12470,8 +12471,8 @@ See the documentation for these variables and functions for details. ;;;*** -;;;### (autoloads nil "gnus-spec" "gnus/gnus-spec.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "gnus-spec" "gnus/gnus-spec.el" (21710 32133 +;;;;;; 526296 667000)) ;;; Generated autoloads from gnus/gnus-spec.el (autoload 'gnus-update-format "gnus-spec" "\ @@ -12481,8 +12482,8 @@ Update the format specification near point. ;;;*** -;;;### (autoloads nil "gnus-start" "gnus/gnus-start.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "gnus-start" "gnus/gnus-start.el" (21710 32133 +;;;;;; 527296 673000)) ;;; Generated autoloads from gnus/gnus-start.el (autoload 'gnus-declare-backend "gnus-start" "\ @@ -12492,8 +12493,8 @@ Declare back end NAME with ABILITIES as a Gnus back end. ;;;*** -;;;### (autoloads nil "gnus-sum" "gnus/gnus-sum.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "gnus-sum" "gnus/gnus-sum.el" (21710 32133 +;;;;;; 530296 688000)) ;;; Generated autoloads from gnus/gnus-sum.el (autoload 'gnus-summary-bookmark-jump "gnus-sum" "\ @@ -12504,8 +12505,8 @@ BOOKMARK is a bookmark name or a bookmark record. ;;;*** -;;;### (autoloads nil "gnus-sync" "gnus/gnus-sync.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "gnus-sync" "gnus/gnus-sync.el" (21710 32133 +;;;;;; 531296 693000)) ;;; Generated autoloads from gnus/gnus-sync.el (autoload 'gnus-sync-initialize "gnus-sync" "\ @@ -12520,8 +12521,8 @@ Install the sync hooks. ;;;*** -;;;### (autoloads nil "gnus-win" "gnus/gnus-win.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "gnus-win" "gnus/gnus-win.el" (21710 32133 +;;;;;; 533296 704000)) ;;; Generated autoloads from gnus/gnus-win.el (autoload 'gnus-add-configuration "gnus-win" "\ @@ -12531,8 +12532,8 @@ Add the window configuration CONF to `gnus-buffer-configuration'. ;;;*** -;;;### (autoloads nil "gnutls" "net/gnutls.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "gnutls" "net/gnutls.el" (21710 32133 630297 +;;;;;; 208000)) ;;; Generated autoloads from net/gnutls.el (defvar gnutls-min-prime-bits 256 "\ @@ -12548,8 +12549,8 @@ A value of nil says to use the default GnuTLS value.") ;;;*** -;;;### (autoloads nil "gomoku" "play/gomoku.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "gomoku" "play/gomoku.el" (21710 32133 707297 +;;;;;; 608000)) ;;; Generated autoloads from play/gomoku.el (autoload 'gomoku "gomoku" "\ @@ -12575,8 +12576,8 @@ Use \\[describe-mode] for more info. ;;;*** -;;;### (autoloads nil "goto-addr" "net/goto-addr.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "goto-addr" "net/goto-addr.el" (21710 32133 +;;;;;; 630297 208000)) ;;; Generated autoloads from net/goto-addr.el (define-obsolete-function-alias 'goto-address-at-mouse 'goto-address-at-point "22.1") @@ -12617,8 +12618,8 @@ Like `goto-address-mode', but only for comments and strings. ;;;*** -;;;### (autoloads nil "gravatar" "gnus/gravatar.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "gravatar" "gnus/gravatar.el" (21710 32133 +;;;;;; 534296 709000)) ;;; Generated autoloads from gnus/gravatar.el (autoload 'gravatar-retrieve "gravatar" "\ @@ -12634,8 +12635,8 @@ Retrieve MAIL-ADDRESS gravatar and returns it. ;;;*** -;;;### (autoloads nil "grep" "progmodes/grep.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "grep" "progmodes/grep.el" (21710 32133 738297 +;;;;;; 770000)) ;;; Generated autoloads from progmodes/grep.el (defvar grep-window-height nil "\ @@ -12799,7 +12800,7 @@ file name to `*.gz', and sets `grep-highlight-matches' to `always'. ;;;*** -;;;### (autoloads nil "gs" "gs.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "gs" "gs.el" (21710 32133 552296 802000)) ;;; Generated autoloads from gs.el (autoload 'gs-load-image "gs" "\ @@ -12812,8 +12813,8 @@ the form \"WINDOW-ID PIXMAP-ID\". Value is non-nil if successful. ;;;*** -;;;### (autoloads nil "gud" "progmodes/gud.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "gud" "progmodes/gud.el" (21710 32133 739297 +;;;;;; 775000)) ;;; Generated autoloads from progmodes/gud.el (autoload 'gud-gdb "gud" "\ @@ -12908,8 +12909,8 @@ it if ARG is omitted or nil. ;;;*** -;;;### (autoloads nil "gv" "emacs-lisp/gv.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "gv" "emacs-lisp/gv.el" (21710 32133 462296 +;;;;;; 335000)) ;;; Generated autoloads from emacs-lisp/gv.el (autoload 'gv-get "gv" "\ @@ -13011,8 +13012,8 @@ binding mode. ;;;*** -;;;### (autoloads nil "handwrite" "play/handwrite.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "handwrite" "play/handwrite.el" (21710 32133 +;;;;;; 707297 608000)) ;;; Generated autoloads from play/handwrite.el (autoload 'handwrite "handwrite" "\ @@ -13029,8 +13030,8 @@ Variables: `handwrite-linespace' (default 12) ;;;*** -;;;### (autoloads nil "hanoi" "play/hanoi.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "hanoi" "play/hanoi.el" (21710 32133 708297 +;;;;;; 614000)) ;;; Generated autoloads from play/hanoi.el (autoload 'hanoi "hanoi" "\ @@ -13057,8 +13058,8 @@ to be updated. ;;;*** -;;;### (autoloads nil "hashcash" "mail/hashcash.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "hashcash" "mail/hashcash.el" (21710 32133 +;;;;;; 601297 57000)) ;;; Generated autoloads from mail/hashcash.el (autoload 'hashcash-insert-payment "hashcash" "\ @@ -13100,8 +13101,8 @@ Prefix arg sets default accept amount temporarily. ;;;*** -;;;### (autoloads nil "help-at-pt" "help-at-pt.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "help-at-pt" "help-at-pt.el" (21710 32133 552296 +;;;;;; 802000)) ;;; Generated autoloads from help-at-pt.el (autoload 'help-at-pt-string "help-at-pt" "\ @@ -13228,8 +13229,8 @@ different regions. With numeric argument ARG, behaves like ;;;*** -;;;### (autoloads nil "help-fns" "help-fns.el" (21690 17600 745361 -;;;;;; 875000)) +;;;### (autoloads nil "help-fns" "help-fns.el" (21710 32133 553296 +;;;;;; 808000)) ;;; Generated autoloads from help-fns.el (autoload 'describe-function "help-fns" "\ @@ -13307,8 +13308,8 @@ Produce a texinfo buffer with sorted doc-strings from the DOC file. ;;;*** -;;;### (autoloads nil "help-macro" "help-macro.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "help-macro" "help-macro.el" (21710 32133 553296 +;;;;;; 808000)) ;;; Generated autoloads from help-macro.el (defvar three-step-help nil "\ @@ -13322,8 +13323,8 @@ gives the window that lists the options.") ;;;*** -;;;### (autoloads nil "help-mode" "help-mode.el" (21690 17600 745361 -;;;;;; 875000)) +;;;### (autoloads nil "help-mode" "help-mode.el" (21710 32133 553296 +;;;;;; 808000)) ;;; Generated autoloads from help-mode.el (autoload 'help-mode "help-mode" "\ @@ -13422,8 +13423,8 @@ BOOKMARK is a bookmark name or a bookmark record. ;;;*** -;;;### (autoloads nil "helper" "emacs-lisp/helper.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "helper" "emacs-lisp/helper.el" (21710 32133 +;;;;;; 462296 335000)) ;;; Generated autoloads from emacs-lisp/helper.el (autoload 'Helper-describe-bindings "helper" "\ @@ -13438,7 +13439,7 @@ Provide help for current mode. ;;;*** -;;;### (autoloads nil "hexl" "hexl.el" (21695 35516 595262 313000)) +;;;### (autoloads nil "hexl" "hexl.el" (21710 32133 554296 813000)) ;;; Generated autoloads from hexl.el (autoload 'hexl-mode "hexl" "\ @@ -13532,8 +13533,8 @@ This discards the buffer's undo information. ;;;*** -;;;### (autoloads nil "hi-lock" "hi-lock.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "hi-lock" "hi-lock.el" (21710 32133 555296 +;;;;;; 818000)) ;;; Generated autoloads from hi-lock.el (autoload 'hi-lock-mode "hi-lock" "\ @@ -13700,8 +13701,8 @@ be found in variable `hi-lock-interactive-patterns'. ;;;*** -;;;### (autoloads nil "hideif" "progmodes/hideif.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "hideif" "progmodes/hideif.el" (21710 32133 +;;;;;; 740297 780000)) ;;; Generated autoloads from progmodes/hideif.el (autoload 'hide-ifdef-mode "hideif" "\ @@ -13748,8 +13749,8 @@ Several variables affect how the hiding is done: ;;;*** -;;;### (autoloads nil "hideshow" "progmodes/hideshow.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "hideshow" "progmodes/hideshow.el" (21710 32133 +;;;;;; 740297 780000)) ;;; Generated autoloads from progmodes/hideshow.el (defvar hs-special-modes-alist (mapcar 'purecopy '((c-mode "{" "}" "/[*/]" nil nil) (c++-mode "{" "}" "/[*/]" nil nil) (bibtex-mode ("@\\S(*\\(\\s(\\)" 1)) (java-mode "{" "}" "/[*/]" nil nil) (js-mode "{" "}" "/[*/]" nil))) "\ @@ -13811,8 +13812,8 @@ Unconditionally turn off `hs-minor-mode'. ;;;*** -;;;### (autoloads nil "hilit-chg" "hilit-chg.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "hilit-chg" "hilit-chg.el" (21710 32133 555296 +;;;;;; 818000)) ;;; Generated autoloads from hilit-chg.el (autoload 'highlight-changes-mode "hilit-chg" "\ @@ -13943,8 +13944,8 @@ See `highlight-changes-mode' for more information on Highlight-Changes mode. ;;;*** -;;;### (autoloads nil "hippie-exp" "hippie-exp.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "hippie-exp" "hippie-exp.el" (21710 32133 555296 +;;;;;; 818000)) ;;; Generated autoloads from hippie-exp.el (push (purecopy '(hippie-exp 1 6)) package--builtin-versions) @@ -13976,8 +13977,8 @@ argument VERBOSE non-nil makes the function verbose. ;;;*** -;;;### (autoloads nil "hl-line" "hl-line.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "hl-line" "hl-line.el" (21710 32133 555296 +;;;;;; 818000)) ;;; Generated autoloads from hl-line.el (autoload 'hl-line-mode "hl-line" "\ @@ -14026,8 +14027,8 @@ Global-Hl-Line mode uses the functions `global-hl-line-unhighlight' and ;;;*** -;;;### (autoloads nil "holidays" "calendar/holidays.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "holidays" "calendar/holidays.el" (21710 32133 +;;;;;; 404296 33000)) ;;; Generated autoloads from calendar/holidays.el (defvar holiday-general-holidays (mapcar 'purecopy '((holiday-fixed 1 1 "New Year's Day") (holiday-float 1 1 3 "Martin Luther King Day") (holiday-fixed 2 2 "Groundhog Day") (holiday-fixed 2 14 "Valentine's Day") (holiday-float 2 1 3 "President's Day") (holiday-fixed 3 17 "St. Patrick's Day") (holiday-fixed 4 1 "April Fools' Day") (holiday-float 5 0 2 "Mother's Day") (holiday-float 5 1 -1 "Memorial Day") (holiday-fixed 6 14 "Flag Day") (holiday-float 6 0 3 "Father's Day") (holiday-fixed 7 4 "Independence Day") (holiday-float 9 1 1 "Labor Day") (holiday-float 10 1 2 "Columbus Day") (holiday-fixed 10 31 "Halloween") (holiday-fixed 11 11 "Veteran's Day") (holiday-float 11 4 4 "Thanksgiving"))) "\ @@ -14137,8 +14138,8 @@ The optional LABEL is used to label the buffer created. ;;;*** -;;;### (autoloads nil "html2text" "gnus/html2text.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "html2text" "gnus/html2text.el" (21710 32133 +;;;;;; 534296 709000)) ;;; Generated autoloads from gnus/html2text.el (autoload 'html2text "html2text" "\ @@ -14148,8 +14149,8 @@ Convert HTML to plain text in the current buffer. ;;;*** -;;;### (autoloads nil "htmlfontify" "htmlfontify.el" (21670 32624 -;;;;;; 385626 484000)) +;;;### (autoloads nil "htmlfontify" "htmlfontify.el" (21710 32133 +;;;;;; 556296 823000)) ;;; Generated autoloads from htmlfontify.el (push (purecopy '(htmlfontify 0 21)) package--builtin-versions) @@ -14182,8 +14183,8 @@ You may also want to set `hfy-page-header' and `hfy-page-footer'. ;;;*** -;;;### (autoloads nil "ibuf-macs" "ibuf-macs.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "ibuf-macs" "ibuf-macs.el" (21710 32133 557296 +;;;;;; 829000)) ;;; Generated autoloads from ibuf-macs.el (autoload 'define-ibuffer-column "ibuf-macs" "\ @@ -14285,8 +14286,8 @@ bound to the current value of the filter. ;;;*** -;;;### (autoloads nil "ibuffer" "ibuffer.el" (21670 32624 385626 -;;;;;; 484000)) +;;;### (autoloads nil "ibuffer" "ibuffer.el" (21710 32133 557296 +;;;;;; 829000)) ;;; Generated autoloads from ibuffer.el (autoload 'ibuffer-list-buffers "ibuffer" "\ @@ -14325,8 +14326,8 @@ FORMATS is the value to use for `ibuffer-formats'. ;;;*** -;;;### (autoloads nil "icalendar" "calendar/icalendar.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "icalendar" "calendar/icalendar.el" (21710 +;;;;;; 32133 404296 33000)) ;;; Generated autoloads from calendar/icalendar.el (push (purecopy '(icalendar 0 19)) package--builtin-versions) @@ -14379,8 +14380,8 @@ buffer `*icalendar-errors*'. ;;;*** -;;;### (autoloads nil "icomplete" "icomplete.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "icomplete" "icomplete.el" (21710 32133 558296 +;;;;;; 834000)) ;;; Generated autoloads from icomplete.el (defvar icomplete-mode nil "\ @@ -14419,8 +14420,8 @@ completions: ;;;*** -;;;### (autoloads nil "icon" "progmodes/icon.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "icon" "progmodes/icon.el" (21710 32133 740297 +;;;;;; 780000)) ;;; Generated autoloads from progmodes/icon.el (autoload 'icon-mode "icon" "\ @@ -14460,8 +14461,8 @@ with no args, if that value is non-nil. ;;;*** -;;;### (autoloads nil "idlw-shell" "progmodes/idlw-shell.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "idlw-shell" "progmodes/idlw-shell.el" (21710 +;;;;;; 32133 742297 790000)) ;;; Generated autoloads from progmodes/idlw-shell.el (autoload 'idlwave-shell "idlw-shell" "\ @@ -14486,8 +14487,8 @@ See also the variable `idlwave-shell-prompt-pattern'. ;;;*** -;;;### (autoloads nil "idlwave" "progmodes/idlwave.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "idlwave" "progmodes/idlwave.el" (21710 32133 +;;;;;; 745297 806000)) ;;; Generated autoloads from progmodes/idlwave.el (push (purecopy '(idlwave 6 1 22)) package--builtin-versions) @@ -14616,7 +14617,7 @@ The main features of this mode are ;;;*** -;;;### (autoloads nil "ido" "ido.el" (21694 14651 747488 989000)) +;;;### (autoloads nil "ido" "ido.el" (21710 32133 559296 839000)) ;;; Generated autoloads from ido.el (defvar ido-mode nil "\ @@ -14878,7 +14879,7 @@ DEF, if non-nil, is the default value. ;;;*** -;;;### (autoloads nil "ielm" "ielm.el" (21695 35516 595262 313000)) +;;;### (autoloads nil "ielm" "ielm.el" (21710 32133 559296 839000)) ;;; Generated autoloads from ielm.el (autoload 'ielm "ielm" "\ @@ -14890,7 +14891,7 @@ See `inferior-emacs-lisp-mode' for details. ;;;*** -;;;### (autoloads nil "iimage" "iimage.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "iimage" "iimage.el" (21710 32133 559296 839000)) ;;; Generated autoloads from iimage.el (define-obsolete-function-alias 'turn-on-iimage-mode 'iimage-mode "24.1") @@ -14906,7 +14907,7 @@ the mode if ARG is omitted or nil, and toggle it if ARG is `toggle'. ;;;*** -;;;### (autoloads nil "image" "image.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "image" "image.el" (21710 32133 561296 849000)) ;;; Generated autoloads from image.el (autoload 'image-type-from-data "image" "\ @@ -15099,8 +15100,8 @@ If Emacs is compiled without ImageMagick support, this does nothing. ;;;*** -;;;### (autoloads nil "image-dired" "image-dired.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "image-dired" "image-dired.el" (21710 32133 +;;;;;; 560296 844000)) ;;; Generated autoloads from image-dired.el (push (purecopy '(image-dired 0 4 11)) package--builtin-versions) @@ -15237,8 +15238,8 @@ easy-to-use form. ;;;*** -;;;### (autoloads nil "image-file" "image-file.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "image-file" "image-file.el" (21710 32133 560296 +;;;;;; 844000)) ;;; Generated autoloads from image-file.el (defvar image-file-name-extensions (purecopy '("png" "jpeg" "jpg" "gif" "tiff" "tif" "xbm" "xpm" "pbm" "pgm" "ppm" "pnm" "svg")) "\ @@ -15300,8 +15301,8 @@ An image file is one whose name has an extension in ;;;*** -;;;### (autoloads nil "image-mode" "image-mode.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "image-mode" "image-mode.el" (21710 32133 560296 +;;;;;; 844000)) ;;; Generated autoloads from image-mode.el (autoload 'image-mode "image-mode" "\ @@ -15348,7 +15349,7 @@ on these modes. ;;;*** -;;;### (autoloads nil "imenu" "imenu.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "imenu" "imenu.el" (21710 32133 561296 849000)) ;;; Generated autoloads from imenu.el (defvar imenu-sort-function nil "\ @@ -15486,8 +15487,8 @@ for more information. ;;;*** -;;;### (autoloads nil "ind-util" "language/ind-util.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "ind-util" "language/ind-util.el" (21710 32133 +;;;;;; 580296 948000)) ;;; Generated autoloads from language/ind-util.el (autoload 'indian-compose-region "ind-util" "\ @@ -15517,8 +15518,8 @@ Convert old Emacs Devanagari characters to UCS. ;;;*** -;;;### (autoloads nil "inf-lisp" "progmodes/inf-lisp.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "inf-lisp" "progmodes/inf-lisp.el" (21710 32133 +;;;;;; 745297 806000)) ;;; Generated autoloads from progmodes/inf-lisp.el (autoload 'inferior-lisp "inf-lisp" "\ @@ -15536,7 +15537,7 @@ of `inferior-lisp-program'). Runs the hooks from ;;;*** -;;;### (autoloads nil "info" "info.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "info" "info.el" (21710 32133 563296 860000)) ;;; Generated autoloads from info.el (defcustom Info-default-directory-list (let* ((config-dir (file-name-as-directory (or (and (featurep 'ns) (let ((dir (expand-file-name "../info" data-directory))) (if (file-directory-p dir) dir))) configure-info-directory))) (prefixes (prune-directory-list '("/usr/local/" "/usr/" "/opt/" "/"))) (suffixes '("share/" "" "gnu/" "gnu/lib/" "gnu/lib/emacs/" "emacs/" "lib/" "lib/emacs/")) (standard-info-dirs (apply #'nconc (mapcar (lambda (pfx) (let ((dirs (mapcar (lambda (sfx) (concat pfx sfx "info/")) suffixes))) (prune-directory-list dirs))) prefixes))) (dirs (if (member config-dir standard-info-dirs) (nconc standard-info-dirs (list config-dir)) (cons config-dir standard-info-dirs)))) (if (not (eq system-type 'windows-nt)) dirs (let* ((instdir (file-name-directory invocation-directory)) (dir1 (expand-file-name "../info/" instdir)) (dir2 (expand-file-name "../../../info/" instdir))) (cond ((file-exists-p dir1) (append dirs (list dir1))) ((file-exists-p dir2) (append dirs (list dir2))) (t dirs))))) "\ @@ -15748,8 +15749,8 @@ completion alternatives to currently visited manuals. ;;;*** -;;;### (autoloads nil "info-look" "info-look.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "info-look" "info-look.el" (21710 32133 562296 +;;;;;; 854000)) ;;; Generated autoloads from info-look.el (autoload 'info-lookup-reset "info-look" "\ @@ -15796,8 +15797,8 @@ Perform completion on file preceding point. ;;;*** -;;;### (autoloads nil "info-xref" "info-xref.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "info-xref" "info-xref.el" (21710 32133 562296 +;;;;;; 854000)) ;;; Generated autoloads from info-xref.el (push (purecopy '(info-xref 3)) package--builtin-versions) @@ -15880,8 +15881,8 @@ the sources handy. ;;;*** -;;;### (autoloads nil "informat" "informat.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "informat" "informat.el" (21710 32133 564296 +;;;;;; 865000)) ;;; Generated autoloads from informat.el (autoload 'Info-tagify "informat" "\ @@ -15926,8 +15927,8 @@ For example, invoke \"emacs -batch -f batch-info-validate $info/ ~/*.info\" ;;;*** -;;;### (autoloads nil "inline" "emacs-lisp/inline.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "inline" "emacs-lisp/inline.el" (21710 32133 +;;;;;; 462296 335000)) ;;; Generated autoloads from emacs-lisp/inline.el (autoload 'define-inline "inline" "\ @@ -15941,8 +15942,8 @@ For example, invoke \"emacs -batch -f batch-info-validate $info/ ~/*.info\" ;;;*** -;;;### (autoloads nil "inversion" "cedet/inversion.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "inversion" "cedet/inversion.el" (21710 32133 +;;;;;; 414296 85000)) ;;; Generated autoloads from cedet/inversion.el (push (purecopy '(inversion 1 3)) package--builtin-versions) @@ -15954,8 +15955,8 @@ Only checks one based on which kind of Emacs is being run. ;;;*** -;;;### (autoloads nil "isearch-x" "international/isearch-x.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "isearch-x" "international/isearch-x.el" (21710 +;;;;;; 32133 565296 870000)) ;;; Generated autoloads from international/isearch-x.el (autoload 'isearch-toggle-specified-input-method "isearch-x" "\ @@ -15975,8 +15976,8 @@ Toggle input method in interactive search. ;;;*** -;;;### (autoloads nil "isearchb" "isearchb.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "isearchb" "isearchb.el" (21710 32133 573296 +;;;;;; 912000)) ;;; Generated autoloads from isearchb.el (push (purecopy '(isearchb 1 5)) package--builtin-versions) @@ -15990,8 +15991,8 @@ accessed via isearchb. ;;;*** -;;;### (autoloads nil "iso-cvt" "international/iso-cvt.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "iso-cvt" "international/iso-cvt.el" (21710 +;;;;;; 32133 566296 875000)) ;;; Generated autoloads from international/iso-cvt.el (autoload 'iso-spanish "iso-cvt" "\ @@ -16082,15 +16083,15 @@ Add submenus to the File menu, to convert to and from various formats. ;;;*** ;;;### (autoloads nil "iso-transl" "international/iso-transl.el" -;;;;;; (21670 32331 385639 720000)) +;;;;;; (21710 32133 566296 875000)) ;;; Generated autoloads from international/iso-transl.el (define-key key-translation-map "\C-x8" 'iso-transl-ctl-x-8-map) (autoload 'iso-transl-ctl-x-8-map "iso-transl" "Keymap for C-x 8 prefix." t 'keymap) ;;;*** -;;;### (autoloads nil "ispell" "textmodes/ispell.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "ispell" "textmodes/ispell.el" (21710 32133 +;;;;;; 793298 56000)) ;;; Generated autoloads from textmodes/ispell.el (put 'ispell-check-comments 'safe-local-variable (lambda (a) (memq a '(nil t exclusive)))) @@ -16323,8 +16324,8 @@ You can bind this to the key C-c i in GNUS or mail by adding to ;;;*** -;;;### (autoloads nil "japan-util" "language/japan-util.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "japan-util" "language/japan-util.el" (21710 +;;;;;; 32133 580296 948000)) ;;; Generated autoloads from language/japan-util.el (autoload 'setup-japanese-environment-internal "japan-util" "\ @@ -16401,8 +16402,8 @@ If non-nil, second arg INITIAL-INPUT is a string to insert before reading. ;;;*** -;;;### (autoloads nil "jka-compr" "jka-compr.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "jka-compr" "jka-compr.el" (21710 32133 573296 +;;;;;; 912000)) ;;; Generated autoloads from jka-compr.el (defvar jka-compr-inhibit nil "\ @@ -16425,7 +16426,8 @@ by `jka-compr-installed'. ;;;*** -;;;### (autoloads nil "js" "progmodes/js.el" (21681 2618 385332 620000)) +;;;### (autoloads nil "js" "progmodes/js.el" (21710 32133 746297 +;;;;;; 811000)) ;;; Generated autoloads from progmodes/js.el (push (purecopy '(js 9)) package--builtin-versions) @@ -16439,14 +16441,14 @@ Major mode for editing JavaScript. ;;;*** -;;;### (autoloads nil "json" "json.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "json" "json.el" (21710 32133 573296 912000)) ;;; Generated autoloads from json.el (push (purecopy '(json 1 4)) package--builtin-versions) ;;;*** -;;;### (autoloads nil "keypad" "emulation/keypad.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "keypad" "emulation/keypad.el" (21710 32133 +;;;;;; 471296 381000)) ;;; Generated autoloads from emulation/keypad.el (defvar keypad-setup nil "\ @@ -16501,8 +16503,8 @@ the decimal key on the keypad is mapped to DECIMAL instead of `.' ;;;*** -;;;### (autoloads nil "kinsoku" "international/kinsoku.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "kinsoku" "international/kinsoku.el" (21710 +;;;;;; 32133 566296 875000)) ;;; Generated autoloads from international/kinsoku.el (autoload 'kinsoku "kinsoku" "\ @@ -16523,8 +16525,8 @@ the context of text formatting. ;;;*** -;;;### (autoloads nil "kkc" "international/kkc.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "kkc" "international/kkc.el" (21710 32133 566296 +;;;;;; 875000)) ;;; Generated autoloads from international/kkc.el (defvar kkc-after-update-conversion-functions nil "\ @@ -16546,7 +16548,7 @@ and the return value is the length of the conversion. ;;;*** -;;;### (autoloads nil "kmacro" "kmacro.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "kmacro" "kmacro.el" (21710 32133 574296 917000)) ;;; Generated autoloads from kmacro.el (global-set-key "\C-x(" 'kmacro-start-macro) (global-set-key "\C-x)" 'kmacro-end-macro) @@ -16658,8 +16660,8 @@ If kbd macro currently being defined end it before activating it. ;;;*** -;;;### (autoloads nil "korea-util" "language/korea-util.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "korea-util" "language/korea-util.el" (21710 +;;;;;; 32133 580296 948000)) ;;; Generated autoloads from language/korea-util.el (defvar default-korean-keyboard (purecopy (if (string-match "3" (or (getenv "HANGUL_KEYBOARD_TYPE") "")) "3" "")) "\ @@ -16673,8 +16675,8 @@ The kind of Korean keyboard for Korean input method. ;;;*** -;;;### (autoloads nil "landmark" "play/landmark.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "landmark" "play/landmark.el" (21710 32133 +;;;;;; 708297 614000)) ;;; Generated autoloads from play/landmark.el (push (purecopy '(landmark 1 0)) package--builtin-versions) @@ -16705,8 +16707,8 @@ Use \\[describe-mode] for more info. ;;;*** -;;;### (autoloads nil "lao-util" "language/lao-util.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "lao-util" "language/lao-util.el" (21710 32133 +;;;;;; 581296 953000)) ;;; Generated autoloads from language/lao-util.el (autoload 'lao-compose-string "lao-util" "\ @@ -16743,8 +16745,8 @@ Transcribe Romanized Lao string STR to Lao character string. ;;;*** -;;;### (autoloads nil "latexenc" "international/latexenc.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "latexenc" "international/latexenc.el" (21710 +;;;;;; 32133 567296 881000)) ;;; Generated autoloads from international/latexenc.el (defvar latex-inputenc-coding-alist (purecopy '(("ansinew" . windows-1252) ("applemac" . mac-roman) ("ascii" . us-ascii) ("cp1250" . windows-1250) ("cp1252" . windows-1252) ("cp1257" . cp1257) ("cp437de" . cp437) ("cp437" . cp437) ("cp850" . cp850) ("cp852" . cp852) ("cp858" . cp858) ("cp865" . cp865) ("latin1" . iso-8859-1) ("latin2" . iso-8859-2) ("latin3" . iso-8859-3) ("latin4" . iso-8859-4) ("latin5" . iso-8859-5) ("latin9" . iso-8859-15) ("next" . next) ("utf8" . utf-8) ("utf8x" . utf-8))) "\ @@ -16776,7 +16778,7 @@ coding system names is determined from `latex-inputenc-coding-alist'. ;;;*** ;;;### (autoloads nil "latin1-disp" "international/latin1-disp.el" -;;;;;; (21670 32331 385639 720000)) +;;;;;; (21710 32133 567296 881000)) ;;; Generated autoloads from international/latin1-disp.el (defvar latin1-display nil "\ @@ -16817,8 +16819,8 @@ use either \\[customize] or the function `latin1-display'.") ;;;*** -;;;### (autoloads nil "ld-script" "progmodes/ld-script.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "ld-script" "progmodes/ld-script.el" (21710 +;;;;;; 32133 746297 811000)) ;;; Generated autoloads from progmodes/ld-script.el (autoload 'ld-script-mode "ld-script" "\ @@ -16828,8 +16830,8 @@ A major mode to edit GNU ld script files ;;;*** -;;;### (autoloads nil "let-alist" "let-alist.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "let-alist" "let-alist.el" (21710 32133 598297 +;;;;;; 42000)) ;;; Generated autoloads from let-alist.el (push (purecopy '(let-alist 1 0 3)) package--builtin-versions) @@ -16868,7 +16870,7 @@ displayed in the example above. ;;;*** -;;;### (autoloads nil "life" "play/life.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "life" "play/life.el" (21710 32133 708297 614000)) ;;; Generated autoloads from play/life.el (autoload 'life "life" "\ @@ -16881,7 +16883,7 @@ generations (this defaults to 1). ;;;*** -;;;### (autoloads nil "linum" "linum.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "linum" "linum.el" (21710 32133 598297 42000)) ;;; Generated autoloads from linum.el (push (purecopy '(linum 0 9 24)) package--builtin-versions) @@ -16918,8 +16920,8 @@ See `linum-mode' for more information on Linum mode. ;;;*** -;;;### (autoloads nil "loadhist" "loadhist.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "loadhist" "loadhist.el" (21710 32133 598297 +;;;;;; 42000)) ;;; Generated autoloads from loadhist.el (autoload 'unload-feature "loadhist" "\ @@ -16950,7 +16952,7 @@ something strange, such as redefining an Emacs function. ;;;*** -;;;### (autoloads nil "locate" "locate.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "locate" "locate.el" (21710 32133 599297 47000)) ;;; Generated autoloads from locate.el (defvar locate-ls-subdir-switches (purecopy "-al") "\ @@ -17002,8 +17004,8 @@ except that FILTER is not optional. ;;;*** -;;;### (autoloads nil "log-edit" "vc/log-edit.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "log-edit" "vc/log-edit.el" (21710 32133 821298 +;;;;;; 201000)) ;;; Generated autoloads from vc/log-edit.el (autoload 'log-edit "log-edit" "\ @@ -17034,8 +17036,8 @@ done. Otherwise, it uses the current buffer. ;;;*** -;;;### (autoloads nil "log-view" "vc/log-view.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "log-view" "vc/log-view.el" (21710 32133 821298 +;;;;;; 201000)) ;;; Generated autoloads from vc/log-view.el (autoload 'log-view-mode "log-view" "\ @@ -17045,7 +17047,7 @@ Major mode for browsing CVS log output. ;;;*** -;;;### (autoloads nil "lpr" "lpr.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "lpr" "lpr.el" (21710 32133 599297 47000)) ;;; Generated autoloads from lpr.el (defvar lpr-windows-system (memq system-type '(ms-dos windows-nt)) "\ @@ -17140,8 +17142,8 @@ for further customization of the printer command. ;;;*** -;;;### (autoloads nil "ls-lisp" "ls-lisp.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "ls-lisp" "ls-lisp.el" (21710 32133 599297 +;;;;;; 47000)) ;;; Generated autoloads from ls-lisp.el (defvar ls-lisp-support-shell-wildcards t "\ @@ -17152,8 +17154,8 @@ Otherwise they are treated as Emacs regexps (for backward compatibility).") ;;;*** -;;;### (autoloads nil "lunar" "calendar/lunar.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "lunar" "calendar/lunar.el" (21710 32133 405296 +;;;;;; 38000)) ;;; Generated autoloads from calendar/lunar.el (autoload 'lunar-phases "lunar" "\ @@ -17165,8 +17167,8 @@ This function is suitable for execution in an init file. ;;;*** -;;;### (autoloads nil "m4-mode" "progmodes/m4-mode.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "m4-mode" "progmodes/m4-mode.el" (21710 32133 +;;;;;; 746297 811000)) ;;; Generated autoloads from progmodes/m4-mode.el (autoload 'm4-mode "m4-mode" "\ @@ -17176,7 +17178,7 @@ A major mode to edit m4 macro files. ;;;*** -;;;### (autoloads nil "macros" "macros.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "macros" "macros.el" (21710 32133 599297 47000)) ;;; Generated autoloads from macros.el (autoload 'name-last-kbd-macro "macros" "\ @@ -17265,8 +17267,8 @@ and then select the region of un-tablified names and use ;;;*** -;;;### (autoloads nil "mail-extr" "mail/mail-extr.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "mail-extr" "mail/mail-extr.el" (21710 32133 +;;;;;; 602297 62000)) ;;; Generated autoloads from mail/mail-extr.el (autoload 'mail-extract-address-components "mail-extr" "\ @@ -17296,8 +17298,8 @@ Convert mail domain DOMAIN to the country it corresponds to. ;;;*** -;;;### (autoloads nil "mail-hist" "mail/mail-hist.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "mail-hist" "mail/mail-hist.el" (21710 32133 +;;;;;; 602297 62000)) ;;; Generated autoloads from mail/mail-hist.el (autoload 'mail-hist-define-keys "mail-hist" "\ @@ -17326,8 +17328,8 @@ This function normally would be called when the message is sent. ;;;*** -;;;### (autoloads nil "mail-utils" "mail/mail-utils.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "mail-utils" "mail/mail-utils.el" (21710 32133 +;;;;;; 602297 62000)) ;;; Generated autoloads from mail/mail-utils.el (defvar mail-use-rfc822 nil "\ @@ -17401,8 +17403,8 @@ matches may be returned from the message body. ;;;*** -;;;### (autoloads nil "mailabbrev" "mail/mailabbrev.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "mailabbrev" "mail/mailabbrev.el" (21710 32133 +;;;;;; 602297 62000)) ;;; Generated autoloads from mail/mailabbrev.el (defvar mail-abbrevs-mode nil "\ @@ -17451,8 +17453,8 @@ double-quotes. ;;;*** -;;;### (autoloads nil "mailalias" "mail/mailalias.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "mailalias" "mail/mailalias.el" (21710 32133 +;;;;;; 602297 62000)) ;;; Generated autoloads from mail/mailalias.el (defvar mail-complete-style 'angles "\ @@ -17505,8 +17507,8 @@ current header, calls `mail-complete-function' and passes prefix ARG if any. ;;;*** -;;;### (autoloads nil "mailclient" "mail/mailclient.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "mailclient" "mail/mailclient.el" (21710 32133 +;;;;;; 602297 62000)) ;;; Generated autoloads from mail/mailclient.el (autoload 'mailclient-send-it "mailclient" "\ @@ -17518,8 +17520,8 @@ The mail client is taken to be the handler of mailto URLs. ;;;*** -;;;### (autoloads nil "make-mode" "progmodes/make-mode.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "make-mode" "progmodes/make-mode.el" (21710 +;;;;;; 32133 747297 816000)) ;;; Generated autoloads from progmodes/make-mode.el (autoload 'makefile-mode "make-mode" "\ @@ -17636,8 +17638,8 @@ An adapted `makefile-mode' that knows about imake. ;;;*** -;;;### (autoloads nil "makesum" "makesum.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "makesum" "makesum.el" (21710 32133 609297 +;;;;;; 99000)) ;;; Generated autoloads from makesum.el (autoload 'make-command-summary "makesum" "\ @@ -17648,7 +17650,7 @@ Previous contents of that buffer are killed first. ;;;*** -;;;### (autoloads nil "man" "man.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "man" "man.el" (21710 32133 609297 99000)) ;;; Generated autoloads from man.el (defalias 'manual-entry 'man) @@ -17704,7 +17706,7 @@ Default bookmark handler for Man buffers. ;;;*** -;;;### (autoloads nil "master" "master.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "master" "master.el" (21710 32133 609297 99000)) ;;; Generated autoloads from master.el (push (purecopy '(master 1 0 2)) package--builtin-versions) @@ -17727,8 +17729,8 @@ yourself the value of `master-of' by calling `master-show-slave'. ;;;*** -;;;### (autoloads nil "mb-depth" "mb-depth.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "mb-depth" "mb-depth.el" (21710 32133 609297 +;;;;;; 99000)) ;;; Generated autoloads from mb-depth.el (defvar minibuffer-depth-indicate-mode nil "\ @@ -17755,13 +17757,13 @@ recursion depth in the minibuffer prompt. This is only useful if ;;;*** -;;;### (autoloads nil "md4" "md4.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "md4" "md4.el" (21710 32133 609297 99000)) ;;; Generated autoloads from md4.el (push (purecopy '(md4 1 0)) package--builtin-versions) ;;;*** -;;;### (autoloads nil "message" "gnus/message.el" (21706 5826 304666 +;;;### (autoloads nil "message" "gnus/message.el" (21710 32133 537296 ;;;;;; 725000)) ;;; Generated autoloads from gnus/message.el @@ -17927,8 +17929,8 @@ which specify the range to operate on. ;;;*** -;;;### (autoloads nil "meta-mode" "progmodes/meta-mode.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "meta-mode" "progmodes/meta-mode.el" (21710 +;;;;;; 32133 747297 816000)) ;;; Generated autoloads from progmodes/meta-mode.el (push (purecopy '(meta-mode 1 0)) package--builtin-versions) @@ -17944,8 +17946,8 @@ Major mode for editing MetaPost sources. ;;;*** -;;;### (autoloads nil "metamail" "mail/metamail.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "metamail" "mail/metamail.el" (21710 32133 +;;;;;; 603297 68000)) ;;; Generated autoloads from mail/metamail.el (autoload 'metamail-interpret-header "metamail" "\ @@ -17988,8 +17990,8 @@ redisplayed as output is inserted. ;;;*** -;;;### (autoloads nil "mh-comp" "mh-e/mh-comp.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "mh-comp" "mh-e/mh-comp.el" (21710 32133 615297 +;;;;;; 130000)) ;;; Generated autoloads from mh-e/mh-comp.el (autoload 'mh-smail "mh-comp" "\ @@ -18079,7 +18081,7 @@ delete the draft message. ;;;*** -;;;### (autoloads nil "mh-e" "mh-e/mh-e.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "mh-e" "mh-e/mh-e.el" (21710 32133 616297 135000)) ;;; Generated autoloads from mh-e/mh-e.el (push (purecopy '(mh-e 8 6)) package--builtin-versions) @@ -18096,8 +18098,8 @@ Display version information about MH-E and the MH mail handling system. ;;;*** -;;;### (autoloads nil "mh-folder" "mh-e/mh-folder.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "mh-folder" "mh-e/mh-folder.el" (21710 32133 +;;;;;; 617297 141000)) ;;; Generated autoloads from mh-e/mh-folder.el (autoload 'mh-rmail "mh-folder" "\ @@ -18178,8 +18180,8 @@ perform the operation on all messages in that region. ;;;*** -;;;### (autoloads nil "midnight" "midnight.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "midnight" "midnight.el" (21710 32133 621297 +;;;;;; 161000)) ;;; Generated autoloads from midnight.el (autoload 'clean-buffer-list "midnight" "\ @@ -18205,8 +18207,8 @@ to its second argument TM. ;;;*** -;;;### (autoloads nil "minibuf-eldef" "minibuf-eldef.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "minibuf-eldef" "minibuf-eldef.el" (21710 32133 +;;;;;; 621297 161000)) ;;; Generated autoloads from minibuf-eldef.el (defvar minibuffer-electric-default-mode nil "\ @@ -18235,7 +18237,7 @@ is modified to remove the default indication. ;;;*** -;;;### (autoloads nil "misc" "misc.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "misc" "misc.el" (21710 32133 623297 172000)) ;;; Generated autoloads from misc.el (autoload 'butterfly "misc" "\ @@ -18263,8 +18265,8 @@ The return value is always nil. ;;;*** -;;;### (autoloads nil "misearch" "misearch.el" (21691 38459 74604 -;;;;;; 918000)) +;;;### (autoloads nil "misearch" "misearch.el" (21710 32133 623297 +;;;;;; 172000)) ;;; Generated autoloads from misearch.el (add-hook 'isearch-mode-hook 'multi-isearch-setup) @@ -18349,8 +18351,8 @@ whose file names match the specified wildcard. ;;;*** -;;;### (autoloads nil "mixal-mode" "progmodes/mixal-mode.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "mixal-mode" "progmodes/mixal-mode.el" (21710 +;;;;;; 32133 747297 816000)) ;;; Generated autoloads from progmodes/mixal-mode.el (push (purecopy '(mixal-mode 0 1)) package--builtin-versions) @@ -18361,8 +18363,8 @@ Major mode for the mixal asm language. ;;;*** -;;;### (autoloads nil "mm-encode" "gnus/mm-encode.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "mm-encode" "gnus/mm-encode.el" (21710 32133 +;;;;;; 538296 730000)) ;;; Generated autoloads from gnus/mm-encode.el (autoload 'mm-default-file-encoding "mm-encode" "\ @@ -18372,8 +18374,8 @@ Return a default encoding for FILE. ;;;*** -;;;### (autoloads nil "mm-extern" "gnus/mm-extern.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "mm-extern" "gnus/mm-extern.el" (21710 32133 +;;;;;; 538296 730000)) ;;; Generated autoloads from gnus/mm-extern.el (autoload 'mm-extern-cache-contents "mm-extern" "\ @@ -18391,8 +18393,8 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing. ;;;*** -;;;### (autoloads nil "mm-partial" "gnus/mm-partial.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "mm-partial" "gnus/mm-partial.el" (21710 32133 +;;;;;; 538296 730000)) ;;; Generated autoloads from gnus/mm-partial.el (autoload 'mm-inline-partial "mm-partial" "\ @@ -18405,8 +18407,8 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing. ;;;*** -;;;### (autoloads nil "mm-url" "gnus/mm-url.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "mm-url" "gnus/mm-url.el" (21710 32133 538296 +;;;;;; 730000)) ;;; Generated autoloads from gnus/mm-url.el (autoload 'mm-url-insert-file-contents "mm-url" "\ @@ -18422,8 +18424,8 @@ Insert file contents of URL using `mm-url-program'. ;;;*** -;;;### (autoloads nil "mm-uu" "gnus/mm-uu.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "mm-uu" "gnus/mm-uu.el" (21710 32133 539296 +;;;;;; 735000)) ;;; Generated autoloads from gnus/mm-uu.el (autoload 'mm-uu-dissect "mm-uu" "\ @@ -18442,7 +18444,7 @@ Assume text has been decoded if DECODED is non-nil. ;;;*** -;;;### (autoloads nil "mml" "gnus/mml.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "mml" "gnus/mml.el" (21710 32133 540296 740000)) ;;; Generated autoloads from gnus/mml.el (autoload 'mml-to-mime "mml" "\ @@ -18467,8 +18469,8 @@ body) or \"attachment\" (separate from the body). ;;;*** -;;;### (autoloads nil "mml1991" "gnus/mml1991.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "mml1991" "gnus/mml1991.el" (21710 32133 540296 +;;;;;; 740000)) ;;; Generated autoloads from gnus/mml1991.el (autoload 'mml1991-encrypt "mml1991" "\ @@ -18483,8 +18485,8 @@ body) or \"attachment\" (separate from the body). ;;;*** -;;;### (autoloads nil "mml2015" "gnus/mml2015.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "mml2015" "gnus/mml2015.el" (21710 32133 541296 +;;;;;; 745000)) ;;; Generated autoloads from gnus/mml2015.el (autoload 'mml2015-decrypt "mml2015" "\ @@ -18524,16 +18526,16 @@ body) or \"attachment\" (separate from the body). ;;;*** -;;;### (autoloads nil "mode-local" "cedet/mode-local.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "mode-local" "cedet/mode-local.el" (21710 32133 +;;;;;; 415296 90000)) ;;; Generated autoloads from cedet/mode-local.el (put 'define-overloadable-function 'doc-string-elt 3) ;;;*** -;;;### (autoloads nil "modula2" "progmodes/modula2.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "modula2" "progmodes/modula2.el" (21710 32133 +;;;;;; 748297 822000)) ;;; Generated autoloads from progmodes/modula2.el (defalias 'modula-2-mode 'm2-mode) @@ -18566,8 +18568,8 @@ followed by the first character of the construct. ;;;*** -;;;### (autoloads nil "morse" "play/morse.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "morse" "play/morse.el" (21710 32133 708297 +;;;;;; 614000)) ;;; Generated autoloads from play/morse.el (autoload 'morse-region "morse" "\ @@ -18592,8 +18594,8 @@ Convert NATO phonetic alphabet in region to ordinary ASCII text. ;;;*** -;;;### (autoloads nil "mouse-drag" "mouse-drag.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "mouse-drag" "mouse-drag.el" (21710 32133 623297 +;;;;;; 172000)) ;;; Generated autoloads from mouse-drag.el (autoload 'mouse-drag-throw "mouse-drag" "\ @@ -18640,7 +18642,7 @@ To test this function, evaluate: ;;;*** -;;;### (autoloads nil "mpc" "mpc.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "mpc" "mpc.el" (21710 32133 625297 182000)) ;;; Generated autoloads from mpc.el (autoload 'mpc "mpc" "\ @@ -18650,7 +18652,7 @@ Main entry point for MPC. ;;;*** -;;;### (autoloads nil "mpuz" "play/mpuz.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "mpuz" "play/mpuz.el" (21710 32133 708297 614000)) ;;; Generated autoloads from play/mpuz.el (autoload 'mpuz "mpuz" "\ @@ -18660,7 +18662,7 @@ Multiplication puzzle with GNU Emacs. ;;;*** -;;;### (autoloads nil "msb" "msb.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "msb" "msb.el" (21710 32133 625297 182000)) ;;; Generated autoloads from msb.el (defvar msb-mode nil "\ @@ -18685,8 +18687,8 @@ different buffer menu using the function `msb'. ;;;*** -;;;### (autoloads nil "mule-diag" "international/mule-diag.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "mule-diag" "international/mule-diag.el" (21710 +;;;;;; 32133 569296 891000)) ;;; Generated autoloads from international/mule-diag.el (autoload 'list-character-sets "mule-diag" "\ @@ -18818,8 +18820,8 @@ The default is 20. If LIMIT is negative, do not limit the listing. ;;;*** -;;;### (autoloads nil "mule-util" "international/mule-util.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "mule-util" "international/mule-util.el" (21710 +;;;;;; 32133 569296 891000)) ;;; Generated autoloads from international/mule-util.el (defsubst string-to-list (string) "\ @@ -18950,8 +18952,8 @@ per-character basis, this may not be accurate. ;;;*** -;;;### (autoloads nil "net-utils" "net/net-utils.el" (21704 50495 -;;;;;; 455324 752000)) +;;;### (autoloads nil "net-utils" "net/net-utils.el" (21710 32133 +;;;;;; 632297 218000)) ;;; Generated autoloads from net/net-utils.el (autoload 'ifconfig "net-utils" "\ @@ -19045,8 +19047,8 @@ Open a network connection to HOST on PORT. ;;;*** -;;;### (autoloads nil "netrc" "net/netrc.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "netrc" "net/netrc.el" (21710 32133 632297 +;;;;;; 218000)) ;;; Generated autoloads from net/netrc.el (autoload 'netrc-credentials "netrc" "\ @@ -19058,8 +19060,8 @@ listed in the PORTS list. ;;;*** -;;;### (autoloads nil "network-stream" "net/network-stream.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "network-stream" "net/network-stream.el" (21710 +;;;;;; 32133 632297 218000)) ;;; Generated autoloads from net/network-stream.el (autoload 'open-network-stream "network-stream" "\ @@ -19155,8 +19157,8 @@ asynchronously, if possible. ;;;*** -;;;### (autoloads nil "newst-backend" "net/newst-backend.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "newst-backend" "net/newst-backend.el" (21710 +;;;;;; 32133 633297 224000)) ;;; Generated autoloads from net/newst-backend.el (autoload 'newsticker-running-p "newst-backend" "\ @@ -19178,7 +19180,7 @@ Run `newsticker-start-hook' if newsticker was not running already. ;;;*** ;;;### (autoloads nil "newst-plainview" "net/newst-plainview.el" -;;;;;; (21670 32331 385639 720000)) +;;;;;; (21710 32133 634297 229000)) ;;; Generated autoloads from net/newst-plainview.el (autoload 'newsticker-plainview "newst-plainview" "\ @@ -19188,8 +19190,8 @@ Start newsticker plainview. ;;;*** -;;;### (autoloads nil "newst-reader" "net/newst-reader.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "newst-reader" "net/newst-reader.el" (21710 +;;;;;; 32133 634297 229000)) ;;; Generated autoloads from net/newst-reader.el (autoload 'newsticker-show-news "newst-reader" "\ @@ -19199,8 +19201,8 @@ Start reading news. You may want to bind this to a key. ;;;*** -;;;### (autoloads nil "newst-ticker" "net/newst-ticker.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "newst-ticker" "net/newst-ticker.el" (21710 +;;;;;; 32133 634297 229000)) ;;; Generated autoloads from net/newst-ticker.el (autoload 'newsticker-ticker-running-p "newst-ticker" "\ @@ -19220,8 +19222,8 @@ running already. ;;;*** -;;;### (autoloads nil "newst-treeview" "net/newst-treeview.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "newst-treeview" "net/newst-treeview.el" (21710 +;;;;;; 32133 634297 229000)) ;;; Generated autoloads from net/newst-treeview.el (autoload 'newsticker-treeview "newst-treeview" "\ @@ -19231,8 +19233,8 @@ Start newsticker treeview. ;;;*** -;;;### (autoloads nil "nndiary" "gnus/nndiary.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "nndiary" "gnus/nndiary.el" (21710 32133 541296 +;;;;;; 745000)) ;;; Generated autoloads from gnus/nndiary.el (autoload 'nndiary-generate-nov-databases "nndiary" "\ @@ -19242,8 +19244,8 @@ Generate NOV databases in all nndiary directories. ;;;*** -;;;### (autoloads nil "nndoc" "gnus/nndoc.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "nndoc" "gnus/nndoc.el" (21710 32133 542296 +;;;;;; 750000)) ;;; Generated autoloads from gnus/nndoc.el (autoload 'nndoc-add-type "nndoc" "\ @@ -19257,8 +19259,8 @@ symbol in the alist. ;;;*** -;;;### (autoloads nil "nnfolder" "gnus/nnfolder.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "nnfolder" "gnus/nnfolder.el" (21710 32133 +;;;;;; 542296 750000)) ;;; Generated autoloads from gnus/nnfolder.el (autoload 'nnfolder-generate-active-file "nnfolder" "\ @@ -19269,7 +19271,7 @@ This command does not work if you use short group names. ;;;*** -;;;### (autoloads nil "nnml" "gnus/nnml.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "nnml" "gnus/nnml.el" (21710 32133 546296 771000)) ;;; Generated autoloads from gnus/nnml.el (autoload 'nnml-generate-nov-databases "nnml" "\ @@ -19279,7 +19281,7 @@ Generate NOV databases in all nnml directories. ;;;*** -;;;### (autoloads nil "novice" "novice.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "novice" "novice.el" (21710 32133 645297 286000)) ;;; Generated autoloads from novice.el (define-obsolete-variable-alias 'disabled-command-hook 'disabled-command-function "22.1") @@ -19311,8 +19313,8 @@ future sessions. ;;;*** -;;;### (autoloads nil "nroff-mode" "textmodes/nroff-mode.el" (21670 -;;;;;; 32331 885635 586000)) +;;;### (autoloads nil "nroff-mode" "textmodes/nroff-mode.el" (21710 +;;;;;; 32133 793298 56000)) ;;; Generated autoloads from textmodes/nroff-mode.el (autoload 'nroff-mode "nroff-mode" "\ @@ -19326,14 +19328,14 @@ closing requests for requests that are used in matched pairs. ;;;*** -;;;### (autoloads nil "ntlm" "net/ntlm.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "ntlm" "net/ntlm.el" (21710 32133 635297 234000)) ;;; Generated autoloads from net/ntlm.el (push (purecopy '(ntlm 1 0)) package--builtin-versions) ;;;*** -;;;### (autoloads nil "nxml-glyph" "nxml/nxml-glyph.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "nxml-glyph" "nxml/nxml-glyph.el" (21710 32133 +;;;;;; 645297 286000)) ;;; Generated autoloads from nxml/nxml-glyph.el (autoload 'nxml-glyph-display-string "nxml-glyph" "\ @@ -19345,8 +19347,8 @@ Return nil if the face cannot display a glyph for N. ;;;*** -;;;### (autoloads nil "nxml-mode" "nxml/nxml-mode.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "nxml-mode" "nxml/nxml-mode.el" (21710 32133 +;;;;;; 646297 291000)) ;;; Generated autoloads from nxml/nxml-mode.el (autoload 'nxml-mode "nxml-mode" "\ @@ -19406,8 +19408,8 @@ Many aspects this mode can be customized using ;;;*** -;;;### (autoloads nil "nxml-uchnm" "nxml/nxml-uchnm.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "nxml-uchnm" "nxml/nxml-uchnm.el" (21710 32133 +;;;;;; 647297 296000)) ;;; Generated autoloads from nxml/nxml-uchnm.el (autoload 'nxml-enable-unicode-char-name-sets "nxml-uchnm" "\ @@ -19419,8 +19421,8 @@ the variable `nxml-enabled-unicode-blocks'. ;;;*** -;;;### (autoloads nil "octave" "progmodes/octave.el" (21695 35516 -;;;;;; 595262 313000)) +;;;### (autoloads nil "octave" "progmodes/octave.el" (21710 32133 +;;;;;; 748297 822000)) ;;; Generated autoloads from progmodes/octave.el (autoload 'octave-mode "octave" "\ @@ -19457,8 +19459,8 @@ startup file, `~/.emacs-octave'. ;;;*** -;;;### (autoloads nil "opascal" "progmodes/opascal.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "opascal" "progmodes/opascal.el" (21710 32133 +;;;;;; 749297 827000)) ;;; Generated autoloads from progmodes/opascal.el (define-obsolete-function-alias 'delphi-mode 'opascal-mode "24.4") @@ -19493,7 +19495,7 @@ Coloring: ;;;*** -;;;### (autoloads nil "org" "org/org.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "org" "org/org.el" (21710 32133 694297 541000)) ;;; Generated autoloads from org/org.el (autoload 'org-babel-do-load-languages "org" "\ @@ -19714,8 +19716,8 @@ Call the customize function with org as argument. ;;;*** -;;;### (autoloads nil "org-agenda" "org/org-agenda.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "org-agenda" "org/org-agenda.el" (21710 32133 +;;;;;; 676297 447000)) ;;; Generated autoloads from org/org-agenda.el (autoload 'org-toggle-sticky-agenda "org-agenda" "\ @@ -19988,8 +19990,8 @@ to override `appt-message-warning-time'. ;;;*** -;;;### (autoloads nil "org-capture" "org/org-capture.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "org-capture" "org/org-capture.el" (21710 32133 +;;;;;; 678297 458000)) ;;; Generated autoloads from org/org-capture.el (autoload 'org-capture-string "org-capture" "\ @@ -20031,8 +20033,8 @@ Set `org-capture-templates' to be similar to `org-remember-templates'. ;;;*** -;;;### (autoloads nil "org-colview" "org/org-colview.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "org-colview" "org/org-colview.el" (21710 32133 +;;;;;; 679297 463000)) ;;; Generated autoloads from org/org-colview.el (autoload 'org-columns-remove-overlays "org-colview" "\ @@ -20095,8 +20097,8 @@ Turn on or update column view in the agenda. ;;;*** -;;;### (autoloads nil "org-compat" "org/org-compat.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "org-compat" "org/org-compat.el" (21710 32133 +;;;;;; 679297 463000)) ;;; Generated autoloads from org/org-compat.el (autoload 'org-check-version "org-compat" "\ @@ -20106,8 +20108,8 @@ Try very hard to provide sensible version strings. ;;;*** -;;;### (autoloads nil "org-macs" "org/org-macs.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "org-macs" "org/org-macs.el" (21710 32133 684297 +;;;;;; 489000)) ;;; Generated autoloads from org/org-macs.el (autoload 'org-load-noerror-mustsuffix "org-macs" "\ @@ -20117,8 +20119,8 @@ Load FILE with optional arguments NOERROR and MUSTSUFFIX. Drop the MUSTSUFFIX a ;;;*** -;;;### (autoloads nil "org-version" "org/org-version.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "org-version" "org/org-version.el" (21710 32133 +;;;;;; 687297 504000)) ;;; Generated autoloads from org/org-version.el (autoload 'org-release "org-version" "\ @@ -20135,8 +20137,8 @@ The Git version of org-mode. ;;;*** -;;;### (autoloads nil "outline" "outline.el" (21708 47547 478182 -;;;;;; 210000)) +;;;### (autoloads nil "outline" "outline.el" (21710 32133 702297 +;;;;;; 582000)) ;;; Generated autoloads from outline.el (put 'outline-regexp 'safe-local-variable 'stringp) (put 'outline-heading-end-regexp 'safe-local-variable 'stringp) @@ -20179,8 +20181,8 @@ See the command `outline-mode' for more information on this mode. ;;;*** -;;;### (autoloads nil "package" "emacs-lisp/package.el" (21695 35516 -;;;;;; 595262 313000)) +;;;### (autoloads nil "package" "emacs-lisp/package.el" (21710 32133 +;;;;;; 464296 345000)) ;;; Generated autoloads from emacs-lisp/package.el (push (purecopy '(package 1 0 1)) package--builtin-versions) @@ -20258,7 +20260,7 @@ The list is displayed in a buffer named `*Packages*'. ;;;*** -;;;### (autoloads nil "paren" "paren.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "paren" "paren.el" (21710 32133 702297 582000)) ;;; Generated autoloads from paren.el (defvar show-paren-mode nil "\ @@ -20284,8 +20286,8 @@ matching parenthesis is highlighted in `show-paren-style' after ;;;*** -;;;### (autoloads nil "parse-time" "calendar/parse-time.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "parse-time" "calendar/parse-time.el" (21710 +;;;;;; 32133 405296 38000)) ;;; Generated autoloads from calendar/parse-time.el (put 'parse-time-rules 'risky-local-variable t) @@ -20298,8 +20300,8 @@ unknown are returned as nil. ;;;*** -;;;### (autoloads nil "pascal" "progmodes/pascal.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "pascal" "progmodes/pascal.el" (21710 32133 +;;;;;; 749297 827000)) ;;; Generated autoloads from progmodes/pascal.el (autoload 'pascal-mode "pascal" "\ @@ -20348,8 +20350,8 @@ See also the user variables `pascal-type-keywords', `pascal-start-keywords' and ;;;*** -;;;### (autoloads nil "password-cache" "password-cache.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "password-cache" "password-cache.el" (21710 +;;;;;; 32133 702297 582000)) ;;; Generated autoloads from password-cache.el (defvar password-cache t "\ @@ -20370,8 +20372,8 @@ Check if KEY is in the cache. ;;;*** -;;;### (autoloads nil "pcase" "emacs-lisp/pcase.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "pcase" "emacs-lisp/pcase.el" (21710 32133 +;;;;;; 465296 350000)) ;;; Generated autoloads from emacs-lisp/pcase.el (autoload 'pcase "pcase" "\ @@ -20453,8 +20455,8 @@ Define a pcase UPattern macro. ;;;*** -;;;### (autoloads nil "pcmpl-cvs" "pcmpl-cvs.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "pcmpl-cvs" "pcmpl-cvs.el" (21710 32133 702297 +;;;;;; 582000)) ;;; Generated autoloads from pcmpl-cvs.el (autoload 'pcomplete/cvs "pcmpl-cvs" "\ @@ -20464,8 +20466,8 @@ Completion rules for the `cvs' command. ;;;*** -;;;### (autoloads nil "pcmpl-gnu" "pcmpl-gnu.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "pcmpl-gnu" "pcmpl-gnu.el" (21710 32133 702297 +;;;;;; 582000)) ;;; Generated autoloads from pcmpl-gnu.el (autoload 'pcomplete/gzip "pcmpl-gnu" "\ @@ -20492,8 +20494,8 @@ Completion for the GNU tar utility. ;;;*** -;;;### (autoloads nil "pcmpl-linux" "pcmpl-linux.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "pcmpl-linux" "pcmpl-linux.el" (21710 32133 +;;;;;; 702297 582000)) ;;; Generated autoloads from pcmpl-linux.el (autoload 'pcomplete/kill "pcmpl-linux" "\ @@ -20513,8 +20515,8 @@ Completion for GNU/Linux `mount'. ;;;*** -;;;### (autoloads nil "pcmpl-rpm" "pcmpl-rpm.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "pcmpl-rpm" "pcmpl-rpm.el" (21710 32133 702297 +;;;;;; 582000)) ;;; Generated autoloads from pcmpl-rpm.el (autoload 'pcomplete/rpm "pcmpl-rpm" "\ @@ -20524,8 +20526,8 @@ Completion for the `rpm' command. ;;;*** -;;;### (autoloads nil "pcmpl-unix" "pcmpl-unix.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "pcmpl-unix" "pcmpl-unix.el" (21710 32133 703297 +;;;;;; 588000)) ;;; Generated autoloads from pcmpl-unix.el (autoload 'pcomplete/cd "pcmpl-unix" "\ @@ -20580,8 +20582,8 @@ Includes files as well as host names followed by a colon. ;;;*** -;;;### (autoloads nil "pcmpl-x" "pcmpl-x.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "pcmpl-x" "pcmpl-x.el" (21710 32133 703297 +;;;;;; 588000)) ;;; Generated autoloads from pcmpl-x.el (autoload 'pcomplete/tlmgr "pcmpl-x" "\ @@ -20605,8 +20607,8 @@ Completion for the `ag' command. ;;;*** -;;;### (autoloads nil "pcomplete" "pcomplete.el" (21688 62278 418203 -;;;;;; 119000)) +;;;### (autoloads nil "pcomplete" "pcomplete.el" (21710 32133 703297 +;;;;;; 588000)) ;;; Generated autoloads from pcomplete.el (autoload 'pcomplete "pcomplete" "\ @@ -20663,7 +20665,7 @@ Setup `shell-mode' to use pcomplete. ;;;*** -;;;### (autoloads nil "pcvs" "vc/pcvs.el" (21670 32331 885635 586000)) +;;;### (autoloads nil "pcvs" "vc/pcvs.el" (21710 32133 822298 206000)) ;;; Generated autoloads from vc/pcvs.el (autoload 'cvs-checkout "pcvs" "\ @@ -20738,8 +20740,8 @@ The exact behavior is determined also by `cvs-dired-use-hook'." (when (stringp d ;;;*** -;;;### (autoloads nil "pcvs-defs" "vc/pcvs-defs.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "pcvs-defs" "vc/pcvs-defs.el" (21710 32133 +;;;;;; 821298 201000)) ;;; Generated autoloads from vc/pcvs-defs.el (defvar cvs-global-menu (let ((m (make-sparse-keymap "PCL-CVS"))) (define-key m [status] `(menu-item ,(purecopy "Directory Status") cvs-status :help ,(purecopy "A more verbose status of a workarea"))) (define-key m [checkout] `(menu-item ,(purecopy "Checkout Module") cvs-checkout :help ,(purecopy "Check out a module from the repository"))) (define-key m [update] `(menu-item ,(purecopy "Update Directory") cvs-update :help ,(purecopy "Fetch updates from the repository"))) (define-key m [examine] `(menu-item ,(purecopy "Examine Directory") cvs-examine :help ,(purecopy "Examine the current state of a workarea"))) (fset 'cvs-global-menu m)) "\ @@ -20747,8 +20749,8 @@ Global menu used by PCL-CVS.") ;;;*** -;;;### (autoloads nil "perl-mode" "progmodes/perl-mode.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "perl-mode" "progmodes/perl-mode.el" (21710 +;;;;;; 32133 749297 827000)) ;;; Generated autoloads from progmodes/perl-mode.el (put 'perl-indent-level 'safe-local-variable 'integerp) (put 'perl-continued-statement-offset 'safe-local-variable 'integerp) @@ -20809,8 +20811,8 @@ Turning on Perl mode runs the normal hook `perl-mode-hook'. ;;;*** -;;;### (autoloads nil "picture" "textmodes/picture.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "picture" "textmodes/picture.el" (21710 32133 +;;;;;; 794298 61000)) ;;; Generated autoloads from textmodes/picture.el (autoload 'picture-mode "picture" "\ @@ -20890,8 +20892,8 @@ they are not by default assigned to keys. ;;;*** -;;;### (autoloads nil "plstore" "gnus/plstore.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "plstore" "gnus/plstore.el" (21710 32133 548296 +;;;;;; 782000)) ;;; Generated autoloads from gnus/plstore.el (autoload 'plstore-open "plstore" "\ @@ -20906,8 +20908,8 @@ Major mode for editing PLSTORE files. ;;;*** -;;;### (autoloads nil "po" "textmodes/po.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "po" "textmodes/po.el" (21710 32133 794298 +;;;;;; 61000)) ;;; Generated autoloads from textmodes/po.el (autoload 'po-find-file-coding-system "po" "\ @@ -20918,7 +20920,7 @@ Called through `file-coding-system-alist', before the file is visited for real. ;;;*** -;;;### (autoloads nil "pong" "play/pong.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "pong" "play/pong.el" (21710 32133 708297 614000)) ;;; Generated autoloads from play/pong.el (autoload 'pong "pong" "\ @@ -20934,7 +20936,7 @@ pong-mode keybindings:\\ ;;;*** -;;;### (autoloads nil "pop3" "gnus/pop3.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "pop3" "gnus/pop3.el" (21710 32133 549296 787000)) ;;; Generated autoloads from gnus/pop3.el (autoload 'pop3-movemail "pop3" "\ @@ -20945,8 +20947,8 @@ Use streaming commands. ;;;*** -;;;### (autoloads nil "pp" "emacs-lisp/pp.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "pp" "emacs-lisp/pp.el" (21710 32133 465296 +;;;;;; 350000)) ;;; Generated autoloads from emacs-lisp/pp.el (autoload 'pp-to-string "pp" "\ @@ -20996,8 +20998,8 @@ Ignores leading comment characters. ;;;*** -;;;### (autoloads nil "printing" "printing.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "printing" "printing.el" (21710 32133 711297 +;;;;;; 629000)) ;;; Generated autoloads from printing.el (push (purecopy '(printing 6 9 3)) package--builtin-versions) @@ -21585,7 +21587,7 @@ are both set to t. ;;;*** -;;;### (autoloads nil "proced" "proced.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "proced" "proced.el" (21710 32133 711297 629000)) ;;; Generated autoloads from proced.el (autoload 'proced "proced" "\ @@ -21603,8 +21605,8 @@ Proced buffers. ;;;*** -;;;### (autoloads nil "profiler" "profiler.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "profiler" "profiler.el" (21710 32133 712297 +;;;;;; 634000)) ;;; Generated autoloads from profiler.el (autoload 'profiler-start "profiler" "\ @@ -21632,8 +21634,8 @@ Open profile FILENAME. ;;;*** -;;;### (autoloads nil "prolog" "progmodes/prolog.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "prolog" "progmodes/prolog.el" (21710 32133 +;;;;;; 751297 837000)) ;;; Generated autoloads from progmodes/prolog.el (autoload 'prolog-mode "prolog" "\ @@ -21666,7 +21668,7 @@ With prefix argument ARG, restart the Prolog process if running before. ;;;*** -;;;### (autoloads nil "ps-bdf" "ps-bdf.el" (21670 32331 885635 586000)) +;;;### (autoloads nil "ps-bdf" "ps-bdf.el" (21710 32133 766297 915000)) ;;; Generated autoloads from ps-bdf.el (defvar bdf-directory-list (if (memq system-type '(ms-dos windows-nt)) (list (expand-file-name "fonts/bdf" installation-directory)) '("/usr/local/share/emacs/fonts/bdf")) "\ @@ -21677,8 +21679,8 @@ The default value is '(\"/usr/local/share/emacs/fonts/bdf\").") ;;;*** -;;;### (autoloads nil "ps-mode" "progmodes/ps-mode.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "ps-mode" "progmodes/ps-mode.el" (21710 32133 +;;;;;; 751297 837000)) ;;; Generated autoloads from progmodes/ps-mode.el (push (purecopy '(ps-mode 1 1 9)) package--builtin-versions) @@ -21724,8 +21726,8 @@ Typing \\\\[ps-run-goto-error] when the cursor is at the number ;;;*** -;;;### (autoloads nil "ps-print" "ps-print.el" (21670 32624 385626 -;;;;;; 484000)) +;;;### (autoloads nil "ps-print" "ps-print.el" (21710 32133 768297 +;;;;;; 925000)) ;;; Generated autoloads from ps-print.el (push (purecopy '(ps-print 7 3 5)) package--builtin-versions) @@ -21922,15 +21924,15 @@ If EXTENSION is any other symbol, it is ignored. ;;;*** -;;;### (autoloads nil "pulse" "cedet/pulse.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "pulse" "cedet/pulse.el" (21710 32133 415296 +;;;;;; 90000)) ;;; Generated autoloads from cedet/pulse.el (push (purecopy '(pulse 1 0)) package--builtin-versions) ;;;*** -;;;### (autoloads nil "python" "progmodes/python.el" (21704 50495 -;;;;;; 455324 752000)) +;;;### (autoloads nil "python" "progmodes/python.el" (21710 32133 +;;;;;; 752297 842000)) ;;; Generated autoloads from progmodes/python.el (push (purecopy '(python 0 24 4)) package--builtin-versions) @@ -21967,7 +21969,7 @@ Major mode for editing Python files. ;;;*** -;;;### (autoloads nil "qp" "gnus/qp.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "qp" "gnus/qp.el" (21710 32133 549296 787000)) ;;; Generated autoloads from gnus/qp.el (autoload 'quoted-printable-decode-region "qp" "\ @@ -21986,8 +21988,8 @@ them into characters should be done separately. ;;;*** -;;;### (autoloads nil "quail" "international/quail.el" (21673 8506 -;;;;;; 69195 402000)) +;;;### (autoloads nil "quail" "international/quail.el" (21710 32133 +;;;;;; 571296 901000)) ;;; Generated autoloads from international/quail.el (autoload 'quail-title "quail" "\ @@ -22217,8 +22219,8 @@ of each directory. ;;;*** -;;;### (autoloads nil "quail/hangul" "leim/quail/hangul.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "quail/hangul" "leim/quail/hangul.el" (21710 +;;;;;; 32133 593297 16000)) ;;; Generated autoloads from leim/quail/hangul.el (autoload 'hangul-input-method-activate "quail/hangul" "\ @@ -22231,7 +22233,7 @@ HELP-TEXT is a text set in `hangul-input-method-help-text'. ;;;*** ;;;### (autoloads nil "quail/uni-input" "leim/quail/uni-input.el" -;;;;;; (21670 32331 385639 720000)) +;;;;;; (21710 32133 597297 37000)) ;;; Generated autoloads from leim/quail/uni-input.el (autoload 'ucs-input-activate "quail/uni-input" "\ @@ -22245,8 +22247,8 @@ While this input method is active, the variable ;;;*** -;;;### (autoloads nil "quickurl" "net/quickurl.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "quickurl" "net/quickurl.el" (21710 32133 635297 +;;;;;; 234000)) ;;; Generated autoloads from net/quickurl.el (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" "\ @@ -22317,8 +22319,8 @@ Display `quickurl-list' as a formatted list using `quickurl-list-mode'. ;;;*** -;;;### (autoloads nil "rcirc" "net/rcirc.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "rcirc" "net/rcirc.el" (21710 32133 636297 +;;;;;; 239000)) ;;; Generated autoloads from net/rcirc.el (autoload 'rcirc "rcirc" "\ @@ -22356,8 +22358,8 @@ if ARG is omitted or nil. ;;;*** -;;;### (autoloads nil "re-builder" "emacs-lisp/re-builder.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "re-builder" "emacs-lisp/re-builder.el" (21710 +;;;;;; 32133 465296 350000)) ;;; Generated autoloads from emacs-lisp/re-builder.el (defalias 'regexp-builder 're-builder) @@ -22375,8 +22377,8 @@ matching parts of the target buffer will be highlighted. ;;;*** -;;;### (autoloads nil "recentf" "recentf.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "recentf" "recentf.el" (21710 32133 769297 +;;;;;; 931000)) ;;; Generated autoloads from recentf.el (defvar recentf-mode nil "\ @@ -22402,7 +22404,7 @@ were operated on recently. ;;;*** -;;;### (autoloads nil "rect" "rect.el" (21670 32331 885635 586000)) +;;;### (autoloads nil "rect" "rect.el" (21710 32133 769297 931000)) ;;; Generated autoloads from rect.el (autoload 'delete-rectangle "rect" "\ @@ -22542,8 +22544,8 @@ Activates the region if needed. Only lasts until the region is deactivated. ;;;*** -;;;### (autoloads nil "refill" "textmodes/refill.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "refill" "textmodes/refill.el" (21710 32133 +;;;;;; 795298 66000)) ;;; Generated autoloads from textmodes/refill.el (autoload 'refill-mode "refill" "\ @@ -22563,8 +22565,8 @@ For true \"word wrap\" behavior, use `visual-line-mode' instead. ;;;*** -;;;### (autoloads nil "reftex" "textmodes/reftex.el" (21704 50495 -;;;;;; 455324 752000)) +;;;### (autoloads nil "reftex" "textmodes/reftex.el" (21710 32133 +;;;;;; 799298 87000)) ;;; Generated autoloads from textmodes/reftex.el (autoload 'reftex-citation "reftex-cite" nil t) (autoload 'reftex-all-document-files "reftex-parse") @@ -22617,8 +22619,8 @@ This enforces rescanning the buffer on next use. ;;;*** -;;;### (autoloads nil "reftex-vars" "textmodes/reftex-vars.el" (21670 -;;;;;; 32331 885635 586000)) +;;;### (autoloads nil "reftex-vars" "textmodes/reftex-vars.el" (21710 +;;;;;; 32133 798298 81000)) ;;; Generated autoloads from textmodes/reftex-vars.el (put 'reftex-vref-is-default 'safe-local-variable (lambda (x) (or (stringp x) (symbolp x)))) (put 'reftex-fref-is-default 'safe-local-variable (lambda (x) (or (stringp x) (symbolp x)))) @@ -22627,8 +22629,8 @@ This enforces rescanning the buffer on next use. ;;;*** -;;;### (autoloads nil "regexp-opt" "emacs-lisp/regexp-opt.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "regexp-opt" "emacs-lisp/regexp-opt.el" (21710 +;;;;;; 32133 465296 350000)) ;;; Generated autoloads from emacs-lisp/regexp-opt.el (autoload 'regexp-opt "regexp-opt" "\ @@ -22657,15 +22659,15 @@ This means the number of non-shy regexp grouping constructs ;;;*** -;;;### (autoloads nil "regi" "emacs-lisp/regi.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "regi" "emacs-lisp/regi.el" (21710 32133 465296 +;;;;;; 350000)) ;;; Generated autoloads from emacs-lisp/regi.el (push (purecopy '(regi 1 8)) package--builtin-versions) ;;;*** -;;;### (autoloads nil "remember" "textmodes/remember.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "remember" "textmodes/remember.el" (21710 32133 +;;;;;; 799298 87000)) ;;; Generated autoloads from textmodes/remember.el (push (purecopy '(remember 2 0)) package--builtin-versions) @@ -22719,7 +22721,7 @@ to turn the *scratch* buffer into your notes buffer. ;;;*** -;;;### (autoloads nil "repeat" "repeat.el" (21670 32331 885635 586000)) +;;;### (autoloads nil "repeat" "repeat.el" (21710 32133 769297 931000)) ;;; Generated autoloads from repeat.el (push (purecopy '(repeat 0 51)) package--builtin-versions) @@ -22742,8 +22744,8 @@ recently executed command not bound to an input event\". ;;;*** -;;;### (autoloads nil "reporter" "mail/reporter.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "reporter" "mail/reporter.el" (21710 32133 +;;;;;; 603297 68000)) ;;; Generated autoloads from mail/reporter.el (autoload 'reporter-submit-bug-report "reporter" "\ @@ -22774,8 +22776,8 @@ mail-sending package is used for editing and sending the message. ;;;*** -;;;### (autoloads nil "reposition" "reposition.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "reposition" "reposition.el" (21710 32133 770297 +;;;;;; 936000)) ;;; Generated autoloads from reposition.el (autoload 'reposition-window "reposition" "\ @@ -22801,7 +22803,7 @@ first comment line visible (if point is in a comment). ;;;*** -;;;### (autoloads nil "reveal" "reveal.el" (21670 32331 885635 586000)) +;;;### (autoloads nil "reveal" "reveal.el" (21710 32133 770297 936000)) ;;; Generated autoloads from reveal.el (autoload 'reveal-mode "reveal" "\ @@ -22836,8 +22838,8 @@ the mode if ARG is omitted or nil. ;;;*** -;;;### (autoloads nil "ring" "emacs-lisp/ring.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "ring" "emacs-lisp/ring.el" (21710 32133 465296 +;;;;;; 350000)) ;;; Generated autoloads from emacs-lisp/ring.el (autoload 'ring-p "ring" "\ @@ -22852,8 +22854,8 @@ Make a ring that can contain SIZE elements. ;;;*** -;;;### (autoloads nil "rlogin" "net/rlogin.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "rlogin" "net/rlogin.el" (21710 32133 636297 +;;;;;; 239000)) ;;; Generated autoloads from net/rlogin.el (autoload 'rlogin "rlogin" "\ @@ -22897,8 +22899,8 @@ variable. ;;;*** -;;;### (autoloads nil "rmail" "mail/rmail.el" (21670 32623 885622 -;;;;;; 218000)) +;;;### (autoloads nil "rmail" "mail/rmail.el" (21710 32133 605297 +;;;;;; 78000)) ;;; Generated autoloads from mail/rmail.el (defvar rmail-file-name (purecopy "~/RMAIL") "\ @@ -23095,8 +23097,8 @@ Set PASSWORD to be used for retrieving mail from a POP or IMAP server. ;;;*** -;;;### (autoloads nil "rmailout" "mail/rmailout.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "rmailout" "mail/rmailout.el" (21710 32133 +;;;;;; 606297 83000)) ;;; Generated autoloads from mail/rmailout.el (put 'rmail-output-file-alist 'risky-local-variable t) @@ -23160,8 +23162,8 @@ than appending to it. Deletes the message after writing if ;;;*** -;;;### (autoloads nil "rng-cmpct" "nxml/rng-cmpct.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "rng-cmpct" "nxml/rng-cmpct.el" (21710 32133 +;;;;;; 647297 296000)) ;;; Generated autoloads from nxml/rng-cmpct.el (autoload 'rng-c-load-schema "rng-cmpct" "\ @@ -23172,8 +23174,8 @@ Return a pattern. ;;;*** -;;;### (autoloads nil "rng-nxml" "nxml/rng-nxml.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "rng-nxml" "nxml/rng-nxml.el" (21710 32133 +;;;;;; 648297 302000)) ;;; Generated autoloads from nxml/rng-nxml.el (autoload 'rng-nxml-mode-init "rng-nxml" "\ @@ -23185,8 +23187,8 @@ Validation will be enabled if `rng-nxml-auto-validate-flag' is non-nil. ;;;*** -;;;### (autoloads nil "rng-valid" "nxml/rng-valid.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "rng-valid" "nxml/rng-valid.el" (21710 32133 +;;;;;; 649297 307000)) ;;; Generated autoloads from nxml/rng-valid.el (autoload 'rng-validate-mode "rng-valid" "\ @@ -23216,8 +23218,8 @@ to use for finding the schema. ;;;*** -;;;### (autoloads nil "rng-xsd" "nxml/rng-xsd.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "rng-xsd" "nxml/rng-xsd.el" (21710 32133 649297 +;;;;;; 307000)) ;;; Generated autoloads from nxml/rng-xsd.el (put 'http://www\.w3\.org/2001/XMLSchema-datatypes 'rng-dt-compile 'rng-xsd-compile) @@ -23244,8 +23246,8 @@ must be equal. ;;;*** -;;;### (autoloads nil "robin" "international/robin.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "robin" "international/robin.el" (21710 32133 +;;;;;; 571296 901000)) ;;; Generated autoloads from international/robin.el (autoload 'robin-define-package "robin" "\ @@ -23277,7 +23279,7 @@ Start using robin package NAME, which is a string. ;;;*** -;;;### (autoloads nil "rot13" "rot13.el" (21670 32331 885635 586000)) +;;;### (autoloads nil "rot13" "rot13.el" (21710 32133 770297 936000)) ;;; Generated autoloads from rot13.el (autoload 'rot13 "rot13" "\ @@ -23314,8 +23316,8 @@ Toggle the use of ROT13 encoding for the current window. ;;;*** -;;;### (autoloads nil "rst" "textmodes/rst.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "rst" "textmodes/rst.el" (21710 32133 800298 +;;;;;; 92000)) ;;; Generated autoloads from textmodes/rst.el (add-to-list 'auto-mode-alist (purecopy '("\\.re?st\\'" . rst-mode))) @@ -23345,8 +23347,8 @@ for modes derived from Text mode, like Mail mode. ;;;*** -;;;### (autoloads nil "ruby-mode" "progmodes/ruby-mode.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "ruby-mode" "progmodes/ruby-mode.el" (21710 +;;;;;; 32133 753297 848000)) ;;; Generated autoloads from progmodes/ruby-mode.el (push (purecopy '(ruby-mode 1 2)) package--builtin-versions) @@ -23363,8 +23365,8 @@ Major mode for editing Ruby code. ;;;*** -;;;### (autoloads nil "ruler-mode" "ruler-mode.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "ruler-mode" "ruler-mode.el" (21710 32133 771297 +;;;;;; 941000)) ;;; Generated autoloads from ruler-mode.el (push (purecopy '(ruler-mode 1 6)) package--builtin-versions) @@ -23382,8 +23384,8 @@ if ARG is omitted or nil. ;;;*** -;;;### (autoloads nil "rx" "emacs-lisp/rx.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "rx" "emacs-lisp/rx.el" (21710 32133 466296 +;;;;;; 355000)) ;;; Generated autoloads from emacs-lisp/rx.el (autoload 'rx-to-string "rx" "\ @@ -23694,15 +23696,15 @@ enclosed in `(and ...)'. ;;;*** -;;;### (autoloads nil "sasl-ntlm" "net/sasl-ntlm.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "sasl-ntlm" "net/sasl-ntlm.el" (21710 32133 +;;;;;; 636297 239000)) ;;; Generated autoloads from net/sasl-ntlm.el (push (purecopy '(sasl 1 0)) package--builtin-versions) ;;;*** -;;;### (autoloads nil "savehist" "savehist.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "savehist" "savehist.el" (21710 32133 771297 +;;;;;; 941000)) ;;; Generated autoloads from savehist.el (push (purecopy '(savehist 24)) package--builtin-versions) @@ -23734,8 +23736,8 @@ histories, which is probably undesirable. ;;;*** -;;;### (autoloads nil "scheme" "progmodes/scheme.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "scheme" "progmodes/scheme.el" (21710 32133 +;;;;;; 753297 848000)) ;;; Generated autoloads from progmodes/scheme.el (autoload 'scheme-mode "scheme" "\ @@ -23774,8 +23776,8 @@ that variable's value is a string. ;;;*** -;;;### (autoloads nil "score-mode" "gnus/score-mode.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "score-mode" "gnus/score-mode.el" (21710 32133 +;;;;;; 550296 792000)) ;;; Generated autoloads from gnus/score-mode.el (autoload 'gnus-score-mode "score-mode" "\ @@ -23788,8 +23790,8 @@ This mode is an extended emacs-lisp mode. ;;;*** -;;;### (autoloads nil "scroll-all" "scroll-all.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "scroll-all" "scroll-all.el" (21710 32133 771297 +;;;;;; 941000)) ;;; Generated autoloads from scroll-all.el (defvar scroll-all-mode nil "\ @@ -23814,8 +23816,8 @@ one window apply to all visible windows in the same frame. ;;;*** -;;;### (autoloads nil "scroll-lock" "scroll-lock.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "scroll-lock" "scroll-lock.el" (21710 32133 +;;;;;; 771297 941000)) ;;; Generated autoloads from scroll-lock.el (autoload 'scroll-lock-mode "scroll-lock" "\ @@ -23831,16 +23833,16 @@ vertically fixed relative to window boundaries during scrolling. ;;;*** -;;;### (autoloads nil "secrets" "net/secrets.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "secrets" "net/secrets.el" (21710 32133 637297 +;;;;;; 244000)) ;;; Generated autoloads from net/secrets.el (when (featurep 'dbusbind) (autoload 'secrets-show-secrets "secrets" nil t)) ;;;*** -;;;### (autoloads nil "semantic" "cedet/semantic.el" (21679 47292 -;;;;;; 556033 759000)) +;;;### (autoloads nil "semantic" "cedet/semantic.el" (21710 32133 +;;;;;; 415296 90000)) ;;; Generated autoloads from cedet/semantic.el (push (purecopy '(semantic 2 2)) package--builtin-versions) @@ -23898,7 +23900,7 @@ Semantic mode. ;;;*** ;;;### (autoloads nil "semantic/bovine/grammar" "cedet/semantic/bovine/grammar.el" -;;;;;; (21670 32330 885624 725000)) +;;;;;; (21710 32133 418296 106000)) ;;; Generated autoloads from cedet/semantic/bovine/grammar.el (autoload 'bovine-grammar-mode "semantic/bovine/grammar" "\ @@ -23909,7 +23911,7 @@ Major mode for editing Bovine grammars. ;;;*** ;;;### (autoloads nil "semantic/wisent/grammar" "cedet/semantic/wisent/grammar.el" -;;;;;; (21670 32330 885624 725000)) +;;;;;; (21710 32133 430296 168000)) ;;; Generated autoloads from cedet/semantic/wisent/grammar.el (autoload 'wisent-grammar-mode "semantic/wisent/grammar" "\ @@ -23919,8 +23921,8 @@ Major mode for editing Wisent grammars. ;;;*** -;;;### (autoloads nil "sendmail" "mail/sendmail.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "sendmail" "mail/sendmail.el" (21710 32133 +;;;;;; 607297 89000)) ;;; Generated autoloads from mail/sendmail.el (defvar mail-from-style 'default "\ @@ -24201,14 +24203,14 @@ Like `mail' command, but display mail buffer in another frame. ;;;*** -;;;### (autoloads nil "seq" "emacs-lisp/seq.el" (21691 38459 74604 -;;;;;; 918000)) +;;;### (autoloads nil "seq" "emacs-lisp/seq.el" (21710 32133 466296 +;;;;;; 355000)) ;;; Generated autoloads from emacs-lisp/seq.el (push (purecopy '(seq 1 0)) package--builtin-versions) ;;;*** -;;;### (autoloads nil "server" "server.el" (21670 32331 885635 586000)) +;;;### (autoloads nil "server" "server.el" (21710 32133 772297 946000)) ;;; Generated autoloads from server.el (put 'server-host 'risky-local-variable t) @@ -24275,7 +24277,7 @@ only these files will be asked to be saved. ;;;*** -;;;### (autoloads nil "ses" "ses.el" (21670 32331 885635 586000)) +;;;### (autoloads nil "ses" "ses.el" (21710 32133 773297 952000)) ;;; Generated autoloads from ses.el (autoload 'ses-mode "ses" "\ @@ -24319,8 +24321,8 @@ formula: ;;;*** -;;;### (autoloads nil "sgml-mode" "textmodes/sgml-mode.el" (21670 -;;;;;; 32331 885635 586000)) +;;;### (autoloads nil "sgml-mode" "textmodes/sgml-mode.el" (21710 +;;;;;; 32133 801298 97000)) ;;; Generated autoloads from textmodes/sgml-mode.el (autoload 'sgml-mode "sgml-mode" "\ @@ -24385,8 +24387,8 @@ To work around that, do: ;;;*** -;;;### (autoloads nil "sh-script" "progmodes/sh-script.el" (21704 -;;;;;; 50495 455324 752000)) +;;;### (autoloads nil "sh-script" "progmodes/sh-script.el" (21710 +;;;;;; 32133 754297 853000)) ;;; Generated autoloads from progmodes/sh-script.el (push (purecopy '(sh-script 2 0 6)) package--builtin-versions) (put 'sh-shell 'safe-local-variable 'symbolp) @@ -24449,8 +24451,8 @@ with your script for an edit-interpret-debug cycle. ;;;*** -;;;### (autoloads nil "shadow" "emacs-lisp/shadow.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "shadow" "emacs-lisp/shadow.el" (21710 32133 +;;;;;; 466296 355000)) ;;; Generated autoloads from emacs-lisp/shadow.el (autoload 'list-load-path-shadows "shadow" "\ @@ -24499,8 +24501,8 @@ function, `load-path-shadows-find'. ;;;*** -;;;### (autoloads nil "shadowfile" "shadowfile.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "shadowfile" "shadowfile.el" (21710 32133 773297 +;;;;;; 952000)) ;;; Generated autoloads from shadowfile.el (autoload 'shadow-define-cluster "shadowfile" "\ @@ -24538,7 +24540,7 @@ Set up file shadowing. ;;;*** -;;;### (autoloads nil "shell" "shell.el" (21678 26426 225333 737000)) +;;;### (autoloads nil "shell" "shell.el" (21710 32133 774297 957000)) ;;; Generated autoloads from shell.el (defvar shell-dumb-shell-regexp (purecopy "cmd\\(proxy\\)?\\.exe") "\ @@ -24586,7 +24588,7 @@ Otherwise, one argument `-i' is passed to the shell. ;;;*** -;;;### (autoloads nil "shr" "net/shr.el" (21704 50495 455324 752000)) +;;;### (autoloads nil "shr" "net/shr.el" (21710 32133 637297 244000)) ;;; Generated autoloads from net/shr.el (autoload 'shr-render-region "shr" "\ @@ -24603,8 +24605,8 @@ DOM should be a parse tree as generated by ;;;*** -;;;### (autoloads nil "sieve" "gnus/sieve.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "sieve" "gnus/sieve.el" (21710 32133 550296 +;;;;;; 792000)) ;;; Generated autoloads from gnus/sieve.el (autoload 'sieve-manage "sieve" "\ @@ -24629,8 +24631,8 @@ DOM should be a parse tree as generated by ;;;*** -;;;### (autoloads nil "sieve-mode" "gnus/sieve-mode.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "sieve-mode" "gnus/sieve-mode.el" (21710 32133 +;;;;;; 550296 792000)) ;;; Generated autoloads from gnus/sieve-mode.el (autoload 'sieve-mode "sieve-mode" "\ @@ -24645,8 +24647,8 @@ Turning on Sieve mode runs `sieve-mode-hook'. ;;;*** -;;;### (autoloads nil "simula" "progmodes/simula.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "simula" "progmodes/simula.el" (21710 32133 +;;;;;; 755297 858000)) ;;; Generated autoloads from progmodes/simula.el (autoload 'simula-mode "simula" "\ @@ -24694,8 +24696,8 @@ with no arguments, if that value is non-nil. ;;;*** -;;;### (autoloads nil "skeleton" "skeleton.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "skeleton" "skeleton.el" (21710 32133 777297 +;;;;;; 972000)) ;;; Generated autoloads from skeleton.el (defvar skeleton-filter-function 'identity "\ @@ -24813,8 +24815,8 @@ symmetrical ones, and the same character twice for the others. ;;;*** -;;;### (autoloads nil "smerge-mode" "vc/smerge-mode.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "smerge-mode" "vc/smerge-mode.el" (21710 32133 +;;;;;; 823298 212000)) ;;; Generated autoloads from vc/smerge-mode.el (autoload 'smerge-ediff "smerge-mode" "\ @@ -24841,8 +24843,8 @@ If no conflict maker is found, turn off `smerge-mode'. ;;;*** -;;;### (autoloads nil "smiley" "gnus/smiley.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "smiley" "gnus/smiley.el" (21710 32133 550296 +;;;;;; 792000)) ;;; Generated autoloads from gnus/smiley.el (autoload 'smiley-region "smiley" "\ @@ -24859,8 +24861,8 @@ interactively. If there's no argument, do it at the current buffer. ;;;*** -;;;### (autoloads nil "smtpmail" "mail/smtpmail.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "smtpmail" "mail/smtpmail.el" (21710 32133 +;;;;;; 607297 89000)) ;;; Generated autoloads from mail/smtpmail.el (autoload 'smtpmail-send-it "smtpmail" "\ @@ -24875,8 +24877,8 @@ Send mail that was queued as a result of setting `smtpmail-queue-mail'. ;;;*** -;;;### (autoloads nil "snake" "play/snake.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "snake" "play/snake.el" (21710 32133 709297 +;;;;;; 619000)) ;;; Generated autoloads from play/snake.el (autoload 'snake "snake" "\ @@ -24899,8 +24901,8 @@ Snake mode keybindings: ;;;*** -;;;### (autoloads nil "snmp-mode" "net/snmp-mode.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "snmp-mode" "net/snmp-mode.el" (21710 32133 +;;;;;; 638297 250000)) ;;; Generated autoloads from net/snmp-mode.el (autoload 'snmp-mode "snmp-mode" "\ @@ -24929,8 +24931,8 @@ then `snmpv2-mode-hook'. ;;;*** -;;;### (autoloads nil "solar" "calendar/solar.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "solar" "calendar/solar.el" (21710 32133 405296 +;;;;;; 38000)) ;;; Generated autoloads from calendar/solar.el (autoload 'sunrise-sunset "solar" "\ @@ -24945,8 +24947,8 @@ This function is suitable for execution in an init file. ;;;*** -;;;### (autoloads nil "solitaire" "play/solitaire.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "solitaire" "play/solitaire.el" (21710 32133 +;;;;;; 709297 619000)) ;;; Generated autoloads from play/solitaire.el (autoload 'solitaire "solitaire" "\ @@ -25021,7 +25023,7 @@ Pick your favorite shortcuts: ;;;*** -;;;### (autoloads nil "sort" "sort.el" (21670 32331 885635 586000)) +;;;### (autoloads nil "sort" "sort.el" (21710 32133 777297 972000)) ;;; Generated autoloads from sort.el (put 'sort-fold-case 'safe-local-variable 'booleanp) @@ -25196,7 +25198,7 @@ is non-nil, it also prints a message describing the number of deletions. ;;;*** -;;;### (autoloads nil "spam" "gnus/spam.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "spam" "gnus/spam.el" (21710 32133 552296 802000)) ;;; Generated autoloads from gnus/spam.el (autoload 'spam-initialize "spam" "\ @@ -25210,8 +25212,8 @@ installed through `spam-necessary-extra-headers'. ;;;*** -;;;### (autoloads nil "spam-report" "gnus/spam-report.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "spam-report" "gnus/spam-report.el" (21710 +;;;;;; 32133 551296 797000)) ;;; Generated autoloads from gnus/spam-report.el (autoload 'spam-report-process-queue "spam-report" "\ @@ -25253,8 +25255,8 @@ Spam reports will be queued with the method used when ;;;*** -;;;### (autoloads nil "speedbar" "speedbar.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "speedbar" "speedbar.el" (21710 32133 778297 +;;;;;; 977000)) ;;; Generated autoloads from speedbar.el (defalias 'speedbar 'speedbar-frame-mode) @@ -25278,8 +25280,8 @@ selected. If the speedbar frame is active, then select the attached frame. ;;;*** -;;;### (autoloads nil "spook" "play/spook.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "spook" "play/spook.el" (21710 32133 709297 +;;;;;; 619000)) ;;; Generated autoloads from play/spook.el (autoload 'spook "spook" "\ @@ -25294,8 +25296,8 @@ Return a vector containing the lines from `spook-phrases-file'. ;;;*** -;;;### (autoloads nil "sql" "progmodes/sql.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "sql" "progmodes/sql.el" (21710 32133 756297 +;;;;;; 863000)) ;;; Generated autoloads from progmodes/sql.el (push (purecopy '(sql 3 4)) package--builtin-versions) @@ -25761,15 +25763,15 @@ Run vsql as an inferior process. ;;;*** -;;;### (autoloads nil "srecode" "cedet/srecode.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "srecode" "cedet/srecode.el" (21710 32133 431296 +;;;;;; 173000)) ;;; Generated autoloads from cedet/srecode.el (push (purecopy '(srecode 1 2)) package--builtin-versions) ;;;*** ;;;### (autoloads nil "srecode/srt-mode" "cedet/srecode/srt-mode.el" -;;;;;; (21670 32330 885624 725000)) +;;;;;; (21710 32133 434296 189000)) ;;; Generated autoloads from cedet/srecode/srt-mode.el (autoload 'srecode-template-mode "srecode/srt-mode" "\ @@ -25781,8 +25783,8 @@ Major-mode for writing SRecode macros. ;;;*** -;;;### (autoloads nil "starttls" "gnus/starttls.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "starttls" "gnus/starttls.el" (21710 32133 +;;;;;; 552296 802000)) ;;; Generated autoloads from gnus/starttls.el (autoload 'starttls-open-stream "starttls" "\ @@ -25805,8 +25807,8 @@ GnuTLS requires a port number. ;;;*** -;;;### (autoloads nil "strokes" "strokes.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "strokes" "strokes.el" (21710 32133 779297 +;;;;;; 983000)) ;;; Generated autoloads from strokes.el (autoload 'strokes-global-set-stroke "strokes" "\ @@ -25919,8 +25921,8 @@ Read a complex stroke and insert its glyph into the current buffer. ;;;*** -;;;### (autoloads nil "studly" "play/studly.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "studly" "play/studly.el" (21710 32133 709297 +;;;;;; 619000)) ;;; Generated autoloads from play/studly.el (autoload 'studlify-region "studly" "\ @@ -25940,8 +25942,8 @@ Studlify-case the current buffer. ;;;*** -;;;### (autoloads nil "subword" "progmodes/subword.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "subword" "progmodes/subword.el" (21710 32133 +;;;;;; 756297 863000)) ;;; Generated autoloads from progmodes/subword.el (define-obsolete-function-alias 'capitalized-words-mode 'subword-mode "25.1") @@ -26033,8 +26035,8 @@ See `superword-mode' for more information on Superword mode. ;;;*** -;;;### (autoloads nil "supercite" "mail/supercite.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "supercite" "mail/supercite.el" (21710 32133 +;;;;;; 608297 94000)) ;;; Generated autoloads from mail/supercite.el (autoload 'sc-cite-original "supercite" "\ @@ -26066,8 +26068,8 @@ and `sc-post-hook' is run after the guts of this function. ;;;*** -;;;### (autoloads nil "t-mouse" "t-mouse.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "t-mouse" "t-mouse.el" (21710 32133 781297 +;;;;;; 993000)) ;;; Generated autoloads from t-mouse.el (define-obsolete-function-alias 't-mouse-mode 'gpm-mouse-mode "23.1") @@ -26095,7 +26097,7 @@ It relies on the `gpm' daemon being activated. ;;;*** -;;;### (autoloads nil "tabify" "tabify.el" (21670 32331 885635 586000)) +;;;### (autoloads nil "tabify" "tabify.el" (21710 32133 781297 993000)) ;;; Generated autoloads from tabify.el (autoload 'untabify "tabify" "\ @@ -26124,8 +26126,8 @@ The variable `tab-width' controls the spacing of tab stops. ;;;*** -;;;### (autoloads nil "table" "textmodes/table.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "table" "textmodes/table.el" (21710 32133 803298 +;;;;;; 108000)) ;;; Generated autoloads from textmodes/table.el (defvar table-cell-map-hook nil "\ @@ -26717,7 +26719,7 @@ converts a table into plain text without frames. It is a companion to ;;;*** -;;;### (autoloads nil "talk" "talk.el" (21670 32331 885635 586000)) +;;;### (autoloads nil "talk" "talk.el" (21710 32133 781297 993000)) ;;; Generated autoloads from talk.el (autoload 'talk-connect "talk" "\ @@ -26732,8 +26734,8 @@ Connect to the Emacs talk group from the current X display or tty frame. ;;;*** -;;;### (autoloads nil "tar-mode" "tar-mode.el" (21704 50495 455324 -;;;;;; 752000)) +;;;### (autoloads nil "tar-mode" "tar-mode.el" (21710 32133 782297 +;;;;;; 998000)) ;;; Generated autoloads from tar-mode.el (autoload 'tar-mode "tar-mode" "\ @@ -26756,8 +26758,8 @@ See also: variables `tar-update-datestamp' and `tar-anal-blocksize'. ;;;*** -;;;### (autoloads nil "tcl" "progmodes/tcl.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "tcl" "progmodes/tcl.el" (21710 32133 757297 +;;;;;; 868000)) ;;; Generated autoloads from progmodes/tcl.el (autoload 'tcl-mode "tcl" "\ @@ -26805,8 +26807,8 @@ Prefix argument means invert sense of `tcl-use-smart-word-finder'. ;;;*** -;;;### (autoloads nil "telnet" "net/telnet.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "telnet" "net/telnet.el" (21710 32133 639297 +;;;;;; 255000)) ;;; Generated autoloads from net/telnet.el (autoload 'telnet "telnet" "\ @@ -26831,7 +26833,7 @@ Normally input is edited in Emacs and sent a line at a time. ;;;*** -;;;### (autoloads nil "term" "term.el" (21670 32331 885635 586000)) +;;;### (autoloads nil "term" "term.el" (21710 32133 783298 4000)) ;;; Generated autoloads from term.el (autoload 'make-term "term" "\ @@ -26873,8 +26875,8 @@ use in that buffer. ;;;*** -;;;### (autoloads nil "testcover" "emacs-lisp/testcover.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "testcover" "emacs-lisp/testcover.el" (21710 +;;;;;; 32133 468296 366000)) ;;; Generated autoloads from emacs-lisp/testcover.el (autoload 'testcover-this-defun "testcover" "\ @@ -26884,8 +26886,8 @@ Start coverage on function under point. ;;;*** -;;;### (autoloads nil "tetris" "play/tetris.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "tetris" "play/tetris.el" (21710 32133 709297 +;;;;;; 619000)) ;;; Generated autoloads from play/tetris.el (push (purecopy '(tetris 2 1)) package--builtin-versions) @@ -26910,8 +26912,8 @@ tetris-mode keybindings: ;;;*** -;;;### (autoloads nil "tex-mode" "textmodes/tex-mode.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "tex-mode" "textmodes/tex-mode.el" (21710 32133 +;;;;;; 804298 113000)) ;;; Generated autoloads from textmodes/tex-mode.el (defvar tex-shell-file-name nil "\ @@ -27212,8 +27214,8 @@ Major mode to edit DocTeX files. ;;;*** -;;;### (autoloads nil "texinfmt" "textmodes/texinfmt.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "texinfmt" "textmodes/texinfmt.el" (21710 32133 +;;;;;; 805298 118000)) ;;; Generated autoloads from textmodes/texinfmt.el (autoload 'texinfo-format-buffer "texinfmt" "\ @@ -27252,8 +27254,8 @@ if large. You can use `Info-split' to do this manually. ;;;*** -;;;### (autoloads nil "texinfo" "textmodes/texinfo.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "texinfo" "textmodes/texinfo.el" (21710 32133 +;;;;;; 805298 118000)) ;;; Generated autoloads from textmodes/texinfo.el (defvar texinfo-open-quote (purecopy "``") "\ @@ -27337,8 +27339,8 @@ value of `texinfo-mode-hook'. ;;;*** -;;;### (autoloads nil "thai-util" "language/thai-util.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "thai-util" "language/thai-util.el" (21710 +;;;;;; 32133 581296 953000)) ;;; Generated autoloads from language/thai-util.el (autoload 'thai-compose-region "thai-util" "\ @@ -27365,8 +27367,8 @@ Compose Thai characters in the current buffer. ;;;*** -;;;### (autoloads nil "thingatpt" "thingatpt.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "thingatpt" "thingatpt.el" (21710 32133 806298 +;;;;;; 123000)) ;;; Generated autoloads from thingatpt.el (autoload 'forward-thing "thingatpt" "\ @@ -27430,7 +27432,7 @@ Return the Lisp list at point, or nil if none is found. ;;;*** -;;;### (autoloads nil "thumbs" "thumbs.el" (21670 32331 885635 586000)) +;;;### (autoloads nil "thumbs" "thumbs.el" (21710 32133 807298 128000)) ;;; Generated autoloads from thumbs.el (autoload 'thumbs-find-thumb "thumbs" "\ @@ -27464,8 +27466,8 @@ In dired, call the setroot program on the image at point. ;;;*** -;;;### (autoloads nil "tibet-util" "language/tibet-util.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "tibet-util" "language/tibet-util.el" (21710 +;;;;;; 32133 583296 964000)) ;;; Generated autoloads from language/tibet-util.el (autoload 'tibetan-char-p "tibet-util" "\ @@ -27538,8 +27540,8 @@ See also docstring of the function tibetan-compose-region. ;;;*** -;;;### (autoloads nil "tildify" "textmodes/tildify.el" (21695 35516 -;;;;;; 595262 313000)) +;;;### (autoloads nil "tildify" "textmodes/tildify.el" (21710 32133 +;;;;;; 806298 123000)) ;;; Generated autoloads from textmodes/tildify.el (push (purecopy '(tildify 4 6 1)) package--builtin-versions) @@ -27605,7 +27607,7 @@ variable will be set to the representation. ;;;*** -;;;### (autoloads nil "time" "time.el" (21670 32331 885635 586000)) +;;;### (autoloads nil "time" "time.el" (21710 32133 807298 128000)) ;;; Generated autoloads from time.el (defvar display-time-day-and-date nil "\ @@ -27667,8 +27669,8 @@ Return a string giving the duration of the Emacs initialization. ;;;*** -;;;### (autoloads nil "time-date" "calendar/time-date.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "time-date" "calendar/time-date.el" (21710 +;;;;;; 32133 405296 38000)) ;;; Generated autoloads from calendar/time-date.el (autoload 'date-to-time "time-date" "\ @@ -27771,8 +27773,8 @@ Convert the time interval in seconds to a short string. ;;;*** -;;;### (autoloads nil "time-stamp" "time-stamp.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "time-stamp" "time-stamp.el" (21710 32133 807298 +;;;;;; 128000)) ;;; Generated autoloads from time-stamp.el (put 'time-stamp-format 'safe-local-variable 'stringp) (put 'time-stamp-time-zone 'safe-local-variable 'string-or-null-p) @@ -27812,8 +27814,8 @@ With ARG, turn time stamping on if and only if arg is positive. ;;;*** -;;;### (autoloads nil "timeclock" "calendar/timeclock.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "timeclock" "calendar/timeclock.el" (21710 +;;;;;; 32133 406296 44000)) ;;; Generated autoloads from calendar/timeclock.el (push (purecopy '(timeclock 2 6 1)) package--builtin-versions) @@ -27923,7 +27925,7 @@ relative only to the time worked today, and not to past time. ;;;*** ;;;### (autoloads nil "titdic-cnv" "international/titdic-cnv.el" -;;;;;; (21670 32331 385639 720000)) +;;;;;; (21710 32133 571296 901000)) ;;; Generated autoloads from international/titdic-cnv.el (autoload 'titdic-convert "titdic-cnv" "\ @@ -27945,7 +27947,7 @@ To get complete usage, invoke \"emacs -batch -f batch-titdic-convert -h\". ;;;*** -;;;### (autoloads nil "tmm" "tmm.el" (21670 32331 885635 586000)) +;;;### (autoloads nil "tmm" "tmm.el" (21710 32133 807298 128000)) ;;; Generated autoloads from tmm.el (define-key global-map "\M-`" 'tmm-menubar) (define-key global-map [menu-bar mouse-1] 'tmm-menubar-mouse) @@ -27987,8 +27989,8 @@ Its value should be an event that has a binding in MENU. ;;;*** -;;;### (autoloads nil "todo-mode" "calendar/todo-mode.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "todo-mode" "calendar/todo-mode.el" (21710 +;;;;;; 32133 407296 49000)) ;;; Generated autoloads from calendar/todo-mode.el (autoload 'todo-show "todo-mode" "\ @@ -28055,8 +28057,8 @@ Mode for displaying and reprioritizing top priority Todo. ;;;*** -;;;### (autoloads nil "tool-bar" "tool-bar.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "tool-bar" "tool-bar.el" (21710 32133 808298 +;;;;;; 133000)) ;;; Generated autoloads from tool-bar.el (autoload 'toggle-tool-bar-mode-from-frame "tool-bar" "\ @@ -28126,8 +28128,8 @@ holds a keymap. ;;;*** -;;;### (autoloads nil "tq" "emacs-lisp/tq.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "tq" "emacs-lisp/tq.el" (21710 32133 468296 +;;;;;; 366000)) ;;; Generated autoloads from emacs-lisp/tq.el (autoload 'tq-create "tq" "\ @@ -28140,8 +28142,8 @@ to a tcp server on another machine. ;;;*** -;;;### (autoloads nil "trace" "emacs-lisp/trace.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "trace" "emacs-lisp/trace.el" (21710 32133 +;;;;;; 468296 366000)) ;;; Generated autoloads from emacs-lisp/trace.el (defvar trace-buffer "*trace-output*" "\ @@ -28186,8 +28188,8 @@ the output buffer or changing the window configuration. ;;;*** -;;;### (autoloads nil "tramp" "net/tramp.el" (21704 50495 455324 -;;;;;; 752000)) +;;;### (autoloads nil "tramp" "net/tramp.el" (21710 32133 644297 +;;;;;; 281000)) ;;; Generated autoloads from net/tramp.el (defvar tramp-mode t "\ @@ -28302,8 +28304,8 @@ Discard Tramp from loading remote files. ;;;*** -;;;### (autoloads nil "tramp-ftp" "net/tramp-ftp.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "tramp-ftp" "net/tramp-ftp.el" (21710 32133 +;;;;;; 640297 260000)) ;;; Generated autoloads from net/tramp-ftp.el (autoload 'tramp-ftp-enable-ange-ftp "tramp-ftp" "\ @@ -28313,8 +28315,8 @@ Discard Tramp from loading remote files. ;;;*** -;;;### (autoloads nil "tutorial" "tutorial.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "tutorial" "tutorial.el" (21710 32133 808298 +;;;;;; 133000)) ;;; Generated autoloads from tutorial.el (autoload 'help-with-tutorial "tutorial" "\ @@ -28338,8 +28340,8 @@ resumed later. ;;;*** -;;;### (autoloads nil "tv-util" "language/tv-util.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "tv-util" "language/tv-util.el" (21710 32133 +;;;;;; 583296 964000)) ;;; Generated autoloads from language/tv-util.el (autoload 'tai-viet-composition-function "tv-util" "\ @@ -28349,8 +28351,8 @@ resumed later. ;;;*** -;;;### (autoloads nil "two-column" "textmodes/two-column.el" (21670 -;;;;;; 32331 885635 586000)) +;;;### (autoloads nil "two-column" "textmodes/two-column.el" (21710 +;;;;;; 32133 806298 123000)) ;;; Generated autoloads from textmodes/two-column.el (autoload '2C-command "two-column" () t 'keymap) (global-set-key "\C-x6" '2C-command) @@ -28397,8 +28399,8 @@ First column's text sSs Second column's text ;;;*** -;;;### (autoloads nil "type-break" "type-break.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "type-break" "type-break.el" (21710 32133 809298 +;;;;;; 139000)) ;;; Generated autoloads from type-break.el (defvar type-break-mode nil "\ @@ -28530,7 +28532,7 @@ FRAC should be the inverse of the fractional value; for example, a value of ;;;*** -;;;### (autoloads nil "uce" "mail/uce.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "uce" "mail/uce.el" (21710 32133 608297 94000)) ;;; Generated autoloads from mail/uce.el (autoload 'uce-reply-to-uce "uce" "\ @@ -28544,7 +28546,7 @@ You might need to set `uce-mail-reader' before using this. ;;;*** ;;;### (autoloads nil "ucs-normalize" "international/ucs-normalize.el" -;;;;;; (21670 32331 385639 720000)) +;;;;;; (21710 32133 571296 901000)) ;;; Generated autoloads from international/ucs-normalize.el (autoload 'ucs-normalize-NFD-region "ucs-normalize" "\ @@ -28609,8 +28611,8 @@ Normalize the string STR by the Unicode NFC and Mac OS's HFS Plus. ;;;*** -;;;### (autoloads nil "underline" "textmodes/underline.el" (21670 -;;;;;; 32331 885635 586000)) +;;;### (autoloads nil "underline" "textmodes/underline.el" (21710 +;;;;;; 32133 806298 123000)) ;;; Generated autoloads from textmodes/underline.el (autoload 'underline-region "underline" "\ @@ -28630,8 +28632,8 @@ which specify the range to operate on. ;;;*** -;;;### (autoloads nil "unrmail" "mail/unrmail.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "unrmail" "mail/unrmail.el" (21710 32133 608297 +;;;;;; 94000)) ;;; Generated autoloads from mail/unrmail.el (autoload 'batch-unrmail "unrmail" "\ @@ -28651,8 +28653,8 @@ The variable `unrmail-mbox-format' controls which mbox format to use. ;;;*** -;;;### (autoloads nil "unsafep" "emacs-lisp/unsafep.el" (21670 32330 -;;;;;; 885624 725000)) +;;;### (autoloads nil "unsafep" "emacs-lisp/unsafep.el" (21710 32133 +;;;;;; 468296 366000)) ;;; Generated autoloads from emacs-lisp/unsafep.el (autoload 'unsafep "unsafep" "\ @@ -28664,7 +28666,7 @@ UNSAFEP-VARS is a list of symbols with local bindings. ;;;*** -;;;### (autoloads nil "url" "url/url.el" (21670 32331 885635 586000)) +;;;### (autoloads nil "url" "url/url.el" (21710 32133 814298 165000)) ;;; Generated autoloads from url/url.el (autoload 'url-retrieve "url" "\ @@ -28711,8 +28713,8 @@ no further processing). URL is either a string or a parsed URL. ;;;*** -;;;### (autoloads nil "url-auth" "url/url-auth.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "url-auth" "url/url-auth.el" (21710 32133 810298 +;;;;;; 144000)) ;;; Generated autoloads from url/url-auth.el (autoload 'url-get-authentication "url-auth" "\ @@ -28753,8 +28755,8 @@ RATING a rating between 1 and 10 of the strength of the authentication. ;;;*** -;;;### (autoloads nil "url-cache" "url/url-cache.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "url-cache" "url/url-cache.el" (21710 32133 +;;;;;; 810298 144000)) ;;; Generated autoloads from url/url-cache.el (autoload 'url-store-in-cache "url-cache" "\ @@ -28775,8 +28777,8 @@ Extract FNAM from the local disk cache. ;;;*** -;;;### (autoloads nil "url-cid" "url/url-cid.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "url-cid" "url/url-cid.el" (21710 32133 810298 +;;;;;; 144000)) ;;; Generated autoloads from url/url-cid.el (autoload 'url-cid "url-cid" "\ @@ -28786,8 +28788,8 @@ Extract FNAM from the local disk cache. ;;;*** -;;;### (autoloads nil "url-dav" "url/url-dav.el" (21696 56380 925320 -;;;;;; 624000)) +;;;### (autoloads nil "url-dav" "url/url-dav.el" (21710 32133 811298 +;;;;;; 149000)) ;;; Generated autoloads from url/url-dav.el (autoload 'url-dav-supported-p "url-dav" "\ @@ -28821,8 +28823,8 @@ added to this list, so most requests can just pass in nil. ;;;*** -;;;### (autoloads nil "url-file" "url/url-file.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "url-file" "url/url-file.el" (21710 32133 811298 +;;;;;; 149000)) ;;; Generated autoloads from url/url-file.el (autoload 'url-file "url-file" "\ @@ -28832,8 +28834,8 @@ Handle file: and ftp: URLs. ;;;*** -;;;### (autoloads nil "url-gw" "url/url-gw.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "url-gw" "url/url-gw.el" (21710 32133 811298 +;;;;;; 149000)) ;;; Generated autoloads from url/url-gw.el (autoload 'url-gateway-nslookup-host "url-gw" "\ @@ -28854,8 +28856,8 @@ overriding the value of `url-gateway-method'. ;;;*** -;;;### (autoloads nil "url-handlers" "url/url-handlers.el" (21670 -;;;;;; 32331 885635 586000)) +;;;### (autoloads nil "url-handlers" "url/url-handlers.el" (21710 +;;;;;; 32133 811298 149000)) ;;; Generated autoloads from url/url-handlers.el (defvar url-handler-mode nil "\ @@ -28909,8 +28911,8 @@ accessible. ;;;*** -;;;### (autoloads nil "url-http" "url/url-http.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "url-http" "url/url-http.el" (21710 32133 812298 +;;;;;; 154000)) ;;; Generated autoloads from url/url-http.el (autoload 'url-default-expander "url-expand") @@ -28922,8 +28924,8 @@ accessible. ;;;*** -;;;### (autoloads nil "url-irc" "url/url-irc.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "url-irc" "url/url-irc.el" (21710 32133 812298 +;;;;;; 154000)) ;;; Generated autoloads from url/url-irc.el (autoload 'url-irc "url-irc" "\ @@ -28933,8 +28935,8 @@ accessible. ;;;*** -;;;### (autoloads nil "url-ldap" "url/url-ldap.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "url-ldap" "url/url-ldap.el" (21710 32133 812298 +;;;;;; 154000)) ;;; Generated autoloads from url/url-ldap.el (autoload 'url-ldap "url-ldap" "\ @@ -28947,8 +28949,8 @@ URL can be a URL string, or a URL vector of the type returned by ;;;*** -;;;### (autoloads nil "url-mailto" "url/url-mailto.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "url-mailto" "url/url-mailto.el" (21710 32133 +;;;;;; 812298 154000)) ;;; Generated autoloads from url/url-mailto.el (autoload 'url-mail "url-mailto" "\ @@ -28963,8 +28965,8 @@ Handle the mailto: URL syntax. ;;;*** -;;;### (autoloads nil "url-misc" "url/url-misc.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "url-misc" "url/url-misc.el" (21710 32133 813298 +;;;;;; 160000)) ;;; Generated autoloads from url/url-misc.el (autoload 'url-man "url-misc" "\ @@ -28995,8 +28997,8 @@ Fetch a data URL (RFC 2397). ;;;*** -;;;### (autoloads nil "url-news" "url/url-news.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "url-news" "url/url-news.el" (21710 32133 813298 +;;;;;; 160000)) ;;; Generated autoloads from url/url-news.el (autoload 'url-news "url-news" "\ @@ -29011,8 +29013,8 @@ Fetch a data URL (RFC 2397). ;;;*** -;;;### (autoloads nil "url-ns" "url/url-ns.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "url-ns" "url/url-ns.el" (21710 32133 813298 +;;;;;; 160000)) ;;; Generated autoloads from url/url-ns.el (autoload 'isPlainHostName "url-ns" "\ @@ -29052,8 +29054,8 @@ Fetch a data URL (RFC 2397). ;;;*** -;;;### (autoloads nil "url-parse" "url/url-parse.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "url-parse" "url/url-parse.el" (21710 32133 +;;;;;; 813298 160000)) ;;; Generated autoloads from url/url-parse.el (autoload 'url-recreate-url "url-parse" "\ @@ -29104,8 +29106,8 @@ parses to ;;;*** -;;;### (autoloads nil "url-privacy" "url/url-privacy.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "url-privacy" "url/url-privacy.el" (21710 32133 +;;;;;; 813298 160000)) ;;; Generated autoloads from url/url-privacy.el (autoload 'url-setup-privacy-info "url-privacy" "\ @@ -29115,8 +29117,8 @@ Setup variables that expose info about you and your system. ;;;*** -;;;### (autoloads nil "url-queue" "url/url-queue.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "url-queue" "url/url-queue.el" (21710 32133 +;;;;;; 813298 160000)) ;;; Generated autoloads from url/url-queue.el (autoload 'url-queue-retrieve "url-queue" "\ @@ -29130,8 +29132,8 @@ The variable `url-queue-timeout' sets a timeout. ;;;*** -;;;### (autoloads nil "url-tramp" "url/url-tramp.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "url-tramp" "url/url-tramp.el" (21710 32133 +;;;;;; 813298 160000)) ;;; Generated autoloads from url/url-tramp.el (defvar url-tramp-protocols '("ftp" "ssh" "scp" "rsync" "telnet") "\ @@ -29149,8 +29151,8 @@ would have been passed to OPERATION. ;;;*** -;;;### (autoloads nil "url-util" "url/url-util.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "url-util" "url/url-util.el" (21710 32133 813298 +;;;;;; 160000)) ;;; Generated autoloads from url/url-util.el (defvar url-debug nil "\ @@ -29318,8 +29320,8 @@ This uses `url-current-object', set locally to the buffer. ;;;*** -;;;### (autoloads nil "userlock" "userlock.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "userlock" "userlock.el" (21710 32133 814298 +;;;;;; 165000)) ;;; Generated autoloads from userlock.el (autoload 'ask-user-about-lock "userlock" "\ @@ -29347,8 +29349,8 @@ The buffer in question is current when this function is called. ;;;*** -;;;### (autoloads nil "utf-7" "international/utf-7.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "utf-7" "international/utf-7.el" (21710 32133 +;;;;;; 571296 901000)) ;;; Generated autoloads from international/utf-7.el (autoload 'utf-7-post-read-conversion "utf-7" "\ @@ -29373,7 +29375,7 @@ The buffer in question is current when this function is called. ;;;*** -;;;### (autoloads nil "utf7" "gnus/utf7.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "utf7" "gnus/utf7.el" (21710 32133 552296 802000)) ;;; Generated autoloads from gnus/utf7.el (autoload 'utf7-encode "utf7" "\ @@ -29383,8 +29385,8 @@ Encode UTF-7 STRING. Use IMAP modification if FOR-IMAP is non-nil. ;;;*** -;;;### (autoloads nil "uudecode" "mail/uudecode.el" (21670 32331 -;;;;;; 385639 720000)) +;;;### (autoloads nil "uudecode" "mail/uudecode.el" (21710 32133 +;;;;;; 608297 94000)) ;;; Generated autoloads from mail/uudecode.el (autoload 'uudecode-decode-region-external "uudecode" "\ @@ -29408,7 +29410,7 @@ If FILE-NAME is non-nil, save the result to FILE-NAME. ;;;*** -;;;### (autoloads nil "vc" "vc/vc.el" (21670 32331 885635 586000)) +;;;### (autoloads nil "vc" "vc/vc.el" (21710 32133 828298 237000)) ;;; Generated autoloads from vc/vc.el (defvar vc-checkout-hook nil "\ @@ -29695,8 +29697,8 @@ Return the branch part of a revision number REV. ;;;*** -;;;### (autoloads nil "vc-annotate" "vc/vc-annotate.el" (21670 32331 -;;;;;; 885635 586000)) +;;;### (autoloads nil "vc-annotate" "vc/vc-annotate.el" (21710 32133 +;;;;;; 823298 212000)) ;;; Generated autoloads from vc/vc-annotate.el (autoload 'vc-annotate "vc-annotate" "\ @@ -29735,8 +29737,8 @@ should be applied to the background or to the foreground. ;;;*** -;;;### (autoloads nil "vc-bzr" "vc/vc-bzr.el" (21691 38459 74604 -;;;;;; 918000)) +;;;### (autoloads nil "vc-bzr" "vc/vc-bzr.el" (21710 32133 824298 +;;;;;; 217000)) ;;; Generated autoloads from vc/vc-bzr.el (defconst vc-bzr-admin-dirname ".bzr" "\ @@ -29752,8 +29754,8 @@ Name of the format file in a .bzr directory.") ;;;*** -;;;### (autoloads nil "vc-cvs" "vc/vc-cvs.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "vc-cvs" "vc/vc-cvs.el" (21710 32133 824298 +;;;;;; 217000)) ;;; Generated autoloads from vc/vc-cvs.el (defun vc-cvs-registered (f) "Return non-nil if file F is registered with CVS." @@ -29764,8 +29766,8 @@ Name of the format file in a .bzr directory.") ;;;*** -;;;### (autoloads nil "vc-dir" "vc/vc-dir.el" (21694 14651 747488 -;;;;;; 989000)) +;;;### (autoloads nil "vc-dir" "vc/vc-dir.el" (21710 32133 825298 +;;;;;; 222000)) ;;; Generated autoloads from vc/vc-dir.el (autoload 'vc-dir "vc-dir" "\ @@ -29789,8 +29791,8 @@ These are the commands available for use in the file status buffer: ;;;*** -;;;### (autoloads nil "vc-dispatcher" "vc/vc-dispatcher.el" (21670 -;;;;;; 32331 885635 586000)) +;;;### (autoloads nil "vc-dispatcher" "vc/vc-dispatcher.el" (21710 +;;;;;; 32133 825298 222000)) ;;; Generated autoloads from vc/vc-dispatcher.el (autoload 'vc-do-command "vc-dispatcher" "\ @@ -29813,8 +29815,8 @@ case, and the process object in the asynchronous case. ;;;*** -;;;### (autoloads nil "vc-git" "vc/vc-git.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "vc-git" "vc/vc-git.el" (21710 32133 825298 +;;;;;; 222000)) ;;; Generated autoloads from vc/vc-git.el (defun vc-git-registered (file) "Return non-nil if FILE is registered with git." @@ -29825,7 +29827,7 @@ case, and the process object in the asynchronous case. ;;;*** -;;;### (autoloads nil "vc-hg" "vc/vc-hg.el" (21670 32331 885635 586000)) +;;;### (autoloads nil "vc-hg" "vc/vc-hg.el" (21710 32133 826298 227000)) ;;; Generated autoloads from vc/vc-hg.el (defun vc-hg-registered (file) "Return non-nil if FILE is registered with hg." @@ -29836,8 +29838,8 @@ case, and the process object in the asynchronous case. ;;;*** -;;;### (autoloads nil "vc-mtn" "vc/vc-mtn.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "vc-mtn" "vc/vc-mtn.el" (21710 32133 826298 +;;;;;; 227000)) ;;; Generated autoloads from vc/vc-mtn.el (defconst vc-mtn-admin-dir "_MTN" "\ @@ -29853,8 +29855,8 @@ Name of the monotone directory's format file.") ;;;*** -;;;### (autoloads nil "vc-rcs" "vc/vc-rcs.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "vc-rcs" "vc/vc-rcs.el" (21710 32133 827298 +;;;;;; 232000)) ;;; Generated autoloads from vc/vc-rcs.el (defvar vc-rcs-master-templates (purecopy '("%sRCS/%s,v" "%s%s,v" "%sRCS/%s")) "\ @@ -29867,8 +29869,8 @@ For a description of possible values, see `vc-check-master-templates'.") ;;;*** -;;;### (autoloads nil "vc-sccs" "vc/vc-sccs.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "vc-sccs" "vc/vc-sccs.el" (21710 32133 827298 +;;;;;; 232000)) ;;; Generated autoloads from vc/vc-sccs.el (defvar vc-sccs-master-templates (purecopy '("%sSCCS/s.%s" "%ss.%s" vc-sccs-search-project-dir)) "\ @@ -29886,8 +29888,8 @@ find any project directory." (let ((project-dir (getenv "PROJECTDIR")) dirs dir) ;;;*** -;;;### (autoloads nil "vc-src" "vc/vc-src.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "vc-src" "vc/vc-src.el" (21710 32133 827298 +;;;;;; 232000)) ;;; Generated autoloads from vc/vc-src.el (defvar vc-src-master-templates (purecopy '("%s.src/%s,v")) "\ @@ -29900,8 +29902,8 @@ For a description of possible values, see `vc-check-master-templates'.") ;;;*** -;;;### (autoloads nil "vc-svn" "vc/vc-svn.el" (21688 62278 418203 -;;;;;; 119000)) +;;;### (autoloads nil "vc-svn" "vc/vc-svn.el" (21710 32133 827298 +;;;;;; 232000)) ;;; Generated autoloads from vc/vc-svn.el (defun vc-svn-registered (f) (let ((admin-dir (cond ((and (eq system-type 'windows-nt) @@ -29914,8 +29916,8 @@ For a description of possible values, see `vc-check-master-templates'.") ;;;*** -;;;### (autoloads nil "vera-mode" "progmodes/vera-mode.el" (21670 -;;;;;; 32331 885635 586000)) +;;;### (autoloads nil "vera-mode" "progmodes/vera-mode.el" (21710 +;;;;;; 32133 757297 868000)) ;;; Generated autoloads from progmodes/vera-mode.el (push (purecopy '(vera-mode 2 28)) package--builtin-versions) (add-to-list 'auto-mode-alist (cons (purecopy "\\.vr[hi]?\\'") 'vera-mode)) @@ -29974,7 +29976,7 @@ Key bindings: ;;;*** ;;;### (autoloads nil "verilog-mode" "progmodes/verilog-mode.el" -;;;;;; (21670 32331 885635 586000)) +;;;;;; (21710 32133 761297 889000)) ;;; Generated autoloads from progmodes/verilog-mode.el (autoload 'verilog-mode "verilog-mode" "\ @@ -30113,8 +30115,8 @@ Key bindings specific to `verilog-mode-map' are: ;;;*** -;;;### (autoloads nil "vhdl-mode" "progmodes/vhdl-mode.el" (21670 -;;;;;; 32331 885635 586000)) +;;;### (autoloads nil "vhdl-mode" "progmodes/vhdl-mode.el" (21710 +;;;;;; 32133 765297 910000)) ;;; Generated autoloads from progmodes/vhdl-mode.el (autoload 'vhdl-mode "vhdl-mode" "\ @@ -30668,8 +30670,8 @@ Key bindings: ;;;*** -;;;### (autoloads nil "viet-util" "language/viet-util.el" (21670 -;;;;;; 32331 385639 720000)) +;;;### (autoloads nil "viet-util" "language/viet-util.el" (21710 +;;;;;; 32133 583296 964000)) ;;; Generated autoloads from language/viet-util.el (autoload 'viet-encode-viscii-char "viet-util" "\ @@ -30713,7 +30715,7 @@ Convert Vietnamese characters of the current buffer to `VIQR' mnemonics. ;;;*** -;;;### (autoloads nil "view" "view.el" (21670 32331 885635 586000)) +;;;### (autoloads nil "view" "view.el" (21710 32133 829298 243000)) ;;; Generated autoloads from view.el (defvar view-remove-frame-by-deleting t "\ @@ -30969,8 +30971,8 @@ Exit View mode and make the current buffer editable. ;;;*** -;;;### (autoloads nil "viper" "emulation/viper.el" (21670 32330 885624 -;;;;;; 725000)) +;;;### (autoloads nil "viper" "emulation/viper.el" (21710 32133 475296 +;;;;;; 402000)) ;;; Generated autoloads from emulation/viper.el (push (purecopy '(viper 3 14 1)) package--builtin-versions) @@ -30987,8 +30989,8 @@ Turn on Viper emulation of Vi in Emacs. See Info node `(viper)Top'. ;;;*** -;;;### (autoloads nil "warnings" "emacs-lisp/warnings.el" (21670 -;;;;;; 32330 885624 725000)) +;;;### (autoloads nil "warnings" "emacs-lisp/warnings.el" (21710 +;;;;;; 32133 468296 366000)) ;;; Generated autoloads from emacs-lisp/warnings.el (defvar warning-prefix-function nil "\ @@ -31078,7 +31080,7 @@ this is equivalent to `display-warning', using ;;;*** -;;;### (autoloads nil "wdired" "wdired.el" (21670 32331 885635 586000)) +;;;### (autoloads nil "wdired" "wdired.el" (21710 32133 830298 248000)) ;;; Generated autoloads from wdired.el (push (purecopy '(wdired 2 0)) package--builtin-versions) @@ -31096,8 +31098,8 @@ See `wdired-mode'. ;;;*** -;;;### (autoloads nil "webjump" "net/webjump.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "webjump" "net/webjump.el" (21710 32133 644297 +;;;;;; 281000)) ;;; Generated autoloads from net/webjump.el (autoload 'webjump "webjump" "\ @@ -31113,8 +31115,8 @@ Please submit bug reports and other feedback to the author, Neil W. Van Dyke ;;;*** -;;;### (autoloads nil "which-func" "progmodes/which-func.el" (21670 -;;;;;; 32331 885635 586000)) +;;;### (autoloads nil "which-func" "progmodes/which-func.el" (21710 +;;;;;; 32133 765297 910000)) ;;; Generated autoloads from progmodes/which-func.el (put 'which-func-format 'risky-local-variable t) (put 'which-func-current 'risky-local-variable t) @@ -31144,8 +31146,8 @@ in certain major modes. ;;;*** -;;;### (autoloads nil "whitespace" "whitespace.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "whitespace" "whitespace.el" (21710 32133 830298 +;;;;;; 248000)) ;;; Generated autoloads from whitespace.el (push (purecopy '(whitespace 13 2 2)) package--builtin-versions) @@ -31513,8 +31515,8 @@ cleaning up these problems. ;;;*** -;;;### (autoloads nil "wid-browse" "wid-browse.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "wid-browse" "wid-browse.el" (21710 32133 830298 +;;;;;; 248000)) ;;; Generated autoloads from wid-browse.el (autoload 'widget-browse-at "wid-browse" "\ @@ -31542,8 +31544,8 @@ if ARG is omitted or nil. ;;;*** -;;;### (autoloads nil "wid-edit" "wid-edit.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "wid-edit" "wid-edit.el" (21710 32133 831298 +;;;;;; 253000)) ;;; Generated autoloads from wid-edit.el (autoload 'widgetp "wid-edit" "\ @@ -31585,8 +31587,8 @@ Setup current buffer so editing string widgets works. ;;;*** -;;;### (autoloads nil "windmove" "windmove.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "windmove" "windmove.el" (21710 32133 832298 +;;;;;; 258000)) ;;; Generated autoloads from windmove.el (autoload 'windmove-left "windmove" "\ @@ -31638,7 +31640,7 @@ Default MODIFIER is 'shift. ;;;*** -;;;### (autoloads nil "winner" "winner.el" (21670 32331 885635 586000)) +;;;### (autoloads nil "winner" "winner.el" (21710 32133 834298 269000)) ;;; Generated autoloads from winner.el (defvar winner-mode nil "\ @@ -31661,7 +31663,7 @@ the mode if ARG is omitted or nil, and toggle it if ARG is `toggle'. ;;;*** -;;;### (autoloads nil "woman" "woman.el" (21670 32331 885635 586000)) +;;;### (autoloads nil "woman" "woman.el" (21710 32133 835298 274000)) ;;; Generated autoloads from woman.el (push (purecopy '(woman 0 551)) package--builtin-versions) @@ -31710,7 +31712,7 @@ Default bookmark handler for Woman buffers. ;;;*** -;;;### (autoloads nil "xml" "xml.el" (21670 32331 885635 586000)) +;;;### (autoloads nil "xml" "xml.el" (21710 32133 836298 279000)) ;;; Generated autoloads from xml.el (autoload 'xml-parse-file "xml" "\ @@ -31766,8 +31768,8 @@ Both features can be combined by providing a cons cell ;;;*** -;;;### (autoloads nil "xmltok" "nxml/xmltok.el" (21670 32331 385639 -;;;;;; 720000)) +;;;### (autoloads nil "xmltok" "nxml/xmltok.el" (21710 32133 649297 +;;;;;; 307000)) ;;; Generated autoloads from nxml/xmltok.el (autoload 'xmltok-get-declared-encoding-position "xmltok" "\ @@ -31785,8 +31787,8 @@ If LIMIT is non-nil, then do not consider characters beyond LIMIT. ;;;*** -;;;### (autoloads nil "xref" "progmodes/xref.el" (21696 56380 925320 -;;;;;; 624000)) +;;;### (autoloads nil "xref" "progmodes/xref.el" (21710 32133 765297 +;;;;;; 910000)) ;;; Generated autoloads from progmodes/xref.el (autoload 'xref-pop-marker-stack "xref" "\ @@ -31835,8 +31837,8 @@ The argument has the same meaning as in `apropos'. ;;;*** -;;;### (autoloads nil "xt-mouse" "xt-mouse.el" (21670 32331 885635 -;;;;;; 586000)) +;;;### (autoloads nil "xt-mouse" "xt-mouse.el" (21710 32133 836298 +;;;;;; 279000)) ;;; Generated autoloads from xt-mouse.el (defvar xterm-mouse-mode nil "\ @@ -31865,19 +31867,7 @@ down the SHIFT key while pressing the mouse button. ;;;*** -;;;### (autoloads nil "xwidget" "xwidget.el" (21710 2878 794621 967000)) -;;; Generated autoloads from xwidget.el - -(autoload 'xwidget-webkit-browse-url "xwidget" "\ -Ask xwidget-webkit to browse URL. -NEW-SESSION specifies whether to create a new xwidget-webkit session. URL -defaults to the string looking like a url around the cursor position. - -\(fn URL &optional NEW-SESSION)" t nil) - -;;;*** - -;;;### (autoloads nil "yenc" "gnus/yenc.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "yenc" "gnus/yenc.el" (21710 32133 552296 802000)) ;;; Generated autoloads from gnus/yenc.el (autoload 'yenc-decode-region "yenc" "\ @@ -31892,7 +31882,7 @@ Extract file name from an yenc header. ;;;*** -;;;### (autoloads nil "zone" "play/zone.el" (21670 32331 385639 720000)) +;;;### (autoloads nil "zone" "play/zone.el" (21710 32133 709297 619000)) ;;; Generated autoloads from play/zone.el (autoload 'zone "zone" "\ @@ -31938,14 +31928,16 @@ Zone out, completely. ;;;;;; "cedet/semantic/analyze.el" "cedet/semantic/analyze/complete.el" ;;;;;; "cedet/semantic/analyze/debug.el" "cedet/semantic/analyze/fcn.el" ;;;;;; "cedet/semantic/analyze/refs.el" "cedet/semantic/bovine.el" -;;;;;; "cedet/semantic/bovine/c.el" "cedet/semantic/bovine/debug.el" -;;;;;; "cedet/semantic/bovine/el.el" "cedet/semantic/bovine/gcc.el" -;;;;;; "cedet/semantic/bovine/make.el" "cedet/semantic/bovine/scm.el" -;;;;;; "cedet/semantic/chart.el" "cedet/semantic/complete.el" "cedet/semantic/ctxt.el" -;;;;;; "cedet/semantic/db-debug.el" "cedet/semantic/db-ebrowse.el" -;;;;;; "cedet/semantic/db-el.el" "cedet/semantic/db-file.el" "cedet/semantic/db-find.el" -;;;;;; "cedet/semantic/db-global.el" "cedet/semantic/db-javascript.el" -;;;;;; "cedet/semantic/db-mode.el" "cedet/semantic/db-ref.el" "cedet/semantic/db-typecache.el" +;;;;;; "cedet/semantic/bovine/c-by.el" "cedet/semantic/bovine/c.el" +;;;;;; "cedet/semantic/bovine/debug.el" "cedet/semantic/bovine/el.el" +;;;;;; "cedet/semantic/bovine/gcc.el" "cedet/semantic/bovine/make-by.el" +;;;;;; "cedet/semantic/bovine/make.el" "cedet/semantic/bovine/scm-by.el" +;;;;;; "cedet/semantic/bovine/scm.el" "cedet/semantic/chart.el" +;;;;;; "cedet/semantic/complete.el" "cedet/semantic/ctxt.el" "cedet/semantic/db-debug.el" +;;;;;; "cedet/semantic/db-ebrowse.el" "cedet/semantic/db-el.el" +;;;;;; "cedet/semantic/db-file.el" "cedet/semantic/db-find.el" "cedet/semantic/db-global.el" +;;;;;; "cedet/semantic/db-javascript.el" "cedet/semantic/db-mode.el" +;;;;;; "cedet/semantic/db-ref.el" "cedet/semantic/db-typecache.el" ;;;;;; "cedet/semantic/db.el" "cedet/semantic/debug.el" "cedet/semantic/decorate.el" ;;;;;; "cedet/semantic/decorate/include.el" "cedet/semantic/decorate/mode.el" ;;;;;; "cedet/semantic/dep.el" "cedet/semantic/doc.el" "cedet/semantic/ede-grammar.el" @@ -31963,25 +31955,26 @@ Zone out, completely. ;;;;;; "cedet/semantic/tag.el" "cedet/semantic/texi.el" "cedet/semantic/util-modes.el" ;;;;;; "cedet/semantic/util.el" "cedet/semantic/wisent.el" "cedet/semantic/wisent/comp.el" ;;;;;; "cedet/semantic/wisent/java-tags.el" "cedet/semantic/wisent/javascript.el" -;;;;;; "cedet/semantic/wisent/python.el" "cedet/semantic/wisent/wisent.el" -;;;;;; "cedet/srecode/args.el" "cedet/srecode/compile.el" "cedet/srecode/cpp.el" -;;;;;; "cedet/srecode/ctxt.el" "cedet/srecode/dictionary.el" "cedet/srecode/document.el" +;;;;;; "cedet/semantic/wisent/javat-wy.el" "cedet/semantic/wisent/js-wy.el" +;;;;;; "cedet/semantic/wisent/python-wy.el" "cedet/semantic/wisent/python.el" +;;;;;; "cedet/semantic/wisent/wisent.el" "cedet/srecode/args.el" +;;;;;; "cedet/srecode/compile.el" "cedet/srecode/cpp.el" "cedet/srecode/ctxt.el" +;;;;;; "cedet/srecode/dictionary.el" "cedet/srecode/document.el" ;;;;;; "cedet/srecode/el.el" "cedet/srecode/expandproto.el" "cedet/srecode/extract.el" ;;;;;; "cedet/srecode/fields.el" "cedet/srecode/filters.el" "cedet/srecode/find.el" ;;;;;; "cedet/srecode/getset.el" "cedet/srecode/insert.el" "cedet/srecode/java.el" ;;;;;; "cedet/srecode/map.el" "cedet/srecode/mode.el" "cedet/srecode/semantic.el" -;;;;;; "cedet/srecode/srt.el" "cedet/srecode/table.el" "cedet/srecode/template.el" -;;;;;; "cedet/srecode/texi.el" "cus-dep.el" "dframe.el" "dired-aux.el" -;;;;;; "dired-x.el" "dom.el" "dos-fns.el" "dos-vars.el" "dos-w32.el" -;;;;;; "dynamic-setting.el" "emacs-lisp/avl-tree.el" "emacs-lisp/bindat.el" -;;;;;; "emacs-lisp/byte-opt.el" "emacs-lisp/cl-extra.el" "emacs-lisp/cl-generic.el" -;;;;;; "emacs-lisp/cl-macs.el" "emacs-lisp/cl-seq.el" "emacs-lisp/cl.el" -;;;;;; "emacs-lisp/eieio-base.el" "emacs-lisp/eieio-compat.el" "emacs-lisp/eieio-custom.el" -;;;;;; "emacs-lisp/eieio-datadebug.el" "emacs-lisp/eieio-opt.el" -;;;;;; "emacs-lisp/eieio-speedbar.el" "emacs-lisp/lisp-mnt.el" "emacs-lisp/package-x.el" -;;;;;; "emacs-lisp/smie.el" "emacs-lisp/subr-x.el" "emacs-lisp/tcover-ses.el" -;;;;;; "emacs-lisp/tcover-unsafep.el" "emacs-parallel/parallel-remote.el" -;;;;;; "emacs-parallel/parallel-xwidget.el" "emacs-parallel/parallel.el" +;;;;;; "cedet/srecode/srt-wy.el" "cedet/srecode/srt.el" "cedet/srecode/table.el" +;;;;;; "cedet/srecode/template.el" "cedet/srecode/texi.el" "cus-dep.el" +;;;;;; "dframe.el" "dired-aux.el" "dired-x.el" "dom.el" "dos-fns.el" +;;;;;; "dos-vars.el" "dos-w32.el" "dynamic-setting.el" "emacs-lisp/avl-tree.el" +;;;;;; "emacs-lisp/bindat.el" "emacs-lisp/byte-opt.el" "emacs-lisp/cl-extra.el" +;;;;;; "emacs-lisp/cl-generic.el" "emacs-lisp/cl-macs.el" "emacs-lisp/cl-seq.el" +;;;;;; "emacs-lisp/cl.el" "emacs-lisp/eieio-base.el" "emacs-lisp/eieio-compat.el" +;;;;;; "emacs-lisp/eieio-custom.el" "emacs-lisp/eieio-datadebug.el" +;;;;;; "emacs-lisp/eieio-opt.el" "emacs-lisp/eieio-speedbar.el" +;;;;;; "emacs-lisp/lisp-mnt.el" "emacs-lisp/package-x.el" "emacs-lisp/smie.el" +;;;;;; "emacs-lisp/subr-x.el" "emacs-lisp/tcover-ses.el" "emacs-lisp/tcover-unsafep.el" ;;;;;; "emulation/cua-gmrk.el" "emulation/edt-lk201.el" "emulation/edt-mapper.el" ;;;;;; "emulation/edt-pc.el" "emulation/edt-vt100.el" "emulation/viper-cmd.el" ;;;;;; "emulation/viper-ex.el" "emulation/viper-init.el" "emulation/viper-keym.el" @@ -32020,28 +32013,35 @@ Zone out, completely. ;;;;;; "gnus/spam-wash.el" "hex-util.el" "hfy-cmap.el" "ibuf-ext.el" ;;;;;; "international/cp51932.el" "international/eucjp-ms.el" "international/fontset.el" ;;;;;; "international/iso-ascii.el" "international/ja-dic-cnv.el" -;;;;;; "international/ja-dic-utl.el" "international/ogonek.el" "kermit.el" -;;;;;; "language/hanja-util.el" "language/thai-word.el" "ldefs-boot.el" -;;;;;; "leim/quail/arabic.el" "leim/quail/croatian.el" "leim/quail/cyril-jis.el" -;;;;;; "leim/quail/cyrillic.el" "leim/quail/czech.el" "leim/quail/ethiopic.el" -;;;;;; "leim/quail/georgian.el" "leim/quail/greek.el" "leim/quail/hanja-jis.el" -;;;;;; "leim/quail/hanja.el" "leim/quail/hanja3.el" "leim/quail/hebrew.el" -;;;;;; "leim/quail/indian.el" "leim/quail/ipa-praat.el" "leim/quail/ipa.el" -;;;;;; "leim/quail/japanese.el" "leim/quail/lao.el" "leim/quail/latin-alt.el" -;;;;;; "leim/quail/latin-ltx.el" "leim/quail/latin-post.el" "leim/quail/latin-pre.el" -;;;;;; "leim/quail/lrt.el" "leim/quail/persian.el" "leim/quail/py-punct.el" -;;;;;; "leim/quail/pypunct-b5.el" "leim/quail/rfc1345.el" "leim/quail/sgml-input.el" -;;;;;; "leim/quail/sisheng.el" "leim/quail/slovak.el" "leim/quail/symbol-ksc.el" -;;;;;; "leim/quail/thai.el" "leim/quail/tibetan.el" "leim/quail/viqr.el" -;;;;;; "leim/quail/vntelex.el" "leim/quail/vnvni.el" "leim/quail/welsh.el" -;;;;;; "loadup.el" "mail/blessmail.el" "mail/mailheader.el" "mail/mspools.el" -;;;;;; "mail/rfc2368.el" "mail/rfc822.el" "mail/rmail-spam-filter.el" -;;;;;; "mail/rmailedit.el" "mail/rmailkwd.el" "mail/rmailmm.el" -;;;;;; "mail/rmailmsc.el" "mail/rmailsort.el" "mail/rmailsum.el" -;;;;;; "mail/undigest.el" "mh-e/mh-acros.el" "mh-e/mh-alias.el" -;;;;;; "mh-e/mh-buffers.el" "mh-e/mh-compat.el" "mh-e/mh-funcs.el" -;;;;;; "mh-e/mh-gnus.el" "mh-e/mh-identity.el" "mh-e/mh-inc.el" -;;;;;; "mh-e/mh-junk.el" "mh-e/mh-letter.el" "mh-e/mh-limit.el" +;;;;;; "international/ja-dic-utl.el" "international/ogonek.el" "international/uni-bidi.el" +;;;;;; "international/uni-brackets.el" "international/uni-category.el" +;;;;;; "international/uni-combining.el" "international/uni-comment.el" +;;;;;; "international/uni-decimal.el" "international/uni-decomposition.el" +;;;;;; "international/uni-digit.el" "international/uni-lowercase.el" +;;;;;; "international/uni-mirrored.el" "international/uni-name.el" +;;;;;; "international/uni-numeric.el" "international/uni-old-name.el" +;;;;;; "international/uni-titlecase.el" "international/uni-uppercase.el" +;;;;;; "kermit.el" "language/hanja-util.el" "language/thai-word.el" +;;;;;; "ldefs-boot.el" "leim/ja-dic/ja-dic.el" "leim/quail/arabic.el" +;;;;;; "leim/quail/croatian.el" "leim/quail/cyril-jis.el" "leim/quail/cyrillic.el" +;;;;;; "leim/quail/czech.el" "leim/quail/ethiopic.el" "leim/quail/georgian.el" +;;;;;; "leim/quail/greek.el" "leim/quail/hanja-jis.el" "leim/quail/hanja.el" +;;;;;; "leim/quail/hanja3.el" "leim/quail/hebrew.el" "leim/quail/indian.el" +;;;;;; "leim/quail/ipa-praat.el" "leim/quail/ipa.el" "leim/quail/japanese.el" +;;;;;; "leim/quail/lao.el" "leim/quail/latin-alt.el" "leim/quail/latin-ltx.el" +;;;;;; "leim/quail/latin-post.el" "leim/quail/latin-pre.el" "leim/quail/lrt.el" +;;;;;; "leim/quail/persian.el" "leim/quail/py-punct.el" "leim/quail/pypunct-b5.el" +;;;;;; "leim/quail/rfc1345.el" "leim/quail/sgml-input.el" "leim/quail/sisheng.el" +;;;;;; "leim/quail/slovak.el" "leim/quail/symbol-ksc.el" "leim/quail/thai.el" +;;;;;; "leim/quail/tibetan.el" "leim/quail/viqr.el" "leim/quail/vntelex.el" +;;;;;; "leim/quail/vnvni.el" "leim/quail/welsh.el" "loadup.el" "mail/blessmail.el" +;;;;;; "mail/mailheader.el" "mail/mspools.el" "mail/rfc2368.el" +;;;;;; "mail/rfc822.el" "mail/rmail-spam-filter.el" "mail/rmailedit.el" +;;;;;; "mail/rmailkwd.el" "mail/rmailmm.el" "mail/rmailmsc.el" "mail/rmailsort.el" +;;;;;; "mail/rmailsum.el" "mail/undigest.el" "mh-e/mh-acros.el" +;;;;;; "mh-e/mh-alias.el" "mh-e/mh-buffers.el" "mh-e/mh-compat.el" +;;;;;; "mh-e/mh-funcs.el" "mh-e/mh-gnus.el" "mh-e/mh-identity.el" +;;;;;; "mh-e/mh-inc.el" "mh-e/mh-junk.el" "mh-e/mh-letter.el" "mh-e/mh-limit.el" ;;;;;; "mh-e/mh-loaddefs.el" "mh-e/mh-mime.el" "mh-e/mh-print.el" ;;;;;; "mh-e/mh-scan.el" "mh-e/mh-search.el" "mh-e/mh-seq.el" "mh-e/mh-show.el" ;;;;;; "mh-e/mh-speed.el" "mh-e/mh-thread.el" "mh-e/mh-tool-bar.el" @@ -32110,8 +32110,8 @@ Zone out, completely. ;;;;;; "vc/ediff-ptch.el" "vc/ediff-vers.el" "vc/ediff-wind.el" ;;;;;; "vc/pcvs-info.el" "vc/pcvs-parse.el" "vc/pcvs-util.el" "vc/vc-dav.el" ;;;;;; "vc/vc-filewise.el" "vcursor.el" "vt-control.el" "vt100-led.el" -;;;;;; "w32-fns.el" "w32-vars.el" "x-dnd.el") (21710 3276 42011 -;;;;;; 943000)) +;;;;;; "w32-fns.el" "w32-vars.el" "x-dnd.el") (21710 33148 175417 +;;;;;; 782000)) ;;;*** diff --git a/lisp/net/browse-url.el b/lisp/net/browse-url.el index 57c7b61..42fb954 100644 --- a/lisp/net/browse-url.el +++ b/lisp/net/browse-url.el @@ -668,7 +668,7 @@ regarding its parameter treatment." ;; functions allows them to be stand-alone commands, making it easier ;; to switch between browsers. -(defun browse-url-interactive-arg (prompt &optional default-url) +(defun browse-url-interactive-arg (prompt) "Read a URL from the minibuffer, prompting with PROMPT. If `transient-mark-mode' is non-nil and the mark is active, it defaults to the current region, else to the URL at or before @@ -685,8 +685,7 @@ for use in `interactive'." "[\t\r\f\n ]+" "" (buffer-substring-no-properties (region-beginning) (region-end)))) - (browse-url-url-at-point) - default-url)) + (browse-url-url-at-point))) (not (eq (null browse-url-new-window-flag) (null current-prefix-arg))))) @@ -796,13 +795,6 @@ narrowed." ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Browser-independent commands -(defun url-tidy (url) - "Tidy up URL as much as possible." - (if (equal 0 (string-match ".*://" url)) - url - (concat "http://" url) ;;TODO guess more url forms, like mailto - )) - ;; A generic command to call the current browse-url-browser-function ;;;###autoload @@ -815,7 +807,6 @@ first, if that exists." (interactive (browse-url-interactive-arg "URL: ")) (unless (called-interactively-p 'interactive) (setq args (or args (list browse-url-new-window-flag)))) - (setq url (url-tidy url)) (when (and url-handler-mode (not (file-name-absolute-p url))) (setq url (expand-file-name url))) (let ((process-environment (copy-sequence process-environment)) diff --git a/lisp/xwidget.el b/lisp/xwidget.el deleted file mode 100644 index de3235d..0000000 --- a/lisp/xwidget.el +++ /dev/null @@ -1,592 +0,0 @@ -;;; xwidget.el --- api functions for xwidgets -*- lexical-binding: t -*- -;; see xwidget.c for more api functions - - -;;; Commentary: -;; - -;;TODO this breaks compilation when we dont have xwidgets -;;(require 'xwidget-internal) - -;;TODO model after make-text-button instead! -;;; Code: - -(eval-when-compile (require 'cl)) -(require 'reporter) -(require 'bookmark) - -(defcustom xwidget-webkit-scroll-behaviour 'native - "Scroll behaviour of the webkit instance. -'native or 'image." - :group 'xwidgets) - -(defun xwidget-insert (pos type title width height) - "Insert an xwidget at POS. -given ID, TYPE, TITLE WIDTH and -HEIGHT in the current buffer. - -Return ID - -see `make-xwidget' for types suitable for TYPE." - (goto-char pos) - (let ((id (make-xwidget (point) (point) - type title width height nil))) - (put-text-property (point) (+ 1 (point)) - 'display (list 'xwidget ':xwidget id)) - id)) - -(defun xwidget-at (pos) - "Return xwidget at POS." - ;;TODO this function is a bit tedious because the C layer isnt well protected yet and - ;;xwidgetp aparently doesnt work yet - (let* ((disp (get-text-property pos 'display)) - (xw (car (cdr (cdr disp))))) - ;;(if ( xwidgetp xw) xw nil) - (if (equal 'xwidget (car disp)) xw))) - - -;; (defun xwidget-socket-handler () -;; "Create plug for socket. TODO." -;; (interactive) -;; (message "socket handler xwidget %S" last-input-event) -;; (let* -;; ((xwidget-event-type (nth 2 last-input-event)) -;; (xwidget-id (nth 1 last-input-event))) -;; (cond ( (eq xwidget-event-type 'xembed-ready) -;; (let* -;; ((xembed-id (nth 3 last-input-event))) -;; (message "xembed ready event: %S xw-id:%s" xembed-id xwidget-id) -;; ;;TODO fetch process data from the xwidget. create it, store process info -;; ;;will start emacs/uzbl in a xembed socket when its ready -;; ;; (cond -;; ;; ((eq 3 xwidget-id) -;; ;; (start-process "xembed" "*xembed*" (format "%ssrc/emacs" default-directory) "-q" "--parent-id" (number-to-string xembed-id) ) ) -;; ;; ((eq 5 xwidget-id) -;; ;; (start-process "xembed2" "*xembed2*" "uzbl-core" "-s" (number-to-string xembed-id) "http://www.fsf.org" ) ) -;; ))))) - -(defun xwidget-display (xwidget) - "Force XWIDGET to be displayed to create a xwidget_view. -Return the window displaying XWIDGET." - (let* ((buffer (xwidget-buffer xwidget)) - (window (display-buffer buffer)) - (frame (window-frame window))) - (set-frame-visible frame t) - (redisplay t) - window)) - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; webkit support -(require 'browse-url) -(require 'image-mode);;for some image-mode alike functionality -(require 'cl-macs);;for flet - -;;;###autoload -(defun xwidget-webkit-browse-url (url &optional new-session) - "Ask xwidget-webkit to browse URL. -NEW-SESSION specifies whether to create a new xwidget-webkit session. URL -defaults to the string looking like a url around the cursor position." - (interactive (progn - (require 'browse-url) - (browse-url-interactive-arg "xwidget-webkit URL: " - ;;( xwidget-webkit-current-url) - ))) - (when (stringp url) - (setq url (url-tidy url)) - (if new-session - (xwidget-webkit-new-session url) - (xwidget-webkit-goto-url url)))) - - -;;shims for adapting image mode code to the webkit browser window -(defun xwidget-image-display-size (spec &optional pixels frame) - "Image code adaptor. SPEC PIXELS FRAME like the corresponding `image-mode' fn." - (let ((xwi (xwidget-info (xwidget-at 1)))) - (cons (aref xwi 2) - (aref xwi 3)))) - -(defadvice image-display-size (around image-display-size-for-xwidget - (spec &optional pixels frame) - activate) - "Advice for re-using image mode for xwidget." - (if (eq (car spec) 'xwidget) - (setq ad-return-value (xwidget-image-display-size spec pixels frame)) - ad-do-it)) - -;;todo. -;; - check that the webkit support is compiled in -(defvar xwidget-webkit-mode-map - (let ((map (make-sparse-keymap))) - (define-key map "g" 'xwidget-webkit-browse-url) - (define-key map "a" 'xwidget-webkit-adjust-size-dispatch) - (define-key map "b" 'xwidget-webkit-back ) - (define-key map "r" 'xwidget-webkit-reload ) - (define-key map "t" (lambda () (interactive) (message "o")) ) - (define-key map "\C-m" 'xwidget-webkit-insert-string) - (define-key map "w" 'xwidget-webkit-current-url) - - ;;similar to image mode bindings - (define-key map (kbd "SPC") 'xwidget-webkit-scroll-up) - (define-key map (kbd "DEL") 'xwidget-webkit-scroll-down) - - (define-key map [remap scroll-up] 'xwidget-webkit-scroll-up) - (define-key map [remap scroll-up-command] 'xwidget-webkit-scroll-up) - - (define-key map [remap scroll-down] 'xwidget-webkit-scroll-down) - (define-key map [remap scroll-down-command] 'xwidget-webkit-scroll-down) - - (define-key map [remap forward-char] 'xwidget-webkit-scroll-forward) - (define-key map [remap backward-char] 'xwidget-webkit-scroll-backward) - (define-key map [remap right-char] 'xwidget-webkit-scroll-forward) - (define-key map [remap left-char] 'xwidget-webkit-scroll-backward) - ;; (define-key map [remap previous-line] 'image-previous-line) - ;; (define-key map [remap next-line] 'image-next-line) - - ;; (define-key map [remap move-beginning-of-line] 'image-bol) - ;; (define-key map [remap move-end-of-line] 'image-eol) - ;; (define-key map [remap beginning-of-buffer] 'image-bob) - ;; (define-key map [remap end-of-buffer] 'image-eob) - map) - "Keymap for `xwidget-webkit-mode'.") - -(defun xwidget-webkit-scroll-up () - "Scroll webkit up,either native or like image mode." - (interactive) - (if (eq xwidget-webkit-scroll-behaviour 'native) - (xwidget-set-adjustment (xwidget-webkit-last-session) 'vertical t 50) - (image-scroll-up))) - -(defun xwidget-webkit-scroll-down () - "Scroll webkit down,either native or like image mode." - (interactive) - (if (eq xwidget-webkit-scroll-behaviour 'native) - (xwidget-set-adjustment (xwidget-webkit-last-session) 'vertical t -50) - (image-scroll-down))) - -(defun xwidget-webkit-scroll-forward () - "Scroll webkit forward,either native or like image mode." - (interactive) - (if (eq xwidget-webkit-scroll-behaviour 'native) - (xwidget-set-adjustment (xwidget-webkit-last-session) 'horizontal t 50) - (xwidget-webkit-scroll-forward))) - -(defun xwidget-webkit-scroll-backward () - "Scroll webkit backward,either native or like image mode." - (interactive) - (if (eq xwidget-webkit-scroll-behaviour 'native) - (xwidget-set-adjustment (xwidget-webkit-last-session) 'horizontal t -50) - (xwidget-webkit-scroll-backward))) - - -;;the xwidget event needs to go into a higher level handler -;;since the xwidget can generate an event even if its offscreen -;;TODO this needs to use callbacks and consider different xw ev types -(define-key (current-global-map) [xwidget-event] 'xwidget-event-handler) -(defun xwidget-log ( &rest msg) - "Log MSG to a buffer." - (let ( (buf (get-buffer-create "*xwidget-log*"))) - (save-excursion - (buffer-disable-undo buf) - (set-buffer buf) - (insert (apply 'format msg)) - (insert "\n")))) - -(defun xwidget-event-handler () - "Receive xwidget event." - (interactive) - (xwidget-log "stuff happened to xwidget %S" last-input-event) - (let* - ((xwidget-event-type (nth 1 last-input-event)) - (xwidget (nth 2 last-input-event)) - ;(xwidget-callback (xwidget-get xwidget 'callback));;TODO stopped working for some reason - ) - ;(funcall xwidget-callback xwidget xwidget-event-type) - (message "xw callback %s" xwidget) - (funcall 'xwidget-webkit-callback xwidget xwidget-event-type))) - -(defun xwidget-webkit-callback (xwidget xwidget-event-type) - "Callback for xwidgets. -XWIDGET instance, XWIDGET-EVENT-TYPE depends on the originating xwidget." - (save-excursion - (cond ((buffer-live-p (xwidget-buffer xwidget)) - (set-buffer (xwidget-buffer xwidget)) - (let* ((strarg (nth 3 last-input-event))) - (cond ((eq xwidget-event-type 'document-load-finished) - (xwidget-log "webkit finished loading: '%s'" (xwidget-webkit-get-title xwidget)) - ;;TODO - check the native/internal scroll - ;;(xwidget-adjust-size-to-content xwidget) - (xwidget-webkit-adjust-size-dispatch) ;;TODO send xwidget here - (rename-buffer (format "*xwidget webkit: %s *" (xwidget-webkit-get-title xwidget))) - (pop-to-buffer (current-buffer))) - ((eq xwidget-event-type 'navigation-policy-decision-requested) - (if (string-match ".*#\\(.*\\)" strarg) - (xwidget-webkit-show-id-or-named-element xwidget (match-string 1 strarg)))) - (t (xwidget-log "unhandled event:%s" xwidget-event-type))))) - (t (xwidget-log "error: callback called for xwidget with dead buffer"))))) - -(defvar bookmark-make-record-function) -(define-derived-mode xwidget-webkit-mode - special-mode "xwidget-webkit" "xwidget webkit view mode" - (setq buffer-read-only t) - (setq-local bookmark-make-record-function - #'xwidget-webkit-bookmark-make-record) - ;; Keep track of [vh]scroll when switching buffers - (image-mode-setup-winprops)) - -(defun xwidget-webkit-bookmark-make-record () - (nconc (bookmark-make-record-default t t) - `((page . ,(xwidget-webkit-current-url)) - (handler . (lambda (bmk) (browse-url (bookmark-prop-get bmk 'page))))))) - - -(defvar xwidget-webkit-last-session-buffer nil) - -(defun xwidget-webkit-last-session () - "Last active webkit, or nil." - (if (buffer-live-p xwidget-webkit-last-session-buffer) - (with-current-buffer xwidget-webkit-last-session-buffer - (xwidget-at 1)) - nil)) - -(defun xwidget-webkit-current-session () - "Either the webkit in the current buffer, or the last one used, which might be nil." - (if (xwidget-at 1) - (xwidget-at 1) - (xwidget-webkit-last-session))) - -(defun xwidget-adjust-size-to-content (xw) - "Resize XW to content." - ;;xwidgets doesnt support widgets that have their own opinions about size well yet - ;;this reads the desired size and resizes the emacs allocated area accordingly - (let ((size (xwidget-size-request xw))) - (xwidget-resize xw (car size) (cadr size)))) - - -(defvar xwidget-webkit-activeelement-js" -function findactiveelement(doc){ -//alert(doc.activeElement.value); - if(doc.activeElement.value != undefined){ - return doc.activeElement; - }else{ - // recurse over the child documents: - var frames = doc.getElementsByTagName('frame'); - for (var i = 0; i < frames.length; i++) - { - var d = frames[i].contentDocument; - var rv = findactiveelement(d); - if(rv != undefined){ - return rv; - } - } - } - return undefined; -}; - - -" - - "javascript that finds the active element." - ;;yes its ugly. because: - ;; - there is aparently no way to find the active frame other than recursion - ;; - the js "for each" construct missbehaved on the "frames" collection - ;; - a window with no frameset still has frames.length == 1, but frames[0].document.activeElement != document.activeElement - ;;TODO the activeelement type needs to be examined, for iframe, etc. sucks. - ) - -(defun xwidget-webkit-insert-string (xw str) - "Insert string in the active field in the webkit. -Argument XW webkit. -Argument STR string." - ;;read out the string in the field first and provide for edit - (interactive - (let* ((xww (xwidget-webkit-current-session)) - - (field-value - (progn - (xwidget-webkit-execute-script xww xwidget-webkit-activeelement-js) - (xwidget-webkit-execute-script-rv xww "findactiveelement(document).value;" ))) - (field-type (xwidget-webkit-execute-script-rv xww "findactiveelement(document).type;" ))) - (list xww - (cond ((equal "text" field-type) - (read-string "text:" field-value)) - ((equal "password" field-type) - (read-passwd "password:" nil field-value)) - ((equal "textarea" field-type) - (xwidget-webkit-begin-edit-textarea xww field-value)))))) - (xwidget-webkit-execute-script xw (format "findactiveelement(document).value='%s'" str))) - -(defvar xwidget-xwbl) -(defun xwidget-webkit-begin-edit-textarea (xw text) - "Start editing of a webkit text area. -XW is the xwidget identifier, TEXT is retrieved from the webkit." - (switch-to-buffer - (generate-new-buffer "textarea")) - - (set (make-local-variable 'xwidget-xwbl) xw) - (insert text)) - -(defun xwidget-webkit-end-edit-textarea () - "End editing of a webkit text area." - (interactive) - (goto-char (point-min)) - (while (search-forward "\n" nil t) - (replace-match "\\n" nil t)) - (xwidget-webkit-execute-script xwidget-xwbl (format "findactiveelement(document).value='%s'" - (buffer-substring (point-min) (point-max)))) - ;;TODO convert linefeed to \n - ) - -(defun xwidget-webkit-show-named-element (xw element-name) - "Make named-element show. for instance an anchor." - (interactive (list (xwidget-webkit-current-session) (read-string "element name:"))) - ;;TODO - ;; since an xwidget is an Emacs object, it is not trivial to do some things that are taken for granted in a normal browser. - ;; scrolling an anchor/named-element into view is one such thing. - ;; this function implements a proof-of-concept for this. - ;; problems remaining: - ;; - the selected window is scrolled but this is not always correct - ;; - this needs to be interfaced into browse-url somehow. the tricky part is that we need to do this in two steps: - ;; A: load the base url, wait for load signal to arrive B: navigate to the anchor when the base url is finished rendering - - ;;this part figures out the Y coordinate of the element - (let ((y (string-to-number - (xwidget-webkit-execute-script-rv xw - (format "document.getElementsByName('%s')[0].getBoundingClientRect().top" element-name) - 0)))) - ;;now we need to tell emacs to scroll the element into view. - (xwidget-log "scroll: %d" y) - (set-window-vscroll (selected-window) y t))) - -(defun xwidget-webkit-show-id-element (xw element-id) - "make id-element show. for instance an anchor." - (interactive (list (xwidget-webkit-current-session) - (read-string "element id:"))) - (let ((y (string-to-number - (xwidget-webkit-execute-script-rv xw - (format "document.getElementById('%s').getBoundingClientRect().top" element-id) - 0)))) - ;;now we need to tell emacs to scroll the element into view. - (xwidget-log "scroll: %d" y) - (set-window-vscroll (selected-window) y t))) - -(defun xwidget-webkit-show-id-or-named-element (xw element-id) - "make id-element show. for instance an anchor." - (interactive (list (xwidget-webkit-current-session) - (read-string "element id:"))) - (let* ((y1 (string-to-number - (xwidget-webkit-execute-script-rv xw - (format "document.getElementsByName('%s')[0].getBoundingClientRect().top" element-id) - "0"))) - (y2 (string-to-number - (xwidget-webkit-execute-script-rv xw - (format "document.getElementById('%s').getBoundingClientRect().top" element-id) - "0"))) - (y3 (max y1 y2))) - ;;now we need to tell emacs to scroll the element into view. - (xwidget-log "scroll: %d" y3) - (set-window-vscroll (selected-window) y3 t))) - -(defun xwidget-webkit-adjust-size-to-content () - "Adjust webkit to content size." - (interactive) - (xwidget-adjust-size-to-content (xwidget-webkit-current-session))) - -(defun xwidget-webkit-adjust-size-dispatch () - "Adjust size according to mode." - (interactive) - (if (eq xwidget-webkit-scroll-behaviour 'native) - (xwidget-webkit-adjust-size-to-window) - (xwidget-webkit-adjust-size-to-content)) - ;;the recenter is intended to correct a visual glitch - ;;it errors out if the buffer isnt visible, but then we dont get the glitch, - ;;so silence errors - (ignore-errors - (recenter-top-bottom)) - ) - -(defun xwidget-webkit-adjust-size-to-window () - "Adjust webkit to window." - (interactive) - (xwidget-resize ( xwidget-webkit-current-session) (window-pixel-width) (window-pixel-height))) - -(defun xwidget-webkit-adjust-size (w h) - "Manualy set webkit size. -Argument W width. -Argument H height." - ;;TODO shouldnt be tied to the webkit xwidget - (interactive "nWidth:\nnHeight:\n") - (xwidget-resize ( xwidget-webkit-current-session) w h)) - -(defun xwidget-webkit-fit-width () - "Adjust width of webkit to window width." - (interactive) - (xwidget-webkit-adjust-size (- (caddr (window-inside-pixel-edges)) - (car (window-inside-pixel-edges))) - 1000)) - -(defun xwidget-webkit-new-session (url) - "Create a new webkit session buffer with URL." - (let* - ((bufname (generate-new-buffer-name "*xwidget-webkit*")) - xw) - (setq xwidget-webkit-last-session-buffer (switch-to-buffer (get-buffer-create bufname))) - (insert " 'a' adjusts the xwidget size.") - (setq xw (xwidget-insert 1 'webkit-osr bufname 1000 1000)) - (xwidget-put xw 'callback 'xwidget-webkit-callback) - (xwidget-webkit-mode) - (xwidget-webkit-goto-uri (xwidget-webkit-last-session) url ))) - - -(defun xwidget-webkit-goto-url (url) - "Goto URL." - (if (xwidget-webkit-current-session) - (progn - (xwidget-webkit-goto-uri (xwidget-webkit-current-session) url)) - (xwidget-webkit-new-session url))) - -(defun xwidget-webkit-back () - "Back in history." - (interactive) - (xwidget-webkit-execute-script (xwidget-webkit-current-session) "history.go(-1);")) - -(defun xwidget-webkit-reload () - "Reload current url." - (interactive) - (xwidget-webkit-execute-script (xwidget-webkit-current-session) "history.go(0);")) - -(defun xwidget-webkit-current-url () - "Get the webkit url. place it on kill ring." - (interactive) - (let* ((rv (xwidget-webkit-execute-script-rv (xwidget-webkit-current-session) - "document.URL")) - (url (kill-new (or rv "")))) - (message "url: %s" url ) - url)) - -(defun xwidget-webkit-execute-script-rv (xw script &optional default) - "Same as 'xwidget-webkit-execute-script' but but with return value. -XW is the webkit instance. SCRIPT is the script to execut. -DEFAULT is the defaultreturn value." - ;;notice the fugly "title" hack. it is needed because the webkit api - ;;doesnt support returning values. this is a wrapper for the title - ;;hack so its easy to remove should webkit someday support JS return - ;;values or we find some other way to access the DOM - - ;;reset webkit title. fugly. - (let* ((emptytag "titlecantbewhitespaceohthehorror") - title) - (xwidget-webkit-execute-script xw (format "document.title=\"%s\";" (or default emptytag))) - (xwidget-webkit-execute-script xw (format "document.title=%s;" script)) - (setq title (xwidget-webkit-get-title xw)) - (if (equal emptytag title) - (setq title "")) - (unless title - (setq title default)) - title)) - - -;; use declare here? -;; (declare-function xwidget-resize-internal "xwidget.c" ) -;; check-declare-function? - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(defun xwidget-webkit-get-selection () - "Get the webkit selection." - (xwidget-webkit-execute-script-rv (xwidget-webkit-current-session) - "window.getSelection().toString();")) - -(defun xwidget-webkit-copy-selection-as-kill () - "Get the webkit selection and put it on the kill ring." - (interactive) - (kill-new (xwidget-webkit-get-selection))) - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; xwidget plist management(similar to the process plist functions) - -(defun xwidget-get (xwidget propname) - "Return the value of XWIDGET' PROPNAME property. -This is the last value stored with `(xwidget-put XWIDGET PROPNAME VALUE)'." - (plist-get (xwidget-plist xwidget) propname)) - -(defun xwidget-put (xwidget propname value) - "Change XWIDGET' PROPNAME property to VALUE. -It can be retrieved with `(xwidget-get XWIDGET PROPNAME)'." - (set-xwidget-plist xwidget - (plist-put (xwidget-plist xwidget) propname value))) - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -(defun xwidget-delete-zombies () - "Helper for xwidget-cleanup." - (dolist (xwidget-view xwidget-view-list) - (when (or (not (window-live-p (xwidget-view-window xwidget-view))) - (not (memq (xwidget-view-model xwidget-view) - xwidget-list))) - (delete-xwidget-view xwidget-view)))) - -(defun xwidget-cleanup () - "Delete zombie xwidgets." - ;;its still pretty easy to trigger bugs with xwidgets. - ;;this function tries to implement a workaround - (interactive) - ;; kill xviews who should have been deleted but stull linger - (xwidget-delete-zombies) - ;; redraw display otherwise ghost of zombies will remain to haunt the screen - (redraw-display)) - -;;this is a workaround because I cant find the right place to put it in C -;;seems to work well in practice though -;;(add-hook 'window-configuration-change-hook 'xwidget-cleanup) -(add-hook 'window-configuration-change-hook 'xwidget-delete-zombies) - -(defun xwidget-kill-buffer-query-function () - "Ask beforek illing a buffer that has xwidgets." - (let ((xwidgets (get-buffer-xwidgets (current-buffer)))) - (or (not xwidgets) - (not (memq t (mapcar 'xwidget-query-on-exit-flag xwidgets))) - (yes-or-no-p - (format "Buffer %S has xwidgets; kill it? " - (buffer-name (current-buffer))))))) - -(add-hook 'kill-buffer-query-functions 'xwidget-kill-buffer-query-function) - -;;killflash is sadly not reliable yet. -(defvar xwidget-webkit-kill-flash-oneshot t) -(defun xwidget-webkit-kill-flash () - "Disable the flash plugin in webkit. -This is needed because Flash is non-free and doesnt work reliably -on 64 bit systems and offscreen rendering. Sadly not reliable -yet, so deinstall Flash instead for now." - ;;you can only call this once or webkit crashes and takes emacs with it. odd. - (unless xwidget-webkit-kill-flash-oneshot - (xwidget-disable-plugin-for-mime "application/x-shockwave-flash") - (setq xwidget-webkit-kill-flash-oneshot t))) - -(xwidget-webkit-kill-flash) - -(defun report-xwidget-bug () - "Report a bug in GNU Emacs about the XWidget branch. -Prompts for bug subject. Leaves you in a mail buffer." - (interactive) - (let ((reporter-prompt-for-summary-p t)) - (reporter-submit-bug-report "submit@debbugs.gnu.org" nil nil nil nil - (format "Package: emacs-xwidgets - -Please describee xactly whata ctions triggered the bug, and the -precise symptoms of the bug. If you can, give a recipe starting -from `emacs -Q'. - -If Emacs crashed, and you have the Emacs process in the gdb -deubbger, please include the output from the following gdb -commands: - `bt full' and `xbacktrace'. - -For information about debugging Emacs, please read the file -%s" (expand-file-name "DEBUG" data-directory))))) - -(provide 'xwidget) - -;;; xwidget.el ends here diff --git a/src/ChangeLog b/src/ChangeLog index d45b4e3..9e564ea 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,24 +1,3 @@ -2015-02-01 Martin Rudalics - - * xdisp.c (Fwindow_text_pixel_size): Add optional argument BUFFER. - -2015-02-01 Joakim Verona - Support for the new Xwidget feature. - * window.c, Makefile.in, buffer.c, dispextern.h, dispnew.c, emacs.c: - * emacsgtkfixed.c, emacsgtkfixed.h, keyboard.c, lisp.h, print.c: - * termhooks.h, window.c, xdisp.c, xterm.c - New files for xwidgets: - * xwidget.c, xwidget.h: - Support for testing xwidgets - * xwidget-test-manual.el: - -2015-02-01 Grégoire Jadi - Support for testing xwidgets - * parallell-remote.el, parallell-xwidget.el, parallell.el: - * xwidget-tests.el: - various improvements to xwidgets: - * xwidgets.c: - 2015-01-31 Eli Zaretskii * coding.c (raw_text_coding_system_p): New function. diff --git a/src/Makefile.in b/src/Makefile.in index 81977db..32615c8 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -218,12 +218,6 @@ CFLAGS_SOUND= @CFLAGS_SOUND@ RSVG_LIBS= @RSVG_LIBS@ RSVG_CFLAGS= @RSVG_CFLAGS@ -WEBKIT_LIBS= @WEBKIT_LIBS@ -WEBKIT_CFLAGS= @WEBKIT_CFLAGS@ - -GIR_LIBS= @GIR_LIBS@ -GIR_CFLAGS= @GIR_CFLAGS@ - IMAGEMAGICK_LIBS= @IMAGEMAGICK_LIBS@ IMAGEMAGICK_CFLAGS= @IMAGEMAGICK_CFLAGS@ @@ -349,7 +343,6 @@ ALL_CFLAGS=-Demacs $(MYCPPFLAGS) -I. -I$(srcdir) \ $(GNUSTEP_CFLAGS) $(CFLAGS_SOUND) $(RSVG_CFLAGS) $(IMAGEMAGICK_CFLAGS) \ $(PNG_CFLAGS) $(LIBXML2_CFLAGS) $(DBUS_CFLAGS) \ $(XRANDR_CFLAGS) $(XINERAMA_CFLAGS) $(XFIXES_CFLAGS) \ - $(WEBKIT_CFLAGS) $(GIR_CFLAGS) \ $(SETTINGS_CFLAGS) $(FREETYPE_CFLAGS) $(FONTCONFIG_CFLAGS) \ $(LIBOTF_CFLAGS) $(M17N_FLT_CFLAGS) $(DEPFLAGS) \ $(LIBGNUTLS_CFLAGS) $(GFILENOTIFY_CFLAGS) \ @@ -379,13 +372,11 @@ base_obj = dispnew.o frame.o scroll.o xdisp.o menu.o $(XMENU_OBJ) window.o \ process.o gnutls.o callproc.o \ region-cache.o sound.o atimer.o \ doprnt.o intervals.o textprop.o composite.o xml.o $(NOTIFY_OBJ) \ - xwidget.o \ profiler.o decompress.o \ $(MSDOS_OBJ) $(MSDOS_X_OBJ) $(NS_OBJ) $(CYGWIN_OBJ) $(FONT_OBJ) \ $(W32_OBJ) $(WINDOW_SYSTEM_OBJ) $(XGSELOBJ) obj = $(base_obj) $(NS_OBJC_OBJ) -xwidget.o: xwidget.c xwidget.h ## Object files used on some machine or other. ## These go in the DOC file on all machines in case they are needed. ## Some of them have no DOC entries, but it does no harm to have them @@ -430,7 +421,6 @@ ALLOBJS = $(FIRSTFILE_OBJ) $(VMLIMIT_OBJ) $(obj) $(otherobj) LIBES = $(LIBS) $(W32_LIBS) $(LIBS_GNUSTEP) $(LIBX_BASE) $(LIBIMAGE) \ $(LIBX_OTHER) $(LIBSOUND) \ $(RSVG_LIBS) $(IMAGEMAGICK_LIBS) $(LIB_ACL) $(LIB_CLOCK_GETTIME) \ - $(WEBKIT_LIBS) $(GIR_LIBS) \ $(LIB_EACCESS) $(LIB_FDATASYNC) $(LIB_TIMER_TIME) $(DBUS_LIBS) \ $(LIB_EXECINFO) $(XRANDR_LIBS) $(XINERAMA_LIBS) $(XFIXES_LIBS) \ $(LIBXML2_LIBS) $(LIBGPM) $(LIBRESOLV) $(LIBS_SYSTEM) \ diff --git a/src/buffer.c b/src/buffer.c index 223683d..67eda3e 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -42,9 +42,6 @@ along with GNU Emacs. If not, see . */ #include "keymap.h" #include "frame.h" -#ifdef HAVE_XWIDGETS -#include "xwidget.h" -#endif /* HAVE_XWIDGETS */ #ifdef WINDOWSNT #include "w32heap.h" /* for mmap_* */ #endif @@ -1758,11 +1755,6 @@ cleaning up all windows currently displaying the buffer to be killed. */) kill_buffer_processes (buffer); UNGCPRO; -#ifdef HAVE_XWIDGETS - GCPRO1 (buffer); - kill_buffer_xwidgets (buffer); - UNGCPRO; -#endif /* HAVE_XWIDGETS */ /* Killing buffer processes may run sentinels which may have killed our buffer. */ if (!BUFFER_LIVE_P (b)) diff --git a/src/dispextern.h b/src/dispextern.h index fbf0c74..4139479 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -348,10 +348,6 @@ enum glyph_type /* Glyph is a space of fractional width and/or height. */ STRETCH_GLYPH -#ifdef HAVE_XWIDGETS - /* Glyph is an external widget drawn by the GUI toolkit. */ - ,XWIDGET_GLYPH -#endif }; @@ -503,9 +499,6 @@ struct glyph /* Image ID for image glyphs (type == IMAGE_GLYPH). */ int img_id; -#ifdef HAVE_XWIDGETS - struct xwidget* xwidget; -#endif /* Sub-structure for type == STRETCH_GLYPH. */ struct { @@ -1360,9 +1353,6 @@ struct glyph_string /* Image, if any. */ struct image *img; -#ifdef HAVE_XWIDGETS - struct xwidget* xwidget; -#endif /* Slice */ struct glyph_slice slice; @@ -2107,10 +2097,6 @@ enum display_element_type /* Continuation glyphs. See the comment for IT_TRUNCATION. */ IT_CONTINUATION - -#ifdef HAVE_XWIDGETS - ,IT_XWIDGET -#endif }; @@ -2174,9 +2160,6 @@ enum it_method { GET_FROM_C_STRING, GET_FROM_IMAGE, GET_FROM_STRETCH, -#ifdef HAVE_XWIDGETS - GET_FROM_XWIDGET, -#endif NUM_IT_METHODS }; @@ -2398,12 +2381,6 @@ struct it struct { Lisp_Object object; } stretch; -#ifdef HAVE_XWIDGETS - /* method == GET_FROM_XWIDGET */ - struct { - Lisp_Object object; - } xwidget; -#endif } u; /* Current text and display positions. */ @@ -2528,10 +2505,6 @@ struct it /* If what == IT_IMAGE, the id of the image to display. */ ptrdiff_t image_id; -#ifdef HAVE_XWIDGETS - /* If what == IT_XWIDGET*/ - struct xwidget* xwidget; -#endif /* Values from `slice' property. */ struct it_slice slice; diff --git a/src/dispnew.c b/src/dispnew.c index e614cee..3c8117e 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -48,10 +48,6 @@ along with GNU Emacs. If not, see . */ #include TERM_HEADER #endif /* HAVE_WINDOW_SYSTEM */ -#ifdef HAVE_XWIDGETS -#include "xwidget.h" -#endif - #include #include @@ -3546,9 +3542,6 @@ update_window (struct window *w, bool force_p) add_window_display_history (w, w->current_matrix->method, paused_p); #endif -#ifdef HAVE_XWIDGETS - xwidget_end_redisplay(w, w->current_matrix); -#endif clear_glyph_matrix (desired_matrix); return paused_p; @@ -4132,11 +4125,6 @@ scrolling_window (struct window *w, bool header_line_p) break; } -#ifdef HAVE_XWIDGETS - //currently this is needed to detect xwidget movement reliably. or probably not. - return 0; -#endif - /* Give up if some rows in the desired matrix are not enabled. */ if (! MATRIX_ROW_ENABLED_P (desired_matrix, i)) return -1; diff --git a/src/emacs.c b/src/emacs.c index 87b1f11..fdd17d1 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -65,9 +65,6 @@ along with GNU Emacs. If not, see . */ #include "buffer.h" #include "window.h" -#ifdef HAVE_XWIDGETS -#include "xwidget.h" -#endif #include "systty.h" #include "atimer.h" #include "blockinput.h" @@ -1437,9 +1434,6 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem syms_of_xfns (); syms_of_xmenu (); syms_of_fontset (); -#ifdef HAVE_XWIDGETS - syms_of_xwidget(); -#endif syms_of_xsettings (); #ifdef HAVE_X_SM syms_of_xsmfns (); diff --git a/src/emacsgtkfixed.c b/src/emacsgtkfixed.c index d52a139..abec78f 100644 --- a/src/emacsgtkfixed.c +++ b/src/emacsgtkfixed.c @@ -23,9 +23,6 @@ along with GNU Emacs. If not, see . */ #include "lisp.h" #include "frame.h" #include "xterm.h" -#ifdef HAVE_XWIDGETS -#include "xwidget.h" -#endif #include "emacsgtkfixed.h" /* Silence a bogus diagnostic; see GNOME bug 683906. */ @@ -34,26 +31,26 @@ along with GNU Emacs. If not, see . */ # pragma GCC diagnostic ignored "-Wunused-local-typedefs" #endif -//#define EMACS_TYPE_FIXED emacs_fixed_get_type () -/* #define EMACS_FIXED(obj) \ */ -/* G_TYPE_CHECK_INSTANCE_CAST (obj, EMACS_TYPE_FIXED, EmacsFixed) */ +#define EMACS_TYPE_FIXED emacs_fixed_get_type () +#define EMACS_FIXED(obj) \ + G_TYPE_CHECK_INSTANCE_CAST (obj, EMACS_TYPE_FIXED, EmacsFixed) typedef struct _EmacsFixed EmacsFixed; typedef struct _EmacsFixedPrivate EmacsFixedPrivate; typedef struct _EmacsFixedClass EmacsFixedClass; -/* struct _EmacsFixed */ -/* { */ -/* GtkFixed container; */ +struct _EmacsFixed +{ + GtkFixed container; -/* /\*< private >*\/ */ -/* EmacsFixedPrivate *priv; */ -/* }; */ + /*< private >*/ + EmacsFixedPrivate *priv; +}; -/* struct _EmacsFixedClass */ -/* { */ -/* GtkFixedClass parent_class; */ -/* }; */ +struct _EmacsFixedClass +{ + GtkFixedClass parent_class; +}; struct _EmacsFixedPrivate { @@ -67,109 +64,21 @@ static void emacs_fixed_get_preferred_width (GtkWidget *widget, static void emacs_fixed_get_preferred_height (GtkWidget *widget, gint *minimum, gint *natural); +static GType emacs_fixed_get_type (void); G_DEFINE_TYPE (EmacsFixed, emacs_fixed, GTK_TYPE_FIXED) -#ifdef HAVE_XWIDGETS - -struct GtkFixedPrivateL -{ - GList *children; -}; - -static void emacs_fixed_gtk_widget_size_allocate (GtkWidget *widget, - GtkAllocation *allocation){ - //for xwidgets - - //TODO 1st call base class method - EmacsFixedClass *klass; - GtkWidgetClass *parent_class; - struct GtkFixedPrivateL* priv; - GtkFixedChild *child; - GtkAllocation child_allocation; - GtkRequisition child_requisition; - GList *children; - struct xwidget_view* xv; - - klass = EMACS_FIXED_GET_CLASS (widget); - parent_class = g_type_class_peek_parent (klass); - parent_class->size_allocate (widget, allocation); - - priv = G_TYPE_INSTANCE_GET_PRIVATE (widget, - GTK_TYPE_FIXED, - struct GtkFixedPrivateL); - - gtk_widget_set_allocation (widget, allocation); - - if (gtk_widget_get_has_window (widget)) - { - if (gtk_widget_get_realized (widget)) - gdk_window_move_resize (gtk_widget_get_window (widget), - allocation->x, - allocation->y, - allocation->width, - allocation->height); - } - - for (children = priv->children; - children; - children = children->next) - { - child = children->data; - - if (!gtk_widget_get_visible (child->widget)) - continue; - - gtk_widget_get_preferred_size (child->widget, &child_requisition, NULL); - child_allocation.x = child->x; - child_allocation.y = child->y; - - if (!gtk_widget_get_has_window (widget)) - { - child_allocation.x += allocation->x; - child_allocation.y += allocation->y; - } - - child_allocation.width = child_requisition.width; - child_allocation.height = child_requisition.height; - - - - xv = (struct xwidget_view*) g_object_get_data (G_OBJECT (child->widget), XG_XWIDGET_VIEW); - if(xv){ - child_allocation.width = xv->clip_right; - child_allocation.height = xv->clip_bottom - xv->clip_top; - } - gtk_widget_size_allocate (child->widget, &child_allocation); - - } - -} - -#endif /* HAVE_XWIDGETS */ - static void emacs_fixed_class_init (EmacsFixedClass *klass) { GtkWidgetClass *widget_class; - GtkFixedClass *fixed_class; widget_class = (GtkWidgetClass*) klass; - fixed_class = (GtkFixedClass*) klass; widget_class->get_preferred_width = emacs_fixed_get_preferred_width; widget_class->get_preferred_height = emacs_fixed_get_preferred_height; -#ifdef HAVE_XWIDGETS - widget_class->size_allocate = emacs_fixed_gtk_widget_size_allocate; -#endif g_type_class_add_private (klass, sizeof (EmacsFixedPrivate)); } -static GType -emacs_fixed_child_type (GtkFixed *container) -{ - return GTK_TYPE_WIDGET; -} - static void emacs_fixed_init (EmacsFixed *fixed) { diff --git a/src/emacsgtkfixed.h b/src/emacsgtkfixed.h index 7364d90..bcf1cd9 100644 --- a/src/emacsgtkfixed.h +++ b/src/emacsgtkfixed.h @@ -25,35 +25,7 @@ along with GNU Emacs. If not, see . */ G_BEGIN_DECLS -struct frame; - -#define EMACS_TYPE_FIXED (emacs_fixed_get_type ()) -#define EMACS_FIXED(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMACS_TYPE_FIXED, EmacsFixed)) -#define EMACS_FIXED_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EMACS_TYPE_FIXED, EmacsFixedClass)) -#define EMACS_IS_FIXED(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMACS_TYPE_FIXED)) -#define EMACS_IS_FIXED_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EMACS_TYPE_FIXED)) -#define EMACS_FIXED_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EMACS_TYPE_FIXED, EmacsFixedClass)) - -//typedef struct _EmacsFixed EmacsFixed; -typedef struct _EmacsFixedPrivate EmacsFixedPrivate; -typedef struct _EmacsFixedClass EmacsFixedClass; - -struct _EmacsFixed -{ - GtkFixed container; - - /*< private >*/ - EmacsFixedPrivate *priv; -}; - - -struct _EmacsFixedClass -{ - GtkFixedClass parent_class; -}; - extern GtkWidget *emacs_fixed_new (struct frame *f); -extern GType emacs_fixed_get_type (void); G_END_DECLS diff --git a/src/keyboard.c b/src/keyboard.c index a9ff77d..1176d70 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -4124,20 +4124,6 @@ kbd_buffer_get_event (KBOARD **kbp, kbd_fetch_ptr = event + 1; } #endif -#ifdef HAVE_XWIDGETS - else if (event->kind == XWIDGET_EVENT) - { - obj = make_lispy_event (event); - kbd_fetch_ptr = event + 1; - } -#endif -#ifdef HAVE_INOTIFY - else if (event->kind == FILE_NOTIFY_EVENT) - { - obj = make_lispy_event (event); - kbd_fetch_ptr = event + 1; - } -#endif else if (event->kind == CONFIG_CHANGED_EVENT) { obj = make_lispy_event (event); @@ -6084,14 +6070,6 @@ make_lispy_event (struct input_event *event) } #endif /* HAVE_DBUS */ -#ifdef HAVE_XWIDGETS - case XWIDGET_EVENT: - { - return Fcons (Qxwidget_event,event->arg); - } -#endif /* HAVE_XWIDGETS */ - - #if defined HAVE_GFILENOTIFY || defined HAVE_INOTIFY case FILE_NOTIFY_EVENT: { @@ -11109,9 +11087,6 @@ syms_of_keyboard (void) DEFSYM (Qdbus_event, "dbus-event"); #endif -#ifdef HAVE_XWIDGETS - DEFSYM (Qxwidget_event,"xwidget-event"); -#endif /* HAVE_XWIDGETS */ #ifdef USE_FILE_NOTIFY DEFSYM (Qfile_notify, "file-notify"); #endif /* USE_FILE_NOTIFY */ diff --git a/src/lisp.h b/src/lisp.h index 87bc3ef..f5242ab 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -781,11 +781,6 @@ enum pvec_type PVEC_WINDOW_CONFIGURATION, PVEC_SUBR, PVEC_OTHER, -#ifdef HAVE_XWIDGETS - PVEC_XWIDGET, - PVEC_XWIDGET_VIEW, -#endif - /* These should be last, check internal_equal to see why. */ PVEC_COMPILED, PVEC_CHAR_TABLE, diff --git a/src/print.c b/src/print.c index 75288bc..1a0aebb 100644 --- a/src/print.c +++ b/src/print.c @@ -37,10 +37,6 @@ along with GNU Emacs. If not, see . */ #include "termhooks.h" /* For struct terminal. */ #include "font.h" -#ifdef HAVE_XWIDGETS -#include "xwidget.h" -#endif - #include #include @@ -1776,18 +1772,6 @@ print_object (Lisp_Object obj, Lisp_Object printcharfun, bool escapeflag) strout (XSUBR (obj)->symbol_name, -1, -1, printcharfun); PRINTCHAR ('>'); } -#ifdef HAVE_XWIDGETS - else if (XWIDGETP (obj)) - { - strout ("#'); - } - else if (XWIDGET_VIEW_P (obj)) - { - strout ("#'); - } -#endif else if (WINDOWP (obj)) { int len; diff --git a/src/termhooks.h b/src/termhooks.h index 58ae239..3cafc43 100644 --- a/src/termhooks.h +++ b/src/termhooks.h @@ -236,10 +236,6 @@ enum event_kind , NS_NONKEY_EVENT #endif -#ifdef HAVE_XWIDGETS - /* events generated by xwidgets*/ - , XWIDGET_EVENT -#endif #ifdef USE_FILE_NOTIFY /* File or directory was changed. */ , FILE_NOTIFY_EVENT diff --git a/src/window.c b/src/window.c index b423010..2f44bf7 100644 --- a/src/window.c +++ b/src/window.c @@ -44,9 +44,6 @@ along with GNU Emacs. If not, see . */ #ifdef MSDOS #include "msdos.h" #endif -#ifdef HAVE_XWIDGETS -#include "xwidget.h" -#endif static int displayed_window_lines (struct window *); static int count_windows (struct window *); @@ -4562,9 +4559,6 @@ Signal an error when WINDOW is the only window on its frame. */) /* Block input. */ block_input (); -#ifdef HAVE_XWIDGETS - xwidget_view_delete_all_in_window(w); -#endif window_resize_apply (p, horflag); /* If this window is referred to by the dpyinfo's mouse highlight, invalidate that slot to be safe (Bug#9904). */ diff --git a/src/xdisp.c b/src/xdisp.c index 2da6c76..68c0fa5 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -318,9 +318,6 @@ along with GNU Emacs. If not, see . */ #include TERM_HEADER #endif /* HAVE_WINDOW_SYSTEM */ -#ifdef HAVE_XWIDGETS -#include "xwidget.h" -#endif #ifndef FRAME_X_OUTPUT #define FRAME_X_OUTPUT(f) ((f)->output_data.x) #endif @@ -845,9 +842,6 @@ static int next_element_from_c_string (struct it *); static int next_element_from_buffer (struct it *); static int next_element_from_composition (struct it *); static int next_element_from_image (struct it *); -#ifdef HAVE_XWIDGETS -static int next_element_from_xwidget(struct it *); -#endif static int next_element_from_stretch (struct it *); static void load_overlay_strings (struct it *, ptrdiff_t); static int init_from_display_pos (struct it *, struct window *, @@ -4684,9 +4678,6 @@ handle_display_spec (struct it *it, Lisp_Object spec, Lisp_Object object, if (CONSP (spec) /* Simple specifications. */ && !EQ (XCAR (spec), Qimage) -#ifdef HAVE_XWIDGETS - && !EQ (XCAR (spec), Qxwidget) -#endif && !EQ (XCAR (spec), Qspace) && !EQ (XCAR (spec), Qwhen) && !EQ (XCAR (spec), Qslice) @@ -5133,12 +5124,7 @@ handle_single_display_spec (struct it *it, Lisp_Object spec, Lisp_Object object, || ((it ? FRAME_WINDOW_P (it->f) : frame_window_p) && valid_image_p (value)) #endif /* not HAVE_WINDOW_SYSTEM */ - || (CONSP (value) && EQ (XCAR (value), Qspace)) -#ifdef HAVE_XWIDGETS - || ((it ? FRAME_WINDOW_P (it->f) : frame_window_p) - && valid_xwidget_spec_p(value)) -#endif - ); + || (CONSP (value) && EQ (XCAR (value), Qspace))); if (valid_p && !display_replaced_p) { @@ -5213,18 +5199,6 @@ handle_single_display_spec (struct it *it, Lisp_Object spec, Lisp_Object object, *position = it->position = start_pos; retval = 1 + (it->area == TEXT_AREA); } -#ifdef HAVE_XWIDGETS - else if (valid_xwidget_spec_p(value)) - { - it->what = IT_XWIDGET; - it->method = GET_FROM_XWIDGET; - it->position = start_pos; - it->object = NILP (object) ? it->w->contents : object; - *position = start_pos; - - it->xwidget = lookup_xwidget(value); - } -#endif #ifdef HAVE_WINDOW_SYSTEM else { @@ -5961,11 +5935,6 @@ push_it (struct it *it, struct text_pos *position) case GET_FROM_STRETCH: p->u.stretch.object = it->object; break; -#ifdef HAVE_XWIDGETS - case GET_FROM_XWIDGET: - p->u.xwidget.object = it->object; - break; -#endif } p->position = position ? *position : it->position; p->current = it->current; @@ -6059,11 +6028,6 @@ pop_it (struct it *it) it->object = p->u.image.object; it->slice = p->u.image.slice; break; -#ifdef HAVE_XWIDGETS - case GET_FROM_XWIDGET: - it->object = p->u.xwidget.object; - break; -#endif case GET_FROM_STRETCH: it->object = p->u.stretch.object; break; @@ -6726,9 +6690,6 @@ static int (* get_next_element[NUM_IT_METHODS]) (struct it *it) = next_element_from_c_string, next_element_from_image, next_element_from_stretch -#ifdef HAVE_XWIDGETS - ,next_element_from_xwidget -#endif }; #define GET_NEXT_DISPLAY_ELEMENT(it) (*get_next_element[(it)->method]) (it) @@ -7574,10 +7535,6 @@ set_iterator_to_next (struct it *it, int reseat_p) case GET_FROM_IMAGE: case GET_FROM_STRETCH: -#ifdef HAVE_XWIDGETS - case GET_FROM_XWIDGET: -#endif - /* The position etc with which we have to proceed are on the stack. The position may be at the end of a string, if the `display' property takes up the whole string. */ @@ -8040,16 +7997,6 @@ next_element_from_image (struct it *it) return 1; } -#ifdef HAVE_XWIDGETS -/* im not sure about this FIXME JAVE*/ -static int -next_element_from_xwidget (struct it *it) -{ - it->what = IT_XWIDGET; - return 1; -} -#endif - /* Fill iterator IT with next display element from a stretch glyph property. IT->object is the value of the text property. Value is @@ -9703,7 +9650,7 @@ in_display_vector_p (struct it *it) && it->dpvec + it->current.dpvec_index != it->dpend); } -DEFUN ("window-text-pixel-size", Fwindow_text_pixel_size, Swindow_text_pixel_size, 0, 7, 0, +DEFUN ("window-text-pixel-size", Fwindow_text_pixel_size, Swindow_text_pixel_size, 0, 6, 0, doc: /* Return the size of the text of WINDOW's buffer in pixels. WINDOW must be a live window and defaults to the selected one. The return value is a cons of the maximum pixel-width of any text line and @@ -9736,42 +9683,28 @@ Optional argument MODE-AND-HEADER-LINE nil or omitted means do not include the height of the mode- or header-line of WINDOW in the return value. If it is either the symbol `mode-line' or `header-line', include only the height of that line, if present, in the return value. If t, -include the height of both, if present, in the return value. - -Optional argument BUFFER nil means to return the size of the text of -WINDOW's buffer. BUFFER t means to return the size of the text of the -current buffer as if it were displayed in WINDOW. Else BUFFER has to -specify a live buffer and this function returns the size of the text of -BUFFER as if it were displayed in WINDOW. */) - (Lisp_Object window, Lisp_Object from, Lisp_Object to, Lisp_Object x_limit, - Lisp_Object y_limit, Lisp_Object mode_and_header_line, Lisp_Object buffer) +include the height of both, if present, in the return value. */) + (Lisp_Object window, Lisp_Object from, Lisp_Object to, Lisp_Object x_limit, Lisp_Object y_limit, + Lisp_Object mode_and_header_line) { struct window *w = decode_live_window (window); + Lisp_Object buf; struct buffer *b; struct it it; - struct buffer *old_b = NULL; + struct buffer *old_buffer = NULL; ptrdiff_t start, end, pos; struct text_pos startp; void *itdata = NULL; int c, max_y = -1, x = 0, y = 0; - if (EQ (buffer, Qt)) - b = current_buffer; - else - { - if (NILP (buffer)) - buffer = w->contents; - - CHECK_BUFFER (buffer); - if (!BUFFER_LIVE_P (XBUFFER (buffer))) - error ("Not a live buffer"); + buf = w->contents; + CHECK_BUFFER (buf); + b = XBUFFER (buf); - b = XBUFFER (buffer); - if (b != current_buffer) - { - old_b = current_buffer; - set_buffer_internal (b); - } + if (b != current_buffer) + { + old_buffer = current_buffer; + set_buffer_internal (b); } if (NILP (from)) @@ -9847,8 +9780,8 @@ BUFFER as if it were displayed in WINDOW. */) bidi_unshelve_cache (itdata, 0); - if (old_b) - set_buffer_internal (old_b); + if (old_buffer) + set_buffer_internal (old_buffer); return Fcons (make_number (x), make_number (y)); } @@ -17070,13 +17003,6 @@ try_window_reusing_current_matrix (struct window *w) return 0; #endif -#ifdef HAVE_XWIDGETS_xxx - //currently this is needed to detect xwidget movement reliably. or probably not. - printf("try_window_reusing_current_matrix\n"); - return 0; -#endif - - if (/* This function doesn't handle terminal frames. */ !FRAME_WINDOW_P (f) /* Don't try to reuse the display if windows have been split @@ -18671,28 +18597,6 @@ dump_glyph (struct glyph_row *row, struct glyph *glyph, int area) glyph->left_box_line_p, glyph->right_box_line_p); } -#ifdef HAVE_XWIDGETS - else if (glyph->type == XWIDGET_GLYPH) - { - fprintf (stderr, - " %5d %4c %6d %c %3d 0x%05x %c %4d %1.1d%1.1d\n", - glyph - row->glyphs[TEXT_AREA], - 'X', - glyph->charpos, - (BUFFERP (glyph->object) - ? 'B' - : (STRINGP (glyph->object) - ? 'S' - : '-')), - glyph->pixel_width, - glyph->u.xwidget, - '.', - glyph->face_id, - glyph->left_box_line_p, - glyph->right_box_line_p); - - } -#endif } @@ -24110,13 +24014,6 @@ calc_pixel_width_or_height (double *res, struct it *it, Lisp_Object prop, return OK_PIXELS (width_p ? img->width : img->height); } -#ifdef HAVE_XWIDGETS - if (FRAME_WINDOW_P (it->f) && valid_xwidget_spec_p (prop)) - { - //TODO dont return dummy size - return OK_PIXELS (width_p ? 100 : 100); - } -#endif #endif if (EQ (car, Qplus) || EQ (car, Qminus)) { @@ -24621,18 +24518,6 @@ fill_image_glyph_string (struct glyph_string *s) } -#ifdef HAVE_XWIDGETS -static void -fill_xwidget_glyph_string (struct glyph_string *s) -{ - eassert (s->first_glyph->type == XWIDGET_GLYPH); - s->face = FACE_FROM_ID (s->f, s->first_glyph->face_id); - s->font = s->face->font; - s->width = s->first_glyph->pixel_width; - s->ybase += s->first_glyph->voffset; - s->xwidget = s->first_glyph->u.xwidget; -} -#endif /* Fill glyph string S from a sequence of stretch glyphs. START is the index of the first glyph to consider, @@ -24968,20 +24853,6 @@ compute_overhangs_and_x (struct glyph_string *s, int x, int backward_p) } \ while (0) -#ifdef HAVE_XWIDGETS -#define BUILD_XWIDGET_GLYPH_STRING(START, END, HEAD, TAIL, HL, X, LAST_X) \ - do \ - { \ - s = (struct glyph_string *) alloca (sizeof *s); \ - INIT_GLYPH_STRING (s, NULL, w, row, area, START, HL); \ - fill_xwidget_glyph_string (s); \ - append_glyph_string (&HEAD, &TAIL, s); \ - ++START; \ - s->x = (X); \ - } \ - while (0) -#endif - /* Add a glyph string for a sequence of character glyphs to the list of strings between HEAD and TAIL. START is the index of the first @@ -25103,7 +24974,7 @@ compute_overhangs_and_x (struct glyph_string *s, int x, int backward_p) to allocate glyph strings (because draw_glyphs can be called asynchronously). */ -#define BUILD_GLYPH_STRINGS_1(START, END, HEAD, TAIL, HL, X, LAST_X) \ +#define BUILD_GLYPH_STRINGS(START, END, HEAD, TAIL, HL, X, LAST_X) \ do \ { \ HEAD = TAIL = NULL; \ @@ -25134,15 +25005,8 @@ compute_overhangs_and_x (struct glyph_string *s, int x, int backward_p) case IMAGE_GLYPH: \ BUILD_IMAGE_GLYPH_STRING (START, END, HEAD, TAIL, \ HL, X, LAST_X); \ - break; - -#define BUILD_GLYPH_STRINGS_XW(START, END, HEAD, TAIL, HL, X, LAST_X) \ - case XWIDGET_GLYPH: \ - BUILD_XWIDGET_GLYPH_STRING (START, END, HEAD, TAIL, \ - HL, X, LAST_X); \ - break; - -#define BUILD_GLYPH_STRINGS_2(START, END, HEAD, TAIL, HL, X, LAST_X) \ + break; \ + \ case GLYPHLESS_GLYPH: \ BUILD_GLYPHLESS_GLYPH_STRING (START, END, HEAD, TAIL, \ HL, X, LAST_X); \ @@ -25161,18 +25025,6 @@ compute_overhangs_and_x (struct glyph_string *s, int x, int backward_p) } while (0) -#ifdef HAVE_XWIDGETS -#define BUILD_GLYPH_STRINGS(START, END, HEAD, TAIL, HL, X, LAST_X) \ -BUILD_GLYPH_STRINGS_1(START, END, HEAD, TAIL, HL, X, LAST_X) \ -BUILD_GLYPH_STRINGS_XW(START, END, HEAD, TAIL, HL, X, LAST_X) \ -BUILD_GLYPH_STRINGS_2(START, END, HEAD, TAIL, HL, X, LAST_X) -#else -#define BUILD_GLYPH_STRINGS(START, END, HEAD, TAIL, HL, X, LAST_X) \ -BUILD_GLYPH_STRINGS_1(START, END, HEAD, TAIL, HL, X, LAST_X) \ -BUILD_GLYPH_STRINGS_2(START, END, HEAD, TAIL, HL, X, LAST_X) -#endif - - /* Draw glyphs between START and END in AREA of ROW on window W, starting at x-position X. X is relative to AREA in W. HL is a face-override with the following meaning: @@ -25811,113 +25663,6 @@ produce_image_glyph (struct it *it) } } -#ifdef HAVE_XWIDGETS -static void -produce_xwidget_glyph (struct it *it) -{ - struct xwidget* xw; - struct face *face; - int glyph_ascent, crop; - eassert (it->what == IT_XWIDGET); - - face = FACE_FROM_ID (it->f, it->face_id); - eassert (face); - /* Make sure X resources of the face is loaded. */ - prepare_face_for_display (it->f, face); - - xw = it->xwidget; - it->ascent = it->phys_ascent = glyph_ascent = xw->height/2; - it->descent = xw->height/2; - it->phys_descent = it->descent; - it->pixel_width = xw->width; - /* It's quite possible for images to have an ascent greater than - their height, so don't get confused in that case. */ - if (it->descent < 0) - it->descent = 0; - - it->nglyphs = 1; - - if (face->box != FACE_NO_BOX) - { - if (face->box_line_width > 0) - { - it->ascent += face->box_line_width; - it->descent += face->box_line_width; - } - - if (it->start_of_box_run_p) - it->pixel_width += eabs (face->box_line_width); - it->pixel_width += eabs (face->box_line_width); - } - - take_vertical_position_into_account (it); - - /* Automatically crop wide image glyphs at right edge so we can - draw the cursor on same display row. */ - if ((crop = it->pixel_width - (it->last_visible_x - it->current_x), crop > 0) - && (it->hpos == 0 || it->pixel_width > it->last_visible_x / 4)) - { - it->pixel_width -= crop; - } - - if (it->glyph_row) - { - struct glyph *glyph; - enum glyph_row_area area = it->area; - - glyph = it->glyph_row->glyphs[area] + it->glyph_row->used[area]; - if (it->glyph_row->reversed_p) - { - struct glyph *g; - - /* Make room for the new glyph. */ - for (g = glyph - 1; g >= it->glyph_row->glyphs[it->area]; g--) - g[1] = *g; - glyph = it->glyph_row->glyphs[it->area]; - } - if (glyph < it->glyph_row->glyphs[area + 1]) - { - glyph->charpos = CHARPOS (it->position); - glyph->object = it->object; - glyph->pixel_width = it->pixel_width; - glyph->ascent = glyph_ascent; - glyph->descent = it->descent; - glyph->voffset = it->voffset; - glyph->type = XWIDGET_GLYPH; - glyph->avoid_cursor_p = it->avoid_cursor_p; - glyph->multibyte_p = it->multibyte_p; - if (it->glyph_row->reversed_p && area == TEXT_AREA) - { - /* In R2L rows, the left and the right box edges need to be - drawn in reverse direction. */ - glyph->right_box_line_p = it->start_of_box_run_p; - glyph->left_box_line_p = it->end_of_box_run_p; - } - else - { - glyph->left_box_line_p = it->start_of_box_run_p; - glyph->right_box_line_p = it->end_of_box_run_p; - } - glyph->overlaps_vertically_p = 0; - glyph->padding_p = 0; - glyph->glyph_not_available_p = 0; - glyph->face_id = it->face_id; - glyph->u.xwidget = it->xwidget; - //assert_valid_xwidget_id(glyph->u.xwidget_id,"produce_xwidget_glyph"); - glyph->font_type = FONT_TYPE_UNKNOWN; - if (it->bidi_p) - { - glyph->resolved_level = it->bidi_it.resolved_level; - eassert ((it->bidi_it.type & 7) == it->bidi_it.type); - glyph->bidi_type = it->bidi_it.type; - } - ++it->glyph_row->used[area]; - } - else - IT_EXPAND_MATRIX_WIDTH (it, area); - } -} -#endif /* Append a stretch glyph to IT->glyph_row. OBJECT is the source of the glyph, WIDTH and HEIGHT are the width and height of the @@ -27258,10 +27003,6 @@ x_produce_glyphs (struct it *it) produce_image_glyph (it); else if (it->what == IT_STRETCH) produce_stretch_glyph (it); -#ifdef HAVE_XWIDGETS - else if (it->what == IT_XWIDGET) - produce_xwidget_glyph (it); -#endif done: /* Accumulate dimensions. Note: can't assume that it->descent > 0 @@ -27631,12 +27372,6 @@ get_window_cursor_type (struct window *w, struct glyph *glyph, int *width, /* Use normal cursor if not blinked off. */ if (!w->cursor_off_p) { - -#ifdef HAVE_XWIDGETS - if (glyph != NULL && glyph->type == XWIDGET_GLYPH){ - return NO_CURSOR; - } -#endif if (glyph != NULL && glyph->type == IMAGE_GLYPH) { if (cursor_type == FILLED_BOX_CURSOR) diff --git a/src/xterm.c b/src/xterm.c index abceefb..3955d02 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -63,9 +63,6 @@ along with GNU Emacs. If not, see . */ #include "coding.h" #include "frame.h" #include "dispextern.h" -#ifdef HAVE_XWIDGETS -#include "xwidget.h" -#endif #include "fontset.h" #include "termhooks.h" #include "termopts.h" @@ -2679,13 +2676,6 @@ x_draw_glyph_string (struct glyph_string *s) x_draw_image_glyph_string (s); break; -#ifdef HAVE_XWIDGETS - case XWIDGET_GLYPH: - //erase xwidget background - //x_draw_glyph_string_background (s, 0); - x_draw_xwidget_glyph_string (s); - break; -#endif case STRETCH_GLYPH: x_draw_stretch_glyph_string (s); break; @@ -8026,11 +8016,6 @@ x_draw_bar_cursor (struct window *w, struct glyph_row *row, int width, enum text if (cursor_glyph == NULL) return; -#ifdef HAVE_XWIDGETS - if (cursor_glyph->type == XWIDGET_GLYPH){ - return; //experimental avoidance of cursor on xwidget - } -#endif /* If on an image, draw like a normal cursor. That's usually better visible than drawing a bar, esp. if the image is large so that the bar might not be in the window. */ diff --git a/src/xwidget.c b/src/xwidget.c deleted file mode 100644 index 747e803..0000000 --- a/src/xwidget.c +++ /dev/null @@ -1,1853 +0,0 @@ -#include -#ifdef HAVE_XWIDGETS - -#include - -#include -#include -#ifdef HAVE_X_WINDOWS - -#include "lisp.h" -#include "blockinput.h" -#include "syssignal.h" - -#include "xterm.h" -#include - -#ifndef makedev -#include -#endif /* makedev */ - -#ifdef BSD_SYSTEM -#include -#endif /* ! defined (BSD_SYSTEM) */ - -#include "systime.h" - -#ifndef INCLUDED_FCNTL -#include -#endif -#include -#include -#include -#include - -#include "charset.h" -#include "character.h" -#include "coding.h" -#include "ccl.h" -#include "frame.h" -#include "dispextern.h" -#include "fontset.h" -#include "termhooks.h" -#include "termopts.h" -#include "termchar.h" -#include "emacs-icon.h" -#include "disptab.h" -#include "buffer.h" -#include "window.h" -#include "keyboard.h" -#include "intervals.h" -#include "process.h" -#include "atimer.h" -#include "keymap.h" - - -#ifdef USE_X_TOOLKIT -#include -#endif -#include -#include -#include -#ifdef HAVE_SYS_TIME_H -#include -#endif -#ifdef HAVE_UNISTD_H -#include -#endif - -#include "gtkutil.h" -#include "font.h" -#endif /* HAVE_X_WINDOWS */ - -#include -#include - -#ifdef HAVE_GTK3 -//for gtk3; sockets and plugs -#include -#include -#include "emacsgtkfixed.h" -#endif - -#include - -#ifdef HAVE_WEBKIT_OSR -#include -#include -#include -#include -#include -#include -#include -#endif - -//for GIR -#include - -#include "xwidget.h" - -//TODO embryo of lisp allocators for xwidgets -//TODO xwidget* should be Lisp_xwidget* -struct xwidget* -allocate_xwidget (void) -{ - return ALLOCATE_PSEUDOVECTOR (struct xwidget, height, PVEC_XWIDGET); -} - -//TODO xwidget_view* should be Lisp_xwidget_view* -struct xwidget_view* -allocate_xwidget_view (void) -{ - return ALLOCATE_PSEUDOVECTOR (struct xwidget_view, redisplayed, PVEC_XWIDGET_VIEW); -} -#define XSETXWIDGET(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_XWIDGET)) -#define XSETXWIDGET_VIEW(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_XWIDGET_VIEW)) - -struct xwidget_view* xwidget_view_lookup(struct xwidget* xw, struct window *w); -Lisp_Object xwidget_spec_value ( Lisp_Object spec, Lisp_Object key, int *found); -gboolean offscreen_damage_event (GtkWidget *widget, GdkEvent *event, gpointer data); -void webkit_osr_document_load_finished_callback (WebKitWebView *webkitwebview, - WebKitWebFrame *arg1, - gpointer user_data); -gboolean webkit_osr_download_callback (WebKitWebView *webkitwebview, - WebKitDownload *arg1, - gpointer data); - -gboolean webkit_osr_mime_type_policy_typedecision_requested_callback(WebKitWebView *webView, - WebKitWebFrame *frame, - WebKitNetworkRequest *request, - gchar *mimetype, - WebKitWebPolicyDecision *policy_decision, - gpointer user_data); - -gboolean webkit_osr_new_window_policy_decision_requested_callback(WebKitWebView *webView, - WebKitWebFrame *frame, - WebKitNetworkRequest *request, - WebKitWebNavigationAction *navigation_action, - WebKitWebPolicyDecision *policy_decision, - gpointer user_data); - - -gboolean webkit_osr_navigation_policy_decision_requested_callback(WebKitWebView *webView, - WebKitWebFrame *frame, - WebKitNetworkRequest *request, - WebKitWebNavigationAction *navigation_action, - WebKitWebPolicyDecision *policy_decision, - gpointer user_data); - -GtkWidget* xwgir_create(char* class, char* namespace); - - - -static void -send_xembed_ready_event (struct xwidget* xw, int xembedid); -DEFUN ("make-xwidget", Fmake_xwidget, Smake_xwidget, 7, 8, 0, - doc: /* Make an xwidget from BEG to END of TYPE. - -If BUFFER is nil it uses the current buffer. If BUFFER is a string and -no such buffer exists, it is created. - -TYPE is a symbol which can take one of the following values: -- Button -- ToggleButton -- slider -- socket -- socket-osr -- cairo -*/ - ) - (Lisp_Object beg, Lisp_Object end, - Lisp_Object type, - Lisp_Object title, - Lisp_Object width, Lisp_Object height, - Lisp_Object data, - Lisp_Object buffer) -{ - //should work a bit like "make-button"(make-button BEG END &rest PROPERTIES) - // arg "type" and fwd should be keyword args eventually - //(make-xwidget 3 3 'button "oei" 31 31 nil) - //(xwidget-info (car xwidget-list)) - struct xwidget* xw = allocate_xwidget(); - Lisp_Object val; - xw->type = type; - xw->title = title; - if (NILP (buffer)) - buffer = Fcurrent_buffer(); // no need to gcpro because Fcurrent_buffer doesn't call Feval/eval_sub. - else - buffer = Fget_buffer_create (buffer); - xw->buffer = buffer; - - xw->height = XFASTINT(height); - xw->width = XFASTINT(width); - xw->kill_without_query = 0; - XSETXWIDGET (val, xw); // set the vectorlike_header of VAL with the correct value - Vxwidget_list = Fcons (val, Vxwidget_list); - xw->widgetwindow_osr = NULL; - xw->widget_osr = NULL; - xw->plist = Qnil; - - - - -#ifdef HAVE_WEBKIT_OSR - /* DIY mvc. widget is rendered offscreen, - later bitmap copied to the views. - */ - if (EQ(xw->type, Qwebkit_osr)|| - EQ(xw->type, Qsocket_osr)|| - (!NILP (Fget(xw->type, QCxwgir_class)))) { - block_input(); - xw->widgetwindow_osr = gtk_offscreen_window_new (); - gtk_window_resize(GTK_WINDOW(xw->widgetwindow_osr), xw->width, xw->height); - xw->widgetscrolledwindow_osr = NULL; //webkit osr is the only scrolled component atm - - if (EQ(xw->type, Qwebkit_osr)){ - xw->widgetscrolledwindow_osr = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(xw->widgetscrolledwindow_osr ),xw->height); - gtk_scrolled_window_set_min_content_width(GTK_SCROLLED_WINDOW(xw->widgetscrolledwindow_osr ),xw->width); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(xw->widgetscrolledwindow_osr ), GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS); - - xw->widget_osr=webkit_web_view_new(); - gtk_container_add(GTK_CONTAINER(xw->widgetscrolledwindow_osr ), GTK_WIDGET( WEBKIT_WEB_VIEW(xw->widget_osr))); - } - if(EQ(xw->type, Qsocket_osr)) - xw->widget_osr = gtk_socket_new(); - if(!NILP (Fget(xw->type, QCxwgir_class))) - xw->widget_osr = xwgir_create(SDATA(Fcar(Fcdr(Fget(xw->type, QCxwgir_class)))), - SDATA(Fcar(Fget(xw->type, QCxwgir_class)))); - - gtk_widget_set_size_request (GTK_WIDGET (xw->widget_osr), xw->width, xw->height); - - if (EQ(xw->type, Qwebkit_osr)){ - gtk_container_add (GTK_CONTAINER (xw->widgetwindow_osr), xw->widgetscrolledwindow_osr); - }else{ - gtk_container_add (GTK_CONTAINER (xw->widgetwindow_osr), xw->widget_osr); - } - - gtk_widget_show (xw->widget_osr); - gtk_widget_show (xw->widgetwindow_osr); - gtk_widget_show (xw->widgetscrolledwindow_osr); - - /* store some xwidget data in the gtk widgets for convenient retrieval in the event handlers. */ - g_object_set_data (G_OBJECT (xw->widget_osr), XG_XWIDGET, (gpointer) (xw)); - g_object_set_data (G_OBJECT (xw->widgetwindow_osr), XG_XWIDGET, (gpointer) (xw)); - - /* signals */ - if (EQ(xw->type, Qwebkit_osr)) { - g_signal_connect (G_OBJECT (xw->widget_osr), - "document-load-finished", - G_CALLBACK (webkit_osr_document_load_finished_callback), - xw); - - g_signal_connect (G_OBJECT (xw->widget_osr), - "download-requested", - G_CALLBACK (webkit_osr_download_callback), - xw); - - g_signal_connect (G_OBJECT (xw->widget_osr), - "mime-type-policy-decision-requested", - G_CALLBACK (webkit_osr_mime_type_policy_typedecision_requested_callback), - xw); - - g_signal_connect (G_OBJECT (xw->widget_osr), - "new-window-policy-decision-requested", - G_CALLBACK (webkit_osr_new_window_policy_decision_requested_callback), - xw); - - g_signal_connect (G_OBJECT (xw->widget_osr), - "navigation-policy-decision-requested", - G_CALLBACK (webkit_osr_navigation_policy_decision_requested_callback), - xw); - } - - if (EQ(xw->type, Qsocket_osr)) { - send_xembed_ready_event (xw, gtk_socket_get_id (GTK_SOCKET (xw->widget_osr))); - //gtk_widget_realize(xw->widget); - } - - - unblock_input(); - - } -#endif /* HAVE_WEBKIT_OSR */ - - return val; -} - -DEFUN ("get-buffer-xwidgets", Fget_buffer_xwidgets, Sget_buffer_xwidgets, 1, 1, 0, - doc: /* Return a list of xwidgets associated with BUFFER. -BUFFER may be a buffer or the name of one. - */ - ) - (Lisp_Object buffer) -{ - Lisp_Object xw, tail, xw_list; - - if (NILP (buffer)) return Qnil; - buffer = Fget_buffer (buffer); - if (NILP (buffer)) return Qnil; - - xw_list = Qnil; - - for (tail = Vxwidget_list; CONSP (tail); tail = XCDR (tail)) - { - xw = XCAR (tail); - if (XWIDGETP (xw) && EQ (Fxwidget_buffer (xw), buffer)) - xw_list = Fcons (xw, xw_list); - } - return xw_list; -} - -int -xwidget_hidden(struct xwidget_view *xv) -{ - return xv->hidden; -} - - -static void -buttonclick_handler (GtkWidget * widget, gpointer data) -{ - Lisp_Object xwidget_view, xwidget; - XSETXWIDGET_VIEW (xwidget_view, (struct xwidget_view *) data); - xwidget = Fxwidget_view_model (xwidget_view); - - struct input_event event; - Lisp_Object frame = Fwindow_frame (Fxwidget_view_window (xwidget_view)); - struct frame *f = XFRAME (frame); - printf ("button clicked xw:%d '%s'\n", XXWIDGET (xwidget), XXWIDGET (xwidget)->title); - - EVENT_INIT (event); - event.kind = XWIDGET_EVENT; - - event.frame_or_window = frame; - - event.arg = Qnil; - event.arg = Fcons (xwidget, event.arg); - event.arg = Fcons (intern ("buttonclick"), event.arg); - - kbd_buffer_store_event (&event); -} - - -static void -send_xembed_ready_event (struct xwidget* xw, int xembedid) -{ - Lisp_Object xw_lo; - XSETXWIDGET(xw_lo, xw); - struct input_event event; - EVENT_INIT (event); - event.kind = XWIDGET_EVENT; - event.frame_or_window = Qnil; //frame; //how to get the frame here? //TODO i store it in the xwidget now - - event.arg = Qnil; - event.arg = Fcons (make_number (xembedid), event.arg); - event.arg = Fcons (xw_lo, event.arg); - event.arg = Fcons (intern ("xembed-ready"), event.arg); - - - kbd_buffer_store_event (&event); - -} - -void -xwidget_show_view (struct xwidget_view *xv) -{ - xv->hidden = 0; - gtk_widget_show(xv->widgetwindow); - gtk_fixed_move (GTK_FIXED (xv->emacswindow), xv->widgetwindow, xv->x + xv->clip_left, xv->y + xv->clip_top); //TODO refactor -} - - -/* hide an xvidget view */ -void -xwidget_hide_view (struct xwidget_view *xv) -{ - xv->hidden = 1; - //gtk_widget_hide(xw->widgetwindow); - gtk_fixed_move (GTK_FIXED (xv->emacswindow), xv->widgetwindow, - 10000, 10000); -} - - -void -xwidget_plug_added(GtkSocket *socket, - gpointer user_data) -{ - //hmm this doesnt seem to get called for foreign windows - printf("xwidget_plug_added\n"); -} - -gboolean -xwidget_plug_removed(GtkSocket *socket, - gpointer user_data) -{ - printf("xwidget_plug_removed\n"); - return TRUE; /* dont run the default handler because that kills the socket and we want to reuse it*/ -} - - -void -xwidget_slider_changed (GtkRange *range, - gpointer user_data) -{ - //slider value changed. change value of siblings - //correspondingly. but remember that changing value will again - //trigger signal - - //TODO MVC view storage wont be an array futureish so the loop needs to change eventually - //TODO MVC it would be nice if this code could be reusable but, alas, C is not a functional language - //issues are: - // - the type of the controllers value (double, boolean etc) - // - the getter and setter (but they can be func pointers) - // a behemoth macro is always an option. - double v=gtk_range_get_value(range); - struct xwidget_view* xvp = g_object_get_data (G_OBJECT (range), XG_XWIDGET_VIEW); - struct xwidget_view* xv; - - printf("slider changed val:%f\n", v); - - for (Lisp_Object tail = Vxwidget_view_list; CONSP (tail); tail = XCDR (tail)) - { - if (XWIDGET_VIEW_P (XCAR (tail))) { - xv = XXWIDGET_VIEW (XCAR (tail)); - if (EQ (xvp->model, xv->model)) { - //block sibling views signal handlers - g_signal_handler_block(xv->widget, xv->handler_id); - - //set values of sibling views and unblock - gtk_range_set_value(GTK_RANGE(xv->widget), v); - g_signal_handler_unblock(xv->widget,xv->handler_id); - } - } - } -} - - -/* when the off-screen webkit master view changes this signal is called. - it copies the bitmap from the off-screen webkit instance */ -gboolean -offscreen_damage_event (GtkWidget *widget, GdkEvent *event, gpointer data) -{ - //TODO this is wrong! should just queu a redraw of onscreen widget - gtk_widget_queue_draw (GTK_WIDGET (data)); - return FALSE; -} - -void -store_xwidget_event_string(struct xwidget* xw, char* eventname, const char* eventstr) -{ - //refactor attempt - struct input_event event; - Lisp_Object xwl; - XSETXWIDGET(xwl,xw); - EVENT_INIT (event); - event.kind = XWIDGET_EVENT; - event.frame_or_window = Qnil; //frame; //how to get the frame here? //TODO i store it in the xwidget now - - event.arg = Qnil; - event.arg = Fcons (build_string(eventstr), event.arg); //string so dont intern - event.arg = Fcons (xwl, event.arg); //TODO - event.arg = Fcons (intern (eventname), event.arg);//interning should be ok - kbd_buffer_store_event (&event); - -} - -//TODO deprecated, use load-status -void -webkit_osr_document_load_finished_callback (WebKitWebView *webkitwebview, - WebKitWebFrame *arg1, - gpointer data) -{ - //TODO this event sending code should be refactored - // struct xwidget *xw = (struct xwidget *) data; - struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (webkitwebview), XG_XWIDGET); - printf("webkit finished loading\n"); - - store_xwidget_event_string(xw, - "document-load-finished", ""); -} - -gboolean -webkit_osr_download_callback (WebKitWebView *webkitwebview, - WebKitDownload *arg1, - gpointer data) -{ - //TODO this event sending code should be refactored - struct input_event event; - // struct xwidget *xw = (struct xwidget *) data; - struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (webkitwebview), XG_XWIDGET); - printf("download requested %s\n", webkit_download_get_uri (arg1)); - - - printf("webkit finished loading\n"); - - store_xwidget_event_string(xw, "download-requested", webkit_download_get_uri (arg1)); - - return FALSE; -} - -gboolean -webkit_osr_mime_type_policy_typedecision_requested_callback(WebKitWebView *webView, - WebKitWebFrame *frame, - WebKitNetworkRequest *request, - gchar *mimetype, - WebKitWebPolicyDecision *policy_decision, - gpointer user_data) -{ - printf("mime policy requested\n"); - // this function makes webkit send a download signal for all unknown mime types - // TODO defer the decision to lisp, so that its possible to make Emacs handle text mime for instance - if(!webkit_web_view_can_show_mime_type(webView, mimetype)){ - webkit_web_policy_decision_download (policy_decision); - return TRUE; - }else{ - return FALSE; - } -} - - -gboolean -webkit_osr_new_window_policy_decision_requested_callback(WebKitWebView *webView, - WebKitWebFrame *frame, - WebKitNetworkRequest *request, - WebKitWebNavigationAction *navigation_action, - WebKitWebPolicyDecision *policy_decision, - gpointer user_data) -{ - struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (webView), XG_XWIDGET); - printf("webkit_osr_new_window_policy_decision_requested_callback %s\n", - webkit_web_navigation_action_get_original_uri (navigation_action)); - - store_xwidget_event_string(xw, "new-window-policy-decision-requested", webkit_web_navigation_action_get_original_uri (navigation_action) - ); - return FALSE; -} - -gboolean -webkit_osr_navigation_policy_decision_requested_callback(WebKitWebView *webView, - WebKitWebFrame *frame, - WebKitNetworkRequest *request, - WebKitWebNavigationAction *navigation_action, - WebKitWebPolicyDecision *policy_decision, - gpointer user_data) -{ - struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (webView), XG_XWIDGET); - printf("webkit_osr_navigation_policy_decision_requested_callback %s\n", - webkit_web_navigation_action_get_original_uri (navigation_action)); - store_xwidget_event_string(xw, "navigation-policy-decision-requested", webkit_web_navigation_action_get_original_uri (navigation_action) - ); - return FALSE; -} - -//for gtk3 offscreen rendered widgets -gboolean -xwidget_osr_draw_callback (GtkWidget *widget, cairo_t *cr, gpointer data) -{ - struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET); - struct xwidget_view* xv = (struct xwidget_view*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET_VIEW); - - cairo_rectangle(cr, 0,0, xv->clip_right, xv->clip_bottom);//xw->width, xw->height); - cairo_clip(cr); - - // - if(xw->widgetscrolledwindow_osr != NULL) - gtk_widget_draw (xw->widgetscrolledwindow_osr, cr); - else - gtk_widget_draw (xw->widget_osr, cr); - return FALSE; -} - -GtkWidget* xwgir_create_debug; - - - -gboolean -xwidget_osr_event_forward (GtkWidget *widget, - GdkEvent *event, - gpointer user_data) -{ - /* copy events that arrive at the outer widget to the offscreen widget */ - struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET); - GdkEvent* eventcopy = gdk_event_copy(event); - eventcopy->any.window = gtk_widget_get_window(xw->widget_osr);// works - - /* printf("xwidget_osr_event_forward redirect event to window:%d\n", ((GdkEventAny*)eventcopy)->window); */ - /* printf("A type:%d x:%f y:%f \n", event->type, event->button.x, event->button.y); */ - /* printf("B type:%d x:%f y:%f \n", eventcopy->type, eventcopy->button.x, eventcopy->button.y); */ - //gtk_button_get_event_window(xwgir_create_debug); - gtk_main_do_event(eventcopy); //TODO this will leak events. they should be deallocated later, perhaps in xwgir_event_callback - return TRUE; //dont propagate this event furter -} - -GIRepository *girepository ; - -DEFUN ("xwgir-require-namespace", Fxwgir_require_namespace, Sxwgir_require_namespace, 2,2,0, - doc: /* Require a GObject Introspection namespace. - This must be done for all namespaces we want to use, before using other xwgir functions.*/) - (Lisp_Object lnamespace, Lisp_Object lnamespace_version) -{ - char* namespace = SDATA(lnamespace); - char* namespace_version = SDATA(lnamespace_version); - GError *error = NULL; - - girepository = g_irepository_get_default(); - g_irepository_require(girepository, namespace, namespace_version, 0, &error); - if (error) { - g_error("ERROR: %s\n", error->message); - return Qnil; - } - return Qt; -} - -GtkWidget* xwgir_create(char* class, char* namespace){ - //TODO this is more or less the same as xwgir-call-method, so should be refactored - //create a gtk widget, given its name - //find the constructor - //call it - //also figure out how to pass args - - GError *error = NULL; - GIArgument return_value; - - GIObjectInfo* obj_info = g_irepository_find_by_name(girepository, namespace, class); - GIFunctionInfo* f_info = g_object_info_find_method (obj_info, "new"); - g_function_info_invoke(f_info, - NULL, 0, - NULL, 0, - &return_value, - NULL); - xwgir_create_debug = return_value.v_pointer; - return return_value.v_pointer; - -} - -int -xwgir_convert_lisp_to_gir_arg(GIArgument* giarg, - GIArgInfo* arginfo, - Lisp_Object lisparg ) -{ - - GITypeTag tag; - gboolean is_pointer; - gboolean is_enum; - tag = g_type_info_get_tag (g_arg_info_get_type (arginfo)); - - switch (tag) - { - case GI_TYPE_TAG_BOOLEAN: - giarg->v_boolean = XFASTINT(lisparg); - break; - case GI_TYPE_TAG_INT8: - giarg->v_int8 = XFASTINT(lisparg); - break; - case GI_TYPE_TAG_UINT8: - giarg->v_uint8 = XFASTINT(lisparg); - break; - case GI_TYPE_TAG_INT16: - giarg->v_int16 = XFASTINT(lisparg); - break; - case GI_TYPE_TAG_UINT16: - giarg->v_uint16 = XFASTINT(lisparg); - break; - case GI_TYPE_TAG_INT32: - giarg->v_int32 = XFASTINT(lisparg); - break; - case GI_TYPE_TAG_UINT32: - giarg->v_uint32 = XFASTINT(lisparg); - break; - - case GI_TYPE_TAG_INT64: - giarg->v_int64 = XFASTINT(lisparg); - break; - case GI_TYPE_TAG_UINT64: - giarg->v_uint64 = XFASTINT(lisparg); - break; - - - case GI_TYPE_TAG_FLOAT: - giarg->v_float = XFLOAT_DATA(lisparg); - break; - - case GI_TYPE_TAG_DOUBLE: - giarg->v_double = XFLOAT_DATA(lisparg); - break; - - case GI_TYPE_TAG_UTF8: - case GI_TYPE_TAG_FILENAME: - //giarg->v_string = SDATA(lisparg); - giarg->v_pointer = SDATA(lisparg); - break; - - case GI_TYPE_TAG_ARRAY: - case GI_TYPE_TAG_GLIST: - case GI_TYPE_TAG_GSLIST: - case GI_TYPE_TAG_GHASH: - case GI_TYPE_TAG_ERROR: - case GI_TYPE_TAG_INTERFACE: - case GI_TYPE_TAG_VOID: - case GI_TYPE_TAG_UNICHAR: - case GI_TYPE_TAG_GTYPE: - //?? i dont know how to handle these yet TODO - printf("failed in my lisp to gir arg conversion duties. sob!\n"); - return -1; - break; - } - return 0; -} - -#if 0 -void -refactor_attempt(){ - //this methhod should be called from xwgir-xwidget-call-method and from xwgir xwidget construction - char* class = SDATA(Fcar(Fcdr(Fget(xw->type, QCxwgir_class)))); - - GIObjectInfo* obj_info = g_irepository_find_by_name(girepository, namespace, class); - GIFunctionInfo* f_info = g_object_info_find_method (obj_info, SDATA(method)); - - //loop over args, convert from lisp to primitive type, given arg introspection data - //TODO g_callable_info_get_n_args(f_info) should match - int argscount = XFASTINT(Flength(arguments)); - if(argscount != g_callable_info_get_n_args(f_info)){ - printf("xwgir call method arg count doesn match! \n"); - return Qnil; - } - int i; - for (i = 1; i < argscount + 1; ++i) - { - xwgir_convert_lisp_to_gir_arg(&in_args[i], g_callable_info_get_arg(f_info, i - 1), Fnth(i - 1, arguments)); - } - - in_args[0].v_pointer = widget; - if(g_function_info_invoke(f_info, - in_args, argscount + 1, - NULL, 0, - &return_value, - &error)) { - //g_error("ERROR: %s\n", error->message); - printf("invokation error\n"); - return Qnil; - } - return Qt; -} -#endif /* 0 */ - -DEFUN ("xwgir-xwidget-call-method", Fxwgir_xwidget_call_method, Sxwgir_xwidget_call_method, 3, 3, 0, - doc: /* Call Xwidget object method using GObject Introspection. - XWIDGET is the xwidget instance to act upon. - METHOD is the Gobject intrsopsection method name. - ARGUMENTS is a list of arguments for the call. They will be converted to GObject types from Lisp types. - */) - (Lisp_Object xwidget, Lisp_Object method, Lisp_Object arguments) -{ - CHECK_XWIDGET (xwidget); - GError *error = NULL; - GIArgument return_value; - GIArgument in_args[20]; - - - struct xwidget* xw; - if (NILP (xwidget)) { printf("ERROR xwidget nil\n"); return Qnil; }; - xw = XXWIDGET(xwidget); - if(NULL == xw) printf("ERROR xw is 0\n"); - char* namespace = SDATA(Fcar(Fget(xw->type, QCxwgir_class))); - //we need the concrete widget, which happens in 2 ways depending on OSR or not TODO - GtkWidget* widget = NULL; - if(NULL == xw->widget_osr) { - widget = xwidget_view_lookup (xw, XWINDOW(FRAME_SELECTED_WINDOW (SELECTED_FRAME ()))) -> widget; - } else { - widget = xw->widget_osr; - } - - //char* class = SDATA(SYMBOL_NAME(xw->type)); //this works but is unflexible - //figure out the class from the widget instead - /* printf("type class: %s %s\n", G_OBJECT_TYPE_NAME(widget), G_OBJECT_CLASS_NAME(G_OBJECT_GET_CLASS(widget))); */ - /* char* class = G_OBJECT_TYPE_NAME(widget); //gives "GtkButton"(I want "Button") */ - /* class += strlen(namespace); //TODO check for corresponding api method. but this seems to work. */ - - char* class = SDATA(Fcar(Fcdr(Fget(xw->type, QCxwgir_class)))); - - GIObjectInfo* obj_info = g_irepository_find_by_name(girepository, namespace, class); - GIFunctionInfo* f_info = g_object_info_find_method (obj_info, SDATA(method)); - - //loop over args, convert from lisp to primitive type, given arg introspection data - //TODO g_callable_info_get_n_args(f_info) should match - int argscount = XFASTINT(Flength(arguments)); - if(argscount != g_callable_info_get_n_args(f_info)){ - printf("xwgir call method arg count doesn match! \n"); - return Qnil; - } - int i; - Lisp_Object n; - for (i = 1; i < argscount + 1; ++i) - { - XSETFASTINT (n, i - 1); - xwgir_convert_lisp_to_gir_arg(&in_args[i], g_callable_info_get_arg(f_info, i - 1), Fnth(n, arguments)); - } - - in_args[0].v_pointer = widget; - if(g_function_info_invoke(f_info, - in_args, argscount + 1, - NULL, 0, - &return_value, - &error)) { - //g_error("ERROR: %s\n", error->message); - printf("invokation error\n"); - return Qnil; - } - return Qt; -} - - void -to_child (GtkWidget *bin, - double widget_x, - double widget_y, - double *x_out, - double *y_out) -{ - *x_out = widget_x; - *y_out = widget_y; -} - - -GdkWindow * -offscreen_pick_embedded_child (GdkWindow *window, - double x, - double y, - gpointer *data) -{ - //in this simple case we assume the window contains a single widget. easy. - //but then we get the problem that the widget cant be embedded in several windows - return gtk_widget_get_window (GTK_WIDGET (data)); -} - -void -offscreen_to_embedder (GdkWindow *window, - gdouble offscreen_x, - gdouble offscreen_y, - gpointer embedder_x, - gpointer embedder_y, - gpointer data) -{ - * (gdouble *) embedder_x = offscreen_x; - * (gdouble *) embedder_y = offscreen_y; -} - -void -offscreen_from_embedder (GdkWindow *window, - gdouble embedder_x, - gdouble embedder_y, - gpointer offscreen_x, - gpointer offscreen_y, - gpointer user_data) -{ - * (gdouble *) offscreen_x = embedder_x; - * (gdouble *) offscreen_y = embedder_y; -} - -gboolean -xwidget_osr_event_set_embedder (GtkWidget *widget, - GdkEvent *event, - gpointer data) -{ - struct xwidget_view *xv = (struct xwidget_view *) data; - struct xwidget *xww = XXWIDGET (xv->model); - printf("gdk_offscreen_window_set_embedder %d %d\n", - GDK_IS_WINDOW(gtk_widget_get_window (xww->widget_osr)), - GDK_IS_WINDOW(gtk_widget_get_window (GTK_WIDGET (xv->widget)))); - gdk_offscreen_window_set_embedder (gtk_widget_get_window (xww->widgetwindow_osr), - gtk_widget_get_window (xv->widget)); -} - - -/* initializes and does initial placement of an xwidget view on screen */ -struct xwidget_view* -xwidget_init_view (struct xwidget *xww, - struct glyph_string *s, - int x, int y) -{ - struct xwidget_view *xv = allocate_xwidget_view(); - Lisp_Object val; - GdkColor color; - - XSETXWIDGET_VIEW (val, xv) ; - Vxwidget_view_list = Fcons (val, Vxwidget_view_list); - - XSETWINDOW(xv->w, s->w); - XSETXWIDGET(xv->model, xww); - - //widget creation - if(EQ(xww->type, Qbutton)) - { - xv->widget = gtk_button_new_with_label (XSTRING(xww->title)->data); - g_signal_connect (G_OBJECT (xv->widget), "clicked", - G_CALLBACK (buttonclick_handler), xv); // the view rather than the model - } else if (EQ(xww->type, Qtoggle)) { - xv->widget = gtk_toggle_button_new_with_label (XSTRING(xww->title)->data); - //xv->widget = gtk_entry_new ();//temp hack to experiment with key propagation TODO entry widget is useful for testing - } else if (EQ(xww->type, Qsocket)) { - xv->widget = gtk_socket_new (); - g_signal_connect_after(xv->widget, "plug-added", G_CALLBACK(xwidget_plug_added), "plug added"); - g_signal_connect_after(xv->widget, "plug-removed", G_CALLBACK(xwidget_plug_removed), "plug removed"); - //TODO these doesnt help - gtk_widget_add_events(xv->widget, GDK_KEY_PRESS); - gtk_widget_add_events(xv->widget, GDK_KEY_RELEASE); - } else if (EQ(xww->type, Qslider)) { - xv->widget = - //gtk_hscale_new (GTK_ADJUSTMENT(gtk_adjustment_new (0.0, 0.0, 100.0, 1.0, 10.0, 10.0))); - gtk_hscale_new_with_range ( 0.0, 100.0, 10.0); - gtk_scale_set_draw_value (GTK_SCALE (xv->widget), FALSE); //i think its emacs role to show text and stuff, so disable the widgets own text - xv->handler_id = g_signal_connect_after(xv->widget, "value-changed", G_CALLBACK(xwidget_slider_changed), "slider changed"); - } else if (EQ(xww->type, Qcairo)) { - //Cairo view - //uhm cairo is differentish in gtk 3. - //gdk_cairo_create (gtk_widget_get_window (FRAME_GTK_WIDGET (s->f))); - xv->widget = gtk_drawing_area_new(); - g_signal_connect (G_OBJECT ( xv->widget), "draw", - G_CALLBACK (xwidget_osr_draw_callback), NULL); - - } else if (EQ(xww->type, Qwebkit_osr)|| - EQ(xww->type, Qsocket_osr)|| - (!NILP (Fget(xww->type, QCxwgir_class))))//xwgir widgets are OSR - { - printf("osr init:%s\n",SDATA(SYMBOL_NAME(xww->type))); - xv->widget = gtk_drawing_area_new(); - gtk_widget_set_app_paintable ( xv->widget, TRUE); //because expose event handling - gtk_widget_add_events(xv->widget, GDK_ALL_EVENTS_MASK); - - /* Draw the view on damage-event */ - g_signal_connect (G_OBJECT (xww->widgetwindow_osr), "damage-event", - G_CALLBACK (offscreen_damage_event), xv->widget); - - if (EQ(xww->type, Qwebkit_osr)){ - /* ///xwgir debug */ - /* //forward events. this isnt compatible with the set_embedded strategy */ - g_signal_connect (G_OBJECT ( xv->widget), "button-press-event", - G_CALLBACK (xwidget_osr_event_forward), NULL); - g_signal_connect (G_OBJECT ( xv->widget), "button-release-event", - G_CALLBACK (xwidget_osr_event_forward), NULL); - g_signal_connect (G_OBJECT ( xv->widget), "motion-notify-event", - G_CALLBACK (xwidget_osr_event_forward), NULL); - }else{ - //xwgir debug , orthogonal to forwarding - g_signal_connect (G_OBJECT (xv->widget), "enter-notify-event", - G_CALLBACK (xwidget_osr_event_set_embedder), xv); - } - - //draw - g_signal_connect (G_OBJECT (xv->widget), "draw", - G_CALLBACK (xwidget_osr_draw_callback), NULL); - - } - //else return NULL; - - //widget realization - //make container widget 1st, and put the actual widget inside the container - //later, drawing should crop container window if necessary to handle case where xwidget - //is partially obscured by other emacs windows - //other containers than gtk_fixed where explored, but gtk_fixed had the most predictable behaviour so far. - xv->emacswindow = FRAME_GTK_WIDGET (s->f); - xv->widgetwindow = gtk_fixed_new (); - gtk_widget_set_has_window(xv->widgetwindow, TRUE); - gtk_container_add (GTK_CONTAINER (xv->widgetwindow), xv->widget); - - //store some xwidget data in the gtk widgets - g_object_set_data (G_OBJECT (xv->widget), XG_FRAME_DATA, (gpointer) (s->f)); //the emacs frame - g_object_set_data (G_OBJECT (xv->widget), XG_XWIDGET, (gpointer) (xww)); //the xwidget - g_object_set_data (G_OBJECT (xv->widget), XG_XWIDGET_VIEW, (gpointer) (xv)); //the xwidget - g_object_set_data (G_OBJECT (xv->widgetwindow), XG_XWIDGET, (gpointer) (xww)); //the xwidget window - g_object_set_data (G_OBJECT (xv->widgetwindow), XG_XWIDGET_VIEW, (gpointer) (xv)); //the xwidget window - - - gtk_widget_set_size_request (GTK_WIDGET (xv->widget), xww->width, xww->height); - gtk_widget_set_size_request (xv->widgetwindow, xww->width, xww->height); - gtk_fixed_put (GTK_FIXED (FRAME_GTK_WIDGET (s->f)), xv->widgetwindow, x, y); - xv->x = x; xv->y = y; - gtk_widget_show_all (xv->widgetwindow); - - - - //widgettype specific initialization only possible after realization - if (EQ(xww->type, Qsocket)) { - printf ("xwid:%d socket id:%x %d\n", - xww, - gtk_socket_get_id (GTK_SOCKET (xv->widget)), - gtk_socket_get_id (GTK_SOCKET (xv->widget))); - send_xembed_ready_event (xww, - gtk_socket_get_id (GTK_SOCKET (xv->widget))); - //gtk_widget_realize(xw->widget); - } - - ////////////////////////////////////////////////////////////// - // xwgir debug - if (//EQ(xww->type, Qwebkit_osr)|| //TODO should be able to choose compile time which method to use with webkit - EQ(xww->type, Qsocket_osr)|| - (!NILP (Fget(xww->type, QCxwgir_class))))//xwgir widgets are OSR - { - printf("gdk_offscreen_window_set_embedder %d %d\n", - GDK_IS_WINDOW(gtk_widget_get_window (xww->widget_osr)), - GDK_IS_WINDOW(gtk_widget_get_window (GTK_WIDGET (xv->widget)))); - // set_embedder needs to be called after xv->widget realization - gdk_offscreen_window_set_embedder (gtk_widget_get_window (xww->widgetwindow_osr), - gtk_widget_get_window (xv->widget)); - g_signal_connect (gtk_widget_get_window (xv->widget), "pick-embedded-child", - G_CALLBACK (offscreen_pick_embedded_child), xww->widgetwindow_osr); - - g_signal_connect (gtk_widget_get_window (xww->widgetwindow_osr), "from-embedder", - G_CALLBACK (offscreen_from_embedder), NULL); - g_signal_connect (gtk_widget_get_window (xww->widgetwindow_osr), "to-embedder", - G_CALLBACK (offscreen_to_embedder), NULL); - } - //////////////////////////////////////// - - return xv; -} - - -void -x_draw_xwidget_glyph_string (struct glyph_string *s) -{ - /* - this method is called by the redisplay engine and places the xwidget on screen. - moving and clipping is done here. also view init. - - */ - int box_line_hwidth = eabs (s->face->box_line_width); - int box_line_vwidth = max (s->face->box_line_width, 0); - int height = s->height; - struct xwidget *xww = s->xwidget; - struct xwidget_view *xv = xwidget_view_lookup(xww, s->w); - int clip_right; int clip_bottom; int clip_top; int clip_left; - - int x = s->x; - int y = s->y + (s->height / 2) - (xww->height / 2); - int moved=0; - - /* We do it here in the display loop because there is no other - time to know things like window placement etc. - */ - printf ("xv init for xw %d\n", xww); - xv = xwidget_init_view (xww, s, x, y); - - //calculate clipping, which is used for all manner of onscreen xwidget views - //each widget border can get clipped by other emacs objects so there are four clipping variables - clip_right = min (xww->width, WINDOW_RIGHT_EDGE_X (s->w) - x - WINDOW_RIGHT_SCROLL_BAR_AREA_WIDTH(s->w) - WINDOW_RIGHT_FRINGE_WIDTH(s->w)); - clip_left = max (0, WINDOW_LEFT_EDGE_X (s->w) - x + WINDOW_LEFT_SCROLL_BAR_AREA_WIDTH(s->w) + WINDOW_LEFT_FRINGE_WIDTH(s->w)); - - clip_bottom = min (xww->height, WINDOW_BOTTOM_EDGE_Y (s->w) - WINDOW_MODE_LINE_HEIGHT (s->w) - y); - clip_top = max(0, WINDOW_TOP_EDGE_Y(s->w) -y ); - - //we are conserned with movement of the onscreen area. the area might sit still when the widget actually moves - //this happens when an emacs window border moves across a widget window - //so, if any corner of the outer widget clippng window moves, that counts as movement here, even - //if it looks like no movement happens because the widget sits still inside the clipping area. - //the widget can also move inside the clipping area, which happens later - moved = (xv->x + xv->clip_left != x+clip_left) - || ((xv->y + xv->clip_top)!= (y+clip_top)); - xv->x = x; - xv->y = y; - if (moved) //has it moved? - { - if (1)//!xwidget_hidden(xv)) //hidden equals not being seen during redisplay - { - //TODO should be possible to use xwidget_show_view here - gtk_fixed_move (GTK_FIXED (FRAME_GTK_WIDGET (s->f)), - xv->widgetwindow, - x + clip_left, y + clip_top); - } - } - //clip the widget window if some parts happen to be outside drawable area - //an emacs window is not a gtk window, a gtk window covers the entire frame - //cliping might have changed even if we havent actualy moved, we try figure out when we need to reclip for real - if((xv->clip_right != clip_right) - || (xv->clip_bottom != clip_bottom) - || (xv->clip_top != clip_top) - || (xv->clip_left != clip_left)){ - gtk_widget_set_size_request (xv->widgetwindow, clip_right + clip_left, clip_bottom + clip_top); - gtk_fixed_move(GTK_FIXED(xv->widgetwindow), xv->widget, -clip_left, -clip_top); - - xv->clip_right = clip_right; xv->clip_bottom = clip_bottom; xv->clip_top = clip_top;xv->clip_left = clip_left; - } - //if emacs wants to repaint the area where the widget lives, queue a redraw - //TODO it seems its possible to get out of sync with emacs redraws so emacs bg sometimes shows up instead of xwidget - //its just a visual glitch though - if (!xwidget_hidden(xv)){ - gtk_widget_queue_draw (xv->widgetwindow); - gtk_widget_queue_draw (xv->widget); - } -} - - -#ifdef HAVE_WEBKIT_OSR - -//FUGLY macro that checks WEBKIT_IS_WEB_VIEW(xw->widget_osr) first -#define WEBKIT_FN_INIT() \ - struct xwidget* xw; \ - CHECK_XWIDGET (xwidget); \ - if(NILP (xwidget)) {printf("ERROR xwidget nil\n"); return Qnil;}; \ - xw = XXWIDGET(xwidget); \ - if(NULL == xw) printf("ERROR xw is 0\n"); \ - if((NULL == xw->widget_osr) || !WEBKIT_IS_WEB_VIEW(xw->widget_osr)){ \ - printf("ERROR xw->widget_osr does not hold a webkit instance\n");\ - return Qnil;\ - }; - - -DEFUN ("xwidget-webkit-goto-uri", Fxwidget_webkit_goto_uri, Sxwidget_webkit_goto_uri, - 2, 2, 0, - doc: /* Make the webkit instance referenced by XWIDGET browse URI. */) - (Lisp_Object xwidget, Lisp_Object uri) -{ - WEBKIT_FN_INIT(); - CHECK_STRING(uri); - webkit_web_view_load_uri ( WEBKIT_WEB_VIEW(xw->widget_osr), SDATA(uri)); - return Qnil; -} - - -DEFUN ("xwidget-webkit-execute-script", Fxwidget_webkit_execute_script, Sxwidget_webkit_execute_script, - 2, 2, 0, - doc: /* webkit exec js.*/) - (Lisp_Object xwidget, Lisp_Object script) -{ - WEBKIT_FN_INIT(); - CHECK_STRING(script); - webkit_web_view_execute_script( WEBKIT_WEB_VIEW(xw->widget_osr), SDATA(script)); - return Qnil; -} - -DEFUN ("xwidget-webkit-get-title", Fxwidget_webkit_get_title, Sxwidget_webkit_get_title, - 1, 1, 0, - doc: /* Get the title from the Webkit instance in XWIDGET. - This can be used to work around the lack of a return value from the exec method. - */) - (Lisp_Object xwidget) -{ - //TODO support multibyte strings - WEBKIT_FN_INIT(); - const gchar* str=webkit_web_view_get_title( WEBKIT_WEB_VIEW(xw->widget_osr)); - //return make_string_from_bytes(str, wcslen((const wchar_t *)str), strlen(str)); - if(str == 0){ - //TODO maybe return Qnil instead. I suppose webkit returns nullpointer when doc is not properly loaded or something - printf("xwidget-webkit-get-title null webkit title\n"); - return build_string(""); - } - return build_string(str); -} - -//TODO missnamed -DEFUN ("xwidget-disable-plugin-for-mime", Fxwidget_disable_plugin_for_mime , Sxwidget_disable_plugin_for_mime, - 1,1,0, doc: /* */) - (Lisp_Object mime) -{ - WebKitWebPlugin *wp = webkit_web_plugin_database_get_plugin_for_mimetype - (webkit_get_web_plugin_database(), SDATA(mime)); - if(wp == NULL) return Qnil; - if(webkit_web_plugin_get_enabled (wp)){ - webkit_web_plugin_set_enabled (wp, FALSE); - return Qt; - } - return Qnil; -} - - -void -xwidget_webkit_dom_dump(WebKitDOMNode* parent) -{ - WebKitDOMNodeList* list; - int i; - int length; - WebKitDOMNode* attribute; - WebKitDOMNamedNodeMap* attrs; - WebKitDOMNode* child; - printf("node:%d type:%d name:%s content:%s\n", - parent, - webkit_dom_node_get_node_type(parent),//1 element 3 text 8 comment 2 attribute - webkit_dom_node_get_local_name(parent), - webkit_dom_node_get_text_content(parent)); - - if(webkit_dom_node_has_attributes(parent)){ - attrs = webkit_dom_node_get_attributes(parent); - - length = webkit_dom_named_node_map_get_length(attrs); - for (int i = 0; i < length; i++) { - attribute = webkit_dom_named_node_map_item(attrs,i); - printf(" attr node:%d type:%d name:%s content:%s\n", - attribute, - webkit_dom_node_get_node_type(attribute),//1 element 3 text 8 comment - webkit_dom_node_get_local_name(attribute), - webkit_dom_node_get_text_content(attribute)); - } - } - list = webkit_dom_node_get_child_nodes(parent); - length = webkit_dom_node_list_get_length(list); - - for (int i = 0; i < length; i++) { - child = webkit_dom_node_list_item(list, i); - //if(webkit_dom_node_has_child_nodes(child)) - xwidget_webkit_dom_dump(child); - } -} - - -DEFUN ("xwidget-webkit-dom-dump", Fxwidget_webkit_dom_dump, Sxwidget_webkit_dom_dump, - 1, 1, 0, - doc: /*Dump the DOM contained in the webkit instance in XWIDGET.*/) - (Lisp_Object xwidget) -{ - WEBKIT_FN_INIT(); - xwidget_webkit_dom_dump(WEBKIT_DOM_NODE(webkit_web_view_get_dom_document( WEBKIT_WEB_VIEW(xw->widget_osr)))); - return Qnil; -} - - - -#endif /* HAVE_WEBKIT_OSR */ - - - -DEFUN ("xwidget-resize", Fxwidget_resize, Sxwidget_resize, 3, 3, 0, doc: - /* Resize XWIDGET. - NEW_WIDTH NEW_HEIGHT defines the new size.) - */) - (Lisp_Object xwidget, Lisp_Object new_width, Lisp_Object new_height) -{ - CHECK_XWIDGET (xwidget); - struct xwidget* xw = XXWIDGET(xwidget); - struct xwidget_view *xv; - int w, h; - - CHECK_NUMBER (new_width); - CHECK_NUMBER (new_height); - w = XFASTINT (new_width); - h = XFASTINT (new_height); - - - printf("resize xwidget %d (%d,%d)->(%d,%d)\n",xw, xw->width,xw->height,w,h); - xw->width=w; - xw->height=h; - //if theres a osr resize it 1st - if(xw->widget_osr){ - printf("resize xwidget_osr\n"); - //gtk_container_set_resize_mode ( GTK_WINDOW(xw->widgetwindow_osr), GTK_RESIZE_QUEUE); - //gtk_container_set_resize_mode ( GTK_WINDOW(xw->widget_osr), GTK_RESIZE_QUEUE); - - - //gtk_layout_set_size (GTK_LAYOUT (xw->widgetwindow_osr), xw->width, xw->height); - gtk_widget_set_size_request (GTK_WIDGET (xw->widget_osr), xw->width, xw->height); //minimum size - //gtk_window_resize( GTK_WINDOW(xw->widget_osr), xw->width, xw->height); - gtk_window_resize( GTK_WINDOW(xw->widgetwindow_osr), xw->width, xw->height); - gtk_window_resize( GTK_WINDOW(xw->widgetscrolledwindow_osr), xw->width, xw->height); - gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(xw->widgetscrolledwindow_osr ),xw->height); - gtk_scrolled_window_set_min_content_width(GTK_SCROLLED_WINDOW(xw->widgetscrolledwindow_osr ),xw->width); - - //gtk_container_resize_children ( GTK_WINDOW(xw->widgetwindow_osr)); - gtk_container_resize_children (GTK_CONTAINER(xw->widgetwindow_osr)); - - } - - for (Lisp_Object tail = Vxwidget_view_list; CONSP (tail); tail = XCDR (tail)) //TODO MVC refactor lazy linear search - { - if (XWIDGET_VIEW_P (XCAR (tail))) { - xv = XXWIDGET_VIEW (XCAR (tail)); - if(XXWIDGET (xv->model) == xw) { - gtk_layout_set_size (GTK_LAYOUT (xv->widgetwindow), xw->width, xw->height); - gtk_widget_set_size_request (GTK_WIDGET (xv->widget), xw->width, xw->height); - } - } - } - - return Qnil; -} - - - -DEFUN ("xwidget-set-adjustment", Fxwidget_set_adjustment, Sxwidget_set_adjustment, 4, 4, 0, doc: - /* set scrolling */) - (Lisp_Object xwidget, Lisp_Object axis, Lisp_Object relative, Lisp_Object value) -{ - CHECK_XWIDGET (xwidget); - struct xwidget* xw = XXWIDGET(xwidget); - GtkAdjustment* adjustment; - float final_value=0.0; - - if(EQ(Qvertical, axis)){ - adjustment = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(xw->widgetscrolledwindow_osr)); - } - if(EQ(Qhorizontal, axis)){ - adjustment = gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(xw->widgetscrolledwindow_osr)); - } - - if(EQ(Qt, relative)){ - final_value=gtk_adjustment_get_value(adjustment)+XFASTINT(value); - }else{ - final_value=0.0+XFASTINT(value); - } - - gtk_adjustment_set_value(adjustment, final_value); - - return Qnil; -} - - -DEFUN ("xwidget-size-request", Fxwidget_size_request, Sxwidget_size_request, 1, 1, 0, doc: - /* Desired size of the XWIDGET. - - This can be used to read the xwidget desired size, and resizes the Emacs allocated area accordingly. - -(TODO crashes if arg not osr widget)*/) - (Lisp_Object xwidget) -{ - CHECK_XWIDGET (xwidget); - GtkRequisition requisition; - Lisp_Object rv; - gtk_widget_size_request(XXWIDGET(xwidget)->widget_osr, &requisition); - rv = Qnil; - rv = Fcons (make_number(requisition.height), rv); - rv = Fcons (make_number(requisition.width), rv); - return rv; - -} - -DEFUN ("xwidgetp", Fxwidgetp, Sxwidgetp, 1, 1, 0, - doc: /* Return t if OBJECT is a xwidget. */) - (Lisp_Object object) -{ - return XWIDGETP (object) ? Qt : Qnil; -} - -DEFUN ("xwidget-view-p", Fxwidget_view_p, Sxwidget_view_p, 1, 1, 0, - doc: /* Return t if OBJECT is a xwidget-view. */) - (Lisp_Object object) -{ - return XWIDGET_VIEW_P (object) ? Qt : Qnil; -} - -DEFUN ("xwidget-info", Fxwidget_info , Sxwidget_info, 1,1,0, - doc: /* Get XWIDGET properties. - Currently type, title, width, height.*/) - (Lisp_Object xwidget) -{ - CHECK_XWIDGET (xwidget); - Lisp_Object info, n; - struct xwidget* xw = XXWIDGET(xwidget); - - info = Fmake_vector (make_number (4), Qnil); - ASET (info, 0, xw->type); - ASET (info, 1, xw->title); - XSETFASTINT(n, xw->width); - ASET (info, 2, n); - XSETFASTINT(n, xw->height); - ASET (info, 3, n); - - return info; -} - -DEFUN ("xwidget-view-info", Fxwidget_view_info , Sxwidget_view_info, 1, 1, 0, doc: - /* Get XWIDGET-VIEW properties. - Currently x,y clip right, clip bottom, clip top, clip left*/) - (Lisp_Object xwidget_view) -{ - CHECK_XWIDGET_VIEW (xwidget_view); - struct xwidget_view *xv = XXWIDGET_VIEW (xwidget_view); - Lisp_Object info; - - info = Fmake_vector (make_number (6), Qnil); - ASET (info, 0, make_number(xv->x)); - ASET (info, 1, make_number(xv->y)); - ASET (info, 2, make_number(xv->clip_right)); - ASET (info, 3, make_number(xv->clip_bottom)); - ASET (info, 4, make_number(xv->clip_top)); - ASET (info, 5, make_number(xv->clip_left)); - - return info; -} - -DEFUN ("xwidget-view-model", Fxwidget_view_model, Sxwidget_view_model, - 1, 1, 0, - doc: /* Get XWIDGET-VIEW model. */) - (Lisp_Object xwidget_view) -{ - CHECK_XWIDGET_VIEW (xwidget_view); - return XXWIDGET_VIEW (xwidget_view)->model; -} - -DEFUN ("xwidget-view-window", Fxwidget_view_window, Sxwidget_view_window, - 1, 1, 0, - doc: /* Get XWIDGET-VIEW window. */) - (Lisp_Object xwidget_view) -{ - CHECK_XWIDGET_VIEW (xwidget_view); - return XXWIDGET_VIEW (xwidget_view)->w; -} - -DEFUN ("xwidget-send-keyboard-event", Fxwidget_send_keyboard_event, Sxwidget_send_keyboard_event, 2, 2, 0, - doc:/* Synthesize a kbd event for XWIDGET. TODO crashes atm.. */ - ) - (Lisp_Object xwidget, Lisp_Object keydescriptor) -{ - //TODO this code crashes for offscreen widgets and ive tried many different strategies - //int keyval = 0x058; //X - int keyval = XFASTINT(keydescriptor); //X - char *keystring = ""; - GdkKeymapKey* keys; - gint n_keys; - GdkDeviceManager* manager; - struct xwidget *xw; - GtkWidget* widget; - GdkEventKey* ev; - Lisp_Object window; - //popup_activated_flag = 1; //TODO just a hack - gdk_keymap_get_entries_for_keyval(gdk_keymap_get_default(), keyval, &keys, &n_keys); - - xw = XXWIDGET(xwidget); - - ev = (GdkEventKey*)gdk_event_new(GDK_KEY_PRESS); - - - //todo what about windowless widgets? - - window = FRAME_SELECTED_WINDOW (SELECTED_FRAME ()); - - - //TODO maybe we also need to special case sockets by picking up the plug rather than the socket - if(xw->widget_osr) - widget = xw->widget_osr; - else - widget = xwidget_view_lookup(xw, XWINDOW(window))->widget; - - ev->window = gtk_widget_get_window(widget); - gtk_widget_grab_focus(widget); - ev->send_event = FALSE; - - ev->hardware_keycode = keys[0].keycode; - ev->group = keys[0].group; - - ev->keyval = keyval; - ev->time = GDK_CURRENT_TIME; - - //ev->device = gdk_device_get_core_pointer(); - manager = gdk_display_get_device_manager(gdk_window_get_display(ev->window)); - gdk_event_set_device ((GdkEvent*)ev, gdk_device_manager_get_client_pointer(manager)); - gdk_event_put((GdkEvent*)ev); - //g_signal_emit_by_name(ev->window,"key-press-event", ev); - - ev->type = GDK_KEY_RELEASE; - gdk_event_put((GdkEvent*)ev); - //g_signal_emit_by_name(ev->window,"key-release-event", ev); - //gtk_main_do_event(ev); - - //TODO - //if I delete the event the receiving component eventually crashes. - //it ough TDTRT since event_put is supposed to copy the event - //so probably this leaks events now - //gdk_event_free((GdkEvent*)ev); - - return Qnil; -} - -DEFUN ("delete-xwidget-view", Fdelete_xwidget_view, Sdelete_xwidget_view, - 1, 1, 0, - doc: /* Delete the XWIDGET-VIEW. */) - (Lisp_Object xwidget_view) -{ - CHECK_XWIDGET_VIEW (xwidget_view); - struct xwidget_view *xv = XXWIDGET_VIEW (xwidget_view); - gtk_widget_destroy(xv->widgetwindow); - Vxwidget_view_list = Fdelq (xwidget_view, Vxwidget_view_list); -} - -DEFUN ("xwidget-view-lookup", Fxwidget_view_lookup, Sxwidget_view_lookup, - 1, 2, 0, - doc: /* Return the xwidget-view associated to XWIDGET in -WINDOW if specified, otherwise it uses the selected window. */) - (Lisp_Object xwidget, Lisp_Object window) -{ - CHECK_XWIDGET (xwidget); - - if (NILP (window)) - window = Fselected_window(); - CHECK_WINDOW (window); - - for (Lisp_Object tail = Vxwidget_view_list; CONSP (tail); tail = XCDR (tail)) - { - Lisp_Object xwidget_view = XCAR (tail); - if (EQ (Fxwidget_view_model (xwidget_view), xwidget) - && EQ (Fxwidget_view_window (xwidget_view), window)) - return xwidget_view; - } - - return Qnil; -} - -DEFUN ("set-frame-visible", Fset_frame_visible, Sset_frame_visible, - 2, 2, 0, - doc: /* HACKY */) - (Lisp_Object frame, Lisp_Object flag) -{ - CHECK_FRAME (frame); - struct frame *f = XFRAME (frame); - SET_FRAME_VISIBLE (f, !NILP (flag)); - return flag; -} - -DEFUN ("xwidget-plist", Fxwidget_plist, Sxwidget_plist, - 1, 1, 0, - doc: /* Return the plist of XWIDGET. */) - (register Lisp_Object xwidget) -{ - CHECK_XWIDGET (xwidget); - return XXWIDGET (xwidget)->plist; -} - -DEFUN ("xwidget-buffer", Fxwidget_buffer, Sxwidget_buffer, - 1, 1, 0, - doc: /* Return the buffer of XWIDGET. */) - (register Lisp_Object xwidget) -{ - CHECK_XWIDGET (xwidget); - return XXWIDGET (xwidget)->buffer; -} - -DEFUN ("set-xwidget-plist", Fset_xwidget_plist, Sset_xwidget_plist, - 2, 2, 0, - doc: /* Replace the plist of XWIDGET with PLIST. Returns PLIST. */) - (register Lisp_Object xwidget, Lisp_Object plist) -{ - CHECK_XWIDGET (xwidget); - CHECK_LIST (plist); - - XXWIDGET (xwidget)->plist = plist; - return plist; -} - -DEFUN ("set-xwidget-query-on-exit-flag", - Fset_xwidget_query_on_exit_flag, Sset_xwidget_query_on_exit_flag, - 2, 2, 0, - doc: /* Specify if query is needed for XWIDGET when Emacs is -exited. If the second argument FLAG is non-nil, Emacs will query the -user before exiting or killing a buffer if XWIDGET is running. This -function returns FLAG. */) - (Lisp_Object xwidget, Lisp_Object flag) -{ - CHECK_XWIDGET (xwidget); - XXWIDGET (xwidget)->kill_without_query = NILP (flag); - return flag; -} - -DEFUN ("xwidget-query-on-exit-flag", - Fxwidget_query_on_exit_flag, Sxwidget_query_on_exit_flag, - 1, 1, 0, - doc: /* Return the current value of query-on-exit flag for XWIDGET. */) - (Lisp_Object xwidget) -{ - CHECK_XWIDGET (xwidget); - return (XXWIDGET (xwidget)->kill_without_query ? Qnil : Qt); -} - -void -syms_of_xwidget (void) -{ - int i; - - defsubr (&Smake_xwidget); - defsubr (&Sxwidgetp); - DEFSYM (Qxwidgetp, "xwidgetp"); - defsubr (&Sxwidget_view_p); - DEFSYM (Qxwidget_view_p, "xwidget-view-p"); - defsubr (&Sxwidget_info); - defsubr (&Sxwidget_view_info); - defsubr (&Sxwidget_resize); - defsubr (&Sget_buffer_xwidgets); - defsubr (&Sxwidget_view_model); - defsubr (&Sxwidget_view_window); - defsubr (&Sxwidget_view_lookup); - defsubr (&Sxwidget_query_on_exit_flag); - defsubr (&Sset_xwidget_query_on_exit_flag); - defsubr (&Sset_frame_visible); - - #ifdef HAVE_WEBKIT_OSR - defsubr (&Sxwidget_webkit_goto_uri); - defsubr (&Sxwidget_webkit_execute_script); - defsubr (&Sxwidget_webkit_get_title); - DEFSYM (Qwebkit_osr, "webkit-osr"); - #endif - - defsubr (&Sxwgir_xwidget_call_method ); - defsubr (&Sxwgir_require_namespace); - defsubr (&Sxwidget_size_request ); - defsubr (&Sdelete_xwidget_view); - defsubr (&Sxwidget_disable_plugin_for_mime); - - defsubr (&Sxwidget_send_keyboard_event); - defsubr (&Sxwidget_webkit_dom_dump); - defsubr (&Sxwidget_plist); - defsubr (&Sxwidget_buffer); - defsubr (&Sset_xwidget_plist); - - defsubr (&Sxwidget_set_adjustment); - - DEFSYM (Qxwidget, "xwidget"); - - DEFSYM (QCxwidget, ":xwidget"); - DEFSYM (QCxwgir_class, ":xwgir-class"); - DEFSYM (QCtitle, ":title"); - - /* Do not forget to update the docstring of make-xwidget if you add - new types. */ - DEFSYM (Qbutton, "Button"); //changed to match the gtk class because xwgir(experimental and not really needed) - DEFSYM (Qtoggle, "ToggleButton"); - DEFSYM (Qslider, "slider"); - DEFSYM (Qsocket, "socket"); - DEFSYM (Qsocket_osr, "socket-osr"); - DEFSYM (Qcairo, "cairo"); - - DEFSYM (Qvertical, "vertical"); - DEFSYM (Qhorizontal, "horizontal"); - - DEFSYM (QCplist, ":plist"); - - DEFVAR_LISP ("xwidget-list", Vxwidget_list, doc: /*xwidgets list*/); - Vxwidget_list = Qnil; - - DEFVAR_LISP ("xwidget-view-list", Vxwidget_view_list, doc: /*xwidget views list*/); - Vxwidget_view_list = Qnil; - - Fprovide (intern ("xwidget-internal"), Qnil); - -} - - -/* Value is non-zero if OBJECT is a valid Lisp xwidget specification. A - valid xwidget specification is a list whose car is the symbol - `xwidget', and whose rest is a property list. The property list must - contain a value for key `:type'. That value must be the name of a - supported xwidget type. The rest of the property list depends on the - xwidget type. */ - -int -valid_xwidget_spec_p (Lisp_Object object) -{ - int valid_p = 0; - - if (CONSP (object) && EQ (XCAR (object), Qxwidget)) - { - /* Lisp_Object tem; */ - - /* for (tem = XCDR (object); CONSP (tem); tem = XCDR (tem)) */ - /* if (EQ (XCAR (tem), QCtype)) */ - /* { */ - /* tem = XCDR (tem); */ - /* if (CONSP (tem) && SYMBOLP (XCAR (tem))) */ - /* { */ - /* struct xwidget_type *type; */ - /* type = lookup_xwidget_type (XCAR (tem)); */ - /* if (type) */ - /* valid_p = type->valid_p (object); */ - /* } */ - - /* break; */ - /* } */ - //never mind type support for now - valid_p = 1; - } - - return valid_p; -} - - - -/* find a value associated with key in spec */ -Lisp_Object -xwidget_spec_value ( Lisp_Object spec, Lisp_Object key, - int *found) -{ - Lisp_Object tail; - - eassert (valid_xwidget_spec_p (spec)); - - for (tail = XCDR (spec); - CONSP (tail) && CONSP (XCDR (tail)); tail = XCDR (XCDR (tail))) - { - if (EQ (XCAR (tail), key)) - { - if (found) - *found = 1; - return XCAR (XCDR (tail)); - } - } - - if (found) - *found = 0; - return Qnil; -} - - -void -xwidget_view_delete_all_in_window (struct window *w) -{ - struct xwidget_view* xv = NULL; - for (Lisp_Object tail = Vxwidget_view_list; CONSP (tail); tail = XCDR (tail)) - { - if (XWIDGET_VIEW_P (XCAR (tail))) { - xv = XXWIDGET_VIEW (XCAR (tail)); - if(XWINDOW (xv->w) == w) { - gtk_widget_destroy(xv->widgetwindow); - Vxwidget_view_list = Fdelq (XCAR (tail), Vxwidget_view_list); - } - } - } -} - -struct xwidget_view* -xwidget_view_lookup (struct xwidget* xw, struct window *w) -{ - Lisp_Object xwidget, window, ret; - XSETXWIDGET (xwidget, xw); - XSETWINDOW (window, w); - - ret = Fxwidget_view_lookup (xwidget, window); - - return EQ (ret, Qnil) ? NULL : XXWIDGET_VIEW (ret); -} - -struct xwidget* -lookup_xwidget (Lisp_Object spec) -{ - /* When a xwidget lisp spec is found initialize the C struct that is used in the C code. - This is done by redisplay so values change if the spec changes. - So, take special care of one-shot events - - TODO remove xwidget init from display spec. simply store an xwidget reference only and set - size etc when creating the xwidget, which should happen before insertion into buffer - */ - int found = 0, found1 = 0, found2 = 0; - Lisp_Object value; - struct xwidget *xw; - - value = xwidget_spec_value (spec, QCxwidget, &found1); - xw = XXWIDGET(value); - - return xw; -} - -/*set up detection of touched xwidget*/ -void -xwidget_start_redisplay (void) -{ - for (Lisp_Object tail = Vxwidget_view_list; CONSP (tail); tail = XCDR (tail)) - { - if (XWIDGET_VIEW_P (XCAR (tail))) - XXWIDGET_VIEW (XCAR (tail))->redisplayed = 0; - } -} - -/* the xwidget was touched during redisplay, so it isnt a candidate for hiding*/ -void -xwidget_touch (struct xwidget_view *xv) -{ - xv->redisplayed = 1; -} - -int -xwidget_touched (struct xwidget_view *xv) -{ - return xv->redisplayed; -} - -/* redisplay has ended, now we should hide untouched xwidgets -*/ -void -xwidget_end_redisplay (struct window *w, struct glyph_matrix *matrix) -{ - - int i; - struct xwidget *xw; - int area; - - - xwidget_start_redisplay (); - //iterate desired glyph matrix of window here, hide gtk widgets - //not in the desired matrix. - - //this only takes care of xwidgets in active windows. - //if a window goes away from screen xwidget views wust be deleted - - // dump_glyph_matrix(matrix, 2); - for (i = 0; i < matrix->nrows; ++i) - { - // dump_glyph_row (MATRIX_ROW (matrix, i), i, glyphs); - struct glyph_row *row; - row = MATRIX_ROW (matrix, i); - if (row->enabled_p != 0) - { - for (area = LEFT_MARGIN_AREA; area < LAST_AREA; ++area) - { - struct glyph *glyph = row->glyphs[area]; - struct glyph *glyph_end = glyph + row->used[area]; - for (; glyph < glyph_end; ++glyph) - { - if (glyph->type == XWIDGET_GLYPH) - { - /* - the only call to xwidget_end_redisplay is in dispnew - xwidget_end_redisplay(w->current_matrix); - */ - xwidget_touch (xwidget_view_lookup(glyph->u.xwidget, - w)); - } - } - } - } - } - - for (Lisp_Object tail = Vxwidget_view_list; CONSP (tail); tail = XCDR (tail)) - { - if (XWIDGET_VIEW_P (XCAR (tail))) { - struct xwidget_view* xv = XXWIDGET_VIEW (XCAR (tail)); - - //"touched" is only meaningful for the current window, so disregard other views - if (XWINDOW (xv->w) == w) { - if (xwidget_touched(xv)) - xwidget_show_view (xv); - else - xwidget_hide_view (xv); - } - } - } -} - -/* Kill all xwidget in BUFFER. */ -void -kill_buffer_xwidgets (Lisp_Object buffer) -{ - Lisp_Object tail, xwidget; - for (tail = Fget_buffer_xwidgets (buffer); CONSP (tail); tail = XCDR (tail)) - { - xwidget = XCAR (tail); - Vxwidget_list = Fdelq (xwidget, Vxwidget_list); - /* TODO free the GTK things in xw */ - { - CHECK_XWIDGET (xwidget); - struct xwidget *xw = XXWIDGET (xwidget); - if (xw->widget_osr && xw->widgetwindow_osr) - { - gtk_widget_destroy(xw->widget_osr); - gtk_widget_destroy(xw->widgetwindow_osr); - } - } - } -} - -#endif /* HAVE_XWIDGETS */ diff --git a/src/xwidget.h b/src/xwidget.h deleted file mode 100644 index cbaddf6..0000000 --- a/src/xwidget.h +++ /dev/null @@ -1,115 +0,0 @@ -#ifndef XWIDGET_H_INCLUDED -#define XWIDGET_H_INCLUDED - -void x_draw_xwidget_glyph_string (struct glyph_string *s); -void syms_of_xwidget (); - -//extern Lisp_Object Qxwidget; - - -int valid_xwidget_spec_p (Lisp_Object object) ; - -#include - - -/* -each xwidget instance/model is described by this struct. - -lisp pseudovector. - - - */ -struct xwidget{ - struct vectorlike_header header; - Lisp_Object plist;//auxilliary data - Lisp_Object type;//the widget type - Lisp_Object buffer; //buffer where xwidget lives - Lisp_Object title;//a title that is used for button labels for instance - - //here ends the lisp part. - //"height" is the marker field - int height; - int width; - - //for offscreen widgets, unused if not osr - GtkWidget* widget_osr; - GtkWidget* widgetwindow_osr; - //this is used if the widget (webkit) is to be wrapped in a scrolled window, - GtkWidget* widgetscrolledwindow_osr; - /* Non-nil means kill silently if Emacs is exited. */ - unsigned int kill_without_query : 1; - -}; - - -//struct for each xwidget view -struct xwidget_view { - struct vectorlike_header header; - Lisp_Object model; - Lisp_Object w; - - //here ends the lisp part. - //"redisplayed" is the marker field - int redisplayed; //if touched by redisplay - - int hidden;//if the "live" instance isnt drawn - - GtkWidget* widget; - GtkWidget* widgetwindow; - GtkWidget* emacswindow; - int x; int y; - int clip_right; int clip_bottom; int clip_top; int clip_left; - - - long handler_id; -}; - -/* Test for xwidget pseudovector*/ -#define XWIDGETP(x) PSEUDOVECTORP (x, PVEC_XWIDGET) -#define XXWIDGET(a) (eassert (XWIDGETP(a)), \ - (struct xwidget *) XUNTAG(a, Lisp_Vectorlike)) - -#define CHECK_XWIDGET(x) \ - CHECK_TYPE (XWIDGETP (x), Qxwidgetp, x) - -/* Test for xwidget_view pseudovector */ -#define XWIDGET_VIEW_P(x) PSEUDOVECTORP (x, PVEC_XWIDGET_VIEW) -#define XXWIDGET_VIEW(a) (eassert (XWIDGET_VIEW_P(a)), \ - (struct xwidget_view *) XUNTAG(a, Lisp_Vectorlike)) - -#define CHECK_XWIDGET_VIEW(x) \ - CHECK_TYPE (XWIDGET_VIEW_P (x), Qxwidget_view_p, x) - -struct xwidget_type -{ - /* A symbol uniquely identifying the xwidget type, */ - Lisp_Object *type; - - /* Check that SPEC is a valid image specification for the given - image type. Value is non-zero if SPEC is valid. */ - int (* valid_p) (Lisp_Object spec); - - /* Next in list of all supported image types. */ - struct xwidget_type *next; -}; - -static struct xwidget_type *lookup_xwidget_type (Lisp_Object symbol); - -struct xwidget* xwidget_from_id(int id); - -//extern int xwidget_owns_kbd; - -void xwidget_start_redisplay(); -void xwidget_end_redisplay (struct window *w, struct glyph_matrix *matrix); - -void xwidget_touch (struct xwidget_view *xw); - -//void assert_valid_xwidget_id(int id,char *str); - -struct xwidget* lookup_xwidget (Lisp_Object spec); -#define XG_XWIDGET "emacs_xwidget" -#define XG_XWIDGET_VIEW "emacs_xwidget_view" -void xwidget_view_delete_all_in_window( struct window *w ); - -void kill_buffer_xwidgets (Lisp_Object buffer); -#endif /* XWIDGET_H_INCLUDED */ diff --git a/test/ChangeLog b/test/ChangeLog index 2817881..a9834cc 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,11 +1,3 @@ -2015-02-01 Joakim Verona - Support for testing xwidgets - * xwidget-test-manual.el: - -2015-02-01 Grégoire Jadi - Support for testing xwidgets - * automated/xwidget-tests.el: - 2015-01-31 Stefan Monnier * automated/eieio-tests.el (eieio-test-23-inheritance-check): Simplify. diff --git a/test/automated/xwidget-tests.el b/test/automated/xwidget-tests.el deleted file mode 100644 index 7f79c94..0000000 --- a/test/automated/xwidget-tests.el +++ /dev/null @@ -1,121 +0,0 @@ -;; -*- lexical-binding: t; -*- - -(require 'cl) -(require 'xwidget) -(require 'xwidget-test) -(require 'parallel) - -(defvar xwidget-parallel-config (list :emacs-path (expand-file-name - "~/packages/xwidget-build/src/emacs"))) - -(defmacro xwidget-deftest (name types &rest body) - (declare (indent defun)) - (if (null types) - `(ert-deftest ,(intern (format "%s" name)) () - (let ((parallel-config xwidget-parallel-config)) - ,@body)) - `(progn - ,@(loop for type in types - collect - `(ert-deftest ,(intern (format "%s-%s" name type)) () - (let ((parallel-config xwidget-parallel-config) - (type ',type) - (title ,(symbol-name type))) - ,@body)))))) - -(xwidget-deftest xwidget-make-xwidget (Button ToggleButton slider socket cairo) - (let* ((beg 1) - (end 1) - (width 100) - (height 100) - (data nil) - (proc (parallel-start - (lambda (beg end type title width height data) - (require 'xwidget) - (require 'cl) - (with-temp-buffer - (insert ?\0) - (let* ((buffer (current-buffer)) - (xwidget (make-xwidget beg end type title width height data buffer))) - (set-xwidget-query-on-exit-flag xwidget nil) - (parallel-remote-send (coerce (xwidget-info xwidget) 'list)) - (parallel-remote-send (buffer-name buffer)) - (buffer-name (xwidget-buffer xwidget))))) - :env (list beg end type title width height data))) - (results (parallel-get-results proc))) - (should (parallel-success-p proc)) - (when (parallel-success-p proc) - (destructuring-bind (xwidget-buffer temp-buffer xwidget-info) - results - (should (equal (list type title width height) - xwidget-info)) - (should (equal temp-buffer xwidget-buffer)))))) - -(xwidget-deftest xwidget-query-on-exit-flag () - (should (equal '(nil t) - (parallel-get-results - (parallel-start (lambda () - (require 'xwidget) - (let ((xwidget (make-xwidget 1 1 'Button "Button" 100 100 nil))) - (parallel-remote-send (xwidget-query-on-exit-flag xwidget)) - (set-xwidget-query-on-exit-flag xwidget nil) - (xwidget-query-on-exit-flag xwidget)))))))) - -(xwidget-deftest xwidget-query-on-exit-flag (Button ToggleButton slider socket cairo) - (should (parallel-get-result - (parallel-start (lambda (type title) - (require 'xwidget) - (with-temp-buffer - (let ((xwidget (make-xwidget 1 1 type title 10 10 nil))) - (set-xwidget-query-on-exit-flag xwidget nil) - (xwidgetp xwidget)))) - :env (list type title))))) - -(xwidget-deftest xwidget-CHECK_XWIDGET () - (should (equal (parallel-get-result - (parallel-start (lambda () - (require 'xwidget) - (xwidget-info nil)))) - '(wrong-type-argument xwidgetp nil))) - (should (equal (parallel-get-result - (parallel-start (lambda () - (require 'xwidget) - (xwidget-view-info nil)))) - '(wrong-type-argument xwidget-view-p nil)))) - -(xwidget-deftest xwidget-view-p (Button ToggleButton slider socket cairo) - (should (parallel-get-result - (parallel-start (lambda (type title) - (require 'xwidget) - (with-temp-buffer - (insert ?\0) - (let* ((xwidget (xwidget-insert 1 type title 100 100)) - (window (xwidget-display xwidget))) - (set-xwidget-query-on-exit-flag xwidget nil) - (xwidget-view-p - (xwidget-view-lookup xwidget window))))) - :env (list type title) - :graphical t - :emacs-args '("-T" "emacs-debug"))))) - -(defun xwidget-interactive-tests () - "Interactively test Button ToggleButton and slider. - -Start Emacs instances and try to insert the xwidget." - (interactive) - (flet ((test-xwidget (type) - (parallel-get-result - (parallel-start (lambda () - (require 'xwidget) - (with-temp-buffer - (insert ?\0) - (set-xwidget-query-on-exit-flag - (xwidget-insert 1 type (format "%s" type) 100 100) nil) - (display-buffer (current-buffer)) - (cons type (or (y-or-n-p (format "Do you see a %s?" type)) 'failed)))) - :graphical t - :debug t - :config xwidget-parallel-config)))) - (message "%S" (mapcar #'test-xwidget '(Button ToggleButton slider))))) - -(provide 'xwidget-tests) diff --git a/test/xwidget-test-manual.el b/test/xwidget-test-manual.el deleted file mode 100644 index 3732dca..0000000 --- a/test/xwidget-test-manual.el +++ /dev/null @@ -1,204 +0,0 @@ -;;test like: -;; cd /path/to/xwidgets-emacs-dir -;; make all&& src/emacs -q --eval "(progn (load \"`pwd`/lisp/xwidget-test.el\") (xwidget-demo-basic))" - - -;; you should see: -;; - a gtk button -;; - a gtk toggle button -;; - a gtk slider button -;; - an xembed window(using gtk_socket) showing another emacs instance -;; - an xembed window(using gtk_socket) showing an uzbl web browser if its installed - -;;the widgets will move when you type in the buffer. good! - -;;there will be redrawing issues when widgets change rows, etc. bad! - -;;its currently difficult to give kbd focus to the xembedded emacs, -;;but try evaling the following: - -;; (xwidget-set-keyboard-grab 3 1) - - - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; demo/test functions -(require 'xwidget) - -(defmacro xwidget-demo (name &rest body) - `(defun ,(intern (concat "xwidget-demo-" name)) () - (interactive) - (switch-to-buffer ,(format "*xwidget-demo-%s*" name)) - (text-mode);;otherwise no local keymap - (insert "Some random text for xwidgets to be inserted in for demo purposes.\n") - ,@body)) - -(xwidget-demo "a-button" - (xwidget-insert (point-min) 'Button "button" 60 50) - (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic)) - -(xwidget-demo "a-button-bidi" - (xwidget-insert (+ 5 (point-min)) 'Button "button" 60 50) - (set (make-local-variable 'bidi-paragraph-direction) 'right-to-left) - (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic)) - - -(xwidget-demo "a-toggle-button" - (xwidget-insert (point-min) 'ToggleButton "toggle" 60 50) - (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic)) - -(xwidget-demo "a-big-button" - (xwidget-insert (point-min) 'Button "button" 400 500) - (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic)) - -(xwidget-demo "a-socket" - (xwidget-insert (point-min) 'socket "socket" 500 500) - (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic)) - -(xwidget-demo "a-socket-osr-broken" - (xwidget-insert (point-min) 'socket-osr "socket-osr" 500 500) - (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic)) - - -(xwidget-demo "a-slider" - (xwidget-insert (point-min) 'slider "slider" 500 100) - (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic)) - -(xwidget-demo "a-canvas" - (xwidget-insert (point-min) 'cairo "canvas" 1000 1000) - (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic)) - -(xwidget-demo "a-webkit-broken" - (xwidget-insert (point-min) 'webkit "webkit" 1000 1000) - (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic)) - -(xwidget-demo "a-webkit-osr" - (xwidget-insert (point-min) 'webkit-osr "webkit-osr" 1000 1000) - (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic) - (xwidget-webkit-goto-uri (xwidget-at 1) "http://www.fsf.org")) - -(xwidget-demo "a-xwgir" - (xwidget-insert (point-min) 'xwgir "xwgir" 1000 1000) - (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic)) - -(xwidget-demo "a-xwgir-color-button" - (xwgir-require-namespace "Gtk" "3.0") - (put 'ColorButton :xwgir-class '("Gtk" "ColorSelection")) - (xwidget-insert (point-min) 'ColorButton "xwgir-color-button" 1000 1000) - (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic)) - -(xwidget-demo "a-xwgir-button" - (xwgir-require-namespace "Gtk" "3.0") - (put 'xwgirButton :xwgir-class '("Gtk" "Button")) - - (xwidget-insert (point-min) 'xwgirButton "xwgir label didnt work..." 700 700) - (xwgir-xwidget-call-method (xwidget-at 1) "set_label" '( "xwgir label worked!")) - (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic)) - -(xwidget-demo "a-xwgir-check-button" - (xwgir-require-namespace "Gtk" "3.0") - (put 'xwgirCheckButton :xwgir-class '("Gtk" "CheckButton")) - - (xwidget-insert (point-min) 'xwgirCheckButton "xwgir label didnt work..." 700 700) - (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic)) - -(xwidget-demo "a-xwgir-hscale" - (xwgir-require-namespace "Gtk" "3.0") - (put 'xwgirHScale :xwgir-class '("Gtk" "HScale")) - - (xwidget-insert (point-min) 'xwgirHScale "xwgir label didnt work..." 700 700) - (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic)) - -(xwidget-demo "a-xwgir-webkit" - (xwgir-require-namespace "WebKit" "3.0") - (put 'xwgirWebkit :xwgir-class '("WebKit" "WebView")) - - (xwidget-insert (point-min) 'xwgirWebkit "xwgir webkit..." 700 700) - (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic)) - - - -;; tentative testcase: -;; (xwgir-require-namespace "WebKit" "3.0") - -;; (put 'webkit-osr :xwgir-class '("WebKit" "WebView")) -;; (xwgir-call-method (xwidget-at 1) "set_zoom_level" '(3.0)) - -;; (xwgir-require-namespace "Gtk" "3.0") -;; (put 'color-selection :xwgir-class '("Gtk" "ColorSelection")) - - -(xwidget-demo "basic" - (xwidget-insert (point-min) 'button "button" 40 50 ) - (xwidget-insert 15 'toggle "toggle" 60 30 ) - (xwidget-insert 30 'socket "emacs" 400 200 ) - (xwidget-insert 20 'slider "slider" 100 50 ) - (xwidget-insert 40 'socket "uzbl-core" 400 400 ) - (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic) -) - - -;it doesnt seem gtk_socket_steal works very well. its deprecated. -; xwininfo -int -; then (xwidget-embed-steal 3 ) -(defun xwidget-demo-grab () - (interactive) - (insert "0 <<< grabbed appp will appear here\n") - (xwidget-insert 1 1 3 "1" 1000 ) - (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-grab) - ) - -;ive basically found these xembeddable things: -;openvrml -;emacs -;mplayer -;surf -;uzbl - -;try the openvrml: -;/usr/libexec/openvrml-xembed 0 ~/Desktop/HelloWorld.wrl - -(defun xwidget-handler-demo-basic () - (interactive) - (message "stuff happened to xwidget %S" last-input-event) - (let* - ((xwidget-event-type (nth 1 last-input-event)) - (xwidget (nth 2 last-input-event))) - (cond ( (eq xwidget-event-type 'xembed-ready) - (let* - ((xembed-id (nth 3 last-input-event))) - (message "xembed ready event: %S xw-id:%s" xembed-id xwidget) - ;;will start emacs/uzbl in a xembed socket when its ready - (cond - (t;;(eq 3 xwidget) - (start-process "xembed" "*xembed*" "/var/lib/jenkins/jobs/emacs-xwidgets-automerge/workspace/src/emacs" "-q" "--parent-id" (number-to-string xembed-id) ) ) -;; ((eq 5 xwidget-id) -;; (start-process "xembed2" "*xembed2*" "uzbl-core" "-s" (number-to-string xembed-id) "http://www.fsf.org" ) - ) - - ) - )))) - - - -(defun xwidget-handler-demo-grab () - (interactive) - (message "stuff happened to xwidget %S" last-input-event) - (let* - ((xwidget-event-type (nth 2 last-input-event))) - (cond ( (eq xwidget-event-type 'xembed-ready) - (let* - ((xembed-id (nth 3 last-input-event))) - (message "xembed ready %S" xembed-id) - ) - )))) -(defun xwidget-dummy-hook () - (message "xwidget dummy hook called")) - -; (xwidget-resize-hack 1 200 200) - -;(xwidget-demo-basic) - -(provide 'xwidget-test-manual) commit 1d1162479caf1fdf48564f1486fa84e3cdacaa9b Author: Martin Rudalics Date: Sun Feb 1 16:49:46 2015 +0100 Give `window-text-pixel-size' optional BUFFER argument. * xdisp.c (Fwindow_text_pixel_size): Add optional argument BUFFER. * display.texi (Size of Displayed Text): Describe optional argument BUFFER of `window-text-pixel-size'. diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 2cde2fb..aa4d320 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,8 @@ +2015-02-01 Martin Rudalics + + * display.texi (Size of Displayed Text): Describe optional + argument BUFFER of `window-text-pixel-size'. + 2015-01-28 Eli Zaretskii * searching.texi (Regexp Search): Add a cross-reference to "Syntax diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index b09b82a..10b17a3 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi @@ -1880,7 +1880,7 @@ displayed in a given window. This function is used by @code{fit-frame-to-buffer} (@pxref{Size and Position}) to make a window exactly as large as the text it contains. -@defun window-text-pixel-size &optional window from to x-limit y-limit mode-and-header-line +@defun window-text-pixel-size &optional window from to x-limit y-limit mode-and-header-line buffer This function returns the size of the text of @var{window}'s buffer in pixels. @var{window} must be a live window and defaults to the selected one. The return value is a cons of the maximum pixel-width of any text @@ -1919,6 +1919,13 @@ means to not include the height of the mode- or header-line of @code{mode-line} or @code{header-line}, include only the height of that line, if present, in the return value. If it is @code{t}, include the height of both, if present, in the return value. + +The optional argument @var{buffer} allows to specify an alternate buffer +whose text size will be calculated. If @var{buffer} is @code{nil} or +omitted, then operate on the buffer of @var{window}. If it is @code{t}, +then operate on the current buffer as if it were displayed in +@var{window}. If it specifies a live buffer, then operate on that +buffer as if it were displayed in @var{window}. @end defun diff --git a/src/ChangeLog b/src/ChangeLog index 5635e1b..d45b4e3 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2015-02-01 Martin Rudalics + + * xdisp.c (Fwindow_text_pixel_size): Add optional argument BUFFER. + 2015-02-01 Joakim Verona Support for the new Xwidget feature. * window.c, Makefile.in, buffer.c, dispextern.h, dispnew.c, emacs.c: diff --git a/src/xdisp.c b/src/xdisp.c index 01d598f..2da6c76 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -9703,7 +9703,7 @@ in_display_vector_p (struct it *it) && it->dpvec + it->current.dpvec_index != it->dpend); } -DEFUN ("window-text-pixel-size", Fwindow_text_pixel_size, Swindow_text_pixel_size, 0, 6, 0, +DEFUN ("window-text-pixel-size", Fwindow_text_pixel_size, Swindow_text_pixel_size, 0, 7, 0, doc: /* Return the size of the text of WINDOW's buffer in pixels. WINDOW must be a live window and defaults to the selected one. The return value is a cons of the maximum pixel-width of any text line and @@ -9736,28 +9736,42 @@ Optional argument MODE-AND-HEADER-LINE nil or omitted means do not include the height of the mode- or header-line of WINDOW in the return value. If it is either the symbol `mode-line' or `header-line', include only the height of that line, if present, in the return value. If t, -include the height of both, if present, in the return value. */) - (Lisp_Object window, Lisp_Object from, Lisp_Object to, Lisp_Object x_limit, Lisp_Object y_limit, - Lisp_Object mode_and_header_line) +include the height of both, if present, in the return value. + +Optional argument BUFFER nil means to return the size of the text of +WINDOW's buffer. BUFFER t means to return the size of the text of the +current buffer as if it were displayed in WINDOW. Else BUFFER has to +specify a live buffer and this function returns the size of the text of +BUFFER as if it were displayed in WINDOW. */) + (Lisp_Object window, Lisp_Object from, Lisp_Object to, Lisp_Object x_limit, + Lisp_Object y_limit, Lisp_Object mode_and_header_line, Lisp_Object buffer) { struct window *w = decode_live_window (window); - Lisp_Object buf; struct buffer *b; struct it it; - struct buffer *old_buffer = NULL; + struct buffer *old_b = NULL; ptrdiff_t start, end, pos; struct text_pos startp; void *itdata = NULL; int c, max_y = -1, x = 0, y = 0; - buf = w->contents; - CHECK_BUFFER (buf); - b = XBUFFER (buf); - - if (b != current_buffer) + if (EQ (buffer, Qt)) + b = current_buffer; + else { - old_buffer = current_buffer; - set_buffer_internal (b); + if (NILP (buffer)) + buffer = w->contents; + + CHECK_BUFFER (buffer); + if (!BUFFER_LIVE_P (XBUFFER (buffer))) + error ("Not a live buffer"); + + b = XBUFFER (buffer); + if (b != current_buffer) + { + old_b = current_buffer; + set_buffer_internal (b); + } } if (NILP (from)) @@ -9833,8 +9847,8 @@ include the height of both, if present, in the return value. */) bidi_unshelve_cache (itdata, 0); - if (old_buffer) - set_buffer_internal (old_buffer); + if (old_b) + set_buffer_internal (old_b); return Fcons (make_number (x), make_number (y)); } commit f1cea3e96cb229b12dc12b0514c1269b9c09d530 Author: Ulrich Müller Date: Sun Feb 1 15:05:20 2015 +0100 configure.ac: Fix a typo. diff --git a/configure.ac b/configure.ac index f4fcf52..a679bd0 100644 --- a/configure.ac +++ b/configure.ac @@ -374,7 +374,7 @@ otherwise for the first of `gfile' or `inotify' that is usable.]) ], [with_file_notification=$with_features]) -OPTION_DEFAULT_OFF([xwidgets],[enable use of some gtk widgets it Emacs buffers]) +OPTION_DEFAULT_OFF([xwidgets],[enable use of some gtk widgets in Emacs buffers]) ## For the times when you want to build Emacs but don't have ## a suitable makeinfo, and can live without the manuals. commit e8e483a974bc401887070aa1269c9e4efa0e766c Author: Glenn Morris Date: Sun Feb 1 06:24:33 2015 -0500 # Auto-commit of loaddefs files. diff --git a/lisp/ldefs-boot.el b/lisp/ldefs-boot.el index d11401b..8fc14de 100644 --- a/lisp/ldefs-boot.el +++ b/lisp/ldefs-boot.el @@ -3,7 +3,7 @@ ;;; Code: -;;;### (autoloads nil "5x5" "play/5x5.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "5x5" "play/5x5.el" (21670 32331 385639 720000)) ;;; Generated autoloads from play/5x5.el (autoload '5x5 "5x5" "\ @@ -65,8 +65,8 @@ should return a grid vector array that is the new solution. ;;;*** -;;;### (autoloads nil "ada-mode" "progmodes/ada-mode.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "ada-mode" "progmodes/ada-mode.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/ada-mode.el (autoload 'ada-add-extensions "ada-mode" "\ @@ -85,8 +85,8 @@ Ada mode is the major mode for editing Ada code. ;;;*** -;;;### (autoloads nil "ada-stmt" "progmodes/ada-stmt.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "ada-stmt" "progmodes/ada-stmt.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/ada-stmt.el (autoload 'ada-header "ada-stmt" "\ @@ -96,8 +96,8 @@ Insert a descriptive header at the top of the file. ;;;*** -;;;### (autoloads nil "ada-xref" "progmodes/ada-xref.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "ada-xref" "progmodes/ada-xref.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/ada-xref.el (autoload 'ada-find-file "ada-xref" "\ @@ -108,8 +108,8 @@ Completion is available. ;;;*** -;;;### (autoloads nil "add-log" "vc/add-log.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "add-log" "vc/add-log.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from vc/add-log.el (put 'change-log-default-name 'safe-local-variable 'string-or-null-p) @@ -238,8 +238,8 @@ old-style time formats for entries are supported. ;;;*** -;;;### (autoloads nil "advice" "emacs-lisp/advice.el" (21607 54477 -;;;;;; 800124 118000)) +;;;### (autoloads nil "advice" "emacs-lisp/advice.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from emacs-lisp/advice.el (defvar ad-redefinition-action 'warn "\ @@ -374,7 +374,7 @@ usage: (defadvice FUNCTION (CLASS NAME [POSITION] [ARGLIST] FLAG...) ;;;*** -;;;### (autoloads nil "align" "align.el" (21607 54477 800124 118000)) +;;;### (autoloads nil "align" "align.el" (21670 32330 885624 725000)) ;;; Generated autoloads from align.el (autoload 'align "align" "\ @@ -477,7 +477,7 @@ A replacement function for `newline-and-indent', aligning as it goes. ;;;*** -;;;### (autoloads nil "allout" "allout.el" (21607 54477 800124 118000)) +;;;### (autoloads nil "allout" "allout.el" (21670 32330 885624 725000)) ;;; Generated autoloads from allout.el (push (purecopy '(allout 2 3)) package--builtin-versions) @@ -837,8 +837,8 @@ for details on preparing Emacs for automatic allout activation. ;;;*** -;;;### (autoloads nil "allout-widgets" "allout-widgets.el" (21609 -;;;;;; 55608 852266 580000)) +;;;### (autoloads nil "allout-widgets" "allout-widgets.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from allout-widgets.el (push (purecopy '(allout-widgets 1 0)) package--builtin-versions) @@ -896,8 +896,8 @@ outline hot-spot navigation (see `allout-mode'). ;;;*** -;;;### (autoloads nil "ange-ftp" "net/ange-ftp.el" (21640 46919 650145 -;;;;;; 897000)) +;;;### (autoloads nil "ange-ftp" "net/ange-ftp.el" (21696 56380 925320 +;;;;;; 624000)) ;;; Generated autoloads from net/ange-ftp.el (defalias 'ange-ftp-re-read-dir 'ange-ftp-reread-dir) @@ -918,8 +918,8 @@ directory, so that Emacs will know its current contents. ;;;*** -;;;### (autoloads nil "animate" "play/animate.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "animate" "play/animate.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from play/animate.el (autoload 'animate-string "animate" "\ @@ -951,8 +951,8 @@ the buffer *Birthday-Present-for-Name*. ;;;*** -;;;### (autoloads nil "ansi-color" "ansi-color.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "ansi-color" "ansi-color.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from ansi-color.el (push (purecopy '(ansi-color 3 4 2)) package--builtin-versions) @@ -978,8 +978,8 @@ This is a good function to put in `comint-output-filter-functions'. ;;;*** -;;;### (autoloads nil "antlr-mode" "progmodes/antlr-mode.el" (21607 -;;;;;; 54478 800121 42000)) +;;;### (autoloads nil "antlr-mode" "progmodes/antlr-mode.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from progmodes/antlr-mode.el (push (purecopy '(antlr-mode 2 2 3)) package--builtin-versions) @@ -1015,8 +1015,8 @@ Used in `antlr-mode'. Also a useful function in `java-mode-hook'. ;;;*** -;;;### (autoloads nil "appt" "calendar/appt.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "appt" "calendar/appt.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from calendar/appt.el (autoload 'appt-add "appt" "\ @@ -1037,8 +1037,8 @@ ARG is positive, otherwise off. ;;;*** -;;;### (autoloads nil "apropos" "apropos.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "apropos" "apropos.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from apropos.el (autoload 'apropos-read-pattern "apropos" "\ @@ -1153,8 +1153,8 @@ Returns list of symbols and documentation found. ;;;*** -;;;### (autoloads nil "arc-mode" "arc-mode.el" (21621 7062 810116 -;;;;;; 332000)) +;;;### (autoloads nil "arc-mode" "arc-mode.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from arc-mode.el (autoload 'archive-mode "arc-mode" "\ @@ -1174,7 +1174,7 @@ archive. ;;;*** -;;;### (autoloads nil "array" "array.el" (21607 54477 800124 118000)) +;;;### (autoloads nil "array" "array.el" (21670 32330 885624 725000)) ;;; Generated autoloads from array.el (autoload 'array-mode "array" "\ @@ -1245,8 +1245,8 @@ Entering array mode calls the function `array-mode-hook'. ;;;*** -;;;### (autoloads nil "artist" "textmodes/artist.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "artist" "textmodes/artist.el" (21704 50495 +;;;;;; 455324 752000)) ;;; Generated autoloads from textmodes/artist.el (push (purecopy '(artist 1 2 6)) package--builtin-versions) @@ -1452,8 +1452,8 @@ Keymap summary ;;;*** -;;;### (autoloads nil "asm-mode" "progmodes/asm-mode.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "asm-mode" "progmodes/asm-mode.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/asm-mode.el (autoload 'asm-mode "asm-mode" "\ @@ -1480,8 +1480,8 @@ Special commands: ;;;*** -;;;### (autoloads nil "auth-source" "gnus/auth-source.el" (21625 -;;;;;; 43838 483701 627000)) +;;;### (autoloads nil "auth-source" "gnus/auth-source.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from gnus/auth-source.el (defvar auth-source-cache-expiry 7200 "\ @@ -1493,8 +1493,8 @@ let-binding.") ;;;*** -;;;### (autoloads nil "autoarg" "autoarg.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "autoarg" "autoarg.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from autoarg.el (defvar autoarg-mode nil "\ @@ -1554,8 +1554,8 @@ This is similar to `autoarg-mode' but rebinds the keypad keys ;;;*** -;;;### (autoloads nil "autoconf" "progmodes/autoconf.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "autoconf" "progmodes/autoconf.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/autoconf.el (autoload 'autoconf-mode "autoconf" "\ @@ -1565,8 +1565,8 @@ Major mode for editing Autoconf configure.ac files. ;;;*** -;;;### (autoloads nil "autoinsert" "autoinsert.el" (21632 17083 200835 -;;;;;; 890000)) +;;;### (autoloads nil "autoinsert" "autoinsert.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from autoinsert.el (autoload 'auto-insert "autoinsert" "\ @@ -1604,8 +1604,8 @@ insert a template for the file depending on the mode of the buffer. ;;;*** -;;;### (autoloads nil "autoload" "emacs-lisp/autoload.el" (21628 -;;;;;; 43483 380149 771000)) +;;;### (autoloads nil "autoload" "emacs-lisp/autoload.el" (21673 +;;;;;; 8506 69195 402000)) ;;; Generated autoloads from emacs-lisp/autoload.el (put 'generated-autoload-file 'safe-local-variable 'stringp) @@ -1656,8 +1656,8 @@ should be non-nil). ;;;*** -;;;### (autoloads nil "autorevert" "autorevert.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "autorevert" "autorevert.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from autorevert.el (autoload 'auto-revert-mode "autorevert" "\ @@ -1745,7 +1745,7 @@ specifies in the mode line. ;;;*** -;;;### (autoloads nil "avoid" "avoid.el" (21607 54477 800124 118000)) +;;;### (autoloads nil "avoid" "avoid.el" (21670 32330 885624 725000)) ;;; Generated autoloads from avoid.el (defvar mouse-avoidance-mode nil "\ @@ -1783,8 +1783,8 @@ definition of \"random distance\".) ;;;*** -;;;### (autoloads nil "bat-mode" "progmodes/bat-mode.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "bat-mode" "progmodes/bat-mode.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/bat-mode.el (add-to-list 'auto-mode-alist '("\\.\\(bat\\|cmd\\)\\'" . bat-mode)) @@ -1802,8 +1802,8 @@ Run script using `bat-run' and `bat-run-args'. ;;;*** -;;;### (autoloads nil "battery" "battery.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "battery" "battery.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from battery.el (put 'battery-mode-line-string 'risky-local-variable t) @@ -1838,8 +1838,8 @@ seconds. ;;;*** -;;;### (autoloads nil "benchmark" "emacs-lisp/benchmark.el" (21607 -;;;;;; 54477 800124 118000)) +;;;### (autoloads nil "benchmark" "emacs-lisp/benchmark.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from emacs-lisp/benchmark.el (autoload 'benchmark-run "benchmark" "\ @@ -1875,8 +1875,8 @@ For non-interactive use see also `benchmark-run' and ;;;*** -;;;### (autoloads nil "bibtex" "textmodes/bibtex.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "bibtex" "textmodes/bibtex.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from textmodes/bibtex.el (autoload 'bibtex-initialize "bibtex" "\ @@ -1968,7 +1968,7 @@ A prefix arg negates the value of `bibtex-search-entry-globally'. ;;;*** ;;;### (autoloads nil "bibtex-style" "textmodes/bibtex-style.el" -;;;;;; (21607 54478 800121 42000)) +;;;;;; (21670 32331 885635 586000)) ;;; Generated autoloads from textmodes/bibtex-style.el (autoload 'bibtex-style-mode "bibtex-style" "\ @@ -1978,8 +1978,8 @@ Major mode for editing BibTeX style files. ;;;*** -;;;### (autoloads nil "binhex" "mail/binhex.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "binhex" "mail/binhex.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from mail/binhex.el (defconst binhex-begin-line "^:...............................................................$" "\ @@ -2003,8 +2003,8 @@ Binhex decode region between START and END. ;;;*** -;;;### (autoloads nil "blackbox" "play/blackbox.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "blackbox" "play/blackbox.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from play/blackbox.el (autoload 'blackbox "blackbox" "\ @@ -2123,8 +2123,8 @@ a reflection. ;;;*** -;;;### (autoloads nil "bookmark" "bookmark.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "bookmark" "bookmark.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from bookmark.el (define-key ctl-x-r-map "b" 'bookmark-jump) (define-key ctl-x-r-map "m" 'bookmark-set) @@ -2317,8 +2317,8 @@ Incremental search of bookmarks, hiding the non-matches as we go. ;;;*** -;;;### (autoloads nil "browse-url" "net/browse-url.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "browse-url" "net/browse-url.el" (21710 2878 +;;;;;; 794621 967000)) ;;; Generated autoloads from net/browse-url.el (defvar browse-url-browser-function 'browse-url-default-browser "\ @@ -2633,7 +2633,7 @@ from `browse-url-elinks-wrapper'. ;;;*** -;;;### (autoloads nil "bs" "bs.el" (21607 54477 800124 118000)) +;;;### (autoloads nil "bs" "bs.el" (21670 32330 885624 725000)) ;;; Generated autoloads from bs.el (push (purecopy '(bs 1 17)) package--builtin-versions) @@ -2674,8 +2674,8 @@ name of buffer configuration. ;;;*** -;;;### (autoloads nil "bubbles" "play/bubbles.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "bubbles" "play/bubbles.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from play/bubbles.el (autoload 'bubbles "bubbles" "\ @@ -2697,7 +2697,7 @@ columns on its right towards the left. ;;;*** ;;;### (autoloads nil "bug-reference" "progmodes/bug-reference.el" -;;;;;; (21607 54478 800121 42000)) +;;;;;; (21670 32331 385639 720000)) ;;; Generated autoloads from progmodes/bug-reference.el (put 'bug-reference-url-format 'safe-local-variable (lambda (s) (or (stringp s) (and (symbolp s) (get s 'bug-reference-url-format))))) @@ -2717,8 +2717,8 @@ Like `bug-reference-mode', but only buttonize in comments and strings. ;;;*** -;;;### (autoloads nil "bytecomp" "emacs-lisp/bytecomp.el" (21645 -;;;;;; 29116 670141 789000)) +;;;### (autoloads nil "bytecomp" "emacs-lisp/bytecomp.el" (21696 +;;;;;; 56380 925320 624000)) ;;; Generated autoloads from emacs-lisp/bytecomp.el (put 'byte-compile-dynamic 'safe-local-variable 'booleanp) (put 'byte-compile-disable-print-circle 'safe-local-variable 'booleanp) @@ -2838,8 +2838,8 @@ and corresponding effects. ;;;*** -;;;### (autoloads nil "cal-china" "calendar/cal-china.el" (21617 -;;;;;; 49721 420132 227000)) +;;;### (autoloads nil "cal-china" "calendar/cal-china.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from calendar/cal-china.el (put 'calendar-chinese-time-zone 'risky-local-variable t) @@ -2848,8 +2848,8 @@ and corresponding effects. ;;;*** -;;;### (autoloads nil "cal-dst" "calendar/cal-dst.el" (21609 55608 -;;;;;; 852266 580000)) +;;;### (autoloads nil "cal-dst" "calendar/cal-dst.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from calendar/cal-dst.el (put 'calendar-daylight-savings-starts 'risky-local-variable t) @@ -2860,8 +2860,8 @@ and corresponding effects. ;;;*** -;;;### (autoloads nil "cal-hebrew" "calendar/cal-hebrew.el" (21607 -;;;;;; 54477 800124 118000)) +;;;### (autoloads nil "cal-hebrew" "calendar/cal-hebrew.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from calendar/cal-hebrew.el (autoload 'calendar-hebrew-list-yahrzeits "cal-hebrew" "\ @@ -2873,7 +2873,7 @@ from the cursor position. ;;;*** -;;;### (autoloads nil "calc" "calc/calc.el" (21607 54477 800124 118000)) +;;;### (autoloads nil "calc" "calc/calc.el" (21670 32330 885624 725000)) ;;; Generated autoloads from calc/calc.el (define-key ctl-x-map "*" 'calc-dispatch) @@ -2959,8 +2959,8 @@ See Info node `(calc)Defining Functions'. ;;;*** -;;;### (autoloads nil "calc-undo" "calc/calc-undo.el" (21607 54477 -;;;;;; 800124 118000)) +;;;### (autoloads nil "calc-undo" "calc/calc-undo.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from calc/calc-undo.el (autoload 'calc-undo "calc-undo" "\ @@ -2970,8 +2970,8 @@ See Info node `(calc)Defining Functions'. ;;;*** -;;;### (autoloads nil "calculator" "calculator.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "calculator" "calculator.el" (21702 8774 274627 +;;;;;; 813000)) ;;; Generated autoloads from calculator.el (autoload 'calculator "calculator" "\ @@ -2982,8 +2982,8 @@ See the documentation for `calculator-mode' for more information. ;;;*** -;;;### (autoloads nil "calendar" "calendar/calendar.el" (21607 54477 -;;;;;; 800124 118000)) +;;;### (autoloads nil "calendar" "calendar/calendar.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from calendar/calendar.el (autoload 'calendar "calendar" "\ @@ -3026,8 +3026,8 @@ This function is suitable for execution in an init file. ;;;*** -;;;### (autoloads nil "canlock" "gnus/canlock.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "canlock" "gnus/canlock.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from gnus/canlock.el (autoload 'canlock-insert-header "canlock" "\ @@ -3044,8 +3044,8 @@ it fails. ;;;*** -;;;### (autoloads nil "cc-engine" "progmodes/cc-engine.el" (21653 -;;;;;; 23227 760147 961000)) +;;;### (autoloads nil "cc-engine" "progmodes/cc-engine.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from progmodes/cc-engine.el (autoload 'c-guess-basic-syntax "cc-engine" "\ @@ -3055,8 +3055,8 @@ Return the syntactic context of the current line. ;;;*** -;;;### (autoloads nil "cc-guess" "progmodes/cc-guess.el" (21628 56730 -;;;;;; 520119 990000)) +;;;### (autoloads nil "cc-guess" "progmodes/cc-guess.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/cc-guess.el (defvar c-guess-guessed-offsets-alist nil "\ @@ -3154,8 +3154,8 @@ the absolute file name of the file if STYLE-NAME is nil. ;;;*** -;;;### (autoloads nil "cc-mode" "progmodes/cc-mode.el" (21652 2366 -;;;;;; 414435 564000)) +;;;### (autoloads nil "cc-mode" "progmodes/cc-mode.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/cc-mode.el (autoload 'c-initialize-cc-mode "cc-mode" "\ @@ -3312,8 +3312,8 @@ Key bindings: ;;;*** -;;;### (autoloads nil "cc-styles" "progmodes/cc-styles.el" (21628 -;;;;;; 56730 520119 990000)) +;;;### (autoloads nil "cc-styles" "progmodes/cc-styles.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from progmodes/cc-styles.el (autoload 'c-set-style "cc-styles" "\ @@ -3364,8 +3364,8 @@ and exists only for compatibility reasons. ;;;*** -;;;### (autoloads nil "cc-vars" "progmodes/cc-vars.el" (21628 56730 -;;;;;; 520119 990000)) +;;;### (autoloads nil "cc-vars" "progmodes/cc-vars.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/cc-vars.el (put 'c-basic-offset 'safe-local-variable 'integerp) (put 'c-backslash-column 'safe-local-variable 'integerp) @@ -3373,8 +3373,8 @@ and exists only for compatibility reasons. ;;;*** -;;;### (autoloads nil "ccl" "international/ccl.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "ccl" "international/ccl.el" (21682 23484 726747 +;;;;;; 991000)) ;;; Generated autoloads from international/ccl.el (autoload 'ccl-compile "ccl" "\ @@ -3450,6 +3450,14 @@ IF := (if EXPRESSION CCL_BLOCK_0 CCL_BLOCK_1) BRANCH := (branch EXPRESSION CCL_BLOCK_0 [CCL_BLOCK_1 ...]) ;; Execute STATEMENTs until (break) or (end) is executed. + +;; Create a block of STATEMENTs for repeating. The STATEMENTs +;; are executed sequentially until REPEAT or BREAK is executed. +;; If REPEAT statement is executed, STATEMENTs are executed from the +;; start again. If BREAK statements is executed, the execution +;; exits from the block. If neither REPEAT nor BREAK is +;; executed, the execution exits from the block after executing the +;; last STATEMENT. LOOP := (loop STATEMENT [STATEMENT ...]) ;; Terminate the most inner loop. @@ -3596,17 +3604,42 @@ ARRAY := `[' integer ... `]' TRANSLATE := - (translate-character REG(table) REG(charset) REG(codepoint)) - | (translate-character SYMBOL REG(charset) REG(codepoint)) - ;; SYMBOL must refer to a table defined by `define-translation-table'. + ;; Decode character SRC, translate it by translate table + ;; TABLE, and encode it back to DST. TABLE is specified + ;; by its id number in REG_0, SRC is specified by its + ;; charset id number and codepoint in REG_1 and REG_2 + ;; respectively. + ;; On encoding, the charset of highest priority is selected. + ;; After the execution, DST is specified by its charset + ;; id number and codepoint in REG_1 and REG_2 respectively. + (translate-character REG_0 REG_1 REG_2) + + ;; Same as above except for SYMBOL specifying the name of + ;; the translate table defined by `define-translation-table'. + | (translate-character SYMBOL REG_1 REG_2) + LOOKUP := - (lookup-character SYMBOL REG(charset) REG(codepoint)) + ;; Look up character SRC in hash table TABLE. TABLE is + ;; specified by its name in SYMBOL, and SRC is specified by + ;; its charset id number and codepoint in REG_1 and REG_2 + ;; respectively. + ;; If its associated value is an integer, set REG_1 to that + ;; value, and set r7 to 1. Otherwise, set r7 to 0. + (lookup-character SYMBOL REG_1 REG_2) + + ;; Look up integer value N in hash table TABLE. TABLE is + ;; specified by its name in SYMBOL and N is specified in + ;; REG. + ;; If its associated value is a character, set REG to that + ;; value, and set r7 to 1. Otherwise, set r7 to 0. | (lookup-integer SYMBOL REG(integer)) - ;; SYMBOL refers to a table defined by `define-translation-hash-table'. + MAP := - (iterate-multiple-map REG REG MAP-IDs) - | (map-multiple REG REG (MAP-SET)) - | (map-single REG REG MAP-ID) + ;; The following statements are for internal use only. + (iterate-multiple-map REG REG MAP-IDs) + | (map-multiple REG REG (MAP-SET)) + | (map-single REG REG MAP-ID) + MAP-IDs := MAP-ID ... MAP-SET := MAP-IDs | (MAP-IDs) MAP-SET MAP-ID := integer @@ -3634,8 +3667,8 @@ See the documentation of `define-ccl-program' for the detail of CCL program. ;;;*** -;;;### (autoloads nil "cconv" "emacs-lisp/cconv.el" (21645 29116 -;;;;;; 670141 789000)) +;;;### (autoloads nil "cconv" "emacs-lisp/cconv.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from emacs-lisp/cconv.el (autoload 'cconv-closure-convert "cconv" "\ @@ -3654,15 +3687,15 @@ Add the warnings that closure conversion would encounter. ;;;*** -;;;### (autoloads nil "cedet" "cedet/cedet.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "cedet" "cedet/cedet.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from cedet/cedet.el (push (purecopy '(cedet 2 0)) package--builtin-versions) ;;;*** -;;;### (autoloads nil "cfengine" "progmodes/cfengine.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "cfengine" "progmodes/cfengine.el" (21695 35516 +;;;;;; 595262 313000)) ;;; Generated autoloads from progmodes/cfengine.el (push (purecopy '(cfengine 1 3)) package--builtin-versions) @@ -3691,15 +3724,15 @@ Choose `cfengine2-mode' or `cfengine3-mode' by buffer contents. ;;;*** -;;;### (autoloads nil "chart" "emacs-lisp/chart.el" (21607 54477 -;;;;;; 800124 118000)) +;;;### (autoloads nil "chart" "emacs-lisp/chart.el" (21679 47292 +;;;;;; 556033 759000)) ;;; Generated autoloads from emacs-lisp/chart.el (push (purecopy '(chart 0 2)) package--builtin-versions) ;;;*** ;;;### (autoloads nil "check-declare" "emacs-lisp/check-declare.el" -;;;;;; (21607 54477 800124 118000)) +;;;;;; (21670 32330 885624 725000)) ;;; Generated autoloads from emacs-lisp/check-declare.el (autoload 'check-declare-file "check-declare" "\ @@ -3716,8 +3749,8 @@ Returns non-nil if any false statements are found. ;;;*** -;;;### (autoloads nil "checkdoc" "emacs-lisp/checkdoc.el" (21607 -;;;;;; 54477 800124 118000)) +;;;### (autoloads nil "checkdoc" "emacs-lisp/checkdoc.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from emacs-lisp/checkdoc.el (push (purecopy '(checkdoc 0 6 2)) package--builtin-versions) (put 'checkdoc-force-docstrings-flag 'safe-local-variable #'booleanp) @@ -3917,8 +3950,8 @@ checking of documentation strings. ;;;*** -;;;### (autoloads nil "china-util" "language/china-util.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "china-util" "language/china-util.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from language/china-util.el (autoload 'decode-hz-region "china-util" "\ @@ -3955,8 +3988,8 @@ Encode the text in the current buffer to HZ. ;;;*** -;;;### (autoloads nil "chistory" "chistory.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "chistory" "chistory.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from chistory.el (autoload 'repeat-matching-complex-command "chistory" "\ @@ -3995,8 +4028,8 @@ and runs the normal hook `command-history-hook'. ;;;*** -;;;### (autoloads nil "cl-indent" "emacs-lisp/cl-indent.el" (21607 -;;;;;; 54477 800124 118000)) +;;;### (autoloads nil "cl-indent" "emacs-lisp/cl-indent.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from emacs-lisp/cl-indent.el (autoload 'common-lisp-indent-function "cl-indent" "\ @@ -4079,8 +4112,8 @@ instead. ;;;*** -;;;### (autoloads nil "cl-lib" "emacs-lisp/cl-lib.el" (21619 26501 -;;;;;; 970129 581000)) +;;;### (autoloads nil "cl-lib" "emacs-lisp/cl-lib.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from emacs-lisp/cl-lib.el (push (purecopy '(cl-lib 1 0)) package--builtin-versions) @@ -4110,8 +4143,8 @@ a future Emacs interpreter will be able to use it.") ;;;*** -;;;### (autoloads nil "cmacexp" "progmodes/cmacexp.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "cmacexp" "progmodes/cmacexp.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/cmacexp.el (autoload 'c-macro-expand "cmacexp" "\ @@ -4131,8 +4164,8 @@ For use inside Lisp programs, see also `c-macro-expansion'. ;;;*** -;;;### (autoloads nil "cmuscheme" "cmuscheme.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "cmuscheme" "cmuscheme.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from cmuscheme.el (autoload 'run-scheme "cmuscheme" "\ @@ -4152,7 +4185,7 @@ is run). ;;;*** -;;;### (autoloads nil "color" "color.el" (21607 54477 800124 118000)) +;;;### (autoloads nil "color" "color.el" (21670 32330 885624 725000)) ;;; Generated autoloads from color.el (autoload 'color-name-to-rgb "color" "\ @@ -4171,7 +4204,7 @@ If FRAME cannot display COLOR, return nil. ;;;*** -;;;### (autoloads nil "comint" "comint.el" (21665 14401 955623 556000)) +;;;### (autoloads nil "comint" "comint.el" (21670 32330 885624 725000)) ;;; Generated autoloads from comint.el (defvar comint-output-filter-functions '(ansi-color-process-output comint-postoutput-scroll-to-bottom comint-watch-for-password-prompt) "\ @@ -4272,8 +4305,8 @@ REGEXP-GROUP is the regular expression group in REGEXP to use. ;;;*** -;;;### (autoloads nil "compare-w" "vc/compare-w.el" (21663 59071 -;;;;;; 96337 184000)) +;;;### (autoloads nil "compare-w" "vc/compare-w.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from vc/compare-w.el (autoload 'compare-windows "compare-w" "\ @@ -4309,8 +4342,8 @@ on third call it again advances points to the next difference and so on. ;;;*** -;;;### (autoloads nil "compile" "progmodes/compile.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "compile" "progmodes/compile.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/compile.el (defvar compilation-mode-hook nil "\ @@ -4491,8 +4524,8 @@ This is the value of `next-error-function' in Compilation buffers. ;;;*** -;;;### (autoloads nil "completion" "completion.el" (21657 20283 330825 -;;;;;; 807000)) +;;;### (autoloads nil "completion" "completion.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from completion.el (defvar dynamic-completion-mode nil "\ @@ -4514,8 +4547,8 @@ if ARG is omitted or nil. ;;;*** -;;;### (autoloads nil "conf-mode" "textmodes/conf-mode.el" (21607 -;;;;;; 54478 800121 42000)) +;;;### (autoloads nil "conf-mode" "textmodes/conf-mode.el" (21670 +;;;;;; 32331 885635 586000)) ;;; Generated autoloads from textmodes/conf-mode.el (autoload 'conf-mode "conf-mode" "\ @@ -4670,8 +4703,8 @@ For details see `conf-mode'. Example: ;;;*** -;;;### (autoloads nil "cookie1" "play/cookie1.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "cookie1" "play/cookie1.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from play/cookie1.el (autoload 'cookie "cookie1" "\ @@ -4699,8 +4732,8 @@ and subsequent calls on the same file won't go to disk. ;;;*** -;;;### (autoloads nil "copyright" "emacs-lisp/copyright.el" (21607 -;;;;;; 54477 800124 118000)) +;;;### (autoloads nil "copyright" "emacs-lisp/copyright.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from emacs-lisp/copyright.el (put 'copyright-at-end-flag 'safe-local-variable 'booleanp) (put 'copyright-names-regexp 'safe-local-variable 'stringp) @@ -4738,8 +4771,8 @@ If FIX is non-nil, run `copyright-fix-years' instead. ;;;*** -;;;### (autoloads nil "cperl-mode" "progmodes/cperl-mode.el" (21607 -;;;;;; 54478 800121 42000)) +;;;### (autoloads nil "cperl-mode" "progmodes/cperl-mode.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from progmodes/cperl-mode.el (put 'cperl-indent-level 'safe-local-variable 'integerp) (put 'cperl-brace-offset 'safe-local-variable 'integerp) @@ -4937,8 +4970,8 @@ Run a `perldoc' on the word around point. ;;;*** -;;;### (autoloads nil "cpp" "progmodes/cpp.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "cpp" "progmodes/cpp.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from progmodes/cpp.el (autoload 'cpp-highlight-buffer "cpp" "\ @@ -4956,8 +4989,8 @@ Edit display information for cpp conditionals. ;;;*** -;;;### (autoloads nil "crm" "emacs-lisp/crm.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "crm" "emacs-lisp/crm.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from emacs-lisp/crm.el (autoload 'completing-read-multiple "crm" "\ @@ -4983,8 +5016,8 @@ with empty strings removed. ;;;*** -;;;### (autoloads nil "css-mode" "textmodes/css-mode.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "css-mode" "textmodes/css-mode.el" (21669 40225 +;;;;;; 825176 608000)) ;;; Generated autoloads from textmodes/css-mode.el (autoload 'css-mode "css-mode" "\ @@ -5000,8 +5033,8 @@ Major mode to edit \"Sassy CSS\" files. ;;;*** -;;;### (autoloads nil "cua-base" "emulation/cua-base.el" (21607 54477 -;;;;;; 800124 118000)) +;;;### (autoloads nil "cua-base" "emulation/cua-base.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from emulation/cua-base.el (defvar cua-mode nil "\ @@ -5046,8 +5079,8 @@ Enable CUA selection mode without the C-z/C-x/C-c/C-v bindings. ;;;*** -;;;### (autoloads nil "cua-rect" "emulation/cua-rect.el" (21607 54477 -;;;;;; 800124 118000)) +;;;### (autoloads nil "cua-rect" "emulation/cua-rect.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from emulation/cua-rect.el (autoload 'cua-rectangle-mark-mode "cua-rect" "\ @@ -5058,8 +5091,8 @@ Activates the region if needed. Only lasts until the region is deactivated. ;;;*** -;;;### (autoloads nil "cus-edit" "cus-edit.el" (21646 49980 500843 -;;;;;; 452000)) +;;;### (autoloads nil "cus-edit" "cus-edit.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from cus-edit.el (defvar custom-browse-sort-alphabetically nil "\ @@ -5378,8 +5411,8 @@ The format is suitable for use with `easy-menu-define'. ;;;*** -;;;### (autoloads nil "cus-theme" "cus-theme.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "cus-theme" "cus-theme.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from cus-theme.el (autoload 'customize-create-theme "cus-theme" "\ @@ -5412,8 +5445,8 @@ omitted, a buffer named *Custom Themes* is used. ;;;*** -;;;### (autoloads nil "cvs-status" "vc/cvs-status.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "cvs-status" "vc/cvs-status.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from vc/cvs-status.el (autoload 'cvs-status-mode "cvs-status" "\ @@ -5423,8 +5456,8 @@ Mode used for cvs status output. ;;;*** -;;;### (autoloads nil "cwarn" "progmodes/cwarn.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "cwarn" "progmodes/cwarn.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from progmodes/cwarn.el (push (purecopy '(cwarn 1 3 1)) package--builtin-versions) @@ -5468,8 +5501,8 @@ See `cwarn-mode' for more information on Cwarn mode. ;;;*** -;;;### (autoloads nil "cyril-util" "language/cyril-util.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "cyril-util" "language/cyril-util.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from language/cyril-util.el (autoload 'cyrillic-encode-koi8-r-char "cyril-util" "\ @@ -5497,8 +5530,8 @@ If the argument is nil, we return the display table to its standard state. ;;;*** -;;;### (autoloads nil "dabbrev" "dabbrev.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "dabbrev" "dabbrev.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from dabbrev.el (put 'dabbrev-case-fold-search 'risky-local-variable t) (put 'dabbrev-case-replace 'risky-local-variable t) @@ -5544,8 +5577,8 @@ See also `dabbrev-abbrev-char-regexp' and \\[dabbrev-completion]. ;;;*** -;;;### (autoloads nil "data-debug" "cedet/data-debug.el" (21607 54477 -;;;;;; 800124 118000)) +;;;### (autoloads nil "data-debug" "cedet/data-debug.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from cedet/data-debug.el (autoload 'data-debug-new-buffer "data-debug" "\ @@ -5555,7 +5588,7 @@ Create a new data-debug buffer with NAME. ;;;*** -;;;### (autoloads nil "dbus" "net/dbus.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "dbus" "net/dbus.el" (21670 32331 385639 720000)) ;;; Generated autoloads from net/dbus.el (autoload 'dbus-handle-event "dbus" "\ @@ -5568,8 +5601,8 @@ If the HANDLER returns a `dbus-error', it is propagated as return message. ;;;*** -;;;### (autoloads nil "dcl-mode" "progmodes/dcl-mode.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "dcl-mode" "progmodes/dcl-mode.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/dcl-mode.el (autoload 'dcl-mode "dcl-mode" "\ @@ -5695,8 +5728,8 @@ There is some minimal font-lock support (see vars ;;;*** -;;;### (autoloads nil "debug" "emacs-lisp/debug.el" (21607 54477 -;;;;;; 800124 118000)) +;;;### (autoloads nil "debug" "emacs-lisp/debug.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from emacs-lisp/debug.el (setq debugger 'debug) @@ -5739,8 +5772,8 @@ To specify a nil argument interactively, exit with an empty minibuffer. ;;;*** -;;;### (autoloads nil "decipher" "play/decipher.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "decipher" "play/decipher.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from play/decipher.el (autoload 'decipher "decipher" "\ @@ -5768,8 +5801,8 @@ The most useful commands are: ;;;*** -;;;### (autoloads nil "delim-col" "delim-col.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "delim-col" "delim-col.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from delim-col.el (push (purecopy '(delim-col 2 1)) package--builtin-versions) @@ -5794,7 +5827,7 @@ START and END delimits the corners of text rectangle. ;;;*** -;;;### (autoloads nil "delsel" "delsel.el" (21607 54477 800124 118000)) +;;;### (autoloads nil "delsel" "delsel.el" (21670 32330 885624 725000)) ;;; Generated autoloads from delsel.el (defalias 'pending-delete-mode 'delete-selection-mode) @@ -5822,8 +5855,8 @@ point regardless of any selection. ;;;*** -;;;### (autoloads nil "derived" "emacs-lisp/derived.el" (21607 54477 -;;;;;; 800124 118000)) +;;;### (autoloads nil "derived" "emacs-lisp/derived.el" (21703 29629 +;;;;;; 608890 826000)) ;;; Generated autoloads from emacs-lisp/derived.el (autoload 'define-derived-mode "derived" "\ @@ -5879,6 +5912,8 @@ See Info node `(elisp)Derived Modes' for more details. (function-put 'define-derived-mode 'doc-string-elt '4) +(function-put 'define-derived-mode 'lisp-indent-function '3) + (autoload 'derived-mode-init-mode-variables "derived" "\ Initialize variables for a new MODE. Right now, if they don't already exist, set up a blank keymap, an @@ -5889,8 +5924,8 @@ the first time the mode is used. ;;;*** -;;;### (autoloads nil "descr-text" "descr-text.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "descr-text" "descr-text.el" (21695 35516 595262 +;;;;;; 313000)) ;;; Generated autoloads from descr-text.el (autoload 'describe-text-properties "descr-text" "\ @@ -5922,10 +5957,24 @@ relevant to POS. \(fn POS &optional BUFFER)" t nil) +(autoload 'describe-char-eldoc "descr-text" "\ +Return a description of character at point for use by ElDoc mode. + +Return nil if character at point is a printable ASCII +character (i.e. codepoint between 32 and 127 inclusively). +Otherwise return a description formatted by +`describe-char-eldoc--format' function taking into account value +of `eldoc-echo-area-use-multiline-p' variable and width of +minibuffer window for width limit. + +This function is meant to be used as a value of +`eldoc-documentation-function' variable. + +\(fn)" nil nil) + ;;;*** -;;;### (autoloads nil "desktop" "desktop.el" (21666 35265 825623 -;;;;;; 21000)) +;;;### (autoloads nil "desktop" "desktop.el" (21691 38459 74604 918000)) ;;; Generated autoloads from desktop.el (defvar desktop-save-mode nil "\ @@ -6130,8 +6179,8 @@ Revert to the last loaded desktop. ;;;*** -;;;### (autoloads nil "deuglify" "gnus/deuglify.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "deuglify" "gnus/deuglify.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from gnus/deuglify.el (autoload 'gnus-article-outlook-unwrap-lines "deuglify" "\ @@ -6163,8 +6212,8 @@ Deuglify broken Outlook (Express) articles and redisplay. ;;;*** -;;;### (autoloads nil "diary-lib" "calendar/diary-lib.el" (21625 -;;;;;; 43838 483701 627000)) +;;;### (autoloads nil "diary-lib" "calendar/diary-lib.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from calendar/diary-lib.el (autoload 'diary "diary-lib" "\ @@ -6206,7 +6255,7 @@ Major mode for editing the diary file. ;;;*** -;;;### (autoloads nil "diff" "vc/diff.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "diff" "vc/diff.el" (21670 32331 885635 586000)) ;;; Generated autoloads from vc/diff.el (defvar diff-switches (purecopy "-c") "\ @@ -6254,8 +6303,8 @@ This requires the external program `diff' to be in your `exec-path'. ;;;*** -;;;### (autoloads nil "diff-mode" "vc/diff-mode.el" (21628 45530 -;;;;;; 160140 360000)) +;;;### (autoloads nil "diff-mode" "vc/diff-mode.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from vc/diff-mode.el (autoload 'diff-mode "diff-mode" "\ @@ -6287,7 +6336,7 @@ the mode if ARG is omitted or nil. ;;;*** -;;;### (autoloads nil "dig" "net/dig.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "dig" "net/dig.el" (21670 32331 385639 720000)) ;;; Generated autoloads from net/dig.el (autoload 'dig "dig" "\ @@ -6298,7 +6347,7 @@ Optional arguments are passed to `dig-invoke'. ;;;*** -;;;### (autoloads nil "dired" "dired.el" (21662 38238 226339 285000)) +;;;### (autoloads nil "dired" "dired.el" (21670 32624 385626 484000)) ;;; Generated autoloads from dired.el (defvar dired-listing-switches (purecopy "-al") "\ @@ -6418,8 +6467,8 @@ Keybindings: ;;;*** -;;;### (autoloads nil "dirtrack" "dirtrack.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "dirtrack" "dirtrack.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from dirtrack.el (autoload 'dirtrack-mode "dirtrack" "\ @@ -6449,8 +6498,8 @@ from `default-directory'. ;;;*** -;;;### (autoloads nil "disass" "emacs-lisp/disass.el" (21607 54477 -;;;;;; 800124 118000)) +;;;### (autoloads nil "disass" "emacs-lisp/disass.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from emacs-lisp/disass.el (autoload 'disassemble "disass" "\ @@ -6464,8 +6513,8 @@ redefine OBJECT if it is a symbol. ;;;*** -;;;### (autoloads nil "disp-table" "disp-table.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "disp-table" "disp-table.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from disp-table.el (autoload 'make-display-table "disp-table" "\ @@ -6586,8 +6635,8 @@ in `.emacs'. ;;;*** -;;;### (autoloads nil "dissociate" "play/dissociate.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "dissociate" "play/dissociate.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from play/dissociate.el (autoload 'dissociated-press "dissociate" "\ @@ -6603,7 +6652,7 @@ Default is 2. ;;;*** -;;;### (autoloads nil "dnd" "dnd.el" (21666 35265 825623 21000)) +;;;### (autoloads nil "dnd" "dnd.el" (21670 32330 885624 725000)) ;;; Generated autoloads from dnd.el (defvar dnd-protocol-alist `((,(purecopy "^file:///") . dnd-open-local-file) (,(purecopy "^file://") . dnd-open-file) (,(purecopy "^file:") . dnd-open-local-file) (,(purecopy "^\\(https?\\|ftp\\|file\\|nfs\\)://") . dnd-open-file)) "\ @@ -6623,8 +6672,8 @@ if some action was made, or nil if the URL is ignored.") ;;;*** -;;;### (autoloads nil "dns-mode" "textmodes/dns-mode.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "dns-mode" "textmodes/dns-mode.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from textmodes/dns-mode.el (autoload 'dns-mode "dns-mode" "\ @@ -6647,8 +6696,8 @@ Locate SOA record and increment the serial field. ;;;*** -;;;### (autoloads nil "doc-view" "doc-view.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "doc-view" "doc-view.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from doc-view.el (autoload 'doc-view-mode-p "doc-view" "\ @@ -6694,8 +6743,8 @@ See the command `doc-view-mode' for more information on this mode. ;;;*** -;;;### (autoloads nil "doctor" "play/doctor.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "doctor" "play/doctor.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from play/doctor.el (autoload 'doctor "doctor" "\ @@ -6705,7 +6754,7 @@ Switch to *doctor* buffer and start giving psychotherapy. ;;;*** -;;;### (autoloads nil "double" "double.el" (21607 54477 800124 118000)) +;;;### (autoloads nil "double" "double.el" (21670 32330 885624 725000)) ;;; Generated autoloads from double.el (autoload 'double-mode "double" "\ @@ -6721,8 +6770,8 @@ strings when pressed twice. See `double-map' for details. ;;;*** -;;;### (autoloads nil "dunnet" "play/dunnet.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "dunnet" "play/dunnet.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from play/dunnet.el (push (purecopy '(dunnet 2 1)) package--builtin-versions) @@ -6733,8 +6782,8 @@ Switch to *dungeon* buffer and start game. ;;;*** -;;;### (autoloads nil "easy-mmode" "emacs-lisp/easy-mmode.el" (21607 -;;;;;; 54477 800124 118000)) +;;;### (autoloads nil "easy-mmode" "emacs-lisp/easy-mmode.el" (21708 +;;;;;; 47547 478182 210000)) ;;; Generated autoloads from emacs-lisp/easy-mmode.el (defalias 'easy-mmode-define-minor-mode 'define-minor-mode) @@ -6808,6 +6857,8 @@ For example, you could write (function-put 'define-minor-mode 'doc-string-elt '2) +(function-put 'define-minor-mode 'lisp-indent-function '1) + (defalias 'easy-mmode-define-global-mode 'define-globalized-minor-mode) (defalias 'define-global-minor-mode 'define-globalized-minor-mode) @@ -6873,8 +6924,8 @@ CSS contains a list of syntax specifications of the form (CHAR . SYNTAX). ;;;*** -;;;### (autoloads nil "easymenu" "emacs-lisp/easymenu.el" (21607 -;;;;;; 54477 800124 118000)) +;;;### (autoloads nil "easymenu" "emacs-lisp/easymenu.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from emacs-lisp/easymenu.el (autoload 'easy-menu-define "easymenu" "\ @@ -7012,8 +7063,8 @@ To implement dynamic menus, either call this from ;;;*** -;;;### (autoloads nil "ebnf2ps" "progmodes/ebnf2ps.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "ebnf2ps" "progmodes/ebnf2ps.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/ebnf2ps.el (push (purecopy '(ebnf2ps 4 4)) package--builtin-versions) @@ -7278,8 +7329,8 @@ See `ebnf-style-database' documentation. ;;;*** -;;;### (autoloads nil "ebrowse" "progmodes/ebrowse.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "ebrowse" "progmodes/ebrowse.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/ebrowse.el (autoload 'ebrowse-tree-mode "ebrowse" "\ @@ -7427,8 +7478,8 @@ Display statistics for a class tree. ;;;*** -;;;### (autoloads nil "ebuff-menu" "ebuff-menu.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "ebuff-menu" "ebuff-menu.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from ebuff-menu.el (autoload 'electric-buffer-list "ebuff-menu" "\ @@ -7460,8 +7511,8 @@ Run hooks in `electric-buffer-menu-mode-hook' on entry. ;;;*** -;;;### (autoloads nil "echistory" "echistory.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "echistory" "echistory.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from echistory.el (autoload 'Electric-command-history-redo-expression "echistory" "\ @@ -7472,8 +7523,8 @@ With prefix arg NOCONFIRM, execute current line as-is without editing. ;;;*** -;;;### (autoloads nil "ecomplete" "gnus/ecomplete.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "ecomplete" "gnus/ecomplete.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from gnus/ecomplete.el (autoload 'ecomplete-setup "ecomplete" "\ @@ -7483,7 +7534,7 @@ With prefix arg NOCONFIRM, execute current line as-is without editing. ;;;*** -;;;### (autoloads nil "ede" "cedet/ede.el" (21607 54477 800124 118000)) +;;;### (autoloads nil "ede" "cedet/ede.el" (21679 47292 556033 759000)) ;;; Generated autoloads from cedet/ede.el (push (purecopy '(ede 1 2)) package--builtin-versions) @@ -7509,8 +7560,8 @@ an EDE controlled project. ;;;*** -;;;### (autoloads nil "edebug" "emacs-lisp/edebug.el" (21607 54477 -;;;;;; 800124 118000)) +;;;### (autoloads nil "edebug" "emacs-lisp/edebug.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from emacs-lisp/edebug.el (defvar edebug-all-defs nil "\ @@ -7574,7 +7625,7 @@ Toggle edebugging of all forms. ;;;*** -;;;### (autoloads nil "ediff" "vc/ediff.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "ediff" "vc/ediff.el" (21670 32331 885635 586000)) ;;; Generated autoloads from vc/ediff.el (push (purecopy '(ediff 2 81 4)) package--builtin-versions) @@ -7846,8 +7897,8 @@ With optional NODE, goes to that node. ;;;*** -;;;### (autoloads nil "ediff-help" "vc/ediff-help.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "ediff-help" "vc/ediff-help.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from vc/ediff-help.el (autoload 'ediff-customize "ediff-help" "\ @@ -7857,8 +7908,8 @@ With optional NODE, goes to that node. ;;;*** -;;;### (autoloads nil "ediff-mult" "vc/ediff-mult.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "ediff-mult" "vc/ediff-mult.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from vc/ediff-mult.el (autoload 'ediff-show-registry "ediff-mult" "\ @@ -7870,8 +7921,8 @@ Display Ediff's registry. ;;;*** -;;;### (autoloads nil "ediff-util" "vc/ediff-util.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "ediff-util" "vc/ediff-util.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from vc/ediff-util.el (autoload 'ediff-toggle-multiframe "ediff-util" "\ @@ -7890,8 +7941,8 @@ To change the default, set the variable `ediff-use-toolbar-p', which see. ;;;*** -;;;### (autoloads nil "edmacro" "edmacro.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "edmacro" "edmacro.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from edmacro.el (push (purecopy '(edmacro 2 1)) package--builtin-versions) @@ -7940,8 +7991,8 @@ or nil, use a compact 80-column format. ;;;*** -;;;### (autoloads nil "edt" "emulation/edt.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "edt" "emulation/edt.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from emulation/edt.el (autoload 'edt-set-scroll-margins "edt" "\ @@ -7958,7 +8009,7 @@ Turn on EDT Emulation. ;;;*** -;;;### (autoloads nil "ehelp" "ehelp.el" (21607 54477 800124 118000)) +;;;### (autoloads nil "ehelp" "ehelp.el" (21670 32330 885624 725000)) ;;; Generated autoloads from ehelp.el (autoload 'with-electric-help "ehelp" "\ @@ -7994,15 +8045,15 @@ BUFFER is put back into its original major mode. ;;;*** -;;;### (autoloads nil "eieio" "emacs-lisp/eieio.el" (21607 54477 -;;;;;; 800124 118000)) +;;;### (autoloads nil "eieio" "emacs-lisp/eieio.el" (21708 47547 +;;;;;; 478182 210000)) ;;; Generated autoloads from emacs-lisp/eieio.el (push (purecopy '(eieio 1 4)) package--builtin-versions) ;;;*** -;;;### (autoloads nil "eieio-core" "emacs-lisp/eieio-core.el" (21634 -;;;;;; 58813 400848 500000)) +;;;### (autoloads nil "eieio-core" "emacs-lisp/eieio-core.el" (21708 +;;;;;; 47547 478182 210000)) ;;; Generated autoloads from emacs-lisp/eieio-core.el (push (purecopy '(eieio-core 1 4)) package--builtin-versions) @@ -8018,8 +8069,8 @@ It creates an autoload function for CNAME's constructor. ;;;*** -;;;### (autoloads nil "elec-pair" "elec-pair.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "elec-pair" "elec-pair.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from elec-pair.el (defvar electric-pair-text-pairs '((34 . 34)) "\ @@ -8054,8 +8105,8 @@ closing parenthesis. (Likewise for brackets, etc.). ;;;*** -;;;### (autoloads nil "elide-head" "elide-head.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "elide-head" "elide-head.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from elide-head.el (autoload 'elide-head "elide-head" "\ @@ -8070,8 +8121,8 @@ This is suitable as an entry on `find-file-hook' or appropriate mode hooks. ;;;*** -;;;### (autoloads nil "elint" "emacs-lisp/elint.el" (21607 54477 -;;;;;; 800124 118000)) +;;;### (autoloads nil "elint" "emacs-lisp/elint.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from emacs-lisp/elint.el (autoload 'elint-file "elint" "\ @@ -8106,8 +8157,8 @@ optional prefix argument REINIT is non-nil. ;;;*** -;;;### (autoloads nil "elp" "emacs-lisp/elp.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "elp" "emacs-lisp/elp.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from emacs-lisp/elp.el (autoload 'elp-instrument-function "elp" "\ @@ -8141,8 +8192,8 @@ displayed. ;;;*** -;;;### (autoloads nil "emacs-lock" "emacs-lock.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "emacs-lock" "emacs-lock.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from emacs-lock.el (autoload 'emacs-lock-mode "emacs-lock" "\ @@ -8169,8 +8220,8 @@ Other values are interpreted as usual. ;;;*** -;;;### (autoloads nil "emacsbug" "mail/emacsbug.el" (21608 34742 -;;;;;; 2253 811000)) +;;;### (autoloads nil "emacsbug" "mail/emacsbug.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from mail/emacsbug.el (autoload 'report-emacs-bug "emacsbug" "\ @@ -8244,8 +8295,8 @@ Emerge two RCS revisions of a file, with another revision as ancestor. ;;;*** -;;;### (autoloads nil "enriched" "textmodes/enriched.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "enriched" "textmodes/enriched.el" (21691 38459 +;;;;;; 74604 918000)) ;;; Generated autoloads from textmodes/enriched.el (autoload 'enriched-mode "enriched" "\ @@ -8280,7 +8331,7 @@ Commands: ;;;*** -;;;### (autoloads nil "epa" "epa.el" (21624 22971 140149 848000)) +;;;### (autoloads nil "epa" "epa.el" (21670 32330 885624 725000)) ;;; Generated autoloads from epa.el (autoload 'epa-list-keys "epa" "\ @@ -8468,8 +8519,8 @@ Insert selected KEYS after the point. ;;;*** -;;;### (autoloads nil "epa-dired" "epa-dired.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "epa-dired" "epa-dired.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from epa-dired.el (autoload 'epa-dired-do-decrypt "epa-dired" "\ @@ -8494,8 +8545,8 @@ Encrypt marked files. ;;;*** -;;;### (autoloads nil "epa-file" "epa-file.el" (21611 10937 700236 -;;;;;; 3000)) +;;;### (autoloads nil "epa-file" "epa-file.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from epa-file.el (autoload 'epa-file-handler "epa-file" "\ @@ -8515,8 +8566,8 @@ Encrypt marked files. ;;;*** -;;;### (autoloads nil "epa-mail" "epa-mail.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "epa-mail" "epa-mail.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from epa-mail.el (autoload 'epa-mail-mode "epa-mail" "\ @@ -8593,7 +8644,7 @@ if ARG is omitted or nil. ;;;*** -;;;### (autoloads nil "epg" "epg.el" (21611 10937 700236 3000)) +;;;### (autoloads nil "epg" "epg.el" (21670 32330 885624 725000)) ;;; Generated autoloads from epg.el (push (purecopy '(epg 1 0 0)) package--builtin-versions) @@ -8604,8 +8655,8 @@ Return a context object. ;;;*** -;;;### (autoloads nil "epg-config" "epg-config.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "epg-config" "epg-config.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from epg-config.el (autoload 'epg-configuration "epg-config" "\ @@ -8625,7 +8676,7 @@ Look at CONFIG and try to expand GROUP. ;;;*** -;;;### (autoloads nil "erc" "erc/erc.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "erc" "erc/erc.el" (21670 32330 885624 725000)) ;;; Generated autoloads from erc/erc.el (autoload 'erc-select-read-args "erc" "\ @@ -8673,36 +8724,36 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL. ;;;*** -;;;### (autoloads nil "erc-autoaway" "erc/erc-autoaway.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "erc-autoaway" "erc/erc-autoaway.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from erc/erc-autoaway.el (autoload 'erc-autoaway-mode "erc-autoaway") ;;;*** -;;;### (autoloads nil "erc-button" "erc/erc-button.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "erc-button" "erc/erc-button.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from erc/erc-button.el (autoload 'erc-button-mode "erc-button" nil t) ;;;*** -;;;### (autoloads nil "erc-capab" "erc/erc-capab.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "erc-capab" "erc/erc-capab.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from erc/erc-capab.el (autoload 'erc-capab-identify-mode "erc-capab" nil t) ;;;*** -;;;### (autoloads nil "erc-compat" "erc/erc-compat.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "erc-compat" "erc/erc-compat.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from erc/erc-compat.el (autoload 'erc-define-minor-mode "erc-compat") ;;;*** -;;;### (autoloads nil "erc-dcc" "erc/erc-dcc.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "erc-dcc" "erc/erc-dcc.el" (21696 56380 925320 +;;;;;; 624000)) ;;; Generated autoloads from erc/erc-dcc.el (autoload 'erc-dcc-mode "erc-dcc") @@ -8732,14 +8783,14 @@ that subcommand. ;;;*** ;;;### (autoloads nil "erc-desktop-notifications" "erc/erc-desktop-notifications.el" -;;;;;; (21617 49721 420132 227000)) +;;;;;; (21670 32330 885624 725000)) ;;; Generated autoloads from erc/erc-desktop-notifications.el (autoload 'erc-notifications-mode "erc-desktop-notifications" "" t) ;;;*** -;;;### (autoloads nil "erc-ezbounce" "erc/erc-ezbounce.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "erc-ezbounce" "erc/erc-ezbounce.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from erc/erc-ezbounce.el (autoload 'erc-cmd-ezb "erc-ezbounce" "\ @@ -8801,8 +8852,8 @@ Add EZBouncer convenience functions to ERC. ;;;*** -;;;### (autoloads nil "erc-fill" "erc/erc-fill.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "erc-fill" "erc/erc-fill.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from erc/erc-fill.el (autoload 'erc-fill-mode "erc-fill" nil t) @@ -8814,8 +8865,8 @@ You can put this on `erc-insert-modify-hook' and/or `erc-send-modify-hook'. ;;;*** -;;;### (autoloads nil "erc-identd" "erc/erc-identd.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "erc-identd" "erc/erc-identd.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from erc/erc-identd.el (autoload 'erc-identd-mode "erc-identd") @@ -8836,8 +8887,8 @@ system. ;;;*** -;;;### (autoloads nil "erc-imenu" "erc/erc-imenu.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "erc-imenu" "erc/erc-imenu.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from erc/erc-imenu.el (autoload 'erc-create-imenu-index "erc-imenu" "\ @@ -8847,22 +8898,22 @@ system. ;;;*** -;;;### (autoloads nil "erc-join" "erc/erc-join.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "erc-join" "erc/erc-join.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from erc/erc-join.el (autoload 'erc-autojoin-mode "erc-join" nil t) ;;;*** -;;;### (autoloads nil "erc-list" "erc/erc-list.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "erc-list" "erc/erc-list.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from erc/erc-list.el (autoload 'erc-list-mode "erc-list") ;;;*** -;;;### (autoloads nil "erc-log" "erc/erc-log.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "erc-log" "erc/erc-log.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from erc/erc-log.el (autoload 'erc-log-mode "erc-log" nil t) @@ -8891,8 +8942,8 @@ You can save every individual message by putting this function on ;;;*** -;;;### (autoloads nil "erc-match" "erc/erc-match.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "erc-match" "erc/erc-match.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from erc/erc-match.el (autoload 'erc-match-mode "erc-match") @@ -8938,15 +8989,15 @@ Delete dangerous-host interactively to `erc-dangerous-hosts'. ;;;*** -;;;### (autoloads nil "erc-menu" "erc/erc-menu.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "erc-menu" "erc/erc-menu.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from erc/erc-menu.el (autoload 'erc-menu-mode "erc-menu" nil t) ;;;*** -;;;### (autoloads nil "erc-netsplit" "erc/erc-netsplit.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "erc-netsplit" "erc/erc-netsplit.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from erc/erc-netsplit.el (autoload 'erc-netsplit-mode "erc-netsplit") @@ -8957,8 +9008,8 @@ Show who's gone. ;;;*** -;;;### (autoloads nil "erc-networks" "erc/erc-networks.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "erc-networks" "erc/erc-networks.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from erc/erc-networks.el (autoload 'erc-determine-network "erc-networks" "\ @@ -8975,8 +9026,8 @@ Interactively select a server to connect to using `erc-server-alist'. ;;;*** -;;;### (autoloads nil "erc-notify" "erc/erc-notify.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "erc-notify" "erc/erc-notify.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from erc/erc-notify.el (autoload 'erc-notify-mode "erc-notify" nil t) @@ -8994,36 +9045,36 @@ with args, toggle notify status of people. ;;;*** -;;;### (autoloads nil "erc-page" "erc/erc-page.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "erc-page" "erc/erc-page.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from erc/erc-page.el (autoload 'erc-page-mode "erc-page") ;;;*** -;;;### (autoloads nil "erc-pcomplete" "erc/erc-pcomplete.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "erc-pcomplete" "erc/erc-pcomplete.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from erc/erc-pcomplete.el (autoload 'erc-completion-mode "erc-pcomplete" nil t) ;;;*** -;;;### (autoloads nil "erc-replace" "erc/erc-replace.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "erc-replace" "erc/erc-replace.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from erc/erc-replace.el (autoload 'erc-replace-mode "erc-replace") ;;;*** -;;;### (autoloads nil "erc-ring" "erc/erc-ring.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "erc-ring" "erc/erc-ring.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from erc/erc-ring.el (autoload 'erc-ring-mode "erc-ring" nil t) ;;;*** -;;;### (autoloads nil "erc-services" "erc/erc-services.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "erc-services" "erc/erc-services.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from erc/erc-services.el (autoload 'erc-services-mode "erc-services" nil t) @@ -9040,15 +9091,15 @@ When called interactively, read the password using `read-passwd'. ;;;*** -;;;### (autoloads nil "erc-sound" "erc/erc-sound.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "erc-sound" "erc/erc-sound.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from erc/erc-sound.el (autoload 'erc-sound-mode "erc-sound") ;;;*** -;;;### (autoloads nil "erc-speedbar" "erc/erc-speedbar.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "erc-speedbar" "erc/erc-speedbar.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from erc/erc-speedbar.el (autoload 'erc-speedbar-browser "erc-speedbar" "\ @@ -9059,22 +9110,22 @@ This will add a speedbar major display mode. ;;;*** -;;;### (autoloads nil "erc-spelling" "erc/erc-spelling.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "erc-spelling" "erc/erc-spelling.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from erc/erc-spelling.el (autoload 'erc-spelling-mode "erc-spelling" nil t) ;;;*** -;;;### (autoloads nil "erc-stamp" "erc/erc-stamp.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "erc-stamp" "erc/erc-stamp.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from erc/erc-stamp.el (autoload 'erc-timestamp-mode "erc-stamp" nil t) ;;;*** -;;;### (autoloads nil "erc-track" "erc/erc-track.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "erc-track" "erc/erc-track.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from erc/erc-track.el (defvar erc-track-minor-mode nil "\ @@ -9099,8 +9150,8 @@ keybindings will not do anything useful. ;;;*** -;;;### (autoloads nil "erc-truncate" "erc/erc-truncate.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "erc-truncate" "erc/erc-truncate.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from erc/erc-truncate.el (autoload 'erc-truncate-mode "erc-truncate" nil t) @@ -9119,8 +9170,8 @@ Meant to be used in hooks, like `erc-insert-post-hook'. ;;;*** -;;;### (autoloads nil "erc-xdcc" "erc/erc-xdcc.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "erc-xdcc" "erc/erc-xdcc.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from erc/erc-xdcc.el (autoload 'erc-xdcc-mode "erc-xdcc") @@ -9131,8 +9182,8 @@ Add a file to `erc-xdcc-files'. ;;;*** -;;;### (autoloads nil "ert" "emacs-lisp/ert.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "ert" "emacs-lisp/ert.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from emacs-lisp/ert.el (autoload 'ert-deftest "ert" "\ @@ -9201,8 +9252,8 @@ Display the documentation for TEST-OR-TEST-NAME (a symbol or ert-test). ;;;*** -;;;### (autoloads nil "ert-x" "emacs-lisp/ert-x.el" (21607 54477 -;;;;;; 800124 118000)) +;;;### (autoloads nil "ert-x" "emacs-lisp/ert-x.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from emacs-lisp/ert-x.el (put 'ert-with-test-buffer 'lisp-indent-function 1) @@ -9214,8 +9265,8 @@ Kill all test buffers that are still live. ;;;*** -;;;### (autoloads nil "esh-mode" "eshell/esh-mode.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "esh-mode" "eshell/esh-mode.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from eshell/esh-mode.el (autoload 'eshell-mode "esh-mode" "\ @@ -9225,8 +9276,8 @@ Emacs shell interactive mode. ;;;*** -;;;### (autoloads nil "eshell" "eshell/eshell.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "eshell" "eshell/eshell.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from eshell/eshell.el (push (purecopy '(eshell 2 4 2)) package--builtin-versions) @@ -9261,8 +9312,8 @@ corresponding to a successful execution. ;;;*** -;;;### (autoloads nil "etags" "progmodes/etags.el" (21665 14401 955623 -;;;;;; 556000)) +;;;### (autoloads nil "etags" "progmodes/etags.el" (21696 56380 925320 +;;;;;; 624000)) ;;; Generated autoloads from progmodes/etags.el (defvar tags-file-name nil "\ @@ -9577,8 +9628,8 @@ for \\[find-tag] (which see). ;;;*** -;;;### (autoloads nil "ethio-util" "language/ethio-util.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "ethio-util" "language/ethio-util.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from language/ethio-util.el (autoload 'setup-ethiopic-environment-internal "ethio-util" "\ @@ -9746,7 +9797,7 @@ With ARG, insert that many delimiters. ;;;*** -;;;### (autoloads nil "eudc" "net/eudc.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "eudc" "net/eudc.el" (21704 50495 455324 752000)) ;;; Generated autoloads from net/eudc.el (autoload 'eudc-set-server "eudc" "\ @@ -9800,8 +9851,8 @@ This does nothing except loading eudc by autoload side-effect. ;;;*** -;;;### (autoloads nil "eudc-bob" "net/eudc-bob.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "eudc-bob" "net/eudc-bob.el" (21704 50495 455324 +;;;;;; 752000)) ;;; Generated autoloads from net/eudc-bob.el (autoload 'eudc-display-generic-binary "eudc-bob" "\ @@ -9836,8 +9887,8 @@ Display a button for the JPEG DATA. ;;;*** -;;;### (autoloads nil "eudc-export" "net/eudc-export.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "eudc-export" "net/eudc-export.el" (21704 50495 +;;;;;; 455324 752000)) ;;; Generated autoloads from net/eudc-export.el (autoload 'eudc-insert-record-at-point-into-bbdb "eudc-export" "\ @@ -9853,8 +9904,8 @@ Call `eudc-insert-record-at-point-into-bbdb' if on a record. ;;;*** -;;;### (autoloads nil "eudc-hotlist" "net/eudc-hotlist.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "eudc-hotlist" "net/eudc-hotlist.el" (21704 +;;;;;; 50495 455324 752000)) ;;; Generated autoloads from net/eudc-hotlist.el (autoload 'eudc-edit-hotlist "eudc-hotlist" "\ @@ -9864,8 +9915,8 @@ Edit the hotlist of directory servers in a specialized buffer. ;;;*** -;;;### (autoloads nil "ewoc" "emacs-lisp/ewoc.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "ewoc" "emacs-lisp/ewoc.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from emacs-lisp/ewoc.el (autoload 'ewoc-create "ewoc" "\ @@ -9891,7 +9942,7 @@ fourth arg NOSEP non-nil inhibits this. ;;;*** -;;;### (autoloads nil "eww" "net/eww.el" (21667 56163 185621 290000)) +;;;### (autoloads nil "eww" "net/eww.el" (21702 8774 274627 813000)) ;;; Generated autoloads from net/eww.el (autoload 'eww "eww" "\ @@ -9925,8 +9976,8 @@ Display the bookmarks. ;;;*** -;;;### (autoloads nil "executable" "progmodes/executable.el" (21607 -;;;;;; 54478 800121 42000)) +;;;### (autoloads nil "executable" "progmodes/executable.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from progmodes/executable.el (autoload 'executable-command-find-posix-p "executable" "\ @@ -9967,7 +10018,7 @@ file modes. ;;;*** -;;;### (autoloads nil "expand" "expand.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "expand" "expand.el" (21670 32330 885624 725000)) ;;; Generated autoloads from expand.el (autoload 'expand-add-abbrevs "expand" "\ @@ -10016,8 +10067,8 @@ This is used only in conjunction with `expand-add-abbrevs'. ;;;*** -;;;### (autoloads nil "f90" "progmodes/f90.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "f90" "progmodes/f90.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from progmodes/f90.el (autoload 'f90-mode "f90" "\ @@ -10084,8 +10135,8 @@ with no args, if that value is non-nil. ;;;*** -;;;### (autoloads nil "face-remap" "face-remap.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "face-remap" "face-remap.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from face-remap.el (autoload 'face-remap-add-relative "face-remap" "\ @@ -10299,7 +10350,7 @@ you can set `feedmail-queue-reminder-alist' to nil. ;;;*** -;;;### (autoloads nil "ffap" "ffap.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "ffap" "ffap.el" (21696 56380 925320 624000)) ;;; Generated autoloads from ffap.el (autoload 'ffap-next "ffap" "\ @@ -10362,8 +10413,8 @@ Evaluate the forms in variable `ffap-bindings'. ;;;*** -;;;### (autoloads nil "filecache" "filecache.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "filecache" "filecache.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from filecache.el (autoload 'file-cache-add-directory "filecache" "\ @@ -10420,21 +10471,24 @@ the name is considered already unique; only the second substitution ;;;*** -;;;### (autoloads nil "filenotify" "filenotify.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "filenotify" "filenotify.el" (21704 50495 455324 +;;;;;; 752000)) ;;; Generated autoloads from filenotify.el (autoload 'file-notify-handle-event "filenotify" "\ Handle file system monitoring event. -If EVENT is a filewatch event, call its callback. +If EVENT is a filewatch event, call its callback. It has the format + + (file-notify (DESCRIPTOR ACTIONS FILE COOKIE) CALLBACK) + Otherwise, signal a `file-notify-error'. \(fn EVENT)" t nil) ;;;*** -;;;### (autoloads nil "files-x" "files-x.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "files-x" "files-x.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from files-x.el (autoload 'add-file-local-variable "files-x" "\ @@ -10499,8 +10553,8 @@ Copy directory-local variables to the -*- line. ;;;*** -;;;### (autoloads nil "filesets" "filesets.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "filesets" "filesets.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from filesets.el (autoload 'filesets-init "filesets" "\ @@ -10511,8 +10565,8 @@ Set up hooks, load the cache file -- if existing -- and build the menu. ;;;*** -;;;### (autoloads nil "find-cmd" "find-cmd.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "find-cmd" "find-cmd.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from find-cmd.el (push (purecopy '(find-cmd 0 6)) package--builtin-versions) @@ -10532,8 +10586,8 @@ result is a string that should be ready for the command line. ;;;*** -;;;### (autoloads nil "find-dired" "find-dired.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "find-dired" "find-dired.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from find-dired.el (autoload 'find-dired "find-dired" "\ @@ -10573,8 +10627,8 @@ use in place of \"-ls\" as the final argument. ;;;*** -;;;### (autoloads nil "find-file" "find-file.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "find-file" "find-file.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from find-file.el (defvar ff-special-constructs `((,(purecopy "^#\\s *\\(include\\|import\\)\\s +[<\"]\\(.*\\)[>\"]") lambda nil (buffer-substring (match-beginning 2) (match-end 2)))) "\ @@ -10664,8 +10718,8 @@ Visit the file you click on in another window. ;;;*** -;;;### (autoloads nil "find-func" "emacs-lisp/find-func.el" (21665 -;;;;;; 14401 955623 556000)) +;;;### (autoloads nil "find-func" "emacs-lisp/find-func.el" (21700 +;;;;;; 53432 444919 658000)) ;;; Generated autoloads from emacs-lisp/find-func.el (autoload 'find-library "find-func" "\ @@ -10823,8 +10877,8 @@ Define some key bindings for the find-function family of functions. ;;;*** -;;;### (autoloads nil "find-lisp" "find-lisp.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "find-lisp" "find-lisp.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from find-lisp.el (autoload 'find-lisp-find-dired "find-lisp" "\ @@ -10844,7 +10898,7 @@ Change the filter on a `find-lisp-find-dired' buffer to REGEXP. ;;;*** -;;;### (autoloads nil "finder" "finder.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "finder" "finder.el" (21670 32330 885624 725000)) ;;; Generated autoloads from finder.el (push (purecopy '(finder 1 0)) package--builtin-versions) @@ -10866,8 +10920,8 @@ Find packages matching a given keyword. ;;;*** -;;;### (autoloads nil "flow-ctrl" "flow-ctrl.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "flow-ctrl" "flow-ctrl.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from flow-ctrl.el (autoload 'enable-flow-control "flow-ctrl" "\ @@ -10888,8 +10942,8 @@ to get the effect of a C-q. ;;;*** -;;;### (autoloads nil "flow-fill" "gnus/flow-fill.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "flow-fill" "gnus/flow-fill.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from gnus/flow-fill.el (autoload 'fill-flowed-encode "flow-fill" "\ @@ -10904,8 +10958,8 @@ to get the effect of a C-q. ;;;*** -;;;### (autoloads nil "flymake" "progmodes/flymake.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "flymake" "progmodes/flymake.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/flymake.el (push (purecopy '(flymake 0 3)) package--builtin-versions) @@ -10935,8 +10989,8 @@ Turn flymake mode off. ;;;*** -;;;### (autoloads nil "flyspell" "textmodes/flyspell.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "flyspell" "textmodes/flyspell.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from textmodes/flyspell.el (autoload 'flyspell-prog-mode "flyspell" "\ @@ -11006,14 +11060,14 @@ Flyspell whole buffer. ;;;*** -;;;### (autoloads nil "foldout" "foldout.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "foldout" "foldout.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from foldout.el (push (purecopy '(foldout 1 10)) package--builtin-versions) ;;;*** -;;;### (autoloads nil "follow" "follow.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "follow" "follow.el" (21670 32330 885624 725000)) ;;; Generated autoloads from follow.el (autoload 'turn-on-follow-mode "follow" "\ @@ -11081,8 +11135,8 @@ selected if the original window is the first one in the frame. ;;;*** -;;;### (autoloads nil "footnote" "mail/footnote.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "footnote" "mail/footnote.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from mail/footnote.el (push (purecopy '(footnote 0 19)) package--builtin-versions) @@ -11101,7 +11155,7 @@ play around with the following keys: ;;;*** -;;;### (autoloads nil "forms" "forms.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "forms" "forms.el" (21670 32330 885624 725000)) ;;; Generated autoloads from forms.el (autoload 'forms-mode "forms" "\ @@ -11137,8 +11191,8 @@ Visit a file in Forms mode in other window. ;;;*** -;;;### (autoloads nil "fortran" "progmodes/fortran.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "fortran" "progmodes/fortran.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/fortran.el (autoload 'fortran-mode "fortran" "\ @@ -11215,8 +11269,8 @@ with no args, if that value is non-nil. ;;;*** -;;;### (autoloads nil "fortune" "play/fortune.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "fortune" "play/fortune.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from play/fortune.el (autoload 'fortune-add-fortune "fortune" "\ @@ -11264,8 +11318,8 @@ and choose the directory as the fortune-file. ;;;*** -;;;### (autoloads nil "frameset" "frameset.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "frameset" "frameset.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from frameset.el (defvar frameset-session-filter-alist '((name . :never) (left . frameset-filter-iconified) (minibuffer . frameset-filter-minibuffer) (top . frameset-filter-iconified)) "\ @@ -11451,15 +11505,15 @@ Interactively, reads the register using `register-read-with-preview'. ;;;*** -;;;### (autoloads nil "gamegrid" "play/gamegrid.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "gamegrid" "play/gamegrid.el" (21696 56380 +;;;;;; 925320 624000)) ;;; Generated autoloads from play/gamegrid.el (push (purecopy '(gamegrid 1 2)) package--builtin-versions) ;;;*** -;;;### (autoloads nil "gdb-mi" "progmodes/gdb-mi.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "gdb-mi" "progmodes/gdb-mi.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/gdb-mi.el (defvar gdb-enable-debug nil "\ @@ -11536,8 +11590,8 @@ detailed description of this mode. ;;;*** -;;;### (autoloads nil "generic" "emacs-lisp/generic.el" (21607 54477 -;;;;;; 800124 118000)) +;;;### (autoloads nil "generic" "emacs-lisp/generic.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from emacs-lisp/generic.el (defvar generic-mode-list nil "\ @@ -11617,8 +11671,8 @@ regular expression that can be used as an element of ;;;*** -;;;### (autoloads nil "glasses" "progmodes/glasses.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "glasses" "progmodes/glasses.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/glasses.el (autoload 'glasses-mode "glasses" "\ @@ -11632,8 +11686,8 @@ add virtual separators (like underscores) at places they belong to. ;;;*** -;;;### (autoloads nil "gmm-utils" "gnus/gmm-utils.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "gmm-utils" "gnus/gmm-utils.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from gnus/gmm-utils.el (autoload 'gmm-regexp-concat "gmm-utils" "\ @@ -11687,7 +11741,7 @@ DEFAULT-MAP specifies the default key map for ICON-LIST. ;;;*** -;;;### (autoloads nil "gnus" "gnus/gnus.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "gnus" "gnus/gnus.el" (21670 32330 885624 725000)) ;;; Generated autoloads from gnus/gnus.el (push (purecopy '(gnus 5 13)) package--builtin-versions) (when (fboundp 'custom-autoload) @@ -11737,8 +11791,8 @@ prompt the user for the name of an NNTP server to use. ;;;*** -;;;### (autoloads nil "gnus-agent" "gnus/gnus-agent.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "gnus-agent" "gnus/gnus-agent.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from gnus/gnus-agent.el (autoload 'gnus-unplugged "gnus-agent" "\ @@ -11828,8 +11882,8 @@ CLEAN is obsolete and ignored. ;;;*** -;;;### (autoloads nil "gnus-art" "gnus/gnus-art.el" (21652 2365 910127 -;;;;;; 752000)) +;;;### (autoloads nil "gnus-art" "gnus/gnus-art.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from gnus/gnus-art.el (autoload 'gnus-article-prepare-display "gnus-art" "\ @@ -11839,8 +11893,8 @@ Make the current buffer look like a nice article. ;;;*** -;;;### (autoloads nil "gnus-bookmark" "gnus/gnus-bookmark.el" (21645 -;;;;;; 29116 670141 789000)) +;;;### (autoloads nil "gnus-bookmark" "gnus/gnus-bookmark.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from gnus/gnus-bookmark.el (autoload 'gnus-bookmark-set "gnus-bookmark" "\ @@ -11863,8 +11917,8 @@ deletion, or > if it is flagged for displaying. ;;;*** -;;;### (autoloads nil "gnus-cache" "gnus/gnus-cache.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "gnus-cache" "gnus/gnus-cache.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from gnus/gnus-cache.el (autoload 'gnus-jog-cache "gnus-cache" "\ @@ -11905,8 +11959,8 @@ supported. ;;;*** -;;;### (autoloads nil "gnus-delay" "gnus/gnus-delay.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "gnus-delay" "gnus/gnus-delay.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from gnus/gnus-delay.el (autoload 'gnus-delay-article "gnus-delay" "\ @@ -11941,8 +11995,8 @@ Checking delayed messages is skipped if optional arg NO-CHECK is non-nil. ;;;*** -;;;### (autoloads nil "gnus-diary" "gnus/gnus-diary.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "gnus-diary" "gnus/gnus-diary.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from gnus/gnus-diary.el (autoload 'gnus-user-format-function-d "gnus-diary" "\ @@ -11957,8 +12011,8 @@ Checking delayed messages is skipped if optional arg NO-CHECK is non-nil. ;;;*** -;;;### (autoloads nil "gnus-dired" "gnus/gnus-dired.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "gnus-dired" "gnus/gnus-dired.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from gnus/gnus-dired.el (autoload 'turn-on-gnus-dired-mode "gnus-dired" "\ @@ -11968,8 +12022,8 @@ Convenience method to turn on gnus-dired-mode. ;;;*** -;;;### (autoloads nil "gnus-draft" "gnus/gnus-draft.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "gnus-draft" "gnus/gnus-draft.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from gnus/gnus-draft.el (autoload 'gnus-draft-reminder "gnus-draft" "\ @@ -11979,8 +12033,8 @@ Reminder user if there are unsent drafts. ;;;*** -;;;### (autoloads nil "gnus-fun" "gnus/gnus-fun.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "gnus-fun" "gnus/gnus-fun.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from gnus/gnus-fun.el (autoload 'gnus--random-face-with-type "gnus-fun" "\ @@ -12045,8 +12099,8 @@ Insert a random Face header from `gnus-face-directory'. ;;;*** -;;;### (autoloads nil "gnus-gravatar" "gnus/gnus-gravatar.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "gnus-gravatar" "gnus/gnus-gravatar.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from gnus/gnus-gravatar.el (autoload 'gnus-treat-from-gravatar "gnus-gravatar" "\ @@ -12063,8 +12117,8 @@ If gravatars are already displayed, remove them. ;;;*** -;;;### (autoloads nil "gnus-group" "gnus/gnus-group.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "gnus-group" "gnus/gnus-group.el" (21702 8774 +;;;;;; 274627 813000)) ;;; Generated autoloads from gnus/gnus-group.el (autoload 'gnus-fetch-group "gnus-group" "\ @@ -12081,8 +12135,8 @@ Pop up a frame and enter GROUP. ;;;*** -;;;### (autoloads nil "gnus-html" "gnus/gnus-html.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "gnus-html" "gnus/gnus-html.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from gnus/gnus-html.el (autoload 'gnus-article-html "gnus-html" "\ @@ -12097,8 +12151,8 @@ Pop up a frame and enter GROUP. ;;;*** -;;;### (autoloads nil "gnus-kill" "gnus/gnus-kill.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "gnus-kill" "gnus/gnus-kill.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from gnus/gnus-kill.el (defalias 'gnus-batch-kill 'gnus-batch-score) @@ -12111,8 +12165,8 @@ Usage: emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score ;;;*** -;;;### (autoloads nil "gnus-ml" "gnus/gnus-ml.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "gnus-ml" "gnus/gnus-ml.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from gnus/gnus-ml.el (autoload 'turn-on-gnus-mailing-list-mode "gnus-ml" "\ @@ -12135,8 +12189,8 @@ Minor mode for providing mailing-list commands. ;;;*** -;;;### (autoloads nil "gnus-mlspl" "gnus/gnus-mlspl.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "gnus-mlspl" "gnus/gnus-mlspl.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from gnus/gnus-mlspl.el (autoload 'gnus-group-split-setup "gnus-mlspl" "\ @@ -12236,8 +12290,8 @@ Calling (gnus-group-split-fancy nil nil \"mail.others\") returns: ;;;*** -;;;### (autoloads nil "gnus-msg" "gnus/gnus-msg.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "gnus-msg" "gnus/gnus-msg.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from gnus/gnus-msg.el (autoload 'gnus-msg-mail "gnus-msg" "\ @@ -12264,7 +12318,7 @@ Like `message-reply'. ;;;*** ;;;### (autoloads nil "gnus-notifications" "gnus/gnus-notifications.el" -;;;;;; (21607 54478 300138 641000)) +;;;;;; (21670 32330 885624 725000)) ;;; Generated autoloads from gnus/gnus-notifications.el (autoload 'gnus-notifications "gnus-notifications" "\ @@ -12280,8 +12334,8 @@ This is typically a function to add in ;;;*** -;;;### (autoloads nil "gnus-picon" "gnus/gnus-picon.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "gnus-picon" "gnus/gnus-picon.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from gnus/gnus-picon.el (autoload 'gnus-treat-from-picon "gnus-picon" "\ @@ -12304,8 +12358,8 @@ If picons are already displayed, remove them. ;;;*** -;;;### (autoloads nil "gnus-range" "gnus/gnus-range.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "gnus-range" "gnus/gnus-range.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from gnus/gnus-range.el (autoload 'gnus-sorted-difference "gnus-range" "\ @@ -12372,8 +12426,8 @@ Add NUM into sorted LIST by side effect. ;;;*** -;;;### (autoloads nil "gnus-registry" "gnus/gnus-registry.el" (21652 -;;;;;; 2365 910127 752000)) +;;;### (autoloads nil "gnus-registry" "gnus/gnus-registry.el" (21707 +;;;;;; 26689 135319 638000)) ;;; Generated autoloads from gnus/gnus-registry.el (autoload 'gnus-registry-initialize "gnus-registry" "\ @@ -12388,8 +12442,8 @@ Install the registry hooks. ;;;*** -;;;### (autoloads nil "gnus-sieve" "gnus/gnus-sieve.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "gnus-sieve" "gnus/gnus-sieve.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from gnus/gnus-sieve.el (autoload 'gnus-sieve-update "gnus-sieve" "\ @@ -12416,8 +12470,8 @@ See the documentation for these variables and functions for details. ;;;*** -;;;### (autoloads nil "gnus-spec" "gnus/gnus-spec.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "gnus-spec" "gnus/gnus-spec.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from gnus/gnus-spec.el (autoload 'gnus-update-format "gnus-spec" "\ @@ -12427,8 +12481,8 @@ Update the format specification near point. ;;;*** -;;;### (autoloads nil "gnus-start" "gnus/gnus-start.el" (21620 25920 -;;;;;; 601566 783000)) +;;;### (autoloads nil "gnus-start" "gnus/gnus-start.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from gnus/gnus-start.el (autoload 'gnus-declare-backend "gnus-start" "\ @@ -12438,8 +12492,8 @@ Declare back end NAME with ABILITIES as a Gnus back end. ;;;*** -;;;### (autoloads nil "gnus-sum" "gnus/gnus-sum.el" (21623 2108 292281 -;;;;;; 129000)) +;;;### (autoloads nil "gnus-sum" "gnus/gnus-sum.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from gnus/gnus-sum.el (autoload 'gnus-summary-bookmark-jump "gnus-sum" "\ @@ -12450,8 +12504,8 @@ BOOKMARK is a bookmark name or a bookmark record. ;;;*** -;;;### (autoloads nil "gnus-sync" "gnus/gnus-sync.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "gnus-sync" "gnus/gnus-sync.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from gnus/gnus-sync.el (autoload 'gnus-sync-initialize "gnus-sync" "\ @@ -12466,8 +12520,8 @@ Install the sync hooks. ;;;*** -;;;### (autoloads nil "gnus-win" "gnus/gnus-win.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "gnus-win" "gnus/gnus-win.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from gnus/gnus-win.el (autoload 'gnus-add-configuration "gnus-win" "\ @@ -12477,8 +12531,8 @@ Add the window configuration CONF to `gnus-buffer-configuration'. ;;;*** -;;;### (autoloads nil "gnutls" "net/gnutls.el" (21638 55899 942254 -;;;;;; 689000)) +;;;### (autoloads nil "gnutls" "net/gnutls.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from net/gnutls.el (defvar gnutls-min-prime-bits 256 "\ @@ -12494,8 +12548,8 @@ A value of nil says to use the default GnuTLS value.") ;;;*** -;;;### (autoloads nil "gomoku" "play/gomoku.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "gomoku" "play/gomoku.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from play/gomoku.el (autoload 'gomoku "gomoku" "\ @@ -12521,8 +12575,8 @@ Use \\[describe-mode] for more info. ;;;*** -;;;### (autoloads nil "goto-addr" "net/goto-addr.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "goto-addr" "net/goto-addr.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from net/goto-addr.el (define-obsolete-function-alias 'goto-address-at-mouse 'goto-address-at-point "22.1") @@ -12563,8 +12617,8 @@ Like `goto-address-mode', but only for comments and strings. ;;;*** -;;;### (autoloads nil "gravatar" "gnus/gravatar.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "gravatar" "gnus/gravatar.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from gnus/gravatar.el (autoload 'gravatar-retrieve "gravatar" "\ @@ -12580,8 +12634,8 @@ Retrieve MAIL-ADDRESS gravatar and returns it. ;;;*** -;;;### (autoloads nil "grep" "progmodes/grep.el" (21612 31801 50825 -;;;;;; 711000)) +;;;### (autoloads nil "grep" "progmodes/grep.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from progmodes/grep.el (defvar grep-window-height nil "\ @@ -12745,7 +12799,7 @@ file name to `*.gz', and sets `grep-highlight-matches' to `always'. ;;;*** -;;;### (autoloads nil "gs" "gs.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "gs" "gs.el" (21670 32331 385639 720000)) ;;; Generated autoloads from gs.el (autoload 'gs-load-image "gs" "\ @@ -12758,8 +12812,8 @@ the form \"WINDOW-ID PIXMAP-ID\". Value is non-nil if successful. ;;;*** -;;;### (autoloads nil "gud" "progmodes/gud.el" (21638 55899 942254 -;;;;;; 689000)) +;;;### (autoloads nil "gud" "progmodes/gud.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from progmodes/gud.el (autoload 'gud-gdb "gud" "\ @@ -12854,8 +12908,8 @@ it if ARG is omitted or nil. ;;;*** -;;;### (autoloads nil "gv" "emacs-lisp/gv.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "gv" "emacs-lisp/gv.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from emacs-lisp/gv.el (autoload 'gv-get "gv" "\ @@ -12957,8 +13011,8 @@ binding mode. ;;;*** -;;;### (autoloads nil "handwrite" "play/handwrite.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "handwrite" "play/handwrite.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from play/handwrite.el (autoload 'handwrite "handwrite" "\ @@ -13003,8 +13057,8 @@ to be updated. ;;;*** -;;;### (autoloads nil "hashcash" "mail/hashcash.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "hashcash" "mail/hashcash.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from mail/hashcash.el (autoload 'hashcash-insert-payment "hashcash" "\ @@ -13046,8 +13100,8 @@ Prefix arg sets default accept amount temporarily. ;;;*** -;;;### (autoloads nil "help-at-pt" "help-at-pt.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "help-at-pt" "help-at-pt.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from help-at-pt.el (autoload 'help-at-pt-string "help-at-pt" "\ @@ -13174,8 +13228,8 @@ different regions. With numeric argument ARG, behaves like ;;;*** -;;;### (autoloads nil "help-fns" "help-fns.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "help-fns" "help-fns.el" (21690 17600 745361 +;;;;;; 875000)) ;;; Generated autoloads from help-fns.el (autoload 'describe-function "help-fns" "\ @@ -13195,8 +13249,7 @@ OBJECT should be a symbol associated with a function, variable, or face; alternatively, it can be a function definition. If TYPE is `defvar', search for a variable definition. If TYPE is `defface', search for a face definition. -If TYPE is the value returned by `symbol-function' for a function symbol, - search for a function definition. +If TYPE is not a symbol, search for a function definition. The return value is the absolute name of a readable file where OBJECT is defined. If several such files exist, preference is given to a file @@ -13254,8 +13307,8 @@ Produce a texinfo buffer with sorted doc-strings from the DOC file. ;;;*** -;;;### (autoloads nil "help-macro" "help-macro.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "help-macro" "help-macro.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from help-macro.el (defvar three-step-help nil "\ @@ -13269,8 +13322,8 @@ gives the window that lists the options.") ;;;*** -;;;### (autoloads nil "help-mode" "help-mode.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "help-mode" "help-mode.el" (21690 17600 745361 +;;;;;; 875000)) ;;; Generated autoloads from help-mode.el (autoload 'help-mode "help-mode" "\ @@ -13369,8 +13422,8 @@ BOOKMARK is a bookmark name or a bookmark record. ;;;*** -;;;### (autoloads nil "helper" "emacs-lisp/helper.el" (21607 54477 -;;;;;; 800124 118000)) +;;;### (autoloads nil "helper" "emacs-lisp/helper.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from emacs-lisp/helper.el (autoload 'Helper-describe-bindings "helper" "\ @@ -13385,7 +13438,7 @@ Provide help for current mode. ;;;*** -;;;### (autoloads nil "hexl" "hexl.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "hexl" "hexl.el" (21695 35516 595262 313000)) ;;; Generated autoloads from hexl.el (autoload 'hexl-mode "hexl" "\ @@ -13479,8 +13532,8 @@ This discards the buffer's undo information. ;;;*** -;;;### (autoloads nil "hi-lock" "hi-lock.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "hi-lock" "hi-lock.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from hi-lock.el (autoload 'hi-lock-mode "hi-lock" "\ @@ -13647,8 +13700,8 @@ be found in variable `hi-lock-interactive-patterns'. ;;;*** -;;;### (autoloads nil "hideif" "progmodes/hideif.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "hideif" "progmodes/hideif.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/hideif.el (autoload 'hide-ifdef-mode "hideif" "\ @@ -13695,8 +13748,8 @@ Several variables affect how the hiding is done: ;;;*** -;;;### (autoloads nil "hideshow" "progmodes/hideshow.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "hideshow" "progmodes/hideshow.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/hideshow.el (defvar hs-special-modes-alist (mapcar 'purecopy '((c-mode "{" "}" "/[*/]" nil nil) (c++-mode "{" "}" "/[*/]" nil nil) (bibtex-mode ("@\\S(*\\(\\s(\\)" 1)) (java-mode "{" "}" "/[*/]" nil nil) (js-mode "{" "}" "/[*/]" nil))) "\ @@ -13758,8 +13811,8 @@ Unconditionally turn off `hs-minor-mode'. ;;;*** -;;;### (autoloads nil "hilit-chg" "hilit-chg.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "hilit-chg" "hilit-chg.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from hilit-chg.el (autoload 'highlight-changes-mode "hilit-chg" "\ @@ -13890,8 +13943,8 @@ See `highlight-changes-mode' for more information on Highlight-Changes mode. ;;;*** -;;;### (autoloads nil "hippie-exp" "hippie-exp.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "hippie-exp" "hippie-exp.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from hippie-exp.el (push (purecopy '(hippie-exp 1 6)) package--builtin-versions) @@ -13923,8 +13976,8 @@ argument VERBOSE non-nil makes the function verbose. ;;;*** -;;;### (autoloads nil "hl-line" "hl-line.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "hl-line" "hl-line.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from hl-line.el (autoload 'hl-line-mode "hl-line" "\ @@ -13973,8 +14026,8 @@ Global-Hl-Line mode uses the functions `global-hl-line-unhighlight' and ;;;*** -;;;### (autoloads nil "holidays" "calendar/holidays.el" (21607 54477 -;;;;;; 800124 118000)) +;;;### (autoloads nil "holidays" "calendar/holidays.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from calendar/holidays.el (defvar holiday-general-holidays (mapcar 'purecopy '((holiday-fixed 1 1 "New Year's Day") (holiday-float 1 1 3 "Martin Luther King Day") (holiday-fixed 2 2 "Groundhog Day") (holiday-fixed 2 14 "Valentine's Day") (holiday-float 2 1 3 "President's Day") (holiday-fixed 3 17 "St. Patrick's Day") (holiday-fixed 4 1 "April Fools' Day") (holiday-float 5 0 2 "Mother's Day") (holiday-float 5 1 -1 "Memorial Day") (holiday-fixed 6 14 "Flag Day") (holiday-float 6 0 3 "Father's Day") (holiday-fixed 7 4 "Independence Day") (holiday-float 9 1 1 "Labor Day") (holiday-float 10 1 2 "Columbus Day") (holiday-fixed 10 31 "Halloween") (holiday-fixed 11 11 "Veteran's Day") (holiday-float 11 4 4 "Thanksgiving"))) "\ @@ -14084,8 +14137,8 @@ The optional LABEL is used to label the buffer created. ;;;*** -;;;### (autoloads nil "html2text" "gnus/html2text.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "html2text" "gnus/html2text.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from gnus/html2text.el (autoload 'html2text "html2text" "\ @@ -14095,8 +14148,8 @@ Convert HTML to plain text in the current buffer. ;;;*** -;;;### (autoloads nil "htmlfontify" "htmlfontify.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "htmlfontify" "htmlfontify.el" (21670 32624 +;;;;;; 385626 484000)) ;;; Generated autoloads from htmlfontify.el (push (purecopy '(htmlfontify 0 21)) package--builtin-versions) @@ -14129,8 +14182,8 @@ You may also want to set `hfy-page-header' and `hfy-page-footer'. ;;;*** -;;;### (autoloads nil "ibuf-macs" "ibuf-macs.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "ibuf-macs" "ibuf-macs.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from ibuf-macs.el (autoload 'define-ibuffer-column "ibuf-macs" "\ @@ -14232,8 +14285,8 @@ bound to the current value of the filter. ;;;*** -;;;### (autoloads nil "ibuffer" "ibuffer.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "ibuffer" "ibuffer.el" (21670 32624 385626 +;;;;;; 484000)) ;;; Generated autoloads from ibuffer.el (autoload 'ibuffer-list-buffers "ibuffer" "\ @@ -14272,8 +14325,8 @@ FORMATS is the value to use for `ibuffer-formats'. ;;;*** -;;;### (autoloads nil "icalendar" "calendar/icalendar.el" (21611 -;;;;;; 10937 700236 3000)) +;;;### (autoloads nil "icalendar" "calendar/icalendar.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from calendar/icalendar.el (push (purecopy '(icalendar 0 19)) package--builtin-versions) @@ -14326,8 +14379,8 @@ buffer `*icalendar-errors*'. ;;;*** -;;;### (autoloads nil "icomplete" "icomplete.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "icomplete" "icomplete.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from icomplete.el (defvar icomplete-mode nil "\ @@ -14366,8 +14419,8 @@ completions: ;;;*** -;;;### (autoloads nil "icon" "progmodes/icon.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "icon" "progmodes/icon.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from progmodes/icon.el (autoload 'icon-mode "icon" "\ @@ -14407,8 +14460,8 @@ with no args, if that value is non-nil. ;;;*** -;;;### (autoloads nil "idlw-shell" "progmodes/idlw-shell.el" (21607 -;;;;;; 54478 800121 42000)) +;;;### (autoloads nil "idlw-shell" "progmodes/idlw-shell.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from progmodes/idlw-shell.el (autoload 'idlwave-shell "idlw-shell" "\ @@ -14433,8 +14486,8 @@ See also the variable `idlwave-shell-prompt-pattern'. ;;;*** -;;;### (autoloads nil "idlwave" "progmodes/idlwave.el" (21645 29117 -;;;;;; 170137 362000)) +;;;### (autoloads nil "idlwave" "progmodes/idlwave.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/idlwave.el (push (purecopy '(idlwave 6 1 22)) package--builtin-versions) @@ -14563,7 +14616,7 @@ The main features of this mode are ;;;*** -;;;### (autoloads nil "ido" "ido.el" (21612 31801 50825 711000)) +;;;### (autoloads nil "ido" "ido.el" (21694 14651 747488 989000)) ;;; Generated autoloads from ido.el (defvar ido-mode nil "\ @@ -14825,7 +14878,7 @@ DEF, if non-nil, is the default value. ;;;*** -;;;### (autoloads nil "ielm" "ielm.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "ielm" "ielm.el" (21695 35516 595262 313000)) ;;; Generated autoloads from ielm.el (autoload 'ielm "ielm" "\ @@ -14837,7 +14890,7 @@ See `inferior-emacs-lisp-mode' for details. ;;;*** -;;;### (autoloads nil "iimage" "iimage.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "iimage" "iimage.el" (21670 32331 385639 720000)) ;;; Generated autoloads from iimage.el (define-obsolete-function-alias 'turn-on-iimage-mode 'iimage-mode "24.1") @@ -14853,7 +14906,7 @@ the mode if ARG is omitted or nil, and toggle it if ARG is `toggle'. ;;;*** -;;;### (autoloads nil "image" "image.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "image" "image.el" (21670 32331 385639 720000)) ;;; Generated autoloads from image.el (autoload 'image-type-from-data "image" "\ @@ -15046,8 +15099,8 @@ If Emacs is compiled without ImageMagick support, this does nothing. ;;;*** -;;;### (autoloads nil "image-dired" "image-dired.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "image-dired" "image-dired.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from image-dired.el (push (purecopy '(image-dired 0 4 11)) package--builtin-versions) @@ -15184,8 +15237,8 @@ easy-to-use form. ;;;*** -;;;### (autoloads nil "image-file" "image-file.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "image-file" "image-file.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from image-file.el (defvar image-file-name-extensions (purecopy '("png" "jpeg" "jpg" "gif" "tiff" "tif" "xbm" "xpm" "pbm" "pgm" "ppm" "pnm" "svg")) "\ @@ -15247,8 +15300,8 @@ An image file is one whose name has an extension in ;;;*** -;;;### (autoloads nil "image-mode" "image-mode.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "image-mode" "image-mode.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from image-mode.el (autoload 'image-mode "image-mode" "\ @@ -15295,7 +15348,7 @@ on these modes. ;;;*** -;;;### (autoloads nil "imenu" "imenu.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "imenu" "imenu.el" (21670 32331 385639 720000)) ;;; Generated autoloads from imenu.el (defvar imenu-sort-function nil "\ @@ -15433,8 +15486,8 @@ for more information. ;;;*** -;;;### (autoloads nil "ind-util" "language/ind-util.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "ind-util" "language/ind-util.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from language/ind-util.el (autoload 'indian-compose-region "ind-util" "\ @@ -15464,8 +15517,8 @@ Convert old Emacs Devanagari characters to UCS. ;;;*** -;;;### (autoloads nil "inf-lisp" "progmodes/inf-lisp.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "inf-lisp" "progmodes/inf-lisp.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/inf-lisp.el (autoload 'inferior-lisp "inf-lisp" "\ @@ -15483,7 +15536,7 @@ of `inferior-lisp-program'). Runs the hooks from ;;;*** -;;;### (autoloads nil "info" "info.el" (21669 11452 35624 425000)) +;;;### (autoloads nil "info" "info.el" (21670 32331 385639 720000)) ;;; Generated autoloads from info.el (defcustom Info-default-directory-list (let* ((config-dir (file-name-as-directory (or (and (featurep 'ns) (let ((dir (expand-file-name "../info" data-directory))) (if (file-directory-p dir) dir))) configure-info-directory))) (prefixes (prune-directory-list '("/usr/local/" "/usr/" "/opt/" "/"))) (suffixes '("share/" "" "gnu/" "gnu/lib/" "gnu/lib/emacs/" "emacs/" "lib/" "lib/emacs/")) (standard-info-dirs (apply #'nconc (mapcar (lambda (pfx) (let ((dirs (mapcar (lambda (sfx) (concat pfx sfx "info/")) suffixes))) (prune-directory-list dirs))) prefixes))) (dirs (if (member config-dir standard-info-dirs) (nconc standard-info-dirs (list config-dir)) (cons config-dir standard-info-dirs)))) (if (not (eq system-type 'windows-nt)) dirs (let* ((instdir (file-name-directory invocation-directory)) (dir1 (expand-file-name "../info/" instdir)) (dir2 (expand-file-name "../../../info/" instdir))) (cond ((file-exists-p dir1) (append dirs (list dir1))) ((file-exists-p dir2) (append dirs (list dir2))) (t dirs))))) "\ @@ -15695,8 +15748,8 @@ completion alternatives to currently visited manuals. ;;;*** -;;;### (autoloads nil "info-look" "info-look.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "info-look" "info-look.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from info-look.el (autoload 'info-lookup-reset "info-look" "\ @@ -15743,8 +15796,8 @@ Perform completion on file preceding point. ;;;*** -;;;### (autoloads nil "info-xref" "info-xref.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "info-xref" "info-xref.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from info-xref.el (push (purecopy '(info-xref 3)) package--builtin-versions) @@ -15827,8 +15880,8 @@ the sources handy. ;;;*** -;;;### (autoloads nil "informat" "informat.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "informat" "informat.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from informat.el (autoload 'Info-tagify "informat" "\ @@ -15873,8 +15926,8 @@ For example, invoke \"emacs -batch -f batch-info-validate $info/ ~/*.info\" ;;;*** -;;;### (autoloads nil "inline" "emacs-lisp/inline.el" (21632 17083 -;;;;;; 200835 890000)) +;;;### (autoloads nil "inline" "emacs-lisp/inline.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from emacs-lisp/inline.el (autoload 'define-inline "inline" "\ @@ -15888,8 +15941,8 @@ For example, invoke \"emacs -batch -f batch-info-validate $info/ ~/*.info\" ;;;*** -;;;### (autoloads nil "inversion" "cedet/inversion.el" (21607 54477 -;;;;;; 800124 118000)) +;;;### (autoloads nil "inversion" "cedet/inversion.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from cedet/inversion.el (push (purecopy '(inversion 1 3)) package--builtin-versions) @@ -15901,8 +15954,8 @@ Only checks one based on which kind of Emacs is being run. ;;;*** -;;;### (autoloads nil "isearch-x" "international/isearch-x.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "isearch-x" "international/isearch-x.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from international/isearch-x.el (autoload 'isearch-toggle-specified-input-method "isearch-x" "\ @@ -15922,8 +15975,8 @@ Toggle input method in interactive search. ;;;*** -;;;### (autoloads nil "isearchb" "isearchb.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "isearchb" "isearchb.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from isearchb.el (push (purecopy '(isearchb 1 5)) package--builtin-versions) @@ -15937,8 +15990,8 @@ accessed via isearchb. ;;;*** -;;;### (autoloads nil "iso-cvt" "international/iso-cvt.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "iso-cvt" "international/iso-cvt.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from international/iso-cvt.el (autoload 'iso-spanish "iso-cvt" "\ @@ -16029,15 +16082,15 @@ Add submenus to the File menu, to convert to and from various formats. ;;;*** ;;;### (autoloads nil "iso-transl" "international/iso-transl.el" -;;;;;; (21607 54478 300138 641000)) +;;;;;; (21670 32331 385639 720000)) ;;; Generated autoloads from international/iso-transl.el (define-key key-translation-map "\C-x8" 'iso-transl-ctl-x-8-map) (autoload 'iso-transl-ctl-x-8-map "iso-transl" "Keymap for C-x 8 prefix." t 'keymap) ;;;*** -;;;### (autoloads nil "ispell" "textmodes/ispell.el" (21653 23227 -;;;;;; 760147 961000)) +;;;### (autoloads nil "ispell" "textmodes/ispell.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from textmodes/ispell.el (put 'ispell-check-comments 'safe-local-variable (lambda (a) (memq a '(nil t exclusive)))) @@ -16270,8 +16323,8 @@ You can bind this to the key C-c i in GNUS or mail by adding to ;;;*** -;;;### (autoloads nil "japan-util" "language/japan-util.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "japan-util" "language/japan-util.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from language/japan-util.el (autoload 'setup-japanese-environment-internal "japan-util" "\ @@ -16348,8 +16401,8 @@ If non-nil, second arg INITIAL-INPUT is a string to insert before reading. ;;;*** -;;;### (autoloads nil "jka-compr" "jka-compr.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "jka-compr" "jka-compr.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from jka-compr.el (defvar jka-compr-inhibit nil "\ @@ -16372,7 +16425,7 @@ by `jka-compr-installed'. ;;;*** -;;;### (autoloads nil "js" "progmodes/js.el" (21663 59071 96337 184000)) +;;;### (autoloads nil "js" "progmodes/js.el" (21681 2618 385332 620000)) ;;; Generated autoloads from progmodes/js.el (push (purecopy '(js 9)) package--builtin-versions) @@ -16386,14 +16439,14 @@ Major mode for editing JavaScript. ;;;*** -;;;### (autoloads nil "json" "json.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "json" "json.el" (21670 32331 385639 720000)) ;;; Generated autoloads from json.el (push (purecopy '(json 1 4)) package--builtin-versions) ;;;*** -;;;### (autoloads nil "keypad" "emulation/keypad.el" (21607 54477 -;;;;;; 800124 118000)) +;;;### (autoloads nil "keypad" "emulation/keypad.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from emulation/keypad.el (defvar keypad-setup nil "\ @@ -16448,8 +16501,8 @@ the decimal key on the keypad is mapped to DECIMAL instead of `.' ;;;*** -;;;### (autoloads nil "kinsoku" "international/kinsoku.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "kinsoku" "international/kinsoku.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from international/kinsoku.el (autoload 'kinsoku "kinsoku" "\ @@ -16470,8 +16523,8 @@ the context of text formatting. ;;;*** -;;;### (autoloads nil "kkc" "international/kkc.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "kkc" "international/kkc.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from international/kkc.el (defvar kkc-after-update-conversion-functions nil "\ @@ -16493,7 +16546,7 @@ and the return value is the length of the conversion. ;;;*** -;;;### (autoloads nil "kmacro" "kmacro.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "kmacro" "kmacro.el" (21670 32331 385639 720000)) ;;; Generated autoloads from kmacro.el (global-set-key "\C-x(" 'kmacro-start-macro) (global-set-key "\C-x)" 'kmacro-end-macro) @@ -16605,8 +16658,8 @@ If kbd macro currently being defined end it before activating it. ;;;*** -;;;### (autoloads nil "korea-util" "language/korea-util.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "korea-util" "language/korea-util.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from language/korea-util.el (defvar default-korean-keyboard (purecopy (if (string-match "3" (or (getenv "HANGUL_KEYBOARD_TYPE") "")) "3" "")) "\ @@ -16620,8 +16673,8 @@ The kind of Korean keyboard for Korean input method. ;;;*** -;;;### (autoloads nil "landmark" "play/landmark.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "landmark" "play/landmark.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from play/landmark.el (push (purecopy '(landmark 1 0)) package--builtin-versions) @@ -16652,8 +16705,8 @@ Use \\[describe-mode] for more info. ;;;*** -;;;### (autoloads nil "lao-util" "language/lao-util.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "lao-util" "language/lao-util.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from language/lao-util.el (autoload 'lao-compose-string "lao-util" "\ @@ -16690,8 +16743,8 @@ Transcribe Romanized Lao string STR to Lao character string. ;;;*** -;;;### (autoloads nil "latexenc" "international/latexenc.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "latexenc" "international/latexenc.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from international/latexenc.el (defvar latex-inputenc-coding-alist (purecopy '(("ansinew" . windows-1252) ("applemac" . mac-roman) ("ascii" . us-ascii) ("cp1250" . windows-1250) ("cp1252" . windows-1252) ("cp1257" . cp1257) ("cp437de" . cp437) ("cp437" . cp437) ("cp850" . cp850) ("cp852" . cp852) ("cp858" . cp858) ("cp865" . cp865) ("latin1" . iso-8859-1) ("latin2" . iso-8859-2) ("latin3" . iso-8859-3) ("latin4" . iso-8859-4) ("latin5" . iso-8859-5) ("latin9" . iso-8859-15) ("next" . next) ("utf8" . utf-8) ("utf8x" . utf-8))) "\ @@ -16723,7 +16776,7 @@ coding system names is determined from `latex-inputenc-coding-alist'. ;;;*** ;;;### (autoloads nil "latin1-disp" "international/latin1-disp.el" -;;;;;; (21607 54478 300138 641000)) +;;;;;; (21670 32331 385639 720000)) ;;; Generated autoloads from international/latin1-disp.el (defvar latin1-display nil "\ @@ -16764,8 +16817,8 @@ use either \\[customize] or the function `latin1-display'.") ;;;*** -;;;### (autoloads nil "ld-script" "progmodes/ld-script.el" (21607 -;;;;;; 54478 800121 42000)) +;;;### (autoloads nil "ld-script" "progmodes/ld-script.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from progmodes/ld-script.el (autoload 'ld-script-mode "ld-script" "\ @@ -16775,8 +16828,8 @@ A major mode to edit GNU ld script files ;;;*** -;;;### (autoloads nil "let-alist" "let-alist.el" (21661 17341 365638 -;;;;;; 429000)) +;;;### (autoloads nil "let-alist" "let-alist.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from let-alist.el (push (purecopy '(let-alist 1 0 3)) package--builtin-versions) @@ -16815,7 +16868,7 @@ displayed in the example above. ;;;*** -;;;### (autoloads nil "life" "play/life.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "life" "play/life.el" (21670 32331 385639 720000)) ;;; Generated autoloads from play/life.el (autoload 'life "life" "\ @@ -16828,7 +16881,7 @@ generations (this defaults to 1). ;;;*** -;;;### (autoloads nil "linum" "linum.el" (21652 2366 414435 564000)) +;;;### (autoloads nil "linum" "linum.el" (21670 32331 385639 720000)) ;;; Generated autoloads from linum.el (push (purecopy '(linum 0 9 24)) package--builtin-versions) @@ -16865,8 +16918,8 @@ See `linum-mode' for more information on Linum mode. ;;;*** -;;;### (autoloads nil "loadhist" "loadhist.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "loadhist" "loadhist.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from loadhist.el (autoload 'unload-feature "loadhist" "\ @@ -16897,7 +16950,7 @@ something strange, such as redefining an Emacs function. ;;;*** -;;;### (autoloads nil "locate" "locate.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "locate" "locate.el" (21670 32331 385639 720000)) ;;; Generated autoloads from locate.el (defvar locate-ls-subdir-switches (purecopy "-al") "\ @@ -16949,8 +17002,8 @@ except that FILTER is not optional. ;;;*** -;;;### (autoloads nil "log-edit" "vc/log-edit.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "log-edit" "vc/log-edit.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from vc/log-edit.el (autoload 'log-edit "log-edit" "\ @@ -16981,8 +17034,8 @@ done. Otherwise, it uses the current buffer. ;;;*** -;;;### (autoloads nil "log-view" "vc/log-view.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "log-view" "vc/log-view.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from vc/log-view.el (autoload 'log-view-mode "log-view" "\ @@ -16992,7 +17045,7 @@ Major mode for browsing CVS log output. ;;;*** -;;;### (autoloads nil "lpr" "lpr.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "lpr" "lpr.el" (21670 32331 385639 720000)) ;;; Generated autoloads from lpr.el (defvar lpr-windows-system (memq system-type '(ms-dos windows-nt)) "\ @@ -17087,8 +17140,8 @@ for further customization of the printer command. ;;;*** -;;;### (autoloads nil "ls-lisp" "ls-lisp.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "ls-lisp" "ls-lisp.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from ls-lisp.el (defvar ls-lisp-support-shell-wildcards t "\ @@ -17099,8 +17152,8 @@ Otherwise they are treated as Emacs regexps (for backward compatibility).") ;;;*** -;;;### (autoloads nil "lunar" "calendar/lunar.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "lunar" "calendar/lunar.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from calendar/lunar.el (autoload 'lunar-phases "lunar" "\ @@ -17112,8 +17165,8 @@ This function is suitable for execution in an init file. ;;;*** -;;;### (autoloads nil "m4-mode" "progmodes/m4-mode.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "m4-mode" "progmodes/m4-mode.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/m4-mode.el (autoload 'm4-mode "m4-mode" "\ @@ -17123,7 +17176,7 @@ A major mode to edit m4 macro files. ;;;*** -;;;### (autoloads nil "macros" "macros.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "macros" "macros.el" (21670 32331 385639 720000)) ;;; Generated autoloads from macros.el (autoload 'name-last-kbd-macro "macros" "\ @@ -17212,8 +17265,8 @@ and then select the region of un-tablified names and use ;;;*** -;;;### (autoloads nil "mail-extr" "mail/mail-extr.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "mail-extr" "mail/mail-extr.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from mail/mail-extr.el (autoload 'mail-extract-address-components "mail-extr" "\ @@ -17243,8 +17296,8 @@ Convert mail domain DOMAIN to the country it corresponds to. ;;;*** -;;;### (autoloads nil "mail-hist" "mail/mail-hist.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "mail-hist" "mail/mail-hist.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from mail/mail-hist.el (autoload 'mail-hist-define-keys "mail-hist" "\ @@ -17273,8 +17326,8 @@ This function normally would be called when the message is sent. ;;;*** -;;;### (autoloads nil "mail-utils" "mail/mail-utils.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "mail-utils" "mail/mail-utils.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from mail/mail-utils.el (defvar mail-use-rfc822 nil "\ @@ -17348,8 +17401,8 @@ matches may be returned from the message body. ;;;*** -;;;### (autoloads nil "mailabbrev" "mail/mailabbrev.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "mailabbrev" "mail/mailabbrev.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from mail/mailabbrev.el (defvar mail-abbrevs-mode nil "\ @@ -17398,8 +17451,8 @@ double-quotes. ;;;*** -;;;### (autoloads nil "mailalias" "mail/mailalias.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "mailalias" "mail/mailalias.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from mail/mailalias.el (defvar mail-complete-style 'angles "\ @@ -17452,8 +17505,8 @@ current header, calls `mail-complete-function' and passes prefix ARG if any. ;;;*** -;;;### (autoloads nil "mailclient" "mail/mailclient.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "mailclient" "mail/mailclient.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from mail/mailclient.el (autoload 'mailclient-send-it "mailclient" "\ @@ -17465,8 +17518,8 @@ The mail client is taken to be the handler of mailto URLs. ;;;*** -;;;### (autoloads nil "make-mode" "progmodes/make-mode.el" (21607 -;;;;;; 54478 800121 42000)) +;;;### (autoloads nil "make-mode" "progmodes/make-mode.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from progmodes/make-mode.el (autoload 'makefile-mode "make-mode" "\ @@ -17583,8 +17636,8 @@ An adapted `makefile-mode' that knows about imake. ;;;*** -;;;### (autoloads nil "makesum" "makesum.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "makesum" "makesum.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from makesum.el (autoload 'make-command-summary "makesum" "\ @@ -17595,7 +17648,7 @@ Previous contents of that buffer are killed first. ;;;*** -;;;### (autoloads nil "man" "man.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "man" "man.el" (21670 32331 385639 720000)) ;;; Generated autoloads from man.el (defalias 'manual-entry 'man) @@ -17651,7 +17704,7 @@ Default bookmark handler for Man buffers. ;;;*** -;;;### (autoloads nil "master" "master.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "master" "master.el" (21670 32331 385639 720000)) ;;; Generated autoloads from master.el (push (purecopy '(master 1 0 2)) package--builtin-versions) @@ -17674,8 +17727,8 @@ yourself the value of `master-of' by calling `master-show-slave'. ;;;*** -;;;### (autoloads nil "mb-depth" "mb-depth.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "mb-depth" "mb-depth.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from mb-depth.el (defvar minibuffer-depth-indicate-mode nil "\ @@ -17702,14 +17755,14 @@ recursion depth in the minibuffer prompt. This is only useful if ;;;*** -;;;### (autoloads nil "md4" "md4.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "md4" "md4.el" (21670 32331 385639 720000)) ;;; Generated autoloads from md4.el (push (purecopy '(md4 1 0)) package--builtin-versions) ;;;*** -;;;### (autoloads nil "message" "gnus/message.el" (21666 35265 825623 -;;;;;; 21000)) +;;;### (autoloads nil "message" "gnus/message.el" (21706 5826 304666 +;;;;;; 725000)) ;;; Generated autoloads from gnus/message.el (define-mail-user-agent 'message-user-agent 'message-mail 'message-send-and-exit 'message-kill-buffer 'message-send-hook) @@ -17874,8 +17927,8 @@ which specify the range to operate on. ;;;*** -;;;### (autoloads nil "meta-mode" "progmodes/meta-mode.el" (21607 -;;;;;; 54478 800121 42000)) +;;;### (autoloads nil "meta-mode" "progmodes/meta-mode.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from progmodes/meta-mode.el (push (purecopy '(meta-mode 1 0)) package--builtin-versions) @@ -17891,8 +17944,8 @@ Major mode for editing MetaPost sources. ;;;*** -;;;### (autoloads nil "metamail" "mail/metamail.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "metamail" "mail/metamail.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from mail/metamail.el (autoload 'metamail-interpret-header "metamail" "\ @@ -17935,8 +17988,8 @@ redisplayed as output is inserted. ;;;*** -;;;### (autoloads nil "mh-comp" "mh-e/mh-comp.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "mh-comp" "mh-e/mh-comp.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from mh-e/mh-comp.el (autoload 'mh-smail "mh-comp" "\ @@ -18026,7 +18079,7 @@ delete the draft message. ;;;*** -;;;### (autoloads nil "mh-e" "mh-e/mh-e.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "mh-e" "mh-e/mh-e.el" (21670 32331 385639 720000)) ;;; Generated autoloads from mh-e/mh-e.el (push (purecopy '(mh-e 8 6)) package--builtin-versions) @@ -18043,8 +18096,8 @@ Display version information about MH-E and the MH mail handling system. ;;;*** -;;;### (autoloads nil "mh-folder" "mh-e/mh-folder.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "mh-folder" "mh-e/mh-folder.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from mh-e/mh-folder.el (autoload 'mh-rmail "mh-folder" "\ @@ -18125,8 +18178,8 @@ perform the operation on all messages in that region. ;;;*** -;;;### (autoloads nil "midnight" "midnight.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "midnight" "midnight.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from midnight.el (autoload 'clean-buffer-list "midnight" "\ @@ -18152,8 +18205,8 @@ to its second argument TM. ;;;*** -;;;### (autoloads nil "minibuf-eldef" "minibuf-eldef.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "minibuf-eldef" "minibuf-eldef.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from minibuf-eldef.el (defvar minibuffer-electric-default-mode nil "\ @@ -18182,7 +18235,7 @@ is modified to remove the default indication. ;;;*** -;;;### (autoloads nil "misc" "misc.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "misc" "misc.el" (21670 32331 385639 720000)) ;;; Generated autoloads from misc.el (autoload 'butterfly "misc" "\ @@ -18210,8 +18263,8 @@ The return value is always nil. ;;;*** -;;;### (autoloads nil "misearch" "misearch.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "misearch" "misearch.el" (21691 38459 74604 +;;;;;; 918000)) ;;; Generated autoloads from misearch.el (add-hook 'isearch-mode-hook 'multi-isearch-setup) @@ -18296,8 +18349,8 @@ whose file names match the specified wildcard. ;;;*** -;;;### (autoloads nil "mixal-mode" "progmodes/mixal-mode.el" (21607 -;;;;;; 54478 800121 42000)) +;;;### (autoloads nil "mixal-mode" "progmodes/mixal-mode.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from progmodes/mixal-mode.el (push (purecopy '(mixal-mode 0 1)) package--builtin-versions) @@ -18308,8 +18361,8 @@ Major mode for the mixal asm language. ;;;*** -;;;### (autoloads nil "mm-encode" "gnus/mm-encode.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "mm-encode" "gnus/mm-encode.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from gnus/mm-encode.el (autoload 'mm-default-file-encoding "mm-encode" "\ @@ -18319,8 +18372,8 @@ Return a default encoding for FILE. ;;;*** -;;;### (autoloads nil "mm-extern" "gnus/mm-extern.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "mm-extern" "gnus/mm-extern.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from gnus/mm-extern.el (autoload 'mm-extern-cache-contents "mm-extern" "\ @@ -18338,8 +18391,8 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing. ;;;*** -;;;### (autoloads nil "mm-partial" "gnus/mm-partial.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "mm-partial" "gnus/mm-partial.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from gnus/mm-partial.el (autoload 'mm-inline-partial "mm-partial" "\ @@ -18352,8 +18405,8 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing. ;;;*** -;;;### (autoloads nil "mm-url" "gnus/mm-url.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "mm-url" "gnus/mm-url.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from gnus/mm-url.el (autoload 'mm-url-insert-file-contents "mm-url" "\ @@ -18369,8 +18422,8 @@ Insert file contents of URL using `mm-url-program'. ;;;*** -;;;### (autoloads nil "mm-uu" "gnus/mm-uu.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "mm-uu" "gnus/mm-uu.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from gnus/mm-uu.el (autoload 'mm-uu-dissect "mm-uu" "\ @@ -18389,7 +18442,7 @@ Assume text has been decoded if DECODED is non-nil. ;;;*** -;;;### (autoloads nil "mml" "gnus/mml.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "mml" "gnus/mml.el" (21670 32331 385639 720000)) ;;; Generated autoloads from gnus/mml.el (autoload 'mml-to-mime "mml" "\ @@ -18414,8 +18467,8 @@ body) or \"attachment\" (separate from the body). ;;;*** -;;;### (autoloads nil "mml1991" "gnus/mml1991.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "mml1991" "gnus/mml1991.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from gnus/mml1991.el (autoload 'mml1991-encrypt "mml1991" "\ @@ -18430,8 +18483,8 @@ body) or \"attachment\" (separate from the body). ;;;*** -;;;### (autoloads nil "mml2015" "gnus/mml2015.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "mml2015" "gnus/mml2015.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from gnus/mml2015.el (autoload 'mml2015-decrypt "mml2015" "\ @@ -18471,8 +18524,8 @@ body) or \"attachment\" (separate from the body). ;;;*** -;;;### (autoloads nil "mode-local" "cedet/mode-local.el" (21607 54477 -;;;;;; 800124 118000)) +;;;### (autoloads nil "mode-local" "cedet/mode-local.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from cedet/mode-local.el (put 'define-overloadable-function 'doc-string-elt 3) @@ -18513,8 +18566,8 @@ followed by the first character of the construct. ;;;*** -;;;### (autoloads nil "morse" "play/morse.el" (21616 28857 81577 -;;;;;; 239000)) +;;;### (autoloads nil "morse" "play/morse.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from play/morse.el (autoload 'morse-region "morse" "\ @@ -18539,8 +18592,8 @@ Convert NATO phonetic alphabet in region to ordinary ASCII text. ;;;*** -;;;### (autoloads nil "mouse-drag" "mouse-drag.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "mouse-drag" "mouse-drag.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from mouse-drag.el (autoload 'mouse-drag-throw "mouse-drag" "\ @@ -18587,7 +18640,7 @@ To test this function, evaluate: ;;;*** -;;;### (autoloads nil "mpc" "mpc.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "mpc" "mpc.el" (21670 32331 385639 720000)) ;;; Generated autoloads from mpc.el (autoload 'mpc "mpc" "\ @@ -18597,7 +18650,7 @@ Main entry point for MPC. ;;;*** -;;;### (autoloads nil "mpuz" "play/mpuz.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "mpuz" "play/mpuz.el" (21670 32331 385639 720000)) ;;; Generated autoloads from play/mpuz.el (autoload 'mpuz "mpuz" "\ @@ -18607,7 +18660,7 @@ Multiplication puzzle with GNU Emacs. ;;;*** -;;;### (autoloads nil "msb" "msb.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "msb" "msb.el" (21670 32331 385639 720000)) ;;; Generated autoloads from msb.el (defvar msb-mode nil "\ @@ -18632,8 +18685,8 @@ different buffer menu using the function `msb'. ;;;*** -;;;### (autoloads nil "mule-diag" "international/mule-diag.el" (21652 -;;;;;; 2366 414435 564000)) +;;;### (autoloads nil "mule-diag" "international/mule-diag.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from international/mule-diag.el (autoload 'list-character-sets "mule-diag" "\ @@ -18765,8 +18818,8 @@ The default is 20. If LIMIT is negative, do not limit the listing. ;;;*** -;;;### (autoloads nil "mule-util" "international/mule-util.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "mule-util" "international/mule-util.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from international/mule-util.el (defsubst string-to-list (string) "\ @@ -18897,8 +18950,8 @@ per-character basis, this may not be accurate. ;;;*** -;;;### (autoloads nil "net-utils" "net/net-utils.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "net-utils" "net/net-utils.el" (21704 50495 +;;;;;; 455324 752000)) ;;; Generated autoloads from net/net-utils.el (autoload 'ifconfig "net-utils" "\ @@ -18992,8 +19045,8 @@ Open a network connection to HOST on PORT. ;;;*** -;;;### (autoloads nil "netrc" "net/netrc.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "netrc" "net/netrc.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from net/netrc.el (autoload 'netrc-credentials "netrc" "\ @@ -19005,8 +19058,8 @@ listed in the PORTS list. ;;;*** -;;;### (autoloads nil "network-stream" "net/network-stream.el" (21644 -;;;;;; 8251 830117 252000)) +;;;### (autoloads nil "network-stream" "net/network-stream.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from net/network-stream.el (autoload 'open-network-stream "network-stream" "\ @@ -19102,8 +19155,8 @@ asynchronously, if possible. ;;;*** -;;;### (autoloads nil "newst-backend" "net/newst-backend.el" (21628 -;;;;;; 45530 160140 360000)) +;;;### (autoloads nil "newst-backend" "net/newst-backend.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from net/newst-backend.el (autoload 'newsticker-running-p "newst-backend" "\ @@ -19125,7 +19178,7 @@ Run `newsticker-start-hook' if newsticker was not running already. ;;;*** ;;;### (autoloads nil "newst-plainview" "net/newst-plainview.el" -;;;;;; (21607 54478 300138 641000)) +;;;;;; (21670 32331 385639 720000)) ;;; Generated autoloads from net/newst-plainview.el (autoload 'newsticker-plainview "newst-plainview" "\ @@ -19135,8 +19188,8 @@ Start newsticker plainview. ;;;*** -;;;### (autoloads nil "newst-reader" "net/newst-reader.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "newst-reader" "net/newst-reader.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from net/newst-reader.el (autoload 'newsticker-show-news "newst-reader" "\ @@ -19146,8 +19199,8 @@ Start reading news. You may want to bind this to a key. ;;;*** -;;;### (autoloads nil "newst-ticker" "net/newst-ticker.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "newst-ticker" "net/newst-ticker.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from net/newst-ticker.el (autoload 'newsticker-ticker-running-p "newst-ticker" "\ @@ -19167,8 +19220,8 @@ running already. ;;;*** -;;;### (autoloads nil "newst-treeview" "net/newst-treeview.el" (21636 -;;;;;; 14149 750837 46000)) +;;;### (autoloads nil "newst-treeview" "net/newst-treeview.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from net/newst-treeview.el (autoload 'newsticker-treeview "newst-treeview" "\ @@ -19178,8 +19231,8 @@ Start newsticker treeview. ;;;*** -;;;### (autoloads nil "nndiary" "gnus/nndiary.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "nndiary" "gnus/nndiary.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from gnus/nndiary.el (autoload 'nndiary-generate-nov-databases "nndiary" "\ @@ -19189,8 +19242,8 @@ Generate NOV databases in all nndiary directories. ;;;*** -;;;### (autoloads nil "nndoc" "gnus/nndoc.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "nndoc" "gnus/nndoc.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from gnus/nndoc.el (autoload 'nndoc-add-type "nndoc" "\ @@ -19204,8 +19257,8 @@ symbol in the alist. ;;;*** -;;;### (autoloads nil "nnfolder" "gnus/nnfolder.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "nnfolder" "gnus/nnfolder.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from gnus/nnfolder.el (autoload 'nnfolder-generate-active-file "nnfolder" "\ @@ -19216,7 +19269,7 @@ This command does not work if you use short group names. ;;;*** -;;;### (autoloads nil "nnml" "gnus/nnml.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "nnml" "gnus/nnml.el" (21670 32331 385639 720000)) ;;; Generated autoloads from gnus/nnml.el (autoload 'nnml-generate-nov-databases "nnml" "\ @@ -19226,7 +19279,7 @@ Generate NOV databases in all nnml directories. ;;;*** -;;;### (autoloads nil "novice" "novice.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "novice" "novice.el" (21670 32331 385639 720000)) ;;; Generated autoloads from novice.el (define-obsolete-variable-alias 'disabled-command-hook 'disabled-command-function "22.1") @@ -19258,8 +19311,8 @@ future sessions. ;;;*** -;;;### (autoloads nil "nroff-mode" "textmodes/nroff-mode.el" (21607 -;;;;;; 54478 800121 42000)) +;;;### (autoloads nil "nroff-mode" "textmodes/nroff-mode.el" (21670 +;;;;;; 32331 885635 586000)) ;;; Generated autoloads from textmodes/nroff-mode.el (autoload 'nroff-mode "nroff-mode" "\ @@ -19273,14 +19326,14 @@ closing requests for requests that are used in matched pairs. ;;;*** -;;;### (autoloads nil "ntlm" "net/ntlm.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "ntlm" "net/ntlm.el" (21670 32331 385639 720000)) ;;; Generated autoloads from net/ntlm.el (push (purecopy '(ntlm 1 0)) package--builtin-versions) ;;;*** -;;;### (autoloads nil "nxml-glyph" "nxml/nxml-glyph.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "nxml-glyph" "nxml/nxml-glyph.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from nxml/nxml-glyph.el (autoload 'nxml-glyph-display-string "nxml-glyph" "\ @@ -19292,8 +19345,8 @@ Return nil if the face cannot display a glyph for N. ;;;*** -;;;### (autoloads nil "nxml-mode" "nxml/nxml-mode.el" (21611 10937 -;;;;;; 700236 3000)) +;;;### (autoloads nil "nxml-mode" "nxml/nxml-mode.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from nxml/nxml-mode.el (autoload 'nxml-mode "nxml-mode" "\ @@ -19353,8 +19406,8 @@ Many aspects this mode can be customized using ;;;*** -;;;### (autoloads nil "nxml-uchnm" "nxml/nxml-uchnm.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "nxml-uchnm" "nxml/nxml-uchnm.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from nxml/nxml-uchnm.el (autoload 'nxml-enable-unicode-char-name-sets "nxml-uchnm" "\ @@ -19366,8 +19419,8 @@ the variable `nxml-enabled-unicode-blocks'. ;;;*** -;;;### (autoloads nil "octave" "progmodes/octave.el" (21632 17083 -;;;;;; 200835 890000)) +;;;### (autoloads nil "octave" "progmodes/octave.el" (21695 35516 +;;;;;; 595262 313000)) ;;; Generated autoloads from progmodes/octave.el (autoload 'octave-mode "octave" "\ @@ -19404,8 +19457,8 @@ startup file, `~/.emacs-octave'. ;;;*** -;;;### (autoloads nil "opascal" "progmodes/opascal.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "opascal" "progmodes/opascal.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/opascal.el (define-obsolete-function-alias 'delphi-mode 'opascal-mode "24.4") @@ -19440,7 +19493,7 @@ Coloring: ;;;*** -;;;### (autoloads nil "org" "org/org.el" (21645 29117 170137 362000)) +;;;### (autoloads nil "org" "org/org.el" (21670 32331 385639 720000)) ;;; Generated autoloads from org/org.el (autoload 'org-babel-do-load-languages "org" "\ @@ -19661,8 +19714,8 @@ Call the customize function with org as argument. ;;;*** -;;;### (autoloads nil "org-agenda" "org/org-agenda.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "org-agenda" "org/org-agenda.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from org/org-agenda.el (autoload 'org-toggle-sticky-agenda "org-agenda" "\ @@ -19935,8 +19988,8 @@ to override `appt-message-warning-time'. ;;;*** -;;;### (autoloads nil "org-capture" "org/org-capture.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "org-capture" "org/org-capture.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from org/org-capture.el (autoload 'org-capture-string "org-capture" "\ @@ -19978,8 +20031,8 @@ Set `org-capture-templates' to be similar to `org-remember-templates'. ;;;*** -;;;### (autoloads nil "org-colview" "org/org-colview.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "org-colview" "org/org-colview.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from org/org-colview.el (autoload 'org-columns-remove-overlays "org-colview" "\ @@ -20042,8 +20095,8 @@ Turn on or update column view in the agenda. ;;;*** -;;;### (autoloads nil "org-compat" "org/org-compat.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "org-compat" "org/org-compat.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from org/org-compat.el (autoload 'org-check-version "org-compat" "\ @@ -20053,8 +20106,8 @@ Try very hard to provide sensible version strings. ;;;*** -;;;### (autoloads nil "org-macs" "org/org-macs.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "org-macs" "org/org-macs.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from org/org-macs.el (autoload 'org-load-noerror-mustsuffix "org-macs" "\ @@ -20082,8 +20135,8 @@ The Git version of org-mode. ;;;*** -;;;### (autoloads nil "outline" "outline.el" (21626 64704 823711 -;;;;;; 579000)) +;;;### (autoloads nil "outline" "outline.el" (21708 47547 478182 +;;;;;; 210000)) ;;; Generated autoloads from outline.el (put 'outline-regexp 'safe-local-variable 'stringp) (put 'outline-heading-end-regexp 'safe-local-variable 'stringp) @@ -20098,29 +20151,11 @@ invisible, or visible again. Invisible lines are attached to the end of the heading, so they move with it, if the line is killed and yanked back. A heading with text hidden under it is marked with an ellipsis (...). -Commands:\\ -\\[outline-next-visible-heading] outline-next-visible-heading move by visible headings -\\[outline-previous-visible-heading] outline-previous-visible-heading -\\[outline-forward-same-level] outline-forward-same-level similar but skip subheadings -\\[outline-backward-same-level] outline-backward-same-level -\\[outline-up-heading] outline-up-heading move from subheading to heading - -\\[hide-body] make all text invisible (not headings). -\\[show-all] make everything in buffer visible. -\\[hide-sublevels] make only the first N levels of headers visible. - -The remaining commands are used when point is on a heading line. -They apply to some of the body or subheadings of that heading. -\\[hide-subtree] hide-subtree make body and subheadings invisible. -\\[show-subtree] show-subtree make body and subheadings visible. -\\[show-children] show-children make direct subheadings visible. - No effect on body, or subheadings 2 or more levels down. - With arg N, affects subheadings N levels down. -\\[hide-entry] make immediately following body invisible. -\\[show-entry] make it visible. -\\[hide-leaves] make body under heading and under its subheadings invisible. - The subheadings remain visible. -\\[show-branches] make all subheadings at all levels visible. +\\{outline-mode-map} +The commands `outline-hide-subtree', `outline-show-subtree', +`outline-show-children', `outline-hide-entry', +`outline-show-entry', `outline-hide-leaves', and `outline-show-branches' +are used when point is on a heading line. The variable `outline-regexp' can be changed to control what is a heading. A line is a heading if `outline-regexp' matches something at the @@ -20144,8 +20179,8 @@ See the command `outline-mode' for more information on this mode. ;;;*** -;;;### (autoloads nil "package" "emacs-lisp/package.el" (21652 2365 -;;;;;; 910127 752000)) +;;;### (autoloads nil "package" "emacs-lisp/package.el" (21695 35516 +;;;;;; 595262 313000)) ;;; Generated autoloads from emacs-lisp/package.el (push (purecopy '(package 1 0 1)) package--builtin-versions) @@ -20169,8 +20204,14 @@ in an archive in `package-archives'. Interactively, prompt for its name. (autoload 'package-install-from-buffer "package" "\ Install a package from the current buffer. -The current buffer is assumed to be a single .el or .tar file that follows the -packaging guidelines; see info node `(elisp)Packaging'. +The current buffer is assumed to be a single .el or .tar file or +a directory. These must follow the packaging guidelines (see +info node `(elisp)Packaging'). + +Specially, if current buffer is a directory, the -pkg.el +description file is not mandatory, in which case the information +is derived from the main .el file in the directory. + Downloads and installs required packages as needed. \(fn)" t nil) @@ -20217,7 +20258,7 @@ The list is displayed in a buffer named `*Packages*'. ;;;*** -;;;### (autoloads nil "paren" "paren.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "paren" "paren.el" (21670 32331 385639 720000)) ;;; Generated autoloads from paren.el (defvar show-paren-mode nil "\ @@ -20243,8 +20284,8 @@ matching parenthesis is highlighted in `show-paren-style' after ;;;*** -;;;### (autoloads nil "parse-time" "calendar/parse-time.el" (21607 -;;;;;; 54477 800124 118000)) +;;;### (autoloads nil "parse-time" "calendar/parse-time.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from calendar/parse-time.el (put 'parse-time-rules 'risky-local-variable t) @@ -20257,8 +20298,8 @@ unknown are returned as nil. ;;;*** -;;;### (autoloads nil "pascal" "progmodes/pascal.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "pascal" "progmodes/pascal.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/pascal.el (autoload 'pascal-mode "pascal" "\ @@ -20307,8 +20348,8 @@ See also the user variables `pascal-type-keywords', `pascal-start-keywords' and ;;;*** -;;;### (autoloads nil "password-cache" "password-cache.el" (21607 -;;;;;; 54478 800121 42000)) +;;;### (autoloads nil "password-cache" "password-cache.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from password-cache.el (defvar password-cache t "\ @@ -20329,8 +20370,8 @@ Check if KEY is in the cache. ;;;*** -;;;### (autoloads nil "pcase" "emacs-lisp/pcase.el" (21607 54477 -;;;;;; 800124 118000)) +;;;### (autoloads nil "pcase" "emacs-lisp/pcase.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from emacs-lisp/pcase.el (autoload 'pcase "pcase" "\ @@ -20412,8 +20453,8 @@ Define a pcase UPattern macro. ;;;*** -;;;### (autoloads nil "pcmpl-cvs" "pcmpl-cvs.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "pcmpl-cvs" "pcmpl-cvs.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from pcmpl-cvs.el (autoload 'pcomplete/cvs "pcmpl-cvs" "\ @@ -20423,8 +20464,8 @@ Completion rules for the `cvs' command. ;;;*** -;;;### (autoloads nil "pcmpl-gnu" "pcmpl-gnu.el" (21632 17083 200835 -;;;;;; 890000)) +;;;### (autoloads nil "pcmpl-gnu" "pcmpl-gnu.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from pcmpl-gnu.el (autoload 'pcomplete/gzip "pcmpl-gnu" "\ @@ -20451,8 +20492,8 @@ Completion for the GNU tar utility. ;;;*** -;;;### (autoloads nil "pcmpl-linux" "pcmpl-linux.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "pcmpl-linux" "pcmpl-linux.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from pcmpl-linux.el (autoload 'pcomplete/kill "pcmpl-linux" "\ @@ -20472,8 +20513,8 @@ Completion for GNU/Linux `mount'. ;;;*** -;;;### (autoloads nil "pcmpl-rpm" "pcmpl-rpm.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "pcmpl-rpm" "pcmpl-rpm.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from pcmpl-rpm.el (autoload 'pcomplete/rpm "pcmpl-rpm" "\ @@ -20483,8 +20524,8 @@ Completion for the `rpm' command. ;;;*** -;;;### (autoloads nil "pcmpl-unix" "pcmpl-unix.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "pcmpl-unix" "pcmpl-unix.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from pcmpl-unix.el (autoload 'pcomplete/cd "pcmpl-unix" "\ @@ -20539,8 +20580,8 @@ Includes files as well as host names followed by a colon. ;;;*** -;;;### (autoloads nil "pcmpl-x" "pcmpl-x.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "pcmpl-x" "pcmpl-x.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from pcmpl-x.el (autoload 'pcomplete/tlmgr "pcmpl-x" "\ @@ -20564,8 +20605,8 @@ Completion for the `ag' command. ;;;*** -;;;### (autoloads nil "pcomplete" "pcomplete.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "pcomplete" "pcomplete.el" (21688 62278 418203 +;;;;;; 119000)) ;;; Generated autoloads from pcomplete.el (autoload 'pcomplete "pcomplete" "\ @@ -20622,7 +20663,7 @@ Setup `shell-mode' to use pcomplete. ;;;*** -;;;### (autoloads nil "pcvs" "vc/pcvs.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "pcvs" "vc/pcvs.el" (21670 32331 885635 586000)) ;;; Generated autoloads from vc/pcvs.el (autoload 'cvs-checkout "pcvs" "\ @@ -20697,8 +20738,8 @@ The exact behavior is determined also by `cvs-dired-use-hook'." (when (stringp d ;;;*** -;;;### (autoloads nil "pcvs-defs" "vc/pcvs-defs.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "pcvs-defs" "vc/pcvs-defs.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from vc/pcvs-defs.el (defvar cvs-global-menu (let ((m (make-sparse-keymap "PCL-CVS"))) (define-key m [status] `(menu-item ,(purecopy "Directory Status") cvs-status :help ,(purecopy "A more verbose status of a workarea"))) (define-key m [checkout] `(menu-item ,(purecopy "Checkout Module") cvs-checkout :help ,(purecopy "Check out a module from the repository"))) (define-key m [update] `(menu-item ,(purecopy "Update Directory") cvs-update :help ,(purecopy "Fetch updates from the repository"))) (define-key m [examine] `(menu-item ,(purecopy "Examine Directory") cvs-examine :help ,(purecopy "Examine the current state of a workarea"))) (fset 'cvs-global-menu m)) "\ @@ -20706,8 +20747,8 @@ Global menu used by PCL-CVS.") ;;;*** -;;;### (autoloads nil "perl-mode" "progmodes/perl-mode.el" (21607 -;;;;;; 54478 800121 42000)) +;;;### (autoloads nil "perl-mode" "progmodes/perl-mode.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from progmodes/perl-mode.el (put 'perl-indent-level 'safe-local-variable 'integerp) (put 'perl-continued-statement-offset 'safe-local-variable 'integerp) @@ -20768,8 +20809,8 @@ Turning on Perl mode runs the normal hook `perl-mode-hook'. ;;;*** -;;;### (autoloads nil "picture" "textmodes/picture.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "picture" "textmodes/picture.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from textmodes/picture.el (autoload 'picture-mode "picture" "\ @@ -20849,8 +20890,8 @@ they are not by default assigned to keys. ;;;*** -;;;### (autoloads nil "plstore" "gnus/plstore.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "plstore" "gnus/plstore.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from gnus/plstore.el (autoload 'plstore-open "plstore" "\ @@ -20865,8 +20906,8 @@ Major mode for editing PLSTORE files. ;;;*** -;;;### (autoloads nil "po" "textmodes/po.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "po" "textmodes/po.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from textmodes/po.el (autoload 'po-find-file-coding-system "po" "\ @@ -20877,7 +20918,7 @@ Called through `file-coding-system-alist', before the file is visited for real. ;;;*** -;;;### (autoloads nil "pong" "play/pong.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "pong" "play/pong.el" (21670 32331 385639 720000)) ;;; Generated autoloads from play/pong.el (autoload 'pong "pong" "\ @@ -20893,7 +20934,7 @@ pong-mode keybindings:\\ ;;;*** -;;;### (autoloads nil "pop3" "gnus/pop3.el" (21619 5051 260148 536000)) +;;;### (autoloads nil "pop3" "gnus/pop3.el" (21670 32331 385639 720000)) ;;; Generated autoloads from gnus/pop3.el (autoload 'pop3-movemail "pop3" "\ @@ -20904,8 +20945,8 @@ Use streaming commands. ;;;*** -;;;### (autoloads nil "pp" "emacs-lisp/pp.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "pp" "emacs-lisp/pp.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from emacs-lisp/pp.el (autoload 'pp-to-string "pp" "\ @@ -20955,8 +20996,8 @@ Ignores leading comment characters. ;;;*** -;;;### (autoloads nil "printing" "printing.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "printing" "printing.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from printing.el (push (purecopy '(printing 6 9 3)) package--builtin-versions) @@ -21544,7 +21585,7 @@ are both set to t. ;;;*** -;;;### (autoloads nil "proced" "proced.el" (21609 55608 852266 580000)) +;;;### (autoloads nil "proced" "proced.el" (21670 32331 385639 720000)) ;;; Generated autoloads from proced.el (autoload 'proced "proced" "\ @@ -21562,8 +21603,8 @@ Proced buffers. ;;;*** -;;;### (autoloads nil "profiler" "profiler.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "profiler" "profiler.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from profiler.el (autoload 'profiler-start "profiler" "\ @@ -21591,8 +21632,8 @@ Open profile FILENAME. ;;;*** -;;;### (autoloads nil "prolog" "progmodes/prolog.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "prolog" "progmodes/prolog.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/prolog.el (autoload 'prolog-mode "prolog" "\ @@ -21625,7 +21666,7 @@ With prefix argument ARG, restart the Prolog process if running before. ;;;*** -;;;### (autoloads nil "ps-bdf" "ps-bdf.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "ps-bdf" "ps-bdf.el" (21670 32331 885635 586000)) ;;; Generated autoloads from ps-bdf.el (defvar bdf-directory-list (if (memq system-type '(ms-dos windows-nt)) (list (expand-file-name "fonts/bdf" installation-directory)) '("/usr/local/share/emacs/fonts/bdf")) "\ @@ -21636,8 +21677,8 @@ The default value is '(\"/usr/local/share/emacs/fonts/bdf\").") ;;;*** -;;;### (autoloads nil "ps-mode" "progmodes/ps-mode.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "ps-mode" "progmodes/ps-mode.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/ps-mode.el (push (purecopy '(ps-mode 1 1 9)) package--builtin-versions) @@ -21683,8 +21724,8 @@ Typing \\\\[ps-run-goto-error] when the cursor is at the number ;;;*** -;;;### (autoloads nil "ps-print" "ps-print.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "ps-print" "ps-print.el" (21670 32624 385626 +;;;;;; 484000)) ;;; Generated autoloads from ps-print.el (push (purecopy '(ps-print 7 3 5)) package--builtin-versions) @@ -21881,15 +21922,15 @@ If EXTENSION is any other symbol, it is ignored. ;;;*** -;;;### (autoloads nil "pulse" "cedet/pulse.el" (21638 55899 942254 -;;;;;; 689000)) +;;;### (autoloads nil "pulse" "cedet/pulse.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from cedet/pulse.el (push (purecopy '(pulse 1 0)) package--builtin-versions) ;;;*** -;;;### (autoloads nil "python" "progmodes/python.el" (21663 59071 -;;;;;; 96337 184000)) +;;;### (autoloads nil "python" "progmodes/python.el" (21704 50495 +;;;;;; 455324 752000)) ;;; Generated autoloads from progmodes/python.el (push (purecopy '(python 0 24 4)) package--builtin-versions) @@ -21926,7 +21967,7 @@ Major mode for editing Python files. ;;;*** -;;;### (autoloads nil "qp" "gnus/qp.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "qp" "gnus/qp.el" (21670 32331 385639 720000)) ;;; Generated autoloads from gnus/qp.el (autoload 'quoted-printable-decode-region "qp" "\ @@ -21945,8 +21986,8 @@ them into characters should be done separately. ;;;*** -;;;### (autoloads nil "quail" "international/quail.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "quail" "international/quail.el" (21673 8506 +;;;;;; 69195 402000)) ;;; Generated autoloads from international/quail.el (autoload 'quail-title "quail" "\ @@ -22176,8 +22217,8 @@ of each directory. ;;;*** -;;;### (autoloads nil "quail/hangul" "leim/quail/hangul.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "quail/hangul" "leim/quail/hangul.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from leim/quail/hangul.el (autoload 'hangul-input-method-activate "quail/hangul" "\ @@ -22190,7 +22231,7 @@ HELP-TEXT is a text set in `hangul-input-method-help-text'. ;;;*** ;;;### (autoloads nil "quail/uni-input" "leim/quail/uni-input.el" -;;;;;; (21607 54478 300138 641000)) +;;;;;; (21670 32331 385639 720000)) ;;; Generated autoloads from leim/quail/uni-input.el (autoload 'ucs-input-activate "quail/uni-input" "\ @@ -22204,8 +22245,8 @@ While this input method is active, the variable ;;;*** -;;;### (autoloads nil "quickurl" "net/quickurl.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "quickurl" "net/quickurl.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from net/quickurl.el (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" "\ @@ -22276,8 +22317,8 @@ Display `quickurl-list' as a formatted list using `quickurl-list-mode'. ;;;*** -;;;### (autoloads nil "rcirc" "net/rcirc.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "rcirc" "net/rcirc.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from net/rcirc.el (autoload 'rcirc "rcirc" "\ @@ -22315,8 +22356,8 @@ if ARG is omitted or nil. ;;;*** -;;;### (autoloads nil "re-builder" "emacs-lisp/re-builder.el" (21607 -;;;;;; 54477 800124 118000)) +;;;### (autoloads nil "re-builder" "emacs-lisp/re-builder.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from emacs-lisp/re-builder.el (defalias 'regexp-builder 're-builder) @@ -22334,8 +22375,8 @@ matching parts of the target buffer will be highlighted. ;;;*** -;;;### (autoloads nil "recentf" "recentf.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "recentf" "recentf.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from recentf.el (defvar recentf-mode nil "\ @@ -22361,7 +22402,7 @@ were operated on recently. ;;;*** -;;;### (autoloads nil "rect" "rect.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "rect" "rect.el" (21670 32331 885635 586000)) ;;; Generated autoloads from rect.el (autoload 'delete-rectangle "rect" "\ @@ -22501,8 +22542,8 @@ Activates the region if needed. Only lasts until the region is deactivated. ;;;*** -;;;### (autoloads nil "refill" "textmodes/refill.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "refill" "textmodes/refill.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from textmodes/refill.el (autoload 'refill-mode "refill" "\ @@ -22522,8 +22563,8 @@ For true \"word wrap\" behavior, use `visual-line-mode' instead. ;;;*** -;;;### (autoloads nil "reftex" "textmodes/reftex.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "reftex" "textmodes/reftex.el" (21704 50495 +;;;;;; 455324 752000)) ;;; Generated autoloads from textmodes/reftex.el (autoload 'reftex-citation "reftex-cite" nil t) (autoload 'reftex-all-document-files "reftex-parse") @@ -22576,8 +22617,8 @@ This enforces rescanning the buffer on next use. ;;;*** -;;;### (autoloads nil "reftex-vars" "textmodes/reftex-vars.el" (21607 -;;;;;; 54478 800121 42000)) +;;;### (autoloads nil "reftex-vars" "textmodes/reftex-vars.el" (21670 +;;;;;; 32331 885635 586000)) ;;; Generated autoloads from textmodes/reftex-vars.el (put 'reftex-vref-is-default 'safe-local-variable (lambda (x) (or (stringp x) (symbolp x)))) (put 'reftex-fref-is-default 'safe-local-variable (lambda (x) (or (stringp x) (symbolp x)))) @@ -22586,8 +22627,8 @@ This enforces rescanning the buffer on next use. ;;;*** -;;;### (autoloads nil "regexp-opt" "emacs-lisp/regexp-opt.el" (21607 -;;;;;; 54477 800124 118000)) +;;;### (autoloads nil "regexp-opt" "emacs-lisp/regexp-opt.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from emacs-lisp/regexp-opt.el (autoload 'regexp-opt "regexp-opt" "\ @@ -22616,15 +22657,15 @@ This means the number of non-shy regexp grouping constructs ;;;*** -;;;### (autoloads nil "regi" "emacs-lisp/regi.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "regi" "emacs-lisp/regi.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from emacs-lisp/regi.el (push (purecopy '(regi 1 8)) package--builtin-versions) ;;;*** -;;;### (autoloads nil "remember" "textmodes/remember.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "remember" "textmodes/remember.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from textmodes/remember.el (push (purecopy '(remember 2 0)) package--builtin-versions) @@ -22678,7 +22719,7 @@ to turn the *scratch* buffer into your notes buffer. ;;;*** -;;;### (autoloads nil "repeat" "repeat.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "repeat" "repeat.el" (21670 32331 885635 586000)) ;;; Generated autoloads from repeat.el (push (purecopy '(repeat 0 51)) package--builtin-versions) @@ -22701,8 +22742,8 @@ recently executed command not bound to an input event\". ;;;*** -;;;### (autoloads nil "reporter" "mail/reporter.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "reporter" "mail/reporter.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from mail/reporter.el (autoload 'reporter-submit-bug-report "reporter" "\ @@ -22733,8 +22774,8 @@ mail-sending package is used for editing and sending the message. ;;;*** -;;;### (autoloads nil "reposition" "reposition.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "reposition" "reposition.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from reposition.el (autoload 'reposition-window "reposition" "\ @@ -22760,7 +22801,7 @@ first comment line visible (if point is in a comment). ;;;*** -;;;### (autoloads nil "reveal" "reveal.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "reveal" "reveal.el" (21670 32331 885635 586000)) ;;; Generated autoloads from reveal.el (autoload 'reveal-mode "reveal" "\ @@ -22795,8 +22836,8 @@ the mode if ARG is omitted or nil. ;;;*** -;;;### (autoloads nil "ring" "emacs-lisp/ring.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "ring" "emacs-lisp/ring.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from emacs-lisp/ring.el (autoload 'ring-p "ring" "\ @@ -22811,8 +22852,8 @@ Make a ring that can contain SIZE elements. ;;;*** -;;;### (autoloads nil "rlogin" "net/rlogin.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "rlogin" "net/rlogin.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from net/rlogin.el (autoload 'rlogin "rlogin" "\ @@ -22856,8 +22897,8 @@ variable. ;;;*** -;;;### (autoloads nil "rmail" "mail/rmail.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "rmail" "mail/rmail.el" (21670 32623 885622 +;;;;;; 218000)) ;;; Generated autoloads from mail/rmail.el (defvar rmail-file-name (purecopy "~/RMAIL") "\ @@ -23054,8 +23095,8 @@ Set PASSWORD to be used for retrieving mail from a POP or IMAP server. ;;;*** -;;;### (autoloads nil "rmailout" "mail/rmailout.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "rmailout" "mail/rmailout.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from mail/rmailout.el (put 'rmail-output-file-alist 'risky-local-variable t) @@ -23119,8 +23160,8 @@ than appending to it. Deletes the message after writing if ;;;*** -;;;### (autoloads nil "rng-cmpct" "nxml/rng-cmpct.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "rng-cmpct" "nxml/rng-cmpct.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from nxml/rng-cmpct.el (autoload 'rng-c-load-schema "rng-cmpct" "\ @@ -23131,8 +23172,8 @@ Return a pattern. ;;;*** -;;;### (autoloads nil "rng-nxml" "nxml/rng-nxml.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "rng-nxml" "nxml/rng-nxml.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from nxml/rng-nxml.el (autoload 'rng-nxml-mode-init "rng-nxml" "\ @@ -23144,8 +23185,8 @@ Validation will be enabled if `rng-nxml-auto-validate-flag' is non-nil. ;;;*** -;;;### (autoloads nil "rng-valid" "nxml/rng-valid.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "rng-valid" "nxml/rng-valid.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from nxml/rng-valid.el (autoload 'rng-validate-mode "rng-valid" "\ @@ -23175,8 +23216,8 @@ to use for finding the schema. ;;;*** -;;;### (autoloads nil "rng-xsd" "nxml/rng-xsd.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "rng-xsd" "nxml/rng-xsd.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from nxml/rng-xsd.el (put 'http://www\.w3\.org/2001/XMLSchema-datatypes 'rng-dt-compile 'rng-xsd-compile) @@ -23236,7 +23277,7 @@ Start using robin package NAME, which is a string. ;;;*** -;;;### (autoloads nil "rot13" "rot13.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "rot13" "rot13.el" (21670 32331 885635 586000)) ;;; Generated autoloads from rot13.el (autoload 'rot13 "rot13" "\ @@ -23273,8 +23314,8 @@ Toggle the use of ROT13 encoding for the current window. ;;;*** -;;;### (autoloads nil "rst" "textmodes/rst.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "rst" "textmodes/rst.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from textmodes/rst.el (add-to-list 'auto-mode-alist (purecopy '("\\.re?st\\'" . rst-mode))) @@ -23304,8 +23345,8 @@ for modes derived from Text mode, like Mail mode. ;;;*** -;;;### (autoloads nil "ruby-mode" "progmodes/ruby-mode.el" (21657 -;;;;;; 20283 330825 807000)) +;;;### (autoloads nil "ruby-mode" "progmodes/ruby-mode.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from progmodes/ruby-mode.el (push (purecopy '(ruby-mode 1 2)) package--builtin-versions) @@ -23322,8 +23363,8 @@ Major mode for editing Ruby code. ;;;*** -;;;### (autoloads nil "ruler-mode" "ruler-mode.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "ruler-mode" "ruler-mode.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from ruler-mode.el (push (purecopy '(ruler-mode 1 6)) package--builtin-versions) @@ -23341,8 +23382,8 @@ if ARG is omitted or nil. ;;;*** -;;;### (autoloads nil "rx" "emacs-lisp/rx.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "rx" "emacs-lisp/rx.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from emacs-lisp/rx.el (autoload 'rx-to-string "rx" "\ @@ -23653,15 +23694,15 @@ enclosed in `(and ...)'. ;;;*** -;;;### (autoloads nil "sasl-ntlm" "net/sasl-ntlm.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "sasl-ntlm" "net/sasl-ntlm.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from net/sasl-ntlm.el (push (purecopy '(sasl 1 0)) package--builtin-versions) ;;;*** -;;;### (autoloads nil "savehist" "savehist.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "savehist" "savehist.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from savehist.el (push (purecopy '(savehist 24)) package--builtin-versions) @@ -23693,8 +23734,8 @@ histories, which is probably undesirable. ;;;*** -;;;### (autoloads nil "scheme" "progmodes/scheme.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "scheme" "progmodes/scheme.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/scheme.el (autoload 'scheme-mode "scheme" "\ @@ -23733,8 +23774,8 @@ that variable's value is a string. ;;;*** -;;;### (autoloads nil "score-mode" "gnus/score-mode.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "score-mode" "gnus/score-mode.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from gnus/score-mode.el (autoload 'gnus-score-mode "score-mode" "\ @@ -23747,8 +23788,8 @@ This mode is an extended emacs-lisp mode. ;;;*** -;;;### (autoloads nil "scroll-all" "scroll-all.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "scroll-all" "scroll-all.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from scroll-all.el (defvar scroll-all-mode nil "\ @@ -23773,8 +23814,8 @@ one window apply to all visible windows in the same frame. ;;;*** -;;;### (autoloads nil "scroll-lock" "scroll-lock.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "scroll-lock" "scroll-lock.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from scroll-lock.el (autoload 'scroll-lock-mode "scroll-lock" "\ @@ -23790,16 +23831,16 @@ vertically fixed relative to window boundaries during scrolling. ;;;*** -;;;### (autoloads nil "secrets" "net/secrets.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "secrets" "net/secrets.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from net/secrets.el (when (featurep 'dbusbind) (autoload 'secrets-show-secrets "secrets" nil t)) ;;;*** -;;;### (autoloads nil "semantic" "cedet/semantic.el" (21645 29116 -;;;;;; 670141 789000)) +;;;### (autoloads nil "semantic" "cedet/semantic.el" (21679 47292 +;;;;;; 556033 759000)) ;;; Generated autoloads from cedet/semantic.el (push (purecopy '(semantic 2 2)) package--builtin-versions) @@ -23857,7 +23898,7 @@ Semantic mode. ;;;*** ;;;### (autoloads nil "semantic/bovine/grammar" "cedet/semantic/bovine/grammar.el" -;;;;;; (21607 54477 800124 118000)) +;;;;;; (21670 32330 885624 725000)) ;;; Generated autoloads from cedet/semantic/bovine/grammar.el (autoload 'bovine-grammar-mode "semantic/bovine/grammar" "\ @@ -23868,7 +23909,7 @@ Major mode for editing Bovine grammars. ;;;*** ;;;### (autoloads nil "semantic/wisent/grammar" "cedet/semantic/wisent/grammar.el" -;;;;;; (21607 54477 800124 118000)) +;;;;;; (21670 32330 885624 725000)) ;;; Generated autoloads from cedet/semantic/wisent/grammar.el (autoload 'wisent-grammar-mode "semantic/wisent/grammar" "\ @@ -23878,8 +23919,8 @@ Major mode for editing Wisent grammars. ;;;*** -;;;### (autoloads nil "sendmail" "mail/sendmail.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "sendmail" "mail/sendmail.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from mail/sendmail.el (defvar mail-from-style 'default "\ @@ -24160,14 +24201,14 @@ Like `mail' command, but display mail buffer in another frame. ;;;*** -;;;### (autoloads nil "seq" "emacs-lisp/seq.el" (21649 26173 700491 -;;;;;; 498000)) +;;;### (autoloads nil "seq" "emacs-lisp/seq.el" (21691 38459 74604 +;;;;;; 918000)) ;;; Generated autoloads from emacs-lisp/seq.el (push (purecopy '(seq 1 0)) package--builtin-versions) ;;;*** -;;;### (autoloads nil "server" "server.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "server" "server.el" (21670 32331 885635 586000)) ;;; Generated autoloads from server.el (put 'server-host 'risky-local-variable t) @@ -24234,7 +24275,7 @@ only these files will be asked to be saved. ;;;*** -;;;### (autoloads nil "ses" "ses.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "ses" "ses.el" (21670 32331 885635 586000)) ;;; Generated autoloads from ses.el (autoload 'ses-mode "ses" "\ @@ -24278,8 +24319,8 @@ formula: ;;;*** -;;;### (autoloads nil "sgml-mode" "textmodes/sgml-mode.el" (21623 -;;;;;; 2108 292281 129000)) +;;;### (autoloads nil "sgml-mode" "textmodes/sgml-mode.el" (21670 +;;;;;; 32331 885635 586000)) ;;; Generated autoloads from textmodes/sgml-mode.el (autoload 'sgml-mode "sgml-mode" "\ @@ -24344,8 +24385,8 @@ To work around that, do: ;;;*** -;;;### (autoloads nil "sh-script" "progmodes/sh-script.el" (21663 -;;;;;; 59071 96337 184000)) +;;;### (autoloads nil "sh-script" "progmodes/sh-script.el" (21704 +;;;;;; 50495 455324 752000)) ;;; Generated autoloads from progmodes/sh-script.el (push (purecopy '(sh-script 2 0 6)) package--builtin-versions) (put 'sh-shell 'safe-local-variable 'symbolp) @@ -24387,7 +24428,6 @@ buffer indents as it currently is indented. \\[backward-delete-char-untabify] Delete backward one position, even if it was a tab. -\\[newline-and-indent] Delete unquoted space and indent new line same as this one. \\[sh-end-of-command] Go to end of successive commands. \\[sh-beginning-of-command] Go to beginning of successive commands. \\[sh-set-shell] Set this buffer's shell, and maybe its magic number. @@ -24409,8 +24449,8 @@ with your script for an edit-interpret-debug cycle. ;;;*** -;;;### (autoloads nil "shadow" "emacs-lisp/shadow.el" (21607 54477 -;;;;;; 800124 118000)) +;;;### (autoloads nil "shadow" "emacs-lisp/shadow.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from emacs-lisp/shadow.el (autoload 'list-load-path-shadows "shadow" "\ @@ -24459,8 +24499,8 @@ function, `load-path-shadows-find'. ;;;*** -;;;### (autoloads nil "shadowfile" "shadowfile.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "shadowfile" "shadowfile.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from shadowfile.el (autoload 'shadow-define-cluster "shadowfile" "\ @@ -24498,7 +24538,7 @@ Set up file shadowing. ;;;*** -;;;### (autoloads nil "shell" "shell.el" (21658 41149 155622 310000)) +;;;### (autoloads nil "shell" "shell.el" (21678 26426 225333 737000)) ;;; Generated autoloads from shell.el (defvar shell-dumb-shell-regexp (purecopy "cmd\\(proxy\\)?\\.exe") "\ @@ -24546,7 +24586,7 @@ Otherwise, one argument `-i' is passed to the shell. ;;;*** -;;;### (autoloads nil "shr" "net/shr.el" (21666 35265 825623 21000)) +;;;### (autoloads nil "shr" "net/shr.el" (21704 50495 455324 752000)) ;;; Generated autoloads from net/shr.el (autoload 'shr-render-region "shr" "\ @@ -24563,8 +24603,8 @@ DOM should be a parse tree as generated by ;;;*** -;;;### (autoloads nil "sieve" "gnus/sieve.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "sieve" "gnus/sieve.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from gnus/sieve.el (autoload 'sieve-manage "sieve" "\ @@ -24589,8 +24629,8 @@ DOM should be a parse tree as generated by ;;;*** -;;;### (autoloads nil "sieve-mode" "gnus/sieve-mode.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "sieve-mode" "gnus/sieve-mode.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from gnus/sieve-mode.el (autoload 'sieve-mode "sieve-mode" "\ @@ -24605,8 +24645,8 @@ Turning on Sieve mode runs `sieve-mode-hook'. ;;;*** -;;;### (autoloads nil "simula" "progmodes/simula.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "simula" "progmodes/simula.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from progmodes/simula.el (autoload 'simula-mode "simula" "\ @@ -24654,8 +24694,8 @@ with no arguments, if that value is non-nil. ;;;*** -;;;### (autoloads nil "skeleton" "skeleton.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "skeleton" "skeleton.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from skeleton.el (defvar skeleton-filter-function 'identity "\ @@ -24773,8 +24813,8 @@ symmetrical ones, and the same character twice for the others. ;;;*** -;;;### (autoloads nil "smerge-mode" "vc/smerge-mode.el" (21628 45530 -;;;;;; 160140 360000)) +;;;### (autoloads nil "smerge-mode" "vc/smerge-mode.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from vc/smerge-mode.el (autoload 'smerge-ediff "smerge-mode" "\ @@ -24801,8 +24841,8 @@ If no conflict maker is found, turn off `smerge-mode'. ;;;*** -;;;### (autoloads nil "smiley" "gnus/smiley.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "smiley" "gnus/smiley.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from gnus/smiley.el (autoload 'smiley-region "smiley" "\ @@ -24819,8 +24859,8 @@ interactively. If there's no argument, do it at the current buffer. ;;;*** -;;;### (autoloads nil "smtpmail" "mail/smtpmail.el" (21619 5051 260148 -;;;;;; 536000)) +;;;### (autoloads nil "smtpmail" "mail/smtpmail.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from mail/smtpmail.el (autoload 'smtpmail-send-it "smtpmail" "\ @@ -24835,8 +24875,8 @@ Send mail that was queued as a result of setting `smtpmail-queue-mail'. ;;;*** -;;;### (autoloads nil "snake" "play/snake.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "snake" "play/snake.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from play/snake.el (autoload 'snake "snake" "\ @@ -24859,8 +24899,8 @@ Snake mode keybindings: ;;;*** -;;;### (autoloads nil "snmp-mode" "net/snmp-mode.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "snmp-mode" "net/snmp-mode.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from net/snmp-mode.el (autoload 'snmp-mode "snmp-mode" "\ @@ -24889,8 +24929,8 @@ then `snmpv2-mode-hook'. ;;;*** -;;;### (autoloads nil "solar" "calendar/solar.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "solar" "calendar/solar.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from calendar/solar.el (autoload 'sunrise-sunset "solar" "\ @@ -24905,8 +24945,8 @@ This function is suitable for execution in an init file. ;;;*** -;;;### (autoloads nil "solitaire" "play/solitaire.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "solitaire" "play/solitaire.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from play/solitaire.el (autoload 'solitaire "solitaire" "\ @@ -24981,7 +25021,7 @@ Pick your favorite shortcuts: ;;;*** -;;;### (autoloads nil "sort" "sort.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "sort" "sort.el" (21670 32331 885635 586000)) ;;; Generated autoloads from sort.el (put 'sort-fold-case 'safe-local-variable 'booleanp) @@ -25156,7 +25196,7 @@ is non-nil, it also prints a message describing the number of deletions. ;;;*** -;;;### (autoloads nil "spam" "gnus/spam.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "spam" "gnus/spam.el" (21670 32331 385639 720000)) ;;; Generated autoloads from gnus/spam.el (autoload 'spam-initialize "spam" "\ @@ -25170,8 +25210,8 @@ installed through `spam-necessary-extra-headers'. ;;;*** -;;;### (autoloads nil "spam-report" "gnus/spam-report.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "spam-report" "gnus/spam-report.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from gnus/spam-report.el (autoload 'spam-report-process-queue "spam-report" "\ @@ -25213,8 +25253,8 @@ Spam reports will be queued with the method used when ;;;*** -;;;### (autoloads nil "speedbar" "speedbar.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "speedbar" "speedbar.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from speedbar.el (defalias 'speedbar 'speedbar-frame-mode) @@ -25238,8 +25278,8 @@ selected. If the speedbar frame is active, then select the attached frame. ;;;*** -;;;### (autoloads nil "spook" "play/spook.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "spook" "play/spook.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from play/spook.el (autoload 'spook "spook" "\ @@ -25254,8 +25294,8 @@ Return a vector containing the lines from `spook-phrases-file'. ;;;*** -;;;### (autoloads nil "sql" "progmodes/sql.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "sql" "progmodes/sql.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from progmodes/sql.el (push (purecopy '(sql 3 4)) package--builtin-versions) @@ -25721,15 +25761,15 @@ Run vsql as an inferior process. ;;;*** -;;;### (autoloads nil "srecode" "cedet/srecode.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "srecode" "cedet/srecode.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from cedet/srecode.el (push (purecopy '(srecode 1 2)) package--builtin-versions) ;;;*** ;;;### (autoloads nil "srecode/srt-mode" "cedet/srecode/srt-mode.el" -;;;;;; (21657 20283 330825 807000)) +;;;;;; (21670 32330 885624 725000)) ;;; Generated autoloads from cedet/srecode/srt-mode.el (autoload 'srecode-template-mode "srecode/srt-mode" "\ @@ -25741,8 +25781,8 @@ Major-mode for writing SRecode macros. ;;;*** -;;;### (autoloads nil "starttls" "gnus/starttls.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "starttls" "gnus/starttls.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from gnus/starttls.el (autoload 'starttls-open-stream "starttls" "\ @@ -25765,8 +25805,8 @@ GnuTLS requires a port number. ;;;*** -;;;### (autoloads nil "strokes" "strokes.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "strokes" "strokes.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from strokes.el (autoload 'strokes-global-set-stroke "strokes" "\ @@ -25900,8 +25940,8 @@ Studlify-case the current buffer. ;;;*** -;;;### (autoloads nil "subword" "progmodes/subword.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "subword" "progmodes/subword.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from progmodes/subword.el (define-obsolete-function-alias 'capitalized-words-mode 'subword-mode "25.1") @@ -25993,8 +26033,8 @@ See `superword-mode' for more information on Superword mode. ;;;*** -;;;### (autoloads nil "supercite" "mail/supercite.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "supercite" "mail/supercite.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from mail/supercite.el (autoload 'sc-cite-original "supercite" "\ @@ -26026,8 +26066,8 @@ and `sc-post-hook' is run after the guts of this function. ;;;*** -;;;### (autoloads nil "t-mouse" "t-mouse.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "t-mouse" "t-mouse.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from t-mouse.el (define-obsolete-function-alias 't-mouse-mode 'gpm-mouse-mode "23.1") @@ -26055,7 +26095,7 @@ It relies on the `gpm' daemon being activated. ;;;*** -;;;### (autoloads nil "tabify" "tabify.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "tabify" "tabify.el" (21670 32331 885635 586000)) ;;; Generated autoloads from tabify.el (autoload 'untabify "tabify" "\ @@ -26084,8 +26124,8 @@ The variable `tab-width' controls the spacing of tab stops. ;;;*** -;;;### (autoloads nil "table" "textmodes/table.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "table" "textmodes/table.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from textmodes/table.el (defvar table-cell-map-hook nil "\ @@ -26677,7 +26717,7 @@ converts a table into plain text without frames. It is a companion to ;;;*** -;;;### (autoloads nil "talk" "talk.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "talk" "talk.el" (21670 32331 885635 586000)) ;;; Generated autoloads from talk.el (autoload 'talk-connect "talk" "\ @@ -26692,8 +26732,8 @@ Connect to the Emacs talk group from the current X display or tty frame. ;;;*** -;;;### (autoloads nil "tar-mode" "tar-mode.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "tar-mode" "tar-mode.el" (21704 50495 455324 +;;;;;; 752000)) ;;; Generated autoloads from tar-mode.el (autoload 'tar-mode "tar-mode" "\ @@ -26716,8 +26756,8 @@ See also: variables `tar-update-datestamp' and `tar-anal-blocksize'. ;;;*** -;;;### (autoloads nil "tcl" "progmodes/tcl.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "tcl" "progmodes/tcl.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from progmodes/tcl.el (autoload 'tcl-mode "tcl" "\ @@ -26765,8 +26805,8 @@ Prefix argument means invert sense of `tcl-use-smart-word-finder'. ;;;*** -;;;### (autoloads nil "telnet" "net/telnet.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "telnet" "net/telnet.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from net/telnet.el (autoload 'telnet "telnet" "\ @@ -26791,7 +26831,7 @@ Normally input is edited in Emacs and sent a line at a time. ;;;*** -;;;### (autoloads nil "term" "term.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "term" "term.el" (21670 32331 885635 586000)) ;;; Generated autoloads from term.el (autoload 'make-term "term" "\ @@ -26833,8 +26873,8 @@ use in that buffer. ;;;*** -;;;### (autoloads nil "testcover" "emacs-lisp/testcover.el" (21607 -;;;;;; 54477 800124 118000)) +;;;### (autoloads nil "testcover" "emacs-lisp/testcover.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from emacs-lisp/testcover.el (autoload 'testcover-this-defun "testcover" "\ @@ -26844,8 +26884,8 @@ Start coverage on function under point. ;;;*** -;;;### (autoloads nil "tetris" "play/tetris.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "tetris" "play/tetris.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from play/tetris.el (push (purecopy '(tetris 2 1)) package--builtin-versions) @@ -26870,8 +26910,8 @@ tetris-mode keybindings: ;;;*** -;;;### (autoloads nil "tex-mode" "textmodes/tex-mode.el" (21663 59071 -;;;;;; 96337 184000)) +;;;### (autoloads nil "tex-mode" "textmodes/tex-mode.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from textmodes/tex-mode.el (defvar tex-shell-file-name nil "\ @@ -27172,8 +27212,8 @@ Major mode to edit DocTeX files. ;;;*** -;;;### (autoloads nil "texinfmt" "textmodes/texinfmt.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "texinfmt" "textmodes/texinfmt.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from textmodes/texinfmt.el (autoload 'texinfo-format-buffer "texinfmt" "\ @@ -27212,8 +27252,8 @@ if large. You can use `Info-split' to do this manually. ;;;*** -;;;### (autoloads nil "texinfo" "textmodes/texinfo.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "texinfo" "textmodes/texinfo.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from textmodes/texinfo.el (defvar texinfo-open-quote (purecopy "``") "\ @@ -27297,8 +27337,8 @@ value of `texinfo-mode-hook'. ;;;*** -;;;### (autoloads nil "thai-util" "language/thai-util.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "thai-util" "language/thai-util.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from language/thai-util.el (autoload 'thai-compose-region "thai-util" "\ @@ -27325,8 +27365,8 @@ Compose Thai characters in the current buffer. ;;;*** -;;;### (autoloads nil "thingatpt" "thingatpt.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "thingatpt" "thingatpt.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from thingatpt.el (autoload 'forward-thing "thingatpt" "\ @@ -27390,7 +27430,7 @@ Return the Lisp list at point, or nil if none is found. ;;;*** -;;;### (autoloads nil "thumbs" "thumbs.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "thumbs" "thumbs.el" (21670 32331 885635 586000)) ;;; Generated autoloads from thumbs.el (autoload 'thumbs-find-thumb "thumbs" "\ @@ -27424,8 +27464,8 @@ In dired, call the setroot program on the image at point. ;;;*** -;;;### (autoloads nil "tibet-util" "language/tibet-util.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "tibet-util" "language/tibet-util.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from language/tibet-util.el (autoload 'tibetan-char-p "tibet-util" "\ @@ -27498,10 +27538,10 @@ See also docstring of the function tibetan-compose-region. ;;;*** -;;;### (autoloads nil "tildify" "textmodes/tildify.el" (21611 10938 -;;;;;; 204397 226000)) +;;;### (autoloads nil "tildify" "textmodes/tildify.el" (21695 35516 +;;;;;; 595262 313000)) ;;; Generated autoloads from textmodes/tildify.el -(push (purecopy '(tildify 4 5 7)) package--builtin-versions) +(push (purecopy '(tildify 4 6 1)) package--builtin-versions) (autoload 'tildify-region "tildify" "\ Add hard spaces in the region between BEG and END. @@ -27525,9 +27565,47 @@ won't be prompted for confirmation of each substitution. \(fn &optional DONT-ASK)" t nil) +(autoload 'tildify-space "tildify" "\ +Convert space before point into a hard space if the context is right. + +If + * character before point is a space character, + * character before that has “w†character syntax (i.e. it's a word + constituent), + * `tildify-space-pattern' matches when `looking-back' (no more than 10 + characters) from before the space character, and + * all predicates in `tildify-space-predicates' return non-nil, +replace the space character with value of `tildify-space-string' and +return t. + +Otherwise, if + * `tildify-double-space-undos' variable is non-nil, + * character before point is a space character, and + * text before that is a hard space as defined by + `tildify-space-string' variable, +remove the hard space and leave only the space character. + +This function is meant to be used as a `post-self-insert-hook'. + +\(fn)" t nil) + +(autoload 'tildify-mode "tildify" "\ +Adds electric behaviour to space character. + +When space is inserted into a buffer in a position where hard space is required +instead (determined by `tildify-space-pattern' and `tildify-space-predicates'), +that space character is replaced by a hard space specified by +`tildify-space-string'. Converting of the space is done by `tildify-space'. + +When `tildify-mode' is enabled, if `tildify-string-alist' specifies a hard space +representation for current major mode, the `tildify-space-string' buffer-local +variable will be set to the representation. + +\(fn &optional ARG)" t nil) + ;;;*** -;;;### (autoloads nil "time" "time.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "time" "time.el" (21670 32331 885635 586000)) ;;; Generated autoloads from time.el (defvar display-time-day-and-date nil "\ @@ -27589,8 +27667,8 @@ Return a string giving the duration of the Emacs initialization. ;;;*** -;;;### (autoloads nil "time-date" "calendar/time-date.el" (21611 -;;;;;; 10937 700236 3000)) +;;;### (autoloads nil "time-date" "calendar/time-date.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from calendar/time-date.el (autoload 'date-to-time "time-date" "\ @@ -27693,8 +27771,8 @@ Convert the time interval in seconds to a short string. ;;;*** -;;;### (autoloads nil "time-stamp" "time-stamp.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "time-stamp" "time-stamp.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from time-stamp.el (put 'time-stamp-format 'safe-local-variable 'stringp) (put 'time-stamp-time-zone 'safe-local-variable 'string-or-null-p) @@ -27734,8 +27812,8 @@ With ARG, turn time stamping on if and only if arg is positive. ;;;*** -;;;### (autoloads nil "timeclock" "calendar/timeclock.el" (21607 -;;;;;; 54477 800124 118000)) +;;;### (autoloads nil "timeclock" "calendar/timeclock.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from calendar/timeclock.el (push (purecopy '(timeclock 2 6 1)) package--builtin-versions) @@ -27845,7 +27923,7 @@ relative only to the time worked today, and not to past time. ;;;*** ;;;### (autoloads nil "titdic-cnv" "international/titdic-cnv.el" -;;;;;; (21607 54478 300138 641000)) +;;;;;; (21670 32331 385639 720000)) ;;; Generated autoloads from international/titdic-cnv.el (autoload 'titdic-convert "titdic-cnv" "\ @@ -27867,7 +27945,7 @@ To get complete usage, invoke \"emacs -batch -f batch-titdic-convert -h\". ;;;*** -;;;### (autoloads nil "tmm" "tmm.el" (21652 2366 414435 564000)) +;;;### (autoloads nil "tmm" "tmm.el" (21670 32331 885635 586000)) ;;; Generated autoloads from tmm.el (define-key global-map "\M-`" 'tmm-menubar) (define-key global-map [menu-bar mouse-1] 'tmm-menubar-mouse) @@ -27909,8 +27987,8 @@ Its value should be an event that has a binding in MENU. ;;;*** -;;;### (autoloads nil "todo-mode" "calendar/todo-mode.el" (21625 -;;;;;; 43838 483701 627000)) +;;;### (autoloads nil "todo-mode" "calendar/todo-mode.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from calendar/todo-mode.el (autoload 'todo-show "todo-mode" "\ @@ -27977,8 +28055,8 @@ Mode for displaying and reprioritizing top priority Todo. ;;;*** -;;;### (autoloads nil "tool-bar" "tool-bar.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "tool-bar" "tool-bar.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from tool-bar.el (autoload 'toggle-tool-bar-mode-from-frame "tool-bar" "\ @@ -28048,8 +28126,8 @@ holds a keymap. ;;;*** -;;;### (autoloads nil "tq" "emacs-lisp/tq.el" (21607 54477 800124 -;;;;;; 118000)) +;;;### (autoloads nil "tq" "emacs-lisp/tq.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from emacs-lisp/tq.el (autoload 'tq-create "tq" "\ @@ -28062,8 +28140,8 @@ to a tcp server on another machine. ;;;*** -;;;### (autoloads nil "trace" "emacs-lisp/trace.el" (21607 54477 -;;;;;; 800124 118000)) +;;;### (autoloads nil "trace" "emacs-lisp/trace.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from emacs-lisp/trace.el (defvar trace-buffer "*trace-output*" "\ @@ -28108,7 +28186,8 @@ the output buffer or changing the window configuration. ;;;*** -;;;### (autoloads nil "tramp" "net/tramp.el" (21663 59071 96337 184000)) +;;;### (autoloads nil "tramp" "net/tramp.el" (21704 50495 455324 +;;;;;; 752000)) ;;; Generated autoloads from net/tramp.el (defvar tramp-mode t "\ @@ -28223,8 +28302,8 @@ Discard Tramp from loading remote files. ;;;*** -;;;### (autoloads nil "tramp-ftp" "net/tramp-ftp.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "tramp-ftp" "net/tramp-ftp.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from net/tramp-ftp.el (autoload 'tramp-ftp-enable-ange-ftp "tramp-ftp" "\ @@ -28234,8 +28313,8 @@ Discard Tramp from loading remote files. ;;;*** -;;;### (autoloads nil "tutorial" "tutorial.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "tutorial" "tutorial.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from tutorial.el (autoload 'help-with-tutorial "tutorial" "\ @@ -28270,8 +28349,8 @@ resumed later. ;;;*** -;;;### (autoloads nil "two-column" "textmodes/two-column.el" (21607 -;;;;;; 54478 800121 42000)) +;;;### (autoloads nil "two-column" "textmodes/two-column.el" (21670 +;;;;;; 32331 885635 586000)) ;;; Generated autoloads from textmodes/two-column.el (autoload '2C-command "two-column" () t 'keymap) (global-set-key "\C-x6" '2C-command) @@ -28318,8 +28397,8 @@ First column's text sSs Second column's text ;;;*** -;;;### (autoloads nil "type-break" "type-break.el" (21609 55608 852266 -;;;;;; 580000)) +;;;### (autoloads nil "type-break" "type-break.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from type-break.el (defvar type-break-mode nil "\ @@ -28451,7 +28530,7 @@ FRAC should be the inverse of the fractional value; for example, a value of ;;;*** -;;;### (autoloads nil "uce" "mail/uce.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "uce" "mail/uce.el" (21670 32331 385639 720000)) ;;; Generated autoloads from mail/uce.el (autoload 'uce-reply-to-uce "uce" "\ @@ -28465,7 +28544,7 @@ You might need to set `uce-mail-reader' before using this. ;;;*** ;;;### (autoloads nil "ucs-normalize" "international/ucs-normalize.el" -;;;;;; (21607 54478 300138 641000)) +;;;;;; (21670 32331 385639 720000)) ;;; Generated autoloads from international/ucs-normalize.el (autoload 'ucs-normalize-NFD-region "ucs-normalize" "\ @@ -28530,8 +28609,8 @@ Normalize the string STR by the Unicode NFC and Mac OS's HFS Plus. ;;;*** -;;;### (autoloads nil "underline" "textmodes/underline.el" (21607 -;;;;;; 54478 800121 42000)) +;;;### (autoloads nil "underline" "textmodes/underline.el" (21670 +;;;;;; 32331 885635 586000)) ;;; Generated autoloads from textmodes/underline.el (autoload 'underline-region "underline" "\ @@ -28551,8 +28630,8 @@ which specify the range to operate on. ;;;*** -;;;### (autoloads nil "unrmail" "mail/unrmail.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "unrmail" "mail/unrmail.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from mail/unrmail.el (autoload 'batch-unrmail "unrmail" "\ @@ -28572,8 +28651,8 @@ The variable `unrmail-mbox-format' controls which mbox format to use. ;;;*** -;;;### (autoloads nil "unsafep" "emacs-lisp/unsafep.el" (21607 54477 -;;;;;; 800124 118000)) +;;;### (autoloads nil "unsafep" "emacs-lisp/unsafep.el" (21670 32330 +;;;;;; 885624 725000)) ;;; Generated autoloads from emacs-lisp/unsafep.el (autoload 'unsafep "unsafep" "\ @@ -28585,7 +28664,7 @@ UNSAFEP-VARS is a list of symbols with local bindings. ;;;*** -;;;### (autoloads nil "url" "url/url.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "url" "url/url.el" (21670 32331 885635 586000)) ;;; Generated autoloads from url/url.el (autoload 'url-retrieve "url" "\ @@ -28632,8 +28711,8 @@ no further processing). URL is either a string or a parsed URL. ;;;*** -;;;### (autoloads nil "url-auth" "url/url-auth.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "url-auth" "url/url-auth.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from url/url-auth.el (autoload 'url-get-authentication "url-auth" "\ @@ -28674,8 +28753,8 @@ RATING a rating between 1 and 10 of the strength of the authentication. ;;;*** -;;;### (autoloads nil "url-cache" "url/url-cache.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "url-cache" "url/url-cache.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from url/url-cache.el (autoload 'url-store-in-cache "url-cache" "\ @@ -28696,8 +28775,8 @@ Extract FNAM from the local disk cache. ;;;*** -;;;### (autoloads nil "url-cid" "url/url-cid.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "url-cid" "url/url-cid.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from url/url-cid.el (autoload 'url-cid "url-cid" "\ @@ -28707,8 +28786,8 @@ Extract FNAM from the local disk cache. ;;;*** -;;;### (autoloads nil "url-dav" "url/url-dav.el" (21634 58813 400848 -;;;;;; 500000)) +;;;### (autoloads nil "url-dav" "url/url-dav.el" (21696 56380 925320 +;;;;;; 624000)) ;;; Generated autoloads from url/url-dav.el (autoload 'url-dav-supported-p "url-dav" "\ @@ -28742,8 +28821,8 @@ added to this list, so most requests can just pass in nil. ;;;*** -;;;### (autoloads nil "url-file" "url/url-file.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "url-file" "url/url-file.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from url/url-file.el (autoload 'url-file "url-file" "\ @@ -28753,8 +28832,8 @@ Handle file: and ftp: URLs. ;;;*** -;;;### (autoloads nil "url-gw" "url/url-gw.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "url-gw" "url/url-gw.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from url/url-gw.el (autoload 'url-gateway-nslookup-host "url-gw" "\ @@ -28775,8 +28854,8 @@ overriding the value of `url-gateway-method'. ;;;*** -;;;### (autoloads nil "url-handlers" "url/url-handlers.el" (21607 -;;;;;; 54478 800121 42000)) +;;;### (autoloads nil "url-handlers" "url/url-handlers.el" (21670 +;;;;;; 32331 885635 586000)) ;;; Generated autoloads from url/url-handlers.el (defvar url-handler-mode nil "\ @@ -28830,8 +28909,8 @@ accessible. ;;;*** -;;;### (autoloads nil "url-http" "url/url-http.el" (21638 55900 442275 -;;;;;; 524000)) +;;;### (autoloads nil "url-http" "url/url-http.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from url/url-http.el (autoload 'url-default-expander "url-expand") @@ -28843,8 +28922,8 @@ accessible. ;;;*** -;;;### (autoloads nil "url-irc" "url/url-irc.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "url-irc" "url/url-irc.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from url/url-irc.el (autoload 'url-irc "url-irc" "\ @@ -28854,8 +28933,8 @@ accessible. ;;;*** -;;;### (autoloads nil "url-ldap" "url/url-ldap.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "url-ldap" "url/url-ldap.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from url/url-ldap.el (autoload 'url-ldap "url-ldap" "\ @@ -28868,8 +28947,8 @@ URL can be a URL string, or a URL vector of the type returned by ;;;*** -;;;### (autoloads nil "url-mailto" "url/url-mailto.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "url-mailto" "url/url-mailto.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from url/url-mailto.el (autoload 'url-mail "url-mailto" "\ @@ -28884,8 +28963,8 @@ Handle the mailto: URL syntax. ;;;*** -;;;### (autoloads nil "url-misc" "url/url-misc.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "url-misc" "url/url-misc.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from url/url-misc.el (autoload 'url-man "url-misc" "\ @@ -28916,8 +28995,8 @@ Fetch a data URL (RFC 2397). ;;;*** -;;;### (autoloads nil "url-news" "url/url-news.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "url-news" "url/url-news.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from url/url-news.el (autoload 'url-news "url-news" "\ @@ -28932,8 +29011,8 @@ Fetch a data URL (RFC 2397). ;;;*** -;;;### (autoloads nil "url-ns" "url/url-ns.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "url-ns" "url/url-ns.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from url/url-ns.el (autoload 'isPlainHostName "url-ns" "\ @@ -28973,8 +29052,8 @@ Fetch a data URL (RFC 2397). ;;;*** -;;;### (autoloads nil "url-parse" "url/url-parse.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "url-parse" "url/url-parse.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from url/url-parse.el (autoload 'url-recreate-url "url-parse" "\ @@ -29025,8 +29104,8 @@ parses to ;;;*** -;;;### (autoloads nil "url-privacy" "url/url-privacy.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "url-privacy" "url/url-privacy.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from url/url-privacy.el (autoload 'url-setup-privacy-info "url-privacy" "\ @@ -29036,8 +29115,8 @@ Setup variables that expose info about you and your system. ;;;*** -;;;### (autoloads nil "url-queue" "url/url-queue.el" (21619 5051 -;;;;;; 260148 536000)) +;;;### (autoloads nil "url-queue" "url/url-queue.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from url/url-queue.el (autoload 'url-queue-retrieve "url-queue" "\ @@ -29051,8 +29130,8 @@ The variable `url-queue-timeout' sets a timeout. ;;;*** -;;;### (autoloads nil "url-tramp" "url/url-tramp.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "url-tramp" "url/url-tramp.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from url/url-tramp.el (defvar url-tramp-protocols '("ftp" "ssh" "scp" "rsync" "telnet") "\ @@ -29070,8 +29149,8 @@ would have been passed to OPERATION. ;;;*** -;;;### (autoloads nil "url-util" "url/url-util.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "url-util" "url/url-util.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from url/url-util.el (defvar url-debug nil "\ @@ -29239,8 +29318,8 @@ This uses `url-current-object', set locally to the buffer. ;;;*** -;;;### (autoloads nil "userlock" "userlock.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "userlock" "userlock.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from userlock.el (autoload 'ask-user-about-lock "userlock" "\ @@ -29268,8 +29347,8 @@ The buffer in question is current when this function is called. ;;;*** -;;;### (autoloads nil "utf-7" "international/utf-7.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "utf-7" "international/utf-7.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from international/utf-7.el (autoload 'utf-7-post-read-conversion "utf-7" "\ @@ -29294,7 +29373,7 @@ The buffer in question is current when this function is called. ;;;*** -;;;### (autoloads nil "utf7" "gnus/utf7.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "utf7" "gnus/utf7.el" (21670 32331 385639 720000)) ;;; Generated autoloads from gnus/utf7.el (autoload 'utf7-encode "utf7" "\ @@ -29304,8 +29383,8 @@ Encode UTF-7 STRING. Use IMAP modification if FOR-IMAP is non-nil. ;;;*** -;;;### (autoloads nil "uudecode" "mail/uudecode.el" (21607 54478 -;;;;;; 300138 641000)) +;;;### (autoloads nil "uudecode" "mail/uudecode.el" (21670 32331 +;;;;;; 385639 720000)) ;;; Generated autoloads from mail/uudecode.el (autoload 'uudecode-decode-region-external "uudecode" "\ @@ -29329,7 +29408,7 @@ If FILE-NAME is non-nil, save the result to FILE-NAME. ;;;*** -;;;### (autoloads nil "vc" "vc/vc.el" (21649 26173 700491 498000)) +;;;### (autoloads nil "vc" "vc/vc.el" (21670 32331 885635 586000)) ;;; Generated autoloads from vc/vc.el (defvar vc-checkout-hook nil "\ @@ -29616,8 +29695,8 @@ Return the branch part of a revision number REV. ;;;*** -;;;### (autoloads nil "vc-annotate" "vc/vc-annotate.el" (21607 54478 -;;;;;; 800121 42000)) +;;;### (autoloads nil "vc-annotate" "vc/vc-annotate.el" (21670 32331 +;;;;;; 885635 586000)) ;;; Generated autoloads from vc/vc-annotate.el (autoload 'vc-annotate "vc-annotate" "\ @@ -29656,8 +29735,8 @@ should be applied to the background or to the foreground. ;;;*** -;;;### (autoloads nil "vc-bzr" "vc/vc-bzr.el" (21645 29117 170137 -;;;;;; 362000)) +;;;### (autoloads nil "vc-bzr" "vc/vc-bzr.el" (21691 38459 74604 +;;;;;; 918000)) ;;; Generated autoloads from vc/vc-bzr.el (defconst vc-bzr-admin-dirname ".bzr" "\ @@ -29673,8 +29752,8 @@ Name of the format file in a .bzr directory.") ;;;*** -;;;### (autoloads nil "vc-cvs" "vc/vc-cvs.el" (21645 29117 170137 -;;;;;; 362000)) +;;;### (autoloads nil "vc-cvs" "vc/vc-cvs.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from vc/vc-cvs.el (defun vc-cvs-registered (f) "Return non-nil if file F is registered with CVS." @@ -29685,8 +29764,8 @@ Name of the format file in a .bzr directory.") ;;;*** -;;;### (autoloads nil "vc-dir" "vc/vc-dir.el" (21665 14401 955623 -;;;;;; 556000)) +;;;### (autoloads nil "vc-dir" "vc/vc-dir.el" (21694 14651 747488 +;;;;;; 989000)) ;;; Generated autoloads from vc/vc-dir.el (autoload 'vc-dir "vc-dir" "\ @@ -29710,8 +29789,8 @@ These are the commands available for use in the file status buffer: ;;;*** -;;;### (autoloads nil "vc-dispatcher" "vc/vc-dispatcher.el" (21640 -;;;;;; 46919 650145 897000)) +;;;### (autoloads nil "vc-dispatcher" "vc/vc-dispatcher.el" (21670 +;;;;;; 32331 885635 586000)) ;;; Generated autoloads from vc/vc-dispatcher.el (autoload 'vc-do-command "vc-dispatcher" "\ @@ -29734,8 +29813,8 @@ case, and the process object in the asynchronous case. ;;;*** -;;;### (autoloads nil "vc-git" "vc/vc-git.el" (21663 59071 96337 -;;;;;; 184000)) +;;;### (autoloads nil "vc-git" "vc/vc-git.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from vc/vc-git.el (defun vc-git-registered (file) "Return non-nil if FILE is registered with git." @@ -29746,7 +29825,7 @@ case, and the process object in the asynchronous case. ;;;*** -;;;### (autoloads nil "vc-hg" "vc/vc-hg.el" (21645 29117 170137 362000)) +;;;### (autoloads nil "vc-hg" "vc/vc-hg.el" (21670 32331 885635 586000)) ;;; Generated autoloads from vc/vc-hg.el (defun vc-hg-registered (file) "Return non-nil if FILE is registered with hg." @@ -29757,8 +29836,8 @@ case, and the process object in the asynchronous case. ;;;*** -;;;### (autoloads nil "vc-mtn" "vc/vc-mtn.el" (21645 29117 170137 -;;;;;; 362000)) +;;;### (autoloads nil "vc-mtn" "vc/vc-mtn.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from vc/vc-mtn.el (defconst vc-mtn-admin-dir "_MTN" "\ @@ -29774,8 +29853,8 @@ Name of the monotone directory's format file.") ;;;*** -;;;### (autoloads nil "vc-rcs" "vc/vc-rcs.el" (21645 29117 170137 -;;;;;; 362000)) +;;;### (autoloads nil "vc-rcs" "vc/vc-rcs.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from vc/vc-rcs.el (defvar vc-rcs-master-templates (purecopy '("%sRCS/%s,v" "%s%s,v" "%sRCS/%s")) "\ @@ -29788,8 +29867,8 @@ For a description of possible values, see `vc-check-master-templates'.") ;;;*** -;;;### (autoloads nil "vc-sccs" "vc/vc-sccs.el" (21645 29117 170137 -;;;;;; 362000)) +;;;### (autoloads nil "vc-sccs" "vc/vc-sccs.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from vc/vc-sccs.el (defvar vc-sccs-master-templates (purecopy '("%sSCCS/s.%s" "%ss.%s" vc-sccs-search-project-dir)) "\ @@ -29807,8 +29886,8 @@ find any project directory." (let ((project-dir (getenv "PROJECTDIR")) dirs dir) ;;;*** -;;;### (autoloads nil "vc-src" "vc/vc-src.el" (21645 29117 170137 -;;;;;; 362000)) +;;;### (autoloads nil "vc-src" "vc/vc-src.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from vc/vc-src.el (defvar vc-src-master-templates (purecopy '("%s.src/%s,v")) "\ @@ -29821,8 +29900,8 @@ For a description of possible values, see `vc-check-master-templates'.") ;;;*** -;;;### (autoloads nil "vc-svn" "vc/vc-svn.el" (21652 2366 414435 -;;;;;; 564000)) +;;;### (autoloads nil "vc-svn" "vc/vc-svn.el" (21688 62278 418203 +;;;;;; 119000)) ;;; Generated autoloads from vc/vc-svn.el (defun vc-svn-registered (f) (let ((admin-dir (cond ((and (eq system-type 'windows-nt) @@ -29835,8 +29914,8 @@ For a description of possible values, see `vc-check-master-templates'.") ;;;*** -;;;### (autoloads nil "vera-mode" "progmodes/vera-mode.el" (21607 -;;;;;; 54478 800121 42000)) +;;;### (autoloads nil "vera-mode" "progmodes/vera-mode.el" (21670 +;;;;;; 32331 885635 586000)) ;;; Generated autoloads from progmodes/vera-mode.el (push (purecopy '(vera-mode 2 28)) package--builtin-versions) (add-to-list 'auto-mode-alist (cons (purecopy "\\.vr[hi]?\\'") 'vera-mode)) @@ -29895,7 +29974,7 @@ Key bindings: ;;;*** ;;;### (autoloads nil "verilog-mode" "progmodes/verilog-mode.el" -;;;;;; (21644 8251 830117 252000)) +;;;;;; (21670 32331 885635 586000)) ;;; Generated autoloads from progmodes/verilog-mode.el (autoload 'verilog-mode "verilog-mode" "\ @@ -30034,8 +30113,8 @@ Key bindings specific to `verilog-mode-map' are: ;;;*** -;;;### (autoloads nil "vhdl-mode" "progmodes/vhdl-mode.el" (21638 -;;;;;; 55900 442275 524000)) +;;;### (autoloads nil "vhdl-mode" "progmodes/vhdl-mode.el" (21670 +;;;;;; 32331 885635 586000)) ;;; Generated autoloads from progmodes/vhdl-mode.el (autoload 'vhdl-mode "vhdl-mode" "\ @@ -30589,8 +30668,8 @@ Key bindings: ;;;*** -;;;### (autoloads nil "viet-util" "language/viet-util.el" (21607 -;;;;;; 54478 300138 641000)) +;;;### (autoloads nil "viet-util" "language/viet-util.el" (21670 +;;;;;; 32331 385639 720000)) ;;; Generated autoloads from language/viet-util.el (autoload 'viet-encode-viscii-char "viet-util" "\ @@ -30634,7 +30713,7 @@ Convert Vietnamese characters of the current buffer to `VIQR' mnemonics. ;;;*** -;;;### (autoloads nil "view" "view.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "view" "view.el" (21670 32331 885635 586000)) ;;; Generated autoloads from view.el (defvar view-remove-frame-by-deleting t "\ @@ -30890,8 +30969,8 @@ Exit View mode and make the current buffer editable. ;;;*** -;;;### (autoloads nil "viper" "emulation/viper.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "viper" "emulation/viper.el" (21670 32330 885624 +;;;;;; 725000)) ;;; Generated autoloads from emulation/viper.el (push (purecopy '(viper 3 14 1)) package--builtin-versions) @@ -30908,8 +30987,8 @@ Turn on Viper emulation of Vi in Emacs. See Info node `(viper)Top'. ;;;*** -;;;### (autoloads nil "warnings" "emacs-lisp/warnings.el" (21607 -;;;;;; 54477 800124 118000)) +;;;### (autoloads nil "warnings" "emacs-lisp/warnings.el" (21670 +;;;;;; 32330 885624 725000)) ;;; Generated autoloads from emacs-lisp/warnings.el (defvar warning-prefix-function nil "\ @@ -30999,7 +31078,7 @@ this is equivalent to `display-warning', using ;;;*** -;;;### (autoloads nil "wdired" "wdired.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "wdired" "wdired.el" (21670 32331 885635 586000)) ;;; Generated autoloads from wdired.el (push (purecopy '(wdired 2 0)) package--builtin-versions) @@ -31017,8 +31096,8 @@ See `wdired-mode'. ;;;*** -;;;### (autoloads nil "webjump" "net/webjump.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "webjump" "net/webjump.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from net/webjump.el (autoload 'webjump "webjump" "\ @@ -31034,8 +31113,8 @@ Please submit bug reports and other feedback to the author, Neil W. Van Dyke ;;;*** -;;;### (autoloads nil "which-func" "progmodes/which-func.el" (21607 -;;;;;; 54478 800121 42000)) +;;;### (autoloads nil "which-func" "progmodes/which-func.el" (21670 +;;;;;; 32331 885635 586000)) ;;; Generated autoloads from progmodes/which-func.el (put 'which-func-format 'risky-local-variable t) (put 'which-func-current 'risky-local-variable t) @@ -31065,8 +31144,8 @@ in certain major modes. ;;;*** -;;;### (autoloads nil "whitespace" "whitespace.el" (21630 19673 940150 -;;;;;; 833000)) +;;;### (autoloads nil "whitespace" "whitespace.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from whitespace.el (push (purecopy '(whitespace 13 2 2)) package--builtin-versions) @@ -31434,8 +31513,8 @@ cleaning up these problems. ;;;*** -;;;### (autoloads nil "wid-browse" "wid-browse.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "wid-browse" "wid-browse.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from wid-browse.el (autoload 'widget-browse-at "wid-browse" "\ @@ -31463,8 +31542,8 @@ if ARG is omitted or nil. ;;;*** -;;;### (autoloads nil "wid-edit" "wid-edit.el" (21634 58813 900130 -;;;;;; 256000)) +;;;### (autoloads nil "wid-edit" "wid-edit.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from wid-edit.el (autoload 'widgetp "wid-edit" "\ @@ -31506,8 +31585,8 @@ Setup current buffer so editing string widgets works. ;;;*** -;;;### (autoloads nil "windmove" "windmove.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "windmove" "windmove.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from windmove.el (autoload 'windmove-left "windmove" "\ @@ -31559,7 +31638,7 @@ Default MODIFIER is 'shift. ;;;*** -;;;### (autoloads nil "winner" "winner.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "winner" "winner.el" (21670 32331 885635 586000)) ;;; Generated autoloads from winner.el (defvar winner-mode nil "\ @@ -31582,7 +31661,7 @@ the mode if ARG is omitted or nil, and toggle it if ARG is `toggle'. ;;;*** -;;;### (autoloads nil "woman" "woman.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "woman" "woman.el" (21670 32331 885635 586000)) ;;; Generated autoloads from woman.el (push (purecopy '(woman 0 551)) package--builtin-versions) @@ -31631,7 +31710,7 @@ Default bookmark handler for Woman buffers. ;;;*** -;;;### (autoloads nil "xml" "xml.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "xml" "xml.el" (21670 32331 885635 586000)) ;;; Generated autoloads from xml.el (autoload 'xml-parse-file "xml" "\ @@ -31687,8 +31766,8 @@ Both features can be combined by providing a cons cell ;;;*** -;;;### (autoloads nil "xmltok" "nxml/xmltok.el" (21607 54478 300138 -;;;;;; 641000)) +;;;### (autoloads nil "xmltok" "nxml/xmltok.el" (21670 32331 385639 +;;;;;; 720000)) ;;; Generated autoloads from nxml/xmltok.el (autoload 'xmltok-get-declared-encoding-position "xmltok" "\ @@ -31706,8 +31785,8 @@ If LIMIT is non-nil, then do not consider characters beyond LIMIT. ;;;*** -;;;### (autoloads nil "xref" "progmodes/xref.el" (21667 56163 185621 -;;;;;; 290000)) +;;;### (autoloads nil "xref" "progmodes/xref.el" (21696 56380 925320 +;;;;;; 624000)) ;;; Generated autoloads from progmodes/xref.el (autoload 'xref-pop-marker-stack "xref" "\ @@ -31715,6 +31794,11 @@ Pop back to where \\[xref-find-definitions] was last invoked. \(fn)" t nil) +(autoload 'xref-marker-stack-empty-p "xref" "\ +Return t if the marker stack is empty; nil otherwise. + +\(fn)" nil nil) + (autoload 'xref-find-definitions "xref" "\ Find the definition of the identifier at point. With prefix argument or when there's no identifier at point, @@ -31751,8 +31835,8 @@ The argument has the same meaning as in `apropos'. ;;;*** -;;;### (autoloads nil "xt-mouse" "xt-mouse.el" (21607 54478 800121 -;;;;;; 42000)) +;;;### (autoloads nil "xt-mouse" "xt-mouse.el" (21670 32331 885635 +;;;;;; 586000)) ;;; Generated autoloads from xt-mouse.el (defvar xterm-mouse-mode nil "\ @@ -31781,7 +31865,19 @@ down the SHIFT key while pressing the mouse button. ;;;*** -;;;### (autoloads nil "yenc" "gnus/yenc.el" (21607 54478 300138 641000)) +;;;### (autoloads nil "xwidget" "xwidget.el" (21710 2878 794621 967000)) +;;; Generated autoloads from xwidget.el + +(autoload 'xwidget-webkit-browse-url "xwidget" "\ +Ask xwidget-webkit to browse URL. +NEW-SESSION specifies whether to create a new xwidget-webkit session. URL +defaults to the string looking like a url around the cursor position. + +\(fn URL &optional NEW-SESSION)" t nil) + +;;;*** + +;;;### (autoloads nil "yenc" "gnus/yenc.el" (21670 32331 385639 720000)) ;;; Generated autoloads from gnus/yenc.el (autoload 'yenc-decode-region "yenc" "\ @@ -31796,7 +31892,7 @@ Extract file name from an yenc header. ;;;*** -;;;### (autoloads nil "zone" "play/zone.el" (21607 54478 800121 42000)) +;;;### (autoloads nil "zone" "play/zone.el" (21670 32331 385639 720000)) ;;; Generated autoloads from play/zone.el (autoload 'zone "zone" "\ @@ -31812,37 +31908,37 @@ Zone out, completely. ;;;;;; "calc/calc-fin.el" "calc/calc-forms.el" "calc/calc-frac.el" ;;;;;; "calc/calc-funcs.el" "calc/calc-graph.el" "calc/calc-help.el" ;;;;;; "calc/calc-incom.el" "calc/calc-keypd.el" "calc/calc-lang.el" -;;;;;; "calc/calc-loaddefs.el" "calc/calc-macs.el" "calc/calc-map.el" -;;;;;; "calc/calc-math.el" "calc/calc-menu.el" "calc/calc-misc.el" -;;;;;; "calc/calc-mode.el" "calc/calc-mtx.el" "calc/calc-nlfit.el" -;;;;;; "calc/calc-poly.el" "calc/calc-prog.el" "calc/calc-rewr.el" -;;;;;; "calc/calc-rules.el" "calc/calc-sel.el" "calc/calc-stat.el" -;;;;;; "calc/calc-store.el" "calc/calc-stuff.el" "calc/calc-trail.el" -;;;;;; "calc/calc-units.el" "calc/calc-vec.el" "calc/calc-yank.el" -;;;;;; "calc/calcalg2.el" "calc/calcalg3.el" "calc/calccomp.el" -;;;;;; "calc/calcsel2.el" "calendar/cal-bahai.el" "calendar/cal-coptic.el" -;;;;;; "calendar/cal-french.el" "calendar/cal-html.el" "calendar/cal-islam.el" -;;;;;; "calendar/cal-iso.el" "calendar/cal-julian.el" "calendar/cal-loaddefs.el" -;;;;;; "calendar/cal-mayan.el" "calendar/cal-menu.el" "calendar/cal-move.el" -;;;;;; "calendar/cal-persia.el" "calendar/cal-tex.el" "calendar/cal-x.el" -;;;;;; "calendar/diary-loaddefs.el" "calendar/hol-loaddefs.el" "cdl.el" -;;;;;; "cedet/cedet-cscope.el" "cedet/cedet-files.el" "cedet/cedet-global.el" -;;;;;; "cedet/cedet-idutils.el" "cedet/ede/auto.el" "cedet/ede/autoconf-edit.el" -;;;;;; "cedet/ede/base.el" "cedet/ede/config.el" "cedet/ede/cpp-root.el" -;;;;;; "cedet/ede/custom.el" "cedet/ede/detect.el" "cedet/ede/dired.el" -;;;;;; "cedet/ede/emacs.el" "cedet/ede/files.el" "cedet/ede/generic.el" -;;;;;; "cedet/ede/linux.el" "cedet/ede/loaddefs.el" "cedet/ede/locate.el" -;;;;;; "cedet/ede/make.el" "cedet/ede/makefile-edit.el" "cedet/ede/pconf.el" -;;;;;; "cedet/ede/pmake.el" "cedet/ede/proj-archive.el" "cedet/ede/proj-aux.el" -;;;;;; "cedet/ede/proj-comp.el" "cedet/ede/proj-elisp.el" "cedet/ede/proj-info.el" -;;;;;; "cedet/ede/proj-misc.el" "cedet/ede/proj-obj.el" "cedet/ede/proj-prog.el" -;;;;;; "cedet/ede/proj-scheme.el" "cedet/ede/proj-shared.el" "cedet/ede/proj.el" -;;;;;; "cedet/ede/project-am.el" "cedet/ede/shell.el" "cedet/ede/simple.el" -;;;;;; "cedet/ede/source.el" "cedet/ede/speedbar.el" "cedet/ede/srecode.el" -;;;;;; "cedet/ede/system.el" "cedet/ede/util.el" "cedet/semantic/analyze.el" -;;;;;; "cedet/semantic/analyze/complete.el" "cedet/semantic/analyze/debug.el" -;;;;;; "cedet/semantic/analyze/fcn.el" "cedet/semantic/analyze/refs.el" -;;;;;; "cedet/semantic/bovine.el" "cedet/semantic/bovine/c.el" "cedet/semantic/bovine/debug.el" +;;;;;; "calc/calc-macs.el" "calc/calc-map.el" "calc/calc-math.el" +;;;;;; "calc/calc-menu.el" "calc/calc-misc.el" "calc/calc-mode.el" +;;;;;; "calc/calc-mtx.el" "calc/calc-nlfit.el" "calc/calc-poly.el" +;;;;;; "calc/calc-prog.el" "calc/calc-rewr.el" "calc/calc-rules.el" +;;;;;; "calc/calc-sel.el" "calc/calc-stat.el" "calc/calc-store.el" +;;;;;; "calc/calc-stuff.el" "calc/calc-trail.el" "calc/calc-units.el" +;;;;;; "calc/calc-vec.el" "calc/calc-yank.el" "calc/calcalg2.el" +;;;;;; "calc/calcalg3.el" "calc/calccomp.el" "calc/calcsel2.el" +;;;;;; "calendar/cal-bahai.el" "calendar/cal-coptic.el" "calendar/cal-french.el" +;;;;;; "calendar/cal-html.el" "calendar/cal-islam.el" "calendar/cal-iso.el" +;;;;;; "calendar/cal-julian.el" "calendar/cal-loaddefs.el" "calendar/cal-mayan.el" +;;;;;; "calendar/cal-menu.el" "calendar/cal-move.el" "calendar/cal-persia.el" +;;;;;; "calendar/cal-tex.el" "calendar/cal-x.el" "calendar/diary-loaddefs.el" +;;;;;; "calendar/hol-loaddefs.el" "cdl.el" "cedet/cedet-cscope.el" +;;;;;; "cedet/cedet-files.el" "cedet/cedet-global.el" "cedet/cedet-idutils.el" +;;;;;; "cedet/ede/auto.el" "cedet/ede/autoconf-edit.el" "cedet/ede/base.el" +;;;;;; "cedet/ede/config.el" "cedet/ede/cpp-root.el" "cedet/ede/custom.el" +;;;;;; "cedet/ede/detect.el" "cedet/ede/dired.el" "cedet/ede/emacs.el" +;;;;;; "cedet/ede/files.el" "cedet/ede/generic.el" "cedet/ede/linux.el" +;;;;;; "cedet/ede/locate.el" "cedet/ede/make.el" "cedet/ede/makefile-edit.el" +;;;;;; "cedet/ede/pconf.el" "cedet/ede/pmake.el" "cedet/ede/proj-archive.el" +;;;;;; "cedet/ede/proj-aux.el" "cedet/ede/proj-comp.el" "cedet/ede/proj-elisp.el" +;;;;;; "cedet/ede/proj-info.el" "cedet/ede/proj-misc.el" "cedet/ede/proj-obj.el" +;;;;;; "cedet/ede/proj-prog.el" "cedet/ede/proj-scheme.el" "cedet/ede/proj-shared.el" +;;;;;; "cedet/ede/proj.el" "cedet/ede/project-am.el" "cedet/ede/shell.el" +;;;;;; "cedet/ede/simple.el" "cedet/ede/source.el" "cedet/ede/speedbar.el" +;;;;;; "cedet/ede/srecode.el" "cedet/ede/system.el" "cedet/ede/util.el" +;;;;;; "cedet/semantic/analyze.el" "cedet/semantic/analyze/complete.el" +;;;;;; "cedet/semantic/analyze/debug.el" "cedet/semantic/analyze/fcn.el" +;;;;;; "cedet/semantic/analyze/refs.el" "cedet/semantic/bovine.el" +;;;;;; "cedet/semantic/bovine/c.el" "cedet/semantic/bovine/debug.el" ;;;;;; "cedet/semantic/bovine/el.el" "cedet/semantic/bovine/gcc.el" ;;;;;; "cedet/semantic/bovine/make.el" "cedet/semantic/bovine/scm.el" ;;;;;; "cedet/semantic/chart.el" "cedet/semantic/complete.el" "cedet/semantic/ctxt.el" @@ -31857,13 +31953,13 @@ Zone out, completely. ;;;;;; "cedet/semantic/fw.el" "cedet/semantic/grammar-wy.el" "cedet/semantic/grammar.el" ;;;;;; "cedet/semantic/html.el" "cedet/semantic/ia-sb.el" "cedet/semantic/ia.el" ;;;;;; "cedet/semantic/idle.el" "cedet/semantic/imenu.el" "cedet/semantic/java.el" -;;;;;; "cedet/semantic/lex-spp.el" "cedet/semantic/lex.el" "cedet/semantic/loaddefs.el" -;;;;;; "cedet/semantic/mru-bookmark.el" "cedet/semantic/sb.el" "cedet/semantic/scope.el" -;;;;;; "cedet/semantic/senator.el" "cedet/semantic/sort.el" "cedet/semantic/symref.el" -;;;;;; "cedet/semantic/symref/cscope.el" "cedet/semantic/symref/filter.el" -;;;;;; "cedet/semantic/symref/global.el" "cedet/semantic/symref/grep.el" -;;;;;; "cedet/semantic/symref/idutils.el" "cedet/semantic/symref/list.el" -;;;;;; "cedet/semantic/tag-file.el" "cedet/semantic/tag-ls.el" "cedet/semantic/tag-write.el" +;;;;;; "cedet/semantic/lex-spp.el" "cedet/semantic/lex.el" "cedet/semantic/mru-bookmark.el" +;;;;;; "cedet/semantic/sb.el" "cedet/semantic/scope.el" "cedet/semantic/senator.el" +;;;;;; "cedet/semantic/sort.el" "cedet/semantic/symref.el" "cedet/semantic/symref/cscope.el" +;;;;;; "cedet/semantic/symref/filter.el" "cedet/semantic/symref/global.el" +;;;;;; "cedet/semantic/symref/grep.el" "cedet/semantic/symref/idutils.el" +;;;;;; "cedet/semantic/symref/list.el" "cedet/semantic/tag-file.el" +;;;;;; "cedet/semantic/tag-ls.el" "cedet/semantic/tag-write.el" ;;;;;; "cedet/semantic/tag.el" "cedet/semantic/texi.el" "cedet/semantic/util-modes.el" ;;;;;; "cedet/semantic/util.el" "cedet/semantic/wisent.el" "cedet/semantic/wisent/comp.el" ;;;;;; "cedet/semantic/wisent/java-tags.el" "cedet/semantic/wisent/javascript.el" @@ -31873,55 +31969,57 @@ Zone out, completely. ;;;;;; "cedet/srecode/el.el" "cedet/srecode/expandproto.el" "cedet/srecode/extract.el" ;;;;;; "cedet/srecode/fields.el" "cedet/srecode/filters.el" "cedet/srecode/find.el" ;;;;;; "cedet/srecode/getset.el" "cedet/srecode/insert.el" "cedet/srecode/java.el" -;;;;;; "cedet/srecode/loaddefs.el" "cedet/srecode/map.el" "cedet/srecode/mode.el" -;;;;;; "cedet/srecode/semantic.el" "cedet/srecode/srt.el" "cedet/srecode/table.el" -;;;;;; "cedet/srecode/template.el" "cedet/srecode/texi.el" "cus-dep.el" -;;;;;; "dframe.el" "dired-aux.el" "dired-x.el" "dom.el" "dos-fns.el" -;;;;;; "dos-vars.el" "dos-w32.el" "dynamic-setting.el" "emacs-lisp/avl-tree.el" -;;;;;; "emacs-lisp/bindat.el" "emacs-lisp/byte-opt.el" "emacs-lisp/cl-extra.el" -;;;;;; "emacs-lisp/cl-loaddefs.el" "emacs-lisp/cl-macs.el" "emacs-lisp/cl-seq.el" -;;;;;; "emacs-lisp/cl.el" "emacs-lisp/eieio-base.el" "emacs-lisp/eieio-custom.el" +;;;;;; "cedet/srecode/map.el" "cedet/srecode/mode.el" "cedet/srecode/semantic.el" +;;;;;; "cedet/srecode/srt.el" "cedet/srecode/table.el" "cedet/srecode/template.el" +;;;;;; "cedet/srecode/texi.el" "cus-dep.el" "dframe.el" "dired-aux.el" +;;;;;; "dired-x.el" "dom.el" "dos-fns.el" "dos-vars.el" "dos-w32.el" +;;;;;; "dynamic-setting.el" "emacs-lisp/avl-tree.el" "emacs-lisp/bindat.el" +;;;;;; "emacs-lisp/byte-opt.el" "emacs-lisp/cl-extra.el" "emacs-lisp/cl-generic.el" +;;;;;; "emacs-lisp/cl-macs.el" "emacs-lisp/cl-seq.el" "emacs-lisp/cl.el" +;;;;;; "emacs-lisp/eieio-base.el" "emacs-lisp/eieio-compat.el" "emacs-lisp/eieio-custom.el" ;;;;;; "emacs-lisp/eieio-datadebug.el" "emacs-lisp/eieio-opt.el" ;;;;;; "emacs-lisp/eieio-speedbar.el" "emacs-lisp/lisp-mnt.el" "emacs-lisp/package-x.el" ;;;;;; "emacs-lisp/smie.el" "emacs-lisp/subr-x.el" "emacs-lisp/tcover-ses.el" -;;;;;; "emacs-lisp/tcover-unsafep.el" "emulation/cua-gmrk.el" "emulation/edt-lk201.el" -;;;;;; "emulation/edt-mapper.el" "emulation/edt-pc.el" "emulation/edt-vt100.el" -;;;;;; "emulation/viper-cmd.el" "emulation/viper-ex.el" "emulation/viper-init.el" -;;;;;; "emulation/viper-keym.el" "emulation/viper-macs.el" "emulation/viper-mous.el" -;;;;;; "emulation/viper-util.el" "erc/erc-backend.el" "erc/erc-goodies.el" -;;;;;; "erc/erc-ibuffer.el" "erc/erc-lang.el" "eshell/em-alias.el" -;;;;;; "eshell/em-banner.el" "eshell/em-basic.el" "eshell/em-cmpl.el" -;;;;;; "eshell/em-dirs.el" "eshell/em-glob.el" "eshell/em-hist.el" -;;;;;; "eshell/em-ls.el" "eshell/em-pred.el" "eshell/em-prompt.el" -;;;;;; "eshell/em-rebind.el" "eshell/em-script.el" "eshell/em-smart.el" -;;;;;; "eshell/em-term.el" "eshell/em-tramp.el" "eshell/em-unix.el" -;;;;;; "eshell/em-xtra.el" "eshell/esh-arg.el" "eshell/esh-cmd.el" -;;;;;; "eshell/esh-ext.el" "eshell/esh-groups.el" "eshell/esh-io.el" -;;;;;; "eshell/esh-module.el" "eshell/esh-opt.el" "eshell/esh-proc.el" -;;;;;; "eshell/esh-util.el" "eshell/esh-var.el" "ezimage.el" "format-spec.el" -;;;;;; "fringe.el" "generic-x.el" "gnus/compface.el" "gnus/gnus-async.el" -;;;;;; "gnus/gnus-bcklg.el" "gnus/gnus-cite.el" "gnus/gnus-cloud.el" -;;;;;; "gnus/gnus-cus.el" "gnus/gnus-demon.el" "gnus/gnus-dup.el" -;;;;;; "gnus/gnus-eform.el" "gnus/gnus-ems.el" "gnus/gnus-icalendar.el" -;;;;;; "gnus/gnus-int.el" "gnus/gnus-logic.el" "gnus/gnus-mh.el" -;;;;;; "gnus/gnus-salt.el" "gnus/gnus-score.el" "gnus/gnus-srvr.el" -;;;;;; "gnus/gnus-topic.el" "gnus/gnus-undo.el" "gnus/gnus-util.el" -;;;;;; "gnus/gnus-uu.el" "gnus/gnus-vm.el" "gnus/gssapi.el" "gnus/ietf-drums.el" -;;;;;; "gnus/legacy-gnus-agent.el" "gnus/mail-parse.el" "gnus/mail-prsvr.el" -;;;;;; "gnus/mail-source.el" "gnus/mailcap.el" "gnus/messcompat.el" -;;;;;; "gnus/mm-archive.el" "gnus/mm-bodies.el" "gnus/mm-decode.el" -;;;;;; "gnus/mm-util.el" "gnus/mm-view.el" "gnus/mml-sec.el" "gnus/mml-smime.el" -;;;;;; "gnus/nnagent.el" "gnus/nnbabyl.el" "gnus/nndir.el" "gnus/nndraft.el" -;;;;;; "gnus/nneething.el" "gnus/nngateway.el" "gnus/nnheader.el" -;;;;;; "gnus/nnimap.el" "gnus/nnir.el" "gnus/nnmail.el" "gnus/nnmaildir.el" -;;;;;; "gnus/nnmairix.el" "gnus/nnmbox.el" "gnus/nnmh.el" "gnus/nnnil.el" -;;;;;; "gnus/nnoo.el" "gnus/nnregistry.el" "gnus/nnrss.el" "gnus/nnspool.el" -;;;;;; "gnus/nntp.el" "gnus/nnvirtual.el" "gnus/nnweb.el" "gnus/registry.el" -;;;;;; "gnus/rfc1843.el" "gnus/rfc2045.el" "gnus/rfc2047.el" "gnus/rfc2104.el" -;;;;;; "gnus/rfc2231.el" "gnus/rtree.el" "gnus/sieve-manage.el" -;;;;;; "gnus/smime.el" "gnus/spam-stat.el" "gnus/spam-wash.el" "hex-util.el" -;;;;;; "hfy-cmap.el" "ibuf-ext.el" "international/cp51932.el" "international/eucjp-ms.el" -;;;;;; "international/fontset.el" "international/iso-ascii.el" "international/ja-dic-cnv.el" +;;;;;; "emacs-lisp/tcover-unsafep.el" "emacs-parallel/parallel-remote.el" +;;;;;; "emacs-parallel/parallel-xwidget.el" "emacs-parallel/parallel.el" +;;;;;; "emulation/cua-gmrk.el" "emulation/edt-lk201.el" "emulation/edt-mapper.el" +;;;;;; "emulation/edt-pc.el" "emulation/edt-vt100.el" "emulation/viper-cmd.el" +;;;;;; "emulation/viper-ex.el" "emulation/viper-init.el" "emulation/viper-keym.el" +;;;;;; "emulation/viper-macs.el" "emulation/viper-mous.el" "emulation/viper-util.el" +;;;;;; "erc/erc-backend.el" "erc/erc-goodies.el" "erc/erc-ibuffer.el" +;;;;;; "erc/erc-lang.el" "eshell/em-alias.el" "eshell/em-banner.el" +;;;;;; "eshell/em-basic.el" "eshell/em-cmpl.el" "eshell/em-dirs.el" +;;;;;; "eshell/em-glob.el" "eshell/em-hist.el" "eshell/em-ls.el" +;;;;;; "eshell/em-pred.el" "eshell/em-prompt.el" "eshell/em-rebind.el" +;;;;;; "eshell/em-script.el" "eshell/em-smart.el" "eshell/em-term.el" +;;;;;; "eshell/em-tramp.el" "eshell/em-unix.el" "eshell/em-xtra.el" +;;;;;; "eshell/esh-arg.el" "eshell/esh-cmd.el" "eshell/esh-ext.el" +;;;;;; "eshell/esh-io.el" "eshell/esh-module.el" "eshell/esh-opt.el" +;;;;;; "eshell/esh-proc.el" "eshell/esh-util.el" "eshell/esh-var.el" +;;;;;; "ezimage.el" "format-spec.el" "fringe.el" "generic-x.el" +;;;;;; "gnus/compface.el" "gnus/gnus-async.el" "gnus/gnus-bcklg.el" +;;;;;; "gnus/gnus-cite.el" "gnus/gnus-cloud.el" "gnus/gnus-cus.el" +;;;;;; "gnus/gnus-demon.el" "gnus/gnus-dup.el" "gnus/gnus-eform.el" +;;;;;; "gnus/gnus-ems.el" "gnus/gnus-icalendar.el" "gnus/gnus-int.el" +;;;;;; "gnus/gnus-logic.el" "gnus/gnus-mh.el" "gnus/gnus-salt.el" +;;;;;; "gnus/gnus-score.el" "gnus/gnus-srvr.el" "gnus/gnus-topic.el" +;;;;;; "gnus/gnus-undo.el" "gnus/gnus-util.el" "gnus/gnus-uu.el" +;;;;;; "gnus/gnus-vm.el" "gnus/gssapi.el" "gnus/ietf-drums.el" "gnus/legacy-gnus-agent.el" +;;;;;; "gnus/mail-parse.el" "gnus/mail-prsvr.el" "gnus/mail-source.el" +;;;;;; "gnus/mailcap.el" "gnus/messcompat.el" "gnus/mm-archive.el" +;;;;;; "gnus/mm-bodies.el" "gnus/mm-decode.el" "gnus/mm-util.el" +;;;;;; "gnus/mm-view.el" "gnus/mml-sec.el" "gnus/mml-smime.el" "gnus/nnagent.el" +;;;;;; "gnus/nnbabyl.el" "gnus/nndir.el" "gnus/nndraft.el" "gnus/nneething.el" +;;;;;; "gnus/nngateway.el" "gnus/nnheader.el" "gnus/nnimap.el" "gnus/nnir.el" +;;;;;; "gnus/nnmail.el" "gnus/nnmaildir.el" "gnus/nnmairix.el" "gnus/nnmbox.el" +;;;;;; "gnus/nnmh.el" "gnus/nnnil.el" "gnus/nnoo.el" "gnus/nnregistry.el" +;;;;;; "gnus/nnrss.el" "gnus/nnspool.el" "gnus/nntp.el" "gnus/nnvirtual.el" +;;;;;; "gnus/nnweb.el" "gnus/registry.el" "gnus/rfc1843.el" "gnus/rfc2045.el" +;;;;;; "gnus/rfc2047.el" "gnus/rfc2104.el" "gnus/rfc2231.el" "gnus/rtree.el" +;;;;;; "gnus/sieve-manage.el" "gnus/smime.el" "gnus/spam-stat.el" +;;;;;; "gnus/spam-wash.el" "hex-util.el" "hfy-cmap.el" "ibuf-ext.el" +;;;;;; "international/cp51932.el" "international/eucjp-ms.el" "international/fontset.el" +;;;;;; "international/iso-ascii.el" "international/ja-dic-cnv.el" ;;;;;; "international/ja-dic-utl.el" "international/ogonek.el" "kermit.el" ;;;;;; "language/hanja-util.el" "language/thai-word.el" "ldefs-boot.el" ;;;;;; "leim/quail/arabic.el" "leim/quail/croatian.el" "leim/quail/cyril-jis.el" @@ -31982,14 +32080,14 @@ Zone out, completely. ;;;;;; "org/org-faces.el" "org/org-feed.el" "org/org-footnote.el" ;;;;;; "org/org-gnus.el" "org/org-habit.el" "org/org-id.el" "org/org-indent.el" ;;;;;; "org/org-info.el" "org/org-inlinetask.el" "org/org-install.el" -;;;;;; "org/org-irc.el" "org/org-list.el" "org/org-loaddefs.el" -;;;;;; "org/org-macro.el" "org/org-mhe.el" "org/org-mobile.el" "org/org-mouse.el" -;;;;;; "org/org-pcomplete.el" "org/org-plot.el" "org/org-protocol.el" -;;;;;; "org/org-rmail.el" "org/org-src.el" "org/org-table.el" "org/org-timer.el" -;;;;;; "org/org-w3m.el" "org/ox-ascii.el" "org/ox-beamer.el" "org/ox-html.el" -;;;;;; "org/ox-icalendar.el" "org/ox-latex.el" "org/ox-man.el" "org/ox-md.el" -;;;;;; "org/ox-odt.el" "org/ox-org.el" "org/ox-publish.el" "org/ox-texinfo.el" -;;;;;; "org/ox.el" "play/gametree.el" "progmodes/ada-prj.el" "progmodes/cc-align.el" +;;;;;; "org/org-irc.el" "org/org-list.el" "org/org-macro.el" "org/org-mhe.el" +;;;;;; "org/org-mobile.el" "org/org-mouse.el" "org/org-pcomplete.el" +;;;;;; "org/org-plot.el" "org/org-protocol.el" "org/org-rmail.el" +;;;;;; "org/org-src.el" "org/org-table.el" "org/org-timer.el" "org/org-w3m.el" +;;;;;; "org/ox-ascii.el" "org/ox-beamer.el" "org/ox-html.el" "org/ox-icalendar.el" +;;;;;; "org/ox-latex.el" "org/ox-man.el" "org/ox-md.el" "org/ox-odt.el" +;;;;;; "org/ox-org.el" "org/ox-publish.el" "org/ox-texinfo.el" "org/ox.el" +;;;;;; "play/gametree.el" "progmodes/ada-prj.el" "progmodes/cc-align.el" ;;;;;; "progmodes/cc-awk.el" "progmodes/cc-bytecomp.el" "progmodes/cc-cmds.el" ;;;;;; "progmodes/cc-defs.el" "progmodes/cc-fonts.el" "progmodes/cc-langs.el" ;;;;;; "progmodes/cc-menus.el" "progmodes/ebnf-abn.el" "progmodes/ebnf-bnf.el" @@ -32012,8 +32110,8 @@ Zone out, completely. ;;;;;; "vc/ediff-ptch.el" "vc/ediff-vers.el" "vc/ediff-wind.el" ;;;;;; "vc/pcvs-info.el" "vc/pcvs-parse.el" "vc/pcvs-util.el" "vc/vc-dav.el" ;;;;;; "vc/vc-filewise.el" "vcursor.el" "vt-control.el" "vt100-led.el" -;;;;;; "w32-fns.el" "w32-vars.el" "x-dnd.el") (21669 11479 568273 -;;;;;; 504000)) +;;;;;; "w32-fns.el" "w32-vars.el" "x-dnd.el") (21710 3276 42011 +;;;;;; 943000)) ;;;*** commit 9fe732a02afbe0b3d4a85d2bcae687900ab881f7 Author: Joakim Verona Date: Sun Feb 1 01:30:02 2015 +0100 Better changelog for xwidgets diff --git a/ChangeLog b/ChangeLog index d7fd76c..7c2e53e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2015-02-01 Joakim Verona + Support for the new Xwidget feature. + * configure.ac: + 2015-01-28 Paul Eggert Merge from gnulib and try to repair bad merge diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0a3c7c9..b9570ba 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2015-02-01 Joakim Verona + Support for the new Xwidget feature. + * xwidget.el: + +2015-02-01 Grégoire Jadi + Support for testing xwidgets + * emacs-parallel/parallell-remote.el, emacs-parallel/parallell-xwidget.el: + * emacs-parallel/parallell.el: + 2015-01-31 Stefan Monnier * emacs-lisp/eieio.el (defclass): Use new eieio-make-class-predicate diff --git a/src/ChangeLog b/src/ChangeLog index c103ca3..5635e1b 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -8,7 +8,7 @@ Support for testing xwidgets * xwidget-test-manual.el: -2015-02-01 Gregoire Jadi +2015-02-01 Grégoire Jadi Support for testing xwidgets * parallell-remote.el, parallell-xwidget.el, parallell.el: * xwidget-tests.el: diff --git a/test/ChangeLog b/test/ChangeLog index a9834cc..2817881 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,11 @@ +2015-02-01 Joakim Verona + Support for testing xwidgets + * xwidget-test-manual.el: + +2015-02-01 Grégoire Jadi + Support for testing xwidgets + * automated/xwidget-tests.el: + 2015-01-31 Stefan Monnier * automated/eieio-tests.el (eieio-test-23-inheritance-check): Simplify. commit d75b60ce5f3dee0938a5621270d5bc2d533dda18 Author: Joakim Verona Date: Sun Feb 1 01:16:40 2015 +0100 NEWS entry and Changelog xwidgets diff --git a/etc/NEWS b/etc/NEWS index 4b0a268..4371a01 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -65,7 +65,9 @@ so if you want to use it, you can always take a copy from an older Emacs. * Changes in Emacs 25.1 - +** Xwidgets : A new feature for embedding native widgets +inside Emacs buffers. If you have gtk3 and webkit-devel installed, +you can try the embedded webkit browser with m-x xwidget-webkit-browse-url. ** `package-install-from-buffer' and `package-install-file' work on directories. This follows the same rules as installing from a .tar file, except the -pkg file is optional. diff --git a/src/ChangeLog b/src/ChangeLog index 9e564ea..c103ca3 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,20 @@ +2015-02-01 Joakim Verona + Support for the new Xwidget feature. + * window.c, Makefile.in, buffer.c, dispextern.h, dispnew.c, emacs.c: + * emacsgtkfixed.c, emacsgtkfixed.h, keyboard.c, lisp.h, print.c: + * termhooks.h, window.c, xdisp.c, xterm.c + New files for xwidgets: + * xwidget.c, xwidget.h: + Support for testing xwidgets + * xwidget-test-manual.el: + +2015-02-01 Gregoire Jadi + Support for testing xwidgets + * parallell-remote.el, parallell-xwidget.el, parallell.el: + * xwidget-tests.el: + various improvements to xwidgets: + * xwidgets.c: + 2015-01-31 Eli Zaretskii * coding.c (raw_text_coding_system_p): New function. commit 69815dfe3704f8a8c733843f1fd04546cbb0f4d0 Merge: 4edad42 a2c32b0 Author: Joakim Verona Date: Sun Feb 1 00:37:46 2015 +0100 Merge branch 'master' into xwidget commit 4edad429cafb2f0b1fda028be58367286ab04f1c Author: Joakim Verona Date: Sat Jan 31 21:09:11 2015 +0100 Fix compile warnings xwidget.el diff --git a/lisp/xwidget.el b/lisp/xwidget.el index 4471b12..de3235d 100644 --- a/lisp/xwidget.el +++ b/lisp/xwidget.el @@ -1,4 +1,4 @@ -p;;; xwidget.el --- api functions for xwidgets -*- lexical-binding: t -*- +;;; xwidget.el --- api functions for xwidgets -*- lexical-binding: t -*- ;; see xwidget.c for more api functions @@ -13,6 +13,7 @@ p;;; xwidget.el --- api functions for xwidgets -*- lexical-binding: t -*- (eval-when-compile (require 'cl)) (require 'reporter) +(require 'bookmark) (defcustom xwidget-webkit-scroll-behaviour 'native "Scroll behaviour of the webkit instance. @@ -315,14 +316,14 @@ Argument STR string." (xwidget-webkit-begin-edit-textarea xww field-value)))))) (xwidget-webkit-execute-script xw (format "findactiveelement(document).value='%s'" str))) - +(defvar xwidget-xwbl) (defun xwidget-webkit-begin-edit-textarea (xw text) "Start editing of a webkit text area. XW is the xwidget identifier, TEXT is retrieved from the webkit." (switch-to-buffer (generate-new-buffer "textarea")) - (set (make-local-variable 'xwbl) xw) + (set (make-local-variable 'xwidget-xwbl) xw) (insert text)) (defun xwidget-webkit-end-edit-textarea () @@ -331,7 +332,7 @@ XW is the xwidget identifier, TEXT is retrieved from the webkit." (goto-char (point-min)) (while (search-forward "\n" nil t) (replace-match "\\n" nil t)) - (xwidget-webkit-execute-script xwbl (format "findactiveelement(document).value='%s'" + (xwidget-webkit-execute-script xwidget-xwbl (format "findactiveelement(document).value='%s'" (buffer-substring (point-min) (point-max)))) ;;TODO convert linefeed to \n ) commit 3fd802081f292b0a3a2fce8394067bbd9ce88f67 Author: Joakim Verona Date: Sat Jan 31 21:07:07 2015 +0100 Fix for crash when displaying xwidget in a tty Xwidgets are now handled the same as images in the tty case, they are ignored. diff --git a/src/xdisp.c b/src/xdisp.c index 5da611e..d868633 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -5135,7 +5135,8 @@ handle_single_display_spec (struct it *it, Lisp_Object spec, Lisp_Object object, #endif /* not HAVE_WINDOW_SYSTEM */ || (CONSP (value) && EQ (XCAR (value), Qspace)) #ifdef HAVE_XWIDGETS - || valid_xwidget_spec_p(value) + || ((it ? FRAME_WINDOW_P (it->f) : frame_window_p) + && valid_xwidget_spec_p(value)) #endif ); commit a2c32b0cfc9f6d3410e2832d8ea0d4f1df576d1e Author: Eli Zaretskii Date: Sat Jan 31 20:48:53 2015 +0200 Avoid aborts when keyboard-coding-system is raw-text (Bug#19532) src/coding.c (raw_text_coding_system_p): New function. src/keyboard.c (read_decoded_event_from_main_queue): Use it when the keyboard coding-system is 'raw-text'. src/coding.h (raw_text_coding_system_p): Add prototype. diff --git a/src/ChangeLog b/src/ChangeLog index 6208738..9e564ea 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,12 @@ +2015-01-31 Eli Zaretskii + + * coding.c (raw_text_coding_system_p): New function. + + * keyboard.c (read_decoded_event_from_main_queue): Use it when the + keyboard coding-system is 'raw-text'. (Bug#19532) + + * coding.h (raw_text_coding_system_p): Add prototype. + 2015-01-31 Andreas Schwab * Makefile.in (gl-stamp): Generate globals.h through the use of diff --git a/src/coding.c b/src/coding.c index a7128ee..1a0e1279 100644 --- a/src/coding.c +++ b/src/coding.c @@ -5979,6 +5979,15 @@ raw_text_coding_system (Lisp_Object coding_system) : AREF (raw_text_eol_type, 2)); } +/* Return true if CODING corresponds to raw-text coding-system. */ + +bool +raw_text_coding_system_p (struct coding_system *coding) +{ + return (coding->decoder == decode_coding_raw_text + && coding->encoder == encode_coding_raw_text) ? true : false; +} + /* If CODING_SYSTEM doesn't specify end-of-line format, return one of the subsidiary that has the same eol-spec as PARENT (if it is not diff --git a/src/coding.h b/src/coding.h index d49d786..c73a9cc 100644 --- a/src/coding.h +++ b/src/coding.h @@ -705,6 +705,7 @@ extern Lisp_Object code_convert_string_norecord (Lisp_Object, Lisp_Object, extern Lisp_Object encode_file_name (Lisp_Object); extern Lisp_Object decode_file_name (Lisp_Object); extern Lisp_Object raw_text_coding_system (Lisp_Object); +extern bool raw_text_coding_system_p (struct coding_system *); extern Lisp_Object coding_inherit_eol_type (Lisp_Object, Lisp_Object); extern Lisp_Object complement_process_encoding_system (Lisp_Object); diff --git a/src/keyboard.c b/src/keyboard.c index 7718f8e..1176d70 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -2288,30 +2288,41 @@ read_decoded_event_from_main_queue (struct timespec *end_time, { /* An encoded byte sequence, let's try to decode it. */ struct coding_system *coding = TERMINAL_KEYBOARD_CODING (terminal); - unsigned char src[MAX_ENCODED_BYTES]; - unsigned char dest[MAX_ENCODED_BYTES * MAX_MULTIBYTE_LENGTH]; - int i; - for (i = 0; i < n; i++) - src[i] = XINT (events[i]); - if (meta_key != 2) - for (i = 0; i < n; i++) - src[i] &= ~0x80; - coding->destination = dest; - coding->dst_bytes = sizeof dest; - decode_coding_c_string (coding, src, n, Qnil); - eassert (coding->produced_char <= n); - if (coding->produced_char == 0) - { /* The encoded sequence is incomplete. */ - if (n < MAX_ENCODED_BYTES) /* Avoid buffer overflow. */ - continue; /* Read on! */ + + if (raw_text_coding_system_p (coding)) + { + int i; + if (meta_key != 2) + for (i = 0; i < n; i++) + events[i] = make_number (XINT (events[i]) & ~0x80); } else { - const unsigned char *p = coding->destination; - eassert (coding->carryover_bytes == 0); - n = 0; - while (n < coding->produced_char) - events[n++] = make_number (STRING_CHAR_ADVANCE (p)); + unsigned char src[MAX_ENCODED_BYTES]; + unsigned char dest[MAX_ENCODED_BYTES * MAX_MULTIBYTE_LENGTH]; + int i; + for (i = 0; i < n; i++) + src[i] = XINT (events[i]); + if (meta_key != 2) + for (i = 0; i < n; i++) + src[i] &= ~0x80; + coding->destination = dest; + coding->dst_bytes = sizeof dest; + decode_coding_c_string (coding, src, n, Qnil); + eassert (coding->produced_char <= n); + if (coding->produced_char == 0) + { /* The encoded sequence is incomplete. */ + if (n < MAX_ENCODED_BYTES) /* Avoid buffer overflow. */ + continue; /* Read on! */ + } + else + { + const unsigned char *p = coding->destination; + eassert (coding->carryover_bytes == 0); + n = 0; + while (n < coding->produced_char) + events[n++] = make_number (STRING_CHAR_ADVANCE (p)); + } } } /* Now `events' should hold decoded events. commit 080b9b56c99cfdfa286fb6b8c3099626688dc8ae Author: Andreas Schwab Date: Sat Jan 31 09:38:07 2015 +0100 Don't reimplement move-if-change badly * Makefile.in (gl-stamp): Generate globals.h through the use of move-if-change. (globals.h): Replace with empty command. diff --git a/src/ChangeLog b/src/ChangeLog index 61d1067..6208738 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2015-01-31 Andreas Schwab + + * Makefile.in (gl-stamp): Generate globals.h through the use of + move-if-change. + (globals.h): Replace with empty command. + 2015-01-31 Eli Zaretskii * keyboard.c (kbd_buffer_store_event_hold): Ignore FOCUS_OUT_EVENT diff --git a/src/Makefile.in b/src/Makefile.in index 2ac34f5..32615c8 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -494,11 +494,17 @@ buildobj.h: Makefile GLOBAL_SOURCES = $(base_obj:.o=.c) $(NS_OBJC_OBJ:.o=.m) +AM_V_GLOBALS = $(am__v_GLOBALS_@AM_V@) +am__v_GLOBALS_ = $(am__v_GLOBALS_@AM_DEFAULT_V@) +am__v_GLOBALS_0 = @echo " GEN " globals.h; +am__v_GLOBALS_1 = + gl-stamp: $(libsrc)/make-docfile$(EXEEXT) $(GLOBAL_SOURCES) - $(AM_V_GEN)$(libsrc)/make-docfile -d $(srcdir) -g $(obj) >$@ + $(AM_V_GLOBALS)$(libsrc)/make-docfile -d $(srcdir) -g $(obj) > globals.tmp + $(AM_V_at)$(top_srcdir)/build-aux/move-if-change globals.tmp globals.h + $(AM_V_at)echo timestamp > $@ -globals.h: gl-stamp - $(AM_V_GEN)cmp $< $@ >/dev/null || cp $< $@ +globals.h: gl-stamp; @true $(ALLOBJS): globals.h commit eaea02c71ae15d86bb83518796775b6c3c77b71e Author: Eli Zaretskii Date: Sat Jan 31 10:35:26 2015 +0200 Fix while-no-input loops (Bug#19547) src/keyboard.c (kbd_buffer_store_event_hold): Ignore FOCUS_OUT_EVENT and ICONIFY_EVENT for the purposes of breaking while-no-input loops. diff --git a/src/ChangeLog b/src/ChangeLog index fd21130..61d1067 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,9 @@ 2015-01-31 Eli Zaretskii + * keyboard.c (kbd_buffer_store_event_hold): Ignore FOCUS_OUT_EVENT + and ICONIFY_EVENT for the purposes of breaking while-no-input + loops. (Bug#19547) + * dired.c (read_dirent): Correct the "MSDOS hacks" hack: the special code for errno = ENOENT or EACCES is needed for WINDOWSNT, not for MSDOS. diff --git a/src/keyboard.c b/src/keyboard.c index 383c109..7718f8e 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -3639,7 +3639,9 @@ kbd_buffer_store_event_hold (register struct input_event *event, as input, set quit-flag to cause an interrupt. */ if (!NILP (Vthrow_on_input) && event->kind != FOCUS_IN_EVENT + && event->kind != FOCUS_OUT_EVENT && event->kind != HELP_EVENT + && event->kind != ICONIFY_EVENT && event->kind != DEICONIFY_EVENT) { Vquit_flag = Vthrow_on_input; commit 376ba20ac1f516361fc9c2b0267fbc5c131e4822 Author: Eli Zaretskii Date: Sat Jan 31 10:05:10 2015 +0200 Fix last commit, which confused WINDOWSNT with MSDOS. src/dired.c (read_dirent): Correct the "MSDOS hacks" hack: the special code for errno = ENOENT or EACCES is needed for WINDOWSNT, not for MSDOS. diff --git a/src/ChangeLog b/src/ChangeLog index ab1a748..fd21130 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2015-01-31 Eli Zaretskii + + * dired.c (read_dirent): Correct the "MSDOS hacks" hack: the + special code for errno = ENOENT or EACCES is needed for WINDOWSNT, + not for MSDOS. + 2015-01-31 Paul Eggert Simplify read_dirent's MSDOS hacks diff --git a/src/dired.c b/src/dired.c index 931279a..5038e04 100644 --- a/src/dired.c +++ b/src/dired.c @@ -137,7 +137,7 @@ read_dirent (DIR *dir, Lisp_Object dirname) return dp; if (! (errno == EAGAIN || errno == EINTR)) { -#ifdef MSDOS +#ifdef WINDOWSNT /* The MS-Windows implementation of 'opendir' doesn't actually open a directory until the first call to 'readdir'. If 'readdir' fails to open the directory, it commit 512cdb9f2ba6dde0c24bfed13d095ea37e38a6ec Author: Paul Eggert Date: Fri Jan 30 23:11:55 2015 -0800 Simplify read_dirent's MSDOS hacks * dired.c (read_dirent): Simplify by removing the need for the DIR_ENTRY argument. All callers changed. This separates the MS-DOS idiosyncrasies better from the rest of the code. diff --git a/src/ChangeLog b/src/ChangeLog index 2130312..ab1a748 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2015-01-31 Paul Eggert + + Simplify read_dirent's MSDOS hacks + * dired.c (read_dirent): Simplify by removing the need for the + DIR_ENTRY argument. All callers changed. This separates the + MS-DOS idiosyncrasies better from the rest of the code. + 2015-01-30 Eli Zaretskii * dired.c (read_dirent): Accept an additional argument diff --git a/src/dired.c b/src/dired.c index 56d6de2..931279a 100644 --- a/src/dired.c +++ b/src/dired.c @@ -124,11 +124,10 @@ directory_files_internal_unwind (void *dh) /* Return the next directory entry from DIR; DIR's name is DIRNAME. If there are no more directory entries, return a null pointer. - Signal any unrecoverable errors. FIRST_ENTRY true means this is - the first call after open_directory. */ + Signal any unrecoverable errors. */ static struct dirent * -read_dirent (DIR *dir, Lisp_Object dirname, bool first_entry) +read_dirent (DIR *dir, Lisp_Object dirname) { while (true) { @@ -138,14 +137,15 @@ read_dirent (DIR *dir, Lisp_Object dirname, bool first_entry) return dp; if (! (errno == EAGAIN || errno == EINTR)) { +#ifdef MSDOS /* The MS-Windows implementation of 'opendir' doesn't actually open a directory until the first call to 'readdir'. If 'readdir' fails to open the directory, it sets errno to ENOENT or EACCES, see w32.c. */ - if (first_entry && (errno == ENOENT || errno == EACCES)) + if (errno == ENOENT || errno == EACCES) report_file_error ("Opening directory", dirname); - else - report_file_error ("Reading directory", dirname); +#endif + report_file_error ("Reading directory", dirname); } QUIT; } @@ -249,8 +249,7 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full, needsep = 1; /* Loop reading directory entries. */ - bool first_entry = true; - for (struct dirent *dp; (dp = read_dirent (d, directory, first_entry)); ) + for (struct dirent *dp; (dp = read_dirent (d, directory)); ) { ptrdiff_t len = dirent_namelen (dp); Lisp_Object name = make_unibyte_string (dp->d_name, len); @@ -258,8 +257,6 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full, struct gcpro gcpro1, gcpro2; GCPRO2 (finalname, name); - first_entry = false; - /* Note: DECODE_FILE can GC; it should protect its argument, though. */ name = DECODE_FILE (name); @@ -499,13 +496,11 @@ file_name_completion (Lisp_Object file, Lisp_Object dirname, bool all_flag, record_unwind_protect_ptr (directory_files_internal_unwind, d); /* Loop reading directory entries. */ - bool first_entry = true; - for (struct dirent *dp; (dp = read_dirent (d, dirname, first_entry)); ) + for (struct dirent *dp; (dp = read_dirent (d, dirname)); ) { ptrdiff_t len = dirent_namelen (dp); bool canexclude = 0; - first_entry = false; QUIT; if (len < SCHARS (encoded_file) || (scmp (dp->d_name, SSDATA (encoded_file), commit e0be229d5f5e790338a71617a1c244029da4c75b Author: Stefan Monnier Date: Sat Jan 31 00:48:14 2015 -0500 EIEIO: Simplify help hyperlinks; Try and reduce hardcoding in .elc * lisp/emacs-lisp/cl-generic.el (cl--generic-search-method): Fix regexp. * lisp/emacs-lisp/eieio-core.el (eieio--check-type): Remove. Use cl-check-type everywhere instead. (eieio-class-object): Remove, use find-class instead when needed. (class-p): Don't inline. (eieio-object-p): Check more thoroughly, so we don't treat cl-structs, such as eieio classes, as objects. Don't inline. (object-p): Mark as obsolete. (eieio-defclass-autoload, eieio-defclass-internal, eieio-oref) (eieio--generic-tagcode): Avoid `class-p'. (eieio-make-class-predicate, eieio-make-child-predicate): New functions. (eieio-defclass-internal): Use current-load-list rather than `class-location'. * lisp/emacs-lisp/eieio-opt.el (eieio-help-class, eieio-help-constructor): Use find-lisp-object-file-name, help-fns-short-filename and new calling convention for eieio-class-def. (eieio-build-class-list): Remove function, unused. (eieio-method-def): Remove button type, unused. (eieio-class-def): Inherit from help-function-def. (eieio--defclass-regexp): New constant. (find-function-regexp-alist): Use it. (eieio--specializers-apply-to-class-p): Handle eieio--static as well. (eieio-help-find-method-definition, eieio-help-find-class-definition): Remove functions. * lisp/emacs-lisp/eieio.el (defclass): Use new eieio-make-class-predicate and eieio-make-child-predicate. (eieio-class-parents): Use eieio--class-object. (slot-boundp, find-class, eieio-override-prin1): Avoid class-p. (slot-exists-p): Use find-class. * test/automated/eieio-tests.el (eieio-test-23-inheritance-check): Simplify. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 3724388..0a3c7c9 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,38 @@ +2015-01-31 Stefan Monnier + + * emacs-lisp/eieio.el (defclass): Use new eieio-make-class-predicate + and eieio-make-child-predicate. + (eieio-class-parents): Use eieio--class-object. + (slot-boundp, find-class, eieio-override-prin1): Avoid class-p. + (slot-exists-p): Use find-class. + + * emacs-lisp/eieio-opt.el (eieio-help-class, eieio-help-constructor): + Use find-lisp-object-file-name, help-fns-short-filename and new calling + convention for eieio-class-def. + (eieio-build-class-list): Remove function, unused. + (eieio-method-def): Remove button type, unused. + (eieio-class-def): Inherit from help-function-def. + (eieio--defclass-regexp): New constant. + (find-function-regexp-alist): Use it. + (eieio--specializers-apply-to-class-p): Handle eieio--static as well. + (eieio-help-find-method-definition, eieio-help-find-class-definition): + Remove functions. + + * emacs-lisp/eieio-core.el (eieio--check-type): Remove. + Use cl-check-type everywhere instead. + (eieio-class-object): Remove, use find-class instead when needed. + (class-p): Don't inline. + (eieio-object-p): Check more thoroughly, so we don't treat cl-structs, + such as eieio classes, as objects. Don't inline. + (object-p): Mark as obsolete. + (eieio-defclass-autoload, eieio-defclass-internal, eieio-oref) + (eieio--generic-tagcode): Avoid `class-p'. + (eieio-make-class-predicate, eieio-make-child-predicate): New functions. + (eieio-defclass-internal): Use current-load-list rather than + `class-location'. + + * emacs-lisp/cl-generic.el (cl--generic-search-method): Fix regexp. + 2015-01-30 Stefan Monnier * emacs-lisp/backquote.el (backquote-delay-process): Don't reuse `s' diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el index 3e34ab6..72ec8ec 100644 --- a/lisp/emacs-lisp/cl-generic.el +++ b/lisp/emacs-lisp/cl-generic.el @@ -635,7 +635,8 @@ Can only be used from within the lexical body of a primary or around method." (defun cl--generic-search-method (met-name) (let ((base-re (concat "(\\(?:cl-\\)?defmethod[ \t]+" - (regexp-quote (format "%s\\_>" (car met-name)))))) + (regexp-quote (format "%s" (car met-name))) + "\\_>"))) (or (re-search-forward (concat base-re "[^&\"\n]*" diff --git a/lisp/emacs-lisp/eieio-base.el b/lisp/emacs-lisp/eieio-base.el index feb0671..46585ee 100644 --- a/lisp/emacs-lisp/eieio-base.el +++ b/lisp/emacs-lisp/eieio-base.el @@ -219,7 +219,7 @@ for CLASS. Optional ALLOW-SUBCLASS says that it is ok for being pedantic." (unless class (message "Unsafe call to `eieio-persistent-read'.")) - (when class (eieio--check-type class-p class)) + (when class (cl-check-type class class)) (let ((ret nil) (buffstr nil)) (unwind-protect @@ -481,7 +481,7 @@ instance." (cl-defmethod eieio-object-set-name-string ((obj eieio-named) name) "Set the string which is OBJ's NAME." - (eieio--check-type stringp name) + (cl-check-type name string) (eieio-oset obj 'object-name name)) (cl-defmethod clone ((obj eieio-named) &rest params) diff --git a/lisp/emacs-lisp/eieio-core.el b/lisp/emacs-lisp/eieio-core.el index d8d3902..77d8c01 100644 --- a/lisp/emacs-lisp/eieio-core.el +++ b/lisp/emacs-lisp/eieio-core.el @@ -40,6 +40,8 @@ (declare-function slot-unbound "eieio") (declare-function slot-missing "eieio") (declare-function child-of-class-p "eieio") +(declare-function same-class-p "eieio") +(declare-function object-of-class-p "eieio") ;;; @@ -154,15 +156,6 @@ Currently under control of this var: ;;; Important macros used internally in eieio. -;; -(defmacro eieio--check-type (type obj) - (unless (symbolp obj) - (error "eieio--check-type wants OBJ to be a variable")) - `(if (not ,(cond - ((eq 'or (car-safe type)) - `(or ,@(mapcar (lambda (type) `(,type ,obj)) (cdr type)))) - (t `(,type ,obj)))) - (signal 'wrong-type-argument (list ',type ,obj)))) (defmacro eieio--class-v (class) ;Use a macro, so it acts as a GV place. "Internal: Return the class vector from the CLASS symbol." @@ -183,27 +176,17 @@ Currently under control of this var: (eq (aref class 0) 'defclass) (error nil))) -(defsubst eieio-class-object (class) - "Check that CLASS is a class and return the corresponding object." - (let ((c (eieio--class-object class))) - (eieio--check-type eieio--class-p c) - c)) - -(defsubst class-p (class) +(defun class-p (class) "Return non-nil if CLASS is a valid class vector. CLASS is a symbol." ;FIXME: Is it a vector or a symbol? - ;; this new method is faster since it doesn't waste time checking lots of - ;; things. - (condition-case nil - (eq (aref (eieio--class-v class) 0) 'defclass) - (error nil))) + (and (symbolp class) (eieio--class-p (eieio--class-v class)))) (defun eieio-class-name (class) "Return a Lisp like symbol name for CLASS." ;; FIXME: What's a "Lisp like symbol name"? ;; FIXME: CLOS returns a symbol, but the code returns a string. (if (eieio--class-p class) (setq class (eieio--class-symbol class))) - (eieio--check-type class-p class) + (cl-check-type class class) ;; I think this is supposed to return a symbol, but to me CLASS is a symbol, ;; and I wanted a string. Arg! (format "#" (symbol-name class))) @@ -221,14 +204,17 @@ CLASS is a symbol." ;FIXME: Is it a vector or a symbol? Return nil if that option doesn't exist." (eieio--class-option-assoc (eieio--class-options class) option)) -(defsubst eieio-object-p (obj) +(defun eieio-object-p (obj) "Return non-nil if OBJ is an EIEIO object." (and (vectorp obj) (> (length obj) 0) - (eq (symbol-function (eieio--class-tag obj)) - :quick-object-witness-check))) + (let ((tag (eieio--object-class-tag obj))) + (and (symbolp tag) + ;; (eq (symbol-function tag) :quick-object-witness-check) + (boundp tag) + (eieio--class-p (symbol-value tag)))))) -(defalias 'object-p 'eieio-object-p) +(define-obsolete-function-alias 'object-p 'eieio-object-p "25.1") (defsubst class-abstract-p (class) "Return non-nil if CLASS is abstract. @@ -266,10 +252,9 @@ It creates an autoload function for CNAME's constructor." ;; simply not exist yet. So instead we just don't store the list of parents ;; here in eieio-defclass-autoload at all, since it seems that they're just ;; not needed before the class is actually loaded. - (let* ((oldc (when (class-p cname) (eieio--class-v cname))) - (newc (eieio--class-make cname)) - ) - (if oldc + (let* ((oldc (eieio--class-v cname)) + (newc (eieio--class-make cname))) + (if (eieio--class-p oldc) nil ;; Do nothing if we already have this class. ;; turn this into a usable self-pointing symbol @@ -300,7 +285,21 @@ It creates an autoload function for CNAME's constructor." (cl-every (lambda (elem) (cl-typep elem ',elem-type)) list))))) -(declare-function eieio--defmethod "eieio-generic" (method kind argclass code)) + +(defun eieio-make-class-predicate (class) + (lambda (obj) + ;; (:docstring (format "Test OBJ to see if it's an object of type %S." + ;; class)) + (and (eieio-object-p obj) + (same-class-p obj class)))) + +(defun eieio-make-child-predicate (class) + (lambda (obj) + ;; (:docstring (format + ;; "Test OBJ to see if it's an object is a child of type %S." + ;; class)) + (and (eieio-object-p obj) + (object-of-class-p obj class)))) (defun eieio-defclass-internal (cname superclasses slots options) "Define CNAME as a new subclass of SUPERCLASSES. @@ -314,7 +313,7 @@ See `defclass' for more information." (setq eieio-hook nil) (let* ((pname superclasses) - (oldc (when (class-p cname) (eieio--class-v cname))) + (oldc (let ((c (eieio--class-v cname))) (if (eieio--class-p c) c))) (newc (if (and oldc (not (eieio--class-default-object-cache oldc))) ;; The oldc class is a stub setup by eieio-defclass-autoload. ;; Reuse it instead of creating a new one, so that existing @@ -342,19 +341,20 @@ See `defclass' for more information." (if pname (progn (dolist (p pname) - (if (and p (symbolp p)) - (if (not (class-p p)) + (if (not (and p (symbolp p))) + (error "Invalid parent class %S" p) + (let ((c (eieio--class-v p))) + (if (not (eieio--class-p c)) ;; bad class (error "Given parent class %S is not a class" p) ;; good parent class... ;; save new child in parent - (cl-pushnew cname (eieio--class-children (eieio--class-v p))) + (cl-pushnew cname (eieio--class-children c)) ;; Get custom groups, and store them into our local copy. (mapc (lambda (g) (cl-pushnew g groups :test #'equal)) - (eieio--class-option (eieio--class-v p) :custom-groups)) - ;; save parent in child - (push (eieio--class-v p) (eieio--class-parent newc))) - (error "Invalid parent class %S" p))) + (eieio--class-option c :custom-groups)) + ;; Save parent in child. + (push c (eieio--class-parent newc)))))) ;; Reverse the list of our parents so that they are prioritized in ;; the same order as specified in the code. (cl-callf nreverse (eieio--class-parent newc))) @@ -506,13 +506,7 @@ See `defclass' for more information." (eieio--class-option-assoc options :documentation)) ;; Save the file location where this class is defined. - (let ((fname (if load-in-progress - load-file-name - buffer-file-name))) - (when fname - (when (string-match "\\.elc\\'" fname) - (setq fname (substring fname 0 (1- (length fname))))) - (put cname 'class-location fname))) + (add-to-list 'current-load-list `(eieio-defclass . ,cname)) ;; We have a list of custom groups. Store them into the options. (let ((g (eieio--class-option-assoc options :custom-groups))) @@ -909,12 +903,13 @@ Argument FN is the function calling this verifier." ;; (defun eieio-oref (obj slot) "Return the value in OBJ at SLOT in the object vector." - (eieio--check-type (or eieio-object-p class-p) obj) - (eieio--check-type symbolp slot) - (if (class-p obj) (eieio-class-un-autoload obj)) + (cl-check-type slot symbol) + (cl-check-type obj (or eieio-object class)) (let* ((class (cond ((symbolp obj) (error "eieio-oref called on a class!") - (eieio--class-v obj)) + (let ((c (eieio--class-v obj))) + (if (eieio--class-p c) (eieio-class-un-autoload obj)) + c)) (t (eieio--object-class-object obj)))) (c (eieio--slot-name-index class obj slot))) (if (not c) @@ -929,15 +924,15 @@ Argument FN is the function calling this verifier." (slot-missing obj slot 'oref) ;;(signal 'invalid-slot-name (list (eieio-object-name obj) slot)) ) - (eieio--check-type eieio-object-p obj) + (cl-check-type obj eieio-object) (eieio-barf-if-slot-unbound (aref obj c) obj slot 'oref)))) (defun eieio-oref-default (obj slot) "Do the work for the macro `oref-default' with similar parameters. Fills in OBJ's SLOT with its default value." - (eieio--check-type (or eieio-object-p class-p) obj) - (eieio--check-type symbolp slot) + (cl-check-type obj (or eieio-object class)) + (cl-check-type slot symbol) (let* ((cl (cond ((symbolp obj) (eieio--class-v obj)) (t (eieio--object-class-object obj)))) (c (eieio--slot-name-index cl obj slot))) @@ -975,8 +970,8 @@ Fills in OBJ's SLOT with its default value." (defun eieio-oset (obj slot value) "Do the work for the macro `oset'. Fills in OBJ's SLOT with VALUE." - (eieio--check-type eieio-object-p obj) - (eieio--check-type symbolp slot) + (cl-check-type obj eieio-object) + (cl-check-type slot symbol) (let* ((class (eieio--object-class-object obj)) (c (eieio--slot-name-index class obj slot))) (if (not c) @@ -1000,8 +995,8 @@ Fills in OBJ's SLOT with VALUE." "Do the work for the macro `oset-default'. Fills in the default value in CLASS' in SLOT with VALUE." (setq class (eieio--class-object class)) - (eieio--check-type eieio--class-p class) - (eieio--check-type symbolp slot) + (cl-check-type class eieio--class) + (cl-check-type slot symbol) (let* ((c (eieio--slot-name-index class nil slot))) (if (not c) ;; It might be missing because it is a :class allocated slot. @@ -1223,7 +1218,7 @@ method invocation orders of the involved classes." ;; A class must be defined before it can be used as a parameter ;; specializer in a defmethod form. ;; So we can ignore types that are not known to denote classes. - (and (class-p type) + (and (eieio--class-p (eieio--class-object type)) ;; Use the exact same code as for cl-struct, so that methods ;; that dispatch on both kinds of objects get to share this ;; part of the dispatch code. diff --git a/lisp/emacs-lisp/eieio-datadebug.el b/lisp/emacs-lisp/eieio-datadebug.el index 119f7cc..8234919 100644 --- a/lisp/emacs-lisp/eieio-datadebug.el +++ b/lisp/emacs-lisp/eieio-datadebug.el @@ -117,7 +117,7 @@ PREBUTTONTEXT is some text between PREFIX and the object button." (setq publa (cdr publa))))))) ;;; Augment the Data debug thing display list. -(data-debug-add-specialized-thing (lambda (thing) (object-p thing)) +(data-debug-add-specialized-thing (lambda (thing) (eieio-object-p thing)) #'data-debug-insert-object-button) ;;; DEBUG METHODS diff --git a/lisp/emacs-lisp/eieio-opt.el b/lisp/emacs-lisp/eieio-opt.el index 8d40edf..304ee36 100644 --- a/lisp/emacs-lisp/eieio-opt.el +++ b/lisp/emacs-lisp/eieio-opt.el @@ -45,7 +45,7 @@ variable `eieio-default-superclass'." nil t))) nil)) (if (not root-class) (setq root-class 'eieio-default-superclass)) - (eieio--check-type class-p root-class) + (cl-check-type root-class class) (display-buffer (get-buffer-create "*EIEIO OBJECT BROWSE*") t) (with-current-buffer (get-buffer "*EIEIO OBJECT BROWSE*") (erase-buffer) @@ -58,7 +58,7 @@ variable `eieio-default-superclass'." Argument THIS-ROOT is the local root of the tree. Argument PREFIX is the character prefix to use. Argument CH-PREFIX is another character prefix to display." - (eieio--check-type class-p this-root) + (cl-check-type this-root class) (let ((myname (symbol-name this-root)) (chl (eieio--class-children (eieio--class-v this-root))) (fprefix (concat ch-prefix " +--")) @@ -85,12 +85,12 @@ If CLASS is actually an object, then also display current values of that object. "n abstract" "") " class") - (let ((location (get class 'class-location))) + (let ((location (find-lisp-object-file-name class 'eieio-defclass))) (when location (insert " in `") (help-insert-xref-button - (file-name-nondirectory location) - 'eieio-class-def class location) + (help-fns-short-filename location) + 'eieio-class-def class location 'eieio-defclass) (insert "'"))) (insert ".\n") ;; Parents @@ -204,15 +204,6 @@ Outputs to the current buffer." prot (cdr prot) i (1+ i))))) -(defun eieio-build-class-list (class) - "Return a list of all classes that inherit from CLASS." - (if (class-p class) - (cl-mapcan - (lambda (c) - (append (list c) (eieio-build-class-list c))) - (eieio--class-children (eieio--class-v class))) - (list class))) - (defun eieio-build-class-alist (&optional class instantiable-only buildlist) "Return an alist of all currently active classes for completion purposes. Optional argument CLASS is the class to start with. @@ -256,24 +247,22 @@ are not abstract." ;;; METHOD COMPLETION / DOC -(define-button-type 'eieio-method-def - :supertype 'help-xref - 'help-function (lambda (class method file) - (eieio-help-find-method-definition class method file)) - 'help-echo (purecopy "mouse-2, RET: find method's definition")) - (define-button-type 'eieio-class-def - :supertype 'help-xref - 'help-function (lambda (class file) - (eieio-help-find-class-definition class file)) + :supertype 'help-function-def 'help-echo (purecopy "mouse-2, RET: find class definition")) +(defconst eieio--defclass-regexp "(defclass[ \t\r\n]+%s[ \t\r\n]+") +(with-eval-after-load 'find-func + (defvar find-function-regexp-alist) + (add-to-list 'find-function-regexp-alist + `(eieio-defclass . eieio--defclass-regexp))) + ;;;###autoload (defun eieio-help-constructor (ctr) "Describe CTR if it is a class constructor." (when (class-p ctr) (erase-buffer) - (let ((location (get ctr 'class-location)) + (let ((location (find-lisp-object-file-name ctr 'eieio-defclass)) (def (symbol-function ctr))) (goto-char (point-min)) (prin1 ctr) @@ -288,8 +277,8 @@ are not abstract." (when location (insert " in `") (help-insert-xref-button - (file-name-nondirectory location) - 'eieio-class-def ctr location) + (help-fns-short-filename location) + 'eieio-class-def ctr location 'eieio-defclass) (insert "'")) (insert ".\nCreates an object of class " (symbol-name ctr) ".") (goto-char (point-max)) @@ -304,7 +293,7 @@ are not abstract." "Return non-nil if a method with SPECIALIZERS applies to CLASS." (let ((applies nil)) (dolist (specializer specializers) - (if (eq 'subclass (car-safe specializer)) + (if (memq (car-safe specializer) '(subclass eieio--static)) (setq specializer (nth 1 specializer))) ;; Don't include the methods that are "too generic", such as those ;; applying to `eieio-default-superclass'. @@ -443,60 +432,6 @@ The value returned is a list of elements of the form (terpri) )) -;;; HELP AUGMENTATION -;; -(defun eieio-help-find-method-definition (class method file) - (let ((filename (find-library-name file)) - location buf) - (when (symbolp class) - (setq class (symbol-name class))) - (when (symbolp method) - (setq method (symbol-name method))) - (when (null filename) - (error "Cannot find library %s" file)) - (setq buf (find-file-noselect filename)) - (with-current-buffer buf - (goto-char (point-min)) - (when - (re-search-forward - ;; Regexp for searching methods. - (concat "(defmethod[ \t\r\n]+" method - "\\([ \t\r\n]+:[a-zA-Z]+\\)?" - "[ \t\r\n]+(\\s-*(\\(\\sw\\|\\s_\\)+\\s-+" - class - "\\s-*)") - nil t) - (setq location (match-beginning 0)))) - (if (null location) - (message "Unable to find location in file") - (pop-to-buffer buf) - (goto-char location) - (recenter) - (beginning-of-line)))) - -(defun eieio-help-find-class-definition (class file) - (when (symbolp class) - (setq class (symbol-name class))) - (let ((filename (find-library-name file)) - location buf) - (when (null filename) - (error "Cannot find library %s" file)) - (setq buf (find-file-noselect filename)) - (with-current-buffer buf - (goto-char (point-min)) - (when - (re-search-forward - ;; Regexp for searching a class. - (concat "(defclass[ \t\r\n]+" class "[ \t\r\n]+") - nil t) - (setq location (match-beginning 0)))) - (if (null location) - (message "Unable to find location in file") - (pop-to-buffer buf) - (goto-char location) - (recenter) - (beginning-of-line)))) - ;;; SPEEDBAR SUPPORT ;; @@ -546,7 +481,7 @@ current expansion depth." (defun eieio-class-button (class depth) "Draw a speedbar button at the current point for CLASS at DEPTH." - (eieio--check-type class-p class) + (cl-check-type class class) (let ((subclasses (eieio--class-children (eieio--class-v class)))) (if subclasses (speedbar-make-tag-line 'angle ?+ diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el index 91469b4..5260909 100644 --- a/lisp/emacs-lisp/eieio.el +++ b/lisp/emacs-lisp/eieio.el @@ -110,7 +110,7 @@ Options in CLOS not supported in EIEIO: Due to the way class options are set up, you can add any tags you wish, and reference them using the function `class-option'." (declare (doc-string 4)) - (eieio--check-type listp superclasses) + (cl-check-type superclasses list) (cond ((and (stringp (car options-and-doc)) (/= 1 (% (length options-and-doc) 2))) @@ -223,18 +223,9 @@ This method is obsolete." ;; referencing classes. ei, a class whose slot can contain only ;; pointers to itself. - ;; Create the test function. - (defun ,testsym1 (obj) - ,(format "Test OBJ to see if it an object of type %S." name) - (and (eieio-object-p obj) - (same-class-p obj ',name))) - - (defun ,testsym2 (obj) - ,(format - "Test OBJ to see if it an object is a child of type %S." - name) - (and (eieio-object-p obj) - (object-of-class-p obj ',name))) + ;; Create the test functions. + (defalias ',testsym1 (eieio-make-class-predicate ',name)) + (defalias ',testsym2 (eieio-make-child-predicate ',name)) ,@(when eieio-backward-compatibility (let ((f (intern (format "%s-child-p" name)))) @@ -374,7 +365,7 @@ variable name of the same name as the slot." (defun eieio-object-name (obj &optional extra) "Return a Lisp like symbol string for object OBJ. If EXTRA, include that in the string returned to represent the symbol." - (eieio--check-type eieio-object-p obj) + (cl-check-type obj eieio-object) (format "#<%s %s%s>" (eieio--object-class-name obj) (eieio-object-name-string obj) (or extra ""))) (define-obsolete-function-alias 'object-name #'eieio-object-name "24.4") @@ -394,7 +385,7 @@ If EXTRA, include that in the string returned to represent the symbol." (cl-defmethod eieio-object-set-name-string (obj name) "Set the string which is OBJ's NAME." (declare (obsolete eieio-named "25.1")) - (eieio--check-type stringp name) + (cl-check-type name string) (setf (gethash obj eieio--object-names) name)) (define-obsolete-function-alias 'object-set-name-string 'eieio-object-set-name-string "24.4") @@ -402,7 +393,7 @@ If EXTRA, include that in the string returned to represent the symbol." (defun eieio-object-class (obj) "Return the class struct defining OBJ." ;; FIXME: We say we return a "struct" but we return a symbol instead! - (eieio--check-type eieio-object-p obj) + (cl-check-type obj eieio-object) (eieio--object-class-name obj)) (define-obsolete-function-alias 'object-class #'eieio-object-class "24.4") ;; CLOS name, maybe? @@ -410,7 +401,7 @@ If EXTRA, include that in the string returned to represent the symbol." (defun eieio-object-class-name (obj) "Return a Lisp like symbol name for OBJ's class." - (eieio--check-type eieio-object-p obj) + (cl-check-type obj eieio-object) (eieio-class-name (eieio--object-class-name obj))) (define-obsolete-function-alias 'object-class-name 'eieio-object-class-name "24.4") @@ -419,15 +410,14 @@ If EXTRA, include that in the string returned to represent the symbol." "Return parent classes to CLASS. (overload of variable). The CLOS function `class-direct-superclasses' is aliased to this function." - (let ((c (eieio-class-object class))) - (eieio--class-parent c))) + (eieio--class-parent (eieio--class-object class))) (define-obsolete-function-alias 'class-parents #'eieio-class-parents "24.4") (defun eieio-class-children (class) "Return child classes to CLASS. The CLOS function `class-direct-subclasses' is aliased to this function." - (eieio--check-type class-p class) + (cl-check-type class class) (eieio--class-children (eieio--class-v class))) (define-obsolete-function-alias 'class-children #'eieio-class-children "24.4") @@ -446,13 +436,13 @@ The CLOS function `class-direct-subclasses' is aliased to this function." (defun same-class-p (obj class) "Return t if OBJ is of class-type CLASS." (setq class (eieio--class-object class)) - (eieio--check-type eieio--class-p class) - (eieio--check-type eieio-object-p obj) + (cl-check-type class eieio--class) + (cl-check-type obj eieio-object) (eq (eieio--object-class-object obj) class)) (defun object-of-class-p (obj class) "Return non-nil if OBJ is an instance of CLASS or CLASS' subclasses." - (eieio--check-type eieio-object-p obj) + (cl-check-type obj eieio-object) ;; class will be checked one layer down (child-of-class-p (eieio--object-class-object obj) class)) ;; Backwards compatibility @@ -461,13 +451,13 @@ The CLOS function `class-direct-subclasses' is aliased to this function." (defun child-of-class-p (child class) "Return non-nil if CHILD class is a subclass of CLASS." (setq child (eieio--class-object child)) - (eieio--check-type eieio--class-p child) + (cl-check-type child eieio--class) ;; `eieio-default-superclass' is never mentioned in eieio--class-parent, ;; so we have to special case it here. (or (eq class 'eieio-default-superclass) (let ((p nil)) (setq class (eieio--class-object class)) - (eieio--check-type eieio--class-p class) + (cl-check-type class eieio--class) (while (and child (not (eq child class))) (setq p (append p (eieio--class-parent child)) child (pop p))) @@ -475,11 +465,11 @@ The CLOS function `class-direct-subclasses' is aliased to this function." (defun object-slots (obj) "Return list of slots available in OBJ." - (eieio--check-type eieio-object-p obj) + (cl-check-type obj eieio-object) (eieio--class-public-a (eieio--object-class-object obj))) (defun eieio--class-slot-initarg (class slot) "Fetch from CLASS, SLOT's :initarg." - (eieio--check-type eieio--class-p class) + (cl-check-type class eieio--class) (let ((ia (eieio--class-initarg-tuples class)) (f nil)) (while (and ia (not f)) @@ -517,7 +507,7 @@ OBJECT can be an instance or a class." ;; Return nil if the magic symbol is in there. (not (eq (cond ((eieio-object-p object) (eieio-oref object slot)) - ((class-p object) (eieio-oref-default object slot)) + ((symbolp object) (eieio-oref-default object slot)) (t (signal 'wrong-type-argument (list 'eieio-object-p object)))) eieio-unbound)))) @@ -529,7 +519,8 @@ OBJECT can be an instance or a class." "Return non-nil if OBJECT-OR-CLASS has SLOT." (let ((cv (cond ((eieio-object-p object-or-class) (eieio--object-class-object object-or-class)) - (t (eieio-class-object object-or-class))))) + ((eieio--class-p object-or-class) object-or-class) + (t (find-class object-or-class 'error))))) (or (memq slot (eieio--class-public-a cv)) (memq slot (eieio--class-class-allocation-a cv))) )) @@ -538,10 +529,10 @@ OBJECT can be an instance or a class." "Return the class that SYMBOL represents. If there is no class, nil is returned if ERRORP is nil. If ERRORP is non-nil, `wrong-argument-type' is signaled." - (if (not (class-p symbol)) - (if errorp (signal 'wrong-type-argument (list 'class-p symbol)) - nil) - (eieio--class-v symbol))) + (let ((class (eieio--class-v symbol))) + (cond + ((eieio--class-p class) class) + (errorp (signal 'wrong-type-argument (list 'class-p symbol)))))) ;;; Slightly more complex utility functions for objects ;; @@ -551,7 +542,7 @@ LIST is a list of objects whose slots are searched. Objects in LIST do not need to have a slot named SLOT, nor does SLOT need to be bound. If these errors occur, those objects will be ignored." - (eieio--check-type listp list) + (cl-check-type list list) (while (and list (not (condition-case nil ;; This prevents errors for missing slots. (equal key (eieio-oref (car list) slot)) @@ -563,7 +554,7 @@ be ignored." "Return an association list with the contents of SLOT as the key element. LIST must be a list of objects with SLOT in it. This is useful when you need to do completing read on an object group." - (eieio--check-type listp list) + (cl-check-type list list) (let ((assoclist nil)) (while list (setq assoclist (cons (cons (eieio-oref (car list) slot) @@ -577,7 +568,7 @@ This is useful when you need to do completing read on an object group." LIST must be a list of objects, but those objects do not need to have SLOT in it. If it does not, then that element is left out of the association list." - (eieio--check-type listp list) + (cl-check-type list list) (let ((assoclist nil)) (while list (if (slot-exists-p (car list) slot) @@ -869,12 +860,8 @@ this object." (object-write thing)) ((consp thing) (eieio-list-prin1 thing)) - ((class-p thing) + ((eieio--class-p thing) (princ (eieio-class-name thing))) - ((or (keywordp thing) (booleanp thing)) - (prin1 thing)) - ((symbolp thing) - (princ (concat "'" (symbol-name thing)))) (t (prin1 thing)))) (defun eieio-list-prin1 (list) @@ -942,7 +929,7 @@ Optional argument GROUP is the sub-group of slots to display. ;;;*** -;;;### (autoloads nil "eieio-opt" "eieio-opt.el" "b849f8bf1312d5ef57e53d02173e4b5a") +;;;### (autoloads nil "eieio-opt" "eieio-opt.el" "ff1097f185bc2c253276a7d19fe2f54a") ;;; Generated autoloads from eieio-opt.el (autoload 'eieio-browse "eieio-opt" "\ diff --git a/test/ChangeLog b/test/ChangeLog index 8e4fdb8..a9834cc 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,7 @@ +2015-01-31 Stefan Monnier + + * automated/eieio-tests.el (eieio-test-23-inheritance-check): Simplify. + 2015-01-30 Stefan Monnier * automated/core-elisp-tests.el (core-elisp-tests-3-backquote): New test. diff --git a/test/automated/eieio-tests.el b/test/automated/eieio-tests.el index 847aefd..7532609 100644 --- a/test/automated/eieio-tests.el +++ b/test/automated/eieio-tests.el @@ -537,9 +537,8 @@ METHOD is the method that was attempting to be called." (should (object-of-class-p eitest-ab 'class-b)) (should (object-of-class-p eitest-ab 'class-ab)) (should (eq (eieio-class-parents 'class-a) nil)) - ;; FIXME: eieio-class-parents now returns class objects! - (should (equal (mapcar #'eieio-class-object (eieio-class-parents 'class-ab)) - (mapcar #'eieio-class-object '(class-a class-b)))) + (should (equal (eieio-class-parents 'class-ab) + (mapcar #'find-class '(class-a class-b)))) (should (same-class-p eitest-a 'class-a)) (should (class-a-p eitest-a)) (should (not (class-a-p eitest-ab))) commit d5e3922e08587e7eb9e5aec2e9f84cbda405f857 Author: Stefan Monnier Date: Fri Jan 30 16:00:29 2015 -0500 * lisp/emacs-lisp/backquote.el: Fix bug with unoptimized exp. Fixes: debbugs:19734 * lisp/emacs-lisp/backquote.el (backquote-delay-process): Don't reuse `s' since it may be "equivalent" in some sense, yet different. * test/automated/core-elisp-tests.el (core-elisp-tests-3-backquote): New test. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index eac2e44..3724388 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2015-01-30 Stefan Monnier + + * emacs-lisp/backquote.el (backquote-delay-process): Don't reuse `s' + since it may be "equivalent" in some sense, yet different (bug#19734). + 2015-01-30 Oleh Krehel * outline.el (outline-font-lock-face): Add docstring. diff --git a/lisp/emacs-lisp/backquote.el b/lisp/emacs-lisp/backquote.el index 082955e..d5cdca2 100644 --- a/lisp/emacs-lisp/backquote.el +++ b/lisp/emacs-lisp/backquote.el @@ -120,9 +120,7 @@ Vectors work just like lists. Nested backquotes are permitted." This simply recurses through the body." (let ((exp (backquote-listify (list (cons 0 (list 'quote (car s)))) (backquote-process (cdr s) level)))) - (if (eq (car-safe exp) 'quote) - (cons 0 (list 'quote s)) - (cons 1 exp)))) + (cons (if (eq (car-safe exp) 'quote) 0 1) exp))) (defun backquote-process (s &optional level) "Process the body of a backquote. diff --git a/test/ChangeLog b/test/ChangeLog index 3ae9807..8e4fdb8 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,7 @@ +2015-01-30 Stefan Monnier + + * automated/core-elisp-tests.el (core-elisp-tests-3-backquote): New test. + 2015-01-28 Fabián Ezequiel Gallina * automated/python-tests.el (python-indent-pep8-1) diff --git a/test/automated/core-elisp-tests.el b/test/automated/core-elisp-tests.el index 1b76c76..c31ecef 100644 --- a/test/automated/core-elisp-tests.el +++ b/test/automated/core-elisp-tests.el @@ -24,7 +24,7 @@ ;;; Code: -(ert-deftest core-elisp-tests () +(ert-deftest core-elisp-tests-1-defvar-in-let () "Test some core Elisp rules." (with-temp-buffer ;; Check that when defvar is run within a let-binding, the toplevel default @@ -36,7 +36,7 @@ c-e-x) '(1 2))))) -(ert-deftest core-elisp-test-window-configurations () +(ert-deftest core-elisp-tests-2-window-configurations () "Test properties of window-configurations." (let ((wc (current-window-configuration))) (with-current-buffer (window-buffer (frame-selected-window)) @@ -45,5 +45,8 @@ (set-window-configuration wc) (should (or (not mark-active) (mark))))) +(ert-deftest core-elisp-tests-3-backquote () + (should (eq 3 (eval ``,,'(+ 1 2))))) + (provide 'core-elisp-tests) ;;; core-elisp-tests.el ends here commit adebc14b9c1794e49cfab9b3f2c4866acfbdf175 Author: Oleh Krehel Date: Wed Jan 28 11:55:47 2015 +0100 lisp/outline.el: Improve docstrings. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e05774f..eac2e44 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,21 @@ 2015-01-30 Oleh Krehel + * outline.el (outline-font-lock-face): Add docstring. + (outline-invisible-p): Improve docstring. + (outline-invent-heading): Add docstring. + (outline-promote): Improve docstring. + (outline-demote): Improve docstring. + (outline-head-from-level): Improve docstring. + (outline-end-of-heading): Add docstring. + (outline-next-visible-heading): Improve docstring. + (outline-previous-visible-heading): Improve docstring. + (outline-hide-region-body): Improve docstring. + (outline-flag-subtree): Add docstring. + (outline-end-of-subtree): Add docstring. + (outline-headers-as-kill): Improve docstring. + +2015-01-30 Oleh Krehel + * outline.el (outline-hide-entry): Rename from `hide-entry'. (hide-entry): Declare as obsolete. (outline-show-entry): Rename from `show-entry'. diff --git a/lisp/outline.el b/lisp/outline.el index d8c49b3..ae31b80 100644 --- a/lisp/outline.el +++ b/lisp/outline.el @@ -233,6 +233,7 @@ in the file it applies to.") outline-5 outline-6 outline-7 outline-8]) (defun outline-font-lock-face () + "Return one of `outline-font-lock-faces' for current level." (save-excursion (goto-char (match-beginning 0)) (looking-at outline-regexp) @@ -387,7 +388,8 @@ at the end of the buffer." nil 'move)) (defsubst outline-invisible-p (&optional pos) - "Non-nil if the character after point is invisible." + "Non-nil if the character after POS is invisible. +If POS is nil, use `point' instead." (get-char-property (or pos (point)) 'invisible)) (defun outline-back-to-heading (&optional invisible-ok) @@ -400,7 +402,7 @@ Only visible heading lines are considered, unless INVISIBLE-OK is non-nil." (while (not found) (or (re-search-backward (concat "^\\(?:" outline-regexp "\\)") nil t) - (error "before first heading")) + (error "Before first heading")) (setq found (and (or invisible-ok (not (outline-invisible-p))) (point))))) (goto-char found) @@ -435,6 +437,9 @@ If INVISIBLE-OK is non-nil, an invisible heading line is ok too." (run-hooks 'outline-insert-heading-hook))) (defun outline-invent-heading (head up) + "Create a heading by using heading HEAD as a template. +When UP is non-nil, the created heading will be one level above. +Otherwise, it will be one level below." (save-match-data ;; Let's try to invent one by repeating or deleting the last char. (let ((new-head (if up (substring head 0 -1) @@ -450,7 +455,7 @@ If INVISIBLE-OK is non-nil, an invisible heading line is ok too." (defun outline-promote (&optional which) "Promote headings higher up the tree. -If transient-mark-mode is on, and mark is active, promote headings in +If `transient-mark-mode' is on, and mark is active, promote headings in the region (from a Lisp program, pass `region' for WHICH). Otherwise: without prefix argument, promote current heading and all headings in the subtree (from a Lisp program, pass `subtree' for WHICH); with prefix @@ -489,7 +494,7 @@ nil for WHICH, or do not pass any argument)." (defun outline-demote (&optional which) "Demote headings lower down the tree. -If transient-mark-mode is on, and mark is active, demote headings in +If `transient-mark-mode' is on, and mark is active, demote headings in the region (from a Lisp program, pass `region' for WHICH). Otherwise: without prefix argument, demote current heading and all headings in the subtree (from a Lisp program, pass `subtree' for WHICH); with prefix @@ -531,7 +536,7 @@ nil for WHICH, or do not pass any argument)." (replace-match down-head nil t))))) (defun outline-head-from-level (level head &optional alist) - "Get new heading with level LEVEL from ALIST. + "Get new heading with level LEVEL, closest to HEAD, from ALIST. If there are no such entries, return nil. ALIST defaults to `outline-heading-alist'. Similar to (car (rassoc LEVEL ALIST)). @@ -627,12 +632,13 @@ the match data is set appropriately." (move-marker ins-point nil))) (defun outline-end-of-heading () + "Move to one char before the next `outline-heading-end-regexp'." (if (re-search-forward outline-heading-end-regexp nil 'move) (forward-char -1))) (defun outline-next-visible-heading (arg) "Move to the next visible heading line. -With argument, repeats or can move backward if negative. +With ARG, repeats or can move backward if negative. A heading line is one that starts with a `*' (or that `outline-regexp' matches)." (interactive "p") @@ -660,7 +666,7 @@ A heading line is one that starts with a `*' (or that (defun outline-previous-visible-heading (arg) "Move to the previous heading line. -With argument, repeats or can move forward if negative. +With ARG, repeats or can move forward if negative. A heading line is one that starts with a `*' (or that `outline-regexp' matches)." (interactive "p") @@ -785,7 +791,7 @@ Show the heading too, if it is currently invisible." 'hide-body 'outline-hide-body "25.1") (defun outline-hide-region-body (start end) - "Hide all body lines in the region, but not headings." + "Hide all body lines between START and END, but not headings." ;; Nullify the hook to avoid repeated calls to `outline-flag-region' ;; wasting lots of time running `lazy-lock-fontify-after-outline' ;; and run the hook finally. @@ -926,6 +932,7 @@ Show the heading too, if it is currently invisible." (outline-show-entry)))) (defun outline-flag-subtree (flag) + "Assign FLAG to the current subtree." (save-excursion (outline-back-to-heading) (outline-end-of-heading) @@ -934,6 +941,7 @@ Show the heading too, if it is currently invisible." flag))) (defun outline-end-of-subtree () + "Move to the end of the current subtree." (outline-back-to-heading) (let ((first t) (level (funcall outline-level))) @@ -1070,7 +1078,7 @@ If there is no such heading, return nil." (point))))) (defun outline-headers-as-kill (beg end) - "Save the visible outline headers in region at the start of the kill ring. + "Save the visible outline headers between BEG and END to the kill ring. Text shown between the headers isn't copied. Two newlines are inserted between saved headers. Yanking the result may be a commit ac79251493318468162c93b46fe066f6bd7bd328 Author: Oleh Krehel Date: Wed Jan 28 10:32:12 2015 +0100 lisp/outline.el: Add namespace prefixes. * outline.el (outline-hide-entry): Rename from `hide-entry'. (outline-show-entry): rename from `show-entry' (outline-hide-body): Rename from `hide-body'. (outline-hide-region-body): Rename from `hide-region-body'. (outline-show-all): Rename from `show-all'. (outline-hide-subtree): Rename from `hide-subtree'. (outline-hide-leaves): Rename from `hide-leaves'. (outline-show-subtree): Rename from `show-subtree'. (outline-hide-sublevels): Rename from `hide-sublevels'. (outline-hide-other): Rename from `hide-other'. (outline-show-children): Rename from `show-children'. (outline-show-branches): Rename from `show-branches'. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 511bb86..e05774f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,32 @@ 2015-01-30 Oleh Krehel + * outline.el (outline-hide-entry): Rename from `hide-entry'. + (hide-entry): Declare as obsolete. + (outline-show-entry): Rename from `show-entry'. + (show-entry): Declare as obsolete. + (outline-hide-body): Rename from `hide-body'. + (hide-body): Declare as obsolete. + (outline-hide-region-body): Rename from `hide-region-body'. + (hide-region-body): Declare as obsolete. + (outline-show-all): Rename from `show-all'. + (show-all): Declare as obsolete. + (outline-hide-subtree): Rename from `hide-subtree'. + (hide-subtree): Declare as obsolete. + (outline-hide-leaves): Rename from `hide-leaves'. + (hide-leaves): Declare as obsolete. + (outline-show-subtree): Rename from `show-subtree'. + (show-subtree): Declare as obsolete. + (outline-hide-sublevels): Rename from `hide-sublevels'. + (hide-sublevels): Declare as obsolete. + (outline-hide-other): Rename from `hide-other'. + (hide-other): Declare as obsolete. + (outline-show-children): Rename from `show-children'. + (show-children): Declare as obsolete. + (outline-show-branches): Rename from `show-branches'. + (show-branches): Declare as obsolete. + +2015-01-30 Oleh Krehel + * outline.el (outline-mode): Clean up docstring. (font-lock-warning-face): Remove obsolete declaration. (outline-font-lock-face): Remove obsolete comment. diff --git a/lisp/outline.el b/lisp/outline.el index 1f52998e..d8c49b3 100644 --- a/lisp/outline.el +++ b/lisp/outline.el @@ -62,20 +62,20 @@ in the file it applies to.") (define-key map "@" 'outline-mark-subtree) (define-key map "\C-n" 'outline-next-visible-heading) (define-key map "\C-p" 'outline-previous-visible-heading) - (define-key map "\C-i" 'show-children) - (define-key map "\C-s" 'show-subtree) - (define-key map "\C-d" 'hide-subtree) + (define-key map "\C-i" 'outline-show-children) + (define-key map "\C-s" 'outline-show-subtree) + (define-key map "\C-d" 'outline-hide-subtree) (define-key map "\C-u" 'outline-up-heading) (define-key map "\C-f" 'outline-forward-same-level) (define-key map "\C-b" 'outline-backward-same-level) - (define-key map "\C-t" 'hide-body) - (define-key map "\C-a" 'show-all) - (define-key map "\C-c" 'hide-entry) - (define-key map "\C-e" 'show-entry) - (define-key map "\C-l" 'hide-leaves) - (define-key map "\C-k" 'show-branches) - (define-key map "\C-q" 'hide-sublevels) - (define-key map "\C-o" 'hide-other) + (define-key map "\C-t" 'outline-hide-body) + (define-key map "\C-a" 'outline-show-all) + (define-key map "\C-c" 'outline-hide-entry) + (define-key map "\C-e" 'outline-show-entry) + (define-key map "\C-l" 'outline-hide-leaves) + (define-key map "\C-k" 'outline-show-branches) + (define-key map "\C-q" 'outline-hide-sublevels) + (define-key map "\C-o" 'outline-hide-other) (define-key map "\C-^" 'outline-move-subtree-up) (define-key map "\C-v" 'outline-move-subtree-down) (define-key map [(control ?<)] 'outline-promote) @@ -85,49 +85,43 @@ in the file it applies to.") (defvar outline-mode-menu-bar-map (let ((map (make-sparse-keymap))) - (define-key map [hide] (cons "Hide" (make-sparse-keymap "Hide"))) - - (define-key map [hide hide-other] - '(menu-item "Hide Other" hide-other + (define-key map [hide outline-hide-other] + '(menu-item "Hide Other" outline-hide-other :help "Hide everything except current body and parent and top-level headings")) - (define-key map [hide hide-sublevels] - '(menu-item "Hide Sublevels" hide-sublevels + (define-key map [hide outline-hide-sublevels] + '(menu-item "Hide Sublevels" outline-hide-sublevels :help "Hide everything but the top LEVELS levels of headers, in whole buffer")) - (define-key map [hide hide-subtree] - '(menu-item "Hide Subtree" hide-subtree + (define-key map [hide outline-hide-subtree] + '(menu-item "Hide Subtree" outline-hide-subtree :help "Hide everything after this heading at deeper levels")) - (define-key map [hide hide-entry] - '(menu-item "Hide Entry" hide-entry + (define-key map [hide outline-hide-entry] + '(menu-item "Hide Entry" outline-hide-entry :help "Hide the body directly following this heading")) - (define-key map [hide hide-body] - '(menu-item "Hide Body" hide-body + (define-key map [hide outline-hide-body] + '(menu-item "Hide Body" outline-hide-body :help "Hide all body lines in buffer, leaving all headings visible")) - (define-key map [hide hide-leaves] - '(menu-item "Hide Leaves" hide-leaves + (define-key map [hide outline-hide-leaves] + '(menu-item "Hide Leaves" outline-hide-leaves :help "Hide the body after this heading and at deeper levels")) - (define-key map [show] (cons "Show" (make-sparse-keymap "Show"))) - - (define-key map [show show-subtree] - '(menu-item "Show Subtree" show-subtree + (define-key map [show outline-show-subtree] + '(menu-item "Show Subtree" outline-show-subtree :help "Show everything after this heading at deeper levels")) - (define-key map [show show-children] - '(menu-item "Show Children" show-children + (define-key map [show outline-show-children] + '(menu-item "Show Children" outline-show-children :help "Show all direct subheadings of this heading")) - (define-key map [show show-branches] - '(menu-item "Show Branches" show-branches + (define-key map [show outline-show-branches] + '(menu-item "Show Branches" outline-show-branches :help "Show all subheadings of this heading, but not their bodies")) - (define-key map [show show-entry] - '(menu-item "Show Entry" show-entry + (define-key map [show outline-show-entry] + '(menu-item "Show Entry" outline-show-entry :help "Show the body directly following this heading")) - (define-key map [show show-all] - '(menu-item "Show All" show-all + (define-key map [show outline-show-all] + '(menu-item "Show All" outline-show-all :help "Show all of the text in the buffer")) - (define-key map [headings] (cons "Headings" (make-sparse-keymap "Headings"))) - (define-key map [headings demote-subtree] '(menu-item "Demote Subtree" outline-demote :help "Demote headings lower down the tree")) @@ -148,23 +142,18 @@ in the file it applies to.") '(menu-item "New Heading" outline-insert-heading :help "Insert a new heading at same depth at point")) (define-key map [headings outline-backward-same-level] - '(menu-item "Previous Same Level" outline-backward-same-level :help "Move backward to the arg'th subheading at same level as this one.")) (define-key map [headings outline-forward-same-level] - '(menu-item "Next Same Level" outline-forward-same-level :help "Move forward to the arg'th subheading at same level as this one")) (define-key map [headings outline-previous-visible-heading] - '(menu-item "Previous" outline-previous-visible-heading :help "Move to the previous heading line")) (define-key map [headings outline-next-visible-heading] - '(menu-item "Next" outline-next-visible-heading :help "Move to the next visible heading line")) (define-key map [headings outline-up-heading] - '(menu-item "Up" outline-up-heading :help "Move to the visible heading line of which the present line is a subheading")) map)) @@ -272,8 +261,9 @@ of the heading, so they move with it, if the line is killed and yanked back. A heading with text hidden under it is marked with an ellipsis (...). \\{outline-mode-map} -The commands `hide-subtree', `show-subtree', `show-children', -`hide-entry', `show-entry', `hide-leaves', and `show-branches' +The commands `outline-hide-subtree', `outline-show-subtree', +`outline-show-children', `outline-hide-entry', +`outline-show-entry', `outline-hide-leaves', and `outline-show-branches' are used when point is on a heading line. The variable `outline-regexp' can be changed to control what is a heading. @@ -296,7 +286,7 @@ Turning on outline mode calls the value of `text-mode-hook' and then of '(outline-font-lock-keywords t nil nil backward-paragraph)) (setq imenu-generic-expression (list (list nil (concat "^\\(?:" outline-regexp "\\).*$") 0))) - (add-hook 'change-major-mode-hook 'show-all nil t)) + (add-hook 'change-major-mode-hook 'outline-show-all nil t)) (defcustom outline-minor-mode-prefix "\C-c@" "Prefix key to use for Outline commands in Outline minor mode. @@ -329,7 +319,7 @@ See the command `outline-mode' for more information on this mode." ;; Cause use of ellipses for invisible text. (remove-from-invisibility-spec '(outline . t)) ;; When turning off outline mode, get rid of any outline hiding. - (show-all))) + (outline-show-all))) (defvar outline-level 'outline-level "Function of no args to compute a header's nesting level in an outline. @@ -633,7 +623,7 @@ the match data is set appropriately." (move-marker ins-point (point)) (insert (delete-and-extract-region beg end)) (goto-char ins-point) - (if folded (hide-subtree)) + (if folded (outline-hide-subtree)) (move-marker ins-point nil))) (defun outline-end-of-heading () @@ -695,7 +685,7 @@ This puts point at the start of the current subtree, and mark at the end." (defvar outline-isearch-open-invisible-function nil "Function called if `isearch' finishes in an invisible overlay. The function is called with the overlay as its only argument. -If nil, `show-entry' is called to reveal the invisible text.") +If nil, `outline-show-entry' is called to reveal the invisible text.") (put 'outline 'reveal-toggle-invisible 'outline-reveal-toggle-invisible) (defun outline-flag-region (from to flag) @@ -719,51 +709,51 @@ If FLAG is nil then text is shown, while if FLAG is t the text is hidden." (save-excursion (goto-char (overlay-start o)) (if hidep - ;; When hiding the area again, we could just clean it up and let - ;; reveal do the rest, by simply doing: - ;; (remove-overlays (overlay-start o) (overlay-end o) - ;; 'invisible 'outline) - ;; - ;; That works fine as long as everything is in sync, but if the - ;; structure of the document is changed while revealing parts of it, - ;; the resulting behavior can be ugly. I.e. we need to make - ;; sure that we hide exactly a subtree. - (progn - (let ((end (overlay-end o))) - (delete-overlay o) - (while (progn - (hide-subtree) - (outline-next-visible-heading 1) - (and (not (eobp)) (< (point) end)))))) + ;; When hiding the area again, we could just clean it up and let + ;; reveal do the rest, by simply doing: + ;; (remove-overlays (overlay-start o) (overlay-end o) + ;; 'invisible 'outline) + ;; + ;; That works fine as long as everything is in sync, but if the + ;; structure of the document is changed while revealing parts of it, + ;; the resulting behavior can be ugly. I.e. we need to make + ;; sure that we hide exactly a subtree. + (progn + (let ((end (overlay-end o))) + (delete-overlay o) + (while (progn + (outline-hide-subtree) + (outline-next-visible-heading 1) + (and (not (eobp)) (< (point) end)))))) ;; When revealing, we just need to reveal sublevels. If point is ;; inside one of the sublevels, reveal will call us again. ;; But we need to preserve the original overlay. (let ((o1 (copy-overlay o))) - (overlay-put o 'invisible nil) ;Show (most of) the text. - (while (progn - (show-entry) - (show-children) - ;; Normally just the above is needed. - ;; But in odd cases, the above might fail to show anything. - ;; To avoid an infinite loop, we have to make sure that - ;; *something* gets shown. - (and (equal (overlay-start o) (overlay-start o1)) - (< (point) (overlay-end o)) - (= 0 (forward-line 1))))) - ;; If still nothing was shown, just kill the damn thing. - (when (equal (overlay-start o) (overlay-start o1)) - ;; I've seen it happen at the end of buffer. - (delete-overlay o1)))))) + (overlay-put o 'invisible nil) ;Show (most of) the text. + (while (progn + (outline-show-entry) + (outline-show-children) + ;; Normally just the above is needed. + ;; But in odd cases, the above might fail to show anything. + ;; To avoid an infinite loop, we have to make sure that + ;; *something* gets shown. + (and (equal (overlay-start o) (overlay-start o1)) + (< (point) (overlay-end o)) + (= 0 (forward-line 1))))) + ;; If still nothing was shown, just kill the damn thing. + (when (equal (overlay-start o) (overlay-start o1)) + ;; I've seen it happen at the end of buffer. + (delete-overlay o1)))))) ;; Function to be set as an outline-isearch-open-invisible' property ;; to the overlay that makes the outline invisible (see ;; `outline-flag-region'). (defun outline-isearch-open-invisible (_overlay) ;; We rely on the fact that isearch places point on the matched text. - (show-entry)) + (outline-show-entry)) -(defun hide-entry () +(defun outline-hide-entry () "Hide the body directly following this heading." (interactive) (save-excursion @@ -771,21 +761,30 @@ If FLAG is nil then text is shown, while if FLAG is t the text is hidden." (outline-end-of-heading) (outline-flag-region (point) (progn (outline-next-preface) (point)) t))) -(defun show-entry () +(define-obsolete-function-alias + 'hide-entry 'outline-hide-entry "25.1") + +(defun outline-show-entry () "Show the body directly following this heading. Show the heading too, if it is currently invisible." (interactive) (save-excursion (outline-back-to-heading t) (outline-flag-region (1- (point)) - (progn (outline-next-preface) (point)) nil))) + (progn (outline-next-preface) (point)) nil))) + +(define-obsolete-function-alias + 'show-entry 'outline-show-entry "25.1") -(defun hide-body () +(defun outline-hide-body () "Hide all body lines in buffer, leaving all headings visible." (interactive) - (hide-region-body (point-min) (point-max))) + (outline-hide-region-body (point-min) (point-max))) + +(define-obsolete-function-alias + 'hide-body 'outline-hide-body "25.1") -(defun hide-region-body (start end) +(defun outline-hide-region-body (start end) "Hide all body lines in the region, but not headings." ;; Nullify the hook to avoid repeated calls to `outline-flag-region' ;; wasting lots of time running `lazy-lock-fontify-after-outline' @@ -806,30 +805,47 @@ Show the heading too, if it is currently invisible." (outline-end-of-heading)))))) (run-hooks 'outline-view-change-hook)) -(defun show-all () +(define-obsolete-function-alias + 'hide-region-body 'outline-hide-region-body "25.1") + +(defun outline-show-all () "Show all of the text in the buffer." (interactive) (outline-flag-region (point-min) (point-max) nil)) -(defun hide-subtree () +(define-obsolete-function-alias + 'show-all 'outline-show-all "25.1") + +(defun outline-hide-subtree () "Hide everything after this heading at deeper levels." (interactive) (outline-flag-subtree t)) -(defun hide-leaves () +(define-obsolete-function-alias + 'hide-subtree 'outline-hide-subtree "25.1") + +(defun outline-hide-leaves () "Hide the body after this heading and at deeper levels." (interactive) (save-excursion (outline-back-to-heading) -;; Turned off to fix bug reported by Otto Maddox on 22 Nov 2005. -;; (outline-end-of-heading) - (hide-region-body (point) (progn (outline-end-of-subtree) (point))))) + ;; Turned off to fix bug reported by Otto Maddox on 22 Nov 2005. + ;; (outline-end-of-heading) + (outline-hide-region-body + (point) + (progn (outline-end-of-subtree) (point))))) -(defun show-subtree () +(define-obsolete-function-alias + 'hide-leaves 'outline-hide-leaves "25.1") + +(defun outline-show-subtree () "Show everything after this heading at deeper levels." (interactive) (outline-flag-subtree nil)) +(define-obsolete-function-alias + 'show-subtree 'outline-show-subtree "25.1") + (defun outline-show-heading () "Show the current heading and move to its end." (outline-flag-region (- (point) @@ -840,7 +856,7 @@ Show the heading too, if it is currently invisible." (progn (outline-end-of-heading) (point)) nil)) -(defun hide-sublevels (levels) +(defun outline-hide-sublevels (levels) "Hide everything but the top LEVELS levels of headers, in whole buffer." (interactive (list (cond @@ -878,14 +894,17 @@ Show the heading too, if it is currently invisible." (outline-flag-region (1- (point)) (point) nil)))) (run-hooks 'outline-view-change-hook)) -(defun hide-other () +(define-obsolete-function-alias + 'hide-sublevels 'outline-hide-sublevels "25.1") + +(defun outline-hide-other () "Hide everything except current body and parent and top-level headings." (interactive) - (hide-sublevels 1) + (outline-hide-sublevels 1) (let (outline-view-change-hook) (save-excursion (outline-back-to-heading t) - (show-entry) + (outline-show-entry) (while (condition-case nil (progn (outline-up-heading 1 t) (not (bobp))) (error nil)) (outline-flag-region (1- (point)) @@ -893,15 +912,18 @@ Show the heading too, if it is currently invisible." nil)))) (run-hooks 'outline-view-change-hook)) +(define-obsolete-function-alias + 'hide-other 'outline-hide-other "25.1") + (defun outline-toggle-children () "Show or hide the current subtree depending on its current state." (interactive) (save-excursion (outline-back-to-heading) (if (not (outline-invisible-p (line-end-position))) - (hide-subtree) - (show-children) - (show-entry)))) + (outline-hide-subtree) + (outline-show-children) + (outline-show-entry)))) (defun outline-flag-subtree (flag) (save-excursion @@ -928,12 +950,15 @@ Show the heading too, if it is currently invisible." ;; leave blank line before heading (forward-char -1)))))) -(defun show-branches () +(defun outline-show-branches () "Show all subheadings of this heading, but not their bodies." (interactive) - (show-children 1000)) + (outline-show-children 1000)) + +(define-obsolete-function-alias + 'show-branches 'outline-show-branches "25.1") -(defun show-children (&optional level) +(defun outline-show-children (&optional level) "Show all direct subheadings of this heading. Prefix arg LEVEL is how many levels below the current level should be shown. Default is enough to cause the following heading to appear." @@ -960,6 +985,9 @@ Default is enough to cause the following heading to appear." (if (eobp) (point-max) (1+ (point))))))) (run-hooks 'outline-view-change-hook)) +(define-obsolete-function-alias + 'show-children 'outline-show-children "25.1") + (defun outline-up-heading (arg &optional invisible-ok) commit 5a1b8a1179829e9c2aefb3e430a3d99cdbad4099 Author: Oleh Krehel Date: Fri Jan 30 09:24:33 2015 +0100 lisp/outline.el (outline-mode): Clean up docstring * lisp/outline.el (font-lock-warning-face): Remove unused declare. (outline-mode-prefix-map): Remove obsolete comment. (outline-font-lock-face): Remove obsolete comment. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0c5d2fe..511bb86 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,11 @@ 2015-01-30 Oleh Krehel + * outline.el (outline-mode): Clean up docstring. + (font-lock-warning-face): Remove obsolete declaration. + (outline-font-lock-face): Remove obsolete comment. + +2015-01-30 Oleh Krehel + * lisp/custom.el (defface): Set `indent' to 1. 2015-01-30 Oleh Krehel diff --git a/lisp/outline.el b/lisp/outline.el index 11d71fb..1f52998e 100644 --- a/lisp/outline.el +++ b/lisp/outline.el @@ -35,9 +35,6 @@ ;;; Code: -(defvar font-lock-warning-face) - - (defgroup outlines nil "Support for hierarchical outlining." :prefix "outline-" @@ -84,7 +81,6 @@ in the file it applies to.") (define-key map [(control ?<)] 'outline-promote) (define-key map [(control ?>)] 'outline-demote) (define-key map "\C-m" 'outline-insert-heading) - ;; Where to bind outline-cycle ? map)) (defvar outline-mode-menu-bar-map @@ -190,7 +186,6 @@ in the file it applies to.") outline-mode-menu-bar-map)))))) map)) - (defvar outline-mode-map (let ((map (make-sparse-keymap))) (define-key map "\C-c" outline-mode-prefix-map) @@ -198,7 +193,7 @@ in the file it applies to.") map)) (defvar outline-font-lock-keywords - '(;; + '( ;; Highlight headings according to the level. (eval . (list (concat "^\\(?:" outline-regexp "\\).+") 0 '(outline-font-lock-face) nil t))) @@ -248,33 +243,13 @@ in the file it applies to.") [outline-1 outline-2 outline-3 outline-4 outline-5 outline-6 outline-7 outline-8]) -;; (defvar outline-font-lock-levels nil) -;; (make-variable-buffer-local 'outline-font-lock-levels) - (defun outline-font-lock-face () - ;; (save-excursion - ;; (outline-back-to-heading t) - ;; (let* ((count 0) - ;; (start-level (funcall outline-level)) - ;; (level start-level) - ;; face-level) - ;; (while (not (setq face-level - ;; (if (or (bobp) (eq level 1)) 0 - ;; (cdr (assq level outline-font-lock-levels))))) - ;; (outline-up-heading 1 t) - ;; (setq count (1+ count)) - ;; (setq level (funcall outline-level))) - ;; ;; Remember for later. - ;; (unless (zerop count) - ;; (setq face-level (+ face-level count)) - ;; (push (cons start-level face-level) outline-font-lock-levels)) - ;; (condition-case nil - ;; (aref outline-font-lock-faces face-level) - ;; (error font-lock-warning-face)))) (save-excursion (goto-char (match-beginning 0)) (looking-at outline-regexp) - (aref outline-font-lock-faces (% (1- (funcall outline-level)) (length outline-font-lock-faces))))) + (aref outline-font-lock-faces + (% (1- (funcall outline-level)) + (length outline-font-lock-faces))))) (defvar outline-view-change-hook nil "Normal hook to be run after outline visibility changes.") @@ -296,29 +271,10 @@ invisible, or visible again. Invisible lines are attached to the end of the heading, so they move with it, if the line is killed and yanked back. A heading with text hidden under it is marked with an ellipsis (...). -Commands:\\ -\\[outline-next-visible-heading] outline-next-visible-heading move by visible headings -\\[outline-previous-visible-heading] outline-previous-visible-heading -\\[outline-forward-same-level] outline-forward-same-level similar but skip subheadings -\\[outline-backward-same-level] outline-backward-same-level -\\[outline-up-heading] outline-up-heading move from subheading to heading - -\\[hide-body] make all text invisible (not headings). -\\[show-all] make everything in buffer visible. -\\[hide-sublevels] make only the first N levels of headers visible. - -The remaining commands are used when point is on a heading line. -They apply to some of the body or subheadings of that heading. -\\[hide-subtree] hide-subtree make body and subheadings invisible. -\\[show-subtree] show-subtree make body and subheadings visible. -\\[show-children] show-children make direct subheadings visible. - No effect on body, or subheadings 2 or more levels down. - With arg N, affects subheadings N levels down. -\\[hide-entry] make immediately following body invisible. -\\[show-entry] make it visible. -\\[hide-leaves] make body under heading and under its subheadings invisible. - The subheadings remain visible. -\\[show-branches] make all subheadings at all levels visible. +\\{outline-mode-map} +The commands `hide-subtree', `show-subtree', `show-children', +`hide-entry', `show-entry', `hide-leaves', and `show-branches' +are used when point is on a heading line. The variable `outline-regexp' can be changed to control what is a heading. A line is a heading if `outline-regexp' matches something at the commit 58aa0dad3645cec66aa4bdda87cfd5f67f0a1e93 Author: Oleh Krehel Date: Wed Jan 28 10:07:54 2015 +0100 lisp/custom.el (defface): Set indent to 1. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f285288..0c5d2fe 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,9 @@ 2015-01-30 Oleh Krehel + * lisp/custom.el (defface): Set `indent' to 1. + +2015-01-30 Oleh Krehel + * emacs-lisp/easy-mmode.el (define-minor-mode): Set `indent' to 1. 2015-01-30 Michal Nazarewicz diff --git a/lisp/custom.el b/lisp/custom.el index 779e585..e5fe0eb 100644 --- a/lisp/custom.el +++ b/lisp/custom.el @@ -411,7 +411,8 @@ In the ATTS property list, possible attributes are `:family', See Info node `(elisp) Faces' in the Emacs Lisp manual for more information." - (declare (doc-string 3)) + (declare (doc-string 3) + (indent 1)) ;; It is better not to use backquote in this file, ;; because that makes a bootstrapping problem ;; if you need to recompile all the Lisp files using interpreted code. commit b1e3d14845517bfa9fa5d6d3840f3ab3160306fd Author: Oleh Krehel Date: Tue Jan 27 11:20:53 2015 +0100 lisp/emacs-lisp/easy-mmode.el (define-minor-mode): Set `indent' to 1. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c5da870..f285288 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2015-01-30 Oleh Krehel + + * emacs-lisp/easy-mmode.el (define-minor-mode): Set `indent' to 1. + 2015-01-30 Michal Nazarewicz * lisp/files.el (save-buffers-kill-emacs): If `confirm-kill-emacs' diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el index 7e6f565..f7e8619 100644 --- a/lisp/emacs-lisp/easy-mmode.el +++ b/lisp/emacs-lisp/easy-mmode.el @@ -149,11 +149,12 @@ For example, you could write ...BODY CODE...)" (declare (doc-string 2) (debug (&define name string-or-null-p - [&optional [¬ keywordp] sexp - &optional [¬ keywordp] sexp - &optional [¬ keywordp] sexp] - [&rest [keywordp sexp]] - def-body))) + [&optional [¬ keywordp] sexp + &optional [¬ keywordp] sexp + &optional [¬ keywordp] sexp] + [&rest [keywordp sexp]] + def-body)) + (indent 1)) ;; Allow skipping the first three args. (cond commit 5a971bd30207a3bb7038ee7870abf7c4c4e99dc1 Author: Michal Nazarewicz Date: Thu Jan 22 00:14:42 2015 +0100 files.el: avoid asking whether to kill Emacs multiple times * lisp/files.el (save-buffers-kill-emacs): If `confirm-kill-emacs' is set, but user has just been asked whether they really want to kill Emacs (for example with a ‘Modified buffers exist; exit anyway?’ prompt) , do not ask them for another confirmation. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index de41aeb..c5da870 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2015-01-30 Michal Nazarewicz + + * lisp/files.el (save-buffers-kill-emacs): If `confirm-kill-emacs' + is set, but user has just been asked whether they really want to + kill Emacs (for example with a ‘Modified buffers exist; exit + anyway?’ prompt), do not ask them for another confirmation. + 2015-01-29 Jay Belanger * lisp/calc/calc-units.el (calc-convert-exact-units): New function. diff --git a/lisp/files.el b/lisp/files.el index 40a4289..5e80cb7 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -6590,35 +6590,40 @@ Runs the members of `kill-emacs-query-functions' in turn and stops if any returns nil. If `confirm-kill-emacs' is non-nil, calls it." (interactive "P") (save-some-buffers arg t) - (and (or (not (memq t (mapcar (function - (lambda (buf) (and (buffer-file-name buf) - (buffer-modified-p buf)))) - (buffer-list)))) - (yes-or-no-p "Modified buffers exist; exit anyway? ")) - (or (not (fboundp 'process-list)) - ;; process-list is not defined on MSDOS. - (let ((processes (process-list)) - active) - (while processes - (and (memq (process-status (car processes)) '(run stop open listen)) - (process-query-on-exit-flag (car processes)) - (setq active t)) - (setq processes (cdr processes))) - (or (not active) - (with-current-buffer-window - (get-buffer-create "*Process List*") nil - #'(lambda (window _value) - (with-selected-window window - (unwind-protect - (yes-or-no-p "Active processes exist; kill them and exit anyway? ") - (when (window-live-p window) - (quit-restore-window window 'kill))))) - (list-processes t))))) - ;; Query the user for other things, perhaps. - (run-hook-with-args-until-failure 'kill-emacs-query-functions) - (or (null confirm-kill-emacs) - (funcall confirm-kill-emacs "Really exit Emacs? ")) - (kill-emacs))) + (let ((confirm confirm-kill-emacs)) + (and + (or (not (memq t (mapcar (function + (lambda (buf) (and (buffer-file-name buf) + (buffer-modified-p buf)))) + (buffer-list)))) + (progn (setq confirm nil) + (yes-or-no-p "Modified buffers exist; exit anyway? "))) + (or (not (fboundp 'process-list)) + ;; process-list is not defined on MSDOS. + (let ((processes (process-list)) + active) + (while processes + (and (memq (process-status (car processes)) '(run stop open listen)) + (process-query-on-exit-flag (car processes)) + (setq active t)) + (setq processes (cdr processes))) + (or (not active) + (with-current-buffer-window + (get-buffer-create "*Process List*") nil + #'(lambda (window _value) + (with-selected-window window + (unwind-protect + (progn + (setq confirm nil) + (yes-or-no-p "Active processes exist; kill them and exit anyway? ")) + (when (window-live-p window) + (quit-restore-window window 'kill))))) + (list-processes t))))) + ;; Query the user for other things, perhaps. + (run-hook-with-args-until-failure 'kill-emacs-query-functions) + (or (null confirm) + (funcall confirm "Really exit Emacs? ")) + (kill-emacs)))) (defun save-buffers-kill-terminal (&optional arg) "Offer to save each buffer, then kill the current connection. commit c9d238316c6a4bb16a89de0d8babf782d77c4856 Author: Glenn Morris Date: Fri Jan 30 00:08:40 2015 -0800 Tweak recent gnus-registry.el changes Ref: http://lists.gnu.org/archive/html/emacs-devel/2014-12/msg01748.html * lisp/gnus/gnus-registry.el (gnus-registry-max-pruned-entries) (gnus-registry-prune-factor, gnus-registry-default-sort-function): Fix :version. (gnus-registry-default-sort-function): Improve :type. diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 64608d3..7668331 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,10 @@ +2015-01-30 Glenn Morris + + * gnus-registry.el (gnus-registry-max-pruned-entries) + (gnus-registry-prune-factor, gnus-registry-default-sort-function): + Fix :version. + (gnus-registry-default-sort-function): Improve :type. + 2015-01-29 Lars Ingebrigtsen * nnimap.el (nnimap-request-group): Allow running this function on diff --git a/lisp/gnus/gnus-registry.el b/lisp/gnus/gnus-registry.el index 9cfca12..2017ea2 100644 --- a/lisp/gnus/gnus-registry.el +++ b/lisp/gnus/gnus-registry.el @@ -176,7 +176,8 @@ nnmairix groups are specifically excluded because they are ephemeral." (make-obsolete-variable 'gnus-registry-max-track-groups nil "23.4") (make-obsolete-variable 'gnus-registry-entry-caching nil "23.4") (make-obsolete-variable 'gnus-registry-trim-articles-without-groups nil "23.4") -(make-obsolete-variable 'gnus-registry-max-pruned-entries nil "24.4") +;; FIXME it was simply deleted. +(make-obsolete-variable 'gnus-registry-max-pruned-entries nil "25.1") (defcustom gnus-registry-track-extra '(subject sender recipient) "Whether the registry should track extra data about a message. @@ -253,21 +254,18 @@ exactly how much less. For example, given a maximum size of cut the registry back to \(- 50000 \(* 50000 0.1\)\) -> 45000 entries. The pruning process is constrained by the presence of \"precious\" entries." - :version "24.4" + :version "25.1" :group 'gnus-registry :type 'float) (defcustom gnus-registry-default-sort-function #'gnus-registry-sort-by-creation-time "Sort function to use when pruning the registry. - -Entries which sort to the front of the list will be pruned -first. - +Entries that sort to the front of the list are pruned first. This can slow pruning down. Set to nil to perform no sorting." - :version "24.4" + :version "25.1" :group 'gnus-registry - :type 'symbol) + :type '(choice (const :tag "No sorting" nil) function)) (defun gnus-registry-sort-by-creation-time (l r) "Sort older entries to front of list." commit 041d53a4a67e67e3e650dd509695cc35a8d90a30 Author: Glenn Morris Date: Fri Jan 30 00:04:52 2015 -0800 # ChangeLog fix That's not the right format for multi-file changes, and such things don't need ChangeLog entries anyway. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 137f6c3..de41aeb 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -124,12 +124,6 @@ because it usually includes the buffer name. (python-check-command): Set to epylint when pyflakes is not available. -2015-01-27 Thomas Fitzsimmons - - * net/eudcb-bbdb.el, net/eudcb-ldap.el, net/eudcb-mab.el, - net/eudc-bob.el, net/eudcb-ph.el, net/eudc.el, net/eudc-export.el, - net/eudc-hotlist.el, net/eudc-vars.el: New maintainer. - 2015-01-27 Artur Malabarba * isearch.el (isearch-process-search-char): Add docstring. commit 8ebc20d0a9157731a095c1d2c285553b2bfe025a Author: Glenn Morris Date: Fri Jan 30 00:03:34 2015 -0800 # ChangeLog fix If you revert a change a few days after making it, don't delete the ChangeLog entry. diff --git a/test/ChangeLog b/test/ChangeLog index 156c343..3ae9807 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -60,6 +60,11 @@ * automated/cl-generic-tests.el (setf cl--generic-2): Make sure the setf can be used already in the body of the method. +2015-01-20 Jorgen Schaefer + + * automated/package-test.el (package-test-install-prioritized): + Remove test due to unreproducible failures. + 2015-01-20 Michal Nazarewicz * automated/descr-text-test.el: New file with tests for commit 2b9b98bdb70faf47405620fce9e5b5981a271d7c Author: Glenn Morris Date: Fri Jan 30 00:01:24 2015 -0800 # ChangeLog fixes Merged ChangeLog entries go to the top, with the date of the merge. It's a simple rule. diff --git a/ChangeLog b/ChangeLog index 0b4993b..d7fd76c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -12,7 +12,7 @@ 2015-01-15 update-copyright: apply to self 2015-01-11 update-copyright: recognize groff's \(co marker -2015-01-20 Eli Zaretskii +2015-01-28 Eli Zaretskii * configure.ac (HAVE_W32): Abort with error message if --without-toolkit-scroll-bars was specified. See diff --git a/admin/ChangeLog b/admin/ChangeLog index 6cc59c4..ec50056 100644 --- a/admin/ChangeLog +++ b/admin/ChangeLog @@ -1,4 +1,4 @@ -2015-01-03 Glenn Morris +2015-01-28 Glenn Morris * update_autogen (commit): Prepend "# " to commit message. diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 718657a..1287733 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,10 +1,8 @@ -2015-01-26 Eli Zaretskii +2015-01-28 Eli Zaretskii * cmdargs.texi (Action Arguments): Clarify into which buffer '--insert' inserts. (Bug#19694) -2015-01-21 Eli Zaretskii - * programs.texi (Custom C Indent): Fix a typo. (Bug#19647) 2015-01-27 Ivan Shmakov diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 3a1eeb2..2cde2fb 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,27 +1,22 @@ -2015-01-24 Eli Zaretskii +2015-01-28 Eli Zaretskii * searching.texi (Regexp Search): Add a cross-reference to "Syntax of Regexps". (Bug#19668) -2015-01-21 Daniel Koning (tiny change) +2015-01-28 Daniel Koning (tiny change) * commands.texi (Drag Events, Motion Events, Event Examples) (Accessing Mouse): Describe actual range of values that mouse position objects can have. -2015-01-20 Eli Zaretskii +2015-01-28 Eli Zaretskii * display.texi (Manipulating Buttons): Explain more about the 'action' property. (Bug#19628) * text.texi (Clickable Text): Improve indexing. (Bug#19629) -2015-01-15 Eli Zaretskii - - * variables.texi (Creating Buffer-Local): Improve indexing. - (Bug#19608) - -2015-01-04 Eli Zaretskii + * variables.texi (Creating Buffer-Local): Improve indexing. (Bug#19608) * frames.texi (Display Feature Testing): Make the description of x-server-version and x-server-vendor less X-specific. (Bug#19502) diff --git a/etc/ChangeLog b/etc/ChangeLog index 00949a0..8bc1afb 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -4,7 +4,7 @@ * images/splash.pbm, images/splash.xpm, images/README: Splash images refurbished. -2015-01-17 Eli Zaretskii +2015-01-28 Eli Zaretskii * tutorials/TUTORIAL.he: Use u+05f4 HEBREW PUNCTUATION GERSHAYIM instead of u+0022 QUOTATION MARK in Hebrew acronyms. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index bc1d147..137f6c3 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -22,11 +22,10 @@ (reftex--prepare-syntax-tables): New function. (reftex-mode): Use it. -2015-01-26 Fabián Ezequiel Gallina +2015-01-28 Fabián Ezequiel Gallina python.el: New non-global state dependent indentation engine. (Bug#18319, Bug#19595) - * progmodes/python.el (python-syntax-comment-or-string-p): Accept PPSS as argument. (python-syntax-closing-paren-p): New function. @@ -42,18 +41,18 @@ (python-indent-dedent-line-backspace): Use `unless`. (python-indent-toggle-levels): Delete function. -2015-01-21 Daniel Koning (tiny change) +2015-01-28 Daniel Koning (tiny change) * subr.el (posnp): Correct docstring of `posnp'. (posn-col-row): Make it work with all mouse position objects. * textmodes/artist.el (artist-mouse-draw-continously): Cancel timers if an error occurs during continuous drawing. (Bug#6130) -2015-01-20 Eli Zaretskii +2015-01-28 Eli Zaretskii * button.el (button-activate, push-button): Doc fix. (Bug#19628) -2015-01-13 Michael Albinus +2015-01-28 Michael Albinus * filenotify.el (file-notify-descriptors, file-notify-handle-event): Adapt docstring. @@ -65,24 +64,23 @@ * net/tramp.el (tramp-handle-file-notify-rm-watch): Do not check `file-notify-descriptors', the implementation has been changed. -2015-01-09 Eli Zaretskii +2015-01-28 Eli Zaretskii * net/net-utils.el (net-utils-run-program, net-utils-run-simple): On MS-Windows, bind coding-system-for-read to the console output codepage. (Bug#19458) -2015-01-04 Dmitry Gutov +2015-01-28 Dmitry Gutov Unbreak `mouse-action' property in text buttons. - * button.el (push-button): Fix regression from 2012-12-06. -2015-01-06 Glenn Morris +2015-01-28 Glenn Morris * progmodes/sh-script.el (sh-mode): Doc fix. (sh-basic-indent-line): Handle electric newline. (Bug#18756) -2015-01-04 Paul Eggert +2015-01-28 Paul Eggert Fix dired quoting bug with "Hit`N`Hide". Fixes Bug#19498. * files.el (shell-quote-wildcard-pattern): Also quote "`". diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog index ba5d57e..44971cc 100644 --- a/lisp/erc/ChangeLog +++ b/lisp/erc/ChangeLog @@ -1,7 +1,7 @@ -2015-01-14 Dima Kogan +2015-01-28 Dima Kogan * erc-backend.el (define-erc-response-handler): Give hook-name - default value of nil and add-to-list (bug#19363) + default value of nil and add-to-list (bug#19363). 2015-01-22 Paul Eggert diff --git a/src/ChangeLog b/src/ChangeLog index fc4258c..2130312 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -25,18 +25,6 @@ 2015-01-29 Eli Zaretskii - * dired.c (directory_files_internal, file_name_completion) - [WINDOWSNT]: Signal an error when errno is set non-zero by - 'readdir', regardless of its value. - - * w32.c (sys_readdir): Set errno to ENOENT when the directory - doesn't exist and to EACCES when it's not accessible to the - current user. Set errno to zero when FindNextFile exhausts the - directory, so that callers don't interpret that as an error and - don't signal a file-error. - (open_unc_volume): Set errno to ENOENT if WNetOpenEnum fails. -2015-01-29 Eli Zaretskii - Use bool for boolean in w32menu.c, w32font.c, w32uniscribe.c. * w32uniscribe.c (uniscribe_list, uniscribe_match): Use bool where appropriate. @@ -54,9 +42,20 @@ * xfaces.c (face_change): Rename from face_change_count, and change from int to bool. The var is now true (instead of nonzero) if attributes have changed; this is simpler. All uses changed. - Fixes: bug#19698 + (Bug#19698) + +2015-01-28 Eli Zaretskii -2015-01-27 Eli Zaretskii + * dired.c (directory_files_internal, file_name_completion) + [WINDOWSNT]: Signal an error when errno is set non-zero by + 'readdir', regardless of its value. + + * w32.c (sys_readdir): Set errno to ENOENT when the directory + doesn't exist and to EACCES when it's not accessible to the + current user. Set errno to zero when FindNextFile exhausts the + directory, so that callers don't interpret that as an error and + don't signal a file-error. + (open_unc_volume): Set errno to ENOENT if WNetOpenEnum fails. * dired.c (directory_files_internal) [WINDOWSNT]: If readdir returns NULL and errno is ENOTDIR, behave as if opendir failed to @@ -65,55 +64,43 @@ * w32.c (sys_readdir): If FindFirstFile fails because the directory doesn't exist, set errno to ENOTDIR. -2015-01-24 Jan Djärv +2015-01-28 Jan Djärv * nsterm.m (drawRect:): Add block/unblock_input (Bug#19660). -2015-01-21 Paul Eggert +2015-01-28 Paul Eggert Fix coding.c subscript error * coding.c (CODING_ISO_INVOKED_CHARSET): Avoid undefined behavior if CODING_ISO_INVOCATION returns negative. -2015-01-17 Eli Zaretskii +2015-01-28 Eli Zaretskii * xdisp.c (produce_image_glyph): Fix display of images in R2L screen lines: prepend the new glyph to the ones already there instead of appending it. -2015-01-14 Eli Zaretskii - * w32fns.c (w32_set_title_bar_text): New function, including support for titles with non-ASCII characters outside of the current system codepage. (x_set_name, x_set_title): Use it. (Bug#19590) -2015-01-10 Eli Zaretskii - * indent.c (Fvertical_motion): Return zero if we started from ZV and there's an overlay after-string there. (Bug#19553) -2015-01-09 Eli Zaretskii - * emacs.c (usage_message): Fix the description of the -nl switch. (Bug#19542) -2015-01-05 Eli Zaretskii - * xdisp.c (move_it_to, try_cursor_movement): Don't use the window end information if the window_end_valid flag is unset. (try_window_id): If the call to display_line invalidated the window end information, give up the try_window_id optimization. (Bug#19511) -2015-01-04 Eli Zaretskii - * w32fns.c (Fx_server_version, Fx_server_vendor): Doc fix. - * xfns.c (Fx_server_version, Fx_server_vendor): Doc fix. - * emacs.c (syms_of_emacs) : Doc fix. - (Bug#19502) + * emacs.c (syms_of_emacs) : Doc fix. (Bug#19502) 2015-01-28 Stefan Monnier diff --git a/test/ChangeLog b/test/ChangeLog index 66535ac..156c343 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,4 +1,4 @@ -2015-01-26 Fabián Ezequiel Gallina +2015-01-28 Fabián Ezequiel Gallina * automated/python-tests.el (python-indent-pep8-1) (python-indent-pep8-2, python-indent-pep8-3) @@ -20,7 +20,7 @@ (python-indent-inside-string-2, python-indent-inside-string-3) (python-indent-dedent-line-backspace-1): New Tests. -2015-01-24 Glenn Morris +2015-01-28 Glenn Morris * automated/regexp-tests.el: Require regexp-opt, which is not preloaded --without-x. commit 44ae1364908f91d877a6afa9bdd394e31fbd8311 Author: Eli Zaretskii Date: Fri Jan 30 08:48:32 2015 +0200 Fix error messages when readdir cannot open a directory on MS-Windows src/dired.c (read_dirent): Accept an additional argument FIRST_ENTRY. If readdir fails with ENOENT or EACCES the first time it is called, report the error as if it happened in open_directory. (directory_files_internal, file_name_completion): Adjust callers or read_dirent. diff --git a/src/ChangeLog b/src/ChangeLog index 67b6fa0..fc4258c 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,12 @@ +2015-01-30 Eli Zaretskii + + * dired.c (read_dirent): Accept an additional argument + FIRST_ENTRY. If readdir fails with ENOENT or EACCES the first + time it is called, report the error as if it happened in + open_directory. + (directory_files_internal, file_name_completion): Adjust callers + or read_dirent. + 2015-01-30 Paul Eggert Refactor calls to opendir for simplicity diff --git a/src/dired.c b/src/dired.c index 7982c1f..56d6de2 100644 --- a/src/dired.c +++ b/src/dired.c @@ -124,10 +124,11 @@ directory_files_internal_unwind (void *dh) /* Return the next directory entry from DIR; DIR's name is DIRNAME. If there are no more directory entries, return a null pointer. - Signal any unrecoverable errors. */ + Signal any unrecoverable errors. FIRST_ENTRY true means this is + the first call after open_directory. */ static struct dirent * -read_dirent (DIR *dir, Lisp_Object dirname) +read_dirent (DIR *dir, Lisp_Object dirname, bool first_entry) { while (true) { @@ -136,7 +137,16 @@ read_dirent (DIR *dir, Lisp_Object dirname) if (dp || errno == 0) return dp; if (! (errno == EAGAIN || errno == EINTR)) - report_file_error ("Reading directory", dirname); + { + /* The MS-Windows implementation of 'opendir' doesn't + actually open a directory until the first call to + 'readdir'. If 'readdir' fails to open the directory, it + sets errno to ENOENT or EACCES, see w32.c. */ + if (first_entry && (errno == ENOENT || errno == EACCES)) + report_file_error ("Opening directory", dirname); + else + report_file_error ("Reading directory", dirname); + } QUIT; } } @@ -239,7 +249,8 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full, needsep = 1; /* Loop reading directory entries. */ - for (struct dirent *dp; (dp = read_dirent (d, directory)); ) + bool first_entry = true; + for (struct dirent *dp; (dp = read_dirent (d, directory, first_entry)); ) { ptrdiff_t len = dirent_namelen (dp); Lisp_Object name = make_unibyte_string (dp->d_name, len); @@ -247,6 +258,8 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full, struct gcpro gcpro1, gcpro2; GCPRO2 (finalname, name); + first_entry = false; + /* Note: DECODE_FILE can GC; it should protect its argument, though. */ name = DECODE_FILE (name); @@ -486,11 +499,13 @@ file_name_completion (Lisp_Object file, Lisp_Object dirname, bool all_flag, record_unwind_protect_ptr (directory_files_internal_unwind, d); /* Loop reading directory entries. */ - for (struct dirent *dp; (dp = read_dirent (d, dirname)); ) + bool first_entry = true; + for (struct dirent *dp; (dp = read_dirent (d, dirname, first_entry)); ) { ptrdiff_t len = dirent_namelen (dp); bool canexclude = 0; + first_entry = false; QUIT; if (len < SCHARS (encoded_file) || (scmp (dp->d_name, SSDATA (encoded_file), commit d7adc7d90fb93edb5d0a1674c013f8425677dff8 Author: Paul Eggert Date: Thu Jan 29 19:51:31 2015 -0800 Spelling fix diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el index f03b9c9..311ea7c 100644 --- a/lisp/gnus/mm-decode.el +++ b/lisp/gnus/mm-decode.el @@ -889,7 +889,7 @@ external if displayed external." (when (and (boundp 'gnus-summary-buffer) (bufferp gnus-summary-buffer) (buffer-name gnus-summary-buffer)) - ;; So that we pop back to the right place, sortof. + ;; So that we pop back to the right place, sort of. (switch-to-buffer gnus-summary-buffer) (switch-to-buffer mm)) (delete-other-windows) commit 34d0859c4b092b6a1daed3c674f1f4e3f05d5189 Author: Paul Eggert Date: Thu Jan 29 19:01:28 2015 -0800 Refactor calls to opendir for simplicity * dired.c (open_directory): Accept Lisp_Object, not char *, for dirname. Signal an error if the open fails. All callers changed. diff --git a/src/ChangeLog b/src/ChangeLog index 029ac88..67b6fa0 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2015-01-30 Paul Eggert + + Refactor calls to opendir for simplicity + * dired.c (open_directory): Accept Lisp_Object, not char *, for + dirname. Signal an error if the open fails. All callers changed. + 2015-01-29 Paul Eggert Report readdir failures diff --git a/src/dired.c b/src/dired.c index 23a8674..7982c1f 100644 --- a/src/dired.c +++ b/src/dired.c @@ -66,8 +66,9 @@ dirent_namelen (struct dirent *dp) } static DIR * -open_directory (char const *name, int *fdp) +open_directory (Lisp_Object dirname, int *fdp) { + char *name = SSDATA (dirname); DIR *d; int fd, opendir_errno; @@ -98,8 +99,9 @@ open_directory (char const *name, int *fdp) unblock_input (); + if (!d) + report_file_errno ("Opening directory", dirname, opendir_errno); *fdp = fd; - errno = opendir_errno; return d; } @@ -149,8 +151,6 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full, Lisp_Object match, Lisp_Object nosort, bool attrs, Lisp_Object id_format) { - DIR *d; - int fd; ptrdiff_t directory_nbytes; Lisp_Object list, dirfilename, encoded_directory; struct re_pattern_buffer *bufp = NULL; @@ -200,9 +200,8 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full, /* Now *bufp is the compiled form of MATCH; don't call anything which might compile a new regexp until we're done with the loop! */ - d = open_directory (SSDATA (dirfilename), &fd); - if (d == NULL) - report_file_error ("Opening directory", directory); + int fd; + DIR *d = open_directory (dirfilename, &fd); /* Unfortunately, we can now invoke expand-file-name and file-attributes on filenames, both of which can throw, so we must @@ -448,8 +447,6 @@ static Lisp_Object file_name_completion (Lisp_Object file, Lisp_Object dirname, bool all_flag, Lisp_Object predicate) { - DIR *d; - int fd; ptrdiff_t bestmatchsize = 0; int matchcount = 0; /* If ALL_FLAG is 1, BESTMATCH is the list of all matches, decoded. @@ -483,13 +480,9 @@ file_name_completion (Lisp_Object file, Lisp_Object dirname, bool all_flag, work with decoded file names, but we still do some filtering based on the encoded file name. */ encoded_file = ENCODE_FILE (file); - encoded_dir = ENCODE_FILE (Fdirectory_file_name (dirname)); - - d = open_directory (SSDATA (encoded_dir), &fd); - if (!d) - report_file_error ("Opening directory", dirname); - + int fd; + DIR *d = open_directory (encoded_dir, &fd); record_unwind_protect_ptr (directory_files_internal_unwind, d); /* Loop reading directory entries. */ commit 9242cdcda95e0fcb57233a8665d251e280eddec6 Merge: ca9456f 4ab6e74 Author: Francesc Rocher Date: Fri Jan 30 00:38:31 2015 +0100 Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs commit ca9456fbf4bc35b2b9fb6da33b6eea8dafb5c34b Author: Francesc Rocher Date: Fri Jan 30 00:33:06 2015 +0100 Splash images refurbished diff --git a/etc/ChangeLog b/etc/ChangeLog index 8e46cd0..00949a0 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,9 @@ +2015-01-29 Francesc Rocher + + * images/splash.svg, images/splash.png: + * images/splash.pbm, images/splash.xpm, images/README: + Splash images refurbished. + 2015-01-17 Eli Zaretskii * tutorials/TUTORIAL.he: Use u+05f4 HEBREW PUNCTUATION GERSHAYIM diff --git a/etc/images/README b/etc/images/README index 486aca9..005754b 100644 --- a/etc/images/README +++ b/etc/images/README @@ -25,12 +25,12 @@ File: mh-logo.xpm Author: Satyaki Das Copyright (C) 2003-2015 Free Software Foundation, Inc. -Files: splash.pbm, splash.xpm, gnus.pbm +Files: gnus.pbm Author: Luis Fernandes Copyright (C) 2001-2015 Free Software Foundation, Inc. -Files: splash.png, splash.svg - Author: Francesc Rocher +Files: splash.png, splash.svg, splash.pbm, splash.xpm + Author: Francesc Rocher Copyright (C) 2008-2015 Free Software Foundation, Inc. Files: checked.xpm, unchecked.xpm diff --git a/etc/images/splash.pbm b/etc/images/splash.pbm index 7f35895..39b69a5 100644 Binary files a/etc/images/splash.pbm and b/etc/images/splash.pbm differ diff --git a/etc/images/splash.png b/etc/images/splash.png index a5331f1..9d0eb37 100644 Binary files a/etc/images/splash.png and b/etc/images/splash.png differ diff --git a/etc/images/splash.svg b/etc/images/splash.svg index bdd80bf..54865f5 100644 --- a/etc/images/splash.svg +++ b/etc/images/splash.svg @@ -3,7 +3,7 @@ Copyright (C) 2008-2015 Free Software Foundation, Inc. - Author: Francesc Rocher + Author: Francesc Rocher Based on the original work by Luis Fernandes This file is part of GNU Emacs. @@ -29,12 +29,39 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" - xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.0" - width="275.96875" - height="190.40625" + width="333" + height="233" id="svg6706" - style="display:inline"> + style="display:inline" + inkscape:version="0.48.4 r9939" + sodipodi:docname="splash.svg" + inkscape:export-filename="/opt/src/emacs/etc/images/splash.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + @@ -43,7 +70,7 @@ image/svg+xml - + 2008/06/28 @@ -67,71 +94,28 @@ - - - - - - - - - - - + id="defs6709" /> - - - - - - + + + + diff --git a/etc/images/splash.xpm b/etc/images/splash.xpm index e53cd68..2756bcd 100644 --- a/etc/images/splash.xpm +++ b/etc/images/splash.xpm @@ -1,249 +1,370 @@ /* XPM */ -/* Gnu Emacs Logo - * - * Copyright (C) 2001-2015 Free Software Foundation, Inc. - * - * Author: Luis Fernandes - * - * This file is part of GNU Emacs. - * - * GNU Emacs is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * GNU Emacs is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Emacs. If not, see . - */ static char *splash[] = { -/* width height num_colors chars_per_pixel */ -" 270 217 4 1", -/* colors */ -". c None", -"# c #c64e3b", -"a c #000000", -"c c #2076c1", +/* columns rows colors chars-per-pixel */ +"333 233 131 2 ", +" c #C64E3B", +". c #C7513E", +"X c #BD5144", +"o c #B3534D", +"O c #A95656", +"+ c #A65759", +"@ c #A1585E", +"# c #8F5D6F", +"$ c #9C5A63", +"% c #935C6B", +"& c #8A5F73", +"* c #A15F67", +"= c #83607A", +"- c #926172", +"; c #C14F40", +": c #C75340", +"> c #C85643", +", c #C95846", +"< c #C3594B", +"1 c #CB5C4B", +"2 c #CC604F", +"3 c #CD6453", +"4 c #CE6857", +"5 c #CF6959", +"6 c #D06E5E", +"7 c #D16F60", +"8 c #CF7062", +"9 c #D27364", +"0 c #D37768", +"q c #D47A6C", +"w c #D67E71", +"e c #D78275", +"r c #D88477", +"t c #D88679", +"y c #D98A7D", +"u c #3C74BD", +"i c #5F6A9C", +"p c #766486", +"a c #7B6382", +"s c #6A6792", +"d c #626999", +"f c #4E6FAC", +"g c #566DA5", +"h c #5A6EA3", +"j c #5574AE", +"k c #4372B6", +"l c #4971B1", +"z c #4077BE", +"x c #4279BF", +"c c #457AC0", +"v c #497DC1", +"b c #4E81C3", +"n c #5384C5", +"m c #5A89C7", +"M c #5D8CC8", +"N c #6B8CC1", +"B c #618EC9", +"V c #6592CB", +"C c #6B95CD", +"Z c #6F98CE", +"A c #719ACF", +"S c #759DD0", +"D c #789FD1", +"F c #7CA2D3", +"G c #DB8E82", +"H c #DC9185", +"J c #DD958A", +"K c #DE998E", +"L c #DF9C92", +"P c #E09F94", +"I c #E0A096", +"U c #E2A59B", +"Y c #E3A99F", +"T c #E4ACA4", +"R c #E6B0A7", +"E c #E7B3AB", +"W c #E8B7AE", +"Q c #E8B7B0", +"! c #E9BBB4", +"~ c #EBBFB8", +"^ c #ECC3BC", +"/ c #81A5D5", +"( c #89A6D1", +") c #86A9D6", +"_ c #89ABD7", +"` c #8DAED8", +"' c #90AFD9", +"] c #8FB0D9", +"[ c #9DB4D7", +"{ c #93B2DB", +"} c #99B6DC", +"| c #9DB9DE", +" . c #A1BCDF", +".. c #A4BEE0", +"X. c #A6C0E1", +"o. c #ABC3E3", +"O. c #B0C7E4", +"+. c #B5CAE6", +"@. c #B9CDE7", +"#. c #BBCEE8", +"$. c #BED0E9", +"%. c #DBD0D8", +"&. c #EDC7C1", +"*. c #EECAC4", +"=. c #EFCEC8", +"-. c #F0CFCA", +";. c #F0D2CD", +":. c #F2D6D1", +">. c #F3DAD5", +",. c #F4DEDA", +"<. c #F6E2DE", +"1. c #C4D5EB", +"2. c #CCDAEE", +"3. c #D0DEEF", +"4. c #D3DFF0", +"5. c #D5E1F1", +"6. c #DBE5F3", +"7. c #DFE8F4", +"8. c #EDE5E8", +"9. c #F7E5E2", +"0. c #F8E9E6", +"q. c #F9EDEB", +"w. c #FAF0EE", +"e. c #E4ECF6", +"r. c #E9EFF7", +"t. c #ECF2F9", +"y. c #FCF4F3", +"u. c #FDF8F7", +"i. c #F2F6FB", +"p. c #F6F9FC", +"a. c #FFFFFF", /* pixels */ -"..............................................................................................................................................................................................................................................................................", -"..................................................................########..........................................................................................................................................................########..................................", -".................................................................##########.......................................................................................................................................................############................................", -"................................................................#############.......................########....................................................................................................................################..............................", -"..............................................................#################...................#############................................................................................................................###################............................", -".............................................................###################.................################.............................................................................................................#####################...........................", -"............................................................#####################..............###################...........................................................................................................######################...........................", -"...........................................................#######################...........#######################.........................................................................................................#######################..........................", -"..........................................................#########################.........##########################......................................................................................................#########################.........................", -".........................................................###########################.......############################....................................................................................................##########################.........................", -".........................................................############################.....###############################.................................................................................................############################........................", -"........................................................##############################...a################################................................................................................................############################........................", -".......................................................################################.a##################################..............................................................................................##############################.......................", -"......................................................#################################aa###################################.............................................................................................##############################.......................", -".....................................................########################################################################...........................................................................................################################......................", -"....................................................##########################################################################.........................................................................................a################################......................", -"......................#............................###########aaa##############################################################.......................................................................................a#################################......................", -".....................##...........................###########aaaaaa#############################################################......................................................................................a######aaaaaa#####################......................", -".....................###.........................##########aaaaaaaaaa############################################################....................................................................................a######aaaaaaaaaa##################......................", -".....................###........................##########...aaaaaaaaaa###########################################################...................................................................................a#####aaaaaaaaaaaaa################......................", -".................a..#####......................##########......aaaaaaaaa#######################aaaaaaa############################..................................................................................a#####aaaaaaaaaaaaaaaa##############......................", -".................aa.#####.....................##########........aaaaaaaaa####################aaaaaaaaaaa###########################.................................................................................a#####aaaaaaaaaaaaaaaa##############......................", -"................aaa.#####....................##########..........aaaaaaaaa#################aaaaaaaaaaaaaaa##########################...............................................................................a######aaaaaaaaaaaaaaaaa#############......................", -"................aaa#######..................##########............aaaaaaaaa###############aaaaaaaaaaaaaaaaaa#########################..............................................................................a#####.........aaaaaaaaaa############......................", -"................aaa########...............###########...............aaaaaaaa############aa........aaaaaaaaaaaa########################.......................................................................#....a######............aaaaaaa############......................", -"...............aaa##########............############.................aaaaaaaa###########.............aaaaaaaaaaa#######################......................................................................#....a######.............aaaaaaa###########......................", -"...............aaa############........#############...................aaaaaaaa#########................aaaaaaaaaa#######################.................................#..................................##...aa#####...............aaaaaa###########......................", -"...............aa##############.....##############.....................aaaaaaaa########..................aaaaaaaaa#######################...............................##..................................##...a######...............aaaaaa###########......................", -"..............aaa#################################......................aaaaaaa#######....................aaaaaaaaa#######################.............................###...............................a.###..aa######................aaaaa###########......................", -"..............aa#################################........................aaaaaaa######.....................aaaaaaaaa#######################..........................a.###..............................aa.##...aa#####..................aaaa###########......................", -".............aaa################################..........................aaaaaa#####.......................aaaaaaaaa#######################........................aa####..............................aa###...aa#####..................aaaa###########......................", -".............aaa###############################...........................aaaaaaa####.........................aaaaaaaa######################........................a####..............................aaa###..aaa####....................aaa##########.......................", -"............aaa###############################.............................aaaaaa###...........................aaaaaaaa#######################.....................aa####..............................aa###...aaaa##.....................aaa##########.......................", -"............aaaa#############################...............................##aaa.#.............................aaaaaaaa########################..................aa####..............................aaa###...aaaaaa.....................aaa##########.......................", -"...........aaaaa############################...............................###aaa................................aaaaaaaa########################.................a#####..............................aa###...aaaaaa......................aaa##########.......................", -"...........aaaaaa##########################...............................###aaa..................................aaaaaaaa#########################..............######..............................aa####...aaaaaa......................aaa#########........................", -"...........aaaaaaa#######################................................####aaa...................................aaaaaaaa##########################..........########..............................a####....aaaaa.......................aaa#########........................", -"............aaaaaa######################................................a###..a.....................................aaaaaaaa###########################......##########.........#...................a#####....aaaa........................aaa#########........................", -"............aaaaaaa####################................................a###..........................................aaaaaaaa#########################################.........##...................#####.......a.........................aaa#########........................", -".............aaaaaaa##################................................a####...........................................aaaaaaaa########################################.........###.................######.................................aaa#########........................", -"..............aaaaaaa###############.................................a####.............................................aaaaaaaa######################################.........#####..............#######..................................aaa########.........................", -"...............aaaaaaa############a.................................aa###...............................................aaaaaaa######################################......a..######...........########...................................aaa########.........................", -"...............aaaaaaaaa#######aaa.................................aa####................................................aaaaaaa####################################.......aa########.......###########...................................aaa########.........................", -"................aaaaaaaaaaaaaaaaa..................................aa###..................................................aaaaaaa###################################.......aa#########################....................................aaa########.........................", -".................aaaaaaaaaaaaaa...................................aa###....................................................aaaaaaa#################################.......aa##########################....................................aaa########.........................", -"..................aaaaaaaaaaaa...................................aa####....................................................aaaaaaaa################################.......aa#########################.....................................aaa#######..........................", -"....................aaaaaaa.....................................aa####......................................................aaaaaaaa##############################.......aa##########################.....................................aaa#######..........................", -"................................................................aa###........................................................aaaaaaaa###########################.........aa#########################......................................aaa#######..........................", -"...............................................................aa###..........................................................aaaaaaaa#########################.........aa#########################.......................................aaa#######..........................", -"..............................................................aa###............................................................aaaaaaaa#######################..........aa#########################.......................................aaa######...........................", -".............................................................aaa###...........................................##................aaaaaaaa#####################..........aa#########################........................................aa#######...........................", -".............................................................aa###...........................................#####...............aaaaaaaaa##################..........aaa########################.........................................aa#######...........................", -"............................................................aa###...........................................#######...............aaaaaaaaaa##############a...........aaa#######################..........................................aa#######...........................", -"...........................................................aa####...........................................########...............aaaaaaaaaaa##########aa...........aaa#######################...........................................aa######............................", -"..........................................................aa####...........................................##########...............aaaaaaaaaaaaaaaaaaaaa............aaaa####################.............................................aa######............................", -"..........................................................aa###..........................................a###########.................aaaaaaaaaaaaaaaaaa............aaaaa###################..............................................aa######............................", -".........................................................aa###..........................................aa#############..................aaaaaaaaaaaa...............aaaaaa#################...............................................a#######............................", -"........................................................aa###..........................................aa##############.............................................aaaaaaa##############a...............................................aa######.............................", -"........................................................aa###...................................##.....a################............................................aaaaaaaa###########aa................................................aa######.............................", -".......................................................aa###...................................###....aa################.............................................aaaaaaaaa######aaa..................................................aa######.............................", -".......................................................aa##...................................####...aa##################.............................................aaaaaaaaaaaaaaaa...................................................aa#####..............................", -"......................................................aa###..................................####...aa###################..............................................aaaaaaaaaaaaaa...................................................aaa#####..............................", -".....................................................aa###..................................####....aa####################..............................................aaaaaaaaaaa.....................................................aa######..............................", -"....................................................aaa##..................................#####...aa#####################................................................aaaaaa........................................................aa#####...............................", -"....................................................aa###.................................#####....aa######################.............................................................................................................aa#####...............................", -"...................................................aa###.................................######...aaa######################.............................................................................................................a######...............................", -"..................................................aa####................................######....aaaaa####################............................................................................................................aa######...............................", -"..................................................aa###...............................########...aaaaaaa###################............................................................................................................aa#####................................", -".................................................aa####..............................########....aaaaaaaaa#################............................................................................................................aa#####................................", -".................................................aa###..............................#########....aaaaaaaaa#################............................................................................................................aa#####................................", -"................................................aa###..............................#########.......aaaaaaaa################............................................................................................................aa####.................................", -"...............................................aaa###............................##########.........aaaaaaaa###############............................................................................................................aa####.................................", -"...............................................aa###............................##########............aaaaaaa###############..........................................................................................................aaa####.................................", -"..............................................aaa###...........................##########..............aaaaaa###############..........................................................................................................aaa####.................................", -".............................................aaa####.........................##########.................aaaaaa##############..........................................................................................................aa#####.................................", -".............................................aaa###.........................#########...................aaaaaa##############.........................................................................................................aaa####..................................", -"............................................aaa####.......................##########.....................aaaaaa#############.........................................................................................................aa#####..................................", -"............................................aa#####......................##########......................aaaaaa#############.........................................................................................................aa#####..................................", -"...........................................aaa#####.....................##########........................aaaaaa############........................................................................................................aaa####...................................", -"...........................................aa######...................###########.........................aaaaaa###########.........................................................................................................aaa####...................................", -"..........................................aaa#######................###########............................aaaaaa##########.........................................................................................................aa####....................................", -"..........................................aa#########..............###########.............................aaaaaa##########.........................................................................................................aa####....................................", -".........................................aaa##########...........############...............................aaaaa##########........................................................................................................aaa####....................................", -".........................................aa#################################................................aaaaaa#########........................................................................................................aa####.....................................", -"........................................aaa################################..................................aaaaa#########........................................................................................................aa####.....................................", -"........................................aa################################...................................aaaaa#########........................................................................................................aa###......................................", -".......................................aaa###############################.....................................aaaa#########.......................................................................................................aaa###......................................", -".......................................aaa##############################......................................aaaa#########.......................................................................................................aaa###......................................", -"......................................aaa#############################........................................aaaa#########.......................................................................................................aa###.......................................", -"......................................aaa############################.........................................aaaa#########......................................................................................................aaa###.......................................", -"......................................aaa##########################............................cccc...........aaaa########.......................................................................................................aaa###.......................................", -".....................................aaaa########################aa........................cccccccccc.........aaaa########.......................................................................................................aa###........................................", -".....................................aaaa########################a.....................ccccccccccccccc........aaaa########.......................................................................................................aa###........................................", -".....................................aaaa######################aa...................cccccccccccccccccc........aaaa########......................................................................................................aaa###........................................", -".....................................aaaa#####################a...................cccccccccccccccccccc........aaaa#######.......................................................................................................aaa##.........................................", -".....................................aaaaa##################aa.................ccccccccccccccccccccccc........aaaa#######.......................................................................................................aa###.........................................", -".....................................aaaaaa##############aaa................cccccccccccccccccccccccccaaa......aaaa#######..................................................................#...................................aaa###.........................................", -".....................................aaaaaaa###########aaa................cccccccccccccccccccccccccccaaaa.....aaaa######...................................................................#...................................aa####.........................................", -".....................................aaaaaaaaa######aaaaa................cccccccccccccccccccccccccccaaaaa.....aaaa######..................................................................##...................................aa###..........................................", -"......................................aaaaaaaaaaaaaaaaa................ccccccccccccccccaaaaccccccccaaaaa......aaaa#####...................................................................##..................................aaa###..........................................", -".......................................aaaaaaaaaaaaaa.................cccccccccccccccaaaaaacccccccaaaaaa......aaaa#####................................................................a.###..................................aa####..........................................", -"........................................aaaaaaaaaaa.................ccccccccccccccaaaaaaaaaccccccaaaaaa.......aaaa####.................................................................a.###..................................aa####..........................................", -".........................................aaaaaaaa.................ccccccccccccaaaaaaaaaaaaccccccaaaaaaa.......aaaa####................................................................aa####.................................aaa###...........................................", -"................................................................cccccccccccaaaaaaaaaaaaaaacccccaaaaaaa........aaaa###................................................................aaa###..................................aa####...........................................", -"..............................................................cccccccccccaaaaaaaaaaaaa....ccccaaaaaaa.........aaaa#..................................................................aa####..................................aa####...........................................", -".............................................................ccccccccccaaaaaaaaaaa.......cccaaaaaaaa..........aaaa..................................................................aa####..................................aa####............................................", -"...........................................................ccccccccccaaaaaaaaaa.........ccc.aaaaaaa...........aaa...........aaa.....................................................aa####..................................aa####............................................", -"..........................................................cccccccccaaaaaaaaa..........cccc..aaaaaa............aa............aaa.....................................................a####...................................aa####............................................", -".........................................................cccccccccaaaaaaaa...........cccc..aaaaaa.............a............aaa##...................................................aa####...................................aa####............................................", -"........................................................ccccccccaaaaaaaa............ccc...aaaaaa...........................aaa##..................................................aa####...................................aa####.............................................", -"......................................................cccccccccaaaaaaa............cccc...aaaaaa...........................aaa##...................................................aa####...................................aa####.............................................", -".....................................................ccccccccaaaaaaaa............ccc....aaaaaa............................aa###..................................................aa####....................................aa####.............................................", -"....................................................ccccccccaaaaaaa............ccc.....aaaaaa............................aaa###..................................................aa####....................................aa####.............................................", -"..................................................ccccccccaaaaaaa.............cc.....aaaaaa..............................aa###..................................................aa####.....................................aa###..............................................", -".................................................cccccccaaaaaaa..............cc.....aaaaaa..............................aaa###..................................................aa####....................................aa####..............................................", -"................................................cccccccaaaaaaa.....................aaaaaa...............................aa###..................................................aa####.....................................aa####..............................................", -"...............................................ccccccaaaaaaa.....................aaaaaa................................aaa###..................................................aa####.....................................aa####..............................................", -"..............................................ccccccaaaaaaa.....................aaaaa.................................aaa####.................................................aa####......................................aa###...............................................", -".............................................ccccccaaaaaa.....................aaaaa...................................aaa###.................................................aaa####.....................................aa####...............................................", -"...........................................ccccccaaaaaaa.....................aaaa....................................aaa####.................................................aa####......................................aa####...............................................", -"..........................................ccccccaaaaaa..............................................................aaa####.................................................aaa####......................................aa####...............................................", -".........................................ccccccaaaaa...............................................................aaa#####.................................................aa####......................................aaa###................................................", -"........................................ccccccaaaaa................................................................aaa#####................................................aa####.......................................aa####................................................", -".......................................ccccccaaaaa................................................................aaa######................................................aa####.......................................aa####................................................", -"......................................ccccccaaaaa................................................................aaa######................................................aa####........................................aa###.................................................", -".....................................ccccccaaaaa.................................................................aaa#####.................................................aa####........................................a####.................................................", -"....................................ccccccaaaaa.................................................................aaa######................................................aa####........................................aa####.................................................", -"...................................ccccccaaaaa.................................................................aaa######.................................................aa####........................................aa####.................................................", -"..................................ccccccaaaaa..........................c.......................................aaa######................................................aa####.........................................aa####.................................................", -".................................ccccccaaaaa.......................ccccc......................................aaa######................................................aa#####........................................aa#####.................................................", -"................................cccccccaaaa......................cccccc......................................aaa######.................................................aa####.........................................aa#####.................................................", -"...............................ccccccccaaa.....................ccccccc......................................aaaa######................................................aa#####.........................................aa#####.................................................", -"..............................cccccccccaaa...................cccccccc...a...................................aaa######................................................aaa####.........................................aaa####..................................................", -".............................ccccccccccca..................ccccccccc..aaa..................................aaa######.................................................aa#####.........................................aaa####..................................................", -"............................ccccccccccccc................ccccccccccaaaaa..................................aaa#######................................................aa#####..........................................aa#####..................................................", -"............................cccccccccccccc.............cccccccccccaaaaa...................................aaa######....................................##...........aa#####..........................................aa#####..................................................", -"...........................ccccccccccccccccccccccccccccccccccccccaaaaa...................................aaa#######...................................####.........aa#####..........................................aaa#####..................................................", -"..........................ccccccccccccccccccccccccccccccccccccccaaaaa...................................aaa#######...................................######.......a######...........................................aaa####...................................................", -"..........................cccccccccccccccccccccccccccccccccccccaaaaa...................................aaa#######..................................a.######......a#######...........................................aa#####...................................................", -".........................cccccccccccccccccccccccccccccccccccccaaaaa....................................aaa#######..................................a########....########............................................aa#####...................................................", -".........................cccccccccccccccccccccccccccccccccccaaaaaa....................................aaa#######..................................a#####################...........................................aaa#####...................................................", -".........................ccccccccccccccccccccccccccccccccccaaaaaa....................................aaa#######..................................a#####################............................................aaa#####...................................................", -".........................ccccccccccccccccccccccccccccccccaaaaaaa.....................................aaa#######..................................a#####################............................................aaa####....................................................", -".........................cccccccccccccccccccccccccccccaaaaaaaaa.....................................aaa#######..................................a#####################.............................................aaa####....................................................", -"..........................ccccccccccccccccccccccccccaaaaaaaaaa.....................................aaa########.................................aa####################..............................................aa#####....................................................", -"..........................acccccccccccccccccccccccaaaaaaaaaa......................................aaa########.................................aa#####################..............................................aa#####....................................................", -"..........................aaacccccccccccccccccccaaaaaaaaaa........................................aaa#######.................................aa#####################..............................................aaa#####....................................................", -"..........................aaaaacccccccccccccccaaaaaaaaa..........................................aaa#######..................................aa####################...............................................aaa####.....................................................", -"...........................aaaaaaaacccccccccaaaaaaaaaa..........................................aaa########.................................aa#####################...............................................aaa####.....................................................", -"...........................aaaaaaacccccccccaaaaaaaa.............................................aa########.................................aaa####################................cc..............................aaa####.....................................................", -".............................aaaaccccccccaaaaaaaa..............................................aaa########.................................aa#####################..............cccc..............................aaa####..............ccccccc...............cccccccccc.......", -"...............................accccccccaaaaaaa...............................................aaa########.................................aaa####################.............ccccc...............................aa#####...........ccccccccc.............cccccccccccc........", -"..............................ccccccccaaaaaaaa..............................ccccc............aaa#########................ccccccc..........aa####################............cccccc...............................aaa#####........cccccccccc.............cccccccccc............", -".............................cccccccaaaaaaaa..............................ccccccc...........aaa########c...............cccccccccc........aa######aaa###########..........ccccccc..aa.............................aaa####.......cccccccccc..aaaaaa.....cccccccc....aaaaaaa.....", -"............................cccccccaaaaaaa..............................cccccccc...........aaaa########cc............cccccccccccc........aa######aaa##########.........ccccccc..aaaa.............................aaa####.....cccccccccc.aaaaaaaa....cccccccc..aaaaaaaaaa......", -"...........................cccccccaaaaaaa..............................ccccccccc...........aaa#######cccc...........ccccccccccccc.......aa######aaaaa########........ccccccc..aaaaa...cc.........................aaa####...ccccccccc..aaaaaaaa....cccccccc..aaaaaaaaaa........", -"..........................cccccccaaaaaa..............................ccccccccccaaa........aaa########cccc.........cccccccccccccca.......aa#####aaaaaaa######........ccccccc.aaaaa....cc..........................aaa####.ccccccccc.aaaaaaaaa....cccccccccaaaaaaaaaa...........", -".........................ccccccaaaaaa..............................ccccccccccccaaa.......aaaa#######ccccc.......cccccccccccccccca......aa######.aaaaaaa####.......ccccccc.aaaaa....cccc..........................aaa####ccccccc.aaaaaaaaaa....cccccccccaaaaaaaaa..............", -"........................ccccccaaaaaa..............................ccccccccccccaaa.......aaaa########ccccaa.....cccccccccccccccccaa.....aa#####..aaaaaaaaaa......ccccccccaaaaaa....cccc...........................aaa##ccccccccaaaaaaaaaa....cccccccccaaaaaaaa.................", -".......................ccccccaaaaaa..............................cccccccccccccaaa.......aaa########cccccaa....cccccccccccccccccaaa....aa#####....aaaaaaaa.....cccccccccaaaaa....ccccc............................aaa#ccccccccaaaaaaaaa.....cccccccccaaaaaaa...................", -"......................ccccccaaaaa...............................cccccccccccccaaaa......aaa########ccccccaa...ccccccccccccccccccaa....aaa#####.....aaaaaa.....ccccccccaaaaaa....cccccc.aaa........................aaacccccccaaaaaaaaa.....ccccccccccaaaaaa.....................", -".....................ccccccaaaaa..............................ccccccccccccccaaaa......aaaa########ccccccaa.cccccccccccccccccccaaa....aa#####...............ccccccccaaaaaa....cccccccaaaa.........................aaccccccaaaaaaaaa.....ccccccccccccaaaa.......................", -"....................ccccccaaaaa..............................cccccccccccccccaaa......aaaa########ccccccaa.ccccccccccccccccccccaaa...aaa####...............cccccccaaaaaa.....ccccccccaaa..........................acccccccaaaaaaa......ccccccccccccccca........................", -"...................ccccccaaaaa..............................cccccccccccccccaaaa...ccaaaa########cccccccaacccccccaacccccccccccaaa....aa#####..............cccccccaaaaa......ccccccccaaa..........................ccccccccaaaaaa.......ccccccccccccccccccccccccccccccccccc......", -"..................ccccccaaaaa.............................cccccccacccccccccaaa...ccaaaa########cccccccaaccccccaaaacccccccccccaaa...aaa#####............cccccccaaaaaa......cccccccccaaa.........................ccccccccaaaaa.........ccccccccccccccccccccccccccccccccccccc....", -".................ccccccaaaaa.............................cccccccaaccccccccaaaa..cccaaa#########cccccccacccccaaaaaaccccccccccaaa....aa#####............cccccccaaaaa.......cccccccccaaa.........................ccccccccaaaaa..........cccccccccccccccccccccccccccccccccccccc...", -"................ccccccaaaaa.............................cccccccaaccccccccaaaa..cccaaaa########cccccccccccccaaaaaaaccccccccccaaa....aa#####..........ccccccccaaaaa.......ccccccccccaaa........................ccccccccaaaaa.............aaaaaaaaaaaaaa.......cccccccccccccccc..", -"...............ccccccaaaaa.............................ccccccaaaaccccccccaaa..ccccaaa########cccccccccccccaaaaaaaacccccccccaaa....aa#####..........ccccccccaaaaa.......cccccccccccaa........................cccccccccaaaa.............aaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccc..", -"..............ccccccaaaaa............................cccccccaaaaacccccccaaa..ccccaaa#########ccccccccccccaaaaaa..ccccccccccaaa....aa#####.........ccccccccaaaaa.......cccccccccccaaa.......................cccccccccaaaa..............aaaaaaaaaaaaaaaaaaaaaaaaaaaaccccccccccc.", -".............ccccccaaaaa............................ccccccaaaaaaccccccccaa.cccccaaa########cccccccccccccaaaaa....ccccccccccaa....aa#####........cccccccccaaaaa........cccccccccccaaa......................cccccccccaaaa................aaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc.", -"............cccccccaaaa............................ccccccaaaaaaccccccccaaacccccaaaa########ccccccccccccaaaaa....cccccccccccaa....aa#####.......cccccccccaaaaa........ccccccccccccaa......................ccccccccccaaa......................................aaaaaaacccccccccca", -"...........cccccccaaaa............................ccccccaaaaaa.cccccccaaacccccaaaa########ccccccccccccaaaaa.....ccccccccccca....aaa####......ccccccccccaaaaa.........ccccccccccccaa.....................cccccccccccaa..........................................aaaacccccccccca", -"..........cccccccaaaa............................ccccccaaaaaa.ccccccccaaccccccaaa########cccccccccccccaaaa.....cccccccccccca....aaa####.....cccccccccccaaaa.........cccccccccccccaa....................cccccccccccaaa............................................aacccccccccca", -"..........cccccccaaa............................ccccccaaaaa..ccccccccaaacccccaaaa########ccccccccccccaaaa......cccccccccccca...aaa####.....cccccccccccaaaa..........cccccccccccccaa...................ccccccccccccaa..............................................acccccccccca", -".........cccccccaaaa...........................ccccccaaaaa...cccccccaaacccccaaaa########ccccccccccccaaaaa.....ccccccccccccc....aaa###.....cccccccccccaaaa..........ccccccccccccccaa..................cccccccccccccaa..............................................acccccccccca", -".........cccccccaaa..........................cccccccaaaaa...ccccccccaccccccaaaa########.cccccccccccaaaaa......ccccccccccccc....aaa###....ccccccccccccaaa...........ccccccccccccccaa.................ccccccccccccccaa..............................................acccccccccca", -"........ccccccccaa..........................cccccccaaaa.....cccccccaccccccaaaaa########cccccccccccaaaaa......cccccccccccccc...aaa####..cccc.ccccccccaaaa...........ccccccccccccccaa................cccccccccccccccca..............................................ccccccccccaa", -"........cccccccaaa.........................ccccccaaaaa.....cccccccaccccccaaaaa########ccccccccccccaaaa.......cccccccccccccc...aaa###.ccccc.ccccccccaaaa...........cccccccccccccccca..............cccccccccccccccccca..............................................ccccccccccaa", -".......ccccccccaa........................cccccccaaaaa.....ccccccccccccccaaaaa########.cccccccccccaaaa.......cccccccccccccccccaaaa##ccccc..cccccccccaaa............ccccccccccccccccc...........cccccccccccccccccccccc.................c............................cccccccccaaa", -".......ccccccccaa.......................ccccccaaaaa......cccccccccccccaaaaaa########.cccccccccccaaaa........cccccccccccccccccaaa###cccc...cccccccccaaa............cccccccccccccccccc.......cccccc..cccccccccccccccccc...............cc...........................cccccccccaaa.", -"......ccccccccca.......................ccccccaaaaa.......ccccccccccccaaaaaa########..ccccccccccaaaaa........cccccccccccccccccaaa###ccc..aacccccccccaa.............cccccccccccccccccccccccccccccc...cccccccccccccccccccc..........cccc...........................ccccccccaaaaa.", -"......ccccccccca.....................cccccccaaaaa........cccccccccccaaaaaaa########..cccccccccaaaaa.........cccccccccccccccccaaa##cc..aacccccccccccaa..ccc........cccccccccccccccccccccccccccc....cccccccccccccccccccccccccccccccc.............................ccccccccaaaaa..", -".....cccccccccca....................cccccccaaaaa........cccccccccccaaaaaaa########..cccccccccaaaaa..........ccccccccccccccccaaa###c.aaaaccccccccccccccccc.........cccccccccccccccccccccccccc....aaccccccccccccccccccccccccccccccc...........c.................ccccccccaaaaa...", -".....cccccccccca..................ccccccccaaaa..........ccccccccccaaaaaaaa########..ccccccccaaaaa...........ccccccccccccccccaaa###aaaaaaccccccccccccccc...........ccccccccccccccccccccccccc...aaaaccccccccccccccccccccccccccccc.......aaccccc................cccccccaaaaaa....", -"....cccccccccccc.................ccccccccaaaa..........ccccccccccaaaaaaaa########..ccccccccaaaaa............ccccccccccccccccaaa##aaaaaaccccccccccccccc............ccccccccccccccccccccccc..aaaaaa..cccccccccccccccccccccccccc...aaaaaacccccc...............cccccccaaaaaaa.....", -"....ccccccccccccc.............cccccccccaaaaa..........ccccccccccaaaaaaaa########..ccccccccaaaaa.............cccccccccccccccaaaa##aaaaaccccccccccccca....aaa.......ccccccccccccccccccccaaaaaaaaa....ccccccccccccccccccccaaaaaaaaaaaaccccccccccc..........ccccccccaaaaaaa.......", -"...cccccccccccccccc.......ccccccccccccaaaa............cccccccccaaaaaaaaa########..cccccccaaaaa..............cccccccccccccccaaa##aaaa.ccccccccccccccaaaaaaa........cccccccccccccccccccaaaaaaaa......acccccccccccccccccaaaaaaaaaaaaaccccccccccccccccccccccccccccaaaaaaaa........", -"...ccccccccccccccccccccccccccccccccccaaaa............cccccccccaaaaaaaaa########...ccccccaaaaa...............cccccccccccccccaaaaaaaa..ccccccccccccaaaaaaa...........ccccccccccccccccaaaaaaaaa.......aaccccccccccccaaaaaaaaaaaaaaa..ccccccccccccccccccccccccc.aaaaaaaa..........", -"..cccccccccccccccccccccccccccccccccaaaaa.............ccccccccaaaaa.aaa########...ccccccaaaaa.................ccccccccccccaaaaaaaa....cccccccccccaaaaaa.............acccccccccccccaaaaaaaaa..........aaaaaaaaaaaaaaaaaaaaaaaaa..........aacccccccccccccccc.aaaaaaaa............", -"..ccccccccccccccccccccccccccccccccaaaaa.............ccccccccaaaaa.aaa########....cccccaaaaa..................ccccccccccaaaaaaaaa.....cccccccccaaaaaaa..............aaacccccccccaaaaaaaaa............aaaaaaaaaaaaaaaaaaaaaaa..........aaaaaaaacccccccccaaaaaaaaaa..............", -"..cccccccccccccccccccccccccccccccaaaa...............cccccccaaaaa.aaaa#######....cccccaaaaa...................aaccccccaaaaaaaaaa......cccccccaaaaaaaa...............aaaaaaaaaaaaaaaaaaa..............aaaaaaaaaaaaaaaaaaa............aaaaaaaaaaaaaaaaaaaaaaaaaaa................", -"..ccccccccccccccccccccccccccccccaaaa...............cccccccaaaaa..aaa########...cccccaaaaa....................aaaaaaaaaaaaaaaa........ccccccaaaaaaa.................aaaaaaaaaaaaaaaaa.................aaaaaaaaaaaaaa................aaa.....aaaaaaaaaaaaaaaa...................", -"..ccccccccccccccccccccccccccccaaaaa...............cccccccaaaaa..aaa########.....cccaaaaa......................aaaaaaaaaaaaa...........aaaaaaaaaaa...................aaaaaaaaaaaaaa.....................aaaaaaa................................aaaaaaaaa.......................", -"..ccccccccccccccccccccccccccaaaaa.................ccccccaaaaa...aaa#######........aaaa........................aaaaaaaaaa..............aaaaaaaaa.......................aaaaaaaaa...............................................................................................", -"..cccccccccccccccccccccccccaaaaa.................ccccccaaaa....aaa#######........aaaa...........................aaaaa.................aaaaaaa.................................................................................................................................", -"..cccccccccccccccccccccccaaaaaa..................cccccaaaa.....aaa#######.......aaaa..................................................aaaaaa..................................................................................................................................", -"...ccccccccccccccccccccaaaaaa....................ccccaaaa.....aaa#######.........a.....................................................aaa....................................................................................................................................", -"...accccccccccccccccccaaaaaa.......................aaaaa......aaa######.......................................................................................................................................................................................................", -"...aacccccccccccccccaaaaaaa.......................aaaaa.......aa#######.......................................................................................................................................................................................................", -"....aaccccccccccccaaaaaaa.........................aaaa.......aaa######........................................................................................................................................................................................................", -"....aaaaccccccccaaaaaaa..........................aaa.........aaa######........................................................................................................................................................................................................", -".....aaaaaaaaaaaaaaaaa......................................aaa######.........................................................................................................................................................................................................", -"......aaaaaaaaaaaaaa........................................aaa####...........................................................................................................................................................................................................", -".......aaaaaaaaaaa.........................................aaa#####...........................................................................................................................................................................................................", -".........aaaaaaa...........................................aaa####............................................................................................................................................................................................................", -"...........................................................aaa####............................................................................................................................................................................................................", -"..........................................................aaa####.............................................................................................................................................................................................................", -"..........................................................aaa####.............................................................................................................................................................................................................", -"..........................................................aaa###..............................................................................................................................................................................................................", -".........................................................aaa###...............................................................................................................................................................................................................", -".........................................................aaa###...............................................................................................................................................................................................................", -".........................................................a.###................................................................................................................................................................................................................", -".........................................................a.##.................................................................................................................................................................................................................", -"...........................................................##.................................................................................................................................................................................................................", -"...........................................................#..................................................................................................................................................................................................................", -"..........................................................##..................................................................................................................................................................................................................", -".............................................................................................................................................................................................................................................................................." +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.H 9 4 w P ! 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.w : . , > q *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.^ J r q 9 K ^ q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.=.> , 2 *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.T J e 6 3 4 G E 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.R 4 : , , : U u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > : e w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.^ 8 , . > : 5 W y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.K , : > 2 ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : . , ~ a.a.a.a.a.a.a.a.a.a.a.a.a.u.I , > : , T u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > : > y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.w > : K a.a.a.a.a.a.a.a.a.a.a.<.4 : , 3 =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.6 : . : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.5 : > e u.a.a.a.a.a.a.a.a.E > > q 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ : . . : -.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.1 . : 5 q.a.a.a.a.a.u.w > . > I a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I > , q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.> . . 1 <.a.a.a.a.r : . : 8 w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.e : . w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > , *.a.a.L > . , >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : > y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : > T E > > ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J > > ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.w : . > : . : G u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T > 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.5 : . : 8 w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;., : w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.:.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.1 . . : , . . 3 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.3 > &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y., , q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.-.: : e -.P 1 > : . , <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : > > > E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U : . e a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > : ! a.a.a.a.9.y : , ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.> > > w ~ ! T 5 , U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y., > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.y > : 4 9.a.a.a.a.a.a.a.;.3 : : ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 > U u.a.a.a.a.a.^ , G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T > , y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.3 : > r u.a.a.a.a.a.a.a.a.a.u.T : , . 2 w e 4 : > , . > E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > : 4 ,.a.a.a.a.a.a.a.a.:.> w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u., : r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T : : I a.a.a.a.a.a.a.a.a.a.a.a.a.0.4 : . : q ;.u.a.a.a.a.a.0.;.E r : : : P a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3 > K u.a.a.a.a.a.a.a.a.a.a.R > 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.q > . : ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.9 > : r <.a.a.a.a.a.a.a.a.a.a.a.a.w.I , > > G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.a.a.a.a.a.! , : 1 ;.a.a.a.a.a.a.a.a.a.a.a.a.u.> 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 . : U a.a.a.a.a.a.a.a.a.a.a.u.T > . . , :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G : > ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.! 4 > : q y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 E a.a.a.a.1 > w y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ > : J y.a.a.a.a.a.a.a.a.^ 1 > : 3 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T > 1 <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! > . : 6 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! ^ a.a.a.W > > G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E : J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 : 1 &.a.a.a.a.y.^ 4 > , 8 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.w : . 2 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y., . <.a.a.a., : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.> > , e G 3 : > . > y u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H : > &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! , . . , *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.y : e a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : : u.a.a.;., : ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ > : Q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.7 . : H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.8 : > U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:., . H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.: e a.a.a.y . , -.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > > ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: : *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.1 , y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.y > > w y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.W > , ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.3 , *.a.a.a.> > 3 <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T : . 1 ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.> , W a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Y : : 3 <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J > > y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : , a.a.a.a.: > G u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 : 4 q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T > : 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > , E u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.9 > 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.-.: . P a.a.a.a.K > : ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Y : E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w > w y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.e , 0.a.a.I 1 e u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>., . > 3 =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:., : > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9., . : 9.a.a.a.a.a.:.9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y > <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.: > K a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.1 . 7 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.3 . . > q 9.a.a.a.a.a.a.a.a.a.a.a.a.T : 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.1 . y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q . . : ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.> > ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.9 : : H 0.a.a.a.a.a.a.a.a.0.w , , ! a.a.a.a.a.a.a.u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.3 . , w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a., : I a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.1 . : 5 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.> 4 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t : . : : 4 T :.y.a.u.,.H : : , u.a.a.a.a.a.a.w.6 q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.1 : : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: : 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.> : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.> : ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I : : , : , : , . . > T a.a.a.a.a.a.a.G 4 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > . 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;., 5 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.-.> : 3 >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:., . r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! : 4 u.a.a.a.a.a.a.<.> . 5 y.a.a.a.a.a.a.a.a.a.a.a.a.a.<.e : : ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U . : E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.3 : : > L u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.> : w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*., > :.a.a.a.a.a.a.a.q : 3 ,.a.a.a.a.a.a.a.a.a.a.9.r : . . w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.y > . > , T y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.> : E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,., : H a.a.a.a.a.a.a.-.> > E y.a.a.a.a.a.,.U 3 > . : 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.: q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.G : , > , , > > 7 ^ u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.1 . 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.4 : . 5 y.a.a.a.a.a.a.a.4 > : 5 r q 6 , , . , ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,., , ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.^ ~ :.y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.8 . > ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.G : 1 w.a.a.a.a.a.a.a.~ > . : r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E . > u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r > : L a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.1 : . > ,.a.a.a.a.a.a.a.u.1 1 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U , 1 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.H : . , ;.a.a.a.a.a.a.a.a.R > > >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.> , ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > . > =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.w : : : 4 0.a.a.a.a.a.a.a.a.u., , T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.> 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.> : r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.U 1 , . . > J u.a.a.a.a.a.a.a.a.a.T , . q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ : : P a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0., , w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.E *.y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.r > , . . , : r 0.a.a.a.a.a.a.a.a.a.a.y., . 3 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 . : ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.8 : , > ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.U 0 2 : : > : . , r ^ w.a.a.a.a.a.a.a.a.a.a.a.a.~ , 3 w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.K > . 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.3 . > t a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.0.y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y 3 w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: : E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.> : 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.6 . > G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 . 2 q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&., : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.> > U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y : > H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: : 6 q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7 . 3 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T , > ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r . , ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5 , &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.L > : ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.: > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.> : G y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: > u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.=.: . . e a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.-.a.a.a.a.a.0., . 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:., . . > 5 :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;., G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q., > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.L : . 8 a.a.a.a.a.8 . : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.q : > . , , K <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U . , ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 . : L a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ 1 : . , E a.a.a.a.U : . : >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.W 8 > 1 5 0 G *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T > 1 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.9 > . : e a.a.a.a.>.> . . 0 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: . I a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.: > ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T : . : q u.a.a.a.a.5 > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;., > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 . 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.8 : . : q u.a.a.a.a.*.: . J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.L . 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ > , -.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Q > . : w u.a.a.a.a.a.4 > u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w., 5 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.0 > : w u.a.a.a.a.a.a.*., . , >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: > <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r : . , &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , . : w u.a.a.a.a.a.a.a.a.9.4 : : W a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.> 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.e > > K a.a.a.a.a.a.a.a.a.a.a.u.y , G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H . U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.1 > ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*., . > W a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 : <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J > 2 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.y : . : =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.1 . . a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.> 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.: : ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > . : 1 <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.3 . : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! : . U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 . . : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.q : : 6 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.4 . > w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e , ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.> 5 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > . > y u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w., , 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a., 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q . P a.a.a.a.a.a.a.a.a.a.a.a.a.<.6 : : ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.> , ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,., . I a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.> , :.a.a.a.a.a.a.a.a.a.a.a.w.G : . . : 1 ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U : , :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T : , <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w : u.a.a.a.a.a.a.a.a.a.y.U > . . : w y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y., , -.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.> : a.a.a.a.a.a.a.a.a.! , : . : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T : , >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: . P a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : 9.a.a.a.a.a.>.J , : . , ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:., , ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.> 4 ^ 9.;.Y 3 , . : 8 w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 > w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I . 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r . > , , . : P u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.K . : u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 . P a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: : 2 >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*., : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: , ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ , . : H u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,., , a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*., , a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w : 1 =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q., 8 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J . y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: , r y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2 > ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;., . , ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.: : ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.: : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ > > e w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.: , :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ , 5 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T . > 4 ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.. . y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r . P a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H : , E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.. 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a., , :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.P > J y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: . J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<., : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&., > 0 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: , ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E : q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.> . > 6 *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q : Q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J > , > J <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.: > 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w > : > 6 ~ y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: , *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.E ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:., 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.^ y 0 H T <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.. 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T . y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U . H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.: , =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.: t a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 , *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.4.+.| F M v z c c c c c m | 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.: . 8 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 , ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.#.) m z z v c u u u u u u u u u u u c c v #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a., . : >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E : : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*., 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.o.D v z c u u u u u u u u u u u u u u u u u u u u c 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 : *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.: 8 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.K : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.+.Z c c c u u u u u u u u u u u u u u u u u u u u u u u u z X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : : :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 . , *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 > >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.O.V z c u u u u u u u u u u u u u u u u u u u u u u u u u u u u c X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.W 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! > 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: > a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.X.B x c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: , ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&., w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i...m c x u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u x } a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.&.w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e . 1 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J . E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.F c c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.0 . T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.> : ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3 , >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.#.m c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y., 3 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.{ c c u u u u u u u u u u u u u u u u u u u u u u u c c x v V ) S M c u u u u u u u c 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! : 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : : *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&.> 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.A c z u u u u u u u u u u u u u u u u u u u u u c u m { +.5.p.a.a.a.a.a.2.z u u u u u c O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.> : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.: q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H L a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.Z c u u u u u u u u u u u u u u u u u u u u z c c F #.i.a.a.a.a.a.a.a.a.a.a.| z u u u u c o.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 . : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.4 : 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3 , &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r./ z u u u u u u u u u u u u u u u u u u u u x M .6.a.a.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u c 2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U > . G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Y > . J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: > w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.{ z z u u u u u u u u u u u u u u u u u u c v | r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u x b 7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.> : <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.> > y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p...c z u u u u u u u u u u u u u u u u u c c F 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.z u u u c B i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.1 . 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 > R a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.b c u u u u u u u u u u u u u u u u u c B +.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a...c u u u c { p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G : > ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! : 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3 : W a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.C c u u u u u u u u u u u u u u u u u c S 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a._ c u u c m 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > > u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.> > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: , <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.v z u u u u u u u u u u u u u u u u c S 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.m c u u z } a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q., . P a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : . q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.` c u u u u u u u u u u u u u u u u c S 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.c u u c m 7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 . : 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.> : <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H 8 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.m c u u u u u u u u u u u u u u u c S 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.) c u u z | a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T , q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.1 : J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3 . I a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.X.c u u u u u u u u u u u u u u u c m 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.M z u c m e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.: > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : , y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: , -.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.C c u u u u u u u u u u u u u u u z } a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.m x c v O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0., > T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.: : E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.b z u u u u u u u u u u u u u u z b 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.M u v o.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.4 . 8 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.4 . 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.v u u u u u u u u u u u u u u u c / p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.#.7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : , 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T > > >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2 y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.c u u u u u u u u u u u u u u x c 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I : : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.: : K a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: : ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2.c u u u u u u u u u u u u u u x m t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ : . 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 . 2 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , , 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u u u u z B i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.> . : 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.L : > ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.z u u u u u u u u u u u u u u z B p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.1 : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.> : H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2 0 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.u u u u u u u u u u u u u u u u n p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.8 . . 5 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.> . 1 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.> . Y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.v u u u u u u u u u u u u u u u c 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y : > <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ q.a.a.a.a.a.a.a.a.a.a.a.u.4 > =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ : , :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.M u u u u u u u u u u u u u u u c o.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T : > T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ . 3 w.a.a.a.a.a.a.a.a.a.u.e : . r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.F c u u u u u u u u u u u u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.=.> . q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > . 4 y.a.a.a.a.a.a.a.y.7 : , y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 . 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a...c u u u u u u u u u u u u u u u c @.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.> , w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.> : 5 y.a.a.a.a.a.,.3 : > ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.> H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.c u u u u u u u u u u u u u u u u v a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.2 . . > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w., . 2 =.u.u.;.0 > . w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , > ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a./ u u u u u u u u u u u u u u u u u / a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.@./ 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 . : K a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.6 . . , > : , : q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y > 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.c u u u u u u u u u u u u u u u u x ..a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.F c c u ` a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : 5 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G : , ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 , a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.F u u u u u u u u u u u u u u u u u c $.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.Z c x u c ) a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! > : 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! , . 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.> w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.c u u u u u u u u u u u u u u u u u v 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2.V c u u u z O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.: > ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.: > 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ > : R a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.c u u u u u u u u u u u u u u u u u u A a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.$.m c u u u u v 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.> : r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.1 > ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J , >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.' u u u u u u u u u u u u u u u u u u u x +.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.O.b c u u u u c M t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.4 . 1 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e . : y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 : u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.V u u u u u u u u u u u u u u u u u u u u z { p.a.a.a.a.a.a.a.a.a.a.7. .m c c u u u u u c _ p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : > :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&., 4 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.v u u u u u u u u u u u u u u u u u u u u u x x F $.3.2.2.1.1.1.` v c x u u u u u u x v 2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I > . : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.1 > ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: . I a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.B u u u u u u u u u u u u u u u u u u u u u u u u c v c v v v v u u u u u u u u u c D i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > : 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H : . > W a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>., . , =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.] u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u x c #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.> 2 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.> : e a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ > , u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.@.c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c C r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.1 > <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.3 . 6 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.L . y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.b u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u z v #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 . : &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U > . 3 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q , *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c ` p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y : , U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.> : 2 : 1 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 > u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.F c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c B 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T , : r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 . : Y u.y > . , ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 : W a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a./ c u u u u u u u u u u u u u u u u u u u u u u u u u u z v @.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.=.: . 6 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > > U a.a.a.E > . : 7 w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 5 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.{ c u u u u u u u u u u u u u u u u u u u u u u u u c ` i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9., , w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 . e a.a.a.a.a.;., : . : : J u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&. 3 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.m c u u u u u u u u u u u u u u u u u u u u c B 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.3 . > ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > > y.a.a.a.a.a.a.q.Q G T y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.) c c u u u u u u u u u u u u u u u z c +.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 : > ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y., > &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.v u u u u u u u u u u u u u c ` i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.K > > U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I : : r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.6.1.X.` / @.t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.C c u u u u u u u u u u u c V 7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ : : e a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: , y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3./ M m 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.e.e.r.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.#.V z c v c u u c z m t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.v u u u u u u u u u u u z b 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.6.3.p.a.a.a.a.a.a.a.a.a.:.: . 5 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G : > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.} b c u u z e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.2.O. ./ V m c u v c c u V a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.F z c u u u u u u u u u x M a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p._ c u u u u u u u u u u z c o.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.D c c c D a.a.a.a.a.a.a.a.q., , 8.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.1.| / ..$.i.a.a.a.a.a.a.a.<.: : t a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.F z c u u z v 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.2.} V u c c c u u u u u u u u c c { a.a.a.a.a.a.a.a.a.a.a.a.p...v v z u u u u u u u u u u z x ..a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.m c u u u u u u u u u u c ` t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.$.M z u u u u A a.a.a.a.a.a.a.u.4 . X $ a d f x c u v / i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.| v x c u u u c M p.a.a.a.a.a.a.w . > y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.D x u u u u x F t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.| m z c u u u u u u u u u u u u c v | t.a.a.a.a.a.a.a.a.a.a.a.a.o.v c u u u u u u u u c u n Z _ o.6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.O.z u u u u u u u u u u c C 7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.| v c u u u u u c 2.a.a.a.a.a.a.a.e : ; # g k k u u u u u u u z b 6.a.a.a.a.a.a.a.a.a.a.a.2.C c z u u u u u u u z ..a.a.a.a.a.>.: > E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.A c u u u u c M 5.a.a.a.a.a.a.6.e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.@.V z c u u u u u u u u u u u u u c n O.p.a.a.a.a.a.a.a.a.a.a.a.a.O.b c u u u u u u u c m | 2.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.S c u u u u u u u u u c n 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.b z u u u u u u u V a.a.a.a.a.a.a.U < a k k u u u u u u u u u u u u { a.a.a.a.a.a.a.a.a.6.V c u u u u u u u u u u c +.a.a.a.a.a.e . 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.C c u u u u c b #.a.a.a.a.a.a.e.F m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.b c u u u u u u u u u u u u u u c B 1.a.a.a.a.a.a.a.a.a.a.a.a.a.+.b x u u u u u u x x D 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.v x u u u u u u u u z c o.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ x u u u u u u u u z 5.a.a.a.a.a.a.&.- k u u u u u u u u u u u u u u u F a.a.a.a.a.a.a.t./ c u u u u u u u u u u u u v 6.a.a.a.a.w.: > ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.V c u u u u c c .p.a.a.a.a.a.i.` x u #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.B c u u u u u u u u u u u u u c v { e.a.a.a.a.a.a.a.a.a.a.a.a.a.+.b c u u u u u u z c | t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.{ c u u u u u u u u u z D i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.m c u u u u u u u u u D a.a.a.a.a.a.%.h k u u u u u u u u u u u u u u u x ..a.a.a.a.a.a.| z x u u u u u u u u u u u u u c p.a.a.a.a.I : . r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.B c u u u u u c / t.a.a.a.a.a.a. .c z u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.) c u u u u u u u u u u u u z c D 1.p.a.a.a.a.a.a.a.a.a.a.a.a.a.$.b x u u u u u u x z ` i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.M c u u u u u u u u u c $.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a...c u u u u u u u u u u z e.a.a.a.a.a.[ k u u u u u u u u u u u u u u u u u c 3.a.a.a.a.e.M z u u u u u u u u u u u u u u x } a.a.a.a.u., : w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.F c u u u u u c B 6.a.a.a.a.a.a.2.v c u u c 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.b z u u u u u u u u u u u c c { t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.n x u u u u u u u c F e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.v u u u u u u u u u c D i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.B c u u u u u u u u u u z / a.a.a.a.6.n k u u u u u u u u u u u u u u u u u u c a.a.a.a.X.c u u u u u u u u u u u u u u u u z i.a.a.a.a.! > > T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u u u z v #.a.a.a.a.a.a.p._ c u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u u u u u u u u u u c ] i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.m x u u u u u u u u c +.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u x v 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c x u u u u u u u u u u u z r.a.a.a.+.c u u u u u u u u u u u u u u u u u u u u ' a.a.e.V c u u u u u u u u u u u u u u u u z ] a.a.a.a.a.4 3 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.O.c x u u u u x x { p.a.a.a.a.a.a.5.b x u u u u z 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.m z u u u u u u u u u u u c C e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.C c u u u u u u u u u v $.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.X.c u u u u u u u u c F t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.` c u u u u u u u u u u u u c { a.a.a.` c u u u u u u u u u u u u u u u u u u u u c 6.a.O.c x u u u u u u u u u u u u u u u u u z r.a.a.a.a.;., > =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2.m z u u u u u c A e.a.a.a.a.a.a.p.` c u u u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.b u u u u u u u u u u u u c O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.O.c x u u u u u u u u u u z c ) ..O.#.1.3.e.r.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.` z u u u u u u u u c #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.m c u u u u u u u u u u u u u c i.a.i.C c u u u u u u u u u u u u u u u u u u u u u m t.C c u u u u u u c u u u u u u u u u u u x F a.a.a.a.a.w 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.Z c u u u u u c n 1.a.a.a.a.a.a.a.6.m x u u u u u u c #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u u u u u u u u x m r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.A c u u u u u u u u u u u u u u u u z c v v c c u u x v b M V A { +.6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.{ c u u u u u u u u c +.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.$.c u u u u u u u u u u u u u u c O.a.6.b u u u u u u u u u u u c x v u u u u u u u u z V c u u u u u u c / +.c u u u u u u u u u u x 6.a.a.a.a.w.: : :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.) c u u u u u u c ..a.a.a.a.a.a.a.a.X.c u u u u u u u u v a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u z B i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c c v | i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a. .c u u u u u u u u c X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.) c u u u u u u u u u u u u u u x M a.$.c u u u u u u u u u k k ( 3.7.{ z u u u u u u u z c u u u u u c M e.a.5.v u u u u u u u u u u C a.a.a.a.a.T : 0 a.a.a.a.a.a.a.a.a.a.a.a.a.p.| c z u u u u u c m e.a.a.a.a.a.a.a.a. .z u u u u u u u u c ..a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.c u u u u u u u u u u u c C p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.B x c x u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u x x ..a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.O.c u u u u u u u u c } a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.b c u u u u u u u u u u u u u u u x 6.{ z u u u u u u u u k l * ,.a.a.a./ u u u u u u u u u u u u u u z { p.a.a.| z u u u u u u u u u c 2.a.a.a.a.a.4 > >.a.a.a.a.a.a.a.a.a.a.a.a.5.m c u u u u u u c F p.a.a.a.a.a.a.a.a.} c u u u u u u u u u c i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.c u u u u u u u u u u u u v p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.4.X.{ _ F D Z C B M M V C A F D C V M m b x c c u u u u u u u u u u u u z 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.z u u u u u u u u x F a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u c b v u u u u u u u u u u x / C c u u u u u u u u k p > ^ a.a.a.6.c u u u u u u u u u u u u u c +.a.a.a.p.v u u u u u u u u u u m a.a.a.a.a.9.: . w a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u u u u u c O.a.a.a.a.a.a.a.a.a.+.z u u u u u u u u u u ` a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.V u u u u u u u u u u u u c 2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.| c c u u u u u u u u u u u v p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.c u u u u u u u u u z t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.m c u u u c } a.m u u u u u u u u u u u x x u u u u u u u u k & : U a.a.a.a.V u u u u u u u u u u u u u z #.a.a.a.a.+.c u u u u u u u u u c +.a.a.a.a.a.I . > <.a.a.a.a.a.a.a.a.a.a.5.n c u u u u u u z n 7.a.a.a.a.a.a.a.a.a.e.z u u u u u u u u u u x e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.` c u u u u u u u u u u u z F a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u u u u u u u u v 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.m u u u u u u u u u x } a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u c M e.a.e.x u u u u u u u u u x u u u u u u u u u u k % : e a.a.a.a.+.c u u u u u u u u u u u u z 1.a.a.a.a.a.b u u u u u u u u u u x i.a.a.a.a.a.1 . r a.a.a.a.a.a.a.a.a.p._ c u u u u u u u c D p.a.a.a.a.a.a.a.a.a.p.m u u u u u u u u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.c u u u u u u u u u u u u c r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a./ c u u u u u u u u u z O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.F x u u u u u u u u u v p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.m c u u u x F p.a.a.D u u u u u u u u u u x u u u u u u u u u k @ . 4 y.a.a.a.e.c u u u u u u u u u u u u c 2.a.a.a.a.a.1.c u u u u u u u u u u V a.a.a.a.a.>., > 9.a.a.a.a.a.a.a.a.3.b c u u u u u u u c ` a.a.a.a.a.a.a.a.a.a.a.| c u u u u u u u u u u u F a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.c u u u u u u u u u u u u u c a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.u u u u u u u u u u u ) a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.c u u u u u u u u u x | a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.| c u u u u z ..a.a.a.5.c u u u u u u u u u u u u u u u u u u u k O , 0.a.a.a.a.m u u u u u u u u u u u u c 3.a.a.a.a.a.a.V u u u u u u u u u u c O.a.a.a.a.a.H . : L a.a.a.a.a.a.a.p.) c u u u u u u u u c S a.a.a.a.a.a.a.a.a.a.a.i.c u u u u u u u u u u u z X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.b u u u u u u u u u u u u u u C a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.m u u u u u u u u u u D a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.c u u u u u u u u u u c 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.M c u u u u c 2.a.a.a.a.V u u u u u u u u u u u u u u u u u u u l o : :.a.a.a.a.{ c u u u u u u u u u u u c 3.a.a.a.a.a.a.6.c u u u u u u u u u u z r.a.a.a.a.a.4 . 1 y.a.a.a.a.a.a.2.b u u u u u u u u u z V p.a.a.a.a.a.a.a.a.a.a.a.` z u u u u u u u u u u u c X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.S z u u u u u u u u u u u u u u { a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.A u u u u u u u u u x ..a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.C x u u u u u u u u u u u p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.X.c u u u u c M r.a.a.a.a.$.c u u u u u u u u u u u u u u u u u u f o . : Q a.a.a.a.2.c u u u u u u u u u u u c 5.a.a.a.a.a.a.a.F u u u u u u u u u u u M a.a.a.a.a.a.U 8 q.a.a.a.a.a.i.F c u u u u u u u u u u M p.a.a.a.a.a.a.a.a.a.a.a.i.u u u u u u u u u u u u u u | a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.} c u u u u u u u u u u u u u u u F a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.m u u u u u u u u u c 2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2.z u u u u u u u u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.V c u u u u c { a.a.a.a.a.t.v u u u u u u u u u u u u u u u u u k g X > J a.a.a.a.p.v u u u u u u u u u u u c 6.a.a.a.a.a.a.a.r.z u u u u u u u u u u x | a.a.a.a.a.a.a.a.a.a.a.a.a.+.v u z u c u u u u u u u b r.a.a.a.a.a.a.a.a.a.a.a.a.O.c u u u u u u u u u u u u u C a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.F c u u u u u u u u u u u u u u u u b a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.u u u u u u u u u u x r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.m u u u u u u u u u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a. .c u u u u z c 2.a.a.a.a.a.a.S u u u u u u u u u u u u u u u u u k i . 0 a.a.a.a.a.} c u u u u u u u u u u c 3.a.a.a.a.a.a.a.a.] z u u u u u u u u u u c #.a.a.a.a.a.a.a.a.a.a.a.e.C c u x Z c u u u u u u u c 2.a.a.a.a.a.a.a.a.a.a.a.a.a.B u u u u u u u u u u u u u u c t.a.a.a.a.a.a.a.a.a.a.a.a.7.m c u u u u u u u u u u u u u u u u u z p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u u u u u u V a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.X.z u u u u u u u u u u u u c a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.b z u u u u c V r.a.a.a.a.a.a.+.c u u u u u u u u u u u u u u u u k s . 2 y.a.a.a.a.e.x u u u u u u u u u u c o.a.a.a.a.a.a.a.a.p.c u u u u u u u u u u u c 7.a.a.a.a.a.a.a.a.a.a.X.c u u c 1.S u u u u u u u u B a.a.a.a.a.a.a.a.a.a.a.a.a.r.x u u u u u u u u u u u u u u c B p.a.a.a.a.a.a.a.a.a.e.| z u u u u u u u u u u u u u u u u u u u v 1.a.a.a.a.a.a.a.a.a.a.a.a.a.e.X.| X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Z u u u u u u u u u c 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.c u u u u u u u u u u u u u c e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.M c u u u u u c } a.a.a.a.a.a.a.r.c u u u u u u u u u u u u u u u u u p > 9.a.a.a.a.a.F u u u u u u u u u u c _ a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u u a.a.a.a.a.a.a.a.a.6.m c u c V t.2.z u u u u u u u c o.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u u u u u x b +.t.a.a.a.r.5.O.B z c u u c z u u u u u u u u u u u u u u u u u v e.a.a.a.a.a.a.a.a.a.a.2.V z c u u Z a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u u u u u c O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.@.c u u u u u u u u u u u u u u { a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.D c u u u u u z b 6.a.a.a.a.a.a.a.a.C u u u u u u u u u u u u u u u u k = > =.a.a.a.a.a.t.c u u u u u u u u u u V a.a.a.a.a.a.a.a.a.a.} u u u u u u u u u u u u n a.a.a.a.a.a.a.i._ x u u x .a.a.b u u u u u u u u c 3.a.a.a.a.a.a.a.a.a.t.$._ ` } u u u u u u u u u u u u u u u u u u c c c c u c c c u u u c n 5.u u u u u u u u u u u u u u u u u u u z F 1.5.e.t.a.7.O.D c c u u u c C e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.n u u u u u u u u c +.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.M u u u u u u u u u u u u u u u c 7.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c c u u u u u c ) p.a.a.a.a.a.a.a.a.O.c u u u u u u u u u u u u u u u k # > T a.a.a.a.a.a. .z u u u u u u u u u b p.a.a.a.a.a.a.a.a.a.a.B u u u u u u u u u u u u m a.a.a.a.a.a.$.v x u z n 6.a.a.X.z u u u u u u u u c ` a.a.a.a.p.7.#./ b z z u Z C u u u u u u u u u u u u u u u u u u u u u u u u u u u u c } a.a.u u u u u u u u u u u u u u u u u u u u u c v c z u c z u u u u c b 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.b u u u u u u u c C r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.x u u u u u u u u u u u u u u u u b 6.a.a.a.a.a.a.a.a.a.a.3._ c c u u u u u z v 2.a.a.a.a.a.a.a.a.a.r.x u u u u u u u u u u u u u u u k $ > y a.a.a.a.a.a.a.v u u u u u u u u u c e.a.a.a.a.a.a.a.a.a.a.p.c u u u u u u u u u u u u v a.a.a.a.e.C c u u z ` p.a.a.a.c u u u u u u u u u u c v C m u z c c u u u c | a.C u u u u u u u u u u u u u u u u u u u u u u u u u u c C 6.a.a.a.u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u z c ..p.a.a.a.a.a.a.a.a.a.a.3.o.) 7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.b z u u u u u x c O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.{ u u u u u u u u u u u u u u u u u u z ) 1.e.a.a.a.p.3.` c v u u u u u u u c D i.a.a.a.a.a.a.a.a.a.a.C u u u u u u u u u u u u u u u k + : 6 u.a.a.a.a.a.a.7.c u u u u u u u u c 1.a.a.a.a.a.a.a.a.a.a.a.t.x u u u u u u u u u u u u c 5.a.1.C c u u c m 3.a.a.a.a.$.c u u u u u u u u u u u u u u u u u u u c Z e.a.a.A u u u u u u u u u u u u u u u u u u u u u u u u c M 2.a.a.a.a.a.b u u u u u u u u u u u u u u u u u u u u u u u u u u u u c F t.a.a.a.a.a.a.a.a.p.$.F c c x z o.a.a.a.a.a.a.a.a.a.a.a.a.a.2.V c u u u u u u c C r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.b u u u u u u u u u u u u u u u u u u u u c c z u u x c u u u u u u u u x c #.a.a.a.a.a.a.a.a.a.a.a.o.c u u u u u u u u u u u u u u l o 1 w.a.a.a.a.a.a.a.O.c u u u u u u u u B a.a.a.a.a.a.a.a.a.a.a.a.a.u u u u u u u u u u u u u u c u v u u u x } p.a.a.a.a.a.M u u u u u u u u u u u u u u u u u u c v 1.a.a.a.a./ u u u u u u u u u u u u u u u u u u u u u u c b #.a.a.a.a.a.a.a.{ z u u u u u u u u u u u u u u u u u u u u u u u u u c m 5.a.a.a.a.a.a.a.a.2.Z z c u u u u u V 6.a.a.a.a.a.a.a.a.i.1.{ m c u u u u u u v b +.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.z u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c V r.a.a.a.a.a.a.a.a.a.a.a.i.c u u u u u u u u u u u u u z j X . : ,.a.a.a.a.a.a.a.a._ u u u u u u u u x 6.a.a.a.a.a.a.a.a.a.a.a.a.a.u u u u u u u u u u u u u u u u u u c B e.a.a.a.a.a.a.a.c u u u u u u u u u u u u u u u u u c { p.a.a.a.a.a.$.c u u u u u u u u u u u u u u u u u u u x v o.a.a.a.a.a.a.a.a.a.r.c u u u u u u u u u u u u u u u u u u u u u u x x C 2.a.a.a.a.a.a.a.a.3.M c u u u u u u u u z c u m / F D Z C b x c u u u u u u c z A 2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u z c X.a.a.a.a.a.a.a.a.a.a.a.a.a.) z u u u u u u u u u u u u c N < > ^ a.a.a.a.a.a.a.a.a._ u u u u u u u x F a.a.a.a.a.a.a.a.a.a.a.a.a.a.v u u u u u u u u u u u u u u u x c o.a.a.a.a.a.a.a.a.a.u u u u u u u u u u u u u u u x x ) r.a.a.a.a.a.a.a.p.c u u u u u u u u u u u u u u u u u c c | i.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u u u u u u u u u u u u u u u u c x ` e.a.a.a.a.a.a.a.a.a.6.z u u u u u u u u u u u u u u u u u u u u u u u u u u c v | t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.o.c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u x D r.a.a.a.a.a.a.a.a.a.a.a.a.a.7.z u u u u u u u u u u u u c ) 8 > I a.a.a.a.a.a.a.a.a.a. .x u u u u u u x t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.X.c u u u u u u u u u u u u u c S r.a.a.a.a.a.a.a.a.a.i.z u u u u u u u u u u u u z c ) r.a.a.a.a.a.a.a.a.a.a.2.u u u u u u u u u u u u u u c x C +.i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.F c c u u u u u u u u u u u u u c c A O.p.a.a.a.a.a.a.a.a.a.a.a.t.M x c c c u u u u u u u u u u u u u u u u u u v c v A 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a./ u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u x b 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.C u u u u u u u u u u u u c ..;., : 9 a.a.a.a.a.a.a.a.a.a.a.7.c u u u u u x { a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.b u u u u u u u u u u c c _ e.a.a.a.a.a.a.a.a.a.a.a.a.` c u u u u u u u u u c v } r.a.a.a.a.a.a.a.a.a.a.a.a.a.1.b c u u u u u u u u c u B O.t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.| V z c v v c c c c u c M } 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.1.X.) V v x c v c c u c z c c c z b S .2.t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a./ u u u u u u u u u u u u u u u u u u u u u u u u u u u u u z } a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u c @.a.8 , w.a.a.a.a.a.a.a.a.a.a.a.a.S x u u u u z e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.b c u u u u u u c n O.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.V c u u u u v c c / 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.F n z v m B S / X.r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.3.1.+.@.3.e.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.e.3.1.+.X.X.O.O.@.3.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.` u u u u u u u u u u u u u u u u u u u u u u u u u u u c Z e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.V u u u u u u u u u u u c 3.a.;., > *.a.a.a.a.a.a.a.a.a.a.a.a.a.i.V c u u x Z a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p...M z u x m / 2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.| { _ { $.e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a. .u u u u u u u u u u u u u u u u u u u u u u u u u z b 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.z u u u u u u u u u z n e.a.a.9 > K a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.b x m t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.O.c u u u u u u u u u u u u u u u u u u u u u u z c { p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.v u u u u u u u u c Z p.a.a.9.> . 5 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u u u u u u u u u u u u u u u u u c c { t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.c u u u u u u u c { a.a.a.a.K : > 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.n u u u u u u u u u u u u u u u u u u x c ` t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u u u u u u u c #.a.a.a.a.u.> > ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.o.z u u u u u u u u u u u u u u u u z ` r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.{ c u u u c b 7.a.a.a.a.a.^ , : H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.c u u u u u u u u u u u u u u c ) r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.D c c v ..p.a.a.a.a.a.a.9 . 6 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.c u u u u u u u u u u c c { e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.e.a.a.a.a.a.a.a.a.0.> , 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.v v z u u u v c c / 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Q : > -.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.1.X.) D | $.7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.L J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", +"a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a." }; commit 4ab6e74a1c76cd3a3c2e57aa48e853385365b423 Author: Paul Eggert Date: Thu Jan 29 15:32:15 2015 -0800 Report readdir failures Previously, on non-MS-Windows platforms the code treated most readdir failures as EOF. This was incorrect, e.g., when readdir fails with errno == EOVERFLOW. Signal an error instead. * dired.c (read_dirent): New function, which signals an error when readdir fails. (directory_files_internal, file_name_completion): Use it. diff --git a/src/ChangeLog b/src/ChangeLog index 96e6aa2..029ac88 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2015-01-29 Paul Eggert + + Report readdir failures + Previously, on non-MS-Windows platforms the code treated most + readdir failures as EOF. This was incorrect, e.g., when readdir + fails with errno == EOVERFLOW. Signal an error instead. + * dired.c (read_dirent): + New function, which signals an error when readdir fails. + (directory_files_internal, file_name_completion): Use it. + 2015-01-29 Eli Zaretskii * dired.c (directory_files_internal, file_name_completion) diff --git a/src/dired.c b/src/dired.c index f0e81b6..23a8674 100644 --- a/src/dired.c +++ b/src/dired.c @@ -120,6 +120,25 @@ directory_files_internal_unwind (void *dh) unblock_input (); } +/* Return the next directory entry from DIR; DIR's name is DIRNAME. + If there are no more directory entries, return a null pointer. + Signal any unrecoverable errors. */ + +static struct dirent * +read_dirent (DIR *dir, Lisp_Object dirname) +{ + while (true) + { + errno = 0; + struct dirent *dp = readdir (dir); + if (dp || errno == 0) + return dp; + if (! (errno == EAGAIN || errno == EINTR)) + report_file_error ("Reading directory", dirname); + QUIT; + } +} + /* Function shared by Fdirectory_files and Fdirectory_files_and_attributes. If not ATTRS, return a list of directory filenames; if ATTRS, return a list of directory filenames and their attributes. @@ -138,7 +157,6 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full, bool needsep = 0; ptrdiff_t count = SPECPDL_INDEX (); struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5; - struct dirent *dp; #ifdef WINDOWSNT Lisp_Object w32_save = Qnil; #endif @@ -221,36 +239,13 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full, || !IS_ANY_SEP (SREF (directory, directory_nbytes - 1))) needsep = 1; - /* Loop reading blocks until EOF or error. */ - for (;;) + /* Loop reading directory entries. */ + for (struct dirent *dp; (dp = read_dirent (d, directory)); ) { - ptrdiff_t len; - bool wanted = 0; - Lisp_Object name, finalname; + ptrdiff_t len = dirent_namelen (dp); + Lisp_Object name = make_unibyte_string (dp->d_name, len); + Lisp_Object finalname = name; struct gcpro gcpro1, gcpro2; - - errno = 0; - dp = readdir (d); - if (!dp) - { - if (errno == EAGAIN || errno == EINTR) - { - QUIT; - continue; - } -#ifdef WINDOWSNT - /* The MS-Windows implementation of 'opendir' doesn't - actually open a directory until the first call to - 'readdir'. If 'readdir' fails to open the directory, it - sets errno to ENOENT or EACCES, see w32.c. */ - if (errno) - report_file_error ("Opening directory", directory); -#endif - break; - } - - len = dirent_namelen (dp); - name = finalname = make_unibyte_string (dp->d_name, len); GCPRO2 (finalname, name); /* Note: DECODE_FILE can GC; it should protect its argument, @@ -263,9 +258,8 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full, immediate_quit = 1; QUIT; - if (NILP (match) - || re_search (bufp, SSDATA (name), len, 0, len, 0) >= 0) - wanted = 1; + bool wanted = (NILP (match) + || re_search (bufp, SSDATA (name), len, 0, len, 0) >= 0); immediate_quit = 0; @@ -498,32 +492,12 @@ file_name_completion (Lisp_Object file, Lisp_Object dirname, bool all_flag, record_unwind_protect_ptr (directory_files_internal_unwind, d); - /* Loop reading blocks */ - /* (att3b compiler bug requires do a null comparison this way) */ - while (1) + /* Loop reading directory entries. */ + for (struct dirent *dp; (dp = read_dirent (d, dirname)); ) { - struct dirent *dp; - ptrdiff_t len; + ptrdiff_t len = dirent_namelen (dp); bool canexclude = 0; - errno = 0; - dp = readdir (d); - if (!dp) - { - if (errno == EAGAIN || errno == EINTR) - { - QUIT; - continue; - } -#ifdef WINDOWSNT - if (errno) - report_file_error ("Opening directory", dirname); -#endif - break; - } - - len = dirent_namelen (dp); - QUIT; if (len < SCHARS (encoded_file) || (scmp (dp->d_name, SSDATA (encoded_file), commit eadf313c72edcc3a11b9d03032699416efebfe1a Merge: 7c8b0b3 ad588af Author: Paul Eggert Date: Thu Jan 29 13:54:51 2015 -0800 Merge from origin/emacs-24 ad588af Improve the fix for bug #19701 Conflicts: src/ChangeLog commit 7c8b0b3644ada886dfde4032fdf38687a5968089 Merge: 1dc1959 ba10f4b Author: Paul Eggert Date: Thu Jan 29 13:53:12 2015 -0800 Merge from origin/emacs-24 The following commit was skipped: ba10f4b Fix issues with BibTeX entries containing ")". commit 1dc1959ebf50401c69adeb6d182950b59835f94d Author: Eli Zaretskii Date: Thu Jan 29 20:46:03 2015 +0200 Commit src/ChangeLog for previous commit. diff --git a/src/ChangeLog b/src/ChangeLog index 9378c9d..36a3e8d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,16 @@ +2015-01-29 Eli Zaretskii + + Use bool for boolean in w32menu.c, w32font.c, w32uniscribe.c. + * w32uniscribe.c (uniscribe_list, uniscribe_match): Use bool where + appropriate. + + * w32font.c (struct font_callback_data, w32font_list_internal) + (w32font_driver, w32font_match_internal): Use bool where appropriate. + + * w32menu.c (x_activate_menubar, set_frame_menubar) + (w32_dialog_show, initialize_frame_menubar, w32_menu_show) + (is_simple_dialog): Use bool where appropriate. + 2015-01-28 Paul Eggert Use bool, not int, to track face changes commit 0761ec1669d6125d555ec39d2b938ce3562874af Author: Eli Zaretskii Date: Thu Jan 29 19:16:56 2015 +0200 Use bool for boolean in w32menu.c, w32font.c, w32uniscribe.c. src/w32uniscribe.c (uniscribe_list, uniscribe_match): Use bool where appropriate. src/w32font.c (struct font_callback_data, w32font_list_internal) (w32font_driver, w32font_match_internal): Use bool where appropriate. src/w32menu.c (x_activate_menubar, set_frame_menubar) (w32_dialog_show, initialize_frame_menubar, w32_menu_show) (is_simple_dialog): Use bool where appropriate. diff --git a/src/w32font.c b/src/w32font.c index ab77267..360ad3f 100644 --- a/src/w32font.c +++ b/src/w32font.c @@ -95,7 +95,7 @@ struct font_callback_data /* The list to add matches to. */ Lisp_Object list; /* Whether to match only opentype fonts. */ - int opentype_only; + bool opentype_only; }; /* Handles the problem that EnumFontFamiliesEx will not return all @@ -746,7 +746,8 @@ w32font_otf_drive (struct font *font, Lisp_Object features, Additional parameter opentype_only restricts the returned fonts to opentype fonts, which can be used with the Uniscribe backend. */ Lisp_Object -w32font_list_internal (struct frame *f, Lisp_Object font_spec, int opentype_only) +w32font_list_internal (struct frame *f, Lisp_Object font_spec, + bool opentype_only) { struct font_callback_data match_data; HDC dc; @@ -798,7 +799,8 @@ w32font_list_internal (struct frame *f, Lisp_Object font_spec, int opentype_only Additional parameter opentype_only restricts the returned fonts to opentype fonts, which can be used with the Uniscribe backend. */ Lisp_Object -w32font_match_internal (struct frame *f, Lisp_Object font_spec, int opentype_only) +w32font_match_internal (struct frame *f, Lisp_Object font_spec, + bool opentype_only) { struct font_callback_data match_data; HDC dc; @@ -2459,7 +2461,7 @@ w32font_filter_properties (Lisp_Object font, Lisp_Object alist) struct font_driver w32font_driver = { LISP_INITIALLY_ZERO, /* Qgdi */ - 0, /* case insensitive */ + false, /* case insensitive */ w32font_get_cache, w32font_list, w32font_match, diff --git a/src/w32font.h b/src/w32font.h index 82c5e09..0ad0125 100644 --- a/src/w32font.h +++ b/src/w32font.h @@ -66,10 +66,10 @@ struct w32font_info Lisp_Object w32font_get_cache (struct frame *fe); Lisp_Object w32font_list_internal (struct frame *f, Lisp_Object font_spec, - int opentype_only); + bool opentype_only); Lisp_Object w32font_match_internal (struct frame *f, Lisp_Object font_spec, - int opentype_only); + bool opentype_only); int w32font_open_internal (struct frame *f, Lisp_Object font_entity, int pixel_size, Lisp_Object font_object); void w32font_close (struct font *font); diff --git a/src/w32menu.c b/src/w32menu.c index 2a1dafb..40b8f5f 100644 --- a/src/w32menu.c +++ b/src/w32menu.c @@ -103,7 +103,7 @@ void set_frame_menubar (struct frame *, bool, bool); #ifdef HAVE_DIALOGS static Lisp_Object w32_dialog_show (struct frame *, Lisp_Object, Lisp_Object, char **); #else -static int is_simple_dialog (Lisp_Object); +static bool is_simple_dialog (Lisp_Object); static Lisp_Object simple_dialog_show (struct frame *, Lisp_Object, Lisp_Object); #endif @@ -166,7 +166,7 @@ w32_popup_dialog (struct frame *f, Lisp_Object header, Lisp_Object contents) void x_activate_menubar (struct frame *f) { - set_frame_menubar (f, 0, 1); + set_frame_menubar (f, false, true); /* Lock out further menubar changes while active. */ f->output_data.w32->menubar_active = 1; @@ -289,7 +289,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool deep_p) XSETFRAME (Vmenu_updating_frame, f); if (! menubar_widget) - deep_p = 1; + deep_p = true; if (deep_p) { @@ -388,7 +388,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool deep_p) else first_wv->contents = wv; /* Don't set wv->name here; GC during the loop might relocate it. */ - wv->enabled = 1; + wv->enabled = true; wv->button_type = BUTTON_TYPE_NONE; prev_wv = wv; } @@ -501,7 +501,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool deep_p) /* Force the window size to be recomputed so that the frame's text area remains the same, if menubar has just been created. */ if (old_widget == NULL) - adjust_frame_size (f, -1, -1, 2, 0, Qmenu_bar_lines); + adjust_frame_size (f, -1, -1, 2, false, Qmenu_bar_lines); } unblock_input (); @@ -518,7 +518,7 @@ initialize_frame_menubar (struct frame *f) /* This function is called before the first chance to redisplay the frame. It has to be, so the frame will have the right size. */ fset_menu_bar_items (f, menu_bar_items (FRAME_MENU_BAR_ITEMS (f))); - set_frame_menubar (f, 1, 1); + set_frame_menubar (f, true, true); } /* Get rid of the menu bar of frame F, and free its storage. @@ -570,7 +570,7 @@ w32_menu_show (struct frame *f, int x, int y, int menuflags, Lisp_Object *subprefix_stack = (Lisp_Object *) alloca (menu_items_used * word_size); int submenu_depth = 0; - int first_pane; + bool first_pane; *error = NULL; @@ -590,7 +590,7 @@ w32_menu_show (struct frame *f, int x, int y, int menuflags, wv = make_widget_value ("menu", NULL, true, Qnil); wv->button_type = BUTTON_TYPE_NONE; first_wv = wv; - first_pane = 1; + first_pane = true; /* Loop over all panes and items, filling in the tree. */ i = 0; @@ -601,14 +601,14 @@ w32_menu_show (struct frame *f, int x, int y, int menuflags, submenu_stack[submenu_depth++] = save_wv; save_wv = prev_wv; prev_wv = 0; - first_pane = 1; + first_pane = false; i++; } else if (EQ (AREF (menu_items, i), Qlambda)) { prev_wv = save_wv; save_wv = submenu_stack[--submenu_depth]; - first_pane = 0; + first_pane = false; i++; } else if (EQ (AREF (menu_items, i), Qt) @@ -664,7 +664,7 @@ w32_menu_show (struct frame *f, int x, int y, int menuflags, save_wv = wv; prev_wv = 0; } - first_pane = 0; + first_pane = false; i += MENU_ITEMS_PANE_LENGTH; } else @@ -883,8 +883,9 @@ w32_dialog_show (struct frame *f, Lisp_Object title, /* Number of elements seen so far, before boundary. */ int left_count = 0; - /* 1 means we've seen the boundary between left-hand elts and right-hand. */ - int boundary_seen = 0; + /* true means we've seen the boundary between left-hand elts and + right-hand. */ + bool boundary_seen = false; *error = NULL; @@ -928,7 +929,7 @@ w32_dialog_show (struct frame *f, Lisp_Object title, { /* This is the boundary between left-side elts and right-side elts. Stop incrementing right_count. */ - boundary_seen = 1; + boundary_seen = true; i++; continue; } @@ -986,7 +987,7 @@ w32_dialog_show (struct frame *f, Lisp_Object title, /* Actually create the dialog. */ dialog_id = widget_id_tick++; menu = lw_create_widget (first_wv->name, "dialog", dialog_id, first_wv, - f->output_data.w32->widget, 1, 0, + f->output_data.w32->widget, true, 0, dialog_selection_callback, 0); lw_modify_all_widgets (dialog_id, first_wv->contents, TRUE); @@ -1037,25 +1038,25 @@ w32_dialog_show (struct frame *f, Lisp_Object title, anywhere in Emacs that uses the other specific dialog choices that MessageBox provides. */ -static int +static bool is_simple_dialog (Lisp_Object contents) { Lisp_Object options; Lisp_Object name, yes, no, other; if (!CONSP (contents)) - return 0; + return false; options = XCDR (contents); yes = build_string ("Yes"); no = build_string ("No"); if (!CONSP (options)) - return 0; + return false; name = XCAR (options); if (!CONSP (name)) - return 0; + return false; name = XCAR (name); if (!NILP (Fstring_equal (name, yes))) @@ -1063,18 +1064,18 @@ is_simple_dialog (Lisp_Object contents) else if (!NILP (Fstring_equal (name, no))) other = yes; else - return 0; + return false; options = XCDR (options); if (!CONSP (options)) - return 0; + return false; name = XCAR (options); if (!CONSP (name)) - return 0; + return false; name = XCAR (name); if (NILP (Fstring_equal (name, other))) - return 0; + return false; /* Check there are no more options. */ options = XCDR (options); diff --git a/src/w32uniscribe.c b/src/w32uniscribe.c index 9cd97e2..73c0410 100644 --- a/src/w32uniscribe.c +++ b/src/w32uniscribe.c @@ -67,7 +67,7 @@ memq_no_quit (Lisp_Object elt, Lisp_Object list) static Lisp_Object uniscribe_list (struct frame *f, Lisp_Object font_spec) { - Lisp_Object fonts = w32font_list_internal (f, font_spec, 1); + Lisp_Object fonts = w32font_list_internal (f, font_spec, true); FONT_ADD_LOG ("uniscribe-list", font_spec, fonts); return fonts; } @@ -75,7 +75,7 @@ uniscribe_list (struct frame *f, Lisp_Object font_spec) static Lisp_Object uniscribe_match (struct frame *f, Lisp_Object font_spec) { - Lisp_Object entity = w32font_match_internal (f, font_spec, 1); + Lisp_Object entity = w32font_match_internal (f, font_spec, true); FONT_ADD_LOG ("uniscribe-match", font_spec, entity); return entity; } commit 0c7b0967d262bd361de721d0d7a4da192bde1319 Author: Lars Magne Ingebrigtsen Date: Thu Jan 29 14:02:04 2015 +0000 lisp/gnus/nnimap.el (nnimap-request-group): Make it possible to enter nnimap groups again diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index e4818d4..64608d3 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -2,6 +2,8 @@ * nnimap.el (nnimap-request-group): Allow running this function on groups that don't exist in Gnus yet. + (nnimap-request-group): Revert previous patch since that made it + impossible to enter nnimap groups. * message.el (message-smtpmail-send-it): Remove the mail header separator before sending. diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el index 0fe2bb5..e619c0f 100644 --- a/lisp/gnus/nnimap.el +++ b/lisp/gnus/nnimap.el @@ -804,10 +804,9 @@ textual parts.") articles active marks high low) (with-current-buffer nntp-server-buffer (when result - (when (and info - (or (not dont-check) - (not (setq active - (nth 2 (assoc group nnimap-current-infos)))))) + (when (or (not dont-check) + (not (setq active + (nth 2 (assoc group nnimap-current-infos))))) (let ((sequences (nnimap-retrieve-group-data-early server (list info)))) (nnimap-finish-retrieve-group-infos server (list info) sequences commit cfb188718998d2bfbbee17567c9527a20518547f Author: Lars Magne Ingebrigtsen Date: Thu Jan 29 09:20:48 2015 +0000 lisp/gnus/nnimap.el (nnimap-request-group): nnimap group activation problems fixed diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 3927f09..e4818d4 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,5 +1,8 @@ 2015-01-29 Lars Ingebrigtsen + * nnimap.el (nnimap-request-group): Allow running this function on + groups that don't exist in Gnus yet. + * message.el (message-smtpmail-send-it): Remove the mail header separator before sending. diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el index e619c0f..0fe2bb5 100644 --- a/lisp/gnus/nnimap.el +++ b/lisp/gnus/nnimap.el @@ -804,9 +804,10 @@ textual parts.") articles active marks high low) (with-current-buffer nntp-server-buffer (when result - (when (or (not dont-check) - (not (setq active - (nth 2 (assoc group nnimap-current-infos))))) + (when (and info + (or (not dont-check) + (not (setq active + (nth 2 (assoc group nnimap-current-infos)))))) (let ((sequences (nnimap-retrieve-group-data-early server (list info)))) (nnimap-finish-retrieve-group-infos server (list info) sequences commit 4ba343984f1ea2bc87493339a315e13ba1410d28 Author: Jay Belanger Date: Wed Jan 28 21:37:24 2015 -0600 * lisp/calc/calc-units.el (calc-convert-exact-units): Improve the simplification. diff --git a/lisp/calc/calc-units.el b/lisp/calc/calc-units.el index 33cbcac..f3d0234 100644 --- a/lisp/calc/calc-units.el +++ b/lisp/calc/calc-units.el @@ -544,7 +544,7 @@ If COMP or STD is non-nil, put that in the units table instead." (let ((res (list '* (math-mul (math-remove-units expr) (math-simplify-units - (list '/ old-units units))) + (math-to-standard-units (list '/ old-units units) nil))) units))) (calc-enter-result 1 "cvxu" res)))))) commit 43fdb2a08061afba00243b164111c289d711d976 Author: Jay Belanger Date: Wed Jan 28 21:29:58 2015 -0600 * lisp/calc/calc-units.el (math-consistent-units-p): Strengthen the test for consistent units. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 4d7f2f7..bc1d147 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -2,6 +2,7 @@ * lisp/calc/calc-units.el (calc-convert-exact-units): New function. (calc-convert-units): Check for missing units. + (math-consistent-units-p): Strengthen the test for consistent units. * lisp/calc/calc-ext.el (calc-init-extensions): Autoload `calc-convert-exact-units' and assign it a keybinding. diff --git a/lisp/calc/calc-units.el b/lisp/calc/calc-units.el index 8442cf9..33cbcac 100644 --- a/lisp/calc/calc-units.el +++ b/lisp/calc/calc-units.el @@ -979,7 +979,7 @@ If COMP or STD is non-nil, put that in the units table instead." (or (and (eq (car-safe newunits) 'var) (assq (nth 1 newunits) math-standard-units-systems)) - (math-numberp (math-get-units (list '/ expr newunits))))) + (math-numberp (math-get-units (math-to-standard-units (list '/ expr newunits) nil))))) (defun math-check-unit-consistency (expr units) "Give an error if EXPR and UNITS do not have consistent units." commit d1cb2f785525ad717a1504f4762505086b390bad Author: Jay Belanger Date: Wed Jan 28 21:17:10 2015 -0600 * lisp/calc/calc-units.el (calc-convert-exact-units): New function. (calc-convert-units): Check for missing units. * lisp/calc/calc-ext.el (calc-init-extensions): Autoload `calc-convert-exact-units' and assign it a keybinding. * lisp/calc/calc-help (calc-u-prefix-help): Add help for the "un" keybinding. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ddad9d4..4d7f2f7 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,14 @@ +2015-01-29 Jay Belanger + + * lisp/calc/calc-units.el (calc-convert-exact-units): New function. + (calc-convert-units): Check for missing units. + + * lisp/calc/calc-ext.el (calc-init-extensions): Autoload + `calc-convert-exact-units' and assign it a keybinding. + + * lisp/calc/calc-help (calc-u-prefix-help): Add help for the + "un" keybinding. + 2015-01-28 Stefan Monnier * emacs-lisp/cl.el (cl--function-convert): Simplify. diff --git a/lisp/calc/calc-ext.el b/lisp/calc/calc-ext.el index c3acb89..67d0c27 100644 --- a/lisp/calc/calc-ext.el +++ b/lisp/calc/calc-ext.el @@ -561,6 +561,7 @@ (define-key calc-mode-map "ud" 'calc-define-unit) (define-key calc-mode-map "ue" 'calc-explain-units) (define-key calc-mode-map "ug" 'calc-get-unit-definition) + (define-key calc-mode-map "un" 'calc-convert-exact-units) (define-key calc-mode-map "up" 'calc-permanent-units) (define-key calc-mode-map "ur" 'calc-remove-units) (define-key calc-mode-map "us" 'calc-simplify-units) @@ -1176,7 +1177,8 @@ calc-trail-scroll-right calc-trail-yank) ("calc-undo" calc-last-args calc-redo) ("calc-units" calc-autorange-units calc-base-units -calc-convert-temperature calc-convert-units calc-define-unit +calc-convert-temperature calc-convert-units +calc-convert-exact-units calc-define-unit calc-enter-units-table calc-explain-units calc-extract-units calc-get-unit-definition calc-permanent-units calc-quick-units calc-remove-units calc-simplify-units calc-undefine-unit diff --git a/lisp/calc/calc-help.el b/lisp/calc/calc-help.el index 511e208..17e5b0f 100644 --- a/lisp/calc/calc-help.el +++ b/lisp/calc/calc-help.el @@ -647,7 +647,7 @@ C-w Describe how there is no warranty for Calc." (defun calc-u-prefix-help () (interactive) (calc-do-prefix-help - '("Simplify, Convert, Temperature-convert, Base-units" + '("Simplify, Convert, coNvert exact, Temperature-convert, Base-units" "Autorange; Remove, eXtract; Explain; View-table; 0-9" "Define, Undefine, Get-defn, Permanent" "SHIFT + View-table-other-window" diff --git a/lisp/calc/calc-units.el b/lisp/calc/calc-units.el index 0595086..8442cf9 100644 --- a/lisp/calc/calc-units.el +++ b/lisp/calc/calc-units.el @@ -470,6 +470,8 @@ If COMP or STD is non-nil, put that in the units table instead." (if (string-match "\\` */" uoldname) (setq uoldname (concat "1" uoldname))) (math-read-expr uoldname)))))) + (unless (math-units-in-expr-p uold t) + (error "No units specified")) (when (eq (car-safe uold) 'error) (error "Bad format in units expression: %s" (nth 1 uold))) (setq expr (math-mul expr uold)))) @@ -514,6 +516,38 @@ If COMP or STD is non-nil, put that in the units table instead." (math-put-default-units (if noold units res) (if comp units))) (calc-enter-result 1 "cvun" res)))))) +(defun calc-convert-exact-units () + (interactive) + (calc-slow-wrapper + (let* ((expr (calc-top-n 1))) + (unless (math-units-in-expr-p expr t) + (error "No units in expression.")) + (let* ((old-units (math-extract-units expr)) + (defunits (math-get-default-units expr)) + units + (new-units + (read-string (concat "New units" + (if defunits + (concat + " (default " + defunits + "): ") + ": "))))) + (if (and + (string= new-units "") + defunits) + (setq new-units defunits)) + (setq units (math-read-expr new-units)) + (when (eq (car-safe units) 'error) + (error "Bad format in units expression: %s" (nth 2 units))) + (math-check-unit-consistency old-units units) + (let ((res + (list '* (math-mul (math-remove-units expr) + (math-simplify-units + (list '/ old-units units))) + units))) + (calc-enter-result 1 "cvxu" res)))))) + (defun calc-autorange-units (arg) (interactive "P") (calc-wrapper commit 212c818940c420d2ef36a31ccb2fc0a110b1588b Author: Lars Magne Ingebrigtsen Date: Thu Jan 29 02:22:21 2015 +0000 lisp/gnus/message.el (message-smtpmail-send-it): Make non-standard mail header separators work with smtpmail diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index a200216..3927f09 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,8 @@ +2015-01-29 Lars Ingebrigtsen + + * message.el (message-smtpmail-send-it): Remove the mail header + separator before sending. + 2015-01-28 Elias Oltmanns * nnimap.el (nnimap-find-expired-articles): Fix handling of diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el index de7e9ba..a06de2a 100644 --- a/lisp/gnus/message.el +++ b/lisp/gnus/message.el @@ -4906,6 +4906,11 @@ evaluates `message-send-mail-hook' just before sending a message. It is useful if your ISP requires the POP-before-SMTP authentication. See the Gnus manual for details." (run-hooks 'message-send-mail-hook) + ;; Change header-delimiter to be what smtpmail expects. + (goto-char (point-min)) + (when (re-search-forward + (concat "^" (regexp-quote mail-header-separator) "\n")) + (replace-match "\n")) (smtpmail-send-it)) (defun message-send-mail-with-mailclient () commit cdee38ab61b383f1190d29470319bce3693c7dd9 Author: Paul Eggert Date: Wed Jan 28 11:11:14 2015 -0800 Use bool, not int, to track face changes * xfaces.c (face_change): Rename from face_change_count, and change from int to bool. The var is now true (instead of nonzero) if attributes have changed; this is simpler. All uses changed. Fixes: bug#19698 diff --git a/src/ChangeLog b/src/ChangeLog index 1df4f6a..9378c9d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2015-01-28 Paul Eggert + + Use bool, not int, to track face changes + * xfaces.c (face_change): Rename from face_change_count, and + change from int to bool. The var is now true (instead of nonzero) + if attributes have changed; this is simpler. All uses changed. + Fixes: bug#19698 + 2015-01-27 Eli Zaretskii * dired.c (directory_files_internal) [WINDOWSNT]: If readdir diff --git a/src/dispextern.h b/src/dispextern.h index 31e7262..4139479 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -1850,10 +1850,10 @@ GLYPH_CODE_P (Lisp_Object gc) : TYPE_MAXIMUM (EMACS_INT))))); } -/* Non-zero means face attributes have been changed since the last +/* True means face attributes have been changed since the last redisplay. Used in redisplay_internal. */ -extern int face_change_count; +extern bool face_change; /* For reordering of bidirectional text. */ diff --git a/src/frame.c b/src/frame.c index 2ce5a62..e4adfe8 100644 --- a/src/frame.c +++ b/src/frame.c @@ -3632,7 +3632,7 @@ x_set_font_backend (struct frame *f, Lisp_Object new_value, Lisp_Object old_valu XSETFRAME (frame, f); x_set_font (f, Fframe_parameter (frame, Qfont), Qnil); - ++face_change_count; + face_change = true; windows_or_buffers_changed = 18; } } diff --git a/src/msdos.c b/src/msdos.c index 3c2277e..8b05b34 100644 --- a/src/msdos.c +++ b/src/msdos.c @@ -1733,7 +1733,7 @@ IT_set_frame_parameters (struct frame *f, Lisp_Object alist) if (redraw) { - face_change_count++; /* forces xdisp.c to recompute basic faces */ + face_change = true; /* forces xdisp.c to recompute basic faces */ if (f == SELECTED_FRAME ()) redraw_frame (f); } diff --git a/src/w32fns.c b/src/w32fns.c index 777819e..8435270 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -5668,7 +5668,7 @@ x_create_tip_frame (struct w32_display_info *dpyinfo, ptrdiff_t count = SPECPDL_INDEX (); struct gcpro gcpro1, gcpro2, gcpro3; struct kboard *kb; - int face_change_count_before = face_change_count; + bool face_change_before = face_change; Lisp_Object buffer; struct buffer *old_buffer; @@ -5880,11 +5880,11 @@ x_create_tip_frame (struct w32_display_info *dpyinfo, f->can_x_set_window_size = true; /* Setting attributes of faces of the tooltip frame from resources - and similar will increment face_change_count, which leads to the + and similar will set face_change, which leads to the clearing of all current matrices. Since this isn't necessary - here, avoid it by resetting face_change_count to the value it + here, avoid it by resetting face_change to the value it had before we created the tip frame. */ - face_change_count = face_change_count_before; + face_change = face_change_before; /* Discard the unwind_protect. */ return unbind_to (count, frame); diff --git a/src/xdisp.c b/src/xdisp.c index 18e27e7..68c0fa5 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -2724,9 +2724,9 @@ init_iterator (struct it *it, struct window *w, free realized faces now because they depend on face definitions that might have changed. Don't free faces while there might be desired matrices pending which reference these faces. */ - if (face_change_count && !inhibit_free_realized_faces) + if (face_change && !inhibit_free_realized_faces) { - face_change_count = 0; + face_change = false; free_all_realized_faces (Qnil); } @@ -13373,10 +13373,10 @@ redisplay_internal (void) last_glyphless_glyph_frame = NULL; last_glyphless_glyph_face_id = (1 << FACE_ID_BITS); - /* If face_change_count is non-zero, init_iterator will free all - realized faces, which includes the faces referenced from current - matrices. So, we can't reuse current matrices in this case. */ - if (face_change_count) + /* If face_change, init_iterator will free all realized faces, which + includes the faces referenced from current matrices. So, we + can't reuse current matrices in this case. */ + if (face_change) windows_or_buffers_changed = 47; if ((FRAME_TERMCAP_P (sf) || FRAME_MSDOS_P (sf)) diff --git a/src/xfaces.c b/src/xfaces.c index 7c9f626..6e01ab0 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -313,10 +313,10 @@ static int clear_font_table_count; #endif /* HAVE_WINDOW_SYSTEM */ -/* Non-zero means face attributes have been changed since the last +/* True means face attributes have been changed since the last redisplay. Used in redisplay_internal. */ -int face_change_count; +bool face_change; /* True means don't display bold text if a face's foreground and background colors are the inverse of the default colors of the @@ -694,7 +694,7 @@ Optional THOROUGHLY non-nil means try to free unused fonts, too. */) (Lisp_Object thoroughly) { clear_face_cache (!NILP (thoroughly)); - ++face_change_count; + face_change = true; windows_or_buffers_changed = 53; return Qnil; } @@ -2530,11 +2530,11 @@ Value is a vector of face attributes. */) /* Changing a named face means that all realized faces depending on that face are invalid. Since we cannot tell which realized faces depend on the face, make sure they are all removed. This is done - by incrementing face_change_count. The next call to - init_iterator will then free realized faces. */ + by setting face_change. The next call to init_iterator will then + free realized faces. */ if (NILP (Fget (face, Qface_no_inherit))) { - ++face_change_count; + face_change = true; windows_or_buffers_changed = 54; } @@ -2609,11 +2609,11 @@ The value is TO. */) /* Changing a named face means that all realized faces depending on that face are invalid. Since we cannot tell which realized faces depend on the face, make sure they are all removed. This is done - by incrementing face_change_count. The next call to - init_iterator will then free realized faces. */ + by setting face_change. The next call to init_iterator will then + free realized faces. */ if (NILP (Fget (to, Qface_no_inherit))) { - ++face_change_count; + face_change = true; windows_or_buffers_changed = 55; } @@ -3107,13 +3107,13 @@ FRAME 0 means change the face on all frames, and change the default /* Changing a named face means that all realized faces depending on that face are invalid. Since we cannot tell which realized faces depend on the face, make sure they are all removed. This is done - by incrementing face_change_count. The next call to - init_iterator will then free realized faces. */ + by setting face_change. The next call to init_iterator will then + free realized faces. */ if (!EQ (frame, Qt) && NILP (Fget (face, Qface_no_inherit)) && NILP (Fequal (old_value, value))) { - ++face_change_count; + face_change = true; windows_or_buffers_changed = 56; } @@ -3281,12 +3281,12 @@ update_face_from_frame_parameter (struct frame *f, Lisp_Object param, /* Changing a named face means that all realized faces depending on that face are invalid. Since we cannot tell which realized faces depend on the face, make sure they are all removed. This is done - by incrementing face_change_count. The next call to - init_iterator will then free realized faces. */ + by setting face_change. The next call to init_iterator will then + free realized faces. */ if (!NILP (face) && NILP (Fget (face, Qface_no_inherit))) { - ++face_change_count; + face_change = true; windows_or_buffers_changed = 57; } } @@ -5820,7 +5820,7 @@ is non-nil. */) (Lisp_Object suppress) { tty_suppress_bold_inverse_default_colors_p = !NILP (suppress); - ++face_change_count; + face_change = true; return suppress; } diff --git a/src/xfns.c b/src/xfns.c index 234915a..65eb6b4 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -4932,7 +4932,7 @@ x_create_tip_frame (struct x_display_info *dpyinfo, int width, height; ptrdiff_t count = SPECPDL_INDEX (); struct gcpro gcpro1, gcpro2, gcpro3; - int face_change_count_before = face_change_count; + bool face_change_before = face_change; Lisp_Object buffer; struct buffer *old_buffer; @@ -5229,11 +5229,11 @@ x_create_tip_frame (struct x_display_info *dpyinfo, f->can_x_set_window_size = true; /* Setting attributes of faces of the tooltip frame from resources - and similar will increment face_change_count, which leads to the - clearing of all current matrices. Since this isn't necessary - here, avoid it by resetting face_change_count to the value it - had before we created the tip frame. */ - face_change_count = face_change_count_before; + and similar will set face_change, which leads to the clearing of + all current matrices. Since this isn't necessary here, avoid it + by resetting face_change to the value it had before we created + the tip frame. */ + face_change = face_change_before; /* Discard the unwind_protect. */ return unbind_to (count, frame); commit ad588afdaa166bcdacbf9f746bd4d39b2c649768 Author: Eli Zaretskii Date: Wed Jan 28 19:42:28 2015 +0200 Improve the fix for bug #19701 src/dired.c (directory_files_internal, file_name_completion) [WINDOWSNT]: Signal an error when errno is set non-zero by 'readdir', regardless of its value. src/w32.c (sys_readdir): Set errno to ENOENT when the directory doesn't exist and to EACCES when it's not accessible to the current user. Set errno to zero when FindNextFile exhausts the directory, so that callers don't interpret that as an error and don't signal a file-error. (open_unc_volume): Set errno to ENOENT if WNetOpenEnum fails. diff --git a/src/ChangeLog b/src/ChangeLog index a33e834..dc49508 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,16 @@ +2015-01-28 Eli Zaretskii + + * dired.c (directory_files_internal, file_name_completion) + [WINDOWSNT]: Signal an error when errno is set non-zero by + 'readdir', regardless of its value. + + * w32.c (sys_readdir): Set errno to ENOENT when the directory + doesn't exist and to EACCES when it's not accessible to the + current user. Set errno to zero when FindNextFile exhausts the + directory, so that callers don't interpret that as an error and + don't signal a file-error. + (open_unc_volume): Set errno to ENOENT if WNetOpenEnum fails. + 2015-01-27 Eli Zaretskii * dired.c (directory_files_internal) [WINDOWSNT]: If readdir diff --git a/src/dired.c b/src/dired.c index f6c47a7..43cb837 100644 --- a/src/dired.c +++ b/src/dired.c @@ -251,14 +251,9 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full, /* The MS-Windows implementation of 'opendir' doesn't actually open a directory until the first call to 'readdir'. If 'readdir' fails to open the directory, it - sets errno to ENOTDIR; we convert it here to ENOENT so - that the error message is similar to what happens on - Posix hosts in such cases. */ - if (errno == ENOTDIR) - { - errno = ENOENT; - report_file_error ("Opening directory", directory); - } + sets errno to ENOENT or EACCES, see w32.c. */ + if (errno) + report_file_error ("Opening directory", directory); #endif break; } @@ -530,6 +525,10 @@ file_name_completion (Lisp_Object file, Lisp_Object dirname, bool all_flag, QUIT; continue; } +#ifdef WINDOWSNT + if (errno) + report_file_error ("Opening directory", dirname); +#endif break; } diff --git a/src/w32.c b/src/w32.c index aedf649..2faa742 100644 --- a/src/w32.c +++ b/src/w32.c @@ -3433,17 +3433,30 @@ sys_readdir (DIR *dirp) if (dir_find_handle == INVALID_HANDLE_VALUE) { + /* Any changes in the value of errno here should be in sync + with what directory_files_internal does when it calls + readdir. */ switch (GetLastError ()) { - case ERROR_PATH_NOT_FOUND: + /* Windows uses this value when FindFirstFile finds no + files that match the wildcard. This is not supposed + to happen, since our wildcard is "*", but just in + case, if there's some weird empty directory with not + even "." and ".." entries... */ + case ERROR_FILE_NOT_FOUND: + errno = 0; + /* FALLTHRU */ + default: + break; case ERROR_ACCESS_DENIED: + case ERROR_NETWORK_ACCESS_DENIED: + errno = EACCES; + break; + case ERROR_PATH_NOT_FOUND: case ERROR_INVALID_DRIVE: case ERROR_BAD_NETPATH: - /* This special value will be noticed by - directory_files_internal, which see. */ - errno = ENOTDIR; - break; - default: + case ERROR_BAD_NET_NAME: + errno = ENOENT; break; } return NULL; @@ -3452,12 +3465,18 @@ sys_readdir (DIR *dirp) else if (w32_unicode_filenames) { if (!FindNextFileW (dir_find_handle, &dir_find_data_w)) - return NULL; + { + errno = 0; + return NULL; + } } else { if (!FindNextFileA (dir_find_handle, &dir_find_data_a)) - return NULL; + { + errno = 0; + return NULL; + } } /* Emacs never uses this value, so don't bother making it match @@ -3559,7 +3578,11 @@ open_unc_volume (const char *path) if (result == NO_ERROR) return henum; else - return INVALID_HANDLE_VALUE; + { + /* Make sure directory_files_internal reports a sensible error. */ + errno = ENOENT; + return INVALID_HANDLE_VALUE; + } } static void * commit 9a17d246eabeb5a365bfebce5ec3862e42c8b132 Author: Stefan Monnier Date: Wed Jan 28 08:18:50 2015 -0500 * lisp/emacs-lisp/cl.el (cl--function-convert): Simplify. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 90681c8..ddad9d4 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2015-01-28 Stefan Monnier + + * emacs-lisp/cl.el (cl--function-convert): Simplify. + 2015-01-28 Tassilo Horn * textmodes/reftex.el (reftex-syntax-table-for-bib): Give ( and ) @@ -11,8 +15,8 @@ python.el: New non-global state dependent indentation engine. (Bug#18319, Bug#19595) - * progmodes/python.el (python-syntax-comment-or-string-p): Accept - PPSS as argument. + * progmodes/python.el (python-syntax-comment-or-string-p): + Accept PPSS as argument. (python-syntax-closing-paren-p): New function. (python-indent-current-level) (python-indent-levels): Mark obsolete. @@ -30,8 +34,8 @@ * subr.el (posnp): Correct docstring of `posnp'. (posn-col-row): Make it work with all mouse position objects. - * textmodes/artist.el (artist-mouse-draw-continously): Cancel - timers if an error occurs during continuous drawing. (Bug#6130) + * textmodes/artist.el (artist-mouse-draw-continously): + Cancel timers if an error occurs during continuous drawing. (Bug#6130) 2015-01-20 Eli Zaretskii diff --git a/lisp/emacs-lisp/cl.el b/lisp/emacs-lisp/cl.el index 1b20463..5da1cea 100644 --- a/lisp/emacs-lisp/cl.el +++ b/lisp/emacs-lisp/cl.el @@ -376,10 +376,7 @@ The two cases that are handled are: (setq cl--function-convert-cache (cons newf res)) res)))) (t - (setq cl--labels-convert-cache cl--function-convert-cache) - (prog1 - (cl--labels-convert f) - (setq cl--function-convert-cache cl--labels-convert-cache))))) + (cl--labels-convert f)))) (defmacro lexical-let (bindings &rest body) "Like `let', but lexically scoped. commit ba10f4b56081d0f5069720c9ce0871e819b904f5 Author: Tassilo Horn Date: Wed Jan 28 10:32:50 2015 +0100 Fix issues with BibTeX entries containing ")". * textmodes/reftex.el (reftex-syntax-table-for-bib): Give ( and ) punctuation syntax since to allow bibtex fields with values such as {Test 1) and 2)} (bug#19205, bug#19707). (reftex--prepare-syntax-tables): New function. (reftex-mode): Use it. [backport from trunk] diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b3bedaa..2c852f9 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2015-01-28 Tassilo Horn + + * textmodes/reftex.el (reftex-syntax-table-for-bib): Give ( and ) + punctuation syntax since to allow bibtex fields with values such + as {Test 1) and 2)} (bug#19205, bug#19707). + (reftex--prepare-syntax-tables): New function. + (reftex-mode): Use it. + 2015-01-26 Fabián Ezequiel Gallina python.el: New non-global state dependent indentation engine. diff --git a/lisp/textmodes/reftex.el b/lisp/textmodes/reftex.el index 97dd36a..2930b7c 100644 --- a/lisp/textmodes/reftex.el +++ b/lisp/textmodes/reftex.el @@ -221,17 +221,21 @@ (defvar reftex-syntax-table nil) (defvar reftex-syntax-table-for-bib nil) -(unless reftex-syntax-table +(defun reftex--prepare-syntax-tables () (setq reftex-syntax-table (copy-syntax-table)) (modify-syntax-entry ?\( "." reftex-syntax-table) - (modify-syntax-entry ?\) "." reftex-syntax-table)) + (modify-syntax-entry ?\) "." reftex-syntax-table) -(unless reftex-syntax-table-for-bib (setq reftex-syntax-table-for-bib (copy-syntax-table)) (modify-syntax-entry ?\' "." reftex-syntax-table-for-bib) (modify-syntax-entry ?\" "." reftex-syntax-table-for-bib) (modify-syntax-entry ?\[ "." reftex-syntax-table-for-bib) - (modify-syntax-entry ?\] "." reftex-syntax-table-for-bib)) + (modify-syntax-entry ?\] "." reftex-syntax-table-for-bib) + (modify-syntax-entry ?\( "." reftex-syntax-table-for-bib) + (modify-syntax-entry ?\) "." reftex-syntax-table-for-bib)) + +(unless (and reftex-syntax-table reftex-syntax-table-for-bib) + (reftex--prepare-syntax-tables)) ;; The following definitions are out of place, but I need them here ;; to make the compilation of reftex-mode not complain. @@ -295,15 +299,7 @@ on the menu bar. (put 'reftex-auto-recenter-toc 'initialized t)) ;; Prepare the special syntax tables. - (setq reftex-syntax-table (copy-syntax-table (syntax-table))) - (modify-syntax-entry ?\( "." reftex-syntax-table) - (modify-syntax-entry ?\) "." reftex-syntax-table) - - (setq reftex-syntax-table-for-bib (copy-syntax-table)) - (modify-syntax-entry ?\' "." reftex-syntax-table-for-bib) - (modify-syntax-entry ?\" "." reftex-syntax-table-for-bib) - (modify-syntax-entry ?\[ "." reftex-syntax-table-for-bib) - (modify-syntax-entry ?\] "." reftex-syntax-table-for-bib) + (reftex--prepare-syntax-tables) (run-hooks 'reftex-mode-hook)) ;; Mode was turned off commit 8a8bd38fedb89b2d04cca2419698813a22862c3b Author: Tassilo Horn Date: Wed Jan 28 10:32:50 2015 +0100 Fix issues with BibTeX entries containing ")". * textmodes/reftex.el (reftex-syntax-table-for-bib): Give ( and ) punctuation syntax since to allow bibtex fields with values such as {Test 1) and 2)} (bug#19205, bug#19707). (reftex--prepare-syntax-tables): New function. (reftex-mode): Use it. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index eb6ef6b..90681c8 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2015-01-28 Tassilo Horn + + * textmodes/reftex.el (reftex-syntax-table-for-bib): Give ( and ) + punctuation syntax since to allow bibtex fields with values such + as {Test 1) and 2)} (bug#19205, bug#19707). + (reftex--prepare-syntax-tables): New function. + (reftex-mode): Use it. + 2015-01-26 Fabián Ezequiel Gallina python.el: New non-global state dependent indentation engine. diff --git a/lisp/textmodes/reftex.el b/lisp/textmodes/reftex.el index 160d9fb..7cf54c6 100644 --- a/lisp/textmodes/reftex.el +++ b/lisp/textmodes/reftex.el @@ -106,17 +106,21 @@ (defvar reftex-syntax-table nil) (defvar reftex-syntax-table-for-bib nil) -(unless reftex-syntax-table +(defun reftex--prepare-syntax-tables () (setq reftex-syntax-table (copy-syntax-table)) (modify-syntax-entry ?\( "." reftex-syntax-table) - (modify-syntax-entry ?\) "." reftex-syntax-table)) + (modify-syntax-entry ?\) "." reftex-syntax-table) -(unless reftex-syntax-table-for-bib (setq reftex-syntax-table-for-bib (copy-syntax-table)) (modify-syntax-entry ?\' "." reftex-syntax-table-for-bib) (modify-syntax-entry ?\" "." reftex-syntax-table-for-bib) (modify-syntax-entry ?\[ "." reftex-syntax-table-for-bib) - (modify-syntax-entry ?\] "." reftex-syntax-table-for-bib)) + (modify-syntax-entry ?\] "." reftex-syntax-table-for-bib) + (modify-syntax-entry ?\( "." reftex-syntax-table-for-bib) + (modify-syntax-entry ?\) "." reftex-syntax-table-for-bib)) + +(unless (and reftex-syntax-table reftex-syntax-table-for-bib) + (reftex--prepare-syntax-tables)) ;; The following definitions are out of place, but I need them here ;; to make the compilation of reftex-mode not complain. @@ -180,15 +184,7 @@ on the menu bar. (put 'reftex-auto-recenter-toc 'initialized t)) ;; Prepare the special syntax tables. - (setq reftex-syntax-table (copy-syntax-table (syntax-table))) - (modify-syntax-entry ?\( "." reftex-syntax-table) - (modify-syntax-entry ?\) "." reftex-syntax-table) - - (setq reftex-syntax-table-for-bib (copy-syntax-table)) - (modify-syntax-entry ?\' "." reftex-syntax-table-for-bib) - (modify-syntax-entry ?\" "." reftex-syntax-table-for-bib) - (modify-syntax-entry ?\[ "." reftex-syntax-table-for-bib) - (modify-syntax-entry ?\] "." reftex-syntax-table-for-bib) + (reftex--prepare-syntax-tables) (run-hooks 'reftex-mode-hook)) ;; Mode was turned off commit 173ac1caac65543956ce0d72a9d6ae10b6729fa8 Author: Lars Ingebrigtsen Date: Wed Jan 28 06:59:06 2015 +0000 lisp/gnus/nnimap.el (nnimap-request-group): nnimap group request bug fix diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 49d1444..a200216 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -3,6 +3,11 @@ * nnimap.el (nnimap-find-expired-articles): Fix handling of (expiry-wait . never). +2015-01-28 Lars Ingebrigtsen + + * nnimap.el (nnimap-request-group): Clear the buffer before returning + the data. + 2015-01-27 Lars Ingebrigtsen * nnir.el (nnir-imap-expr-to-imap): Check for literal+ capability in diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el index ba2013e..e619c0f 100644 --- a/lisp/gnus/nnimap.el +++ b/lisp/gnus/nnimap.el @@ -812,6 +812,7 @@ textual parts.") (nnimap-finish-retrieve-group-infos server (list info) sequences t) (setq active (nth 2 (assoc group nnimap-current-infos))))) + (erase-buffer) (insert (format "211 %d %d %d %S\n" (- (cdr active) (car active)) (car active) commit 39c2fa3f4e5bf332cc30266d36d5410c4ffeaac4 Author: Paul Eggert Date: Tue Jan 27 22:24:19 2015 -0800 Merge from gnulib and try to repair bad merge This attempts to repair problems introduced by the bad merge 5491fd1098d27b3ba3db054076b9ab60fb3558dc. The easiest way for me to fix the badly-merged gnulib files was to run 'admin/merge-gnulib', so I did that, which also imported the following changes: * build-aux/update-copyright, m4/gnulib.m4: Update from gnulib, incorporating: 2015-01-15 time: port to MinGW32 3.21 2015-01-15 update-copyright: apply to self 2015-01-11 update-copyright: recognize groff's \(co marker diff --git a/ChangeLog b/ChangeLog index 00a9d00..0b4993b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2015-01-28 Paul Eggert + + Merge from gnulib and try to repair bad merge + This attempts to repair problems introduced by the bad merge + 5491fd1098d27b3ba3db054076b9ab60fb3558dc. The easiest way for me + to fix the badly-merged gnulib files was to run + 'admin/merge-gnulib', so I did that, which also imported the + following changes: + * build-aux/update-copyright, m4/gnulib.m4: + Update from gnulib, incorporating: + 2015-01-15 time: port to MinGW32 3.21 + 2015-01-15 update-copyright: apply to self + 2015-01-11 update-copyright: recognize groff's \(co marker + 2015-01-20 Eli Zaretskii * configure.ac (HAVE_W32): Abort with error message if diff --git a/INSTALL.REPO b/INSTALL.REPO index 61b1634..3431ee4 100644 --- a/INSTALL.REPO +++ b/INSTALL.REPO @@ -1,7 +1,3 @@ -Copyright (C) 2002-2015 Free Software Foundation, Inc. -See the end of the file for license conditions. - - Building and Installing Emacs from the Repository Simply run 'make'. This should work if your files are freshly checked diff --git a/admin/notes/lel-TODO b/admin/notes/lel-TODO deleted file mode 100644 index c59e920..0000000 --- a/admin/notes/lel-TODO +++ /dev/null @@ -1,124 +0,0 @@ -Some lisp/emacs-lisp/ Features and Where They Are Documented - -Copyright (C) 2007-2015 Free Software Foundation, Inc. -See the end of the file for license conditions. - - -* Status Key - - -- as yet unknown - n/a -- not applicable (internal, uninteresting, etc) - obsolete -- an obsolete feature, to be removed in future - todo -- not documented but should be - NODE -- documented in or under info node NODE - - -* Features - advice (elisp) Advising Functions - advice-preload n/a - assoc - - authors - - autoload (elisp) Autoload - avl-tree - - backquote n/a - benchmark n/a - bindat (elisp) Byte Packing - byte-compile (elisp) Byte Compilation - byte-opt - - bytecomp (elisp) Compilation Functions - checkdoc (elisp) Documentation Tips - cl (cl) - cl-compat n/a - cl-specs n/a - copyright - - crm - - cust-print (elisp) Printing in Edebug - debug (elisp) Debugger - derived (elisp) Derived Modes - disass (elisp) Disassembly - easy-mmode (elisp) Defining Minor Modes - easymenu - - edebug (elisp) Edebug - eldoc - - elint - - elp n/a - ewoc (elisp) Separated Rendering - find-func - - find-gc - - generic (elisp) Generic Modes - gulp n/a - helper - - levents obsolete - lisp-float-type - - lisp-mnt - - lisp-mode n/a - lmenu obsolete - lucid obsolete - macroexp (elisp) Expansion - pp (emacs) Program Indent - re-builder - - regexp-opt (elisp) Regexp Functions - regi - - ring (elisp) Rings - rx - - shadow - - sregex obsolete - syntax (elisp) Position Parse - testcover - - timer (elisp) Timers - tq (elisp) Transaction Queues - trace - - unsafep (elisp) Function Safety - warnings (elisp) Warnings - - -* Above list created using default directory lisp/emacs-lisp/ with - (shell-command - "sed '/^(provide '\\''/!d;s// /;s/).*//' *.el | sort | uniq") - - -* How to use this file to improve Emacs - (loop - (let* ((feature (choose-one Features)) - (status (feature-status feature))) - (if (or (eq '- status) (not (verify status))) - (update feature (current-docs feature)) - (case status - (todo (let (doc patch feedback) - (while (not (grok feature)) - (or (play-with feature) - (grep feature Internet) - (grep feature (wisdom-maybe "emacs-devel")))) - (setq doc (write-documentation feature) - patch (diff (current-docs) doc)) - (while (not (and (correct doc) - (well-placed doc) - (well-formed patch))) - (setq doc (revise doc) - patch (diff (current-docs) doc)) - feedback (wisdom-maybe "emacs-devel" patch)) - (when (install patch) - (when (update feature (current-docs feature)) - (job-well-done user-login-name))))) - (n/a (job-well-done user-login-name)))))) - - -* Etc - -This file is part of GNU Emacs. - -GNU Emacs is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -GNU Emacs is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Emacs. If not, see . - - Local variables: - mode: outline - End: diff --git a/build-aux/update-copyright b/build-aux/update-copyright index 308fbf1..4eb4b93 100755 --- a/build-aux/update-copyright +++ b/build-aux/update-copyright @@ -3,7 +3,7 @@ eval '(exit $?0)' && eval 'exec perl -wS -0777 -pi "$0" ${1+"$@"}' if 0; # Update an FSF copyright year list to include the current year. -my $VERSION = '2013-01-03.09:41'; # UTC +my $VERSION = '2015-01-15.20:53'; # UTC # Copyright (C) 2009-2015 Free Software Foundation, Inc. # @@ -124,7 +124,7 @@ use strict; use warnings; my $copyright_re = 'Copyright'; -my $circle_c_re = '(?:\([cC]\)|@copyright{}|©)'; +my $circle_c_re = '(?:\([cC]\)|@copyright{}|\\\\\(co|©)'; my $holder = $ENV{UPDATE_COPYRIGHT_HOLDER}; $holder ||= 'Free Software Foundation, Inc.'; my $prefix_max = 5; diff --git a/doc/man/grep-changelog.1 b/doc/man/grep-changelog.1 deleted file mode 100644 index 1a08c6c..0000000 --- a/doc/man/grep-changelog.1 +++ /dev/null @@ -1,80 +0,0 @@ -.\" -*- nroff -*- -.\" See section COPYING for copyright and redistribution information. -.TH grep-changelog 1 -.SH NAME -grep-changelog \- print ChangeLog entries matching criteria -.SH SYNOPSIS -.B grep-changelog -.RI [ options ] -.RI [ CHANGELOG .\|.\|.] -.SH DESCRIPTION -.B grep-changelog -searches the named -.IR CHANGELOG s -(by default files matching the regular expressions -.B ChangeLog -and -.BR "ChangeLog\e.[0-9]+" ) -for entries matching the specified criteria. At least one option or -file must be specified. This program is distributed with -.BR "GNU Emacs" . -.PP -.SH OPTIONS -The program accepts unambiguous abbreviations for option names. -.TP -.B \-\-author=AUTHOR -Print entries whose author matches regular expression -.IR AUTHOR . -.TP -.B \-\-text=TEXT -Print entries whose text matches regular expression -.IR TEXT . -.TP -.B \-\-exclude=TEXT -Exclude entries matching regular expression -.IR TEXT . -.TP -.B \-\-from\-date=YYYY\-MM\-DD -Only consider entries made on or after the given date. -ChangeLog date entries not in the -\*(lqYYYY\-MM\-DD\*(rq format are never matched. -.TP -.B \-\-to\-date=YYYY\-MM\-DD -Only consider entries made on or before the given date. -.TP -.B \-\-rcs\-log -Print output in a format suitable for RCS log entries. -This format removes author lines, leading spaces, and file names. -.TP -.B \-\-with\-date -In RCS log format, print short dates. -.TP -.B \-\-reverse -Show matches in reverse order. -.TP -.B \-\-version -Display version information. -.TP -.B \-\-help -Display basic usage information. -. -.SH COPYING -Copyright -.if t \(co -.if n (C) -2008-2015 Free Software Foundation, Inc. -.PP -Permission is granted to make and distribute verbatim copies of this -document provided the copyright notice and this permission notice are -preserved on all copies. -.PP -Permission is granted to copy and distribute modified versions of -this document under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of -a permission notice identical to this one. -.PP -Permission is granted to copy and distribute translations of this -document into another language, under the above conditions for -modified versions, except that this permission notice may be stated -in a translation approved by the Free Software Foundation. -. diff --git a/etc/CONTRIBUTE b/etc/CONTRIBUTE deleted file mode 100644 index 92b4c9e..0000000 --- a/etc/CONTRIBUTE +++ /dev/null @@ -1,227 +0,0 @@ -Copyright (C) 2006-2015 Free Software Foundation, Inc. -See end for license conditions. - - - Contributing to Emacs - -Emacs is a collaborative project and we encourage contributions from -anyone and everyone. If you want to contribute in the way that will -help us most, we recommend (1) fixing reported bugs and (2) -implementing the feature ideas in etc/TODO. However, if you think of -new features to add, please suggest them too -- we might like your -idea. Porting to new platforms is also useful, when there is a new -platform, but that is not common nowadays. - -For documentation on how to develop Emacs changes, refer to the Emacs -Manual and the Emacs Lisp Reference Manual (both included in the Emacs -distribution). The web pages in http://www.gnu.org/software/emacs -contain additional information. - -You may also want to submit your change so that can be considered for -inclusion in a future version of Emacs (see below). - -If you don't feel up to hacking Emacs, there are many other ways to -help. You can answer questions on the mailing lists, write -documentation, find and report bugs, check if existing bug reports -are fixed in newer versions of Emacs, contribute to the Emacs web -pages, or develop a package that works with Emacs. - -Here are some style and legal conventions for contributors to Emacs: - - -* Coding Standards - -Contributed code should follow the GNU Coding Standards. - -If it doesn't, we'll need to find someone to fix the code before we -can use it. - -Emacs has certain additional style and coding conventions. - -Ref: http://www.gnu.org/prep/standards/ -Ref: GNU Coding Standards Info Manual -Ref: The "Tips" Appendix in the Emacs Lisp Reference. - - -* Copyright Assignment - -The FSF (Free Software Foundation) is the copyright holder for GNU Emacs. -The FSF is a nonprofit with a worldwide mission to promote computer -user freedom and to defend the rights of all free software users. -For general information, see the website http://www.fsf.org/ . - -Generally speaking, for non-trivial contributions to GNU Emacs we -require that the copyright be assigned to the FSF. For the reasons -behind this, see: http://www.gnu.org/licenses/why-assign.html . - -Copyright assignment is a simple process. Residents of some countries -can do it entirely electronically. We can help you get started, and -answer any questions you may have (or point you to the people with the -answers), at the emacs-devel@gnu.org mailing list. - -(Please note: general discussion about why some GNU projects ask -for a copyright assignment is off-topic for emacs-devel. -See gnu-misc-discuss instead.) - -A copyright disclaimer is also a possibility, but we prefer an assignment. -Note that the disclaimer, like an assignment, involves you sending -signed paperwork to the FSF (simply saying "this is in the public domain" -is not enough). Also, a disclaimer cannot be applied to future work, it -has to be repeated each time you want to send something new. - -We can accept small changes (roughly, fewer than 15 lines) without -an assignment. This is a cumulative limit (e.g. three separate 5 line -patches) over all your contributions. - -* Getting the Source Code - -The latest version of the Emacs source code can be downloaded from the -Savannah web site. It is important to write your patch based on the -latest version. If you start from an older version, your patch may be -outdated (so that maintainers will have a hard time applying it), or -changes in Emacs may have made your patch unnecessary. - -After you have downloaded the repository source, you should read the file -INSTALL.REPO for build instructions (they differ to some extent from a -normal build). - -Ref: http://savannah.gnu.org/projects/emacs - - -* Submitting Patches - -Every patch must have several pieces of information before we -can properly evaluate it. - -When you have all these pieces, bundle them up in a mail message and -send it to the developers. Sending it to bug-gnu-emacs@gnu.org -(which is the bug/feature list) is recommended, because that list -is coupled to a tracking system that makes it easier to locate patches. -If your patch is not complete and you think it needs more discussion, -you might want to send it to emacs-devel@gnu.org instead. If you -revise your patch, send it as a followup to the initial topic. - -** Description - -For bug fixes, a description of the bug and how your patch fixes it. - -For new features, a description of the feature and your implementation. - -** ChangeLog - -A ChangeLog entry as plaintext (separate from the patch). - -See the existing ChangeLog files for format and content. Note that, -unlike some other projects, we do require ChangeLogs also for -documentation, i.e. Texinfo files. - -Ref: "Change Log Concepts" node of the GNU Coding Standards Info -Manual, for how to write good log entries. - -When using git, commit messages should use ChangeLog format, with a -single short line explaining the change, then an empty line, then -unindented ChangeLog entries. (Essentially, a commit message should -be a duplicate of what the patch adds to the ChangeLog files. We are -planning to automate this better, to avoid the duplication.) - -** The patch itself. - -If you are accessing the Emacs repository, make sure your copy is -up-to-date (e.g. with 'git pull'). You can commit your changes -to a private branch and generate a patch from the master version -by using - git format-patch master -Or you can leave your changes uncommitted and use - git diff -With no repository, you can use - diff -u OLD NEW - -** Mail format. - -We prefer to get the patches as plain text, either inline (be careful -your mail client does not change line breaks) or as MIME attachments. - -** Please reread your patch before submitting it. - -** Do not mix changes. - -If you send several unrelated changes together, we will ask you to -separate them so we can consider each of the changes by itself. - -** Do not make formatting changes. - -Making cosmetic formatting changes (indentation, etc) makes it harder -to see what you have really changed. - - -* Coding style and conventions. - -** Mandatory reading: - -The "Tips and Conventions" Appendix of the Emacs Lisp Reference. - -** Avoid using `defadvice' or `eval-after-load' for Lisp code to be -included in Emacs. - -** Remove all trailing whitespace in all source and text files. - -** Use ?\s instead of ? in Lisp code for a space character. - - -* Supplemental information for Emacs Developers. - -** Write access to the Emacs repository. - -Once you become a frequent contributor to Emacs, we can consider -giving you write access to the version-control repository. - - -** Emacs Mailing lists. - -Discussion about Emacs development takes place on emacs-devel@gnu.org. - -Bug reports and fixes, feature requests and implementations should be -sent to bug-gnu-emacs@gnu.org, the bug/feature list. This is coupled -to the tracker at http://debbugs.gnu.org . - -You can subscribe to the mailing lists, or see the list archives, -by following links from http://savannah.gnu.org/mail/?group=emacs . - -** Document your changes. - -Any change that matters to end-users should have a NEWS entry. - -Think about whether your change requires updating the documentation -(both manuals and doc-strings). If you know it does not, mark the NEWS -entry with "---". If you know that *all* the necessary documentation -updates have been made, mark the entry with "+++". Otherwise do not mark it. - -** Understanding Emacs Internals. - -The best way to understand Emacs Internals is to read the code, -but the nodes "Tips" and "GNU Emacs Internals" in the Appendix -of the Emacs Lisp Reference Manual may also help. - -The file etc/DEBUG describes how to debug Emacs bugs. - - - -This file is part of GNU Emacs. - -GNU Emacs is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -GNU Emacs is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Emacs. If not, see . - -Local variables: -mode: outline -paragraph-separate: "[ ]*$" -end: diff --git a/etc/refcards/emacsver.tex b/etc/refcards/emacsver.tex deleted file mode 100644 index 8b6e8c4..0000000 --- a/etc/refcards/emacsver.tex +++ /dev/null @@ -1,4 +0,0 @@ -%% This file is not generated by configure, because then the provided -%% pdf files would always appear out-of-date. -\def\versionemacs{24} % major version of emacs -\def\year{2015} % latest copyright year diff --git a/lib-src/grep-changelog b/lib-src/grep-changelog deleted file mode 100755 index 3e08734..0000000 --- a/lib-src/grep-changelog +++ /dev/null @@ -1,265 +0,0 @@ -#! /usr/bin/perl - -# Copyright (C) 1999-2015 Free Software Foundation, Inc. -# -# This file is part of GNU Emacs. - -# GNU Emacs is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. - -# GNU Emacs is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with GNU Emacs. If not, see . - - -# Extract entries from ChangeLogs matching specified criteria. -# Optionally format the resulting output to a form suitable for RCS -# logs, like they are used in Emacs, for example. In this format, -# author lines, leading spaces, and file names are removed. - -require 5; -use strict; - -# Parse command line options. - -use vars qw($author $regexp $exclude $from_date $to_date - $rcs_log $with_date $version $help $reverse - @entries); - -use Getopt::Long; - -my $result; - -if (@ARGV == 0) { - - # No arguments cannot possibly mean "show everything"!! - $result = 0; - -} else { - - $result = GetOptions ("author=s" => \$author, - "text=s" => \$regexp, - "exclude=s" => \$exclude, - "from-date=s" => \$from_date, - "to-date=s" => \$to_date, - "rcs-log" => \$rcs_log, - "with-date" => \$with_date, - "reverse!" => \$reverse, - "version" => \$version, - "help" => \$help); - - # If date options are specified, check that they have the format - # YYYY-MM-DD. - - $result = 0 if $from_date && $from_date !~ /^\d\d\d\d-\d\d-\d\d$/; - $result = 0 if $to_date && $to_date !~ /^\d\d\d\d-\d\d-\d\d$/; -} - -# Print usage information and exit when necessary. - -if ($result == 0 || $help) { - print <)) { - if ($line =~ /^\S/) { - # Line is an author-line. Print previous entry if - # it matches. - print_log ($header, $entry) - if header_match_p ($header) && entry_match_p ($entry); - - $entry = ""; - $header = $line; - - # Add empty lines below the header. - while (defined($line = ) && $line =~ /^\s*$/) { - $header = "$header$line"; - } - } - - last unless defined $line; - - if ($line =~ /^\s*\*/) { - # LINE is the first line of a ChangeLog entry. Print - # previous entry if it matches. - print_log ($header, $entry) - if header_match_p ($header) && entry_match_p ($entry); - $entry = $line; - } else { - # Add LINE to the current entry. - $entry = "$entry$line"; - } - } - - # Print last entry if it matches. - print_log ($header, $entry) - if header_match_p ($header) && entry_match_p ($entry); - - close IN; - - if ($reverse) { - for (my $entry = @entries; $entry; $entry--) { - print $entries[$entry-1]; - } - } -} - - -# Main program. Process ChangeLogs. - -# If files were specified on the command line, parse those files in the -# order supplied by the user; otherwise parse default files ChangeLog and -# ChangeLog.NNN according to $reverse. -unless (@ARGV > 0) { - @ARGV = ("ChangeLog"); - - push @ARGV, - map {"ChangeLog.$_"} - sort {$b <=> $a} - map {/\.(\d+)$/; $1} - do { - opendir D, '.'; - grep /^ChangeLog\.\d+$/, readdir D; - }; - - @ARGV = reverse @ARGV if $reverse; -} - -while (defined (my $log = shift @ARGV)) { - parse_changelog ($log) if -f $log; -} - - -# grep-changelog ends here. diff --git a/lib-src/test-distrib.c b/lib-src/test-distrib.c deleted file mode 100644 index 6a12201..0000000 --- a/lib-src/test-distrib.c +++ /dev/null @@ -1,88 +0,0 @@ -/* test-distrib.c --- testing distribution of nonprinting chars - -Copyright (C) 1987, 1993-1995, 1999, 2001-2015 Free Software Foundation, -Inc. - -This file is part of GNU Emacs. - -GNU Emacs is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -GNU Emacs is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Emacs. If not, see . */ - - -#include -#include -#include -#include - -/* Break string in two parts to avoid buggy C compilers that ignore characters - after nulls in strings. */ - -static char string1[] = "Testing distribution of nonprinting chars:\n\ -Should be 0177: \177 Should be 0377: \377 Should be 0212: \212.\n\ -Should be 0000: "; - -static char string2[] = ".\n\ -This file is read by the `test-distribution' program.\n\ -If you change it, you will make that program fail.\n"; - -/* Like `read' but keeps trying until it gets SIZE bytes or reaches eof. */ -static int -cool_read (int fd, char *buf, size_t size) -{ - ssize_t num; - ssize_t sofar = 0; - - while (1) - { - if ((num = read (fd, buf + sofar, size - sofar)) == 0) - return sofar; - else if (num < 0) - return num; - sofar += num; - } -} - -int -main (int argc, char **argv) -{ - int fd; - char buf[300]; - - if (argc != 2) - { - fprintf (stderr, "Usage: %s testfile\n", argv[0]); - exit (EXIT_FAILURE); - } - fd = open (argv[1], O_RDONLY); - if (fd < 0) - { - perror (argv[1]); - exit (EXIT_FAILURE); - } - if (cool_read (fd, buf, sizeof string1) != sizeof string1 || - strcmp (buf, string1) || - cool_read (fd, buf, sizeof string2) != sizeof string2 - 1 || - strncmp (buf, string2, sizeof string2 - 1)) - { - fprintf (stderr, "Data in file `%s' has been damaged.\n\ -Most likely this means that many nonprinting characters\n\ -have been corrupted in the files of Emacs, and it will not work.\n", - argv[1]); - exit (EXIT_FAILURE); - } - close (fd); - return EXIT_SUCCESS; -} - - -/* test-distrib.c ends here */ diff --git a/lib/alloca.in.h b/lib/alloca.in.h index b41c393..906fe92 100644 --- a/lib/alloca.in.h +++ b/lib/alloca.in.h @@ -1,7 +1,7 @@ /* Memory allocation on the stack. - Copyright (C) 1995, 1999, 2001-2004, 2006-2015 Free Software - Foundation, Inc. + Copyright (C) 1995, 1999, 2001-2004, 2006-2015 Free Software Foundation, + Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published diff --git a/lib/binary-io.h b/lib/binary-io.h index 8478003..f5b66c7 100644 --- a/lib/binary-io.h +++ b/lib/binary-io.h @@ -1,6 +1,5 @@ /* Binary mode I/O. - Copyright (C) 2001, 2003, 2005, 2008-2015 Free Software Foundation, - Inc. + Copyright (C) 2001, 2003, 2005, 2008-2015 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lib/c-ctype.h b/lib/c-ctype.h index 53c443a..4764473 100644 --- a/lib/c-ctype.h +++ b/lib/c-ctype.h @@ -5,8 +5,7 @@ functions' behaviour depends on the current locale set via setlocale. - Copyright (C) 2000-2003, 2006, 2008-2015 Free Software Foundation, - Inc. + Copyright (C) 2000-2003, 2006, 2008-2015 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lib/c-strcasecmp.c b/lib/c-strcasecmp.c index dbf17b2..6deb6d1 100644 --- a/lib/c-strcasecmp.c +++ b/lib/c-strcasecmp.c @@ -1,6 +1,5 @@ /* c-strcasecmp.c -- case insensitive string comparator in C locale - Copyright (C) 1998-1999, 2005-2006, 2009-2015 Free Software - Foundation, Inc. + Copyright (C) 1998-1999, 2005-2006, 2009-2015 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lib/c-strncasecmp.c b/lib/c-strncasecmp.c index 580ea23..b98e368 100644 --- a/lib/c-strncasecmp.c +++ b/lib/c-strncasecmp.c @@ -1,6 +1,5 @@ /* c-strncasecmp.c -- case insensitive string comparator in C locale - Copyright (C) 1998-1999, 2005-2006, 2009-2015 Free Software - Foundation, Inc. + Copyright (C) 1998-1999, 2005-2006, 2009-2015 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lib/careadlinkat.c b/lib/careadlinkat.c index 3b3153e..f2f5da2 100644 --- a/lib/careadlinkat.c +++ b/lib/careadlinkat.c @@ -1,7 +1,7 @@ /* Read symbolic links into a buffer without size limitation, relative to fd. - Copyright (C) 2001, 2003-2004, 2007, 2009-2015 Free Software - Foundation, Inc. + Copyright (C) 2001, 2003-2004, 2007, 2009-2015 Free Software Foundation, + Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lib/close-stream.c b/lib/close-stream.c index 1c4e74c..6e3d865 100644 --- a/lib/close-stream.c +++ b/lib/close-stream.c @@ -1,7 +1,6 @@ /* Close a stream, with nicer error checking than fclose's. - Copyright (C) 1998-2002, 2004, 2006-2015 Free Software Foundation, - Inc. + Copyright (C) 1998-2002, 2004, 2006-2015 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lib/dosname.h b/lib/dosname.h index 25aba13..893baf6 100644 --- a/lib/dosname.h +++ b/lib/dosname.h @@ -1,7 +1,6 @@ /* File names on MS-DOS/Windows systems. - Copyright (C) 2000-2001, 2004-2006, 2009-2015 Free Software - Foundation, Inc. + Copyright (C) 2000-2001, 2004-2006, 2009-2015 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lib/dup2.c b/lib/dup2.c index 94406df..0e13214 100644 --- a/lib/dup2.c +++ b/lib/dup2.c @@ -1,7 +1,6 @@ /* Duplicate an open file descriptor to a specified file descriptor. - Copyright (C) 1999, 2004-2007, 2009-2015 Free Software Foundation, - Inc. + Copyright (C) 1999, 2004-2007, 2009-2015 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lib/filemode.h b/lib/filemode.h index 805bc5a..ff0460a 100644 --- a/lib/filemode.h +++ b/lib/filemode.h @@ -1,7 +1,7 @@ /* Make a string describing file modes. - Copyright (C) 1998-1999, 2003, 2006, 2009-2015 Free Software - Foundation, Inc. + Copyright (C) 1998-1999, 2003, 2006, 2009-2015 Free Software Foundation, + Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lib/fpending.c b/lib/fpending.c index 05e84d3..c4b4a51 100644 --- a/lib/fpending.c +++ b/lib/fpending.c @@ -1,6 +1,6 @@ /* fpending.c -- return the number of pending output bytes on a stream - Copyright (C) 2000, 2004, 2006-2007, 2009-2015 Free Software - Foundation, Inc. + Copyright (C) 2000, 2004, 2006-2007, 2009-2015 Free Software Foundation, + Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lib/fpending.h b/lib/fpending.h index 1944282..5a1b2ad 100644 --- a/lib/fpending.h +++ b/lib/fpending.h @@ -1,7 +1,7 @@ /* Declare __fpending. - Copyright (C) 2000, 2003, 2005-2006, 2009-2015 Free Software - Foundation, Inc. + Copyright (C) 2000, 2003, 2005-2006, 2009-2015 Free Software Foundation, + Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lib/getgroups.c b/lib/getgroups.c index a7f0f9e..5563dfb 100644 --- a/lib/getgroups.c +++ b/lib/getgroups.c @@ -1,7 +1,6 @@ /* provide consistent interface to getgroups for systems that don't allow N==0 - Copyright (C) 1996, 1999, 2003, 2006-2015 Free Software Foundation, - Inc. + Copyright (C) 1996, 1999, 2003, 2006-2015 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lib/getloadavg.c b/lib/getloadavg.c index 119a32b..0cbca26 100644 --- a/lib/getloadavg.c +++ b/lib/getloadavg.c @@ -1,7 +1,7 @@ /* Get the system load averages. - Copyright (C) 1985-1989, 1991-1995, 1997, 1999-2000, 2003-2015 Free - Software Foundation, Inc. + Copyright (C) 1985-1989, 1991-1995, 1997, 1999-2000, 2003-2015 Free Software + Foundation, Inc. NOTE: The canonical source of this file is maintained with gnulib. Bugs can be reported to bug-gnulib@gnu.org. diff --git a/lib/getopt.in.h b/lib/getopt.in.h index 1688631..9248f76 100644 --- a/lib/getopt.in.h +++ b/lib/getopt.in.h @@ -1,6 +1,6 @@ /* Declarations for getopt. - Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2007, 2009-2015 Free - Software Foundation, Inc. + Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2007, 2009-2015 Free Software + Foundation, Inc. This file is part of the GNU C Library. This program is free software: you can redistribute it and/or modify diff --git a/lib/getopt1.c b/lib/getopt1.c index 60760ea..2b1feb6 100644 --- a/lib/getopt1.c +++ b/lib/getopt1.c @@ -1,6 +1,6 @@ /* getopt_long and getopt_long_only entry points for GNU getopt. - Copyright (C) 1987-1994, 1996-1998, 2004, 2006, 2009-2015 Free - Software Foundation, Inc. + Copyright (C) 1987-1994, 1996-1998, 2004, 2006, 2009-2015 Free Software + Foundation, Inc. This file is part of the GNU C Library. This program is free software: you can redistribute it and/or modify diff --git a/lib/getopt_int.h b/lib/getopt_int.h index 89c896a..e893a6e 100644 --- a/lib/getopt_int.h +++ b/lib/getopt_int.h @@ -1,6 +1,6 @@ /* Internal declarations for getopt. - Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2004, 2009-2015 Free - Software Foundation, Inc. + Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2004, 2009-2015 Free Software + Foundation, Inc. This file is part of the GNU C Library. This program is free software: you can redistribute it and/or modify diff --git a/lib/gettext.h b/lib/gettext.h index c10c702..599a14e 100644 --- a/lib/gettext.h +++ b/lib/gettext.h @@ -1,6 +1,6 @@ /* Convenience header for conditional use of GNU . - Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2015 Free - Software Foundation, Inc. + Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2015 Free Software + Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lib/gettime.c b/lib/gettime.c index 3786231..1c47e3b 100644 --- a/lib/gettime.c +++ b/lib/gettime.c @@ -1,7 +1,6 @@ /* gettime -- get the system clock - Copyright (C) 2002, 2004-2007, 2009-2015 Free Software Foundation, - Inc. + Copyright (C) 2002, 2004-2007, 2009-2015 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lib/gettimeofday.c b/lib/gettimeofday.c index ff6940c..e0e2e69 100644 --- a/lib/gettimeofday.c +++ b/lib/gettimeofday.c @@ -1,7 +1,6 @@ /* Provide gettimeofday for systems that don't have it or for which it's broken. - Copyright (C) 2001-2003, 2005-2007, 2009-2015 Free Software - Foundation, Inc. + Copyright (C) 2001-2003, 2005-2007, 2009-2015 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lib/gnulib.mk b/lib/gnulib.mk index 07541ec..1b671e7 100644 --- a/lib/gnulib.mk +++ b/lib/gnulib.mk @@ -1578,6 +1578,7 @@ time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $( -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ + -e 's|@''UNISTD_H_DEFINES_STRUCT_TIMESPEC''@|$(UNISTD_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ diff --git a/lib/group-member.c b/lib/group-member.c index a60fae9..23074e4 100644 --- a/lib/group-member.c +++ b/lib/group-member.c @@ -1,7 +1,7 @@ /* group-member.c -- determine whether group id is in calling user's group list - Copyright (C) 1994, 1997-1998, 2003, 2005-2006, 2009-2015 Free - Software Foundation, Inc. + Copyright (C) 1994, 1997-1998, 2003, 2005-2006, 2009-2015 Free Software + Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lib/md5.c b/lib/md5.c index 1a73b2a..30525dc 100644 --- a/lib/md5.c +++ b/lib/md5.c @@ -1,7 +1,7 @@ /* Functions to compute MD5 message digest of files or memory blocks. according to the definition of MD5 in RFC 1321 from April 1992. - Copyright (C) 1995-1997, 1999-2001, 2005-2006, 2008-2015 Free - Software Foundation, Inc. + Copyright (C) 1995-1997, 1999-2001, 2005-2006, 2008-2015 Free Software + Foundation, Inc. This file is part of the GNU C Library. This program is free software; you can redistribute it and/or modify it diff --git a/lib/md5.h b/lib/md5.h index eb6fff6..43add99 100644 --- a/lib/md5.h +++ b/lib/md5.h @@ -1,7 +1,7 @@ /* Declaration of functions and data types used for MD5 sum computing library functions. - Copyright (C) 1995-1997, 1999-2001, 2004-2006, 2008-2015 Free - Software Foundation, Inc. + Copyright (C) 1995-1997, 1999-2001, 2004-2006, 2008-2015 Free Software + Foundation, Inc. This file is part of the GNU C Library. This program is free software; you can redistribute it and/or modify it diff --git a/lib/memrchr.c b/lib/memrchr.c index 4540277..3827208 100644 --- a/lib/memrchr.c +++ b/lib/memrchr.c @@ -1,7 +1,7 @@ /* memrchr -- find the last occurrence of a byte in a memory block - Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2015 Free - Software Foundation, Inc. + Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2015 Free Software + Foundation, Inc. Based on strlen implementation by Torbjorn Granlund (tege@sics.se), with help from Dan Sahlin (dan@sics.se) and diff --git a/lib/sha1.c b/lib/sha1.c index 90faa4e..4411cee 100644 --- a/lib/sha1.c +++ b/lib/sha1.c @@ -1,8 +1,7 @@ /* sha1.c - Functions to compute SHA1 message digest of files or memory blocks according to the NIST specification FIPS-180-1. - Copyright (C) 2000-2001, 2003-2006, 2008-2015 Free Software - Foundation, Inc. + Copyright (C) 2000-2001, 2003-2006, 2008-2015 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the diff --git a/lib/sig2str.c b/lib/sig2str.c index 0966dd5..58154da 100644 --- a/lib/sig2str.c +++ b/lib/sig2str.c @@ -1,7 +1,6 @@ /* sig2str.c -- convert between signal names and numbers - Copyright (C) 2002, 2004, 2006, 2009-2015 Free Software Foundation, - Inc. + Copyright (C) 2002, 2004, 2006, 2009-2015 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lib/stdarg.in.h b/lib/stdarg.in.h deleted file mode 100644 index 5239f51..0000000 --- a/lib/stdarg.in.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Substitute for and wrapper around . - Copyright (C) 2008-2015 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#ifndef _@GUARD_PREFIX@_STDARG_H - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -/* The include_next requires a split double-inclusion guard. */ -#@INCLUDE_NEXT@ @NEXT_STDARG_H@ - -#ifndef _@GUARD_PREFIX@_STDARG_H -#define _@GUARD_PREFIX@_STDARG_H - -#ifndef va_copy -# define va_copy(a,b) ((a) = (b)) -#endif - -#endif /* _@GUARD_PREFIX@_STDARG_H */ -#endif /* _@GUARD_PREFIX@_STDARG_H */ diff --git a/lib/stdbool.in.h b/lib/stdbool.in.h deleted file mode 100644 index 64a1761..0000000 --- a/lib/stdbool.in.h +++ /dev/null @@ -1,132 +0,0 @@ -/* Copyright (C) 2001-2003, 2006-2015 Free Software Foundation, Inc. - Written by Bruno Haible , 2001. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#ifndef _GL_STDBOOL_H -#define _GL_STDBOOL_H - -/* ISO C 99 for platforms that lack it. */ - -/* Usage suggestions: - - Programs that use should be aware of some limitations - and standards compliance issues. - - Standards compliance: - - - must be #included before 'bool', 'false', 'true' - can be used. - - - You cannot assume that sizeof (bool) == 1. - - - Programs should not undefine the macros bool, true, and false, - as C99 lists that as an "obsolescent feature". - - Limitations of this substitute, when used in a C89 environment: - - - must be #included before the '_Bool' type can be used. - - - You cannot assume that _Bool is a typedef; it might be a macro. - - - Bit-fields of type 'bool' are not supported. Portable code - should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'. - - - In C99, casts and automatic conversions to '_Bool' or 'bool' are - performed in such a way that every nonzero value gets converted - to 'true', and zero gets converted to 'false'. This doesn't work - with this substitute. With this substitute, only the values 0 and 1 - give the expected result when converted to _Bool' or 'bool'. - - - C99 allows the use of (_Bool)0.0 in constant expressions, but - this substitute cannot always provide this property. - - Also, it is suggested that programs use 'bool' rather than '_Bool'; - this isn't required, but 'bool' is more common. */ - - -/* 7.16. Boolean type and values */ - -/* BeOS already #defines false 0, true 1. We use the same - definitions below, but temporarily we have to #undef them. */ -#if defined __BEOS__ && !defined __HAIKU__ -# include /* defines bool but not _Bool */ -# undef false -# undef true -#endif - -#ifdef __cplusplus -# define _Bool bool -# define bool bool -#else -# if defined __BEOS__ && !defined __HAIKU__ - /* A compiler known to have 'bool'. */ - /* If the compiler already has both 'bool' and '_Bool', we can assume they - are the same types. */ -# if !@HAVE__BOOL@ -typedef bool _Bool; -# endif -# else -# if !defined __GNUC__ - /* If @HAVE__BOOL@: - Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when - the built-in _Bool type is used. See - http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html - http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html - http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html - Similar bugs are likely with other compilers as well; this file - wouldn't be used if was working. - So we override the _Bool type. - If !@HAVE__BOOL@: - Need to define _Bool ourselves. As 'signed char' or as an enum type? - Use of a typedef, with SunPRO C, leads to a stupid - "warning: _Bool is a keyword in ISO C99". - Use of an enum type, with IRIX cc, leads to a stupid - "warning(1185): enumerated type mixed with another type". - Even the existence of an enum type, without a typedef, - "Invalid enumerator. (badenum)" with HP-UX cc on Tru64. - The only benefit of the enum, debuggability, is not important - with these compilers. So use 'signed char' and no enum. */ -# define _Bool signed char -# else - /* With this compiler, trust the _Bool type if the compiler has it. */ -# if !@HAVE__BOOL@ - /* For the sake of symbolic names in gdb, define true and false as - enum constants, not only as macros. - It is tempting to write - typedef enum { false = 0, true = 1 } _Bool; - so that gdb prints values of type 'bool' symbolically. But then - values of type '_Bool' might promote to 'int' or 'unsigned int' - (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int' - (see ISO C 99 6.3.1.1.(2)). So add a negative value to the - enum; this ensures that '_Bool' promotes to 'int'. */ -typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool; -# endif -# endif -# endif -# define bool _Bool -#endif - -/* The other macros must be usable in preprocessor directives. */ -#ifdef __cplusplus -# define false false -# define true true -#else -# define false 0 -# define true 1 -#endif - -#define __bool_true_false_are_defined 1 - -#endif /* _GL_STDBOOL_H */ diff --git a/lib/stdlib.in.h b/lib/stdlib.in.h index 490be46..428a119 100644 --- a/lib/stdlib.in.h +++ b/lib/stdlib.in.h @@ -1,7 +1,6 @@ /* A GNU-like . - Copyright (C) 1995, 2001-2004, 2006-2015 Free Software Foundation, - Inc. + Copyright (C) 1995, 2001-2004, 2006-2015 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lib/strftime.c b/lib/strftime.c index fdb87b5..2426aae 100644 --- a/lib/strftime.c +++ b/lib/strftime.c @@ -1,5 +1,4 @@ -/* Copyright (C) 1991-2001, 2003-2007, 2009-2015 Free Software - * Foundation, Inc. +/* Copyright (C) 1991-2001, 2003-2007, 2009-2015 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. diff --git a/lib/strtoimax.c b/lib/strtoimax.c index 6575c87..8ff65ce 100644 --- a/lib/strtoimax.c +++ b/lib/strtoimax.c @@ -1,7 +1,7 @@ /* Convert string representation of a number into an intmax_t value. - Copyright (C) 1999, 2001-2004, 2006, 2009-2015 Free Software - Foundation, Inc. + Copyright (C) 1999, 2001-2004, 2006, 2009-2015 Free Software Foundation, + Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lib/strtol.c b/lib/strtol.c index 56b38af..1bc1439 100644 --- a/lib/strtol.c +++ b/lib/strtol.c @@ -1,7 +1,7 @@ /* Convert string representation of a number into an integer value. - Copyright (C) 1991-1992, 1994-1999, 2003, 2005-2007, 2009-2015 Free - Software Foundation, Inc. + Copyright (C) 1991-1992, 1994-1999, 2003, 2005-2007, 2009-2015 Free Software + Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@gnu.org. diff --git a/lib/strtoll.c b/lib/strtoll.c index e91cc29..d712349 100644 --- a/lib/strtoll.c +++ b/lib/strtoll.c @@ -1,6 +1,6 @@ /* Function to parse a 'long long int' from text. - Copyright (C) 1995-1997, 1999, 2001, 2009-2015 Free Software - Foundation, Inc. + Copyright (C) 1995-1997, 1999, 2001, 2009-2015 Free Software Foundation, + Inc. This file is part of the GNU C Library. This program is free software: you can redistribute it and/or modify diff --git a/lib/strtoull.c b/lib/strtoull.c index 4d5e433..5cd2554 100644 --- a/lib/strtoull.c +++ b/lib/strtoull.c @@ -1,6 +1,5 @@ /* Function to parse an 'unsigned long long int' from text. - Copyright (C) 1995-1997, 1999, 2009-2015 Free Software Foundation, - Inc. + Copyright (C) 1995-1997, 1999, 2009-2015 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@gnu.org. diff --git a/lib/tempname.c b/lib/tempname.c index 55fad94..088b224 100644 --- a/lib/tempname.c +++ b/lib/tempname.c @@ -1,7 +1,6 @@ /* tempname.c - generate the name of a temporary file. - Copyright (C) 1991-2003, 2005-2007, 2009-2015 Free Software - Foundation, Inc. + Copyright (C) 1991-2003, 2005-2007, 2009-2015 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lib/time.in.h b/lib/time.in.h index 8d721c5..1a6b746 100644 --- a/lib/time.in.h +++ b/lib/time.in.h @@ -55,6 +55,8 @@ # include # elif @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ # include +# elif @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ +# include # else # ifdef __cplusplus diff --git a/lib/time_r.c b/lib/time_r.c index 222705b..0b512de 100644 --- a/lib/time_r.c +++ b/lib/time_r.c @@ -1,7 +1,6 @@ /* Reentrant time functions like localtime_r. - Copyright (C) 2003, 2006-2007, 2010-2015 Free Software Foundation, - Inc. + Copyright (C) 2003, 2006-2007, 2010-2015 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lib/unsetenv.c b/lib/unsetenv.c index 80810e7..87f41d5 100644 --- a/lib/unsetenv.c +++ b/lib/unsetenv.c @@ -1,5 +1,4 @@ -/* Copyright (C) 1992, 1995-2002, 2005-2015 Free Software Foundation, - Inc. +/* Copyright (C) 1992, 1995-2002, 2005-2015 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software: you can redistribute it and/or modify diff --git a/lib/xalloc-oversized.h b/lib/xalloc-oversized.h index 397a04b..f0e9778 100644 --- a/lib/xalloc-oversized.h +++ b/lib/xalloc-oversized.h @@ -1,7 +1,6 @@ /* xalloc-oversized.h -- memory allocation size checking - Copyright (C) 1990-2000, 2003-2004, 2006-2015 Free Software - Foundation, Inc. + Copyright (C) 1990-2000, 2003-2004, 2006-2015 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/lisp/gnus/gnus-setup.el b/lisp/gnus/gnus-setup.el deleted file mode 100644 index 86b3bff..0000000 --- a/lisp/gnus/gnus-setup.el +++ /dev/null @@ -1,191 +0,0 @@ -;;; gnus-setup.el --- Initialization & Setup for Gnus 5 - -;; Copyright (C) 1995-1996, 2000-2015 Free Software Foundation, Inc. - -;; Author: Steven L. Baur -;; Keywords: news - -;; This file is part of GNU Emacs. - -;; GNU Emacs is free software: you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; GNU Emacs is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs. If not, see . - -;;; Commentary: -;; My head is starting to spin with all the different mail/news packages. -;; Stop The Madness! - -;; Given that Emacs Lisp byte codes may be diverging, it is probably best -;; not to byte compile this, and just arrange to have the .el loaded out -;; of .emacs. - -;;; Code: - -(eval-when-compile (require 'cl)) - -(defvar gnus-use-installed-gnus t - "*If non-nil use installed version of Gnus.") - -(defvar gnus-use-installed-mailcrypt (featurep 'xemacs) - "*If non-nil use installed version of mailcrypt.") - -(defvar gnus-emacs-lisp-directory (if (featurep 'xemacs) - "/usr/local/lib/xemacs/" - "/usr/local/share/emacs/") - "Directory where Emacs site lisp is located.") - -(defvar gnus-gnus-lisp-directory (concat gnus-emacs-lisp-directory - "gnus/lisp/") - "Directory where Gnus Emacs lisp is found.") - -(defvar gnus-mailcrypt-lisp-directory (concat gnus-emacs-lisp-directory - "site-lisp/mailcrypt/") - "Directory where Mailcrypt Emacs Lisp is found.") - -(defvar gnus-bbdb-lisp-directory (concat gnus-emacs-lisp-directory - "site-lisp/bbdb/") - "Directory where Big Brother Database is found.") - -(defvar gnus-use-mhe nil - "Set this if you want to use MH-E for mail reading.") -(defvar gnus-use-rmail nil - "Set this if you want to use RMAIL for mail reading.") -(defvar gnus-use-sendmail nil - "Set this if you want to use SENDMAIL for mail reading.") -(defvar gnus-use-vm nil - "Set this if you want to use the VM package for mail reading.") -(defvar gnus-use-sc nil - "Set this if you want to use Supercite.") -(defvar gnus-use-mailcrypt t - "Set this if you want to use Mailcrypt for dealing with PGP messages.") -(defvar gnus-use-bbdb nil - "Set this if you want to use the Big Brother DataBase.") - -(when (and (not gnus-use-installed-gnus) - (null (member gnus-gnus-lisp-directory load-path))) - (push gnus-gnus-lisp-directory load-path)) - -;;; We can't do this until we know where Gnus is. -(require 'message) - -;;; Mailcrypt by -;;; Jin Choi -;;; Patrick LoPresti - -(when gnus-use-mailcrypt - (when (and (not gnus-use-installed-mailcrypt) - (null (member gnus-mailcrypt-lisp-directory load-path))) - (setq load-path (cons gnus-mailcrypt-lisp-directory load-path))) - (autoload 'mc-install-write-mode "mailcrypt" nil t) - (autoload 'mc-install-read-mode "mailcrypt" nil t) -;;; (add-hook 'message-mode-hook 'mc-install-write-mode) -;;; (add-hook 'gnus-summary-mode-hook 'mc-install-read-mode) - (when gnus-use-mhe - (add-hook 'mh-folder-mode-hook 'mc-install-read-mode) - (add-hook 'mh-letter-mode-hook 'mc-install-write-mode))) - -;;; BBDB by -;;; Jamie Zawinski - -(when gnus-use-bbdb - ;; bbdb will never be installed with emacs. - (when (null (member gnus-bbdb-lisp-directory load-path)) - (setq load-path (cons gnus-bbdb-lisp-directory load-path))) - (autoload 'bbdb "bbdb-com" - "Insidious Big Brother Database" t) - (autoload 'bbdb-name "bbdb-com" - "Insidious Big Brother Database" t) - (autoload 'bbdb-company "bbdb-com" - "Insidious Big Brother Database" t) - (autoload 'bbdb-net "bbdb-com" - "Insidious Big Brother Database" t) - (autoload 'bbdb-notes "bbdb-com" - "Insidious Big Brother Database" t) - - (when gnus-use-vm - (autoload 'bbdb-insinuate-vm "bbdb-vm" - "Hook BBDB into VM" t)) - - (when gnus-use-rmail - (autoload 'bbdb-insinuate-rmail "bbdb-rmail" - "Hook BBDB into RMAIL" t) - (add-hook 'rmail-mode-hook 'bbdb-insinuate-rmail)) - - (when gnus-use-mhe - (autoload 'bbdb-insinuate-mh "bbdb-mh" - "Hook BBDB into MH-E" t) - (add-hook 'mh-folder-mode-hook 'bbdb-insinuate-mh)) - - (autoload 'bbdb-insinuate-gnus "bbdb-gnus" - "Hook BBDB into Gnus" t) - (add-hook 'gnus-startup-hook 'bbdb-insinuate-gnus) - - (when gnus-use-sendmail - (autoload 'bbdb-insinuate-sendmail "bbdb" - "Insidious Big Brother Database" t) - (add-hook 'mail-setup-hook 'bbdb-insinuate-sendmail) - (add-hook 'message-setup-hook 'bbdb-insinuate-sendmail))) - -(when gnus-use-sc - (add-hook 'mail-citation-hook 'sc-cite-original) - (setq message-cite-function 'sc-cite-original)) - -;;;### (autoloads (gnus gnus-slave gnus-no-server) "gnus" "lisp/gnus.el" (12473 2137)) -;;; Generated autoloads from lisp/gnus.el - -;; Don't redo this if autoloads already exist -(unless (fboundp 'gnus) - (autoload 'gnus-slave-no-server "gnus" "\ -Read network news as a slave without connecting to local server." t nil) - - (autoload 'gnus-no-server "gnus" "\ -Read network news. -If ARG is a positive number, Gnus will use that as the -startup level. If ARG is nil, Gnus will be started at level 2. -If ARG is non-nil and not a positive number, Gnus will -prompt the user for the name of an NNTP server to use. -As opposed to `gnus', this command will not connect to the local server." t nil) - - (autoload 'gnus-slave "gnus" "\ -Read news as a slave." t nil) - - (autoload 'gnus "gnus" "\ -Read network news. -If ARG is non-nil and a positive number, Gnus will use that as the -startup level. If ARG is non-nil and not a positive number, Gnus will -prompt the user for the name of an NNTP server to use." t nil) - -;;;*** - -;;; These have moved out of gnus.el into other files. -;;; FIX FIX FIX: should other things be in gnus-setup? or these not in it? - (autoload 'gnus-update-format "gnus-spec" "\ -Update the format specification near point." t nil) - - (autoload 'gnus-fetch-group "gnus-group" "\ -Start Gnus if necessary and enter GROUP. -Returns whether the fetching was successful or not." t nil) - - (defalias 'gnus-batch-kill 'gnus-batch-score) - - (autoload 'gnus-batch-score "gnus-kill" "\ -Run batched scoring. -Usage: emacs -batch -l gnus -f gnus-batch-score ... -Newsgroups is a list of strings in Bnews format. If you want to score -the comp hierarchy, you'd say \"comp.all\". If you would not like to -score the alt hierarchy, you'd say \"!alt.all\"." t nil)) - -(provide 'gnus-setup) - -(run-hooks 'gnus-setup-load-hook) - -;;; gnus-setup.el ends here diff --git a/lisp/progmodes/cap-words.el b/lisp/progmodes/cap-words.el deleted file mode 100644 index 94e865d..0000000 --- a/lisp/progmodes/cap-words.el +++ /dev/null @@ -1,98 +0,0 @@ -;;; cap-words.el --- minor mode for motion in CapitalizedWordIdentifiers - -;; Copyright (C) 2002-2015 Free Software Foundation, Inc. - -;; Author: Dave Love -;; Keywords: languages - -;; This file is part of GNU Emacs. - -;; GNU Emacs is free software: you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; GNU Emacs is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs. If not, see . - -;;; Commentary: - -;; Provides Capitalized Words minor mode for word movement in -;; identifiers CapitalizedLikeThis. - -;; Note that the same effect could be obtained by frobbing the -;; category of upper case characters to produce word boundaries, but -;; the necessary processing isn't done for ASCII characters. - -;; Fixme: This doesn't work properly for mouse double clicks. - -;;; Code: - -(defun capitalized-find-word-boundary (pos limit) - "Function for use in `find-word-boundary-function-table'. -Looks for word boundaries before capitals." - (save-excursion - (goto-char pos) - (let (case-fold-search) - (if (<= pos limit) - ;; Fixme: Are these regexps the best? - (or (and (re-search-forward "\\=.\\w*[[:upper:]]" - limit t) - (progn (backward-char) - t)) - (re-search-forward "\\>" limit t)) - (or (re-search-backward "[[:upper:]]\\w*\\=" limit t) - (re-search-backward "\\<" limit t)))) - (point))) - - -(defconst capitalized-find-word-boundary-function-table - (let ((tab (make-char-table nil))) - (set-char-table-range tab t #'capitalized-find-word-boundary) - tab) - "Assigned to `find-word-boundary-function-table' in Capitalized Words mode.") - -;;;###autoload -(define-minor-mode capitalized-words-mode - "Toggle Capitalized Words mode. -With a prefix argument ARG, enable Capitalized Words mode if ARG -is positive, and disable it otherwise. If called from Lisp, -enable the mode if ARG is omitted or nil. - -Capitalized Words mode is a buffer-local minor mode. When -enabled, a word boundary occurs immediately before an uppercase -letter in a symbol. This is in addition to all the normal -boundaries given by the syntax and category tables. There is no -restriction to ASCII. - -E.g. the beginning of words in the following identifier are as marked: - - capitalizedWorDD - ^ ^ ^^ - -Note that these word boundaries only apply for word motion and -marking commands such as \\[forward-word]. This mode does not affect word -boundaries found by regexp matching (`\\>', `\\w' &c). - -This style of identifiers is common in environments like Java ones, -where underscores aren't trendy enough. Capitalization rules are -sometimes part of the language, e.g. Haskell, which may thus encourage -such a style. It is appropriate to add `capitalized-words-mode' to -the mode hook for programming language modes in which you encounter -variables like this, e.g. `java-mode-hook'. It's unlikely to cause -trouble if such identifiers aren't used. - -See also `glasses-mode' and `studlify-word'. -Obsoletes `c-forward-into-nomenclature'." - nil " Caps" nil :group 'programming - (set (make-local-variable 'find-word-boundary-function-table) - capitalized-find-word-boundary-function-table)) - -(provide 'cap-words) - -;;; cap-words.el ends here diff --git a/lisp/w32-common-fns.el b/lisp/w32-common-fns.el deleted file mode 100644 index 1e4e9fe..0000000 --- a/lisp/w32-common-fns.el +++ /dev/null @@ -1,134 +0,0 @@ -;;; w32-common-fns.el --- Lisp routines for Windows and Cygwin-w32 - -;; Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc. - -;; This file is part of GNU Emacs. - -;; GNU Emacs is free software: you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; GNU Emacs is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs. If not, see . - -;;; Commentary: -;;; -;;; This file contains functions that are used by both native NT Emacs -;;; and Cygwin Emacs compiled to use the native Windows widget -;;; library. - -(declare-function x-server-version "w32fns.c" (&optional terminal)) - -(defun w32-version () - "Return the MS-Windows version numbers. -The value is a list of three integers: the major and minor version -numbers, and the build number." - (x-server-version)) - -(defun w32-using-nt () - "Return non-nil if running on a Windows NT descendant. -That includes all Windows systems except for 9X/Me." - (getenv "SystemRoot")) - -(declare-function w32-get-clipboard-data "w32select.c") -(declare-function w32-set-clipboard-data "w32select.c") -(declare-function x-server-version "w32fns.c" (&optional display)) - -;;; Fix interface to (X-specific) mouse.el -(defun x-set-selection (type data) - "Make an X selection of type TYPE and value DATA. -The argument TYPE (nil means `PRIMARY') says which selection, and -DATA specifies the contents. TYPE must be a symbol. \(It can also -be a string, which stands for the symbol with that name, but this -is considered obsolete.) DATA may be a string, a symbol, an -integer (or a cons of two integers or list of two integers). - -The selection may also be a cons of two markers pointing to the same buffer, -or an overlay. In these cases, the selection is considered to be the text -between the markers *at whatever time the selection is examined*. -Thus, editing done in the buffer after you specify the selection -can alter the effective value of the selection. - -The data may also be a vector of valid non-vector selection values. - -The return value is DATA. - -Interactively, this command sets the primary selection. Without -prefix argument, it reads the selection in the minibuffer. With -prefix argument, it uses the text of the region as the selection value. - -Note that on MS-Windows, primary and secondary selections set by Emacs -are not available to other programs." - (put 'x-selections (or type 'PRIMARY) data)) - -(defun x-get-selection (&optional type _data-type) - "Return the value of an X Windows selection. -The argument TYPE (default `PRIMARY') says which selection, -and the argument DATA-TYPE (default `STRING') says -how to convert the data. - -TYPE may be any symbol \(but nil stands for `PRIMARY'). However, -only a few symbols are commonly used. They conventionally have -all upper-case names. The most often used ones, in addition to -`PRIMARY', are `SECONDARY' and `CLIPBOARD'. - -DATA-TYPE is usually `STRING', but can also be one of the symbols -in `selection-converter-alist', which see. This argument is -ignored on MS-Windows and MS-DOS." - (get 'x-selections (or type 'PRIMARY))) - -;; x-selection-owner-p is used in simple.el -(defun x-selection-owner-p (&optional selection _terminal) - "" ; placeholder for doc.c - (and (memq selection '(nil PRIMARY SECONDARY)) - (get 'x-selections (or selection 'PRIMARY)))) - -;; The "Windows" keys on newer keyboards bring up the Start menu -;; whether you want it or not - make Emacs ignore these keystrokes -;; rather than beep. -(global-set-key [lwindow] 'ignore) -(global-set-key [rwindow] 'ignore) - -(defvar w32-charset-info-alist) ; w32font.c - - -;;;; Selections - -;; We keep track of the last text selected here, so we can check the -;; current selection against it, and avoid passing back our own text -;; from x-selection-value. -(defvar x-last-selected-text nil) -(defvar x-select-enable-clipboard) - -(defun x-get-selection-value () - "Return the value of the current selection. -Consult the selection. Treat empty strings as if they were unset." - (if x-select-enable-clipboard - (let (text) - ;; Don't die if x-get-selection signals an error. - (with-demoted-errors "w32-get-clipboard-data:%s" - (setq text (w32-get-clipboard-data))) - (if (string= text "") (setq text nil)) - (cond - ((not text) nil) - ((eq text x-last-selected-text) nil) - ((string= text x-last-selected-text) - ;; Record the newer string, so subsequent calls can use the 'eq' test. - (setq x-last-selected-text text) - nil) - (t - (setq x-last-selected-text text)))))) - -(defalias 'x-selection-value 'x-get-selection-value) - -;; Arrange for the kill and yank functions to set and check the clipboard. -(setq interprogram-cut-function 'x-select-text) -(setq interprogram-paste-function 'x-get-selection-value) - -(provide 'w32-common-fns) diff --git a/m4/alloca.m4 b/m4/alloca.m4 index e89f19b..8408bed 100644 --- a/m4/alloca.m4 +++ b/m4/alloca.m4 @@ -1,6 +1,6 @@ # alloca.m4 serial 14 -dnl Copyright (C) 2002-2004, 2006-2007, 2009-2015 Free Software -dnl Foundation, Inc. +dnl Copyright (C) 2002-2004, 2006-2007, 2009-2015 Free Software Foundation, +dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff --git a/m4/dup2.m4 b/m4/dup2.m4 index bae6d01..0354c6a 100644 --- a/m4/dup2.m4 +++ b/m4/dup2.m4 @@ -1,6 +1,5 @@ #serial 20 -dnl Copyright (C) 2002, 2005, 2007, 2009-2015 Free Software Foundation, -dnl Inc. +dnl Copyright (C) 2002, 2005, 2007, 2009-2015 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff --git a/m4/filemode.m4 b/m4/filemode.m4 index 343719a..e2a195c 100644 --- a/m4/filemode.m4 +++ b/m4/filemode.m4 @@ -1,6 +1,5 @@ # filemode.m4 serial 8 -dnl Copyright (C) 2002, 2005-2006, 2009-2015 Free Software Foundation, -dnl Inc. +dnl Copyright (C) 2002, 2005-2006, 2009-2015 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff --git a/m4/getgroups.m4 b/m4/getgroups.m4 index 8989a5c..16e72c7 100644 --- a/m4/getgroups.m4 +++ b/m4/getgroups.m4 @@ -3,8 +3,7 @@ dnl From Jim Meyering. dnl A wrapper around AC_FUNC_GETGROUPS. -# Copyright (C) 1996-1997, 1999-2004, 2008-2015 Free Software -# Foundation, Inc. +# Copyright (C) 1996-1997, 1999-2004, 2008-2015 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/m4/getloadavg.m4 b/m4/getloadavg.m4 index 4844ae3..1234ba9 100644 --- a/m4/getloadavg.m4 +++ b/m4/getloadavg.m4 @@ -1,7 +1,7 @@ # Check for getloadavg. -# Copyright (C) 1992-1996, 1999-2000, 2002-2003, 2006, 2008-2015 Free -# Software Foundation, Inc. +# Copyright (C) 1992-1996, 1999-2000, 2002-2003, 2006, 2008-2015 Free Software +# Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/m4/gettime.m4 b/m4/gettime.m4 index 175e482..cd499ff 100644 --- a/m4/gettime.m4 +++ b/m4/gettime.m4 @@ -1,6 +1,5 @@ # gettime.m4 serial 8 -dnl Copyright (C) 2002, 2004-2006, 2009-2015 Free Software Foundation, -dnl Inc. +dnl Copyright (C) 2002, 2004-2006, 2009-2015 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff --git a/m4/gettimeofday.m4 b/m4/gettimeofday.m4 index 95317d3..ce246e1 100644 --- a/m4/gettimeofday.m4 +++ b/m4/gettimeofday.m4 @@ -1,7 +1,6 @@ # serial 21 -# Copyright (C) 2001-2003, 2005, 2007, 2009-2015 Free Software -# Foundation, Inc. +# Copyright (C) 2001-2003, 2005, 2007, 2009-2015 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. diff --git a/m4/group-member.m4 b/m4/group-member.m4 index b18e95b..526a67a 100644 --- a/m4/group-member.m4 +++ b/m4/group-member.m4 @@ -1,7 +1,6 @@ # serial 14 -# Copyright (C) 1999-2001, 2003-2007, 2009-2015 Free Software -# Foundation, Inc. +# Copyright (C) 1999-2001, 2003-2007, 2009-2015 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/m4/memrchr.m4 b/m4/memrchr.m4 index bac0a7a..f3f74b8 100644 --- a/m4/memrchr.m4 +++ b/m4/memrchr.m4 @@ -1,6 +1,6 @@ # memrchr.m4 serial 10 -dnl Copyright (C) 2002-2003, 2005-2007, 2009-2015 Free Software -dnl Foundation, Inc. +dnl Copyright (C) 2002-2003, 2005-2007, 2009-2015 Free Software Foundation, +dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff --git a/m4/mktime.m4 b/m4/mktime.m4 index aa1b985..3f0e1ee 100644 --- a/m4/mktime.m4 +++ b/m4/mktime.m4 @@ -1,6 +1,6 @@ # serial 25 -dnl Copyright (C) 2002-2003, 2005-2007, 2009-2015 Free Software -dnl Foundation, Inc. +dnl Copyright (C) 2002-2003, 2005-2007, 2009-2015 Free Software Foundation, +dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff --git a/m4/pathmax.m4 b/m4/pathmax.m4 index ee4ed0b..0e3db7a 100644 --- a/m4/pathmax.m4 +++ b/m4/pathmax.m4 @@ -1,6 +1,6 @@ # pathmax.m4 serial 10 -dnl Copyright (C) 2002-2003, 2005-2006, 2009-2015 Free Software -dnl Foundation, Inc. +dnl Copyright (C) 2002-2003, 2005-2006, 2009-2015 Free Software Foundation, +dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff --git a/m4/sig2str.m4 b/m4/sig2str.m4 index f9b2e11..71cfa4b 100644 --- a/m4/sig2str.m4 +++ b/m4/sig2str.m4 @@ -1,6 +1,5 @@ # serial 7 -dnl Copyright (C) 2002, 2005-2006, 2009-2015 Free Software Foundation, -dnl Inc. +dnl Copyright (C) 2002, 2005-2006, 2009-2015 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff --git a/m4/ssize_t.m4 b/m4/ssize_t.m4 index 06d3b60..25bd451 100644 --- a/m4/ssize_t.m4 +++ b/m4/ssize_t.m4 @@ -1,6 +1,5 @@ # ssize_t.m4 serial 5 (gettext-0.18.2) -dnl Copyright (C) 2001-2003, 2006, 2010-2015 Free Software Foundation, -dnl Inc. +dnl Copyright (C) 2001-2003, 2006, 2010-2015 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff --git a/m4/st_dm_mode.m4 b/m4/st_dm_mode.m4 index df69a84..6543bf6 100644 --- a/m4/st_dm_mode.m4 +++ b/m4/st_dm_mode.m4 @@ -1,7 +1,6 @@ # serial 6 -# Copyright (C) 1998-1999, 2001, 2009-2015 Free Software Foundation, -# Inc. +# Copyright (C) 1998-1999, 2001, 2009-2015 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. diff --git a/m4/stat-time.m4 b/m4/stat-time.m4 index c7cacaa..9c8ceec 100644 --- a/m4/stat-time.m4 +++ b/m4/stat-time.m4 @@ -1,7 +1,7 @@ # Checks for stat-related time functions. -# Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2015 Free -# Software Foundation, Inc. +# Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2015 Free Software +# Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/m4/stdarg.m4 b/m4/stdarg.m4 deleted file mode 100644 index d208eb3..0000000 --- a/m4/stdarg.m4 +++ /dev/null @@ -1,78 +0,0 @@ -# stdarg.m4 serial 6 -dnl Copyright (C) 2006, 2008-2015 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. -dnl Provide a working va_copy in combination with . - -AC_DEFUN([gl_STDARG_H], -[ - STDARG_H='' - NEXT_STDARG_H='' - AC_MSG_CHECKING([for va_copy]) - AC_CACHE_VAL([gl_cv_func_va_copy], [ - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include ]], - [[ -#ifndef va_copy -void (*func) (va_list, va_list) = va_copy; -#endif - ]])], - [gl_cv_func_va_copy=yes], - [gl_cv_func_va_copy=no])]) - AC_MSG_RESULT([$gl_cv_func_va_copy]) - if test $gl_cv_func_va_copy = no; then - dnl Provide a substitute. - dnl Usually a simple definition in is enough. Not so on AIX 5 - dnl with some versions of the /usr/vac/bin/cc compiler. It has an - dnl which does '#undef va_copy', leading to a missing va_copy symbol. For - dnl this platform, we use an substitute. But we cannot use this - dnl approach on other platforms, because often defines only - dnl preprocessor macros and gl_ABSOLUTE_HEADER, gl_CHECK_NEXT_HEADERS do - dnl not work in this situation. - AC_EGREP_CPP([vaccine], - [#if defined _AIX && !defined __GNUC__ - AIX vaccine - #endif - ], [gl_aixcc=yes], [gl_aixcc=no]) - if test $gl_aixcc = yes; then - dnl Provide a substitute file. - STDARG_H=stdarg.h - gl_NEXT_HEADERS([stdarg.h]) - dnl Fallback for the case when contains only macro definitions. - if test "$gl_cv_next_stdarg_h" = '""'; then - gl_cv_next_stdarg_h='"///usr/include/stdarg.h"' - NEXT_STDARG_H="$gl_cv_next_stdarg_h" - fi - else - dnl Provide a substitute in , either __va_copy or as a simple - dnl assignment. - gl_CACHE_VAL_SILENT([gl_cv_func___va_copy], [ - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include ]], - [[ -#ifndef __va_copy -error, bail out -#endif - ]])], - [gl_cv_func___va_copy=yes], - [gl_cv_func___va_copy=no])]) - if test $gl_cv_func___va_copy = yes; then - AC_DEFINE([va_copy], [__va_copy], - [Define as a macro for copying va_list variables.]) - else - AH_VERBATIM([gl_VA_COPY], [/* A replacement for va_copy, if needed. */ -#define gl_va_copy(a,b) ((a) = (b))]) - AC_DEFINE([va_copy], [gl_va_copy], - [Define as a macro for copying va_list variables.]) - fi - fi - fi - AC_SUBST([STDARG_H]) - AM_CONDITIONAL([GL_GENERATE_STDARG_H], [test -n "$STDARG_H"]) - AC_SUBST([NEXT_STDARG_H]) -]) diff --git a/m4/stdbool.m4 b/m4/stdbool.m4 deleted file mode 100644 index 7273b82..0000000 --- a/m4/stdbool.m4 +++ /dev/null @@ -1,100 +0,0 @@ -# Check for stdbool.h that conforms to C99. - -dnl Copyright (C) 2002-2006, 2009-2015 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -#serial 5 - -# Prepare for substituting if it is not supported. - -AC_DEFUN([AM_STDBOOL_H], -[ - AC_REQUIRE([AC_CHECK_HEADER_STDBOOL]) - - # Define two additional variables used in the Makefile substitution. - - if test "$ac_cv_header_stdbool_h" = yes; then - STDBOOL_H='' - else - STDBOOL_H='stdbool.h' - fi - AC_SUBST([STDBOOL_H]) - AM_CONDITIONAL([GL_GENERATE_STDBOOL_H], [test -n "$STDBOOL_H"]) - - if test "$ac_cv_type__Bool" = yes; then - HAVE__BOOL=1 - else - HAVE__BOOL=0 - fi - AC_SUBST([HAVE__BOOL]) -]) - -# AM_STDBOOL_H will be renamed to gl_STDBOOL_H in the future. -AC_DEFUN([gl_STDBOOL_H], [AM_STDBOOL_H]) - -# This version of the macro is needed in autoconf <= 2.68. - -AC_DEFUN([AC_CHECK_HEADER_STDBOOL], - [AC_CACHE_CHECK([for stdbool.h that conforms to C99], - [ac_cv_header_stdbool_h], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[ - #include - #ifndef bool - "error: bool is not defined" - #endif - #ifndef false - "error: false is not defined" - #endif - #if false - "error: false is not 0" - #endif - #ifndef true - "error: true is not defined" - #endif - #if true != 1 - "error: true is not 1" - #endif - #ifndef __bool_true_false_are_defined - "error: __bool_true_false_are_defined is not defined" - #endif - - struct s { _Bool s: 1; _Bool t; } s; - - char a[true == 1 ? 1 : -1]; - char b[false == 0 ? 1 : -1]; - char c[__bool_true_false_are_defined == 1 ? 1 : -1]; - char d[(bool) 0.5 == true ? 1 : -1]; - /* See body of main program for 'e'. */ - char f[(_Bool) 0.0 == false ? 1 : -1]; - char g[true]; - char h[sizeof (_Bool)]; - char i[sizeof s.t]; - enum { j = false, k = true, l = false * true, m = true * 256 }; - /* The following fails for - HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ - _Bool n[m]; - char o[sizeof n == m * sizeof n[0] ? 1 : -1]; - char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; - /* Catch a bug in an HP-UX C compiler. See - http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html - http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html - */ - _Bool q = true; - _Bool *pq = &q; - ]], - [[ - bool e = &s; - *pq |= q; - *pq |= ! q; - /* Refer to every declared value, to avoid compiler optimizations. */ - return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l - + !m + !n + !o + !p + !q + !pq); - ]])], - [ac_cv_header_stdbool_h=yes], - [ac_cv_header_stdbool_h=no])]) - AC_CHECK_TYPES([_Bool]) -]) diff --git a/m4/strftime.m4 b/m4/strftime.m4 index dafcbaa..4557626 100644 --- a/m4/strftime.m4 +++ b/m4/strftime.m4 @@ -1,7 +1,6 @@ # serial 33 -# Copyright (C) 1996-1997, 1999-2007, 2009-2015 Free Software -# Foundation, Inc. +# Copyright (C) 1996-1997, 1999-2007, 2009-2015 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/m4/strtoimax.m4 b/m4/strtoimax.m4 index 7662cf8..fde732a 100644 --- a/m4/strtoimax.m4 +++ b/m4/strtoimax.m4 @@ -1,6 +1,5 @@ # strtoimax.m4 serial 14 -dnl Copyright (C) 2002-2004, 2006, 2009-2015 Free Software Foundation, -dnl Inc. +dnl Copyright (C) 2002-2004, 2006, 2009-2015 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff --git a/m4/strtoll.m4 b/m4/strtoll.m4 index 43365e1..666f44a 100644 --- a/m4/strtoll.m4 +++ b/m4/strtoll.m4 @@ -1,6 +1,5 @@ # strtoll.m4 serial 7 -dnl Copyright (C) 2002, 2004, 2006, 2008-2015 Free Software Foundation, -dnl Inc. +dnl Copyright (C) 2002, 2004, 2006, 2008-2015 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff --git a/m4/strtoull.m4 b/m4/strtoull.m4 index 9822862..4267bd7 100644 --- a/m4/strtoull.m4 +++ b/m4/strtoull.m4 @@ -1,6 +1,5 @@ # strtoull.m4 serial 7 -dnl Copyright (C) 2002, 2004, 2006, 2008-2015 Free Software Foundation, -dnl Inc. +dnl Copyright (C) 2002, 2004, 2006, 2008-2015 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff --git a/m4/strtoumax.m4 b/m4/strtoumax.m4 index d9d7893..5312ef4 100644 --- a/m4/strtoumax.m4 +++ b/m4/strtoumax.m4 @@ -1,6 +1,5 @@ # strtoumax.m4 serial 12 -dnl Copyright (C) 2002-2004, 2006, 2009-2015 Free Software Foundation, -dnl Inc. +dnl Copyright (C) 2002-2004, 2006, 2009-2015 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff --git a/m4/time_h.m4 b/m4/time_h.m4 index 03579a3..d9c41a4 100644 --- a/m4/time_h.m4 +++ b/m4/time_h.m4 @@ -1,9 +1,8 @@ # Configure a more-standard replacement for . -# Copyright (C) 2000-2001, 2003-2007, 2009-2015 Free Software -# Foundation, Inc. +# Copyright (C) 2000-2001, 2003-2007, 2009-2015 Free Software Foundation, Inc. -# serial 8 +# serial 9 # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -27,7 +26,7 @@ AC_DEFUN([gl_HEADER_TIME_H_BODY], ]) dnl Check whether 'struct timespec' is declared -dnl in time.h, sys/time.h, or pthread.h. +dnl in time.h, sys/time.h, pthread.h, or unistd.h. AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC], [ @@ -45,6 +44,7 @@ AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC], TIME_H_DEFINES_STRUCT_TIMESPEC=0 SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0 PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0 + UNISTD_H_DEFINES_STRUCT_TIMESPEC=0 if test $gl_cv_sys_struct_timespec_in_time_h = yes; then TIME_H_DEFINES_STRUCT_TIMESPEC=1 else @@ -71,12 +71,26 @@ AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC], [gl_cv_sys_struct_timespec_in_pthread_h=no])]) if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1 + else + AC_CACHE_CHECK([for struct timespec in ], + [gl_cv_sys_struct_timespec_in_unistd_h], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include + ]], + [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], + [gl_cv_sys_struct_timespec_in_unistd_h=yes], + [gl_cv_sys_struct_timespec_in_unistd_h=no])]) + if test $gl_cv_sys_struct_timespec_in_unistd_h = yes; then + UNISTD_H_DEFINES_STRUCT_TIMESPEC=1 + fi fi fi fi AC_SUBST([TIME_H_DEFINES_STRUCT_TIMESPEC]) AC_SUBST([SYS_TIME_H_DEFINES_STRUCT_TIMESPEC]) AC_SUBST([PTHREAD_H_DEFINES_STRUCT_TIMESPEC]) + AC_SUBST([UNISTD_H_DEFINES_STRUCT_TIMESPEC]) ]) AC_DEFUN([gl_TIME_MODULE_INDICATOR], diff --git a/m4/timespec.m4 b/m4/timespec.m4 index e5dc48d..06b3533 100644 --- a/m4/timespec.m4 +++ b/m4/timespec.m4 @@ -1,7 +1,6 @@ #serial 15 -# Copyright (C) 2000-2001, 2003-2007, 2009-2015 Free Software -# Foundation, Inc. +# Copyright (C) 2000-2001, 2003-2007, 2009-2015 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/m4/utimbuf.m4 b/m4/utimbuf.m4 index fae96f1..7c33ae9 100644 --- a/m4/utimbuf.m4 +++ b/m4/utimbuf.m4 @@ -1,7 +1,7 @@ # serial 9 -# Copyright (C) 1998-2001, 2003-2004, 2007, 2009-2015 Free Software -# Foundation, Inc. +# Copyright (C) 1998-2001, 2003-2004, 2007, 2009-2015 Free Software Foundation, +# Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/nt/addsection.c b/nt/addsection.c deleted file mode 100644 index 61b2fda..0000000 --- a/nt/addsection.c +++ /dev/null @@ -1,544 +0,0 @@ -/* Add an uninitialized data section to an executable. - Copyright (C) 1999, 2001-2015 Free Software Foundation, Inc. - -This file is part of GNU Emacs. - -GNU Emacs is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -GNU Emacs is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Emacs. If not, see . - - - Andrew Innes 04-Jan-1999 - based on code from unexw32.c -*/ - -#include -#include -#include -#include -#if defined(__GNUC__) && !defined(MINGW_W64) -#define _ANONYMOUS_UNION -#define _ANONYMOUS_STRUCT -#endif -#include - -/* Include relevant definitions from IMAGEHLP.H, which can be found - in \\win32sdk\mstools\samples\image\include\imagehlp.h. */ - -PIMAGE_NT_HEADERS -(__stdcall * pfnCheckSumMappedFile) (PVOID BaseAddress, - DWORD_PTR FileLength, - PDWORD_PTR HeaderSum, - PDWORD_PTR CheckSum); - -#undef min -#undef max -#define min(x, y) (((x) < (y)) ? (x) : (y)) -#define max(x, y) (((x) > (y)) ? (x) : (y)) - - -/* File handling. */ - -typedef struct file_data { - const char *name; - unsigned long size; - HANDLE file; - HANDLE file_mapping; - unsigned char *file_base; -} file_data; - -int -open_input_file (file_data *p_file, const char *filename) -{ - HANDLE file; - HANDLE file_mapping; - void *file_base; - unsigned long size, upper_size; - - file = CreateFile (filename, GENERIC_READ, FILE_SHARE_READ, NULL, - OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); - if (file == INVALID_HANDLE_VALUE) - return FALSE; - - size = GetFileSize (file, &upper_size); - file_mapping = CreateFileMapping (file, NULL, PAGE_READONLY, - 0, size, NULL); - if (!file_mapping) - return FALSE; - - file_base = MapViewOfFile (file_mapping, FILE_MAP_READ, 0, 0, size); - if (file_base == 0) - return FALSE; - - p_file->name = filename; - p_file->size = size; - p_file->file = file; - p_file->file_mapping = file_mapping; - p_file->file_base = file_base; - - return TRUE; -} - -int -open_output_file (file_data *p_file, const char *filename, unsigned long size) -{ - HANDLE file; - HANDLE file_mapping; - void *file_base; - - file = CreateFile (filename, GENERIC_READ | GENERIC_WRITE, 0, NULL, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); - if (file == INVALID_HANDLE_VALUE) - return FALSE; - - file_mapping = CreateFileMapping (file, NULL, PAGE_READWRITE, - 0, size, NULL); - if (!file_mapping) - return FALSE; - - file_base = MapViewOfFile (file_mapping, FILE_MAP_WRITE, 0, 0, size); - if (file_base == 0) - return FALSE; - - p_file->name = filename; - p_file->size = size; - p_file->file = file; - p_file->file_mapping = file_mapping; - p_file->file_base = file_base; - - return TRUE; -} - -/* Close the system structures associated with the given file. */ -void -close_file_data (file_data *p_file) -{ - UnmapViewOfFile (p_file->file_base); - CloseHandle (p_file->file_mapping); - /* For the case of output files, set final size. */ - SetFilePointer (p_file->file, p_file->size, NULL, FILE_BEGIN); - SetEndOfFile (p_file->file); - CloseHandle (p_file->file); -} - - -/* Routines to manipulate NT executable file sections. */ - -unsigned long -get_unrounded_section_size (PIMAGE_SECTION_HEADER p_section) -{ - /* The true section size, before rounding, for an initialized data or - code section. (Supposedly some linkers swap the meaning of these - two values.) */ - return min (p_section->SizeOfRawData, - p_section->Misc.VirtualSize); -} - -/* Return pointer to section header for named section. */ -IMAGE_SECTION_HEADER * -find_section (const char *name, IMAGE_NT_HEADERS *nt_header) -{ - PIMAGE_SECTION_HEADER section; - int i; - - section = IMAGE_FIRST_SECTION (nt_header); - - for (i = 0; i < nt_header->FileHeader.NumberOfSections; i++) - { - if (strcmp (section->Name, name) == 0) - return section; - section++; - } - return NULL; -} - -/* Return pointer to section header for section containing the given - relative virtual address. */ -IMAGE_SECTION_HEADER * -rva_to_section (DWORD_PTR rva, IMAGE_NT_HEADERS * nt_header) -{ - PIMAGE_SECTION_HEADER section; - int i; - - section = IMAGE_FIRST_SECTION (nt_header); - - for (i = 0; i < nt_header->FileHeader.NumberOfSections; i++) - { - /* Some linkers (eg. the NT SDK linker I believe) swapped the - meaning of these two values - or rather, they ignored - VirtualSize entirely and always set it to zero. This affects - some very old exes (eg. gzip dated Dec 1993). Since - w32_executable_type relies on this function to work reliably, - we need to cope with this. */ - DWORD_PTR real_size = max (section->SizeOfRawData, - section->Misc.VirtualSize); - if (rva >= section->VirtualAddress - && rva < section->VirtualAddress + real_size) - return section; - section++; - } - return NULL; -} - -/* Return pointer to section header for section containing the given - offset in its raw data area. */ -IMAGE_SECTION_HEADER * -offset_to_section (DWORD_PTR offset, IMAGE_NT_HEADERS * nt_header) -{ - PIMAGE_SECTION_HEADER section; - int i; - - section = IMAGE_FIRST_SECTION (nt_header); - - for (i = 0; i < nt_header->FileHeader.NumberOfSections; i++) - { - if (offset >= section->PointerToRawData - && offset < section->PointerToRawData + section->SizeOfRawData) - return section; - section++; - } - return NULL; -} - -/* Return offset to an object in dst, given offset in src. We assume - there is at least one section in both src and dst images, and that - the some sections may have been added to dst (after sections in src). */ -static DWORD_PTR -relocate_offset (DWORD_PTR offset, - IMAGE_NT_HEADERS * src_nt_header, - IMAGE_NT_HEADERS * dst_nt_header) -{ - PIMAGE_SECTION_HEADER src_section = IMAGE_FIRST_SECTION (src_nt_header); - PIMAGE_SECTION_HEADER dst_section = IMAGE_FIRST_SECTION (dst_nt_header); - int i = 0; - - while (offset >= src_section->PointerToRawData) - { - if (offset < src_section->PointerToRawData + src_section->SizeOfRawData) - break; - i++; - if (i == src_nt_header->FileHeader.NumberOfSections) - { - /* Handle offsets after the last section. */ - dst_section = IMAGE_FIRST_SECTION (dst_nt_header); - dst_section += dst_nt_header->FileHeader.NumberOfSections - 1; - while (dst_section->PointerToRawData == 0) - dst_section--; - while (src_section->PointerToRawData == 0) - src_section--; - return offset - + (dst_section->PointerToRawData + dst_section->SizeOfRawData) - - (src_section->PointerToRawData + src_section->SizeOfRawData); - } - src_section++; - dst_section++; - } - return offset + - (dst_section->PointerToRawData - src_section->PointerToRawData); -} - -#define OFFSET_TO_RVA(offset, section) \ - (section->VirtualAddress + ((DWORD_PTR)(offset) - section->PointerToRawData)) - -#define RVA_TO_OFFSET(rva, section) \ - (section->PointerToRawData + ((DWORD_PTR)(rva) - section->VirtualAddress)) - -#define RVA_TO_SECTION_OFFSET(rva, section) \ - ((DWORD_PTR)(rva) - section->VirtualAddress) - -/* Convert address in executing image to RVA. */ -#define PTR_TO_RVA(ptr) ((DWORD_PTR)(ptr) - (DWORD_PTR) GetModuleHandle (NULL)) - -#define PTR_TO_OFFSET(ptr, pfile_data) \ - ((unsigned const char *)(ptr) - (pfile_data)->file_base) - -#define OFFSET_TO_PTR(offset, pfile_data) \ - ((pfile_data)->file_base + (DWORD_PTR)(offset)) - -#define ROUND_UP(p, align) \ - (((DWORD_PTR)(p) + (align)-1) & ~((DWORD_PTR)(align)-1)) -#define ROUND_DOWN(p, align) ((DWORD_PTR)(p) & ~((DWORD_PTR)(align)-1)) - - -static void -copy_executable_and_add_section (file_data *p_infile, - file_data *p_outfile, - const char *new_section_name, - DWORD_PTR new_section_size) -{ - unsigned char *dst; - PIMAGE_DOS_HEADER dos_header; - PIMAGE_NT_HEADERS nt_header; - PIMAGE_NT_HEADERS dst_nt_header; - PIMAGE_SECTION_HEADER section; - PIMAGE_SECTION_HEADER dst_section; - DWORD_PTR offset; - int i; - int be_verbose = GetEnvironmentVariable ("DEBUG_DUMP", NULL, 0) > 0; - -#define COPY_CHUNK(message, src, size, verbose) \ - do { \ - unsigned const char *s = (void *)(src); \ - unsigned long count = (size); \ - if (verbose) \ - { \ - printf ("%s\n", (message)); \ - printf ("\t0x%08x Offset in input file.\n", s - p_infile->file_base); \ - printf ("\t0x%08x Offset in output file.\n", dst - p_outfile->file_base); \ - printf ("\t0x%08x Size in bytes.\n", count); \ - } \ - memcpy (dst, s, count); \ - dst += count; \ - } while (0) - -#define DST_TO_OFFSET() PTR_TO_OFFSET (dst, p_outfile) -#define ROUND_UP_DST_AND_ZERO(align) \ - do { \ - unsigned char *newdst = p_outfile->file_base \ - + ROUND_UP (DST_TO_OFFSET (), (align)); \ - /* Zero the alignment slop; it may actually initialize real data. */ \ - memset (dst, 0, newdst - dst); \ - dst = newdst; \ - } while (0) - - /* Copy the source image sequentially, ie. section by section after - copying the headers and section table, to simplify the process of - adding an extra section table entry (which might force the raw - section data to be relocated). - - Note that dst is updated implicitly by each COPY_CHUNK. */ - - dos_header = (PIMAGE_DOS_HEADER) p_infile->file_base; - nt_header = (PIMAGE_NT_HEADERS) (((unsigned char *) dos_header) + - dos_header->e_lfanew); - section = IMAGE_FIRST_SECTION (nt_header); - - dst = (unsigned char *) p_outfile->file_base; - - COPY_CHUNK ("Copying DOS header...", dos_header, - (DWORD_PTR) nt_header - (DWORD_PTR) dos_header, be_verbose); - dst_nt_header = (PIMAGE_NT_HEADERS) dst; - COPY_CHUNK ("Copying NT header...", nt_header, - (DWORD_PTR) section - (DWORD_PTR) nt_header, be_verbose); - dst_section = (PIMAGE_SECTION_HEADER) dst; - COPY_CHUNK ("Copying section table...", section, - nt_header->FileHeader.NumberOfSections * sizeof (*section), - be_verbose); - - /* To improve the efficiency of demand loading, make the file - alignment match the section alignment (VC++ 6.0 does this by - default anyway). */ - dst_nt_header->OptionalHeader.FileAlignment = - dst_nt_header->OptionalHeader.SectionAlignment; - - /* Add an uninitialized data section at the end, of the specified name - and virtual size. */ - if (find_section (new_section_name, nt_header) == NULL) - /* Leave room for extra section table entry; filled in below. */ - dst += sizeof (*section); - else - new_section_name = NULL; - - /* Align the first section's raw data area, and set the header size - field accordingly. */ - ROUND_UP_DST_AND_ZERO (dst_nt_header->OptionalHeader.FileAlignment); - dst_nt_header->OptionalHeader.SizeOfHeaders = DST_TO_OFFSET (); - - for (i = 0; i < nt_header->FileHeader.NumberOfSections; i++) - { - char msg[100]; - /* Windows section names are fixed 8-char strings, only - zero-terminated if the name is shorter than 8 characters. */ - sprintf (msg, "Copying raw data for %.8s...", section->Name); - - /* Update the file-relative offset for this section's raw data (if - it has any) in case things have been relocated; we will update - the other offsets below once we know where everything is. */ - if (dst_section->PointerToRawData) - dst_section->PointerToRawData = DST_TO_OFFSET (); - - /* Can always copy the original raw data. */ - COPY_CHUNK - (msg, OFFSET_TO_PTR (section->PointerToRawData, p_infile), - section->SizeOfRawData, be_verbose); - - /* Round up the raw data size to the new alignment. */ - dst_section->SizeOfRawData = - ROUND_UP (dst_section->SizeOfRawData, - dst_nt_header->OptionalHeader.FileAlignment); - - /* Align the next section's raw data area. */ - ROUND_UP_DST_AND_ZERO (dst_nt_header->OptionalHeader.FileAlignment); - - section++; - dst_section++; - } - - /* Add the extra section entry (which adds no raw data). */ - if (new_section_name != NULL) - { - dst_nt_header->FileHeader.NumberOfSections++; - dst_nt_header->OptionalHeader.SizeOfImage += new_section_size; - strncpy (dst_section->Name, new_section_name, sizeof (dst_section->Name)); - dst_section->VirtualAddress = - section[-1].VirtualAddress - + ROUND_UP (section[-1].Misc.VirtualSize, - dst_nt_header->OptionalHeader.SectionAlignment); - dst_section->Misc.VirtualSize = new_section_size; - dst_section->PointerToRawData = 0; - dst_section->SizeOfRawData = 0; - dst_section->Characteristics = - IMAGE_SCN_CNT_UNINITIALIZED_DATA - | IMAGE_SCN_MEM_READ - | IMAGE_SCN_MEM_WRITE; - } - - /* Copy remainder of source image. */ - section--; - offset = ROUND_UP (section->PointerToRawData + section->SizeOfRawData, - nt_header->OptionalHeader.FileAlignment); - COPY_CHUNK - ("Copying remainder of executable...", - OFFSET_TO_PTR (offset, p_infile), - p_infile->size - offset, be_verbose); - - /* Final size for new image. */ - p_outfile->size = DST_TO_OFFSET (); - - /* Now patch up remaining file-relative offsets. */ - section = IMAGE_FIRST_SECTION (nt_header); - dst_section = IMAGE_FIRST_SECTION (dst_nt_header); - -#define ADJUST_OFFSET(var) \ - do { \ - if ((var) != 0) \ - (var) = relocate_offset ((var), nt_header, dst_nt_header); \ - } while (0) - - dst_nt_header->OptionalHeader.SizeOfInitializedData = 0; - dst_nt_header->OptionalHeader.SizeOfUninitializedData = 0; - for (i = 0; i < dst_nt_header->FileHeader.NumberOfSections; i++) - { - /* Recompute data sizes for completeness. */ - if (dst_section[i].Characteristics & IMAGE_SCN_CNT_INITIALIZED_DATA) - dst_nt_header->OptionalHeader.SizeOfInitializedData += - ROUND_UP (dst_section[i].Misc.VirtualSize, dst_nt_header->OptionalHeader.FileAlignment); - else if (dst_section[i].Characteristics & IMAGE_SCN_CNT_UNINITIALIZED_DATA) - dst_nt_header->OptionalHeader.SizeOfUninitializedData += - ROUND_UP (dst_section[i].Misc.VirtualSize, dst_nt_header->OptionalHeader.FileAlignment); - - ADJUST_OFFSET (dst_section[i].PointerToLinenumbers); - } - - ADJUST_OFFSET (dst_nt_header->FileHeader.PointerToSymbolTable); - - /* Update offsets in debug directory entries. */ - { - IMAGE_DATA_DIRECTORY debug_dir = - dst_nt_header->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG]; - PIMAGE_DEBUG_DIRECTORY debug_entry; - - section = rva_to_section (debug_dir.VirtualAddress, dst_nt_header); - if (section) - { - debug_entry = (PIMAGE_DEBUG_DIRECTORY) - (RVA_TO_OFFSET (debug_dir.VirtualAddress, section) + p_outfile->file_base); - debug_dir.Size /= sizeof (IMAGE_DEBUG_DIRECTORY); - - for (i = 0; i < debug_dir.Size; i++, debug_entry++) - ADJUST_OFFSET (debug_entry->PointerToRawData); - } - } -} - - -int -main (int argc, char **argv) -{ - file_data in_file, out_file; - char out_filename[MAX_PATH], in_filename[MAX_PATH]; - unsigned long size; - PIMAGE_DOS_HEADER dos_header; - PIMAGE_NT_HEADERS nt_header; - -#define OLD_NAME argv[1] -#define NEW_NAME argv[2] -#define SECTION_NAME argv[3] -#define SECTION_SIZE argv[4] - - strcpy (in_filename, OLD_NAME); - strcpy (out_filename, NEW_NAME); - - printf ("Dumping from %s\n", in_filename); - printf (" to %s\n", out_filename); - - /* Open the undumped executable file. */ - if (!open_input_file (&in_file, in_filename)) - { - printf ("Failed to open %s (%d)...bailing.\n", - in_filename, GetLastError ()); - exit (1); - } - dos_header = (PIMAGE_DOS_HEADER) in_file.file_base; - nt_header = (PIMAGE_NT_HEADERS) ((char *) dos_header + dos_header->e_lfanew); - /* Allow for expansion due to increasing file align to section align. - We can overestimate here, since close_file_data will update the - size exactly. */ - size = in_file.size - + nt_header->OptionalHeader.SectionAlignment - * nt_header->FileHeader.NumberOfSections; - if (!open_output_file (&out_file, out_filename, size)) - { - printf ("Failed to open %s (%d)...bailing.\n", - out_filename, GetLastError ()); - exit (1); - } - - copy_executable_and_add_section (&in_file, &out_file, - SECTION_NAME, - atoi (SECTION_SIZE) * 1024 * 1024); - - /* Patch up header fields; profiler is picky about this. */ - { - HANDLE hImagehelp = LoadLibrary ("imagehlp.dll"); - DWORD_PTR headersum; - DWORD_PTR checksum; - - dos_header = (PIMAGE_DOS_HEADER) out_file.file_base; - nt_header = (PIMAGE_NT_HEADERS) ((char *) dos_header + dos_header->e_lfanew); - - nt_header->OptionalHeader.CheckSum = 0; -// nt_header->FileHeader.TimeDateStamp = time (NULL); -// dos_header->e_cp = size / 512; -// nt_header->OptionalHeader.SizeOfImage = size; - - pfnCheckSumMappedFile = (void *) GetProcAddress (hImagehelp, "CheckSumMappedFile"); - if (pfnCheckSumMappedFile) - { -// nt_header->FileHeader.TimeDateStamp = time (NULL); - pfnCheckSumMappedFile (out_file.file_base, - out_file.size, - &headersum, - &checksum); - nt_header->OptionalHeader.CheckSum = checksum; - } - FreeLibrary (hImagehelp); - } - - close_file_data (&in_file); - close_file_data (&out_file); - - return 0; -} - -/* eof */ - diff --git a/test/automated/package-x-test.el b/test/automated/package-x-test.el deleted file mode 100644 index 70c9d96..0000000 --- a/test/automated/package-x-test.el +++ /dev/null @@ -1,110 +0,0 @@ -;;; package-test.el --- Tests for the Emacs package system - -;; Copyright (C) 2013-2015 Free Software Foundation, Inc. - -;; Author: Daniel Hackney -;; Version: 1.0 - -;; This file is part of GNU Emacs. - -;; GNU Emacs is free software: you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; GNU Emacs is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs. If not, see . - -;;; Commentary: - -;; You may want to run this from a separate Emacs instance from your -;; main one, because a bug in the code below could mess with your -;; installed packages. - -;; Run this in a clean Emacs session using: -;; -;; $ emacs -Q --batch -L . -l package-x-test.el -f ert-run-tests-batch-and-exit - -;;; Code: - -(require 'package-x) -(require 'ert) -(require 'cl-lib) -(eval-when-compile (require 'package-test)) - -;; package-test is not normally in `load-path', so temporarily set -;; `load-path' to contain the current directory. -(let ((load-path (append (list (file-name-directory (or load-file-name - buffer-file-name))) - load-path))) - (require 'package-test)) - -(defvar package-x-test--single-archive-entry-1-3 - (cons 'simple-single - (package-make-ac-desc '(1 3) nil - "A single-file package with no dependencies" - 'single - '((:url . "http://doodles.au")))) - "Expected contents of the archive entry from the \"simple-single\" package.") - -(defvar package-x-test--single-archive-entry-1-4 - (cons 'simple-single - (package-make-ac-desc '(1 4) nil - "A single-file package with no dependencies" - 'single - nil)) - "Expected contents of the archive entry from the updated \"simple-single\" package.") - -(ert-deftest package-x-test-upload-buffer () - "Test creating an \"archive-contents\" file" - (with-package-test (:basedir "data/package" - :file "simple-single-1.3.el" - :upload-base t) - (package-upload-buffer) - (should (file-exists-p (expand-file-name "archive-contents" - package-archive-upload-base))) - (should (file-exists-p (expand-file-name "simple-single-1.3.el" - package-archive-upload-base))) - (should (file-exists-p (expand-file-name "simple-single-readme.txt" - package-archive-upload-base))) - - (let (archive-contents) - (with-temp-buffer - (insert-file-contents - (expand-file-name "archive-contents" - package-archive-upload-base)) - (setq archive-contents - (package-read-from-string - (buffer-substring (point-min) (point-max))))) - (should (equal archive-contents - (list 1 package-x-test--single-archive-entry-1-3)))))) - -(ert-deftest package-x-test-upload-new-version () - "Test uploading a new version of a package" - (with-package-test (:basedir "data/package" - :file "simple-single-1.3.el" - :upload-base t) - (package-upload-buffer) - (with-temp-buffer - (insert-file-contents "newer-versions/simple-single-1.4.el") - (package-upload-buffer)) - - (let (archive-contents) - (with-temp-buffer - (insert-file-contents - (expand-file-name "archive-contents" - package-archive-upload-base)) - (setq archive-contents - (package-read-from-string - (buffer-substring (point-min) (point-max))))) - (should (equal archive-contents - (list 1 package-x-test--single-archive-entry-1-4)))))) - -(provide 'package-x-test) - -;;; package-x-test.el ends here commit 0cdd599c54aeda36e7e0696b2f90d2c286153a1d Author: Elias Oltmanns Date: Wed Jan 28 16:35:59 2015 +1100 nnimap `never' expiration fix * nnimap.el (nnimap-find-expired-articles): Fix handling of (expiry-wait . never). diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 7bf4a6e..49d1444 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,8 @@ +2015-01-28 Elias Oltmanns + + * nnimap.el (nnimap-find-expired-articles): Fix handling of + (expiry-wait . never). + 2015-01-27 Lars Ingebrigtsen * nnir.el (nnir-imap-expr-to-imap): Check for literal+ capability in diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el index 8e81abc..ba2013e 100644 --- a/lisp/gnus/nnimap.el +++ b/lisp/gnus/nnimap.el @@ -1020,20 +1020,20 @@ textual parts.") (defun nnimap-find-expired-articles (group) (let ((cutoff (nnmail-expired-article-p group nil nil))) - (with-current-buffer (nnimap-buffer) - (let ((result - (nnimap-command - "UID SEARCH SENTBEFORE %s" - (format-time-string - (format "%%d-%s-%%Y" - (upcase - (car (rassoc (nth 4 (decode-time cutoff)) - parse-time-months)))) - cutoff)))) - (and (car result) - (delete 0 (mapcar #'string-to-number - (cdr (assoc "SEARCH" (cdr result)))))))))) - + (when cutoff + (with-current-buffer (nnimap-buffer) + (let ((result + (nnimap-command + "UID SEARCH SENTBEFORE %s" + (format-time-string + (format "%%d-%s-%%Y" + (upcase + (car (rassoc (nth 4 (decode-time cutoff)) + parse-time-months)))) + cutoff)))) + (and (car result) + (delete 0 (mapcar #'string-to-number + (cdr (assoc "SEARCH" (cdr result))))))))))) (defun nnimap-find-article-by-message-id (group server message-id &optional limit) commit 5491fd1098d27b3ba3db054076b9ab60fb3558dc Merge: 028ddef 2668ac1 Author: Fabián Ezequiel Gallina Date: Wed Jan 28 01:31:15 2015 -0300 Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs commit 028ddef7a2b6662ac602ea70d308deecbc69b4db Author: Fabián Ezequiel Gallina Date: Wed Jan 28 01:31:06 2015 -0300 Cleanup lisp/ChangeLog diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 2e5a67c..8eb1898 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -58,8 +58,6 @@ * progmodes/sh-script.el (sh-mode): Doc fix. (sh-basic-indent-line): Handle electric newline. (Bug#18756) -2014-12-14 Steve Purcell (tiny change) - 2015-01-04 Paul Eggert Fix dired quoting bug with "Hit`N`Hide". Fixes Bug#19498. commit 95a2cb24b0697558e6629460d8bc693b394f0138 Merge: f5ebe84 9664def Author: Fabián Ezequiel Gallina Date: Wed Jan 28 01:08:18 2015 -0300 Merge from origin/emacs-24 9664def Signal a file-error from directory-files on MS-Windows (Bug#19701) fd4e65e Added missing test for previous commit 5485e3e5 python.el: New non-global state dependent indentation engine. 3b23e6a Fix the description of --insert command-line option (Bug#19694) 7a7e594 Add a cross-reference in ELisp manual. (Bug#19668) b4f4075 Fixes: debbugs:19660 83b3c31 * test/automated/regexp-tests.el: Require regexp-opt Conflicts: lisp/progmodes/python.el commit f5ebe84d75bb75156db9e2e0a7ab356941b4ea75 Merge: 33ab7ee 81fb8ab Author: Fabián Ezequiel Gallina Date: Wed Jan 28 01:03:46 2015 -0300 Merge from origin/emacs-24 The following commits were skipped: 81fb8ab Backport: Fix package tests when TMPDIR is in HOME 3a345b5 Backport: Handle the `neg' operator in some calc-units functions. commit 33ab7ee0edcb3608e4a3d5deebc2b72c180dbfe4 Merge: 85ca476 8ee825c Author: Fabián Ezequiel Gallina Date: Wed Jan 28 01:03:46 2015 -0300 Merge from origin/emacs-24 8ee825c doc/emacs/programs.texi (Custom C Indent): Fix a typo. (Bug#19647) 88ba49f Fix coding.c subscript error 3ea1b31 Prevent artist-mode from creating runaway timers (Bug#6130). commit 85ca47671ccbffe87d6ccad17039b49d6b676d61 Merge: 294127e 4c09e3a Author: Fabián Ezequiel Gallina Date: Wed Jan 28 01:03:45 2015 -0300 Merge from origin/emacs-24 The following commits were skipped: 4c09e3a Backport: correct old fix for GTK font selection 8730974 Backport from trunk of bug 19531. commit 294127e7d59a5d23a32561716a1b192db410e12f Merge: 358a8b3 24aacfc Author: Fabián Ezequiel Gallina Date: Wed Jan 28 01:03:45 2015 -0300 Merge from origin/emacs-24 24aacfc Improve documentation of buttons (Bug#19628) 52ae3db doc/lispref/text.texi (Clickable Text): Improve indexing. (Bug#19629) 310f707 lisp/button.el (button-activate, push-button): Doc fix. (Bug#19628) 3ee38f2 Disallow w32 builds --without-toolkit-scroll-bars. e6518fc Fix display of images in R2L screen lines b0af674 Use u+05f4 in TUTORIAL.he. commit 358a8b34ac954ca147de9ececa4a51a21e60c97e Merge: 4d0108a 7b8cba9 Author: Fabián Ezequiel Gallina Date: Wed Jan 28 01:03:45 2015 -0300 Merge from origin/emacs-24 The following commit was skipped: 7b8cba9 Backport: Parse pcomplete arguments regardless of pcomplete-cycle-completions commit 4d0108a132788e0c3903eb4d5875321ed6e8eef1 Merge: 32a2c91 a3505cb Author: Fabián Ezequiel Gallina Date: Wed Jan 28 01:03:45 2015 -0300 Merge from origin/emacs-24 a3505cb doc/lispref/variables.texi (Creating Buffer-Local): Improve indexing (Bug#19608) d132c7b erc-backend.el: Give hook-name a default value of nil and add-to-list unconditionally. Fixes debbugs:19363 61cc7bf Fix support of non-ASCII frame titles on MS-Windows (Bug#19590) 1e5902a * filenotify.el (file-notify--descriptor): Do not cons for remote files. b1ea160 Handle watching of several files in the same directory for inotify. commit 32a2c91658bd02c4e761030f93eb5f0415524104 Merge: b0edd7c 67edddf Author: Fabián Ezequiel Gallina Date: Wed Jan 28 01:03:45 2015 -0300 Merge from origin/emacs-24 The following commits were skipped: 67edddf More fixes to support multi-line search in comint 18a89a0 Better support for multi-line shell input. commit b0edd7c69d88f245981a05e2333b09e3171d4e6f Merge: f4fcb10 b544ab5 Author: Fabián Ezequiel Gallina Date: Wed Jan 28 01:03:44 2015 -0300 Merge from origin/emacs-24 b544ab5 Fix return value of vertical-motion at ZV (Bug#19553) 1f179ea Fix encoding of I/O in net-utils.el for MS-Windows. (Bug#19458) 70f298f Fix the description of -nl in --help text. (Bug#19542) commit f4fcb10303e21d4a0526e070f7951b789c781b9f Merge: e57f766 7c0bfa1 Author: Fabián Ezequiel Gallina Date: Wed Jan 28 01:03:44 2015 -0300 Merge from origin/emacs-24 The following commit was skipped: 7c0bfa1 Fix line-move-visual's following of column in R2L lines (backport from trunk). commit e57f766d3c97162258ec24b2b4986cdc0e98d352 Merge: 63efa6c 2a57b7e Author: Fabián Ezequiel Gallina Date: Wed Jan 28 01:03:22 2015 -0300 Merge from origin/emacs-24 2a57b7e Fixes: debbugs:18756 Conflicts: lisp/ChangeLog commit 63efa6c6a559a23be863cad0c08457a2d29a0a67 Merge: d7a8981 4e86e02 Author: Fabián Ezequiel Gallina Date: Wed Jan 28 00:59:34 2015 -0300 Merge from origin/emacs-24 The following commit was skipped: 4e86e02 Backport: Add an extra column for Version in list-packages table commit d7a89815b6d69c3b1793d34bcad8bf0aa21d48c8 Merge: 3a8b701 d279e66 Author: Fabián Ezequiel Gallina Date: Wed Jan 28 00:59:34 2015 -0300 Merge from origin/emacs-24 d279e66 Fix assertion violations in try_window_id (Bug#19511) 031eadc Fix dired quoting bug with "Hit`N`Hide" 5981b4b More doc fixes for bug#19502 -- make documentation less X-specific. 143516c src/emacs.c (syms_of_emacs) : Doc fix. (Bug#19502) commit 3a8b7013042adae3c27327a75662fd8e884d4896 Merge: 0b2014f d7af65d Author: Fabián Ezequiel Gallina Date: Wed Jan 28 00:59:33 2015 -0300 Merge from origin/emacs-24 The following commit was skipped: d7af65d Backport: Unbreak `mouse-action' property in text buttons commit 0b2014f9cb13efdd6ebc30627d88b9a7f3a42149 Merge: 4fc35ed e13e3bd Author: Fabián Ezequiel Gallina Date: Wed Jan 28 00:59:33 2015 -0300 Merge from origin/emacs-24 e13e3bd * admin/update_autogen (commit): Prepend "# " to commit message. commit 2668ac1aaecfe62c80a4fbdfc27a38e384594d26 Author: Stefan Monnier Date: Tue Jan 27 22:41:31 2015 -0500 Tighten up the tagcode used for eieio and cl-struct objects * lisp/emacs-lisp/eieio-core.el (eieio-defclass-internal): Set the function slot of the tag symbol to :quick-object-witness-check. (eieio-object-p): Use :quick-object-witness-check. (eieio--generic-tagcode): Use cl--generic-struct-tag. * lisp/emacs-lisp/cl-preloaded.el: New file. * lisp/emacs-lisp/cl-macs.el (cl--bind-inits): Remove, unused. (cl--transform-lambda, cl-destructuring-bind): Remove cl--bind-inits. (cl--make-usage-args): Strip away &aux args. (cl-case, cl-typecase, cl--parse-loop-clause): Use macroexp-let2. (cl-the, cl-check-type): Use macroexp-let2 and cl-typep. (cl-defstruct): Use `declare' and cl-struct-define. * lisp/emacs-lisp/cl-generic.el (cl--generic-struct-tag): New function. (cl--generic-struct-tagcode): Use it to tighten the tagcode. * lisp/loadup.el: Load cl-preloaded. * src/lisp.mk (lisp): Add cl-preloaded. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b954245..0e22c76 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,21 @@ +2015-01-28 Stefan Monnier + + Tighten up the tagcode used for eieio and cl-struct objects. + * loadup.el: Load cl-preloaded. + * emacs-lisp/eieio-core.el (eieio-defclass-internal): Set the function + slot of the tag symbol to :quick-object-witness-check. + (eieio-object-p): Use :quick-object-witness-check. + (eieio--generic-tagcode): Use cl--generic-struct-tag. + * emacs-lisp/cl-preloaded.el: New file. + * emacs-lisp/cl-macs.el (cl--bind-inits): Remove, unused. + (cl--transform-lambda, cl-destructuring-bind): Remove cl--bind-inits. + (cl--make-usage-args): Strip away &aux args. + (cl-case, cl-typecase, cl--parse-loop-clause): Use macroexp-let2. + (cl-the, cl-check-type): Use macroexp-let2 and cl-typep. + (cl-defstruct): Use `declare' and cl-struct-define. + * emacs-lisp/cl-generic.el (cl--generic-struct-tag): New function. + (cl--generic-struct-tagcode): Use it to tighten the tagcode. + 2015-01-27 Katsumi Yamaoka * emacs-lisp/cl.el (cl--function-convert): diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el index 1bb7096..3e34ab6 100644 --- a/lisp/emacs-lisp/cl-generic.el +++ b/lisp/emacs-lisp/cl-generic.el @@ -724,6 +724,14 @@ Can only be used from within the lexical body of a primary or around method." (add-function :before-until cl-generic-tagcode-function #'cl--generic-struct-tagcode) + +(defun cl--generic-struct-tag (name) + `(and (vectorp ,name) + (> (length ,name) 0) + (let ((tag (aref ,name 0))) + (if (eq (symbol-function tag) :quick-object-witness-check) + tag)))) + (defun cl--generic-struct-tagcode (type name) (and (symbolp type) (get type 'cl-struct-type) @@ -733,12 +741,19 @@ Can only be used from within the lexical body of a primary or around method." (or (equal '(cl-tag-slot) (car (get type 'cl-struct-slots))) (error "Can't dispatch on cl-struct %S: no tag in slot 0" type)) - ;; We could/should check the vector has length >0, - ;; but really, mixing vectors and structs is a bad idea, - ;; so let's not waste time trying to handle the case - ;; of an empty vector. - ;; BEWARE: this returns a bogus tag for non-struct vectors. - `(50 . (and (vectorp ,name) (aref ,name 0))))) + ;; It's tempting to use (and (vectorp ,name) (aref ,name 0)) + ;; but that would suffer from some problems: + ;; - the vector may have size 0. + ;; - when called on an actual vector (rather than an object), we'd + ;; end up returning an arbitrary value, possibly colliding with + ;; other tagcode's values. + ;; - it can also result in returning all kinds of irrelevant + ;; values which would end up filling up the method-cache with + ;; lots of irrelevant/redundant entries. + ;; FIXME: We could speed this up by introducing a dedicated + ;; vector type at the C level, so we could do something like + ;; (and (vector-objectp ,name) (aref ,name 0)) + `(50 . ,(cl--generic-struct-tag name)))) (add-function :before-until cl-generic-tag-types-function #'cl--generic-struct-tag-types) diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index 38f15b8..eaec2c5 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -221,7 +221,7 @@ The name is made by appending a number to PREFIX, default \"G\"." '(&optional &rest &key &allow-other-keys &aux &whole &body &environment)) (defvar cl--bind-block) (defvar cl--bind-defs) (defvar cl--bind-enquote) -(defvar cl--bind-inits) (defvar cl--bind-lets) (defvar cl--bind-forms) +(defvar cl--bind-lets) (defvar cl--bind-forms) (defun cl--transform-lambda (form bind-block) "Transform a function form FORM of name BIND-BLOCK. @@ -229,9 +229,11 @@ BIND-BLOCK is the name of the symbol to which the function will be bound, and which will be used for the name of the `cl-block' surrounding the function's body. FORM is of the form (ARGS . BODY)." + ;; FIXME: (lambda (a &aux b) 1) expands to (lambda (a &rest --cl-rest--) ...) + ;; where the --cl-rest-- is clearly undesired. (let* ((args (car form)) (body (cdr form)) (orig-args args) (cl--bind-block bind-block) (cl--bind-defs nil) (cl--bind-enquote nil) - (cl--bind-inits nil) (cl--bind-lets nil) (cl--bind-forms nil) + (cl--bind-lets nil) (cl--bind-forms nil) (header nil) (simple-args nil)) (while (or (stringp (car body)) (memq (car-safe (car body)) '(interactive declare cl-declare))) @@ -244,10 +246,10 @@ FORM is of the form (ARGS . BODY)." (if (setq cl--bind-enquote (memq '&cl-quote args)) (setq args (delq '&cl-quote args))) (if (memq '&whole args) (error "&whole not currently implemented")) - (let* ((p (memq '&environment args)) (v (cadr p)) - (env-exp 'macroexpand-all-environment)) + (let* ((p (memq '&environment args)) + (v (cadr p))) (if p (setq args (nconc (delq (car p) (delq v args)) - (list '&aux (list v env-exp)))))) + `(&aux (,v macroexpand-all-environment)))))) (while (and args (symbolp (car args)) (not (memq (car args) '(nil &rest &body &key &aux))) (not (and (eq (car args) '&optional) @@ -261,8 +263,7 @@ FORM is of the form (ARGS . BODY)." (cl--do-arglist args nil (- (length simple-args) (if (memq '&optional simple-args) 1 0))) (setq cl--bind-lets (nreverse cl--bind-lets)) - (cl-list* (and cl--bind-inits `(cl-eval-when (compile load eval) - ,@(nreverse cl--bind-inits))) + (cl-list* nil (nconc (nreverse simple-args) (list '&rest (car (pop cl--bind-lets)))) (nconc (let ((hdr (nreverse header))) @@ -390,6 +391,11 @@ its argument list allows full Common Lisp conventions." (t x))) (defun cl--make-usage-args (arglist) + (let ((aux (ignore-errors (cl-position '&aux arglist)))) + (when aux + ;; `&aux' args aren't arguments, so let's just drop them from the + ;; usage info. + (setq arglist (cl-subseq arglist 0 aux)))) (if (cdr-safe (last arglist)) ;Not a proper list. (let* ((last (last arglist)) (tail (cdr last))) @@ -426,7 +432,7 @@ its argument list allows full Common Lisp conventions." )))) arglist)))) -(defun cl--do-arglist (args expr &optional num) ; uses bind-* +(defun cl--do-arglist (args expr &optional num) ; uses cl--bind-* (if (nlistp args) (if (or (memq args cl--lambda-list-keywords) (not (symbolp args))) (error "Invalid argument name: %s" args) @@ -441,9 +447,9 @@ its argument list allows full Common Lisp conventions." (keys nil) (laterarg nil) (exactarg nil) minarg) (or num (setq num 0)) - (if (listp (cadr restarg)) - (setq restarg (make-symbol "--cl-rest--")) - (setq restarg (cadr restarg))) + (setq restarg (if (listp (cadr restarg)) + (make-symbol "--cl-rest--") + (cadr restarg))) (push (list restarg expr) cl--bind-lets) (if (eq (car args) '&whole) (push (list (cl--pop2 args) restarg) cl--bind-lets)) @@ -570,12 +576,11 @@ its argument list allows full Common Lisp conventions." "Bind the variables in ARGS to the result of EXPR and execute BODY." (declare (indent 2) (debug (&define cl-macro-list def-form cl-declarations def-body))) - (let* ((cl--bind-lets nil) (cl--bind-forms nil) (cl--bind-inits nil) + (let* ((cl--bind-lets nil) (cl--bind-forms nil) (cl--bind-defs nil) (cl--bind-block 'cl-none) (cl--bind-enquote nil)) (cl--do-arglist (or args '(&aux)) expr) - (append '(progn) cl--bind-inits - (list `(let* ,(nreverse cl--bind-lets) - ,@(nreverse cl--bind-forms) ,@body))))) + (macroexp-let* (nreverse cl--bind-lets) + (macroexp-progn (append (nreverse cl--bind-forms) body))))) ;;; The `cl-eval-when' form. @@ -655,30 +660,26 @@ allowed only in the final clause, and matches if no other keys match. Key values are compared by `eql'. \n(fn EXPR (KEYLIST BODY...)...)" (declare (indent 1) (debug (form &rest (sexp body)))) - (let* ((temp (if (cl--simple-expr-p expr 3) expr (make-symbol "--cl-var--"))) - (head-list nil) - (body (cons - 'cond - (mapcar - (function - (lambda (c) - (cons (cond ((memq (car c) '(t otherwise)) t) - ((eq (car c) 'cl--ecase-error-flag) - `(error "cl-ecase failed: %s, %s" - ,temp ',(reverse head-list))) - ((listp (car c)) - (setq head-list (append (car c) head-list)) - `(cl-member ,temp ',(car c))) - (t - (if (memq (car c) head-list) - (error "Duplicate key in case: %s" - (car c))) - (push (car c) head-list) - `(eql ,temp ',(car c)))) - (or (cdr c) '(nil))))) - clauses)))) - (if (eq temp expr) body - `(let ((,temp ,expr)) ,body)))) + (macroexp-let2 macroexp-copyable-p temp expr + (let* ((head-list nil)) + `(cond + ,@(mapcar + (lambda (c) + (cons (cond ((memq (car c) '(t otherwise)) t) + ((eq (car c) 'cl--ecase-error-flag) + `(error "cl-ecase failed: %s, %s" + ,temp ',(reverse head-list))) + ((listp (car c)) + (setq head-list (append (car c) head-list)) + `(cl-member ,temp ',(car c))) + (t + (if (memq (car c) head-list) + (error "Duplicate key in case: %s" + (car c))) + (push (car c) head-list) + `(eql ,temp ',(car c)))) + (or (cdr c) '(nil)))) + clauses))))) ;;;###autoload (defmacro cl-ecase (expr &rest clauses) @@ -698,24 +699,22 @@ final clause, and matches if no other keys match. \n(fn EXPR (TYPE BODY...)...)" (declare (indent 1) (debug (form &rest ([&or cl-type-spec "otherwise"] body)))) - (let* ((temp (if (cl--simple-expr-p expr 3) expr (make-symbol "--cl-var--"))) - (type-list nil) - (body (cons - 'cond - (mapcar - (function - (lambda (c) - (cons (cond ((eq (car c) 'otherwise) t) - ((eq (car c) 'cl--ecase-error-flag) - `(error "cl-etypecase failed: %s, %s" - ,temp ',(reverse type-list))) - (t - (push (car c) type-list) - (cl--make-type-test temp (car c)))) - (or (cdr c) '(nil))))) - clauses)))) - (if (eq temp expr) body - `(let ((,temp ,expr)) ,body)))) + (macroexp-let2 macroexp-copyable-p temp expr + (let* ((type-list nil)) + (cons + 'cond + (mapcar + (function + (lambda (c) + (cons (cond ((eq (car c) 'otherwise) t) + ((eq (car c) 'cl--ecase-error-flag) + `(error "cl-etypecase failed: %s, %s" + ,temp ',(reverse type-list))) + (t + (push (car c) type-list) + `(cl-typep ,temp ',(car c)))) + (or (cdr c) '(nil))))) + clauses))))) ;;;###autoload (defmacro cl-etypecase (expr &rest clauses) @@ -1439,16 +1438,14 @@ For more details, see Info node `(cl)Loop Facility'. (push `(progn (if ,what (cl-incf ,var)) t) cl--loop-body))) ((memq word '(minimize minimizing maximize maximizing)) - (let* ((what (pop cl--loop-args)) - (temp (if (cl--simple-expr-p what) what - (make-symbol "--cl-var--"))) - (var (cl--loop-handle-accum nil)) - (func (intern (substring (symbol-name word) 0 3))) - (set `(setq ,var (if ,var (,func ,var ,temp) ,temp)))) - (push `(progn ,(if (eq temp what) set - `(let ((,temp ,what)) ,set)) - t) - cl--loop-body))) + (push `(progn ,(macroexp-let2 macroexp-copyable-p temp + (pop cl--loop-args) + (let* ((var (cl--loop-handle-accum nil)) + (func (intern (substring (symbol-name word) + 0 3)))) + `(setq ,var (if ,var (,func ,var ,temp) ,temp)))) + t) + cl--loop-body)) ((eq word 'with) (let ((bindings nil)) @@ -2104,14 +2101,11 @@ values. For compatibility, (cl-values A B C) is a synonym for (list A B C). (< cl--optimize-speed 3) (= cl--optimize-safety 3))) form - (let* ((temp (if (cl--simple-expr-p form 3) - form (make-symbol "--cl-var--"))) - (body `(progn (unless ,(cl--make-type-test temp type) - (signal 'wrong-type-argument - (list ',type ,temp ',form))) - ,temp))) - (if (eq temp form) body - `(let ((,temp ,form)) ,body))))) + (macroexp-let2 macroexp-copyable-p temp form + `(progn (unless (cl-typep ,temp ',type) + (signal 'wrong-type-argument + (list ',type ,temp ',form))) + ,temp)))) (defvar cl--proclaim-history t) ; for future compilers (defvar cl--declare-stack t) ; for future compilers @@ -2425,15 +2419,11 @@ non-nil value, that slot cannot be set via `setf'. (tag (intern (format "cl-struct-%s" name))) (tag-symbol (intern (format "cl-struct-%s-tags" name))) (include-descs nil) - (side-eff nil) (type nil) (named nil) (forms nil) + (docstring (if (stringp (car descs)) (pop descs))) pred-form pred-check) - (if (stringp (car descs)) - (push `(put ',name 'structure-documentation - ,(pop descs)) - forms)) (setq descs (cons '(cl-tag-slot) (mapcar (function (lambda (x) (if (consp x) x (list x)))) descs))) @@ -2458,6 +2448,7 @@ non-nil value, that slot cannot be set via `setf'. ((eq opt :predicate) (if args (setq predicate (car args)))) ((eq opt :include) + (when include (error "Can't :include more than once")) (setq include (car args) include-descs (mapcar (function (lambda (x) @@ -2511,20 +2502,19 @@ non-nil value, that slot cannot be set via `setf'. (if named (setq tag name))) (setq type 'vector named 'true))) (or named (setq descs (delq (assq 'cl-tag-slot descs) descs))) - (push `(defvar ,tag-symbol) forms) (when (and (null predicate) named) (setq predicate (intern (format "cl--struct-%s-p" name)))) (setq pred-form (and named (let ((pos (- (length descs) (length (memq (assq 'cl-tag-slot descs) descs))))) - (if (eq type 'vector) - `(and (vectorp cl-x) - (>= (length cl-x) ,(length descs)) - (memq (aref cl-x ,pos) ,tag-symbol)) - (if (= pos 0) - `(memq (car-safe cl-x) ,tag-symbol) - `(and (consp cl-x) + (cond + ((eq type 'vector) + `(and (vectorp cl-x) + (>= (length cl-x) ,(length descs)) + (memq (aref cl-x ,pos) ,tag-symbol))) + ((= pos 0) `(memq (car-safe cl-x) ,tag-symbol)) + (t `(and (consp cl-x) (memq (nth ,pos cl-x) ,tag-symbol)))))) pred-check (and pred-form (> safety 0) (if (and (eq (cl-caadr pred-form) 'vectorp) @@ -2546,6 +2536,7 @@ non-nil value, that slot cannot be set via `setf'. (push slot slots) (push (nth 1 desc) defaults) (push `(cl-defsubst ,accessor (cl-x) + (declare (side-effect-free t)) ,@(and pred-check (list `(or ,pred-check (error "%s accessing a non-%s" @@ -2554,7 +2545,6 @@ non-nil value, that slot cannot be set via `setf'. (if (= pos 0) '(car cl-x) `(nth ,pos cl-x)))) forms) - (push (cons accessor t) side-eff) (if (cadr (memq :read-only (cddr desc))) (push `(gv-define-expander ,accessor (lambda (_cl-do _cl-x) @@ -2587,15 +2577,14 @@ non-nil value, that slot cannot be set via `setf'. defaults (nreverse defaults)) (when pred-form (push `(cl-defsubst ,predicate (cl-x) + (declare (side-effect-free error-free)) ,(if (eq (car pred-form) 'and) (append pred-form '(t)) `(and ,pred-form t))) forms) - (push `(put ',name 'cl-deftype-satisfies ',predicate) forms) - (push (cons predicate 'error-free) side-eff)) + (push `(put ',name 'cl-deftype-satisfies ',predicate) forms)) (and copier - (progn (push `(defun ,copier (x) (copy-sequence x)) forms) - (push (cons copier t) side-eff))) + (push `(defalias ',copier #'copy-sequence) forms)) (if constructor (push (list constructor (cons '&key (delq nil (copy-sequence slots)))) @@ -2607,11 +2596,11 @@ non-nil value, that slot cannot be set via `setf'. (make (cl-mapcar (function (lambda (s d) (if (memq s anames) s d))) slots defaults))) (push `(cl-defsubst ,name - (&cl-defs '(nil ,@descs) ,@args) + (&cl-defs '(nil ,@descs) ,@args) + ,@(if (cl--safe-expr-p `(progn ,@(mapcar #'cl-second descs))) + '((declare (side-effect-free t)))) (,type ,@make)) - forms) - (if (cl--safe-expr-p `(progn ,@(mapcar #'cl-second descs))) - (push (cons name t) side-eff)))) + forms))) (if print-auto (nconc print-func (list '(princ ")" cl-s) t))) ;; Don't bother adding to cl-custom-print-functions since it's not used ;; by anything anyway! @@ -2624,17 +2613,14 @@ non-nil value, that slot cannot be set via `setf'. ;; (and ,pred-form ,print-func)) ;; cl-custom-print-functions)) ;; forms)) - (push `(setq ,tag-symbol (list ',tag)) forms) - (push `(cl-eval-when (compile load eval) - (put ',name 'cl-struct-slots ',descs) - (put ',name 'cl-struct-type ',(list type (eq named t))) - (put ',name 'cl-struct-include ',include) - (put ',name 'cl-struct-print ,print-auto) - ,@(mapcar (lambda (x) - `(function-put ',(car x) 'side-effect-free ',(cdr x))) - side-eff)) - forms) - `(progn ,@(nreverse (cons `',name forms))))) + `(progn + (defvar ,tag-symbol) + ,@(nreverse forms) + (eval-and-compile + (cl-struct-define ',name ,docstring ',include + ',type ,(eq named t) ',descs ',tag-symbol ',tag + ',print-auto)) + ',name))) (defun cl-struct-sequence-type (struct-type) "Return the sequence used to build STRUCT-TYPE. @@ -2741,14 +2727,11 @@ STRING is an optional description of the desired type." (declare (debug (place cl-type-spec &optional stringp))) (and (or (not (cl--compiling-file)) (< cl--optimize-speed 3) (= cl--optimize-safety 3)) - (let* ((temp (if (cl--simple-expr-p form 3) - form (make-symbol "--cl-var--"))) - (body `(or ,(cl--make-type-test temp type) - (signal 'wrong-type-argument - (list ,(or string `',type) - ,temp ',form))))) - (if (eq temp form) `(progn ,body nil) - `(let ((,temp ,form)) ,body nil))))) + (macroexp-let2 macroexp-copyable-p temp form + `(progn (or (cl-typep ,temp ',type) + (signal 'wrong-type-argument + (list ,(or string `',type) ,temp ',form))) + nil)))) ;;;###autoload (defmacro cl-assert (form &optional show-args string &rest args) diff --git a/lisp/emacs-lisp/cl-preloaded.el b/lisp/emacs-lisp/cl-preloaded.el new file mode 100644 index 0000000..c9867b4 --- /dev/null +++ b/lisp/emacs-lisp/cl-preloaded.el @@ -0,0 +1,48 @@ +;;; cl-preloaded.el --- Preloaded part of the CL library -*- lexical-binding: t; -*- + +;; Copyright (C) 2015 Free Software Foundation, Inc + +;; Author: Stefan Monnier + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . + +;;; Commentary: + +;; The expectation is that structs defined with cl-defstruct do not +;; need cl-lib at run-time, but we'd like to hide the details of the +;; cl-struct metadata behind the cl-struct-define function, so we put +;; it in this pre-loaded file. + +;;; Code: + +(defun cl-struct-define (name docstring parent type named slots children-sym + tag print-auto) + (if (boundp children-sym) + (add-to-list children-sym tag) + (set children-sym (list tag))) + ;; If the cl-generic support, we need to be able to check + ;; if a vector is a cl-struct object, without knowing its particular type. + ;; So we use the (otherwise) unused function slots of the tag symbol + ;; to put a special witness value, to make the check easy and reliable. + (unless named (fset tag :quick-object-witness-check)) + (put name 'cl-struct-slots slots) + (put name 'cl-struct-type (list type named)) + (if parent (put name 'cl-struct-include parent)) + (if print-auto (put name 'cl-struct-print print-auto)) + (if docstring (put name 'structure-documentation docstring))) + +(provide 'cl-preloaded) +;;; cl-preloaded.el ends here diff --git a/lisp/emacs-lisp/eieio-core.el b/lisp/emacs-lisp/eieio-core.el index 7492f05..d8d3902 100644 --- a/lisp/emacs-lisp/eieio-core.el +++ b/lisp/emacs-lisp/eieio-core.el @@ -224,9 +224,9 @@ Return nil if that option doesn't exist." (defsubst eieio-object-p (obj) "Return non-nil if OBJ is an EIEIO object." (and (vectorp obj) - (condition-case nil - (eq (aref (eieio--object-class-object obj) 0) 'defclass) - (error nil)))) + (> (length obj) 0) + (eq (symbol-function (eieio--class-tag obj)) + :quick-object-witness-check))) (defalias 'object-p 'eieio-object-p) @@ -539,6 +539,7 @@ See `defclass' for more information." ;; objects readable. (tag (intern (format "eieio-class-tag--%s" cname)))) (set tag newc) + (fset tag :quick-object-witness-check) (setf (eieio--object-class-tag cache) tag) (let ((eieio-skip-typecheck t)) ;; All type-checking has been done to our satisfaction @@ -1223,9 +1224,10 @@ method invocation orders of the involved classes." ;; specializer in a defmethod form. ;; So we can ignore types that are not known to denote classes. (and (class-p type) - ;; Prefer (aref ,name 0) over (eieio--class-tag ,name) so that - ;; the tagcode is identical to the tagcode used for cl-struct. - `(50 . (and (vectorp ,name) (aref ,name 0))))) + ;; Use the exact same code as for cl-struct, so that methods + ;; that dispatch on both kinds of objects get to share this + ;; part of the dispatch code. + `(50 . ,(cl--generic-struct-tag name)))) (add-function :before-until cl-generic-tag-types-function #'eieio--generic-tag-types) diff --git a/lisp/loadup.el b/lisp/loadup.el index 96641c8..003b0db 100644 --- a/lisp/loadup.el +++ b/lisp/loadup.el @@ -145,7 +145,8 @@ (file-error (load "ldefs-boot.el"))) (load "emacs-lisp/nadvice") -(load "minibuffer") +(load "emacs-lisp/cl-preloaded") +(load "minibuffer") ;After loaddefs, for define-minor-mode. (load "abbrev") ;lisp-mode.el and simple.el use define-abbrev-table. (load "simple") diff --git a/src/ChangeLog b/src/ChangeLog index 8e5166e..e8e216e 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2015-01-28 Stefan Monnier + + * lisp.mk (lisp): Add cl-preloaded. + 2015-01-27 Paul Eggert Use bool for boolean in xfaces.c diff --git a/src/lisp.mk b/src/lisp.mk index a9deb2b..ee2a07c 100644 --- a/src/lisp.mk +++ b/src/lisp.mk @@ -71,6 +71,7 @@ lisp = \ $(lispsource)/faces.elc \ $(lispsource)/button.elc \ $(lispsource)/startup.elc \ + $(lispsource)/emacs-lisp/cl-preloaded.elc \ $(lispsource)/emacs-lisp/nadvice.elc \ $(lispsource)/minibuffer.elc \ $(lispsource)/abbrev.elc \ commit 4fc35edd5fcdfe258c04cfed707753fdd8795a72 Merge: 8e9166c 780eb0a Author: Fabián Ezequiel Gallina Date: Wed Jan 28 00:33:03 2015 -0300 Merge from origin/emacs-24 The following commit was skipped: 780eb0a Auto-commit of loaddefs files. commit 7f4f16b3ae6fdb59d83cfc01017668f2a564309f Merge: 1a369fc be2d23e Author: Lars Magne Ingebrigtsen Date: Wed Jan 28 14:21:33 2015 +1100 Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs commit 8e9166c92c97e7c2041eecee4e00d412a1eca1be Merge: be2d23e a012c7b Author: Fabián Ezequiel Gallina Date: Wed Jan 28 00:09:39 2015 -0300 Merge from origin/emacs-24 a012c7b Fix copyright years by hand 732fd4c Update copyright year to 2015 Conflicts: INSTALL.REPO admin/notes/lel-TODO doc/man/grep-changelog.1 doc/misc/eww.texi etc/CONTRIBUTE etc/GNU etc/NEWS etc/refcards/emacsver.tex etc/refcards/ru-refcard.tex lib-src/grep-changelog lib-src/test-distrib.c lib/alloca.in.h lib/binary-io.h lib/c-ctype.h lib/c-strcasecmp.c lib/c-strncasecmp.c lib/careadlinkat.c lib/close-stream.c lib/dosname.h lib/dup2.c lib/filemode.h lib/fpending.c lib/fpending.h lib/getgroups.c lib/getloadavg.c lib/getopt.in.h lib/getopt1.c lib/getopt_int.h lib/gettext.h lib/gettime.c lib/gettimeofday.c lib/group-member.c lib/md5.c lib/md5.h lib/memrchr.c lib/sha1.c lib/sig2str.c lib/stdarg.in.h lib/stdbool.in.h lib/stdlib.in.h lib/strftime.c lib/strtoimax.c lib/strtol.c lib/strtoll.c lib/strtoull.c lib/tempname.c lib/time_r.c lib/unsetenv.c lib/xalloc-oversized.h lisp/gnus/gnus-setup.el lisp/progmodes/cap-words.el lisp/w32-common-fns.el m4/alloca.m4 m4/dup2.m4 m4/filemode.m4 m4/getgroups.m4 m4/getloadavg.m4 m4/gettime.m4 m4/gettimeofday.m4 m4/gnulib-common.m4 m4/group-member.m4 m4/manywarnings.m4 m4/memrchr.m4 m4/mktime.m4 m4/pathmax.m4 m4/pthread_sigmask.m4 m4/sig2str.m4 m4/ssize_t.m4 m4/st_dm_mode.m4 m4/stat-time.m4 m4/stdarg.m4 m4/stdbool.m4 m4/stddef_h.m4 m4/stdio_h.m4 m4/strftime.m4 m4/strtoimax.m4 m4/strtoll.m4 m4/strtoull.m4 m4/strtoumax.m4 m4/time_h.m4 m4/timer_time.m4 m4/timespec.m4 m4/unistd_h.m4 m4/utimbuf.m4 nextstep/README nt/addsection.c src/insdel.c src/w32heap.c test/automated/package-x-test.el commit ac94737e8d0d4ae737ce15b62c8aab23d759ba72 Author: Joakim Verona Date: Wed Jan 28 01:02:43 2015 +0100 First attempt at bookmark support diff --git a/lisp/xwidget.el b/lisp/xwidget.el index 4ea2139..4471b12 100644 --- a/lisp/xwidget.el +++ b/lisp/xwidget.el @@ -1,4 +1,4 @@ -;;; xwidget.el --- api functions for xwidgets +p;;; xwidget.el --- api functions for xwidgets -*- lexical-binding: t -*- ;; see xwidget.c for more api functions @@ -224,12 +224,21 @@ XWIDGET instance, XWIDGET-EVENT-TYPE depends on the originating xwidget." (t (xwidget-log "unhandled event:%s" xwidget-event-type))))) (t (xwidget-log "error: callback called for xwidget with dead buffer"))))) +(defvar bookmark-make-record-function) (define-derived-mode xwidget-webkit-mode special-mode "xwidget-webkit" "xwidget webkit view mode" (setq buffer-read-only t) + (setq-local bookmark-make-record-function + #'xwidget-webkit-bookmark-make-record) ;; Keep track of [vh]scroll when switching buffers (image-mode-setup-winprops)) +(defun xwidget-webkit-bookmark-make-record () + (nconc (bookmark-make-record-default t t) + `((page . ,(xwidget-webkit-current-url)) + (handler . (lambda (bmk) (browse-url (bookmark-prop-get bmk 'page))))))) + + (defvar xwidget-webkit-last-session-buffer nil) (defun xwidget-webkit-last-session () commit be2d23e58721b7acc68c0ea654a38e5109df2aa2 Author: Katsumi Yamaoka Date: Tue Jan 27 23:55:26 2015 +0000 lisp/emacs-lisp/cl.el (cl--function-convert): Merge cache that cl--labels-convert adds (bug#19699) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 182d770..816a8cb 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2015-01-27 Katsumi Yamaoka + + * emacs-lisp/cl.el (cl--function-convert): + Merge cache that cl--labels-convert adds (bug#19699). + 2015-01-27 Ivan Shmakov * tar-mode.el: Allow for adding new archive members. (Bug#19274) diff --git a/lisp/emacs-lisp/cl.el b/lisp/emacs-lisp/cl.el index 1cd7bd7..1b20463 100644 --- a/lisp/emacs-lisp/cl.el +++ b/lisp/emacs-lisp/cl.el @@ -377,7 +377,9 @@ The two cases that are handled are: res)))) (t (setq cl--labels-convert-cache cl--function-convert-cache) - (cl--labels-convert f)))) + (prog1 + (cl--labels-convert f) + (setq cl--function-convert-cache cl--labels-convert-cache))))) (defmacro lexical-let (bindings &rest body) "Like `let', but lexically scoped. commit 7e157b25446c5dc11201db4dff256cf7cc2f1611 Author: Paul Eggert Date: Tue Jan 27 14:37:37 2015 -0800 Fix inaccuracies in my recent ChangeLog entry. diff --git a/ChangeLog b/ChangeLog index 09a7968..68a7341 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,12 +1,10 @@ 2015-01-27 Paul Eggert - Port autogen.sh hook creation to Apple Git + Port autogen.sh hook creation to private templates * autogen.sh: Do not assume that the hook samples exist. - This ports to git version 1.9.3 (Apple Git-50). - For some reason Apple decided to populate the git hooks directory - in a different way from the way that standard Git does it. - The downside is that patch applications won't be checked on Apple, - but that's better than autogen.sh failing. + This ports to developers who override templatedir in their Git + configuration. The downside is that patch applications won't be + checked, but that's better than autogen.sh failing. Problem reported by Sam Steingold in: http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00898.html commit a56eab8259568ea1389e972623e46359e73c0233 Author: Ivan Shmakov Date: Tue Jan 27 21:25:56 2015 +0000 Allow for adding new members to Tar archives. * lisp/tar-mode.el: Allow for adding new archive members. (tar-new-regular-file-header, tar--pad-to, tar--put-at) (tar-header-serialize): New functions. (tar-current-position): Split from tar-current-descriptor. (tar-current-descriptor): Use it. (tar-new-entry): New command. (tar-mode-map): Bind it. * doc/emacs/files.texi (File Archives): Document "I" for tar-new-entry. * etc/NEWS: Mention the new tar-new-entry command. Fixes: debbugs:19274 diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index a90c587..b7853a7 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,3 +1,8 @@ +2015-01-27 Ivan Shmakov + + * files.texi (File Archives): Document "I" for tar-new-entry. + (Bug#19274) + 2014-12-31 Paul Eggert Less 'make' chatter for Emacs doc diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi index 196c6bb..b12b28f 100644 --- a/doc/emacs/files.texi +++ b/doc/emacs/files.texi @@ -1689,6 +1689,13 @@ likewise. @kbd{v} extracts a file into a buffer in View mode another window, so you could edit the file and operate on the archive simultaneously. + The @kbd{I} key adds a new (regular) file to the archive. The file +is initially empty, but can readily be edited using the commands +above. The command inserts the new file before the current one, so +that using it on the topmost line of the Tar buffer makes the new file +the first one in the archive, and using it at the end of the buffer +makes it the last one. + @kbd{d} marks a file for deletion when you later use @kbd{x}, and @kbd{u} unmarks a file, as in Dired. @kbd{C} copies a file from the archive to disk and @kbd{R} renames a file within the archive. diff --git a/etc/ChangeLog b/etc/ChangeLog index b31e8a9..0677e44 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,7 @@ +2015-01-27 Ivan Shmakov + + * NEWS: Mention the new tar-new-entry command. (Bug#19274) + 2015-01-27 Thomas Fitzsimmons * NEWS: Document EUDC improvements. diff --git a/etc/NEWS b/etc/NEWS index 7552778..4b0a268 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -527,6 +527,10 @@ to avoid interfering with the kill ring. allow overriding the regular expression that recognizes the ldapsearch command line's password prompt. ++++ +** tar-mode: new `tar-new-entry' command, allowing for new members to +be added to the archive. + ** Obsolete packages --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 80dfeef..182d770 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,13 @@ +2015-01-27 Ivan Shmakov + + * tar-mode.el: Allow for adding new archive members. (Bug#19274) + (tar-new-regular-file-header, tar--pad-to, tar--put-at) + (tar-header-serialize): New functions. + (tar-current-position): Split from tar-current-descriptor. + (tar-current-descriptor): Use it. + (tar-new-entry): New command. + (tar-mode-map): Bind it. + 2015-01-27 Sam Steingold * progmodes/python.el (python-check-custom-command): Buffer local diff --git a/lisp/tar-mode.el b/lisp/tar-mode.el index 1ee5451..6c7f755 100644 --- a/lisp/tar-mode.el +++ b/lisp/tar-mode.el @@ -50,9 +50,6 @@ ;; ;; o chmod should understand "a+x,og-w". ;; -;; o It's not possible to add a NEW file to a tar archive; not that -;; important, but still... -;; ;; o The code is less efficient that it could be - in a lot of places, I ;; pull a 512-character string out of the buffer and parse it, when I could ;; be parsing it in place, not garbaging a string. Should redo that. @@ -369,6 +366,80 @@ write-date, checksum, link-type, and link-name." string) (tar-parse-octal-integer string)) +(defun tar-new-regular-file-header (filename &optional size time) + "Return a Tar header for a regular file. +The header will lack a proper checksum; use `tar-header-block-checksum' +to compute one, or request `tar-header-serialize' to do that. + +Other tar-mode facilities may also require the data-start header +field to be set to a valid value. + +If SIZE is not given or nil, it defaults to 0. +If TIME is not given or nil, assume now." + (make-tar-header + nil + filename + #o644 0 0 (or size 0) + (or time (current-time)) + nil ; checksum + nil nil + nil nil nil nil nil)) + +(defun tar--pad-to (pos) + (make-string (+ pos (- (point)) (point-min)) 0)) + +(defun tar--put-at (pos val &optional fmt mask) + (when val + (insert (tar--pad-to pos) + (if fmt + (format fmt (if mask (logand mask val) val)) + val)))) + +(defun tar-header-serialize (header &optional update-checksum) + "Return the serialization of a Tar HEADER as a string. +This function calls `tar-header-block-check-checksum' to ensure the +checksum is correct. + +If UPDATE-CHECKSUM is non-nil, update HEADER with the newly-computed +checksum before doing the check." + (with-temp-buffer + (set-buffer-multibyte nil) + (let ((encoded-name + (encode-coding-string (tar-header-name header) + tar-file-name-coding-system))) + (unless (< (length encoded-name) 99) + ;; FIXME: Implement it. + (error "Long file name support is not implemented")) + (insert encoded-name)) + (tar--put-at tar-mode-offset (tar-header-mode header) "%6o\0 " #o777777) + (tar--put-at tar-uid-offset (tar-header-uid header) "%6o\0 " #o777777) + (tar--put-at tar-gid-offset (tar-header-gid header) "%6o\0 " #o777777) + (tar--put-at tar-size-offset (tar-header-size header) "%11o ") + (insert (tar--pad-to tar-time-offset) + (tar-octal-time (tar-header-date header)) + " ") + ;; Omit tar-header-checksum (tar-chk-offset) for now. + (tar--put-at tar-linkp-offset (tar-header-link-type header)) + (tar--put-at tar-link-offset (tar-header-link-name header)) + (when (tar-header-magic header) + (tar--put-at tar-magic-offset (tar-header-magic header)) + (tar--put-at tar-uname-offset (tar-header-uname header)) + (tar--put-at tar-gname-offset (tar-header-gname header)) + (tar--put-at tar-dmaj-offset (tar-header-dmaj header) "%7o\0" #o7777777) + (tar--put-at tar-dmin-offset (tar-header-dmin header) "%7o\0" #o7777777)) + (tar--put-at 512 "") + (let ((ck (tar-header-block-checksum (buffer-string)))) + (goto-char (+ (point-min) tar-chk-offset)) + (delete-char 8) + (insert (format "%6o\0 " ck)) + (when update-checksum + (setf (tar-header-checksum header) ck)) + (tar-header-block-check-checksum (buffer-string) + (tar-header-checksum header) + (tar-header-name header))) + ;; . + (buffer-string))) + (defun tar-header-block-checksum (string) "Compute and return a tar-acceptable checksum for this block." @@ -547,6 +618,7 @@ MODE should be an integer which is a file mode value." (define-key map "p" 'tar-previous-line) (define-key map "\^P" 'tar-previous-line) (define-key map [up] 'tar-previous-line) + (define-key map "I" 'tar-new-entry) (define-key map "R" 'tar-rename-entry) (define-key map "u" 'tar-unflag) (define-key map "v" 'tar-view) @@ -731,10 +803,14 @@ tar-file's buffer." (interactive "p") (tar-next-line (- arg))) +(defun tar-current-position () + "Return the `tar-parse-info' index for the current line." + (count-lines (point-min) (line-beginning-position))) + (defun tar-current-descriptor (&optional noerror) "Return the tar-descriptor of the current line, or signals an error." ;; I wish lines had plists, like in ZMACS... - (or (nth (count-lines (point-min) (line-beginning-position)) + (or (nth (tar-current-position) tar-parse-info) (if noerror nil @@ -948,6 +1024,37 @@ the current tar-entry." (write-region start end to-file nil nil nil t))) (message "Copied tar entry %s to %s" name to-file))) +(defun tar-new-entry (filename &optional index) + "Insert a new empty regular file before point." + (interactive "*sFile name: ") + (let* ((buffer (current-buffer)) + (index (or index (tar-current-position))) + (d-list (and (not (zerop index)) + (nthcdr (+ -1 index) tar-parse-info))) + (pos (if d-list + (tar-header-data-end (car d-list)) + (point-min))) + (new-descriptor + (tar-new-regular-file-header filename))) + ;; Update the data buffer; fill the missing descriptor fields. + (with-current-buffer tar-data-buffer + (goto-char pos) + (insert (tar-header-serialize new-descriptor t)) + (setf (tar-header-data-start new-descriptor) + (copy-marker (point) nil))) + ;; Update tar-parse-info. + (if d-list + (setcdr d-list (cons new-descriptor (cdr d-list))) + (setq tar-parse-info (cons new-descriptor tar-parse-info))) + ;; Update the listing buffer. + (save-excursion + (goto-char (point-min)) + (forward-line index) + (let ((inhibit-read-only t)) + (insert (tar-header-block-summarize new-descriptor) ?\n))) + ;; . + index)) + (defun tar-flag-deleted (p &optional unflag) "In Tar mode, mark this sub-file to be deleted from the tar file. With a prefix argument, mark that many files." commit 2a9de013720d8505369b42c7c110116ec822281f Merge: d464b0e bd7a1e1 Author: Joakim Verona Date: Tue Jan 27 20:38:56 2015 +0100 Merge branch 'master' into xwidget commit 9664defd262252faf037c5fe1ea095f1cc4b308b Author: Eli Zaretskii Date: Tue Jan 27 21:02:13 2015 +0200 Signal a file-error from directory-files on MS-Windows (Bug#19701) src/dired.c (directory_files_internal) [WINDOWSNT]: If readdir returns NULL and errno is ENOTDIR, behave as if opendir failed to open the directory. src/w32.c (sys_readdir): If FindFirstFile fails because the directory doesn't exist, set errno to ENOTDIR. diff --git a/src/ChangeLog b/src/ChangeLog index 9cf5eb5..a33e834 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,12 @@ +2015-01-27 Eli Zaretskii + + * dired.c (directory_files_internal) [WINDOWSNT]: If readdir + returns NULL and errno is ENOTDIR, behave as if opendir failed to + open the directory. (Bug#19701) + + * w32.c (sys_readdir): If FindFirstFile fails because the + directory doesn't exist, set errno to ENOTDIR. + 2015-01-24 Jan Djärv * nsterm.m (drawRect:): Add block/unblock_input (Bug#19660). diff --git a/src/dired.c b/src/dired.c index 5d7977b..f6c47a7 100644 --- a/src/dired.c +++ b/src/dired.c @@ -247,6 +247,19 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full, QUIT; continue; } +#ifdef WINDOWSNT + /* The MS-Windows implementation of 'opendir' doesn't + actually open a directory until the first call to + 'readdir'. If 'readdir' fails to open the directory, it + sets errno to ENOTDIR; we convert it here to ENOENT so + that the error message is similar to what happens on + Posix hosts in such cases. */ + if (errno == ENOTDIR) + { + errno = ENOENT; + report_file_error ("Opening directory", directory); + } +#endif break; } diff --git a/src/w32.c b/src/w32.c index 09902a2..aedf649 100644 --- a/src/w32.c +++ b/src/w32.c @@ -3432,7 +3432,22 @@ sys_readdir (DIR *dirp) } if (dir_find_handle == INVALID_HANDLE_VALUE) - return NULL; + { + switch (GetLastError ()) + { + case ERROR_PATH_NOT_FOUND: + case ERROR_ACCESS_DENIED: + case ERROR_INVALID_DRIVE: + case ERROR_BAD_NETPATH: + /* This special value will be noticed by + directory_files_internal, which see. */ + errno = ENOTDIR; + break; + default: + break; + } + return NULL; + } } else if (w32_unicode_filenames) { commit bd7a1e1564d04d7ea9c7f6587ffcf02ef8975512 Author: Sam Steingold Date: Tue Jan 27 13:20:57 2015 -0500 minor tweaks for `python-check' * lisp/progmodes/python.el (python-check-custom-command): Buffer local because it usually includes the buffer name. (python-check-command): Set to epylint when pyflakes is not available. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 1eafe3c..80dfeef 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2015-01-27 Sam Steingold + + * progmodes/python.el (python-check-custom-command): Buffer local + because it usually includes the buffer name. + (python-check-command): Set to epylint when pyflakes is not available. + 2015-01-27 Thomas Fitzsimmons * net/eudcb-bbdb.el, net/eudcb-ldap.el, net/eudcb-mab.el, diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index d298f96..13ff439 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -3816,7 +3816,9 @@ The skeleton will be bound to python-skeleton-NAME." ;;; Code check (defcustom python-check-command - "pyflakes" + (or (executable-find "pyflakes") + (executable-find "epylint") + "install pyflakes, pylint or something else") "Command used to check a Python file." :type 'string :group 'python) @@ -3827,7 +3829,7 @@ The skeleton will be bound to python-skeleton-NAME." :type 'string :group 'python) -(defvar python-check-custom-command nil +(defvar-local python-check-custom-command nil "Internal use.") (defun python-check (command) commit c7effd7cacc5505933c32221bb25bea791b589e0 Author: Thomas Fitzsimmons Date: Sat Jan 24 00:37:32 2015 -0500 etc/NEWS: Document EUDC improvements diff --git a/etc/ChangeLog b/etc/ChangeLog index 71ecf7f..b31e8a9 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,7 @@ +2015-01-27 Thomas Fitzsimmons + + * NEWS: Document EUDC improvements. + 2015-01-26 Lars Ingebrigtsen * publicsuffix.txt: Install an updated version of the file from diff --git a/etc/NEWS b/etc/NEWS index d5baed3..7552778 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -495,6 +495,38 @@ As a result of the above, these commands are now obsolete: `find-tag-other-window', `find-tag-other-frame', `find-tag-regexp', `tags-apropos' and `tags-loop-continue'. +** EUDC +EUDC's LDAP backend has been improved. + +*** EUDC supports LDAP-over-SSL URLs (ldaps://). + +*** EUDC passes LDAP passwords through a pipe to the ldapsearch +subprocess instead of on the command line. + +*** EUDC handles LDAP wildcards automatically so the user shouldn't +need to configure this manually anymore. + +*** The LDAP configuration section of EUDC's manual has been +rewritten. + +There have also been customization changes. + +*** New custom variable `eudc-server-hotlist' to allow specifying +multiple EUDC servers in init file. + +*** Custom variable `eudc-inline-query-format' defaults to completing +on email and firstname instead of surname. + +*** Custom variable `eudc-expansion-overwrites-query' defaults to nil +to avoid interfering with the kill ring. + +*** Custom variable `eudc-inline-expansion-format' defaults to +"Firstname Surname ". + +*** New custom variable `ldap-ldapsearch-password-prompt-regexp' to +allow overriding the regular expression that recognizes the ldapsearch +command line's password prompt. + ** Obsolete packages --- commit 3a546663b9ba5417a3ef4d9094d5975c1e73168c Author: Thomas Fitzsimmons Date: Sun Jan 25 17:54:41 2015 -0500 EUDC: New maintainer * net/eudcb-bbdb.el, net/eudcb-ldap.el, net/eudcb-mab.el, net/eudc-bob.el, net/eudcb-ph.el, net/eudc.el, net/eudc-export.el, net/eudc-hotlist.el, net/eudc-vars.el: New maintainer. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index da9683d..1eafe3c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2015-01-27 Thomas Fitzsimmons + + * net/eudcb-bbdb.el, net/eudcb-ldap.el, net/eudcb-mab.el, + net/eudc-bob.el, net/eudcb-ph.el, net/eudc.el, net/eudc-export.el, + net/eudc-hotlist.el, net/eudc-vars.el: New maintainer. + 2015-01-27 Artur Malabarba * isearch.el (isearch-process-search-char): Add docstring. diff --git a/lisp/net/eudc-bob.el b/lisp/net/eudc-bob.el index 622ea72..f01f671 100644 --- a/lisp/net/eudc-bob.el +++ b/lisp/net/eudc-bob.el @@ -3,7 +3,8 @@ ;; Copyright (C) 1999-2015 Free Software Foundation, Inc. ;; Author: Oscar Figueiredo -;; Maintainer: Pavel Janík +;; Pavel Janík +;; Maintainer: Thomas Fitzsimmons ;; Keywords: comm ;; Package: eudc diff --git a/lisp/net/eudc-export.el b/lisp/net/eudc-export.el index bbdb294..0e54d84 100644 --- a/lisp/net/eudc-export.el +++ b/lisp/net/eudc-export.el @@ -3,7 +3,8 @@ ;; Copyright (C) 1998-2015 Free Software Foundation, Inc. ;; Author: Oscar Figueiredo -;; Maintainer: Pavel Janík +;; Pavel Janík +;; Maintainer: Thomas Fitzsimmons ;; Keywords: comm ;; Package: eudc diff --git a/lisp/net/eudc-hotlist.el b/lisp/net/eudc-hotlist.el index b3c9a6d..7416ad0 100644 --- a/lisp/net/eudc-hotlist.el +++ b/lisp/net/eudc-hotlist.el @@ -3,7 +3,8 @@ ;; Copyright (C) 1998-2015 Free Software Foundation, Inc. ;; Author: Oscar Figueiredo -;; Maintainer: Pavel Janík +;; Pavel Janík +;; Maintainer: Thomas Fitzsimmons ;; Keywords: comm ;; Package: eudc diff --git a/lisp/net/eudc-vars.el b/lisp/net/eudc-vars.el index 29ddf61..36a583d 100644 --- a/lisp/net/eudc-vars.el +++ b/lisp/net/eudc-vars.el @@ -3,7 +3,8 @@ ;; Copyright (C) 1998-2015 Free Software Foundation, Inc. ;; Author: Oscar Figueiredo -;; Maintainer: Pavel Janík +;; Pavel Janík +;; Maintainer: Thomas Fitzsimmons ;; Keywords: comm ;; Package: eudc diff --git a/lisp/net/eudc.el b/lisp/net/eudc.el index 4dd8097..cf5d13f 100644 --- a/lisp/net/eudc.el +++ b/lisp/net/eudc.el @@ -3,7 +3,8 @@ ;; Copyright (C) 1998-2015 Free Software Foundation, Inc. ;; Author: Oscar Figueiredo -;; Maintainer: Pavel Janík +;; Pavel Janík +;; Maintainer: Thomas Fitzsimmons ;; Keywords: comm ;; This file is part of GNU Emacs. diff --git a/lisp/net/eudcb-bbdb.el b/lisp/net/eudcb-bbdb.el index 0400e5b..5be2bec 100644 --- a/lisp/net/eudcb-bbdb.el +++ b/lisp/net/eudcb-bbdb.el @@ -3,7 +3,8 @@ ;; Copyright (C) 1998-2015 Free Software Foundation, Inc. ;; Author: Oscar Figueiredo -;; Maintainer: Pavel Janík +;; Pavel Janík +;; Maintainer: Thomas Fitzsimmons ;; Keywords: comm ;; Package: eudc diff --git a/lisp/net/eudcb-ldap.el b/lisp/net/eudcb-ldap.el index 92972c5..1d426a7 100644 --- a/lisp/net/eudcb-ldap.el +++ b/lisp/net/eudcb-ldap.el @@ -3,7 +3,8 @@ ;; Copyright (C) 1998-2015 Free Software Foundation, Inc. ;; Author: Oscar Figueiredo -;; Maintainer: Pavel Janík +;; Pavel Janík +;; Maintainer: Thomas Fitzsimmons ;; Keywords: comm ;; Package: eudc diff --git a/lisp/net/eudcb-mab.el b/lisp/net/eudcb-mab.el index 81d8f24..a11cd95 100644 --- a/lisp/net/eudcb-mab.el +++ b/lisp/net/eudcb-mab.el @@ -3,7 +3,7 @@ ;; Copyright (C) 2003-2015 Free Software Foundation, Inc. ;; Author: John Wiegley -;; Maintainer: emacs-devel@gnu.org +;; Maintainer: Thomas Fitzsimmons ;; Keywords: comm ;; Package: eudc diff --git a/lisp/net/eudcb-ph.el b/lisp/net/eudcb-ph.el index fc6aad6..1897e0b 100644 --- a/lisp/net/eudcb-ph.el +++ b/lisp/net/eudcb-ph.el @@ -3,7 +3,8 @@ ;; Copyright (C) 1998-2015 Free Software Foundation, Inc. ;; Author: Oscar Figueiredo -;; Maintainer: Pavel Janík +;; Pavel Janík +;; Maintainer: Thomas Fitzsimmons ;; Keywords: comm ;; Package: eudc commit 98715c6c242618e18fa11535b2a36e7cf1b461b1 Author: Artur Malabarba Date: Tue Jan 27 11:39:27 2015 -0200 isearch.el (isearch-process-search-char): Add docstring. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 2b02373..da9683d 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2015-01-27 Artur Malabarba + + * isearch.el (isearch-process-search-char): Add docstring. + 2015-01-27 Oleh Krehel * emacs-lisp/derived.el (define-derived-mode): Declare indent 3. diff --git a/lisp/isearch.el b/lisp/isearch.el index 191ec82..99ca73f 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -2349,6 +2349,8 @@ With argument, add COUNT copies of the character." (isearch-process-search-char char count)))) (defun isearch-process-search-char (char &optional count) + "Add CHAR to the search string, COUNT times. +Search is updated accordingly." ;; * and ? are special in regexps when not preceded by \. ;; } and | are special in regexps when preceded by \. ;; Nothing special for + because it matches at least once. commit 11527553647f61798562f04c50b789edb8c15ac3 Author: Glenn Morris Date: Tue Jan 27 06:19:52 2015 -0500 Auto-commit of loaddefs files. diff --git a/lisp/emacs-lisp/eieio-core.el b/lisp/emacs-lisp/eieio-core.el index 261138b..7492f05 100644 --- a/lisp/emacs-lisp/eieio-core.el +++ b/lisp/emacs-lisp/eieio-core.el @@ -1258,7 +1258,7 @@ method invocation orders of the involved classes." (eieio--class-precedence-list tag)))) -;;;### (autoloads nil "eieio-compat" "eieio-compat.el" "57805f02023795a01567781e70aaf9f9") +;;;### (autoloads nil "eieio-compat" "eieio-compat.el" "b568ffb3c90ed5d0ae673f0051d608ee") ;;; Generated autoloads from eieio-compat.el (autoload 'eieio--defalias "eieio-compat" "\ diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el index 3dba8e0..91469b4 100644 --- a/lisp/emacs-lisp/eieio.el +++ b/lisp/emacs-lisp/eieio.el @@ -942,7 +942,7 @@ Optional argument GROUP is the sub-group of slots to display. ;;;*** -;;;### (autoloads nil "eieio-opt" "eieio-opt.el" "d7b8682e15aebad7dbe6384dc5ed655f") +;;;### (autoloads nil "eieio-opt" "eieio-opt.el" "b849f8bf1312d5ef57e53d02173e4b5a") ;;; Generated autoloads from eieio-opt.el (autoload 'eieio-browse "eieio-opt" "\ commit 2c3b05c93e4884460068a12357ebd04ae4cd7446 Author: Oleh Krehel Date: Tue Jan 27 10:48:40 2015 +0100 lisp/emacs-lisp/derived.el (define-derived-mode): Declare indent 3. Now, e.g. `indent-sexp' will produce: (define-derived-mode outline-mode text-mode "Outline" "Set ...") instead of: (define-derived-mode outline-mode text-mode "Outline" "Set ...") diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 16cb21d..2b02373 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2015-01-27 Oleh Krehel + + * emacs-lisp/derived.el (define-derived-mode): Declare indent 3. + 2015-01-27 Katsumi Yamaoka * emacs-lisp/cl.el (cl--function-convert): Run cl--labels-convert diff --git a/lisp/emacs-lisp/derived.el b/lisp/emacs-lisp/derived.el index a250ea6..52da4c9 100644 --- a/lisp/emacs-lisp/derived.el +++ b/lisp/emacs-lisp/derived.el @@ -162,7 +162,8 @@ The new mode runs the hook constructed by the function See Info node `(elisp)Derived Modes' for more details." (declare (debug (&define name symbolp sexp [&optional stringp] [&rest keywordp sexp] def-body)) - (doc-string 4)) + (doc-string 4) + (indent 3)) (when (and docstring (not (stringp docstring))) ;; Some trickiness, since what appears to be the docstring may really be commit 589094a48966583f6b428d89807f504f5401b4ed Author: Paul Eggert Date: Mon Jan 26 22:34:25 2015 -0800 Port autogen.sh hook creation to Apple Git * autogen.sh: Do not assume that the hook samples exist. This ports to git version 1.9.3 (Apple Git-50). For some reason Apple decided to populate the git hooks directory in a different way from the way that standard Git does it. The downside is that patch applications won't be checked on Apple, but that's better than autogen.sh failing. Problem reported by Sam Steingold in: http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00898.html diff --git a/ChangeLog b/ChangeLog index 2ab8235..09a7968 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2015-01-27 Paul Eggert + + Port autogen.sh hook creation to Apple Git + * autogen.sh: Do not assume that the hook samples exist. + This ports to git version 1.9.3 (Apple Git-50). + For some reason Apple decided to populate the git hooks directory + in a different way from the way that standard Git does it. + The downside is that patch applications won't be checked on Apple, + but that's better than autogen.sh failing. + Problem reported by Sam Steingold in: + http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00898.html + 2015-01-26 Paul Eggert * INSTALL.REPO: Mention minimum Git version. diff --git a/autogen.sh b/autogen.sh index c3ae1d7..bc9c5a0 100755 --- a/autogen.sh +++ b/autogen.sh @@ -226,6 +226,7 @@ if test -d .git/hooks; then tailored_hooks="$tailored_hooks $hook" done for hook in applypatch-msg pre-applypatch; do + test ! -r .git/hooks/$hook.sample || cmp .git/hooks/$hook.sample .git/hooks/$hook >/dev/null 2>&1 || sample_hooks="$sample_hooks $hook" done commit b28c81bcf2c00b282cd7f25bf784563e181fc70c Author: Lars Magne Ingebrigtsen Date: Tue Jan 27 06:06:43 2015 +0000 lisp/gnus/nnir.el Check for literal+ capability in IMAP diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 0d105a9..7bf4a6e 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,8 @@ +2015-01-27 Lars Ingebrigtsen + + * nnir.el (nnir-imap-expr-to-imap): Check for literal+ capability in + IMAP. + 2015-01-27 Eric Abrahamsen * nnir.el (nnir-run-imap): Enable non-ASCII IMAP searches. diff --git a/lisp/gnus/nnir.el b/lisp/gnus/nnir.el index dcb69aa..6d111e8 100644 --- a/lisp/gnus/nnir.el +++ b/lisp/gnus/nnir.el @@ -1069,29 +1069,30 @@ In future the following will be added to the language: (defun nnir-imap-expr-to-imap (criteria expr) "Convert EXPR into an IMAP search expression on CRITERIA" ;; What sort of expression is this, eh? - (cond - ;; Simple string term - ((stringp expr) - (format "%s %S" criteria expr)) - ;; Trivial term: and - ((eq expr 'and) nil) - ;; Composite term: or expression - ((eq (car-safe expr) 'or) - (format "OR %s %s" - (nnir-imap-expr-to-imap criteria (second expr)) - (nnir-imap-expr-to-imap criteria (third expr)))) - ;; Composite term: just the fax, mam - ((eq (car-safe expr) 'not) - (format "NOT (%s)" (nnir-imap-query-to-imap criteria (rest expr)))) - ;; Composite term: non-ascii search term - ((numberp (car-safe expr)) - (format "%s {%d%s}\n%s" criteria (car expr) - (if literal+ "+" "") (second expr))) - ;; Composite term: just expand it all. - ((and (not (null expr)) (listp expr)) - (format "(%s)" (nnir-imap-query-to-imap criteria expr))) - ;; Complex value, give up for now. - (t (error "Unhandled input: %S" expr)))) + (let ((literal+ (nnimap-capability "LITERAL+"))) + (cond + ;; Simple string term + ((stringp expr) + (format "%s %S" criteria expr)) + ;; Trivial term: and + ((eq expr 'and) nil) + ;; Composite term: or expression + ((eq (car-safe expr) 'or) + (format "OR %s %s" + (nnir-imap-expr-to-imap criteria (second expr)) + (nnir-imap-expr-to-imap criteria (third expr)))) + ;; Composite term: just the fax, mam + ((eq (car-safe expr) 'not) + (format "NOT (%s)" (nnir-imap-query-to-imap criteria (rest expr)))) + ;; Composite term: non-ascii search term + ((numberp (car-safe expr)) + (format "%s {%d%s}\n%s" criteria (car expr) + (if literal+ "+" "") (second expr))) + ;; Composite term: just expand it all. + ((and (not (null expr)) (listp expr)) + (format "(%s)" (nnir-imap-query-to-imap criteria expr))) + ;; Complex value, give up for now. + (t (error "Unhandled input: %S" expr))))) (defun nnir-imap-parse-query (string) commit 4f2ca8e5506de6f5be92bf50c45d5ed3987b5458 Author: Eric Abrahamsen Date: Tue Jan 27 05:46:15 2015 +0000 lisp/gnus/nnir.el (nnir-run-imap): Enable non-ASCII IMAP searches diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index b4c5cea..0d105a9 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,5 +1,7 @@ 2015-01-27 Eric Abrahamsen + * nnir.el (nnir-run-imap): Enable non-ASCII IMAP searches. + * nnmairix.el ("nnmairix"): Declare nnmairix as virtual. * gnus-bcklg.el (gnus-backlog-enter-article): No virtual groups should diff --git a/lisp/gnus/nnir.el b/lisp/gnus/nnir.el index 08ca7c7..dcb69aa 100644 --- a/lisp/gnus/nnir.el +++ b/lisp/gnus/nnir.el @@ -284,6 +284,8 @@ is `(valuefunc member)'." (eval-when-compile (autoload 'nnimap-buffer "nnimap") (autoload 'nnimap-command "nnimap") + (autoload 'nnimap-capability "nnimap") + (autoload 'nnimap-wait-for-line "nnimap") (autoload 'nnimap-change-group "nnimap") (autoload 'nnimap-make-thread-query "nnimap") (autoload 'gnus-registry-action "gnus-registry") @@ -968,33 +970,52 @@ details on the language and supported extensions." (catch 'found (mapcar #'(lambda (group) - (let (artlist) - (condition-case () - (when (nnimap-change-group - (gnus-group-short-name group) server) - (with-current-buffer (nnimap-buffer) - (message "Searching %s..." group) - (let ((arts 0) - (result (nnimap-command "UID SEARCH %s" - (if (string= criteria "") - qstring - (nnir-imap-make-query - criteria qstring))))) - (mapc - (lambda (artnum) - (let ((artn (string-to-number artnum))) - (when (> artn 0) - (push (vector group artn 100) - artlist) - (when (assq 'shortcut query) - (throw 'found (list artlist))) - (setq arts (1+ arts))))) - (and (car result) - (cdr (assoc "SEARCH" (cdr result))))) - (message "Searching %s... %d matches" group arts))) - (message "Searching %s...done" group)) - (quit nil)) - (nreverse artlist))) + (let (artlist) + (condition-case () + (when (nnimap-change-group + (gnus-group-short-name group) server) + (with-current-buffer (nnimap-buffer) + (message "Searching %s..." group) + (let* ((arts 0) + (literal+ (nnimap-capability "LITERAL+")) + (search (split-string + (if (string= criteria "") + qstring + (nnir-imap-make-query + criteria qstring)) + "\n")) + (coding (upcase + (replace-regexp-in-string + "-\\(unix\\|dos\\|mac\\)" "" + (symbol-name + (cdr default-process-coding-system))))) + call result) + (setq call (nnimap-send-command + "UID SEARCH CHARSET %s %s" coding (pop search))) + (while search ; Non-ascii search terms + (unless literal+ + (nnimap-wait-for-line "^\\+\\(.*\\)\n")) + (process-send-string (get-buffer-process (current-buffer)) (pop search)) + (process-send-string (get-buffer-process (current-buffer)) + (if (nnimap-newlinep nnimap-object) + "\n" + "\r\n"))) + (setq result (nnimap-get-response call)) + (mapc + (lambda (artnum) + (let ((artn (string-to-number artnum))) + (when (> artn 0) + (push (vector group artn 100) + artlist) + (when (assq 'shortcut query) + (throw 'found (list artlist))) + (setq arts (1+ arts))))) + (and (car result) + (cdr (assoc "SEARCH" (cdr result))))) + (message "Searching %s... %d matches" group arts))) + (message "Searching %s...done" group)) + (quit nil)) + (nreverse artlist))) groups)))))) (defun nnir-imap-make-query (criteria qstring) @@ -1062,6 +1083,10 @@ In future the following will be added to the language: ;; Composite term: just the fax, mam ((eq (car-safe expr) 'not) (format "NOT (%s)" (nnir-imap-query-to-imap criteria (rest expr)))) + ;; Composite term: non-ascii search term + ((numberp (car-safe expr)) + (format "%s {%d%s}\n%s" criteria (car expr) + (if literal+ "+" "") (second expr))) ;; Composite term: just expand it all. ((and (not (null expr)) (listp expr)) (format "(%s)" (nnir-imap-query-to-imap criteria expr))) @@ -1108,6 +1133,11 @@ that the search language can then understand and use." ((eq term 'and) 'and) ;; negated term ((eq term 'not) (list 'not (nnir-imap-next-expr))) + ;; non-ascii search string + ((and (stringp term) + (not (= (string-bytes term) + (length term)))) + (list (string-bytes term) term)) ;; generic term (t term)))) commit 9e0866e1219b7e49393014fe5d050603d885b111 Author: Eric Abrahamsen Date: Tue Jan 27 05:45:12 2015 +0000 [Gnus] Make nnmairix always select the correct article diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 2f3f375..b4c5cea 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,10 @@ +2015-01-27 Eric Abrahamsen + + * nnmairix.el ("nnmairix"): Declare nnmairix as virtual. + + * gnus-bcklg.el (gnus-backlog-enter-article): No virtual groups should + be added to the backlog. + 2015-01-26 Trevor Murphy * nnimap.el (nnimap-header-parameters): Refactor and request diff --git a/lisp/gnus/gnus-bcklg.el b/lisp/gnus/gnus-bcklg.el index b26f367..e0c457a 100644 --- a/lisp/gnus/gnus-bcklg.el +++ b/lisp/gnus/gnus-bcklg.el @@ -61,7 +61,7 @@ (defun gnus-backlog-enter-article (group number buffer) (when (and (numberp number) - (not (string-match "^nnvirtual" group))) + (not (gnus-virtual-group-p group))) (gnus-backlog-setup) (let ((ident (intern (concat group ":" (int-to-string number)) gnus-backlog-hashtb)) @@ -126,7 +126,7 @@ (defun gnus-backlog-request-article (group number &optional buffer) (when (and (numberp number) - (not (string-match "^nnvirtual" group))) + (not (gnus-virtual-group-p group))) (gnus-backlog-setup) (let ((ident (intern (concat group ":" (int-to-string number)) gnus-backlog-hashtb)) diff --git a/lisp/gnus/nnmairix.el b/lisp/gnus/nnmairix.el index 5a01ce8..96b40e5 100644 --- a/lisp/gnus/nnmairix.el +++ b/lisp/gnus/nnmairix.el @@ -417,7 +417,7 @@ Other back ends might or might not work.") (nnoo-define-basics nnmairix) -(gnus-declare-backend "nnmairix" 'mail 'address) +(gnus-declare-backend "nnmairix" 'mail 'address 'virtual) (deffoo nnmairix-open-server (server &optional definitions) ;; just set server variables commit fd4e65e4ae76eb59a990fc72bce791a50e494338 Author: Fabián Ezequiel Gallina Date: Tue Jan 27 00:35:07 2015 -0300 Added missing test for previous commit diff --git a/test/automated/python-tests.el b/test/automated/python-tests.el index 5b77a1d..5bddfe8 100644 --- a/test/automated/python-tests.el +++ b/test/automated/python-tests.el @@ -2089,6 +2089,23 @@ def f(): (python-nav-backward-up-list) (should (looking-at "def f():")))) +(ert-deftest python-indent-dedent-line-backspace-1 () + "Check de-indentation on first call. Bug#18319." + (python-tests-with-temp-buffer + " +if True: + x () + if False: +" + (python-tests-look-at "if False:") + (call-interactively #'python-indent-dedent-line-backspace) + (should (zerop (current-indentation))) + ;; XXX: This should be a call to `undo' but it's triggering errors. + (insert " ") + (should (= (current-indentation) 4)) + (call-interactively #'python-indent-dedent-line-backspace) + (should (zerop (current-indentation))))) + ;;; Shell integration commit de925ab19d1f5f62057d2ce5120f8efd3dc15174 Author: Katsumi Yamaoka Date: Tue Jan 27 03:25:16 2015 +0000 lisp/ChangeLog (2015-01-27): Add bug# diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 96b7f63..16cb21d 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,7 +1,8 @@ 2015-01-27 Katsumi Yamaoka * emacs-lisp/cl.el (cl--function-convert): Run cl--labels-convert - for the case cl-flet or cl-labels form is wrapped with lexical-let. + for the case cl-flet or cl-labels form is wrapped with lexical-let + (bug#19613). 2015-01-26 Stefan Monnier commit 5485e3e5b28f82b46d139c63b8ab77ed1d7d61c9 Author: Fabián Ezequiel Gallina Date: Tue Jan 27 00:17:24 2015 -0300 python.el: New non-global state dependent indentation engine. Fixes: debbugs:18319 Fixes: debbugs:19595 * lisp/progmodes/python.el (python-syntax-comment-or-string-p): Accept PPSS as argument. (python-syntax-closing-paren-p): New function. (python-indent-current-level) (python-indent-levels): Mark obsolete. (python-indent-context): Return more context cases. (python-indent--calculate-indentation) (python-indent--calculate-levels): New functions. (python-indent-calculate-levels): Use them. (python-indent-calculate-indentation, python-indent-line): (python-indent-line-function): Rewritten to use new API. (python-indent-dedent-line): Simplify logic. (python-indent-dedent-line-backspace): Use `unless`. (python-indent-toggle-levels): Delete function. * test/automated/python-tests.el (python-indent-pep8-1) (python-indent-pep8-2, python-indent-pep8-3) (python-indent-after-comment-1, python-indent-after-comment-2) (python-indent-inside-paren-1, python-indent-inside-paren-2) (python-indent-after-block-1, python-indent-after-block-2) (python-indent-after-backslash-1, python-indent-after-backslash-2) (python-indent-after-backslash-3, python-indent-block-enders-1) (python-indent-block-enders-2, python-indent-block-enders-3) (python-indent-block-enders-4, python-indent-block-enders-5) (python-indent-dedenters-1, python-indent-dedenters-2) (python-indent-dedenters-3, python-indent-dedenters-4) (python-indent-dedenters-5, python-indent-dedenters-6) (python-indent-dedenters-7, python-indent-dedenters-8): Fix tests. (python-indent-base-case, python-indent-after-block-3) (python-indent-after-backslash-5, python-indent-inside-paren-3) (python-indent-inside-paren-4, python-indent-inside-paren-5) (python-indent-inside-paren-6, python-indent-inside-string-1) (python-indent-inside-string-2, python-indent-inside-string-3) (python-indent-dedent-line-backspace-1): New Tests. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a2467e6..b3bedaa 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,23 @@ +2015-01-26 Fabián Ezequiel Gallina + + python.el: New non-global state dependent indentation engine. + (Bug#18319, Bug#19595) + + * progmodes/python.el (python-syntax-comment-or-string-p): Accept + PPSS as argument. + (python-syntax-closing-paren-p): New function. + (python-indent-current-level) + (python-indent-levels): Mark obsolete. + (python-indent-context): Return more context cases. + (python-indent--calculate-indentation) + (python-indent--calculate-levels): New functions. + (python-indent-calculate-levels): Use them. + (python-indent-calculate-indentation, python-indent-line): + (python-indent-line-function): Rewritten to use new API. + (python-indent-dedent-line): Simplify logic. + (python-indent-dedent-line-backspace): Use `unless`. + (python-indent-toggle-levels): Delete function. + 2015-01-22 Wolfgang Jenkner * calc/calc-units.el (math-units-in-expr-p) diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 833c3d9..d0a8308 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -447,9 +447,14 @@ The type returned can be `comment', `string' or `paren'." ((nth 8 ppss) (if (nth 4 ppss) 'comment 'string)) ((nth 1 ppss) 'paren)))) -(defsubst python-syntax-comment-or-string-p () - "Return non-nil if point is inside 'comment or 'string." - (nth 8 (syntax-ppss))) +(defsubst python-syntax-comment-or-string-p (&optional ppss) + "Return non-nil if PPSS is inside 'comment or 'string." + (nth 8 (or ppss (syntax-ppss)))) + +(defsubst python-syntax-closing-paren-p () + "Return non-nil if char after point is a closing paren." + (= (syntax-class (syntax-after (point))) + (syntax-class (string-to-syntax ")")))) (define-obsolete-function-alias 'python-info-ppss-context #'python-syntax-context "24.3") @@ -671,10 +676,28 @@ It makes underscores and dots word constituent chars.") 'python-guess-indent 'python-indent-guess-indent-offset "24.3") (defvar python-indent-current-level 0 - "Current indentation level `python-indent-line-function' is using.") + "Deprecated var available for compatibility.") (defvar python-indent-levels '(0) - "Levels of indentation available for `python-indent-line-function'.") + "Deprecated var available for compatibility.") + +(make-obsolete-variable + 'python-indent-current-level + "The indentation API changed to avoid global state. +The function `python-indent-calculate-levels' does not use it +anymore. If you were defadvising it and or depended on this +variable for indentation customizations, refactor your code to +work on `python-indent-calculate-indentation' instead." + "24.5") + +(make-obsolete-variable + 'python-indent-levels + "The indentation API changed to avoid global state. +The function `python-indent-calculate-levels' does not use it +anymore. If you were defadvising it and or depended on this +variable for indentation customizations, refactor your code to +work on `python-indent-calculate-indentation' instead." + "24.5") (defun python-indent-guess-indent-offset () "Guess and set `python-indent-offset' for the current buffer." @@ -714,356 +737,358 @@ It makes underscores and dots word constituent chars.") python-indent-offset))))))) (defun python-indent-context () - "Get information on indentation context. -Context information is returned with a cons with the form: - (STATUS . START) - -Where status can be any of the following symbols: - - * after-comment: When current line might continue a comment block - * inside-paren: If point in between (), {} or [] - * inside-string: If point is inside a string - * after-backslash: Previous line ends in a backslash - * after-beginning-of-block: Point is after beginning of block - * after-line: Point is after normal line - * dedenter-statement: Point is on a dedenter statement. - * no-indent: Point is at beginning of buffer or other special case -START is the buffer position where the sexp starts." + "Get information about the current indentation context. +Context is returned in a cons with the form (STATUS . START). + +STATUS can be one of the following: + +keyword +------- + +:after-comment + - Point is after a comment line. + - START is the position of the \"#\" character. +:inside-string + - Point is inside string. + - START is the position of the first quote that starts it. +:no-indent + - No possible indentation case matches. + - START is always zero. + +:inside-paren + - Fallback case when point is inside paren. + - START is the first non space char position *after* the open paren. +:inside-paren-at-closing-nested-paren + - Point is on a line that contains a nested paren closer. + - START is the position of the open paren it closes. +:inside-paren-at-closing-paren + - Point is on a line that contains a paren closer. + - START is the position of the open paren. +:inside-paren-newline-start + - Point is inside a paren with items starting in their own line. + - START is the position of the open paren. +:inside-paren-newline-start-from-block + - Point is inside a paren with items starting in their own line + from a block start. + - START is the position of the open paren. + +:after-backslash + - Fallback case when point is after backslash. + - START is the char after the position of the backslash. +:after-backslash-assignment-continuation + - Point is after a backslashed assignment. + - START is the char after the position of the backslash. +:after-backslash-block-continuation + - Point is after a backslashed block continuation. + - START is the char after the position of the backslash. +:after-backslash-dotted-continuation + - Point is after a backslashed dotted continuation. Previous + line must contain a dot to align with. + - START is the char after the position of the backslash. +:after-backslash-first-line + - First line following a backslashed continuation. + - START is the char after the position of the backslash. + +:after-block-end + - Point is after a line containing a block ender. + - START is the position where the ender starts. +:after-block-start + - Point is after a line starting a block. + - START is the position where the block starts. +:after-line + - Point is after a simple line. + - START is the position where the previous line starts. +:at-dedenter-block-start + - Point is on a line starting a dedenter block. + - START is the position where the dedenter block starts." (save-restriction (widen) - (let ((ppss (save-excursion (beginning-of-line) (syntax-ppss))) - (start)) - (cons - (cond - ;; Beginning of buffer - ((save-excursion - (goto-char (line-beginning-position)) - (bobp)) - 'no-indent) - ;; Comment continuation - ((save-excursion - (when (and - (or - (python-info-current-line-comment-p) - (python-info-current-line-empty-p)) - (progn - (forward-comment -1) - (python-info-current-line-comment-p))) - (setq start (point)) - 'after-comment))) - ;; Inside string - ((setq start (python-syntax-context 'string ppss)) - 'inside-string) - ;; Inside a paren - ((setq start (python-syntax-context 'paren ppss)) - 'inside-paren) - ;; After backslash - ((setq start (when (not (or (python-syntax-context 'string ppss) - (python-syntax-context 'comment ppss))) - (let ((line-beg-pos (line-number-at-pos))) - (python-info-line-ends-backslash-p - (1- line-beg-pos))))) - 'after-backslash) - ;; After beginning of block - ((setq start (save-excursion - (when (progn - (back-to-indentation) - (python-util-forward-comment -1) - (equal (char-before) ?:)) - ;; Move to the first block start that's not in within - ;; a string, comment or paren and that's not a - ;; continuation line. - (while (and (re-search-backward - (python-rx block-start) nil t) - (or - (python-syntax-context-type) - (python-info-continuation-line-p)))) - (when (looking-at (python-rx block-start)) - (point-marker))))) - 'after-beginning-of-block) - ((when (setq start (python-info-dedenter-statement-p)) - 'dedenter-statement)) - ;; After normal line - ((setq start (save-excursion + (let ((ppss (save-excursion + (beginning-of-line) + (syntax-ppss)))) + (cond + ;; Beginning of buffer. + ((= (line-number-at-pos) 1) + (cons :no-indent 0)) + ;; Comment continuation (maybe). + ((save-excursion + (when (and + (or + (python-info-current-line-comment-p) + (python-info-current-line-empty-p)) + (forward-comment -1) + (python-info-current-line-comment-p)) + (cons :after-comment (point))))) + ;; Inside a string. + ((let ((start (python-syntax-context 'string ppss))) + (when start + (cons :inside-string start)))) + ;; Inside a paren. + ((let* ((start (python-syntax-context 'paren ppss)) + (starts-in-newline + (when start + (save-excursion + (goto-char start) + (forward-char) + (not + (= (line-number-at-pos) + (progn + (python-util-forward-comment) + (line-number-at-pos)))))))) + (when start + (cond + ;; Current line only holds the closing paren. + ((save-excursion + (skip-syntax-forward " ") + (when (and (python-syntax-closing-paren-p) + (progn + (forward-char 1) + (not (python-syntax-context 'paren)))) + (cons :inside-paren-at-closing-paren start)))) + ;; Current line only holds a closing paren for nested. + ((save-excursion + (back-to-indentation) + (python-syntax-closing-paren-p)) + (cons :inside-paren-at-closing-nested-paren start)) + ;; This line starts from a opening block in its own line. + ((save-excursion + (goto-char start) + (when (and + starts-in-newline + (save-excursion + (back-to-indentation) + (looking-at (python-rx block-start)))) + (cons + :inside-paren-newline-start-from-block start)))) + (starts-in-newline + (cons :inside-paren-newline-start start)) + ;; General case. + (t (cons :inside-paren + (save-excursion + (goto-char (1+ start)) + (skip-syntax-forward "(" 1) + (skip-syntax-forward " ") + (point)))))))) + ;; After backslash. + ((let ((start (when (not (python-syntax-comment-or-string-p ppss)) + (python-info-line-ends-backslash-p + (1- (line-number-at-pos)))))) + (when start + (cond + ;; Continuation of dotted expression. + ((save-excursion + (back-to-indentation) + (when (eq (char-after) ?\.) + ;; Move point back until it's not inside a paren. + (while (prog2 + (forward-line -1) + (and (not (bobp)) + (python-syntax-context 'paren)))) + (goto-char (line-end-position)) + (while (and (search-backward + "." (line-beginning-position) t) + (python-syntax-context-type))) + ;; Ensure previous statement has dot to align with. + (when (and (eq (char-after) ?\.) + (not (python-syntax-context-type))) + (cons :after-backslash-dotted-continuation (point)))))) + ;; Continuation of block definition. + ((let ((block-continuation-start + (python-info-block-continuation-line-p))) + (when block-continuation-start + (save-excursion + (goto-char block-continuation-start) + (re-search-forward + (python-rx block-start (* space)) + (line-end-position) t) + (cons :after-backslash-block-continuation (point)))))) + ;; Continuation of assignment. + ((let ((assignment-continuation-start + (python-info-assignment-continuation-line-p))) + (when assignment-continuation-start + (save-excursion + (goto-char assignment-continuation-start) + (cons :after-backslash-assignment-continuation (point)))))) + ;; First line after backslash continuation start. + ((save-excursion + (goto-char start) + (when (or (= (line-number-at-pos) 1) + (not (python-info-beginning-of-backslash + (1- (line-number-at-pos))))) + (cons :after-backslash-first-line start)))) + ;; General case. + (t (cons :after-backslash start)))))) + ;; After beginning of block. + ((let ((start (save-excursion + (back-to-indentation) + (python-util-forward-comment -1) + (when (equal (char-before) ?:) + (python-nav-beginning-of-block))))) + (when start + (cons :after-block-start start)))) + ;; At dedenter statement. + ((let ((start (python-info-dedenter-statement-p))) + (when start + (cons :at-dedenter-block-start start)))) + ;; After normal line. + ((let ((start (save-excursion (back-to-indentation) - (skip-chars-backward (rx (or whitespace ?\n))) + (skip-chars-backward " \t\n") (python-nav-beginning-of-statement) - (point-marker))) - 'after-line) - ;; Do not indent - (t 'no-indent)) - start)))) - -(defun python-indent-calculate-indentation () - "Calculate correct indentation offset for the current line." - (let* ((indentation-context (python-indent-context)) - (context-status (car indentation-context)) - (context-start (cdr indentation-context))) - (save-restriction - (widen) - (save-excursion - (pcase context-status - (`no-indent 0) - (`after-comment - (goto-char context-start) - (current-indentation)) - ;; When point is after beginning of block just add one level - ;; of indentation relative to the context-start - (`after-beginning-of-block - (goto-char context-start) - (+ (current-indentation) python-indent-offset)) - ;; When after a simple line just use previous line - ;; indentation. - (`after-line - (let* ((pair (save-excursion - (goto-char context-start) - (cons - (current-indentation) - (python-info-beginning-of-block-p)))) - (context-indentation (car pair)) - ;; TODO: Separate block enders into its own case. - (adjustment - (if (save-excursion - (python-util-forward-comment -1) - (python-nav-beginning-of-statement) - (looking-at (python-rx block-ender))) - python-indent-offset - 0))) - (- context-indentation adjustment))) - ;; When point is on a dedenter statement, search for the - ;; opening block that corresponds to it and use its - ;; indentation. If no opening block is found just remove - ;; indentation as this is an invalid python file. - (`dedenter-statement - (let ((block-start-point - (python-info-dedenter-opening-block-position))) - (save-excursion - (if (not block-start-point) - 0 - (goto-char block-start-point) - (current-indentation))))) - ;; When inside of a string, do nothing. just use the current - ;; indentation. XXX: perhaps it would be a good idea to - ;; invoke standard text indentation here - (`inside-string - (goto-char context-start) - (current-indentation)) - ;; After backslash we have several possibilities. - (`after-backslash - (cond - ;; Check if current line is a dot continuation. For this - ;; the current line must start with a dot and previous - ;; line must contain a dot too. - ((save-excursion - (back-to-indentation) - (when (looking-at "\\.") - ;; If after moving one line back point is inside a paren it - ;; needs to move back until it's not anymore - (while (prog2 - (forward-line -1) - (and (not (bobp)) - (python-syntax-context 'paren)))) - (goto-char (line-end-position)) - (while (and (re-search-backward - "\\." (line-beginning-position) t) - (python-syntax-context-type))) - (if (and (looking-at "\\.") - (not (python-syntax-context-type))) - ;; The indentation is the same column of the - ;; first matching dot that's not inside a - ;; comment, a string or a paren - (current-column) - ;; No dot found on previous line, just add another - ;; indentation level. - (+ (current-indentation) python-indent-offset))))) - ;; Check if prev line is a block continuation - ((let ((block-continuation-start - (python-info-block-continuation-line-p))) - (when block-continuation-start - ;; If block-continuation-start is set jump to that - ;; marker and use first column after the block start - ;; as indentation value. - (goto-char block-continuation-start) - (re-search-forward - (python-rx block-start (* space)) - (line-end-position) t) - (current-column)))) - ;; Check if current line is an assignment continuation - ((let ((assignment-continuation-start - (python-info-assignment-continuation-line-p))) - (when assignment-continuation-start - ;; If assignment-continuation is set jump to that - ;; marker and use first column after the assignment - ;; operator as indentation value. - (goto-char assignment-continuation-start) - (current-column)))) - (t - (forward-line -1) - (goto-char (python-info-beginning-of-backslash)) - (if (save-excursion - (and - (forward-line -1) - (goto-char - (or (python-info-beginning-of-backslash) (point))) - (python-info-line-ends-backslash-p))) - ;; The two previous lines ended in a backslash so we must - ;; respect previous line indentation. - (current-indentation) - ;; What happens here is that we are dealing with the second - ;; line of a backslash continuation, in that case we just going - ;; to add one indentation level. - (+ (current-indentation) python-indent-offset))))) - ;; When inside a paren there's a need to handle nesting - ;; correctly - (`inside-paren - (cond - ;; If current line closes the outermost open paren use the - ;; current indentation of the context-start line. - ((save-excursion - (skip-syntax-forward "\s" (line-end-position)) - (when (and (looking-at (regexp-opt '(")" "]" "}"))) - (progn - (forward-char 1) - (not (python-syntax-context 'paren)))) - (goto-char context-start) - (current-indentation)))) - ;; If open paren is contained on a line by itself add another - ;; indentation level, else look for the first word after the - ;; opening paren and use it's column position as indentation - ;; level. - ((let* ((content-starts-in-newline) - (indent - (save-excursion - (if (setq content-starts-in-newline - (progn - (goto-char context-start) - (forward-char) - (save-restriction - (narrow-to-region - (line-beginning-position) - (line-end-position)) - (python-util-forward-comment)) - (looking-at "$"))) - (+ (current-indentation) python-indent-offset) - (current-column))))) - ;; Adjustments - (cond - ;; If current line closes a nested open paren de-indent one - ;; level. - ((progn - (back-to-indentation) - (looking-at (regexp-opt '(")" "]" "}")))) - (- indent python-indent-offset)) - ;; If the line of the opening paren that wraps the current - ;; line starts a block add another level of indentation to - ;; follow new pep8 recommendation. See: http://ur1.ca/5rojx - ((save-excursion - (when (and content-starts-in-newline - (progn - (goto-char context-start) - (back-to-indentation) - (looking-at (python-rx block-start)))) - (+ indent python-indent-offset)))) - (t indent))))))))))) - -(defun python-indent-calculate-levels () - "Calculate `python-indent-levels' and reset `python-indent-current-level'." - (if (or (python-info-continuation-line-p) - (not (python-info-dedenter-statement-p))) - ;; XXX: This asks for a refactor. Even if point is on a - ;; dedenter statement, it could be multiline and in that case - ;; the continuation lines should be indented with normal rules. - (let* ((indentation (python-indent-calculate-indentation)) - (remainder (% indentation python-indent-offset)) - (steps (/ (- indentation remainder) python-indent-offset))) - (setq python-indent-levels (list 0)) - (dotimes (step steps) - (push (* python-indent-offset (1+ step)) python-indent-levels)) - (when (not (eq 0 remainder)) - (push (+ (* python-indent-offset steps) remainder) python-indent-levels))) - (setq python-indent-levels - (or - (mapcar (lambda (pos) - (save-excursion - (goto-char pos) - (current-indentation))) - (python-info-dedenter-opening-block-positions)) - (list 0)))) - (setq python-indent-current-level (1- (length python-indent-levels)) - python-indent-levels (nreverse python-indent-levels))) - -(defun python-indent-toggle-levels () - "Toggle `python-indent-current-level' over `python-indent-levels'." - (setq python-indent-current-level (1- python-indent-current-level)) - (when (< python-indent-current-level 0) - (setq python-indent-current-level (1- (length python-indent-levels))))) - -(defun python-indent-line (&optional force-toggle) + (point)))) + (when start + (if (save-excursion + (python-util-forward-comment -1) + (python-nav-beginning-of-statement) + (looking-at (python-rx block-ender))) + (cons :after-block-end start) + (cons :after-line start))))) + ;; Default case: do not indent. + (t (cons :no-indent 0)))))) + +(defun python-indent--calculate-indentation () + "Internal implementation of `python-indent-calculate-indentation'. +May return an integer for the maximum possible indentation at +current context or a list of integers. The latter case is only +happening for :at-dedenter-block-start context since the +possibilities can be narrowed to especific indentation points." + (save-restriction + (widen) + (save-excursion + (pcase (python-indent-context) + (`(:no-indent . ,_) 0) + (`(,(or :after-line + :after-comment + :inside-string + :after-backslash + :inside-paren-at-closing-paren + :inside-paren-at-closing-nested-paren) . ,start) + ;; Copy previous indentation. + (goto-char start) + (current-indentation)) + (`(,(or :after-block-start + :after-backslash-first-line + :inside-paren-newline-start) . ,start) + ;; Add one indentation level. + (goto-char start) + (+ (current-indentation) python-indent-offset)) + (`(,(or :inside-paren + :after-backslash-block-continuation + :after-backslash-assignment-continuation + :after-backslash-dotted-continuation) . ,start) + ;; Use the column given by the context. + (goto-char start) + (current-column)) + (`(:after-block-end . ,start) + ;; Subtract one indentation level. + (goto-char start) + (- (current-indentation) python-indent-offset)) + (`(:at-dedenter-block-start . ,_) + ;; List all possible indentation levels from opening blocks. + (let ((opening-block-start-points + (python-info-dedenter-opening-block-positions))) + (if (not opening-block-start-points) + 0 ; if not found default to first column + (mapcar (lambda (pos) + (save-excursion + (goto-char pos) + (current-indentation))) + opening-block-start-points)))) + (`(,(or :inside-paren-newline-start-from-block) . ,start) + ;; Add two indentation levels to make the suite stand out. + (goto-char start) + (+ (current-indentation) (* python-indent-offset 2))))))) + +(defun python-indent--calculate-levels (indentation) + "Calculate levels list given INDENTATION. +Argument INDENTATION can either be an integer or a list of +integers. Levels are returned in ascending order, and in the +case INDENTATION is a list, this order is enforced." + (if (listp indentation) + (sort (copy-sequence indentation) #'<) + (let* ((remainder (% indentation python-indent-offset)) + (steps (/ (- indentation remainder) python-indent-offset)) + (levels (mapcar (lambda (step) + (* python-indent-offset step)) + (number-sequence steps 0 -1)))) + (reverse + (if (not (zerop remainder)) + (cons indentation levels) + levels))))) + +(defun python-indent--previous-level (levels indentation) + "Return previous level from LEVELS relative to INDENTATION." + (let* ((levels (sort (copy-sequence levels) #'>)) + (default (car levels))) + (catch 'return + (dolist (level levels) + (when (funcall #'< level indentation) + (throw 'return level))) + default))) + +(defun python-indent-calculate-indentation (&optional previous) + "Calculate indentation. +Get indentation of PREVIOUS level when argument is non-nil. +Return the max level of the cycle when indentation reaches the +minimum." + (let* ((indentation (python-indent--calculate-indentation)) + (levels (python-indent--calculate-levels indentation))) + (if previous + (python-indent--previous-level levels (current-indentation)) + (apply #'max levels)))) + +(defun python-indent-line (&optional previous) "Internal implementation of `python-indent-line-function'. -Uses the offset calculated in -`python-indent-calculate-indentation' and available levels -indicated by the variable `python-indent-levels' to set the -current indentation. +Use the PREVIOUS level when argument is non-nil, otherwise indent +to the maxium available level. When indentation is the minimum +possible and PREVIOUS is non-nil, cycle back to the maximum +level." + (let ((follow-indentation-p + ;; Check if point is within indentation. + (and (<= (line-beginning-position) (point)) + (>= (+ (line-beginning-position) + (current-indentation)) + (point))))) + (save-excursion + (indent-line-to + (python-indent-calculate-indentation previous)) + (python-info-dedenter-opening-block-message)) + (when follow-indentation-p + (back-to-indentation)))) -When the variable `last-command' is equal to one of the symbols -inside `python-indent-trigger-commands' or FORCE-TOGGLE is -non-nil it cycles levels indicated in the variable -`python-indent-levels' by setting the current level in the -variable `python-indent-current-level'. - -When the variable `last-command' is not equal to one of the -symbols inside `python-indent-trigger-commands' and FORCE-TOGGLE -is nil it calculates possible indentation levels and saves them -in the variable `python-indent-levels'. Afterwards it sets the -variable `python-indent-current-level' correctly so offset is -equal to - (nth python-indent-current-level python-indent-levels)" - (or - (and (or (and (memq this-command python-indent-trigger-commands) - (eq last-command this-command)) - force-toggle) - (not (equal python-indent-levels '(0))) - (or (python-indent-toggle-levels) t)) - (python-indent-calculate-levels)) - (let* ((starting-pos (point-marker)) - (indent-ending-position - (+ (line-beginning-position) (current-indentation))) - (follow-indentation-p - (or (bolp) - (and (<= (line-beginning-position) starting-pos) - (>= indent-ending-position starting-pos)))) - (next-indent (nth python-indent-current-level python-indent-levels))) - (unless (= next-indent (current-indentation)) - (beginning-of-line) - (delete-horizontal-space) - (indent-to next-indent) - (goto-char starting-pos)) - (and follow-indentation-p (back-to-indentation))) - (python-info-dedenter-opening-block-message)) +(defun python-indent-calculate-levels () + "Return possible indentation levels." + (python-indent--calculate-levels + (python-indent--calculate-indentation))) (defun python-indent-line-function () "`indent-line-function' for Python mode. -See `python-indent-line' for details." - (python-indent-line)) +When the variable `last-command' is equal to one of the symbols +inside `python-indent-trigger-commands' it cycles possible +indentation levels from right to left." + (python-indent-line + (and (memq this-command python-indent-trigger-commands) + (eq last-command this-command)))) (defun python-indent-dedent-line () "De-indent current line." (interactive "*") - (when (and (not (python-syntax-comment-or-string-p)) - (<= (point-marker) (save-excursion - (back-to-indentation) - (point-marker))) - (> (current-column) 0)) - (python-indent-line t) - t)) + (when (and (not (bolp)) + (not (python-syntax-comment-or-string-p)) + (= (+ (line-beginning-position) + (current-indentation)) + (point))) + (python-indent-line t) + t)) (defun python-indent-dedent-line-backspace (arg) "De-indent current line. Argument ARG is passed to `backward-delete-char-untabify' when point is not in between the indentation." (interactive "*p") - (when (not (python-indent-dedent-line)) + (unless (python-indent-dedent-line) (backward-delete-char-untabify arg))) + (put 'python-indent-dedent-line-backspace 'delete-selection 'supersede) (defun python-indent-region (start end) diff --git a/test/ChangeLog b/test/ChangeLog index 11bf34d..62876e9 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,25 @@ +2015-01-26 Fabián Ezequiel Gallina + + * automated/python-tests.el (python-indent-pep8-1) + (python-indent-pep8-2, python-indent-pep8-3) + (python-indent-after-comment-1, python-indent-after-comment-2) + (python-indent-inside-paren-1, python-indent-inside-paren-2) + (python-indent-after-block-1, python-indent-after-block-2) + (python-indent-after-backslash-1, python-indent-after-backslash-2) + (python-indent-after-backslash-3, python-indent-block-enders-1) + (python-indent-block-enders-2, python-indent-block-enders-3) + (python-indent-block-enders-4, python-indent-block-enders-5) + (python-indent-dedenters-1, python-indent-dedenters-2) + (python-indent-dedenters-3, python-indent-dedenters-4) + (python-indent-dedenters-5, python-indent-dedenters-6) + (python-indent-dedenters-7, python-indent-dedenters-8): Fix tests. + (python-indent-base-case, python-indent-after-block-3) + (python-indent-after-backslash-5, python-indent-inside-paren-3) + (python-indent-inside-paren-4, python-indent-inside-paren-5) + (python-indent-inside-paren-6, python-indent-inside-string-1) + (python-indent-inside-string-2, python-indent-inside-string-3) + (python-indent-dedent-line-backspace-1): New Tests. + 2015-01-24 Glenn Morris * automated/regexp-tests.el: Require regexp-opt, which is diff --git a/test/automated/python-tests.el b/test/automated/python-tests.el index 35a7b99..5b77a1d 100644 --- a/test/automated/python-tests.el +++ b/test/automated/python-tests.el @@ -174,13 +174,13 @@ aliqua." foo = long_function_name(var_one, var_two, var_three, var_four) " - (should (eq (car (python-indent-context)) 'no-indent)) + (should (eq (car (python-indent-context)) :no-indent)) (should (= (python-indent-calculate-indentation) 0)) (python-tests-look-at "foo = long_function_name(var_one, var_two,") - (should (eq (car (python-indent-context)) 'after-line)) + (should (eq (car (python-indent-context)) :after-line)) (should (= (python-indent-calculate-indentation) 0)) (python-tests-look-at "var_three, var_four)") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) :inside-paren)) (should (= (python-indent-calculate-indentation) 25)))) (ert-deftest python-indent-pep8-2 () @@ -192,19 +192,22 @@ def long_function_name( var_four): print (var_one) " - (should (eq (car (python-indent-context)) 'no-indent)) + (should (eq (car (python-indent-context)) :no-indent)) (should (= (python-indent-calculate-indentation) 0)) (python-tests-look-at "def long_function_name(") - (should (eq (car (python-indent-context)) 'after-line)) + (should (eq (car (python-indent-context)) :after-line)) (should (= (python-indent-calculate-indentation) 0)) (python-tests-look-at "var_one, var_two, var_three,") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) + :inside-paren-newline-start-from-block)) (should (= (python-indent-calculate-indentation) 8)) (python-tests-look-at "var_four):") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) + :inside-paren-newline-start-from-block)) (should (= (python-indent-calculate-indentation) 8)) (python-tests-look-at "print (var_one)") - (should (eq (car (python-indent-context)) 'after-beginning-of-block)) + (should (eq (car (python-indent-context)) + :after-block-start)) (should (= (python-indent-calculate-indentation) 4)))) (ert-deftest python-indent-pep8-3 () @@ -215,18 +218,34 @@ foo = long_function_name( var_one, var_two, var_three, var_four) " - (should (eq (car (python-indent-context)) 'no-indent)) + (should (eq (car (python-indent-context)) :no-indent)) (should (= (python-indent-calculate-indentation) 0)) (python-tests-look-at "foo = long_function_name(") - (should (eq (car (python-indent-context)) 'after-line)) + (should (eq (car (python-indent-context)) :after-line)) (should (= (python-indent-calculate-indentation) 0)) (python-tests-look-at "var_one, var_two,") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) :inside-paren-newline-start)) (should (= (python-indent-calculate-indentation) 4)) (python-tests-look-at "var_three, var_four)") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) :inside-paren-newline-start)) (should (= (python-indent-calculate-indentation) 4)))) +(ert-deftest python-indent-base-case () + "Check base case does not trigger errors." + (python-tests-with-temp-buffer + " + +" + (goto-char (point-min)) + (should (eq (car (python-indent-context)) :no-indent)) + (should (= (python-indent-calculate-indentation) 0)) + (forward-line 1) + (should (eq (car (python-indent-context)) :after-line)) + (should (= (python-indent-calculate-indentation) 0)) + (forward-line 1) + (should (eq (car (python-indent-context)) :after-line)) + (should (= (python-indent-calculate-indentation) 0)))) + (ert-deftest python-indent-after-comment-1 () "The most simple after-comment case that shouldn't fail." (python-tests-with-temp-buffer @@ -240,23 +259,23 @@ class Blag(object): # with the exception with which the first child failed. " (python-tests-look-at "# We only complete") - (should (eq (car (python-indent-context)) 'after-line)) + (should (eq (car (python-indent-context)) :after-block-end)) (should (= (python-indent-calculate-indentation) 8)) (python-tests-look-at "# terminal state") - (should (eq (car (python-indent-context)) 'after-comment)) + (should (eq (car (python-indent-context)) :after-comment)) (should (= (python-indent-calculate-indentation) 8)) (python-tests-look-at "# with the exception") - (should (eq (car (python-indent-context)) 'after-comment)) + (should (eq (car (python-indent-context)) :after-comment)) ;; This one indents relative to previous block, even given the fact ;; that it was under-indented. (should (= (python-indent-calculate-indentation) 4)) (python-tests-look-at "# terminal state" -1) ;; It doesn't hurt to check again. - (should (eq (car (python-indent-context)) 'after-comment)) + (should (eq (car (python-indent-context)) :after-comment)) (python-indent-line) (should (= (current-indentation) 8)) (python-tests-look-at "# with the exception") - (should (eq (car (python-indent-context)) 'after-comment)) + (should (eq (car (python-indent-context)) :after-comment)) ;; Now everything should be lined up. (should (= (python-indent-calculate-indentation) 8)))) @@ -275,33 +294,33 @@ now_we_do_mess_cause_this_is_not_a_comment = 1 # yeah, that. " (python-tests-look-at "# I don't do much") - (should (eq (car (python-indent-context)) 'after-beginning-of-block)) + (should (eq (car (python-indent-context)) :after-block-start)) (should (= (python-indent-calculate-indentation) 4)) (python-tests-look-at "return arg") ;; Comment here just gets ignored, this line is not a comment so ;; the rules won't apply here. - (should (eq (car (python-indent-context)) 'after-beginning-of-block)) + (should (eq (car (python-indent-context)) :after-block-start)) (should (= (python-indent-calculate-indentation) 4)) (python-tests-look-at "# This comment is badly") - (should (eq (car (python-indent-context)) 'after-line)) + (should (eq (car (python-indent-context)) :after-block-end)) ;; The return keyword moves indentation backwards 4 spaces, but ;; let's assume this comment was placed there because the user ;; wanted to (manually adding spaces or whatever). (should (= (python-indent-calculate-indentation) 0)) (python-tests-look-at "# but we won't mess") - (should (eq (car (python-indent-context)) 'after-comment)) + (should (eq (car (python-indent-context)) :after-comment)) (should (= (python-indent-calculate-indentation) 4)) ;; Behave the same for blank lines: potentially a comment. (forward-line 1) - (should (eq (car (python-indent-context)) 'after-comment)) + (should (eq (car (python-indent-context)) :after-comment)) (should (= (python-indent-calculate-indentation) 4)) (python-tests-look-at "now_we_do_mess") ;; Here is where comment indentation starts to get ignored and ;; where the user can't freely indent anymore. - (should (eq (car (python-indent-context)) 'after-line)) + (should (eq (car (python-indent-context)) :after-block-end)) (should (= (python-indent-calculate-indentation) 0)) (python-tests-look-at "# yeah, that.") - (should (eq (car (python-indent-context)) 'after-line)) + (should (eq (car (python-indent-context)) :after-line)) (should (= (python-indent-calculate-indentation) 0)))) (ert-deftest python-indent-inside-paren-1 () @@ -325,49 +344,53 @@ data = { } " (python-tests-look-at "data = {") - (should (eq (car (python-indent-context)) 'after-line)) + (should (eq (car (python-indent-context)) :after-line)) (should (= (python-indent-calculate-indentation) 0)) (python-tests-look-at "'key':") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) :inside-paren-newline-start)) (should (= (python-indent-calculate-indentation) 4)) (python-tests-look-at "{") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) :inside-paren-newline-start)) (should (= (python-indent-calculate-indentation) 4)) (python-tests-look-at "'objlist': [") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) :inside-paren-newline-start)) (should (= (python-indent-calculate-indentation) 8)) (python-tests-look-at "{") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) :inside-paren-newline-start)) (should (= (python-indent-calculate-indentation) 12)) (python-tests-look-at "'pk': 1,") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) :inside-paren-newline-start)) (should (= (python-indent-calculate-indentation) 16)) (python-tests-look-at "'name': 'first',") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) :inside-paren-newline-start)) (should (= (python-indent-calculate-indentation) 16)) (python-tests-look-at "},") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) + :inside-paren-at-closing-nested-paren)) (should (= (python-indent-calculate-indentation) 12)) (python-tests-look-at "{") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) :inside-paren-newline-start)) (should (= (python-indent-calculate-indentation) 12)) (python-tests-look-at "'pk': 2,") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) :inside-paren-newline-start)) (should (= (python-indent-calculate-indentation) 16)) (python-tests-look-at "'name': 'second',") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) :inside-paren-newline-start)) (should (= (python-indent-calculate-indentation) 16)) (python-tests-look-at "}") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) + :inside-paren-at-closing-nested-paren)) (should (= (python-indent-calculate-indentation) 12)) (python-tests-look-at "]") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) + :inside-paren-at-closing-nested-paren)) (should (= (python-indent-calculate-indentation) 8)) (python-tests-look-at "}") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) + :inside-paren-at-closing-nested-paren)) (should (= (python-indent-calculate-indentation) 4)) (python-tests-look-at "}") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) :inside-paren-at-closing-paren)) (should (= (python-indent-calculate-indentation) 0)))) (ert-deftest python-indent-inside-paren-2 () @@ -384,43 +407,121 @@ data = {'key': { }} " (python-tests-look-at "data = {") - (should (eq (car (python-indent-context)) 'after-line)) + (should (eq (car (python-indent-context)) :after-line)) (should (= (python-indent-calculate-indentation) 0)) (python-tests-look-at "'objlist': [") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) :inside-paren-newline-start)) (should (= (python-indent-calculate-indentation) 4)) (python-tests-look-at "{'pk': 1,") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) :inside-paren-newline-start)) (should (= (python-indent-calculate-indentation) 8)) (python-tests-look-at "'name': 'first'},") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) :inside-paren)) (should (= (python-indent-calculate-indentation) 9)) (python-tests-look-at "{'pk': 2,") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) :inside-paren-newline-start)) (should (= (python-indent-calculate-indentation) 8)) (python-tests-look-at "'name': 'second'}") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) :inside-paren)) (should (= (python-indent-calculate-indentation) 9)) (python-tests-look-at "]") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) + :inside-paren-at-closing-nested-paren)) (should (= (python-indent-calculate-indentation) 4)) (python-tests-look-at "}}") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) + :inside-paren-at-closing-nested-paren)) (should (= (python-indent-calculate-indentation) 0)) (python-tests-look-at "}") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) :inside-paren-at-closing-paren)) (should (= (python-indent-calculate-indentation) 0)))) +(ert-deftest python-indent-inside-paren-3 () + "The simplest case possible." + (python-tests-with-temp-buffer + " +data = ('these', + 'are', + 'the', + 'tokens') +" + (python-tests-look-at "data = ('these',") + (should (eq (car (python-indent-context)) :after-line)) + (should (= (python-indent-calculate-indentation) 0)) + (forward-line 1) + (should (eq (car (python-indent-context)) :inside-paren)) + (should (= (python-indent-calculate-indentation) 8)) + (forward-line 1) + (should (eq (car (python-indent-context)) :inside-paren)) + (should (= (python-indent-calculate-indentation) 8)) + (forward-line 1) + (should (eq (car (python-indent-context)) :inside-paren)) + (should (= (python-indent-calculate-indentation) 8)))) + +(ert-deftest python-indent-inside-paren-4 () + "Respect indentation of first column." + (python-tests-with-temp-buffer + " +data = [ [ 'these', 'are'], + ['the', 'tokens' ] ] +" + (python-tests-look-at "data = [ [ 'these', 'are'],") + (should (eq (car (python-indent-context)) :after-line)) + (should (= (python-indent-calculate-indentation) 0)) + (forward-line 1) + (should (eq (car (python-indent-context)) :inside-paren)) + (should (= (python-indent-calculate-indentation) 9)))) + +(ert-deftest python-indent-inside-paren-5 () + "Test when :inside-paren initial parens are skipped in context start." + (python-tests-with-temp-buffer + " +while ((not some_condition) and + another_condition): + do_something_interesting( + with_some_arg) +" + (python-tests-look-at "while ((not some_condition) and") + (should (eq (car (python-indent-context)) :after-line)) + (should (= (python-indent-calculate-indentation) 0)) + (forward-line 1) + (should (eq (car (python-indent-context)) :inside-paren)) + (should (= (python-indent-calculate-indentation) 7)) + (forward-line 1) + (should (eq (car (python-indent-context)) :after-block-start)) + (should (= (python-indent-calculate-indentation) 4)) + (forward-line 1) + (should (eq (car (python-indent-context)) :inside-paren-newline-start)) + (should (= (python-indent-calculate-indentation) 8)))) + +(ert-deftest python-indent-inside-paren-6 () + "This should be aligned.." + (python-tests-with-temp-buffer + " +CHOICES = (('some', 'choice'), + ('another', 'choice'), + ('more', 'choices')) +" + (python-tests-look-at "CHOICES = (('some', 'choice'),") + (should (eq (car (python-indent-context)) :after-line)) + (should (= (python-indent-calculate-indentation) 0)) + (forward-line 1) + (should (eq (car (python-indent-context)) :inside-paren)) + (should (= (python-indent-calculate-indentation) 11)) + (forward-line 1) + (should (eq (car (python-indent-context)) :inside-paren)) + (should (= (python-indent-calculate-indentation) 11)))) + (ert-deftest python-indent-after-block-1 () "The most simple after-block case that shouldn't fail." (python-tests-with-temp-buffer " def foo(a, b, c=True): " - (should (eq (car (python-indent-context)) 'no-indent)) + (should (eq (car (python-indent-context)) :no-indent)) (should (= (python-indent-calculate-indentation) 0)) (goto-char (point-max)) - (should (eq (car (python-indent-context)) 'after-beginning-of-block)) + (should (eq (car (python-indent-context)) :after-block-start)) (should (= (python-indent-calculate-indentation) 4)))) (ert-deftest python-indent-after-block-2 () @@ -432,9 +533,28 @@ def foo(a, b, c={ }): " (goto-char (point-max)) - (should (eq (car (python-indent-context)) 'after-beginning-of-block)) + (should (eq (car (python-indent-context)) :after-block-start)) (should (= (python-indent-calculate-indentation) 4)))) +(ert-deftest python-indent-after-block-3 () + "A weird (malformed) sample, usually found in python shells." + (python-tests-with-temp-buffer + " +In [1]: +def func(): +pass + +In [2]: +something +" + (python-tests-look-at "pass") + (should (eq (car (python-indent-context)) :after-block-start)) + (should (= (python-indent-calculate-indentation) 4)) + (python-tests-look-at "something") + (end-of-line) + (should (eq (car (python-indent-context)) :after-line)) + (should (= (python-indent-calculate-indentation) 0)))) + (ert-deftest python-indent-after-backslash-1 () "The most common case." (python-tests-with-temp-buffer @@ -444,16 +564,16 @@ from foo.bar.baz import something, something_1 \\\\ something_4, something_5 " (python-tests-look-at "from foo.bar.baz import something, something_1") - (should (eq (car (python-indent-context)) 'after-line)) + (should (eq (car (python-indent-context)) :after-line)) (should (= (python-indent-calculate-indentation) 0)) (python-tests-look-at "something_2 something_3,") - (should (eq (car (python-indent-context)) 'after-backslash)) + (should (eq (car (python-indent-context)) :after-backslash-first-line)) (should (= (python-indent-calculate-indentation) 4)) (python-tests-look-at "something_4, something_5") - (should (eq (car (python-indent-context)) 'after-backslash)) + (should (eq (car (python-indent-context)) :after-backslash)) (should (= (python-indent-calculate-indentation) 4)) (goto-char (point-max)) - (should (eq (car (python-indent-context)) 'after-line)) + (should (eq (car (python-indent-context)) :after-line)) (should (= (python-indent-calculate-indentation) 0)))) (ert-deftest python-indent-after-backslash-2 () @@ -471,40 +591,104 @@ objects = Thing.objects.all() \\\\ .values_list() " (python-tests-look-at "objects = Thing.objects.all()") - (should (eq (car (python-indent-context)) 'after-line)) + (should (eq (car (python-indent-context)) :after-line)) (should (= (python-indent-calculate-indentation) 0)) (python-tests-look-at ".filter(") - (should (eq (car (python-indent-context)) 'after-backslash)) + (should (eq (car (python-indent-context)) + :after-backslash-dotted-continuation)) (should (= (python-indent-calculate-indentation) 23)) (python-tests-look-at "type='toy',") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) :inside-paren-newline-start)) (should (= (python-indent-calculate-indentation) 27)) (python-tests-look-at "status='bought'") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) :inside-paren-newline-start)) (should (= (python-indent-calculate-indentation) 27)) (python-tests-look-at ") \\\\") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) :inside-paren-at-closing-paren)) (should (= (python-indent-calculate-indentation) 23)) (python-tests-look-at ".aggregate(") - (should (eq (car (python-indent-context)) 'after-backslash)) + (should (eq (car (python-indent-context)) + :after-backslash-dotted-continuation)) (should (= (python-indent-calculate-indentation) 23)) (python-tests-look-at "Sum('amount')") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) :inside-paren-newline-start)) (should (= (python-indent-calculate-indentation) 27)) (python-tests-look-at ") \\\\") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) :inside-paren-at-closing-paren)) (should (= (python-indent-calculate-indentation) 23)) (python-tests-look-at ".values_list()") - (should (eq (car (python-indent-context)) 'after-backslash)) + (should (eq (car (python-indent-context)) + :after-backslash-dotted-continuation)) (should (= (python-indent-calculate-indentation) 23)) (forward-line 1) - (should (eq (car (python-indent-context)) 'after-line)) + (should (eq (car (python-indent-context)) :after-line)) (should (= (python-indent-calculate-indentation) 0)))) +(ert-deftest python-indent-after-backslash-3 () + "Backslash continuation from block start." + (python-tests-with-temp-buffer + " +with open('/path/to/some/file/you/want/to/read') as file_1, \\\\ + open('/path/to/some/file/being/written', 'w') as file_2: + file_2.write(file_1.read()) +" + (python-tests-look-at + "with open('/path/to/some/file/you/want/to/read') as file_1, \\\\") + (should (eq (car (python-indent-context)) :after-line)) + (should (= (python-indent-calculate-indentation) 0)) + (python-tests-look-at + "open('/path/to/some/file/being/written', 'w') as file_2") + (should (eq (car (python-indent-context)) + :after-backslash-block-continuation)) + (should (= (python-indent-calculate-indentation) 5)) + (python-tests-look-at "file_2.write(file_1.read())") + (should (eq (car (python-indent-context)) :after-block-start)) + (should (= (python-indent-calculate-indentation) 4)))) + +(ert-deftest python-indent-after-backslash-4 () + "Backslash continuation from assignment." + (python-tests-with-temp-buffer + " +super_awful_assignment = some_calculation() and \\\\ + another_calculation() and \\\\ + some_final_calculation() +" + (python-tests-look-at + "super_awful_assignment = some_calculation() and \\\\") + (should (eq (car (python-indent-context)) :after-line)) + (should (= (python-indent-calculate-indentation) 0)) + (python-tests-look-at "another_calculation() and \\\\") + (should (eq (car (python-indent-context)) + :after-backslash-assignment-continuation)) + (should (= (python-indent-calculate-indentation) 25)) + (python-tests-look-at "some_final_calculation()") + (should (eq (car (python-indent-context)) :after-backslash)) + (should (= (python-indent-calculate-indentation) 25)))) + +(ert-deftest python-indent-after-backslash-5 () + "Dotted continuation bizarre example." + (python-tests-with-temp-buffer + " +def delete_all_things(): + Thing \\\\ + .objects.all() \\\\ + .delete() +" + (python-tests-look-at "Thing \\\\") + (should (eq (car (python-indent-context)) :after-block-start)) + (should (= (python-indent-calculate-indentation) 4)) + (python-tests-look-at ".objects.all() \\\\") + (should (eq (car (python-indent-context)) :after-backslash-first-line)) + (should (= (python-indent-calculate-indentation) 8)) + (python-tests-look-at ".delete()") + (should (eq (car (python-indent-context)) + :after-backslash-dotted-continuation)) + (should (= (python-indent-calculate-indentation) 16)))) + (ert-deftest python-indent-block-enders-1 () "Test de-indentation for pass keyword." (python-tests-with-temp-buffer - " + " Class foo(object): def bar(self): @@ -516,17 +700,18 @@ Class foo(object): else: pass " - (python-tests-look-at "3)") - (forward-line 1) - (should (= (python-indent-calculate-indentation) 8)) - (python-tests-look-at "pass") - (forward-line 1) - (should (= (python-indent-calculate-indentation) 8)))) + (python-tests-look-at "3)") + (forward-line 1) + (should (= (python-indent-calculate-indentation) 8)) + (python-tests-look-at "pass") + (forward-line 1) + (should (eq (car (python-indent-context)) :after-block-end)) + (should (= (python-indent-calculate-indentation) 8)))) (ert-deftest python-indent-block-enders-2 () "Test de-indentation for return keyword." (python-tests-with-temp-buffer - " + " Class foo(object): '''raise lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do @@ -539,64 +724,68 @@ Class foo(object): 2, 3) " - (python-tests-look-at "def") - (should (= (python-indent-calculate-indentation) 4)) - (python-tests-look-at "if") - (should (= (python-indent-calculate-indentation) 8)) - (python-tests-look-at "return") - (should (= (python-indent-calculate-indentation) 12)) - (goto-char (point-max)) - (should (= (python-indent-calculate-indentation) 8)))) + (python-tests-look-at "def") + (should (= (python-indent-calculate-indentation) 4)) + (python-tests-look-at "if") + (should (= (python-indent-calculate-indentation) 8)) + (python-tests-look-at "return") + (should (= (python-indent-calculate-indentation) 12)) + (goto-char (point-max)) + (should (eq (car (python-indent-context)) :after-block-end)) + (should (= (python-indent-calculate-indentation) 8)))) (ert-deftest python-indent-block-enders-3 () "Test de-indentation for continue keyword." (python-tests-with-temp-buffer - " + " for element in lst: if element is None: continue " - (python-tests-look-at "if") - (should (= (python-indent-calculate-indentation) 4)) - (python-tests-look-at "continue") - (should (= (python-indent-calculate-indentation) 8)) - (forward-line 1) - (should (= (python-indent-calculate-indentation) 4)))) + (python-tests-look-at "if") + (should (= (python-indent-calculate-indentation) 4)) + (python-tests-look-at "continue") + (should (= (python-indent-calculate-indentation) 8)) + (forward-line 1) + (should (eq (car (python-indent-context)) :after-block-end)) + (should (= (python-indent-calculate-indentation) 4)))) (ert-deftest python-indent-block-enders-4 () "Test de-indentation for break keyword." (python-tests-with-temp-buffer - " + " for element in lst: if element is None: break " - (python-tests-look-at "if") - (should (= (python-indent-calculate-indentation) 4)) - (python-tests-look-at "break") - (should (= (python-indent-calculate-indentation) 8)) - (forward-line 1) - (should (= (python-indent-calculate-indentation) 4)))) + (python-tests-look-at "if") + (should (= (python-indent-calculate-indentation) 4)) + (python-tests-look-at "break") + (should (= (python-indent-calculate-indentation) 8)) + (forward-line 1) + (should (eq (car (python-indent-context)) :after-block-end)) + (should (= (python-indent-calculate-indentation) 4)))) (ert-deftest python-indent-block-enders-5 () "Test de-indentation for raise keyword." (python-tests-with-temp-buffer - " + " for element in lst: if element is None: raise ValueError('Element cannot be None') " - (python-tests-look-at "if") - (should (= (python-indent-calculate-indentation) 4)) - (python-tests-look-at "raise") - (should (= (python-indent-calculate-indentation) 8)) - (forward-line 1) - (should (= (python-indent-calculate-indentation) 4)))) + (python-tests-look-at "if") + (should (= (python-indent-calculate-indentation) 4)) + (python-tests-look-at "raise") + (should (= (python-indent-calculate-indentation) 8)) + (forward-line 1) + (should (eq (car (python-indent-context)) :after-block-end)) + (should (= (python-indent-calculate-indentation) 4)))) (ert-deftest python-indent-dedenters-1 () "Test de-indentation for the elif keyword." (python-tests-with-temp-buffer - " + " if save: try: write_to_disk(data) @@ -604,15 +793,15 @@ if save: cleanup() elif " - (python-tests-look-at "elif\n") - (should (eq (car (python-indent-context)) 'dedenter-statement)) - (should (= (python-indent-calculate-indentation) 0)) - (should (equal (python-indent-calculate-levels) '(0))))) + (python-tests-look-at "elif\n") + (should (eq (car (python-indent-context)) :at-dedenter-block-start)) + (should (= (python-indent-calculate-indentation) 0)) + (should (= (python-indent-calculate-indentation t) 0)))) (ert-deftest python-indent-dedenters-2 () "Test de-indentation for the else keyword." (python-tests-with-temp-buffer - " + " if save: try: write_to_disk(data) @@ -627,43 +816,50 @@ if save: finally: data.free() " - (python-tests-look-at "else\n") - (should (eq (car (python-indent-context)) 'dedenter-statement)) - (should (= (python-indent-calculate-indentation) 8)) - (should (equal (python-indent-calculate-levels) '(0 4 8))))) + (python-tests-look-at "else\n") + (should (eq (car (python-indent-context)) :at-dedenter-block-start)) + (should (= (python-indent-calculate-indentation) 8)) + (python-indent-line t) + (should (= (python-indent-calculate-indentation t) 4)) + (python-indent-line t) + (should (= (python-indent-calculate-indentation t) 0)) + (python-indent-line t) + (should (= (python-indent-calculate-indentation t) 8)))) (ert-deftest python-indent-dedenters-3 () "Test de-indentation for the except keyword." (python-tests-with-temp-buffer - " + " if save: try: write_to_disk(data) except " - (python-tests-look-at "except\n") - (should (eq (car (python-indent-context)) 'dedenter-statement)) - (should (= (python-indent-calculate-indentation) 4)) - (should (equal (python-indent-calculate-levels) '(4))))) + (python-tests-look-at "except\n") + (should (eq (car (python-indent-context)) :at-dedenter-block-start)) + (should (= (python-indent-calculate-indentation) 4)) + (python-indent-line t) + (should (= (python-indent-calculate-indentation t) 4)))) (ert-deftest python-indent-dedenters-4 () "Test de-indentation for the finally keyword." (python-tests-with-temp-buffer - " + " if save: try: write_to_disk(data) finally " - (python-tests-look-at "finally\n") - (should (eq (car (python-indent-context)) 'dedenter-statement)) - (should (= (python-indent-calculate-indentation) 4)) - (should (equal (python-indent-calculate-levels) '(4))))) + (python-tests-look-at "finally\n") + (should (eq (car (python-indent-context)) :at-dedenter-block-start)) + (should (= (python-indent-calculate-indentation) 4)) + (python-indent-line t) + (should (= (python-indent-calculate-indentation) 4)))) (ert-deftest python-indent-dedenters-5 () "Test invalid levels are skipped in a complex example." (python-tests-with-temp-buffer - " + " if save: try: write_to_disk(data) @@ -676,29 +872,31 @@ if save: do_cleanup() else " - (python-tests-look-at "else\n") - (should (eq (car (python-indent-context)) 'dedenter-statement)) - (should (= (python-indent-calculate-indentation) 8)) - (should (equal (python-indent-calculate-levels) '(0 8))))) + (python-tests-look-at "else\n") + (should (eq (car (python-indent-context)) :at-dedenter-block-start)) + (should (= (python-indent-calculate-indentation) 8)) + (should (= (python-indent-calculate-indentation t) 0)) + (python-indent-line t) + (should (= (python-indent-calculate-indentation t) 8)))) (ert-deftest python-indent-dedenters-6 () "Test indentation is zero when no opening block for dedenter." (python-tests-with-temp-buffer - " + " try: # if save: write_to_disk(data) else " - (python-tests-look-at "else\n") - (should (eq (car (python-indent-context)) 'dedenter-statement)) - (should (= (python-indent-calculate-indentation) 0)) - (should (equal (python-indent-calculate-levels) '(0))))) + (python-tests-look-at "else\n") + (should (eq (car (python-indent-context)) :at-dedenter-block-start)) + (should (= (python-indent-calculate-indentation) 0)) + (should (= (python-indent-calculate-indentation t) 0)))) (ert-deftest python-indent-dedenters-7 () "Test indentation case from Bug#15163." (python-tests-with-temp-buffer - " + " if a: if b: pass @@ -706,10 +904,10 @@ if a: pass else: " - (python-tests-look-at "else:" 2) - (should (eq (car (python-indent-context)) 'dedenter-statement)) - (should (= (python-indent-calculate-indentation) 0)) - (should (equal (python-indent-calculate-levels) '(0))))) + (python-tests-look-at "else:" 2) + (should (eq (car (python-indent-context)) :at-dedenter-block-start)) + (should (= (python-indent-calculate-indentation) 0)) + (should (= (python-indent-calculate-indentation t) 0)))) (ert-deftest python-indent-dedenters-8 () "Test indentation for Bug#18432." @@ -721,10 +919,99 @@ if (a == 1 or elif (a == 3 or a == 4): " + (python-tests-look-at "elif (a == 3 or") + (should (eq (car (python-indent-context)) :at-dedenter-block-start)) + (should (= (python-indent-calculate-indentation) 0)) + (should (= (python-indent-calculate-indentation t) 0)) (python-tests-look-at "a == 4):\n") - (should (eq (car (python-indent-context)) 'inside-paren)) + (should (eq (car (python-indent-context)) :inside-paren)) (should (= (python-indent-calculate-indentation) 6)) - (should (equal (python-indent-calculate-levels) '(0 4 6))))) + (python-indent-line) + (should (= (python-indent-calculate-indentation t) 4)) + (python-indent-line t) + (should (= (python-indent-calculate-indentation t) 0)) + (python-indent-line t) + (should (= (python-indent-calculate-indentation t) 6)))) + +(ert-deftest python-indent-inside-string-1 () + "Test indentation for strings." + (python-tests-with-temp-buffer + " +multiline = ''' +bunch +of +lines +''' +" + (python-tests-look-at "multiline = '''") + (should (eq (car (python-indent-context)) :after-line)) + (should (= (python-indent-calculate-indentation) 0)) + (python-tests-look-at "bunch") + (should (eq (car (python-indent-context)) :inside-string)) + (should (= (python-indent-calculate-indentation) 0)) + (python-tests-look-at "of") + (should (eq (car (python-indent-context)) :inside-string)) + (should (= (python-indent-calculate-indentation) 0)) + (python-tests-look-at "lines") + (should (eq (car (python-indent-context)) :inside-string)) + (should (= (python-indent-calculate-indentation) 0)) + (python-tests-look-at "'''") + (should (eq (car (python-indent-context)) :inside-string)) + (should (= (python-indent-calculate-indentation) 0)))) + +(ert-deftest python-indent-inside-string-2 () + "Test indentation for docstrings." + (python-tests-with-temp-buffer + " +def fn(a, b, c=True): + '''docstring + bunch + of + lines + ''' +" + (python-tests-look-at "'''docstring") + (should (eq (car (python-indent-context)) :after-block-start)) + (should (= (python-indent-calculate-indentation) 4)) + (python-tests-look-at "bunch") + (should (eq (car (python-indent-context)) :inside-string)) + (should (= (python-indent-calculate-indentation) 4)) + (python-tests-look-at "of") + (should (eq (car (python-indent-context)) :inside-string)) + (should (= (python-indent-calculate-indentation) 4)) + (python-tests-look-at "lines") + (should (eq (car (python-indent-context)) :inside-string)) + (should (= (python-indent-calculate-indentation) 4)) + (python-tests-look-at "'''") + (should (eq (car (python-indent-context)) :inside-string)) + (should (= (python-indent-calculate-indentation) 4)))) + +(ert-deftest python-indent-inside-string-3 () + "Test indentation for nested strings." + (python-tests-with-temp-buffer + " +def fn(a, b, c=True): + some_var = ''' + bunch + of + lines + ''' +" + (python-tests-look-at "some_var = '''") + (should (eq (car (python-indent-context)) :after-block-start)) + (should (= (python-indent-calculate-indentation) 4)) + (python-tests-look-at "bunch") + (should (eq (car (python-indent-context)) :inside-string)) + (should (= (python-indent-calculate-indentation) 4)) + (python-tests-look-at "of") + (should (eq (car (python-indent-context)) :inside-string)) + (should (= (python-indent-calculate-indentation) 4)) + (python-tests-look-at "lines") + (should (eq (car (python-indent-context)) :inside-string)) + (should (= (python-indent-calculate-indentation) 4)) + (python-tests-look-at "'''") + (should (eq (car (python-indent-context)) :inside-string)) + (should (= (python-indent-calculate-indentation) 4)))) (ert-deftest python-indent-electric-colon-1 () "Test indentation case from Bug#18228." commit 1fe087a1ab4182b2e6c1d05444461acc4e78e2d8 Author: Katsumi Yamaoka Date: Tue Jan 27 03:15:49 2015 +0000 lisp/emacs-lisp/cl.el (cl--function-convert): Work for cl-flet and cl-labels diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ff352a2..96b7f63 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,9 @@ -2015-01-26 Stefan Monnier +2015-01-27 Katsumi Yamaoka + + * emacs-lisp/cl.el (cl--function-convert): Run cl--labels-convert + for the case cl-flet or cl-labels form is wrapped with lexical-let. +2015-01-26 Stefan Monnier * emacs-lisp/cl-generic.el (cl--generic-method): New struct. (cl--generic): The method-table is now a (list-of cl--generic-method). diff --git a/lisp/emacs-lisp/cl.el b/lisp/emacs-lisp/cl.el index da3eab7..1cd7bd7 100644 --- a/lisp/emacs-lisp/cl.el +++ b/lisp/emacs-lisp/cl.el @@ -342,6 +342,8 @@ The two cases that are handled are: - renaming of F when it's a function defined via `cl-labels' or `labels'." (require 'cl-macs) (declare-function cl--expr-contains-any "cl-macs" (x y)) + (declare-function cl--labels-convert "cl-macs" (f)) + (defvar cl--labels-convert-cache) (cond ;; ¡¡Big Ugly Hack!! We can't use a compiler-macro because those are checked ;; *after* handling `function', but we want to stop macroexpansion from @@ -374,13 +376,8 @@ The two cases that are handled are: (setq cl--function-convert-cache (cons newf res)) res)))) (t - (let ((found (assq f macroexpand-all-environment))) - (if (and found (ignore-errors - (eq (cadr (cl-caddr found)) 'cl-labels-args))) - (cadr (cl-caddr (cl-cadddr found))) - (let ((res `(function ,f))) - (setq cl--function-convert-cache (cons f res)) - res)))))) + (setq cl--labels-convert-cache cl--function-convert-cache) + (cl--labels-convert f)))) (defmacro lexical-let (bindings &rest body) "Like `let', but lexically scoped. commit 2639c2ed08e5b9a55939bab0c575537e50f61141 Author: Paul Eggert Date: Mon Jan 26 16:57:07 2015 -0800 Use bool for boolean in xfaces.c * dispextern.h: Adjust to signature changes. * font.c (font_at, font_range): * fontset.c (Finternal_char_font): * fringe.c (draw_fringe_bitmap_1): * xdisp.c (handle_face_prop, face_before_or_after_it_pos) (get_next_display_element, highlight_trailing_whitespace) (display_string, calc_line_height_property) (note_mode_line_or_margin_highlight, note_mouse_highlight): * xfaces.c (tty_suppress_bold_inverse_default_colors_p) (menu_face_changed_default, recompute_basic_faces) (Fbitmap_spec_p, parse_rgb_list, tty_lookup_color) (tty_defined_color, defined_color, face_color_gray_p) (face_color_supported_p, load_color2, load_face_colors) (Fx_list_fonts, LFACEP, push_named_merge_point) (resolve_face_name, lface_from_face_name_no_resolve) (lface_from_face_name, get_lface_attributes_no_remap) (get_lface_attributes, lface_fully_specified_p) (set_lface_from_font, merge_face_vectors, merge_named_face) (merge_face_ref, Finternal_make_lisp_face) (Finternal_lisp_face_p, Finternal_copy_lisp_face) (Finternal_set_lisp_face_attribute) (update_face_from_frame_parameter, set_font_frame_param) (face_boolean_x_resource_value) (Finternal_set_lisp_face_attribute_from_resource) (x_update_menu_appearance, Finternal_get_lisp_face_attribute) (Finternal_merge_in_global_face, Fface_font, face_attr_equal_p) (lface_equal_p, Finternal_lisp_face_equal_p) (Finternal_lisp_face_empty_p, lface_same_font_attributes_p) (Fcolor_distance, lookup_named_face, lookup_basic_face) (lookup_derived_face, Fface_attributes_as_vector) (x_supports_face_attributes_p, tty_supports_face_attributes_p) (Fdisplay_supports_face_attributes_p, realize_basic_faces) (realize_default_face, realize_named_face) (realize_non_ascii_face, realize_x_face, map_tty_color) (realize_tty_face, compute_char_face, face_at_buffer_position) (face_for_overlay_string, face_at_string_position): Use bool for boolean. * xfaces.c (set_lface_from_font): Return void, since callers never use the result. diff --git a/src/ChangeLog b/src/ChangeLog index eb823b3..8e5166e 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,46 @@ +2015-01-27 Paul Eggert + + Use bool for boolean in xfaces.c + * dispextern.h: Adjust to signature changes. + * font.c (font_at, font_range): + * fontset.c (Finternal_char_font): + * fringe.c (draw_fringe_bitmap_1): + * xdisp.c (handle_face_prop, face_before_or_after_it_pos) + (get_next_display_element, highlight_trailing_whitespace) + (display_string, calc_line_height_property) + (note_mode_line_or_margin_highlight, note_mouse_highlight): + * xfaces.c (tty_suppress_bold_inverse_default_colors_p) + (menu_face_changed_default, recompute_basic_faces) + (Fbitmap_spec_p, parse_rgb_list, tty_lookup_color) + (tty_defined_color, defined_color, face_color_gray_p) + (face_color_supported_p, load_color2, load_face_colors) + (Fx_list_fonts, LFACEP, push_named_merge_point) + (resolve_face_name, lface_from_face_name_no_resolve) + (lface_from_face_name, get_lface_attributes_no_remap) + (get_lface_attributes, lface_fully_specified_p) + (set_lface_from_font, merge_face_vectors, merge_named_face) + (merge_face_ref, Finternal_make_lisp_face) + (Finternal_lisp_face_p, Finternal_copy_lisp_face) + (Finternal_set_lisp_face_attribute) + (update_face_from_frame_parameter, set_font_frame_param) + (face_boolean_x_resource_value) + (Finternal_set_lisp_face_attribute_from_resource) + (x_update_menu_appearance, Finternal_get_lisp_face_attribute) + (Finternal_merge_in_global_face, Fface_font, face_attr_equal_p) + (lface_equal_p, Finternal_lisp_face_equal_p) + (Finternal_lisp_face_empty_p, lface_same_font_attributes_p) + (Fcolor_distance, lookup_named_face, lookup_basic_face) + (lookup_derived_face, Fface_attributes_as_vector) + (x_supports_face_attributes_p, tty_supports_face_attributes_p) + (Fdisplay_supports_face_attributes_p, realize_basic_faces) + (realize_default_face, realize_named_face) + (realize_non_ascii_face, realize_x_face, map_tty_color) + (realize_tty_face, compute_char_face, face_at_buffer_position) + (face_for_overlay_string, face_at_string_position): + Use bool for boolean. + * xfaces.c (set_lface_from_font): + Return void, since callers never use the result. + 2015-01-26 Andreas Schwab * image.c (lookup_pixel_color): Reorder conditions that are diff --git a/src/dispextern.h b/src/dispextern.h index e9e6f70..31e7262 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -3380,23 +3380,20 @@ char *choose_face_font (struct frame *, Lisp_Object *, Lisp_Object, #ifdef HAVE_WINDOW_SYSTEM void prepare_face_for_display (struct frame *, struct face *); #endif -int lookup_named_face (struct frame *, Lisp_Object, int); +int lookup_named_face (struct frame *, Lisp_Object, bool); int lookup_basic_face (struct frame *, int); int smaller_face (struct frame *, int, int); int face_with_height (struct frame *, int, int); -int lookup_derived_face (struct frame *, Lisp_Object, int, int); +int lookup_derived_face (struct frame *, Lisp_Object, int, bool); void init_frame_faces (struct frame *); void free_frame_faces (struct frame *); void recompute_basic_faces (struct frame *); -int face_at_buffer_position (struct window *w, ptrdiff_t pos, - ptrdiff_t *endptr, ptrdiff_t limit, - int mouse, int base_face_id); -int face_for_overlay_string (struct window *w, ptrdiff_t pos, - ptrdiff_t *endptr, ptrdiff_t limit, - int mouse, Lisp_Object overlay); -int face_at_string_position (struct window *w, Lisp_Object string, - ptrdiff_t pos, ptrdiff_t bufpos, - ptrdiff_t *endptr, enum face_id, int mouse); +int face_at_buffer_position (struct window *, ptrdiff_t, ptrdiff_t *, ptrdiff_t, + bool, int); +int face_for_overlay_string (struct window *, ptrdiff_t, ptrdiff_t *, ptrdiff_t, + bool, Lisp_Object); +int face_at_string_position (struct window *, Lisp_Object, ptrdiff_t, ptrdiff_t, + ptrdiff_t *, enum face_id, bool); int merge_faces (struct frame *, Lisp_Object, int, int); int compute_char_face (struct frame *, int, Lisp_Object); void free_all_realized_faces (Lisp_Object); diff --git a/src/font.c b/src/font.c index d1a008e..9ea43cd 100644 --- a/src/font.c +++ b/src/font.c @@ -3707,10 +3707,10 @@ font_at (int c, ptrdiff_t pos, struct face *face, struct window *w, if (STRINGP (string)) face_id = face_at_string_position (w, string, pos, 0, &endptr, - DEFAULT_FACE_ID, 0); + DEFAULT_FACE_ID, false); else face_id = face_at_buffer_position (w, pos, &endptr, - pos + 100, 0, -1); + pos + 100, false, -1); face = FACE_FROM_ID (f, face_id); } if (multibyte) @@ -3754,7 +3754,7 @@ font_range (ptrdiff_t pos, ptrdiff_t pos_byte, ptrdiff_t *limit, int face_id; face_id = face_at_buffer_position (w, pos, &ignore, - *limit, 0, -1); + *limit, false, -1); face = FACE_FROM_ID (XFRAME (w->frame), face_id); } } diff --git a/src/fontset.c b/src/fontset.c index 357526b..c0303fa 100644 --- a/src/fontset.c +++ b/src/fontset.c @@ -1828,7 +1828,7 @@ DEFUN ("internal-char-font", Finternal_char_font, Sinternal_char_font, 1, 2, 0, w = XWINDOW (window); f = XFRAME (w->frame); face_id = face_at_buffer_position (w, pos, &dummy, - pos + 100, 0, -1); + pos + 100, false, -1); } if (! CHAR_VALID_P (c)) return Qnil; diff --git a/src/fringe.c b/src/fringe.c index 464379d..5e5ec60 100644 --- a/src/fringe.c +++ b/src/fringe.c @@ -587,7 +587,7 @@ draw_fringe_bitmap_1 (struct window *w, struct glyph_row *row, int left_p, int o if (face_id == DEFAULT_FACE_ID) { Lisp_Object face = fringe_faces[which]; - face_id = NILP (face) ? lookup_named_face (f, Qfringe, 0) + face_id = NILP (face) ? lookup_named_face (f, Qfringe, false) : lookup_derived_face (f, face, FRINGE_FACE_ID, 0); if (face_id < 0) face_id = FRINGE_FACE_ID; diff --git a/src/xdisp.c b/src/xdisp.c index d974687..71871ec 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -3877,7 +3877,7 @@ handle_face_prop (struct it *it) &next_stop, (IT_CHARPOS (*it) + TEXT_PROP_DISTANCE_LIMIT), - 0, it->base_face_id); + false, it->base_face_id); /* Is this a start of a run of characters with box face? Caveat: this can be called for a freshly initialized @@ -3953,7 +3953,7 @@ handle_face_prop (struct it *it) &next_stop, (IT_CHARPOS (*it) + TEXT_PROP_DISTANCE_LIMIT), - 0, + false, from_overlay); } else @@ -3988,7 +3988,7 @@ handle_face_prop (struct it *it) IT_STRING_CHARPOS (*it), bufpos, &next_stop, - base_face_id, 0); + base_face_id, false); /* Is this a start of a run of characters with box? Caveat: this can be called for a freshly allocated iterator; face_id @@ -4130,7 +4130,7 @@ face_before_or_after_it_pos (struct it *it, int before_p) charpos, bufpos, &next_check_charpos, - base_face_id, 0); + base_face_id, false); /* Correct the face for charsets different from ASCII. Do it for the multibyte case only. The face returned above is @@ -4219,7 +4219,7 @@ face_before_or_after_it_pos (struct it *it, int before_p) face_id = face_at_buffer_position (it->w, CHARPOS (pos), &next_check_charpos, - limit, 0, -1); + limit, false, -1); /* Correct the face for charsets different from ASCII. Do it for the multibyte case only. The face returned above is @@ -7165,7 +7165,7 @@ get_next_display_element (struct it *it) { next_face_id = face_at_buffer_position (it->w, CHARPOS (pos), &ignore, - CHARPOS (pos) + TEXT_PROP_DISTANCE_LIMIT, 0, -1); + CHARPOS (pos) + TEXT_PROP_DISTANCE_LIMIT, false, -1); it->end_of_box_run_p = (FACE_FROM_ID (it->f, next_face_id)->box == FACE_NO_BOX); @@ -19551,7 +19551,7 @@ highlight_trailing_whitespace (struct frame *f, struct glyph_row *row) && glyph->u.ch == ' ')) && trailing_whitespace_p (glyph->charpos)) { - int face_id = lookup_named_face (f, Qtrailing_whitespace, 0); + int face_id = lookup_named_face (f, Qtrailing_whitespace, false); if (face_id < 0) return; @@ -23561,7 +23561,7 @@ display_string (const char *string, Lisp_Object lisp_string, Lisp_Object face_st it->face_id = face_at_string_position (it->w, face_string, face_string_pos, - 0, &endptr, it->base_face_id, 0); + 0, &endptr, it->base_face_id, false); face = FACE_FROM_ID (it->f, it->face_id); it->face_box_p = face->box != FACE_NO_BOX; } @@ -26067,7 +26067,7 @@ calc_line_height_property (struct it *it, Lisp_Object val, struct font *font, int face_id; struct face *face; - face_id = lookup_named_face (it->f, face_name, 0); + face_id = lookup_named_face (it->f, face_name, false); if (face_id < 0) return make_number (-1); @@ -29283,7 +29283,7 @@ note_mode_line_or_margin_highlight (Lisp_Object window, int x, int y, charpos, 0, &ignore, glyph->face_id, - 1); + true); show_mouse_face (hlinfo, DRAW_MOUSE_FACE); if (NILP (pointer)) @@ -29611,7 +29611,7 @@ note_mouse_highlight (struct frame *f, int x, int y) hlinfo->mouse_face_window = window; hlinfo->mouse_face_face_id = face_at_string_position (w, object, pos, 0, &ignore, - glyph->face_id, 1); + glyph->face_id, true); show_mouse_face (hlinfo, DRAW_MOUSE_FACE); cursor = No_Cursor; } diff --git a/src/xfaces.c b/src/xfaces.c index 31048ae..7c9f626 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -265,11 +265,11 @@ along with GNU Emacs. If not, see . */ #include -/* Non-zero if face attribute ATTR is unspecified. */ +/* True if face attribute ATTR is unspecified. */ #define UNSPECIFIEDP(ATTR) EQ ((ATTR), Qunspecified) -/* Non-zero if face attribute ATTR is `ignore-defface'. */ +/* True if face attribute ATTR is `ignore-defface'. */ #define IGNORE_DEFFACE_P(ATTR) EQ ((ATTR), QCignore_defface) @@ -318,12 +318,12 @@ static int clear_font_table_count; int face_change_count; -/* Non-zero means don't display bold text if a face's foreground +/* True means don't display bold text if a face's foreground and background colors are the inverse of the default colors of the display. This is a kluge to suppress `bold black' foreground text which is hard to read on an LCD monitor. */ -static int tty_suppress_bold_inverse_default_colors_p; +static bool tty_suppress_bold_inverse_default_colors_p; /* A list of the form `((x . y))' used to avoid consing in Finternal_set_lisp_face_attribute. */ @@ -338,10 +338,10 @@ static int npixmaps_allocated; static int ngcs; #endif -/* Non-zero means the definition of the `menu' face for new frames has +/* True means the definition of the `menu' face for new frames has been changed. */ -static int menu_face_changed_default; +static bool menu_face_changed_default; struct named_merge_point; @@ -354,8 +354,8 @@ static bool realize_default_face (struct frame *); static void realize_named_face (struct frame *, Lisp_Object, int); static struct face_cache *make_face_cache (struct frame *); static void free_face_cache (struct face_cache *); -static int merge_face_ref (struct frame *, Lisp_Object, Lisp_Object *, - int, struct named_merge_point *); +static bool merge_face_ref (struct frame *, Lisp_Object, Lisp_Object *, + bool, struct named_merge_point *); static int color_distance (XColor *x, XColor *y); #ifdef HAVE_WINDOW_SYSTEM @@ -638,14 +638,14 @@ recompute_basic_faces (struct frame *f) { if (FRAME_FACE_CACHE (f)) { - clear_face_cache (0); + clear_face_cache (false); if (!realize_basic_faces (f)) emacs_abort (); } } -/* Clear the face caches of all frames. CLEAR_FONTS_P non-zero means +/* Clear the face caches of all frames. CLEAR_FONTS_P means try to free unused fonts, too. */ void @@ -715,11 +715,11 @@ the pixmap. Bits are stored row by row, each row occupies \(WIDTH + 7)/8 bytes. */) (Lisp_Object object) { - bool pixmap_p = 0; + bool pixmap_p = false; if (STRINGP (object)) /* If OBJECT is a string, it's a file name. */ - pixmap_p = 1; + pixmap_p = true; else if (CONSP (object)) { /* Otherwise OBJECT must be (WIDTH HEIGHT DATA), WIDTH and @@ -749,7 +749,7 @@ the pixmap. Bits are stored row by row, each row occupies int bytes_per_row = ((XINT (width) + BITS_PER_CHAR - 1) / BITS_PER_CHAR); if (XINT (height) <= SBYTES (data) / bytes_per_row) - pixmap_p = 1; + pixmap_p = true; } } @@ -820,9 +820,9 @@ load_pixmap (struct frame *f, Lisp_Object name) /* Parse RGB_LIST, and fill in the RGB fields of COLOR. RGB_LIST should contain (at least) 3 lisp integers. - Return 0 if there's a problem with RGB_LIST, otherwise return 1. */ + Return true iff RGB_LIST is OK. */ -static int +static bool parse_rgb_list (Lisp_Object rgb_list, XColor *color) { #define PARSE_RGB_LIST_FIELD(field) \ @@ -832,13 +832,13 @@ parse_rgb_list (Lisp_Object rgb_list, XColor *color) rgb_list = XCDR (rgb_list); \ } \ else \ - return 0; + return false; PARSE_RGB_LIST_FIELD (red); PARSE_RGB_LIST_FIELD (green); PARSE_RGB_LIST_FIELD (blue); - return 1; + return true; } @@ -854,7 +854,7 @@ tty_lookup_color (struct frame *f, Lisp_Object color, XColor *tty_color, Lisp_Object frame, color_desc; if (!STRINGP (color) || NILP (Ffboundp (Qtty_color_desc))) - return 0; + return false; XSETFRAME (frame, f); @@ -864,13 +864,13 @@ tty_lookup_color (struct frame *f, Lisp_Object color, XColor *tty_color, Lisp_Object rgb; if (! INTEGERP (XCAR (XCDR (color_desc)))) - return 0; + return false; tty_color->pixel = XINT (XCAR (XCDR (color_desc))); rgb = XCDR (XCDR (color_desc)); if (! parse_rgb_list (rgb, tty_color)) - return 0; + return false; /* Should we fill in STD_COLOR too? */ if (std_color) @@ -889,21 +889,21 @@ tty_lookup_color (struct frame *f, Lisp_Object color, XColor *tty_color, /* Look up STD_COLOR separately. */ rgb = call1 (Qtty_color_standard_values, color); if (! parse_rgb_list (rgb, std_color)) - return 0; + return false; } } - return 1; + return true; } else if (NILP (Fsymbol_value (intern ("tty-defined-color-alist")))) /* We were called early during startup, and the colors are not yet set up in tty-defined-color-alist. Don't return a failure indication, since this produces the annoying "Unable to load color" messages in the *Messages* buffer. */ - return 1; + return true; else /* tty-color-desc seems to have returned a bad value. */ - return 0; + return false; } /* A version of defined_color for non-X frames. */ @@ -912,7 +912,7 @@ static bool tty_defined_color (struct frame *f, const char *color_name, XColor *color_def, bool alloc) { - bool status = 1; + bool status = true; /* Defaults. */ color_def->pixel = FACE_TTY_DEFAULT_COLOR; @@ -932,7 +932,7 @@ tty_defined_color (struct frame *f, const char *color_name, } if (color_def->pixel != FACE_TTY_DEFAULT_COLOR) - status = 1; + status = true; return status; } @@ -960,7 +960,7 @@ defined_color (struct frame *f, const char *color_name, XColor *color_def, #endif #ifdef HAVE_NS else if (FRAME_NS_P (f)) - return ns_defined_color (f, color_name, color_def, alloc, 1); + return ns_defined_color (f, color_name, color_def, alloc, true); #endif else emacs_abort (); @@ -1000,18 +1000,18 @@ tty_color_name (struct frame *f, int idx) } -/* Return non-zero if COLOR_NAME is a shade of gray (or white or +/* Return true if COLOR_NAME is a shade of gray (or white or black) on frame F. The criterion implemented here is not a terribly sophisticated one. */ -static int +static bool face_color_gray_p (struct frame *f, const char *color_name) { XColor color; - int gray_p; + bool gray_p; - if (defined_color (f, color_name, &color, 0)) + if (defined_color (f, color_name, &color, false)) gray_p = (/* Any color sufficiently close to black counts as gray. */ (color.red < 5000 && color.green < 5000 && color.blue < 5000) || @@ -1022,19 +1022,18 @@ face_color_gray_p (struct frame *f, const char *color_name) && (eabs (color.blue - color.red) < max (color.blue, color.red) / 20))); else - gray_p = 0; + gray_p = false; return gray_p; } -/* Return non-zero if color COLOR_NAME can be displayed on frame F. - BACKGROUND_P non-zero means the color will be used as background - color. */ +/* Return true if color COLOR_NAME can be displayed on frame F. + BACKGROUND_P means the color will be used as background color. */ -static int +static bool face_color_supported_p (struct frame *f, const char *color_name, - int background_p) + bool background_p) { Lisp_Object frame; XColor not_used; @@ -1052,7 +1051,7 @@ face_color_supported_p (struct frame *f, const char *color_name, && face_color_gray_p (f, color_name))) : #endif - tty_defined_color (f, color_name, ¬_used, 0); + tty_defined_color (f, color_name, ¬_used, false); } @@ -1098,39 +1097,39 @@ load_color2 (struct frame *f, struct face *face, Lisp_Object name, /* if the color map is full, defined_color will return a best match to the values in an existing cell. */ - if (!defined_color (f, SSDATA (name), color, 1)) + if (!defined_color (f, SSDATA (name), color, true)) { add_to_log ("Unable to load color \"%s\"", name, Qnil); switch (target_index) { case LFACE_FOREGROUND_INDEX: - face->foreground_defaulted_p = 1; + face->foreground_defaulted_p = true; color->pixel = FRAME_FOREGROUND_PIXEL (f); break; case LFACE_BACKGROUND_INDEX: - face->background_defaulted_p = 1; + face->background_defaulted_p = true; color->pixel = FRAME_BACKGROUND_PIXEL (f); break; case LFACE_UNDERLINE_INDEX: - face->underline_defaulted_p = 1; + face->underline_defaulted_p = true; color->pixel = FRAME_FOREGROUND_PIXEL (f); break; case LFACE_OVERLINE_INDEX: - face->overline_color_defaulted_p = 1; + face->overline_color_defaulted_p = true; color->pixel = FRAME_FOREGROUND_PIXEL (f); break; case LFACE_STRIKE_THROUGH_INDEX: - face->strike_through_color_defaulted_p = 1; + face->strike_through_color_defaulted_p = true; color->pixel = FRAME_FOREGROUND_PIXEL (f); break; case LFACE_BOX_INDEX: - face->box_color_defaulted_p = 1; + face->box_color_defaulted_p = true; color->pixel = FRAME_FOREGROUND_PIXEL (f); break; @@ -1196,7 +1195,7 @@ load_face_colors (struct frame *f, struct face *face, face_color_supported_p is smart enough to know that grays are "supported" as background because we are supposed to use stipple for them. */ - if (!face_color_supported_p (f, SSDATA (bg), 0) + if (!face_color_supported_p (f, SSDATA (bg), false) && !NILP (Fbitmap_spec_p (Vface_default_stipple))) { x_destroy_bitmap (f, face->stipple); @@ -1561,7 +1560,7 @@ the WIDTH times as wide as FACE on FRAME. */) { /* This is of limited utility since it works with character widths. Keep it for compatibility. --gerd. */ - int face_id = lookup_named_face (f, face, 0); + int face_id = lookup_named_face (f, face, false); struct face *width_face = (face_id < 0 ? NULL : FACE_FROM_ID (f, face_id)); @@ -1643,7 +1642,7 @@ the WIDTH times as wide as FACE on FRAME. */) #define LFACE_DISTANT_FOREGROUND(LFACE) \ AREF ((LFACE), LFACE_DISTANT_FOREGROUND_INDEX) -/* Non-zero if LFACE is a Lisp face. A Lisp face is a vector of size +/* True if LFACE is a Lisp face. A Lisp face is a vector of size LFACE_VECTOR_SIZE which has the symbol `face' in slot 0. */ #define LFACEP(LFACE) \ @@ -1773,12 +1772,12 @@ struct named_merge_point }; -/* If a face merging cycle is detected for FACE_NAME, return 0, +/* If a face merging cycle is detected for FACE_NAME, return false, otherwise add NEW_NAMED_MERGE_POINT, which is initialized using FACE_NAME and NAMED_MERGE_POINT_KIND, as the head of the linked list - pointed to by NAMED_MERGE_POINTS, and return 1. */ + pointed to by NAMED_MERGE_POINTS, and return true. */ -static int +static bool push_named_merge_point (struct named_merge_point *new_named_merge_point, Lisp_Object face_name, enum named_merge_point_kind named_merge_point_kind, @@ -1791,7 +1790,7 @@ push_named_merge_point (struct named_merge_point *new_named_merge_point, { if (prev->named_merge_point_kind == named_merge_point_kind) /* A cycle, so fail. */ - return 0; + return false; else if (prev->named_merge_point_kind == NAMED_MERGE_POINT_REMAP) /* A remap `hides ' any previous normal merge points (because the remap means that it's actually different face), @@ -1806,7 +1805,7 @@ push_named_merge_point (struct named_merge_point *new_named_merge_point, *named_merge_points = new_named_merge_point; - return 1; + return true; } @@ -1817,7 +1816,7 @@ push_named_merge_point (struct named_merge_point *new_named_merge_point, Return default face in case of errors. */ static Lisp_Object -resolve_face_name (Lisp_Object face_name, int signal_p) +resolve_face_name (Lisp_Object face_name, bool signal_p) { Lisp_Object orig_face; Lisp_Object tortoise, hare; @@ -1831,7 +1830,7 @@ resolve_face_name (Lisp_Object face_name, int signal_p) orig_face = face_name; tortoise = hare = face_name; - while (1) + while (true) { face_name = hare; hare = Fget (hare, Qface_alias); @@ -1859,12 +1858,12 @@ resolve_face_name (Lisp_Object face_name, int signal_p) /* Return the face definition of FACE_NAME on frame F. F null means return the definition for new frames. FACE_NAME may be a string or a symbol (apparently Emacs 20.2 allowed strings as face names in - face text properties; Ediff uses that). If SIGNAL_P is non-zero, - signal an error if FACE_NAME is not a valid face name. If SIGNAL_P - is zero, value is nil if FACE_NAME is not a valid face name. */ + face text properties; Ediff uses that). + If SIGNAL_P, signal an error if FACE_NAME is not a valid face name. + Otherwise, value is nil if FACE_NAME is not a valid face name. */ static Lisp_Object lface_from_face_name_no_resolve (struct frame *f, Lisp_Object face_name, - int signal_p) + bool signal_p) { Lisp_Object lface; @@ -1887,12 +1886,11 @@ lface_from_face_name_no_resolve (struct frame *f, Lisp_Object face_name, return the definition for new frames. FACE_NAME may be a string or a symbol (apparently Emacs 20.2 allowed strings as face names in face text properties; Ediff uses that). If FACE_NAME is an alias - for another face, return that face's definition. If SIGNAL_P is - non-zero, signal an error if FACE_NAME is not a valid face name. - If SIGNAL_P is zero, value is nil if FACE_NAME is not a valid face - name. */ + for another face, return that face's definition. + If SIGNAL_P, signal an error if FACE_NAME is not a valid face name. + Otherwise, value is nil if FACE_NAME is not a valid face name. */ static Lisp_Object -lface_from_face_name (struct frame *f, Lisp_Object face_name, int signal_p) +lface_from_face_name (struct frame *f, Lisp_Object face_name, bool signal_p) { face_name = resolve_face_name (face_name, signal_p); return lface_from_face_name_no_resolve (f, face_name, signal_p); @@ -1901,14 +1899,14 @@ lface_from_face_name (struct frame *f, Lisp_Object face_name, int signal_p) /* Get face attributes of face FACE_NAME from frame-local faces on frame F. Store the resulting attributes in ATTRS which must point - to a vector of Lisp_Objects of size LFACE_VECTOR_SIZE. If SIGNAL_P - is non-zero, signal an error if FACE_NAME does not name a face. - Otherwise, value is zero if FACE_NAME is not a face. */ + to a vector of Lisp_Objects of size LFACE_VECTOR_SIZE. + If SIGNAL_P, signal an error if FACE_NAME does not name a face. + Otherwise, return true iff FACE_NAME is a face. */ -static int +static bool get_lface_attributes_no_remap (struct frame *f, Lisp_Object face_name, Lisp_Object attrs[LFACE_VECTOR_SIZE], - int signal_p) + bool signal_p) { Lisp_Object lface; @@ -1924,13 +1922,13 @@ get_lface_attributes_no_remap (struct frame *f, Lisp_Object face_name, /* Get face attributes of face FACE_NAME from frame-local faces on frame F. Store the resulting attributes in ATTRS which must point to a vector of Lisp_Objects of size LFACE_VECTOR_SIZE. If FACE_NAME is an - alias for another face, use that face's definition. If SIGNAL_P is - non-zero, signal an error if FACE_NAME does not name a face. - Otherwise, value is zero if FACE_NAME is not a face. */ + alias for another face, use that face's definition. + If SIGNAL_P, signal an error if FACE_NAME does not name a face. + Otherwise, return true iff FACE_NAME is a face. */ -static int +static bool get_lface_attributes (struct frame *f, Lisp_Object face_name, - Lisp_Object attrs[LFACE_VECTOR_SIZE], int signal_p, + Lisp_Object attrs[LFACE_VECTOR_SIZE], bool signal_p, struct named_merge_point *named_merge_points) { Lisp_Object face_remapping; @@ -1963,10 +1961,10 @@ get_lface_attributes (struct frame *f, Lisp_Object face_name, } -/* Non-zero if all attributes in face attribute vector ATTRS are +/* True iff all attributes in face attribute vector ATTRS are specified, i.e. are non-nil. */ -static int +static bool lface_fully_specified_p (Lisp_Object attrs[LFACE_VECTOR_SIZE]) { int i; @@ -1983,13 +1981,13 @@ lface_fully_specified_p (Lisp_Object attrs[LFACE_VECTOR_SIZE]) #ifdef HAVE_WINDOW_SYSTEM /* Set font-related attributes of Lisp face LFACE from FONT-OBJECT. - If FORCE_P is zero, set only unspecified attributes of LFACE. The + If FORCE_P, set only unspecified attributes of LFACE. The exception is `font' attribute. It is set to FONT_OBJECT regardless of FORCE_P. */ -static int +static void set_lface_from_font (struct frame *f, Lisp_Object lface, - Lisp_Object font_object, int force_p) + Lisp_Object font_object, bool force_p) { Lisp_Object val; struct font *font = XFONT_OBJECT (font_object); @@ -2037,7 +2035,6 @@ set_lface_from_font (struct frame *f, Lisp_Object lface, } ASET (lface, LFACE_FONT_INDEX, font_object); - return 1; } #endif /* HAVE_WINDOW_SYSTEM */ @@ -2108,7 +2105,7 @@ merge_face_vectors (struct frame *f, Lisp_Object *from, Lisp_Object *to, other code uses `unspecified' as a generic value for face attributes. */ if (!UNSPECIFIEDP (from[LFACE_INHERIT_INDEX]) && !NILP (from[LFACE_INHERIT_INDEX])) - merge_face_ref (f, from[LFACE_INHERIT_INDEX], to, 0, named_merge_points); + merge_face_ref (f, from[LFACE_INHERIT_INDEX], to, false, named_merge_points); if (FONT_SPEC_P (from[LFACE_FONT_INDEX])) { @@ -2166,11 +2163,11 @@ merge_face_vectors (struct frame *f, Lisp_Object *from, Lisp_Object *to, } /* Merge the named face FACE_NAME on frame F, into the vector of face - attributes TO. NAMED_MERGE_POINTS is used to detect loops in face - inheritance. Returns true if FACE_NAME is a valid face name and + attributes TO. Use NAMED_MERGE_POINTS to detect loops in face + inheritance. Return true if FACE_NAME is a valid face name and merging succeeded. */ -static int +static bool merge_named_face (struct frame *f, Lisp_Object face_name, Lisp_Object *to, struct named_merge_point *named_merge_points) { @@ -2182,7 +2179,8 @@ merge_named_face (struct frame *f, Lisp_Object face_name, Lisp_Object *to, { struct gcpro gcpro1; Lisp_Object from[LFACE_VECTOR_SIZE]; - int ok = get_lface_attributes (f, face_name, from, 0, named_merge_points); + bool ok = get_lface_attributes (f, face_name, from, false, + named_merge_points); if (ok) { @@ -2194,15 +2192,15 @@ merge_named_face (struct frame *f, Lisp_Object face_name, Lisp_Object *to, return ok; } else - return 0; + return false; } /* Merge face attributes from the lisp `face reference' FACE_REF on - frame F into the face attribute vector TO. If ERR_MSGS is non-zero, + frame F into the face attribute vector TO. If ERR_MSGS, problems with FACE_REF cause an error message to be shown. Return - non-zero if no errors occurred (regardless of the value of ERR_MSGS). - NAMED_MERGE_POINTS is used to detect loops in face inheritance or + true if no errors occurred (regardless of the value of ERR_MSGS). + Use NAMED_MERGE_POINTS to detect loops in face inheritance or list structure; it may be 0 for most callers. FACE_REF may be a single face specification or a list of such @@ -2221,11 +2219,11 @@ merge_named_face (struct frame *f, Lisp_Object face_name, Lisp_Object *to, Face specifications earlier in lists take precedence over later specifications. */ -static int +static bool merge_face_ref (struct frame *f, Lisp_Object face_ref, Lisp_Object *to, - int err_msgs, struct named_merge_point *named_merge_points) + bool err_msgs, struct named_merge_point *named_merge_points) { - int ok = 1; /* Succeed without an error? */ + bool ok = true; /* Succeed without an error? */ if (CONSP (face_ref)) { @@ -2250,7 +2248,7 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, Lisp_Object *to, { if (err_msgs) add_to_log ("Invalid face color", color_name, Qnil); - ok = 0; + ok = false; } } else if (SYMBOLP (first) @@ -2261,7 +2259,7 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, Lisp_Object *to, { Lisp_Object keyword = XCAR (face_ref); Lisp_Object value = XCAR (XCDR (face_ref)); - int err = 0; + bool err = false; /* Specifying `unspecified' is a no-op. */ if (EQ (value, Qunspecified)) @@ -2274,7 +2272,7 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, Lisp_Object *to, font_clear_prop (to, FONT_FAMILY_INDEX); } else - err = 1; + err = true; } else if (EQ (keyword, QCfoundry)) { @@ -2284,7 +2282,7 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, Lisp_Object *to, font_clear_prop (to, FONT_FOUNDRY_INDEX); } else - err = 1; + err = true; } else if (EQ (keyword, QCheight)) { @@ -2297,7 +2295,7 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, Lisp_Object *to, font_clear_prop (to, FONT_SIZE_INDEX); } else - err = 1; + err = true; } else if (EQ (keyword, QCweight)) { @@ -2307,7 +2305,7 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, Lisp_Object *to, font_clear_prop (to, FONT_WEIGHT_INDEX); } else - err = 1; + err = true; } else if (EQ (keyword, QCslant)) { @@ -2317,7 +2315,7 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, Lisp_Object *to, font_clear_prop (to, FONT_SLANT_INDEX); } else - err = 1; + err = true; } else if (EQ (keyword, QCunderline)) { @@ -2327,7 +2325,7 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, Lisp_Object *to, || CONSP (value)) to[LFACE_UNDERLINE_INDEX] = value; else - err = 1; + err = true; } else if (EQ (keyword, QCoverline)) { @@ -2336,7 +2334,7 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, Lisp_Object *to, || STRINGP (value)) to[LFACE_OVERLINE_INDEX] = value; else - err = 1; + err = true; } else if (EQ (keyword, QCstrike_through)) { @@ -2345,7 +2343,7 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, Lisp_Object *to, || STRINGP (value)) to[LFACE_STRIKE_THROUGH_INDEX] = value; else - err = 1; + err = true; } else if (EQ (keyword, QCbox)) { @@ -2357,7 +2355,7 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, Lisp_Object *to, || NILP (value)) to[LFACE_BOX_INDEX] = value; else - err = 1; + err = true; } else if (EQ (keyword, QCinverse_video) || EQ (keyword, QCreverse_video)) @@ -2365,28 +2363,28 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, Lisp_Object *to, if (EQ (value, Qt) || NILP (value)) to[LFACE_INVERSE_INDEX] = value; else - err = 1; + err = true; } else if (EQ (keyword, QCforeground)) { if (STRINGP (value)) to[LFACE_FOREGROUND_INDEX] = value; else - err = 1; + err = true; } else if (EQ (keyword, QCdistant_foreground)) { if (STRINGP (value)) to[LFACE_DISTANT_FOREGROUND_INDEX] = value; else - err = 1; + err = true; } else if (EQ (keyword, QCbackground)) { if (STRINGP (value)) to[LFACE_BACKGROUND_INDEX] = value; else - err = 1; + err = true; } else if (EQ (keyword, QCstipple)) { @@ -2395,7 +2393,7 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, Lisp_Object *to, if (!NILP (pixmap_p)) to[LFACE_STIPPLE_INDEX] = value; else - err = 1; + err = true; #endif /* HAVE_WINDOW_SYSTEM */ } else if (EQ (keyword, QCwidth)) @@ -2406,14 +2404,14 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, Lisp_Object *to, font_clear_prop (to, FONT_WIDTH_INDEX); } else - err = 1; + err = true; } else if (EQ (keyword, QCfont)) { if (FONTP (value)) to[LFACE_FONT_INDEX] = value; else - err = 1; + err = true; } else if (EQ (keyword, QCinherit)) { @@ -2421,15 +2419,15 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, Lisp_Object *to, normal face reference. */ if (! merge_face_ref (f, value, to, err_msgs, named_merge_points)) - err = 1; + err = true; } else - err = 1; + err = true; if (err) { add_to_log ("Invalid face attribute %S %S", keyword, value); - ok = 0; + ok = false; } face_ref = XCDR (XCDR (face_ref)); @@ -2446,7 +2444,7 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, Lisp_Object *to, ok = merge_face_ref (f, next, to, err_msgs, named_merge_points); if (! merge_face_ref (f, first, to, err_msgs, named_merge_points)) - ok = 0; + ok = false; } } else @@ -2475,13 +2473,13 @@ Value is a vector of face attributes. */) int i; CHECK_SYMBOL (face); - global_lface = lface_from_face_name (NULL, face, 0); + global_lface = lface_from_face_name (NULL, face, false); if (!NILP (frame)) { CHECK_LIVE_FRAME (frame); f = XFRAME (frame); - lface = lface_from_face_name (f, face, 0); + lface = lface_from_face_name (f, face, false); } else f = NULL, lface = Qnil; @@ -2557,15 +2555,15 @@ Otherwise check for the existence of a global face. */) { Lisp_Object lface; - face = resolve_face_name (face, 1); + face = resolve_face_name (face, true); if (!NILP (frame)) { CHECK_LIVE_FRAME (frame); - lface = lface_from_face_name (XFRAME (frame), face, 0); + lface = lface_from_face_name (XFRAME (frame), face, false); } else - lface = lface_from_face_name (NULL, face, 0); + lface = lface_from_face_name (NULL, face, false); return lface; } @@ -2592,7 +2590,7 @@ The value is TO. */) { /* Copy global definition of FROM. We don't make copies of strings etc. because 20.2 didn't do it either. */ - lface = lface_from_face_name (NULL, from, 1); + lface = lface_from_face_name (NULL, from, true); copy = Finternal_make_lisp_face (to, Qnil); } else @@ -2602,7 +2600,7 @@ The value is TO. */) new_frame = frame; CHECK_LIVE_FRAME (frame); CHECK_LIVE_FRAME (new_frame); - lface = lface_from_face_name (XFRAME (frame), from, 1); + lface = lface_from_face_name (XFRAME (frame), from, true); copy = Finternal_make_lisp_face (to, new_frame); } @@ -2642,7 +2640,7 @@ FRAME 0 means change the face on all frames, and change the default CHECK_SYMBOL (face); CHECK_SYMBOL (attr); - face = resolve_face_name (face, 1); + face = resolve_face_name (face, true); /* If FRAME is 0, change face on all frames, and change the default for new frames. */ @@ -2658,7 +2656,7 @@ FRAME 0 means change the face on all frames, and change the default /* Set lface to the Lisp attribute vector of FACE. */ if (EQ (frame, Qt)) { - lface = lface_from_face_name (NULL, face, 1); + lface = lface_from_face_name (NULL, face, true); /* When updating face-new-frame-defaults, we put :ignore-defface where the caller wants `unspecified'. This forces the frame @@ -2675,7 +2673,7 @@ FRAME 0 means change the face on all frames, and change the default frame = selected_frame; CHECK_LIVE_FRAME (frame); - lface = lface_from_face_name (XFRAME (frame), face, 0); + lface = lface_from_face_name (XFRAME (frame), face, false); /* If a frame-local face doesn't exist yet, create one. */ if (NILP (lface)) @@ -2760,14 +2758,14 @@ FRAME 0 means change the face on all frames, and change the default } else if (EQ (attr, QCunderline)) { - bool valid_p = 0; + bool valid_p = false; if (UNSPECIFIEDP (value) || IGNORE_DEFFACE_P (value)) - valid_p = 1; + valid_p = true; else if (NILP (value) || EQ (value, Qt)) - valid_p = 1; + valid_p = true; else if (STRINGP (value) && SCHARS (value) > 0) - valid_p = 1; + valid_p = true; else if (CONSP (value)) { Lisp_Object key, val, list; @@ -2779,7 +2777,7 @@ FRAME 0 means change the face on all frames, and change the default Non-nil symbols other than t are not documented as being valid. Eg compare with inverse-video, which explicitly rejects them. */ - valid_p = 1; + valid_p = true; while (!NILP (CAR_SAFE(list))) { @@ -2790,7 +2788,7 @@ FRAME 0 means change the face on all frames, and change the default if (NILP (key) || NILP (val)) { - valid_p = 0; + valid_p = false; break; } @@ -2798,14 +2796,14 @@ FRAME 0 means change the face on all frames, and change the default && !(EQ (val, Qforeground_color) || (STRINGP (val) && SCHARS (val) > 0))) { - valid_p = 0; + valid_p = false; break; } else if (EQ (key, QCstyle) && !(EQ (val, Qline) || EQ (val, Qwave))) { - valid_p = 0; + valid_p = false; break; } } @@ -2855,9 +2853,9 @@ FRAME 0 means change the face on all frames, and change the default value = make_number (1); if (UNSPECIFIEDP (value) || IGNORE_DEFFACE_P (value)) - valid_p = 1; + valid_p = true; else if (NILP (value)) - valid_p = 1; + valid_p = true; else if (INTEGERP (value)) valid_p = XINT (value) != 0; else if (STRINGP (value)) @@ -2900,7 +2898,7 @@ FRAME 0 means change the face on all frames, and change the default valid_p = NILP (tem); } else - valid_p = 0; + valid_p = false; if (!valid_p) signal_error ("Invalid face box", value); @@ -3042,7 +3040,7 @@ FRAME 0 means change the face on all frames, and change the default signal_error ("Font not available", value); value = font_object; } - set_lface_from_font (f, lface, value, 1); + set_lface_from_font (f, lface, value, true); } } else @@ -3187,10 +3185,10 @@ FRAME 0 means change the face on all frames, and change the default struct frame *f = XFRAME (frame); if (FRAME_FACE_CACHE (f) == NULL) FRAME_FACE_CACHE (f) = make_face_cache (f); - FRAME_FACE_CACHE (f)->menu_face_changed_p = 1; + FRAME_FACE_CACHE (f)->menu_face_changed_p = true; } else - menu_face_changed_default = 1; + menu_face_changed_default = true; } if (!NILP (param)) @@ -3235,7 +3233,7 @@ update_face_from_frame_parameter (struct frame *f, Lisp_Object param, if (EQ (param, Qforeground_color)) { face = Qdefault; - lface = lface_from_face_name (f, face, 1); + lface = lface_from_face_name (f, face, true); ASET (lface, LFACE_FOREGROUND_INDEX, (STRINGP (new_value) ? new_value : Qunspecified)); realize_basic_faces (f); @@ -3251,7 +3249,7 @@ update_face_from_frame_parameter (struct frame *f, Lisp_Object param, call1 (Qframe_set_background_mode, frame); face = Qdefault; - lface = lface_from_face_name (f, face, 1); + lface = lface_from_face_name (f, face, true); ASET (lface, LFACE_BACKGROUND_INDEX, (STRINGP (new_value) ? new_value : Qunspecified)); realize_basic_faces (f); @@ -3260,21 +3258,21 @@ update_face_from_frame_parameter (struct frame *f, Lisp_Object param, else if (EQ (param, Qborder_color)) { face = Qborder; - lface = lface_from_face_name (f, face, 1); + lface = lface_from_face_name (f, face, true); ASET (lface, LFACE_BACKGROUND_INDEX, (STRINGP (new_value) ? new_value : Qunspecified)); } else if (EQ (param, Qcursor_color)) { face = Qcursor; - lface = lface_from_face_name (f, face, 1); + lface = lface_from_face_name (f, face, true); ASET (lface, LFACE_BACKGROUND_INDEX, (STRINGP (new_value) ? new_value : Qunspecified)); } else if (EQ (param, Qmouse_color)) { face = Qmouse; - lface = lface_from_face_name (f, face, 1); + lface = lface_from_face_name (f, face, true); ASET (lface, LFACE_BACKGROUND_INDEX, (STRINGP (new_value) ? new_value : Qunspecified)); } @@ -3318,7 +3316,7 @@ set_font_frame_param (Lisp_Object frame, Lisp_Object lface) return; ASET (lface, LFACE_FONT_INDEX, font); } - f->default_face_done_p = 0; + f->default_face_done_p = false; AUTO_FRAME_ARG (arg, Qfont, font); Fmodify_frame_parameters (frame, arg); } @@ -3348,11 +3346,11 @@ ordinary `x-get-resource' doesn't take a frame argument. */) /* Return resource string VALUE as a boolean value, i.e. nil, or t. If VALUE is "on" or "true", return t. If VALUE is "off" or - "false", return nil. Otherwise, if SIGNAL_P is non-zero, signal an - error; if SIGNAL_P is zero, return 0. */ + "false", return nil. Otherwise, if SIGNAL_P, signal an + error; if !SIGNAL_P, return 0. */ static Lisp_Object -face_boolean_x_resource_value (Lisp_Object value, int signal_p) +face_boolean_x_resource_value (Lisp_Object value, bool signal_p) { Lisp_Object result = make_number (0); @@ -3392,11 +3390,11 @@ DEFUN ("internal-set-lisp-face-attribute-from-resource", signal_error ("Invalid face height from X resource", value); } else if (EQ (attr, QCbold) || EQ (attr, QCitalic)) - value = face_boolean_x_resource_value (value, 1); + value = face_boolean_x_resource_value (value, true); else if (EQ (attr, QCweight) || EQ (attr, QCslant) || EQ (attr, QCwidth)) value = intern (SSDATA (value)); else if (EQ (attr, QCreverse_video) || EQ (attr, QCinverse_video)) - value = face_boolean_x_resource_value (value, 1); + value = face_boolean_x_resource_value (value, true); else if (EQ (attr, QCunderline) || EQ (attr, QCoverline) || EQ (attr, QCstrike_through)) @@ -3405,7 +3403,7 @@ DEFUN ("internal-set-lisp-face-attribute-from-resource", /* If the result of face_boolean_x_resource_value is t or nil, VALUE does NOT specify a color. */ - boolean_value = face_boolean_x_resource_value (value, 0); + boolean_value = face_boolean_x_resource_value (value, false); if (SYMBOLP (boolean_value)) value = boolean_value; } @@ -3439,10 +3437,10 @@ x_update_menu_appearance (struct frame *f) char line[512]; char *buf = line; ptrdiff_t bufsize = sizeof line; - Lisp_Object lface = lface_from_face_name (f, Qmenu, 1); + Lisp_Object lface = lface_from_face_name (f, Qmenu, true); struct face *face = FACE_FROM_ID (f, MENU_FACE_ID); const char *myname = SSDATA (Vx_resource_name); - bool changed_p = 0; + bool changed_p = false; #ifdef USE_MOTIF const char *popup_path = "popup_menu"; #else @@ -3458,7 +3456,7 @@ x_update_menu_appearance (struct frame *f) exprintf (&buf, &bufsize, line, -1, "%s.pane.menubar*foreground: %s", myname, SDATA (LFACE_FOREGROUND (lface))); XrmPutLineResource (&rdb, line); - changed_p = 1; + changed_p = true; } if (STRINGP (LFACE_BACKGROUND (lface))) @@ -3471,7 +3469,7 @@ x_update_menu_appearance (struct frame *f) exprintf (&buf, &bufsize, line, -1, "%s.pane.menubar*background: %s", myname, SDATA (LFACE_BACKGROUND (lface))); XrmPutLineResource (&rdb, line); - changed_p = 1; + changed_p = true; } if (face->font @@ -3514,7 +3512,7 @@ x_update_menu_appearance (struct frame *f) exprintf (&buf, &bufsize, line, -1, "%s.%s*font%s: %s", myname, popup_path, suffix, fontsetname); XrmPutLineResource (&rdb, line); - changed_p = 1; + changed_p = true; if (fontsetname != SSDATA (xlfd)) xfree (fontsetname); } @@ -3581,7 +3579,7 @@ frames). If FRAME is omitted or nil, use the selected frame. */) (Lisp_Object symbol, Lisp_Object keyword, Lisp_Object frame) { struct frame *f = EQ (frame, Qt) ? NULL : decode_live_frame (frame); - Lisp_Object lface = lface_from_face_name (f, symbol, 1), value = Qnil; + Lisp_Object lface = lface_from_face_name (f, symbol, true), value = Qnil; CHECK_SYMBOL (symbol); CHECK_SYMBOL (keyword); @@ -3664,8 +3662,8 @@ Default face attributes override any local face attributes. */) struct frame *f = XFRAME (frame); CHECK_LIVE_FRAME (frame); - global_lface = lface_from_face_name (NULL, face, 1); - local_lface = lface_from_face_name (f, face, 0); + global_lface = lface_from_face_name (NULL, face, true); + local_lface = lface_from_face_name (f, face, false); if (NILP (local_lface)) local_lface = Finternal_make_lisp_face (face, frame); @@ -3754,7 +3752,7 @@ return the font name used for CHARACTER. */) if (EQ (frame, Qt)) { Lisp_Object result = Qnil; - Lisp_Object lface = lface_from_face_name (NULL, face, 1); + Lisp_Object lface = lface_from_face_name (NULL, face, true); if (!UNSPECIFIEDP (LFACE_WEIGHT (lface)) && !EQ (LFACE_WEIGHT (lface), Qnormal)) @@ -3769,7 +3767,7 @@ return the font name used for CHARACTER. */) else { struct frame *f = decode_live_frame (frame); - int face_id = lookup_named_face (f, face, 1); + int face_id = lookup_named_face (f, face, true); struct face *fface = FACE_FROM_ID (f, face_id); if (! fface) @@ -3794,7 +3792,7 @@ return the font name used for CHARACTER. */) } -/* Compare face-attribute values v1 and v2 for equality. Value is non-zero if +/* Compare face-attribute values v1 and v2 for equality. Value is true if all attributes are `equal'. Tries to be fast because this function is called quite often. */ @@ -3804,22 +3802,22 @@ face_attr_equal_p (Lisp_Object v1, Lisp_Object v2) /* Type can differ, e.g. when one attribute is unspecified, i.e. nil, and the other is specified. */ if (XTYPE (v1) != XTYPE (v2)) - return 0; + return false; if (EQ (v1, v2)) - return 1; + return true; switch (XTYPE (v1)) { case Lisp_String: if (SBYTES (v1) != SBYTES (v2)) - return 0; + return false; return memcmp (SDATA (v1), SDATA (v2), SBYTES (v1)) == 0; case_Lisp_Int: case Lisp_Symbol: - return 0; + return false; default: return !NILP (Fequal (v1, v2)); @@ -3827,7 +3825,7 @@ face_attr_equal_p (Lisp_Object v1, Lisp_Object v2) } -/* Compare face vectors V1 and V2 for equality. Value is non-zero if +/* Compare face vectors V1 and V2 for equality. Value is true if all attributes are `equal'. Tries to be fast because this function is called quite often. */ @@ -3835,7 +3833,7 @@ static bool lface_equal_p (Lisp_Object *v1, Lisp_Object *v2) { int i; - bool equal_p = 1; + bool equal_p = true; for (i = 1; i < LFACE_VECTOR_SIZE && equal_p; ++i) equal_p = face_attr_equal_p (v1[i], v2[i]); @@ -3852,7 +3850,7 @@ If FRAME is t, report on the defaults for FACE1 and FACE2 (for new frames). If FRAME is omitted or nil, use the selected frame. */) (Lisp_Object face1, Lisp_Object face2, Lisp_Object frame) { - int equal_p; + bool equal_p; struct frame *f; Lisp_Object lface1, lface2; @@ -3862,8 +3860,8 @@ If FRAME is omitted or nil, use the selected frame. */) Emacs. That frame is not an X frame. */ f = EQ (frame, Qt) ? NULL : decode_live_frame (frame); - lface1 = lface_from_face_name (f, face1, 1); - lface2 = lface_from_face_name (f, face2, 1); + lface1 = lface_from_face_name (f, face1, true); + lface2 = lface_from_face_name (f, face2, true); equal_p = lface_equal_p (XVECTOR (lface1)->contents, XVECTOR (lface2)->contents); return equal_p ? Qt : Qnil; @@ -3879,7 +3877,7 @@ If FRAME is omitted or nil, use the selected frame. */) (Lisp_Object face, Lisp_Object frame) { struct frame *f = EQ (frame, Qt) ? NULL : decode_live_frame (frame); - Lisp_Object lface = lface_from_face_name (f, face, 1); + Lisp_Object lface = lface_from_face_name (f, face, true); int i; for (i = 1; i < LFACE_VECTOR_SIZE; ++i) @@ -3932,12 +3930,12 @@ lface_hash (Lisp_Object *v) #ifdef HAVE_WINDOW_SYSTEM -/* Return non-zero if LFACE1 and LFACE2 specify the same font (without +/* Return true if LFACE1 and LFACE2 specify the same font (without considering charsets/registries). They do if they specify the same family, point size, weight, width, slant, and font. Both LFACE1 and LFACE2 must be fully-specified. */ -static int +static bool lface_same_font_attributes_p (Lisp_Object *lface1, Lisp_Object *lface2) { eassert (lface_fully_specified_p (lface1) @@ -4094,10 +4092,12 @@ If FRAME is unspecified or nil, the current frame is used. */) XColor cdef1, cdef2; if (!(CONSP (color1) && parse_rgb_list (color1, &cdef1)) - && !(STRINGP (color1) && defined_color (f, SSDATA (color1), &cdef1, 0))) + && !(STRINGP (color1) + && defined_color (f, SSDATA (color1), &cdef1, false))) signal_error ("Invalid color", color1); if (!(CONSP (color2) && parse_rgb_list (color2, &cdef2)) - && !(STRINGP (color2) && defined_color (f, SSDATA (color2), &cdef2, 0))) + && !(STRINGP (color2) + && defined_color (f, SSDATA (color2), &cdef2, false))) signal_error ("Invalid color", color2); return make_number (color_distance (&cdef1, &cdef2)); @@ -4413,7 +4413,7 @@ face_for_font (struct frame *f, Lisp_Object font_object, struct face *base_face) face isn't realized and cannot be realized. */ int -lookup_named_face (struct frame *f, Lisp_Object symbol, int signal_p) +lookup_named_face (struct frame *f, Lisp_Object symbol, bool signal_p) { Lisp_Object attrs[LFACE_VECTOR_SIZE]; Lisp_Object symbol_attrs[LFACE_VECTOR_SIZE]; @@ -4480,7 +4480,7 @@ lookup_basic_face (struct frame *f, int face_id) /* If there is a remapping entry, lookup the face using NAME, which will handle the remapping too. */ - remapped_face_id = lookup_named_face (f, name, 0); + remapped_face_id = lookup_named_face (f, name, false); if (remapped_face_id < 0) return face_id; /* Give up. */ @@ -4582,7 +4582,7 @@ face_with_height (struct frame *f, int face_id, int height) int lookup_derived_face (struct frame *f, Lisp_Object symbol, int face_id, - int signal_p) + bool signal_p) { Lisp_Object attrs[LFACE_VECTOR_SIZE]; Lisp_Object symbol_attrs[LFACE_VECTOR_SIZE]; @@ -4608,7 +4608,7 @@ DEFUN ("face-attributes-as-vector", Fface_attributes_as_vector, lface = Fmake_vector (make_number (LFACE_VECTOR_SIZE), Qunspecified); merge_face_ref (XFRAME (selected_frame), plist, XVECTOR (lface)->contents, - 1, 0); + true, 0); return lface; } @@ -4673,7 +4673,7 @@ x_supports_face_attributes_p (struct frame *f, || (!UNSPECIFIEDP (attrs[LFACE_BOX_INDEX]) && face_attr_equal_p (attrs[LFACE_BOX_INDEX], def_attrs[LFACE_BOX_INDEX]))) - return 0; + return false; /* Check font-related attributes, as those are the most commonly "unsupported" on a window-system (because of missing fonts). */ @@ -4703,7 +4703,7 @@ x_supports_face_attributes_p (struct frame *f, supported. */ if (face->font == def_face->font || ! face->font) - return 0; + return false; for (i = FONT_TYPE_INDEX; i <= FONT_SIZE_INDEX; i++) if (! EQ (face->font->props[i], def_face->font->props[i])) { @@ -4711,18 +4711,18 @@ x_supports_face_attributes_p (struct frame *f, if (i < FONT_FOUNDRY_INDEX || i > FONT_REGISTRY_INDEX || face->font->driver->case_sensitive) - return 1; + return true; s1 = SYMBOL_NAME (face->font->props[i]); s2 = SYMBOL_NAME (def_face->font->props[i]); if (! EQ (Fcompare_strings (s1, make_number (0), Qnil, s2, make_number (0), Qnil, Qt), Qt)) - return 1; + return true; } - return 0; + return false; } /* Everything checks out, this face is supported. */ - return 1; + return true; } #endif /* HAVE_WINDOW_SYSTEM */ @@ -4771,7 +4771,7 @@ tty_supports_face_attributes_p (struct frame *f, || !UNSPECIFIEDP (attrs[LFACE_OVERLINE_INDEX]) || !UNSPECIFIEDP (attrs[LFACE_STRIKE_THROUGH_INDEX]) || !UNSPECIFIEDP (attrs[LFACE_BOX_INDEX])) - return 0; + return false; /* Test for terminal `capabilities' (non-color character attributes). */ @@ -4785,17 +4785,17 @@ tty_supports_face_attributes_p (struct frame *f, if (weight > 100) { if (def_weight > 100) - return 0; /* same as default */ + return false; /* same as default */ test_caps = TTY_CAP_BOLD; } else if (weight < 100) { if (def_weight < 100) - return 0; /* same as default */ + return false; /* same as default */ test_caps = TTY_CAP_DIM; } else if (def_weight == 100) - return 0; /* same as default */ + return false; /* same as default */ } /* font slant */ @@ -4805,7 +4805,7 @@ tty_supports_face_attributes_p (struct frame *f, { int def_slant = FONT_SLANT_NAME_NUMERIC (def_attrs[LFACE_SLANT_INDEX]); if (slant == 100 || slant == def_slant) - return 0; /* same as default */ + return false; /* same as default */ else test_caps |= TTY_CAP_ITALIC; } @@ -4815,11 +4815,11 @@ tty_supports_face_attributes_p (struct frame *f, if (!UNSPECIFIEDP (val)) { if (STRINGP (val)) - return 0; /* ttys can't use colored underlines */ + return false; /* ttys can't use colored underlines */ else if (EQ (CAR_SAFE (val), QCstyle) && EQ (CAR_SAFE (CDR_SAFE (val)), Qwave)) - return 0; /* ttys can't use wave underlines */ + return false; /* ttys can't use wave underlines */ else if (face_attr_equal_p (val, def_attrs[LFACE_UNDERLINE_INDEX])) - return 0; /* same as default */ + return false; /* same as default */ else test_caps |= TTY_CAP_UNDERLINE; } @@ -4829,7 +4829,7 @@ tty_supports_face_attributes_p (struct frame *f, if (!UNSPECIFIEDP (val)) { if (face_attr_equal_p (val, def_attrs[LFACE_INVERSE_INDEX])) - return 0; /* same as default */ + return false; /* same as default */ else test_caps |= TTY_CAP_INVERSE; } @@ -4844,12 +4844,12 @@ tty_supports_face_attributes_p (struct frame *f, Lisp_Object def_fg = def_attrs[LFACE_FOREGROUND_INDEX]; if (face_attr_equal_p (fg, def_fg)) - return 0; /* same as default */ + return false; /* same as default */ else if (! tty_lookup_color (f, fg, &fg_tty_color, &fg_std_color)) - return 0; /* not a valid color */ + return false; /* not a valid color */ else if (color_distance (&fg_tty_color, &fg_std_color) > TTY_SAME_COLOR_THRESHOLD) - return 0; /* displayed color is too different */ + return false; /* displayed color is too different */ else /* Make sure the color is really different than the default. */ { @@ -4857,7 +4857,7 @@ tty_supports_face_attributes_p (struct frame *f, if (tty_lookup_color (f, def_fg, &def_fg_color, 0) && (color_distance (&fg_tty_color, &def_fg_color) <= TTY_SAME_COLOR_THRESHOLD)) - return 0; + return false; } } @@ -4868,12 +4868,12 @@ tty_supports_face_attributes_p (struct frame *f, Lisp_Object def_bg = def_attrs[LFACE_BACKGROUND_INDEX]; if (face_attr_equal_p (bg, def_bg)) - return 0; /* same as default */ + return false; /* same as default */ else if (! tty_lookup_color (f, bg, &bg_tty_color, &bg_std_color)) - return 0; /* not a valid color */ + return false; /* not a valid color */ else if (color_distance (&bg_tty_color, &bg_std_color) > TTY_SAME_COLOR_THRESHOLD) - return 0; /* displayed color is too different */ + return false; /* displayed color is too different */ else /* Make sure the color is really different than the default. */ { @@ -4881,7 +4881,7 @@ tty_supports_face_attributes_p (struct frame *f, if (tty_lookup_color (f, def_bg, &def_bg_color, 0) && (color_distance (&bg_tty_color, &def_bg_color) <= TTY_SAME_COLOR_THRESHOLD)) - return 0; + return false; } } @@ -4896,7 +4896,7 @@ tty_supports_face_attributes_p (struct frame *f, - color_distance (&fg_tty_color, &bg_tty_color)); if (delta_delta > TTY_SAME_COLOR_THRESHOLD || delta_delta < -TTY_SAME_COLOR_THRESHOLD) - return 0; + return false; } @@ -4927,7 +4927,7 @@ satisfied by the tty display code's automatic substitution of a `dim' face for italic. */) (Lisp_Object attributes, Lisp_Object display) { - bool supports = 0; + bool supports = false; int i; Lisp_Object frame; struct frame *f; @@ -4962,7 +4962,7 @@ face for italic. */) for (i = 0; i < LFACE_VECTOR_SIZE; i++) attrs[i] = Qunspecified; - merge_face_ref (f, attributes, attrs, 1, 0); + merge_face_ref (f, attributes, attrs, true, 0); def_face = FACE_FROM_ID (f, DEFAULT_FACE_ID); if (def_face == NULL) @@ -5140,7 +5140,7 @@ face_fontset (Lisp_Object attrs[LFACE_VECTOR_SIZE]) static bool realize_basic_faces (struct frame *f) { - bool success_p = 0; + bool success_p = false; ptrdiff_t count = SPECPDL_INDEX (); /* Block input here so that we won't be surprised by an X expose @@ -5170,14 +5170,14 @@ realize_basic_faces (struct frame *f) /* Reflect changes in the `menu' face in menu bars. */ if (FRAME_FACE_CACHE (f)->menu_face_changed_p) { - FRAME_FACE_CACHE (f)->menu_face_changed_p = 0; + FRAME_FACE_CACHE (f)->menu_face_changed_p = false; #ifdef USE_X_TOOLKIT if (FRAME_WINDOW_P (f)) x_update_menu_appearance (f); #endif } - success_p = 1; + success_p = true; } unbind_to (count, Qnil); @@ -5199,7 +5199,7 @@ realize_default_face (struct frame *f) struct face *face; /* If the `default' face is not yet known, create it. */ - lface = lface_from_face_name (f, Qdefault, 0); + lface = lface_from_face_name (f, Qdefault, false); if (NILP (lface)) { Lisp_Object frame; @@ -5215,7 +5215,7 @@ realize_default_face (struct frame *f) XSETFONT (font_object, FRAME_FONT (f)); set_lface_from_font (f, lface, font_object, f->default_face_done_p); ASET (lface, LFACE_FONTSET_INDEX, fontset_name (FRAME_FONTSET (f))); - f->default_face_done_p = 1; + f->default_face_done_p = true; } #endif /* HAVE_WINDOW_SYSTEM */ @@ -5257,7 +5257,7 @@ realize_default_face (struct frame *f) if (CONSP (color) && STRINGP (XCDR (color))) ASET (lface, LFACE_FOREGROUND_INDEX, XCDR (color)); else if (FRAME_WINDOW_P (f)) - return 0; + return false; else if (FRAME_INITIAL_P (f) || FRAME_TERMCAP_P (f) || FRAME_MSDOS_P (f)) ASET (lface, LFACE_FOREGROUND_INDEX, build_string (unspecified_fg)); else @@ -5272,7 +5272,7 @@ realize_default_face (struct frame *f) if (CONSP (color) && STRINGP (XCDR (color))) ASET (lface, LFACE_BACKGROUND_INDEX, XCDR (color)); else if (FRAME_WINDOW_P (f)) - return 0; + return false; else if (FRAME_INITIAL_P (f) || FRAME_TERMCAP_P (f) || FRAME_MSDOS_P (f)) ASET (lface, LFACE_BACKGROUND_INDEX, build_string (unspecified_bg)); else @@ -5295,7 +5295,7 @@ realize_default_face (struct frame *f) /* This can happen when making a frame on a display that does not support the default font. */ if (!face->font) - return 0; + return false; /* Otherwise, the font specified for the frame was not acceptable as a font for the default face (perhaps because @@ -5305,7 +5305,7 @@ realize_default_face (struct frame *f) } #endif /* HAVE_X_WINDOWS */ #endif /* HAVE_WINDOW_SYSTEM */ - return 1; + return true; } @@ -5317,12 +5317,12 @@ static void realize_named_face (struct frame *f, Lisp_Object symbol, int id) { struct face_cache *c = FRAME_FACE_CACHE (f); - Lisp_Object lface = lface_from_face_name (f, symbol, 0); + Lisp_Object lface = lface_from_face_name (f, symbol, false); Lisp_Object attrs[LFACE_VECTOR_SIZE]; Lisp_Object symbol_attrs[LFACE_VECTOR_SIZE]; /* The default face must exist and be fully specified. */ - get_lface_attributes_no_remap (f, Qdefault, attrs, 1); + get_lface_attributes_no_remap (f, Qdefault, attrs, true); check_lface_attrs (attrs); eassert (lface_fully_specified_p (attrs)); @@ -5335,7 +5335,7 @@ realize_named_face (struct frame *f, Lisp_Object symbol, int id) } /* Merge SYMBOL's face with the default face. */ - get_lface_attributes_no_remap (f, symbol, symbol_attrs, 1); + get_lface_attributes_no_remap (f, symbol, symbol_attrs, true); merge_face_vectors (f, symbol_attrs, attrs, 0); /* Realize the face. */ @@ -5407,7 +5407,7 @@ realize_non_ascii_face (struct frame *f, Lisp_Object font_object, && FONT_WEIGHT_NUMERIC (font_object) <= 100); /* Don't try to free the colors copied bitwise from BASE_FACE. */ - face->colors_copied_bitwise_p = 1; + face->colors_copied_bitwise_p = true; face->font = NILP (font_object) ? NULL : XFONT_OBJECT (font_object); face->gc = 0; @@ -5491,7 +5491,7 @@ realize_x_face (struct face_cache *cache, Lisp_Object attrs[LFACE_VECTOR_SIZE]) if (face->font && FONT_WEIGHT_NAME_NUMERIC (attrs[LFACE_WEIGHT_INDEX]) > 100 && FONT_WEIGHT_NUMERIC (attrs[LFACE_FONT_INDEX]) <= 100) - face->overstrike = 1; + face->overstrike = true; /* Load colors, and set remaining attributes. */ @@ -5516,7 +5516,7 @@ realize_x_face (struct face_cache *cache, Lisp_Object attrs[LFACE_VECTOR_SIZE]) face->box = FACE_SIMPLE_BOX; face->box_line_width = XINT (box); face->box_color = face->foreground; - face->box_color_defaulted_p = 1; + face->box_color_defaulted_p = true; } else if (CONSP (box)) { @@ -5524,7 +5524,7 @@ realize_x_face (struct face_cache *cache, Lisp_Object attrs[LFACE_VECTOR_SIZE]) being one of `raised' or `sunken'. */ face->box = FACE_SIMPLE_BOX; face->box_color = face->foreground; - face->box_color_defaulted_p = 1; + face->box_color_defaulted_p = true; face->box_line_width = 1; while (CONSP (box)) @@ -5550,7 +5550,7 @@ realize_x_face (struct face_cache *cache, Lisp_Object attrs[LFACE_VECTOR_SIZE]) { face->box_color = load_color (f, face, value, LFACE_BOX_INDEX); - face->use_box_color_for_shadows_p = 1; + face->use_box_color_for_shadows_p = true; } } else if (EQ (keyword, QCstyle)) @@ -5569,34 +5569,34 @@ realize_x_face (struct face_cache *cache, Lisp_Object attrs[LFACE_VECTOR_SIZE]) if (EQ (underline, Qt)) { /* Use default color (same as foreground color). */ - face->underline_p = 1; + face->underline_p = true; face->underline_type = FACE_UNDER_LINE; - face->underline_defaulted_p = 1; + face->underline_defaulted_p = true; face->underline_color = 0; } else if (STRINGP (underline)) { /* Use specified color. */ - face->underline_p = 1; + face->underline_p = true; face->underline_type = FACE_UNDER_LINE; - face->underline_defaulted_p = 0; + face->underline_defaulted_p = false; face->underline_color = load_color (f, face, underline, LFACE_UNDERLINE_INDEX); } else if (NILP (underline)) { - face->underline_p = 0; - face->underline_defaulted_p = 0; + face->underline_p = false; + face->underline_defaulted_p = false; face->underline_color = 0; } else if (CONSP (underline)) { /* `(:color COLOR :style STYLE)'. STYLE being one of `line' or `wave'. */ - face->underline_p = 1; + face->underline_p = true; face->underline_color = 0; - face->underline_defaulted_p = 1; + face->underline_defaulted_p = true; face->underline_type = FACE_UNDER_LINE; /* FIXME? This is also not robust about checking the precise form. @@ -5617,12 +5617,12 @@ realize_x_face (struct face_cache *cache, Lisp_Object attrs[LFACE_VECTOR_SIZE]) { if (EQ (value, Qforeground_color)) { - face->underline_defaulted_p = 1; + face->underline_defaulted_p = true; face->underline_color = 0; } else if (STRINGP (value)) { - face->underline_defaulted_p = 0; + face->underline_defaulted_p = false; face->underline_color = load_color (f, face, value, LFACE_UNDERLINE_INDEX); } @@ -5643,13 +5643,13 @@ realize_x_face (struct face_cache *cache, Lisp_Object attrs[LFACE_VECTOR_SIZE]) face->overline_color = load_color (f, face, attrs[LFACE_OVERLINE_INDEX], LFACE_OVERLINE_INDEX); - face->overline_p = 1; + face->overline_p = true; } else if (EQ (overline, Qt)) { face->overline_color = face->foreground; - face->overline_color_defaulted_p = 1; - face->overline_p = 1; + face->overline_color_defaulted_p = true; + face->overline_p = true; } strike_through = attrs[LFACE_STRIKE_THROUGH_INDEX]; @@ -5658,13 +5658,13 @@ realize_x_face (struct face_cache *cache, Lisp_Object attrs[LFACE_VECTOR_SIZE]) face->strike_through_color = load_color (f, face, attrs[LFACE_STRIKE_THROUGH_INDEX], LFACE_STRIKE_THROUGH_INDEX); - face->strike_through_p = 1; + face->strike_through_p = true; } else if (EQ (strike_through, Qt)) { face->strike_through_color = face->foreground; - face->strike_through_color_defaulted_p = 1; - face->strike_through_p = 1; + face->strike_through_color_defaulted_p = true; + face->strike_through_p = true; } stipple = attrs[LFACE_STIPPLE_INDEX]; @@ -5678,15 +5678,15 @@ realize_x_face (struct face_cache *cache, Lisp_Object attrs[LFACE_VECTOR_SIZE]) /* Map a specified color of face FACE on frame F to a tty color index. IDX is either LFACE_FOREGROUND_INDEX or LFACE_BACKGROUND_INDEX, and - specifies which color to map. Set *DEFAULTED to 1 if mapping to the + specifies which color to map. Set *DEFAULTED to true if mapping to the default foreground/background colors. */ static void map_tty_color (struct frame *f, struct face *face, - enum lface_attribute_index idx, int *defaulted) + enum lface_attribute_index idx, bool *defaulted) { Lisp_Object frame, color, def; - int foreground_p = idx == LFACE_FOREGROUND_INDEX; + bool foreground_p = idx == LFACE_FOREGROUND_INDEX; unsigned long default_pixel = foreground_p ? FACE_TTY_DEFAULT_FG_COLOR : FACE_TTY_DEFAULT_BG_COLOR; unsigned long pixel = default_pixel; @@ -5728,7 +5728,7 @@ map_tty_color (struct frame *f, struct face *face, else pixel = FRAME_BACKGROUND_PIXEL (f); face->lface[idx] = tty_color_name (f, pixel); - *defaulted = 1; + *defaulted = true; } else if (pixel == default_other_pixel) { @@ -5737,7 +5737,7 @@ map_tty_color (struct frame *f, struct face *face, else pixel = FRAME_FOREGROUND_PIXEL (f); face->lface[idx] = tty_color_name (f, pixel); - *defaulted = 1; + *defaulted = true; } } #endif /* MSDOS */ @@ -5760,7 +5760,7 @@ realize_tty_face (struct face_cache *cache, { struct face *face; int weight, slant; - int face_colors_defaulted = 0; + bool face_colors_defaulted = false; struct frame *f = cache->f; /* Frame must be a termcap frame. */ @@ -5768,7 +5768,7 @@ realize_tty_face (struct face_cache *cache, /* Allocate a new realized face. */ face = make_realized_face (attrs); -#if 0 +#if false face->font_name = FRAME_MSDOS_P (cache->f) ? "ms-dos" : "tty"; #endif @@ -5776,13 +5776,13 @@ realize_tty_face (struct face_cache *cache, weight = FONT_WEIGHT_NAME_NUMERIC (attrs[LFACE_WEIGHT_INDEX]); slant = FONT_SLANT_NAME_NUMERIC (attrs[LFACE_SLANT_INDEX]); if (weight > 100) - face->tty_bold_p = 1; + face->tty_bold_p = true; if (slant != 100) - face->tty_italic_p = 1; + face->tty_italic_p = true; if (!NILP (attrs[LFACE_UNDERLINE_INDEX])) - face->tty_underline_p = 1; + face->tty_underline_p = true; if (!NILP (attrs[LFACE_INVERSE_INDEX])) - face->tty_reverse_p = 1; + face->tty_reverse_p = true; /* Map color names to color indices. */ map_tty_color (f, face, LFACE_FOREGROUND_INDEX, &face_colors_defaulted); @@ -5802,7 +5802,7 @@ realize_tty_face (struct face_cache *cache, && face->tty_bold_p && face->background == FACE_TTY_DEFAULT_FG_COLOR && face->foreground == FACE_TTY_DEFAULT_BG_COLOR) - face->tty_bold_p = 0; + face->tty_bold_p = false; return face; } @@ -5851,7 +5851,7 @@ compute_char_face (struct frame *f, int ch, Lisp_Object prop) Lisp_Object attrs[LFACE_VECTOR_SIZE]; struct face *default_face = FACE_FROM_ID (f, DEFAULT_FACE_ID); memcpy (attrs, default_face->lface, sizeof attrs); - merge_face_ref (f, prop, attrs, 1, 0); + merge_face_ref (f, prop, attrs, true, 0); face_id = lookup_face (f, attrs); } @@ -5869,7 +5869,7 @@ compute_char_face (struct frame *f, int ch, Lisp_Object prop) LIMIT is a position not to scan beyond. That is to limit the time this function can take. - If MOUSE is non-zero, use the character's mouse-face, not its face. + If MOUSE, use the character's mouse-face, not its face. BASE_FACE_ID, if non-negative, specifies a base face id to use instead of DEFAULT_FACE_ID. @@ -5879,7 +5879,7 @@ compute_char_face (struct frame *f, int ch, Lisp_Object prop) int face_at_buffer_position (struct window *w, ptrdiff_t pos, ptrdiff_t *endptr, ptrdiff_t limit, - int mouse, int base_face_id) + bool mouse, int base_face_id) { struct frame *f = XFRAME (w->frame); Lisp_Object attrs[LFACE_VECTOR_SIZE]; @@ -5912,7 +5912,7 @@ face_at_buffer_position (struct window *w, ptrdiff_t pos, { ptrdiff_t next_overlay; - GET_OVERLAYS_AT (pos, overlay_vec, noverlays, &next_overlay, 0); + GET_OVERLAYS_AT (pos, overlay_vec, noverlays, &next_overlay, false); if (next_overlay < endpos) endpos = next_overlay; } @@ -5945,7 +5945,7 @@ face_at_buffer_position (struct window *w, ptrdiff_t pos, /* Merge in attributes specified via text properties. */ if (!NILP (prop)) - merge_face_ref (f, prop, attrs, 1, 0); + merge_face_ref (f, prop, attrs, true, 0); /* Now merge the overlay data. */ noverlays = sort_overlays (overlay_vec, noverlays, w); @@ -5956,7 +5956,7 @@ face_at_buffer_position (struct window *w, ptrdiff_t pos, prop = Foverlay_get (overlay_vec[i], propname); if (!NILP (prop)) - merge_face_ref (f, prop, attrs, 1, 0); + merge_face_ref (f, prop, attrs, true, 0); oend = OVERLAY_END (overlay_vec[i]); oendpos = OVERLAY_POSITION (oend); @@ -5982,7 +5982,7 @@ face_at_buffer_position (struct window *w, ptrdiff_t pos, int face_for_overlay_string (struct window *w, ptrdiff_t pos, ptrdiff_t *endptr, ptrdiff_t limit, - int mouse, Lisp_Object overlay) + bool mouse, Lisp_Object overlay) { struct frame *f = XFRAME (w->frame); Lisp_Object attrs[LFACE_VECTOR_SIZE]; @@ -6021,7 +6021,7 @@ face_for_overlay_string (struct window *w, ptrdiff_t pos, /* Merge in attributes specified via text properties. */ if (!NILP (prop)) - merge_face_ref (f, prop, attrs, 1, 0); + merge_face_ref (f, prop, attrs, true, 0); *endptr = endpos; @@ -6043,7 +6043,7 @@ face_for_overlay_string (struct window *w, ptrdiff_t pos, BASE_FACE_ID is the id of a face to merge with. For strings coming from overlays or the `display' property it is the face at BUFPOS. - If MOUSE_P is non-zero, use the character's mouse-face, not its face. + If MOUSE_P, use the character's mouse-face, not its face. Set *ENDPTR to the next position where to check for faces in STRING; -1 if the face is constant from POS to the end of the @@ -6056,7 +6056,7 @@ int face_at_string_position (struct window *w, Lisp_Object string, ptrdiff_t pos, ptrdiff_t bufpos, ptrdiff_t *endptr, enum face_id base_face_id, - int mouse_p) + bool mouse_p) { Lisp_Object prop, position, end, limit; struct frame *f = XFRAME (WINDOW_FRAME (w)); @@ -6101,7 +6101,7 @@ face_at_string_position (struct window *w, Lisp_Object string, /* Merge in attributes specified via text properties. */ if (!NILP (prop)) - merge_face_ref (f, prop, attrs, 1, 0); + merge_face_ref (f, prop, attrs, true, 0); /* Look up a realized face with the given face attributes, or realize a new one for ASCII characters. */ commit d464b0ee300a1919f4398195974396e3e3d66d57 Merge: f93da81 81f7fcb Author: Joakim Verona Date: Mon Jan 26 21:57:51 2015 +0100 merge master commit f93da81268bb784d51d83db9413a6e9259aacfe1 Author: Joakim Verona Date: Mon Jan 26 21:56:44 2015 +0100 added hint to webkit buffer diff --git a/lisp/xwidget.el b/lisp/xwidget.el index e58ddcf..4ea2139 100644 --- a/lisp/xwidget.el +++ b/lisp/xwidget.el @@ -396,7 +396,7 @@ XW is the xwidget identifier, TEXT is retrieved from the webkit." ) (defun xwidget-webkit-adjust-size-to-window () - "Adjust webkit to window."m + "Adjust webkit to window." (interactive) (xwidget-resize ( xwidget-webkit-current-session) (window-pixel-width) (window-pixel-height))) @@ -421,7 +421,7 @@ Argument H height." ((bufname (generate-new-buffer-name "*xwidget-webkit*")) xw) (setq xwidget-webkit-last-session-buffer (switch-to-buffer (get-buffer-create bufname))) - (insert " ") + (insert " 'a' adjusts the xwidget size.") (setq xw (xwidget-insert 1 'webkit-osr bufname 1000 1000)) (xwidget-put xw 'callback 'xwidget-webkit-callback) (xwidget-webkit-mode) commit 81f7fcb4b8a4f370162def4fd42fd62674db96a5 Author: Paul Eggert Date: Mon Jan 26 11:21:45 2015 -0800 * INSTALL.REPO: Mention minimum Git version. diff --git a/ChangeLog b/ChangeLog index eecdad6..2ab8235 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2015-01-26 Paul Eggert + + * INSTALL.REPO: Mention minimum Git version. + 2015-01-25 Paul Eggert Use gnustep-config if available diff --git a/INSTALL.REPO b/INSTALL.REPO index df997fb..3431ee4 100644 --- a/INSTALL.REPO +++ b/INSTALL.REPO @@ -12,6 +12,8 @@ autoconf - at least the version specified near the start of configure.ac (in the AC_PREREQ command). automake - at least the version specified near the start of configure.ac (in the AM_INIT_AUTOMAKE command). +git - at least Git 1.7.1. If your repository was created by an older + Git version, you may need to reclone it. makeinfo - not strictly necessary, but highly recommended, so that you can build the manuals. commit e912f35dc5e882ddc5124e3552ee68088204fb47 Author: Andreas Schwab Date: Mon Jan 26 18:56:18 2015 +0100 * image.c (lookup_pixel_color): Reorder conditions that are written backwards. (x_to_xcolors): Likewise. (x_detect_edges): Likewise. (png_load_body): Likewise. (gif_close): Likewise. (gif_load): Likewise. diff --git a/src/ChangeLog b/src/ChangeLog index 4fc0de7..eb823b3 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2015-01-26 Andreas Schwab + + * image.c (lookup_pixel_color): Reorder conditions that are + written backwards. + (x_to_xcolors): Likewise. + (x_detect_edges): Likewise. + (png_load_body): Likewise. + (gif_close): Likewise. + (gif_load): Likewise. + 2015-01-25 Eli Zaretskii Use bool for boolean in w32term.c diff --git a/src/image.c b/src/image.c index 9c09c55..df299bb 100644 --- a/src/image.c +++ b/src/image.c @@ -4423,7 +4423,7 @@ lookup_pixel_color (struct frame *f, unsigned long pixel) Colormap cmap; bool rc; - if (ct_colors_allocated_max <= ct_colors_allocated) + if (ct_colors_allocated >= ct_colors_allocated_max) return FRAME_FOREGROUND_PIXEL (f); #ifdef HAVE_X_WINDOWS @@ -4554,7 +4554,7 @@ x_to_xcolors (struct frame *f, struct image *img, bool rgb_p) HGDIOBJ prev; #endif /* HAVE_NTGUI */ - if (min (PTRDIFF_MAX, SIZE_MAX) / sizeof *colors / img->width < img->height) + if (img->height > min (PTRDIFF_MAX, SIZE_MAX) / sizeof *colors / img->width) memory_full (SIZE_MAX); colors = xmalloc (sizeof *colors * img->width * img->height); @@ -4695,7 +4695,7 @@ x_detect_edges (struct frame *f, struct image *img, int *matrix, int color_adjus #define COLOR(A, X, Y) ((A) + (Y) * img->width + (X)) - if (min (PTRDIFF_MAX, SIZE_MAX) / sizeof *new / img->width < img->height) + if (img->height > min (PTRDIFF_MAX, SIZE_MAX) / sizeof *new / img->width) memory_full (SIZE_MAX); new = xmalloc (sizeof *new * img->width * img->height); @@ -5917,8 +5917,8 @@ png_load_body (struct frame *f, struct image *img, struct png_load_context *c) row_bytes = png_get_rowbytes (png_ptr, info_ptr); /* Allocate memory for the image. */ - if (min (PTRDIFF_MAX, SIZE_MAX) / sizeof *rows < height - || min (PTRDIFF_MAX, SIZE_MAX) / sizeof *pixels / height < row_bytes) + if (height > min (PTRDIFF_MAX, SIZE_MAX) / sizeof *rows + || row_bytes > min (PTRDIFF_MAX, SIZE_MAX) / sizeof *pixels / height) memory_full (SIZE_MAX); c->pixels = pixels = xmalloc (sizeof *pixels * row_bytes * height); c->rows = rows = xmalloc (height * sizeof *rows); @@ -7235,7 +7235,7 @@ gif_image_p (Lisp_Object object) # ifdef WINDOWSNT /* GIF library details. */ -# if 5 < GIFLIB_MAJOR + (1 <= GIFLIB_MINOR) +# if GIFLIB_MAJOR + (GIFLIB_MINOR >= 1) > 5 DEF_DLL_FN (int, DGifCloseFile, (GifFileType *, int *)); # else DEF_DLL_FN (int, DGifCloseFile, (GifFileType *)); @@ -7316,7 +7316,7 @@ gif_close (GifFileType *gif, int *err) { int retval; -#if 5 < GIFLIB_MAJOR + (1 <= GIFLIB_MINOR) +#if GIFLIB_MAJOR + (GIFLIB_MINOR >= 1) > 5 retval = DGifCloseFile (gif, err); #else retval = DGifCloseFile (gif); @@ -7471,7 +7471,7 @@ gif_load (struct frame *f, struct image *img) int subimg_height = subimage->ImageDesc.Height; int subimg_top = subimage->ImageDesc.Top; int subimg_left = subimage->ImageDesc.Left; - if (! (0 <= subimg_width && 0 <= subimg_height + if (! (subimg_width >= 0 && subimg_height >= 0 && 0 <= subimg_top && subimg_top <= height - subimg_height && 0 <= subimg_left && subimg_left <= width - subimg_width)) { commit 3b23e6a70294a3fee23353bfb8a23c7167d7c4ef Author: Eli Zaretskii Date: Mon Jan 26 19:41:38 2015 +0200 Fix the description of --insert command-line option (Bug#19694) doc/emacs/cmdargs.texi (Action Arguments): Clarify into which buffer '--insert' inserts. diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index d1378a3..93ae618 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,3 +1,8 @@ +2015-01-26 Eli Zaretskii + + * cmdargs.texi (Action Arguments): Clarify into which buffer + '--insert' inserts. (Bug#19694) + 2015-01-21 Eli Zaretskii * programs.texi (Custom C Indent): Fix a typo. (Bug#19647) diff --git a/doc/emacs/cmdargs.texi b/doc/emacs/cmdargs.texi index f724f77..42c8e33 100644 --- a/doc/emacs/cmdargs.texi +++ b/doc/emacs/cmdargs.texi @@ -165,9 +165,12 @@ Evaluate Lisp expression @var{expression}. @item --insert=@var{file} @opindex --insert @cindex insert file contents, command-line argument -Insert the contents of @var{file} into the @file{*scratch*} buffer -(@pxref{Lisp Interaction}). This is like what @kbd{M-x insert-file} -does (@pxref{Misc File Ops}). +Insert the contents of @var{file} into the buffer that is current when +this command-line argument is processed. Usually, this is the +@file{*scratch*} buffer (@pxref{Lisp Interaction}), but if arguments +earlier on the command line visit files or switch buffers, that might +be a different buffer. The effect of this command-line argument is +like what @kbd{M-x insert-file} does (@pxref{Misc File Ops}). @item --kill @opindex --kill commit a9a3d429e6e53e2be0b20e84f9809dba1d03e52d Author: Stefan Monnier Date: Mon Jan 26 11:43:06 2015 -0500 * lisp/emacs-lisp/cl-generic.el (cl--generic-method): New struct. (cl--generic): The method-table is now a (list-of cl--generic-method). (cl--generic-member-method): New function. (cl-generic-define-method): Use it. (cl--generic-build-combined-method, cl--generic-cache-miss): Adapt to new method-table. (cl--generic-no-next-method-function): Add `method' argument. (cl-generic-call-method): Adapt to new method representation. (cl--generic-cnm-sample, cl--generic-nnm-sample): Adjust. (cl-find-method, cl-method-qualifiers): New functions. (cl--generic-method-info): Adapt to new method representation. Return a string for the qualifiers. (cl--generic-describe): * lisp/emacs-lisp/eieio-opt.el (eieio-help-class): Adjust accordingly. (eieio-all-generic-functions, eieio-method-documentation): Adjust to new method representation. * lisp/emacs-lisp/eieio-compat.el (eieio--defmethod): Use cl-find-method. * test/automated/cl-generic-tests.el: Try and make sure cl-lib is not required at run-time. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0bdf4e2..ff352a2 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,27 @@ 2015-01-26 Stefan Monnier + + * emacs-lisp/cl-generic.el (cl--generic-method): New struct. + (cl--generic): The method-table is now a (list-of cl--generic-method). + (cl--generic-member-method): New function. + (cl-generic-define-method): Use it. + (cl--generic-build-combined-method, cl--generic-cache-miss): + Adapt to new method-table. + (cl--generic-no-next-method-function): Add `method' argument. + (cl-generic-call-method): Adapt to new method representation. + (cl--generic-cnm-sample, cl--generic-nnm-sample): Adjust. + (cl-find-method, cl-method-qualifiers): New functions. + (cl--generic-method-info): Adapt to new method representation. + Return a string for the qualifiers. + (cl--generic-describe): + * emacs-lisp/eieio-opt.el (eieio-help-class): Adjust accordingly. + (eieio-all-generic-functions, eieio-method-documentation): + Adjust to new method representation. + + * emacs-lisp/eieio-compat.el (eieio--defmethod): Use cl-find-method. + +2015-01-26 Stefan Monnier + * emacs-lisp/cl-generic.el: Add a method-combination hook. (cl-generic-method-combination-function): New var. (cl--generic-lambda): Remove `with-cnm' arg. diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el index 4245959..1bb7096 100644 --- a/lisp/emacs-lisp/cl-generic.el +++ b/lisp/emacs-lisp/cl-generic.el @@ -33,10 +33,6 @@ ;; code generation. Given how rarely method-combinations are used, ;; I just provided a cl-generic-method-combination-function, which ;; people can use if they are really desperate for such functionality. -;; - Method and generic function objects: CLOS defines methods as objects -;; (same for generic functions), whereas we don't offer such an abstraction. -;; - `no-next-method' should receive the "calling method" object, but since we -;; don't have such a thing, we pass nil instead. ;; - In defgeneric we don't support the options: ;; declare, :method-combination, :generic-function-class, :method-class, ;; :method. @@ -50,6 +46,8 @@ ;; eieio-core adds dispatch on: ;; - class of eieio objects ;; - actual class argument, using the syntax (subclass ). +;; - cl-generic-method-combination-function (i.s.o define-method-combination). +;; - cl-generic-call-method (which replaces make-method and call-method). ;; Efficiency considerations: overall, I've made an effort to make this fairly ;; efficient for the expected case (e.g. no constant redefinition of methods). @@ -103,6 +101,18 @@ that for all other (PRIORITY . TAGCODE) where PRIORITY ≤ N, then "Function to get the list of types that a given \"tag\" matches. They should be sorted from most specific to least specific.") +(cl-defstruct (cl--generic-method + (:constructor nil) + (:constructor cl--generic-method-make + (specializers qualifiers uses-cnm function)) + (:predicate nil)) + (specializers nil :read-only t :type list) + (qualifiers nil :read-only t :type (list-of atom)) + ;; USES-CNM is a boolean indicating if FUNCTION expects an extra argument + ;; holding the next-method. + (uses-cnm nil :read-only t :type boolean) + (function nil :read-only t :type function)) + (cl-defstruct (cl--generic (:constructor nil) (:constructor cl--generic-make @@ -116,12 +126,7 @@ They should be sorted from most specific to least specific.") ;; decide in which order to sort them. ;; The most important dispatch is last in the list (and the least is first). (dispatches nil :type (list-of (cons natnum (list-of tagcode)))) - ;; `method-table' is a list of - ;; ((SPECIALIZERS . QUALIFIERS) USES-CNM . FUNCTION), where - ;; USES-CNM is a boolean indicating if FUNCTION calls `cl-call-next-method' - ;; (and hence expects an extra argument holding the next-method). - (method-table nil :type (list-of (cons (cons (list-of type) (list-of atom)) - (cons boolean function))))) + (method-table nil :type (list-of cl--generic-method))) (defmacro cl--generic (name) `(get ,name 'cl--generic)) @@ -344,15 +349,25 @@ which case this method will be invoked when the argument is `eql' to VAL. (cl-generic-define-method ',name ',qualifiers ',args ,uses-cnm ,fun))))) +(defun cl--generic-member-method (specializers qualifiers methods) + (while + (and methods + (let ((m (car methods))) + (not (and (equal (cl--generic-method-specializers m) specializers) + (equal (cl--generic-method-qualifiers m) qualifiers))))) + (setq methods (cdr methods)) + methods)) + ;;;###autoload (defun cl-generic-define-method (name qualifiers args uses-cnm function) (let* ((generic (cl-generic-ensure-function name)) (mandatory (cl--generic-mandatory-args args)) (specializers (mapcar (lambda (arg) (if (consp arg) (cadr arg) t)) mandatory)) - (key (cons specializers qualifiers)) + (method (cl--generic-method-make + specializers qualifiers uses-cnm function)) (mt (cl--generic-method-table generic)) - (me (assoc key mt)) + (me (cl--generic-member-method specializers qualifiers mt)) (dispatches (cl--generic-dispatches generic)) (i 0)) (dolist (specializer specializers) @@ -367,9 +382,8 @@ which case this method will be invoked when the argument is `eql' to VAL. (nreverse (sort (cons tagcode (cdr x)) #'car-less-than-car)))) (setq i (1+ i)))) - (if me (setcdr me (cons uses-cnm function)) - (setf (cl--generic-method-table generic) - (cons `(,key ,uses-cnm . ,function) mt))) + (if me (setcar me method) + (setf (cl--generic-method-table generic) (cons method mt))) (cl-pushnew `(cl-defmethod . (,(cl--generic-name generic) . ,specializers)) current-load-list :test #'equal) (let ((gfun (cl--generic-make-function generic)) @@ -459,47 +473,40 @@ for all those different tags in the method-cache.") (gethash (cons generic-name methods) cl--generic-combined-method-memoization) (let ((mets-by-qual ())) - (dolist (qm methods) - (let* ((qualifiers (cdar qm)) + (dolist (method methods) + (let* ((qualifiers (cl--generic-method-qualifiers method)) (x (assoc qualifiers mets-by-qual))) ;; FIXME: sadly, alist-get only uses `assq' and we need `assoc'. ;;(push (cdr qm) (alist-get qualifiers mets-by-qual))) (if x - (push (cdr qm) (cdr x)) - (push (list qualifiers (cdr qm)) mets-by-qual)))) + (push method (cdr x)) + (push (list qualifiers method) mets-by-qual)))) (funcall cl-generic-method-combination-function generic-name mets-by-qual)))) -(defun cl--generic-no-next-method-function (generic) +(defun cl--generic-no-next-method-function (generic method) (lambda (&rest args) - ;; FIXME: CLOS passes as second arg the "calling method". - ;; We don't currently have "method objects" like CLOS - ;; does so we can't really do it the CLOS way. - ;; The closest would be to pass the lambda corresponding - ;; to the method, or maybe the ((SPECIALIZERS - ;; . QUALIFIER) USE-CNM . FUNCTION) entry from the method - ;; table, but the caller wouldn't be able to do much with - ;; it anyway. So we pass nil for now. - (apply #'cl-no-next-method generic nil args))) + (apply #'cl-no-next-method generic method args))) (defun cl-generic-call-method (generic-name method &optional fun) "Return a function that calls METHOD. FUN is the function that should be called when METHOD calls `call-next-method'." - (pcase method - (`(nil . ,method) method) - (`(,_uses-cnm . ,method) - (let ((next (or fun (cl--generic-no-next-method-function generic-name)))) - (lambda (&rest args) - (apply method - ;; FIXME: This sucks: passing just `next' would - ;; be a lot more efficient than the lambda+apply - ;; quasi-η, but we need this to implement the - ;; "if call-next-method is called with no - ;; arguments, then use the previous arguments". - (lambda (&rest cnm-args) - (apply next (or cnm-args args))) - args)))))) + (if (not (cl--generic-method-uses-cnm method)) + (cl--generic-method-function method) + (let ((met-fun (cl--generic-method-function method)) + (next (or fun (cl--generic-no-next-method-function + generic-name method)))) + (lambda (&rest args) + (apply met-fun + ;; FIXME: This sucks: passing just `next' would + ;; be a lot more efficient than the lambda+apply + ;; quasi-η, but we need this to implement the + ;; "if call-next-method is called with no + ;; arguments, then use the previous arguments". + (lambda (&rest cnm-args) + (apply next (or cnm-args args))) + args))))) (defun cl--generic-standard-method-combination (generic-name mets-by-qual) (dolist (x mets-by-qual) @@ -533,10 +540,10 @@ FUN is the function that should be called when METHOD calls (setq fun (cl-generic-call-method generic-name method fun))) fun)))) -(defconst cl--generic-nnm-sample (cl--generic-no-next-method-function 'dummy)) +(defconst cl--generic-nnm-sample (cl--generic-no-next-method-function t t)) (defconst cl--generic-cnm-sample (funcall (cl--generic-build-combined-method - nil `(((specializer . nil) t . ,#'identity))))) + nil (list (cl--generic-method-make () () t #'identity))))) (defun cl--generic-isnot-nnm-p (cnm) "Return non-nil if CNM is the function that calls `cl-no-next-method'." @@ -567,11 +574,13 @@ FUN is the function that should be called when METHOD calls (defun cl--generic-cache-miss (generic dispatch-arg dispatches-left tags) (let ((types (apply #'append (mapcar cl-generic-tag-types-function tags))) (methods '())) - (dolist (method-desc (cl--generic-method-table generic)) - (let* ((specializer (or (nth dispatch-arg (caar method-desc)) t)) + (dolist (method (cl--generic-method-table generic)) + (let* ((specializer (or (nth dispatch-arg + (cl--generic-method-specializers method)) + t)) (m (member specializer types))) (when m - (push (cons (length m) method-desc) methods)))) + (push (cons (length m) method) methods)))) ;; Sort the methods, most specific first. ;; It would be tempting to sort them once and for all in the method-table ;; rather than here, but the order might depend on the actual argument @@ -614,6 +623,14 @@ Can only be used from within the lexical body of a primary or around method." (declare (obsolete "make sure there's always a next method, or catch `cl-no-next-method' instead" "25.1")) (error "cl-next-method-p only allowed inside primary and around methods")) +;;;###autoload +(defun cl-find-method (generic qualifiers specializers) + (car (cl--generic-member-method + specializers qualifiers + (cl--generic-method-table (cl--generic generic))))) + +(defalias 'cl-method-qualifiers 'cl--generic-method-qualifiers) + ;;; Add support for describe-function (defun cl--generic-search-method (met-name) @@ -638,22 +655,30 @@ Can only be used from within the lexical body of a primary or around method." `(cl-defmethod . ,#'cl--generic-search-method))) (defun cl--generic-method-info (method) - (pcase-let ((`((,specializers . ,qualifier) ,uses-cnm . ,function) method)) - (let* ((args (help-function-arglist function 'names)) - (docstring (documentation function)) - (doconly (if docstring - (let ((split (help-split-fundoc docstring nil))) - (if split (cdr split) docstring)))) - (combined-args ())) - (if uses-cnm (setq args (cdr args))) - (dolist (specializer specializers) - (let ((arg (if (eq '&rest (car args)) - (intern (format "arg%d" (length combined-args))) - (pop args)))) - (push (if (eq specializer t) arg (list arg specializer)) - combined-args))) - (setq combined-args (append (nreverse combined-args) args)) - (list qualifier combined-args doconly)))) + (let* ((specializers (cl--generic-method-specializers method)) + (qualifiers (cl--generic-method-qualifiers method)) + (uses-cnm (cl--generic-method-uses-cnm method)) + (function (cl--generic-method-function method)) + (args (help-function-arglist function 'names)) + (docstring (documentation function)) + (qual-string + (if (null qualifiers) "" + (cl-assert (consp qualifiers)) + (let ((s (prin1-to-string qualifiers))) + (concat (substring s 1 -1) " ")))) + (doconly (if docstring + (let ((split (help-split-fundoc docstring nil))) + (if split (cdr split) docstring)))) + (combined-args ())) + (if uses-cnm (setq args (cdr args))) + (dolist (specializer specializers) + (let ((arg (if (eq '&rest (car args)) + (intern (format "arg%d" (length combined-args))) + (pop args)))) + (push (if (eq specializer t) arg (list arg specializer)) + combined-args))) + (setq combined-args (append (nreverse combined-args) args)) + (list qual-string combined-args doconly))) (add-hook 'help-fns-describe-function-functions #'cl--generic-describe) (defun cl--generic-describe (function) @@ -667,8 +692,9 @@ Can only be used from within the lexical body of a primary or around method." (dolist (method (cl--generic-method-table generic)) (let* ((info (cl--generic-method-info method))) ;; FIXME: Add hyperlinks for the types as well. - (insert (format "%S %S" (nth 0 info) (nth 1 info))) - (let* ((met-name (cons function (caar method))) + (insert (format "%s%S" (nth 0 info) (nth 1 info))) + (let* ((met-name (cons function + (cl--generic-method-specializers method))) (file (find-lisp-object-file-name met-name 'cl-defmethod))) (when file (insert " in `") diff --git a/lisp/emacs-lisp/eieio-compat.el b/lisp/emacs-lisp/eieio-compat.el index 30bb5ce..fcca99d 100644 --- a/lisp/emacs-lisp/eieio-compat.el +++ b/lisp/emacs-lisp/eieio-compat.el @@ -203,11 +203,10 @@ Summary: ;; or :after, make sure there's a matching dummy primary. (when (and (memq kind '(:before :after)) ;; FIXME: Use `cl-find-method'? - (not (assoc (cons (mapcar (lambda (arg) - (if (consp arg) (nth 1 arg) t)) - specializers) - nil) - (cl--generic-method-table (cl--generic method))))) + (not (cl-find-method method () + (mapcar (lambda (arg) + (if (consp arg) (nth 1 arg) t)) + specializers)))) (cl-generic-define-method method () specializers t (lambda (cnm &rest args) (if (cl--generic-isnot-nnm-p cnm) diff --git a/lisp/emacs-lisp/eieio-opt.el b/lisp/emacs-lisp/eieio-opt.el index a131b02..8d40edf 100644 --- a/lisp/emacs-lisp/eieio-opt.el +++ b/lisp/emacs-lisp/eieio-opt.el @@ -129,9 +129,9 @@ If CLASS is actually an object, then also display current values of that object. (insert "`") (help-insert-xref-button (symbol-name generic) 'help-function generic) (insert "'") - (pcase-dolist (`(,qualifier ,args ,doc) + (pcase-dolist (`(,qualifiers ,args ,doc) (eieio-method-documentation generic class)) - (insert (format " %S %S\n" qualifier args) + (insert (format " %s%S\n" qualifiers args) (or doc ""))) (insert "\n\n"))))) @@ -325,10 +325,9 @@ methods for CLASS." (and generic (catch 'found (if (null class) (throw 'found t)) - (pcase-dolist (`((,specializers . ,_qualifier) . ,_) - (cl--generic-method-table generic)) + (dolist (method (cl--generic-method-table generic)) (if (eieio--specializers-apply-to-class-p - specializers class) + (cl--generic-method-specializers method) class) (throw 'found t)))) (push symbol l))))) l)) @@ -336,15 +335,14 @@ methods for CLASS." (defun eieio-method-documentation (generic class) "Return info for all methods of GENERIC applicable to CLASS. The value returned is a list of elements of the form -\(QUALIFIER ARGS DOC)." +\(QUALIFIERS ARGS DOC)." (let ((generic (cl--generic generic)) (docs ())) (when generic (dolist (method (cl--generic-method-table generic)) - (pcase-let ((`((,specializers . ,_qualifier) . ,_) method)) - (when (eieio--specializers-apply-to-class-p - specializers class) - (push (cl--generic-method-info method) docs))))) + (when (eieio--specializers-apply-to-class-p + (cl--generic-method-specializers method) class) + (push (cl--generic-method-info method) docs)))) docs)) ;;; METHOD STATS diff --git a/test/ChangeLog b/test/ChangeLog index 9a31da4..61ab8b6 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,5 +1,10 @@ 2015-01-26 Stefan Monnier + * automated/cl-generic-tests.el: Try and make sure cl-lib is not + required at run-time. + +2015-01-26 Stefan Monnier + * automated/cl-generic-tests.el (cl-generic-test-11-next-method-p): New test. diff --git a/test/automated/cl-generic-tests.el b/test/automated/cl-generic-tests.el index 5b3a9fd..5194802 100644 --- a/test/automated/cl-generic-tests.el +++ b/test/automated/cl-generic-tests.el @@ -23,8 +23,8 @@ ;;; Code: -(require 'ert) -(require 'cl-lib) +(eval-when-compile (require 'ert)) ;Don't indirectly require cl-lib at run-time. +(require 'cl-generic) (cl-defgeneric cl--generic-1 (x y)) (cl-defgeneric (setf cl--generic-1) (v y z) "My generic doc.") commit 4cdde9196fb4fafb00b0c51b908fd605274147bd Author: Stefan Monnier Date: Mon Jan 26 09:04:55 2015 -0500 * lisp/emacs-lisp/cl-generic.el: Add a method-combination hook. (cl-generic-method-combination-function): New var. (cl--generic-lambda): Remove `with-cnm' arg. (cl-defmethod): Change accordingly. (cl-generic-define-method): Don't check qualifiers validity. Preserve all qualifiers in `method-table'. (cl-generic-call-method): New function. (cl--generic-nest): Remove (morph into cl-generic-call-method). (cl--generic-build-combined-method): Adjust to new format of method-table and use cl-generic-method-combination-function. (cl--generic-standard-method-combination): New function, extracted from cl--generic-build-combined-method. (cl--generic-cnm-sample): Adjust to new format of method-table. * lisp/emacs-lisp/eieio-compat.el (eieio--defmethod): Use () qualifiers instead of :primary. * lisp/emacs-lisp/eieio-datadebug.el (eieio-debug-methodinvoke): Remove obsolete function. * test/automated/cl-generic-tests.el (cl-generic-test-11-next-method-p): New test. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 8af0ec4..0bdf4e2 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,25 @@ +2015-01-26 Stefan Monnier + + * emacs-lisp/cl-generic.el: Add a method-combination hook. + (cl-generic-method-combination-function): New var. + (cl--generic-lambda): Remove `with-cnm' arg. + (cl-defmethod): Change accordingly. + (cl-generic-define-method): Don't check qualifiers validity. + Preserve all qualifiers in `method-table'. + (cl-generic-call-method): New function. + (cl--generic-nest): Remove (morph into cl-generic-call-method). + (cl--generic-build-combined-method): Adjust to new format of method-table + and use cl-generic-method-combination-function. + (cl--generic-standard-method-combination): New function, extracted from + cl--generic-build-combined-method. + (cl--generic-cnm-sample): Adjust to new format of method-table. + + * emacs-lisp/eieio-compat.el (eieio--defmethod): Use () qualifiers + instead of :primary. + + * emacs-lisp/eieio-datadebug.el (eieio-debug-methodinvoke): + Remove obsolete function. + 2015-01-26 Lars Ingebrigtsen * net/shr.el (shr-make-table-1): Fix colspan typo. diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el index 02a4351..4245959 100644 --- a/lisp/emacs-lisp/cl-generic.el +++ b/lisp/emacs-lisp/cl-generic.el @@ -30,7 +30,9 @@ ;; CLOS's define-method-combination is IMO overly complicated, and it suffers ;; from a significant problem: the method-combination code returns a sexp ;; that needs to be `eval'uated or compiled. IOW it requires run-time -;; code generation. +;; code generation. Given how rarely method-combinations are used, +;; I just provided a cl-generic-method-combination-function, which +;; people can use if they are really desperate for such functionality. ;; - Method and generic function objects: CLOS defines methods as objects ;; (same for generic functions), whereas we don't offer such an abstraction. ;; - `no-next-method' should receive the "calling method" object, but since we @@ -115,10 +117,10 @@ They should be sorted from most specific to least specific.") ;; The most important dispatch is last in the list (and the least is first). (dispatches nil :type (list-of (cons natnum (list-of tagcode)))) ;; `method-table' is a list of - ;; ((SPECIALIZERS . QUALIFIER) USES-CNM . FUNCTION), where + ;; ((SPECIALIZERS . QUALIFIERS) USES-CNM . FUNCTION), where ;; USES-CNM is a boolean indicating if FUNCTION calls `cl-call-next-method' ;; (and hence expects an extra argument holding the next-method). - (method-table nil :type (list-of (cons (cons (list-of type) keyword) + (method-table nil :type (list-of (cons (cons (list-of type) (list-of atom)) (cons boolean function))))) (defmacro cl--generic (name) @@ -232,7 +234,7 @@ This macro can only be used within the lexical scope of a cl-generic method." (and (memq sexp vars) (not (memq sexp res)) (push sexp res)) res)) - (defun cl--generic-lambda (args body with-cnm) + (defun cl--generic-lambda (args body) "Make the lambda expression for a method with ARGS and BODY." (let ((plain-args ()) (specializers nil) @@ -255,36 +257,34 @@ This macro can only be used within the lexical scope of a cl-generic method." . ,(lambda () specializers)) macroexpand-all-environment))) (require 'cl-lib) ;Needed to expand `cl-flet' and `cl-function'. - (if (not with-cnm) - (cons nil (macroexpand-all fun macroenv)) - ;; First macroexpand away the cl-function stuff (e.g. &key and - ;; destructuring args, `declare' and whatnot). - (pcase (macroexpand fun macroenv) - (`#'(lambda ,args . ,body) - (let* ((doc-string (and doc-string (stringp (car body)) (cdr body) - (pop body))) - (cnm (make-symbol "cl--cnm")) - (nmp (make-symbol "cl--nmp")) - (nbody (macroexpand-all - `(cl-flet ((cl-call-next-method ,cnm) - (cl-next-method-p ,nmp)) - ,@body) - macroenv)) - ;; FIXME: Rather than `grep' after the fact, the - ;; macroexpansion should directly set some flag when cnm - ;; is used. - ;; FIXME: Also, optimize the case where call-next-method is - ;; only called with explicit arguments. - (uses-cnm (cl--generic-fgrep (list cnm nmp) nbody))) - (cons (not (not uses-cnm)) - `#'(lambda (,@(if uses-cnm (list cnm)) ,@args) - ,@(if doc-string (list doc-string)) - ,(if (not (memq nmp uses-cnm)) - nbody - `(let ((,nmp (lambda () - (cl--generic-isnot-nnm-p ,cnm)))) - ,nbody)))))) - (f (error "Unexpected macroexpansion result: %S" f)))))))) + ;; First macroexpand away the cl-function stuff (e.g. &key and + ;; destructuring args, `declare' and whatnot). + (pcase (macroexpand fun macroenv) + (`#'(lambda ,args . ,body) + (let* ((doc-string (and doc-string (stringp (car body)) (cdr body) + (pop body))) + (cnm (make-symbol "cl--cnm")) + (nmp (make-symbol "cl--nmp")) + (nbody (macroexpand-all + `(cl-flet ((cl-call-next-method ,cnm) + (cl-next-method-p ,nmp)) + ,@body) + macroenv)) + ;; FIXME: Rather than `grep' after the fact, the + ;; macroexpansion should directly set some flag when cnm + ;; is used. + ;; FIXME: Also, optimize the case where call-next-method is + ;; only called with explicit arguments. + (uses-cnm (cl--generic-fgrep (list cnm nmp) nbody))) + (cons (not (not uses-cnm)) + `#'(lambda (,@(if uses-cnm (list cnm)) ,@args) + ,@(if doc-string (list doc-string)) + ,(if (not (memq nmp uses-cnm)) + nbody + `(let ((,nmp (lambda () + (cl--generic-isnot-nnm-p ,cnm)))) + ,nbody)))))) + (f (error "Unexpected macroexpansion result: %S" f))))))) ;;;###autoload @@ -324,8 +324,7 @@ which case this method will be invoked when the argument is `eql' to VAL. (while (not (listp args)) (push args qualifiers) (setq args (pop body))) - (pcase-let* ((with-cnm (not (memq (car qualifiers) '(:before :after)))) - (`(,uses-cnm . ,fun) (cl--generic-lambda args body with-cnm))) + (pcase-let* ((`(,uses-cnm . ,fun) (cl--generic-lambda args body))) `(progn ,(when setfizer (setq name (car setfizer)) @@ -347,15 +346,11 @@ which case this method will be invoked when the argument is `eql' to VAL. ;;;###autoload (defun cl-generic-define-method (name qualifiers args uses-cnm function) - (when (> (length qualifiers) 1) - (error "We only support a single qualifier per method: %S" qualifiers)) - (unless (memq (car qualifiers) '(nil :primary :around :after :before)) - (error "Unsupported qualifier in: %S" qualifiers)) (let* ((generic (cl-generic-ensure-function name)) (mandatory (cl--generic-mandatory-args args)) (specializers (mapcar (lambda (arg) (if (consp arg) (cadr arg) t)) mandatory)) - (key (cons specializers (or (car qualifiers) ':primary))) + (key (cons specializers qualifiers)) (mt (cl--generic-method-table generic)) (me (assoc key mt)) (dispatches (cl--generic-dispatches generic)) @@ -438,22 +433,19 @@ which case this method will be invoked when the argument is `eql' to VAL. (cdr dispatch) (car dispatch)))) (funcall dispatcher generic dispatches))))) -(defun cl--generic-nest (fun methods) - (pcase-dolist (`(,uses-cnm . ,method) methods) - (setq fun - (if (not uses-cnm) method - (let ((next fun)) - (lambda (&rest args) - (apply method - ;; FIXME: This sucks: passing just `next' would - ;; be a lot more efficient than the lambda+apply - ;; quasi-η, but we need this to implement the - ;; "if call-next-method is called with no - ;; arguments, then use the previous arguments". - (lambda (&rest cnm-args) - (apply next (or cnm-args args))) - args)))))) - fun) +(defvar cl-generic-method-combination-function + #'cl--generic-standard-method-combination + "Function to build the effective method. +Called with 2 arguments: NAME and METHOD-ALIST. +It should return an effective method, i.e. a function that expects the same +arguments as the methods, and calls those methods in some appropriate order. +NAME is the name (a symbol) of the corresponding generic function. +METHOD-ALIST is a list of elements (QUALIFIERS . METHODS) where +QUALIFIERS is a list of qualifiers, and METHODS is a list of the selected +methods for that qualifier list. +The METHODS lists are sorted from most generic first to most specific last. +The function can use `cl-generic-call-method' to create functions that call those +methods.") (defvar cl--generic-combined-method-memoization (make-hash-table :test #'equal :weakness 'value) @@ -462,6 +454,22 @@ This is particularly useful when many different tags select the same set of methods, since this table then allows us to share a single combined-method for all those different tags in the method-cache.") +(defun cl--generic-build-combined-method (generic-name methods) + (cl--generic-with-memoization + (gethash (cons generic-name methods) + cl--generic-combined-method-memoization) + (let ((mets-by-qual ())) + (dolist (qm methods) + (let* ((qualifiers (cdar qm)) + (x (assoc qualifiers mets-by-qual))) + ;; FIXME: sadly, alist-get only uses `assq' and we need `assoc'. + ;;(push (cdr qm) (alist-get qualifiers mets-by-qual))) + (if x + (push (cdr qm) (cdr x)) + (push (list qualifiers (cdr qm)) mets-by-qual)))) + (funcall cl-generic-method-combination-function + generic-name mets-by-qual)))) + (defun cl--generic-no-next-method-function (generic) (lambda (&rest args) ;; FIXME: CLOS passes as second arg the "calling method". @@ -474,42 +482,61 @@ for all those different tags in the method-cache.") ;; it anyway. So we pass nil for now. (apply #'cl-no-next-method generic nil args))) -(defun cl--generic-build-combined-method (generic-name methods) - (let ((mets-by-qual ())) - (dolist (qm methods) - (push (cdr qm) (alist-get (cdar qm) mets-by-qual))) - (cl--generic-with-memoization - (gethash (cons generic-name mets-by-qual) - cl--generic-combined-method-memoization) - (cond - ((null mets-by-qual) - (lambda (&rest args) - (apply #'cl-no-applicable-method generic-name args))) - ((null (alist-get :primary mets-by-qual)) - (lambda (&rest args) - (apply #'cl-no-primary-method generic-name args))) - (t - (let* ((fun (cl--generic-no-next-method-function generic-name)) - ;; We use `cdr' to drop the `uses-cnm' annotations. - (before - (mapcar #'cdr (reverse (alist-get :before mets-by-qual)))) - (after (mapcar #'cdr (alist-get :after mets-by-qual)))) - (setq fun (cl--generic-nest fun (alist-get :primary mets-by-qual))) - (when (or after before) - (let ((next fun)) - (setq fun (lambda (&rest args) - (dolist (bf before) - (apply bf args)) - (prog1 - (apply next args) - (dolist (af after) - (apply af args))))))) - (cl--generic-nest fun (alist-get :around mets-by-qual)))))))) +(defun cl-generic-call-method (generic-name method &optional fun) + "Return a function that calls METHOD. +FUN is the function that should be called when METHOD calls +`call-next-method'." + (pcase method + (`(nil . ,method) method) + (`(,_uses-cnm . ,method) + (let ((next (or fun (cl--generic-no-next-method-function generic-name)))) + (lambda (&rest args) + (apply method + ;; FIXME: This sucks: passing just `next' would + ;; be a lot more efficient than the lambda+apply + ;; quasi-η, but we need this to implement the + ;; "if call-next-method is called with no + ;; arguments, then use the previous arguments". + (lambda (&rest cnm-args) + (apply next (or cnm-args args))) + args)))))) + +(defun cl--generic-standard-method-combination (generic-name mets-by-qual) + (dolist (x mets-by-qual) + (unless (member (car x) '(() (:after) (:before) (:around))) + (error "Unsupported qualifiers in function %S: %S" generic-name (car x)))) + (cond + ((null mets-by-qual) + (lambda (&rest args) + (apply #'cl-no-applicable-method generic-name args))) + ((null (alist-get nil mets-by-qual)) + (lambda (&rest args) + (apply #'cl-no-primary-method generic-name args))) + (t + (let* ((fun nil) + (ab-call (lambda (m) (cl-generic-call-method generic-name m))) + (before + (mapcar ab-call (reverse (cdr (assoc '(:before) mets-by-qual))))) + (after (mapcar ab-call (cdr (assoc '(:after) mets-by-qual))))) + (dolist (method (cdr (assoc nil mets-by-qual))) + (setq fun (cl-generic-call-method generic-name method fun))) + (when (or after before) + (let ((next fun)) + (setq fun (lambda (&rest args) + (dolist (bf before) + (apply bf args)) + (prog1 + (apply next args) + (dolist (af after) + (apply af args))))))) + (dolist (method (cdr (assoc '(:around) mets-by-qual))) + (setq fun (cl-generic-call-method generic-name method fun))) + fun)))) (defconst cl--generic-nnm-sample (cl--generic-no-next-method-function 'dummy)) (defconst cl--generic-cnm-sample (funcall (cl--generic-build-combined-method - nil `(((specializer . :primary) t . ,#'identity))))) + nil `(((specializer . nil) t . ,#'identity))))) (defun cl--generic-isnot-nnm-p (cnm) "Return non-nil if CNM is the function that calls `cl-no-next-method'." diff --git a/lisp/emacs-lisp/eieio-compat.el b/lisp/emacs-lisp/eieio-compat.el index c2dabf7..30bb5ce 100644 --- a/lisp/emacs-lisp/eieio-compat.el +++ b/lisp/emacs-lisp/eieio-compat.el @@ -181,7 +181,8 @@ Summary: (lambda (generic arg &rest args) (apply code arg generic args))) (_ code)))) (cl-generic-define-method - method (if kind (list kind)) specializers uses-cnm + method (unless (memq kind '(nil :primary)) (list kind)) + specializers uses-cnm (if uses-cnm (let* ((docstring (documentation code 'raw)) (args (help-function-arglist code 'preserve-names)) @@ -201,10 +202,11 @@ Summary: ;; applicable but only of the before/after kind. So if we add a :before ;; or :after, make sure there's a matching dummy primary. (when (and (memq kind '(:before :after)) + ;; FIXME: Use `cl-find-method'? (not (assoc (cons (mapcar (lambda (arg) (if (consp arg) (nth 1 arg) t)) specializers) - :primary) + nil) (cl--generic-method-table (cl--generic method))))) (cl-generic-define-method method () specializers t (lambda (cnm &rest args) diff --git a/lisp/emacs-lisp/eieio-datadebug.el b/lisp/emacs-lisp/eieio-datadebug.el index 6534bd0..119f7cc 100644 --- a/lisp/emacs-lisp/eieio-datadebug.el +++ b/lisp/emacs-lisp/eieio-datadebug.el @@ -129,22 +129,6 @@ PREBUTTONTEXT is some text between PREFIX and the object button." (data-debug-new-buffer (format "*%s DDEBUG*" (eieio-object-name obj))) (data-debug-insert-object-slots obj "]")) -;;; DEBUG FUNCTIONS -;; -(defun eieio-debug-methodinvoke (method class) - "Show the method invocation order for METHOD with CLASS object." - (interactive "aMethod: \nXClass Expression: ") - (let* ((eieio-pre-method-execution-functions - (lambda (l) (throw 'moose l) )) - (data - (catch 'moose (eieio--generic-call - method (list class)))) - (_buf (data-debug-new-buffer "*Method Invocation*")) - (data2 (mapcar (lambda (sym) - (symbol-function (car sym))) - data))) - (data-debug-insert-thing data2 ">" ""))) - (provide 'eieio-datadebug) ;;; eieio-datadebug.el ends here diff --git a/test/ChangeLog b/test/ChangeLog index d8cd367..9a31da4 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +2015-01-26 Stefan Monnier + + * automated/cl-generic-tests.el (cl-generic-test-11-next-method-p): + New test. + 2015-01-25 Paul Eggert * indent/shell.sh (bar): Use '[ $# -eq 0 ]', not '[ $# == 0 ]'. diff --git a/test/automated/cl-generic-tests.el b/test/automated/cl-generic-tests.el index bc9a1ec..5b3a9fd 100644 --- a/test/automated/cl-generic-tests.el +++ b/test/automated/cl-generic-tests.el @@ -171,5 +171,13 @@ (should (equal (cl--generic-1 'a 'b) '(a b))) (should (equal (cl--generic-1 1 2) '("integer" 2 1)))) +(ert-deftest cl-generic-test-11-next-method-p () + (cl-defgeneric cl--generic-1 (x y)) + (cl-defmethod cl--generic-1 ((x t) y) + (list x y (cl-next-method-p))) + (cl-defmethod cl--generic-1 ((_x (eql 4)) _y) + (cl-list* "quatre" (cl-next-method-p) (cl-call-next-method))) + (should (equal (cl--generic-1 4 5) '("quatre" t 4 5 nil)))) + (provide 'cl-generic-tests) ;;; cl-generic-tests.el ends here commit 242354a23acf214ad06d4e3e7e5f5580c8b21d4a Author: Trevor Murphy Date: Mon Jan 26 07:56:37 2015 +0000 lisp/gnus/nnimap.el Allow using the Google X-GM-LABELS, if present diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 7ef526b..2f3f375 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,9 @@ +2015-01-26 Trevor Murphy + + * nnimap.el (nnimap-header-parameters): Refactor and request + X-GM-LABELS if it's been announced. + (nnimap-transform-headers): Gather and output GM-LABELS. + 2015-01-26 Peder O. Klingenberg * mm-decode.el (mm-display-part): Make non-string methods work. diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el index ced5561..8e81abc 100644 --- a/lisp/gnus/nnimap.el +++ b/lisp/gnus/nnimap.el @@ -166,14 +166,21 @@ textual parts.") (nnimap-find-process-buffer nntp-server-buffer)) (defun nnimap-header-parameters () - (format "(UID RFC822.SIZE BODYSTRUCTURE %s)" - (format + (let (params) + (push "UID" params) + (push "RFC822.SIZE" params) + (when (nnimap-capability "X-GM-EXT-1") + (push "X-GM-LABELS" params)) + (push "BODYSTRUCTURE" params) + (push (format (if (nnimap-ver4-p) "BODY.PEEK[HEADER.FIELDS %s]" "RFC822.HEADER.LINES %s") (append '(Subject From Date Message-Id References In-Reply-To Xref) - nnmail-extra-headers)))) + nnmail-extra-headers)) + params) + (format "%s" (nreverse params)))) (deffoo nnimap-retrieve-headers (articles &optional group server fetch-old) (when group @@ -197,7 +204,7 @@ textual parts.") (defun nnimap-transform-headers () (goto-char (point-min)) - (let (article lines size string) + (let (article lines size string labels) (block nil (while (not (eobp)) (while (not (looking-at "\\* [0-9]+ FETCH")) @@ -232,6 +239,9 @@ textual parts.") t) (match-string 1))) (beginning-of-line) + (when (search-forward "X-GM-LABELS" (line-end-position) t) + (setq labels (ignore-errors (read (current-buffer))))) + (beginning-of-line) (when (search-forward "BODYSTRUCTURE" (line-end-position) t) (let ((structure (ignore-errors (read (current-buffer))))) @@ -251,6 +261,8 @@ textual parts.") (insert (format "Chars: %s\n" size))) (when lines (insert (format "Lines: %s\n" lines))) + (when labels + (insert (format "X-GM-LABELS: %s\n" labels))) ;; Most servers have a blank line after the headers, but ;; Davmail doesn't. (unless (re-search-forward "^\r$\\|^)\r?$" nil t) commit 1a369fc7f1ccec6954344ec1ee0211a4d24c312d Author: Lars Magne Ingebrigtsen Date: Mon Jan 26 17:04:55 2015 +1100 (shr-make-table-1): Make colspan display more sensibly. This makes display of stuff like ---------- ---- ---- ---- |R1C1 |R1C2|R1C2|R1C2| ---------- ---- ---- ---- |R2C1 and R2C2 |RC4 | |in one | | ---------- ---- ---- ---- work diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 1bb003c..d17dff2 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -2,6 +2,7 @@ * net/shr.el (shr-make-table-1): Fix colspan typo. (shr-make-table-1): Add comments. + (shr-make-table-1): Make colspan display more sensibly. * net/eww.el (eww-add-bookmark): Fix prompt and clean up the code slightly. diff --git a/lisp/net/shr.el b/lisp/net/shr.el index f4c765f..59c277b 100644 --- a/lisp/net/shr.el +++ b/lisp/net/shr.el @@ -1628,6 +1628,8 @@ The preference is a float determined from `shr-prefer-media-type'." (let ((trs nil) (shr-inhibit-decoration (not fill)) (rowspans (make-vector (length widths) 0)) + (colspan-remaining 0) + colspan-width colspan-count width colspan) (dolist (row (dom-non-text-children dom)) (when (eq (dom-tag row) 'tr) @@ -1659,8 +1661,7 @@ The preference is a float determined from `shr-prefer-media-type'." (if column (aref widths width-column) 10)) - (when (and fill - (setq colspan (dom-attr column 'colspan))) + (when (setq colspan (dom-attr column 'colspan)) (setq colspan (min (string-to-number colspan) ;; The colspan may be wrong, so ;; truncate it to the length of the @@ -1678,11 +1679,21 @@ The preference is a float determined from `shr-prefer-media-type'." (+ width shr-table-separator-length (aref widths (+ i 1 j)))))) - (setq width-column (+ width-column (1- colspan)))) + (setq width-column (+ width-column (1- colspan)) + colspan-count colspan + colspan-remaining colspan)) (when (or column (not fill)) - (push (shr-render-td column width fill) - tds)) + (let ((data (shr-render-td column width fill))) + (if (and (not fill) + (> colspan-remaining 0)) + (progn + (when (= colspan-count colspan-remaining) + (setq colspan-width data)) + (let ((this-width (/ colspan-width colspan-count))) + (push this-width tds) + (setq colspan-remaining (1- colspan-remaining)))) + (push data tds)))) (setq i (1+ i) width-column (1+ width-column)))) (push (nreverse tds) trs)))) commit 776705f49c5cb4e66c7dcb316fe499aa6a183888 Author: Lars Magne Ingebrigtsen Date: Mon Jan 26 16:35:51 2015 +1100 (shr-make-table-1): Add comments. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 8af0ec4..1bb003c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,6 +1,7 @@ 2015-01-26 Lars Ingebrigtsen * net/shr.el (shr-make-table-1): Fix colspan typo. + (shr-make-table-1): Add comments. * net/eww.el (eww-add-bookmark): Fix prompt and clean up the code slightly. diff --git a/lisp/net/shr.el b/lisp/net/shr.el index a0c9eba..f4c765f 100644 --- a/lisp/net/shr.el +++ b/lisp/net/shr.el @@ -1667,11 +1667,17 @@ The preference is a float determined from `shr-prefer-media-type'." ;; remaining columns. (- (length widths) i))) (dotimes (j (1- colspan)) - (if (> (+ i 1 j) (1- (length widths))) - (setq width (aref widths (1- (length widths)))) - (setq width (+ width - shr-table-separator-length - (aref widths (+ i 1 j)))))) + (setq width + (if (> (+ i 1 j) (1- (length widths))) + ;; If we have a colspan spec that's longer + ;; than the table is wide, just use the last + ;; width as the width. + (aref widths (1- (length widths))) + ;; Sum up the widths of the columns we're + ;; spanning. + (+ width + shr-table-separator-length + (aref widths (+ i 1 j)))))) (setq width-column (+ width-column (1- colspan)))) (when (or column (not fill)) commit dafb0ef852f88f535df5527def7516a13bf63c60 Author: Lars Magne Ingebrigtsen Date: Mon Jan 26 16:14:17 2015 +1100 * lisp/net/shr.el (shr-make-table-1): Fix colspan typo. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 044c299..8af0ec4 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2015-01-26 Lars Ingebrigtsen + * net/shr.el (shr-make-table-1): Fix colspan typo. + * net/eww.el (eww-add-bookmark): Fix prompt and clean up the code slightly. diff --git a/lisp/net/shr.el b/lisp/net/shr.el index feb934c..a0c9eba 100644 --- a/lisp/net/shr.el +++ b/lisp/net/shr.el @@ -1660,7 +1660,7 @@ The preference is a float determined from `shr-prefer-media-type'." (aref widths width-column) 10)) (when (and fill - (setq colspan (dom-attr column colspan))) + (setq colspan (dom-attr column 'colspan))) (setq colspan (min (string-to-number colspan) ;; The colspan may be wrong, so ;; truncate it to the length of the commit 8fded982c147ec5e062df4c11a8769e9443859f3 Author: Lars Magne Ingebrigtsen Date: Mon Jan 26 15:21:01 2015 +1100 Update the etc/publicsuffix.txt file * etc/publicsuffix.txt: Install an updated version of the file from https://publicsuffix.org/list/effective_tld_names.dat. diff --git a/etc/ChangeLog b/etc/ChangeLog index 55b835c..71ecf7f 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,8 @@ +2015-01-26 Lars Ingebrigtsen + + * publicsuffix.txt: Install an updated version of the file from + https://publicsuffix.org/list/effective_tld_names.dat. + 2015-01-25 Paul Eggert Use gnustep-config if available diff --git a/etc/publicsuffix.txt b/etc/publicsuffix.txt index fd84dc6..5c0baaf 100644 --- a/etc/publicsuffix.txt +++ b/etc/publicsuffix.txt @@ -404,7 +404,7 @@ mil.bo tv.bo // br : http://registro.br/dominio/categoria.html -// Submitted by registry 2014-03-04 +// Submitted by registry 2014-08-11 br adm.br adv.br @@ -452,7 +452,7 @@ mil.br mp.br mus.br net.br -nom.br +*.nom.br not.br ntr.br odo.br @@ -818,7 +818,14 @@ gob.es edu.es // et : http://en.wikipedia.org/wiki/.et -*.et +et +com.et +gov.et +org.et +edu.et +biz.et +name.et +info.et // eu : http://en.wikipedia.org/wiki/.eu eu @@ -1591,7 +1598,7 @@ jobs // jp : http://en.wikipedia.org/wiki/.jp // http://jprs.co.jp/en/jpdomain.html -// Submitted by registry 2014-02-28 +// Submitted by registry 2014-10-30 jp // jp organizational type names ac.jp @@ -1603,7 +1610,7 @@ gr.jp lg.jp ne.jp or.jp -// jp preficture type names +// jp prefecture type names aichi.jp akita.jp aomori.jp @@ -1651,6 +1658,53 @@ wakayama.jp yamagata.jp yamaguchi.jp yamanashi.jp +栃木.jp +愛知.jp +愛媛.jp +兵庫.jp +熊本.jp +茨城.jp +北海é“.jp +åƒè‘‰.jp +和歌山.jp +é•·å´Ž.jp +長野.jp +新潟.jp +é’æ£®.jp +é™å²¡.jp +æ±äº¬.jp +石å·.jp +埼玉.jp +三é‡.jp +京都.jp +ä½è³€.jp +大分.jp +大阪.jp +奈良.jp +宮城.jp +宮崎.jp +富山.jp +å±±å£.jp +山形.jp +山梨.jp +岩手.jp +å²é˜œ.jp +岡山.jp +å³¶æ ¹.jp +広島.jp +徳島.jp +沖縄.jp +滋賀.jp +神奈å·.jp +ç¦äº•.jp +ç¦å²¡.jp +ç¦å³¶.jp +ç§‹ç”°.jp +群馬.jp +香å·.jp +高知.jp +é³¥å–.jp +鹿å…å³¶.jp // jp geographic type names // http://jprs.jp/doc/rule/saisoku-1.html *.kawasaki.jp @@ -5249,27 +5303,30 @@ gop.pk gos.pk info.pk -// pl : http://www.dns.pl/english/ +// pl http://www.dns.pl/english/index.html +// confirmed on 26.09.2014 from Bogna Tchórzewska pl -// NASK functional domains (nask.pl / dns.pl) : http://www.dns.pl/english/dns-funk.html +com.pl +net.pl +org.pl +info.pl +waw.pl +gov.pl +// pl functional domains (http://www.dns.pl/english/index.html) aid.pl agro.pl atm.pl auto.pl biz.pl -com.pl edu.pl gmina.pl gsm.pl -info.pl mail.pl miasta.pl media.pl mil.pl -net.pl nieruchomosci.pl nom.pl -org.pl pc.pl powiat.pl priv.pl @@ -5285,12 +5342,7 @@ tm.pl tourism.pl travel.pl turystyka.pl -// ICM functional domains (icm.edu.pl) -6bone.pl -art.pl -mbone.pl // Government domains (administred by ippt.gov.pl) -gov.pl uw.gov.pl um.gov.pl ug.gov.pl @@ -5300,11 +5352,7 @@ so.gov.pl sr.gov.pl po.gov.pl pa.gov.pl -// other functional domains -ngo.pl -irc.pl -usenet.pl -// NASK geographical domains : http://www.dns.pl/english/dns-regiony.html +// pl regional domains (http://www.dns.pl/english/index.html) augustow.pl babia-gora.pl bedzin.pl @@ -5390,7 +5438,6 @@ rybnik.pl rzeszow.pl sanok.pl sejny.pl -siedlce.pl slask.pl slupsk.pl sosnowiec.pl @@ -5412,7 +5459,6 @@ ustka.pl walbrzych.pl warmia.pl warszawa.pl -waw.pl wegrow.pl wielun.pl wlocl.pl @@ -5425,18 +5471,6 @@ zagan.pl zarow.pl zgora.pl zgorzelec.pl -// TASK geographical domains (www.task.gda.pl/uslugi/dns) -gda.pl -gdansk.pl -gdynia.pl -med.pl -sopot.pl -// other geographical domains -gliwice.pl -krakow.pl -poznan.pl -wroc.pl -zakopane.pl // pm : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf pm @@ -5621,7 +5655,7 @@ mari.ru mari-el.ru marine.ru mordovia.ru -mosreg.ru +// mosreg.ru Bug 1090800 - removed at request of Aleksey Konstantinov msk.ru murmansk.ru nalchik.ru @@ -6005,11 +6039,35 @@ mil.to // Submitted by Ryan Sleevi 2014-01-03 tp -// tr : http://en.wikipedia.org/wiki/.tr -*.tr -!nic.tr -// Used by government in the TRNC -// http://en.wikipedia.org/wiki/.nc.tr +// subTLDs: https://www.nic.tr/forms/eng/policies.pdf +// and: https://www.nic.tr/forms/politikalar.pdf +// Submitted by 2014-07-19 +tr +com.tr +info.tr +biz.tr +net.tr +org.tr +web.tr +gen.tr +tv.tr +av.tr +dr.tr +bbs.tr +name.tr +tel.tr +gov.tr +bel.tr +pol.tr +mil.tr +k12.tr +edu.tr +kep.tr + +// Used by Northern Cyprus +nc.tr + +// Used by government agencies of Northern Cyprus gov.nc.tr // travel : http://en.wikipedia.org/wiki/.travel @@ -6284,7 +6342,7 @@ k12.mo.us k12.ms.us k12.mt.us k12.nc.us -k12.nd.us +// k12.nd.us Bug 1028347 - Removed at request of Travis Rosso k12.ne.us k12.nh.us k12.nj.us @@ -6309,7 +6367,6 @@ k12.wa.us k12.wi.us // k12.wv.us Bug 947705 - Removed at request of Verne Britton k12.wy.us - cc.ak.us cc.al.us cc.ar.us @@ -6365,7 +6422,6 @@ cc.wa.us cc.wi.us cc.wv.us cc.wy.us - lib.ak.us lib.al.us lib.ar.us @@ -6421,7 +6477,6 @@ lib.wa.us lib.wi.us // lib.wv.us Bug 941670 - Removed at request of Larry W Arnold lib.wy.us - // k12.ma.us contains school districts in Massachusetts. The 4LDs are // managed indepedently except for private (PVT), charter (CHTR) and // parochial (PAROCH) schools. Those are delegated dorectly to the @@ -6725,1268 +6780,2173 @@ xxx *.zw -// xn--80asehdb : 2013-07-14 CORE Association -онлайн +// List of new gTLDs imported from https://newgtlds.icann.org/newgtlds.csv on 2014-12-22T18:02:07Z -// xn--80aswg : 2013-07-14 CORE Association -Ñайт +// abb : 2014-10-24 ABB Ltd +abb -// xn--ngbc5azd : 2013-07-14 International Domain Registry Pty. Ltd. -شبكة +// abbott : 2014-07-24 Abbott Laboratories, Inc. +abbott -// xn--unup4y : 2013-07-14 Spring Fields, LLC -æ¸¸æˆ +// abogado : 2014-04-24 Top Level Domain Holdings Limited +abogado -// xn--vhquv : 2013-08-28 Dash McCook, LLC -ä¼ä¸š +// academy : 2013-11-07 Half Oaks, LLC +academy -// camera : 2013-08-28 Atomic Maple, LLC -camera +// accenture : 2014-08-15 Accenture plc +accenture -// clothing : 2013-08-28 Steel Lake, LLC -clothing +// accountant : 2014-11-20 dot Accountant Limited +accountant -// lighting : 2013-08-28 John McCook, LLC -lighting +// accountants : 2014-03-20 Knob Town, LLC +accountants -// singles : 2013-08-28 Fern Madison, LLC -singles +// active : 2014-05-01 The Active Network, Inc +active -// ventures : 2013-08-28 Binky Lake, LLC -ventures +// actor : 2013-12-12 United TLD Holdco Ltd. +actor -// voyage : 2013-08-28 Ruby House, LLC -voyage +// ads : 2014-12-04 Charleston Road Registry Inc. +ads -// guru : 2013-08-28 Pioneer Cypress, LLC -guru +// adult : 2014-10-16 ICM Registry AD LLC +adult -// holdings : 2013-08-28 John Madison, LLC -holdings +// afl : 2014-10-02 Australian Football League +afl -// equipment : 2013-08-28 Corn Station, LLC -equipment +// africa : 2014-03-24 ZA Central Registry NPC trading as Registry.Africa +africa -// bike : 2013-08-28 Grand Hollow, LLC -bike +// agency : 2013-11-14 Steel Falls, LLC +agency -// estate : 2013-08-28 Trixy Park, LLC -estate +// aig : 2014-12-18 American International Group, Inc. +aig -// tattoo : 2013-08-30 Uniregistry,Corp. -tattoo +// airforce : 2014-03-06 United TLD Holdco Ltd. +airforce -// xn--3ds443g : 2013-09-09 TLD Registry Limited -在线 +// airtel : 2014-10-24 Bharti Airtel Limited +airtel -// xn--fiq228c5hs : 2013-09-09 TLD Registry Limited -中文网 +// allfinanz : 2014-07-03 Allfinanz Deutsche Vermögensberatung Aktiengesellschaft +allfinanz -// land : 2013-09-10 Pine Moon, LLC -land +// alsace : 2014-07-02 REGION D ALSACE +alsace -// plumbing : 2013-09-10 Spring Tigers, LLC -plumbing +// amsterdam : 2014-07-24 Gemeente Amsterdam +amsterdam -// contractors : 2013-09-10 Magic Woods, LLC -contractors +// analytics : 2014-12-18 Campus IP LLC +analytics -// sexy : 2013-09-11 Uniregistry,Corp. -sexy +// android : 2014-08-07 Charleston Road Registry Inc. +android -// menu : 2013-09-11 Wedding TLD2, LLC -menu +// apartments : 2014-12-11 June Maple, LLC +apartments -// xn--rhqv96g : 2013-09-11 Stable Tone Limited -世界 +// aquarelle : 2014-07-24 Aquarelle.com +aquarelle -// uno : 2013-09-11 Dot Latin, LLC -uno +// aramco : 2014-11-20 Aramco Services Company +aramco -// gallery : 2013-09-13 Sugar House, LLC -gallery +// archi : 2014-02-06 STARTING DOT LIMITED +archi -// technology : 2013-09-13 Auburn Falls -technology +// army : 2014-03-06 United TLD Holdco Ltd. +army -// xn--3bst00m : 2013-09-13 Eagle Horizon Limited -集团 +// arte : 2014-12-11 Association Relative à la Télévision Européenne G.E.I.E. +arte -// reviews : 2013-09-13 Extra Cover, LLC -reviews +// associates : 2014-03-06 Baxter Hill, LLC +associates -// guide : 2013-09-13 Snow Moon, LLC -guide +// attorney : 2014-03-20 +attorney -// xn--6qq986b3x1 : 2013-09-13 Tycoon Treasure Limited -我爱你 +// auction : 2014-03-20 +auction -// graphics : 2013-09-13 Over Madison, LLC -graphics +// audio : 2014-03-20 Uniregistry, Corp. +audio -// construction : 2013-09-13 Fox Dynamite, LLC -construction +// author : 2014-12-18 Amazon EU S.à r.l. +author -// onl : 2013-09-16 I-Registry Ltd. -onl +// auto : 2014-11-13 Uniregistry, Corp. +auto -// xn--q9jyb4c : 2013-09-17 Charleston Road Registry -ã¿ã‚“㪠+// autos : 2014-01-09 DERAutos, LLC +autos -// diamonds : 2013-09-23 John Edge, LLC -diamonds +// axa : 2013-12-19 AXA SA +axa -// kiwi : 2013-09-23 Dot Kiwi Limited -kiwi +// azure : 2014-12-18 Microsoft Corporation +azure -// enterprises : 2013-09-23 Snow Oaks LLC -enterprises +// band : 2014-06-12 +band -// today : 2013-09-23 Pearl Woods, LLC -today +// bank : 2014-09-25 fTLD Registry Services LLC +bank -// futbol : 2013-09-23 Atomic Falls, LLC -futbol +// bar : 2013-12-12 Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable +bar -// photography : 2013-09-23 Sugar Glen, LLC -photography +// barcelona : 2014-07-24 Municipi de Barcelona +barcelona -// tips : 2013-09-23 Corn Willow, LLC -tips +// barclaycard : 2014-11-20 Barclays Bank PLC +barclaycard -// directory : 2013-09-23 Extra Madison, LLC -directory +// barclays : 2014-11-20 Barclays Bank PLC +barclays -// kitchen : 2013-09-23 Just Goodbye, LLC -kitchen +// bargains : 2013-11-14 Half Hallow, LLC +bargains -// xn--6frz82g : 2013-09-24 Afilias Limited -移动 +// bauhaus : 2014-04-17 Werkhaus GmbH +bauhaus -// kim : 2013-09-24 Afilias Limited -kim +// bayern : 2014-01-23 Bayern Connect GmbH +bayern -// xn--cg4bki : 2013-09-27 Samsung SDS Co., LTD -삼성 +// bbc : 2014-12-18 British Broadcasting Corporation +bbc -// monash : 2013-10-01 Monash University -monash +// bbva : 2014-10-02 BANCO BILBAO VIZCAYA ARGENTARIA, S.A. +bbva -// wed : 2013-10-02 Atgron, Inc. -wed +// bcn : 2014-07-24 Municipi de Barcelona +bcn -// pink : 2013-10-02 Afilias Limited -pink +// beer : 2014-01-09 Top Level Domain Holdings Limited +beer -// ruhr : 2013-10-02 regiodot GmbH & Co. KG -ruhr +// bentley : 2014-12-18 Bentley Motors Limited +bentley -// buzz : 2013-10-03 DOTSTRATEGY CO. -buzz +// berlin : 2013-10-31 dotBERLIN GmbH & Co. KG +berlin -// careers : 2013-10-03 Wild Corner, LLC -careers +// best : 2013-12-19 BestTLD Pty Ltd +best -// shoes : 2013-10-03 Binky Galley, LLC -shoes +// bharti : 2014-01-09 Bharti Enterprises (Holding) Private Limited +bharti -// xn--4gbrim : 2013-10-07 Suhub Electronic Establishment -موقع +// bible : 2014-06-19 American Bible Society +bible -// career : 2013-10-09 dotCareer, LLC -career +// bid : 2013-12-19 dot Bid Limited +bid -// otsuka : 2013-10-11 Otsuka Holdings Co. Ltd. -otsuka +// bike : 2013-08-27 Grand Hollow, LLC +bike -// xn--fiQ64b : 2013-10-14 CITIC Group Corporation -中信 +// bing : 2014-12-18 Microsoft Corporation +bing -// gift : 2013-10-18 Uniregistry Corp. -gift +// bingo : 2014-12-04 Sand Cedar, LLC +bingo -// recipes : 2013-10-18 Grand Island, LLC -recipes +// bio : 2014-03-06 STARTING DOT LIMITED +bio -// coffee : 2013-10-18 Trixy Cover, LLC -coffee +// black : 2014-01-16 Afilias Limited +black -// luxury : 2013-10-18 Luxury Partners, LLC -luxury +// blackfriday : 2014-01-16 Uniregistry, Corp. +blackfriday -// domains : 2013-10-18 Sugar Cross, LLC -domains +// bloomberg : 2014-07-17 Bloomberg IP Holdings LLC +bloomberg -// photos : 2013-10-18 Sea Corner, LLC -photos +// blue : 2013-11-07 Afilias Limited +blue -// limo : 2013-10-18 Hidden Frostbite, LLC -limo +// bms : 2014-10-30 Bristol-Myers Squibb Company +bms -// viajes : 2013-10-18 Black Madison, LLC -viajes +// bmw : 2014-01-09 Bayerische Motoren Werke Aktiengesellschaft +bmw -// wang : 2013-10-24 Zodiac Leo Limited -wang +// bnl : 2014-07-24 Banca Nazionale del Lavoro +bnl -// democrat : 2013-10-24 United TLD Holdco Ltd. -democrat +// bnpparibas : 2014-05-29 BNP Paribas +bnpparibas -// mango : 2013-10-25 PUNTO FA S.L. -mango +// boats : 2014-12-04 DERBoats, LLC +boats -// cab : 2013-10-25 Half Sunset, LLC -cab +// bom : 2014-10-16 Núcleo de Informação e Coordenação do Ponto BR - NIC.br +bom -// support : 2013-10-25 Grand Orchard, LLC -support +// bond : 2014-06-05 Bond University Limited +bond -// dance : 2013-10-25 United TLD Holdco Ltd. -dance +// boo : 2014-01-30 Charleston Road Registry Inc. +boo -// nagoya : 2013-10-25 GMO Registry, Inc. -nagoya +// bot : 2014-12-18 Amazon EU S.à r.l. +bot -// computer : 2013-10-25 Pine Mill, LLC -computer +// boutique : 2013-11-14 Over Galley, LLC +boutique -// wien : 2013-10-28 punkt.wien GmbH -wien +// bradesco : 2014-12-18 Banco Bradesco S.A. +bradesco -// berlin : 2013-10-31 dotBERLIN GmbH & Co. KG -berlin +// bridgestone : 2014-12-18 Bridgestone Corporation +bridgestone -// codes : 2013-10-31 Puff Willow, LLC -codes +// broker : 2014-12-11 IG Group Holdings PLC +broker -// email : 2013-10-31 Spring Madison, LLC -email +// brussels : 2014-02-06 DNS.be vzw +brussels -// xn--mgbab2bd : 2013-10-31 CORE Association -بازار +// budapest : 2013-11-21 Top Level Domain Holdings Limited +budapest -// repair : 2013-11-07 Lone Sunset, LLC -repair +// build : 2013-11-07 Plan Bee LLC +build -// holiday : 2013-11-07 Goose Woods, LLC -holiday +// builders : 2013-11-07 Atomic Madison, LLC +builders -// center : 2013-11-07 Tin Mill, LLC -center +// business : 2013-11-07 Spring Cross, LLC +business -// systems : 2013-11-07 Dash Cypress, LLC -systems +// buy : 2014-12-18 Amazon EU S.à r.l. +buy -// wiki : 2013-11-07 Top Level Design, LLC -wiki +// buzz : 2013-10-02 DOTSTRATEGY CO. +buzz -// ceo : 2013-11-07 CEOTLD Pty Ltd -ceo +// bzh : 2014-02-27 Association www.bzh +bzh -// international : 2013-11-07 Wild Way, LLC -international +// cab : 2013-10-24 Half Sunset, LLC +cab -// solar : 2013-11-07 Ruby Town, LLC -solar +// cal : 2014-07-24 Charleston Road Registry Inc. +cal -// company : 2013-11-07 Silver Avenue, LLC -company +// call : 2014-12-18 Amazon EU S.à r.l. +call -// education : 2013-11-07 Brice Way, LLC -education +// camera : 2013-08-27 Atomic Maple, LLC +camera -// training : 2013-11-07 Wild Willow, LLC -training +// camp : 2013-11-07 Delta Dynamite, LLC +camp -// academy : 2013-11-07 Half Oaks, LLC -academy +// cancerresearch : 2014-05-15 Australian Cancer Research Foundation +cancerresearch -// marketing : 2013-11-07 Fern Pass, LLC -marketing +// canon : 2014-09-12 Canon Inc. +canon -// florist : 2013-11-08 Half Cypress, LLC -florist +// capetown : 2014-03-24 ZA Central Registry NPC trading as ZA Central Registry +capetown -// solutions : 2013-11-07 Silver Cover, LLC -solutions +// capital : 2014-03-06 Delta Mill, LLC +capital -// build : 2013-11-07 Plan Bee LLC -build +// caravan : 2013-12-12 Caravan International, Inc. +caravan -// institute : 2013-11-07 Outer Maple, LLC -institute +// cards : 2013-12-05 Foggy Hollow, LLC +cards -// builders : 2013-11-07 Atomic Madison, LLC -builders +// care : 2014-03-06 Goose Cross +care -// red : 2013-11-07 Afilias Limited -red +// career : 2013-10-09 dotCareer LLC +career -// blue : 2013-11-07 Afilias Limited -blue +// careers : 2013-10-02 Wild Corner, LLC +careers -// ninja : 2013-11-07 United TLD Holdco Ltd. -ninja +// cars : 2014-11-13 Uniregistry, Corp. +cars -// business : 2013-11-07 Spring Cross, LLC -business +// cartier : 2014-06-23 Richemont DNS Inc. +cartier -// gal : 2013-11-07 Asociación puntoGAL -gal +// casa : 2013-11-21 Top Level Domain Holdings Limited +casa -// social : 2013-11-07 United TLD Holdco Ltd. -social +// cash : 2014-03-06 Delta Lake, LLC +cash -// house : 2013-11-07 Sugar Park, LLC -house +// casino : 2014-12-18 Binky Sky, LLC +casino -// camp : 2013-11-07 Delta Dynamite, LLC -camp +// catering : 2013-12-05 New Falls. LLC +catering + +// cba : 2014-06-26 COMMONWEALTH BANK OF AUSTRALIA +cba + +// cbn : 2014-08-22 The Christian Broadcasting Network, Inc. +cbn + +// center : 2013-11-07 Tin Mill, LLC +center + +// ceo : 2013-11-07 CEOTLD Pty Ltd +ceo + +// cern : 2014-06-05 European Organization for Nuclear Research (\ +cern + +// cfa : 2014-08-28 CFA Institute +cfa + +// cfd : 2014-12-11 IG Group Holdings PLC +cfd + +// channel : 2014-05-08 Charleston Road Registry Inc. +channel + +// chat : 2014-12-04 Sand Fields, LLC +chat + +// cheap : 2013-11-14 Sand Cover, LLC +cheap + +// chloe : 2014-10-16 Richemont DNS Inc. +chloe + +// christmas : 2013-11-21 Uniregistry, Corp. +christmas + +// chrome : 2014-07-24 Charleston Road Registry Inc. +chrome + +// church : 2014-02-06 Holly Fileds, LLC +church + +// circle : 2014-12-18 Amazon EU S.à r.l. +circle + +// citic : 2014-01-09 CITIC Group Corporation +citic + +// city : 2014-05-29 Snow Sky, LLC +city + +// cityeats : 2014-12-11 Lifestyle Domain Holdings, Inc. +cityeats + +// claims : 2014-03-20 Black Corner, LLC +claims + +// cleaning : 2013-12-05 Fox Shadow, LLC +cleaning + +// click : 2014-06-05 Uniregistry, Corp. +click + +// clinic : 2014-03-20 Goose Park, LLC +clinic + +// clothing : 2013-08-27 Steel Lake, LLC +clothing + +// club : 2013-11-08 .CLUB DOMAINS, LLC +club + +// coach : 2014-10-09 Koko Island, LLC +coach + +// codes : 2013-10-31 Puff Willow, LLC +codes + +// coffee : 2013-10-17 Trixy Cover, LLC +coffee + +// college : 2014-01-16 XYZ.COM LLC +college + +// cologne : 2014-02-05 NetCologne Gesellschaft für Telekommunikation mbH +cologne + +// commbank : 2014-06-26 COMMONWEALTH BANK OF AUSTRALIA +commbank + +// community : 2013-12-05 Fox Orchard, LLC +community + +// company : 2013-11-07 Silver Avenue, LLC +company + +// computer : 2013-10-24 Pine Mill, LLC +computer + +// condos : 2013-12-05 Pine House, LLC +condos + +// construction : 2013-09-16 Fox Dynamite, LLC +construction + +// consulting : 2013-12-05 +consulting + +// contractors : 2013-09-10 Magic Woods, LLC +contractors + +// cooking : 2013-11-21 Top Level Domain Holdings Limited +cooking + +// cool : 2013-11-14 Koko Lake, LLC +cool + +// corsica : 2014-09-25 Collectivité Territoriale de Corse +corsica + +// country : 2013-12-19 Top Level Domain Holdings Limited +country + +// courses : 2014-12-04 OPEN UNIVERSITIES AUSTRALIA PTY LTD +courses + +// credit : 2014-03-20 Snow Shadow, LLC +credit + +// creditcard : 2014-03-20 Binky Frostbite, LLC +creditcard + +// cricket : 2014-10-09 dot Cricket Limited +cricket + +// crown : 2014-10-24 Crown Equipment Corporation +crown + +// crs : 2014-04-03 Federated Co-operatives Limited +crs + +// cruises : 2013-12-05 Spring Way, LLC +cruises + +// csc : 2014-09-25 Alliance-One Services, Inc. +csc + +// cuisinella : 2014-04-03 SALM S.A.S. +cuisinella + +// cymru : 2014-05-08 Nominet UK +cymru + +// dabur : 2014-02-06 Dabur India Limited +dabur + +// dad : 2014-01-23 Charleston Road Registry Inc. +dad + +// dance : 2013-10-24 United TLD Holdco Ltd. +dance + +// date : 2014-11-20 dot Date Limited +date + +// dating : 2013-12-05 Pine Fest, LLC +dating + +// datsun : 2014-03-27 NISSAN MOTOR CO., LTD. +datsun + +// day : 2014-01-30 Charleston Road Registry Inc. +day + +// dclk : 2014-11-20 Charleston Road Registry Inc. +dclk + +// deals : 2014-05-22 Sand Sunset, LLC +deals + +// degree : 2014-03-06 +degree + +// delivery : 2014-09-11 Steel Station, LLC +delivery + +// dell : 2014-10-24 Dell Inc. +dell + +// democrat : 2013-10-24 United TLD Holdco Ltd. +democrat + +// dental : 2014-03-20 Tin Birch, LLC +dental + +// dentist : 2014-03-20 +dentist + +// desi : 2013-11-14 Desi Networks LLC +desi + +// design : 2014-11-07 Top Level Design, LLC +design + +// dev : 2014-10-16 Charleston Road Registry Inc. +dev + +// diamonds : 2013-09-22 John Edge, LLC +diamonds + +// diet : 2014-06-26 Uniregistry, Corp. +diet + +// digital : 2014-03-06 Dash Park, LLC +digital + +// direct : 2014-04-10 Half Trail, LLC +direct + +// directory : 2013-09-20 Extra Madison, LLC +directory + +// discount : 2014-03-06 Holly Hill, LLC +discount + +// dnp : 2013-12-13 Dai Nippon Printing Co., Ltd. +dnp + +// docs : 2014-10-16 Charleston Road Registry Inc. +docs + +// dog : 2014-12-04 Koko Mill, LLC +dog + +// doha : 2014-09-18 Communications Regulatory Authority (CRA) +doha + +// domains : 2013-10-17 Sugar Cross, LLC +domains + +// doosan : 2014-04-03 Doosan Corporation +doosan + +// download : 2014-11-20 dot Support Limited +download + +// durban : 2014-03-24 ZA Central Registry NPC trading as ZA Central Registry +durban + +// dvag : 2014-06-23 Deutsche Vermögensberatung Aktiengesellschaft DVAG +dvag + +// earth : 2014-12-04 Interlink Co., Ltd. +earth + +// eat : 2014-01-23 Charleston Road Registry Inc. +eat + +// edeka : 2014-12-18 EDEKA Verband kaufmännischer Genossenschaften e.V. +edeka + +// education : 2013-11-07 Brice Way, LLC +education + +// email : 2013-10-31 Spring Madison, LLC +email + +// emerck : 2014-04-03 Merck KGaA +emerck + +// energy : 2014-09-11 Binky Birch, LLC +energy + +// engineer : 2014-03-06 United TLD Holdco Ltd. +engineer + +// engineering : 2014-03-06 Romeo Canyon +engineering + +// enterprises : 2013-09-20 Snow Oaks, LLC +enterprises + +// epson : 2014-12-04 Seiko Epson Corporation +epson + +// equipment : 2013-08-27 Corn Station, LLC +equipment + +// erni : 2014-04-03 ERNI Group Holding AG +erni + +// esq : 2014-05-08 Charleston Road Registry Inc. +esq + +// estate : 2013-08-27 Trixy Park, LLC +estate + +// eurovision : 2014-04-24 European Broadcasting Union (EBU) +eurovision + +// eus : 2013-12-12 Puntueus Fundazioa +eus + +// events : 2013-12-05 Pioneer Maple, LLC +events + +// everbank : 2014-05-15 EverBank +everbank + +// exchange : 2014-03-06 Spring Falls, LLC +exchange + +// expert : 2013-11-21 Magic Pass, LLC +expert + +// exposed : 2013-12-05 Victor Beach, LLC +exposed + +// fage : 2014-12-18 Fage International S.A. +fage + +// fail : 2014-03-06 Atomic Pipe, LLC +fail + +// fairwinds : 2014-11-13 FairWinds Partners, LLC +fairwinds + +// faith : 2014-11-20 dot Faith Limited +faith + +// fan : 2014-03-06 +fan + +// fans : 2014-11-07 Asiamix Digital Limited +fans + +// farm : 2013-11-07 Just Maple, LLC +farm + +// fashion : 2014-07-03 Top Level Domain Holdings Limited +fashion + +// fast : 2014-12-18 Amazon EU S.à r.l. +fast + +// feedback : 2013-12-19 Top Level Spectrum, Inc. +feedback + +// ferrero : 2014-12-18 Ferrero Trading Lux S.A. +ferrero + +// final : 2014-10-16 Núcleo de Informação e Coordenação do Ponto BR - NIC.br +final + +// finance : 2014-03-20 Cotton Cypress, LLC +finance + +// financial : 2014-03-06 Just Cover, LLC +financial + +// firestone : 2014-12-18 Bridgestone Corporation +firestone + +// firmdale : 2014-03-27 Firmdale Holdings Limited +firmdale + +// fish : 2013-12-12 Fox Woods, LLC +fish + +// fishing : 2013-11-21 Top Level Domain Holdings Limited +fishing + +// fit : 2014-11-07 Top Level Domain Holdings Limited +fit + +// fitness : 2014-03-06 Brice Orchard, LLC +fitness + +// flights : 2013-12-05 Fox Station, LLC +flights + +// florist : 2013-11-07 Half Cypress, LLC +florist + +// flowers : 2014-10-09 Uniregistry, Corp. +flowers + +// flsmidth : 2014-07-24 FLSmidth A/S +flsmidth + +// fly : 2014-05-08 Charleston Road Registry Inc. +fly + +// foo : 2014-01-23 Charleston Road Registry Inc. +foo + +// football : 2014-12-18 Foggy Farms, LLC +football + +// ford : 2014-11-13 Ford Motor Company +ford + +// forex : 2014-12-11 IG Group Holdings PLC +forex + +// forsale : 2014-05-22 +forsale + +// foundation : 2013-12-05 John Dale, LLC +foundation + +// frl : 2014-05-15 FRLregistry B.V. +frl + +// frogans : 2013-12-19 OP3FT +frogans + +// fund : 2014-03-20 John Castle, LLC +fund + +// furniture : 2014-03-20 Lone Fields, LLC +furniture + +// futbol : 2013-09-20 +futbol + +// gal : 2013-11-07 Asociación puntoGAL +gal + +// gallery : 2013-09-13 Sugar House, LLC +gallery + +// garden : 2014-06-26 Top Level Domain Holdings Limited +garden + +// gbiz : 2014-07-17 Charleston Road Registry Inc. +gbiz + +// gdn : 2014-07-31 Joint Stock Company \ +gdn + +// gea : 2014-12-04 GEA Group Aktiengesellschaft +gea + +// gent : 2014-01-23 COMBELL GROUP NV/SA +gent + +// ggee : 2014-01-09 GMO Internet, Inc. +ggee + +// gift : 2013-10-17 Uniregistry, Corp. +gift + +// gifts : 2014-07-03 Goose Sky, LLC +gifts + +// gives : 2014-03-06 United TLD Holdco Ltd. +gives + +// giving : 2014-11-13 Giving Limited +giving + +// glass : 2013-11-07 Black Cover, LLC +glass + +// gle : 2014-07-24 Charleston Road Registry Inc. +gle + +// global : 2014-04-17 Dot GLOBAL AS +global + +// globo : 2013-12-19 Globo Comunicação e Participações S.A +globo + +// gmail : 2014-05-01 Charleston Road Registry Inc. +gmail + +// gmo : 2014-01-09 GMO Internet, Inc. +gmo + +// gmx : 2014-04-24 1&1 Mail & Media GmbH +gmx + +// goldpoint : 2014-11-20 YODOBASHI CAMERA CO.,LTD. +goldpoint + +// golf : 2014-12-18 Lone falls, LLC +golf + +// goo : 2014-12-18 NTT Resonant Inc. +goo + +// goog : 2014-11-20 Charleston Road Registry Inc. +goog + +// google : 2014-07-24 Charleston Road Registry Inc. +google + +// gop : 2014-01-16 Republican State Leadership Committee, Inc. +gop + +// got : 2014-12-18 Amazon EU S.à r.l. +got + +// graphics : 2013-09-13 Over Madison, LLC +graphics + +// gratis : 2014-03-20 Pioneer Tigers, LLC +gratis + +// green : 2014-05-08 Afilias Limited +green + +// gripe : 2014-03-06 Corn Sunset, LLC +gripe + +// group : 2014-08-15 Romeo Town, LLC +group + +// gucci : 2014-11-13 Guccio Gucci S.p.a. +gucci + +// guge : 2014-08-28 Charleston Road Registry Inc. +guge + +// guide : 2013-09-13 Snow Moon, LLC +guide + +// guitars : 2013-11-14 Uniregistry, Corp. +guitars + +// guru : 2013-08-27 Pioneer Cypress, LLC +guru + +// hamburg : 2014-02-20 Hamburg Top-Level-Domain GmbH +hamburg + +// hangout : 2014-11-13 Charleston Road Registry Inc. +hangout + +// haus : 2013-12-05 +haus + +// healthcare : 2014-06-12 Silver Glen, LLC +healthcare + +// help : 2014-06-26 Uniregistry, Corp. +help + +// here : 2014-02-06 Charleston Road Registry Inc. +here + +// hermes : 2014-07-10 HERMES INTERNATIONAL +hermes + +// hiphop : 2014-03-06 Uniregistry, Corp. +hiphop + +// hitachi : 2014-10-31 Hitachi, Ltd. +hitachi + +// hiv : 2014-03-13 dotHIV gemeinnuetziger e.V. +hiv + +// holdings : 2013-08-27 John Madison, LLC +holdings + +// holiday : 2013-11-07 Goose Woods, LLC +holiday + +// homes : 2014-01-09 DERHomes, LLC +homes + +// honda : 2014-12-18 Honda Motor Co., Ltd. +honda + +// horse : 2013-11-21 Top Level Domain Holdings Limited +horse + +// host : 2014-04-17 DotHost Inc. +host + +// hosting : 2014-05-29 Uniregistry, Corp. +hosting + +// hotmail : 2014-12-18 Microsoft Corporation +hotmail + +// house : 2013-11-07 Sugar Park, LLC +house + +// how : 2014-01-23 Charleston Road Registry Inc. +how + +// hsbc : 2014-10-24 HSBC Holdings PLC +hsbc + +// ibm : 2014-07-31 International Business Machines Corporation +ibm + +// ice : 2014-10-30 IntercontinentalExchange, Inc. +ice + +// ifm : 2014-01-30 ifm electronic gmbh +ifm + +// iinet : 2014-07-03 Connect West Pty. Ltd. +iinet + +// immo : 2014-07-10 Auburn Bloom, LLC +immo // immobilien : 2013-11-07 United TLD Holdco Ltd. immobilien -// moda : 2013-11-07 United TLD Holdco Ltd. -moda +// industries : 2013-12-05 Outer House, LLC +industries + +// infiniti : 2014-03-27 NISSAN MOTOR CO., LTD. +infiniti + +// ing : 2014-01-23 Charleston Road Registry Inc. +ing + +// ink : 2013-12-05 Top Level Design, LLC +ink + +// institute : 2013-11-07 Outer Maple, LLC +institute + +// insure : 2014-03-20 Pioneer Willow, LLC +insure + +// international : 2013-11-07 Wild Way, LLC +international + +// investments : 2014-03-20 Holly Glen, LLC +investments + +// ipiranga : 2014-08-28 Ipiranga Produtos de Petroleo S.A. +ipiranga + +// irish : 2014-08-07 Dot-Irish LLC +irish + +// ist : 2014-08-28 Istanbul Metropolitan Municipality +ist + +// istanbul : 2014-08-28 Istanbul Metropolitan Municipality +istanbul + +// itau : 2014-10-02 Itau Unibanco Holding S.A. +itau + +// iwc : 2014-06-23 Richemont DNS Inc. +iwc + +// jaguar : 2014-11-13 Jaguar Land Rover Ltd +jaguar + +// java : 2014-06-19 Oracle Corporation +java + +// jcb : 2014-11-20 JCB Co., Ltd. +jcb + +// jetzt : 2014-01-09 New TLD Company AB +jetzt + +// jlc : 2014-12-04 Richemont DNS Inc. +jlc + +// joburg : 2014-03-24 ZA Central Registry NPC trading as ZA Central Registry +joburg + +// jot : 2014-12-18 Amazon EU S.à r.l. +jot + +// joy : 2014-12-18 Amazon EU S.à r.l. +joy + +// jprs : 2014-09-18 Japan Registry Services Co., Ltd. +jprs + +// juegos : 2014-03-20 Uniregistry, Corp. +juegos + +// kaufen : 2013-11-07 United TLD Holdco Ltd. +kaufen + +// kddi : 2014-09-12 KDDI CORPORATION +kddi + +// kfh : 2014-12-04 Kuwait Finance House +kfh + +// kim : 2013-09-23 Afilias Limited +kim + +// kinder : 2014-11-07 Ferrero Trading Lux S.A. +kinder + +// kitchen : 2013-09-20 Just Goodbye, LLC +kitchen + +// kiwi : 2013-09-20 DOT KIWI LIMITED +kiwi + +// koeln : 2014-01-09 NetCologne Gesellschaft für Telekommunikation mbH +koeln + +// krd : 2013-12-05 KRG Department of Information Technology +krd + +// kred : 2013-12-19 KredTLD Pty Ltd +kred + +// kyoto : 2014-11-07 Academic Institution: Kyoto Jyoho Gakuen +kyoto + +// lacaixa : 2014-01-09 CAIXA D'ESTALVIS I PENSIONS DE BARCELONA +lacaixa + +// land : 2013-09-10 Pine Moon, LLC +land + +// landrover : 2014-11-13 Jaguar Land Rover Ltd +landrover + +// lat : 2014-10-16 ECOM-LAC Federaciòn de Latinoamèrica y el Caribe para Internet y el Comercio Electrònico +lat + +// latrobe : 2014-06-16 La Trobe University +latrobe + +// lawyer : 2014-03-20 +lawyer + +// lds : 2014-03-20 IRI Domain Management, LLC (\ +lds + +// lease : 2014-03-06 Victor Trail, LLC +lease + +// leclerc : 2014-08-07 A.C.D. LEC Association des Centres Distributeurs Edouard Leclerc +leclerc + +// legal : 2014-10-16 Blue Falls, LLC +legal + +// lgbt : 2014-05-08 Afilias Limited +lgbt + +// liaison : 2014-10-02 Liaison Technologies, Incorporated +liaison + +// lidl : 2014-09-18 Schwarz Domains und Services GmbH & Co. KG +lidl + +// life : 2014-02-06 Trixy Oaks, LLC +life + +// lifestyle : 2014-12-11 Lifestyle Domain Holdings, Inc. +lifestyle + +// lighting : 2013-08-27 John McCook, LLC +lighting + +// like : 2014-12-18 Amazon EU S.à r.l. +like + +// limited : 2014-03-06 Big Fest, LLC +limited + +// limo : 2013-10-17 Hidden Frostbite, LLC +limo + +// lincoln : 2014-11-13 Ford Motor Company +lincoln + +// linde : 2014-12-04 Linde Aktiengesellschaft +linde + +// link : 2013-11-14 Uniregistry, Corp. +link + +// live : 2014-12-04 Half Woods, LLC +live + +// loan : 2014-11-20 dot Loan Limited +loan + +// loans : 2014-03-20 June Woods, LLC +loans + +// london : 2013-11-14 Dot London Domains Limited +london + +// lotte : 2014-11-07 Lotte Holdings Co., Ltd. +lotte + +// lotto : 2014-04-10 Afilias Limited +lotto + +// ltd : 2014-09-25 Over Corner, LLC +ltd + +// ltda : 2014-04-17 DOMAIN ROBOT SERVICOS DE HOSPEDAGEM NA INTERNET LTDA +ltda + +// lupin : 2014-11-07 LUPIN LIMITED +lupin + +// luxe : 2014-01-09 Top Level Domain Holdings Limited +luxe + +// luxury : 2013-10-17 Luxury Partners, LLC +luxury + +// madrid : 2014-05-01 Comunidad de Madrid +madrid + +// maif : 2014-10-02 Mutuelle Assurance Instituteur France (MAIF) +maif + +// maison : 2013-12-05 Victor Frostbite, LLC +maison + +// man : 2014-12-04 MAN SE +man + +// management : 2013-11-07 John Goodbye, LLC +management + +// mango : 2013-10-24 PUNTO FA S.L. +mango + +// market : 2014-03-06 +market + +// marketing : 2013-11-07 Fern Pass, LLC +marketing + +// markets : 2014-12-11 IG Group Holdings PLC +markets + +// marriott : 2014-10-09 Marriott Worldwide Corporation +marriott + +// media : 2014-03-06 Grand Glen, LLC +media + +// meet : 2014-01-16 Afilias Limited +meet + +// melbourne : 2014-05-29 The Crown in right of the State of Victoria, represented by its Department of State Development, Business and Innovation +melbourne -// glass : 2013-11-07 Black Cover, LLC -glass +// meme : 2014-01-30 Charleston Road Registry Inc. +meme -// management : 2013-11-07 John Goodbye, LLC -management +// memorial : 2014-10-16 Dog Beach, LLC +memorial -// kaufen : 2013-11-07 United TLD Holdco Ltd. -kaufen +// menu : 2013-09-11 Wedding TLD2, LLC +menu -// farm : 2013-11-07 Just Maple, LLC -farm +// meo : 2014-11-07 PT Comunicacoes S.A. +meo -// xn--55qw42g : 2013-11-08 China Organizational Name Administration Center -公益 +// miami : 2013-12-19 Top Level Domain Holdings Limited +miami -// xn--zfr164b : 2013-11-08 China Organizational Name Administration Center -政务 +// microsoft : 2014-12-18 Microsoft Corporation +microsoft -// club : 2013-11-08 .CLUB DOMAINS, LLC -club +// mini : 2014-01-09 Bayerische Motoren Werke Aktiengesellschaft +mini -// voting : 2013-11-13 Valuetainment Corp. -voting +// mma : 2014-11-07 MMA IARD +mma -// TOKYO : 2013-11-13 GMO Registry, Inc. -tokyo +// mobily : 2014-12-18 GreenTech Consultancy Company W.L.L. +mobily + +// moda : 2013-11-07 United TLD Holdco Ltd. +moda // moe : 2013-11-13 Interlink Co., Ltd. moe -// guitars : 2013-11-14 Uniregistry, Corp. -guitars +// moi : 2014-12-18 Amazon EU S.à r.l. +moi -// bargains : 2013-11-14 Half Hallow, LLC -bargains +// monash : 2013-09-30 Monash University +monash -// xn--nqv7fs00ema : 2013-11-14 Public Interest Registry -组织机构 +// money : 2014-10-16 Outer McCook, LLC +money -// desi : 2013-11-14 Desi Networks LLC -desi +// montblanc : 2014-06-23 Richemont DNS Inc. +montblanc -// cool : 2013-11-14 Koko Lake, LLC -cool +// mormon : 2013-12-05 IRI Domain Management, LLC (\ +mormon -// boutique : 2013-11-14 Over Galley, LLC -boutique +// mortgage : 2014-03-20 +mortgage -// pics : 2013-11-14 Uniregistry, Corp. -pics +// moscow : 2013-12-19 Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID) +moscow -// xn--c1avg : 2013-11-14 Public Interest Registry -орг +// motorcycles : 2014-01-09 DERMotorcycles, LLC +motorcycles -// xn--55qx5d : 2013-11-14 Computer Network Information Center of Chinese Academy of Sciences (China Internet Network Information Center) -å…¬å¸ +// mov : 2014-01-30 Charleston Road Registry Inc. +mov -// xn--io0a7i : 2013-11-14 Computer Network Information Center of Chinese Academy of Sciences (China Internet Network Information Center) -网络 +// movistar : 2014-10-16 Telefónica S.A. +movistar -// cheap : 2013-11-14 Sand Cover, LLC -cheap +// mtn : 2014-12-04 MTN Dubai Limited +mtn -// xn--xhq521b : 2013-11-14 Guangzhou YU Wei Information Technology Co., Ltd. -广东 +// mtpc : 2014-11-20 Mitsubishi Tanabe Pharma Corporation +mtpc -// photo : 2013-11-14 Uniregistry, Corp. -photo +// nadex : 2014-12-11 IG Group Holdings PLC +nadex -// network : 2013-11-14 Trixy Manor, LLC -network +// nagoya : 2013-10-24 GMO Registry, Inc. +nagoya -// zone : 2013-11-14 Outer Falls, LLC -zone +// navy : 2014-03-06 United TLD Holdco Ltd. +navy -// xn--nqv7f : 2013-11-14 Public Interest Registry -机构 +// netbank : 2014-06-26 COMMONWEALTH BANK OF AUSTRALIA +netbank -// link : 2013-11-14 Uniregistry, Corp. -link +// network : 2013-11-14 Trixy Manor, LLC +network -// QPON : 2013-11-14 dotCOOL, Inc. -qpon +// neustar : 2013-12-05 NeuStar, Inc. +neustar -// xn--i1b6b1a6a2e : 2013-11-14 Public Interest Registry -संगठन +// new : 2014-01-30 Charleston Road Registry Inc. +new -// agency : 2013-11-14 Steel Falls, LLC -agency +// news : 2014-12-18 Hidden Bloom, LLC +news -// tienda : 2013-11-14 Victor Manor, LLC -tienda +// nexus : 2014-07-24 Charleston Road Registry Inc. +nexus -// works : 2013-11-14 Little Dynamite, LLC -works +// ngo : 2014-03-06 Public Interest Registry +ngo -// london : 2013-11-14 Dot London Domains Limited -london +// nhk : 2014-02-13 Japan Broadcasting Corporation (NHK) +nhk -// watch : 2013-11-14 Sand Shadow, LLC -watch +// nico : 2014-12-04 DWANGO Co., Ltd. +nico -// rocks : 2013-11-14 Ruby Moon, LLC -rocks +// ninja : 2013-11-07 United TLD Holdco Ltd. +ninja -// SHIKSHA : 2013-11-14 Afilias Limited -shiksha +// nissan : 2014-03-27 NISSAN MOTOR CO., LTD. +nissan -// xn--d1acj3b : 2013-11-21 The Foundation for Network Initiatives “The Smart Internet†-дети +// norton : 2014-12-04 Symantec Corporation +norton -// budapest : 2013-11-21 Top Level Domain Holdings Limited -budapest +// nowruz : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. +nowruz + +// nra : 2014-05-22 NRA Holdings Company, INC. +nra // nrw : 2013-11-21 Minds + Machines GmbH nrw -// VOTE : 2013-11-21 Monolith Registry LLC -vote +// ntt : 2014-10-31 NIPPON TELEGRAPH AND TELEPHONE CORPORATION +ntt -// fishing : 2013-11-21 Top Level Domain Holdings Limited -fishing +// nyc : 2014-01-23 The City of New York by and through the New York City Department of Information Technology & Telecommunications +nyc -// expert : 2013-11-21 Magic Pass, LLC -expert +// obi : 2014-09-25 OBI Group Holding SE & Co. KGaA +obi -// horse : 2013-11-21 Top Level Domain Holdings Limited -horse +// okinawa : 2013-12-05 BusinessRalliart Inc. +okinawa -// christmas : 2013-11-21 Uniregistry, Corp. -christmas +// one : 2014-11-07 One.com A/S +one -// cooking : 2013-11-21 Top Level Domain Holdings Limited -cooking +// ong : 2014-03-06 Public Interest Registry +ong -// xn--czru2d : 2013-11-21 Zodiac Capricorn Limited -商城 +// onl : 2013-09-16 I-Registry Ltd. +onl -// casa : 2013-11-21 Top Level Domain Holdings Limited -casa +// ooo : 2014-01-09 INFIBEAM INCORPORATION LIMITED +ooo -// rich : 2013-11-21 I-REGISTRY Ltd., Niederlassung Deutschland -rich +// oracle : 2014-06-19 Oracle Corporation +oracle -// VOTO : 2013-11-21 Monolith Registry LLC -voto +// organic : 2014-03-27 Afilias Limited +organic -// tools : 2013-11-21 Pioneer North, LLC -tools +// osaka : 2014-09-04 Interlink Co., Ltd. +osaka -// xn--45q11c : 2013-11-21 Zodiac Scorpio Limited -å…«å¦ +// otsuka : 2013-10-11 Otsuka Holdings Co., Ltd. +otsuka -// praxi : 2013-12-05 Praxi S.p.A. -praxi +// ovh : 2014-01-16 OVH SAS +ovh -// events : 2013-12-05 Pioneer Maple, LLC -events +// page : 2014-12-04 Charleston Road Registry Inc. +page -// flights : 2013-12-05 Fox Station, LLC -flights +// panerai : 2014-11-07 Richemont DNS Inc. +panerai -// report : 2013-12-05 Binky Glen, LLC -report +// paris : 2014-01-30 City of Paris +paris + +// pars : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. +pars // partners : 2013-12-05 Magic Glen, LLC partners -// neustar : 2013-12-05 NeuStar, Inc. -neustar +// parts : 2013-12-05 Sea Goodbye, LLC +parts -// rentals : 2013-12-05 Big Hollow,LLC -rentals +// party : 2014-09-11 Blue Sky Registry Limited +party -// catering : 2013-12-05 New Falls. LLC -catering +// pharmacy : 2014-06-19 National Association of Boards of Pharmacy +pharmacy -// community : 2013-12-05 Fox Orchard, LLC -community +// philips : 2014-11-07 Koninklijke Philips N.V. +philips -// maison : 2013-12-05 Victor Frostbite, LLC -maison +// photo : 2013-11-14 Uniregistry, Corp. +photo -// parts : 2013-12-05 Sea Goodbye, LLC -parts +// photography : 2013-09-20 Sugar Glen, LLC +photography -// cleaning : 2013-12-05 Fox Shadow, LLC -cleaning +// photos : 2013-10-17 Sea Corner, LLC +photos -// okinawa : 2013-12-05 BusinessRalliart inc. -okinawa +// physio : 2014-05-01 PhysBiz Pty Ltd +physio -// foundation : 2013-12-05 John Dale, LLC -foundation +// piaget : 2014-10-16 Richemont DNS Inc. +piaget -// properties : 2013-12-05 Big Pass, LLC -properties +// pics : 2013-11-14 Uniregistry, Corp. +pics -// vacations : 2013-12-05 Atomic Tigers, LLC -vacations +// pictet : 2014-06-26 Pictet Europe S.A. +pictet -// productions : 2013-12-05 Magic Birch, LLC -productions +// pictures : 2014-03-06 Foggy Sky, LLC +pictures -// industries : 2013-12-05 Outer House, LLC -industries +// pin : 2014-12-18 Amazon EU S.à r.l. +pin -// haus : 2013-12-05 Pixie Edge, LLC -haus +// pink : 2013-10-01 Afilias Limited +pink -// vision : 2013-12-05 Koko Station, LLC -vision +// pizza : 2014-06-26 Foggy Moon, LLC +pizza -// mormon : 2013-12-05 IRI Domain Management, LLC (""Applicant"") -mormon +// place : 2014-04-24 Snow Galley, LLC +place -// cards : 2013-12-05 Foggy Hollow, LLC -cards +// plumbing : 2013-09-10 Spring Tigers, LLC +plumbing -// ink : 2013-12-05 Top Level Design, LLC -ink +// pohl : 2014-06-23 Deutsche Vermögensberatung Aktiengesellschaft DVAG +pohl -// villas : 2013-12-05 New Sky, LLC -villas +// poker : 2014-07-03 Afilias Domains No. 5 Limited +poker -// consulting : 2013-12-05 Pixie Station, LLC -consulting +// porn : 2014-10-16 ICM Registry PN LLC +porn -// cruises : 2013-12-05 Spring Way, LLC -cruises +// praxi : 2013-12-05 Praxi S.p.A. +praxi -// krd : 2013-12-05 KRG Department of Information Technology -krd +// press : 2014-04-03 DotPress Inc. +press -// xyz : 2013-12-05 XYZ.COM LLC -xyz +// prod : 2014-01-23 Charleston Road Registry Inc. +prod -// dating : 2013-12-05 Pine Fest, LLC -dating +// productions : 2013-12-05 Magic Birch, LLC +productions -// exposed : 2013-12-05 Victor Beach, LLC -exposed +// prof : 2014-07-24 Charleston Road Registry Inc. +prof -// condos : 2013-12-05 Pine House, LLC -condos +// promo : 2014-12-18 Play.PROMO Oy +promo -// eus : 2013-12-12 Puntueus Fundazioa -eus +// properties : 2013-12-05 Big Pass, LLC +properties -// Caravan : 2013-12-12 Caravan International, Inc. -caravan +// property : 2014-05-22 Uniregistry, Corp. +property -// actor : 2013-12-12 United TLD Holdco Ltd. -actor +// pub : 2013-12-12 United TLD Holdco Ltd. +pub -// saarland : 2013-12-12 dotSaarland GmbH -saarland +// qpon : 2013-11-14 dotCOOL, Inc. +qpon -// yokohama : 2013-12-12 GMO Registry, Inc. -yokohama +// quebec : 2013-12-19 PointQuébec Inc +quebec -// pub : 2013-12-12 United TLD Holdco Ltd. -pub +// racing : 2014-12-04 Premier Registry Limited +racing -// xn--p1acf : 2013-12-12 Rusnames Limited -Ñ€ÑƒÑ +// read : 2014-12-18 Amazon EU S.à r.l. +read -// ren : 2013-12-12 Beijing Qianxiang Wangjing Technology Development Co., Ltd. -ren +// realtor : 2014-05-29 Real Estate Domains LLC +realtor -// fish : 2013-12-12 Fox Woods, LLC -fish +// recipes : 2013-10-17 Grand Island, LLC +recipes -// BAR : 2013-12-12 Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable -bar +// red : 2013-11-07 Afilias Limited +red + +// redstone : 2014-10-31 Redstone Haute Couture Co., Ltd. +redstone + +// rehab : 2014-03-06 United TLD Holdco Ltd. +rehab + +// reise : 2014-03-13 dotreise GmbH +reise + +// reisen : 2014-03-06 New Cypress, LLC +reisen + +// reit : 2014-09-04 National Association of Real Estate Investment Trusts, Inc. +reit + +// ren : 2013-12-12 Beijing Qianxiang Wangjing Technology Development Co., Ltd. +ren -// DNP : 2013-12-13 Dai Nippon Printing Co., Ltd. -dnp +// rent : 2014-12-04 DERRent, LLC +rent -// bid : 2013-12-19 dot Bid Limited -bid +// rentals : 2013-12-05 Big Hollow,LLC +rentals -// supply : 2013-12-19 Half Falls, LLC -supply +// repair : 2013-11-07 Lone Sunset, LLC +repair -// Miami : 2013-12-19 Top Level Domain Holdings Limited -miami +// report : 2013-12-05 Binky Glen, LLC +report -// supplies : 2013-12-19 Atomic Fields, LLC -supplies +// republican : 2014-03-20 United TLD Holdco Ltd. +republican -// quebec : 2013-12-19 PointQuébec Inc -quebec +// rest : 2013-12-19 Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable +rest -// MOSCOW : 2013-12-19 Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID) -moscow +// restaurant : 2014-07-03 Snow Avenue, LLC +restaurant -// globo : 2013-12-19 Globo Comunicação e Participações S.A -globo +// review : 2014-11-20 dot Review Limited +review -// AXA : 2013-12-19 AXA SA -axa +// reviews : 2013-09-13 +reviews -// xn--80adxhks : 2013-12-19 Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID) -моÑква +// rich : 2013-11-21 I-Registry Ltd. +rich -// xn--czrs0t : 2013-12-19 Wild Island, LLC -商店 +// ricoh : 2014-11-20 Ricoh Company, Ltd. +ricoh -// vodka : 2013-12-19 Top Level Domain Holdings Limited -vodka +// rio : 2014-02-27 Empresa Municipal de Informática SA - IPLANRIO +rio -// REST : 2013-12-19 Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable -rest +// rip : 2014-07-10 United TLD Holdco Ltd. +rip -// frogans : 2013-12-19 OP3FT -frogans +// rocher : 2014-12-18 Ferrero Trading Lux S.A. +rocher -// WTC : 2013-12-19 World Trade Centers Association, Inc. -wtc +// rocks : 2013-11-14 +rocks // rodeo : 2013-12-19 Top Level Domain Holdings Limited rodeo -// sohu : 2013-12-19 Sohu.com Limited -sohu +// room : 2014-12-18 Amazon EU S.à r.l. +room -// BEST : 2013-12-19 BestTLD Pty Ltd -best +// rsvp : 2014-05-08 Charleston Road Registry Inc. +rsvp -// country : 2013-12-19 Top Level Domain Holdings Limited -country +// ruhr : 2013-10-02 regiodot GmbH & Co. KG +ruhr -// KRED : 2013-12-19 KredTLD Pty Ltd -kred +// ryukyu : 2014-01-09 BusinessRalliart Inc. +ryukyu -// feedback : 2013-12-19 Top Level Spectrum, Inc. -feedback +// saarland : 2013-12-12 dotSaarland GmbH +saarland -// work : 2013-12-19 Top Level Domain Holdings Limited -work +// safe : 2014-12-18 Amazon EU S.à r.l. +safe -// luxe : 2014-01-09 Top Level Domain Holdings Limited -luxe +// sakura : 2014-12-18 SAKURA Internet Inc. +sakura -// ryukyu : 2014-01-09 BusinessRalliart inc. -ryukyu +// sale : 2014-10-16 +sale -// autos : 2014-01-09 DERAutos, LLC -autos +// salon : 2014-12-11 Outer Orchard, LLC +salon -// homes : 2014-01-09 DERHomes, LLC -homes +// samsung : 2014-04-03 SAMSUNG SDS CO., LTD +samsung -// jetzt : 2014-01-09 New TLD Company AB -jetzt +// sandvik : 2014-11-13 Sandvik AB +sandvik -// yachts : 2014-01-09 DERYachts, LLC -yachts +// sandvikcoromant : 2014-11-07 Sandvik AB +sandvikcoromant -// motorcycles : 2014-01-09 DERMotorcycles, LLC -motorcycles +// sanofi : 2014-10-09 Sanofi +sanofi -// mini : 2014-01-09 Bayerische Motoren Werke Aktiengesellschaft -mini +// sap : 2014-03-27 SAP AG +sap -// ggee : 2014-01-09 GMO Internet, Inc. -ggee +// sapo : 2014-11-07 PT Comunicacoes S.A. +sapo -// beer : 2014-01-09 Top Level Domain Holdings Limited -beer +// sarl : 2014-07-03 Delta Orchard, LLC +sarl -// xn--1qqw23a : 2014-01-13 Guangzhou YU Wei Information Technology Co., Ltd. -佛山 +// saxo : 2014-10-31 Saxo Bank A/S +saxo -// college : 2014-01-16 XYZ.COM LLC -college +// sbs : 2014-11-07 SPECIAL BROADCASTING SERVICE CORPORATION +sbs -// ovh : 2014-01-16 OVH SAS -ovh +// sca : 2014-03-13 SVENSKA CELLULOSA AKTIEBOLAGET SCA (publ) +sca -// meet : 2014-01-16 Afilias Limited -meet +// scb : 2014-02-20 The Siam Commercial Bank Public Company Limited (\ +scb -// xn--ses554g : 2014-01-16 HU YI GLOBAL INFORMATION RESOURCES (HOLDING) COMPANY. HONGKONG LIMITED -ç½‘å€ +// schmidt : 2014-04-03 SALM S.A.S. +schmidt -// gop : 2014-01-16 Republican State Leadership Committee, Inc. -gop +// scholarships : 2014-04-24 Scholarships.com, LLC +scholarships -// blackfriday : 2014-01-16 Uniregistry, Corp. -blackfriday +// school : 2014-12-18 Little Galley, LLC +school -// lacaixa : 2014-01-16 CAIXA D'ESTALVIS I PENSIONS DE BARCELONA -lacaixa +// schule : 2014-03-06 Outer Moon, LLC +schule -// xn--czr694b : 2014-01-16 HU YI GLOBAL INFORMATION RESOURCES(HOLDING) COMPANY.HONGKONG LIMITED -商标 +// schwarz : 2014-09-18 Schwarz Domains und Services GmbH & Co. KG +schwarz -// vegas : 2014-01-16 Dot Vegas, Inc. -vegas +// science : 2014-09-11 dot Science Limited +science -// black : 2014-01-16 Afilias Limited -black +// scor : 2014-10-31 SCOR SE +scor -// soy : 2014-01-23 Charleston Road Registry Inc. -soy +// scot : 2014-01-23 Dot Scot Registry Limited +scot -// trade : 2014-01-23 Elite Registry Limited -trade +// seat : 2014-05-22 SEAT, S.A. (Sociedad Unipersonal) +seat -// gent : 2014-01-23 COMBELL GROUP NV/SA -gent +// seek : 2014-12-04 Seek Limited +seek -// ing : 2014-01-23 Charleston Road Registry Inc. -ing +// sener : 2014-10-24 Sener Ingeniería y Sistemas, S.A. +sener -// dad : 2014-01-23 Charleston Road Registry Inc. -dad +// services : 2014-02-27 Fox Castle, LLC +services -// shriram : 2014-01-23 Shriram Capital Ltd. -shriram +// sew : 2014-07-17 SEW-EURODRIVE GmbH & Co KG +sew -// bayern : 2014-01-23 Bayern Connect GmbH -bayern +// sex : 2014-11-13 ICM Registry SX LLC +sex -// scot : 2014-01-23 Dot Scot Registry Limited -scot +// sexy : 2013-09-11 Uniregistry, Corp. +sexy -// webcam : 2014-01-23 dot Webcam Limited -webcam +// sharp : 2014-05-01 Sharp Corporation +sharp -// foo : 2014-01-23 Charleston Road Registry Inc. -foo +// shia : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. +shia -// eat : 2014-01-23 Charleston Road Registry Inc. -eat +// shiksha : 2013-11-14 Afilias Limited +shiksha -// nyc : 2014-01-23 The City of New York -nyc +// shoes : 2013-10-02 Binky Galley, LLC +shoes -// prod : 2014-01-23 Charleston Road Registry Inc. -prod +// shriram : 2014-01-23 Shriram Capital Ltd. +shriram -// how : 2014-01-23 Charleston Road Registry Inc. -how +// singles : 2013-08-27 Fern Madison, LLC +singles -// day : 2014-01-30 Charleston Road Registry Inc. -day +// sky : 2014-06-19 Sky IP International Ltd, a company incorporated in England and Wales, operating via its registered Swiss branch +sky -// meme : 2014-01-30 Charleston Road Registry Inc. -meme +// skype : 2014-12-18 Microsoft Corporation +skype -// mov : 2014-01-30 Charleston Road Registry Inc. -mov +// smile : 2014-12-18 Amazon EU S.à r.l. +smile -// paris : 2014-01-30 City of Paris -paris +// social : 2013-11-07 United TLD Holdco Ltd. +social -// boo : 2014-01-30 Charleston Road Registry Inc. -boo +// software : 2014-03-20 +software -// new : 2014-01-30 Charleston Road Registry Inc. -new +// sohu : 2013-12-19 Sohu.com Limited +sohu -// ifm : 2014-01-30 ifm electronic gmbh -ifm +// solar : 2013-11-07 Ruby Town, LLC +solar -// life : 2014-02-06 Trixy Oaks, LLC -life +// solutions : 2013-11-07 Silver Cover, LLC +solutions -// archi : 2014-02-06 STARTING DOT LIMITED -archi +// soy : 2014-01-23 Charleston Road Registry Inc. +soy + +// space : 2014-04-03 DotSpace Inc. +space -// spiegel : 2014-02-06 SPIEGEL-Verlag Rudolf Augstein GmbH & Co. KG +// spiegel : 2014-02-05 SPIEGEL-Verlag Rudolf Augstein GmbH & Co. KG spiegel -// brussels : 2014-02-06 DNS.be vzw -brussels +// spreadbetting : 2014-12-11 IG Group Holdings PLC +spreadbetting -// church : 2014-02-06 Holly Fileds, LLC -church +// stada : 2014-11-13 STADA Arzneimittel AG +stada -// here : 2014-02-06 Charleston Road Registry Inc. -here +// statoil : 2014-12-04 Statoil ASA +statoil -// dabur : 2014-02-06 Dabur India Limited -dabur +// stc : 2014-10-09 Saudi Telecom Company +stc -// vlaanderen : 2014-02-06 DNS.be vzw -vlaanderen +// stcgroup : 2014-10-09 Saudi Telecom Company +stcgroup -// cologne : 2014-02-06 NetCologne Gesellschaft für Telekommunikation mbH -cologne +// stockholm : 2014-12-18 Stockholms kommun +stockholm -// xn--kput3i : 2014-02-13 Beijing RITT-Net Technology Development Co., Ltd -手机 +// study : 2014-12-11 OPEN UNIVERSITIES AUSTRALIA PTY LTD +study -// wme : 2014-02-13 William Morris Endeavor Entertainment, LLC -wme +// style : 2014-12-04 Binky Moon, LLC +style -// nhk : 2014-02-13 Japan Broadcasting Corporation (NHK) -nhk +// supplies : 2013-12-19 Atomic Fields, LLC +supplies + +// supply : 2013-12-19 Half Falls, LLC +supply + +// support : 2013-10-24 Grand Orchard, LLC +support + +// surf : 2014-01-09 Top Level Domain Holdings Limited +surf + +// surgery : 2014-03-20 Tin Avenue, LLC +surgery // suzuki : 2014-02-20 SUZUKI MOTOR CORPORATION suzuki -// whoswho : 2014-02-20 Who's Who Registry -whoswho +// swiss : 2014-10-16 Swiss Confederation +swiss -// scb : 2014-02-20 The Siam Commercial Bank Public Company Limited ("SCB""\) -scb +// sydney : 2014-09-18 State of New South Wales, Department of Premier and Cabinet +sydney -// hamburg : 2014-02-20 Hamburg Top-Level-Domain GmbH -hamburg +// symantec : 2014-12-04 Symantec Corporation +symantec -// services : 2014-02-27 Fox Castle, LLC -services +// systems : 2013-11-07 Dash Cypress, LLC +systems -// bzh : 2014-02-27 Association www.bzh -bzh +// tab : 2014-12-04 Tabcorp Holdings Limited +tab -// rio : 2014-02-27 Empresa Municipal de Informática SA - IPLANRIO -rio +// taipei : 2014-07-10 Taipei City Government +taipei -// cash : 2014-03-07 Delta Lake, LLC -cash +// tatar : 2014-04-24 Limited Liability Company \ +tatar -// gives : 2014-03-07 United TLD Holdco Ltd. -gives +// tattoo : 2013-08-30 Uniregistry, Corp. +tattoo -// hiphop : 2014-03-07 Uniregistry, Corp. -hiphop +// tax : 2014-03-20 Storm Orchard, LLC +tax -// degree : 2014-03-07 Puff House, LLC -degree +// tci : 2014-09-12 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. +tci -// digital : 2014-03-07 Dash Park, LLC -digital +// technology : 2013-09-13 Auburn Falls +technology -// rehab : 2014-03-07 United TLD Holdco Ltd. -rehab +// telefonica : 2014-10-16 Telefónica S.A. +telefonica -// wtf : 2014-03-07 Hidden Way, LLC -wtf +// temasek : 2014-08-07 Temasek Holdings (Private) Limited +temasek -// financial : 2014-03-07 Just Cover, LLC -financial +// tennis : 2014-12-04 Cotton Bloom, LLC +tennis -// limited : 2014-03-07 Big Fest, LLC -limited +// tienda : 2013-11-14 Victor Manor, LLC +tienda -// discount : 2014-03-07 Holly Hill, LLC -discount +// tips : 2013-09-20 Corn Willow, LLC +tips -// fail : 2014-03-07 Atomic Pipe, LLC -fail +// tires : 2014-11-07 Dog Edge, LLC +tires -// vet : 2014-03-07 Wild Dale, LLC -vet +// tirol : 2014-04-24 punkt Tirol GmbH +tirol -// ngo : 2014-03-07 Public Interest Registry -ngo +// today : 2013-09-20 Pearl Woods, LLC +today -// fitness : 2014-03-07 Brice Orchard, LLC -fitness +// tokyo : 2013-11-13 GMO Registry, Inc. +tokyo -// schule : 2014-03-07 Outer Moon, LLC -schule +// tools : 2013-11-21 Pioneer North, LLC +tools -// navy : 2014-03-07 United TLD Holdco Ltd. -navy +// top : 2014-03-20 Jiangsu Bangning Science & Technology Co.,Ltd. +top -// bio : 2014-03-07 STARTING DOT LIMITED -bio +// toray : 2014-12-18 Toray Industries, Inc. +toray -// ong : 2014-03-07 Public Interest Registry -ong +// toshiba : 2014-04-10 TOSHIBA Corporation +toshiba -// town : 2014-03-07 Koko Moon, LLC +// town : 2014-03-06 Koko Moon, LLC town -// toys : 2014-03-07 Pioneer Orchard, LLC +// toys : 2014-03-06 Pioneer Orchard, LLC toys -// army : 2014-03-07 United TLD Holdco Ltd. -army - -// engineering : 2014-03-07 Romeo Canyon -engineering +// trade : 2014-01-23 Elite Registry Limited +trade -// capital : 2014-03-07 Delta Mill, LLC -capital +// trading : 2014-12-11 IG Group Holdings PLC +trading -// exchange : 2014-03-07 Spring Falls, LLC -exchange +// training : 2013-11-07 Wild Willow, LLC +training -// fan : 2014-03-07 Goose Glen, LLC -fan +// trust : 2014-10-16 +trust -// market : 2014-03-07 Victor Way, LLC -market +// tui : 2014-07-03 TUI AG +tui -// media : 2014-03-07 Grand Glen, LLC -media +// tushu : 2014-12-18 Amazon EU S.à r.l. +tushu -// lease : 2014-03-07 Victor Trail, LLC -lease +// ubs : 2014-12-11 UBS AG +ubs -// university : 2014-03-07 Little Station, LLC +// university : 2014-03-06 Little Station, LLC university -// reisen : 2014-03-07 New Cypress, LLC -reisen +// uno : 2013-09-11 Dot Latin LLC +uno -// airforce : 2014-03-07 United TLD Holdco Ltd. -airforce +// uol : 2014-05-01 UBN INTERNET LTDA. +uol -// pictures : 2014-03-07 Foggy Sky, LLC -pictures +// vacations : 2013-12-05 Atomic Tigers, LLC +vacations -// gripe : 2014-03-07 Corn Sunset, LLC -gripe +// vana : 2014-12-11 Lifestyle Domain Holdings, Inc. +vana -// engineering : 2014-03-07 United TLD Holdco Ltd. -engineering +// vegas : 2014-01-16 Dot Vegas, Inc. +vegas -// associates : 2014-03-07 Baxter Hill, LLC -associates +// ventures : 2013-08-27 Binky Lake, LLC +ventures -// xn--mxtq1m : 2014-03-07 Net-Chinese Co., Ltd. -政府 +// versicherung : 2014-03-20 dotversicherung-registry GmbH +versicherung -// williamhill : 2014-03-13 William Hill Organization Limited -williamhill +// vet : 2014-03-06 +vet -// hiv : 2014-03-13 dotHIV gemeinnuetziger e.V. -hiv +// viajes : 2013-10-17 Black Madison, LLC +viajes -// sca : 2014-03-13 SVENSKA CELLULOSA AKTIEBOLAGET SCA (publ) -sca +// video : 2014-10-16 +video -// reise : 2014-03-13 dotreise GmbH -reise +// villas : 2013-12-05 New Sky, LLC +villas -// accountants : 2014-03-20 Knob Town, LLC -accountants +// virgin : 2014-09-25 Virgin Enterprises Limited +virgin -// clinic : 2014-03-20 Goose Park, LLC -clinic +// vision : 2013-12-05 Koko Station, LLC +vision -// versicherung : 2014-03-20 dotversicherung-registry GmbH -versicherung +// vista : 2014-09-18 Vistaprint Limited +vista -// top : 2014-03-20 Jiangsu Bangning Science & Technology Co.,Ltd. -top +// vistaprint : 2014-09-18 Vistaprint Limited +vistaprint -// furniture : 2014-03-20 Lone Fields, LLC -furniture +// viva : 2014-11-07 Saudi Telecom Company +viva -// dental : 2014-03-20 Tin Birch, LLC -dental +// vlaanderen : 2014-02-06 DNS.be vzw +vlaanderen -// fund : 2014-03-20 John Castle, LLC -fund +// vodka : 2013-12-19 Top Level Domain Holdings Limited +vodka -// creditcard : 2014-03-20 Binky Frostbite, LLC -creditcard +// vote : 2013-11-21 Monolith Registry LLC +vote -// insure : 2014-03-20 Pioneer Willow, LLC -insure +// voting : 2013-11-13 Valuetainment Corp. +voting -// audio : 2014-03-20 Uniregistry, Corp. -audio +// voto : 2013-11-21 Monolith Registry LLC +voto -// claims : 2014-03-20 Black Corner, LLC -claims +// voyage : 2013-08-27 Ruby House, LLC +voyage -// loans : 2014-03-20 June Woods, LLC -loans +// wales : 2014-05-08 Nominet UK +wales -// auction : 2014-03-20 Sand Galley, LLC -auction +// walter : 2014-11-13 Sandvik AB +walter -// attorney : 2014-03-20 Victor North, LLC -attorney +// wang : 2013-10-24 Zodiac Leo Limited +wang -// finance : 2014-03-20 Cotton Cypress, LLC -finance +// wanggou : 2014-12-18 Amazon EU S.à r.l. +wanggou -// investments : 2014-03-20 Holly Glen, LLC -investments +// watch : 2013-11-14 Sand Shadow, LLC +watch -// juegos : 2014-03-20 Uniregistry, Corp. -juegos +// webcam : 2014-01-23 dot Webcam Limited +webcam -// dentist : 2014-03-20 Outer Lake, LLC -dentist +// website : 2014-04-03 DotWebsite Inc. +website -// lds : 2014-03-20 IRI Domain Management, LLC -lds +// wed : 2013-10-01 Atgron, Inc. +wed -// lawyer : 2014-03-20 Atomic Station, LLC -lawyer +// wedding : 2014-04-24 Top Level Domain Holdings Limited +wedding -// surgery : 2014-03-20 Tin Avenue, LLC -surgery +// whoswho : 2014-02-20 Who's Who Registry +whoswho -// gratis : 2014-03-20 Pioneer Tigers, LLC -gratis +// wien : 2013-10-28 punkt.wien GmbH +wien -// software : 2014-03-20 Over Birch, LLC -software +// wiki : 2013-11-07 Top Level Design, LLC +wiki -// mortgage : 2014-03-20 Outer Gardens, LLC -mortgage +// williamhill : 2014-03-13 William Hill Organization Limited +williamhill -// republican : 2014-03-20 United TLD Holdco Ltd. -republican +// win : 2014-11-20 First Registry Limited +win -// credit : 2014-03-20 Snow Shadow, LLC -credit +// windows : 2014-12-18 Microsoft Corporation +windows -// tax : 2014-03-20 Storm Orchard, LLC -tax +// wme : 2014-02-13 William Morris Endeavor Entertainment, LLC +wme -// africa : 2014-03-24 ZA Central Registry NPC trading as Registry.Africa -africa +// work : 2013-12-19 Top Level Domain Holdings Limited +work -// joburg : 2014-03-24 ZA Central Registry NPC trading as ZA Central Registry -joburg +// works : 2013-11-14 Little Dynamite, LLC +works -// durban : 2014-03-24 ZA Central Registry NPC trading as ZA Central Registry -durban +// world : 2014-06-12 Bitter Fields, LLC +world -// capetown : 2014-03-24 ZA Central Registry NPC trading as ZA Central Registry -capetown +// wtc : 2013-12-19 World Trade Centers Association, Inc. +wtc -// sap : 2014-03-27 SAP AG -sap +// wtf : 2014-03-06 Hidden Way, LLC +wtf -// datsun : 2014-03-27 NISSAN MOTOR CO., LTD. -datsun +// xbox : 2014-12-18 Microsoft Corporation +xbox -// infiniti : 2014-03-27 NISSAN MOTOR CO., LTD. -infiniti +// xerox : 2014-10-24 Xerox DNHC LLC +xerox -// firmdale : 2014-03-27 Firmdale Holdings Limited -firmdale +// xin : 2014-12-11 Elegant Leader Limited +xin -// organic : 2014-03-27 Afilias Limited -organic +// xn--1qqw23a : 2014-01-09 Guangzhou YU Wei Information Technology Co., Ltd. +佛山 -// nissan : 2014-03-27 NISSAN MOTOR CO., LTD. -nissan +// xn--30rr7y : 2014-06-12 Excellent First Limited +慈善 -// website : 2014-04-03 DotWebsite Inc. -website +// xn--3bst00m : 2013-09-13 Eagle Horizon Limited +集团 -// space : 2014-04-03 DotSpace Inc. -space +// xn--3ds443g : 2013-09-08 TLD REGISTRY LIMITED +在线 -// schmidt : 2014-04-03 SALM S.A.S. -schmidt +// xn--45q11c : 2013-11-21 Zodiac Scorpio Limited +å…«å¦ -// cuisinella : 2014-04-03 SALM S.A.S. -cuisinella +// xn--4gbrim : 2013-10-04 Suhub Electronic Establishment +موقع -// samsung : 2014-04-03 SAMSUNG SDS CO., LTD -samsung +// xn--55qw42g : 2013-11-08 China Organizational Name Administration Center +公益 -// crs : 2014-04-03 Federated Co operatives Limited -crs +// xn--55qx5d : 2013-11-14 Computer Network Information Center of Chinese Academy of Sciences (China Internet Network Information Center) +å…¬å¸ -// doosan : 2014-04-03 Doosan Corporation -doosan +// xn--6frz82g : 2013-09-23 Afilias Limited +移动 -// press : 2014-04-03 DotPress Inc. -press +// xn--6qq986b3xl : 2013-09-13 Tycoon Treasure Limited +我爱你 -// emerck : 2014-04-03 Merck KGaA -emerck +// xn--80adxhks : 2013-12-19 Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID) +моÑква -// erni : 2014-04-03 ERNI Group Holding AG -erni +// xn--80asehdb : 2013-07-14 CORE Association +онлайн -// direct : 2014-04-10 Half Trail, LLC -direct +// xn--80aswg : 2013-07-14 CORE Association +Ñайт -// yandex : 2014-04-10 YANDEX, LLC -yandex +// xn--9et52u : 2014-06-12 RISE VICTORY LIMITED +æ—¶å°š -// lotto : 2014-04-10 Afilias Limited -lotto +// xn--b4w605ferd : 2014-08-07 Temasek Holdings (Private) Limited +淡马锡 -// toshiba : 2014-04-10 TOSHIBA Corporation -toshiba +// xn--c1avg : 2013-11-14 Public Interest Registry +орг -// bauhaus : 2014-04-17 Werkhaus GmbH -bauhaus +// xn--cg4bki : 2013-09-27 SAMSUNG SDS CO., LTD +삼성 -// host : 2014-04-17 DotHost Inc. -host +// xn--czr694b : 2014-01-16 HU YI GLOBAL INFORMATION RESOURCES(HOLDING) COMPANY.HONGKONG LIMITED +商标 -// ltda : 2014-04-17 DOMAIN ROBOT SERVICOS DE HOSPEDAGEM NA INTERNET LTDA -ltda +// xn--czrs0t : 2013-12-19 Wild Island, LLC +商店 -// global : 2014-04-17 Dot GLOBAL AS -global +// xn--czru2d : 2013-11-21 Zodiac Capricorn Limited +商城 -// abogado : 2014-04-24 Top Level Domain Holdings Limited -abogado +// xn--d1acj3b : 2013-11-20 The Foundation for Network Initiatives “The Smart Internet†+дети -// place : 2014-04-24 Snow Galley, LLC -place +// xn--eckvdtc9d : 2014-12-18 Amazon EU S.à r.l. +ãƒã‚¤ãƒ³ãƒˆ -// tirol : 2014-04-24 punkt Tirol GmbH -tirol +// xn--efvy88h : 2014-08-22 Xinhua News Agency Guangdong Branch æ–°åŽé€šè®¯ç¤¾å¹¿ä¸œåˆ†ç¤¾ +æ–°é—» -// gmx : 2014-04-24 1&1 Mail & Media GmbH -gmx +// xn--fiq228c5hs : 2013-09-08 TLD REGISTRY LIMITED +中文网 -// tatar : 2014-04-24 Limited Liability Company "Coordination Center of Regional Domain of Tatarstan Republic" -tatar +// xn--fiq64b : 2013-10-14 CITIC Group Corporation +中信 -// scholarships : 2014-04-24 Scholarships.com, LLC -scholarships +// xn--fjq720a : 2014-05-22 Will Bloom, LLC +å¨±ä¹ -// eurovision : 2014-04-24 European Broadcasting Union (EBU) -eurovision +// xn--flw351e : 2014-07-31 Charleston Road Registry Inc. +è°·æ­Œ -// wedding : 2014-04-24 Top Level Domain Holdings Limited -wedding +// xn--hxt814e : 2014-05-15 Zodiac Libra Limited +网店 -// active : 2014-05-01 The Active Network, Inc -active +// xn--i1b6b1a6a2e : 2013-11-14 Public Interest Registry +संगठन -// madrid : 2014-05-01 Comunidad de Madrid -madrid +// xn--imr513n : 2014-12-11 HU YI GLOBAL INFORMATION RESOURCES (HOLDING) COMPANY. HONGKONG LIMITED +é¤åŽ… -// youtube : 2014-05-01 Charleston Road Registry Inc. -youtube +// xn--io0a7i : 2013-11-14 Computer Network Information Center of Chinese Academy of Sciences (China Internet Network Information Center) +网络 -// sharp : 2014-05-01 Sharp Corporation -sharp +// xn--kcrx77d1x4a : 2014-11-07 Koninklijke Philips N.V. +飞利浦 -// uol : 2014-05-01 UBN INTERNET LTDA. -uol +// xn--kput3i : 2014-02-13 Beijing RITT-Net Technology Development Co., Ltd +手机 -// physio : 2014-05-01 PhysBiz Pty Ltd -physio +// xn--mgba3a3ejt : 2014-11-20 Aramco Services Company +ارامكو -// gmail : 2014-05-01 Charleston Road Registry Inc. -gmail +// xn--mgbab2bd : 2013-10-31 CORE Association +بازار -// channel : 2014-05-08 Charleston Road Registry Inc. -channel +// xn--mgbb9fbpob : 2014-12-18 GreenTech Consultancy Company W.L.L. +موبايلي -// fly : 2014-05-08 Charleston Road Registry Inc. -fly +// xn--mgbt3dhd : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. +همراه -// zip : 2014-05-08 Charleston Road Registry Inc. -zip +// xn--mxtq1m : 2014-03-06 Net-Chinese Co., Ltd. +政府 -// esq : 2014-05-08 Charleston Road Registry Inc. -esq +// xn--ngbc5azd : 2013-07-13 International Domain Registry Pty. Ltd. +شبكة -// rsvp : 2014-05-08 Charleston Road Registry Inc. -rsvp +// xn--ngbe9e0a : 2014-12-04 Kuwait Finance House +بيتك -// wales : 2014-05-08 Nominet UK -wales +// xn--nqv7f : 2013-11-14 Public Interest Registry +机构 -// cymru : 2014-05-08 Nominet UK -cymru +// xn--nqv7fs00ema : 2013-11-14 Public Interest Registry +组织机构 -// green : 2014-05-08 Afilias Limited -green +// xn--nyqy26a : 2014-11-07 Stable Tone Limited +å¥åº· -// lgbt : 2014-05-08 Afilias Limited -lgbt +// xn--p1acf : 2013-12-12 Rusnames Limited +Ñ€ÑƒÑ -// xn--hxt814e : 2014-05-15 Zodiac Libra Limited -网店 +// xn--q9jyb4c : 2013-09-17 Charleston Road Registry Inc. +ã¿ã‚“㪠-// cancerresearch : 2014-05-15 Australian Cancer Research Foundation -cancerresearch +// xn--qcka1pmc : 2014-07-31 Charleston Road Registry Inc. +グーグル -// everbank : 2014-05-15 EverBank -everbank +// xn--rhqv96g : 2013-09-11 Stable Tone Limited +世界 -// frl : 2014-05-15 FRLregistry B.V. -frl +// xn--ses554g : 2014-01-16 HU YI GLOBAL INFORMATION RESOURCES (HOLDING) COMPANY. HONGKONG LIMITED +ç½‘å€ -// property : 2014-05-22 Uniregistry, Corp. -property +// xn--unup4y : 2013-07-14 Spring Fields, LLC +æ¸¸æˆ -// forsale : 2014-05-22 Sea Oaks, LLC -forsale +// xn--vermgensberater-ctb : 2014-06-23 Deutsche Vermögensberatung Aktiengesellschaft DVAG +vermögensberater -// seat : 2014-05-22 SEAT, S.A. (Sociedad Unipersonal) -seat +// xn--vermgensberatung-pwb : 2014-06-23 Deutsche Vermögensberatung Aktiengesellschaft DVAG +vermögensberatung -// deals : 2014-05-22 Sand Sunset, LLC -deals +// xn--vhquv : 2013-08-27 Dash McCook, LLC +ä¼ä¸š -// nra : 2014-05-22 NRA Holdings Company, INC. -nra +// xn--vuq861b : 2014-10-16 Beijing Tele-info Network Technology Co., Ltd. +ä¿¡æ¯ -// xn--fjq720a : 2014-05-22 Will Bloom, LLC -å¨±ä¹ +// xn--xhq521b : 2013-11-14 Guangzhou YU Wei Information Technology Co., Ltd. +广东 -// realtor : 2014-05-29 Real Estate Domains LLC -realtor +// xn--zfr164b : 2013-11-08 China Organizational Name Administration Center +政务 -// bnpparibas : 2014-05-29 BNP Paribas -bnpparibas +// xyz : 2013-12-05 XYZ.COM LLC +xyz -// melbourne : 2014-05-29 The Crown in right of the State of Victoria, represented by its Department of State Development, Business and Innovation -melbourne +// yachts : 2014-01-09 DERYachts, LLC +yachts -// hosting : 2014-05-29 Uniregistry, Corp. -hosting +// yamaxun : 2014-12-18 Amazon EU S.à r.l. +yamaxun + +// yandex : 2014-04-10 YANDEX, LLC +yandex -// yoga : 2014-05-29 Top Level Domain Holdings Limited +// yodobashi : 2014-11-20 YODOBASHI CAMERA CO.,LTD. +yodobashi + +// yoga : 2014-05-29 Top Level Domain Holdings Limited yoga -// city : 2014-05-29 Snow Sky, LLC -city +// yokohama : 2013-12-12 GMO Registry, Inc. +yokohama -// bond : 2014-06-05 Bond University Limited -bond +// youtube : 2014-05-01 Charleston Road Registry Inc. +youtube -// click : 2014-06-05 Uniregistry, Corp. -click +// zara : 2014-11-07 Industria de Diseño Textil, S.A. (INDITEX, S.A.) +zara -// cern : 2014-06-05 European Organization for Nuclear Research ("CERN") -cern +// zero : 2014-12-18 Amazon EU S.à r.l. +zero + +// zip : 2014-05-08 Charleston Road Registry Inc. +zip + +// zone : 2013-11-14 Outer Falls, LLC +zone + +// zuerich : 2014-11-07 Kanton Zürich (Canton of Zurich) +zuerich // ===END ICANN DOMAINS=== // ===BEGIN PRIVATE DOMAINS=== @@ -7996,7 +8956,7 @@ cern cloudfront.net // Amazon Elastic Compute Cloud: https://aws.amazon.com/ec2/ -// Submitted by Osman Surkatty 2014-05-20 +// Submitted by Osman Surkatty 2014-12-16 ap-northeast-1.compute.amazonaws.com ap-southeast-1.compute.amazonaws.com ap-southeast-2.compute.amazonaws.com @@ -8005,6 +8965,7 @@ compute.amazonaws.cn compute.amazonaws.com compute-1.amazonaws.com eu-west-1.compute.amazonaws.com +eu-central-1.compute.amazonaws.com sa-east-1.compute.amazonaws.com us-east-1.amazonaws.com us-gov-west-1.compute.amazonaws.com @@ -8414,6 +9375,10 @@ global.prod.fastly.net // Submitted by Chris Raynor 2014-01-21 firebaseapp.com +// Flynn : https://flynn.io +// Submitted by Jonathan Rudenberg 2014-07-12 +flynnhub.com + // GitHub, Inc. // Submitted by Ben Toews 2014-02-06 github.io @@ -8424,8 +9389,9 @@ githubusercontent.com ro.com // Google, Inc. -// Submitted by Eduardo Vela 2012-10-24 +// Submitted by Eduardo Vela 2014-12-19 appspot.com +blogspot.ae blogspot.be blogspot.bj blogspot.ca @@ -8440,6 +9406,7 @@ blogspot.com.ar blogspot.com.au blogspot.com.br blogspot.com.es +blogspot.com.tr blogspot.cv blogspot.cz blogspot.de @@ -8461,6 +9428,7 @@ blogspot.no blogspot.pt blogspot.re blogspot.ro +blogspot.ru blogspot.se blogspot.sg blogspot.sk @@ -8469,6 +9437,7 @@ blogspot.tw codespot.com googleapis.com googlecode.com +pagespeedmobilizer.com withgoogle.com // Heroku : https://www.heroku.com/ @@ -8513,14 +9482,44 @@ operaunite.com // Submitted by Duarte Santos 2014-03-11 outsystemscloud.com +// .pl domains (grandfathered) +art.pl +gliwice.pl +krakow.pl +poznan.pl +wroc.pl +zakopane.pl + // Red Hat, Inc. OpenShift : https://openshift.redhat.com/ // Submitted by Tim Kramer 2012-10-24 rhcloud.com +// GDS : https://www.gov.uk/service-manual/operations/operating-servicegovuk-subdomains +// Submitted by David Illsley 2014-08-28 +service.gov.uk + // priv.at : http://www.nic.priv.at/ // Submitted by registry 2008-06-09 priv.at +// TASK geographical domains (www.task.gda.pl/uslugi/dns) +gda.pl +gdansk.pl +gdynia.pl +med.pl +sopot.pl + +// UDR Limited : http://www.udr.hk.com +// Submitted by registry 2014-11-07 +hk.com +hk.org +ltd.hk +inc.hk + +// Yola : https://www.yola.com/ +// Submitted by Stefano Rivera 2014-07-09 +yolasite.com + // ZaNiC : http://www.za.net/ // Submitted by registry 2009-10-03 za.net commit f6019361e26b0b305129b2230136d87df5d636c2 Author: Peder O. Klingenberg Date: Mon Jan 26 04:19:51 2015 +0000 [Gnus] Fixups when displaying certain attachments diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index e47e8ad..7ef526b 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,11 @@ +2015-01-26 Peder O. Klingenberg + + * mm-decode.el (mm-display-part): Make non-string methods work. + Non-string methods are funcalled and work just fine, the test was + bogus. + * mm-decode.el (mm-display-external): Show "external" lisp viewers in + whole frame. + 2015-01-26 Lars Ingebrigtsen * nnimap.el (nnimap-request-accept-article): Allow respooling using diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el index fb32ad9..f03b9c9 100644 --- a/lisp/gnus/mm-decode.el +++ b/lisp/gnus/mm-decode.el @@ -833,18 +833,18 @@ external if displayed external." 'inline) (setq external (and method ;; If nil, we always use "save". - (stringp method) ;; 'mailcap-save-binary-file (or (eq mm-enable-external t) (and (eq mm-enable-external 'ask) (y-or-n-p (concat "Display part (" type - ") using external program" - ;; Can non-string method ever happen? + ") " (if (stringp method) (concat - " \"" (format method filename) "\"") - "") + "using external program \"" + (format method filename) "\"") + (format + "by calling `%s' on the contents)" method)) "? ")))))) (if external (mm-display-external @@ -885,7 +885,15 @@ external if displayed external." (mm-handle-media-type handle) t)))) (unwind-protect (if method - (funcall method) + (progn + (when (and (boundp 'gnus-summary-buffer) + (bufferp gnus-summary-buffer) + (buffer-name gnus-summary-buffer)) + ;; So that we pop back to the right place, sortof. + (switch-to-buffer gnus-summary-buffer) + (switch-to-buffer mm)) + (delete-other-windows) + (funcall method)) (mm-save-part handle)) (when (and (not non-viewer) method) commit 8e39ec680c7068c2dc2143bf915e5acca7bf7c0f Author: Lars Ingebrigtsen Date: Mon Jan 26 04:18:57 2015 +0000 [Gnus] Make moving IMAP articles faster in large groups diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 08e904a..e47e8ad 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,18 @@ +2015-01-26 Lars Ingebrigtsen + + * nnimap.el (nnimap-request-accept-article): Allow respooling using + nnimap. + + * gnus-group.el (gnus-group-get-new-news-this-group): Explicitly + request rescans when being run interactively. + + * nnimap.el (nnimap-request-group): Don't rescan the group here, + because that can be very slow in large groups. + + * gnus-int.el (gnus-request-group-scan): New backend function. + + * nnimap.el (nnimap-request-scan-group): Implement in on IMAP. + 2015-01-25 Lars Ingebrigtsen * gnus-group.el (gnus-group-suspend): Close all backends. diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el index dc11442..e22138b 100644 --- a/lisp/gnus/gnus-group.el +++ b/lisp/gnus/gnus-group.el @@ -4075,7 +4075,9 @@ If DONT-SCAN is non-nil, scan non-activated groups as well." (gnus-group-remove-mark group) ;; Bypass any previous denials from the server. (gnus-remove-denial (setq method (gnus-find-method-for-group group))) - (if (gnus-activate-group group (if dont-scan nil 'scan) nil method) + (if (or (and (not dont-scan) + (gnus-request-group-scan group (gnus-get-info group))) + (gnus-activate-group group (if dont-scan nil 'scan) nil method)) (let ((info (gnus-get-info group)) (active (gnus-active group))) (when info diff --git a/lisp/gnus/gnus-int.el b/lisp/gnus/gnus-int.el index 487b85f..dd938ce 100644 --- a/lisp/gnus/gnus-int.el +++ b/lisp/gnus/gnus-int.el @@ -439,6 +439,14 @@ If it is down, start it up (again)." (funcall (gnus-get-function gnus-command-method func) (gnus-group-real-name group) (nth 1 gnus-command-method))))) +(defun gnus-request-group-scan (group info) + "Request that GROUP get a complete rescan." + (let ((gnus-command-method (gnus-find-method-for-group group)) + (func 'request-group-description)) + (when (gnus-check-backend-function func group) + (funcall (gnus-get-function gnus-command-method func) + (gnus-group-real-name group) (nth 1 gnus-command-method) info)))) + (defun gnus-close-group (group) "Request the GROUP be closed." (let ((gnus-command-method (inline (gnus-find-method-for-group group)))) diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el index f3a8957..ced5561 100644 --- a/lisp/gnus/nnimap.el +++ b/lisp/gnus/nnimap.el @@ -792,43 +792,55 @@ textual parts.") articles active marks high low) (with-current-buffer nntp-server-buffer (when result - (if (and dont-check - (setq active (nth 2 (assoc group nnimap-current-infos)))) - (insert (format "211 %d %d %d %S\n" - (- (cdr active) (car active)) - (car active) - (cdr active) - group)) - (with-current-buffer (nnimap-buffer) - (erase-buffer) - (let ((group-sequence - (nnimap-send-command "SELECT %S" (utf7-encode group t))) - (flag-sequence - (nnimap-send-command "UID FETCH 1:* FLAGS"))) - (setf (nnimap-group nnimap-object) group) - (nnimap-wait-for-response flag-sequence) - (setq marks - (nnimap-flags-to-marks - (nnimap-parse-flags - (list (list group-sequence flag-sequence - 1 group "SELECT"))))) - (when (and info - marks) - (nnimap-update-infos marks (list info)) - (nnimap-store-info info (gnus-active (gnus-info-group info)))) - (goto-char (point-max)) - (let ((uidnext (nth 5 (car marks)))) - (setq high (or (if uidnext - (1- uidnext) - (nth 3 (car marks))) - 0) - low (or (nth 4 (car marks)) uidnext 1))))) - (erase-buffer) - (insert - (format - "211 %d %d %d %S\n" (1+ (- high low)) low high group))) + (when (or (not dont-check) + (not (setq active + (nth 2 (assoc group nnimap-current-infos))))) + (let ((sequences (nnimap-retrieve-group-data-early + server (list info)))) + (nnimap-finish-retrieve-group-infos server (list info) sequences + t) + (setq active (nth 2 (assoc group nnimap-current-infos))))) + (insert (format "211 %d %d %d %S\n" + (- (cdr active) (car active)) + (car active) + (cdr active) + group)) t)))) +(deffoo nnimap-request-scan-group (group &optional server info) + (setq group (nnimap-decode-gnus-group group)) + (let (marks high low) + (with-current-buffer (nnimap-buffer) + (erase-buffer) + (let ((group-sequence + (nnimap-send-command "SELECT %S" (utf7-encode group t))) + (flag-sequence + (nnimap-send-command "UID FETCH 1:* FLAGS"))) + (setf (nnimap-group nnimap-object) group) + (nnimap-wait-for-response flag-sequence) + (setq marks + (nnimap-flags-to-marks + (nnimap-parse-flags + (list (list group-sequence flag-sequence + 1 group "SELECT"))))) + (when (and info + marks) + (nnimap-update-infos marks (list info)) + (nnimap-store-info info (gnus-active (gnus-info-group info)))) + (goto-char (point-max)) + (let ((uidnext (nth 5 (car marks)))) + (setq high (or (if uidnext + (1- uidnext) + (nth 3 (car marks))) + 0) + low (or (nth 4 (car marks)) uidnext 1))))) + (with-current-buffer nntp-server-buffer + (erase-buffer) + (insert + (format + "211 %d %d %d %S\n" (1+ (- high low)) low high group)) + t))) + (deffoo nnimap-request-create-group (group &optional server args) (setq group (nnimap-decode-gnus-group group)) (when (nnimap-change-group nil server) @@ -1122,8 +1134,11 @@ If LIMIT, first try to limit the search to the N last articles." (setq group (caar (nnmail-article-group + ;; We don't really care about the article number, because + ;; that's determined by the IMAP server later. So just + ;; return the group name. `(lambda (group) - (nnml-active-number group ,server)))))) + (list (list group))))))) (setq group (nnimap-decode-gnus-group group)) (when (nnimap-change-group nil server) (nnmail-check-syntax) @@ -1371,7 +1386,8 @@ If LIMIT, first try to limit the search to the N last articles." command (nth 2 quirk)))) -(deffoo nnimap-finish-retrieve-group-infos (server infos sequences) +(deffoo nnimap-finish-retrieve-group-infos (server infos sequences + &optional dont-insert) (when (and sequences (nnimap-change-group nil server t) ;; Check that the process is still alive. @@ -1391,19 +1407,20 @@ If LIMIT, first try to limit the search to the N last articles." (nnimap-parse-flags (nreverse sequences))) infos) - ;; Finally, just return something resembling an active file in - ;; the nntp buffer, so that the agent can save the info, too. - (with-current-buffer nntp-server-buffer - (erase-buffer) - (dolist (info infos) - (let* ((group (gnus-info-group info)) - (active (gnus-active group))) - (when active - (insert (format "%S %d %d y\n" - (decode-coding-string - (gnus-group-real-name group) 'utf-8) - (cdr active) - (car active))))))))))) + (unless dont-insert + ;; Finally, just return something resembling an active file in + ;; the nntp buffer, so that the agent can save the info, too. + (with-current-buffer nntp-server-buffer + (erase-buffer) + (dolist (info infos) + (let* ((group (gnus-info-group info)) + (active (gnus-active group))) + (when active + (insert (format "%S %d %d y\n" + (decode-coding-string + (gnus-group-real-name group) 'utf-8) + (cdr active) + (car active)))))))))))) (defun nnimap-update-infos (flags infos) (dolist (info infos) commit 44df0a8f506db385473ed36c2a5fa26e06e7788d Author: Eli Barzilay Date: Sun Jan 25 22:42:01 2015 -0500 lisp/calculator.el (calculator-update-display): Bug fix & improvement. Avoid a crash when the daved ptr is at the end of the list (= when it's before the first one). Also use `eq' to compare the value so the saved list indicator appears when a value was retrieved from the list rather than an equal result is shown. diff --git a/lisp/calculator.el b/lisp/calculator.el index 7d7c73a..0aef07b 100644 --- a/lisp/calculator.el +++ b/lisp/calculator.el @@ -312,8 +312,8 @@ user-defined operators, use `calculator-user-operators' instead.") It it possible have a unary prefix version of a binary operator if it comes later in this list. If the list begins with the symbol 'nobind, -then no key binding will take place -- this is only useful for predefined -keys. +then no key binding will take place -- this is only useful for +predefined keys. Use `calculator-user-operators' to add operators to this list, see its documentation for an example.") @@ -1124,9 +1124,15 @@ If optional argument FORCE is non-nil, don't use the cached string." " " (and calculator-display-fragile calculator-saved-list - (= (car calculator-stack) - (nth calculator-saved-ptr - calculator-saved-list)) + ;; Hack: use `eq' to compare the number: it's a + ;; flonum, so `eq' means that its the actual + ;; number rather than a computation that had an + ;; equal result (eg, enter 1,3,2, use "v" to see + ;; the average -- it now shows "2" instead of + ;; "2 [3]"). + (eq (car calculator-stack) + (nth calculator-saved-ptr + calculator-saved-list)) (if (= 0 calculator-saved-ptr) (format "[%s]" (length calculator-saved-list)) (format "[%s/%s]" commit c3d4505b5a8bf55044a1f40da5018e83a43157ff Author: Lars Ingebrigtsen Date: Mon Jan 26 12:48:44 2015 +1100 * lisp/net/eww.el (eww-add-bookmark): Fix prompt And clean up the code slightly. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 70293af..044c299 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2015-01-26 Lars Ingebrigtsen + + * net/eww.el (eww-add-bookmark): Fix prompt and clean up the code + slightly. + 2015-01-25 Stefan Monnier * emacs-lisp/cl-generic.el (cl--generic-no-next-method-function): New fun. diff --git a/lisp/net/eww.el b/lisp/net/eww.el index 879eb53..ec7a0ba 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el @@ -1430,24 +1430,23 @@ Differences in #targets are ignored." (defvar eww-bookmarks nil) (defun eww-add-bookmark () - "Add the current page to the bookmarks." + "Bookmark the current page." (interactive) (eww-read-bookmarks) (dolist (bookmark eww-bookmarks) (when (equal (plist-get eww-data :url) (plist-get bookmark :url)) (user-error "Already bookmarked"))) - (if (y-or-n-p "bookmark this page? ") - (progn - (let ((title (replace-regexp-in-string "[\n\t\r]" " " - (plist-get eww-data :title)))) - (setq title (replace-regexp-in-string "\\` +\\| +\\'" "" title)) - (push (list :url (plist-get eww-data :url) - :title title - :time (current-time-string)) - eww-bookmarks)) - (eww-write-bookmarks) - (message "Bookmarked %s (%s)" (plist-get eww-data :url) - (plist-get eww-data :title))))) + (when (y-or-n-p "Bookmark this page?") + (let ((title (replace-regexp-in-string "[\n\t\r]" " " + (plist-get eww-data :title)))) + (setq title (replace-regexp-in-string "\\` +\\| +\\'" "" title)) + (push (list :url (plist-get eww-data :url) + :title title + :time (current-time-string)) + eww-bookmarks)) + (eww-write-bookmarks) + (message "Bookmarked %s (%s)" (plist-get eww-data :url) + (plist-get eww-data :title)))) (defun eww-write-bookmarks () (with-temp-file (expand-file-name "eww-bookmarks" eww-bookmarks-directory) commit 8a6a92fe12f30c75af9b9b22266a56d27916a395 Author: Joakim Verona Date: Sun Jan 25 23:52:34 2015 +0100 Improved glitch fix diff --git a/lisp/xwidget.el b/lisp/xwidget.el index 0a5ddc3..e58ddcf 100644 --- a/lisp/xwidget.el +++ b/lisp/xwidget.el @@ -164,12 +164,14 @@ defaults to the string looking like a url around the cursor position." (image-scroll-down))) (defun xwidget-webkit-scroll-forward () + "Scroll webkit forward,either native or like image mode." (interactive) (if (eq xwidget-webkit-scroll-behaviour 'native) (xwidget-set-adjustment (xwidget-webkit-last-session) 'horizontal t 50) (xwidget-webkit-scroll-forward))) (defun xwidget-webkit-scroll-backward () + "Scroll webkit backward,either native or like image mode." (interactive) (if (eq xwidget-webkit-scroll-behaviour 'native) (xwidget-set-adjustment (xwidget-webkit-last-session) 'horizontal t -50) @@ -306,6 +308,8 @@ Argument STR string." (defun xwidget-webkit-begin-edit-textarea (xw text) + "Start editing of a webkit text area. +XW is the xwidget identifier, TEXT is retrieved from the webkit." (switch-to-buffer (generate-new-buffer "textarea")) @@ -313,6 +317,7 @@ Argument STR string." (insert text)) (defun xwidget-webkit-end-edit-textarea () + "End editing of a webkit text area." (interactive) (goto-char (point-min)) (while (search-forward "\n" nil t) @@ -323,7 +328,7 @@ Argument STR string." ) (defun xwidget-webkit-show-named-element (xw element-name) - "make named-element show. for instance an anchor." + "Make named-element show. for instance an anchor." (interactive (list (xwidget-webkit-current-session) (read-string "element name:"))) ;;TODO ;; since an xwidget is an Emacs object, it is not trivial to do some things that are taken for granted in a normal browser. @@ -383,11 +388,15 @@ Argument STR string." (if (eq xwidget-webkit-scroll-behaviour 'native) (xwidget-webkit-adjust-size-to-window) (xwidget-webkit-adjust-size-to-content)) - (recenter-top-bottom) + ;;the recenter is intended to correct a visual glitch + ;;it errors out if the buffer isnt visible, but then we dont get the glitch, + ;;so silence errors + (ignore-errors + (recenter-top-bottom)) ) (defun xwidget-webkit-adjust-size-to-window () - "Adjust webkit to window." + "Adjust webkit to window."m (interactive) (xwidget-resize ( xwidget-webkit-current-session) (window-pixel-width) (window-pixel-height))) commit 03a20dc9519616359bfa1b77fd4b31e1963c8bd4 Author: Eli Zaretskii Date: Mon Jan 26 00:03:14 2015 +0200 Use bool for boolean in w32term.c src/w32term.c (x_update_window_begin, x_update_window_end) (x_update_end, x_after_update_window_line) (x_set_glyph_string_gc, x_draw_glyph_string_background) (x_draw_glyph_string_foreground) (x_draw_composite_glyph_string_foreground) (x_draw_glyphless_glyph_string_foreground) (x_draw_image_glyph_string, x_draw_glyph_string) (x_draw_stretch_glyph_string, note_mouse_movement) (w32_mouse_position, x_scroll_bar_report_motion) (x_horizontal_scroll_bar_report_motion, w32_read_socket) (w32_set_vertical_scroll_bar, w32_set_horizontal_scroll_bar) (w32_draw_window_cursor, x_new_font, x_set_offset) (x_set_window_size, x_make_frame_invisible, x_iconify_frame): Use bool where appropriate. diff --git a/src/ChangeLog b/src/ChangeLog index bdc7c72..4fc0de7 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,21 @@ 2015-01-25 Eli Zaretskii + Use bool for boolean in w32term.c + * w32term.c (x_update_window_begin, x_update_window_end) + (x_update_end, x_after_update_window_line) + (x_set_glyph_string_gc, x_draw_glyph_string_background) + (x_draw_glyph_string_foreground) + (x_draw_composite_glyph_string_foreground) + (x_draw_glyphless_glyph_string_foreground) + (x_draw_image_glyph_string, x_draw_glyph_string) + (x_draw_stretch_glyph_string, note_mouse_movement) + (w32_mouse_position, x_scroll_bar_report_motion) + (x_horizontal_scroll_bar_report_motion, w32_read_socket) + (w32_set_vertical_scroll_bar, w32_set_horizontal_scroll_bar) + (w32_draw_window_cursor, x_new_font, x_set_offset) + (x_set_window_size, x_make_frame_invisible, x_iconify_frame): Use + bool where appropriate. + Use bool for boolean in w32fns.c * w32fns.c (w32_defined_color, x_decode_color) (Fxw_color_defined_p, Fxw_color_values, x_set_icon_type) diff --git a/src/w32term.c b/src/w32term.c index ce28e05..251c46c 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -559,7 +559,7 @@ x_update_window_begin (struct window *w) if (f == hlinfo->mouse_face_mouse_frame) { /* Don't do highlighting for mouse motion during the update. */ - hlinfo->mouse_face_defer = 1; + hlinfo->mouse_face_defer = true; /* If F needs to be redrawn, simply forget about any prior mouse highlighting. */ @@ -682,11 +682,11 @@ x_update_window_end (struct window *w, bool cursor_on_p, block_input (); if (cursor_on_p) - display_and_set_cursor (w, 1, + display_and_set_cursor (w, true, w->output_cursor.hpos, w->output_cursor.vpos, w->output_cursor.x, w->output_cursor.y); - if (draw_window_fringes (w, 1)) + if (draw_window_fringes (w, true)) { if (WINDOW_RIGHT_DIVIDER_WIDTH (w)) x_draw_right_divider (w); @@ -728,7 +728,7 @@ x_update_end (struct frame *f) return; /* Mouse highlight may be displayed again. */ - MOUSE_HL_INFO (f)->mouse_face_defer = 0; + MOUSE_HL_INFO (f)->mouse_face_defer = false; } @@ -758,7 +758,7 @@ x_after_update_window_line (struct window *w, struct glyph_row *desired_row) eassert (w); if (!desired_row->mode_line_p && !w->pseudo_window_p) - desired_row->redraw_fringe_bitmaps_p = 1; + desired_row->redraw_fringe_bitmaps_p = true; /* When a window has disappeared, make sure that no rest of full-width rows stays visible in the internal border. Could @@ -903,7 +903,7 @@ w32_destroy_fringe_bitmap (int which) static void x_set_glyph_string_clipping (struct glyph_string *); static void x_set_glyph_string_gc (struct glyph_string *); static void x_draw_glyph_string_background (struct glyph_string *, - int); + bool); static void x_draw_glyph_string_foreground (struct glyph_string *); static void x_draw_composite_glyph_string_foreground (struct glyph_string *); static void x_draw_glyph_string_box (struct glyph_string *); @@ -925,7 +925,7 @@ static void w32_draw_relief_rect (struct frame *, int, int, int, int, int, int, int, int, int, int, RECT *); static void w32_draw_box_rect (struct glyph_string *, int, int, int, int, - int, int, int, RECT *); + int, bool, bool, RECT *); /* Set S->gc to a suitable GC for drawing glyph string S in cursor @@ -1064,7 +1064,7 @@ x_set_glyph_string_gc (struct glyph_string *s) else if (s->hl == DRAW_CURSOR) { x_set_cursor_gc (s); - s->stippled_p = 0; + s->stippled_p = false; } else if (s->hl == DRAW_MOUSE_FACE) { @@ -1190,7 +1190,7 @@ x_clear_glyph_string_rect (struct glyph_string *s, contains the first component of a composition. */ static void -x_draw_glyph_string_background (struct glyph_string *s, int force_p) +x_draw_glyph_string_background (struct glyph_string *s, bool force_p) { /* Nothing to do if background has already been drawn or if it shouldn't be drawn in the first place. */ @@ -1208,7 +1208,7 @@ x_draw_glyph_string_background (struct glyph_string *s, int force_p) s->background_width, s->height - 2 * box_line_width); XSetFillStyle (s->display, s->gc, FillSolid); - s->background_filled_p = 1; + s->background_filled_p = true; } else #endif @@ -1220,7 +1220,7 @@ x_draw_glyph_string_background (struct glyph_string *s, int force_p) x_clear_glyph_string_rect (s, s->x, s->y + box_line_width, s->background_width, s->height - 2 * box_line_width); - s->background_filled_p = 1; + s->background_filled_p = true; } } } @@ -1273,11 +1273,11 @@ x_draw_glyph_string_foreground (struct glyph_string *s) y = s->ybase - boff; if (s->for_overlaps || (s->background_filled_p && s->hl != DRAW_CURSOR)) - font->driver->draw (s, 0, s->nchars, x, y, 0); + font->driver->draw (s, 0, s->nchars, x, y, false); else - font->driver->draw (s, 0, s->nchars, x, y, 1); + font->driver->draw (s, 0, s->nchars, x, y, true); if (s->face->overstrike) - font->driver->draw (s, 0, s->nchars, x + 1, y, 0); + font->driver->draw (s, 0, s->nchars, x + 1, y, false); SelectObject (s->hdc, old_font); } @@ -1331,9 +1331,9 @@ x_draw_composite_glyph_string_foreground (struct glyph_string *s) int xx = x + s->cmp->offsets[j * 2]; int yy = y - s->cmp->offsets[j * 2 + 1]; - font->driver->draw (s, j, j + 1, xx, yy, 0); + font->driver->draw (s, j, j + 1, xx, yy, false); if (s->face->overstrike) - font->driver->draw (s, j, j + 1, xx + 1, yy, 0); + font->driver->draw (s, j, j + 1, xx + 1, yy, false); } SelectObject (s->hdc, old_font); } @@ -1358,20 +1358,20 @@ x_draw_composite_glyph_string_foreground (struct glyph_string *s) if (j < i) { - font->driver->draw (s, j, i, x, y, 0); + font->driver->draw (s, j, i, x, y, false); x += width; } xoff = LGLYPH_XOFF (glyph); yoff = LGLYPH_YOFF (glyph); wadjust = LGLYPH_WADJUST (glyph); - font->driver->draw (s, i, i + 1, x + xoff, y + yoff, 0); + font->driver->draw (s, i, i + 1, x + xoff, y + yoff, false); x += wadjust; j = i + 1; width = 0; } } if (j < i) - font->driver->draw (s, j, i, x, y, 0); + font->driver->draw (s, j, i, x, y, false); SelectObject (s->hdc, old_font); } @@ -1386,7 +1386,7 @@ x_draw_glyphless_glyph_string_foreground (struct glyph_string *s) struct glyph *glyph = s->first_glyph; XChar2b char2b[8]; int x, i, j; - int with_background; + bool with_background; /* If first glyph of S has a left box line, start drawing the text of S to the right of that box line. */ @@ -1401,8 +1401,8 @@ x_draw_glyphless_glyph_string_foreground (struct glyph_string *s) SetTextAlign (s->hdc, TA_BASELINE | TA_LEFT); s->char2b = char2b; - with_background = ! (s->for_overlaps - || (s->background_filled_p && s->hl != DRAW_CURSOR)); + with_background = ((s->for_overlaps + || (s->background_filled_p && s->hl != DRAW_CURSOR))) == 0; for (i = 0; i < s->nchars; i++, glyph++) { char buf[7], *str = NULL; @@ -1712,7 +1712,7 @@ w32_draw_relief_rect (struct frame *f, static void w32_draw_box_rect (struct glyph_string *s, int left_x, int top_y, int right_x, int bottom_y, int width, - int left_p, int right_p, RECT *clip_rect) + bool left_p, bool right_p, RECT *clip_rect) { w32_set_clip_rectangle (s->hdc, clip_rect); @@ -1747,8 +1747,8 @@ w32_draw_box_rect (struct glyph_string *s, static void x_draw_glyph_string_box (struct glyph_string *s) { - int width, left_x, right_x, top_y, bottom_y, last_x, raised_p; - int left_p, right_p; + int width, left_x, right_x, top_y, bottom_y, last_x; + bool left_p, right_p, raised_p; struct glyph *last_glyph; RECT clip_rect; @@ -2157,7 +2157,7 @@ x_draw_image_glyph_string (struct glyph_string *s) #endif x_draw_glyph_string_bg_rect (s, x, y, width, height); - s->background_filled_p = 1; + s->background_filled_p = true; } /* Draw the foreground. */ @@ -2293,7 +2293,7 @@ x_draw_stretch_glyph_string (struct glyph_string *s) x_draw_glyph_string_bg_rect (s, x, s->y, background_width, s->height); } - s->background_filled_p = 1; + s->background_filled_p = true; } @@ -2321,7 +2321,7 @@ x_draw_glyph_string (struct glyph_string *s) if (next->first_glyph->type == STRETCH_GLYPH) x_draw_stretch_glyph_string (next); else - x_draw_glyph_string_background (next, 1); + x_draw_glyph_string_background (next, true); next->num_clips = 0; } } @@ -2338,7 +2338,7 @@ x_draw_glyph_string (struct glyph_string *s) { x_set_glyph_string_clipping (s); - x_draw_glyph_string_background (s, 1); + x_draw_glyph_string_background (s, true); x_draw_glyph_string_box (s); x_set_glyph_string_clipping (s); relief_drawn_p = 1; @@ -2366,26 +2366,26 @@ x_draw_glyph_string (struct glyph_string *s) case CHAR_GLYPH: if (s->for_overlaps) - s->background_filled_p = 1; + s->background_filled_p = true; else - x_draw_glyph_string_background (s, 0); + x_draw_glyph_string_background (s, false); x_draw_glyph_string_foreground (s); break; case COMPOSITE_GLYPH: if (s->for_overlaps || (s->cmp_from > 0 && ! s->first_glyph->u.cmp.automatic)) - s->background_filled_p = 1; + s->background_filled_p = true; else - x_draw_glyph_string_background (s, 1); + x_draw_glyph_string_background (s, true); x_draw_composite_glyph_string_foreground (s); break; case GLYPHLESS_GLYPH: if (s->for_overlaps) - s->background_filled_p = 1; + s->background_filled_p = true; else - x_draw_glyph_string_background (s, 0); + x_draw_glyph_string_background (s, false); x_draw_glyphless_glyph_string_foreground (s); break; @@ -3302,7 +3302,7 @@ note_mouse_movement (struct frame *frame, MSG *msg) if (msg->hwnd != FRAME_W32_WINDOW (frame)) { - frame->mouse_moved = 1; + frame->mouse_moved = true; dpyinfo->last_mouse_scroll_bar = NULL; note_mouse_highlight (frame, -1, -1); dpyinfo->last_mouse_glyph_frame = NULL; @@ -3315,7 +3315,7 @@ note_mouse_movement (struct frame *frame, MSG *msg) || mouse_x < r->left || mouse_x >= r->right || mouse_y < r->top || mouse_y >= r->bottom) { - frame->mouse_moved = 1; + frame->mouse_moved = true; dpyinfo->last_mouse_scroll_bar = NULL; note_mouse_highlight (frame, mouse_x, mouse_y); /* Remember the mouse position here, as w32_mouse_position only @@ -3399,7 +3399,7 @@ w32_mouse_position (struct frame **fp, int insist, Lisp_Object *bar_window, /* Clear the mouse-moved flag for every frame on this display. */ FOR_EACH_FRAME (tail, frame) - XFRAME (frame)->mouse_moved = 0; + XFRAME (frame)->mouse_moved = false; dpyinfo->last_mouse_scroll_bar = NULL; @@ -3822,7 +3822,7 @@ w32_set_vertical_scroll_bar (struct window *w, } unblock_input (); - bar = x_scroll_bar_create (w, left, top, width, height, 0); + bar = x_scroll_bar_create (w, left, top, width, height, false); } else { @@ -3922,7 +3922,7 @@ w32_set_horizontal_scroll_bar (struct window *w, } unblock_input (); - bar = x_scroll_bar_create (w, left, top, width, height, 1); + bar = x_scroll_bar_create (w, left, top, width, height, true); } else { @@ -4405,7 +4405,7 @@ x_scroll_bar_report_motion (struct frame **fp, Lisp_Object *bar_window, XSETINT (*x, pos); XSETINT (*y, top_range); - f->mouse_moved = 0; + f->mouse_moved = false; dpyinfo->last_mouse_scroll_bar = NULL; *time = dpyinfo->last_mouse_movement_time; @@ -4456,7 +4456,7 @@ x_horizontal_scroll_bar_report_motion (struct frame **fp, Lisp_Object *bar_windo XSETINT (*y, pos); XSETINT (*x, left_range); - f->mouse_moved = 0; + f->mouse_moved = false; dpyinfo->last_mouse_scroll_bar = NULL; *time = dpyinfo->last_mouse_movement_time; @@ -4596,7 +4596,7 @@ w32_read_socket (struct terminal *terminal, /* Definitely not obscured, so mark as visible. */ SET_FRAME_VISIBLE (f, 1); - SET_FRAME_ICONIFIED (f, 0); + SET_FRAME_ICONIFIED (f, false); SET_FRAME_GARBAGED (f); if (!f->output_data.w32->asked_for_visible) DebPrint (("frame %p (%s) reexposed by WM_PAINT\n", f, @@ -4658,7 +4658,7 @@ w32_read_socket (struct terminal *terminal, && !EQ (f->tool_bar_window, hlinfo->mouse_face_window)) { clear_mouse_face (hlinfo); - hlinfo->mouse_face_hidden = 1; + hlinfo->mouse_face_hidden = true; } if (temp_index == sizeof temp_buffer / sizeof (short)) @@ -4683,7 +4683,7 @@ w32_read_socket (struct terminal *terminal, && !EQ (f->tool_bar_window, hlinfo->mouse_face_window)) { clear_mouse_face (hlinfo); - hlinfo->mouse_face_hidden = 1; + hlinfo->mouse_face_hidden = true; } if (temp_index == sizeof temp_buffer / sizeof (short)) @@ -4761,7 +4761,7 @@ w32_read_socket (struct terminal *terminal, && !EQ (f->tool_bar_window, hlinfo->mouse_face_window)) { clear_mouse_face (hlinfo); - hlinfo->mouse_face_hidden = 1; + hlinfo->mouse_face_hidden = true; } if (temp_index == sizeof temp_buffer / sizeof (short)) @@ -4794,7 +4794,7 @@ w32_read_socket (struct terminal *terminal, if (hlinfo->mouse_face_hidden) { - hlinfo->mouse_face_hidden = 0; + hlinfo->mouse_face_hidden = false; clear_mouse_face (hlinfo); } @@ -4913,7 +4913,7 @@ w32_read_socket (struct terminal *terminal, the ButtonPress. */ if (f != 0) { - f->mouse_moved = 0; + f->mouse_moved = false; if (!tool_bar_p) f->last_tool_bar_item = -1; } @@ -4940,7 +4940,7 @@ w32_read_socket (struct terminal *terminal, event; any subsequent mouse-movement Emacs events should reflect only motion after the ButtonPress. */ - f->mouse_moved = 0; + f->mouse_moved = false; f->last_tool_bar_item = -1; } dpyinfo->last_mouse_frame = f; @@ -5041,7 +5041,7 @@ w32_read_socket (struct terminal *terminal, { case SIZE_MINIMIZED: SET_FRAME_VISIBLE (f, 0); - SET_FRAME_ICONIFIED (f, 1); + SET_FRAME_ICONIFIED (f, true); inev.kind = ICONIFY_EVENT; XSETFRAME (inev.frame_or_window, f); @@ -5052,7 +5052,7 @@ w32_read_socket (struct terminal *terminal, bool iconified = FRAME_ICONIFIED_P (f); SET_FRAME_VISIBLE (f, 1); - SET_FRAME_ICONIFIED (f, 0); + SET_FRAME_ICONIFIED (f, false); /* wait_reading_process_output will notice this and update the frame's display structures. */ @@ -5099,7 +5099,7 @@ w32_read_socket (struct terminal *terminal, conditional again in revision 116727. martin */ if (iconified) SET_FRAME_VISIBLE (f, 1); - SET_FRAME_ICONIFIED (f, 0); + SET_FRAME_ICONIFIED (f, false); /* wait_reading_process_output will notice this and update the frame's display structures. */ @@ -5636,7 +5636,7 @@ w32_draw_window_cursor (struct window *w, struct glyph_row *glyph_row, w->phys_cursor_type = cursor_type; } - w->phys_cursor_on_p = 1; + w->phys_cursor_on_p = true; /* If this is the active cursor, we need to track it with the system caret, so third party software like screen magnifiers @@ -5674,7 +5674,7 @@ w32_draw_window_cursor (struct window *w, struct glyph_row *glyph_row, ? (w->phys_cursor.hpos < 0) : (w->phys_cursor.hpos >= glyph_row->used[TEXT_AREA]))) { - glyph_row->cursor_in_fringe_p = 1; + glyph_row->cursor_in_fringe_p = true; draw_fringe_bitmap (w, glyph_row, glyph_row->reversed_p); return; } @@ -5838,7 +5838,8 @@ x_new_font (struct frame *f, Lisp_Object font_object, int fontset) problems because the tip frame has no widget. */ if (NILP (tip_frame) || XFRAME (tip_frame) != f) adjust_frame_size (f, FRAME_COLS (f) * FRAME_COLUMN_WIDTH (f), - FRAME_LINES (f) * FRAME_LINE_HEIGHT (f), 3, 0, Qfont); + FRAME_LINES (f) * FRAME_LINE_HEIGHT (f), 3, + false, Qfont); } /* X version sets font of input methods here also. */ @@ -5945,7 +5946,7 @@ x_set_offset (struct frame *f, register int xoff, register int yoff, x_calc_absolute_position (f); block_input (); - x_wm_set_size_hint (f, (long) 0, 0); + x_wm_set_size_hint (f, (long) 0, false); modified_left = f->left_pos; modified_top = f->top_pos; @@ -6140,7 +6141,7 @@ x_set_window_size (struct frame *f, bool change_gravity, } f->win_gravity = NorthWestGravity; - x_wm_set_size_hint (f, (long) 0, 0); + x_wm_set_size_hint (f, (long) 0, false); f->want_fullscreen = FULLSCREEN_NONE; w32fullscreen_hook (f); @@ -6452,7 +6453,7 @@ x_make_frame_invisible (struct frame *f) FRAME_SAMPLE_VISIBILITY set this. So do it by hand, and synchronize with the server to make sure we agree. */ SET_FRAME_VISIBLE (f, 0); - SET_FRAME_ICONIFIED (f, 0); + SET_FRAME_ICONIFIED (f, false); unblock_input (); } @@ -6477,7 +6478,7 @@ x_iconify_frame (struct frame *f) SendMessage (FRAME_W32_WINDOW (f), WM_SYSCOMMAND, SC_MINIMIZE, 0); SET_FRAME_VISIBLE (f, 0); - SET_FRAME_ICONIFIED (f, 1); + SET_FRAME_ICONIFIED (f, true); unblock_input (); } commit 49b822741f9cabc47b9a748eb6d82c3fbf2bb4a6 Author: Eli Zaretskii Date: Sun Jan 25 23:12:35 2015 +0200 Use bool for boolean in w32fns.c src/w32fns.c (w32_defined_color, x_decode_color) (Fxw_color_defined_p, Fxw_color_values, x_set_icon_type) (x_set_menu_bar_lines, x_change_tool_bar_height) (x_set_internal_border_width, x_explicitly_set_name) (x_implicitly_set_name, Fx_create_frame, w32_window) (x_create_tip_frame, Fx_show_tip): Use bool where appropriate. diff --git a/src/ChangeLog b/src/ChangeLog index eeea0d8..bdc7c72 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2015-01-25 Eli Zaretskii + + Use bool for boolean in w32fns.c + * w32fns.c (w32_defined_color, x_decode_color) + (Fxw_color_defined_p, Fxw_color_values, x_set_icon_type) + (x_set_menu_bar_lines, x_change_tool_bar_height) + (x_set_internal_border_width, x_explicitly_set_name) + (x_implicitly_set_name, Fx_create_frame, w32_window) + (x_create_tip_frame, Fx_show_tip): Use bool where appropriate. + 2015-01-25 Paul Eggert Use bool for boolean in xfns.c diff --git a/src/w32fns.c b/src/w32fns.c index 55e5829..c269c4f 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -1133,7 +1133,8 @@ gamma_correct (struct frame *f, COLORREF *color) If ALLOC is nonzero, allocate a new colormap cell. */ int -w32_defined_color (struct frame *f, const char *color, XColor *color_def, int alloc) +w32_defined_color (struct frame *f, const char *color, XColor *color_def, + bool alloc_p) { register Lisp_Object tem; COLORREF w32_color_ref; @@ -1167,7 +1168,7 @@ w32_defined_color (struct frame *f, const char *color, XColor *color_def, int al entry = entry->next; } - if (entry == NULL && alloc) + if (entry == NULL && alloc_p) { /* not already mapped, so add to list */ entry = xmalloc (sizeof (struct w32_palette_entry)); @@ -1220,7 +1221,7 @@ x_decode_color (struct frame *f, Lisp_Object arg, int def) /* w32_defined_color is responsible for coping with failures by looking for a near-miss. */ - if (w32_defined_color (f, SDATA (arg), &cdef, 1)) + if (w32_defined_color (f, SDATA (arg), &cdef, true)) return cdef.pixel; /* defined_color failed; return an ultimate default. */ @@ -1524,7 +1525,7 @@ x_set_cursor_type (struct frame *f, Lisp_Object arg, Lisp_Object oldval) void x_set_icon_type (struct frame *f, Lisp_Object arg, Lisp_Object oldval) { - int result; + bool result; if (NILP (arg) && NILP (oldval)) return; @@ -1632,7 +1633,7 @@ x_set_internal_border_width (struct frame *f, Lisp_Object arg, Lisp_Object oldva if (FRAME_X_WINDOW (f) != 0) { - adjust_frame_size (f, -1, -1, 3, 0, Qinternal_border_width); + adjust_frame_size (f, -1, -1, 3, false, Qinternal_border_width); if (FRAME_VISIBLE_P (f)) x_clear_under_internal_border (f); @@ -1678,7 +1679,7 @@ x_set_menu_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) of the outer rectangle (including decorations) unchanged, and a second time because we want to keep the height of the inner rectangle (without the decorations unchanged). */ - adjust_frame_size (f, -1, -1, 2, 1, Qmenu_bar_lines); + adjust_frame_size (f, -1, -1, 2, true, Qmenu_bar_lines); /* Not sure whether this is needed. */ x_clear_under_internal_border (f); @@ -1748,7 +1749,7 @@ x_change_tool_bar_height (struct frame *f, int height) (!f->tool_bar_redisplayed_once ? 1 : (old_height == 0 || height == 0) ? 2 : 4), - 0, Qtool_bar_lines); + false, Qtool_bar_lines); /* adjust_frame_size might not have done anything, garbage frame here. */ @@ -1771,7 +1772,7 @@ x_change_tool_bar_height (struct frame *f, int height) F->explicit_name is set, ignore the new name; otherwise, set it. */ void -x_set_name (struct frame *f, Lisp_Object name, int explicit) +x_set_name (struct frame *f, Lisp_Object name, bool explicit) { /* Make sure that requests from lisp code override requests from Emacs redisplay code. */ @@ -1826,7 +1827,7 @@ x_set_name (struct frame *f, Lisp_Object name, int explicit) void x_explicitly_set_name (struct frame *f, Lisp_Object arg, Lisp_Object oldval) { - x_set_name (f, arg, 1); + x_set_name (f, arg, true); } /* This function should be called by Emacs redisplay code to set the @@ -1835,7 +1836,7 @@ x_explicitly_set_name (struct frame *f, Lisp_Object arg, Lisp_Object oldval) void x_implicitly_set_name (struct frame *f, Lisp_Object arg, Lisp_Object oldval) { - x_set_name (f, arg, 0); + x_set_name (f, arg, false); } /* Change the title of frame F to NAME. @@ -4199,7 +4200,7 @@ my_create_tip_window (struct frame *f) /* Create and set up the w32 window for frame F. */ static void -w32_window (struct frame *f, long window_prompting, int minibuffer_only) +w32_window (struct frame *f, long window_prompting, bool minibuffer_only) { block_input (); @@ -4418,7 +4419,7 @@ This function is an internal primitive--use `make-frame' instead. */) struct frame *f; Lisp_Object frame, tem; Lisp_Object name; - int minibuffer_only = 0; + bool minibuffer_only = false; long window_prompting = 0; ptrdiff_t count = SPECPDL_INDEX (); struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; @@ -4478,12 +4479,12 @@ This function is an internal primitive--use `make-frame' instead. */) else if (EQ (tem, Qonly)) { f = make_minibuffer_frame (); - minibuffer_only = 1; + minibuffer_only = true; } else if (WINDOWP (tem)) f = make_frame_without_minibuffer (tem, kb, display); else - f = make_frame (1); + f = make_frame (true); XSETFRAME (frame, f); @@ -4520,12 +4521,12 @@ This function is an internal primitive--use `make-frame' instead. */) /* Cast to UINT_PTR shuts up compiler warnings about cast to pointer from integer of different size. */ f->output_data.w32->parent_desc = (Window) (UINT_PTR) XFASTINT (parent); - f->output_data.w32->explicit_parent = 1; + f->output_data.w32->explicit_parent = true; } else { f->output_data.w32->parent_desc = FRAME_DISPLAY_INFO (f)->root_window; - f->output_data.w32->explicit_parent = 0; + f->output_data.w32->explicit_parent = false; } /* Set the name; the functions to which we pass f expect the name to @@ -4533,12 +4534,12 @@ This function is an internal primitive--use `make-frame' instead. */) if (EQ (name, Qunbound) || NILP (name)) { fset_name (f, build_string (dpyinfo->w32_id_name)); - f->explicit_name = 0; + f->explicit_name = false; } else { fset_name (f, name); - f->explicit_name = 1; + f->explicit_name = true; /* Use the frame's title when getting resources for this frame. */ specbind (Qx_resource_name, name); } @@ -4616,7 +4617,7 @@ This function is an internal primitive--use `make-frame' instead. */) had one frame line vs one toolbar line which left us with a zero root window height which was obviously wrong as well ... */ adjust_frame_size (f, FRAME_COLS (f) * FRAME_COLUMN_WIDTH (f), - FRAME_LINES (f) * FRAME_LINE_HEIGHT (f), 5, 1, + FRAME_LINES (f) * FRAME_LINE_HEIGHT (f), 5, true, Qx_create_frame_1); /* The X resources controlling the menu-bar and tool-bar are @@ -4651,7 +4652,7 @@ This function is an internal primitive--use `make-frame' instead. */) f->output_data.w32->current_cursor = f->output_data.w32->nontext_cursor; - window_prompting = x_figure_window_size (f, parameters, 1); + window_prompting = x_figure_window_size (f, parameters, true); tem = x_get_arg (dpyinfo, parameters, Qunsplittable, 0, 0, RES_TYPE_BOOLEAN); f->no_split = minibuffer_only || EQ (tem, Qt); @@ -4685,14 +4686,14 @@ This function is an internal primitive--use `make-frame' instead. */) /* Allow x_set_window_size, now. */ f->can_x_set_window_size = true; - adjust_frame_size (f, FRAME_TEXT_WIDTH (f), FRAME_TEXT_HEIGHT (f), 0, 1, + adjust_frame_size (f, FRAME_TEXT_WIDTH (f), FRAME_TEXT_HEIGHT (f), 0, true, Qx_create_frame_2); /* Tell the server what size and position, etc, we want, and how badly we want them. This should be done after we have the menu bar so that its size can be taken into account. */ block_input (); - x_wm_set_size_hint (f, window_prompting, 0); + x_wm_set_size_hint (f, window_prompting, false); unblock_input (); /* Make the window appear on the frame and enable display, unless @@ -4762,7 +4763,7 @@ DEFUN ("xw-color-defined-p", Fxw_color_defined_p, Sxw_color_defined_p, 1, 2, 0, CHECK_STRING (color); - if (w32_defined_color (f, SDATA (color), &foo, 0)) + if (w32_defined_color (f, SDATA (color), &foo, false)) return Qt; else return Qnil; @@ -4777,7 +4778,7 @@ DEFUN ("xw-color-values", Fxw_color_values, Sxw_color_values, 1, 2, 0, CHECK_STRING (color); - if (w32_defined_color (f, SDATA (color), &foo, 0)) + if (w32_defined_color (f, SDATA (color), &foo, false)) return list3i ((GetRValue (foo.pixel) << 8) | GetRValue (foo.pixel), (GetGValue (foo.pixel) << 8) | GetGValue (foo.pixel), (GetBValue (foo.pixel) << 8) | GetBValue (foo.pixel)); @@ -5647,7 +5648,7 @@ x_create_tip_frame (struct w32_display_info *dpyinfo, frame = Qnil; GCPRO3 (parms, name, frame); /* Make a frame without minibuffer nor mode-line. */ - f = make_frame (0); + f = make_frame (false); f->wants_modeline = 0; XSETFRAME (frame, f); @@ -5655,7 +5656,7 @@ x_create_tip_frame (struct w32_display_info *dpyinfo, buffer = Fget_buffer_create (tip); /* Use set_window_buffer instead of Fset_window_buffer (see discussion of bug#11984, bug#12025, bug#12026). */ - set_window_buffer (FRAME_ROOT_WINDOW (f), buffer, 0, 0); + set_window_buffer (FRAME_ROOT_WINDOW (f), buffer, false, false); old_buffer = current_buffer; set_buffer_internal_1 (XBUFFER (buffer)); bset_truncate_lines (current_buffer, Qnil); @@ -5685,19 +5686,19 @@ x_create_tip_frame (struct w32_display_info *dpyinfo, #endif /* GLYPH_DEBUG */ FRAME_KBOARD (f) = kb; f->output_data.w32->parent_desc = FRAME_DISPLAY_INFO (f)->root_window; - f->output_data.w32->explicit_parent = 0; + f->output_data.w32->explicit_parent = false; /* Set the name; the functions to which we pass f expect the name to be set. */ if (EQ (name, Qunbound) || NILP (name)) { fset_name (f, build_string (dpyinfo->w32_id_name)); - f->explicit_name = 0; + f->explicit_name = false; } else { fset_name (f, name); - f->explicit_name = 1; + f->explicit_name = true; /* use the frame's title when getting resources for this frame. */ specbind (Qx_resource_name, name); } @@ -5758,7 +5759,7 @@ x_create_tip_frame (struct w32_display_info *dpyinfo, f->output_data.w32->dwStyle = WS_BORDER | WS_POPUP | WS_DISABLED; f->output_data.w32->parent_desc = FRAME_DISPLAY_INFO (f)->root_window; - window_prompting = x_figure_window_size (f, parms, 0); + window_prompting = x_figure_window_size (f, parms, false); /* No fringes on tip frame. */ f->fringe_cols = 0; @@ -5786,7 +5787,7 @@ x_create_tip_frame (struct w32_display_info *dpyinfo, SET_FRAME_COLS (f, 0); SET_FRAME_LINES (f, 0); adjust_frame_size (f, width * FRAME_COLUMN_WIDTH (f), - height * FRAME_LINE_HEIGHT (f), 0, 1, Qnil); + height * FRAME_LINE_HEIGHT (f), 0, true, Qnil); /* Add `tooltip' frame parameter's default value. */ if (NILP (Fframe_parameter (frame, Qtooltip))) @@ -5818,7 +5819,7 @@ x_create_tip_frame (struct w32_display_info *dpyinfo, Fmodify_frame_parameters (frame, colors); } - f->no_split = 1; + f->no_split = true; UNGCPRO; @@ -5965,7 +5966,8 @@ Text larger than the specified size is clipped. */) int root_x, root_y; struct buffer *old_buffer; struct text_pos pos; - int i, width, height, seen_reversed_p; + int i, width, height; + bool seen_reversed_p; struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; int old_windows_or_buffers_changed = windows_or_buffers_changed; ptrdiff_t count = SPECPDL_INDEX (); @@ -6094,7 +6096,7 @@ Text larger than the specified size is clipped. */) FRAME_TOTAL_COLS (f) = WINDOW_TOTAL_COLS (w); adjust_frame_glyphs (f); - w->pseudo_window_p = 1; + w->pseudo_window_p = true; /* Display the tooltip text in a temporary buffer. */ old_buffer = current_buffer; @@ -6106,7 +6108,8 @@ Text larger than the specified size is clipped. */) try_window (FRAME_ROOT_WINDOW (f), pos, TRY_WINDOW_IGNORE_FONTS_CHANGE); /* Compute width and height of the tooltip. */ - width = height = seen_reversed_p = 0; + width = height = 0; + seen_reversed_p = false; for (i = 0; i < w->desired_matrix->nrows; ++i) { struct glyph_row *row = &w->desired_matrix->rows[i]; @@ -6118,7 +6121,7 @@ Text larger than the specified size is clipped. */) break; /* Let the row go over the full width of the frame. */ - row->full_width_p = 1; + row->full_width_p = true; row_width = row->pixel_width; if (row->used[TEXT_AREA]) @@ -6142,7 +6145,7 @@ Text larger than the specified size is clipped. */) if (g->type == STRETCH_GLYPH && NILP (g->object)) { row_width -= g->pixel_width; - seen_reversed_p = 1; + seen_reversed_p = true; } } } @@ -6183,7 +6186,7 @@ Text larger than the specified size is clipped. */) if (!row->enabled_p || !MATRIX_ROW_DISPLAYS_TEXT_P (row)) break; - row->full_width_p = 1; + row->full_width_p = true; row_width = row->pixel_width; if (row->used[TEXT_AREA] && !row->reversed_p) { diff --git a/src/w32term.h b/src/w32term.h index c905ef1..3532e95 100644 --- a/src/w32term.h +++ b/src/w32term.h @@ -239,7 +239,7 @@ Lisp_Object display_x_get_resource (struct w32_display_info *, extern struct w32_display_info *w32_term_init (Lisp_Object, char *, char *); extern int w32_defined_color (struct frame *f, const char *color, - XColor *color_def, int alloc); + XColor *color_def, bool alloc_p); extern void x_set_window_size (struct frame *f, bool change_gravity, int width, int height, bool pixelwise); extern int x_display_pixel_height (struct w32_display_info *); commit 11a9f3779ca7ec0c7559a5a3abf732d068684b84 Author: Paul Eggert Date: Sun Jan 25 12:32:49 2015 -0800 Use bool for boolean in xfns.c * xfaces.c (x_update_menu_appearance): * xfns.c (x_real_positions, x_defined_color, x_decode_color) (xg_set_icon, xg_set_icon_from_xpm_data, x_set_cursor_color) (x_set_icon_type, x_set_icon_name, x_set_menu_bar_lines) (x_change_tool_bar_height, x_set_internal_border_width) (x_encode_text, x_set_name_internal, x_explicitly_set_name) (x_implicitly_set_name, x_default_scroll_bar_color_parameter) (hack_wm_protocols, xic_create_fontsetname, xic_free_xfontset) (x_window, x_icon, Fx_wm_set_size_hint, Fx_create_frame) (Fxw_color_defined_p, Fxw_color_values, x_create_tip_frame) (Fx_show_tip, clean_up_file_dialog, Fx_file_dialog) (clean_up_dialog, syms_of_xfns): * xterm.h (xg_set_icon, xg_set_icon_from_xpm_data) (xic_create_fontsetname): Use bool for boolean. * xfns.c: Include bitmaps/gray.xbm unconditionally. diff --git a/src/ChangeLog b/src/ChangeLog index b137045..eeea0d8 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,23 @@ 2015-01-25 Paul Eggert + Use bool for boolean in xfns.c + * xfaces.c (x_update_menu_appearance): + * xfns.c (x_real_positions, x_defined_color, x_decode_color) + (xg_set_icon, xg_set_icon_from_xpm_data, x_set_cursor_color) + (x_set_icon_type, x_set_icon_name, x_set_menu_bar_lines) + (x_change_tool_bar_height, x_set_internal_border_width) + (x_encode_text, x_set_name_internal, x_explicitly_set_name) + (x_implicitly_set_name, x_default_scroll_bar_color_parameter) + (hack_wm_protocols, xic_create_fontsetname, xic_free_xfontset) + (x_window, x_icon, Fx_wm_set_size_hint, Fx_create_frame) + (Fxw_color_defined_p, Fxw_color_values, x_create_tip_frame) + (Fx_show_tip, clean_up_file_dialog, Fx_file_dialog) + (clean_up_dialog, syms_of_xfns): + * xterm.h (xg_set_icon, xg_set_icon_from_xpm_data) + (xic_create_fontsetname): + Use bool for boolean. + * xfns.c: Include bitmaps/gray.xbm unconditionally. + Count MANY function args more reliably * alloc.c (Fgc_status, purecopy, unbind_to, garbage_collect_1): * buffer.c (Fbuffer_list, Fkill_buffer): diff --git a/src/xfaces.c b/src/xfaces.c index 1ba6b51..31048ae 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -3489,7 +3489,7 @@ x_update_menu_appearance (struct frame *f) Lisp_Object xlfd = Ffont_xlfd_name (LFACE_FONT (lface), Qnil); #ifdef USE_MOTIF const char *suffix = "List"; - Bool motif = True; + bool motif = true; #else #if defined HAVE_X_I18N @@ -3497,7 +3497,7 @@ x_update_menu_appearance (struct frame *f) #else const char *suffix = ""; #endif - Bool motif = False; + bool motif = false; #endif if (! NILP (xlfd)) diff --git a/src/xfns.c b/src/xfns.c index a09e4a6..9dd0086 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -46,12 +46,7 @@ along with GNU Emacs. If not, see . */ #include #include -#if 1 /* Used to be #ifdef EMACS_BITMAP_FILES, but this should always work. */ #include "bitmaps/gray.xbm" -#else -#include -#endif - #include "xsettings.h" #ifdef HAVE_XRANDR @@ -182,7 +177,7 @@ x_real_positions (struct frame *f, int *xptr, int *yptr) { int win_x, win_y, outer_x IF_LINT (= 0), outer_y IF_LINT (= 0); int real_x = 0, real_y = 0; - int had_errors = 0; + bool had_errors = false; Window win = f->output_data.x->parent_desc; Atom actual_type; unsigned long actual_size, bytes_remaining; @@ -386,7 +381,7 @@ bool x_defined_color (struct frame *f, const char *color_name, XColor *color, bool alloc_p) { - bool success_p = 0; + bool success_p = false; Display *dpy = FRAME_X_DISPLAY (f); Colormap cmap = FRAME_X_COLORMAP (f); @@ -415,9 +410,9 @@ x_decode_color (struct frame *f, Lisp_Object color_name, int mono_color) CHECK_STRING (color_name); -#if 0 /* Don't do this. It's wrong when we're not using the default - colormap, it makes freeing difficult, and it's probably not - an important optimization. */ +#if false /* Don't do this. It's wrong when we're not using the default + colormap, it makes freeing difficult, and it's probably not + an important optimization. */ if (strcmp (SDATA (color_name), "black") == 0) return BLACK_PIX_DEFAULT (f); else if (strcmp (SDATA (color_name), "white") == 0) @@ -430,7 +425,7 @@ x_decode_color (struct frame *f, Lisp_Object color_name, int mono_color) /* x_defined_color is responsible for coping with failures by looking for a near-miss. */ - if (x_defined_color (f, SSDATA (color_name), &cdef, 1)) + if (x_defined_color (f, SSDATA (color_name), &cdef, true)) return cdef.pixel; signal_error ("Undefined color", color_name); @@ -477,10 +472,10 @@ x_set_tool_bar_position (struct frame *f, /* Set icon from FILE for frame F. By using GTK functions the icon may be any format that GdkPixbuf knows about, i.e. not just bitmaps. */ -int +bool xg_set_icon (struct frame *f, Lisp_Object file) { - int result = 0; + bool result = false; Lisp_Object found; found = x_find_image_file (file); @@ -500,7 +495,7 @@ xg_set_icon (struct frame *f, Lisp_Object file) pixbuf); g_object_unref (pixbuf); - result = 1; + result = true; } else g_error_free (err); @@ -511,17 +506,17 @@ xg_set_icon (struct frame *f, Lisp_Object file) return result; } -int +bool xg_set_icon_from_xpm_data (struct frame *f, const char **data) { GdkPixbuf *pixbuf = gdk_pixbuf_new_from_xpm_data (data); if (!pixbuf) - return 0; + return false; gtk_window_set_icon (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)), pixbuf); g_object_unref (pixbuf); - return 1; + return true; } #endif /* USE_GTK */ @@ -778,20 +773,20 @@ static void x_set_cursor_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval) { unsigned long fore_pixel, pixel; - bool fore_pixel_allocated_p = 0, pixel_allocated_p = 0; + bool fore_pixel_allocated_p = false, pixel_allocated_p = false; struct x_output *x = f->output_data.x; if (!NILP (Vx_cursor_fore_pixel)) { fore_pixel = x_decode_color (f, Vx_cursor_fore_pixel, WHITE_PIX_DEFAULT (f)); - fore_pixel_allocated_p = 1; + fore_pixel_allocated_p = true; } else fore_pixel = FRAME_BACKGROUND_PIXEL (f); pixel = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f)); - pixel_allocated_p = 1; + pixel_allocated_p = true; /* Make sure that the cursor color differs from the background color. */ if (pixel == FRAME_BACKGROUND_PIXEL (f)) @@ -799,7 +794,7 @@ x_set_cursor_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval) if (pixel_allocated_p) { x_free_colors (f, &pixel, 1); - pixel_allocated_p = 0; + pixel_allocated_p = false; } pixel = x->mouse_pixel; @@ -808,7 +803,7 @@ x_set_cursor_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval) if (fore_pixel_allocated_p) { x_free_colors (f, &fore_pixel, 1); - fore_pixel_allocated_p = 0; + fore_pixel_allocated_p = false; } fore_pixel = FRAME_BACKGROUND_PIXEL (f); } @@ -833,8 +828,8 @@ x_set_cursor_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval) if (FRAME_VISIBLE_P (f)) { - x_update_cursor (f, 0); - x_update_cursor (f, 1); + x_update_cursor (f, false); + x_update_cursor (f, true); } } @@ -894,7 +889,7 @@ x_set_cursor_type (struct frame *f, Lisp_Object arg, Lisp_Object oldval) static void x_set_icon_type (struct frame *f, Lisp_Object arg, Lisp_Object oldval) { - int result; + bool result; if (STRINGP (arg)) { @@ -926,7 +921,7 @@ x_set_icon_type (struct frame *f, Lisp_Object arg, Lisp_Object oldval) static void x_set_icon_name (struct frame *f, Lisp_Object arg, Lisp_Object oldval) { - int result; + bool result; if (STRINGP (arg)) { @@ -992,7 +987,7 @@ x_set_menu_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) FRAME_EXTERNAL_MENU_BAR (f) = 1; if (FRAME_X_P (f) && f->output_data.x->menubar_widget == 0) /* Make sure next redisplay shows the menu bar. */ - XWINDOW (FRAME_SELECTED_WINDOW (f))->update_mode_line = 1; + XWINDOW (FRAME_SELECTED_WINDOW (f))->update_mode_line = true; } else { @@ -1005,7 +1000,7 @@ x_set_menu_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) #else /* not USE_X_TOOLKIT && not USE_GTK */ FRAME_MENU_BAR_LINES (f) = nlines; FRAME_MENU_BAR_HEIGHT (f) = nlines * FRAME_LINE_HEIGHT (f); - adjust_frame_size (f, -1, -1, 2, 1, Qmenu_bar_lines); + adjust_frame_size (f, -1, -1, 2, true, Qmenu_bar_lines); if (FRAME_X_WINDOW (f)) x_clear_under_internal_border (f); @@ -1084,17 +1079,17 @@ x_change_tool_bar_height (struct frame *f, int height) FRAME_TOOL_BAR_HEIGHT (f) = 0; if (height) { - FRAME_EXTERNAL_TOOL_BAR (f) = 1; + FRAME_EXTERNAL_TOOL_BAR (f) = true; if (FRAME_X_P (f) && f->output_data.x->toolbar_widget == 0) /* Make sure next redisplay shows the tool bar. */ - XWINDOW (FRAME_SELECTED_WINDOW (f))->update_mode_line = 1; + XWINDOW (FRAME_SELECTED_WINDOW (f))->update_mode_line = true; update_frame_tool_bar (f); } else { if (FRAME_EXTERNAL_TOOL_BAR (f)) free_frame_tool_bar (f); - FRAME_EXTERNAL_TOOL_BAR (f) = 0; + FRAME_EXTERNAL_TOOL_BAR (f) = false; } #else /* !USE_GTK */ int unit = FRAME_LINE_HEIGHT (f); @@ -1134,7 +1129,7 @@ x_change_tool_bar_height (struct frame *f, int height) (!f->tool_bar_redisplayed_once ? 1 : (old_height == 0 || height == 0) ? 2 : 4), - 0, Qtool_bar_lines); + false, Qtool_bar_lines); /* adjust_frame_size might not have done anything, garbage frame here. */ @@ -1166,7 +1161,7 @@ x_set_internal_border_width (struct frame *f, Lisp_Object arg, Lisp_Object oldva if (FRAME_X_WINDOW (f) != 0) { - adjust_frame_size (f, -1, -1, 3, 0, Qinternal_border_width); + adjust_frame_size (f, -1, -1, 3, false, Qinternal_border_width); #ifdef USE_GTK xg_clear_under_internal_border (f); @@ -1271,14 +1266,14 @@ x_set_scroll_bar_background (struct frame *f, Lisp_Object value, Lisp_Object old Store the byte length of resulting text in *TEXT_BYTES. - If the text contains only ASCII and Latin-1, store 1 in *STRING_P, + If the text contains only ASCII and Latin-1, store true in *STRING_P, which means that the `encoding' of the result can be `STRING'. - Otherwise store 0 in *STRINGP, which means that the `encoding' of + Otherwise store false in *STRINGP, which means that the `encoding' of the result should be `COMPOUND_TEXT'. */ static unsigned char * x_encode_text (Lisp_Object string, Lisp_Object coding_system, - ptrdiff_t *text_bytes, int *stringp, bool *freep) + ptrdiff_t *text_bytes, bool *stringp, bool *freep) { int result = string_xstring_p (string); struct coding_system coding; @@ -1287,8 +1282,8 @@ x_encode_text (Lisp_Object string, Lisp_Object coding_system, { /* No multibyte character in OBJ. We need not encode it. */ *text_bytes = SBYTES (string); - *stringp = 1; - *freep = 0; + *stringp = true; + *freep = false; return SDATA (string); } @@ -1302,7 +1297,7 @@ x_encode_text (Lisp_Object string, Lisp_Object coding_system, SCHARS (string), SBYTES (string), Qnil); *text_bytes = coding.produced; *stringp = (result == 1 || !EQ (coding_system, Qcompound_text)); - *freep = 1; + *freep = true; return coding.destination; } @@ -1320,8 +1315,8 @@ x_set_name_internal (struct frame *f, Lisp_Object name) { XTextProperty text, icon; ptrdiff_t bytes; - int stringp; - bool do_free_icon_value = 0, do_free_text_value = 0; + bool stringp; + bool do_free_icon_value = false, do_free_text_value = false; Lisp_Object coding_system; Lisp_Object encoded_name; Lisp_Object encoded_icon_name; @@ -1469,7 +1464,7 @@ x_set_name (struct frame *f, Lisp_Object name, bool explicit) static void x_explicitly_set_name (struct frame *f, Lisp_Object arg, Lisp_Object oldval) { - x_set_name (f, arg, 1); + x_set_name (f, arg, true); } /* This function should be called by Emacs redisplay code to set the @@ -1478,7 +1473,7 @@ x_explicitly_set_name (struct frame *f, Lisp_Object arg, Lisp_Object oldval) void x_implicitly_set_name (struct frame *f, Lisp_Object arg, Lisp_Object oldval) { - x_set_name (f, arg, 0); + x_set_name (f, arg, false); } /* Change the title of frame F to NAME. @@ -1557,7 +1552,7 @@ static Lisp_Object x_default_scroll_bar_color_parameter (struct frame *f, Lisp_Object alist, Lisp_Object prop, const char *xprop, const char *xclass, - int foreground_p) + bool foreground_p) { struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); Lisp_Object tem; @@ -1614,9 +1609,9 @@ hack_wm_protocols (struct frame *f, Widget widget) { Display *dpy = XtDisplay (widget); Window w = XtWindow (widget); - int need_delete = 1; - int need_focus = 1; - int need_save = 1; + bool need_delete = true; + bool need_focus = true; + bool need_save = true; block_input (); { @@ -1640,20 +1635,20 @@ hack_wm_protocols (struct frame *f, Widget widget) nitems--; if (atoms[nitems] == FRAME_DISPLAY_INFO (f)->Xatom_wm_delete_window) - need_delete = 0; + need_delete = false; else if (atoms[nitems] == FRAME_DISPLAY_INFO (f)->Xatom_wm_take_focus) - need_focus = 0; + need_focus = false; else if (atoms[nitems] == FRAME_DISPLAY_INFO (f)->Xatom_wm_save_yourself) - need_save = 0; + need_save = false; } } if (catoms) XFree (catoms); } { - Atom props [10]; + Atom props[10]; int count = 0; if (need_delete) props[count++] = FRAME_DISPLAY_INFO (f)->Xatom_wm_delete_window; @@ -1705,7 +1700,7 @@ static const char xic_default_fontset[] = "-*-*-*-r-normal--14-*-*-*-*-*-*-*"; /* Create an Xt fontset spec from the name of a base font. If `motif' is True use the Motif syntax. */ char * -xic_create_fontsetname (const char *base_fontname, int motif) +xic_create_fontsetname (const char *base_fontname, bool motif) { const char *sep = motif ? ";" : ","; char *fontsetname; @@ -1947,7 +1942,7 @@ void xic_free_xfontset (struct frame *f) { Lisp_Object rest, frame; - bool shared_p = 0; + bool shared_p = false; if (!FRAME_XIC_FONTSET (f)) return; @@ -1960,7 +1955,7 @@ xic_free_xfontset (struct frame *f) && FRAME_DISPLAY_INFO (cf) == FRAME_DISPLAY_INFO (f) && FRAME_XIC_FONTSET (cf) == FRAME_XIC_FONTSET (f)) { - shared_p = 1; + shared_p = true; break; } } @@ -2220,7 +2215,7 @@ xic_set_xfontset (struct frame *f, const char *base_fontname) /* Create and set up the X widget for frame F. */ static void -x_window (struct frame *f, long window_prompting, int minibuffer_only) +x_window (struct frame *f, long window_prompting) { XClassHint class_hints; XSetWindowAttributes attributes; @@ -2228,7 +2223,7 @@ x_window (struct frame *f, long window_prompting, int minibuffer_only) Widget shell_widget; Widget pane_widget; Widget frame_widget; - Arg al [25]; + Arg al[25]; int ac; block_input (); @@ -2298,8 +2293,8 @@ x_window (struct frame *f, long window_prompting, int minibuffer_only) + f->output_data.x->menubar_widget->core.border_width) : 0); -#if 0 /* Experimentally, we now get the right results - for -geometry -0-0 without this. 24 Aug 96, rms. */ +#if false /* Experimentally, we now get the right results + for -geometry -0-0 without this. 24 Aug 96, rms. */ if (FRAME_EXTERNAL_MENU_BAR (f)) { Dimension ibw = 0; @@ -2328,9 +2323,9 @@ x_window (struct frame *f, long window_prompting, int minibuffer_only) We pass that information later, in x_wm_set_size_hints. */ { int left = f->left_pos; - int xneg = window_prompting & XNegative; + bool xneg = (window_prompting & XNegative) != 0; int top = f->top_pos; - int yneg = window_prompting & YNegative; + bool yneg = (window_prompting & YNegative) != 0; if (xneg) left = -left; if (yneg) @@ -2429,7 +2424,7 @@ x_window (struct frame *f, long window_prompting, int minibuffer_only) Lisp_Object name; bool explicit = f->explicit_name; - f->explicit_name = 0; + f->explicit_name = false; name = f->name; fset_name (f, Qnil); x_set_name (f, name, explicit); @@ -2568,7 +2563,7 @@ x_window (struct frame *f) Lisp_Object name; bool explicit = f->explicit_name; - f->explicit_name = 0; + f->explicit_name = false; name = f->name; fset_name (f, Qnil); x_set_name (f, name, explicit); @@ -2614,15 +2609,12 @@ x_icon_verify (struct frame *f, Lisp_Object parms) static void x_icon (struct frame *f, Lisp_Object parms) { - Lisp_Object icon_x, icon_y; -#if 0 - struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); -#endif - /* Set the position of the icon. Note that twm groups all icons in an icon window. */ - icon_x = x_frame_get_and_record_arg (f, parms, Qicon_left, 0, 0, RES_TYPE_NUMBER); - icon_y = x_frame_get_and_record_arg (f, parms, Qicon_top, 0, 0, RES_TYPE_NUMBER); + Lisp_Object icon_x + = x_frame_get_and_record_arg (f, parms, Qicon_left, 0, 0, RES_TYPE_NUMBER); + Lisp_Object icon_y + = x_frame_get_and_record_arg (f, parms, Qicon_top, 0, 0, RES_TYPE_NUMBER); if (!EQ (icon_x, Qunbound) && !EQ (icon_y, Qunbound)) { CHECK_TYPE_RANGED_INTEGER (int, icon_x); @@ -2636,9 +2628,10 @@ x_icon (struct frame *f, Lisp_Object parms) if (! EQ (icon_x, Qunbound)) x_wm_set_icon_position (f, XINT (icon_x), XINT (icon_y)); -#if 0 /* x_get_arg removes the visibility parameter as a side effect, - but x_create_frame still needs it. */ +#if false /* x_get_arg removes the visibility parameter as a side effect, + but x_create_frame still needs it. */ /* Start up iconic or window? */ + struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); x_wm_set_window_state (f, (EQ (x_get_arg (dpyinfo, parms, Qvisibility, 0, 0, RES_TYPE_SYMBOL), Qicon) @@ -2866,7 +2859,7 @@ Signal error if FRAME is not an X frame. */) struct frame *f = decode_window_system_frame (frame); block_input (); - x_wm_set_size_hint (f, 0, 0); + x_wm_set_size_hint (f, 0, false); unblock_input (); return Qnil; } @@ -2906,7 +2899,7 @@ This function is an internal primitive--use `make-frame' instead. */) struct frame *f; Lisp_Object frame, tem; Lisp_Object name; - int minibuffer_only = 0; + bool minibuffer_only = false; long window_prompting = 0; ptrdiff_t count = SPECPDL_INDEX (); struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; @@ -2960,12 +2953,12 @@ This function is an internal primitive--use `make-frame' instead. */) else if (EQ (tem, Qonly)) { f = make_minibuffer_frame (); - minibuffer_only = 1; + minibuffer_only = true; } else if (WINDOWP (tem)) f = make_frame_without_minibuffer (tem, kb, display); else - f = make_frame (1); + f = make_frame (true); XSETFRAME (frame, f); @@ -3032,12 +3025,12 @@ This function is an internal primitive--use `make-frame' instead. */) if (!NILP (parent)) { f->output_data.x->parent_desc = (Window) XFASTINT (parent); - f->output_data.x->explicit_parent = 1; + f->output_data.x->explicit_parent = true; } else { f->output_data.x->parent_desc = FRAME_DISPLAY_INFO (f)->root_window; - f->output_data.x->explicit_parent = 0; + f->output_data.x->explicit_parent = false; } /* Set the name; the functions to which we pass f expect the name to @@ -3045,12 +3038,12 @@ This function is an internal primitive--use `make-frame' instead. */) if (EQ (name, Qunbound) || NILP (name)) { fset_name (f, build_string (dpyinfo->x_id_name)); - f->explicit_name = 0; + f->explicit_name = false; } else { fset_name (f, name); - f->explicit_name = 1; + f->explicit_name = true; /* Use the frame's title when getting resources for this frame. */ specbind (Qx_resource_name, name); } @@ -3137,10 +3130,10 @@ This function is an internal primitive--use `make-frame' instead. */) x_default_scroll_bar_color_parameter (f, parms, Qscroll_bar_foreground, "scrollBarForeground", - "ScrollBarForeground", 1); + "ScrollBarForeground", true); x_default_scroll_bar_color_parameter (f, parms, Qscroll_bar_background, "scrollBarBackground", - "ScrollBarBackground", 0); + "ScrollBarBackground", false); #ifdef GLYPH_DEBUG image_cache_refcount = @@ -3163,7 +3156,7 @@ This function is an internal primitive--use `make-frame' instead. */) had one frame line vs one toolbar line which left us with a zero root window height which was obviously wrong as well ... */ adjust_frame_size (f, FRAME_COLS (f) * FRAME_COLUMN_WIDTH (f), - FRAME_LINES (f) * FRAME_LINE_HEIGHT (f), 5, 1, + FRAME_LINES (f) * FRAME_LINE_HEIGHT (f), 5, true, Qx_create_frame_1); /* Set the menu-bar-lines and tool-bar-lines parameters. We don't @@ -3193,7 +3186,7 @@ This function is an internal primitive--use `make-frame' instead. */) FRAME_TOOL_BAR_POSITION (f), 0, 0, RES_TYPE_SYMBOL); /* Compute the size of the X window. */ - window_prompting = x_figure_window_size (f, parms, 1); + window_prompting = x_figure_window_size (f, parms, true); tem = x_get_arg (dpyinfo, parms, Qunsplittable, 0, 0, RES_TYPE_BOOLEAN); f->no_split = minibuffer_only || EQ (tem, Qt); @@ -3202,7 +3195,7 @@ This function is an internal primitive--use `make-frame' instead. */) /* Create the X widget or window. */ #ifdef USE_X_TOOLKIT - x_window (f, window_prompting, minibuffer_only); + x_window (f, window_prompting); #else x_window (f); #endif @@ -3238,7 +3231,7 @@ This function is an internal primitive--use `make-frame' instead. */) /* Consider frame official, now. */ f->can_x_set_window_size = true; - adjust_frame_size (f, FRAME_TEXT_WIDTH (f), FRAME_TEXT_HEIGHT (f), 0, 1, + adjust_frame_size (f, FRAME_TEXT_WIDTH (f), FRAME_TEXT_HEIGHT (f), 0, true, Qx_create_frame_2); #if defined (USE_X_TOOLKIT) || defined (USE_GTK) @@ -3263,7 +3256,7 @@ This function is an internal primitive--use `make-frame' instead. */) badly we want them. This should be done after we have the menu bar so that its size can be taken into account. */ block_input (); - x_wm_set_size_hint (f, window_prompting, 0); + x_wm_set_size_hint (f, window_prompting, false); unblock_input (); /* Make the window appear on the frame and enable display, unless @@ -3392,7 +3385,7 @@ DEFUN ("xw-color-defined-p", Fxw_color_defined_p, Sxw_color_defined_p, 1, 2, 0, CHECK_STRING (color); - if (x_defined_color (f, SSDATA (color), &foo, 0)) + if (x_defined_color (f, SSDATA (color), &foo, false)) return Qt; else return Qnil; @@ -3407,7 +3400,7 @@ DEFUN ("xw-color-values", Fxw_color_values, Sxw_color_values, 1, 2, 0, CHECK_STRING (color); - if (x_defined_color (f, SSDATA (color), &foo, 0)) + if (x_defined_color (f, SSDATA (color), &foo, false)) return list3i (foo.red, foo.green, foo.blue); else return Qnil; @@ -4946,14 +4939,14 @@ x_create_tip_frame (struct x_display_info *dpyinfo, frame = Qnil; GCPRO3 (parms, name, frame); - f = make_frame (1); + f = make_frame (true); XSETFRAME (frame, f); AUTO_STRING (tip, " *tip*"); buffer = Fget_buffer_create (tip); /* Use set_window_buffer instead of Fset_window_buffer (see discussion of bug#11984, bug#12025, bug#12026). */ - set_window_buffer (FRAME_ROOT_WINDOW (f), buffer, 0, 0); + set_window_buffer (FRAME_ROOT_WINDOW (f), buffer, false, false); old_buffer = current_buffer; set_buffer_internal_1 (XBUFFER (buffer)); bset_truncate_lines (current_buffer, Qnil); @@ -4987,7 +4980,7 @@ x_create_tip_frame (struct x_display_info *dpyinfo, fset_icon_name (f, Qnil); FRAME_DISPLAY_INFO (f) = dpyinfo; f->output_data.x->parent_desc = FRAME_DISPLAY_INFO (f)->root_window; - f->output_data.x->explicit_parent = 0; + f->output_data.x->explicit_parent = false; /* These colors will be set anyway later, but it's important to get the color reference counts right, so initialize them! */ @@ -5027,12 +5020,12 @@ x_create_tip_frame (struct x_display_info *dpyinfo, if (EQ (name, Qunbound) || NILP (name)) { fset_name (f, build_string (dpyinfo->x_id_name)); - f->explicit_name = 0; + f->explicit_name = false; } else { fset_name (f, name); - f->explicit_name = 1; + f->explicit_name = true; /* use the frame's title when getting resources for this frame. */ specbind (Qx_resource_name, name); } @@ -5103,7 +5096,7 @@ x_create_tip_frame (struct x_display_info *dpyinfo, f->output_data.x->parent_desc = FRAME_DISPLAY_INFO (f)->root_window; - x_figure_window_size (f, parms, 0); + x_figure_window_size (f, parms, false); { XSetWindowAttributes attrs; @@ -5156,7 +5149,7 @@ x_create_tip_frame (struct x_display_info *dpyinfo, height = FRAME_LINES (f); SET_FRAME_COLS (f, 0); SET_FRAME_LINES (f, 0); - change_frame_size (f, width, height, 1, 0, 0, 0); + change_frame_size (f, width, height, true, false, false, false); /* Add `tooltip' frame parameter's default value. */ if (NILP (Fframe_parameter (frame, Qtooltip))) @@ -5209,7 +5202,7 @@ x_create_tip_frame (struct x_display_info *dpyinfo, } } - f->no_split = 1; + f->no_split = true; UNGCPRO; @@ -5327,7 +5320,8 @@ Text larger than the specified size is clipped. */) int root_x, root_y; struct buffer *old_buffer; struct text_pos pos; - int i, width, height, seen_reversed_p; + int i, width, height; + bool seen_reversed_p; struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; int old_windows_or_buffers_changed = windows_or_buffers_changed; ptrdiff_t count = SPECPDL_INDEX (); @@ -5465,7 +5459,7 @@ Text larger than the specified size is clipped. */) FRAME_TOTAL_COLS (f) = w->total_cols; adjust_frame_glyphs (f); - w->pseudo_window_p = 1; + w->pseudo_window_p = true; /* Display the tooltip text in a temporary buffer. */ old_buffer = current_buffer; @@ -5477,7 +5471,8 @@ Text larger than the specified size is clipped. */) try_window (FRAME_ROOT_WINDOW (f), pos, TRY_WINDOW_IGNORE_FONTS_CHANGE); /* Compute width and height of the tooltip. */ - width = height = seen_reversed_p = 0; + width = height = 0; + seen_reversed_p = false; for (i = 0; i < w->desired_matrix->nrows; ++i) { struct glyph_row *row = &w->desired_matrix->rows[i]; @@ -5489,7 +5484,7 @@ Text larger than the specified size is clipped. */) break; /* Let the row go over the full width of the frame. */ - row->full_width_p = 1; + row->full_width_p = true; row_width = row->pixel_width; if (row->used[TEXT_AREA]) @@ -5512,7 +5507,7 @@ Text larger than the specified size is clipped. */) if (g->type == STRETCH_GLYPH && NILP (g->object)) { row_width -= g->pixel_width; - seen_reversed_p = 1; + seen_reversed_p = true; } } } @@ -5548,7 +5543,7 @@ Text larger than the specified size is clipped. */) if (!row->enabled_p || !MATRIX_ROW_DISPLAYS_TEXT_P (row)) break; - row->full_width_p = 1; + row->full_width_p = true; row_width = row->pixel_width; if (row->used[TEXT_AREA] && !row->reversed_p) { @@ -5715,7 +5710,7 @@ clean_up_file_dialog (void *arg) block_input (); XtUnmanageChild (dialog); XtDestroyWidget (dialog); - x_menu_set_in_use (0); + x_menu_set_in_use (false); unblock_input (); } @@ -5839,7 +5834,7 @@ value of DIR as in previous invocations; this is standard Windows behavior. */) record_unwind_protect_ptr (clean_up_file_dialog, dialog); /* Process events until the user presses Cancel or OK. */ - x_menu_set_in_use (1); + x_menu_set_in_use (true); result = 0; while (result == 0) { @@ -5893,7 +5888,7 @@ value of DIR as in previous invocations; this is standard Windows behavior. */) static void clean_up_dialog (void) { - x_menu_set_in_use (0); + x_menu_set_in_use (false); } DEFUN ("x-file-dialog", Fx_file_dialog, Sx_file_dialog, 2, 5, 0, @@ -6192,7 +6187,7 @@ Changing the value does not affect existing frames unless you set the mouse color. */); Vx_pointer_shape = Qnil; -#if 0 /* This doesn't really do anything. */ +#if false /* This doesn't really do anything. */ DEFVAR_LISP ("x-nontext-pointer-shape", Vx_nontext_pointer_shape, doc: /* The shape of the pointer when not over text. This variable takes effect when you create a new frame @@ -6206,7 +6201,7 @@ This variable takes effect when you create a new frame or when you set the mouse color. */); Vx_hourglass_pointer_shape = Qnil; -#if 0 /* This doesn't really do anything. */ +#if false /* This doesn't really do anything. */ DEFVAR_LISP ("x-mode-pointer-shape", Vx_mode_pointer_shape, doc: /* The shape of the pointer when over the mode line. This variable takes effect when you create a new frame @@ -6268,25 +6263,25 @@ Chinese, Japanese, and Korean. */); If nil or if the file selection dialog is not available, the new GTK file chooser is used instead. To turn off all file dialogs set the variable `use-file-dialog'. */); - x_gtk_use_old_file_dialog = 0; + x_gtk_use_old_file_dialog = false; DEFVAR_BOOL ("x-gtk-show-hidden-files", x_gtk_show_hidden_files, doc: /* If non-nil, the GTK file chooser will by default show hidden files. Note that this is just the default, there is a toggle button on the file chooser to show or not show hidden files on a case by case basis. */); - x_gtk_show_hidden_files = 0; + x_gtk_show_hidden_files = false; DEFVAR_BOOL ("x-gtk-file-dialog-help-text", x_gtk_file_dialog_help_text, doc: /* If non-nil, the GTK file chooser will show additional help text. If more space for files in the file chooser dialog is wanted, set this to nil to turn the additional text off. */); - x_gtk_file_dialog_help_text = 1; + x_gtk_file_dialog_help_text = true; DEFVAR_BOOL ("x-gtk-use-system-tooltips", x_gtk_use_system_tooltips, doc: /* If non-nil with a Gtk+ built Emacs, the Gtk+ tooltip is used. Otherwise use Emacs own tooltip implementation. When using Gtk+ tooltips, the tooltip face is not used. */); - x_gtk_use_system_tooltips = 1; + x_gtk_use_system_tooltips = true; /* Tell Emacs about this window system. */ Fprovide (Qx, Qnil); @@ -6317,7 +6312,7 @@ When using Gtk+ tooltips, the tooltip face is not used. */); char gtk_version[sizeof ".." + 3 * INT_STRLEN_BOUND (int)]; int len = sprintf (gtk_version, "%d.%d.%d", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); - Vgtk_version_string = make_pure_string (gtk_version, len, len, 0); + Vgtk_version_string = make_pure_string (gtk_version, len, len, false); } #endif /* USE_GTK */ diff --git a/src/xterm.h b/src/xterm.h index 123f31c..e597227 100644 --- a/src/xterm.h +++ b/src/xterm.h @@ -1067,8 +1067,8 @@ extern void x_clipboard_manager_save_frame (Lisp_Object); extern void x_clipboard_manager_save_all (void); #ifdef USE_GTK -extern int xg_set_icon (struct frame *, Lisp_Object); -extern int xg_set_icon_from_xpm_data (struct frame *, const char **); +extern bool xg_set_icon (struct frame *, Lisp_Object); +extern bool xg_set_icon_from_xpm_data (struct frame *, const char **); #endif /* USE_GTK */ extern void xic_free_xfontset (struct frame *); @@ -1081,7 +1081,7 @@ extern bool x_defined_color (struct frame *, const char *, XColor *, bool); #ifdef HAVE_X_I18N extern void free_frame_xic (struct frame *); # if defined HAVE_X_WINDOWS && defined USE_X_TOOLKIT -extern char * xic_create_fontsetname (const char *base_fontname, int motif); +extern char *xic_create_fontsetname (const char *, bool); # endif #endif commit c251ec96117a847799a61338e7648da8a4ade9e0 Author: Joakim Verona Date: Sun Jan 25 21:27:08 2015 +0100 Fix visual glitch during webkit resizing diff --git a/lisp/xwidget.el b/lisp/xwidget.el index a407a2f..0a5ddc3 100644 --- a/lisp/xwidget.el +++ b/lisp/xwidget.el @@ -382,7 +382,9 @@ Argument STR string." (interactive) (if (eq xwidget-webkit-scroll-behaviour 'native) (xwidget-webkit-adjust-size-to-window) - (xwidget-webkit-adjust-size-to-content))) + (xwidget-webkit-adjust-size-to-content)) + (recenter-top-bottom) + ) (defun xwidget-webkit-adjust-size-to-window () "Adjust webkit to window." commit d522fd8ca73e668bfafd0419bc5f71f2751cca24 Merge: e508727 a3689d3 Author: Joakim Verona Date: Sun Jan 25 21:19:27 2015 +0100 Merge branch 'master' into xwidget commit a3689d3c661fe36df971c875760f8d500b5ae994 Author: Paul Eggert Date: Sun Jan 25 08:33:41 2015 -0800 Count MANY function args more reliably * alloc.c (Fgc_status, purecopy, unbind_to, garbage_collect_1): * buffer.c (Fbuffer_list, Fkill_buffer): * callint.c (read_file_name, Fcall_interactively): * charset.c (Fset_charset_priority, syms_of_charset): * chartab.c (uniprop_encode_value_numeric): * coding.c (syms_of_coding): * composite.c (syms_of_composite): * data.c (wrong_range): * dbusbind.c (syms_of_dbusbind): * dired.c (file_attributes): * editfns.c (Fdecode_time, update_buffer_properties, format2): * eval.c (run_hook_with_args_2, apply1, call1, call2, call3) (call4, call5, call6, call7): * fileio.c (Finsert_file_contents, choose_write_coding_system) (Fcar_less_than_car, build_annotations, auto_save_error): * filelock.c (get_boot_time): * fns.c (internal_equal, nconc2, Fyes_or_no_p, Fwidget_apply): (maybe_resize_hash_table, secure_hash): * font.c (font_style_to_value, font_open_by_name, Flist_fonts): * fontset.c (fontset_add, Fset_fontset_font): * ftfont.c (ftfont_lookup_cache): * gtkutil.c (xg_get_font): * insdel.c (signal_before_change, signal_after_change): * keymap.c (append_key): * lread.c (load_warn_old_style_backquotes, Fload, init_lread): * minibuf.c (Fread_buffer): * print.c (print_preprocess): * process.c (Fformat_network_address, Fmake_network_process) (server_accept_connection): * sound.c (Fplay_sound_internal): * term.c (Fsuspend_tty, Fresume_tty): * window.c (window_list): * xdisp.c (run_redisplay_end_trigger_hook, add_to_log) (message_with_string): * xfaces.c (Fx_list_fonts): * xfont.c (syms_of_xfont): * xselect.c (x_handle_selection_request) (x_handle_selection_clear, x_clear_frame_selections) (x_clipboard_manager_error_1): Prefer CALLMANY and CALLN to counting args by hand. * doc.c (reread_doc_file): Remove unused code. * fns.c (concat2, concat3): Redo to avoid need for local-var vector. (cmpfn_user_defined, hashfn_user_defined, Fmaphash): Prefer call1 and call2 to Ffuncall. * keyboard.c (safe_run_hook_funcall, safe_run_hooks): Use struct literal rather than a local var, for simplicity. * keymap.c (where_is_internal): Use NULL rather than a pointer to unused args. * lisp.h (CALLMANY, CALLN): New macros. * sound.c (Fplay_sound_internal): Coalesce duplicate code. Fixes: bug#19634 diff --git a/src/ChangeLog b/src/ChangeLog index 96e3146..b137045 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,58 @@ 2015-01-25 Paul Eggert + Count MANY function args more reliably + * alloc.c (Fgc_status, purecopy, unbind_to, garbage_collect_1): + * buffer.c (Fbuffer_list, Fkill_buffer): + * callint.c (read_file_name, Fcall_interactively): + * charset.c (Fset_charset_priority, syms_of_charset): + * chartab.c (uniprop_encode_value_numeric): + * coding.c (syms_of_coding): + * composite.c (syms_of_composite): + * data.c (wrong_range): + * dbusbind.c (syms_of_dbusbind): + * dired.c (file_attributes): + * editfns.c (Fdecode_time, update_buffer_properties, format2): + * eval.c (run_hook_with_args_2, apply1, call1, call2, call3) + (call4, call5, call6, call7): + * fileio.c (Finsert_file_contents, choose_write_coding_system) + (Fcar_less_than_car, build_annotations, auto_save_error): + * filelock.c (get_boot_time): + * fns.c (internal_equal, nconc2, Fyes_or_no_p, Fwidget_apply): + (maybe_resize_hash_table, secure_hash): + * font.c (font_style_to_value, font_open_by_name, Flist_fonts): + * fontset.c (fontset_add, Fset_fontset_font): + * ftfont.c (ftfont_lookup_cache): + * gtkutil.c (xg_get_font): + * insdel.c (signal_before_change, signal_after_change): + * keymap.c (append_key): + * lread.c (load_warn_old_style_backquotes, Fload, init_lread): + * minibuf.c (Fread_buffer): + * print.c (print_preprocess): + * process.c (Fformat_network_address, Fmake_network_process) + (server_accept_connection): + * sound.c (Fplay_sound_internal): + * term.c (Fsuspend_tty, Fresume_tty): + * window.c (window_list): + * xdisp.c (run_redisplay_end_trigger_hook, add_to_log) + (message_with_string): + * xfaces.c (Fx_list_fonts): + * xfont.c (syms_of_xfont): + * xselect.c (x_handle_selection_request) + (x_handle_selection_clear, x_clear_frame_selections) + (x_clipboard_manager_error_1): + Prefer CALLMANY and CALLN to counting args by hand. + * doc.c (reread_doc_file): Remove unused code. + * fns.c (concat2, concat3): Redo to avoid need for local-var vector. + (cmpfn_user_defined, hashfn_user_defined, Fmaphash): + Prefer call1 and call2 to Ffuncall. + * keyboard.c (safe_run_hook_funcall, safe_run_hooks): + Use struct literal rather than a local var, for simplicity. + * keymap.c (where_is_internal): Use NULL rather than a pointer + to unused args. + * lisp.h (CALLMANY, CALLN): New macros. + * sound.c (Fplay_sound_internal): Coalesce duplicate code. + Fixes: bug#19634 + Use gnustep-config if available * emacs.c [NS_IMPL_GNUSTEP]: Don't include . It doesn't appear to be needed, and the inclusion breaks on diff --git a/src/alloc.c b/src/alloc.c index 571b2b0..9aa94b8 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -4408,19 +4408,17 @@ DEFUN ("gc-status", Fgc_status, Sgc_status, 0, 0, "", doc: /* Show information about live and zombie objects. */) (void) { - Lisp_Object args[8], zombie_list = Qnil; - EMACS_INT i; - for (i = 0; i < min (MAX_ZOMBIES, nzombies); i++) + Lisp_Object zombie_list = Qnil; + for (int i = 0; i < min (MAX_ZOMBIES, nzombies); i++) zombie_list = Fcons (zombies[i], zombie_list); - args[0] = build_string ("%d GCs, avg live/zombies = %.2f/%.2f (%f%%), max %d/%d\nzombies: %S"); - args[1] = make_number (ngcs); - args[2] = make_float (avg_live); - args[3] = make_float (avg_zombies); - args[4] = make_float (avg_zombies / avg_live / 100); - args[5] = make_number (max_live); - args[6] = make_number (max_zombies); - args[7] = zombie_list; - return Fmessage (8, args); + return CALLN (Fmessage, + build_string ("%d GCs, avg live/zombies = %.2f/%.2f" + " (%f%%), max %d/%d\nzombies: %S"), + make_number (ngcs), make_float (avg_live), + make_float (avg_zombies), + make_float (avg_zombies / avg_live / 100), + make_number (max_live), make_number (max_zombies), + zombie_list); } #endif /* GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES */ @@ -5297,10 +5295,8 @@ purecopy (Lisp_Object obj) } else { - Lisp_Object args[2]; - args[0] = build_pure_c_string ("Don't know how to purify: %S"); - args[1] = obj; - Fsignal (Qerror, (Fcons (Fformat (2, args), Qnil))); + Lisp_Object fmt = build_pure_c_string ("Don't know how to purify: %S"); + Fsignal (Qerror, list1 (CALLN (Fformat, fmt, obj))); } if (HASH_TABLE_P (Vpurify_flag)) /* Hash consing. */ @@ -5678,56 +5674,44 @@ garbage_collect_1 (void *end) } unbind_to (count, Qnil); - { - Lisp_Object total[11]; - int total_size = 10; - - total[0] = list4 (Qconses, make_number (sizeof (struct Lisp_Cons)), - bounded_number (total_conses), - bounded_number (total_free_conses)); - - total[1] = list4 (Qsymbols, make_number (sizeof (struct Lisp_Symbol)), - bounded_number (total_symbols), - bounded_number (total_free_symbols)); - - total[2] = list4 (Qmiscs, make_number (sizeof (union Lisp_Misc)), - bounded_number (total_markers), - bounded_number (total_free_markers)); - - total[3] = list4 (Qstrings, make_number (sizeof (struct Lisp_String)), - bounded_number (total_strings), - bounded_number (total_free_strings)); - - total[4] = list3 (Qstring_bytes, make_number (1), - bounded_number (total_string_bytes)); - total[5] = list3 (Qvectors, - make_number (header_size + sizeof (Lisp_Object)), - bounded_number (total_vectors)); - - total[6] = list4 (Qvector_slots, make_number (word_size), - bounded_number (total_vector_slots), - bounded_number (total_free_vector_slots)); - - total[7] = list4 (Qfloats, make_number (sizeof (struct Lisp_Float)), - bounded_number (total_floats), - bounded_number (total_free_floats)); - - total[8] = list4 (Qintervals, make_number (sizeof (struct interval)), - bounded_number (total_intervals), - bounded_number (total_free_intervals)); - - total[9] = list3 (Qbuffers, make_number (sizeof (struct buffer)), - bounded_number (total_buffers)); + Lisp_Object total[] = { + list4 (Qconses, make_number (sizeof (struct Lisp_Cons)), + bounded_number (total_conses), + bounded_number (total_free_conses)), + list4 (Qsymbols, make_number (sizeof (struct Lisp_Symbol)), + bounded_number (total_symbols), + bounded_number (total_free_symbols)), + list4 (Qmiscs, make_number (sizeof (union Lisp_Misc)), + bounded_number (total_markers), + bounded_number (total_free_markers)), + list4 (Qstrings, make_number (sizeof (struct Lisp_String)), + bounded_number (total_strings), + bounded_number (total_free_strings)), + list3 (Qstring_bytes, make_number (1), + bounded_number (total_string_bytes)), + list3 (Qvectors, + make_number (header_size + sizeof (Lisp_Object)), + bounded_number (total_vectors)), + list4 (Qvector_slots, make_number (word_size), + bounded_number (total_vector_slots), + bounded_number (total_free_vector_slots)), + list4 (Qfloats, make_number (sizeof (struct Lisp_Float)), + bounded_number (total_floats), + bounded_number (total_free_floats)), + list4 (Qintervals, make_number (sizeof (struct interval)), + bounded_number (total_intervals), + bounded_number (total_free_intervals)), + list3 (Qbuffers, make_number (sizeof (struct buffer)), + bounded_number (total_buffers)), #ifdef DOUG_LEA_MALLOC - total_size++; - total[10] = list4 (Qheap, make_number (1024), - bounded_number ((mallinfo ().uordblks + 1023) >> 10), - bounded_number ((mallinfo ().fordblks + 1023) >> 10)); + list4 (Qheap, make_number (1024), + bounded_number ((mallinfo ().uordblks + 1023) >> 10), + bounded_number ((mallinfo ().fordblks + 1023) >> 10)), #endif - retval = Flist (total_size, total); - } + }; + retval = CALLMANY (Flist, total); #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES { diff --git a/src/buffer.c b/src/buffer.c index d0ffe67d9..67eda3e 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -387,7 +387,6 @@ followed by the rest of the buffers. */) if (FRAMEP (frame)) { Lisp_Object framelist, prevlist, tail; - Lisp_Object args[3]; framelist = Fcopy_sequence (XFRAME (frame)->buffer_list); prevlist = Fnreverse (Fcopy_sequence @@ -408,10 +407,7 @@ followed by the rest of the buffers. */) tail = XCDR (tail); } - args[0] = framelist; - args[1] = general; - args[2] = prevlist; - return Fnconc (3, args); + return CALLN (Fnconc, framelist, general, prevlist); } else return general; @@ -1654,15 +1650,14 @@ cleaning up all windows currently displaying the buffer to be killed. */) /* Run hooks with the buffer to be killed the current buffer. */ { ptrdiff_t count = SPECPDL_INDEX (); - Lisp_Object arglist[1]; record_unwind_protect (save_excursion_restore, save_excursion_save ()); set_buffer_internal (b); /* First run the query functions; if any query is answered no, don't kill the buffer. */ - arglist[0] = Qkill_buffer_query_functions; - tem = Frun_hook_with_args_until_failure (1, arglist); + tem = CALLN (Frun_hook_with_args_until_failure, + Qkill_buffer_query_functions); if (NILP (tem)) return unbind_to (count, Qnil); diff --git a/src/callint.c b/src/callint.c index 165d374..60021fd 100644 --- a/src/callint.c +++ b/src/callint.c @@ -229,17 +229,10 @@ read_file_name (Lisp_Object default_filename, Lisp_Object mustmatch, Lisp_Object initial, Lisp_Object predicate) { struct gcpro gcpro1; - Lisp_Object args[7]; - GCPRO1 (default_filename); - args[0] = intern ("read-file-name"); - args[1] = callint_message; - args[2] = Qnil; - args[3] = default_filename; - args[4] = mustmatch; - args[5] = initial; - args[6] = predicate; - RETURN_UNGCPRO (Ffuncall (7, args)); + RETURN_UNGCPRO (CALLN (Ffuncall, intern ("read-file-name"), + callint_message, Qnil, default_filename, + mustmatch, initial, predicate)); } /* BEWARE: Calling this directly from C would defeat the purpose! */ @@ -397,15 +390,11 @@ invoke it. If KEYS is omitted or nil, the return value of Vreal_this_command = save_real_this_command; kset_last_command (current_kboard, save_last_command); - { - Lisp_Object args[3]; - args[0] = Qfuncall_interactively; - args[1] = function; - args[2] = specs; - Lisp_Object result = unbind_to (speccount, Fapply (3, args)); - SAFE_FREE (); - return result; - } + Lisp_Object result + = unbind_to (speccount, CALLN (Fapply, Qfuncall_interactively, + function, specs)); + SAFE_FREE (); + return result; } /* SPECS is set to a string; use it as an interactive prompt. diff --git a/src/charset.c b/src/charset.c index ea1480e..9080840 100644 --- a/src/charset.c +++ b/src/charset.c @@ -2146,7 +2146,7 @@ DEFUN ("set-charset-priority", Fset_charset_priority, Sset_charset_priority, usage: (set-charset-priority &rest charsets) */) (ptrdiff_t nargs, Lisp_Object *args) { - Lisp_Object new_head, old_list, arglist[2]; + Lisp_Object new_head, old_list; Lisp_Object list_2022, list_emacs_mule; ptrdiff_t i; int id; @@ -2162,9 +2162,9 @@ usage: (set-charset-priority &rest charsets) */) new_head = Fcons (make_number (id), new_head); } } - arglist[0] = Fnreverse (new_head); - arglist[1] = Vcharset_non_preferred_head = old_list; - Vcharset_ordered_list = Fnconc (2, arglist); + Vcharset_non_preferred_head = old_list; + Vcharset_ordered_list = CALLN (Fnconc, Fnreverse (new_head), old_list); + charset_ordered_list_tick++; charset_unibyte = -1; @@ -2353,12 +2353,7 @@ syms_of_charset (void) Vemacs_mule_charset_list = Qnil; staticpro (&Vcharset_hash_table); - { - Lisp_Object args[2]; - args[0] = QCtest; - args[1] = Qeq; - Vcharset_hash_table = Fmake_hash_table (2, args); - } + Vcharset_hash_table = CALLN (Fmake_hash_table, QCtest, Qeq); charset_table = charset_table_init; charset_table_size = ARRAYELTS (charset_table_init); diff --git a/src/chartab.c b/src/chartab.c index 013a5be..acaabce 100644 --- a/src/chartab.c +++ b/src/chartab.c @@ -1255,8 +1255,10 @@ uniprop_encode_value_numeric (Lisp_Object table, Lisp_Object value) break; value = make_number (i); if (i == size) - set_char_table_extras (table, 4, Fvconcat (2, ((Lisp_Object []) { - XCHAR_TABLE (table)->extras[4], Fmake_vector (make_number (1), value) }))); + set_char_table_extras (table, 4, + CALLN (Fvconcat, + XCHAR_TABLE (table)->extras[4], + Fmake_vector (make_number (1), value))); return make_number (i); } diff --git a/src/coding.c b/src/coding.c index 43ebbe0..5481158 100644 --- a/src/coding.c +++ b/src/coding.c @@ -10776,12 +10776,7 @@ void syms_of_coding (void) { staticpro (&Vcoding_system_hash_table); - { - Lisp_Object args[2]; - args[0] = QCtest; - args[1] = Qeq; - Vcoding_system_hash_table = Fmake_hash_table (2, args); - } + Vcoding_system_hash_table = CALLN (Fmake_hash_table, QCtest, Qeq); staticpro (&Vsjis_coding_system); Vsjis_coding_system = Qnil; @@ -11269,60 +11264,59 @@ See also `keyboard-translate-table'. Use of this variable for character code unification was rendered obsolete in Emacs 23.1 and later, since Unicode is now the basis of internal character representation. */); - Vtranslation_table_for_input = Qnil; - - { - Lisp_Object args[coding_arg_undecided_max]; - memclear (args, sizeof args); - - Lisp_Object plist[16]; - plist[0] = intern_c_string (":name"); - plist[1] = args[coding_arg_name] = Qno_conversion; - plist[2] = intern_c_string (":mnemonic"); - plist[3] = args[coding_arg_mnemonic] = make_number ('='); - plist[4] = intern_c_string (":coding-type"); - plist[5] = args[coding_arg_coding_type] = Qraw_text; - plist[6] = intern_c_string (":ascii-compatible-p"); - plist[7] = args[coding_arg_ascii_compatible_p] = Qt; - plist[8] = intern_c_string (":default-char"); - plist[9] = args[coding_arg_default_char] = make_number (0); - plist[10] = intern_c_string (":for-unibyte"); - plist[11] = args[coding_arg_for_unibyte] = Qt; - plist[12] = intern_c_string (":docstring"); - plist[13] = build_pure_c_string ("Do no conversion.\n\ -\n\ -When you visit a file with this coding, the file is read into a\n\ -unibyte buffer as is, thus each byte of a file is treated as a\n\ -character."); - plist[14] = intern_c_string (":eol-type"); - plist[15] = args[coding_arg_eol_type] = Qunix; - args[coding_arg_plist] = Flist (16, plist); - Fdefine_coding_system_internal (coding_arg_max, args); - - plist[1] = args[coding_arg_name] = Qundecided; - plist[3] = args[coding_arg_mnemonic] = make_number ('-'); - plist[5] = args[coding_arg_coding_type] = Qundecided; - /* This is already set. - plist[7] = args[coding_arg_ascii_compatible_p] = Qt; */ - plist[8] = intern_c_string (":charset-list"); - plist[9] = args[coding_arg_charset_list] = Fcons (Qascii, Qnil); - plist[11] = args[coding_arg_for_unibyte] = Qnil; - plist[13] = build_pure_c_string ("No conversion on encoding, automatic conversion on decoding."); - plist[15] = args[coding_arg_eol_type] = Qnil; - args[coding_arg_plist] = Flist (16, plist); - args[coding_arg_undecided_inhibit_null_byte_detection] = make_number (0); - args[coding_arg_undecided_inhibit_iso_escape_detection] = make_number (0); - Fdefine_coding_system_internal (coding_arg_undecided_max, args); - } + Vtranslation_table_for_input = Qnil; + + Lisp_Object args[coding_arg_undecided_max]; + memclear (args, sizeof args); + + Lisp_Object plist[] = + { + intern_c_string (":name"), + args[coding_arg_name] = Qno_conversion, + intern_c_string (":mnemonic"), + args[coding_arg_mnemonic] = make_number ('='), + intern_c_string (":coding-type"), + args[coding_arg_coding_type] = Qraw_text, + intern_c_string (":ascii-compatible-p"), + args[coding_arg_ascii_compatible_p] = Qt, + intern_c_string (":default-char"), + args[coding_arg_default_char] = make_number (0), + intern_c_string (":for-unibyte"), + args[coding_arg_for_unibyte] = Qt, + intern_c_string (":docstring"), + (build_pure_c_string + ("Do no conversion.\n" + "\n" + "When you visit a file with this coding, the file is read into a\n" + "unibyte buffer as is, thus each byte of a file is treated as a\n" + "character.")), + intern_c_string (":eol-type"), + args[coding_arg_eol_type] = Qunix, + }; + args[coding_arg_plist] = CALLMANY (Flist, plist); + Fdefine_coding_system_internal (coding_arg_max, args); + + plist[1] = args[coding_arg_name] = Qundecided; + plist[3] = args[coding_arg_mnemonic] = make_number ('-'); + plist[5] = args[coding_arg_coding_type] = Qundecided; + /* This is already set. + plist[7] = args[coding_arg_ascii_compatible_p] = Qt; */ + plist[8] = intern_c_string (":charset-list"); + plist[9] = args[coding_arg_charset_list] = Fcons (Qascii, Qnil); + plist[11] = args[coding_arg_for_unibyte] = Qnil; + plist[13] = build_pure_c_string ("No conversion on encoding, " + "automatic conversion on decoding."); + plist[15] = args[coding_arg_eol_type] = Qnil; + args[coding_arg_plist] = CALLMANY (Flist, plist); + args[coding_arg_undecided_inhibit_null_byte_detection] = make_number (0); + args[coding_arg_undecided_inhibit_iso_escape_detection] = make_number (0); + Fdefine_coding_system_internal (coding_arg_undecided_max, args); setup_coding_system (Qno_conversion, &safe_terminal_coding); - { - int i; + for (int i = 0; i < coding_category_max; i++) + Fset (AREF (Vcoding_category_table, i), Qno_conversion); - for (i = 0; i < coding_category_max; i++) - Fset (AREF (Vcoding_category_table, i), Qno_conversion); - } #if defined (DOS_NT) system_eol_type = Qdos; #else diff --git a/src/composite.c b/src/composite.c index 8ac5ef7..577b979 100644 --- a/src/composite.c +++ b/src/composite.c @@ -1891,36 +1891,18 @@ syms_of_composite (void) DEFSYM (Qcomposition, "composition"); /* Make a hash table for static composition. */ - { - Lisp_Object args[6]; - - args[0] = QCtest; - args[1] = Qequal; - args[2] = QCweakness; - /* We used to make the hash table weak so that unreferenced - compositions can be garbage-collected. But, usually once - created compositions are repeatedly used in an Emacs session, - and thus it's not worth to save memory in such a way. So, we - make the table not weak. */ - args[3] = Qnil; - args[4] = QCsize; - args[5] = make_number (311); - composition_hash_table = Fmake_hash_table (6, args); - staticpro (&composition_hash_table); - } + /* We used to make the hash table weak so that unreferenced + compositions can be garbage-collected. But, usually once + created compositions are repeatedly used in an Emacs session, + and thus it's not worth to save memory in such a way. So, we + make the table not weak. */ + Lisp_Object args[] = {QCtest, Qequal, QCsize, make_number (311)}; + composition_hash_table = CALLMANY (Fmake_hash_table, args); + staticpro (&composition_hash_table); /* Make a hash table for glyph-string. */ - { - Lisp_Object args[6]; - args[0] = QCtest; - args[1] = Qequal; - args[2] = QCweakness; - args[3] = Qnil; - args[4] = QCsize; - args[5] = make_number (311); - gstring_hash_table = Fmake_hash_table (6, args); - staticpro (&gstring_hash_table); - } + gstring_hash_table = CALLMANY (Fmake_hash_table, args); + staticpro (&gstring_hash_table); staticpro (&gstring_work_headers); gstring_work_headers = make_uninit_vector (8); diff --git a/src/data.c b/src/data.c index 0389eb4..d06b991 100644 --- a/src/data.c +++ b/src/data.c @@ -972,9 +972,8 @@ wrong_range (Lisp_Object min, Lisp_Object max, Lisp_Object wrong) AUTO_STRING (value_should_be_from, "Value should be from "); AUTO_STRING (to, " to "); xsignal2 (Qerror, - Fconcat (4, ((Lisp_Object []) - {value_should_be_from, Fnumber_to_string (min), - to, Fnumber_to_string (max)})), + CALLN (Fconcat, value_should_be_from, Fnumber_to_string (min), + to, Fnumber_to_string (max)), wrong); } diff --git a/src/dbusbind.c b/src/dbusbind.c index 3bdec0f..54e92cc 100644 --- a/src/dbusbind.c +++ b/src/dbusbind.c @@ -1849,12 +1849,7 @@ string denoting the bus address. SERIAL is the serial number of the non-blocking method call, a reply is expected. Both arguments must not be nil. The value in the hash table is HANDLER, the function to be called when the D-Bus reply message arrives. */); - { - Lisp_Object args[2]; - args[0] = QCtest; - args[1] = Qequal; - Vdbus_registered_objects_table = Fmake_hash_table (2, args); - } + Vdbus_registered_objects_table = CALLN (Fmake_hash_table, QCtest, Qequal); DEFVAR_LISP ("dbus-debug", Vdbus_debug, doc: /* If non-nil, debug messages of D-Bus bindings are raised. */); diff --git a/src/dired.c b/src/dired.c index ca43cd9..e31fdf8 100644 --- a/src/dired.c +++ b/src/dired.c @@ -914,7 +914,6 @@ so last access time will always be midnight of that day. */) static Lisp_Object file_attributes (int fd, char const *name, Lisp_Object id_format) { - Lisp_Object values[12]; struct stat s; int lstat_result; @@ -941,10 +940,6 @@ file_attributes (int fd, char const *name, Lisp_Object id_format) if (lstat_result < 0) return Qnil; - values[0] = (S_ISLNK (s.st_mode) ? emacs_readlinkat (fd, name) - : S_ISDIR (s.st_mode) ? Qt : Qnil); - values[1] = make_number (s.st_nlink); - if (!(NILP (id_format) || EQ (id_format, Qinteger))) { block_input (); @@ -952,34 +947,35 @@ file_attributes (int fd, char const *name, Lisp_Object id_format) gname = stat_gname (&s); unblock_input (); } - if (uname) - values[2] = DECODE_SYSTEM (build_unibyte_string (uname)); - else - values[2] = make_fixnum_or_float (s.st_uid); - if (gname) - values[3] = DECODE_SYSTEM (build_unibyte_string (gname)); - else - values[3] = make_fixnum_or_float (s.st_gid); - - values[4] = make_lisp_time (get_stat_atime (&s)); - values[5] = make_lisp_time (get_stat_mtime (&s)); - values[6] = make_lisp_time (get_stat_ctime (&s)); - - /* If the file size is a 4-byte type, assume that files of sizes in - the 2-4 GiB range wrap around to negative values, as this is a - common bug on older 32-bit platforms. */ - if (sizeof (s.st_size) == 4) - values[7] = make_fixnum_or_float (s.st_size & 0xffffffffu); - else - values[7] = make_fixnum_or_float (s.st_size); filemodestring (&s, modes); - values[8] = make_string (modes, 10); - values[9] = Qt; - values[10] = INTEGER_TO_CONS (s.st_ino); - values[11] = INTEGER_TO_CONS (s.st_dev); - return Flist (ARRAYELTS (values), values); + return CALLN (Flist, + (S_ISLNK (s.st_mode) ? emacs_readlinkat (fd, name) + : S_ISDIR (s.st_mode) ? Qt : Qnil), + make_number (s.st_nlink), + (uname + ? DECODE_SYSTEM (build_unibyte_string (uname)) + : make_fixnum_or_float (s.st_uid)), + (gname + ? DECODE_SYSTEM (build_unibyte_string (gname)) + : make_fixnum_or_float (s.st_gid)), + make_lisp_time (get_stat_atime (&s)), + make_lisp_time (get_stat_mtime (&s)), + make_lisp_time (get_stat_ctime (&s)), + + /* If the file size is a 4-byte type, assume that + files of sizes in the 2-4 GiB range wrap around to + negative values, as this is a common bug on older + 32-bit platforms. */ + make_fixnum_or_float (sizeof (s.st_size) == 4 + ? s.st_size & 0xffffffffu + : s.st_size), + + make_string (modes, 10), + Qt, + INTEGER_TO_CONS (s.st_ino), + INTEGER_TO_CONS (s.st_dev)); } DEFUN ("file-attributes-lessp", Ffile_attributes_lessp, Sfile_attributes_lessp, 2, 2, 0, diff --git a/src/doc.c b/src/doc.c index a6ef84b..8b18fb0 100644 --- a/src/doc.c +++ b/src/doc.c @@ -299,19 +299,6 @@ read_doc_string (Lisp_Object filepos) static bool reread_doc_file (Lisp_Object file) { -#if 0 - Lisp_Object reply, prompt[3]; - struct gcpro gcpro1; - GCPRO1 (file); - prompt[0] = build_string ("File "); - prompt[1] = NILP (file) ? Vdoc_file_name : file; - prompt[2] = build_string (" is out of sync. Reload? "); - reply = Fy_or_n_p (Fconcat (3, prompt)); - UNGCPRO; - if (NILP (reply)) - return 0; -#endif - if (NILP (file)) Fsnarf_documentation (Vdoc_file_name); else diff --git a/src/editfns.c b/src/editfns.c index 621e841..7026ccc 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -2033,20 +2033,20 @@ DOW and ZONE.) */) /* Avoid overflow when INT_MAX < EMACS_INT_MAX. */ EMACS_INT tm_year_base = TM_YEAR_BASE; - return Flist (9, ((Lisp_Object []) - {make_number (local_tm.tm_sec), - make_number (local_tm.tm_min), - make_number (local_tm.tm_hour), - make_number (local_tm.tm_mday), - make_number (local_tm.tm_mon + 1), - make_number (local_tm.tm_year + tm_year_base), - make_number (local_tm.tm_wday), - local_tm.tm_isdst ? Qt : Qnil, - (HAVE_TM_GMTOFF - ? make_number (tm_gmtoff (&local_tm)) - : gmtime_r (&time_spec, &gmt_tm) - ? make_number (tm_diff (&local_tm, &gmt_tm)) - : Qnil)})); + return CALLN (Flist, + make_number (local_tm.tm_sec), + make_number (local_tm.tm_min), + make_number (local_tm.tm_hour), + make_number (local_tm.tm_mday), + make_number (local_tm.tm_mon + 1), + make_number (local_tm.tm_year + tm_year_base), + make_number (local_tm.tm_wday), + local_tm.tm_isdst ? Qt : Qnil, + (HAVE_TM_GMTOFF + ? make_number (tm_gmtoff (&local_tm)) + : gmtime_r (&time_spec, &gmt_tm) + ? make_number (tm_diff (&local_tm, &gmt_tm)) + : Qnil)); } /* Return OBJ - OFFSET, checking that OBJ is a valid fixnum and that @@ -2679,25 +2679,20 @@ update_buffer_properties (ptrdiff_t start, ptrdiff_t end) call them, specifying the range of the buffer being accessed. */ if (!NILP (Vbuffer_access_fontify_functions)) { - Lisp_Object args[3]; - Lisp_Object tem; - - args[0] = Qbuffer_access_fontify_functions; - XSETINT (args[1], start); - XSETINT (args[2], end); - /* But don't call them if we can tell that the work has already been done. */ if (!NILP (Vbuffer_access_fontified_property)) { - tem = Ftext_property_any (args[1], args[2], - Vbuffer_access_fontified_property, - Qnil, Qnil); - if (! NILP (tem)) - Frun_hook_with_args (3, args); + Lisp_Object tem + = Ftext_property_any (make_number (start), make_number (end), + Vbuffer_access_fontified_property, + Qnil, Qnil); + if (NILP (tem)) + return; } - else - Frun_hook_with_args (3, args); + + CALLN (Frun_hook_with_args, Qbuffer_access_fontify_functions, + make_number (start), make_number (end)); } } @@ -4516,7 +4511,7 @@ Lisp_Object format2 (const char *string1, Lisp_Object arg0, Lisp_Object arg1) { AUTO_STRING (format, string1); - return Fformat (3, (Lisp_Object []) {format, arg0, arg1}); + return CALLN (Fformat, format, arg0, arg1); } DEFUN ("char-equal", Fchar_equal, Schar_equal, 2, 2, 0, diff --git a/src/eval.c b/src/eval.c index e649c15..b98b224 100644 --- a/src/eval.c +++ b/src/eval.c @@ -2535,15 +2535,14 @@ run_hook (Lisp_Object hook) void run_hook_with_args_2 (Lisp_Object hook, Lisp_Object arg1, Lisp_Object arg2) { - Frun_hook_with_args (3, ((Lisp_Object []) { hook, arg1, arg2 })); + CALLN (Frun_hook_with_args, hook, arg1, arg2); } /* Apply fn to arg. */ Lisp_Object apply1 (Lisp_Object fn, Lisp_Object arg) { - return (NILP (arg) ? Ffuncall (1, &fn) - : Fapply (2, ((Lisp_Object []) { fn, arg }))); + return NILP (arg) ? Ffuncall (1, &fn) : CALLN (Fapply, fn, arg); } /* Call function fn on no arguments. */ @@ -2558,7 +2557,7 @@ call0 (Lisp_Object fn) Lisp_Object call1 (Lisp_Object fn, Lisp_Object arg1) { - return Ffuncall (2, ((Lisp_Object []) { fn, arg1 })); + return CALLN (Ffuncall, fn, arg1); } /* Call function fn with 2 arguments arg1, arg2. */ @@ -2566,7 +2565,7 @@ call1 (Lisp_Object fn, Lisp_Object arg1) Lisp_Object call2 (Lisp_Object fn, Lisp_Object arg1, Lisp_Object arg2) { - return Ffuncall (3, ((Lisp_Object []) { fn, arg1, arg2 })); + return CALLN (Ffuncall, fn, arg1, arg2); } /* Call function fn with 3 arguments arg1, arg2, arg3. */ @@ -2574,7 +2573,7 @@ call2 (Lisp_Object fn, Lisp_Object arg1, Lisp_Object arg2) Lisp_Object call3 (Lisp_Object fn, Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3) { - return Ffuncall (4, ((Lisp_Object []) { fn, arg1, arg2, arg3 })); + return CALLN (Ffuncall, fn, arg1, arg2, arg3); } /* Call function fn with 4 arguments arg1, arg2, arg3, arg4. */ @@ -2583,7 +2582,7 @@ Lisp_Object call4 (Lisp_Object fn, Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3, Lisp_Object arg4) { - return Ffuncall (5, ((Lisp_Object []) { fn, arg1, arg2, arg3, arg4 })); + return CALLN (Ffuncall, fn, arg1, arg2, arg3, arg4); } /* Call function fn with 5 arguments arg1, arg2, arg3, arg4, arg5. */ @@ -2592,7 +2591,7 @@ Lisp_Object call5 (Lisp_Object fn, Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3, Lisp_Object arg4, Lisp_Object arg5) { - return Ffuncall (6, ((Lisp_Object []) { fn, arg1, arg2, arg3, arg4, arg5 })); + return CALLN (Ffuncall, fn, arg1, arg2, arg3, arg4, arg5); } /* Call function fn with 6 arguments arg1, arg2, arg3, arg4, arg5, arg6. */ @@ -2601,8 +2600,7 @@ Lisp_Object call6 (Lisp_Object fn, Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3, Lisp_Object arg4, Lisp_Object arg5, Lisp_Object arg6) { - return Ffuncall (7, ((Lisp_Object []) - { fn, arg1, arg2, arg3, arg4, arg5, arg6 })); + return CALLN (Ffuncall, fn, arg1, arg2, arg3, arg4, arg5, arg6); } /* Call function fn with 7 arguments arg1, arg2, arg3, arg4, arg5, arg6, arg7. */ @@ -2611,8 +2609,7 @@ Lisp_Object call7 (Lisp_Object fn, Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3, Lisp_Object arg4, Lisp_Object arg5, Lisp_Object arg6, Lisp_Object arg7) { - return Ffuncall (8, ((Lisp_Object []) - { fn, arg1, arg2, arg3, arg4, arg5, arg6, arg7 })); + return CALLN (Ffuncall, fn, arg1, arg2, arg3, arg4, arg5, arg6, arg7); } /* The caller should GCPRO all the elements of ARGS. */ diff --git a/src/fileio.c b/src/fileio.c index d0fd08a..43ab456 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -3650,11 +3650,9 @@ by calling `format-decode', which see. */) { /* If we have not yet decided a coding system, check file-coding-system-alist. */ - Lisp_Object args[6]; - - args[0] = Qinsert_file_contents, args[1] = orig_filename; - args[2] = visit, args[3] = beg, args[4] = end, args[5] = replace; - coding_system = Ffind_operation_coding_system (6, args); + coding_system = CALLN (Ffind_operation_coding_system, + Qinsert_file_contents, orig_filename, + visit, beg, end, replace); if (CONSP (coding_system)) coding_system = XCAR (coding_system); } @@ -4231,11 +4229,9 @@ by calling `format-decode', which see. */) { /* If the coding system is not yet decided, check file-coding-system-alist. */ - Lisp_Object args[6]; - - args[0] = Qinsert_file_contents, args[1] = orig_filename; - args[2] = visit, args[3] = beg, args[4] = end, args[5] = Qnil; - coding_system = Ffind_operation_coding_system (6, args); + coding_system = CALLN (Ffind_operation_coding_system, + Qinsert_file_contents, orig_filename, + visit, beg, end, Qnil); if (CONSP (coding_system)) coding_system = XCAR (coding_system); } @@ -4563,12 +4559,9 @@ choose_write_coding_system (Lisp_Object start, Lisp_Object end, Lisp_Object file if (NILP (val)) { /* Check file-coding-system-alist. */ - Lisp_Object args[7], coding_systems; - - args[0] = Qwrite_region; args[1] = start; args[2] = end; - args[3] = filename; args[4] = append; args[5] = visit; - args[6] = lockname; - coding_systems = Ffind_operation_coding_system (7, args); + Lisp_Object coding_systems + = CALLN (Ffind_operation_coding_system, Qwrite_region, start, end, + filename, append, visit, lockname); if (CONSP (coding_systems) && !NILP (XCDR (coding_systems))) val = XCDR (coding_systems); } @@ -5021,10 +5014,7 @@ DEFUN ("car-less-than-car", Fcar_less_than_car, Scar_less_than_car, 2, 2, 0, doc: /* Return t if (car A) is numerically less than (car B). */) (Lisp_Object a, Lisp_Object b) { - Lisp_Object args[2]; - args[0] = Fcar (a); - args[1] = Fcar (b); - return Flss (2, args); + return CALLN (Flss, Fcar (a), Fcar (b)); } /* Build the complete list of annotations appropriate for writing out @@ -5043,7 +5033,7 @@ build_annotations (Lisp_Object start, Lisp_Object end) struct gcpro gcpro1, gcpro2; Lisp_Object original_buffer; int i; - bool used_global = 0; + bool used_global = false; XSETBUFFER (original_buffer, current_buffer); @@ -5055,11 +5045,10 @@ build_annotations (Lisp_Object start, Lisp_Object end) struct buffer *given_buffer = current_buffer; if (EQ (Qt, XCAR (p)) && !used_global) { /* Use the global value of the hook. */ - Lisp_Object arg[2]; - used_global = 1; - arg[0] = Fdefault_value (Qwrite_region_annotate_functions); - arg[1] = XCDR (p); - p = Fappend (2, arg); + used_global = true; + p = CALLN (Fappend, + Fdefault_value (Qwrite_region_annotate_functions), + XCDR (p)); continue; } Vwrite_region_annotations_so_far = annotations; @@ -5388,9 +5377,8 @@ auto_save_error (Lisp_Object error_val) ring_bell (XFRAME (selected_frame)); AUTO_STRING (format, "Auto-saving %s: %s"); - msg = Fformat (3, ((Lisp_Object []) - {format, BVAR (current_buffer, name), - Ferror_message_string (error_val)})); + msg = CALLN (Fformat, format, BVAR (current_buffer, name), + Ferror_message_string (error_val)); GCPRO1 (msg); for (i = 0; i < 3; ++i) diff --git a/src/filelock.c b/src/filelock.c index 8e88435..89d3e35 100644 --- a/src/filelock.c +++ b/src/filelock.c @@ -209,8 +209,6 @@ get_boot_time (void) WTMP_FILE, counter); if (! NILP (Ffile_exists_p (tempname))) { - Lisp_Object args[6]; - /* The utmp functions on mescaline.gnu.org accept only file names up to 8 characters long. Choose a 2 character long prefix, and call make_temp_file with @@ -219,13 +217,9 @@ get_boot_time (void) filename = Fexpand_file_name (build_string ("wt"), Vtemporary_file_directory); filename = make_temp_name (filename, 1); - args[0] = build_string ("gzip"); - args[1] = Qnil; - args[2] = list2 (QCfile, filename); - args[3] = Qnil; - args[4] = build_string ("-cd"); - args[5] = tempname; - Fcall_process (6, args); + CALLN (Fcall_process, build_string ("gzip"), Qnil, + list2 (QCfile, filename), Qnil, + build_string ("-cd"), tempname); delete_flag = 1; } } diff --git a/src/fns.c b/src/fns.c index a4b2e6d..4c70951 100644 --- a/src/fns.c +++ b/src/fns.c @@ -440,21 +440,14 @@ static Lisp_Object concat (ptrdiff_t nargs, Lisp_Object *args, Lisp_Object concat2 (Lisp_Object s1, Lisp_Object s2) { - Lisp_Object args[2]; - args[0] = s1; - args[1] = s2; - return concat (2, args, Lisp_String, 0); + return concat (2, ((Lisp_Object []) {s1, s2}), Lisp_String, 0); } /* ARGSUSED */ Lisp_Object concat3 (Lisp_Object s1, Lisp_Object s2, Lisp_Object s3) { - Lisp_Object args[3]; - args[0] = s1; - args[1] = s2; - args[2] = s3; - return concat (3, args, Lisp_String, 0); + return concat (3, ((Lisp_Object []) {s1, s2, s3}), Lisp_String, 0); } DEFUN ("append", Fappend, Sappend, 0, MANY, 0, @@ -2255,12 +2248,7 @@ internal_equal (Lisp_Object o1, Lisp_Object o2, int depth, bool props, if (depth > 200) error ("Stack overflow in equal"); if (NILP (ht)) - { - Lisp_Object args[2]; - args[0] = QCtest; - args[1] = Qeq; - ht = Fmake_hash_table (2, args); - } + ht = CALLN (Fmake_hash_table, QCtest, Qeq); switch (XTYPE (o1)) { case Lisp_Cons: case Lisp_Misc: case Lisp_Vectorlike: @@ -2464,10 +2452,7 @@ This makes STRING unibyte and may change its length. */) Lisp_Object nconc2 (Lisp_Object s1, Lisp_Object s2) { - Lisp_Object args[2]; - args[0] = s1; - args[1] = s2; - return Fnconc (2, args); + return CALLN (Fnconc, s1, s2); } DEFUN ("nconc", Fnconc, Snconc, 0, MANY, 0, @@ -2715,7 +2700,7 @@ if `last-nonmenu-event' is nil, and `use-dialog-box' is non-nil. */) } AUTO_STRING (yes_or_no, "(yes or no) "); - prompt = Fconcat (2, (Lisp_Object []) {prompt, yes_or_no}); + prompt = CALLN (Fconcat, prompt, yes_or_no); GCPRO1 (prompt); while (1) @@ -2995,15 +2980,13 @@ usage: (widget-apply WIDGET PROPERTY &rest ARGS) */) (ptrdiff_t nargs, Lisp_Object *args) { /* This function can GC. */ - Lisp_Object newargs[3]; struct gcpro gcpro1, gcpro2; - Lisp_Object result; - - newargs[0] = Fwidget_get (args[0], args[1]); - newargs[1] = args[0]; - newargs[2] = Flist (nargs - 2, args + 2); - GCPRO2 (newargs[0], newargs[2]); - result = Fapply (3, newargs); + Lisp_Object widget = args[0]; + Lisp_Object property = args[1]; + Lisp_Object propval = Fwidget_get (widget, property); + Lisp_Object trailing_args = Flist (nargs - 2, args + 2); + GCPRO2 (propval, trailing_args); + Lisp_Object result = CALLN (Fapply, propval, widget, trailing_args); UNGCPRO; return result; } @@ -3750,12 +3733,7 @@ cmpfn_user_defined (struct hash_table_test *ht, Lisp_Object key1, Lisp_Object key2) { - Lisp_Object args[3]; - - args[0] = ht->user_cmp_function; - args[1] = key1; - args[2] = key2; - return !NILP (Ffuncall (3, args)); + return !NILP (call2 (ht->user_cmp_function, key1, key2)); } @@ -3803,11 +3781,7 @@ hashfn_equal (struct hash_table_test *ht, Lisp_Object key) static EMACS_UINT hashfn_user_defined (struct hash_table_test *ht, Lisp_Object key) { - Lisp_Object args[2], hash; - - args[0] = ht->user_hash_function; - args[1] = key; - hash = Ffuncall (2, args); + Lisp_Object hash = call1 (ht->user_hash_function, key); return hashfn_eq (ht, hash); } @@ -3980,9 +3954,8 @@ maybe_resize_hash_table (struct Lisp_Hash_Table *h) #ifdef ENABLE_CHECKING if (HASH_TABLE_P (Vpurify_flag) && XHASH_TABLE (Vpurify_flag) == h) - Fmessage (2, ((Lisp_Object []) - { build_string ("Growing hash table to: %d"), - make_number (new_size) })); + CALLN (Fmessage, build_string ("Growing hash table to: %d"), + make_number (new_size)); #endif set_hash_key_and_value (h, larger_vector (h->key_and_value, @@ -4759,17 +4732,10 @@ FUNCTION is called with two arguments, KEY and VALUE. (Lisp_Object function, Lisp_Object table) { struct Lisp_Hash_Table *h = check_hash_table (table); - Lisp_Object args[3]; - ptrdiff_t i; - for (i = 0; i < HASH_TABLE_SIZE (h); ++i) + for (ptrdiff_t i = 0; i < HASH_TABLE_SIZE (h); ++i) if (!NILP (HASH_HASH (h, i))) - { - args[0] = function; - args[1] = HASH_KEY (h, i); - args[2] = HASH_VALUE (h, i); - Ffuncall (3, args); - } + call2 (function, HASH_KEY (h, i), HASH_VALUE (h, i)); return Qnil; } @@ -4911,11 +4877,9 @@ secure_hash (Lisp_Object algorithm, Lisp_Object object, Lisp_Object start, if (NILP (coding_system) && !NILP (Fbuffer_file_name (object))) { /* Check file-coding-system-alist. */ - Lisp_Object args[4], val; - - args[0] = Qwrite_region; args[1] = start; args[2] = end; - args[3] = Fbuffer_file_name (object); - val = Ffind_operation_coding_system (4, args); + Lisp_Object val = CALLN (Ffind_operation_coding_system, + Qwrite_region, start, end, + Fbuffer_file_name (object)); if (CONSP (val) && !NILP (XCDR (val))) coding_system = XCDR (val); } diff --git a/src/font.c b/src/font.c index d05742c..d1a008e 100644 --- a/src/font.c +++ b/src/font.c @@ -374,8 +374,7 @@ font_style_to_value (enum font_property_index prop, Lisp_Object val, elt = Fmake_vector (make_number (2), make_number (100)); ASET (elt, 1, val); ASET (font_style_table, prop - FONT_WEIGHT_INDEX, - Fvconcat (2, ((Lisp_Object []) - { table, Fmake_vector (make_number (1), elt) }))); + CALLN (Fvconcat, table, Fmake_vector (make_number (1), elt))); return (100 << 8) | (i << 4); } else @@ -3400,16 +3399,11 @@ font_open_by_spec (struct frame *f, Lisp_Object spec) Lisp_Object font_open_by_name (struct frame *f, Lisp_Object name) { - Lisp_Object args[2]; - Lisp_Object spec, ret; - - args[0] = QCname; - args[1] = name; - spec = Ffont_spec (2, args); - ret = font_open_by_spec (f, spec); + Lisp_Object spec = CALLN (Ffont_spec, QCname, name); + Lisp_Object ret = font_open_by_spec (f, spec); /* Do not lose name originally put in. */ if (!NILP (ret)) - font_put_extra (ret, QCuser_spec, args[1]); + font_put_extra (ret, QCuser_spec, name); return ret; } @@ -4181,13 +4175,7 @@ how close they are to PREFER. */) else vec = font_vconcat_entity_vectors (list); if (n == 0 || n >= ASIZE (vec)) - { - Lisp_Object args[2]; - - args[0] = vec; - args[1] = Qnil; - list = Fappend (2, args); - } + list = CALLN (Fappend, vec, Qnil); else { for (list = Qnil, n--; n >= 0; n--) diff --git a/src/fontset.c b/src/fontset.c index b257da1..357526b 100644 --- a/src/fontset.c +++ b/src/fontset.c @@ -349,16 +349,17 @@ fontset_add (Lisp_Object fontset, Lisp_Object range, Lisp_Object elt, Lisp_Objec from1 = from, to1 = to; args[idx] = char_table_ref_and_range (fontset, from, &from1, &to1); char_table_set_range (fontset, from, to1, - NILP (args[idx]) ? args[1 - idx] - : Fvconcat (2, args)); + (NILP (args[idx]) ? args[1 - idx] + : CALLMANY (Fvconcat, args))); from = to1 + 1; } while (from < to); } else { args[idx] = FONTSET_FALLBACK (fontset); - set_fontset_fallback - (fontset, NILP (args[idx]) ? args[1 - idx] : Fvconcat (2, args)); + set_fontset_fallback (fontset, + (NILP (args[idx]) ? args[1 - idx] + : CALLMANY (Fvconcat, args))); } } @@ -1432,12 +1433,8 @@ appended. By default, FONT-SPEC overrides the previous settings. */) } else if (STRINGP (font_spec)) { - Lisp_Object args[2]; - fontname = font_spec; - args[0] = QCname; - args[1] = font_spec; - font_spec = Ffont_spec (2, args); + font_spec = CALLN (Ffont_spec, QCname, fontname); } else if (FONT_SPEC_P (font_spec)) fontname = Ffont_xlfd_name (font_spec, Qnil); diff --git a/src/ftfont.c b/src/ftfont.c index 053b95f..adf1888 100644 --- a/src/ftfont.c +++ b/src/ftfont.c @@ -375,13 +375,7 @@ ftfont_lookup_cache (Lisp_Object key, enum ftfont_cache_for cache_for) if (NILP (cache)) { if (NILP (ft_face_cache)) - { - Lisp_Object args[2]; - - args[0] = QCtest; - args[1] = Qequal; - ft_face_cache = Fmake_hash_table (2, args); - } + ft_face_cache = CALLN (Fmake_hash_table, QCtest, Qequal); cache_data = xmalloc (sizeof *cache_data); cache_data->ft_face = NULL; cache_data->fc_charset = NULL; diff --git a/src/gtkutil.c b/src/gtkutil.c index da05742..21f3cb1 100644 --- a/src/gtkutil.c +++ b/src/gtkutil.c @@ -2072,28 +2072,17 @@ xg_get_font (struct frame *f, const char *default_name) if (desc) { - Lisp_Object args[10]; const char *name = pango_font_description_get_family (desc); gint size = pango_font_description_get_size (desc); PangoWeight weight = pango_font_description_get_weight (desc); PangoStyle style = pango_font_description_get_style (desc); - args[0] = QCname; - args[1] = build_string (name); - - args[2] = QCsize; - args[3] = make_float (pango_units_to_double (size)); - - args[4] = QCweight; - args[5] = XG_WEIGHT_TO_SYMBOL (weight); - - args[6] = QCslant; - args[7] = XG_STYLE_TO_SYMBOL (style); - - args[8] = QCtype; - args[9] = Qxft; - - font = Ffont_spec (10, args); + font = CALLN (Ffont_spec, + QCname, build_string (name), + QCsize, make_float (pango_units_to_double (size)), + QCweight, XG_WEIGHT_TO_SYMBOL (weight), + QCslant, XG_STYLE_TO_SYMBOL (style), + QCtype, Qxft); pango_font_description_free (desc); dupstring (&x_last_font_name, name); diff --git a/src/insdel.c b/src/insdel.c index 4463721..3b5b520 100644 --- a/src/insdel.c +++ b/src/insdel.c @@ -1997,7 +1997,6 @@ signal_before_change (ptrdiff_t start_int, ptrdiff_t end_int, /* Now run the before-change-functions if any. */ if (!NILP (Vbefore_change_functions)) { - Lisp_Object args[3]; rvoe_arg.location = &Vbefore_change_functions; rvoe_arg.errorp = 1; @@ -2008,10 +2007,8 @@ signal_before_change (ptrdiff_t start_int, ptrdiff_t end_int, record_unwind_protect_ptr (reset_var_on_error, &rvoe_arg); /* Actually run the hook functions. */ - args[0] = Qbefore_change_functions; - args[1] = FETCH_START; - args[2] = FETCH_END; - Frun_hook_with_args (3, args); + CALLN (Frun_hook_with_args, Qbefore_change_functions, + FETCH_START, FETCH_END); /* There was no error: unarm the reset_on_error. */ rvoe_arg.errorp = 0; @@ -2079,7 +2076,6 @@ signal_after_change (ptrdiff_t charpos, ptrdiff_t lendel, ptrdiff_t lenins) if (!NILP (Vafter_change_functions)) { - Lisp_Object args[4]; rvoe_arg.location = &Vafter_change_functions; rvoe_arg.errorp = 1; @@ -2087,11 +2083,9 @@ signal_after_change (ptrdiff_t charpos, ptrdiff_t lendel, ptrdiff_t lenins) record_unwind_protect_ptr (reset_var_on_error, &rvoe_arg); /* Actually run the hook functions. */ - args[0] = Qafter_change_functions; - XSETFASTINT (args[1], charpos); - XSETFASTINT (args[2], charpos + lenins); - XSETFASTINT (args[3], lendel); - Frun_hook_with_args (4, args); + CALLN (Frun_hook_with_args, Qafter_change_functions, + make_number (charpos), make_number (charpos + lenins), + make_number (lendel)); /* There was no error: unarm the reset_on_error. */ rvoe_arg.errorp = 0; diff --git a/src/keyboard.c b/src/keyboard.c index 0fe2ffc..383c109 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -1844,7 +1844,7 @@ safe_run_hooks_error (Lisp_Object error, ptrdiff_t nargs, Lisp_Object *args) AUTO_STRING (format, "Error in %s (%S): %S"); Lisp_Object hook = args[0]; Lisp_Object fun = args[1]; - Fmessage (4, (Lisp_Object []) {format, hook, fun, error}); + CALLN (Fmessage, format, hook, fun, error); if (SYMBOLP (hook)) { @@ -1877,13 +1877,10 @@ safe_run_hooks_error (Lisp_Object error, ptrdiff_t nargs, Lisp_Object *args) static Lisp_Object safe_run_hook_funcall (ptrdiff_t nargs, Lisp_Object *args) { - Lisp_Object iargs[2]; - eassert (nargs == 2); - /* Yes, run_hook_with_args works this way. */ - iargs[0] = args[1]; - iargs[1] = args[0]; - internal_condition_case_n (safe_run_hooks_1, 2, iargs, + /* Yes, run_hook_with_args works with args in the other order. */ + internal_condition_case_n (safe_run_hooks_1, + 2, ((Lisp_Object []) {args[1], args[0]}), Qt, safe_run_hooks_error); return Qnil; } @@ -1895,16 +1892,12 @@ safe_run_hook_funcall (ptrdiff_t nargs, Lisp_Object *args) void safe_run_hooks (Lisp_Object hook) { - Lisp_Object args[2]; struct gcpro gcpro1; ptrdiff_t count = SPECPDL_INDEX (); - args[0] = hook; - args[1] = hook; - GCPRO1 (hook); specbind (Qinhibit_quit, Qt); - run_hook_with_args (2, args, safe_run_hook_funcall); + run_hook_with_args (2, ((Lisp_Object []) {hook, hook}), safe_run_hook_funcall); unbind_to (count, Qnil); UNGCPRO; } @@ -10734,25 +10727,25 @@ The elements of this list correspond to the arguments of `set-input-mode'. */) (void) { - Lisp_Object val[4]; struct frame *sf = XFRAME (selected_frame); - val[0] = interrupt_input ? Qt : Qnil; + Lisp_Object interrupt = interrupt_input ? Qt : Qnil; + Lisp_Object flow, meta; if (FRAME_TERMCAP_P (sf) || FRAME_MSDOS_P (sf)) { - val[1] = FRAME_TTY (sf)->flow_control ? Qt : Qnil; - val[2] = (FRAME_TTY (sf)->meta_key == 2 - ? make_number (0) - : (CURTTY ()->meta_key == 1 ? Qt : Qnil)); + flow = FRAME_TTY (sf)->flow_control ? Qt : Qnil; + meta = (FRAME_TTY (sf)->meta_key == 2 + ? make_number (0) + : (CURTTY ()->meta_key == 1 ? Qt : Qnil)); } else { - val[1] = Qnil; - val[2] = Qt; + flow = Qnil; + meta = Qt; } - XSETFASTINT (val[3], quit_char); + Lisp_Object quit = make_number (quit_char); - return Flist (ARRAYELTS (val), val); + return list4 (interrupt, flow, meta, quit); } DEFUN ("posn-at-x-y", Fposn_at_x_y, Sposn_at_x_y, 2, 4, 0, diff --git a/src/keymap.c b/src/keymap.c index 9c7b4d2..34fe1cb 100644 --- a/src/keymap.c +++ b/src/keymap.c @@ -1292,7 +1292,7 @@ static Lisp_Object append_key (Lisp_Object key_sequence, Lisp_Object key) { AUTO_LIST1 (key_list, key); - return Fvconcat (2, ((Lisp_Object []) { key_sequence, key_list })); + return CALLN (Fvconcat, key_sequence, key_list); } /* Given a event type C which is a symbol, @@ -2435,8 +2435,7 @@ where_is_internal (Lisp_Object definition, Lisp_Object keymaps, if (NILP (where_is_cache)) { /* We need to create the cache. */ - Lisp_Object args[2]; - where_is_cache = Fmake_hash_table (0, args); + where_is_cache = Fmake_hash_table (0, NULL); where_is_cache_keymaps = Qt; } else diff --git a/src/lisp.h b/src/lisp.h index 44117fc..f5242ab 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -2798,6 +2798,15 @@ enum maxargs UNEVALLED = -1 }; +/* Call a function F that accepts many args, passing it ARRAY's elements. */ +#define CALLMANY(f, array) (f) (ARRAYELTS (array), array) + +/* Call a function F that accepts many args, passing it the remaining args, + E.g., 'return CALLN (Fformat, fmt, text);' is less error-prone than + '{ Lisp_Object a[2]; a[0] = fmt; a[1] = text; return Fformat (2, a); }'. + CALLN is overkill for simple usages like 'Finsert (1, &text);'. */ +#define CALLN(f, ...) CALLMANY (f, ((Lisp_Object []) {__VA_ARGS__})) + extern void defvar_lisp (struct Lisp_Objfwd *, const char *, Lisp_Object *); extern void defvar_lisp_nopro (struct Lisp_Objfwd *, const char *, Lisp_Object *); extern void defvar_bool (struct Lisp_Boolfwd *, const char *, bool *); diff --git a/src/lread.c b/src/lread.c index 7f7bd89..69ec059 100644 --- a/src/lread.c +++ b/src/lread.c @@ -947,7 +947,7 @@ load_warn_old_style_backquotes (Lisp_Object file) if (!NILP (Vold_style_backquotes)) { AUTO_STRING (format, "Loading `%s': old-style backquotes detected!"); - Fmessage (2, (Lisp_Object []) {format, file}); + CALLN (Fmessage, format, file); } } @@ -1100,12 +1100,7 @@ Return t if the file exists and loads successfully. */) { suffixes = Fget_load_suffixes (); if (NILP (must_suffix)) - { - Lisp_Object arg[2]; - arg[0] = suffixes; - arg[1] = Vload_file_rep_suffixes; - suffixes = Fappend (2, arg); - } + suffixes = CALLN (Fappend, suffixes, Vload_file_rep_suffixes); } fd = openp (Vload_path, file, suffixes, &found, Qnil, load_prefer_newer); @@ -4401,12 +4396,10 @@ init_lread (void) /* Replace nils from EMACSLOADPATH by default. */ while (CONSP (elpath)) { - Lisp_Object arg[2]; elem = XCAR (elpath); elpath = XCDR (elpath); - arg[0] = Vload_path; - arg[1] = NILP (elem) ? default_lpath : Fcons (elem, Qnil); - Vload_path = Fappend (2, arg); + Vload_path = CALLN (Fappend, Vload_path, + NILP (elem) ? default_lpath : list1 (elem)); } } /* Fmemq (Qnil, Vload_path) */ } diff --git a/src/minibuf.c b/src/minibuf.c index 0d6e2c7..3408bb9 100644 --- a/src/minibuf.c +++ b/src/minibuf.c @@ -1131,9 +1131,8 @@ function, instead of the usual behavior. */) } AUTO_STRING (format, "%s (default %s): "); - prompt = Fformat (3, ((Lisp_Object []) - {format, prompt, - CONSP (def) ? XCAR (def) : def})); + prompt = CALLN (Fformat, format, prompt, + CONSP (def) ? XCAR (def) : def); } result = Fcompleting_read (prompt, intern ("internal-complete-buffer"), @@ -1141,8 +1140,7 @@ function, instead of the usual behavior. */) Qbuffer_name_history, def, Qnil); } else - result = Ffuncall (4, ((Lisp_Object []) - { Vread_buffer_function, prompt, def, require_match })); + result = call3 (Vread_buffer_function, prompt, def, require_match); return unbind_to (count, result); } @@ -1662,17 +1660,10 @@ Completion ignores case if the ambient value of See also `completing-read-function'. */) (Lisp_Object prompt, Lisp_Object collection, Lisp_Object predicate, Lisp_Object require_match, Lisp_Object initial_input, Lisp_Object hist, Lisp_Object def, Lisp_Object inherit_input_method) { - Lisp_Object args[9]; - args[0] = Fsymbol_value (intern ("completing-read-function")); - args[1] = prompt; - args[2] = collection; - args[3] = predicate; - args[4] = require_match; - args[5] = initial_input; - args[6] = hist; - args[7] = def; - args[8] = inherit_input_method; - return Ffuncall (9, args); + return CALLN (Ffuncall, + Fsymbol_value (intern ("completing-read-function")), + prompt, collection, predicate, require_match, initial_input, + hist, def, inherit_input_method); } /* Test whether TXT is an exact completion. */ diff --git a/src/print.c b/src/print.c index f268370..1a0aebb 100644 --- a/src/print.c +++ b/src/print.c @@ -1171,12 +1171,7 @@ print_preprocess (Lisp_Object obj) if (PRINT_CIRCLE_CANDIDATE_P (obj)) { if (!HASH_TABLE_P (Vprint_number_table)) - { - Lisp_Object args[2]; - args[0] = QCtest; - args[1] = Qeq; - Vprint_number_table = Fmake_hash_table (2, args); - } + Vprint_number_table = CALLN (Fmake_hash_table, QCtest, Qeq); /* In case print-circle is nil and print-gensym is t, add OBJ to Vprint_number_table only when OBJ is a symbol. */ diff --git a/src/process.c b/src/process.c index 0789f20..1d935ba 100644 --- a/src/process.c +++ b/src/process.c @@ -1338,7 +1338,7 @@ Returns nil if format of ADDRESS is invalid. */) if (CONSP (address)) { AUTO_STRING (format, ""); - return Fformat (2, (Lisp_Object []) {format, Fcar (address)}); + return CALLN (Fformat, format, Fcar (address)); } return Qnil; @@ -3422,7 +3422,7 @@ usage: (make-network-process &rest ARGS) */) struct gcpro gcpro1; /* Qt denotes we have not yet called Ffind_operation_coding_system. */ Lisp_Object coding_systems = Qt; - Lisp_Object fargs[5], val; + Lisp_Object val; if (!NILP (tem)) { @@ -3445,10 +3445,10 @@ usage: (make-network-process &rest ARGS) */) coding_systems = Qnil; else { - fargs[0] = Qopen_network_stream, fargs[1] = name, - fargs[2] = buffer, fargs[3] = host, fargs[4] = service; GCPRO1 (proc); - coding_systems = Ffind_operation_coding_system (5, fargs); + coding_systems = CALLN (Ffind_operation_coding_system, + Qopen_network_stream, name, buffer, + host, service); UNGCPRO; } if (CONSP (coding_systems)) @@ -3478,10 +3478,10 @@ usage: (make-network-process &rest ARGS) */) coding_systems = Qnil; else { - fargs[0] = Qopen_network_stream, fargs[1] = name, - fargs[2] = buffer, fargs[3] = host, fargs[4] = service; GCPRO1 (proc); - coding_systems = Ffind_operation_coding_system (5, fargs); + coding_systems = CALLN (Ffind_operation_coding_system, + Qopen_network_stream, name, buffer, + host, service); UNGCPRO; } } @@ -4064,12 +4064,12 @@ server_accept_connection (Lisp_Object server, int channel) unsigned char *ip = (unsigned char *)&saddr.in.sin_addr.s_addr; AUTO_STRING (ipv4_format, "%d.%d.%d.%d"); - host = Fformat (5, ((Lisp_Object []) - { ipv4_format, make_number (ip[0]), - make_number (ip[1]), make_number (ip[2]), make_number (ip[3]) })); + host = CALLN (Fformat, ipv4_format, + make_number (ip[0]), make_number (ip[1]), + make_number (ip[2]), make_number (ip[3])); service = make_number (ntohs (saddr.in.sin_port)); AUTO_STRING (caller_format, " <%s:%d>"); - caller = Fformat (3, (Lisp_Object []) {caller_format, host, service}); + caller = CALLN (Fformat, caller_format, host, service); } break; @@ -4084,10 +4084,10 @@ server_accept_connection (Lisp_Object server, int channel) args[0] = ipv6_format; for (i = 0; i < 8; i++) args[i + 1] = make_number (ntohs (ip6[i])); - host = Fformat (9, args); + host = CALLMANY (Fformat, args); service = make_number (ntohs (saddr.in.sin_port)); AUTO_STRING (caller_format, " <[%s]:%d>"); - caller = Fformat (3, (Lisp_Object []) {caller_format, host, service}); + caller = CALLN (Fformat, caller_format, host, service); } break; #endif diff --git a/src/sound.c b/src/sound.c index 6f7e2ad..05c7b06 100644 --- a/src/sound.c +++ b/src/sound.c @@ -1351,8 +1351,6 @@ Internal use only, use `play-sound' instead. */) { Lisp_Object attrs[SOUND_ATTR_SENTINEL]; ptrdiff_t count = SPECPDL_INDEX (); - Lisp_Object file; - Lisp_Object args[2]; struct gcpro gcpro1, gcpro2; #ifdef WINDOWSNT @@ -1364,9 +1362,10 @@ Internal use only, use `play-sound' instead. */) if (!parse_sound (sound, attrs)) error ("Invalid sound specification"); -#ifndef WINDOWSNT - file = Qnil; + Lisp_Object file = Qnil; GCPRO2 (sound, file); + +#ifndef WINDOWSNT current_sound_device = xzalloc (sizeof *current_sound_device); current_sound = xzalloc (sizeof *current_sound); record_unwind_protect_void (sound_cleanup); @@ -1407,9 +1406,7 @@ Internal use only, use `play-sound' instead. */) else if (FLOATP (attrs[SOUND_VOLUME])) current_sound_device->volume = XFLOAT_DATA (attrs[SOUND_VOLUME]) * 100; - args[0] = Qplay_sound_functions; - args[1] = sound; - Frun_hook_with_args (2, args); + CALLN (Frun_hook_with_args, Qplay_sound_functions, sound); #ifdef HAVE_ALSA if (!alsa_init (current_sound_device)) @@ -1423,9 +1420,6 @@ Internal use only, use `play-sound' instead. */) /* Play the sound. */ current_sound->play (current_sound, current_sound_device); - /* Clean up. */ - UNGCPRO; - #else /* WINDOWSNT */ file = Fexpand_file_name (attrs[SOUND_FILE], Vdata_directory); @@ -1439,11 +1433,7 @@ Internal use only, use `play-sound' instead. */) ui_volume_tmp = XFLOAT_DATA (attrs[SOUND_VOLUME]) * 100; } - GCPRO2 (sound, file); - - args[0] = Qplay_sound_functions; - args[1] = sound; - Frun_hook_with_args (2, args); + CALLN (Frun_hook_with_args, Qplay_sound_functions, sound); /* Based on some experiments I have conducted, a value of 100 or less @@ -1460,12 +1450,10 @@ Internal use only, use `play-sound' instead. */) } (void)do_play_sound (SSDATA (file), ui_volume); - UNGCPRO; - #endif /* WINDOWSNT */ - unbind_to (count, Qnil); - return Qnil; + UNGCPRO; + return unbind_to (count, Qnil); } /*********************************************************************** diff --git a/src/term.c b/src/term.c index d48bf7b..15d33b4 100644 --- a/src/term.c +++ b/src/term.c @@ -2253,10 +2253,9 @@ A suspended tty may be resumed by calling `resume-tty' on it. */) /* First run `suspend-tty-functions' and then clean up the tty state because `suspend-tty-functions' might need to change the tty state. */ - Lisp_Object args[2]; - args[0] = intern ("suspend-tty-functions"); - XSETTERMINAL (args[1], t); - Frun_hook_with_args (2, args); + Lisp_Object term; + XSETTERMINAL (term, t); + CALLN (Frun_hook_with_args, intern ("suspend-tty-functions"), term); reset_sys_modes (t->display_info.tty); delete_keyboard_wait_descriptor (fileno (f)); @@ -2353,13 +2352,10 @@ frame's terminal). */) set_tty_hooks (t); init_sys_modes (t->display_info.tty); - { - /* Run `resume-tty-functions'. */ - Lisp_Object args[2]; - args[0] = intern ("resume-tty-functions"); - XSETTERMINAL (args[1], t); - Frun_hook_with_args (2, args); - } + /* Run `resume-tty-functions'. */ + Lisp_Object term; + XSETTERMINAL (term, t); + CALLN (Frun_hook_with_args, intern ("resume-tty-functions"), term); } set_tty_hooks (t); diff --git a/src/window.c b/src/window.c index 53a235f..2f44bf7 100644 --- a/src/window.c +++ b/src/window.c @@ -2426,16 +2426,14 @@ window_list (void) Vwindow_list = Qnil; FOR_EACH_FRAME (tail, frame) { - Lisp_Object args[2]; + Lisp_Object arglist = Qnil; /* We are visiting windows in canonical order, and add new windows at the front of args[1], which means we have to reverse this list at the end. */ - args[1] = Qnil; - foreach_window (XFRAME (frame), add_window_to_list, &args[1]); - args[0] = Vwindow_list; - args[1] = Fnreverse (args[1]); - Vwindow_list = Fnconc (2, args); + foreach_window (XFRAME (frame), add_window_to_list, &arglist); + arglist = Fnreverse (arglist); + Vwindow_list = CALLN (Fnconc, Vwindow_list, arglist); } } diff --git a/src/xdisp.c b/src/xdisp.c index cd96e59..d974687 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -8286,22 +8286,18 @@ next_element_from_buffer (struct it *it) static void run_redisplay_end_trigger_hook (struct it *it) { - Lisp_Object args[3]; - /* IT->glyph_row should be non-null, i.e. we should be actually displaying something, or otherwise we should not run the hook. */ eassert (it->glyph_row); - /* Set up hook arguments. */ - args[0] = Qredisplay_end_trigger_functions; - args[1] = it->window; - XSETINT (args[2], it->redisplay_end_trigger_charpos); + ptrdiff_t charpos = it->redisplay_end_trigger_charpos; it->redisplay_end_trigger_charpos = 0; /* Since we are *trying* to run these functions, don't try to run them again, even if they get an error. */ wset_redisplay_end_trigger (it->w, Qnil); - Frun_hook_with_args (3, args); + CALLN (Frun_hook_with_args, Qredisplay_end_trigger_functions, it->window, + make_number (charpos)); /* Notice if it changed the face of the character we are on. */ handle_face_prop (it); @@ -9800,7 +9796,6 @@ include the height of both, if present, in the return value. */) void add_to_log (const char *format, Lisp_Object arg1, Lisp_Object arg2) { - Lisp_Object args[3]; Lisp_Object msg, fmt; char *buffer; ptrdiff_t len; @@ -9810,10 +9805,8 @@ add_to_log (const char *format, Lisp_Object arg1, Lisp_Object arg2) fmt = msg = Qnil; GCPRO4 (fmt, msg, arg1, arg2); - args[0] = fmt = build_string (format); - args[1] = arg1; - args[2] = arg2; - msg = Fformat (3, args); + fmt = build_string (format); + msg = CALLN (Fformat, fmt, arg1, arg2); len = SBYTES (msg) + 1; buffer = SAFE_ALLOCA (len); @@ -10228,15 +10221,13 @@ message_with_string (const char *m, Lisp_Object string, int log) initialized yet, just toss it. */ if (f->glyphs_initialized_p) { - Lisp_Object args[2], msg; struct gcpro gcpro1, gcpro2; - args[0] = build_string (m); - args[1] = msg = string; - GCPRO2 (args[0], msg); - gcpro1.nvars = 2; + Lisp_Object fmt = build_string (m); + Lisp_Object msg = string; + GCPRO2 (fmt, msg); - msg = Fformat (2, args); + msg = CALLN (Fformat, fmt, msg); if (log) message3 (msg); diff --git a/src/xfaces.c b/src/xfaces.c index 85af770..1ba6b51 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -1580,43 +1580,38 @@ the WIDTH times as wide as FACE on FRAME. */) avgwidth *= XINT (width); } - { - Lisp_Object font_spec; - Lisp_Object args[2], tail; - - font_spec = font_spec_from_name (pattern); - if (!FONTP (font_spec)) - signal_error ("Invalid font name", pattern); + Lisp_Object font_spec = font_spec_from_name (pattern); + if (!FONTP (font_spec)) + signal_error ("Invalid font name", pattern); - if (size) - { - Ffont_put (font_spec, QCsize, make_number (size)); - Ffont_put (font_spec, QCavgwidth, make_number (avgwidth)); - } - args[0] = Flist_fonts (font_spec, frame, maximum, font_spec); - for (tail = args[0]; CONSP (tail); tail = XCDR (tail)) - { - Lisp_Object font_entity; + if (size) + { + Ffont_put (font_spec, QCsize, make_number (size)); + Ffont_put (font_spec, QCavgwidth, make_number (avgwidth)); + } + Lisp_Object fonts = Flist_fonts (font_spec, frame, maximum, font_spec); + for (Lisp_Object tail = fonts; CONSP (tail); tail = XCDR (tail)) + { + Lisp_Object font_entity; - font_entity = XCAR (tail); - if ((NILP (AREF (font_entity, FONT_SIZE_INDEX)) - || XINT (AREF (font_entity, FONT_SIZE_INDEX)) == 0) - && ! NILP (AREF (font_spec, FONT_SIZE_INDEX))) - { - /* This is a scalable font. For backward compatibility, - we set the specified size. */ - font_entity = copy_font_spec (font_entity); - ASET (font_entity, FONT_SIZE_INDEX, - AREF (font_spec, FONT_SIZE_INDEX)); - } - XSETCAR (tail, Ffont_xlfd_name (font_entity, Qnil)); - } - if (NILP (frame)) - /* We don't have to check fontsets. */ - return args[0]; - args[1] = list_fontsets (f, pattern, size); - return Fnconc (2, args); - } + font_entity = XCAR (tail); + if ((NILP (AREF (font_entity, FONT_SIZE_INDEX)) + || XINT (AREF (font_entity, FONT_SIZE_INDEX)) == 0) + && ! NILP (AREF (font_spec, FONT_SIZE_INDEX))) + { + /* This is a scalable font. For backward compatibility, + we set the specified size. */ + font_entity = copy_font_spec (font_entity); + ASET (font_entity, FONT_SIZE_INDEX, + AREF (font_spec, FONT_SIZE_INDEX)); + } + XSETCAR (tail, Ffont_xlfd_name (font_entity, Qnil)); + } + if (NILP (frame)) + /* We don't have to check fontsets. */ + return fonts; + Lisp_Object fontsets = list_fontsets (f, pattern, size); + return CALLN (Fnconc, fonts, fontsets); } #endif /* HAVE_WINDOW_SYSTEM */ diff --git a/src/xfont.c b/src/xfont.c index 55053b9..3a0f5e3 100644 --- a/src/xfont.c +++ b/src/xfont.c @@ -1106,13 +1106,7 @@ void syms_of_xfont (void) { staticpro (&xfont_scripts_cache); - { /* Here we rely on the fact that syms_of_xfont (via syms_of_font) - is called fairly late, when QCtest and Qequal are known to be set. */ - Lisp_Object args[2]; - args[0] = QCtest; - args[1] = Qequal; - xfont_scripts_cache = Fmake_hash_table (2, args); - } + xfont_scripts_cache = CALLN (Fmake_hash_table, QCtest, Qequal); staticpro (&xfont_scratch_props); xfont_scratch_props = Fmake_vector (make_number (8), Qnil); xfont_driver.type = Qx; diff --git a/src/xselect.c b/src/xselect.c index 33ff366..027192d 100644 --- a/src/xselect.c +++ b/src/xselect.c @@ -817,14 +817,8 @@ x_handle_selection_request (struct input_event *event) /* Run the `x-sent-selection-functions' abnormal hook. */ if (!NILP (Vx_sent_selection_functions) && !EQ (Vx_sent_selection_functions, Qunbound)) - { - Lisp_Object args[4]; - args[0] = Qx_sent_selection_functions; - args[1] = selection_symbol; - args[2] = target_symbol; - args[3] = success ? Qt : Qnil; - Frun_hook_with_args (4, args); - } + CALLN (Frun_hook_with_args, Qx_sent_selection_functions, + selection_symbol, target_symbol, success ? Qt : Qnil); unbind_to (count, Qnil); UNGCPRO; @@ -937,12 +931,7 @@ x_handle_selection_clear (struct input_event *event) tset_selection_alist (dpyinfo->terminal, Vselection_alist); /* Run the `x-lost-selection-functions' abnormal hook. */ - { - Lisp_Object args[2]; - args[0] = Qx_lost_selection_functions; - args[1] = selection_symbol; - Frun_hook_with_args (2, args); - } + CALLN (Frun_hook_with_args, Qx_lost_selection_functions, selection_symbol); redisplay_preserve_echo_area (20); } @@ -978,10 +967,8 @@ x_clear_frame_selections (struct frame *f) && EQ (frame, XCAR (XCDR (XCDR (XCDR (XCAR (t->Vselection_alist))))))) { /* Run the `x-lost-selection-functions' abnormal hook. */ - Lisp_Object args[2]; - args[0] = Qx_lost_selection_functions; - args[1] = Fcar (Fcar (t->Vselection_alist)); - Frun_hook_with_args (2, args); + CALLN (Frun_hook_with_args, Qx_lost_selection_functions, + Fcar (Fcar (t->Vselection_alist))); tset_selection_alist (t, XCDR (t->Vselection_alist)); } @@ -991,10 +978,8 @@ x_clear_frame_selections (struct frame *f) if (CONSP (XCDR (rest)) && EQ (frame, XCAR (XCDR (XCDR (XCDR (XCAR (XCDR (rest)))))))) { - Lisp_Object args[2]; - args[0] = Qx_lost_selection_functions; - args[1] = XCAR (XCAR (XCDR (rest))); - Frun_hook_with_args (2, args); + CALLN (Frun_hook_with_args, Qx_lost_selection_functions, + XCAR (XCAR (XCDR (rest)))); XSETCDR (rest, XCDR (XCDR (rest))); break; } @@ -2138,7 +2123,7 @@ x_clipboard_manager_error_1 (Lisp_Object err) { AUTO_STRING (format, "X clipboard manager error: %s\n\ If the problem persists, set `x-select-enable-clipboard-manager' to nil."); - Fmessage (2, (Lisp_Object []) {format, CAR (CDR (err))}); + CALLN (Fmessage, format, CAR (CDR (err))); return Qnil; } commit c4e54f962714056df6c57c21f694544f237d5f4c Author: Stefan Monnier Date: Sun Jan 25 11:09:53 2015 -0500 * lisp/emacs-lisp/cl-generic.el: Fix next-method-p test Fixes: debbugs:19672 * lisp/emacs-lisp/cl-generic.el (cl--generic-no-next-method-function): New. (cl--generic-build-combined-method, cl--generic-nnm-sample): Use it. (cl--generic-typeof-types): Add support for `sequence'. (cl-defmethod): Add non-keywords in the qualifiers. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d42670f..70293af 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2015-01-25 Stefan Monnier + + * emacs-lisp/cl-generic.el (cl--generic-no-next-method-function): New fun. + (cl--generic-build-combined-method, cl--generic-nnm-sample): Use it + (bug#19672). + (cl--generic-typeof-types): Add support for `sequence'. + (cl-defmethod): Add non-keywords in the qualifiers. + 2015-01-25 Dmitry Gutov * emacs-lisp/find-func.el (find-function-regexp): Don't match diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el index 095f1e5..02a4351 100644 --- a/lisp/emacs-lisp/cl-generic.el +++ b/lisp/emacs-lisp/cl-generic.el @@ -27,6 +27,10 @@ ;; Missing elements: ;; - We don't support make-method, call-method, define-method-combination. +;; CLOS's define-method-combination is IMO overly complicated, and it suffers +;; from a significant problem: the method-combination code returns a sexp +;; that needs to be `eval'uated or compiled. IOW it requires run-time +;; code generation. ;; - Method and generic function objects: CLOS defines methods as objects ;; (same for generic functions), whereas we don't offer such an abstraction. ;; - `no-next-method' should receive the "calling method" object, but since we @@ -66,6 +70,10 @@ ;; often suboptimal since after one dispatch, the remaining dispatches can ;; usually be simplified, or even completely skipped. +;; TODO/FIXME: +;; - WIBNI we could use something like +;; (add-function :before (cl-method-function (cl-find-method ...)) ...) + (eval-when-compile (require 'cl-lib)) (eval-when-compile (require 'pcase)) @@ -313,7 +321,7 @@ which case this method will be invoked when the argument is `eql' to VAL. (setfizer (if (eq 'setf (car-safe name)) ;; Call it before we call cl--generic-lambda. (cl--generic-setf-rewrite (cadr name))))) - (while (keywordp args) + (while (not (listp args)) (push args qualifiers) (setq args (pop body))) (pcase-let* ((with-cnm (not (memq (car qualifiers) '(:before :after)))) @@ -454,6 +462,18 @@ This is particularly useful when many different tags select the same set of methods, since this table then allows us to share a single combined-method for all those different tags in the method-cache.") +(defun cl--generic-no-next-method-function (generic) + (lambda (&rest args) + ;; FIXME: CLOS passes as second arg the "calling method". + ;; We don't currently have "method objects" like CLOS + ;; does so we can't really do it the CLOS way. + ;; The closest would be to pass the lambda corresponding + ;; to the method, or maybe the ((SPECIALIZERS + ;; . QUALIFIER) USE-CNM . FUNCTION) entry from the method + ;; table, but the caller wouldn't be able to do much with + ;; it anyway. So we pass nil for now. + (apply #'cl-no-next-method generic nil args))) + (defun cl--generic-build-combined-method (generic-name methods) (let ((mets-by-qual ())) (dolist (qm methods) @@ -469,16 +489,7 @@ for all those different tags in the method-cache.") (lambda (&rest args) (apply #'cl-no-primary-method generic-name args))) (t - (let* ((fun (lambda (&rest args) - ;; FIXME: CLOS passes as second arg the "calling method". - ;; We don't currently have "method objects" like CLOS - ;; does so we can't really do it the CLOS way. - ;; The closest would be to pass the lambda corresponding - ;; to the method, or maybe the ((SPECIALIZERS - ;; . QUALIFIER) USE-CNM . FUNCTION) entry from the method - ;; table, but the caller wouldn't be able to do much with - ;; it anyway. So we pass nil for now. - (apply #'cl-no-next-method generic-name nil args))) + (let* ((fun (cl--generic-no-next-method-function generic-name)) ;; We use `cdr' to drop the `uses-cnm' annotations. (before (mapcar #'cdr (reverse (alist-get :before mets-by-qual)))) @@ -495,8 +506,7 @@ for all those different tags in the method-cache.") (apply af args))))))) (cl--generic-nest fun (alist-get :around mets-by-qual)))))))) -(defconst cl--generic-nnm-sample - (cl--generic-build-combined-method nil '(((specializer . :qualifier))))) +(defconst cl--generic-nnm-sample (cl--generic-no-next-method-function 'dummy)) (defconst cl--generic-cnm-sample (funcall (cl--generic-build-combined-method nil `(((specializer . :primary) t . ,#'identity))))) @@ -690,22 +700,24 @@ Can only be used from within the lexical body of a primary or around method." (push 'cl-struct types) ;The "parent type" of all cl-structs. (nreverse types)))) -;;; Dispatch on "old-style types". +;;; Dispatch on "system types". (defconst cl--generic-typeof-types ;; Hand made from the source code of `type-of'. - '((integer number) (symbol) (string array) (cons list) + '((integer number) (symbol) (string array sequence) (cons list sequence) ;; Markers aren't `numberp', yet they are accepted wherever integers are ;; accepted, pretty much. (marker) (overlay) (float number) (window-configuration) - (process) (window) (subr) (compiled-function) (buffer) (char-table array) - (bool-vector array) + (process) (window) (subr) (compiled-function) (buffer) + (char-table array sequence) + (bool-vector array sequence) (frame) (hash-table) (font-spec) (font-entity) (font-object) - (vector array) + (vector array sequence) ;; Plus, hand made: - (null list symbol) - (list) - (array) + (null symbol list sequence) + (list sequence) + (array sequence) + (sequence) (number))) (add-function :before-until cl-generic-tagcode-function @@ -715,7 +727,7 @@ Can only be used from within the lexical body of a primary or around method." ;; as `character', `atom', `face', `function', ... (and (assq type cl--generic-typeof-types) (progn - (if (memq type '(vector array)) + (if (memq type '(vector array sequence)) (message "`%S' also matches CL structs and EIEIO classes" type)) ;; FIXME: We could also change `type-of' to return `null' for nil. `(10 . (if ,name (type-of ,name) 'null))))) commit f67446455fc0ec59f5c25c90a8783e571b60dc8f Author: Lars Ingebrigtsen Date: Sun Jan 25 12:18:51 2015 +0000 lisp/gnus/gnus-group.el (gnus-group-suspend): Close all backends diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 5a61a21..08e904a 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,7 @@ +2015-01-25 Lars Ingebrigtsen + + * gnus-group.el (gnus-group-suspend): Close all backends. + 2015-01-15 Lars Magne Ingebrigtsen * nntp.el (nntp-send-authinfo): Error out if the password is wrong. diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el index f3dcc40..dc11442 100644 --- a/lisp/gnus/gnus-group.el +++ b/lisp/gnus/gnus-group.el @@ -4312,6 +4312,11 @@ The hook `gnus-suspend-gnus-hook' is called before actually suspending." (gnus-kill-buffer buf))) (setq gnus-backlog-articles nil) (gnus-kill-gnus-frames) + ;; Closing all the backends is useful (for instance) when when the + ;; IP addresses have changed and you need to reconnect. + (dolist (elem gnus-opened-servers) + (gnus-close-server (car elem)) + (setcar (cdr elem) 'closed)) (when group-buf (bury-buffer group-buf) (delete-windows-on group-buf t)))) commit 407e6beeb3c37947c7c92bf0d230973bf133afde Author: Paul Eggert Date: Sat Jan 24 19:00:41 2015 -0800 * indent/shell.sh (bar): Use '[ $# -eq 0 ]', not '[ $# == 0 ]'. This is more portable in shell scripts. Fixes: bug#19658 diff --git a/test/ChangeLog b/test/ChangeLog index 5a4e616..d8cd367 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,9 @@ +2015-01-25 Paul Eggert + + * indent/shell.sh (bar): Use '[ $# -eq 0 ]', not '[ $# == 0 ]'. + This is more portable in shell scripts. + Fixes: bug#19658 + 2015-01-23 Dmitry Gutov Fix package tests when TMPDIR is in HOME. (Bug#19657) diff --git a/test/indent/shell.sh b/test/indent/shell.sh index 14f6774..b0f69bd 100755 --- a/test/indent/shell.sh +++ b/test/indent/shell.sh @@ -100,7 +100,7 @@ foo () { d) echo 3;; esac - + case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote @@ -117,7 +117,7 @@ foo () { esac | grep '.' | # KNOWN INDENT BUG sed 1d - + case toto in -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* \ @@ -133,7 +133,7 @@ foo () { 5) hello ;; 5) hello ;; esac - + echo "'" wfgfe #!/bin/bash @@ -152,7 +152,7 @@ help2 EOF2 } bar () { - if [ $# == 0 ]; then + if [ $# -eq 0 ]; then while f # KNOWN INDENT BUG do @@ -163,18 +163,18 @@ bar () { # adsgsdg echo "screwed up" fi - + $@ $? $# - + for f in * do sdfg done - + if swrgfef then blas else sdf fi - + fi } commit f6ef836521dfd07a0a33d5f1f384427f0c4023ce Author: Paul Eggert Date: Sat Jan 24 18:05:33 2015 -0800 Use gnustep-config if available * configure.ac (--with-gnustep): Document this. (NS_GNUSTEP_CONFIG): New variable, set if gnustep-config works. If gnustep-config works, use 'gnustep-config --objc-flags' and 'gnustep-config --gui-libs' to compute GNUstep configuration variables, instead of attempting to infer them individually. * etc/NEWS: Document this. * src/emacs.c [NS_IMPL_GNUSTEP]: Don't include . It doesn't appear to be needed, and the inclusion breaks on Ubuntu 14.10 when 'configure' uses 'gnustep-config'. Fixes: bug#19507 diff --git a/ChangeLog b/ChangeLog index b02203d..eecdad6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2015-01-25 Paul Eggert + + Use gnustep-config if available + * configure.ac (--with-gnustep): Document this. + (NS_GNUSTEP_CONFIG): New variable, set if gnustep-config works. + If gnustep-config works, use 'gnustep-config --objc-flags' and + 'gnustep-config --gui-libs' to compute GNUstep configuration + variables, instead of attempting to infer them individually. + Fixes: bug#19507 + 2015-01-21 Ulrich Müller * configure.ac (gamegroup): New AC_SUBST. diff --git a/configure.ac b/configure.ac index 47b36fe..cd011b9 100644 --- a/configure.ac +++ b/configure.ac @@ -414,7 +414,9 @@ esac AC_ARG_WITH([gnustep-conf],dnl [AS_HELP_STRING([--with-gnustep-conf=FILENAME], - [name of GNUstep.conf; default $GNUSTEP_CONFIG_FILE, or /etc/GNUstep/GNUstep.conf])]) + [name of GNUstep configuration file to use on systems where the command + 'gnustep-config' does not work; default $GNUSTEP_CONFIG_FILE, or + /etc/GNUstep/GNUstep.conf])]) test "X${with_gnustep_conf}" != X && test "${with_gnustep_conf}" != yes && \ GNUSTEP_CONFIG_FILE="${with_gnustep_conf}" test "X$GNUSTEP_CONFIG_FILE" = "X" && \ @@ -1752,6 +1754,7 @@ else fi HAVE_NS=no +NS_GNUSTEP_CONFIG=no NS_IMPL_COCOA=no NS_IMPL_GNUSTEP=no tmp_CPPFLAGS="$CPPFLAGS" @@ -1768,13 +1771,13 @@ if test "${with_ns}" != no; then ns_appresdir=${ns_appdir}/Contents/Resources ns_appsrc=Cocoa/Emacs.base ns_fontfile=macfont.o + elif flags=$( (gnustep-config --objc-flags) 2>/dev/null); then + NS_IMPL_GNUSTEP=yes + NS_GNUSTEP_CONFIG=yes + GNU_OBJC_CFLAGS=$flags + LIBS_GNUSTEP=$(gnustep-config --gui-libs) || exit elif test -f $GNUSTEP_CONFIG_FILE; then NS_IMPL_GNUSTEP=yes - ns_appdir=`pwd`/nextstep/Emacs.app - ns_appbindir=${ns_appdir} - ns_appresdir=${ns_appdir}/Resources - ns_appsrc=GNUstep/Emacs.base - ns_fontfile=nsfont.o dnl FIXME sourcing this several times in subshells seems inefficient. GNUSTEP_SYSTEM_HEADERS="$(. $GNUSTEP_CONFIG_FILE; echo $GNUSTEP_SYSTEM_HEADERS)" GNUSTEP_SYSTEM_LIBRARIES="$(. $GNUSTEP_CONFIG_FILE; echo $GNUSTEP_SYSTEM_LIBRARIES)" @@ -1807,8 +1810,16 @@ fail; GNU_OBJC_CFLAGS="-fobjc-exceptions" fi fi + if test $NS_IMPL_GNUSTEP = yes; then + ns_appdir=`pwd`/nextstep/Emacs.app + ns_appbindir=${ns_appdir} + ns_appresdir=${ns_appdir}/Resources + ns_appsrc=GNUstep/Emacs.base + ns_fontfile=nsfont.o + fi dnl This is only used while we test the NS headers, it gets reset below. + CPPFLAGS="$CPPFLAGS $GNU_OBJC_CFLAGS" CFLAGS="$CFLAGS $GNU_OBJC_CFLAGS" AC_CHECK_HEADER([AppKit/AppKit.h], [HAVE_NS=yes], @@ -3375,11 +3386,13 @@ if test "${HAVE_NS}" = "yes"; then fi if test "${NS_IMPL_GNUSTEP}" = "yes"; then AC_DEFINE(NS_IMPL_GNUSTEP, 1, [Define to 1 if you are using NS windowing under GNUstep.]) - # See also .m.o rule in Makefile.in */ - # FIXME: are all these flags really needed? Document here why. */ - GNUSTEP_CFLAGS="-D_REENTRANT -fPIC -fno-strict-aliasing -I${GNUSTEP_SYSTEM_HEADERS} ${GNUSTEP_LOCAL_HEADERS}" - ## Extra CFLAGS applied to src/*.m files. - GNU_OBJC_CFLAGS="$GNU_OBJC_CFLAGS -fgnu-runtime -Wno-import -fconstant-string-class=NSConstantString -DGNUSTEP_BASE_LIBRARY=1 -DGNU_GUI_LIBRARY=1 -DGNU_RUNTIME=1 -DGSWARN -DGSDIAGNOSE" + if test $NS_GNUSTEP_CONFIG != yes; then + # See also .m.o rule in src/Makefile.in. */ + # FIXME: are all these flags really needed? Document here why. */ + GNUSTEP_CFLAGS="-D_REENTRANT -fPIC -fno-strict-aliasing -I${GNUSTEP_SYSTEM_HEADERS} ${GNUSTEP_LOCAL_HEADERS}" + ## Extra CFLAGS applied to src/*.m files. + GNU_OBJC_CFLAGS="$GNU_OBJC_CFLAGS -fgnu-runtime -Wno-import -fconstant-string-class=NSConstantString -DGNUSTEP_BASE_LIBRARY=1 -DGNU_GUI_LIBRARY=1 -DGNU_RUNTIME=1 -DGSWARN -DGSDIAGNOSE" + fi fi OTHER_FILES=ns-app fi diff --git a/etc/ChangeLog b/etc/ChangeLog index 47f61f4..55b835c 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,8 @@ +2015-01-25 Paul Eggert + + Use gnustep-config if available + * NEWS: Document this. + 2015-01-22 Paul Eggert Don't downcase system diagnostics' first letters diff --git a/etc/NEWS b/etc/NEWS index db47033..d5baed3 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -36,6 +36,9 @@ should be able to work around the problem either by porting the Emacs undumping code to GCC under IRIX, or by configuring --with-wide-int, or by sticking with Emacs 24.4. +** 'configure' now prefers gnustep-config when configuring GNUstep. +If gnustep-config is not available, the old heuristics are used. + --- ** The configure option `--with-pkg-config-prog' has been removed. Use './configure PKG_CONFIG=/full/name/of/pkg-config' if you need to. diff --git a/src/ChangeLog b/src/ChangeLog index a8b9c3b..96e3146 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2015-01-25 Paul Eggert + + Use gnustep-config if available + * emacs.c [NS_IMPL_GNUSTEP]: Don't include . + It doesn't appear to be needed, and the inclusion breaks on + Ubuntu 14.10 when 'configure' uses 'gnustep-config'. + 2015-01-22 Eli Zaretskii * xdisp.c (init_iterator): Restore a comment lost in transition. diff --git a/src/emacs.c b/src/emacs.c index ca1a8b2..345fe3e 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -59,11 +59,6 @@ along with GNU Emacs. If not, see . */ #include TERM_HEADER #endif /* HAVE_WINDOW_SYSTEM */ -#ifdef NS_IMPL_GNUSTEP -/* At least under Debian, GSConfig is in a subdirectory. --Stef */ -#include -#endif - #include "commands.h" #include "intervals.h" #include "character.h" commit e5087278b9bcab5847ce63d80c0d74c27f50e719 Merge: bdd672b bce27d8 Author: Joakim Verona Date: Sun Jan 25 02:11:31 2015 +0100 merge master commit bce27d884521832a62837b113f4e681974cdaccb Author: Dmitry Gutov Date: Sun Jan 25 02:20:01 2015 +0200 (find-function-regexp): Don't match `defgroup' * lisp/emacs-lisp/find-func.el (find-function-regexp): Don't match `defgroup' (regression from the previous change here). diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 15518a7..d42670f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2015-01-25 Dmitry Gutov + + * emacs-lisp/find-func.el (find-function-regexp): Don't match + `defgroup' (regression from the previous change here). + 2015-01-23 Thomas Fitzsimmons * net/ldap.el (ldap-search-internal): Mention binddn in invalid diff --git a/lisp/emacs-lisp/find-func.el b/lisp/emacs-lisp/find-func.el index 6c9c798..7ea13d4 100644 --- a/lisp/emacs-lisp/find-func.el +++ b/lisp/emacs-lisp/find-func.el @@ -59,7 +59,7 @@ (concat "^\\s-*(\\(def\\(ine-skeleton\\|ine-generic-mode\\|ine-derived-mode\\|\ ine\\(?:-global\\)?-minor-mode\\|ine-compilation-mode\\|un-cvs-mode\\|\ -foo\\|\\(?:[^icfv]\\|g[^r]\\)\\(\\w\\|\\s_\\)+\\*?\\)\\|easy-mmode-define-[a-z-]+\\|easy-menu-define\\|\ +foo\\|\\(?:[^icfgv]\\|g[^r]\\)\\(\\w\\|\\s_\\)+\\*?\\)\\|easy-mmode-define-[a-z-]+\\|easy-menu-define\\|\ menu-bar-make-toggle\\)" find-function-space-re "\\('\\|\(quote \\)?%s\\(\\s-\\|$\\|\(\\|\)\\)") commit 7a7e5941280a7690f29e1af7325bc0cf7f9b41a2 Author: Eli Zaretskii Date: Sat Jan 24 12:09:02 2015 +0200 Add a cross-reference in ELisp manual. (Bug#19668) doc/lispref/searching.texi (Regexp Search): Add a cross-reference to "Syntax of Regexps". diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 52c621c..911e698 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,8 @@ +2015-01-24 Eli Zaretskii + + * searching.texi (Regexp Search): Add a cross-reference to "Syntax + of Regexps". (Bug#19668) + 2015-01-21 Daniel Koning (tiny change) * commands.texi (Drag Events, Motion Events, Event Examples) diff --git a/doc/lispref/searching.texi b/doc/lispref/searching.texi index 2032b15..61fac78 100644 --- a/doc/lispref/searching.texi +++ b/doc/lispref/searching.texi @@ -988,10 +988,11 @@ list of characters @var{chars}. @cindex searching for regexp In GNU Emacs, you can search for the next match for a regular -expression either incrementally or not. For incremental search -commands, see @ref{Regexp Search, , Regular Expression Search, emacs, -The GNU Emacs Manual}. Here we describe only the search functions -useful in programs. The principal one is @code{re-search-forward}. +expression (@pxref{Syntax of Regexps}) either incrementally or not. +For incremental search commands, see @ref{Regexp Search, , Regular +Expression Search, emacs, The GNU Emacs Manual}. Here we describe +only the search functions useful in programs. The principal one is +@code{re-search-forward}. These search functions convert the regular expression to multibyte if the buffer is multibyte; they convert the regular expression to unibyte commit b4f40757efcb67ed73ca60c257e27dab493ee332 Author: Jan D Date: Sat Jan 24 10:57:21 2015 +0100 Fixes: debbugs:19660 * nsterm.m (drawRect:): Add block/unblock_input. diff --git a/src/ChangeLog b/src/ChangeLog index 43e5641..9cf5eb5 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2015-01-24 Jan Djärv + + * nsterm.m (drawRect:): Add block/unblock_input (Bug#19660). + 2015-01-21 Paul Eggert Fix coding.c subscript error diff --git a/src/nsterm.m b/src/nsterm.m index 24770f6..08b8e3a 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -6750,7 +6750,9 @@ if (cols > 0 && rows > 0) return; ns_clear_frame_area (emacsframe, x, y, width, height); + block_input (); expose_frame (emacsframe, x, y, width, height); + unblock_input (); /* drawRect: may be called (at least in OS X 10.5) for invisible commit 83b3c312d79d119997e3d61f7adb796a371c2f2e Author: Glenn Morris Date: Fri Jan 23 19:52:07 2015 -0500 * test/automated/regexp-tests.el: Require regexp-opt diff --git a/test/ChangeLog b/test/ChangeLog index ede6bd6..11bf34d 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +2015-01-24 Glenn Morris + + * automated/regexp-tests.el: Require regexp-opt, which is + not preloaded --without-x. + 2015-01-23 Dmitry Gutov Fix package tests when TMPDIR is in HOME. (Bug#19657) diff --git a/test/automated/regexp-tests.el b/test/automated/regexp-tests.el index 31a4ee9..ee177b3 100644 --- a/test/automated/regexp-tests.el +++ b/test/automated/regexp-tests.el @@ -23,6 +23,8 @@ ;;; Code: +(require 'regexp-opt) + (ert-deftest regexp-test-regexp-opt () "Test the `compilation-error-regexp-alist' regexps. The test data is in `compile-tests--test-regexps-data'." commit 02cbd38ae4e4a1e4d309a1bb27c031e154c53f27 Author: Paul Eggert Date: Fri Jan 23 16:08:12 2015 -0800 Fix a couple of AM_V_GEN bugs * admin/unidata/Makefile.in (unifiles): Use AM_V_at instead of AM_V_GEN, since this doesn't generate a file. * lib-src/Makefile.in (AM_V_GEN, am__v_GEN_, am__v_GEN_0, am__v_GEN_1) (AM_V_at, am__v_at_, am__v_at_0, am__v_at_1): New macros, copied from ../src/Makefile.in. diff --git a/admin/ChangeLog b/admin/ChangeLog index 70d1714..e692ca0 100644 --- a/admin/ChangeLog +++ b/admin/ChangeLog @@ -1,3 +1,9 @@ +2015-01-24 Paul Eggert + + Fix a couple of AM_V_GEN bugs + * unidata/Makefile.in (unifiles): Use AM_V_at instead of AM_V_GEN, + since this doesn't generate a file. + 2015-01-15 Eli Zaretskii * unidata/uvs.el (uvs-print-table-ivd): Call set-binary-mode on diff --git a/admin/unidata/Makefile.in b/admin/unidata/Makefile.in index 1396f09..6c81d32 100644 --- a/admin/unidata/Makefile.in +++ b/admin/unidata/Makefile.in @@ -90,7 +90,7 @@ ${unidir}/charprop.el: ${srcdir}/unidata-gen.el \ ## to generate a Makefile fragment explicitly listing the uni- files, ## which this file could include. If no fragment, rebuild everything. unifiles: ${unidir}/charprop.el - $(AM_V_GEN)for f in `sed -n 's/^;; FILE: //p' < $<`; do \ + $(AM_V_at)for f in `sed -n 's/^;; FILE: //p' < $<`; do \ [ -f $(unidir)/$$f ] || exec $(MAKE) PHONY_EXTRAS=$< $<; \ done diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index 6cf82e9..8d2c95e 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,3 +1,10 @@ +2015-01-24 Paul Eggert + + Fix a couple of AM_V_GEN bugs + * Makefile.in (AM_V_GEN, am__v_GEN_, am__v_GEN_0, am__v_GEN_1) + (AM_V_at, am__v_at_, am__v_at_0, am__v_at_1): + New macros, copied from ../src/Makefile.in. + 2015-01-22 Paul Eggert Check exit statuses in lib-src/Makefile diff --git a/lib-src/Makefile.in b/lib-src/Makefile.in index 1b329c2..d2705e7 100644 --- a/lib-src/Makefile.in +++ b/lib-src/Makefile.in @@ -58,11 +58,21 @@ am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = + AM_V_RC = $(am__v_RC_@AM_V@) am__v_RC_ = $(am__v_RC_@AM_DEFAULT_V@) am__v_RC_0 = @echo " RC " $@; am__v_RC_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = + # ==================== Where To Install Things ==================== # Location to install Emacs.app under GNUstep / Mac OS X. commit ac5475dacb20d240db27d56199910d8a6fcc90e8 Merge: fd62486 e56e1b9 Author: Stefan Monnier Date: Fri Jan 23 17:20:19 2015 -0500 lisp/net/{eudc,ldap}: Merge branch streamline-eudc-configuration commit fd62486e819056bc9d0f00c09731a45a7f837997 Author: Stefan Monnier Date: Fri Jan 23 16:50:56 2015 -0500 * lisp/emacs-lisp/cl-generic.el (cl-no-primary-method): New fun and error. (cl--generic-build-combined-method): Use it. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5cceb19..ed4e1ab 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2015-01-23 Stefan Monnier + + * emacs-lisp/cl-generic.el (cl-no-primary-method): New fun and error. + (cl--generic-build-combined-method): Use it. + 2015-01-22 Paul Eggert Don't downcase system diagnostics' first letters diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el index f214faf..095f1e5 100644 --- a/lisp/emacs-lisp/cl-generic.el +++ b/lisp/emacs-lisp/cl-generic.el @@ -462,9 +462,12 @@ for all those different tags in the method-cache.") (gethash (cons generic-name mets-by-qual) cl--generic-combined-method-memoization) (cond - ((null mets-by-qual) (lambda (&rest args) - (apply #'cl-no-applicable-method - generic-name args))) + ((null mets-by-qual) + (lambda (&rest args) + (apply #'cl-no-applicable-method generic-name args))) + ((null (alist-get :primary mets-by-qual)) + (lambda (&rest args) + (apply #'cl-no-primary-method generic-name args))) (t (let* ((fun (lambda (&rest args) ;; FIXME: CLOS passes as second arg the "calling method". @@ -475,8 +478,6 @@ for all those different tags in the method-cache.") ;; . QUALIFIER) USE-CNM . FUNCTION) entry from the method ;; table, but the caller wouldn't be able to do much with ;; it anyway. So we pass nil for now. - ;; FIXME: signal `no-primary-method' if there's - ;; no primary. (apply #'cl-no-next-method generic-name nil args))) ;; We use `cdr' to drop the `uses-cnm' annotations. (before @@ -546,6 +547,7 @@ for all those different tags in the method-cache.") (define-error 'cl-no-method "No method for %S") (define-error 'cl-no-next-method "No next method for %S" 'cl-no-method) +(define-error 'cl-no-primary-method "No primary method for %S" 'cl-no-method) (define-error 'cl-no-applicable-method "No applicable method for %S" 'cl-no-method) @@ -559,6 +561,11 @@ for all those different tags in the method-cache.") (cl-defmethod cl-no-applicable-method (generic &rest args) (signal 'cl-no-applicable-method `(,generic ,@args))) +(cl-defgeneric cl-no-primary-method (generic &rest args) + "Function called when a method call finds no primary method.") +(cl-defmethod cl-no-primary-method (generic &rest args) + (signal 'cl-no-primary-method `(,generic ,@args))) + (defun cl-call-next-method (&rest _args) "Function to call the next applicable method. Can only be used from within the lexical body of a primary or around method." @@ -727,6 +734,7 @@ Can only be used from within the lexical body of a primary or around method." ;; (foo 'major-mode toto titi) ;; ;; FIXME: Better would be to do that via dispatch on an "implicit argument". +;; E.g. (cl-defmethod foo (y z &context (major-mode text-mode)) ...) ;; (defvar cl--generic-major-modes (make-hash-table :test #'eq)) ;; commit 81fb8ab036d1755038d11a0a1a305a6062cc20a2 Author: Dmitry Gutov Date: Fri Jan 23 02:50:15 2015 +0200 Backport: Fix package tests when TMPDIR is in HOME Fixes: debbugs:19657 * test/automated/package-test.el (with-package-test): Bind `abbreviated-home-dir' to nil. (package-test-describe-package, package-test-signed): Expect abbreviated directory names. (cherry picked from commit f02406c74a0a91b29073101912a4b80736a69581) diff --git a/test/ChangeLog b/test/ChangeLog index 3f2d761..ede6bd6 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,11 @@ +2015-01-23 Dmitry Gutov + + Fix package tests when TMPDIR is in HOME. (Bug#19657) + * automated/package-test.el (with-package-test): + Bind `abbreviated-home-dir' to nil. + (package-test-describe-package, package-test-signed): + Expect abbreviated directory names. + 2015-01-22 Wolfgang Jenkner * automated/calc-tests.el (calc-tests-equal, calc-tests-simple): diff --git a/test/automated/package-test.el b/test/automated/package-test.el index c550dd0..383af84 100644 --- a/test/automated/package-test.el +++ b/test/automated/package-test.el @@ -95,6 +95,7 @@ (package-archives `(("gnu" . ,package-test-data-dir))) (old-yes-no-defn (symbol-function 'yes-or-no-p)) (default-directory package-test-file-dir) + abbreviated-home-dir package--initialized package-alist ,@(if update-news @@ -321,8 +322,7 @@ Must called from within a `tar-mode' buffer." (goto-char (point-min)) (should (search-forward "simple-single is an installed package." nil t)) (should (search-forward - (format "Status: Installed in `%s/' (unsigned)." - (expand-file-name "simple-single-1.3" package-user-dir)) + "Status: Installed in `~/simple-single-1.3/' (unsigned)." nil t)) (should (search-forward "Version: 1.3" nil t)) (should (search-forward "Summary: A single-file package with no dependencies" @@ -391,8 +391,7 @@ Must called from within a `tar-mode' buffer." (goto-char (point-min)) (should (search-forward "signed-good is an installed package." nil t)) (should (search-forward - (format "Status: Installed in `%s/'." - (expand-file-name "signed-good-1.0" package-user-dir)) + "Status: Installed in `~/signed-good-1.0/'." nil t)))))) (provide 'package-test) commit f02406c74a0a91b29073101912a4b80736a69581 Author: Dmitry Gutov Date: Fri Jan 23 02:50:15 2015 +0200 Fix package tests when TMPDIR is in HOME Fixes: debbugs:19657 * test/automated/package-test.el (with-package-test): Bind `abbreviated-home-dir' to nil. (package-test-describe-package, package-test-signed): Expect abbreviated directory names. diff --git a/test/ChangeLog b/test/ChangeLog index af36b5d..5a4e616 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,4 +1,12 @@ -2015-01-20 Jorgen Schaefer +2015-01-23 Dmitry Gutov + + Fix package tests when TMPDIR is in HOME. (Bug#19657) + * automated/package-test.el (with-package-test): + Bind `abbreviated-home-dir' to nil. + (package-test-describe-package, package-test-signed): + Expect abbreviated directory names. + +2015-01-22 Jorgen Schaefer * automated/package-test.el (package-test-install-prioritized): Re-add the test case and add priority to the correct repository diff --git a/test/automated/package-test.el b/test/automated/package-test.el index 3ea13de..a848865 100644 --- a/test/automated/package-test.el +++ b/test/automated/package-test.el @@ -95,6 +95,7 @@ (package-archives `(("gnu" . ,package-test-data-dir))) (old-yes-no-defn (symbol-function 'yes-or-no-p)) (default-directory package-test-file-dir) + abbreviated-home-dir package--initialized package-alist ,@(if update-news @@ -339,8 +340,7 @@ Must called from within a `tar-mode' buffer." (goto-char (point-min)) (should (search-forward "simple-single is an installed package." nil t)) (should (search-forward - (format "Status: Installed in `%s/' (unsigned)." - (expand-file-name "simple-single-1.3" package-user-dir)) + "Status: Installed in `~/simple-single-1.3/' (unsigned)." nil t)) (should (search-forward "Version: 1.3" nil t)) (should (search-forward "Summary: A single-file package with no dependencies" @@ -409,8 +409,7 @@ Must called from within a `tar-mode' buffer." (goto-char (point-min)) (should (search-forward "signed-good is an installed package." nil t)) (should (search-forward - (format "Status: Installed in `%s/'." - (expand-file-name "signed-good-1.0" package-user-dir)) + "Status: Installed in `~/signed-good-1.0/'." nil t)))))) commit bdd672b275034e8c1c65992f2e21dac7cc6eba60 Merge: 5693f3d 2f908e0 Author: Joakim Verona Date: Fri Jan 23 00:13:27 2015 +0100 Merge branch 'master' into xwidget commit 2f908e0cac317b381393e3efb70ec08dfaab5383 Author: Jorgen Schaefer Date: Thu Jan 22 21:06:47 2015 +0100 Re-add and fix prioritized archives test. * automated/package-test.el (package-test-install-prioritized): Re-add the test case and add priority to the correct repository this time around. diff --git a/test/ChangeLog b/test/ChangeLog index d63a561..af36b5d 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,13 +1,14 @@ +2015-01-20 Jorgen Schaefer + + * automated/package-test.el (package-test-install-prioritized): + Re-add the test case and add priority to the correct repository + this time around. + 2015-01-21 Stefan Monnier * automated/cl-generic-tests.el (setf cl--generic-2): Make sure the setf can be used already in the body of the method. -2015-01-20 Jorgen Schaefer - - * automated/package-test.el (package-test-install-prioritized): - Remove test due to unreproducable failures. - 2015-01-20 Michal Nazarewicz * automated/descr-text-test.el: New file with tests for diff --git a/test/automated/package-test.el b/test/automated/package-test.el index 27a71c5..3ea13de 100644 --- a/test/automated/package-test.el +++ b/test/automated/package-test.el @@ -230,6 +230,23 @@ Must called from within a `tar-mode' buffer." (package-refresh-contents) (package-install 'simple-single))) +(ert-deftest package-test-install-prioritized () + "Install a lower version from a higher-prioritized archive." + (with-package-test () + (let* ((newer-version (expand-file-name "data/package/newer-versions" + package-test-file-dir)) + (package-archives `(("older" . ,package-test-data-dir) + ("newer" . ,newer-version))) + (package-archive-priorities '(("older" . 100)))) + + (package-initialize) + (package-refresh-contents) + (package-install 'simple-single) + + (let ((installed (cadr (assq 'simple-single package-alist)))) + (should (version-list-= '(1 3) + (package-desc-version installed))))))) + (ert-deftest package-test-install-multifile () "Check properties of the installed multi-file package." (with-package-test (:basedir "data/package" :install '(multi-file)) commit 3e359626e64c50efe31e3f5965d199cb69bb4a8d Author: Eli Zaretskii Date: Thu Jan 22 19:57:18 2015 +0200 src/xdisp.c (init_iterator): Restore a comment lost in transition. diff --git a/src/ChangeLog b/src/ChangeLog index a98c77f..a8b9c3b 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2015-01-22 Eli Zaretskii + + * xdisp.c (init_iterator): Restore a comment lost in transition. + 2015-01-22 Paul Eggert Use bool for boolean in xfont.c, xftfont.c, xgselect.c diff --git a/src/xdisp.c b/src/xdisp.c index bdfea1e..cd96e59 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -2746,6 +2746,8 @@ init_iterator (struct it *it, struct window *w, row = MATRIX_HEADER_LINE_ROW (w->desired_matrix); } + /* Clear IT, and set it->object and other IT's Lisp objects to Qnil. + Other parts of redisplay rely on that. */ memclear (it, sizeof *it); it->current.overlay_string_index = -1; it->current.dpvec_index = -1; commit 5693f3de69f9db99252b2f4eb1c7178fdec2a210 Merge: 5c1d2b0 d7995b1 Author: Joakim Verona Date: Thu Jan 22 12:52:42 2015 +0100 merge master commit d7995b18e4c7b6ac7b5e31c3c8f5f5db648d3275 Author: Glenn Morris Date: Thu Jan 22 06:21:14 2015 -0500 Auto-commit of loaddefs files. diff --git a/lisp/emacs-lisp/eieio-core.el b/lisp/emacs-lisp/eieio-core.el index 0297acc..261138b 100644 --- a/lisp/emacs-lisp/eieio-core.el +++ b/lisp/emacs-lisp/eieio-core.el @@ -1258,7 +1258,7 @@ method invocation orders of the involved classes." (eieio--class-precedence-list tag)))) -;;;### (autoloads nil "eieio-compat" "eieio-compat.el" "51667b1cd372f45acdae14f838cedcc6") +;;;### (autoloads nil "eieio-compat" "eieio-compat.el" "57805f02023795a01567781e70aaf9f9") ;;; Generated autoloads from eieio-compat.el (autoload 'eieio--defalias "eieio-compat" "\ diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el index 7672d7f..3dba8e0 100644 --- a/lisp/emacs-lisp/eieio.el +++ b/lisp/emacs-lisp/eieio.el @@ -931,7 +931,7 @@ variable PRINT-FUNCTION. Optional argument NOESCAPE is passed to ;;; Start of automatically extracted autoloads. -;;;### (autoloads nil "eieio-custom" "eieio-custom.el" "6baa78cfc590cc0422e12b7eb55abf24") +;;;### (autoloads nil "eieio-custom" "eieio-custom.el" "2ec91e473fcad1ff20cd76edc4aab706") ;;; Generated autoloads from eieio-custom.el (autoload 'customize-object "eieio-custom" "\ @@ -942,7 +942,7 @@ Optional argument GROUP is the sub-group of slots to display. ;;;*** -;;;### (autoloads nil "eieio-opt" "eieio-opt.el" "e922bf7ebc7dcb272480c4ba148da1ac") +;;;### (autoloads nil "eieio-opt" "eieio-opt.el" "d7b8682e15aebad7dbe6384dc5ed655f") ;;; Generated autoloads from eieio-opt.el (autoload 'eieio-browse "eieio-opt" "\ commit 74ab488ff2e57f31eb5290266f0f3b1995ebf83e Author: Paul Eggert Date: Thu Jan 22 00:39:30 2015 -0800 Check exit statuses in lib-src/Makefile * Makefile.in ($(DESTDIR)${archlibdir}, install, uninstall) (mostlyclean, clean, distclean, extraclean): Check exit statuses more carefully. Reindent to fit in 80 chars. (bootstrap-clean maintainer-clean): Remove unnecessary 'true'. diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index c2aedb0..6cf82e9 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,3 +1,11 @@ +2015-01-22 Paul Eggert + + Check exit statuses in lib-src/Makefile + * Makefile.in ($(DESTDIR)${archlibdir}, install, uninstall) + (mostlyclean, clean, distclean, extraclean): + Check exit statuses more carefully. Reindent to fit in 80 chars. + (bootstrap-clean maintainer-clean): Remove unnecessary 'true'. + 2015-01-22 Ulrich Müller * Makefile.in ($(DESTDIR)${archlibdir}): Don't fail if the chown diff --git a/lib-src/Makefile.in b/lib-src/Makefile.in index a0bf5ba..1b329c2 100644 --- a/lib-src/Makefile.in +++ b/lib-src/Makefile.in @@ -254,31 +254,41 @@ maybe-blessmail: $(BLESSMAIL_TARGET) $(DESTDIR)${archlibdir}: all @echo @echo "Installing utilities run internally by Emacs." - umask 022; ${MKDIR_P} "$(DESTDIR)${archlibdir}" - exp_archlibdir=`cd "$(DESTDIR)${archlibdir}" && /bin/pwd`; \ + umask 022 && ${MKDIR_P} "$(DESTDIR)${archlibdir}" + exp_archlibdir=`cd "$(DESTDIR)${archlibdir}" && /bin/pwd` && \ if [ "$$exp_archlibdir" != "`/bin/pwd`" ]; then \ for file in ${UTILITIES}; do \ - $(INSTALL_PROGRAM) $(INSTALL_STRIP) $$file "$(DESTDIR)${archlibdir}/$$file" ; \ + $(INSTALL_PROGRAM) $(INSTALL_STRIP) $$file \ + "$(DESTDIR)${archlibdir}/$$file" || exit; \ done ; \ fi - umask 022; ${MKDIR_P} "$(DESTDIR)${gamedir}"; \ - touch "$(DESTDIR)${gamedir}/snake-scores"; \ - touch "$(DESTDIR)${gamedir}/tetris-scores" + umask 022 && ${MKDIR_P} "$(DESTDIR)${gamedir}" && \ + touch "$(DESTDIR)${gamedir}/snake-scores" \ + "$(DESTDIR)${gamedir}/tetris-scores" ifneq ($(gameuser),) - -if chown ${gameuser} "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}" && chmod u+s,go-r "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}"; then \ - chown ${gameuser} "$(DESTDIR)${gamedir}"; \ + if chown ${gameuser} \ + "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}" && \ + chmod u+s,go-r \ + "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}"; \ + then \ + chown ${gameuser} "$(DESTDIR)${gamedir}" && \ chmod u=rwx,g=rx,o=rx "$(DESTDIR)${gamedir}"; \ fi else ifneq ($(gamegroup),) - -if chgrp ${gamegroup} "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}" && chmod g+s,o-r "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}"; then \ - chgrp ${gamegroup} "$(DESTDIR)${gamedir}"; \ + if chgrp ${gamegroup} \ + "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}" && \ + chmod g+s,o-r \ + "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}"; \ + then \ + chgrp ${gamegroup} "$(DESTDIR)${gamedir}" && \ chmod u=rwx,g=rwx,o=rx "$(DESTDIR)${gamedir}"; \ fi endif - exp_archlibdir=`cd "$(DESTDIR)${archlibdir}" && /bin/pwd`; \ + exp_archlibdir=`cd "$(DESTDIR)${archlibdir}" && /bin/pwd` && \ if [ "$$exp_archlibdir" != "`cd ${srcdir} && /bin/pwd`" ]; then \ for file in ${SCRIPTS}; do \ - $(INSTALL_SCRIPT) ${srcdir}/$$file "$(DESTDIR)${archlibdir}/$$file"; \ + $(INSTALL_SCRIPT) ${srcdir}/$$file \ + "$(DESTDIR)${archlibdir}/$$file" || exit; \ done ; \ fi @@ -288,34 +298,38 @@ endif install: $(DESTDIR)${archlibdir} @echo @echo "Installing utilities for users to run." - umask 022; ${MKDIR_P} "$(DESTDIR)${bindir}" + umask 022 && ${MKDIR_P} "$(DESTDIR)${bindir}" for file in ${INSTALLABLES} ; do \ - $(INSTALL_PROGRAM) $(INSTALL_STRIP) $${file} "$(DESTDIR)${bindir}"/`echo $${file} | sed -e 's/${EXEEXT}$$//' -e '$(TRANSFORM)'`${EXEEXT} ; \ + $(INSTALL_PROGRAM) $(INSTALL_STRIP) $${file} \ + "$(DESTDIR)${bindir}"/` \ + echo $${file} | sed -e 's/${EXEEXT}$$//' -e '$(TRANSFORM)' \ + `${EXEEXT} || exit; \ done uninstall: for file in ${INSTALLABLES}; do \ - rm -f "$(DESTDIR)${bindir}"/`echo $${file} | sed -e 's/${EXEEXT}$$//' -e '$(TRANSFORM)'`${EXEEXT} ; \ + rm -f "$(DESTDIR)${bindir}"/` \ + echo $${file} | sed -e 's/${EXEEXT}$$//' -e '$(TRANSFORM)' \ + `${EXEEXT}; \ done if [ -d "$(DESTDIR)${archlibdir}" ]; then \ - (cd "$(DESTDIR)${archlibdir}" && rm -f ${UTILITIES} ${SCRIPTS}) \ + cd "$(DESTDIR)${archlibdir}" && \ + rm -f ${UTILITIES} ${SCRIPTS}; \ fi mostlyclean: - -rm -f core *.o *.res + rm -f core *.o *.res clean: mostlyclean - -rm -f ${EXE_FILES} + rm -f ${EXE_FILES} distclean: clean - -rm -f TAGS - -rm -f Makefile blessmail + rm -f TAGS Makefile blessmail bootstrap-clean maintainer-clean: distclean - true extraclean: maintainer-clean - -rm -f *~ \#* + rm -f *~ \#* ## Test the contents of the directory. check: commit b631bb57cf84f880186035f7158c19237856e2ce Author: Paul Eggert Date: Wed Jan 21 23:40:50 2015 -0800 Use bool for boolean in xfont.c, xftfont.c, xgselect.c * xfont.c (xfont_driver, xfont_chars_supported) (xfont_text_extents): * xftfont.c (xftfont_get_colors, xftfont_open) (xftfont_prepare_face, xftfont_done_face) (xftfont_cached_font_ok): * xgselect.c (xg_select): Use bool for boolean. diff --git a/src/ChangeLog b/src/ChangeLog index 8f23dd3..a98c77f 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,14 @@ 2015-01-22 Paul Eggert + Use bool for boolean in xfont.c, xftfont.c, xgselect.c + * xfont.c (xfont_driver, xfont_chars_supported) + (xfont_text_extents): + * xftfont.c (xftfont_get_colors, xftfont_open) + (xftfont_prepare_face, xftfont_done_face) + (xftfont_cached_font_ok): + * xgselect.c (xg_select): + Use bool for boolean. + Don't downcase system diagnostics' first letters * fileio.c (report_file_errno): Don't downcase, and simplify. Fixes: bug#19642 diff --git a/src/xfont.c b/src/xfont.c index 10cc321..55053b9 100644 --- a/src/xfont.c +++ b/src/xfont.c @@ -132,7 +132,7 @@ static int xfont_check (struct frame *, struct font *); struct font_driver xfont_driver = { LISP_INITIALLY_ZERO, /* Qx */ - 0, /* case insensitive */ + false, /* case insensitive */ xfont_get_cache, xfont_list, xfont_match, @@ -269,7 +269,7 @@ xfont_chars_supported (Lisp_Object chars, XFontStruct *xfont, } return (i >= 0); } - return 0; + return false; } /* A hash table recoding which font supports which scripts. Each key @@ -983,7 +983,7 @@ xfont_text_extents (struct font *font, unsigned int *code, int i, width = 0; bool first; - for (i = 0, first = 1; i < nglyphs; i++) + for (i = 0, first = true; i < nglyphs; i++) { XChar2b char2b; static XCharStruct *pcm; @@ -1000,7 +1000,7 @@ xfont_text_extents (struct font *font, unsigned int *code, metrics->rbearing = pcm->rbearing; metrics->ascent = pcm->ascent; metrics->descent = pcm->descent; - first = 0; + first = false; } else { diff --git a/src/xftfont.c b/src/xftfont.c index 054b38e..0e8b876 100644 --- a/src/xftfont.c +++ b/src/xftfont.c @@ -85,7 +85,7 @@ xftfont_get_colors (struct frame *f, struct face *face, GC gc, else { XGCValues xgcv; - bool fg_done = 0, bg_done = 0; + bool fg_done = false, bg_done = false; block_input (); XGetGCValues (FRAME_X_DISPLAY (f), gc, @@ -93,15 +93,15 @@ xftfont_get_colors (struct frame *f, struct face *face, GC gc, if (xftface_info) { if (xgcv.foreground == face->foreground) - *fg = xftface_info->xft_fg, fg_done = 1; + *fg = xftface_info->xft_fg, fg_done = true; else if (xgcv.foreground == face->background) - *fg = xftface_info->xft_bg, fg_done = 1; + *fg = xftface_info->xft_bg, fg_done = true; if (! bg) - bg_done = 1; + bg_done = true; else if (xgcv.background == face->background) - *bg = xftface_info->xft_bg, bg_done = 1; + *bg = xftface_info->xft_bg, bg_done = true; else if (xgcv.background == face->foreground) - *bg = xftface_info->xft_fg, bg_done = 1; + *bg = xftface_info->xft_fg, bg_done = true; } if (! (fg_done & bg_done)) @@ -434,7 +434,7 @@ xftfont_open (struct frame *f, Lisp_Object entity, int pixel_size) font->baseline_offset = 0; font->relative_compose = 0; font->default_ascent = 0; - font->vertical_centering = 0; + font->vertical_centering = false; #ifdef FT_BDF_H if (! (ft_face->face_flags & FT_FACE_FLAG_SFNT)) { @@ -487,7 +487,7 @@ xftfont_prepare_face (struct frame *f, struct face *face) { struct xftface_info *xftface_info; -#if 0 +#if false /* This doesn't work if face->ascii_face doesn't use an Xft font. */ if (face != face->ascii_face) { @@ -507,7 +507,7 @@ xftfont_done_face (struct frame *f, struct face *face) { struct xftface_info *xftface_info; -#if 0 +#if false /* This doesn't work if face->ascii_face doesn't use an Xft font. */ if (face != face->ascii_face || ! face->extra) @@ -682,7 +682,7 @@ xftfont_cached_font_ok (struct frame *f, Lisp_Object font_object, Display *display = FRAME_X_DISPLAY (f); FcPattern *pat = FcPatternCreate (); FcBool b1, b2; - bool ok = 0; + bool ok = false; int i1, i2, r1, r2; xftfont_add_rendering_parameters (pat, entity); @@ -712,7 +712,7 @@ xftfont_cached_font_ok (struct frame *f, Lisp_Object font_object, r2 = FcPatternGetInteger (oldpat, FC_RGBA, 0, &i2); if (r1 != r2 || i1 != i2) goto out; - ok = 1; + ok = true; out: FcPatternDestroy (pat); return ok; diff --git a/src/xgselect.c b/src/xgselect.c index bb2226e..0b62d3e 100644 --- a/src/xgselect.c +++ b/src/xgselect.c @@ -50,7 +50,7 @@ xg_select (int fds_lim, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timespec const *tmop = timeout; GMainContext *context; - int have_wfds = wfds != NULL; + bool have_wfds = wfds != NULL; GPollFD gfds_buf[128]; GPollFD *gfds = gfds_buf; int gfds_size = ARRAYELTS (gfds_buf); @@ -96,7 +96,7 @@ xg_select (int fds_lim, fd_set *rfds, fd_set *wfds, fd_set *efds, { FD_SET (gfds[i].fd, &all_wfds); if (gfds[i].fd > max_fds) max_fds = gfds[i].fd; - have_wfds = 1; + have_wfds = true; } } commit 5c1d2b0f06ddb1f6b520b2446ce9e207e5bfc315 Merge: d6ada5a 7f4e7dd Author: Joakim Verona Date: Thu Jan 22 08:27:13 2015 +0100 merge master commit 7f4e7dd378c456b498c270b47b46aaae365a72ab Author: Ulrich Müller Date: Thu Jan 22 08:24:42 2015 +0100 Don't fail if chown or chgrp for 'update-game-score' is unsuccessful. * lib-src/Makefile.in ($(DESTDIR)${archlibdir}): Don't fail if the chown or chgrp command is unsuccessful; the 'update-game-score' program has a fallback for this at runtime. diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index b67038f..c2aedb0 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,3 +1,9 @@ +2015-01-22 Ulrich Müller + + * Makefile.in ($(DESTDIR)${archlibdir}): Don't fail if the chown + or chgrp command is unsuccessful; the 'update-game-score' program + has a fallback for this at runtime. + 2015-01-21 Ulrich Müller * update-game-score.c: Allow the program to run sgid instead diff --git a/lib-src/Makefile.in b/lib-src/Makefile.in index 2997f1b..a0bf5ba 100644 --- a/lib-src/Makefile.in +++ b/lib-src/Makefile.in @@ -265,15 +265,15 @@ $(DESTDIR)${archlibdir}: all touch "$(DESTDIR)${gamedir}/snake-scores"; \ touch "$(DESTDIR)${gamedir}/tetris-scores" ifneq ($(gameuser),) - chown ${gameuser} "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}" - chmod u+s,go-r "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}" - chown ${gameuser} "$(DESTDIR)${gamedir}" - chmod u=rwx,g=rx,o=rx "$(DESTDIR)${gamedir}" + -if chown ${gameuser} "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}" && chmod u+s,go-r "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}"; then \ + chown ${gameuser} "$(DESTDIR)${gamedir}"; \ + chmod u=rwx,g=rx,o=rx "$(DESTDIR)${gamedir}"; \ + fi else ifneq ($(gamegroup),) - chgrp ${gamegroup} "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}" - chmod g+s,o-r "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}" - chgrp ${gamegroup} "$(DESTDIR)${gamedir}" - chmod u=rwx,g=rwx,o=rx "$(DESTDIR)${gamedir}" + -if chgrp ${gamegroup} "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}" && chmod g+s,o-r "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}"; then \ + chgrp ${gamegroup} "$(DESTDIR)${gamedir}"; \ + chmod u=rwx,g=rwx,o=rx "$(DESTDIR)${gamedir}"; \ + fi endif exp_archlibdir=`cd "$(DESTDIR)${archlibdir}" && /bin/pwd`; \ if [ "$$exp_archlibdir" != "`cd ${srcdir} && /bin/pwd`" ]; then \ commit 394b976fb9c76fa21049329442bd33f337b55567 Author: Paul Eggert Date: Wed Jan 21 22:06:42 2015 -0800 Spelling fix diff --git a/test/automated/eieio-tests.el b/test/automated/eieio-tests.el index e0120b4..847aefd 100644 --- a/test/automated/eieio-tests.el +++ b/test/automated/eieio-tests.el @@ -655,7 +655,7 @@ Do not override for `prot-2'." (oref eitest-p1 slot-1) (oref eitest-p2 slot-1) ;; Accessing protected slot out of context used to fail, but we dropped this - ;; feature, since it was underused and noone noticed that the check was + ;; feature, since it was underused and no one noticed that the check was ;; incorrect (much too loose). ;;PROTECTED (should-error (oref eitest-p1 slot-2) :type 'invalid-slot-name) ;; Access protected slot in method commit 8dd58a2d1fedaa16573bc67e986dc2014620c681 Author: Paul Eggert Date: Wed Jan 21 20:21:45 2015 -0800 Don't downcase system diagnostics' first letters * etc/NEWS: Document this. * lisp/emacs-lisp/bytecomp.el (byte-compile-file): * lisp/ffap.el (find-file-at-point): * lisp/files.el (insert-file-1): * lisp/net/ange-ftp.el (ange-ftp-barf-if-not-directory) (ange-ftp-copy-file-internal): * lisp/progmodes/etags.el (visit-tags-table): * lisp/url/url-dav.el (url-dav-delete-directory, url-dav-delete-file) (url-dav-directory-files): Keep diagnostics consistent with system's. * lisp/erc/erc-dcc.el (erc-dcc-server): * lisp/ffap.el (ffap-machine-p): Ignore case while comparing diagnostics. * src/fileio.c (report_file_errno): Don't downcase, and simplify. Fixes: bug#19642 diff --git a/etc/ChangeLog b/etc/ChangeLog index 7b64dfb..47f61f4 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,8 @@ +2015-01-22 Paul Eggert + + Don't downcase system diagnostics' first letters + * NEWS: Document this. + 2015-01-16 Artur Malabarba * NEWS: Document installing packages from directories. diff --git a/etc/NEWS b/etc/NEWS index 120d8b9..db47033 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -538,6 +538,11 @@ position list returned for such events is now nil. These slots used to hold key-shortcut data, but have been obsolete since Emacs-21. +** Emacs no longer downcases the first letter of a system diagnostic +when signaling a file error. For example, it now reports "Permission +denied" instead of "permission denied". The old behavior was problematic +in languages like German where downcasing rules depend on grammar. + * Lisp Changes in Emacs 25.1 diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c000d6b..5cceb19 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,16 @@ +2015-01-22 Paul Eggert + + Don't downcase system diagnostics' first letters + * emacs-lisp/bytecomp.el (byte-compile-file): + * ffap.el (find-file-at-point): + * files.el (insert-file-1): + * net/ange-ftp.el (ange-ftp-barf-if-not-directory) + (ange-ftp-copy-file-internal): + * progmodes/etags.el (visit-tags-table): + Keep diagnostics consistent with system's. + * ffap.el (ffap-machine-p): + Ignore case while comparing diagnostics. + 2015-01-22 Stefan Monnier * help.el (help-make-usage): Don't turn a "_" arg into an empty-string diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index 8440570..2bd8d07 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el @@ -1863,8 +1863,8 @@ The value is non-nil if there were no errors, nil if errors." (signal 'file-error (list "Opening output file" (if (file-exists-p target-file) - "cannot overwrite file" - "directory not writable or nonexistent") + "Cannot overwrite file" + "Directory not writable or nonexistent") target-file))) (kill-buffer (current-buffer))) (if (and byte-compile-generate-call-tree diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog index 1b54fb6..28ac7d3 100644 --- a/lisp/erc/ChangeLog +++ b/lisp/erc/ChangeLog @@ -1,3 +1,8 @@ +2015-01-22 Paul Eggert + + Don't downcase system diagnostics' first letters + * erc-dcc.el (erc-dcc-server): Ignore case while comparing diagnostics. + 2014-11-23 Michael Albinus * erc-desktop-notifications.el (erc-notifications-bus): diff --git a/lisp/erc/erc-dcc.el b/lisp/erc/erc-dcc.el index 9d52c3b..182f1e0 100644 --- a/lisp/erc/erc-dcc.el +++ b/lisp/erc/erc-dcc.el @@ -379,7 +379,7 @@ created subprocess, or nil." (set-process-filter-multibyte process nil))))) (file-error (unless (and (string= "Cannot bind server socket" (nth 1 err)) - (string= "address already in use" (nth 2 err))) + (string= "address already in use" (downcase (nth 2 err)))) (signal (car err) (cdr err))) (setq port (1+ port)) (unless (< port upper) @@ -1264,4 +1264,3 @@ other client." ;; Local Variables: ;; indent-tabs-mode: nil ;; End: - diff --git a/lisp/ffap.el b/lisp/ffap.el index 1b8ea60..350a6bd 100644 --- a/lisp/ffap.el +++ b/lisp/ffap.el @@ -476,7 +476,7 @@ Returned values: ;; (file-error "connection failed" "address already in use" ;; "ftp.uu.net" "ffap-machine-p") ((equal mesg "connection failed") - (if (equal (nth 2 error) "permission denied") + (if (string= (downcase (nth 2 error)) "permission denied") nil ; host does not exist ;; Other errors mean the host exists: (nth 2 error))) @@ -1439,7 +1439,7 @@ and the functions `ffap-file-at-point' and `ffap-url-at-point'." (expand-file-name filename))) ;; User does not want to find a non-existent file: ((signal 'file-error (list "Opening file buffer" - "no such file or directory" + "No such file or directory" filename))))))) ;; Shortcut: allow {M-x ffap} rather than {M-x find-file-at-point}. diff --git a/lisp/files.el b/lisp/files.el index e9632ed..ed1943d 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -2128,7 +2128,7 @@ This function ensures that none of these modifications will take place." (defun insert-file-1 (filename insert-func) (if (file-directory-p filename) - (signal 'file-error (list "Opening input file" "file is a directory" + (signal 'file-error (list "Opening input file" "Is a directory" filename))) ;; Check whether the file is uncommonly large (abort-if-file-too-large (nth 7 (file-attributes filename)) "insert" filename) diff --git a/lisp/net/ange-ftp.el b/lisp/net/ange-ftp.el index 17db6e7..52153ad 100644 --- a/lisp/net/ange-ftp.el +++ b/lisp/net/ange-ftp.el @@ -1536,8 +1536,8 @@ then kill the related FTP process." (signal 'file-error (list "Opening directory" (if (file-exists-p directory) - "not a directory" - "no such file or directory") + "Not a directory" + "No such file or directory") directory)))) ;;;; ------------------------------------------------------------ @@ -3664,7 +3664,7 @@ so return the size on the remote host exactly. See RFC 3659." (or (file-exists-p filename) (signal 'file-error - (list "Copy file" "no such file or directory" filename))) + (list "Copy file" "No such file or directory" filename))) ;; canonicalize newname if a directory. (if (file-directory-p newname) diff --git a/lisp/progmodes/etags.el b/lisp/progmodes/etags.el index 626855e..b470352 100644 --- a/lisp/progmodes/etags.el +++ b/lisp/progmodes/etags.el @@ -308,7 +308,7 @@ file the tag was in." (save-excursion (or (visit-tags-table-buffer file) (signal 'file-error (list "Visiting tags table" - "file does not exist" + "No such file or directory" file))) ;; Set FILE to the expanded name. (setq file tags-file-name))) diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog index 1f5ece0..920d692 100644 --- a/lisp/url/ChangeLog +++ b/lisp/url/ChangeLog @@ -1,3 +1,9 @@ +2015-01-22 Paul Eggert + + Don't downcase system diagnostics' first letters + * url-dav.el (url-dav-delete-directory, url-dav-delete-file) + (url-dav-directory-files): Keep diagnostics consistent with system's. + 2014-12-12 Lars Magne Ingebrigtsen * url-http.el (url-http-parse-headers): `gnutls-available-p' is diff --git a/lisp/url/url-dav.el b/lisp/url/url-dav.el index 65747e9..61ca088 100644 --- a/lisp/url/url-dav.el +++ b/lisp/url/url-dav.el @@ -741,7 +741,7 @@ files in the collection as well." (if (and (not recursive) (/= (length props) 1)) (signal 'file-error (list "Removing directory" - "directory not empty" url))))) + "Directory not empty" url))))) (mapc (lambda (result) (setq status (plist-get (cdr result) 'DAV:status)) @@ -760,7 +760,7 @@ files in the collection as well." url lock-token (setq props (url-dav-get-properties url)) (if (eq (plist-get (cdar props) 'DAV:resourcetype) 'DAV:collection) - (signal 'file-error (list "Removing old name" "is a collection" url))))) + (signal 'file-error (list "Removing old name" "Is a collection" url))))) (mapc (lambda (result) (setq status (plist-get (cdr result) 'DAV:status)) @@ -787,7 +787,7 @@ If NOSORT is non-nil, the list is not sorted--its order is unpredictable. (when (and (= (length properties) 1) (not (url-dav-file-directory-p url))) - (signal 'file-error (list "Opening directory" "not a directory" url))) + (signal 'file-error (list "Opening directory" "Not a directory" url))) (while properties (setq child-props (pop properties) diff --git a/src/ChangeLog b/src/ChangeLog index 4c5b2a1..8f23dd3 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,9 @@ 2015-01-22 Paul Eggert + Don't downcase system diagnostics' first letters + * fileio.c (report_file_errno): Don't downcase, and simplify. + Fixes: bug#19642 + Isolate NIL_IS_ZERO-assuming code better Suggested by Stefan Monnier in: http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00588.html diff --git a/src/fileio.c b/src/fileio.c index ff6720d..d0fd08a 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -186,37 +186,17 @@ void report_file_errno (char const *string, Lisp_Object name, int errorno) { Lisp_Object data = CONSP (name) || NILP (name) ? name : list1 (name); - Lisp_Object errstring; - char *str; - synchronize_system_messages_locale (); - str = strerror (errorno); - errstring = code_convert_string_norecord (build_unibyte_string (str), - Vlocale_coding_system, 0); - - while (1) - switch (errorno) - { - case EEXIST: - xsignal (Qfile_already_exists, Fcons (errstring, data)); - break; - default: - /* System error messages are capitalized. Downcase the initial - unless it is followed by a slash. (The slash case caters to - error messages that begin with "I/O" or, in German, "E/A".) */ - if (STRING_MULTIBYTE (errstring) - && ! EQ (Faref (errstring, make_number (1)), make_number ('/'))) - { - int c; - - str = SSDATA (errstring); - c = STRING_CHAR ((unsigned char *) str); - Faset (errstring, make_number (0), make_number (downcase (c))); - } - - xsignal (Qfile_error, - Fcons (build_string (string), Fcons (errstring, data))); - } + char *str = strerror (errorno); + Lisp_Object errstring + = code_convert_string_norecord (build_unibyte_string (str), + Vlocale_coding_system, 0); + Lisp_Object errdata = Fcons (errstring, data); + + if (errorno == EEXIST) + xsignal (Qfile_already_exists, errdata); + else + xsignal (Qfile_error, Fcons (build_string (string), errdata)); } /* Signal a file-access failure that set errno. STRING describes the commit 938bca8e4141f5f96497f9be26b0ea0bb90f40cd Author: Stefan Monnier Date: Wed Jan 21 23:16:45 2015 -0500 Avoid generating invalid usage info for pathological function Fixes: debbugs:19645 * lisp/help.el (help-make-usage): Don't turn a "_" arg into an empty-string. * lisp/emacs-lisp/cl-generic.el (cl--generic-lambda): Don't confuse a string body with a docstring. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 39ae463..c000d6b 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2015-01-22 Stefan Monnier + + * help.el (help-make-usage): Don't turn a "_" arg into an empty-string + arg (bug#19645). + * emacs-lisp/cl-generic.el (cl--generic-lambda): Don't confuse a string + body with a docstring. + 2015-01-22 Dmitry Gutov * progmodes/xref.el (xref-location-marker, xref-location-group): diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el index 8dee9a3..f214faf 100644 --- a/lisp/emacs-lisp/cl-generic.el +++ b/lisp/emacs-lisp/cl-generic.el @@ -228,7 +228,8 @@ This macro can only be used within the lexical scope of a cl-generic method." "Make the lambda expression for a method with ARGS and BODY." (let ((plain-args ()) (specializers nil) - (doc-string (if (stringp (car-safe body)) (pop body))) + (doc-string (if (and (stringp (car-safe body)) (cdr body)) + (pop body))) (mandatory t)) (dolist (arg args) (push (pcase arg @@ -252,7 +253,7 @@ This macro can only be used within the lexical scope of a cl-generic method." ;; destructuring args, `declare' and whatnot). (pcase (macroexpand fun macroenv) (`#'(lambda ,args . ,body) - (let* ((doc-string (and doc-string (stringp (car body)) + (let* ((doc-string (and doc-string (stringp (car body)) (cdr body) (pop body))) (cnm (make-symbol "cl--cnm")) (nmp (make-symbol "cl--nmp")) diff --git a/lisp/help.el b/lisp/help.el index 39ec6be..bf72425 100644 --- a/lisp/help.el +++ b/lisp/help.el @@ -1445,7 +1445,7 @@ the same names as used in the original source code, when possible." (let ((name (symbol-name arg))) (cond ((string-match "\\`&" name) arg) - ((string-match "\\`_" name) + ((string-match "\\`_." name) (intern (upcase (substring name 1)))) (t (intern (upcase name))))))) arglist))) commit 74244d239e9093035c369721b469529a5fdaf1c6 Author: Paul Eggert Date: Wed Jan 21 20:01:10 2015 -0800 Better isolate code that assumes NIL_IS_ZERO Suggested by Stefan Monnier in: http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00588.html * alloc.c (allocate_pseudovector): Use memclear, not memsetnil, to remove a 'verify'. * callint.c (Fcall_interactively): * dispnew.c (realloc_glyph_pool): * xdisp.c (init_iterator): Use memclear, not memset, to remove a 'verify'. * lisp.h (memclear): Rename from memsetnil, and take a byte count rather than a word count. All callers changed. diff --git a/src/ChangeLog b/src/ChangeLog index e5e4fe9..4c5b2a1 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,17 @@ +2015-01-22 Paul Eggert + + Isolate NIL_IS_ZERO-assuming code better + Suggested by Stefan Monnier in: + http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00588.html + * alloc.c (allocate_pseudovector): + Use memclear, not memsetnil, to remove a 'verify'. + * callint.c (Fcall_interactively): + * dispnew.c (realloc_glyph_pool): + * xdisp.c (init_iterator): + Use memclear, not memset, to remove a 'verify'. + * lisp.h (memclear): Rename from memsetnil, and take a byte + count rather than a word count. All callers changed. + 2015-01-20 Paul Eggert Undo port to hypothetical nonzero Qnil case diff --git a/src/alloc.c b/src/alloc.c index bf0456c..571b2b0 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -3174,11 +3174,8 @@ allocate_pseudovector (int memlen, int lisplen, eassert (memlen - lisplen <= (1 << PSEUDOVECTOR_REST_BITS) - 1); eassert (lisplen <= (1 << PSEUDOVECTOR_SIZE_BITS) - 1); - /* Only the first LISPLEN slots will be traced normally by the GC. - Since Qnil == 0, we can memset Lisp and non-Lisp data at one go. */ - verify (NIL_IS_ZERO); - memsetnil (v->contents, zerolen); - + /* Only the first LISPLEN slots will be traced normally by the GC. */ + memclear (v->contents, zerolen * word_size); XSETPVECTYPESIZE (v, tag, lisplen, memlen - lisplen); return v; } diff --git a/src/callint.c b/src/callint.c index 3a595b5..165d374 100644 --- a/src/callint.c +++ b/src/callint.c @@ -509,8 +509,7 @@ invoke it. If KEYS is omitted or nil, the return value of visargs = args + nargs; varies = (signed char *) (visargs + nargs); - verify (NIL_IS_ZERO); - memset (args, 0, nargs * (2 * word_size + 1)); + memclear (args, nargs * (2 * word_size + 1)); GCPRO5 (prefix_arg, function, *args, *visargs, up_event); gcpro3.nvars = nargs; diff --git a/src/coding.c b/src/coding.c index b95c0a5..43ebbe0 100644 --- a/src/coding.c +++ b/src/coding.c @@ -11273,7 +11273,7 @@ internal character representation. */); { Lisp_Object args[coding_arg_undecided_max]; - memsetnil (args, ARRAYELTS (args)); + memclear (args, sizeof args); Lisp_Object plist[16]; plist[0] = intern_c_string (":name"); diff --git a/src/dispnew.c b/src/dispnew.c index 9af0ae5..3c8117e 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -1339,14 +1339,8 @@ realloc_glyph_pool (struct glyph_pool *pool, struct dim matrix_dim) ptrdiff_t old_nglyphs = pool->nglyphs; pool->glyphs = xpalloc (pool->glyphs, &pool->nglyphs, needed - old_nglyphs, -1, sizeof *pool->glyphs); - - /* Redisplay relies on nil as the object of special glyphs - (truncation and continuation glyphs and also blanks used to - extend each line on a TTY), so verify that memset does this. */ - verify (NIL_IS_ZERO); - - memset (pool->glyphs + old_nglyphs, 0, - (pool->nglyphs - old_nglyphs) * sizeof *pool->glyphs); + memclear (pool->glyphs + old_nglyphs, + (pool->nglyphs - old_nglyphs) * sizeof *pool->glyphs); } /* Remember the number of rows and columns because (a) we use them diff --git a/src/eval.c b/src/eval.c index ddf6535..e649c15 100644 --- a/src/eval.c +++ b/src/eval.c @@ -2299,7 +2299,8 @@ usage: (apply FUNCTION &rest ARGUMENTS) */) /* Avoid making funcall cons up a yet another new vector of arguments by explicitly supplying nil's for optional values. */ SAFE_ALLOCA_LISP (funcall_args, 1 + XSUBR (fun)->max_args); - memsetnil (funcall_args + numargs + 1, XSUBR (fun)->max_args - numargs); + memclear (funcall_args + numargs + 1, + (XSUBR (fun)->max_args - numargs) * word_size); funcall_nargs = 1 + XSUBR (fun)->max_args; } else @@ -2693,8 +2694,8 @@ usage: (funcall FUNCTION &rest ARGUMENTS) */) eassert (XSUBR (fun)->max_args <= ARRAYELTS (internal_argbuf)); internal_args = internal_argbuf; memcpy (internal_args, args + 1, numargs * word_size); - memsetnil (internal_args + numargs, - XSUBR (fun)->max_args - numargs); + memclear (internal_args + numargs, + (XSUBR (fun)->max_args - numargs) * word_size); } else internal_args = args + 1; diff --git a/src/fns.c b/src/fns.c index d177294..a4b2e6d 100644 --- a/src/fns.c +++ b/src/fns.c @@ -2524,7 +2524,7 @@ mapcar1 (EMACS_INT leni, Lisp_Object *vals, Lisp_Object fn, Lisp_Object seq) if (vals) { /* Don't let vals contain any garbage when GC happens. */ - memsetnil (vals, leni); + memclear (vals, leni * word_size); GCPRO3 (dummy, fn, seq); gcpro1.var = vals; @@ -3700,7 +3700,7 @@ larger_vector (Lisp_Object vec, ptrdiff_t incr_min, ptrdiff_t nitems_max) new_size = old_size + incr; v = allocate_vector (new_size); memcpy (v->contents, XVECTOR (vec)->contents, old_size * sizeof *v->contents); - memsetnil (v->contents + old_size, new_size - old_size); + memclear (v->contents + old_size, incr * word_size); XSETVECTOR (vec, v); return vec; } diff --git a/src/font.c b/src/font.c index 190b33a..d05742c 100644 --- a/src/font.c +++ b/src/font.c @@ -989,14 +989,14 @@ font_expand_wildcards (Lisp_Object *field, int n) if (i == 0 || ! NILP (tmp[i - 1])) /* None of TMP[X] corresponds to Jth field. */ return -1; - memsetnil (field + j, range[i].from - j); + memclear (field + j, (range[i].from - j) * word_size); j = range[i].from; } field[j++] = tmp[i]; } if (! NILP (tmp[n - 1]) && j < XLFD_REGISTRY_INDEX) return -1; - memsetnil (field + j, XLFD_LAST_INDEX - j); + memclear (field + j, (XLFD_LAST_INDEX - j) * word_size); if (INTEGERP (field[XLFD_ENCODING_INDEX])) field[XLFD_ENCODING_INDEX] = Fintern (Fnumber_to_string (field[XLFD_ENCODING_INDEX]), Qnil); diff --git a/src/lisp.h b/src/lisp.h index 8967d6e..44117fc 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -1508,13 +1508,15 @@ gc_aset (Lisp_Object array, ptrdiff_t idx, Lisp_Object val) to find such assumptions later if we change Qnil to be nonzero. */ enum { NIL_IS_ZERO = XLI_BUILTIN_LISPSYM (iQnil) == 0 }; -/* Set a Lisp_Object array V's N entries to nil. */ +/* Clear the object addressed by P, with size NBYTES, so that all its + bytes are zero and all its Lisp values are nil. */ INLINE void -memsetnil (Lisp_Object *v, ptrdiff_t n) +memclear (void *p, ptrdiff_t nbytes) { - eassert (0 <= n); + eassert (0 <= nbytes); verify (NIL_IS_ZERO); - memset (v, 0, n * sizeof *v); + /* Since Qnil is zero, memset suffices. */ + memset (p, 0, nbytes); } /* If a struct is made to look like a vector, this macro returns the length diff --git a/src/xdisp.c b/src/xdisp.c index 9611952..bdfea1e 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -2746,13 +2746,7 @@ init_iterator (struct it *it, struct window *w, row = MATRIX_HEADER_LINE_ROW (w->desired_matrix); } - /* Clear IT. */ - - /* The code assumes it->object and other Lisp_Object components are - set to nil, so verify that memset does this. */ - verify (NIL_IS_ZERO); - memset (it, 0, sizeof *it); - + memclear (it, sizeof *it); it->current.overlay_string_index = -1; it->current.dpvec_index = -1; it->base_face_id = remapped_base_face_id; commit 3a345b50628cd700031121ad1b2ac1b7fae7f920 Author: Wolfgang Jenkner Date: Thu Jan 22 03:25:01 2015 +0100 Backport: Handle the `neg' operator in some calc-units functions. * lisp/calc/calc-units.el (math-units-in-expr-p) (math-single-units-in-expr-p, math-find-compatible-unit-rec) (math-extract-units): Handle the `neg' operator. (Bug#19582) * test/automated/calc-tests.el (calc-tests-equal, calc-tests-simple): New functions. (test-calc-remove-units, test-calc-extract-units) (test-calc-convert-units): New tests. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 280f602..a2467e6 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2015-01-22 Wolfgang Jenkner + + * calc/calc-units.el (math-units-in-expr-p) + (math-single-units-in-expr-p, math-find-compatible-unit-rec) + (math-extract-units): Handle the `neg' operator. (Bug#19582) + [Backport] + 2015-01-21 Daniel Koning (tiny change) * subr.el (posnp): Correct docstring of `posnp'. diff --git a/lisp/calc/calc-units.el b/lisp/calc/calc-units.el index 26a644a..0595086 100644 --- a/lisp/calc/calc-units.el +++ b/lisp/calc/calc-units.el @@ -904,10 +904,12 @@ If COMP or STD is non-nil, put that in the units table instead." (and (consp expr) (if (eq (car expr) 'var) (math-check-unit-name expr) - (and (or sub-exprs - (memq (car expr) '(* / ^))) - (or (math-units-in-expr-p (nth 1 expr) sub-exprs) - (math-units-in-expr-p (nth 2 expr) sub-exprs)))))) + (if (eq (car expr) 'neg) + (math-units-in-expr-p (nth 1 expr) sub-exprs) + (and (or sub-exprs + (memq (car expr) '(* / ^))) + (or (math-units-in-expr-p (nth 1 expr) sub-exprs) + (math-units-in-expr-p (nth 2 expr) sub-exprs))))))) (defun math-only-units-in-expr-p (expr) (and (consp expr) @@ -924,6 +926,8 @@ If COMP or STD is non-nil, put that in the units table instead." (cond ((math-scalarp expr) nil) ((eq (car expr) 'var) (math-check-unit-name expr)) + ((eq (car expr) 'neg) + (math-single-units-in-expr-p (nth 1 expr))) ((eq (car expr) '*) (let ((u1 (math-single-units-in-expr-p (nth 1 expr))) (u2 (math-single-units-in-expr-p (nth 2 expr)))) @@ -1079,6 +1083,8 @@ If COMP or STD is non-nil, put that in the units table instead." ((eq (car-safe expr) '/) (or (math-find-compatible-unit-rec (nth 1 expr) pow) (math-find-compatible-unit-rec (nth 2 expr) (- pow)))) + ((eq (car-safe expr) 'neg) + (math-find-compatible-unit-rec (nth 1 expr) pow)) ((and (eq (car-safe expr) '^) (integerp (nth 2 expr))) (math-find-compatible-unit-rec (nth 1 expr) (* pow (nth 2 expr)))) @@ -1497,6 +1503,8 @@ If COMP or STD is non-nil, put that in the units table instead." ((memq (car-safe expr) '(* /)) (cons (car expr) (mapcar 'math-extract-units (cdr expr)))) + ((eq (car-safe expr) 'neg) + (math-extract-units (nth 1 expr))) ((eq (car-safe expr) '^) (list '^ (math-extract-units (nth 1 expr)) (nth 2 expr))) ((math-check-unit-name expr) expr) diff --git a/test/ChangeLog b/test/ChangeLog index c31367c..3f2d761 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,11 @@ +2015-01-22 Wolfgang Jenkner + + * automated/calc-tests.el (calc-tests-equal, calc-tests-simple): + New functions. + (test-calc-remove-units, test-calc-extract-units) + (test-calc-convert-units): New tests. + [Backport] + 2014-12-30 Michael Albinus * automated/tramp-tests.el (tramp--test-smb-or-windows-nt-p): diff --git a/test/automated/calc-tests.el b/test/automated/calc-tests.el index 331e01e..d5252ea 100644 --- a/test/automated/calc-tests.el +++ b/test/automated/calc-tests.el @@ -27,6 +27,40 @@ (require 'cl-lib) (require 'ert) (require 'calc) +(require 'calc-ext) +(require 'calc-units) + +;; XXX The order in which calc libraries (in particular calc-units) +;; are loaded influences whether a calc integer in an expression +;; involving units is represented as a lisp integer or a calc float, +;; see bug#19582. Until this will be fixed the following function can +;; be used to compare such calc expressions. +(defun calc-tests-equal (a b) + "Like `equal' but allow for different representations of numbers. +For example: (calc-tests-equal 10 '(float 1 1)) => t. +A and B should be calc expressions." + (cond ((math-numberp a) + (and (math-numberp b) + (math-equal a b))) + ((atom a) + (equal a b)) + ((consp b) + ;; Can't be dotted or circular. + (and (= (length a) (length b)) + (equal (car a) (car b)) + (cl-every #'calc-tests-equal (cdr a) (cdr b)))))) + +(defun calc-tests-simple (fun string &rest args) + "Push STRING on the calc stack, then call FUN and return the new top. +The result is a calc (i.e., lisp) expression, not its string representation. +Also pop the entire stack afterwards. +An existing calc stack is reused, otherwise a new one is created." + (calc-eval string 'push) + (prog1 + (ignore-errors + (apply fun args) + (calc-top-n 1)) + (calc-pop 0))) (ert-deftest test-math-bignum () ;; bug#17556 @@ -34,6 +68,24 @@ (should (math-negp n)) (should (cl-notany #'cl-minusp (cdr n))))) +(ert-deftest test-calc-remove-units () + (should (calc-tests-equal (calc-tests-simple #'calc-remove-units "-1 m") -1))) + +(ert-deftest test-calc-extract-units () + (should (calc-tests-equal (calc-tests-simple #'calc-extract-units "-1 m") + '(var m var-m))) + (should (calc-tests-equal (calc-tests-simple #'calc-extract-units "-1 m*cm") + '(* (float 1 -2) (^ (var m var-m) 2))))) + +(ert-deftest test-calc-convert-units () + ;; Used to ask for `(The expression is unitless when simplified) Old Units: '. + (should (calc-tests-equal (calc-tests-simple #'calc-convert-units "-1 m" nil "cm") + '(* -100 (var cm var-cm)))) + ;; Gave wrong result. + (should (calc-tests-equal (calc-tests-simple #'calc-convert-units "-1 m" + (math-read-expr "1m") "cm") + '(* -100 (var cm var-cm))))) + (provide 'calc-tests) ;;; calc-tests.el ends here commit 03346fb0747ddb39786bd9e43fe7f422cd48b9fe Author: Dmitry Gutov Date: Thu Jan 22 04:24:31 2015 +0200 xref: Replace defgeneric and defmethod with cl- counterparts * lisp/progmodes/xref.el (xref-location-marker, xref-location-group): Use `cl-defgeneric' and `cl-defmethod' instead of the EIEIO counterparts. * lisp/progmodes/etags.el (xref-location-marker): Same. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 9b50a66..39ae463 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,11 @@ 2015-01-22 Dmitry Gutov + * progmodes/xref.el (xref-location-marker, xref-location-group): + Use `cl-defgeneric' and `cl-defmethod' instead of the EIEIO + counterparts. + + * progmodes/etags.el (xref-location-marker): Same. + * progmodes/xref.el (xref--current): Rename from `xref--selected'. (xref--inhibit-mark-current): Rename from `xref--inhibit-mark-selected'. Update the usages. diff --git a/lisp/progmodes/etags.el b/lisp/progmodes/etags.el index dc3380d..626855e 100644 --- a/lisp/progmodes/etags.el +++ b/lisp/progmodes/etags.el @@ -2122,7 +2122,7 @@ for \\[find-tag] (which see)." (make-instance 'xref-etags-location :tag-info tag-info :file (expand-file-name file))) -(defmethod xref-location-marker ((l xref-etags-location)) +(cl-defmethod xref-location-marker ((l xref-etags-location)) (with-slots (tag-info file) l (let ((buffer (find-file-noselect file))) (with-current-buffer buffer diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el index b82cd8e..55405b6 100644 --- a/lisp/progmodes/xref.el +++ b/lisp/progmodes/xref.el @@ -66,10 +66,10 @@ ;; If a backend decides to subclass xref-location it can provide ;; methods for some of the following functions: -(defgeneric xref-location-marker (location) +(cl-defgeneric xref-location-marker (location) "Return the marker for LOCATION.") -(defgeneric xref-location-group (location) +(cl-defgeneric xref-location-group (location) "Return a string used to group a set of locations. This is typically the filename.") @@ -88,7 +88,7 @@ Line numbers start from 1 and columns from 0.") "Create and return a new xref-file-location." (make-instance 'xref-file-location :file file :line line :column column)) -(defmethod xref-location-marker ((l xref-file-location)) +(cl-defmethod xref-location-marker ((l xref-file-location)) (with-slots (file line column) l (with-current-buffer (or (get-file-buffer file) @@ -102,7 +102,7 @@ Line numbers start from 1 and columns from 0.") (move-to-column column) (point-marker)))))) -(defmethod xref-location-group ((l xref-file-location)) +(cl-defmethod xref-location-group ((l xref-file-location)) (oref l :file)) (defclass xref-buffer-location (xref-location) @@ -113,12 +113,12 @@ Line numbers start from 1 and columns from 0.") "Create and return a new xref-buffer-location." (make-instance 'xref-buffer-location :buffer buffer :position position)) -(defmethod xref-location-marker ((l xref-buffer-location)) +(cl-defmethod xref-location-marker ((l xref-buffer-location)) (with-slots (buffer position) l (let ((m (make-marker))) (move-marker m position buffer)))) -(defmethod xref-location-group ((l xref-buffer-location)) +(cl-defmethod xref-location-group ((l xref-buffer-location)) (with-slots (buffer) l (or (buffer-file-name buffer) (format "(buffer %s)" (buffer-name buffer))))) @@ -134,10 +134,10 @@ actual location is not known.") "Create and return a new xref-bogus-location." (make-instance 'xref-bogus-location :message message)) -(defmethod xref-location-marker ((l xref-bogus-location)) +(cl-defmethod xref-location-marker ((l xref-bogus-location)) (user-error "%s" (oref l :message))) -(defmethod xref-location-group ((_ xref-bogus-location)) "(No location)") +(cl-defmethod xref-location-group ((_ xref-bogus-location)) "(No location)") ;; This should be in elisp-mode.el, but it's preloaded, and we can't ;; preload defclass and defmethod (at least, not yet). @@ -151,7 +151,7 @@ actual location is not known.") (defun xref-make-elisp-location (symbol type file) (make-instance 'xref-elisp-location :symbol symbol :type type :file file)) -(defmethod xref-location-marker ((l xref-elisp-location)) +(cl-defmethod xref-location-marker ((l xref-elisp-location)) (with-slots (symbol type file) l (let ((buffer-point (pcase type commit a17a5daebf50f9abd00341f606eae8aff73e9737 Author: Dmitry Gutov Date: Thu Jan 22 04:09:23 2015 +0200 xref: Input history and minor tweaks * lisp/progmodes/xref.el (xref--current): Rename from `xref--selected'. (xref--inhibit-mark-current): Rename from `xref--inhibit-mark-selected'. Update the usages. (xref-quit): Reword the docstring. Kill buffers after quitting windows instead of before. (xref--insert-xrefs): Tweak help-echo. (xref--read-identifier-history, xref--read-pattern-history): New variables. (xref--read-identifier, xref-find-apropos): Use them. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7aa66bf..9b50a66 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,15 @@ +2015-01-22 Dmitry Gutov + + * progmodes/xref.el (xref--current): Rename from `xref--selected'. + (xref--inhibit-mark-current): Rename from + `xref--inhibit-mark-selected'. Update the usages. + (xref-quit): Reword the docstring. Kill buffers after quitting + windows instead of before. + (xref--insert-xrefs): Tweak help-echo. + (xref--read-identifier-history, xref--read-pattern-history): + New variables. + (xref--read-identifier, xref-find-apropos): Use them. + 2015-01-21 Ulrich Müller * play/gamegrid.el (gamegrid-add-score-with-update-game-score): diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el index ee81250..b82cd8e 100644 --- a/lisp/progmodes/xref.el +++ b/lisp/progmodes/xref.el @@ -342,15 +342,15 @@ WINDOW controls how the buffer is displayed: (defvar-local xref--temporary-buffers nil "List of buffers created by xref code.") -(defvar-local xref--selected nil - "t if the current buffer has ever been selected. +(defvar-local xref--current nil + "Non-nil if this buffer was once current, except while displaying xrefs. Used for temporary buffers.") -(defvar xref--inhibit-mark-selected nil) +(defvar xref--inhibit-mark-current nil) (defun xref--mark-selected () - (unless xref--inhibit-mark-selected - (setq xref--selected t)) + (unless xref--inhibit-mark-current + (setq xref--current t)) (remove-hook 'buffer-list-update-hook #'xref--mark-selected t)) (defun xref--save-to-history (buf win) @@ -375,7 +375,7 @@ Used for temporary buffers.") (condition-case err (let ((xref-buf (current-buffer)) (bl (buffer-list)) - (xref--inhibit-mark-selected t)) + (xref--inhibit-mark-current t)) (xref--goto-location location) (let ((buf (current-buffer))) (unless (memq buf bl) @@ -438,29 +438,28 @@ Used for temporary buffers.") (setq buffer-read-only t)) (defun xref-quit (&optional kill) - "Perform cleanup, then quit the current window. -The cleanup consists of burying all temporarily displayed -buffers, and if KILL is non-nil, of killing all buffers that were -created in the process of showing xrefs. - -Exceptions are made for buffers switched to by the user in the -meantime, and other window configuration changes. These are -preserved." + "Bury temporarily displayed buffers, then quit the current window. + +If KILL is non-nil, kill all buffers that were created in the +process of showing xrefs, and also kill the current buffer. + +The buffers that the user has otherwise interacted with in the +meantime are preserved." (interactive "P") (let ((window (selected-window)) (history xref--display-history)) (setq xref--display-history nil) + (pcase-dolist (`(,buf . ,win) history) + (when (and (window-live-p win) + (eq buf (window-buffer win))) + (quit-window nil win))) (when kill - (let ((xref--inhibit-mark-selected t) + (let ((xref--inhibit-mark-current t) kill-buffer-query-functions) (dolist (buf xref--temporary-buffers) - (unless (buffer-local-value 'xref--selected buf) + (unless (buffer-local-value 'xref--current buf) (kill-buffer buf))) (setq xref--temporary-buffers nil))) - (pcase-dolist (`(,buf . ,win) history) - (when (and (window-live-p win) - (eq buf (window-buffer win))) - (quit-window nil win))) (quit-window kill window))) (defconst xref-buffer-name "*xref*" @@ -496,7 +495,9 @@ GROUP is a string for decoration purposes and XREF is an 'face 'font-lock-keyword-face 'mouse-face 'highlight 'keymap xref--button-map - 'help-echo "mouse-2: display in another window, RET or mouse-1: navigate") + 'help-echo + (concat "mouse-2: display in another window, " + "RET or mouse-1: follow reference")) description)) (when (or more1 more2) (insert "\n"))))) @@ -535,6 +536,10 @@ Return an alist of the form ((FILENAME . (XREF ...)) ...)." (defvar xref-show-xrefs-function 'xref--show-xref-buffer "Function to display a list of xrefs.") +(defvar xref--read-identifier-history nil) + +(defvar xref--read-pattern-history nil) + (defun xref--show-xrefs (input kind arg window) (let* ((bl (buffer-list)) (xrefs (funcall xref-find-function kind arg)) @@ -557,7 +562,8 @@ Return an alist of the form ((FILENAME . (XREF ...)) ...)." (cond ((or current-prefix-arg (not id)) (completing-read prompt (funcall xref-identifier-completion-table-function) - nil t id)) + nil t id + 'xref--read-identifier-history)) (t id)))) @@ -593,12 +599,15 @@ With prefix argument, prompt for the identifier." (interactive (list (xref--read-identifier "Find references of: "))) (xref--show-xrefs identifier 'references identifier nil)) +(declare-function apropos-parse-pattern "apropos" (pattern)) + ;;;###autoload (defun xref-find-apropos (pattern) "Find all meaningful symbols that match PATTERN. The argument has the same meaning as in `apropos'." (interactive (list (read-from-minibuffer - "Search for pattern (word list or regexp): "))) + "Search for pattern (word list or regexp): " + nil nil nil 'xref--read-pattern-history))) (require 'apropos) (xref--show-xrefs pattern 'apropos (apropos-parse-pattern commit d6ada5ae0fad7a5c85eb28b102bc460e9fe0aceb Merge: 487d6cd 20f6648 Author: Joakim Verona Date: Thu Jan 22 00:05:27 2015 +0100 Merge branch 'master' into xwidget commit 487d6cdc4dfc6500885dfa57a7c2fac8a1760fec Author: Joakim Verona Date: Wed Jan 21 23:17:19 2015 +0100 webkit scrolling bugfix diff --git a/lisp/xwidget.el b/lisp/xwidget.el index 5fdb740..a407a2f 100644 --- a/lisp/xwidget.el +++ b/lisp/xwidget.el @@ -153,27 +153,27 @@ defaults to the string looking like a url around the cursor position." "Scroll webkit up,either native or like image mode." (interactive) (if (eq xwidget-webkit-scroll-behaviour 'native) - (xwidget-set-adjustment (xwidget-webkit-last-session) 'vertical t 50) ) - (image-scroll-up)) + (xwidget-set-adjustment (xwidget-webkit-last-session) 'vertical t 50) + (image-scroll-up))) (defun xwidget-webkit-scroll-down () "Scroll webkit down,either native or like image mode." (interactive) (if (eq xwidget-webkit-scroll-behaviour 'native) - (xwidget-set-adjustment (xwidget-webkit-last-session) 'vertical t -50) ) - (image-scroll-down)) + (xwidget-set-adjustment (xwidget-webkit-last-session) 'vertical t -50) + (image-scroll-down))) (defun xwidget-webkit-scroll-forward () (interactive) (if (eq xwidget-webkit-scroll-behaviour 'native) - (xwidget-set-adjustment (xwidget-webkit-last-session) 'horizontal t 50) ) - (xwidget-webkit-scroll-forward)) + (xwidget-set-adjustment (xwidget-webkit-last-session) 'horizontal t 50) + (xwidget-webkit-scroll-forward))) (defun xwidget-webkit-scroll-backward () (interactive) (if (eq xwidget-webkit-scroll-behaviour 'native) - (xwidget-set-adjustment (xwidget-webkit-last-session) 'horizontal t -50) ) - (xwidget-webkit-scroll-backward)) + (xwidget-set-adjustment (xwidget-webkit-last-session) 'horizontal t -50) + (xwidget-webkit-scroll-backward))) ;;the xwidget event needs to go into a higher level handler commit 069f101ecf15ee9c589d1e172743412eac38318f Author: Joakim Verona Date: Wed Jan 21 23:11:01 2015 +0100 Cleanup diff --git a/src/xwidget.c b/src/xwidget.c index 780bc21..747e803 100644 --- a/src/xwidget.c +++ b/src/xwidget.c @@ -1055,9 +1055,6 @@ x_draw_xwidget_glyph_string (struct glyph_string *s) //the widget can also move inside the clipping area, which happens later moved = (xv->x + xv->clip_left != x+clip_left) || ((xv->y + xv->clip_top)!= (y+clip_top)); - if(moved) printf ("lxwidget moved: id:%d (%d,%d)->(%d,%d) y+clip_top:%d\n", xww, xv->x, xv->y, x, y, y + clip_top); - else - printf ("lxwidget DIDNT move: id:%d (%d,%d)->(%d,%d) y+clip_top:%d\n", xww, xv->x, xv->y, x, y, y + clip_top); xv->x = x; xv->y = y; if (moved) //has it moved? @@ -1079,8 +1076,6 @@ x_draw_xwidget_glyph_string (struct glyph_string *s) || (xv->clip_left != clip_left)){ gtk_widget_set_size_request (xv->widgetwindow, clip_right + clip_left, clip_bottom + clip_top); gtk_fixed_move(GTK_FIXED(xv->widgetwindow), xv->widget, -clip_left, -clip_top); - printf("reclip %d %d -> %d %d clip_top:%d clip_left:%d\n",xv->clip_right, xv->clip_bottom, clip_right, clip_bottom, clip_top , clip_left); - xv->clip_right = clip_right; xv->clip_bottom = clip_bottom; xv->clip_top = clip_top;xv->clip_left = clip_left; } @@ -1744,23 +1739,6 @@ lookup_xwidget (Lisp_Object spec) value = xwidget_spec_value (spec, QCxwidget, &found1); xw = XXWIDGET(value); - /* value = xwidget_spec_value (spec, QCtype, &found); */ - /* xw->type = SYMBOLP (value) ? value : Qbutton; //default to button */ - /* value = xwidget_spec_value (spec, QCtitle, &found2); */ - /* xw->title = STRINGP (value) ? (char *) SDATA (value) : "?"; //funky cast FIXME TODO */ - - /* value = xwidget_spec_value (spec, QCheight, NULL); */ - /* xw->height = INTEGERP (value) ? XFASTINT (value) : 50; */ - /* value = xwidget_spec_value (spec, QCwidth, NULL); */ - /* xw->width = INTEGERP (value) ? XFASTINT (value) : 50; */ - - /* value = xwidget_spec_value (spec, QCplist, NULL); */ - /* xw->plist = value; */ - /* coordinates are not known here */ - printf ("lookup_xwidget xwidget_id:%d type:%d found:%d %d %d title:'%s' (%d,%d)\n", xw, - xw->type, found, found1, found2, xw->title, xw->height, xw->width); - - //assert_valid_xwidget_id (id, "lookup_xwidget"); return xw; } commit 9e2161615517d16337ab8f56cb836659e0b2dcce Author: Joakim Verona Date: Wed Jan 21 23:02:22 2015 +0100 removed spurious diff diff --git a/lisp/emacs-lisp/eieio-core.el b/lisp/emacs-lisp/eieio-core.el index 0297acc..b89ccfd 100644 --- a/lisp/emacs-lisp/eieio-core.el +++ b/lisp/emacs-lisp/eieio-core.el @@ -1258,7 +1258,7 @@ method invocation orders of the involved classes." (eieio--class-precedence-list tag)))) -;;;### (autoloads nil "eieio-compat" "eieio-compat.el" "51667b1cd372f45acdae14f838cedcc6") +;;;### (autoloads nil "eieio-compat" "eieio-compat.el" "b177169dfbad7fb2e9d500b9c40002fa") ;;; Generated autoloads from eieio-compat.el (autoload 'eieio--defalias "eieio-compat" "\ @@ -1325,27 +1325,6 @@ Summary: \(fn METHOD KIND ARGCLASS CODE)" nil nil) -(autoload 'eieio-defmethod "eieio-compat" "\ -Obsolete work part of an old version of the `defmethod' macro. - -\(fn METHOD ARGS)" nil nil) - -(make-obsolete 'eieio-defmethod 'cl-defmethod '"24.1") - -(autoload 'eieio-defgeneric "eieio-compat" "\ -Obsolete work part of an old version of the `defgeneric' macro. - -\(fn METHOD DOC-STRING)" nil nil) - -(make-obsolete 'eieio-defgeneric 'cl-defgeneric '"24.1") - -(autoload 'eieio-defclass "eieio-compat" "\ - - -\(fn CNAME SUPERCLASSES SLOTS OPTIONS)" nil nil) - -(make-obsolete 'eieio-defclass 'eieio-defclass-internal '"25.1") - ;;;*** commit 0609e9003dbbc67425ff0659c94f2b5fd994b4d2 Author: Joakim Verona Date: Wed Jan 21 22:43:14 2015 +0100 cleanup diff --git a/src/dispnew.c b/src/dispnew.c index 3c0f110..8c48ae0 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -4140,7 +4140,6 @@ scrolling_window (struct window *w, bool header_line_p) #ifdef HAVE_XWIDGETS //currently this is needed to detect xwidget movement reliably. or probably not. - //printf("scrolling_window\n"); return 0; #endif diff --git a/src/emacsgtkfixed.c b/src/emacsgtkfixed.c index f5d42b8..d52a139 100644 --- a/src/emacsgtkfixed.c +++ b/src/emacsgtkfixed.c @@ -70,25 +70,6 @@ static void emacs_fixed_get_preferred_height (GtkWidget *widget, G_DEFINE_TYPE (EmacsFixed, emacs_fixed, GTK_TYPE_FIXED) #ifdef HAVE_XWIDGETS -/* void aloc_callback(GtkWidget* child, GtkWidget* fixed){ */ -/* GtkAllocation child_allocation; */ -/* GtkRequisition child_requisition; */ - -/* //TODO */ -/* // if child is an xwidget, find its clipping area and modify allocation */ - -/* struct xwidget_view* xv = (struct xwidget_view*) g_object_get_data (G_OBJECT (child), XG_XWIDGET_VIEW); */ -/* printf("aloc callback %d %s\n", xv, gtk_widget_get_name(child)); */ -/* if(xv){ */ -/* printf(" allocation modification for xw\n"); */ -/* gtk_widget_get_allocation(child, &child_allocation); */ -/* child_allocation.width = xv->clip_right; */ -/* child_allocation.height = xv->clip_bottom - xv->clip_top; */ -/* gtk_widget_size_allocate (child, &child_allocation); */ -/* //TODO find a way to remove this feeble workaround */ -/* } */ - -/* } */ struct GtkFixedPrivateL { @@ -99,7 +80,6 @@ static void emacs_fixed_gtk_widget_size_allocate (GtkWidget *widget, GtkAllocation *allocation){ //for xwidgets - //TODO 1st call base class method EmacsFixedClass *klass; GtkWidgetClass *parent_class; @@ -110,7 +90,6 @@ static void emacs_fixed_gtk_widget_size_allocate (GtkWidget *widget, GList *children; struct xwidget_view* xv; - // printf(" emacs_fixed_gtk_widget_size_allocate\n"); klass = EMACS_FIXED_GET_CLASS (widget); parent_class = g_type_class_peek_parent (klass); parent_class->size_allocate (widget, allocation); @@ -118,17 +97,6 @@ static void emacs_fixed_gtk_widget_size_allocate (GtkWidget *widget, priv = G_TYPE_INSTANCE_GET_PRIVATE (widget, GTK_TYPE_FIXED, struct GtkFixedPrivateL); - //fixed->priv = G_TYPE_INSTANCE_GET_PRIVATE (fixed, GTK_TYPE_FIXED, GtkFixedPrivate); - //then modify allocations - /* gtk_container_foreach (widget, */ - /* aloc_callback, */ - /* widget); */ - - //begin copy paste extravaganza!!! - - //GtkFixed *fixed = GTK_FIXED (widget); - //GtkFixedPrivate *priv = fixed->priv; - gtk_widget_set_allocation (widget, allocation); @@ -167,15 +135,9 @@ static void emacs_fixed_gtk_widget_size_allocate (GtkWidget *widget, xv = (struct xwidget_view*) g_object_get_data (G_OBJECT (child->widget), XG_XWIDGET_VIEW); - //printf("aloc callback %d %s\n", xv, gtk_widget_get_name(child)); if(xv){ - //gtk_widget_get_allocation(child, &child_allocation); child_allocation.width = xv->clip_right; child_allocation.height = xv->clip_bottom - xv->clip_top; - //gtk_widget_size_allocate (child, &child_allocation); - //TODO find a way to remove this feeble workaround - // printf(" allocation internal modification for xw %d %d,%d\n",xv, child_allocation.width, child_allocation.height); - } gtk_widget_size_allocate (child->widget, &child_allocation); diff --git a/src/keyboard.c b/src/keyboard.c index dbae12b..e9ecd8c 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -6081,7 +6081,6 @@ make_lispy_event (struct input_event *event) #ifdef HAVE_XWIDGETS case XWIDGET_EVENT: { - printf("cool, an xwidget event arrived in make_lispy_event!\n"); return Fcons (Qxwidget_event,event->arg); } #endif /* HAVE_XWIDGETS */ diff --git a/src/xdisp.c b/src/xdisp.c index f679541..5e57e05 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -5219,7 +5219,6 @@ handle_single_display_spec (struct it *it, Lisp_Object spec, Lisp_Object object, #ifdef HAVE_XWIDGETS else if (valid_xwidget_spec_p(value)) { - //printf("handle_single_display_spec: im an xwidget!!\n"); it->what = IT_XWIDGET; it->method = GET_FROM_XWIDGET; it->position = start_pos; @@ -8050,9 +8049,6 @@ static int next_element_from_xwidget (struct it *it) { it->what = IT_XWIDGET; - //assert_valid_xwidget_id(it->xwidget_id,"next_element_from_xwidget"); - //this is shaky because why do we set "what" if we dont set the other parts?? - //printf("xwidget_id %d: in next_element_from_xwidget: FIXME \n", it->xwidget_id); return 1; } #endif @@ -18676,7 +18672,6 @@ dump_glyph (struct glyph_row *row, struct glyph *glyph, int area) glyph->left_box_line_p, glyph->right_box_line_p); - // printf("dump xwidget glyph\n"); } #endif } @@ -24099,7 +24094,7 @@ calc_pixel_width_or_height (double *res, struct it *it, Lisp_Object prop, #ifdef HAVE_XWIDGETS if (FRAME_WINDOW_P (it->f) && valid_xwidget_spec_p (prop)) { - printf("calc_pixel_width_or_height: return dummy size FIXME\n"); + //TODO dont return dummy size return OK_PIXELS (width_p ? 100 : 100); } #endif @@ -24612,13 +24607,11 @@ static void fill_xwidget_glyph_string (struct glyph_string *s) { eassert (s->first_glyph->type == XWIDGET_GLYPH); - printf("fill_xwidget_glyph_string: width:%d \n",s->first_glyph->pixel_width); s->face = FACE_FROM_ID (s->f, s->first_glyph->face_id); s->font = s->face->font; s->width = s->first_glyph->pixel_width; s->ybase += s->first_glyph->voffset; s->xwidget = s->first_glyph->u.xwidget; - //assert_valid_xwidget_id ( s->xwidget, "fill_xwidget_glyph_string"); } #endif /* Fill glyph string S from a sequence of stretch glyphs. @@ -24960,7 +24953,6 @@ compute_overhangs_and_x (struct glyph_string *s, int x, int backward_p) #define BUILD_XWIDGET_GLYPH_STRING(START, END, HEAD, TAIL, HL, X, LAST_X) \ do \ { \ - printf("BUILD_XWIDGET_GLYPH_STRING\n"); \ s = (struct glyph_string *) alloca (sizeof *s); \ INIT_GLYPH_STRING (s, NULL, w, row, area, START, HL); \ fill_xwidget_glyph_string (s); \ @@ -25798,7 +25790,6 @@ produce_xwidget_glyph (struct it *it) struct xwidget* xw; struct face *face; int glyph_ascent, crop; - printf("produce_xwidget_glyph:\n"); eassert (it->what == IT_XWIDGET); face = FACE_FROM_ID (it->f, it->face_id); @@ -27615,7 +27606,6 @@ get_window_cursor_type (struct window *w, struct glyph *glyph, int *width, #ifdef HAVE_XWIDGETS if (glyph != NULL && glyph->type == XWIDGET_GLYPH){ - //printf("attempt xwidget cursor avoidance in get_window_cursor_type\n"); return NO_CURSOR; } #endif diff --git a/src/xterm.c b/src/xterm.c index 40043dc..abceefb 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -8028,7 +8028,6 @@ x_draw_bar_cursor (struct window *w, struct glyph_row *row, int width, enum text #ifdef HAVE_XWIDGETS if (cursor_glyph->type == XWIDGET_GLYPH){ - printf("tried avoiding xwidget cursor\n"); return; //experimental avoidance of cursor on xwidget } #endif diff --git a/src/xwidget.c b/src/xwidget.c index 708053c..780bc21 100644 --- a/src/xwidget.c +++ b/src/xwidget.c @@ -581,45 +581,14 @@ xwidget_osr_event_forward (GtkWidget *widget, /* copy events that arrive at the outer widget to the offscreen widget */ struct xwidget* xw = (struct xwidget*) g_object_get_data (G_OBJECT (widget), XG_XWIDGET); GdkEvent* eventcopy = gdk_event_copy(event); - //GdkEvent* eventcopy = gdk_event_new(GDK_BUTTON_PRESS); - - - //((GdkEventAny*)eventcopy)->window = gtk_widget_get_window(xw->widget_osr); - //eventcopy->any.window = gtk_widget_get_window(GTK_WIDGET (xw->widgetwindow_osr)); - //((GdkEventAny*)eventcopy)->window = gtk_widget_get_window(xwgir_create_debug); - - - eventcopy->any.window = gtk_widget_get_window(xw->widget_osr);// works - //eventcopy->any.window = gtk_widget_get_window(xw->widgetwindow_osr);//nothing happens - //eventcopy->any.window = gtk_widget_get_window(gtk_scrolled_window_get_vscrollbar (GTK_SCROLLED_WINDOW(xw->widgetscrolledwindow_osr))); - //eventcopy->any.window = gtk_widget_get_window(xw->widgetscrolledwindow_osr); //nothing happens - //eventcopy->any.send_event = TRUE; - //gtk_scrolled_window_scroll_child (xw->widgetscrolledwindow_osr, GTK_SCROLL_STEP_DOWN, FALSE); // private - - - - //eventcopy->any.window = gtk_button_get_event_window(GTK_BUTTON(xw->widget_osr));//gtk_widget_get_window(xwgir_create_debug); - //eventcopy->button.x=200; eventcopy->button.y=200; - //event->button.button = GDK_BUTTON_PRIMARY; //debug - - //eventcopy->any.window = xw->widgetwindow_osr;//gtk_widget_get_window(xwgir_create_debug); - /* eventcopy->any.send_event = TRUE; */ - /* eventcopy->button.time = GDK_CURRENT_TIME; */ - /* eventcopy->button.device = event->button.device; */ - - printf("xwidget_osr_event_forward redirect event to window:%d\n", ((GdkEventAny*)eventcopy)->window); - printf("A type:%d x:%f y:%f \n", event->type, event->button.x, event->button.y); - printf("B type:%d x:%f y:%f \n", eventcopy->type, eventcopy->button.x, eventcopy->button.y); + /* printf("xwidget_osr_event_forward redirect event to window:%d\n", ((GdkEventAny*)eventcopy)->window); */ + /* printf("A type:%d x:%f y:%f \n", event->type, event->button.x, event->button.y); */ + /* printf("B type:%d x:%f y:%f \n", eventcopy->type, eventcopy->button.x, eventcopy->button.y); */ //gtk_button_get_event_window(xwgir_create_debug); gtk_main_do_event(eventcopy); //TODO this will leak events. they should be deallocated later, perhaps in xwgir_event_callback - //printf("gtk_widget_event:%d\n",gtk_widget_event(xw->widget_osr, eventcopy)); - //gdk_event_put(eventcopy); - //gdk_event_queue_append(eventcopy); - //gdk_event_free(eventcopy); return TRUE; //dont propagate this event furter - //return FALSE; //dont propagate this event furter } GIRepository *girepository ; commit c8f2ca7d672acfab85825eba24bbc96024659ede Author: Joakim Verona Date: Wed Jan 21 22:42:54 2015 +0100 upstream diff --git a/lisp/emacs-lisp/eieio-core.el b/lisp/emacs-lisp/eieio-core.el index b89ccfd..0297acc 100644 --- a/lisp/emacs-lisp/eieio-core.el +++ b/lisp/emacs-lisp/eieio-core.el @@ -1258,7 +1258,7 @@ method invocation orders of the involved classes." (eieio--class-precedence-list tag)))) -;;;### (autoloads nil "eieio-compat" "eieio-compat.el" "b177169dfbad7fb2e9d500b9c40002fa") +;;;### (autoloads nil "eieio-compat" "eieio-compat.el" "51667b1cd372f45acdae14f838cedcc6") ;;; Generated autoloads from eieio-compat.el (autoload 'eieio--defalias "eieio-compat" "\ @@ -1325,6 +1325,27 @@ Summary: \(fn METHOD KIND ARGCLASS CODE)" nil nil) +(autoload 'eieio-defmethod "eieio-compat" "\ +Obsolete work part of an old version of the `defmethod' macro. + +\(fn METHOD ARGS)" nil nil) + +(make-obsolete 'eieio-defmethod 'cl-defmethod '"24.1") + +(autoload 'eieio-defgeneric "eieio-compat" "\ +Obsolete work part of an old version of the `defgeneric' macro. + +\(fn METHOD DOC-STRING)" nil nil) + +(make-obsolete 'eieio-defgeneric 'cl-defgeneric '"24.1") + +(autoload 'eieio-defclass "eieio-compat" "\ + + +\(fn CNAME SUPERCLASSES SLOTS OPTIONS)" nil nil) + +(make-obsolete 'eieio-defclass 'eieio-defclass-internal '"25.1") + ;;;*** commit 20f66485526b69eb26f2e70bd835a5e1333559d5 Author: Ulrich Müller Date: Fri Jan 16 09:25:25 2015 +0100 Allow update-game-score to run sgid instead of suid. * configure.ac (gamegroup): New AC_SUBST. (--with-gameuser): Allow to specify a group instead of a user. In the default case, check at configure time if a 'games' user exists. * lib-src/update-game-score.c: Allow the program to run sgid instead of suid, in order to match common practice for most games. (main): Check if we are running sgid. Pass appropriate file permission bits to 'write_scores'. (write_scores): New 'mode' argument, instead of hardcoding 0644. (get_prefix): Update error message. * lib-src/Makefile.in (gamegroup): New variable, set by configure. ($(DESTDIR)${archlibdir}): Handle both suid or sgid when installing the 'update-game-score' program. * lisp/play/gamegrid.el (gamegrid-add-score-with-update-game-score): Allow the 'update-game-score' helper program to run suid or sgid. diff --git a/ChangeLog b/ChangeLog index 309b04f..b02203d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2015-01-21 Ulrich Müller + + * configure.ac (gamegroup): New AC_SUBST. + (--with-gameuser): Allow to specify a group instead of a user. + In the default case, check at configure time if a 'games' user + exists. + 2015-01-16 Paul Eggert Give up on -Wsuggest-attribute=const diff --git a/configure.ac b/configure.ac index 9db4bde..47b36fe 100644 --- a/configure.ac +++ b/configure.ac @@ -392,10 +392,25 @@ OPTION_DEFAULT_ON([compress-install], make GZIP_PROG= install]) AC_ARG_WITH(gameuser,dnl -[AS_HELP_STRING([--with-gameuser=USER],[user for shared game score files])]) -test "X${with_gameuser}" != X && test "${with_gameuser}" != yes \ - && gameuser="${with_gameuser}" -test "X$gameuser" = X && gameuser=games +[AS_HELP_STRING([--with-gameuser=USER_OR_GROUP], + [user for shared game score files. + An argument prefixed by ':' specifies a group instead.])]) +gameuser= +gamegroup= +case ${with_gameuser} in + no) ;; + "" | yes) + AC_MSG_CHECKING([whether a 'games' user exists]) + if id -u games >/dev/null 2>&1; then + AC_MSG_RESULT([yes]) + gameuser=games + else + AC_MSG_RESULT([no]) + fi + ;; + :*) gamegroup=`echo "${with_gameuser}" | sed -e "s/://"` ;; + *) gameuser=${with_gameuser} ;; +esac AC_ARG_WITH([gnustep-conf],dnl [AS_HELP_STRING([--with-gnustep-conf=FILENAME], @@ -4684,6 +4699,7 @@ AC_SUBST(etcdocdir) AC_SUBST(bitmapdir) AC_SUBST(gamedir) AC_SUBST(gameuser) +AC_SUBST(gamegroup) ## FIXME? Nothing uses @LD_SWITCH_X_SITE@. ## src/Makefile.in did add LD_SWITCH_X_SITE (as a cpp define) to the ## end of LIBX_BASE, but nothing ever set it. diff --git a/etc/NEWS b/etc/NEWS index 548b54d..120d8b9 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -46,6 +46,13 @@ and silent rules are now quieter. To get the old behavior where build with 'make V=1'. --- +** The configure option '--with-gameuser' now allows to specify a +group instead of a user if its argument is prefixed by ':' (a colon). +This will cause the game score files in ${localstatedir}/games/emacs +to be owned by that group, and the helper program for updating them to +be installed setgid. + +--- ** The `grep-changelog' script (and its manual page) are no longer included. It has no particular connection to Emacs and has not changed in years, so if you want to use it, you can always take a copy from an older Emacs. diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index 37f037e..b67038f 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,3 +1,15 @@ +2015-01-21 Ulrich Müller + + * update-game-score.c: Allow the program to run sgid instead + of suid, in order to match common practice for most games. + (main): Check if we are running sgid. Pass appropriate file + permission bits to 'write_scores'. + (write_scores): New 'mode' argument, instead of hardcoding 0644. + (get_prefix): Update error message. + * Makefile.in (gamegroup): New variable, set by configure. + ($(DESTDIR)${archlibdir}): Handle both suid or sgid when + installing the 'update-game-score' program. + 2015-01-16 Eli Zaretskii * Makefile.in (AM_V_RC, am__v_RC_, am__v_RC_0, am__v_RC_1): New diff --git a/lib-src/Makefile.in b/lib-src/Makefile.in index 01592bd..2997f1b 100644 --- a/lib-src/Makefile.in +++ b/lib-src/Makefile.in @@ -122,6 +122,7 @@ archlibdir=@archlibdir@ gamedir=@gamedir@ gameuser=@gameuser@ +gamegroup=@gamegroup@ # ==================== Utility Programs for the Build ================= @@ -263,10 +264,17 @@ $(DESTDIR)${archlibdir}: all umask 022; ${MKDIR_P} "$(DESTDIR)${gamedir}"; \ touch "$(DESTDIR)${gamedir}/snake-scores"; \ touch "$(DESTDIR)${gamedir}/tetris-scores" - -if chown ${gameuser} "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}" && chmod u+s "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}"; then \ - chown ${gameuser} "$(DESTDIR)${gamedir}"; \ - chmod u=rwx,g=rwx,o=rx "$(DESTDIR)${gamedir}"; \ - fi +ifneq ($(gameuser),) + chown ${gameuser} "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}" + chmod u+s,go-r "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}" + chown ${gameuser} "$(DESTDIR)${gamedir}" + chmod u=rwx,g=rx,o=rx "$(DESTDIR)${gamedir}" +else ifneq ($(gamegroup),) + chgrp ${gamegroup} "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}" + chmod g+s,o-r "$(DESTDIR)${archlibdir}/update-game-score${EXEEXT}" + chgrp ${gamegroup} "$(DESTDIR)${gamedir}" + chmod u=rwx,g=rwx,o=rx "$(DESTDIR)${gamedir}" +endif exp_archlibdir=`cd "$(DESTDIR)${archlibdir}" && /bin/pwd`; \ if [ "$$exp_archlibdir" != "`cd ${srcdir} && /bin/pwd`" ]; then \ for file in ${SCRIPTS}; do \ diff --git a/lib-src/update-game-score.c b/lib-src/update-game-score.c index d3354af..4f15483 100644 --- a/lib-src/update-game-score.c +++ b/lib-src/update-game-score.c @@ -21,8 +21,8 @@ along with GNU Emacs. If not, see . */ /* This program allows a game to securely and atomically update a - score file. It should be installed setuid, owned by an appropriate - user like `games'. + score file. It should be installed either setuid or setgid, owned + by an appropriate user or group like `games'. Alternatively, it can be compiled without HAVE_SHARED_GAME_DIR defined, and in that case it will store scores in the user's home @@ -88,7 +88,7 @@ static int push_score (struct score_entry **scores, ptrdiff_t *count, ptrdiff_t *size, struct score_entry const *newscore); static void sort_scores (struct score_entry *scores, ptrdiff_t count, bool reverse); -static int write_scores (const char *filename, +static int write_scores (const char *filename, mode_t mode, const struct score_entry *scores, ptrdiff_t count); static _Noreturn void @@ -122,18 +122,19 @@ get_user_id (void) } static const char * -get_prefix (bool running_suid, const char *user_prefix) +get_prefix (bool privileged, const char *user_prefix) { - if (!running_suid && user_prefix == NULL) - lose ("Not using a shared game directory, and no prefix given."); - if (running_suid) + if (privileged) { #ifdef HAVE_SHARED_GAME_DIR return HAVE_SHARED_GAME_DIR; #else - lose ("This program was compiled without HAVE_SHARED_GAME_DIR,\n and should not be suid."); + lose ("This program was compiled without HAVE_SHARED_GAME_DIR,\n" + "and should not run with elevated privileges."); #endif } + if (user_prefix == NULL) + lose ("Not using a shared game directory, and no prefix given."); return user_prefix; } @@ -173,7 +174,7 @@ int main (int argc, char **argv) { int c; - bool running_suid; + bool running_suid, running_sgid; void *lockstate; char *scorefile; char *end, *nl, *user, *data; @@ -214,8 +215,11 @@ main (int argc, char **argv) usage (EXIT_FAILURE); running_suid = (getuid () != geteuid ()); + running_sgid = (getgid () != getegid ()); + if (running_suid && running_sgid) + lose ("This program can run either suid or sgid, but not both."); - prefix = get_prefix (running_suid, user_prefix); + prefix = get_prefix (running_suid || running_sgid, user_prefix); scorefile = malloc (strlen (prefix) + strlen (argv[optind]) + 2); if (!scorefile) @@ -270,7 +274,8 @@ main (int argc, char **argv) scores += scorecount - max_scores; scorecount = max_scores; } - if (write_scores (scorefile, scores, scorecount) < 0) + if (write_scores (scorefile, running_sgid ? 0664 : 0644, + scores, scorecount) < 0) { unlock_file (scorefile, lockstate); lose_syserr ("Failed to write scores file"); @@ -421,8 +426,8 @@ sort_scores (struct score_entry *scores, ptrdiff_t count, bool reverse) } static int -write_scores (const char *filename, const struct score_entry *scores, - ptrdiff_t count) +write_scores (const char *filename, mode_t mode, + const struct score_entry *scores, ptrdiff_t count) { int fd; FILE *f; @@ -435,7 +440,7 @@ write_scores (const char *filename, const struct score_entry *scores, if (fd < 0) return -1; #ifndef DOS_NT - if (fchmod (fd, 0644) != 0) + if (fchmod (fd, mode) != 0) return -1; #endif f = fdopen (fd, "w"); diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d13bacf..7aa66bf 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2015-01-21 Ulrich Müller + + * play/gamegrid.el (gamegrid-add-score-with-update-game-score): + Allow the 'update-game-score' helper program to run suid or sgid. + 2015-01-21 Stefan Monnier * emacs-lisp/eieio.el: Use cl-defmethod. diff --git a/lisp/play/gamegrid.el b/lisp/play/gamegrid.el index 1e265a6..b4c3c59 100644 --- a/lisp/play/gamegrid.el +++ b/lisp/play/gamegrid.el @@ -486,13 +486,13 @@ FILE is created there." (not (zerop (logand (file-modes (expand-file-name "update-game-score" exec-directory)) - #o4000))))) + #o6000))))) (cond ((file-name-absolute-p file) (gamegrid-add-score-insecure file score)) ((and gamegrid-shared-game-dir (file-exists-p (expand-file-name file shared-game-score-directory))) - ;; Use the setuid "update-game-score" program to update a - ;; system-wide score file. + ;; Use the setuid (or setgid) "update-game-score" program + ;; to update a system-wide score file. (gamegrid-add-score-with-update-game-score-1 file (expand-file-name file shared-game-score-directory) score)) ;; Else: Add the score to a score file in the user's home commit 59e7fe6d0c6988687b53c279941c9ebb3f887eed Author: Stefan Monnier Date: Wed Jan 21 14:39:06 2015 -0500 * lisp/emacs-lisp/eieio*.el: Fix up warnings and improve compatibility Fixes: debbugs:19645 * lisp/emacs-lisp/cl-generic.el (cl-defgeneric): Add support for `declare'. (cl--generic-setf-rewrite): Setup the setf expander right away. (cl-defmethod): Make sure the setf expander is setup before we expand the body. (cl-defmethod): Silence byte-compiler warnings. (cl-generic-define-method): Shuffle code to change return value. (cl--generic-method-info): New function, extracted from cl--generic-describe. (cl--generic-describe): Use it. * lisp/emacs-lisp/eieio-speedbar.el: * lisp/emacs-lisp/eieio-datadebug.el: * lisp/emacs-lisp/eieio-custom.el: * lisp/emacs-lisp/eieio-base.el: Use cl-defmethod. * lisp/emacs-lisp/eieio-compat.el (eieio--defmethod): Avoid no-next-method errors when there's a `before' but no `primary'. (next-method-p): Return nil rather than signal an error. (eieio-defgeneric): Remove bogus (fboundp 'method). * lisp/emacs-lisp/eieio-opt.el: Adapt to cl-generic. (eieio--specializers-apply-to-class-p): New function. (eieio-all-generic-functions): Use it. (eieio-method-documentation): Use it as well as cl--generic-method-info. Change format of return value. (eieio-help-class): Adapt accordingly. * lisp/emacs-lisp/eieio.el: Use cl-defmethod. (defclass): Generate cl-defmethod calls; use setf methods for :accessor. (eieio-object-name-string): Declare as obsolete. * test/automated/cl-generic-tests.el (setf cl--generic-2): Make sure the setf can be used already in the body of the method. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 65c0684..d13bacf 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,36 @@ +2015-01-21 Stefan Monnier + + * emacs-lisp/eieio.el: Use cl-defmethod. + (defclass): Generate cl-defmethod calls; use setf methods for :accessor. + (eieio-object-name-string): Declare as obsolete. + + * emacs-lisp/eieio-opt.el: Adapt to cl-generic. + (eieio--specializers-apply-to-class-p): New function. + (eieio-all-generic-functions): Use it. + (eieio-method-documentation): Use it as well as cl--generic-method-info. + Change format of return value. + (eieio-help-class): Adapt accordingly. + + * emacs-lisp/eieio-compat.el (eieio--defmethod): Avoid no-next-method + errors when there's a `before' but no `primary' (bug#19645). + (next-method-p): Return nil rather than signal an error. + (eieio-defgeneric): Remove bogus (fboundp 'method). + + * emacs-lisp/eieio-speedbar.el: + * emacs-lisp/eieio-datadebug.el: + * emacs-lisp/eieio-custom.el: + * emacs-lisp/eieio-base.el: Use cl-defmethod. + + * emacs-lisp/cl-generic.el (cl-defgeneric): Add support for `declare'. + (cl--generic-setf-rewrite): Setup the setf expander right away. + (cl-defmethod): Make sure the setf expander is setup before we expand + the body. + (cl-defmethod): Silence byte-compiler warnings. + (cl-generic-define-method): Shuffle code to change return value. + (cl--generic-method-info): New function, extracted from + cl--generic-describe. + (cl--generic-describe): Use it. + 2015-01-21 Dmitry Gutov * progmodes/xref.el (xref--xref-buffer-mode-map): Define before diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el index 3bbddfc..8dee9a3 100644 --- a/lisp/emacs-lisp/cl-generic.el +++ b/lisp/emacs-lisp/cl-generic.el @@ -98,19 +98,20 @@ They should be sorted from most specific to least specific.") (:constructor cl--generic-make (name &optional dispatches method-table)) (:predicate nil)) - (name nil :read-only t) ;Pointer back to the symbol. + (name nil :type symbol :read-only t) ;Pointer back to the symbol. ;; `dispatches' holds a list of (ARGNUM . TAGCODES) where ARGNUM is the index ;; of the corresponding argument and TAGCODES is a list of (PRIORITY . EXP) ;; where the EXPs are expressions (to be `or'd together) to compute the tag ;; on which to dispatch and PRIORITY is the priority of each expression to ;; decide in which order to sort them. ;; The most important dispatch is last in the list (and the least is first). - dispatches + (dispatches nil :type (list-of (cons natnum (list-of tagcode)))) ;; `method-table' is a list of ;; ((SPECIALIZERS . QUALIFIER) USES-CNM . FUNCTION), where ;; USES-CNM is a boolean indicating if FUNCTION calls `cl-call-next-method' ;; (and hence expects an extra argument holding the next-method). - method-table) + (method-table nil :type (list-of (cons (cons (list-of type) keyword) + (cons boolean function))))) (defmacro cl--generic (name) `(get ,name 'cl--generic)) @@ -134,15 +135,16 @@ They should be sorted from most specific to least specific.") generic)) (defun cl--generic-setf-rewrite (name) - (let ((setter (intern (format "cl-generic-setter--%s" name)))) - (cons setter - `(eval-and-compile - (unless (eq ',setter (get ',name 'cl-generic-setter)) - ;; (when (get ',name 'gv-expander) - ;; (error "gv-expander conflicts with (setf %S)" ',name)) - (setf (get ',name 'cl-generic-setter) ',setter) - (gv-define-setter ,name (val &rest args) - (cons ',setter (cons val args)))))))) + (let* ((setter (intern (format "cl-generic-setter--%s" name))) + (exp `(unless (eq ',setter (get ',name 'cl-generic-setter)) + ;; (when (get ',name 'gv-expander) + ;; (error "gv-expander conflicts with (setf %S)" ',name)) + (setf (get ',name 'cl-generic-setter) ',setter) + (gv-define-setter ,name (val &rest args) + (cons ',setter (cons val args)))))) + ;; Make sure `setf' can be used right away, e.g. in the body of the method. + (eval exp t) + (cons setter exp))) ;;;###autoload (defmacro cl-defgeneric (name args &rest options-and-methods) @@ -151,8 +153,9 @@ DOC-STRING is the base documentation for this class. A generic function has no body, as its purpose is to decide which method body is appropriate to use. Specific methods are defined with `cl-defmethod'. With this implementation the ARGS are currently ignored. -OPTIONS-AND-METHODS is currently only used to specify the docstring, -via (:documentation DOCSTRING)." +OPTIONS-AND-METHODS currently understands: +- (:documentation DOCSTRING) +- (declare DECLARATIONS)" (declare (indent 2) (doc-string 3)) (let* ((docprop (assq :documentation options-and-methods)) (doc (cond ((stringp (car-safe options-and-methods)) @@ -161,13 +164,26 @@ via (:documentation DOCSTRING)." (prog1 (cadr docprop) (setq options-and-methods - (delq docprop options-and-methods))))))) + (delq docprop options-and-methods)))))) + (declarations (assq 'declare options-and-methods))) + (when declarations + (setq options-and-methods + (delq declarations options-and-methods))) `(progn ,(when (eq 'setf (car-safe name)) (pcase-let ((`(,setter . ,code) (cl--generic-setf-rewrite (cadr name)))) (setq name setter) code)) + ,@(mapcar (lambda (declaration) + (let ((f (cdr (assq (car declaration) + defun-declarations-alist)))) + (cond + (f (apply (car f) name args (cdr declaration))) + (t (message "Warning: Unknown defun property `%S' in %S" + (car declaration) name) + nil)))) + (cdr declarations)) (defalias ',name (cl-generic-define ',name ',args ',options-and-methods) ,(help-add-fundoc-usage doc args))))) @@ -292,18 +308,19 @@ which case this method will be invoked when the argument is `eql' to VAL. list ; arguments [ &optional stringp ] ; documentation string def-body))) ; part to be debugged - (let ((qualifiers nil)) + (let ((qualifiers nil) + (setfizer (if (eq 'setf (car-safe name)) + ;; Call it before we call cl--generic-lambda. + (cl--generic-setf-rewrite (cadr name))))) (while (keywordp args) (push args qualifiers) (setq args (pop body))) (pcase-let* ((with-cnm (not (memq (car qualifiers) '(:before :after)))) (`(,uses-cnm . ,fun) (cl--generic-lambda args body with-cnm))) `(progn - ,(when (eq 'setf (car-safe name)) - (pcase-let ((`(,setter . ,code) (cl--generic-setf-rewrite - (cadr name)))) - (setq name setter) - code)) + ,(when setfizer + (setq name (car setfizer)) + (cdr setfizer)) ,(and (get name 'byte-obsolete-info) (or (not (fboundp 'byte-compile-warning-enabled-p)) (byte-compile-warning-enabled-p 'obsolete)) @@ -311,6 +328,11 @@ which case this method will be invoked when the argument is `eql' to VAL. (macroexp--warn-and-return (macroexp--obsolete-warning name obsolete "generic function") nil))) + ;; You could argue that `defmethod' modifies rather than defines the + ;; function, so warnings like "not known to be defined" are fair game. + ;; But in practice, it's common to use `cl-defmethod' + ;; without a previous `cl-defgeneric'. + (declare-function ,name "") (cl-generic-define-method ',name ',qualifiers ',args ,uses-cnm ,fun))))) @@ -344,14 +366,14 @@ which case this method will be invoked when the argument is `eql' to VAL. (if me (setcdr me (cons uses-cnm function)) (setf (cl--generic-method-table generic) (cons `(,key ,uses-cnm . ,function) mt))) - ;; For aliases, cl--generic-name gives us the actual name. + (cl-pushnew `(cl-defmethod . (,(cl--generic-name generic) . ,specializers)) + current-load-list :test #'equal) (let ((gfun (cl--generic-make-function generic)) ;; Prevent `defalias' from recording this as the definition site of ;; the generic function. current-load-list) - (defalias (cl--generic-name generic) gfun)) - (cl-pushnew `(cl-defmethod . (,(cl--generic-name generic) . ,specializers)) - current-load-list :test #'equal))) + ;; For aliases, cl--generic-name gives us the actual name. + (defalias (cl--generic-name generic) gfun)))) (defmacro cl--generic-with-memoization (place &rest code) (declare (indent 1) (debug t)) @@ -448,8 +470,12 @@ for all those different tags in the method-cache.") ;; We don't currently have "method objects" like CLOS ;; does so we can't really do it the CLOS way. ;; The closest would be to pass the lambda corresponding - ;; to the method, but the caller wouldn't be able to do - ;; much with it anyway. So we pass nil for now. + ;; to the method, or maybe the ((SPECIALIZERS + ;; . QUALIFIER) USE-CNM . FUNCTION) entry from the method + ;; table, but the caller wouldn't be able to do much with + ;; it anyway. So we pass nil for now. + ;; FIXME: signal `no-primary-method' if there's + ;; no primary. (apply #'cl-no-next-method generic-name nil args))) ;; We use `cdr' to drop the `uses-cnm' annotations. (before @@ -566,6 +592,24 @@ Can only be used from within the lexical body of a primary or around method." (add-to-list 'find-function-regexp-alist `(cl-defmethod . ,#'cl--generic-search-method))) +(defun cl--generic-method-info (method) + (pcase-let ((`((,specializers . ,qualifier) ,uses-cnm . ,function) method)) + (let* ((args (help-function-arglist function 'names)) + (docstring (documentation function)) + (doconly (if docstring + (let ((split (help-split-fundoc docstring nil))) + (if split (cdr split) docstring)))) + (combined-args ())) + (if uses-cnm (setq args (cdr args))) + (dolist (specializer specializers) + (let ((arg (if (eq '&rest (car args)) + (intern (format "arg%d" (length combined-args))) + (pop args)))) + (push (if (eq specializer t) arg (list arg specializer)) + combined-args))) + (setq combined-args (append (nreverse combined-args) args)) + (list qualifier combined-args doconly)))) + (add-hook 'help-fns-describe-function-functions #'cl--generic-describe) (defun cl--generic-describe (function) (let ((generic (if (symbolp function) (cl--generic function)))) @@ -575,25 +619,11 @@ Can only be used from within the lexical body of a primary or around method." (insert "\n\nThis is a generic function.\n\n") (insert (propertize "Implementations:\n\n" 'face 'bold)) ;; Loop over fanciful generics - (pcase-dolist (`((,specializers . ,qualifier) ,uses-cnm . ,method) - (cl--generic-method-table generic)) - (let* ((args (help-function-arglist method 'names)) - (docstring (documentation method)) - (doconly (if docstring - (let ((split (help-split-fundoc docstring nil))) - (if split (cdr split) docstring)))) - (combined-args ())) - (if uses-cnm (setq args (cdr args))) - (dolist (specializer specializers) - (let ((arg (if (eq '&rest (car args)) - (intern (format "arg%d" (length combined-args))) - (pop args)))) - (push (if (eq specializer t) arg (list arg specializer)) - combined-args))) - (setq combined-args (append (nreverse combined-args) args)) + (dolist (method (cl--generic-method-table generic)) + (let* ((info (cl--generic-method-info method))) ;; FIXME: Add hyperlinks for the types as well. - (insert (format "%S %S" qualifier combined-args)) - (let* ((met-name (cons function specializers)) + (insert (format "%S %S" (nth 0 info) (nth 1 info))) + (let* ((met-name (cons function (caar method))) (file (find-lisp-object-file-name met-name 'cl-defmethod))) (when file (insert " in `") @@ -601,7 +631,7 @@ Can only be used from within the lexical body of a primary or around method." 'help-function-def met-name file 'cl-defmethod) (insert "'.\n"))) - (insert "\n" (or doconly "Undocumented") "\n\n"))))))) + (insert "\n" (or (nth 2 info) "Undocumented") "\n\n"))))))) ;;; Support for (eql ) specializers. diff --git a/lisp/emacs-lisp/eieio-base.el b/lisp/emacs-lisp/eieio-base.el index 9931fbd..feb0671 100644 --- a/lisp/emacs-lisp/eieio-base.el +++ b/lisp/emacs-lisp/eieio-base.el @@ -52,7 +52,7 @@ a parent instance. When a slot in the child is referenced, and has not been set, use values from the parent." :abstract t) -(defmethod slot-unbound ((object eieio-instance-inheritor) +(cl-defmethod slot-unbound ((object eieio-instance-inheritor) _class slot-name _fn) "If a slot OBJECT in this CLASS is unbound, try to inherit, or throw a signal. SLOT-NAME is the offending slot. FN is the function signaling the error." @@ -61,16 +61,16 @@ SLOT-NAME is the offending slot. FN is the function signaling the error." ;; method if the parent instance's slot is unbound. (eieio-oref (oref object parent-instance) slot-name) ;; Throw the regular signal. - (call-next-method))) + (cl-call-next-method))) -(defmethod clone ((obj eieio-instance-inheritor) &rest _params) +(cl-defmethod clone ((obj eieio-instance-inheritor) &rest _params) "Clone OBJ, initializing `:parent' to OBJ. All slots are unbound, except those initialized with PARAMS." - (let ((nobj (call-next-method))) + (let ((nobj (cl-call-next-method))) (oset nobj parent-instance obj) nobj)) -(defmethod eieio-instance-inheritor-slot-boundp ((object eieio-instance-inheritor) +(cl-defmethod eieio-instance-inheritor-slot-boundp ((object eieio-instance-inheritor) slot) "Return non-nil if the instance inheritor OBJECT's SLOT is bound. See `slot-boundp' for details on binding slots. @@ -103,7 +103,7 @@ Inheritors from this class must overload `tracking-symbol' which is a variable symbol used to store a list of all instances." :abstract t) -(defmethod initialize-instance :AFTER ((this eieio-instance-tracker) +(cl-defmethod initialize-instance :after ((this eieio-instance-tracker) &rest _slots) "Make sure THIS is in our master list of this class. Optional argument SLOTS are the initialization arguments." @@ -112,7 +112,7 @@ Optional argument SLOTS are the initialization arguments." (if (not (memq this (symbol-value sym))) (set sym (append (symbol-value sym) (list this)))))) -(defmethod delete-instance ((this eieio-instance-tracker)) +(cl-defmethod delete-instance ((this eieio-instance-tracker)) "Remove THIS from the master list of this class." (set (oref this tracking-symbol) (delq this (symbol-value (oref this tracking-symbol))))) @@ -140,7 +140,7 @@ Multiple calls to `make-instance' will return this object.")) A singleton is a class which will only ever have one instance." :abstract t) -(defmethod eieio-constructor :STATIC ((class eieio-singleton) &rest _slots) +(cl-defmethod eieio-constructor ((class (subclass eieio-singleton)) &rest _slots) "Constructor for singleton CLASS. NAME and SLOTS initialize the new object. This constructor guarantees that no matter how many you request, @@ -149,7 +149,7 @@ only one object ever exists." ;; with class allocated slots or default values. (let ((old (oref-default class singleton))) (if (eq old eieio-unbound) - (oset-default class singleton (call-next-method)) + (oset-default class singleton (cl-call-next-method)) old))) @@ -198,7 +198,7 @@ object. For this reason, only slots which do not have an `:initarg' specified will not be saved." :abstract t) -(defmethod eieio-persistent-save-interactive ((this eieio-persistent) prompt +(cl-defmethod eieio-persistent-save-interactive ((this eieio-persistent) prompt &optional name) "Prepare to save THIS. Use in an `interactive' statement. Query user for file name with PROMPT if THIS does not yet specify @@ -417,17 +417,17 @@ If no class is referenced there, then return nil." ;; No match, not a class. nil))) -(defmethod object-write ((this eieio-persistent) &optional comment) +(cl-defmethod object-write ((this eieio-persistent) &optional comment) "Write persistent object THIS out to the current stream. Optional argument COMMENT is a header line comment." - (call-next-method this (or comment (oref this file-header-line)))) + (cl-call-next-method this (or comment (oref this file-header-line)))) -(defmethod eieio-persistent-path-relative ((this eieio-persistent) file) +(cl-defmethod eieio-persistent-path-relative ((this eieio-persistent) file) "For object THIS, make absolute file name FILE relative." (file-relative-name (expand-file-name file) (file-name-directory (oref this file)))) -(defmethod eieio-persistent-save ((this eieio-persistent) &optional file) +(cl-defmethod eieio-persistent-save ((this eieio-persistent) &optional file) "Save persistent object THIS to disk. Optional argument FILE overrides the file name specified in the object instance." @@ -474,21 +474,21 @@ instance." "Object with a name." :abstract t) -(defmethod eieio-object-name-string ((obj eieio-named)) +(cl-defmethod eieio-object-name-string ((obj eieio-named)) "Return a string which is OBJ's name." (or (slot-value obj 'object-name) (symbol-name (eieio-object-class obj)))) -(defmethod eieio-object-set-name-string ((obj eieio-named) name) +(cl-defmethod eieio-object-set-name-string ((obj eieio-named) name) "Set the string which is OBJ's NAME." (eieio--check-type stringp name) (eieio-oset obj 'object-name name)) -(defmethod clone ((obj eieio-named) &rest params) +(cl-defmethod clone ((obj eieio-named) &rest params) "Clone OBJ, initializing `:parent' to OBJ. All slots are unbound, except those initialized with PARAMS." (let* ((newname (and (stringp (car params)) (pop params))) - (nobj (apply #'call-next-method obj params)) + (nobj (apply #'cl-call-next-method obj params)) (nm (slot-value obj 'object-name))) (eieio-oset obj 'object-name (or newname diff --git a/lisp/emacs-lisp/eieio-compat.el b/lisp/emacs-lisp/eieio-compat.el index 34c06c0..c2dabf7 100644 --- a/lisp/emacs-lisp/eieio-compat.el +++ b/lisp/emacs-lisp/eieio-compat.el @@ -190,13 +190,27 @@ Summary: (if split (cdr split) docstring)))) (new-docstring (help-add-fundoc-usage doc-only (cons 'cl-cnm args)))) - ;; FIXME: ¡Add the new-docstring to those closures! + ;; FIXME: ¡Add new-docstring to those closures! (lambda (cnm &rest args) (cl-letf (((symbol-function 'call-next-method) cnm) ((symbol-function 'next-method-p) (lambda () (cl--generic-isnot-nnm-p cnm)))) (apply code args)))) - code)))) + code)) + ;; The old EIEIO code did not signal an error when there are methods + ;; applicable but only of the before/after kind. So if we add a :before + ;; or :after, make sure there's a matching dummy primary. + (when (and (memq kind '(:before :after)) + (not (assoc (cons (mapcar (lambda (arg) + (if (consp arg) (nth 1 arg) t)) + specializers) + :primary) + (cl--generic-method-table (cl--generic method))))) + (cl-generic-define-method method () specializers t + (lambda (cnm &rest args) + (if (cl--generic-isnot-nnm-p cnm) + (apply cnm args))))) + method)) ;; Compatibility with code which tries to catch `no-method-definition' errors. (push 'no-method-definition (get 'cl-no-applicable-method 'error-conditions)) @@ -212,7 +226,12 @@ Summary: (apply #'cl-no-applicable-method method object args)) (define-obsolete-function-alias 'call-next-method 'cl-call-next-method "25.1") -(define-obsolete-function-alias 'next-method-p 'cl-next-method-p "25.1") +(defun next-method-p () + (declare (obsolete cl-next-method-p "25.1")) + ;; EIEIO's `next-method-p' just returned nil when called in an + ;; invalid context. + (message "next-method-p called outside of a primary or around method") + nil) ;;;###autoload (defun eieio-defmethod (method args) @@ -225,11 +244,9 @@ Summary: (defun eieio-defgeneric (method doc-string) "Obsolete work part of an old version of the `defgeneric' macro." (declare (obsolete cl-defgeneric "24.1")) - ;; Don't do this over and over. - (unless (fboundp 'method) - (eval `(defgeneric ,method (x) ,@(if doc-string `(,doc-string)))) - ;; Return the method - 'method)) + (eval `(defgeneric ,method (x) ,@(if doc-string `(,doc-string)))) + ;; Return the method + 'method) ;;;###autoload (defun eieio-defclass (cname superclasses slots options) diff --git a/lisp/emacs-lisp/eieio-custom.el b/lisp/emacs-lisp/eieio-custom.el index 8ab74ae..0e0b31e 100644 --- a/lisp/emacs-lisp/eieio-custom.el +++ b/lisp/emacs-lisp/eieio-custom.el @@ -322,7 +322,7 @@ Optional argument IGNORE is an extraneous parameter." ;; This is the same object we had before. obj)) -(defmethod eieio-done-customizing ((_obj eieio-default-superclass)) +(cl-defmethod eieio-done-customizing ((_obj eieio-default-superclass)) "When applying change to a widget, call this method. This method is called by the default widget-edit commands. User made commands should also call this method when applying changes. @@ -345,7 +345,7 @@ Optional argument GROUP is the sub-group of slots to display." "Major mode for customizing EIEIO objects. \\{eieio-custom-mode-map}") -(defmethod eieio-customize-object ((obj eieio-default-superclass) +(cl-defmethod eieio-customize-object ((obj eieio-default-superclass) &optional group) "Customize OBJ in a specialized custom buffer. To override call the `eieio-custom-widget-insert' to just insert the @@ -386,7 +386,7 @@ These groups are specified with the `:group' slot flag." (make-local-variable 'eieio-cog) (setq eieio-cog g))) -(defmethod eieio-custom-object-apply-reset ((_obj eieio-default-superclass)) +(cl-defmethod eieio-custom-object-apply-reset ((_obj eieio-default-superclass)) "Insert an Apply and Reset button into the object editor. Argument OBJ is the object being customized." (widget-create 'push-button @@ -417,7 +417,7 @@ Argument OBJ is the object being customized." (bury-buffer)) "Cancel")) -(defmethod eieio-custom-widget-insert ((obj eieio-default-superclass) +(cl-defmethod eieio-custom-widget-insert ((obj eieio-default-superclass) &rest flags) "Insert the widget used for editing object OBJ in the current buffer. Arguments FLAGS are widget compatible flags. @@ -446,7 +446,7 @@ Must return the created widget." ;; These functions provide the ability to create dynamic menus to ;; customize specific sections of an object. They do not hook directly ;; into a filter, but can be used to create easymenu vectors. -(defmethod eieio-customize-object-group ((obj eieio-default-superclass)) +(cl-defmethod eieio-customize-object-group ((obj eieio-default-superclass)) "Create a list of vectors for customizing sections of OBJ." (mapcar (lambda (group) (vector (concat "Group " (symbol-name group)) @@ -457,7 +457,7 @@ Must return the created widget." (defvar eieio-read-custom-group-history nil "History for the custom group reader.") -(defmethod eieio-read-customization-group ((obj eieio-default-superclass)) +(cl-defmethod eieio-read-customization-group ((obj eieio-default-superclass)) "Do a completing read on the name of a customization group in OBJ. Return the symbol for the group, or nil" (let ((g (eieio--class-option (eieio--object-class-object obj) diff --git a/lisp/emacs-lisp/eieio-datadebug.el b/lisp/emacs-lisp/eieio-datadebug.el index ab8d41e..6534bd0 100644 --- a/lisp/emacs-lisp/eieio-datadebug.el +++ b/lisp/emacs-lisp/eieio-datadebug.el @@ -79,7 +79,7 @@ PREBUTTONTEXT is some text between PREFIX and the object button." ;; ;; Each object should have an opportunity to show stuff about itself. -(defmethod data-debug/eieio-insert-slots ((obj eieio-default-superclass) +(cl-defmethod data-debug/eieio-insert-slots ((obj eieio-default-superclass) prefix) "Insert the slots of OBJ into the current DDEBUG buffer." (let ((inhibit-read-only t)) @@ -124,7 +124,7 @@ PREBUTTONTEXT is some text between PREFIX and the object button." ;; ;; A generic function to run DDEBUG on an object and popup a new buffer. ;; -(defmethod data-debug-show ((obj eieio-default-superclass)) +(cl-defmethod data-debug-show ((obj eieio-default-superclass)) "Run ddebug against any EIEIO object OBJ." (data-debug-new-buffer (format "*%s DDEBUG*" (eieio-object-name obj))) (data-debug-insert-object-slots obj "]")) diff --git a/lisp/emacs-lisp/eieio-opt.el b/lisp/emacs-lisp/eieio-opt.el index 13ad120..a131b02 100644 --- a/lisp/emacs-lisp/eieio-opt.el +++ b/lisp/emacs-lisp/eieio-opt.el @@ -122,29 +122,18 @@ If CLASS is actually an object, then also display current values of that object. ;; Describe all the slots in this class. (eieio-help-class-slots class) ;; Describe all the methods specific to this class. - (let ((methods (eieio-all-generic-functions class)) - (type [":STATIC" ":BEFORE" ":PRIMARY" ":AFTER"]) - counter doc) - (when methods + (let ((generics (eieio-all-generic-functions class))) + (when generics (insert (propertize "Specialized Methods:\n\n" 'face 'bold)) - (while methods - (setq doc (eieio-method-documentation (car methods) class)) - (insert "`") - (help-insert-xref-button (symbol-name (car methods)) - 'help-function (car methods)) - (insert "'") - (if (not doc) - (insert " Undocumented") - (setq counter 0) - (dolist (cur doc) - (when cur - (insert " " (aref type counter) " " - (prin1-to-string (car cur) (current-buffer)) - "\n" - (or (cdr cur) ""))) - (setq counter (1+ counter)))) - (insert "\n\n") - (setq methods (cdr methods)))))) + (dolist (generic generics) + (insert "`") + (help-insert-xref-button (symbol-name generic) 'help-function generic) + (insert "'") + (pcase-dolist (`(,qualifier ,args ,doc) + (eieio-method-documentation generic class)) + (insert (format " %S %S\n" qualifier args) + (or doc ""))) + (insert "\n\n"))))) (defun eieio-help-class-slots (class) "Print help description for the slots in CLASS. @@ -311,6 +300,20 @@ are not abstract." (eieio-help-class ctr)) )))) +(defun eieio--specializers-apply-to-class-p (specializers class) + "Return non-nil if a method with SPECIALIZERS applies to CLASS." + (let ((applies nil)) + (dolist (specializer specializers) + (if (eq 'subclass (car-safe specializer)) + (setq specializer (nth 1 specializer))) + ;; Don't include the methods that are "too generic", such as those + ;; applying to `eieio-default-superclass'. + (and (not (memq specializer '(t eieio-default-superclass))) + (class-p specializer) + (child-of-class-p class specializer) + (setq applies t))) + applies)) + (defun eieio-all-generic-functions (&optional class) "Return a list of all generic functions. Optional CLASS argument returns only those functions that contain @@ -318,53 +321,31 @@ methods for CLASS." (let ((l nil)) (mapatoms (lambda (symbol) - (let ((tree (get symbol 'eieio-method-hashtable))) - (when tree - ;; A symbol might be interned for that class in one of - ;; these three slots in the method-obarray. - (if (or (not class) - (car (gethash class (aref tree 0))) - (car (gethash class (aref tree 1))) - (car (gethash class (aref tree 2)))) - (setq l (cons symbol l))))))) + (let ((generic (and (fboundp symbol) (cl--generic symbol)))) + (and generic + (catch 'found + (if (null class) (throw 'found t)) + (pcase-dolist (`((,specializers . ,_qualifier) . ,_) + (cl--generic-method-table generic)) + (if (eieio--specializers-apply-to-class-p + specializers class) + (throw 'found t)))) + (push symbol l))))) l)) (defun eieio-method-documentation (generic class) - "Return a list of the specific documentation of GENERIC for CLASS. -If there is not an explicit method for CLASS in GENERIC, or if that -function has no documentation, then return nil." - (let ((tree (get generic 'eieio-method-hashtable))) - (when tree - ;; A symbol might be interned for that class in one of - ;; these three slots in the method-hashtable. - ;; FIXME: Where do these 0/1/2 come from? Isn't 0 for :static, - ;; 1 for before, and 2 for primary (and 3 for after)? - (let ((before (car (gethash class (aref tree 0)))) - (primary (car (gethash class (aref tree 1)))) - (after (car (gethash class (aref tree 2))))) - (if (not (or before primary after)) - nil - (list (if before - (cons (help-function-arglist before) - (documentation before)) - nil) - (if primary - (cons (help-function-arglist primary) - (documentation primary)) - nil) - (if after - (cons (help-function-arglist after) - (documentation after)) - nil))))))) - -(defvar eieio-read-generic nil - "History of the `eieio-read-generic' prompt.") - -(defun eieio-read-generic (prompt &optional historyvar) - "Read a generic function from the minibuffer with PROMPT. -Optional argument HISTORYVAR is the variable to use as history." - (intern (completing-read prompt obarray #'generic-p - t nil (or historyvar 'eieio-read-generic)))) + "Return info for all methods of GENERIC applicable to CLASS. +The value returned is a list of elements of the form +\(QUALIFIER ARGS DOC)." + (let ((generic (cl--generic generic)) + (docs ())) + (when generic + (dolist (method (cl--generic-method-table generic)) + (pcase-let ((`((,specializers . ,_qualifier) . ,_) method)) + (when (eieio--specializers-apply-to-class-p + specializers class) + (push (cl--generic-method-info method) docs))))) + docs)) ;;; METHOD STATS ;; diff --git a/lisp/emacs-lisp/eieio-speedbar.el b/lisp/emacs-lisp/eieio-speedbar.el index b236f0f..a1eabcf 100644 --- a/lisp/emacs-lisp/eieio-speedbar.el +++ b/lisp/emacs-lisp/eieio-speedbar.el @@ -196,19 +196,19 @@ that path." ;; when no other methods are found, allowing multiple inheritance to work ;; reliably with eieio-speedbar. -(defmethod eieio-speedbar-description (object) +(cl-defmethod eieio-speedbar-description (object) "Return a string describing OBJECT." (eieio-object-name-string object)) -(defmethod eieio-speedbar-derive-line-path (_object) +(cl-defmethod eieio-speedbar-derive-line-path (_object) "Return the path which OBJECT has something to do with." nil) -(defmethod eieio-speedbar-object-buttonname (object) +(cl-defmethod eieio-speedbar-object-buttonname (object) "Return a string to use as a speedbar button for OBJECT." (eieio-object-name-string object)) -(defmethod eieio-speedbar-make-tag-line (object depth) +(cl-defmethod eieio-speedbar-make-tag-line (object depth) "Insert a tag line into speedbar at point for OBJECT. By default, all objects appear as simple TAGS with no need to inherit from the special `eieio-speedbar' classes. Child classes should redefine this @@ -221,7 +221,7 @@ Argument DEPTH is the depth at which the tag line is inserted." 'speedbar-tag-face depth)) -(defmethod eieio-speedbar-handle-click (object) +(cl-defmethod eieio-speedbar-handle-click (object) "Handle a click action on OBJECT in speedbar. Any object can be represented as a tag in SPEEDBAR without special attributes. These default objects will be pulled up in a custom @@ -285,7 +285,7 @@ Add one of the child classes to this class to the parent list of a class." ;;; Methods to eieio-speedbar-* which do not need to be overridden ;; -(defmethod eieio-speedbar-make-tag-line ((object eieio-speedbar) +(cl-defmethod eieio-speedbar-make-tag-line ((object eieio-speedbar) depth) "Insert a tag line into speedbar at point for OBJECT. All objects a child of symbol `eieio-speedbar' can be created from @@ -321,12 +321,12 @@ Argument DEPTH is the depth at which the tag line is inserted." (if exp (eieio-speedbar-expand object (1+ depth)))))) -(defmethod eieio-speedbar-child-make-tag-lines ((object eieio-speedbar) _depth) +(cl-defmethod eieio-speedbar-child-make-tag-lines ((object eieio-speedbar) _depth) "Base method for creating tag lines for non-object children." (error "You must implement `eieio-speedbar-child-make-tag-lines' for %s" (eieio-object-name object))) -(defmethod eieio-speedbar-expand ((object eieio-speedbar) depth) +(cl-defmethod eieio-speedbar-expand ((object eieio-speedbar) depth) "Expand OBJECT at indentation DEPTH. Inserts a list of new tag lines representing expanded elements within OBJECT." @@ -362,7 +362,7 @@ TOKEN is the object. INDENT is the current indentation level." (t (error "Ooops... not sure what to do"))) (speedbar-center-buffer-smartly)) -(defmethod eieio-speedbar-child-description ((obj eieio-speedbar)) +(cl-defmethod eieio-speedbar-child-description ((obj eieio-speedbar)) "Return a description for a child of OBJ which is not an object." (error "You must implement `eieio-speedbar-child-description' for %s" (eieio-object-name obj))) @@ -412,7 +412,7 @@ Optional DEPTH is the depth we start at." ;;; Methods to the eieio-speedbar-* classes which need to be overridden. ;; -(defmethod eieio-speedbar-object-children ((_object eieio-speedbar)) +(cl-defmethod eieio-speedbar-object-children ((_object eieio-speedbar)) "Return a list of children to be displayed in speedbar. If the return value is a list of OBJECTs, then those objects are queried for details. If the return list is made of strings, diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el index b64eba1..7672d7f 100644 --- a/lisp/emacs-lisp/eieio.el +++ b/lisp/emacs-lisp/eieio.el @@ -179,36 +179,31 @@ and reference them using the function `class-option'." ;; of the specified name, and also performs a `defsetf' if applicable ;; so that users can `setf' the space returned by this function. (when acces - ;; FIXME: The defmethod below only defines a part of the generic - ;; function (good), but the define-setter below affects the whole - ;; generic function (bad)! - (push `(gv-define-setter ,acces (store object) - ;; Apparently, eieio-oset-default doesn't work like - ;; oref-default and only accept class arguments! - (list ',(if nil ;; (eq alloc :class) - 'eieio-oset-default - 'eieio-oset) - object '',sname store)) + (push `(cl-defmethod (setf ,acces) (value (this ,name)) + (eieio-oset this ',sname value)) accessors) - (push `(defmethod ,acces ,(if (eq alloc :class) :static :primary) - ((this ,name)) + (push `(cl-defmethod ,acces ((this ,name)) ,(format "Retrieve the slot `%S' from an object of class `%S'." sname name) - (if (slot-boundp this ',sname) - ;; Use oref-default for :class allocated slots, since - ;; these also accept the use of a class argument instead - ;; of an object argument. - (,(if (eq alloc :class) 'eieio-oref-default 'eieio-oref) - this ',sname) - ;; Else - Some error? nil? - nil)) - accessors)) + ;; FIXME: Why is this different from the :reader case? + (if (slot-boundp this ',sname) (eieio-oref this ',sname))) + accessors) + (when (and eieio-backward-compatibility (eq alloc :class)) + ;; FIXME: How could I declare this *method* as obsolete. + (push `(cl-defmethod ,acces ((this (subclass ,name))) + ,(format + "Retrieve the class slot `%S' from a class `%S'. +This method is obsolete." + sname name) + (if (slot-boundp this ',sname) + (eieio-oref-default this ',sname))) + accessors))) ;; If a writer is defined, then create a generic method of that ;; name whose purpose is to set the value of the slot. (if writer - (push `(defmethod ,writer ((this ,name) value) + (push `(cl-defmethod ,writer ((this ,name) value) ,(format "Set the slot `%S' of an object of class `%S'." sname name) (setf (slot-value this ',sname) value)) @@ -216,7 +211,7 @@ and reference them using the function `class-option'." ;; If a reader is defined, then create a generic method ;; of that name whose purpose is to access this slot value. (if reader - (push `(defmethod ,reader ((this ,name)) + (push `(cl-defmethod ,reader ((this ,name)) ,(format "Access the slot `%S' from object of class `%S'." sname name) (slot-value this ',sname)) @@ -372,6 +367,10 @@ variable name of the same name as the slot." (define-obsolete-function-alias 'object-class-fast #'eieio--object-class-name "24.4") +(cl-defgeneric eieio-object-name-string (obj) + "Return a string which is OBJ's name." + (declare (obsolete eieio-named "25.1"))) + (defun eieio-object-name (obj &optional extra) "Return a Lisp like symbol string for object OBJ. If EXTRA, include that in the string returned to represent the symbol." @@ -386,15 +385,13 @@ If EXTRA, include that in the string returned to represent the symbol." ;; below "for free". Since this field is very rarely used, we got rid of it ;; and instead we keep it in a weak hash-tables, for those very rare objects ;; that use it. -(defmethod eieio-object-name-string (obj) - "Return a string which is OBJ's name." - (declare (obsolete eieio-named "25.1")) +(cl-defmethod eieio-object-name-string (obj) (or (gethash obj eieio--object-names) (symbol-name (eieio-object-class obj)))) (define-obsolete-function-alias 'object-name-string #'eieio-object-name-string "24.4") -(defmethod eieio-object-set-name-string (obj name) +(cl-defmethod eieio-object-set-name-string (obj name) "Set the string which is OBJ's NAME." (declare (obsolete eieio-named "25.1")) (eieio--check-type stringp name) @@ -648,13 +645,13 @@ This class is not stored in the `parent' slot of a class vector." (defalias 'standard-class 'eieio-default-superclass) -(defgeneric eieio-constructor (class &rest slots) +(cl-defgeneric eieio-constructor (class &rest slots) "Default constructor for CLASS `eieio-default-superclass'.") (define-obsolete-function-alias 'constructor #'eieio-constructor "25.1") -(defmethod eieio-constructor :static - ((class eieio-default-superclass) &rest slots) +(cl-defmethod eieio-constructor + ((class (subclass eieio-default-superclass)) &rest slots) "Default constructor for CLASS `eieio-default-superclass'. SLOTS are the initialization slots used by `shared-initialize'. This static method is called when an object is constructed. @@ -674,11 +671,11 @@ calls `shared-initialize' on that object." ;; Return the created object. new-object)) -(defgeneric shared-initialize (obj slots) +(cl-defgeneric shared-initialize (obj slots) "Set slots of OBJ with SLOTS which is a list of name/value pairs. Called from the constructor routine.") -(defmethod shared-initialize ((obj eieio-default-superclass) slots) +(cl-defmethod shared-initialize ((obj eieio-default-superclass) slots) "Set slots of OBJ with SLOTS which is a list of name/value pairs. Called from the constructor routine." (while slots @@ -689,10 +686,10 @@ Called from the constructor routine." (eieio-oset obj rn (car (cdr slots))))) (setq slots (cdr (cdr slots))))) -(defgeneric initialize-instance (this &optional slots) +(cl-defgeneric initialize-instance (this &optional slots) "Construct the new object THIS based on SLOTS.") -(defmethod initialize-instance ((this eieio-default-superclass) +(cl-defmethod initialize-instance ((this eieio-default-superclass) &optional slots) "Construct the new object THIS based on SLOTS. SLOTS is a tagged list where odd numbered elements are tags, and @@ -724,10 +721,10 @@ dynamically set from SLOTS." ;; Shared initialize will parse our slots for us. (shared-initialize this slots)) -(defgeneric slot-missing (object slot-name operation &optional new-value) +(cl-defgeneric slot-missing (object slot-name operation &optional new-value) "Method invoked when an attempt to access a slot in OBJECT fails.") -(defmethod slot-missing ((object eieio-default-superclass) slot-name +(cl-defmethod slot-missing ((object eieio-default-superclass) slot-name _operation &optional _new-value) "Method invoked when an attempt to access a slot in OBJECT fails. SLOT-NAME is the name of the failed slot, OPERATION is the type of access @@ -739,10 +736,10 @@ directly reference slots in EIEIO objects." (signal 'invalid-slot-name (list (eieio-object-name object) slot-name))) -(defgeneric slot-unbound (object class slot-name fn) +(cl-defgeneric slot-unbound (object class slot-name fn) "Slot unbound is invoked during an attempt to reference an unbound slot.") -(defmethod slot-unbound ((object eieio-default-superclass) +(cl-defmethod slot-unbound ((object eieio-default-superclass) class slot-name fn) "Slot unbound is invoked during an attempt to reference an unbound slot. OBJECT is the instance of the object being reference. CLASS is the @@ -757,14 +754,14 @@ EIEIO can only dispatch on the first argument, so the first two are swapped." (signal 'unbound-slot (list (eieio-class-name class) (eieio-object-name object) slot-name fn))) -(defgeneric clone (obj &rest params) +(cl-defgeneric clone (obj &rest params) "Make a copy of OBJ, and then supply PARAMS. PARAMS is a parameter list of the same form used by `initialize-instance'. When overloading `clone', be sure to call `call-next-method' first and modify the returned object.") -(defmethod clone ((obj eieio-default-superclass) &rest params) +(cl-defmethod clone ((obj eieio-default-superclass) &rest params) "Make a copy of OBJ, and then apply PARAMS." (let ((nobj (copy-sequence obj))) (if (stringp (car params)) @@ -773,24 +770,24 @@ first and modify the returned object.") (if params (shared-initialize nobj params)) nobj)) -(defgeneric destructor (this &rest params) +(cl-defgeneric destructor (this &rest params) "Destructor for cleaning up any dynamic links to our object.") -(defmethod destructor ((_this eieio-default-superclass) &rest _params) +(cl-defmethod destructor ((_this eieio-default-superclass) &rest _params) "Destructor for cleaning up any dynamic links to our object. Argument THIS is the object being destroyed. PARAMS are additional ignored parameters." ;; No cleanup... yet. ) -(defgeneric object-print (this &rest strings) +(cl-defgeneric object-print (this &rest strings) "Pretty printer for object THIS. Call function `object-name' with STRINGS. It is sometimes useful to put a summary of the object into the default # string when using EIEIO browsing tools. Implement this method to customize the summary.") -(defmethod object-print ((this eieio-default-superclass) &rest strings) +(cl-defmethod object-print ((this eieio-default-superclass) &rest strings) "Pretty printer for object THIS. Call function `object-name' with STRINGS. The default method for printing object THIS is to use the function `object-name'. @@ -807,11 +804,11 @@ to prepend a space." (defvar eieio-print-depth 0 "When printing, keep track of the current indentation depth.") -(defgeneric object-write (this &optional comment) +(cl-defgeneric object-write (this &optional comment) "Write out object THIS to the current stream. Optional COMMENT will add comments to the beginning of the output.") -(defmethod object-write ((this eieio-default-superclass) &optional comment) +(cl-defmethod object-write ((this eieio-default-superclass) &optional comment) "Write object THIS out to the current stream. This writes out the vector version of this object. Complex and recursive object are discouraged from being written. diff --git a/test/ChangeLog b/test/ChangeLog index dcce0bf..d63a561 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,7 +1,12 @@ +2015-01-21 Stefan Monnier + + * automated/cl-generic-tests.el (setf cl--generic-2): Make sure + the setf can be used already in the body of the method. + 2015-01-20 Jorgen Schaefer * automated/package-test.el (package-test-install-prioritized): - Removed test due to unreproducable failures. + Remove test due to unreproducable failures. 2015-01-20 Michal Nazarewicz @@ -15,8 +20,8 @@ A new helper function for testing `tildify-double-space-undos' behaviour in the `tildify-space' function. (tildify-space-undo-test-html, tildify-space-undo-test-html-nbsp) - (tildify-space-undo-test-xml, tildify-space-undo-test-tex): New - tests for `tildify-doule-space-undos' behaviour. + (tildify-space-undo-test-xml, tildify-space-undo-test-tex): + New tests for `tildify-doule-space-undos' behaviour. * automated/tildify-tests.el (tildify-space-test--test): A new helper function for testing `tildify-space' function. diff --git a/test/automated/cl-generic-tests.el b/test/automated/cl-generic-tests.el index 1c01d9b..bc9a1ec 100644 --- a/test/automated/cl-generic-tests.el +++ b/test/automated/cl-generic-tests.el @@ -73,6 +73,11 @@ (should (equal (cl--generic-1 (make-cl-generic-struct-child11) nil) '("child11" "around""child1" "parent" a)))) +;; I don't know how to put this inside an `ert-test'. This tests that `setf' +;; can be used directly inside the body of the setf method. +(cl-defmethod (setf cl--generic-2) (v (y integer) z) + (setf (cl--generic-2 (nth y z) z) v)) + (ert-deftest cl-generic-test-03-setf () (cl-defmethod (setf cl--generic-1) (v (y t) z) (list v y z)) (cl-defmethod (setf cl--generic-1) (v (_y (eql 4)) z) (list v "four" z)) diff --git a/test/automated/eieio-test-methodinvoke.el b/test/automated/eieio-test-methodinvoke.el index 3918fb9..da5f59a 100644 --- a/test/automated/eieio-test-methodinvoke.el +++ b/test/automated/eieio-test-methodinvoke.el @@ -292,6 +292,7 @@ (defmethod initialize-instance :after ((this eitest-Ja) &rest slots) ;(message "+Ja") + ;; FIXME: Using next-method-p in an after-method is invalid! (when (next-method-p) (call-next-method)) ;(message "-Ja") @@ -302,6 +303,7 @@ (defmethod initialize-instance :after ((this eitest-Jb) &rest slots) ;(message "+Jb") + ;; FIXME: Using next-method-p in an after-method is invalid! (when (next-method-p) (call-next-method)) ;(message "-Jb") commit 8ee825c35b62768e28fe825163dea90d3ab46022 Author: Eli Zaretskii Date: Wed Jan 21 18:16:09 2015 +0200 doc/emacs/programs.texi (Custom C Indent): Fix a typo. (Bug#19647) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index 50ea80b..d1378a3 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,3 +1,7 @@ +2015-01-21 Eli Zaretskii + + * programs.texi (Custom C Indent): Fix a typo. (Bug#19647) + 2014-12-22 Eli Zaretskii * buffers.texi (Kill Buffer): Improve indexing. diff --git a/doc/emacs/programs.texi b/doc/emacs/programs.texi index 48217c6..547de42 100644 --- a/doc/emacs/programs.texi +++ b/doc/emacs/programs.texi @@ -546,7 +546,7 @@ your selected @dfn{style} with the syntactic construct and adds this onto the indentation of the @dfn{anchor statement}. @table @kbd -@item C-c . @key{RET} @var{style} @key{RET} +@item C-c . @var{style} @key{RET} Select a predefined style @var{style} (@code{c-set-style}). @end table commit 41efcf4db1589c2141ace6b9c3c15aa0386ecf95 Author: Glenn Morris Date: Wed Jan 21 06:20:15 2015 -0500 Auto-commit of loaddefs files. diff --git a/lisp/emacs-lisp/eieio-core.el b/lisp/emacs-lisp/eieio-core.el index b89ccfd..0297acc 100644 --- a/lisp/emacs-lisp/eieio-core.el +++ b/lisp/emacs-lisp/eieio-core.el @@ -1258,7 +1258,7 @@ method invocation orders of the involved classes." (eieio--class-precedence-list tag)))) -;;;### (autoloads nil "eieio-compat" "eieio-compat.el" "b177169dfbad7fb2e9d500b9c40002fa") +;;;### (autoloads nil "eieio-compat" "eieio-compat.el" "51667b1cd372f45acdae14f838cedcc6") ;;; Generated autoloads from eieio-compat.el (autoload 'eieio--defalias "eieio-compat" "\ @@ -1325,6 +1325,27 @@ Summary: \(fn METHOD KIND ARGCLASS CODE)" nil nil) +(autoload 'eieio-defmethod "eieio-compat" "\ +Obsolete work part of an old version of the `defmethod' macro. + +\(fn METHOD ARGS)" nil nil) + +(make-obsolete 'eieio-defmethod 'cl-defmethod '"24.1") + +(autoload 'eieio-defgeneric "eieio-compat" "\ +Obsolete work part of an old version of the `defgeneric' macro. + +\(fn METHOD DOC-STRING)" nil nil) + +(make-obsolete 'eieio-defgeneric 'cl-defgeneric '"24.1") + +(autoload 'eieio-defclass "eieio-compat" "\ + + +\(fn CNAME SUPERCLASSES SLOTS OPTIONS)" nil nil) + +(make-obsolete 'eieio-defclass 'eieio-defclass-internal '"25.1") + ;;;*** commit 88ba49fe356ecbb57f604158c432f1044d50b0bb Author: Paul Eggert Date: Wed Jan 21 00:29:02 2015 -0800 Fix coding.c subscript error * coding.c (CODING_ISO_INVOKED_CHARSET): Avoid undefined behavior if CODING_ISO_INVOCATION returns negative. diff --git a/src/ChangeLog b/src/ChangeLog index fcbc7dc..43e5641 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,9 @@ 2015-01-21 Paul Eggert + Fix coding.c subscript error + * coding.c (CODING_ISO_INVOKED_CHARSET): + Avoid undefined behavior if CODING_ISO_INVOCATION returns negative. + Backport: correct old fix for GTK font selection * gtkutil.c (xg_get_font): Fix off-by-2 typo. Fixes: bug#3228 diff --git a/src/coding.c b/src/coding.c index 77583d0..8dc39e7 100644 --- a/src/coding.c +++ b/src/coding.c @@ -395,7 +395,8 @@ static Lisp_Object Vbig5_coding_system; #define CODING_ISO_BOL(coding) \ ((coding)->spec.iso_2022.bol) #define CODING_ISO_INVOKED_CHARSET(coding, plane) \ - CODING_ISO_DESIGNATION ((coding), CODING_ISO_INVOCATION ((coding), (plane))) + (CODING_ISO_INVOCATION (coding, plane) < 0 ? -1 \ + : CODING_ISO_DESIGNATION (coding, CODING_ISO_INVOCATION (coding, plane))) #define CODING_ISO_CMP_STATUS(coding) \ (&(coding)->spec.iso_2022.cmp_status) #define CODING_ISO_EXTSEGMENT_LEN(coding) \ commit 3ea1b31f46f21ecfb089628e63187970fdb58d5a Author: Daniel Koning Date: Wed Jan 21 09:01:30 2015 +0100 Prevent artist-mode from creating runaway timers (Bug#6130). * subr.el (posnp): Correct docstring of `posnp'. (posn-col-row): Make it work with all mouse position objects. * textmodes/artist.el (artist-mouse-draw-continously): Cancel timers if an error occurs during continuous drawing. (Bug#6130) * commands.texi (Drag Events, Motion Events, Event Examples) (Accessing Mouse): Describe actual range of values that mouse position objects can have. diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 11a6f32..52c621c 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,9 @@ +2015-01-21 Daniel Koning (tiny change) + + * commands.texi (Drag Events, Motion Events, Event Examples) + (Accessing Mouse): Describe actual range of values that mouse + position objects can have. + 2015-01-20 Eli Zaretskii * display.texi (Manipulating Buttons): Explain more about the diff --git a/doc/lispref/commands.texi b/doc/lispref/commands.texi index a503e3f..5ea1a48 100644 --- a/doc/lispref/commands.texi +++ b/doc/lispref/commands.texi @@ -1485,8 +1485,10 @@ prefix @samp{drag-}. For example, dragging the mouse with button 2 held down generates a @code{drag-mouse-2} event. The second and third elements of the event give the starting and ending position of the drag, as mouse position lists (@pxref{Click Events}). You can access -the second element of any mouse event in the same way, with no need to -distinguish drag events from others. +the second element of any mouse event in the same way. However, the +drag event may end outside the boundaries of the frame that was +initially selected. In that case, the third element's position list +contains that frame in place of a window. The @samp{drag-} prefix follows the modifier key prefixes such as @samp{C-} and @samp{M-}. @@ -1631,7 +1633,10 @@ represented by lists that look like this: @noindent @var{position} is a mouse position list (@pxref{Click Events}), -specifying the current position of the mouse cursor. +specifying the current position of the mouse cursor. As with the +end-position of a drag event, this position list may represent a +location outside the boundaries of the initially selected frame, in +which case the list contains that frame in place of a window. The special form @code{track-mouse} enables generation of motion events within its body. Outside of @code{track-mouse} forms, Emacs @@ -1846,6 +1851,14 @@ into another window. That produces a pair of events like these: -453816)) @end smallexample +The frame with input focus might not take up the entire screen, and +the user might move the mouse outside the scope of the frame. Inside +the @code{track-mouse} special form, that produces an event like this: + +@smallexample +(mouse-movement (# nil (563 . 205) 532301936)) +@end smallexample + To handle a SIGUSR1 signal, define an interactive function, and bind it to the @code{signal usr1} event sequence: @@ -2010,7 +2023,9 @@ Events}); and @code{nil} otherwise. various parts of it: @defun posn-window position -Return the window that @var{position} is in. +Return the window that @var{position} is in. If @var{position} +represents a location outside the frame where the event was initiated, +return that frame instead. @end defun @defun posn-area position diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 20efe68..280f602 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2015-01-21 Daniel Koning (tiny change) + + * subr.el (posnp): Correct docstring of `posnp'. + (posn-col-row): Make it work with all mouse position objects. + * textmodes/artist.el (artist-mouse-draw-continously): Cancel + timers if an error occurs during continuous drawing. (Bug#6130) + 2015-01-20 Eli Zaretskii * button.el (button-activate, push-button): Doc fix. (Bug#19628) diff --git a/lisp/subr.el b/lisp/subr.el index d71de87..a48038f 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -1062,7 +1062,12 @@ The return value is a positive integer." ;;;; Extracting fields of the positions in an event. (defun posnp (obj) - "Return non-nil if OBJ appears to be a valid `posn' object." + "Return non-nil if OBJ appears to be a valid `posn' object specifying a window. +If OBJ is a valid `posn' object, but specifies a frame rather +than a window, return nil." + ;; FIXME: Correct the behavior of this function so that all valid + ;; `posn' objects are recognized, after updating other code that + ;; depends on its present behavior. (and (windowp (car-safe obj)) (atom (car-safe (setq obj (cdr obj)))) ;AREA-OR-POS. (integerp (car-safe (car-safe (setq obj (cdr obj))))) ;XOFFSET. @@ -1122,24 +1127,28 @@ For a scroll-bar event, the result column is 0, and the row corresponds to the vertical position of the click in the scroll bar. POSITION should be a list of the form returned by the `event-start' and `event-end' functions." - (let* ((pair (posn-x-y position)) - (window (posn-window position)) - (area (posn-area position))) + (let* ((pair (posn-x-y position)) + (frame-or-window (posn-window position)) + (frame (if (framep frame-or-window) + frame-or-window + (window-frame frame-or-window))) + (window (when (windowp frame-or-window) frame-or-window)) + (area (posn-area position))) (cond - ((null window) + ((null frame-or-window) '(0 . 0)) ((eq area 'vertical-scroll-bar) (cons 0 (scroll-bar-scale pair (1- (window-height window))))) ((eq area 'horizontal-scroll-bar) (cons (scroll-bar-scale pair (window-width window)) 0)) (t - (let* ((frame (if (framep window) window (window-frame window))) - ;; FIXME: This should take line-spacing properties on - ;; newlines into account. - (spacing (when (display-graphic-p frame) - (or (with-current-buffer (window-buffer window) - line-spacing) - (frame-parameter frame 'line-spacing))))) + ;; FIXME: This should take line-spacing properties on + ;; newlines into account. + (let* ((spacing (when (display-graphic-p frame) + (or (with-current-buffer + (window-buffer (frame-selected-window frame)) + line-spacing) + (frame-parameter frame 'line-spacing))))) (cond ((floatp spacing) (setq spacing (truncate (* spacing (frame-char-height frame))))) diff --git a/lisp/textmodes/artist.el b/lisp/textmodes/artist.el index 8a2383c..85d9410 100644 --- a/lisp/textmodes/artist.el +++ b/lisp/textmodes/artist.el @@ -4963,52 +4963,55 @@ The event, EV, is the mouse event." (artist-funcall init-fn x1 y1) (if (not artist-rubber-banding) (artist-no-rb-set-point1 x1 y1)) - (track-mouse - (while (or (mouse-movement-p ev) - (member 'down (event-modifiers ev))) - (setq ev-start-pos (artist-coord-win-to-buf - (posn-col-row (event-start ev)))) - (setq x1 (car ev-start-pos)) - (setq y1 (cdr ev-start-pos)) - - ;; Cancel previous timer - (if timer - (cancel-timer timer)) - - (if (not (eq initial-win (posn-window (event-start ev)))) - ;; If we moved outside the window, do nothing - nil - - ;; Still in same window: - ;; - ;; Check if user presses or releases shift key - (if (artist-shift-has-changed shift-state ev) - - ;; First check that the draw-how is the same as we - ;; already have. Otherwise, ignore the changed shift-state. - (if (not (eq draw-how - (artist-go-get-draw-how-from-symbol - (if (not shift-state) shifted unshifted)))) - (message "Cannot switch to shifted operation") - - ;; progn is "implicit" since this is the else-part - (setq shift-state (not shift-state)) - (setq op (if shift-state shifted unshifted)) - (setq draw-how (artist-go-get-draw-how-from-symbol op)) - (setq draw-fn (artist-go-get-draw-fn-from-symbol op)))) - - ;; Draw the new shape - (setq shape (artist-funcall draw-fn x1 y1)) - (artist-move-to-xy x1 y1) - - ;; Start the timer to call `draw-fn' repeatedly every - ;; `interval' second - (if (and interval draw-fn) - (setq timer (run-at-time interval interval draw-fn x1 y1)))) - - ;; Read next event - (setq ev (read-event)))) - + (unwind-protect + (track-mouse + (while (or (mouse-movement-p ev) + (member 'down (event-modifiers ev))) + (setq ev-start-pos (artist-coord-win-to-buf + (posn-col-row (event-start ev)))) + (setq x1 (car ev-start-pos)) + (setq y1 (cdr ev-start-pos)) + + ;; Cancel previous timer + (if timer + (cancel-timer timer)) + + (if (not (eq initial-win (posn-window (event-start ev)))) + ;; If we moved outside the window, do nothing + nil + + ;; Still in same window: + ;; + ;; Check if user presses or releases shift key + (if (artist-shift-has-changed shift-state ev) + + ;; First check that the draw-how is the same as we + ;; already have. Otherwise, ignore the changed shift-state. + (if (not (eq draw-how + (artist-go-get-draw-how-from-symbol + (if (not shift-state) shifted unshifted)))) + (message "Cannot switch to shifted operation") + + ;; progn is "implicit" since this is the else-part + (setq shift-state (not shift-state)) + (setq op (if shift-state shifted unshifted)) + (setq draw-how (artist-go-get-draw-how-from-symbol op)) + (setq draw-fn (artist-go-get-draw-fn-from-symbol op)))) + + ;; Draw the new shape + (setq shape (artist-funcall draw-fn x1 y1)) + (artist-move-to-xy x1 y1) + + ;; Start the timer to call `draw-fn' repeatedly every + ;; `interval' second + (if (and interval draw-fn) + (setq timer (run-at-time interval interval draw-fn x1 y1)))) + + ;; Read next event + (setq ev (read-event)))) + ;; Cleanup: get rid of any active timer. + (if timer + (cancel-timer timer))) ;; Cancel any timers (if timer (cancel-timer timer)) commit e7697d9763982ffafd85407f4102fbf9b7760d57 Author: Dmitry Gutov Date: Wed Jan 21 09:20:04 2015 +0200 Remap quit-window to xref-quit in xref buffers Fixes: debbugs:19466 * lisp/progmodes/xref.el (xref--xref-buffer-mode-map): Define before the major mode. Remap `quit-window' to `xref-quit'. (xref--xref-buffer-mode): Inherit from special-mode. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 1c71008..65c0684 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,9 @@ 2015-01-21 Dmitry Gutov + * progmodes/xref.el (xref--xref-buffer-mode-map): Define before + the major mode. Remap `quit-window' to `xref-quit'. + (xref--xref-buffer-mode): Inherit from special-mode. + xref: Keep track of temporary buffers (bug#19466). * progmodes/xref.el (xref--temporary-buffers, xref--selected) (xref--inhibit-mark-selected): New variables. diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el index 1174a60..ee81250 100644 --- a/lisp/progmodes/xref.el +++ b/lisp/progmodes/xref.el @@ -421,21 +421,22 @@ Used for temporary buffers.") (xref-quit) (xref--pop-to-location loc window))) -(define-derived-mode xref--xref-buffer-mode fundamental-mode "XREF" +(defvar xref--xref-buffer-mode-map + (let ((map (make-sparse-keymap))) + (define-key map [remap quit-window] #'xref-quit) + (define-key map (kbd "n") #'xref-next-line) + (define-key map (kbd "p") #'xref-prev-line) + (define-key map (kbd "RET") #'xref-goto-xref) + (define-key map (kbd "C-o") #'xref-show-location-at-point) + ;; suggested by Johan Claesson "to further reduce finger movement": + (define-key map (kbd ".") #'xref-next-line) + (define-key map (kbd ",") #'xref-prev-line) + map)) + +(define-derived-mode xref--xref-buffer-mode special-mode "XREF" "Mode for displaying cross-references." (setq buffer-read-only t)) -(let ((map xref--xref-buffer-mode-map)) - (define-key map (kbd "q") #'xref-quit) - (define-key map (kbd "n") #'xref-next-line) - (define-key map (kbd "p") #'xref-prev-line) - (define-key map (kbd "RET") #'xref-goto-xref) - (define-key map (kbd "C-o") #'xref-show-location-at-point) - - ;; suggested by Johan Claesson "to further reduce finger movement": - (define-key map (kbd ".") #'xref-next-line) - (define-key map (kbd ",") #'xref-prev-line)) - (defun xref-quit (&optional kill) "Perform cleanup, then quit the current window. The cleanup consists of burying all temporarily displayed @@ -445,7 +446,7 @@ created in the process of showing xrefs. Exceptions are made for buffers switched to by the user in the meantime, and other window configuration changes. These are preserved." - (interactive "P")a + (interactive "P") (let ((window (selected-window)) (history xref--display-history)) (setq xref--display-history nil) commit 956b13c527dc6ac5443ea4d9706faa3a845b8562 Author: Dmitry Gutov Date: Wed Jan 21 08:43:39 2015 +0200 xref: Keep track of temporary buffers Fixes: debbugs:19466 xref: Keep track of temporary buffers. * lisp/progmodes/xref.el (xref--temporary-buffers, xref--selected) (xref--inhibit-mark-selected): New variables. (xref--mark-selected): New function. (xref--show-location): Maybe add the buffer to `xref--temporary-buffers', add `xref--mark-selected' to `buffer-list-update-hook' there. (xref--window): Add docstring. (xref-quit): Rename from `xref--quit'. Update both references. Add KILL argument. When it's non-nil, kill the temporary buffers that haven't been selected by the user. (xref--show-xref-buffer): Change the second argument to alist, extract the values for `xref--window' and `xref--temporary-buffers' from it. Add `xref--mark-selected' to `buffer-list-update-hook' to each buffer in the list. (xref--show-xrefs): Move the logic of calling `xref-find-function' here. Save the difference between buffer lists before and after it's called as "temporary buffers", and `pass it to `xref-show-xrefs-function'. (xref--find-definitions, xref-find-references) (xref-find-apropos): Update accordingly. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c843bdd..1c71008 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,27 @@ +2015-01-21 Dmitry Gutov + + xref: Keep track of temporary buffers (bug#19466). + * progmodes/xref.el (xref--temporary-buffers, xref--selected) + (xref--inhibit-mark-selected): New variables. + (xref--mark-selected): New function. + (xref--show-location): Maybe add the buffer to + `xref--temporary-buffers', add `xref--mark-selected' to + `buffer-list-update-hook' there. + (xref--window): Add docstring. + (xref-quit): Rename from `xref--quit'. Update both references. + Add KILL argument. When it's non-nil, kill the temporary buffers + that haven't been selected by the user. + (xref--show-xref-buffer): Change the second argument to alist, + extract the values for `xref--window' and + `xref--temporary-buffers' from it. Add `xref--mark-selected' to + `buffer-list-update-hook' to each buffer in the list. + (xref--show-xrefs): Move the logic of calling `xref-find-function' + here. Save the difference between buffer lists before and after + it's called as "temporary buffers", and `pass it to + `xref-show-xrefs-function'. + (xref--find-definitions, xref-find-references) + (xref-find-apropos): Update accordingly. + 2015-01-20 Artur Malabarba * emacs-lisp/package.el (package-dir-info): Fix `while' logic. diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el index 92144cf..1174a60 100644 --- a/lisp/progmodes/xref.el +++ b/lisp/progmodes/xref.el @@ -339,6 +339,20 @@ WINDOW controls how the buffer is displayed: (defvar-local xref--display-history nil "List of pairs (BUFFER . WINDOW), for temporarily displayed buffers.") +(defvar-local xref--temporary-buffers nil + "List of buffers created by xref code.") + +(defvar-local xref--selected nil + "t if the current buffer has ever been selected. +Used for temporary buffers.") + +(defvar xref--inhibit-mark-selected nil) + +(defun xref--mark-selected () + (unless xref--inhibit-mark-selected + (setq xref--selected t)) + (remove-hook 'buffer-list-update-hook #'xref--mark-selected t)) + (defun xref--save-to-history (buf win) (let ((restore (window-parameter win 'quit-restore))) ;; Save the new entry if the window displayed another buffer @@ -359,8 +373,16 @@ WINDOW controls how the buffer is displayed: (defun xref--show-location (location) (condition-case err - (let ((xref-buf (current-buffer))) + (let ((xref-buf (current-buffer)) + (bl (buffer-list)) + (xref--inhibit-mark-selected t)) (xref--goto-location location) + (let ((buf (current-buffer))) + (unless (memq buf bl) + ;; Newly created. + (add-hook 'buffer-list-update-hook #'xref--mark-selected nil t) + (with-current-buffer xref-buf + (push buf xref--temporary-buffers)))) (xref--display-position (point) t 1 xref-buf)) (user-error (message (error-message-string err))))) @@ -386,7 +408,8 @@ WINDOW controls how the buffer is displayed: (defun xref--location-at-point () (get-text-property (point) 'xref-location)) -(defvar-local xref--window nil) +(defvar-local xref--window nil + "ACTION argument to call `display-buffer' with.") (defun xref-goto-xref () "Jump to the xref on the current line and bury the xref buffer." @@ -395,7 +418,7 @@ WINDOW controls how the buffer is displayed: (let ((loc (or (xref--location-at-point) (user-error "No reference at point"))) (window xref--window)) - (xref--quit) + (xref-quit) (xref--pop-to-location loc window))) (define-derived-mode xref--xref-buffer-mode fundamental-mode "XREF" @@ -403,7 +426,7 @@ WINDOW controls how the buffer is displayed: (setq buffer-read-only t)) (let ((map xref--xref-buffer-mode-map)) - (define-key map (kbd "q") #'xref--quit) + (define-key map (kbd "q") #'xref-quit) (define-key map (kbd "n") #'xref-next-line) (define-key map (kbd "p") #'xref-prev-line) (define-key map (kbd "RET") #'xref-goto-xref) @@ -413,17 +436,31 @@ WINDOW controls how the buffer is displayed: (define-key map (kbd ".") #'xref-next-line) (define-key map (kbd ",") #'xref-prev-line)) -(defun xref--quit () - "Quit all windows in `xref--display-history', then quit current window." - (interactive) +(defun xref-quit (&optional kill) + "Perform cleanup, then quit the current window. +The cleanup consists of burying all temporarily displayed +buffers, and if KILL is non-nil, of killing all buffers that were +created in the process of showing xrefs. + +Exceptions are made for buffers switched to by the user in the +meantime, and other window configuration changes. These are +preserved." + (interactive "P")a (let ((window (selected-window)) (history xref--display-history)) (setq xref--display-history nil) + (when kill + (let ((xref--inhibit-mark-selected t) + kill-buffer-query-functions) + (dolist (buf xref--temporary-buffers) + (unless (buffer-local-value 'xref--selected buf) + (kill-buffer buf))) + (setq xref--temporary-buffers nil))) (pcase-dolist (`(,buf . ,win) history) (when (and (window-live-p win) (eq buf (window-buffer win))) (quit-window nil win))) - (quit-window nil window))) + (quit-window kill window))) (defconst xref-buffer-name "*xref*" "The name of the buffer to show xrefs.") @@ -471,7 +508,7 @@ Return an alist of the form ((FILENAME . (XREF ...)) ...)." (xref-location-group (xref--xref-location x))) #'equal)) -(defun xref--show-xref-buffer (xrefs window) +(defun xref--show-xref-buffer (xrefs alist) (let ((xref-alist (xref--analyze xrefs))) (with-current-buffer (get-buffer-create xref-buffer-name) (let ((inhibit-read-only t)) @@ -480,7 +517,11 @@ Return an alist of the form ((FILENAME . (XREF ...)) ...)." (xref--xref-buffer-mode) (pop-to-buffer (current-buffer)) (goto-char (point-min)) - (setq xref--window window) + (setq xref--window (assoc-default 'window alist)) + (setq xref--temporary-buffers (assoc-default 'temporary-buffers alist)) + (dolist (buf xref--temporary-buffers) + (with-current-buffer buf + (add-hook 'buffer-list-update-hook #'xref--mark-selected nil t))) (current-buffer))))) @@ -493,16 +534,21 @@ Return an alist of the form ((FILENAME . (XREF ...)) ...)." (defvar xref-show-xrefs-function 'xref--show-xref-buffer "Function to display a list of xrefs.") -(defun xref--show-xrefs (id kind xrefs window) - (cond - ((null xrefs) - (user-error "No known %s for: %s" kind id)) - ((not (cdr xrefs)) - (xref-push-marker-stack) - (xref--pop-to-location (xref--xref-location (car xrefs)) window)) - (t - (xref-push-marker-stack) - (funcall xref-show-xrefs-function xrefs window)))) +(defun xref--show-xrefs (input kind arg window) + (let* ((bl (buffer-list)) + (xrefs (funcall xref-find-function kind arg)) + (tb (cl-set-difference (buffer-list) bl))) + (cond + ((null xrefs) + (user-error "No known %s for: %s" (symbol-name kind) input)) + ((not (cdr xrefs)) + (xref-push-marker-stack) + (xref--pop-to-location (xref--xref-location (car xrefs)) window)) + (t + (xref-push-marker-stack) + (funcall xref-show-xrefs-function xrefs + `((window . ,window) + (temporary-buffers . ,tb))))))) (defun xref--read-identifier (prompt) "Return the identifier at point or read it from the minibuffer." @@ -517,9 +563,7 @@ Return an alist of the form ((FILENAME . (XREF ...)) ...)." ;;; Commands (defun xref--find-definitions (id window) - (xref--show-xrefs id "definitions" - (funcall xref-find-function 'definitions id) - window)) + (xref--show-xrefs id 'definitions id window)) ;;;###autoload (defun xref-find-definitions (identifier) @@ -546,9 +590,7 @@ prompt for it." "Find references to the identifier at point. With prefix argument, prompt for the identifier." (interactive (list (xref--read-identifier "Find references of: "))) - (xref--show-xrefs identifier "references" - (funcall xref-find-function 'references identifier) - nil)) + (xref--show-xrefs identifier 'references identifier nil)) ;;;###autoload (defun xref-find-apropos (pattern) @@ -557,14 +599,13 @@ The argument has the same meaning as in `apropos'." (interactive (list (read-from-minibuffer "Search for pattern (word list or regexp): "))) (require 'apropos) - (xref--show-xrefs pattern "apropos" - (funcall xref-find-function 'apropos - (apropos-parse-pattern - (if (string-equal (regexp-quote pattern) pattern) - ;; Split into words - (or (split-string pattern "[ \t]+" t) - (user-error "No word list given")) - pattern))) + (xref--show-xrefs pattern 'apropos + (apropos-parse-pattern + (if (string-equal (regexp-quote pattern) pattern) + ;; Split into words + (or (split-string pattern "[ \t]+" t) + (user-error "No word list given")) + pattern)) nil)) commit 4c09e3aef9a366ffebd314d01f666e04bd7798e2 Author: Paul Eggert Date: Tue Jan 20 22:05:31 2015 -0800 Backport: correct old fix for GTK font selection * gtkutil.c (xg_get_font): Fix off-by-2 typo. Fixes: bug#3228 diff --git a/src/ChangeLog b/src/ChangeLog index 709fd50..fcbc7dc 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2015-01-21 Paul Eggert + + Backport: correct old fix for GTK font selection + * gtkutil.c (xg_get_font): Fix off-by-2 typo. + Fixes: bug#3228 + 2015-01-21 Jan Djärv * nsterm.m (EV_TRAILER2): Set Vinhibit_quit to Qt (Bug#19531). diff --git a/src/gtkutil.c b/src/gtkutil.c index 5c9ff9c..b23d84c 100644 --- a/src/gtkutil.c +++ b/src/gtkutil.c @@ -2103,7 +2103,7 @@ xg_get_font (struct frame *f, const char *default_name) args[8] = QCtype; args[9] = Qxft; - font = Ffont_spec (8, args); + font = Ffont_spec (10, args); pango_font_description_free (desc); dupstring (&x_last_font_name, name); commit 87309740ca4fd2b2bc61d2a4599765a2571e18f6 Author: Jan D Date: Wed Jan 21 06:18:59 2015 +0100 Backport from trunk of bug 19531. Fixes: debbugs:19531 * nsterm.m (EV_TRAILER2): Set Vinhibit_quit to Qt. diff --git a/src/ChangeLog b/src/ChangeLog index ad4a85a..709fd50 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2015-01-21 Jan Djärv + + * nsterm.m (EV_TRAILER2): Set Vinhibit_quit to Qt (Bug#19531). + 2015-01-17 Eli Zaretskii * xdisp.c (produce_image_glyph): Fix display of images in R2L diff --git a/src/nsterm.m b/src/nsterm.m index 9ba0852..24770f6 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -378,8 +378,11 @@ static CGPoint menu_mouse_point; if (e) emacs_event->timestamp = EV_TIMESTAMP (e); \ if (q_event_ptr) \ { \ + Lisp_Object tem = Vinhibit_quit; \ + Vinhibit_quit = Qt; \ n_emacs_events_pending++; \ kbd_buffer_store_event_hold (emacs_event, q_event_ptr); \ + Vinhibit_quit = tem; \ } \ else \ hold_event (emacs_event); \ commit 9a895795e862f8082d0ea00cb33f4ca36b7d8196 Author: Artur Malabarba Date: Tue Jan 20 22:20:22 2015 -0200 emacs-lisp/package.el (package-dir-info): Fix `while' logic. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b5824ab..c843bdd 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2015-01-20 Artur Malabarba + + * emacs-lisp/package.el (package-dir-info): Fix `while' logic. + 2015-01-20 Stefan Monnier * emacs-lisp/eieio-generic.el: Remove. diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 0f094b5..88fc950 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -1316,9 +1316,14 @@ The return result is a `package-desc'." (while files (with-temp-buffer (insert-file-contents (pop files)) - (if (setq info (ignore-errors (package-buffer-info))) - (setq files nil) - (setf (package-desc-kind info) 'dir)))))))) + ;; When we find the file with the data, + (when (setq info (ignore-errors (package-buffer-info))) + ;; stop looping, + (setq files nil) + ;; set the 'dir kind, + (setf (package-desc-kind info) 'dir)))) + ;; and return the info. + info)))) (defun package--read-pkg-desc (kind) "Read a `define-package' form in current buffer. commit 8628a48fec7fcd8bdbbf6ce5808fc574631d1541 Merge: ffd9ee1 0dd19ac Author: Joakim Verona Date: Wed Jan 21 00:26:56 2015 +0100 Merge branch 'master' into xwidget commit ffd9ee1d6412a6e61383930562e6167a458f0d5f Author: Joakim Verona Date: Wed Jan 21 00:24:14 2015 +0100 rely less onimage mode diff --git a/lisp/xwidget.el b/lisp/xwidget.el index 0e4258a..5fdb740 100644 --- a/lisp/xwidget.el +++ b/lisp/xwidget.el @@ -139,23 +139,25 @@ defaults to the string looking like a url around the cursor position." (define-key map [remap backward-char] 'xwidget-webkit-scroll-backward) (define-key map [remap right-char] 'xwidget-webkit-scroll-forward) (define-key map [remap left-char] 'xwidget-webkit-scroll-backward) - (define-key map [remap previous-line] 'image-previous-line) - (define-key map [remap next-line] 'image-next-line) + ;; (define-key map [remap previous-line] 'image-previous-line) + ;; (define-key map [remap next-line] 'image-next-line) - (define-key map [remap move-beginning-of-line] 'image-bol) - (define-key map [remap move-end-of-line] 'image-eol) - (define-key map [remap beginning-of-buffer] 'image-bob) - (define-key map [remap end-of-buffer] 'image-eob) + ;; (define-key map [remap move-beginning-of-line] 'image-bol) + ;; (define-key map [remap move-end-of-line] 'image-eol) + ;; (define-key map [remap beginning-of-buffer] 'image-bob) + ;; (define-key map [remap end-of-buffer] 'image-eob) map) "Keymap for `xwidget-webkit-mode'.") (defun xwidget-webkit-scroll-up () + "Scroll webkit up,either native or like image mode." (interactive) (if (eq xwidget-webkit-scroll-behaviour 'native) (xwidget-set-adjustment (xwidget-webkit-last-session) 'vertical t 50) ) (image-scroll-up)) (defun xwidget-webkit-scroll-down () + "Scroll webkit down,either native or like image mode." (interactive) (if (eq xwidget-webkit-scroll-behaviour 'native) (xwidget-set-adjustment (xwidget-webkit-last-session) 'vertical t -50) ) commit e1653dd7252539ef9dd723c7f4d40a0d855f39f6 Author: Joakim Verona Date: Wed Jan 21 00:00:47 2015 +0100 Native scrolling Initial support for native scrolling of the webkit xwidget. Also some checkstyle cleanups. diff --git a/lisp/xwidget.el b/lisp/xwidget.el index 1f0932c..0e4258a 100644 --- a/lisp/xwidget.el +++ b/lisp/xwidget.el @@ -14,8 +14,14 @@ (eval-when-compile (require 'cl)) (require 'reporter) +(defcustom xwidget-webkit-scroll-behaviour 'native + "Scroll behaviour of the webkit instance. +'native or 'image." + :group 'xwidgets) + (defun xwidget-insert (pos type title width height) - "Insert an xwidget at POS, given ID, TYPE, TITLE WIDTH and + "Insert an xwidget at POS. +given ID, TYPE, TITLE WIDTH and HEIGHT in the current buffer. Return ID @@ -59,8 +65,8 @@ see `make-xwidget' for types suitable for TYPE." ;; ))))) (defun xwidget-display (xwidget) - "Force xwidget to be displayed to create a xwidget_view. Return -the window displaying XWIDGET." + "Force XWIDGET to be displayed to create a xwidget_view. +Return the window displaying XWIDGET." (let* ((buffer (xwidget-buffer xwidget)) (window (display-buffer buffer)) (frame (window-frame window))) @@ -102,6 +108,7 @@ defaults to the string looking like a url around the cursor position." (defadvice image-display-size (around image-display-size-for-xwidget (spec &optional pixels frame) activate) + "Advice for re-using image mode for xwidget." (if (eq (car spec) 'xwidget) (setq ad-return-value (xwidget-image-display-size spec pixels frame)) ad-do-it)) @@ -111,7 +118,7 @@ defaults to the string looking like a url around the cursor position." (defvar xwidget-webkit-mode-map (let ((map (make-sparse-keymap))) (define-key map "g" 'xwidget-webkit-browse-url) - (define-key map "a" 'xwidget-webkit-adjust-size-to-content) + (define-key map "a" 'xwidget-webkit-adjust-size-dispatch) (define-key map "b" 'xwidget-webkit-back ) (define-key map "r" 'xwidget-webkit-reload ) (define-key map "t" (lambda () (interactive) (message "o")) ) @@ -119,19 +126,19 @@ defaults to the string looking like a url around the cursor position." (define-key map "w" 'xwidget-webkit-current-url) ;;similar to image mode bindings - (define-key map (kbd "SPC") 'image-scroll-up) - (define-key map (kbd "DEL") 'image-scroll-down) + (define-key map (kbd "SPC") 'xwidget-webkit-scroll-up) + (define-key map (kbd "DEL") 'xwidget-webkit-scroll-down) - (define-key map [remap scroll-up] 'image-scroll-up) - (define-key map [remap scroll-up-command] 'image-scroll-up) + (define-key map [remap scroll-up] 'xwidget-webkit-scroll-up) + (define-key map [remap scroll-up-command] 'xwidget-webkit-scroll-up) - (define-key map [remap scroll-down] 'image-scroll-down) - (define-key map [remap scroll-down-command] 'image-scroll-down) + (define-key map [remap scroll-down] 'xwidget-webkit-scroll-down) + (define-key map [remap scroll-down-command] 'xwidget-webkit-scroll-down) - (define-key map [remap forward-char] 'image-forward-hscroll) - (define-key map [remap backward-char] 'image-backward-hscroll) - (define-key map [remap right-char] 'image-forward-hscroll) - (define-key map [remap left-char] 'image-backward-hscroll) + (define-key map [remap forward-char] 'xwidget-webkit-scroll-forward) + (define-key map [remap backward-char] 'xwidget-webkit-scroll-backward) + (define-key map [remap right-char] 'xwidget-webkit-scroll-forward) + (define-key map [remap left-char] 'xwidget-webkit-scroll-backward) (define-key map [remap previous-line] 'image-previous-line) (define-key map [remap next-line] 'image-next-line) @@ -142,11 +149,37 @@ defaults to the string looking like a url around the cursor position." map) "Keymap for `xwidget-webkit-mode'.") +(defun xwidget-webkit-scroll-up () + (interactive) + (if (eq xwidget-webkit-scroll-behaviour 'native) + (xwidget-set-adjustment (xwidget-webkit-last-session) 'vertical t 50) ) + (image-scroll-up)) + +(defun xwidget-webkit-scroll-down () + (interactive) + (if (eq xwidget-webkit-scroll-behaviour 'native) + (xwidget-set-adjustment (xwidget-webkit-last-session) 'vertical t -50) ) + (image-scroll-down)) + +(defun xwidget-webkit-scroll-forward () + (interactive) + (if (eq xwidget-webkit-scroll-behaviour 'native) + (xwidget-set-adjustment (xwidget-webkit-last-session) 'horizontal t 50) ) + (xwidget-webkit-scroll-forward)) + +(defun xwidget-webkit-scroll-backward () + (interactive) + (if (eq xwidget-webkit-scroll-behaviour 'native) + (xwidget-set-adjustment (xwidget-webkit-last-session) 'horizontal t -50) ) + (xwidget-webkit-scroll-backward)) + + ;;the xwidget event needs to go into a higher level handler ;;since the xwidget can generate an event even if its offscreen ;;TODO this needs to use callbacks and consider different xw ev types (define-key (current-global-map) [xwidget-event] 'xwidget-event-handler) (defun xwidget-log ( &rest msg) + "Log MSG to a buffer." (let ( (buf (get-buffer-create "*xwidget-log*"))) (save-excursion (buffer-disable-undo buf) @@ -168,13 +201,17 @@ defaults to the string looking like a url around the cursor position." (funcall 'xwidget-webkit-callback xwidget xwidget-event-type))) (defun xwidget-webkit-callback (xwidget xwidget-event-type) + "Callback for xwidgets. +XWIDGET instance, XWIDGET-EVENT-TYPE depends on the originating xwidget." (save-excursion (cond ((buffer-live-p (xwidget-buffer xwidget)) (set-buffer (xwidget-buffer xwidget)) (let* ((strarg (nth 3 last-input-event))) (cond ((eq xwidget-event-type 'document-load-finished) (xwidget-log "webkit finished loading: '%s'" (xwidget-webkit-get-title xwidget)) - (xwidget-adjust-size-to-content xwidget) + ;;TODO - check the native/internal scroll + ;;(xwidget-adjust-size-to-content xwidget) + (xwidget-webkit-adjust-size-dispatch) ;;TODO send xwidget here (rename-buffer (format "*xwidget webkit: %s *" (xwidget-webkit-get-title xwidget))) (pop-to-buffer (current-buffer))) ((eq xwidget-event-type 'navigation-policy-decision-requested) @@ -338,6 +375,18 @@ Argument STR string." (interactive) (xwidget-adjust-size-to-content (xwidget-webkit-current-session))) +(defun xwidget-webkit-adjust-size-dispatch () + "Adjust size according to mode." + (interactive) + (if (eq xwidget-webkit-scroll-behaviour 'native) + (xwidget-webkit-adjust-size-to-window) + (xwidget-webkit-adjust-size-to-content))) + +(defun xwidget-webkit-adjust-size-to-window () + "Adjust webkit to window." + (interactive) + (xwidget-resize ( xwidget-webkit-current-session) (window-pixel-width) (window-pixel-height))) + (defun xwidget-webkit-adjust-size (w h) "Manualy set webkit size. Argument W width. @@ -347,6 +396,7 @@ Argument H height." (xwidget-resize ( xwidget-webkit-current-session) w h)) (defun xwidget-webkit-fit-width () + "Adjust width of webkit to window width." (interactive) (xwidget-webkit-adjust-size (- (caddr (window-inside-pixel-edges)) (car (window-inside-pixel-edges))) @@ -383,7 +433,7 @@ Argument H height." (xwidget-webkit-execute-script (xwidget-webkit-current-session) "history.go(0);")) (defun xwidget-webkit-current-url () - "Get the webkit url. place it on kill ring." + "Get the webkit url. place it on kill ring." (interactive) (let* ((rv (xwidget-webkit-execute-script-rv (xwidget-webkit-current-session) "document.URL")) @@ -392,10 +442,13 @@ Argument H height." url)) (defun xwidget-webkit-execute-script-rv (xw script &optional default) - "same as xwidget-webkit-execute-script but also wraps an ugly hack to return a value" - ;;notice the fugly "title" hack. it is needed because the webkit api doesnt support returning values. - ;;this is a wrapper for the title hack so its easy to remove should webkit someday support JS return values - ;;or we find some other way to access the DOM + "Same as 'xwidget-webkit-execute-script' but but with return value. +XW is the webkit instance. SCRIPT is the script to execut. +DEFAULT is the defaultreturn value." + ;;notice the fugly "title" hack. it is needed because the webkit api + ;;doesnt support returning values. this is a wrapper for the title + ;;hack so its easy to remove should webkit someday support JS return + ;;values or we find some other way to access the DOM ;;reset webkit title. fugly. (let* ((emptytag "titlecantbewhitespaceohthehorror") @@ -416,10 +469,12 @@ Argument H height." ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun xwidget-webkit-get-selection () + "Get the webkit selection." (xwidget-webkit-execute-script-rv (xwidget-webkit-current-session) "window.getSelection().toString();")) (defun xwidget-webkit-copy-selection-as-kill () + "Get the webkit selection and put it on the kill ring." (interactive) (kill-new (xwidget-webkit-get-selection))) @@ -442,6 +497,7 @@ It can be retrieved with `(xwidget-get XWIDGET PROPNAME)'." ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun xwidget-delete-zombies () + "Helper for xwidget-cleanup." (dolist (xwidget-view xwidget-view-list) (when (or (not (window-live-p (xwidget-view-window xwidget-view))) (not (memq (xwidget-view-model xwidget-view) commit 0dd19ac82662c5710e73852f438fd55e1d9225b7 Author: Paul Eggert Date: Tue Jan 20 13:56:14 2015 -0800 Undo port to hypothetical nonzero Qnil case This mostly undoes the previous change in this area. See: http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00570.html * alloc.c (allocate_pseudovector): * callint.c (Fcall_interactively): * dispnew.c (realloc_glyph_pool): * fringe.c (init_fringe): * lisp.h (memsetnil): * xdisp.c (init_iterator): Simplify by assuming that Qnil is zero, but verify the assumption. * lisp.h (NIL_IS_ZERO): Revert back to this symbol, removing NIL_IS_NONZERO. All uses changed. diff --git a/src/ChangeLog b/src/ChangeLog index a320e22..e5e4fe9 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,18 @@ +2015-01-20 Paul Eggert + + Undo port to hypothetical nonzero Qnil case + This mostly undoes the previous change in this area. See: + http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00570.html + * alloc.c (allocate_pseudovector): + * callint.c (Fcall_interactively): + * dispnew.c (realloc_glyph_pool): + * fringe.c (init_fringe): + * lisp.h (memsetnil): + * xdisp.c (init_iterator): + Simplify by assuming that Qnil is zero, but verify the assumption. + * lisp.h (NIL_IS_ZERO): Revert back to this symbol, removing + NIL_IS_NONZERO. All uses changed. + 2015-01-20 Jan Djärv * nsterm.m (EV_TRAILER2): Set Vinhibit_quit to Qt (Bug#19531). diff --git a/src/alloc.c b/src/alloc.c index d758ca1..bf0456c 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -3175,10 +3175,9 @@ allocate_pseudovector (int memlen, int lisplen, eassert (lisplen <= (1 << PSEUDOVECTOR_SIZE_BITS) - 1); /* Only the first LISPLEN slots will be traced normally by the GC. - If Qnil is nonzero, clear the non-Lisp data separately. */ + Since Qnil == 0, we can memset Lisp and non-Lisp data at one go. */ + verify (NIL_IS_ZERO); memsetnil (v->contents, zerolen); - if (NIL_IS_NONZERO) - memset (v->contents + lisplen, 0, (zerolen - lisplen) * word_size); XSETPVECTYPESIZE (v, tag, lisplen, memlen - lisplen); return v; diff --git a/src/callint.c b/src/callint.c index 43566ac..3a595b5 100644 --- a/src/callint.c +++ b/src/callint.c @@ -509,9 +509,8 @@ invoke it. If KEYS is omitted or nil, the return value of visargs = args + nargs; varies = (signed char *) (visargs + nargs); + verify (NIL_IS_ZERO); memset (args, 0, nargs * (2 * word_size + 1)); - if (NIL_IS_NONZERO) - memsetnil (args, nargs * 2); GCPRO5 (prefix_arg, function, *args, *visargs, up_event); gcpro3.nvars = nargs; diff --git a/src/dispnew.c b/src/dispnew.c index 06b34d8..9af0ae5 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -1339,15 +1339,14 @@ realloc_glyph_pool (struct glyph_pool *pool, struct dim matrix_dim) ptrdiff_t old_nglyphs = pool->nglyphs; pool->glyphs = xpalloc (pool->glyphs, &pool->nglyphs, needed - old_nglyphs, -1, sizeof *pool->glyphs); + + /* Redisplay relies on nil as the object of special glyphs + (truncation and continuation glyphs and also blanks used to + extend each line on a TTY), so verify that memset does this. */ + verify (NIL_IS_ZERO); + memset (pool->glyphs + old_nglyphs, 0, (pool->nglyphs - old_nglyphs) * sizeof *pool->glyphs); - - /* Set the object of each glyph to nil. Redisplay relies on - this for objects of special glyphs (truncation and continuation - glyphs and also blanks used to extend each line on a TTY). */ - if (NIL_IS_NONZERO) - for (ptrdiff_t i = old_nglyphs; i < pool->nglyphs; i++) - pool->glyphs[i].object = Qnil; } /* Remember the number of rows and columns because (a) we use them diff --git a/src/fringe.c b/src/fringe.c index a494f68..464379d 100644 --- a/src/fringe.c +++ b/src/fringe.c @@ -1727,9 +1727,8 @@ init_fringe (void) fringe_bitmaps = xzalloc (max_fringe_bitmaps * sizeof *fringe_bitmaps); + verify (NIL_IS_ZERO); fringe_faces = xzalloc (max_fringe_bitmaps * sizeof *fringe_faces); - if (NIL_IS_NONZERO) - memsetnil (fringe_faces, max_fringe_bitmaps); } #ifdef HAVE_NTGUI diff --git a/src/lisp.h b/src/lisp.h index 119257b..8967d6e 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -1503,22 +1503,18 @@ gc_aset (Lisp_Object array, ptrdiff_t idx, Lisp_Object val) XVECTOR (array)->contents[idx] = val; } -/* True if Qnil's representation is nonzero. This is always false currently, - but there is fallback code for hypothetical alternative implementations. - Compile with -DNIL_IS_NONZERO to test the fallback code. */ -#ifndef NIL_IS_NONZERO -enum { NIL_IS_NONZERO = XLI_BUILTIN_LISPSYM (iQnil) != 0 }; -#endif +/* True, since Qnil's representation is zero. Every place in the code + that assumes Qnil is zero should verify (NIL_IS_ZERO), to make it easy + to find such assumptions later if we change Qnil to be nonzero. */ +enum { NIL_IS_ZERO = XLI_BUILTIN_LISPSYM (iQnil) == 0 }; /* Set a Lisp_Object array V's N entries to nil. */ INLINE void memsetnil (Lisp_Object *v, ptrdiff_t n) { eassert (0 <= n); + verify (NIL_IS_ZERO); memset (v, 0, n * sizeof *v); - if (NIL_IS_NONZERO) - for (ptrdiff_t i = 0; i < n; i++) - v[i] = Qnil; } /* If a struct is made to look like a vector, this macro returns the length diff --git a/src/xdisp.c b/src/xdisp.c index 9abaeb0..9611952 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -2747,17 +2747,12 @@ init_iterator (struct it *it, struct window *w, } /* Clear IT. */ + + /* The code assumes it->object and other Lisp_Object components are + set to nil, so verify that memset does this. */ + verify (NIL_IS_ZERO); memset (it, 0, sizeof *it); - if (NIL_IS_NONZERO) - { - it->string = Qnil; - it->from_overlay = Qnil; - it->slice.x = it->slice.y = it->slice.width = it->slice.height = Qnil; - it->space_width = Qnil; - it->font_height = Qnil; - it->object = Qnil; - it->bidi_it.string.lstring = Qnil; - } + it->current.overlay_string_index = -1; it->current.dpvec_index = -1; it->base_face_id = remapped_base_face_id; commit 3a8312d00e59b50e76121cd512177e999c18b06d Author: Stefan Monnier Date: Tue Jan 20 15:40:29 2015 -0500 lisp/emacs-lisp/eieio*.el: Rewrite our generics on top of cl-generic * lisp/emacs-lisp/eieio-generic.el: Remove. (defgeneric, defmethod): Move to eieio-compat.el. Mark obsolete. * lisp/emacs-lisp/eieio-compat.el: New file. * lisp/emacs-lisp/eieio.el: Don't require eieio-generic any more. * lisp/emacs-lisp/eieio-core.el (eieio--slot-originating-class-p): Remove unused function. (eieio-defclass): Move to eieio-compat.el. * lisp/emacs-lisp/macroexp.el (macroexp-macroexpand): New function. (macroexp--expand-all): Use it. * lisp/emacs-lisp/bytecomp.el (byte-compile-recurse-toplevel): Here too. diff --git a/etc/NEWS b/etc/NEWS index 3e8ed40..548b54d 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -208,6 +208,8 @@ If you need your objects to be named, do it by inheriting from `eieio-named'. *** The -list-p and -child-p functions are declared obsolete. *** The variables are declared obsolete. *** The variables are declared obsolete. +*** defgeneric and defmethod are declared obsolete. + ** ido *** New command `ido-bury-buffer-at-head' bound to C-S-b Bury the buffer at the head of `ido-matches', analogous to how C-k diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c34b7ea..b5824ab 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,25 +1,26 @@ +2015-01-20 Stefan Monnier + + * emacs-lisp/eieio-generic.el: Remove. + (defgeneric, defmethod): Move to eieio-compat.el. Mark obsolete. + * emacs-lisp/eieio-compat.el: New file. + * emacs-lisp/eieio.el: Don't require eieio-generic any more. + * emacs-lisp/eieio-core.el (eieio--slot-originating-class-p): + Remove unused function. + (eieio-defclass): Move to eieio-compat.el. + * emacs-lisp/macroexp.el (macroexp-macroexpand): New function. + (macroexp--expand-all): Use it. + * emacs-lisp/bytecomp.el (byte-compile-recurse-toplevel): Here too. + 2015-01-20 Michal Nazarewicz * emacs-lisp/eldoc.el (eldoc-documentation-function): Describe how major modes should use `add-function' to alter value of the variable. - - * hexl.el (hexl-mode): Set `eldoc-documentation-function' using - `add-function' so the default value is always used. - * ielm.el (inferior-emacs-lisp-mode): Set - `eldoc-documentation-function' using `add-function' so the default - value is always used. - * progmodes/cfengine.el (cfengine3-mode): Set - `eldoc-documentation-function' using `add-function' so the default - value is always used. - * progmodes/elisp-mode (emacs-lisp-mode): Set - `eldoc-documentation-function' using `add-function' so the default - value is always used. - * progmodes/octave.el (octave-mode): Set - `eldoc-documentation-function' using `add-function' so the default - value is always used. - * progmodes/python.el (python-mode): Set - `eldoc-documentation-function' using `add-function' so the default - value is always used. + * hexl.el (hexl-mode): + * ielm.el (inferior-emacs-lisp-mode): + * progmodes/cfengine.el (cfengine3-mode): + * progmodes/elisp-mode (emacs-lisp-mode): + * progmodes/octave.el (octave-mode): + * progmodes/python.el (python-mode): * simple.el (read--expression): Set `eldoc-documentation-function' using `add-function' so the default value is always used. @@ -105,8 +106,8 @@ (xref--save-to-history): New function. (xref--display-position): Use it. Add new argument. (xref--restore-window-configuration): Remove. - (xref--show-location, xref-show-location-at-point): Update - accordingly. + (xref--show-location, xref-show-location-at-point): + Update accordingly. (xref--xref-buffer-mode): Don't use `pre-command-hook'. (xref--quit): New command. (xref-goto-xref): Use it. @@ -152,6 +153,11 @@ 2015-01-18 Stefan Monnier + * emacs-lisp/eieio-core.el: Add `subclass' specializer for cl-generic. + (eieio--generic-subclass-tagcode, eieio--generic-subclass-tag-types): + New functions. + (cl-generic-tagcode-function, cl-generic-tag-types-function): Use them. + * emacs-lisp/cl-macs.el (cl-defstruct): Minor optimization when include or print is nil. (cl-struct-type-p): New function. diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index 1acd4fe..8440570 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el @@ -433,7 +433,7 @@ Return the compile-time value of FORM." ;; 3.2.3.1, "Processing of Top Level Forms". The semantics are very ;; subtle: see test/automated/bytecomp-tests.el for interesting ;; cases. - (setf form (macroexpand form byte-compile-macro-environment)) + (setf form (macroexp-macroexpand form byte-compile-macro-environment)) (if (eq (car-safe form) 'progn) (cons 'progn (mapcar (lambda (subform) diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el index 544f1fa..3bbddfc 100644 --- a/lisp/emacs-lisp/cl-generic.el +++ b/lisp/emacs-lisp/cl-generic.el @@ -37,9 +37,26 @@ ;; Added elements: ;; - We support aliases to generic functions. ;; - The kind of thing on which to dispatch can be extended. -;; There is support in this file for (eql ) dispatch as well as dispatch -;; on the type of CL structs, and eieio-core.el adds support for EIEIO -;; defclass objects. +;; There is support in this file for dispatch on: +;; - (eql ) +;; - plain old types +;; - type of CL structs +;; eieio-core adds dispatch on: +;; - class of eieio objects +;; - actual class argument, using the syntax (subclass ). + +;; Efficiency considerations: overall, I've made an effort to make this fairly +;; efficient for the expected case (e.g. no constant redefinition of methods). +;; - Generic functions which do not dispatch on any argument are implemented +;; optimally (just as efficient as plain old functions). +;; - Generic functions which only dispatch on one argument are fairly efficient +;; (not a lot of room for improvement, I think). +;; - Multiple dispatch is implemented rather naively. There's an extra `apply' +;; function call for every dispatch; we don't optimize each dispatch +;; based on the set of candidate methods remaining; we don't optimize the +;; order in which we performs the dispatches either; If/when this +;; becomes a problem, we can try and optimize it. +;; - call-next-method could be made more efficient, but isn't too terrible. ;;; Code: diff --git a/lisp/emacs-lisp/eieio-compat.el b/lisp/emacs-lisp/eieio-compat.el new file mode 100644 index 0000000..34c06c0 --- /dev/null +++ b/lisp/emacs-lisp/eieio-compat.el @@ -0,0 +1,246 @@ +;;; eieio-compat.el --- Compatibility with Older EIEIO versions -*- lexical-binding:t -*- + +;; Copyright (C) 1995-1996, 1998-2015 Free Software Foundation, Inc. + +;; Author: Eric M. Ludlam +;; Keywords: OO, lisp + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . + +;;; Commentary: + +;; Backward compatibility definition of old EIEIO functions in +;; terms of newer equivalent. + +;; The main elements are the old EIEIO `defmethod' and `defgeneric' which are +;; now implemented on top of cl-generic. The differences we have to +;; accommodate are: +;; - EIEIO's :static methods (turned into a new `eieio--static' specializer). +;; - EIEIO's support for `call-next-method' and `next-method-p' instead of +;; `cl-next-method-p' and `cl-call-next-method' (simple matter of renaming). +;; - Different errors are signaled. +;; - EIEIO's defgeneric does not reset the function. +;; - EIEIO's no-next-method and no-applicable-method can't be aliases of +;; cl-generic's namesakes since they have different calling conventions, +;; which means that packages that (defmethod no-next-method ..) don't work. +;; - EIEIO's `call-next-method' and `next-method-p' had dynamic scope whereas +;; cl-generic's `cl-next-method-p' and `cl-call-next-method' are lexically +;; scoped. + +;;; Code: + +(require 'eieio-core) +(require 'cl-generic) + +(put 'eieio--defalias 'byte-hunk-handler + #'byte-compile-file-form-defalias) ;;(get 'defalias 'byte-hunk-handler) +;;;###autoload +(defun eieio--defalias (name body) + "Like `defalias', but with less side-effects. +More specifically, it has no side-effects at all when the new function +definition is the same (`eq') as the old one." + (cl-assert (not (symbolp body))) + (while (and (fboundp name) (symbolp (symbol-function name))) + ;; Follow aliases, so methods applied to obsolete aliases still work. + (setq name (symbol-function name))) + (unless (and (fboundp name) + (eq (symbol-function name) body)) + (defalias name body))) + +;;;###autoload +(defmacro defgeneric (method args &optional doc-string) + "Create a generic function METHOD. +DOC-STRING is the base documentation for this class. A generic +function has no body, as its purpose is to decide which method body +is appropriate to use. Uses `defmethod' to create methods, and calls +`defgeneric' for you. With this implementation the ARGS are +currently ignored. You can use `defgeneric' to apply specialized +top level documentation to a method." + (declare (doc-string 3) (obsolete cl-defgeneric "25.1")) + `(eieio--defalias ',method + (eieio--defgeneric-init-form + ',method + ,(if doc-string (help-add-fundoc-usage doc-string args))))) + +;;;###autoload +(defmacro defmethod (method &rest args) + "Create a new METHOD through `defgeneric' with ARGS. + +The optional second argument KEY is a specifier that +modifies how the method is called, including: + :before - Method will be called before the :primary + :primary - The default if not specified + :after - Method will be called after the :primary + :static - First arg could be an object or class +The next argument is the ARGLIST. The ARGLIST specifies the arguments +to the method as with `defun'. The first argument can have a type +specifier, such as: + ((VARNAME CLASS) ARG2 ...) +where VARNAME is the name of the local variable for the method being +created. The CLASS is a class symbol for a class made with `defclass'. +A DOCSTRING comes after the ARGLIST, and is optional. +All the rest of the args are the BODY of the method. A method will +return the value of the last form in the BODY. + +Summary: + + (defmethod mymethod [:before | :primary | :after | :static] + ((typearg class-name) arg2 &optional opt &rest rest) + \"doc-string\" + body)" + (declare (doc-string 3) (obsolete cl-defmethod "25.1") + (debug + (&define ; this means we are defining something + [&or name ("setf" :name setf name)] + ;; ^^ This is the methods symbol + [ &optional symbolp ] ; this is key :before etc + list ; arguments + [ &optional stringp ] ; documentation string + def-body ; part to be debugged + ))) + (let* ((key (if (keywordp (car args)) (pop args))) + (params (car args)) + (arg1 (car params)) + (fargs (if (consp arg1) + (cons (car arg1) (cdr params)) + params)) + (class (if (consp arg1) (nth 1 arg1))) + (code `(lambda ,fargs ,@(cdr args)))) + `(progn + ;; Make sure there is a generic and the byte-compiler sees it. + (defgeneric ,method ,args) + (eieio--defmethod ',method ',key ',class #',code)))) + +(add-function :before-until cl-generic-tagcode-function + #'eieio--generic-static-tagcode) +(defun eieio--generic-static-tagcode (type name) + (and (eq 'eieio--static (car-safe type)) + `(40 . (cond + ((symbolp ,name) (eieio--class-v ,name)) + ((vectorp ,name) (aref ,name 0)))))) + +(add-function :around cl-generic-tag-types-function + #'eieio--generic-static-tag-types) +(defun eieio--generic-static-tag-types (orig-fun tag) + (cond + ((or (eieio--class-p tag) + (and (symbolp tag) (boundp tag) (eieio--class-p (symbol-value tag)))) + (let ((superclasses (funcall orig-fun tag)) + (types ())) + ;; Interleave: (subclass ) (eieio--static ) ) .. + (dolist (superclass superclasses) + (push superclass types) + (push `(eieio--static + ,(if (consp superclass) (cadr superclass) superclass)) + types)) + (nreverse types))) + (t (funcall orig-fun tag)))) + +;;;###autoload +(defun eieio--defgeneric-init-form (method doc-string) + (if doc-string (put method 'function-documentation doc-string)) + (if (memq method '(no-next-method no-applicable-method)) + (symbol-function method) + (let ((generic (cl-generic-ensure-function method))) + (symbol-function (cl--generic-name generic))))) + +;;;###autoload +(defun eieio--defmethod (method kind argclass code) + (setq kind (intern (downcase (symbol-name kind)))) + (let* ((specializer (if (not (eq kind :static)) + (or argclass t) + (setq kind nil) + `(eieio--static ,argclass))) + (uses-cnm (not (memq kind '(:before :after)))) + (specializers `((arg ,specializer))) + (code + ;; Backward compatibility for `no-next-method' and + ;; `no-applicable-method', which have slightly different calling + ;; convention than their cl-generic counterpart. + (pcase method + (`no-next-method + (setq method 'cl-no-next-method) + (setq specializers `(generic method ,@specializers)) + (lambda (_generic _method &rest args) (apply code args))) + (`no-applicable-method + (setq method 'cl-no-applicable-method) + (setq specializers `(generic ,@specializers)) + (lambda (generic arg &rest args) (apply code arg generic args))) + (_ code)))) + (cl-generic-define-method + method (if kind (list kind)) specializers uses-cnm + (if uses-cnm + (let* ((docstring (documentation code 'raw)) + (args (help-function-arglist code 'preserve-names)) + (doc-only (if docstring + (let ((split (help-split-fundoc docstring nil))) + (if split (cdr split) docstring)))) + (new-docstring (help-add-fundoc-usage doc-only + (cons 'cl-cnm args)))) + ;; FIXME: ¡Add the new-docstring to those closures! + (lambda (cnm &rest args) + (cl-letf (((symbol-function 'call-next-method) cnm) + ((symbol-function 'next-method-p) + (lambda () (cl--generic-isnot-nnm-p cnm)))) + (apply code args)))) + code)))) + +;; Compatibility with code which tries to catch `no-method-definition' errors. +(push 'no-method-definition (get 'cl-no-applicable-method 'error-conditions)) + +(defun generic-p (fname) (not (null (cl--generic fname)))) + +(defun no-next-method (&rest args) + (declare (obsolete cl-no-next-method "25.1")) + (apply #'cl-no-next-method 'unknown nil args)) + +(defun no-applicable-method (object method &rest args) + (declare (obsolete cl-no-applicable-method "25.1")) + (apply #'cl-no-applicable-method method object args)) + +(define-obsolete-function-alias 'call-next-method 'cl-call-next-method "25.1") +(define-obsolete-function-alias 'next-method-p 'cl-next-method-p "25.1") + +;;;###autoload +(defun eieio-defmethod (method args) + "Obsolete work part of an old version of the `defmethod' macro." + (declare (obsolete cl-defmethod "24.1")) + (eval `(defmethod ,method ,@args)) + method) + +;;;###autoload +(defun eieio-defgeneric (method doc-string) + "Obsolete work part of an old version of the `defgeneric' macro." + (declare (obsolete cl-defgeneric "24.1")) + ;; Don't do this over and over. + (unless (fboundp 'method) + (eval `(defgeneric ,method (x) ,@(if doc-string `(,doc-string)))) + ;; Return the method + 'method)) + +;;;###autoload +(defun eieio-defclass (cname superclasses slots options) + (declare (obsolete eieio-defclass-internal "25.1")) + (eval `(defclass ,cname ,superclasses ,slots ,@options))) + + +;; Local Variables: +;; generated-autoload-file: "eieio-core.el" +;; End: + +(provide 'eieio-compat) + +;;; eieio-compat.el ends here diff --git a/lisp/emacs-lisp/eieio-core.el b/lisp/emacs-lisp/eieio-core.el index e4221e4..b89ccfd 100644 --- a/lisp/emacs-lisp/eieio-core.el +++ b/lisp/emacs-lisp/eieio-core.el @@ -1025,20 +1025,6 @@ Fills in the default value in CLASS' in SLOT with VALUE." ;;; EIEIO internal search functions ;; -(defun eieio--slot-originating-class-p (start-class slot) - "Return non-nil if START-CLASS is the first class to define SLOT. -This is for testing if the class currently in scope is the class that defines SLOT -so that we can protect private slots." - (let ((par (eieio--class-parent start-class)) - (ret t)) - (or (not par) - (progn - (while (and par ret) - (if (gethash slot (eieio--class-symbol-hashtable (car par))) - (setq ret nil)) - (setq par (cdr par))) - ret)))) - (defun eieio--slot-name-index (class obj slot) "In CLASS for OBJ find the index of the named SLOT. The slot is a symbol which is installed in CLASS by the `defclass' @@ -1271,13 +1257,76 @@ method invocation orders of the involved classes." ,(if (symbolp class) class (eieio--class-symbol class)))) (eieio--class-precedence-list tag)))) -;;; Backward compatibility functions -;; To support .elc files compiled for older versions of EIEIO. + +;;;### (autoloads nil "eieio-compat" "eieio-compat.el" "b177169dfbad7fb2e9d500b9c40002fa") +;;; Generated autoloads from eieio-compat.el + +(autoload 'eieio--defalias "eieio-compat" "\ +Like `defalias', but with less side-effects. +More specifically, it has no side-effects at all when the new function +definition is the same (`eq') as the old one. + +\(fn NAME BODY)" nil nil) + +(autoload 'defgeneric "eieio-compat" "\ +Create a generic function METHOD. +DOC-STRING is the base documentation for this class. A generic +function has no body, as its purpose is to decide which method body +is appropriate to use. Uses `defmethod' to create methods, and calls +`defgeneric' for you. With this implementation the ARGS are +currently ignored. You can use `defgeneric' to apply specialized +top level documentation to a method. + +\(fn METHOD ARGS &optional DOC-STRING)" nil t) + +(function-put 'defgeneric 'doc-string-elt '3) + +(make-obsolete 'defgeneric 'cl-defgeneric '"25.1") + +(autoload 'defmethod "eieio-compat" "\ +Create a new METHOD through `defgeneric' with ARGS. + +The optional second argument KEY is a specifier that +modifies how the method is called, including: + :before - Method will be called before the :primary + :primary - The default if not specified + :after - Method will be called after the :primary + :static - First arg could be an object or class +The next argument is the ARGLIST. The ARGLIST specifies the arguments +to the method as with `defun'. The first argument can have a type +specifier, such as: + ((VARNAME CLASS) ARG2 ...) +where VARNAME is the name of the local variable for the method being +created. The CLASS is a class symbol for a class made with `defclass'. +A DOCSTRING comes after the ARGLIST, and is optional. +All the rest of the args are the BODY of the method. A method will +return the value of the last form in the BODY. + +Summary: -(defun eieio-defclass (cname superclasses slots options) - (declare (obsolete eieio-defclass-internal "25.1")) - (eval `(defclass ,cname ,superclasses ,slots ,@options))) + (defmethod mymethod [:before | :primary | :after | :static] + ((typearg class-name) arg2 &optional opt &rest rest) + \"doc-string\" + body) +\(fn METHOD &rest ARGS)" nil t) + +(function-put 'defmethod 'doc-string-elt '3) + +(make-obsolete 'defmethod 'cl-defmethod '"25.1") + +(autoload 'eieio--defgeneric-init-form "eieio-compat" "\ + + +\(fn METHOD DOC-STRING)" nil nil) + +(autoload 'eieio--defmethod "eieio-compat" "\ + + +\(fn METHOD KIND ARGCLASS CODE)" nil nil) + +;;;*** + (provide 'eieio-core) diff --git a/lisp/emacs-lisp/eieio-generic.el b/lisp/emacs-lisp/eieio-generic.el deleted file mode 100644 index 74ecefe..0000000 --- a/lisp/emacs-lisp/eieio-generic.el +++ /dev/null @@ -1,907 +0,0 @@ -;;; eieio-generic.el --- CLOS-style generics for EIEIO -*- lexical-binding:t -*- - -;; Copyright (C) 1995-1996, 1998-2015 Free Software Foundation, Inc. - -;; Author: Eric M. Ludlam -;; Keywords: OO, lisp - -;; This file is part of GNU Emacs. - -;; GNU Emacs is free software: you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; GNU Emacs is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs. If not, see . - -;;; Commentary: -;; -;; The "core" part of EIEIO is the implementation for the object -;; system (such as eieio-defclass, or eieio-defmethod) but not the -;; base classes for the object system, which are defined in EIEIO. -;; -;; See the commentary for eieio.el for more about EIEIO itself. - -;;; Code: - -(require 'eieio-core) -(declare-function child-of-class-p "eieio") - -(put 'eieio--defalias 'byte-hunk-handler - #'byte-compile-file-form-defalias) ;;(get 'defalias 'byte-hunk-handler) -(defun eieio--defalias (name body) - "Like `defalias', but with less side-effects. -More specifically, it has no side-effects at all when the new function -definition is the same (`eq') as the old one." - (while (and (fboundp name) (symbolp (symbol-function name))) - ;; Follow aliases, so methods applied to obsolete aliases still work. - (setq name (symbol-function name))) - (unless (and (fboundp name) - (eq (symbol-function name) body)) - (defalias name body))) - -(defconst eieio--method-static 0 "Index into :static tag on a method.") -(defconst eieio--method-before 1 "Index into :before tag on a method.") -(defconst eieio--method-primary 2 "Index into :primary tag on a method.") -(defconst eieio--method-after 3 "Index into :after tag on a method.") -(defconst eieio--method-num-lists 4 "Number of indexes into methods vector in which groups of functions are kept.") -(defconst eieio--method-generic-before 4 "Index into generic :before tag on a method.") -(defconst eieio--method-generic-primary 5 "Index into generic :primary tag on a method.") -(defconst eieio--method-generic-after 6 "Index into generic :after tag on a method.") -(defconst eieio--method-num-slots 7 "Number of indexes into a method's vector.") - -(defsubst eieio--specialized-key-to-generic-key (key) - "Convert a specialized KEY into a generic method key." - (cond ((eq key eieio--method-static) 0) ;; don't convert - ((< key eieio--method-num-lists) (+ key 3)) ;; The conversion - (t key) ;; already generic.. maybe. - )) - - -(defsubst generic-p (method) - "Return non-nil if symbol METHOD is a generic function. -Only methods have the symbol `eieio-method-hashtable' as a property -\(which contains a list of all bindings to that method type.)" - (and (fboundp method) (get method 'eieio-method-hashtable))) - -(defun eieio--generic-primary-only-p (method) - "Return t if symbol METHOD is a generic function with only primary methods. -Only methods have the symbol `eieio-method-hashtable' as a property (which -contains a list of all bindings to that method type.) -Methods with only primary implementations are executed in an optimized way." - (and (generic-p method) - (let ((M (get method 'eieio-method-tree))) - (not (or (>= 0 (length (aref M eieio--method-primary))) - (aref M eieio--method-static) - (aref M eieio--method-before) - (aref M eieio--method-after) - (aref M eieio--method-generic-before) - (aref M eieio--method-generic-primary) - (aref M eieio--method-generic-after))) - ))) - -(defun eieio--generic-primary-only-one-p (method) - "Return t if symbol METHOD is a generic function with only primary methods. -Only methods have the symbol `eieio-method-hashtable' as a property (which -contains a list of all bindings to that method type.) -Methods with only primary implementations are executed in an optimized way." - (and (generic-p method) - (let ((M (get method 'eieio-method-tree))) - (not (or (/= 1 (length (aref M eieio--method-primary))) - (aref M eieio--method-static) - (aref M eieio--method-before) - (aref M eieio--method-after) - (aref M eieio--method-generic-before) - (aref M eieio--method-generic-primary) - (aref M eieio--method-generic-after))) - ))) - -(defun eieio--defgeneric-init-form (method doc-string) - "Form to use for the initial definition of a generic." - (while (and (fboundp method) (symbolp (symbol-function method))) - ;; Follow aliases, so methods applied to obsolete aliases still work. - (setq method (symbol-function method))) - - (cond - ((or (not (fboundp method)) - (autoloadp (symbol-function method))) - ;; Make sure the method tables are installed. - (eieio--mt-install method) - ;; Construct the actual body of this function. - (if doc-string (put method 'function-documentation doc-string)) - (eieio--defgeneric-form method)) - ((generic-p method) (symbol-function method)) ;Leave it as-is. - (t (error "You cannot create a generic/method over an existing symbol: %s" - method)))) - -(defun eieio--defgeneric-form (method) - "The lambda form that would be used as the function defined on METHOD. -All methods should call the same EIEIO function for dispatch. -DOC-STRING is the documentation attached to METHOD." - (lambda (&rest local-args) - (eieio--generic-call method local-args))) - -(defun eieio--defgeneric-form-primary-only (method) - "The lambda form that would be used as the function defined on METHOD. -All methods should call the same EIEIO function for dispatch. -DOC-STRING is the documentation attached to METHOD." - (lambda (&rest local-args) - (eieio--generic-call-primary-only method local-args))) - -(defvar eieio--generic-call-arglst nil - "When using `call-next-method', provides a context for parameters.") -(defvar eieio--generic-call-key nil - "When using `call-next-method', provides a context for the current key. -Keys are a number representing :before, :primary, and :after methods.") -(defvar eieio--generic-call-next-method-list nil - "When executing a PRIMARY or STATIC method, track the 'next-method'. -During executions, the list is first generated, then as each next method -is called, the next method is popped off the stack.") - -(defun eieio--defgeneric-form-primary-only-one (method class impl) - "The lambda form that would be used as the function defined on METHOD. -All methods should call the same EIEIO function for dispatch. -CLASS is the class symbol needed for private method access. -IMPL is the symbol holding the method implementation." - (lambda (&rest local-args) - ;; This is a cool cheat. Usually we need to look up in the - ;; method table to find out if there is a method or not. We can - ;; instead make that determination at load time when there is - ;; only one method. If the first arg is not a child of the class - ;; of that one implementation, then clearly, there is no method def. - (if (not (eieio-object-p (car local-args))) - ;; Not an object. Just signal. - (signal 'no-method-definition - (list method local-args)) - - ;; We do have an object. Make sure it is the right type. - (if (not (child-of-class-p (eieio--object-class-object (car local-args)) - class)) - - ;; If not the right kind of object, call no applicable - (apply #'no-applicable-method (car local-args) - method local-args) - - ;; It is ok, do the call. - ;; Fill in inter-call variables then evaluate the method. - (let ((eieio--generic-call-next-method-list nil) - (eieio--generic-call-key eieio--method-primary) - (eieio--generic-call-arglst local-args) - ) - (apply impl local-args)))))) - -(defun eieio-unbind-method-implementations (method) - "Make the generic method METHOD have no implementations. -It will leave the original generic function in place, -but remove reference to all implementations of METHOD." - (put method 'eieio-method-tree nil) - (put method 'eieio-method-hashtable nil)) - -(defun eieio--method-optimize-primary (method) - (when eieio-optimize-primary-methods-flag - ;; Optimizing step: - ;; - ;; If this method, after this setup, only has primary methods, then - ;; we can setup the generic that way. - ;; Use `defalias' so as to interact properly with nadvice.el. - (defalias method - (if (eieio--generic-primary-only-p method) - ;; If there is only one primary method, then we can go one more - ;; optimization step. - (if (eieio--generic-primary-only-one-p method) - (let* ((M (get method 'eieio-method-tree)) - (entry (car (aref M eieio--method-primary)))) - (eieio--defgeneric-form-primary-only-one - method (car entry) (cdr entry))) - (eieio--defgeneric-form-primary-only method)) - (eieio--defgeneric-form method))))) - -(defun eieio--defmethod (method kind argclass code) - "Work part of the `defmethod' macro defining METHOD with ARGS." - (let ((key - ;; Find optional keys. - (cond ((memq kind '(:BEFORE :before)) eieio--method-before) - ((memq kind '(:AFTER :after)) eieio--method-after) - ((memq kind '(:STATIC :static)) eieio--method-static) - ((memq kind '(:PRIMARY :primary nil)) eieio--method-primary) - ;; Primary key. - ;; (t eieio--method-primary) - (t (error "Unknown method kind %S" kind))))) - - (while (and (fboundp method) (symbolp (symbol-function method))) - ;; Follow aliases, so methods applied to obsolete aliases still work. - (setq method (symbol-function method))) - - ;; Make sure there is a generic (when called from defclass). - (eieio--defalias - method (eieio--defgeneric-init-form - method (or (documentation code) - (format "Generically created method `%s'." method)))) - ;; Create symbol for property to bind to. If the first arg is of - ;; the form (varname vartype) and `vartype' is a class, then - ;; that class will be the type symbol. If not, then it will fall - ;; under the type `primary' which is a non-specific calling of the - ;; function. - (if argclass - (if (not (class-p argclass)) ;FIXME: Accept cl-defstructs! - (error "Unknown class type %s in method parameters" - argclass)) - ;; Generics are higher. - (setq key (eieio--specialized-key-to-generic-key key))) - ;; Put this lambda into the symbol so we can find it. - (eieio--mt-add method code key argclass) - ) - - (eieio--method-optimize-primary method) - - method) - -(define-obsolete-variable-alias 'eieio-pre-method-execution-hooks - 'eieio-pre-method-execution-functions "24.3") -(defvar eieio-pre-method-execution-functions nil - "Abnormal hook run just before an EIEIO method is executed. -The hook function must accept one argument, the list of forms -about to be executed.") - -(defun eieio--generic-call (method args) - "Call METHOD with ARGS. -ARGS provides the context on which implementation to use. -This should only be called from a generic function." - ;; We must expand our arguments first as they are always - ;; passed in as quoted symbols - (let ((newargs nil) (mclass nil) (lambdas nil) (tlambdas nil) (keys nil) - (eieio--generic-call-arglst args) - (firstarg nil) - (primarymethodlist nil)) - ;; get a copy - (setq newargs args - firstarg (car newargs)) - ;; Is the class passed in autoloaded? - ;; Since class names are also constructors, they can be autoloaded - ;; via the autoload command. Check for this, and load them in. - ;; It is ok if it doesn't turn out to be a class. Probably want that - ;; function loaded anyway. - (if (and (symbolp firstarg) - (fboundp firstarg) - (autoloadp (symbol-function firstarg))) - (autoload-do-load (symbol-function firstarg))) - ;; Determine the class to use. - (cond ((eieio-object-p firstarg) - (setq mclass (eieio--object-class-name firstarg))) - ((class-p firstarg) - (setq mclass firstarg)) - ) - ;; Make sure the class is a valid class - ;; mclass can be nil (meaning a generic for should be used. - ;; mclass cannot have a value that is not a class, however. - (unless (or (null mclass) (class-p mclass)) - (error "Cannot dispatch method %S on class %S" - method mclass) - ) - ;; Now create a list in reverse order of all the calls we have - ;; make in order to successfully do this right. Rules: - ;; 1) Only call static if this is a static method. - ;; 2) Only call specifics if the definition allows for them. - ;; 3) Call in order based on :before, :primary, and :after - (when (eieio-object-p firstarg) - ;; Non-static calls do all this stuff. - - ;; :after methods - (setq tlambdas - (if mclass - (eieio--mt-method-list method eieio--method-after mclass) - (list (eieio--generic-form method eieio--method-after nil))) - ;;(or (and mclass (eieio--generic-form method eieio--method-after mclass)) - ;; (eieio--generic-form method eieio--method-after nil)) - ) - (setq lambdas (append tlambdas lambdas) - keys (append (make-list (length tlambdas) eieio--method-after) keys)) - - ;; :primary methods - (setq tlambdas - (or (and mclass (eieio--generic-form method eieio--method-primary mclass)) - (eieio--generic-form method eieio--method-primary nil))) - (when tlambdas - (setq lambdas (cons tlambdas lambdas) - keys (cons eieio--method-primary keys) - primarymethodlist - (eieio--mt-method-list method eieio--method-primary mclass))) - - ;; :before methods - (setq tlambdas - (if mclass - (eieio--mt-method-list method eieio--method-before mclass) - (list (eieio--generic-form method eieio--method-before nil))) - ;;(or (and mclass (eieio--generic-form method eieio--method-before mclass)) - ;; (eieio--generic-form method eieio--method-before nil)) - ) - (setq lambdas (append tlambdas lambdas) - keys (append (make-list (length tlambdas) eieio--method-before) keys)) - ) - - (if mclass - ;; For the case of a class, - ;; if there were no methods found, then there could be :static methods. - (when (not lambdas) - (setq tlambdas - (eieio--generic-form method eieio--method-static mclass)) - (setq lambdas (cons tlambdas lambdas) - keys (cons eieio--method-static keys) - primarymethodlist ;; Re-use even with bad name here - (eieio--mt-method-list method eieio--method-static mclass))) - ;; For the case of no class (ie - mclass == nil) then there may - ;; be a primary method. - (setq tlambdas - (eieio--generic-form method eieio--method-primary nil)) - (when tlambdas - (setq lambdas (cons tlambdas lambdas) - keys (cons eieio--method-primary keys) - primarymethodlist - (eieio--mt-method-list method eieio--method-primary nil))) - ) - - (run-hook-with-args 'eieio-pre-method-execution-functions - primarymethodlist) - - ;; Now loop through all occurrences forms which we must execute - ;; (which are happily sorted now) and execute them all! - (let ((rval nil) (lastval nil) (found nil)) - (while lambdas - (if (car lambdas) - (let* ((eieio--generic-call-key (car keys)) - (has-return-val - (or (= eieio--generic-call-key eieio--method-primary) - (= eieio--generic-call-key eieio--method-static))) - (eieio--generic-call-next-method-list - ;; Use the cdr, as the first element is the fcn - ;; we are calling right now. - (when has-return-val (cdr primarymethodlist))) - ) - (setq found t) - ;;(setq rval (apply (car (car lambdas)) newargs)) - (setq lastval (apply (car (car lambdas)) newargs)) - (when has-return-val - (setq rval lastval)) - )) - (setq lambdas (cdr lambdas) - keys (cdr keys))) - (if (not found) - (if (eieio-object-p (car args)) - (setq rval (apply #'no-applicable-method (car args) method args)) - (signal - 'no-method-definition - (list method args)))) - rval))) - -(defun eieio--generic-call-primary-only (method args) - "Call METHOD with ARGS for methods with only :PRIMARY implementations. -ARGS provides the context on which implementation to use. -This should only be called from a generic function. - -This method is like `eieio--generic-call', but only -implementations in the :PRIMARY slot are queried. After many -years of use, it appears that over 90% of methods in use -have :PRIMARY implementations only. We can therefore optimize -for this common case to improve performance." - ;; We must expand our arguments first as they are always - ;; passed in as quoted symbols - (let ((newargs nil) (mclass nil) (lambdas nil) - (eieio--generic-call-arglst args) - (firstarg nil) - (primarymethodlist nil) - ) - ;; get a copy - (setq newargs args - firstarg (car newargs)) - - ;; Determine the class to use. - (cond ((eieio-object-p firstarg) - (setq mclass (eieio--object-class-name firstarg))) - ((not firstarg) - (error "Method %s called on nil" method)) - (t - (error "Primary-only method %s called on something not an object" method))) - ;; Make sure the class is a valid class - ;; mclass can be nil (meaning a generic for should be used. - ;; mclass cannot have a value that is not a class, however. - (when (null mclass) - (error "Cannot dispatch method %S on class %S" method mclass) - ) - - ;; :primary methods - (setq lambdas (eieio--generic-form method eieio--method-primary mclass)) - (setq primarymethodlist ;; Re-use even with bad name here - (eieio--mt-method-list method eieio--method-primary mclass)) - - ;; Now loop through all occurrences forms which we must execute - ;; (which are happily sorted now) and execute them all! - (let* ((rval nil) (lastval nil) - (eieio--generic-call-key eieio--method-primary) - ;; Use the cdr, as the first element is the fcn - ;; we are calling right now. - (eieio--generic-call-next-method-list (cdr primarymethodlist)) - ) - - (if (or (not lambdas) (not (car lambdas))) - - ;; No methods found for this impl... - (if (eieio-object-p (car args)) - (setq rval (apply #'no-applicable-method - (car args) method args)) - (signal - 'no-method-definition - (list method args))) - - ;; Do the regular implementation here. - - (run-hook-with-args 'eieio-pre-method-execution-functions - lambdas) - - (setq lastval (apply (car lambdas) newargs)) - (setq rval lastval)) - - rval))) - -(defun eieio--mt-method-list (method key class) - "Return an alist list of methods lambdas. -METHOD is the method name. -KEY represents either :before, or :after methods. -CLASS is the starting class to search from in the method tree. -If CLASS is nil, then an empty list of methods should be returned." - ;; Note: eieiomt - the MT means MethodTree. See more comments below - ;; for the rest of the eieiomt methods. - - ;; Collect lambda expressions stored for the class and its parent - ;; classes. - (let (lambdas) - (dolist (ancestor (eieio--class-precedence-list (eieio--class-v class))) - ;; Lookup the form to use for the PRIMARY object for the next level - (let ((tmpl (eieio--generic-form method key ancestor))) - (when (and tmpl - (or (not lambdas) - ;; This prevents duplicates coming out of the - ;; class method optimizer. Perhaps we should - ;; just not optimize before/afters? - (not (member tmpl lambdas)))) - (push tmpl lambdas)))) - - ;; Return collected lambda. For :after methods, return in current - ;; order (most general class last); Otherwise, reverse order. - (if (eq key eieio--method-after) - lambdas - (nreverse lambdas)))) - - -;;; -;; eieio-method-tree : eieio--mt- -;; -;; Stored as eieio-method-tree in property list of a generic method -;; -;; (eieio-method-tree . [BEFORE PRIMARY AFTER -;; genericBEFORE genericPRIMARY genericAFTER]) -;; and -;; (eieio-method-hashtable . [BEFORE PRIMARY AFTER -;; genericBEFORE genericPRIMARY genericAFTER]) -;; where the association is a vector. -;; (aref 0 -- all static methods. -;; (aref 1 -- all methods classified as :before -;; (aref 2 -- all methods classified as :primary -;; (aref 3 -- all methods classified as :after -;; (aref 4 -- a generic classified as :before -;; (aref 5 -- a generic classified as :primary -;; (aref 6 -- a generic classified as :after -;; -(defvar eieio--mt--optimizing-hashtable nil - "While mapping atoms, this contain the hashtable being optimized.") - -(defun eieio--mt-install (method-name) - "Install the method tree, and hashtable onto METHOD-NAME. -Do not do the work if they already exist." - (unless (and (get method-name 'eieio-method-tree) - (get method-name 'eieio-method-hashtable)) - (put method-name 'eieio-method-tree - (make-vector eieio--method-num-slots nil)) - (let ((emto (put method-name 'eieio-method-hashtable - (make-vector eieio--method-num-slots nil)))) - (aset emto 0 (make-hash-table :test 'eq)) - (aset emto 1 (make-hash-table :test 'eq)) - (aset emto 2 (make-hash-table :test 'eq)) - (aset emto 3 (make-hash-table :test 'eq))))) - -(defun eieio--mt-add (method-name method key class) - "Add to METHOD-NAME the forms METHOD in a call position KEY for CLASS. -METHOD-NAME is the name created by a call to `defgeneric'. -METHOD are the forms for a given implementation. -KEY is an integer (see comment in eieio.el near this function) which -is associated with the :static :before :primary and :after tags. -It also indicates if CLASS is defined or not. -CLASS is the class this method is associated with." - (if (or (> key eieio--method-num-slots) (< key 0)) - (error "eieio--mt-add: method key error!")) - (let ((emtv (get method-name 'eieio-method-tree)) - (emto (get method-name 'eieio-method-hashtable))) - ;; Make sure the method tables are available. - (unless (and emtv emto) - (error "Programmer error: eieio--mt-add")) - ;; only add new cells on if it doesn't already exist! - (if (assq class (aref emtv key)) - (setcdr (assq class (aref emtv key)) method) - (aset emtv key (cons (cons class method) (aref emtv key)))) - ;; Add function definition into newly created symbol, and store - ;; said symbol in the correct hashtable, otherwise use the - ;; other array to keep this stuff. - (if (< key eieio--method-num-lists) - (puthash (eieio--class-v class) (list method) (aref emto key))) - ;; Save the defmethod file location in a symbol property. - (let ((fname (if load-in-progress - load-file-name - buffer-file-name))) - (when fname - (when (string-match "\\.elc\\'" fname) - (setq fname (substring fname 0 (1- (length fname))))) - (cl-pushnew (list class fname) (get method-name 'method-locations) - :test 'equal))) - ;; Now optimize the entire hashtable. - (if (< key eieio--method-num-lists) - (let ((eieio--mt--optimizing-hashtable (aref emto key))) - ;; @todo - Is this overkill? Should we just clear the symbol? - (maphash #'eieio--mt--sym-optimize eieio--mt--optimizing-hashtable))) - )) - -(defun eieio--mt-next (class) - "Return the next parent class for CLASS. -If CLASS is a superclass, return variable `eieio-default-superclass'. -If CLASS is variable `eieio-default-superclass' then return nil. -This is different from function `class-parent' as class parent returns -nil for superclasses. This function performs no type checking!" - ;; No type-checking because all calls are made from functions which - ;; are safe and do checking for us. - (or (eieio--class-parent (eieio--class-v class)) - (if (eq class 'eieio-default-superclass) - nil - '(eieio-default-superclass)))) - -(defun eieio--mt--sym-optimize (class s) - "Find the next class above S which has a function body for the optimizer." - ;; Set the value to nil in case there is no nearest cell. - (setcdr s nil) - ;; Find the nearest cell that has a function body. If we find one, - ;; we replace the nil from above. - (catch 'done - (dolist (ancestor - (cl-rest (eieio--class-precedence-list class))) - (let ((ov (gethash ancestor eieio--mt--optimizing-hashtable))) - (when (car ov) - (setcdr s ancestor) ;; store ov as our next symbol - (throw 'done ancestor)))))) - -(defun eieio--generic-form (method key class) - "Return the lambda form belonging to METHOD using KEY based upon CLASS. -If CLASS is not a class then use `generic' instead. If class has -no form, but has a parent class, then trace to that parent class. -The first time a form is requested from a symbol, an optimized path -is memorized for faster future use." - (if (symbolp class) (setq class (eieio--class-v class))) - (let ((emto (aref (get method 'eieio-method-hashtable) - (if class key (eieio--specialized-key-to-generic-key key))))) - (if (eieio--class-p class) - ;; 1) find our symbol - (let ((cs (gethash class emto))) - (unless cs - ;; 2) If there isn't one, then make one. - ;; This can be slow since it only occurs once - (puthash class (setq cs (list nil)) emto) - ;; 2.1) Cache its nearest neighbor with a quick optimize - ;; which should only occur once for this call ever - (let ((eieio--mt--optimizing-hashtable emto)) - (eieio--mt--sym-optimize class cs))) - ;; 3) If it's bound return this one. - (if (car cs) - (cons (car cs) class) - ;; 4) If it's not bound then this variable knows something - (if (cdr cs) - (progn - ;; 4.1) This symbol holds the next class in its value - (setq class (cdr cs) - cs (gethash class emto)) - ;; 4.2) The optimizer should always have chosen a - ;; function-symbol - ;;(if (car cs) - (cons (car cs) class) - ;;(error "EIEIO optimizer: erratic data loss!")) - ) - ;; There never will be a funcall... - nil))) - ;; for a generic call, what is a list, is the function body we want. - (let ((emtl (aref (get method 'eieio-method-tree) - (if class key (eieio--specialized-key-to-generic-key key))))) - (if emtl - ;; The car of EMTL is supposed to be a class, which in this - ;; case is nil, so skip it. - (cons (cdr (car emtl)) nil) - nil))))) - - -(define-error 'no-method-definition "No method definition") -(define-error 'no-next-method "No next method") - -;;; CLOS methods and generics -;; -(defmacro defgeneric (method args &optional doc-string) - "Create a generic function METHOD. -DOC-STRING is the base documentation for this class. A generic -function has no body, as its purpose is to decide which method body -is appropriate to use. Uses `defmethod' to create methods, and calls -`defgeneric' for you. With this implementation the ARGS are -currently ignored. You can use `defgeneric' to apply specialized -top level documentation to a method." - (declare (doc-string 3)) - `(eieio--defalias ',method - (eieio--defgeneric-init-form - ',method - ,(if doc-string (help-add-fundoc-usage doc-string args))))) - -(defmacro defmethod (method &rest args) - "Create a new METHOD through `defgeneric' with ARGS. - -The optional second argument KEY is a specifier that -modifies how the method is called, including: - :before - Method will be called before the :primary - :primary - The default if not specified - :after - Method will be called after the :primary - :static - First arg could be an object or class -The next argument is the ARGLIST. The ARGLIST specifies the arguments -to the method as with `defun'. The first argument can have a type -specifier, such as: - ((VARNAME CLASS) ARG2 ...) -where VARNAME is the name of the local variable for the method being -created. The CLASS is a class symbol for a class made with `defclass'. -A DOCSTRING comes after the ARGLIST, and is optional. -All the rest of the args are the BODY of the method. A method will -return the value of the last form in the BODY. - -Summary: - - (defmethod mymethod [:before | :primary | :after | :static] - ((typearg class-name) arg2 &optional opt &rest rest) - \"doc-string\" - body)" - (declare (doc-string 3) - (debug - (&define ; this means we are defining something - [&or name ("setf" :name setf name)] - ;; ^^ This is the methods symbol - [ &optional symbolp ] ; this is key :before etc - list ; arguments - [ &optional stringp ] ; documentation string - def-body ; part to be debugged - ))) - (let* ((key (if (keywordp (car args)) (pop args))) - (params (car args)) - (arg1 (car params)) - (fargs (if (consp arg1) - (cons (car arg1) (cdr params)) - params)) - (class (if (consp arg1) (nth 1 arg1))) - (code `(lambda ,fargs ,@(cdr args)))) - `(progn - ;; Make sure there is a generic and the byte-compiler sees it. - (defgeneric ,method ,args) - (eieio--defmethod ',method ',key ',class #',code)))) - - - -;;; -;; Method Calling Functions - -(defun next-method-p () - "Return non-nil if there is a next method. -Returns a list of lambda expressions which is the `next-method' -order." - eieio--generic-call-next-method-list) - -(defun call-next-method (&rest replacement-args) - "Call the superclass method from a subclass method. -The superclass method is specified in the current method list, -and is called the next method. - -If REPLACEMENT-ARGS is non-nil, then use them instead of -`eieio--generic-call-arglst'. The generic arg list are the -arguments passed in at the top level. - -Use `next-method-p' to find out if there is a next method to call." - (if (and (/= eieio--generic-call-key eieio--method-primary) - (/= eieio--generic-call-key eieio--method-static)) - (error "Cannot `call-next-method' except in :primary or :static methods") - ) - (let ((newargs (or replacement-args eieio--generic-call-arglst)) - (next (car eieio--generic-call-next-method-list)) - ) - (if (not (and next (car next))) - (apply #'no-next-method newargs) - (let* ((eieio--generic-call-next-method-list - (cdr eieio--generic-call-next-method-list)) - (eieio--generic-call-arglst newargs) - (fcn (car next)) - ) - (apply fcn newargs)) ))) - -(defgeneric no-applicable-method (object method &rest args) - "Called if there are no implementations for OBJECT in METHOD.") - -(defmethod no-applicable-method (object method &rest _args) - "Called if there are no implementations for OBJECT in METHOD. -OBJECT is the object which has no method implementation. -ARGS are the arguments that were passed to METHOD. - -Implement this for a class to block this signal. The return -value becomes the return value of the original method call." - (signal 'no-method-definition (list method object))) - -(defgeneric no-next-method (object &rest args) -"Called from `call-next-method' when no additional methods are available.") - -(defmethod no-next-method (object &rest args) - "Called from `call-next-method' when no additional methods are available. -OBJECT is othe object being called on `call-next-method'. -ARGS are the arguments it is called by. -This method signals `no-next-method' by default. Override this -method to not throw an error, and its return value becomes the -return value of `call-next-method'." - (signal 'no-next-method (list object args))) - -(add-hook 'help-fns-describe-function-functions 'eieio--help-generic) -(defun eieio--help-generic (generic) - "Describe GENERIC if it is a generic function." - (when (and (symbolp generic) (generic-p generic)) - (save-excursion - (goto-char (point-min)) - (when (re-search-forward " in `.+'.$" nil t) - (replace-match "."))) - (save-excursion - (insert "\n\nThis is a generic function" - (cond - ((and (eieio--generic-primary-only-p generic) - (eieio--generic-primary-only-one-p generic)) - " with only one primary method") - ((eieio--generic-primary-only-p generic) - " with only primary methods") - (t "")) - ".\n\n") - (insert (propertize "Implementations:\n\n" 'face 'bold)) - (let ((i 4) - (prefix [ ":STATIC" ":BEFORE" ":PRIMARY" ":AFTER" ] )) - ;; Loop over fanciful generics - (while (< i 7) - (let ((gm (aref (get generic 'eieio-method-tree) i))) - (when gm - (insert "Generic " - (aref prefix (- i 3)) - "\n" - (or (nth 2 gm) "Undocumented") - "\n\n"))) - (setq i (1+ i))) - (setq i 0) - ;; Loop over defined class-specific methods - (while (< i 4) - (let* ((gm (reverse (aref (get generic 'eieio-method-tree) i))) - cname location) - (while gm - (setq cname (caar gm)) - (insert "`") - (help-insert-xref-button (symbol-name cname) - 'help-variable cname) - (insert "' " (aref prefix i) " ") - ;; argument list - (let* ((func (cdr (car gm))) - (arglst (help-function-arglist func))) - (prin1 arglst (current-buffer))) - (insert "\n" - (or (documentation (cdr (car gm))) - "Undocumented")) - ;; Print file location if available - (when (and (setq location (get generic 'method-locations)) - (setq location (assoc cname location))) - (setq location (cadr location)) - (insert "\n\nDefined in `") - (help-insert-xref-button - (file-name-nondirectory location) - 'eieio-method-def cname generic location) - (insert "'\n")) - (setq gm (cdr gm)) - (insert "\n"))) - (setq i (1+ i))))))) - -;;; Obsolete backward compatibility functions. -;; Needed to run byte-code compiled with the EIEIO of Emacs-23. - -(defun eieio-defmethod (method args) - "Obsolete work part of an old version of the `defmethod' macro." - (let ((key nil) (body nil) (firstarg nil) (argfix nil) (argclass nil) loopa) - ;; find optional keys - (setq key - (cond ((memq (car args) '(:BEFORE :before)) - (setq args (cdr args)) - eieio--method-before) - ((memq (car args) '(:AFTER :after)) - (setq args (cdr args)) - eieio--method-after) - ((memq (car args) '(:STATIC :static)) - (setq args (cdr args)) - eieio--method-static) - ((memq (car args) '(:PRIMARY :primary)) - (setq args (cdr args)) - eieio--method-primary) - ;; Primary key. - (t eieio--method-primary))) - ;; Get body, and fix contents of args to be the arguments of the fn. - (setq body (cdr args) - args (car args)) - (setq loopa args) - ;; Create a fixed version of the arguments. - (while loopa - (setq argfix (cons (if (listp (car loopa)) (car (car loopa)) (car loopa)) - argfix)) - (setq loopa (cdr loopa))) - ;; Make sure there is a generic. - (eieio-defgeneric - method - (if (stringp (car body)) - (car body) (format "Generically created method `%s'." method))) - ;; create symbol for property to bind to. If the first arg is of - ;; the form (varname vartype) and `vartype' is a class, then - ;; that class will be the type symbol. If not, then it will fall - ;; under the type `primary' which is a non-specific calling of the - ;; function. - (setq firstarg (car args)) - (if (listp firstarg) - (progn - (setq argclass (nth 1 firstarg)) - (if (not (class-p argclass)) - (error "Unknown class type %s in method parameters" - (nth 1 firstarg)))) - ;; Generics are higher. - (setq key (eieio--specialized-key-to-generic-key key))) - ;; Put this lambda into the symbol so we can find it. - (if (byte-code-function-p (car-safe body)) - (eieio--mt-add method (car-safe body) key argclass) - (eieio--mt-add method (append (list 'lambda (reverse argfix)) body) - key argclass)) - ) - - (eieio--method-optimize-primary method) - - method) -(make-obsolete 'eieio-defmethod 'eieio--defmethod "24.1") - -(defun eieio-defgeneric (method doc-string) - "Obsolete work part of an old version of the `defgeneric' macro." - (if (and (fboundp method) (not (generic-p method)) - (or (byte-code-function-p (symbol-function method)) - (not (eq 'autoload (car (symbol-function method))))) - ) - (error "You cannot create a generic/method over an existing symbol: %s" - method)) - ;; Don't do this over and over. - (unless (fboundp 'method) - ;; This defun tells emacs where the first definition of this - ;; method is defined. - `(defun ,method nil) - ;; Make sure the method tables are installed. - (eieio--mt-install method) - ;; Apply the actual body of this function. - (put method 'function-documentation doc-string) - (fset method (eieio--defgeneric-form method)) - ;; Return the method - 'method)) -(make-obsolete 'eieio-defgeneric nil "24.1") - -(provide 'eieio-generic) - -;;; eieio-generic.el ends here diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el index 0c85d90..b64eba1 100644 --- a/lisp/emacs-lisp/eieio.el +++ b/lisp/emacs-lisp/eieio.el @@ -53,7 +53,6 @@ (message eieio-version)) (require 'eieio-core) -(require 'eieio-generic) ;;; Defining a new class diff --git a/lisp/emacs-lisp/macroexp.el b/lisp/emacs-lisp/macroexp.el index ecebdeb..797de9a 100644 --- a/lisp/emacs-lisp/macroexp.el +++ b/lisp/emacs-lisp/macroexp.el @@ -168,6 +168,26 @@ and also to avoid outputting the warning during normal execution." form)))))))) (t form))) +(defun macroexp-macroexpand (form env) + "Like `macroexpand' but checking obsolescence." + (let ((new-form + (macroexpand form env))) + (if (and (not (eq form new-form)) ;It was a macro call. + (car-safe form) + (symbolp (car form)) + (get (car form) 'byte-obsolete-info) + (or (not (fboundp 'byte-compile-warning-enabled-p)) + (byte-compile-warning-enabled-p 'obsolete))) + (let* ((fun (car form)) + (obsolete (get fun 'byte-obsolete-info))) + (macroexp--warn-and-return + (macroexp--obsolete-warning + fun obsolete + (if (symbolp (symbol-function fun)) + "alias" "macro")) + new-form)) + new-form))) + (defun macroexp--expand-all (form) "Expand all macros in FORM. This is an internal version of `macroexpand-all'. @@ -180,24 +200,7 @@ Assumes the caller has bound `macroexpand-all-environment'." (macroexpand (macroexp--all-forms form 1) macroexpand-all-environment) ;; Normal form; get its expansion, and then expand arguments. - (let ((new-form - (macroexpand form macroexpand-all-environment))) - (setq form - (if (and (not (eq form new-form)) ;It was a macro call. - (car-safe form) - (symbolp (car form)) - (get (car form) 'byte-obsolete-info) - (or (not (fboundp 'byte-compile-warning-enabled-p)) - (byte-compile-warning-enabled-p 'obsolete))) - (let* ((fun (car form)) - (obsolete (get fun 'byte-obsolete-info))) - (macroexp--warn-and-return - (macroexp--obsolete-warning - fun obsolete - (if (symbolp (symbol-function fun)) - "alias" "macro")) - new-form)) - new-form))) + (setq form (macroexp-macroexpand form macroexpand-all-environment)) (pcase form (`(cond . ,clauses) (macroexp--cons 'cond (macroexp--all-clauses clauses) form)) commit 24aacfc9058dfff1331a64f50ced2ca4d6f25824 Author: Eli Zaretskii Date: Tue Jan 20 21:20:39 2015 +0200 Improve documentation of buttons (Bug#19628) doc/lispref/display.texi (Manipulating Buttons): Explain more about the 'action' property. diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index c855bbe..11a6f32 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,5 +1,8 @@ 2015-01-20 Eli Zaretskii + * display.texi (Manipulating Buttons): Explain more about the + 'action' property. (Bug#19628) + * text.texi (Clickable Text): Improve indexing. (Bug#19629) 2015-01-15 Eli Zaretskii diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index 0128e46..9501e81 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi @@ -5511,10 +5511,12 @@ Set @var{button}'s @var{prop} property to @var{val}. @end defun @defun button-activate button &optional use-mouse-action -Call @var{button}'s @code{action} property (i.e., invoke it). If -@var{use-mouse-action} is non-@code{nil}, try to invoke the button's -@code{mouse-action} property instead of @code{action}; if the button -has no @code{mouse-action} property, use @code{action} as normal. +Call @var{button}'s @code{action} property (i.e., invoke the function +that is the value of that property, passing it the single argument +@var{button}). If @var{use-mouse-action} is non-@code{nil}, try to +invoke the button's @code{mouse-action} property instead of +@code{action}; if the button has no @code{mouse-action} property, use +@code{action} as normal. @end defun @defun button-label button commit f948b5d9ff60b40e361b2b9428eda2ad4c0ad105 Author: Michal Nazarewicz Date: Tue Jan 20 19:30:55 2015 +0100 paragraphs: update sentence-end-base :version after changing the default The default value of the `sentence-end-base' defcustom has been changed in ‘recognise more Unicode characters as end of sentence’ commit but :version has not been updated accordingly. Fix that. diff --git a/lisp/textmodes/paragraphs.el b/lisp/textmodes/paragraphs.el index 09451a6..8bcc71e 100644 --- a/lisp/textmodes/paragraphs.el +++ b/lisp/textmodes/paragraphs.el @@ -172,7 +172,7 @@ to obtain the value of this variable." "Regexp matching the basic end of a sentence, not including following space." :group 'paragraphs :type 'string - :version "22.1") + :version "25.1") (put 'sentence-end-base 'safe-local-variable 'stringp) (defun sentence-end () commit 52ae3dbb217428fcd79c4ed922dfa0d51944e40a Author: Eli Zaretskii Date: Tue Jan 20 20:22:20 2015 +0200 doc/lispref/text.texi (Clickable Text): Improve indexing. (Bug#19629) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 5364699..c855bbe 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,7 @@ +2015-01-20 Eli Zaretskii + + * text.texi (Clickable Text): Improve indexing. (Bug#19629) + 2015-01-15 Eli Zaretskii * variables.texi (Creating Buffer-Local): Improve indexing. diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi index a611850..c6cfbfc 100644 --- a/doc/lispref/text.texi +++ b/doc/lispref/text.texi @@ -3720,6 +3720,7 @@ clicks on the link quickly without moving the mouse. This behavior is controlled by the user option @code{mouse-1-click-follows-link}. @xref{Mouse References,,, emacs, The GNU Emacs Manual}. +@cindex follow-link (text or overlay property) To set up the link so that it obeys @code{mouse-1-click-follows-link}, you must either (1) apply a @code{follow-link} text or overlay property to the link text, or (2) commit 310f7074519c3ea83e669effb87b2fc5a0d37f67 Author: Eli Zaretskii Date: Tue Jan 20 20:15:20 2015 +0200 lisp/button.el (button-activate, push-button): Doc fix. (Bug#19628) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 8a3d657..20efe68 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2015-01-20 Eli Zaretskii + + * button.el (button-activate, push-button): Doc fix. (Bug#19628) + 2015-01-16 Samer Masterson (tiny change) * pcomplete.el (pcomplete-parse-arguments): Parse arguments diff --git a/lisp/button.el b/lisp/button.el index 189a1c2..e7602dd 100644 --- a/lisp/button.el +++ b/lisp/button.el @@ -224,10 +224,10 @@ changes to a supertype are not reflected in its subtypes)." prop val)))) (defun button-activate (button &optional use-mouse-action) - "Call BUTTON's action property. -If USE-MOUSE-ACTION is non-nil, invoke the button's mouse-action -instead of its normal action; if the button has no mouse-action, -the normal action is used instead. + "Call BUTTON's `action' property. +If USE-MOUSE-ACTION is non-nil, invoke the button's `mouse-action' +property instead of `action'; if the button has no `mouse-action', +the value of `action' is used instead. The action can either be a marker or a function. If it's a marker then goto it. Otherwise it it is a function then it is @@ -429,11 +429,13 @@ instead of starting at the next button." (defun push-button (&optional pos use-mouse-action) "Perform the action specified by a button at location POS. POS may be either a buffer position or a mouse-event. If -USE-MOUSE-ACTION is non-nil, invoke the button's mouse-action -instead of its normal action; if the button has no mouse-action, -the normal action is used instead. The action may be either a -function to call or a marker to display and is invoked using -`button-activate' (which see). +USE-MOUSE-ACTION is non-nil, invoke the button's `mouse-action' +property instead of its `action' property; if the button has no +`mouse-action', the value of `action' is used instead. + +The action in both cases may be either a function to call or a +marker to display and is invoked using `button-activate' (which +see). POS defaults to point, except when `push-button' is invoked interactively as the result of a mouse-event, in which case, the commit db5d41159e42b24467737d9ab57a76406a5afe54 Author: Jorgen Schaefer Date: Tue Jan 20 18:08:38 2015 +0100 Removed test with spurious failures. * automated/package-test.el (package-test-install-prioritized): Removed test due to unreproducable failures. diff --git a/test/ChangeLog b/test/ChangeLog index 09eb63d..dcce0bf 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +2015-01-20 Jorgen Schaefer + + * automated/package-test.el (package-test-install-prioritized): + Removed test due to unreproducable failures. + 2015-01-20 Michal Nazarewicz * automated/descr-text-test.el: New file with tests for diff --git a/test/automated/package-test.el b/test/automated/package-test.el index c33a1ba..27a71c5 100644 --- a/test/automated/package-test.el +++ b/test/automated/package-test.el @@ -230,23 +230,6 @@ Must called from within a `tar-mode' buffer." (package-refresh-contents) (package-install 'simple-single))) -(ert-deftest package-test-install-prioritized () - "Install a lower version from a higher-prioritized archive." - (with-package-test () - (let* ((newer-version (expand-file-name "data/package/newer-versions" - package-test-file-dir)) - (package-archives `(("older" . ,package-test-data-dir) - ("newer" . ,newer-version))) - (package-archive-priorities '(("newer" . 100)))) - - (package-initialize) - (package-refresh-contents) - (package-install 'simple-single) - - (let ((installed (cadr (assq 'simple-single package-alist)))) - (should (version-list-= '(1 3) - (package-desc-version installed))))))) - (ert-deftest package-test-install-multifile () "Check properties of the installed multi-file package." (with-package-test (:basedir "data/package" :install '(multi-file)) commit 3ee38f2000944d50adb2c65bd1af11c464c87950 Author: Eli Zaretskii Date: Tue Jan 20 18:26:28 2015 +0200 Disallow w32 builds --without-toolkit-scroll-bars. configure.ac (HAVE_W32): Abort with error message if --without-toolkit-scroll-bars was specified. See http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00525.html for the details. diff --git a/ChangeLog b/ChangeLog index 714be97..4abd9d6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2015-01-20 Eli Zaretskii + + * configure.ac (HAVE_W32): Abort with error message if + --without-toolkit-scroll-bars was specified. See + http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00525.html + for the details. + 2015-01-01 Paul Eggert * .gitattributes: New file. diff --git a/configure.ac b/configure.ac index bae020e..9c8df9d 100644 --- a/configure.ac +++ b/configure.ac @@ -1841,6 +1841,9 @@ CM_OBJ="cm.o" XARGS_LIMIT= if test "${HAVE_W32}" = "yes"; then AC_DEFINE(HAVE_NTGUI, 1, [Define to use native MS Windows GUI.]) + if test "$with_toolkit_scroll_bars" = "no"; then + AC_MSG_ERROR([Non-toolkit scroll bars are not implemented for w32 build.]) + fi AC_CHECK_TOOL(WINDRES, [windres], [AC_MSG_ERROR([No resource compiler found.])]) W32_OBJ="w32fns.o w32menu.o w32reg.o w32font.o w32term.o" commit a53b91322939c59ae0217aa6439f70b16463ae23 Author: Jan Djärv Date: Tue Jan 20 17:22:14 2015 +0100 Fix double chars in NS port. Fixes: debbugs:19531 * nsterm.m (EV_TRAILER2): Set Vinhibit_quit to Qt. diff --git a/src/ChangeLog b/src/ChangeLog index 6257cc4..a320e22 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2015-01-20 Jan Djärv + + * nsterm.m (EV_TRAILER2): Set Vinhibit_quit to Qt (Bug#19531). + 2015-01-20 Dmitry Antipov Prefer xlispstrdup to avoid dumb calls to strlen. diff --git a/src/nsterm.m b/src/nsterm.m index b07fa1c..ee1268e 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -373,8 +373,11 @@ static CGPoint menu_mouse_point; if (e) emacs_event->timestamp = EV_TIMESTAMP (e); \ if (q_event_ptr) \ { \ + Lisp_Object tem = Vinhibit_quit; \ + Vinhibit_quit = Qt; \ n_emacs_events_pending++; \ kbd_buffer_store_event_hold (emacs_event, q_event_ptr); \ + Vinhibit_quit = tem; \ } \ else \ hold_event (emacs_event); \ commit fd020a29316e573e96501dfc1c87d05085160b2c Author: Michal Nazarewicz Date: Fri Dec 5 19:34:42 2014 +0100 eldoc: modify `eldoc-documentation-function' using `add-function' * lisp/emacs-lisp/eldoc.el (eldoc-documentation-function): Describe how major modes should use `add-function' to alter value of the variable. * lisp/hexl.el (hexl-mode): Set `eldoc-documentation-function' using `add-function' so the default value is always used. * lisp/ielm.el (inferior-emacs-lisp-mode): Set `eldoc-documentation-function' using `add-function' so the default value is always used. * lisp/progmodes/cfengine.el (cfengine3-mode): Set `eldoc-documentation-function' using `add-function' so the default value is always used. * lisp/progmodes/elisp-mode (emacs-lisp-mode): Set `eldoc-documentation-function' using `add-function' so the default value is always used. * lisp/progmodes/octave.el (octave-mode): Set `eldoc-documentation-function' using `add-function' so the default value is always used. * lisp/progmodes/python.el (python-mode): Set `eldoc-documentation-function' using `add-function' so the default value is always used. * lisp/simple.el (read--expression): Set `eldoc-documentation-function' using `add-function' so the default value is always used. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ab338f8..c34b7ea 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,28 @@ 2015-01-20 Michal Nazarewicz + * emacs-lisp/eldoc.el (eldoc-documentation-function): Describe how + major modes should use `add-function' to alter value of the variable. + + * hexl.el (hexl-mode): Set `eldoc-documentation-function' using + `add-function' so the default value is always used. + * ielm.el (inferior-emacs-lisp-mode): Set + `eldoc-documentation-function' using `add-function' so the default + value is always used. + * progmodes/cfengine.el (cfengine3-mode): Set + `eldoc-documentation-function' using `add-function' so the default + value is always used. + * progmodes/elisp-mode (emacs-lisp-mode): Set + `eldoc-documentation-function' using `add-function' so the default + value is always used. + * progmodes/octave.el (octave-mode): Set + `eldoc-documentation-function' using `add-function' so the default + value is always used. + * progmodes/python.el (python-mode): Set + `eldoc-documentation-function' using `add-function' so the default + value is always used. + * simple.el (read--expression): Set `eldoc-documentation-function' + using `add-function' so the default value is always used. + * descr-text.el (describe-char-eldoc): New function returning basic Unicode codepoint information (e.g. name) about character at point. It is meant to be used as a default value of the diff --git a/lisp/emacs-lisp/eldoc.el b/lisp/emacs-lisp/eldoc.el index 0c74f3f..d527d67 100644 --- a/lisp/emacs-lisp/eldoc.el +++ b/lisp/emacs-lisp/eldoc.el @@ -336,7 +336,12 @@ the variables `eldoc-argument-case' and `eldoc-echo-area-use-multiline-p', and the face `eldoc-highlight-function-argument', if they are to have any effect. -This variable is expected to be set buffer-locally by modes that support ElDoc.") +Major modes should modify this variable using `add-function', for example: + (add-function :before-until (local 'eldoc-documentation-function) + #'foo-mode-eldoc-function) +so that the global documentation function (i.e. the default value of the +variable) is taken into account if the major mode specific function does not +return any documentation.") (defun eldoc-print-current-symbol-info () ;; This is run from post-command-hook or some idle timer thing, diff --git a/lisp/hexl.el b/lisp/hexl.el index 3751bcf..27d4659 100644 --- a/lisp/hexl.el +++ b/lisp/hexl.el @@ -395,8 +395,8 @@ You can use \\[hexl-find-file] to visit a file in Hexl mode. (add-hook 'change-major-mode-hook 'hexl-maybe-dehexlify-buffer nil t) ;; Set a callback function for eldoc. - (hexl-mode--setq-local 'eldoc-documentation-function - #'hexl-print-current-point-info) + (add-function :before-until (local 'eldoc-documentation-function) + #'hexl-print-current-point-info) (eldoc-add-command-completions "hexl-") (eldoc-remove-command "hexl-save-buffer" "hexl-current-address") diff --git a/lisp/ielm.el b/lisp/ielm.el index d7bf60f..be877eb 100644 --- a/lisp/ielm.el +++ b/lisp/ielm.el @@ -380,7 +380,7 @@ nonempty, then flushes the buffer." (*3 ***) (active-process (ielm-process)) (old-standard-output standard-output) - new-standard-output + new-standard-output ielm-temp-buffer) (set-match-data ielm-match-data) (save-excursion @@ -542,8 +542,8 @@ Customized bindings may be defined in `ielm-map', which currently contains: (set (make-local-variable 'completion-at-point-functions) '(comint-replace-by-expanded-history ielm-complete-filename elisp-completion-at-point)) - (setq-local eldoc-documentation-function - #'elisp-eldoc-documentation-function) + (add-function :before-until (local 'eldoc-documentation-function) + #'elisp-eldoc-documentation-function) (set (make-local-variable 'ielm-prompt-internal) ielm-prompt) (set (make-local-variable 'comint-prompt-read-only) ielm-prompt-read-only) (setq comint-get-old-input 'ielm-get-old-input) diff --git a/lisp/progmodes/cfengine.el b/lisp/progmodes/cfengine.el index b485a5d..aec7d20 100644 --- a/lisp/progmodes/cfengine.el +++ b/lisp/progmodes/cfengine.el @@ -1350,7 +1350,8 @@ to the action header." (when buffer-file-name (shell-quote-argument buffer-file-name))))) - (setq-local eldoc-documentation-function #'cfengine3-documentation-function) + (add-function :before-until (local 'eldoc-documentation-function) + #'cfengine3-documentation-function) (add-hook 'completion-at-point-functions #'cfengine3-completion-function nil t) diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el index 4de40ef..b2c5fbf 100644 --- a/lisp/progmodes/elisp-mode.el +++ b/lisp/progmodes/elisp-mode.el @@ -231,8 +231,8 @@ Blank lines separate paragraphs. Semicolons start comments. (defvar xref-identifier-completion-table-function) (lisp-mode-variables nil nil 'elisp) (setq imenu-case-fold-search nil) - (setq-local eldoc-documentation-function - #'elisp-eldoc-documentation-function) + (add-function :before-until (local 'eldoc-documentation-function) + #'elisp-eldoc-documentation-function) (setq-local xref-find-function #'elisp-xref-find) (setq-local xref-identifier-completion-table-function #'elisp--xref-identifier-completion-table) diff --git a/lisp/progmodes/octave.el b/lisp/progmodes/octave.el index cbdaae6..8541cce 100644 --- a/lisp/progmodes/octave.el +++ b/lisp/progmodes/octave.el @@ -601,7 +601,8 @@ Key bindings: (add-hook 'before-save-hook 'octave-sync-function-file-names nil t) (setq-local beginning-of-defun-function 'octave-beginning-of-defun) (and octave-font-lock-texinfo-comment (octave-font-lock-texinfo-comment)) - (setq-local eldoc-documentation-function 'octave-eldoc-function) + (add-function :before-until (local 'eldoc-documentation-function) + 'octave-eldoc-function) (easy-menu-add octave-mode-menu)) diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 1e8623d..d298f96 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -4662,8 +4662,8 @@ Arguments START and END narrow the buffer region to work on." (current-column)))) (^ '(- (1+ (current-indentation)))))) - (set (make-local-variable 'eldoc-documentation-function) - #'python-eldoc-function) + (add-function :before-until (local 'eldoc-documentation-function) + #'python-eldoc-function) (add-to-list 'hs-special-modes-alist `(python-mode "^\\s-*\\(?:def\\|class\\)\\>" nil "#" diff --git a/lisp/simple.el b/lisp/simple.el index 25293ed..967fbc6 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -1407,8 +1407,8 @@ display the result of expression evaluation." (minibuffer-with-setup-hook (lambda () ;; FIXME: call emacs-lisp-mode? - (setq-local eldoc-documentation-function - #'elisp-eldoc-documentation-function) + (add-function :before-until (local 'eldoc-documentation-function) + #'elisp-eldoc-documentation-function) (add-hook 'completion-at-point-functions #'elisp-completion-at-point nil t) (run-hooks 'eval-expression-minibuffer-setup-hook)) commit 81681ed9a1e609101377d674613832008a667587 Author: Michal Nazarewicz Date: Wed Dec 3 19:49:42 2014 +0100 descr-text: add `describe-char-eldoc' describing character at point * lisp/descr-text.el (describe-char-eldoc): New function returning basic Unicode codepoint information (e.g. name) about character at point. It is meant to be used as a default value of the `eldoc-documentation-function' variable. (describe-char-eldoc--format, describe-char-eldoc--truncate): New helper functions for `describe-char-eldoc' function. * tests/automated/descr-text-test.el: New file with tests for `describe-char-eldoc--truncate', `describe-char-eldoc--format', and `describe-char-eldoc'. diff --git a/etc/NEWS b/etc/NEWS index 7944b00..3e8ed40 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -238,8 +238,12 @@ typing RET. result of the calculation into the current buffer. ** ElDoc -*** New minor mode global-eldoc-mode -*** eldoc-documentation-function now defaults to nil +*** New minor mode `global-eldoc-mode' +*** `eldoc-documentation-function' now defaults to `ignore' +*** `describe-char-eldoc' displays information about character at point, +and can be used as a default value of `eldoc-documentation-function'. It is +useful when, for example, one needs to distinguish various spaces (e.g. ] [, +] [, ] [, etc.) while using mono-spaced font. ** eww diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d3bfafd..ab338f8 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,14 @@ 2015-01-20 Michal Nazarewicz + * descr-text.el (describe-char-eldoc): New function returning + basic Unicode codepoint information (e.g. name) about character + at point. It is meant to be used as a default value of the + `eldoc-documentation-function' variable. + (describe-char-eldoc--format, describe-char-eldoc--truncate): + New helper functions for `describe-char-eldoc' function. + +2015-01-20 Michal Nazarewicz + * textmodes/paragraphs.el (sentence-end-base): Include an ellipsis (…) and interrobang (‽) characters as end of a sentence, and a closing single quote (’) as an end of a quote. diff --git a/lisp/descr-text.el b/lisp/descr-text.el index b16c007..d6f64c7 100644 --- a/lisp/descr-text.el +++ b/lisp/descr-text.el @@ -825,6 +825,102 @@ relevant to POS." (define-obsolete-function-alias 'describe-char-after 'describe-char "22.1") +;;; Describe-Char-ElDoc + +(defun describe-char-eldoc--truncate (name width) + "Truncate NAME at white spaces such that it is no longer than WIDTH. + +Split NAME on white space character and return string with as +many leading words of NAME as possible without exceeding WIDTH +characters. If NAME consists of white space characters only, +return an empty string. Three dots (\"...\") are appended to +returned string if some of the words from NAME have been omitted. + +NB: Function may return string longer than WIDTH if name consists +of a single word, or it's first word is longer than WIDTH +characters." + (let ((words (split-string name))) + (if words + (let ((last words)) + (setq width (- width (length (car words)))) + (while (and (cdr last) + (<= (+ (length (cadr last)) (if (cddr last) 4 1)) width)) + (setq last (cdr last)) + (setq width (- width (length (car last)) 1))) + (let ((ellipsis (and (cdr last) "..."))) + (setcdr last nil) + (concat (mapconcat 'identity words " ") ellipsis))) + ""))) + +(defun describe-char-eldoc--format (ch &optional width) + "Format a description for character CH which is no more than WIDTH characters. + +Full description message has a \"U+HEX: NAME (GC: GENERAL-CATEGORY)\" +format where: +- HEX is a hexadecimal codepoint of the character (zero-padded to at + least four digits), +- NAME is name of the character. +- GC is a two-letter abbreviation of the general-category of the + character, and +- GENERAL-CATEGORY is full name of the general-category of the + character. + +If WIDTH is non-nil some elements of the description may be +omitted to accommodate the length restriction. Under certain +condition, the function may return string longer than WIDTH, see +`describe-char-eldoc--truncate'." + (let ((name (get-char-code-property ch 'name))) + (when name + (let* ((code (propertize (format "U+%04X" ch) + 'face 'font-lock-constant-face)) + (gc (get-char-code-property ch 'general-category)) + (gc-desc (char-code-property-description 'general-category gc))) + + (unless (or (not width) (<= (length name) width)) + (setq name (describe-char-eldoc--truncate name width))) + (setq name (concat (substring name 0 1) (downcase (substring name 1)))) + (setq name (propertize name 'face 'font-lock-variable-name-face)) + + (setq gc (propertize (symbol-name gc) 'face 'font-lock-comment-face)) + (when gc-desc + (setq gc-desc (propertize gc-desc 'face 'font-lock-comment-face))) + + (let ((lcode (length code)) + (lname (length name)) + (lgc (length gc)) + (lgc-desc (and gc-desc (length gc-desc)))) + (cond + ((and gc-desc + (or (not width) (<= (+ lcode lname lgc lgc-desc 7) width))) + (concat code ": " name " (" gc ": " gc-desc ")")) + ((and gc-desc (<= (+ lcode lname lgc-desc 5) width)) + (concat code ": " name " (" gc-desc ")")) + ((or (not width) (<= (+ lcode lname lgc 5) width)) + (concat code ": " name " (" gc ")")) + ((<= (+ lname lgc 3) width) + (concat name " (" gc ")")) + (t name))))))) + +;;;###autoload +(defun describe-char-eldoc () + "Return a description of character at point for use by ElDoc mode. + +Return nil if character at point is a printable ASCII +character (i.e. codepoint between 32 and 127 inclusively). +Otherwise return a description formatted by +`describe-char-eldoc--format' function taking into account value +of `eldoc-echo-area-use-multiline-p' variable and width of +minibuffer window for width limit. + +This function is meant to be used as a value of +`eldoc-documentation-function' variable." + (let ((ch (following-char))) + (when (and (not (zerop ch)) (or (< ch 32) (> ch 127))) + (describe-char-eldoc--format + ch + (unless (eq eldoc-echo-area-use-multiline-p t) + (1- (window-width (minibuffer-window)))))))) + (provide 'descr-text) ;;; descr-text.el ends here diff --git a/test/ChangeLog b/test/ChangeLog index 544835b..09eb63d 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,5 +1,11 @@ 2015-01-20 Michal Nazarewicz + * automated/descr-text-test.el: New file with tests for + `describe-char-eldoc--truncate', `describe-char-eldoc--format', + and `describe-char-eldoc'. + +2015-01-20 Michal Nazarewicz + * automated/tildify-tests.el (tildify-space-undo-test--test): A new helper function for testing `tildify-double-space-undos' behaviour in the `tildify-space' function. diff --git a/test/automated/descr-text-test.el b/test/automated/descr-text-test.el new file mode 100644 index 0000000..81ae727 --- /dev/null +++ b/test/automated/descr-text-test.el @@ -0,0 +1,94 @@ +;;; descr-text-test.el --- ERT tests for descr-text.el -*- lexical-binding: t -*- + +;; Copyright (C) 2014 Free Software Foundation, Inc. + +;; Author: Michal Nazarewicz + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . + +;;; Commentary: + +;; This package defines regression tests for the descr-text package. + +;;; Code: + +(require 'ert) +(require 'descr-text) + + +(ert-deftest descr-text-test-truncate () + "Tests describe-char-eldoc--truncate function." + (should (equal "" + (describe-char-eldoc--truncate " \t \n" 100))) + (should (equal "foo" + (describe-char-eldoc--truncate "foo" 1))) + (should (equal "foo..." + (describe-char-eldoc--truncate "foo wilma fred" 0))) + (should (equal "foo..." + (describe-char-eldoc--truncate + "foo wilma fred" (length "foo wilma")))) + (should (equal "foo wilma..." + (describe-char-eldoc--truncate + "foo wilma fred" (+ 3 (length "foo wilma"))))) + (should (equal "foo wilma..." + (describe-char-eldoc--truncate + "foo wilma fred" (1- (length "foo wilma fred"))))) + (should (equal "foo wilma fred" + (describe-char-eldoc--truncate + "foo wilma fred" (length "foo wilma fred")))) + (should (equal "foo wilma fred" + (describe-char-eldoc--truncate + " foo\t wilma \nfred\t " (length "foo wilma fred"))))) + +(ert-deftest descr-text-test-format-desc () + "Tests describe-char-eldoc--format function." + (should (equal "U+2026: Horizontal ellipsis (Po: Punctuation, Other)" + (describe-char-eldoc--format ?…))) + (should (equal "U+2026: Horizontal ellipsis (Punctuation, Other)" + (describe-char-eldoc--format ?… 51))) + (should (equal "U+2026: Horizontal ellipsis (Po)" + (describe-char-eldoc--format ?… 40))) + (should (equal "Horizontal ellipsis (Po)" + (describe-char-eldoc--format ?… 30))) + (should (equal "Horizontal ellipsis" + (describe-char-eldoc--format ?… 20))) + (should (equal "Horizontal..." + (describe-char-eldoc--format ?… 10)))) + +(ert-deftest descr-text-test-desc () + "Tests describe-char-eldoc function." + (with-temp-buffer + (insert "a…") + (goto-char (point-min)) + (should (eq ?a (following-char))) ; make sure we are where we think we are + ;; Function should return nil for an ASCII character. + (should (not (describe-char-eldoc))) + + (goto-char (1+ (point))) + (should (eq ?… (following-char))) + (let ((eldoc-echo-area-use-multiline-p t)) + ;; Function should return description of an Unicode character. + (should (equal "U+2026: Horizontal ellipsis (Po: Punctuation, Other)" + (describe-char-eldoc)))) + + (goto-char (point-max)) + ;; At the end of the buffer, function should return nil and not blow up. + (should (not (describe-char-eldoc))))) + + +(provide 'descr-text-test) + +;;; descr-text-test.el ends here commit 11e161f54de5009c4ccba3a3d7bcc86850d5b2b2 Author: Michal Nazarewicz Date: Mon Oct 27 17:14:38 2014 +0100 paragraphs: recognise more Unicode characters as end of sentence * lisp/textmodes/paragraphs.el (sentence-end-base): Include an ellipsis (…) and interrobang (‽) characters as end of a sentence, and a closing single quote (’) as an end of a quote. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 35b08b0..d3bfafd 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,11 @@ 2015-01-20 Michal Nazarewicz + * textmodes/paragraphs.el (sentence-end-base): Include an + ellipsis (…) and interrobang (‽) characters as end of a sentence, + and a closing single quote (’) as an end of a quote. + +2015-01-20 Michal Nazarewicz + * textmodes/tildify.el (tildify-double-space-undos): A new variable specifying whether pressing space in `tildify-mode' after a space has been replaced with hard space undos the substitution. diff --git a/lisp/textmodes/paragraphs.el b/lisp/textmodes/paragraphs.el index b18a93c..09451a6 100644 --- a/lisp/textmodes/paragraphs.el +++ b/lisp/textmodes/paragraphs.el @@ -168,7 +168,7 @@ to obtain the value of this variable." :type '(choice regexp (const :tag "Use default value" nil))) (put 'sentence-end 'safe-local-variable 'string-or-null-p) -(defcustom sentence-end-base "[.?!][]\"'â€)}]*" +(defcustom sentence-end-base "[.?!…‽][]\"'â€â€™)}]*" "Regexp matching the basic end of a sentence, not including following space." :group 'paragraphs :type 'string commit 6ffb560b2a940d19419ac5afe11418588ef8c61f Author: Michal Nazarewicz Date: Tue Jan 20 14:03:45 2015 +0100 doh, fixing year in ChangeLog entries introduced by last two commits diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 6c2f8e8..35b08b0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,12 +1,10 @@ -2014-01-20 Michal Nazarewicz +2015-01-20 Michal Nazarewicz * textmodes/tildify.el (tildify-double-space-undos): A new variable specifying whether pressing space in `tildify-mode' after a space has been replaced with hard space undos the substitution. (tildify-space): Add code branch for handling `tildify-doule-space'. -2014-01-20 Michal Nazarewicz - * textmodes/tildify.el (tildify-space): A new function which can be used as a `post-self-insert-hook' to automatically convert spaces into hard spaces. diff --git a/test/ChangeLog b/test/ChangeLog index c37b986..544835b 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,4 +1,4 @@ -2014-01-20 Michal Nazarewicz +2015-01-20 Michal Nazarewicz * automated/tildify-tests.el (tildify-space-undo-test--test): A new helper function for testing `tildify-double-space-undos' commit d9af6e01b87c0f73749936c9db6711d38f1d1274 Author: Michal Nazarewicz Date: Sat Nov 22 23:28:43 2014 +0100 tildify: add `tildify-double-space-undos' * lisp/textmodes/tildify.el (tildify-double-space-undos): A new variable specifying whether pressing space in `tildify-mode' after a space has been replaced with hard space undos the substitution. (tildify-space): Add code branch for handling `tildify-doule-space'. * tests/automated/tildify-tests.el (tildify-space-undo-test--test): A new helper function for testing `tildify-double-space-undos' behaviour in the `tildify-space' function. (tildify-space-undo-test-html, tildify-space-undo-test-html-nbsp) (tildify-space-undo-test-xml, tildify-space-undo-test-tex): New tests for `tildify-doule-space-undos' behaviour. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 8bcfe97..6c2f8e8 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,12 @@ 2014-01-20 Michal Nazarewicz + * textmodes/tildify.el (tildify-double-space-undos): A new + variable specifying whether pressing space in `tildify-mode' after + a space has been replaced with hard space undos the substitution. + (tildify-space): Add code branch for handling `tildify-doule-space'. + +2014-01-20 Michal Nazarewicz + * textmodes/tildify.el (tildify-space): A new function which can be used as a `post-self-insert-hook' to automatically convert spaces into hard spaces. diff --git a/lisp/textmodes/tildify.el b/lisp/textmodes/tildify.el index b11d7da..0eae67a 100644 --- a/lisp/textmodes/tildify.el +++ b/lisp/textmodes/tildify.el @@ -4,7 +4,7 @@ ;; Author: Milan Zamazal ;; Michal Nazarewicz -;; Version: 4.6 +;; Version: 4.6.1 ;; Keywords: text, TeX, SGML, wp ;; This file is part of GNU Emacs. @@ -419,6 +419,11 @@ current `case-fold-search' setting." :group 'tildify :type '(repeat 'function)) +(defcustom tildify-double-space-undos t + "Weather `tildify-space' should undo hard space when space is typed again." + :version "25.1" + :group 'tildify + :type 'boolean) ;;;###autoload (defun tildify-space () @@ -431,27 +436,39 @@ If * `tildify-space-pattern' matches when `looking-back' (no more than 10 characters) from before the space character, and * all predicates in `tildify-space-predicates' return non-nil, -replace the space character with a hard space specified by -`tildify-space-string' (note that the function does not take -`tildify-string-alist' into consideration). +replace the space character with value of `tildify-space-string' and +return t. -Return t if conversion happened, nil otherwise. +Otherwise, if + * `tildify-double-space-undos' variable is non-nil, + * character before point is a space character, and + * text before that is a hard space as defined by + `tildify-space-string' variable, +remove the hard space and leave only the space character. This function is meant to be used as a `post-self-insert-hook'." (interactive) - (let ((p (point)) case-fold-search) - (when (and (> (- p (point-min)) 2) - (eq (preceding-char) ?\s) - (eq (char-syntax (char-before (1- p))) ?w) - (not (string-equal " " tildify-space-string)) - (save-excursion - (goto-char (1- p)) - (looking-back tildify-space-pattern - (max (point-min) (- p 10)))) - (run-hook-with-args-until-failure 'tildify-space-predicates)) - (delete-char -1) - (insert tildify-space-string) - t))) + (let* ((p (point)) (p-1 (1- p)) (n (- p (point-min))) + (l (length tildify-space-string)) (l+1 (1+ l)) + case-fold-search) + (when (and (> n 2) (eq (preceding-char) ?\s)) + (cond + ((and (eq (char-syntax (char-before p-1)) ?w) + (save-excursion + (goto-char p-1) + (looking-back tildify-space-pattern (max (point-min) (- p 10)))) + (run-hook-with-args-until-failure 'tildify-space-predicates)) + (delete-char -1) + (insert tildify-space-string) + t) + ((and tildify-double-space-undos + (> n l+1) + (string-equal tildify-space-string + (buffer-substring (- p l+1) p-1))) + (goto-char p-1) + (delete-char (- l)) + (goto-char (1+ (point))) + nil))))) (defun tildify-space-region-predicate () "Check whether character before point should be tildified. diff --git a/test/ChangeLog b/test/ChangeLog index 0325f27..c37b986 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,5 +1,12 @@ 2014-01-20 Michal Nazarewicz + * automated/tildify-tests.el (tildify-space-undo-test--test): + A new helper function for testing `tildify-double-space-undos' + behaviour in the `tildify-space' function. + (tildify-space-undo-test-html, tildify-space-undo-test-html-nbsp) + (tildify-space-undo-test-xml, tildify-space-undo-test-tex): New + tests for `tildify-doule-space-undos' behaviour. + * automated/tildify-tests.el (tildify-space-test--test): A new helper function for testing `tildify-space' function. (tildify-space-test-html, tildify-space-test-html-nbsp) diff --git a/test/automated/tildify-tests.el b/test/automated/tildify-tests.el index dcbbbf1..b53f58c 100644 --- a/test/automated/tildify-tests.el +++ b/test/automated/tildify-tests.el @@ -223,6 +223,39 @@ The function must terminate as soon as callback returns nil." "~" "\\verb# ")) +(defun tildify-space-undo-test--test + (modes nbsp env-open &optional set-space-string) + (with-temp-buffer + (dolist (mode modes) + (funcall mode) + (when set-space-string + (setq-local tildify-space-string nbsp)) + (let ((header (concat "Testing double-space-undos in " + (symbol-name mode) "\n"))) + (erase-buffer) + (insert header "Lorem v" nbsp " ") + (should (not (tildify-space))) + (should (string-equal (concat header "Lorem v ") (buffer-string))))))) + +(ert-deftest tildify-space-undo-test-html () + "Tests auto-tildification in an HTML document" + (tildify-space-undo-test--test '(html-mode sgml-mode) " " "
"))
+
+(ert-deftest tildify-space-undo-test-html-nbsp ()
+  "Tests auto-tildification in an HTML document"
+  (tildify-space-undo-test--test '(html-mode sgml-mode) " " "
" t))
+
+(ert-deftest tildify-space-undo-test-xml ()
+  "Tests auto-tildification in an XML document"
+  (tildify-space-undo-test--test '(nxml-mode) " " "
Date:   Wed Oct 15 10:01:26 2014 +0200

    tildify: add `tildify-space' and `tildify-mode'
    
    * lisp/textmodes/tildify.el (tildify-space): A new function
    which can be used as a `post-self-insert-hook' to automatically
    convert spaces into hard spaces.
    (tildify-space-pattern): A new variable specifying pattern where
    `tildify-space' should take effect.
    (tildify-space-predicates): A new variable specifying list of
    predicate functions that all must return non-nil for
    `tildify-space' to take effect.
    (tildify-space-region-predicate): A new functions meant to be
    used as a predicate in `tildify-space-predicates' list.
    (tildify-mode): A new minor mode enabling `tildify-space' as a
    `post-self-insert-hook'
    
    * tests/automated/tildify-tests.el (tildify-space-test--test):
    A new helper function for testing `tildify-space' function.
    (tildify-space-test-html, tildify-space-test-html-nbsp)
    (tildify-space-test-xml, tildify-space-test-tex): New tests for
    `tildify-space' function.

diff --git a/etc/NEWS b/etc/NEWS
index 4551c9c..7944b00 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -494,6 +494,11 @@ As a result of the above, these commands are now obsolete:
 ** let-alist is a new macro (and a package) that allows one to easily
 let-bind the values stored in an alist.
 
+** `tildify-mode' allows to automatically insert hard spaces as one
+types the text.  Breaking line after a single-character words is
+forbidden by Czech and Polish typography (and may be discouraged in
+other languages), so `auto-tildify-mode' makes it easier to create
+a typographically-correct documents.
 
 * Incompatible Lisp Changes in Emacs 25.1
 
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 22a06a9..8bcfe97 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,18 @@
+2014-01-20  Michal Nazarewicz  
+
+	* textmodes/tildify.el (tildify-space): A new function
+	which can be used as a `post-self-insert-hook' to automatically
+	convert spaces into hard spaces.
+	(tildify-space-pattern): A new variable specifying pattern where
+	`tildify-space' should take effect.
+	(tildify-space-predicates): A new variable specifying list of
+	predicate functions that all must return non-nil for
+	`tildify-space' to take effect.
+	(tildify-space-region-predicate): A new functions meant to be
+	used as a predicate in `tildify-space-predicates' list.
+	(tildify-mode): A new minor mode enabling `tildify-space' as a
+	`post-self-insert-hook'
+
 2015-01-20  Daniel Colascione  
 
 	* vc/vc-dir.el (vc-dir): Default to repository root, not
diff --git a/lisp/textmodes/tildify.el b/lisp/textmodes/tildify.el
index 9382b32..b11d7da 100644
--- a/lisp/textmodes/tildify.el
+++ b/lisp/textmodes/tildify.el
@@ -4,7 +4,7 @@
 
 ;; Author:     Milan Zamazal 
 ;;             Michal Nazarewicz 
-;; Version:    4.5.7
+;; Version:    4.6
 ;; Keywords:   text, TeX, SGML, wp
 
 ;; This file is part of GNU Emacs.
@@ -401,6 +401,92 @@ replacements done and response is one of symbols: t (all right), nil
                         (t t))))))
 
 
+;;; *** Tildify Mode ***
+
+(defcustom tildify-space-pattern "[,:;(][ \t]*[a]\\|\\<[AIKOSUVWZikosuvwz]"
+  "Pattern specifying whether to insert a hard space at point.
+
+If the pattern matches `looking-back', a hard space needs to be inserted instead
+of a space at point.  The regexp is always case sensitive, regardless of the
+current `case-fold-search' setting."
+  :version "25.1"
+  :group 'tildify
+  :type 'string)
+
+(defcustom tildify-space-predicates '(tildify-space-region-predicate)
+  "A list of predicate functions for `tildify-space' function."
+  :version "25.1"
+  :group 'tildify
+  :type '(repeat 'function))
+
+
+;;;###autoload
+(defun tildify-space ()
+  "Convert space before point into a hard space if the context is right.
+
+If
+ * character before point is a space character,
+ * character before that has “w†character syntax (i.e. it's a word
+   constituent),
+ * `tildify-space-pattern' matches when `looking-back' (no more than 10
+   characters) from before the space character, and
+ * all predicates in `tildify-space-predicates' return non-nil,
+replace the space character with a hard space specified by
+`tildify-space-string' (note that the function does not take
+`tildify-string-alist' into consideration).
+
+Return t if conversion happened, nil otherwise.
+
+This function is meant to be used as a `post-self-insert-hook'."
+  (interactive)
+  (let ((p (point)) case-fold-search)
+    (when (and (> (- p (point-min)) 2)
+               (eq (preceding-char) ?\s)
+               (eq (char-syntax (char-before (1- p))) ?w)
+               (not (string-equal " " tildify-space-string))
+               (save-excursion
+                 (goto-char (1- p))
+                 (looking-back tildify-space-pattern
+                               (max (point-min) (- p 10))))
+               (run-hook-with-args-until-failure 'tildify-space-predicates))
+      (delete-char -1)
+      (insert tildify-space-string)
+      t)))
+
+(defun tildify-space-region-predicate ()
+  "Check whether character before point should be tildified.
+Based on `tildify-foreach-region-function', check whether character before,
+which is assumed to be a space character, should be replaced with a hard space."
+  (catch 'found
+    (tildify--foreach-region (lambda (_b _e) (throw 'found t)) (1- (point)) (point))))
+
+;;;###autoload
+(define-minor-mode tildify-mode
+  "Adds electric behaviour to space character.
+
+When space is inserted into a buffer in a position where hard space is required
+instead (determined by `tildify-space-pattern' and `tildify-space-predicates'),
+that space character is replaced by a hard space specified by
+`tildify-space-string'.  Converting of the space is done by `tildify-space'.
+
+When `tildify-mode' is enabled, if `tildify-string-alist' specifies a hard space
+representation for current major mode, the `tildify-space-string' buffer-local
+variable will be set to the representation."
+  nil " ~" nil
+  (when tildify-mode
+    (let ((space (tildify--pick-alist-entry tildify-string-alist)))
+      (if (not (string-equal " " (or space tildify-space-string)))
+          (when space
+            (setq tildify-space-string space))
+        (message (eval-when-compile
+                   (concat "Hard space is a single space character, tildify-"
+                           "mode won't have any effect, disabling.")))
+        (setq tildify-mode nil))))
+  (if tildify-mode
+      (add-hook 'post-self-insert-hook 'tildify-space nil t)
+    (remove-hook 'post-self-insert-hook 'tildify-space t)))
+
+
 ;;; *** Announce ***
 
 (provide 'tildify)
diff --git a/test/ChangeLog b/test/ChangeLog
index 4b9e7a9..0325f27 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,11 @@
+2014-01-20  Michal Nazarewicz  
+
+	* automated/tildify-tests.el (tildify-space-test--test):
+	A new helper function for testing `tildify-space' function.
+	(tildify-space-test-html, tildify-space-test-html-nbsp)
+	(tildify-space-test-xml, tildify-space-test-tex): New tests for
+	`tildify-space' function.
+
 2015-01-18  Stefan Monnier  
 
 	* automated/Makefile.in (EMACS_EXTRAOPT): New var.
diff --git a/test/automated/tildify-tests.el b/test/automated/tildify-tests.el
index b1f3de9..dcbbbf1 100644
--- a/test/automated/tildify-tests.el
+++ b/test/automated/tildify-tests.el
@@ -185,6 +185,44 @@ The function must terminate as soon as callback returns nil."
       (+ (point-min) 10) (+ (point-min) 20)))) ; start at "3" end past "5"
 
 
+(defun tildify-space-test--test (modes nbsp env-open &optional set-space-string)
+  (with-temp-buffer
+    (dolist (mode modes)
+      (funcall mode)
+      (when set-space-string
+        (setq-local tildify-space-string nbsp))
+      (let ((header (concat "Testing `tildify-space' in "
+                            (symbol-name mode) "\n")))
+        ;; Replace space with hard space.
+        (erase-buffer)
+        (insert header "Lorem v ")
+        (should (tildify-space))
+        (should (string-equal (concat header "Lorem v" nbsp) (buffer-string)))
+        ;; Inside and ignore environment, replacing does not happen.
+        (erase-buffer)
+        (insert header env-open "Lorem v ")
+        (should (not (tildify-space)))
+        (should (string-equal (concat header env-open "Lorem v ")
+                              (buffer-string)))))))
+
+(ert-deftest tildify-space-test-html ()
+  "Tests auto-tildification in an HTML document"
+  (tildify-space-test--test '(html-mode sgml-mode) " " "
"))
+
+(ert-deftest tildify-space-test-html-nbsp ()
+  "Tests auto-tildification in an HTML document"
+  (tildify-space-test--test '(html-mode sgml-mode) " " "
" t))
+
+(ert-deftest tildify-space-test-xml ()
+  "Tests auto-tildification in an XML document"
+  (tildify-space-test--test '(nxml-mode) " " "
Date:   Tue Jan 20 13:24:09 2015 +0300

    Prefer xlispstrdup to avoid dumb calls to strlen
    
    * nsfont.m (ns_get_family):
    * nsterm.m (ns_term_init):
    * w32fns.c (w32_window):
    * xfns.c (x_window, Fx_select_font): Use xlispstrdup.

diff --git a/src/ChangeLog b/src/ChangeLog
index b8528c2..6257cc4 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,11 @@
+2015-01-20  Dmitry Antipov  
+
+	Prefer xlispstrdup to avoid dumb calls to strlen.
+	* nsfont.m (ns_get_family):
+	* nsterm.m (ns_term_init):
+	* w32fns.c (w32_window):
+	* xfns.c (x_window, Fx_select_font): Use xlispstrdup.
+
 2015-01-20  Paul Eggert  
 
 	Correct an old fix for GTK font selection
diff --git a/src/nsfont.m b/src/nsfont.m
index f5e89d3..683ab17 100644
--- a/src/nsfont.m
+++ b/src/nsfont.m
@@ -93,7 +93,7 @@ ns_get_family (Lisp_Object font_spec)
       return nil;
   else
     {
-      char *tmp = xstrdup (SSDATA (SYMBOL_NAME (tem)));
+      char *tmp = xlispstrdup (SYMBOL_NAME (tem));
       NSString *family;
       ns_unescape_name (tmp);
       family = [NSString stringWithUTF8String: tmp];
diff --git a/src/nsterm.m b/src/nsterm.m
index bf3192b..b07fa1c 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -4313,7 +4313,7 @@ ns_term_init (Lisp_Object display_name)
 
   dpyinfo->name_list_element = Fcons (display_name, Qnil);
 
-  terminal->name = xstrdup (SSDATA (display_name));
+  terminal->name = xlispstrdup (display_name);
 
   unblock_input ();
 
diff --git a/src/w32fns.c b/src/w32fns.c
index 2dd92ff..55e5829 100644
--- a/src/w32fns.c
+++ b/src/w32fns.c
@@ -4208,7 +4208,7 @@ w32_window (struct frame *f, long window_prompting, int minibuffer_only)
      for the window manager, so GC relocation won't bother it.
 
      Elsewhere we specify the window name for the window manager.  */
-  f->namebuf = xstrdup (SSDATA (Vx_resource_name));
+  f->namebuf = xlispstrdup (Vx_resource_name);
 
   my_create_window (f);
 
diff --git a/src/xfns.c b/src/xfns.c
index 936c769..a09e4a6 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -2238,7 +2238,7 @@ x_window (struct frame *f, long window_prompting, int minibuffer_only)
      for the window manager, so GC relocation won't bother it.
 
      Elsewhere we specify the window name for the window manager.  */
-  f->namebuf = xstrdup (SSDATA (Vx_resource_name));
+  f->namebuf = xlispstrdup (Vx_resource_name);
 
   ac = 0;
   XtSetArg (al[ac], XtNallowShellResize, 1); ac++;
@@ -5995,12 +5995,12 @@ nil, it defaults to the selected frame. */)
   XSETFONT (font, FRAME_FONT (f));
   font_param = Ffont_get (font, intern (":name"));
   if (STRINGP (font_param))
-    default_name = xstrdup (SSDATA (font_param));
+    default_name = xlispstrdup (font_param);
   else
     {
       font_param = Fframe_parameter (frame, Qfont_param);
       if (STRINGP (font_param))
-        default_name = xstrdup (SSDATA (font_param));
+        default_name = xlispstrdup (font_param);
     }
 
   font = xg_get_font (f, default_name);

commit d13fc2913d7c106f3c78e16fa2961678b8f9c472
Author: Paul Eggert 
Date:   Tue Jan 20 00:51:06 2015 -0800

    * dispnew.c: Remove no-longer-valid comment.

diff --git a/src/dispnew.c b/src/dispnew.c
index e76be21..06b34d8 100644
--- a/src/dispnew.c
+++ b/src/dispnew.c
@@ -413,11 +413,6 @@ adjust_glyph_matrix (struct window *w, struct glyph_matrix *matrix, int x, int y
       new_rows = dim.height - matrix->rows_allocated;
       matrix->rows = xpalloc (matrix->rows, &matrix->rows_allocated,
 			      new_rows, INT_MAX, sizeof *matrix->rows);
-      /* As a side effect, this sets the object of each glyph in the
-	 row to nil, so verify we will indeed get that.  Redisplay
-	 relies on the object of special glyphs (truncation and
-	 continuation glyps and also blanks used to extend each line
-	 on a TTY) to be nil.  */
       memset (matrix->rows + old_alloc, 0,
 	      (matrix->rows_allocated - old_alloc) * sizeof *matrix->rows);
     }

commit f302475471df0553b3ee442112981f9b146e0b55
Author: Daniel Colascione 
Date:   Mon Jan 19 21:44:30 2015 -0800

    Make vc-dir default to repository root
    
    * lisp/vc/vc-dir.el (vc-dir): Default to repository root, not
    default-directory.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index cabad65..22a06a9 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-20  Daniel Colascione  
+
+	* vc/vc-dir.el (vc-dir): Default to repository root, not
+	default-directory.
+
 2015-01-20  Dmitry Gutov  
 
 	* progmodes/etags.el (xref-etags-location): New class.
diff --git a/lisp/vc/vc-dir.el b/lisp/vc/vc-dir.el
index 8bba79c..e050c94 100644
--- a/lisp/vc/vc-dir.el
+++ b/lisp/vc/vc-dir.el
@@ -1241,7 +1241,7 @@ These are the commands available for use in the file status buffer:
     ;; Otherwise if you do C-x v d -> C-x C-f -> C-c v d
     ;; you may get a new *vc-dir* buffer, different from the original
     (file-truename (read-directory-name "VC status for directory: "
-					default-directory default-directory t
+					(vc-root-dir) nil t
 					nil))
     (if current-prefix-arg
 	(intern

commit ef5a526f1b51b76b0f753e0936c80743a7f4463d
Author: Paul Eggert 
Date:   Mon Jan 19 20:42:40 2015 -0800

    Correct an old fix for GTK font selection
    
    * gtkutil.c (xg_get_font): Fix off-by-2 typo.
    Fixes: bug#3228

diff --git a/src/ChangeLog b/src/ChangeLog
index ad7780f..b8528c2 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,9 @@
 2015-01-20  Paul Eggert  
 
+	Correct an old fix for GTK font selection
+	* gtkutil.c (xg_get_font): Fix off-by-2 typo.
+	Fixes: bug#3228
+
 	Fix minor bugs with printing null bytes
 	* minibuf.c (read_minibuf_noninteractive):
 	* xdisp.c (Ftrace_to_stderr) [GLYPH_DEBUG]:
diff --git a/src/gtkutil.c b/src/gtkutil.c
index 694278a..da05742 100644
--- a/src/gtkutil.c
+++ b/src/gtkutil.c
@@ -2093,7 +2093,7 @@ xg_get_font (struct frame *f, const char *default_name)
 	  args[8] = QCtype;
 	  args[9] = Qxft;
 
-	  font = Ffont_spec (8, args);
+	  font = Ffont_spec (10, args);
 
 	  pango_font_description_free (desc);
 	  dupstring (&x_last_font_name, name);

commit 97bf923892a781b71442562510c9ef8492eb1dfe
Author: Paul Eggert 
Date:   Mon Jan 19 20:28:51 2015 -0800

    Fix minor bugs with printing null bytes
    
    * minibuf.c (read_minibuf_noninteractive):
    * xdisp.c (Ftrace_to_stderr) [GLYPH_DEBUG]:
    Work even if the Lisp string contains a null byte.

diff --git a/src/ChangeLog b/src/ChangeLog
index b77f00c..ad7780f 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,10 @@
 2015-01-20  Paul Eggert  
 
+	Fix minor bugs with printing null bytes
+	* minibuf.c (read_minibuf_noninteractive):
+	* xdisp.c (Ftrace_to_stderr) [GLYPH_DEBUG]:
+	Work even if the Lisp string contains a null byte.
+
 	Port to hypothetical case where Qnil is nonzero
 	* alloc.c (allocate_pseudovector):
 	* callint.c (Fcall_interactively):
diff --git a/src/minibuf.c b/src/minibuf.c
index 07f4892..0d6e2c7 100644
--- a/src/minibuf.c
+++ b/src/minibuf.c
@@ -217,7 +217,7 @@ read_minibuf_noninteractive (Lisp_Object map, Lisp_Object initial,
       suppress_echo_on_tty (fileno (stdin));
     }
 
-  fprintf (stdout, "%s", SDATA (prompt));
+  fwrite (SDATA (prompt), 1, SBYTES (prompt), stdout);
   fflush (stdout);
 
   val = Qnil;
diff --git a/src/xdisp.c b/src/xdisp.c
index 8d53274..9abaeb0 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -18815,7 +18815,7 @@ usage: (trace-to-stderr STRING &rest OBJECTS)  */)
   (ptrdiff_t nargs, Lisp_Object *args)
 {
   Lisp_Object s = Fformat (nargs, args);
-  fprintf (stderr, "%s", SDATA (s));
+  fwrite (SDATA (s), 1, SBYTES (s), stderr);
   return Qnil;
 }
 

commit 3ca37be9e754ca7e593736a31f0124722011d900
Author: Dmitry Gutov 
Date:   Tue Jan 20 04:52:48 2015 +0200

    Expand xref help-echo string
    
    * lisp/progmodes/xref.el (xref--insert-xrefs): Expand help-echo string.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 3f7182d..cabad65 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -6,6 +6,7 @@
 	(xref-location-marker): New method implementation.
 
 	* progmodes/xref.el: Mention that xref-location is an EIEIO class.
+	(xref--insert-xrefs): Expand help-echo string.
 
 2015-01-19  Dmitry Gutov  
 
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index 536096f..92144cf 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -458,7 +458,7 @@ GROUP is a string for decoration purposes and XREF is an
                              'face 'font-lock-keyword-face
                              'mouse-face 'highlight
                              'keymap xref--button-map
-                             'help-echo "mouse-2: display, RET or mouse-1: navigate")
+                             'help-echo "mouse-2: display in another window, RET or mouse-1: navigate")
                        description))
                     (when (or more1 more2)
                       (insert "\n")))))

commit 05fb53a16c00bd4067ddd6d6a18c6744b91bd1f2
Author: Dmitry Gutov 
Date:   Tue Jan 20 04:28:50 2015 +0200

    Use etags-goto-tag-location in etags xref backend
    
    * progmodes/etags.el (xref-etags-location): New class.
    (xref-make-etags-location): New function.
    (etags--xref-find-definitions): Use it.
    (xref-location-marker): New method implementation.
    
    * lisp/progmodes/xref.el: Mention that xref-location is an EIEIO class.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index b1a3a73..3f7182d 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,12 @@
+2015-01-20  Dmitry Gutov  
+
+	* progmodes/etags.el (xref-etags-location): New class.
+	(xref-make-etags-location): New function.
+	(etags--xref-find-definitions): Use it.
+	(xref-location-marker): New method implementation.
+
+	* progmodes/xref.el: Mention that xref-location is an EIEIO class.
+
 2015-01-19  Dmitry Gutov  
 
 	* ido.el: Update Customization instructions.
diff --git a/lisp/progmodes/etags.el b/lisp/progmodes/etags.el
index 47b305f..dc3380d 100644
--- a/lisp/progmodes/etags.el
+++ b/lisp/progmodes/etags.el
@@ -2100,17 +2100,35 @@ for \\[find-tag] (which see)."
                       (< (hash-table-count marks) etags--xref-limit))
             (when (funcall order-fun pattern)
               (beginning-of-line)
-              (cl-destructuring-bind (hint line &rest pos) (etags-snarf-tag)
+              (pcase-let* ((tag-info (etags-snarf-tag))
+                           (`(,hint ,line . _) tag-info))
                 (unless (eq hint t) ; hint==t if we are in a filename line
                   (let* ((file (file-of-tag))
                          (mark-key (cons file line)))
                     (unless (gethash mark-key marks)
-                      (let ((loc (xref-make-file-location
-                                  (expand-file-name file) line 0)))
+                      (let ((loc (xref-make-etags-location
+                                  tag-info (expand-file-name file))))
                         (push (xref-make hint loc) xrefs)
                         (puthash mark-key t marks)))))))))))
     (nreverse xrefs)))
 
+(defclass xref-etags-location (xref-location)
+  ((tag-info :type list   :initarg :tag-info)
+   (file     :type string :initarg :file
+             :reader xref-location-group))
+  :documentation "Location of an etags tag.")
+
+(defun xref-make-etags-location (tag-info file)
+  (make-instance 'xref-etags-location :tag-info tag-info
+                 :file (expand-file-name file)))
+
+(defmethod xref-location-marker ((l xref-etags-location))
+  (with-slots (tag-info file) l
+    (let ((buffer (find-file-noselect file)))
+      (with-current-buffer buffer
+        (etags-goto-tag-location tag-info)
+        (point-marker)))))
+
 
 (provide 'etags)
 
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index 12123c8..536096f 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -34,7 +34,9 @@
 ;;
 ;; One would usually call `make-xref' and `xref-make-file-location',
 ;; `xref-make-buffer-location' or `xref-make-bogus-location' to create
-;; them.
+;; them.  More generally, a location must be an instance of an EIEIO
+;; class inheriting from `xref-location' and implementing
+;; `xref-location-group' and `xref-location-marker'.
 ;;
 ;; Each identifier must be represented as a string.  Implementers can
 ;; use string properties to store additional information about the

commit 347e01447194e511daaeee8835bcb86d2505e642
Author: Paul Eggert 
Date:   Mon Jan 19 16:49:11 2015 -0800

    Port to hypothetical case where Qnil is nonzero
    
    * alloc.c (allocate_pseudovector):
    * callint.c (Fcall_interactively):
    * coding.c (syms_of_coding):
    * dispnew.c (realloc_glyph_pool):
    * fringe.c (init_fringe):
    * lisp.h (memsetnil):
    * xdisp.c (init_iterator):
    Port to the currently-hypothetical case where Qnil is nonzero.
    * dispnew.c (adjust_glyph_matrix): Remove unnecessary verification,
    as there are no Lisp_Object values in the data here.
    * lisp.h (NIL_IS_NONZERO): New symbol, replacing NIL_IS_ZERO.
    All uses changed.  Define only if not already defined, so that one
    can debug with -DNIL_IS_NONZERO.
    * xdisp.c (init_iterator): Remove unnecessary initializations to 0.

diff --git a/src/ChangeLog b/src/ChangeLog
index f6a5f38..b77f00c 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,21 @@
+2015-01-20  Paul Eggert  
+
+	Port to hypothetical case where Qnil is nonzero
+	* alloc.c (allocate_pseudovector):
+	* callint.c (Fcall_interactively):
+	* coding.c (syms_of_coding):
+	* dispnew.c (realloc_glyph_pool):
+	* fringe.c (init_fringe):
+	* lisp.h (memsetnil):
+	* xdisp.c (init_iterator):
+	Port to the currently-hypothetical case where Qnil is nonzero.
+	* dispnew.c (adjust_glyph_matrix): Remove unnecessary verification,
+	as there are no Lisp_Object values in the data here.
+	* lisp.h (NIL_IS_NONZERO): New symbol, replacing NIL_IS_ZERO.
+	All uses changed.  Define only if not already defined, so that one
+	can debug with -DNIL_IS_NONZERO.
+	* xdisp.c (init_iterator): Remove unnecessary initializations to 0.
+
 2015-01-19  Eli Zaretskii  
 
 	* dispnew.c (adjust_glyph_matrix, realloc_glyph_pool): Verify that
diff --git a/src/alloc.c b/src/alloc.c
index 2c7b02f..d758ca1 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -3175,9 +3175,10 @@ allocate_pseudovector (int memlen, int lisplen,
   eassert (lisplen <= (1 << PSEUDOVECTOR_SIZE_BITS) - 1);
 
   /* Only the first LISPLEN slots will be traced normally by the GC.
-     But since Qnil == 0, we can memset Lisp_Object slots as well.  */
-  verify (NIL_IS_ZERO);
-  memset (v->contents, 0, zerolen * word_size);
+     If Qnil is nonzero, clear the non-Lisp data separately.  */
+  memsetnil (v->contents, zerolen);
+  if (NIL_IS_NONZERO)
+    memset (v->contents + lisplen, 0, (zerolen - lisplen) * word_size);
 
   XSETPVECTYPESIZE (v, tag, lisplen, memlen - lisplen);
   return v;
diff --git a/src/callint.c b/src/callint.c
index 3a595b5..43566ac 100644
--- a/src/callint.c
+++ b/src/callint.c
@@ -509,8 +509,9 @@ invoke it.  If KEYS is omitted or nil, the return value of
   visargs = args + nargs;
   varies = (signed char *) (visargs + nargs);
 
-  verify (NIL_IS_ZERO);
   memset (args, 0, nargs * (2 * word_size + 1));
+  if (NIL_IS_NONZERO)
+    memsetnil (args, nargs * 2);
 
   GCPRO5 (prefix_arg, function, *args, *visargs, up_event);
   gcpro3.nvars = nargs;
diff --git a/src/coding.c b/src/coding.c
index 77cea77..b95c0a5 100644
--- a/src/coding.c
+++ b/src/coding.c
@@ -11272,8 +11272,8 @@ internal character representation.  */);
     Vtranslation_table_for_input = Qnil;
 
   {
-    verify (NIL_IS_ZERO);
-    Lisp_Object args[coding_arg_undecided_max] = { LISP_INITIALLY_ZERO, };
+    Lisp_Object args[coding_arg_undecided_max];
+    memsetnil (args, ARRAYELTS (args));
 
     Lisp_Object plist[16];
     plist[0] = intern_c_string (":name");
diff --git a/src/dispnew.c b/src/dispnew.c
index 4aaf6db..e76be21 100644
--- a/src/dispnew.c
+++ b/src/dispnew.c
@@ -418,7 +418,6 @@ adjust_glyph_matrix (struct window *w, struct glyph_matrix *matrix, int x, int y
 	 relies on the object of special glyphs (truncation and
 	 continuation glyps and also blanks used to extend each line
 	 on a TTY) to be nil.  */
-      verify (NIL_IS_ZERO);
       memset (matrix->rows + old_alloc, 0,
 	      (matrix->rows_allocated - old_alloc) * sizeof *matrix->rows);
     }
@@ -1345,14 +1344,15 @@ realloc_glyph_pool (struct glyph_pool *pool, struct dim matrix_dim)
       ptrdiff_t old_nglyphs = pool->nglyphs;
       pool->glyphs = xpalloc (pool->glyphs, &pool->nglyphs,
 			      needed - old_nglyphs, -1, sizeof *pool->glyphs);
-      /* As a side effect, this sets the object of each glyph to nil,
-	 so verify we will indeed get that.  Redisplay relies on the
-	 object of special glyphs (truncation and continuation glyps
-	 and also blanks used to extend each line on a TTY) to be
-	 nil.  */
-      verify (NIL_IS_ZERO);
       memset (pool->glyphs + old_nglyphs, 0,
 	      (pool->nglyphs - old_nglyphs) * sizeof *pool->glyphs);
+
+      /* Set the object of each glyph to nil.  Redisplay relies on
+	 this for objects of special glyphs (truncation and continuation
+	 glyphs and also blanks used to extend each line on a TTY).  */
+      if (NIL_IS_NONZERO)
+	for (ptrdiff_t i = old_nglyphs; i < pool->nglyphs; i++)
+	  pool->glyphs[i].object = Qnil;
     }
 
   /* Remember the number of rows and columns because (a) we use them
diff --git a/src/fringe.c b/src/fringe.c
index 464379d..a494f68 100644
--- a/src/fringe.c
+++ b/src/fringe.c
@@ -1727,8 +1727,9 @@ init_fringe (void)
 
   fringe_bitmaps = xzalloc (max_fringe_bitmaps * sizeof *fringe_bitmaps);
 
-  verify (NIL_IS_ZERO);
   fringe_faces = xzalloc (max_fringe_bitmaps * sizeof *fringe_faces);
+  if (NIL_IS_NONZERO)
+    memsetnil (fringe_faces, max_fringe_bitmaps);
 }
 
 #ifdef HAVE_NTGUI
diff --git a/src/lisp.h b/src/lisp.h
index a1ea355..119257b 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -1503,18 +1503,22 @@ gc_aset (Lisp_Object array, ptrdiff_t idx, Lisp_Object val)
   XVECTOR (array)->contents[idx] = val;
 }
 
-/* True, since Qnil's representation is zero.  Every place in the code
-   that assumes Qnil is zero should verify (NIL_IS_ZERO), to make it easy
-   to find such assumptions later if we change Qnil to be nonzero.  */
-enum { NIL_IS_ZERO = XLI_BUILTIN_LISPSYM (iQnil) == 0 };
+/* True if Qnil's representation is nonzero.  This is always false currently,
+   but there is fallback code for hypothetical alternative implementations.
+   Compile with -DNIL_IS_NONZERO to test the fallback code.  */
+#ifndef NIL_IS_NONZERO
+enum { NIL_IS_NONZERO = XLI_BUILTIN_LISPSYM (iQnil) != 0 };
+#endif
 
-/* Set a Lisp_Object array V's SIZE entries to nil.  */
+/* Set a Lisp_Object array V's N entries to nil.  */
 INLINE void
-memsetnil (Lisp_Object *v, ptrdiff_t size)
+memsetnil (Lisp_Object *v, ptrdiff_t n)
 {
-  eassert (0 <= size);
-  verify (NIL_IS_ZERO);
-  memset (v, 0, size * sizeof *v);
+  eassert (0 <= n);
+  memset (v, 0, n * sizeof *v);
+  if (NIL_IS_NONZERO)
+    for (ptrdiff_t i = 0; i < n; i++)
+      v[i] = Qnil;
 }
 
 /* If a struct is made to look like a vector, this macro returns the length
diff --git a/src/xdisp.c b/src/xdisp.c
index 2442367..8d53274 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -2747,19 +2747,22 @@ init_iterator (struct it *it, struct window *w,
     }
 
   /* Clear IT.  */
-  /* As a side effect, this sets it->object to nil, so verify we will
-     indeed get that.  */
-  verify (NIL_IS_ZERO);
   memset (it, 0, sizeof *it);
+  if (NIL_IS_NONZERO)
+    {
+      it->string = Qnil;
+      it->from_overlay = Qnil;
+      it->slice.x = it->slice.y = it->slice.width = it->slice.height = Qnil;
+      it->space_width = Qnil;
+      it->font_height = Qnil;
+      it->object = Qnil;
+      it->bidi_it.string.lstring = Qnil;
+    }
   it->current.overlay_string_index = -1;
   it->current.dpvec_index = -1;
   it->base_face_id = remapped_base_face_id;
-  it->string = Qnil;
   IT_STRING_CHARPOS (*it) = IT_STRING_BYTEPOS (*it) = -1;
   it->paragraph_embedding = L2R;
-  it->bidi_it.string.lstring = Qnil;
-  it->bidi_it.string.s = NULL;
-  it->bidi_it.string.bufpos = 0;
   it->bidi_it.w = w;
 
   /* The window in which we iterate over current_buffer:  */
@@ -2780,7 +2783,6 @@ init_iterator (struct it *it, struct window *w,
 				  * FRAME_LINE_HEIGHT (it->f));
       else if (it->f->extra_line_spacing > 0)
 	it->extra_line_spacing = it->f->extra_line_spacing;
-      it->max_extra_line_spacing = 0;
     }
 
   /* If realized faces have been removed, e.g. because of face
@@ -2792,10 +2794,6 @@ init_iterator (struct it *it, struct window *w,
   if (FRAME_FACE_CACHE (it->f)->used == 0)
     recompute_basic_faces (it->f);
 
-  /* Current value of the `slice', `space-width', and 'height' properties.  */
-  it->slice.x = it->slice.y = it->slice.width = it->slice.height = Qnil;
-  it->space_width = Qnil;
-  it->font_height = Qnil;
   it->override_ascent = -1;
 
   /* Are control characters displayed as `^C'?  */
@@ -2833,21 +2831,19 @@ init_iterator (struct it *it, struct window *w,
   it->tab_width = SANE_TAB_WIDTH (current_buffer);
 
   /* Are lines in the display truncated?  */
-  if (base_face_id != DEFAULT_FACE_ID
-      || it->w->hscroll
-      || (! WINDOW_FULL_WIDTH_P (it->w)
-	  && ((!NILP (Vtruncate_partial_width_windows)
-	       && !INTEGERP (Vtruncate_partial_width_windows))
-	      || (INTEGERP (Vtruncate_partial_width_windows)
-		  /* PXW: Shall we do something about this?  */
-		  && (WINDOW_TOTAL_COLS (it->w)
-		      < XINT (Vtruncate_partial_width_windows))))))
+  if (TRUNCATE != 0)
     it->line_wrap = TRUNCATE;
-  else if (NILP (BVAR (current_buffer, truncate_lines)))
+  if (base_face_id == DEFAULT_FACE_ID
+      && !it->w->hscroll
+      && (WINDOW_FULL_WIDTH_P (it->w)
+	  || NILP (Vtruncate_partial_width_windows)
+	  || (INTEGERP (Vtruncate_partial_width_windows)
+	      /* PXW: Shall we do something about this?  */
+	      && (XINT (Vtruncate_partial_width_windows)
+		  <= WINDOW_TOTAL_COLS (it->w))))
+      && NILP (BVAR (current_buffer, truncate_lines)))
     it->line_wrap = NILP (BVAR (current_buffer, word_wrap))
       ? WINDOW_WRAP : WORD_WRAP;
-  else
-    it->line_wrap = TRUNCATE;
 
   /* Get dimensions of truncation and continuation glyphs.  These are
      displayed as fringe bitmaps under X, but we need them for such

commit fee879f0a00bbe3f3389509874ee30a9cbc24cd4
Merge: 395a90f fb6462f
Author: Joakim Verona 
Date:   Tue Jan 20 00:54:09 2015 +0100

    Merge branch 'master' into xwidget

commit 395a90fee92a836f55df0b879f8ee3d862d648ac
Merge: 54efd2a 35471ba
Author: Joakim Verona 
Date:   Tue Jan 20 00:50:50 2015 +0100

    Merge branch 'xwscroll' into xwidget

commit 35471ba2e31f038cf503c380e912f4559f1a92de
Author: Joakim Verona 
Date:   Tue Jan 20 00:48:41 2015 +0100

    Implement native scrolling of the webkit xwidget
    
    It is now possible to use native scrolling with the webkit view.
    There is also a new function xwidget-set-adjustment,
    which can manipulate the viewport.

diff --git a/src/xwidget.c b/src/xwidget.c
index 00913ca..708053c 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -76,6 +76,7 @@
 #ifdef HAVE_GTK3
 //for gtk3; sockets and plugs
 #include 
+#include 
 #include "emacsgtkfixed.h"
 #endif
 
@@ -146,6 +147,9 @@ gboolean webkit_osr_navigation_policy_decision_requested_callback(WebKitWebView
                                                                   gpointer                   user_data);
 
 GtkWidget* xwgir_create(char* class, char* namespace);
+
+
+
 static void
 send_xembed_ready_event (struct xwidget* xw, int xembedid);
 DEFUN ("make-xwidget", Fmake_xwidget, Smake_xwidget, 7, 8, 0,
@@ -194,6 +198,8 @@ TYPE is a symbol which can take one of the following values:
   xw->plist = Qnil;
 
 
+
+
 #ifdef HAVE_WEBKIT_OSR
   /* DIY mvc. widget is rendered offscreen,
      later bitmap copied to the views.
@@ -204,9 +210,17 @@ TYPE is a symbol which can take one of the following values:
       block_input();
       xw->widgetwindow_osr = gtk_offscreen_window_new ();
       gtk_window_resize(GTK_WINDOW(xw->widgetwindow_osr), xw->width, xw->height);
+      xw->widgetscrolledwindow_osr = NULL; //webkit osr is the only scrolled component atm
 
-      if (EQ(xw->type, Qwebkit_osr))
-          xw->widget_osr = webkit_web_view_new();
+      if (EQ(xw->type, Qwebkit_osr)){
+        xw->widgetscrolledwindow_osr =   gtk_scrolled_window_new(NULL, NULL);
+        gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(xw->widgetscrolledwindow_osr ),xw->height);
+        gtk_scrolled_window_set_min_content_width(GTK_SCROLLED_WINDOW(xw->widgetscrolledwindow_osr ),xw->width);
+        gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(xw->widgetscrolledwindow_osr ), GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS);
+
+        xw->widget_osr=webkit_web_view_new();
+        gtk_container_add(GTK_CONTAINER(xw->widgetscrolledwindow_osr ), GTK_WIDGET( WEBKIT_WEB_VIEW(xw->widget_osr)));
+      }
       if(EQ(xw->type, Qsocket_osr))
           xw->widget_osr = gtk_socket_new();
       if(!NILP (Fget(xw->type, QCxwgir_class)))
@@ -214,10 +228,16 @@ TYPE is a symbol which can take one of the following values:
                                         SDATA(Fcar(Fget(xw->type, QCxwgir_class))));
 
       gtk_widget_set_size_request (GTK_WIDGET (xw->widget_osr), xw->width, xw->height);
-      gtk_container_add (GTK_CONTAINER (xw->widgetwindow_osr), xw->widget_osr);
+
+      if (EQ(xw->type, Qwebkit_osr)){
+        gtk_container_add (GTK_CONTAINER (xw->widgetwindow_osr), xw->widgetscrolledwindow_osr);
+      }else{
+        gtk_container_add (GTK_CONTAINER (xw->widgetwindow_osr), xw->widget_osr);
+      }
 
       gtk_widget_show (xw->widget_osr);
       gtk_widget_show (xw->widgetwindow_osr);
+      gtk_widget_show (xw->widgetscrolledwindow_osr);
 
       /* store some xwidget data in the gtk widgets for convenient retrieval in the event handlers. */
       g_object_set_data (G_OBJECT (xw->widget_osr), XG_XWIDGET, (gpointer) (xw));
@@ -541,8 +561,11 @@ xwidget_osr_draw_callback (GtkWidget *widget, cairo_t *cr, gpointer data)
   cairo_rectangle(cr, 0,0, xv->clip_right, xv->clip_bottom);//xw->width, xw->height);
   cairo_clip(cr);
 
-  gtk_widget_draw (xw->widget_osr, cr);
-
+  //
+  if(xw->widgetscrolledwindow_osr !=  NULL)
+    gtk_widget_draw (xw->widgetscrolledwindow_osr, cr);
+  else
+    gtk_widget_draw (xw->widget_osr, cr);
   return FALSE;
 }
 
@@ -564,7 +587,18 @@ xwidget_osr_event_forward (GtkWidget *widget,
   //((GdkEventAny*)eventcopy)->window = gtk_widget_get_window(xw->widget_osr);
   //eventcopy->any.window = gtk_widget_get_window(GTK_WIDGET (xw->widgetwindow_osr));
   //((GdkEventAny*)eventcopy)->window = gtk_widget_get_window(xwgir_create_debug);
-  eventcopy->any.window = gtk_widget_get_window(xw->widget_osr);//gtk_widget_get_window(xwgir_create_debug);
+
+
+
+  eventcopy->any.window = gtk_widget_get_window(xw->widget_osr);// works
+  //eventcopy->any.window = gtk_widget_get_window(xw->widgetwindow_osr);//nothing happens
+  //eventcopy->any.window = gtk_widget_get_window(gtk_scrolled_window_get_vscrollbar (GTK_SCROLLED_WINDOW(xw->widgetscrolledwindow_osr)));
+  //eventcopy->any.window = gtk_widget_get_window(xw->widgetscrolledwindow_osr); //nothing happens
+  //eventcopy->any.send_event = TRUE;
+  //gtk_scrolled_window_scroll_child (xw->widgetscrolledwindow_osr, GTK_SCROLL_STEP_DOWN, FALSE); // private
+
+
+
   //eventcopy->any.window = gtk_button_get_event_window(GTK_BUTTON(xw->widget_osr));//gtk_widget_get_window(xwgir_create_debug);
   //eventcopy->button.x=200; eventcopy->button.y=200;
   //event->button.button = GDK_BUTTON_PRIMARY; //debug
@@ -1149,7 +1183,7 @@ DEFUN ("xwidget-webkit-get-title", Fxwidget_webkit_get_title,  Sxwidget_webkit_g
 }
 
 //TODO missnamed
-DEFUN("xwidget-disable-plugin-for-mime", Fxwidget_disable_plugin_for_mime , Sxwidget_disable_plugin_for_mime,
+DEFUN ("xwidget-disable-plugin-for-mime", Fxwidget_disable_plugin_for_mime , Sxwidget_disable_plugin_for_mime,
       1,1,0, doc: /* */)
   (Lisp_Object mime)
 {
@@ -1219,8 +1253,6 @@ DEFUN ("xwidget-webkit-dom-dump", Fxwidget_webkit_dom_dump,  Sxwidget_webkit_dom
 
 
 
-
-
 DEFUN ("xwidget-resize", Fxwidget_resize, Sxwidget_resize, 3, 3, 0, doc:
        /* Resize XWIDGET.
           NEW_WIDTH NEW_HEIGHT defines the new size.)
@@ -1252,6 +1284,10 @@ DEFUN ("xwidget-resize", Fxwidget_resize, Sxwidget_resize, 3, 3, 0, doc:
     gtk_widget_set_size_request (GTK_WIDGET (xw->widget_osr), xw->width, xw->height); //minimum size
     //gtk_window_resize(    GTK_WINDOW(xw->widget_osr), xw->width, xw->height);
     gtk_window_resize(    GTK_WINDOW(xw->widgetwindow_osr), xw->width, xw->height);
+    gtk_window_resize(    GTK_WINDOW(xw->widgetscrolledwindow_osr), xw->width, xw->height);
+    gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(xw->widgetscrolledwindow_osr ),xw->height);
+    gtk_scrolled_window_set_min_content_width(GTK_SCROLLED_WINDOW(xw->widgetscrolledwindow_osr ),xw->width);
+
     //gtk_container_resize_children ( GTK_WINDOW(xw->widgetwindow_osr));
     gtk_container_resize_children (GTK_CONTAINER(xw->widgetwindow_osr));
 
@@ -1271,8 +1307,38 @@ DEFUN ("xwidget-resize", Fxwidget_resize, Sxwidget_resize, 3, 3, 0, doc:
   return Qnil;
 }
 
+
+
+DEFUN ("xwidget-set-adjustment", Fxwidget_set_adjustment, Sxwidget_set_adjustment, 4, 4, 0, doc:
+       /* set scrolling  */)
+  (Lisp_Object xwidget, Lisp_Object axis, Lisp_Object relative, Lisp_Object value)
+{
+  CHECK_XWIDGET (xwidget);
+  struct xwidget* xw = XXWIDGET(xwidget);
+  GtkAdjustment* adjustment;
+  float final_value=0.0;
+
+  if(EQ(Qvertical, axis)){
+    adjustment = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(xw->widgetscrolledwindow_osr));
+  }
+  if(EQ(Qhorizontal, axis)){
+    adjustment = gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(xw->widgetscrolledwindow_osr));
+  }
+
+  if(EQ(Qt, relative)){
+    final_value=gtk_adjustment_get_value(adjustment)+XFASTINT(value);
+  }else{
+     final_value=0.0+XFASTINT(value);
+  }
+
+  gtk_adjustment_set_value(adjustment, final_value);
+
+  return Qnil;
+}
+
+
 DEFUN ("xwidget-size-request", Fxwidget_size_request, Sxwidget_size_request, 1, 1, 0, doc:
--       /* Desired size of the XWIDGET.
+       /* Desired size of the XWIDGET.
 
   This can be used to read the xwidget desired size,  and resizes the Emacs allocated area accordingly.
 
@@ -1566,6 +1632,8 @@ syms_of_xwidget (void)
   defsubr (&Sxwidget_buffer);
   defsubr (&Sset_xwidget_plist);
 
+  defsubr (&Sxwidget_set_adjustment);
+
   DEFSYM (Qxwidget, "xwidget");
 
   DEFSYM (QCxwidget, ":xwidget");
@@ -1581,6 +1649,9 @@ syms_of_xwidget (void)
   DEFSYM (Qsocket_osr, "socket-osr");
   DEFSYM (Qcairo, "cairo");
 
+  DEFSYM (Qvertical, "vertical");
+  DEFSYM (Qhorizontal, "horizontal");
+
   DEFSYM (QCplist, ":plist");
 
   DEFVAR_LISP ("xwidget-list", Vxwidget_list, doc: /*xwidgets list*/);
diff --git a/src/xwidget.h b/src/xwidget.h
index 0db7653..cbaddf6 100644
--- a/src/xwidget.h
+++ b/src/xwidget.h
@@ -34,6 +34,8 @@ struct xwidget{
   //for offscreen widgets, unused if not osr
   GtkWidget* widget_osr;
   GtkWidget* widgetwindow_osr;
+  //this is used if the widget (webkit) is to be wrapped in a scrolled window,
+  GtkWidget* widgetscrolledwindow_osr;
   /* Non-nil means kill silently if Emacs is exited. */
   unsigned int kill_without_query : 1;
 

commit fb6462f056f616f3da8ae18037c7c2137fecb6fd
Author: Eli Zaretskii 
Date:   Mon Jan 19 19:22:17 2015 +0200

    Verify that Qnil is zero before relying on that in redisplay.
    
     src/dispnew.c (adjust_glyph_matrix, realloc_glyph_pool): Verify that
     Qnil is represented as zero, before using that to initialize parts
     of the glyph structure.
     src/xdisp.c (init_iterator): Verify that Qnil is represented as
     zero, before using that to initialize parts of the iterator
     structure.

diff --git a/src/ChangeLog b/src/ChangeLog
index 04b952c..f6a5f38 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,13 @@
+2015-01-19  Eli Zaretskii  
+
+	* dispnew.c (adjust_glyph_matrix, realloc_glyph_pool): Verify that
+	Qnil is represented as zero, before using that to initialize parts
+	of the glyph structure.
+
+	* xdisp.c (init_iterator): Verify that Qnil is represented as
+	zero, before using that to initialize parts of the iterator
+	structure.
+
 2015-01-19  Paul Eggert  
 
 	Prefer memset to repeatedly assigning Qnil
diff --git a/src/dispnew.c b/src/dispnew.c
index a643d58..4aaf6db 100644
--- a/src/dispnew.c
+++ b/src/dispnew.c
@@ -413,6 +413,12 @@ adjust_glyph_matrix (struct window *w, struct glyph_matrix *matrix, int x, int y
       new_rows = dim.height - matrix->rows_allocated;
       matrix->rows = xpalloc (matrix->rows, &matrix->rows_allocated,
 			      new_rows, INT_MAX, sizeof *matrix->rows);
+      /* As a side effect, this sets the object of each glyph in the
+	 row to nil, so verify we will indeed get that.  Redisplay
+	 relies on the object of special glyphs (truncation and
+	 continuation glyps and also blanks used to extend each line
+	 on a TTY) to be nil.  */
+      verify (NIL_IS_ZERO);
       memset (matrix->rows + old_alloc, 0,
 	      (matrix->rows_allocated - old_alloc) * sizeof *matrix->rows);
     }
@@ -1339,6 +1345,12 @@ realloc_glyph_pool (struct glyph_pool *pool, struct dim matrix_dim)
       ptrdiff_t old_nglyphs = pool->nglyphs;
       pool->glyphs = xpalloc (pool->glyphs, &pool->nglyphs,
 			      needed - old_nglyphs, -1, sizeof *pool->glyphs);
+      /* As a side effect, this sets the object of each glyph to nil,
+	 so verify we will indeed get that.  Redisplay relies on the
+	 object of special glyphs (truncation and continuation glyps
+	 and also blanks used to extend each line on a TTY) to be
+	 nil.  */
+      verify (NIL_IS_ZERO);
       memset (pool->glyphs + old_nglyphs, 0,
 	      (pool->nglyphs - old_nglyphs) * sizeof *pool->glyphs);
     }
diff --git a/src/xdisp.c b/src/xdisp.c
index f006f8e..2442367 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -2747,6 +2747,9 @@ init_iterator (struct it *it, struct window *w,
     }
 
   /* Clear IT.  */
+  /* As a side effect, this sets it->object to nil, so verify we will
+     indeed get that.  */
+  verify (NIL_IS_ZERO);
   memset (it, 0, sizeof *it);
   it->current.overlay_string_index = -1;
   it->current.dpvec_index = -1;

commit 39585cfd844003df47a554894dfa38573da1203c
Author: Dmitry Gutov 
Date:   Mon Jan 19 14:00:11 2015 +0200

    Fixup ChangeLog

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 144e97a..b1a3a73 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -5,7 +5,7 @@
 2015-01-19  Jonas Bernoulli  
 
 	Define Ido keymaps once (bug#17000).
-	* lisp/ido (ido-common-completion-map)
+	* ido.el (ido-common-completion-map)
 	(ido-file-dir-completion-map)
 	(ido-file-completion-map, ido-buffer-completion-map): Set up key
 	bindings when each variable is defined.

commit 5df0b2cb27564c4a167ce007aaa338a591c313ef
Author: Dmitry Gutov 
Date:   Mon Jan 19 13:55:51 2015 +0200

    * lisp/ido.el: Update Customization instructions

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 401f5a2..144e97a 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,7 @@
+2015-01-19  Dmitry Gutov  
+
+	* ido.el: Update Customization instructions.
+
 2015-01-19  Jonas Bernoulli  
 
 	Define Ido keymaps once (bug#17000).
diff --git a/lisp/ido.el b/lisp/ido.el
index 6a4f197..1f4e3fa 100644
--- a/lisp/ido.el
+++ b/lisp/ido.el
@@ -208,13 +208,13 @@
 ;;
 ;; Customize the Ido group to change the Ido functionality.
 ;;
-;; To modify the keybindings, use the ido-setup-hook.  For example:
-;;(add-hook 'ido-setup-hook 'ido-my-keys)
+;; To modify the keybindings, use `define-key' on
+;; `ido-common-completion-map' or one of the specialized keymaps:
+;; `ido-file-dir-completion-map', `ido-file-completion-map' or
+;; `ido-buffer-completion-map'.
 ;;
-;;(defun ido-my-keys ()
-;;  "Add my keybindings for ido."
-;;  (define-key ido-completion-map " " 'ido-next-match)
-;;  )
+;; (with-eval-after-load 'ido
+;;   (define-key ido-common-completion-map " " 'ido-next-match))
 
 ;; Seeing all the matching buffers or files
 ;; ----------------------------------------

commit db2ed6b798960f4067bbf2c7415f34b95b982818
Author: Jonas Bernoulli 
Date:   Mon Jan 19 13:54:14 2015 +0200

    Set up ido keymaps only once
    
    * lisp/ido (ido-common-completion-map)
    (ido-file-dir-completion-map)
    (ido-file-completion-map, ido-buffer-completion-map): Set up key
    bindings when each variable is defined.
    (ido-completion-map): Move definition.
    (ido-init-completion-maps): Noop.
    (ido-common-initialization): Don't call it.
    (ido-setup-completion-map): Improve doc-string, cleanup.
    
    Fixes: debbugs:17000

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 44d0cdd..401f5a2 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,15 @@
+2015-01-19  Jonas Bernoulli  
+
+	Define Ido keymaps once (bug#17000).
+	* lisp/ido (ido-common-completion-map)
+	(ido-file-dir-completion-map)
+	(ido-file-completion-map, ido-buffer-completion-map): Set up key
+	bindings when each variable is defined.
+	(ido-completion-map): Move definition.
+	(ido-init-completion-maps): Noop.
+	(ido-common-initialization): Don't call it.
+	(ido-setup-completion-map): Improve doc-string, cleanup.
+
 2015-01-19  Ivan Shmakov  
 
 	* cus-dep.el (custom-make-dependencies): Ensure that
diff --git a/lisp/ido.el b/lisp/ido.el
index 2321b57..6a4f197 100644
--- a/lisp/ido.el
+++ b/lisp/ido.el
@@ -323,8 +323,8 @@
 
 (defvar recentf-list)
 
-;;; User Variables
-;;
+;;;; Options
+
 ;; These are some things you might want to change.
 
 (defun ido-fractionp (n)
@@ -978,25 +978,90 @@ The fallback command is passed as an argument to the functions."
   :type 'hook
   :group 'ido)
 
-;;; Internal Variables
-
-;; Persistent variables
-
-(defvar ido-completion-map nil
-  "Currently active keymap for Ido commands.")
+;;;; Keymaps
 
-(defvar ido-common-completion-map nil
+(defvar ido-common-completion-map
+  (let ((map (make-sparse-keymap)))
+    (set-keymap-parent map minibuffer-local-map)
+    (define-key map "\C-a" 'ido-toggle-ignore)
+    (define-key map "\C-c" 'ido-toggle-case)
+    (define-key map "\C-e" 'ido-edit-input)
+    (define-key map "\t" 'ido-complete)
+    (define-key map " " 'ido-complete-space)
+    (define-key map "\C-j" 'ido-select-text)
+    (define-key map "\C-m" 'ido-exit-minibuffer)
+    (define-key map "\C-p" 'ido-toggle-prefix)
+    (define-key map "\C-r" 'ido-prev-match)
+    (define-key map "\C-s" 'ido-next-match)
+    (define-key map [?\C-.] 'ido-next-match)
+    (define-key map [?\C-,] 'ido-prev-match)
+    (define-key map "\C-t" 'ido-toggle-regexp)
+    (define-key map "\C-z" 'ido-undo-merge-work-directory)
+    (define-key map [(control ?\s)] 'ido-restrict-to-matches)
+    (define-key map [(meta ?\s)] 'ido-take-first-match)
+    (define-key map [(control ?@)] 'ido-restrict-to-matches)
+    (define-key map [right] 'ido-next-match)
+    (define-key map [left] 'ido-prev-match)
+    (define-key map "?" 'ido-completion-help)
+    (define-key map "\C-b" 'ido-magic-backward-char)
+    (define-key map "\C-f" 'ido-magic-forward-char)
+    (define-key map "\C-d" 'ido-magic-delete-char)
+    map)
   "Keymap for all Ido commands.")
 
-(defvar ido-file-completion-map nil
-  "Keymap for Ido file commands.")
-
-(defvar ido-file-dir-completion-map nil
+(defvar ido-file-dir-completion-map
+  (let ((map (make-sparse-keymap)))
+    (set-keymap-parent map ido-common-completion-map)
+    (define-key map "\C-x\C-b" 'ido-enter-switch-buffer)
+    (define-key map "\C-x\C-f" 'ido-fallback-command)
+    (define-key map "\C-x\C-d" 'ido-enter-dired)
+    (define-key map [down] 'ido-next-match-dir)
+    (define-key map [up]   'ido-prev-match-dir)
+    (define-key map [(meta up)] 'ido-prev-work-directory)
+    (define-key map [(meta down)] 'ido-next-work-directory)
+    (define-key map [backspace] 'ido-delete-backward-updir)
+    (define-key map "\d"        'ido-delete-backward-updir)
+    (define-key map [remap delete-backward-char] 'ido-delete-backward-updir) ; BS
+    (define-key map [remap backward-kill-word] 'ido-delete-backward-word-updir)  ; M-DEL
+    (define-key map [(control backspace)] 'ido-up-directory)
+    (define-key map "\C-l" 'ido-reread-directory)
+    (define-key map [(meta ?d)] 'ido-wide-find-dir-or-delete-dir)
+    (define-key map [(meta ?b)] 'ido-push-dir)
+    (define-key map [(meta ?v)] 'ido-push-dir-first)
+    (define-key map [(meta ?f)] 'ido-wide-find-file-or-pop-dir)
+    (define-key map [(meta ?k)] 'ido-forget-work-directory)
+    (define-key map [(meta ?m)] 'ido-make-directory)
+    (define-key map [(meta ?n)] 'ido-next-work-directory)
+    (define-key map [(meta ?o)] 'ido-prev-work-file)
+    (define-key map [(meta control ?o)] 'ido-next-work-file)
+    (define-key map [(meta ?p)] 'ido-prev-work-directory)
+    (define-key map [(meta ?s)] 'ido-merge-work-directories)
+    map)
   "Keymap for Ido file and directory commands.")
 
-(defvar ido-buffer-completion-map nil
+(defvar ido-file-completion-map
+  (let ((map (make-sparse-keymap)))
+    (set-keymap-parent map ido-file-dir-completion-map)
+    (define-key map "\C-k" 'ido-delete-file-at-head)
+    (define-key map "\C-o" 'ido-copy-current-word)
+    (define-key map "\C-w" 'ido-copy-current-file-name)
+    (define-key map [(meta ?l)] 'ido-toggle-literal)
+    map)
+  "Keymap for Ido file commands.")
+
+(defvar ido-buffer-completion-map
+  (let ((map (make-sparse-keymap)))
+    (set-keymap-parent map ido-common-completion-map)
+    (define-key map "\C-x\C-f" 'ido-enter-find-file)
+    (define-key map "\C-x\C-b" 'ido-fallback-command)
+    (define-key map "\C-k" 'ido-kill-buffer-at-head)
+    (define-key map [?\C-\S-b] 'ido-bury-buffer-at-head)
+    (define-key map "\C-o" 'ido-toggle-virtual-buffers)
+    map)
   "Keymap for Ido buffer commands.")
 
+;;;; Persistent variables
+
 (defvar  ido-file-history nil
   "History of files selected using `ido-find-file'.")
 
@@ -1027,7 +1092,10 @@ Each element in the list is of the form (DIR (MTIME) FILE...).")
 Intended to be let-bound by functions which call Ido repeatedly.
 Should never be set permanently.")
 
-;; Temporary storage
+;;;; Temporary storage
+
+(defvar ido-completion-map nil
+  "Currently active keymap for Ido commands.")
 
 (defvar ido-eoinput 1
   "Point where minibuffer input ends and completion info begins.
@@ -1086,13 +1154,14 @@ Value is an integer which is number of chars to right of prompt.")
 This is a copy of `recentf-list', pared down and with faces applied.
 Only used if `ido-use-virtual-buffers' is non-nil.")
 
-;;; Variables with dynamic bindings.
-;;; Declared here to keep the byte compiler quiet.
+;;;; Variables with dynamic bindings.
+
+;; These are declared here to keep the byte compiler quiet.
 
 ;; Stores the current ido item type ('file, 'dir, 'buffer, or 'list).
 (defvar ido-cur-item)
 
-;;; Stores the current default item
+;; Stores the current default item.
 (defvar ido-default-item)
 
 ;; Stores the current list of items that will be searched through.
@@ -1502,7 +1571,6 @@ Removes badly formatted data and ignored directories."
   (ido-save-history))
 
 (defun ido-common-initialization ()
-  (ido-init-completion-maps)
   (add-hook 'minibuffer-setup-hook 'ido-minibuffer-setup)
   (add-hook 'choose-completion-string-functions 'ido-choose-completion-string))
 
@@ -1596,120 +1664,51 @@ This function also adds a hook to the minibuffer."
 
 
 ;;; IDO KEYMAP
-(defun ido-init-completion-maps ()
-  "Set up the completion keymaps used by Ido."
-
-  ;; Common map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "\C-a" 'ido-toggle-ignore)
-    (define-key map "\C-c" 'ido-toggle-case)
-    (define-key map "\C-e" 'ido-edit-input)
-    (define-key map "\t" 'ido-complete)
-    (define-key map " " 'ido-complete-space)
-    (define-key map "\C-j" 'ido-select-text)
-    (define-key map "\C-m" 'ido-exit-minibuffer)
-    (define-key map "\C-p" 'ido-toggle-prefix)
-    (define-key map "\C-r" 'ido-prev-match)
-    (define-key map "\C-s" 'ido-next-match)
-    (define-key map [?\C-.] 'ido-next-match)
-    (define-key map [?\C-,] 'ido-prev-match)
-    (define-key map "\C-t" 'ido-toggle-regexp)
-    (define-key map "\C-z" 'ido-undo-merge-work-directory)
-    (define-key map [(control ?\s)] 'ido-restrict-to-matches)
-    (define-key map [(meta ?\s)] 'ido-take-first-match)
-    (define-key map [(control ?@)] 'ido-restrict-to-matches)
-    (define-key map [right] 'ido-next-match)
-    (define-key map [left] 'ido-prev-match)
-    (define-key map "?" 'ido-completion-help)
-    ;; Magic commands.
-    (define-key map "\C-b" 'ido-magic-backward-char)
-    (define-key map "\C-f" 'ido-magic-forward-char)
-    (define-key map "\C-d" 'ido-magic-delete-char)
-    (set-keymap-parent map minibuffer-local-map)
-    (setq ido-common-completion-map map))
-
-  ;; File and directory map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "\C-x\C-b" 'ido-enter-switch-buffer)
-    (define-key map "\C-x\C-f" 'ido-fallback-command)
-    (define-key map "\C-x\C-d" 'ido-enter-dired)
-    (define-key map [down] 'ido-next-match-dir)
-    (define-key map [up]   'ido-prev-match-dir)
-    (define-key map [(meta up)] 'ido-prev-work-directory)
-    (define-key map [(meta down)] 'ido-next-work-directory)
-    (define-key map [backspace] 'ido-delete-backward-updir)
-    (define-key map "\d"        'ido-delete-backward-updir)
-    (define-key map [remap delete-backward-char] 'ido-delete-backward-updir) ; BS
-    (define-key map [remap backward-kill-word] 'ido-delete-backward-word-updir)  ; M-DEL
 
-    (define-key map [(control backspace)] 'ido-up-directory)
-    (define-key map "\C-l" 'ido-reread-directory)
-    (define-key map [(meta ?d)] 'ido-wide-find-dir-or-delete-dir)
-    (define-key map [(meta ?b)] 'ido-push-dir)
-    (define-key map [(meta ?v)] 'ido-push-dir-first)
-    (define-key map [(meta ?f)] 'ido-wide-find-file-or-pop-dir)
-    (define-key map [(meta ?k)] 'ido-forget-work-directory)
-    (define-key map [(meta ?m)] 'ido-make-directory)
-    (define-key map [(meta ?n)] 'ido-next-work-directory)
-    (define-key map [(meta ?o)] 'ido-prev-work-file)
-    (define-key map [(meta control ?o)] 'ido-next-work-file)
-    (define-key map [(meta ?p)] 'ido-prev-work-directory)
-    (define-key map [(meta ?s)] 'ido-merge-work-directories)
-    (set-keymap-parent map ido-common-completion-map)
-    (setq ido-file-dir-completion-map map))
+(defalias 'ido-init-completion-maps 'ignore "")
+(make-obsolete 'ido-init-completion-maps "it does nothing." "25.1")
 
-  ;; File only map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "\C-k" 'ido-delete-file-at-head)
-    (define-key map "\C-o" 'ido-copy-current-word)
-    (define-key map "\C-w" 'ido-copy-current-file-name)
-    (define-key map [(meta ?l)] 'ido-toggle-literal)
-    (set-keymap-parent map ido-file-dir-completion-map)
-    (setq ido-file-completion-map map))
+(defun ido-setup-completion-map ()
+  "Set up the completion keymap used by Ido.
 
-  ;; Buffer map
-  (let ((map (make-sparse-keymap)))
-    (define-key map "\C-x\C-f" 'ido-enter-find-file)
-    (define-key map "\C-x\C-b" 'ido-fallback-command)
-    (define-key map "\C-k" 'ido-kill-buffer-at-head)
-    (define-key map [?\C-\S-b] 'ido-bury-buffer-at-head)
-    (define-key map "\C-o" 'ido-toggle-virtual-buffers)
-    (set-keymap-parent map ido-common-completion-map)
-    (setq ido-buffer-completion-map map)))
+Create a keymap, bind `ido-completion-map' to it, and depending
+on what is being completed (`ido-cur-item') set its parent keymap
+to one of:
 
+  `ido-common-completion-map'
+  `ido-file-dir-completion-map'
+  `ido-file-completion-map'
+  `ido-buffer-completion-map'
 
-(defun ido-setup-completion-map ()
-  "Set up the keymap for Ido."
-
+If option `ido-context-switch-command' is non-nil or `viper-mode'
+is enabled then some keybindings are changed in the keymap."
   ;; generated every time so that it can inherit new functions.
   (let ((map (make-sparse-keymap))
 	(viper-p (if (boundp 'viper-mode) viper-mode)))
-
     (when viper-p
       (define-key map [remap viper-intercept-ESC-key] 'ignore))
-
-    (cond
-     ((memq ido-cur-item '(file dir))
+    (pcase ido-cur-item
+     ((or `file `dir)
       (when ido-context-switch-command
 	(define-key map "\C-x\C-b" ido-context-switch-command)
 	(define-key map "\C-x\C-d" 'ignore))
       (when viper-p
-	(define-key map [remap viper-backward-char] 'ido-delete-backward-updir)
-	(define-key map [remap viper-del-backward-char-in-insert] 'ido-delete-backward-updir)
-	(define-key map [remap viper-delete-backward-word] 'ido-delete-backward-word-updir))
+	(define-key map [remap viper-backward-char]
+	  'ido-delete-backward-updir)
+	(define-key map [remap viper-del-backward-char-in-insert]
+	  'ido-delete-backward-updir)
+	(define-key map [remap viper-delete-backward-word]
+	  'ido-delete-backward-word-updir))
       (set-keymap-parent map
 			 (if (eq ido-cur-item 'file)
 			     ido-file-completion-map
 			   ido-file-dir-completion-map)))
-
-     ((eq ido-cur-item 'buffer)
+     (`buffer
       (when ido-context-switch-command
 	(define-key map "\C-x\C-f" ido-context-switch-command))
       (set-keymap-parent map ido-buffer-completion-map))
-
-     (t
+     (_
       (set-keymap-parent map ido-common-completion-map)))
-
     (setq ido-completion-map map)))
 
 (defun ido-final-slash (dir &optional fix-it)

commit 2e8d209f258c9bb6a6626d4a101995965b040024
Author: Ivan Shmakov 
Date:   Mon Jan 19 09:50:41 2015 +0000

    Fix the value default-directory gets in custom-make-dependencies.
    
    * lisp/cus-dep.el (custom-make-dependencies): Ensure that
    default-directory is interpreted as a directory (see bug#19140.)

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 3991885..44d0cdd 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-19  Ivan Shmakov  
+
+	* cus-dep.el (custom-make-dependencies): Ensure that
+	default-directory is interpreted as a directory (see bug#19140.)
+
 2015-01-19  Dmitry Gutov  
 
 	* progmodes/xref.el (xref--display-position):
diff --git a/lisp/cus-dep.el b/lisp/cus-dep.el
index 453b15d..b8a9eb8 100644
--- a/lisp/cus-dep.el
+++ b/lisp/cus-dep.el
@@ -62,7 +62,8 @@ Usage: emacs -batch -l ./cus-dep.el -f custom-make-dependencies DIRS"
       (while (setq subdir (pop command-line-args-left))
         (message "Directory %s" subdir)
         (let ((files (directory-files subdir nil "\\`[^=.].*\\.el\\'"))
-              (default-directory (expand-file-name subdir))
+              (default-directory
+                (file-name-as-directory (expand-file-name subdir)))
               (preloaded (concat "\\`\\(\\./+\\)?"
                                  (regexp-opt preloaded-file-list t)
                                  "\\.el\\'")))

commit b7f83adda5a32140811e8e7decc4394d64cada3d
Author: Paul Eggert 
Date:   Mon Jan 19 00:56:18 2015 -0800

    Prefer memset to repeatedly assigning Qnil
    
    * alloc.c (allocate_pseudovector): Catch more bogus values.
    * alloc.c (allocate_pseudovector):
    * callint.c (Fcall_interactively):
    * coding.c (syms_of_coding):
    * fringe.c (init_fringe):
    Verify that Qnil == 0.
    * callint.c (Fcall_interactively):
    * eval.c (Fapply, Ffuncall):
    * fns.c (mapcar1, larger_vector):
    * font.c (font_expand_wildcards):
    * fringe.c (init_fringe):
    Prefer memset to assigning zeros by hand.
    * callint.c (Fcall_interactively):
    Remove duplicate assignment of Qnil to args[i].
    * coding.c (syms_of_coding):
    Prefer LISP_INITIALLY_ZERO to assigning zeros by hand.
    * fileio.c (Ffile_selinux_context):
    Rewrite to avoid need for Lisp_Object array.
    * lisp.h (XLI_BUILTIN_LISPSYM): New macro.
    (DEFINE_LISP_SYMBOL_END): Use it.
    (NIL_IS_ZERO): New constant.
    (memsetnil): New function.

diff --git a/src/ChangeLog b/src/ChangeLog
index 16e2fa1..04b952c 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,29 @@
+2015-01-19  Paul Eggert  
+
+	Prefer memset to repeatedly assigning Qnil
+	* alloc.c (allocate_pseudovector): Catch more bogus values.
+	* alloc.c (allocate_pseudovector):
+	* callint.c (Fcall_interactively):
+	* coding.c (syms_of_coding):
+	* fringe.c (init_fringe):
+	Verify that Qnil == 0.
+	* callint.c (Fcall_interactively):
+	* eval.c (Fapply, Ffuncall):
+	* fns.c (mapcar1, larger_vector):
+	* font.c (font_expand_wildcards):
+	* fringe.c (init_fringe):
+	Prefer memset to assigning zeros by hand.
+	* callint.c (Fcall_interactively):
+	Remove duplicate assignment of Qnil to args[i].
+	* coding.c (syms_of_coding):
+	Prefer LISP_INITIALLY_ZERO to assigning zeros by hand.
+	* fileio.c (Ffile_selinux_context):
+	Rewrite to avoid need for Lisp_Object array.
+	* lisp.h (XLI_BUILTIN_LISPSYM): New macro.
+	(DEFINE_LISP_SYMBOL_END): Use it.
+	(NIL_IS_ZERO): New constant.
+	(memsetnil): New function.
+
 2015-01-16  Dmitry Antipov  
 
 	Tune pseudovector allocation assuming Qnil == 0.
diff --git a/src/alloc.c b/src/alloc.c
index 22a15b4..2c7b02f 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -3169,12 +3169,14 @@ allocate_pseudovector (int memlen, int lisplen,
   struct Lisp_Vector *v = allocate_vectorlike (memlen);
 
   /* Catch bogus values.  */
-  eassert (tag <= PVEC_FONT);
+  eassert (0 <= tag && tag <= PVEC_FONT);
+  eassert (0 <= lisplen && lisplen <= zerolen && zerolen <= memlen);
   eassert (memlen - lisplen <= (1 << PSEUDOVECTOR_REST_BITS) - 1);
   eassert (lisplen <= (1 << PSEUDOVECTOR_SIZE_BITS) - 1);
 
-  /* Only the first lisplen slots will be traced normally by the GC.
+  /* Only the first LISPLEN slots will be traced normally by the GC.
      But since Qnil == 0, we can memset Lisp_Object slots as well.  */
+  verify (NIL_IS_ZERO);
   memset (v->contents, 0, zerolen * word_size);
 
   XSETPVECTYPESIZE (v, tag, lisplen, memlen - lisplen);
diff --git a/src/callint.c b/src/callint.c
index dd238b9..3a595b5 100644
--- a/src/callint.c
+++ b/src/callint.c
@@ -509,12 +509,8 @@ invoke it.  If KEYS is omitted or nil, the return value of
   visargs = args + nargs;
   varies = (signed char *) (visargs + nargs);
 
-  for (i = 0; i < nargs; i++)
-    {
-      args[i] = Qnil;
-      visargs[i] = Qnil;
-      varies[i] = 0;
-    }
+  verify (NIL_IS_ZERO);
+  memset (args, 0, nargs * (2 * word_size + 1));
 
   GCPRO5 (prefix_arg, function, *args, *visargs, up_event);
   gcpro3.nvars = nargs;
@@ -781,7 +777,7 @@ invoke it.  If KEYS is omitted or nil, the return value of
 				   argument if no prefix.  */
 	  if (NILP (prefix_arg))
 	    {
-	      args[i] = Qnil;
+	      /* args[i] = Qnil; */
 	      varies[i] = -1;
 	    }
 	  else
diff --git a/src/coding.c b/src/coding.c
index b11143a..77cea77 100644
--- a/src/coding.c
+++ b/src/coding.c
@@ -11272,13 +11272,10 @@ internal character representation.  */);
     Vtranslation_table_for_input = Qnil;
 
   {
-    Lisp_Object args[coding_arg_undecided_max];
-    Lisp_Object plist[16];
-    int i;
-
-    for (i = 0; i < coding_arg_undecided_max; i++)
-      args[i] = Qnil;
+    verify (NIL_IS_ZERO);
+    Lisp_Object args[coding_arg_undecided_max] = { LISP_INITIALLY_ZERO, };
 
+    Lisp_Object plist[16];
     plist[0] = intern_c_string (":name");
     plist[1] = args[coding_arg_name] = Qno_conversion;
     plist[2] = intern_c_string (":mnemonic");
diff --git a/src/eval.c b/src/eval.c
index 5cadb1b..ddf6535 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -2299,8 +2299,7 @@ usage: (apply FUNCTION &rest ARGUMENTS)  */)
       /* Avoid making funcall cons up a yet another new vector of arguments
 	 by explicitly supplying nil's for optional values.  */
       SAFE_ALLOCA_LISP (funcall_args, 1 + XSUBR (fun)->max_args);
-      for (i = numargs; i < XSUBR (fun)->max_args; /* nothing */)
-	funcall_args[++i] = Qnil;
+      memsetnil (funcall_args + numargs + 1, XSUBR (fun)->max_args - numargs);
       funcall_nargs = 1 + XSUBR (fun)->max_args;
     }
   else
@@ -2638,8 +2637,8 @@ usage: (funcall FUNCTION &rest ARGUMENTS)  */)
   ptrdiff_t numargs = nargs - 1;
   Lisp_Object lisp_numargs;
   Lisp_Object val;
-  register Lisp_Object *internal_args;
-  ptrdiff_t i, count;
+  Lisp_Object *internal_args;
+  ptrdiff_t count;
 
   QUIT;
 
@@ -2694,8 +2693,8 @@ usage: (funcall FUNCTION &rest ARGUMENTS)  */)
 	      eassert (XSUBR (fun)->max_args <= ARRAYELTS (internal_argbuf));
 	      internal_args = internal_argbuf;
 	      memcpy (internal_args, args + 1, numargs * word_size);
-	      for (i = numargs; i < XSUBR (fun)->max_args; i++)
-		internal_args[i] = Qnil;
+	      memsetnil (internal_args + numargs,
+			 XSUBR (fun)->max_args - numargs);
 	    }
 	  else
 	    internal_args = args + 1;
diff --git a/src/fileio.c b/src/fileio.c
index dc67a00..ff6720d 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -2812,7 +2812,8 @@ or if SELinux is disabled, or if Emacs lacks SELinux support.  */)
   (Lisp_Object filename)
 {
   Lisp_Object absname;
-  Lisp_Object values[4];
+  Lisp_Object user = Qnil, role = Qnil, type = Qnil, range = Qnil;
+
   Lisp_Object handler;
 #if HAVE_LIBSELINUX
   security_context_t con;
@@ -2830,10 +2831,6 @@ or if SELinux is disabled, or if Emacs lacks SELinux support.  */)
 
   absname = ENCODE_FILE (absname);
 
-  values[0] = Qnil;
-  values[1] = Qnil;
-  values[2] = Qnil;
-  values[3] = Qnil;
 #if HAVE_LIBSELINUX
   if (is_selinux_enabled ())
     {
@@ -2842,20 +2839,20 @@ or if SELinux is disabled, or if Emacs lacks SELinux support.  */)
 	{
 	  context = context_new (con);
 	  if (context_user_get (context))
-	    values[0] = build_string (context_user_get (context));
+	    user = build_string (context_user_get (context));
 	  if (context_role_get (context))
-	    values[1] = build_string (context_role_get (context));
+	    role = build_string (context_role_get (context));
 	  if (context_type_get (context))
-	    values[2] = build_string (context_type_get (context));
+	    type = build_string (context_type_get (context));
 	  if (context_range_get (context))
-	    values[3] = build_string (context_range_get (context));
+	    range = build_string (context_range_get (context));
 	  context_free (context);
 	  freecon (con);
 	}
     }
 #endif
 
-  return Flist (ARRAYELTS (values), values);
+  return list4 (user, role, type, range);
 }
 
 DEFUN ("set-file-selinux-context", Fset_file_selinux_context,
diff --git a/src/fns.c b/src/fns.c
index ca3d98b..d177294 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -2517,16 +2517,14 @@ usage: (nconc &rest LISTS)  */)
 static void
 mapcar1 (EMACS_INT leni, Lisp_Object *vals, Lisp_Object fn, Lisp_Object seq)
 {
-  register Lisp_Object tail;
-  Lisp_Object dummy;
-  register EMACS_INT i;
+  Lisp_Object tail, dummy;
+  EMACS_INT i;
   struct gcpro gcpro1, gcpro2, gcpro3;
 
   if (vals)
     {
       /* Don't let vals contain any garbage when GC happens.  */
-      for (i = 0; i < leni; i++)
-	vals[i] = Qnil;
+      memsetnil (vals, leni);
 
       GCPRO3 (dummy, fn, seq);
       gcpro1.var = vals;
@@ -3688,7 +3686,7 @@ Lisp_Object
 larger_vector (Lisp_Object vec, ptrdiff_t incr_min, ptrdiff_t nitems_max)
 {
   struct Lisp_Vector *v;
-  ptrdiff_t i, incr, incr_max, old_size, new_size;
+  ptrdiff_t incr, incr_max, old_size, new_size;
   ptrdiff_t C_language_max = min (PTRDIFF_MAX, SIZE_MAX) / sizeof *v->contents;
   ptrdiff_t n_max = (0 <= nitems_max && nitems_max < C_language_max
 		     ? nitems_max : C_language_max);
@@ -3702,8 +3700,7 @@ larger_vector (Lisp_Object vec, ptrdiff_t incr_min, ptrdiff_t nitems_max)
   new_size = old_size + incr;
   v = allocate_vector (new_size);
   memcpy (v->contents, XVECTOR (vec)->contents, old_size * sizeof *v->contents);
-  for (i = old_size; i < new_size; ++i)
-    v->contents[i] = Qnil;
+  memsetnil (v->contents + old_size, new_size - old_size);
   XSETVECTOR (vec, v);
   return vec;
 }
diff --git a/src/font.c b/src/font.c
index 56a2782..190b33a 100644
--- a/src/font.c
+++ b/src/font.c
@@ -989,15 +989,14 @@ font_expand_wildcards (Lisp_Object *field, int n)
 	  if (i == 0 || ! NILP (tmp[i - 1]))
 	    /* None of TMP[X] corresponds to Jth field.  */
 	    return -1;
-	  for (; j < range[i].from; j++)
-	    field[j] = Qnil;
+	  memsetnil (field + j, range[i].from - j);
+	  j = range[i].from;
 	}
       field[j++] = tmp[i];
     }
   if (! NILP (tmp[n - 1]) && j < XLFD_REGISTRY_INDEX)
     return -1;
-  for (; j < XLFD_LAST_INDEX; j++)
-    field[j] = Qnil;
+  memsetnil (field + j, XLFD_LAST_INDEX - j);
   if (INTEGERP (field[XLFD_ENCODING_INDEX]))
     field[XLFD_ENCODING_INDEX]
       = Fintern (Fnumber_to_string (field[XLFD_ENCODING_INDEX]), Qnil);
diff --git a/src/fringe.c b/src/fringe.c
index c7262d1..464379d 100644
--- a/src/fringe.c
+++ b/src/fringe.c
@@ -1723,15 +1723,12 @@ init_fringe_once (void)
 void
 init_fringe (void)
 {
-  int i;
-
   max_fringe_bitmaps = MAX_STANDARD_FRINGE_BITMAPS + 20;
 
   fringe_bitmaps = xzalloc (max_fringe_bitmaps * sizeof *fringe_bitmaps);
-  fringe_faces = xmalloc (max_fringe_bitmaps * sizeof *fringe_faces);
 
-  for (i = 0; i < max_fringe_bitmaps; i++)
-    fringe_faces[i] = Qnil;
+  verify (NIL_IS_ZERO);
+  fringe_faces = xzalloc (max_fringe_bitmaps * sizeof *fringe_faces);
 }
 
 #ifdef HAVE_NTGUI
diff --git a/src/lisp.h b/src/lisp.h
index 7c7d3f3..a1ea355 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -732,14 +732,18 @@ struct Lisp_Symbol
   TAG_PTR (Lisp_Symbol,					    \
 	   ((uintptr_t) (offset) >> (USE_LSB_TAG ? 0 : GCTYPEBITS)))
 
+/* XLI_BUILTIN_LISPSYM (iQwhatever) is equivalent to
+   XLI (builtin_lisp_symbol (Qwhatever)),
+   except the former expands to an integer constant expression.  */
+#define XLI_BUILTIN_LISPSYM(iname) TAG_SYMOFFSET ((iname) * sizeof *lispsym)
+
 /* Declare extern constants for Lisp symbols.  These can be helpful
    when using a debugger like GDB, on older platforms where the debug
    format does not represent C macros.  */
 #define DEFINE_LISP_SYMBOL_BEGIN(name) \
-   DEFINE_GDB_SYMBOL_BEGIN (Lisp_Object, name)
+  DEFINE_GDB_SYMBOL_BEGIN (Lisp_Object, name)
 #define DEFINE_LISP_SYMBOL_END(name) \
-   DEFINE_GDB_SYMBOL_END (LISP_INITIALLY (TAG_SYMOFFSET (i##name \
-							 * sizeof *lispsym)))
+  DEFINE_GDB_SYMBOL_END (LISP_INITIALLY (XLI_BUILTIN_LISPSYM (i##name)))
 
 #include "globals.h"
 
@@ -1499,6 +1503,20 @@ gc_aset (Lisp_Object array, ptrdiff_t idx, Lisp_Object val)
   XVECTOR (array)->contents[idx] = val;
 }
 
+/* True, since Qnil's representation is zero.  Every place in the code
+   that assumes Qnil is zero should verify (NIL_IS_ZERO), to make it easy
+   to find such assumptions later if we change Qnil to be nonzero.  */
+enum { NIL_IS_ZERO = XLI_BUILTIN_LISPSYM (iQnil) == 0 };
+
+/* Set a Lisp_Object array V's SIZE entries to nil.  */
+INLINE void
+memsetnil (Lisp_Object *v, ptrdiff_t size)
+{
+  eassert (0 <= size);
+  verify (NIL_IS_ZERO);
+  memset (v, 0, size * sizeof *v);
+}
+
 /* If a struct is made to look like a vector, this macro returns the length
    of the shortest vector that would hold that struct.  */
 

commit 9592a014df784e67a4647d5b6424f2758dfaad3c
Author: Dmitry Gutov 
Date:   Mon Jan 19 05:29:37 2015 +0200

    xref: Use other-window-scroll-buffer and user-error
    
    * lisp/progmodes/xref.el (xref--display-position):
    Set `other-window-scroll-buffer'.
    (xref-goto-xref): Use `user-error'.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 39d9436..3991885 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,11 @@
 2015-01-19  Dmitry Gutov  
 
+	* progmodes/xref.el (xref--display-position):
+	Set `other-window-scroll-buffer'.
+	(xref-goto-xref): Use `user-error'.
+
+2015-01-19  Dmitry Gutov  
+
 	* progmodes/xref.el (xref--display-history): New variable.
 	(xref--window-configuration): Remove.
 	(xref--save-to-history): New function.
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index 4431cb5..12123c8 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -352,6 +352,7 @@ WINDOW controls how the buffer is displayed:
     (let ((buf (current-buffer))
           (win (selected-window)))
       (with-current-buffer xref-buf
+        (setq-local other-window-scroll-buffer buf)
         (xref--save-to-history buf win)))))
 
 (defun xref--show-location (location)
@@ -390,7 +391,7 @@ WINDOW controls how the buffer is displayed:
   (interactive)
   (back-to-indentation)
   (let ((loc (or (xref--location-at-point)
-                 (error "No reference at point")))
+                 (user-error "No reference at point")))
         (window xref--window))
     (xref--quit)
     (xref--pop-to-location loc window)))

commit 36bfd6947f8671eb279d8aa8f2976ada24361dec
Author: Dmitry Gutov 
Date:   Mon Jan 19 04:19:32 2015 +0200

    Use quit-window to hide buffers temporarily displayed by xref
    
    * lisp/progmodes/xref.el (xref--display-history): New variable.
    (xref--window-configuration): Remove.
    (xref--save-to-history): New function.
    (xref--display-position): Use it.  Add new argument.
    (xref--restore-window-configuration): Remove.
    (xref--show-location, xref-show-location-at-point): Update
    accordingly.
    (xref--xref-buffer-mode): Don't use `pre-command-hook'.
    (xref--quit): New command.
    (xref-goto-xref): Use it.
    (xref--xref-buffer-mode-map): Bind `q' to it.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index d84e831..39d9436 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,17 @@
+2015-01-19  Dmitry Gutov  
+
+	* progmodes/xref.el (xref--display-history): New variable.
+	(xref--window-configuration): Remove.
+	(xref--save-to-history): New function.
+	(xref--display-position): Use it.  Add new argument.
+	(xref--restore-window-configuration): Remove.
+	(xref--show-location, xref-show-location-at-point): Update
+	accordingly.
+	(xref--xref-buffer-mode): Don't use `pre-command-hook'.
+	(xref--quit): New command.
+	(xref-goto-xref): Use it.
+	(xref--xref-buffer-mode-map): Bind `q' to it.
+
 2015-01-18  Dmitry Gutov  
 
 	* progmodes/xref.el (xref-goto-xref): Perform the jump even inside
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index 59da579..4431cb5 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -51,6 +51,7 @@
 (require 'cl-lib)
 (require 'eieio)
 (require 'ring)
+(require 'pcase)
 
 (defgroup xref nil "Cross-referencing commands"
   :group 'tools)
@@ -333,19 +334,31 @@ WINDOW controls how the buffer is displayed:
 
 ;; The xref buffer is used to display a set of xrefs.
 
-(defvar-local xref--window-configuration nil)
+(defvar-local xref--display-history nil
+  "List of pairs (BUFFER . WINDOW), for temporarily displayed buffers.")
 
-(defun xref--display-position (pos other-window recenter-arg)
-  ;; show the location, but don't hijack focus.
+(defun xref--save-to-history (buf win)
+  (let ((restore (window-parameter win 'quit-restore)))
+    ;; Save the new entry if the window displayed another buffer
+    ;; previously.
+    (when (and restore (not (eq (car restore) 'same)))
+      (push (cons buf win) xref--display-history))))
+
+(defun xref--display-position (pos other-window recenter-arg xref-buf)
+  ;; Show the location, but don't hijack focus.
   (with-selected-window (display-buffer (current-buffer) other-window)
     (goto-char pos)
-    (recenter recenter-arg)))
+    (recenter recenter-arg)
+    (let ((buf (current-buffer))
+          (win (selected-window)))
+      (with-current-buffer xref-buf
+        (xref--save-to-history buf win)))))
 
 (defun xref--show-location (location)
   (condition-case err
-      (progn
+      (let ((xref-buf (current-buffer)))
         (xref--goto-location location)
-        (xref--display-position (point) t 1))
+        (xref--display-position (point) t 1 xref-buf))
     (user-error (message (error-message-string err)))))
 
 (defun xref-show-location-at-point ()
@@ -353,14 +366,8 @@ WINDOW controls how the buffer is displayed:
   (interactive)
   (let ((loc (xref--location-at-point)))
     (when loc
-      (setq xref--window-configuration (current-window-configuration))
       (xref--show-location loc))))
 
-(defun xref--restore-window-configuration ()
-  (when xref--window-configuration
-    (set-window-configuration xref--window-configuration)
-    (setq xref--window-configuration nil)))
-
 (defun xref-next-line ()
   "Move to the next xref and display its source in the other window."
   (interactive)
@@ -385,16 +392,15 @@ WINDOW controls how the buffer is displayed:
   (let ((loc (or (xref--location-at-point)
                  (error "No reference at point")))
         (window xref--window))
-    (quit-window)
+    (xref--quit)
     (xref--pop-to-location loc window)))
 
 (define-derived-mode xref--xref-buffer-mode fundamental-mode "XREF"
   "Mode for displaying cross-references."
-  (setq buffer-read-only t)
-  (add-hook 'pre-command-hook #'xref--restore-window-configuration nil t))
+  (setq buffer-read-only t))
 
 (let ((map xref--xref-buffer-mode-map))
-  (define-key map (kbd "q") #'quit-window)
+  (define-key map (kbd "q") #'xref--quit)
   (define-key map (kbd "n") #'xref-next-line)
   (define-key map (kbd "p") #'xref-prev-line)
   (define-key map (kbd "RET") #'xref-goto-xref)
@@ -404,6 +410,18 @@ WINDOW controls how the buffer is displayed:
   (define-key map (kbd ".") #'xref-next-line)
   (define-key map (kbd ",") #'xref-prev-line))
 
+(defun xref--quit ()
+  "Quit all windows in `xref--display-history', then quit current window."
+  (interactive)
+  (let ((window (selected-window))
+        (history xref--display-history))
+    (setq xref--display-history nil)
+    (pcase-dolist (`(,buf . ,win) history)
+      (when (and (window-live-p win)
+                 (eq buf (window-buffer win)))
+        (quit-window nil win)))
+    (quit-window nil window)))
+
 (defconst xref-buffer-name "*xref*"
   "The name of the buffer to show xrefs.")
 

commit b87d7cc2493335c68f3376a0455a7b00224ca1f6
Author: Dmitry Gutov 
Date:   Sun Jan 18 10:15:41 2015 +0200

    Perform xref jump even inside indentation or at eol
    
    * lisp/progmodes/xref.el (xref-goto-xref): Perform xref jump even inside
    indentation or at eol.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index ab44283..d84e831 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-18  Dmitry Gutov  
+
+	* progmodes/xref.el (xref-goto-xref): Perform the jump even inside
+	indentation or at eol.
+
 2015-01-18  Stefan Monnier  
 
 	* emacs-lisp/eieio-core.el: Add `subclass' specializer for cl-generic.
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index 7f77d21..59da579 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -379,8 +379,9 @@ WINDOW controls how the buffer is displayed:
 (defvar-local xref--window nil)
 
 (defun xref-goto-xref ()
-  "Jump to the xref at point and bury the xref buffer."
+  "Jump to the xref on the current line and bury the xref buffer."
   (interactive)
+  (back-to-indentation)
   (let ((loc (or (xref--location-at-point)
                  (error "No reference at point")))
         (window xref--window))

commit 1f545d33648f819e8eedb92bafe19b53670eaf91
Author: Stefan Monnier 
Date:   Sun Jan 18 14:08:13 2015 -0500

    * lisp/emacs-lisp/eieio-core.el: Add `subclass' specializer for cl-generic.
    
    (eieio--generic-subclass-tagcode, eieio--generic-subclass-tag-types):
    New functions.
    (cl-generic-tagcode-function, cl-generic-tag-types-function): Use them.
    
    * test/automated/eieio-test-methodinvoke.el (eieio-test-cl-generic-1):
    Test `subclass' specializer.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index c731551..ab44283 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,10 @@
 2015-01-18  Stefan Monnier  
 
+	* emacs-lisp/eieio-core.el: Add `subclass' specializer for cl-generic.
+	(eieio--generic-subclass-tagcode, eieio--generic-subclass-tag-types):
+	New functions.
+	(cl-generic-tagcode-function, cl-generic-tag-types-function): Use them.
+
 	* emacs-lisp/eieio.el (defclass): Add obsolescence warning for the
 	`newname' argument.
 
@@ -152,8 +157,8 @@
 2015-01-16  Artur Malabarba  
 
 	* emacs-lisp/package.el (package--read-pkg-desc):
-	New function. Read a `define-package' form in current buffer. Return
-	the pkg-desc, with desc-kind set to KIND.
+	New function. Read a `define-package' form in current buffer.
+	Return the pkg-desc, with desc-kind set to KIND.
 	(package-dir-info): New function. Find package information for a
 	directory. The return result is a `package-desc'.
 	(package-install-from-buffer): Install packages from dired buffer.
diff --git a/lisp/emacs-lisp/eieio-core.el b/lisp/emacs-lisp/eieio-core.el
index a82e887..e4221e4 100644
--- a/lisp/emacs-lisp/eieio-core.el
+++ b/lisp/emacs-lisp/eieio-core.el
@@ -1227,6 +1227,8 @@ method invocation orders of the involved classes."
 
 (require 'cl-generic)
 
+;;;; General support to dispatch based on the type of the argument.
+
 (add-function :before-until cl-generic-tagcode-function
               #'eieio--generic-tagcode)
 (defun eieio--generic-tagcode (type name)
@@ -1246,6 +1248,29 @@ method invocation orders of the involved classes."
        (mapcar #'eieio--class-symbol
                (eieio--class-precedence-list (symbol-value tag)))))
 
+;;;; Dispatch for arguments which are classes.
+
+;; Since EIEIO does not support metaclasses, users can't easily use the
+;; "dispatch on argument type" for class arguments.  That's why EIEIO's
+;; `defmethod' added the :static qualifier.  For cl-generic, such a qualifier
+;; would not make much sense (e.g. to which argument should it apply?).
+;; Instead, we add a new "subclass" specializer.
+
+(add-function :before-until cl-generic-tagcode-function
+              #'eieio--generic-subclass-tagcode)
+(defun eieio--generic-subclass-tagcode (type name)
+  (when (eq 'subclass (car-safe type))
+    `(60 . (and (symbolp ,name) (eieio--class-v ,name)))))
+
+(add-function :before-until cl-generic-tag-types-function
+              #'eieio--generic-subclass-tag-types)
+(defun eieio--generic-subclass-tag-types (tag)
+  (when (eieio--class-p tag)
+    (mapcar (lambda (class)
+              `(subclass
+                ,(if (symbolp class) class (eieio--class-symbol class))))
+            (eieio--class-precedence-list tag))))
+
 ;;; Backward compatibility functions
 ;; To support .elc files compiled for older versions of EIEIO.
 
diff --git a/test/ChangeLog b/test/ChangeLog
index e81bfa7..4b9e7a9 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,5 +1,8 @@
 2015-01-18  Stefan Monnier  
 
+	* automated/Makefile.in (EMACS_EXTRAOPT): New var.
+	(EMACSOPT): Use it.
+
 	* automated/cl-generic-tests.el (cl-generic-test-10-weird): New test.
 	Rename other tests to preserve ordering.
 
@@ -8,6 +11,11 @@
 	* automated/seq-tests.el (test-seq-subseq): Add more tests.
 	(Bug#19434)
 
+2015-01-18  Stefan Monnier  
+
+	* automated/eieio-test-methodinvoke.el (eieio-test-cl-generic-1):
+	Test `subclass' specializer.
+
 2015-01-17  Stefan Monnier  
 
 	* automated/eieio-tests.el
diff --git a/test/automated/Makefile.in b/test/automated/Makefile.in
index 7243e8a..faf0b3d 100644
--- a/test/automated/Makefile.in
+++ b/test/automated/Makefile.in
@@ -39,10 +39,12 @@ SEPCHAR = @SEPCHAR@
 # directory, we can use emacs --chdir.
 EMACS = ../../src/emacs
 
+EMACS_EXTRAOPT=
+
 # Command line flags for Emacs.
 # Apparently MSYS bash would convert "-L :" to "-L ;" anyway,
 # but we might as well be explicit.
-EMACSOPT = -batch --no-site-file --no-site-lisp -L "$(SEPCHAR)$(srcdir)"
+EMACSOPT = -batch --no-site-file --no-site-lisp -L "$(SEPCHAR)$(srcdir)" $(EMACS_EXTRAOPT)
 
 # Prevent any settings in the user environment causing problems.
 unexport EMACSDATA EMACSDOC EMACSPATH GREP_OPTIONS
diff --git a/test/automated/eieio-test-methodinvoke.el b/test/automated/eieio-test-methodinvoke.el
index b6d60b8..3918fb9 100644
--- a/test/automated/eieio-test-methodinvoke.el
+++ b/test/automated/eieio-test-methodinvoke.el
@@ -388,10 +388,13 @@
     (cons "CNM-0" (cl-call-next-method 7 y)))
   (cl-defmethod eieio-test--1 ((_x CNM-1-1) _y)
     (cons "CNM-1-1" (cl-call-next-method)))
-  (cl-defmethod eieio-test--1 ((_x CNM-1-2) y)
+  (cl-defmethod eieio-test--1 ((_x CNM-1-2) _y)
     (cons "CNM-1-2" (cl-call-next-method)))
+  (cl-defmethod eieio-test--1 ((_x (subclass CNM-1-2)) _y)
+    (cons "subclass CNM-1-2" (cl-call-next-method)))
   (should (equal (eieio-test--1 4 5) '(4 5)))
   (should (equal (eieio-test--1 (make-instance 'CNM-0) 5)
                  '("CNM-0" 7 5)))
   (should (equal (eieio-test--1 (make-instance 'CNM-2) 5)
-                 '("CNM-1-1" "CNM-1-2" "CNM-0" 7 5))))
+                 '("CNM-1-1" "CNM-1-2" "CNM-0" 7 5)))
+  (should (equal (eieio-test--1 'CNM-2 6) '("subclass CNM-1-2" CNM-2 6))))

commit 2a61bd0096db23123734db439051c859e42b9606
Author: Stefan Monnier 
Date:   Sun Jan 18 12:24:43 2015 -0500

    EIEIO&cl-generic: Add obsolescence warnings and fix corner case
    
    * lisp/emacs-lisp/cl-generic.el (cl-generic-define-method): Correctly handle
    introduction of a new dispatch argument.
    (cl--generic-cache-miss): Handle dispatch on an argument which was not
    considered as dispatchable for this method.
    (cl-defmethod): Warn when adding a method to an obsolete generic function.
    (cl--generic-lambda): Make sure it works if cl-lib is not yet loaded.
    
    * lisp/emacs-lisp/eieio-generic.el (eieio--defgeneric-init-form):
    Use autoloadp.
    
    * lisp/emacs-lisp/eieio.el (defclass): Add obsolescence warning for the
    `newname' argument.
    
    * test/automated/cl-generic-tests.el (cl-generic-test-10-weird): New test.
    Rename other tests to preserve ordering.

diff --git a/etc/NEWS b/etc/NEWS
index be283bb..4551c9c 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -203,6 +203,8 @@ the old behavior -- *shell* buffer displays in current window -- use
 
 ** EIEIO
 *** The `:protection' slot option is not obeyed any more.
+*** The `newname' argument to constructors is optional&deprecated.
+If you need your objects to be named, do it by inheriting from `eieio-named'.
 *** The -list-p and -child-p functions are declared obsolete.
 *** The  variables are declared obsolete.
 *** The  variables are declared obsolete.
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index b7a1fb9..c731551 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,6 +1,20 @@
+2015-01-18  Stefan Monnier  
+
+	* emacs-lisp/eieio.el (defclass): Add obsolescence warning for the
+	`newname' argument.
+
+	* emacs-lisp/cl-generic.el (cl-generic-define-method): Correctly handle
+	introduction of a new dispatch argument.
+	(cl--generic-cache-miss): Handle dispatch on an argument which was not
+	considered as dispatchable for this method.
+	(cl-defmethod): Warn when adding a method to an obsolete generic function.
+	(cl--generic-lambda): Make sure it works if cl-lib is not yet loaded.
+
+	* emacs-lisp/eieio-generic.el (eieio--defgeneric-init-form): Use autoloadp.
+
 2015-01-18  Artur Malabarba  
 
-	* emacs-lisp/package.el (package--append-to-alist): Renamed from
+	* emacs-lisp/package.el (package--append-to-alist): Rename from
 	`package--add-to-alist'
 	Updated docstring due to new name.
 
@@ -862,8 +876,8 @@
 2014-12-27  Eli Zaretskii  
 
 	* language/misc-lang.el (composition-function-table): Add Syriac
-	characters and also ZWJ/ZWNJ.  See
-	http://lists.gnu.org/archive/html/help-gnu-emacs/2014-12/msg00248.html
+	characters and also ZWJ/ZWNJ.
+	See http://lists.gnu.org/archive/html/help-gnu-emacs/2014-12/msg00248.html
 	for the details.
 
 2014-12-27  Fabián Ezequiel Gallina  
diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el
index 819e2e9..544f1fa 100644
--- a/lisp/emacs-lisp/cl-generic.el
+++ b/lisp/emacs-lisp/cl-generic.el
@@ -212,13 +212,13 @@ This macro can only be used within the lexical scope of a cl-generic method."
             (macroenv (cons `(cl-generic-current-method-specializers
                               . ,(lambda () specializers))
                             macroexpand-all-environment)))
+        (require 'cl-lib)        ;Needed to expand `cl-flet' and `cl-function'.
         (if (not with-cnm)
             (cons nil (macroexpand-all fun macroenv))
           ;; First macroexpand away the cl-function stuff (e.g. &key and
           ;; destructuring args, `declare' and whatnot).
           (pcase (macroexpand fun macroenv)
             (`#'(lambda ,args . ,body)
-             (require 'cl-lib)          ;Needed to expand `cl-flet'.
              (let* ((doc-string (and doc-string (stringp (car body))
                                      (pop body)))
                     (cnm (make-symbol "cl--cnm"))
@@ -287,6 +287,13 @@ which case this method will be invoked when the argument is `eql' to VAL.
                                              (cadr name))))
               (setq name setter)
               code))
+         ,(and (get name 'byte-obsolete-info)
+               (or (not (fboundp 'byte-compile-warning-enabled-p))
+                   (byte-compile-warning-enabled-p 'obsolete))
+               (let* ((obsolete (get name 'byte-obsolete-info)))
+                 (macroexp--warn-and-return
+                  (macroexp--obsolete-warning name obsolete "generic function")
+                  nil)))
          (cl-generic-define-method ',name ',qualifiers ',args
                                    ,uses-cnm ,fun)))))
 
@@ -308,13 +315,14 @@ which case this method will be invoked when the argument is `eql' to VAL.
     (dolist (specializer specializers)
       (let* ((tagcode (funcall cl-generic-tagcode-function specializer 'arg))
              (x (assq i dispatches)))
-        (if (not x)
-            (setf (cl--generic-dispatches generic)
-                  (setq dispatches (cons (list i tagcode) dispatches)))
-          (unless (member tagcode (cdr x))
-            (setf (cdr x)
-                  (nreverse (sort (cons tagcode (cdr x))
-                                  #'car-less-than-car)))))
+        (unless x
+          (setq x (list i (funcall cl-generic-tagcode-function t 'arg)))
+          (setf (cl--generic-dispatches generic)
+                (setq dispatches (cons x dispatches))))
+        (unless (member tagcode (cdr x))
+          (setf (cdr x)
+                (nreverse (sort (cons tagcode (cdr x))
+                                #'car-less-than-car))))
         (setq i (1+ i))))
     (if me (setcdr me (cons uses-cnm function))
       (setf (cl--generic-method-table generic)
@@ -478,7 +486,8 @@ for all those different tags in the method-cache.")
   (let ((types (apply #'append (mapcar cl-generic-tag-types-function tags)))
         (methods '()))
     (dolist (method-desc (cl--generic-method-table generic))
-      (let ((m (member (nth dispatch-arg (caar method-desc)) types)))
+      (let* ((specializer (or (nth dispatch-arg (caar method-desc)) t))
+             (m (member specializer types)))
         (when m
           (push (cons (length m) method-desc) methods))))
     ;; Sort the methods, most specific first.
diff --git a/lisp/emacs-lisp/eieio-generic.el b/lisp/emacs-lisp/eieio-generic.el
index 27a5849..74ecefe 100644
--- a/lisp/emacs-lisp/eieio-generic.el
+++ b/lisp/emacs-lisp/eieio-generic.el
@@ -110,7 +110,7 @@ Methods with only primary implementations are executed in an optimized way."
 
   (cond
    ((or (not (fboundp method))
-        (eq 'autoload (car-safe (symbol-function method))))
+        (autoloadp (symbol-function method)))
     ;; Make sure the method tables are installed.
     (eieio--mt-install method)
     ;; Construct the actual body of this function.
diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el
index c5597b8..0c85d90 100644
--- a/lisp/emacs-lisp/eieio.el
+++ b/lisp/emacs-lisp/eieio.el
@@ -276,6 +276,17 @@ and reference them using the function `class-option'."
           `(defun ,name (&rest slots)
              ,(format "Create a new object with name NAME of class type %S."
                       name)
+             (declare (compiler-macro
+                       (lambda (whole)
+                         (if (not (stringp (car slots)))
+                             whole
+                           (macroexp--warn-and-return
+                            (format "Obsolete name arg %S to constructor %S"
+                                    (car slots) (car whole))
+                            ;; Keep the name arg, for backward compatibility,
+                            ;; but hide it so we don't trigger indefinitely.
+                            `(,(car whole) (identity ,(car slots))
+                              ,@(cdr slots)))))))
              (apply #'eieio-constructor ',name slots))))))
 
 
diff --git a/test/ChangeLog b/test/ChangeLog
index 15baf86..e81bfa7 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-18  Stefan Monnier  
+
+	* automated/cl-generic-tests.el (cl-generic-test-10-weird): New test.
+	Rename other tests to preserve ordering.
+
 2015-01-18  Leo Liu  
 
 	* automated/seq-tests.el (test-seq-subseq): Add more tests.
diff --git a/test/automated/cl-generic-tests.el b/test/automated/cl-generic-tests.el
index 46397fb..1c01d9b 100644
--- a/test/automated/cl-generic-tests.el
+++ b/test/automated/cl-generic-tests.el
@@ -29,12 +29,12 @@
 (cl-defgeneric cl--generic-1 (x y))
 (cl-defgeneric (setf cl--generic-1) (v y z) "My generic doc.")
 
-(ert-deftest cl-generic-test-0 ()
+(ert-deftest cl-generic-test-00 ()
   (cl-defgeneric cl--generic-1 (x y))
   (cl-defmethod cl--generic-1 ((x t) y) (cons x y))
   (should (equal (cl--generic-1 'a 'b) '(a . b))))
 
-(ert-deftest cl-generic-test-1-eql ()
+(ert-deftest cl-generic-test-01-eql ()
   (cl-defgeneric cl--generic-1 (x y))
   (cl-defmethod cl--generic-1 ((x t) y) (cons x y))
   (cl-defmethod cl--generic-1 ((_x (eql 4)) _y)
@@ -53,7 +53,7 @@
 (cl-defstruct (cl-generic-struct-child11 (:include cl-generic-struct-child1)) d)
 (cl-defstruct (cl-generic-struct-child2 (:include cl-generic-struct-parent)) e)
 
-(ert-deftest cl-generic-test-2-struct ()
+(ert-deftest cl-generic-test-02-struct ()
   (cl-defgeneric cl--generic-1 (x y) "My doc.")
   (cl-defmethod cl--generic-1 ((x t) y) "Doc 1." (cons x y))
   (cl-defmethod cl--generic-1 ((_x cl-generic-struct-parent) y)
@@ -73,7 +73,7 @@
   (should (equal (cl--generic-1 (make-cl-generic-struct-child11) nil)
                  '("child11" "around""child1" "parent" a))))
 
-(ert-deftest cl-generic-test-3-setf ()
+(ert-deftest cl-generic-test-03-setf ()
   (cl-defmethod (setf cl--generic-1) (v (y t) z) (list v y z))
   (cl-defmethod (setf cl--generic-1) (v (_y (eql 4)) z) (list v "four" z))
   (should (equal (setf (cl--generic-1 'a 'b) 'v) '(v a b)))
@@ -85,7 +85,7 @@
                    '(v a b)))
     (should (equal x '(3 2 1)))))
 
-(ert-deftest cl-generic-test-4-overlapping-tagcodes ()
+(ert-deftest cl-generic-test-04-overlapping-tagcodes ()
   (cl-defgeneric cl--generic-1 (x y) "My doc.")
   (cl-defmethod cl--generic-1 ((y t) z) (list y z))
   (cl-defmethod cl--generic-1 ((_y (eql 4)) _z)
@@ -98,7 +98,7 @@
   (should (equal (cl--generic-1 1 'b) '("integer" "number" 1 b)))
   (should (equal (cl--generic-1 4 'b) '("four" "integer" "number" 4 b))))
 
-(ert-deftest cl-generic-test-5-alias ()
+(ert-deftest cl-generic-test-05-alias ()
   (cl-defgeneric cl--generic-1 (x y) "My doc.")
   (defalias 'cl--generic-2 #'cl--generic-1)
   (cl-defmethod cl--generic-1 ((y t) z) (list y z))
@@ -106,7 +106,7 @@
                 (cons "four" (cl-call-next-method)))
   (should (equal (cl--generic-1 4 'b) '("four" 4 b))))
 
-(ert-deftest cl-generic-test-6-multiple-dispatch ()
+(ert-deftest cl-generic-test-06-multiple-dispatch ()
   (cl-defgeneric cl--generic-1 (x y) "My doc.")
   (cl-defmethod cl--generic-1 (x y) (list x y))
   (cl-defmethod cl--generic-1 (_x (_y integer))
@@ -117,7 +117,7 @@
     (cons "x&y-int" (cl-call-next-method)))
   (should (equal (cl--generic-1 1 2) '("x&y-int" "x-int" "y-int" 1 2))))
 
-(ert-deftest cl-generic-test-7-apo ()
+(ert-deftest cl-generic-test-07-apo ()
   (cl-defgeneric cl--generic-1 (x y)
     (:documentation "My doc.") (:argument-precedence-order y x))
   (cl-defmethod cl--generic-1 (x y) (list x y))
@@ -129,7 +129,7 @@
     (cons "x&y-int" (cl-call-next-method)))
   (should (equal (cl--generic-1 1 2) '("x&y-int" "y-int" "x-int" 1 2))))
 
-(ert-deftest cl-generic-test-8-after/before ()
+(ert-deftest cl-generic-test-08-after/before ()
   (let ((log ()))
     (cl-defgeneric cl--generic-1 (x y))
     (cl-defmethod cl--generic-1 ((_x t) y) (cons y log))
@@ -144,7 +144,7 @@
 
 (defun cl--generic-test-advice (&rest args) (cons "advice" (apply args)))
 
-(ert-deftest cl-generic-test-9-advice ()
+(ert-deftest cl-generic-test-09-advice ()
   (cl-defgeneric cl--generic-1 (x y) "My doc.")
   (cl-defmethod cl--generic-1 (x y) (list x y))
   (advice-add 'cl--generic-1 :around #'cl--generic-test-advice)
@@ -155,5 +155,16 @@
   (advice-remove 'cl--generic-1 #'cl--generic-test-advice)
   (should (equal (cl--generic-1 4 5) '("integer" 4 5))))
 
+(ert-deftest cl-generic-test-10-weird ()
+  (cl-defgeneric cl--generic-1 (x &rest r) "My doc.")
+  (cl-defmethod cl--generic-1 (x &rest r) (cons x r))
+  ;; This kind of definition is not valid according to CLHS, but it does show
+  ;; up in EIEIO's tests for no-next-method, so we should either
+  ;; detect it and signal an error or do something meaningful with it.
+  (cl-defmethod cl--generic-1 (x (y integer) &rest r)
+    `("integer" ,y ,x ,@r))
+  (should (equal (cl--generic-1 'a 'b) '(a b)))
+  (should (equal (cl--generic-1 1 2) '("integer" 2 1))))
+
 (provide 'cl-generic-tests)
 ;;; cl-generic-tests.el ends here

commit 8ab85ee7ce9ad101583620e7ba3bee39cf3491ae
Author: Artur Malabarba 
Date:   Sun Jan 18 10:38:19 2015 -0200

    (package--append-to-alist): Updated docstring due to new name.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 07c873d..b7a1fb9 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -2,6 +2,7 @@
 
 	* emacs-lisp/package.el (package--append-to-alist): Renamed from
 	`package--add-to-alist'
+	Updated docstring due to new name.
 
 2015-01-18  Leo Liu  
 
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index 07ddddd..0f094b5 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -1157,10 +1157,12 @@ Also, add the originating archive to the `package-desc' structure."
             (package--append-to-alist pkg-desc package-archive-contents)))))
 
 (defun package--append-to-alist (pkg-desc alist)
-  "Add PKG-DESC to ALIST.
+  "Append an entry for PKG-DESC to the start of ALIST and return it.
+This entry takes the form (`package-desc-name' PKG-DESC).
 
-Packages are grouped by name. The package descriptions are sorted
-by version number."
+If ALIST already has an entry with this name, destructively add
+PKG-DESC to the cdr of this entry instead, sorted by version
+number."
   (let* ((name (package-desc-name pkg-desc))
          (priority-version (package-desc-priority-version pkg-desc))
          (existing-packages (assq name alist)))

commit 3ccbda730d654949b774a7ff99a759957991cb5c
Author: Artur Malabarba 
Date:   Sun Jan 18 10:13:07 2015 -0200

    package.el (package--append-to-alist): Renamed from `add-to-alist'

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 680adc7..07c873d 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-18  Artur Malabarba  
+
+	* emacs-lisp/package.el (package--append-to-alist): Renamed from
+	`package--add-to-alist'
+
 2015-01-18  Leo Liu  
 
 	* emacs-lisp/cl-extra.el (cl-subseq): Use seq-subseq and fix
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index 4be3b58..07ddddd 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -1154,9 +1154,9 @@ Also, add the originating archive to the `package-desc' structure."
     (when (not (and pinned-to-archive
                     (not (equal (cdr pinned-to-archive) archive))))
       (setq package-archive-contents
-            (package--add-to-alist pkg-desc package-archive-contents)))))
+            (package--append-to-alist pkg-desc package-archive-contents)))))
 
-(defun package--add-to-alist (pkg-desc alist)
+(defun package--append-to-alist (pkg-desc alist)
   "Add PKG-DESC to ALIST.
 
 Packages are grouped by name. The package descriptions are sorted
@@ -2100,7 +2100,7 @@ If optional arg BUTTON is non-nil, describe its associated package."
         (cond ((member status '("installed" "unsigned"))
                (push pkg-desc installed))
               ((member status '("available" "new"))
-               (setq available (package--add-to-alist pkg-desc available))))))
+               (setq available (package--append-to-alist pkg-desc available))))))
     ;; Loop through list of installed packages, finding upgrades.
     (dolist (pkg-desc installed)
       (let* ((name (package-desc-name pkg-desc))

commit 54efd2ab176dd6cc33bb1e86a9c37908c26d0a46
Merge: 5769602 253d44b
Author: Joakim Verona 
Date:   Sun Jan 18 10:53:38 2015 +0100

    merge master

commit 253d44bd27b7d90b614b6b968a3b125eeb0a48f2
Author: Leo Liu 
Date:   Sun Jan 18 14:03:59 2015 +0800

    Fix seq-subseq and cl-subseq for bad bounding indices
    
    Fixes: debbugs:19434 debbugs:19519
    
    * lisp/emacs-lisp/cl-extra.el (cl-subseq): Use seq-subseq and fix
    multiple evaluation.
    
    * lisp/emacs-lisp/seq.el (seq-subseq): Throw bad bounding indices
    error.
    
    * test/automated/seq-tests.el (test-seq-subseq): Add more tests.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index ace8d22..680adc7 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,11 @@
+2015-01-18  Leo Liu  
+
+	* emacs-lisp/cl-extra.el (cl-subseq): Use seq-subseq and fix
+	multiple evaluation.  (Bug#19519)
+
+	* emacs-lisp/seq.el (seq-subseq): Throw bad bounding indices
+	error.  (Bug#19434)
+
 2015-01-18  Stefan Monnier  
 
 	* emacs-lisp/cl-macs.el (cl-defstruct): Minor optimization when include
diff --git a/lisp/emacs-lisp/cl-extra.el b/lisp/emacs-lisp/cl-extra.el
index 2f8a5a6..afc2adb 100644
--- a/lisp/emacs-lisp/cl-extra.el
+++ b/lisp/emacs-lisp/cl-extra.el
@@ -38,6 +38,7 @@
 ;;; Code:
 
 (require 'cl-lib)
+(require 'seq)
 
 ;;; Type coercion.
 
@@ -521,28 +522,10 @@ If END is omitted, it defaults to the length of the sequence.
 If START or END is negative, it counts from the end."
   (declare (gv-setter
             (lambda (new)
-              `(progn (cl-replace ,seq ,new :start1 ,start :end1 ,end)
-                      ,new))))
-  (if (stringp seq) (substring seq start end)
-    (let (len)
-      (and end (< end 0) (setq end (+ end (setq len (length seq)))))
-      (if (< start 0) (setq start (+ start (or len (setq len (length seq))))))
-      (cond ((listp seq)
-	     (if (> start 0) (setq seq (nthcdr start seq)))
-	     (if end
-		 (let ((res nil))
-		   (while (>= (setq end (1- end)) start)
-		     (push (pop seq) res))
-		   (nreverse res))
-	       (copy-sequence seq)))
-	    (t
-	     (or end (setq end (or len (length seq))))
-	     (let ((res (make-vector (max (- end start) 0) nil))
-		   (i 0))
-	       (while (< start end)
-		 (aset res i (aref seq start))
-		 (setq i (1+ i) start (1+ start)))
-	       res))))))
+              (macroexp-let2 nil new new
+		`(progn (cl-replace ,seq ,new :start1 ,start :end1 ,end)
+			,new)))))
+  (seq-subseq seq start end))
 
 ;;;###autoload
 (defun cl-concatenate (type &rest seqs)
diff --git a/lisp/emacs-lisp/seq.el b/lisp/emacs-lisp/seq.el
index f6740c7..b28153b 100644
--- a/lisp/emacs-lisp/seq.el
+++ b/lisp/emacs-lisp/seq.el
@@ -197,14 +197,18 @@ If END is omitted, it defaults to the length of the sequence.
 If START or END is negative, it counts from the end."
   (cond ((or (stringp seq) (vectorp seq)) (substring seq start end))
         ((listp seq)
-         (let (len)
+         (let (len (errtext (format "Bad bounding indices: %s, %s" start end)))
            (and end (< end 0) (setq end (+ end (setq len (seq-length seq)))))
            (if (< start 0) (setq start (+ start (or len (setq len (seq-length seq))))))
-           (if (> start 0) (setq seq (nthcdr start seq)))
+           (when (> start 0)
+             (setq seq (nthcdr (1- start) seq))
+             (or seq (error "%s" errtext))
+             (setq seq (cdr seq)))
            (if end
                (let ((res nil))
-                 (while (>= (setq end (1- end)) start)
+                 (while (and (>= (setq end (1- end)) start) seq)
                    (push (pop seq) res))
+                 (or (= (1+ end) start) (error "%s" errtext))
                  (nreverse res))
              (seq-copy seq))))
         (t (error "Unsupported sequence: %s" seq))))
diff --git a/test/ChangeLog b/test/ChangeLog
index 56ec3af..15baf86 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-18  Leo Liu  
+
+	* automated/seq-tests.el (test-seq-subseq): Add more tests.
+	(Bug#19434)
+
 2015-01-17  Stefan Monnier  
 
 	* automated/eieio-tests.el
diff --git a/test/automated/seq-tests.el b/test/automated/seq-tests.el
index 9fcda7f..2398979 100644
--- a/test/automated/seq-tests.el
+++ b/test/automated/seq-tests.el
@@ -182,7 +182,12 @@ Evaluate BODY for each created sequence.
     (should (same-contents-p (seq-subseq seq 1 -1) '(3 4))))
   (should (vectorp (seq-subseq [2 3 4 5] 2)))
   (should (stringp (seq-subseq "foo" 2 3)))
-  (should (listp (seq-subseq '(2 3 4 4) 2 3))))
+  (should (listp (seq-subseq '(2 3 4 4) 2 3)))
+  (should-error (seq-subseq '(1 2 3) 4))
+  (should-not   (seq-subseq '(1 2 3) 3))
+  (should       (seq-subseq '(1 2 3) -3))
+  (should-error (seq-subseq '(1 2 3) 1 4))
+  (should       (seq-subseq '(1 2 3) 1 3)))
 
 (ert-deftest test-seq-concatenate ()
   (with-test-sequences (seq '(2 4 6))

commit 909126de0f6d2e53aec44c97abccee5b32b25f28
Author: Stefan Monnier 
Date:   Sat Jan 17 22:50:50 2015 -0500

    * lisp/emacs-lisp/cl-generic.el: Add support for cl-next-method-p.
    
    (cl-defmethod): Add edebug spec.
    (cl--generic-build-combined-method): Fix call to
    cl-no-applicable-method.
    (cl--generic-nnm-sample, cl--generic-cnm-sample): New constant.
    (cl--generic-isnot-nnm-p): New function.
    (cl--generic-lambda): Use it to add support for cl-next-method-p.
    (cl-no-next-method, cl-no-applicable-method): Simplify arg list.
    (cl-next-method-p): New function.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index cce686b..ace8d22 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,19 @@
+2015-01-18  Stefan Monnier  
+
+	* emacs-lisp/cl-macs.el (cl-defstruct): Minor optimization when include
+	or print is nil.
+	(cl-struct-type-p): New function.
+
+	* emacs-lisp/cl-generic.el: Add support for cl-next-method-p.
+	(cl-defmethod): Add edebug spec.
+	(cl--generic-build-combined-method): Fix call to
+	cl-no-applicable-method.
+	(cl--generic-nnm-sample, cl--generic-cnm-sample): New constant.
+	(cl--generic-isnot-nnm-p): New function.
+	(cl--generic-lambda): Use it to add support for cl-next-method-p.
+	(cl-no-next-method, cl-no-applicable-method): Simplify arg list.
+	(cl-next-method-p): New function.
+
 2015-01-17  Ulrich Müller  
 
 	* version.el (emacs-repository-get-version): Update docstring.
@@ -14,8 +30,8 @@
 	in place of the file name while working on non-file buffers, just
 	like hack-dir-local-variables already does.  (Bug#19140)
 
-	* textmodes/enriched.el (enriched-encode): Use
-	inhibit-point-motion-hooks in addition to inhibit-read-only.
+	* textmodes/enriched.el (enriched-encode):
+	Use inhibit-point-motion-hooks in addition to inhibit-read-only.
 	(Bug#18246)
 
 	* desktop.el (desktop-read): Do not call desktop-clear when no
diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el
index ae0f129..819e2e9 100644
--- a/lisp/emacs-lisp/cl-generic.el
+++ b/lisp/emacs-lisp/cl-generic.el
@@ -26,8 +26,7 @@
 ;; The main entry points are: `cl-defgeneric' and `cl-defmethod'.
 
 ;; Missing elements:
-;; - We don't support next-method-p, make-method, call-method,
-;;   define-method-combination.
+;; - We don't support make-method, call-method, define-method-combination.
 ;; - Method and generic function objects: CLOS defines methods as objects
 ;;   (same for generic functions), whereas we don't offer such an abstraction.
 ;; - `no-next-method' should receive the "calling method" object, but since we
@@ -133,7 +132,7 @@ They should be sorted from most specific to least specific.")
   "Create a generic function NAME.
 DOC-STRING is the base documentation for this class.  A generic
 function has no body, as its purpose is to decide which method body
-is appropriate to use.  Specific methods are defined with `defmethod'.
+is appropriate to use.  Specific methods are defined with `cl-defmethod'.
 With this implementation the ARGS are currently ignored.
 OPTIONS-AND-METHODS is currently only used to specify the docstring,
 via (:documentation DOCSTRING)."
@@ -223,8 +222,10 @@ This macro can only be used within the lexical scope of a cl-generic method."
              (let* ((doc-string (and doc-string (stringp (car body))
                                      (pop body)))
                     (cnm (make-symbol "cl--cnm"))
+                    (nmp (make-symbol "cl--nmp"))
                     (nbody (macroexpand-all
-                            `(cl-flet ((cl-call-next-method ,cnm))
+                            `(cl-flet ((cl-call-next-method ,cnm)
+                                       (cl-next-method-p ,nmp))
                                ,@body)
                             macroenv))
                     ;; FIXME: Rather than `grep' after the fact, the
@@ -232,11 +233,15 @@ This macro can only be used within the lexical scope of a cl-generic method."
                     ;; is used.
                     ;; FIXME: Also, optimize the case where call-next-method is
                     ;; only called with explicit arguments.
-                    (uses-cnm (cl--generic-fgrep (list cnm) nbody)))
+                    (uses-cnm (cl--generic-fgrep (list cnm nmp) nbody)))
                (cons (not (not uses-cnm))
                      `#'(lambda (,@(if uses-cnm (list cnm)) ,@args)
                           ,@(if doc-string (list doc-string))
-                          ,nbody))))
+                          ,(if (not (memq nmp uses-cnm))
+                               nbody
+                             `(let ((,nmp (lambda ()
+                                            (cl--generic-isnot-nnm-p ,cnm))))
+                                ,nbody))))))
             (f (error "Unexpected macroexpansion result: %S" f))))))))
 
 
@@ -261,7 +266,15 @@ Other than a type, TYPE can also be of the form `(eql VAL)' in
 which case this method will be invoked when the argument is `eql' to VAL.
 
 \(fn NAME [QUALIFIER] ARGS &rest [DOCSTRING] BODY)"
-  (declare (doc-string 3) (indent 2))
+  (declare (doc-string 3) (indent 2)
+           (debug
+            (&define                    ; this means we are defining something
+             [&or name ("setf" :name setf name)]
+             ;; ^^ This is the methods symbol
+             [ &optional keywordp ]     ; this is key :before etc
+             list                       ; arguments
+             [ &optional stringp ]      ; documentation string
+             def-body)))                ; part to be debugged
   (let ((qualifiers nil))
     (while (keywordp args)
       (push args qualifiers)
@@ -402,7 +415,8 @@ for all those different tags in the method-cache.")
                  cl--generic-combined-method-memoization)
       (cond
        ((null mets-by-qual) (lambda (&rest args)
-                             (cl-no-applicable-method generic-name args)))
+                              (apply #'cl-no-applicable-method
+                                     generic-name args)))
        (t
         (let* ((fun (lambda (&rest args)
                       ;; FIXME: CLOS passes as second arg the "calling method".
@@ -428,6 +442,38 @@ for all those different tags in the method-cache.")
                               (apply af args)))))))
           (cl--generic-nest fun (alist-get :around mets-by-qual))))))))
 
+(defconst cl--generic-nnm-sample
+  (cl--generic-build-combined-method nil '(((specializer . :qualifier)))))
+(defconst cl--generic-cnm-sample
+  (funcall (cl--generic-build-combined-method
+            nil `(((specializer . :primary) t . ,#'identity)))))
+
+(defun cl--generic-isnot-nnm-p (cnm)
+  "Return non-nil if CNM is the function that calls `cl-no-next-method'."
+  ;; ¡Big Gross Ugly Hack!
+  ;; `next-method-p' just sucks, we should let it die.  But EIEIO did support
+  ;; it, and some packages use it, so we need to support it.
+  (catch 'found
+    (cl-assert (function-equal cnm cl--generic-cnm-sample))
+    (if (byte-code-function-p cnm)
+        (let ((cnm-constants (aref cnm 2))
+              (sample-constants (aref cl--generic-cnm-sample 2)))
+          (dotimes (i (length sample-constants))
+            (when (function-equal (aref sample-constants i)
+                                  cl--generic-nnm-sample)
+              (throw 'found
+                     (not (function-equal (aref cnm-constants i)
+                                          cl--generic-nnm-sample))))))
+      (cl-assert (eq 'closure (car-safe cl--generic-cnm-sample)))
+      (let ((cnm-env (cadr cnm)))
+        (dolist (vb (cadr cl--generic-cnm-sample))
+          (when (function-equal (cdr vb) cl--generic-nnm-sample)
+            (throw 'found
+                   (not (function-equal (cdar cnm-env)
+                                        cl--generic-nnm-sample))))
+          (setq cnm-env (cdr cnm-env)))))
+    (error "Haven't found no-next-method-sample in cnm-sample")))
+
 (defun cl--generic-cache-miss (generic dispatch-arg dispatches-left tags)
   (let ((types (apply #'append (mapcar cl-generic-tag-types-function tags)))
         (methods '()))
@@ -452,12 +498,12 @@ for all those different tags in the method-cache.")
 
 (cl-defgeneric cl-no-next-method (generic method &rest args)
   "Function called when `cl-call-next-method' finds no next method.")
-(cl-defmethod cl-no-next-method ((generic t) method &rest args)
+(cl-defmethod cl-no-next-method (generic method &rest args)
   (signal 'cl-no-next-method `(,generic ,method ,@args)))
 
 (cl-defgeneric cl-no-applicable-method (generic &rest args)
   "Function called when a method call finds no applicable method.")
-(cl-defmethod cl-no-applicable-method ((generic t) &rest args)
+(cl-defmethod cl-no-applicable-method (generic &rest args)
   (signal 'cl-no-applicable-method `(,generic ,@args)))
 
 (defun cl-call-next-method (&rest _args)
@@ -465,6 +511,12 @@ for all those different tags in the method-cache.")
 Can only be used from within the lexical body of a primary or around method."
   (error "cl-call-next-method only allowed inside primary and around methods"))
 
+(defun cl-next-method-p ()
+  "Return non-nil if there is a next method.
+Can only be used from within the lexical body of a primary or around method."
+  (declare (obsolete "make sure there's always a next method, or catch `cl-no-next-method' instead" "25.1"))
+  (error "cl-next-method-p only allowed inside primary and around methods"))
+
 ;;; Add support for describe-function
 
 (defun cl--generic-search-method (met-name)
diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el
index cda0c97..c5597b8 100644
--- a/lisp/emacs-lisp/eieio.el
+++ b/lisp/emacs-lisp/eieio.el
@@ -36,12 +36,12 @@
 ;;   Retrieved from:
 ;;   http://192.220.96.201/dylan/linearization-oopsla96.html
 
-;; There is funny stuff going on with typep and deftype.  This
-;; is the only way I seem to be able to make this stuff load properly.
-
 ;; @TODO - fix :initform to be a form, not a quoted value
 ;; @TODO - Prefix non-clos functions with `eieio-'.
 
+;; TODO: better integrate CL's defstructs and classes.  E.g. make it possible
+;; to create a new class that inherits from a struct.
+
 ;;; Code:
 
 (defvar eieio-version "1.4"
@@ -924,7 +924,7 @@ variable PRINT-FUNCTION.  Optional argument NOESCAPE is passed to
 
 ;;; Start of automatically extracted autoloads.
 
-;;;### (autoloads nil "eieio-custom" "eieio-custom.el" "9a908efef1720439feb6323c1dd01770")
+;;;### (autoloads nil "eieio-custom" "eieio-custom.el" "6baa78cfc590cc0422e12b7eb55abf24")
 ;;; Generated autoloads from eieio-custom.el
 
 (autoload 'customize-object "eieio-custom" "\

commit 576960211cb54bc77dc6969591420bca89c59456
Author: Joakim Verona 
Date:   Sun Jan 18 00:08:40 2015 +0100

    bidi bugfix
    
    Bidi bugfix, same as forimages,by Eli Zaretski

diff --git a/src/xdisp.c b/src/xdisp.c
index b38e8a6..fcc0809 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -25853,6 +25853,15 @@ produce_xwidget_glyph (struct it *it)
       enum glyph_row_area area = it->area;
 
       glyph = it->glyph_row->glyphs[area] + it->glyph_row->used[area];
+      if (it->glyph_row->reversed_p)
+	{
+	  struct glyph *g;
+
+	  /* Make room for the new glyph.  */
+	  for (g = glyph - 1; g >= it->glyph_row->glyphs[it->area]; g--)
+	    g[1] = *g;
+	  glyph = it->glyph_row->glyphs[it->area];
+	}
       if (glyph < it->glyph_row->glyphs[area + 1])
 	{
 	  glyph->charpos = CHARPOS (it->position);

commit 3065125d314a4cb97aa7982e2d06f48759865af7
Author: Ulrich Müller 
Date:   Sun Jan 18 00:06:13 2015 +0100

    Fix mistake in rebase/merge conflict resolution.
    
    Remove lines from lisp/vc/vc-bzr.el again that were accidentally
    restored in commit 2015-01-17T09:56:45!ulm@gentoo.org.
    (Previously removed in commit 2014-12-01T13:24:27Z!esr@thyrsus.com.)

diff --git a/lisp/vc/vc-bzr.el b/lisp/vc/vc-bzr.el
index 94574fd..96d6d1d 100644
--- a/lisp/vc/vc-bzr.el
+++ b/lisp/vc/vc-bzr.el
@@ -493,9 +493,6 @@ in the branch repository (or whose status not be determined)."
     (add-hook 'after-save-hook 'vc-bzr-resolve-when-done nil t)
     (message "There are unresolved conflicts in this file")))
 
-(defun vc-bzr-workfile-unchanged-p (file)
-  (eq 'unchanged (car (vc-bzr-status file))))
-
 (defun vc-bzr-version-dirstate (dir)
   "Try to return as a string the bzr revision ID of directory DIR.
 This uses the dirstate file's parent revision entry.

commit fd5c0bcc3b5e72e6a6b1f91b3257ef9d9d042fd4
Author: Ulrich Müller 
Date:   Sat Jan 17 23:19:15 2015 +0100

    Update docstring of emacs-repository-get-version.
    
    * version.el (emacs-repository-get-version): Update docstring.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index bf5f60d..cce686b 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,7 @@
+2015-01-17  Ulrich Müller  
+
+	* version.el (emacs-repository-get-version): Update docstring.
+
 2015-01-17  Ivan Shmakov  
 
 	* url/url-cookie.el (url-cookie-write-file): Let-bind print-length
diff --git a/lisp/version.el b/lisp/version.el
index 4377873..1837cbf 100644
--- a/lisp/version.el
+++ b/lisp/version.el
@@ -105,10 +105,8 @@ this reports on the current state of the sources, which may not
 correspond to the running Emacs.
 
 Optional argument DIR is a directory to use instead of
-`source-directory'.  Optional argument EXTERNAL non-nil means to
-maybe ask the VCS itself, if the sources appear to be under
-version control.  If `force', always ask.  the VCS. Otherwise
-only ask the VCS if we cannot find any information ourselves."
+`source-directory'.  Optional argument EXTERNAL is ignored and is
+retained for compatibility."
   (or dir (setq dir source-directory))
   (cond ((file-directory-p (expand-file-name ".git" dir))
 	 (message "Waiting for git...")

commit 0aaa5d699bf95afb152317f0788b8e2d2042f59d
Author: Ivan Shmakov 
Date:   Sat Jan 17 19:15:51 2015 +0000

    Unloading support for misearch.
    
    * lisp/misearch.el (multi-isearch-unload-function): New function.
    (misearch-unload-function): New alias.
    
    Fixes: debbugs:19566

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 60732e7..bf5f60d 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -17,6 +17,9 @@
 	* desktop.el (desktop-read): Do not call desktop-clear when no
 	desktop file is found.  (Bug#18371)
 
+	* misearch.el (multi-isearch-unload-function): New function.
+	(misearch-unload-function): New alias.  (Bug#19566)
+
 2015-01-17  Stefan Monnier  
 
 	* emacs-lisp/eieio-core.el (eieio--class-constructor): Rename from
diff --git a/lisp/misearch.el b/lisp/misearch.el
index 6daae24..dcc8195 100644
--- a/lisp/misearch.el
+++ b/lisp/misearch.el
@@ -377,6 +377,25 @@ whose file names match the specified wildcard."
     (goto-char (if isearch-forward (point-min) (point-max)))
     (isearch-forward-regexp nil t)))
 
+(defun multi-isearch-unload-function ()
+  "Remove autoloaded variables from `unload-function-defs-list'.
+Also prevent the feature from being reloaded via `isearch-mode-hook'."
+  (remove-hook 'isearch-mode-hook 'multi-isearch-setup)
+  (let ((defs (list (car unload-function-defs-list)))
+	(auto '(multi-isearch-next-buffer-function
+		multi-isearch-next-buffer-current-function
+		multi-isearch-current-buffer
+		multi-isearch-buffer-list multi-isearch-file-list)))
+    (dolist (def (cdr unload-function-defs-list))
+      (unless (and (symbolp def)
+		   (memq def auto))
+	(push def defs)))
+    (setq unload-function-defs-list (nreverse defs))
+    ;; .
+    nil))
+
+(defalias 'misearch-unload-function 'multi-isearch-unload-function)
+
 
 (provide 'multi-isearch)
 (provide 'misearch)

commit e391d88705efd3897996ed81e1f37b936dc3aa21
Author: Ivan Shmakov 
Date:   Sat Jan 17 19:12:45 2015 +0000

    Do not clear the session when trying to read a non-existent desktop file.
    
    * lisp/desktop.el (desktop-read): Do not call desktop-clear when no
    desktop file is found.
    
    Fixes: debbugs:18371

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index d894b1f..60732e7 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -14,6 +14,9 @@
 	inhibit-point-motion-hooks in addition to inhibit-read-only.
 	(Bug#18246)
 
+	* desktop.el (desktop-read): Do not call desktop-clear when no
+	desktop file is found.  (Bug#18371)
+
 2015-01-17  Stefan Monnier  
 
 	* emacs-lisp/eieio-core.el (eieio--class-constructor): Rename from
diff --git a/lisp/desktop.el b/lisp/desktop.el
index 3845f94..c355d7f 100644
--- a/lisp/desktop.el
+++ b/lisp/desktop.el
@@ -1191,7 +1191,6 @@ Using it may cause conflicts.  Use it anyway? " owner)))))
 	    (desktop-auto-save-enable)
 	    t))
       ;; No desktop file found.
-      (desktop-clear)
       (let ((default-directory desktop-dirname))
         (run-hooks 'desktop-no-desktop-file-hook))
       (message "No desktop file.")

commit 172854461531ac7ad11b4490adc148e7a42a9fb3
Author: Ivan Shmakov 
Date:   Sat Jan 17 19:07:07 2015 +0000

    Fix: inhibit point motion hooks when encoding an enriched document.
    
    * lisp/textmodes/enriched.el (enriched-encode): Use
    inhibit-point-motion-hooks in addition to inhibit-read-only.
    
    Fixes: debbugs:18246

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 55c7a36..d894b1f 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -10,6 +10,10 @@
 	in place of the file name while working on non-file buffers, just
 	like hack-dir-local-variables already does.  (Bug#19140)
 
+	* textmodes/enriched.el (enriched-encode): Use
+	inhibit-point-motion-hooks in addition to inhibit-read-only.
+	(Bug#18246)
+
 2015-01-17  Stefan Monnier  
 
 	* emacs-lisp/eieio-core.el (eieio--class-constructor): Rename from
diff --git a/lisp/textmodes/enriched.el b/lisp/textmodes/enriched.el
index b9d45b3..040a50e 100644
--- a/lisp/textmodes/enriched.el
+++ b/lisp/textmodes/enriched.el
@@ -314,7 +314,8 @@ the region, and the START and END of each region."
 ;;;###autoload
 (defun enriched-encode (from to orig-buf)
   (if enriched-verbose (message "Enriched: encoding document..."))
-  (let ((inhibit-read-only t))
+  (let ((inhibit-read-only t)
+	(inhibit-point-motion-hooks t))
     (save-restriction
       (narrow-to-region from to)
       (delete-to-left-margin)

commit e000ff30b4354064ca7f9ed07e58903d7c44033f
Author: Ivan Shmakov 
Date:   Sat Jan 17 19:02:00 2015 +0000

    Fix dir-locals handling for non-file buffers.
    
    * lisp/files.el (dir-locals-collect-variables): Use default-directory
    in place of the file name while working on non-file buffers, just
    like hack-dir-local-variables already does.
    
    Fixes: debbugs:19140

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index f5ad8de..55c7a36 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -6,6 +6,10 @@
 	* files.el (find-file-other-window, find-file-other-frame):
 	Use mapc instead of mapcar.  (Bug#18175)
 
+	* files.el (dir-locals-collect-variables): Use default-directory
+	in place of the file name while working on non-file buffers, just
+	like hack-dir-local-variables already does.  (Bug#19140)
+
 2015-01-17  Stefan Monnier  
 
 	* emacs-lisp/eieio-core.el (eieio--class-constructor): Rename from
diff --git a/lisp/files.el b/lisp/files.el
index e6d80a9..e9632ed 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -3602,7 +3602,9 @@ Returns the new list."
   "Collect entries from CLASS-VARIABLES into VARIABLES.
 ROOT is the root directory of the project.
 Return the new variables list."
-  (let* ((file-name (buffer-file-name))
+  (let* ((file-name (or (buffer-file-name)
+			;; Handle non-file buffers, too.
+			(expand-file-name default-directory)))
 	 (sub-file-name (if file-name
                             ;; FIXME: Why not use file-relative-name?
 			    (substring file-name (length root)))))

commit 3e824b05af3a75768a61001fad68e2340af810eb
Author: Ivan Shmakov 
Date:   Sat Jan 17 18:57:04 2015 +0000

    Avoid mapcar in two cases in files.el.
    
    * lisp/files.el (find-file-other-window, find-file-other-frame):
    Use mapc instead of mapcar.
    
    Fixes: debbugs:18175

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 9e3cedd..f5ad8de 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -3,6 +3,9 @@
 	* url/url-cookie.el (url-cookie-write-file): Let-bind print-length
 	and print-level to nil to avoid writing a garbled list.  (Bug#16805)
 
+	* files.el (find-file-other-window, find-file-other-frame):
+	Use mapc instead of mapcar.  (Bug#18175)
+
 2015-01-17  Stefan Monnier  
 
 	* emacs-lisp/eieio-core.el (eieio--class-constructor): Rename from
diff --git a/lisp/files.el b/lisp/files.el
index f8318d8..e6d80a9 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -1489,8 +1489,9 @@ expand wildcards (if any) and visit multiple files."
     (if (listp value)
 	(progn
 	  (setq value (nreverse value))
-	  (cons (switch-to-buffer-other-window (car value))
-		(mapcar 'switch-to-buffer (cdr value))))
+	  (switch-to-buffer-other-window (car value))
+	  (mapc 'switch-to-buffer (cdr value))
+	  value)
       (switch-to-buffer-other-window value))))
 
 (defun find-file-other-frame (filename &optional wildcards)
@@ -1512,8 +1513,9 @@ expand wildcards (if any) and visit multiple files."
     (if (listp value)
 	(progn
 	  (setq value (nreverse value))
-	  (cons (switch-to-buffer-other-frame (car value))
-		(mapcar 'switch-to-buffer (cdr value))))
+	  (switch-to-buffer-other-frame (car value))
+	  (mapc 'switch-to-buffer (cdr value))
+	  value)
       (switch-to-buffer-other-frame value))))
 
 (defun find-file-existing (filename)

commit 22441b69cb6b81b7bf8914556563087ec6d5def3
Author: Ivan Shmakov 
Date:   Sat Jan 17 18:42:31 2015 +0000

    Ignore print-length and print-level while formatting url-cookie data.
    
    * lisp/url/url-cookie.el (url-cookie-write-file): Let-bind print-length
    and print-level to nil to avoid writing a garbled list.
    
    Fixes: debbugs:16805

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 82cb1fa..9e3cedd 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-17  Ivan Shmakov  
+
+	* url/url-cookie.el (url-cookie-write-file): Let-bind print-length
+	and print-level to nil to avoid writing a garbled list.  (Bug#16805)
+
 2015-01-17  Stefan Monnier  
 
 	* emacs-lisp/eieio-core.el (eieio--class-constructor): Rename from
diff --git a/lisp/url/url-cookie.el b/lisp/url/url-cookie.el
index ccb2606..a7b3d16 100644
--- a/lisp/url/url-cookie.el
+++ b/lisp/url/url-cookie.el
@@ -104,9 +104,10 @@ telling Microsoft that."
       (insert ";; Emacs-W3 HTTP cookies file\n"
 	      ";; Automatically generated file!!! DO NOT EDIT!!!\n\n"
 	      "(setq url-cookie-storage\n '")
-      (pp url-cookie-storage (current-buffer))
-      (insert ")\n(setq url-cookie-secure-storage\n '")
-      (pp url-cookie-secure-storage (current-buffer))
+      (let ((print-length nil) (print-level nil))
+	(pp url-cookie-storage (current-buffer))
+	(insert ")\n(setq url-cookie-secure-storage\n '")
+	(pp url-cookie-secure-storage (current-buffer)))
       (insert ")\n")
       (insert "\n;; Local Variables:\n"
               ";; version-control: never\n"

commit e6518fc8f5afca5d71582aabb089147cba583966
Author: Eli Zaretskii 
Date:   Sat Jan 17 20:32:16 2015 +0200

    Fix display of images in R2L screen lines
    
     src/xdisp.c (produce_image_glyph): Fix display of images in R2L
     screen lines: prepend the new glyph to the ones already there
     instead of appending it.

diff --git a/src/ChangeLog b/src/ChangeLog
index a90cc41..ad4a85a 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,9 @@
+2015-01-17  Eli Zaretskii  
+
+	* xdisp.c (produce_image_glyph): Fix display of images in R2L
+	screen lines: prepend the new glyph to the ones already there
+	instead of appending it.
+
 2015-01-14  Eli Zaretskii  
 
 	* w32fns.c (w32_set_title_bar_text): New function, including
diff --git a/src/xdisp.c b/src/xdisp.c
index a1cc286..b1125d3 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -25428,6 +25428,15 @@ produce_image_glyph (struct it *it)
       enum glyph_row_area area = it->area;
 
       glyph = it->glyph_row->glyphs[area] + it->glyph_row->used[area];
+      if (it->glyph_row->reversed_p)
+	{
+	  struct glyph *g;
+
+	  /* Make room for the new glyph.  */
+	  for (g = glyph - 1; g >= it->glyph_row->glyphs[it->area]; g--)
+	    g[1] = *g;
+	  glyph = it->glyph_row->glyphs[it->area];
+	}
       if (glyph < it->glyph_row->glyphs[area + 1])
 	{
 	  glyph->charpos = CHARPOS (it->position);

commit ca80ebc736346e196badd95ac524150b5c318683
Author: Stefan Monnier 
Date:   Sat Jan 17 09:50:07 2015 -0500

    * lisp/emacs-lisp/eieio-core.el (eieio--class-constructor): Rename.
    
    Fixes: debbugs:19620
    
    (eieio--class-constructor): Rename from class-constructor, and make it an alias
    for `identity'.  Update all callers.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index bf00a8d..82cb1fa 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,9 @@
 2015-01-17  Stefan Monnier  
 
+	* emacs-lisp/eieio-core.el (eieio--class-constructor): Rename from
+	class-constructor, and make it an alias for `identity'.
+	Update all callers.
+
 	* emacs-lisp/eieio.el (eieio-constructor): Handle obsolete object name
 	argument here (bug#19620)...
 	(defclass): ...instead of in the constructor here.
diff --git a/lisp/emacs-lisp/eieio-core.el b/lisp/emacs-lisp/eieio-core.el
index 0e589d6..a82e887 100644
--- a/lisp/emacs-lisp/eieio-core.el
+++ b/lisp/emacs-lisp/eieio-core.el
@@ -209,11 +209,8 @@ CLASS is a symbol."                     ;FIXME: Is it a vector or a symbol?
   (format "#" (symbol-name class)))
 (define-obsolete-function-alias 'class-name #'eieio-class-name "24.4")
 
-(defmacro class-constructor (class)
-  "Return the symbol representing the constructor of CLASS."
-  (declare (debug t))
-  ;; FIXME: How/when would this not be a costly identity function?
-  `(eieio--class-symbol (eieio--class-v ,class)))
+(defalias 'eieio--class-constructor #'identity
+  "Return the symbol representing the constructor of CLASS.")
 
 (defmacro eieio--class-option-assoc (list option)
   "Return from LIST the found OPTION, or nil if it doesn't exist."
diff --git a/lisp/emacs-lisp/eieio-custom.el b/lisp/emacs-lisp/eieio-custom.el
index d0eaaf2..8ab74ae 100644
--- a/lisp/emacs-lisp/eieio-custom.el
+++ b/lisp/emacs-lisp/eieio-custom.el
@@ -184,7 +184,7 @@ Optional argument IGNORE is an extraneous parameter."
   (if (not (widget-get widget :value))
       (widget-put widget
 		  :value (cond ((widget-get widget :objecttype)
-				(funcall (class-constructor
+				(funcall (eieio--class-constructor
 					  (widget-get widget :objecttype))
 					 "Custom-new"))
 			       ((widget-get widget :objectcreatefcn)
diff --git a/lisp/emacs-lisp/eieio-datadebug.el b/lisp/emacs-lisp/eieio-datadebug.el
index 43d9a03..ab8d41e 100644
--- a/lisp/emacs-lisp/eieio-datadebug.el
+++ b/lisp/emacs-lisp/eieio-datadebug.el
@@ -88,7 +88,7 @@ PREBUTTONTEXT is some text between PREFIX and the object button."
 			     "Name: ")
     (let* ((cl (eieio-object-class obj))
 	   (cv (eieio--class-v cl)))
-      (data-debug-insert-thing (class-constructor cl)
+      (data-debug-insert-thing (eieio--class-constructor cl)
 			       prefix
 			       "Class: ")
       ;; Loop over all the public slots
diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el
index e7a606f..cda0c97 100644
--- a/lisp/emacs-lisp/eieio.el
+++ b/lisp/emacs-lisp/eieio.el
@@ -301,7 +301,7 @@ In EIEIO, the class' constructor requires a name for use when printing.
 `make-instance' in CLOS doesn't use names the way Emacs does, so the
 class is used as the name slot instead when INITARGS doesn't start with
 a string."
-  (apply (class-constructor class) initargs))
+  (apply (eieio--class-constructor class) initargs))
 
 
 ;;; Get/Set slots in an object.
@@ -821,7 +821,7 @@ this object."
     ;; Each slot's slot is writen using its :writer.
     (princ (make-string (* eieio-print-depth 2) ? ))
     (princ "(")
-    (princ (symbol-name (class-constructor (eieio-object-class this))))
+    (princ (symbol-name (eieio--class-constructor (eieio-object-class this))))
     (princ " ")
     (prin1 (eieio-object-name-string this))
     (princ "\n")

commit 4610ce96c1a6d8574f85d8bd543fb8e1e02d6718
Author: Stefan Monnier 
Date:   Sat Jan 17 09:41:51 2015 -0500

    * lisp/emacs-lisp/eieio.el: Improve `constructor' compatibility.
    
    Fixes: debbugs:19620
    
    (eieio-constructor): Handle obsolete object name argument here...
    (defclass): ...instead of in the constructor here.
    
    * test/automated/eieio-tests.el
    (eieio-test-37-obsolete-name-in-constructor): New test.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 6958b2f..bf00a8d 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,7 +1,13 @@
+2015-01-17  Stefan Monnier  
+
+	* emacs-lisp/eieio.el (eieio-constructor): Handle obsolete object name
+	argument here (bug#19620)...
+	(defclass): ...instead of in the constructor here.
+
 2015-01-16  Jorgen Schaefer  
 
-	* emacs-lisp/package.el (package-archive-priorities): Specify
-	correct type.
+	* emacs-lisp/package.el (package-archive-priorities):
+	Specify correct type.
 
 2015-01-17  Ulrich Müller  
 
@@ -71,8 +77,8 @@
 
 2015-01-16  Artur Malabarba  
 
-	* emacs-lisp/package.el (package--read-pkg-desc): New
-	function. Read a `define-package' form in current buffer. Return
+	* emacs-lisp/package.el (package--read-pkg-desc):
+	New function. Read a `define-package' form in current buffer. Return
 	the pkg-desc, with desc-kind set to KIND.
 	(package-dir-info): New function. Find package information for a
 	directory. The return result is a `package-desc'.
@@ -80,8 +86,8 @@
 	(package-install-file): Install packages from directory.
 	(package-desc-suffix)
 	(package-install-from-archive)
-	* emacs-lisp/package-x.el (package-upload-buffer-internal): Ensure
-	all remaining instances of `package-desc-kind' handle the 'dir
+	* emacs-lisp/package-x.el (package-upload-buffer-internal):
+	Ensure all remaining instances of `package-desc-kind' handle the 'dir
 	value.
 
 2015-01-16  Jorgen Schaefer  
diff --git a/lisp/emacs-lisp/eieio-core.el b/lisp/emacs-lisp/eieio-core.el
index 0747d97..0e589d6 100644
--- a/lisp/emacs-lisp/eieio-core.el
+++ b/lisp/emacs-lisp/eieio-core.el
@@ -212,6 +212,7 @@ CLASS is a symbol."                     ;FIXME: Is it a vector or a symbol?
 (defmacro class-constructor (class)
   "Return the symbol representing the constructor of CLASS."
   (declare (debug t))
+  ;; FIXME: How/when would this not be a costly identity function?
   `(eieio--class-symbol (eieio--class-v ,class)))
 
 (defmacro eieio--class-option-assoc (list option)
diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el
index 392316c..e7a606f 100644
--- a/lisp/emacs-lisp/eieio.el
+++ b/lisp/emacs-lisp/eieio.el
@@ -276,12 +276,6 @@ and reference them using the function `class-option'."
           `(defun ,name (&rest slots)
              ,(format "Create a new object with name NAME of class type %S."
                       name)
-             (if (and slots
-                      (let ((x (car slots)))
-                        (or (stringp x) (null x))))
-                 (funcall (if eieio-backward-compatibility #'ignore #'message)
-                          "Obsolete name %S passed to %S constructor"
-                          (pop slots) ',name))
              (apply #'eieio-constructor ',name slots))))))
 
 
@@ -656,7 +650,14 @@ SLOTS are the initialization slots used by `shared-initialize'.
 This static method is called when an object is constructed.
 It allocates the vector used to represent an EIEIO object, and then
 calls `shared-initialize' on that object."
-  (let* ((new-object (copy-sequence (eieio--class-default-object-cache (eieio--class-v class)))))
+  (let* ((new-object (copy-sequence (eieio--class-default-object-cache
+                                     (eieio--class-v class)))))
+    (if (and slots
+             (let ((x (car slots)))
+               (or (stringp x) (null x))))
+        (funcall (if eieio-backward-compatibility #'ignore #'message)
+                 "Obsolete name %S passed to %S constructor"
+                 (pop slots) class))
     ;; Call the initialize method on the new object with the slots
     ;; that were passed down to us.
     (initialize-instance new-object slots)
diff --git a/test/ChangeLog b/test/ChangeLog
index 2f5ff05..56ec3af 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,5 +1,10 @@
 2015-01-17  Stefan Monnier  
 
+	* automated/eieio-tests.el
+	(eieio-test-37-obsolete-name-in-constructor): New test.
+
+2015-01-17  Stefan Monnier  
+
 	* automated/eieio-tests.el (eieio-test-25-slot-tests)
 	(eieio-test-26-default-inheritance, eieio-test-28-slot-protection)
 	(eieio-test-30-slot-attribute-override)
diff --git a/test/automated/eieio-tests.el b/test/automated/eieio-tests.el
index 3a32da6..e0120b4 100644
--- a/test/automated/eieio-tests.el
+++ b/test/automated/eieio-tests.el
@@ -892,6 +892,15 @@ Subclasses to override slot attributes.")
   (should (= (length (eieio-build-class-alist 'opt-test1 nil)) 2))
   (should (= (length (eieio-build-class-alist 'opt-test1 t)) 1)))
 
+(defclass eieio--testing ()
+  ())
+
+(defmethod constructor :static ((_x eieio--testing) newname &rest _args)
+  (list newname 2))
+
+(ert-deftest eieio-test-37-obsolete-name-in-constructor ()
+  (should (equal (eieio--testing "toto") '("toto" 2))))
+
 (provide 'eieio-tests)
 
 ;;; eieio-tests.el ends here

commit b0af6745d6dfc19cdbeac2b6c34087a44c9f03fd
Author: Eli Zaretskii 
Date:   Sat Jan 17 15:06:55 2015 +0200

    Use u+05f4 in TUTORIAL.he.
    
     etc/tutorials/TUTORIAL.he: Use u+05f4 HEBREW PUNCTUATION GERSHAYIM
     instead of u+0022 QUOTATION MARK in Hebrew acronyms.

diff --git a/etc/ChangeLog b/etc/ChangeLog
index 7b95bdc..a801c52 100644
--- a/etc/ChangeLog
+++ b/etc/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-17  Eli Zaretskii  
+
+	* tutorials/TUTORIAL.he: Use u+05f4 HEBREW PUNCTUATION GERSHAYIM
+	instead of u+0022 QUOTATION MARK in Hebrew acronyms.
+
 2014-12-24  Ãlvar Ibeas    (tiny change)
 
 	* tutorials/TUTORIAL.es: Improve style consistency.  Spelling fixes.
diff --git a/etc/tutorials/TUTORIAL.he b/etc/tutorials/TUTORIAL.he
index b391098..beb406e 100644
--- a/etc/tutorials/TUTORIAL.he
+++ b/etc/tutorials/TUTORIAL.he
@@ -14,10 +14,10 @@
 כדי להפסיק פקודה ב×מצע ההקשה, יש להקיש C-g.
 המחרוזת ">>" בקצה הימני מסמנת הור×ות ×¢×‘×•×¨×›× ×›×“×™ לנסות להשתמש בפקודה כלשהי.
 לדוגמה:
-<<שורות ריקות תתווספנה סביב השורה הב××” ×¢"×™ help-with-tutorial>>
+<<שורות ריקות תתווספנה סביב השורה הב××” ×¢×´×™ help-with-tutorial>>
 [×מצע העמוד הוש×ר ריק למטרות לימודיות. הטקסט ממשיך להלן]
 >>  הקישו עתה C-v (הצג העמוד הב×) על־מנת ×œ×”×ª×§×“× ×œ×¢×ž×•×“ הב×. (קדימה, נסו
-    ×–×ת ×¢"×™ לחיצה והחזקה של מקש CONTROL והקשה על v.)
+    ×–×ת ×¢×´×™ לחיצה והחזקה של מקש CONTROL והקשה על v.)
     מעתה והל××”, ×¢×œ×™×›× ×œ×¢×©×•×ª ×–×ת בכל ×¤×¢× ×©×ª×¡×™×™×ž×• ×œ×§×¨×•× ×ת המוצג על המסך.
 
 שימו לב לחפיפה של שתי שורות ×›×שר ××ª× ×¢×•×‘×¨×™× ×ž×ž×¡×š למשך, מה שמבטיח רציפות
@@ -99,7 +99,7 @@ P מ־previous (קוד×), N מ־Next (הב×), B מ־Backward (×חורה)
 לתצוגה. לזה קור××™× "גלילה". גלילה מ×פשרת ל־Emacs להניע ×ת הסמן למקו×
 כלשהו בטקסט מבלי שהסמן ×™×™×¢×œ× ×ž×”×ª×¦×•×’×”.
 
->> נסו להניע ×ת הסמן ×ל מחוץ לתצוגה ×¢"×™ הקשת C-n ושימו לב למה שקורה.
+>> נסו להניע ×ת הסמן ×ל מחוץ לתצוגה ×¢×´×™ הקשת C-n ושימו לב למה שקורה.
 
 ×× ×ª× ×•×¢×” תו־תו ×יטית מדי, תוכלו לנוע ×ž×™×œ×™× ×©×œ×ž×•×ª. M-f â€(META-f) מזיז
 ×ת הסמן מילה ×חת קדימה ו×ילו M-b ×–×– מילה ×חורה.
@@ -196,18 +196,18 @@ argument) ×ž×©×•× ×ž×§×™×©×™× ×ותו לפני הפקודה ×ליה ×”×•× 
 >> נסו עתה להקיש C-u 8 C-v.
 
 כתוצ××”, התצוגה היתה צריכה לזוז ב־8 שורות. ×× ×‘×¨×¦×•× ×›× ×œ×’×œ×•×œ בחזרה,
-×פשר להשיג ×–×ת ×¢"×™ מתן ×רגומנט ל־M-v.
+×פשר להשיג ×–×ת ×¢×´×™ מתן ×רגומנט ל־M-v.
 
 ×× ×”×¤×¢×œ×ª× ×ת Emacs על־גבי תצוגה גרפית כגון X ×ו MS-Windows, ×ת×
 ×¦×¨×™×›×™× ×œ×¨×ות פס צר וגבוה, ששמו פס גלילה (scroll bar) בצידו של החלון
-של Emacs. ניתן לגלול ×ת הטקסט ×¢"×™ הקלקת עכבר בתוך פס הגלילה.
+של Emacs. ניתן לגלול ×ת הטקסט ×¢×´×™ הקלקת עכבר בתוך פס הגלילה.
 
 ×× ×”×¢×›×‘×¨ ×©×œ×›× ×ž×¦×•×™×“ בגלגל, תוכלו להשתמש ×’× ×‘×• לגלילת הטקסט.
 
 * ×× Emacs מפסיק להגיב
 ----------------------
 
-×× Emacs מפסיק להגיב לפקודות, תוכלו להפסיק ×ותו בבטחה ×¢"×™ הקשת C-g.
+×× Emacs מפסיק להגיב לפקודות, תוכלו להפסיק ×ותו בבטחה ×¢×´×™ הקשת C-g.
 פקודות שביצוען מת×רך ××£ הן ניתנות להפסקה בעזרת C-g.
 
 בנוסף, ×ª×’×¨×•× ×”×§×©×ª C-g לביטול ×”×רגומנט הנומרי ×ו תחילת הפקודה שטר×
@@ -272,7 +272,7 @@ argument) ×ž×©×•× ×ž×§×™×©×™× ×ותו לפני הפקודה ×ליה ×”×•× 
 יתכן שבמקלדת ×©×œ×›× ×§×™×™× ×ž×§×© שעליו ×¨×©×•× , ×ך ×–×” ×ינו המקש ש×נו
 קור××™× ×œ×• .
 
->> הקישו עתה מספר תוי×, ו×חר־כך מחקו ××•×ª× ×¢"×™ הקשות ×חדות
+>> הקישו עתה מספר תוי×, ו×חר־כך מחקו ××•×ª× ×¢×´×™ הקשות ×חדות
    על . ×ל תחששו לשנות ×ת הקובץ ×”×–×” -- העותק המקורי
    של השיעור ייש×ר ×œ×œ× ×©×™× ×•×™. ××ª× ×¢×•×‘×“×™× ×¢×œ העותק ×”×ישי שלכ×.
 
@@ -402,7 +402,7 @@ argument) ×ž×©×•× ×ž×§×™×©×™× ×ותו לפני הפקודה ×ליה ×”×•× 
 ×× ×©×™× ×™×ª× ×ת הטקסט ו××– ×”×—×œ×˜×ª× ×©×”×©×™× ×•×™ ×”×™×” טעות, תוכלו לבטל ×ת השינוי
 בעזרת פקודת הביטול, ‪C-/‬.
 
-בדרך כלל,‪C-/‬ מבטל ×ת ×”×©×™× ×•×™×™× ×©×‘×•×¦×¢×• ×¢"×™ פקודה ×חת. הפעלה חוזרת של
+בדרך כלל,‪C-/‬ מבטל ×ת ×”×©×™× ×•×™×™× ×©×‘×•×¦×¢×• ×¢×´×™ פקודה ×חת. הפעלה חוזרת של
 ‪C-/‬ ברצף מבטלת ×©×™× ×•×™×™× ×©×œ פקודות קודמות, ×חת ×חרי השניה.
 
 שני יוצ××™× ×ž×”×›×œ×œ ×”×–×”: פקודות ש×ינן משנות טקסט (למשל פקודות הנעת הסמן
@@ -468,7 +468,7 @@ C-x u, ××Ö¾×›×™ ×”×™× ×¤×—×•×ª נוחה להקשה מספר ×¤×¢×ž×™× ×‘×–×•
 
 פקודה זו שומרת בקובץ ×ת הטקסט המוחזק בתוך Emacs. ×‘×¤×¢× ×”×¨×שונה שתפעילו
 פקודה זו, Emacs משנה ×ת ×©× ×”×§×•×‘×¥ המקורי ×œ×©× ×—×“×© כך שהמקור ×œ× ×™×œ×š
-ל×יבוד. ×”×©× ×”×—×“×© נוצר ×¢"×™ הוספת "~" בסוף ×”×©× ×”×ž×§×•×¨×™ של הקובץ.
+ל×יבוד. ×”×©× ×”×—×“×© נוצר ×¢×´×™ הוספת "~" בסוף ×”×©× ×”×ž×§×•×¨×™ של הקובץ.
 
 כשהשמירה מסתיימת, Emacs מציג בשורה התחתונה ×ת ×©× ×”×§×•×‘×¥ שנשמר. נסו
 לשמור ×œ×¢×ª×™× ×ž×–×•×ž× ×•×ª על־מנת להימנע מל×בד יותר מדי מהעבודה ×©×œ×›× ×× ×”×ž×—×©×‘
@@ -489,7 +489,7 @@ Emacs ייצור ×ת הקובץ ×¢× ×”×˜×§×¡×˜ שהקשת×. מ×ותו רגע
 --------
 
 ×× ×ª×¤×ª×—×• קובץ נוסף ×¢× C-x C-f, הקובץ הר×שון עדיין נש×ר פתוח ב־Emacs.
-תוכלו לחזור ×ליו ×¢"×™ C-x C-f. כך תוכלו לפתוח מספר רב של קבצי×.
+תוכלו לחזור ×ליו ×¢×´×™ C-x C-f. כך תוכלו לפתוח מספר רב של קבצי×.
 
 â€Emacs מחזיק כל קובץ בתוך יישות ×‘×©× "חוצץ" ("buffer"). פתיחת קובץ יוצרת
 חוצץ חדש בתוך Emacs. כדי לר×ות ×ת רשימת ×”×—×•×¦×¦×™× ×”×§×™×™×ž×™× ×‘×ª×•×š Emacs,
@@ -508,19 +508,19 @@ Emacs ייצור ×ת הקובץ ×¢× ×”×˜×§×¡×˜ שהקשת×. מ×ותו רגע
 ×›×©×§×™×™×ž×™× ×ž×¡×¤×¨ חוצצי×, רק ×חד ×ž×”× ×™×›×•×œ להיות החוצץ "הנוכחי" בכל רגע
 נתון. זהו החוצץ בו ××ª× ×ž×‘×¦×¢×™× ×¢×¨×™×›×” ב×ותו רגע. ×× ×‘×¨×¦×•× ×›× ×œ×¢×¨×•×š חוצץ
 ×חר, ×¢×œ×™×›× "לעבור" חוצץ. עבור ×—×•×¦×¦×™× ×©×ž×ª××™×ž×™× ×œ×§×‘×¦×™×, ניתן לעשות ×–×ת
-×¢"×™ C-x C-f שיפקוד ×ת הקובץ בשנית. ×בל קיימת דרך פשוטה יותר: שימוש
+×¢×´×™ C-x C-f שיפקוד ×ת הקובץ בשנית. ×בל קיימת דרך פשוטה יותר: שימוש
 בפקודה C-x b. פקודה זו תחייב ××•×ª×›× ×œ×”×§×™×© ×ת ×©× ×”×—×•×¦×¥.
 
->> ניצור עתה קובץ ×‘×©× "foo" ×¢"×™ הקשת C-x C-f foo ‎.
+>> ניצור עתה קובץ ×‘×©× "foo" ×¢×´×™ הקשת C-x C-f foo ‎.
    עתה חזרו לשיעור זה בעזרת C-x b TUTORIAL.he ‎.
 
 ברוב ×”×ž×§×¨×™× ×©× ×”×—×•×¦×¥ ×–×”×” ×œ×©× ×”×§×•×‘×¥ (×œ×œ× ×©× ×”×ª×™×§×™×” שלו). ×בל ×ין ×–×”
-תמיד כך. רשימת ×”×—×•×¦×¦×™× ×©× ×•×¦×¨×ª ×¢"×™ C-x C-b תציג הן ×ת ×©× ×”×—×•×¦×¥ והן ×ת
+תמיד כך. רשימת ×”×—×•×¦×¦×™× ×©× ×•×¦×¨×ª ×¢×´×™ C-x C-b תציג הן ×ת ×©× ×”×—×•×¦×¥ והן ×ת
 ×©× ×”×§×•×‘×¥ עבור כל ×”×—×•×¦×¦×™× ×”×§×™×™×ž×™× ×‘Ö¾Emacs.
 
 כל טקסט שמוצג בחלון של Emacs הינו תמיד חלק של חוצץ כלשהו. קיימי×
 ×—×•×¦×¦×™× ×©××™× × ×§×©×•×¨×™× ×œ×©×•× ×§×•×‘×¥. לדוגמ×, החוצץ ×‘×©× "*Buffer List*"
-המחזיק ×ת רשימת ×”×—×•×¦×¦×™× ×©× ×•×¦×¨×” ×¢"×™ C-x C-b ×ינו מציג ×©×•× ×§×•×‘×¥. ×’×
+המחזיק ×ת רשימת ×”×—×•×¦×¦×™× ×©× ×•×¦×¨×” ×¢×´×™ C-x C-b ×ינו מציג ×©×•× ×§×•×‘×¥. ×’×
 לחוצץ הנוכחי ששמו TUTORIAL.he ×œ× ×”×™×” קובץ עד ×©×”×§×©×ª× ×¢×œ C-x C-s כדי
 לשמור ×ותו בקובץ.
 
@@ -545,18 +545,18 @@ C-x C-s. לכן קיימת פקודה
 
 >> הכניסו שורה של טקסט ו×חר־כך הקישו C-x s.
    ×”×•× ×¦×¨×™×š לש×ול ×”×× ×œ×©×ž×•×¨ חוצץ ×‘×©× TUTORIAL.he.
-   השיבו בחיוב ע"י הקשה על "y".
+   השיבו בחיוב ע״י הקשה על "y".
 
 
 * הרחבת ×וסף הפקודות
 --------------------
 
-מספר הפקודות ב־Emacs גדול בהרבה ממה שניתן להפעיל ע"י כל תוי ה־control
+מספר הפקודות ב־Emacs גדול בהרבה ממה שניתן להפעיל ע״י כל תוי ה־control
 וה־meta. כדי להתגבר על בעיה זו, Emacs משתמש בפקודות X המרחיבות (eXtend)
 ×ת ×וסף הפקודות הרגיל. פקודות הרחבה ×לו הן שתי×:
 
 	â€C-x     הרחבת תו. תו בודד ×©×‘× ×חריו ×ž×©×œ×™× ×ת הפקודה.
-	â€M-x     הרחבה ×¢"×™ ×©× ×”×¤×§×•×“×”. ×חריו ×‘× ×©× ×רוך של פקודה.
+	â€M-x     הרחבה ×¢×´×™ ×©× ×”×¤×§×•×“×”. ×חריו ×‘× ×©× ×רוך של פקודה.
 
 בעזרת שתי ×לו ניתן להפעיל פקודות שימושיות שבהן ×ž×©×ª×ž×©×™× ×œ×¢×ª×™× ×¨×—×•×§×•×ª
 יותר מ×שר פקודות ×©×œ×ž×“×ª× ×¢×“ עכשיו. כמה מהן כבר ר×ית×: C-x C-f לפתיחת
@@ -577,7 +577,7 @@ Emacs: ×”×•× ×ž×—×–×™×¨ ××ª×›× ×œ×©×•×¨×ª הפקודות הבסיסית של
 תצטרכו להקיש ×ת הפקודה "fg" ×ו ‪"%emacs"‬.
 
 הרגע הנכון להשתמש ב־C-x C-c ×”×•× ×›×שר ××ª× ×¢×•×ž×“×™× ×œ×”×ª× ×ª×§ (log out).
-כמו־כן, תצטרכו להשתמש בו כדי לצ×ת מ־Emacs שהופעל ×¢"×™ תוכניות ×חרות
+כמו־כן, תצטרכו להשתמש בו כדי לצ×ת מ־Emacs שהופעל ×¢×´×™ תוכניות ×חרות
 כגון קרי×ת דו×ר ×לקטרוני.
 
 קיימות פקודות C-x רבות מ×ד. להלן רשימת ×לו שכבר למדת×:
@@ -591,17 +591,17 @@ Emacs: ×”×•× ×ž×—×–×™×¨ ××ª×›× ×œ×©×•×¨×ª הפקודות הבסיסית של
 	â€C-x 1  	הש×ר רק חלון ×חד ומחק כל הש×ר
 	â€C-x u  	בטל פקודה ×חרונה
 
-הרחבה ×¢"×™ ×©× ×”×¤×§×•×“×” שימושית ×¢× ×¤×§×•×“×•×ª עוד יותר נדירות ×ו פקודות
+הרחבה ×¢×´×™ ×©× ×”×¤×§×•×“×” שימושית ×¢× ×¤×§×•×“×•×ª עוד יותר נדירות ×ו פקודות
 ספציפיות רק ל×ופני פעולה (modes) מיוחדי×. ×“×•×’×ž× ×œ×›×š ×”×™× ×¤×§×•×“×”
 replace-string (החלף מחרוזת) ×שר מחליפה מחרוזת ×חת במשנה בכל החוצץ.
 ×חרי שתקישו M-x, â€Emacs מציג M-x בתחתית התצוגה ומחכה שתקישו ×ת ש×
 הפקודה, במקרה זה "replace-string". מספיק שתקישו "repl s‎" ו־Emacs
 ×™×©×œ×™× ×ת ×”×©× ×”×ž×œ×. ( ×”×•× ×ž×§×© Tab, בדרך כלל תמצ×ו ×ותו מעל מקש
 ×”Ö¾CapsLock ×ו Shift, ליד הקצה השמ×לי של המקלדת.) סיימו ×ת הזנת הפקודה
-ע"י הקשת .
+ע״י הקשת .
 
 הפקודה להחלפת מחרוזת זקוקה לשני ××¨×’×•×ž× ×˜×™× -- המחרוזת שתוחלף וזו שתחליף
-×ותה. סיימו הקשה של כל ×חת מהן ×¢"×™ .
+×ותה. סיימו הקשה של כל ×חת מהן ×¢×´×™ .
 
 >> הבי×ו ×ת הסמן שתי שורות מתחת לשורה זו.
    עתה הקישו M-x repl schangedaltered‎.
@@ -703,7 +703,7 @@ Auto Fill mode. ×›×שר ×ופן ×–×” מופעל, Emacs ×וטומטית פות
 ×‘×¡×™×•× ×ž×™×œ×” ×× ×”×˜×§×¡×˜ ×©×”×§×©×ª× ×רוך מדי בשביל שורה ×חת.
 
 להפעלת Auto Fill mode יש להקיש M-x auto-fill-mode ‎. ×›×שר ×ופן
-×–×” מופעל, ניתן לבטלו ×¢"×™ M-x auto-fill-mode ‎. ×–×ת ×ומרת, פקודה
+×–×” מופעל, ניתן לבטלו ×¢×´×™ M-x auto-fill-mode ‎. ×–×ת ×ומרת, פקודה
 זו מפעילה ×ת ×”×ופן כש×ינו פעיל ומבטלת ×ותו ×›×©×”×•× ×¤×¢×™×œ. לפעולה זו
 קור××™× "מיתוג" -- הפקודה "ממתגת" ×ת ×”×ופן.
 
@@ -717,7 +717,7 @@ Auto Fill mode. ×›×שר ×ופן ×–×” מופעל, Emacs ×וטומטית פות
 
 >> הקישו C-x f ×¢× ×רגומנט של 20. (C-u 2 0 C-x f). ×חר־כך הקישו טקסט
    כלשהו ושימו לב ש־Emacs פותח שורות חדשות ×חרי 20 ×ª×•×•×™× ×œ×›×œ היותר.
-   לבסוף, החזירו ×ת הגדרת ×”×©×•×œ×™×™× ×œÖ¾70 ×¢"×™ שימוש חוזר ב־C-x f.
+   לבסוף, החזירו ×ת הגדרת ×”×©×•×œ×™×™× ×œÖ¾70 ×¢×´×™ שימוש חוזר ב־C-x f.
 
 ×× ×¢×¨×›×ª× ×©×™× ×•×™×™× ×‘×מצע פסקה, Auto Fill mode ×œ× ×™×ž×œ× ×©×•×¨×•×ª מחדש ב×ופן
 ×וטומטי.
@@ -766,7 +766,7 @@ Auto Fill mode. ×›×שר ×ופן ×–×” מופעל, Emacs ×וטומטית פות
 × ×ž×¦× "סמ". עתה הקישו . ×”Ö¾"מ" נמחק מהמחרוזת והסמן חוזר ×œ×ž×§×•× ×‘×•
 ×”×•× ×ž×¦× ×ת "ס" לר×שונה.
 
-×× ×‘×ž×”×œ×š החיפוש תפעילו פקודה כלשהי ×¢"×™ הקשה על מקש תוך לחיצה על
+×× ×‘×ž×”×œ×š החיפוש תפעילו פקודה כלשהי ×¢×´×™ הקשה על מקש תוך לחיצה על
 CONTROL ×ו META, החיפוש יסתיי×. (כמה ×ª×•×•×™× ×™×•×¦××™× ×ž×›×œ×œ ×–×” -- ×לו תווי×
 ×ž×™×•×—×“×™× ×‘×¢×ª חיפוש, כדוגמת C-s ו־C-r.)
 
@@ -800,7 +800,7 @@ CONTROL ×ו META, החיפוש יסתיי×. (כמה ×ª×•×•×™× ×™×•×¦××™× ×ž
    הסמן בחלון העליון ייש×ר ×‘×ž×§×•× ×‘×• ×”×•× ×”×™×” לפני־כן.
 
 תוכלו להמשיך להשתמש ב־C-x o כדי לדלג בין החלונות. "החלון הנבחר", ×ותו
-חלון בו ×”× ×›× ×¢×•×¨×›×™× ×˜×§×¡×˜, מזוהה ×¢"×™ סמן בולט שמהבהב בזמן ש××™× ×›×
+חלון בו ×”× ×›× ×¢×•×¨×›×™× ×˜×§×¡×˜, מזוהה ×¢×´×™ סמן בולט שמהבהב בזמן ש××™× ×›×
 מקלידי×. לכל החלונות ×”××—×¨×™× ×ž×™×§×•× ×¡×ž×Ÿ משלה×; ×× ×”×¤×¢×œ×ª× ×ת Emacs על צג
 גרפי, ×ž×™×§×•× ×”×¡×ž×Ÿ בחלונות ×”××—×¨×™× ×ž×•×¦×’ כתיבה ריקה ש××™× ×” מהבהבת.
 
@@ -809,9 +809,9 @@ CONTROL ×ו META, החיפוש יסתיי×. (כמה ×ª×•×•×™× ×™×•×¦××™× ×ž
 הנבחר.
 
 â€C-M-v ×”×™× ×“×•×’×ž× ×חת של פקודת CONTROL-META. ×× ×‘×ž×§×œ×“×ª ×©×œ×›× ×§×™×™× ×ž×§×©
-META (×ו Alt) ×מיתי, תוכלו להקיש ×ת הפקודה ×¢"×™ לחיצה והחזקה של מקשי
+META (×ו Alt) ×מיתי, תוכלו להקיש ×ת הפקודה ×¢×´×™ לחיצה והחזקה של מקשי
 CONTROL ו־META ×’× ×™×—×“ ו××– להקיש v. הסדר שבו תלחצו על CONTROL ו־META
-×ינו משנה ×›×™ שני ×”×ž×§×©×™× ×”×œ×œ×• ×¤×•×¢×œ×™× ×¢"×™ שינוי התו המוקש יחד ×ית×.
+×ינו משנה ×›×™ שני ×”×ž×§×©×™× ×”×œ×œ×• ×¤×•×¢×œ×™× ×¢×´×™ שינוי התו המוקש יחד ×ית×.
 
 ×× ×ין במקלדת מקש META ×מיתי ו××ª× ×ž×©×ª×ž×©×™× ×‘Ö¾ כתחליף, הסדר כן
 משנה: ×—×™×™×‘×™× ×œ×”×§×™×©  ורק ל×חר מכן CONTROL-v, וז×ת משו×
@@ -854,8 +854,8 @@ CONTROL ו־META ×’× ×™×—×“ ו××– להקיש v. הסדר שבו תלחצו ×¢
 >> הקישו M-x delete-frame ‎.
    התבנית שבה ×”×§×©×ª× ×ת הפקודה תיסגר ×•×ª×™×¢×œ× ×ž×”×ž×¡×š.
 
-כמו־כן, ניתן לסגור תבנית בדרך הרגילה הנתמכת ע"י התצוגה הגרפית של
-המערכת ×©×œ×›× (בדרך־כלל, ×¢"×™ הקלקה על הכפתור המסומן ב־"X" בפינה עליונה
+כמו־כן, ניתן לסגור תבנית בדרך הרגילה הנתמכת ע״י התצוגה הגרפית של
+המערכת ×©×œ×›× (בדרך־כלל, ×¢×´×™ הקלקה על הכפתור המסומן ב־"X" בפינה עליונה
 של התבנית.) ×©×•× ×ž×™×“×¢ ×ינו הולך לעיבוד ×›×שר ×¡×•×’×¨×™× ×ª×‘× ×™×ª (×ו חלון).
 המידע ×”×–×” פשוט יורד מהתצוגה, ×בל ניתן ל×חזרו מ×וחר יותר.
 
@@ -863,7 +863,7 @@ CONTROL ו־META ×’× ×™×—×“ ו××– להקיש v. הסדר שבו תלחצו ×¢
 * רמות עריכה רקורסיביות
 -----------------------
 
-יתכן ותיקלעו למצב שקרוי "רמת עריכה רקורסיבית". Emacs מציין ×–×ת ×¢"×™
+יתכן ותיקלעו למצב שקרוי "רמת עריכה רקורסיבית". Emacs מציין ×–×ת ×¢×´×™
 ×¡×•×’×¨×™×™× ×ž×¨×•×‘×¢×™× ×‘×©×•×¨×ª הסטטוס מסביב ×œ×©× ×”×ופן הר×שי. למשל, יוצג ש×
 [(Fundamental)] ×‘×ž×§×•× (Fundamental).
 
@@ -910,7 +910,7 @@ M-x help ‎ כתחליף.)
 לציין מה הן עושות, השמות ×¢×©×•×™×™× ×œ×©×ž×© כתיעוד מקוצר -- מספיק כדי להזכיר
 ×œ×›× ×ת הפקודות ×©×œ×ž×“×ª× ×‘×¢×‘×¨.
 
-ניתן לציין ×חרי C-h c ×’× ×¤×§×•×“×•×ª שמופעלות ×¢"×™ סדרת ×ž×§×©×™× ×‘×ורך גדול
+ניתן לציין ×חרי C-h c ×’× ×¤×§×•×“×•×ª שמופעלות ×¢×´×™ סדרת ×ž×§×©×™× ×‘×ורך גדול
 מ×חד, כגון C-x C-s ×ו (×× ×ין מקש META ×ו EDIT ×ו ALT) â€â€Ž v.
 
 לקבלת מידע מפורט יותר על פקודה, השתמשו בפקודה C-h k ×‘×ž×§×•× C-h c.
@@ -934,7 +934,7 @@ M-x help ‎ כתחליף.)
 
     â€C-h a	פקודות בנוגע ×œ× ×•×©× ×ž×¡×•×™×™×. הקישו מילת מפתח ו־Emacs
 		יציג ×ת רשימת הפקודות ששמותיהן מכילות ×ת מילת המפתח.
-		כל הפקודות הללו ניתנות להפעלה ע"י META-x. עבור חלק
+		כל הפקודות הללו ניתנות להפעלה ע״י META-x. עבור חלק
 		מהפקודות תוצג ×’× ×¡×“×¨×ª ×ž×§×©×™× ×©×ž×¤×¢×™×œ×” ×ת הפקודה.
 
 >> הקישו C-h a file ‎.
@@ -960,9 +960,9 @@ find-file.
 * עוד תכונות
 ------------
 
-תוכלו ללמוד עוד על־×ודות Emacs ×¢"×™ קרי××” במדריך למשתמש שלו, ×× ×›×¡×¤×¨
+תוכלו ללמוד עוד על־×ודות Emacs ×¢×´×™ קרי××” במדריך למשתמש שלו, ×× ×›×¡×¤×¨
 מודפס ×ו בגירסה מקוונת בתוך Emacs עצמו. (תוכלו להגיע ×ל המדריך דרך
-תפריט Help ×ו ×¢"×™ הקשה על C-h r.) ××•×œ× ×©×ª×™ תכונות שבווד××™ ימצ×ו חן
+תפריט Help ×ו ×¢×´×™ הקשה על C-h r.) ××•×œ× ×©×ª×™ תכונות שבווד××™ ימצ×ו חן
 ×‘×¢×™× ×™×›× ×”×Ÿ השלמה ×שר חוסכת הקשות, ו־dired שמ×פשרת טיפול נוח בקבצי×.
 
 השלמה ×”×™× ×“×¨×š להימנע מהקשות מיותרות. למשל, ×× ×‘×¨×¦×•× ×›× ×œ×¢×‘×•×¨ לחוצץ
@@ -991,7 +991,7 @@ find-file.
 --------------
 
 שיעור ×–×” הינו צ××¦× ×©×œ שורה ×רוכה של ×©×™×¢×•×¨×™× ×‘×©×™×ž×•×© ב־Emacs, החל מהגרסה
-הר×שונה שנכתבה ×¢"×™ Stuart Cracraft עבור גירסת ×”Ö¾Emacs המקורית.
+הר×שונה שנכתבה ×¢×´×™ Stuart Cracraft עבור גירסת ×”Ö¾Emacs המקורית.
 
 גירסה זו של השיעור ×”×™× ×” חלק מחבילת GNU Emacs. ×”×™× ×ž×•×’× ×ª בזכויות יוצרי×
 וניתנת להעתקה והפצת ×¢×•×ª×§×™× ×‘×ª× ××™× ×ž×¡×•×™×™×ž×™× ×›×“×œ×§×ž×Ÿ:
@@ -999,7 +999,7 @@ find-file.
                        Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 â€GNU Emacs הינו תכנה חפשית; ×–×›×•×ª×›× ×œ×”×¤×™×¦×• ו\×ו לשנותו בכפוף לתנ××™
-הרשיון GNU General Public License, כפי ×©×”×•× ×™×•×¦× ×œ×ור ×¢"×™ Free
+הרשיון GNU General Public License, כפי ×©×”×•× ×™×•×¦× ×œ×ור ×¢×´×™ Free
 Software Foundation, ×× ×‘×’×¨×¡× 3 של הרשיון, ו×× (×›×ופציה השמורה לכ×)
 בכל ×’×¨×¡× ×ž×וחרת יותר.
 
@@ -1012,7 +1012,7 @@ Software Foundation, ×× ×‘×’×¨×¡× 3 של הרשיון, ו×× (×›×ופציה
 
 ×”× ×›× ×ž×•×–×ž× ×™× ×œ×§×¨×•× ×ת הקובץ COPYING ו××– ×כן לחלק ×¢×•×ª×§×™× ×©×œ GNU Emacs
 לחבריכ×. עזרו לנו לחסל ×ת "הבעלות" על תוכנה ש××™× ×” ××œ× ×—×‘×œ×” בתוכנה,
-וז×ת ×¢"×™ שימוש, כתיבה ושיתוף של תוכנה חופשית!
+וז×ת ×¢×´×™ שימוש, כתיבה ושיתוף של תוכנה חופשית!
 
 
 

commit d80fed096336339d9e4e1137cdfcf236db38886a
Author: Jorgen Schaefer 
Date:   Sat Jan 17 11:58:58 2015 +0100

    Type fix for defcustom.
    
    * emacs-lisp/package.el (package-archive-priorities): Specify
    correct type.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 018c6df..6958b2f 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-16  Jorgen Schaefer  
+
+	* emacs-lisp/package.el (package-archive-priorities): Specify
+	correct type.
+
 2015-01-17  Ulrich Müller  
 
 	* version.el (emacs-bzr-version-dirstate, emacs-bzr-version-bzr):
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index 08031c8..4be3b58 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -239,7 +239,8 @@ selected. When higher versions are available from archives with
 lower priorities, the user has to select those manually.
 
 Archives not in this list have the priority 0."
-  :type 'integer
+  :type '(alist :key-type (string :tag "Archive name")
+                :value-type (integer :tag "Priority (default is 0)"))
   :risky t
   :group 'package
   :version "25.1")

commit 6a6bb820d08368f9754bae73c9507c6fc36d1dca
Author: Ulrich Müller 
Date:   Fri Nov 14 09:05:02 2014 +0100

    Discard the Bazaar case in repository version detection
    
    * version.el (emacs-bzr-version-dirstate, emacs-bzr-version-bzr):
    Remove.
    (emacs-repository-get-version): Discard the Bazaar case.
    
    * vc/vc-bzr.el (vc-bzr-version-dirstate): Rename from
    emacs-bzr-version-dirstate and move from version.el to here.
    (vc-bzr-working-revision): Use it.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 2cc878d..018c6df 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,12 @@
+2015-01-17  Ulrich Müller  
+
+	* version.el (emacs-bzr-version-dirstate, emacs-bzr-version-bzr):
+	Remove.
+	(emacs-repository-get-version): Discard the Bazaar case.
+	* vc/vc-bzr.el (vc-bzr-version-dirstate): Rename from
+	emacs-bzr-version-dirstate and move from version.el to here.
+	(vc-bzr-working-revision): Use it.
+
 2015-01-17  Stefan Monnier  
 
 	* emacs-lisp/eieio-generic.el (call-next-method): Don't bother checking
diff --git a/lisp/vc/vc-bzr.el b/lisp/vc/vc-bzr.el
index 163df1f..94574fd 100644
--- a/lisp/vc/vc-bzr.el
+++ b/lisp/vc/vc-bzr.el
@@ -493,6 +493,22 @@ in the branch repository (or whose status not be determined)."
     (add-hook 'after-save-hook 'vc-bzr-resolve-when-done nil t)
     (message "There are unresolved conflicts in this file")))
 
+(defun vc-bzr-workfile-unchanged-p (file)
+  (eq 'unchanged (car (vc-bzr-status file))))
+
+(defun vc-bzr-version-dirstate (dir)
+  "Try to return as a string the bzr revision ID of directory DIR.
+This uses the dirstate file's parent revision entry.
+Returns nil if unable to find this information."
+  (let ((file (expand-file-name ".bzr/checkout/dirstate" dir)))
+    (when (file-readable-p file)
+      (with-temp-buffer
+        (insert-file-contents file)
+        (and (looking-at "#bazaar dirstate flat format 3")
+             (forward-line 3)
+             (looking-at "[0-9]+\0\\([^\0\n]+\\)\0")
+             (match-string 1))))))
+
 (defun vc-bzr-working-revision (file)
   (let* ((rootdir (vc-bzr-root file))
          (branch-format-file (expand-file-name vc-bzr-admin-branch-format-file
@@ -538,8 +554,8 @@ in the branch repository (or whose status not be determined)."
 			 ;; files exist.
 			 (and (file-exists-p branch-format-file)
 			      (file-exists-p lastrev-file)
-			      (equal (emacs-bzr-version-dirstate l-c-parent-dir)
-				     (emacs-bzr-version-dirstate rootdir))))))
+			      (equal (vc-bzr-version-dirstate l-c-parent-dir)
+				     (vc-bzr-version-dirstate rootdir))))))
 		 t)))
         (with-temp-buffer
           (insert-file-contents branch-format-file)
diff --git a/lisp/version.el b/lisp/version.el
index 75763b3..4377873 100644
--- a/lisp/version.el
+++ b/lisp/version.el
@@ -93,41 +93,6 @@ or if we could not determine the revision.")
 (define-obsolete-variable-alias 'emacs-bzr-version
                                 'emacs-repository-version "24.4")
 
-(defun emacs-bzr-version-dirstate (dir)
-  "Try to return as a string the bzr revision ID of directory DIR.
-This uses the dirstate file's parent revision entry.
-Returns nil if unable to find this information."
-  (let ((file (expand-file-name ".bzr/checkout/dirstate" dir)))
-    (when (file-readable-p file)
-      (with-temp-buffer
-        (insert-file-contents file)
-        (and (looking-at "#bazaar dirstate flat format 3")
-             (forward-line 3)
-             (looking-at "[0-9]+\0\\([^\0\n]+\\)\0")
-             (match-string 1))))))
-
-(defun emacs-bzr-version-bzr (dir)
-  "Ask bzr itself for the version information for directory DIR."
-  ;; Comments on `bzr version-info':
-  ;; i) Unknown files also cause clean != 1.
-  ;; ii) It can be slow, contacting the upstream repo to get the
-  ;; branch nick if one is not set locally, even with a custom
-  ;; template that is not asking for the nick (as used here).  You'd
-  ;; think the latter part would be trivial to fix:
-  ;; https://bugs.launchpad.net/bzr/+bug/882541/comments/3
-  ;; https://bugs.launchpad.net/bzr/+bug/629150
-  ;; You can set the nick locally with `bzr nick ...', which speeds
-  ;; things up enormously.  `bzr revno' does not have this issue, but
-  ;; has no way to print the revision_id AFAICS.
-  (message "Waiting for bzr...")
-  (with-temp-buffer
-    (if (zerop
-         (call-process "bzr" nil '(t nil) nil "version-info"
-                       "--custom"
-                       "--template={revno} {revision_id} (clean = {clean})"
-                       dir))
-        (buffer-string))))
-
 (define-obsolete-function-alias 'emacs-bzr-get-version
                                 'emacs-repository-get-version "24.4")
 
@@ -145,43 +110,7 @@ maybe ask the VCS itself, if the sources appear to be under
 version control.  If `force', always ask.  the VCS. Otherwise
 only ask the VCS if we cannot find any information ourselves."
   (or dir (setq dir source-directory))
-  (cond ((file-directory-p (expand-file-name ".bzr/branch" dir))
-	 (if (eq external 'force)
-	     (emacs-bzr-version-bzr dir)
-	   (let (file loc rev)
-	     (cond ((file-readable-p
-		     (setq file (expand-file-name
-				 ".bzr/branch/last-revision" dir)))
-		    (with-temp-buffer
-		      (insert-file-contents file)
-		      (goto-char (point-max))
-		      (if (looking-back "\n")
-			  (delete-char -1))
-		      (buffer-string)))
-		   ;; OK, no last-revision.  Is it a lightweight checkout?
-		   ((file-readable-p
-		     (setq file (expand-file-name ".bzr/branch/location" dir)))
-		    (setq rev (emacs-bzr-version-dirstate dir))
-		    ;; If parent branch is local, try looking there for the rev.
-		    ;; Note: there is no guarantee that the parent branch's rev
-		    ;; corresponds to this branch.  This branch could have
-		    ;; been made with a specific -r revno argument, or the
-		    ;; parent could have been updated since this branch was
-		    ;; created.
-		    ;; To try and detect this, we check the dirstate revids
-		    ;; to see if they match.
-		    (if (and (setq loc (with-temp-buffer
-					 (insert-file-contents file)
-					 (if (looking-at "file://\\(.*\\)")
-					     (match-string 1))))
-			     (equal rev (emacs-bzr-version-dirstate loc)))
-			(emacs-repository-get-version loc)
-		      ;; If parent does not match, the best we can do without
-		      ;; calling external commands is to use the dirstate rev.
-		      rev))
-		   (external
-		    (emacs-bzr-version-bzr dir))))))
-	((file-directory-p (expand-file-name ".git" dir))
+  (cond ((file-directory-p (expand-file-name ".git" dir))
 	 (message "Waiting for git...")
 	 (with-temp-buffer
 	   (let ((default-directory (file-name-as-directory dir)))

commit d48c98cda83d2c74981c61a0b9d9b379c46217f4
Author: Stefan Monnier 
Date:   Fri Jan 16 23:48:26 2015 -0500

    Don't enforce :protection in EIEIO objects any more
    
    * doc/misc/eieio.texi (Slot Options): Document :protection as unsupported.
    
    * lisp/emacs-lisp/eieio-core.el (eieio--scoped-class-stack): Remove var.
    (eieio--scoped-class): Remove function.
    (eieio--with-scoped-class): Remove macro.  Replace uses with `progn'.
    (eieio--slot-name-index): Don't check the :protection anymore.
    (eieio-initializing-object): Remove var.
    (eieio-set-defaults): Don't let-bind eieio-initializing-object.
    
    * lisp/emacs-lisp/eieio-generic.el (call-next-method): Don't bother checking
    eieio--scoped-class any more.
    
    * test/automated/eieio-test-methodinvoke.el (eieio-test-method-store):
    Use an explicit arg instead of eieio--scoped-class.  Update all callers.
    
    * test/automated/eieio-tests.el (eieio-test-25-slot-tests)
    (eieio-test-26-default-inheritance, eieio-test-28-slot-protection)
    (eieio-test-30-slot-attribute-override)
    (eieio-test-31-slot-attribute-override-class-allocation): Don't check
    that we enforce :protection since we don't any more.

diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog
index 5057fb9..2baa13c 100644
--- a/doc/misc/ChangeLog
+++ b/doc/misc/ChangeLog
@@ -1,3 +1,7 @@
+2015-01-17  Stefan Monnier  
+
+	* eieio.texi (Slot Options): Document :protection as unsupported.
+
 2015-01-01  Michael Albinus  
 
 	Sync with Tramp 2.2.11.
@@ -24,7 +28,7 @@
 
 2014-12-18  Eric Abrahamsen  
 
-	* gnus.texi (Gnus Registry Setup): Explain pruning changes. Mention
+	* gnus.texi (Gnus Registry Setup): Explain pruning changes.  Mention
 	gnus-registry-prune-factor. Explain sorting changes and
 	gnus-registry-default-sort-function. Correct file extension.
 
diff --git a/doc/misc/eieio.texi b/doc/misc/eieio.texi
index 954970d..3f42862 100644
--- a/doc/misc/eieio.texi
+++ b/doc/misc/eieio.texi
@@ -538,10 +538,15 @@ to quote the symbol.  If you wanted to run a function on load, you
 can output the code to do the construction of the value.
 
 @item :protection
+This is an old option that is not supported any more.
+
 When using a slot referencing function such as @code{slot-value}, and
 the value behind @var{slot} is private or protected, then the current
 scope of operation must be within a method of the calling object.
 
+This protection is not enforced by the code any more, so it's only useful
+as documentation.
+
 Valid values are:
 
 @table @code
diff --git a/etc/NEWS b/etc/NEWS
index cf93b65..be283bb 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -202,6 +202,7 @@ the old behavior -- *shell* buffer displays in current window -- use
 
 
 ** EIEIO
+*** The `:protection' slot option is not obeyed any more.
 *** The -list-p and -child-p functions are declared obsolete.
 *** The  variables are declared obsolete.
 *** The  variables are declared obsolete.
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 01de483..2cc878d 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,17 @@
 2015-01-17  Stefan Monnier  
 
+	* emacs-lisp/eieio-generic.el (call-next-method): Don't bother checking
+	eieio--scoped-class any more.
+
+	* emacs-lisp/eieio-core.el (eieio--scoped-class-stack): Remove var.
+	(eieio--scoped-class): Remove function.
+	(eieio--with-scoped-class): Remove macro.  Replace uses with `progn'.
+	(eieio--slot-name-index): Don't check the :protection anymore.
+	(eieio-initializing-object): Remove var.
+	(eieio-set-defaults): Don't let-bind eieio-initializing-object.
+
+2015-01-17  Stefan Monnier  
+
 	Improve handling of doc-strings and describe-function for cl-generic.
 
 	* help-mode.el (help-function-def): Add optional arg `type'.
diff --git a/lisp/emacs-lisp/eieio-core.el b/lisp/emacs-lisp/eieio-core.el
index e526a41..0747d97 100644
--- a/lisp/emacs-lisp/eieio-core.el
+++ b/lisp/emacs-lisp/eieio-core.el
@@ -62,9 +62,6 @@ default setting for optimization purposes.")
 (defvar eieio-optimize-primary-methods-flag t
   "Non-nil means to optimize the method dispatch on primary methods.")
 
-(defvar eieio-initializing-object  nil
-  "Set to non-nil while initializing an object.")
-
 (defvar eieio-backward-compatibility t
   "If nil, drop support for some behaviors of older versions of EIEIO.
 Currently under control of this var:
@@ -82,29 +79,6 @@ Currently under control of this var:
 ;; while it is being built itself.
 (defvar eieio-default-superclass nil)
 
-;;;
-;; Class currently in scope.
-;;
-;; When invoking methods, the running method needs to know which class
-;; is currently in scope.  Generally this is the class of the method
-;; being called, but 'call-next-method' needs to query this state,
-;; and change it to be then next super class up.
-;;
-;; Thus, the scoped class is a stack that needs to be managed.
-
-(defvar eieio--scoped-class-stack nil
-  "A stack of the classes currently in scope during method invocation.")
-
-(defun eieio--scoped-class ()
-  "Return the class object currently in scope, or nil."
-  (car-safe eieio--scoped-class-stack))
-
-(defmacro eieio--with-scoped-class (class &rest forms)
-  "Set CLASS as the currently scoped class while executing FORMS."
-  (declare (indent 1))
-  `(let ((eieio--scoped-class-stack (cons ,class eieio--scoped-class-stack)))
-     ,@forms))
-
 (progn
   ;; Arrange for field access not to bother checking if the access is indeed
   ;; made to an eieio--class object.
@@ -1029,27 +1003,26 @@ Fills in the default value in CLASS' in SLOT with VALUE."
   (setq class (eieio--class-object class))
   (eieio--check-type eieio--class-p class)
   (eieio--check-type symbolp slot)
-  (eieio--with-scoped-class class
-    (let* ((c (eieio--slot-name-index class nil slot)))
-      (if (not c)
-	  ;; It might be missing because it is a :class allocated slot.
-	  ;; Let's check that info out.
-	  (if (setq c (eieio--class-slot-name-index class slot))
-	      (progn
-		;; Oref that slot.
-		(eieio--validate-class-slot-value class c value slot)
-		(aset (eieio--class-class-allocation-values class) c
-		      value))
-	    (signal 'invalid-slot-name (list (eieio--class-symbol class) slot)))
-	(eieio--validate-slot-value class c value slot)
-	;; Set this into the storage for defaults.
-	(setcar (nthcdr (- c (eval-when-compile eieio--object-num-slots))
-                        (eieio--class-public-d class))
-		value)
-	;; Take the value, and put it into our cache object.
-	(eieio-oset (eieio--class-default-object-cache class)
-		    slot value)
-	))))
+  (let* ((c (eieio--slot-name-index class nil slot)))
+    (if (not c)
+        ;; It might be missing because it is a :class allocated slot.
+        ;; Let's check that info out.
+        (if (setq c (eieio--class-slot-name-index class slot))
+            (progn
+              ;; Oref that slot.
+              (eieio--validate-class-slot-value class c value slot)
+              (aset (eieio--class-class-allocation-values class) c
+                    value))
+          (signal 'invalid-slot-name (list (eieio--class-symbol class) slot)))
+      (eieio--validate-slot-value class c value slot)
+      ;; Set this into the storage for defaults.
+      (setcar (nthcdr (- c (eval-when-compile eieio--object-num-slots))
+                      (eieio--class-public-d class))
+              value)
+      ;; Take the value, and put it into our cache object.
+      (eieio-oset (eieio--class-default-object-cache class)
+                  slot value)
+      )))
 
 
 ;;; EIEIO internal search functions
@@ -1080,27 +1053,7 @@ reverse-lookup that name, and recurse with the associated slot value."
   (let* ((fsym (gethash slot (eieio--class-symbol-hashtable class)))
 	 (fsi (car fsym)))
     (if (integerp fsi)
-	(cond
-	 ((not (cdr fsym))
-	  (+ (eval-when-compile eieio--object-num-slots) fsi))
-	 ((and (eq (cdr fsym) 'protected)
-	       (eieio--scoped-class)
-	       (or (child-of-class-p class (eieio--scoped-class))
-		   (and (eieio-object-p obj)
-                        ;; AFAICT, for all callers, if `obj' is not a class,
-                        ;; then its class is `class'.
-			;;(child-of-class-p class (eieio--object-class-object obj))
-                        (progn
-                          (cl-assert (eq class (eieio--object-class-object obj)))
-                          t))))
-	  (+ (eval-when-compile eieio--object-num-slots) fsi))
-	 ((and (eq (cdr fsym) 'private)
-	       (or (and (eieio--scoped-class)
-			(eieio--slot-originating-class-p
-                         (eieio--scoped-class) slot))
-		   eieio-initializing-object))
-	  (+ (eval-when-compile eieio--object-num-slots) fsi))
-	 (t nil))
+        (+ (eval-when-compile eieio--object-num-slots) fsi)
       (let ((fn (eieio--initarg-to-attribute class slot)))
 	(if fn (eieio--slot-name-index class obj fn) nil)))))
 
@@ -1128,14 +1081,12 @@ reverse-lookup that name, and recurse with the associated slot value."
 If SET-ALL is non-nil, then when a default is nil, that value is
 reset.  If SET-ALL is nil, the slots are only reset if the default is
 not nil."
-  (eieio--with-scoped-class (eieio--object-class-object obj)
-    (let ((eieio-initializing-object t)
-	  (pub (eieio--class-public-a (eieio--object-class-object obj))))
-      (while pub
-	(let ((df (eieio-oref-default obj (car pub))))
-	  (if (or df set-all)
-	      (eieio-oset obj (car pub) df)))
-	(setq pub (cdr pub))))))
+  (let ((pub (eieio--class-public-a (eieio--object-class-object obj))))
+    (while pub
+      (let ((df (eieio-oref-default obj (car pub))))
+        (if (or df set-all)
+            (eieio-oset obj (car pub) df)))
+      (setq pub (cdr pub)))))
 
 (defun eieio--initarg-to-attribute (class initarg)
   "For CLASS, convert INITARG to the actual attribute name.
diff --git a/lisp/emacs-lisp/eieio-generic.el b/lisp/emacs-lisp/eieio-generic.el
index 4045c03..27a5849 100644
--- a/lisp/emacs-lisp/eieio-generic.el
+++ b/lisp/emacs-lisp/eieio-generic.el
@@ -174,8 +174,7 @@ IMPL is the symbol holding the method implementation."
               (eieio--generic-call-key eieio--method-primary)
               (eieio--generic-call-arglst local-args)
               )
-          (eieio--with-scoped-class (eieio--class-v class)
-            (apply impl local-args)))))))
+          (apply impl local-args))))))
 
 (defun eieio-unbind-method-implementations (method)
   "Make the generic method METHOD have no implementations.
@@ -287,11 +286,9 @@ This should only be called from a generic function."
       )
     ;; Now create a list in reverse order of all the calls we have
     ;; make in order to successfully do this right.  Rules:
-    ;; 1) Only call generics if scoped-class is not defined
-    ;;    This prevents multiple calls in the case of recursion
-    ;; 2) Only call static if this is a static method.
-    ;; 3) Only call specifics if the definition allows for them.
-    ;; 4) Call in order based on :before, :primary, and :after
+    ;; 1) Only call static if this is a static method.
+    ;; 2) Only call specifics if the definition allows for them.
+    ;; 3) Call in order based on :before, :primary, and :after
     (when (eieio-object-p firstarg)
       ;; Non-static calls do all this stuff.
 
@@ -357,22 +354,21 @@ This should only be called from a generic function."
     (let ((rval nil) (lastval nil) (found nil))
       (while lambdas
 	(if (car lambdas)
-	    (eieio--with-scoped-class (cdr (car lambdas))
-	      (let* ((eieio--generic-call-key (car keys))
-		     (has-return-val
-		      (or (= eieio--generic-call-key eieio--method-primary)
-			  (= eieio--generic-call-key eieio--method-static)))
-		     (eieio--generic-call-next-method-list
-		      ;; Use the cdr, as the first element is the fcn
-		      ;; we are calling right now.
-		      (when has-return-val (cdr primarymethodlist)))
-		     )
-		(setq found t)
-		;;(setq rval (apply (car (car lambdas)) newargs))
-		(setq lastval (apply (car (car lambdas)) newargs))
-		(when has-return-val
-		  (setq rval lastval))
-		)))
+            (let* ((eieio--generic-call-key (car keys))
+                   (has-return-val
+                    (or (= eieio--generic-call-key eieio--method-primary)
+                        (= eieio--generic-call-key eieio--method-static)))
+                   (eieio--generic-call-next-method-list
+                    ;; Use the cdr, as the first element is the fcn
+                    ;; we are calling right now.
+                    (when has-return-val (cdr primarymethodlist)))
+                   )
+              (setq found t)
+              ;;(setq rval (apply (car (car lambdas)) newargs))
+              (setq lastval (apply (car (car lambdas)) newargs))
+              (when has-return-val
+                (setq rval lastval))
+              ))
 	(setq lambdas (cdr lambdas)
 	      keys (cdr keys)))
       (if (not found)
@@ -425,33 +421,32 @@ for this common case to improve performance."
 
     ;; Now loop through all occurrences forms which we must execute
     ;; (which are happily sorted now) and execute them all!
-    (eieio--with-scoped-class (cdr lambdas)
-      (let* ((rval nil) (lastval nil)
-	     (eieio--generic-call-key eieio--method-primary)
-	     ;; Use the cdr, as the first element is the fcn
-	     ;; we are calling right now.
-	     (eieio--generic-call-next-method-list (cdr primarymethodlist))
-	     )
+    (let* ((rval nil) (lastval nil)
+           (eieio--generic-call-key eieio--method-primary)
+           ;; Use the cdr, as the first element is the fcn
+           ;; we are calling right now.
+           (eieio--generic-call-next-method-list (cdr primarymethodlist))
+           )
 
-	(if (or (not lambdas) (not (car lambdas)))
+      (if (or (not lambdas) (not (car lambdas)))
 
-	    ;; No methods found for this impl...
-	    (if (eieio-object-p (car args))
-		(setq rval (apply #'no-applicable-method
-                                  (car args) method args))
-	      (signal
-	       'no-method-definition
-	       (list method args)))
+          ;; No methods found for this impl...
+          (if (eieio-object-p (car args))
+              (setq rval (apply #'no-applicable-method
+                                (car args) method args))
+            (signal
+             'no-method-definition
+             (list method args)))
 
-	  ;; Do the regular implementation here.
+        ;; Do the regular implementation here.
 
-	  (run-hook-with-args 'eieio-pre-method-execution-functions
-			      lambdas)
+        (run-hook-with-args 'eieio-pre-method-execution-functions
+                            lambdas)
 
-	  (setq lastval (apply (car lambdas) newargs))
-	  (setq rval lastval))
+        (setq lastval (apply (car lambdas) newargs))
+        (setq rval lastval))
 
-	rval))))
+      rval)))
 
 (defun eieio--mt-method-list (method key class)
   "Return an alist list of methods lambdas.
@@ -721,8 +716,6 @@ If REPLACEMENT-ARGS is non-nil, then use them instead of
 arguments passed in at the top level.
 
 Use `next-method-p' to find out if there is a next method to call."
-  (if (not (eieio--scoped-class))
-      (error "`call-next-method' not called within a class specific method"))
   (if (and (/= eieio--generic-call-key eieio--method-primary)
 	   (/= eieio--generic-call-key eieio--method-static))
       (error "Cannot `call-next-method' except in :primary or :static methods")
@@ -737,8 +730,7 @@ Use `next-method-p' to find out if there is a next method to call."
 	     (eieio--generic-call-arglst newargs)
 	     (fcn (car next))
 	     )
-	(eieio--with-scoped-class (cdr next)
-	  (apply fcn newargs)) ))))
+        (apply fcn newargs)) )))
 
 (defgeneric no-applicable-method (object method &rest args)
   "Called if there are no implementations for OBJECT in METHOD.")
diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el
index 419a78b..392316c 100644
--- a/lisp/emacs-lisp/eieio.el
+++ b/lisp/emacs-lisp/eieio.el
@@ -76,8 +76,6 @@ being the slots residing in that class definition.  Supported tags are:
               - A string documenting use of this slot.
 
 The following are extensions on CLOS:
-  :protection - Specify protection for this slot.
-                Defaults to `:public'.  Also use `:protected', or `:private'.
   :custom     - When customizing an object, the custom :type.  Public only.
   :label      - A text string label used for a slot when customizing.
   :group      - Name of a customization group this slot belongs in.
@@ -672,14 +670,13 @@ Called from the constructor routine.")
 (defmethod shared-initialize ((obj eieio-default-superclass) slots)
   "Set slots of OBJ with SLOTS which is a list of name/value pairs.
 Called from the constructor routine."
-  (eieio--with-scoped-class (eieio--object-class-object obj)
-    (while slots
-      (let ((rn (eieio--initarg-to-attribute (eieio--object-class-object obj)
-                                             (car slots))))
-	(if (not rn)
-	    (slot-missing obj (car slots) 'oset (car (cdr slots)))
-	  (eieio-oset obj rn (car (cdr slots)))))
-      (setq slots (cdr (cdr slots))))))
+  (while slots
+    (let ((rn (eieio--initarg-to-attribute (eieio--object-class-object obj)
+                                           (car slots))))
+      (if (not rn)
+          (slot-missing obj (car slots) 'oset (car (cdr slots)))
+        (eieio-oset obj rn (car (cdr slots)))))
+    (setq slots (cdr (cdr slots)))))
 
 (defgeneric initialize-instance (this &optional slots)
   "Construct the new object THIS based on SLOTS.")
diff --git a/test/ChangeLog b/test/ChangeLog
index c40407f..2f5ff05 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,7 +1,18 @@
 2015-01-17  Stefan Monnier  
 
-	* automated/eieio-test-methodinvoke.el (eieio-test-cl-generic-1): Reset
-	eieio-test--1.
+	* automated/eieio-tests.el (eieio-test-25-slot-tests)
+	(eieio-test-26-default-inheritance, eieio-test-28-slot-protection)
+	(eieio-test-30-slot-attribute-override)
+	(eieio-test-31-slot-attribute-override-class-allocation): Don't check
+	that we enforce :protection since we don't any more.
+
+	* automated/eieio-test-methodinvoke.el (eieio-test-method-store):
+	Use an explicit arg instead of eieio--scoped-class.  Update all callers.
+
+2015-01-17  Stefan Monnier  
+
+	* automated/eieio-test-methodinvoke.el (eieio-test-cl-generic-1):
+	Reset eieio-test--1.
 
 	* automated/cl-generic-tests.el (cl-generic-test-8-after/before):
 	Rename from cl-generic-test-7-after/before.
diff --git a/test/automated/eieio-test-methodinvoke.el b/test/automated/eieio-test-methodinvoke.el
index 1c3d9c3..b6d60b8 100644
--- a/test/automated/eieio-test-methodinvoke.el
+++ b/test/automated/eieio-test-methodinvoke.el
@@ -58,11 +58,9 @@
 (defvar eieio-test-method-order-list nil
   "List of symbols stored during method invocation.")
 
-(defun eieio-test-method-store (keysym)
+(defun eieio-test-method-store (&rest args)
   "Store current invocation class symbol in the invocation order list."
-  ;; FIXME: Don't depend on `eieio--scoped-class'!
-  (let* ((c (list keysym (eieio--class-symbol (eieio--scoped-class)))))
-    (push c eieio-test-method-order-list)))
+  (push args eieio-test-method-order-list))
 
 (defun eieio-test-match (rightanswer)
   "Do a test match."
@@ -86,36 +84,36 @@
 (defclass eitest-B (eitest-B-base1 eitest-B-base2) ())
 
 (defmethod eitest-F :BEFORE ((p eitest-B-base1))
-  (eieio-test-method-store :BEFORE))
+  (eieio-test-method-store :BEFORE 'eitest-B-base1))
 
 (defmethod eitest-F :BEFORE ((p eitest-B-base2))
-  (eieio-test-method-store :BEFORE))
+  (eieio-test-method-store :BEFORE 'eitest-B-base2))
 
 (defmethod eitest-F :BEFORE ((p eitest-B))
-  (eieio-test-method-store :BEFORE))
+  (eieio-test-method-store :BEFORE 'eitest-B))
 
 (defmethod eitest-F ((p eitest-B))
-  (eieio-test-method-store :PRIMARY)
+  (eieio-test-method-store :PRIMARY 'eitest-B)
   (call-next-method))
 
 (defmethod eitest-F ((p eitest-B-base1))
-  (eieio-test-method-store :PRIMARY)
+  (eieio-test-method-store :PRIMARY 'eitest-B-base1)
   (call-next-method))
 
 (defmethod eitest-F ((p eitest-B-base2))
-  (eieio-test-method-store :PRIMARY)
+  (eieio-test-method-store :PRIMARY 'eitest-B-base2)
   (when (next-method-p)
     (call-next-method))
   )
 
 (defmethod eitest-F :AFTER ((p eitest-B-base1))
-  (eieio-test-method-store :AFTER))
+  (eieio-test-method-store :AFTER 'eitest-B-base1))
 
 (defmethod eitest-F :AFTER ((p eitest-B-base2))
-  (eieio-test-method-store :AFTER))
+  (eieio-test-method-store :AFTER 'eitest-B-base2))
 
 (defmethod eitest-F :AFTER ((p eitest-B))
-  (eieio-test-method-store :AFTER))
+  (eieio-test-method-store :AFTER 'eitest-B))
 
 (ert-deftest eieio-test-method-order-list-3 ()
   (let ((eieio-test-method-order-list nil)
@@ -150,15 +148,15 @@
 ;;; Return value from :PRIMARY
 ;;
 (defmethod eitest-I :BEFORE ((a eitest-A))
-  (eieio-test-method-store :BEFORE)
+  (eieio-test-method-store :BEFORE 'eitest-A)
   ":before")
 
 (defmethod eitest-I :PRIMARY ((a eitest-A))
-  (eieio-test-method-store :PRIMARY)
+  (eieio-test-method-store :PRIMARY 'eitest-A)
   ":primary")
 
 (defmethod eitest-I :AFTER ((a eitest-A))
-  (eieio-test-method-store :AFTER)
+  (eieio-test-method-store :AFTER 'eitest-A)
   ":after")
 
 (ert-deftest eieio-test-method-order-list-5 ()
@@ -177,17 +175,17 @@
 
 ;; Just use the obsolete name once, to make sure it also works.
 (defmethod constructor :STATIC ((p C-base1) &rest args)
-  (eieio-test-method-store :STATIC)
+  (eieio-test-method-store :STATIC 'C-base1)
   (if (next-method-p) (call-next-method))
   )
 
 (defmethod eieio-constructor :STATIC ((p C-base2) &rest args)
-  (eieio-test-method-store :STATIC)
+  (eieio-test-method-store :STATIC 'C-base2)
   (if (next-method-p) (call-next-method))
   )
 
 (defmethod eieio-constructor :STATIC ((p C) &rest args)
-  (eieio-test-method-store :STATIC)
+  (eieio-test-method-store :STATIC 'C)
   (call-next-method)
   )
 
@@ -214,24 +212,24 @@
 
 (defmethod eitest-F ((p D))
   "D"
-  (eieio-test-method-store :PRIMARY)
+  (eieio-test-method-store :PRIMARY 'D)
   (call-next-method))
 
 (defmethod eitest-F ((p D-base0))
   "D-base0"
-  (eieio-test-method-store :PRIMARY)
+  (eieio-test-method-store :PRIMARY 'D-base0)
   ;; This should have no next
   ;; (when (next-method-p) (call-next-method))
   )
 
 (defmethod eitest-F ((p D-base1))
   "D-base1"
-  (eieio-test-method-store :PRIMARY)
+  (eieio-test-method-store :PRIMARY 'D-base1)
   (call-next-method))
 
 (defmethod eitest-F ((p D-base2))
   "D-base2"
-  (eieio-test-method-store :PRIMARY)
+  (eieio-test-method-store :PRIMARY 'D-base2)
   (when (next-method-p)
     (call-next-method))
   )
@@ -256,21 +254,21 @@
 (defclass E (E-base1 E-base2) () :method-invocation-order :breadth-first)
 
 (defmethod eitest-F ((p E))
-  (eieio-test-method-store :PRIMARY)
+  (eieio-test-method-store :PRIMARY 'E)
   (call-next-method))
 
 (defmethod eitest-F ((p E-base0))
-  (eieio-test-method-store :PRIMARY)
+  (eieio-test-method-store :PRIMARY 'E-base0)
   ;; This should have no next
   ;; (when (next-method-p) (call-next-method))
   )
 
 (defmethod eitest-F ((p E-base1))
-  (eieio-test-method-store :PRIMARY)
+  (eieio-test-method-store :PRIMARY 'E-base1)
   (call-next-method))
 
 (defmethod eitest-F ((p E-base2))
-  (eieio-test-method-store :PRIMARY)
+  (eieio-test-method-store :PRIMARY 'E-base2)
   (when (next-method-p)
     (call-next-method))
   )
diff --git a/test/automated/eieio-tests.el b/test/automated/eieio-tests.el
index 0b1ff1f..3a32da6 100644
--- a/test/automated/eieio-tests.el
+++ b/test/automated/eieio-tests.el
@@ -563,7 +563,7 @@ METHOD is the method that was attempting to be called."
   (should (eq (oref eitest-t1 slot-1) 'moose))
   (should (eq (oref eitest-t1 :moose) 'moose))
   ;; Don't pass reference of private slot
-  (should-error (oref eitest-t1 slot-2) :type 'invalid-slot-name)
+  ;;PRIVATE (should-error (oref eitest-t1 slot-2) :type 'invalid-slot-name)
   ;; Check private slot accessor
   (should (string= (get-slot-2 eitest-t1) "penguin"))
   ;; Pass string instead of symbol
@@ -583,7 +583,7 @@ METHOD is the method that was attempting to be called."
   (should (eq (oref eitest-t2 slot-1) 'moose))
   (should (eq (oref eitest-t2 :moose) 'moose))
   (should (string= (get-slot-2 eitest-t2) "linux"))
-  (should-error (oref eitest-t2 slot-2) :type 'invalid-slot-name)
+  ;;PRIVATE (should-error (oref eitest-t2 slot-2) :type 'invalid-slot-name)
   (should (string= (get-slot-2 eitest-t2) "linux"))
   (should-error (class-subc :moose "not a symbol") :type 'invalid-slot-type))
 
@@ -654,20 +654,23 @@ Do not override for `prot-2'."
   ;; Access public slots
   (oref eitest-p1 slot-1)
   (oref eitest-p2 slot-1)
-  ;; Accessing protected slot out of context must fail
-  (should-error (oref eitest-p1 slot-2) :type 'invalid-slot-name)
+  ;; Accessing protected slot out of context used to fail, but we dropped this
+  ;; feature, since it was underused and noone noticed that the check was
+  ;; incorrect (much too loose).
+  ;;PROTECTED (should-error (oref eitest-p1 slot-2) :type 'invalid-slot-name)
   ;; Access protected slot in method
   (prot1-slot-2 eitest-p1)
   ;; Protected slot in subclass method
   (prot1-slot-2 eitest-p2)
   ;; Protected slot from parent class method
   (prot0-slot-2 eitest-p1)
-  ;; Accessing private slot out of context must fail
-  (should-error (oref eitest-p1 slot-3) :type 'invalid-slot-name)
+  ;; Accessing private slot out of context used to fail, but we dropped this
+  ;; feature, since it was not used.
+  ;;PRIVATE (should-error (oref eitest-p1 slot-3) :type 'invalid-slot-name)
   ;; Access private slot in method
   (prot1-slot-3 eitest-p1)
   ;; Access private slot in subclass method must fail
-  (should-error (prot1-slot-3 eitest-p2) :type 'invalid-slot-name)
+  ;;PRIVATE (should-error (prot1-slot-3 eitest-p2) :type 'invalid-slot-name)
   ;; Access private slot by same class
   (prot1-slot-3-only eitest-p1)
   ;; Access private slot by subclass in sameclass method
@@ -729,12 +732,13 @@ Subclasses to override slot attributes.")
 
 (ert-deftest eieio-test-30-slot-attribute-override ()
   ;; Subclass should not override :protection slot attribute
-  (should-error
-	(eval
-	 '(defclass slotattr-fail (slotattr-base)
-	    ((protection :protection :public)
-	     )
-	    "This class should throw an error.")))
+  ;;PROTECTION is gone.
+  ;;(should-error
+  ;;       (eval
+  ;;        '(defclass slotattr-fail (slotattr-base)
+  ;;           ((protection :protection :public)
+  ;;            )
+  ;;           "This class should throw an error.")))
 
   ;; Subclass should not override :type slot attribute
   (should-error
@@ -782,12 +786,13 @@ Subclasses to override slot attributes.")
 
 (ert-deftest eieio-test-31-slot-attribute-override-class-allocation ()
   ;; Same as test-30, but with class allocation
-  (should-error
-      (eval
-       '(defclass slotattr-fail (slotattr-class-base)
-	  ((protection :protection :public)
-	   )
-	  "This class should throw an error.")))
+  ;;PROTECTION is gone.
+  ;;(should-error
+  ;;     (eval
+  ;;      '(defclass slotattr-fail (slotattr-class-base)
+  ;;         ((protection :protection :public)
+  ;;          )
+  ;;         "This class should throw an error.")))
   (should-error
       (eval
        '(defclass slotattr-fail (slotattr-class-base)

commit 24b7f77581c7eefe484db6cbbd661c04460c66aa
Author: Stefan Monnier 
Date:   Fri Jan 16 22:52:15 2015 -0500

    Improve handling of doc-strings and describe-function for cl-generic
    
    * lisp/help-fns.el (find-lisp-object-file-name): Accept any `type' as long
    as it's a symbol.
    (help-fns-short-filename): New function.
    (describe-function-1): Use it.  Use autoload-do-load.
    
    * lisp/help-mode.el (help-function-def): Add optional arg `type'.
    
    * lisp/emacs-lisp/cl-generic.el (cl-generic-ensure-function): It's OK to
    override an autoload.
    (cl-generic-current-method-specializers): Replace dyn-bind variable
    with a lexically-scoped macro.
    (cl--generic-lambda): Update accordingly.
    (cl-generic-define-method): Record manually in the load-history with
    type `cl-defmethod'.
    (cl--generic-get-dispatcher): Minor optimization.
    (cl--generic-search-method): New function.
    (find-function-regexp-alist): Add entry for `cl-defmethod' type.
    (cl--generic-search-method): Add hyperlinks for methods.  Merge the
    specializers and the function's arguments.
    
    * lisp/emacs-lisp/eieio-core.el (eieio--defalias): Move to eieio-generic.el.
    (eieio-defclass-autoload): Don't record the superclasses any more.
    (eieio-defclass-internal): Reuse the old class object if it was just an
    autoload stub.
    (eieio--class-precedence-list): Load the class if it's autoloaded.
    
    * lisp/emacs-lisp/eieio-generic.el (eieio--defalias): Move from eieio-core.
    (eieio--defgeneric-init-form): Don't throw away a previous docstring.
    (eieio--method-optimize-primary): Don't mess with the docstring.
    (defgeneric): Keep the `args' in the docstring.
    (defmethod): Don't use the method's docstring for the generic
    function's docstring.
    
    * lisp/emacs-lisp/find-func.el: Use lexical-binding.
    (find-function-regexp): Don't rule out `defgeneric'.
    (find-function-regexp-alist): Document new possibility of including
    a function instead of a regexp.
    (find-function-search-for-symbol): Implement that new possibility.
    (find-function-library): Don't assume that `function' is a symbol.
    (find-function-do-it): Remove unused var `orig-buf'.
    
    * test/automated/cl-generic-tests.el (cl-generic-test-8-after/before):
    Rename from cl-generic-test-7-after/before.
    (cl--generic-test-advice): New function.
    (cl-generic-test-9-advice): New test.
    
    * test/automated/eieio-test-methodinvoke.el (eieio-test-cl-generic-1): Reset
    eieio-test--1.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index f78714b..01de483 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,48 @@
+2015-01-17  Stefan Monnier  
+
+	Improve handling of doc-strings and describe-function for cl-generic.
+
+	* help-mode.el (help-function-def): Add optional arg `type'.
+
+	* help-fns.el (find-lisp-object-file-name): Accept any `type' as long
+	as it's a symbol.
+	(help-fns-short-filename): New function.
+	(describe-function-1): Use it.  Use autoload-do-load.
+
+	* emacs-lisp/find-func.el: Use lexical-binding.
+	(find-function-regexp): Don't rule out `defgeneric'.
+	(find-function-regexp-alist): Document new possibility of including
+	a function instead of a regexp.
+	(find-function-search-for-symbol): Implement that new possibility.
+	(find-function-library): Don't assume that `function' is a symbol.
+	(find-function-do-it): Remove unused var `orig-buf'.
+
+	* emacs-lisp/eieio-generic.el (eieio--defalias): Move from eieio-core.
+	(eieio--defgeneric-init-form): Don't throw away a previous docstring.
+	(eieio--method-optimize-primary): Don't mess with the docstring.
+	(defgeneric): Keep the `args' in the docstring.
+	(defmethod): Don't use the method's docstring for the generic
+	function's docstring.
+
+	* emacs-lisp/eieio-core.el (eieio--defalias): Move to eieio-generic.el.
+	(eieio-defclass-autoload): Don't record the superclasses any more.
+	(eieio-defclass-internal): Reuse the old class object if it was just an
+	autoload stub.
+	(eieio--class-precedence-list): Load the class if it's autoloaded.
+
+	* emacs-lisp/cl-generic.el (cl-generic-ensure-function): It's OK to
+	override an autoload.
+	(cl-generic-current-method-specializers): Replace dyn-bind variable
+	with a lexically-scoped macro.
+	(cl--generic-lambda): Update accordingly.
+	(cl-generic-define-method): Record manually in the load-history with
+	type `cl-defmethod'.
+	(cl--generic-get-dispatcher): Minor optimization.
+	(cl--generic-search-method): New function.
+	(find-function-regexp-alist): Add entry for `cl-defmethod' type.
+	(cl--generic-search-method): Add hyperlinks for methods.  Merge the
+	specializers and the function's arguments.
+
 2015-01-16  Artur Malabarba  
 
 	* emacs-lisp/package.el (package--read-pkg-desc): New
diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el
index 21688be..ae0f129 100644
--- a/lisp/emacs-lisp/cl-generic.el
+++ b/lisp/emacs-lisp/cl-generic.el
@@ -107,6 +107,7 @@ They should be sorted from most specific to least specific.")
                 (symbolp (symbol-function name)))
       (setq name (symbol-function name)))
     (unless (or (not (fboundp name))
+                (autoloadp (symbol-function name))
                 (and (functionp name) generic))
       (error "%s is already defined as something else than a generic function"
              origname))
@@ -153,7 +154,7 @@ via (:documentation DOCSTRING)."
             code))
        (defalias ',name
          (cl-generic-define ',name ',args ',options-and-methods)
-         ,doc))))
+         ,(help-add-fundoc-usage doc args)))))
 
 (defun cl--generic-mandatory-args (args)
   (let ((res ()))
@@ -176,15 +177,10 @@ via (:documentation DOCSTRING)."
     (setf (cl--generic-method-table generic) nil)
     (cl--generic-make-function generic)))
 
-(defvar cl-generic-current-method-specializers nil
-  ;; This is let-bound during macro-expansion of method bodies, so that those
-  ;; bodies can be optimized knowing that the specializers have matched.
-  ;; FIXME: This presumes the formal arguments aren't modified via `setq' and
-  ;; aren't shadowed either ;-(
-  ;; FIXME: This might leak outside the scope of the method if, during
-  ;; macroexpansion of the method, something causes some other macroexpansion
-  ;; (e.g. an autoload).
-  "List of (VAR . TYPE) where TYPE is var's specializer.")
+(defmacro cl-generic-current-method-specializers ()
+  "List of (VAR . TYPE) where TYPE is var's specializer.
+This macro can only be used within the lexical scope of a cl-generic method."
+  (error "cl-generic-current-method-specializers used outside of a method"))
 
 (eval-and-compile         ;Needed while compiling the cl-defmethod calls below!
   (defun cl--generic-fgrep (vars sexp)    ;Copied from pcase.el.
@@ -199,27 +195,29 @@ via (:documentation DOCSTRING)."
   (defun cl--generic-lambda (args body with-cnm)
     "Make the lambda expression for a method with ARGS and BODY."
     (let ((plain-args ())
-          (cl-generic-current-method-specializers nil)
+          (specializers nil)
           (doc-string (if (stringp (car-safe body)) (pop body)))
           (mandatory t))
       (dolist (arg args)
         (push (pcase arg
                 ((or '&optional '&rest '&key) (setq mandatory nil) arg)
                 ((and `(,name . ,type) (guard mandatory))
-                 (push (cons name (car type))
-                       cl-generic-current-method-specializers)
+                 (push (cons name (car type)) specializers)
                  name)
                 (_ arg))
               plain-args))
       (setq plain-args (nreverse plain-args))
       (let ((fun `(cl-function (lambda ,plain-args
                                  ,@(if doc-string (list doc-string))
-                                 ,@body))))
+                                 ,@body)))
+            (macroenv (cons `(cl-generic-current-method-specializers
+                              . ,(lambda () specializers))
+                            macroexpand-all-environment)))
         (if (not with-cnm)
-            (cons nil fun)
+            (cons nil (macroexpand-all fun macroenv))
           ;; First macroexpand away the cl-function stuff (e.g. &key and
           ;; destructuring args, `declare' and whatnot).
-          (pcase (macroexpand fun macroexpand-all-environment)
+          (pcase (macroexpand fun macroenv)
             (`#'(lambda ,args . ,body)
              (require 'cl-lib)          ;Needed to expand `cl-flet'.
              (let* ((doc-string (and doc-string (stringp (car body))
@@ -228,7 +226,7 @@ via (:documentation DOCSTRING)."
                     (nbody (macroexpand-all
                             `(cl-flet ((cl-call-next-method ,cnm))
                                ,@body)
-                            macroexpand-all-environment))
+                            macroenv))
                     ;; FIXME: Rather than `grep' after the fact, the
                     ;; macroexpansion should directly set some flag when cnm
                     ;; is used.
@@ -309,8 +307,13 @@ which case this method will be invoked when the argument is `eql' to VAL.
       (setf (cl--generic-method-table generic)
             (cons `(,key ,uses-cnm . ,function) mt)))
     ;; For aliases, cl--generic-name gives us the actual name.
-    (defalias (cl--generic-name generic)
-      (cl--generic-make-function generic))))
+    (let ((gfun (cl--generic-make-function generic))
+          ;; Prevent `defalias' from recording this as the definition site of
+          ;; the generic function.
+          current-load-list)
+      (defalias (cl--generic-name generic) gfun))
+    (cl-pushnew `(cl-defmethod . (,(cl--generic-name generic) . ,specializers))
+                current-load-list :test #'equal)))
 
 (defmacro cl--generic-with-memoization (place &rest code)
   (declare (indent 1) (debug t))
@@ -327,6 +330,14 @@ which case this method will be invoked when the argument is `eql' to VAL.
   (cl--generic-with-memoization
       (gethash (cons dispatch-arg tagcodes) cl--generic-dispatchers)
     (let ((lexical-binding t)
+          (tag-exp `(or ,@(mapcar #'cdr
+				  ;; Minor optimization: since this tag-exp is
+				  ;; only used to lookup the method-cache, it
+				  ;; doesn't matter if the default value is some
+				  ;; constant or nil.
+				  (if (macroexp-const-p (car (last tagcodes)))
+				      (butlast tagcodes)
+				    tagcodes))))
           (extraargs ()))
       (dotimes (_ dispatch-arg)
         (push (make-symbol "arg") extraargs))
@@ -335,7 +346,7 @@ which case this method will be invoked when the argument is `eql' to VAL.
           (let ((method-cache (make-hash-table :test #'eql)))
             (lambda (,@extraargs arg &rest args)
               (apply (cl--generic-with-memoization
-                         (gethash (or ,@(mapcar #'cdr tagcodes)) method-cache)
+                         (gethash ,tag-exp method-cache)
                        (cl--generic-cache-miss
                         generic ',dispatch-arg dispatches-left
                         (list ,@(mapcar #'cdr tagcodes))))
@@ -456,31 +467,63 @@ Can only be used from within the lexical body of a primary or around method."
 
 ;;; Add support for describe-function
 
-(add-hook 'help-fns-describe-function-functions 'cl--generic-describe)
+(defun cl--generic-search-method (met-name)
+  (let ((base-re (concat "(\\(?:cl-\\)?defmethod[ \t]+"
+                         (regexp-quote (format "%s\\_>" (car met-name))))))
+    (or
+     (re-search-forward
+      (concat base-re "[^&\"\n]*"
+              (mapconcat (lambda (specializer)
+                           (regexp-quote
+                            (format "%S" (if (consp specializer)
+                                             (nth 1 specializer) specializer))))
+                         (remq t (cdr met-name))
+                         "[ \t\n]*)[^&\"\n]*"))
+      nil t)
+     (re-search-forward base-re nil t))))
+
+
+(with-eval-after-load 'find-func
+  (defvar find-function-regexp-alist)
+  (add-to-list 'find-function-regexp-alist
+               `(cl-defmethod . ,#'cl--generic-search-method)))
+
+(add-hook 'help-fns-describe-function-functions #'cl--generic-describe)
 (defun cl--generic-describe (function)
-  ;; FIXME: Fix up the main "in `'" hyperlink, and add such hyperlinks
-  ;; for each method.
   (let ((generic (if (symbolp function) (cl--generic function))))
     (when generic
+      (require 'help-mode)              ;Needed for `help-function-def' button!
       (save-excursion
         (insert "\n\nThis is a generic function.\n\n")
         (insert (propertize "Implementations:\n\n" 'face 'bold))
         ;; Loop over fanciful generics
-        (pcase-dolist (`((,type . ,qualifier) . ,method)
+        (pcase-dolist (`((,specializers . ,qualifier) ,uses-cnm . ,method)
                        (cl--generic-method-table generic))
-          (insert "`")
-          (if (symbolp type)
-              ;; FIXME: Add support for cl-structs in help-variable.
-              (help-insert-xref-button (symbol-name type)
-				       'help-variable type)
-            (insert (format "%S" type)))
-          (insert (format "' %S %S\n"
-                          (car qualifier)
-                          (let ((args (help-function-arglist method)))
-                            ;; Drop cl--generic-next arg if present.
-                            (if (memq (car qualifier) '(:after :before))
-                                args (cdr args)))))
-          (insert (or (documentation method) "Undocumented") "\n\n"))))))
+          (let* ((args (help-function-arglist method 'names))
+                 (docstring (documentation method))
+                 (doconly (if docstring
+                              (let ((split (help-split-fundoc docstring nil)))
+                                (if split (cdr split) docstring))))
+                 (combined-args ()))
+            (if uses-cnm (setq args (cdr args)))
+            (dolist (specializer specializers)
+              (let ((arg (if (eq '&rest (car args))
+                             (intern (format "arg%d" (length combined-args)))
+                           (pop args))))
+                (push (if (eq specializer t) arg (list arg specializer))
+                      combined-args)))
+            (setq combined-args (append (nreverse combined-args) args))
+            ;; FIXME: Add hyperlinks for the types as well.
+            (insert (format "%S %S" qualifier combined-args))
+            (let* ((met-name (cons function specializers))
+                   (file (find-lisp-object-file-name met-name 'cl-defmethod)))
+              (when file
+                (insert " in `")
+                (help-insert-xref-button (help-fns-short-filename file)
+                                         'help-function-def met-name file
+                                         'cl-defmethod)
+                (insert "'.\n")))
+            (insert "\n" (or doconly "Undocumented") "\n\n")))))))
 
 ;;; Support for (eql ) specializers.
 
diff --git a/lisp/emacs-lisp/eieio-core.el b/lisp/emacs-lisp/eieio-core.el
index bfa922b..e526a41 100644
--- a/lisp/emacs-lisp/eieio-core.el
+++ b/lisp/emacs-lisp/eieio-core.el
@@ -34,19 +34,6 @@
 (require 'cl-lib)
 (require 'pcase)
 
-(put 'eieio--defalias 'byte-hunk-handler
-     #'byte-compile-file-form-defalias) ;;(get 'defalias 'byte-hunk-handler)
-(defun eieio--defalias (name body)
-  "Like `defalias', but with less side-effects.
-More specifically, it has no side-effects at all when the new function
-definition is the same (`eq') as the old one."
-  (while (and (fboundp name) (symbolp (symbol-function name)))
-    ;; Follow aliases, so methods applied to obsolete aliases still work.
-    (setq name (symbol-function name)))
-  (unless (and (fboundp name)
-               (eq (symbol-function name) body))
-    (defalias name body)))
-
 ;;;
 ;; A few functions that are better in the official EIEIO src, but
 ;; used from the core.
@@ -292,7 +279,7 @@ Abstract classes cannot be instantiated."
 
 ;; We autoload this because it's used in `make-autoload'.
 ;;;###autoload
-(defun eieio-defclass-autoload (cname superclasses filename doc)
+(defun eieio-defclass-autoload (cname _superclasses filename doc)
   "Create autoload symbols for the EIEIO class CNAME.
 SUPERCLASSES are the superclasses that CNAME inherits from.
 DOC is the docstring for CNAME.
@@ -301,58 +288,35 @@ SUPERCLASSES as children.
 It creates an autoload function for CNAME's constructor."
   ;; Assume we've already debugged inputs.
 
+  ;; We used to store the list of superclasses in the `parent' slot (as a list
+  ;; of class names).  But now this slot holds a list of class objects, and
+  ;; those parents may not exist yet, so the corresponding class objects may
+  ;; simply not exist yet.  So instead we just don't store the list of parents
+  ;; here in eieio-defclass-autoload at all, since it seems that they're just
+  ;; not needed before the class is actually loaded.
   (let* ((oldc (when (class-p cname) (eieio--class-v cname)))
 	 (newc (eieio--class-make cname))
 	 )
     (if oldc
 	nil ;; Do nothing if we already have this class.
 
-      (let ((clear-parent nil))
-	;; No parents?
-	(when (not superclasses)
-	  (setq superclasses '(eieio-default-superclass)
-		clear-parent t)
-	  )
-
-	;; Hook our new class into the existing structures so we can
-	;; autoload it later.
-	(dolist (SC superclasses)
-
-
-	  ;; TODO - If we create an autoload that is in the map, that
-	  ;;        map needs to be cleared!
-
-
-          ;; Save the child in the parent.
-          (cl-pushnew cname (if (class-p SC)
-                                (eieio--class-children (eieio--class-v SC))
-                              ;; Parent doesn't exist yet.
-                              (gethash SC eieio-defclass-autoload-map)))
+      ;; turn this into a usable self-pointing symbol
+      (when eieio-backward-compatibility
+        (set cname cname)
+        (make-obsolete-variable cname (format "use '%s instead" cname) "25.1"))
 
-	  ;; Save parent in child.
-          (push (eieio--class-v SC) (eieio--class-parent newc)))
+      ;; Store the new class vector definition into the symbol.  We need to
+      ;; do this first so that we can call defmethod for the accessor.
+      ;; The vector will be updated by the following while loop and will not
+      ;; need to be stored a second time.
+      (setf (eieio--class-v cname) newc)
 
-	;; turn this into a usable self-pointing symbol
-        (when eieio-backward-compatibility
-          (set cname cname)
-          (make-obsolete-variable cname (format "use '%s instead" cname) "25.1"))
-
-	;; Store the new class vector definition into the symbol.  We need to
-	;; do this first so that we can call defmethod for the accessor.
-	;; The vector will be updated by the following while loop and will not
-	;; need to be stored a second time.
-	(setf (eieio--class-v cname) newc)
-
-	;; Clear the parent
-	(if clear-parent (setf (eieio--class-parent newc) nil))
-
-	;; Create an autoload on top of our constructor function.
-	(autoload cname filename doc nil nil)
-	(autoload (intern (concat (symbol-name cname) "-p")) filename "" nil nil)
-	(autoload (intern (concat (symbol-name cname) "-child-p")) filename "" nil nil)
-	(autoload (intern (concat (symbol-name cname) "-list-p")) filename "" nil nil)
-
-	))))
+      ;; Create an autoload on top of our constructor function.
+      (autoload cname filename doc nil nil)
+      (autoload (intern (format "%s-p" cname)) filename "" nil nil)
+      (when eieio-backward-compatibility
+        (autoload (intern (format "%s-child-p" cname)) filename "" nil nil)
+        (autoload (intern (format "%s-list-p" cname)) filename "" nil nil)))))
 
 (defsubst eieio-class-un-autoload (cname)
   "If class CNAME is in an autoload state, load its file."
@@ -378,8 +342,13 @@ See `defclass' for more information."
   (setq eieio-hook nil)
 
   (let* ((pname superclasses)
-	 (newc (eieio--class-make cname))
 	 (oldc (when (class-p cname) (eieio--class-v cname)))
+	 (newc (if (and oldc (not (eieio--class-default-object-cache oldc)))
+                   ;; The oldc class is a stub setup by eieio-defclass-autoload.
+                   ;; Reuse it instead of creating a new one, so that existing
+                   ;; references are still valid.
+                   oldc
+                 (eieio--class-make cname)))
 	 (groups nil) ;; list of groups id'd from slots
 	 (clearparent nil))
 
@@ -1284,6 +1253,8 @@ The order, in which the parents are returned depends on the
 method invocation orders of the involved classes."
   (if (or (null class) (eq class eieio-default-superclass))
       nil
+    (unless (eieio--class-default-object-cache class)
+      (eieio-class-un-autoload (eieio--class-symbol class)))
     (cl-case (eieio--class-method-invocation-order class)
       (:depth-first
        (eieio--class-precedence-dfs class))
diff --git a/lisp/emacs-lisp/eieio-generic.el b/lisp/emacs-lisp/eieio-generic.el
index 0e90074..4045c03 100644
--- a/lisp/emacs-lisp/eieio-generic.el
+++ b/lisp/emacs-lisp/eieio-generic.el
@@ -33,6 +33,19 @@
 (require 'eieio-core)
 (declare-function child-of-class-p "eieio")
 
+(put 'eieio--defalias 'byte-hunk-handler
+     #'byte-compile-file-form-defalias) ;;(get 'defalias 'byte-hunk-handler)
+(defun eieio--defalias (name body)
+  "Like `defalias', but with less side-effects.
+More specifically, it has no side-effects at all when the new function
+definition is the same (`eq') as the old one."
+  (while (and (fboundp name) (symbolp (symbol-function name)))
+    ;; Follow aliases, so methods applied to obsolete aliases still work.
+    (setq name (symbol-function name)))
+  (unless (and (fboundp name)
+               (eq (symbol-function name) body))
+    (defalias name body)))
+
 (defconst eieio--method-static 0 "Index into :static tag on a method.")
 (defconst eieio--method-before 1 "Index into :before tag on a method.")
 (defconst eieio--method-primary 2 "Index into :primary tag on a method.")
@@ -101,7 +114,7 @@ Methods with only primary implementations are executed in an optimized way."
     ;; Make sure the method tables are installed.
     (eieio--mt-install method)
     ;; Construct the actual body of this function.
-    (put method 'function-documentation doc-string)
+    (if doc-string (put method 'function-documentation doc-string))
     (eieio--defgeneric-form method))
    ((generic-p method) (symbol-function method))           ;Leave it as-is.
    (t (error "You cannot create a generic/method over an existing symbol: %s"
@@ -177,20 +190,18 @@ but remove reference to all implementations of METHOD."
     ;;
     ;; If this method, after this setup, only has primary methods, then
     ;; we can setup the generic that way.
-    (let ((doc-string (documentation method 'raw)))
-      (put method 'function-documentation doc-string)
-      ;; Use `defalias' so as to interact properly with nadvice.el.
-      (defalias method
-        (if (eieio--generic-primary-only-p method)
-            ;; If there is only one primary method, then we can go one more
-            ;; optimization step.
-            (if (eieio--generic-primary-only-one-p method)
-                (let* ((M (get method 'eieio-method-tree))
-                       (entry (car (aref M eieio--method-primary))))
-                  (eieio--defgeneric-form-primary-only-one
-                   method (car entry) (cdr entry)))
-              (eieio--defgeneric-form-primary-only method))
-          (eieio--defgeneric-form method))))))
+    ;; Use `defalias' so as to interact properly with nadvice.el.
+    (defalias method
+      (if (eieio--generic-primary-only-p method)
+          ;; If there is only one primary method, then we can go one more
+          ;; optimization step.
+          (if (eieio--generic-primary-only-one-p method)
+              (let* ((M (get method 'eieio-method-tree))
+                     (entry (car (aref M eieio--method-primary))))
+                (eieio--defgeneric-form-primary-only-one
+                 method (car entry) (cdr entry)))
+            (eieio--defgeneric-form-primary-only method))
+        (eieio--defgeneric-form method)))))
 
 (defun eieio--defmethod (method kind argclass code)
   "Work part of the `defmethod' macro defining METHOD with ARGS."
@@ -627,7 +638,7 @@ is memorized for faster future use."
 
 ;;; CLOS methods and generics
 ;;
-(defmacro defgeneric (method _args &optional doc-string)
+(defmacro defgeneric (method args &optional doc-string)
   "Create a generic function METHOD.
 DOC-STRING is the base documentation for this class.  A generic
 function has no body, as its purpose is to decide which method body
@@ -637,7 +648,9 @@ currently ignored.  You can use `defgeneric' to apply specialized
 top level documentation to a method."
   (declare (doc-string 3))
   `(eieio--defalias ',method
-                    (eieio--defgeneric-init-form ',method ,doc-string)))
+                    (eieio--defgeneric-init-form
+                     ',method
+                     ,(if doc-string (help-add-fundoc-usage doc-string args)))))
 
 (defmacro defmethod (method &rest args)
   "Create a new METHOD through `defgeneric' with ARGS.
@@ -684,9 +697,7 @@ Summary:
          (code `(lambda ,fargs ,@(cdr args))))
     `(progn
        ;; Make sure there is a generic and the byte-compiler sees it.
-       (defgeneric ,method ,args
-         ,(or (documentation code)
-              (format "Generically created method `%s'." method)))
+       (defgeneric ,method ,args)
        (eieio--defmethod ',method ',key ',class #',code))))
 
 
diff --git a/lisp/emacs-lisp/find-func.el b/lisp/emacs-lisp/find-func.el
index cc7b06c..6c9c798 100644
--- a/lisp/emacs-lisp/find-func.el
+++ b/lisp/emacs-lisp/find-func.el
@@ -1,4 +1,4 @@
-;;; find-func.el --- find the definition of the Emacs Lisp function near point
+;;; find-func.el --- find the definition of the Emacs Lisp function near point  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 1997, 1999, 2001-2015 Free Software Foundation, Inc.
 
@@ -59,7 +59,7 @@
   (concat
    "^\\s-*(\\(def\\(ine-skeleton\\|ine-generic-mode\\|ine-derived-mode\\|\
 ine\\(?:-global\\)?-minor-mode\\|ine-compilation-mode\\|un-cvs-mode\\|\
-foo\\|[^icfgv]\\(\\w\\|\\s_\\)+\\*?\\)\\|easy-mmode-define-[a-z-]+\\|easy-menu-define\\|\
+foo\\|\\(?:[^icfv]\\|g[^r]\\)\\(\\w\\|\\s_\\)+\\*?\\)\\|easy-mmode-define-[a-z-]+\\|easy-menu-define\\|\
 menu-bar-make-toggle\\)"
    find-function-space-re
    "\\('\\|\(quote \\)?%s\\(\\s-\\|$\\|\(\\|\)\\)")
@@ -106,7 +106,10 @@ Please send improvements and fixes to the maintainer."
     (defface . find-face-regexp))
   "Alist mapping definition types into regexp variables.
 Each regexp variable's value should actually be a format string
-to be used to substitute the desired symbol name into the regexp.")
+to be used to substitute the desired symbol name into the regexp.
+Instead of regexp variable, types can be mapped to functions as well,
+in which case the function is called with one argument (the object
+we're looking for) and it should search for it.")
 (put 'find-function-regexp-alist 'risky-local-variable t)
 
 (defcustom find-function-source-path nil
@@ -282,30 +285,33 @@ The search is done in the source for library LIBRARY."
     (let* ((filename (find-library-name library))
 	   (regexp-symbol (cdr (assq type find-function-regexp-alist))))
       (with-current-buffer (find-file-noselect filename)
-	(let ((regexp (format (symbol-value regexp-symbol)
-			      ;; Entry for ` (backquote) macro in loaddefs.el,
-			      ;; (defalias (quote \`)..., has a \ but
-			      ;; (symbol-name symbol) doesn't.  Add an
-			      ;; optional \ to catch this.
-			      (concat "\\\\?"
-				      (regexp-quote (symbol-name symbol)))))
+	(let ((regexp (if (functionp regexp-symbol) regexp-symbol
+                        (format (symbol-value regexp-symbol)
+                                ;; Entry for ` (backquote) macro in loaddefs.el,
+                                ;; (defalias (quote \`)..., has a \ but
+                                ;; (symbol-name symbol) doesn't.  Add an
+                                ;; optional \ to catch this.
+                                (concat "\\\\?"
+                                        (regexp-quote (symbol-name symbol))))))
 	      (case-fold-search))
 	  (with-syntax-table emacs-lisp-mode-syntax-table
 	    (goto-char (point-min))
-	    (if (or (re-search-forward regexp nil t)
-                    ;; `regexp' matches definitions using known forms like
-                    ;; `defun', or `defvar'.  But some functions/variables
-                    ;; are defined using special macros (or functions), so
-                    ;; if `regexp' can't find the definition, we look for
-                    ;; something of the form "(SOMETHING  ...)".
-                    ;; This fails to distinguish function definitions from
-                    ;; variable declarations (or even uses thereof), but is
-                    ;; a good pragmatic fallback.
-		    (re-search-forward
-		     (concat "^([^ ]+" find-function-space-re "['(]?"
-			     (regexp-quote (symbol-name symbol))
-			     "\\_>")
-		     nil t))
+	    (if (if (functionp regexp)
+                    (funcall regexp symbol)
+                  (or (re-search-forward regexp nil t)
+                      ;; `regexp' matches definitions using known forms like
+                      ;; `defun', or `defvar'.  But some functions/variables
+                      ;; are defined using special macros (or functions), so
+                      ;; if `regexp' can't find the definition, we look for
+                      ;; something of the form "(SOMETHING  ...)".
+                      ;; This fails to distinguish function definitions from
+                      ;; variable declarations (or even uses thereof), but is
+                      ;; a good pragmatic fallback.
+                      (re-search-forward
+                       (concat "^([^ ]+" find-function-space-re "['(]?"
+                               (regexp-quote (symbol-name symbol))
+                               "\\_>")
+                       nil t)))
 		(progn
 		  (beginning-of-line)
 		  (cons (current-buffer) (point)))
@@ -324,18 +330,19 @@ signal an error.
 
 If VERBOSE is non-nil, and FUNCTION is an alias, display a
 message about the whole chain of aliases."
-  (let ((def (symbol-function (find-function-advised-original function)))
+  (let ((def (if (symbolp function)
+                 (symbol-function (find-function-advised-original function))))
         aliases)
     ;; FIXME for completeness, it might be nice to print something like:
     ;; foo (which is advised), which is an alias for bar (which is advised).
-    (while (symbolp def)
+    (while (and def (symbolp def))
       (or (eq def function)
           (not verbose)
-          (if aliases
-              (setq aliases (concat aliases
+          (setq aliases (if aliases
+                            (concat aliases
                                     (format ", which is an alias for `%s'"
-                                            (symbol-name def))))
-            (setq aliases (format "`%s' is an alias for `%s'"
+                                            (symbol-name def)))
+                          (format "`%s' is an alias for `%s'"
                                   function (symbol-name def)))))
       (setq function (symbol-function (find-function-advised-original function))
             def (symbol-function (find-function-advised-original function))))
@@ -408,7 +415,6 @@ See also `find-function-after-hook'.
 
 Set mark before moving, if the buffer already existed."
   (let* ((orig-point (point))
-	(orig-buf (window-buffer))
 	(orig-buffers (buffer-list))
 	(buffer-point (save-excursion
 			(find-definition-noselect symbol type)))
diff --git a/lisp/help-fns.el b/lisp/help-fns.el
index 10c040a..c0d6393 100644
--- a/lisp/help-fns.el
+++ b/lisp/help-fns.el
@@ -183,8 +183,7 @@ OBJECT should be a symbol associated with a function, variable, or face;
   alternatively, it can be a function definition.
 If TYPE is `defvar', search for a variable definition.
 If TYPE is `defface', search for a face definition.
-If TYPE is the value returned by `symbol-function' for a function symbol,
- search for a function definition.
+If TYPE is not a symbol, search for a function definition.
 
 The return value is the absolute name of a readable file where OBJECT is
 defined.  If several such files exist, preference is given to a file
@@ -194,9 +193,10 @@ suitable file is found, return nil."
   (let* ((autoloaded (autoloadp type))
 	 (file-name (or (and autoloaded (nth 1 type))
 			(symbol-file
-			 object (if (memq type (list 'defvar 'defface))
-				    type
-				  'defun)))))
+                         ;; FIXME: Why do we have this weird "If TYPE is the
+                         ;; value returned by `symbol-function' for a function
+                         ;; symbol" exception?
+			 object (or (if (symbolp type) type) 'defun)))))
     (cond
      (autoloaded
       ;; An autoloaded function: Locate the file since `symbol-function'
@@ -452,6 +452,18 @@ FILE is the file where FUNCTION was probably defined."
                          (t "."))
                    "\n")))))
 
+(defun help-fns-short-filename (filename)
+  (let* ((abbrev (abbreviate-file-name filename))
+         (short abbrev))
+    (dolist (dir load-path)
+      (let ((rel (file-relative-name filename dir)))
+        (if (< (length rel) (length short))
+            (setq short rel)))
+      (let ((rel (file-relative-name abbrev dir)))
+        (if (< (length rel) (length short))
+            (setq short rel))))
+    short))
+
 ;;;###autoload
 (defun describe-function-1 (function)
   (let* ((advised (and (symbolp function)
@@ -543,7 +555,7 @@ FILE is the file where FUNCTION was probably defined."
 	;; but that's completely wrong when the user used load-file.
 	(princ (if (eq file-name 'C-source)
 		   "C source code"
-		 (file-name-nondirectory file-name)))
+		 (help-fns-short-filename file-name)))
 	(princ "'")
 	;; Make a hyperlink to the library.
 	(with-current-buffer standard-output
@@ -564,7 +576,7 @@ FILE is the file where FUNCTION was probably defined."
 			 help-enable-auto-load
 			 (string-match "\\([^\\]=\\|[^=]\\|\\`\\)\\\\[[{<]"
 				       doc-raw)
-			 (load (cadr real-def) t))
+			 (autoload-do-load real-def))
 		    (substitute-command-keys doc-raw))))
 
         (help-fns--key-bindings function)
diff --git a/lisp/help-mode.el b/lisp/help-mode.el
index dd20307..c62ddc3 100644
--- a/lisp/help-mode.el
+++ b/lisp/help-mode.el
@@ -191,7 +191,7 @@ The format is (FUNCTION ARGS...).")
 
 (define-button-type 'help-function-def
   :supertype 'help-xref
-  'help-function (lambda (fun file)
+  'help-function (lambda (fun file &optional type)
 		   (require 'find-func)
 		   (when (eq file 'C-source)
 		     (setq file
@@ -199,7 +199,7 @@ The format is (FUNCTION ARGS...).")
 		   ;; Don't use find-function-noselect because it follows
 		   ;; aliases (which fails for built-in functions).
 		   (let ((location
-			  (find-function-search-for-symbol fun nil file)))
+			  (find-function-search-for-symbol fun type file)))
 		     (pop-to-buffer (car location))
 		     (if (cdr location)
 			 (goto-char (cdr location))
diff --git a/test/ChangeLog b/test/ChangeLog
index 8ed02ee..c40407f 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,13 @@
+2015-01-17  Stefan Monnier  
+
+	* automated/eieio-test-methodinvoke.el (eieio-test-cl-generic-1): Reset
+	eieio-test--1.
+
+	* automated/cl-generic-tests.el (cl-generic-test-8-after/before):
+	Rename from cl-generic-test-7-after/before.
+	(cl--generic-test-advice): New function.
+	(cl-generic-test-9-advice): New test.
+
 2015-01-16  Jorgen Schaefer  
 
 	* automated/package-test.el (package-test-install-prioritized):
diff --git a/test/automated/cl-generic-tests.el b/test/automated/cl-generic-tests.el
index 57b17b1..46397fb 100644
--- a/test/automated/cl-generic-tests.el
+++ b/test/automated/cl-generic-tests.el
@@ -129,7 +129,7 @@
     (cons "x&y-int" (cl-call-next-method)))
   (should (equal (cl--generic-1 1 2) '("x&y-int" "y-int" "x-int" 1 2))))
 
-(ert-deftest cl-generic-test-7-after/before ()
+(ert-deftest cl-generic-test-8-after/before ()
   (let ((log ()))
     (cl-defgeneric cl--generic-1 (x y))
     (cl-defmethod cl--generic-1 ((_x t) y) (cons y log))
@@ -142,5 +142,18 @@
     (should (equal (cl--generic-1 4 6) '("quatre" 6 (:before 4))))
     (should (equal log '((:after 4) (:before 4))))))
 
+(defun cl--generic-test-advice (&rest args) (cons "advice" (apply args)))
+
+(ert-deftest cl-generic-test-9-advice ()
+  (cl-defgeneric cl--generic-1 (x y) "My doc.")
+  (cl-defmethod cl--generic-1 (x y) (list x y))
+  (advice-add 'cl--generic-1 :around #'cl--generic-test-advice)
+  (should (equal (cl--generic-1 4 5) '("advice" 4 5)))
+  (cl-defmethod cl--generic-1 ((_x integer) _y)
+    (cons "integer" (cl-call-next-method)))
+  (should (equal (cl--generic-1 4 5) '("advice" "integer" 4 5)))
+  (advice-remove 'cl--generic-1 #'cl--generic-test-advice)
+  (should (equal (cl--generic-1 4 5) '("integer" 4 5))))
+
 (provide 'cl-generic-tests)
 ;;; cl-generic-tests.el ends here
diff --git a/test/automated/eieio-test-methodinvoke.el b/test/automated/eieio-test-methodinvoke.el
index 6362fc5..1c3d9c3 100644
--- a/test/automated/eieio-test-methodinvoke.el
+++ b/test/automated/eieio-test-methodinvoke.el
@@ -384,6 +384,7 @@
 (cl-defgeneric eieio-test--1 (x y))
 
 (ert-deftest eieio-test-cl-generic-1 ()
+  (cl-defgeneric eieio-test--1 (x y))
   (cl-defmethod eieio-test--1 (x y) (list x y))
   (cl-defmethod eieio-test--1 ((_x CNM-0) y)
     (cons "CNM-0" (cl-call-next-method 7 y)))

commit a2cd6d90d20408a6265c8615697dbff94df3f098
Author: Artur Malabarba 
Date:   Wed Jan 14 12:57:32 2015 -0200

    emacs-lisp/package.el and package-x.el: References to package-desc-kind

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index b69df34..f78714b 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -7,6 +7,11 @@
 	directory. The return result is a `package-desc'.
 	(package-install-from-buffer): Install packages from dired buffer.
 	(package-install-file): Install packages from directory.
+	(package-desc-suffix)
+	(package-install-from-archive)
+	* emacs-lisp/package-x.el (package-upload-buffer-internal): Ensure
+	all remaining instances of `package-desc-kind' handle the 'dir
+	value.
 
 2015-01-16  Jorgen Schaefer  
 
diff --git a/lisp/emacs-lisp/package-x.el b/lisp/emacs-lisp/package-x.el
index f2bcdad..e0945d4 100644
--- a/lisp/emacs-lisp/package-x.el
+++ b/lisp/emacs-lisp/package-x.el
@@ -207,6 +207,10 @@ if it exists."
 	       (pkg-version (package-version-join split-version))
 	       (pkg-buffer (current-buffer)))
 
+          ;; `package-upload-file' will error if given a directory,
+          ;; but we check it here as well just in case.
+          (when (eq 'dir file-type)
+            (user-error "Can't upload directory, tar it instead"))
 	  ;; Get archive-contents from ARCHIVE-URL if it's non-nil, or
 	  ;; from `package-archive-upload-base' otherwise.
 	  (let ((contents (or (package--archive-contents-from-url archive-url)
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index f585c0b..08031c8 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -413,6 +413,7 @@ Slots:
   (pcase (package-desc-kind pkg-desc)
     (`single ".el")
     (`tar ".tar")
+    (`dir "")
     (kind (error "Unknown package kind: %s" kind))))
 
 (defun package-desc--keywords (pkg-desc)
@@ -939,6 +940,9 @@ GnuPG keyring is located under \"gnupg\" in `package-user-dir'."
 
 (defun package-install-from-archive (pkg-desc)
   "Download and install a tar package."
+  ;; This won't happen, unless the archive is doing something wrong.
+  (when (eq (package-desc-kind pkg-desc) 'dir)
+    (error "Can't install directory package from archive"))
   (let* ((location (package-archive-base pkg-desc))
 	 (file (concat (package-desc-full-name pkg-desc)
 		       (package-desc-suffix pkg-desc)))

commit 40d963ff660eb256652cdca98094bfbda23daa9a
Author: Artur Malabarba 
Date:   Tue Jan 13 00:13:55 2015 -0200

    * NEWS: Document installing packages from directories.

diff --git a/etc/ChangeLog b/etc/ChangeLog
index 681858e..7b64dfb 100644
--- a/etc/ChangeLog
+++ b/etc/ChangeLog
@@ -1,3 +1,7 @@
+2015-01-16  Artur Malabarba  
+
+	* NEWS: Document installing packages from directories.
+
 2015-01-15  Eli Zaretskii  
 
 	* NEWS: Mention 'set-binary-mode'.
diff --git a/etc/NEWS b/etc/NEWS
index 0bfd3fd..cf93b65 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -56,6 +56,10 @@ so if you want to use it, you can always take a copy from an older Emacs.
 
 * Changes in Emacs 25.1
 
+** `package-install-from-buffer' and `package-install-file' work on directories.
+This follows the same rules as installing from a .tar file, except the
+-pkg file is optional.
+
 ** New function `custom-prompt-customize-unsaved-options' checks for
 unsaved customizations and prompts user to customize (if found).
 

commit 64fd1a5a59cfce55b0f91bdd68e13807fd52d03a
Author: Artur Malabarba 
Date:   Tue Jan 13 00:03:59 2015 -0200

    (package-install-file): Install packages from directory.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 13a8722..b69df34 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -6,6 +6,7 @@
 	(package-dir-info): New function. Find package information for a
 	directory. The return result is a `package-desc'.
 	(package-install-from-buffer): Install packages from dired buffer.
+	(package-install-file): Install packages from directory.
 
 2015-01-16  Jorgen Schaefer  
 
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index 78138e9..f585c0b 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -1368,8 +1368,12 @@ Downloads and installs required packages as needed."
 The file can either be a tar file or an Emacs Lisp file."
   (interactive "fPackage file name: ")
   (with-temp-buffer
-    (insert-file-contents-literally file)
-    (when (string-match "\\.tar\\'" file) (tar-mode))
+    (if (file-directory-p file)
+        (progn
+          (setq default-directory file)
+          (dired-mode))
+      (insert-file-contents-literally file)
+      (when (string-match "\\.tar\\'" file) (tar-mode)))
     (package-install-from-buffer)))
 
 (defun package-delete (pkg-desc)

commit bc2f8d064bad4da0325a09179b420f75c941ffd9
Author: Artur Malabarba 
Date:   Mon Jan 12 23:35:46 2015 -0200

    (package-install-from-buffer): Install packages from dired buffer.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index dce08a4..13a8722 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -5,6 +5,7 @@
 	the pkg-desc, with desc-kind set to KIND.
 	(package-dir-info): New function. Find package information for a
 	directory. The return result is a `package-desc'.
+	(package-install-from-buffer): Install packages from dired buffer.
 
 2015-01-16  Jorgen Schaefer  
 
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index 77b15c1..78138e9 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -800,6 +800,20 @@ untar into a directory named DIR; otherwise, signal an error."
          (dirname (package-desc-full-name pkg-desc))
 	 (pkg-dir (expand-file-name dirname package-user-dir)))
     (pcase (package-desc-kind pkg-desc)
+      (`dir
+       (make-directory pkg-dir t)
+       (let ((file-list
+              (directory-files
+               default-directory 'full "\\`[^.].*\\.el\\'" 'nosort)))
+         (dolist (source-file file-list)
+           (let ((target-el-file
+                  (expand-file-name (file-name-nondirectory source-file) pkg-dir)))
+             (copy-file source-file target-el-file t)))
+         ;; Now that the files have been installed, this package is
+         ;; indistinguishable from a `tar' or a `single'. Let's make
+         ;; things simple by ensuring we're one of them.
+         (setf (package-desc-kind pkg-desc)
+               (if (> (length file-list) 1) 'tar 'single))))
       (`tar
        (make-directory package-user-dir t)
        ;; FIXME: should we delete PKG-DIR if it exists?
@@ -1318,13 +1332,28 @@ Return the pkg-desc, with desc-kind set to KIND."
 ;;;###autoload
 (defun package-install-from-buffer ()
   "Install a package from the current buffer.
-The current buffer is assumed to be a single .el or .tar file that follows the
-packaging guidelines; see info node `(elisp)Packaging'.
+The current buffer is assumed to be a single .el or .tar file or
+a directory.  These must follow the packaging guidelines (see
+info node `(elisp)Packaging').
+
+Specially, if current buffer is a directory, the -pkg.el
+description file is not mandatory, in which case the information
+is derived from the main .el file in the directory.
+
 Downloads and installs required packages as needed."
   (interactive)
-  (let ((pkg-desc (if (derived-mode-p 'tar-mode)
-                      (package-tar-file-info)
-                    (package-buffer-info))))
+  (let ((pkg-desc
+         (cond
+          ((derived-mode-p 'dired-mode)
+           ;; This is the only way a package-desc object with a `dir'
+           ;; desc-kind can be created.  Such packages can't be
+           ;; uploaded or installed from archives, they can only be
+           ;; installed from local buffers or directories.
+           (package-dir-info))
+          ((derived-mode-p 'tar-mode)
+           (package-tar-file-info))
+          (t
+           (package-buffer-info)))))
     ;; Download and install the dependencies.
     (let* ((requires (package-desc-reqs pkg-desc))
            (transaction (package-compute-transaction nil requires)))

commit 2fe6110d710b71b90f90c84bfa8eaf6b129eb0a6
Author: Artur Malabarba 
Date:   Mon Jan 12 23:26:58 2015 -0200

    * emacs-lisp/package.el (package-dir-info): New function.
    
    Find package information for a directory. The return result is a
    `package-desc'.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 93796e6..dce08a4 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -3,6 +3,8 @@
 	* emacs-lisp/package.el (package--read-pkg-desc): New
 	function. Read a `define-package' form in current buffer. Return
 	the pkg-desc, with desc-kind set to KIND.
+	(package-dir-info): New function. Find package information for a
+	directory. The return result is a `package-desc'.
 
 2015-01-16  Jorgen Schaefer  
 
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index d590667..77b15c1 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -1281,6 +1281,24 @@ The return result is a `package-desc'."
           (package--read-pkg-desc 'tar)
         (kill-buffer (current-buffer))))))
 
+(defun package-dir-info ()
+  "Find package information for a directory.
+The return result is a `package-desc'."
+  (cl-assert (derived-mode-p 'dired-mode))
+  (let* ((desc-file (package--description-file default-directory)))
+    (if (file-readable-p desc-file)
+        (with-temp-buffer
+          (insert-file-contents desc-file)
+          (package--read-pkg-desc 'dir))
+      (let ((files (directory-files default-directory t "\\.el\\'" t))
+            info)
+        (while files
+          (with-temp-buffer
+            (insert-file-contents (pop files))
+            (if (setq info (ignore-errors (package-buffer-info)))
+                (setq files nil)
+              (setf (package-desc-kind info) 'dir))))))))
+
 (defun package--read-pkg-desc (kind)
   "Read a `define-package' form in current buffer.
 Return the pkg-desc, with desc-kind set to KIND."

commit be6dbd4b1ea00be1d63121cdc05d61424129a6ba
Author: Artur Malabarba 
Date:   Mon Jan 12 23:24:22 2015 -0200

    * emacs-lisp/package.el (package--read-pkg-desc): New function.
    
    Read a `define-package' form in current buffer. Return the pkg-desc,
    with desc-kind set to KIND.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index c80f8f7..93796e6 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,9 @@
+2015-01-16  Artur Malabarba  
+
+	* emacs-lisp/package.el (package--read-pkg-desc): New
+	function. Read a `define-package' form in current buffer. Return
+	the pkg-desc, with desc-kind set to KIND.
+
 2015-01-16  Jorgen Schaefer  
 
 	* emacs-lisp/package.el: Provide repository priorities.
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index 5336271..d590667 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -1277,19 +1277,25 @@ The return result is a `package-desc'."
     (unless tar-desc
       (error "No package descriptor file found"))
     (with-current-buffer (tar--extract tar-desc)
-      (goto-char (point-min))
       (unwind-protect
-          (let* ((pkg-def-parsed (read (current-buffer)))
-                 (pkg-desc
-                  (if (not (eq (car pkg-def-parsed) 'define-package))
-                      (error "Can't find define-package in %s"
-                             (tar-header-name tar-desc))
-                    (apply #'package-desc-from-define
-                           (append (cdr pkg-def-parsed))))))
-            (setf (package-desc-kind pkg-desc) 'tar)
-            pkg-desc)
+          (package--read-pkg-desc 'tar)
         (kill-buffer (current-buffer))))))
 
+(defun package--read-pkg-desc (kind)
+  "Read a `define-package' form in current buffer.
+Return the pkg-desc, with desc-kind set to KIND."
+  (goto-char (point-min))
+  (unwind-protect
+      (let* ((pkg-def-parsed (read (current-buffer)))
+             (pkg-desc
+              (if (not (eq (car pkg-def-parsed) 'define-package))
+                  (error "Can't find define-package in %s"
+                         (tar-header-name tar-desc))
+                (apply #'package-desc-from-define
+                  (append (cdr pkg-def-parsed))))))
+        (setf (package-desc-kind pkg-desc) kind)
+        pkg-desc)))
+
 
 ;;;###autoload
 (defun package-install-from-buffer ()

commit 69f36afa11c0b754c40f4fc57408ccd85428e2b0
Author: Stefan Monnier 
Date:   Thu Jan 15 08:58:45 2015 -0500

    * lisp/emacs-lisp/cl-macs.el: Fix last change.
    
    (cl--labels-magic): New constant.
    (cl--labels-convert): Use it to ask the macro what is its replacement
    in the #'f case.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index c6e315e..c80f8f7 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -38,6 +38,10 @@
 
 2015-01-15  Stefan Monnier  
 
+	* emacs-lisp/cl-macs.el (cl--labels-magic): New constant.
+	(cl--labels-convert): Use it to ask the macro what is its replacement
+	in the #'f case.
+
 	* emacs-lisp/cl-generic.el (cl--generic-build-combined-method):
 	Return the value of the primary rather than the after method.
 
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index 0070599..38f15b8 100644
--- a/lisp/emacs-lisp/cl-macs.el
+++ b/lisp/emacs-lisp/cl-macs.el
@@ -1807,6 +1807,8 @@ a `let' form, except that the list of symbols can be computed at run-time."
            (push (list (pop ,syms) (list 'quote (pop ,vals))) ,binds))
          (eval (list 'let ,binds (list 'funcall (list 'quote ,bodyfun))))))))
 
+(defconst cl--labels-magic (make-symbol "cl--labels-magic"))
+
 (defvar cl--labels-convert-cache nil)
 
 (defun cl--labels-convert (f)
@@ -1818,10 +1820,12 @@ a `let' form, except that the list of symbols can be computed at run-time."
    ;; being expanded even though we don't receive it.
    ((eq f (car cl--labels-convert-cache)) (cdr cl--labels-convert-cache))
    (t
-    (let ((found (assq f macroexpand-all-environment)))
-      (if (and found (ignore-errors
-                       (eq (cadr (cl-caddr found)) 'cl-labels-args)))
-          (cadr (cl-caddr (cl-cadddr found)))
+    (let* ((found (assq f macroexpand-all-environment))
+           (replacement (and found
+                             (ignore-errors
+                               (funcall (cdr found) cl--labels-magic)))))
+      (if (and replacement (eq cl--labels-magic (car replacement)))
+          (nth 1 replacement)
         (let ((res `(function ,f)))
           (setq cl--labels-convert-cache (cons f res))
           res))))))
@@ -1850,17 +1854,18 @@ for (FUNC (lambda ARGLIST BODY)).
                             `(cl-function (lambda . ,args-and-body))))
                 binds))
 	(push (cons (car binding)
-                    (lambda (&rest cl-labels-args)
-                      (cl-list* 'funcall var cl-labels-args)))
+                    (lambda (&rest args)
+                      (if (eq (car args) cl--labels-magic)
+                          (list cl--labels-magic var)
+                        `(funcall ,var ,@args))))
               newenv)))
     ;; FIXME: Eliminate those functions which aren't referenced.
-    `(let ,(nreverse binds)
-       ,@(macroexp-unprogn
-          (macroexpand-all
-           `(progn ,@body)
-           ;; Don't override lexical-let's macro-expander.
-           (if (assq 'function newenv) newenv
-             (cons (cons 'function #'cl--labels-convert) newenv)))))))
+    (macroexp-let* (nreverse binds)
+                   (macroexpand-all
+                    `(progn ,@body)
+                    ;; Don't override lexical-let's macro-expander.
+                    (if (assq 'function newenv) newenv
+                      (cons (cons 'function #'cl--labels-convert) newenv))))))
 
 ;;;###autoload
 (defmacro cl-flet* (bindings &rest body)
@@ -1887,8 +1892,10 @@ in closures will only work if `lexical-binding' is in use.
       (let ((var (make-symbol (format "--cl-%s--" (car binding)))))
 	(push (list var `(cl-function (lambda . ,(cdr binding)))) binds)
 	(push (cons (car binding)
-                    (lambda (&rest cl-labels-args)
-                      (cl-list* 'funcall var cl-labels-args)))
+                    (lambda (&rest args)
+                      (if (eq (car args) cl--labels-magic)
+                          (list cl--labels-magic var)
+                        (cl-list* 'funcall var args))))
               newenv)))
     (macroexpand-all `(letrec ,(nreverse binds) ,@body)
                      ;; Don't override lexical-let's macro-expander.
diff --git a/test/automated/cl-lib-tests.el b/test/automated/cl-lib-tests.el
index bbfb8d1..c83391b 100644
--- a/test/automated/cl-lib-tests.el
+++ b/test/automated/cl-lib-tests.el
@@ -245,4 +245,7 @@
 (ert-deftest cl-loop-destructuring-with ()
   (should (equal (cl-loop with (a b c) = '(1 2 3) return (+ a b c)) 6)))
 
+(ert-deftest cl-flet-test ()
+  (should (equal (cl-flet ((f1 (x) x)) (let ((x #'f1)) (funcall x 5))) 5)))
+
 ;;; cl-lib.el ends here

commit 9d940c667ab1dadc9d25a88cc2af1594b6c1bb49
Author: Stefan Monnier 
Date:   Thu Jan 15 08:38:00 2015 -0500

    * lisp/emacs-lisp/cl-generic.el (cl--generic-build-combined-method):
    Return the value of the primary rather than the after method.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 57aaea0..c6e315e 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -38,6 +38,9 @@
 
 2015-01-15  Stefan Monnier  
 
+	* emacs-lisp/cl-generic.el (cl--generic-build-combined-method):
+	Return the value of the primary rather than the after method.
+
 	* emacs-lisp/eieio-core.el: Provide support for cl-generic.
 	(eieio--generic-tagcode): New function.
 	(cl-generic-tagcode-function): Use it.
diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el
index 41a419a..21688be 100644
--- a/lisp/emacs-lisp/cl-generic.el
+++ b/lisp/emacs-lisp/cl-generic.el
@@ -411,9 +411,10 @@ for all those different tags in the method-cache.")
               (setq fun (lambda (&rest args)
                           (dolist (bf before)
                             (apply bf args))
-                          (apply next args)
-                          (dolist (af after)
-                            (apply af args))))))
+                          (prog1
+                              (apply next args)
+                            (dolist (af after)
+                              (apply af args)))))))
           (cl--generic-nest fun (alist-get :around mets-by-qual))))))))
 
 (defun cl--generic-cache-miss (generic dispatch-arg dispatches-left tags)
diff --git a/test/automated/cl-generic-tests.el b/test/automated/cl-generic-tests.el
index 17bce6a..57b17b1 100644
--- a/test/automated/cl-generic-tests.el
+++ b/test/automated/cl-generic-tests.el
@@ -129,5 +129,18 @@
     (cons "x&y-int" (cl-call-next-method)))
   (should (equal (cl--generic-1 1 2) '("x&y-int" "y-int" "x-int" 1 2))))
 
+(ert-deftest cl-generic-test-7-after/before ()
+  (let ((log ()))
+    (cl-defgeneric cl--generic-1 (x y))
+    (cl-defmethod cl--generic-1 ((_x t) y) (cons y log))
+    (cl-defmethod cl--generic-1 ((_x (eql 4)) _y)
+    (cons "quatre" (cl-call-next-method)))
+    (cl-defmethod cl--generic-1 :after (x _y)
+      (push (list :after x) log))
+    (cl-defmethod cl--generic-1 :before (x _y)
+      (push (list :before x) log))
+    (should (equal (cl--generic-1 4 6) '("quatre" 6 (:before 4))))
+    (should (equal log '((:after 4) (:before 4))))))
+
 (provide 'cl-generic-tests)
 ;;; cl-generic-tests.el ends here

commit 5e2255017323c54feeaaee220175d7761a3b6ed1
Merge: b646755 78e6ccc
Author: Joakim Verona 
Date:   Fri Jan 16 22:29:10 2015 +0100

    merge master

commit b64675500decba1c707bc5d5c6d57f633934778f
Author: Joakim Verona 
Date:   Fri Jan 16 22:27:30 2015 +0100

    moved buttons from edge to inside text

diff --git a/test/xwidget-test-manual.el b/test/xwidget-test-manual.el
index 85db981..3732dca 100644
--- a/test/xwidget-test-manual.el
+++ b/test/xwidget-test-manual.el
@@ -40,7 +40,7 @@
               (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic))
 
 (xwidget-demo "a-button-bidi"
-              (xwidget-insert (point-min) 'Button  "button" 60  50)
+              (xwidget-insert (+ 5 (point-min)) 'Button  "button" 60  50)
               (set (make-local-variable 'bidi-paragraph-direction) 'right-to-left)
               (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic))
 

commit d1ca98e3413ee8bbe94d03907a375b57f87e5329
Author: Joakim Verona 
Date:   Fri Jan 16 21:38:42 2015 +0100

    Fill in some bidi values for xwidgets
    
    Addes some bidi code for xwidget, but not complete yet

diff --git a/src/xdisp.c b/src/xdisp.c
index 120e810..a375757 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -25863,17 +25863,33 @@ produce_xwidget_glyph (struct it *it)
 	  glyph->descent = it->descent;
 	  glyph->voffset = it->voffset;
 	  glyph->type = XWIDGET_GLYPH;
-
+	  glyph->avoid_cursor_p = it->avoid_cursor_p;
 	  glyph->multibyte_p = it->multibyte_p;
-	  glyph->left_box_line_p = it->start_of_box_run_p;
-	  glyph->right_box_line_p = it->end_of_box_run_p;
-	  glyph->overlaps_vertically_p = 0;
+	  if (it->glyph_row->reversed_p && area == TEXT_AREA)
+	    {
+	      /* In R2L rows, the left and the right box edges need to be
+		 drawn in reverse direction.  */
+	      glyph->right_box_line_p = it->start_of_box_run_p;
+	      glyph->left_box_line_p = it->end_of_box_run_p;
+	    }
+	  else
+	    {
+	      glyph->left_box_line_p = it->start_of_box_run_p;
+	      glyph->right_box_line_p = it->end_of_box_run_p;
+	    }
+          glyph->overlaps_vertically_p = 0;
           glyph->padding_p = 0;
 	  glyph->glyph_not_available_p = 0;
 	  glyph->face_id = it->face_id;
           glyph->u.xwidget = it->xwidget;
           //assert_valid_xwidget_id(glyph->u.xwidget_id,"produce_xwidget_glyph");
 	  glyph->font_type = FONT_TYPE_UNKNOWN;
+	  if (it->bidi_p)
+	    {
+	      glyph->resolved_level = it->bidi_it.resolved_level;
+	      eassert ((it->bidi_it.type & 7) == it->bidi_it.type);
+	      glyph->bidi_type = it->bidi_it.type;
+	    }
 	  ++it->glyph_row->used[area];
 	}
       else

commit 78e6ccc4a5006272b14f352e459a6d3bf52ed07b
Author: Jorgen Schaefer 
Date:   Fri Jan 16 20:28:26 2015 +0100

    Fix the automated test for package priorities.
    
    * automated/package-test.el (package-test-install-prioritized):
    New test.

diff --git a/test/ChangeLog b/test/ChangeLog
index b3a0494..8ed02ee 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-16  Jorgen Schaefer  
+
+	* automated/package-test.el (package-test-install-prioritized):
+	New test.
+
 2015-01-15  Wolfgang Jenkner  
 
 	* automated/calc-tests.el (calc-tests-equal, calc-tests-simple):
diff --git a/test/automated/package-test.el b/test/automated/package-test.el
index 89e0bc1..c33a1ba 100644
--- a/test/automated/package-test.el
+++ b/test/automated/package-test.el
@@ -243,7 +243,7 @@ Must called from within a `tar-mode' buffer."
       (package-refresh-contents)
       (package-install 'simple-single)
 
-      (let ((installed (cdr (assq 'simple-single package-alist))))
+      (let ((installed (cadr (assq 'simple-single package-alist))))
         (should (version-list-= '(1 3)
                                 (package-desc-version installed)))))))
 

commit 8db625b6056965fe52e75080950e4ee0ad98bcc6
Author: Glenn Morris 
Date:   Fri Jan 16 14:17:25 2015 -0500

    # ChangeLog fixes

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index d46726f..57aaea0 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,6 +1,6 @@
 2015-01-16  Jorgen Schaefer  
 
-	* lisp/package.el: Provide repository priorities.
+	* emacs-lisp/package.el: Provide repository priorities.
 	(package-archive-priorities): New variable.
 	(package--add-to-alist): New function.
 	(package--add-to-archive-contents): Use it.
@@ -66,27 +66,22 @@
 
 2015-01-13  Alan Mackenzie  
 
-	Allow compilation during loading of Modes derived from a CC Mode mode.
-	Fixes debbugs#19206.
-
+	Allow compilation during loading of CC Mode-derived modes (bug#19206).
 	* progmodes/cc-bytecomp.el (cc-bytecomp-compiling-or-loading):
 	New function which walks the stack to discover whether we're compiling
 	or loading.
-	(cc-bytecomp-is-compiling): Reformulate, and move towards
-	beginning.
+	(cc-bytecomp-is-compiling): Reformulate, and move towards beginning.
 	(cc-bytecomp-is-loading): New defsubst.
 	(cc-bytecomp-setup-environment, cc-bytecomp-restore-environment):
 	Use the above defsubsts.
 	(cc-require-when-compile, cc-bytecomp-defvar)
 	(cc-bytecomp-defun): Simplify conditionals.
-
 	* progmodes/cc-defs.el (cc-bytecomp-compiling-or-loading):
 	"Borrow" this function from cc-bytecomp.el.
 	(c-get-current-file): Reformulate using the above.
 	(c-lang-defconst): Prevent duplicate entries of file names in a
 	symbol's 'source property.
 	(c-lang-const): Use cc-bytecomp-is-compiling.
-
 	* progmodes/cc-langs.el (c-make-init-lang-vars-fun):
 	Use cc-bytecomp-is-compiling.
 

commit 8a10c6833eaa96328cd548eca4073808abe5aedf
Author: Joakim Verona 
Date:   Fri Jan 16 20:15:47 2015 +0100

    Bidi test case for xwidgets
    
    Create a buffer with some text and a button.
    Make the buffer be right-to-left.

diff --git a/test/xwidget-test-manual.el b/test/xwidget-test-manual.el
index 2ded786..85db981 100644
--- a/test/xwidget-test-manual.el
+++ b/test/xwidget-test-manual.el
@@ -39,6 +39,12 @@
               (xwidget-insert (point-min) 'Button  "button" 60  50)
               (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic))
 
+(xwidget-demo "a-button-bidi"
+              (xwidget-insert (point-min) 'Button  "button" 60  50)
+              (set (make-local-variable 'bidi-paragraph-direction) 'right-to-left)
+              (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic))
+
+
 (xwidget-demo "a-toggle-button"
               (xwidget-insert (point-min) 'ToggleButton  "toggle" 60  50)
               (define-key (current-local-map) [xwidget-event] 'xwidget-handler-demo-basic))

commit 4303d11029cf204cbf4ddf917ee0d37b08130570
Author: Dmitry Antipov 
Date:   Fri Jan 16 15:15:32 2015 +0300

    Prefer INLINE functions in font.h to match style used in lisp.h
    
    * font.h (FONTP, FONT_SPEC_P, FONT_ENTITY_P, FONT_OBJECT_P)
    (CHECK_FONT, CHECK_FONT_SPEC, CHECK_FONT_ENTITY, CHECK_FONT_OBJECT)
    (XFONT_SPEC, XFONT_ENTITY, XFONT_OBJECT, CHECK_FONT_GET_OBJECT):
    Now functions.
    * font.c (Ffont_otf_alternates, Fquery_font, Ffont_get_glyphs):
    * ftfont.c (ftfont_shape):
    * macfont.m (macfont_shape):
    * w32uniscribe.c (uniscribe_shape):
    * xftfont.c (xftfont_shape): Adjust CHECK_FONT_GET_OBJECT users.

diff --git a/src/ChangeLog b/src/ChangeLog
index 0601e5a..16e2fa1 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -18,6 +18,17 @@
 	* lisp.h (XTERMINAL): Add eassert.
 	* process.c (make_lisp_proc): Now static here.
 
+	Prefer INLINE functions in font.h to match style used in lisp.h.
+	* font.h (FONTP, FONT_SPEC_P, FONT_ENTITY_P, FONT_OBJECT_P)
+	(CHECK_FONT, CHECK_FONT_SPEC, CHECK_FONT_ENTITY, CHECK_FONT_OBJECT)
+	(XFONT_SPEC, XFONT_ENTITY, XFONT_OBJECT, CHECK_FONT_GET_OBJECT):
+	Now functions.
+	* font.c (Ffont_otf_alternates, Fquery_font, Ffont_get_glyphs):
+	* ftfont.c (ftfont_shape):
+	* macfont.m (macfont_shape):
+	* w32uniscribe.c (uniscribe_shape):
+	* xftfont.c (xftfont_shape): Adjust CHECK_FONT_GET_OBJECT users.
+
 2015-01-16  Paul Eggert  
 
 	Give up on -Wsuggest-attribute=const
diff --git a/src/font.c b/src/font.c
index 074e866..56a2782 100644
--- a/src/font.c
+++ b/src/font.c
@@ -4533,12 +4533,11 @@ character code corresponding to the glyph or nil if there's no
 corresponding character.  */)
   (Lisp_Object font_object, Lisp_Object character, Lisp_Object otf_features)
 {
-  struct font *font;
+  struct font *font = CHECK_FONT_GET_OBJECT (font_object);
   Lisp_Object gstring_in, gstring_out, g;
   Lisp_Object alternates;
   int i, num;
 
-  CHECK_FONT_GET_OBJECT (font_object, font);
   if (! font->driver->otf_drive)
     error ("Font backend %s can't drive OpenType GSUB table",
 	   SDATA (SYMBOL_NAME (font->driver->type)));
@@ -4648,12 +4647,9 @@ FEATURE is a symbol representing OpenType feature tag.
 If the font is not OpenType font, CAPABILITY is nil.  */)
   (Lisp_Object font_object)
 {
-  struct font *font;
-  Lisp_Object val;
+  struct font *font = CHECK_FONT_GET_OBJECT (font_object);
+  Lisp_Object val = make_uninit_vector (9);
 
-  CHECK_FONT_GET_OBJECT (font_object, font);
-
-  val = make_uninit_vector (9);
   ASET (val, 0, AREF (font_object, FONT_NAME_INDEX));
   ASET (val, 1, AREF (font_object, FONT_FILE_INDEX));
   ASET (val, 2, make_number (font->pixel_size));
@@ -4692,12 +4688,11 @@ the corresponding element is nil.  */)
   (Lisp_Object font_object, Lisp_Object from, Lisp_Object to,
    Lisp_Object object)
 {
-  struct font *font;
+  struct font *font = CHECK_FONT_GET_OBJECT (font_object);
   ptrdiff_t i, len;
   Lisp_Object *chars, vec;
   USE_SAFE_ALLOCA;
 
-  CHECK_FONT_GET_OBJECT (font_object, font);
   if (NILP (object))
     {
       ptrdiff_t charpos, bytepos;
diff --git a/src/font.h b/src/font.h
index 5a3e38a..efc184e 100644
--- a/src/font.h
+++ b/src/font.h
@@ -413,46 +413,91 @@ struct font_bitmap
 /* Predicates to check various font-related objects.  */
 
 /* True iff X is one of font-spec, font-entity, and font-object.  */
-#define FONTP(x) PSEUDOVECTORP (x, PVEC_FONT)
+INLINE bool
+FONTP (Lisp_Object x)
+{
+  return PSEUDOVECTORP (x, PVEC_FONT);
+}
+
 /* True iff X is font-spec.  */
-#define FONT_SPEC_P(x)	\
-  (FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_SPEC_MAX)
+INLINE bool
+FONT_SPEC_P (Lisp_Object x)
+{
+  return FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_SPEC_MAX;
+}
+
 /* True iff X is font-entity.  */
-#define FONT_ENTITY_P(x)	\
-  (FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_ENTITY_MAX)
+INLINE bool
+FONT_ENTITY_P (Lisp_Object x)
+{
+  return FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_ENTITY_MAX;
+}
+
 /* True iff X is font-object.  */
-#define FONT_OBJECT_P(x)	\
-  (FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_OBJECT_MAX)
-
-/* Check macros for various font-related objects.  */
-
-#define CHECK_FONT(x)	\
-  do { if (! FONTP (x)) wrong_type_argument (Qfont, x); } while (false)
-#define CHECK_FONT_SPEC(x)	\
-  do { if (! FONT_SPEC_P (x)) wrong_type_argument (Qfont_spec, x); } \
-  while (false)
-#define CHECK_FONT_ENTITY(x)	\
-  do { if (! FONT_ENTITY_P (x)) wrong_type_argument (Qfont_entity, x); } \
-  while (false)
-#define CHECK_FONT_OBJECT(x)	\
-  do { if (! FONT_OBJECT_P (x)) wrong_type_argument (Qfont_object, x); } \
-  while (false)
-
-#define CHECK_FONT_GET_OBJECT(x, font)	\
-  do {					\
-    CHECK_FONT_OBJECT (x);		\
-    font = XFONT_OBJECT (x);		\
-  } while (false)
+INLINE bool
+FONT_OBJECT_P (Lisp_Object x)
+{
+  return FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_OBJECT_MAX;
+}
+
+/* Type checking functions for various font-related objects.  */
+
+INLINE void
+CHECK_FONT (Lisp_Object x)
+{
+  CHECK_TYPE (FONTP (x), Qfont, x);
+}
+
+INLINE void
+CHECK_FONT_SPEC (Lisp_Object x)
+{
+  CHECK_TYPE (FONT_SPEC_P (x), Qfont_spec, x);
+}
+
+INLINE void
+CHECK_FONT_ENTITY (Lisp_Object x)
+{
+  CHECK_TYPE (FONT_ENTITY_P (x), Qfont_entity, x);
+}
+
+INLINE void
+CHECK_FONT_OBJECT (Lisp_Object x)
+{
+  CHECK_TYPE (FONT_OBJECT_P (x), Qfont_object, x);
+}
+
+/* C pointer extraction functions for various font-related objects.  */
+
+INLINE struct font_spec *
+XFONT_SPEC (Lisp_Object p)
+{
+  eassert (FONT_SPEC_P (p));
+  return XUNTAG (p, Lisp_Vectorlike);
+}
+
+INLINE struct font_entity *
+XFONT_ENTITY (Lisp_Object p)
+{
+  eassert (FONT_ENTITY_P (p));
+  return XUNTAG (p, Lisp_Vectorlike);
+}
+
+INLINE struct font *
+XFONT_OBJECT (Lisp_Object p)
+{
+  eassert (FONT_OBJECT_P (p));
+  return XUNTAG (p, Lisp_Vectorlike);
+}
 
-#define XFONT_SPEC(p)	\
-  (eassert (FONT_SPEC_P (p)), (struct font_spec *) XUNTAG (p, Lisp_Vectorlike))
-#define XFONT_ENTITY(p)	\
-  (eassert (FONT_ENTITY_P (p)), \
-   (struct font_entity *) XUNTAG (p, Lisp_Vectorlike))
-#define XFONT_OBJECT(p)	\
-  (eassert (FONT_OBJECT_P (p)), (struct font *) XUNTAG (p, Lisp_Vectorlike))
 #define XSETFONT(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_FONT))
 
+INLINE struct font *
+CHECK_FONT_GET_OBJECT (Lisp_Object x)
+{
+  CHECK_FONT_OBJECT (x);
+  return XFONT_OBJECT (x);
+}
+
 /* Number of pt per inch (from the TeXbook).  */
 #define PT_PER_INCH 72.27
 
diff --git a/src/ftfont.c b/src/ftfont.c
index 9707b6c..053b95f 100644
--- a/src/ftfont.c
+++ b/src/ftfont.c
@@ -2576,13 +2576,10 @@ ftfont_shape_by_flt (Lisp_Object lgstring, struct font *font,
 Lisp_Object
 ftfont_shape (Lisp_Object lgstring)
 {
-  struct font *font;
-  struct ftfont_info *ftfont_info;
-  OTF *otf;
+  struct font *font = CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring));
+  struct ftfont_info *ftfont_info = (struct ftfont_info *) font;
+  OTF *otf = ftfont_get_otf (ftfont_info);
 
-  CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring), font);
-  ftfont_info = (struct ftfont_info *) font;
-  otf = ftfont_get_otf (ftfont_info);
   if (! otf)
     return make_number (0);
   return ftfont_shape_by_flt (lgstring, font, ftfont_info->ft_size->face, otf,
diff --git a/src/macfont.m b/src/macfont.m
index f569934..cbf1b07 100644
--- a/src/macfont.m
+++ b/src/macfont.m
@@ -2788,9 +2788,9 @@ macfont_draw (struct glyph_string *s, int from, int to, int x, int y,
 static Lisp_Object
 macfont_shape (Lisp_Object lgstring)
 {
-  struct font *font;
-  struct macfont_info *macfont_info;
-  FontRef macfont;
+  struct font *font = CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring));
+  struct macfont_info *macfont_info = (struct macfont_info *) font;
+  FontRef macfont = macfont_info->macfont;
   ptrdiff_t glyph_len, len, i, j;
   CFIndex nonbmp_len;
   UniChar *unichars;
@@ -2799,10 +2799,6 @@ macfont_shape (Lisp_Object lgstring)
   CFIndex used = 0;
   struct mac_glyph_layout *glyph_layouts;
 
-  CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring), font);
-  macfont_info = (struct macfont_info *) font;
-  macfont = macfont_info->macfont;
-
   glyph_len = LGSTRING_GLYPH_LEN (lgstring);
   nonbmp_len = 0;
   for (i = 0; i < glyph_len; i++)
diff --git a/src/w32uniscribe.c b/src/w32uniscribe.c
index 2a7fe2e..9cd97e2 100644
--- a/src/w32uniscribe.c
+++ b/src/w32uniscribe.c
@@ -183,8 +183,9 @@ uniscribe_otf_capability (struct font *font)
 static Lisp_Object
 uniscribe_shape (Lisp_Object lgstring)
 {
-  struct font * font;
-  struct uniscribe_font_info * uniscribe_font;
+  struct font *font = CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring));
+  struct uniscribe_font_info *uniscribe_font
+    = (struct uniscribe_font_info *) font;
   EMACS_UINT nchars;
   int nitems, max_items, i, max_glyphs, done_glyphs;
   wchar_t *chars;
@@ -199,9 +200,6 @@ uniscribe_shape (Lisp_Object lgstring)
   HDC context = NULL;
   HFONT old_font = NULL;
 
-  CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring), font);
-  uniscribe_font = (struct uniscribe_font_info *) font;
-
   /* Get the chars from lgstring in a form we can use with uniscribe.  */
   max_glyphs = nchars = LGSTRING_GLYPH_LEN (lgstring);
   done_glyphs = 0;
diff --git a/src/xftfont.c b/src/xftfont.c
index c587d81..054b38e 100644
--- a/src/xftfont.c
+++ b/src/xftfont.c
@@ -640,13 +640,11 @@ xftfont_draw (struct glyph_string *s, int from, int to, int x, int y,
 static Lisp_Object
 xftfont_shape (Lisp_Object lgstring)
 {
-  struct font *font;
-  struct xftfont_info *xftfont_info;
+  struct font *font = CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring));
+  struct xftfont_info *xftfont_info = (struct xftfont_info *) font;
   FT_Face ft_face;
   Lisp_Object val;
 
-  CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring), font);
-  xftfont_info = (struct xftfont_info *) font;
   ft_face = XftLockFace (xftfont_info->xftfont);
   xftfont_info->ft_size = ft_face->size;
   val = ftfont_driver.shape (lgstring);

commit 7ee2733f1ecd3d4f2bd782aa802b090c77fbb135
Author: Dmitry Antipov 
Date:   Fri Jan 16 14:41:20 2015 +0300

    Tiny lisp.h cleanup
    
    * lisp.h (XTERMINAL): Add eassert.
    * process.c (make_lisp_proc): Now static here.

diff --git a/src/ChangeLog b/src/ChangeLog
index 63da5cb..0601e5a 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -15,6 +15,9 @@
 	* window.c (allocate_window): Now static here.
 	Use ALLOCATE_ZEROED_PSEUDOVECTOR.  Add comment.
 
+	* lisp.h (XTERMINAL): Add eassert.
+	* process.c (make_lisp_proc): Now static here.
+
 2015-01-16  Paul Eggert  
 
 	Give up on -Wsuggest-attribute=const
diff --git a/src/lisp.h b/src/lisp.h
index fd0a034..7c7d3f3 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -608,6 +608,7 @@ INLINE bool SUBRP (Lisp_Object);
 INLINE bool (SYMBOLP) (Lisp_Object);
 INLINE bool (VECTORLIKEP) (Lisp_Object);
 INLINE bool WINDOWP (Lisp_Object);
+INLINE bool TERMINALP (Lisp_Object);
 INLINE struct Lisp_Save_Value *XSAVE_VALUE (Lisp_Object);
 INLINE struct Lisp_Symbol *(XSYMBOL) (Lisp_Object);
 INLINE void *(XUNTAG) (Lisp_Object, int);
@@ -998,6 +999,7 @@ XWINDOW (Lisp_Object a)
 INLINE struct terminal *
 XTERMINAL (Lisp_Object a)
 {
+  eassert (TERMINALP (a));
   return XUNTAG (a, Lisp_Vectorlike);
 }
 
@@ -1060,12 +1062,6 @@ builtin_lisp_symbol (int index)
   return make_lisp_symbol (lispsym + index);
 }
 
-INLINE Lisp_Object
-make_lisp_proc (struct Lisp_Process *p)
-{
-  return make_lisp_ptr (p, Lisp_Vectorlike);
-}
-
 #define XSETINT(a, b) ((a) = make_number (b))
 #define XSETFASTINT(a, b) ((a) = make_natnum (b))
 #define XSETCONS(a, b) ((a) = make_lisp_ptr (b, Lisp_Cons))
diff --git a/src/process.c b/src/process.c
index 3038054..0789f20 100644
--- a/src/process.c
+++ b/src/process.c
@@ -422,6 +422,11 @@ pset_write_queue (struct Lisp_Process *p, Lisp_Object val)
 }
 
 
+static Lisp_Object
+make_lisp_proc (struct Lisp_Process *p)
+{
+  return make_lisp_ptr (p, Lisp_Vectorlike);
+}
 
 static struct fd_callback_data
 {

commit b689b906f27c326c4c7531d4987ffaae49b50dcd
Author: Jorgen Schaefer 
Date:   Sun Dec 7 22:28:38 2014 +0100

    Package archives now have priorities.
    
    * lisp/package.el: Provide repository priorities.
    (package-archive-priorities): New variable.
    (package--add-to-alist): New function.
    (package--add-to-archive-contents): Use it.
    (package-menu--find-upgrades): Use it as well. Small clean up to
    make the use of the package name here explicit.
    (package-archive-priority): New function.
    (package-desc-priority-version): New function.
    
    Fixes: debbugs:19296

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index fbfd68e..d46726f 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,14 @@
+2015-01-16  Jorgen Schaefer  
+
+	* lisp/package.el: Provide repository priorities.
+	(package-archive-priorities): New variable.
+	(package--add-to-alist): New function.
+	(package--add-to-archive-contents): Use it.
+	(package-menu--find-upgrades): Use it as well. Small clean up to
+	make the use of the package name here explicit.
+	(package-archive-priority): New function.
+	(package-desc-priority-version): New function.
+
 2015-01-16  Daniel Colascione  
 
 	* cus-start.el (all): Make `ring-bell-function' customizable.
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index 79f8b65..5336271 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -228,6 +228,22 @@ a package can run arbitrary code."
   :group 'package
   :version "24.1")
 
+(defcustom package-archive-priorities nil
+  "An alist of priorities for packages.
+
+Each element has the form (ARCHIVE-ID . PRIORITY).
+
+When installing packages, the package with the highest version
+number from the archive with the highest priority is
+selected. When higher versions are available from archives with
+lower priorities, the user has to select those manually.
+
+Archives not in this list have the priority 0."
+  :type 'integer
+  :risky t
+  :group 'package
+  :version "25.1")
+
 (defcustom package-pinned-packages nil
   "An alist of packages that are pinned to specific archives.
 This can be useful if you have multiple package archives enabled,
@@ -1114,23 +1130,32 @@ Also, add the originating archive to the `package-desc' structure."
                         ;; Older archive-contents files have only 4
                         ;; elements here.
                         (package--ac-desc-extras (cdr package)))))
-         (existing-packages (assq name package-archive-contents))
          (pinned-to-archive (assoc name package-pinned-packages)))
-    (cond
-     ;; Skip entirely if pinned to another archive.
-     ((and pinned-to-archive
-           (not (equal (cdr pinned-to-archive) archive)))
-      nil)
-     ((not existing-packages)
-      (push (list name pkg-desc) package-archive-contents))
-     (t
-      (while
-          (if (and (cdr existing-packages)
-                   (version-list-<
-                    version (package-desc-version (cadr existing-packages))))
-              (setq existing-packages (cdr existing-packages))
-            (push pkg-desc (cdr existing-packages))
-            nil))))))
+    ;; Skip entirely if pinned to another archive.
+    (when (not (and pinned-to-archive
+                    (not (equal (cdr pinned-to-archive) archive))))
+      (setq package-archive-contents
+            (package--add-to-alist pkg-desc package-archive-contents)))))
+
+(defun package--add-to-alist (pkg-desc alist)
+  "Add PKG-DESC to ALIST.
+
+Packages are grouped by name. The package descriptions are sorted
+by version number."
+  (let* ((name (package-desc-name pkg-desc))
+         (priority-version (package-desc-priority-version pkg-desc))
+         (existing-packages (assq name alist)))
+    (if (not existing-packages)
+        (cons (list name pkg-desc)
+              alist)
+      (while (if (and (cdr existing-packages)
+                      (version-list-< priority-version
+                                      (package-desc-priority-version
+                                       (cadr existing-packages))))
+                 (setq existing-packages (cdr existing-packages))
+               (push pkg-desc (cdr existing-packages))
+               nil))
+      alist)))
 
 (defun package-download-transaction (packages)
   "Download and install all the packages in PACKAGES.
@@ -1319,6 +1344,25 @@ The file can either be a tar file or an Emacs Lisp file."
   "Return the archive containing the package NAME."
   (cdr (assoc (package-desc-archive desc) package-archives)))
 
+(defun package-archive-priority (archive)
+  "Return the priority of ARCHIVE.
+
+The archive priorities are specified in
+`package-archive-priorities'. If not given there, the priority
+defaults to 0."
+  (or (cdr (assoc archive package-archive-priorities))
+      0))
+
+(defun package-desc-priority-version (pkg-desc)
+  "Return the version PKG-DESC with the archive priority prepended.
+
+This allows for easy comparison of package versions from
+different archives if archive priorities are meant to be taken in
+consideration."
+  (cons (package-archive-priority
+         (package-desc-archive pkg-desc))
+        (package-desc-version pkg-desc)))
+
 (defun package--download-one-archive (archive file)
   "Retrieve an archive file FILE from ARCHIVE, and cache it.
 ARCHIVE should be a cons cell of the form (NAME . LOCATION),
@@ -1991,18 +2035,18 @@ If optional arg BUTTON is non-nil, describe its associated package."
       ;; ENTRY is (PKG-DESC [NAME VERSION STATUS DOC])
       (let ((pkg-desc (car entry))
 	    (status (aref (cadr entry) 2)))
-	(cond ((member status '("installed" "unsigned"))
-	       (push pkg-desc installed))
-	      ((member status '("available" "new"))
-	       (push (cons (package-desc-name pkg-desc) pkg-desc)
-                     available)))))
+        (cond ((member status '("installed" "unsigned"))
+               (push pkg-desc installed))
+              ((member status '("available" "new"))
+               (setq available (package--add-to-alist pkg-desc available))))))
     ;; Loop through list of installed packages, finding upgrades.
     (dolist (pkg-desc installed)
-      (let ((avail-pkg (assq (package-desc-name pkg-desc) available)))
-	(and avail-pkg
-	     (version-list-< (package-desc-version pkg-desc)
-                             (package-desc-version (cdr avail-pkg)))
-	     (push avail-pkg upgrades))))
+      (let* ((name (package-desc-name pkg-desc))
+             (avail-pkg (cadr (assq name available))))
+        (and avail-pkg
+             (version-list-< (package-desc-priority-version pkg-desc)
+                             (package-desc-priority-version avail-pkg))
+             (push (cons name avail-pkg) upgrades))))
     upgrades))
 
 (defun package-menu-mark-upgrades ()
diff --git a/test/automated/package-test.el b/test/automated/package-test.el
index 27a71c5..89e0bc1 100644
--- a/test/automated/package-test.el
+++ b/test/automated/package-test.el
@@ -230,6 +230,23 @@ Must called from within a `tar-mode' buffer."
     (package-refresh-contents)
     (package-install 'simple-single)))
 
+(ert-deftest package-test-install-prioritized ()
+  "Install a lower version from a higher-prioritized archive."
+  (with-package-test ()
+    (let* ((newer-version (expand-file-name "data/package/newer-versions"
+                                            package-test-file-dir))
+           (package-archives `(("older" . ,package-test-data-dir)
+                               ("newer" . ,newer-version)))
+           (package-archive-priorities '(("newer" . 100))))
+
+      (package-initialize)
+      (package-refresh-contents)
+      (package-install 'simple-single)
+
+      (let ((installed (cdr (assq 'simple-single package-alist))))
+        (should (version-list-= '(1 3)
+                                (package-desc-version installed)))))))
+
 (ert-deftest package-test-install-multifile ()
   "Check properties of the installed multi-file package."
   (with-package-test (:basedir "data/package" :install '(multi-file))

commit 5d244fec3e0278110b686d66410191b89a463b93
Author: Eli Zaretskii 
Date:   Fri Jan 16 11:33:08 2015 +0200

    Support Make verbosity levels in w32 targets previously left out
    
     nt/Makefile.in (AM_V_CC, am__v_CC_, am__v_CC_0, am__v_CC_1)
     (AM_V_CCLD, am__v_CCLD_, am__v_CCLD_0, am__v_CCLD_1, AM_V_RC)
     (am__v_RC_, am__v_RC_0, am__v_RC_1): New macros.
     (addpm${EXEEXT}, ddeclient${EXEEXT}, cmdproxy${EXEEXT})
     (runemacs${EXEEXT}): Use $(AM_V_CCLD).
     (emacs.res, ../src/emacs.res): Use $(AM_V_RC).
    
     lib-src/Makefile.in (AM_V_RC, am__v_RC_, am__v_RC_0, am__v_RC_1): New
     macros.
     (emacsclient.res): Use $(AM_V_RC).

diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog
index 7cbf327..37f037e 100644
--- a/lib-src/ChangeLog
+++ b/lib-src/ChangeLog
@@ -1,3 +1,9 @@
+2015-01-16  Eli Zaretskii  
+
+	* Makefile.in (AM_V_RC, am__v_RC_, am__v_RC_0, am__v_RC_1): New
+	macros.
+	(emacsclient.res): Use $(AM_V_RC).
+
 2015-01-16  Paul Eggert  
 
 	Give up on -Wsuggest-attribute=const
diff --git a/lib-src/Makefile.in b/lib-src/Makefile.in
index 22a5eca..01592bd 100644
--- a/lib-src/Makefile.in
+++ b/lib-src/Makefile.in
@@ -58,6 +58,11 @@ am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 =
 
+AM_V_RC = $(am__v_RC_@AM_V@)
+am__v_RC_ = $(am__v_RC_@AM_DEFAULT_V@)
+am__v_RC_0 = @echo "  RC      " $@;
+am__v_RC_1 =
+
 # ==================== Where To Install Things ====================
 
 # Location to install Emacs.app under GNUstep / Mac OS X.
@@ -381,6 +386,6 @@ update-game-score${EXEEXT}: ${srcdir}/update-game-score.c $(NTLIB) $(config_h)
 	  $< $(NTLIB) $(LOADLIBES) -o $@
 
 emacsclient.res: ../nt/emacsclient.rc $(NTINC)/../icons/emacs.ico
-	$(WINDRES) -O coff --include-dir=$(NTINC)/.. -o $@ $<
+	$(AM_V_RC)$(WINDRES) -O coff --include-dir=$(NTINC)/.. -o $@ $<
 
 ## Makefile ends here.
diff --git a/nt/ChangeLog b/nt/ChangeLog
index 5f61042..b9966fb 100644
--- a/nt/ChangeLog
+++ b/nt/ChangeLog
@@ -1,3 +1,12 @@
+2015-01-16  Eli Zaretskii  
+
+	* Makefile.in (AM_V_CC, am__v_CC_, am__v_CC_0, am__v_CC_1)
+	(AM_V_CCLD, am__v_CCLD_, am__v_CCLD_0, am__v_CCLD_1, AM_V_RC)
+	(am__v_RC_, am__v_RC_0, am__v_RC_1): New macros.
+	(addpm${EXEEXT}, ddeclient${EXEEXT}, cmdproxy${EXEEXT})
+	(runemacs${EXEEXT}): Use $(AM_V_CCLD).
+	(emacs.res, ../src/emacs.res): Use $(AM_V_RC).
+
 2014-12-26  Eli Zaretskii  
 
 	* gnulib.mk (stpcpy, string): Sync with the latest change in
diff --git a/nt/Makefile.in b/nt/Makefile.in
index 01631d8..fc6887f 100644
--- a/nt/Makefile.in
+++ b/nt/Makefile.in
@@ -41,6 +41,24 @@ WERROR_CFLAGS = @WERROR_CFLAGS@
 # Program name transformation.
 TRANSFORM = @program_transform_name@
 
+# 'make' verbosity.
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 =
+
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 =
+
+AM_V_RC = $(am__v_RC_@AM_V@)
+am__v_RC_ = $(am__v_RC_@AM_DEFAULT_V@)
+am__v_RC_0 = @echo "  RC      " $@;
+am__v_RC_1 =
+
 # ==================== Where To Install Things ====================
 
 # The default location for installation.  Everything is placed in
@@ -213,18 +231,18 @@ TAGS: ${EXE_FILES:${EXEEXT}=.c}
 
 ## Build the programs
 addpm${EXEEXT}: ${srcdir}/addpm.c ../src/epaths.h
-	$(CC) ${ALL_CFLAGS} $< $(LIBS_ADDPM) -o $@
+	$(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $< $(LIBS_ADDPM) -o $@
 
 ddeclient${EXEEXT}: ${srcdir}/ddeclient.c
-	$(CC) ${ALL_CFLAGS} $< -o $@
+	$(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $< -o $@
 
 cmdproxy${EXEEXT}: ${srcdir}/cmdproxy.c
-	$(CC) ${ALL_CFLAGS} $< -o $@
+	$(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $< -o $@
 
 runemacs${EXEEXT}: ${srcdir}/runemacs.c $(EMACSRES)
-	$(CC) ${ALL_CFLAGS} $^ -mwindows -o $@
+	$(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $^ -mwindows -o $@
 
 ## Also used in ../src/Makefile.
 emacs.res ../src/emacs.res: emacs.rc ${srcdir}/icons/emacs.ico \
   ${srcdir}/icons/hand.cur ${srcdir}/$(EMACS_MANIFEST)
-	${WINDRES} -I ${srcdir} -O coff -o $@ $<
+	$(AM_V_RC)${WINDRES} -I ${srcdir} -O coff -o $@ $<

commit 3b48f99542d822c0647334524035e93f4a094358
Author: Dmitry Antipov 
Date:   Fri Jan 16 11:42:24 2015 +0300

    Tune pseudovector allocation assuming Qnil == 0
    
    * alloc.c (allocate_pseudovector): Use memset for both
    Lisp_Objects and regular slots.  Add zerolen arg.
    * lisp.h (allocate_pseudovector): Adjust prototype.
    (ALLOCATE_PSEUDOVECTOR): Adjust user.
    (ALLOCATE_ZEROED_PSEUDOVECTOR): New macro.
    (allocate_hash_table, allocate_window, allocate_frame)
    (allocate_process, allocate_terminal): Remove prototypes.
    * fns.c (allocate_hash_table): Now static here.
    * frame.c (allocate_frame):
    * process.c (allocate_process):
    * terminal.c (allocate_terminal):
    * window.c (allocate_window): Now static here.
    Use ALLOCATE_ZEROED_PSEUDOVECTOR.  Add comment.

diff --git a/src/ChangeLog b/src/ChangeLog
index ae634f3..63da5cb 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,20 @@
+2015-01-16  Dmitry Antipov  
+
+	Tune pseudovector allocation assuming Qnil == 0.
+	* alloc.c (allocate_pseudovector): Use memset for both
+	Lisp_Objects and regular slots.  Add zerolen arg.
+	* lisp.h (allocate_pseudovector): Adjust prototype.
+	(ALLOCATE_PSEUDOVECTOR): Adjust user.
+	(ALLOCATE_ZEROED_PSEUDOVECTOR): New macro.
+	(allocate_hash_table, allocate_window, allocate_frame)
+	(allocate_process, allocate_terminal): Remove prototypes.
+	* fns.c (allocate_hash_table): Now static here.
+	* frame.c (allocate_frame):
+	* process.c (allocate_process):
+	* terminal.c (allocate_terminal):
+	* window.c (allocate_window): Now static here.
+	Use ALLOCATE_ZEROED_PSEUDOVECTOR.  Add comment.
+
 2015-01-16  Paul Eggert  
 
 	Give up on -Wsuggest-attribute=const
diff --git a/src/alloc.c b/src/alloc.c
index 7c93733..22a15b4 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -3163,19 +3163,19 @@ allocate_vector (EMACS_INT len)
 /* Allocate other vector-like structures.  */
 
 struct Lisp_Vector *
-allocate_pseudovector (int memlen, int lisplen, enum pvec_type tag)
+allocate_pseudovector (int memlen, int lisplen,
+		       int zerolen, enum pvec_type tag)
 {
   struct Lisp_Vector *v = allocate_vectorlike (memlen);
-  int i;
 
   /* Catch bogus values.  */
   eassert (tag <= PVEC_FONT);
   eassert (memlen - lisplen <= (1 << PSEUDOVECTOR_REST_BITS) - 1);
   eassert (lisplen <= (1 << PSEUDOVECTOR_SIZE_BITS) - 1);
 
-  /* Only the first lisplen slots will be traced normally by the GC.  */
-  for (i = 0; i < lisplen; ++i)
-    v->contents[i] = Qnil;
+  /* Only the first lisplen slots will be traced normally by the GC.
+     But since Qnil == 0, we can memset Lisp_Object slots as well.  */
+  memset (v->contents, 0, zerolen * word_size);
 
   XSETPVECTYPESIZE (v, tag, lisplen, memlen - lisplen);
   return v;
@@ -3194,60 +3194,6 @@ allocate_buffer (void)
   return b;
 }
 
-struct Lisp_Hash_Table *
-allocate_hash_table (void)
-{
-  return ALLOCATE_PSEUDOVECTOR (struct Lisp_Hash_Table, count, PVEC_HASH_TABLE);
-}
-
-struct window *
-allocate_window (void)
-{
-  struct window *w;
-
-  w = ALLOCATE_PSEUDOVECTOR (struct window, current_matrix, PVEC_WINDOW);
-  /* Users assumes that non-Lisp data is zeroed.  */
-  memset (&w->current_matrix, 0,
-	  sizeof (*w) - offsetof (struct window, current_matrix));
-  return w;
-}
-
-struct terminal *
-allocate_terminal (void)
-{
-  struct terminal *t;
-
-  t = ALLOCATE_PSEUDOVECTOR (struct terminal, next_terminal, PVEC_TERMINAL);
-  /* Users assumes that non-Lisp data is zeroed.  */
-  memset (&t->next_terminal, 0,
-	  sizeof (*t) - offsetof (struct terminal, next_terminal));
-  return t;
-}
-
-struct frame *
-allocate_frame (void)
-{
-  struct frame *f;
-
-  f = ALLOCATE_PSEUDOVECTOR (struct frame, face_cache, PVEC_FRAME);
-  /* Users assumes that non-Lisp data is zeroed.  */
-  memset (&f->face_cache, 0,
-	  sizeof (*f) - offsetof (struct frame, face_cache));
-  return f;
-}
-
-struct Lisp_Process *
-allocate_process (void)
-{
-  struct Lisp_Process *p;
-
-  p = ALLOCATE_PSEUDOVECTOR (struct Lisp_Process, pid, PVEC_PROCESS);
-  /* Users assumes that non-Lisp data is zeroed.  */
-  memset (&p->pid, 0,
-	  sizeof (*p) - offsetof (struct Lisp_Process, pid));
-  return p;
-}
-
 DEFUN ("make-vector", Fmake_vector, Smake_vector, 2, 2, 0,
        doc: /* Return a newly created vector of length LENGTH, with each element being INIT.
 See also the function `vector'.  */)
diff --git a/src/fns.c b/src/fns.c
index 91cd513..ca3d98b 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -3814,6 +3814,15 @@ hashfn_user_defined (struct hash_table_test *ht, Lisp_Object key)
   return hashfn_eq (ht, hash);
 }
 
+/* Allocate basically initialized hash table.  */
+
+static struct Lisp_Hash_Table *
+allocate_hash_table (void)
+{
+  return ALLOCATE_PSEUDOVECTOR (struct Lisp_Hash_Table,
+				count, PVEC_HASH_TABLE);
+}
+
 /* An upper bound on the size of a hash table index.  It must fit in
    ptrdiff_t and be a valid Emacs fixnum.  */
 #define INDEX_SIZE_BOUND \
diff --git a/src/font.c b/src/font.c
index a68c3c7..074e866 100644
--- a/src/font.c
+++ b/src/font.c
@@ -156,7 +156,7 @@ font_make_spec (void)
   struct font_spec *spec
     = ((struct font_spec *)
        allocate_pseudovector (VECSIZE (struct font_spec),
-			      FONT_SPEC_MAX, PVEC_FONT));
+			      FONT_SPEC_MAX, FONT_SPEC_MAX, PVEC_FONT));
   XSETFONT (font_spec, spec);
   return font_spec;
 }
@@ -168,7 +168,7 @@ font_make_entity (void)
   struct font_entity *entity
     = ((struct font_entity *)
        allocate_pseudovector (VECSIZE (struct font_entity),
-			      FONT_ENTITY_MAX, PVEC_FONT));
+			      FONT_ENTITY_MAX, FONT_ENTITY_MAX, PVEC_FONT));
   XSETFONT (font_entity, entity);
   return font_entity;
 }
@@ -181,7 +181,8 @@ font_make_object (int size, Lisp_Object entity, int pixelsize)
 {
   Lisp_Object font_object;
   struct font *font
-    = (struct font *) allocate_pseudovector (size, FONT_OBJECT_MAX, PVEC_FONT);
+    = (struct font *) allocate_pseudovector (size, FONT_OBJECT_MAX,
+					     FONT_OBJECT_MAX, PVEC_FONT);
   int i;
 
   /* GC can happen before the driver is set up,
diff --git a/src/frame.c b/src/frame.c
index ec580f3..2ce5a62 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -570,6 +570,13 @@ adjust_frame_size (struct frame *f, int new_width, int new_height, int inhibit,
   run_window_configuration_change_hook (f);
 }
 
+/* Allocate basically initialized frame.  */
+
+static struct frame *
+allocate_frame (void)
+{
+  return ALLOCATE_ZEROED_PSEUDOVECTOR (struct frame, face_cache, PVEC_FRAME);
+}
 
 struct frame *
 make_frame (bool mini_p)
diff --git a/src/lisp.h b/src/lisp.h
index 51556fc..fd0a034 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -3780,16 +3780,25 @@ make_uninit_sub_char_table (int depth, int min_char)
   return v;
 }
 
-extern struct Lisp_Vector *allocate_pseudovector (int, int, enum pvec_type);
-#define ALLOCATE_PSEUDOVECTOR(typ,field,tag)				\
-  ((typ*)								\
-   allocate_pseudovector						\
-       (VECSIZE (typ), PSEUDOVECSIZE (typ, field), tag))
-extern struct Lisp_Hash_Table *allocate_hash_table (void);
-extern struct window *allocate_window (void);
-extern struct frame *allocate_frame (void);
-extern struct Lisp_Process *allocate_process (void);
-extern struct terminal *allocate_terminal (void);
+extern struct Lisp_Vector *allocate_pseudovector (int, int, int,
+						  enum pvec_type);
+
+/* Allocate partially initialized pseudovector where all Lisp_Object
+   slots are set to Qnil but the rest (if any) is left uninitialized.  */
+
+#define ALLOCATE_PSEUDOVECTOR(type, field, tag)			       \
+  ((type *) allocate_pseudovector (VECSIZE (type),		       \
+				   PSEUDOVECSIZE (type, field),	       \
+				   PSEUDOVECSIZE (type, field), tag))
+
+/* Allocate fully initialized pseudovector where all Lisp_Object
+   slots are set to Qnil and the rest (if any) is zeroed.  */
+
+#define ALLOCATE_ZEROED_PSEUDOVECTOR(type, field, tag)		       \
+  ((type *) allocate_pseudovector (VECSIZE (type),		       \
+				   PSEUDOVECSIZE (type, field),	       \
+				   VECSIZE (type), tag))
+
 extern bool gc_in_progress;
 extern bool abort_on_gc;
 extern Lisp_Object make_float (double);
diff --git a/src/process.c b/src/process.c
index 77c94f2..3038054 100644
--- a/src/process.c
+++ b/src/process.c
@@ -687,7 +687,15 @@ allocate_pty (char pty_name[PTY_NAME_SIZE])
 #endif /* HAVE_PTYS */
   return -1;
 }
-
+
+/* Allocate basically initialized process.  */
+
+static struct Lisp_Process *
+allocate_process (void)
+{
+  return ALLOCATE_ZEROED_PSEUDOVECTOR (struct Lisp_Process, pid, PVEC_PROCESS);
+}
+
 static Lisp_Object
 make_process (Lisp_Object name)
 {
diff --git a/src/terminal.c b/src/terminal.c
index 92befd2..b48d062 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -254,6 +254,15 @@ get_named_terminal (const char *name)
   return NULL;
 }
 
+/* Allocate basically initialized terminal.  */
+
+static struct terminal *
+allocate_terminal (void)
+{
+  return ALLOCATE_ZEROED_PSEUDOVECTOR
+    (struct terminal, next_terminal, PVEC_TERMINAL);
+}
+
 /* Create a new terminal object of TYPE and add it to the terminal list.  RIF
    may be NULL if this terminal type doesn't support window-based redisplay.  */
 
diff --git a/src/window.c b/src/window.c
index e5ddef5..53a235f 100644
--- a/src/window.c
+++ b/src/window.c
@@ -3642,7 +3642,16 @@ temp_output_buffer_show (register Lisp_Object buf)
       }
     }
 }
-
+
+/* Allocate basically initialized window.  */
+
+static struct window *
+allocate_window (void)
+{
+  return ALLOCATE_ZEROED_PSEUDOVECTOR
+    (struct window, current_matrix, PVEC_WINDOW);
+}
+
 /* Make new window, have it replace WINDOW in window-tree, and make
    WINDOW its only vertical child (HORFLAG 1 means make WINDOW its only
    horizontal child).   */

commit 0ecb1eb988d25d3511e11ac39e05550cec57dc3f
Author: Daniel Colascione 
Date:   Thu Jan 15 20:51:48 2015 -0800

    Make `ring-bell-function' customizable.
    
    * lisp/cus-start.el (all): Make `ring-bell-function' customizable.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 908c027..fbfd68e 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,7 @@
+2015-01-16  Daniel Colascione  
+
+	* cus-start.el (all): Make `ring-bell-function' customizable.
+
 2015-01-16  Dmitry Gutov  
 
 	* vc/vc-svn.el (vc-svn-dir-status-files): Pass t as
diff --git a/lisp/cus-start.el b/lisp/cus-start.el
index 299b18d..71506cb 100644
--- a/lisp/cus-start.el
+++ b/lisp/cus-start.el
@@ -421,6 +421,12 @@ Leaving \"Default\" unchecked is equivalent with specifying a default of
 						    "21.1")
              ;; term.c
              (visible-cursor cursor boolean "22.1")
+             ;; terminal.c
+             (ring-bell-function display
+              (choice
+               (const :tag "Default" nil)
+               (const :tag "Silent" ignore)
+               function))
 	     ;; undo.c
 	     (undo-limit undo integer)
 	     (undo-strong-limit undo integer)

commit 0adc75af1833cd46aab339ce7f1ca5d6919c70af
Author: Paul Eggert 
Date:   Thu Jan 15 20:37:05 2015 -0800

    Give up on -Wsuggest-attribute=const
    
    The attribute doesn't help performance significantly, and the
    warning seems to be more trouble than it's worth.  See the thread at:
    http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00361.html
    * configure.ac (WERROR_CFLAGS): Don't use -Wsuggest-attribute=const.
    * lib-src/make-docfile.c (write_globals):
    Remove special hack for Fnext_read_file_uses_dialog_p.
    * src/decompress.c (Fzlib_available_p):
    * src/gnutls.c (Fgnutls_available_p):
    * src/gtkutil.h (xg_uses_old_file_dialog):
    * src/xdisp.c (Ftool_bar_height):
    * src/xmenu.c (popup_activated):
    No longer const, since it's not const on at lest some
    configurations, and we shouldn't lie to the compiler.

diff --git a/ChangeLog b/ChangeLog
index cca9100..309b04f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2015-01-16  Paul Eggert  
+
+	Give up on -Wsuggest-attribute=const
+	The attribute doesn't help performance significantly, and the
+	warning seems to be more trouble than it's worth.  See the thread at:
+	http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00361.html
+	* configure.ac (WERROR_CFLAGS): Don't use -Wsuggest-attribute=const.
+
 2015-01-11  Paul Eggert  
 
 	Default to 'configure --enable-silent-rules'
diff --git a/configure.ac b/configure.ac
index 4cad214..9db4bde 100644
--- a/configure.ac
+++ b/configure.ac
@@ -892,6 +892,10 @@ else
   # Emacs's use of alloca inhibits protecting the stack.
   nw="$nw -Wstack-protector"
 
+  # Emacs's use of partly-const functions such as Fgnutls_available_p
+  # make this option problematic.
+  nw="$nw -Wsuggest-attribute=const"
+
   # Emacs's use of partly-pure functions such as CHECK_TYPE make this
   # option problematic.
   nw="$nw -Wsuggest-attribute=pure"
@@ -1974,7 +1978,6 @@ fi
 if test "$window_system" = none && test "$gl_gcc_warnings" = yes; then
    # Too many warnings for now.
    nw=
-   nw="$nw -Wsuggest-attribute=const"
    nw="$nw -Wsuggest-attribute=noreturn"
    gl_MANYWARN_COMPLEMENT([WARN_CFLAGS], [$WARN_CFLAGS], [$nw])
 
diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog
index e9205fd..7cbf327 100644
--- a/lib-src/ChangeLog
+++ b/lib-src/ChangeLog
@@ -1,3 +1,9 @@
+2015-01-16  Paul Eggert  
+
+	Give up on -Wsuggest-attribute=const
+	* make-docfile.c (write_globals):
+	Remove special hack for Fnext_read_file_uses_dialog_p
+
 2015-01-13  Paul Eggert  
 
 	Don't say Fnext_read_file_uses_dialog_p is const
diff --git a/lib-src/make-docfile.c b/lib-src/make-docfile.c
index 741fa4b..79d421a 100644
--- a/lib-src/make-docfile.c
+++ b/lib-src/make-docfile.c
@@ -729,18 +729,6 @@ write_globals (void)
 
 	  if (globals[i].flags & DEFUN_const)
 	    fputs (" ATTRIBUTE_CONST", stdout);
-	  else if (strcmp (globals[i].name, "Fnext_read_file_uses_dialog_p")
-		   == 0)
-	    {
-	      /* It would be nice to have a cleaner way to deal with this
-		 special hack.  */
-	      fputs (("\n"
-		      "#if ! (defined USE_GTK || defined USE_MOTIF \\\n"
-		      "       || defined HAVE_NS || defined HAVE_NTGUI)\n"
-		      "\tATTRIBUTE_CONST\n"
-		      "#endif\n"),
-		     stdout);
-	    }
 
 	  puts (";");
 	}
diff --git a/src/ChangeLog b/src/ChangeLog
index 40d8b26..ae634f3 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,14 @@
+2015-01-16  Paul Eggert  
+
+	Give up on -Wsuggest-attribute=const
+	* decompress.c (Fzlib_available_p):
+	* gnutls.c (Fgnutls_available_p):
+	* gtkutil.h (xg_uses_old_file_dialog):
+	* xdisp.c (Ftool_bar_height):
+	* xmenu.c (popup_activated):
+	No longer const, since it's not const on at lest some
+	configurations, and we shouldn't lie to the compiler.
+
 2015-01-15  Eli Zaretskii  
 
 	* fileio.c: Include binary-io.h.
diff --git a/src/decompress.c b/src/decompress.c
index b78dace..b14f0a2 100644
--- a/src/decompress.c
+++ b/src/decompress.c
@@ -88,8 +88,7 @@ unwind_decompress (void *ddata)
 }
 
 DEFUN ("zlib-available-p", Fzlib_available_p, Szlib_available_p, 0, 0, 0,
-       doc: /* Return t if zlib decompression is available in this instance of Emacs.  */
-       attributes: const)
+       doc: /* Return t if zlib decompression is available in this instance of Emacs.  */)
      (void)
 {
 #ifdef WINDOWSNT
diff --git a/src/gnutls.c b/src/gnutls.c
index 909542f..35f0eb4 100644
--- a/src/gnutls.c
+++ b/src/gnutls.c
@@ -1619,8 +1619,7 @@ This function may also return `gnutls-e-again', or
 #endif	/* HAVE_GNUTLS */
 
 DEFUN ("gnutls-available-p", Fgnutls_available_p, Sgnutls_available_p, 0, 0, 0,
-       doc: /* Return t if GnuTLS is available in this instance of Emacs.  */
-       attributes: const)
+       doc: /* Return t if GnuTLS is available in this instance of Emacs.  */)
      (void)
 {
 #ifdef HAVE_GNUTLS
diff --git a/src/gtkutil.h b/src/gtkutil.h
index 7d712c9..0ac49ca 100644
--- a/src/gtkutil.h
+++ b/src/gtkutil.h
@@ -78,7 +78,7 @@ typedef struct xg_menu_item_cb_data_
 
 } xg_menu_item_cb_data;
 
-extern bool xg_uses_old_file_dialog (void) ATTRIBUTE_CONST;
+extern bool xg_uses_old_file_dialog (void);
 
 extern char *xg_get_file_name (struct frame *f,
                                char *prompt,
diff --git a/src/xdisp.c b/src/xdisp.c
index 041a022..f006f8e 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -12276,8 +12276,7 @@ DEFUN ("tool-bar-height", Ftool_bar_height, Stool_bar_height,
        0, 2, 0,
        doc: /* Return the number of lines occupied by the tool bar of FRAME.
 If FRAME is nil or omitted, use the selected frame.  Optional argument
-PIXELWISE non-nil means return the height of the tool bar in pixels.  */
-       attributes: const)
+PIXELWISE non-nil means return the height of the tool bar in pixels.  */)
   (Lisp_Object frame, Lisp_Object pixelwise)
 {
   int height = 0;
diff --git a/src/xmenu.c b/src/xmenu.c
index 9063a8a..fdf1f6f 100644
--- a/src/xmenu.c
+++ b/src/xmenu.c
@@ -2288,7 +2288,7 @@ x_menu_show (struct frame *f, int x, int y, int menuflags,
 /* Detect if a dialog or menu has been posted.  MSDOS has its own
    implementation on msdos.c.  */
 
-int ATTRIBUTE_CONST
+int
 popup_activated (void)
 {
   return popup_activated_flag;

commit 255d2a5a53083d676977023e9772d97095c6db46
Author: Dmitry Gutov 
Date:   Fri Jan 16 06:24:09 2015 +0300

    vc-svn-dir-status-files: Parse output with the remote format
    
    Fixes: debbugs:19429
    
    * lisp/vc/vc-svn.el (vc-svn-dir-status-files): Pass t as
    vc-svn-after-dir-status's second argument.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 64c3305..908c027 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-16  Dmitry Gutov  
+
+	* vc/vc-svn.el (vc-svn-dir-status-files): Pass t as
+	vc-svn-after-dir-status's second argument.  (Bug#19429)
+
 2015-01-16  Samer Masterson    (tiny change)
 
 	* pcomplete.el (pcomplete-parse-arguments): Parse arguments
diff --git a/lisp/vc/vc-svn.el b/lisp/vc/vc-svn.el
index bae178d..d74daf9 100644
--- a/lisp/vc/vc-svn.el
+++ b/lisp/vc/vc-svn.el
@@ -164,6 +164,7 @@ If you want to force an empty list of arguments, use t."
 
 ;; FIXME it would be better not to have the "remote" argument,
 ;; but to distinguish the two output formats based on content.
+;; FIXME: the local format isn't used by the (sole) caller anymore.
 (defun vc-svn-after-dir-status (callback &optional remote)
   (let ((state-map '((?A . added)
                      (?C . conflict)
@@ -208,7 +209,7 @@ CALLBACK is called as (CALLBACK RESULT BUFFER), where
 RESULT is a list of conses (FILE . STATE) for directory DIR."
   ;; FIXME shouldn't this rather default to all the files in dir?
   (apply #'vc-svn-command (current-buffer) 'async nil "status" "-u" files)
-  (vc-run-delayed (vc-svn-after-dir-status callback)))
+  (vc-run-delayed (vc-svn-after-dir-status callback t)))
 
 (defun vc-svn-dir-extra-headers (_dir)
   "Generate extra status headers for a Subversion working copy."

commit 7b8cba98bfa8fff6536b5f868d2adf2b31c75544
Author: Samer Masterson 
Date:   Fri Jan 16 05:35:51 2015 +0300

    Backport: Parse pcomplete arguments regardless of pcomplete-cycle-completions
    
    * pcomplete.el (pcomplete-parse-arguments): Parse arguments regardless
    of pcomplete-cycle-completions's value.
    
    Fixes: debbugs:18950
    (cherry picked from commit dfa8729c1086d6461de846aad47f2a0aba732176)

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 3ce3b20..8a3d657 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-16  Samer Masterson    (tiny change)
+
+	* pcomplete.el (pcomplete-parse-arguments): Parse arguments
+	regardless of pcomplete-cycle-completions's value.  (Bug#18950)
+
 2015-01-13  Michael Albinus  
 
 	* filenotify.el (file-notify-descriptors, file-notify-handle-event):
diff --git a/lisp/pcomplete.el b/lisp/pcomplete.el
index 17327ea..7bcf2c1 100644
--- a/lisp/pcomplete.el
+++ b/lisp/pcomplete.el
@@ -755,8 +755,7 @@ this is `comint-dynamic-complete-functions'."
 	    pcomplete-index 0
 	    pcomplete-stub (pcomplete-arg 'last))
       (let ((begin (pcomplete-begin 'last)))
-	(if (and pcomplete-cycle-completions
-		 (listp pcomplete-stub) ;??
+	(if (and (listp pcomplete-stub) ;??
 		 (not pcomplete-expand-only-p))
 	    (let* ((completions pcomplete-stub) ;??
 		   (common-stub (car completions))

commit dfa8729c1086d6461de846aad47f2a0aba732176
Author: Samer Masterson 
Date:   Fri Jan 16 05:35:51 2015 +0300

    Parse pcomplete arguments regardless of pcomplete-cycle-completions
    
    * pcomplete.el (pcomplete-parse-arguments): Parse arguments regardless
    of pcomplete-cycle-completions's value.
    
    Fixes: debbugs:18950

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 6aa0c12..64c3305 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-16  Samer Masterson    (tiny change)
+
+	* pcomplete.el (pcomplete-parse-arguments): Parse arguments
+	regardless of pcomplete-cycle-completions's value.  (Bug#18950)
+
 2015-01-16  Lars Magne Ingebrigtsen  
 
 	* dom.el (dom-strings): New function.
diff --git a/lisp/pcomplete.el b/lisp/pcomplete.el
index 17327ea..7bcf2c1 100644
--- a/lisp/pcomplete.el
+++ b/lisp/pcomplete.el
@@ -755,8 +755,7 @@ this is `comint-dynamic-complete-functions'."
 	    pcomplete-index 0
 	    pcomplete-stub (pcomplete-arg 'last))
       (let ((begin (pcomplete-begin 'last)))
-	(if (and pcomplete-cycle-completions
-		 (listp pcomplete-stub) ;??
+	(if (and (listp pcomplete-stub) ;??
 		 (not pcomplete-expand-only-p))
 	    (let* ((completions pcomplete-stub) ;??
 		   (common-stub (car completions))

commit b6b9d465cb81f5d35fb5c5432461ce7170759725
Author: Lars Magne Ingebrigtsen 
Date:   Fri Jan 16 03:08:55 2015 +0100

    * lisp/dom.el (dom-strings): New function.

diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi
index 472aedb..1b8897f 100644
--- a/doc/lispref/text.texi
+++ b/doc/lispref/text.texi
@@ -4507,6 +4507,9 @@ which is a regular expression.
 Return all nodes in @var{dom} that have IDs that match @var{match},
 which is a regular expression.
 
+@item dom-strings @var{dom}
+Return all strings in @var{DOM}.
+
 @end table
 
 Utility functions:
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 7ef0e6a..6aa0c12 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,7 @@
 2015-01-16  Lars Magne Ingebrigtsen  
 
+	* dom.el (dom-strings): New function.
+
 	* files.el (directory-files-recursively): Don't use the word
 	"path" for a file name.
 
diff --git a/lisp/dom.el b/lisp/dom.el
index 527b8e6..11357e8 100644
--- a/lisp/dom.el
+++ b/lisp/dom.el
@@ -103,6 +103,14 @@ A name is a symbol like `td'."
 	(cons dom matches)
       matches)))
 
+(defun dom-strings (dom)
+  "Return elements in DOM that are strings."
+  (cl-loop for child in (dom-children dom)
+	   if (stringp child)
+	   collect child
+	   else
+	   append (dom-strings child)))
+
 (defun dom-by-class (dom match)
   "Return elements in DOM that have a class name that matches regexp MATCH."
   (dom-elements dom 'class match))

commit 22294ae511509ad86586eb5d054c95de38e87894
Author: Lars Magne Ingebrigtsen 
Date:   Fri Jan 16 01:12:40 2015 +0100

    Minor directory-files-recursively touch-up
    
    * files.el (directory-files-recursively): Don't use the word
    "path" for a file name.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 150f32f..7ef0e6a 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-16  Lars Magne Ingebrigtsen  
+
+	* files.el (directory-files-recursively): Don't use the word
+	"path" for a file name.
+
 2015-01-15  Wolfgang Jenkner  
 
 	* calc/calc-units.el (math-units-in-expr-p)
diff --git a/lisp/files.el b/lisp/files.el
index 175f85b..f8318d8 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -749,14 +749,15 @@ If INCLUDE-DIRECTORIES, also include directories that have matching names."
       (unless (member file '("./" "../"))
 	(if (directory-name-p file)
 	    (let* ((leaf (substring file 0 (1- (length file))))
-		   (path (expand-file-name leaf dir)))
+		   (full-file (expand-file-name leaf dir)))
 	      ;; Don't follow symlinks to other directories.
-	      (unless (file-symlink-p path)
-		(setq result (nconc result (directory-files-recursively
-					    path match include-directories))))
+	      (unless (file-symlink-p full-file)
+		(setq result
+		      (nconc result (directory-files-recursively
+				     full-file match include-directories))))
 	      (when (and include-directories
 			 (string-match match leaf))
-		(setq result (nconc result (list path)))))
+		(setq result (nconc result (list full-file)))))
 	  (when (string-match match file)
 	    (push (expand-file-name file dir) files)))))
     (nconc result (nreverse files))))

commit 2290000ed69b1157739c280f090e5b60112e83fe
Author: Wolfgang Jenkner 
Date:   Thu Jan 15 20:02:17 2015 +0100

    Handle the `neg' operator in some calc-units functions.
    
    * lisp/calc/calc-units.el (math-units-in-expr-p)
    (math-single-units-in-expr-p, math-find-compatible-unit-rec)
    (math-extract-units): Handle the `neg' operator.  (Bug#19582)
    * test/automated/calc-tests.el (calc-tests-equal, calc-tests-simple):
    New functions.
    (test-calc-remove-units, test-calc-extract-units)
    (test-calc-convert-units): New tests.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index b7a38af..150f32f 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,9 @@
+2015-01-15  Wolfgang Jenkner  
+
+	* calc/calc-units.el (math-units-in-expr-p)
+	(math-single-units-in-expr-p, math-find-compatible-unit-rec)
+	(math-extract-units): Handle the `neg' operator.  (Bug#19582)
+
 2015-01-15  Stefan Monnier  
 
 	* emacs-lisp/eieio-core.el: Provide support for cl-generic.
diff --git a/lisp/calc/calc-units.el b/lisp/calc/calc-units.el
index 26a644a..0595086 100644
--- a/lisp/calc/calc-units.el
+++ b/lisp/calc/calc-units.el
@@ -904,10 +904,12 @@ If COMP or STD is non-nil, put that in the units table instead."
   (and (consp expr)
        (if (eq (car expr) 'var)
 	   (math-check-unit-name expr)
-	 (and (or sub-exprs
-		  (memq (car expr) '(* / ^)))
-	      (or (math-units-in-expr-p (nth 1 expr) sub-exprs)
-		  (math-units-in-expr-p (nth 2 expr) sub-exprs))))))
+	 (if (eq (car expr) 'neg)
+	     (math-units-in-expr-p (nth 1 expr) sub-exprs)
+	   (and (or sub-exprs
+		    (memq (car expr) '(* / ^)))
+		(or (math-units-in-expr-p (nth 1 expr) sub-exprs)
+		    (math-units-in-expr-p (nth 2 expr) sub-exprs)))))))
 
 (defun math-only-units-in-expr-p (expr)
   (and (consp expr)
@@ -924,6 +926,8 @@ If COMP or STD is non-nil, put that in the units table instead."
   (cond ((math-scalarp expr) nil)
 	((eq (car expr) 'var)
 	 (math-check-unit-name expr))
+	((eq (car expr) 'neg)
+	 (math-single-units-in-expr-p (nth 1 expr)))
 	((eq (car expr) '*)
 	 (let ((u1 (math-single-units-in-expr-p (nth 1 expr)))
 	       (u2 (math-single-units-in-expr-p (nth 2 expr))))
@@ -1079,6 +1083,8 @@ If COMP or STD is non-nil, put that in the units table instead."
 	((eq (car-safe expr) '/)
 	 (or (math-find-compatible-unit-rec (nth 1 expr) pow)
 	     (math-find-compatible-unit-rec (nth 2 expr) (- pow))))
+	((eq (car-safe expr) 'neg)
+	 (math-find-compatible-unit-rec (nth 1 expr) pow))
 	((and (eq (car-safe expr) '^)
 	      (integerp (nth 2 expr)))
 	 (math-find-compatible-unit-rec (nth 1 expr) (* pow (nth 2 expr))))
@@ -1497,6 +1503,8 @@ If COMP or STD is non-nil, put that in the units table instead."
    ((memq (car-safe expr) '(* /))
     (cons (car expr)
           (mapcar 'math-extract-units (cdr expr))))
+   ((eq (car-safe expr) 'neg)
+    (math-extract-units (nth 1 expr)))
    ((eq (car-safe expr) '^)
     (list '^ (math-extract-units (nth 1 expr)) (nth 2 expr)))
    ((math-check-unit-name expr) expr)
diff --git a/test/ChangeLog b/test/ChangeLog
index 95d3e54..b3a0494 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,5 +1,12 @@
 2015-01-15  Wolfgang Jenkner  
 
+	* automated/calc-tests.el (calc-tests-equal, calc-tests-simple):
+	New functions.
+	(test-calc-remove-units, test-calc-extract-units)
+	(test-calc-convert-units): New tests.
+
+2015-01-15  Wolfgang Jenkner  
+
 	* automated/Makefile.in (WRITE_LOG): Use POSIX redirection.
 
 2015-01-15  Stefan Monnier  
diff --git a/test/automated/calc-tests.el b/test/automated/calc-tests.el
index 331e01e..d5252ea 100644
--- a/test/automated/calc-tests.el
+++ b/test/automated/calc-tests.el
@@ -27,6 +27,40 @@
 (require 'cl-lib)
 (require 'ert)
 (require 'calc)
+(require 'calc-ext)
+(require 'calc-units)
+
+;; XXX The order in which calc libraries (in particular calc-units)
+;; are loaded influences whether a calc integer in an expression
+;; involving units is represented as a lisp integer or a calc float,
+;; see bug#19582.  Until this will be fixed the following function can
+;; be used to compare such calc expressions.
+(defun calc-tests-equal (a b)
+  "Like `equal' but allow for different representations of numbers.
+For example: (calc-tests-equal 10 '(float 1 1)) => t.
+A and B should be calc expressions."
+  (cond ((math-numberp a)
+	 (and (math-numberp b)
+	      (math-equal a b)))
+	((atom a)
+	 (equal a b))
+	((consp b)
+	 ;; Can't be dotted or circular.
+	 (and (= (length a) (length b))
+	      (equal (car a) (car b))
+	      (cl-every #'calc-tests-equal (cdr a) (cdr b))))))
+
+(defun calc-tests-simple (fun string &rest args)
+  "Push STRING on the calc stack, then call FUN and return the new top.
+The result is a calc (i.e., lisp) expression, not its string representation.
+Also pop the entire stack afterwards.
+An existing calc stack is reused, otherwise a new one is created."
+  (calc-eval string 'push)
+  (prog1
+      (ignore-errors
+	(apply fun args)
+	(calc-top-n 1))
+    (calc-pop 0)))
 
 (ert-deftest test-math-bignum ()
   ;; bug#17556
@@ -34,6 +68,24 @@
     (should (math-negp n))
     (should (cl-notany #'cl-minusp (cdr n)))))
 
+(ert-deftest test-calc-remove-units ()
+  (should (calc-tests-equal (calc-tests-simple #'calc-remove-units "-1 m") -1)))
+
+(ert-deftest test-calc-extract-units ()
+  (should (calc-tests-equal (calc-tests-simple #'calc-extract-units "-1 m")
+			    '(var m var-m)))
+  (should (calc-tests-equal (calc-tests-simple #'calc-extract-units "-1 m*cm")
+			    '(* (float 1 -2) (^ (var m var-m) 2)))))
+
+(ert-deftest test-calc-convert-units ()
+  ;; Used to ask for `(The expression is unitless when simplified) Old Units: '.
+  (should (calc-tests-equal (calc-tests-simple #'calc-convert-units "-1 m" nil "cm")
+			    '(* -100 (var cm var-cm))))
+  ;; Gave wrong result.
+  (should (calc-tests-equal (calc-tests-simple #'calc-convert-units "-1 m"
+					       (math-read-expr "1m") "cm")
+			    '(* -100 (var cm var-cm)))))
+
 (provide 'calc-tests)
 ;;; calc-tests.el ends here
 

commit b577fe28c73cacfd1e81dca5ebf8cc7b0830d957
Author: Wolfgang Jenkner 
Date:   Thu Jan 15 19:56:57 2015 +0100

    Use POSIX redirection.
    
    * test/automated/Makefile.in (WRITE_LOG): Use POSIX redirection.

diff --git a/test/ChangeLog b/test/ChangeLog
index a33ec87..95d3e54 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,7 @@
+2015-01-15  Wolfgang Jenkner  
+
+	* automated/Makefile.in (WRITE_LOG): Use POSIX redirection.
+
 2015-01-15  Stefan Monnier  
 
 	* automated/eieio-test-methodinvoke.el (eieio-test-method-store): Add
diff --git a/test/automated/Makefile.in b/test/automated/Makefile.in
index ed75781..7243e8a 100644
--- a/test/automated/Makefile.in
+++ b/test/automated/Makefile.in
@@ -64,7 +64,7 @@ all: check
 
 ## Ignore any test errors so we can continue to test other files.
 ## But compilation errors are always fatal.
-WRITE_LOG = >& $@ || { stat=ERROR; cat $@; }; echo $$stat: $@
+WRITE_LOG = > $@ 2>&1 || { stat=ERROR; cat $@; }; echo $$stat: $@
 
 ## I'd prefer to use -emacs -f ert-run-tests-batch-and-exit rather
 ## than || true, since the former makes problems more obvious.

commit d0b8d4bb328d33d245a10d546bec5ef3e3c05c9d
Author: Lars Magne Ingebrigtsen 
Date:   Thu Jan 15 22:19:28 2015 +0000

    lisp/gnus/nntp.el (nntp-send-authinfo): Error out if the password is wrong

diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 20de9ae..5a61a21 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,7 @@
+2015-01-15  Lars Magne Ingebrigtsen  
+
+	* nntp.el (nntp-send-authinfo): Error out if the password is wrong.
+
 2015-01-08  Stefan Monnier  
 
 	* registry.el: Don't use  as a variable.
diff --git a/lisp/gnus/nntp.el b/lisp/gnus/nntp.el
index e071368..0891dba 100644
--- a/lisp/gnus/nntp.el
+++ b/lisp/gnus/nntp.el
@@ -1219,14 +1219,17 @@ If SEND-IF-FORCE, only send authinfo to the server if the
 	      nntp-authinfo-user user))
       (unless (member user '(nil ""))
 	(nntp-send-command "^3.*\r?\n" "AUTHINFO USER" user)
-	(when t				;???Should check if AUTHINFO succeeded
-	  (nntp-send-command
-	   "^2.*\r?\n" "AUTHINFO PASS"
-	   (or passwd
-	       nntp-authinfo-password
-	       (setq nntp-authinfo-password
-		     (read-passwd (format "NNTP (%s@%s) password: "
-					  user nntp-address))))))))))
+	(let ((result
+	       (nntp-send-command
+		"^2.*\r?\n" "AUTHINFO PASS"
+		(or passwd
+		    nntp-authinfo-password
+		    (setq nntp-authinfo-password
+			  (read-passwd (format "NNTP (%s@%s) password: "
+					       user nntp-address)))))))
+	  (if (not result)
+	      (signal 'nntp-authinfo-rejected "Password rejected")
+	    result))))))
 
 ;;; Internal functions.
 

commit a3505cb3ef00ad3c9f886e2eb7f245845eb4c1ee
Author: Eli Zaretskii 
Date:   Thu Jan 15 19:31:49 2015 +0200

    doc/lispref/variables.texi (Creating Buffer-Local): Improve indexing (Bug#19608)

diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog
index c898af5..5364699 100644
--- a/doc/lispref/ChangeLog
+++ b/doc/lispref/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-15  Eli Zaretskii  
+
+	* variables.texi (Creating Buffer-Local): Improve indexing.
+	(Bug#19608)
+
 2015-01-04  Eli Zaretskii  
 
 	* frames.texi (Display Feature Testing): Make the description of
diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi
index 5d766e4..27bc061 100644
--- a/doc/lispref/variables.texi
+++ b/doc/lispref/variables.texi
@@ -1403,6 +1403,7 @@ buffer-local variable interactively, just as it is useful to create
 buffer-local variables interactively.
 @end deffn
 
+@cindex local variables, killed by major mode
 @defun kill-all-local-variables
 This function eliminates all the buffer-local variable bindings of the
 current buffer except for variables marked as ``permanent'' and local

commit 0f238ea450b3a976f04c95c4cf8befaadad1cdd0
Author: Eli Zaretskii 
Date:   Thu Jan 15 17:50:50 2015 +0200

    Add set-binary-mode primitive to switch a standard stream to binary I/O.
    
     src/fileio.c: Include binary-io.h.
     (Fset_binary_mode): New function.
     (syms_of_fileio): Defsubr it.
     (syms_of_fileio) : DEFSYM them.
    
     admin/unidata/unidata/uvs.el (uvs-print-table-ivd): Call set-binary-mode on
     stdout.
    
     doc/lispref/streams.texi (Input Functions): Document 'set-binary-mode'.
     (Output Functions): Cross-reference to documentation of
     'set-binary-mode'.
    
     etc/NEWS: Mention 'set-binary-mode'.

diff --git a/admin/ChangeLog b/admin/ChangeLog
index 2b04281..70d1714 100644
--- a/admin/ChangeLog
+++ b/admin/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-15  Eli Zaretskii  
+
+	* unidata/uvs.el (uvs-print-table-ivd): Call set-binary-mode on
+	stdout.
+
 2015-01-12  Paul Eggert  
 
 	Say "ELC foo.elc" instead of "GEN foo.elc"
diff --git a/admin/unidata/uvs.el b/admin/unidata/uvs.el
index 8bad523..a6beac9 100644
--- a/admin/unidata/uvs.el
+++ b/admin/unidata/uvs.el
@@ -200,6 +200,7 @@ corresponding number."
 	   (insert-file-contents filename)
 	   (uvs-alist-from-ivd collection-id
 			       sequence-id-to-glyph-func))))
+    (set-binary-mode 'stdout t)
     (princ "/* Automatically generated by uvs.el.  */\n")
     (princ
      (format "static const unsigned char mac_uvs_table_%s_bytes[] =\n  {\n"
diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog
index 941be3c..4c0c116 100644
--- a/doc/lispref/ChangeLog
+++ b/doc/lispref/ChangeLog
@@ -1,3 +1,9 @@
+2015-01-15  Eli Zaretskii  
+
+	* streams.texi (Input Functions): Document 'set-binary-mode'.
+	(Output Functions): Cross-reference to documentation of
+	'set-binary-mode'.
+
 2015-01-04  Paul Eggert  
 
 	batch write-region no longer says "Wrote FOO"
diff --git a/doc/lispref/streams.texi b/doc/lispref/streams.texi
index 5e4df00..e52a543 100644
--- a/doc/lispref/streams.texi
+++ b/doc/lispref/streams.texi
@@ -339,6 +339,25 @@ shared structures.  @xref{Circular Objects}.  Its default value is
 @code{t}.
 @end defvar
 
+@cindex binary I/O in batch mode
+When reading or writing from the standard input/output streams of the
+Emacs process in batch mode, it is sometimes required to make sure any
+arbitrary binary data will be read/written verbatim, and/or that no
+translation of newlines to or from CR-LF pairs are performed.  This
+issue does not exist on Posix hosts, only on MS-Windows and MS-DOS.
+The following function allows to control the I/O mode of any standard
+stream of the Emacs process.
+
+@defun set-binary-mode stream mode
+Switch @var{stream} into binary or text I/O mode.  If @var{mode} is
+non-@code{nil}, switch to binary mode, otherwise switch to text mode.
+The value of @var{stream} can be one of @code{stdin}, @code{stdout},
+or @code{stderr}.  This function flushes any pending output data of
+@var{stream} as a side effect, and returns the previous value of I/O
+mode for @var{stream}.  On Posix hosts, it always returns a
+non-@code{nil} value and does nothing except flushing pending output.
+@end defun
+
 @node Output Streams
 @section Output Streams
 @cindex stream (for printing)
@@ -686,6 +705,11 @@ This function outputs @var{object} to @var{stream}, just like
 indent and fill the object to make it more readable for humans.
 @end defun
 
+If you need to use binary I/O in batch mode, e.g., use the functions
+described in this section to write out arbitrary binary data or avoid
+conversion of newlines on non-Posix hosts, see @ref{Input Functions,
+set-binary-mode}.
+
 @node Output Variables
 @section Variables Affecting Output
 @cindex output-controlling variables
diff --git a/etc/ChangeLog b/etc/ChangeLog
index 20f88bd..681858e 100644
--- a/etc/ChangeLog
+++ b/etc/ChangeLog
@@ -1,3 +1,7 @@
+2015-01-15  Eli Zaretskii  
+
+	* NEWS: Mention 'set-binary-mode'.
+
 2015-01-11  Paul Eggert  
 
 	Default to 'configure --enable-silent-rules'
diff --git a/etc/NEWS b/etc/NEWS
index f291c0c..0bfd3fd 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -588,6 +588,10 @@ been obsoleted.
 undocumented integer-pair format.  Instead, they return a list of two
 integers.
 
++++
+** New function `set-binary-mode' allows to switch a standard stream
+of the Emacs process to binary I/O mode.
+
 
 * Changes in Frames and Windows Code in Emacs 25.1
 
diff --git a/src/ChangeLog b/src/ChangeLog
index 898c10a..40d8b26 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,10 @@
+2015-01-15  Eli Zaretskii  
+
+	* fileio.c: Include binary-io.h.
+	(Fset_binary_mode): New function.
+	(syms_of_fileio): Defsubr it.
+	(syms_of_fileio) : DEFSYM them.
+
 2015-01-15  Teodor Zlatanov  
 
 	* gnutls.c (init_gnutls_functions): Import gnutls_x509_crt_check_issuer.
diff --git a/src/fileio.c b/src/fileio.c
index 6c443c9..dc67a00 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -86,6 +86,8 @@ along with GNU Emacs.  If not, see .  */
 #include 
 #include 
 
+#include 
+
 #ifdef HPUX
 #include 
 #endif
@@ -5754,6 +5756,48 @@ before any other event (mouse or keypress) is handled.  */)
   return Qnil;
 }
 
+
+DEFUN ("set-binary-mode", Fset_binary_mode, Sset_binary_mode, 2, 2, 0,
+       doc: /* Switch STREAM to binary I/O mode or text I/O mode.
+STREAM can be one of the symbols `stdin', `stdout', or `stderr'.
+If MODE is non-nil, switch STREAM to binary mode, otherwise switch
+it to text mode.
+
+As a side effect, this function flushes any pending STREAM's data.
+
+Value is the previous value of STREAM's I/O mode, nil for text mode,
+non-nil for binary mode.
+
+On MS-Windows and MS-DOS, binary mode is needed to read or write
+arbitrary binary data, and for disabling translation between CR-LF
+pairs and a single newline character.  Examples include generation
+of text files with Unix-style end-of-line format using `princ' in
+batch mode, with standard output redirected to a file.
+
+On Posix systems, this function always returns non-nil, and has no
+effect except for flushing STREAM's data.  */)
+  (Lisp_Object stream, Lisp_Object mode)
+{
+  FILE *fp = NULL;
+  int binmode;
+
+  CHECK_SYMBOL (stream);
+  if (EQ (stream, Qstdin))
+    fp = stdin;
+  else if (EQ (stream, Qstdout))
+    fp = stdout;
+  else if (EQ (stream, Qstderr))
+    fp = stderr;
+  else
+    xsignal2 (Qerror, build_string ("unsupported stream"), stream);
+
+  binmode = NILP (mode) ? O_TEXT : O_BINARY;
+  if (fp != stdin)
+    fflush (fp);
+
+  return (set_binary_mode (fileno (fp), binmode) == O_BINARY) ? Qt : Qnil;
+}
+
 void
 init_fileio (void)
 {
@@ -6040,6 +6084,10 @@ This includes interactive calls to `delete-file' and
   DEFSYM (Qsubstitute_env_in_file_name, "substitute-env-in-file-name");
   DEFSYM (Qget_buffer_window_list, "get-buffer-window-list");
 
+  DEFSYM (Qstdin, "stdin");
+  DEFSYM (Qstdout, "stdout");
+  DEFSYM (Qstderr, "stderr");
+
   defsubr (&Sfind_file_name_handler);
   defsubr (&Sfile_name_directory);
   defsubr (&Sfile_name_nondirectory);
@@ -6089,6 +6137,8 @@ This includes interactive calls to `delete-file' and
 
   defsubr (&Snext_read_file_uses_dialog_p);
 
+  defsubr (&Sset_binary_mode);
+
 #ifdef HAVE_SYNC
   defsubr (&Sunix_sync);
 #endif

commit 3b7eed4ebb3c18799ec791d0c6bd53c019f48f73
Author: Ted Zlatanov 
Date:   Thu Jan 15 09:41:58 2015 -0500

    Flag :unknown-ca and :self-signed SSL certs  (Bug#19404)
    
    Fixes: debbugs:19404
    
    * gnutls.c (init_gnutls_functions): Import gnutls_x509_crt_check_issuer.
    (Fgnutls_peer_status): Use it to set the :self-signed flag.
    Rename the previous :self-signed to :unknown-ca.
    (Fgnutls_peer_status_warning_describe): Explain :unknown-ca flag.

diff --git a/src/ChangeLog b/src/ChangeLog
index b2588f1..898c10a 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,10 @@
+2015-01-15  Teodor Zlatanov  
+
+	* gnutls.c (init_gnutls_functions): Import gnutls_x509_crt_check_issuer.
+	(Fgnutls_peer_status): Use it to set the :self-signed flag.
+	Rename the previous :self-signed to :unknown-ca. (Bug#19404)
+	(Fgnutls_peer_status_warning_describe): Explain :unknown-ca flag.
+
 2015-01-14  Eli Zaretskii  
 
 	* w32fns.c (w32_wnd_proc): Ignore MENUITEMINFO's dwItemData data
diff --git a/src/gnutls.c b/src/gnutls.c
index 5e6c635..909542f 100644
--- a/src/gnutls.c
+++ b/src/gnutls.c
@@ -122,6 +122,8 @@ DEF_DLL_FN (void, gnutls_transport_set_push_function,
 	    (gnutls_session_t, gnutls_push_func));
 DEF_DLL_FN (int, gnutls_x509_crt_check_hostname,
 	    (gnutls_x509_crt_t, const char *));
+DEF_DLL_FN (int, gnutls_x509_crt_check_issuer,
+              (gnutls_x509_crt_t, gnutls_x509_crt_t));
 DEF_DLL_FN (void, gnutls_x509_crt_deinit, (gnutls_x509_crt_t));
 DEF_DLL_FN (int, gnutls_x509_crt_import,
 	    (gnutls_x509_crt_t, const gnutls_datum_t *,
@@ -236,6 +238,7 @@ init_gnutls_functions (void)
   LOAD_DLL_FN (library, gnutls_transport_set_pull_function);
   LOAD_DLL_FN (library, gnutls_transport_set_push_function);
   LOAD_DLL_FN (library, gnutls_x509_crt_check_hostname);
+  LOAD_DLL_FN (library, gnutls_x509_crt_check_issuer);
   LOAD_DLL_FN (library, gnutls_x509_crt_deinit);
   LOAD_DLL_FN (library, gnutls_x509_crt_import);
   LOAD_DLL_FN (library, gnutls_x509_crt_init);
@@ -329,6 +332,7 @@ init_gnutls_functions (void)
 # define gnutls_transport_set_pull_function fn_gnutls_transport_set_pull_function
 # define gnutls_transport_set_push_function fn_gnutls_transport_set_push_function
 # define gnutls_x509_crt_check_hostname fn_gnutls_x509_crt_check_hostname
+# define gnutls_x509_crt_check_issuer fn_gnutls_x509_crt_check_issuer
 # define gnutls_x509_crt_deinit fn_gnutls_x509_crt_deinit
 # define gnutls_x509_crt_get_activation_time fn_gnutls_x509_crt_get_activation_time
 # define gnutls_x509_crt_get_dn fn_gnutls_x509_crt_get_dn
@@ -982,6 +986,10 @@ DEFUN ("gnutls-peer-status-warning-describe", Fgnutls_peer_status_warning_descri
   if (EQ (status_symbol, intern (":self-signed")))
     return build_string ("certificate signer was not found (self-signed)");
 
+  if (EQ (status_symbol, intern (":unknown-ca")))
+    return build_string ("the certificate was signed by an unknown "
+                         "and therefore untrusted authority");
+
   if (EQ (status_symbol, intern (":not-ca")))
     return build_string ("certificate signer is not a CA");
 
@@ -1026,7 +1034,7 @@ The return value is a property list with top-level keys :warnings and
     warnings = Fcons (intern (":revoked"), warnings);
 
   if (verification & GNUTLS_CERT_SIGNER_NOT_FOUND)
-    warnings = Fcons (intern (":self-signed"), warnings);
+    warnings = Fcons (intern (":unknown-ca"), warnings);
 
   if (verification & GNUTLS_CERT_SIGNER_NOT_CA)
     warnings = Fcons (intern (":not-ca"), warnings);
@@ -1044,6 +1052,13 @@ The return value is a property list with top-level keys :warnings and
       CERTIFICATE_NOT_MATCHING)
     warnings = Fcons (intern (":no-host-match"), warnings);
 
+  /* This could get called in the INIT stage, when the certificate is
+     not yet set. */
+  if (XPROCESS (proc)->gnutls_certificate != NULL &&
+      gnutls_x509_crt_check_issuer(XPROCESS (proc)->gnutls_certificate,
+                                   XPROCESS (proc)->gnutls_certificate))
+    warnings = Fcons (intern (":self-signed"), warnings);
+
   if (!NILP (warnings))
     result = list2 (intern (":warnings"), warnings);
 

commit 0298a2c6a10bc3b79cb2f45a1961dd7ac6da4e6d
Merge: a1124bc 0e97c44
Author: Joakim Verona 
Date:   Thu Jan 15 14:54:25 2015 +0100

    merge master

commit 0e97c44c3699c4606a04f589828acdf9c03f447e
Author: Glenn Morris 
Date:   Wed Jan 14 23:08:53 2015 -0800

    # Set copyright to FSF, standardize license notice

diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el
index d94e4f1..41a419a 100644
--- a/lisp/emacs-lisp/cl-generic.el
+++ b/lisp/emacs-lisp/cl-generic.el
@@ -1,21 +1,23 @@
 ;;; cl-generic.el --- CLOS-style generic functions for Elisp  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2015  Stefan Monnier
+;; Copyright (C) 2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier 
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see .
+;; along with GNU Emacs.  If not, see .
 
 ;;; Commentary:
 
diff --git a/test/automated/cl-generic-tests.el b/test/automated/cl-generic-tests.el
index 5c5e5d1..17bce6a 100644
--- a/test/automated/cl-generic-tests.el
+++ b/test/automated/cl-generic-tests.el
@@ -1,21 +1,23 @@
 ;;; cl-generic-tests.el --- Tests for cl-generic.el functionality  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2015  Stefan Monnier
+;; Copyright (C) 2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier 
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see .
+;; along with GNU Emacs.  If not, see .
 
 ;;; Commentary:
 

commit 483c98a00d02197dd912d490daf9e521399d16a7
Author: Stefan Monnier 
Date:   Thu Jan 15 00:19:44 2015 -0500

    * lisp/emacs-lisp/eieio-core.el: Provide support for cl-generic.
    
    (eieio--generic-tagcode): New function.
    (cl-generic-tagcode-function): Use it.
    (eieio--generic-tag-types): New function.
    (cl-generic-tag-types-function): Use it.
    (eieio-object-p): Tighten up the test.
    
    * lisp/emacs-lisp/cl-generic.el (cl-generic-define-method): Fix paren typo.
    
    * test/automated/eieio-test-methodinvoke.el (eieio-test-method-store): Add
    keysym arg instead of relying on internal var eieio--generic-call-key.
    Update all callers.
    (eieio-test-cl-generic-1): New tests.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index e0fb3cc..b7a38af 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,14 @@
+2015-01-15  Stefan Monnier  
+
+	* emacs-lisp/eieio-core.el: Provide support for cl-generic.
+	(eieio--generic-tagcode): New function.
+	(cl-generic-tagcode-function): Use it.
+	(eieio--generic-tag-types): New function.
+	(cl-generic-tag-types-function): Use it.
+	(eieio-object-p): Tighten up the test.
+
+	* emacs-lisp/cl-generic.el (cl-generic-define-method): Fix paren typo.
+
 2015-01-14  Stefan Monnier  
 
 	* emacs-lisp/cl-generic.el: New file.
diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el
index 19e4ce0..d94e4f1 100644
--- a/lisp/emacs-lisp/cl-generic.el
+++ b/lisp/emacs-lisp/cl-generic.el
@@ -305,10 +305,10 @@ which case this method will be invoked when the argument is `eql' to VAL.
         (setq i (1+ i))))
     (if me (setcdr me (cons uses-cnm function))
       (setf (cl--generic-method-table generic)
-            (cons `(,key ,uses-cnm . ,function) mt))
-      ;; For aliases, cl--generic-name gives us the actual name.
-      (defalias (cl--generic-name generic)
-        (cl--generic-make-function generic)))))
+            (cons `(,key ,uses-cnm . ,function) mt)))
+    ;; For aliases, cl--generic-name gives us the actual name.
+    (defalias (cl--generic-name generic)
+      (cl--generic-make-function generic))))
 
 (defmacro cl--generic-with-memoization (place &rest code)
   (declare (indent 1) (debug t))
diff --git a/lisp/emacs-lisp/eieio-core.el b/lisp/emacs-lisp/eieio-core.el
index 0f2da63..bfa922b 100644
--- a/lisp/emacs-lisp/eieio-core.el
+++ b/lisp/emacs-lisp/eieio-core.el
@@ -264,7 +264,7 @@ Return nil if that option doesn't exist."
 
 (defsubst eieio-object-p (obj)
   "Return non-nil if OBJ is an EIEIO object."
-  (and (arrayp obj)
+  (and (vectorp obj)
        (condition-case nil
            (eq (aref (eieio--object-class-object obj) 0) 'defclass)
          (error nil))))
@@ -1303,10 +1303,34 @@ method invocation orders of the involved classes."
 (define-error 'unbound-slot "Unbound slot")
 (define-error 'inconsistent-class-hierarchy "Inconsistent class hierarchy")
 
+;;; Hooking into cl-generic.
+
+(require 'cl-generic)
+
+(add-function :before-until cl-generic-tagcode-function
+              #'eieio--generic-tagcode)
+(defun eieio--generic-tagcode (type name)
+  ;; CLHS says:
+  ;;    A class must be defined before it can be used as a parameter
+  ;;    specializer in a defmethod form.
+  ;; So we can ignore types that are not known to denote classes.
+  (and (class-p type)
+       ;; Prefer (aref ,name 0) over (eieio--class-tag ,name) so that
+       ;; the tagcode is identical to the tagcode used for cl-struct.
+       `(50 . (and (vectorp ,name) (aref ,name 0)))))
+
+(add-function :before-until cl-generic-tag-types-function
+              #'eieio--generic-tag-types)
+(defun eieio--generic-tag-types (tag)
+  (and (symbolp tag) (boundp tag) (eieio--class-p (symbol-value tag))
+       (mapcar #'eieio--class-symbol
+               (eieio--class-precedence-list (symbol-value tag)))))
+
 ;;; Backward compatibility functions
 ;; To support .elc files compiled for older versions of EIEIO.
 
 (defun eieio-defclass (cname superclasses slots options)
+  (declare (obsolete eieio-defclass-internal "25.1"))
   (eval `(defclass ,cname ,superclasses ,slots ,@options)))
 
 
diff --git a/test/ChangeLog b/test/ChangeLog
index 211a06c..a33ec87 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,10 @@
+2015-01-15  Stefan Monnier  
+
+	* automated/eieio-test-methodinvoke.el (eieio-test-method-store): Add
+	keysym arg instead of relying on internal var eieio--generic-call-key.
+	Update all callers.
+	(eieio-test-cl-generic-1): New tests.
+
 2015-01-14  Stefan Monnier  
 
 	* automated/cl-generic-tests.el: New file.
diff --git a/test/automated/eieio-test-methodinvoke.el b/test/automated/eieio-test-methodinvoke.el
index 2de836c..6362fc5 100644
--- a/test/automated/eieio-test-methodinvoke.el
+++ b/test/automated/eieio-test-methodinvoke.el
@@ -58,12 +58,10 @@
 (defvar eieio-test-method-order-list nil
   "List of symbols stored during method invocation.")
 
-(defun eieio-test-method-store ()
+(defun eieio-test-method-store (keysym)
   "Store current invocation class symbol in the invocation order list."
-  (let* ((keysym (aref [ :STATIC :BEFORE :PRIMARY :AFTER ]
-		       (or eieio--generic-call-key 0)))
-         ;; FIXME: Don't depend on `eieio--scoped-class'!
-	 (c (list keysym (eieio--class-symbol (eieio--scoped-class)))))
+  ;; FIXME: Don't depend on `eieio--scoped-class'!
+  (let* ((c (list keysym (eieio--class-symbol (eieio--scoped-class)))))
     (push c eieio-test-method-order-list)))
 
 (defun eieio-test-match (rightanswer)
@@ -88,36 +86,36 @@
 (defclass eitest-B (eitest-B-base1 eitest-B-base2) ())
 
 (defmethod eitest-F :BEFORE ((p eitest-B-base1))
-  (eieio-test-method-store))
+  (eieio-test-method-store :BEFORE))
 
 (defmethod eitest-F :BEFORE ((p eitest-B-base2))
-  (eieio-test-method-store))
+  (eieio-test-method-store :BEFORE))
 
 (defmethod eitest-F :BEFORE ((p eitest-B))
-  (eieio-test-method-store))
+  (eieio-test-method-store :BEFORE))
 
 (defmethod eitest-F ((p eitest-B))
-  (eieio-test-method-store)
+  (eieio-test-method-store :PRIMARY)
   (call-next-method))
 
 (defmethod eitest-F ((p eitest-B-base1))
-  (eieio-test-method-store)
+  (eieio-test-method-store :PRIMARY)
   (call-next-method))
 
 (defmethod eitest-F ((p eitest-B-base2))
-  (eieio-test-method-store)
+  (eieio-test-method-store :PRIMARY)
   (when (next-method-p)
     (call-next-method))
   )
 
 (defmethod eitest-F :AFTER ((p eitest-B-base1))
-  (eieio-test-method-store))
+  (eieio-test-method-store :AFTER))
 
 (defmethod eitest-F :AFTER ((p eitest-B-base2))
-  (eieio-test-method-store))
+  (eieio-test-method-store :AFTER))
 
 (defmethod eitest-F :AFTER ((p eitest-B))
-  (eieio-test-method-store))
+  (eieio-test-method-store :AFTER))
 
 (ert-deftest eieio-test-method-order-list-3 ()
   (let ((eieio-test-method-order-list nil)
@@ -152,15 +150,15 @@
 ;;; Return value from :PRIMARY
 ;;
 (defmethod eitest-I :BEFORE ((a eitest-A))
-  (eieio-test-method-store)
+  (eieio-test-method-store :BEFORE)
   ":before")
 
 (defmethod eitest-I :PRIMARY ((a eitest-A))
-  (eieio-test-method-store)
+  (eieio-test-method-store :PRIMARY)
   ":primary")
 
 (defmethod eitest-I :AFTER ((a eitest-A))
-  (eieio-test-method-store)
+  (eieio-test-method-store :AFTER)
   ":after")
 
 (ert-deftest eieio-test-method-order-list-5 ()
@@ -179,17 +177,17 @@
 
 ;; Just use the obsolete name once, to make sure it also works.
 (defmethod constructor :STATIC ((p C-base1) &rest args)
-  (eieio-test-method-store)
+  (eieio-test-method-store :STATIC)
   (if (next-method-p) (call-next-method))
   )
 
 (defmethod eieio-constructor :STATIC ((p C-base2) &rest args)
-  (eieio-test-method-store)
+  (eieio-test-method-store :STATIC)
   (if (next-method-p) (call-next-method))
   )
 
 (defmethod eieio-constructor :STATIC ((p C) &rest args)
-  (eieio-test-method-store)
+  (eieio-test-method-store :STATIC)
   (call-next-method)
   )
 
@@ -216,24 +214,24 @@
 
 (defmethod eitest-F ((p D))
   "D"
-  (eieio-test-method-store)
+  (eieio-test-method-store :PRIMARY)
   (call-next-method))
 
 (defmethod eitest-F ((p D-base0))
   "D-base0"
-  (eieio-test-method-store)
+  (eieio-test-method-store :PRIMARY)
   ;; This should have no next
   ;; (when (next-method-p) (call-next-method))
   )
 
 (defmethod eitest-F ((p D-base1))
   "D-base1"
-  (eieio-test-method-store)
+  (eieio-test-method-store :PRIMARY)
   (call-next-method))
 
 (defmethod eitest-F ((p D-base2))
   "D-base2"
-  (eieio-test-method-store)
+  (eieio-test-method-store :PRIMARY)
   (when (next-method-p)
     (call-next-method))
   )
@@ -258,21 +256,21 @@
 (defclass E (E-base1 E-base2) () :method-invocation-order :breadth-first)
 
 (defmethod eitest-F ((p E))
-  (eieio-test-method-store)
+  (eieio-test-method-store :PRIMARY)
   (call-next-method))
 
 (defmethod eitest-F ((p E-base0))
-  (eieio-test-method-store)
+  (eieio-test-method-store :PRIMARY)
   ;; This should have no next
   ;; (when (next-method-p) (call-next-method))
   )
 
 (defmethod eitest-F ((p E-base1))
-  (eieio-test-method-store)
+  (eieio-test-method-store :PRIMARY)
   (call-next-method))
 
 (defmethod eitest-F ((p E-base2))
-  (eieio-test-method-store)
+  (eieio-test-method-store :PRIMARY)
   (when (next-method-p)
     (call-next-method))
   )
@@ -380,3 +378,21 @@
 		   '(CNM-1-1 CNM-2 INIT)))
     (should (equal (eieio-test-arguments-for 'CNM-2)
 		   '(INIT)))))
+
+;;; Check cl-generic integration.
+
+(cl-defgeneric eieio-test--1 (x y))
+
+(ert-deftest eieio-test-cl-generic-1 ()
+  (cl-defmethod eieio-test--1 (x y) (list x y))
+  (cl-defmethod eieio-test--1 ((_x CNM-0) y)
+    (cons "CNM-0" (cl-call-next-method 7 y)))
+  (cl-defmethod eieio-test--1 ((_x CNM-1-1) _y)
+    (cons "CNM-1-1" (cl-call-next-method)))
+  (cl-defmethod eieio-test--1 ((_x CNM-1-2) y)
+    (cons "CNM-1-2" (cl-call-next-method)))
+  (should (equal (eieio-test--1 4 5) '(4 5)))
+  (should (equal (eieio-test--1 (make-instance 'CNM-0) 5)
+                 '("CNM-0" 7 5)))
+  (should (equal (eieio-test--1 (make-instance 'CNM-2) 5)
+                 '("CNM-1-1" "CNM-1-2" "CNM-0" 7 5))))

commit d132c7b6583a62e702bac16e16d714fb0674934e
Author: Dima Kogan 
Date:   Wed Jan 14 16:47:01 2015 -0500

    erc-backend.el: Give hook-name a default value of nil and add-to-list unconditionally. Fixes debbugs:19363

diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog
index 8c8a3bf..8e0c31a 100644
--- a/lisp/erc/ChangeLog
+++ b/lisp/erc/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-14  Dima Kogan  
+
+	* erc-backend.el (define-erc-response-handler): Give hook-name
+	default value of nil and add-to-list (bug#19363)
+
 2014-11-10  Kelvin White  
 
 	* erc-stamp.el (erc-timestamp-intangible): Change version tag to 24.5.
diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el
index b8c6786..8ce199f 100644
--- a/lisp/erc/erc-backend.el
+++ b/lisp/erc/erc-backend.el
@@ -1162,8 +1162,11 @@ add things to `%s' instead."
           (cl-loop for alias in aliases
                    collect (intern (format "erc-server-%s-functions" alias)))))
     `(prog2
-         ;; Normal hook variable.
-         (defvar ,hook-name ',fn-name ,(format hook-doc name))
+         ;; Normal hook variable.  The variable may already have a
+         ;; value at this point, so I default to nil, and (add-hook)
+         ;; unconditionally
+         (defvar ,hook-name nil ,(format hook-doc name))
+         (add-to-list ',hook-name ',fn-name)
          ;; Handler function
          (defun ,fn-name (proc parsed)
            ,fn-doc

commit 9def17e92bbb61e877bf092b562a92946cf43210
Author: Stefan Monnier 
Date:   Wed Jan 14 14:37:10 2015 -0500

    * lisp/emacs-lisp/cl-generic.el: New file.
    
    * lisp/emacs-lisp/cl-macs.el (cl-flet): Allow (FUN EXP) forms.
    (cl-load-time-value, cl-labels): Use closures rather than
    backquoted lambdas.
    (cl-macrolet): Use `eval' to create the function value, and support CL
    style arguments in for the defined macros.
    * test/automated/cl-generic-tests.el: New file.

diff --git a/etc/NEWS b/etc/NEWS
index b3267e1..f291c0c 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -480,6 +480,8 @@ As a result of the above, these commands are now obsolete:
 
 * New Modes and Packages in Emacs 25.1
 
+** cl-generic.el provides CLOS-style multiple-dispatch generic functions.
+
 ** scss-mode (a minor variant of css-mode)
 
 ** let-alist is a new macro (and a package) that allows one to easily
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 6e2adc9..e0fb3cc 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,15 @@
 2015-01-14  Stefan Monnier  
 
+	* emacs-lisp/cl-generic.el: New file.
+
+	* emacs-lisp/cl-macs.el (cl-flet): Allow (FUN EXP) forms.
+	(cl-load-time-value, cl-labels): Use closures rather than
+	backquoted lambdas.
+	(cl-macrolet): Use `eval' to create the function value, and support CL
+	style arguments in for the defined macros.
+
+2015-01-14  Stefan Monnier  
+
 	* net/eww.el: Use lexical-binding.
 	(eww-links-at-point): Remove unused arg.
 	(eww-mode-map): Inherit from special-mode-map.
diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el
new file mode 100644
index 0000000..19e4ce0
--- /dev/null
+++ b/lisp/emacs-lisp/cl-generic.el
@@ -0,0 +1,605 @@
+;;; cl-generic.el --- CLOS-style generic functions for Elisp  -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2015  Stefan Monnier
+
+;; Author: Stefan Monnier 
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see .
+
+;;; Commentary:
+
+;; This implements the most of CLOS's multiple-dispatch generic functions.
+;; To use it you need either (require 'cl-generic) or (require 'cl-lib).
+;; The main entry points are: `cl-defgeneric' and `cl-defmethod'.
+
+;; Missing elements:
+;; - We don't support next-method-p, make-method, call-method,
+;;   define-method-combination.
+;; - Method and generic function objects: CLOS defines methods as objects
+;;   (same for generic functions), whereas we don't offer such an abstraction.
+;; - `no-next-method' should receive the "calling method" object, but since we
+;;   don't have such a thing, we pass nil instead.
+;; - In defgeneric we don't support the options:
+;;   declare, :method-combination, :generic-function-class, :method-class,
+;;   :method.
+;; Added elements:
+;; - We support aliases to generic functions.
+;; - The kind of thing on which to dispatch can be extended.
+;;   There is support in this file for (eql ) dispatch as well as dispatch
+;;   on the type of CL structs, and eieio-core.el adds support for EIEIO
+;;   defclass objects.
+
+;;; Code:
+
+;; Note: For generic functions that dispatch on several arguments (i.e. those
+;; which use the multiple-dispatch feature), we always use the same "tagcodes"
+;; and the same set of arguments on which to dispatch.  This works, but is
+;; often suboptimal since after one dispatch, the remaining dispatches can
+;; usually be simplified, or even completely skipped.
+
+(eval-when-compile (require 'cl-lib))
+(eval-when-compile (require 'pcase))
+
+(defvar cl-generic-tagcode-function
+  (lambda (type _name)
+    (if (eq type t) '(0 . 'cl--generic-type)
+      (error "Unknown specializer %S" type)))
+  "Function to get the Elisp code to extract the tag on which we dispatch.
+Takes a \"parameter-specializer-name\" and a variable name, and returns
+a pair (PRIORITY . CODE) where CODE is an Elisp expression that should be
+used to extract the \"tag\" (from the object held in the named variable)
+that should uniquely determine if we have a match
+\(i.e. the \"tag\" is the value that will be used to dispatch to the proper
+method(s)).
+Such \"tagcodes\" will be or'd together.
+PRIORITY is an integer from 0 to 100 which is used to sort the tagcodes
+in the `or'.  The higher the priority, the more specific the tag should be.
+More specifically, if PRIORITY is N and we have two objects X and Y
+whose tag (according to TAGCODE) is `eql', then it should be the case
+that for all other (PRIORITY . TAGCODE) where PRIORITY ≤ N, then
+\(eval TAGCODE) for X is `eql' to (eval TAGCODE) for Y.")
+
+(defvar cl-generic-tag-types-function
+  (lambda (tag) (if (eq tag 'cl--generic-type) '(t)))
+  "Function to get the list of types that a given \"tag\" matches.
+They should be sorted from most specific to least specific.")
+
+(cl-defstruct (cl--generic
+               (:constructor nil)
+               (:constructor cl--generic-make
+                (name &optional dispatches method-table))
+               (:predicate nil))
+  (name nil :read-only t)               ;Pointer back to the symbol.
+  ;; `dispatches' holds a list of (ARGNUM . TAGCODES) where ARGNUM is the index
+  ;; of the corresponding argument and TAGCODES is a list of (PRIORITY . EXP)
+  ;; where the EXPs are expressions (to be `or'd together) to compute the tag
+  ;; on which to dispatch and PRIORITY is the priority of each expression to
+  ;; decide in which order to sort them.
+  ;; The most important dispatch is last in the list (and the least is first).
+  dispatches
+  ;; `method-table' is a list of
+  ;; ((SPECIALIZERS . QUALIFIER) USES-CNM . FUNCTION), where
+  ;; USES-CNM is a boolean indicating if FUNCTION calls `cl-call-next-method'
+  ;; (and hence expects an extra argument holding the next-method).
+  method-table)
+
+(defmacro cl--generic (name)
+  `(get ,name 'cl--generic))
+
+(defun cl-generic-ensure-function (name)
+  (let (generic
+        (origname name))
+    (while (and (null (setq generic (cl--generic name)))
+                (fboundp name)
+                (symbolp (symbol-function name)))
+      (setq name (symbol-function name)))
+    (unless (or (not (fboundp name))
+                (and (functionp name) generic))
+      (error "%s is already defined as something else than a generic function"
+             origname))
+    (if generic
+        (cl-assert (eq name (cl--generic-name generic)))
+      (setf (cl--generic name) (setq generic (cl--generic-make name)))
+      (defalias name (cl--generic-make-function generic)))
+    generic))
+
+(defun cl--generic-setf-rewrite (name)
+  (let ((setter (intern (format "cl-generic-setter--%s" name))))
+    (cons setter
+          `(eval-and-compile
+             (unless (eq ',setter (get ',name 'cl-generic-setter))
+               ;; (when (get ',name 'gv-expander)
+               ;;   (error "gv-expander conflicts with (setf %S)" ',name))
+               (setf (get ',name 'cl-generic-setter) ',setter)
+               (gv-define-setter ,name (val &rest args)
+                 (cons ',setter (cons val args))))))))
+
+;;;###autoload
+(defmacro cl-defgeneric (name args &rest options-and-methods)
+  "Create a generic function NAME.
+DOC-STRING is the base documentation for this class.  A generic
+function has no body, as its purpose is to decide which method body
+is appropriate to use.  Specific methods are defined with `defmethod'.
+With this implementation the ARGS are currently ignored.
+OPTIONS-AND-METHODS is currently only used to specify the docstring,
+via (:documentation DOCSTRING)."
+  (declare (indent 2) (doc-string 3))
+  (let* ((docprop (assq :documentation options-and-methods))
+         (doc (cond ((stringp (car-safe options-and-methods))
+                     (pop options-and-methods))
+                    (docprop
+                     (prog1
+                         (cadr docprop)
+                       (setq options-and-methods
+                             (delq docprop options-and-methods)))))))
+    `(progn
+       ,(when (eq 'setf (car-safe name))
+          (pcase-let ((`(,setter . ,code) (cl--generic-setf-rewrite
+                                           (cadr name))))
+            (setq name setter)
+            code))
+       (defalias ',name
+         (cl-generic-define ',name ',args ',options-and-methods)
+         ,doc))))
+
+(defun cl--generic-mandatory-args (args)
+  (let ((res ()))
+    (while (not (memq (car args) '(nil &rest &optional &key)))
+      (push (pop args) res))
+    (nreverse res)))
+
+;;;###autoload
+(defun cl-generic-define (name args options-and-methods)
+  (let ((generic (cl-generic-ensure-function name))
+        (mandatory (cl--generic-mandatory-args args))
+        (apo (assq :argument-precedence-order options-and-methods)))
+    (setf (cl--generic-dispatches generic) nil)
+    (when apo
+      (dolist (arg (cdr apo))
+        (let ((pos (memq arg mandatory)))
+          (unless pos (error "%S is not a mandatory argument" arg))
+          (push (list (- (length mandatory) (length pos)))
+                (cl--generic-dispatches generic)))))
+    (setf (cl--generic-method-table generic) nil)
+    (cl--generic-make-function generic)))
+
+(defvar cl-generic-current-method-specializers nil
+  ;; This is let-bound during macro-expansion of method bodies, so that those
+  ;; bodies can be optimized knowing that the specializers have matched.
+  ;; FIXME: This presumes the formal arguments aren't modified via `setq' and
+  ;; aren't shadowed either ;-(
+  ;; FIXME: This might leak outside the scope of the method if, during
+  ;; macroexpansion of the method, something causes some other macroexpansion
+  ;; (e.g. an autoload).
+  "List of (VAR . TYPE) where TYPE is var's specializer.")
+
+(eval-and-compile         ;Needed while compiling the cl-defmethod calls below!
+  (defun cl--generic-fgrep (vars sexp)    ;Copied from pcase.el.
+    "Check which of the symbols VARS appear in SEXP."
+    (let ((res '()))
+      (while (consp sexp)
+        (dolist (var (cl--generic-fgrep vars (pop sexp)))
+          (unless (memq var res) (push var res))))
+      (and (memq sexp vars) (not (memq sexp res)) (push sexp res))
+      res))
+
+  (defun cl--generic-lambda (args body with-cnm)
+    "Make the lambda expression for a method with ARGS and BODY."
+    (let ((plain-args ())
+          (cl-generic-current-method-specializers nil)
+          (doc-string (if (stringp (car-safe body)) (pop body)))
+          (mandatory t))
+      (dolist (arg args)
+        (push (pcase arg
+                ((or '&optional '&rest '&key) (setq mandatory nil) arg)
+                ((and `(,name . ,type) (guard mandatory))
+                 (push (cons name (car type))
+                       cl-generic-current-method-specializers)
+                 name)
+                (_ arg))
+              plain-args))
+      (setq plain-args (nreverse plain-args))
+      (let ((fun `(cl-function (lambda ,plain-args
+                                 ,@(if doc-string (list doc-string))
+                                 ,@body))))
+        (if (not with-cnm)
+            (cons nil fun)
+          ;; First macroexpand away the cl-function stuff (e.g. &key and
+          ;; destructuring args, `declare' and whatnot).
+          (pcase (macroexpand fun macroexpand-all-environment)
+            (`#'(lambda ,args . ,body)
+             (require 'cl-lib)          ;Needed to expand `cl-flet'.
+             (let* ((doc-string (and doc-string (stringp (car body))
+                                     (pop body)))
+                    (cnm (make-symbol "cl--cnm"))
+                    (nbody (macroexpand-all
+                            `(cl-flet ((cl-call-next-method ,cnm))
+                               ,@body)
+                            macroexpand-all-environment))
+                    ;; FIXME: Rather than `grep' after the fact, the
+                    ;; macroexpansion should directly set some flag when cnm
+                    ;; is used.
+                    ;; FIXME: Also, optimize the case where call-next-method is
+                    ;; only called with explicit arguments.
+                    (uses-cnm (cl--generic-fgrep (list cnm) nbody)))
+               (cons (not (not uses-cnm))
+                     `#'(lambda (,@(if uses-cnm (list cnm)) ,@args)
+                          ,@(if doc-string (list doc-string))
+                          ,nbody))))
+            (f (error "Unexpected macroexpansion result: %S" f))))))))
+
+
+;;;###autoload
+(defmacro cl-defmethod (name args &rest body)
+  "Define a new method for generic function NAME.
+I.e. it defines the implementation of NAME to use for invocations where the
+value of the dispatch argument matches the specified TYPE.
+The dispatch argument has to be one of the mandatory arguments, and
+all methods of NAME have to use the same argument for dispatch.
+The dispatch argument and TYPE are specified in ARGS where the corresponding
+formal argument appears as (VAR TYPE) rather than just VAR.
+
+The optional second argument QUALIFIER is a specifier that
+modifies how the method is combined with other methods, including:
+   :before  - Method will be called before the primary
+   :after   - Method will be called after the primary
+   :around  - Method will be called around everything else
+The absence of QUALIFIER means this is a \"primary\" method.
+
+Other than a type, TYPE can also be of the form `(eql VAL)' in
+which case this method will be invoked when the argument is `eql' to VAL.
+
+\(fn NAME [QUALIFIER] ARGS &rest [DOCSTRING] BODY)"
+  (declare (doc-string 3) (indent 2))
+  (let ((qualifiers nil))
+    (while (keywordp args)
+      (push args qualifiers)
+      (setq args (pop body)))
+    (pcase-let* ((with-cnm (not (memq (car qualifiers) '(:before :after))))
+                 (`(,uses-cnm . ,fun) (cl--generic-lambda args body with-cnm)))
+      `(progn
+         ,(when (eq 'setf (car-safe name))
+            (pcase-let ((`(,setter . ,code) (cl--generic-setf-rewrite
+                                             (cadr name))))
+              (setq name setter)
+              code))
+         (cl-generic-define-method ',name ',qualifiers ',args
+                                   ,uses-cnm ,fun)))))
+
+;;;###autoload
+(defun cl-generic-define-method (name qualifiers args uses-cnm function)
+  (when (> (length qualifiers) 1)
+    (error "We only support a single qualifier per method: %S" qualifiers))
+  (unless (memq (car qualifiers) '(nil :primary :around :after :before))
+    (error "Unsupported qualifier in: %S" qualifiers))
+  (let* ((generic (cl-generic-ensure-function name))
+         (mandatory (cl--generic-mandatory-args args))
+         (specializers
+          (mapcar (lambda (arg) (if (consp arg) (cadr arg) t)) mandatory))
+         (key (cons specializers (or (car qualifiers) ':primary)))
+         (mt (cl--generic-method-table generic))
+         (me (assoc key mt))
+         (dispatches (cl--generic-dispatches generic))
+         (i 0))
+    (dolist (specializer specializers)
+      (let* ((tagcode (funcall cl-generic-tagcode-function specializer 'arg))
+             (x (assq i dispatches)))
+        (if (not x)
+            (setf (cl--generic-dispatches generic)
+                  (setq dispatches (cons (list i tagcode) dispatches)))
+          (unless (member tagcode (cdr x))
+            (setf (cdr x)
+                  (nreverse (sort (cons tagcode (cdr x))
+                                  #'car-less-than-car)))))
+        (setq i (1+ i))))
+    (if me (setcdr me (cons uses-cnm function))
+      (setf (cl--generic-method-table generic)
+            (cons `(,key ,uses-cnm . ,function) mt))
+      ;; For aliases, cl--generic-name gives us the actual name.
+      (defalias (cl--generic-name generic)
+        (cl--generic-make-function generic)))))
+
+(defmacro cl--generic-with-memoization (place &rest code)
+  (declare (indent 1) (debug t))
+  (gv-letplace (getter setter) place
+    `(or ,getter
+         ,(macroexp-let2 nil val (macroexp-progn code)
+            `(progn
+               ,(funcall setter val)
+               ,val)))))
+
+(defvar cl--generic-dispatchers (make-hash-table :test #'equal))
+
+(defun cl--generic-get-dispatcher (tagcodes dispatch-arg)
+  (cl--generic-with-memoization
+      (gethash (cons dispatch-arg tagcodes) cl--generic-dispatchers)
+    (let ((lexical-binding t)
+          (extraargs ()))
+      (dotimes (_ dispatch-arg)
+        (push (make-symbol "arg") extraargs))
+      (byte-compile
+       `(lambda (generic dispatches-left)
+          (let ((method-cache (make-hash-table :test #'eql)))
+            (lambda (,@extraargs arg &rest args)
+              (apply (cl--generic-with-memoization
+                         (gethash (or ,@(mapcar #'cdr tagcodes)) method-cache)
+                       (cl--generic-cache-miss
+                        generic ',dispatch-arg dispatches-left
+                        (list ,@(mapcar #'cdr tagcodes))))
+                     ,@extraargs arg args))))))))
+
+(defun cl--generic-make-function (generic)
+  (let* ((dispatches (cl--generic-dispatches generic))
+         (dispatch
+          (progn
+            (while (and dispatches
+                        (member (cdar dispatches)
+                                '(nil ((0 . 'cl--generic-type)))))
+              (setq dispatches (cdr dispatches)))
+            (pop dispatches))))
+    (if (null dispatch)
+        (cl--generic-build-combined-method
+         (cl--generic-name generic)
+	 (cl--generic-method-table generic))
+      (let ((dispatcher (cl--generic-get-dispatcher
+                         (cdr dispatch) (car dispatch))))
+        (funcall dispatcher generic dispatches)))))
+
+(defun cl--generic-nest (fun methods)
+  (pcase-dolist (`(,uses-cnm . ,method) methods)
+    (setq fun
+          (if (not uses-cnm) method
+            (let ((next fun))
+              (lambda (&rest args)
+                (apply method
+                       ;; FIXME: This sucks: passing just `next' would
+                       ;; be a lot more efficient than the lambda+apply
+                       ;; quasi-η, but we need this to implement the
+                       ;; "if call-next-method is called with no
+                       ;; arguments, then use the previous arguments".
+                       (lambda (&rest cnm-args)
+                         (apply next (or cnm-args args)))
+                       args))))))
+  fun)
+
+(defvar cl--generic-combined-method-memoization
+  (make-hash-table :test #'equal :weakness 'value)
+  "Table storing previously built combined-methods.
+This is particularly useful when many different tags select the same set
+of methods, since this table then allows us to share a single combined-method
+for all those different tags in the method-cache.")
+
+(defun cl--generic-build-combined-method (generic-name methods)
+  (let ((mets-by-qual ()))
+    (dolist (qm methods)
+      (push (cdr qm) (alist-get (cdar qm) mets-by-qual)))
+    (cl--generic-with-memoization
+        (gethash (cons generic-name mets-by-qual)
+                 cl--generic-combined-method-memoization)
+      (cond
+       ((null mets-by-qual) (lambda (&rest args)
+                             (cl-no-applicable-method generic-name args)))
+       (t
+        (let* ((fun (lambda (&rest args)
+                      ;; FIXME: CLOS passes as second arg the "calling method".
+                      ;; We don't currently have "method objects" like CLOS
+                      ;; does so we can't really do it the CLOS way.
+                      ;; The closest would be to pass the lambda corresponding
+                      ;; to the method, but the caller wouldn't be able to do
+                      ;; much with it anyway.  So we pass nil for now.
+                      (apply #'cl-no-next-method generic-name nil args)))
+               ;; We use `cdr' to drop the `uses-cnm' annotations.
+               (before
+                (mapcar #'cdr (reverse (alist-get :before mets-by-qual))))
+               (after (mapcar #'cdr (alist-get :after mets-by-qual))))
+          (setq fun (cl--generic-nest fun (alist-get :primary mets-by-qual)))
+          (when (or after before)
+            (let ((next fun))
+              (setq fun (lambda (&rest args)
+                          (dolist (bf before)
+                            (apply bf args))
+                          (apply next args)
+                          (dolist (af after)
+                            (apply af args))))))
+          (cl--generic-nest fun (alist-get :around mets-by-qual))))))))
+
+(defun cl--generic-cache-miss (generic dispatch-arg dispatches-left tags)
+  (let ((types (apply #'append (mapcar cl-generic-tag-types-function tags)))
+        (methods '()))
+    (dolist (method-desc (cl--generic-method-table generic))
+      (let ((m (member (nth dispatch-arg (caar method-desc)) types)))
+        (when m
+          (push (cons (length m) method-desc) methods))))
+    ;; Sort the methods, most specific first.
+    ;; It would be tempting to sort them once and for all in the method-table
+    ;; rather than here, but the order might depend on the actual argument
+    ;; (e.g. for multiple inheritance with defclass).
+    (setq methods (nreverse (mapcar #'cdr (sort methods #'car-less-than-car))))
+    (cl--generic-make-function (cl--generic-make (cl--generic-name generic)
+                                                 dispatches-left methods))))
+
+;;; Define some pre-defined generic functions, used internally.
+
+(define-error 'cl-no-method "No method for %S")
+(define-error 'cl-no-next-method "No next method for %S" 'cl-no-method)
+(define-error 'cl-no-applicable-method "No applicable method for %S"
+  'cl-no-method)
+
+(cl-defgeneric cl-no-next-method (generic method &rest args)
+  "Function called when `cl-call-next-method' finds no next method.")
+(cl-defmethod cl-no-next-method ((generic t) method &rest args)
+  (signal 'cl-no-next-method `(,generic ,method ,@args)))
+
+(cl-defgeneric cl-no-applicable-method (generic &rest args)
+  "Function called when a method call finds no applicable method.")
+(cl-defmethod cl-no-applicable-method ((generic t) &rest args)
+  (signal 'cl-no-applicable-method `(,generic ,@args)))
+
+(defun cl-call-next-method (&rest _args)
+  "Function to call the next applicable method.
+Can only be used from within the lexical body of a primary or around method."
+  (error "cl-call-next-method only allowed inside primary and around methods"))
+
+;;; Add support for describe-function
+
+(add-hook 'help-fns-describe-function-functions 'cl--generic-describe)
+(defun cl--generic-describe (function)
+  ;; FIXME: Fix up the main "in `'" hyperlink, and add such hyperlinks
+  ;; for each method.
+  (let ((generic (if (symbolp function) (cl--generic function))))
+    (when generic
+      (save-excursion
+        (insert "\n\nThis is a generic function.\n\n")
+        (insert (propertize "Implementations:\n\n" 'face 'bold))
+        ;; Loop over fanciful generics
+        (pcase-dolist (`((,type . ,qualifier) . ,method)
+                       (cl--generic-method-table generic))
+          (insert "`")
+          (if (symbolp type)
+              ;; FIXME: Add support for cl-structs in help-variable.
+              (help-insert-xref-button (symbol-name type)
+				       'help-variable type)
+            (insert (format "%S" type)))
+          (insert (format "' %S %S\n"
+                          (car qualifier)
+                          (let ((args (help-function-arglist method)))
+                            ;; Drop cl--generic-next arg if present.
+                            (if (memq (car qualifier) '(:after :before))
+                                args (cdr args)))))
+          (insert (or (documentation method) "Undocumented") "\n\n"))))))
+
+;;; Support for (eql ) specializers.
+
+(defvar cl--generic-eql-used (make-hash-table :test #'eql))
+
+(add-function :before-until cl-generic-tagcode-function
+              #'cl--generic-eql-tagcode)
+(defun cl--generic-eql-tagcode (type name)
+  (when (eq (car-safe type) 'eql)
+    (puthash (cadr type) type cl--generic-eql-used)
+    `(100 . (gethash ,name cl--generic-eql-used))))
+
+(add-function :before-until cl-generic-tag-types-function
+              #'cl--generic-eql-tag-types)
+(defun cl--generic-eql-tag-types (tag)
+  (if (eq (car-safe tag) 'eql) (list tag)))
+
+;;; Support for cl-defstructs specializers.
+
+(add-function :before-until cl-generic-tagcode-function
+              #'cl--generic-struct-tagcode)
+(defun cl--generic-struct-tagcode (type name)
+  (and (symbolp type)
+       (get type 'cl-struct-type)
+       (or (eq 'vector (car (get type 'cl-struct-type)))
+           (error "Can't dispatch on cl-struct %S: type is %S"
+                  type (car (get type 'cl-struct-type))))
+       (or (equal '(cl-tag-slot) (car (get type 'cl-struct-slots)))
+           (error "Can't dispatch on cl-struct %S: no tag in slot 0"
+                  type))
+       ;; We could/should check the vector has length >0,
+       ;; but really, mixing vectors and structs is a bad idea,
+       ;; so let's not waste time trying to handle the case
+       ;; of an empty vector.
+       ;; BEWARE: this returns a bogus tag for non-struct vectors.
+       `(50 . (and (vectorp ,name) (aref ,name 0)))))
+
+(add-function :before-until cl-generic-tag-types-function
+              #'cl--generic-struct-tag-types)
+(defun cl--generic-struct-tag-types (tag)
+  ;; FIXME: cl-defstruct doesn't make it easy for us.
+  (and (symbolp tag)
+       ;; A method call shouldn't itself mess with the match-data.
+       (string-match-p "\\`cl-struct-\\(.*\\)" (symbol-name tag))
+       (let ((types (list (intern (substring (symbol-name tag) 10)))))
+         (while (get (car types) 'cl-struct-include)
+           (push (get (car types) 'cl-struct-include) types))
+         (push 'cl-struct types)        ;The "parent type" of all cl-structs.
+         (nreverse types))))
+
+;;; Dispatch on "old-style types".
+
+(defconst cl--generic-typeof-types
+  ;; Hand made from the source code of `type-of'.
+  '((integer number) (symbol) (string array) (cons list)
+    ;; Markers aren't `numberp', yet they are accepted wherever integers are
+    ;; accepted, pretty much.
+    (marker) (overlay) (float number) (window-configuration)
+    (process) (window) (subr) (compiled-function) (buffer) (char-table array)
+    (bool-vector array)
+    (frame) (hash-table) (font-spec) (font-entity) (font-object)
+    (vector array)
+    ;; Plus, hand made:
+    (null list symbol)
+    (list)
+    (array)
+    (number)))
+
+(add-function :before-until cl-generic-tagcode-function
+              #'cl--generic-typeof-tagcode)
+(defun cl--generic-typeof-tagcode (type name)
+  ;; FIXME: Add support for other types accepted by `cl-typep' such
+  ;; as `character', `atom', `face', `function', ...
+  (and (assq type cl--generic-typeof-types)
+       (progn
+         (if (memq type '(vector array))
+             (message "`%S' also matches CL structs and EIEIO classes" type))
+         ;; FIXME: We could also change `type-of' to return `null' for nil.
+         `(10 . (if ,name (type-of ,name) 'null)))))
+
+(add-function :before-until cl-generic-tag-types-function
+              #'cl--generic-typeof-types)
+(defun cl--generic-typeof-types (tag)
+  (and (symbolp tag)
+       (assq tag cl--generic-typeof-types)))
+
+;;; Just for kicks: dispatch on major-mode
+;;
+;; Here's how you'd use it:
+;;   (cl-defmethod foo ((x (major-mode text-mode)) y z) ...)
+;; And then
+;;     (foo 'major-mode toto titi)
+;;
+;; FIXME: Better would be to do that via dispatch on an "implicit argument".
+
+;; (defvar cl--generic-major-modes (make-hash-table :test #'eq))
+;;
+;; (add-function :before-until cl-generic-tagcode-function
+;;               #'cl--generic-major-mode-tagcode)
+;; (defun cl--generic-major-mode-tagcode (type name)
+;;   (if (eq 'major-mode (car-safe type))
+;;       `(50 . (if (eq ,name 'major-mode)
+;;                  (cl--generic-with-memoization
+;;                      (gethash major-mode cl--generic-major-modes)
+;;                    `(cl--generic-major-mode . ,major-mode))))))
+;;
+;; (add-function :before-until cl-generic-tag-types-function
+;;               #'cl--generic-major-mode-types)
+;; (defun cl--generic-major-mode-types (tag)
+;;   (when (eq (car-safe tag) 'cl--generic-major-mode)
+;;     (if (eq tag 'fundamental-mode) '(fundamental-mode t)
+;;       (let ((types `((major-mode ,(cdr tag)))))
+;;         (while (get (car types) 'derived-mode-parent)
+;;           (push (list 'major-mode (get (car types) 'derived-mode-parent))
+;;                 types))
+;;         (unless (eq 'fundamental-mode (car types))
+;;           (push '(major-mode fundamental-mode) types))
+;;         (nreverse types)))))
+
+;; Local variables:
+;; generated-autoload-file: "cl-loaddefs.el"
+;; End:
+
+(provide 'cl-generic)
+;;; cl-generic.el ends here
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index fff5b27..0070599 100644
--- a/lisp/emacs-lisp/cl-macs.el
+++ b/lisp/emacs-lisp/cl-macs.el
@@ -625,14 +625,20 @@ The result of the body appears to the compiler as a quoted constant."
 	     (set `(setq ,temp ,form)))
 	(if (and (fboundp 'byte-compile-file-form-defmumble)
 		 (boundp 'this-kind) (boundp 'that-one))
-	    (fset 'byte-compile-file-form
-		  `(lambda (form)
-                     (fset 'byte-compile-file-form
-                           ',(symbol-function 'byte-compile-file-form))
-                     (byte-compile-file-form ',set)
-                     (byte-compile-file-form form)))
-	  (print set (symbol-value 'byte-compile--outbuffer)))
-	`(symbol-value ',temp))
+            ;; Else, we can't output right away, so we have to delay it to the
+            ;; next time we're at the top-level.
+            ;; FIXME: Use advice-add/remove.
+            (fset 'byte-compile-file-form
+                  (let ((old (symbol-function 'byte-compile-file-form)))
+                    (lambda (form)
+                      (fset 'byte-compile-file-form old)
+                      (byte-compile-file-form set)
+                      (byte-compile-file-form form))))
+          ;; If we're not in the middle of compiling something, we can
+          ;; output directly to byte-compile-outbuffer, to make sure
+          ;; temp is set before we use it.
+          (print set byte-compile--outbuffer))
+	temp)
     `',(eval form)))
 
 
@@ -1824,18 +1830,30 @@ a `let' form, except that the list of symbols can be computed at run-time."
 (defmacro cl-flet (bindings &rest body)
   "Make local function definitions.
 Like `cl-labels' but the definitions are not recursive.
+Each binding can take the form (FUNC EXP) where
+FUNC is the function name, and EXP is an expression that returns the
+function value to which it should be bound, or it can take the more common
+form \(FUNC ARGLIST BODY...) which is a shorthand
+for (FUNC (lambda ARGLIST BODY)).
 
 \(fn ((FUNC ARGLIST BODY...) ...) FORM...)"
   (declare (indent 1) (debug ((&rest (cl-defun)) cl-declarations body)))
   (let ((binds ()) (newenv macroexpand-all-environment))
     (dolist (binding bindings)
-      (let ((var (make-symbol (format "--cl-%s--" (car binding)))))
-	(push (list var `(cl-function (lambda . ,(cdr binding)))) binds)
+      (let ((var (make-symbol (format "--cl-%s--" (car binding))))
+            (args-and-body (cdr binding)))
+        (if (and (= (length args-and-body) 1) (symbolp (car args-and-body)))
+            ;; Optimize (cl-flet ((fun var)) body).
+            (setq var (car args-and-body))
+          (push (list var (if (= (length args-and-body) 1)
+                              (car args-and-body)
+                            `(cl-function (lambda . ,args-and-body))))
+                binds))
 	(push (cons (car binding)
-                    `(lambda (&rest cl-labels-args)
-                       (cl-list* 'funcall ',var
-                                 cl-labels-args)))
+                    (lambda (&rest cl-labels-args)
+                      (cl-list* 'funcall var cl-labels-args)))
               newenv)))
+    ;; FIXME: Eliminate those functions which aren't referenced.
     `(let ,(nreverse binds)
        ,@(macroexp-unprogn
           (macroexpand-all
@@ -1869,9 +1887,8 @@ in closures will only work if `lexical-binding' is in use.
       (let ((var (make-symbol (format "--cl-%s--" (car binding)))))
 	(push (list var `(cl-function (lambda . ,(cdr binding)))) binds)
 	(push (cons (car binding)
-                    `(lambda (&rest cl-labels-args)
-                       (cl-list* 'funcall ',var
-                                 cl-labels-args)))
+                    (lambda (&rest cl-labels-args)
+                      (cl-list* 'funcall var cl-labels-args)))
               newenv)))
     (macroexpand-all `(letrec ,(nreverse binds) ,@body)
                      ;; Don't override lexical-let's macro-expander.
@@ -1898,7 +1915,8 @@ This is like `cl-flet', but for macros instead of functions.
 	     (res (cl--transform-lambda (cdar bindings) name)))
 	(eval (car res))
 	(macroexpand-all (macroexp-progn body)
-			 (cons (cons name `(lambda ,@(cdr res)))
+			 (cons (cons name
+                                     (eval `(cl-function (lambda ,@(cdr res))) t))
 			       macroexpand-all-environment))))))
 
 (defconst cl--old-macroexpand
diff --git a/test/ChangeLog b/test/ChangeLog
index 83bb8bf..211a06c 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,7 @@
+2015-01-14  Stefan Monnier  
+
+	* automated/cl-generic-tests.el: New file.
+
 2015-01-08  Stefan Monnier  
 
 	* automated/eieio-tests.el (eieio-test-23-inheritance-check): Don't use
diff --git a/test/automated/cl-generic-tests.el b/test/automated/cl-generic-tests.el
new file mode 100644
index 0000000..5c5e5d1
--- /dev/null
+++ b/test/automated/cl-generic-tests.el
@@ -0,0 +1,131 @@
+;;; cl-generic-tests.el --- Tests for cl-generic.el functionality  -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2015  Stefan Monnier
+
+;; Author: Stefan Monnier 
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see .
+
+;;; Commentary:
+
+;;; Code:
+
+(require 'ert)
+(require 'cl-lib)
+
+(cl-defgeneric cl--generic-1 (x y))
+(cl-defgeneric (setf cl--generic-1) (v y z) "My generic doc.")
+
+(ert-deftest cl-generic-test-0 ()
+  (cl-defgeneric cl--generic-1 (x y))
+  (cl-defmethod cl--generic-1 ((x t) y) (cons x y))
+  (should (equal (cl--generic-1 'a 'b) '(a . b))))
+
+(ert-deftest cl-generic-test-1-eql ()
+  (cl-defgeneric cl--generic-1 (x y))
+  (cl-defmethod cl--generic-1 ((x t) y) (cons x y))
+  (cl-defmethod cl--generic-1 ((_x (eql 4)) _y)
+    (cons "quatre" (cl-call-next-method)))
+  (cl-defmethod cl--generic-1 ((_x (eql 5)) _y)
+    (cons "cinq" (cl-call-next-method)))
+  (cl-defmethod cl--generic-1 ((_x (eql 6)) y)
+    (cons "six" (cl-call-next-method 'a y)))
+  (should (equal (cl--generic-1 'a nil) '(a)))
+  (should (equal (cl--generic-1 4 nil) '("quatre" 4)))
+  (should (equal (cl--generic-1 5 nil) '("cinq" 5)))
+  (should (equal (cl--generic-1 6 nil) '("six" a))))
+
+(cl-defstruct cl-generic-struct-parent a b)
+(cl-defstruct (cl-generic-struct-child1 (:include cl-generic-struct-parent)) c)
+(cl-defstruct (cl-generic-struct-child11 (:include cl-generic-struct-child1)) d)
+(cl-defstruct (cl-generic-struct-child2 (:include cl-generic-struct-parent)) e)
+
+(ert-deftest cl-generic-test-2-struct ()
+  (cl-defgeneric cl--generic-1 (x y) "My doc.")
+  (cl-defmethod cl--generic-1 ((x t) y) "Doc 1." (cons x y))
+  (cl-defmethod cl--generic-1 ((_x cl-generic-struct-parent) y)
+    "Doc 2." (cons "parent" (cl-call-next-method 'a y)))
+  (cl-defmethod cl--generic-1 ((_x cl-generic-struct-child1) _y)
+    (cons "child1" (cl-call-next-method)))
+  (cl-defmethod cl--generic-1 :around ((_x t) _y)
+    (cons "around" (cl-call-next-method)))
+  (cl-defmethod cl--generic-1 :around ((_x cl-generic-struct-child11) _y)
+    (cons "child11" (cl-call-next-method)))
+  (cl-defmethod cl--generic-1 ((_x cl-generic-struct-child2) _y)
+    (cons "child2" (cl-call-next-method)))
+  (should (equal (cl--generic-1 (make-cl-generic-struct-child1) nil)
+                 '("around" "child1" "parent" a)))
+  (should (equal (cl--generic-1 (make-cl-generic-struct-child2) nil)
+                 '("around""child2" "parent" a)))
+  (should (equal (cl--generic-1 (make-cl-generic-struct-child11) nil)
+                 '("child11" "around""child1" "parent" a))))
+
+(ert-deftest cl-generic-test-3-setf ()
+  (cl-defmethod (setf cl--generic-1) (v (y t) z) (list v y z))
+  (cl-defmethod (setf cl--generic-1) (v (_y (eql 4)) z) (list v "four" z))
+  (should (equal (setf (cl--generic-1 'a 'b) 'v) '(v a b)))
+  (should (equal (setf (cl--generic-1 4 'b) 'v) '(v "four" b)))
+  (let ((x ()))
+    (should (equal (setf (cl--generic-1 (progn (push 1 x) 'a)
+                                        (progn (push 2 x) 'b))
+                         (progn (push 3 x) 'v))
+                   '(v a b)))
+    (should (equal x '(3 2 1)))))
+
+(ert-deftest cl-generic-test-4-overlapping-tagcodes ()
+  (cl-defgeneric cl--generic-1 (x y) "My doc.")
+  (cl-defmethod cl--generic-1 ((y t) z) (list y z))
+  (cl-defmethod cl--generic-1 ((_y (eql 4)) _z)
+                (cons "four" (cl-call-next-method)))
+  (cl-defmethod cl--generic-1 ((_y integer) _z)
+                (cons "integer" (cl-call-next-method)))
+  (cl-defmethod cl--generic-1 ((_y number) _z)
+                (cons "number" (cl-call-next-method)))
+  (should (equal (cl--generic-1 'a 'b) '(a b)))
+  (should (equal (cl--generic-1 1 'b) '("integer" "number" 1 b)))
+  (should (equal (cl--generic-1 4 'b) '("four" "integer" "number" 4 b))))
+
+(ert-deftest cl-generic-test-5-alias ()
+  (cl-defgeneric cl--generic-1 (x y) "My doc.")
+  (defalias 'cl--generic-2 #'cl--generic-1)
+  (cl-defmethod cl--generic-1 ((y t) z) (list y z))
+  (cl-defmethod cl--generic-2 ((_y (eql 4)) _z)
+                (cons "four" (cl-call-next-method)))
+  (should (equal (cl--generic-1 4 'b) '("four" 4 b))))
+
+(ert-deftest cl-generic-test-6-multiple-dispatch ()
+  (cl-defgeneric cl--generic-1 (x y) "My doc.")
+  (cl-defmethod cl--generic-1 (x y) (list x y))
+  (cl-defmethod cl--generic-1 (_x (_y integer))
+    (cons "y-int" (cl-call-next-method)))
+  (cl-defmethod cl--generic-1 ((_x integer) _y)
+    (cons "x-int" (cl-call-next-method)))
+  (cl-defmethod cl--generic-1 ((_x integer) (_y integer))
+    (cons "x&y-int" (cl-call-next-method)))
+  (should (equal (cl--generic-1 1 2) '("x&y-int" "x-int" "y-int" 1 2))))
+
+(ert-deftest cl-generic-test-7-apo ()
+  (cl-defgeneric cl--generic-1 (x y)
+    (:documentation "My doc.") (:argument-precedence-order y x))
+  (cl-defmethod cl--generic-1 (x y) (list x y))
+  (cl-defmethod cl--generic-1 (_x (_y integer))
+    (cons "y-int" (cl-call-next-method)))
+  (cl-defmethod cl--generic-1 ((_x integer) _y)
+    (cons "x-int" (cl-call-next-method)))
+  (cl-defmethod cl--generic-1 ((_x integer) (_y integer))
+    (cons "x&y-int" (cl-call-next-method)))
+  (should (equal (cl--generic-1 1 2) '("x&y-int" "y-int" "x-int" 1 2))))
+
+(provide 'cl-generic-tests)
+;;; cl-generic-tests.el ends here

commit e7db8e8d5de70be5e047c961cdfbf692d52e33c6
Author: Eli Zaretskii 
Date:   Wed Jan 14 20:51:33 2015 +0200

    Fix crashes on MS-Windows due to pop-up menus  (Bug#19596)
    
     src/w32fns.c (w32_wnd_proc): Ignore MENUITEMINFO's dwItemData data
     when FLAGS indicate the item is not highlighted, i.e. it's not our
     help-echo string.

diff --git a/src/ChangeLog b/src/ChangeLog
index be2e89f..b2588f1 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-14  Eli Zaretskii  
+
+	* w32fns.c (w32_wnd_proc): Ignore MENUITEMINFO's dwItemData data
+	when FLAGS indicate the item is not highlighted.  (Bug#19596)
+
 2015-01-14  Martin Rudalics  
 
 	* xmenu.c (update_frame_menubar): Remove garbaged code.
diff --git a/src/w32menu.c b/src/w32menu.c
index 2742276..2a1dafb 100644
--- a/src/w32menu.c
+++ b/src/w32menu.c
@@ -1476,11 +1476,24 @@ w32_menu_display_help (HWND owner, HMENU menu, UINT item, UINT flags)
       struct frame *f = x_window_to_frame (&one_w32_display_info, owner);
       Lisp_Object frame, help;
 
-      /* No help echo on owner-draw menu items, or when the keyboard is used
-	 to navigate the menus, since tooltips are distracting if they pop
-	 up elsewhere.  */
-      if (flags & MF_OWNERDRAW || flags & MF_POPUP
-	  || !(flags & MF_MOUSESELECT))
+      /* No help echo on owner-draw menu items, or when the keyboard
+	 is used to navigate the menus, since tooltips are distracting
+	 if they pop up elsewhere.  */
+      if ((flags & MF_OWNERDRAW) || (flags & MF_POPUP)
+	  || !(flags & MF_MOUSESELECT)
+	  /* Ignore any dwItemData for menu items whose flags don't
+	     have the MF_HILITE bit set.  These are dwItemData that
+	     Windows sends our way, but they aren't pointers to our
+	     Lisp_String objects, so trying to create Lisp_Strings out
+	     of them below and pass that to the keyboard queue will
+	     crash Emacs when we try to display those "strings".  It
+	     is unclear why we get these dwItemData, or what they are:
+	     sometimes they point to a wchar_t string that is the menu
+	     title, sometimes to someting that doesn't look like text
+	     at all.  (The problematic data also comes with the 0x0800
+	     bit set, but this bit is not documented, so we don't want
+	     to depend on it.)  */
+	  || !(flags & MF_HILITE))
 	help = Qnil;
       else
 	{

commit 61cc7bf8c4059e0243903752189a13c88cc2cee5
Author: Eli Zaretskii 
Date:   Wed Jan 14 20:14:02 2015 +0200

    Fix support of non-ASCII frame titles on MS-Windows  (Bug#19590)
    
     src/w32fns.c (w32_set_title_bar_text): New function, including
     support for titles with non-ASCII characters outside of the
     current system codepage.
     (x_set_name, x_set_title): Use it.

diff --git a/src/ChangeLog b/src/ChangeLog
index 6296302..a90cc41 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,10 @@
+2015-01-14  Eli Zaretskii  
+
+	* w32fns.c (w32_set_title_bar_text): New function, including
+	support for titles with non-ASCII characters outside of the
+	current system codepage.
+	(x_set_name, x_set_title): Use it.  (Bug#19590)
+
 2015-01-10  Eli Zaretskii  
 
 	* indent.c (Fvertical_motion): Return zero if we started from ZV
diff --git a/src/w32fns.c b/src/w32fns.c
index 412e91e..5af36b9 100644
--- a/src/w32fns.c
+++ b/src/w32fns.c
@@ -1732,6 +1732,50 @@ x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)
   run_window_configuration_change_hook (f);
 }
 
+static void
+w32_set_title_bar_text (struct frame *f, Lisp_Object name)
+{
+  if (FRAME_W32_WINDOW (f))
+    {
+      block_input ();
+#ifdef __CYGWIN__
+      GUI_FN (SetWindowText) (FRAME_W32_WINDOW (f),
+                              GUI_SDATA (GUI_ENCODE_SYSTEM (name)));
+#else
+      /* The frame's title many times shows the name of the file
+	 visited in the selected window's buffer, so it makes sense to
+	 support non-ASCII characters outside of the current system
+	 codepage in the title.  */
+      if (w32_unicode_filenames)
+	{
+	  Lisp_Object encoded_title = ENCODE_UTF_8 (name);
+	  wchar_t *title_w;
+	  int tlen = pMultiByteToWideChar (CP_UTF8, 0, SSDATA (encoded_title),
+					   -1, NULL, 0);
+
+	  if (tlen > 0)
+	    {
+	      /* Windows truncates the title text beyond what fits on
+		 a single line, so we can limit the length to some
+		 reasonably large value, and use alloca.  */
+	      if (tlen > 10000)
+		tlen = 10000;
+	      title_w = alloca ((tlen + 1) * sizeof (wchar_t));
+	      pMultiByteToWideChar (CP_UTF8, 0, SSDATA (encoded_title), -1,
+				    title_w, tlen);
+	      title_w[tlen] = L'\0';
+	      SetWindowTextW (FRAME_W32_WINDOW (f), title_w);
+	    }
+	  else	/* Conversion to UTF-16 failed, so we punt.  */
+	    SetWindowTextA (FRAME_W32_WINDOW (f),
+			    SSDATA (ENCODE_SYSTEM (name)));
+	}
+      else
+	SetWindowTextA (FRAME_W32_WINDOW (f), SSDATA (ENCODE_SYSTEM (name)));
+#endif
+      unblock_input ();
+    }
+}
 
 /* Change the name of frame F to NAME.  If NAME is nil, set F's name to
        w32_id_name.
@@ -1785,13 +1829,7 @@ x_set_name (struct frame *f, Lisp_Object name, int explicit)
   if (! NILP (f->title))
     name = f->title;
 
-  if (FRAME_W32_WINDOW (f))
-    {
-      block_input ();
-      GUI_FN (SetWindowText) (FRAME_W32_WINDOW (f),
-                              GUI_SDATA (GUI_ENCODE_SYSTEM (name)));
-      unblock_input ();
-    }
+  w32_set_title_bar_text (f, name);
 }
 
 /* This function should be called when the user's lisp code has
@@ -1829,13 +1867,7 @@ x_set_title (struct frame *f, Lisp_Object name, Lisp_Object old_name)
   if (NILP (name))
     name = f->name;
 
-  if (FRAME_W32_WINDOW (f))
-    {
-      block_input ();
-      GUI_FN (SetWindowText) (FRAME_W32_WINDOW (f),
-                              GUI_SDATA (GUI_ENCODE_SYSTEM (name)));
-      unblock_input ();
-    }
+  w32_set_title_bar_text (f, name);
 }
 
 void

commit 9602b62514df88ddf2e9dd1451c4e7f51756d65b
Author: Martin Rudalics 
Date:   Wed Jan 14 15:47:19 2015 +0100

    In update_frame_menubar remove garbaged code.
    
    * xmenu.c (update_frame_menubar): Remove garbaged code.

diff --git a/src/ChangeLog b/src/ChangeLog
index f07ad02..be2e89f 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,7 @@
+2015-01-14  Martin Rudalics  
+
+	* xmenu.c (update_frame_menubar): Remove garbaged code.
+
 2015-01-14  Paul Eggert  
 
 	remove_slash_colon need not be inline
diff --git a/src/xmenu.c b/src/xmenu.c
index 77f0ce5..9063a8a 100644
--- a/src/xmenu.c
+++ b/src/xmenu.c
@@ -641,7 +641,6 @@ update_frame_menubar (struct frame *f)
   /* For reasons I don't know Lucid wants to add one pixel to the frame
      height when adding the menu bar.  Compensate that here.  */
   new_height = FRAME_TEXT_HEIGHT (f) - 1;
-s);
 #endif /* USE_LUCID */
   adjust_frame_size (f, -1, new_height, 2, false, Qmenu_bar_lines);
   unblock_input ();

commit 81882be7111e361ad072b9512bfefa3430b3e867
Author: Stefan Monnier 
Date:   Mon Jan 12 13:07:52 2015 -0500

    * lisp/net/eww.el: Use lexical-binding.
    
    (eww-links-at-point): Remove unused arg.
    (eww-mode-map): Inherit from special-mode-map.
    (eww-mode): Derive from special-mode.  Don't use `setq' on a hook.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 072af5b..6e2adc9 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,10 +1,17 @@
+2015-01-14  Stefan Monnier  
+
+	* net/eww.el: Use lexical-binding.
+	(eww-links-at-point): Remove unused arg.
+	(eww-mode-map): Inherit from special-mode-map.
+	(eww-mode): Derive from special-mode.  Don't use `setq' on a hook.
+
 2015-01-13  Alan Mackenzie  
 
 	Allow compilation during loading of Modes derived from a CC Mode mode.
 	Fixes debbugs#19206.
 
-	* progmodes/cc-bytecomp.el (cc-bytecomp-compiling-or-loading): new
-	function which walks the stack to discover whether we're compiling
+	* progmodes/cc-bytecomp.el (cc-bytecomp-compiling-or-loading):
+	New function which walks the stack to discover whether we're compiling
 	or loading.
 	(cc-bytecomp-is-compiling): Reformulate, and move towards
 	beginning.
@@ -21,8 +28,8 @@
 	symbol's 'source property.
 	(c-lang-const): Use cc-bytecomp-is-compiling.
 
-	* progmodes/cc-langs.el (c-make-init-lang-vars-fun): Use
-	cc-bytecomp-is-compiling.
+	* progmodes/cc-langs.el (c-make-init-lang-vars-fun):
+	Use cc-bytecomp-is-compiling.
 
 2015-01-13  Stefan Monnier  
 
@@ -439,8 +446,8 @@
 	to `pre-command-hook'.
 	(xref--xref-buffer-mode-map): Don't remap `next-line' and
 	`previous-line'.  Additionally bind `xref-next-line' and
-	`xref-prev-line' to `n' and `p' respectively.  Bind
-	`xref-show-location-at-point' to `C-o'.
+	`xref-prev-line' to `n' and `p' respectively.
+	Bind `xref-show-location-at-point' to `C-o'.
 
 2015-01-01  Eli Zaretskii  
 
@@ -629,15 +636,15 @@
 	Add argument MSG to display user-friendly message when no process
 	is running.
 	(python-shell-switch-to-shell): Call pop-to-buffer with NORECORD.
-	(python-shell-make-comint): Rename argument SHOW from POP.  Use
-	display-buffer instead of pop-to-buffer.
+	(python-shell-make-comint): Rename argument SHOW from POP.
+	Use display-buffer instead of pop-to-buffer.
 	(run-python): Doc fix.  Return process.
 	(python-shell-get-or-create-process): Make obsolete.
 
 2014-12-27  Fabián Ezequiel Gallina  
 
-	* progmodes/python.el (python-shell-buffer-substring): Handle
-	cornercase when region sent starts at point-min.
+	* progmodes/python.el (python-shell-buffer-substring):
+	Handle cornercase when region sent starts at point-min.
 
 2014-12-27  Eli Zaretskii  
 
@@ -809,8 +816,8 @@
 
 2014-12-25  Filipp Gunbin  
 
-	* dired-aux.el (dired-maybe-insert-subdir): Make
-	dired-maybe-insert-subdir always skip trivial files.
+	* dired-aux.el (dired-maybe-insert-subdir):
+	Make dired-maybe-insert-subdir always skip trivial files.
 
 2014-12-25  Helmut Eller  
             Dmitry Gutov  
@@ -855,8 +862,8 @@
 
 	* window.el (mouse-autoselect-window-position-1): New variable.
 	(mouse-autoselect-window-cancel)
-	(mouse-autoselect-window-select, handle-select-window): With
-	delayed autoselection select window only if mouse moves after
+	(mouse-autoselect-window-select, handle-select-window):
+	With delayed autoselection select window only if mouse moves after
 	selecting its frame.
 
 2014-12-24  Michael Albinus  
diff --git a/lisp/net/eww.el b/lisp/net/eww.el
index 71094b1..879eb53 100644
--- a/lisp/net/eww.el
+++ b/lisp/net/eww.el
@@ -1,4 +1,4 @@
-;;; eww.el --- Emacs Web Wowser
+;;; eww.el --- Emacs Web Wowser  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
@@ -552,7 +552,7 @@ See the `eww-search-prefix' variable for the search engine used."
   "Return URI of the Web page the current EWW buffer is visiting."
   (plist-get eww-data :url))
 
-(defun eww-links-at-point (&optional pt)
+(defun eww-links-at-point ()
   "Return list of URIs, if any, linked at point."
   (remq nil
 	(list (get-text-property (point) 'shr-url)
@@ -631,17 +631,13 @@ the like."
 
 (defvar eww-mode-map
   (let ((map (make-sparse-keymap)))
-    (suppress-keymap map)
-    (define-key map "q" 'quit-window)
-    (define-key map "g" 'eww-reload)
+    (set-keymap-parent map special-mode-map)
+    (define-key map "g" 'eww-reload) ;FIXME: revert-buffer-function instead!
     (define-key map "G" 'eww)
     (define-key map [?\t] 'shr-next-link)
     (define-key map [?\M-\t] 'shr-previous-link)
     (define-key map [backtab] 'shr-previous-link)
     (define-key map [delete] 'scroll-down-command)
-    (define-key map [?\S-\ ] 'scroll-down-command)
-    (define-key map "\177" 'scroll-down-command)
-    (define-key map " " 'scroll-up-command)
     (define-key map "l" 'eww-back-url)
     (define-key map "r" 'eww-forward-url)
     (define-key map "n" 'eww-next-url)
@@ -699,21 +695,19 @@ the like."
     map)
   "Tool bar for `eww-mode'.")
 
-(define-derived-mode eww-mode nil "eww"
-  "Mode for browsing the web.
-
-\\{eww-mode-map}"
+(define-derived-mode eww-mode special-mode "eww"
+  "Mode for browsing the web."
   (setq-local eww-data (list :title ""))
-  (setq-local browse-url-browser-function 'eww-browse-url)
-  (setq-local after-change-functions 'eww-process-text-input)
+  (setq-local browse-url-browser-function #'eww-browse-url)
+  (add-hook 'after-change-functions #'eww-process-text-input nil t)
   (setq-local eww-history nil)
   (setq-local eww-history-position 0)
   (when (boundp 'tool-bar-map)
-   (setq-local tool-bar-map eww-tool-bar-map))
+    (setq-local tool-bar-map eww-tool-bar-map))
   ;; desktop support
-  (setq-local desktop-save-buffer 'eww-desktop-misc-data)
+  (setq-local desktop-save-buffer #'eww-desktop-misc-data)
   ;; multi-page isearch support
-  (setq-local multi-isearch-next-buffer-function 'eww-isearch-next-buffer)
+  (setq-local multi-isearch-next-buffer-function #'eww-isearch-next-buffer)
   (setq truncate-lines t)
   (buffer-disable-undo)
   (setq buffer-read-only t))
@@ -1056,7 +1050,7 @@ See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.")
     (insert value)
     (shr-ensure-newline)
     (when (< (count-lines start (point)) lines)
-      (dotimes (i (- lines (count-lines start (point))))
+      (dotimes (_ (- lines (count-lines start (point))))
 	(insert "\n")))
     (setq end (point-marker))
     (goto-char start)
@@ -1848,7 +1842,7 @@ Also used when saving `eww-history'.")
     ;; .
     r))
 
-(defun eww-desktop-misc-data (directory)
+(defun eww-desktop-misc-data (_directory)
   "Return a property list with data used to restore eww buffers.
 This list will contain, as :history, the list, whose first element is
 the value of `eww-data', and the tail is `eww-history'.
@@ -1896,7 +1890,7 @@ Otherwise, the restored buffer will contain a prompt to do so by using
 
 ;;; Isearch support
 
-(defun eww-isearch-next-buffer (&optional buffer wrap)
+(defun eww-isearch-next-buffer (&optional _buffer wrap)
   "Go to the next page to search using `rel' attribute for navigation."
   (if wrap
       (condition-case nil

commit 009836b97cdab2b79cfa26c83459db3fd91c94b0
Author: Dmitry Antipov 
Date:   Wed Jan 14 15:56:46 2015 +0300

    Never move gap in make_buffer_string_both.
    
    * editfns.c (make_buffer_string_both): If requested range intersects
    the gap, don't move the latter but copy in two regions, thus avoiding
    unnecessary relocation of buffer data.

diff --git a/src/ChangeLog b/src/ChangeLog
index 4f7ef6e..f07ad02 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -21,6 +21,10 @@
 	(Fencode_time): ... adjusted user.
 	(Fset_time_zone_rule): Use decode_time_zone.
 
+	* editfns.c (make_buffer_string_both): If requested range intersects
+	the gap, don't move the latter but copy in two regions, thus avoiding
+	unnecessary relocation of buffer data.
+
 2015-01-14  Paul Eggert  
 
 	Use bool for boolean in xmenu.c, xml.c
diff --git a/src/editfns.c b/src/editfns.c
index 9a159ba..621e841 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -2624,15 +2624,34 @@ make_buffer_string_both (ptrdiff_t start, ptrdiff_t start_byte,
 			 ptrdiff_t end, ptrdiff_t end_byte, bool props)
 {
   Lisp_Object result, tem, tem1;
+  ptrdiff_t beg0, end0, beg1, end1, size;
 
-  if (start < GPT && GPT < end)
-    move_gap_both (start, start_byte);
+  if (start_byte < GPT_BYTE && GPT_BYTE < end_byte)
+    {
+      /* Two regions, before and after the gap.  */
+      beg0 = start_byte;
+      end0 = GPT_BYTE;
+      beg1 = GPT_BYTE + GAP_SIZE - BEG_BYTE;
+      end1 = end_byte + GAP_SIZE - BEG_BYTE;
+    }
+  else
+    {
+      /* The only region.  */
+      beg0 = start_byte;
+      end0 = end_byte;
+      beg1 = -1;
+      end1 = -1;
+    }
 
   if (! NILP (BVAR (current_buffer, enable_multibyte_characters)))
     result = make_uninit_multibyte_string (end - start, end_byte - start_byte);
   else
     result = make_uninit_string (end - start);
-  memcpy (SDATA (result), BYTE_POS_ADDR (start_byte), end_byte - start_byte);
+
+  size = end0 - beg0;
+  memcpy (SDATA (result), BYTE_POS_ADDR (beg0), size);
+  if (beg1 != -1)
+    memcpy (SDATA (result) + size, BEG_ADDR + beg1, end1 - beg1);
 
   /* If desired, update and copy the text properties.  */
   if (props)

commit 99a1492b8a1269a9a5a280c0510d0ec00114a9a1
Author: Dmitry Antipov 
Date:   Wed Jan 14 13:05:17 2015 +0300

    Fix last time zone handling change.
    
    * editfns.c (decode_time_zone): Return Lisp string instead.
    All related users changed.

diff --git a/src/editfns.c b/src/editfns.c
index e097893..9a159ba 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -2065,15 +2065,13 @@ check_tm_member (Lisp_Object obj, int offset)
 
 /* Decode ZONE as a time zone specification.  */
 
-static const char *
+static Lisp_Object
 decode_time_zone (Lisp_Object zone)
 {
-  const char *tzstring = NULL;
-
   if (EQ (zone, Qt))
-    tzstring = "UTC0";
+    return build_string ("UTC0");
   else if (STRINGP (zone))
-    tzstring = SSDATA (zone);
+    return zone;
   else if (INTEGERP (zone))
     {
       static char const tzbuf_format[] = "XXX%s%"pI"d:%02d:%02d";
@@ -2081,13 +2079,11 @@ decode_time_zone (Lisp_Object zone)
       EMACS_INT abszone = eabs (XINT (zone)), zone_hr = abszone / (60 * 60);
       int zone_min = (abszone / 60) % 60, zone_sec = abszone % 60;
 
-      sprintf (tzbuf, tzbuf_format, &"-"[XINT (zone) < 0],
-	       zone_hr, zone_min, zone_sec);
-      tzstring = tzbuf;
+      return make_formatted_string (tzbuf, tzbuf_format, &"-"[XINT (zone) < 0],
+				    zone_hr, zone_min, zone_sec);
     }
   else
     xsignal2 (Qerror, build_string ("Invalid time zone specification"), zone);
-  return tzstring;
 }
 
 DEFUN ("encode-time", Fencode_time, Sencode_time, 6, MANY, 0,
@@ -2132,7 +2128,7 @@ usage: (encode-time SECOND MINUTE HOUR DAY MONTH YEAR &optional ZONE)  */)
     value = mktime (&tm);
   else
     {
-      timezone_t tz = tzalloc (decode_time_zone (zone));
+      timezone_t tz = tzalloc (SSDATA (decode_time_zone (zone)));
       value = mktime_z (tz, &tm);
       tzfree (tz);
     }
@@ -2278,7 +2274,7 @@ variable `process-environment', whereas `set-time-zone-rule' affects
 only the former.  */)
   (Lisp_Object tz)
 {
-  const char *tzstring = NILP (tz) ? initial_tz : decode_time_zone (tz);
+  const char *tzstring = NILP (tz) ? initial_tz : SSDATA (decode_time_zone (tz));
 
   block_input ();
   set_time_zone_rule (tzstring);

commit da396beb6e0b9ef9a45afb849eeda26da14038af
Author: Dmitry Antipov 
Date:   Wed Jan 14 12:43:43 2015 +0300

    Consistently handle time zone specification.
    
    * editfns.c (decode_time_zone): New function, refactored out from ...
    (Fencode_time): ... adjusted user.
    (Fset_time_zone_rule): Use decode_time_zone.

diff --git a/src/ChangeLog b/src/ChangeLog
index 3523ea4..4f7ef6e 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -16,6 +16,11 @@
 	* callproc.c (encode_current_directory, call_process):
 	* process.c (Fstart_process): Use it.
 
+	Consistently handle time zone specification.
+	* editfns.c (decode_time_zone): New function, refactored out from ...
+	(Fencode_time): ... adjusted user.
+	(Fset_time_zone_rule): Use decode_time_zone.
+
 2015-01-14  Paul Eggert  
 
 	Use bool for boolean in xmenu.c, xml.c
diff --git a/src/editfns.c b/src/editfns.c
index cd15f65..e097893 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -2063,6 +2063,33 @@ check_tm_member (Lisp_Object obj, int offset)
   return n - offset;
 }
 
+/* Decode ZONE as a time zone specification.  */
+
+static const char *
+decode_time_zone (Lisp_Object zone)
+{
+  const char *tzstring = NULL;
+
+  if (EQ (zone, Qt))
+    tzstring = "UTC0";
+  else if (STRINGP (zone))
+    tzstring = SSDATA (zone);
+  else if (INTEGERP (zone))
+    {
+      static char const tzbuf_format[] = "XXX%s%"pI"d:%02d:%02d";
+      char tzbuf[sizeof tzbuf_format + INT_STRLEN_BOUND (EMACS_INT)];
+      EMACS_INT abszone = eabs (XINT (zone)), zone_hr = abszone / (60 * 60);
+      int zone_min = (abszone / 60) % 60, zone_sec = abszone % 60;
+
+      sprintf (tzbuf, tzbuf_format, &"-"[XINT (zone) < 0],
+	       zone_hr, zone_min, zone_sec);
+      tzstring = tzbuf;
+    }
+  else
+    xsignal2 (Qerror, build_string ("Invalid time zone specification"), zone);
+  return tzstring;
+}
+
 DEFUN ("encode-time", Fencode_time, Sencode_time, 6, MANY, 0,
        doc: /* Convert SECOND, MINUTE, HOUR, DAY, MONTH, YEAR and ZONE to internal time.
 This is the reverse operation of `decode-time', which see.
@@ -2105,30 +2132,7 @@ usage: (encode-time SECOND MINUTE HOUR DAY MONTH YEAR &optional ZONE)  */)
     value = mktime (&tm);
   else
     {
-      static char const tzbuf_format[] = "XXX%s%"pI"d:%02d:%02d";
-      char tzbuf[sizeof tzbuf_format + INT_STRLEN_BOUND (EMACS_INT)];
-      const char *tzstring;
-
-      if (EQ (zone, Qt))
-	tzstring = "UTC0";
-      else if (STRINGP (zone))
-	tzstring = SSDATA (zone);
-      else if (INTEGERP (zone))
-	{
-	  EMACS_INT abszone = eabs (XINT (zone));
-	  EMACS_INT zone_hr = abszone / (60*60);
-	  int zone_min = (abszone/60) % 60;
-	  int zone_sec = abszone % 60;
-	  sprintf (tzbuf, tzbuf_format, &"-"[XINT (zone) < 0],
-		   zone_hr, zone_min, zone_sec);
-	  tzstring = tzbuf;
-	}
-      else
-	tzstring = 0;
-
-      timezone_t tz = tzstring ? tzalloc (tzstring) : 0;
-      if (! tz)
-	error ("Invalid time zone specification");
+      timezone_t tz = tzalloc (decode_time_zone (zone));
       value = mktime_z (tz, &tm);
       tzfree (tz);
     }
@@ -2265,7 +2269,8 @@ the data it can't find.  */)
 DEFUN ("set-time-zone-rule", Fset_time_zone_rule, Sset_time_zone_rule, 1, 1, 0,
        doc: /* Set the local time zone using TZ, a string specifying a time zone rule.
 If TZ is nil, use implementation-defined default time zone information.
-If TZ is t, use Universal Time.
+If TZ is t, use Universal Time.  If TZ is an integer, it is treated as in
+`encode-time'.
 
 Instead of calling this function, you typically want (setenv "TZ" TZ).
 That changes both the environment of the Emacs process and the
@@ -2273,17 +2278,7 @@ variable `process-environment', whereas `set-time-zone-rule' affects
 only the former.  */)
   (Lisp_Object tz)
 {
-  const char *tzstring;
-
-  if (! (NILP (tz) || EQ (tz, Qt)))
-    CHECK_STRING (tz);
-
-  if (NILP (tz))
-    tzstring = initial_tz;
-  else if (EQ (tz, Qt))
-    tzstring = "UTC0";
-  else
-    tzstring = SSDATA (tz);
+  const char *tzstring = NILP (tz) ? initial_tz : decode_time_zone (tz);
 
   block_input ();
   set_time_zone_rule (tzstring);

commit d4b352af3e7d5c1afc719fb1f8c7c578642d8250
Author: Paul Eggert 
Date:   Wed Jan 14 00:42:15 2015 -0800

    remove_slash_colon need not be inline
    
    * process.c, process.h (remove_slash_colon): No longer inline.
    This saves text bytes without hurting runtime performance.

diff --git a/src/ChangeLog b/src/ChangeLog
index 1267816..3523ea4 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,9 @@
+2015-01-14  Paul Eggert  
+
+	remove_slash_colon need not be inline
+	* process.c, process.h (remove_slash_colon): No longer inline.
+	This saves text bytes without hurting runtime performance.
+
 2015-01-14  Dmitry Antipov  
 
 	Avoid extra multibyteness check in ENCODE_FILE users.
diff --git a/src/process.c b/src/process.c
index 166bf85..77c94f2 100644
--- a/src/process.c
+++ b/src/process.c
@@ -3827,6 +3827,18 @@ Data that is unavailable is returned as nil.  */)
 #endif
 }
 
+/* If program file NAME starts with /: for quoting a magic
+   name, remove that, preserving the multibyteness of NAME.  */
+
+Lisp_Object
+remove_slash_colon (Lisp_Object name)
+{
+  return
+    ((SBYTES (name) > 2 && SREF (name, 0) == '/' && SREF (name, 1) == ':')
+     ? make_specified_string (SSDATA (name) + 2, SCHARS (name) - 2,
+			      SBYTES (name) - 2, STRING_MULTIBYTE (name))
+     : name);
+}
 
 /* Turn off input and output for process PROC.  */
 
diff --git a/src/process.h b/src/process.h
index 58b1dae..36979dc 100644
--- a/src/process.h
+++ b/src/process.h
@@ -237,17 +237,6 @@ extern Lisp_Object network_interface_list (void);
 extern Lisp_Object network_interface_info (Lisp_Object);
 #endif
 
-/* If program file NAME starts with /: for quoting a magic
-   name, remove that, preserving the multibyteness of NAME.  */
-
-INLINE Lisp_Object
-remove_slash_colon (Lisp_Object name)
-{
-  return
-    ((SBYTES (name) > 2 && SREF (name, 0) == '/' && SREF (name, 1) == ':')
-     ? make_specified_string (SSDATA (name) + 2, SCHARS (name) - 2,
-			      SBYTES (name) - 2, STRING_MULTIBYTE (name))
-     : name);
-}
+extern Lisp_Object remove_slash_colon (Lisp_Object);
 
 INLINE_HEADER_END

commit d7e26b44109f4068d41a075fa89d11c1a8156f66
Author: Dmitry Antipov 
Date:   Wed Jan 14 10:08:44 2015 +0300

    Consolidate common path transformation code.
    
    * process.h (remove_slash_colon): New function.
    * callproc.c (encode_current_directory, call_process):
    * process.c (Fstart_process): Use it.

diff --git a/src/ChangeLog b/src/ChangeLog
index 5055ed1..1267816 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -6,6 +6,10 @@
 	Do not check for STRING_MULTIBYTE because encode_file_name
 	is a no-op for unibyte strings.
 
+	* process.h (remove_slash_colon): New function.
+	* callproc.c (encode_current_directory, call_process):
+	* process.c (Fstart_process): Use it.
+
 2015-01-14  Paul Eggert  
 
 	Use bool for boolean in xmenu.c, xml.c
diff --git a/src/callproc.c b/src/callproc.c
index 970a201..63ab9bf 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -131,11 +131,9 @@ encode_current_directory (void)
     report_file_error ("Setting current directory",
 		       BVAR (current_buffer, directory));
 
-  /* Remove "/:" from dir.  */
-  if (! NILP (Fstring_match (build_string ("^/:"), dir, Qnil)))
-    dir = Fsubstring (dir, make_number (2), Qnil);
+  /* Remove "/:" from DIR and encode it.  */
+  dir = ENCODE_FILE (remove_slash_colon (dir));
 
-  dir = ENCODE_FILE (dir);
   if (! file_accessible_directory_p (dir))
     report_file_error ("Setting current directory",
 		       BVAR (current_buffer, directory));
@@ -467,11 +465,8 @@ call_process (ptrdiff_t nargs, Lisp_Object *args, int filefd,
       report_file_error ("Searching for program", args[0]);
   }
 
-  /* If program file name starts with /: for quoting a magic name,
-     discard that.  */
-  if (SBYTES (path) > 2 && SREF (path, 0) == '/'
-      && SREF (path, 1) == ':')
-    path = Fsubstring (path, make_number (2), Qnil);
+  /* Remove "/:" from PATH.  */
+  path = remove_slash_colon (path);
 
   SAFE_NALLOCA (new_argv, 1, nargs < 4 ? 2 : nargs - 2);
 
diff --git a/src/process.c b/src/process.c
index 9015383..166bf85 100644
--- a/src/process.c
+++ b/src/process.c
@@ -1517,11 +1517,8 @@ usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS)  */)
 	  tem = program;
 	}
 
-      /* If program file name starts with /: for quoting a magic name,
-	 discard that.  */
-      if (SBYTES (tem) > 2 && SREF (tem, 0) == '/'
-	  && SREF (tem, 1) == ':')
-	tem = Fsubstring (tem, make_number (2), Qnil);
+      /* Remove "/:" from TEM.  */
+      tem = remove_slash_colon (tem);
 
       {
 	Lisp_Object arg_encoding = Qnil;
diff --git a/src/process.h b/src/process.h
index 7803672..58b1dae 100644
--- a/src/process.h
+++ b/src/process.h
@@ -237,4 +237,17 @@ extern Lisp_Object network_interface_list (void);
 extern Lisp_Object network_interface_info (Lisp_Object);
 #endif
 
+/* If program file NAME starts with /: for quoting a magic
+   name, remove that, preserving the multibyteness of NAME.  */
+
+INLINE Lisp_Object
+remove_slash_colon (Lisp_Object name)
+{
+  return
+    ((SBYTES (name) > 2 && SREF (name, 0) == '/' && SREF (name, 1) == ':')
+     ? make_specified_string (SSDATA (name) + 2, SCHARS (name) - 2,
+			      SBYTES (name) - 2, STRING_MULTIBYTE (name))
+     : name);
+}
+
 INLINE_HEADER_END

commit 01ebf7a3655541ef09cee068bddffbc1b38c69c8
Author: Dmitry Antipov 
Date:   Wed Jan 14 09:50:39 2015 +0300

    Avoid extra multibyteness check in ENCODE_FILE users.
    
    * callproc.c (encode_current_directory, Fcall_process, call_process):
    * dired.c (directory_files_internal, file_name_completion):
    Do not check for STRING_MULTIBYTE because encode_file_name
    is a no-op for unibyte strings.

diff --git a/src/ChangeLog b/src/ChangeLog
index 67f4866..5055ed1 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,11 @@
+2015-01-14  Dmitry Antipov  
+
+	Avoid extra multibyteness check in ENCODE_FILE users.
+	* callproc.c (encode_current_directory, Fcall_process, call_process):
+	* dired.c (directory_files_internal, file_name_completion):
+	Do not check for STRING_MULTIBYTE because encode_file_name
+	is a no-op for unibyte strings.
+
 2015-01-14  Paul Eggert  
 
 	Use bool for boolean in xmenu.c, xml.c
diff --git a/src/callproc.c b/src/callproc.c
index 0fdf278..970a201 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -135,8 +135,7 @@ encode_current_directory (void)
   if (! NILP (Fstring_match (build_string ("^/:"), dir, Qnil)))
     dir = Fsubstring (dir, make_number (2), Qnil);
 
-  if (STRING_MULTIBYTE (dir))
-    dir = ENCODE_FILE (dir);
+  dir = ENCODE_FILE (dir);
   if (! file_accessible_directory_p (dir))
     report_file_error ("Setting current directory",
 		       BVAR (current_buffer, directory));
@@ -267,7 +266,7 @@ usage: (call-process PROGRAM &optional INFILE DESTINATION DISPLAY &rest ARGS)  *
     infile = build_string (NULL_DEVICE);
 
   GCPRO1 (infile);
-  encoded_infile = STRING_MULTIBYTE (infile) ? ENCODE_FILE (infile) : infile;
+  encoded_infile = ENCODE_FILE (infile);
 
   filefd = emacs_open (SSDATA (encoded_infile), O_RDONLY, 0);
   if (filefd < 0)
@@ -439,9 +438,9 @@ call_process (ptrdiff_t nargs, Lisp_Object *args, int filefd,
 
     GCPRO4 (buffer, current_dir, error_file, output_file);
 
-    if (STRINGP (error_file) && STRING_MULTIBYTE (error_file))
+    if (STRINGP (error_file))
       error_file = ENCODE_FILE (error_file);
-    if (STRINGP (output_file) && STRING_MULTIBYTE (output_file))
+    if (STRINGP (output_file))
       output_file = ENCODE_FILE (output_file);
     UNGCPRO;
   }
@@ -498,8 +497,7 @@ call_process (ptrdiff_t nargs, Lisp_Object *args, int filefd,
       }
     else
       new_argv[1] = 0;
-    if (STRING_MULTIBYTE (path))
-      path = ENCODE_FILE (path);
+    path = ENCODE_FILE (path);
     new_argv[0] = SSDATA (path);
     UNGCPRO;
   }
diff --git a/src/dired.c b/src/dired.c
index 9026c56..ca43cd9 100644
--- a/src/dired.c
+++ b/src/dired.c
@@ -176,10 +176,8 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full,
   /* Note: ENCODE_FILE and DECODE_FILE can GC because they can run
      run_pre_post_conversion_on_str which calls Lisp directly and
      indirectly.  */
-  if (STRING_MULTIBYTE (dirfilename))
-    dirfilename = ENCODE_FILE (dirfilename);
-  encoded_directory = (STRING_MULTIBYTE (directory)
-		       ? ENCODE_FILE (directory) : directory);
+  dirfilename = ENCODE_FILE (dirfilename);
+  encoded_directory = ENCODE_FILE (directory);
 
   /* Now *bufp is the compiled form of MATCH; don't call anything
      which might compile a new regexp until we're done with the loop!  */
@@ -482,7 +480,7 @@ file_name_completion (Lisp_Object file, Lisp_Object dirname, bool all_flag,
   /* Actually, this is not quite true any more: we do most of the completion
      work with decoded file names, but we still do some filtering based
      on the encoded file name.  */
-  encoded_file = STRING_MULTIBYTE (file) ? ENCODE_FILE (file) : file;
+  encoded_file = ENCODE_FILE (file);
 
   encoded_dir = ENCODE_FILE (Fdirectory_file_name (dirname));
 

commit 3ef29501b029567156440d257c758b99099213fe
Author: Paul Eggert 
Date:   Tue Jan 13 21:19:40 2015 -0800

    Use bool for boolean in xmenu.c, xml.c
    
    * xmenu.c (x_menu_set_in_use, popup_get_selection)
    (Fx_menu_bar_open_internal, popup_widget_loop)
    (x_activate_menubar, xg_crazy_callback_abort)
    (update_frame_menubar, set_frame_menubar)
    (initialize_frame_menubar, free_frame_menubar)
    (create_and_show_popup_menu, x_menu_show)
    (create_and_show_dialog, x_dialog_show):
    * xml.c (libxml2_loaded_p, init_libxml2_functions, parse_region)
    (Flibxml_parse_html_region, Flibxml_parse_xml_region):
    * xrdb.c (main) [TESTRM]:
    * xsettings.c (init_gsettings):
    * xterm.c (XFillRectangle, xg_scroll_callback)
    (xg_end_scroll_callback):
    * xterm.h (x_menu_set_in_use) [USE_GTK || USE_MOTIF]:
    Use bool for boolean.
    * xmenu.c (TRUE): Remove; no longer used.
    (show_help_event): Remove long-unused code.
    (set_frame_menubar): Remove "#if 1" and corresponding "#endif" lines.

diff --git a/src/ChangeLog b/src/ChangeLog
index 8d05ec1..67f4866 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,25 @@
+2015-01-14  Paul Eggert  
+
+	Use bool for boolean in xmenu.c, xml.c
+	* xmenu.c (x_menu_set_in_use, popup_get_selection)
+	(Fx_menu_bar_open_internal, popup_widget_loop)
+	(x_activate_menubar, xg_crazy_callback_abort)
+	(update_frame_menubar, set_frame_menubar)
+	(initialize_frame_menubar, free_frame_menubar)
+	(create_and_show_popup_menu, x_menu_show)
+	(create_and_show_dialog, x_dialog_show):
+	* xml.c (libxml2_loaded_p, init_libxml2_functions, parse_region)
+	(Flibxml_parse_html_region, Flibxml_parse_xml_region):
+	* xrdb.c (main) [TESTRM]:
+	* xsettings.c (init_gsettings):
+	* xterm.c (XFillRectangle, xg_scroll_callback)
+	(xg_end_scroll_callback):
+	* xterm.h (x_menu_set_in_use) [USE_GTK || USE_MOTIF]:
+	Use bool for boolean.
+	* xmenu.c (TRUE): Remove; no longer used.
+	(show_help_event): Remove long-unused code.
+	(set_frame_menubar): Remove "#if 1" and corresponding "#endif" lines.
+
 2015-01-13  Paul Eggert  
 
 	Don't say Fnext_read_file_uses_dialog_p is const
diff --git a/src/xmenu.c b/src/xmenu.c
index fd667a8..77f0ce5 100644
--- a/src/xmenu.c
+++ b/src/xmenu.c
@@ -104,10 +104,6 @@ along with GNU Emacs.  If not, see .  */
 
 #include "menu.h"
 
-#ifndef TRUE
-#define TRUE 1
-#endif /* no TRUE */
-
 
 /* Flag which when set indicates a dialog or menu has been posted by
    Xt on behalf of one of the widget sets.  */
@@ -146,7 +142,7 @@ menubar_id_to_frame (LWLIB_ID id)
 /* Set menu_items_inuse so no other popup menu or dialog is created.  */
 
 void
-x_menu_set_in_use (int in_use)
+x_menu_set_in_use (bool in_use)
 {
   menu_items_inuse = in_use ? Qt : Qnil;
   popup_activated_flag = in_use;
@@ -222,7 +218,8 @@ x_menu_wait_for_event (void *data)
    with BLOCK_INPUT, UNBLOCK_INPUT wrappers.  */
 
 static void
-popup_get_selection (XEvent *initial_event, struct x_display_info *dpyinfo, LWLIB_ID id, int do_timers)
+popup_get_selection (XEvent *initial_event, struct x_display_info *dpyinfo,
+		     LWLIB_ID id, bool do_timers)
 {
   XEvent event;
 
@@ -287,13 +284,13 @@ If FRAME is nil or not given, use the selected frame.  */)
   block_input ();
 
   if (FRAME_EXTERNAL_MENU_BAR (f))
-    set_frame_menubar (f, 0, 1);
+    set_frame_menubar (f, false, true);
 
   menubar = FRAME_X_OUTPUT (f)->menubar_widget;
   if (menubar)
     {
       Window child;
-      bool error_p = 0;
+      bool error_p = false;
 
       x_catch_errors (FRAME_X_DISPLAY (f));
       memset (&ev, 0, sizeof ev);
@@ -366,7 +363,7 @@ If FRAME is nil or not given, use the selected frame.  */)
   f = decode_window_system_frame (frame);
 
   if (FRAME_EXTERNAL_MENU_BAR (f))
-    set_frame_menubar (f, 0, 1);
+    set_frame_menubar (f, false, true);
 
   menubar = FRAME_X_OUTPUT (f)->menubar_widget;
   if (menubar)
@@ -390,7 +387,7 @@ If FRAME is nil or not given, use the selected frame.  */)
    Used for popup menus and dialogs. */
 
 static void
-popup_widget_loop (int do_timers, GtkWidget *widget)
+popup_widget_loop (bool do_timers, GtkWidget *widget)
 {
   ++popup_activated_flag;
 
@@ -431,7 +428,7 @@ x_activate_menubar (struct frame *f)
     return;
 #endif
 
-  set_frame_menubar (f, 0, 1);
+  set_frame_menubar (f, false, true);
   block_input ();
   popup_activated_flag = 1;
 #ifdef USE_GTK
@@ -488,24 +485,7 @@ show_help_event (struct frame *f, xt_or_gtk_widget widget, Lisp_Object help)
       kbd_buffer_store_help_event (frame, help);
     }
   else
-    {
-#if 0  /* This code doesn't do anything useful.  ++kfs */
-      /* WIDGET is the popup menu.  It's parent is the frame's
-	 widget.  See which frame that is.  */
-      xt_or_gtk_widget frame_widget = XtParent (widget);
-      Lisp_Object tail;
-
-      for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail))
-	{
-	  frame = XCAR (tail);
-	  if (FRAMEP (frame)
-	      && (f = XFRAME (frame),
-		  FRAME_X_P (f) && f->output_data.x->widget == frame_widget))
-	    break;
-	}
-#endif
-      show_help_echo (help, Qnil, Qnil, Qnil);
-    }
+    show_help_echo (help, Qnil, Qnil, Qnil);
 }
 
 /* Callback called when menu items are highlighted/unhighlighted
@@ -554,7 +534,7 @@ menu_highlight_callback (Widget widget, LWLIB_ID id, void *call_data)
    selected in a radio group.  If this variable is set to a non-zero
    value, we are creating menus and don't want callbacks right now.
 */
-static int xg_crazy_callback_abort;
+static bool xg_crazy_callback_abort;
 
 /* This callback is called from the menu bar pulldown menu
    when the user makes a selection.
@@ -656,13 +636,14 @@ update_frame_menubar (struct frame *f)
   lw_refigure_widget (x->column_widget, True);
 
   /* Force the pane widget to resize itself.  */
+  int new_height = -1;
 #ifdef USE_LUCID
   /* For reasons I don't know Lucid wants to add one pixel to the frame
      height when adding the menu bar.  Compensate that here.  */
-  adjust_frame_size (f, -1, FRAME_TEXT_HEIGHT (f) - 1, 2, 0, Qmenu_bar_lines);
-#else
-  adjust_frame_size (f, -1, -1, 2, 0, Qmenu_bar_lines);
+  new_height = FRAME_TEXT_HEIGHT (f) - 1;
+s);
 #endif /* USE_LUCID */
+  adjust_frame_size (f, -1, new_height, 2, false, Qmenu_bar_lines);
   unblock_input ();
 #endif /* USE_GTK */
 }
@@ -729,11 +710,11 @@ set_frame_menubar (struct frame *f, bool first_time, bool deep_p)
 #endif
 
   if (! menubar_widget)
-    deep_p = 1;
+    deep_p = true;
   /* Make the first call for any given frame always go deep.  */
   else if (!f->output_data.x->saved_menu_event && !deep_p)
     {
-      deep_p = 1;
+      deep_p = true;
       f->output_data.x->saved_menu_event = xmalloc (sizeof (XEvent));
       f->output_data.x->saved_menu_event->type = 0;
     }
@@ -840,7 +821,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool deep_p)
 	  else
 	    first_wv->contents = wv;
 	  /* Don't set wv->name here; GC during the loop might relocate it.  */
-	  wv->enabled = 1;
+	  wv->enabled = true;
 	  wv->button_type = BUTTON_TYPE_NONE;
 	  prev_wv = wv;
 	}
@@ -931,7 +912,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool deep_p)
   block_input ();
 
 #ifdef USE_GTK
-  xg_crazy_callback_abort = 1;
+  xg_crazy_callback_abort = true;
   if (menubar_widget)
     {
       /* The fourth arg is DEEP_P, which says to consider the entire
@@ -980,7 +961,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool deep_p)
       menubar_widget = lw_create_widget ("menubar", "menubar", id,
                                          first_wv,
 					 f->output_data.x->column_widget,
-					 0,
+					 false,
 					 popup_activate_callback,
 					 menubar_selection_callback,
 					 popup_deactivate_callback,
@@ -1002,11 +983,11 @@ set_frame_menubar (struct frame *f, bool first_time, bool deep_p)
 	    + f->output_data.x->menubar_widget->core.border_width)
 	 : 0);
 
-#if 1 /* Experimentally, we now get the right results
+#ifdef USE_LUCID
+      /* Experimentally, we now get the right results
 	 for -geometry -0-0 without this.  24 Aug 96, rms.
          Maybe so, but the menu bar size is missing the pixels so the
          WM size hints are off by these pixels.  Jan D, oct 2009.  */
-#ifdef USE_LUCID
     if (FRAME_EXTERNAL_MENU_BAR (f))
       {
         Dimension ibw = 0;
@@ -1015,7 +996,6 @@ set_frame_menubar (struct frame *f, bool first_time, bool deep_p)
         menubar_size += ibw;
       }
 #endif /* USE_LUCID */
-#endif /* 1 */
 
     FRAME_MENUBAR_HEIGHT (f) = menubar_size;
   }
@@ -1025,7 +1005,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool deep_p)
   update_frame_menubar (f);
 
 #ifdef USE_GTK
-  xg_crazy_callback_abort = 0;
+  xg_crazy_callback_abort = false;
 #endif
 
   unblock_input ();
@@ -1042,7 +1022,7 @@ initialize_frame_menubar (struct frame *f)
   /* This function is called before the first chance to redisplay
      the frame.  It has to be, so the frame will have the right size.  */
   fset_menu_bar_items (f, menu_bar_items (FRAME_MENU_BAR_ITEMS (f)));
-  set_frame_menubar (f, 1, 1);
+  set_frame_menubar (f, true, true);
 }
 
 
@@ -1094,21 +1074,21 @@ free_frame_menubar (struct frame *f)
 
       if (f->output_data.x->widget)
 	{
+	  int new_height = -1;
 #ifdef USE_MOTIF
 	  XtVaGetValues (f->output_data.x->widget, XtNx, &x1, XtNy, &y1, NULL);
 	  if (x1 == 0 && y1 == 0)
 	    XtVaSetValues (f->output_data.x->widget, XtNx, x0, XtNy, y0, NULL);
-	  if (frame_inhibit_resize (f, 0, Qmenu_bar_lines))
-	    adjust_frame_size (f, -1, old_height, 1, 0, Qmenu_bar_lines);
-	  else
+	  if (frame_inhibit_resize (f, false, Qmenu_bar_lines))
+	    new_height = old_height;
 #endif /* USE_MOTIF */
-	    adjust_frame_size (f, -1, -1, 2, 0, Qmenu_bar_lines);
+	  adjust_frame_size (f, -1, new_height, 2, false, Qmenu_bar_lines);
 	}
       else
 	{
 #ifdef USE_MOTIF
-	  if (frame_inhibit_resize (f, 0, Qmenu_bar_lines))
-	    adjust_frame_size (f, -1, old_height, 1, 0, Qmenu_bar_lines);
+	  if (frame_inhibit_resize (f, false, Qmenu_bar_lines))
+	    adjust_frame_size (f, -1, old_height, 1, false, Qmenu_bar_lines);
 #endif
 	}
 
@@ -1218,17 +1198,17 @@ create_and_show_popup_menu (struct frame *f, widget_value *first_wv,
 #ifdef HAVE_GTK3
   /* Always use position function for Gtk3.  Otherwise menus may become
      too small to show anything.  */
-  use_pos_func = 1;
+  use_pos_func = true;
 #endif
 
   eassert (FRAME_X_P (f));
 
-  xg_crazy_callback_abort = 1;
+  xg_crazy_callback_abort = true;
   menu = xg_create_widget ("popup", first_wv->name, f, first_wv,
                            G_CALLBACK (popup_selection_callback),
                            G_CALLBACK (popup_deactivate_callback),
                            G_CALLBACK (menu_highlight_callback));
-  xg_crazy_callback_abort = 0;
+  xg_crazy_callback_abort = false;
 
   if (use_pos_func)
     {
@@ -1269,7 +1249,7 @@ create_and_show_popup_menu (struct frame *f, widget_value *first_wv,
          two.  show_help_echo uses this to detect popup menus.  */
       popup_activated_flag = 1;
       /* Process events that apply to the menu.  */
-      popup_widget_loop (1, menu);
+      popup_widget_loop (true, menu);
     }
 
   unbind_to (specpdl_count, Qnil);
@@ -1331,14 +1311,14 @@ create_and_show_popup_menu (struct frame *f, widget_value *first_wv,
 
   menu_id = widget_id_tick++;
   menu = lw_create_widget ("popup", first_wv->name, menu_id, first_wv,
-                           f->output_data.x->widget, 1, 0,
+                           f->output_data.x->widget, true, 0,
                            popup_selection_callback,
                            popup_deactivate_callback,
                            menu_highlight_callback);
 
   event->type = ButtonPress;
   event->serial = 0;
-  event->send_event = 0;
+  event->send_event = false;
   event->display = FRAME_X_DISPLAY (f);
   event->time = CurrentTime;
   event->root = FRAME_DISPLAY_INFO (f)->root_window;
@@ -1374,7 +1354,7 @@ create_and_show_popup_menu (struct frame *f, widget_value *first_wv,
     record_unwind_protect_int (pop_down_menu, (int) menu_id);
 
     /* Process events that apply to the menu.  */
-    popup_get_selection (0, FRAME_DISPLAY_INFO (f), menu_id, 1);
+    popup_get_selection (0, FRAME_DISPLAY_INFO (f), menu_id, true);
 
     unbind_to (specpdl_count, Qnil);
   }
@@ -1400,8 +1380,6 @@ x_menu_show (struct frame *f, int x, int y, int menuflags,
     = alloca (menu_items_used * sizeof *subprefix_stack);
   int submenu_depth = 0;
 
-  int first_pane;
-
   ptrdiff_t specpdl_count = SPECPDL_INDEX ();
 
   eassert (FRAME_X_P (f));
@@ -1421,7 +1399,7 @@ x_menu_show (struct frame *f, int x, int y, int menuflags,
   wv = make_widget_value ("menu", NULL, true, Qnil);
   wv->button_type = BUTTON_TYPE_NONE;
   first_wv = wv;
-  first_pane = 1;
+  bool first_pane = true;
 
   /* Loop over all panes and items, filling in the tree.  */
   i = 0;
@@ -1432,14 +1410,14 @@ x_menu_show (struct frame *f, int x, int y, int menuflags,
 	  submenu_stack[submenu_depth++] = save_wv;
 	  save_wv = prev_wv;
 	  prev_wv = 0;
-	  first_pane = 1;
+	  first_pane = true;
 	  i++;
 	}
       else if (EQ (AREF (menu_items, i), Qlambda))
 	{
 	  prev_wv = save_wv;
 	  save_wv = submenu_stack[--submenu_depth];
-	  first_pane = 0;
+	  first_pane = false;
 	  i++;
 	}
       else if (EQ (AREF (menu_items, i), Qt)
@@ -1493,7 +1471,7 @@ x_menu_show (struct frame *f, int x, int y, int menuflags,
 	      save_wv = wv;
 	      prev_wv = 0;
 	    }
-	  first_pane = 0;
+	  first_pane = false;
 	  i += MENU_ITEMS_PANE_LENGTH;
 	}
       else
@@ -1688,7 +1666,7 @@ create_and_show_dialog (struct frame *f, widget_value *first_wv)
       gtk_widget_show_all (menu);
 
       /* Process events that apply to the menu.  */
-      popup_widget_loop (1, menu);
+      popup_widget_loop (true, menu);
 
       unbind_to (specpdl_count, Qnil);
     }
@@ -1725,7 +1703,7 @@ create_and_show_dialog (struct frame *f, widget_value *first_wv)
   apply_systemfont_to_dialog (f->output_data.x->widget);
 #endif
   lw_create_widget (first_wv->name, "dialog", dialog_id, first_wv,
-                    f->output_data.x->widget, 1, 0,
+                    f->output_data.x->widget, true, 0,
                     dialog_selection_callback, 0, 0);
   lw_modify_all_widgets (dialog_id, first_wv->contents, True);
   /* Display the dialog box.  */
@@ -1742,7 +1720,7 @@ create_and_show_dialog (struct frame *f, widget_value *first_wv)
 
     record_unwind_protect_int (pop_down_menu, (int) dialog_id);
 
-    popup_get_selection (0, FRAME_DISPLAY_INFO (f), dialog_id, 1);
+    popup_get_selection (0, FRAME_DISPLAY_INFO (f), dialog_id, true);
 
     unbind_to (count, Qnil);
   }
@@ -1765,8 +1743,8 @@ x_dialog_show (struct frame *f, Lisp_Object title,
 
   /* Number of elements seen so far, before boundary.  */
   int left_count = 0;
-  /* 1 means we've seen the boundary between left-hand elts and right-hand.  */
-  int boundary_seen = 0;
+  /* Whether we've seen the boundary between left-hand elts and right-hand.  */
+  bool boundary_seen = false;
 
   ptrdiff_t specpdl_count = SPECPDL_INDEX ();
 
@@ -1813,7 +1791,7 @@ x_dialog_show (struct frame *f, Lisp_Object title,
 	  {
 	    /* This is the boundary between left-side elts
 	       and right-side elts.  Stop incrementing right_count.  */
-	    boundary_seen = 1;
+	    boundary_seen = true;
 	    i++;
 	    continue;
 	  }
@@ -2099,7 +2077,7 @@ x_menu_show (struct frame *f, int x, int y, int menuflags,
 	  if ((menuflags & MENU_KEYMAPS) && !NILP (prefix))
 	    pane_string++;
 
-	  lpane = XMenuAddPane (FRAME_X_DISPLAY (f), menu, pane_string, TRUE);
+	  lpane = XMenuAddPane (FRAME_X_DISPLAY (f), menu, pane_string, true);
 	  if (lpane == XM_FAILURE)
 	    {
 	      XMenuDestroy (FRAME_X_DISPLAY (f), menu);
@@ -2224,8 +2202,8 @@ x_menu_show (struct frame *f, int x, int y, int menuflags,
       y += 1.5*height/(maxlines+2);
     }
 
-  XMenuSetAEQ (menu, TRUE);
-  XMenuSetFreeze (menu, TRUE);
+  XMenuSetAEQ (menu, true);
+  XMenuSetFreeze (menu, true);
   pane = selidx = 0;
 
 #ifndef MSDOS
diff --git a/src/xml.c b/src/xml.c
index 3e64788..e324177 100644
--- a/src/xml.c
+++ b/src/xml.c
@@ -43,14 +43,12 @@ DEF_DLL_FN (void, xmlFreeDoc, (xmlDocPtr));
 DEF_DLL_FN (void, xmlCleanupParser, (void));
 DEF_DLL_FN (void, xmlCheckVersion, (int));
 
-static int
+static bool
 libxml2_loaded_p (void)
 {
   Lisp_Object found = Fassq (Qlibxml2_dll, Vlibrary_cache);
 
-  if (CONSP (found))
-    return EQ (XCDR (found), Qt) ? 1 : 0;
-  return 0;
+  return CONSP (found) && EQ (XCDR (found), Qt);
 }
 
 # undef htmlReadMemory
@@ -81,20 +79,20 @@ load_dll_functions (HMODULE library)
 
 #else  /* !WINDOWSNT */
 
-static int
+static bool
 libxml2_loaded_p (void)
 {
-  return 1;
+  return true;
 }
 
 #endif	/* !WINDOWSNT */
 
-static int
+static bool
 init_libxml2_functions (void)
 {
 #ifdef WINDOWSNT
   if (libxml2_loaded_p ())
-    return 1;
+    return true;
   else
     {
       HMODULE library;
@@ -102,22 +100,22 @@ init_libxml2_functions (void)
       if (!(library = w32_delayed_load (Qlibxml2_dll)))
 	{
 	  message1 ("libxml2 library not found");
-	  return 0;
+	  return false;
 	}
 
       if (! load_dll_functions (library))
 	goto bad_library;
 
       Vlibrary_cache = Fcons (Fcons (Qlibxml2_dll, Qt), Vlibrary_cache);
-      return 1;
+      return true;
     }
 
  bad_library:
   Vlibrary_cache = Fcons (Fcons (Qlibxml2_dll, Qnil), Vlibrary_cache);
 
-  return 0;
+  return false;
 #else  /* !WINDOWSNT */
-  return 1;
+  return true;
 #endif	/* !WINDOWSNT */
 }
 
@@ -177,7 +175,8 @@ make_dom (xmlNode *node)
 }
 
 static Lisp_Object
-parse_region (Lisp_Object start, Lisp_Object end, Lisp_Object base_url, Lisp_Object discard_comments, int htmlp)
+parse_region (Lisp_Object start, Lisp_Object end, Lisp_Object base_url,
+	      Lisp_Object discard_comments, bool htmlp)
 {
   xmlDoc *doc;
   Lisp_Object result = Qnil;
@@ -263,7 +262,7 @@ If DISCARD-COMMENTS is non-nil, all HTML comments are discarded. */)
   (Lisp_Object start, Lisp_Object end, Lisp_Object base_url, Lisp_Object discard_comments)
 {
   if (init_libxml2_functions ())
-    return parse_region (start, end, base_url, discard_comments, 1);
+    return parse_region (start, end, base_url, discard_comments, true);
   return Qnil;
 }
 
@@ -276,7 +275,7 @@ If DISCARD-COMMENTS is non-nil, all HTML comments are discarded. */)
   (Lisp_Object start, Lisp_Object end, Lisp_Object base_url, Lisp_Object discard_comments)
 {
   if (init_libxml2_functions ())
-    return parse_region (start, end, base_url, discard_comments, 0);
+    return parse_region (start, end, base_url, discard_comments, false);
   return Qnil;
 }
 
diff --git a/src/xrdb.c b/src/xrdb.c
index f1176da..9e85e5a 100644
--- a/src/xrdb.c
+++ b/src/xrdb.c
@@ -667,7 +667,7 @@ main (int argc, char **argv)
   /* In a real program, you'd want to also do this: */
   display->db = xdb;
 
-  while (1)
+  while (true)
     {
       char query_name[90];
       char query_class[90];
diff --git a/src/xsettings.c b/src/xsettings.c
index 8dbc7d9..028487b 100644
--- a/src/xsettings.c
+++ b/src/xsettings.c
@@ -804,7 +804,7 @@ init_gsettings (void)
     GSettingsSchema *sc = g_settings_schema_source_lookup
       (g_settings_schema_source_get_default (),
        GSETTINGS_SCHEMA,
-       TRUE);
+       true);
     schema_found = sc != NULL;
     if (sc) g_settings_schema_unref (sc);
   }
diff --git a/src/xterm.c b/src/xterm.c
index 05d04c8..3955d02 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -3041,7 +3041,7 @@ XTflash (struct frame *f)
     gc = gdk_gc_new_with_values (window,
                                  &vals, GDK_GC_FUNCTION | GDK_GC_FOREGROUND);
 #define XFillRectangle(d, win, gc, x, y, w, h) \
-    gdk_draw_rectangle (window, gc, TRUE, x, y, w, h)
+    gdk_draw_rectangle (window, gc, true, x, y, w, h)
 #endif /* ! HAVE_GTK3 */
 #else /* ! USE_GTK */
     GC gc;
@@ -4594,7 +4594,7 @@ xg_scroll_callback (GtkRange     *range,
   GtkAdjustment *adj = GTK_ADJUSTMENT (gtk_range_get_adjustment (range));
   struct frame *f = g_object_get_data (G_OBJECT (range), XG_FRAME_DATA);
 
-  if (xg_ignore_gtk_scrollbar) return FALSE;
+  if (xg_ignore_gtk_scrollbar) return false;
 
   switch (scroll)
     {
@@ -4650,7 +4650,7 @@ xg_scroll_callback (GtkRange     *range,
 			       bar->horizontal);
     }
 
-  return FALSE;
+  return false;
 }
 
 /* Callback for button release. Sets dragging to -1 when dragging is done.  */
@@ -4669,7 +4669,7 @@ xg_end_scroll_callback (GtkWidget *widget,
       window_being_scrolled = Qnil;
     }
 
-  return FALSE;
+  return false;
 }
 
 
diff --git a/src/xterm.h b/src/xterm.h
index f2aff72..123f31c 100644
--- a/src/xterm.h
+++ b/src/xterm.h
@@ -1099,7 +1099,7 @@ extern Lisp_Object xw_popup_dialog (struct frame *, Lisp_Object, Lisp_Object);
 #endif
 
 #if defined USE_GTK || defined USE_MOTIF
-extern void x_menu_set_in_use (int);
+extern void x_menu_set_in_use (bool);
 #endif
 extern void x_menu_wait_for_event (void *data);
 extern void initialize_frame_menubar (struct frame *);

commit 785adfcc8dee02ac544f80e4f7f8d3d5b2965981
Author: Paul Eggert 
Date:   Tue Jan 13 15:22:19 2015 -0800

    Don't say Fnext_read_file_uses_dialog_p is const
    
    It's const only if a windowing system is not used; don't say it's
    const otherwise.  See:
    http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00310.html
    * lib-src/make-docfile.c (write_globals):
    Add a special hack for Fnext_read_file_uses_dialog_p.
    * src/fileio.c (next_read_file_uses_dialog_p): Remove.
    Move guts back to ...
    (Fnext_read_file_uses_dialog_p): ... here.
    Don't declare as const, as make-docfile.c now has a special case
    for this function.  This is an ugly hack, but it's better than
    lying to the compiler.

diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog
index 969aac8..e9205fd 100644
--- a/lib-src/ChangeLog
+++ b/lib-src/ChangeLog
@@ -1,3 +1,9 @@
+2015-01-13  Paul Eggert  
+
+	Don't say Fnext_read_file_uses_dialog_p is const
+	* make-docfile.c (write_globals):
+	Add a special hack for Fnext_read_file_uses_dialog_p.
+
 2015-01-13  Dmitry Antipov  
 
 	Support DEFUN attributes.
diff --git a/lib-src/make-docfile.c b/lib-src/make-docfile.c
index 79d421a..741fa4b 100644
--- a/lib-src/make-docfile.c
+++ b/lib-src/make-docfile.c
@@ -729,6 +729,18 @@ write_globals (void)
 
 	  if (globals[i].flags & DEFUN_const)
 	    fputs (" ATTRIBUTE_CONST", stdout);
+	  else if (strcmp (globals[i].name, "Fnext_read_file_uses_dialog_p")
+		   == 0)
+	    {
+	      /* It would be nice to have a cleaner way to deal with this
+		 special hack.  */
+	      fputs (("\n"
+		      "#if ! (defined USE_GTK || defined USE_MOTIF \\\n"
+		      "       || defined HAVE_NS || defined HAVE_NTGUI)\n"
+		      "\tATTRIBUTE_CONST\n"
+		      "#endif\n"),
+		     stdout);
+	    }
 
 	  puts (";");
 	}
diff --git a/src/ChangeLog b/src/ChangeLog
index 7ec6980..8d05ec1 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,16 @@
 2015-01-13  Paul Eggert  
 
+	Don't say Fnext_read_file_uses_dialog_p is const
+	It's const only if a windowing system is not used; don't say it's
+	const otherwise.  See:
+	http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00310.html
+	* fileio.c (next_read_file_uses_dialog_p): Remove.
+	Move guts back to ...
+	(Fnext_read_file_uses_dialog_p): ... here.
+	Don't declare as const, as make-docfile.c now has a special case
+	for this function.  This is an ugly hack, but it's better than
+	lying to the compiler.
+
 	Remove now-unnecessary forward XTYPE decl
 	* lisp.h (XTYPE): Remove forward declaration.  The recent merge
 	from emacs-24 fixed the problem in a better way, by moving XPNTR's
diff --git a/src/fileio.c b/src/fileio.c
index 45a31c0..6c443c9 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -5734,34 +5734,24 @@ then any auto-save counts as "recent".  */)
   return (SAVE_MODIFF < BUF_AUTOSAVE_MODIFF (current_buffer) ? Qt : Qnil);
 }
 
-/* We want Fnext_read_file_uses_dialog_p to have ATTRIBUTE_CONST
-   regardless of #ifdefs, so there is a trivial workaround.  See
-   http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00289.html.  */
-
-static bool
-next_read_file_uses_dialog_p (void)
-{
-#if defined (USE_MOTIF) || defined (HAVE_NTGUI) || defined (USE_GTK) \
-  || defined (HAVE_NS)
-  return ((NILP (last_nonmenu_event) || CONSP (last_nonmenu_event))
-	  && use_dialog_box
-	  && use_file_dialog
-	  && window_system_available (SELECTED_FRAME ()));
-#endif
-  return false;
-}
-
 /* Reading and completing file names.  */
 
 DEFUN ("next-read-file-uses-dialog-p", Fnext_read_file_uses_dialog_p,
        Snext_read_file_uses_dialog_p, 0, 0, 0,
        doc: /* Return t if a call to `read-file-name' will use a dialog.
 The return value is only relevant for a call to `read-file-name' that happens
-before any other event (mouse or keypress) is handled.  */
-       attributes: const)
+before any other event (mouse or keypress) is handled.  */)
   (void)
 {
-  return next_read_file_uses_dialog_p () ? Qt : Qnil;
+#if (defined USE_GTK || defined USE_MOTIF \
+     || defined HAVE_NS || defined HAVE_NTGUI)
+  if ((NILP (last_nonmenu_event) || CONSP (last_nonmenu_event))
+      && use_dialog_box
+      && use_file_dialog
+      && window_system_available (SELECTED_FRAME ()))
+    return Qt;
+#endif
+  return Qnil;
 }
 
 void

commit 564784766297a6f2e06434e2baa7a1d851672a36
Author: Paul Eggert 
Date:   Tue Jan 13 14:04:23 2015 -0800

    Remove now-unnecessary forward XTYPE decl
    
    * lisp.h (XTYPE): Remove forward declaration.  The recent merge
    from emacs-24 fixed the problem in a better way, by moving XPNTR's
    definition to after XTYPE's.

diff --git a/src/ChangeLog b/src/ChangeLog
index 2f40a46..7ec6980 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,10 @@
+2015-01-13  Paul Eggert  
+
+	Remove now-unnecessary forward XTYPE decl
+	* lisp.h (XTYPE): Remove forward declaration.  The recent merge
+	from emacs-24 fixed the problem in a better way, by moving XPNTR's
+	definition to after XTYPE's.
+
 2015-01-13  Eli Zaretskii  
 
 	Fix problems with 32-bit wide-int build exposed by MinGW.
diff --git a/src/lisp.h b/src/lisp.h
index ba1aff8..51556fc 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -610,7 +610,6 @@ INLINE bool (VECTORLIKEP) (Lisp_Object);
 INLINE bool WINDOWP (Lisp_Object);
 INLINE struct Lisp_Save_Value *XSAVE_VALUE (Lisp_Object);
 INLINE struct Lisp_Symbol *(XSYMBOL) (Lisp_Object);
-INLINE enum Lisp_Type (XTYPE) (Lisp_Object);
 INLINE void *(XUNTAG) (Lisp_Object, int);
 
 /* Defined in chartab.c.  */

commit 5aa618b05807d560126dfd09b9c9cb6b957b98de
Author: Eli Zaretskii 
Date:   Tue Jan 13 19:16:51 2015 +0200

    Fix problems with 32-bit wide-int build exposed by MinGW
    
     lisp.h (XPNTR): Move definition to after XTYPE, to avoid
     compilation error in an unoptimized build when !USE_LSB_TAG.
     src/w32heap.c (DUMPED_HEAP_SIZE): For 32-bit wide-int build, use the
     same larger value as for the 64-bit build.
     src/w32term.h (SCROLL_BAR_PACK): Cast the result to UINT_PTR to
     avoid compiler warnings.
     src/w32proc.c (Fw32_get_codepage_charset, Fw32_set_keyboard_layout):
     Avoid compiler warnings about cast from integer to pointer of
     different size.
     src/w32menu.c (menubar_selection_callback, w32_menu_show): Cast to
     UINT_PTR instead of EMACS_INT, to avoid compiler warnings about
     casting from integer to pointer of different size.
     (add_menu_item): Pass the help-echo string as a pointer to
     Lisp_String, not as a Lisp_Object.
     (w32_menu_display_help): Use make_lisp_ptr to reconstruct a Lisp
     string object from its C pointer.
     src/w32fns.c (w32_msg_pump) : Use
     make_lisp_ptr instead of XIL, to reconstruct a Lisp_Cons from its
     C pointer.
     : msg.lparam is now a C integer.
     (Fx_create_frame): Type-cast the result of XFASTINT to avoild
     compiler warnings about size differences.
     (Fw32_unregister_hot_key): Pass the tail of w32_grabbed_keys as a
     pointer to a Lisp_Cons struct, not as a disguised EMACS_INT.
     (Fw32_toggle_lock_key): Pass the new state of the key as a C
     integer; use -1 for nil.  Doc fix.
     src/.gdbinit (xgetsym): New subroutine.
     (xsymname, xsymbol): Use it.
     (xprintsym): No need to call xgetptr.

diff --git a/src/.gdbinit b/src/.gdbinit
index 1a2a973..91beaef 100644
--- a/src/.gdbinit
+++ b/src/.gdbinit
@@ -70,14 +70,18 @@ define xgettype
   set $type = (enum Lisp_Type) (USE_LSB_TAG ? $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
 end
 
+define xgetsym
+  xgetptr $arg0
+  if (!USE_LSB_TAG)
+    set $ptr = ($ptr << GCTYPEBITS)
+  end
+  set $ptr = ((struct Lisp_Symbol *) ((char *)lispsym + $ptr))
+end
+
 # Access the name of a symbol
 define xsymname
-  if (CHECK_LISP_OBJECT_TYPE)
-    set $bugfix = $arg0.i
-  else
-    set $bugfix = $arg0
-  end
-  set $symname = ((struct Lisp_Symbol *) ((char *)lispsym + $bugfix))->name
+  xgetsym $arg0
+  set $symname = $ptr->name
 end
 
 # Set up something to print out s-expressions.
@@ -760,7 +764,7 @@ end
 
 define xsymbol
   set $sym = $
-  xgetptr $sym
+  xgetsym $sym
   print (struct Lisp_Symbol *) $ptr
   xprintsym $sym
   echo \n
@@ -1082,8 +1086,7 @@ define xprintstr
 end
 
 define xprintsym
-  xgetptr $arg0
-  xsymname $ptr
+  xsymname $arg0
   xgetptr $symname
   set $sym_name = (struct Lisp_String *) $ptr
   xprintstr $sym_name
diff --git a/src/ChangeLog b/src/ChangeLog
index 81d6772..2f40a46 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,42 @@
+2015-01-13  Eli Zaretskii  
+
+	Fix problems with 32-bit wide-int build exposed by MinGW.
+	* lisp.h (XPNTR): Move definition to after XTYPE, to avoid
+	compilation error in an unoptimized build when !USE_LSB_TAG.
+
+	* w32heap.c (DUMPED_HEAP_SIZE): For 32-bit wide-int build, use the
+	same larger value as for the 64-bit build.
+
+	* w32term.h (SCROLL_BAR_PACK): Cast the result to UINT_PTR to
+	avoid compiler warnings.
+
+	* w32proc.c (Fw32_get_codepage_charset, Fw32_set_keyboard_layout):
+	Avoid compiler warnings about cast from integer to pointer of
+	different size.
+
+	* w32menu.c (menubar_selection_callback, w32_menu_show): Cast to
+	UINT_PTR instead of EMACS_INT, to avoid compiler warnings about
+	casting from integer to pointer of different size.
+	(add_menu_item): Pass the help-echo string as a pointer to
+	Lisp_String, not as a Lisp_Object.
+	(w32_menu_display_help): Use make_lisp_ptr to reconstruct a Lisp
+	string object from its C pointer.
+
+	* w32fns.c (w32_msg_pump) : Use
+	make_lisp_ptr instead of XIL, to reconstruct a Lisp_Cons from its
+	C pointer.
+	: msg.lparam is now a C integer.
+	(Fx_create_frame): Type-cast the result of XFASTINT to avoild
+	compiler warnings about size differences.
+	(Fw32_unregister_hot_key): Pass the tail of w32_grabbed_keys as a
+	pointer to a Lisp_Cons struct, not as a disguised EMACS_INT.
+	(Fw32_toggle_lock_key): Pass the new state of the key as a C
+	integer; use -1 for nil.  Doc fix.
+
+	* .gdbinit (xgetsym): New subroutine.
+	(xsymname, xsymbol): Use it.
+	(xprintsym): No need to call xgetptr.
+
 2015-01-13  Martin Rudalics  
 
 	* frame.c (adjust_frame_size): Make sure new numbers of
diff --git a/src/lisp.h b/src/lisp.h
index a11e612..ba1aff8 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -820,9 +820,6 @@ DEFINE_GDB_SYMBOL_END (VALMASK)
 #define MOST_POSITIVE_FIXNUM (EMACS_INT_MAX >> INTTYPEBITS)
 #define MOST_NEGATIVE_FIXNUM (-1 - MOST_POSITIVE_FIXNUM)
 
-/* Extract the pointer hidden within A.  */
-LISP_MACRO_DEFUN (XPNTR, void *, (Lisp_Object a), (a))
-
 #if USE_LSB_TAG
 
 LISP_MACRO_DEFUN (make_number, Lisp_Object, (EMACS_INT n), (n))
@@ -912,6 +909,9 @@ XUNTAG (Lisp_Object a, int type)
 
 #endif /* ! USE_LSB_TAG */
 
+/* Extract the pointer hidden within A.  */
+LISP_MACRO_DEFUN (XPNTR, void *, (Lisp_Object a), (a))
+
 /* Extract A's value as an unsigned integer.  */
 INLINE EMACS_UINT
 XUINT (Lisp_Object a)
diff --git a/src/w32fns.c b/src/w32fns.c
index 3b8346a..2dd92ff 100644
--- a/src/w32fns.c
+++ b/src/w32fns.c
@@ -2543,7 +2543,7 @@ w32_msg_pump (deferred_msg * msg_buf)
                  thread-safe.  The next line is okay because the cons
                  cell is never made into garbage and is not relocated by
                  GC.  */
-	      XSETCAR (XIL ((EMACS_INT) msg.lParam), Qnil);
+	      XSETCAR (make_lisp_ptr ((void *)msg.lParam, Lisp_Cons), Qnil);
 	      if (!PostThreadMessage (dwMainThreadId, WM_EMACS_DONE, 0, 0))
 		emacs_abort ();
 	      break;
@@ -2551,16 +2551,10 @@ w32_msg_pump (deferred_msg * msg_buf)
 	      {
 		int vk_code = (int) msg.wParam;
 		int cur_state = (GetKeyState (vk_code) & 1);
-		Lisp_Object new_state = XIL ((EMACS_INT) msg.lParam);
-
-		/* NB: This code must be thread-safe.  It is safe to
-                   call NILP because symbols are not relocated by GC,
-                   and pointer here is not touched by GC (so the markbit
-                   can't be set).  Numbers are safe because they are
-                   immediate values.  */
-		if (NILP (new_state)
-		    || (NUMBERP (new_state)
-			&& ((XUINT (new_state)) & 1) != cur_state))
+		int new_state = msg.lParam;
+
+		if (new_state == -1
+		    || ((new_state & 1) != cur_state))
 		  {
 		    one_w32_display_info.faked_key = vk_code;
 
@@ -4523,7 +4517,9 @@ This function is an internal primitive--use `make-frame' instead.  */)
   /* Specify the parent under which to make this window.  */
   if (!NILP (parent))
     {
-      f->output_data.w32->parent_desc = (Window) XFASTINT (parent);
+      /* Cast to UINT_PTR shuts up compiler warnings about cast to
+	 pointer from integer of different size.  */
+      f->output_data.w32->parent_desc = (Window) (UINT_PTR) XFASTINT (parent);
       f->output_data.w32->explicit_parent = 1;
     }
   else
@@ -7260,10 +7256,17 @@ DEFUN ("w32-unregister-hot-key", Fw32_unregister_hot_key,
 
   if (!NILP (item))
     {
+      LPARAM lparam;
+
+      eassert (CONSP (item));
+      /* Pass the tail of the list as a pointer to a Lisp_Cons cell,
+	 so that it works in a --with-wide-int build as well.  */
+      lparam = (LPARAM) XUNTAG (item, Lisp_Cons);
+
       /* Notify input thread about hot-key definition being removed, so
 	 that it takes effect without needing focus switch.  */
       if (PostThreadMessage (dwWindowsThreadId, WM_EMACS_UNREGISTER_HOT_KEY,
-			     (WPARAM) XINT (XCAR (item)), (LPARAM) XLI (item)))
+			     (WPARAM) XINT (XCAR (item)), lparam))
 	{
 	  MSG msg;
 	  GetMessage (&msg, NULL, WM_EMACS_DONE, WM_EMACS_DONE);
@@ -7318,10 +7321,15 @@ DEFUN ("w32-toggle-lock-key", Fw32_toggle_lock_key,
        doc: /* Toggle the state of the lock key KEY.
 KEY can be `capslock', `kp-numlock', or `scroll'.
 If the optional parameter NEW-STATE is a number, then the state of KEY
-is set to off if the low bit of NEW-STATE is zero, otherwise on.  */)
+is set to off if the low bit of NEW-STATE is zero, otherwise on.
+If NEW-STATE is omitted or nil, the function toggles the state,
+
+Value is the new state of the key, or nil if the function failed
+to change the state.  */)
   (Lisp_Object key, Lisp_Object new_state)
 {
   int vk_code;
+  LPARAM lparam;
 
   if (EQ (key, intern ("capslock")))
     vk_code = VK_CAPITAL;
@@ -7335,8 +7343,12 @@ is set to off if the low bit of NEW-STATE is zero, otherwise on.  */)
   if (!dwWindowsThreadId)
     return make_number (w32_console_toggle_lock_key (vk_code, new_state));
 
+  if (NILP (new_state))
+    lparam = -1;
+  else
+    lparam = (XUINT (new_state)) & 1;
   if (PostThreadMessage (dwWindowsThreadId, WM_EMACS_TOGGLE_LOCK_KEY,
-			 (WPARAM) vk_code, (LPARAM) XLI (new_state)))
+			 (WPARAM) vk_code, lparam))
     {
       MSG msg;
       GetMessage (&msg, NULL, WM_EMACS_DONE, WM_EMACS_DONE);
diff --git a/src/w32heap.c b/src/w32heap.c
index f683323..d5a9dae 100644
--- a/src/w32heap.c
+++ b/src/w32heap.c
@@ -114,7 +114,7 @@ typedef struct _RTL_HEAP_PARAMETERS {
    than half of the size stated below.  It would be nice to find a way
    to build only the first bootstrap-emacs.exe with the large size,
    and reset that to a lower value afterwards.  */
-#ifdef _WIN64
+#if defined _WIN64 || defined WIDE_EMACS_INT
 # define DUMPED_HEAP_SIZE (18*1024*1024)
 #else
 # define DUMPED_HEAP_SIZE (11*1024*1024)
diff --git a/src/w32menu.c b/src/w32menu.c
index a65e399..2742276 100644
--- a/src/w32menu.c
+++ b/src/w32menu.c
@@ -217,9 +217,9 @@ menubar_selection_callback (struct frame *f, void * client_data)
       else
 	{
 	  entry = AREF (vector, i + MENU_ITEMS_ITEM_VALUE);
-	  /* The EMACS_INT cast avoids a warning.  There's no problem
+	  /* The UINT_PTR cast avoids a warning.  There's no problem
 	     as long as pointers have enough bits to hold small integers.  */
-	  if ((int) (EMACS_INT) client_data == i)
+	  if ((int) (UINT_PTR) client_data == i)
 	    {
 	      int j;
 	      struct input_event buf;
@@ -706,7 +706,7 @@ w32_menu_show (struct frame *f, int x, int y, int menuflags,
 	    wv->key = SSDATA (descrip);
 	  /* Use the contents index as call_data, since we are
              restricted to 16-bits.  */
-	  wv->call_data = !NILP (def) ? (void *) (EMACS_INT) i : 0;
+	  wv->call_data = !NILP (def) ? (void *) (UINT_PTR) i : 0;
 
 	  if (NILP (type))
 	    wv->button_type = BUTTON_TYPE_NONE;
@@ -1401,17 +1401,21 @@ add_menu_item (HMENU menu, widget_value *wv, HMENU item)
 	  info.cbSize = sizeof (info);
 	  info.fMask = MIIM_DATA;
 
-	  /* Set help string for menu item.  Leave it as a Lisp_Object
-	     until it is ready to be displayed, since GC can happen while
-	     menus are active.  */
+	  /* Set help string for menu item.  Leave it as a pointer to
+	     a Lisp_String until it is ready to be displayed, since GC
+	     can happen while menus are active.  */
 	  if (!NILP (wv->help))
 	    {
+	      /* We use XUNTAG below because in a 32-bit build
+		 --with-wide-int we cannot pass a Lisp_Object
+		 via a DWORD member of MENUITEMINFO.  */
 	      /* As of Jul-2012, w32api headers say that dwItemData
 		 has DWORD type, but that's a bug: it should actually
 		 be ULONG_PTR, which is correct for 32-bit and 64-bit
 		 Windows alike.  MSVC headers get it right; hopefully,
 		 MinGW headers will, too.  */
-	      info.dwItemData = (ULONG_PTR) XLI (wv->help);
+	      eassert (STRINGP (wv->help));
+	      info.dwItemData = (ULONG_PTR) XUNTAG (wv->help, Lisp_String);
 	    }
 	  if (wv->button_type == BUTTON_TYPE_RADIO)
 	    {
@@ -1487,7 +1491,10 @@ w32_menu_display_help (HWND owner, HMENU menu, UINT item, UINT flags)
 	  info.fMask = MIIM_DATA;
 	  get_menu_item_info (menu, item, FALSE, &info);
 
-	  help = info.dwItemData ? XIL (info.dwItemData) : Qnil;
+	  help =
+	    info.dwItemData
+	    ? make_lisp_ptr ((void *) info.dwItemData, Lisp_String)
+	    : Qnil;
 	}
 
       /* Store the help echo in the keyboard buffer as the X toolkit
diff --git a/src/w32proc.c b/src/w32proc.c
index 26cfa29..74731db 100644
--- a/src/w32proc.c
+++ b/src/w32proc.c
@@ -3077,13 +3077,18 @@ yield nil.  */)
   (Lisp_Object cp)
 {
   CHARSETINFO info;
+  DWORD dwcp;
 
   CHECK_NUMBER (cp);
 
   if (!IsValidCodePage (XINT (cp)))
     return Qnil;
 
-  if (TranslateCharsetInfo ((DWORD *) XINT (cp), &info, TCI_SRCCODEPAGE))
+  /* Going through a temporary DWORD variable avoids compiler warning
+     about cast to pointer from integer of different size, when
+     building --with-wide-int.  */
+  dwcp = XINT (cp);
+  if (TranslateCharsetInfo ((DWORD *) dwcp, &info, TCI_SRCCODEPAGE))
     return make_number (info.ciCharset);
 
   return Qnil;
@@ -3142,8 +3147,8 @@ If successful, the new layout id is returned, otherwise nil.  */)
   CHECK_NUMBER_CAR (layout);
   CHECK_NUMBER_CDR (layout);
 
- kl = (HKL) ((XINT (XCAR (layout)) & 0xffff)
-	     | (XINT (XCDR (layout)) << 16));
+  kl = (HKL) (UINT_PTR) ((XINT (XCAR (layout)) & 0xffff)
+			 | (XINT (XCDR (layout)) << 16));
 
   /* Synchronize layout with input thread.  */
   if (dwWindowsThreadId)
diff --git a/src/w32term.h b/src/w32term.h
index 042d7ab..c905ef1 100644
--- a/src/w32term.h
+++ b/src/w32term.h
@@ -493,8 +493,8 @@ struct scroll_bar {
   (XSETINT ((low),   ((DWORDLONG)(int64))        & 0xffffffff), \
    XSETINT ((high), ((DWORDLONG)(int64) >> 32) & 0xffffffff))
 #else  /* not _WIN64 */
-/* Building a 32-bit C integer from two 16-bit lisp integers.  */
-#define SCROLL_BAR_PACK(low, high) (XINT (high) << 16 | XINT (low))
+/* Building a 32-bit C unsigned integer from two 16-bit lisp integers.  */
+#define SCROLL_BAR_PACK(low, high) ((UINT_PTR)(XINT (high) << 16 | XINT (low)))
 
 /* Setting two lisp integers to the low and high words of a 32-bit C int.  */
 #define SCROLL_BAR_UNPACK(low, high, int32) \

commit 30c5f5cdef8db72c007efecfc8436479631b45d0
Author: Alan Mackenzie 
Date:   Tue Jan 13 15:39:36 2015 +0000

    Allow compilation during loading of Modes derived from a CC Mode mode.
    Fixes debbugs#19206.
    
    cc-bytecomp.el (cc-bytecomp-compiling-or-loading): new function which
    walks the stack to discover whether we're compiling or loading.
    (cc-bytecomp-is-compiling): Reformulate, and move towards beginning.
    (cc-bytecomp-is-loading): New defsubst.
    (cc-bytecomp-setup-environment, cc-bytecomp-restore-environment): Use
    the
    above defsubsts.
    (cc-require-when-compile, cc-bytecomp-defvar)
    (cc-bytecomp-defun): Simplify conditionals.
    
    cc-defs.el (cc-bytecomp-compiling-or-loading): "Borrow" this function
    from cc-bytecomp.el.
    (c-get-current-file): Reformulate using the above.
    (c-lang-defconst): Prevent duplicate entries of file names in a symbol's
    'source property.
    (c-lang-const): Use cc-bytecomp-is-compiling.
    
    cc-langs.el (c-make-init-lang-vars-fun): Use cc-bytecomp-is-compiling.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 532a10a..072af5b 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,29 @@
+2015-01-13  Alan Mackenzie  
+
+	Allow compilation during loading of Modes derived from a CC Mode mode.
+	Fixes debbugs#19206.
+
+	* progmodes/cc-bytecomp.el (cc-bytecomp-compiling-or-loading): new
+	function which walks the stack to discover whether we're compiling
+	or loading.
+	(cc-bytecomp-is-compiling): Reformulate, and move towards
+	beginning.
+	(cc-bytecomp-is-loading): New defsubst.
+	(cc-bytecomp-setup-environment, cc-bytecomp-restore-environment):
+	Use the above defsubsts.
+	(cc-require-when-compile, cc-bytecomp-defvar)
+	(cc-bytecomp-defun): Simplify conditionals.
+
+	* progmodes/cc-defs.el (cc-bytecomp-compiling-or-loading):
+	"Borrow" this function from cc-bytecomp.el.
+	(c-get-current-file): Reformulate using the above.
+	(c-lang-defconst): Prevent duplicate entries of file names in a
+	symbol's 'source property.
+	(c-lang-const): Use cc-bytecomp-is-compiling.
+
+	* progmodes/cc-langs.el (c-make-init-lang-vars-fun): Use
+	cc-bytecomp-is-compiling.
+
 2015-01-13  Stefan Monnier  
 
 	* emacs-lisp/eieio-core.el (eieio-defclass): Fix call to `defclass'
diff --git a/lisp/progmodes/cc-bytecomp.el b/lisp/progmodes/cc-bytecomp.el
index bf7803c..b63eeb4 100644
--- a/lisp/progmodes/cc-bytecomp.el
+++ b/lisp/progmodes/cc-bytecomp.el
@@ -89,13 +89,60 @@
   ;;`(message ,@args)
   )
 
+(defun cc-bytecomp-compiling-or-loading ()
+  ;; Determine whether byte-compilation or loading is currently active,
+  ;; returning 'compiling, 'loading or nil.
+  ;; If both are active, the "innermost" activity counts.  Note that
+  ;; compilation can trigger loading (various `require' type forms)
+  ;; and loading can trigger compilation (the package manager does
+  ;; this).  We walk the lisp stack if necessary.
+  (cond
+   ((and load-in-progress
+	 (boundp 'byte-compile-dest-file)
+	 (stringp byte-compile-dest-file))
+    (let ((n 0) elt)
+      (while (and
+	      (setq elt (backtrace-frame n))
+	      (not (and (car elt)
+			(memq (cadr elt)
+			      '(load require
+				byte-compile-file byte-recompile-directory
+				batch-byte-compile)))))
+	(setq n (1+ n)))
+      (cond
+       ((memq (cadr elt) '(load require))
+	'loading)
+       ((memq (cadr elt) '(byte-compile-file
+			   byte-recompile-directory
+			   batch-byte-compile))
+	'compiling)
+       (t				; Can't happen.
+	(message "cc-bytecomp-compiling-or-loading: System flags spuriously set")
+	nil))))
+   (load-in-progress
+    ;; Being loaded.
+    'loading)
+   ((and (boundp 'byte-compile-dest-file)
+	 (stringp byte-compile-dest-file))
+    ;; Being compiled.
+    'compiling)
+   (t
+    ;; Being evaluated interactively.
+    nil)))
+
+(defsubst cc-bytecomp-is-compiling ()
+  "Return non-nil if eval'ed during compilation."
+  (eq (cc-bytecomp-compiling-or-loading) 'compiling))
+
+(defsubst cc-bytecomp-is-loading ()
+  "Return non-nil if eval'ed during loading.
+Nil will be returned if we're in a compilation triggered by the loading."
+  (eq (cc-bytecomp-compiling-or-loading) 'loading))
+
 (defun cc-bytecomp-setup-environment ()
   ;; Eval'ed during compilation to setup variables, functions etc
   ;; declared with `cc-bytecomp-defvar' et al.
-  (if (not load-in-progress)
-      ;; Look at `load-in-progress' to tell whether we're called
-      ;; directly in the file being compiled or just from some file
-      ;; being loaded during compilation.
+  (if (not (cc-bytecomp-is-loading))
       (let (p)
 	(if cc-bytecomp-environment-set
 	    (error "Byte compilation environment already set - \
@@ -143,7 +190,7 @@ perhaps a `cc-bytecomp-restore-environment' is forgotten somewhere"))
 (defun cc-bytecomp-restore-environment ()
   ;; Eval'ed during compilation to restore variables, functions etc
   ;; declared with `cc-bytecomp-defvar' et al.
-  (if (not load-in-progress)
+  (if (not (cc-bytecomp-is-loading))
       (let (p)
 	(setq p cc-bytecomp-unbound-variables)
 	(while p
@@ -287,8 +334,7 @@ use within `eval-when-compile'."
   `(eval-when-compile
      (if (and (fboundp 'cc-bytecomp-is-compiling)
 	      (cc-bytecomp-is-compiling))
-	 (if (or (not load-in-progress)
-		 (not (featurep ,cc-part)))
+	 (if (not (featurep ,cc-part))
 	     (cc-bytecomp-load (symbol-name ,cc-part)))
        (require ,cc-part))))
 
@@ -301,12 +347,6 @@ afterwards.  Don't use within `eval-when-compile'."
      (require ,feature)
      (eval-when-compile (cc-bytecomp-setup-environment))))
 
-(defun cc-bytecomp-is-compiling ()
-  "Return non-nil if eval'ed during compilation.  Don't use outside
-`eval-when-compile'."
-  (and (boundp 'byte-compile-dest-file)
-       (stringp byte-compile-dest-file)))
-
 (defmacro cc-bytecomp-defvar (var)
   "Binds the symbol as a variable during compilation of the file,
 to silence the byte compiler.  Don't use within `eval-when-compile'."
@@ -320,8 +360,7 @@ to silence the byte compiler.  Don't use within `eval-when-compile'."
 	      "cc-bytecomp-defvar: Saving %s (as unbound)" ',var)
 	     (setq cc-bytecomp-unbound-variables
 		   (cons ',var cc-bytecomp-unbound-variables))))
-       (if (and (cc-bytecomp-is-compiling)
-		(not load-in-progress))
+       (if (cc-bytecomp-is-compiling)
 	   (progn
 	     (defvar ,var)
 	     (set ',var (intern (concat "cc-bytecomp-ignore-var:"
@@ -349,8 +388,7 @@ at compile time, e.g. for macros and inline functions."
 	     (setq cc-bytecomp-original-functions
 		   (cons (list ',fun nil 'unbound)
 			 cc-bytecomp-original-functions))))
-       (if (and (cc-bytecomp-is-compiling)
-		(not load-in-progress))
+       (if (cc-bytecomp-is-compiling)
 	   (progn
 	     (fset ',fun (intern (concat "cc-bytecomp-ignore-fun:"
 					 (symbol-name ',fun))))
diff --git a/lisp/progmodes/cc-defs.el b/lisp/progmodes/cc-defs.el
index 2ea566a..d0beab1 100644
--- a/lisp/progmodes/cc-defs.el
+++ b/lisp/progmodes/cc-defs.el
@@ -1983,19 +1983,22 @@ system."
 
 (defvar c-lang-const-expansion nil)
 
+;; Ugly hack to pull in the definition of `cc-bytecomp-compiling-or-loading`
+;; from cc-bytecomp to make it available at loadtime.  This is the same
+;; mechanism used in cc-mode.el for `c-populate-syntax-table'.
+(defalias 'cc-bytecomp-compiling-or-loading
+  (cc-eval-when-compile
+    (let ((f (symbol-function 'cc-bytecomp-compiling-or-loading)))
+      (if (byte-code-function-p f) f (byte-compile f)))))
+
 (defsubst c-get-current-file ()
   ;; Return the base name of the current file.
-  (let ((file (cond
-	       (load-in-progress
-		;; Being loaded.
-		load-file-name)
-	       ((and (boundp 'byte-compile-dest-file)
-		     (stringp byte-compile-dest-file))
-		;; Being compiled.
-		byte-compile-dest-file)
-	       (t
-		;; Being evaluated interactively.
-		(buffer-file-name)))))
+  (let* ((c-or-l (cc-bytecomp-compiling-or-loading))
+	 (file
+	  (cond
+	   ((eq c-or-l 'loading) load-file-name)
+	   ((eq c-or-l 'compiling) byte-compile-dest-file)
+	   ((null c-or-l) (buffer-file-name)))))
     (and file
 	 (file-name-sans-extension
 	  (file-name-nondirectory file)))))
@@ -2062,6 +2065,9 @@ constant.  A file is identified by its base name."
 	 ;; language constant source definitions.)
 	 (c-lang-const-expansion 'call)
 	 (c-langs-are-parametric t)
+	 (file (intern
+		(or (c-get-current-file)
+		    (error "`c-lang-defconst' can only be used in a file"))))
 	 bindings
 	 pre-files)
 
@@ -2121,9 +2127,14 @@ constant.  A file is identified by its base name."
     ;; definitions for this symbol, to make sure the order in the
     ;; `source' property is correct even when files are loaded out of
     ;; order.
-    (setq pre-files (nreverse
-		     ;; Reverse to get the right load order.
-		     (mapcar 'car (get sym 'source))))
+    (setq pre-files (mapcar 'car (get sym 'source)))
+    (if (memq file pre-files)
+	;; This can happen when the source file (e.g. cc-langs.el) is first
+	;; loaded as source, setting a 'source property entry, and then itself
+	;; being compiled.
+	(setq pre-files (cdr (memq file pre-files))))
+    ;; Reverse to get the right load order.
+    (setq pre-files (nreverse pre-files))
 
     `(eval-and-compile
        (c-define-lang-constant ',name ,bindings
@@ -2233,9 +2244,7 @@ quoted."
         (if (or (eq c-lang-const-expansion 'call)
                 (and (not c-lang-const-expansion)
                      (not mode))
-                load-in-progress
-                (not (boundp 'byte-compile-dest-file))
-                (not (stringp byte-compile-dest-file)))
+		(not (cc-bytecomp-is-compiling)))
             ;; Either a straight call is requested in the context, or
             ;; we're in an "uncontrolled" context and got no language,
             ;; or we're not being byte compiled so the compile time
diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el
index 17d717e..4d16a9b 100644
--- a/lisp/progmodes/cc-langs.el
+++ b/lisp/progmodes/cc-langs.el
@@ -3260,10 +3260,7 @@ function it returns is byte compiled with all the evaluated results
 from the language constants.  Use the `c-init-language-vars' macro to
 accomplish that conveniently."
 
-  (if (and (not load-in-progress)
-	   (boundp 'byte-compile-dest-file)
-	   (stringp byte-compile-dest-file))
-
+  (if (cc-bytecomp-is-compiling)
       ;; No need to byte compile this lambda since the byte compiler is
       ;; smart enough to detect the `funcall' construct in the
       ;; `c-init-language-vars' macro below and compile it all straight

commit c3024739131467b607fa745daf52ca25a3fd3c4d
Author: Stefan Monnier 
Date:   Tue Jan 13 10:17:44 2015 -0500

    Fixes: debbugs:19552
    
    * lisp/emacs-lisp/eieio-core.el (eieio-defclass): Fix call to `defclass'.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 504012e..532a10a 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-13  Stefan Monnier  
+
+	* emacs-lisp/eieio-core.el (eieio-defclass): Fix call to `defclass'
+	(bug#19552).
+
 2015-01-13  Dmitry Gutov  
 
 	* menu-bar.el (menu-bar-goto-menu): Before calling
diff --git a/lisp/emacs-lisp/eieio-core.el b/lisp/emacs-lisp/eieio-core.el
index dc2c873..0f2da63 100644
--- a/lisp/emacs-lisp/eieio-core.el
+++ b/lisp/emacs-lisp/eieio-core.el
@@ -1307,7 +1307,7 @@ method invocation orders of the involved classes."
 ;; To support .elc files compiled for older versions of EIEIO.
 
 (defun eieio-defclass (cname superclasses slots options)
-  (eval `(defclass ,cname ,superclasses ,slots ,options)))
+  (eval `(defclass ,cname ,superclasses ,slots ,@options)))
 
 
 (provide 'eieio-core)

commit 1e5902ac64456fe9a68e3c9f92604df6e3128c5d
Author: Michael Albinus 
Date:   Tue Jan 13 15:58:50 2015 +0100

    * filenotify.el (file-notify--descriptor): Do not cons for remote files.

diff --git a/lisp/filenotify.el b/lisp/filenotify.el
index 18d93d1..c94f631 100644
--- a/lisp/filenotify.el
+++ b/lisp/filenotify.el
@@ -96,7 +96,7 @@ This is available in case a file has been moved."
   "Return the descriptor to be used in `file-notify-*-watch'.
 For `gfilenotify' and `w32notify' it is the same descriptor as
 used in the low-level file notification package."
-  (if (eq file-notify--library 'inotify)
+  (if (and (natnump descriptor) (eq file-notify--library 'inotify))
       (cons descriptor file)
     descriptor))
 

commit b1ea16072864ed532377c6ea43198a8604890715
Author: Michael Albinus 
Date:   Tue Jan 13 11:26:39 2015 +0100

    Handle watching of several files in the same directory for inotify.
    
    Fixes: debbugs:18880
    
    * filenotify.el (file-notify-descriptors, file-notify-handle-event):
    Adapt docstring.
    (file-notify--descriptor): New defun.
    (file-notify-callback, file-notify-add-watch, file-notify-rm-watch):
    Adapt docstring.  Handle multiple values for
    `file-notify-descriptors' entries.
    
    * net/tramp.el (tramp-handle-file-notify-rm-watch): Do not check
    `file-notify-descriptors', the implementation has been changed.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index fb8dfba0..3ce3b20 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,15 @@
+2015-01-13  Michael Albinus  
+
+	* filenotify.el (file-notify-descriptors, file-notify-handle-event):
+	Adapt docstring.
+	(file-notify--descriptor): New defun.
+	(file-notify-callback, file-notify-add-watch, file-notify-rm-watch):
+	Adapt docstring.  Handle multiple values for
+	`file-notify-descriptors' entries.  (Bug#18880)
+
+	* net/tramp.el (tramp-handle-file-notify-rm-watch): Do not check
+	`file-notify-descriptors', the implementation has been changed.
+
 2015-01-13  Juri Linkov  
 
         * comint.el (comint-history-isearch-search)
diff --git a/lisp/filenotify.el b/lisp/filenotify.el
index 35181b6..18d93d1 100644
--- a/lisp/filenotify.el
+++ b/lisp/filenotify.el
@@ -41,13 +41,21 @@ could use another implementation.")
   "Hash table for registered file notification descriptors.
 A key in this hash table is the descriptor as returned from
 `gfilenotify', `inotify', `w32notify' or a file name handler.
-The value in the hash table is the cons cell (DIR FILE CALLBACK).")
+The value in the hash table is a list
+
+  \(DIR (FILE . CALLBACK) (FILE . CALLBACK) ...)
+
+Several values for a given DIR happen only for `inotify', when
+different files from the same directory are watched.")
 
 ;; This function is used by `gfilenotify', `inotify' and `w32notify' events.
 ;;;###autoload
 (defun file-notify-handle-event (event)
   "Handle file system monitoring event.
-If EVENT is a filewatch event, call its callback.
+If EVENT is a filewatch event, call its callback.  It has the format
+
+  \(file-notify (DESCRIPTOR ACTIONS FILE COOKIE) CALLBACK)
+
 Otherwise, signal a `file-notify-error'."
   (interactive "e")
   (if (and (eq (car event) 'file-notify)
@@ -81,12 +89,23 @@ This is available in case a file has been moved."
 This is available in case a file has been moved."
   (nth 3 event))
 
+;; `inotify' returns the same descriptor when the file (directory)
+;; uses the same inode.  We want to distinguish, and apply a virtual
+;; descriptor which make the difference.
+(defun file-notify--descriptor (descriptor file)
+  "Return the descriptor to be used in `file-notify-*-watch'.
+For `gfilenotify' and `w32notify' it is the same descriptor as
+used in the low-level file notification package."
+  (if (eq file-notify--library 'inotify)
+      (cons descriptor file)
+    descriptor))
+
 ;; The callback function used to map between specific flags of the
 ;; respective file notifications, and the ones we return.
 (defun file-notify-callback (event)
   "Handle an EVENT returned from file notification.
-EVENT is the same one as in `file-notify-handle-event' except the
-car of that event, which is the symbol `file-notify'."
+EVENT is the cdr of the event in `file-notify-handle-event'
+\(DESCRIPTOR ACTIONS FILE COOKIE)."
   (let* ((desc (car event))
 	 (registered (gethash desc file-notify-descriptors))
 	 (pending-event (assoc desc file-notify--pending-events))
@@ -97,99 +116,113 @@ car of that event, which is the symbol `file-notify'."
     ;; Make actions a list.
     (unless (consp actions) (setq actions (cons actions nil)))
 
-    ;; Check, that event is meant for us.
-    (unless (setq callback (nth 2 registered))
-      (setq actions nil))
-
-    ;; Loop over actions.  In fact, more than one action happens only
-    ;; for `inotify'.
-    (dolist (action actions)
-
-      ;; Send pending event, if it doesn't match.
-      (when (and pending-event
-		 ;; The cookie doesn't match.
-		 (not (eq (file-notify--event-cookie pending-event)
-			  (file-notify--event-cookie event)))
-		 (or
-		  ;; inotify.
-		  (and (eq (nth 1 pending-event) 'moved-from)
-		       (not (eq action 'moved-to)))
-		  ;; w32notify.
-		  (and (eq (nth 1 pending-event) 'renamed-from)
-		       (not (eq action 'renamed-to)))))
-	(funcall callback
-		 (list desc 'deleted
-		       (file-notify--event-file-name pending-event)))
-	(setq file-notify--pending-events
-	      (delete pending-event file-notify--pending-events)))
-
-      ;; Map action.  We ignore all events which cannot be mapped.
-      (setq action
-	    (cond
-	     ;; gfilenotify.
-	     ((memq action '(attribute-changed changed created deleted)) action)
-	     ((eq action 'moved)
-	      (setq file1 (file-notify--event-file1-name event))
-	      'renamed)
-
-	     ;; inotify.
-	     ((eq action 'attrib) 'attribute-changed)
-	     ((eq action 'create) 'created)
-	     ((eq action 'modify) 'changed)
-	     ((memq action '(delete 'delete-self move-self)) 'deleted)
-	     ;; Make the event pending.
-	     ((eq action 'moved-from)
-	      (add-to-list 'file-notify--pending-events
-			   (list desc action file
-				 (file-notify--event-cookie event)))
-	      nil)
-	     ;; Look for pending event.
-	     ((eq action 'moved-to)
-	      (if (null pending-event)
-		  'created
-		(setq file1 file
-		      file (file-notify--event-file-name pending-event)
-		      file-notify--pending-events
-		      (delete pending-event file-notify--pending-events))
-		'renamed))
-
-	     ;; w32notify.
-	     ((eq action 'added) 'created)
-	     ((eq action 'modified) 'changed)
-	     ((eq action 'removed) 'deleted)
-	     ;; Make the event pending.
-	     ((eq 'renamed-from action)
-	      (add-to-list 'file-notify--pending-events
-			   (list desc action file
-				 (file-notify--event-cookie event)))
-	      nil)
-	     ;; Look for pending event.
-	     ((eq 'renamed-to action)
-	      (if (null pending-event)
-		  'created
-		(setq file1 file
-		      file (file-notify--event-file-name pending-event)
-		      file-notify--pending-events
-		      (delete pending-event file-notify--pending-events))
-		'renamed))))
-
-      ;; Apply callback.
-      (when (and action
-		 (or
-		  ;; If there is no relative file name for that watch,
-		  ;; we watch the whole directory.
-		  (null (nth 1 registered))
-		  ;; File matches.
-		  (string-equal
-		   (nth 1 registered) (file-name-nondirectory file))
-		  ;; File1 matches.
-		  (and (stringp file1)
-		       (string-equal
-			(nth 1 registered) (file-name-nondirectory file1)))))
-	(if file1
-	    (funcall callback (list desc action file file1))
-	  (funcall callback (list desc action file)))))))
-
+    ;; Loop over registered entries.  In fact, more than one entry
+    ;; happens only for `inotify'.
+    (dolist (entry (cdr registered))
+
+      ;; Check, that event is meant for us.
+      (unless (setq callback (cdr entry))
+	(setq actions nil))
+
+      ;; Loop over actions.  In fact, more than one action happens only
+      ;; for `inotify'.
+      (dolist (action actions)
+
+	;; Send pending event, if it doesn't match.
+	(when (and pending-event
+		   ;; The cookie doesn't match.
+		   (not (eq (file-notify--event-cookie pending-event)
+			    (file-notify--event-cookie event)))
+		   (or
+		    ;; inotify.
+		    (and (eq (nth 1 pending-event) 'moved-from)
+			 (not (eq action 'moved-to)))
+		    ;; w32notify.
+		    (and (eq (nth 1 pending-event) 'renamed-from)
+			 (not (eq action 'renamed-to)))))
+	  (funcall callback
+		   (list desc 'deleted
+			 (file-notify--event-file-name pending-event)))
+	  (setq file-notify--pending-events
+		(delete pending-event file-notify--pending-events)))
+
+	;; Map action.  We ignore all events which cannot be mapped.
+	(setq action
+	      (cond
+	       ;; gfilenotify.
+	       ((memq action '(attribute-changed changed created deleted))
+		action)
+	       ((eq action 'moved)
+		(setq file1 (file-notify--event-file1-name event))
+		'renamed)
+
+	       ;; inotify.
+	       ((eq action 'attrib) 'attribute-changed)
+	       ((eq action 'create) 'created)
+	       ((eq action 'modify) 'changed)
+	       ((memq action '(delete 'delete-self move-self)) 'deleted)
+	       ;; Make the event pending.
+	       ((eq action 'moved-from)
+		(add-to-list 'file-notify--pending-events
+			     (list desc action file
+				   (file-notify--event-cookie event)))
+		nil)
+	       ;; Look for pending event.
+	       ((eq action 'moved-to)
+		(if (null pending-event)
+		    'created
+		  (setq file1 file
+			file (file-notify--event-file-name pending-event)
+			file-notify--pending-events
+			(delete pending-event file-notify--pending-events))
+		  'renamed))
+
+	       ;; w32notify.
+	       ((eq action 'added) 'created)
+	       ((eq action 'modified) 'changed)
+	       ((eq action 'removed) 'deleted)
+	       ;; Make the event pending.
+	       ((eq action 'renamed-from)
+		(add-to-list 'file-notify--pending-events
+			     (list desc action file
+				   (file-notify--event-cookie event)))
+		nil)
+	       ;; Look for pending event.
+	       ((eq action 'renamed-to)
+		(if (null pending-event)
+		    'created
+		  (setq file1 file
+			file (file-notify--event-file-name pending-event)
+			file-notify--pending-events
+			(delete pending-event file-notify--pending-events))
+		  'renamed))))
+
+	;; Apply callback.
+	(when (and action
+		   (or
+		    ;; If there is no relative file name for that watch,
+		    ;; we watch the whole directory.
+		    (null (nth 0 entry))
+		    ;; File matches.
+		    (string-equal
+		     (nth 0 entry) (file-name-nondirectory file))
+		    ;; File1 matches.
+		    (and (stringp file1)
+			 (string-equal
+			  (nth 0 entry) (file-name-nondirectory file1)))))
+	  (if file1
+	      (funcall
+	       callback
+	       `(,(file-notify--descriptor desc (nth 0 entry))
+		 ,action ,file ,file1))
+	    (funcall
+	     callback
+	     `(,(file-notify--descriptor desc (nth 0 entry))
+	       ,action ,file))))))))
+
+;; `gfilenotify' and `w32notify' return a unique descriptor for every
+;; `file-notify-add-watch', while `inotify' returns a unique
+;; descriptor per inode only.
 (defun file-notify-add-watch (file flags callback)
   "Add a watch for filesystem events pertaining to FILE.
 This arranges for filesystem events pertaining to FILE to be reported
@@ -206,7 +239,7 @@ include the following symbols:
   `attribute-change' -- watch for file attributes changes, like
                         permissions or modification time
 
-If FILE is a directory, 'change' watches for file creation or
+If FILE is a directory, `change' watches for file creation or
 deletion in that directory.  This does not work recursively.
 
 When any event happens, Emacs will call the CALLBACK function passing
@@ -240,82 +273,96 @@ FILE is the name of the file whose event is being reported."
 	       (if (file-directory-p file)
 		   file
 		 (file-name-directory file))))
-	desc func l-flags)
-
-    ;; Check, whether this has been registered already.
-;    (maphash
-;     (lambda (key value)
-;       (when (equal (cons file callback) value) (setq desc key)))
-;     file-notify-descriptors)
-
-    (unless desc
-      (if handler
-	  ;; A file name handler could exist even if there is no local
-	  ;; file notification support.
-	  (setq desc (funcall
-		      handler 'file-notify-add-watch dir flags callback))
-
-	;; Check, whether Emacs has been compiled with file
-	;; notification support.
-	(unless file-notify--library
-	  (signal 'file-notify-error
-		  '("No file notification package available")))
-
-	;; Determine low-level function to be called.
-	(setq func
-	      (cond
-	       ((eq file-notify--library 'gfilenotify) 'gfile-add-watch)
-	       ((eq file-notify--library 'inotify) 'inotify-add-watch)
-	       ((eq file-notify--library 'w32notify) 'w32notify-add-watch)))
-
-	;; Determine respective flags.
-	(if (eq file-notify--library 'gfilenotify)
-	    (setq l-flags '(watch-mounts send-moved))
-	  (when (memq 'change flags)
-	    (setq
-	     l-flags
-	     (cond
-	      ((eq file-notify--library 'inotify) '(create modify move delete))
-	      ((eq file-notify--library 'w32notify)
-	       '(file-name directory-name size last-write-time)))))
-	  (when (memq 'attribute-change flags)
-	    (add-to-list
-	     'l-flags
-	     (cond
-	      ((eq file-notify--library 'inotify) 'attrib)
-	      ((eq file-notify--library 'w32notify) 'attributes)))))
-
-	;; Call low-level function.
-	(setq desc (funcall func dir l-flags 'file-notify-callback))))
+	desc func l-flags registered)
+
+    (if handler
+	;; A file name handler could exist even if there is no local
+	;; file notification support.
+	(setq desc (funcall
+		    handler 'file-notify-add-watch dir flags callback))
+
+      ;; Check, whether Emacs has been compiled with file
+      ;; notification support.
+      (unless file-notify--library
+	(signal 'file-notify-error
+		'("No file notification package available")))
+
+      ;; Determine low-level function to be called.
+      (setq func
+	    (cond
+	     ((eq file-notify--library 'gfilenotify) 'gfile-add-watch)
+	     ((eq file-notify--library 'inotify) 'inotify-add-watch)
+	     ((eq file-notify--library 'w32notify) 'w32notify-add-watch)))
+
+      ;; Determine respective flags.
+      (if (eq file-notify--library 'gfilenotify)
+	  (setq l-flags '(watch-mounts send-moved))
+	(when (memq 'change flags)
+	  (setq
+	   l-flags
+	   (cond
+	    ((eq file-notify--library 'inotify) '(create modify move delete))
+	    ((eq file-notify--library 'w32notify)
+	     '(file-name directory-name size last-write-time)))))
+	(when (memq 'attribute-change flags)
+	  (add-to-list
+	   'l-flags
+	   (cond
+	    ((eq file-notify--library 'inotify) 'attrib)
+	    ((eq file-notify--library 'w32notify) 'attributes)))))
+
+      ;; Call low-level function.
+      (setq desc (funcall func dir l-flags 'file-notify-callback)))
+
+    ;; Modify `file-notify-descriptors'.
+    (setq registered (gethash desc file-notify-descriptors))
+    (puthash
+     desc
+     `(,dir
+       (,(unless (file-directory-p file) (file-name-nondirectory file))
+	. ,callback)
+       . ,(cdr registered))
+     file-notify-descriptors)
 
     ;; Return descriptor.
-    (puthash desc
-             (list (directory-file-name
-		    (if (file-directory-p dir) dir (file-name-directory dir)))
-                   (unless (file-directory-p file)
-		     (file-name-nondirectory file))
-		   callback)
-             file-notify-descriptors)
-    desc))
+    (file-notify--descriptor
+     desc (unless (file-directory-p file) (file-name-nondirectory file)))))
 
 (defun file-notify-rm-watch (descriptor)
   "Remove an existing watch specified by its DESCRIPTOR.
 DESCRIPTOR should be an object returned by `file-notify-add-watch'."
-  (let ((file (car (gethash descriptor file-notify-descriptors)))
-	handler)
-
-    (when (stringp file)
-      (setq handler (find-file-name-handler file 'file-notify-rm-watch))
-      (if handler
-	  (funcall handler 'file-notify-rm-watch descriptor)
-	(funcall
-	 (cond
-	  ((eq file-notify--library 'gfilenotify) 'gfile-rm-watch)
-	  ((eq file-notify--library 'inotify) 'inotify-rm-watch)
-	  ((eq file-notify--library 'w32notify) 'w32notify-rm-watch))
-	 descriptor)))
-
-    (remhash descriptor file-notify-descriptors)))
+  (let* ((desc (if (consp descriptor) (car descriptor) descriptor))
+	 (file (if (consp descriptor) (cdr descriptor)))
+	 (dir (car (gethash desc file-notify-descriptors)))
+	 handler registered)
+
+    (when (stringp dir)
+      (setq handler (find-file-name-handler dir 'file-notify-rm-watch))
+
+      ;; Modify `file-notify-descriptors'.
+      (if (not file)
+	  (remhash desc file-notify-descriptors)
+
+	(setq registered (gethash desc file-notify-descriptors))
+	(setcdr registered
+		(delete (assoc file (cdr registered)) (cdr registered)))
+	(if (null (cdr registered))
+	    (remhash desc file-notify-descriptors)
+	  (puthash desc registered file-notify-descriptors)))
+
+      ;; Call low-level function.
+      (when (null (cdr registered))
+	(if handler
+	    ;; A file name handler could exist even if there is no local
+	    ;; file notification support.
+	    (funcall handler 'file-notify-rm-watch desc)
+
+	  (funcall
+	   (cond
+	    ((eq file-notify--library 'gfilenotify) 'gfile-rm-watch)
+	    ((eq file-notify--library 'inotify) 'inotify-rm-watch)
+	    ((eq file-notify--library 'w32notify) 'w32notify-rm-watch))
+	   desc))))))
 
 ;; The end:
 (provide 'filenotify)
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index d23c750..3afb487 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -64,7 +64,6 @@
 (defvar bkup-backup-directory-info)
 (defvar directory-sep-char)
 (defvar eshell-path-env)
-(defvar file-notify-descriptors)
 (defvar ls-lisp-use-insert-directory-program)
 (defvar outline-regexp)
 
@@ -3415,7 +3414,7 @@ of."
 (defun tramp-handle-file-notify-rm-watch (proc)
   "Like `file-notify-rm-watch' for Tramp files."
   ;; The descriptor must be a process object.
-  (unless (and (processp proc) (gethash proc file-notify-descriptors))
+  (unless (processp proc)
     (tramp-error proc 'file-notify-error "Not a valid descriptor %S" proc))
   (tramp-message proc 6 "Kill %S" proc)
   (kill-process proc))

commit 0064e36f4fc76b0e8d2fc8d3e6f63da6e579a414
Author: Dmitry Antipov 
Date:   Tue Jan 13 13:08:32 2015 +0300

    Make Fnext_read_file_uses_dialog_p compatible with recent DEFUN change.
    
    * fileio.c (next_read_file_uses_dialog_p): New workaround ...
    (Fnext_read_file_uses_dialog_p): ... called from here to avoid
    ATTRIBUTE_CONST dependency from #ifdefs.  For details, see
    http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00289.html.

diff --git a/src/ChangeLog b/src/ChangeLog
index 00068d4..81d6772 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -32,6 +32,11 @@
 	(fast_string_match_internal): Add prototype.
 	* dired.c (file_name_completion): Use fast_string_match_internal.
 
+	* fileio.c (next_read_file_uses_dialog_p): New workaround ...
+	(Fnext_read_file_uses_dialog_p): ... called from here to avoid
+	ATTRIBUTE_CONST dependency from #ifdefs.  For details, see
+	http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00289.html.
+
 2015-01-12  Paul Eggert  
 
 	Port to 32-bit MingGW --with-wide-int
diff --git a/src/fileio.c b/src/fileio.c
index cd3c485..45a31c0 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -5733,25 +5733,35 @@ then any auto-save counts as "recent".  */)
      they're never autosaved.  */
   return (SAVE_MODIFF < BUF_AUTOSAVE_MODIFF (current_buffer) ? Qt : Qnil);
 }
-
-/* Reading and completing file names */
+
+/* We want Fnext_read_file_uses_dialog_p to have ATTRIBUTE_CONST
+   regardless of #ifdefs, so there is a trivial workaround.  See
+   http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00289.html.  */
+
+static bool
+next_read_file_uses_dialog_p (void)
+{
+#if defined (USE_MOTIF) || defined (HAVE_NTGUI) || defined (USE_GTK) \
+  || defined (HAVE_NS)
+  return ((NILP (last_nonmenu_event) || CONSP (last_nonmenu_event))
+	  && use_dialog_box
+	  && use_file_dialog
+	  && window_system_available (SELECTED_FRAME ()));
+#endif
+  return false;
+}
+
+/* Reading and completing file names.  */
 
 DEFUN ("next-read-file-uses-dialog-p", Fnext_read_file_uses_dialog_p,
        Snext_read_file_uses_dialog_p, 0, 0, 0,
        doc: /* Return t if a call to `read-file-name' will use a dialog.
 The return value is only relevant for a call to `read-file-name' that happens
-before any other event (mouse or keypress) is handled.  */)
+before any other event (mouse or keypress) is handled.  */
+       attributes: const)
   (void)
 {
-#if defined (USE_MOTIF) || defined (HAVE_NTGUI) || defined (USE_GTK) \
-  || defined (HAVE_NS)
-  if ((NILP (last_nonmenu_event) || CONSP (last_nonmenu_event))
-      && use_dialog_box
-      && use_file_dialog
-      && window_system_available (SELECTED_FRAME ()))
-    return Qt;
-#endif
-  return Qnil;
+  return next_read_file_uses_dialog_p () ? Qt : Qnil;
 }
 
 void

commit 67edddfce60169c0d0e2d6d3dce1408f04febbf1
Author: Juri Linkov 
Date:   Mon Dec 29 02:52:38 2014 +0200

    More fixes to support multi-line search in comint
    
    * lisp/comint.el (comint-history-isearch-message): Use field-beginning
    instead of comint-line-beginning-position - that's more fixes for
    http://lists.gnu.org/archive/html/emacs-devel/2014-12/msg00305.html
    (comint-history-isearch-message): Fix args of isearch-message-prefix.
    
    [backport from trunk]

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index ff384a4..fb8dfba0 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -6,6 +6,12 @@
 	(comint-send-input): Go to the end of the field instead of the end
 	of the line to accept whole multi-line input.
 	http://lists.gnu.org/archive/html/emacs-devel/2014-12/msg00305.html
+	(comint-history-isearch-message): Use field-beginning
+	instead of comint-line-beginning-position - that's more fixes for
+	http://lists.gnu.org/archive/html/emacs-devel/2014-12/msg00305.html
+	(comint-history-isearch-message): Fix args of isearch-message-prefix.
+
+	[Backport]
 
 2015-01-09  Eli Zaretskii  
 
diff --git a/lisp/comint.el b/lisp/comint.el
index cd6ecb4..f33034b 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -1532,14 +1532,20 @@ the function `isearch-message'."
     ;; the initial comint prompt.
     (if (overlayp comint-history-isearch-message-overlay)
 	(move-overlay comint-history-isearch-message-overlay
-		      (save-excursion (forward-line 0) (point))
-                      (comint-line-beginning-position))
+		      (save-excursion
+			(goto-char (field-beginning))
+			(forward-line 0)
+			(point))
+                      (field-beginning))
       (setq comint-history-isearch-message-overlay
-	    (make-overlay (save-excursion (forward-line 0) (point))
-                          (comint-line-beginning-position)))
+	    (make-overlay (save-excursion
+			    (goto-char (field-beginning))
+			    (forward-line 0)
+			    (point))
+                          (field-beginning)))
       (overlay-put comint-history-isearch-message-overlay 'evaporate t))
     (overlay-put comint-history-isearch-message-overlay
-		 'display (isearch-message-prefix c-q-hack ellipsis))
+		 'display (isearch-message-prefix ellipsis isearch-nonincremental))
     (if (and comint-input-ring-index (not ellipsis))
 	;; Display the current history index.
 	(message "History item: %d" (1+ comint-input-ring-index))

commit 18a89a069c3d66ddb96e512f254f67f69d51ae22
Author: Juri Linkov 
Date:   Sat Dec 6 01:55:20 2014 +0200

    Better support for multi-line shell input.
    
    * lisp/comint.el (comint-history-isearch-search)
    (comint-history-isearch-wrap): Use field-beginning instead of
    comint-line-beginning-position.
    (comint-send-input): Go to the end of the field instead of the end
    of the line to accept whole multi-line input.
    http://lists.gnu.org/archive/html/emacs-devel/2014-12/msg00305.html
    
    [backport from trunk]

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 8481dd1..ff384a4 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,12 @@
+2015-01-13  Juri Linkov  
+
+        * comint.el (comint-history-isearch-search)
+	(comint-history-isearch-wrap): Use field-beginning instead of
+	comint-line-beginning-position.
+	(comint-send-input): Go to the end of the field instead of the end
+	of the line to accept whole multi-line input.
+	http://lists.gnu.org/archive/html/emacs-devel/2014-12/msg00305.html
+
 2015-01-09  Eli Zaretskii  
 
 	* net/net-utils.el (net-utils-run-program, net-utils-run-simple):
diff --git a/lisp/comint.el b/lisp/comint.el
index 257cacb..cd6ecb4 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -1475,7 +1475,7 @@ Intended to be added to `isearch-mode-hook' in `comint-mode'."
       (or
        ;; 1. First try searching in the initial comint text
        (funcall search-fun string
-		(if isearch-forward bound (comint-line-beginning-position))
+		(if isearch-forward bound (field-beginning))
 		noerror)
        ;; 2. If the above search fails, start putting next/prev history
        ;; elements in the comint successively, and search the string
@@ -1491,7 +1491,7 @@ Intended to be added to `isearch-mode-hook' in `comint-mode'."
 			(when (null comint-input-ring-index)
 			  (error "End of history; no next item"))
 			(comint-next-input 1)
-			(goto-char (comint-line-beginning-position)))
+			(goto-char (field-beginning)))
 		       (t
 			;; Signal an error here explicitly, because
 			;; `comint-previous-input' doesn't signal an error.
@@ -1509,7 +1509,7 @@ Intended to be added to `isearch-mode-hook' in `comint-mode'."
 				      (unless isearch-forward
 					;; For backward search, don't search
 					;; in the comint prompt
-					(comint-line-beginning-position))
+					(field-beginning))
 				      noerror)))
 	       ;; Return point of the new search result
 	       (point))
@@ -1557,7 +1557,7 @@ or to the last history element for a backward search."
       (comint-goto-input (1- (ring-length comint-input-ring)))
     (comint-goto-input nil))
   (setq isearch-success t)
-  (goto-char (if isearch-forward (comint-line-beginning-position) (point-max))))
+  (goto-char (if isearch-forward (field-beginning) (point-max))))
 
 (defun comint-history-isearch-push-state ()
   "Save a function restoring the state of input history search.
@@ -1775,7 +1775,7 @@ Similarly for Soar, Scheme, etc."
       (widen)
       (let* ((pmark (process-mark proc))
              (intxt (if (>= (point) (marker-position pmark))
-                        (progn (if comint-eol-on-send (end-of-line))
+                        (progn (if comint-eol-on-send (goto-char (field-end)))
                                (buffer-substring pmark (point)))
                       (let ((copy (funcall comint-get-old-input)))
                         (goto-char pmark)

commit a1124bc117e41019de49c82d13d1a72a50df977d
Author: Joakim Verona 
Date:   Sun Jan 11 20:20:37 2015 +0100

    Update to new DEFSYM strategy
    
    Update to new DEFSYM strategy which was slightly tricky.

diff --git a/src/keyboard.c b/src/keyboard.c
index 86c840d..6afbd5d 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -11102,8 +11102,7 @@ syms_of_keyboard (void)
 #endif
 
 #ifdef HAVE_XWIDGETS
-  Qxwidget_event = intern ("xwidget-event");
-  staticpro (&Qxwidget_event);
+  DEFSYM (Qxwidget_event,"xwidget-event");
 #endif /* HAVE_XWIDGETS */
 #ifdef USE_FILE_NOTIFY
   DEFSYM (Qfile_notify, "file-notify");
diff --git a/src/print.c b/src/print.c
index 963979e..688327d 100644
--- a/src/print.c
+++ b/src/print.c
@@ -40,13 +40,6 @@ along with GNU Emacs.  If not, see .  */
 #ifdef HAVE_XWIDGETS
 #include "xwidget.h"
 #endif
-Lisp_Object Qstandard_output;
-
-static Lisp_Object Qtemp_buffer_setup_hook;
-
-/* These are used to print like we read.  */
-
-static Lisp_Object Qfloat_output_format;
 
 #include 
 #include 
diff --git a/src/xwidget.c b/src/xwidget.c
index fc4ec80..00913ca 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -113,23 +113,6 @@ allocate_xwidget_view (void)
 #define XSETXWIDGET(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_XWIDGET))
 #define XSETXWIDGET_VIEW(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_XWIDGET_VIEW))
 
-Lisp_Object Qxwidget;
-Lisp_Object QCxwidget;
-Lisp_Object QCtitle;
-Lisp_Object Qxwidget_set_keyboard_grab;
-Lisp_Object Qxwidget_embed_steal_window;
-Lisp_Object Qxwidget_info;
-Lisp_Object Qxwidget_resize;
-Lisp_Object Qxwidget_send_keyboard_event;
-Lisp_Object QCxwgir_class;
-Lisp_Object Qbutton, Qtoggle, Qslider, Qsocket, Qsocket_osr, Qcairo, Qxwgir,
-  Qwebkit_osr, QCplist;
-Lisp_Object Qxwidgetp, Qxwidget_view_p;
-
-
-extern Lisp_Object  QCtype;
-extern Lisp_Object QCwidth, QCheight;
-
 struct xwidget_view* xwidget_view_lookup(struct xwidget* xw,     struct window *w);
 Lisp_Object xwidget_spec_value ( Lisp_Object spec, Lisp_Object  key,  int *found);
 gboolean offscreen_damage_event (GtkWidget *widget, GdkEvent *event, gpointer data);
@@ -1564,12 +1547,12 @@ syms_of_xwidget (void)
   defsubr (&Sset_xwidget_query_on_exit_flag);
   defsubr (&Sset_frame_visible);
 
-#ifdef HAVE_WEBKIT_OSR
+  #ifdef HAVE_WEBKIT_OSR
   defsubr (&Sxwidget_webkit_goto_uri);
   defsubr (&Sxwidget_webkit_execute_script);
   defsubr (&Sxwidget_webkit_get_title);
-  DEFSYM (Qwebkit_osr ,"webkit-osr");
-#endif
+  DEFSYM (Qwebkit_osr, "webkit-osr");
+  #endif
 
   defsubr (&Sxwgir_xwidget_call_method  );
   defsubr (&Sxwgir_require_namespace);
diff --git a/src/xwidget.h b/src/xwidget.h
index 6f3f4bb..0db7653 100644
--- a/src/xwidget.h
+++ b/src/xwidget.h
@@ -4,7 +4,7 @@
 void x_draw_xwidget_glyph_string (struct glyph_string *s);
 void syms_of_xwidget ();
 
-extern Lisp_Object Qxwidget;
+//extern Lisp_Object Qxwidget;
 
 
 int valid_xwidget_spec_p (Lisp_Object object) ;

commit cc7cb20d6abc0f862e5513b24831bba0eaecaa5f
Merge: d972b50 9a57bda
Author: Joakim Verona 
Date:   Sun Jan 11 18:40:21 2015 +0100

    merge master, fix conflicts

commit b544ab561fcb575790c963a2eda51524fa366409
Author: Eli Zaretskii 
Date:   Sat Jan 10 15:03:51 2015 +0200

    Fix return value of vertical-motion at ZV  (Bug#19553)
    
     src/indent.c (Fvertical_motion): Return zero if we started from ZV
     and there's an overlay after-string there.

diff --git a/src/ChangeLog b/src/ChangeLog
index 49152c8..6296302 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-10  Eli Zaretskii  
+
+	* indent.c (Fvertical_motion): Return zero if we started from ZV
+	and there's an overlay after-string there.  (Bug#19553)
+
 2015-01-09  Eli Zaretskii  
 
 	* emacs.c (usage_message): Fix the description of the -nl switch.
diff --git a/src/indent.c b/src/indent.c
index 8b6ecd1..cadafcf 100644
--- a/src/indent.c
+++ b/src/indent.c
@@ -2137,10 +2137,15 @@ whether or not it is currently displayed in some window.  */)
 	      if (nlines > 1)
 		move_it_by_lines (&it, min (PTRDIFF_MAX, nlines - 1));
 	    }
-	  else
+	  else	/* it_start = ZV */
 	    {
 	      it.vpos = 0;
 	      move_it_by_lines (&it, min (PTRDIFF_MAX, nlines));
+	      /* We could have some display or overlay string at ZV,
+		 in which case it.vpos will be nonzero now, while
+		 actually we didn't move vertically at all.  */
+	      if (IT_CHARPOS (it) == CHARPOS (pt) && CHARPOS (pt) == it_start)
+		it.vpos = 0;
 	    }
 	}
 

commit 1f179ea1bac65d911c616dafbf7147f0dbb39afd
Author: Eli Zaretskii 
Date:   Fri Jan 9 11:50:21 2015 +0200

    Fix encoding of I/O in net-utils.el for MS-Windows.  (Bug#19458)
    
     lisp/net/net-utils.el (net-utils-run-program, net-utils-run-simple):
     On MS-Windows, bind coding-system-for-read to the console output
     codepage.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 2a6c960..8481dd1 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,9 @@
+2015-01-09  Eli Zaretskii  
+
+	* net/net-utils.el (net-utils-run-program, net-utils-run-simple):
+	On MS-Windows, bind coding-system-for-read to the console output
+	codepage.  (Bug#19458)
+
 2015-01-08  Eli Zaretskii  
 
 	* simple.el (line-move-visual): When converting X pixel coordinate
diff --git a/lisp/net/net-utils.el b/lisp/net/net-utils.el
index 28aa431..ebcbc71 100644
--- a/lisp/net/net-utils.el
+++ b/lisp/net/net-utils.el
@@ -328,7 +328,15 @@ This variable is only used if the variable
 
 (defun net-utils-run-program (name header program args)
   "Run a network information program."
-  (let ((buf (get-buffer-create (concat "*" name "*"))))
+  (let ((buf (get-buffer-create (concat "*" name "*")))
+	(coding-system-for-read
+	 ;; MS-Windows versions of network utilities output text
+	 ;; encoded in the console (a.k.a. "OEM") codepage, which is
+	 ;; different from the default system (a.k.a. "ANSI")
+	 ;; codepage.
+	 (if (eq system-type 'windows-nt)
+	     (intern (format "cp%d" (w32-get-console-output-codepage)))
+	   coding-system-for-read)))
     (set-buffer buf)
     (erase-buffer)
     (insert header "\n")
@@ -352,7 +360,15 @@ This variable is only used if the variable
       (when proc
         (set-process-filter proc nil)
         (delete-process proc)))
-    (let ((inhibit-read-only t))
+    (let ((inhibit-read-only t)
+	(coding-system-for-read
+	 ;; MS-Windows versions of network utilities output text
+	 ;; encoded in the console (a.k.a. "OEM") codepage, which is
+	 ;; different from the default system (a.k.a. "ANSI")
+	 ;; codepage.
+	 (if (eq system-type 'windows-nt)
+	     (intern (format "cp%d" (w32-get-console-output-codepage)))
+	   coding-system-for-read)))
       (erase-buffer))
     (net-utils-mode)
     (setq-local net-utils--revert-cmd

commit 70f298f88e84a5bfce26e3ff758157057a7948f3
Author: Eli Zaretskii 
Date:   Fri Jan 9 11:13:33 2015 +0200

    Fix the description of -nl in --help text.  (Bug#19542)
    
     src/emacs.c (usage_message): Fix the description of the -nl switch.

diff --git a/src/ChangeLog b/src/ChangeLog
index 25f3264..49152c8 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-09  Eli Zaretskii  
+
+	* emacs.c (usage_message): Fix the description of the -nl switch.
+	(Bug#19542)
+
 2015-01-08  Eli Zaretskii  
 
 	* dispnew.c (buffer_posn_from_coords): Fix the value of the column
diff --git a/src/emacs.c b/src/emacs.c
index d89a681..0b7adbd 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -233,7 +233,7 @@ Initialization options:\n\
     "\
 --no-desktop                do not load a saved desktop\n\
 --no-init-file, -q          load neither ~/.emacs nor default.el\n\
---no-shared-memory, -nl     do not use shared memory\n\
+--no-loadup, -nl            do not load loadup.el into bare Emacs\n\
 --no-site-file              do not load site-start.el\n\
 --no-site-lisp, -nsl        do not add site-lisp directories to load-path\n\
 --no-splash                 do not display a splash screen on startup\n\

commit 7c0bfa1d0803d824e3adaf9c6431997580771ef6
Author: Eli Zaretskii 
Date:   Thu Jan 8 16:04:46 2015 +0200

    Fix line-move-visual's following of column in R2L lines (backport from trunk).
    
     src/simple.el (line-move-visual): When converting X pixel coordinate
     to temporary-goal-column, adjust the value for right-to-left
     screen lines.  This fixes vertical-motion, next/prev-line, etc.
    
     src/dispnew.c (buffer_posn_from_coords): Fix the value of the column
     returned for right-to-left screen lines.  (Before the change on
     2014-12-30, the incorrectly-computed X pixel coordinate concealed
     this bug.)
    
    (cherry picked from commit 5fbd17e369ca30a47ab8a2eda0b2f2ea9b690bb4)
    
    Conflicts:
    	lisp/simple.el

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 73aa3e0..2a6c960 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,9 @@
+2015-01-08  Eli Zaretskii  
+
+	* simple.el (line-move-visual): When converting X pixel coordinate
+	to temporary-goal-column, adjust the value for right-to-left
+	screen lines.  This fixes vertical-motion, next/prev-line, etc.
+
 2015-01-06  Glenn Morris  
 
 	* progmodes/sh-script.el (sh-mode): Doc fix.
diff --git a/lisp/simple.el b/lisp/simple.el
index 0a1b633..497e4a16 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -5254,15 +5254,24 @@ If NOERROR, don't signal an error if we can't move that many lines."
 		(>  (cdr temporary-goal-column) 0))
 	    (setq target-hscroll (cdr temporary-goal-column)))
       ;; Otherwise, we should reset `temporary-goal-column'.
-      (let ((posn (posn-at-point)))
+      (let ((posn (posn-at-point))
+	    x-pos)
 	(cond
 	 ;; Handle the `overflow-newline-into-fringe' case:
 	 ((eq (nth 1 posn) 'right-fringe)
 	  (setq temporary-goal-column (cons (- (window-width) 1) hscroll)))
 	 ((car (posn-x-y posn))
+	  (setq x-pos (car (posn-x-y posn)))
+	  ;; In R2L lines, the X pixel coordinate is measured from the
+	  ;; left edge of the window, but columns are still counted
+	  ;; from the logical-order beginning of the line, i.e. from
+	  ;; the right edge in this case.  We need to adjust for that.
+	  (if (eq (current-bidi-paragraph-direction) 'right-to-left)
+	      (setq x-pos (- (window-body-width nil t) 1 x-pos)))
 	  (setq temporary-goal-column
-		(cons (/ (float (car (posn-x-y posn)))
-			 (frame-char-width)) hscroll))))))
+		(cons (/ (float x-pos)
+			 (frame-char-width))
+                      hscroll))))))
     (if target-hscroll
 	(set-window-hscroll (selected-window) target-hscroll))
     ;; vertical-motion can move more than it was asked to if it moves
diff --git a/src/ChangeLog b/src/ChangeLog
index acd7e72..25f3264 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,10 @@
+2015-01-08  Eli Zaretskii  
+
+	* dispnew.c (buffer_posn_from_coords): Fix the value of the column
+	returned for right-to-left screen lines.  (Before the change on
+	2014-12-30, the incorrectly-computed X pixel coordinate concealed
+	this bug.)
+
 2015-01-05  Eli Zaretskii  
 
 	* xdisp.c (move_it_to, try_cursor_movement): Don't use the window
diff --git a/src/dispnew.c b/src/dispnew.c
index 205c28f..f73ea58 100644
--- a/src/dispnew.c
+++ b/src/dispnew.c
@@ -5153,7 +5153,7 @@ buffer_posn_from_coords (struct window *w, int *x, int *y, struct display_pos *p
 
   Fset_buffer (old_current_buffer);
 
-  *dx = x0 + it.first_visible_x - it.current_x;
+  *dx = to_x - it.current_x;
   *dy = *y - it.current_y;
 
   string = w->contents;
@@ -5228,9 +5228,9 @@ buffer_posn_from_coords (struct window *w, int *x, int *y, struct display_pos *p
     }
 
   /* Add extra (default width) columns if clicked after EOL. */
-  x1 = max (0, it.current_x + it.pixel_width - it.first_visible_x);
-  if (x0 > x1)
-    it.hpos += (x0 - x1) / WINDOW_FRAME_COLUMN_WIDTH (w);
+  x1 = max (0, it.current_x + it.pixel_width);
+  if (to_x > x1)
+    it.hpos += (to_x - x1) / WINDOW_FRAME_COLUMN_WIDTH (w);
 
   *x = it.hpos;
   *y = it.vpos;

commit d972b504f30ff4300ba368940751e8736dddf0b4
Author: jave 
Date:   Wed Jan 7 16:58:25 2015 +0100

    Removed unused xwidgt pointer
    
    Suggested by Eli Zaretski

diff --git a/src/dispextern.h b/src/dispextern.h
index 622ab92..10c84da 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -2403,7 +2403,6 @@ struct it
       /* method == GET_FROM_XWIDGET */
       struct {
 	Lisp_Object object;
-        struct xwidget* xwidget;
       } xwidget;
 #endif
     } u;

commit 66ae0ec9dd9f47117bc9c74b8458a11e465674d8
Author: jave 
Date:   Wed Jan 7 16:12:04 2015 +0100

    Added two CHECK_STRING of arguments
    
    Suggested by Eli Zaretski

diff --git a/src/xwidget.c b/src/xwidget.c
index 94b5c8a..fc4ec80 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -1129,6 +1129,7 @@ DEFUN ("xwidget-webkit-goto-uri", Fxwidget_webkit_goto_uri,  Sxwidget_webkit_got
   (Lisp_Object xwidget, Lisp_Object uri)
 {
   WEBKIT_FN_INIT();
+  CHECK_STRING(uri);
   webkit_web_view_load_uri ( WEBKIT_WEB_VIEW(xw->widget_osr), SDATA(uri));
   return Qnil;
 }
@@ -1140,6 +1141,7 @@ DEFUN ("xwidget-webkit-execute-script", Fxwidget_webkit_execute_script,  Sxwidge
   (Lisp_Object xwidget, Lisp_Object script)
 {
   WEBKIT_FN_INIT();
+  CHECK_STRING(script);
   webkit_web_view_execute_script( WEBKIT_WEB_VIEW(xw->widget_osr), SDATA(script));
   return Qnil;
 }

commit 2a57b7e5b42175031efb8b4348638a05cb1c52a2
Author: Glenn Morris 
Date:   Tue Jan 6 13:52:15 2015 -0500

    Fixes: debbugs:18756
    
    sh-basic-indent-line fix
    
    * lisp/progmodes/sh-script.el (sh-mode): Doc fix.
    (sh-basic-indent-line): Handle electric newline.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index baabc9e..73aa3e0 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,19 +1,21 @@
+2015-01-06  Glenn Morris  
+
+	* progmodes/sh-script.el (sh-mode): Doc fix.
+	(sh-basic-indent-line): Handle electric newline.  (Bug#18756)
+
 2014-12-14  Steve Purcell    (tiny change)
 
 	* emacs-lisp/package.el (package-menu-mode): Use an extra column
-	for the "Version" column, to accomodate date-and-time-based
-	versions.
+	for the "Version" column, to accomodate date-and-time-based versions.
 
 2015-01-04  Paul Eggert  
 
-	Fix dired quoting bug with "Hit`N`Hide"
-	Fixes Bug#19498.
+	Fix dired quoting bug with "Hit`N`Hide".  Fixes Bug#19498.
 	* files.el (shell-quote-wildcard-pattern): Also quote "`".
 
 2015-01-04  Dmitry Gutov  
 
 	Unbreak `mouse-action' property in text buttons.
-
 	* button.el (push-button): Fix regression from 2012-12-06.
 
 2015-01-01  Eli Zaretskii  
diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el
index d79b387..4700324 100644
--- a/lisp/progmodes/sh-script.el
+++ b/lisp/progmodes/sh-script.el
@@ -1,7 +1,6 @@
 ;;; sh-script.el --- shell-script editing commands for Emacs  -*- lexical-binding:t -*-
 
-;; Copyright (C) 1993-1997, 1999, 2001-2015 Free Software Foundation,
-;; Inc.
+;; Copyright (C) 1993-1997, 1999, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Daniel Pfeiffer 
 ;; Version: 2.0f
@@ -1575,7 +1574,6 @@ buffer indents as it currently is indented.
 
 
 \\[backward-delete-char-untabify]	 Delete backward one position, even if it was a tab.
-\\[newline-and-indent]	 Delete unquoted space and indent new line same as this one.
 \\[sh-end-of-command]	 Go to end of successive commands.
 \\[sh-beginning-of-command]	 Go to beginning of successive commands.
 \\[sh-set-shell]	 Set this buffer's shell, and maybe its magic number.
@@ -2477,7 +2475,8 @@ Lines containing only comments are considered empty."
 		    (current-column)))
 	current)
     (save-excursion
-      (indent-to (if (eq this-command 'newline-and-indent)
+      (indent-to (if (or (eq this-command 'newline-and-indent)
+                         (and electric-indent-mode (eq this-command 'newline)))
 		     previous
 		   (if (< (current-column)
 			  (setq current (progn (back-to-indentation)

commit 4e86e0295188cf0b5523c2bce0ac0d7ef3366f62
Author: Steve Purcell 
Date:   Sun Dec 14 15:56:22 2014 +0200

    Backport: Add an extra column for Version in list-packages table
    
    * emacs-lisp/package.el (package-menu-mode): Use an extra column for
    the "Version" column, to accomodate date-and-time-based versions.
    
    (cherry picked from commit eaf25ad549dc5a9b26089f588e0a80268708a3d1)

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 7c6485c..baabc9e 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,9 @@
+2014-12-14  Steve Purcell    (tiny change)
+
+	* emacs-lisp/package.el (package-menu-mode): Use an extra column
+	for the "Version" column, to accomodate date-and-time-based
+	versions.
+
 2015-01-04  Paul Eggert  
 
 	Fix dired quoting bug with "Hit`N`Hide"
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index 1280018..5203e74 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -1650,7 +1650,7 @@ Letters do not insert themselves; instead, they are commands.
 \\{package-menu-mode-map}"
   (setq tabulated-list-format
         `[("Package" 18 package-menu--name-predicate)
-          ("Version" 12 nil)
+          ("Version" 13 nil)
           ("Status"  10 package-menu--status-predicate)
           ,@(if (cdr package-archives)
                 '(("Archive" 10 package-menu--archive-predicate)))

commit d279e6680842b872ae3aab1fb429b1879db50f7f
Author: Eli Zaretskii 
Date:   Mon Jan 5 17:42:55 2015 +0200

    Fix assertion violations in try_window_id (Bug#19511)
    
     src/xdisp.c (move_it_to, try_cursor_movement): Don't use the window
     end information if the window_end_valid flag is unset.
     (try_window_id): If the call to display_line invalidated the
     window end information, give up the try_window_id optimization.

diff --git a/src/ChangeLog b/src/ChangeLog
index d9dd53b..acd7e72 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,11 @@
+2015-01-05  Eli Zaretskii  
+
+	* xdisp.c (move_it_to, try_cursor_movement): Don't use the window
+	end information if the window_end_valid flag is unset.
+	(try_window_id): If the call to display_line invalidated the
+	window end information, give up the try_window_id optimization.
+	(Bug#19511)
+
 2015-01-04  Eli Zaretskii  
 
 	* w32fns.c (Fx_server_version, Fx_server_vendor): Doc fix.
diff --git a/src/xdisp.c b/src/xdisp.c
index ebab839..a1cc286 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -9379,6 +9379,7 @@ move_it_to (struct it *it, ptrdiff_t to_charpos, int to_x, int to_y, int to_vpos
       && it->current_x == it->last_visible_x - 1
       && it->c != '\n'
       && it->c != '\t'
+      && it->w->window_end_valid
       && it->vpos < it->w->window_end_vpos)
     {
       it->continuation_lines_width += it->current_x;
@@ -15521,7 +15522,8 @@ try_cursor_movement (Lisp_Object window, struct text_pos startp, int *scroll_ste
   /* Likewise there was a check whether window_end_vpos is nil or larger
      than the window.  Now window_end_vpos is int and so never nil, but
      let's leave eassert to check whether it fits in the window.  */
-  eassert (w->window_end_vpos < w->current_matrix->nrows);
+  eassert (!w->window_end_valid
+	   || w->window_end_vpos < w->current_matrix->nrows);
 
   /* Handle case where text has not changed, only point, and it has
      not moved off the frame.  */
@@ -18185,6 +18187,21 @@ try_window_id (struct window *w)
   if (f->fonts_changed)
     return -1;
 
+  /* The redisplay iterations in display_line above could have
+     triggered font-lock, which could have done something that
+     invalidates IT->w window's end-point information, on which we
+     rely below.  E.g., one package, which will remain unnamed, used
+     to install a font-lock-fontify-region-function that called
+     bury-buffer, whose side effect is to switch the buffer displayed
+     by IT->w, and that predictably resets IT->w's window_end_valid
+     flag, which we already tested at the entry to this function.
+     Amply punish such packages/modes by giving up on this
+     optimization in those cases.  */
+  if (!w->window_end_valid)
+    {
+      clear_glyph_matrix (w->desired_matrix);
+      return -1;
+    }
 
   /* Compute differences in buffer positions, y-positions etc.  for
      lines reused at the bottom of the window.  Compute what we can

commit 5a0d5b71d55c73573c331e1e1a1dde9f206966e1
Merge: 9681f30 c477f20
Author: jave 
Date:   Mon Jan 5 14:12:26 2015 +0100

    Merge branch 'master' into xwidget

commit 031eadcbeda4f5ec632db810207a7faf7e50e5d9
Author: Paul Eggert 
Date:   Sun Jan 4 13:45:07 2015 -0800

    Fix dired quoting bug with "Hit`N`Hide"
    
    Fixes Bug#19498.
    * files.el (shell-quote-wildcard-pattern): Also quote "`".

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index ddc0c9e..7c6485c 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,9 @@
+2015-01-04  Paul Eggert  
+
+	Fix dired quoting bug with "Hit`N`Hide"
+	Fixes Bug#19498.
+	* files.el (shell-quote-wildcard-pattern): Also quote "`".
+
 2015-01-04  Dmitry Gutov  
 
 	Unbreak `mouse-action' property in text buttons.
diff --git a/lisp/files.el b/lisp/files.el
index 568242a..0889244 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -6051,7 +6051,7 @@ and `list-directory-verbose-switches'."
 
 PATTERN is assumed to represent a file-name wildcard suitable for the
 underlying filesystem.  For Unix and GNU/Linux, each character from the
-set [ \\t\\n;<>&|()'\"#$] is quoted with a backslash; for DOS/Windows, all
+set [ \\t\\n;<>&|()`'\"#$] is quoted with a backslash; for DOS/Windows, all
 the parts of the pattern which don't include wildcard characters are
 quoted with double quotes.
 
@@ -6065,12 +6065,12 @@ need to be passed verbatim to shell commands."
       ;; argument has quotes, we can safely assume it is already
       ;; quoted by the caller.
       (if (or (string-match "[\"]" pattern)
-	      ;; We quote [&()#$'] in case their shell is a port of a
+	      ;; We quote [&()#$`'] in case their shell is a port of a
 	      ;; Unixy shell.  We quote [,=+] because stock DOS and
 	      ;; Windows shells require that in some cases, such as
 	      ;; passing arguments to batch files that use positional
 	      ;; arguments like %1.
-	      (not (string-match "[ \t;&()#$',=+]" pattern)))
+	      (not (string-match "[ \t;&()#$`',=+]" pattern)))
 	  pattern
 	(let ((result "\"")
 	      (beg 0)
@@ -6085,7 +6085,7 @@ need to be passed verbatim to shell commands."
 	  (concat result (substring pattern beg) "\""))))
      (t
       (let ((beg 0))
-	(while (string-match "[ \t\n;<>&|()'\"#$]" pattern beg)
+	(while (string-match "[ \t\n;<>&|()`'\"#$]" pattern beg)
 	  (setq pattern
 		(concat (substring pattern 0 (match-beginning 0))
 			"\\"

commit 5981b4b1c08d308563ecfd4e3ee9f133d47af3b2
Author: Eli Zaretskii 
Date:   Sun Jan 4 20:30:16 2015 +0200

    More doc fixes for bug#19502 -- make documentation less X-specific.
    
     doc/lispref/frames.texi (Display Feature Testing): Make the description of
     x-server-version and x-server-vendor less X-specific.
    
     Make doc strings on X and w32 identical.
     src/w32fns.c (Fx_server_version, Fx_server_vendor): Doc fix.
     src/xfns.c (Fx_server_version, Fx_server_vendor): Doc fix.

diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog
index c4b80a0..c898af5 100644
--- a/doc/lispref/ChangeLog
+++ b/doc/lispref/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-04  Eli Zaretskii  
+
+	* frames.texi (Display Feature Testing): Make the description of
+	x-server-version and x-server-vendor less X-specific.  (Bug#19502)
+
 2014-12-24  Glenn Morris  
 
 	* control.texi (Pattern matching case statement):
diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi
index 2d59227..3c27ab1 100644
--- a/doc/lispref/frames.texi
+++ b/doc/lispref/frames.texi
@@ -2645,20 +2645,26 @@ colors).
 This function returns the number of color cells the screen supports.
 @end defun
 
-  These functions obtain additional information specifically
-about X displays.
+  These functions obtain additional information about the window
+system in use where Emacs shows the specified @var{display}.  (Their
+names begin with @code{x-} for historical reasons.)
 
 @defun x-server-version &optional display
-This function returns the list of version numbers of the X server
-running the display.  The value is a list of three integers: the major
-and minor version numbers of the X protocol, and the
-distributor-specific release number of the X server software itself.
+This function returns the list of version numbers of the GUI window
+system running on @var{display}, such as the X server on GNU and Unix
+systems.  The value is a list of three integers: the major and minor
+version numbers of the protocol, and the distributor-specific release
+number of the window system software itself.  On GNU and Unix systems,
+these are normally the version of the X protocol and the
+distributor-specific release number of the X server software.  On
+MS-Windows, this is the version of the Windows OS.
 @end defun
 
 @defun x-server-vendor &optional display
-This function returns the ``vendor'' that provided the X server
-software (as a string).  Really this means whoever distributes the X
-server.
+This function returns the ``vendor'' that provided the window system
+software (as a string).  On GNU and Unix systems this really means
+whoever distributes the X server.  On MS-Windows this is the vendor ID
+string of the Windows OS (Microsoft).
 
 When the developers of X labeled software distributors as
 ``vendors'', they showed their false assumption that no system could
diff --git a/src/ChangeLog b/src/ChangeLog
index 39acf77..d9dd53b 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,9 @@
 2015-01-04  Eli Zaretskii  
 
+	* w32fns.c (Fx_server_version, Fx_server_vendor): Doc fix.
+
+	* xfns.c (Fx_server_version, Fx_server_vendor): Doc fix.
+
 	* emacs.c (syms_of_emacs) : Doc fix.
 	(Bug#19502)
 
diff --git a/src/w32fns.c b/src/w32fns.c
index 64e0e6d..412e91e 100644
--- a/src/w32fns.c
+++ b/src/w32fns.c
@@ -4842,25 +4842,38 @@ If omitted or nil, that stands for the selected frame's display.  */)
 }
 
 DEFUN ("x-server-vendor", Fx_server_vendor, Sx_server_vendor, 0, 1, 0,
-       doc: /* Return the "vendor ID" string of the W32 system (Microsoft).
-The optional argument DISPLAY specifies which display to ask about.
-DISPLAY should be either a frame or a display name (a string).
+       doc: /* Return the "vendor ID" string of the GUI software on TERMINAL.
+
+\(Labeling every distributor as a "vendor" embodies the false assumption
+that operating systems cannot be developed and distributed noncommercially.)
+
+For GNU and Unix systems, this queries the X server software; for
+MS-Windows, this queries the OS.
+
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal object, a frame or a display name (a string).
 If omitted or nil, that stands for the selected frame's display.  */)
-  (Lisp_Object display)
+  (Lisp_Object terminal)
 {
   return build_string ("Microsoft Corp.");
 }
 
 DEFUN ("x-server-version", Fx_server_version, Sx_server_version, 0, 1, 0,
-       doc: /* Return the version numbers of the server of DISPLAY.
-The value is a list of three integers: the major and minor
-version numbers of the X Protocol in use, and the distributor-specific
-release number.  See also the function `x-server-vendor'.
+       doc: /* Return the version numbers of the GUI software on TERMINAL.
+The value is a list of three integers specifying the version of the GUI
+software in use.
 
-The optional argument DISPLAY specifies which display to ask about.
-DISPLAY should be either a frame or a display name (a string).
+For GNU and Unix system, the first 2 numbers are the version of the X
+Protocol used on TERMINAL and the 3rd number is the distributor-specific
+release number.  For MS-Windows, the 3 numbers report the version and
+the build number of the OS.
+
+See also the function `x-server-vendor'.
+
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal object, a frame or a display name (a string).
 If omitted or nil, that stands for the selected frame's display.  */)
-  (Lisp_Object display)
+  (Lisp_Object terminal)
 {
   return list3i (w32_major_version, w32_minor_version, w32_build_number);
 }
diff --git a/src/xfns.c b/src/xfns.c
index a9192c8..b21228a 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -3535,10 +3535,15 @@ If omitted or nil, that stands for the selected frame's display.  */)
 }
 
 DEFUN ("x-server-vendor", Fx_server_vendor, Sx_server_vendor, 0, 1, 0,
-       doc: /* Return the "vendor ID" string of the X server of display TERMINAL.
+       doc: /* Return the "vendor ID" string of the GUI software on TERMINAL.
+
 \(Labeling every distributor as a "vendor" embodies the false assumption
 that operating systems cannot be developed and distributed noncommercially.)
 The optional argument TERMINAL specifies which display to ask about.
+
+For GNU and Unix systems, this queries the X server software; for
+MS-Windows, this queries the OS.
+
 TERMINAL should be a terminal object, a frame or a display name (a string).
 If omitted or nil, that stands for the selected frame's display.  */)
   (Lisp_Object terminal)
@@ -3551,10 +3556,16 @@ If omitted or nil, that stands for the selected frame's display.  */)
 }
 
 DEFUN ("x-server-version", Fx_server_version, Sx_server_version, 0, 1, 0,
-       doc: /* Return the version numbers of the X server of display TERMINAL.
-The value is a list of three integers: the major and minor
-version numbers of the X Protocol in use, and the distributor-specific release
-number.  See also the function `x-server-vendor'.
+       doc: /* Return the version numbers of the GUI software on TERMINAL.
+The value is a list of three integers specifying the version of the GUI
+software in use.
+
+For GNU and Unix system, the first 2 numbers are the version of the X
+Protocol used on TERMINAL and the 3rd number is the distributor-specific
+release number.  For MS-Windows, the 3 numbers report the version and
+the build number of the OS.
+
+See also the function `x-server-vendor'.
 
 The optional argument TERMINAL specifies which display to ask about.
 TERMINAL should be a terminal object, a frame or a display name (a string).

commit 143516c73db7e182687f4be98966461ce7f3703f
Author: Eli Zaretskii 
Date:   Sun Jan 4 17:51:35 2015 +0200

    src/emacs.c (syms_of_emacs) : Doc fix.  (Bug#19502)

diff --git a/src/ChangeLog b/src/ChangeLog
index 7e6a7c4..39acf77 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-04  Eli Zaretskii  
+
+	* emacs.c (syms_of_emacs) : Doc fix.
+	(Bug#19502)
+
 2014-12-30  Eli Zaretskii  
 
 	* xdisp.c (pos_visible_p): Fix up the X coordinate for
diff --git a/src/emacs.c b/src/emacs.c
index 33e8e9d..d89a681 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -2439,9 +2439,7 @@ hpux, irix, usg-unix-v) indicates some sort of Unix system.  */);
   /* See configure.ac (and config.nt) for the possible SYSTEM_TYPEs.  */
 
   DEFVAR_LISP ("system-configuration", Vsystem_configuration,
-	       doc: /* Value is string indicating configuration Emacs was built for.
-On MS-Windows, the value reflects the OS flavor and version on which
-Emacs is running.  */);
+	       doc: /* Value is string indicating configuration Emacs was built for.  */);
   Vsystem_configuration = build_string (EMACS_CONFIGURATION);
 
   DEFVAR_LISP ("system-configuration-options", Vsystem_configuration_options,

commit d7af65d24ade808b44d4c936bf4b6e2eaab708cc
Author: Dmitry Gutov 
Date:   Sun Jan 4 03:24:53 2015 +0300

    Backport: Unbreak `mouse-action' property in text buttons
    
    * lisp/button.el (push-button): Fix regression from 2012-12-06.
    
    (cherry picked from commit d94007484ab6b98054b043c1bedeaf7a58eb8606)

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 4dfe3e4..ddc0c9e 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,9 @@
+2015-01-04  Dmitry Gutov  
+
+	Unbreak `mouse-action' property in text buttons.
+
+	* button.el (push-button): Fix regression from 2012-12-06.
+
 2015-01-01  Eli Zaretskii  
 
 	* tool-bar.el (tool-bar-local-item)
diff --git a/lisp/button.el b/lisp/button.el
index 2836b89..189a1c2 100644
--- a/lisp/button.el
+++ b/lisp/button.el
@@ -449,7 +449,7 @@ return t."
 	  (if (posn-string posn)
 	      ;; mode-line, header-line, or display string event.
 	      (button-activate (posn-string posn) t)
-	    (push-button (posn-point posn)) t)))
+	    (push-button (posn-point posn) t))))
     ;; POS is just normal position
     (let ((button (button-at (or pos (point)))))
       (when button

commit 9681f300de4dddb250770d18dc417ec0027beb94
Author: jave 
Date:   Sun Jan 4 12:28:42 2015 +0100

    Fixed over-eager ifdef
    
    An xwidget ifdef in xdisp.c ended too late, so non xwidget code got
    ifdefed away unexpectedly. Should fix a crash.

diff --git a/src/xdisp.c b/src/xdisp.c
index dd474cf..bd6ab62 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -7690,6 +7690,7 @@ set_iterator_to_next (struct it *it, int reseat_p)
     case GET_FROM_STRETCH:
 #ifdef HAVE_XWIDGETS
     case GET_FROM_XWIDGET:
+#endif
 
       /* The position etc with which we have to proceed are on
 	 the stack.  The position may be at the end of a string,
@@ -7699,7 +7700,6 @@ set_iterator_to_next (struct it *it, int reseat_p)
       if (it->method == GET_FROM_STRING)
 	goto consider_string_end;
       break;
-#endif
 
     default:
       /* There are no other methods defined, so this should be a bug.  */

commit 78f196e333c9f77c6a6b5ed69b0d77857cd633a1
Author: jave 
Date:   Sun Jan 4 10:39:07 2015 +0100

    cleanups

diff --git a/src/window.c b/src/window.c
index da4e66c..65a837d 100644
--- a/src/window.c
+++ b/src/window.c
@@ -44,9 +44,6 @@ along with GNU Emacs.  If not, see .  */
 #ifdef MSDOS
 #include "msdos.h"
 #endif
-#ifdef HAVE_NS
-#include "nsterm.h"
-#endif
 #ifdef HAVE_XWIDGETS
 #include "xwidget.h"
 #endif
diff --git a/src/xdisp.c b/src/xdisp.c
index 1fa19f7..dd474cf 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -318,7 +318,6 @@ along with GNU Emacs.  If not, see .  */
 #include TERM_HEADER
 #endif /* HAVE_WINDOW_SYSTEM */
 
-#include "font.h"
 #ifdef HAVE_XWIDGETS
 #include "xwidget.h"
 #endif
@@ -7701,6 +7700,7 @@ set_iterator_to_next (struct it *it, int reseat_p)
 	goto consider_string_end;
       break;
 #endif
+
     default:
       /* There are no other methods defined, so this should be a bug.  */
       emacs_abort ();
@@ -13831,13 +13831,6 @@ redisplay_internal (void)
 	      *w->desired_matrix->method = 0;
 	      debug_method_add (w, "optimization 1");
 #endif
-#if HAVE_XWIDGETS
-              //debug optimization movement issue
-              //w->desired_matrix->no_scrolling_p = 1;
-              //*w->desired_matrix->method = 0;
-              //debug_method_add (w, "optimization 1");
-#endif
-
 #ifdef HAVE_WINDOW_SYSTEM
 	      update_window_fringes (w, 0);
 #endif
@@ -17084,11 +17077,6 @@ try_window (Lisp_Object window, struct text_pos pos, int flags)
       if (f->fonts_changed && !(flags & TRY_WINDOW_IGNORE_FONTS_CHANGE))
 	return 0;
     }
-#ifdef HAVE_XWIDGETS_xxx
- //currently this is needed to detect xwidget movement reliably. or probably not.
-  printf("try_window\n");
-    return 0;
-#endif
 
   /* Don't let the cursor end in the scroll margins.  */
   if ((flags & TRY_WINDOW_CHECK_MARGINS)
@@ -17949,13 +17937,6 @@ try_window_id (struct window *w)
     return 0;
 #endif
 
-#ifdef HAVE_XWIDGETS_xxx
-  //maybe needed for proper xwidget movement
-    printf("try_window_id\n");
-    return -1;
-#endif
-
-
   /* This is handy for debugging.  */
 #if 0
 #define GIVE_UP(X)						\
diff --git a/src/xterm.c b/src/xterm.c
index 14d04b8..e3f4739 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -8033,6 +8033,7 @@ x_draw_bar_cursor (struct window *w, struct glyph_row *row, int width, enum text
   cursor_glyph = get_phys_cursor_glyph (w);
   if (cursor_glyph == NULL)
     return;
+
 #ifdef HAVE_XWIDGETS
   if (cursor_glyph->type == XWIDGET_GLYPH){
     printf("tried avoiding xwidget cursor\n");

commit a7e2c92ddf6c27b2cfcc9782fd71f15d36162cce
Merge: db46135 fec9b79
Author: jave 
Date:   Sun Jan 4 09:09:36 2015 +0100

    merge master

commit e13e3bd819fca99c86ea6386b3351f45ac50cccd
Author: Glenn Morris 
Date:   Fri Jan 2 17:30:52 2015 -0800

    * admin/update_autogen (commit): Prepend "# " to commit message.

diff --git a/admin/ChangeLog b/admin/ChangeLog
index 6e034f2..b1d8ed8 100644
--- a/admin/ChangeLog
+++ b/admin/ChangeLog
@@ -1,3 +1,7 @@
+2015-01-03  Glenn Morris  
+
+	* update_autogen (commit): Prepend "# " to commit message.
+
 2014-11-19  Paul Eggert  
 
 	Lessen focus on ChangeLog files, as opposed to change log entries.
diff --git a/admin/update_autogen b/admin/update_autogen
index ad7eb57..0513d07 100755
--- a/admin/update_autogen
+++ b/admin/update_autogen
@@ -228,7 +228,7 @@ commit ()
 
     echo "Committing..."
 
-    $vcs commit -m "Auto-commit of $type files." "$@" || return $?
+    $vcs commit -m "# Auto-commit of $type files." "$@" || return $?
 
     [ "$vcs" = "git" ] && {
         $vcs push || return $?

commit db4613576d3115aa320f0293d081ce98baa06acd
Merge: c089503 d0ca114
Author: jave 
Date:   Fri Jan 2 16:30:55 2015 +0100

    merge master

commit 780eb0a732c849100236f22556fe9f4836c18ec5
Author: Glenn Morris 
Date:   Fri Jan 2 07:22:18 2015 -0500

    Auto-commit of loaddefs files.

diff --git a/lisp/dired.el b/lisp/dired.el
index ce3db88..211f924 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -3883,7 +3883,7 @@ Ask means pop up a menu for the user to select one of copy, move or link."
 
 ;;; Start of automatically extracted autoloads.
 
-;;;### (autoloads nil "dired-aux" "dired-aux.el" "6969bb4414a8a31b91342ab922a94efb")
+;;;### (autoloads nil "dired-aux" "dired-aux.el" "ff408a17776696840db60d57b10ec2f4")
 ;;; Generated autoloads from dired-aux.el
 
 (autoload 'dired-diff "dired-aux" "\
@@ -4386,7 +4386,7 @@ instead.
 
 ;;;***
 
-;;;### (autoloads nil "dired-x" "dired-x.el" "994b5d9fc38059ab641ec271c728e56f")
+;;;### (autoloads nil "dired-x" "dired-x.el" "d8d702a50887671b9128ba60bd9ebb8e")
 ;;; Generated autoloads from dired-x.el
 
 (autoload 'dired-jump "dired-x" "\
diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el
index c7ee87f..1ae1e59 100644
--- a/lisp/emacs-lisp/eieio.el
+++ b/lisp/emacs-lisp/eieio.el
@@ -916,7 +916,7 @@ Optional argument NOESCAPE is passed to `prin1-to-string' when appropriate."
 
 ;;; Start of automatically extracted autoloads.
 
-;;;### (autoloads nil "eieio-custom" "eieio-custom.el" "5b0e7b1beea11f9e9de6887279f75d61")
+;;;### (autoloads nil "eieio-custom" "eieio-custom.el" "f15421ce19e293c6f84c825545ce0b8d")
 ;;; Generated autoloads from eieio-custom.el
 
 (autoload 'customize-object "eieio-custom" "\
@@ -927,7 +927,7 @@ Optional argument GROUP is the sub-group of slots to display.
 
 ;;;***
 
-;;;### (autoloads nil "eieio-opt" "eieio-opt.el" "99b94c63a73593402e3c825178a44f4f")
+;;;### (autoloads nil "eieio-opt" "eieio-opt.el" "fc27fb3e17d23e43ad99d98572aa7b19")
 ;;; Generated autoloads from eieio-opt.el
 
 (autoload 'eieio-browse "eieio-opt" "\
diff --git a/lisp/htmlfontify.el b/lisp/htmlfontify.el
index 4788b91..bb1ae18 100644
--- a/lisp/htmlfontify.el
+++ b/lisp/htmlfontify.el
@@ -2403,7 +2403,7 @@ You may also want to set `hfy-page-header' and `hfy-page-footer'."
     (load file 'NOERROR nil nil) ))
 
 
-;;;### (autoloads nil "hfy-cmap" "hfy-cmap.el" "27dc80b0f7187aaf582805a8f887819a")
+;;;### (autoloads nil "hfy-cmap" "hfy-cmap.el" "ce07a28b93c09032fd6b225ad74be0df")
 ;;; Generated autoloads from hfy-cmap.el
 
 (autoload 'htmlfontify-load-rgb-file "hfy-cmap" "\
diff --git a/lisp/ibuffer.el b/lisp/ibuffer.el
index 2d89c30..f940016 100644
--- a/lisp/ibuffer.el
+++ b/lisp/ibuffer.el
@@ -2628,7 +2628,7 @@ will be inserted before the group at point."
 
 ;;; Start of automatically extracted autoloads.
 
-;;;### (autoloads nil "ibuf-ext" "ibuf-ext.el" "e8ce929c4c76419f8d355b444f722c3a")
+;;;### (autoloads nil "ibuf-ext" "ibuf-ext.el" "1132b875829542a46bbf126cbcdd662d")
 ;;; Generated autoloads from ibuf-ext.el
 
 (autoload 'ibuffer-auto-mode "ibuf-ext" "\
diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el
index edb8e58..58901cb 100644
--- a/lisp/mail/rmail.el
+++ b/lisp/mail/rmail.el
@@ -4624,7 +4624,7 @@ encoded string (and the same mask) will decode the string."
 
 ;;; Start of automatically extracted autoloads.
 
-;;;### (autoloads nil "rmailedit" "rmailedit.el" "b155463a02e4aa9256ac21997ea003e9")
+;;;### (autoloads nil "rmailedit" "rmailedit.el" "f6da7267316d02c90b9d314ce95b3c22")
 ;;; Generated autoloads from rmailedit.el
 
 (autoload 'rmail-edit-current-message "rmailedit" "\
@@ -4634,7 +4634,7 @@ Edit the contents of this message.
 
 ;;;***
 
-;;;### (autoloads nil "rmailkwd" "rmailkwd.el" "d462d15a119ee2a1733de2bc31bf347c")
+;;;### (autoloads nil "rmailkwd" "rmailkwd.el" "298dcda7febb6e4ebf0a166101f40650")
 ;;; Generated autoloads from rmailkwd.el
 
 (autoload 'rmail-add-label "rmailkwd" "\
@@ -4677,7 +4677,7 @@ With prefix argument N moves forward N messages with these labels.
 
 ;;;***
 
-;;;### (autoloads nil "rmailmm" "rmailmm.el" "4904dafb4e3b7b456c14e63d2dc9163d")
+;;;### (autoloads nil "rmailmm" "rmailmm.el" "93b910705d5481b37cace27d89df0217")
 ;;; Generated autoloads from rmailmm.el
 
 (autoload 'rmail-mime "rmailmm" "\
@@ -4703,7 +4703,7 @@ The arguments ARG and STATE have no effect in this case.
 
 ;;;***
 
-;;;### (autoloads nil "rmailmsc" "rmailmsc.el" "0950b0ad020610737220948bb3f37c17")
+;;;### (autoloads nil "rmailmsc" "rmailmsc.el" "c3f0d33739768fc12acc4258ae0da72e")
 ;;; Generated autoloads from rmailmsc.el
 
 (autoload 'set-rmail-inbox-list "rmailmsc" "\
@@ -4717,7 +4717,7 @@ This applies only to the current session.
 
 ;;;***
 
-;;;### (autoloads nil "rmailsort" "rmailsort.el" "4106a6e4898795822554ce931f531ab8")
+;;;### (autoloads nil "rmailsort" "rmailsort.el" "8f551773021df4fa1a14ec2517e6a4f1")
 ;;; Generated autoloads from rmailsort.el
 
 (autoload 'rmail-sort-by-date "rmailsort" "\
@@ -4774,7 +4774,7 @@ If prefix argument REVERSE is non-nil, sorts in reverse order.
 
 ;;;***
 
-;;;### (autoloads nil "rmailsum" "rmailsum.el" "1278ff9911aa307f30dd57c20adbcdc6")
+;;;### (autoloads nil "rmailsum" "rmailsum.el" "7a34d3e46d5b99c22c1c9d012e29a94b")
 ;;; Generated autoloads from rmailsum.el
 
 (autoload 'rmail-summary "rmailsum" "\
@@ -4821,7 +4821,7 @@ SENDERS is a string of regexps separated by commas.
 
 ;;;***
 
-;;;### (autoloads nil "undigest" "undigest.el" "f30d93eb6a006ac64080a1ee8a45a1af")
+;;;### (autoloads nil "undigest" "undigest.el" "912d4d3bf762991df5d4d02f42358025")
 ;;; Generated autoloads from undigest.el
 
 (autoload 'undigestify-rmail-message "undigest" "\
diff --git a/lisp/ps-print.el b/lisp/ps-print.el
index 899793f..eddd786 100644
--- a/lisp/ps-print.el
+++ b/lisp/ps-print.el
@@ -6589,7 +6589,7 @@ If FACE is not a valid face name, use default face."
 ;; To make this file smaller, some commands go in a separate file.
 ;; But autoload them here to make the separation invisible.
 
-;;;### (autoloads nil "ps-mule" "ps-mule.el" "173235d6520575a877c25be437fb9e5f")
+;;;### (autoloads nil "ps-mule" "ps-mule.el" "231b07356e5a37ebf517c613a3a12bba")
 ;;; Generated autoloads from ps-mule.el
 
 (defvar ps-multibyte-buffer nil "\

commit a012c7bbca887c3da837ce3d7ec01be697cffe64
Author: Paul Eggert 
Date:   Thu Jan 1 09:18:59 2015 -0800

    Fix copyright years by hand
    
    These are dates that admin/update-copyright did not update,
    or updated incorrectly.

diff --git a/config.bat b/config.bat
index cc35447..232beb2 100644
--- a/config.bat
+++ b/config.bat
@@ -1,7 +1,7 @@
 @echo off
 rem   ----------------------------------------------------------------------
 rem   Configuration script for MSDOS
-rem   Copyright (C) 1994-1999, 2001-2014 Free Software Foundation, Inc.
+rem   Copyright (C) 1994-1999, 2001-2015 Free Software Foundation, Inc.
 
 rem   This file is part of GNU Emacs.
 
diff --git a/configure.ac b/configure.ac
index 947795a..bae020e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4627,7 +4627,7 @@ fi
 
 version=$PACKAGE_VERSION
 
-copyright="Copyright (C) 2014 Free Software Foundation, Inc."
+copyright="Copyright (C) 2015 Free Software Foundation, Inc."
 AC_DEFINE_UNQUOTED(COPYRIGHT, ["$copyright"],
   [Short copyright string for this version of Emacs.])
 AC_SUBST(copyright)
@@ -4948,7 +4948,7 @@ AC_SUBST(WINDOW_SYSTEM_OBJ)
 
 AH_TOP([/* GNU Emacs site configuration template file.
 
-Copyright (C) 1988, 1993-1994, 1999-2002, 2004-2014
+Copyright (C) 1988, 1993-1994, 1999-2002, 2004-2015
   Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
diff --git a/doc/emacs/emacs-xtra.texi b/doc/emacs/emacs-xtra.texi
index 817d1c6..083762d 100644
--- a/doc/emacs/emacs-xtra.texi
+++ b/doc/emacs/emacs-xtra.texi
@@ -11,7 +11,7 @@
 @copying
 This manual describes specialized features of Emacs.
 
-Copyright @copyright{} 2004--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2004--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi
index b473e0c..5125510 100644
--- a/doc/emacs/emacs.texi
+++ b/doc/emacs/emacs.texi
@@ -26,7 +26,7 @@ This is the @cite{GNU Emacs Manual},
 @end ifnottex
 updated for Emacs version @value{EMACSVER}.
 
-Copyright @copyright{} 1985--1987, 1993--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1985--1987, 1993--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/lispintro/emacs-lisp-intro.texi b/doc/lispintro/emacs-lisp-intro.texi
index 0ea75ea..5a07a45 100644
--- a/doc/lispintro/emacs-lisp-intro.texi
+++ b/doc/lispintro/emacs-lisp-intro.texi
@@ -113,7 +113,7 @@ Edition @value{edition-number}, @value{update-date}
 Distributed with Emacs version @value{EMACSVER}.
 @end ifnottex
 @sp 1
-Copyright @copyright{} 1990--1995, 1997, 2001--2014 Free Software
+Copyright @copyright{} 1990--1995, 1997, 2001--2015 Free Software
 Foundation, Inc.
 @sp 1
 
diff --git a/doc/lispref/elisp.texi b/doc/lispref/elisp.texi
index 973ee6f..865ac4c 100644
--- a/doc/lispref/elisp.texi
+++ b/doc/lispref/elisp.texi
@@ -98,7 +98,7 @@ This is the @cite{GNU Emacs Lisp Reference Manual}
 @end ifnottex
 corresponding to Emacs version @value{EMACSVER}.
 
-Copyright @copyright{} 1990--1996, 1998--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1990--1996, 1998--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/lispref/tips.texi b/doc/lispref/tips.texi
index c99c2bd..8970efe 100644
--- a/doc/lispref/tips.texi
+++ b/doc/lispref/tips.texi
@@ -918,7 +918,7 @@ explains these conventions, starting with an example:
 @group
 ;;; foo.el --- Support for the Foo programming language
 
-;; Copyright (C) 2010-2014 Your Name
+;; Copyright (C) 2010-2015 Your Name
 @end group
 
 ;; Author: Your Name 
diff --git a/doc/man/ebrowse.1 b/doc/man/ebrowse.1
index ce887b0..a4f0c79 100644
--- a/doc/man/ebrowse.1
+++ b/doc/man/ebrowse.1
@@ -85,7 +85,7 @@ was written by Gerd Moellmann.
 Copyright
 .if t \(co
 .if n (C)
-2008-2014 Free Software Foundation, Inc.
+2008-2015 Free Software Foundation, Inc.
 .PP
 Permission is granted to make and distribute verbatim copies of this
 document provided the copyright notice and this permission notice are
diff --git a/doc/man/emacs.1 b/doc/man/emacs.1
index bd2b5fd..e68c89f 100644
--- a/doc/man/emacs.1
+++ b/doc/man/emacs.1
@@ -651,7 +651,7 @@ For detailed credits and acknowledgments, see the GNU Emacs manual.
 Copyright
 .if t \(co
 .if n (C)
-1995, 1999-2014 Free Software Foundation, Inc.
+1995, 1999-2015 Free Software Foundation, Inc.
 .PP
 Permission is granted to make and distribute verbatim copies of this
 document provided the copyright notice and this permission notice are
diff --git a/doc/man/etags.1 b/doc/man/etags.1
index 7d13892..08db343 100644
--- a/doc/man/etags.1
+++ b/doc/man/etags.1
@@ -268,7 +268,7 @@ Stallman.
 Copyright
 .if t \(co
 .if n (C)
-1992, 1999, 2001-2014 Free Software Foundation, Inc.
+1992, 1999, 2001-2015 Free Software Foundation, Inc.
 .PP
 Permission is granted to make and distribute verbatim copies of this
 document provided the copyright notice and this permission notice are
diff --git a/doc/man/grep-changelog.1 b/doc/man/grep-changelog.1
index a3635a6..1a08c6c 100644
--- a/doc/man/grep-changelog.1
+++ b/doc/man/grep-changelog.1
@@ -59,10 +59,10 @@ Display version information.
 Display basic usage information.
 .
 .SH COPYING
-Copyright 
+Copyright
 .if t \(co
 .if n (C)
-2008-2014 Free Software Foundation, Inc.
+2008-2015 Free Software Foundation, Inc.
 .PP
 Permission is granted to make and distribute verbatim copies of this
 document provided the copyright notice and this permission notice are
diff --git a/doc/misc/ada-mode.texi b/doc/misc/ada-mode.texi
index e68bf05..8bab251 100644
--- a/doc/misc/ada-mode.texi
+++ b/doc/misc/ada-mode.texi
@@ -4,7 +4,7 @@
 @documentencoding UTF-8
 
 @copying
-Copyright @copyright{} 1999--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1999--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/auth.texi b/doc/misc/auth.texi
index 2de4cfd..36d2741 100644
--- a/doc/misc/auth.texi
+++ b/doc/misc/auth.texi
@@ -11,7 +11,7 @@
 @copying
 This file describes the Emacs auth-source library.
 
-Copyright @copyright{} 2008--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2008--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/autotype.texi b/doc/misc/autotype.texi
index 3ddeb08..6fed713 100644
--- a/doc/misc/autotype.texi
+++ b/doc/misc/autotype.texi
@@ -11,7 +11,7 @@
 @c  @cindex autotypist
 
 @copying
-Copyright @copyright{} 1994--1995, 1999, 2001--2014
+Copyright @copyright{} 1994--1995, 1999, 2001--2015
 Free Software Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/bovine.texi b/doc/misc/bovine.texi
index 2ac355f..b390b60 100644
--- a/doc/misc/bovine.texi
+++ b/doc/misc/bovine.texi
@@ -24,7 +24,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 1999--2004, 2012--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1999--2004, 2012--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/calc.texi b/doc/misc/calc.texi
index 56aa2d0..b54f8af 100644
--- a/doc/misc/calc.texi
+++ b/doc/misc/calc.texi
@@ -95,7 +95,7 @@ This file documents Calc, the GNU Emacs calculator, included with
 GNU Emacs @value{EMACSVER}.
 @end ifnotinfo
 
-Copyright @copyright{} 1990--1991, 2001--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1990--1991, 2001--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/cc-mode.texi b/doc/misc/cc-mode.texi
index cbb49e0..471f507 100644
--- a/doc/misc/cc-mode.texi
+++ b/doc/misc/cc-mode.texi
@@ -157,7 +157,7 @@ CC Mode
 @copying
 This manual is for CC Mode in Emacs.
 
-Copyright @copyright{} 1995--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1995--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/cl.texi b/doc/misc/cl.texi
index 4eb8508..3a5c7c8 100644
--- a/doc/misc/cl.texi
+++ b/doc/misc/cl.texi
@@ -7,7 +7,7 @@
 @copying
 This file documents the GNU Emacs Common Lisp emulation package.
 
-Copyright @copyright{} 1993, 2001--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1993, 2001--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/dbus.texi b/doc/misc/dbus.texi
index 4c63ecd..773ef6f 100644
--- a/doc/misc/dbus.texi
+++ b/doc/misc/dbus.texi
@@ -10,7 +10,7 @@
 @syncodeindex fn cp
 
 @copying
-Copyright @copyright{} 2007--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2007--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/dired-x.texi b/doc/misc/dired-x.texi
index fe40c5e..b175c63 100644
--- a/doc/misc/dired-x.texi
+++ b/doc/misc/dired-x.texi
@@ -20,7 +20,7 @@
 @comment %**end of header (This is for running Texinfo on a region.)
 
 @copying
-Copyright @copyright{} 1994--1995, 1999, 2001--2014
+Copyright @copyright{} 1994--1995, 1999, 2001--2015
 Free Software Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/ebrowse.texi b/doc/misc/ebrowse.texi
index 9ff3e28..8867959 100644
--- a/doc/misc/ebrowse.texi
+++ b/doc/misc/ebrowse.texi
@@ -11,7 +11,7 @@
 @copying
 This file documents Ebrowse, a C++ class browser for GNU Emacs.
 
-Copyright @copyright{} 2000--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2000--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/ede.texi b/doc/misc/ede.texi
index 89e576b..5529b9b 100644
--- a/doc/misc/ede.texi
+++ b/doc/misc/ede.texi
@@ -6,7 +6,7 @@
 @copying
 This file describes EDE, the Emacs Development Environment.
 
-Copyright @copyright{} 1998--2001, 2004--2005, 2008--2014
+Copyright @copyright{} 1998--2001, 2004--2005, 2008--2015
 Free Software Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/ediff.texi b/doc/misc/ediff.texi
index ea4bcc8..0fa88a5 100644
--- a/doc/misc/ediff.texi
+++ b/doc/misc/ediff.texi
@@ -26,7 +26,7 @@
 This file documents Ediff, a comprehensive visual interface to Unix diff
 and patch utilities.
 
-Copyright @copyright{} 1995--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1995--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/edt.texi b/doc/misc/edt.texi
index 6e06622..68324b1 100644
--- a/doc/misc/edt.texi
+++ b/doc/misc/edt.texi
@@ -6,7 +6,7 @@
 @copying
 This file documents the EDT emulation package for Emacs.
 
-Copyright @copyright{} 1986, 1992, 1994--1995, 1999--2014
+Copyright @copyright{} 1986, 1992, 1994--1995, 1999--2015
 Free Software Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/efaq.texi b/doc/misc/efaq.texi
index 89f277b..8f6515a 100644
--- a/doc/misc/efaq.texi
+++ b/doc/misc/efaq.texi
@@ -12,7 +12,7 @@
 @c appreciate a notice if you do).
 
 @copying
-Copyright @copyright{} 2001--2014 Free Software Foundation, Inc.@*
+Copyright @copyright{} 2001--2015 Free Software Foundation, Inc.@*
 Copyright @copyright{} 1994, 1995, 1996, 1997, 1998, 1999, 2000
 Reuven M. Lerner@*
 Copyright @copyright{} 1992, 1993 Steven Byrnes@*
diff --git a/doc/misc/eieio.texi b/doc/misc/eieio.texi
index c78229b..f64cf27 100644
--- a/doc/misc/eieio.texi
+++ b/doc/misc/eieio.texi
@@ -12,7 +12,7 @@
 @copying
 This manual documents EIEIO, an object framework for Emacs Lisp.
 
-Copyright @copyright{} 2007--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2007--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/emacs-gnutls.texi b/doc/misc/emacs-gnutls.texi
index bc054ac..284b7f7 100644
--- a/doc/misc/emacs-gnutls.texi
+++ b/doc/misc/emacs-gnutls.texi
@@ -9,7 +9,7 @@
 @copying
 This file describes the Emacs GnuTLS integration.
 
-Copyright @copyright{} 2012--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2012--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/emacs-mime.texi b/doc/misc/emacs-mime.texi
index 19cdd43..bc09d47 100644
--- a/doc/misc/emacs-mime.texi
+++ b/doc/misc/emacs-mime.texi
@@ -11,7 +11,7 @@
 @copying
 This file documents the Emacs MIME interface functionality.
 
-Copyright @copyright{} 1998--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1998--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/epa.texi b/doc/misc/epa.texi
index 0632e73..500c629 100644
--- a/doc/misc/epa.texi
+++ b/doc/misc/epa.texi
@@ -10,7 +10,7 @@
 @copying
 This file describes EasyPG Assistant @value{VERSION}.
 
-Copyright @copyright{} 2007--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2007--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/erc.texi b/doc/misc/erc.texi
index 4cb5eae..ffb8cd6 100644
--- a/doc/misc/erc.texi
+++ b/doc/misc/erc.texi
@@ -10,7 +10,7 @@
 @copying
 This manual is for ERC as distributed with Emacs @value{EMACSVER}.
 
-Copyright @copyright{} 2005--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2005--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/ert.texi b/doc/misc/ert.texi
index ec1614c..e6840b1 100644
--- a/doc/misc/ert.texi
+++ b/doc/misc/ert.texi
@@ -11,7 +11,7 @@
 @end direntry
 
 @copying
-Copyright @copyright{} 2008, 2010--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2008, 2010--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/eshell.texi b/doc/misc/eshell.texi
index e7c3c71..a7a503f 100644
--- a/doc/misc/eshell.texi
+++ b/doc/misc/eshell.texi
@@ -10,7 +10,7 @@
 @copying
 This manual is for Eshell, the Emacs shell.
 
-Copyright @copyright{} 1999--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1999--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/eudc.texi b/doc/misc/eudc.texi
index a54a37a..2f7a019 100644
--- a/doc/misc/eudc.texi
+++ b/doc/misc/eudc.texi
@@ -13,7 +13,7 @@ EUDC is the Emacs Unified Directory Client, a common interface to
 directory servers using various protocols such as LDAP or the CCSO white
 pages directory system (PH/QI)
 
-Copyright @copyright{} 1998, 2000--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1998, 2000--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/eww.texi b/doc/misc/eww.texi
index 6ca4858..7762158 100644
--- a/doc/misc/eww.texi
+++ b/doc/misc/eww.texi
@@ -8,7 +8,7 @@
 @copying
 This file documents the GNU Emacs Web Wowser (EWW) package.
 
-Copyright @copyright{} 2014-2015 Free Software Foundation, Inc.
+Copyright @copyright{} 2014--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/flymake.texi b/doc/misc/flymake.texi
index 761056a..52683a8 100644
--- a/doc/misc/flymake.texi
+++ b/doc/misc/flymake.texi
@@ -12,7 +12,7 @@
 This manual is for GNU Flymake (version @value{VERSION}, @value{UPDATED}),
 which is a universal on-the-fly syntax checker for GNU Emacs.
 
-Copyright @copyright{} 2004--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2004--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/forms.texi b/doc/misc/forms.texi
index 8ea470d..e4571d0 100644
--- a/doc/misc/forms.texi
+++ b/doc/misc/forms.texi
@@ -19,7 +19,7 @@
 @copying
 This file documents Forms mode, a form-editing major mode for GNU Emacs.
 
-Copyright @copyright{} 1989, 1997, 2001--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1989, 1997, 2001--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/gnus-coding.texi b/doc/misc/gnus-coding.texi
index e955b14..d1b372f 100644
--- a/doc/misc/gnus-coding.texi
+++ b/doc/misc/gnus-coding.texi
@@ -8,7 +8,7 @@
 @syncodeindex pg cp
 
 @copying
-Copyright @copyright{} 2004--2005, 2007--2014 Free Software
+Copyright @copyright{} 2004--2005, 2007--2015 Free Software
 Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/gnus-news.el b/doc/misc/gnus-news.el
index c4f9f9c..81986f2 100644
--- a/doc/misc/gnus-news.el
+++ b/doc/misc/gnus-news.el
@@ -26,7 +26,7 @@
 (defvar gnus-news-header-disclaimer
 "GNUS NEWS -- history of user-visible changes.
 
-Copyright (C) 1999-2014 Free Software Foundation, Inc.
+Copyright (C) 1999-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Gnus bug reports to bugs@gnus.org.
diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi
index 9bbcaa8..ff99868 100644
--- a/doc/misc/gnus.texi
+++ b/doc/misc/gnus.texi
@@ -11,7 +11,7 @@
 @documentencoding UTF-8
 
 @copying
-Copyright @copyright{} 1995--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1995--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/idlwave.texi b/doc/misc/idlwave.texi
index b1ed47e..5c87dc2 100644
--- a/doc/misc/idlwave.texi
+++ b/doc/misc/idlwave.texi
@@ -23,7 +23,7 @@ Emacs, and interacting with an IDL shell run as a subprocess.
 This is edition @value{EDITION} of the IDLWAVE User Manual for IDLWAVE
 @value{VERSION}.
 
-Copyright @copyright{} 1999--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1999--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/info.texi b/doc/misc/info.texi
index a3a14a3..62567eb 100644
--- a/doc/misc/info.texi
+++ b/doc/misc/info.texi
@@ -15,7 +15,7 @@
 This file describes how to use Info, the menu-driven GNU
 documentation system.
 
-Copyright @copyright{} 1989, 1992, 1996--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1989, 1992, 1996--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/mairix-el.texi b/doc/misc/mairix-el.texi
index f205826..f37b242 100644
--- a/doc/misc/mairix-el.texi
+++ b/doc/misc/mairix-el.texi
@@ -6,7 +6,7 @@
 @documentencoding UTF-8
 
 @copying
-Copyright @copyright{} 2008--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2008--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/message.texi b/doc/misc/message.texi
index 7421360..0a04e88 100644
--- a/doc/misc/message.texi
+++ b/doc/misc/message.texi
@@ -11,7 +11,7 @@
 @copying
 This file documents Message, the Emacs message composition mode.
 
-Copyright @copyright{} 1996--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1996--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/mh-e.texi b/doc/misc/mh-e.texi
index b4538f8..de32378 100644
--- a/doc/misc/mh-e.texi
+++ b/doc/misc/mh-e.texi
@@ -25,7 +25,7 @@
 This is version @value{VERSION}@value{EDITION} of @cite{The MH-E
 Manual}, last updated @value{UPDATED}.
 
-Copyright @copyright{} 1995, 2001--2003, 2005--2014 Free Software
+Copyright @copyright{} 1995, 2001--2003, 2005--2015 Free Software
 Foundation, Inc.
 
 @c This dual license has been agreed upon by the FSF.
diff --git a/doc/misc/newsticker.texi b/doc/misc/newsticker.texi
index f51d954..587811c 100644
--- a/doc/misc/newsticker.texi
+++ b/doc/misc/newsticker.texi
@@ -14,7 +14,7 @@
 This manual is for Newsticker (version @value{VERSION}, @value{UPDATED}).
 
 @noindent
-Copyright @copyright{} 2004--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2004--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/nxml-mode.texi b/doc/misc/nxml-mode.texi
index 5303030..bf4341f 100644
--- a/doc/misc/nxml-mode.texi
+++ b/doc/misc/nxml-mode.texi
@@ -9,7 +9,7 @@
 This manual documents nXML mode, an Emacs major mode for editing
 XML with RELAX NG support.
 
-Copyright @copyright{} 2007--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2007--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/octave-mode.texi b/doc/misc/octave-mode.texi
index 31c2112..5916953 100644
--- a/doc/misc/octave-mode.texi
+++ b/doc/misc/octave-mode.texi
@@ -6,7 +6,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 1996--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1996--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/org.texi b/doc/misc/org.texi
index 7c79607..86335e5 100644
--- a/doc/misc/org.texi
+++ b/doc/misc/org.texi
@@ -259,7 +259,7 @@
 @copying
 This manual is for Org version @value{VERSION}.
 
-Copyright @copyright{} 2004--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2004--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -12954,7 +12954,7 @@ Copyright information is printed on the back of the title page.
 
   This is a short example of a complete Texinfo file, version 1.0.
 
-  Copyright \copy 2014 Free Software Foundation, Inc.
+  Copyright \copy 2015 Free Software Foundation, Inc.
 @end example
 
 @subsubheading The Top node
@@ -13126,7 +13126,7 @@ Here is a thorough example, taken from @inforef{GNU Sample Texts,,texinfo}.
 #+TEXINFO_PRINTED_TITLE: GNU Sample
 #+SUBTITLE: for version 2.0, last updated 4 March 2014
 
-* Copying 
+* Copying
   :PROPERTIES:
   :COPYING:  t
   :END:
diff --git a/doc/misc/pcl-cvs.texi b/doc/misc/pcl-cvs.texi
index 6b56bc0..2dd76d7 100644
--- a/doc/misc/pcl-cvs.texi
+++ b/doc/misc/pcl-cvs.texi
@@ -7,7 +7,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 1991--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1991--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/pgg.texi b/doc/misc/pgg.texi
index 53c66c8..1e38c46 100644
--- a/doc/misc/pgg.texi
+++ b/doc/misc/pgg.texi
@@ -13,7 +13,7 @@
 This file describes PGG @value{VERSION}, an Emacs interface to various
 PGP implementations.
 
-Copyright @copyright{} 2001, 2003--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2001, 2003--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/rcirc.texi b/doc/misc/rcirc.texi
index 2a7c52c..2be82cf 100644
--- a/doc/misc/rcirc.texi
+++ b/doc/misc/rcirc.texi
@@ -6,7 +6,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 2006--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2006--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/reftex.texi b/doc/misc/reftex.texi
index 6d79d35..cdbbf08 100644
--- a/doc/misc/reftex.texi
+++ b/doc/misc/reftex.texi
@@ -46,7 +46,7 @@ This manual documents @RefTeX{} (version @value{VERSION}), a package
 to do labels, references, citations and indices for LaTeX documents
 with Emacs.
 
-Copyright @copyright{} 1997--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1997--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/remember.texi b/doc/misc/remember.texi
index 5e2c1e2..5690a12 100644
--- a/doc/misc/remember.texi
+++ b/doc/misc/remember.texi
@@ -9,7 +9,7 @@
 @copying
 This manual is for Remember Mode, version 2.0
 
-Copyright @copyright{} 2001, 2004--2005, 2007--2014
+Copyright @copyright{} 2001, 2004--2005, 2007--2015
 Free Software Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/sasl.texi b/doc/misc/sasl.texi
index ce3300d..be486d9 100644
--- a/doc/misc/sasl.texi
+++ b/doc/misc/sasl.texi
@@ -12,7 +12,7 @@
 @copying
 This file describes the Emacs SASL library, version @value{VERSION}.
 
-Copyright @copyright{} 2000, 2004--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2000, 2004--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/sc.texi b/doc/misc/sc.texi
index 83429a8..50c3349 100644
--- a/doc/misc/sc.texi
+++ b/doc/misc/sc.texi
@@ -15,7 +15,7 @@
 This document describes Supercite, an Emacs package for citing and
 attributing replies to mail and news messages.
 
-Copyright @copyright{} 1993, 2001--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1993, 2001--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/semantic.texi b/doc/misc/semantic.texi
index 0b0d7a3..6b820ee 100644
--- a/doc/misc/semantic.texi
+++ b/doc/misc/semantic.texi
@@ -25,7 +25,7 @@
 @copying
 This manual documents the Semantic library and utilities.
 
-Copyright @copyright{} 1999--2005, 2007, 2009--2014 Free Software
+Copyright @copyright{} 1999--2005, 2007, 2009--2015 Free Software
 Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/ses.texi b/doc/misc/ses.texi
index 2e1159a..f49fac5 100644
--- a/doc/misc/ses.texi
+++ b/doc/misc/ses.texi
@@ -12,7 +12,7 @@
 @copying
 This file documents @acronym{SES}: the Simple Emacs Spreadsheet.
 
-Copyright @copyright{} 2002--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2002--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/sieve.texi b/doc/misc/sieve.texi
index 422468c..6706309 100644
--- a/doc/misc/sieve.texi
+++ b/doc/misc/sieve.texi
@@ -12,7 +12,7 @@
 @copying
 This file documents the Emacs Sieve package, for server-side mail filtering.
 
-Copyright @copyright{} 2001--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2001--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/smtpmail.texi b/doc/misc/smtpmail.texi
index cb22dc8..893c935 100644
--- a/doc/misc/smtpmail.texi
+++ b/doc/misc/smtpmail.texi
@@ -4,7 +4,7 @@
 @documentencoding UTF-8
 @syncodeindex vr fn
 @copying
-Copyright @copyright{} 2003--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2003--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/speedbar.texi b/doc/misc/speedbar.texi
index f5acc25..5915c6b 100644
--- a/doc/misc/speedbar.texi
+++ b/doc/misc/speedbar.texi
@@ -5,7 +5,7 @@
 @syncodeindex fn cp
 
 @copying
-Copyright @copyright{} 1999--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1999--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/srecode.texi b/doc/misc/srecode.texi
index cd72656..534cdea 100644
--- a/doc/misc/srecode.texi
+++ b/doc/misc/srecode.texi
@@ -16,7 +16,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 2007--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2007--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/texinfo.tex b/doc/misc/texinfo.tex
index 879b467..0f2673c 100644
--- a/doc/misc/texinfo.tex
+++ b/doc/misc/texinfo.tex
@@ -5,7 +5,9 @@
 %
 \def\texinfoversion{2014-03-17.07}
 %
-% Copyright 1985-1986, 1988, 1990-2015 Free Software Foundation, Inc.
+% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
+% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+% 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
 %
 % This texinfo.tex file is free software: you can redistribute it and/or
 % modify it under the terms of the GNU General Public License as
diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi
index ebf62c6..503bf8b 100644
--- a/doc/misc/tramp.texi
+++ b/doc/misc/tramp.texi
@@ -66,7 +66,7 @@
 @end ifclear
 
 @copying
-Copyright @copyright{} 1999--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1999--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/url.texi b/doc/misc/url.texi
index 765d97d..4b97fa6 100644
--- a/doc/misc/url.texi
+++ b/doc/misc/url.texi
@@ -22,7 +22,7 @@
 @copying
 This is the manual for the @code{url} Emacs Lisp library.
 
-Copyright @copyright{} 1993--1999, 2002, 2004--2014 Free Software
+Copyright @copyright{} 1993--1999, 2002, 2004--2015 Free Software
 Foundation, Inc.
 
 @quotation
diff --git a/doc/misc/vip.texi b/doc/misc/vip.texi
index 9d6060f..7d43560 100644
--- a/doc/misc/vip.texi
+++ b/doc/misc/vip.texi
@@ -5,7 +5,7 @@
 @documentencoding UTF-8
 
 @copying
-Copyright @copyright{} 1987, 2001--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1987, 2001--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/viper.texi b/doc/misc/viper.texi
index ae122f5..1aa87a1 100644
--- a/doc/misc/viper.texi
+++ b/doc/misc/viper.texi
@@ -9,7 +9,7 @@
 @documentencoding UTF-8
 
 @copying
-Copyright @copyright{} 1995--1997, 2001--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 1995--1997, 2001--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/widget.texi b/doc/misc/widget.texi
index 8aca115..963fad1 100644
--- a/doc/misc/widget.texi
+++ b/doc/misc/widget.texi
@@ -9,7 +9,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 2000--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2000--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/wisent.texi b/doc/misc/wisent.texi
index dce853a..0d4e116 100644
--- a/doc/misc/wisent.texi
+++ b/doc/misc/wisent.texi
@@ -24,7 +24,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 1988--1993, 1995, 1998--2004, 2007, 2012--2014
+Copyright @copyright{} 1988--1993, 1995, 1998--2004, 2007, 2012--2015
 Free Software Foundation, Inc.
 
 @c Since we are both GNU manuals, we do not need to ack each other here.
diff --git a/doc/misc/woman.texi b/doc/misc/woman.texi
index 5a63d35..fe16dc5 100644
--- a/doc/misc/woman.texi
+++ b/doc/misc/woman.texi
@@ -15,7 +15,7 @@
 This file documents WoMan: A program to browse Unix manual pages `W.O.
 (without) man'.
 
-Copyright @copyright{} 2001--2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2001--2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/etc/images/README b/etc/images/README
index 0804ded..486aca9 100644
--- a/etc/images/README
+++ b/etc/images/README
@@ -27,15 +27,15 @@ File: mh-logo.xpm
 
 Files: splash.pbm, splash.xpm, gnus.pbm
   Author: Luis Fernandes 
-  Copyright (C) 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 Files: splash.png, splash.svg
   Author: Francesc Rocher 
-  Copyright (C) 2008-2014 Free Software Foundation, Inc.
+  Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 Files: checked.xpm, unchecked.xpm
   Author: Chong Yidong 
-  Copyright (C) 2010-2014 Free Software Foundation, Inc.
+  Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 
 * The following icons are from GTK+ 2.x. They are not part of Emacs, but
diff --git a/etc/images/checked.xpm b/etc/images/checked.xpm
index 1cc033a..0e01b4b 100644
--- a/etc/images/checked.xpm
+++ b/etc/images/checked.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-/* Copyright (C) 2010-2014 Free Software Foundation, Inc.
+/* Copyright (C) 2010-2015 Free Software Foundation, Inc.
  *
  * Author: Chong Yidong 
  *
diff --git a/etc/images/gnus/README b/etc/images/gnus/README
index ae78c9a..f886d9d 100644
--- a/etc/images/gnus/README
+++ b/etc/images/gnus/README
@@ -21,11 +21,11 @@ Files: catchup.pbm catchup.xpm cu-exit.pbm cu-exit.xpm
   unsubscribe.pbm unsubscribe.xpm uu-decode.pbm uu-decode.xpm
   uu-post.pbm uu-post.xpm
 Author: Luis Fernandes 
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 Files: gnus.png, gnus.svg
   Author: Francesc Rocher 
-  Copyright (C) 2008-2014 Free Software Foundation, Inc.
+  Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 
 * The following icons are from GNOME 2.x. They are not part of Emacs,
diff --git a/etc/images/gud/README b/etc/images/gud/README
index 708daad..554ecc7 100644
--- a/etc/images/gud/README
+++ b/etc/images/gud/README
@@ -31,7 +31,7 @@ their copyright assignment included the icons.
 The following icons are converted from the Insight Windows style icon
 set in src/gdb/gdbtk/library/images2.
 
-Copyright (C) 2002-2014 Free Software Foundation, Inc.
+Copyright (C) 2002-2015 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
 
   cont.pbm and cont.xpm were converted from continue.gif
@@ -47,7 +47,7 @@ License: GNU General Public License version 3 or later (see COPYING)
 The following icons are created from the Insight Windows style icon
 set in src/gdb/gdbtk/library/images2.
 
-Copyright (C) 2002-2014 Free Software Foundation, Inc.
+Copyright (C) 2002-2015 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
 
   rcont.xpm rfinish.xpm
diff --git a/etc/images/icons/README b/etc/images/icons/README
index 6599915..70979dd 100644
--- a/etc/images/icons/README
+++ b/etc/images/icons/README
@@ -13,7 +13,7 @@ Files: hicolor/16x16/apps/emacs22.png hicolor/24x24/apps/emacs22.png
        hicolor/32x32/apps/emacs22.png hicolor/48x48/apps/emacs22.png
 
 Author: Andrew Zhilin 
-Copyright (C) 2005-2014 Free Software Foundation, Inc.
+Copyright (C) 2005-2015 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
 
 Files: allout-widgets-dark-bg/closed.png
@@ -62,5 +62,5 @@ Files: allout-widgets-dark-bg/closed.png
        allout-widgets-light-bg/through-descender.xpm
 
 Author: Ken Manheimer 
-Copyright (C) 2011-2014 Free Software Foundation, Inc.
+Copyright (C) 2011-2015 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/images/mh-logo.xpm b/etc/images/mh-logo.xpm
index 158dcbb..657bd46 100644
--- a/etc/images/mh-logo.xpm
+++ b/etc/images/mh-logo.xpm
@@ -1,7 +1,7 @@
 /* XPM */
 /* MH-E Logo
  *
- * Copyright (C) 2003-2014 Free Software Foundation, Inc.
+ * Copyright (C) 2003-2015 Free Software Foundation, Inc.
  *
  * Author: Satyaki Das
  *
diff --git a/etc/images/splash.xpm b/etc/images/splash.xpm
index 6ff2386..e53cd68 100644
--- a/etc/images/splash.xpm
+++ b/etc/images/splash.xpm
@@ -1,7 +1,7 @@
 /* XPM */
 /* Gnu Emacs Logo
  *
- * Copyright (C) 2001-2014 Free Software Foundation, Inc.
+ * Copyright (C) 2001-2015 Free Software Foundation, Inc.
  *
  * Author: Luis Fernandes 
  *
diff --git a/etc/images/unchecked.xpm b/etc/images/unchecked.xpm
index 815d4c5..e2104d7 100644
--- a/etc/images/unchecked.xpm
+++ b/etc/images/unchecked.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-/* Copyright (C) 2010-2014 Free Software Foundation, Inc.
+/* Copyright (C) 2010-2015 Free Software Foundation, Inc.
  *
  * Author: Chong Yidong 
  *
diff --git a/etc/refcards/README b/etc/refcards/README
index 8dae9ad..57069ad 100644
--- a/etc/refcards/README
+++ b/etc/refcards/README
@@ -32,7 +32,7 @@ it is reproduced here for convenience.
 
 File: gnus-logo.eps, gnus-logo.pdf
   Author: Luis Fernandes 
-  Copyright (C) 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 2001-2015 Free Software Foundation, Inc.
   License: GNU General Public License version 3 or later (see COPYING)
 
 
diff --git a/etc/refcards/gnus-refcard.tex b/etc/refcards/gnus-refcard.tex
index 6b46834..fb8890e 100644
--- a/etc/refcards/gnus-refcard.tex
+++ b/etc/refcards/gnus-refcard.tex
@@ -120,7 +120,7 @@
 %% Gnus logo by Luis Fernandes.
 \newcommand{\Copyright}{%
   \begin{center}
-    Copyright \copyright\ 1995, 2000, 2002--2014 Free Software Foundation, Inc.\\*
+    Copyright \copyright\ 1995, 2000, 2002--2015 Free Software Foundation, Inc.\\*
   \end{center}
 
   Permission is granted to make and distribute copies of this reference
diff --git a/etc/refcards/ru-refcard.tex b/etc/refcards/ru-refcard.tex
index 18b98ba..12ce716 100644
--- a/etc/refcards/ru-refcard.tex
+++ b/etc/refcards/ru-refcard.tex
@@ -22,7 +22,7 @@
 \setlength{\ColThreeWidth}{25mm}
 
 \newcommand{\versionemacs}[0]{24} % version of Emacs this is for
-\newcommand{\cyear}[0]{2014}       % copyright year
+\newcommand{\cyear}[0]{2015}       % copyright year
 
 \newcommand\shortcopyrightnotice[0]{\vskip 1ex plus 2 fill
   \centerline{\footnotesize \copyright\ \cyear\ Free Software Foundation, Inc.
diff --git a/etc/tutorials/TUTORIAL.cn b/etc/tutorials/TUTORIAL.cn
index 2106252..8dc0294 100644
--- a/etc/tutorials/TUTORIAL.cn
+++ b/etc/tutorials/TUTORIAL.cn
@@ -1016,7 +1016,7 @@ using, writing, and sharing free software!
 
 æœ¬ç¯‡æŒ‡å—æ˜¯ GNU Emacs 的一部分,并å…许在下列æ¡ä»¶çš„约æŸä¸‹å‘行其拷è´ï¼š
 
-   Copyright (C) 1985, 1996, 1998, 2001-2014 Free Software Foundation,
+   Copyright (C) 1985, 1996, 1998, 2001-2015 Free Software Foundation,
    Inc.
 
    本文件为 GNU Emacs 的一部分。
diff --git a/etc/tutorials/TUTORIAL.he b/etc/tutorials/TUTORIAL.he
index 9a4430b..b391098 100644
--- a/etc/tutorials/TUTORIAL.he
+++ b/etc/tutorials/TUTORIAL.he
@@ -996,7 +996,7 @@ find-file.
 גירסה זו של השיעור ×”×™× ×” חלק מחבילת GNU Emacs. ×”×™× ×ž×•×’× ×ª בזכויות יוצרי×
 וניתנת להעתקה והפצת ×¢×•×ª×§×™× ×‘×ª× ××™× ×ž×¡×•×™×™×ž×™× ×›×“×œ×§×ž×Ÿ:
 
-                       Copyright (C) 2010-2014 Free Software Foundation, Inc.
+                       Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 â€GNU Emacs הינו תכנה חפשית; ×–×›×•×ª×›× ×œ×”×¤×™×¦×• ו\×ו לשנותו בכפוף לתנ××™
 הרשיון GNU General Public License, כפי ×©×”×•× ×™×•×¦× ×œ×ור ×¢"×™ Free
diff --git a/etc/tutorials/TUTORIAL.nl b/etc/tutorials/TUTORIAL.nl
index fef1dfb..8155ee4 100644
--- a/etc/tutorials/TUTORIAL.nl
+++ b/etc/tutorials/TUTORIAL.nl
@@ -1239,7 +1239,7 @@ Engels origineel van de copyrightmelding en condities:
 This version of the tutorial is a part of GNU Emacs.  It is copyrighted
 and comes with permission to distribute copies on certain conditions:
 
-  Copyright (C) 1985, 1996, 1998, 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 1985, 1996, 1998, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/etc/tutorials/TUTORIAL.ro b/etc/tutorials/TUTORIAL.ro
index 6783351..7bf675e 100644
--- a/etc/tutorials/TUTORIAL.ro
+++ b/etc/tutorials/TUTORIAL.ro
@@ -1082,7 +1082,7 @@ continuare noţita de copyright originală în limba engleză.
 This version of the tutorial, like GNU Emacs, is copyrighted, and
 comes with permission to distribute copies on certain conditions:
 
-Copyright (C) 1998, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1998, 2001-2015 Free Software Foundation, Inc.
 
    Permission is granted to anyone to make or distribute verbatim copies
    of this document as received, in any medium, provided that the
diff --git a/etc/tutorials/TUTORIAL.sl b/etc/tutorials/TUTORIAL.sl
index 65df52e..8fb5113 100644
--- a/etc/tutorials/TUTORIAL.sl
+++ b/etc/tutorials/TUTORIAL.sl
@@ -1119,7 +1119,7 @@ Emacs. V slovenÅ¡Äino ga je prevedel Primož Peterlin.
 To besedilo, kot sam GNU Emacs, je avtorsko delo, in njegovo
 razmnoževanje in razširjanje je dovoljeno pod naslednjimi pogoji:
 
-Copyright © 1985, 1996, 1998, 2001-2014 Free Software Foundation, Inc.
+Copyright © 1985, 1996, 1998, 2001-2015 Free Software Foundation, Inc.
 
   Ta datoteka je del paketa GNU Emacs.
 
diff --git a/lib-src/rcs2log b/lib-src/rcs2log
index 0fcbdfb..2427603 100755
--- a/lib-src/rcs2log
+++ b/lib-src/rcs2log
@@ -20,7 +20,7 @@
 # along with this program.  If not, see .
 
 
-Copyright='Copyright (C) 2014 Free Software Foundation, Inc.
+Copyright='Copyright (C) 2015 Free Software Foundation, Inc.
 This program comes with NO WARRANTY, to the extent permitted by law.
 You may redistribute copies of this program
 under the terms of the GNU General Public License.
diff --git a/lib/getopt_.h b/lib/getopt_.h
index 0795ac1..6c719ee 100644
--- a/lib/getopt_.h
+++ b/lib/getopt_.h
@@ -130,7 +130,7 @@
 
 /* The definition of _GL_ARG_NONNULL is copied here.  */
 /* A C macro for declaring that specific arguments must not be NULL.
-   Copyright (C) 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index 4fe44a9..8e65686 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -720,7 +720,7 @@ on the remote host.")
 (defconst tramp-perl-encode
   "%s -e '
 # This script contributed by Juanma Barranquero .
-# Copyright (C) 2002-2014 Free Software Foundation, Inc.
+# Copyright (C) 2002-2015 Free Software Foundation, Inc.
 use strict;
 
 my %%trans = do {
@@ -758,7 +758,7 @@ This string is passed to `format', so percent characters need to be doubled.")
 (defconst tramp-perl-decode
   "%s -e '
 # This script contributed by Juanma Barranquero .
-# Copyright (C) 2002-2014 Free Software Foundation, Inc.
+# Copyright (C) 2002-2015 Free Software Foundation, Inc.
 use strict;
 
 my %%trans = do {
diff --git a/msdos/README b/msdos/README
index eba0743..f036415 100644
--- a/msdos/README
+++ b/msdos/README
@@ -10,7 +10,7 @@ The files emacs.ico and emacs.pif are for using the DJGPP version on
 Windows 3.X.  Since these are binary files, their copyright notice is
 reproduced here:
 
-# Copyright (C) 1993, 2002-2014 Free Software Foundation, Inc.
+# Copyright (C) 1993, 2002-2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/msdos/autogen/Makefile.in b/msdos/autogen/Makefile.in
index 7b7ff8e..d545d41 100644
--- a/msdos/autogen/Makefile.in
+++ b/msdos/autogen/Makefile.in
@@ -13,7 +13,7 @@
 
 @SET_MAKE@
 
-# Copyright (C) 2002-2014 Free Software Foundation, Inc.
+# Copyright (C) 2002-2015 Free Software Foundation, Inc.
 #
 # This file is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -36,7 +36,7 @@
 # Generated by gnulib-tool.
 # Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=close --avoid=dup --avoid=fchdir --avoid=fstat --avoid=malloc-posix --avoid=msvc-inval --avoid=msvc-nothrow --avoid=open --avoid=openat-die --avoid=opendir --avoid=raise --avoid=save-cwd --avoid=select --avoid=sigprocmask --avoid=sys_types --avoid=threadlib --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt byteswap c-ctype c-strcase careadlinkat close-stream count-one-bits count-trailing-zeros crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dtotimespec dup2 environ execinfo faccessat fcntl fcntl-h fdatasync fdopendir filemode fstatat fsync getloadavg getopt-gnu gettime gettimeofday intprops largefile lstat manywarnings memrchr mkostemp mktime pipe2 pselect pthread_sigmask putenv qacl readlink readlinkat sig2str socklen stat-time stdalign stdarg stdbool stdio strftime strtoimax strtoumax symlink sys_stat sys_time time timer-time timespec-add timespec-sub unsetenv utimens warnings
 
-# Copyright (C) 2002-2014 Free Software Foundation, Inc.
+# Copyright (C) 2002-2015 Free Software Foundation, Inc.
 #
 # This file is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
diff --git a/msdos/depfiles.bat b/msdos/depfiles.bat
index ef995cb..5b46429 100644
--- a/msdos/depfiles.bat
+++ b/msdos/depfiles.bat
@@ -1,7 +1,7 @@
 @echo off
 rem   ----------------------------------------------------------------------
 rem   Auxiliary script for MSDOS, run by ../config.bat
-rem   Copyright (C) 2011-2014 Free Software Foundation, Inc.
+rem   Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 rem   This file is part of GNU Emacs.
 
diff --git a/msdos/sed2v2.inp b/msdos/sed2v2.inp
index 4b33f52..63a9dfc 100644
--- a/msdos/sed2v2.inp
+++ b/msdos/sed2v2.inp
@@ -31,7 +31,7 @@
 #ifndef MSDOS\
 #define MSDOS\
 #endif
-/^#undef COPYRIGHT *$/s/^.*$/#define COPYRIGHT "Copyright (C) 2014 Free Software Foundation, Inc."/
+/^#undef COPYRIGHT *$/s/^.*$/#define COPYRIGHT "Copyright (C) 2015 Free Software Foundation, Inc."/
 /^#undef DIRECTORY_SEP *$/s!^.*$!#define DIRECTORY_SEP '/'!
 /^#undef DOS_NT *$/s/^.*$/#define DOS_NT/
 /^#undef FLOAT_CHECK_DOMAIN *$/s/^.*$/#define FLOAT_CHECK_DOMAIN/
diff --git a/nt/config.nt b/nt/config.nt
index ed39dc3..c3e4651 100644
--- a/nt/config.nt
+++ b/nt/config.nt
@@ -72,7 +72,7 @@ along with GNU Emacs.  If not, see .  */
 #define CLASH_DETECTION 1
 
 /* Short copyright string for this version of Emacs. */
-#define COPYRIGHT "Copyright (C) 2014 Free Software Foundation, Inc."
+#define COPYRIGHT "Copyright (C) 2015 Free Software Foundation, Inc."
 
 /* Define to one of '_getb67', 'GETB67', 'getb67' for Cray-2 and Cray-YMP
    systems. This function is required for 'alloca.c' support on those systems.
diff --git a/nt/configure.bat b/nt/configure.bat
index 5460f4c..f6ac8fc 100755
--- a/nt/configure.bat
+++ b/nt/configure.bat
@@ -1,7 +1,7 @@
 @echo off
 rem   ----------------------------------------------------------------------
 rem   Configuration script for MS Windows operating systems
-rem   Copyright (C) 1999-2014 Free Software Foundation, Inc.
+rem   Copyright (C) 1999-2015 Free Software Foundation, Inc.
 
 rem   This file is part of GNU Emacs.
 
diff --git a/nt/emacs.rc b/nt/emacs.rc
index 2d007ba..b45ef6b 100644
--- a/nt/emacs.rc
+++ b/nt/emacs.rc
@@ -31,7 +31,7 @@ BEGIN
 	    VALUE "FileDescription", "GNU Emacs: The extensible self-documenting text editor\0"
 	    VALUE "FileVersion", "24, 4, 50, 0\0"
 	    VALUE "InternalName", "Emacs\0"
-	    VALUE "LegalCopyright", "Copyright (C) 2001-2014\0"
+	    VALUE "LegalCopyright", "Copyright (C) 2001-2015\0"
 	    VALUE "OriginalFilename", "emacs.exe"
 	    VALUE "ProductName", "Emacs\0"
 	    VALUE "ProductVersion", "24, 4, 50, 0\0"
diff --git a/nt/emacsclient.rc b/nt/emacsclient.rc
index 7e5d2e4..ba2f490 100644
--- a/nt/emacsclient.rc
+++ b/nt/emacsclient.rc
@@ -25,7 +25,7 @@ BEGIN
 	    VALUE "FileDescription", "GNU EmacsClient: Client for the extensible self-documenting text editor\0"
 	    VALUE "FileVersion", "24, 4, 50, 0\0"
 	    VALUE "InternalName", "EmacsClient\0"
-	    VALUE "LegalCopyright", "Copyright (C) 2001-2014\0"
+	    VALUE "LegalCopyright", "Copyright (C) 2001-2015\0"
 	    VALUE "OriginalFilename", "emacsclientw.exe"
 	    VALUE "ProductName", "EmacsClient\0"
 	    VALUE "ProductVersion", "24, 4, 50, 0\0"
diff --git a/nt/icons/README b/nt/icons/README
index 4d3c206..82c4db2 100644
--- a/nt/icons/README
+++ b/nt/icons/README
@@ -8,7 +8,7 @@ License: GNU General Public License version 3 or later
 
 File: emacs22.ico
 Author: Andrew Zhilin
-Copyright (C) 2005-2014 Free Software Foundation, Inc.
+Copyright (C) 2005-2015 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
 
 
@@ -17,7 +17,7 @@ Files: gnu2a32.ico gnu2a32t.ico gnu2b48.ico gnu2b48t.ico
        gnu5w32.ico gnu5w32t.ico gnu6w48.ico gnu6w48t.ico
        gnu7.ico    gnu8.ico     gnu9.ico
 Author: Rob Davenport 
-Copyright (C) 1999, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1999, 2001-2015 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
 
   

commit 732fd4c7e11debd61c97eaaba3038d61e6ec7024
Author: Paul Eggert 
Date:   Thu Jan 1 09:18:06 2015 -0800

    Update copyright year to 2015
    
    Run admin/update-copyright.

diff --git a/.gitignore b/.gitignore
index cbe1309..d326a35 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,6 @@
 # Files that Git should ignore in the Emacs source directory.
 
-# Copyright 2009-2014 Free Software Foundation, Inc.
+# Copyright 2009-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/ChangeLog b/ChangeLog
index 5ae8b63..714be97 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -13729,7 +13729,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1993-1999, 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 1993-1999, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/GNUmakefile b/GNUmakefile
index 22c57f5..0d4501d 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -1,6 +1,6 @@
 # Build Emacs from a fresh tarball or version-control checkout.
 
-# Copyright (C) 2011-2014 Free Software Foundation, Inc.
+# Copyright (C) 2011-2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
diff --git a/INSTALL b/INSTALL
index 2f4f417..178e725 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,5 +1,6 @@
 GNU Emacs Installation Guide
-Copyright (C) 1992, 1994, 1996-1997, 2000-2014 Free Software Foundation, Inc.
+Copyright (C) 1992, 1994, 1996-1997, 2000-2015 Free Software Foundation,
+Inc.
 See the end of the file for license conditions.
 
 
diff --git a/INSTALL.REPO b/INSTALL.REPO
index ecf5bc0..e26d367 100644
--- a/INSTALL.REPO
+++ b/INSTALL.REPO
@@ -1,4 +1,4 @@
-Copyright (C) 2002-2014 Free Software Foundation, Inc.
+Copyright (C) 2002-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/Makefile.in b/Makefile.in
index 4391c2c..4987cf6 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 1992-2014 Free Software Foundation, Inc.
+# Copyright (C) 1992-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/README b/README
index bc0fb24..87335e7 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/admin/ChangeLog b/admin/ChangeLog
index 82974dc..6e034f2 100644
--- a/admin/ChangeLog
+++ b/admin/ChangeLog
@@ -2249,7 +2249,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/admin/README b/admin/README
index 6a5fce6..786c502 100644
--- a/admin/README
+++ b/admin/README
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/admin/admin.el b/admin/admin.el
index 48e083d..fcdb6cb 100644
--- a/admin/admin.el
+++ b/admin/admin.el
@@ -1,6 +1,6 @@
 ;;; admin.el --- utilities for Emacs administration
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/admin/alloc-colors.c b/admin/alloc-colors.c
index a63e1ba..777c048 100644
--- a/admin/alloc-colors.c
+++ b/admin/alloc-colors.c
@@ -1,6 +1,6 @@
 /* Allocate X colors.  Used for testing with dense colormaps.
 
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/admin/build-configs b/admin/build-configs
index 6a36941..55530b3 100755
--- a/admin/build-configs
+++ b/admin/build-configs
@@ -1,7 +1,7 @@
 #! /usr/bin/perl
 # Build Emacs in several different configurations.
 
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/admin/bzrmerge.el b/admin/bzrmerge.el
index 924033b..7d4cd19 100644
--- a/admin/bzrmerge.el
+++ b/admin/bzrmerge.el
@@ -1,6 +1,6 @@
 ;;; bzrmerge.el --- help merge one Emacs bzr branch to another
 
-;; Copyright (C) 2010-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier 
 ;; Keywords: maint
diff --git a/admin/charsets/mapfiles/README b/admin/charsets/mapfiles/README
index 15ec320..a05e2da 100644
--- a/admin/charsets/mapfiles/README
+++ b/admin/charsets/mapfiles/README
@@ -1,4 +1,4 @@
-Copyright (C) 2009-2014 Free Software Foundation, Inc.
+Copyright (C) 2009-2015 Free Software Foundation, Inc.
 Copyright (C) 2009, 2010, 2011
   National Institute of Advanced Industrial Science and Technology (AIST)
   Registration Number H13PRO009
diff --git a/admin/cus-test.el b/admin/cus-test.el
index b60eac2..c7faedb 100644
--- a/admin/cus-test.el
+++ b/admin/cus-test.el
@@ -1,6 +1,6 @@
 ;;; cus-test.el --- tests for custom types and load problems
 
-;; Copyright (C) 1998, 2000, 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 2000, 2002-2015 Free Software Foundation, Inc.
 
 ;; Author: Markus Rost 
 ;; Maintainer: Markus Rost 
diff --git a/admin/diff-tar-files b/admin/diff-tar-files
index 9bdc91f..6a8824f 100755
--- a/admin/diff-tar-files
+++ b/admin/diff-tar-files
@@ -1,6 +1,6 @@
 #! /bin/sh
 
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/admin/find-gc.el b/admin/find-gc.el
index 83eb26e..5c6a45b 100644
--- a/admin/find-gc.el
+++ b/admin/find-gc.el
@@ -1,6 +1,6 @@
 ;;; find-gc.el --- detect functions that call the garbage collector
 
-;; Copyright (C) 1992, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1992, 2001-2015 Free Software Foundation, Inc.
 
 ;; Maintainer: emacs-devel@gnu.org
 
diff --git a/admin/grammars/Makefile.in b/admin/grammars/Makefile.in
index 827240a..7b98dab 100644
--- a/admin/grammars/Makefile.in
+++ b/admin/grammars/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-## Copyright (C) 2013-2014 Free Software Foundation, Inc.
+## Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ## This file is part of GNU Emacs.
 
diff --git a/admin/grammars/c.by b/admin/grammars/c.by
index 0fd8a33..f224846 100644
--- a/admin/grammars/c.by
+++ b/admin/grammars/c.by
@@ -1,5 +1,5 @@
 ;;; c.by -- LL grammar for C/C++ language specification
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Eric M. Ludlam 
 ;;         David Ponce 
diff --git a/admin/grammars/grammar.wy b/admin/grammars/grammar.wy
index 4605e3c..fcb36fd 100644
--- a/admin/grammars/grammar.wy
+++ b/admin/grammars/grammar.wy
@@ -1,6 +1,6 @@
 ;;; semantic-grammar.wy -- LALR grammar of Semantic input grammars
 ;;
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: David Ponce 
 ;; Maintainer: David Ponce 
diff --git a/admin/grammars/java-tags.wy b/admin/grammars/java-tags.wy
index 9ff27f3..bc22f4f 100644
--- a/admin/grammars/java-tags.wy
+++ b/admin/grammars/java-tags.wy
@@ -1,6 +1,6 @@
 ;;; java-tags.wy -- Semantic LALR grammar for Java
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: David Ponce 
 ;; Maintainer: David Ponce 
diff --git a/admin/grammars/js.wy b/admin/grammars/js.wy
index 91dbff2..1579b07 100644
--- a/admin/grammars/js.wy
+++ b/admin/grammars/js.wy
@@ -1,6 +1,6 @@
 ;;; javascript-jv.wy -- LALR grammar for Javascript
 
-;; Copyright (C) 2005-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2015 Free Software Foundation, Inc.
 ;; Copyright (C) 1998-2011 Ecma International.
 
 ;; Author: Joakim Verona
diff --git a/admin/grammars/make.by b/admin/grammars/make.by
index 7fc3951..be3cc43 100644
--- a/admin/grammars/make.by
+++ b/admin/grammars/make.by
@@ -1,6 +1,6 @@
 ;;; make.by -- BY notation for Makefiles.
 
-;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
 ;;
 ;; Author: Eric M. Ludlam 
 ;;         David Ponce 
diff --git a/admin/grammars/python.wy b/admin/grammars/python.wy
index 330264d..9b37a8d 100644
--- a/admin/grammars/python.wy
+++ b/admin/grammars/python.wy
@@ -1,6 +1,6 @@
 ;;; python.wy -- LALR grammar for Python
 
-;; Copyright (C) 2002-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
 ;; Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
 ;; 2009, 2010 Python Software Foundation; All Rights Reserved
 
diff --git a/admin/grammars/scheme.by b/admin/grammars/scheme.by
index cceec09..75f536f 100644
--- a/admin/grammars/scheme.by
+++ b/admin/grammars/scheme.by
@@ -1,6 +1,6 @@
 ;;; scheme.by -- Scheme BNF language specification
 
-;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
diff --git a/admin/grammars/srecode-template.wy b/admin/grammars/srecode-template.wy
index d4dd2ad..32ef7ea 100644
--- a/admin/grammars/srecode-template.wy
+++ b/admin/grammars/srecode-template.wy
@@ -1,6 +1,6 @@
 ;;; srecode-template.wy --- Semantic Recoder Template parser
 
-;; Copyright (C) 2005-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2005-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric Ludlam 
 ;; Keywords: syntax
diff --git a/admin/make-emacs b/admin/make-emacs
index 17d1cdc..f0c5370 100755
--- a/admin/make-emacs
+++ b/admin/make-emacs
@@ -2,7 +2,7 @@
 # Build Emacs with various options for profiling, debugging,
 # with and without warnings enabled etc.
 
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/admin/merge-gnulib b/admin/merge-gnulib
index 6c0dffb..cfc1a34 100755
--- a/admin/merge-gnulib
+++ b/admin/merge-gnulib
@@ -4,7 +4,7 @@
 #
 #	admin/merge-gnulib
 
-# Copyright 2012-2014 Free Software Foundation, Inc.
+# Copyright 2012-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/admin/notes/copyright b/admin/notes/copyright
index c5452c3..5ffa9f8 100644
--- a/admin/notes/copyright
+++ b/admin/notes/copyright
@@ -1,4 +1,4 @@
-Copyright (C) 2007-2014 Free Software Foundation, Inc.
+Copyright (C) 2007-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/admin/notes/font-backend b/admin/notes/font-backend
index 5c36cf0..03663d3 100644
--- a/admin/notes/font-backend
+++ b/admin/notes/font-backend
@@ -1,4 +1,4 @@
-Copyright (C) 2002-2014 Free Software Foundation, Inc.
+Copyright (C) 2002-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/admin/notes/hydra b/admin/notes/hydra
index ce20474..7f8615d 100644
--- a/admin/notes/hydra
+++ b/admin/notes/hydra
@@ -1,6 +1,6 @@
 -*- outline -*-
 
-Copyright (C) 2013-2014 Free Software Foundation, Inc.
+Copyright (C) 2013-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 NOTES FOR EMACS CONTINUOUS BUILD ON HYDRA
diff --git a/admin/notes/lel-TODO b/admin/notes/lel-TODO
index 4a4ccb5..c59e920 100644
--- a/admin/notes/lel-TODO
+++ b/admin/notes/lel-TODO
@@ -1,6 +1,6 @@
 Some lisp/emacs-lisp/ Features and Where They Are Documented
 
-Copyright (C) 2007-2014 Free Software Foundation, Inc.
+Copyright (C) 2007-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/admin/notes/multi-tty b/admin/notes/multi-tty
index f67911d..c547e14 100644
--- a/admin/notes/multi-tty
+++ b/admin/notes/multi-tty
@@ -1,6 +1,6 @@
 -*- coding: utf-8; mode: text; -*-
 
-Copyright (C) 2007-2014 Free Software Foundation, Inc.
+Copyright (C) 2007-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 From README.multi-tty in the multi-tty branch.
diff --git a/admin/notes/unicode b/admin/notes/unicode
index cff619f..79930c2 100644
--- a/admin/notes/unicode
+++ b/admin/notes/unicode
@@ -1,6 +1,6 @@
                                             -*-mode: text; coding: utf-8;-*-
 
-Copyright (C) 2002-2014 Free Software Foundation, Inc.
+Copyright (C) 2002-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Importing a new Unicode Standard version into Emacs
diff --git a/admin/notes/www b/admin/notes/www
index 4d092ca..27aabe0 100644
--- a/admin/notes/www
+++ b/admin/notes/www
@@ -1,6 +1,6 @@
 -*- outline -*-
 
-Copyright (C) 2013-2014 Free Software Foundation, Inc.
+Copyright (C) 2013-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 NOTES FOR EMACS WWW PAGES
diff --git a/admin/nt/README-UNDUMP.W32 b/admin/nt/README-UNDUMP.W32
index 2859140..f210556 100644
--- a/admin/nt/README-UNDUMP.W32
+++ b/admin/nt/README-UNDUMP.W32
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 			   Emacs for Windows
diff --git a/admin/nt/README-ftp-server b/admin/nt/README-ftp-server
index 5f5b4a9..eaee7cb 100644
--- a/admin/nt/README-ftp-server
+++ b/admin/nt/README-ftp-server
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 		      Precompiled Distributions of
diff --git a/admin/quick-install-emacs b/admin/quick-install-emacs
index f29d1cb..954b03a 100755
--- a/admin/quick-install-emacs
+++ b/admin/quick-install-emacs
@@ -1,7 +1,7 @@
 #!/bin/sh
 ### quick-install-emacs --- do a halfway-decent job of installing emacs quickly
 
-## Copyright (C) 2001-2014 Free Software Foundation, Inc.
+## Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 ## Author: Miles Bader 
 
diff --git a/admin/unidata/Makefile.in b/admin/unidata/Makefile.in
index 26c91bd..9781cd5 100644
--- a/admin/unidata/Makefile.in
+++ b/admin/unidata/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 2012-2014 Free Software Foundation, Inc.
+# Copyright (C) 2012-2015 Free Software Foundation, Inc.
 
 # Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
 #   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/admin/unidata/unidata-gen.el b/admin/unidata/unidata-gen.el
index fb9b6dc..5e0e93c 100644
--- a/admin/unidata/unidata-gen.el
+++ b/admin/unidata/unidata-gen.el
@@ -1,6 +1,6 @@
 ;; unidata-gen.el -- Create files containing character property data.
 
-;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
 
 ;; Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
diff --git a/admin/unidata/uvs.el b/admin/unidata/uvs.el
index 7559a56..63d429a 100644
--- a/admin/unidata/uvs.el
+++ b/admin/unidata/uvs.el
@@ -1,6 +1,6 @@
 ;;; uvs.el --- utility for UVS (format 14) cmap subtables in OpenType fonts.
 
-;; Copyright (C) 2014  Free Software Foundation, Inc.
+;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
 
 ;; Author: YAMAMOTO Mitsuharu 
 
diff --git a/admin/update-copyright b/admin/update-copyright
index 5612d7f..f1d6524 100755
--- a/admin/update-copyright
+++ b/admin/update-copyright
@@ -7,7 +7,7 @@
 # By default, this script uses the local-time calendar year.
 # Set the UPDATE_COPYRIGHT_YEAR environment variable to override the default.
 
-# Copyright 2013-2014 Free Software Foundation, Inc.
+# Copyright 2013-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/admin/update_autogen b/admin/update_autogen
index d9d34fa..ad7eb57 100755
--- a/admin/update_autogen
+++ b/admin/update_autogen
@@ -1,7 +1,7 @@
 #!/bin/bash
 ### update_autogen - update some auto-generated files in the Emacs tree
 
-## Copyright (C) 2011-2014 Free Software Foundation, Inc.
+## Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ## Author: Glenn Morris 
 
diff --git a/autogen.sh b/autogen.sh
index 30e1877..0d367d2 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -1,7 +1,7 @@
 #!/bin/sh
 ### autogen.sh - tool to help build Emacs from a repository checkout
 
-## Copyright (C) 2011-2014 Free Software Foundation, Inc.
+## Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ## Author: Glenn Morris 
 ## Maintainer: emacs-devel@gnu.org
diff --git a/build-aux/git-hooks/commit-msg b/build-aux/git-hooks/commit-msg
index 9b6179e..31df5ce 100755
--- a/build-aux/git-hooks/commit-msg
+++ b/build-aux/git-hooks/commit-msg
@@ -1,7 +1,7 @@
 #!/bin/sh
 # Check the format of GNU Emacs change log entries.
 
-# Copyright 2014 Free Software Foundation, Inc.
+# Copyright 2014-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/build-aux/git-hooks/pre-commit b/build-aux/git-hooks/pre-commit
index c24f9bb..d050c40 100755
--- a/build-aux/git-hooks/pre-commit
+++ b/build-aux/git-hooks/pre-commit
@@ -1,7 +1,7 @@
 #!/bin/sh
 # Check file names in git commits for GNU Emacs.
 
-# Copyright 2014 Free Software Foundation, Inc.
+# Copyright 2014-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/build-aux/make-info-dir b/build-aux/make-info-dir
index 3f92738..5b37cd6 100755
--- a/build-aux/make-info-dir
+++ b/build-aux/make-info-dir
@@ -2,7 +2,7 @@
 
 ### make-info-dir - create info/dir, for systems without install-info
 
-## Copyright (C) 2013-2014 Free Software Foundation, Inc.
+## Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 ## Author: Glenn Morris 
 ## Maintainer: emacs-devel@gnu.org
diff --git a/build-aux/move-if-change b/build-aux/move-if-change
index 88d9574..3cd87a9 100755
--- a/build-aux/move-if-change
+++ b/build-aux/move-if-change
@@ -8,7 +8,7 @@ VERSION='2012-01-06 07:23'; # UTC
 # If you change this file with Emacs, please let the write hook
 # do its job.  Otherwise, update this string manually.
 
-# Copyright (C) 2002-2014 Free Software Foundation, Inc.
+# Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
diff --git a/build-aux/msys-to-w32 b/build-aux/msys-to-w32
index 4c92cc9..a8394d7 100755
--- a/build-aux/msys-to-w32
+++ b/build-aux/msys-to-w32
@@ -3,7 +3,7 @@
 # MS-Windows format.
 # Status is zero if successful, nonzero otherwise.
 
-# Copyright (C) 2013-2014 Free Software Foundation, Inc.
+# Copyright (C) 2013-2015 Free Software Foundation, Inc.
 
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
diff --git a/build-aux/snippet/arg-nonnull.h b/build-aux/snippet/arg-nonnull.h
index 9ee8b15..0d55e2b 100644
--- a/build-aux/snippet/arg-nonnull.h
+++ b/build-aux/snippet/arg-nonnull.h
@@ -1,5 +1,5 @@
 /* A C macro for declaring that specific arguments must not be NULL.
-   Copyright (C) 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published
diff --git a/build-aux/snippet/c++defs.h b/build-aux/snippet/c++defs.h
index 67b1233..585b38a 100644
--- a/build-aux/snippet/c++defs.h
+++ b/build-aux/snippet/c++defs.h
@@ -1,5 +1,5 @@
 /* C++ compatible function declaration macros.
-   Copyright (C) 2010-2014 Free Software Foundation, Inc.
+   Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published
diff --git a/build-aux/snippet/warn-on-use.h b/build-aux/snippet/warn-on-use.h
index 1c4d7bd..90f4985 100644
--- a/build-aux/snippet/warn-on-use.h
+++ b/build-aux/snippet/warn-on-use.h
@@ -1,5 +1,5 @@
 /* A C macro for emitting warnings if a function is used.
-   Copyright (C) 2010-2014 Free Software Foundation, Inc.
+   Copyright (C) 2010-2015 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published
diff --git a/build-aux/update-copyright b/build-aux/update-copyright
index 90624e9..308fbf1 100755
--- a/build-aux/update-copyright
+++ b/build-aux/update-copyright
@@ -5,7 +5,7 @@ eval '(exit $?0)' && eval 'exec perl -wS -0777 -pi "$0" ${1+"$@"}'
 
 my $VERSION = '2013-01-03.09:41'; # UTC
 
-# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+# Copyright (C) 2009-2015 Free Software Foundation, Inc.
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
diff --git a/build-aux/update-subdirs b/build-aux/update-subdirs
index 3117113..d544b22 100755
--- a/build-aux/update-subdirs
+++ b/build-aux/update-subdirs
@@ -1,7 +1,7 @@
 #!/bin/sh
 # Write into $1/subdirs.el a list of subdirs of directory $1.
 
-# Copyright (C) 1994-1995, 1997, 1999, 2001-2014 Free Software
+# Copyright (C) 1994-1995, 1997, 1999, 2001-2015 Free Software
 # Foundation, Inc.
 
 # This file is part of GNU Emacs.
diff --git a/configure.ac b/configure.ac
index 1d28161..947795a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,7 +4,7 @@ dnl 	autoconf
 dnl in the directory containing this script.
 dnl If you changed any AC_DEFINES, also run autoheader.
 dnl
-dnl Copyright (C) 1994-1996, 1999-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 1994-1996, 1999-2015 Free Software Foundation, Inc.
 dnl
 dnl  This file is part of GNU Emacs.
 dnl
diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog
index 2d4263a..50ea80b 100644
--- a/doc/emacs/ChangeLog
+++ b/doc/emacs/ChangeLog
@@ -10736,7 +10736,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1993-1999, 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 1993-1999, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/doc/emacs/Makefile.in b/doc/emacs/Makefile.in
index 5a91556..7b5d00f 100644
--- a/doc/emacs/Makefile.in
+++ b/doc/emacs/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 1994, 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1996-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/doc/emacs/abbrevs.texi b/doc/emacs/abbrevs.texi
index 4d46a5d..a3cb989 100644
--- a/doc/emacs/abbrevs.texi
+++ b/doc/emacs/abbrevs.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Abbrevs
diff --git a/doc/emacs/ack.texi b/doc/emacs/ack.texi
index c611dcd..500a98e 100644
--- a/doc/emacs/ack.texi
+++ b/doc/emacs/ack.texi
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8 -*-
 @c This is part of the Emacs manual.
-@c Copyright (C) 1994-1997, 1999-2014 Free Software Foundation, Inc.
+@c Copyright (C) 1994-1997, 1999-2015 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @node Acknowledgments
diff --git a/doc/emacs/anti.texi b/doc/emacs/anti.texi
index d0de906..def5411 100644
--- a/doc/emacs/anti.texi
+++ b/doc/emacs/anti.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 2005-2014 Free Software Foundation, Inc.
+@c Copyright (C) 2005-2015 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 
 @node Antinews
diff --git a/doc/emacs/arevert-xtra.texi b/doc/emacs/arevert-xtra.texi
index dcb73bc..32b5463 100644
--- a/doc/emacs/arevert-xtra.texi
+++ b/doc/emacs/arevert-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 2004-2014 Free Software Foundation, Inc.
+@c Copyright (C) 2004-2015 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included either in emacs-xtra.texi (when producing the
diff --git a/doc/emacs/basic.texi b/doc/emacs/basic.texi
index bec7774..2594608 100644
--- a/doc/emacs/basic.texi
+++ b/doc/emacs/basic.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Basic
diff --git a/doc/emacs/buffers.texi b/doc/emacs/buffers.texi
index f036d85..88a122c 100644
--- a/doc/emacs/buffers.texi
+++ b/doc/emacs/buffers.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Buffers
diff --git a/doc/emacs/building.texi b/doc/emacs/building.texi
index e1993e5..b0e6538 100644
--- a/doc/emacs/building.texi
+++ b/doc/emacs/building.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Building
diff --git a/doc/emacs/cal-xtra.texi b/doc/emacs/cal-xtra.texi
index 8286485..aa685d0 100644
--- a/doc/emacs/cal-xtra.texi
+++ b/doc/emacs/cal-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.  -*- coding: utf-8 -*-
-@c Copyright (C) 2004-2014 Free Software Foundation, Inc.
+@c Copyright (C) 2004-2015 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included either in emacs-xtra.texi (when producing the
diff --git a/doc/emacs/calendar.texi b/doc/emacs/calendar.texi
index 0722688..d3f3a55 100644
--- a/doc/emacs/calendar.texi
+++ b/doc/emacs/calendar.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.  -*- coding: utf-8 -*-
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Calendar/Diary
diff --git a/doc/emacs/cmdargs.texi b/doc/emacs/cmdargs.texi
index b438281..f724f77 100644
--- a/doc/emacs/cmdargs.texi
+++ b/doc/emacs/cmdargs.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Emacs Invocation
diff --git a/doc/emacs/commands.texi b/doc/emacs/commands.texi
index d9eba2d..fb77c77 100644
--- a/doc/emacs/commands.texi
+++ b/doc/emacs/commands.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @iftex
diff --git a/doc/emacs/custom.texi b/doc/emacs/custom.texi
index 9b78128..d36e15e 100644
--- a/doc/emacs/custom.texi
+++ b/doc/emacs/custom.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Customization
diff --git a/doc/emacs/dired-xtra.texi b/doc/emacs/dired-xtra.texi
index f8719e8..2b9ddae 100644
--- a/doc/emacs/dired-xtra.texi
+++ b/doc/emacs/dired-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 2004-2014 Free Software Foundation, Inc.
+@c Copyright (C) 2004-2015 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included either in emacs-xtra.texi (when producing the
diff --git a/doc/emacs/dired.texi b/doc/emacs/dired.texi
index c7dace6..141bb66 100644
--- a/doc/emacs/dired.texi
+++ b/doc/emacs/dired.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Dired
diff --git a/doc/emacs/display.texi b/doc/emacs/display.texi
index a5555d5..34f84e7 100644
--- a/doc/emacs/display.texi
+++ b/doc/emacs/display.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 
 @c See file emacs.texi for copying conditions.
diff --git a/doc/emacs/emerge-xtra.texi b/doc/emacs/emerge-xtra.texi
index bb39136..25bbcaa 100644
--- a/doc/emacs/emerge-xtra.texi
+++ b/doc/emacs/emerge-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 2004-2014 Free Software Foundation, Inc.
+@c Copyright (C) 2004-2015 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included either in emacs-xtra.texi (when producing the
diff --git a/doc/emacs/entering.texi b/doc/emacs/entering.texi
index f8ab4eb..fc9ea38 100644
--- a/doc/emacs/entering.texi
+++ b/doc/emacs/entering.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 2001-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @iftex
diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi
index ee80c49..196c6bb 100644
--- a/doc/emacs/files.texi
+++ b/doc/emacs/files.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 1999-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 1999-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Files
diff --git a/doc/emacs/fixit.texi b/doc/emacs/fixit.texi
index a5b571d..9c3f36a 100644
--- a/doc/emacs/fixit.texi
+++ b/doc/emacs/fixit.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Fixit
diff --git a/doc/emacs/fortran-xtra.texi b/doc/emacs/fortran-xtra.texi
index 79ea410..155e998 100644
--- a/doc/emacs/fortran-xtra.texi
+++ b/doc/emacs/fortran-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 2004-2014 Free Software Foundation, Inc.
+@c Copyright (C) 2004-2015 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included either in emacs-xtra.texi (when producing the
diff --git a/doc/emacs/frames.texi b/doc/emacs/frames.texi
index 538bcab..2ff000e 100644
--- a/doc/emacs/frames.texi
+++ b/doc/emacs/frames.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 1999-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 1999-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Frames
diff --git a/doc/emacs/glossary.texi b/doc/emacs/glossary.texi
index 9da83bb..a764c25 100644
--- a/doc/emacs/glossary.texi
+++ b/doc/emacs/glossary.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Glossary
diff --git a/doc/emacs/gnu.texi b/doc/emacs/gnu.texi
index 4eb3672..327ee3c 100644
--- a/doc/emacs/gnu.texi
+++ b/doc/emacs/gnu.texi
@@ -1,4 +1,4 @@
-@c Copyright (C) 1985-1987, 1993, 1995, 2001-2014 Free Software
+@c Copyright (C) 1985-1987, 1993, 1995, 2001-2015 Free Software
 @c Foundation, Inc.
 @c
 @c Permission is granted to anyone to make or distribute verbatim copies
diff --git a/doc/emacs/help.texi b/doc/emacs/help.texi
index c285733..29fee0e 100644
--- a/doc/emacs/help.texi
+++ b/doc/emacs/help.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Help
diff --git a/doc/emacs/indent.texi b/doc/emacs/indent.texi
index b254cfc..10cd131 100644
--- a/doc/emacs/indent.texi
+++ b/doc/emacs/indent.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Indentation
diff --git a/doc/emacs/killing.texi b/doc/emacs/killing.texi
index e258d1c..3092d34 100644
--- a/doc/emacs/killing.texi
+++ b/doc/emacs/killing.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 
diff --git a/doc/emacs/kmacro.texi b/doc/emacs/kmacro.texi
index 881c7ea..039358b 100644
--- a/doc/emacs/kmacro.texi
+++ b/doc/emacs/kmacro.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Keyboard Macros
diff --git a/doc/emacs/m-x.texi b/doc/emacs/m-x.texi
index b4385cb..c9ae559 100644
--- a/doc/emacs/m-x.texi
+++ b/doc/emacs/m-x.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node M-x
diff --git a/doc/emacs/macos.texi b/doc/emacs/macos.texi
index 2177ad4..045ca3a 100644
--- a/doc/emacs/macos.texi
+++ b/doc/emacs/macos.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 2000-2014 Free Software Foundation, Inc.
+@c Copyright (C) 2000-2015 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Mac OS / GNUstep
 @appendix Emacs and Mac OS / GNUstep
diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
index dd1c826..dec3aa9 100644
--- a/doc/emacs/maintaining.texi
+++ b/doc/emacs/maintaining.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual., Abbrevs, This is part of the Emacs manual., Top
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 1999-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 1999-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Maintaining
diff --git a/doc/emacs/makefile.w32-in b/doc/emacs/makefile.w32-in
index 297ec49..2fd64d1 100644
--- a/doc/emacs/makefile.w32-in
+++ b/doc/emacs/makefile.w32-in
@@ -1,6 +1,6 @@
 #### -*- Makefile -*- for the Emacs Manual
 
-# Copyright (C) 2003-2014 Free Software Foundation, Inc.
+# Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/doc/emacs/mark.texi b/doc/emacs/mark.texi
index e3cda04..c975f6e 100644
--- a/doc/emacs/mark.texi
+++ b/doc/emacs/mark.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Mark
diff --git a/doc/emacs/mini.texi b/doc/emacs/mini.texi
index a87aff0..2a86af3 100644
--- a/doc/emacs/mini.texi
+++ b/doc/emacs/mini.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Minibuffer
diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi
index 39b36cf..0431e84 100644
--- a/doc/emacs/misc.texi
+++ b/doc/emacs/misc.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @iftex
diff --git a/doc/emacs/modes.texi b/doc/emacs/modes.texi
index b21be99..0e8f46a 100644
--- a/doc/emacs/modes.texi
+++ b/doc/emacs/modes.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Modes
diff --git a/doc/emacs/msdog-xtra.texi b/doc/emacs/msdog-xtra.texi
index 876be52..1033aeb 100644
--- a/doc/emacs/msdog-xtra.texi
+++ b/doc/emacs/msdog-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 2004-2014 Free Software Foundation, Inc.
+@c Copyright (C) 2004-2015 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included either in emacs-xtra.texi (when producing the
diff --git a/doc/emacs/msdog.texi b/doc/emacs/msdog.texi
index 7c5b360..bf130eb 100644
--- a/doc/emacs/msdog.texi
+++ b/doc/emacs/msdog.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Microsoft Windows
diff --git a/doc/emacs/mule.texi b/doc/emacs/mule.texi
index 27c10c9..bea06f5 100644
--- a/doc/emacs/mule.texi
+++ b/doc/emacs/mule.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1997, 1999-2014 Free Software Foundation, Inc.
+@c Copyright (C) 1997, 1999-2015 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node International
 @chapter International Character Set Support
diff --git a/doc/emacs/package.texi b/doc/emacs/package.texi
index 136eff7..e464666 100644
--- a/doc/emacs/package.texi
+++ b/doc/emacs/package.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Packages
diff --git a/doc/emacs/picture-xtra.texi b/doc/emacs/picture-xtra.texi
index 6f29e92..6be84bd 100644
--- a/doc/emacs/picture-xtra.texi
+++ b/doc/emacs/picture-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 2004-2014 Free Software Foundation, Inc.
+@c Copyright (C) 2004-2015 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included either in emacs-xtra.texi (when producing the
diff --git a/doc/emacs/programs.texi b/doc/emacs/programs.texi
index 7d10d8e..48217c6 100644
--- a/doc/emacs/programs.texi
+++ b/doc/emacs/programs.texi
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8 -*-
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 1999-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 1999-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Programs
diff --git a/doc/emacs/regs.texi b/doc/emacs/regs.texi
index a0ff707..3c595f9 100644
--- a/doc/emacs/regs.texi
+++ b/doc/emacs/regs.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Registers
diff --git a/doc/emacs/rmail.texi b/doc/emacs/rmail.texi
index 6fab25a..0c39ea7 100644
--- a/doc/emacs/rmail.texi
+++ b/doc/emacs/rmail.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Rmail
diff --git a/doc/emacs/screen.texi b/doc/emacs/screen.texi
index 3c25426..920aa08 100644
--- a/doc/emacs/screen.texi
+++ b/doc/emacs/screen.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Screen
diff --git a/doc/emacs/search.texi b/doc/emacs/search.texi
index bd0bd0b..a2cea8c 100644
--- a/doc/emacs/search.texi
+++ b/doc/emacs/search.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Search
diff --git a/doc/emacs/sending.texi b/doc/emacs/sending.texi
index 02b38cc..b4bdb93 100644
--- a/doc/emacs/sending.texi
+++ b/doc/emacs/sending.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Sending Mail
diff --git a/doc/emacs/text.texi b/doc/emacs/text.texi
index cebbdf9..11b916a 100644
--- a/doc/emacs/text.texi
+++ b/doc/emacs/text.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Text
diff --git a/doc/emacs/trouble.texi b/doc/emacs/trouble.texi
index 5f3cf92..be519df 100644
--- a/doc/emacs/trouble.texi
+++ b/doc/emacs/trouble.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @iftex
diff --git a/doc/emacs/vc-xtra.texi b/doc/emacs/vc-xtra.texi
index 52fee14..d224043 100644
--- a/doc/emacs/vc-xtra.texi
+++ b/doc/emacs/vc-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 2004-2014 Free Software Foundation, Inc.
+@c Copyright (C) 2004-2015 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included in emacs-xtra.texi when producing the printed
diff --git a/doc/emacs/vc1-xtra.texi b/doc/emacs/vc1-xtra.texi
index dd52d977..a2bf249 100644
--- a/doc/emacs/vc1-xtra.texi
+++ b/doc/emacs/vc1-xtra.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 2004-2014 Free Software Foundation, Inc.
+@c Copyright (C) 2004-2015 Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @c
 @c This file is included either in vc-xtra.texi (when producing the
diff --git a/doc/emacs/windows.texi b/doc/emacs/windows.texi
index 4045908..98bc532 100644
--- a/doc/emacs/windows.texi
+++ b/doc/emacs/windows.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2014 Free Software
+@c Copyright (C) 1985-1987, 1993-1995, 1997, 2000-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Windows
diff --git a/doc/emacs/xresources.texi b/doc/emacs/xresources.texi
index b372708..25552d1 100644
--- a/doc/emacs/xresources.texi
+++ b/doc/emacs/xresources.texi
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1987, 1993-1995, 1997, 2001-2014 Free Software
+@c Copyright (C) 1987, 1993-1995, 1997, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node X Resources
diff --git a/doc/lispintro/ChangeLog b/doc/lispintro/ChangeLog
index 7dfae71..01e56d6 100644
--- a/doc/lispintro/ChangeLog
+++ b/doc/lispintro/ChangeLog
@@ -745,7 +745,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/doc/lispintro/Makefile.in b/doc/lispintro/Makefile.in
index 246de23..825df04 100644
--- a/doc/lispintro/Makefile.in
+++ b/doc/lispintro/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 1994-1999, 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-1999, 2001-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/doc/lispintro/README b/doc/lispintro/README
index 872813e..e24f8f5 100644
--- a/doc/lispintro/README
+++ b/doc/lispintro/README
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/doc/lispintro/cons-1.eps b/doc/lispintro/cons-1.eps
index 06cc7cc..4853d6a 100644
--- a/doc/lispintro/cons-1.eps
+++ b/doc/lispintro/cons-1.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Wed Mar  8 14:26:58 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu)
 
-% Copyright (C) 1995, 1997, 2001-2014 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2015 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/cons-2.eps b/doc/lispintro/cons-2.eps
index e942b62..258caa9 100644
--- a/doc/lispintro/cons-2.eps
+++ b/doc/lispintro/cons-2.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Wed Mar  8 14:26:39 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu)
 
-% Copyright (C) 1995, 1997, 2001-2014 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2015 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/cons-2a.eps b/doc/lispintro/cons-2a.eps
index 847d02b..710f66e 100644
--- a/doc/lispintro/cons-2a.eps
+++ b/doc/lispintro/cons-2a.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Tue Mar 14 15:09:30 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu)
 
-% Copyright (C) 1995, 1997, 2001-2014 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2015 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/cons-3.eps b/doc/lispintro/cons-3.eps
index b81dc4f..2849a31 100644
--- a/doc/lispintro/cons-3.eps
+++ b/doc/lispintro/cons-3.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Wed Mar  8 14:25:41 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu)
 
-% Copyright (C) 1995, 1997, 2001-2014 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2015 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/cons-4.eps b/doc/lispintro/cons-4.eps
index 750878d..d933124 100644
--- a/doc/lispintro/cons-4.eps
+++ b/doc/lispintro/cons-4.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Wed Mar  8 14:25:06 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu)
 
-% Copyright (C) 1995, 1997, 2001-2014 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2015 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/cons-5.eps b/doc/lispintro/cons-5.eps
index 14edd84..6ceec51 100644
--- a/doc/lispintro/cons-5.eps
+++ b/doc/lispintro/cons-5.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Wed Mar  8 14:27:28 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu)
 
-% Copyright (C) 1995, 1997, 2001-2014 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2015 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/drawers.eps b/doc/lispintro/drawers.eps
index ce96e7b..dcd27a6 100644
--- a/doc/lispintro/drawers.eps
+++ b/doc/lispintro/drawers.eps
@@ -9,7 +9,7 @@
 %%EndComments
 %%BeginProlog
 
-% Copyright (C) 2001-2014 Free Software Foundation, Inc.
+% Copyright (C) 2001-2015 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/lambda-1.eps b/doc/lispintro/lambda-1.eps
index 62025bd..21b180c 100644
--- a/doc/lispintro/lambda-1.eps
+++ b/doc/lispintro/lambda-1.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Wed Mar  8 14:31:53 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu)
 
-% Copyright (C) 1995, 1997, 2001-2014 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2015 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/lambda-2.eps b/doc/lispintro/lambda-2.eps
index c4c2b90..6eff61b 100644
--- a/doc/lispintro/lambda-2.eps
+++ b/doc/lispintro/lambda-2.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Wed Mar  8 14:33:09 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu)
 
-% Copyright (C) 1995, 1997, 2001-2014 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2015 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/lambda-3.eps b/doc/lispintro/lambda-3.eps
index 8103195..6ab2282 100644
--- a/doc/lispintro/lambda-3.eps
+++ b/doc/lispintro/lambda-3.eps
@@ -4,7 +4,7 @@
 %%CreationDate: Wed Mar  8 14:33:49 1995
 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu)
 
-% Copyright (C) 1995, 1997, 2001-2014 Free Software Foundation, Inc.
+% Copyright (C) 1995, 1997, 2001-2015 Free Software Foundation, Inc.
 %
 % This file is part of GNU Emacs.
 %
diff --git a/doc/lispintro/makefile.w32-in b/doc/lispintro/makefile.w32-in
index 1767825..12e3a43 100644
--- a/doc/lispintro/makefile.w32-in
+++ b/doc/lispintro/makefile.w32-in
@@ -1,6 +1,6 @@
 #### -*- Makefile -*- for the Emacs Lisp Introduction manual.
 
-# Copyright (C) 2003-2014 Free Software Foundation, Inc.
+# Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog
index 83aaf6e..c4b80a0 100644
--- a/doc/lispref/ChangeLog
+++ b/doc/lispref/ChangeLog
@@ -13500,7 +13500,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1998-2014 Free Software Foundation, Inc.
+  Copyright (C) 1998-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/doc/lispref/Makefile.in b/doc/lispref/Makefile.in
index c120d12..075d4a7 100644
--- a/doc/lispref/Makefile.in
+++ b/doc/lispref/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 1990-1996, 1998-2014 Free Software Foundation, Inc.
+# Copyright (C) 1990-1996, 1998-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/doc/lispref/README b/doc/lispref/README
index e8dbadd..5ca18a8 100644
--- a/doc/lispref/README
+++ b/doc/lispref/README
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2014 Free Software Foundation, Inc.  -*- outline -*-
+Copyright (C) 2001-2015 Free Software Foundation, Inc.  -*- outline -*-
 See the end of the file for license conditions.
 
 
diff --git a/doc/lispref/abbrevs.texi b/doc/lispref/abbrevs.texi
index c00af61..998f63e 100644
--- a/doc/lispref/abbrevs.texi
+++ b/doc/lispref/abbrevs.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1994, 1999, 2001-2014 Free Software Foundation,
+@c Copyright (C) 1990-1994, 1999, 2001-2015 Free Software Foundation,
 @c Inc.
 @c See the file elisp.texi for copying conditions.
 @node Abbrevs
diff --git a/doc/lispref/anti.texi b/doc/lispref/anti.texi
index 2ca2290..c1773aa 100644
--- a/doc/lispref/anti.texi
+++ b/doc/lispref/anti.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1999, 2002-2014 Free Software Foundation, Inc.
+@c Copyright (C) 1999, 2002-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 
 @c This node must have no pointers.
diff --git a/doc/lispref/back.texi b/doc/lispref/back.texi
index 177522e..5edfb67 100644
--- a/doc/lispref/back.texi
+++ b/doc/lispref/back.texi
@@ -1,6 +1,6 @@
 \input texinfo  @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 2001-2014 Free Software Foundation, Inc.
+@c Copyright (C) 2001-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @c
 @c %**start of header
diff --git a/doc/lispref/backups.texi b/doc/lispref/backups.texi
index ca30f3e..0a1b5a2 100644
--- a/doc/lispref/backups.texi
+++ b/doc/lispref/backups.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1999, 2001-2014 Free Software Foundation,
+@c Copyright (C) 1990-1995, 1999, 2001-2015 Free Software Foundation,
 @c Inc.
 @c See the file elisp.texi for copying conditions.
 @node Backups and Auto-Saving
diff --git a/doc/lispref/buffers.texi b/doc/lispref/buffers.texi
index 7c4fb87..1c1c423 100644
--- a/doc/lispref/buffers.texi
+++ b/doc/lispref/buffers.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Buffers
diff --git a/doc/lispref/commands.texi b/doc/lispref/commands.texi
index 45654cf..a503e3f 100644
--- a/doc/lispref/commands.texi
+++ b/doc/lispref/commands.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Command Loop
diff --git a/doc/lispref/compile.texi b/doc/lispref/compile.texi
index cb6cba9..4a246dd 100644
--- a/doc/lispref/compile.texi
+++ b/doc/lispref/compile.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1994, 2001-2014 Free Software Foundation, Inc.
+@c Copyright (C) 1990-1994, 2001-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Byte Compilation
 @chapter Byte Compilation
diff --git a/doc/lispref/control.texi b/doc/lispref/control.texi
index 9511f68..9a9c575 100644
--- a/doc/lispref/control.texi
+++ b/doc/lispref/control.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Control Structures
diff --git a/doc/lispref/customize.texi b/doc/lispref/customize.texi
index cdf599b..0d1b6fa 100644
--- a/doc/lispref/customize.texi
+++ b/doc/lispref/customize.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1997-2014 Free Software Foundation, Inc.
+@c Copyright (C) 1997-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Customization
 @chapter Customization Settings
diff --git a/doc/lispref/debugging.texi b/doc/lispref/debugging.texi
index 0b3c47f..0ccac18 100644
--- a/doc/lispref/debugging.texi
+++ b/doc/lispref/debugging.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1994, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1990-1994, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Debugging
diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi
index 5d3202e..0128e46 100644
--- a/doc/lispref/display.texi
+++ b/doc/lispref/display.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998-2014 Free Software Foundation, Inc.
+@c Copyright (C) 1990-1995, 1998-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Display
 @chapter Emacs Display
diff --git a/doc/lispref/edebug.texi b/doc/lispref/edebug.texi
index 85998fd..97bcf0d 100644
--- a/doc/lispref/edebug.texi
+++ b/doc/lispref/edebug.texi
@@ -1,6 +1,6 @@
 @comment -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1992-1994, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1992-1994, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 
diff --git a/doc/lispref/errors.texi b/doc/lispref/errors.texi
index e00496e..818e80b 100644
--- a/doc/lispref/errors.texi
+++ b/doc/lispref/errors.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1993, 1999, 2001-2014 Free Software Foundation,
+@c Copyright (C) 1990-1993, 1999, 2001-2015 Free Software Foundation,
 @c Inc.
 @c See the file elisp.texi for copying conditions.
 @node Standard Errors
diff --git a/doc/lispref/eval.texi b/doc/lispref/eval.texi
index 0525023..5af67f6 100644
--- a/doc/lispref/eval.texi
+++ b/doc/lispref/eval.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1994, 1998, 2001-2014 Free Software Foundation,
+@c Copyright (C) 1990-1994, 1998, 2001-2015 Free Software Foundation,
 @c Inc.
 @c See the file elisp.texi for copying conditions.
 @node Evaluation
diff --git a/doc/lispref/files.texi b/doc/lispref/files.texi
index 895ae42..3e1fba3 100644
--- a/doc/lispref/files.texi
+++ b/doc/lispref/files.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Files
diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi
index df8efee..2d59227 100644
--- a/doc/lispref/frames.texi
+++ b/doc/lispref/frames.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Frames
diff --git a/doc/lispref/functions.texi b/doc/lispref/functions.texi
index d9477d2..a92c29d 100644
--- a/doc/lispref/functions.texi
+++ b/doc/lispref/functions.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Functions
diff --git a/doc/lispref/hash.texi b/doc/lispref/hash.texi
index 323a2ed..bfa60e0 100644
--- a/doc/lispref/hash.texi
+++ b/doc/lispref/hash.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1999, 2001-2014 Free Software Foundation, Inc.
+@c Copyright (C) 1999, 2001-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Hash Tables
 @chapter Hash Tables
diff --git a/doc/lispref/help.texi b/doc/lispref/help.texi
index 2e3b51e..5b3dd58 100644
--- a/doc/lispref/help.texi
+++ b/doc/lispref/help.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Documentation
diff --git a/doc/lispref/hooks.texi b/doc/lispref/hooks.texi
index 547a2ff..279e78e 100644
--- a/doc/lispref/hooks.texi
+++ b/doc/lispref/hooks.texi
@@ -1,6 +1,7 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1993, 1998, 2001-2014 Free Software Foundation, Inc.
+@c Copyright (C) 1990-1993, 1998, 2001-2015 Free Software Foundation,
+@c Inc.
 @c See the file elisp.texi for copying conditions.
 @node Standard Hooks
 @appendix Standard Hooks
diff --git a/doc/lispref/internals.texi b/doc/lispref/internals.texi
index bfc9d49..9bab636 100644
--- a/doc/lispref/internals.texi
+++ b/doc/lispref/internals.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1993, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1990-1993, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node GNU Emacs Internals
diff --git a/doc/lispref/intro.texi b/doc/lispref/intro.texi
index 1cd79bb..14bdbdb 100644
--- a/doc/lispref/intro.texi
+++ b/doc/lispref/intro.texi
@@ -1,6 +1,6 @@
 @c -*-coding: utf-8-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1994, 2001-2014 Free Software Foundation, Inc.
+@c Copyright (C) 1990-1994, 2001-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 
 @node Introduction
diff --git a/doc/lispref/keymaps.texi b/doc/lispref/keymaps.texi
index d429952..ffcffad 100644
--- a/doc/lispref/keymaps.texi
+++ b/doc/lispref/keymaps.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1994, 1998-2014 Free Software Foundation, Inc.
+@c Copyright (C) 1990-1994, 1998-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Keymaps
 @chapter Keymaps
diff --git a/doc/lispref/lay-flat.texi b/doc/lispref/lay-flat.texi
index 98c778c..81755b6 100644
--- a/doc/lispref/lay-flat.texi
+++ b/doc/lispref/lay-flat.texi
@@ -1,6 +1,6 @@
 \input texinfo    @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 2001-2014 Free Software Foundation, Inc.
+@c Copyright (C) 2001-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @c
 @comment %**start of header
diff --git a/doc/lispref/lists.texi b/doc/lispref/lists.texi
index 2e7b738..5c1755d 100644
--- a/doc/lispref/lists.texi
+++ b/doc/lispref/lists.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Lists
diff --git a/doc/lispref/loading.texi b/doc/lispref/loading.texi
index a0393c9..cf2f000 100644
--- a/doc/lispref/loading.texi
+++ b/doc/lispref/loading.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Loading
diff --git a/doc/lispref/macros.texi b/doc/lispref/macros.texi
index 8a4741c..7bdfee0 100644
--- a/doc/lispref/macros.texi
+++ b/doc/lispref/macros.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998, 2001-2014 Free Software Foundation,
+@c Copyright (C) 1990-1995, 1998, 2001-2015 Free Software Foundation,
 @c Inc.
 @c See the file elisp.texi for copying conditions.
 @node Macros
diff --git a/doc/lispref/makefile.w32-in b/doc/lispref/makefile.w32-in
index 01fe149..4185629 100644
--- a/doc/lispref/makefile.w32-in
+++ b/doc/lispref/makefile.w32-in
@@ -1,6 +1,6 @@
 # -*- Makefile -*- for the GNU Emacs Lisp Reference Manual.
 
-# Copyright (C) 2003-2014 Free Software Foundation, Inc.
+# Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/doc/lispref/maps.texi b/doc/lispref/maps.texi
index 14cbe72..cc12726 100644
--- a/doc/lispref/maps.texi
+++ b/doc/lispref/maps.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1993, 1999, 2001-2014 Free Software Foundation,
+@c Copyright (C) 1990-1993, 1999, 2001-2015 Free Software Foundation,
 @c Inc.
 @c See the file elisp.texi for copying conditions.
 @node Standard Keymaps
diff --git a/doc/lispref/markers.texi b/doc/lispref/markers.texi
index 5902a3a..48ac9f0 100644
--- a/doc/lispref/markers.texi
+++ b/doc/lispref/markers.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Markers
diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi
index cf36953..14ac893 100644
--- a/doc/lispref/minibuf.texi
+++ b/doc/lispref/minibuf.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Minibuffers
diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi
index 509982a..bc247a9 100644
--- a/doc/lispref/modes.texi
+++ b/doc/lispref/modes.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Modes
diff --git a/doc/lispref/nonascii.texi b/doc/lispref/nonascii.texi
index d5fabe7..b52ac73 100644
--- a/doc/lispref/nonascii.texi
+++ b/doc/lispref/nonascii.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1998-1999, 2001-2014 Free Software Foundation, Inc.
+@c Copyright (C) 1998-1999, 2001-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Non-ASCII Characters
 @chapter Non-@acronym{ASCII} Characters
diff --git a/doc/lispref/numbers.texi b/doc/lispref/numbers.texi
index 8fcd77c..1ee7050 100644
--- a/doc/lispref/numbers.texi
+++ b/doc/lispref/numbers.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Numbers
diff --git a/doc/lispref/objects.texi b/doc/lispref/objects.texi
index 4e8182c..739477b 100644
--- a/doc/lispref/objects.texi
+++ b/doc/lispref/objects.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Lisp Data Types
diff --git a/doc/lispref/os.texi b/doc/lispref/os.texi
index 2188c95..bf796d6 100644
--- a/doc/lispref/os.texi
+++ b/doc/lispref/os.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node System Interface
diff --git a/doc/lispref/package.texi b/doc/lispref/package.texi
index c92497a..f8eba2a 100644
--- a/doc/lispref/package.texi
+++ b/doc/lispref/package.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 2010-2014 Free Software Foundation, Inc.
+@c Copyright (C) 2010-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Packaging
 @chapter Preparing Lisp code for distribution
diff --git a/doc/lispref/positions.texi b/doc/lispref/positions.texi
index b8608cc..854a5ee 100644
--- a/doc/lispref/positions.texi
+++ b/doc/lispref/positions.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998-2014 Free Software Foundation, Inc.
+@c Copyright (C) 1990-1995, 1998-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Positions
 @chapter Positions
diff --git a/doc/lispref/processes.texi b/doc/lispref/processes.texi
index 798f211..621e8a1 100644
--- a/doc/lispref/processes.texi
+++ b/doc/lispref/processes.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Processes
diff --git a/doc/lispref/searching.texi b/doc/lispref/searching.texi
index 19c515f..2032b15 100644
--- a/doc/lispref/searching.texi
+++ b/doc/lispref/searching.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Searching and Matching
diff --git a/doc/lispref/sequences.texi b/doc/lispref/sequences.texi
index b518bfc..71160a9 100644
--- a/doc/lispref/sequences.texi
+++ b/doc/lispref/sequences.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Sequences Arrays Vectors
diff --git a/doc/lispref/streams.texi b/doc/lispref/streams.texi
index 1d549ae..6cddba8 100644
--- a/doc/lispref/streams.texi
+++ b/doc/lispref/streams.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1994, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1990-1994, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Read and Print
diff --git a/doc/lispref/strings.texi b/doc/lispref/strings.texi
index 0fd7fd1..5f34be4 100644
--- a/doc/lispref/strings.texi
+++ b/doc/lispref/strings.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Strings and Characters
diff --git a/doc/lispref/symbols.texi b/doc/lispref/symbols.texi
index e445569..a6545ea 100644
--- a/doc/lispref/symbols.texi
+++ b/doc/lispref/symbols.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Symbols
diff --git a/doc/lispref/syntax.texi b/doc/lispref/syntax.texi
index 33577e7..1f1dd6e 100644
--- a/doc/lispref/syntax.texi
+++ b/doc/lispref/syntax.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Syntax Tables
diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi
index 27ea8bc..a611850 100644
--- a/doc/lispref/text.texi
+++ b/doc/lispref/text.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998-2014 Free Software Foundation, Inc.
+@c Copyright (C) 1990-1995, 1998-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Text
 @chapter Text
diff --git a/doc/lispref/tips.texi b/doc/lispref/tips.texi
index f7f07e8..c99c2bd 100644
--- a/doc/lispref/tips.texi
+++ b/doc/lispref/tips.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1993, 1995, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1990-1993, 1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Tips
diff --git a/doc/lispref/two-volume-cross-refs.txt b/doc/lispref/two-volume-cross-refs.txt
index f9d0512..eded8c4 100644
--- a/doc/lispref/two-volume-cross-refs.txt
+++ b/doc/lispref/two-volume-cross-refs.txt
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 See end for copying conditions.
 
 Two Volume Cross References
diff --git a/doc/lispref/two-volume.make b/doc/lispref/two-volume.make
index a75b26b..64799d8 100644
--- a/doc/lispref/two-volume.make
+++ b/doc/lispref/two-volume.make
@@ -1,4 +1,4 @@
-# Copyright (C) 2007-2014 Free Software Foundation, Inc.
+# Copyright (C) 2007-2015 Free Software Foundation, Inc.
 # See end for copying conditions.
 
 # although it would be nice to use tex rather than pdftex to avoid
diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi
index b3466e6..5d766e4 100644
--- a/doc/lispref/variables.texi
+++ b/doc/lispref/variables.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998-2014 Free Software Foundation, Inc.
+@c Copyright (C) 1990-1995, 1998-2015 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Variables
 @chapter Variables
diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi
index aa6ec2c..c40686a 100644
--- a/doc/lispref/windows.texi
+++ b/doc/lispref/windows.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
+@c Copyright (C) 1990-1995, 1998-1999, 2001-2015 Free Software
 @c Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @node Windows
diff --git a/doc/man/ChangeLog b/doc/man/ChangeLog
index ea10c5f..576cc09 100644
--- a/doc/man/ChangeLog
+++ b/doc/man/ChangeLog
@@ -164,7 +164,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 2007-2014 Free Software Foundation, Inc.
+  Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog
index c59077c..58b5d1d 100644
--- a/doc/misc/ChangeLog
+++ b/doc/misc/ChangeLog
@@ -11770,7 +11770,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1993-1999, 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 1993-1999, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in
index 6eeec4a..1644833 100644
--- a/doc/misc/Makefile.in
+++ b/doc/misc/Makefile.in
@@ -1,6 +1,6 @@
 ### @configure_input@
 
-# Copyright (C) 1994, 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1996-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/doc/misc/efaq-w32.texi b/doc/misc/efaq-w32.texi
index 13627eb..8332ad9 100644
--- a/doc/misc/efaq-w32.texi
+++ b/doc/misc/efaq-w32.texi
@@ -17,7 +17,7 @@ Answers to Frequently asked Questions about using Emacs on Microsoft Windows.
 @documentlanguage en
 
 @copying
-Copyright @copyright{} 2008, 2010-2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2008, 2010-2015 Free Software Foundation, Inc.
 
 @quotation
 This list of frequently asked questions about GNU Emacs on MS Windows
diff --git a/doc/misc/eww.texi b/doc/misc/eww.texi
index d22999b..6ca4858 100644
--- a/doc/misc/eww.texi
+++ b/doc/misc/eww.texi
@@ -8,7 +8,7 @@
 @copying
 This file documents the GNU Emacs Web Wowser (EWW) package.
 
-Copyright @copyright{} 2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2014-2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/gnus-faq.texi b/doc/misc/gnus-faq.texi
index 0ee7d2f..0fb77c1 100644
--- a/doc/misc/gnus-faq.texi
+++ b/doc/misc/gnus-faq.texi
@@ -1,7 +1,7 @@
 @c \input texinfo @c -*-texinfo-*-
 @c Uncomment 1st line before texing this file alone.
 @c %**start of header
-@c Copyright (C) 1995, 2001-2014 Free Software Foundation, Inc.
+@c Copyright (C) 1995, 2001-2015 Free Software Foundation, Inc.
 @c
 @c @setfilename gnus-faq.info
 @c @settitle Frequently Asked Questions
diff --git a/doc/misc/gnus-news.el b/doc/misc/gnus-news.el
index fdb4fe8..c4f9f9c 100644
--- a/doc/misc/gnus-news.el
+++ b/doc/misc/gnus-news.el
@@ -1,5 +1,5 @@
 ;;; gnus-news.el --- a hack to create GNUS-NEWS from texinfo source
-;; Copyright (C) 2004-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 ;; Author: Reiner Steib  
 ;; Keywords: tools
diff --git a/doc/misc/gnus-news.texi b/doc/misc/gnus-news.texi
index a48b1f1..c5b96e7 100644
--- a/doc/misc/gnus-news.texi
+++ b/doc/misc/gnus-news.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 
-@c Copyright (C) 2004-2014 Free Software Foundation, Inc.
+@c Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 @c    Permission is granted to anyone to make or distribute verbatim copies
 @c    of this document as received, in any medium, provided that the
diff --git a/doc/misc/htmlfontify.texi b/doc/misc/htmlfontify.texi
index d31a087..63e2b75 100644
--- a/doc/misc/htmlfontify.texi
+++ b/doc/misc/htmlfontify.texi
@@ -10,7 +10,7 @@
 This manual documents Htmlfontify, a source code -> crosslinked +
 formatted + syntax colorized html transformer.
 
-Copyright @copyright{} 2002-2003, 2013-2014 Free Software Foundation,
+Copyright @copyright{} 2002-2003, 2013-2015 Free Software Foundation,
 Inc.
 
 @quotation
diff --git a/doc/misc/ido.texi b/doc/misc/ido.texi
index 0a94a19..f347beb 100644
--- a/doc/misc/ido.texi
+++ b/doc/misc/ido.texi
@@ -7,7 +7,7 @@
 @copying
 This file documents the Ido package for GNU Emacs.
 
-Copyright @copyright{} 2013-2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2013-2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/makefile.w32-in b/doc/misc/makefile.w32-in
index 2edc4ce..6869d94 100644
--- a/doc/misc/makefile.w32-in
+++ b/doc/misc/makefile.w32-in
@@ -1,6 +1,6 @@
 #### -*- Makefile -*- for documentation other than the Emacs manual.
 
-# Copyright (C) 2003-2014 Free Software Foundation, Inc.
+# Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 # This file is part of GNU Emacs.
 
diff --git a/doc/misc/sem-user.texi b/doc/misc/sem-user.texi
index ebd301c..2d9eac2 100644
--- a/doc/misc/sem-user.texi
+++ b/doc/misc/sem-user.texi
@@ -1,5 +1,5 @@
 @c This is part of the Semantic manual.
-@c Copyright (C) 1999-2005, 2007, 2009-2014 Free Software Foundation,
+@c Copyright (C) 1999-2005, 2007, 2009-2015 Free Software Foundation,
 @c Inc.
 @c See file semantic.texi for copying conditions.
 
diff --git a/doc/misc/texinfo.tex b/doc/misc/texinfo.tex
index 0f2673c..879b467 100644
--- a/doc/misc/texinfo.tex
+++ b/doc/misc/texinfo.tex
@@ -5,9 +5,7 @@
 %
 \def\texinfoversion{2014-03-17.07}
 %
-% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
-% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-% 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
+% Copyright 1985-1986, 1988, 1990-2015 Free Software Foundation, Inc.
 %
 % This texinfo.tex file is free software: you can redistribute it and/or
 % modify it under the terms of the GNU General Public License as
diff --git a/doc/misc/todo-mode.texi b/doc/misc/todo-mode.texi
index 9b0ec6e..bad9afa 100644
--- a/doc/misc/todo-mode.texi
+++ b/doc/misc/todo-mode.texi
@@ -9,7 +9,7 @@
 @c %**end of header
 
 @copying
-Copyright @copyright{} 2013-2014 Free Software Foundation, Inc.
+Copyright @copyright{} 2013-2015 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/misc/trampver.texi b/doc/misc/trampver.texi
index ab13ded..a9e7f37 100644
--- a/doc/misc/trampver.texi
+++ b/doc/misc/trampver.texi
@@ -2,7 +2,7 @@
 @c texi/trampver.texi.  Generated from trampver.texi.in by configure.
 
 @c This is part of the Emacs manual.
-@c Copyright (C) 2003-2014 Free Software Foundation, Inc.
+@c Copyright (C) 2003-2015 Free Software Foundation, Inc.
 @c See file doclicense.texi for copying conditions.
 
 @c In the Tramp GIT, the version number is auto-frobbed from
diff --git a/etc/CALC-NEWS b/etc/CALC-NEWS
index 51e95e3..09b12a2 100644
--- a/etc/CALC-NEWS
+++ b/etc/CALC-NEWS
@@ -1,4 +1,4 @@
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Calc is an advanced desk calculator for GNU Emacs.
diff --git a/etc/CONTRIBUTE b/etc/CONTRIBUTE
index b07b6c6..92b4c9e 100644
--- a/etc/CONTRIBUTE
+++ b/etc/CONTRIBUTE
@@ -1,4 +1,4 @@
-Copyright (C) 2006-2014 Free Software Foundation, Inc.
+Copyright (C) 2006-2015 Free Software Foundation, Inc.
 See end for license conditions.
 
 
diff --git a/etc/ChangeLog b/etc/ChangeLog
index cbfe1d6..7b95bdc 100644
--- a/etc/ChangeLog
+++ b/etc/ChangeLog
@@ -6533,7 +6533,7 @@
 ;; coding: utf-8
 ;; End:
 
-  Copyright (C) 1993-1999, 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 1993-1999, 2001-2015 Free Software Foundation, Inc.
 
   This file is part of GNU Emacs.
 
diff --git a/etc/DEBUG b/etc/DEBUG
index 89e1a85..52424d7 100644
--- a/etc/DEBUG
+++ b/etc/DEBUG
@@ -1,6 +1,6 @@
 Debugging GNU Emacs
 
-Copyright (C) 1985, 2000-2014 Free Software Foundation, Inc.
+Copyright (C) 1985, 2000-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/DISTRIB b/etc/DISTRIB
index b464171..7b33cb8 100644
--- a/etc/DISTRIB
+++ b/etc/DISTRIB
@@ -1,7 +1,7 @@
 						-*- text -*-
             GNU Emacs availability information
 
-Copyright (C) 1986-1993, 1995, 1998, 2000-2014 Free Software Foundation,
+Copyright (C) 1986-1993, 1995, 1998, 2000-2015 Free Software Foundation,
 Inc.
 See the end of the file for license conditions.
 
diff --git a/etc/ERC-NEWS b/etc/ERC-NEWS
index dbd4811..68aca96 100644
--- a/etc/ERC-NEWS
+++ b/etc/ERC-NEWS
@@ -1,6 +1,6 @@
 ERC NEWS                                                       -*- outline -*-
 
-Copyright (C) 2006-2014 Free Software Foundation, Inc.
+Copyright (C) 2006-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 * For changes after ERC 5.3, see the main Emacs NEWS file
diff --git a/etc/ETAGS.EBNF b/etc/ETAGS.EBNF
index 0d87238..0a3d9c6 100644
--- a/etc/ETAGS.EBNF
+++ b/etc/ETAGS.EBNF
@@ -94,7 +94,7 @@ those.
 
 ===================== end of discussion of tag names =====================
 
-Copyright (C) 2002-2014 Free Software Foundation, Inc.
+Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
 COPYING PERMISSIONS:
 
diff --git a/etc/ETAGS.README b/etc/ETAGS.README
index 2e51acc..a312d15 100644
--- a/etc/ETAGS.README
+++ b/etc/ETAGS.README
@@ -28,7 +28,7 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-Copyright (C) 1984, 1987-1989, 1993-1995, 1998-2014 Free Software
+Copyright (C) 1984, 1987-1989, 1993-1995, 1998-2015 Free Software
 Foundation, Inc.
 
 This file is not considered part of GNU Emacs.
diff --git a/etc/GNU b/etc/GNU
index 5562a14..16d160a 100644
--- a/etc/GNU
+++ b/etc/GNU
@@ -1,4 +1,4 @@
-Copyright (C) 1985, 1993, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1985, 1993, 2001-2015 Free Software Foundation, Inc.
 
    Permission is granted to anyone to make or distribute verbatim copies
 of this document, in any medium, provided that the copyright notice and
diff --git a/etc/GNUS-NEWS b/etc/GNUS-NEWS
index 16808af..4f311e3 100644
--- a/etc/GNUS-NEWS
+++ b/etc/GNUS-NEWS
@@ -1,6 +1,6 @@
 GNUS NEWS -- history of user-visible changes.
 
-Copyright (C) 1999-2014 Free Software Foundation, Inc.
+Copyright (C) 1999-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Gnus bug reports to bugs@gnus.org.
diff --git a/etc/HELLO b/etc/HELLO
index a5a9cd3..2224bef 100644
--- a/etc/HELLO
+++ b/etc/HELLO
@@ -73,7 +73,7 @@ Korean ($(CGQ1[(B)	$(C>H3gGO<H3gGO=J4O1n(B
 
 
 
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
diff --git a/etc/MACHINES b/etc/MACHINES
index d60510e..9fed9c9 100644
--- a/etc/MACHINES
+++ b/etc/MACHINES
@@ -1,6 +1,6 @@
 Emacs machines list
 
-Copyright (C) 1989-1990, 1992-1993, 1998, 2001-2014 Free Software
+Copyright (C) 1989-1990, 1992-1993, 1998, 2001-2015 Free Software
 Foundation, Inc.
 See the end of the file for license conditions.
 
diff --git a/etc/MH-E-NEWS b/etc/MH-E-NEWS
index a07655a..58a6ed0 100644
--- a/etc/MH-E-NEWS
+++ b/etc/MH-E-NEWS
@@ -1,6 +1,6 @@
 * COPYRIGHT
 
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 * Changes in MH-E 8.6
diff --git a/etc/NEWS b/etc/NEWS
index b34bca8..ae0d402 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.
 
-Copyright (C) 2010-2014 Free Software Foundation, Inc.
+Copyright (C) 2010-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Emacs bug reports to bug-gnu-emacs@gnu.org.
diff --git a/etc/NEWS.1-17 b/etc/NEWS.1-17
index e0c94db..bd96f81 100644
--- a/etc/NEWS.1-17
+++ b/etc/NEWS.1-17
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.  26-Mar-1986
 
-Copyright (C) 1985-1986, 2006-2014 Free Software Foundation, Inc.
+Copyright (C) 1985-1986, 2006-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/NEWS.18 b/etc/NEWS.18
index 757d8fe..581bf7c 100644
--- a/etc/NEWS.18
+++ b/etc/NEWS.18
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.  17-Aug-1988
 
-Copyright (C) 1988, 2006-2014 Free Software Foundation, Inc.
+Copyright (C) 1988, 2006-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/NEWS.19 b/etc/NEWS.19
index 3b73e86..bab2acb 100644
--- a/etc/NEWS.19
+++ b/etc/NEWS.19
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.  1992.
 
-Copyright (C) 1993-1995, 2001, 2006-2014 Free Software Foundation, Inc.
+Copyright (C) 1993-1995, 2001, 2006-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/NEWS.20 b/etc/NEWS.20
index d60bbc4..462b0cc 100644
--- a/etc/NEWS.20
+++ b/etc/NEWS.20
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.  2006-05-31
 
-Copyright (C) 1999-2001, 2006-2014 Free Software Foundation, Inc.
+Copyright (C) 1999-2001, 2006-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/NEWS.21 b/etc/NEWS.21
index b73740c..37ccfba 100644
--- a/etc/NEWS.21
+++ b/etc/NEWS.21
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.  2006-05-31
 
-Copyright (C) 2000-2014 Free Software Foundation, Inc.
+Copyright (C) 2000-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/NEWS.22 b/etc/NEWS.22
index d9182bd..9e62cf2 100644
--- a/etc/NEWS.22
+++ b/etc/NEWS.22
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.
 
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Emacs bug reports to bug-gnu-emacs@gnu.org.
diff --git a/etc/NEWS.23 b/etc/NEWS.23
index 4e1f45c..d192d52 100644
--- a/etc/NEWS.23
+++ b/etc/NEWS.23
@@ -1,6 +1,6 @@
 GNU Emacs NEWS -- history of user-visible changes.
 
-Copyright (C) 2007-2014 Free Software Foundation, Inc.
+Copyright (C) 2007-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Emacs bug reports to bug-gnu-emacs@gnu.org.
diff --git a/etc/NEXTSTEP b/etc/NEXTSTEP
index 79c7365..e6997b8 100644
--- a/etc/NEXTSTEP
+++ b/etc/NEXTSTEP
@@ -1,4 +1,4 @@
-Copyright (C) 2008-2014 Free Software Foundation, Inc.
+Copyright (C) 2008-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 This file contains information about GNU Emacs on "Nextstep" platforms.
diff --git a/etc/NXML-NEWS b/etc/NXML-NEWS
index 8a284e2..de9f18d 100644
--- a/etc/NXML-NEWS
+++ b/etc/NXML-NEWS
@@ -1,4 +1,4 @@
-Copyright (C) 2007-2014 Free Software Foundation, Inc.
+Copyright (C) 2007-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 46b4c95..5d9062a 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -3,7 +3,7 @@ ORG NEWS -- history of user-visible changes.   -*- mode: org; coding: utf-8 -*-
 #+LINK: doc http://orgmode.org/worg/doc.html#%s
 #+LINK: git http://orgmode.org/w/?p=org-mode.git;a=commit;h=%s
 
-Copyright (C) 2012-2014 Free Software Foundation, Inc.
+Copyright (C) 2012-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 Please send Org bug reports to emacs-orgmode@gnu.org.
diff --git a/etc/PROBLEMS b/etc/PROBLEMS
index 771c9d9..c701ec4 100644
--- a/etc/PROBLEMS
+++ b/etc/PROBLEMS
@@ -1,6 +1,7 @@
 Known Problems with GNU Emacs
 
-Copyright (C) 1987-1989, 1993-1999, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1987-1989, 1993-1999, 2001-2015 Free Software Foundation,
+Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/README b/etc/README
index fab2e68..aca7331 100644
--- a/etc/README
+++ b/etc/README
@@ -9,5 +9,5 @@ COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
 
 File: emacs.icon
   Author: Sun Microsystems, Inc
-  Copyright (C) 1999, 2001-2014 Free Software Foundation, Inc.
+  Copyright (C) 1999, 2001-2015 Free Software Foundation, Inc.
   License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/TERMS b/etc/TERMS
index 316d902..69d2c84 100644
--- a/etc/TERMS
+++ b/etc/TERMS
@@ -1,4 +1,4 @@
-Copyright (C) 1999, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1999, 2001-2015 Free Software Foundation, Inc.
 See the end of the file for copying permissions.
 
 This file describes what you must or might want to do to termcap entries
diff --git a/etc/TODO b/etc/TODO
index 85022a5..2bbfb34 100644
--- a/etc/TODO
+++ b/etc/TODO
@@ -1,6 +1,6 @@
 Emacs TODO List                                                   -*-outline-*-
 
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
 
diff --git a/etc/charsets/README b/etc/charsets/README
index 8d443bd..efd0dce 100644
--- a/etc/charsets/README
+++ b/etc/charsets/README
@@ -1,6 +1,6 @@
 # README file for charset mapping files in this directory.
 
-# Copyright (C) 2003-2014 Free Software Foundation, Inc.
+# Copyright (C) 2003-2015 Free Software Foundation, Inc.
 # Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
 #   National Institute of Advanced Industrial Science and Technology (AIST)
 #   Registration Number H13PRO009
diff --git a/etc/compilation.txt b/etc/compilation.txt
index e835c57..495f990 100644
--- a/etc/compilation.txt
+++ b/etc/compilation.txt
@@ -577,7 +577,7 @@ Compilation segmentation fault at Thu Jul 13 10:55:49
 Compilation finished at Thu Jul 21 15:02:15
 
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2015 Free Software Foundation, Inc.
 
 COPYING PERMISSIONS:
 
diff --git a/etc/edt-user.el b/etc/edt-user.el
index aeaebfb..e0f5b29 100644
--- a/etc/edt-user.el
+++ b/etc/edt-user.el
@@ -1,6 +1,6 @@
 ;;; edt-user.el --- Sample user customizations for Emacs EDT emulation
 
-;; Copyright (C) 1986, 1992-1993, 2000-2014 Free Software Foundation,
+;; Copyright (C) 1986, 1992-1993, 2000-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Kevin Gallagher 
diff --git a/etc/emacs-buffer.gdb b/etc/emacs-buffer.gdb
index 94a0602..3f838e9 100644
--- a/etc/emacs-buffer.gdb
+++ b/etc/emacs-buffer.gdb
@@ -1,6 +1,6 @@
 # emacs-buffer.gdb --- gdb macros for recovering buffers from emacs coredumps
 
-# Copyright (C) 2005-2014 Free Software Foundation, Inc.
+# Copyright (C) 2005-2015 Free Software Foundation, Inc.
 
 # Maintainer: Noah Friedman 
 # Created: 2005-04-28
diff --git a/etc/emacs.appdata.xml b/etc/emacs.appdata.xml
index d662bcb..bbe4a9a 100644
--- a/etc/emacs.appdata.xml
+++ b/etc/emacs.appdata.xml
@@ -1,5 +1,5 @@
 
-
+
 
  emacs.desktop
  GFDL-1.3
diff --git a/etc/enriched.txt b/etc/enriched.txt
index e72ff15..637b621 100644
--- a/etc/enriched.txt
+++ b/etc/enriched.txt
@@ -240,7 +240,7 @@ it.
 
 
 
-Copyright (C) 1995, 1997, 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 1995, 1997, 2001-2015 Free Software Foundation, Inc.
 
 COPYING PERMISSIONS:
 
diff --git a/etc/forms/forms-d2.el b/etc/forms/forms-d2.el
index c59c561..7ae99cb 100644
--- a/etc/forms/forms-d2.el
+++ b/etc/forms/forms-d2.el
@@ -1,6 +1,6 @@
 ;;; forms-d2.el --- demo forms-mode
 
-;; Copyright (C) 1991, 1994-1997, 2001-2014 Free Software Foundation,
+;; Copyright (C) 1991, 1994-1997, 2001-2015 Free Software Foundation,
 ;; Inc.
 
 ;; Author: Johan Vromans 
diff --git a/etc/gnus-tut.txt b/etc/gnus-tut.txt
index 275fa5f..42089b1 100644
--- a/etc/gnus-tut.txt
+++ b/etc/gnus-tut.txt
@@ -24,7 +24,7 @@ was done by moi, yours truly, your humble servant, Lars Magne
 Ingebrigtsen.  If you have a WWW browser, you can investigate to your
 heart's delight at .
 
-;; Copyright (C) 1995, 2001-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001-2015 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen 
 ;; Keywords: news
diff --git a/etc/grep.txt b/etc/grep.txt
index 523b1fa..e32ea8e 100644
--- a/etc/grep.txt
+++ b/etc/grep.txt
@@ -97,7 +97,7 @@ grep -nH -e "xyzxyz" ../info/*
 
 
 
-Copyright (C) 2005-2014 Free Software Foundation, Inc.
+Copyright (C) 2005-2015 Free Software Foundation, Inc.
 
 COPYING PERMISSIONS:
 
diff --git a/etc/images/README b/etc/images/README
index 55fc649..0804ded 100644
--- a/etc/images/README
+++ b/etc/images/README
@@ -23,7 +23,7 @@ COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
 
 File: mh-logo.xpm
   Author: Satyaki Das
-  Copyright (C) 2003-2014 Free Software Foundation, Inc.
+  Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
 Files: splash.pbm, splash.xpm, gnus.pbm
   Author: Luis Fernandes 
diff --git a/etc/images/custom/README b/etc/images/custom/README
index c8ade85..8fbe751 100644
--- a/etc/images/custom/README
+++ b/etc/images/custom/README
@@ -6,5 +6,5 @@ COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
 
 Files: down.xpm down-pushed.xpm right.xpm right-pushed.xpm
 Author: Juri Linkov
-Copyright (C) 2008-2014 Free Software Foundation, Inc.
+Copyright (C) 2008-2015 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/images/ezimage/README b/etc/images/ezimage/README
index a3d4362..c91aa5e 100644
--- a/etc/images/ezimage/README
+++ b/etc/images/ezimage/README
@@ -7,5 +7,5 @@ Files: bits.xpm bitsbang.xpm box-minus.xpm box-plus.xpm
        tag-gt.xpm tag-minus.xpm tag-plus.xpm tag-type.xpm tag-v.xpm
        tag.xpm unlock.xpm
 Author: Eric M. Ludlam
-Copyright (C) 1999-2014 Free Software Foundation, Inc.
+Copyright (C) 1999-2015 Free Software Foundation, Inc.
 License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/images/gnus/README b/etc/images/gnus/README
index 07a287b..ae78c9a 100644
--- a/etc/images/gnus/README
+++ b/etc/images/gnus/README
@@ -7,7 +7,7 @@ COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
 
 Files: important.xpm, unimportant.xpm
 Author: Simon Josefsson 
-Copyright (C) 2001-2014 Free Software Foundation, Inc.
+Copyright (C) 2001-2015 Free Software Foundation, Inc.
 
 Files: catchup.pbm catchup.xpm cu-exit.pbm cu-exit.xpm
   describe-group.pbm describe-group.xpm exit-gnus.pbm exit-gnus.xpm
diff --git a/etc/images/gnus/gnus.svg b/etc/images/gnus/gnus.svg
index 4e66beb..cf3efd3 100644
--- a/etc/images/gnus/gnus.svg
+++ b/etc/images/gnus/gnus.svg
@@ -1,7 +1,7 @@