commit 4ccd2688911b90bcb8cdcd2a8de608e09471a91a (HEAD, refs/remotes/origin/master) Author: Lars Ingebrigtsen Date: Wed Feb 10 16:00:12 2016 +1100 * lisp/gnus/gnus-cite.el: Remove XEmacs compat code. diff --git a/lisp/gnus/gnus-cite.el b/lisp/gnus/gnus-cite.el index aa3635f..57f463f 100644 --- a/lisp/gnus/gnus-cite.el +++ b/lisp/gnus/gnus-cite.el @@ -24,9 +24,6 @@ ;;; Code: (eval-when-compile (require 'cl)) -(eval-when-compile - (when (featurep 'xemacs) - (require 'easy-mmode))) ; for `define-minor-mode' (require 'gnus) (require 'gnus-range) @@ -1194,9 +1191,7 @@ Returns nil if there is no such line before LIMIT, t otherwise." (defvar font-lock-keywords) (defvar font-lock-set-defaults) -(eval-and-compile - (unless (featurep 'xemacs) - (autoload 'font-lock-set-defaults "font-lock"))) +(autoload 'font-lock-set-defaults "font-lock") (define-minor-mode gnus-message-citation-mode "Minor mode providing more font-lock support for nested citations. @@ -1206,9 +1201,7 @@ When enabled, it automatically turns on `font-lock-mode'." nil ;; keymap (when (eq major-mode 'message-mode) ;FIXME: Use derived-mode-p. ;; FIXME: Use font-lock-add-keywords! - (let ((defaults (car (if (featurep 'xemacs) - (get 'message-mode 'font-lock-defaults) - font-lock-defaults))) + (let ((defaults (car font-lock-defaults)) default keywords) (while defaults (setq default (if (consp defaults) @@ -1227,19 +1220,11 @@ When enabled, it automatically turns on `font-lock-mode'." gnus-message-citation-keywords)) (kill-local-variable default)))) ;; Force `font-lock-set-defaults' to update `font-lock-keywords'. - (if (featurep 'xemacs) - (progn - (require 'font-lock) - (setq font-lock-defaults-computed nil - font-lock-keywords nil)) - (setq font-lock-set-defaults nil)) + (setq font-lock-set-defaults nil) (font-lock-set-defaults) - (cond (font-lock-mode - (if (fboundp 'font-lock-flush) - (font-lock-flush) - (font-lock-fontify-buffer))) - (gnus-message-citation-mode - (font-lock-mode 1))))) + (if font-lock-mode + (font-lock-flush) + (gnus-message-citation-mode (font-lock-mode 1))))) (defun turn-on-gnus-message-citation-mode () "Turn on `gnus-message-citation-mode'." commit e384370e19f40f6c58e3a0cb8be50b59d6479ab7 Author: Lars Ingebrigtsen Date: Wed Feb 10 15:54:52 2016 +1100 Remove compat code from gnus-bookmark.el * lisp/gnus/gnus-bookmark.el (gnus-bookmark-mouse-available-p): Remove. (gnus-bookmark-remove-properties): Remove. diff --git a/lisp/gnus/gnus-bookmark.el b/lisp/gnus/gnus-bookmark.el index 66ee7c6..a16ac53 100644 --- a/lisp/gnus/gnus-bookmark.el +++ b/lisp/gnus/gnus-bookmark.el @@ -174,17 +174,6 @@ where each BMK is of the form So the cdr of each bookmark is an alist too.") -(defmacro gnus-bookmark-mouse-available-p () - "Return non-nil if a mouse is available." - (if (featurep 'xemacs) - '(device-on-window-system-p) - '(display-mouse-p))) - -(defun gnus-bookmark-remove-properties (string) - "Remove all text properties from STRING." - (set-text-properties 0 (length string) nil string) - string) - ;;;###autoload (defun gnus-bookmark-set () "Set a bookmark for this article." @@ -209,7 +198,7 @@ So the cdr of each bookmark is an alist too.") ;; Set the bookmark list (setq gnus-bookmark-alist (cons - (list (gnus-bookmark-remove-properties bmk-name) + (list (substring-no-properties bmk-name) (gnus-bookmark-make-record group message-id author date subject annotation)) gnus-bookmark-alist)))) @@ -220,12 +209,12 @@ So the cdr of each bookmark is an alist too.") (group message-id author date subject annotation) "Return the record part of a new bookmark, given GROUP MESSAGE-ID AUTHOR DATE SUBJECT and ANNOTATION." (let ((the-record - `((group . ,(gnus-bookmark-remove-properties group)) - (message-id . ,(gnus-bookmark-remove-properties message-id)) - (author . ,(gnus-bookmark-remove-properties author)) - (date . ,(gnus-bookmark-remove-properties date)) - (subject . ,(gnus-bookmark-remove-properties subject)) - (annotation . ,(gnus-bookmark-remove-properties annotation))))) + `((group . ,(substring-no-properties group)) + (message-id . ,(substring-no-properties message-id)) + (author . ,(substring-no-properties author)) + (date . ,(substring-no-properties date)) + (subject . ,(substring-no-properties subject)) + (annotation . ,(substring-no-properties annotation))))) the-record)) (defun gnus-bookmark-set-bookmark-name (group author subject) @@ -387,7 +376,7 @@ deletion, or > if it is flagged for displaying." (insert (if (member (gnus-bookmark-get-annotation name) (list nil "")) " " " *")) - (if (gnus-bookmark-mouse-available-p) + (if (display-mouse-p) (add-text-properties (prog1 (point) @@ -536,7 +525,7 @@ Optional argument SHOW means show them unconditionally." (let ((start (point-at-eol))) (move-to-column gnus-bookmark-bmenu-file-column t) ;; Strip off `mouse-face' from the white spaces region. - (if (gnus-bookmark-mouse-available-p) + (if (display-mouse-p) (remove-text-properties start (point) '(mouse-face nil help-echo nil)))) (delete-region (point) (progn (end-of-line) (point))) @@ -552,7 +541,7 @@ Optional argument SHOW means show them unconditionally." (insert (gnus-bookmark-get-details bmk-name gnus-bookmark-bookmark-inline-details)) - (if (gnus-bookmark-mouse-available-p) + (if (display-mouse-p) (add-text-properties start (save-excursion (re-search-backward @@ -601,7 +590,7 @@ Does not affect the kill ring." (gnus-bookmark-kill-line) (let ((start (point))) (insert (car gnus-bookmark-bmenu-hidden-bookmarks)) - (if (gnus-bookmark-mouse-available-p) + (if (display-mouse-p) (add-text-properties start (save-excursion (re-search-backward commit 4ab7c9e0abb85732d7cc03a77f2fdfd372f2c0e1 Author: Lars Ingebrigtsen Date: Wed Feb 10 15:17:33 2016 +1100 Remove XEmacs compat code from gnus-a*.el * lisp/gnus/gnus-agent.el: Remove compat code. * lisp/gnus/gnus-art.el: Remove compat code. * lisp/gnus/gnus-async.el: Remove compat code. diff --git a/lisp/gnus/gnus-agent.el b/lisp/gnus/gnus-agent.el index 80753c1..ae5cfc6 100644 --- a/lisp/gnus/gnus-agent.el +++ b/lisp/gnus/gnus-agent.el @@ -30,10 +30,8 @@ (require 'gnus-score) (require 'gnus-srvr) (require 'gnus-util) +(require 'timer) (eval-when-compile - (if (featurep 'xemacs) - (require 'itimer) - (require 'timer)) (require 'cl)) (autoload 'gnus-server-update-server "gnus-srvr") @@ -82,28 +80,16 @@ If nil, only read articles will be expired." :group 'gnus-agent :type 'hook) -;; Extracted from gnus-xmas-redefine in order to preserve user settings -(when (featurep 'xemacs) - (add-hook 'gnus-agent-group-mode-hook 'gnus-xmas-agent-group-menu-add)) - (defcustom gnus-agent-summary-mode-hook nil "Hook run in Agent summary minor modes." :group 'gnus-agent :type 'hook) -;; Extracted from gnus-xmas-redefine in order to preserve user settings -(when (featurep 'xemacs) - (add-hook 'gnus-agent-summary-mode-hook 'gnus-xmas-agent-summary-menu-add)) - (defcustom gnus-agent-server-mode-hook nil "Hook run in Agent summary minor modes." :group 'gnus-agent :type 'hook) -;; Extracted from gnus-xmas-redefine in order to preserve user settings -(when (featurep 'xemacs) - (add-hook 'gnus-agent-server-mode-hook 'gnus-xmas-agent-server-menu-add)) - (defcustom gnus-agent-confirmation-function 'y-or-n-p "Function to confirm when error happens." :version "21.1" @@ -252,16 +238,6 @@ NOTES: (defvar gnus-headers) (defvar gnus-score) -;; Added to support XEmacs -(eval-and-compile - (unless (fboundp 'directory-files-and-attributes) - (defun directory-files-and-attributes (directory - &optional full match nosort) - (let (result) - (dolist (file (directory-files directory full match nosort)) - (push (cons file (file-attributes file)) result)) - (nreverse result))))) - ;;; ;;; Setup ;;; @@ -575,14 +551,7 @@ manipulated as follows: (fboundp 'make-mode-line-mouse-map)) (propertize string 'local-map (make-mode-line-mouse-map mouse-button mouse-func) - 'mouse-face - (if (and (featurep 'xemacs) - ;; XEmacs's `facep' only checks for a face - ;; object, not for a face name, so it's useless - ;; to check with `facep'. - (find-face 'modeline)) - 'modeline - 'mode-line-highlight)) + 'mouse-face 'mode-line-highlight) string)) (defun gnus-agent-toggle-plugged (set-to) diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el index ce26b00..5a27bf8 100644 --- a/lisp/gnus/gnus-art.el +++ b/lisp/gnus/gnus-art.el @@ -266,18 +266,11 @@ This can also be a list of the above values." ;; Fixme: This isn't the right thing for mixed graphical and non-graphical ;; frames in a session. (defcustom gnus-article-x-face-command - (if (featurep 'xemacs) - (if (or (gnus-image-type-available-p 'xface) - (gnus-image-type-available-p 'pbm)) - 'gnus-display-x-face-in-from - "{ echo \ + (if (gnus-image-type-available-p 'pbm) + 'gnus-display-x-face-in-from + "{ echo \ '/* Format_version=1, Width=48, Height=48, Depth=1, Valid_bits_per_item=16 */'\ -; uncompface; } | icontopbm | ee -") - (if (gnus-image-type-available-p 'pbm) - 'gnus-display-x-face-in-from - "{ echo \ -'/* Format_version=1, Width=48, Height=48, Depth=1, Valid_bits_per_item=16 */'\ -; uncompface; } | icontopbm | display -")) +; uncompface; } | icontopbm | display -") "*String or function to be executed to display an X-Face header. If it is a string, the command will be executed in a sub-shell asynchronously. The compressed face will be piped to this command." @@ -484,9 +477,7 @@ and the latter avoids underlining any whitespace at all." Example: (_/*word*/_)." :group 'gnus-article-emphasis) -(defface gnus-emphasis-strikethru (if (featurep 'xemacs) - '((t (:strikethru t))) - '((t (:strike-through t)))) +(defface gnus-emphasis-strikethru '((t (:strike-through t))) "Face used for displaying strike-through text (-word-)." :group 'gnus-article-emphasis) @@ -705,13 +696,6 @@ The following additional specs are available: :type 'hook :group 'gnus-article-various) -(when (featurep 'xemacs) - ;; Extracted from gnus-xmas-define in order to preserve user settings - (when (fboundp 'turn-off-scroll-in-place) - (add-hook 'gnus-article-mode-hook 'turn-off-scroll-in-place)) - ;; Extracted from gnus-xmas-redefine in order to preserve user settings - (add-hook 'gnus-article-mode-hook 'gnus-xmas-article-menu-add)) - (defcustom gnus-article-menu-hook nil "*Hook run after the creation of the article mode menu." :type 'hook @@ -877,10 +861,8 @@ be displayed by the first non-nil matching CONTENT face." (item :tag "skip" nil) (face :value default))))) -(defcustom gnus-face-properties-alist (if (featurep 'xemacs) - '((xface . (:face gnus-x-face))) - '((pbm . (:face gnus-x-face)) - (png . nil))) +(defcustom gnus-face-properties-alist '((pbm . (:face gnus-x-face)) + (png . nil)) "Alist of image types and properties applied to Face and X-Face images. Here are examples: @@ -896,8 +878,7 @@ Here are examples: See the manual for the valid properties for various image types. Currently, `pbm' is used for X-Face images and `png' is used for Face -images in Emacs. Only the `:face' property is effective on the `xface' -image type in XEmacs if it is built with the libcompface library." +images in Emacs." :version "23.1" ;; No Gnus :group 'gnus-article-headers :type '(repeat (cons :format "%v" (symbol :tag "Image type") plist))) @@ -1420,14 +1401,12 @@ predicate. See Info node `(gnus)Customizing Articles'." (defcustom gnus-treat-display-x-face (and (not noninteractive) (gnus-image-type-available-p 'xbm) - (if (featurep 'xemacs) - (featurep 'xface) - (condition-case nil - (and (string-match "^0x" (shell-command-to-string "uncompface")) - (executable-find "icontopbm")) - ;; shell-command-to-string may signal an error, e.g. if - ;; shell-file-name is not found. - (error nil))) + (condition-case nil + (and (string-match "^0x" (shell-command-to-string "uncompface")) + (executable-find "icontopbm")) + ;; shell-command-to-string may signal an error, e.g. if + ;; shell-file-name is not found. + (error nil)) 'head) "Display X-Face headers. Valid values are nil and `head'. @@ -2111,21 +2090,17 @@ try this wash." "Translate many Unicode characters into their ASCII equivalents." (interactive) (require 'org-entities) - (let ((table (make-char-table (if (featurep 'xemacs) 'generic)))) + (let ((table (make-char-table nil))) (dolist (elem org-entities) (when (and (listp elem) (= (length (nth 6 elem)) 1)) - (if (featurep 'xemacs) - (put-char-table (aref (nth 6 elem) 0) (nth 4 elem) table) - (set-char-table-range table (aref (nth 6 elem) 0) (nth 4 elem))))) + (set-char-table-range table (aref (nth 6 elem) 0) (nth 4 elem)))) (save-excursion (when (article-goto-body) (let ((inhibit-read-only t) replace props) (while (not (eobp)) - (if (not (setq replace (if (featurep 'xemacs) - (get-char-table (following-char) table) - (aref table (following-char))))) + (if (not (setq replace (aref table (following-char)))) (forward-char 1) (if (prog1 (setq props (text-properties-at (point))) @@ -2323,8 +2298,6 @@ long lines if and only if arg is positive." (insert "X-Boundary: ") (gnus-add-text-properties start (point) gnus-hidden-properties) (insert (let (str (max (window-width))) - (if (featurep 'xemacs) - (setq max (1- max))) (while (>= max (length str)) (setq str (concat str gnus-body-boundary-delimiter))) (substring str 0 max)) @@ -4320,8 +4293,6 @@ If variable `gnus-use-long-file-name' is non-nil, it is (put-text-property (match-end 0) (point-max) 'face eface))))))))) -(autoload 'canlock-verify "canlock" nil t) ;; for XEmacs. - (defun article-verify-cancel-lock () "Verify Cancel-Lock header." (interactive) @@ -4434,13 +4405,9 @@ If variable `gnus-use-long-file-name' is non-nil, it is 'undefined 'gnus-article-read-summary-keys gnus-article-mode-map) (defvar gnus-article-send-map) - (gnus-define-keys (gnus-article-send-map "S" gnus-article-mode-map) - "W" gnus-article-wide-reply-with-original) -(if (featurep 'xemacs) - (set-keymap-default-binding gnus-article-send-map - 'gnus-article-read-summary-send-keys) - (define-key gnus-article-send-map [t] 'gnus-article-read-summary-send-keys)) + "W" gnus-article-wide-reply-with-original + [t] 'gnus-article-read-summary-send-keys) (defun gnus-article-make-menu-bar () (unless (boundp 'gnus-article-commands-menu) @@ -5903,10 +5870,6 @@ all parts." :button-keymap gnus-mime-button-map :help-echo (lambda (widget) - ;; Needed to properly clear the message due to a bug in - ;; wid-edit (XEmacs only). - (if (boundp 'help-echo-owns-message) - (setq help-echo-owns-message t)) (format "%S: %s the MIME part; %S: more options" 'mouse-2 @@ -6604,12 +6567,10 @@ If given a numerical ARG, move forward ARG pages." If end of article, return non-nil. Otherwise return nil. Argument LINES specifies lines to be scrolled up." (interactive "p") - (move-to-window-line (if (featurep 'xemacs) -1 (- -1 scroll-margin))) + (move-to-window-line (- -1 scroll-margin)) (if (and (not (and gnus-article-over-scroll (> (count-lines (window-start) (point-max)) - (if (featurep 'xemacs) - (or lines (1- (window-height))) - (+ (or lines (1- (window-height))) scroll-margin))))) + (+ (or lines (1- (window-height))) scroll-margin)))) (save-excursion (end-of-line) (and (pos-visible-in-window-p) ;Not continuation line. @@ -6635,18 +6596,16 @@ Argument LINES specifies lines to be scrolled up." "Move point to the beginning of the window. In Emacs, the point is placed at the line number which `scroll-margin' specifies." - (if (featurep 'xemacs) - (move-to-window-line 0) - ;; There is an obscure bug in Emacs that makes it impossible to - ;; scroll past big pictures in the article buffer. Try to fix - ;; this by adding a sanity check by counting the lines visible. - (when (> (count-lines (window-start) (window-end)) 30) - (move-to-window-line - (min (max 0 scroll-margin) - (max 1 (- (window-height) - (if mode-line-format 1 0) - (if header-line-format 1 0) - 2))))))) + ;; There is an obscure bug in Emacs that makes it impossible to + ;; scroll past big pictures in the article buffer. Try to fix + ;; this by adding a sanity check by counting the lines visible. + (when (> (count-lines (window-start) (window-end)) 30) + (move-to-window-line + (min (max 0 scroll-margin) + (max 1 (- (window-height) + (if mode-line-format 1 0) + (if header-line-format 1 0) + 2)))))) (defvar scroll-in-place) @@ -6673,10 +6632,7 @@ Argument LINES specifies lines to be scrolled down." (goto-char (point-max)) (recenter (if gnus-article-over-scroll (if lines - (max (if (featurep 'xemacs) - lines - (+ lines scroll-margin)) - 3) + (max (+ lines scroll-margin) 3) (- (window-height) 2)) -1))) (prog1 @@ -6757,9 +6713,7 @@ not have a face in `gnus-article-boring-faces'." (let (gnus-pick-mode) (setq unread-command-events (nconc unread-command-events (list (or key last-command-event))) - keys (if (featurep 'xemacs) - (events-to-keys (read-key-sequence nil t)) - (read-key-sequence nil t))))) + keys (read-key-sequence nil t)))) (message "") @@ -6873,14 +6827,12 @@ KEY is a string or a vector." gnus-article-read-summary-send-keys)) (with-current-buffer gnus-article-current-summary (setq unread-command-events - (if (featurep 'xemacs) - (append key unread-command-events) - (nconc - (mapcar (lambda (x) (if (and (integerp x) (>= x 128)) - (list 'meta (- x 128)) - x)) - key) - unread-command-events))) + (nconc + (mapcar (lambda (x) (if (and (integerp x) (>= x 128)) + (list 'meta (- x 128)) + x)) + key) + unread-command-events)) (let ((cursor-in-echo-area t) gnus-pick-mode) (describe-key (read-key-sequence nil t)))) @@ -6897,14 +6849,12 @@ KEY is a string or a vector." gnus-article-read-summary-send-keys)) (with-current-buffer gnus-article-current-summary (setq unread-command-events - (if (featurep 'xemacs) - (append key unread-command-events) - (nconc - (mapcar (lambda (x) (if (and (integerp x) (>= x 128)) - (list 'meta (- x 128)) - x)) - key) - unread-command-events))) + (nconc + (mapcar (lambda (x) (if (and (integerp x) (>= x 128)) + (list 'meta (- x 128)) + x)) + key) + unread-command-events)) (let ((cursor-in-echo-area t) gnus-pick-mode) (describe-key-briefly (read-key-sequence nil t) insert))) @@ -8962,10 +8912,6 @@ For example: :button-keymap gnus-mime-security-button-map :help-echo (lambda (_widget) - ;; Needed to properly clear the message due to a bug in - ;; wid-edit (XEmacs only). - (when (boundp 'help-echo-owns-message) - (setq help-echo-owns-message t)) (format "%S: show detail; %S: more options" 'mouse-2 diff --git a/lisp/gnus/gnus-async.el b/lisp/gnus/gnus-async.el index a140825..ba72d82 100644 --- a/lisp/gnus/gnus-async.el +++ b/lisp/gnus/gnus-async.el @@ -148,18 +148,13 @@ that was fetched." (with-current-buffer gnus-summary-buffer (let ((next (caadr (gnus-data-find-list article)))) (when next - (if (not (fboundp 'run-with-idle-timer)) - ;; This is either an older Emacs or XEmacs, so we - ;; do this, which leads to slightly slower article - ;; buffer display. - (gnus-async-prefetch-article group next summary) - (when gnus-async-timer - (ignore-errors - (nnheader-cancel-timer 'gnus-async-timer))) - (setq gnus-async-timer - (run-with-idle-timer - 0.1 nil 'gnus-async-prefetch-article - group next summary)))))))) + (when gnus-async-timer + (ignore-errors + (nnheader-cancel-timer 'gnus-async-timer))) + (setq gnus-async-timer + (run-with-idle-timer + 0.1 nil 'gnus-async-prefetch-article + group next summary))))))) (defun gnus-async-prefetch-article (group article summary &optional next) "Possibly prefetch several articles starting with ARTICLE." commit ee506a23ed33c3564d813f4e462947cf5b07712c Author: Lars Ingebrigtsen Date: Wed Feb 10 14:56:30 2016 +1100 Remove gmm compat functions * lisp/gnus/gmm-utils.el (gmm-image-search-load-path): Remove. (gmm-write-region): Remove. (gmm-called-interactively-p): Remove. diff --git a/lisp/gnus/gmm-utils.el b/lisp/gnus/gmm-utils.el index 6049f48..a18b4c7 100644 --- a/lisp/gnus/gmm-utils.el +++ b/lisp/gnus/gmm-utils.el @@ -193,21 +193,6 @@ This is a copy of the `lazy' widget in Emacs 22.1 provided for compatibility." :tag "Other" (symbol :tag "Icon item"))))) -;; (defun gmm-color-cells (&optional display) -;; "Return the number of color cells supported by DISPLAY. -;; Compatibility function." -;; ;; `display-color-cells' doesn't return more than 256 even if color depth is -;; ;; > 8 in Emacs 21. -;; ;; -;; ;; Feel free to add proper XEmacs support. -;; (let* ((cells (and (fboundp 'display-color-cells) -;; (display-color-cells display))) -;; (plane (and (fboundp 'x-display-planes) -;; (ash 1 (x-display-planes)))) -;; (none -1)) -;; (max (if (integerp cells) cells none) -;; (if (integerp plane) plane none)))) - (defcustom gmm-tool-bar-style (if (and (boundp 'tool-bar-mode) tool-bar-mode @@ -338,7 +323,7 @@ compatibility with versions of Emacs that lack the variable (let ((img image) (dir (or ;; Images in image-load-path. - (gmm-image-search-load-path image) ;; "gmm-" prefix! + (image-search-load-path image) ;; Images in load-path. (locate-library image))) parent) @@ -405,30 +390,6 @@ If mode is nil, use `major-mode' of the current buffer." (string-match "^\\(.+\\)-mode$" mode) (match-string 1 mode)))))) -(defun gmm-write-region (start end filename &optional append visit - lockname mustbenew) - "Compatibility function for `write-region'. - -In XEmacs, the seventh argument of `write-region' specifies the -coding-system." - (if (and mustbenew (featurep 'xemacs)) - (if (file-exists-p filename) - (signal 'file-already-exists (list "File exists" filename)) - (write-region start end filename append visit lockname)) - (write-region start end filename append visit lockname mustbenew))) - -;; `interactive-p' is obsolete since Emacs 23.2. -(defmacro gmm-called-interactively-p (kind) - (condition-case nil - (progn - (eval '(called-interactively-p 'any)) - ;; Emacs >=23.2 - `(called-interactively-p ,kind)) - ;; Emacs <23.2 - (wrong-number-of-arguments '(called-interactively-p)) - ;; XEmacs - (void-function '(interactive-p)))) - ;; `labels' is obsolete since Emacs 24.3. (defmacro gmm-labels (bindings &rest body) "Make temporary function bindings. diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el index ac967d2..ce26b00 100644 --- a/lisp/gnus/gnus-art.el +++ b/lisp/gnus/gnus-art.el @@ -2718,7 +2718,7 @@ If READ-CHARSET, ask for a coding system." (while (re-search-forward "\\(\\(https?\\|ftp\\)://\\S-+\\) *\n\\(\\S-+\\)" nil t) (replace-match "\\1\\3" t))) - (when (gmm-called-interactively-p 'any) + (when (called-interactively-p 'any) (gnus-treat-article nil)))) (defun article-wash-html () diff --git a/lisp/gnus/gnus-bookmark.el b/lisp/gnus/gnus-bookmark.el index 0cdbff0..66ee7c6 100644 --- a/lisp/gnus/gnus-bookmark.el +++ b/lisp/gnus/gnus-bookmark.el @@ -367,7 +367,7 @@ The leftmost column displays a D if the bookmark is flagged for deletion, or > if it is flagged for displaying." (interactive) (gnus-bookmark-maybe-load-default-file) - (if (gmm-called-interactively-p 'any) + (if (called-interactively-p 'any) (switch-to-buffer (get-buffer-create "*Gnus Bookmark List*")) (set-buffer (get-buffer-create "*Gnus Bookmark List*"))) (let ((inhibit-read-only t) diff --git a/lisp/gnus/gnus-registry.el b/lisp/gnus/gnus-registry.el index 74e2b82..f49eb0d 100644 --- a/lisp/gnus/gnus-registry.el +++ b/lisp/gnus/gnus-registry.el @@ -1036,7 +1036,7 @@ only the last one's marks are returned." (let* ((article (last articles)) (id (gnus-registry-fetch-message-id-fast article)) (marks (when id (gnus-registry-get-id-key id 'mark)))) - (when (gmm-called-interactively-p 'any) + (when (called-interactively-p 'any) (gnus-message 1 "Marks are %S" marks)) marks)) diff --git a/lisp/gnus/gnus-topic.el b/lisp/gnus/gnus-topic.el index f1b3bd4..3255aa9 100644 --- a/lisp/gnus/gnus-topic.el +++ b/lisp/gnus/gnus-topic.el @@ -1167,7 +1167,7 @@ articles in the topic and its subtopics." (remove-hook 'gnus-check-bogus-groups-hook 'gnus-topic-clean-alist) (setq gnus-group-prepare-function 'gnus-group-prepare-flat) (setq gnus-group-sort-alist-function 'gnus-group-sort-flat)) - (when (gmm-called-interactively-p 'any) + (when (called-interactively-p 'any) (gnus-group-list-groups)))) (defun gnus-topic-select-group (&optional all) diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el index 6ee5264..3c31056 100644 --- a/lisp/gnus/message.el +++ b/lisp/gnus/message.el @@ -3201,7 +3201,7 @@ M-RET `message-newline-and-reformat' (break the line and reformat)." (defun message-goto-body () "Move point to the beginning of the message body." (interactive) - (when (and (gmm-called-interactively-p 'any) + (when (and (called-interactively-p 'any) (looking-at "[ \t]*\n")) (expand-abbrev)) (push-mark) diff --git a/lisp/gnus/mm-util.el b/lisp/gnus/mm-util.el index 106d010..b8da19d 100644 --- a/lisp/gnus/mm-util.el +++ b/lisp/gnus/mm-util.el @@ -1371,8 +1371,6 @@ If INHIBIT is non-nil, inhibit `mm-inhibit-file-name-handlers'." inhibit-file-name-handlers))) (write-region start end filename append visit lockname))) -(autoload 'gmm-write-region "gmm-utils") - ;; It is not a MIME function, but some MIME functions use it. (if (and (fboundp 'make-temp-file) (ignore-errors @@ -1417,11 +1415,7 @@ If SUFFIX is non-nil, add that at the end of the file name." (setq file (concat file suffix))) (if dir-flag (make-directory file) - ;; NOTE: This is unsafe if Emacs 20 - ;; users and XEmacs users don't use - ;; a secure temp directory. - (gmm-write-region "" nil file nil 'silent - nil 'excl)) + (write-region "" nil file nil 'silent nil 'excl)) nil) (file-already-exists t) ;; The XEmacs version of `make-directory' issues diff --git a/lisp/gnus/nnmaildir.el b/lisp/gnus/nnmaildir.el index 3d8926b..70a3dd9 100644 --- a/lisp/gnus/nnmaildir.el +++ b/lisp/gnus/nnmaildir.el @@ -537,8 +537,8 @@ by nnmaildir-request-article.") (prin1 (vector storage-version num msgid nov) (current-buffer)) (setq file (concat novfile ":")) (nnmaildir--unlink file) - (gmm-write-region (point-min) (point-max) file nil 'no-message nil - 'excl)) + (write-region (point-min) (point-max) file nil 'no-message nil + 'excl)) (rename-file file novfile 'replace) (setf (nnmaildir--art-msgid article) msgid) nov))) @@ -1396,8 +1396,8 @@ by nnmaildir-request-article.") (concat "File exists: " tmpfile)) (throw 'return nil)) (with-current-buffer buffer - (gmm-write-region (point-min) (point-max) tmpfile nil 'no-message nil - 'excl)) + (write-region (point-min) (point-max) tmpfile nil 'no-message nil + 'excl)) (unix-sync) ;; no fsync :( (rename-file tmpfile (concat (nnmaildir--cur dir) file suffix) 'replace) t))) @@ -1490,8 +1490,8 @@ by nnmaildir-request-article.") (throw 'return nil)))) (condition-case nil (add-name-to-file nnmaildir--file tmpfile) (error - (gmm-write-region (point-min) (point-max) tmpfile nil 'no-message nil - 'excl) + (write-region (point-min) (point-max) tmpfile nil 'no-message nil + 'excl) (when (fboundp 'unix-sync) (unix-sync)))) ;; no fsync :( (nnheader-cancel-timer 24h) commit c612461fa201fcdb4deb97798974bad3bed9146b Author: Lars Ingebrigtsen Date: Wed Feb 10 14:50:40 2016 +1100 * lisp/gnus/ecomplete.el: Remove XEmacs compat code. diff --git a/lisp/gnus/ecomplete.el b/lisp/gnus/ecomplete.el index 084895c..76beb40 100644 --- a/lisp/gnus/ecomplete.el +++ b/lisp/gnus/ecomplete.el @@ -27,11 +27,6 @@ (eval-when-compile (require 'cl)) -(eval-when-compile - (when (featurep 'xemacs) - ;; The `kbd' macro requires that the `read-kbd-macro' macro is available. - (require 'edmacro))) - (defgroup ecomplete nil "Electric completion of email addresses and the like." :group 'mail) commit 7c7ac0e7fa8d54c8b4274c7e6f33fe8536b5d826 Author: Lars Ingebrigtsen Date: Wed Feb 10 14:50:12 2016 +1100 Remove compat code from compface.el * lisp/gnus/compface.el: Remove XEmacs compat code throughout. diff --git a/lisp/gnus/compface.el b/lisp/gnus/compface.el index cd70d6c..e2f607b 100644 --- a/lisp/gnus/compface.el +++ b/lisp/gnus/compface.el @@ -31,7 +31,7 @@ Requires the external programs `uncompface', and `icontopbm'. On a GNU/Linux system these might be in packages with names like `compface' or `faces-xface' and `netpbm' or `libgr-progs', for instance." (with-temp-buffer - (unless (featurep 'xemacs) (set-buffer-multibyte nil)) + (set-buffer-multibyte nil) (insert face) (let ((coding-system-for-read 'raw-text) ;; At least "icontopbm" doesn't work with Windows because @@ -44,17 +44,10 @@ or `faces-xface' and `netpbm' or `libgr-progs', for instance." (goto-char (point-min)) (insert "/* Format_version=1, Width=48, Height=48, Depth=1,\ Valid_bits_per_item=16 */\n") - ;; I just can't get "icontopbm" to work correctly on its - ;; own in XEmacs. And Emacs doesn't understand un-raw pbm - ;; files. - (if (not (featurep 'xemacs)) - (eq 0 (call-process-region (point-min) (point-max) - "icontopbm" - 'delete '(t nil))) - (shell-command-on-region (point-min) (point-max) - "icontopbm | pnmnoraw" - (current-buffer) t) - t)) + ;; Emacs doesn't understand un-raw pbm files. + (eq 0 (call-process-region (point-min) (point-max) + "icontopbm" + 'delete '(t nil)))) (buffer-string))))) (provide 'compface) commit 14369a976379499b18f9de1a128e5d2c867c84c2 Author: Lars Ingebrigtsen Date: Wed Feb 10 14:47:24 2016 +1100 Remove the now empty gnus-ems.el and references to it diff --git a/lisp/gnus/gnus-ems.el b/lisp/gnus/gnus-ems.el deleted file mode 100644 index 02a9c7b..0000000 --- a/lisp/gnus/gnus-ems.el +++ /dev/null @@ -1,33 +0,0 @@ -;;; gnus-ems.el --- functions for making Gnus work under different Emacsen - -;; Copyright (C) 1995-2016 Free Software Foundation, Inc. - -;; Author: Lars Magne Ingebrigtsen -;; 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: - -;;; Code: - -(eval-when-compile - (require 'cl) - (require 'ring)) - -(provide 'gnus-ems) - -;;; gnus-ems.el ends here diff --git a/lisp/gnus/gnus-fun.el b/lisp/gnus/gnus-fun.el index a6b2730..c1dd333 100644 --- a/lisp/gnus/gnus-fun.el +++ b/lisp/gnus/gnus-fun.el @@ -28,7 +28,6 @@ (require 'cl)) (require 'mm-util) -(require 'gnus-ems) (require 'gnus-util) (require 'gnus) diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el index fe03c81..f66d9ce 100644 --- a/lisp/gnus/gnus-group.el +++ b/lisp/gnus/gnus-group.el @@ -38,7 +38,6 @@ (require 'gnus-undo) (require 'gmm-utils) (require 'time-date) -(require 'gnus-ems) (eval-when-compile (require 'mm-url) diff --git a/lisp/gnus/gnus-msg.el b/lisp/gnus/gnus-msg.el index ff16e4a..8f0dbfd 100644 --- a/lisp/gnus/gnus-msg.el +++ b/lisp/gnus/gnus-msg.el @@ -28,7 +28,6 @@ (eval-when-compile (require 'cl)) (require 'gnus) -(require 'gnus-ems) (require 'message) (require 'gnus-art) (require 'gnus-util) diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el index 10a5f9b..3d6b44c85 100644 --- a/lisp/gnus/gnus.el +++ b/lisp/gnus/gnus.el @@ -3155,10 +3155,6 @@ Return nil if not defined." (setcar (nthcdr 2 (gnus-gethash group gnus-newsrc-hashtb)) info)) -;;; Load the compatibility functions. - -(require 'gnus-ems) - ;;; ;;; Shutdown diff --git a/lisp/gnus/gravatar.el b/lisp/gnus/gravatar.el index 8e5ea31..8694003 100644 --- a/lisp/gnus/gravatar.el +++ b/lisp/gnus/gravatar.el @@ -95,8 +95,6 @@ (cond ((featurep 'xemacs) (require 'gnus-xmas) (defalias 'gravatar-create-image 'gnus-xmas-create-image)) - ((featurep 'gnus-ems) - (defalias 'gravatar-create-image 'gnus-create-image)) (t (require 'image) (defalias 'gravatar-create-image 'create-image)))) diff --git a/lisp/gnus/mml2015.el b/lisp/gnus/mml2015.el index e2e9977..0125ddb 100644 --- a/lisp/gnus/mml2015.el +++ b/lisp/gnus/mml2015.el @@ -780,8 +780,6 @@ If set, it overrides the setting of `mml2015-sign-with-sender'." (autoload 'epg-expand-group "epg-config") (autoload 'epa-select-keys "epa") -(autoload 'gnus-create-image "gnus-ems") - (defun mml2015-epg-key-image (key-id) "Return the image of a key, if any" (with-temp-buffer commit b444e664d0a0be2eefe243345579bb0ebd08b112 Author: Lars Ingebrigtsen Date: Wed Feb 10 14:42:03 2016 +1100 Remove Gnus compat names for mouse bindings * lisp/gnus/gnus-ems.el (gnus-widget-button-keymap): Remove. (gnus-down-mouse-2): Remove. (gnus-down-mouse-3): Remove. diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el index 96d2adb..ac967d2 100644 --- a/lisp/gnus/gnus-art.el +++ b/lisp/gnus/gnus-art.el @@ -4899,8 +4899,8 @@ General format specifiers can also be used. See Info node (defvar gnus-mime-button-map (let ((map (make-sparse-keymap))) - (define-key map gnus-mouse-2 'gnus-article-push-button) - (define-key map gnus-down-mouse-3 'gnus-mime-button-menu) + (define-key map [mouse-2] 'gnus-article-push-button) + (define-key map [down-mouse-3] 'gnus-mime-button-menu) (dolist (c gnus-mime-button-commands) (define-key map (cadr c) (car c))) map)) @@ -5909,10 +5909,10 @@ all parts." (setq help-echo-owns-message t)) (format "%S: %s the MIME part; %S: more options" - (aref gnus-mouse-2 0) + 'mouse-2 (if (mm-handle-displayed-p (widget-get widget :mime-handle)) "hide" "show") - (aref gnus-down-mouse-3 0)))))) + 'down-mouse-3))))) (defun gnus-widget-press-button (elems _el) (goto-char (widget-get elems :from)) @@ -6203,8 +6203,7 @@ If nil, don't show those extra buttons." article-type multipart rear-nonsticky t)) (widget-convert-button 'link from (point) - :action 'gnus-widget-press-button - :button-keymap gnus-widget-button-keymap) + :action 'gnus-widget-press-button) ;; Do the handles (while (setq handle (pop handles)) (gnus-add-text-properties @@ -6228,8 +6227,7 @@ If nil, don't show those extra buttons." gnus-data ,handle rear-nonsticky t)) (widget-convert-button 'link from (point) - :action 'gnus-widget-press-button - :button-keymap gnus-widget-button-keymap) + :action 'gnus-widget-press-button) (insert " ")) (insert "\n\n")) (when preferred @@ -8194,8 +8192,7 @@ url is put as the `gnus-button-url' overlay property on the button." (and data (list 'gnus-data data)))) (widget-convert-button 'link from to :action 'gnus-widget-press-button :help-echo (or text "Follow the link") - :keymap gnus-url-button-map - :button-keymap gnus-widget-button-keymap)) + :keymap gnus-url-button-map)) (defun gnus-article-copy-string () "Copy the string in the button to the kill ring." @@ -8500,13 +8497,13 @@ url is put as the `gnus-button-url' overlay property on the button." (defvar gnus-prev-page-map (let ((map (make-sparse-keymap))) - (define-key map gnus-mouse-2 'gnus-button-prev-page) + (define-key map [mouse-2] 'gnus-button-prev-page) (define-key map "\r" 'gnus-button-prev-page) map)) (defvar gnus-next-page-map (let ((map (make-sparse-keymap))) - (define-key map gnus-mouse-2 'gnus-button-next-page) + (define-key map [mouse-2] 'gnus-button-next-page) (define-key map "\r" 'gnus-button-next-page) map)) @@ -8820,8 +8817,8 @@ For example: (defvar gnus-mime-security-button-map (let ((map (make-sparse-keymap))) - (define-key map gnus-mouse-2 'gnus-article-push-button) - (define-key map gnus-down-mouse-3 'gnus-mime-security-button-menu) + (define-key map [mouse-2] 'gnus-article-push-button) + (define-key map [down-mouse-3] 'gnus-mime-security-button-menu) (dolist (c gnus-mime-security-button-commands) (define-key map (cadr c) (car c))) map)) @@ -8971,8 +8968,8 @@ For example: (setq help-echo-owns-message t)) (format "%S: show detail; %S: more options" - (aref gnus-mouse-2 0) - (aref gnus-down-mouse-3 0)))))) + 'mouse-2 + 'down-mouse-3))))) (defun gnus-mime-display-security (handle) (save-restriction diff --git a/lisp/gnus/gnus-bookmark.el b/lisp/gnus/gnus-bookmark.el index 1a082c2..0cdbff0 100644 --- a/lisp/gnus/gnus-bookmark.el +++ b/lisp/gnus/gnus-bookmark.el @@ -400,7 +400,7 @@ deletion, or > if it is flagged for displaying." (insert "\n"))) `(mouse-face highlight follow-link t help-echo ,(format "%s: go to this article" - (aref gnus-mouse-2 0)))) + 'mouse-2))) (insert name "\n"))) (goto-char (point-min)) (forward-line 2) @@ -463,7 +463,7 @@ That is, all information but the name." (define-key gnus-bookmark-bmenu-mode-map "s" 'gnus-bookmark-bmenu-save) (define-key gnus-bookmark-bmenu-mode-map "t" 'gnus-bookmark-bmenu-toggle-infos) (define-key gnus-bookmark-bmenu-mode-map "a" 'gnus-bookmark-bmenu-show-details) - (define-key gnus-bookmark-bmenu-mode-map gnus-mouse-2 + (define-key gnus-bookmark-bmenu-mode-map [mouse-2] 'gnus-bookmark-bmenu-select-by-mouse)) ;; Bookmark Buffer Menu mode is suitable only for specially formatted @@ -561,7 +561,7 @@ Optional argument SHOW means show them unconditionally." `(mouse-face highlight follow-link t help-echo ,(format "%s: go to this article" - (aref gnus-mouse-2 0)))))))) + 'mouse-2))))))) (defun gnus-bookmark-kill-line (&optional newline-too) "Kill from point to end of line. @@ -611,7 +611,7 @@ Does not affect the kill ring." follow-link t help-echo ,(format "%s: go to this bookmark in other window" - (aref gnus-mouse-2 0)))))) + 'mouse-2))))) (setq gnus-bookmark-bmenu-hidden-bookmarks (cdr gnus-bookmark-bmenu-hidden-bookmarks)) (forward-line 1)))))))) diff --git a/lisp/gnus/gnus-ems.el b/lisp/gnus/gnus-ems.el index 90687e1..02a9c7b 100644 --- a/lisp/gnus/gnus-ems.el +++ b/lisp/gnus/gnus-ems.el @@ -28,13 +28,6 @@ (require 'cl) (require 'ring)) -;;; Function aliases later to be redefined for XEmacs usage. - -(defvar gnus-mouse-2 [mouse-2]) -(defvar gnus-down-mouse-3 [down-mouse-3]) -(defvar gnus-down-mouse-2 [down-mouse-2]) -(defvar gnus-widget-button-keymap nil) - (provide 'gnus-ems) ;;; gnus-ems.el ends here diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el index 63125ef..fe03c81 100644 --- a/lisp/gnus/gnus-group.el +++ b/lisp/gnus/gnus-group.el @@ -632,7 +632,7 @@ simple manner.") "\C-c\C-i" gnus-info-find-node "\M-e" gnus-group-edit-group-method "^" gnus-group-enter-server-mode - gnus-mouse-2 gnus-mouse-pick-group + [mouse-2] gnus-mouse-pick-group [follow-link] 'mouse-face "<" beginning-of-buffer ">" end-of-buffer diff --git a/lisp/gnus/gnus-icalendar.el b/lisp/gnus/gnus-icalendar.el index 050478b..d277c0f 100644 --- a/lisp/gnus/gnus-icalendar.el +++ b/lisp/gnus/gnus-icalendar.el @@ -770,8 +770,7 @@ These will be used to retrieve the RSVP information from ical events." face ,gnus-article-button-face gnus-data ,data)) (widget-convert-button 'link start (point) - :action 'gnus-widget-press-button - :button-keymap gnus-widget-button-keymap))) + :action 'gnus-widget-press-button))) (defun gnus-icalendar-send-buffer-by-mail (buffer-name subject) (let ((message-signature nil)) diff --git a/lisp/gnus/gnus-salt.el b/lisp/gnus/gnus-salt.el index bc25ae6..3509217 100644 --- a/lisp/gnus/gnus-salt.el +++ b/lisp/gnus/gnus-salt.el @@ -76,7 +76,7 @@ It accepts the same format specs that `gnus-summary-line-format' does." " " gnus-pick-next-page "u" gnus-pick-unmark-article-or-thread "." gnus-pick-article-or-thread - gnus-down-mouse-2 gnus-pick-mouse-pick-region + [down-mouse-2] gnus-pick-mouse-pick-region "\r" gnus-pick-start-reading) map)) @@ -458,7 +458,7 @@ Two predefined functions are available: (gnus-define-keys map "\r" gnus-tree-select-article - gnus-mouse-2 gnus-tree-pick-article + [mouse-2] gnus-tree-pick-article "\C-?" gnus-tree-read-summary-keys "h" gnus-tree-show-summary diff --git a/lisp/gnus/gnus-srvr.el b/lisp/gnus/gnus-srvr.el index 7afd053..9f56989 100644 --- a/lisp/gnus/gnus-srvr.el +++ b/lisp/gnus/gnus-srvr.el @@ -156,7 +156,7 @@ If nil, a faster, but more primitive, buffer is used instead." (gnus-define-keys gnus-server-mode-map " " gnus-server-read-server-in-server-buffer "\r" gnus-server-read-server - gnus-mouse-2 gnus-server-pick-server + [mouse-2] gnus-server-pick-server "q" gnus-server-exit "l" gnus-server-list-servers "k" gnus-server-kill-server diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el index 9d0d1fc..d47e6d02 100644 --- a/lisp/gnus/gnus-sum.el +++ b/lisp/gnus/gnus-sum.el @@ -1936,7 +1936,7 @@ increase the score of each group you read." "q" gnus-summary-exit "Q" gnus-summary-exit-no-update "\C-c\C-i" gnus-info-find-node - gnus-mouse-2 gnus-mouse-pick-article + [mouse-2] gnus-mouse-pick-article [follow-link] mouse-face "m" gnus-summary-mail-other-window "a" gnus-summary-post-news diff --git a/lisp/gnus/gnus-topic.el b/lisp/gnus/gnus-topic.el index 35d0f38..f1b3bd4 100644 --- a/lisp/gnus/gnus-topic.el +++ b/lisp/gnus/gnus-topic.el @@ -1065,7 +1065,7 @@ articles in the topic and its subtopics." [(meta tab)] gnus-topic-unindent "\C-i" gnus-topic-indent "\M-\C-i" gnus-topic-unindent - gnus-mouse-2 gnus-mouse-pick-topic) + [mouse-2] gnus-mouse-pick-topic) ;; Define a new submap. (gnus-define-keys (gnus-group-topic-map "T" gnus-group-mode-map) diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el index a9a7726..10a5f9b 100644 --- a/lisp/gnus/gnus.el +++ b/lisp/gnus/gnus.el @@ -3026,7 +3026,7 @@ See Info node `(gnus)Formatting Variables'." (defun gnus-suppress-keymap (keymap) (suppress-keymap keymap) - (let ((keys `([delete] "\177" "\M-u"))) ;gnus-mouse-2 + (let ((keys `([delete] "\177" "\M-u"))) ;[mouse-2] (while keys (define-key keymap (pop keys) 'undefined)))) diff --git a/lisp/gnus/mml.el b/lisp/gnus/mml.el index c767ceb..c748e8e 100644 --- a/lisp/gnus/mml.el +++ b/lisp/gnus/mml.el @@ -50,7 +50,6 @@ (autoload 'message-mail-p "message") (defvar gnus-article-mime-handles) -(defvar gnus-mouse-2) (defvar gnus-newsrc-hashtb) (defvar message-default-charset) (defvar message-deletable-headers) @@ -1602,7 +1601,7 @@ or the `pop-to-buffer' function." (lambda () (interactive) (widget-button-press (point)))) - (local-set-key gnus-mouse-2 + (local-set-key [mouse-2] (lambda (event) (interactive "@e") (widget-button-press (widget-event-point event) event))) commit f962e3cde2710f1514020f1ef35f214f7aa87967 Author: Lars Ingebrigtsen Date: Wed Feb 10 14:34:22 2016 +1100 Drop Gnus compat functions * lisp/gnus/gnus-ems.el (gnus-mule-max-width-function): Remove. * lisp/gnus/gnus-util.el (gnus-kill-all-overlays): Move here. * lisp/gnus/gnus.el (gnus-mode-line-modified): Remove. diff --git a/lisp/gnus/gnus-ems.el b/lisp/gnus/gnus-ems.el index 7c3a2cc..90687e1 100644 --- a/lisp/gnus/gnus-ems.el +++ b/lisp/gnus/gnus-ems.el @@ -34,36 +34,6 @@ (defvar gnus-down-mouse-3 [down-mouse-3]) (defvar gnus-down-mouse-2 [down-mouse-2]) (defvar gnus-widget-button-keymap nil) -(defvar gnus-mode-line-modified - (if (featurep 'xemacs) - '("--**-" . "-----") - '("**" "--"))) - -(eval-and-compile - (autoload 'gnus-xmas-define "gnus-xmas") - (autoload 'gnus-xmas-redefine "gnus-xmas")) - -(autoload 'gnus-get-buffer-create "gnus") -(autoload 'nnheader-find-etc-directory "nnheader") -(autoload 'smiley-region "smiley") - -(defun gnus-kill-all-overlays () - "Delete all overlays in the current buffer." - (let* ((overlayss (overlay-lists)) - (buffer-read-only nil) - (overlays (delq nil (nconc (car overlayss) (cdr overlayss))))) - (while overlays - (delete-overlay (pop overlays))))) - -;;; Mule functions. - -(defun gnus-mule-max-width-function (el max-width) - `(let* ((val (eval (, el))) - (valstr (if (numberp val) - (int-to-string val) val))) - (if (> (length valstr) ,max-width) - (truncate-string-to-width valstr ,max-width) - valstr))) (provide 'gnus-ems) diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el index 8b81c87..63125ef 100644 --- a/lisp/gnus/gnus-group.el +++ b/lisp/gnus/gnus-group.el @@ -633,7 +633,7 @@ simple manner.") "\M-e" gnus-group-edit-group-method "^" gnus-group-enter-server-mode gnus-mouse-2 gnus-mouse-pick-group - [follow-link] mouse-face + [follow-link] 'mouse-face "<" beginning-of-buffer ">" end-of-buffer "\C-c\C-b" gnus-bug @@ -1800,8 +1800,7 @@ already. If INFO-UNCHANGED is non-nil, dribble buffer is not updated." (mode-string (eval gformat))) ;; Say whether the dribble buffer has been modified. (setq mode-line-modified - (if modified (car gnus-mode-line-modified) - (cdr gnus-mode-line-modified))) + (if modified "**" "--")) ;; If the line is too long, we chop it off. (when (> (length mode-string) max-len) (setq mode-string (substring mode-string 0 (- max-len 4)))) diff --git a/lisp/gnus/gnus-spec.el b/lisp/gnus/gnus-spec.el index 380474d..8e8b5d4 100644 --- a/lisp/gnus/gnus-spec.el +++ b/lisp/gnus/gnus-spec.el @@ -227,7 +227,7 @@ Return a list of updated types." (defun gnus-mouse-face-function (form type) `(gnus-put-text-property (point) (progn ,@form (point)) - mouse-face + 'mouse-face ,(if (equal type 0) 'gnus-mouse-face `(quote ,(symbol-value (intern (format "gnus-mouse-face-%d" type))))))) diff --git a/lisp/gnus/gnus-util.el b/lisp/gnus/gnus-util.el index 33d96bd..99565a2 100644 --- a/lisp/gnus/gnus-util.el +++ b/lisp/gnus/gnus-util.el @@ -2069,6 +2069,14 @@ lists of strings." (setq start end end nil)))))) +(defun gnus-kill-all-overlays () + "Delete all overlays in the current buffer." + (let* ((overlayss (overlay-lists)) + (buffer-read-only nil) + (overlays (delq nil (nconc (car overlayss) (cdr overlayss))))) + (while overlays + (delete-overlay (pop overlays))))) + (provide 'gnus-util) ;;; gnus-util.el ends here diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el index 2690e5e..a9a7726 100644 --- a/lisp/gnus/gnus.el +++ b/lisp/gnus/gnus.el @@ -3448,7 +3448,7 @@ that that variable is buffer-local to the summary buffers." (defun gnus-simplify-mode-line () "Make mode lines a bit simpler." - (setq mode-line-modified (cdr gnus-mode-line-modified)) + (setq mode-line-modified "--") (when (listp mode-line-format) (make-local-variable 'mode-line-format) (setq mode-line-format (copy-sequence mode-line-format)) commit a3c2634f90ae744ae53c408257c416a9645cf158 Author: Lars Ingebrigtsen Date: Wed Feb 10 14:24:11 2016 +1100 Get rid of gnus-ems-redefine * lisp/gnus/gnus-ems.el (gnus-mouse-face-prop): Remove. diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el index 147c258..96d2adb 100644 --- a/lisp/gnus/gnus-art.el +++ b/lisp/gnus/gnus-art.el @@ -6197,7 +6197,7 @@ If nil, don't show those extra buttons." (gnus-mime-display-alternative ',ihandles ',not-pref ',begend ,id)) keymap ,gnus-mime-button-map - ,gnus-mouse-face-prop ,gnus-article-mouse-face + mouse-face ,gnus-article-mouse-face face ,gnus-article-button-face gnus-part ,id article-type multipart @@ -6222,7 +6222,7 @@ If nil, don't show those extra buttons." (gnus-mime-display-alternative ',ihandles ',handle ',begend ,id)) keymap ,gnus-mime-button-map - ,gnus-mouse-face-prop ,gnus-article-mouse-face + mouse-face ,gnus-article-mouse-face face ,gnus-article-button-face gnus-part ,id gnus-data ,handle @@ -8189,7 +8189,7 @@ url is put as the `gnus-button-url' overlay property on the button." (gnus-add-text-properties from to (nconc (and gnus-article-mouse-face - (list gnus-mouse-face-prop gnus-article-mouse-face)) + (list 'mouse-face gnus-article-mouse-face)) (list 'gnus-callback fun) (and data (list 'gnus-data data)))) (widget-convert-button 'link from to :action 'gnus-widget-press-button @@ -9018,8 +9018,6 @@ For example: (interactive) (gnus-mime-security-run-function 'mm-pipe-part)) -(gnus-ems-redefine) - (provide 'gnus-art) (run-hooks 'gnus-art-load-hook) diff --git a/lisp/gnus/gnus-cite.el b/lisp/gnus/gnus-cite.el index 502a3be..aa3635f 100644 --- a/lisp/gnus/gnus-cite.el +++ b/lisp/gnus/gnus-cite.el @@ -1248,8 +1248,6 @@ When enabled, it automatically turns on `font-lock-mode'." "Turn off `gnus-message-citation-mode'." (gnus-message-citation-mode -1)) -(gnus-ems-redefine) - (provide 'gnus-cite) ;; Local Variables: diff --git a/lisp/gnus/gnus-ems.el b/lisp/gnus/gnus-ems.el index 167bc80..7c3a2cc 100644 --- a/lisp/gnus/gnus-ems.el +++ b/lisp/gnus/gnus-ems.el @@ -65,47 +65,6 @@ (truncate-string-to-width valstr ,max-width) valstr))) -(eval-and-compile - (if (featurep 'xemacs) - (gnus-xmas-define) - (defvar gnus-mouse-face-prop 'mouse-face - "Property used for highlighting mouse regions."))) - -(defvar gnus-tmp-unread) -(defvar gnus-tmp-replied) -(defvar gnus-tmp-score-char) -(defvar gnus-tmp-indentation) -(defvar gnus-tmp-opening-bracket) -(defvar gnus-tmp-lines) -(defvar gnus-tmp-name) -(defvar gnus-tmp-closing-bracket) -(defvar gnus-tmp-subject-or-nil) -(defvar gnus-check-before-posting) -(defvar gnus-mouse-face) -(defvar gnus-group-buffer) - -(defun gnus-ems-redefine () - (cond - ((featurep 'mule) - ;; Mule and new Emacs definitions - - ;; [Note] Now there are three kinds of mule implementations, - ;; original MULE, XEmacs/mule and Emacs 20+ including - ;; MULE features. Unfortunately these APIs are different. In - ;; particular, Emacs (including original Mule) and XEmacs are - ;; quite different. However, this version of Gnus doesn't support - ;; anything other than XEmacs 20+ and Emacs 20.3+. - - ;; Predicates to check are following: - ;; (boundp 'MULE) is t only if Mule (original; anything older than - ;; Mule 2.3) is running. - ;; (featurep 'mule) is t when other mule variants are running. - - ;; It is possible to detect XEmacs/mule by (featurep 'mule) and - ;; (featurep 'xemacs). In this case, the implementation for - ;; XEmacs/mule may be shareable between XEmacs and XEmacs/mule. - ))) - (provide 'gnus-ems) ;;; gnus-ems.el ends here diff --git a/lisp/gnus/gnus-msg.el b/lisp/gnus/gnus-msg.el index b95bec2..ff16e4a 100644 --- a/lisp/gnus/gnus-msg.el +++ b/lisp/gnus/gnus-msg.el @@ -2006,10 +2006,6 @@ this is a reply." (insert "From: " (message-make-from) "\n")))) nil 'local))))) -;;; Allow redefinition of functions. - -(gnus-ems-redefine) - (provide 'gnus-msg) ;;; gnus-msg.el ends here diff --git a/lisp/gnus/gnus-salt.el b/lisp/gnus/gnus-salt.el index d3e82fd..bc25ae6 100644 --- a/lisp/gnus/gnus-salt.el +++ b/lisp/gnus/gnus-salt.el @@ -889,9 +889,6 @@ it in the environment specified by BINDINGS." (set-window-point (gnus-get-buffer-window (current-buffer) t) (cdr region))))))) -;;; Allow redefinition of functions. -(gnus-ems-redefine) - (provide 'gnus-salt) ;;; gnus-salt.el ends here diff --git a/lisp/gnus/gnus-spec.el b/lisp/gnus/gnus-spec.el index 87b9b25..380474d 100644 --- a/lisp/gnus/gnus-spec.el +++ b/lisp/gnus/gnus-spec.el @@ -79,7 +79,6 @@ text properties. This is only needed on XEmacs, as Emacs does this anyway." (defvar gnus-tmp-news-method) (defvar gnus-tmp-news-server) (defvar gnus-mouse-face) -(defvar gnus-mouse-face-prop) (defvar gnus-tmp-header) (defvar gnus-tmp-from) @@ -228,7 +227,7 @@ Return a list of updated types." (defun gnus-mouse-face-function (form type) `(gnus-put-text-property (point) (progn ,@form (point)) - gnus-mouse-face-prop + mouse-face ,(if (equal type 0) 'gnus-mouse-face `(quote ,(symbol-value (intern (format "gnus-mouse-face-%d" type))))))) @@ -743,7 +742,7 @@ If PROPS, insert the result." gnus-tmp-name)) gnus-tmp-closing-bracket) (point)) - gnus-mouse-face-prop gnus-mouse-face) + 'mouse-face gnus-mouse-face) (insert " " gnus-tmp-subject-or-nil "\n")) (provide 'gnus-spec) diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el index b02e8fd..9d0d1fc 100644 --- a/lisp/gnus/gnus-sum.el +++ b/lisp/gnus/gnus-sum.el @@ -12462,7 +12462,7 @@ If REVERSE, save parts that do not match TYPE." (forward-line -1) ; back to `b' (gnus-add-text-properties b (1- e) (list 'gnus-number gnus-reffed-article-number - gnus-mouse-face-prop gnus-mouse-face)) + 'mouse-face gnus-mouse-face)) (gnus-data-enter after-article gnus-reffed-article-number gnus-unread-mark b (car pslist) 0 (- e b)) @@ -12604,16 +12604,16 @@ If REVERSE, save parts that do not match TYPE." (let* ((beg (point-at-bol)) (end (point-at-eol)) ;; Fix by Mike Dugan . - (from (if (get-text-property beg gnus-mouse-face-prop) + (from (if (get-text-property beg 'mouse-face) beg (or (next-single-property-change - beg gnus-mouse-face-prop nil end) + beg 'mouse-face nil end) beg))) (to (if (= from end) (- from 2) (or (next-single-property-change - from gnus-mouse-face-prop nil end) + from 'mouse-face nil end) end)))) ;; If no mouse-face prop on line we will have to = from = end, ;; so we highlight the entire line instead. @@ -13118,8 +13118,6 @@ BOOKMARK is a bookmark name or a bookmark record." (gnus-summary-make-all-marking-commands) -(gnus-ems-redefine) - (provide 'gnus-sum) (run-hooks 'gnus-sum-load-hook) diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el index 996bb9e..2690e5e 100644 --- a/lisp/gnus/gnus.el +++ b/lisp/gnus/gnus.el @@ -4435,10 +4435,6 @@ prompt the user for the name of an NNTP server to use." (require 'debbugs-gnu) (debbugs-gnu nil "gnus")) -;; Allow redefinition of Gnus functions. - -(gnus-ems-redefine) - (provide 'gnus) ;;; gnus.el ends here commit 5b458e9ec92f02fcdcd1642263af440f5b6395d8 Author: Lars Ingebrigtsen Date: Wed Feb 10 14:19:26 2016 +1100 * lisp/gnus/gnus-spec.el: Move definition here from gnus-ems.el. diff --git a/lisp/gnus/gnus-ems.el b/lisp/gnus/gnus-ems.el index d25213a..167bc80 100644 --- a/lisp/gnus/gnus-ems.el +++ b/lisp/gnus/gnus-ems.el @@ -104,24 +104,7 @@ ;; It is possible to detect XEmacs/mule by (featurep 'mule) and ;; (featurep 'xemacs). In this case, the implementation for ;; XEmacs/mule may be shareable between XEmacs and XEmacs/mule. - - (defun gnus-summary-line-format-spec () - (insert gnus-tmp-unread gnus-tmp-replied - gnus-tmp-score-char gnus-tmp-indentation) - (put-text-property - (point) - (progn - (insert - gnus-tmp-opening-bracket - (format "%4d: %-20s" - gnus-tmp-lines - (if (> (length gnus-tmp-name) 20) - (truncate-string-to-width gnus-tmp-name 20) - gnus-tmp-name)) - gnus-tmp-closing-bracket) - (point)) - gnus-mouse-face-prop gnus-mouse-face) - (insert " " gnus-tmp-subject-or-nil "\n"))))) + ))) (provide 'gnus-ems) diff --git a/lisp/gnus/gnus-spec.el b/lisp/gnus/gnus-spec.el index 2176e3f..87b9b25 100644 --- a/lisp/gnus/gnus-spec.el +++ b/lisp/gnus/gnus-spec.el @@ -727,6 +727,25 @@ If PROPS, insert the result." (symbol-value (intern (format "gnus-%s-line-format-alist" type))) insertable))) + + (defun gnus-summary-line-format-spec () + (insert gnus-tmp-unread gnus-tmp-replied + gnus-tmp-score-char gnus-tmp-indentation) + (put-text-property + (point) + (progn + (insert + gnus-tmp-opening-bracket + (format "%4d: %-20s" + gnus-tmp-lines + (if (> (length gnus-tmp-name) 20) + (truncate-string-to-width gnus-tmp-name 20) + gnus-tmp-name)) + gnus-tmp-closing-bracket) + (point)) + gnus-mouse-face-prop gnus-mouse-face) + (insert " " gnus-tmp-subject-or-nil "\n")) + (provide 'gnus-spec) ;; Local Variables: commit cf1083823b8e7b2844ca85bf766b162697c66839 Author: Lars Ingebrigtsen Date: Wed Feb 10 14:12:42 2016 +1100 Remove Gnus compat code * lisp/gnus/gnus-ems.el (gnus-ems-redefine): Remove transitional code from ten years ago. diff --git a/lisp/gnus/gnus-ems.el b/lisp/gnus/gnus-ems.el index a0cd48e..d25213a 100644 --- a/lisp/gnus/gnus-ems.el +++ b/lisp/gnus/gnus-ems.el @@ -105,11 +105,6 @@ ;; (featurep 'xemacs). In this case, the implementation for ;; XEmacs/mule may be shareable between XEmacs and XEmacs/mule. - (when (boundp 'gnus-check-before-posting) - (setq gnus-check-before-posting - (delq 'long-lines - (delq 'control-chars gnus-check-before-posting)))) - (defun gnus-summary-line-format-spec () (insert gnus-tmp-unread gnus-tmp-replied gnus-tmp-score-char gnus-tmp-indentation) commit 7c1a75da5b57af136f3ed063e87fcd2420d86252 Author: Lars Ingebrigtsen Date: Wed Feb 10 13:47:58 2016 +1100 Allow interactively scaling past :max-width etc * lisp/image.el (image--current-scaling) (image--image-without-parameters): New functions. (image--change-size): Use them to allow changing the size of a image even if it has :width/:max-width (etc.) already set. diff --git a/lisp/image.el b/lisp/image.el index 1b07ee2..855dffa 100644 --- a/lisp/image.el +++ b/lisp/image.el @@ -931,18 +931,18 @@ has no effect." If N is 3, then the image size will be increased by 30%. The default is 20%." (interactive "P") - (image-change-size (if n - (1+ (/ n 10)) - 1.2))) + (image--change-size (if n + (1+ (/ n 10)) + 1.2))) (defun image-decrease-size (n) "Decrease the image size by a factor of N. If N is 3, then the image size will be decreased by 30%. The default is 20%." (interactive "P") - (image-change-size (if n - (- 1 (/ n 10)) - 0.8))) + (image--change-size (if n + (- 1 (/ n 10)) + 0.8))) (defun image--get-image () (let ((image (or (get-text-property (point) 'display) @@ -964,10 +964,30 @@ default is 20%." (plist-put (cdr image) :type 'imagemagick) image)) -(defun image-change-size (factor) - (let ((image (image--get-imagemagick-and-warn))) - (plist-put (cdr image) :scale - (* (or (plist-get (cdr image) :scale) 1) factor)))) +(defun image--change-size (factor) + (let* ((image (image--get-imagemagick-and-warn)) + (new-image (image--image-without-parameters image)) + (scale (image--current-scaling image new-image))) + (setcdr image (cdr new-image)) + (plist-put (cdr image) :scale (* scale factor)))) + +(defun image--image-without-parameters (image) + (cons (pop image) + (let ((new nil)) + (while image + (let ((key (pop image)) + (val (pop image))) + (unless (memq key '(:scale :width :height :max-width :max-height)) + (setq new (nconc new (list key val)))))) + new))) + +(defun image--current-scaling (image new-image) + ;; The image may be scaled due to many reasons (:scale, :max-width, + ;; etc), so find out what the current scaling is based on the + ;; original image size and the displayed size. + (let ((image-width (car (image-size new-image t))) + (display-width (car (image-size image t)))) + (/ (float display-width) image-width))) (defun image-rotate () "Rotate the image under point by 90 degrees clockwise." commit 318f76a5792551b7ff19d80a00fade162a92c9d2 Author: Lars Ingebrigtsen Date: Wed Feb 10 12:57:07 2016 +1100 * lisp/gnus/mm-decode.el (shr-image-map): Compilation fix. diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el index 598ae94..06159bc 100644 --- a/lisp/gnus/mm-decode.el +++ b/lisp/gnus/mm-decode.el @@ -1893,6 +1893,7 @@ If RECURSIVE, search recursively." ,(point-max-marker)))))))) (defvar shr-map) +(defvar shr-image-map) (autoload 'widget-convert-button "wid-edit") commit 211cdd3ff29e345c4986d9f8c9f04a90a3446742 Author: Lars Ingebrigtsen Date: Wed Feb 10 12:56:21 2016 +1100 Allow accessing the image commands via shr * lisp/gnus/mm-decode.el (mm-convert-shr-links): Allow accessing the image commands. * lisp/net/shr.el (shr-image-map): New map used for images. (shr-urlify): Don't overwrite image maps when applying URL maps. diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el index c45258e..598ae94 100644 --- a/lisp/gnus/mm-decode.el +++ b/lisp/gnus/mm-decode.el @@ -1906,7 +1906,8 @@ If RECURSIVE, search recursively." (widget-convert-button 'url-link start end :help-echo (get-text-property start 'help-echo) - :keymap shr-map + ;;; FIXME Should only use the image map on images. + :keymap shr-image-map (get-text-property start 'shr-url)) (put-text-property start end 'local-map nil) (dolist (overlay (overlays-at start)) diff --git a/lisp/net/eww.el b/lisp/net/eww.el index fdac464..7f9f4fa 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el @@ -223,7 +223,7 @@ See also `eww-form-checkbox-selected-symbol'." "When this regex is found in the URL, it's not a keyword but an address.") (defvar eww-link-keymap - (let ((map (copy-keymap shr-map))) + (let ((map (copy-keymap shr-image-map))) (define-key map "\r" 'eww-follow-link) map)) diff --git a/lisp/net/shr.el b/lisp/net/shr.el index 9064b96..339f877 100644 --- a/lisp/net/shr.el +++ b/lisp/net/shr.el @@ -189,6 +189,11 @@ and other things: (define-key map "\r" 'shr-browse-url) map)) +(defvar shr-image-map + (let ((map (copy-keymap shr-map))) + (set-keymap-parent map image-map) + map)) + ;; Public functions and commands. (declare-function libxml-parse-html-region "xml.c" (start end &optional base-url discard-comments)) @@ -1076,8 +1081,15 @@ START, and END. Note that START and END should be markers." url))) (if title (format "%s (%s)" iri title) iri)) 'follow-link t - 'mouse-face 'highlight - 'keymap shr-map))) + 'mouse-face 'highlight)) + ;; Don't overwrite any keymaps that are already in the buffer (i.e., + ;; image keymaps). + (while (and start + (< start (point))) + (let ((next (next-single-property-change start 'keymap nil (point)))) + (if (get-text-property start 'keymap) + (setq start next) + (put-text-property start (or next (point)) 'keymap shr-map))))) (defun shr-encode-url (url) "Encode URL." @@ -1457,7 +1469,7 @@ The preference is a float determined from `shr-prefer-media-type'." (list (current-buffer) start (set-marker (make-marker) (1- (point)))) t t))) (when (zerop shr-table-depth) ;; We are not in a table. - (put-text-property start (point) 'keymap shr-map) + (put-text-property start (point) 'keymap shr-image-map) (put-text-property start (point) 'shr-alt alt) (put-text-property start (point) 'image-url url) (put-text-property start (point) 'image-displayer commit b473cf4e4dfef92b368cfdf6ceab0e70b03f95a3 Author: Lars Ingebrigtsen Date: Wed Feb 10 12:32:28 2016 +1100 Use a sparse image keymap * lisp/image.el (image-map): Use a sparse keymap. diff --git a/lisp/image.el b/lisp/image.el index 4f2733a..1b07ee2 100644 --- a/lisp/image.el +++ b/lisp/image.el @@ -141,7 +141,7 @@ based on the font pixel size." ;; Map put into text properties on images. (defvar image-map - (let ((map (make-keymap))) + (let ((map (make-sparse-keymap))) (define-key map "-" 'image-decrease-size) (define-key map "+" 'image-increase-size) (define-key map "r" 'image-rotate) commit f7405a094b5f2ef642f920a17ce8e30ff81f6f35 Author: Lars Ingebrigtsen Date: Wed Feb 10 12:03:55 2016 +1100 Put a keymap on images created with insert-image and friends * lisp/image.el (image-save): New command. (image-rotate): Ditto. (image-map): New keymap. (insert-image): Put the image-map on all images. (insert-sliced-image): Ditto. * doc/lispref/display.texi (Showing Images): Document the image map. diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index c8e7e4f..26f3de4 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi @@ -5508,6 +5508,26 @@ cache, it can always be displayed, even if the value of @code{max-image-size} is subsequently changed (@pxref{Image Cache}). @end defvar +Images inserted with the insertion functions above also get a local +keymap installed in the text properties (or overlays) that span the +displayed image. This keymap defines the following commands: + +@table @kbd +@item + +Increase the image size (@code{image-increase-size}). A prefix value +of @samp{4} means to increase the size by 40%. The default is 20%. + +@item - +Decrease the image size (@code{image-increase-size}). A prefix value +of @samp{4} means to decrease the size by 40%. The default is 20%. + +@item r +Rotate the image by 90 degrees (@code{image-rotate}). + +@item o +Save the image to a file (@code{image-save}). +@end table + @node Multi-Frame Images @subsection Multi-Frame Images @cindex multi-frame images diff --git a/etc/NEWS b/etc/NEWS index 750d671..957b0c2 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -824,11 +824,6 @@ while in non-`visual-line-mode' it will move the point to the indented header’s value. +++ -** Images are automatically scaled before displaying based on the -`image-scaling-factor' variable (if Emacs supports scaling the images -in question). - -+++ ** In Show Paren Mode, a parenthesis can be highlighted when point stands inside it, and certain parens can be highlighted when point is at BOL or EOL, or in whitespace there. To enable these, customize, @@ -839,6 +834,18 @@ respectively, `show-paren-when-point-inside-paren' or ** If gpg2 exists on the system, it is now used as the default value of `epg-gpg-program' (instead of gpg). +** Images + ++++ +*** Images are automatically scaled before displaying based on the +`image-scaling-factor' variable (if Emacs supports scaling the images +in question). + +*** Images inserted with `insert-image' and related functions get a +keymap put into the text properties (or overlays) that span the +image. This keymap binds keystrokes for manipulating size and +rotation, as well as saving the image to a file. + ** Lisp mode --- diff --git a/lisp/image.el b/lisp/image.el index b69d3b1..4f2733a 100644 --- a/lisp/image.el +++ b/lisp/image.el @@ -139,6 +139,15 @@ based on the font pixel size." :group 'image :version "25.2") +;; Map put into text properties on images. +(defvar image-map + (let ((map (make-keymap))) + (define-key map "-" 'image-decrease-size) + (define-key map "+" 'image-increase-size) + (define-key map "r" 'image-rotate) + (define-key map "o" 'image-save) + map)) + (defun image-load-path-for-library (library image &optional path no-error) "Return a suitable search path for images used by LIBRARY. @@ -466,6 +475,7 @@ means display it in the right marginal area." (put-text-property 0 (length string) 'display prop string) (overlay-put overlay 'put-image t) (overlay-put overlay 'before-string string) + (overlay-put overlay 'map image-map) overlay))) @@ -505,7 +515,9 @@ height of the image; integer values are taken as pixel values." (add-text-properties start (point) `(display ,(if slice (list (cons 'slice slice) image) - image) rear-nonsticky (display))))) + image) + rear-nonsticky (display) + keymap ,image-map)))) ;;;###autoload @@ -541,7 +553,8 @@ The image is automatically split into ROWS x COLS slices." (insert string) (add-text-properties start (point) `(display ,(list (list 'slice x y dx dy) image) - rear-nonsticky (display))) + rear-nonsticky (display) + keymap ,image-map)) (setq x (+ x dx)))) (setq x 0.0 y (+ y dy)) @@ -931,17 +944,55 @@ default is 20%." (- 1 (/ n 10)) 0.8))) -(defun image-change-size (factor) - (unless (fboundp 'imagemagick-types) - (error "Can't rescale images without ImageMagick support")) - (let ((image (get-text-property (point) 'display))) +(defun image--get-image () + (let ((image (or (get-text-property (point) 'display) + ;; `put-image' uses overlays, so find an image in + ;; the overlays. + (seq-find (lambda (overlay) + (overlay-get overlay 'display)) + (overlays-at (point)))))) (when (or (not (consp image)) (not (eq (car image) 'image))) (error "No image under point")) + image)) + +(defun image--get-imagemagick-and-warn () + (unless (fboundp 'imagemagick-types) + (error "Can't rescale images without ImageMagick support")) + (let ((image (image--get-image))) + (image-flush image) (plist-put (cdr image) :type 'imagemagick) + image)) + +(defun image-change-size (factor) + (let ((image (image--get-imagemagick-and-warn))) (plist-put (cdr image) :scale (* (or (plist-get (cdr image) :scale) 1) factor)))) +(defun image-rotate () + "Rotate the image under point by 90 degrees clockwise." + (interactive) + (let ((image (image--get-imagemagick-and-warn))) + (plist-put (cdr image) :rotation + (float (+ (or (plist-get (cdr image) :rotation) 0) 90))))) + +(defun image-save () + "Save the image under point." + (interactive) + (let ((image (get-text-property (point) 'display))) + (when (or (not (consp image)) + (not (eq (car image) 'image))) + (error "No image under point")) + (with-temp-buffer + (let ((file (plist-get (cdr image) :file))) + (if file + (if (not (file-exists-p file)) + (error "File %s no longer exists" file) + (insert-file-contents-literally file)) + (insert (plist-get (cdr image) :data)))) + (write-region (point-min) (point-max) + (read-file-name "Write image to file: "))))) + (provide 'image) ;;; image.el ends here commit 6c54541fcc4cb4b57a476234f385aebdc3292a25 Author: Lars Ingebrigtsen Date: Wed Feb 10 11:14:45 2016 +1100 Fix some folding issues in read-multiple-choice * lisp/subr.el (read-multiple-choice): Fix folding when you have many items. diff --git a/lisp/subr.el b/lisp/subr.el index f70f3ed..447c3eb 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -2340,9 +2340,10 @@ Usage example: ;; Add padding. (while (not (eobp)) (end-of-line) - (insert (make-string (- (* (mod times columns) - (+ fill-column 4)) - (current-column)) + (insert (make-string (max (- (* (mod times columns) + (+ fill-column 4)) + (current-column)) + 0) ?\s)) (forward-line 1)))) (setq times (1+ times)) @@ -2354,10 +2355,11 @@ Usage example: (cdr (assq (car elem) altered-names)))) (fill-region (point-min) (point-max)) (when (nth 2 elem) - (insert (nth 2 elem)) - (unless (bolp) - (insert "\n")) - (fill-region start (point-max))) + (let ((start (point))) + (insert (nth 2 elem)) + (unless (bolp) + (insert "\n")) + (fill-region start (point-max)))) (buffer-string)))) (goto-char start) (dolist (line (split-string text "\n")) commit 4d18c953c1200418a4b3ca6e1ad4d25d8369483f Author: Lars Ingebrigtsen Date: Wed Feb 10 10:59:25 2016 +1100 Fix typo in last checkin diff --git a/lisp/gnus/gnus-ems.el b/lisp/gnus/gnus-ems.el index 0c18f02..a0cd48e 100644 --- a/lisp/gnus/gnus-ems.el +++ b/lisp/gnus/gnus-ems.el @@ -114,7 +114,7 @@ (insert gnus-tmp-unread gnus-tmp-replied gnus-tmp-score-char gnus-tmp-indentation) (put-text-property -g (point) + (point) (progn (insert gnus-tmp-opening-bracket commit 31c1a3df47d6178962443f92e6e235d327b60df5 Author: Lars Ingebrigtsen Date: Wed Feb 10 10:58:59 2016 +1100 Remove Gnus compat functions * lisp/gnus/gnus-ems.el (gnus-mark-active-p) (gnus-region-active-p, gnus-select-lowest-window) (gnus-summary-display-table, gnus-max-width-function): Remove compat functions. diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el index 238a67f..147c258 100644 --- a/lisp/gnus/gnus-art.el +++ b/lisp/gnus/gnus-art.el @@ -6980,7 +6980,7 @@ the entire article will be yanked." (interactive) (let ((article (cdr gnus-article-current)) contents) - (if (not (gnus-region-active-p)) + (if (not (and transient-mark-mode mark-active)) (with-current-buffer gnus-summary-buffer (gnus-summary-reply (list (list article)) wide)) (setq contents (buffer-substring (point) (mark t))) @@ -7006,7 +7006,7 @@ the entire article will be yanked." (interactive) (let ((article (cdr gnus-article-current)) contents) - (if (not (gnus-region-active-p)) + (if (not (and transient-mark-mode mark-active)) (with-current-buffer gnus-summary-buffer (gnus-summary-followup (list (list article)))) (setq contents (buffer-substring (point) (mark t))) diff --git a/lisp/gnus/gnus-ems.el b/lisp/gnus/gnus-ems.el index a4c091e..0c18f02 100644 --- a/lisp/gnus/gnus-ems.el +++ b/lisp/gnus/gnus-ems.el @@ -86,9 +86,6 @@ (defun gnus-ems-redefine () (cond - ((featurep 'xemacs) - (gnus-xmas-redefine)) - ((featurep 'mule) ;; Mule and new Emacs definitions @@ -108,10 +105,6 @@ ;; (featurep 'xemacs). In this case, the implementation for ;; XEmacs/mule may be shareable between XEmacs and XEmacs/mule. - (defvar gnus-summary-display-table nil - "Display table used in summary mode buffers.") - (defalias 'gnus-max-width-function 'gnus-mule-max-width-function) - (when (boundp 'gnus-check-before-posting) (setq gnus-check-before-posting (delq 'long-lines @@ -121,7 +114,7 @@ (insert gnus-tmp-unread gnus-tmp-replied gnus-tmp-score-char gnus-tmp-indentation) (put-text-property - (point) +g (point) (progn (insert gnus-tmp-opening-bracket @@ -135,29 +128,6 @@ gnus-mouse-face-prop gnus-mouse-face) (insert " " gnus-tmp-subject-or-nil "\n"))))) -;; Clone of `appt-select-lowest-window' in appt.el. -(defun gnus-select-lowest-window () -"Select the lowest window on the frame." - (let ((lowest-window (selected-window)) - (bottom-edge (nth 3 (window-edges)))) - (walk-windows (lambda (w) - (let ((next-bottom-edge (nth 3 (window-edges w)))) - (when (< bottom-edge next-bottom-edge) - (setq bottom-edge next-bottom-edge - lowest-window w))))) - (select-window lowest-window))) - -(defun gnus-region-active-p () - "Say whether the region is active." - (and (boundp 'transient-mark-mode) - transient-mark-mode - (boundp 'mark-active) - mark-active)) - -(defun gnus-mark-active-p () - "Non-nil means the mark and region are currently active in this buffer." - mark-active) ; aliased to region-exists-p in XEmacs. - (provide 'gnus-ems) ;;; gnus-ems.el ends here diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el index 1cd16a4..8b81c87 100644 --- a/lisp/gnus/gnus-group.el +++ b/lisp/gnus/gnus-group.el @@ -905,14 +905,14 @@ simple manner.") (memq (gnus-group-group-name) gnus-group-marked))] ["Unmark all" gnus-group-unmark-all-groups gnus-group-marked] ["Mark regexp..." gnus-group-mark-regexp t] - ["Mark region" gnus-group-mark-region :active (gnus-mark-active-p)] + ["Mark region" gnus-group-mark-region :active mark-active] ["Mark buffer" gnus-group-mark-buffer t] ["Execute command" gnus-group-universal-argument (or gnus-group-marked (gnus-group-group-name))]) ("Subscribe" ["Subscribe to a group..." gnus-group-unsubscribe-group t] ["Kill all newsgroups in region" gnus-group-kill-region - :active (gnus-mark-active-p)] + :active mark-active] ["Kill all zombie groups" gnus-group-kill-all-zombies gnus-zombie-list] ["Kill all groups on level..." gnus-group-kill-level t]) @@ -2028,7 +2028,7 @@ Take into consideration N (the prefix) and the list of marked groups." (setq n (1- n)) (gnus-group-next-group way))) (nreverse groups))) - ((and (gnus-region-active-p) (mark)) + ((and transient-mark-mode mark-active (mark)) ;; Work on the region between point and mark. (let ((max (max (point) (mark))) groups) diff --git a/lisp/gnus/gnus-score.el b/lisp/gnus/gnus-score.el index d3a1139..b486a05 100644 --- a/lisp/gnus/gnus-score.el +++ b/lisp/gnus/gnus-score.el @@ -739,6 +739,8 @@ current score file." (with-current-buffer gnus-summary-buffer (gnus-score-load-file current-score-file))))) +(autoload 'appt-select-lowest-window "appt") + (defun gnus-score-insert-help (string alist idx) (setq gnus-score-help-winconf (current-window-configuration)) (with-current-buffer (gnus-get-buffer-create "*Score Help*") @@ -773,7 +775,7 @@ current score file." (setq i (1+ i)))) (goto-char (point-min)) ;; display ourselves in a small window at the bottom - (gnus-select-lowest-window) + (appt-select-lowest-window) (if (< (/ (window-height) 2) window-min-height) (switch-to-buffer "*Score Help*") (split-window) diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el index 32680b2..b02e8fd 100644 --- a/lisp/gnus/gnus-sum.el +++ b/lisp/gnus/gnus-sum.el @@ -2706,8 +2706,7 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs)))) ["Catchup all" gnus-summary-catchup-all t] ["Catchup to here" gnus-summary-catchup-to-here t] ["Catchup from here" gnus-summary-catchup-from-here t] - ["Catchup region" gnus-summary-mark-region-as-read - (gnus-mark-active-p)] + ["Catchup region" gnus-summary-mark-region-as-read mark-active] ["Mark excluded" gnus-summary-limit-mark-excluded-as-read t]) ("Mark Various" ["Tick" gnus-summary-tick-article-forward t] @@ -2746,8 +2745,8 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs)))) ["Invert marks" gnus-uu-invert-processable t] ["Mark above" gnus-uu-mark-over t] ["Mark series" gnus-uu-mark-series t] - ["Mark region" gnus-uu-mark-region (gnus-mark-active-p)] - ["Unmark region" gnus-uu-unmark-region (gnus-mark-active-p)] + ["Mark region" gnus-uu-mark-region mark-active] + ["Unmark region" gnus-uu-unmark-region mark-active] ["Mark by regexp..." gnus-uu-mark-by-regexp t] ["Unmark by regexp..." gnus-uu-unmark-by-regexp t] ["Mark all" gnus-uu-mark-all t] @@ -6681,7 +6680,7 @@ current article will be taken into consideration." (gnus-summary-find-next nil article))) (decf n))) (nreverse articles))) - ((and (gnus-region-active-p) (mark)) + ((and (and transient-mark-mode mark-active) (mark)) (message "region active") ;; Work on the region between point and mark. (let ((max (max (point) (mark))) @@ -10834,7 +10833,7 @@ If N is negative, mark backward instead. If UNMARK is non-nil, remove the process mark instead. The difference between N and the actual number of articles marked is returned." (interactive "P") - (if (and (null n) (gnus-region-active-p)) + (if (and (null n) (and transient-mark-mode mark-active)) (gnus-uu-mark-region (region-beginning) (region-end) unmark) (setq n (prefix-numeric-value n)) (let ((backward (< n 0)) diff --git a/lisp/gnus/gnus-topic.el b/lisp/gnus/gnus-topic.el index 24ae4cf..35d0f38 100644 --- a/lisp/gnus/gnus-topic.el +++ b/lisp/gnus/gnus-topic.el @@ -1294,7 +1294,7 @@ If COPYP, copy the groups instead." (list current-prefix-arg (gnus-completing-read "Move to topic" (mapcar 'car gnus-topic-alist) t nil 'gnus-topic-history))) - (let ((use-marked (and (not n) (not (gnus-region-active-p)) + (let ((use-marked (and (not n) (not (and transient-mark-mode mark-active)) gnus-group-marked t)) (groups (gnus-group-process-prefix n)) (topicl (assoc topic gnus-topic-alist)) @@ -1319,7 +1319,7 @@ If COPYP, copy the groups instead." (defun gnus-topic-remove-group (&optional n) "Remove the current group from the topic." (interactive "P") - (let ((use-marked (and (not n) (not (gnus-region-active-p)) + (let ((use-marked (and (not n) (not (and transient-mark-mode mark-active)) gnus-group-marked t)) (groups (gnus-group-process-prefix n))) (mapc commit 34662c20bc0f0d6cc40af99ab830a80bc4952258 Author: Lars Ingebrigtsen Date: Wed Feb 10 10:49:20 2016 +1100 Move non-compat Gnus functions to gnus-util.el * lisp/gnus/gnus-util.el (gnus-remove-image, gnus-put-image) (gnus-create-image, gnus-image-type-available-p): Move here from gnus-ems.el, since these aren't compat functions. diff --git a/lisp/gnus/gnus-ems.el b/lisp/gnus/gnus-ems.el index f72031b..a4c091e 100644 --- a/lisp/gnus/gnus-ems.el +++ b/lisp/gnus/gnus-ems.el @@ -158,57 +158,6 @@ "Non-nil means the mark and region are currently active in this buffer." mark-active) ; aliased to region-exists-p in XEmacs. -(autoload 'gnus-alive-p "gnus-util") -(autoload 'mm-disable-multibyte "mm-util") - -;;; Image functions. - -(defun gnus-image-type-available-p (type) - (and (fboundp 'image-type-available-p) - (if (fboundp 'display-images-p) - (display-images-p) - t) - (image-type-available-p type))) - -(defun gnus-create-image (file &optional type data-p &rest props) - (let ((face (plist-get props :face))) - (when face - (setq props (plist-put props :foreground (face-foreground face))) - (setq props (plist-put props :background (face-background face)))) - (ignore-errors - (apply 'create-image file type data-p props)))) - -(defun gnus-put-image (glyph &optional string category) - (let ((point (point))) - (insert-image glyph (or string " ")) - (put-text-property point (point) 'gnus-image-category category) - (unless string - (put-text-property (1- (point)) (point) - 'gnus-image-text-deletable t)) - glyph)) - -(defun gnus-remove-image (image &optional category) - "Remove the image matching IMAGE and CATEGORY found first." - (let ((start (point-min)) - val end) - (while (and (not end) - (or (setq val (get-text-property start 'display)) - (and (setq start - (next-single-property-change start 'display)) - (setq val (get-text-property start 'display))))) - (setq end (or (next-single-property-change start 'display) - (point-max))) - (if (and (equal val image) - (equal (get-text-property start 'gnus-image-category) - category)) - (progn - (put-text-property start end 'display nil) - (when (get-text-property start 'gnus-image-text-deletable) - (delete-region start end))) - (unless (= end (point-max)) - (setq start end - end nil)))))) - (provide 'gnus-ems) ;;; gnus-ems.el ends here diff --git a/lisp/gnus/gnus-util.el b/lisp/gnus/gnus-util.el index 31645fc..33d96bd 100644 --- a/lisp/gnus/gnus-util.el +++ b/lisp/gnus/gnus-util.el @@ -2021,6 +2021,54 @@ lists of strings." (gnus-setdiff (cdr list1) list2) (cons (car list1) (gnus-setdiff (cdr list1) list2))))) +;;; Image functions. + +(defun gnus-image-type-available-p (type) + (and (fboundp 'image-type-available-p) + (if (fboundp 'display-images-p) + (display-images-p) + t) + (image-type-available-p type))) + +(defun gnus-create-image (file &optional type data-p &rest props) + (let ((face (plist-get props :face))) + (when face + (setq props (plist-put props :foreground (face-foreground face))) + (setq props (plist-put props :background (face-background face)))) + (ignore-errors + (apply 'create-image file type data-p props)))) + +(defun gnus-put-image (glyph &optional string category) + (let ((point (point))) + (insert-image glyph (or string " ")) + (put-text-property point (point) 'gnus-image-category category) + (unless string + (put-text-property (1- (point)) (point) + 'gnus-image-text-deletable t)) + glyph)) + +(defun gnus-remove-image (image &optional category) + "Remove the image matching IMAGE and CATEGORY found first." + (let ((start (point-min)) + val end) + (while (and (not end) + (or (setq val (get-text-property start 'display)) + (and (setq start + (next-single-property-change start 'display)) + (setq val (get-text-property start 'display))))) + (setq end (or (next-single-property-change start 'display) + (point-max))) + (if (and (equal val image) + (equal (get-text-property start 'gnus-image-category) + category)) + (progn + (put-text-property start end 'display nil) + (when (get-text-property start 'gnus-image-text-deletable) + (delete-region start end))) + (unless (= end (point-max)) + (setq start end + end nil)))))) + (provide 'gnus-util) ;;; gnus-util.el ends here commit 812cddf3060322cc5c59b2864b206e8ddc04e6fe Author: Paul Eggert Date: Tue Feb 9 15:24:08 2016 -0800 Omit valloc decl if redundant * src/gmalloc.c (valloc): Omit decl if malloc.h is included, to pacify --enable-gcc-warnings. diff --git a/src/gmalloc.c b/src/gmalloc.c index dd18293..d795c13 100644 --- a/src/gmalloc.c +++ b/src/gmalloc.c @@ -1683,14 +1683,17 @@ License along with this library. If not, see . or (US mail) as Mike Haertel c/o Free Software Foundation. */ #ifndef HYBRID_MALLOC + +# ifndef HAVE_MALLOC_H /* Allocate SIZE bytes on a page boundary. */ extern void *valloc (size_t); +# endif -#if defined _SC_PAGESIZE || !defined HAVE_GETPAGESIZE -# include "getpagesize.h" -#elif !defined getpagesize +# if defined _SC_PAGESIZE || !defined HAVE_GETPAGESIZE +# include "getpagesize.h" +# elif !defined getpagesize extern int getpagesize (void); -#endif +# endif static size_t pagesize; commit 09ece4d341a7e07fab7be22868ebcadae8641c79 Author: Wolfgang Jenkner Date: Tue Feb 9 15:04:40 2016 -0800 Restore the calloc family. * src/gmalloc.c (calloc, gcalloc, hybrid_calloc): Restore definitions. They were lost in a4817d8 but calloc is still (marginally) used in code statically liked with emacs, so hybrid_calloc is needed. Also, in the non-hybrid case, we can't get rid of calloc anyway as other libraries liked with emacs may need it. * src/conf_post.h: Restore redefinition of calloc to hybrid_calloc. diff --git a/src/conf_post.h b/src/conf_post.h index c5eec5a..2788abf 100644 --- a/src/conf_post.h +++ b/src/conf_post.h @@ -100,6 +100,7 @@ typedef bool bool_bf; #define malloc hybrid_malloc #define realloc hybrid_realloc #define aligned_alloc hybrid_aligned_alloc +#define calloc hybrid_calloc #define free hybrid_free #endif #endif /* HYBRID_MALLOC */ diff --git a/src/gmalloc.c b/src/gmalloc.c index 0b76aee..dd18293 100644 --- a/src/gmalloc.c +++ b/src/gmalloc.c @@ -72,7 +72,7 @@ extern void *(*__morecore) (ptrdiff_t); #undef free #define malloc gmalloc #define realloc grealloc -#define calloc do_not_call_me /* Emacs never calls calloc. */ +#define calloc gcalloc #define aligned_alloc galigned_alloc #define free gfree #define malloc_info gmalloc_info @@ -101,6 +101,8 @@ extern void *malloc (size_t size) ATTRIBUTE_MALLOC_SIZE ((1)); /* Re-allocate the previously allocated block in ptr, making the new block SIZE bytes long. */ extern void *realloc (void *ptr, size_t size) ATTRIBUTE_ALLOC_SIZE ((2)); +/* Allocate NMEMB elements of SIZE bytes each, all initialized to 0. */ +extern void *calloc (size_t nmemb, size_t size) ATTRIBUTE_MALLOC_SIZE ((1,2)); /* Free a block. */ extern void free (void *ptr); @@ -1465,7 +1467,6 @@ License along with this library. If not, see . /* Allocate an array of NMEMB elements each SIZE bytes long. The entire array is initialized to zeros. */ -#ifndef calloc void * calloc (size_t nmemb, size_t size) { @@ -1483,7 +1484,6 @@ calloc (size_t nmemb, size_t size) return memset (result, 0, bytes); return result; } -#endif /* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -1714,6 +1714,7 @@ valloc (size_t size) /* Declare system malloc and friends. */ extern void *malloc (size_t size); extern void *realloc (void *ptr, size_t size); +extern void *calloc (size_t nmemb, size_t size); extern void free (void *ptr); #ifdef HAVE_ALIGNED_ALLOC extern void *aligned_alloc (size_t alignment, size_t size); @@ -1732,6 +1733,14 @@ hybrid_malloc (size_t size) return gmalloc (size); } +void * +hybrid_calloc (size_t nmemb, size_t size) +{ + if (DUMPED) + return calloc (nmemb, size); + return gcalloc (nmemb, size); +} + void hybrid_free (void *ptr) { commit a0e3180db181d1bc7ccb883f8f2b55e76a3703f2 Author: Lars Ingebrigtsen Date: Wed Feb 10 09:53:13 2016 +1100 Remove some Gnus compat functions * lisp/gnus/gnus-ems.el (gnus-string-mark-left-to-right) (gnus-window-inside-pixel-edges, gnus-set-process-plist) (gnus-process-plist, gnus-process-get, gnus-process-put): Remove. diff --git a/lisp/gnus/gnus-ems.el b/lisp/gnus/gnus-ems.el index 400ac4f..f72031b 100644 --- a/lisp/gnus/gnus-ems.el +++ b/lisp/gnus/gnus-ems.el @@ -209,58 +209,6 @@ (setq start end end nil)))))) -(defmacro gnus-string-mark-left-to-right (string) - (if (fboundp 'bidi-string-mark-left-to-right) - `(bidi-string-mark-left-to-right ,string) - string)) - -(eval-and-compile - ;; XEmacs does not have window-inside-pixel-edges - (defalias 'gnus-window-inside-pixel-edges - (if (fboundp 'window-inside-pixel-edges) - 'window-inside-pixel-edges - 'window-pixel-edges)) - - (if (or (featurep 'emacs) (fboundp 'set-process-plist)) - (progn ; these exist since Emacs 22.1 - (defalias 'gnus-set-process-plist 'set-process-plist) - (defalias 'gnus-process-plist 'process-plist) - (defalias 'gnus-process-get 'process-get) - (defalias 'gnus-process-put 'process-put)) - (defun gnus-set-process-plist (process plist) - "Replace the plist of PROCESS with PLIST. Returns PLIST." - (put 'gnus-process-plist-internal process plist)) - - (defun gnus-process-plist (process) - "Return the plist of PROCESS." - ;; This form works but can't prevent the plist data from - ;; growing infinitely. - ;;(get 'gnus-process-plist-internal process) - (let* ((plist (symbol-plist 'gnus-process-plist-internal)) - (tem (memq process plist))) - (prog1 - (cadr tem) - ;; Remove it from the plist data. - (when tem - (if (eq plist tem) - (progn - (setcar plist (caddr plist)) - (setcdr plist (or (cdddr plist) '(nil)))) - (setcdr (nthcdr (- (length plist) (length tem) 1) plist) - (cddr tem))))))) - - (defun gnus-process-get (process propname) - "Return the value of PROCESS' PROPNAME property. -This is the last value stored with `(gnus-process-put PROCESS PROPNAME VALUE)'." - (plist-get (gnus-process-plist process) propname)) - - (defun gnus-process-put (process propname value) - "Change PROCESS' PROPNAME property to VALUE. -It can be retrieved with `(gnus-process-get PROCESS PROPNAME)'." - (gnus-set-process-plist process - (plist-put (gnus-process-plist process) - propname value))))) - (provide 'gnus-ems) ;;; gnus-ems.el ends here diff --git a/lisp/gnus/gnus-html.el b/lisp/gnus/gnus-html.el index 884b40e..9413d4e 100644 --- a/lisp/gnus/gnus-html.el +++ b/lisp/gnus/gnus-html.el @@ -427,7 +427,7 @@ Return a string with image data." (defun gnus-html-maximum-image-size () "Return the maximum size of an image according to `gnus-max-image-proportion'." - (let ((edges (gnus-window-inside-pixel-edges + (let ((edges (window-inside-pixel-edges (get-buffer-window (current-buffer))))) ;; (width . height) (cons diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el index d675d2f..32680b2 100644 --- a/lisp/gnus/gnus-sum.el +++ b/lisp/gnus/gnus-sum.el @@ -3720,7 +3720,7 @@ buffer that was in action when the last article was fetched." gnus-newsgroup-name)) 'nntp) (gnus-group-real-name gnus-newsgroup-name)))) (concat gnus-summary-newsgroup-prefix newsgroups))))) - (gnus-string-mark-left-to-right + (bidi-string-mark-left-to-right (inline (gnus-summary-extract-address-component gnus-tmp-from)))))) diff --git a/lisp/gnus/mm-view.el b/lisp/gnus/mm-view.el index 8e1e3e7..ed16313 100644 --- a/lisp/gnus/mm-view.el +++ b/lisp/gnus/mm-view.el @@ -31,7 +31,6 @@ (require 'mml-smime) (autoload 'gnus-completing-read "gnus-util") -(autoload 'gnus-window-inside-pixel-edges "gnus-ems") (autoload 'gnus-article-prepare-display "gnus-art") (autoload 'vcard-parse-string "vcard") (autoload 'vcard-format-string "vcard") @@ -88,7 +87,7 @@ (if (eq mm-inline-large-images 'resize) (gnus-rescale-image image - (let ((edges (gnus-window-inside-pixel-edges + (let ((edges (window-inside-pixel-edges (get-buffer-window (current-buffer))))) (cons (truncate (* mm-inline-large-images-proportion (- (nth 2 edges) (nth 0 edges)))) commit 8456ba1d493d5e5b46e450d0e8b2dd1577f246ab Merge: 0e7b901 145a11e Author: Paul Eggert Date: Tue Feb 9 14:26:40 2016 -0800 - commit 0e7b901b905fb8db3c7e391661f1510e96ff3814 Merge: 05595c2 9935e7c Author: Paul Eggert Date: Tue Feb 9 14:23:53 2016 -0800 ; Merge from origin/emacs-25 The following commit was skipped: 9935e7c Make the `R' command get the correct relative s commit 05595c2e59983db469e620c4f34b2eef5123391b Merge: 8fa67e9 8212135 Author: Paul Eggert Date: Tue Feb 9 14:23:53 2016 -0800 - commit 8fa67e959bcc835c359981aae01f0dad3213451a Merge: 8986f16 d7933ff Author: Paul Eggert Date: Tue Feb 9 14:23:10 2016 -0800 ; Merge from origin/emacs-25 The following commit was skipped: d7933ff ; Auto-commit of ChangeLog files. commit 8986f1674c2338761a30bfe0b8ee353d0cd6778e Merge: a9650e9 4feb962 Author: Paul Eggert Date: Tue Feb 9 14:23:10 2016 -0800 Merge from origin/emacs-25 4feb962 * lisp/comint.el (comint-prompt-read-only): Clean tabs in docstring cc419fb Don't inloop gnus-uu-mark-thread on the last thread 51c77a2 Display non-ASCII group names better in prompts f93d669 Default to gpg2 instead of gpg commit a9650e970d9f515b4b64bd0009d28125b4276b63 Merge: b3fc7a3 35cbe20 Author: Paul Eggert Date: Tue Feb 9 14:23:10 2016 -0800 ; Merge from origin/emacs-25 The following commit was skipped: 35cbe20 src/process.c Correctly convert AF_INET6 addresses commit b3fc7a3e763fb260cd932dc6aedbe7b4c810a73c Merge: c71e7cc 9ffe7dd Author: Paul Eggert Date: Tue Feb 9 14:23:10 2016 -0800 Merge from origin/emacs-25 9ffe7dd * lisp/isearch.el (isearch-define-mode-toggle): Improve logic 16140f7 * lisp/menu-bar.el (menu-bar-options-menu): New search submenu 3db6adb * lisp/isearch.el (search-default-mode) 4ea1ea7 * lisp/isearch.el: Rename search-default-regexp-mode to search-default-mode c77ffc8 Use monitor's resolution for positioning tooltips 49e5749 Fix file-notify-test on MS-Windows be1d874 Fix issues found by auditing w32notify code 87ae218 Extend etags Ruby support for accessors aa35257 Update publicsuffix.txt. 6816bff Ensure that Gnus dribble handling allows removing entries 691feae Be consistent when using encoded strings in nnimap data 3ed423b Display the decoded Gnus group name 5428b5b Use completion-ignore-case instead of defining command commit c71e7cc113ed0d5f01aaa2e441a3e3c9fbeb9fa5 Merge: f55fc92 1fbcc8a Author: Paul Eggert Date: Tue Feb 9 14:23:10 2016 -0800 ; Merge from origin/emacs-25 The following commit was skipped: 1fbcc8a Merge branch 'emacs-25' of git.savannah.gnu.org:/srv/git/emacs into emacs-25 commit f55fc92f6804b821b7df374e973b859c6364996a Merge: 44f853c 1eaf68f Author: Paul Eggert Date: Tue Feb 9 14:23:10 2016 -0800 Merge from origin/emacs-25 1eaf68f * test/automated/file-notify-tests.el (file-notify-test06-many-events): d333716 ; * etc/NEWS: Expand news entry for scss-mode c32c16f ; Better document changes in ls-lisp default behavior dc6eed2 Fix doc string of tls-program commit 44f853c4acda0634a3541116834c3e768bef650d Merge: fdc2da4 1ef309f Author: Paul Eggert Date: Tue Feb 9 14:23:09 2016 -0800 ; Merge from origin/emacs-25 The following commit was skipped: 1ef309f Restore window conf in nsm commit fdc2da4ef44b32e2dd360defc9bd64d644ed1783 Merge: f414fe6 2c117fc Author: Paul Eggert Date: Tue Feb 9 14:23:09 2016 -0800 Merge from origin/emacs-25 2c117fc * etc/NEWS: Document new mpc.el features 71a0496 * lisp/custom.el (defface): Revert indentation change. (Bug#22524) 9dfece1 Correctly fontify C++ initializations which "look like" functions. 4485222 Improve newsticker-treeview-selection-face 4236944 Minor fix in tagging Ruby accessors by etags 35fc77d Spelling fixes 3dda110 Remove 'def X' from the example commit f414fe61dd5e9f54c562adc65739305198173001 Author: Paul Eggert Date: Tue Feb 9 14:20:44 2016 -0800 ; make change-history-commit diff --git a/ChangeLog.2 b/ChangeLog.2 index 5efa1ab..2e2cad4 100644 --- a/ChangeLog.2 +++ b/ChangeLog.2 @@ -1,3 +1,240 @@ +2016-02-09 Eli Zaretskii + + Fix network-stream-tests on MS-Windows + + * test/lisp/net/network-stream-tests.el (make-local-unix-server): + Skip if local sockets are not supported. + +2016-02-09 Michael Albinus + + * admin/notes/bug-triage: Fix bug priorities. Explain colors in debbugs-gnu. + +2016-02-09 Eli Zaretskii + + Disable 'timer-list' + + * lisp/emacs-lisp/timer-list.el: Make 'timer-list' a disabled + command. + +2016-02-09 Paul Eggert + + Avoid aligned_alloc static/extern collision + + * src/alloc.c (aligned_alloc): Define to private name when a + static function, to avoid collision with lisp.h extern decl. + Reported by John Yates in: + http://lists.gnu.org/archive/html/emacs-devel/2016-02/msg00439.html + +2016-02-08 Michal Nazarewicz + + Make `message-beginning-of-line' aware of folded headers + + * lisp/gnus/message.pl (message-beginning-of-header): New function which + moves point to the beginning of a mail header. The function is aware of + folded headers and with non-nil argument looks for the true beginning of + a header while with nil argument moves to the indented text of header's + value. + (message-beginning-of-line): Function is now aware of folded headers and + either moves point to the indention of a header or, in visual-line-mode, + searches for the beginning of the header. + +2016-02-08 Michal Nazarewicz + + Optimise ‘point in message header’ check + + * lisp/gnus/message.el (message-point-in-header-p): Replace two unbound + regular expression matches with a single bound string match thus + reducing amount of work the function is doing. + +2016-02-08 Lars Ingebrigtsen + + Make the `R' command get the correct relative s + + * lisp/net/eww.el (eww-readable): Preserve the base URL so + that image expansions are fetched from the right place (bug#22605). + +2016-02-08 Lars Ingebrigtsen + + Add a mode to list and cancel timers + + * doc/lispref/os.texi (Timers): Menton `timer-list'. + + * lisp/emacs-lisp/timer-list.el: New file. + +2016-02-08 Lars Ingebrigtsen + + Add new commands to allow changing the size of images + + * lisp/image.el (image-increase-size, image-decrease-size): + New commands. + (image-change-size): New function. + +2016-02-08 Lars Ingebrigtsen + + Allow the image scale to be a floating point number + + * src/image.c (compute_image_size): The scale can be a + floating point number. + +2016-02-08 Lars Ingebrigtsen + + Add an IPv6 test + + * test/lisp/net/network-stream-tests.el + (connect-to-tls-ipv6-nowait): Add an ipv6 test, too. + +2016-02-08 Lars Ingebrigtsen + + Use gnutls-serv instead of openssh + + * test/lisp/net/network-stream-tests.el (make-tls-server): Use + gnutls-serv instead of openssh. + +2016-02-08 Daniel Colascione + + Performance improvements for vc-hg + + Teach vc-hg how to read some Mercurial internal data structures, + allowing us to avoid the need to run hg status -A, which is very slow + for large repositories. Fall back to running hg if anything looks + funny. vc-hg now puts the _working directory_ revision in the + modeline instead of the file revision, which greatly improves + performance and which allows us to again skip running hg in the case + that we have an active bookmark. + + * lisp/vc/vc-hg.el (vc-hg-state): Try calling `vc-hg-statefast' + (vc-hg-symbolic-revision-styles) + (vc-hg-use-file-version-for-mode-line-version) + (vc-hg-parse-hg-data-structures): New user preferences + (vc-hg--active-bookmark-internal, vc-hg--run-log) + (vc-hg--symbolic-revision, vc-hg-mode-line-string) + (vc-hg--read-u8, vc-hg--read-u32-be) + (vc-hg--raw-dirstate-search, vc-hg--cached-dirstate-search) + (vc-hg--parts-to-string, vc-hg--pcre-to-elisp-re) + (vc-hg--glob-to-pcre, vc-hg--hgignore-add-pcre) + (vc-hg--hgignore-add-glob, vc-hg--hgignore-add-path) + (vc-hg--slurp-hgignore-1, vc-hg--slurp-hgignore) + (vc-hg--ignore-patterns-valid-p) + (vc-hg--ignore-patterns-ignored-p, vc-hg--time-to-fixnum) + (vc-hg--file-ignored-p, vc-hg--read-repo-requirements) + (vc-hg--requirements-understood-p, vc-hg--dirstate-scan-cache) + (vc-hg-state-fast): New functions. + (vc-hg--hgignore-patterns, vc-hg--hgignore-filenames) + (vc-hg--cached-ignore-patterns, vc-hg--dirstate-scan-cache) + (vc-hg--dirstate-scan-cache): New internal variables. + * lisp/vc/vc-hooks.el (vc-refresh-state): Invoke vc find-file-hook + before updating modeline. + +2016-02-07 Lars Ingebrigtsen + + Skip TLS tests if we don't have openssl + + * test/lisp/net/network-stream-tests.el (connect-to-tls): Skip + TLS tests if we don't have openssl and GnuTLS. + +2016-02-07 Lars Ingebrigtsen + + Automatically scale images up on high-density screens + + * doc/lispref/display.texi (ImageMagick Images): Mention :scale. + (Defining Images): Mention image-scaling-factor. + + * lisp/image.el (image-compute-scaling-factor): New function + (bug#22172). + (create-image): Use it. + (image-scaling-factor): New variable. + + * src/image.c (compute_image_size): Take :scale into account. + +2016-02-07 Lars Ingebrigtsen + + Ensure progress when fetching from the queue + + * lisp/url/url-queue.el (url-queue-check-progress): Ensure + that we have progress when fetching queued requests (bug#22576). + +2016-02-07 Lars Ingebrigtsen + + Make mail-extract-address-components return the user name more + + * lisp/mail/mail-extr.el (mail-extract-address-components): + Return the name even if it's the same as the mailbox name (if + `mail-extr-ignore-single-names' isn't set) (bug#22594). + +2016-02-07 Lars Ingebrigtsen + + Message no longer warns about unknown top level domains + +2016-02-07 Jarno Malmari + + Add tests for url-auth + + * test/lisp/url/url-auth-tests.el: New file. + +2016-02-07 Lars Ingebrigtsen + + Add a TLS connection test + + * test/lisp/net/network-stream-tests.el (connect-to-tls): Add + a TLS connection test. + +2016-02-07 Lars Ingebrigtsen + + Add more network tests + + * test/lisp/net/network-stream-tests.el (echo-server-nowait): + New test. + +2016-02-07 Lars Ingebrigtsen + + Add network tests + + * test/lisp/net/network-stream-tests.el: New suite of network tests. + +2016-02-07 Foo + + Allow various Gnus and Message address variables to be functions + + * doc/misc/gnus.texi (To From Newsgroups): + gnus-ignored-from-addresses can be a function. + + * doc/misc/message.texi (Wide Reply): + message-dont-reply-to-names can be a function. + + * lisp/gnus/gnus-icalendar.el (gnus-icalendar-identities): + message-alternative-emails can be a function. + + * lisp/gnus/gnus-notifications.el (gnus-notifications): + message-alternative-emails can be a function (bug#22315). + + * lisp/gnus/gnus-sum.el + (gnus-summary-from-or-to-or-newsgroups): + gnus-ignored-from-addresses can be a function (bug#22315). + +2016-02-07 Lars Ingebrigtsen + + Fix typo in Gnus regexp + + * lisp/gnus/gnus-art.el (gnus-button-valid-fqdn-regexp): Fix + typo in last change to this regexp (bug#22592). + +2016-02-07 Paul Eggert + + Port to FreeBSD x86 + + Reported by Herbert J. Skuhra in: + http://lists.gnu.org/archive/html/emacs-devel/2016-02/msg00336.html + * src/lisp.h (NONPOINTER_BITS) [__FreeBSD__]: Zero in this case too, + since malloc always returns a multiple of 8 in FreeBSD. + +2016-02-07 Alan Mackenzie + + On leaving CC Mode, clean up by removing character properties. + + * lisp/progmodes/cc-mode.el (c-leave-cc-mode-mode): Remove from the buffer + all instances of the text properties/extents category, syntax-table, + c-is-sws, c-in-sws, c-type, and c-awk-NL-prop. + 2016-02-06 Lars Ingebrigtsen * lisp/gnus/gnus-art.el (gnus-button-valid-fqdn-regexp): Don't use @@ -29609,7 +29846,7 @@ This file records repository revisions from commit 9d56a21e6a696ad19ac65c4b405aeca44785884a (exclusive) to 2016-02-04b6d89ff9288a49099f041752908b5eb9613e (inclusive). -commit 3a2b6aa33109dc40b2c1bcc621a624d38fe814fc (inclusive). +commit 53f3d4a94ac784da3fed3abc72766ecf698ab53c (inclusive). See ChangeLog.1 for earlier changes. ;; Local Variables: commit 145a11e1a3417d0fef60148296f2e8f97e09d5e9 Author: Paul Eggert Date: Tue Feb 9 14:15:09 2016 -0800 Minor alignas cleanup * src/lisp.h (alignas): Remove now-redundant #ifdef that was left over from the old way of doing things, before Bug#20862 was fixed. diff --git a/src/lisp.h b/src/lisp.h index e8eab7b..af73c4b 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -262,10 +262,6 @@ DEFINE_GDB_SYMBOL_END (USE_LSB_TAG) error !; #endif -#ifndef alignas -# error "alignas not defined" -#endif - #ifdef HAVE_STRUCT_ATTRIBUTE_ALIGNED # define GCALIGNED __attribute__ ((aligned (GCALIGNMENT))) #else commit f65ef80fed9813903559345a9f7eb89d712fa3fc Author: Paul Eggert Date: Tue Feb 9 13:43:13 2016 -0800 Add lmalloc commentary and tweak laligned * src/alloc.c (laligned): Help compiler in a tiny way by putting the more-commonly-failing disjunct first. diff --git a/src/alloc.c b/src/alloc.c index 668bbc7..6bc1b8a 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -1375,8 +1375,8 @@ lisp_align_free (void *block) static bool laligned (void *p, size_t size) { - return (MALLOC_IS_GC_ALIGNED || size % GCALIGNMENT != 0 - || (intptr_t) p % GCALIGNMENT == 0); + return (MALLOC_IS_GC_ALIGNED || (intptr_t) p % GCALIGNMENT == 0 + || size % GCALIGNMENT != 0); } /* Like malloc and realloc except that if SIZE is Lisp-aligned, make @@ -1385,7 +1385,15 @@ laligned (void *p, size_t size) Lisp-aligned pointer. Code that needs to allocate C heap memory for a Lisp object should use one of these functions to obtain a pointer P; that way, if T is an enum Lisp_Type value and L == - make_lisp_ptr (P, T), then XPNTR (L) == P and XTYPE (L) == T. */ + make_lisp_ptr (P, T), then XPNTR (L) == P and XTYPE (L) == T. + + On typical modern platforms these functions' loops do not iterate. + On now-rare (and perhaps nonexistent) platforms, the loops in + theory could repeat forever. If an infinite loop is possible on a + platform, a build would surely loop and the builder can then send + us a bug report. Adding a counter to try to detect any such loop + would complicate the code (and possibly introduce bugs, in code + that's never really exercised) for little benefit. */ static void * lmalloc (size_t size) commit 53f3d4a94ac784da3fed3abc72766ecf698ab53c Author: Eli Zaretskii Date: Tue Feb 9 21:07:11 2016 +0200 Fix network-stream-tests on MS-Windows * test/lisp/net/network-stream-tests.el (make-local-unix-server): Skip if local sockets are not supported. diff --git a/test/lisp/net/network-stream-tests.el b/test/lisp/net/network-stream-tests.el index 734f077..92c5370 100644 --- a/test/lisp/net/network-stream-tests.el +++ b/test/lisp/net/network-stream-tests.el @@ -27,6 +27,7 @@ (require 'gnutls) (ert-deftest make-local-unix-server () + (skip-unless (featurep 'make-network-process '(:family local))) (let* ((file (make-temp-name "/tmp/server-test")) (server (make-network-process commit 2b045dc036588bc385b6e0d9fe34df8bb60dcfe7 Author: Michael Albinus Date: Tue Feb 9 20:04:34 2016 +0100 * admin/notes/bug-triage: Fix bug priorities. Explain colors in debbugs-gnu. diff --git a/admin/notes/bug-triage b/admin/notes/bug-triage index 648ada4..4a2a5f3 100644 --- a/admin/notes/bug-triage +++ b/admin/notes/bug-triage @@ -72,7 +72,7 @@ the ones that are not reproducible on the current release. weeks, I'll just close this bug as unreproducible." [ ] Check that the priority is reasonable. Most bugs should be marked as normal, but crashers and security issues can be - marked as "severe". + marked as serious. 4. Your changes will take some time to take effect. After a period of minutes to hours, you will get a mail telling you the control message has been processed. At this point, if there were no errors detected, you and @@ -95,8 +95,14 @@ For each new bug, ask the following questions: reproduce on the latest version, and if it can't be reproduced, ask the reporter to try again with the latest version. 3. Is the bug the same as another bug? If so, merge the bugs. - 4. What is the priority of the bug? Add a priority: critical, grave, serious, - important, normal, minor, or wishlist. + 4. What is the priority of the bug? Add a priority: serious, important, + normal, minor, or wishlist. 5. Who should be the owner? This depends on what component the bug is part of. You can look at the admin/MAINTAINERS file (then you can just search emacs-devel to match the name with an email address). + +In the debbugs-gnu buffer, bugs are marked in the "State" column +according to the communication flow. Red bugs mean that nobody has +answered, these bugs need primary attention. Green bugs flag that +there is a recent communication about, and orange bugs flag that the +bug hasn't been touched for at least two weeks. commit a6d675393841be3fb56ad20320742e458c7af369 Author: Eli Zaretskii Date: Tue Feb 9 20:30:54 2016 +0200 Disable 'timer-list' * lisp/emacs-lisp/timer-list.el: Make 'timer-list' a disabled command. diff --git a/lisp/emacs-lisp/timer-list.el b/lisp/emacs-lisp/timer-list.el index b54902a..eba1523 100644 --- a/lisp/emacs-lisp/timer-list.el +++ b/lisp/emacs-lisp/timer-list.el @@ -74,6 +74,9 @@ 'timer timer) (insert "\n"))) (goto-char (point-min))) +;; This command can be destructive if they don't know what they are +;; doing. Kids, don't try this at home! +;;;###autoload (put 'timer-list 'disabled "Beware: manually canceling timers can ruin your Emacs session.") (defvar timer-list-mode-map (let ((map (make-sparse-keymap))) commit 7777e8089fe3ea260b3f591e67c0e66c44d9969e Author: Eli Zaretskii Date: Tue Feb 9 20:12:17 2016 +0200 Clarify documentation of key binding conventions * doc/lispref/tips.texi (Key Binding Conventions): Clarify which "punctuation characters" are reserved after "C-c". (Bug#22604) diff --git a/doc/lispref/tips.texi b/doc/lispref/tips.texi index 8e92bb9..0a3d244 100644 --- a/doc/lispref/tips.texi +++ b/doc/lispref/tips.texi @@ -290,10 +290,11 @@ Sequences consisting of @kbd{C-c} followed by @kbd{@{}, @kbd{@}}, @kbd{<}, @kbd{>}, @kbd{:} or @kbd{;} are also reserved for major modes. @item -Sequences consisting of @kbd{C-c} followed by any other punctuation -character are allocated for minor modes. Using them in a major mode is -not absolutely prohibited, but if you do that, the major mode binding -may be shadowed from time to time by minor modes. +Sequences consisting of @kbd{C-c} followed by any other +@acronym{ASCII} punctuation or symbol character are allocated for +minor modes. Using them in a major mode is not absolutely prohibited, +but if you do that, the major mode binding may be shadowed from time +to time by minor modes. @item Don't bind @kbd{C-h} following any prefix character (including commit 1ead3d21236c0bb91a97f3852bc56d8ea28b1ba3 Author: Oscar Fuentes Date: Tue Feb 9 18:28:02 2016 +0100 * etc/NEWS: mention the `vc-faces' customization group diff --git a/etc/NEWS b/etc/NEWS index 02f4756..70f9476 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -970,6 +970,11 @@ replace the face `compare-windows', which is now an obsolete alias for `compare-windows-added'. --- +*** The VC state indicator in the mode line now has different faces +corresponding to each of the possible states. See the `vc-faces' +customization group. + +--- *** `log-edit-insert-changelog' converts "(tiny change)" to "Copyright-paperwork-exempt: yes". Set `log-edit-rewrite-tiny-change' nil to disable this. commit f2e9d1b3847d43206e8b0d05e5b64335d2c0b36f Author: Paul Eggert Date: Tue Feb 9 09:06:40 2016 -0800 Sync with gnulib This incorporates: 2016-02-09 stdalign: port to clang 3.7.0 2016-02-06 misc: port better to gcc -fsanitize=address * doc/misc/texinfo.tex, lib/stdalign.in.h, m4/acl.m4, m4/getgroups.m4: Copy from gnulib. diff --git a/doc/misc/texinfo.tex b/doc/misc/texinfo.tex index 8b3c949..71b97c0 100644 --- a/doc/misc/texinfo.tex +++ b/doc/misc/texinfo.tex @@ -3,7 +3,7 @@ % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % -\def\texinfoversion{2016-01-20.20} +\def\texinfoversion{2016-02-09.12} % % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, @@ -1449,6 +1449,138 @@ output) for that.)} \let\pdfmakeoutlines = \relax \fi % \ifx\pdfoutput +% +% PDF outline support for XeTeX +% +\ifx\XeTeXrevision\thisisundefined +\else + \pdfmakepagedesttrue \relax + % Emulate the primitive of pdfTeX + \def\pdfdest name#1 xyz{% + \special{pdf:dest (name#1) [@thispage /XYZ @xpos @ypos]}% + } + \def\pdfmkdest#1{{% + % We have to set dummies so commands such as @code, and characters + % such as \, aren't expanded when present in a section title. + \indexnofonts + \makevalueexpandable + % In the case of XeTeX, xdvipdfmx converts strings to UTF-16. + % Therefore \txiescapepdf is not necessary. + \safewhatsit{\pdfdest name{#1} xyz}% + }} + % + \def\dopdfoutline#1#2#3#4{% + \edef\pdfoutlinedest{#3}% + \ifx\pdfoutlinedest\empty + \def\pdfoutlinedest{#4}% + \fi + { + \turnoffactive + % In the case of XeTeX, xdvipdfmx converts strings to UTF-16. + % Therefore \txiescapepdf is not necessary. + \special{pdf:out [-] #2 << /Title (#1) /A << /S /GoTo /D (name\pdfoutlinedest) >> >> }% + } + } + % + \def\pdfmakeoutlines{% + \begingroup + % + % In the case of XeTeX, counts of subentries is not necesary. + % Therefore, read toc only once. + % + % We use the node names as the destinations. + \def\partentry##1##2##3##4{}% ignore parts in the outlines + \def\numchapentry##1##2##3##4{% + \dopdfoutline{##1}{1}{##3}{##4}}% + \def\numsecentry##1##2##3##4{% + \dopdfoutline{##1}{2}{##3}{##4}}% + \def\numsubsecentry##1##2##3##4{% + \dopdfoutline{##1}{3}{##3}{##4}}% + \def\numsubsubsecentry##1##2##3##4{% + \dopdfoutline{##1}{4}{##3}{##4}}% + % + \let\appentry\numchapentry% + \let\appsecentry\numsecentry% + \let\appsubsecentry\numsubsecentry% + \let\appsubsubsecentry\numsubsubsecentry% + \let\unnchapentry\numchapentry% + \let\unnsecentry\numsecentry% + \let\unnsubsecentry\numsubsecentry% + \let\unnsubsubsecentry\numsubsubsecentry% + % + % In the case of XeTeX, xdvipdfmx converts strings to UTF-16. + % Therefore, the encoding and the language may not be considered. + % + \indexnofonts + \setupdatafile + % We can have normal brace characters in the PDF outlines, unlike + % Texinfo index files. So set that up. + \def\{{\lbracecharliteral}% + \def\}{\rbracecharliteral}% + \catcode`\\=\active \otherbackslash + \input \tocreadfilename + \endgroup + } + {\catcode`[=1 \catcode`]=2 + \catcode`{=\other \catcode`}=\other + \gdef\lbracecharliteral[{]% + \gdef\rbracecharliteral[}]% + ] + + \special{pdf:docview << /PageMode /UseOutlines >> } + \special{pdf:tounicode UTF8-UTF16 } +\fi + +% +% @image support for XeTeX +% +\newif\ifxeteximgpdf +\ifx\XeTeXrevision\thisisundefined +\else + % + % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). + \def\doxeteximage#1#2#3{% + \def\xeteximagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% + \def\xeteximageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% + % + % XeTeX (and the PDF format) support .pdf, .png, .jpg (among + % others). Let's try in that order, PDF first since if + % someone has a scalable image, presumably better to use that than a + % bitmap. + \let\xeteximgext=\empty + \xeteximgpdffalse + \begingroup + \openin 1 #1.pdf \ifeof 1 + \openin 1 #1.PDF \ifeof 1 + \openin 1 #1.png \ifeof 1 + \openin 1 #1.jpg \ifeof 1 + \openin 1 #1.jpeg \ifeof 1 + \openin 1 #1.JPG \ifeof 1 + \errmessage{Could not find image file #1 for XeTeX}% + \else \gdef\xeteximgext{JPG}% + \fi + \else \gdef\xeteximgext{jpeg}% + \fi + \else \gdef\xeteximgext{jpg}% + \fi + \else \gdef\xeteximgext{png}% + \fi + \else \gdef\xeteximgext{PDF} \global\xeteximgpdftrue% + \fi + \else \gdef\xeteximgext{pdf} \global\xeteximgpdftrue% + \fi + \closein 1 + \endgroup + % + \ifxeteximgpdf + \XeTeXpdffile "#1".\xeteximgext "" + \else + \XeTeXpicfile "#1".\xeteximgext "" + \fi + \ifdim \wd0 >0pt width \xeteximagewidth \fi + \ifdim \wd2 >0pt height \xeteximageheight \fi \relax + } +\fi \message{fonts,} @@ -4739,8 +4871,8 @@ end % \uccode`\1=`\{ \uppercase{\def\{{1}}% \uccode`\1=`\} \uppercase{\def\}{1}}% - \let\lbracechar\{ - \let\rbracechar\} + \let\lbracechar\{% + \let\rbracechar\}% % % Non-English letters. \def\AA{AA}% @@ -6054,7 +6186,13 @@ end \def\Yomitfromtockeyword{Yomitfromtoc} % \def\chapmacro#1#2#3{% - \checkenv{}% chapters, etc., should not start inside an environment. + \expandafter\ifx\thisenv\titlepage\else + \checkenv{}% chapters, etc., should not start inside an environment. + \fi + % FIXME: \chapmacro is currently called from inside \titlepage when + % \setcontentsaftertitlepage to print the "Table of Contents" heading, but + % this should probably be done by \sectionheading with an option to print + % in chapter size. % % Insert the first mark before the heading break (see notes for \domark). \let\prevchapterdefs=\lastchapterdefs @@ -7725,7 +7863,7 @@ end \catcode`\_=\other \catcode`\|=\other \catcode`\~=\other - \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi + \ifx\declaredencoding\ascii \else \setcharscatcodeothernonglobal \fi } \def\scanargctxt{% used for copying and captions, not macros. @@ -8601,12 +8739,15 @@ end % % output the `page 3'. \turnoffactive \putwordpage\tie\refx{#1-pg}{}% - \ifx,\tokenafterxref - \else\ifx.\tokenafterxref - \else\ifx;\tokenafterxref - \else\ifx)\tokenafterxref - \else,% add a , if xref not followed by punctuation - \fi\fi\fi\fi + % Add a , if xref followed by a space + \if\space\noexpand\tokenafterxref ,% + \else\ifx\ \tokenafterxref ,% @TAB + \else\ifx\*\tokenafterxref ,% @* + \else\ifx\ \tokenafterxref ,% @SPACE + \else\ifx\ + \tokenafterxref ,% @NL + \else\ifx\tie\tokenafterxref ,% @tie + \fi\fi\fi\fi\fi\fi \fi\fi \fi \endlink @@ -8837,7 +8978,7 @@ end \catcode`\\=\other % % Make the characters 128-255 be printing characters. - {\setnonasciicharscatcodenonglobal\other}% + {\setcharscatcodeothernonglobal}% % % @ is our escape character in .aux files, and we need braces. \catcode`\{=1 @@ -9081,12 +9222,21 @@ end % % Output the image. \ifpdf + % For pdfTeX and LuaTeX <= 0.80 \dopdfimage{#1}{#2}{#3}% \else - % \epsfbox itself resets \epsf?size at each figure. - \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi - \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi - \epsfbox{#1.eps}% + \ifx\XeTeXrevision\thisisundefined + % For epsf.tex + % \epsfbox itself resets \epsf?size at each figure. + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi + \setbox0 = \hbox{\ignorespaces #3}% + \ifdim\wd0 > 0pt \epsfysize=#3\relax \fi + \epsfbox{#1.eps}% + \else + % For XeTeX + \doxeteximage{#1}{#2}{#3}% + \fi \fi % \ifimagevmode @@ -9433,43 +9583,68 @@ directory should work if nowhere else does.} \global\righthyphenmin = #3\relax } -% Get input by bytes instead of by UTF-8 codepoints for XeTeX and LuaTeX, -% otherwise the encoding support is completely broken. +% XeTeX and LuaTeX can handle native Unicode. +% Their default I/O is UTF-8 sequence instead of byte-wise. +% Other TeX engine (pdfTeX etc.) I/O is byte-wise. +% +\newif\iftxinativeunicodecapable +\newif\iftxiusebytewiseio + \ifx\XeTeXrevision\thisisundefined + \ifx\luatexversion\thisisundefined + \txinativeunicodecapablefalse + \txiusebytewiseiotrue + \else + \txinativeunicodecapabletrue + \txiusebytewiseiofalse + \fi \else -\XeTeXdefaultencoding "bytes" % For subsequent files to be read -\XeTeXinputencoding "bytes" % Effective in texinfo.tex only -% Unfortunately, there seems to be no corresponding XeTeX command for -% output encoding. This is a problem for auxiliary index and TOC files. -% The only solution would be perhaps to write out @U{...} sequences in -% place of UTF-8 characters. + \txinativeunicodecapabletrue + \txiusebytewiseiofalse \fi -\ifx\luatexversion\thisisundefined -\else -\directlua{ -local utf8_char, byte, gsub = unicode.utf8.char, string.byte, string.gsub -local function convert_char (char) - return utf8_char(byte(char)) -end - -local function convert_line (line) - return gsub(line, ".", convert_char) -end - -callback.register("process_input_buffer", convert_line) +% Set I/O by bytes instead of UTF-8 sequence for XeTeX and LuaTex +% for non-UTF-8 (byte-wise) encodings. +% +\def\setbytewiseio{% + \ifx\XeTeXrevision\thisisundefined + \else + \XeTeXdefaultencoding "bytes" % For subsequent files to be read + \XeTeXinputencoding "bytes" % For document root file + % Unfortunately, there seems to be no corresponding XeTeX command for + % output encoding. This is a problem for auxiliary index and TOC files. + % The only solution would be perhaps to write out @U{...} sequences in + % place of non-ASCII characters. + \fi -local function convert_line_out (line) - local line_out = "" - for c in string.utfvalues(line) do - line_out = line_out .. string.char(c) - end - return line_out -end + \ifx\luatexversion\thisisundefined + \else + \directlua{ + local utf8_char, byte, gsub = unicode.utf8.char, string.byte, string.gsub + local function convert_char (char) + return utf8_char(byte(char)) + end + + local function convert_line (line) + return gsub(line, ".", convert_char) + end + + callback.register("process_input_buffer", convert_line) + + local function convert_line_out (line) + local line_out = "" + for c in string.utfvalues(line) do + line_out = line_out .. string.char(c) + end + return line_out + end + + callback.register("process_output_buffer", convert_line_out) + } + \fi -callback.register("process_output_buffer", convert_line_out) + \txiusebytewiseiotrue } -\fi % Helpers for encodings. @@ -9496,13 +9671,6 @@ callback.register("process_output_buffer", convert_line_out) % \def\documentencoding{\parseargusing\filenamecatcodes\documentencodingzzz} \def\documentencodingzzz#1{% - % Get input by bytes instead of by UTF-8 codepoints for XeTeX, - % otherwise the encoding support is completely broken. - % This settings is for the document root file. - \ifx\XeTeXrevision\thisisundefined - \else - \XeTeXinputencoding "bytes" - \fi % % Encoding being declared for the document. \def\declaredencoding{\csname #1.enc\endcsname}% @@ -9519,22 +9687,37 @@ callback.register("process_output_buffer", convert_line_out) \asciichardefs % \else \ifx \declaredencoding \lattwo + \iftxinativeunicodecapable + \setbytewiseio + \fi \setnonasciicharscatcode\active \lattwochardefs % \else \ifx \declaredencoding \latone + \iftxinativeunicodecapable + \setbytewiseio + \fi \setnonasciicharscatcode\active \latonechardefs % \else \ifx \declaredencoding \latnine + \iftxinativeunicodecapable + \setbytewiseio + \fi \setnonasciicharscatcode\active \latninechardefs % \else \ifx \declaredencoding \utfeight - \setnonasciicharscatcode\active - % 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. + \iftxinativeunicodecapable + % For native Unicode (XeTeX and LuaTeX) + \nativeunicodechardefs + \else + % For UTF-8 byte sequence (TeX, eTeX and pdfTeX) + \setnonasciicharscatcode\active + % 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. + \fi % \else \message{Ignoring unknown document encoding: #1.}% @@ -9849,13 +10032,26 @@ callback.register("process_output_buffer", convert_line_out) % @U{xxxx} to produce U+xxxx, if we support it. \def\U#1{% \expandafter\ifx\csname uni:#1\endcsname \relax - \errhelp = \EMsimple - \errmessage{Unicode character U+#1 not supported, sorry}% + \iftxinativeunicodecapable + % Any Unicode characters can be used by native Unicode. + % However, if the font does not have the glyph, the letter will miss. + \begingroup + \uccode`\.="#1\relax + \uppercase{.} + \endgroup + \else + \errhelp = \EMsimple + \errmessage{Unicode character U+#1 not supported, sorry}% + \fi \else \csname uni:#1\endcsname \fi } +% For UTF-8 byte sequence (TeX, e-TeX and pdfTeX) +% Definition macro to replace the Unicode character +% Definition macro that is used by @U command +% \begingroup \catcode`\"=12 \catcode`\<=12 @@ -9864,7 +10060,7 @@ callback.register("process_output_buffer", convert_line_out) \catcode`\;=12 \catcode`\!=12 \catcode`\~=13 - \gdef\DeclareUnicodeCharacter#1#2{% + \gdef\DeclareUnicodeCharacterUTFviii#1#2{% \countUTFz = "#1\relax %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% \begingroup @@ -9922,6 +10118,13 @@ callback.register("process_output_buffer", convert_line_out) \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} \endgroup +% For native Unicode (XeTeX and LuaTeX) +% Definition macro that is set catcode other non global +% +\def\DeclareUnicodeCharacterNativeOther#1#2{% + \catcode"#1=\other +} + % 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) @@ -9936,684 +10139,755 @@ callback.register("process_output_buffer", convert_line_out) % 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} +\def\unicodechardefs{% + \DeclareUnicodeCharacter{00A0}{\tie}% + \DeclareUnicodeCharacter{00A1}{\exclamdown}% \DeclareUnicodeCharacter{00A2}{{\tcfont \char162}}% 0242=cent - \DeclareUnicodeCharacter{00A3}{\pounds} + \DeclareUnicodeCharacter{00A3}{\pounds}% \DeclareUnicodeCharacter{00A4}{{\tcfont \char164}}% 0244=currency \DeclareUnicodeCharacter{00A5}{{\tcfont \char165}}% 0245=yen \DeclareUnicodeCharacter{00A6}{{\tcfont \char166}}% 0246=brokenbar - \DeclareUnicodeCharacter{00A7}{\S} - \DeclareUnicodeCharacter{00A8}{\"{ }} - \DeclareUnicodeCharacter{00A9}{\copyright} - \DeclareUnicodeCharacter{00AA}{\ordf} - \DeclareUnicodeCharacter{00AB}{\guillemetleft} - \DeclareUnicodeCharacter{00AC}{\ensuremath\lnot} - \DeclareUnicodeCharacter{00AD}{\-} - \DeclareUnicodeCharacter{00AE}{\registeredsymbol} - \DeclareUnicodeCharacter{00AF}{\={ }} - - \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} - \DeclareUnicodeCharacter{00B1}{\ensuremath\pm} - \DeclareUnicodeCharacter{00B2}{$^2$} - \DeclareUnicodeCharacter{00B3}{$^3$} - \DeclareUnicodeCharacter{00B4}{\'{ }} - \DeclareUnicodeCharacter{00B5}{$\mu$} - \DeclareUnicodeCharacter{00B6}{\P} - \DeclareUnicodeCharacter{00B7}{\ensuremath\cdot} - \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} - \DeclareUnicodeCharacter{00C1}{\'A} - \DeclareUnicodeCharacter{00C2}{\^A} - \DeclareUnicodeCharacter{00C3}{\~A} - \DeclareUnicodeCharacter{00C4}{\"A} - \DeclareUnicodeCharacter{00C5}{\AA} - \DeclareUnicodeCharacter{00C6}{\AE} - \DeclareUnicodeCharacter{00C7}{\cedilla{C}} - \DeclareUnicodeCharacter{00C8}{\`E} - \DeclareUnicodeCharacter{00C9}{\'E} - \DeclareUnicodeCharacter{00CA}{\^E} - \DeclareUnicodeCharacter{00CB}{\"E} - \DeclareUnicodeCharacter{00CC}{\`I} - \DeclareUnicodeCharacter{00CD}{\'I} - \DeclareUnicodeCharacter{00CE}{\^I} - \DeclareUnicodeCharacter{00CF}{\"I} - - \DeclareUnicodeCharacter{00D0}{\DH} - \DeclareUnicodeCharacter{00D1}{\~N} - \DeclareUnicodeCharacter{00D2}{\`O} - \DeclareUnicodeCharacter{00D3}{\'O} - \DeclareUnicodeCharacter{00D4}{\^O} - \DeclareUnicodeCharacter{00D5}{\~O} - \DeclareUnicodeCharacter{00D6}{\"O} - \DeclareUnicodeCharacter{00D7}{\ensuremath\times} - \DeclareUnicodeCharacter{00D8}{\O} - \DeclareUnicodeCharacter{00D9}{\`U} - \DeclareUnicodeCharacter{00DA}{\'U} - \DeclareUnicodeCharacter{00DB}{\^U} - \DeclareUnicodeCharacter{00DC}{\"U} - \DeclareUnicodeCharacter{00DD}{\'Y} - \DeclareUnicodeCharacter{00DE}{\TH} - \DeclareUnicodeCharacter{00DF}{\ss} - - \DeclareUnicodeCharacter{00E0}{\`a} - \DeclareUnicodeCharacter{00E1}{\'a} - \DeclareUnicodeCharacter{00E2}{\^a} - \DeclareUnicodeCharacter{00E3}{\~a} - \DeclareUnicodeCharacter{00E4}{\"a} - \DeclareUnicodeCharacter{00E5}{\aa} - \DeclareUnicodeCharacter{00E6}{\ae} - \DeclareUnicodeCharacter{00E7}{\cedilla{c}} - \DeclareUnicodeCharacter{00E8}{\`e} - \DeclareUnicodeCharacter{00E9}{\'e} - \DeclareUnicodeCharacter{00EA}{\^e} - \DeclareUnicodeCharacter{00EB}{\"e} - \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}} - \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}} - \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} - \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} - - \DeclareUnicodeCharacter{00F0}{\dh} - \DeclareUnicodeCharacter{00F1}{\~n} - \DeclareUnicodeCharacter{00F2}{\`o} - \DeclareUnicodeCharacter{00F3}{\'o} - \DeclareUnicodeCharacter{00F4}{\^o} - \DeclareUnicodeCharacter{00F5}{\~o} - \DeclareUnicodeCharacter{00F6}{\"o} - \DeclareUnicodeCharacter{00F7}{\ensuremath\div} - \DeclareUnicodeCharacter{00F8}{\o} - \DeclareUnicodeCharacter{00F9}{\`u} - \DeclareUnicodeCharacter{00FA}{\'u} - \DeclareUnicodeCharacter{00FB}{\^u} - \DeclareUnicodeCharacter{00FC}{\"u} - \DeclareUnicodeCharacter{00FD}{\'y} - \DeclareUnicodeCharacter{00FE}{\th} - \DeclareUnicodeCharacter{00FF}{\"y} - - \DeclareUnicodeCharacter{0100}{\=A} - \DeclareUnicodeCharacter{0101}{\=a} - \DeclareUnicodeCharacter{0102}{\u{A}} - \DeclareUnicodeCharacter{0103}{\u{a}} - \DeclareUnicodeCharacter{0104}{\ogonek{A}} - \DeclareUnicodeCharacter{0105}{\ogonek{a}} - \DeclareUnicodeCharacter{0106}{\'C} - \DeclareUnicodeCharacter{0107}{\'c} - \DeclareUnicodeCharacter{0108}{\^C} - \DeclareUnicodeCharacter{0109}{\^c} - \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} - \DeclareUnicodeCharacter{011D}{\^g} - \DeclareUnicodeCharacter{011E}{\u{G}} - \DeclareUnicodeCharacter{011F}{\u{g}} - - \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}} - \DeclareUnicodeCharacter{0132}{IJ} - \DeclareUnicodeCharacter{0133}{ij} - \DeclareUnicodeCharacter{0134}{\^J} - \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} - \DeclareUnicodeCharacter{0136}{\cedilla{K}} - \DeclareUnicodeCharacter{0137}{\cedilla{k}} - \DeclareUnicodeCharacter{0138}{\ensuremath\kappa} - \DeclareUnicodeCharacter{0139}{\'L} - \DeclareUnicodeCharacter{013A}{\'l} - \DeclareUnicodeCharacter{013B}{\cedilla{L}} - \DeclareUnicodeCharacter{013C}{\cedilla{l}} + \DeclareUnicodeCharacter{00A7}{\S}% + \DeclareUnicodeCharacter{00A8}{\"{ }}% + \DeclareUnicodeCharacter{00A9}{\copyright}% + \DeclareUnicodeCharacter{00AA}{\ordf}% + \DeclareUnicodeCharacter{00AB}{\guillemetleft}% + \DeclareUnicodeCharacter{00AC}{\ensuremath\lnot}% + \DeclareUnicodeCharacter{00AD}{\-}% + \DeclareUnicodeCharacter{00AE}{\registeredsymbol}% + \DeclareUnicodeCharacter{00AF}{\={ }}% + % + \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}% + \DeclareUnicodeCharacter{00B1}{\ensuremath\pm}% + \DeclareUnicodeCharacter{00B2}{$^2$}% + \DeclareUnicodeCharacter{00B3}{$^3$}% + \DeclareUnicodeCharacter{00B4}{\'{ }}% + \DeclareUnicodeCharacter{00B5}{$\mu$}% + \DeclareUnicodeCharacter{00B6}{\P}% + \DeclareUnicodeCharacter{00B7}{\ensuremath\cdot}% + \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}% + \DeclareUnicodeCharacter{00C1}{\'A}% + \DeclareUnicodeCharacter{00C2}{\^A}% + \DeclareUnicodeCharacter{00C3}{\~A}% + \DeclareUnicodeCharacter{00C4}{\"A}% + \DeclareUnicodeCharacter{00C5}{\AA}% + \DeclareUnicodeCharacter{00C6}{\AE}% + \DeclareUnicodeCharacter{00C7}{\cedilla{C}}% + \DeclareUnicodeCharacter{00C8}{\`E}% + \DeclareUnicodeCharacter{00C9}{\'E}% + \DeclareUnicodeCharacter{00CA}{\^E}% + \DeclareUnicodeCharacter{00CB}{\"E}% + \DeclareUnicodeCharacter{00CC}{\`I}% + \DeclareUnicodeCharacter{00CD}{\'I}% + \DeclareUnicodeCharacter{00CE}{\^I}% + \DeclareUnicodeCharacter{00CF}{\"I}% + % + \DeclareUnicodeCharacter{00D0}{\DH}% + \DeclareUnicodeCharacter{00D1}{\~N}% + \DeclareUnicodeCharacter{00D2}{\`O}% + \DeclareUnicodeCharacter{00D3}{\'O}% + \DeclareUnicodeCharacter{00D4}{\^O}% + \DeclareUnicodeCharacter{00D5}{\~O}% + \DeclareUnicodeCharacter{00D6}{\"O}% + \DeclareUnicodeCharacter{00D7}{\ensuremath\times}% + \DeclareUnicodeCharacter{00D8}{\O}% + \DeclareUnicodeCharacter{00D9}{\`U}% + \DeclareUnicodeCharacter{00DA}{\'U}% + \DeclareUnicodeCharacter{00DB}{\^U}% + \DeclareUnicodeCharacter{00DC}{\"U}% + \DeclareUnicodeCharacter{00DD}{\'Y}% + \DeclareUnicodeCharacter{00DE}{\TH}% + \DeclareUnicodeCharacter{00DF}{\ss}% + % + \DeclareUnicodeCharacter{00E0}{\`a}% + \DeclareUnicodeCharacter{00E1}{\'a}% + \DeclareUnicodeCharacter{00E2}{\^a}% + \DeclareUnicodeCharacter{00E3}{\~a}% + \DeclareUnicodeCharacter{00E4}{\"a}% + \DeclareUnicodeCharacter{00E5}{\aa}% + \DeclareUnicodeCharacter{00E6}{\ae}% + \DeclareUnicodeCharacter{00E7}{\cedilla{c}}% + \DeclareUnicodeCharacter{00E8}{\`e}% + \DeclareUnicodeCharacter{00E9}{\'e}% + \DeclareUnicodeCharacter{00EA}{\^e}% + \DeclareUnicodeCharacter{00EB}{\"e}% + \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}% + \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}% + \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}% + \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}% + % + \DeclareUnicodeCharacter{00F0}{\dh}% + \DeclareUnicodeCharacter{00F1}{\~n}% + \DeclareUnicodeCharacter{00F2}{\`o}% + \DeclareUnicodeCharacter{00F3}{\'o}% + \DeclareUnicodeCharacter{00F4}{\^o}% + \DeclareUnicodeCharacter{00F5}{\~o}% + \DeclareUnicodeCharacter{00F6}{\"o}% + \DeclareUnicodeCharacter{00F7}{\ensuremath\div}% + \DeclareUnicodeCharacter{00F8}{\o}% + \DeclareUnicodeCharacter{00F9}{\`u}% + \DeclareUnicodeCharacter{00FA}{\'u}% + \DeclareUnicodeCharacter{00FB}{\^u}% + \DeclareUnicodeCharacter{00FC}{\"u}% + \DeclareUnicodeCharacter{00FD}{\'y}% + \DeclareUnicodeCharacter{00FE}{\th}% + \DeclareUnicodeCharacter{00FF}{\"y}% + % + \DeclareUnicodeCharacter{0100}{\=A}% + \DeclareUnicodeCharacter{0101}{\=a}% + \DeclareUnicodeCharacter{0102}{\u{A}}% + \DeclareUnicodeCharacter{0103}{\u{a}}% + \DeclareUnicodeCharacter{0104}{\ogonek{A}}% + \DeclareUnicodeCharacter{0105}{\ogonek{a}}% + \DeclareUnicodeCharacter{0106}{\'C}% + \DeclareUnicodeCharacter{0107}{\'c}% + \DeclareUnicodeCharacter{0108}{\^C}% + \DeclareUnicodeCharacter{0109}{\^c}% + \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}% + \DeclareUnicodeCharacter{011D}{\^g}% + \DeclareUnicodeCharacter{011E}{\u{G}}% + \DeclareUnicodeCharacter{011F}{\u{g}}% + % + \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}}% + \DeclareUnicodeCharacter{0132}{IJ}% + \DeclareUnicodeCharacter{0133}{ij}% + \DeclareUnicodeCharacter{0134}{\^J}% + \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}% + \DeclareUnicodeCharacter{0136}{\cedilla{K}}% + \DeclareUnicodeCharacter{0137}{\cedilla{k}}% + \DeclareUnicodeCharacter{0138}{\ensuremath\kappa}% + \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}} - \DeclareUnicodeCharacter{014F}{\u{o}} - - \DeclareUnicodeCharacter{0150}{\H{O}} - \DeclareUnicodeCharacter{0151}{\H{o}} - \DeclareUnicodeCharacter{0152}{\OE} - \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} - \DeclareUnicodeCharacter{015B}{\'s} - \DeclareUnicodeCharacter{015C}{\^S} - \DeclareUnicodeCharacter{015D}{\^s} - \DeclareUnicodeCharacter{015E}{\cedilla{S}} - \DeclareUnicodeCharacter{015F}{\cedilla{s}} - - \DeclareUnicodeCharacter{0160}{\v{S}} - \DeclareUnicodeCharacter{0161}{\v{s}} - \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} - \DeclareUnicodeCharacter{016B}{\=u} - \DeclareUnicodeCharacter{016C}{\u{U}} - \DeclareUnicodeCharacter{016D}{\u{u}} - \DeclareUnicodeCharacter{016E}{\ringaccent{U}} - \DeclareUnicodeCharacter{016F}{\ringaccent{u}} - - \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} - \DeclareUnicodeCharacter{0177}{\^y} - \DeclareUnicodeCharacter{0178}{\"Y} - \DeclareUnicodeCharacter{0179}{\'Z} - \DeclareUnicodeCharacter{017A}{\'z} - \DeclareUnicodeCharacter{017B}{\dotaccent{Z}} - \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}} - \DeclareUnicodeCharacter{01C6}{d\v{z}} - \DeclareUnicodeCharacter{01C7}{LJ} - \DeclareUnicodeCharacter{01C8}{Lj} - \DeclareUnicodeCharacter{01C9}{lj} - \DeclareUnicodeCharacter{01CA}{NJ} - \DeclareUnicodeCharacter{01CB}{Nj} - \DeclareUnicodeCharacter{01CC}{nj} - \DeclareUnicodeCharacter{01CD}{\v{A}} - \DeclareUnicodeCharacter{01CE}{\v{a}} - \DeclareUnicodeCharacter{01CF}{\v{I}} - - \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}} - \DeclareUnicodeCharacter{01D1}{\v{O}} - \DeclareUnicodeCharacter{01D2}{\v{o}} - \DeclareUnicodeCharacter{01D3}{\v{U}} - \DeclareUnicodeCharacter{01D4}{\v{u}} - - \DeclareUnicodeCharacter{01E2}{\={\AE}} - \DeclareUnicodeCharacter{01E3}{\={\ae}} - \DeclareUnicodeCharacter{01E6}{\v{G}} - \DeclareUnicodeCharacter{01E7}{\v{g}} - \DeclareUnicodeCharacter{01E8}{\v{K}} - \DeclareUnicodeCharacter{01E9}{\v{k}} - - \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}} - \DeclareUnicodeCharacter{01F1}{DZ} - \DeclareUnicodeCharacter{01F2}{Dz} - \DeclareUnicodeCharacter{01F3}{dz} - \DeclareUnicodeCharacter{01F4}{\'G} - \DeclareUnicodeCharacter{01F5}{\'g} - \DeclareUnicodeCharacter{01F8}{\`N} - \DeclareUnicodeCharacter{01F9}{\`n} - \DeclareUnicodeCharacter{01FC}{\'{\AE}} - \DeclareUnicodeCharacter{01FD}{\'{\ae}} - \DeclareUnicodeCharacter{01FE}{\'{\O}} - \DeclareUnicodeCharacter{01FF}{\'{\o}} - - \DeclareUnicodeCharacter{021E}{\v{H}} - \DeclareUnicodeCharacter{021F}{\v{h}} - - \DeclareUnicodeCharacter{0226}{\dotaccent{A}} - \DeclareUnicodeCharacter{0227}{\dotaccent{a}} - \DeclareUnicodeCharacter{0228}{\cedilla{E}} - \DeclareUnicodeCharacter{0229}{\cedilla{e}} - \DeclareUnicodeCharacter{022E}{\dotaccent{O}} - \DeclareUnicodeCharacter{022F}{\dotaccent{o}} - - \DeclareUnicodeCharacter{0232}{\=Y} - \DeclareUnicodeCharacter{0233}{\=y} - \DeclareUnicodeCharacter{0237}{\dotless{j}} - - \DeclareUnicodeCharacter{02DB}{\ogonek{ }} - + \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}}% + \DeclareUnicodeCharacter{014F}{\u{o}}% + % + \DeclareUnicodeCharacter{0150}{\H{O}}% + \DeclareUnicodeCharacter{0151}{\H{o}}% + \DeclareUnicodeCharacter{0152}{\OE}% + \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}% + \DeclareUnicodeCharacter{015B}{\'s}% + \DeclareUnicodeCharacter{015C}{\^S}% + \DeclareUnicodeCharacter{015D}{\^s}% + \DeclareUnicodeCharacter{015E}{\cedilla{S}}% + \DeclareUnicodeCharacter{015F}{\cedilla{s}}% + % + \DeclareUnicodeCharacter{0160}{\v{S}}% + \DeclareUnicodeCharacter{0161}{\v{s}}% + \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}% + \DeclareUnicodeCharacter{016B}{\=u}% + \DeclareUnicodeCharacter{016C}{\u{U}}% + \DeclareUnicodeCharacter{016D}{\u{u}}% + \DeclareUnicodeCharacter{016E}{\ringaccent{U}}% + \DeclareUnicodeCharacter{016F}{\ringaccent{u}}% + % + \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}% + \DeclareUnicodeCharacter{0177}{\^y}% + \DeclareUnicodeCharacter{0178}{\"Y}% + \DeclareUnicodeCharacter{0179}{\'Z}% + \DeclareUnicodeCharacter{017A}{\'z}% + \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}% + \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}}% + \DeclareUnicodeCharacter{01C6}{d\v{z}}% + \DeclareUnicodeCharacter{01C7}{LJ}% + \DeclareUnicodeCharacter{01C8}{Lj}% + \DeclareUnicodeCharacter{01C9}{lj}% + \DeclareUnicodeCharacter{01CA}{NJ}% + \DeclareUnicodeCharacter{01CB}{Nj}% + \DeclareUnicodeCharacter{01CC}{nj}% + \DeclareUnicodeCharacter{01CD}{\v{A}}% + \DeclareUnicodeCharacter{01CE}{\v{a}}% + \DeclareUnicodeCharacter{01CF}{\v{I}}% + % + \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}% + \DeclareUnicodeCharacter{01D1}{\v{O}}% + \DeclareUnicodeCharacter{01D2}{\v{o}}% + \DeclareUnicodeCharacter{01D3}{\v{U}}% + \DeclareUnicodeCharacter{01D4}{\v{u}}% + % + \DeclareUnicodeCharacter{01E2}{\={\AE}}% + \DeclareUnicodeCharacter{01E3}{\={\ae}}% + \DeclareUnicodeCharacter{01E6}{\v{G}}% + \DeclareUnicodeCharacter{01E7}{\v{g}}% + \DeclareUnicodeCharacter{01E8}{\v{K}}% + \DeclareUnicodeCharacter{01E9}{\v{k}}% + % + \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}% + \DeclareUnicodeCharacter{01F1}{DZ}% + \DeclareUnicodeCharacter{01F2}{Dz}% + \DeclareUnicodeCharacter{01F3}{dz}% + \DeclareUnicodeCharacter{01F4}{\'G}% + \DeclareUnicodeCharacter{01F5}{\'g}% + \DeclareUnicodeCharacter{01F8}{\`N}% + \DeclareUnicodeCharacter{01F9}{\`n}% + \DeclareUnicodeCharacter{01FC}{\'{\AE}}% + \DeclareUnicodeCharacter{01FD}{\'{\ae}}% + \DeclareUnicodeCharacter{01FE}{\'{\O}}% + \DeclareUnicodeCharacter{01FF}{\'{\o}}% + % + \DeclareUnicodeCharacter{021E}{\v{H}}% + \DeclareUnicodeCharacter{021F}{\v{h}}% + % + \DeclareUnicodeCharacter{0226}{\dotaccent{A}}% + \DeclareUnicodeCharacter{0227}{\dotaccent{a}}% + \DeclareUnicodeCharacter{0228}{\cedilla{E}}% + \DeclareUnicodeCharacter{0229}{\cedilla{e}}% + \DeclareUnicodeCharacter{022E}{\dotaccent{O}}% + \DeclareUnicodeCharacter{022F}{\dotaccent{o}}% + % + \DeclareUnicodeCharacter{0232}{\=Y}% + \DeclareUnicodeCharacter{0233}{\=y}% + \DeclareUnicodeCharacter{0237}{\dotless{j}}% + % + \DeclareUnicodeCharacter{02DB}{\ogonek{ }}% + % % Greek letters upper case - \DeclareUnicodeCharacter{0391}{{\it A}} - \DeclareUnicodeCharacter{0392}{{\it B}} - \DeclareUnicodeCharacter{0393}{\ensuremath{\mit\Gamma}} - \DeclareUnicodeCharacter{0394}{\ensuremath{\mit\Delta}} - \DeclareUnicodeCharacter{0395}{{\it E}} - \DeclareUnicodeCharacter{0396}{{\it Z}} - \DeclareUnicodeCharacter{0397}{{\it H}} - \DeclareUnicodeCharacter{0398}{\ensuremath{\mit\Theta}} - \DeclareUnicodeCharacter{0399}{{\it I}} - \DeclareUnicodeCharacter{039A}{{\it K}} - \DeclareUnicodeCharacter{039B}{\ensuremath{\mit\Lambda}} - \DeclareUnicodeCharacter{039C}{{\it M}} - \DeclareUnicodeCharacter{039D}{{\it N}} - \DeclareUnicodeCharacter{039E}{\ensuremath{\mit\Xi}} - \DeclareUnicodeCharacter{039F}{{\it O}} - \DeclareUnicodeCharacter{03A0}{\ensuremath{\mit\Pi}} - \DeclareUnicodeCharacter{03A1}{{\it P}} + \DeclareUnicodeCharacter{0391}{{\it A}}% + \DeclareUnicodeCharacter{0392}{{\it B}}% + \DeclareUnicodeCharacter{0393}{\ensuremath{\mit\Gamma}}% + \DeclareUnicodeCharacter{0394}{\ensuremath{\mit\Delta}}% + \DeclareUnicodeCharacter{0395}{{\it E}}% + \DeclareUnicodeCharacter{0396}{{\it Z}}% + \DeclareUnicodeCharacter{0397}{{\it H}}% + \DeclareUnicodeCharacter{0398}{\ensuremath{\mit\Theta}}% + \DeclareUnicodeCharacter{0399}{{\it I}}% + \DeclareUnicodeCharacter{039A}{{\it K}}% + \DeclareUnicodeCharacter{039B}{\ensuremath{\mit\Lambda}}% + \DeclareUnicodeCharacter{039C}{{\it M}}% + \DeclareUnicodeCharacter{039D}{{\it N}}% + \DeclareUnicodeCharacter{039E}{\ensuremath{\mit\Xi}}% + \DeclareUnicodeCharacter{039F}{{\it O}}% + \DeclareUnicodeCharacter{03A0}{\ensuremath{\mit\Pi}}% + \DeclareUnicodeCharacter{03A1}{{\it P}}% %\DeclareUnicodeCharacter{03A2}{} % none - corresponds to final sigma - \DeclareUnicodeCharacter{03A3}{\ensuremath{\mit\Sigma}} - \DeclareUnicodeCharacter{03A4}{{\it T}} - \DeclareUnicodeCharacter{03A5}{\ensuremath{\mit\Upsilon}} - \DeclareUnicodeCharacter{03A6}{\ensuremath{\mit\Phi}} - \DeclareUnicodeCharacter{03A7}{{\it X}} - \DeclareUnicodeCharacter{03A8}{\ensuremath{\mit\Psi}} - \DeclareUnicodeCharacter{03A9}{\ensuremath{\mit\Omega}} - + \DeclareUnicodeCharacter{03A3}{\ensuremath{\mit\Sigma}}% + \DeclareUnicodeCharacter{03A4}{{\it T}}% + \DeclareUnicodeCharacter{03A5}{\ensuremath{\mit\Upsilon}}% + \DeclareUnicodeCharacter{03A6}{\ensuremath{\mit\Phi}}% + \DeclareUnicodeCharacter{03A7}{{\it X}}% + \DeclareUnicodeCharacter{03A8}{\ensuremath{\mit\Psi}}% + \DeclareUnicodeCharacter{03A9}{\ensuremath{\mit\Omega}}% + % % Vowels with accents - \DeclareUnicodeCharacter{0390}{\ensuremath{\ddot{\acute\iota}}} - \DeclareUnicodeCharacter{03AC}{\ensuremath{\acute\alpha}} - \DeclareUnicodeCharacter{03AD}{\ensuremath{\acute\epsilon}} - \DeclareUnicodeCharacter{03AE}{\ensuremath{\acute\eta}} - \DeclareUnicodeCharacter{03AF}{\ensuremath{\acute\iota}} - \DeclareUnicodeCharacter{03B0}{\ensuremath{\acute{\ddot\upsilon}}} - + \DeclareUnicodeCharacter{0390}{\ensuremath{\ddot{\acute\iota}}}% + \DeclareUnicodeCharacter{03AC}{\ensuremath{\acute\alpha}}% + \DeclareUnicodeCharacter{03AD}{\ensuremath{\acute\epsilon}}% + \DeclareUnicodeCharacter{03AE}{\ensuremath{\acute\eta}}% + \DeclareUnicodeCharacter{03AF}{\ensuremath{\acute\iota}}% + \DeclareUnicodeCharacter{03B0}{\ensuremath{\acute{\ddot\upsilon}}}% + % % Standalone accent - \DeclareUnicodeCharacter{0384}{\ensuremath{\acute{\ }}} - + \DeclareUnicodeCharacter{0384}{\ensuremath{\acute{\ }}}% + % % Greek letters lower case - \DeclareUnicodeCharacter{03B1}{\ensuremath\alpha} - \DeclareUnicodeCharacter{03B2}{\ensuremath\beta} - \DeclareUnicodeCharacter{03B3}{\ensuremath\gamma} - \DeclareUnicodeCharacter{03B4}{\ensuremath\delta} - \DeclareUnicodeCharacter{03B5}{\ensuremath\epsilon} - \DeclareUnicodeCharacter{03B6}{\ensuremath\zeta} - \DeclareUnicodeCharacter{03B7}{\ensuremath\eta} - \DeclareUnicodeCharacter{03B8}{\ensuremath\theta} - \DeclareUnicodeCharacter{03B9}{\ensuremath\iota} - \DeclareUnicodeCharacter{03BA}{\ensuremath\kappa} - \DeclareUnicodeCharacter{03BB}{\ensuremath\lambda} - \DeclareUnicodeCharacter{03BC}{\ensuremath\mu} - \DeclareUnicodeCharacter{03BD}{\ensuremath\nu} - \DeclareUnicodeCharacter{03BE}{\ensuremath\xi} - \DeclareUnicodeCharacter{03BF}{{\it o}} % omicron - \DeclareUnicodeCharacter{03C0}{\ensuremath\pi} - \DeclareUnicodeCharacter{03C1}{\ensuremath\rho} - \DeclareUnicodeCharacter{03C2}{\ensuremath\varsigma} - \DeclareUnicodeCharacter{03C3}{\ensuremath\sigma} - \DeclareUnicodeCharacter{03C4}{\ensuremath\tau} - \DeclareUnicodeCharacter{03C5}{\ensuremath\upsilon} - \DeclareUnicodeCharacter{03C6}{\ensuremath\phi} - \DeclareUnicodeCharacter{03C7}{\ensuremath\chi} - \DeclareUnicodeCharacter{03C8}{\ensuremath\psi} - \DeclareUnicodeCharacter{03C9}{\ensuremath\omega} - + \DeclareUnicodeCharacter{03B1}{\ensuremath\alpha}% + \DeclareUnicodeCharacter{03B2}{\ensuremath\beta}% + \DeclareUnicodeCharacter{03B3}{\ensuremath\gamma}% + \DeclareUnicodeCharacter{03B4}{\ensuremath\delta}% + \DeclareUnicodeCharacter{03B5}{\ensuremath\epsilon}% + \DeclareUnicodeCharacter{03B6}{\ensuremath\zeta}% + \DeclareUnicodeCharacter{03B7}{\ensuremath\eta}% + \DeclareUnicodeCharacter{03B8}{\ensuremath\theta}% + \DeclareUnicodeCharacter{03B9}{\ensuremath\iota}% + \DeclareUnicodeCharacter{03BA}{\ensuremath\kappa}% + \DeclareUnicodeCharacter{03BB}{\ensuremath\lambda}% + \DeclareUnicodeCharacter{03BC}{\ensuremath\mu}% + \DeclareUnicodeCharacter{03BD}{\ensuremath\nu}% + \DeclareUnicodeCharacter{03BE}{\ensuremath\xi}% + \DeclareUnicodeCharacter{03BF}{{\it o}}% omicron + \DeclareUnicodeCharacter{03C0}{\ensuremath\pi}% + \DeclareUnicodeCharacter{03C1}{\ensuremath\rho}% + \DeclareUnicodeCharacter{03C2}{\ensuremath\varsigma}% + \DeclareUnicodeCharacter{03C3}{\ensuremath\sigma}% + \DeclareUnicodeCharacter{03C4}{\ensuremath\tau}% + \DeclareUnicodeCharacter{03C5}{\ensuremath\upsilon}% + \DeclareUnicodeCharacter{03C6}{\ensuremath\phi}% + \DeclareUnicodeCharacter{03C7}{\ensuremath\chi}% + \DeclareUnicodeCharacter{03C8}{\ensuremath\psi}% + \DeclareUnicodeCharacter{03C9}{\ensuremath\omega}% + % % More Greek vowels with accents - \DeclareUnicodeCharacter{03CA}{\ensuremath{\ddot\iota}} - \DeclareUnicodeCharacter{03CB}{\ensuremath{\ddot\upsilon}} - \DeclareUnicodeCharacter{03CC}{\ensuremath{\acute o}} - \DeclareUnicodeCharacter{03CD}{\ensuremath{\acute\upsilon}} - \DeclareUnicodeCharacter{03CE}{\ensuremath{\acute\omega}} - + \DeclareUnicodeCharacter{03CA}{\ensuremath{\ddot\iota}}% + \DeclareUnicodeCharacter{03CB}{\ensuremath{\ddot\upsilon}}% + \DeclareUnicodeCharacter{03CC}{\ensuremath{\acute o}}% + \DeclareUnicodeCharacter{03CD}{\ensuremath{\acute\upsilon}}% + \DeclareUnicodeCharacter{03CE}{\ensuremath{\acute\omega}}% + % % Variant Greek letters - \DeclareUnicodeCharacter{03D1}{\ensuremath\vartheta} - \DeclareUnicodeCharacter{03D6}{\ensuremath\varpi} - \DeclareUnicodeCharacter{03F1}{\ensuremath\varrho} - - \DeclareUnicodeCharacter{1E02}{\dotaccent{B}} - \DeclareUnicodeCharacter{1E03}{\dotaccent{b}} - \DeclareUnicodeCharacter{1E04}{\udotaccent{B}} - \DeclareUnicodeCharacter{1E05}{\udotaccent{b}} - \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}} - \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}} - \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}} - \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}} - \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}} - \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}} - \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}} - \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}} - - \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}} - \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}} - - \DeclareUnicodeCharacter{1E20}{\=G} - \DeclareUnicodeCharacter{1E21}{\=g} - \DeclareUnicodeCharacter{1E22}{\dotaccent{H}} - \DeclareUnicodeCharacter{1E23}{\dotaccent{h}} - \DeclareUnicodeCharacter{1E24}{\udotaccent{H}} - \DeclareUnicodeCharacter{1E25}{\udotaccent{h}} - \DeclareUnicodeCharacter{1E26}{\"H} - \DeclareUnicodeCharacter{1E27}{\"h} - - \DeclareUnicodeCharacter{1E30}{\'K} - \DeclareUnicodeCharacter{1E31}{\'k} - \DeclareUnicodeCharacter{1E32}{\udotaccent{K}} - \DeclareUnicodeCharacter{1E33}{\udotaccent{k}} - \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}} - \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}} - \DeclareUnicodeCharacter{1E36}{\udotaccent{L}} - \DeclareUnicodeCharacter{1E37}{\udotaccent{l}} - \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}} - \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}} - \DeclareUnicodeCharacter{1E3E}{\'M} - \DeclareUnicodeCharacter{1E3F}{\'m} - - \DeclareUnicodeCharacter{1E40}{\dotaccent{M}} - \DeclareUnicodeCharacter{1E41}{\dotaccent{m}} - \DeclareUnicodeCharacter{1E42}{\udotaccent{M}} - \DeclareUnicodeCharacter{1E43}{\udotaccent{m}} - \DeclareUnicodeCharacter{1E44}{\dotaccent{N}} - \DeclareUnicodeCharacter{1E45}{\dotaccent{n}} - \DeclareUnicodeCharacter{1E46}{\udotaccent{N}} - \DeclareUnicodeCharacter{1E47}{\udotaccent{n}} - \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}} - \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}} - - \DeclareUnicodeCharacter{1E54}{\'P} - \DeclareUnicodeCharacter{1E55}{\'p} - \DeclareUnicodeCharacter{1E56}{\dotaccent{P}} - \DeclareUnicodeCharacter{1E57}{\dotaccent{p}} - \DeclareUnicodeCharacter{1E58}{\dotaccent{R}} - \DeclareUnicodeCharacter{1E59}{\dotaccent{r}} - \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}} - \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}} - \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}} - \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}} - - \DeclareUnicodeCharacter{1E60}{\dotaccent{S}} - \DeclareUnicodeCharacter{1E61}{\dotaccent{s}} - \DeclareUnicodeCharacter{1E62}{\udotaccent{S}} - \DeclareUnicodeCharacter{1E63}{\udotaccent{s}} - \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}} - \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}} - \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}} - \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}} - \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}} - \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}} - - \DeclareUnicodeCharacter{1E7C}{\~V} - \DeclareUnicodeCharacter{1E7D}{\~v} - \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}} - \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}} - - \DeclareUnicodeCharacter{1E80}{\`W} - \DeclareUnicodeCharacter{1E81}{\`w} - \DeclareUnicodeCharacter{1E82}{\'W} - \DeclareUnicodeCharacter{1E83}{\'w} - \DeclareUnicodeCharacter{1E84}{\"W} - \DeclareUnicodeCharacter{1E85}{\"w} - \DeclareUnicodeCharacter{1E86}{\dotaccent{W}} - \DeclareUnicodeCharacter{1E87}{\dotaccent{w}} - \DeclareUnicodeCharacter{1E88}{\udotaccent{W}} - \DeclareUnicodeCharacter{1E89}{\udotaccent{w}} - \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}} - \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}} - \DeclareUnicodeCharacter{1E8C}{\"X} - \DeclareUnicodeCharacter{1E8D}{\"x} - \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}} - \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}} - - \DeclareUnicodeCharacter{1E90}{\^Z} - \DeclareUnicodeCharacter{1E91}{\^z} - \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}} - \DeclareUnicodeCharacter{1E93}{\udotaccent{z}} - \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}} - \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}} - \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}} - \DeclareUnicodeCharacter{1E97}{\"t} - \DeclareUnicodeCharacter{1E98}{\ringaccent{w}} - \DeclareUnicodeCharacter{1E99}{\ringaccent{y}} - - \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}} - \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}} - - \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}} - \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}} - \DeclareUnicodeCharacter{1EBC}{\~E} - \DeclareUnicodeCharacter{1EBD}{\~e} - - \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}} - \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}} - \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}} - \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}} - - \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}} - \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}} - - \DeclareUnicodeCharacter{1EF2}{\`Y} - \DeclareUnicodeCharacter{1EF3}{\`y} - \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}} - - \DeclareUnicodeCharacter{1EF8}{\~Y} - \DeclareUnicodeCharacter{1EF9}{\~y} - + \DeclareUnicodeCharacter{03D1}{\ensuremath\vartheta}% + \DeclareUnicodeCharacter{03D6}{\ensuremath\varpi}% + \DeclareUnicodeCharacter{03F1}{\ensuremath\varrho}% + % + \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}% + \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}% + \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}% + \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}% + \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}% + \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}% + \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}% + \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}% + \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}% + \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}% + \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}% + \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}% + % + \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}% + \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}% + % + \DeclareUnicodeCharacter{1E20}{\=G}% + \DeclareUnicodeCharacter{1E21}{\=g}% + \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}% + \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}% + \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}% + \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}% + \DeclareUnicodeCharacter{1E26}{\"H}% + \DeclareUnicodeCharacter{1E27}{\"h}% + % + \DeclareUnicodeCharacter{1E30}{\'K}% + \DeclareUnicodeCharacter{1E31}{\'k}% + \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}% + \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}% + \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}% + \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}% + \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}% + \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}% + \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}% + \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}% + \DeclareUnicodeCharacter{1E3E}{\'M}% + \DeclareUnicodeCharacter{1E3F}{\'m}% + % + \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}% + \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}% + \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}% + \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}% + \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}% + \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}% + \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}% + \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}% + \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}% + \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}% + % + \DeclareUnicodeCharacter{1E54}{\'P}% + \DeclareUnicodeCharacter{1E55}{\'p}% + \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}% + \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}% + \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}% + \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}% + \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}% + \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}% + \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}% + \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}% + % + \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}% + \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}% + \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}% + \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}% + \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}% + \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}% + \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}% + \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}% + \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}% + \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}% + % + \DeclareUnicodeCharacter{1E7C}{\~V}% + \DeclareUnicodeCharacter{1E7D}{\~v}% + \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}% + \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}% + % + \DeclareUnicodeCharacter{1E80}{\`W}% + \DeclareUnicodeCharacter{1E81}{\`w}% + \DeclareUnicodeCharacter{1E82}{\'W}% + \DeclareUnicodeCharacter{1E83}{\'w}% + \DeclareUnicodeCharacter{1E84}{\"W}% + \DeclareUnicodeCharacter{1E85}{\"w}% + \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}% + \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}% + \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}% + \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}% + \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}% + \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}% + \DeclareUnicodeCharacter{1E8C}{\"X}% + \DeclareUnicodeCharacter{1E8D}{\"x}% + \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}% + \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}% + % + \DeclareUnicodeCharacter{1E90}{\^Z}% + \DeclareUnicodeCharacter{1E91}{\^z}% + \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}% + \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}% + \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}% + \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}% + \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}% + \DeclareUnicodeCharacter{1E97}{\"t}% + \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}% + \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}% + % + \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}% + \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}% + % + \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}% + \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}% + \DeclareUnicodeCharacter{1EBC}{\~E}% + \DeclareUnicodeCharacter{1EBD}{\~e}% + % + \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}% + \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}% + \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}% + \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}% + % + \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}% + \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}% + % + \DeclareUnicodeCharacter{1EF2}{\`Y}% + \DeclareUnicodeCharacter{1EF3}{\`y}% + \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}% + % + \DeclareUnicodeCharacter{1EF8}{\~Y}% + \DeclareUnicodeCharacter{1EF9}{\~y}% + % % Punctuation - \DeclareUnicodeCharacter{2013}{--} - \DeclareUnicodeCharacter{2014}{---} - \DeclareUnicodeCharacter{2018}{\quoteleft} - \DeclareUnicodeCharacter{2019}{\quoteright} - \DeclareUnicodeCharacter{201A}{\quotesinglbase} - \DeclareUnicodeCharacter{201C}{\quotedblleft} - \DeclareUnicodeCharacter{201D}{\quotedblright} - \DeclareUnicodeCharacter{201E}{\quotedblbase} - \DeclareUnicodeCharacter{2020}{\ensuremath\dagger} - \DeclareUnicodeCharacter{2021}{\ensuremath\ddagger} - \DeclareUnicodeCharacter{2022}{\bullet} - \DeclareUnicodeCharacter{202F}{\thinspace} - \DeclareUnicodeCharacter{2026}{\dots} - \DeclareUnicodeCharacter{2039}{\guilsinglleft} - \DeclareUnicodeCharacter{203A}{\guilsinglright} - - \DeclareUnicodeCharacter{20AC}{\euro} - - \DeclareUnicodeCharacter{2192}{\expansion} - \DeclareUnicodeCharacter{21D2}{\result} - + \DeclareUnicodeCharacter{2013}{--}% + \DeclareUnicodeCharacter{2014}{---}% + \DeclareUnicodeCharacter{2018}{\quoteleft}% + \DeclareUnicodeCharacter{2019}{\quoteright}% + \DeclareUnicodeCharacter{201A}{\quotesinglbase}% + \DeclareUnicodeCharacter{201C}{\quotedblleft}% + \DeclareUnicodeCharacter{201D}{\quotedblright}% + \DeclareUnicodeCharacter{201E}{\quotedblbase}% + \DeclareUnicodeCharacter{2020}{\ensuremath\dagger}% + \DeclareUnicodeCharacter{2021}{\ensuremath\ddagger}% + \DeclareUnicodeCharacter{2022}{\bullet}% + \DeclareUnicodeCharacter{202F}{\thinspace}% + \DeclareUnicodeCharacter{2026}{\dots}% + \DeclareUnicodeCharacter{2039}{\guilsinglleft}% + \DeclareUnicodeCharacter{203A}{\guilsinglright}% + % + \DeclareUnicodeCharacter{20AC}{\euro}% + % + \DeclareUnicodeCharacter{2192}{\expansion}% + \DeclareUnicodeCharacter{21D2}{\result}% + % % Mathematical symbols - \DeclareUnicodeCharacter{2200}{\ensuremath\forall} - \DeclareUnicodeCharacter{2203}{\ensuremath\exists} - \DeclareUnicodeCharacter{2208}{\ensuremath\in} - \DeclareUnicodeCharacter{2212}{\minus} - \DeclareUnicodeCharacter{2217}{\ast} - \DeclareUnicodeCharacter{221E}{\ensuremath\infty} - \DeclareUnicodeCharacter{2225}{\ensuremath\parallel} - \DeclareUnicodeCharacter{2227}{\ensuremath\wedge} - \DeclareUnicodeCharacter{2229}{\ensuremath\cap} - \DeclareUnicodeCharacter{2261}{\equiv} - \DeclareUnicodeCharacter{2264}{\ensuremath\leq} - \DeclareUnicodeCharacter{2265}{\ensuremath\geq} - \DeclareUnicodeCharacter{2282}{\ensuremath\subset} - \DeclareUnicodeCharacter{2287}{\ensuremath\supseteq} - - \DeclareUnicodeCharacter{2016}{\ensuremath\Vert} - \DeclareUnicodeCharacter{2032}{\ensuremath\prime} - \DeclareUnicodeCharacter{210F}{\ensuremath\hbar} - \DeclareUnicodeCharacter{2111}{\ensuremath\Im} - \DeclareUnicodeCharacter{2113}{\ensuremath\ell} - \DeclareUnicodeCharacter{2118}{\ensuremath\wp} - \DeclareUnicodeCharacter{211C}{\ensuremath\Re} - \DeclareUnicodeCharacter{2127}{\ensuremath\mho} - \DeclareUnicodeCharacter{2135}{\ensuremath\aleph} - \DeclareUnicodeCharacter{2190}{\ensuremath\leftarrow} - \DeclareUnicodeCharacter{2191}{\ensuremath\uparrow} - \DeclareUnicodeCharacter{2193}{\ensuremath\downarrow} - \DeclareUnicodeCharacter{2194}{\ensuremath\leftrightarrow} - \DeclareUnicodeCharacter{2195}{\ensuremath\updownarrow} - \DeclareUnicodeCharacter{2196}{\ensuremath\nwarrow} - \DeclareUnicodeCharacter{2197}{\ensuremath\nearrow} - \DeclareUnicodeCharacter{2198}{\ensuremath\searrow} - \DeclareUnicodeCharacter{2199}{\ensuremath\swarrow} - \DeclareUnicodeCharacter{21A6}{\ensuremath\mapsto} - \DeclareUnicodeCharacter{21A9}{\ensuremath\hookleftarrow} - \DeclareUnicodeCharacter{21AA}{\ensuremath\hookrightarrow} - \DeclareUnicodeCharacter{21BC}{\ensuremath\leftharpoonup} - \DeclareUnicodeCharacter{21BD}{\ensuremath\leftharpoondown} - \DeclareUnicodeCharacter{21BE}{\ensuremath\upharpoonright} - \DeclareUnicodeCharacter{21C0}{\ensuremath\rightharpoonup} - \DeclareUnicodeCharacter{21C1}{\ensuremath\rightharpoondown} - \DeclareUnicodeCharacter{21CC}{\ensuremath\rightleftharpoons} - \DeclareUnicodeCharacter{21D0}{\ensuremath\Leftarrow} - \DeclareUnicodeCharacter{21D1}{\ensuremath\Uparrow} - \DeclareUnicodeCharacter{21D3}{\ensuremath\Downarrow} - \DeclareUnicodeCharacter{21D4}{\ensuremath\Leftrightarrow} - \DeclareUnicodeCharacter{21D5}{\ensuremath\Updownarrow} - \DeclareUnicodeCharacter{21DD}{\ensuremath\leadsto} - \DeclareUnicodeCharacter{2201}{\ensuremath\complement} - \DeclareUnicodeCharacter{2202}{\ensuremath\partial} - \DeclareUnicodeCharacter{2205}{\ensuremath\emptyset} - \DeclareUnicodeCharacter{2207}{\ensuremath\nabla} - \DeclareUnicodeCharacter{2209}{\ensuremath\notin} - \DeclareUnicodeCharacter{220B}{\ensuremath\owns} - \DeclareUnicodeCharacter{220F}{\ensuremath\prod} - \DeclareUnicodeCharacter{2210}{\ensuremath\coprod} - \DeclareUnicodeCharacter{2211}{\ensuremath\sum} - \DeclareUnicodeCharacter{2213}{\ensuremath\mp} - \DeclareUnicodeCharacter{2218}{\ensuremath\circ} - \DeclareUnicodeCharacter{221A}{\ensuremath\surd} - \DeclareUnicodeCharacter{221D}{\ensuremath\propto} - \DeclareUnicodeCharacter{2220}{\ensuremath\angle} - \DeclareUnicodeCharacter{2223}{\ensuremath\mid} - \DeclareUnicodeCharacter{2228}{\ensuremath\vee} - \DeclareUnicodeCharacter{222A}{\ensuremath\cup} - \DeclareUnicodeCharacter{222B}{\ensuremath\smallint} - \DeclareUnicodeCharacter{222E}{\ensuremath\oint} - \DeclareUnicodeCharacter{223C}{\ensuremath\sim} - \DeclareUnicodeCharacter{2240}{\ensuremath\wr} - \DeclareUnicodeCharacter{2243}{\ensuremath\simeq} - \DeclareUnicodeCharacter{2245}{\ensuremath\cong} - \DeclareUnicodeCharacter{2248}{\ensuremath\approx} - \DeclareUnicodeCharacter{224D}{\ensuremath\asymp} - \DeclareUnicodeCharacter{2250}{\ensuremath\doteq} - \DeclareUnicodeCharacter{2260}{\ensuremath\neq} - \DeclareUnicodeCharacter{226A}{\ensuremath\ll} - \DeclareUnicodeCharacter{226B}{\ensuremath\gg} - \DeclareUnicodeCharacter{227A}{\ensuremath\prec} - \DeclareUnicodeCharacter{227B}{\ensuremath\succ} - \DeclareUnicodeCharacter{2283}{\ensuremath\supset} - \DeclareUnicodeCharacter{2286}{\ensuremath\subseteq} - \DeclareUnicodeCharacter{228E}{\ensuremath\uplus} - \DeclareUnicodeCharacter{228F}{\ensuremath\sqsubset} - \DeclareUnicodeCharacter{2290}{\ensuremath\sqsupset} - \DeclareUnicodeCharacter{2291}{\ensuremath\sqsubseteq} - \DeclareUnicodeCharacter{2292}{\ensuremath\sqsupseteq} - \DeclareUnicodeCharacter{2293}{\ensuremath\sqcap} - \DeclareUnicodeCharacter{2294}{\ensuremath\sqcup} - \DeclareUnicodeCharacter{2295}{\ensuremath\oplus} - \DeclareUnicodeCharacter{2296}{\ensuremath\ominus} - \DeclareUnicodeCharacter{2297}{\ensuremath\otimes} - \DeclareUnicodeCharacter{2298}{\ensuremath\oslash} - \DeclareUnicodeCharacter{2299}{\ensuremath\odot} - \DeclareUnicodeCharacter{22A2}{\ensuremath\vdash} - \DeclareUnicodeCharacter{22A3}{\ensuremath\dashv} - \DeclareUnicodeCharacter{22A4}{\ensuremath\ptextop} - \DeclareUnicodeCharacter{22A5}{\ensuremath\bot} - \DeclareUnicodeCharacter{22A8}{\ensuremath\models} - \DeclareUnicodeCharacter{22B4}{\ensuremath\unlhd} - \DeclareUnicodeCharacter{22B5}{\ensuremath\unrhd} - \DeclareUnicodeCharacter{22C0}{\ensuremath\bigwedge} - \DeclareUnicodeCharacter{22C1}{\ensuremath\bigvee} - \DeclareUnicodeCharacter{22C2}{\ensuremath\bigcap} - \DeclareUnicodeCharacter{22C3}{\ensuremath\bigcup} - \DeclareUnicodeCharacter{22C4}{\ensuremath\diamond} - \DeclareUnicodeCharacter{22C5}{\ensuremath\cdot} - \DeclareUnicodeCharacter{22C6}{\ensuremath\star} - \DeclareUnicodeCharacter{22C8}{\ensuremath\bowtie} - \DeclareUnicodeCharacter{2308}{\ensuremath\lceil} - \DeclareUnicodeCharacter{2309}{\ensuremath\rceil} - \DeclareUnicodeCharacter{230A}{\ensuremath\lfloor} - \DeclareUnicodeCharacter{230B}{\ensuremath\rfloor} - \DeclareUnicodeCharacter{2322}{\ensuremath\frown} - \DeclareUnicodeCharacter{2323}{\ensuremath\smile} - - \DeclareUnicodeCharacter{25A1}{\ensuremath\Box} - \DeclareUnicodeCharacter{25B3}{\ensuremath\triangle} - \DeclareUnicodeCharacter{25B7}{\ensuremath\triangleright} - \DeclareUnicodeCharacter{25BD}{\ensuremath\bigtriangledown} - \DeclareUnicodeCharacter{25C1}{\ensuremath\triangleleft} - \DeclareUnicodeCharacter{25C7}{\ensuremath\Diamond} - \DeclareUnicodeCharacter{2660}{\ensuremath\spadesuit} - \DeclareUnicodeCharacter{2661}{\ensuremath\heartsuit} - \DeclareUnicodeCharacter{2662}{\ensuremath\diamondsuit} - \DeclareUnicodeCharacter{2663}{\ensuremath\clubsuit} - \DeclareUnicodeCharacter{266D}{\ensuremath\flat} - \DeclareUnicodeCharacter{266E}{\ensuremath\natural} - \DeclareUnicodeCharacter{266F}{\ensuremath\sharp} - \DeclareUnicodeCharacter{26AA}{\ensuremath\bigcirc} - \DeclareUnicodeCharacter{27B9}{\ensuremath\rangle} - \DeclareUnicodeCharacter{27C2}{\ensuremath\perp} - \DeclareUnicodeCharacter{27E8}{\ensuremath\langle} - \DeclareUnicodeCharacter{27F5}{\ensuremath\longleftarrow} - \DeclareUnicodeCharacter{27F6}{\ensuremath\longrightarrow} - \DeclareUnicodeCharacter{27F7}{\ensuremath\longleftrightarrow} - \DeclareUnicodeCharacter{27FC}{\ensuremath\longmapsto} - \DeclareUnicodeCharacter{29F5}{\ensuremath\setminus} - \DeclareUnicodeCharacter{2A00}{\ensuremath\bigodot} - \DeclareUnicodeCharacter{2A01}{\ensuremath\bigoplus} - \DeclareUnicodeCharacter{2A02}{\ensuremath\bigotimes} - \DeclareUnicodeCharacter{2A04}{\ensuremath\biguplus} - \DeclareUnicodeCharacter{2A06}{\ensuremath\bigsqcup} - \DeclareUnicodeCharacter{2A1D}{\ensuremath\Join} - \DeclareUnicodeCharacter{2A3F}{\ensuremath\amalg} - \DeclareUnicodeCharacter{2AAF}{\ensuremath\preceq} - \DeclareUnicodeCharacter{2AB0}{\ensuremath\succeq} - - \global\mathchardef\checkmark="1370 % actually the square root sign - \DeclareUnicodeCharacter{2713}{\ensuremath\checkmark} -}% end of \utfeightchardefs + \DeclareUnicodeCharacter{2200}{\ensuremath\forall}% + \DeclareUnicodeCharacter{2203}{\ensuremath\exists}% + \DeclareUnicodeCharacter{2208}{\ensuremath\in}% + \DeclareUnicodeCharacter{2212}{\minus}% + \DeclareUnicodeCharacter{2217}{\ast}% + \DeclareUnicodeCharacter{221E}{\ensuremath\infty}% + \DeclareUnicodeCharacter{2225}{\ensuremath\parallel}% + \DeclareUnicodeCharacter{2227}{\ensuremath\wedge}% + \DeclareUnicodeCharacter{2229}{\ensuremath\cap}% + \DeclareUnicodeCharacter{2261}{\equiv}% + \DeclareUnicodeCharacter{2264}{\ensuremath\leq}% + \DeclareUnicodeCharacter{2265}{\ensuremath\geq}% + \DeclareUnicodeCharacter{2282}{\ensuremath\subset}% + \DeclareUnicodeCharacter{2287}{\ensuremath\supseteq}% + % + \DeclareUnicodeCharacter{2016}{\ensuremath\Vert}% + \DeclareUnicodeCharacter{2032}{\ensuremath\prime}% + \DeclareUnicodeCharacter{210F}{\ensuremath\hbar}% + \DeclareUnicodeCharacter{2111}{\ensuremath\Im}% + \DeclareUnicodeCharacter{2113}{\ensuremath\ell}% + \DeclareUnicodeCharacter{2118}{\ensuremath\wp}% + \DeclareUnicodeCharacter{211C}{\ensuremath\Re}% + \DeclareUnicodeCharacter{2127}{\ensuremath\mho}% + \DeclareUnicodeCharacter{2135}{\ensuremath\aleph}% + \DeclareUnicodeCharacter{2190}{\ensuremath\leftarrow}% + \DeclareUnicodeCharacter{2191}{\ensuremath\uparrow}% + \DeclareUnicodeCharacter{2193}{\ensuremath\downarrow}% + \DeclareUnicodeCharacter{2194}{\ensuremath\leftrightarrow}% + \DeclareUnicodeCharacter{2195}{\ensuremath\updownarrow}% + \DeclareUnicodeCharacter{2196}{\ensuremath\nwarrow}% + \DeclareUnicodeCharacter{2197}{\ensuremath\nearrow}% + \DeclareUnicodeCharacter{2198}{\ensuremath\searrow}% + \DeclareUnicodeCharacter{2199}{\ensuremath\swarrow}% + \DeclareUnicodeCharacter{21A6}{\ensuremath\mapsto}% + \DeclareUnicodeCharacter{21A9}{\ensuremath\hookleftarrow}% + \DeclareUnicodeCharacter{21AA}{\ensuremath\hookrightarrow}% + \DeclareUnicodeCharacter{21BC}{\ensuremath\leftharpoonup}% + \DeclareUnicodeCharacter{21BD}{\ensuremath\leftharpoondown}% + \DeclareUnicodeCharacter{21BE}{\ensuremath\upharpoonright}% + \DeclareUnicodeCharacter{21C0}{\ensuremath\rightharpoonup}% + \DeclareUnicodeCharacter{21C1}{\ensuremath\rightharpoondown}% + \DeclareUnicodeCharacter{21CC}{\ensuremath\rightleftharpoons}% + \DeclareUnicodeCharacter{21D0}{\ensuremath\Leftarrow}% + \DeclareUnicodeCharacter{21D1}{\ensuremath\Uparrow}% + \DeclareUnicodeCharacter{21D3}{\ensuremath\Downarrow}% + \DeclareUnicodeCharacter{21D4}{\ensuremath\Leftrightarrow}% + \DeclareUnicodeCharacter{21D5}{\ensuremath\Updownarrow}% + \DeclareUnicodeCharacter{21DD}{\ensuremath\leadsto}% + \DeclareUnicodeCharacter{2201}{\ensuremath\complement}% + \DeclareUnicodeCharacter{2202}{\ensuremath\partial}% + \DeclareUnicodeCharacter{2205}{\ensuremath\emptyset}% + \DeclareUnicodeCharacter{2207}{\ensuremath\nabla}% + \DeclareUnicodeCharacter{2209}{\ensuremath\notin}% + \DeclareUnicodeCharacter{220B}{\ensuremath\owns}% + \DeclareUnicodeCharacter{220F}{\ensuremath\prod}% + \DeclareUnicodeCharacter{2210}{\ensuremath\coprod}% + \DeclareUnicodeCharacter{2211}{\ensuremath\sum}% + \DeclareUnicodeCharacter{2213}{\ensuremath\mp}% + \DeclareUnicodeCharacter{2218}{\ensuremath\circ}% + \DeclareUnicodeCharacter{221A}{\ensuremath\surd}% + \DeclareUnicodeCharacter{221D}{\ensuremath\propto}% + \DeclareUnicodeCharacter{2220}{\ensuremath\angle}% + \DeclareUnicodeCharacter{2223}{\ensuremath\mid}% + \DeclareUnicodeCharacter{2228}{\ensuremath\vee}% + \DeclareUnicodeCharacter{222A}{\ensuremath\cup}% + \DeclareUnicodeCharacter{222B}{\ensuremath\smallint}% + \DeclareUnicodeCharacter{222E}{\ensuremath\oint}% + \DeclareUnicodeCharacter{223C}{\ensuremath\sim}% + \DeclareUnicodeCharacter{2240}{\ensuremath\wr}% + \DeclareUnicodeCharacter{2243}{\ensuremath\simeq}% + \DeclareUnicodeCharacter{2245}{\ensuremath\cong}% + \DeclareUnicodeCharacter{2248}{\ensuremath\approx}% + \DeclareUnicodeCharacter{224D}{\ensuremath\asymp}% + \DeclareUnicodeCharacter{2250}{\ensuremath\doteq}% + \DeclareUnicodeCharacter{2260}{\ensuremath\neq}% + \DeclareUnicodeCharacter{226A}{\ensuremath\ll}% + \DeclareUnicodeCharacter{226B}{\ensuremath\gg}% + \DeclareUnicodeCharacter{227A}{\ensuremath\prec}% + \DeclareUnicodeCharacter{227B}{\ensuremath\succ}% + \DeclareUnicodeCharacter{2283}{\ensuremath\supset}% + \DeclareUnicodeCharacter{2286}{\ensuremath\subseteq}% + \DeclareUnicodeCharacter{228E}{\ensuremath\uplus}% + \DeclareUnicodeCharacter{228F}{\ensuremath\sqsubset}% + \DeclareUnicodeCharacter{2290}{\ensuremath\sqsupset}% + \DeclareUnicodeCharacter{2291}{\ensuremath\sqsubseteq}% + \DeclareUnicodeCharacter{2292}{\ensuremath\sqsupseteq}% + \DeclareUnicodeCharacter{2293}{\ensuremath\sqcap}% + \DeclareUnicodeCharacter{2294}{\ensuremath\sqcup}% + \DeclareUnicodeCharacter{2295}{\ensuremath\oplus}% + \DeclareUnicodeCharacter{2296}{\ensuremath\ominus}% + \DeclareUnicodeCharacter{2297}{\ensuremath\otimes}% + \DeclareUnicodeCharacter{2298}{\ensuremath\oslash}% + \DeclareUnicodeCharacter{2299}{\ensuremath\odot}% + \DeclareUnicodeCharacter{22A2}{\ensuremath\vdash}% + \DeclareUnicodeCharacter{22A3}{\ensuremath\dashv}% + \DeclareUnicodeCharacter{22A4}{\ensuremath\ptextop}% + \DeclareUnicodeCharacter{22A5}{\ensuremath\bot}% + \DeclareUnicodeCharacter{22A8}{\ensuremath\models}% + \DeclareUnicodeCharacter{22B4}{\ensuremath\unlhd}% + \DeclareUnicodeCharacter{22B5}{\ensuremath\unrhd}% + \DeclareUnicodeCharacter{22C0}{\ensuremath\bigwedge}% + \DeclareUnicodeCharacter{22C1}{\ensuremath\bigvee}% + \DeclareUnicodeCharacter{22C2}{\ensuremath\bigcap}% + \DeclareUnicodeCharacter{22C3}{\ensuremath\bigcup}% + \DeclareUnicodeCharacter{22C4}{\ensuremath\diamond}% + \DeclareUnicodeCharacter{22C5}{\ensuremath\cdot}% + \DeclareUnicodeCharacter{22C6}{\ensuremath\star}% + \DeclareUnicodeCharacter{22C8}{\ensuremath\bowtie}% + \DeclareUnicodeCharacter{2308}{\ensuremath\lceil}% + \DeclareUnicodeCharacter{2309}{\ensuremath\rceil}% + \DeclareUnicodeCharacter{230A}{\ensuremath\lfloor}% + \DeclareUnicodeCharacter{230B}{\ensuremath\rfloor}% + \DeclareUnicodeCharacter{2322}{\ensuremath\frown}% + \DeclareUnicodeCharacter{2323}{\ensuremath\smile}% + % + \DeclareUnicodeCharacter{25A1}{\ensuremath\Box}% + \DeclareUnicodeCharacter{25B3}{\ensuremath\triangle}% + \DeclareUnicodeCharacter{25B7}{\ensuremath\triangleright}% + \DeclareUnicodeCharacter{25BD}{\ensuremath\bigtriangledown}% + \DeclareUnicodeCharacter{25C1}{\ensuremath\triangleleft}% + \DeclareUnicodeCharacter{25C7}{\ensuremath\Diamond}% + \DeclareUnicodeCharacter{2660}{\ensuremath\spadesuit}% + \DeclareUnicodeCharacter{2661}{\ensuremath\heartsuit}% + \DeclareUnicodeCharacter{2662}{\ensuremath\diamondsuit}% + \DeclareUnicodeCharacter{2663}{\ensuremath\clubsuit}% + \DeclareUnicodeCharacter{266D}{\ensuremath\flat}% + \DeclareUnicodeCharacter{266E}{\ensuremath\natural}% + \DeclareUnicodeCharacter{266F}{\ensuremath\sharp}% + \DeclareUnicodeCharacter{26AA}{\ensuremath\bigcirc}% + \DeclareUnicodeCharacter{27B9}{\ensuremath\rangle}% + \DeclareUnicodeCharacter{27C2}{\ensuremath\perp}% + \DeclareUnicodeCharacter{27E8}{\ensuremath\langle}% + \DeclareUnicodeCharacter{27F5}{\ensuremath\longleftarrow}% + \DeclareUnicodeCharacter{27F6}{\ensuremath\longrightarrow}% + \DeclareUnicodeCharacter{27F7}{\ensuremath\longleftrightarrow}% + \DeclareUnicodeCharacter{27FC}{\ensuremath\longmapsto}% + \DeclareUnicodeCharacter{29F5}{\ensuremath\setminus}% + \DeclareUnicodeCharacter{2A00}{\ensuremath\bigodot}% + \DeclareUnicodeCharacter{2A01}{\ensuremath\bigoplus}% + \DeclareUnicodeCharacter{2A02}{\ensuremath\bigotimes}% + \DeclareUnicodeCharacter{2A04}{\ensuremath\biguplus}% + \DeclareUnicodeCharacter{2A06}{\ensuremath\bigsqcup}% + \DeclareUnicodeCharacter{2A1D}{\ensuremath\Join}% + \DeclareUnicodeCharacter{2A3F}{\ensuremath\amalg}% + \DeclareUnicodeCharacter{2AAF}{\ensuremath\preceq}% + \DeclareUnicodeCharacter{2AB0}{\ensuremath\succeq}% + % + \global\mathchardef\checkmark="1370% actually the square root sign + \DeclareUnicodeCharacter{2713}{\ensuremath\checkmark}% +}% end of \unicodechardefs + +% UTF-8 byte sequence (pdfTeX) definitions (replacing and @U command) +% It makes the setting that replace UTF-8 byte sequence. +\def\utfeightchardefs{% + \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterUTFviii + \unicodechardefs +} + +\newif\ifpassthroughchars +\passthroughcharsfalse + +% For native Unicode (XeTeX and LuaTeX) +% Definition macro to replace / pass-through the Unicode character +% +\def\DeclareUnicodeCharacterNative#1#2{% + \catcode"#1=\active + \def\dodeclareunicodecharacternative##1##2##3{% + \begingroup + \uccode`\~="##2\relax + \uppercase{\gdef~}{% + \ifpassthroughchars + ##1% + \else + ##3% + \fi + } + \endgroup + } + \begingroup + \uccode`\.="#1\relax + \uppercase{\def\UTFNativeTmp{.}}% + \expandafter\dodeclareunicodecharacternative\UTFNativeTmp{#1}{#2}% + \endgroup +} + +% Native Unicode (XeTeX and LuaTeX) character replacing definitions +% It makes the setting that replace the Unicode characters. +\def\nativeunicodechardefs{% + \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNative + \unicodechardefs +} + +% For native Unicode (XeTeX and LuaTeX). Make the character token expand +% to the sequences given in \unicodechardefs for printing. +\def\DeclareUnicodeCharacterNativeAtU#1#2{% + \def\UTFAtUTmp{#2} + \expandafter\globallet\csname uni:#1\endcsname \UTFAtUTmp +} + +% Native Unicode (XeTeX and LuaTeX) @U command definitions +\def\nativeunicodechardefsatu{% + \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNativeAtU + \unicodechardefs +} + +% Native Unicode (XeTeX and LuaTeX) catcode other non global definitions +\def\nativeunicodecharscatcodeothernonglobal{% + \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNativeOther + \unicodechardefs +} + +% Catcode (non-ASCII or native Unicode) are set to \other (non-global +% assignments). +\def\setcharscatcodeothernonglobal{% + \iftxiusebytewiseio + \setnonasciicharscatcodenonglobal\other + \else + \nativeunicodecharscatcodeothernonglobal + \fi +} % US-ASCII character definitions. \def\asciichardefs{% nothing need be done \relax } -% Latin1 (ISO-8859-1) character definitions. +% Redefine the active definitions of non-ASCII characters to expand to +% non-active tokens with the same character code. \def\nonasciistringdefs{% \setnonasciicharscatcode\active \def\defstringchar##1{\def##1{\string##1}}% @@ -10659,9 +10933,23 @@ callback.register("process_output_buffer", convert_line_out) \defstringchar^^fc\defstringchar^^fd\defstringchar^^fe\defstringchar^^ff% } +% Write characters literally, instead of using active definitions for +% printing the correct glyphs. +\def\passthroughcharacters{% + \iftxiusebytewiseio + \nonasciistringdefs + \else + \passthroughcharstrue + \fi +} + % define all the unicode characters we know about, for the sake of @U. -\utfeightchardefs +\iftxinativeunicodecapable + \nativeunicodechardefsatu +\else + \utfeightchardefs +\fi % Make non-ASCII characters printable again for compatibility with @@ -11010,7 +11298,7 @@ callback.register("process_output_buffer", convert_line_out) % {@catcode`- = @active @gdef@normalturnoffactive{% - @nonasciistringdefs + @passthroughcharacters @let-=@normaldash @let"=@normaldoublequote @let$=@normaldollar %$ font-lock fix diff --git a/lib/stdalign.in.h b/lib/stdalign.in.h index 9abb9aa..cd83956 100644 --- a/lib/stdalign.in.h +++ b/lib/stdalign.in.h @@ -111,7 +111,7 @@ # endif #endif #if ((defined _Alignas && ! (defined __cplusplus && 201103 <= __cplusplus)) \ - || (defined __STDC_VERSION && 201112 <= __STDC_VERSION__)) + || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__)) # define alignas _Alignas #endif #if defined alignas || (defined __cplusplus && 201103 <= __cplusplus) diff --git a/m4/acl.m4 b/m4/acl.m4 index 0f96337..ce0fe6b 100644 --- a/m4/acl.m4 +++ b/m4/acl.m4 @@ -1,5 +1,5 @@ # acl.m4 - check for access control list (ACL) primitives -# serial 21 +# serial 22 # Copyright (C) 2002, 2004-2016 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation @@ -163,9 +163,8 @@ AC_DEFUN([gl_ACL_GET_FILE], #include #include ]], - [[if (!acl_get_file (".", ACL_TYPE_ACCESS) && errno == ENOENT) - return 1; - return 0; + [[acl_t acl = acl_get_file (".", ACL_TYPE_ACCESS); + return acl ? acl_free (acl) != 0 : errno == ENOENT; ]])], [if test $cross_compiling = yes; then gl_cv_func_working_acl_get_file="guessing yes" diff --git a/m4/getgroups.m4 b/m4/getgroups.m4 index 4b1573d..bf01f32 100644 --- a/m4/getgroups.m4 +++ b/m4/getgroups.m4 @@ -1,4 +1,4 @@ -# serial 18 +# serial 19 dnl From Jim Meyering. dnl A wrapper around AC_FUNC_GETGROUPS. @@ -87,7 +87,9 @@ AC_DEFUN([gl_FUNC_GETGROUPS], [AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT], [[int size = getgroups (0, 0); gid_t *list = malloc (size * sizeof *list); - return getgroups (-1, list) != -1;]])], + int result = getgroups (-1, list) != -1; + free (list); + return result;]])], [gl_cv_func_getgroups_works=yes], [gl_cv_func_getgroups_works=no], [case "$host_os" in commit 815439eadc0ac0fb442be9f1269eadbf37471ff6 Author: Michael Albinus Date: Tue Feb 9 11:06:14 2016 +0100 * CONTRIBUTE: Add more examples for $(SELECTOR) make variable. diff --git a/CONTRIBUTE b/CONTRIBUTE index f1f3a3f..5a5cb5d 100644 --- a/CONTRIBUTE +++ b/CONTRIBUTE @@ -267,6 +267,17 @@ you run "make check-expensive" from the top-level directory. "make line. So "make check SELECTOR=nil" is equivalent to "make check-expensive". +You could also use predefined selectors of the Makefile. "make + SELECTOR='$(SELECTOR_DEFAULT)'" runs all tests for +.el(c) except the tests tagged as expensive. + +Selectors can be defined with different methods, see (info "(ert)Test +Selectors") or +https://www.gnu.org/software/emacs/manual/html_node/ert/Test-Selectors.html +If your test file contains the tests "test-foo", "test2-foo" and +"test-foo-remote", and you want to run only the former two tests, you +could use a regexp: "make SELECTOR='\"foo$$\"'" . + ** Understanding Emacs Internals. The best way to understand Emacs Internals is to read the code, commit 7c9206f82000e9fd6ea9d1a53fc054eff88e701c Author: Katsumi Yamaoka Date: Tue Feb 9 05:30:26 2016 +0000 Make mm-html-inhibit-images and mm-html-blocked-images default to nil * lisp/gnus/mm-decode.el (mm-html-inhibit-images) (mm-html-blocked-images): Default to nil. * doc/misc/emacs-mime.texi (Display Customization): Mention that mm-html-inhibit-images and mm-html-blocked-images default to nil. * etc/NEWS (Gnus): Document mm-html-inhibit-images and mm-html-blocked-images. diff --git a/doc/misc/emacs-mime.texi b/doc/misc/emacs-mime.texi index ae1e091..b7c58d7 100644 --- a/doc/misc/emacs-mime.texi +++ b/doc/misc/emacs-mime.texi @@ -420,7 +420,7 @@ article body. It is effective to images in @acronym{HTML} articles rendered when @code{mm-text-html-renderer} (@pxref{Display Customization}) is @code{shr} or @code{w3m}. In Gnus, this is overridden by the value of @code{gnus-inhibit-images} (@pxref{Misc -Article, ,Misc Article, gnus, Gnus manual}). +Article, ,Misc Article, gnus, Gnus manual}). The default is @code{nil}. @item mm-html-blocked-images @vindex mm-html-blocked-images @@ -436,7 +436,7 @@ It is effective when @code{mm-text-html-renderer} (@pxref{Display Customization}) is @code{shr}. In Gnus, this is overridden by the value of @code{gnus-blocked-images} or the return value of the function that @code{gnus-blocked-images} is set to (@pxref{HTML, ,HTML, gnus, Gnus -manual}). +manual}). The default is @code{nil}. @item mm-w3m-safe-url-regexp @vindex mm-w3m-safe-url-regexp diff --git a/etc/NEWS b/etc/NEWS index c7cd0b1..02f4756 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -353,6 +353,20 @@ to version 206, you can do this with C-u C-u M-x desktop-save. It raises an error if a bookmark of that name already exists, unlike `bookmark-set' which silently updates an existing bookmark. +** Gnus + ++++ +*** New user options `mm-html-inhibit-images' and `mm-html-blocked-images' +now control how mm-* functions fetch and display images in an HTML +message. Gnus still uses `gnus-inhibit-images' and `gnus-blocked-images' +for that purpose, i.e., binds mm-html- variables with those gnus- +variables, but other packages do not have to bind gnus- variables now. + +--- +*** `mm-inline-text-html-with-images' has been removed. +Use `mm-html-inhibit-images' instead. Note that the value is opposite +in meaning. + ** IMAP --- diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el index c6cb652..c45258e 100644 --- a/lisp/gnus/mm-decode.el +++ b/lisp/gnus/mm-decode.el @@ -145,16 +145,13 @@ nil : use external viewer (default web browser)." (function)) :group 'mime-display) -(defcustom mm-html-inhibit-images - (if (boundp 'mm-inline-text-html-with-images) - (not (symbol-value 'mm-inline-text-html-with-images)) - t) +(defcustom mm-html-inhibit-images nil "Non-nil means inhibit displaying of images inline in the article body." :version "25.1" :type 'boolean :group 'mime-display) -(defcustom mm-html-blocked-images "" +(defcustom mm-html-blocked-images nil "Regexp matching image URLs to be blocked, or nil meaning not to block. Note that cid images that are embedded in a message won't be blocked." :version "25.1" commit b1079c0f86c218f016a6c2e84ea402f4e175fc53 Author: Paul Eggert Date: Mon Feb 8 20:24:55 2016 -0800 Increase success rate of fallback lmalloc * src/alloc.c (lmalloc, lrealloc): Reallocate with (typically) larger and larger sizes, to increase the probability that the allocator will return a Lisp-aligned pointer. diff --git a/src/alloc.c b/src/alloc.c index 8816411..668bbc7 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -1380,7 +1380,12 @@ laligned (void *p, size_t size) } /* Like malloc and realloc except that if SIZE is Lisp-aligned, make - sure the result is too. */ + sure the result is too, if necessary by reallocating (typically + with larger and larger sizes) until the allocator returns a + Lisp-aligned pointer. Code that needs to allocate C heap memory + for a Lisp object should use one of these functions to obtain a + pointer P; that way, if T is an enum Lisp_Type value and L == + make_lisp_ptr (P, T), then XPNTR (L) == P and XTYPE (L) == T. */ static void * lmalloc (size_t size) @@ -1397,6 +1402,9 @@ lmalloc (size_t size) if (laligned (p, size)) break; free (p); + size_t bigger; + if (! INT_ADD_WRAPV (size, GCALIGNMENT, &bigger)) + size = bigger; } eassert ((intptr_t) p % GCALIGNMENT == 0); @@ -1406,9 +1414,15 @@ lmalloc (size_t size) static void * lrealloc (void *p, size_t size) { - do - p = realloc (p, size); - while (! laligned (p, size)); + while (true) + { + p = realloc (p, size); + if (laligned (p, size)) + break; + size_t bigger; + if (! INT_ADD_WRAPV (size, GCALIGNMENT, &bigger)) + size = bigger; + } eassert ((intptr_t) p % GCALIGNMENT == 0); return p; commit a3bf4a387fdc44e5631a6431a2e40e741c672359 Author: Lars Ingebrigtsen Date: Tue Feb 9 14:45:22 2016 +1100 Make backgrounds extend to the end of the lines in shr * lisp/net/shr.el (shr-face-background): Faces can also be on the form `(:background "#fff)' (bug#22547). diff --git a/lisp/net/shr.el b/lisp/net/shr.el index bfda654..66a9c04 100644 --- a/lisp/net/shr.el +++ b/lisp/net/shr.el @@ -1786,13 +1786,15 @@ The preference is a float determined from `shr-prefer-media-type'." (defun shr-face-background (face) (and (consp face) - (let ((background nil)) - (dolist (elem face) - (when (and (consp elem) - (eq (car elem) :background)) - (setq background (cadr elem)))) - (and background - (list :background background))))) + (or (and (plist-get face :background) + (list :background (plist-get face :background))) + (let ((background nil)) + (dolist (elem face) + (when (and (consp elem) + (eq (car elem) :background)) + (setq background (cadr elem)))) + (and background + (list :background background)))))) (defun shr-expand-alignments (start end) (while (< (setq start (next-single-property-change commit 9935e7cc8ca61bc0852eefe1142e4c8c62416c73 Author: Lars Ingebrigtsen Date: Tue Feb 9 13:51:45 2016 +1100 Make the `R' command get the correct relative s * lisp/net/eww.el (eww-readable): Preserve the base URL so that image expansions are fetched from the right place (bug#22605). (cherry picked from commit 8722e849f75ceafb82a1c17105e8ab76077a8ebc) Backport: diff --git a/lisp/net/eww.el b/lisp/net/eww.el index 5e24d4f..da920c1 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el @@ -615,11 +615,13 @@ the like." (condition-case nil (decode-coding-region (point-min) (point-max) 'utf-8) (coding-system-error nil)) - (libxml-parse-html-region (point-min) (point-max))))) + (libxml-parse-html-region (point-min) (point-max)))) + (base (plist-get eww-data :url))) (eww-score-readability dom) (eww-save-history) (eww-display-html nil nil - (eww-highest-readability dom) + (list 'base (list (cons 'href base)) + (eww-highest-readability dom)) nil (current-buffer)) (dolist (elem '(:source :url :title :next :previous :up)) (plist-put eww-data elem (plist-get old-data elem))) commit 821213572075b3f5a97676f48aeb6733bf437277 Author: Mike Kupfer Date: Tue Feb 9 01:48:46 2016 +0000 Fix typos in emacs-mime.texi and gnus.texi * doc/misc/emacs-mime.texi (Display Customization): * doc/misc/gnus.texi (HTML): Fix typo. diff --git a/doc/misc/emacs-mime.texi b/doc/misc/emacs-mime.texi index 12316f0..ae1e091 100644 --- a/doc/misc/emacs-mime.texi +++ b/doc/misc/emacs-mime.texi @@ -425,7 +425,7 @@ Article, ,Misc Article, gnus, Gnus manual}). @item mm-html-blocked-images @vindex mm-html-blocked-images External images that have @acronym{URL}s that match this regexp won't -be fetched and displayed. For instance, do block all @acronym{URL}s +be fetched and displayed. For instance, to block all @acronym{URL}s that have the string ``ads'' in them, do the following: @lisp diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi index 8dd0c1b..7bcf1cd 100644 --- a/doc/misc/gnus.texi +++ b/doc/misc/gnus.texi @@ -11789,7 +11789,7 @@ renderer. If set to @code{gnus-w3m}, it uses @code{w3m}. @item gnus-blocked-images @vindex gnus-blocked-images External images that have @acronym{URL}s that match this regexp won't -be fetched and displayed. For instance, do block all @acronym{URL}s +be fetched and displayed. For instance, to block all @acronym{URL}s that have the string ``ads'' in them, do the following: @lisp commit 56ccb84a275be6225eb98f82fd15663aa8d62bd4 Author: Katsumi Yamaoka Date: Tue Feb 9 00:20:27 2016 +0000 * doc/misc/emacs-mime.texi (Display Customization): Doc fix for mm-html-inhibit-images. diff --git a/doc/misc/emacs-mime.texi b/doc/misc/emacs-mime.texi index 64fed56..12316f0 100644 --- a/doc/misc/emacs-mime.texi +++ b/doc/misc/emacs-mime.texi @@ -416,12 +416,11 @@ called with a @acronym{MIME} handle as the argument. @vindex mm-html-inhibit-images @vindex mm-inline-text-html-with-images If this is non-@code{nil}, inhibit displaying of images inline in the -article body. It is effective to images that are in articles as -@acronym{MIME} parts, and images in @acronym{HTML} articles rendered -when @code{mm-text-html-renderer} (@pxref{Display Customization}) is -@code{shr} or @code{w3m}. In Gnus, this is overridden by the value -of @code{gnus-inhibit-images} (@pxref{Misc Article, ,Misc Article, gnus, -Gnus manual}). +article body. It is effective to images in @acronym{HTML} articles +rendered when @code{mm-text-html-renderer} (@pxref{Display +Customization}) is @code{shr} or @code{w3m}. In Gnus, this is +overridden by the value of @code{gnus-inhibit-images} (@pxref{Misc +Article, ,Misc Article, gnus, Gnus manual}). @item mm-html-blocked-images @vindex mm-html-blocked-images commit 435af8016ade677262931fd7c4cf7aa54b226828 Author: Lars Ingebrigtsen Date: Tue Feb 9 10:34:59 2016 +1100 Fix message-cross-post-followup-to group names * lisp/gnus/message.el (message-cross-post-followup-to): Don't insert group names like "nntp+foo:zot", because those aren't valid. diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el index 27cae74..ed0422c 100644 --- a/lisp/gnus/message.el +++ b/lisp/gnus/message.el @@ -2467,6 +2467,8 @@ With prefix-argument just set Follow-Up, don't cross-post." nil nil '("poster" . 0) (if (boundp 'gnus-group-history) 'gnus-group-history)))) + (when (fboundp 'gnus-group-real-name) + (setq target-group (gnus-group-real-name target-group))) (cond ((not (or (null target-group) ; new subject not empty (zerop (string-width target-group)) (string-match "^[ \t]*$" target-group))) commit 22e239cb406cd5008d3942e66ebb153d8a2d20a4 Author: David Edmondson Date: Tue Feb 9 10:26:52 2016 +1100 Compare recipient and keys case-insensitively * lisp/gnus/mml2015.el: (mml-secure-check-user-id): When comparing a recipient address with that from a key, do so in a case insensitive manner (bug#22603). diff --git a/lisp/gnus/mml-sec.el b/lisp/gnus/mml-sec.el index 48e6384..3ac3da0 100644 --- a/lisp/gnus/mml-sec.el +++ b/lisp/gnus/mml-sec.el @@ -655,10 +655,10 @@ The passphrase is read and cached." (catch 'break (dolist (uid uids nil) (if (and (stringp (epg-user-id-string uid)) - (equal (car (mail-header-parse-address - (epg-user-id-string uid))) - (car (mail-header-parse-address - recipient))) + (equal (downcase (car (mail-header-parse-address + (epg-user-id-string uid)))) + (downcase (car (mail-header-parse-address + recipient)))) (not (memq (epg-user-id-validity uid) '(revoked expired)))) (throw 'break t)))))) commit e85055c9b1e81a2f953b248cbaa9061b99433a35 Author: Glenn Morris Date: Mon Feb 8 17:49:34 2016 -0500 * lisp/gnus/mm-decode.el (mm-alist-to-plist): Doc fix. diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el index 2171bad..c6cb652 100644 --- a/lisp/gnus/mm-decode.el +++ b/lisp/gnus/mm-decode.el @@ -552,7 +552,7 @@ into \(a 1 b 2 c 3) -The original alist is not modified. See also `destructive-alist-to-plist'." +The original alist is not modified." (let (plist) (while alist (let ((el (car alist))) commit 0a4c102a8855786d0f1f1b82beb326680a9e7b05 Author: Katsumi Yamaoka Date: Mon Feb 8 22:41:25 2016 +0000 Refactor HTML images handling of Gnus and mm-* (a part of bug#21650) * doc/misc/emacs-mime.texi (Display Customization): Remove mm-inline-text-html-with-images; add documentations for mm-html-inhibit-images and mm-html-blocked-images. * lisp/gnus/gnus-art.el (gnus-article-show-images): No need to bind mm-inline-text-html-with-images. (gnus-bind-safe-url-regexp): Rename to gnus-bind-mm-vars. (gnus-bind-mm-vars): Rename from gnus-bind-safe-url-regexp; bind mm-html-inhibit-images and mm-html-blocked-images. (gnus-mime-view-all-parts, gnus-mime-view-part-internally) (gnus-mm-display-part, gnus-mime-display-single) (gnus-mime-display-alternative): Use gnus-bind-mm-vars. * lisp/gnus/mm-decode.el (mm-inline-text-html-with-images): Remove. (mm-html-inhibit-images, mm-html-blocked-images): New user options. (mm-shr): Bind shr-inhibit-images and shr-blocked-images with mm-html-inhibit-images and mm-html-blocked-images respectively instead of gnus-inhibit-images and gnus-blocked-images. * lisp/gnus/mm-view.el (mm-setup-w3m): Use mm-html-inhibit-images instead of mm-inline-text-html-with-images. diff --git a/doc/misc/emacs-mime.texi b/doc/misc/emacs-mime.texi index b252b11..64fed56 100644 --- a/doc/misc/emacs-mime.texi +++ b/doc/misc/emacs-mime.texi @@ -412,17 +412,32 @@ information about emacs-w3m}, @code{links}, @code{lynx}, external viewer. You can also specify a function, which will be called with a @acronym{MIME} handle as the argument. -@item mm-inline-text-html-with-images +@item mm-html-inhibit-images +@vindex mm-html-inhibit-images @vindex mm-inline-text-html-with-images -Some @acronym{HTML} mails might have the trick of spammers using -@samp{} tags. It is likely to be intended to verify whether you -have read the mail. You can prevent your personal information from -leaking by setting this option to @code{nil} (which is the default). -For emacs-w3m, you may use the command @kbd{t} on the image anchor to -show an image even if it is @code{nil}.@footnote{The command @kbd{T} -will load all images. If you have set the option -@code{w3m-key-binding} to @code{info}, use @kbd{i} or @kbd{I} -instead.} +If this is non-@code{nil}, inhibit displaying of images inline in the +article body. It is effective to images that are in articles as +@acronym{MIME} parts, and images in @acronym{HTML} articles rendered +when @code{mm-text-html-renderer} (@pxref{Display Customization}) is +@code{shr} or @code{w3m}. In Gnus, this is overridden by the value +of @code{gnus-inhibit-images} (@pxref{Misc Article, ,Misc Article, gnus, +Gnus manual}). + +@item mm-html-blocked-images +@vindex mm-html-blocked-images +External images that have @acronym{URL}s that match this regexp won't +be fetched and displayed. For instance, do block all @acronym{URL}s +that have the string ``ads'' in them, do the following: + +@lisp +(setq mm-html-blocked-images "ads") +@end lisp + +It is effective when @code{mm-text-html-renderer} (@pxref{Display +Customization}) is @code{shr}. In Gnus, this is overridden by the value +of @code{gnus-blocked-images} or the return value of the function that +@code{gnus-blocked-images} is set to (@pxref{HTML, ,HTML, gnus, Gnus +manual}). @item mm-w3m-safe-url-regexp @vindex mm-w3m-safe-url-regexp diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el index 366d14a..079d16b 100644 --- a/lisp/gnus/gnus-art.el +++ b/lisp/gnus/gnus-art.el @@ -2258,8 +2258,7 @@ This only works if the article in question is HTML." (save-restriction (widen) (if (eq mm-text-html-renderer 'w3m) - (let ((mm-inline-text-html-with-images nil)) - (w3m-toggle-inline-images)) + (w3m-toggle-inline-images) (dolist (region (gnus-find-text-property-region (point-min) (point-max) 'image-displayer)) (destructuring-bind (start end function) region @@ -4929,25 +4928,30 @@ General format specifiers can also be used. See Info node (vector (caddr c) (car c) :active t)) gnus-url-button-commands))) -(defmacro gnus-bind-safe-url-regexp (&rest body) - "Bind `mm-w3m-safe-url-regexp' according to `gnus-safe-html-newsgroups'." - `(let ((mm-w3m-safe-url-regexp - (let ((group (if (and (derived-mode-p 'gnus-article-mode) - (gnus-buffer-live-p - gnus-article-current-summary)) - (with-current-buffer gnus-article-current-summary - gnus-newsgroup-name) - gnus-newsgroup-name))) - (if (cond ((not group) - ;; Maybe we're in a mml-preview buffer - ;; and no group is selected. - t) - ((stringp gnus-safe-html-newsgroups) - (string-match gnus-safe-html-newsgroups group)) - ((consp gnus-safe-html-newsgroups) - (member group gnus-safe-html-newsgroups))) - nil - mm-w3m-safe-url-regexp)))) +(defmacro gnus-bind-mm-vars (&rest body) + "Bind some mm-* variables and execute BODY." + `(let (mm-html-inhibit-images + mm-html-blocked-images + (mm-w3m-safe-url-regexp mm-w3m-safe-url-regexp)) + (with-current-buffer + (cond ((derived-mode-p 'gnus-article-mode) + (if (gnus-buffer-live-p gnus-article-current-summary) + gnus-article-current-summary + ;; Maybe we're in a mml-preview buffer + ;; and no group is selected. + (current-buffer))) + ((gnus-buffer-live-p gnus-summary-buffer) + gnus-summary-buffer) + (t (current-buffer))) + (setq mm-html-inhibit-images gnus-inhibit-images + mm-html-blocked-images (gnus-blocked-images)) + (when (or (not gnus-newsgroup-name) + (and (stringp gnus-safe-html-newsgroups) + (string-match gnus-safe-html-newsgroups + gnus-newsgroup-name)) + (and (consp gnus-safe-html-newsgroups) + (member gnus-newsgroup-name gnus-safe-html-newsgroups))) + (setq mm-w3m-safe-url-regexp nil))) ,@body)) (defun gnus-mime-button-menu (event prefix) @@ -4975,7 +4979,7 @@ General format specifiers can also be used. See Info node (or (search-forward "\n\n") (goto-char (point-max))) (let ((inhibit-read-only t)) (delete-region (point) (point-max)) - (gnus-bind-safe-url-regexp (mm-display-parts handles))))))) + (gnus-bind-mm-vars (mm-display-parts handles))))))) (defun gnus-article-jump-to-part (n) "Jump to MIME part N." @@ -5514,8 +5518,7 @@ If no internal viewer is available, use an external viewer." (gnus-mime-view-part-as-type nil (lambda (type) (mm-inlinable-p handle type))) (when handle - (gnus-bind-safe-url-regexp - (mm-display-part handle nil t)))))) + (gnus-bind-mm-vars (mm-display-part handle nil t)))))) (defun gnus-mime-action-on-part (&optional action) "Do something with the MIME attachment at (point)." @@ -5745,7 +5748,7 @@ all parts." (mm-inlined-p handle) t) (with-temp-buffer - (gnus-bind-safe-url-regexp + (gnus-bind-mm-vars (setq retval (mm-display-part handle))) (unless (zerop (buffer-size)) (buffer-string)))))) @@ -6106,7 +6109,7 @@ If nil, don't show those extra buttons." (set-buffer gnus-summary-buffer) (error)) gnus-newsgroup-ignored-charsets))) - (gnus-bind-safe-url-regexp (mm-display-part handle t)))) + (gnus-bind-mm-vars (mm-display-part handle t)))) ((and text not-attachment) (mm-display-inline handle))) (goto-char (point-max)) @@ -6236,7 +6239,7 @@ If nil, don't show those extra buttons." (mail-parse-ignored-charsets (with-current-buffer gnus-summary-buffer gnus-newsgroup-ignored-charsets))) - (gnus-bind-safe-url-regexp (mm-display-part preferred)) + (gnus-bind-mm-vars (mm-display-part preferred)) ;; Do highlighting. (save-excursion (save-restriction diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el index 79fc74a..2171bad 100644 --- a/lisp/gnus/mm-decode.el +++ b/lisp/gnus/mm-decode.el @@ -145,14 +145,23 @@ nil : use external viewer (default web browser)." (function)) :group 'mime-display) -(defcustom mm-inline-text-html-with-images nil - "If non-nil, Gnus will allow retrieving images in HTML that has tags. -See also the documentation for the `mm-w3m-safe-url-regexp' -variable." - :version "22.1" +(defcustom mm-html-inhibit-images + (if (boundp 'mm-inline-text-html-with-images) + (not (symbol-value 'mm-inline-text-html-with-images)) + t) + "Non-nil means inhibit displaying of images inline in the article body." + :version "25.1" :type 'boolean :group 'mime-display) +(defcustom mm-html-blocked-images "" + "Regexp matching image URLs to be blocked, or nil meaning not to block. +Note that cid images that are embedded in a message won't be blocked." + :version "25.1" + :type '(choice (const :tag "Allow all" nil) + (regexp :tag "Regular expression")) + :group 'mime-display) + (defcustom mm-w3m-safe-url-regexp "\\`cid:" "Regexp matching URLs which are considered to be safe. Some HTML mails might contain a nasty trick used by spammers, using @@ -1828,14 +1837,11 @@ If RECURSIVE, search recursively." (declare-function shr-insert-document "shr" (dom)) (defvar shr-blocked-images) (defvar shr-use-fonts) -(defvar gnus-inhibit-images) -(autoload 'gnus-blocked-images "gnus-art") (defun mm-shr (handle) ;; Require since we bind its variables. (require 'shr) - (let ((article-buffer (current-buffer)) - (shr-width (if (and (boundp 'shr-use-fonts) + (let ((shr-width (if (and (boundp 'shr-use-fonts) shr-use-fonts) nil fill-column)) @@ -1844,15 +1850,9 @@ If RECURSIVE, search recursively." (when handle (mm-with-part handle (buffer-string)))))) - shr-inhibit-images shr-blocked-images charset char) - (if (and (boundp 'gnus-summary-buffer) - (bufferp gnus-summary-buffer) - (buffer-name gnus-summary-buffer)) - (with-current-buffer gnus-summary-buffer - (setq shr-inhibit-images gnus-inhibit-images - shr-blocked-images (gnus-blocked-images))) - (setq shr-inhibit-images gnus-inhibit-images - shr-blocked-images (gnus-blocked-images))) + (shr-inhibit-images mm-html-inhibit-images) + (shr-blocked-images mm-html-blocked-images) + charset char) (unless handle (setq handle (mm-dissect-buffer t))) (setq charset (mail-content-type-get (mm-handle-type handle) 'charset)) diff --git a/lisp/gnus/mm-view.el b/lisp/gnus/mm-view.el index 9942455..8e1e3e7 100644 --- a/lisp/gnus/mm-view.el +++ b/lisp/gnus/mm-view.el @@ -141,7 +141,7 @@ (push (cons 'gnus-article-mode 'mm-w3m-cid-retrieve) w3m-cid-retrieve-function-alist)) (setq mm-w3m-setup t)) - (setq w3m-display-inline-images mm-inline-text-html-with-images)) + (setq w3m-display-inline-images (not mm-html-inhibit-images))) (defun mm-w3m-cid-retrieve-1 (url handle) (dolist (elem handle) commit 463a8eae61ef3d5ae98452f4ee133c1f9b957462 Author: Paul Eggert Date: Mon Feb 8 11:38:35 2016 -0800 Port to FreeBSD 11-CURRENT i386 Problem reported by Herbert J. Skuhra in: http://lists.gnu.org/archive/html/emacs-devel/2016-02/msg00354.html Instead of trying * src/alloc.c (lmalloc, lrealloc, laligned): New functions. (xmalloc, xzalloc, xrealloc, lisp_malloc): Use them. (__alignof__) [!__GNUC__ && !__alignof__]: New macro. (MALLOC_IS_GC_ALIGNED): New macro. * src/lisp.h (NONPOINTER_BITS): Remove. All uses removed. No longer needed now that alloc.c uses lmalloc and lrealloc. diff --git a/src/alloc.c b/src/alloc.c index 6c6c1aa..8816411 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -802,8 +802,10 @@ malloc_unblock_input (void) malloc_probe (size); \ } while (0) +static void *lmalloc (size_t) ATTRIBUTE_MALLOC_SIZE ((1)); +static void *lrealloc (void *, size_t); -/* Like malloc but check for no memory and block interrupt input.. */ +/* Like malloc but check for no memory and block interrupt input. */ void * xmalloc (size_t size) @@ -811,7 +813,7 @@ xmalloc (size_t size) void *val; MALLOC_BLOCK_INPUT; - val = malloc (size); + val = lmalloc (size); MALLOC_UNBLOCK_INPUT; if (!val && size) @@ -828,7 +830,7 @@ xzalloc (size_t size) void *val; MALLOC_BLOCK_INPUT; - val = malloc (size); + val = lmalloc (size); MALLOC_UNBLOCK_INPUT; if (!val && size) @@ -849,9 +851,9 @@ xrealloc (void *block, size_t size) /* We must call malloc explicitly when BLOCK is 0, since some reallocs don't do this. */ if (! block) - val = malloc (size); + val = lmalloc (size); else - val = realloc (block, size); + val = lrealloc (block, size); MALLOC_UNBLOCK_INPUT; if (!val && size) @@ -1053,7 +1055,7 @@ lisp_malloc (size_t nbytes, enum mem_type type) allocated_mem_type = type; #endif - val = malloc (nbytes); + val = lmalloc (nbytes); #if ! USE_LSB_TAG /* If the memory just allocated cannot be addressed thru a Lisp @@ -1356,6 +1358,62 @@ lisp_align_free (void *block) MALLOC_UNBLOCK_INPUT; } +#if !defined __GNUC__ && !defined __alignof__ +# define __alignof__(type) alignof (type) +#endif + +/* True if malloc returns a multiple of GCALIGNMENT. In practice this + holds if __alignof__ (max_align_t) is a multiple. Use __alignof__ + if available, as otherwise this check would fail with GCC x86. + This is a macro, not an enum constant, for portability to HP-UX + 10.20 cc and AIX 3.2.5 xlc. */ +#define MALLOC_IS_GC_ALIGNED (__alignof__ (max_align_t) % GCALIGNMENT == 0) + +/* True if P is suitably aligned for SIZE, where Lisp alignment may be + needed if SIZE is Lisp-aligned. */ + +static bool +laligned (void *p, size_t size) +{ + return (MALLOC_IS_GC_ALIGNED || size % GCALIGNMENT != 0 + || (intptr_t) p % GCALIGNMENT == 0); +} + +/* Like malloc and realloc except that if SIZE is Lisp-aligned, make + sure the result is too. */ + +static void * +lmalloc (size_t size) +{ +#if USE_ALIGNED_ALLOC + if (! MALLOC_IS_GC_ALIGNED) + return aligned_alloc (GCALIGNMENT, size); +#endif + + void *p; + while (true) + { + p = malloc (size); + if (laligned (p, size)) + break; + free (p); + } + + eassert ((intptr_t) p % GCALIGNMENT == 0); + return p; +} + +static void * +lrealloc (void *p, size_t size) +{ + do + p = realloc (p, size); + while (! laligned (p, size)); + + eassert ((intptr_t) p % GCALIGNMENT == 0); + return p; +} + /*********************************************************************** Interval Allocation diff --git a/src/lisp.h b/src/lisp.h index 82cbca8..e8eab7b 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -67,19 +67,6 @@ DEFINE_GDB_SYMBOL_BEGIN (int, GCTYPEBITS) #define GCTYPEBITS 3 DEFINE_GDB_SYMBOL_END (GCTYPEBITS) -/* The number of bits needed in an EMACS_INT over and above the number - of bits in a pointer. This is 0 on systems where: - 1. We can specify multiple-of-8 alignment on static variables. - 2. We know malloc returns a multiple of 8. */ -#if (defined alignas \ - && (defined GNU_MALLOC || defined DOUG_LEA_MALLOC || defined __GLIBC__ \ - || defined DARWIN_OS || defined __sun || defined __MINGW32__ \ - || defined CYGWIN)) -# define NONPOINTER_BITS 0 -#else -# define NONPOINTER_BITS GCTYPEBITS -#endif - /* EMACS_INT - signed integer wide enough to hold an Emacs value EMACS_INT_MAX - maximum value of EMACS_INT; can be used in #if pI - printf length modifier for EMACS_INT @@ -87,18 +74,16 @@ DEFINE_GDB_SYMBOL_END (GCTYPEBITS) #ifndef EMACS_INT_MAX # if INTPTR_MAX <= 0 # error "INTPTR_MAX misconfigured" -# elif INTPTR_MAX <= INT_MAX >> NONPOINTER_BITS && !defined WIDE_EMACS_INT +# elif INTPTR_MAX <= INT_MAX && !defined WIDE_EMACS_INT typedef int EMACS_INT; typedef unsigned int EMACS_UINT; # define EMACS_INT_MAX INT_MAX # define pI "" -# elif INTPTR_MAX <= LONG_MAX >> NONPOINTER_BITS && !defined WIDE_EMACS_INT +# elif INTPTR_MAX <= LONG_MAX && !defined WIDE_EMACS_INT typedef long int EMACS_INT; typedef unsigned long EMACS_UINT; # define EMACS_INT_MAX LONG_MAX # define pI "l" -/* Check versus LLONG_MAX, not LLONG_MAX >> NONPOINTER_BITS. - In theory this is not safe, but in practice it seems to be OK. */ # elif INTPTR_MAX <= LLONG_MAX typedef long long int EMACS_INT; typedef unsigned long long int EMACS_UINT; commit 37eae51767fc013eec3411c174d27bd8a18e5bc8 Author: Michael Albinus Date: Mon Feb 8 10:54:43 2016 +0100 Some fixes in file-notify-tests.el * test/automated/file-notify-tests.el (file-notify--test-with-events-check) (file-notify--test-with-events-explainer): New defuns. (file-notify--test-with-events): Use it. (file-notify-test07-backup): Fix docstring. Some of the backends fire two `changed' events. Backup by rename doesn't work for kqueue. diff --git a/test/automated/file-notify-tests.el b/test/automated/file-notify-tests.el index 4261507..a852182 100644 --- a/test/automated/file-notify-tests.el +++ b/test/automated/file-notify-tests.el @@ -293,6 +293,26 @@ TIMEOUT is the maximum time to wait for, in seconds." (while (null ,until) (read-event nil nil file-notify--test-read-event-timeout)))) +(defun file-notify--test-with-events-check (events) + "Check whether received events match one of the EVENTS alternatives." + (let (result) + (dolist (elt events result) + (setq result + (or result + (equal elt (mapcar #'cadr file-notify--test-events))))))) + +(defun file-notify--test-with-events-explainer (events) + "Explain why `file-notify--test-with-events-check' fails." + (if (null (cdr events)) + (format "Received events `%s' do not match expected events `%s'" + (mapcar #'cadr file-notify--test-events) (car events)) + (format + "Received events `%s' do not match any sequence of expected events `%s'" + (mapcar #'cadr file-notify--test-events) events))) + +(put 'file-notify--test-with-events-check 'ert-explainer + 'file-notify--test-with-events-explainer) + (defmacro file-notify--test-with-events (events &rest body) "Run BODY collecting events and then compare with EVENTS. EVENTS is either a simple list of events, or a list of lists of @@ -303,7 +323,7 @@ longer than timeout seconds for the events to be delivered." `(let* ((,outer file-notify--test-events) (events (if (consp (car ,events)) ,events (list ,events))) (max-length (apply 'max (mapcar 'length events))) - create-lockfiles result) + create-lockfiles) ;; Flush pending events. (file-notify--wait-for-events (file-notify--test-timeout) @@ -315,11 +335,7 @@ longer than timeout seconds for the events to be delivered." (* (ceiling max-length 100) (file-notify--test-timeout)) (= max-length (length file-notify--test-events))) ;; One of the possible results shall match. - (should - (dolist (elt events result) - (setq result - (or result - (equal elt (mapcar #'cadr file-notify--test-events)))))) + (should (file-notify--test-with-events-check events)) (setq ,outer (append ,outer file-notify--test-events))) (setq file-notify--test-events ,outer)))) @@ -849,7 +865,7 @@ longer than timeout seconds for the events to be delivered." "Check that events are not dropped for remote directories.") (ert-deftest file-notify-test07-backup () - "Check that backup keeps file supervision." + "Check that backup keeps file notification." (skip-unless (file-notify--test-local-enabled)) (unwind-protect @@ -862,7 +878,14 @@ longer than timeout seconds for the events to be delivered." file-notify--test-tmpfile '(change) #'file-notify--test-event-handler))) (should (file-notify-valid-p file-notify--test-desc)) - (file-notify--test-with-events '(changed) + (file-notify--test-with-events + (cond + ;; For w32notify and in the remote case, there are two + ;; `changed' events. + ((or (string-equal (file-notify--test-library) "w32notify") + (file-remote-p temporary-file-directory)) + '(changed changed)) + (t '(changed))) ;; There shouldn't be any problem, because the file is kept. (with-temp-buffer (let ((buffer-file-name file-notify--test-tmpfile) @@ -881,35 +904,39 @@ longer than timeout seconds for the events to be delivered." (unwind-protect (progn - (setq file-notify--test-tmpfile (file-notify--test-make-temp-name)) - (write-region "any text" nil file-notify--test-tmpfile nil 'no-message) - (should - (setq file-notify--test-desc - (file-notify-add-watch - file-notify--test-tmpfile - '(change) #'file-notify--test-event-handler))) - (should (file-notify-valid-p file-notify--test-desc)) - (file-notify--test-with-events '(renamed created changed) - ;; The file is renamed when creating a backup. It shall - ;; still be watched. - (with-temp-buffer - (let ((buffer-file-name file-notify--test-tmpfile) - (make-backup-files t) - (backup-by-copying nil) - (backup-by-copying-when-mismatch nil) - (kept-new-versions 1) - (delete-old-versions t)) - (insert "another text") - (save-buffer)))) - ;; After saving the buffer, the descriptor is still valid. - (should (file-notify-valid-p file-notify--test-desc)) - (delete-file file-notify--test-tmpfile)) + ;; It doesn't work for kqueue, because we don't use an + ;; implicit directory monitor. + (unless (string-equal (file-notify--test-library) "kqueue") + (setq file-notify--test-tmpfile (file-notify--test-make-temp-name)) + (write-region + "any text" nil file-notify--test-tmpfile nil 'no-message) + (should + (setq file-notify--test-desc + (file-notify-add-watch + file-notify--test-tmpfile + '(change) #'file-notify--test-event-handler))) + (should (file-notify-valid-p file-notify--test-desc)) + (file-notify--test-with-events '(renamed created changed) + ;; The file is renamed when creating a backup. It shall + ;; still be watched. + (with-temp-buffer + (let ((buffer-file-name file-notify--test-tmpfile) + (make-backup-files t) + (backup-by-copying nil) + (backup-by-copying-when-mismatch nil) + (kept-new-versions 1) + (delete-old-versions t)) + (insert "another text") + (save-buffer)))) + ;; After saving the buffer, the descriptor is still valid. + (should (file-notify-valid-p file-notify--test-desc)) + (delete-file file-notify--test-tmpfile))) ;; Cleanup. (file-notify--test-cleanup))) (file-notify--deftest-remote file-notify-test07-backup - "Check that backup keeps file supervision for remote files.") + "Check that backup keeps file notification for remote files.") (defun file-notify-test-all (&optional interactive) "Run all tests for \\[file-notify]." commit edc39c92a798821a931f282236f7f4a79c2b25a1 Author: Eli Zaretskii Date: Sun Feb 7 21:02:49 2016 +0200 ; * etc/NEWS: Clarify entry about bracketed paste mode. diff --git a/etc/NEWS b/etc/NEWS index 18c08dc..c7cd0b1 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -278,12 +278,17 @@ as you type. See also the new variable ‘text-quoting-style’. ** New minor mode global-eldoc-mode is enabled by default. --- -** Emacs now supports "bracketed paste mode" when running on a terminal -that supports it. This facility allows Emacs to understand pasted -chunks of text as strings to be inserted, instead of interpreting each -character in the pasted text as actual user input. This results in a -paste experience similar to that under a window system, and significant -performance improvements when pasting large amounts of text. +** Emacs now uses "bracketed paste mode" on text terminals that support it. +Bracketed paste mode causes text terminals to wrap pasted text in special +escape sequences that allow Emacs to tell the difference between text +you type and text you paste from other applications. Emacs then +avoids interpreting each character in the pasted text as it does with +keyboard input, which results in a paste experience similar to that +under a window system, and significant performance improvements when +pasting large amounts of text. + +Bracketed paste mode is disabled by default, so Emacs automatically +enables it at startup if the terminal supports it. +++ ** Emacs now supports the latest version of the UBA. commit d5a10aefee22cf1d092edad26c845e049ab8861c Author: Michael Albinus Date: Sun Feb 7 19:30:01 2016 +0100 Fix Bug#22557 * lisp/filenotify.el (file-notify-callback): Do not send a `stopped' event in case of backup by renaming. (Bug#22557) * test/automated/Makefile.in: Use $(SELECTOR_EXPENSIVE) for all targets but check and check-maybe. * test/automated/file-notify-tests.el (file-notify--test-read-event-timeout): New defconst. (file-notify--deftest-remote, file-notify--wait-for-events) (file-notify-test02-events) (file-notify-test04-file-validity) (file-notify-test06-many-events): Use it. (file-notify--test-cleanup): Make it more robust. Delete also backup file. (file-notify-test07-backup): New test. diff --git a/lisp/filenotify.el b/lisp/filenotify.el index faa801e..66e7fd7 100644 --- a/lisp/filenotify.el +++ b/lisp/filenotify.el @@ -242,10 +242,14 @@ EVENT is the cadr of the event in `file-notify-handle-event' (and (memq action '(deleted renamed)) (= (length (cdr registered)) 1) + ;; Not, when a file is backed up. + (not (and (stringp file1) (backup-file-name-p file1))) (or + ;; Watched file or directory is concerned. (string-equal (file-name-nondirectory file) (file-name-nondirectory (car registered))) + ;; File inside a watched directory is concerned. (string-equal (file-name-nondirectory file) (car (cadr registered))))))) diff --git a/test/automated/Makefile.in b/test/automated/Makefile.in index 2534a65..5074d51 100644 --- a/test/automated/Makefile.in +++ b/test/automated/Makefile.in @@ -89,10 +89,14 @@ WRITE_LOG = > $@ 2>&1 || { stat=ERROR; cat $@; }; echo $$stat: $@ ## Beware: it approximates 'no-byte-compile', so watch out for false-positives! SELECTOR_DEFAULT = (quote (not (tag :expensive-test))) SELECTOR_EXPENSIVE = nil -ifndef SELECTOR +ifdef SELECTOR +SELECTOR_ACTUAL=$(SELECTOR) +else ifeq ($(MAKECMDGOALS),check) +SELECTOR_ACTUAL=$(SELECTOR_DEFAULT) +else ifeq ($(MAKECMDGOALS),check-maybe) SELECTOR_ACTUAL=$(SELECTOR_DEFAULT) else -SELECTOR_ACTUAL=$(SELECTOR) +SELECTOR_ACTUAL=$(SELECTOR_EXPENSIVE) endif diff --git a/test/automated/file-notify-tests.el b/test/automated/file-notify-tests.el index 5fc4ff8..4261507 100644 --- a/test/automated/file-notify-tests.el +++ b/test/automated/file-notify-tests.el @@ -62,6 +62,10 @@ (defvar file-notify--test-event nil) (defvar file-notify--test-events nil) +(defconst file-notify--test-read-event-timeout 0.02 + "Timeout for `read-event' calls. +It is different for local and remote file notification libraries.") + (defun file-notify--test-timeout () "Timeout to wait for arriving events, in seconds." (cond @@ -74,19 +78,20 @@ "Cleanup after a test." (file-notify-rm-watch file-notify--test-desc) - (when (and file-notify--test-tmpfile - (file-exists-p file-notify--test-tmpfile)) + (ignore-errors + (delete-file (file-newest-backup file-notify--test-tmpfile))) + (ignore-errors (if (file-directory-p file-notify--test-tmpfile) (delete-directory file-notify--test-tmpfile 'recursive) (delete-file file-notify--test-tmpfile))) - (when (and file-notify--test-tmpfile1 - (file-exists-p file-notify--test-tmpfile1)) + (ignore-errors (if (file-directory-p file-notify--test-tmpfile1) (delete-directory file-notify--test-tmpfile1 'recursive) (delete-file file-notify--test-tmpfile1))) - (when (file-remote-p temporary-file-directory) - (tramp-cleanup-connection - (tramp-dissect-file-name temporary-file-directory) nil 'keep-password)) + (ignore-errors + (when (file-remote-p temporary-file-directory) + (tramp-cleanup-connection + (tramp-dissect-file-name temporary-file-directory) nil 'keep-password))) (setq file-notify--test-tmpfile nil file-notify--test-tmpfile1 nil @@ -155,6 +160,7 @@ remote host, or nil." :tags '(:expensive-test) (let* ((temporary-file-directory file-notify-test-remote-temporary-file-directory) + (file-notify--test-read-event-timeout 0.1) (ert-test (ert-get-test ',test))) (skip-unless (file-notify--test-remote-enabled)) (tramp-cleanup-connection @@ -285,7 +291,7 @@ and the event to `file-notify--test-events'." TIMEOUT is the maximum time to wait for, in seconds." `(with-timeout (,timeout (ignore)) (while (null ,until) - (read-event nil nil 0.1)))) + (read-event nil nil file-notify--test-read-event-timeout)))) (defmacro file-notify--test-with-events (events &rest body) "Run BODY collecting events and then compare with EVENTS. @@ -342,7 +348,7 @@ longer than timeout seconds for the events to be delivered." (t '(created changed deleted stopped))) (write-region "another text" nil file-notify--test-tmpfile nil 'no-message) - (read-event nil nil 0.1) + (read-event nil nil file-notify--test-read-event-timeout) (delete-file file-notify--test-tmpfile)) ;; `file-notify-rm-watch' fires the `stopped' event. Suppress it. (let (file-notify--test-events) @@ -371,10 +377,10 @@ longer than timeout seconds for the events to be delivered." '((changed deleted stopped) (changed changed deleted stopped))) (t '(changed changed deleted stopped))) - (read-event nil nil 0.1) + (read-event nil nil file-notify--test-read-event-timeout) (write-region "another text" nil file-notify--test-tmpfile nil 'no-message) - (read-event nil nil 0.1) + (read-event nil nil file-notify--test-read-event-timeout) (delete-file file-notify--test-tmpfile)) ;; `file-notify-rm-watch' fires the `stopped' event. Suppress it. (let (file-notify--test-events) @@ -405,10 +411,10 @@ longer than timeout seconds for the events to be delivered." ((string-equal (file-notify--test-library) "kqueue") '(created changed deleted stopped)) (t '(created changed deleted deleted stopped))) - (read-event nil nil 0.1) + (read-event nil nil file-notify--test-read-event-timeout) (write-region "any text" nil file-notify--test-tmpfile nil 'no-message) - (read-event nil nil 0.1) + (read-event nil nil file-notify--test-read-event-timeout) (delete-directory temporary-file-directory 'recursive)) ;; `file-notify-rm-watch' fires the `stopped' event. Suppress it. (let (file-notify--test-events) @@ -440,17 +446,17 @@ longer than timeout seconds for the events to be delivered." '(created changed created changed deleted stopped)) (t '(created changed created changed deleted deleted deleted stopped))) - (read-event nil nil 0.1) + (read-event nil nil file-notify--test-read-event-timeout) (write-region "any text" nil file-notify--test-tmpfile nil 'no-message) - (read-event nil nil 0.1) + (read-event nil nil file-notify--test-read-event-timeout) (copy-file file-notify--test-tmpfile file-notify--test-tmpfile1) ;; The next two events shall not be visible. - (read-event nil nil 0.1) + (read-event nil nil file-notify--test-read-event-timeout) (set-file-modes file-notify--test-tmpfile 000) - (read-event nil nil 0.1) + (read-event nil nil file-notify--test-read-event-timeout) (set-file-times file-notify--test-tmpfile '(0 0)) - (read-event nil nil 0.1) + (read-event nil nil file-notify--test-read-event-timeout) (delete-directory temporary-file-directory 'recursive)) ;; `file-notify-rm-watch' fires the `stopped' event. Suppress it. (let (file-notify--test-events) @@ -480,13 +486,13 @@ longer than timeout seconds for the events to be delivered." ((string-equal (file-notify--test-library) "kqueue") '(created changed renamed deleted stopped)) (t '(created changed renamed deleted deleted stopped))) - (read-event nil nil 0.1) + (read-event nil nil file-notify--test-read-event-timeout) (write-region "any text" nil file-notify--test-tmpfile nil 'no-message) - (read-event nil nil 0.1) + (read-event nil nil file-notify--test-read-event-timeout) (rename-file file-notify--test-tmpfile file-notify--test-tmpfile1) ;; After the rename, we won't get events anymore. - (read-event nil nil 0.1) + (read-event nil nil file-notify--test-read-event-timeout) (delete-directory temporary-file-directory 'recursive)) ;; `file-notify-rm-watch' fires the `stopped' event. Suppress it. (let (file-notify--test-events) @@ -514,14 +520,14 @@ longer than timeout seconds for the events to be delivered." (file-remote-p temporary-file-directory)) '(attribute-changed attribute-changed attribute-changed)) (t '(attribute-changed attribute-changed))) - (read-event nil nil 0.1) + (read-event nil nil file-notify--test-read-event-timeout) (write-region "any text" nil file-notify--test-tmpfile nil 'no-message) - (read-event nil nil 0.1) + (read-event nil nil file-notify--test-read-event-timeout) (set-file-modes file-notify--test-tmpfile 000) - (read-event nil nil 0.1) + (read-event nil nil file-notify--test-read-event-timeout) (set-file-times file-notify--test-tmpfile '(0 0)) - (read-event nil nil 0.1) + (read-event nil nil file-notify--test-read-event-timeout) (delete-file file-notify--test-tmpfile)) ;; `file-notify-rm-watch' fires the `stopped' event. Suppress it. (let (file-notify--test-events) @@ -678,10 +684,10 @@ longer than timeout seconds for the events to be delivered." (changed changed deleted stopped))) (t '(changed changed deleted stopped))) (should (file-notify-valid-p file-notify--test-desc)) - (read-event nil nil 0.1) + (read-event nil nil file-notify--test-read-event-timeout) (write-region "another text" nil file-notify--test-tmpfile nil 'no-message) - (read-event nil nil 0.1) + (read-event nil nil file-notify--test-read-event-timeout) (delete-file file-notify--test-tmpfile)) ;; After deleting the file, the descriptor is not valid anymore. (should-not (file-notify-valid-p file-notify--test-desc)) @@ -713,10 +719,10 @@ longer than timeout seconds for the events to be delivered." '(created changed deleted stopped)) (t '(created changed deleted deleted stopped))) (should (file-notify-valid-p file-notify--test-desc)) - (read-event nil nil 0.1) + (read-event nil nil file-notify--test-read-event-timeout) (write-region "any text" nil file-notify--test-tmpfile nil 'no-message) - (read-event nil nil 0.1) + (read-event nil nil file-notify--test-read-event-timeout) (delete-directory temporary-file-directory t)) ;; After deleting the parent directory, the descriptor must ;; not be valid anymore. @@ -814,9 +820,9 @@ longer than timeout seconds for the events to be delivered." (let ((source-file-list source-file-list) (target-file-list target-file-list)) (while (and source-file-list target-file-list) - (read-event nil nil 0.1) + (read-event nil nil file-notify--test-read-event-timeout) (write-region "" nil (pop source-file-list) nil 'no-message) - (read-event nil nil 0.1) + (read-event nil nil file-notify--test-read-event-timeout) (write-region "" nil (pop target-file-list) nil 'no-message)))) (file-notify--test-with-events (cond @@ -829,16 +835,82 @@ longer than timeout seconds for the events to be delivered." (let ((source-file-list source-file-list) (target-file-list target-file-list)) (while (and source-file-list target-file-list) - (rename-file (pop source-file-list) (pop target-file-list) t) - (read-event nil nil 0.02)))) + (read-event nil nil file-notify--test-read-event-timeout) + (rename-file (pop source-file-list) (pop target-file-list) t)))) (file-notify--test-with-events (make-list n 'deleted) (dolist (file target-file-list) - (prog1 (delete-file file) (read-event nil nil 0.02))))) + (read-event nil nil file-notify--test-read-event-timeout) + (delete-file file) file-notify--test-read-event-timeout))) + + ;; Cleanup. (file-notify--test-cleanup))) (file-notify--deftest-remote file-notify-test06-many-events "Check that events are not dropped for remote directories.") +(ert-deftest file-notify-test07-backup () + "Check that backup keeps file supervision." + (skip-unless (file-notify--test-local-enabled)) + + (unwind-protect + (progn + (setq file-notify--test-tmpfile (file-notify--test-make-temp-name)) + (write-region "any text" nil file-notify--test-tmpfile nil 'no-message) + (should + (setq file-notify--test-desc + (file-notify-add-watch + file-notify--test-tmpfile + '(change) #'file-notify--test-event-handler))) + (should (file-notify-valid-p file-notify--test-desc)) + (file-notify--test-with-events '(changed) + ;; There shouldn't be any problem, because the file is kept. + (with-temp-buffer + (let ((buffer-file-name file-notify--test-tmpfile) + (make-backup-files t) + (backup-by-copying t) + (kept-new-versions 1) + (delete-old-versions t)) + (insert "another text") + (save-buffer)))) + ;; After saving the buffer, the descriptor is still valid. + (should (file-notify-valid-p file-notify--test-desc)) + (delete-file file-notify--test-tmpfile)) + + ;; Cleanup. + (file-notify--test-cleanup)) + + (unwind-protect + (progn + (setq file-notify--test-tmpfile (file-notify--test-make-temp-name)) + (write-region "any text" nil file-notify--test-tmpfile nil 'no-message) + (should + (setq file-notify--test-desc + (file-notify-add-watch + file-notify--test-tmpfile + '(change) #'file-notify--test-event-handler))) + (should (file-notify-valid-p file-notify--test-desc)) + (file-notify--test-with-events '(renamed created changed) + ;; The file is renamed when creating a backup. It shall + ;; still be watched. + (with-temp-buffer + (let ((buffer-file-name file-notify--test-tmpfile) + (make-backup-files t) + (backup-by-copying nil) + (backup-by-copying-when-mismatch nil) + (kept-new-versions 1) + (delete-old-versions t)) + (insert "another text") + (save-buffer)))) + ;; After saving the buffer, the descriptor is still valid. + (should (file-notify-valid-p file-notify--test-desc)) + (delete-file file-notify--test-tmpfile)) + + ;; Cleanup. + (file-notify--test-cleanup))) + +(file-notify--deftest-remote file-notify-test07-backup + "Check that backup keeps file supervision for remote files.") + (defun file-notify-test-all (&optional interactive) "Run all tests for \\[file-notify]." (interactive "p") commit 67fcd5addcd91169f79dc5d51d0a71eb2b486aed Author: Paul Eggert Date: Sun Feb 7 07:46:59 2016 -0800 Fix test for dladdr Problem reported by Andreas Schwab in: http://lists.gnu.org/archive/html/emacs-devel/2016-02/msg00327.html * configure.ac (dladdr): Link with LIBMODULES when checking for this function. diff --git a/configure.ac b/configure.ac index 57bde94..1ff9c49 100644 --- a/configure.ac +++ b/configure.ac @@ -3360,7 +3360,7 @@ if test "${with_modules}" != "no"; then else SAVE_LIBS=$LIBS LIBS="$LIBS $LIBMODULES" - AC_CHECK_FUNCS([dlfunc]) + AC_CHECK_FUNCS([dladdr dlfunc]) LIBS=$SAVE_LIBS fi fi @@ -3373,7 +3373,6 @@ if test "${HAVE_MODULES}" = yes; then fi AC_SUBST(MODULES_OBJ) AC_SUBST(LIBMODULES) -AC_CHECK_FUNCS(dladdr) ### Use -lpng if available, unless '--with-png=no'. HAVE_PNG=no commit 9dc77e37aa84c6df9b3ddb4609f3c09201b0580e Author: Andreas Schwab Date: Sun Feb 7 13:29:16 2016 +0100 Fix gnus-group-get-new-news-this-group on group with closed server * lisp/gnus/nnimap.el (nnimap-change-group): Lookup server method and pass to nnimap-open-server. diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el index c285bef..130658c 100644 --- a/lisp/gnus/nnimap.el +++ b/lisp/gnus/nnimap.el @@ -1831,7 +1831,9 @@ Return the server's response to the SELECT or EXAMINE command." (let ((open-result t)) (when (and server (not (nnimap-server-opened server))) - (setq open-result (nnimap-open-server server nil no-reconnect))) + (let ((method (gnus-server-to-method server))) + (setq open-result (nnimap-open-server (nth 1 method) (nthcdr 2 method) + no-reconnect)))) (cond ((not open-result) nil) commit d7933ff2acfb5666de08ad74146cd40d7bca7d08 Author: Glenn Morris Date: Sun Feb 7 07:23:56 2016 -0500 ; Auto-commit of ChangeLog files. diff --git a/ChangeLog.2 b/ChangeLog.2 index 5921546..2226eb1 100644 --- a/ChangeLog.2 +++ b/ChangeLog.2 @@ -1,3 +1,926 @@ +2016-02-07 Artur Malabarba + + * lisp/comint.el (comint-prompt-read-only): Clean tabs in docstring + + While tabs in code are mostly fine because the Emacs sources have a + .dir-locals file specifying tab-width, the same is not true of tabs in + code examples inside docstrings. The docstring is printed on a *Help* + buffer, which can be created on any directory and won't necessarily have + the same tab-width set. + +2016-02-07 Lars Ingebrigtsen + + Don't inloop gnus-uu-mark-thread on the last thread + + * lisp/gnus/gnus-uu.el (gnus-uu-mark-thread): Don't infloop on the + final thread in the summary buffer (bug#16666). + +2016-02-06 Lars Ingebrigtsen + + Display non-ASCII group names better in prompts + + * lisp/gnus/gnus-sum.el (gnus-articles-to-read): To decode the + group name, we have to do that before we remove the prefix. + +2016-02-06 Lars Ingebrigtsen + + Default to gpg2 instead of gpg + + * lisp/epg-config.el (epg-gpg-program): Prefer gpg2 over gpg, if + it exists. This fixes many problems with using the GPG + authentication agent. + +2016-02-06 David Edmondson + + src/process.c Correctly convert AF_INET6 addresses + + * src/process.c (conv_lisp_to_sockaddr): AF_INET6 addresses are + converted to a list of 16 bit quantities by + conv_sockaddr_to_lisp(). conv_lisp_to_sockaddr() should follow the + same scheme rather than expecting a (longer) list of 8 bit + quantities. + + Backport: + + (cherry picked from commit 55ce3c30d617c38eb086d5ad4ffbd881c20c559c) + +2016-02-06 Artur Malabarba + + * lisp/isearch.el (isearch-define-mode-toggle): Improve logic + +2016-02-06 Artur Malabarba + + * lisp/menu-bar.el (menu-bar-options-menu): New search submenu + + (menu-bar-search-options-menu): New variable + +2016-02-06 Artur Malabarba + + * lisp/isearch.el (search-default-mode) + + (isearch-regexp-function): Improve docstrings. + +2016-02-06 Artur Malabarba + + * lisp/isearch.el: Rename search-default-regexp-mode to search-default-mode + + (search-default-mode): New variable. + (isearch-mode, isearch-define-mode-toggle) + (isearch--describe-regexp-mode): Update accordingly. + * lisp/menu-bar.el (nonincremental-search-forward): Update accordingly. + * etc/NEWS: Update accordingly. + * doc/emacs/search.texi: Update accordingly. + +2016-02-06 Oscar Fuentes + + Use monitor's resolution for positioning tooltips + + * src/xfns.c (compute_tip_xy): Use the resolution of the monitor where + the mouse pointer is to avoid placing the tooltip over the border of + the monitor on multi-head displays. Fixes bug#22549. + +2016-02-06 Eli Zaretskii + + Fix file-notify-test on MS-Windows + + * test/automated/file-notify-tests.el (file-notify--test-timeout): + Reduce w32notify timeout to 10 sec. + (file-notify-test06-many-events): Call read-event after each + rename, to keep the w32notify backend happy in batch mode. + (Bug#22534) + +2016-02-06 Eli Zaretskii + + Fix issues found by auditing w32notify code + + * src/w32inevt.c (handle_file_notifications): Count the number of + events to be returned. + * src/w32notify.c (send_notifications): Don't copy to the file + notification buffer more than it can hold. (Bug#22534) + +2016-02-06 Eli Zaretskii + + Extend etags Ruby support for accessors + + * lib-src/etags.c (Ruby_functions): Support accessors defined with + parentheses. (Bug#22563) + + * test/etags/ruby-src/test1.ru (A::B): Add tests for accessors + defined with parentheses. + * test/etags/ETAGS.good_1: + * test/etags/ETAGS.good_2: + * test/etags/ETAGS.good_3: + * test/etags/ETAGS.good_4: + * test/etags/ETAGS.good_5: + * test/etags/ETAGS.good_6: + * test/etags/CTAGS.good: Adapt to changes in Ruby tests. + +2016-02-06 Lars Ingebrigtsen + + Update publicsuffix.txt. + + * etc/publicsuffix.txt: Updated from + https://publicsuffix.org/list/public_suffix_list.dat. + +2016-02-06 Lars Ingebrigtsen + + Ensure that Gnus dribble handling allows removing entries + + * lisp/gnus/gnus-start.el (gnus-dribble-enter): Ensure that each + entry is on a single line. + +2016-02-05 OGAWA Hirofumi (tiny change) + + Be consistent when using encoded strings in nnimap data + + * lisp/gnus/nnimap.el (nnimap-encode-gnus-group): New function + (nnimap-request-list): Use it. + (nnimap-request-newgroups): Ditto. + +2016-02-05 OGAWA Hirofumi (tiny change) + + Display the decoded Gnus group name + + * lisp/gnus/gnus-sum.el (gnus-summary-read-group-1): Use the + decoded group name in the message. + +2016-02-05 Lars Ingebrigtsen + + Use completion-ignore-case instead of defining command + + * lisp/erc/erc.el (erc-mode): Set completion-ignore-case so + that we get case-insensitive completion. + (erc-completion-at-point): Remove. + +2016-02-05 Eli Zaretskii + + Merge branch 'emacs-25' of git.savannah.gnu.org:/srv/git/emacs into emacs-25 + +2016-02-05 Michael Albinus + + * test/automated/file-notify-tests.el (file-notify-test06-many-events): + + Reduce the number of iterations to 250 in case of w32notify. + +2016-02-05 Eli Zaretskii + + Fix problems caused by new implementation of sub-word mode + + * lisp/subr.el (forward-word-strictly, backward-word-strictly): + New functions. + (word-move-empty-char-table): New variable. + + * etc/NEWS: Mention 'forward-word-strictly' and + 'backward-word-strictly'. + + * doc/lispref/positions.texi (Word Motion): Document + 'find-word-boundary-function-table', 'forward-word-strictly', and + 'backward-word-strictly'. (Bug#22560) + + * src/syntax.c (syms_of_syntax) + : Doc fix. + + * lisp/wdired.el (wdired-xcase-word): + * lisp/textmodes/texnfo-upd.el (texinfo-copy-node-name) + (texinfo-copy-section-title, texinfo-start-menu-description) + (texinfo-copy-menu-title, texinfo-specific-section-type) + (texinfo-insert-node-lines, texinfo-copy-next-section-title): + * lisp/textmodes/texinfo.el (texinfo-clone-environment) + (texinfo-insert-@end): + * lisp/textmodes/texinfmt.el (texinfo-format-scan) + (texinfo-anchor, texinfo-multitable-widths) + (texinfo-multitable-item): + * lisp/textmodes/tex-mode.el (latex-env-before-change): + * lisp/textmodes/flyspell.el (texinfo-mode-flyspell-verify): + * lisp/skeleton.el (skeleton-insert): + * lisp/simple.el (count-words): + * lisp/progmodes/vhdl-mode.el (vhdl-beginning-of-libunit) + (vhdl-beginning-of-defun, vhdl-beginning-of-statement-1) + (vhdl-update-sensitivity-list, vhdl-template-block) + (vhdl-template-break, vhdl-template-case, vhdl-template-default) + (vhdl-template-default-indent, vhdl-template-for-loop) + (vhdl-template-if-then-use, vhdl-template-bare-loop) + (vhdl-template-nature, vhdl-template-procedural) + (vhdl-template-process, vhdl-template-selected-signal-asst) + (vhdl-template-type, vhdl-template-variable) + (vhdl-template-while-loop, vhdl-beginning-of-block) + (vhdl-hooked-abbrev, vhdl-port-copy, vhdl-hs-forward-sexp-func): + * lisp/progmodes/verilog-mode.el (verilog-backward-sexp) + (verilog-forward-sexp, verilog-beg-of-statement) + (verilog-set-auto-endcomments, verilog-backward-token) + (verilog-do-indent): + * lisp/progmodes/vera-mode.el (vera-guess-basic-syntax) + (vera-indent-block-closing): + * lisp/progmodes/simula.el (simula-context) + (simula-backward-up-level, simula-forward-down-level) + (simula-previous-statement, simula-next-statement) + (simula-skip-comment-backward, simula-calculate-indent) + (simula-find-if, simula-electric-keyword): + * lisp/progmodes/sh-script.el (sh-smie--rc-newline-semi-p): + * lisp/progmodes/ruby-mode.el (ruby-smie--redundant-do-p) + (ruby-smie--forward-token, ruby-smie--backward-token) + (ruby-singleton-class-p, ruby-calculate-indent) + (ruby-forward-sexp, ruby-backward-sexp): + * lisp/progmodes/ps-mode.el (ps-run-goto-error): + * lisp/progmodes/perl-mode.el (perl-syntax-propertize-function) + (perl-syntax-propertize-special-constructs) + (perl-backward-to-start-of-continued-exp): + * lisp/progmodes/pascal.el (pascal-indent-declaration): + * lisp/progmodes/octave.el (octave-function-file-p): + * lisp/progmodes/mantemp.el (mantemp-insert-cxx-syntax): + * lisp/progmodes/js.el (js--forward-function-decl): + * lisp/progmodes/idlwave.el (idlwave-show-begin-check) + (idlwave-beginning-of-block, idlwave-end-of-block) + (idlwave-block-jump-out, idlwave-determine-class): + * lisp/progmodes/icon.el (icon-is-continuation-line) + (icon-backward-to-start-of-continued-exp, end-of-icon-defun): + * lisp/progmodes/hideif.el (hide-ifdef-define): + * lisp/progmodes/f90.el (f90-change-keywords): + * lisp/progmodes/cperl-mode.el (cperl-electric-pod) + (cperl-linefeed, cperl-electric-terminator) + (cperl-find-pods-heres, cperl-fix-line-spacing) + (cperl-invert-if-unless): + * lisp/progmodes/cc-engine.el (c-forward-<>-arglist-recur): + * lisp/progmodes/cc-align.el (c-lineup-java-inher): + * lisp/progmodes/ada-mode.el (ada-compile-goto-error) + (ada-adjust-case-skeleton, ada-create-case-exception) + (ada-create-case-exception-substring) + (ada-case-read-exceptions-from-file, ada-after-keyword-p) + (ada-scan-paramlist, ada-get-current-indent, ada-get-indent-end) + (ada-get-indent-if, ada-get-indent-block-start) + (ada-get-indent-loop, ada-get-indent-type) + (ada-search-prev-end-stmt, ada-check-defun-name) + (ada-goto-decl-start, ada-goto-matching-start) + (ada-goto-matching-end, ada-looking-at-semi-or) + (ada-looking-at-semi-private, ada-in-paramlist-p) + (ada-search-ignore-complex-boolean, ada-move-to-start) + (ada-move-to-end, ada-which-function, ada-gen-treat-proc): + * lisp/net/quickurl.el (quickurl-grab-url): + * lisp/mail/sendmail.el (mail-do-fcc): + * lisp/mail/rmail.el (rmail-resend): + * lisp/mail/mailabbrev.el (mail-abbrev-complete-alias): + * lisp/mail/mail-extr.el (mail-extract-address-components): + * lisp/json.el (json-read-keyword): + * lisp/files.el (insert-directory): + * lisp/emacs-lisp/checkdoc.el (checkdoc-this-string-valid-engine): + * lisp/completion.el (symbol-under-point, symbol-before-point) + (symbol-before-point-for-complete, next-cdabbrev) + (add-completions-from-c-buffer): + * lisp/cedet/semantic/texi.el (semantic-up-context) + (semantic-beginning-of-context): + * lisp/cedet/semantic/bovine/el.el (semantic-get-local-variables): + use 'forward-word-strictly' and 'backward-word-strictly' instead + of 'forward-word' and 'backward-word'. + +2016-02-05 Lars Ingebrigtsen + + Fix doc string of tls-program + + * lisp/net/tls.el (tls-program): Document the %t parameter (bug#22559). + +2016-02-05 Lars Ingebrigtsen + + Restore window conf in nsm + + * lisp/net/nsm.el (nsm-query-user): Restore the window configuration. + + Backport: + +2016-02-05 Mark Oteiza + + * etc/NEWS: Document new mpc.el features + +2016-02-04 Leo Liu + + * lisp/custom.el (defface): Revert indentation change. (Bug#22524) + +2016-02-04 Alan Mackenzie + + Correctly fontify C++ initializations which "look like" functions. + + Fixes bug#7579. + + lisp/progmodes/cc-engine.el (c-forward-declarator): Add extra optional + parameter to enable handling of "anonymous" declarators in declarations. + + lisp/progmodes/cc-fonts.el (c-font-lock-declarators): Check more rigorously + whether a "(" opens a parameter list of a function, or an initialization of a + variable. + +2016-02-04 Ulf Jasper + + Improve newsticker-treeview-selection-face + + * newst-treeview.el (newsticker-treeview-selection-face): Improve + readability for dark background. + +2016-02-04 Eli Zaretskii + + Minor fix in tagging Ruby accessors by etags + + * lib-src/etags.c (Ruby_functions): Don't tag accessors whose + names are not literal symbols. (Bug#22241) + +2016-02-04 Paul Eggert + + Spelling fixes + +2016-02-04 Dmitry Gutov + + Remove 'def X' from the example + + * test/etags/ruby-src/test1.ru (A::B): Remove 'def X' + (http://lists.gnu.org/archive/html/emacs-devel/2016-02/msg00167.html). + * test/etags/CTAGS.good: + * test/etags/ETAGS.good_1: + * test/etags/ETAGS.good_2: + * test/etags/ETAGS.good_3: + * test/etags/ETAGS.good_4: + * test/etags/ETAGS.good_5: + * test/etags/ETAGS.good_6: Adjust accordingly. + +2016-02-04 Vasilij Schneidermann (tiny change) + + Allow sending empty hidden values in eww + + * lisp/net/eww.el (eww-tag-input): Allow sending empty hidden + values (bug#22388). + + (cherry picked from commit 5898da8210af7953e638ddf7821c05260979c3f0) + + Backport: + +2016-02-04 David Edmondson + + Make erc work better when encountering unknown prefix chars + + * lisp/erc/erc.el (erc-channel-receive-names): Output a warning + instead of erroring out on unknown prefix chars (bug#22380). + +2016-02-04 Lars Ingebrigtsen + + Make erc completion case-insensitive again + + * lisp/erc/erc.el (erc-completion-at-point): Make erc completion + case-insensitive again (bug#11360). + +2016-02-04 Carlos Pita (tiny change) + + Make complection in erc use consistent casing + + * lisp/erc/erc-pcomplete.el (pcomplete-erc-all-nicks): Make + case in the complection consistent (bug#18509). + +2016-02-04 Francis Litterio + + Make /QUIT in erc more robust + + * lisp/erc/erc.el (erc-kill-query-buffers): Don't bug out if we're + issuing /QUIT to disconnected servers (bug#22099). + +2016-02-04 Kevin Brubeck Unhammer (tiny change) + + Make tracking faces in Emacs work more reliably + + * lisp/erc/erc-track.el (erc-faces-in): Always return lists of + faces to avoid later ambiguity (bug#22424). + +2016-02-04 Lars Ingebrigtsen + + Make shr not bug out on images on non-graphical displays + + * lisp/net/shr.el (shr-put-image): Don't bug out on alt-less + images on non-graphical displays (bug#22327). + +2016-02-04 Lars Ingebrigtsen + + Fix bookmark display widths + + * lisp/net/eww.el (eww-list-bookmarks): Pop to the buffer before + preparing it so that the widths are computed correctly (bug#22328). + +2016-02-04 Lars Ingebrigtsen + + Fix typo in eww-make-unique-file-name + + * lisp/net/eww.el (eww-make-unique-file-name): Make this function + actually work. + +2016-02-03 Lars Ingebrigtsen + + Make it possible to TAB to input fields + + * lisp/net/eww.el (eww-tag-input): Make it possible to TAB to + input fields (bug#22540). + +2016-02-03 Lars Ingebrigtsen + + Insert complete alt texts when images are disabled + + * lisp/net/shr.el (shr-tag-img): When images are disabled, insert + the complete alt/title string (bug#22293). + +2016-02-03 Lars Ingebrigtsen + + Allow eww text fields to grow + + * lisp/net/eww.el (eww-process-text-input): Allow text fields to + grow when typing in stuff that's longer than the original width. + +2016-02-03 Dima Kogan + + Make erc work when subword-mode is switched on + + * lisp/erc/erc-backend.el (erc-forward-word, erc-word-at-arg-p) + (erc-bounds-of-word-at-point): New functions to do word-based + things when subword-mode is switched on. + + * lisp/erc/erc-button.el (erc-button-add-nickname-buttons): Use them + (bug#17558). + +2016-02-03 Teemu Likonen + + Fix IMAP doc example + + * doc/misc/gnus.texi (Client-Side IMAP Splitting): Fix example. + +2016-02-03 Paul Eggert + + Quoting fixes in doc strings and diagnostics + + * lisp/emacs-lisp/bytecomp.el (byte-compile-setq, byte-compile-funcall): + * lisp/gnus/mml-smime.el (mml-smime-get-dns-cert) + (mml-smime-get-ldap-cert): + Follow user style preference when quoting diagnostics. + +2016-02-03 Noam Postavsky + + Fix warning message in hack-local-variables + + * lisp/files.el (hack-local-variables): use 'thisbuf' to reference + the original buffer name in the warning message. (Bug#21681) + +2016-02-03 Eli Zaretskii + + Etags: yet another improvement in Ruby tags + + * lib-src/etags.c (Ruby_functions): Handle continuation lines in + Ruby accessor definitions. (Bug#22241) + + * test/etags/ruby-src/test1.ru (A::B#X): Add some more tests for + accessors and multiline definitions. + * test/etags/ETAGS.good_1: + * test/etags/ETAGS.good_2: + * test/etags/ETAGS.good_3: + * test/etags/ETAGS.good_4: + * test/etags/ETAGS.good_5: + * test/etags/ETAGS.good_6: + * test/etags/CTAGS.good: Adapt to changes in Ruby tags. + +2016-02-03 Eli Zaretskii + + Fix x-popup-menu on TTYs without a mouse + + * src/menu.c (Fx_popup_menu): Be sure to initialize 'x' and 'y' + for the TTY case without a mouse. (Bug#22538) + +2016-02-03 Nicolas Petton + + * lisp/emacs-lisp/map.el: Improvements to the docstring of the pcase macro + +2016-02-02 Lars Ingebrigtsen + + Use pop-to-buffer-same-window in eww + + * lisp/net/eww.el: pop-to-buffer-same-window throughout instead of + switch-to-buffer (bug#22244). + +2016-02-02 Paul Eggert + + * autogen.sh: Revert all recent changes. + +2016-02-02 Glenn Morris + + * make-dist: Updates related to nt/. + + * make-dist: Add modules/. + + * make-dist: Update for super-special file that can't live in etc/. + +2016-02-02 Eli Zaretskii + + Fix failure to compile ns-win.el in parallel builds + + * src/Makefile.in ($(lispsource)/term/ns-win.elc): Add order-only + dependency on $(lispsource)/international/charprop.el. + (Bug#22501) + +2016-02-02 Eli Zaretskii + + Fix names of tags generated for Ruby accessors + + * lib-src/etags.c (Ruby_functions): Don't include the leading + colon ':' in tags for Ruby accessors and aliases. (Bug#22241) + + * test/etags/ETAGS.good_1: + * test/etags/ETAGS.good_2: + * test/etags/ETAGS.good_3: + * test/etags/ETAGS.good_4: + * test/etags/ETAGS.good_5: + * test/etags/ETAGS.good_6: + * test/etags/CTAGS.good: Adapt to changes in Ruby tags. + +2016-02-02 Eli Zaretskii + + Fix file-name recognition in 'etags' + + * lib-src/etags.c (get_language_from_filename): If FILE includes a + leading directory, compare only its basename to the known file + names in lang_names[]. + + * test/etags/Makefile (RBSRC): Adapt to recent test1.ruby + renaming. + * test/etags/ETAGS.good_1: + * test/etags/ETAGS.good_2: + * test/etags/ETAGS.good_3: + * test/etags/ETAGS.good_4: + * test/etags/ETAGS.good_5: + * test/etags/ETAGS.good_6: + * test/etags/CTAGS.good: Adapt to changes in Ruby file names and + to the results in Makefile due to the above etags.c fix. + +2016-02-02 Eli Zaretskii + + Change Ruby file names and extensions recognized by 'etags' + + * lib-src/etags.c : New variable, holds names + of Ruby files. + : Treat .rb, .ru, and .rbw as Ruby extensions. + : Add Ruby_filenames to the Ruby entry. + * test/etags/ruby-src/test1.ru: Renamed from test1.ruby. + (Bug#22241) + +2016-02-02 Eli Zaretskii + + More improvements for Ruby support in 'etags' + + * lib-src/etags.c (Ruby_functions): Tag Ruby accessors and + alias_method. Identify constants even if the assignment is not + followed by whitespace. (Bug#22241) + + * test/etags/ruby-src/test1.ruby: Add tests for constants, + accessors, and alias_method. + * test/etags/ETAGS.good_1: + * test/etags/ETAGS.good_2: + * test/etags/ETAGS.good_3: + * test/etags/ETAGS.good_4: + * test/etags/ETAGS.good_5: + * test/etags/ETAGS.good_6: + * test/etags/CTAGS.good: Adapt to changes in Ruby tests. + +2016-02-02 Paul Eggert + + Add --git-config option to autogen.sh + + * autogen.sh: New options --git-config, --help. + (git_config): New shell var. Alter function to respect this var. + +2016-02-02 Lars Ingebrigtsen + + Fix editing undo changes in eww fields + + * eww.el (eww-tag-form): Don't overwrite initial form data in text + fields. + (eww-process-text-input): Make `M-t' at the end of text fields work + better (bug#19085). + +2016-02-01 Lars Ingebrigtsen + + Allow the user more control of popping up the eww window + + * eww.el (eww): Use pop-to-buffer-same-window (suggested by + Michael Heerdegen) (bug#22244). + +2016-02-01 Lars Ingebrigtsen + + Make eww-browse-url with new-window parameter work again + + * eww.el (eww-browse-url): Stay in the same buffer if we're + already in a eww mode buffer so that eww-browse-url with a + new-window parameter works (bug#22244). + +2016-02-01 Lars Ingebrigtsen + + Clean up eww code slightly + + * eww.el (eww-browse-url): Clean up code slightly. + +2016-02-01 Lars Ingebrigtsen + + Don't insert nil faces in shr + + * shr.el (shr-insert-table): Don't add nil faces, because that + will show up in *Messages* as "Invalid face reference: nil [32 + times]". + +2016-02-01 Glenn Morris + + Improve the custom type of some user options. + + * lisp/autoinsert.el (auto-insert-alist): + * lisp/replace.el (query-replace-from-to-separator): + * lisp/gnus/gnus-art.el (gnus-hidden-properties): + * lisp/gnus/gnus-gravatar.el (gnus-gravatar-properties): + * lisp/gnus/gnus-picon.el (gnus-picon-properties): + * lisp/progmodes/prolog.el (prolog-keywords, prolog-types) + (prolog-mode-specificators, prolog-determinism-specificators) + (prolog-directives, prolog-program-name, prolog-program-switches) + (prolog-consult-string, prolog-compile-string, prolog-eof-string) + (prolog-prompt-regexp): Improve custom type. + +2016-02-01 Glenn Morris + + Mark some risky calendar variables. + + * lisp/calendar/cal-china.el (chinese-calendar-time-zone): + Remove risky setting for deleted obsolete alias. + (calendar-chinese-standard-time-zone-name) + (calendar-chinese-daylight-saving-start) + (calendar-chinese-daylight-saving-end): + * lisp/calendar/calendar.el (calendar-iso-date-display-form) + (calendar-european-date-display-form) + (calendar-american-date-display-form, calendar-date-display-form): + * lisp/calendar/diary-lib.el (diary-remind-message) + (diary-header-line-format): + * lisp/calendar/solar.el (calendar-time-display-form) + (calendar-location-name): Mark as risky. + +2016-02-01 Simen Heggestøyl + + Highlight two additional SCSS keywords + + * lisp/textmodes/css-mode.el (css-bang-ids): New defconst holding CSS + identifiers on the form !foo. + (scss-bang-ids): New defconst holding SCSS identifiers on the form + !foo. + (css--font-lock-keywords): Highlight the new SCSS bang identifiers in + `font-lock-builtin-face'. + + * test/indent/css-mode.css: Add bang rule test case. + + * test/indent/scss-mode.css: Add test cases for the introduced bang + rules. + +2016-02-01 Karl Fogel + + Recommend enabling integrity-checking in git + + * admin/notes/git-workflow: Recommend setting transfer.fsckObjects. + + This is related to the autogen.sh changes made by Paul Eggert in + commit d766ca8f (2016-02-01) and commit cedd7cad (2016-02-01), and to + my edits today to http://www.emacswiki.org/emacs/GitForEmacsDevs and + to emacswiki.org/emacs/GitQuickStartForEmacsDevs. See also the thread + "Recommend these .gitconfig settings for git integrity." at + https://lists.gnu.org/archive/html/emacs-devel/2016-01/threads.html#01802. + +2016-02-01 Martin Rudalics + + Some corrections in Elisp manual + + * doc/lispref/buffers.texi (Read Only Buffers): Describe optional + argument POSITION. + * doc/lispref/debugging.texi (Error Debugging): `debug-on-signal' + is an option. + * doc/lispref/display.texi (Refresh Screen): Describe optional + argument FRAME of `redraw-frame'. + (Attribute Functions): Describe optional argument CHARACTER of + `face-font'. + (Defining Images): `image-load-path' is an option. + (Beeping): `ring-bell-function' is an option. + * doc/lispref/frames.texi (Size and Position): The PIXELWISE + argument of `set-frame-size' is optional. + (Raising and Lowering): The TERMINAL argument of `tty-top-frame' + is optional. + * doc/lispref/keymaps.texi (Controlling Active Maps): Fix doc of + `set-transient-map'. + * doc/lispref/minibuf.texi (Text from Minibuffer): + `read-regexp-defaults-function' is an option. + (Minibuffer Contents): `delete-minibuffer-contents' is a command. + * doc/lispref/modes.texi (Mode Line Variables): + `mode-line-position' and `mode-line-modes' are variables, not + options. + * doc/lispref/strings.texi (Creating Strings): The START argument + of `substring' is optional. + * doc/lispref/text.texi (Buffer Contents): Describe optional + argument NO-PROPERTIES of `thing-at-point'. + (User-Level Deletion): Both arguments of + `delete-trailing-whitespace' are optional. + (Margins): Use @key{RET} instead of @kbd{RET}. + * doc/lispref/windows.texi (Display Action Functions): Write + non-@code{nil} instead of non-nil. + (Choosing Window Options): The WINDOW arg of + `split-window-sensibly' is optional. + (Choosing Window Options): Write non-@code{nil} instead of + non-nil. + (Window Start and End): Both args of `window-group-end' are + optional. + + * src/buffer.c (Fbarf_if_buffer_read_only): Rename argument POS + to POSITION to keep consisteny with doc-string. + +2016-02-01 Paul Eggert + + Chatter when autogen.sh changes Git configuration + + * autogen.sh (git_config): New function. Use it instead of ‘git config’. + +2016-02-01 Kyle Meyer + + * org/org-compat.el (org-font-lock-ensure): Fix bogus test (bug#22399) + +2016-01-31 Paul Eggert + + Omit unnecessary history from Lisp intro + + * doc/lispintro/emacs-lisp-intro.texi (Review, Digression into C) + (Conclusion): Reword so as not to talk about earlier versions + of Emacs in what should be an intro. + +2016-01-31 Paul Eggert + + * etc/HISTORY: Add some more history, plus git tags. + +2016-01-31 Paul Eggert + + Improve elisp “Security Considerations” doc + + * doc/lispref/os.texi (Security Considerations): + Mention call-process and rename-file as opposed to shell commands. + Add some more cross-references. + +2016-01-31 Paul Eggert + + autogen.sh now arranges for git to check hashes + + Suggested by Karl Fogel in: + http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg01802.html + * autogen.sh: Do "git config transfer.fsckObjects true". + +2016-01-31 Paul Eggert + + Fix (c & 040) typo in emergency escapes + + * src/keyboard.c (handle_interrupt): Fix recently-introduced + typo (040 should have been ~040) that silently suppressed + auto-saves after emergency escapes. Redo comparison to avoid + similar problems. + +2016-01-31 Eli Zaretskii + + Fix display of overlay strings with 'display' and 'box' property + + * src/xdisp.c (get_next_display_element): Take the box face from + display stack level that comes from a buffer, not an overlay + string. (Bug#22499) + +2016-01-31 Andreas Schwab + + Fix imap-starttls-open + + * lisp/net/imap.el (imap-starttls-open): Log imap process + output. Call imap-parse-greeting. (Bug#22500) + +2016-01-31 Andreas Schwab + + Fix return value of imap-starttls-open + + * lisp/net/imap.el (imap-starttls-open): Fix return value. + +2016-01-31 John Wiegley + + Correct reference to DARWIN_OS preprocessor symbol + + * src/alloc.c: Correct a preprocessor reference to DARWIN_OS, which may + not be defined. + +2016-01-30 Paul Eggert + + Spelling fix + + Spelling fixes + +2016-01-30 Paul Eggert + + Pacify GCC on C library without glibc API + + Without this change, with --enable-gcc-warnings GCC would complain + “error: redundant redeclaration of ‘aligned_alloc’”. + * configure.ac: Simplify aligned_alloc testing. + * src/alloc.c (aligned_alloc): Don’t use if DARWIN_OS, + since the simplified configure.ac no longer checks for that. + Don’t declare if HAVE_ALIGNED_ALLOC. + Correct misspelling of HAVE_ALIGNED_ALLOC in ifdef. + +2016-01-30 Artur Malabarba + + Backport: * lisp/files.el: Remove support for extra .dir-locals file + + (dir-locals-file-2, dir-locals--all-files): Remove. + (dir-locals-collect-variables, dir-locals-file, dir-locals-find-file) + (dir-locals-read-from-file, hack-dir-local-variables): Revert changes. + + * lisp/files-x.el (modify-dir-local-variable): Revert changes. + + * lisp/help-fns.el (describe-variable): Revert changes. + + * doc/emacs/custom.texi (Directory Variables): Revert changes. + + * etc/NEWS: Revert changes. + +2016-01-30 Glenn Morris + + * lisp/net/browse-url.el (browse-url-default-browser): + Lower priority of non-free Chrome. + +2016-01-30 Glenn Morris + + Improve the custom type of some user options. + + * lisp/desktop.el (desktop-minor-mode-table): + * lisp/man.el (Man-frame-parameters): + * lisp/midnight.el (midnight-delay): + * lisp/speedbar.el (speedbar-select-frame-method): + * lisp/tooltip.el (tooltip-frame-parameters): + * lisp/tree-widget.el (tree-widget-space-width): + * lisp/type-break.el (type-break-keystroke-threshold): + * lisp/woman.el (woman-imenu-generic-expression): + * lisp/cedet/ede.el (ede-debug-program-function): + * lisp/cedet/ede/project-am.el (project-am-debug-target-function): + * lisp/emulation/viper-keym.el (viper-toggle-key): + * lisp/erc/erc-networks.el (erc-server-alist): + * lisp/gnus/message.el (message-deletable-headers, message-signature): + * lisp/mail/mailalias.el (mail-directory-stream): + * lisp/play/tetris.el (tetris-x-colors): + * lisp/progmodes/gud.el (gud-tooltip-modes): Improve custom type. + +2016-01-30 Simen Heggestøyl + + Highlight CSS variables with variable name face + + * lisp/textmodes/css-mode.el (css-nmstart-re): Don't match variables. + (css--font-lock-keywords): Highlight variables in + `font-lock-variable-name-face'. + +2016-01-30 Glenn Morris + + * lisp/gnus/gnus-kill.el (gnus-winconf-kill-file): Not user-serviceable. + +2016-01-30 Glenn Morris + + Mark some user options that can get evalled as risky. + + * lisp/allout.el (allout-title): + * lisp/emacs-lisp/edebug.el (edebug-global-break-condition): + * lisp/gnus/message.el (message-mailer-swallows-blank-line): + * lisp/progmodes/gud.el (gud-tooltip-display): + * lisp/vc/ediff-mult.el (ediff-default-filtering-regexp): + Mark as risky. + +2016-01-30 Eli Zaretskii + + Disable DebPrint in sys_read on MS-Windows + + * src/w32.c (sys_read): Disable a debugging print that is normal + when non-blocking reads are retried. + +2016-01-30 Martin Rudalics + + ;Fix ChangeLog entry + +2016-01-30 Eli Zaretskii + + Fix typos in Introduction to Emacs Lisp manual + + * doc/lispintro/emacs-lisp-intro.texi (Emacs Initialization) + (kill-new function, Digression into C) + (Complete forward-sentence, Divide and Conquer, Find a File) + (lengths-list-many-files, Columns of a graph, defcustom) + (recursive-count-words): Fix typos. Reported by Daniel Bastos + . + +2016-01-30 Nicolas Petton + + Bump version to 25.0.90 + + * README: + * configure.ac: + * msdos/sed2v2.inp: Bump version to 25.0.90. + +2016-01-30 Nicolas Petton + + * etc/AUTHORS: Update the AUTHORS file + 2016-01-30 Nicolas Petton Bump version to 25.0.90 @@ -26338,7 +27261,7 @@ This file records repository revisions from commit 9d56a21e6a696ad19ac65c4b405aeca44785884a (exclusive) to -commit e6b7b6d89ff9288a49099f041752908b5eb9613e (inclusive). +commit 4feb9621980f9534e920a8438e5776e98eefb752 (inclusive). See ChangeLog.1 for earlier changes. ;; Local Variables: commit 4feb9621980f9534e920a8438e5776e98eefb752 Author: Artur Malabarba Date: Sun Feb 7 08:35:49 2016 +0000 * lisp/comint.el (comint-prompt-read-only): Clean tabs in docstring While tabs in code are mostly fine because the Emacs sources have a .dir-locals file specifying tab-width, the same is not true of tabs in code examples inside docstrings. The docstring is printed on a *Help* buffer, which can be created on any directory and won't necessarily have the same tab-width set. diff --git a/lisp/comint.el b/lisp/comint.el index afbaef1..dcd4a5a 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -185,10 +185,10 @@ the remaining prompts will be accidentally messed up. You may wish to put something like the following in your init file: \(add-hook \\='comint-mode-hook - (lambda () - (define-key comint-mode-map [remap kill-region] \\='comint-kill-region) - (define-key comint-mode-map [remap kill-whole-line] - \\='comint-kill-whole-line))) + (lambda () + (define-key comint-mode-map [remap kill-region] \\='comint-kill-region) + (define-key comint-mode-map [remap kill-whole-line] + \\='comint-kill-whole-line))) If you sometimes use comint-mode on text-only terminals or with `emacs -nw', you might wish to use another binding for `comint-kill-whole-line'." commit cc419fb599ac4d74ffc00e5c4c26e75009ac4911 Author: Lars Ingebrigtsen Date: Sun Feb 7 17:56:59 2016 +1100 Don't inloop gnus-uu-mark-thread on the last thread * lisp/gnus/gnus-uu.el (gnus-uu-mark-thread): Don't infloop on the final thread in the summary buffer (bug#16666). diff --git a/lisp/gnus/gnus-uu.el b/lisp/gnus/gnus-uu.el index 83f817f..416567e 100644 --- a/lisp/gnus/gnus-uu.el +++ b/lisp/gnus/gnus-uu.el @@ -641,9 +641,9 @@ When called interactively, prompt for REGEXP." (interactive) (gnus-save-hidden-threads (let ((level (gnus-summary-thread-level))) - (while (and (gnus-summary-set-process-mark - (gnus-summary-article-number)) + (while (and (gnus-summary-set-process-mark (gnus-summary-article-number)) (zerop (forward-line 1)) + (not (eobp)) (> (gnus-summary-thread-level) level))))) (gnus-summary-position-point)) commit 51c77a27f1b5213ca190f25cd68135e3b5bb2c20 Author: Lars Ingebrigtsen Date: Sun Feb 7 15:04:31 2016 +1100 Display non-ASCII group names better in prompts * lisp/gnus/gnus-sum.el (gnus-articles-to-read): To decode the group name, we have to do that before we remove the prefix. diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el index 5972f29..378d342 100644 --- a/lisp/gnus/gnus-sum.el +++ b/lisp/gnus/gnus-sum.el @@ -5896,13 +5896,13 @@ If SELECT-ARTICLES, only select those articles from GROUP." (if only-read-p (format "How many articles from %s (available %d, default %d): " - (gnus-group-decoded-name - (gnus-group-real-name gnus-newsgroup-name)) + (gnus-group-real-name + (gnus-group-decoded-name gnus-newsgroup-name)) number default) (format "How many articles from %s (%d default): " - (gnus-group-decoded-name - (gnus-group-real-name gnus-newsgroup-name)) + (gnus-group-real-name + (gnus-group-decoded-name gnus-newsgroup-name)) default)) nil nil commit f93d669a16bd3cb3f43f0c8cfd22fe18b627a6a1 Author: Lars Ingebrigtsen Date: Sun Feb 7 13:01:01 2016 +1100 Default to gpg2 instead of gpg * lisp/epg-config.el (epg-gpg-program): Prefer gpg2 over gpg, if it exists. This fixes many problems with using the GPG authentication agent. diff --git a/etc/NEWS b/etc/NEWS index e5f34a1..18c08dc 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -711,6 +711,10 @@ at BOL or EOL, or in whitespace there. To enable these, customize, respectively, `show-paren-when-point-inside-paren' or `show-paren-when-point-in-periphery'. +--- +** If gpg2 exists on the system, it is now used as the default value +of `epg-gpg-program' (instead of gpg). + ** Lisp mode --- diff --git a/lisp/epg-config.el b/lisp/epg-config.el index e92bcd6..c41d97d 100644 --- a/lisp/epg-config.el +++ b/lisp/epg-config.el @@ -39,10 +39,11 @@ :group 'data :group 'external) -(defcustom epg-gpg-program (cond ((executable-find "gpg") "gpg") - ((executable-find "gpg2") "gpg2") - (t "gpg")) +(defcustom epg-gpg-program (if (executable-find "gpg2") + "gpg2" + "gpg") "The `gpg' executable." + :version "25.1" :group 'epg :type 'string) commit 35cbe2095ba024f6ee60799cd560771f2ef739a4 Author: David Edmondson Date: Sun Feb 7 12:54:08 2016 +1100 src/process.c Correctly convert AF_INET6 addresses * src/process.c (conv_lisp_to_sockaddr): AF_INET6 addresses are converted to a list of 16 bit quantities by conv_sockaddr_to_lisp(). conv_lisp_to_sockaddr() should follow the same scheme rather than expecting a (longer) list of 8 bit quantities. Backport: (cherry picked from commit 55ce3c30d617c38eb086d5ad4ffbd881c20c559c) diff --git a/src/process.c b/src/process.c index e1ebdff..1eac5e1 100644 --- a/src/process.c +++ b/src/process.c @@ -2372,7 +2372,7 @@ conv_lisp_to_sockaddr (int family, Lisp_Object address, struct sockaddr *sa, int { struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa; uint16_t *ip6 = (uint16_t *)&sin6->sin6_addr; - len = sizeof (sin6->sin6_addr) + 1; + len = sizeof (sin6->sin6_addr) / 2 + 1; hostport = XINT (p->contents[--len]); sin6->sin6_port = htons (hostport); for (i = 0; i < len; i++) commit 9ffe7ddd5e1ba93f327cfe985e9476571d7a2873 Author: Artur Malabarba Date: Sat Feb 6 22:46:16 2016 +0000 * lisp/isearch.el (isearch-define-mode-toggle): Improve logic diff --git a/lisp/isearch.el b/lisp/isearch.el index 6ef4f72..2efa4c7 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -1528,15 +1528,13 @@ The command then executes BODY and updates the isearch prompt." (if docstring (concat "\n" docstring) "")) (interactive) ,@(when function - `((setq isearch-regexp-function - (unless (eq isearch-regexp-function #',function) - #',function)) - (when isearch-regexp-function (setq isearch-regexp nil)))) + `((setq isearch-regexp-function #',function) + (setq isearch-regexp nil))) ,@body (setq isearch-success t isearch-adjusted t) (isearch-update)) (define-key isearch-mode-map ,key #',command-name) - ,@(when (symbolp function) + ,@(when (and function (symbolp function)) `((put ',function 'isearch-message-prefix ,(format "%s " mode)) (put ',function :advertised-binding ,key) (cl-callf (lambda (types) (cons 'choice commit 16140f7ecebc82829c9720cb18979fb26063fa56 Author: Artur Malabarba Date: Sat Feb 6 22:45:17 2016 +0000 * lisp/menu-bar.el (menu-bar-options-menu): New search submenu (menu-bar-search-options-menu): New variable diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el index 254bdee..6281d7e 100644 --- a/lisp/menu-bar.el +++ b/lisp/menu-bar.el @@ -1250,6 +1250,52 @@ mail status in mode line")) :enable (not (truncated-partial-width-window-p)))) menu)) +(defvar menu-bar-search-options-menu + (let ((menu (make-sparse-keymap "Search Options"))) + + (dolist (x '((character-fold-to-regexp "Fold Characters" "Character folding") + (isearch-symbol-regexp "Whole Symbols" "Whole symbol") + (word-search-regexp "Whole Words" "Whole word"))) + (bindings--define-key menu (vector (nth 0 x)) + `(menu-item ,(nth 1 x) + (lambda () + (interactive) + (setq search-default-mode #',(nth 0 x)) + (message ,(format "%s search enabled" (nth 2 x)))) + :help ,(format "Enable %s search" (downcase (nth 2 x))) + :button (:radio . (eq search-default-mode #',(nth 0 x)))))) + + (bindings--define-key menu [regexp-search] + '(menu-item "Regular Expression" + (lambda () + (interactive) + (setq search-default-mode t) + (message "Regular-expression search enabled")) + :help "Enable regular-expression search" + :button (:radio . (eq search-default-mode t)))) + + (bindings--define-key menu [regular-search] + '(menu-item "Literal Search" + (lambda () + (interactive) + (when search-default-mode + (setq search-default-mode nil) + (when (symbolp search-default-mode) + (message "Literal search enabled")))) + :help "Disable special search modes" + :button (:radio . (not search-default-mode)))) + + (bindings--define-key menu [custom-separator] + menu-bar-separator) + (bindings--define-key menu [case-fold-search] + (menu-bar-make-toggle + toggle-case-fold-search case-fold-search + "Ignore Case" + "Case-Insensitive Search %s" + "Ignore letter-case in search commands")) + + menu)) + (defvar menu-bar-options-menu (let ((menu (make-sparse-keymap "Options"))) (bindings--define-key menu [customize] @@ -1361,12 +1407,9 @@ mail status in mode line")) (:visible (and (boundp 'cua-enable-cua-keys) (not cua-enable-cua-keys))))) - (bindings--define-key menu [case-fold-search] - (menu-bar-make-toggle - toggle-case-fold-search case-fold-search - "Ignore Case for Search" - "Case-Insensitive Search %s" - "Ignore letter-case in search commands")) + (bindings--define-key menu [search-options] + `(menu-item "Default Search Options" + ,menu-bar-search-options-menu)) (bindings--define-key menu [line-wrapping] `(menu-item "Line Wrapping in This Buffer" commit 3db6adb174e4b3aa147fc7b260e5e401cb6069fc Author: Artur Malabarba Date: Sat Feb 6 18:45:21 2016 +0000 * lisp/isearch.el (search-default-mode) (isearch-regexp-function): Improve docstrings. diff --git a/lisp/isearch.el b/lisp/isearch.el index 1718096..6ef4f72 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -234,9 +234,9 @@ If t, default to regexp searches (as if typing `\\[isearch-toggle-regexp]' durin isearch). If a function, use that function as an `isearch-regexp-function'. -Example functions are `word-search-regexp' \(`\\[isearch-toggle-word]'), -`isearch-symbol-regexp' \(`\\[isearch-toggle-symbol]'), and -`character-fold-to-regexp' \(`\\[isearch-toggle-character-fold]')." +Example functions (and the keys to toggle them during isearch) +are `word-search-regexp' \(`\\[isearch-toggle-word]'), `isearch-symbol-regexp' +\(`\\[isearch-toggle-symbol]'), and `character-fold-to-regexp' \(`\\[isearch-toggle-character-fold]')." ;; :type is set below by `isearch-define-mode-toggle'. :type '(choice (const :tag "Literal search" nil) (const :tag "Regexp search" t) @@ -558,7 +558,11 @@ If the value is a function (e.g. `isearch-symbol-regexp'), it is called to convert a plain search string to a regexp used by regexp search functions. The symbol property `isearch-message-prefix' put on this function -specifies the prefix string displayed in the search message.") +specifies the prefix string displayed in the search message. + +This variable is set and changed during isearch. To change the +default behaviour used for searches, see `search-default-mode' +instead.") ;; We still support setting this to t for backwards compatibility. (define-obsolete-variable-alias 'isearch-word 'isearch-regexp-function "25.1") commit 4ea1ea7c73f40a5bb3955273312f337dc332d6aa Author: Artur Malabarba Date: Sat Feb 6 18:44:22 2016 +0000 * lisp/isearch.el: Rename search-default-regexp-mode to search-default-mode (search-default-mode): New variable. (isearch-mode, isearch-define-mode-toggle) (isearch--describe-regexp-mode): Update accordingly. * lisp/menu-bar.el (nonincremental-search-forward): Update accordingly. * etc/NEWS: Update accordingly. * doc/emacs/search.texi: Update accordingly. diff --git a/doc/emacs/search.texi b/doc/emacs/search.texi index e854646..10c1f73 100644 --- a/doc/emacs/search.texi +++ b/doc/emacs/search.texi @@ -1268,7 +1268,7 @@ character sequences}. Generally, search commands in Emacs by default perform character folding, thus matching equivalent character sequences. You can disable this behavior by customizing the variable -@code{search-default-regexp-mode} to @code{nil}. @xref{Search +@code{search-default-mode} to @code{nil}. @xref{Search Customizations}. Within an incremental search, typing @kbd{M-s '} (@code{isearch-toggle-character-fold}) toggles character folding, but only for that search. (Replace commands have a different default, @@ -1800,7 +1800,7 @@ not described elsewhere. @cindex default search mode @cindex search mode, default The default search mode for the incremental search is specified by -the variable @code{search-default-regexp-mode}. It can be @code{nil}, +the variable @code{search-default-mode}. It can be @code{nil}, @code{t}, or a function. If it is @code{nil}, the default mode is to do literal searches without character folding, but with case folding and lax-whitespace matches as determined by @code{case-fold-search} diff --git a/etc/NEWS b/etc/NEWS index c98ef26..e5f34a1 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -586,7 +586,7 @@ item as before. ** Search and Replace +++ -*** New user option `search-default-regexp-mode' +*** New user option `search-default-mode' specifies the default mode for I-search. +++ diff --git a/lisp/isearch.el b/lisp/isearch.el index c36f463..1718096 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -224,7 +224,7 @@ Default value, nil, means edit the string instead." (autoload 'character-fold-to-regexp "character-fold") -(defcustom search-default-regexp-mode #'character-fold-to-regexp +(defcustom search-default-mode #'character-fold-to-regexp "Default mode to use when starting isearch. Value is nil, t, or a function. @@ -868,11 +868,11 @@ used to set the value of `isearch-regexp-function'." (setq isearch-forward forward isearch-regexp (or regexp (and (not regexp-function) - (eq search-default-regexp-mode t))) + (eq search-default-mode t))) isearch-regexp-function (or regexp-function - (and (functionp search-default-regexp-mode) + (and (functionp search-default-mode) (not regexp) - search-default-regexp-mode)) + search-default-mode)) isearch-op-fun op-fun isearch-last-case-fold-search isearch-case-fold-search isearch-case-fold-search case-fold-search @@ -1506,7 +1506,7 @@ Use `isearch-exit' to quit without signaling." (isearch-repeat 'backward)) -;;; Toggles for `isearch-regexp-function' and `search-default-regexp-mode'. +;;; Toggles for `isearch-regexp-function' and `search-default-mode'. (defmacro isearch-define-mode-toggle (mode key function &optional docstring &rest body) "Define a command called `isearch-toggle-MODE' and bind it to `M-s KEY'. The first line of the command's docstring is auto-generated, the @@ -1538,7 +1538,7 @@ The command then executes BODY and updates the isearch prompt." (cl-callf (lambda (types) (cons 'choice (cons '(const :tag ,(capitalize (format "%s search" mode)) ,function) (cdr types)))) - (get 'search-default-regexp-mode 'custom-type))))))) + (get 'search-default-mode 'custom-type))))))) (isearch-define-mode-toggle word "w" word-search-regexp "\ Turning on word search turns off regexp mode.") @@ -2571,7 +2571,7 @@ the word mode." (setq regexp-function #'word-search-regexp)) (let ((description ;; Don't use a description on the default search mode. - (cond ((equal regexp-function search-default-regexp-mode) "") + (cond ((equal regexp-function search-default-mode) "") (regexp-function (and (symbolp regexp-function) (or (get regexp-function 'isearch-message-prefix) @@ -2579,7 +2579,7 @@ the word mode." (isearch-regexp "regexp ") ;; We're in literal mode. If the default mode is not ;; literal, then describe it. - ((functionp search-default-regexp-mode) "literal ")))) + ((functionp search-default-mode) "literal ")))) (if space-before ;; Move space from the end to the beginning. (replace-regexp-in-string "\\(.*\\) \\'" " \\1" description) diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el index f9dde57..254bdee 100644 --- a/lisp/menu-bar.el +++ b/lisp/menu-bar.el @@ -244,7 +244,7 @@ (setq menu-bar-last-search-type 'string) ;; Ideally, this whole command would be equivalent to `C-s RET'. (let ((isearch-forward (not backward)) - (isearch-regexp-function search-default-regexp-mode) + (isearch-regexp-function search-default-mode) (isearch-regexp nil)) (if (or (equal string "") (not string)) (funcall (isearch-search-fun-default) (car search-ring)) commit c77ffc8019bceb850a794c13f2e3ad991cc7e412 Author: Oscar Fuentes Date: Sat Feb 6 22:12:53 2016 +0100 Use monitor's resolution for positioning tooltips * src/xfns.c (compute_tip_xy): Use the resolution of the monitor where the mouse pointer is to avoid placing the tooltip over the border of the monitor on multi-head displays. Fixes bug#22549. diff --git a/src/xfns.c b/src/xfns.c index 9624ac5..20ac627 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -5683,6 +5683,7 @@ compute_tip_xy (struct frame *f, Lisp_Object parms, Lisp_Object dx, Lisp_Object int win_x, win_y; Window root, child; unsigned pmask; + int min_x, min_y, max_x, max_y = -1; /* User-specified position? */ left = Fcdr (Fassq (Qleft, parms)); @@ -5695,45 +5696,81 @@ compute_tip_xy (struct frame *f, Lisp_Object parms, Lisp_Object dx, Lisp_Object if ((!INTEGERP (left) && !INTEGERP (right)) || (!INTEGERP (top) && !INTEGERP (bottom))) { + Lisp_Object frame, attributes, monitor, geometry; + block_input (); XQueryPointer (FRAME_X_DISPLAY (f), FRAME_DISPLAY_INFO (f)->root_window, &root, &child, root_x, root_y, &win_x, &win_y, &pmask); unblock_input (); + + XSETFRAME(frame, f); + attributes = Fx_display_monitor_attributes_list (frame); + + /* Try to determine the monitor where the mouse pointer is and + its geometry. See bug#22549. */ + while (CONSP (attributes)) + { + monitor = XCAR (attributes); + geometry = Fassq (Qgeometry, monitor); + if (CONSP (geometry)) + { + min_x = XINT (Fnth (make_number (1), geometry)); + min_y = XINT (Fnth (make_number (2), geometry)); + max_x = min_x + XINT (Fnth (make_number (3), geometry)); + max_y = min_y + XINT (Fnth (make_number (4), geometry)); + if (min_x <= *root_x && *root_x < max_x + && min_y <= *root_y && *root_y < max_y) + { + break; + } + max_y = -1; + } + + attributes = XCDR (attributes); + } + } + + /* It was not possible to determine the monitor's geometry, so we + assign some sane defaults here: */ + if ( max_y < 0 ) + { + min_x = 0; + min_y = 0; + max_x = x_display_pixel_width (FRAME_DISPLAY_INFO (f)); + max_y = x_display_pixel_height (FRAME_DISPLAY_INFO (f)); } if (INTEGERP (top)) *root_y = XINT (top); else if (INTEGERP (bottom)) *root_y = XINT (bottom) - height; - else if (*root_y + XINT (dy) <= 0) - *root_y = 0; /* Can happen for negative dy */ - else if (*root_y + XINT (dy) + height - <= x_display_pixel_height (FRAME_DISPLAY_INFO (f))) + else if (*root_y + XINT (dy) <= min_y) + *root_y = min_y; /* Can happen for negative dy */ + else if (*root_y + XINT (dy) + height <= max_y) /* It fits below the pointer */ *root_y += XINT (dy); - else if (height + XINT (dy) <= *root_y) + else if (height + XINT (dy) + min_y <= *root_y) /* It fits above the pointer. */ *root_y -= height + XINT (dy); else /* Put it on the top. */ - *root_y = 0; + *root_y = min_y; if (INTEGERP (left)) *root_x = XINT (left); else if (INTEGERP (right)) *root_x = XINT (right) - width; - else if (*root_x + XINT (dx) <= 0) + else if (*root_x + XINT (dx) <= min_x) *root_x = 0; /* Can happen for negative dx */ - else if (*root_x + XINT (dx) + width - <= x_display_pixel_width (FRAME_DISPLAY_INFO (f))) + else if (*root_x + XINT (dx) + width <= max_x) /* It fits to the right of the pointer. */ *root_x += XINT (dx); - else if (width + XINT (dx) <= *root_x) + else if (width + XINT (dx) + min_x <= *root_x) /* It fits to the left of the pointer. */ *root_x -= width + XINT (dx); else - /* Put it left-justified on the screen--it ought to fit that way. */ - *root_x = 0; + /* Put it left justified on the screen -- it ought to fit that way. */ + *root_x = min_x; } commit 49e57490d0023b10629cd1a3c2d5f0fc6068a58c Author: Eli Zaretskii Date: Sat Feb 6 21:53:38 2016 +0200 Fix file-notify-test on MS-Windows * test/automated/file-notify-tests.el (file-notify--test-timeout): Reduce w32notify timeout to 10 sec. (file-notify-test06-many-events): Call read-event after each rename, to keep the w32notify backend happy in batch mode. (Bug#22534) diff --git a/test/automated/file-notify-tests.el b/test/automated/file-notify-tests.el index 629d85b..5fc4ff8 100644 --- a/test/automated/file-notify-tests.el +++ b/test/automated/file-notify-tests.el @@ -66,7 +66,7 @@ "Timeout to wait for arriving events, in seconds." (cond ((file-remote-p temporary-file-directory) 6) - ((string-equal (file-notify--test-library) "w32notify") 20) + ((string-equal (file-notify--test-library) "w32notify") 10) ((eq system-type 'cygwin) 10) (t 3))) @@ -797,10 +797,7 @@ longer than timeout seconds for the events to be delivered." file-notify--test-tmpfile '(change) 'file-notify--test-event-handler))) (unwind-protect - ;; In case of w32notify, the upper limit of events to handle - ;; seems to be 260. Reason unknown. - (let ((n (if (string-equal (file-notify--test-library) "w32notify") - 250 1000)) + (let ((n 1000) source-file-list target-file-list (default-directory file-notify--test-tmpfile)) (dotimes (i n) @@ -832,10 +829,11 @@ longer than timeout seconds for the events to be delivered." (let ((source-file-list source-file-list) (target-file-list target-file-list)) (while (and source-file-list target-file-list) - (rename-file (pop source-file-list) (pop target-file-list) t)))) + (rename-file (pop source-file-list) (pop target-file-list) t) + (read-event nil nil 0.02)))) (file-notify--test-with-events (make-list n 'deleted) (dolist (file target-file-list) - (delete-file file)))) + (prog1 (delete-file file) (read-event nil nil 0.02))))) (file-notify--test-cleanup))) (file-notify--deftest-remote file-notify-test06-many-events commit be1d87492e2fba479151edcaf7f3818675b1eac7 Author: Eli Zaretskii Date: Sat Feb 6 18:30:35 2016 +0200 Fix issues found by auditing w32notify code * src/w32inevt.c (handle_file_notifications): Count the number of events to be returned. * src/w32notify.c (send_notifications): Don't copy to the file notification buffer more than it can hold. (Bug#22534) diff --git a/src/w32inevt.c b/src/w32inevt.c index 54b0b13..e714e27 100644 --- a/src/w32inevt.c +++ b/src/w32inevt.c @@ -660,6 +660,7 @@ handle_file_notifications (struct input_event *hold_quit) inev.arg = list3 (make_pointer_integer (notifications_desc), action, fname); kbd_buffer_store_event_hold (&inev, hold_quit); + nevents++; if (!fni->NextEntryOffset) break; diff --git a/src/w32notify.c b/src/w32notify.c index 576cf84..71787c4 100644 --- a/src/w32notify.c +++ b/src/w32notify.c @@ -144,8 +144,9 @@ send_notifications (BYTE *info, DWORD info_size, void *desc, if (!notification_buffer_in_use) { if (info_size) - memcpy (file_notifications, info, info_size); - notifications_size = info_size; + memcpy (file_notifications, info, + min (info_size, sizeof (file_notifications))); + notifications_size = min (info_size, sizeof (file_notifications)); notifications_desc = desc; /* If PostMessage fails, the message queue is full. If that happens, the last thing they will worry about is file commit 87ae21858adc173c129ff8dfec8ce74cd82e77be Author: Eli Zaretskii Date: Sat Feb 6 11:08:20 2016 +0200 Extend etags Ruby support for accessors * lib-src/etags.c (Ruby_functions): Support accessors defined with parentheses. (Bug#22563) * test/etags/ruby-src/test1.ru (A::B): Add tests for accessors defined with parentheses. * test/etags/ETAGS.good_1: * test/etags/ETAGS.good_2: * test/etags/ETAGS.good_3: * test/etags/ETAGS.good_4: * test/etags/ETAGS.good_5: * test/etags/ETAGS.good_6: * test/etags/CTAGS.good: Adapt to changes in Ruby tests. diff --git a/lib-src/etags.c b/lib-src/etags.c index 0f5bfa3..182cb4c 100644 --- a/lib-src/etags.c +++ b/lib-src/etags.c @@ -4730,8 +4730,12 @@ Ruby_functions (FILE *inf) if (reader || writer || alias) { do { - char *np = cp; + char *np; + cp = skip_spaces (cp); + if (*cp == '(') + cp = skip_spaces (cp + 1); + np = cp; cp = skip_name (cp); if (*np != ':') continue; diff --git a/test/etags/CTAGS.good b/test/etags/CTAGS.good index 58b1db6..ebde715 100644 --- a/test/etags/CTAGS.good +++ b/test/etags/CTAGS.good @@ -454,7 +454,7 @@ Condition_Variable/t ada-src/2ataspri.ads /^ type Condition_Variable is privat Condition_Variable/t ada-src/2ataspri.ads /^ type Condition_Variable is$/ Configure pyt-src/server.py /^class Configure(Frame, ControlEdit):$/ ConfirmQuit pyt-src/server.py /^def ConfirmQuit(frame, context):$/ -Constant ruby-src/test1.ru 38 +Constant ruby-src/test1.ru 42 ControlEdit pyt-src/server.py /^class ControlEdit(Frame):$/ Controls pyt-src/server.py /^class Controls:$/ CopyTextString pas-src/common.pas /^function CopyTextString;(*($/ @@ -2555,6 +2555,7 @@ bar c-src/c.c /^void bar() {while(0) {}}$/ bar c.c 143 bar c-src/h.h 19 bar cp-src/x.cc /^XX::bar()$/ +bar1 ruby-src/test1.ru /^ attr_reader(:foo1, :bar1, # comment$/ bar= ruby-src/test1.ru /^ attr_writer :bar,$/ bas_syn prol-src/natded.prolog /^bas_syn(n(_)).$/ base c-src/emacs/src/lisp.h 2188 @@ -3008,6 +3009,8 @@ foo f-src/entry.strange /^ character*(*) function foo()$/ foo php-src/ptest.php /^foo()$/ foo ruby-src/test1.ru /^ attr_reader :foo$/ foo! ruby-src/test1.ru /^ def foo!$/ +foo1 ruby-src/test1.ru /^ attr_reader(:foo1, :bar1, # comment$/ +foo2 ruby-src/test1.ru /^ alias_method ( :foo2, #cmmt$/ foobar c-src/c.c /^int foobar() {;}$/ foobar c.c /^extern void foobar (void) __attribute__ ((section / foobar2 c-src/h.h 20 @@ -3880,7 +3883,8 @@ questo ../c/c.web 34 quiettest make-src/Makefile /^quiettest:$/ quit_char c-src/emacs/src/keyboard.c 192 quit_throw_to_read_char c-src/emacs/src/keyboard.c /^quit_throw_to_read_char (bool from_signal)$/ -qux ruby-src/test1.ru /^ alias_method :qux, :tee, attr_accessor :bogus$/ +qux ruby-src/test1.ru /^ alias_method :qux, :tee, attr_accessor(:bogus)/ +qux1 ruby-src/test1.ru /^ :qux1)$/ qux= ruby-src/test1.ru /^ def qux=(tee)$/ r0 c-src/sysdep.h 54 r1 c-src/sysdep.h 55 diff --git a/test/etags/ETAGS.good_1 b/test/etags/ETAGS.good_1 index 90bbe77..d255086 100644 --- a/test/etags/ETAGS.good_1 +++ b/test/etags/ETAGS.good_1 @@ -3061,7 +3061,7 @@ module ModuleExample1,0 def module_instance_method46,1051 def ModuleExample.module_class_methodmodule_class_method49,1131 -ruby-src/test1.ru,785 +ruby-src/test1.ru,935 class A1,0 def a(2,8 def b(5,38 @@ -3084,9 +3084,13 @@ module A9,57 attr_accessor :teetee31,382 attr_accessor :teetee=31,382 alias_method :qux,qux32,405 - alias_method :xyz,xyz33,455 - :tee ; attr_reader :subtlesubtle34,478 -A::Constant Constant38,533 + alias_method :xyz,xyz33,456 + :tee ; attr_reader :subtlesubtle34,479 + attr_reader(:foo1,foo135,523 + attr_reader(:foo1, :bar1,bar135,523 + :qux1)qux136,563 + alias_method ( :foo2,foo237,586 +A::Constant Constant42,655 tex-src/testenv.tex,52 \newcommand{\nm}\nm4,77 diff --git a/test/etags/ETAGS.good_2 b/test/etags/ETAGS.good_2 index d774bb1..9eb1d42 100644 --- a/test/etags/ETAGS.good_2 +++ b/test/etags/ETAGS.good_2 @@ -3631,7 +3631,7 @@ module ModuleExample1,0 def module_instance_method46,1051 def ModuleExample.module_class_methodmodule_class_method49,1131 -ruby-src/test1.ru,785 +ruby-src/test1.ru,935 class A1,0 def a(2,8 def b(5,38 @@ -3654,9 +3654,13 @@ module A9,57 attr_accessor :teetee31,382 attr_accessor :teetee=31,382 alias_method :qux,qux32,405 - alias_method :xyz,xyz33,455 - :tee ; attr_reader :subtlesubtle34,478 -A::Constant Constant38,533 + alias_method :xyz,xyz33,456 + :tee ; attr_reader :subtlesubtle34,479 + attr_reader(:foo1,foo135,523 + attr_reader(:foo1, :bar1,bar135,523 + :qux1)qux136,563 + alias_method ( :foo2,foo237,586 +A::Constant Constant42,655 tex-src/testenv.tex,52 \newcommand{\nm}\nm4,77 diff --git a/test/etags/ETAGS.good_3 b/test/etags/ETAGS.good_3 index e3855a5..1f5a342 100644 --- a/test/etags/ETAGS.good_3 +++ b/test/etags/ETAGS.good_3 @@ -3408,7 +3408,7 @@ module ModuleExample1,0 def module_instance_method46,1051 def ModuleExample.module_class_methodmodule_class_method49,1131 -ruby-src/test1.ru,785 +ruby-src/test1.ru,935 class A1,0 def a(2,8 def b(5,38 @@ -3431,9 +3431,13 @@ module A9,57 attr_accessor :teetee31,382 attr_accessor :teetee=31,382 alias_method :qux,qux32,405 - alias_method :xyz,xyz33,455 - :tee ; attr_reader :subtlesubtle34,478 -A::Constant Constant38,533 + alias_method :xyz,xyz33,456 + :tee ; attr_reader :subtlesubtle34,479 + attr_reader(:foo1,foo135,523 + attr_reader(:foo1, :bar1,bar135,523 + :qux1)qux136,563 + alias_method ( :foo2,foo237,586 +A::Constant Constant42,655 tex-src/testenv.tex,52 \newcommand{\nm}\nm4,77 diff --git a/test/etags/ETAGS.good_4 b/test/etags/ETAGS.good_4 index dbae59b..b8a3d9d 100644 --- a/test/etags/ETAGS.good_4 +++ b/test/etags/ETAGS.good_4 @@ -3225,7 +3225,7 @@ module ModuleExample1,0 def module_instance_method46,1051 def ModuleExample.module_class_methodmodule_class_method49,1131 -ruby-src/test1.ru,785 +ruby-src/test1.ru,935 class A1,0 def a(2,8 def b(5,38 @@ -3248,9 +3248,13 @@ module A9,57 attr_accessor :teetee31,382 attr_accessor :teetee=31,382 alias_method :qux,qux32,405 - alias_method :xyz,xyz33,455 - :tee ; attr_reader :subtlesubtle34,478 -A::Constant Constant38,533 + alias_method :xyz,xyz33,456 + :tee ; attr_reader :subtlesubtle34,479 + attr_reader(:foo1,foo135,523 + attr_reader(:foo1, :bar1,bar135,523 + :qux1)qux136,563 + alias_method ( :foo2,foo237,586 +A::Constant Constant42,655 tex-src/testenv.tex,52 \newcommand{\nm}\nm4,77 diff --git a/test/etags/ETAGS.good_5 b/test/etags/ETAGS.good_5 index 9ea7797..9e3b258 100644 --- a/test/etags/ETAGS.good_5 +++ b/test/etags/ETAGS.good_5 @@ -4142,7 +4142,7 @@ module ModuleExample1,0 def module_instance_method46,1051 def ModuleExample.module_class_methodmodule_class_method49,1131 -ruby-src/test1.ru,785 +ruby-src/test1.ru,935 class A1,0 def a(2,8 def b(5,38 @@ -4165,9 +4165,13 @@ module A9,57 attr_accessor :teetee31,382 attr_accessor :teetee=31,382 alias_method :qux,qux32,405 - alias_method :xyz,xyz33,455 - :tee ; attr_reader :subtlesubtle34,478 -A::Constant Constant38,533 + alias_method :xyz,xyz33,456 + :tee ; attr_reader :subtlesubtle34,479 + attr_reader(:foo1,foo135,523 + attr_reader(:foo1, :bar1,bar135,523 + :qux1)qux136,563 + alias_method ( :foo2,foo237,586 +A::Constant Constant42,655 tex-src/testenv.tex,52 \newcommand{\nm}\nm4,77 diff --git a/test/etags/ETAGS.good_6 b/test/etags/ETAGS.good_6 index 7420a41..f5e0ad4 100644 --- a/test/etags/ETAGS.good_6 +++ b/test/etags/ETAGS.good_6 @@ -4142,7 +4142,7 @@ module ModuleExample1,0 def module_instance_method46,1051 def ModuleExample.module_class_methodmodule_class_method49,1131 -ruby-src/test1.ru,785 +ruby-src/test1.ru,935 class A1,0 def a(2,8 def b(5,38 @@ -4165,9 +4165,13 @@ module A9,57 attr_accessor :teetee31,382 attr_accessor :teetee=31,382 alias_method :qux,qux32,405 - alias_method :xyz,xyz33,455 - :tee ; attr_reader :subtlesubtle34,478 -A::Constant Constant38,533 + alias_method :xyz,xyz33,456 + :tee ; attr_reader :subtlesubtle34,479 + attr_reader(:foo1,foo135,523 + attr_reader(:foo1, :bar1,bar135,523 + :qux1)qux136,563 + alias_method ( :foo2,foo237,586 +A::Constant Constant42,655 tex-src/testenv.tex,52 \newcommand{\nm}\nm4,77 diff --git a/test/etags/ruby-src/test1.ru b/test/etags/ruby-src/test1.ru index 93888c1..eafaec6 100644 --- a/test/etags/ruby-src/test1.ru +++ b/test/etags/ruby-src/test1.ru @@ -29,9 +29,13 @@ module A :baz, :more attr_accessor :tee - alias_method :qux, :tee, attr_accessor :bogus + alias_method :qux, :tee, attr_accessor(:bogus) alias_method :xyz, :tee ; attr_reader :subtle + attr_reader(:foo1, :bar1, # comment + :qux1) + alias_method ( :foo2, #cmmt + :bar2) end end commit aa35257118a09ff8c90d5dc364e8dc65e2fbd6dd Author: Lars Ingebrigtsen Date: Sat Feb 6 16:11:18 2016 +1100 Update publicsuffix.txt. * etc/publicsuffix.txt: Updated from https://publicsuffix.org/list/public_suffix_list.dat. diff --git a/etc/publicsuffix.txt b/etc/publicsuffix.txt index a6f596a..ee0269c 100644 --- a/etc/publicsuffix.txt +++ b/etc/publicsuffix.txt @@ -395,7 +395,7 @@ mil.bo tv.bo // br : http://registro.br/dominio/categoria.html -// Submitted by registry 2014-08-11 +// Submitted by registry br adm.br adv.br @@ -485,7 +485,7 @@ net.bt org.bt // bv : No registrations at this time. -// Submitted by registry 2006-06-16 +// Submitted by registry bv // bw : http://en.wikipedia.org/wiki/.bw @@ -597,7 +597,7 @@ gov.cm net.cm // cn : http://en.wikipedia.org/wiki/.cn -// Submitted by registry 2008-06-11 +// Submitted by registry cn ac.cn com.cn @@ -646,7 +646,7 @@ mo.cn tw.cn // co : http://en.wikipedia.org/wiki/.co -// Submitted by registry 2008-06-11 +// Submitted by registry co arts.co com.co @@ -766,7 +766,7 @@ pol.dz art.dz // ec : http://www.nic.ec/reg/paso1.asp -// Submitted by registry 2008-07-04 +// Submitted by registry ec com.ec info.ec @@ -887,7 +887,7 @@ veterinaire.fr ga // gb : This registry is effectively dormant -// Submitted by registry 2008-06-12 +// Submitted by registry gb // gd : http://en.wikipedia.org/wiki/.gd @@ -946,7 +946,7 @@ org.gl gm // gn : http://psg.com/dns/gn/gn.txt -// Submitted by registry 2008-06-17 +// Submitted by registry gn ac.gn com.gn @@ -971,7 +971,7 @@ asso.gp gq // gr : https://grweb.ics.forth.gr/english/1617-B-2005.html -// Submitted by registry 2008-06-09 +// Submitted by registry gr com.gr edu.gr @@ -1009,7 +1009,7 @@ net.gy org.gy // hk : https://www.hkdnr.hk -// Submitted by registry 2008-06-11 +// Submitted by registry hk com.hk edu.hk @@ -1137,7 +1137,7 @@ net.il org.il // im : https://www.nic.im/ -// Submitted by registry 2013-11-15 +// Submitted by registry im ac.im co.im @@ -1618,7 +1618,7 @@ jobs // jp : http://en.wikipedia.org/wiki/.jp // http://jprs.co.jp/en/jpdomain.html -// Submitted by registry 2014-10-30 +// Submitted by registry jp // jp organizational type names ac.jp @@ -3542,7 +3542,7 @@ mil.kz com.kz // la : http://en.wikipedia.org/wiki/.la -// Submitted by registry 2008-06-10 +// Submitted by registry la int.la net.la @@ -3554,7 +3554,7 @@ com.la org.la // lb : http://en.wikipedia.org/wiki/.lb -// Submitted by registry 2008-06-17 +// Submitted by registry lb com.lb edu.lb @@ -3594,7 +3594,7 @@ hotel.lk ac.lk // lr : http://psg.com/dns/lr/lr.txt -// Submitted by registry 2008-06-17 +// Submitted by registry lr com.lr edu.lr @@ -3748,7 +3748,7 @@ net.ms org.ms // mt : https://www.nic.org.mt/go/policy -// Submitted by registry 2013-11-19 +// Submitted by registry mt com.mt edu.mt @@ -4350,7 +4350,7 @@ net.mw org.mw // mx : http://www.nic.mx/ -// Submitted by registry 2008-06-19 +// Submitted by registry mx com.mx org.mx @@ -4419,17 +4419,18 @@ info.nf other.nf store.nf -// ng : http://psg.com/dns/ng/ +// ng : http://www.nira.org.ng/index.php/join-us/register-ng-domain/189-nira-slds ng com.ng edu.ng +gov.ng +i.ng +mil.ng +mobi.ng name.ng net.ng org.ng sch.ng -gov.ng -mil.ng -mobi.ng // ni : http://www.nic.ni/ com.ni @@ -5226,7 +5227,7 @@ våler.hedmark.no *.np // nr : http://cenpac.net.nr/dns/index.html -// Confirmed by registry 2008-06-17 +// Submitted by registry nr biz.nr info.nr @@ -5240,7 +5241,7 @@ com.nr nu // nz : http://en.wikipedia.org/wiki/.nz -// Confirmed by registry 2014-05-19 +// Submitted by registry nz ac.nz co.nz @@ -5310,7 +5311,7 @@ edu.pf *.pg // ph : http://www.domains.ph/FAQ2.asp -// Submitted by registry 2008-06-13 +// Submitted by registry ph com.ph net.ph @@ -5339,7 +5340,7 @@ gos.pk info.pk // pl http://www.dns.pl/english/index.html -// updated by .PL registry on 2015-04-28 +// Submitted by registry pl com.pl net.pl @@ -5618,7 +5619,7 @@ go.pw belau.pw // py : http://www.nic.py/pautas.html#seccion_9 -// Confirmed by registry 2012-10-03 +// Submitted by registry py com.py coop.py @@ -5641,32 +5642,32 @@ sch.qa // re : http://www.afnic.re/obtenir/chartes/nommage-re/annexe-descriptifs re -com.re asso.re +com.re nom.re // ro : http://www.rotld.ro/ ro +arts.ro com.ro -org.ro -tm.ro -nt.ro -nom.ro +firm.ro info.ro +nom.ro +nt.ro +org.ro rec.ro -arts.ro -firm.ro store.ro +tm.ro www.ro -// rs : http://en.wikipedia.org/wiki/.rs +// rs : https://www.rnids.rs/en/domains/national-domains rs +ac.rs co.rs -org.rs edu.rs -ac.rs gov.rs in.rs +org.rs // ru : http://www.cctld.ru/ru/docs/aktiv_8.php // Industry domains @@ -5831,7 +5832,7 @@ edu.sa sch.sa // sb : http://www.sbnic.net.sb/ -// Submitted by registry 2008-06-08 +// Submitted by registry sb com.sb edu.sb @@ -5848,7 +5849,7 @@ org.sc edu.sc // sd : http://www.isoc.sd/sudanic.isoc.sd/billing_pricing.htm -// Submitted by registry 2008-06-17 +// Submitted by registry sd com.sd net.sd @@ -5860,7 +5861,7 @@ gov.sd info.sd // se : http://en.wikipedia.org/wiki/.se -// Submitted by registry 2014-03-18 +// Submitted by registry se a.se ac.se @@ -5923,7 +5924,7 @@ mil.sh si // sj : No registrations at this time. -// Submitted by registry 2008-06-16 +// Submitted by registry sj // sk : http://en.wikipedia.org/wiki/.sk @@ -5931,7 +5932,7 @@ sj sk // sl : http://www.nic.sl -// Submitted by registry 2008-06-12 +// Submitted by registry sl com.sl net.sl @@ -6020,7 +6021,7 @@ org.sv red.sv // sx : http://en.wikipedia.org/wiki/.sx -// Confirmed by registry 2012-05-31 +// Submitted by registry sx gov.sx @@ -6059,7 +6060,7 @@ tf tg // th : http://en.wikipedia.org/wiki/.th -// Submitted by registry 2008-06-17 +// Submitted by registry th ac.th co.th @@ -6130,7 +6131,7 @@ defense.tn turen.tn // to : http://en.wikipedia.org/wiki/.to -// Submitted by registry 2008-06-17 +// Submitted by registry to com.to gov.to @@ -6141,7 +6142,7 @@ mil.to // subTLDs: https://www.nic.tr/forms/eng/policies.pdf // and: https://www.nic.tr/forms/politikalar.pdf -// Submitted by 2014-07-19 +// Submitted by tr com.tr info.tr @@ -6215,7 +6216,7 @@ club.tw 商業.tw // tz : http://www.tznic.or.tz/index.php/domains -// Confirmed by registry 2013-01-22 +// Submitted by registry tz ac.tz co.tz @@ -6231,7 +6232,7 @@ sc.tz tv.tz // ua : https://hostmaster.ua/policy/?ua -// Submitted by registry 2012-04-27 +// Submitted by registry ua // ua 2LD com.ua @@ -6601,7 +6602,7 @@ org.uz va // vc : http://en.wikipedia.org/wiki/.vc -// Submitted by registry 2008-06-13 +// Submitted by registry vc com.vc net.vc @@ -6611,8 +6612,7 @@ mil.vc edu.vc // ve : https://registro.nic.ve/ -// Confirmed by registry 2012-10-04 -// Updated 2014-05-20 - Bug 940478 +// Submitted by registry ve arts.ve co.ve @@ -6826,7 +6826,7 @@ yt فلسطين // xn--90a3ac ("srb", Cyrillic) : RS -// http://www.rnids.rs/en/the-.срб-domain +// https://www.rnids.rs/en/domains/national-domains срб пр.срб орг.срб @@ -6905,7 +6905,7 @@ xxx // za : http://www.zadna.org.za/content/page/domain-information ac.za -agrica.za +agric.za alt.za co.za edu.za @@ -10591,11 +10591,11 @@ zuerich // (Note: these are in alphabetical order by company name) // Amazon CloudFront : https://aws.amazon.com/cloudfront/ -// Submitted by Donavan Miller 2013-03-22 +// Submitted by Donavan Miller cloudfront.net // Amazon Elastic Compute Cloud: https://aws.amazon.com/ec2/ -// Submitted by Osman Surkatty 2014-12-16 +// Submitted by Osman Surkatty ap-northeast-1.compute.amazonaws.com ap-southeast-1.compute.amazonaws.com ap-southeast-2.compute.amazonaws.com @@ -10614,15 +10614,15 @@ z-1.compute-1.amazonaws.com z-2.compute-1.amazonaws.com // Amazon Elastic Beanstalk : https://aws.amazon.com/elasticbeanstalk/ -// Submitted by Adam Stein 2013-04-02 +// Submitted by Adam Stein elasticbeanstalk.com // Amazon Elastic Load Balancing : https://aws.amazon.com/elasticloadbalancing/ -// Submitted by Scott Vidmar 2013-03-27 +// Submitted by Scott Vidmar elb.amazonaws.com // Amazon S3 : https://aws.amazon.com/s3/ -// Submitted by Eric Kinolik 2015-04-08 +// Submitted by Eric Kinolik s3.amazonaws.com s3-ap-northeast-1.amazonaws.com s3-ap-southeast-1.amazonaws.com @@ -10640,11 +10640,11 @@ s3.cn-north-1.amazonaws.com.cn s3.eu-central-1.amazonaws.com // BetaInABox -// Submitted by adrian@betainabox.com 2012-09-13 +// Submitted by Adrian betainabox.com // CentralNic : http://www.centralnic.com/names/domains -// Submitted by registry 2012-09-27 +// Submitted by registry ae.org ar.com br.com @@ -10675,38 +10675,42 @@ za.bz za.com // Africa.com Web Solutions Ltd : https://registry.africa.com -// Submitted by Gavin Brown 2014-02-04 +// Submitted by Gavin Brown africa.com // iDOT Services Limited : http://www.domain.gr.com -// Submitted by Gavin Brown 2014-02-04 +// Submitted by Gavin Brown gr.com // Radix FZC : http://domains.in.net -// Submitted by Gavin Brown 2014-02-04 +// Submitted by Gavin Brown in.net // US REGISTRY LLC : http://us.org -// Submitted by Gavin Brown 2014-02-04 +// Submitted by Gavin Brown us.org // co.com Registry, LLC : https://registry.co.com -// Submitted by Gavin Brown 2014-02-04 +// Submitted by Gavin Brown co.com // c.la : http://www.c.la/ c.la // cloudControl : https://www.cloudcontrol.com/ -// Submitted by Tobias Wilken 2013-07-23 +// Submitted by Tobias Wilken cloudcontrolled.com cloudcontrolapp.com // co.ca : http://registry.co.ca/ co.ca +// i-registry s.r.o. : http://www.i-registry.cz/ +// Submitted by Martin Semrad +co.cz + // CDN77.com : http://www.cdn77.com -// Submitted by Jan Krpes 2015-07-13 +// Submitted by Jan Krpes c.cdn77.org cdn77-ssl.net r.cdn77.net @@ -10718,19 +10722,23 @@ co.nl co.no // Commerce Guys, SAS -// Submitted by Damien Tournoud 2015-01-22 +// Submitted by Damien Tournoud *.platform.sh // Cupcake : https://cupcake.io/ -// Submitted by Jonathan Rudenberg 2013-10-08 +// Submitted by Jonathan Rudenberg cupcake.is // DreamHost : http://www.dreamhost.com/ -// Submitted by Andrew Farmer 2012-10-02 +// Submitted by Andrew Farmer dreamhosters.com +// Drobo : http://www.drobo.com/ +// Submitted by Ricardo Padilha +mydrobo.com + // DuckDNS : http://www.duckdns.org/ -// Submitted by Richard Harper 2015-05-17 +// Submitted by Richard Harper duckdns.org // DynDNS.com : http://www.dyndns.com/services/dns/dyndns/ @@ -11015,8 +11023,7 @@ worse-than.tv writesthisblog.com // EU.org https://eu.org/ -// Submitted by Pierre Beyssac 2015-04-17 - +// Submitted by Pierre Beyssac eu.org al.eu.org asso.eu.org @@ -11075,7 +11082,7 @@ uk.eu.org us.eu.org // Fastly Inc. http://www.fastly.com/ -// Submitted by Vladimir Vuksan 2013-05-31 +// Submitted by Vladimir Vuksan a.ssl.fastly.net b.ssl.fastly.net global.ssl.fastly.net @@ -11083,28 +11090,28 @@ a.prod.fastly.net global.prod.fastly.net // Firebase, Inc. -// Submitted by Chris Raynor 2014-01-21 +// Submitted by Chris Raynor firebaseapp.com // Flynn : https://flynn.io -// Submitted by Jonathan Rudenberg 2014-07-12 +// Submitted by Jonathan Rudenberg flynnhub.com // GDS : https://www.gov.uk/service-manual/operations/operating-servicegovuk-subdomains -// Submitted by David Illsley 2014-08-28 +// Submitted by David Illsley service.gov.uk // GitHub, Inc. -// Submitted by Ben Toews 2014-02-06 +// Submitted by Ben Toews github.io githubusercontent.com // GlobeHosting, Inc. -// Submitted by Zoltan Egresi 2013-07-12 +// Submitted by Zoltan Egresi ro.com // Google, Inc. -// Submitted by Eduardo Vela 2014-12-19 +// Submitted by Eduardo Vela appspot.com blogspot.ae blogspot.al @@ -11192,12 +11199,12 @@ withyoutube.com hashbang.sh // Heroku : https://www.heroku.com/ -// Submitted by Tom Maher 2013-05-02 +// Submitted by Tom Maher herokuapp.com herokussl.com // iki.fi -// Submitted by Hannu Aronsson 2009-11-05 +// Submitted by Hannu Aronsson iki.fi // info.at : http://www.info.at/ @@ -11208,45 +11215,45 @@ info.at co.pl // Microsoft : http://microsoft.com -// Submitted by Barry Dorrans 2014-01-24 +// Submitted by Barry Dorrans azurewebsites.net azure-mobile.net cloudapp.net // Mozilla Foundation : https://mozilla.org/ -// Submited by glob 2015-07-06 +// Submitted by glob bmoattachments.org // Neustar Inc. -// Submitted by Trung Tran 2015-04-23 +// Submitted by Trung Tran 4u.com // ngrok : https://ngrok.com/ -// Submitted by Alan Shreve 2015-11-10 +// Submitted by Alan Shreve ngrok.io // NFSN, Inc. : https://www.NearlyFreeSpeech.NET/ -// Submitted by Jeff Wheelhouse 2014-02-02 +// Submitted by Jeff Wheelhouse nfshost.com // NYC.mn : http://www.information.nyc.mn -// Submitted by Matthew Brown 2013-03-11 +// Submitted by Matthew Brown nyc.mn // One Fold Media : http://www.onefoldmedia.com/ -// Submitted by Eddie Jones 2014-06-10 +// Submitted by Eddie Jones nid.io // Opera Software, A.S.A. -// Submitted by Yngve Pettersen 2009-11-26 +// Submitted by Yngve Pettersen operaunite.com // OutSystems -// Submitted by Duarte Santos 2014-03-11 +// Submitted by Duarte Santos outsystemscloud.com // Pagefront : https://www.pagefronthq.com/ -// Submitted by Jason Kriss 2015-12-02 +// Submitted by Jason Kriss pagefrontapp.com // .pl domains (grandfathered) @@ -11258,45 +11265,49 @@ wroc.pl zakopane.pl // Pantheon Systems, Inc. : https://pantheon.io/ -// Submitted by Gary Dylina 2015-09-14 +// Submitted by Gary Dylina pantheon.io gotpantheon.com +// prgmr.com : https://prgmr.com/ +// Submitted by Sarah Newman +xen.prgmr.com + // priv.at : http://www.nic.priv.at/ -// Submitted by registry 2008-06-09 +// Submitted by registry priv.at // QA2 -// Submitted by Daniel Dent (https://www.danieldent.com/) 2015-07-16 +// Submitted by Daniel Dent (https://www.danieldent.com/) qa2.com // Rackmaze LLC : https://www.rackmaze.com -// Submitted by Kirill Pertsev 2015-12-02 +// Submitted by Kirill Pertsev rackmaze.com rackmaze.net // Red Hat, Inc. OpenShift : https://openshift.redhat.com/ -// Submitted by Tim Kramer 2012-10-24 +// Submitted by Tim Kramer rhcloud.com // Sandstorm Development Group, Inc. : https://sandcats.io/ -// Submitted by Asheesh Laroia 2015-07-21 +// Submitted by Asheesh Laroia sandcats.io // Service Online LLC : http://drs.ua/ -// Submitted by Serhii Bulakh 2015-07-30 +// Submitted by Serhii Bulakh biz.ua co.ua pp.ua // SinaAppEngine : http://sae.sina.com.cn/ -// Submitted by SinaAppEngine 2015-02-02 +// Submitted by SinaAppEngine sinaapp.com vipsinaapp.com 1kapp.com // Synology, Inc. : https://www.synology.com/ -// Submitted by Rony Weng 2015-12-02 +// Submitted by Rony Weng diskstation.me dscloud.biz dscloud.me @@ -11319,18 +11330,18 @@ med.pl sopot.pl // UDR Limited : http://www.udr.hk.com -// Submitted by registry 2014-11-07 +// Submitted by registry hk.com hk.org ltd.hk inc.hk // Yola : https://www.yola.com/ -// Submitted by Stefano Rivera 2014-07-09 +// Submitted by Stefano Rivera yolasite.com // ZaNiC : http://www.za.net/ -// Submitted by registry 2009-10-03 +// Submitted by registry za.net za.org commit 6816bfffceb0b5de18a2e364dd9aa47c328c34fe Author: Lars Ingebrigtsen Date: Sat Feb 6 16:02:26 2016 +1100 Ensure that Gnus dribble handling allows removing entries * lisp/gnus/gnus-start.el (gnus-dribble-enter): Ensure that each entry is on a single line. diff --git a/lisp/gnus/gnus-start.el b/lisp/gnus/gnus-start.el index 10f93d8..34a5ff6 100644 --- a/lisp/gnus/gnus-start.el +++ b/lisp/gnus/gnus-start.el @@ -862,7 +862,9 @@ If REGEXP is given, lines that match it will be deleted." (goto-char (match-beginning 0)) (delete-region (point-at-bol) end)))) (goto-char (point-max)) - (insert string "\n") + ;; Make sure that each dribble entry is a single line, so that + ;; the "remove" code above works. + (insert (replace-regexp-in-string "\n" "\\\\n" string) "\n") ;; This has been commented by Josh Huber ;; It causes problems with both XEmacs and Emacs 21, and doesn't ;; seem to be of much value. (FIXME: remove this after we make sure commit 691feae283223d94dde45f080f9c934e186dae91 Author: OGAWA Hirofumi Date: Sat Feb 6 15:49:32 2016 +1100 Be consistent when using encoded strings in nnimap data * lisp/gnus/nnimap.el (nnimap-encode-gnus-group): New function (nnimap-request-list): Use it. (nnimap-request-newgroups): Ditto. Copyright-paperwork-exempt: yes diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el index 05251ed..c285bef 100644 --- a/lisp/gnus/nnimap.el +++ b/lisp/gnus/nnimap.el @@ -113,6 +113,12 @@ some servers.") (defvoo nnimap-current-infos nil) +(defun nnimap-decode-gnus-group (group) + (decode-coding-string group 'utf-8)) + +(defun nnimap-encode-gnus-group (group) + (encode-coding-string group 'utf-8)) + (defvoo nnimap-fetch-partial-articles nil "If non-nil, Gnus will fetch partial articles. If t, Gnus will fetch only the first part. If a string, it @@ -794,9 +800,6 @@ textual parts.") (incf num))) (nreverse parts))) -(defun nnimap-decode-gnus-group (group) - (decode-coding-string group 'utf-8)) - (deffoo nnimap-request-group (group &optional server dont-check info) (setq group (nnimap-decode-gnus-group group)) (let ((result (nnimap-change-group @@ -825,7 +828,7 @@ textual parts.") (- (cdr active) (car active)) (car active) (cdr active) - group)) + (nnimap-encode-gnus-group group))) t)))) (deffoo nnimap-request-group-scan (group &optional server info) @@ -860,7 +863,8 @@ textual parts.") (erase-buffer) (insert (format - "211 %d %d %d %S\n" (1+ (- high low)) low high group)) + "211 %d %d %d %S\n" (1+ (- high low)) low high + (nnimap-encode-gnus-group group))) t)))) (deffoo nnimap-request-create-group (group &optional server _args) @@ -1323,7 +1327,7 @@ If LIMIT, first try to limit the search to the N last articles." (let* ((sequence (car response)) (response (cadr response)) (group (cadr (assoc sequence sequences))) - (egroup (encode-coding-string group 'utf-8))) + (egroup (nnimap-encode-gnus-group group))) (when (and group (equal (caar response) "OK")) (let ((uidnext (nnimap-find-parameter "UIDNEXT" response)) @@ -1354,7 +1358,7 @@ If LIMIT, first try to limit the search to the N last articles." (nnimap-get-groups))) (unless (assoc group nnimap-current-infos) ;; Insert dummy numbers here -- they don't matter. - (insert (format "%S 0 1 y\n" (encode-coding-string group 'utf-8))))) + (insert (format "%S 0 1 y\n" (nnimap-encode-gnus-group group))))) t))) (deffoo nnimap-retrieve-group-data-early (server infos) @@ -1453,8 +1457,9 @@ If LIMIT, first try to limit the search to the N last articles." (active (gnus-active group))) (when active (insert (format "%S %d %d y\n" - (decode-coding-string - (gnus-group-real-name group) 'utf-8) + (nnimap-encode-gnus-group + (nnimap-decode-gnus-group + (gnus-group-real-name group))) (cdr active) (car active)))))))))))) @@ -1672,7 +1677,8 @@ If LIMIT, first try to limit the search to the N last articles." (nreverse result)))) (defun nnimap-store-info (info active) - (let* ((group (gnus-group-real-name (gnus-info-group info))) + (let* ((group (nnimap-decode-gnus-group + (gnus-group-real-name (gnus-info-group info)))) (entry (assoc group nnimap-current-infos))) (if entry (setcdr entry (list info active)) commit 3ed423bc352b423960c643f297ec0f0fa3b7d2e1 Author: OGAWA Hirofumi Date: Sat Feb 6 15:41:05 2016 +1100 Display the decoded Gnus group name * lisp/gnus/gnus-sum.el (gnus-summary-read-group-1): Use the decoded group name in the message. Copyright-paperwork-exempt: yes diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el index 3dbcc21..5972f29 100644 --- a/lisp/gnus/gnus-sum.el +++ b/lisp/gnus/gnus-sum.el @@ -4004,7 +4004,8 @@ If SELECT-ARTICLES, only select those articles from GROUP." (gnus-group-next-unread-group 1)) (gnus-handle-ephemeral-exit quit-config))) (if (null (gnus-list-of-unread-articles group)) - (gnus-message 3 "Group %s contains no messages" group) + (gnus-message 3 "Group %s contains no messages" + (gnus-group-decoded-name group)) (gnus-message 3 "Can't select group")) nil) ;; The user did a `C-g' while prompting for number of articles, commit 5428b5b24c18ea14916a38c9462df79936dea62b Author: Lars Ingebrigtsen Date: Sat Feb 6 14:13:57 2016 +1100 Use completion-ignore-case instead of defining command * lisp/erc/erc.el (erc-mode): Set completion-ignore-case so that we get case-insensitive completion. (erc-completion-at-point): Remove. diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el index 295c2c0..1a126a8 100644 --- a/lisp/erc/erc.el +++ b/lisp/erc/erc.el @@ -1141,7 +1141,7 @@ which the local user typed." (define-key map "\C-c\C-u" 'erc-kill-input) (define-key map "\C-c\C-x" 'erc-quit-server) (define-key map "\M-\t" 'ispell-complete-word) - (define-key map "\t" 'erc-completion-at-point) + (define-key map "\t" 'completion-at-point) ;; Suppress `font-lock-fontify-block' key binding since it ;; destroys face properties. @@ -1463,6 +1463,7 @@ Defaults to the server buffer." (concat "\C-l\\|\\(^" (regexp-quote (erc-prompt)) "\\)")) (set (make-local-variable 'paragraph-start) (concat "\\(" (regexp-quote (erc-prompt)) "\\)")) + (setq-local completion-ignore-case t) (add-hook 'completion-at-point-functions 'erc-complete-word-at-point nil t)) ;; activation @@ -3991,13 +3992,6 @@ Prompt for one if called interactively." (format "MODE %s +k %s" tgt key) (format "MODE %s -k" tgt))))) -(defun erc-completion-at-point () - "Perform completion on the text around point case-insensitively. -See `completion-at-point'." - (interactive) - (let ((completion-ignore-case t)) - (completion-at-point))) - (defun erc-quit-server (reason) "Disconnect from current server after prompting for REASON. `erc-quit-reason' works with this just like with `erc-cmd-QUIT'." commit 1fbcc8ad08cf94653f0e28b1e83c45f21c0f3ece Merge: c1d32a6 1eaf68f Author: Eli Zaretskii Date: Fri Feb 5 23:56:14 2016 +0200 Merge branch 'emacs-25' of git.savannah.gnu.org:/srv/git/emacs into emacs-25 commit 1eaf68f3689c49ee1d191ad3154563a365f7cf05 Author: Michael Albinus Date: Fri Feb 5 22:55:28 2016 +0100 * test/automated/file-notify-tests.el (file-notify-test06-many-events): Reduce the number of iterations to 250 in case of w32notify. diff --git a/test/automated/file-notify-tests.el b/test/automated/file-notify-tests.el index de64f50..629d85b 100644 --- a/test/automated/file-notify-tests.el +++ b/test/automated/file-notify-tests.el @@ -596,7 +596,7 @@ longer than timeout seconds for the events to be delivered." (should (string-match "another text" (buffer-string))) ;; Stop file notification. Autorevert shall still work via polling. - ;; It doesn't work for `w32notify'. + ;; It doesn't work for w32notify. (unless (string-equal (file-notify--test-library) "w32notify") (file-notify-rm-watch auto-revert-notify-watch-descriptor) (file-notify--wait-for-events @@ -797,7 +797,10 @@ longer than timeout seconds for the events to be delivered." file-notify--test-tmpfile '(change) 'file-notify--test-event-handler))) (unwind-protect - (let ((n 1000) + ;; In case of w32notify, the upper limit of events to handle + ;; seems to be 260. Reason unknown. + (let ((n (if (string-equal (file-notify--test-library) "w32notify") + 250 1000)) source-file-list target-file-list (default-directory file-notify--test-tmpfile)) (dotimes (i n) commit c1d32a65372c72d7de4808d620eefd3214a8e92a Author: Eli Zaretskii Date: Fri Feb 5 23:54:21 2016 +0200 Fix problems caused by new implementation of sub-word mode * lisp/subr.el (forward-word-strictly, backward-word-strictly): New functions. (word-move-empty-char-table): New variable. * etc/NEWS: Mention 'forward-word-strictly' and 'backward-word-strictly'. * doc/lispref/positions.texi (Word Motion): Document 'find-word-boundary-function-table', 'forward-word-strictly', and 'backward-word-strictly'. (Bug#22560) * src/syntax.c (syms_of_syntax) : Doc fix. * lisp/wdired.el (wdired-xcase-word): * lisp/textmodes/texnfo-upd.el (texinfo-copy-node-name) (texinfo-copy-section-title, texinfo-start-menu-description) (texinfo-copy-menu-title, texinfo-specific-section-type) (texinfo-insert-node-lines, texinfo-copy-next-section-title): * lisp/textmodes/texinfo.el (texinfo-clone-environment) (texinfo-insert-@end): * lisp/textmodes/texinfmt.el (texinfo-format-scan) (texinfo-anchor, texinfo-multitable-widths) (texinfo-multitable-item): * lisp/textmodes/tex-mode.el (latex-env-before-change): * lisp/textmodes/flyspell.el (texinfo-mode-flyspell-verify): * lisp/skeleton.el (skeleton-insert): * lisp/simple.el (count-words): * lisp/progmodes/vhdl-mode.el (vhdl-beginning-of-libunit) (vhdl-beginning-of-defun, vhdl-beginning-of-statement-1) (vhdl-update-sensitivity-list, vhdl-template-block) (vhdl-template-break, vhdl-template-case, vhdl-template-default) (vhdl-template-default-indent, vhdl-template-for-loop) (vhdl-template-if-then-use, vhdl-template-bare-loop) (vhdl-template-nature, vhdl-template-procedural) (vhdl-template-process, vhdl-template-selected-signal-asst) (vhdl-template-type, vhdl-template-variable) (vhdl-template-while-loop, vhdl-beginning-of-block) (vhdl-hooked-abbrev, vhdl-port-copy, vhdl-hs-forward-sexp-func): * lisp/progmodes/verilog-mode.el (verilog-backward-sexp) (verilog-forward-sexp, verilog-beg-of-statement) (verilog-set-auto-endcomments, verilog-backward-token) (verilog-do-indent): * lisp/progmodes/vera-mode.el (vera-guess-basic-syntax) (vera-indent-block-closing): * lisp/progmodes/simula.el (simula-context) (simula-backward-up-level, simula-forward-down-level) (simula-previous-statement, simula-next-statement) (simula-skip-comment-backward, simula-calculate-indent) (simula-find-if, simula-electric-keyword): * lisp/progmodes/sh-script.el (sh-smie--rc-newline-semi-p): * lisp/progmodes/ruby-mode.el (ruby-smie--redundant-do-p) (ruby-smie--forward-token, ruby-smie--backward-token) (ruby-singleton-class-p, ruby-calculate-indent) (ruby-forward-sexp, ruby-backward-sexp): * lisp/progmodes/ps-mode.el (ps-run-goto-error): * lisp/progmodes/perl-mode.el (perl-syntax-propertize-function) (perl-syntax-propertize-special-constructs) (perl-backward-to-start-of-continued-exp): * lisp/progmodes/pascal.el (pascal-indent-declaration): * lisp/progmodes/octave.el (octave-function-file-p): * lisp/progmodes/mantemp.el (mantemp-insert-cxx-syntax): * lisp/progmodes/js.el (js--forward-function-decl): * lisp/progmodes/idlwave.el (idlwave-show-begin-check) (idlwave-beginning-of-block, idlwave-end-of-block) (idlwave-block-jump-out, idlwave-determine-class): * lisp/progmodes/icon.el (icon-is-continuation-line) (icon-backward-to-start-of-continued-exp, end-of-icon-defun): * lisp/progmodes/hideif.el (hide-ifdef-define): * lisp/progmodes/f90.el (f90-change-keywords): * lisp/progmodes/cperl-mode.el (cperl-electric-pod) (cperl-linefeed, cperl-electric-terminator) (cperl-find-pods-heres, cperl-fix-line-spacing) (cperl-invert-if-unless): * lisp/progmodes/cc-engine.el (c-forward-<>-arglist-recur): * lisp/progmodes/cc-align.el (c-lineup-java-inher): * lisp/progmodes/ada-mode.el (ada-compile-goto-error) (ada-adjust-case-skeleton, ada-create-case-exception) (ada-create-case-exception-substring) (ada-case-read-exceptions-from-file, ada-after-keyword-p) (ada-scan-paramlist, ada-get-current-indent, ada-get-indent-end) (ada-get-indent-if, ada-get-indent-block-start) (ada-get-indent-loop, ada-get-indent-type) (ada-search-prev-end-stmt, ada-check-defun-name) (ada-goto-decl-start, ada-goto-matching-start) (ada-goto-matching-end, ada-looking-at-semi-or) (ada-looking-at-semi-private, ada-in-paramlist-p) (ada-search-ignore-complex-boolean, ada-move-to-start) (ada-move-to-end, ada-which-function, ada-gen-treat-proc): * lisp/net/quickurl.el (quickurl-grab-url): * lisp/mail/sendmail.el (mail-do-fcc): * lisp/mail/rmail.el (rmail-resend): * lisp/mail/mailabbrev.el (mail-abbrev-complete-alias): * lisp/mail/mail-extr.el (mail-extract-address-components): * lisp/json.el (json-read-keyword): * lisp/files.el (insert-directory): * lisp/emacs-lisp/checkdoc.el (checkdoc-this-string-valid-engine): * lisp/completion.el (symbol-under-point, symbol-before-point) (symbol-before-point-for-complete, next-cdabbrev) (add-completions-from-c-buffer): * lisp/cedet/semantic/texi.el (semantic-up-context) (semantic-beginning-of-context): * lisp/cedet/semantic/bovine/el.el (semantic-get-local-variables): use 'forward-word-strictly' and 'backward-word-strictly' instead of 'forward-word' and 'backward-word'. diff --git a/doc/lispref/positions.texi b/doc/lispref/positions.texi index b88e76e..1d748b8 100644 --- a/doc/lispref/positions.texi +++ b/doc/lispref/positions.texi @@ -191,18 +191,25 @@ in the opposite direction. @node Word Motion @subsection Motion by Words - These functions for parsing words use the syntax table to decide -whether a given character is part of a word. @xref{Syntax Tables}. + The functions for parsing words described below use the syntax table +to decide whether a given character is part of a word. @xref{Syntax +Tables}. @deffn Command forward-word &optional count This function moves point forward @var{count} words (or backward if @var{count} is negative). If @var{count} is omitted or @code{nil}, it -defaults to 1. +defaults to 1. In an interactive call, @var{count} is specified by +the numeric prefix argument. ``Moving one word'' means moving until point crosses a -word-constituent character and then encounters a word-separator -character. However, this function cannot move point past the boundary -of the accessible portion of the buffer, or across a field boundary +word-constituent character, which indicates the beginning of a word, +and then continue moving until the word ends. By default, characters +that begin and end words, known as @dfn{word boundaries}, are defined +by the current buffer's syntax table (@pxref{Syntax Class Table}), but +modes can override that by setting up a suitable +@code{find-word-boundary-function-table}, described below. In any +case, this function cannot move point past the boundary of the +accessible portion of the buffer, or across a field boundary (@pxref{Fields}). The most common case of a field boundary is the end of the prompt in the minibuffer. @@ -214,8 +221,6 @@ the buffer boundary or field boundary. If @code{inhibit-field-text-motion} is non-@code{nil}, this function ignores field boundaries. -In an interactive call, @var{count} is specified by the numeric prefix -argument. @end deffn @deffn Command backward-word &optional count @@ -225,10 +230,10 @@ backward until encountering the front of a word, rather than forward. @defopt words-include-escapes @c Emacs 19 feature -This variable affects the behavior of @code{forward-word} and everything -that uses it. If it is non-@code{nil}, then characters in the -escape and character-quote syntax classes count as part of -words. Otherwise, they do not. +This variable affects the behavior of @code{forward-word} and +@code{backward-word}, and everything that uses them. If it is +non-@code{nil}, then characters in the escape and character-quote +syntax classes count as part of words. Otherwise, they do not. @end defopt @defvar inhibit-field-text-motion @@ -237,6 +242,37 @@ If this variable is non-@code{nil}, certain motion functions including @code{forward-paragraph} ignore field boundaries. @end defvar +@defvar find-word-boundary-function-table +This variable affects the behavior of @code{forward-word} and +@code{backward-word}, and everything that uses them. Its value is a +char-table (@pxref{Char-Tables}) of functions to search for word +boundaries. If a character has a non-@code{nil} entry in this table, +then when a word starts or ends with that character, the corresponding +function will be called with 2 arguments: @var{pos} and @var{limit}. +The function should return the position of the other word boundary. +Specifically, if @var{pos} is smaller than @var{limit}, then @var{pos} +is at the beginning of a word, and the function should return the +position after the last character of the word; otherwise, @var{pos} is +at the last character of a word, and the function should return the +position of that word's first character. +@end defvar + +@defun forward-word-strictly &optional count +This function is like @code{forward-word}, but it is not affected by +@code{find-word-boundary-function-table}. Lisp programs that should +not change behavior when word movement is modified by modes which set +that table, such as @code{subword-mode}, should use this function +instead of @code{forward-word}. +@end defun + +@defun backward-word-strictly &optional count +This function is like @code{backward-word}, but it is not affected by +@code{find-word-boundary-function-table}. Like with +@code{forward-word-strictly}, use this function instead of +@code{backward-word} when movement by words should only consider +syntax tables. +@end defun + @node Buffer End Motion @subsection Motion to an End of the Buffer @cindex move to beginning or end of buffer diff --git a/etc/NEWS b/etc/NEWS index f21f0c0..c98ef26 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1290,6 +1290,14 @@ Removed font-lock-beginning-of-syntax-function and the SYNTAX-BEGIN slot in font-lock-defaults. +++ +** The new implementation of Subword mode affects word movement everywhere. +When Subword mode is turned on, `forward-word', `backward-word', and +everything that uses them will move by sub-words, effectively +overriding the buffer's syntax table. Lisp programs that shouldn't be +affected by Subword mode should call the new functions +`forward-word-strictly' and `backward-word-strictly' instead. + ++++ ** `package-initialize' now sets `package-enable-at-startup' to nil if called during startup. Users who call this function in their init file and still expect it to be run after startup should set diff --git a/lisp/cedet/semantic/bovine/el.el b/lisp/cedet/semantic/bovine/el.el index 7824942..6f41ba3 100644 --- a/lisp/cedet/semantic/bovine/el.el +++ b/lisp/cedet/semantic/bovine/el.el @@ -700,7 +700,7 @@ of `let' or `let*', grab those variable names." ;; Snart args... (up-list -1) (forward-char 1) - (forward-word 1) + (forward-word-strictly 1) (skip-chars-forward "* \t\n") (let ((arglst (read (buffer-substring-no-properties (point) diff --git a/lisp/cedet/semantic/texi.el b/lisp/cedet/semantic/texi.el index 8b4f6f4..cbb7705 100644 --- a/lisp/cedet/semantic/texi.el +++ b/lisp/cedet/semantic/texi.el @@ -258,7 +258,7 @@ can handle the @menu environment.") (when (not parenthetical) ;; We are in parentheses. Are they the types of parens ;; belonging to a texinfo construct? - (forward-word -1) + (forward-word-strictly -1) (when (looking-at "@\\w+{") (setq done (point)))))) ;; If we are not in a parenthetical node, then find a block instead. @@ -287,7 +287,7 @@ can handle the @menu environment.") ;; If we can't go up, we can't do this either. t ;; We moved, so now we need to skip into whatever this thing is. - (forward-word 1) ;; skip the command + (forward-word-strictly 1) ;; skip the command (if (looking-at "\\s-*{") ;; In a short command. Go in. (down-list 1) diff --git a/lisp/completion.el b/lisp/completion.el index 0659421..093740d 100644 --- a/lisp/completion.el +++ b/lisp/completion.el @@ -542,13 +542,13 @@ But only if it is longer than `completion-min-length'." ;; Remove chars to ignore at the start. (cond ((= (char-syntax (char-after cmpl-symbol-start)) ?w) (goto-char cmpl-symbol-start) - (forward-word 1) + (forward-word-strictly 1) (setq cmpl-symbol-start (point)) (goto-char saved-point))) ;; Remove chars to ignore at the end. (cond ((= (char-syntax (char-after (1- cmpl-symbol-end))) ?w) (goto-char cmpl-symbol-end) - (forward-word -1) + (forward-word-strictly -1) (setq cmpl-symbol-end (point)) (goto-char saved-point))) ;; Return completion if the length is reasonable. @@ -584,7 +584,7 @@ Returns nil if there isn't one longer than `completion-min-length'." ;; Remove chars to ignore at the start. (cond ((= (char-syntax (char-after cmpl-symbol-start)) ?w) (goto-char cmpl-symbol-start) - (forward-word 1) + (forward-word-strictly 1) (setq cmpl-symbol-start (point)) (goto-char cmpl-symbol-end))) ;; Return value if long enough. @@ -597,12 +597,12 @@ Returns nil if there isn't one longer than `completion-min-length'." (let ((saved-point (point))) (setq cmpl-symbol-start (scan-sexps saved-point -1)) ;; take off chars. from end - (forward-word -1) + (forward-word-strictly -1) (setq cmpl-symbol-end (point)) ;; remove chars to ignore at the start (cond ((= (char-syntax (char-after cmpl-symbol-start)) ?w) (goto-char cmpl-symbol-start) - (forward-word 1) + (forward-word-strictly 1) (setq cmpl-symbol-start (point)))) ;; Restore state. (goto-char saved-point) @@ -653,7 +653,7 @@ Returns nil if there isn't one longer than `completion-min-length'." ;; Remove chars to ignore at the start. (cond ((= (char-syntax (char-after cmpl-symbol-start)) ?w) (goto-char cmpl-symbol-start) - (forward-word 1) + (forward-word-strictly 1) (setq cmpl-symbol-start (point)) (goto-char cmpl-symbol-end))) ;; Return completion if the length is reasonable. @@ -821,7 +821,7 @@ This is sensitive to `case-fold-search'." ;; symbol char to ignore at end. Are we at end ? (progn (setq saved-point-2 (point)) - (forward-word -1) + (forward-word-strictly -1) (prog1 (= (char-syntax (preceding-char)) ? ) (goto-char saved-point-2))))) @@ -1850,7 +1850,7 @@ Prefix args :: (cond ((looking-at "\\(define\\|ifdef\\)\\>") ;; skip forward over definition symbol ;; and add it to database - (and (forward-word 2) + (and (forward-word-strictly 2) (setq string (symbol-before-point)) ;;(push string foo) (add-completion-to-tail-if-new string))))) @@ -1868,7 +1868,7 @@ Prefix args :: ;; move to next separator char. (goto-char (setq next-point (scan-sexps (point) 1)))) - (forward-word -1) + (forward-word-strictly -1) ;; add to database (if (setq string (symbol-under-point)) ;; (push string foo) @@ -1876,7 +1876,7 @@ Prefix args :: ;; Local TMC hack (useful for parsing paris.h) (if (and (looking-at "_AP") ;; "ansi prototype" (progn - (forward-word -1) + (forward-word-strictly -1) (setq string (symbol-under-point)))) (add-completion-to-tail-if-new string))) diff --git a/lisp/emacs-lisp/checkdoc.el b/lisp/emacs-lisp/checkdoc.el index ecf6f82..fd8f108 100644 --- a/lisp/emacs-lisp/checkdoc.el +++ b/lisp/emacs-lisp/checkdoc.el @@ -1580,7 +1580,7 @@ mouse-[0-3]\\)\\)\\>")) (if (and sym (boundp sym) (fboundp sym) (save-excursion (goto-char mb) - (forward-word -1) + (forward-word-strictly -1) (not (looking-at "variable\\|option\\|function\\|command\\|symbol")))) (if (checkdoc-autofix-ask-replace @@ -1596,7 +1596,7 @@ mouse-[0-3]\\)\\)\\>")) nil t nil nil "variable"))) (goto-char (1- mb)) (insert disambiguate " ") - (forward-word 1)) + (forward-word-strictly 1)) (setq ret (format "Disambiguate %s by preceding w/ \ function,command,variable,option or symbol." ms1)))))) diff --git a/lisp/files.el b/lisp/files.el index 72c2752..1c4dd25 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -6520,7 +6520,7 @@ normally equivalent short `-D' option is just passed on to (setq error-lines (nreverse error-lines)) ;; Now read the numeric positions of file names. (goto-char linebeg) - (forward-word 1) + (forward-word-strictly 1) (forward-char 3) (while (< (point) end) (let ((start (insert-directory-adj-pos diff --git a/lisp/json.el b/lisp/json.el index bd1ee53..1eabe0f 100644 --- a/lisp/json.el +++ b/lisp/json.el @@ -296,14 +296,14 @@ KEYWORD is the keyword expected." (unless (char-equal char (json-peek)) (signal 'json-unknown-keyword (list (save-excursion - (backward-word 1) + (backward-word-strictly 1) (thing-at-point 'word))))) (json-advance)) keyword) (unless (looking-at "\\(\\s-\\|[],}]\\|$\\)") (signal 'json-unknown-keyword (list (save-excursion - (backward-word 1) + (backward-word-strictly 1) (thing-at-point 'word))))) (cond ((string-equal keyword "true") t) ((string-equal keyword "false") json-false) diff --git a/lisp/mail/mail-extr.el b/lisp/mail/mail-extr.el index 6384967..44a082c 100644 --- a/lisp/mail/mail-extr.el +++ b/lisp/mail/mail-extr.el @@ -880,7 +880,7 @@ consing a string.)" (and (not (eobp)) (eq ?w (char-syntax (char-after))) (progn - (forward-word 1) + (forward-word-strictly 1) (and (not (eobp)) (> (char-after) ?\177) (not (eq (char-after) ? ))))))))) @@ -1312,7 +1312,7 @@ consing a string.)" ) (t (setq atom-beg (point)) - (forward-word 1) + (forward-word-strictly 1) (setq atom-end (point)) (goto-char atom-beg) (save-restriction diff --git a/lisp/mail/mailabbrev.el b/lisp/mail/mailabbrev.el index ed6a743..a047f5f 100644 --- a/lisp/mail/mailabbrev.el +++ b/lisp/mail/mailabbrev.el @@ -574,7 +574,7 @@ of a mail alias. The value is set up, buffer-local, when first needed.") (let ((end (point)) (beg (with-syntax-table mail-abbrev-syntax-table (save-excursion - (backward-word 1) + (backward-word-strictly 1) (point))))) (completion-in-region beg end mail-abbrevs))) diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el index 390ca3f..2e441ec 100644 --- a/lisp/mail/rmail.el +++ b/lisp/mail/rmail.el @@ -4081,7 +4081,7 @@ typically for purposes of moderating a list." (set-syntax-table mail-abbrev-syntax-table) (goto-char before) (while (and (< (point) end) - (progn (forward-word 1) + (progn (forward-word-strictly 1) (<= (point) end))) (expand-abbrev)) (set-syntax-table old-syntax-table)) diff --git a/lisp/mail/sendmail.el b/lisp/mail/sendmail.el index 5ab5bd9..58f708a 100644 --- a/lisp/mail/sendmail.el +++ b/lisp/mail/sendmail.el @@ -1404,7 +1404,7 @@ just append to the file, in Babyl format if necessary." (insert "\nFrom " (user-login-name) " " (current-time-string time) "\n") ;; Insert the time zone before the year. (forward-char -1) - (forward-word -1) + (forward-word-strictly -1) (require 'mail-utils) (insert (mail-rfc822-time-zone time) " ") (goto-char (point-max)) diff --git a/lisp/net/quickurl.el b/lisp/net/quickurl.el index 7a46485..bb9ce31 100644 --- a/lisp/net/quickurl.el +++ b/lisp/net/quickurl.el @@ -347,7 +347,7 @@ It is assumed that the URL is either \"unguarded\" or is wrapped inside an ;; need to do a little more work to get to where we want to be. (when (thing-at-point-looking-at thing-at-point-markedup-url-regexp) (search-backward "") - (forward-word 1) + (forward-word-strictly 1) (ada-goto-next-non-ws)) ;; read type of parameter @@ -2472,7 +2476,7 @@ and the offset." (forward-comment -1000) (if (= (char-before) ?\)) (forward-sexp -1) - (forward-word -1)) + (forward-word-strictly -1)) ;; If there is a parameter list, and we have a function declaration ;; or a access to subprogram declaration @@ -2480,26 +2484,26 @@ and the offset." (if (and (= (following-char) ?\() (save-excursion (or (progn - (backward-word 1) + (backward-word-strictly 1) (looking-at "\\(function\\|procedure\\)\\>")) (progn - (backward-word 1) + (backward-word-strictly 1) (setq num-back 2) (looking-at "\\(function\\|procedure\\)\\>"))))) ;; The indentation depends of the value of ada-indent-return (if (<= (eval var) 0) (list (point) (list '- var)) - (list (progn (backward-word num-back) (point)) + (list (progn (backward-word-strictly num-back) (point)) var)) ;; Else there is no parameter list, but we have a function ;; Only do something special if the user want to indent ;; relative to the "function" keyword (if (and (> (eval var) 0) - (save-excursion (forward-word -1) + (save-excursion (forward-word-strictly -1) (looking-at "function\\>"))) - (list (progn (forward-word -1) (point)) var) + (list (progn (forward-word-strictly -1) (point)) var) ;; Else... (ada-indent-on-previous-lines nil orgpoint orgpoint))))))) @@ -2600,7 +2604,7 @@ and the offset." ;; avoid "with procedure"... in generic parts (save-excursion - (forward-word -1) + (forward-word-strictly -1) (setq found (not (looking-at "with")))))) (cond @@ -2759,7 +2763,7 @@ ORGPOINT is the limit position used in the calculation." ;; yes, look what's following 'end' (progn - (forward-word 1) + (forward-word-strictly 1) (ada-goto-next-non-ws) (cond ;; @@ -2776,7 +2780,7 @@ ORGPOINT is the limit position used in the calculation." (save-excursion (ada-check-matching-start (match-string 0)) ;; we are now looking at the matching "record" statement - (forward-word 1) + (forward-word-strictly 1) (ada-goto-stmt-start) ;; now on the matching type declaration, or use clause (unless (looking-at "\\(for\\|type\\)\\>") @@ -2891,7 +2895,7 @@ ORGPOINT is the limit position used in the calculation." (looking-at "\\")) (setq cur-indent (save-excursion (back-to-indentation) (point)))) ;; skip 'then' - (forward-word 1) + (forward-word-strictly 1) (list cur-indent 'ada-indent)) (list cur-indent 'ada-broken-indent)))) @@ -2902,7 +2906,7 @@ ORGPOINT is the limit position used in the calculation." (let ((pos nil)) (cond ((save-excursion - (forward-word 1) + (forward-word-strictly 1) (setq pos (ada-goto-next-non-ws orgpoint))) (goto-char pos) (save-excursion @@ -3141,8 +3145,8 @@ ORGPOINT is the limit position used in the calculation." (and (goto-char (match-end 0)) (ada-goto-next-non-ws orgpoint) - (forward-word 1) - (if (= (char-after) ?') (forward-word 1) t) + (forward-word-strictly 1) + (if (= (char-after) ?') (forward-word-strictly 1) t) (ada-goto-next-non-ws orgpoint) (looking-at "\\") ;; @@ -3224,7 +3228,7 @@ ORGPOINT is the limit position used in the calculation." "end" nil orgpoint nil 'word-search-forward)) (ada-goto-next-non-ws) (looking-at "\\") - (forward-word 1) + (forward-word-strictly 1) (ada-goto-next-non-ws) (= (char-after) ?\;))) (goto-char (car match-dat)) @@ -3334,7 +3338,7 @@ is the end of the match." (save-excursion (ada-goto-previous-word) (looking-at "\\<\\(end\\|or\\|and\\)\\>[ \t]*[^;]"))) - (forward-word -1)) + (forward-word-strictly -1)) ((looking-at "is") (setq found @@ -3355,7 +3359,7 @@ is the end of the match." ((looking-at "private") (save-excursion - (backward-word 1) + (backward-word-strictly 1) (setq found (not (looking-at "is"))))) (t @@ -3459,18 +3463,18 @@ Moves point to the beginning of the declaration." (if (looking-at "\\") (progn (forward-comment -1) - (backward-word 1)) + (backward-word-strictly 1)) ;; ;; no, => 'procedure'/'function'/'task'/'protected' ;; (progn - (forward-word 2) - (backward-word 1) + (forward-word-strictly 2) + (backward-word-strictly 1) ;; ;; skip 'body' 'type' ;; (if (looking-at "\\<\\(body\\|type\\)\\>") - (forward-word 1)) + (forward-word-strictly 1)) (forward-sexp 1) (backward-sexp 1))) ;; @@ -3566,7 +3570,7 @@ otherwise throw error." ;; ((looking-at "if") (save-excursion - (forward-word -1) + (forward-word-strictly -1) (unless (looking-at "\\") (progn (setq nest-count (1- nest-count)) @@ -3636,7 +3640,7 @@ otherwise throw error." ;; ((looking-at "when") (save-excursion - (forward-word -1) + (forward-word-strictly -1) (unless (looking-at "\\") (progn (if stop-at-when @@ -3687,7 +3691,7 @@ If GOTOTHEN is non-nil, point moves to the `then' following `if'." (unless (and (looking-at "\\") (save-excursion - (forward-word -1) + (forward-word-strictly -1) (looking-at "\\"))) (progn ;; calculate nest-depth @@ -3739,7 +3743,7 @@ If GOTOTHEN is non-nil, point moves to the `then' following `if'." (number-to-string (count-lines 1 (1+ current))))))) (unless (looking-at "renames") (progn - (forward-word 1) + (forward-word-strictly 1) (ada-goto-next-non-ws) ;; ignore it if it is only a declaration with 'new' ;; We could have package Foo is new .... @@ -3755,13 +3759,13 @@ If GOTOTHEN is non-nil, point moves to the `then' following `if'." ;; found task start => check if it has a body ((looking-at "task") (save-excursion - (forward-word 1) + (forward-word-strictly 1) (ada-goto-next-non-ws) (cond ((looking-at "\\")) ((looking-at "\\") ;; In that case, do nothing if there is a "is" - (forward-word 2);; skip "type" + (forward-word-strictly 2);; skip "type" (ada-goto-next-non-ws);; skip type name ;; Do nothing if we are simply looking at a simple @@ -3781,7 +3785,7 @@ If GOTOTHEN is non-nil, point moves to the `then' following `if'." (t ;; Check if that task declaration had a block attached to ;; it (i.e do nothing if we have just "task name;") - (unless (progn (forward-word 1) + (unless (progn (forward-word-strictly 1) (looking-at "[ \t]*;")) (setq nest-count (1- nest-count)))))) (setq last-was-begin (cdr last-was-begin)) @@ -3906,7 +3910,7 @@ If NOERROR is non-nil, it only returns nil if no matching start found." ;; ;; calculate nest-depth ;; - (backward-word 1) + (backward-word-strictly 1) (cond ;; procedures and functions need to be processed recursively, in ;; case they are defined in a declare/begin block, as in: @@ -3925,7 +3929,7 @@ If NOERROR is non-nil, it only returns nil if no matching start found." ((and (looking-at "\\")) (if first - (forward-word 1) + (forward-word-strictly 1) (setq pos (point)) (ada-search-ignore-string-comment "is\\|;") @@ -3946,7 +3950,7 @@ If NOERROR is non-nil, it only returns nil if no matching start found." (skip-chars-forward "end") (ada-goto-next-non-ws) (looking-at "\\<\\(loop\\|select\\|record\\|case\\|if\\)\\>")) - (forward-word 1))) + (forward-word-strictly 1))) ;; found package start => check if it really starts a block, and is not ;; in fact a generic instantiation for instance @@ -3965,7 +3969,7 @@ If NOERROR is non-nil, it only returns nil if no matching start found." (if (not first) (setq nest-count (1+ nest-count))) (setq found (<= nest-count 0)) - (forward-word 1))) ; end of 'cond' + (forward-word-strictly 1))) ; end of 'cond' (setq first nil)) @@ -4077,7 +4081,7 @@ Assumes point to be at the end of a statement." (save-excursion (and (looking-at "\\") (progn - (forward-word 1) + (forward-word-strictly 1) (ada-goto-stmt-start) (looking-at "\\"))))) @@ -4100,7 +4104,7 @@ Return nil if the private is part of the package name, as in (progn (forward-comment -1000) (and (not (bobp)) (or (= (char-before) ?\;) - (and (forward-word -3) + (and (forward-word-strictly -3) (looking-at "\\")))))))) @@ -4120,11 +4124,11 @@ Return nil if the private is part of the package name, as in (skip-chars-backward " \t\n") (if (= (char-before) ?\") (backward-char 3) - (backward-word 1)) + (backward-word-strictly 1)) t) ;; and now over the second one - (backward-word 1) + (backward-word-strictly 1) ;; We should ignore the case when the reserved keyword is in a ;; comment (for instance, when we have: @@ -4150,7 +4154,7 @@ Return nil if the private is part of the package name, as in If BACKWARDP is non-nil, search backward; search forward otherwise." (let (result) (while (and (setq result (ada-search-ignore-string-comment regexp backwardp)) - (save-excursion (forward-word -1) + (save-excursion (forward-word-strictly -1) (looking-at "and then\\|or else")))) result)) @@ -4343,9 +4347,9 @@ of the region. Otherwise, operate only on the current line." (ada-in-string-or-comment-p) (and (progn (or (looking-at "[ \t]*\\") - (backward-word 1)) + (backward-word-strictly 1)) (or (looking-at "[ \t]*\\") - (backward-word 1)) + (backward-word-strictly 1)) (or (looking-at "[ \t]*\\") (error "Not on end ...;"))) (ada-goto-matching-start 1) @@ -4399,7 +4403,7 @@ Moves to `begin' if in a declarative part." ((save-excursion (and (ada-goto-stmt-start) (looking-at "\\" ) - (forward-word 1) + (forward-word-strictly 1) (ada-goto-next-non-ws) (looking-at "\\"))) (ada-search-ignore-string-comment "begin" nil nil nil @@ -5020,7 +5024,7 @@ Since the search can be long, the results are cached." (skip-chars-forward " \t\n") (if (looking-at "return") (progn - (forward-word 1) + (forward-word-strictly 1) (skip-chars-forward " \t\n") (skip-chars-forward "a-zA-Z0-9_'"))) @@ -5271,8 +5275,8 @@ for `ada-procedure-start-regexp'." ((or (looking-at "^[ \t]*procedure") (setq func-found (looking-at "^[ \t]*function"))) ;; treat it as a proc/func - (forward-word 2) - (forward-word -1) + (forward-word-strictly 2) + (forward-word-strictly -1) (setq procname (buffer-substring (point) (cdr match))) ; store proc name ;; goto end of procname @@ -5285,7 +5289,7 @@ for `ada-procedure-start-regexp'." ;; if function, skip over 'return' and result type. (if func-found (progn - (forward-word 1) + (forward-word-strictly 1) (skip-chars-forward " \t\n") (setq functype (buffer-substring (point) (progn @@ -5327,7 +5331,7 @@ for `ada-procedure-start-regexp'." (if (looking-at "^[ \t]*task") (progn (message "Task conversion is not yet implemented") - (forward-word 2) + (forward-word-strictly 2) (if (looking-at "[ \t]*;") (forward-line) (ada-move-to-end)) diff --git a/lisp/progmodes/cc-align.el b/lisp/progmodes/cc-align.el index d59503b..a2077be 100644 --- a/lisp/progmodes/cc-align.el +++ b/lisp/progmodes/cc-align.el @@ -449,7 +449,7 @@ class Foo class Foo Works with: inher-cont." (save-excursion (goto-char (c-langelem-pos langelem)) - (forward-word 1) + (forward-word-strictly 1) (if (looking-at "[ \t]*$") c-basic-offset (c-forward-syntactic-ws) diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index d30447f..a4a1604 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -6041,7 +6041,7 @@ comment at the start of cc-engine.el for more info." (when (or (looking-at "extends") (looking-at "super")) - (forward-word) + (forward-word-strictly) (c-forward-syntactic-ws) (let ((c-promote-possible-types t) (c-record-found-types t)) diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el index de546f7..83eded1 100644 --- a/lisp/progmodes/cperl-mode.el +++ b/lisp/progmodes/cperl-mode.el @@ -2304,7 +2304,7 @@ to nil." (memq this-command '(self-insert-command newline)))) head1 notlast name p really-delete over) (and (save-excursion - (forward-word -1) + (forward-word-strictly -1) (and (eq (preceding-char) ?=) (progn @@ -2327,7 +2327,7 @@ to nil." (progn (insert "\n\n=cut") (cperl-ensure-newlines 2) - (forward-word -2) + (forward-word-strictly -2) (if (and head1 (not (save-excursion @@ -2335,7 +2335,7 @@ to nil." (re-search-backward "\\(\\`\n?\\|\n\n\\)=head1\\>" nil t)))) ; Only one (progn - (forward-word 1) + (forward-word-strictly 1) (setq name (file-name-base) p (point)) (insert " NAME\n\n" name @@ -2343,10 +2343,10 @@ to nil." "=head1 DESCRIPTION") (cperl-ensure-newlines 4) (goto-char p) - (forward-word 2) + (forward-word-strictly 2) (end-of-line) (setq really-delete t)) - (forward-word 1)))) + (forward-word-strictly 1)))) (if over (progn (setq p (point)) @@ -2354,7 +2354,7 @@ to nil." "=back") (cperl-ensure-newlines 2) (goto-char p) - (forward-word 1) + (forward-word-strictly 1) (end-of-line) (setq really-delete t))) (if (and delete really-delete) @@ -2480,7 +2480,7 @@ If in POD, insert appropriate lines." (if (and over (progn (forward-paragraph -1) - (forward-word 1) + (forward-word-strictly 1) (setq pos (point)) (setq cut (buffer-substring (point) (point-at-eol))) (delete-char (- (point-at-eol) (point))) @@ -2531,7 +2531,7 @@ If in POD, insert appropriate lines." ;; and do no indentation for them. (and (eq last-command-event ?:) (save-excursion - (forward-word 1) + (forward-word-strictly 1) (skip-chars-forward " \t") (and (< (point) end) (progn (goto-char (- end 1)) @@ -4309,7 +4309,7 @@ the sections using `cperl-pod-head-face', `cperl-pod-face', ;; Now: tail: if the second part is non-matching without ///e (if (eq (char-syntax (following-char)) ?w) (progn - (forward-word 1) ; skip modifiers s///s + (forward-word-strictly 1) ; skip modifiers s///s (if tail (cperl-commentify tail (point) t)) (cperl-postpone-fontification e1 (point) 'face my-cperl-REx-modifiers-face))) @@ -5110,7 +5110,7 @@ Returns some position at the last line." (if (looking-at "[ \t]*}?[ \t]*\\<\\(\\els\\(e\\|if\\)\\|continue\\|unless\\|if\\|while\\|for\\(each\\)?\\|until\\)\\>\\(\t*\\|[ \t][ \t]+\\)[^ \t\n#]") (progn - (forward-word 1) + (forward-word-strictly 1) (delete-horizontal-space) (insert (make-string cperl-indent-region-fix-constructs ?\s)) (beginning-of-line))) @@ -5119,7 +5119,7 @@ Returns some position at the last line." (if (looking-at "[ \t]*\\= dir 0) (end-of-line)) ;Make sure we are in current block (if (setq found (idlwave-find-key block-reg dir t unit-limit)) (while (and found (looking-at block-limit)) - (if (>= dir 0) (forward-word 1)) + (if (>= dir 0) (forward-word-strictly 1)) (idlwave-block-jump-out dir t) (setq found (idlwave-find-key block-reg dir t unit-limit)))) (if (not nomark) (push-mark here)) (if (not found) (goto-char unit-limit) - (if (>= dir 0) (forward-word 1))))) + (if (>= dir 0) (forward-word-strictly 1))))) (defun idlwave-min-current-statement-indent (&optional end-reg) "The minimum indent in the current statement." @@ -6325,7 +6325,7 @@ Must accept two arguments: `apos' and `info'.") (is-self (and arrow (save-excursion (goto-char apos) - (forward-word -1) + (forward-word-strictly -1) (let ((case-fold-search t)) (looking-at "self\\>"))))) (force-query idlwave-force-class-query) diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index 0784948..d59e767 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el @@ -838,7 +838,7 @@ return the name of the function, or t if the name could not be determined. Otherwise, return nil." (cl-assert (looking-at "\\_")) (let ((name t)) - (forward-word) + (forward-word-strictly) (forward-comment most-positive-fixnum) (when (eq (char-after) ?*) (forward-char) diff --git a/lisp/progmodes/mantemp.el b/lisp/progmodes/mantemp.el index 913849d..ea9d400 100644 --- a/lisp/progmodes/mantemp.el +++ b/lisp/progmodes/mantemp.el @@ -157,8 +157,8 @@ the lines." "^template class [A-z :&*<>~=,0-9+!]*(" nil t nil) (progn (beginning-of-line) - (forward-word 1) - (delete-region (point) (progn (forward-word 1) (point))))))) + (forward-word-strictly 1) + (delete-region (point) (progn (forward-word-strictly 1) (point))))))) (defun mantemp-make-mantemps () "Gathering interface to the functions modifying the buffer." diff --git a/lisp/progmodes/octave.el b/lisp/progmodes/octave.el index 28619a5..f309565 100644 --- a/lisp/progmodes/octave.el +++ b/lisp/progmodes/octave.el @@ -1088,7 +1088,7 @@ The value is (START END NAME-START NAME-END) of the function." (save-excursion (goto-char (point-min)) (when (equal (funcall smie-forward-token-function) "function") - (forward-word -1) + (forward-word-strictly -1) (let* ((start (point)) (end (progn (forward-sexp 1) (point))) (name (when (progn diff --git a/lisp/progmodes/pascal.el b/lisp/progmodes/pascal.el index b0929eb..76441ea 100644 --- a/lisp/progmodes/pascal.el +++ b/lisp/progmodes/pascal.el @@ -1023,7 +1023,7 @@ indent of the current line in parameterlist." (let ((lineup (if (or (looking-at "\\\\|\\") arg start) ":" "=")) (stpos (if start start - (forward-word 2) (backward-word 1) (point))) + (forward-word-strictly 2) (backward-word 1) (point))) (edpos (set-marker (make-marker) (if end end (max (progn (pascal-declaration-end) diff --git a/lisp/progmodes/perl-mode.el b/lisp/progmodes/perl-mode.el index 241521b..7ed87e8 100644 --- a/lisp/progmodes/perl-mode.el +++ b/lisp/progmodes/perl-mode.el @@ -301,7 +301,7 @@ ;; sub tr {...} (3 (ignore (if (save-excursion (goto-char (match-beginning 0)) - (forward-word -1) + (forward-word-strictly -1) (looking-at-p "sub[ \t\n]")) ;; This is defining a function. nil @@ -404,7 +404,8 @@ (skip-syntax-backward " ") (skip-syntax-backward "w") (member (buffer-substring - (point) (progn (forward-word 1) (point))) + (point) (progn (forward-word-strictly 1) + (point))) '("tr" "s" "y")))) (close (cdr (assq char perl-quote-like-pairs))) (st (perl-quote-syntax-table char))) @@ -993,7 +994,7 @@ Returns (parse-state) if line starts inside a string." ((memq c '(?\) ?\] ?\} ?\")) (forward-sexp -1) (forward-comment (- (point))) t) ((eq ?w (char-syntax c)) - (forward-word -1) (forward-comment (- (point))) t) + (forward-word-strictly -1) (forward-comment (- (point))) t) (t (forward-char -1) (forward-comment (- (point))) t))))) ;; note: this may be slower than the c-mode version, but I can understand it. diff --git a/lisp/progmodes/ps-mode.el b/lisp/progmodes/ps-mode.el index 79c32c6..2fc0d29 100644 --- a/lisp/progmodes/ps-mode.el +++ b/lisp/progmodes/ps-mode.el @@ -1082,7 +1082,7 @@ Use line numbers if `ps-run-error-line-numbers' is not nil" (goto-char (max 1 (1- (point))))) (when (looking-at "[0-9]") (forward-char 1) - (forward-word -1) + (forward-word-strictly -1) (when (looking-at "[0-9]+") (let (i) (setq diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index e3fe315..9fbebeb 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el @@ -450,7 +450,7 @@ It is used when `ruby-encoding-magic-comment-style' is set to `custom'." (defun ruby-smie--redundant-do-p (&optional skip) (save-excursion - (if skip (backward-word 1)) + (if skip (backward-word-strictly 1)) (member (nth 2 (smie-backward-sexp ";")) '("while" "until" "for")))) (defun ruby-smie--opening-pipe-p () @@ -517,7 +517,7 @@ It is used when `ruby-encoding-magic-comment-style' is set to `custom'." (setq tok (concat "." tok))) (cond ((member tok '("unless" "if" "while" "until")) - (if (save-excursion (forward-word -1) (ruby-smie--bosp)) + (if (save-excursion (forward-word-strictly -1) (ruby-smie--bosp)) tok "iuwu-mod")) ((string-match-p "\\`|[*&]?\\'" tok) (forward-char (- 1 (length tok))) @@ -577,7 +577,7 @@ It is used when `ruby-encoding-magic-comment-style' is set to `custom'." ((equal tok "do") (cond ((not (ruby-smie--redundant-do-p)) tok) - ((> (save-excursion (forward-word 1) + ((> (save-excursion (forward-word-strictly 1) (forward-comment (point-max)) (point)) (line-end-position)) (ruby-smie--backward-token)) ;Fully redundant. @@ -891,7 +891,7 @@ and `\\' when preceded by `?'." (defun ruby-singleton-class-p (&optional pos) (save-excursion (when pos (goto-char pos)) - (forward-word -1) + (forward-word-strictly -1) (and (or (bolp) (not (eq (char-before (point)) ?_))) (looking-at ruby-singleton-class-re)))) @@ -1234,7 +1234,7 @@ delimiter." ((let ((s (ruby-parse-region (point) ruby-indent-point))) (and (nth 2 s) (> (nth 2 s) 0) (or (goto-char (cdr (nth 1 s))) t))) - (forward-word -1) + (forward-word-strictly -1) (setq indent (ruby-indent-size (current-column) (nth 2 state)))) (t @@ -1253,7 +1253,7 @@ delimiter." (if (null (cdr (nth 1 state))) (error "Invalid nesting")) (goto-char (cdr (nth 1 state))) - (forward-word -1) ; skip back a keyword + (forward-word-strictly -1) ; skip back a keyword (setq begin (point)) (cond ((looking-at "do\\>[^_]") ; iter block is a special case @@ -1346,7 +1346,7 @@ delimiter." (forward-char -1) (not (looking-at "{"))) (progn - (forward-word -1) + (forward-word-strictly -1) (not (looking-at "do\\>[^_]"))))) (t t)))) (not (eq ?, c)) @@ -1499,10 +1499,11 @@ With ARG, do it many times. Negative ARG means move backward." (not (eq (char-before (point)) ?.)) (not (eq (char-before (point)) ?:))) (ruby-end-of-block) - (forward-word 1)) + (forward-word-strictly 1)) ((looking-at "\\(\\$\\|@@?\\)?\\sw") (while (progn - (while (progn (forward-word 1) (looking-at "_"))) + (while (progn (forward-word-strictly 1) + (looking-at "_"))) (cond ((looking-at "::") (forward-char 2) t) ((> (skip-chars-forward ".") 0)) ((looking-at "\\?\\|!\\(=[~=>]\\|[^~=]\\)") @@ -1518,7 +1519,7 @@ With ARG, do it many times. Negative ARG means move backward." (skip-chars-forward "<")) (not expr)))) (setq i (1- i))) - ((error) (forward-word 1))) + ((error) (forward-word-strictly 1))) i)))) (defun ruby-backward-sexp (&optional arg) @@ -1554,7 +1555,7 @@ With ARG, do it many times. Negative ARG means move forward." ((looking-at "\\s(") nil) (t (forward-char 1) - (while (progn (forward-word -1) + (while (progn (forward-word-strictly -1) (pcase (char-before) (`?_ t) (`?. (forward-char -1) t) diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el index 7f89ab2..4fb5835 100644 --- a/lisp/progmodes/sh-script.el +++ b/lisp/progmodes/sh-script.el @@ -2192,7 +2192,7 @@ Returns the construct's token and moves point before it, if so." Point should be before the newline." (save-excursion (let ((tok (funcall smie-backward-token-function))) - (if (or (when (equal tok "not") (forward-word 1) t) + (if (or (when (equal tok "not") (forward-word-strictly 1) t) (and (zerop (length tok)) (eq (char-before) ?\)))) (not (sh-smie--rc-after-special-arg-p)) (sh-smie--newline-semi-p tok))))) diff --git a/lisp/progmodes/simula.el b/lisp/progmodes/simula.el index 0c420df..d627309 100644 --- a/lisp/progmodes/simula.el +++ b/lisp/progmodes/simula.el @@ -568,7 +568,7 @@ The relative indentation among the lines of the statement are preserved." (if (and (eq (char-syntax (preceding-char)) ?w) (eq (char-syntax (following-char)) ?w)) (save-excursion - (backward-word 1) + (backward-word-strictly 1) (if (looking-at "end\\>\\|else\\>\\|otherwise\\>\\|when\\>") (setq return-value nil))))) ((memq (preceding-char) '(?! ?t ?T)) @@ -654,12 +654,12 @@ If COUNT is negative, move forward up block level instead." (1+ count))))) (while (< count 0) (re-search-forward "\\\\|\\") - (backward-word 1) + (backward-word-strictly 1) (if (not (simula-context)) (setq count (if (memq (following-char) '(?e ?E)) (1+ count) (1- count)))) - (backward-word -1))) + (backward-word-strictly -1))) ;; If block level not found, jump back to origin and signal an error (error (progn (goto-char origin) @@ -689,12 +689,12 @@ If COUNT is negative, move backward down block level instead." (if (< count start-count) (signal 'error nil))) (while (> count 0) (re-search-forward "\\\\|\\") - (backward-word 1) + (backward-word-strictly 1) (if (not (simula-context)) (setq count (if (memq (following-char) '(?b ?B)) (1- count) (1+ count)))) - (backward-word -1) + (backward-word-strictly -1) ;; deeper level has to be found within starting block (if (> count start-count) (signal 'error nil)))) ;; If block level not found, jump back to origin and signal an error @@ -721,9 +721,9 @@ If COUNT is negative, move forward instead." (simula-skip-comment-backward) (if (memq (preceding-char) '(?n ?N)) (progn - (backward-word 1) + (backward-word-strictly 1) (if (not (looking-at "\\")) - (backward-word -1))) + (backward-word-strictly -1))) (if (eq (preceding-char) ?\;) (backward-char 1)) ) @@ -734,7 +734,7 @@ If COUNT is negative, move forward instead." (progn (if (eq (following-char) ?\;) (forward-char 1) - (backward-word -1)))) + (backward-word-strictly -1)))) (simula-skip-comment-forward)) (error (progn (goto-char origin) (error "Incomplete statement (too many ENDs)"))) @@ -753,13 +753,13 @@ If COUNT is negative, move backward instead." (condition-case () (progn (simula-skip-comment-forward) - (if (looking-at "\\") (forward-word 1)) + (if (looking-at "\\") (forward-word-strictly 1)) (while (and (natnump (setq count (1- count))) (setq status (simula-search-forward ";\\|\\" (point-max) 'move)))) (if (and status (/= (preceding-char) ?\;)) (progn - (backward-word 1) + (backward-word-strictly 1) (simula-skip-comment-backward)))) (error (progn (goto-char origin) (error "Incomplete statement (too few ENDs)"))) @@ -802,7 +802,7 @@ If COUNT is negative, move backward instead." ((eq context 2) ;; an END-comment must belong to an END (re-search-backward "\\") - (forward-word 1) + (forward-word-strictly 1) (throw 'simula-out nil)) ;; should be impossible to get here.. ))))) @@ -915,7 +915,7 @@ If COUNT is negative, move backward instead." ((memq (following-char) '(?E ?e)) (setq indent (cdr simula-if-indent))) (t - (forward-word 1) + (forward-word-strictly 1) (setq indent 0))) (simula-find-if)) ;; @@ -939,7 +939,7 @@ If COUNT is negative, move backward instead." (not (eq (preceding-char) ?\;)) (if (memq (preceding-char) '(?N ?n)) (save-excursion - (backward-word 1) + (backward-word-strictly 1) (not (looking-at "begin\\>"))) t)) (progn @@ -954,7 +954,7 @@ If COUNT is negative, move backward instead." ;; (not found-end) (if (eq (char-syntax (preceding-char)) ?w) (progn - (backward-word 1) + (backward-word-strictly 1) (not (looking-at "begin\\|then\\|else\\|when\\|otherwise\\|do" ))) @@ -975,14 +975,14 @@ If COUNT is negative, move backward instead." ((looking-at "begin\\>") (setq indent (+ indent simula-indent-level))) ((looking-at "end\\>") - (forward-word 1) + (forward-word-strictly 1) (simula-previous-statement 1)) ((looking-at "do\\>") (setq indent (+ indent simula-substatement-offset)) (simula-find-do-match)) ((looking-at "\\(if\\|then\\|else\\)\\>") (if (memq temp '(?I ?i)) - (forward-word 1) + (forward-word-strictly 1) (setq indent (+ indent simula-substatement-offset (if (memq temp '(?T ?t)) @@ -1030,7 +1030,7 @@ If COUNT is negative, move backward instead." (and (not (bobp)) (if (eq (char-syntax (preceding-char)) ?w) (save-excursion - (backward-word 1) + (backward-word-strictly 1) (not (looking-at "begin\\|then\\|else\\|when\\|otherwise\\|do"))) (not (memq (preceding-char) '(?: ?\;)))))) @@ -1067,7 +1067,7 @@ If COUNT is negative, move backward instead." (simula-skip-comment-backward) (if (and (eq (char-syntax (preceding-char)) ?w) (progn - (backward-word 1) + (backward-word-strictly 1) (looking-at "else\\>"))) () (throw 'simula-out t))) @@ -1189,7 +1189,7 @@ If COUNT is negative, move backward instead." (if where (if (and (eq where 2) (eq (char-syntax (preceding-char)) ?w)) (save-excursion - (backward-word 1) + (backward-word-strictly 1) (not (looking-at "end\\>")))))) (unexpand-abbrev) (cond @@ -1204,7 +1204,7 @@ If COUNT is negative, move backward instead." ;; check if the expanded word is on the beginning of the line. (if (and (eq (char-syntax (preceding-char)) ?w) (progn - (backward-word 1) + (backward-word-strictly 1) (if (looking-at "end\\>") (save-excursion (simula-backward-up-level 1) diff --git a/lisp/progmodes/vera-mode.el b/lisp/progmodes/vera-mode.el index 987022e..00b287e 100644 --- a/lisp/progmodes/vera-mode.el +++ b/lisp/progmodes/vera-mode.el @@ -1109,7 +1109,7 @@ try to increase performance by using this macro." ((and (save-excursion (vera-backward-syntactic-ws nil t) ;; previous line ends with a block opening? - (or (/= (skip-chars-backward "{") 0) (backward-word 1)) + (or (/= (skip-chars-backward "{") 0) (backward-word-strictly 1)) (when (looking-at vera-beg-block-re) ;; go to beginning of substatement (vera-beginning-of-substatement) @@ -1162,7 +1162,7 @@ try to increase performance by using this macro." ;; is this line preceded by a substatement opening statement? ((save-excursion (vera-backward-syntactic-ws nil t) (when (= (preceding-char) ?\)) (backward-sexp)) - (backward-word 1) + (backward-word-strictly 1) (setq placeholder (point)) (looking-at vera-beg-substatement-re)) (goto-char placeholder) @@ -1225,7 +1225,7 @@ Calls `indent-region' for whole buffer." "If previous word is a block closing or `else', indent line again." (when (= (char-syntax (preceding-char)) ?w) (save-excursion - (backward-word 1) + (backward-word-strictly 1) (when (and (not (vera-in-literal)) (looking-at (concat vera-end-block-re "\\|\\"))) (indent-according-to-mode))))) diff --git a/lisp/progmodes/verilog-mode.el b/lisp/progmodes/verilog-mode.el index 7bd43a3..8e01330 100644 --- a/lisp/progmodes/verilog-mode.el +++ b/lisp/progmodes/verilog-mode.el @@ -3454,7 +3454,7 @@ Use filename, if current buffer being edited shorten to just buffer name." (found nil) (st (point))) (if (not (looking-at "\\<")) - (forward-word -1)) + (forward-word-strictly -1)) (cond ((verilog-skip-backward-comment-or-string)) ((looking-at "\\") @@ -3506,7 +3506,7 @@ Use filename, if current buffer being edited shorten to just buffer name." (st (point)) (nest 'yes)) (if (not (looking-at "\\<")) - (forward-word -1)) + (forward-word-strictly -1)) (cond ((verilog-skip-forward-comment-or-string) (verilog-forward-syntactic-ws)) @@ -3529,11 +3529,11 @@ Use filename, if current buffer being edited shorten to just buffer name." (and (looking-at "fork") (progn (setq here (point)) ; sometimes a fork is just a fork - (forward-word -1) + (forward-word-strictly -1) (looking-at verilog-disable-fork-re)))) (progn ; it is a disable fork; ignore it (goto-char (match-end 0)) - (forward-word 1) + (forward-word-strictly 1) (setq reg nil)) (progn ; it is a nice simple fork (goto-char here) ; return from looking for "disable fork" @@ -3583,7 +3583,7 @@ Use filename, if current buffer being edited shorten to just buffer name." ;; Search forward for matching endclocking (setq reg "\\(\\\\)\\|\\(\\\\)" ))) (if (and reg - (forward-word 1)) + (forward-word-strictly 1)) (catch 'skip (if (eq nest 'yes) (let ((depth 1) @@ -3602,7 +3602,7 @@ Use filename, if current buffer being edited shorten to just buffer name." (looking-at verilog-disable-fork-re) (and (looking-at "fork") (progn - (forward-word -1) + (forward-word-strictly -1) (looking-at verilog-disable-fork-re)))) (progn ; it is a disable fork; another false alarm (goto-char (match-end 0))) @@ -4276,7 +4276,7 @@ Uses `verilog-scan' cache." ;; stop if we see a named coverpoint (looking-at "\\w+\\W*:\\W*\\(coverpoint\\|cross\\|constraint\\)") ;; keep going if we are in the middle of a word - (not (or (looking-at "\\<") (forward-word -1))) + (not (or (looking-at "\\<") (forward-word-strictly -1))) ;; stop if we see an assertion (perhaps labeled) (and (looking-at "\\(\\w+\\W*:\\W*\\)?\\(\\<\\(assert\\|assume\\|cover\\)\\>\\s-+\\\\)\\|\\(\\\\)") @@ -4825,7 +4825,7 @@ primitive or interface named NAME." ((looking-at "\\") ;; HERE - (forward-word 1) + (forward-word-strictly 1) (verilog-forward-syntactic-ws) (setq err nil) (setq str (verilog-get-expr)) @@ -5940,7 +5940,7 @@ Set point to where line starts." (verilog-backward-up-list 1) (verilog-backward-syntactic-ws) (let ((back (point))) - (forward-word -1) + (forward-word-strictly -1) (cond ;;XX ((looking-at "\\<\\(always\\(_latch\\|_ff\\|_comb\\)?\\|case\\(\\|[xz]\\)\\|for\\(\\|each\\|ever\\)\\|i\\(f\\|nitial\\)\\|repeat\\|while\\)\\>") @@ -5981,11 +5981,11 @@ Set point to where line starts." (;-- any of begin|initial|while are complete statements; 'begin : foo' is also complete t - (forward-word -1) + (forward-word-strictly -1) (while (or (= (preceding-char) ?\_) (= (preceding-char) ?\@) (= (preceding-char) ?\.)) - (forward-word -1)) + (forward-word-strictly -1)) (cond ((looking-at "\\") t) @@ -6499,7 +6499,7 @@ Only look at a few lines to determine indent level." (= (following-char) ?\`)) (progn (forward-char 1) - (forward-word 1) + (forward-word-strictly 1) (skip-chars-forward " \t"))) ((= (following-char) ?\[) (progn diff --git a/lisp/progmodes/vhdl-mode.el b/lisp/progmodes/vhdl-mode.el index b176e64..5c78aaa 100644 --- a/lisp/progmodes/vhdl-mode.el +++ b/lisp/progmodes/vhdl-mode.el @@ -6577,7 +6577,7 @@ returned point is at the first character of the \"libunit\" keyword." ;; keyword, allow for the keyword and an extra character, ;; as this will be used when looking forward for the ;; "begin" keyword. - (save-excursion (forward-word 1) (1+ (point)))) + (save-excursion (forward-word-strictly 1) (1+ (point)))) foundp literal placeholder) ;; Find the "libunit" keyword. (while (and (not foundp) @@ -6628,7 +6628,7 @@ stops due to beginning or end of buffer." ;; keyword, allow for the keyword and an extra character, ;; as this will be used when looking forward for the ;; "begin" keyword. - (save-excursion (forward-word 1) (1+ (point)))) + (save-excursion (forward-word-strictly 1) (1+ (point)))) begin-string literal) (while (and (not foundp) (re-search-backward vhdl-defun-re nil 'move)) @@ -6774,7 +6774,7 @@ statement if already at the beginning of one." ;; start point was not inside leader area ;; set stop point at word after leader (setq pos (point)))) - (forward-word 1) + (forward-word-strictly 1) (vhdl-forward-syntactic-ws here) (setq pos (point))) (goto-char pos) @@ -8452,7 +8452,7 @@ buffer." (setq end (vhdl-re-search-forward "\\" proc-end t)) (when (vhdl-re-search-backward "\\('event\\|\\<\\(falling\\|rising\\)_edge\\)\\>" beg t) (goto-char end) - (backward-word 1) + (backward-word-strictly 1) (vhdl-forward-sexp) (push (cons end (point)) seq-region-list) (beginning-of-line))) @@ -8924,7 +8924,7 @@ is omitted or nil." (vhdl-insert-keyword ": BLOCK ") (goto-char start) (when (setq label (vhdl-template-field "label" nil t start (+ (point) 8))) - (forward-word 1) + (forward-word-strictly 1) (forward-char 1) (insert "(") (if (vhdl-template-field "[guard expression]" nil t) @@ -8960,7 +8960,7 @@ is omitted or nil." (if (vhdl-template-field "[quantity name]" " USE " t) (progn (vhdl-template-field "quantity name" " => ") t) (delete-region (point) - (progn (forward-word -1) (point))) + (progn (forward-word-strictly -1) (point))) nil)) (vhdl-template-field "[quantity name]" " => " t)) (vhdl-template-field "expression") @@ -8993,7 +8993,7 @@ is omitted or nil." (goto-char start) (setq label (vhdl-template-field "[label]" nil t)) (unless label (delete-char 2)) - (forward-word 1) + (forward-word-strictly 1) (forward-char 1)) (when (vhdl-template-field "expression" nil t start (point)) (vhdl-insert-keyword (concat " " (if (eq kind 'is) "IS" "USE") "\n\n")) @@ -9275,7 +9275,7 @@ a configuration declaration if not within a design unit." (interactive) (insert " ") (unexpand-abbrev) - (backward-word 1) + (backward-word-strictly 1) (vhdl-case-word 1) (forward-char 1)) @@ -9284,7 +9284,7 @@ a configuration declaration if not within a design unit." (interactive) (insert " ") (unexpand-abbrev) - (backward-word 1) + (backward-word-strictly 1) (vhdl-case-word 1) (forward-char 1) (indent-according-to-mode)) @@ -9445,7 +9445,7 @@ otherwise." (goto-char start) (setq label (vhdl-template-field "[label]" nil t)) (unless label (delete-char 2)) - (forward-word 1) + (forward-word-strictly 1) (forward-char 1)) (when (setq index (vhdl-template-field "loop variable" nil t start (point))) @@ -9586,7 +9586,7 @@ otherwise." (goto-char start) (setq label (vhdl-template-field "[label]" nil t)) (unless label (delete-char 2)) - (forward-word 1) + (forward-word-strictly 1) (forward-char 1)) (when vhdl-conditions-in-parenthesis (insert "(")) (when (vhdl-template-field "condition" nil t start (point)) @@ -9669,7 +9669,7 @@ otherwise." (goto-char start) (setq label (vhdl-template-field "[label]" nil t)) (unless label (delete-char 2)) - (forward-word 1) + (forward-word-strictly 1) (delete-char 1)) (insert "\n\n") (indent-to margin) @@ -9753,11 +9753,13 @@ otherwise." (cond ((equal definition "") (insert ";")) ((equal definition "ARRAY") - (delete-region (point) (progn (forward-word -1) (point))) + (delete-region (point) (progn (forward-word-strictly -1) + (point))) (vhdl-template-array 'nature t)) ((equal definition "RECORD") (setq mid-pos (point-marker)) - (delete-region (point) (progn (forward-word -1) (point))) + (delete-region (point) (progn (forward-word-strictly -1) + (point))) (vhdl-template-record 'nature name t)) (t (vhdl-insert-keyword " ACROSS ") @@ -9870,7 +9872,7 @@ otherwise." (goto-char start) (setq label (vhdl-template-field "[label]" nil t)) (unless label (delete-char 2)) - (forward-word 1) + (forward-word-strictly 1) (forward-char 1)) (unless (vhdl-standard-p '87) (vhdl-insert-keyword "IS")) (insert "\n") @@ -9927,7 +9929,7 @@ otherwise." (goto-char start) (setq label (vhdl-template-field "[label]" nil t)) (unless label (delete-char 2)) - (forward-word 1) + (forward-word-strictly 1) (forward-char 1)) (insert "(") (if (not seq) @@ -10123,7 +10125,7 @@ otherwise." (vhdl-insert-keyword "WITH ") (when (vhdl-template-field "selector expression" nil t start (+ (point) 7)) - (forward-word 1) + (forward-word-strictly 1) (delete-char 1) (insert "\n") (indent-to (+ margin vhdl-basic-offset)) @@ -10245,11 +10247,13 @@ otherwise." (delete-char -4) (insert ";")) ((equal definition "ARRAY") - (delete-region (point) (progn (forward-word -1) (point))) + (delete-region (point) (progn (forward-word-strictly -1) + (point))) (vhdl-template-array 'type t)) ((equal definition "RECORD") (setq mid-pos (point-marker)) - (delete-region (point) (progn (forward-word -1) (point))) + (delete-region (point) (progn (forward-word-strictly -1) + (point))) (vhdl-template-record 'type name t)) ((equal definition "ACCESS") (insert " ") @@ -10293,7 +10297,8 @@ otherwise." (if (or (save-excursion (progn (vhdl-beginning-of-block) (looking-at "\\s-*\\(\\w+\\s-*:\\s-*\\)?\\<\\(\\"))) - (save-excursion (backward-word 1) (looking-at "\\"))) + (save-excursion (backward-word-strictly 1) + (looking-at "\\"))) (vhdl-insert-keyword "VARIABLE ") (if (vhdl-standard-p '87) (error "ERROR: Not within sequential block") @@ -10351,7 +10356,7 @@ otherwise." (goto-char start) (setq label (vhdl-template-field "[label]" nil t)) (unless label (delete-char 2)) - (forward-word 1) + (forward-word-strictly 1) (forward-char 1)) (when vhdl-conditions-in-parenthesis (insert "(")) (when (vhdl-template-field "condition" nil t start (point)) @@ -11213,7 +11218,7 @@ else insert tab (used for word completion in VHDL minibuffer)." (save-match-data (save-excursion (goto-char (match-end 5)) - (forward-word 1) + (forward-word-strictly 1) (vhdl-forward-syntactic-ws) (when (looking-at "(") (forward-sexp)) @@ -11287,19 +11292,19 @@ else insert tab (used for word completion in VHDL minibuffer)." but not if inside a comment or quote." (if (or (vhdl-in-literal) (save-excursion - (forward-word -1) + (forward-word-strictly -1) (and (looking-at "\\") (not (looking-at "\\\\)?") (setq name (match-string-no-properties 1)) (message "Reading port of %s \"%s\"..." decl-type name) @@ -13206,7 +13211,7 @@ File statistics: \"%s\"\n\ ;; subprogram body (when (match-string 2) (re-search-forward "^\\s-*\\" nil t) - (backward-word 1) + (backward-word-strictly 1) (vhdl-forward-sexp))) ;; block (recursive) ((looking-at "^\\s-*\\w+\\s-*:\\s-*block\\>") @@ -13219,7 +13224,7 @@ File statistics: \"%s\"\n\ (re-search-forward "^\\s-*end\\s-+process\\>" nil t)) ;; configuration declaration ((looking-at "^\\s-*configuration\\>") - (forward-word 4) + (forward-word-strictly 4) (vhdl-forward-sexp)) (t (goto-char pos)))))) diff --git a/lisp/simple.el b/lisp/simple.el index 72e87a4..cfdea74 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -1170,7 +1170,7 @@ END, without printing any message." (save-restriction (narrow-to-region start end) (goto-char (point-min)) - (while (forward-word 1) + (while (forward-word-strictly 1) (setq words (1+ words))))) words)) ((use-region-p) diff --git a/lisp/skeleton.el b/lisp/skeleton.el index b9c1bb5..0e81e2d 100644 --- a/lisp/skeleton.el +++ b/lisp/skeleton.el @@ -244,7 +244,8 @@ When done with skeleton, but before going back to `_'-point call (setq skeleton-regions (if (> skeleton-regions 0) (list (copy-marker (point) t) - (save-excursion (forward-word skeleton-regions) + (save-excursion (forward-word-strictly + skeleton-regions) (point-marker))) (setq skeleton-regions (- skeleton-regions)) ;; copy skeleton-regions - 1 elements from `mark-ring' diff --git a/lisp/subr.el b/lisp/subr.el index c685f95..3113481 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -4124,6 +4124,39 @@ If SYNTAX is nil, return nil." ;; Utility motion commands +(defvar word-move-empty-char-table nil + "Used in `forward-word-strictly' and `backward-word-strictly' +to countermand the effect of `find-word-boundary-function-table'.") + +(defun forward-word-strictly (&optional arg) + "Move point forward ARG words (backward if ARG is negative). +If ARG is omitted or nil, move point forward one word. +Normally returns t. +If an edge of the buffer or a field boundary is reached, point is left there +and the function returns nil. Field boundaries are not noticed if +`inhibit-field-text-motion' is non-nil. + +This function is like `forward-word', but it is not affected +by `find-word-boundary-function-table'. It is also not interactive." + (let ((find-word-boundary-function-table + (if (char-table-p word-move-empty-char-table) + word-move-empty-char-table + (setq word-move-empty-char-table (make-char-table nil))))) + (forward-word (or arg 1)))) + +(defun backward-word-strictly (&optional arg) + "Move backward until encountering the beginning of a word. +With argument ARG, do this that many times. +If ARG is omitted or nil, move point backward one word. + +This function is like `forward-word', but it is not affected +by `find-word-boundary-function-table'. It is also not interactive." + (let ((find-word-boundary-function-table + (if (char-table-p word-move-empty-char-table) + word-move-empty-char-table + (setq word-move-empty-char-table (make-char-table nil))))) + (forward-word (- (or arg 1))))) + ;; Whitespace (defun forward-whitespace (arg) diff --git a/lisp/textmodes/flyspell.el b/lisp/textmodes/flyspell.el index 3b1a805..730b55f 100644 --- a/lisp/textmodes/flyspell.el +++ b/lisp/textmodes/flyspell.el @@ -345,7 +345,7 @@ property of the major mode name.") (defun texinfo-mode-flyspell-verify () "Function used for `flyspell-generic-check-word-predicate' in Texinfo mode." (save-excursion - (forward-word -1) + (forward-word-strictly -1) (not (looking-at "@")))) ;;*--- tex mode --------------------------------------------------------*/ diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el index 19aefc2..3ac68bd 100644 --- a/lisp/textmodes/tex-mode.el +++ b/lisp/textmodes/tex-mode.el @@ -732,7 +732,8 @@ automatically inserts its partner." (let ((arg-end (match-end 0))) (if (null type) ;\end (progn (goto-char arg-end) - (latex-forward-sexp -1) (forward-word 1)) + (latex-forward-sexp -1) + (forward-word-strictly 1)) (goto-char cmd-start) (latex-forward-sexp 1) (let (forward-sexp-function) (backward-sexp))) diff --git a/lisp/textmodes/texinfmt.el b/lisp/textmodes/texinfmt.el index 19a2123..55be7fe 100644 --- a/lisp/textmodes/texinfmt.el +++ b/lisp/textmodes/texinfmt.el @@ -891,7 +891,7 @@ commands." ;; @ is followed by a command-word; find the end of the word. (setq texinfo-command-start (1- (point))) (if (= (char-syntax (following-char)) ?w) - (forward-word 1) + (forward-word-strictly 1) (forward-char 1)) (setq texinfo-command-end (point)) ;; Detect the case of two @-commands in a row; @@ -1190,7 +1190,7 @@ Leave point after argument." (forward-paragraph) (let ((end (point))) (if (save-excursion - (backward-word 1) + (backward-word-strictly 1) (search-forward "@refill" end t)) (setq anchor-string "@anchor-yes-refill") (setq anchor-string "@anchor-no-refill"))) @@ -2003,7 +2003,7 @@ commands that are defined in texinfo.tex for printed output. (error "In @multitable, @columnfractions misspelled")) ;; Case 1: @columnfractions .25 .3 .45 ((looking-at "@columnfractions") - (forward-word 1) + (forward-word-strictly 1) (while (not (eolp)) (push (truncate (1- @@ -2118,7 +2118,7 @@ This command is executed when texinfmt sees @item inside @multitable." ;; Delete the @tab command, including the @-sign (delete-region (point) - (progn (forward-word -1) (1- (point))))) + (progn (forward-word-strictly -1) (1- (point))))) (point))) ;; Set fill-column *wider* than needed to produce inter-column space (setq fill-column (+ 1 diff --git a/lisp/textmodes/texinfo.el b/lisp/textmodes/texinfo.el index 8f43598..c22f531 100644 --- a/lisp/textmodes/texinfo.el +++ b/lisp/textmodes/texinfo.el @@ -391,7 +391,7 @@ Subexpression 1 is what goes into the corresponding `@end' statement.") (unless (get-char-property start 'text-clones) (if endp (texinfo-last-unended-begin) - (forward-word 1) + (forward-word-strictly 1) (texinfo-next-unmatched-end)) (skip-syntax-forward "^w") (when (looking-at @@ -736,7 +736,7 @@ With prefix argument or inside @code or @example, inserts a plain \"." "Insert the matching `@end' for the last Texinfo command that needs one." (ignore-errors (save-excursion - (backward-word 1) + (backward-word-strictly 1) (texinfo-last-unended-begin) (or (match-string 1) '-))) \n "@end " str \n \n) diff --git a/lisp/textmodes/texnfo-upd.el b/lisp/textmodes/texnfo-upd.el index 8f40132..b01c678 100644 --- a/lisp/textmodes/texnfo-upd.el +++ b/lisp/textmodes/texnfo-upd.el @@ -519,7 +519,7 @@ line. If there is no node name, returns an empty string." (save-excursion (buffer-substring - (progn (forward-word 1) ; skip over node command + (progn (forward-word-strictly 1) ; skip over node command (skip-chars-forward " \t") ; and over spaces (point)) (if (search-forward "," (line-end-position) t) ; bound search @@ -542,7 +542,7 @@ must have been done by `texinfo-menu-locate-entry-p'." (goto-char (match-beginning 7)) ; match section name (buffer-substring - (progn (forward-word 1) ; skip over section type + (progn (forward-word-strictly 1) ; skip over section type (skip-chars-forward " \t") ; and over spaces (point)) (progn (end-of-line) (point)))) @@ -794,7 +794,7 @@ complements the node name rather than repeats it as a title does." (setq title (buffer-substring ;; skip over section type - (progn (forward-word 1) + (progn (forward-word-strictly 1) ;; and over spaces (skip-chars-forward " \t") (point)) @@ -1104,7 +1104,7 @@ point." t) (progn (beginning-of-line) - (forward-word 1) ; skip over section type + (forward-word-strictly 1) ; skip over section type (skip-chars-forward " \t") ; and over spaces (buffer-substring (point) @@ -1167,7 +1167,7 @@ error if the node is not the top node and a section is not found." (setq sec-name (buffer-substring-no-properties (progn (beginning-of-line) ; copy its name (1+ (point))) - (progn (forward-word 1) + (progn (forward-word-strictly 1) (point)))))) (cond ((or sec-pos top-pos) @@ -1374,7 +1374,7 @@ Point must be at beginning of node line. Does not move point." (save-excursion (let ((initial (texinfo-copy-next-section-title))) ;; This is not clean. Use `interactive' to read the arg. - (forward-word 1) ; skip over node command + (forward-word-strictly 1) ; skip over node command (skip-chars-forward " \t") ; and over spaces (if (not (looking-at "[^,\t\n ]+")) ; regexp based on what Info looks for ; alternatively, use "[a-zA-Z]+" @@ -1700,7 +1700,7 @@ node names in pre-existing `@node' lines that lack names." (if title-p (progn (beginning-of-line) - (forward-word 1) + (forward-word-strictly 1) (skip-chars-forward " \t") (setq title (buffer-substring (point) @@ -1713,7 +1713,7 @@ node names in pre-existing `@node' lines that lack names." (line-beginning-position -1)) t) ;; @node is present, and point at beginning of that line - (forward-word 1) ; Leave point just after @node. + (forward-word-strictly 1) ; Leave point just after @node. ;; Else @node missing; insert one. (beginning-of-line) ; Beginning of `@section' line. (insert "@node\n") @@ -1728,7 +1728,7 @@ node names in pre-existing `@node' lines that lack names." (if (not (looking-at "[^,\t\n ]+")) (progn (beginning-of-line) - (forward-word 1) + (forward-word-strictly 1) (insert " " title) (message "Inserted title %s ... " title))))) ;; Go forward beyond current section title. @@ -1813,7 +1813,7 @@ same place. If there is no title, returns an empty string." ;; copy title (let ((title (buffer-substring - (progn (forward-word 1) ; skip over section type + (progn (forward-word-strictly 1) ; skip over section type (skip-chars-forward " \t") ; and over spaces (point)) (progn (end-of-line) (point))))) diff --git a/lisp/wdired.el b/lisp/wdired.el index 9f25879..795e50d 100644 --- a/lisp/wdired.el +++ b/lisp/wdired.el @@ -666,7 +666,7 @@ If OLD, return the old target. If MOVE, move point before it." (funcall command 1) (setq arg (1- arg))) (error - (if (forward-word) + (if (forward-word-strictly) ;; Skip any non-word characters to avoid triggering a read-only ;; error which would cause skipping the next word characters too. (skip-syntax-forward "^w") diff --git a/src/syntax.c b/src/syntax.c index db5a99d..8b5cc1d 100644 --- a/src/syntax.c +++ b/src/syntax.c @@ -3695,11 +3695,11 @@ Each function is called with two arguments; POS and LIMIT. POS and LIMIT are character positions in the current buffer. If POS is less than LIMIT, POS is at the first character of a word, -and the return value of a function is a position after the last -character of that word. +and the return value of a function should be a position after the +last character of that word. If POS is not less than LIMIT, POS is at the last character of a word, -and the return value of a function is a position at the first +and the return value of a function should be a position at the first character of that word. In both cases, LIMIT bounds the search. */); commit d3337167c2a4d09444908cfc875ac4077a02279d Author: Simen Heggestøyl Date: Fri Feb 5 20:16:26 2016 +0100 ; * etc/NEWS: Expand news entry for scss-mode diff --git a/etc/NEWS b/etc/NEWS index bd3ddad..f21f0c0 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1242,7 +1242,8 @@ The main entry points are `cl-defgeneric' and `cl-defmethod'. See the node "Generic Functions" in the Emacs Lisp manual for more details. --- -** scss-mode (a minor variant of css-mode) +** scss-mode (a minor variant of css-mode) is a major mode for editing +SCSS (Sassy CSS) files. --- ** let-alist is a new macro (and a package) that allows one to easily commit c32c16f875c989bde31d2b1fd80b23bdec4d54fa Author: Eli Zaretskii Date: Fri Feb 5 12:27:53 2016 +0200 ; Better document changes in ls-lisp default behavior * etc/NEWS: Explain in more detail the effects of the new default sorting in ls-lisp on Dired display. (Bug#22561) diff --git a/etc/NEWS b/etc/NEWS index 975c26c..bd3ddad 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1553,8 +1553,14 @@ counterparts `string-lessp' and `string-equal'. --- *** The ls-lisp package uses `string-collate-lessp' to sort file names. -If you want the old, locale-independent sorting, customize the new -option `ls-lisp-use-string-collate' to a nil value. +The effect is that, on systems that use ls-lisp for Dired, the default +sort order of the files in Dired is now different from what it was in +previous versions of Emacs. In particular, the file names are sorted +disregarding punctuation, accents, and diacritics, and letter case is +ignored. For example, files whose name begin with a period will no +longer appear near the beginning of the directory listing. If you +want the old, locale-independent sorting, customize the new option +`ls-lisp-use-string-collate' to the nil value. +++ *** The MS-Windows specific variable `w32-collate-ignore-punctuation', commit dc6eed2592da9262a9318f49e8ed6cc1f31d5c68 Author: Lars Ingebrigtsen Date: Fri Feb 5 18:13:34 2016 +1100 Fix doc string of tls-program * lisp/net/tls.el (tls-program): Document the %t parameter (bug#22559). diff --git a/lisp/net/tls.el b/lisp/net/tls.el index 30895d0..f1219fd 100644 --- a/lisp/net/tls.el +++ b/lisp/net/tls.el @@ -82,7 +82,8 @@ and `gnutls-cli' (version 2.0.1) output." "openssl s_client -connect %h:%p -no_ssl2 -ign_eof") "List of strings containing commands to start TLS stream to a host. Each entry in the list is tried until a connection is successful. -%h is replaced with server hostname, %p with port to connect to. +%h is replaced with the server hostname, %p with the port to +connect to, and %t with a file name containing trusted certificates. The program should read input on stdin and write output to stdout. See `tls-checktrust' on how to check trusted root certs. commit 1ef309fc88368f0ff51865be94ef4a8efd01f3fe Author: Lars Ingebrigtsen Date: Fri Feb 5 17:35:29 2016 +1100 Restore window conf in nsm * lisp/net/nsm.el (nsm-query-user): Restore the window configuration. Backport: diff --git a/lisp/net/nsm.el b/lisp/net/nsm.el index ee8b55b..d0b5543 100644 --- a/lisp/net/nsm.el +++ b/lisp/net/nsm.el @@ -309,39 +309,40 @@ unencrypted." (defun nsm-query-user (message args cert) (let ((buffer (get-buffer-create "*Network Security Manager*"))) - (with-help-window buffer - (with-current-buffer buffer - (erase-buffer) - (when (> (length cert) 0) - (insert cert "\n")) - (let ((start (point))) - (insert (apply #'format-message message args)) - (goto-char start) - ;; Fill the first line of the message, which usually - ;; contains lots of explanatory text. - (fill-region (point) (line-end-position))))) - (let ((responses '((?n . no) - (?s . session) - (?a . always))) - (prefix "") - (cursor-in-echo-area t) - response) - (while (not response) - (setq response - (cdr - (assq (downcase - (read-char - (concat prefix - "Continue connecting? (No, Session only, Always) "))) - responses))) - (unless response - (ding) - (setq prefix "Invalid choice. "))) - (kill-buffer buffer) - ;; If called from a callback, `read-char' will insert things - ;; into the pending input. Clear that. - (clear-this-command-keys) - response))) + (save-window-excursion + (with-help-window buffer + (with-current-buffer buffer + (erase-buffer) + (when (> (length cert) 0) + (insert cert "\n")) + (let ((start (point))) + (insert (apply #'format-message message args)) + (goto-char start) + ;; Fill the first line of the message, which usually + ;; contains lots of explanatory text. + (fill-region (point) (line-end-position))))) + (let ((responses '((?n . no) + (?s . session) + (?a . always))) + (prefix "") + (cursor-in-echo-area t) + response) + (while (not response) + (setq response + (cdr + (assq (downcase + (read-char + (concat prefix + "Continue connecting? (No, Session only, Always) "))) + responses))) + (unless response + (ding) + (setq prefix "Invalid choice. "))) + (kill-buffer buffer) + ;; If called from a callback, `read-char' will insert things + ;; into the pending input. Clear that. + (clear-this-command-keys) + response)))) (defun nsm-save-host (host port status what permanency) (let* ((id (nsm-id host port)) commit 2c117fc7e283ad20f404c392be433c74f5cf8a4e Author: Mark Oteiza Date: Fri Feb 5 01:26:13 2016 -0500 * etc/NEWS: Document new mpc.el features diff --git a/etc/NEWS b/etc/NEWS index 0fc4b4d..975c26c 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -432,6 +432,33 @@ specified message types for the respective specified targets. *** Nick completion is now case-insensitive again after inadvertently being made case-sensitive in Emacs 24.2. +** MPC + +--- +*** New commands, key binds, and menu items. + +**** `<' and `>' for navigating previous and next tracks in playlist + +**** New play/pause command `mpc-toggle-play' bound to `s' + +**** `g' bound to new command `mpc-seek-current' will navigate current + track. + +**** New commands `mpc-toggle-{consume,repeat,single,shuffle}' for + toggling playback modes. + +--- +*** Now supports connecting to a UNIX domain socket. + +--- +*** Looks at more image file names to use as album art. +Case-insensitively tries for .folder.png (freedesktop) and folder.jpg +(XP) in addition to cover.jpg. + +--- +*** Searches in more locations for MPD configuration files. +MPD supports the XDG base directory specification since version 0.17.6. + ** Midnight-mode --- commit 71a04969c4dc6c1963359b663ccf76abf0862988 Author: Leo Liu Date: Fri Feb 5 09:48:17 2016 +0800 * lisp/custom.el (defface): Revert indentation change. (Bug#22524) diff --git a/lisp/custom.el b/lisp/custom.el index 550ba44..f404500 100644 --- a/lisp/custom.el +++ b/lisp/custom.el @@ -411,8 +411,7 @@ 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) - (indent 1)) + (declare (doc-string 3)) ;; 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 9dfece1413846e4df438cd20956c58e12c84dea3 Author: Alan Mackenzie Date: Thu Feb 4 19:01:50 2016 +0000 Correctly fontify C++ initializations which "look like" functions. Fixes bug#7579. lisp/progmodes/cc-engine.el (c-forward-declarator): Add extra optional parameter to enable handling of "anonymous" declarators in declarations. lisp/progmodes/cc-fonts.el (c-font-lock-declarators): Check more rigorously whether a "(" opens a parameter list of a function, or an initialization of a variable. diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index b75d667..d30447f 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -6808,7 +6808,7 @@ comment at the start of cc-engine.el for more info." ;; This identifier is bound only in the inner let. '(setq start id-start)))) -(defun c-forward-declarator (&optional limit) +(defun c-forward-declarator (&optional limit accept-anon) ;; Assuming point is at the start of a declarator, move forward over it, ;; leaving point at the next token after it (e.g. a ) or a ; or a ,). ;; @@ -6817,6 +6817,11 @@ comment at the start of cc-engine.el for more info." ;; BRACKETS-AFTER-ID is non-nil if a [...] pair is present after the id. ;; GOT-INIT is non-nil when the declarator is followed by "=" or "(". ;; + ;; If ACCEPT-ANON is non-nil, move forward over any "anonymous declarator", + ;; i.e. something like the (*) in int (*), such as might be found in a + ;; declaration. In such a case ID-START and ID-END in the return value are + ;; both set to nil. A "null" "anonymous declarator" gives a non-nil result. + ;; ;; If no declarator is found, leave point unmoved and return nil. LIMIT is ;; an optional limit for forward searching. ;; @@ -6871,13 +6876,17 @@ comment at the start of cc-engine.el for more info." ;; If we haven't passed the identifier already, do it now. (unless got-identifier - (setq id-start (point)) - (c-forward-name)) - (prog1 - (/= (point) here) + (setq id-start (point))) + (cond + ((or got-identifier + (c-forward-name)) (save-excursion (c-backward-syntactic-ws) - (setq id-end (point))))) + (setq id-end (point)))) + (accept-anon + (setq id-start nil id-end nil) + t) + (t (/= (point) here)))) ;; Skip out of the parens surrounding the identifier. If closing ;; parens are missing, this form returns nil. @@ -7266,7 +7275,7 @@ comment at the start of cc-engine.el for more info." (goto-char id-start) ;; Skip over type decl prefix operators. (Note similar code in - ;; `c-font-lock-declarators'.) + ;; `c-forward-declarator'.) (if (and c-recognize-typeless-decls (equal c-type-decl-prefix-key "\\<\\>")) (when (eq (char-after) ?\() diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el index 1e101d1..3cc537b 100644 --- a/lisp/progmodes/cc-fonts.el +++ b/lisp/progmodes/cc-fonts.el @@ -1008,7 +1008,7 @@ casts and declarations are fontified. Used on level 2 and higher." ((pos (point)) next-pos id-start id-end decl-res paren-depth - id-face got-init + id-face got-type got-init c-last-identifier-range (separator-prop (if types 'c-decl-type-start 'c-decl-id-start)) brackets-after-id) @@ -1020,7 +1020,28 @@ casts and declarations are fontified. Used on level 2 and higher." (setq next-pos (point) id-start (car decl-res) id-face (if (and (eq (char-after) ?\() - (not (car (cddr decl-res)))) ; brackets-after-id + (not (car (cddr decl-res))) ; brackets-after-id + (or (not (c-major-mode-is 'c++-mode)) + (save-excursion + (let (c-last-identifier-range) + (forward-char) + (c-forward-syntactic-ws) + (catch 'is-function + (while + (progn + (if (eq (char-after) ?\)) + (throw 'is-function t)) + (setq got-type (c-forward-type)) + (cond + ((null got-type) + (throw 'is-function nil)) + ((not (eq got-type 'maybe)) + (throw 'is-function t))) + (c-forward-declarator limit t) + (eq (char-after) ?,)) + (forward-char) + (c-forward-syntactic-ws)) + t))))) 'font-lock-function-name-face 'font-lock-variable-name-face) got-init (and (cadr (cddr decl-res)) ; got-init commit 448522201a12413b6fd4f059202b4d9a79ad3699 Author: Ulf Jasper Date: Thu Feb 4 18:31:04 2016 +0100 Improve newsticker-treeview-selection-face * newst-treeview.el (newsticker-treeview-selection-face): Improve readability for dark background. diff --git a/lisp/net/newst-treeview.el b/lisp/net/newst-treeview.el index 4de3d1d..c995af5 100644 --- a/lisp/net/newst-treeview.el +++ b/lisp/net/newst-treeview.el @@ -77,7 +77,7 @@ :group 'newsticker-treeview) (defface newsticker-treeview-selection-face - '((((class color) (background dark)) :background "#bbbbff") + '((((class color) (background dark)) :background "#4444aa") (((class color) (background light)) :background "#bbbbff")) "Face for newsticker selection." :group 'newsticker-treeview) commit 4236944f19cb4df69dd3ae95fdcace83b76d4554 Author: Eli Zaretskii Date: Thu Feb 4 19:23:12 2016 +0200 Minor fix in tagging Ruby accessors by etags * lib-src/etags.c (Ruby_functions): Don't tag accessors whose names are not literal symbols. (Bug#22241) diff --git a/lib-src/etags.c b/lib-src/etags.c index bb27589..0f5bfa3 100644 --- a/lib-src/etags.c +++ b/lib-src/etags.c @@ -4732,9 +4732,10 @@ Ruby_functions (FILE *inf) do { char *np = cp; - if (*np == ':') - np++; cp = skip_name (cp); + if (*np != ':') + continue; + np++; if (reader) { make_tag (np, cp - np, true, commit 35fc77dcebc7b097365fe05a33b9a627203a5f83 Author: Paul Eggert Date: Thu Feb 4 07:29:35 2016 -0800 Spelling fixes diff --git a/etc/NEWS b/etc/NEWS index d4691b9..0fc4b4d 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -429,7 +429,7 @@ specified message types for the respective specified targets. *** Reconnection is now asynchronous. --- -*** Nick completion is now case-insentive again after inadvertently +*** Nick completion is now case-insensitive again after inadvertently being made case-sensitive in Emacs 24.2. ** Midnight-mode diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el index ef3a6b3..295c2c0 100644 --- a/lisp/erc/erc.el +++ b/lisp/erc/erc.el @@ -3992,7 +3992,7 @@ Prompt for one if called interactively." (format "MODE %s -k" tgt))))) (defun erc-completion-at-point () - "Perform complection on the text around point case-insentitively. + "Perform completion on the text around point case-insensitively. See `completion-at-point'." (interactive) (let ((completion-ignore-case t)) commit 3dda11032f9f49c285b0433b47802ceed2ade406 Author: Dmitry Gutov Date: Thu Feb 4 12:21:03 2016 +0300 Remove 'def X' from the example * test/etags/ruby-src/test1.ru (A::B): Remove 'def X' (http://lists.gnu.org/archive/html/emacs-devel/2016-02/msg00167.html). * test/etags/CTAGS.good: * test/etags/ETAGS.good_1: * test/etags/ETAGS.good_2: * test/etags/ETAGS.good_3: * test/etags/ETAGS.good_4: * test/etags/ETAGS.good_5: * test/etags/ETAGS.good_6: Adjust accordingly. diff --git a/test/etags/CTAGS.good b/test/etags/CTAGS.good index b78c194..58b1db6 100644 --- a/test/etags/CTAGS.good +++ b/test/etags/CTAGS.good @@ -454,7 +454,7 @@ Condition_Variable/t ada-src/2ataspri.ads /^ type Condition_Variable is privat Condition_Variable/t ada-src/2ataspri.ads /^ type Condition_Variable is$/ Configure pyt-src/server.py /^class Configure(Frame, ControlEdit):$/ ConfirmQuit pyt-src/server.py /^def ConfirmQuit(frame, context):$/ -Constant ruby-src/test1.ru 39 +Constant ruby-src/test1.ru 38 ControlEdit pyt-src/server.py /^class ControlEdit(Frame):$/ Controls pyt-src/server.py /^class Controls:$/ CopyTextString pas-src/common.pas /^function CopyTextString;(*($/ @@ -1491,7 +1491,6 @@ WorkingDays cp-src/functions.cpp /^int WorkingDays(Date a, Date b){$/ Write_Lock/p ada-src/2ataspri.adb /^ procedure Write_Lock (L : in out Lock; Ceiling_/ Write_Lock/p ada-src/2ataspri.ads /^ procedure Write_Lock (L : in out Lock; Ceiling_/ X c-src/h.h 100 -X ruby-src/test1.ru /^ def X$/ XBOOL_VECTOR c-src/emacs/src/lisp.h /^XBOOL_VECTOR (Lisp_Object a)$/ XBUFFER c-src/emacs/src/lisp.h /^XBUFFER (Lisp_Object a)$/ XBUFFER_OBJFWD c-src/emacs/src/lisp.h /^XBUFFER_OBJFWD (union Lisp_Fwd *a)$/ @@ -2556,12 +2555,12 @@ bar c-src/c.c /^void bar() {while(0) {}}$/ bar c.c 143 bar c-src/h.h 19 bar cp-src/x.cc /^XX::bar()$/ -bar= ruby-src/test1.ru /^ attr_writer :bar,$/ +bar= ruby-src/test1.ru /^ attr_writer :bar,$/ bas_syn prol-src/natded.prolog /^bas_syn(n(_)).$/ base c-src/emacs/src/lisp.h 2188 base cp-src/c.C /^double base (void) const { return rng_base; }$/ base cp-src/Range.h /^ double base (void) const { return rng_base; }$/ -baz= ruby-src/test1.ru /^ :baz,$/ +baz= ruby-src/test1.ru /^ :baz,$/ bb c.c 275 bbb c.c 251 bbbbbb c-src/h.h 113 @@ -3007,7 +3006,7 @@ foo f-src/entry.for /^ character*(*) function foo()$/ foo f-src/entry.strange_suffix /^ character*(*) function foo()$/ foo f-src/entry.strange /^ character*(*) function foo()$/ foo php-src/ptest.php /^foo()$/ -foo ruby-src/test1.ru /^ attr_reader :foo$/ +foo ruby-src/test1.ru /^ attr_reader :foo$/ foo! ruby-src/test1.ru /^ def foo!$/ foobar c-src/c.c /^int foobar() {;}$/ foobar c.c /^extern void foobar (void) __attribute__ ((section / @@ -3515,7 +3514,7 @@ modifier_symbols c-src/emacs/src/keyboard.c 6327 modify_event_symbol c-src/emacs/src/keyboard.c /^modify_event_symbol (ptrdiff_t symbol_num, int mod/ module_class_method ruby-src/test.rb /^ def ModuleExample.module_class_method$/ module_instance_method ruby-src/test.rb /^ def module_instance_method$/ -more= ruby-src/test1.ru /^ :more$/ +more= ruby-src/test1.ru /^ :more$/ more_aligned_int c.c 165 morecore_nolock c-src/emacs/src/gmalloc.c /^morecore_nolock (size_t size)$/ morecore_recursing c-src/emacs/src/gmalloc.c 604 @@ -3881,7 +3880,7 @@ questo ../c/c.web 34 quiettest make-src/Makefile /^quiettest:$/ quit_char c-src/emacs/src/keyboard.c 192 quit_throw_to_read_char c-src/emacs/src/keyboard.c /^quit_throw_to_read_char (bool from_signal)$/ -qux ruby-src/test1.ru /^ alias_method :qux, :tee, attr_accessor :bogu/ +qux ruby-src/test1.ru /^ alias_method :qux, :tee, attr_accessor :bogus$/ qux= ruby-src/test1.ru /^ def qux=(tee)$/ r0 c-src/sysdep.h 54 r1 c-src/sysdep.h 55 @@ -3906,8 +3905,8 @@ read cp-src/conway.hpp /^ char read() { return alive; }$/ read php-src/lce_functions.php /^ function read()$/ read-key-sequence c-src/emacs/src/keyboard.c /^DEFUN ("read-key-sequence", Fread_key_sequence, Sr/ read-key-sequence-vector c-src/emacs/src/keyboard.c /^DEFUN ("read-key-sequence-vector", Fread_key_seque/ -read1 ruby-src/test1.ru /^ attr_reader :read1 , :read2; attr_writer :wr/ -read2 ruby-src/test1.ru /^ attr_reader :read1 , :read2; attr_writer :wr/ +read1 ruby-src/test1.ru /^ attr_reader :read1 , :read2; attr_writer :writ/ +read2 ruby-src/test1.ru /^ attr_reader :read1 , :read2; attr_writer :writ/ read_char c-src/emacs/src/keyboard.c /^read_char (int commandflag, Lisp_Object map,$/ read_char_help_form_unwind c-src/emacs/src/keyboard.c /^read_char_help_form_unwind (void)$/ read_char_minibuf_menu_prompt c-src/emacs/src/keyboard.c /^read_char_minibuf_menu_prompt (int commandflag,$/ @@ -4166,7 +4165,7 @@ substitute c-src/etags.c /^substitute (char *in, char *out, struct re_registe/ subsubsec=\relax tex-src/texinfo.tex /^\\let\\appendixsubsubsec=\\relax$/ subsubsection perl-src/htlmify-cystic 27 subsubsection=\relax tex-src/texinfo.tex /^\\let\\appendixsubsubsection=\\relax$/ -subtle ruby-src/test1.ru /^ :tee ; attr_reader :subtle$/ +subtle ruby-src/test1.ru /^ :tee ; attr_reader :subtle$/ subtree prol-src/natded.prolog /^subtree(T,T).$/ suffix c-src/etags.c 186 suffixes c-src/etags.c 195 @@ -4283,8 +4282,8 @@ tags-with-face el-src/emacs/lisp/progmodes/etags.el /^(defmacro tags-with-face ( target_multibyte c-src/emacs/src/regex.h 407 tcpdump html-src/software.html /^tcpdump$/ teats cp-src/c.C 127 -tee ruby-src/test1.ru /^ attr_accessor :tee$/ -tee= ruby-src/test1.ru /^ attr_accessor :tee$/ +tee ruby-src/test1.ru /^ attr_accessor :tee$/ +tee= ruby-src/test1.ru /^ attr_accessor :tee$/ temporarily_switch_to_single_kboard c-src/emacs/src/keyboard.c /^temporarily_switch_to_single_kboard (struct frame / tend c-src/etags.c 2432 terminate objc-src/Subprocess.m /^- terminate:sender$/ @@ -4453,8 +4452,8 @@ womboid c-src/h.h 75 word_size c-src/emacs/src/lisp.h 1473 write php-src/lce_functions.php /^ function write()$/ write php-src/lce_functions.php /^ function write($save="yes")$/ -write1= ruby-src/test1.ru /^ attr_reader :read1 , :read2; attr_writer :wr/ -write2= ruby-src/test1.ru /^ attr_reader :read1 , :read2; attr_writer :wr/ +write1= ruby-src/test1.ru /^ attr_reader :read1 , :read2; attr_writer :writ/ +write2= ruby-src/test1.ru /^ attr_reader :read1 , :read2; attr_writer :writ/ write_abbrev c-src/abbrev.c /^write_abbrev (sym, stream)$/ write_classname c-src/etags.c /^write_classname (linebuffer *cn, const char *quali/ write_lex prol-src/natded.prolog /^write_lex(File):-$/ @@ -4495,7 +4494,7 @@ xref-location-marker el-src/emacs/lisp/progmodes/etags.el /^(cl-defmethod xref-l xref-make-etags-location el-src/emacs/lisp/progmodes/etags.el /^(defun xref-make-etags-location (tag-info file)$/ xrnew c-src/etags.c /^#define xrnew(op, n, Type) ((op) = (Type *) xreall/ xx make-src/Makefile /^xx="this line is here because of a fontlock bug$/ -xyz ruby-src/test1.ru /^ alias_method :xyz,$/ +xyz ruby-src/test1.ru /^ alias_method :xyz,$/ y cp-src/conway.hpp 7 y cp-src/clheir.hpp 49 y cp-src/clheir.hpp 58 diff --git a/test/etags/ETAGS.good_1 b/test/etags/ETAGS.good_1 index 1390187..90bbe77 100644 --- a/test/etags/ETAGS.good_1 +++ b/test/etags/ETAGS.good_1 @@ -3061,7 +3061,7 @@ module ModuleExample1,0 def module_instance_method46,1051 def ModuleExample.module_class_methodmodule_class_method49,1131 -ruby-src/test1.ru,828 +ruby-src/test1.ru,785 class A1,0 def a(2,8 def b(5,38 @@ -3073,21 +3073,20 @@ module A9,57 def foo!15,121 def self._bar?(_bar?18,143 def qux=(qux=22,194 - def X25,232 - attr_reader :foofoo26,242 - attr_reader :read1 read127,265 - attr_reader :read1 , :read2;read227,265 - attr_reader :read1 , :read2; attr_writer :write1,write1=27,265 - attr_reader :read1 , :read2; attr_writer :write1, :write2write2=27,265 - attr_writer :bar,bar=28,329 - :baz,baz=29,353 - :moremore=30,377 - attr_accessor :teetee31,401 - attr_accessor :teetee=31,401 - alias_method :qux,qux32,426 - alias_method :xyz,xyz33,478 - :tee ; attr_reader :subtlesubtle34,503 -A::Constant Constant39,568 + attr_reader :foofoo26,233 + attr_reader :read1 read127,254 + attr_reader :read1 , :read2;read227,254 + attr_reader :read1 , :read2; attr_writer :write1,write1=27,254 + attr_reader :read1 , :read2; attr_writer :write1, :write2write2=27,254 + attr_writer :bar,bar=28,316 + :baz,baz=29,338 + :moremore=30,360 + attr_accessor :teetee31,382 + attr_accessor :teetee=31,382 + alias_method :qux,qux32,405 + alias_method :xyz,xyz33,455 + :tee ; attr_reader :subtlesubtle34,478 +A::Constant Constant38,533 tex-src/testenv.tex,52 \newcommand{\nm}\nm4,77 diff --git a/test/etags/ETAGS.good_2 b/test/etags/ETAGS.good_2 index f8b1546..d774bb1 100644 --- a/test/etags/ETAGS.good_2 +++ b/test/etags/ETAGS.good_2 @@ -3631,7 +3631,7 @@ module ModuleExample1,0 def module_instance_method46,1051 def ModuleExample.module_class_methodmodule_class_method49,1131 -ruby-src/test1.ru,828 +ruby-src/test1.ru,785 class A1,0 def a(2,8 def b(5,38 @@ -3643,21 +3643,20 @@ module A9,57 def foo!15,121 def self._bar?(_bar?18,143 def qux=(qux=22,194 - def X25,232 - attr_reader :foofoo26,242 - attr_reader :read1 read127,265 - attr_reader :read1 , :read2;read227,265 - attr_reader :read1 , :read2; attr_writer :write1,write1=27,265 - attr_reader :read1 , :read2; attr_writer :write1, :write2write2=27,265 - attr_writer :bar,bar=28,329 - :baz,baz=29,353 - :moremore=30,377 - attr_accessor :teetee31,401 - attr_accessor :teetee=31,401 - alias_method :qux,qux32,426 - alias_method :xyz,xyz33,478 - :tee ; attr_reader :subtlesubtle34,503 -A::Constant Constant39,568 + attr_reader :foofoo26,233 + attr_reader :read1 read127,254 + attr_reader :read1 , :read2;read227,254 + attr_reader :read1 , :read2; attr_writer :write1,write1=27,254 + attr_reader :read1 , :read2; attr_writer :write1, :write2write2=27,254 + attr_writer :bar,bar=28,316 + :baz,baz=29,338 + :moremore=30,360 + attr_accessor :teetee31,382 + attr_accessor :teetee=31,382 + alias_method :qux,qux32,405 + alias_method :xyz,xyz33,455 + :tee ; attr_reader :subtlesubtle34,478 +A::Constant Constant38,533 tex-src/testenv.tex,52 \newcommand{\nm}\nm4,77 diff --git a/test/etags/ETAGS.good_3 b/test/etags/ETAGS.good_3 index a1e895a..e3855a5 100644 --- a/test/etags/ETAGS.good_3 +++ b/test/etags/ETAGS.good_3 @@ -3408,7 +3408,7 @@ module ModuleExample1,0 def module_instance_method46,1051 def ModuleExample.module_class_methodmodule_class_method49,1131 -ruby-src/test1.ru,828 +ruby-src/test1.ru,785 class A1,0 def a(2,8 def b(5,38 @@ -3420,21 +3420,20 @@ module A9,57 def foo!15,121 def self._bar?(_bar?18,143 def qux=(qux=22,194 - def X25,232 - attr_reader :foofoo26,242 - attr_reader :read1 read127,265 - attr_reader :read1 , :read2;read227,265 - attr_reader :read1 , :read2; attr_writer :write1,write1=27,265 - attr_reader :read1 , :read2; attr_writer :write1, :write2write2=27,265 - attr_writer :bar,bar=28,329 - :baz,baz=29,353 - :moremore=30,377 - attr_accessor :teetee31,401 - attr_accessor :teetee=31,401 - alias_method :qux,qux32,426 - alias_method :xyz,xyz33,478 - :tee ; attr_reader :subtlesubtle34,503 -A::Constant Constant39,568 + attr_reader :foofoo26,233 + attr_reader :read1 read127,254 + attr_reader :read1 , :read2;read227,254 + attr_reader :read1 , :read2; attr_writer :write1,write1=27,254 + attr_reader :read1 , :read2; attr_writer :write1, :write2write2=27,254 + attr_writer :bar,bar=28,316 + :baz,baz=29,338 + :moremore=30,360 + attr_accessor :teetee31,382 + attr_accessor :teetee=31,382 + alias_method :qux,qux32,405 + alias_method :xyz,xyz33,455 + :tee ; attr_reader :subtlesubtle34,478 +A::Constant Constant38,533 tex-src/testenv.tex,52 \newcommand{\nm}\nm4,77 diff --git a/test/etags/ETAGS.good_4 b/test/etags/ETAGS.good_4 index 32390fa..dbae59b 100644 --- a/test/etags/ETAGS.good_4 +++ b/test/etags/ETAGS.good_4 @@ -3225,7 +3225,7 @@ module ModuleExample1,0 def module_instance_method46,1051 def ModuleExample.module_class_methodmodule_class_method49,1131 -ruby-src/test1.ru,828 +ruby-src/test1.ru,785 class A1,0 def a(2,8 def b(5,38 @@ -3237,21 +3237,20 @@ module A9,57 def foo!15,121 def self._bar?(_bar?18,143 def qux=(qux=22,194 - def X25,232 - attr_reader :foofoo26,242 - attr_reader :read1 read127,265 - attr_reader :read1 , :read2;read227,265 - attr_reader :read1 , :read2; attr_writer :write1,write1=27,265 - attr_reader :read1 , :read2; attr_writer :write1, :write2write2=27,265 - attr_writer :bar,bar=28,329 - :baz,baz=29,353 - :moremore=30,377 - attr_accessor :teetee31,401 - attr_accessor :teetee=31,401 - alias_method :qux,qux32,426 - alias_method :xyz,xyz33,478 - :tee ; attr_reader :subtlesubtle34,503 -A::Constant Constant39,568 + attr_reader :foofoo26,233 + attr_reader :read1 read127,254 + attr_reader :read1 , :read2;read227,254 + attr_reader :read1 , :read2; attr_writer :write1,write1=27,254 + attr_reader :read1 , :read2; attr_writer :write1, :write2write2=27,254 + attr_writer :bar,bar=28,316 + :baz,baz=29,338 + :moremore=30,360 + attr_accessor :teetee31,382 + attr_accessor :teetee=31,382 + alias_method :qux,qux32,405 + alias_method :xyz,xyz33,455 + :tee ; attr_reader :subtlesubtle34,478 +A::Constant Constant38,533 tex-src/testenv.tex,52 \newcommand{\nm}\nm4,77 diff --git a/test/etags/ETAGS.good_5 b/test/etags/ETAGS.good_5 index ee19bcf..9ea7797 100644 --- a/test/etags/ETAGS.good_5 +++ b/test/etags/ETAGS.good_5 @@ -4142,7 +4142,7 @@ module ModuleExample1,0 def module_instance_method46,1051 def ModuleExample.module_class_methodmodule_class_method49,1131 -ruby-src/test1.ru,828 +ruby-src/test1.ru,785 class A1,0 def a(2,8 def b(5,38 @@ -4154,21 +4154,20 @@ module A9,57 def foo!15,121 def self._bar?(_bar?18,143 def qux=(qux=22,194 - def X25,232 - attr_reader :foofoo26,242 - attr_reader :read1 read127,265 - attr_reader :read1 , :read2;read227,265 - attr_reader :read1 , :read2; attr_writer :write1,write1=27,265 - attr_reader :read1 , :read2; attr_writer :write1, :write2write2=27,265 - attr_writer :bar,bar=28,329 - :baz,baz=29,353 - :moremore=30,377 - attr_accessor :teetee31,401 - attr_accessor :teetee=31,401 - alias_method :qux,qux32,426 - alias_method :xyz,xyz33,478 - :tee ; attr_reader :subtlesubtle34,503 -A::Constant Constant39,568 + attr_reader :foofoo26,233 + attr_reader :read1 read127,254 + attr_reader :read1 , :read2;read227,254 + attr_reader :read1 , :read2; attr_writer :write1,write1=27,254 + attr_reader :read1 , :read2; attr_writer :write1, :write2write2=27,254 + attr_writer :bar,bar=28,316 + :baz,baz=29,338 + :moremore=30,360 + attr_accessor :teetee31,382 + attr_accessor :teetee=31,382 + alias_method :qux,qux32,405 + alias_method :xyz,xyz33,455 + :tee ; attr_reader :subtlesubtle34,478 +A::Constant Constant38,533 tex-src/testenv.tex,52 \newcommand{\nm}\nm4,77 diff --git a/test/etags/ETAGS.good_6 b/test/etags/ETAGS.good_6 index f4d9ab8..7420a41 100644 --- a/test/etags/ETAGS.good_6 +++ b/test/etags/ETAGS.good_6 @@ -4142,7 +4142,7 @@ module ModuleExample1,0 def module_instance_method46,1051 def ModuleExample.module_class_methodmodule_class_method49,1131 -ruby-src/test1.ru,828 +ruby-src/test1.ru,785 class A1,0 def a(2,8 def b(5,38 @@ -4154,21 +4154,20 @@ module A9,57 def foo!15,121 def self._bar?(_bar?18,143 def qux=(qux=22,194 - def X25,232 - attr_reader :foofoo26,242 - attr_reader :read1 read127,265 - attr_reader :read1 , :read2;read227,265 - attr_reader :read1 , :read2; attr_writer :write1,write1=27,265 - attr_reader :read1 , :read2; attr_writer :write1, :write2write2=27,265 - attr_writer :bar,bar=28,329 - :baz,baz=29,353 - :moremore=30,377 - attr_accessor :teetee31,401 - attr_accessor :teetee=31,401 - alias_method :qux,qux32,426 - alias_method :xyz,xyz33,478 - :tee ; attr_reader :subtlesubtle34,503 -A::Constant Constant39,568 + attr_reader :foofoo26,233 + attr_reader :read1 read127,254 + attr_reader :read1 , :read2;read227,254 + attr_reader :read1 , :read2; attr_writer :write1,write1=27,254 + attr_reader :read1 , :read2; attr_writer :write1, :write2write2=27,254 + attr_writer :bar,bar=28,316 + :baz,baz=29,338 + :moremore=30,360 + attr_accessor :teetee31,382 + attr_accessor :teetee=31,382 + alias_method :qux,qux32,405 + alias_method :xyz,xyz33,455 + :tee ; attr_reader :subtlesubtle34,478 +A::Constant Constant38,533 tex-src/testenv.tex,52 \newcommand{\nm}\nm4,77 diff --git a/test/etags/ruby-src/test1.ru b/test/etags/ruby-src/test1.ru index bc9dbec..93888c1 100644 --- a/test/etags/ruby-src/test1.ru +++ b/test/etags/ruby-src/test1.ru @@ -22,17 +22,16 @@ module A def qux=(tee) end end - def X - attr_reader :foo - attr_reader :read1 , :read2; attr_writer :write1, :write2 - attr_writer :bar, - :baz, - :more - attr_accessor :tee - alias_method :qux, :tee, attr_accessor :bogus - alias_method :xyz, - :tee ; attr_reader :subtle - end + + attr_reader :foo + attr_reader :read1 , :read2; attr_writer :write1, :write2 + attr_writer :bar, + :baz, + :more + attr_accessor :tee + alias_method :qux, :tee, attr_accessor :bogus + alias_method :xyz, + :tee ; attr_reader :subtle end end