commit 1e155dcc8dcbaed926a1574bc543d404d2859866 (HEAD, refs/remotes/origin/master) Author: Alex Branham Date: Sat Feb 2 09:45:11 2019 -0600 Fix byte compile warnings in checkdoc.el * lisp/emacs-lisp/checkdoc.el (checkdoc-file-comments-engine): Fix byte compile warnings by requiring lisp-mnt top-level, remove XEmacs compatibility code. Bug#34290 diff --git a/lisp/emacs-lisp/checkdoc.el b/lisp/emacs-lisp/checkdoc.el index c0da61a589..dca2f16956 100644 --- a/lisp/emacs-lisp/checkdoc.el +++ b/lisp/emacs-lisp/checkdoc.el @@ -174,6 +174,7 @@ (require 'cl-lib) (require 'help-mode) ;; for help-xref-info-regexp (require 'thingatpt) ;; for handy thing-at-point-looking-at +(require 'lisp-mnt) (defvar compilation-error-regexp-alist) (defvar compilation-mode-font-lock-keywords) @@ -2205,21 +2206,10 @@ News agents may remove it" ;; (defvar generate-autoload-cookie) -(eval-when-compile (require 'lisp-mnt)) ; expand silly defsubsts -(declare-function lm-summary "lisp-mnt" (&optional file)) -(declare-function lm-section-start "lisp-mnt" (header &optional after)) -(declare-function lm-section-end "lisp-mnt" (header)) - (defun checkdoc-file-comments-engine () "Return a message list if this file does not match the Emacs standard. This checks for style only, such as the first line, Commentary:, Code:, and others referenced in the style guide." - (if (featurep 'lisp-mnt) - nil - (require 'lisp-mnt) - ;; Old XEmacs don't have `lm-commentary-mark' - (if (and (not (fboundp 'lm-commentary-mark)) (fboundp 'lm-commentary)) - (defalias 'lm-commentary-mark #'lm-commentary))) (save-excursion (let* ((f1 (file-name-nondirectory (buffer-file-name))) (fn (file-name-sans-extension f1)) @@ -2280,7 +2270,7 @@ Code:, and others referenced in the style guide." (if (or (not checkdoc-force-history-flag) (file-exists-p "ChangeLog") (file-exists-p "../ChangeLog") - (and (fboundp 'lm-history-mark) (funcall #'lm-history-mark))) + (lm-history-mark)) nil (progn (goto-char (or (lm-commentary-mark) (point-min))) commit b3092b2873829317de56043a8247ad2631d24d68 Author: Tassilo Horn Date: Fri Feb 8 20:39:00 2019 +0100 Impl. json-pretty-print with replace-region-contents + minimization * lisp/json.el (json-pretty-print): Use the new replace-region-contents. Add prefix arg for minimzation. (json-pretty-print-buffer): Add prefix arg for minimzation. (json-pretty-print-buffer-ordered): Add prefix arg for minimzation. (json-pretty-print-ordered): Add prefix arg for minimzation. diff --git a/lisp/json.el b/lisp/json.el index 26cd48f41d..3271c373b4 100644 --- a/lisp/json.el +++ b/lisp/json.el @@ -730,36 +730,40 @@ Advances point just past JSON object." ((hash-table-p object) (json-encode-hash-table object)) (t (signal 'json-error (list object))))) -;; Pretty printing - -(defun json-pretty-print-buffer () - "Pretty-print current buffer." - (interactive) - (json-pretty-print (point-min) (point-max))) - -(defun json-pretty-print (begin end) - "Pretty-print selected region." - (interactive "r") - (atomic-change-group - (let ((json-encoding-pretty-print t) - ;; Distinguish an empty objects from 'null' - (json-null :json-null) - ;; Ensure that ordering is maintained - (json-object-type 'alist) - (txt (delete-and-extract-region begin end))) - (insert (json-encode (json-read-from-string txt)))))) - -(defun json-pretty-print-buffer-ordered () - "Pretty-print current buffer with object keys ordered." +;; Pretty printing & minimizing + +(defun json-pretty-print-buffer (&optional minimize) + "Pretty-print current buffer. +With prefix argument MINIMIZE, minimize it instead." + (interactive "P") + (json-pretty-print (point-min) (point-max) minimize)) + +(defun json-pretty-print (begin end &optional minimize) + "Pretty-print selected region. +With prefix argument MINIMIZE, minimize it instead." + (interactive "r\nP") + (let ((json-encoding-pretty-print (null minimize)) + ;; Distinguish an empty objects from 'null' + (json-null :json-null) + ;; Ensure that ordering is maintained + (json-object-type 'alist)) + (replace-region-contents + begin end + (lambda () (json-encode (json-read)))))) + +(defun json-pretty-print-buffer-ordered (&optional minimize) + "Pretty-print current buffer with object keys ordered. +With prefix argument MINIMIZE, minimize it instead." (interactive) (let ((json-encoding-object-sort-predicate 'string<)) - (json-pretty-print-buffer))) + (json-pretty-print-buffer minimize))) -(defun json-pretty-print-ordered (begin end) - "Pretty-print the region with object keys ordered." - (interactive "r") +(defun json-pretty-print-ordered (begin end &optional minimize) + "Pretty-print the region with object keys ordered. +With prefix argument MINIMIZE, minimize it instead." + (interactive "r\nP") (let ((json-encoding-object-sort-predicate 'string<)) - (json-pretty-print begin end))) + (json-pretty-print begin end minimize))) (provide 'json) commit 61748cd78fa3e93a54b60b7568b7e319d9ea09e0 Author: Tassilo Horn Date: Fri Feb 8 20:36:00 2019 +0100 Add new function replace-buffer-contents * src/editfns.c (Freplace_buffer_contents): Use lower value of too_expensive and enable heuristic. * lisp/subr.el (replace-region-contents): New convenient wrapper function around replace-buffer-contents. diff --git a/lisp/subr.el b/lisp/subr.el index 122a0d8da4..44a1c60894 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -5476,4 +5476,30 @@ returned list are in the same order as in TREE. ;; for discoverability: (defalias 'flatten-list 'flatten-tree) +(defun replace-region-contents (beg end replace-fn) + "Replace the region between BEG and END using REPLACE-FN. +REPLACE-FN runs on the current buffer narrowed to the region. It +should return either a string or a buffer replacing the region. + +The replacement is performed using `replace-buffer-contents'. + +Note: If the replacement is a string, it'll be placed in a +temporary buffer so that `replace-buffer-contents' can operate on +it. Therefore, if you already have the replacement in a buffer, +it makes no sense to convert it to a string using +`buffer-substring' or similar." + (save-excursion + (save-restriction + (narrow-to-region beg end) + (goto-char (point-min)) + (let ((repl (funcall replace-fn))) + (if (bufferp repl) + (replace-buffer-contents repl) + (let ((source-buffer (current-buffer))) + (with-temp-buffer + (insert repl) + (let ((tmp-buffer (current-buffer))) + (set-buffer source-buffer) + (replace-buffer-contents tmp-buffer))))))))) + ;;; subr.el ends here diff --git a/src/editfns.c b/src/editfns.c index a9ac263daf..7a600bacf1 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -1910,6 +1910,11 @@ determines whether case is significant or ignored. */) #undef ELEMENT #undef EQUAL +#define USE_HEURISTIC + +#ifdef USE_HEURISTIC +#define DIFFSEQ_HEURISTIC +#endif /* Counter used to rarely_quit in replace-buffer-contents. */ static unsigned short rbc_quitcounter; @@ -2017,8 +2022,11 @@ differences between the two buffers. */) .insertions = SAFE_ALLOCA (ins_bytes), .fdiag = buffer + size_b + 1, .bdiag = buffer + diags + size_b + 1, +#ifdef DIFFSEQ_HEURISTIC + .heuristic = true, +#endif /* FIXME: Find a good number for .too_expensive. */ - .too_expensive = 1000000, + .too_expensive = 64, }; memclear (ctx.deletions, del_bytes); memclear (ctx.insertions, ins_bytes); commit ac1e5a5e2ed7c6cf5bec50e5ebf7fab6792230bd Author: Stefan Monnier Date: Fri Feb 8 14:16:31 2019 -0500 * lisp/emacs-lisp/package.el: Improve generated foo-pkg.el (package-generate-description-file): Make first line more informative. (package-buffer-info): Include keywords, to more closely match elpa.git's archive--metadata. diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 025a1afbdb..458bfad327 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -904,7 +904,9 @@ untar into a directory named DIR; otherwise, signal an error." (print-length nil)) (write-region (concat - ";;; -*- no-byte-compile: t -*-\n" + ";;; Generated package description from " + (replace-regexp-in-string "-pkg\\.el\\'" ".el" pkg-file) + " -*- no-byte-compile: t -*-\n" (prin1-to-string (nconc (list 'define-package @@ -1007,6 +1009,7 @@ is wrapped around any parts requiring it." (declare-function lm-header "lisp-mnt" (header)) (declare-function lm-homepage "lisp-mnt" (&optional file)) +(declare-function lm-keywords-list "lisp-mnt" (&optional file)) (declare-function lm-maintainer "lisp-mnt" (&optional file)) (declare-function lm-authors "lisp-mnt" (&optional file)) @@ -1037,6 +1040,7 @@ boundaries." (pkg-version (or (package-strip-rcs-id (lm-header "package-version")) (package-strip-rcs-id (lm-header "version")))) + (keywords (lm-keywords-list)) (homepage (lm-homepage))) (unless pkg-version (error @@ -1048,6 +1052,7 @@ boundaries." (package-read-from-string requires-str))) :kind 'single :url homepage + :keywords keywords :maintainer (lm-maintainer) :authors (lm-authors))))) commit 0f9940505f87de74c86de17e8a7bf793d9d8dda4 Merge: 4f138318d3 0cd7b526a1 Author: Glenn Morris Date: Fri Feb 8 09:20:40 2019 -0800 Merge from origin/emacs-26 0cd7b52 (origin/emacs-26) Minor improvements to do strings in callproc.c b8c7017 Improve documentation of 'date-to-time' and 'parse-time-string' 46095a7 Fix downloading of URLs that end in a slash 3b60a0a * doc/misc/eww.texi (Basics): Fix eww keybindings. (Bug#34291) 8e22025 Fix process-thread docstring 459b669 Fix failures of vc-find-revision with non-ASCII file names e9ff190 * doc/lispref/tips.texi (Documentation Tips): Fix quotes. (B... 3e49a08 ; * src/coding.h (struct coding_system): Fix a typo in a comm... b657286 Add documentation for tabulated-list functions in the elisp m... 6e0f67b Fix URL in ucs-normalize.el ce3ae1f * etc/PROBLEMS: Amend entry for profiler bug #34235 to mentio... # Conflicts: # doc/lispref/os.texi commit 4f138318d3553162ccc6d0e4554456a65324ec25 Merge: 31ae9dc81b b51ac456e7 Author: Glenn Morris Date: Fri Feb 8 09:18:08 2019 -0800 ; Merge from origin/emacs-26 The following commit was skipped: b51ac45 * make-dist: Remove references to src/stamp-h.in. commit 31ae9dc81bd960074a76dfb221336251ac552a49 Merge: 9e0d69b5a1 9d87ba1e1f Author: Glenn Morris Date: Fri Feb 8 09:18:08 2019 -0800 Merge from origin/emacs-26 9d87ba1 * etc/PROBLEMS: Mention profiler-report bug (Bug#34235). commit 0cd7b526a14ead6cbe78df481a2fd975252bb9ac (refs/remotes/origin/emacs-26) Author: Eli Zaretskii Date: Fri Feb 8 10:46:00 2019 +0200 Minor improvements to do strings in callproc.c * src/callproc.c (Fcall_process, Fcall_process_region): Minor fixes to doc strings. Suggested by Nicholas Drozd . (Bug#34274) diff --git a/src/callproc.c b/src/callproc.c index 3f1d17e345..fa12d02e39 100644 --- a/src/callproc.c +++ b/src/callproc.c @@ -237,7 +237,7 @@ DESTINATION can also have the form (REAL-BUFFER STDERR-FILE); in that case, t (mix it with ordinary output), or a file name string. Fourth arg DISPLAY non-nil means redisplay buffer as output is inserted. -Remaining arguments are strings passed as command arguments to PROGRAM. +Remaining arguments ARGS are strings passed as command arguments to PROGRAM. If executable PROGRAM can't be found as an executable, `call-process' signals a Lisp error. `call-process' reports errors in execution of @@ -1048,7 +1048,8 @@ STDERR-FILE may be nil (discard standard error output), t (mix it with ordinary output), or a file name string. Sixth arg DISPLAY non-nil means redisplay buffer as output is inserted. -Remaining args are passed to PROGRAM at startup as command args. +Remaining arguments ARGS are passed to PROGRAM at startup as command-line +arguments. If BUFFER is 0, `call-process-region' returns immediately with value nil. Otherwise it waits for PROGRAM to terminate commit b8c70172f354ad57bb6c547d59f585d751f632ed Author: Eli Zaretskii Date: Fri Feb 8 10:33:13 2019 +0200 Improve documentation of 'date-to-time' and 'parse-time-string' * doc/lispref/os.texi (Time Parsing): Document 'parse-time-string', and refer to it for the description of the argument of 'date-to-time'. * lisp/calendar/time-date.el (date-to-time): Refer in the doc string to 'parse-time-string' for more information about the format of the DATE argument. (Bug#34303) diff --git a/doc/lispref/os.texi b/doc/lispref/os.texi index 65c57064a3..2f3e91ce68 100644 --- a/doc/lispref/os.texi +++ b/doc/lispref/os.texi @@ -1467,7 +1467,28 @@ integers (@pxref{Time of Day}). @defun date-to-time string This function parses the time-string @var{string} and returns the -corresponding time value. +corresponding time value. The argument @var{string} should represent +a date-time, and should be in one of the forms recognized by +@code{parse-time-string} (see below). This function assumes the GMT +timezone if @var{string} lacks an explicit timezone information. +@end defun + +@defun parse-time-string string +This function parses the time-string @var{string} into a list of the +following form: + +@example +(@var{sec} @var{min} @var{hour} @var{day} @var{mon} @var{year} @var{dow} @var{dst} @var{tz}) +@end example + +@noindent +The format of this list is the same as what @code{decode-time} accepts +(@pxref{Time Conversion}), and is described in more detail there. Any +element that cannot be determined from the input will be set to +@code{nil}. The argument @var{string} should resemble an RFC 2822 or +ISO 8601 string, like ``Fri, 25 Mar 2016 16:24:56 +0100'' or +``1998-09-12T12:21:54-0200'', but this function will attempt to parse +less well-formed time strings as well. @end defun @defun format-time-string format-string &optional time zone diff --git a/lisp/calendar/time-date.el b/lisp/calendar/time-date.el index 6988e65ddd..afd5c091b4 100644 --- a/lisp/calendar/time-date.el +++ b/lisp/calendar/time-date.el @@ -148,6 +148,7 @@ it is assumed that PICO was omitted and should be treated as zero." ;; values. timezone-make-date-arpa-standard should help. (defun date-to-time (date) "Parse a string DATE that represents a date-time and return a time value. +DATE should be in one of the forms recognized by `parse-time-string'. If DATE lacks timezone information, GMT is assumed." (condition-case err (apply 'encode-time (parse-time-string date)) commit 9e0d69b5a17a0fa3b0dd099a51584a85f3ddb5bf Author: Robert Pluim Date: Sat Jan 26 12:31:02 2019 +0100 Unify three font info structures * src/ftfont.h (struct font_info): New type, unifies similar types from ftcrfont.c, ftfont.c and xftfont.c * src/xftfont.c (struct xftfont_info): Remove, replace with struct font_info. Adjust all uses. * src/ftcrfont.c (struct ftcrfont_info): Likewise. * src/ftfont.c (struct ftfont_info): Likewise. diff --git a/src/ftcrfont.c b/src/ftcrfont.c index 7c18e04b74..3a98e78d63 100644 --- a/src/ftcrfont.c +++ b/src/ftcrfont.c @@ -28,34 +28,6 @@ along with GNU Emacs. If not, see . */ #include "ftfont.h" #include "pdumper.h" -/* FTCR font driver. */ - -/* The actual structure for FTCR font. A pointer to this structure - can be cast to struct font *. */ - -struct ftcrfont_info -{ - struct font font; - /* The following members up to and including 'matrix' must be here - in this order to be compatible with struct ftfont_info (in - ftfont.c). */ -#ifdef HAVE_LIBOTF - bool maybe_otf; /* Flag to tell if this may be OTF or not. */ - OTF *otf; -#endif /* HAVE_LIBOTF */ - FT_Size ft_size; - int index; - FT_Matrix matrix; - - cairo_font_face_t *cr_font_face; - /* To prevent cairo from cluttering the activated FT_Size maintained - in ftfont.c, we activate this special FT_Size before drawing. */ - FT_Size ft_size_draw; - /* Font metrics cache. */ - struct font_metrics **metrics; - short metrics_nrows; -}; - #define METRICS_NCOLS_PER_ROW (128) enum metrics_status @@ -72,7 +44,7 @@ ftcrfont_glyph_extents (struct font *font, unsigned glyph, struct font_metrics *metrics) { - struct ftcrfont_info *ftcrfont_info = (struct ftcrfont_info *) font; + struct font_info *ftcrfont_info = (struct font_info *) font; int row, col; struct font_metrics *cache; @@ -134,7 +106,7 @@ ftcrfont_open (struct frame *f, Lisp_Object entity, int pixel_size) { Lisp_Object font_object; struct font *font; - struct ftcrfont_info *ftcrfont_info; + struct font_info *ftcrfont_info; FT_Face ft_face; FT_UInt size; @@ -142,14 +114,14 @@ ftcrfont_open (struct frame *f, Lisp_Object entity, int pixel_size) size = XFIXNUM (AREF (entity, FONT_SIZE_INDEX)); if (size == 0) size = pixel_size; - font_object = font_build_object (VECSIZE (struct ftcrfont_info), + font_object = font_build_object (VECSIZE (struct font_info), Qftcr, entity, size); font_object = ftfont_open2 (f, entity, pixel_size, font_object); if (NILP (font_object)) return Qnil; font = XFONT_OBJECT (font_object); font->driver = &ftcrfont_driver; - ftcrfont_info = (struct ftcrfont_info *) font; + ftcrfont_info = (struct font_info *) font; ft_face = ftcrfont_info->ft_size->face; FT_New_Size (ft_face, &ftcrfont_info->ft_size_draw); FT_Activate_Size (ftcrfont_info->ft_size_draw); @@ -169,7 +141,7 @@ ftcrfont_close (struct font *font) if (font_data_structures_may_be_ill_formed ()) return; - struct ftcrfont_info *ftcrfont_info = (struct ftcrfont_info *) font; + struct font_info *ftcrfont_info = (struct font_info *) font; int i; block_input (); @@ -225,7 +197,7 @@ ftcrfont_draw (struct glyph_string *s, { struct frame *f = s->f; struct face *face = s->face; - struct ftcrfont_info *ftcrfont_info = (struct ftcrfont_info *) s->font; + struct font_info *ftcrfont_info = (struct font_info *) s->font; cairo_t *cr; cairo_glyph_t *glyphs; cairo_surface_t *surface; @@ -316,9 +288,6 @@ struct font_driver const ftcrfont_driver = void syms_of_ftcrfont (void) { - if (ftfont_info_size != offsetof (struct ftcrfont_info, cr_font_face)) - abort (); - DEFSYM (Qftcr, "ftcr"); pdumper_do_now_and_after_load (syms_of_ftcrfont_for_pdumper); } diff --git a/src/ftfont.c b/src/ftfont.c index bcc3460cb7..3e820f583f 100644 --- a/src/ftfont.c +++ b/src/ftfont.c @@ -24,6 +24,17 @@ along with GNU Emacs. If not, see . */ #include #include +/* These two blocks are here because this file is built when using XFT + and when using Cairo, so struct font_info in ftfont.h needs access + to the appropriate types. */ +#ifdef HAVE_XFT +# include +# include +#endif +#ifdef USE_CAIRO +# include +#endif + #include #include "lisp.h" @@ -50,26 +61,6 @@ static Lisp_Object freetype_font_cache; /* Cache for FT_Face and FcCharSet. */ static Lisp_Object ft_face_cache; -/* The actual structure for FreeType font that can be cast to struct - font. */ - -struct ftfont_info -{ - struct font font; -#ifdef HAVE_LIBOTF - /* The following members up to and including 'matrix' must be here in - this order to be compatible with struct xftfont_info (in - xftfont.c). */ - bool maybe_otf; /* Flag to tell if this may be OTF or not. */ - OTF *otf; -#endif /* HAVE_LIBOTF */ - FT_Size ft_size; - int index; - FT_Matrix matrix; -}; - -size_t ftfont_info_size = sizeof (struct ftfont_info); - enum ftfont_cache_for { FTFONT_CACHE_FOR_FACE, @@ -454,7 +445,7 @@ ftfont_get_fc_charset (Lisp_Object entity) #ifdef HAVE_LIBOTF static OTF * -ftfont_get_otf (struct ftfont_info *ftfont_info) +ftfont_get_otf (struct font_info *ftfont_info) { OTF *otf; @@ -1095,7 +1086,7 @@ ftfont_open2 (struct frame *f, int pixel_size, Lisp_Object font_object) { - struct ftfont_info *ftfont_info; + struct font_info *ftfont_info; struct font *font; struct ftfont_cache_data *cache_data; FT_Face ft_face; @@ -1146,7 +1137,7 @@ ftfont_open2 (struct frame *f, ASET (font_object, FONT_FILE_INDEX, filename); font = XFONT_OBJECT (font_object); - ftfont_info = (struct ftfont_info *) font; + ftfont_info = (struct font_info *) font; ftfont_info->ft_size = ft_face->size; ftfont_info->index = XFIXNUM (idx); #ifdef HAVE_LIBOTF @@ -1236,7 +1227,7 @@ ftfont_open (struct frame *f, Lisp_Object entity, int pixel_size) size = XFIXNUM (AREF (entity, FONT_SIZE_INDEX)); if (size == 0) size = pixel_size; - font_object = font_build_object (VECSIZE (struct ftfont_info), + font_object = font_build_object (VECSIZE (struct font_info), Qfreetype, entity, size); return ftfont_open2 (f, entity, pixel_size, font_object); } @@ -1247,7 +1238,7 @@ ftfont_close (struct font *font) if (font_data_structures_may_be_ill_formed ()) return; - struct ftfont_info *ftfont_info = (struct ftfont_info *) font; + struct font_info *ftfont_info = (struct font_info *) font; Lisp_Object val, cache; val = Fcons (font->props[FONT_FILE_INDEX], make_fixnum (ftfont_info->index)); @@ -1291,9 +1282,9 @@ ftfont_has_char (Lisp_Object font, int c) } else { - struct ftfont_info *ftfont_info; + struct font_info *ftfont_info; - ftfont_info = (struct ftfont_info *) XFONT_OBJECT (font); + ftfont_info = (struct font_info *) XFONT_OBJECT (font); return (FT_Get_Char_Index (ftfont_info->ft_size->face, (FT_ULong) c) != 0); } @@ -1302,7 +1293,7 @@ ftfont_has_char (Lisp_Object font, int c) unsigned ftfont_encode_char (struct font *font, int c) { - struct ftfont_info *ftfont_info = (struct ftfont_info *) font; + struct font_info *ftfont_info = (struct font_info *) font; FT_Face ft_face = ftfont_info->ft_size->face; FT_ULong charcode = c; FT_UInt code = FT_Get_Char_Index (ft_face, charcode); @@ -1314,7 +1305,7 @@ void ftfont_text_extents (struct font *font, unsigned int *code, int nglyphs, struct font_metrics *metrics) { - struct ftfont_info *ftfont_info = (struct ftfont_info *) font; + struct font_info *ftfont_info = (struct font_info *) font; FT_Face ft_face = ftfont_info->ft_size->face; int i, width = 0; bool first; @@ -1357,7 +1348,7 @@ ftfont_text_extents (struct font *font, unsigned int *code, int ftfont_get_bitmap (struct font *font, unsigned int code, struct font_bitmap *bitmap, int bits_per_pixel) { - struct ftfont_info *ftfont_info = (struct ftfont_info *) font; + struct font_info *ftfont_info = (struct font_info *) font; FT_Face ft_face = ftfont_info->ft_size->face; FT_Int32 load_flags = FT_LOAD_RENDER; @@ -1401,7 +1392,7 @@ int ftfont_anchor_point (struct font *font, unsigned int code, int idx, int *x, int *y) { - struct ftfont_info *ftfont_info = (struct ftfont_info *) font; + struct font_info *ftfont_info = (struct font_info *) font; FT_Face ft_face = ftfont_info->ft_size->face; if (ftfont_info->ft_size != ft_face->size) @@ -1466,7 +1457,7 @@ ftfont_otf_features (OTF_GSUB_GPOS *gsub_gpos) Lisp_Object ftfont_otf_capability (struct font *font) { - struct ftfont_info *ftfont_info = (struct ftfont_info *) font; + struct font_info *ftfont_info = (struct font_info *) font; OTF *otf = ftfont_get_otf (ftfont_info); Lisp_Object gsub_gpos; @@ -2616,7 +2607,7 @@ Lisp_Object ftfont_shape (Lisp_Object lgstring) { struct font *font = CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring)); - struct ftfont_info *ftfont_info = (struct ftfont_info *) font; + struct font_info *ftfont_info = (struct font_info *) font; OTF *otf = ftfont_get_otf (ftfont_info); return ftfont_shape_by_flt (lgstring, font, ftfont_info->ft_size->face, otf, @@ -2630,7 +2621,7 @@ ftfont_shape (Lisp_Object lgstring) int ftfont_variation_glyphs (struct font *font, int c, unsigned variations[256]) { - struct ftfont_info *ftfont_info = (struct ftfont_info *) font; + struct font_info *ftfont_info = (struct font_info *) font; OTF *otf = ftfont_get_otf (ftfont_info); if (! otf) diff --git a/src/ftfont.h b/src/ftfont.h index 4201b2c2d6..b6b0c5ba47 100644 --- a/src/ftfont.h +++ b/src/ftfont.h @@ -26,13 +26,13 @@ along with GNU Emacs. If not, see . */ #include FT_FREETYPE_H #include FT_SIZES_H #ifdef FT_BDF_H -#include FT_BDF_H +# include FT_BDF_H #endif #ifdef HAVE_LIBOTF -#include +# include #ifdef HAVE_M17N_FLT -#include +# include #endif /* HAVE_M17N_FLT */ #endif /* HAVE_LIBOTF */ @@ -41,6 +41,35 @@ extern Lisp_Object ftfont_open2 (struct frame *f, Lisp_Object entity, int pixel_size, Lisp_Object font_object); -extern size_t ftfont_info_size; + +/* This struct is shared by the XFT, Freetype, and Cairo font + backends. Members up to and including 'matrix' are common, the + rest depend on which backend is in use. */ +struct font_info +{ + struct font font; +#ifdef HAVE_LIBOTF + bool maybe_otf; /* Flag to tell if this may be OTF or not. */ + OTF *otf; +#endif /* HAVE_LIBOTF */ + FT_Size ft_size; + int index; + FT_Matrix matrix; + +#ifdef USE_CAIRO + cairo_font_face_t *cr_font_face; + /* To prevent cairo from cluttering the activated FT_Size maintained + in ftfont.c, we activate this special FT_Size before drawing. */ + FT_Size ft_size_draw; + /* Font metrics cache. */ + struct font_metrics **metrics; + short metrics_nrows; +#else + /* These are used by the XFT backend. */ + Display *display; + XftFont *xftfont; + unsigned x_display_id; +#endif +}; #endif /* EMACS_FTFONT_H */ diff --git a/src/xftfont.c b/src/xftfont.c index ea8572f424..8a4516f7f9 100644 --- a/src/xftfont.c +++ b/src/xftfont.c @@ -36,29 +36,6 @@ along with GNU Emacs. If not, see . */ /* Xft font driver. */ - -/* The actual structure for Xft font that can be cast to struct - font. */ - -struct xftfont_info -{ - struct font font; - /* The following members up to and including 'matrix' must be here - in this order to be compatible with struct ftfont_info (in - ftfont.c). */ -#ifdef HAVE_LIBOTF - bool maybe_otf; /* Flag to tell if this may be OTF or not. */ - OTF *otf; -#endif /* HAVE_LIBOTF */ - FT_Size ft_size; - int index; - FT_Matrix matrix; - - Display *display; - XftFont *xftfont; - unsigned x_display_id; -}; - /* Structure pointed by (struct face *)->extra */ struct xftface_info @@ -258,7 +235,7 @@ xftfont_open (struct frame *f, Lisp_Object entity, int pixel_size) Display *display = FRAME_X_DISPLAY (f); Lisp_Object val, filename, idx, font_object; FcPattern *pat = NULL, *match; - struct xftfont_info *xftfont_info = NULL; + struct font_info *xftfont_info = NULL; struct font *font; double size = 0; XftFont *xftfont = NULL; @@ -333,7 +310,7 @@ xftfont_open (struct frame *f, Lisp_Object entity, int pixel_size) /* We should not destroy PAT here because it is kept in XFTFONT and destroyed automatically when XFTFONT is closed. */ - font_object = font_build_object (VECSIZE (struct xftfont_info), + font_object = font_build_object (VECSIZE (struct font_info), Qxft, entity, size); ASET (font_object, FONT_FILE_INDEX, filename); font = XFONT_OBJECT (font_object); @@ -341,7 +318,7 @@ xftfont_open (struct frame *f, Lisp_Object entity, int pixel_size) font->driver = &xftfont_driver; font->encoding_charset = font->repertory_charset = -1; - xftfont_info = (struct xftfont_info *) font; + xftfont_info = (struct font_info *) font; xftfont_info->display = display; xftfont_info->xftfont = xftfont; xftfont_info->x_display_id = FRAME_DISPLAY_INFO (f)->x_id; @@ -463,7 +440,7 @@ static void xftfont_close (struct font *font) { struct x_display_info *xdi; - struct xftfont_info *xftfont_info = (struct xftfont_info *) font; + struct font_info *xftfont_info = (struct font_info *) font; #ifdef HAVE_LIBOTF if (xftfont_info->otf) @@ -529,7 +506,7 @@ xftfont_done_face (struct frame *f, struct face *face) static int xftfont_has_char (Lisp_Object font, int c) { - struct xftfont_info *xftfont_info; + struct font_info *xftfont_info; struct charset *cs = NULL; if (EQ (AREF (font, FONT_ADSTYLE_INDEX), Qja) @@ -543,7 +520,7 @@ xftfont_has_char (Lisp_Object font, int c) if (FONT_ENTITY_P (font)) return ftfont_has_char (font, c); - xftfont_info = (struct xftfont_info *) XFONT_OBJECT (font); + xftfont_info = (struct font_info *) XFONT_OBJECT (font); return (XftCharExists (xftfont_info->display, xftfont_info->xftfont, (FcChar32) c) == FcTrue); } @@ -551,7 +528,7 @@ xftfont_has_char (Lisp_Object font, int c) static unsigned xftfont_encode_char (struct font *font, int c) { - struct xftfont_info *xftfont_info = (struct xftfont_info *) font; + struct font_info *xftfont_info = (struct font_info *) font; unsigned code = XftCharIndex (xftfont_info->display, xftfont_info->xftfont, (FcChar32) c); @@ -562,7 +539,7 @@ static void xftfont_text_extents (struct font *font, unsigned int *code, int nglyphs, struct font_metrics *metrics) { - struct xftfont_info *xftfont_info = (struct xftfont_info *) font; + struct font_info *xftfont_info = (struct font_info *) font; XGlyphInfo extents; block_input (); @@ -604,7 +581,7 @@ xftfont_draw (struct glyph_string *s, int from, int to, int x, int y, struct frame *f = s->f; struct face *face = s->face; - struct xftfont_info *xftfont_info = (struct xftfont_info *) s->font; + struct font_info *xftfont_info = (struct font_info *) s->font; struct xftface_info *xftface_info = NULL; XftDraw *xft_draw = xftfont_get_xft_draw (f); FT_UInt *code; @@ -667,7 +644,7 @@ static Lisp_Object xftfont_shape (Lisp_Object lgstring) { struct font *font = CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring)); - struct xftfont_info *xftfont_info = (struct xftfont_info *) font; + struct font_info *xftfont_info = (struct font_info *) font; FT_Face ft_face = XftLockFace (xftfont_info->xftfont); xftfont_info->ft_size = ft_face->size; Lisp_Object val = ftfont_shape (lgstring); @@ -711,7 +688,7 @@ static bool xftfont_cached_font_ok (struct frame *f, Lisp_Object font_object, Lisp_Object entity) { - struct xftfont_info *info = (struct xftfont_info *) XFONT_OBJECT (font_object); + struct font_info *info = (struct font_info *) XFONT_OBJECT (font_object); FcPattern *oldpat = info->xftfont->pattern; Display *display = FRAME_X_DISPLAY (f); FcPattern *pat = FcPatternCreate (); commit 24905e92179c2ee8cd02c26b4a7058fbd238ece7 Author: Eli Zaretskii Date: Fri Feb 8 09:53:32 2019 +0200 Minor fixes for last change * etc/NEWS: Announce the change in EWW download behavior. * lisp/net/eww.el (eww-download): Doc fix. (Bug#34291) diff --git a/etc/NEWS b/etc/NEWS index 7ee49bf6b5..75c8dc0b8e 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -654,6 +654,11 @@ and its value has been changed to Duck Duck Go. ** eww/shr ++++ +*** The 'd' ('eww-download') command now falls back to current page's URL. +If this command is invoked with no URL at point, it now downloads the +current page instead of signaling an error. + *** When opening external links in eww/shr (typically with the 'C-u RET' keystroke on a link), the link will be flashed with the new 'shr-selected-link' face to give the user feedback that the command diff --git a/lisp/net/eww.el b/lisp/net/eww.el index 0c8bffa579..a3f22aeb8a 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el @@ -1532,7 +1532,7 @@ Differences in #targets are ignored." (defun eww-download () "Download URL to `eww-download-directory'. -Use link under point if there is one, else the current page URL." +Use link at point if there is one, else the current page's URL." (interactive) (access-file eww-download-directory "Download failed") (let ((url (or (get-text-property (point) 'shr-url) commit 51e6e0694acb6ecb54962d702193ec5b21e57128 Author: Nick Drozd Date: Sat Feb 2 12:35:02 2019 -0600 Download of URL in EWW falls back on current URL * lisp/net/eww.el (eww-download): If there's no URL at point, download the current URL instead. Previous behavior was to signal an error if there was no URL at point. (Bug#34291) * doc/misc/eww.texi (Basics): Update documentation. diff --git a/doc/misc/eww.texi b/doc/misc/eww.texi index b299ea1fb7..3048893372 100644 --- a/doc/misc/eww.texi +++ b/doc/misc/eww.texi @@ -125,9 +125,10 @@ HTML-specified colors or not. This sets the @code{shr-use-colors} variable. @vindex eww-download-directory @kindex d @cindex Download - A URL under the point can be downloaded with @kbd{d} -(@code{eww-download}). The file will be written to the directory -specified in @code{eww-download-directory} (Default: @file{~/Downloads/}). + A URL can be downloaded with @kbd{d} (@code{eww-download}). This +will download the link under point if there is one, or else the URL of +the current page. The file will be written to the directory specified +in @code{eww-download-directory} (default: @file{~/Downloads/}). @findex eww-back-url @findex eww-forward-url diff --git a/lisp/net/eww.el b/lisp/net/eww.el index 3b7d9d5c2f..0c8bffa579 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el @@ -1531,10 +1531,12 @@ Differences in #targets are ignored." (kill-new (plist-get eww-data :url))) (defun eww-download () - "Download URL under point to `eww-download-directory'." + "Download URL to `eww-download-directory'. +Use link under point if there is one, else the current page URL." (interactive) (access-file eww-download-directory "Download failed") - (let ((url (get-text-property (point) 'shr-url))) + (let ((url (or (get-text-property (point) 'shr-url) + (eww-current-url)))) (if (not url) (message "No URL under point") (url-retrieve url 'eww-download-callback (list url))))) commit 46095a7dcb5fd6e0b79582bd14aa87f2d04f4a65 Author: Nick Drozd Date: Sat Feb 2 12:50:03 2019 -0600 Fix downloading of URLs that end in a slash * lisp/net/eww.el (eww-download-callback): Fix download URL file name. Previously this wasn't handling download URLs correctly, resulting in all downloaded pages being named "!", "!(1)", etc. (Bug#34291) diff --git a/lisp/net/eww.el b/lisp/net/eww.el index cf586e2d56..1cc4557ce1 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el @@ -1526,7 +1526,7 @@ Differences in #targets are ignored." (defun eww-download-callback (status url) (unless (plist-get status :error) (let* ((obj (url-generic-parse-url url)) - (path (car (url-path-and-query obj))) + (path (directory-file-name (car (url-path-and-query obj)))) (file (eww-make-unique-file-name (eww-decode-url-file-name (file-name-nondirectory path)) eww-download-directory))) commit 3b60a0add71f7b5bdd350d189e5d05c19b27c089 Author: Nick Drozd Date: Sat Feb 2 12:31:44 2019 -0600 * doc/misc/eww.texi (Basics): Fix eww keybindings. (Bug#34291) diff --git a/doc/misc/eww.texi b/doc/misc/eww.texi index 0afbd4cb85..d2c60b0abf 100644 --- a/doc/misc/eww.texi +++ b/doc/misc/eww.texi @@ -118,7 +118,7 @@ variable-pitch fonts or not. This sets the @code{shr-use-fonts} variable. @findex eww-toggle-colors @findex shr-use-colors @kindex F - The @kbd{C} command (@code{eww-toggle-colors}) toggles whether to use + The @kbd{M-C} command (@code{eww-toggle-colors}) toggles whether to use HTML-specified colors or not. This sets the @code{shr-use-colors} variable. @findex eww-download commit 8e22025f3306f2d1654dc19ab42558448b508bd7 Author: Robert Pluim Date: Fri Feb 8 08:22:34 2019 +0100 Fix process-thread docstring * src/process.c (Fprocess_thread): Correct docstring. diff --git a/src/process.c b/src/process.c index d8acd139c0..2df51cfd99 100644 --- a/src/process.c +++ b/src/process.c @@ -1350,7 +1350,7 @@ If THREAD is nil, the process is unlocked. */) DEFUN ("process-thread", Fprocess_thread, Sprocess_thread, 1, 1, 0, - doc: /* Ret the locking thread of PROCESS. + doc: /* Return the locking thread of PROCESS. If PROCESS is unlocked, this function returns nil. */) (Lisp_Object process) { commit 459b669b08d235a79ff4fa61b2d93e9a6229facd Author: Eli Zaretskii Date: Fri Feb 8 08:59:23 2019 +0200 Fix failures of vc-find-revision with non-ASCII file names * lisp/vc/vc.el (vc-find-revision): Instead of binding coding-system-for-write, make the buffer-file-coding-system of the temporary buffer be no-conversion. This avoids the unwanted side effect of not encoding the command-line arguments of the VCS commands invoked by the backend. (Bug#34350) diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index 9925196f73..326284f444 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -1966,10 +1966,13 @@ Use BACKEND as the VC backend if specified." (with-current-buffer filebuf (let ((failed t)) (unwind-protect - (let ((coding-system-for-read 'no-conversion) - (coding-system-for-write 'no-conversion)) + (let ((coding-system-for-read 'no-conversion)) (with-temp-file filename (let ((outbuf (current-buffer))) + ;; We will read the backend's output with no + ;; conversions, so we should also save the + ;; temporary file with no encoding conversions. + (setq buffer-file-coding-system 'no-conversion) ;; Change buffer to get local value of ;; vc-checkout-switches. (with-current-buffer filebuf commit e9ff19053139c149460fa8b1214c4012fc11cd0d Author: Eli Zaretskii Date: Thu Feb 7 19:49:57 2019 +0200 * doc/lispref/tips.texi (Documentation Tips): Fix quotes. (Bug#34372) diff --git a/doc/lispref/tips.texi b/doc/lispref/tips.texi index bb701c4930..d41fe82572 100644 --- a/doc/lispref/tips.texi +++ b/doc/lispref/tips.texi @@ -679,10 +679,15 @@ starting double-quote is not part of the string! @cindex curly quotes @cindex curved quotes When a documentation string refers to a Lisp symbol, write it as it -would be printed (which usually means in lower case), surrounding -it with curved single quotes (@t{‘} and @t{’}). There are -two exceptions: write @code{t} and @code{nil} without surrounding -punctuation. For example: @samp{CODE can be ‘lambda’, nil, or t}. +would be printed (which usually means in lower case), surrounding it +with curved single quotes (@t{‘..’}). There are two exceptions: write +@code{t} and @code{nil} without surrounding punctuation. For example: + +@example + CODE can be ‘lambda’, nil, or t. +@end example + +@noindent @xref{Quotation Marks,,, emacs, The GNU Emacs Manual}, for how to enter curved single quotes. commit dbb1a8bc1a285c7ed8817bac533ed4a096c391ac Author: Eli Zaretskii Date: Thu Feb 7 17:32:47 2019 +0200 Minor fix for unexec builds. * src/emacs.c (main): Fix assertions and logic for pdump loading in builds that can both unexec and pdump. diff --git a/src/emacs.c b/src/emacs.c index 87de181725..3f964a1604 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -897,10 +897,13 @@ main (int argc, char **argv) } else { - eassert (!initialized); eassert (!temacs); +#ifndef HAVE_UNEXEC + eassert (!initialized); +#endif #ifdef HAVE_PDUMPER - attempt_load_pdump = true; + if (!initialized) + attempt_load_pdump = true; #endif } commit 0ceee95f854ed9894b7077a826b00e6220932555 Author: Eli Zaretskii Date: Thu Feb 7 17:27:18 2019 +0200 ; Simplify last change. diff --git a/src/emacs.c b/src/emacs.c index c5163db95a..87de181725 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -913,7 +913,7 @@ main (int argc, char **argv) /* Grab our malloc arena space now, before anything important happens. This relies on the static heap being needed only in temacs and only if we are going to dump with unexec. */ - bool use_dynamic_heap = false; + bool use_dynamic_heap = true; if (temacs) { char *temacs_str = NULL, *p; @@ -929,11 +929,7 @@ main (int argc, char **argv) will not do their job. */ use_dynamic_heap = will_dump_with_pdumper_p (); } - else - use_dynamic_heap = true; } - else - use_dynamic_heap = true; init_heap (use_dynamic_heap); /* Set global variables used to detect Windows version. Do this as early as possible. (w32proc.c calls this function as well, but commit 005d8346b8cc9ca7675890f085ce34c56ab2723a Author: Eli Zaretskii Date: Thu Feb 7 17:23:57 2019 +0200 Avoid segfaults on MS-Windows in enexec'ed Emacs * src/emacs.c (main) [WINDOWSNT]: Fix logic of using dynamic heap in unexec case. (Bug#34277) diff --git a/src/emacs.c b/src/emacs.c index 9277399618..c5163db95a 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -914,17 +914,23 @@ main (int argc, char **argv) happens. This relies on the static heap being needed only in temacs and only if we are going to dump with unexec. */ bool use_dynamic_heap = false; - char *temacs_str = strstr (argv[0], "temacs"); - if (temacs - && temacs_str != NULL - && (temacs_str == argv[0] || IS_DIRECTORY_SEP (temacs_str[-1]))) + if (temacs) { - /* Note that gflags are set at this point only if we have been - called with the --temacs=METHOD option. We assume here that - temacs is always called that way, otherwise the functions - that rely on gflags, like will_dump_with_pdumper_p below, - will not do their job. */ - use_dynamic_heap = will_dump_with_pdumper_p (); + char *temacs_str = NULL, *p; + for (p = argv[0]; (p = strstr (p, "temacs")) != NULL; p++) + temacs_str = p; + if (temacs_str != NULL + && (temacs_str == argv[0] || IS_DIRECTORY_SEP (temacs_str[-1]))) + { + /* Note that gflags are set at this point only if we have been + called with the --temacs=METHOD option. We assume here that + temacs is always called that way, otherwise the functions + that rely on gflags, like will_dump_with_pdumper_p below, + will not do their job. */ + use_dynamic_heap = will_dump_with_pdumper_p (); + } + else + use_dynamic_heap = true; } else use_dynamic_heap = true; commit 3d6d8d795b593df3fa2132e23811ad1e94a58c05 Author: Dmitry Gutov Date: Thu Feb 7 14:22:47 2019 +0300 Avoid unnecessary consing in project--files-in-directory * lisp/progmodes/project.el (project--remote-file-names): New function. (project--files-in-directory): Use it. diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index 3906f6cb24..fbf761c60c 100644 --- a/lisp/progmodes/project.el +++ b/lisp/progmodes/project.el @@ -192,7 +192,6 @@ to find the list of ignores for each directory." (require 'find-dired) (defvar find-name-arg) (let ((default-directory dir) - (remote-id (file-remote-p dir)) (command (format "%s %s %s -type f %s -print0" find-program (file-local-name dir) @@ -209,8 +208,17 @@ to find the list of ignores for each directory." " " (shell-quote-argument ")"))"") ))) - (mapcar (lambda (file) (concat remote-id file)) - (split-string (shell-command-to-string command) "\0" t)))) + (project--remote-file-names + (split-string (shell-command-to-string command) "\0" t)))) + +(defun project--remote-file-names (local-files) + "Return LOCAL-FILES as if they were on the system of `default-directory'." + (let ((remote-id (file-remote-p default-directory))) + (if (not remote-id) + local-files + (mapcar (lambda (file) + (concat remote-id file)) + local-files)))) (defgroup project-vc nil "Project implementation using the VC package." commit 3e49a080e5198fb1d82d7b2cb5d105ce6b88f222 Author: Eli Zaretskii Date: Wed Feb 6 18:51:02 2019 +0200 ; * src/coding.h (struct coding_system): Fix a typo in a comment. diff --git a/src/coding.h b/src/coding.h index 57fd196af3..aab8c2d438 100644 --- a/src/coding.h +++ b/src/coding.h @@ -450,7 +450,7 @@ struct coding_system unsigned char *safe_charsets; - /* How may heading bytes we can skip for decoding. This is set to + /* How many heading bytes we can skip for decoding. This is set to -1 in setup_coding_system, and updated by detect_coding. So, when this is equal to the byte length of the text being converted, we can skip the actual conversion process except for commit b657286a8c760904747c7b62bcc1f1794969ba84 Author: Alex Branham Date: Sat Feb 2 09:59:21 2019 -0600 Add documentation for tabulated-list functions in the elisp manual * doc/lispref/modes.texi: Add documentation for 'tabulated-list-delete-entry', 'tabulated-list-get-id', 'tabulated-list-get-entry', 'tabulated-list-header-overlay-p', 'tabulated-list-put-tag', and 'tabulated-list-set-col'. Bug#21074 diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi index 9df1a69e90..26cb028d26 100644 --- a/doc/lispref/modes.texi +++ b/doc/lispref/modes.texi @@ -1101,6 +1101,65 @@ that tags placed via @code{tabulated-list-put-tag} will not be removed from entries that haven't changed (normally all tags are removed). @end defun +@defun tabulated-list-delete-entry +This function deletes the entry at point. + +It returns a list @code{(@var{id} @var{cols})}, where @var{id} is the +ID of the deleted entry and @var{cols} is a vector of its column +descriptors. It moves point to the beginning of the current line. It +returns @code{nil} if there is no entry at point. + +Note that this function only changes the buffer contents; it does not +alter @code{tabulated-list-entries}. +@end defun + +@defun tabulated-list-get-id &optional pos +This @code{defsubst} returns the ID object from +@code{tabulated-list-entries} (if that is a list) or from the list +returned by @code{tabulated-list-entries} (if it is a function). If +omitted or @code{nil}, @var{pos} defaults to point. +@end defun + +@defun tabulated-list-get-entry &optional pos +This @code{defsubst} returns the entry object from +@code{tabulated-list-entries} (if that is a list) or from the list +returned by @code{tabulated-list-entries} (if it is a function). This +will be a vector for the ID at @var{pos}. If there is no entry at +@var{pos}, then the function returns @code{nil}. +@end defun + +@vindex tabulated-list-use-header-line +@defun tabulated-list-header-overlay-p &optional POS +This @code{defsubst} returns non-nil if there is a fake header at +@var{pos}. A fake header is used if +@code{tabulated-list-use-header-line} is @code{nil} to put the column +names at the beginning of the buffer. If omitted or @code{nil}, +@var{pos} defaults to @code{point-min}. +@end defun + +@vindex tabulated-list-padding +@defun tabulated-list-put-tag tag &optional advance +This function puts @var{tag} in the padding area of the current line. +The padding area can be empty space at the beginning of the line, the +width of which is governed by @code{tabulated-list-padding}. +@var{tag} should be a string, with a length less than or equal to +@code{tabulated-list-padding}. If @var{advance} is non-nil, this +function advances point by one line. +@end defun + +@defun tabulated-list-set-col col desc &optional change-entry-data +This function changes the tabulated list entry at point, setting +@var{col} to @var{desc}. @var{col} is the column number to change, or +the name of the column to change. @var{desc} is the new column +descriptor, which is inserted via @code{tabulated-list-print-col}. + +If @var{change-entry-data} is non-nil, this function modifies the +underlying data (usually the column descriptor in the list +@code{tabulated-list-entries}) by setting the column descriptor of the +vector to @code{desc}. +@end defun + + @node Generic Modes @subsection Generic Modes @cindex generic mode commit 6e0f67b2fc10410b8d70d27f2ca470ab3fd3f1e1 Author: Jean-Christophe Helary Date: Mon Feb 4 00:23:36 2019 +0900 Fix URL in ucs-normalize.el * lisp/international/ucs-normalize.el: Fix URL of the HFS normalization reference. (Bug#34300) diff --git a/lisp/international/ucs-normalize.el b/lisp/international/ucs-normalize.el index e212e14671..9d55470d94 100644 --- a/lisp/international/ucs-normalize.el +++ b/lisp/international/ucs-normalize.el @@ -30,7 +30,7 @@ ;; ;; HFS-Normalization: ;; Reference: -;; http://developer.apple.com/technotes/tn/tn1150.html +;; https://developer.apple.com/library/archive/technotes/tn/tn1150.html ;; ;; HFS Normalization excludes following area for decomposition. ;; commit ce3ae1f8d32a09b38a55095e4eec16a8d733f33c Author: Alan Mackenzie Date: Sun Feb 3 11:38:19 2019 +0000 * etc/PROBLEMS: Amend entry for profiler bug #34235 to mention kernel 4.14.97 diff --git a/etc/PROBLEMS b/etc/PROBLEMS index 00583f016d..b3f1d70858 100644 --- a/etc/PROBLEMS +++ b/etc/PROBLEMS @@ -1853,8 +1853,8 @@ term/xterm.el) for more details. *** GNU/Linux: profiler-report outputs nothing. A few versions of the Linux kernel have timer bugs that break CPU -profiling; see Bug#34235. To fix the problem, upgrade to kernel -versions 4.19.19 or 4.20.6, or later. +profiling; see Bug#34235. To fix the problem, upgrade to one of the +kernel versions 4.14.97, 4.19.19, or 4.20.6, or later. *** GNU/Linux: Process output is corrupted. commit b51ac456e75e5a26ccc6a85e2504565c54aa2d58 Author: Glenn Morris Date: Fri Feb 1 18:03:16 2019 -0800 * make-dist: Remove references to src/stamp-h.in. This file was removed two years ago in 2f89350. No need to merge to master. diff --git a/make-dist b/make-dist index dc5bbfc78b..e8aca55334 100755 --- a/make-dist +++ b/make-dist @@ -327,10 +327,6 @@ if [ $update = yes ]; then echo "Running autoreconf" autoreconf -i -I m4 || { x=$?; echo Autoreconf FAILED! >&2; exit $x; } - ## Make sure src/stamp-h.in is newer than configure.ac. - rm -f src/stamp-h.in - echo timestamp > src/stamp-h.in - echo "Updating Info files" make info commit 9d87ba1e1fd987be465e22712d4bc79225bbc6b3 Author: Paul Eggert Date: Fri Feb 1 17:58:05 2019 -0800 * etc/PROBLEMS: Mention profiler-report bug (Bug#34235). diff --git a/etc/PROBLEMS b/etc/PROBLEMS index cab087631c..00583f016d 100644 --- a/etc/PROBLEMS +++ b/etc/PROBLEMS @@ -1850,6 +1850,12 @@ term/xterm.el) for more details. ** GNU/Linux +*** GNU/Linux: profiler-report outputs nothing. + +A few versions of the Linux kernel have timer bugs that break CPU +profiling; see Bug#34235. To fix the problem, upgrade to kernel +versions 4.19.19 or 4.20.6, or later. + *** GNU/Linux: Process output is corrupted. There is a bug in Linux kernel 2.6.10 PTYs that can cause emacs to