commit a27511ff2fcfc76e05203ed9cc4000649a4b0961 (HEAD, refs/remotes/origin/master) Author: Po Lu Date: Sat Jan 1 15:23:55 2022 +0800 Set display last user time when handling pinch events * src/xterm.c (handle_one_xevent): Set last user time for XI pinch events. diff --git a/src/xterm.c b/src/xterm.c index d3d85a9e0d..48bf8eb7dd 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -11106,6 +11106,8 @@ handle_one_xevent (struct x_display_info *dpyinfo, case XI_GesturePinchBegin: case XI_GesturePinchUpdate: { + x_display_set_last_user_time (dpyinfo, xi_event->time); + #ifdef HAVE_USABLE_XI_GESTURE_PINCH_EVENT XIGesturePinchEvent *pev = (XIGesturePinchEvent *) xi_event; struct xi_device_t *device = xi_device_from_id (dpyinfo, pev->deviceid); @@ -11146,6 +11148,8 @@ handle_one_xevent (struct x_display_info *dpyinfo, } case XI_GesturePinchEnd: { + x_display_set_last_user_time (dpyinfo, xi_event->time); + #if defined HAVE_XWIDGETS && HAVE_USABLE_XI_GESTURE_PINCH_EVENT XIGesturePinchEvent *pev = (XIGesturePinchEvent *) xi_event; struct xwidget_view *xvw = xwidget_view_from_window (pev->event); commit cbc77dcf033aed0a595f31437c92f1981503ab88 Author: Po Lu Date: Sat Jan 1 07:09:38 2022 +0000 Fix child frame synchronization order on Haiku * src/haiku_support.cc (DoMove): (FrameMoved): Fix locking and sync order semantics. diff --git a/src/haiku_support.cc b/src/haiku_support.cc index 32e61d9660..2a74d0bd51 100644 --- a/src/haiku_support.cc +++ b/src/haiku_support.cc @@ -414,11 +414,8 @@ class EmacsWindow : public BWindow DoMove (struct child_frame *f) { BRect frame = this->Frame (); - if (!f->window->LockLooper ()) - gui_abort ("Failed to lock child frame window for move"); f->window->MoveTo (frame.left + f->xoff, frame.top + f->yoff); - f->window->UnlockLooper (); } void @@ -652,21 +649,24 @@ class EmacsWindow : public BWindow if (!child_frame_lock.Lock ()) gui_abort ("Failed to lock child frame state lock"); - for (struct child_frame *f = subset_windows; f; f = f->next) DoMove (f); - child_frame_lock.Unlock (); + + Sync (); BWindow::FrameMoved (newPosition); } void WorkspacesChanged (uint32_t old, uint32_t n) { + if (!child_frame_lock.Lock ()) + gui_abort ("Failed to lock child frames for changing workspaces"); for (struct child_frame *f = subset_windows; f; f = f->next) DoUpdateWorkspace (f); + child_frame_lock.Unlock (); } void commit c7e642bab2fb7d11eca64036543ee20e116800bc Author: Stefan Kangas Date: Sat Jan 1 07:25:50 2022 +0100 ; Auto-commit of loaddefs files. diff --git a/lisp/ldefs-boot.el b/lisp/ldefs-boot.el index 0fbae8508a..6d5b0d84e6 100644 --- a/lisp/ldefs-boot.el +++ b/lisp/ldefs-boot.el @@ -2723,27 +2723,6 @@ The optional argument IGNORED is not used. \(fn URL &optional IGNORED)" t nil) -(autoload 'browse-url-netscape "browse-url" "\ -Ask the Netscape WWW browser to load URL. -Default to the URL around or before point. The strings in variable -`browse-url-netscape-arguments' are also passed to Netscape. - -When called interactively, if variable `browse-url-new-window-flag' is -non-nil, load the document in a new Netscape window, otherwise use a -random existing one. A non-nil interactive prefix argument reverses -the effect of `browse-url-new-window-flag'. - -If `browse-url-netscape-new-window-is-tab' is non-nil, then -whenever a document would otherwise be loaded in a new window, it -is loaded in a new tab in an existing window instead. - -When called non-interactively, optional second argument NEW-WINDOW is -used instead of `browse-url-new-window-flag'. - -\(fn URL &optional NEW-WINDOW)" t nil) - -(make-obsolete 'browse-url-netscape 'nil '"25.1") - (autoload 'browse-url-mozilla "browse-url" "\ Ask the Mozilla WWW browser to load URL. Default to the URL around or before point. The strings in variable @@ -2790,27 +2769,6 @@ The optional argument NEW-WINDOW is not used. \(fn URL &optional NEW-WINDOW)" t nil) -(autoload 'browse-url-galeon "browse-url" "\ -Ask the Galeon WWW browser to load URL. -Default to the URL around or before point. The strings in variable -`browse-url-galeon-arguments' are also passed to Galeon. - -When called interactively, if variable `browse-url-new-window-flag' is -non-nil, load the document in a new Galeon window, otherwise use a -random existing one. A non-nil interactive prefix argument reverses -the effect of `browse-url-new-window-flag'. - -If `browse-url-galeon-new-window-is-tab' is non-nil, then whenever a -document would otherwise be loaded in a new window, it is loaded in a -new tab in an existing window instead. - -When called non-interactively, optional second argument NEW-WINDOW is -used instead of `browse-url-new-window-flag'. - -\(fn URL &optional NEW-WINDOW)" t nil) - -(make-obsolete 'browse-url-galeon 'nil '"25.1") - (autoload 'browse-url-webpositive "browse-url" "\ Ask the WebPositive WWW browser to load URL. Default to the URL around or before point. @@ -2826,7 +2784,7 @@ currently selected window instead. \(fn URL &optional SAME-WINDOW)" t nil) (autoload 'browse-url-gnome-moz "browse-url" "\ -Ask Mozilla/Netscape to load URL via the GNOME program `gnome-moz-remote'. +Ask Mozilla to load URL via the GNOME program `gnome-moz-remote'. Default to the URL around or before point. The strings in variable `browse-url-gnome-moz-arguments' are also passed. @@ -5818,7 +5776,7 @@ disabled. \(fn &optional ARG)" t nil) -(register-definition-prefixes "completion" '("*c-def-regexp*" "*lisp-def-regexp*" "accept-completion" "add-" "cdabbrev-" "check-completion-length" "clear-all-completions" "cmpl-" "complet" "current-completion-source" "delete-completion" "enable-completion" "find-" "initialize-completions" "inside-locate-completion-entry" "interactive-completion-string-reader" "kill-" "list-all-completions" "load-completions-from-file" "make-c" "next-cdabbrev" "num-cmpl-sources" "reset-cdabbrev" "save" "set-c" "symbol-" "use-completion-")) +(register-definition-prefixes "completion" '("*c-def-regexp*" "*lisp-def-regexp*" "accept-completion" "add-" "cdabbrev-" "check-completion-length" "clear-all-completions" "cmpl-" "complet" "current-completion-source" "delete-completion" "enable-completion" "find-" "inside-locate-completion-entry" "interactive-completion-string-reader" "kill-" "list-all-completions" "load-completions-from-file" "make-c" "next-cdabbrev" "num-cmpl-sources" "reset-cdabbrev" "save" "set-c" "symbol-" "use-completion-")) ;;;*** @@ -10533,28 +10491,34 @@ Emerge two RCS revisions of a file, with another revision as ancestor. (autoload 'emoji-insert "emoji" "\ Choose and insert an emoji glyph. -If TEXT (interactively, the prefix), use a textual search instead -of a visual interface. +If TEXT (interactively, the prefix argument), choose the emoji +by typing its Unicode Standard name (with completion), instead +of selecting from emoji display. \(fn &optional TEXT)" t nil) (autoload 'emoji-recent "emoji" "\ -Choose and insert a recently used emoji glyph." t nil) +Choose and insert one of the recently-used emoji glyphs." t nil) (autoload 'emoji-search "emoji" "\ -Choose and insert an emoji glyph by searching for an emoji name." t nil) +Choose and insert an emoji glyph by typing its Unicode name. +This command prompts for an emoji name, with completion, and inserts it. +It recognizes the Unicode Standard names of emoji." t nil) (autoload 'emoji-list "emoji" "\ List emojis and insert the one that's selected. -The character will be inserted into the buffer that was selected -when the command was issued." t nil) +Select the emoji by typing \\\\[emoji-list-select] on its picture. +The glyph will be inserted into the buffer that was current +when the command was invoked." t nil) (autoload 'emoji-describe "emoji" "\ -Say what the name of the composed grapheme cluster GLYPH is. -If it's not known, this function returns nil. +Display the name of the grapheme cluster composed from GLYPH. +GLYPH should be a string of one or more characters which together +produce an emoji. Interactively, GLYPH is the emoji at point (it +could also be any character, not just emoji). -Interactively, it will message what the name of the emoji (or -character) under point is. +If called from Lisp, return the name as a string; return nil if +the name is not known. \(fn GLYPH &optional INTERACTIVE)" t nil) @@ -12379,6 +12343,12 @@ a top-level keymap, `text-scale-increase' or `text-scale-decrease' may be more appropriate. \(fn INC)" t nil) + (define-key global-map [pinch] 'text-scale-pinch) + +(autoload 'text-scale-pinch "face-remap" "\ +Adjust the height of the default face by the scale in the pinch event EVENT. + +\(fn EVENT)" t nil) (autoload 'buffer-face-mode "face-remap" "\ Minor mode for a buffer-specific default face. @@ -14339,6 +14309,35 @@ separators (like underscores) at places they belong to. (register-definition-prefixes "glasses" '("glasses-")) +;;;*** + +;;;### (autoloads nil "glyphless-mode" "textmodes/glyphless-mode.el" +;;;;;; (0 0 0 0)) +;;; Generated autoloads from textmodes/glyphless-mode.el + +(autoload 'glyphless-display-mode "glyphless-mode" "\ +Minor mode for displaying glyphless characters in the current buffer. +If enabled, all glyphless characters will be displayed as boxes +that display their acronyms. + +This is a minor mode. If called interactively, toggle the +`Glyphless-Display mode' mode. If the prefix argument is positive, +enable the mode, and if it is zero or negative, disable the mode. + +If called from Lisp, toggle the mode if ARG is `toggle'. Enable the +mode if ARG is nil, omitted, or is a positive number. Disable the +mode if ARG is a negative number. + +To check whether the minor mode is enabled in the current buffer, +evaluate `glyphless-display-mode'. + +The mode's hook is called both when the mode is enabled and when it is +disabled. + +\(fn &optional ARG)" t nil) + +(register-definition-prefixes "glyphless-mode" '("glyphless-mode-")) + ;;;*** ;;;### (autoloads nil "gmm-utils" "gnus/gmm-utils.el" (0 0 0 0)) @@ -15210,6 +15209,13 @@ Initialize the Gnus registry." t nil) (register-definition-prefixes "gnus-rfc1843" '("rfc1843-")) +;;;*** + +;;;### (autoloads nil "gnus-rmail" "gnus/gnus-rmail.el" (0 0 0 0)) +;;; Generated autoloads from gnus/gnus-rmail.el + +(register-definition-prefixes "gnus-rmail" '("gnus-")) + ;;;*** ;;;### (autoloads nil "gnus-salt" "gnus/gnus-salt.el" (0 0 0 0)) @@ -18684,8 +18690,8 @@ An image file is one whose name has an extension in (autoload 'image-mode "image-mode" "\ Major mode for image files. -You can use \\\\[image-toggle-display] or \\\\[image-toggle-hex-display] -to toggle between display as an image and display as text or hex. +You can use \\\\[image-toggle-display] or \\[image-toggle-hex-display] to toggle between display +as an image and display as text or hex. Key bindings: \\{image-mode-map}" t nil) @@ -22889,6 +22895,30 @@ QUALITY can be: (register-definition-prefixes "mule-util" '("filepos-to-bufferpos--dos" "truncate-string-ellipsis")) +;;;*** + +;;;### (autoloads nil "multisession" "emacs-lisp/multisession.el" +;;;;;; (0 0 0 0)) +;;; Generated autoloads from emacs-lisp/multisession.el + +(autoload 'define-multisession-variable "multisession" "\ +Make NAME into a multisession variable initialized from INITIAL-VALUE. +DOC should be a doc string, and ARGS are keywords as applicable to +`make-multisession'. + +\(fn NAME INITIAL-VALUE &optional DOC &rest ARGS)" nil t) + +(function-put 'define-multisession-variable 'lisp-indent-function 'defun) + +(autoload 'list-multisession-values "multisession" "\ +List all values in the \"multisession\" database. +If CHOOSE-STORAGE (interactively, the prefix), query for the +storage method to list. + +\(fn &optional CHOOSE-STORAGE)" t nil) + +(register-definition-prefixes "multisession" '("multisession-")) + ;;;*** ;;;### (autoloads nil "mwheel" "mwheel.el" (0 0 0 0)) @@ -24176,7 +24206,7 @@ Coloring: ;;;### (autoloads nil "org" "org/org.el" (0 0 0 0)) ;;; Generated autoloads from org/org.el -(push (purecopy '(org 9 5 1)) package--builtin-versions) +(push (purecopy '(org 9 5 2)) package--builtin-versions) (autoload 'org-babel-do-load-languages "org" "\ Load the languages defined in `org-babel-load-languages'. @@ -24850,8 +24880,6 @@ Turning on outline mode calls the value of `text-mode-hook' and then of `outline-mode-hook', if they are non-nil. \(fn)" t nil) -(put 'outline-minor-mode-cycle 'safe-local-variable 'booleanp) -(put 'outline-minor-mode-highlight 'safe-local-variable 'symbolp) (autoload 'outline-minor-mode "outline" "\ Toggle Outline minor mode. @@ -25144,7 +25172,9 @@ short description. Return the version number of the package in which this is used. Assumes it is used from an Elisp file placed inside the top-level directory of an installed ELPA package. -The return value is a string (or nil in case we can't find it)." nil nil) +The return value is a string (or nil in case we can't find it). +It works in more cases if the call is in the file which contains +the `Version:' header." nil nil) (function-put 'package-get-version 'pure 't) @@ -27993,7 +28023,8 @@ evaluate `rectangle-mark-mode'. The mode's hook is called both when the mode is enabled and when it is disabled. -Activates the region if needed. Only lasts until the region is deactivated. +Activates the region if it's inactive and Transient Mark mode is +on. Only lasts until the region is next deactivated. \(fn &optional ARG)" t nil) @@ -28753,6 +28784,103 @@ Set PASSWORD to be used for retrieving mail from a POP or IMAP server. (register-definition-prefixes "rmail-spam-filter" '("rmail-" "rsf-")) +;;;*** + +;;;### (autoloads nil "rmailedit" "mail/rmailedit.el" (0 0 0 0)) +;;; Generated autoloads from mail/rmailedit.el + +(autoload 'rmail-edit-current-message "rmailedit" "\ +Edit the contents of this message." t nil) + +(register-definition-prefixes "rmailedit" '("rmail-")) + +;;;*** + +;;;### (autoloads nil "rmailkwd" "mail/rmailkwd.el" (0 0 0 0)) +;;; Generated autoloads from mail/rmailkwd.el + +(autoload 'rmail-add-label "rmailkwd" "\ +Add LABEL to labels associated with current RMAIL message. +Completes (see `rmail-read-label') over known labels when reading. +LABEL may be a symbol or string. Only one label is allowed. + +\(fn LABEL)" t nil) + +(autoload 'rmail-kill-label "rmailkwd" "\ +Remove LABEL from labels associated with current RMAIL message. +Completes (see `rmail-read-label') over known labels when reading. +LABEL may be a symbol or string. Only one label is allowed. + +\(fn LABEL)" t nil) + +(autoload 'rmail-read-label "rmailkwd" "\ +Read a label with completion, prompting with PROMPT. +Completions are chosen from `rmail-label-obarray'. The default +is `rmail-last-label', if that is non-nil. Updates `rmail-last-label' +according to the choice made, and returns a symbol. + +\(fn PROMPT)" nil nil) + +(autoload 'rmail-previous-labeled-message "rmailkwd" "\ +Show previous message with one of the labels LABELS. +LABELS should be a comma-separated list of label names. +If LABELS is empty, the last set of labels specified is used. +With prefix argument N moves backward N messages with these labels. + +\(fn N LABELS)" t nil) + +(autoload 'rmail-next-labeled-message "rmailkwd" "\ +Show next message with one of the labels LABELS. +LABELS should be a comma-separated list of label names. +If LABELS is empty, the last set of labels specified is used. +With prefix argument N moves forward N messages with these labels. + +\(fn N LABELS)" t nil) + +(register-definition-prefixes "rmailkwd" '("rmail-")) + +;;;*** + +;;;### (autoloads nil "rmailmm" "mail/rmailmm.el" (0 0 0 0)) +;;; Generated autoloads from mail/rmailmm.el + +(autoload 'rmail-mime "rmailmm" "\ +Toggle the display of a MIME message. + +The actual behavior depends on the value of `rmail-enable-mime'. + +If `rmail-enable-mime' is non-nil (the default), this command toggles +the display of a MIME message between decoded presentation form and +raw data. With optional prefix argument ARG, it toggles the display only +of the MIME entity at point, if there is one. The optional argument +STATE forces a particular display state, rather than toggling. +`raw' forces raw mode, any other non-nil value forces decoded mode. + +If `rmail-enable-mime' is nil, this creates a temporary \"*RMAIL*\" +buffer holding a decoded copy of the message. Inline content-types +are handled according to `rmail-mime-media-type-handlers-alist'. +By default, this displays text and multipart messages, and offers to +download attachments as specified by `rmail-mime-attachment-dirs-alist'. +The arguments ARG and STATE have no effect in this case. + +\(fn &optional ARG STATE)" t nil) + +(register-definition-prefixes "rmailmm" '("rmail-")) + +;;;*** + +;;;### (autoloads nil "rmailmsc" "mail/rmailmsc.el" (0 0 0 0)) +;;; Generated autoloads from mail/rmailmsc.el + +(autoload 'set-rmail-inbox-list "rmailmsc" "\ +Set the inbox list of the current RMAIL file to FILE-NAME. +You can specify one file name, or several names separated by commas. +If FILE-NAME is empty, remove any existing inbox list. + +This applies only to the current session. + +\(fn FILE-NAME)" t nil) + ;;;*** ;;;### (autoloads nil "rmailout" "mail/rmailout.el" (0 0 0 0)) @@ -28825,6 +28953,113 @@ than appending to it. Deletes the message after writing if (register-definition-prefixes "rmailout" '("rmail-")) +;;;*** + +;;;### (autoloads nil "rmailsort" "mail/rmailsort.el" (0 0 0 0)) +;;; Generated autoloads from mail/rmailsort.el + +(autoload 'rmail-sort-by-date "rmailsort" "\ +Sort messages of current Rmail buffer by \"Date\" header. +If prefix argument REVERSE is non-nil, sorts in reverse order. + +\(fn REVERSE)" t nil) + +(autoload 'rmail-sort-by-subject "rmailsort" "\ +Sort messages of current Rmail buffer by \"Subject\" header. +Ignores any \"Re: \" prefix. If prefix argument REVERSE is +non-nil, sorts in reverse order. + +\(fn REVERSE)" t nil) + +(autoload 'rmail-sort-by-author "rmailsort" "\ +Sort messages of current Rmail buffer by author. +This uses either the \"From\" or \"Sender\" header, downcased. +If prefix argument REVERSE is non-nil, sorts in reverse order. + +\(fn REVERSE)" t nil) + +(autoload 'rmail-sort-by-recipient "rmailsort" "\ +Sort messages of current Rmail buffer by recipient. +This uses either the \"To\" or \"Apparently-To\" header, downcased. +If prefix argument REVERSE is non-nil, sorts in reverse order. + +\(fn REVERSE)" t nil) + +(autoload 'rmail-sort-by-correspondent "rmailsort" "\ +Sort messages of current Rmail buffer by other correspondent. +This uses either the \"From\", \"Sender\", \"To\", or +\"Apparently-To\" header, downcased. Uses the first header not +excluded by `mail-dont-reply-to-names'. If prefix argument +REVERSE is non-nil, sorts in reverse order. + +\(fn REVERSE)" t nil) + +(autoload 'rmail-sort-by-lines "rmailsort" "\ +Sort messages of current Rmail buffer by the number of lines. +If prefix argument REVERSE is non-nil, sorts in reverse order. + +\(fn REVERSE)" t nil) + +(autoload 'rmail-sort-by-labels "rmailsort" "\ +Sort messages of current Rmail buffer by labels. +LABELS is a comma-separated list of labels. The order of these +labels specifies the order of messages: messages with the first +label come first, messages with the second label come second, and +so on. Messages that have none of these labels come last. +If prefix argument REVERSE is non-nil, sorts in reverse order. + +\(fn REVERSE LABELS)" t nil) + +(register-definition-prefixes "rmailsort" '("rmail-")) + +;;;*** + +;;;### (autoloads nil "rmailsum" "mail/rmailsum.el" (0 0 0 0)) +;;; Generated autoloads from mail/rmailsum.el + +(autoload 'rmail-summary "rmailsum" "\ +Display a summary of all messages, one line per message." t nil) + +(autoload 'rmail-summary-by-labels "rmailsum" "\ +Display a summary of all messages with one or more LABELS. +LABELS should be a string containing the desired labels, separated by commas. + +\(fn LABELS)" t nil) + +(autoload 'rmail-summary-by-recipients "rmailsum" "\ +Display a summary of all messages with the given RECIPIENTS. +Normally checks the To, From and Cc fields of headers; +but if PRIMARY-ONLY is non-nil (prefix arg given), + only look in the To and From fields. +RECIPIENTS is a regular expression. + +\(fn RECIPIENTS &optional PRIMARY-ONLY)" t nil) + +(autoload 'rmail-summary-by-regexp "rmailsum" "\ +Display a summary of all messages according to regexp REGEXP. +If the regular expression is found in the header of the message +\(including in the date and other lines, as well as the subject line), +Emacs will list the message in the summary. + +\(fn REGEXP)" t nil) + +(autoload 'rmail-summary-by-topic "rmailsum" "\ +Display a summary of all messages with the given SUBJECT. +Normally checks just the Subject field of headers; but with prefix +argument WHOLE-MESSAGE is non-nil, looks in the whole message. +SUBJECT is a regular expression. + +\(fn SUBJECT &optional WHOLE-MESSAGE)" t nil) + +(autoload 'rmail-summary-by-senders "rmailsum" "\ +Display a summary of all messages whose \"From\" field matches SENDERS. +SENDERS is a regular expression. The default for SENDERS matches the +sender of the current message. + +\(fn SENDERS)" t nil) + +(register-definition-prefixes "rmailsum" '("rmail-")) + ;;;*** ;;;### (autoloads nil "rmc" "emacs-lisp/rmc.el" (0 0 0 0)) @@ -28846,6 +29081,9 @@ the optional argument HELP-STRING. This argument is a string that should contain a more detailed description of all of the possible choices. `read-multiple-choice' will display that description in a help buffer if the user requests that. +If optional argument SHOW-HELP is non-nil, show the help screen +immediately, before any user input. If SHOW-HELP is a string, +use it as the name of the help buffer. This function translates user input into responses by consulting the bindings in `query-replace-map'; see the documentation of @@ -28872,7 +29110,9 @@ Usage example: (?s \"session only\") (?n \"no\"))) -\(fn PROMPT CHOICES &optional HELP-STRING)" nil nil) +\(fn PROMPT CHOICES &optional HELP-STRING SHOW-HELP)" nil nil) + +(register-definition-prefixes "rmc" '("rmc--")) ;;;*** @@ -32275,6 +32515,25 @@ Run vsql as an inferior process. (register-definition-prefixes "sql" '("sql-")) +;;;*** + +;;;### (autoloads nil "sqlite" "sqlite.el" (0 0 0 0)) +;;; Generated autoloads from sqlite.el + +(register-definition-prefixes "sqlite" '("with-sqlite-transaction")) + +;;;*** + +;;;### (autoloads nil "sqlite-mode" "sqlite-mode.el" (0 0 0 0)) +;;; Generated autoloads from sqlite-mode.el + +(autoload 'sqlite-mode-open-file "sqlite-mode" "\ +Browse the contents of an sqlite file. + +\(fn FILE)" t nil) + +(register-definition-prefixes "sqlite-mode" '("sqlite-")) + ;;;*** ;;;### (autoloads nil "srecode" "cedet/srecode.el" (0 0 0 0)) @@ -32907,6 +33166,32 @@ The variable `tab-width' controls the spacing of tab stops. ;;;### (autoloads nil "table" "textmodes/table.el" (0 0 0 0)) ;;; Generated autoloads from textmodes/table.el +(autoload 'table-fixed-width-mode "table" "\ +Cell width is fixed when this is non-nil. +Normally it should be nil for allowing automatic cell width expansion +that widens a cell when it is necessary. When non-nil, typing in a +cell does not automatically expand the cell width. A word that is too +long to fit in a cell is chopped into multiple lines. The chopped +location is indicated by `table-word-continuation-char'. This +variable's value can be toggled by \\[table-fixed-width-mode] at +run-time. + +This is a minor mode. If called interactively, toggle the +`Table-Fixed-Width mode' mode. If the prefix argument is positive, +enable the mode, and if it is zero or negative, disable the mode. + +If called from Lisp, toggle the mode if ARG is `toggle'. Enable the +mode if ARG is nil, omitted, or is a positive number. Disable the +mode if ARG is a negative number. + +To check whether the minor mode is enabled in the current buffer, +evaluate `table-fixed-width-mode'. + +The mode's hook is called both when the mode is enabled and when it is +disabled. + +\(fn &optional ARG)" t nil) + (autoload 'table-insert "table" "\ Insert an editable text table. Insert a table of specified number of COLUMNS and ROWS. Optional @@ -33235,32 +33520,6 @@ or `top', `middle', `bottom' or `none' for vertical. \(fn JUSTIFY)" t nil) -(autoload 'table-fixed-width-mode "table" "\ -Cell width is fixed when this is non-nil. -Normally it should be nil for allowing automatic cell width expansion -that widens a cell when it is necessary. When non-nil, typing in a -cell does not automatically expand the cell width. A word that is too -long to fit in a cell is chopped into multiple lines. The chopped -location is indicated by `table-word-continuation-char'. This -variable's value can be toggled by \\[table-fixed-width-mode] at -run-time. - -This is a minor mode. If called interactively, toggle the -`Table-Fixed-Width mode' mode. If the prefix argument is positive, -enable the mode, and if it is zero or negative, disable the mode. - -If called from Lisp, toggle the mode if ARG is `toggle'. Enable the -mode if ARG is nil, omitted, or is a positive number. Disable the -mode if ARG is a negative number. - -To check whether the minor mode is enabled in the current buffer, -evaluate `table-fixed-width-mode'. - -The mode's hook is called both when the mode is enabled and when it is -disabled. - -\(fn &optional ARG)" t nil) - (autoload 'table-query-dimension "table" "\ Return the dimension of the current cell and the current table. The result is a list (cw ch tw th c r cells) where cw is the cell @@ -34222,10 +34481,6 @@ Possibilities include `symbol', `list', `sexp', `defun', When the optional argument NO-PROPERTIES is non-nil, strip text properties from the return value. -If the current buffer uses fields (see Info node `(elisp)Fields'), -this function will narrow to the field before identifying the -thing at point. - See the file `thingatpt.el' for documentation on how to define a symbol as a valid THING. @@ -35192,7 +35447,7 @@ Discard Tramp from loading remote files." (interactive) (ignore-errors (unload-f (defvar tramp-archive-enabled (featurep 'dbusbind) "\ Non-nil when file archive support is available.") -(defconst tramp-archive-suffixes '("7z" "apk" "ar" "cab" "CAB" "cpio" "deb" "depot" "exe" "iso" "jar" "lzh" "LZH" "msu" "MSU" "mtree" "odb" "odf" "odg" "odp" "ods" "odt" "pax" "rar" "rpm" "shar" "tar" "tbz" "tgz" "tlz" "txz" "tzst" "warc" "xar" "xpi" "xps" "zip" "ZIP") "\ +(defconst tramp-archive-suffixes '("7z" "apk" "ar" "cab" "CAB" "cpio" "crate" "deb" "depot" "exe" "iso" "jar" "lzh" "LZH" "msu" "MSU" "mtree" "odb" "odf" "odg" "odp" "ods" "odt" "pax" "rar" "rpm" "shar" "tar" "tbz" "tgz" "tlz" "txz" "tzst" "warc" "xar" "xpi" "xps" "zip" "ZIP") "\ List of suffixes which indicate a file archive. It must be supported by libarchive(3).") @@ -35235,7 +35490,7 @@ Add archive file name handler to `file-name-handler-alist'." (when tramp-archive ;;;;;; 0)) ;;; Generated autoloads from net/tramp-compat.el -(register-definition-prefixes "tramp-compat" '("tramp-compat-")) +(register-definition-prefixes "tramp-compat" '("tramp-")) ;;;*** @@ -37143,7 +37398,7 @@ case, and the process object in the asynchronous case. (load "vc-git" nil t) (vc-git-registered file)))) -(register-definition-prefixes "vc-git" '("vc-git-")) +(register-definition-prefixes "vc-git" '("vc-")) ;;;*** @@ -39642,6 +39897,13 @@ Interactively, URL defaults to the string looking like a url around point. \(fn URL &optional NEW-SESSION)" t nil) +(autoload 'xwidget-webkit-bookmark-jump-handler "xwidget" "\ +Jump to the web page bookmarked by the bookmark record BOOKMARK. +If `xwidget-webkit-bookmark-jump-new-session' is non-nil, create +a new xwidget-webkit session, otherwise use an existing session. + +\(fn BOOKMARK)" nil nil) + (register-definition-prefixes "xwidget" '("xwidget-")) ;;;*** @@ -39707,23 +39969,24 @@ Zone out, completely." t nil) ;;;### (autoloads nil nil ("abbrev.el" "bindings.el" "buff-menu.el" ;;;;;; "button.el" "calc/calc-aent.el" "calc/calc-embed.el" "calc/calc-misc.el" -;;;;;; "calc/calc-yank.el" "case-table.el" "cedet/ede/cpp-root.el" -;;;;;; "cedet/ede/custom.el" "cedet/ede/dired.el" "cedet/ede/emacs.el" -;;;;;; "cedet/ede/files.el" "cedet/ede/generic.el" "cedet/ede/linux.el" -;;;;;; "cedet/ede/locate.el" "cedet/ede/make.el" "cedet/ede/speedbar.el" -;;;;;; "cedet/ede/system.el" "cedet/ede/util.el" "cedet/semantic/analyze.el" -;;;;;; "cedet/semantic/analyze/complete.el" "cedet/semantic/analyze/refs.el" -;;;;;; "cedet/semantic/bovine.el" "cedet/semantic/bovine/c-by.el" -;;;;;; "cedet/semantic/bovine/c.el" "cedet/semantic/bovine/el.el" -;;;;;; "cedet/semantic/bovine/gcc.el" "cedet/semantic/bovine/make-by.el" -;;;;;; "cedet/semantic/bovine/make.el" "cedet/semantic/bovine/scm-by.el" -;;;;;; "cedet/semantic/bovine/scm.el" "cedet/semantic/complete.el" -;;;;;; "cedet/semantic/ctxt.el" "cedet/semantic/db-file.el" "cedet/semantic/db-find.el" -;;;;;; "cedet/semantic/db-global.el" "cedet/semantic/db-mode.el" -;;;;;; "cedet/semantic/db-typecache.el" "cedet/semantic/db.el" "cedet/semantic/debug.el" -;;;;;; "cedet/semantic/decorate/include.el" "cedet/semantic/decorate/mode.el" -;;;;;; "cedet/semantic/dep.el" "cedet/semantic/doc.el" "cedet/semantic/edit.el" -;;;;;; "cedet/semantic/find.el" "cedet/semantic/format.el" "cedet/semantic/grammar-wy.el" +;;;;;; "calc/calc-yank.el" "case-table.el" "cedet/ede/base.el" "cedet/ede/config.el" +;;;;;; "cedet/ede/cpp-root.el" "cedet/ede/custom.el" "cedet/ede/dired.el" +;;;;;; "cedet/ede/emacs.el" "cedet/ede/files.el" "cedet/ede/generic.el" +;;;;;; "cedet/ede/linux.el" "cedet/ede/locate.el" "cedet/ede/make.el" +;;;;;; "cedet/ede/shell.el" "cedet/ede/speedbar.el" "cedet/ede/system.el" +;;;;;; "cedet/ede/util.el" "cedet/semantic/analyze.el" "cedet/semantic/analyze/complete.el" +;;;;;; "cedet/semantic/analyze/refs.el" "cedet/semantic/bovine.el" +;;;;;; "cedet/semantic/bovine/c-by.el" "cedet/semantic/bovine/c.el" +;;;;;; "cedet/semantic/bovine/el.el" "cedet/semantic/bovine/gcc.el" +;;;;;; "cedet/semantic/bovine/make-by.el" "cedet/semantic/bovine/make.el" +;;;;;; "cedet/semantic/bovine/scm-by.el" "cedet/semantic/bovine/scm.el" +;;;;;; "cedet/semantic/complete.el" "cedet/semantic/ctxt.el" "cedet/semantic/db-file.el" +;;;;;; "cedet/semantic/db-find.el" "cedet/semantic/db-global.el" +;;;;;; "cedet/semantic/db-mode.el" "cedet/semantic/db-typecache.el" +;;;;;; "cedet/semantic/db.el" "cedet/semantic/debug.el" "cedet/semantic/decorate/include.el" +;;;;;; "cedet/semantic/decorate/mode.el" "cedet/semantic/dep.el" +;;;;;; "cedet/semantic/doc.el" "cedet/semantic/edit.el" "cedet/semantic/find.el" +;;;;;; "cedet/semantic/format.el" "cedet/semantic/grammar-wy.el" ;;;;;; "cedet/semantic/grm-wy-boot.el" "cedet/semantic/html.el" ;;;;;; "cedet/semantic/ia-sb.el" "cedet/semantic/ia.el" "cedet/semantic/idle.el" ;;;;;; "cedet/semantic/imenu.el" "cedet/semantic/lex-spp.el" "cedet/semantic/lex.el" @@ -39742,78 +40005,65 @@ Zone out, completely." t nil) ;;;;;; "cedet/srecode/insert.el" "cedet/srecode/java.el" "cedet/srecode/map.el" ;;;;;; "cedet/srecode/mode.el" "cedet/srecode/srt-wy.el" "cedet/srecode/srt.el" ;;;;;; "cedet/srecode/template.el" "cedet/srecode/texi.el" "composite.el" -;;;;;; "cus-face.el" "cus-load.el" "cus-start.el" "custom.el" "dired-aux.el" -;;;;;; "dired-x.el" "electric.el" "emacs-lisp/backquote.el" "emacs-lisp/byte-run.el" +;;;;;; "cus-face.el" "cus-start.el" "custom.el" "dired-aux.el" "dired-x.el" +;;;;;; "electric.el" "emacs-lisp/backquote.el" "emacs-lisp/byte-run.el" ;;;;;; "emacs-lisp/cl-extra.el" "emacs-lisp/cl-macs.el" "emacs-lisp/cl-preloaded.el" -;;;;;; "emacs-lisp/cl-seq.el" "emacs-lisp/easymenu.el" "emacs-lisp/eieio-compat.el" -;;;;;; "emacs-lisp/eieio-custom.el" "emacs-lisp/eieio-opt.el" "emacs-lisp/float-sup.el" -;;;;;; "emacs-lisp/lisp-mode.el" "emacs-lisp/lisp.el" "emacs-lisp/macroexp.el" -;;;;;; "emacs-lisp/map-ynp.el" "emacs-lisp/nadvice.el" "emacs-lisp/shorthands.el" -;;;;;; "emacs-lisp/syntax.el" "emacs-lisp/timer.el" "env.el" "epa-hook.el" -;;;;;; "erc/erc-autoaway.el" "erc/erc-button.el" "erc/erc-capab.el" -;;;;;; "erc/erc-compat.el" "erc/erc-dcc.el" "erc/erc-desktop-notifications.el" -;;;;;; "erc/erc-ezbounce.el" "erc/erc-fill.el" "erc/erc-identd.el" -;;;;;; "erc/erc-imenu.el" "erc/erc-join.el" "erc/erc-list.el" "erc/erc-log.el" -;;;;;; "erc/erc-match.el" "erc/erc-menu.el" "erc/erc-netsplit.el" -;;;;;; "erc/erc-notify.el" "erc/erc-page.el" "erc/erc-pcomplete.el" -;;;;;; "erc/erc-replace.el" "erc/erc-ring.el" "erc/erc-services.el" -;;;;;; "erc/erc-sound.el" "erc/erc-speedbar.el" "erc/erc-spelling.el" -;;;;;; "erc/erc-stamp.el" "erc/erc-status-sidebar.el" "erc/erc-track.el" -;;;;;; "erc/erc-truncate.el" "erc/erc-xdcc.el" "eshell/em-alias.el" -;;;;;; "eshell/em-banner.el" "eshell/em-basic.el" "eshell/em-cmpl.el" -;;;;;; "eshell/em-dirs.el" "eshell/em-glob.el" "eshell/em-hist.el" -;;;;;; "eshell/em-ls.el" "eshell/em-pred.el" "eshell/em-prompt.el" -;;;;;; "eshell/em-rebind.el" "eshell/em-script.el" "eshell/em-smart.el" -;;;;;; "eshell/em-term.el" "eshell/em-tramp.el" "eshell/em-unix.el" -;;;;;; "eshell/em-xtra.el" "eshell/esh-groups.el" "faces.el" "files.el" -;;;;;; "finder-inf.el" "font-core.el" "font-lock.el" "format.el" +;;;;;; "emacs-lisp/cl-seq.el" "emacs-lisp/easymenu.el" "emacs-lisp/eieio-custom.el" +;;;;;; "emacs-lisp/eieio-opt.el" "emacs-lisp/float-sup.el" "emacs-lisp/lisp-mode.el" +;;;;;; "emacs-lisp/lisp.el" "emacs-lisp/macroexp.el" "emacs-lisp/map-ynp.el" +;;;;;; "emacs-lisp/nadvice.el" "emacs-lisp/shorthands.el" "emacs-lisp/syntax.el" +;;;;;; "emacs-lisp/timer.el" "env.el" "epa-hook.el" "erc/erc-autoaway.el" +;;;;;; "erc/erc-button.el" "erc/erc-capab.el" "erc/erc-compat.el" +;;;;;; "erc/erc-dcc.el" "erc/erc-desktop-notifications.el" "erc/erc-ezbounce.el" +;;;;;; "erc/erc-fill.el" "erc/erc-identd.el" "erc/erc-imenu.el" +;;;;;; "erc/erc-join.el" "erc/erc-list.el" "erc/erc-log.el" "erc/erc-match.el" +;;;;;; "erc/erc-menu.el" "erc/erc-netsplit.el" "erc/erc-notify.el" +;;;;;; "erc/erc-page.el" "erc/erc-pcomplete.el" "erc/erc-replace.el" +;;;;;; "erc/erc-ring.el" "erc/erc-services.el" "erc/erc-sound.el" +;;;;;; "erc/erc-speedbar.el" "erc/erc-spelling.el" "erc/erc-stamp.el" +;;;;;; "erc/erc-status-sidebar.el" "erc/erc-track.el" "erc/erc-truncate.el" +;;;;;; "erc/erc-xdcc.el" "eshell/em-alias.el" "eshell/em-banner.el" +;;;;;; "eshell/em-basic.el" "eshell/em-cmpl.el" "eshell/em-dirs.el" +;;;;;; "eshell/em-glob.el" "eshell/em-hist.el" "eshell/em-ls.el" +;;;;;; "eshell/em-pred.el" "eshell/em-prompt.el" "eshell/em-rebind.el" +;;;;;; "eshell/em-script.el" "eshell/em-smart.el" "eshell/em-term.el" +;;;;;; "eshell/em-tramp.el" "eshell/em-unix.el" "eshell/em-xtra.el" +;;;;;; "faces.el" "files.el" "font-core.el" "font-lock.el" "format.el" ;;;;;; "frame.el" "help.el" "hfy-cmap.el" "ibuf-ext.el" "indent.el" -;;;;;; "international/characters.el" "international/charprop.el" -;;;;;; "international/charscript.el" "international/cp51932.el" -;;;;;; "international/emoji-labels.el" "international/emoji-zwj.el" -;;;;;; "international/eucjp-ms.el" "international/iso-transl.el" -;;;;;; "international/mule-cmds.el" "international/mule-conf.el" -;;;;;; "international/mule.el" "international/uni-bidi.el" "international/uni-brackets.el" -;;;;;; "international/uni-category.el" "international/uni-combining.el" -;;;;;; "international/uni-comment.el" "international/uni-decimal.el" -;;;;;; "international/uni-decomposition.el" "international/uni-digit.el" -;;;;;; "international/uni-lowercase.el" "international/uni-mirrored.el" -;;;;;; "international/uni-name.el" "international/uni-numeric.el" -;;;;;; "international/uni-old-name.el" "international/uni-special-lowercase.el" -;;;;;; "international/uni-special-titlecase.el" "international/uni-special-uppercase.el" -;;;;;; "international/uni-titlecase.el" "international/uni-uppercase.el" -;;;;;; "isearch.el" "jit-lock.el" "jka-cmpr-hook.el" "keymap.el" -;;;;;; "language/burmese.el" "language/cham.el" "language/chinese.el" -;;;;;; "language/cyrillic.el" "language/czech.el" "language/english.el" -;;;;;; "language/ethiopic.el" "language/european.el" "language/georgian.el" -;;;;;; "language/greek.el" "language/hebrew.el" "language/indian.el" -;;;;;; "language/japanese.el" "language/khmer.el" "language/korean.el" -;;;;;; "language/lao.el" "language/misc-lang.el" "language/romanian.el" -;;;;;; "language/sinhala.el" "language/slovak.el" "language/tai-viet.el" -;;;;;; "language/thai.el" "language/tibetan.el" "language/utf-8-lang.el" -;;;;;; "language/vietnamese.el" "ldefs-boot.el" "leim/ja-dic/ja-dic.el" -;;;;;; "leim/leim-list.el" "leim/quail/4Corner.el" "leim/quail/ARRAY30.el" -;;;;;; "leim/quail/CCDOSPY.el" "leim/quail/CTLau-b5.el" "leim/quail/CTLau.el" -;;;;;; "leim/quail/ECDICT.el" "leim/quail/ETZY.el" "leim/quail/PY-b5.el" -;;;;;; "leim/quail/PY.el" "leim/quail/Punct-b5.el" "leim/quail/Punct.el" -;;;;;; "leim/quail/QJ-b5.el" "leim/quail/QJ.el" "leim/quail/SW.el" -;;;;;; "leim/quail/TONEPY.el" "leim/quail/ZIRANMA.el" "leim/quail/ZOZY.el" -;;;;;; "leim/quail/arabic.el" "leim/quail/cham.el" "leim/quail/compose.el" -;;;;;; "leim/quail/croatian.el" "leim/quail/cyril-jis.el" "leim/quail/cyrillic.el" -;;;;;; "leim/quail/czech.el" "leim/quail/georgian.el" "leim/quail/greek.el" -;;;;;; "leim/quail/hanja-jis.el" "leim/quail/hanja.el" "leim/quail/hanja3.el" -;;;;;; "leim/quail/hebrew.el" "leim/quail/ipa-praat.el" "leim/quail/latin-alt.el" -;;;;;; "leim/quail/latin-ltx.el" "leim/quail/latin-post.el" "leim/quail/latin-pre.el" -;;;;;; "leim/quail/persian.el" "leim/quail/programmer-dvorak.el" -;;;;;; "leim/quail/py-punct.el" "leim/quail/pypunct-b5.el" "leim/quail/quick-b5.el" -;;;;;; "leim/quail/quick-cns.el" "leim/quail/rfc1345.el" "leim/quail/sami.el" -;;;;;; "leim/quail/sgml-input.el" "leim/quail/slovak.el" "leim/quail/symbol-ksc.el" -;;;;;; "leim/quail/tamil-dvorak.el" "leim/quail/tsang-b5.el" "leim/quail/tsang-cns.el" -;;;;;; "leim/quail/vntelex.el" "leim/quail/vnvni.el" "leim/quail/welsh.el" -;;;;;; "loadup.el" "mail/blessmail.el" "mail/rmailedit.el" "mail/rmailkwd.el" -;;;;;; "mail/rmailmm.el" "mail/rmailmsc.el" "mail/rmailsort.el" -;;;;;; "mail/rmailsum.el" "mail/undigest.el" "menu-bar.el" "mh-e/mh-gnus.el" -;;;;;; "minibuffer.el" "mouse.el" "newcomment.el" "obarray.el" "org/ob-core.el" +;;;;;; "international/characters.el" "international/charscript.el" +;;;;;; "international/cp51932.el" "international/emoji-zwj.el" "international/eucjp-ms.el" +;;;;;; "international/iso-transl.el" "international/mule-cmds.el" +;;;;;; "international/mule-conf.el" "international/mule.el" "isearch.el" +;;;;;; "jit-lock.el" "jka-cmpr-hook.el" "keymap.el" "language/burmese.el" +;;;;;; "language/cham.el" "language/chinese.el" "language/cyrillic.el" +;;;;;; "language/czech.el" "language/english.el" "language/ethiopic.el" +;;;;;; "language/european.el" "language/georgian.el" "language/greek.el" +;;;;;; "language/hebrew.el" "language/indian.el" "language/japanese.el" +;;;;;; "language/khmer.el" "language/korean.el" "language/lao.el" +;;;;;; "language/misc-lang.el" "language/romanian.el" "language/sinhala.el" +;;;;;; "language/slovak.el" "language/tai-viet.el" "language/thai.el" +;;;;;; "language/tibetan.el" "language/utf-8-lang.el" "language/vietnamese.el" +;;;;;; "ldefs-boot.el" "leim/ja-dic/ja-dic.el" "leim/leim-list.el" +;;;;;; "leim/quail/4Corner.el" "leim/quail/ARRAY30.el" "leim/quail/CCDOSPY.el" +;;;;;; "leim/quail/CTLau-b5.el" "leim/quail/CTLau.el" "leim/quail/ECDICT.el" +;;;;;; "leim/quail/ETZY.el" "leim/quail/PY-b5.el" "leim/quail/PY.el" +;;;;;; "leim/quail/Punct-b5.el" "leim/quail/Punct.el" "leim/quail/QJ-b5.el" +;;;;;; "leim/quail/QJ.el" "leim/quail/SW.el" "leim/quail/TONEPY.el" +;;;;;; "leim/quail/ZIRANMA.el" "leim/quail/ZOZY.el" "leim/quail/arabic.el" +;;;;;; "leim/quail/cham.el" "leim/quail/compose.el" "leim/quail/croatian.el" +;;;;;; "leim/quail/cyril-jis.el" "leim/quail/cyrillic.el" "leim/quail/czech.el" +;;;;;; "leim/quail/georgian.el" "leim/quail/greek.el" "leim/quail/hanja-jis.el" +;;;;;; "leim/quail/hanja.el" "leim/quail/hanja3.el" "leim/quail/hebrew.el" +;;;;;; "leim/quail/ipa-praat.el" "leim/quail/latin-alt.el" "leim/quail/latin-ltx.el" +;;;;;; "leim/quail/latin-post.el" "leim/quail/latin-pre.el" "leim/quail/persian.el" +;;;;;; "leim/quail/programmer-dvorak.el" "leim/quail/py-punct.el" +;;;;;; "leim/quail/pypunct-b5.el" "leim/quail/quick-b5.el" "leim/quail/quick-cns.el" +;;;;;; "leim/quail/rfc1345.el" "leim/quail/sami.el" "leim/quail/sgml-input.el" +;;;;;; "leim/quail/slovak.el" "leim/quail/symbol-ksc.el" "leim/quail/tamil-dvorak.el" +;;;;;; "leim/quail/tsang-b5.el" "leim/quail/tsang-cns.el" "leim/quail/vntelex.el" +;;;;;; "leim/quail/vnvni.el" "leim/quail/welsh.el" "loadup.el" "mail/blessmail.el" +;;;;;; "mail/undigest.el" "menu-bar.el" "mh-e/mh-gnus.el" "minibuffer.el" +;;;;;; "mouse.el" "newcomment.el" "obarray.el" "org/ob-core.el" ;;;;;; "org/ob-lob.el" "org/ob-matlab.el" "org/ob-tangle.el" "org/ob.el" ;;;;;; "org/ol-bbdb.el" "org/ol-irc.el" "org/ol.el" "org/org-archive.el" ;;;;;; "org/org-attach.el" "org/org-clock.el" "org/org-colview.el" commit 376d6cf36a073cf724f9dd2be58da813bc40ecf5 Author: Po Lu Date: Sat Jan 1 06:16:59 2022 +0000 Implement numeric values of `mouse-highlight' on Haiku * src/haikuterm.c (haiku_read_socket): Clear mouse face on keyboard input if `mouse-highlight' is a fixnum. diff --git a/src/haikuterm.c b/src/haikuterm.c index 574bf40f7b..676c2e2148 100644 --- a/src/haikuterm.c +++ b/src/haikuterm.c @@ -2693,11 +2693,24 @@ haiku_read_socket (struct terminal *terminal, struct input_event *hold_quit) case KEY_DOWN: { struct haiku_key_event *b = buf; + Mouse_HLInfo *hlinfo = &x_display_list->mouse_highlight; struct frame *f = haiku_window_to_frame (b->window); int non_ascii_p; if (!f) continue; + /* If mouse-highlight is an integer, input clears out + mouse highlighting. */ + if (!hlinfo->mouse_face_hidden && FIXNUMP (Vmouse_highlight) + && (f == 0 + || !EQ (f->tool_bar_window, hlinfo->mouse_face_window) + || !EQ (f->tab_bar_window, hlinfo->mouse_face_window))) + { + clear_mouse_face (hlinfo); + hlinfo->mouse_face_hidden = true; + need_flush = 1; + } + inev.code = b->unraw_mb_char; BMapKey (b->kc, &non_ascii_p, &inev.code); @@ -2738,6 +2751,7 @@ haiku_read_socket (struct terminal *terminal, struct input_event *hold_quit) { struct haiku_mouse_motion_event *b = buf; struct frame *f = haiku_window_to_frame (b->window); + Mouse_HLInfo *hlinfo = &x_display_list->mouse_highlight; if (!f) continue; @@ -2748,6 +2762,13 @@ haiku_read_socket (struct terminal *terminal, struct input_event *hold_quit) x_display_list->last_mouse_movement_time = time (NULL); button_or_motion_p = 1; + if (hlinfo->mouse_face_hidden) + { + hlinfo->mouse_face_hidden = false; + clear_mouse_face (hlinfo); + need_flush = 1; + } + if (b->just_exited_p) { Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f); commit e7f25b95f433a74f11012c4c1a261b1052407c5c Author: Stefan Kangas Date: Sat Jan 1 06:56:33 2022 +0100 Update publicsuffix.txt from upstream * etc/publicsuffix.txt: Update from https://publicsuffix.org/list/public_suffix_list.dat dated 2021-12-31 02:56:06 UTC. diff --git a/etc/publicsuffix.txt b/etc/publicsuffix.txt index 5529554d82..fb018d626a 100644 --- a/etc/publicsuffix.txt +++ b/etc/publicsuffix.txt @@ -7132,7 +7132,7 @@ org.zw // newGTLDs -// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2021-11-13T15:12:42Z +// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2021-12-30T15:13:57Z // This list is auto-generated, don't edit it manually. // aaa : 2015-02-26 American Automobile Association, Inc. aaa @@ -7197,9 +7197,6 @@ aeg // aetna : 2015-05-21 Aetna Life Insurance Company aetna -// afamilycompany : 2015-07-23 Johnson Shareholdings, Inc. -afamilycompany - // afl : 2014-10-02 Australian Football League afl @@ -7530,7 +7527,7 @@ bosch // bostik : 2015-05-28 Bostik SA bostik -// boston : 2015-12-10 Boston TLD Management, LLC +// boston : 2015-12-10 Registry Services, LLC boston // bot : 2014-12-18 Amazon Registry Services, Inc. @@ -8016,9 +8013,6 @@ dtv // dubai : 2015-01-01 Dubai Smart Government Department dubai -// duck : 2015-07-23 Johnson Shareholdings, Inc. -duck - // dunlop : 2015-07-02 The Goodyear Tire & Rubber Company dunlop @@ -8346,9 +8340,6 @@ gives // giving : 2014-11-13 Giving Limited giving -// glade : 2015-07-23 Johnson Shareholdings, Inc. -glade - // glass : 2013-11-07 Binky Moon, LLC glass @@ -8880,9 +8871,6 @@ live // living : 2015-07-30 Lifestyle Domain Holdings, Inc. living -// lixil : 2015-03-19 LIXIL Group Corporation -lixil - // llc : 2017-12-14 Afilias Limited llc @@ -9021,7 +9009,7 @@ menu // merckmsd : 2016-07-14 MSD Registry Holdings, Inc. merckmsd -// miami : 2013-12-19 Minds + Machines Group Limited +// miami : 2013-12-19 Registry Services, LLC miami // microsoft : 2014-12-18 Microsoft Corporation @@ -9216,9 +9204,6 @@ obi // observer : 2015-04-30 Dog Beach, LLC observer -// off : 2015-07-23 Johnson Shareholdings, Inc. -off - // office : 2015-03-12 Microsoft Corporation office @@ -9462,9 +9447,6 @@ racing // radio : 2016-07-21 European Broadcasting Union (EBU) radio -// raid : 2015-07-23 Johnson Shareholdings, Inc. -raid - // read : 2014-12-18 Amazon Registry Services, Inc. read @@ -9669,9 +9651,6 @@ schwarz // science : 2014-09-11 dot Science Limited science -// scjohnson : 2015-07-23 Johnson Shareholdings, Inc. -scjohnson - // scot : 2014-01-23 Dot Scot Registry Limited scot @@ -10873,6 +10852,18 @@ rs.ba app.banzaicloud.io *.backyards.banzaicloud.io +// BASE, Inc. : https://binc.jp +// Submitted by Yuya NAGASAWA +base.ec +official.ec +buyshop.jp +fashionstore.jp +handcrafted.jp +kawaiishop.jp +supersale.jp +theshop.jp +shopselect.net +base.shop // BetaInABox // Submitted by Adrian @@ -11658,6 +11649,10 @@ tuleap-partners.com onred.one staging.onred.one +// encoway GmbH : https://www.encoway.de +// Submitted by Marcel Daus +eu.encoway.cloud + // EU.org https://eu.org/ // Submitted by Pierre Beyssac eu.org @@ -12187,6 +12182,7 @@ herokussl.com // Hibernating Rhinos // Submitted by Oren Eini +ravendb.cloud myravendb.com ravendb.community ravendb.me @@ -12201,6 +12197,11 @@ homesklep.pl // Submitted by SECaaS Team secaas.hk +// Hoplix : https://www.hoplix.com +// Submitted by Danilo De Franco +hoplix.shop + + // HOSTBIP REGISTRY : https://www.hostbip.com/ // Submitted by Atanunu Igbunuroghene orx.biz @@ -12446,6 +12447,10 @@ uni5.net // Submitted by Roy Keene knightpoint.systems +// KoobinEvent, SL: https://www.koobin.com +// Submitted by Iván Oliva +koobin.events + // KUROKU LTD : https://kuroku.ltd/ // Submitted by DisposaBoy oya.to @@ -12714,6 +12719,10 @@ that.win from.work to.work +// Net at Work Gmbh : https://www.netatwork.de +// Submitted by Jan Jaeschke +cloud.nospamproxy.com + // Netlify : https://www.netlify.com // Submitted by Jessica Parsons netlify.app @@ -12873,11 +12882,6 @@ zapto.org // Submitted by Konstantin Nosov stage.nodeart.io -// Nodum B.V. : https://nodum.io/ -// Submitted by Wietse Wind -nodum.co -nodum.io - // Nucleos Inc. : https://nucleos.com // Submitted by Piotr Zduniak pcloud.host @@ -13478,7 +13482,8 @@ sopot.pl // Teckids e.V. : https://www.teckids.org // Submitted by Dominik George -edugit.org +edugit.io +s3.teckids.org // Telebit : https://telebit.cloud // Submitted by AJ ONeal @@ -13576,6 +13581,10 @@ syno-ds.de synology-diskstation.de synology-ds.de +// Typeform : https://www.typeform.com +// Submitted by Sergi Ferriz +pro.typeform.com + // Uberspace : https://uberspace.de // Submitted by Moritz Werner uber.space commit 78066671c04b09e57cb82ded6b5d29baee7f5f6b Merge: 48bd406793 67400da412 Author: Stefan Kangas Date: Sat Jan 1 06:51:58 2022 +0100 Merge from origin/emacs-28 67400da412 Improve doc strings of fringe indicator variables a6adfe21e4 * lisp/tab-line.el (tab-line--get-tab-property): New funct... commit 48bd406793c60a95bd23b15f3c5f7c9f2f228db2 Merge: 1d92f6094c 89f205084b Author: Stefan Kangas Date: Sat Jan 1 06:51:58 2022 +0100 ; Merge from origin/emacs-28 The following commit was skipped: 89f205084b Avoid assertion violations with variable-weight fonts commit 1d92f6094c96de83de8aa3c15a64cef656a63dcc Merge: 57753ed761 f2031d0ddb Author: Stefan Kangas Date: Sat Jan 1 06:51:56 2022 +0100 Merge from origin/emacs-28 f2031d0ddb Minor improvement in user documentation of completion style 1e3076e2db Fix bug where bookmark-jump used (point), not (point-at-bol) commit 57753ed76146c14b69716837083842a9c84d5b09 Merge: d7e1ed17d9 4d1968b4c9 Author: Po Lu Date: Sat Jan 1 05:36:23 2022 +0000 Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs commit d7e1ed17d9d60ab0fe306d1216f695fd96d51956 Author: Po Lu Date: Sat Jan 1 05:32:42 2022 +0000 Flush frames after mouse face is cleared on a child frame in Haiku * src/haiku_support.cc (~EmacsWindow): (UpwardsSubsetChildren): (UpwardsUnSubsetChildren): Fix locking semantics. * src/haikuterm.c (haiku_read_socket): Flush dirty back buffers after clearing mouse face because the pointer was moved out of a frame. diff --git a/src/haiku_support.cc b/src/haiku_support.cc index dae0825bd2..32e61d9660 100644 --- a/src/haiku_support.cc +++ b/src/haiku_support.cc @@ -259,7 +259,10 @@ class EmacsWindow : public BWindow struct child_frame *next; for (struct child_frame *f = subset_windows; f; f = next) { + if (f->window->LockLooper ()) + gui_abort ("Failed to lock looper for unparent"); f->window->Unparent (); + f->window->UnlockLooper (); next = f->next; delete f; } @@ -279,6 +282,8 @@ class EmacsWindow : public BWindow void UpwardsSubsetChildren (EmacsWindow *w) { + if (!LockLooper ()) + gui_abort ("Failed to lock looper for subset"); if (!child_frame_lock.Lock ()) gui_abort ("Failed to lock child frame state lock"); UpwardsSubset (w); @@ -286,6 +291,7 @@ class EmacsWindow : public BWindow f = f->next) f->window->UpwardsSubsetChildren (w); child_frame_lock.Unlock (); + UnlockLooper (); } void @@ -298,6 +304,8 @@ class EmacsWindow : public BWindow void UpwardsUnSubsetChildren (EmacsWindow *w) { + if (!LockLooper ()) + gui_abort ("Failed to lock looper for unsubset"); if (!child_frame_lock.Lock ()) gui_abort ("Failed to lock child frame state lock"); UpwardsUnSubset (w); @@ -305,6 +313,7 @@ class EmacsWindow : public BWindow f = f->next) f->window->UpwardsUnSubsetChildren (w); child_frame_lock.Unlock (); + UnlockLooper (); } void diff --git a/src/haikuterm.c b/src/haikuterm.c index 9b54e50b61..574bf40f7b 100644 --- a/src/haikuterm.c +++ b/src/haikuterm.c @@ -2757,6 +2757,8 @@ haiku_read_socket (struct terminal *terminal, struct input_event *hold_quit) certainly no longer on any text in the frame. */ clear_mouse_face (hlinfo); hlinfo->mouse_face_mouse_frame = 0; + + need_flush = 1; } haiku_new_focus_frame (x_display_list->focused_frame); commit 4d1968b4c9eb1d42c125b4536e3b4543b91f3634 Author: Po Lu Date: Sat Jan 1 08:54:51 2022 +0800 Print dead xwidgets specially * src/print.c (print_vectorlike) : Print "killed xwidget" for dead xwidgets. diff --git a/src/print.c b/src/print.c index 214f1d12c1..9f3d8317ae 100644 --- a/src/print.c +++ b/src/print.c @@ -1524,16 +1524,21 @@ print_vectorlike (Lisp_Object obj, Lisp_Object printcharfun, bool escapeflag, case PVEC_XWIDGET: #ifdef HAVE_XWIDGETS { + if (NILP (XXWIDGET (obj)->buffer)) + print_c_string ("#", printcharfun); + else + { #ifdef USE_GTK - int len = sprintf (buf, "#", - XXWIDGET (obj)->xwidget_id, - XXWIDGET (obj)->widget_osr); + int len = sprintf (buf, "#", + XXWIDGET (obj)->xwidget_id, + XXWIDGET (obj)->widget_osr); #else - int len = sprintf (buf, "#", - XXWIDGET (obj)->xwidget_id, - XXWIDGET (obj)->xwWidget); + int len = sprintf (buf, "#", + XXWIDGET (obj)->xwidget_id, + XXWIDGET (obj)->xwWidget); #endif - strout (buf, len, len, printcharfun); + strout (buf, len, len, printcharfun); + } break; } #else commit 67400da412d8939a42ad6b88c9e6a07979a8f46f Author: Eli Zaretskii Date: Fri Dec 31 21:58:42 2021 +0200 Improve doc strings of fringe indicator variables * src/buffer.c (syms_of_buffer): Fix doc strings of 'indicate-empty-lines' and 'indicate-buffer-boundaries'. diff --git a/src/buffer.c b/src/buffer.c index eca2843e2b..32982976d2 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -6018,15 +6018,16 @@ specifies. */); DEFVAR_PER_BUFFER ("indicate-empty-lines", &BVAR (current_buffer, indicate_empty_lines), Qnil, - doc: /* Visually indicate empty lines after the buffer end. -If non-nil, a bitmap is displayed in the left fringe of a window on -window-systems. */); + doc: /* Visually indicate unused ("empty") screen lines after the buffer end. +If non-nil, a bitmap is displayed in the left fringe of a window +on graphical displays for each screen line that doesn't correspond +to any buffer text. */); DEFVAR_PER_BUFFER ("indicate-buffer-boundaries", &BVAR (current_buffer, indicate_buffer_boundaries), Qnil, doc: /* Visually indicate buffer boundaries and scrolling. If non-nil, the first and last line of the buffer are marked in the fringe -of a window on window-systems with angle bitmaps, or if the window can be +of a window on graphical displays with angle bitmaps, or if the window can be scrolled, the top and bottom line of the window are marked with up and down arrow bitmaps. commit 4521a3a19c123c43f4bb7ad21a94456434ef81f4 Author: Stefan Kangas Date: Fri Dec 31 17:17:16 2021 +0100 Use defvar-keymap in play/*.el * lisp/play/5x5.el (5x5-mode-map): * lisp/play/blackbox.el (blackbox-mode-map): * lisp/play/bubbles.el (bubbles-mode-map): * lisp/play/decipher.el (decipher-mode-map): * lisp/play/doctor.el (doctor-mode-map): * lisp/play/gametree.el (gametree-mode-map): * lisp/play/gomoku.el (gomoku-mode-map): * lisp/play/mpuz.el (mpuz-mode-map): * lisp/play/pong.el (pong-mode-map): * lisp/play/solitaire.el (solitaire-mode-map): Use defvar-keymap. diff --git a/lisp/play/5x5.el b/lisp/play/5x5.el index 085c97f5d8..155c08f0ad 100644 --- a/lisp/play/5x5.el +++ b/lisp/play/5x5.el @@ -107,39 +107,37 @@ (defvar 5x5-buffer-name "*5x5*" "Name of the 5x5 play buffer.") -(defvar 5x5-mode-map - (let ((map (make-sparse-keymap))) - (suppress-keymap map t) - (define-key map "?" #'describe-mode) - (define-key map "\r" #'5x5-flip-current) - (define-key map " " #'5x5-flip-current) - (define-key map [up] #'5x5-up) - (define-key map [down] #'5x5-down) - (define-key map [left] #'5x5-left) - (define-key map [tab] #'5x5-right) - (define-key map [right] #'5x5-right) - (define-key map [(control a)] #'5x5-bol) - (define-key map [(control e)] #'5x5-eol) - (define-key map [(control p)] #'5x5-up) - (define-key map [(control n)] #'5x5-down) - (define-key map [(control b)] #'5x5-left) - (define-key map [(control f)] #'5x5-right) - (define-key map [home] #'5x5-bol) - (define-key map [end] #'5x5-eol) - (define-key map [prior] #'5x5-first) - (define-key map [next] #'5x5-last) - (define-key map "r" #'5x5-randomize) - (define-key map [(control c) (control r)] #'5x5-crack-randomly) - (define-key map [(control c) (control c)] #'5x5-crack-mutating-current) - (define-key map [(control c) (control b)] #'5x5-crack-mutating-best) - (define-key map [(control c) (control x)] #'5x5-crack-xor-mutate) - (define-key map "n" #'5x5-new-game) - (define-key map "s" #'5x5-solve-suggest) - (define-key map "<" #'5x5-solve-rotate-left) - (define-key map ">" #'5x5-solve-rotate-right) - (define-key map "q" #'5x5-quit-game) - map) - "Local keymap for the 5x5 game.") +(defvar-keymap 5x5-mode-map + :doc "Local keymap for the 5x5 game." + :suppress 'nodigits + "?" #'describe-mode + "RET" #'5x5-flip-current + "SPC" #'5x5-flip-current + "" #'5x5-up + "" #'5x5-down + "" #'5x5-left + "" #'5x5-right + "" #'5x5-right + "C-a" #'5x5-bol + "C-e" #'5x5-eol + "C-p" #'5x5-up + "C-n" #'5x5-down + "C-b" #'5x5-left + "C-f" #'5x5-right + "" #'5x5-bol + "" #'5x5-eol + "" #'5x5-first + "" #'5x5-last + "r" #'5x5-randomize + "C-c C-r" #'5x5-crack-randomly + "C-c C-c" #'5x5-crack-mutating-current + "C-c C-b" #'5x5-crack-mutating-best + "C-c C-x" #'5x5-crack-xor-mutate + "n" #'5x5-new-game + "s" #'5x5-solve-suggest + "<" #'5x5-solve-rotate-left + ">" #'5x5-solve-rotate-right + "q" #'5x5-quit-game) (defvar-local 5x5-solver-output nil "List that is the output of an arithmetic solver. diff --git a/lisp/play/blackbox.el b/lisp/play/blackbox.el index 1b82d1a425..d937550208 100644 --- a/lisp/play/blackbox.el +++ b/lisp/play/blackbox.el @@ -85,23 +85,21 @@ (defvar bb-balls-placed nil "List of already placed balls.") -(defvar blackbox-mode-map - (let ((map (make-sparse-keymap))) - (suppress-keymap map t) - (define-key map " " 'bb-romp) - (define-key map "q" 'bury-buffer) - (define-key map [insert] 'bb-romp) - (define-key map [return] 'bb-done) - (define-key map [remap backward-char] #'bb-left) - (define-key map [remap left-char] #'bb-left) - (define-key map [remap forward-char] #'bb-right) - (define-key map [remap right-char] #'bb-right) - (define-key map [remap previous-line] #'bb-up) - (define-key map [remap next-line] #'bb-down) - (define-key map [remap move-end-of-line] #'bb-eol) - (define-key map [remap move-beginning-of-line] #'bb-bol) - (define-key map [remap newline] #'bb-done) - map)) +(defvar-keymap blackbox-mode-map + :suppress 'nodigits + "SPC" #'bb-romp + "q" #'bury-buffer + "" #'bb-romp + "" #'bb-done + " " #'bb-left + " " #'bb-left + " " #'bb-right + " " #'bb-right + " " #'bb-up + " " #'bb-down + " " #'bb-eol + " " #'bb-bol + " " #'bb-done) ;; Blackbox mode is suitable only for specially formatted data. diff --git a/lisp/play/bubbles.el b/lisp/play/bubbles.el index e695a75e08..471dea8d58 100644 --- a/lisp/play/bubbles.el +++ b/lisp/play/bubbles.el @@ -809,22 +809,21 @@ static char * dot3d_xpm[] = { (bubbles--update-faces-or-images)) -(defvar bubbles-mode-map - (let ((map (make-sparse-keymap 'bubbles-mode-map))) - ;; (suppress-keymap map t) - (define-key map "q" 'bubbles-quit) - (define-key map "\n" 'bubbles-plop) - (define-key map " " 'bubbles-plop) - (define-key map [double-down-mouse-1] 'bubbles-plop) - (define-key map [mouse-2] 'bubbles-plop) - (define-key map "\C-m" 'bubbles-plop) - (define-key map "u" 'bubbles-undo) - (define-key map "p" 'previous-line) - (define-key map "n" 'next-line) - (define-key map "f" 'forward-char) - (define-key map "b" 'backward-char) - map) - "Mode map for `bubbles'.") +(defvar-keymap bubbles-mode-map + :doc "Mode map for `bubbles'." + :name 'bubbles-mode-map + "q" #'bubbles-quit + "C-j" #'bubbles-plop + "SPC" #'bubbles-plop + "C-m" #'bubbles-plop + "u" #'bubbles-undo + "p" #'previous-line + "n" #'next-line + "f" #'forward-char + "b" #'backward-char + + "" #'bubbles-plop + "" #'bubbles-plop) (easy-menu-define bubbles-menu bubbles-mode-map "Menu for `bubbles'." diff --git a/lisp/play/decipher.el b/lisp/play/decipher.el index 5431d7f068..613f254fd2 100644 --- a/lisp/play/decipher.el +++ b/lisp/play/decipher.el @@ -138,36 +138,31 @@ the tail of the list." (2 font-lock-string-face))) "Font Lock keywords for Decipher mode.") -(defvar decipher-mode-map - (let ((map (make-keymap))) - (suppress-keymap map) - (define-key map "A" #'decipher-show-alphabet) - (define-key map "C" #'decipher-complete-alphabet) - (define-key map "D" #'decipher-digram-list) - (define-key map "F" #'decipher-frequency-count) - (define-key map "M" #'decipher-make-checkpoint) - (define-key map "N" #'decipher-adjacency-list) - (define-key map "R" #'decipher-restore-checkpoint) - (define-key map "U" #'decipher-undo) - (define-key map " " #'decipher-keypress) - (define-key map [remap undo] #'decipher-undo) - (define-key map [remap advertised-undo] #'decipher-undo) - (let ((key ?a)) - (while (<= key ?z) - (define-key map (vector key) #'decipher-keypress) - (cl-incf key))) - map) - "Keymap for Decipher mode.") - - -(defvar decipher-stats-mode-map - (let ((map (make-keymap))) - (suppress-keymap map) - (define-key map "D" #'decipher-digram-list) - (define-key map "F" #'decipher-frequency-count) - (define-key map "N" #'decipher-adjacency-list) - map) - "Keymap for Decipher-Stats mode.") +(defvar-keymap decipher-mode-map + :doc "Keymap for Decipher mode." + :suppress t + "A" #'decipher-show-alphabet + "C" #'decipher-complete-alphabet + "D" #'decipher-digram-list + "F" #'decipher-frequency-count + "M" #'decipher-make-checkpoint + "N" #'decipher-adjacency-list + "R" #'decipher-restore-checkpoint + "U" #'decipher-undo + "SPC" #'decipher-keypress + " " #'decipher-undo + " " #'decipher-undo) +(let ((key ?a)) + (while (<= key ?z) + (keymap-set decipher-mode-map (char-to-string key) #'decipher-keypress) + (cl-incf key))) + +(defvar-keymap decipher-stats-mode-map + :doc "Keymap for Decipher-Stats mode." + :suppress t + "D" #'decipher-digram-list + "F" #'decipher-frequency-count + "N" #'decipher-adjacency-list) (defvar decipher-mode-syntax-table diff --git a/lisp/play/doctor.el b/lisp/play/doctor.el index 33fecaa188..e45619d1c7 100644 --- a/lisp/play/doctor.el +++ b/lisp/play/doctor.el @@ -126,11 +126,9 @@ (set what ww) first)) -(defvar doctor-mode-map - (let ((map (make-sparse-keymap))) - (define-key map "\n" 'doctor-read-print) - (define-key map "\r" 'doctor-ret-or-read) - map)) +(defvar-keymap doctor-mode-map + "C-j" #'doctor-read-print + "RET" #'doctor-ret-or-read) (define-derived-mode doctor-mode text-mode "Doctor" "Major mode for running the Doctor (Eliza) program. diff --git a/lisp/play/gametree.el b/lisp/play/gametree.el index ff4b97d884..b7ebe3dcd3 100644 --- a/lisp/play/gametree.el +++ b/lisp/play/gametree.el @@ -580,26 +580,20 @@ buffer, it is replaced by the new value. See the documentation for ;;;; Key bindings -(defvar gametree-mode-map - (let ((map (make-sparse-keymap))) - (define-key map "\C-c\C-j" 'gametree-break-line-here) - (define-key map "\C-c\C-v" 'gametree-insert-new-leaf) - (define-key map "\C-c\C-m" 'gametree-merge-line) - (define-key map "\C-c\C-r " 'gametree-layout-to-register) - (define-key map "\C-c\C-r/" 'gametree-layout-to-register) - (define-key map "\C-c\C-rj" 'gametree-apply-register-layout) - (define-key map "\C-c\C-y" 'gametree-save-and-hack-layout) - (define-key map "\C-c;" 'gametree-insert-score) - (define-key map "\C-c^" 'gametree-compute-and-insert-score) - (define-key map [M-down-mouse-2 M-mouse-2] - #'gametree-mouse-break-line-here) - (define-key map [S-down-mouse-1 S-mouse-1] - #'gametree-mouse-show-children-and-entry) - (define-key map [S-down-mouse-2 S-mouse-2] - #'gametree-mouse-show-subtree) - (define-key map [S-down-mouse-3 S-mouse-3] - #'gametree-mouse-hide-subtree) - map)) +(defvar-keymap gametree-mode-map + "C-c C-j" #'gametree-break-line-here + "C-c C-v" #'gametree-insert-new-leaf + "C-c C-m" #'gametree-merge-line + "C-c C-r SPC" #'gametree-layout-to-register + "C-c C-r /" #'gametree-layout-to-register + "C-c C-r j" #'gametree-apply-register-layout + "C-c C-y" #'gametree-save-and-hack-layout + "C-c ;" #'gametree-insert-score + "C-c ^" #'gametree-compute-and-insert-score + "M- M-" #'gametree-mouse-break-line-here + "S- S-" #'gametree-mouse-show-children-and-entry + "S- S-" #'gametree-mouse-show-subtree + "S- S-" #'gametree-mouse-hide-subtree) (define-derived-mode gametree-mode outline-mode "GameTree" "Major mode for managing game analysis trees. diff --git a/lisp/play/gomoku.el b/lisp/play/gomoku.el index 0a45885b87..97726fcad7 100644 --- a/lisp/play/gomoku.el +++ b/lisp/play/gomoku.el @@ -100,65 +100,61 @@ SHOULD be at least 2 (MUST BE at least 1).") "Number of lines between the Gomoku board and the top of the window.") -(defvar gomoku-mode-map - (let ((map (make-sparse-keymap))) - - ;; Key bindings for cursor motion. - (define-key map "y" 'gomoku-move-nw) ; y - (define-key map "u" 'gomoku-move-ne) ; u - (define-key map "b" 'gomoku-move-sw) ; b - (define-key map "n" 'gomoku-move-se) ; n - (define-key map "h" 'gomoku-move-left) ; h - (define-key map "l" 'gomoku-move-right) ; l - (define-key map "j" 'gomoku-move-down) ; j - (define-key map "k" 'gomoku-move-up) ; k - - (define-key map [kp-7] 'gomoku-move-nw) - (define-key map [kp-9] 'gomoku-move-ne) - (define-key map [kp-1] 'gomoku-move-sw) - (define-key map [kp-3] 'gomoku-move-se) - (define-key map [kp-4] 'gomoku-move-left) - (define-key map [kp-6] 'gomoku-move-right) - (define-key map [kp-2] 'gomoku-move-down) - (define-key map [kp-8] 'gomoku-move-up) - - (define-key map "\C-b" 'gomoku-move-left) ; C-b - (define-key map "\C-f" 'gomoku-move-right) ; C-f - (define-key map "\C-n" 'gomoku-move-down) ; C-n - (define-key map "\C-p" 'gomoku-move-up) ; C-p - - ;; Key bindings for entering Human moves. - (define-key map "X" 'gomoku-human-plays) ; X - (define-key map "x" 'gomoku-human-plays) ; x - (define-key map " " 'gomoku-human-plays) ; SPC - (define-key map "\C-m" 'gomoku-human-plays) ; RET - (define-key map "\C-c\C-p" 'gomoku-human-plays) ; C-c C-p - (define-key map "\C-c\C-b" 'gomoku-human-takes-back) ; C-c C-b - (define-key map "\C-c\C-r" 'gomoku-human-resigns) ; C-c C-r - (define-key map "\C-c\C-e" 'gomoku-emacs-plays) ; C-c C-e - - (define-key map [kp-enter] 'gomoku-human-plays) - (define-key map [insert] 'gomoku-human-plays) - (define-key map [down-mouse-1] 'gomoku-click) - (define-key map [drag-mouse-1] 'gomoku-click) - (define-key map [mouse-1] 'gomoku-click) - (define-key map [down-mouse-2] 'gomoku-click) - (define-key map [mouse-2] 'gomoku-mouse-play) - (define-key map [drag-mouse-2] 'gomoku-mouse-play) - - (define-key map [remap backward-char] 'gomoku-move-left) - (define-key map [remap left-char] 'gomoku-move-left) - (define-key map [remap forward-char] 'gomoku-move-right) - (define-key map [remap right-char] 'gomoku-move-right) - (define-key map [remap previous-line] 'gomoku-move-up) - (define-key map [remap next-line] 'gomoku-move-down) - (define-key map [remap move-beginning-of-line] 'gomoku-beginning-of-line) - (define-key map [remap move-end-of-line] 'gomoku-end-of-line) - (define-key map [remap undo] 'gomoku-human-takes-back) - (define-key map [remap advertised-undo] 'gomoku-human-takes-back) - map) - - "Local keymap to use in Gomoku mode.") +(defvar-keymap gomoku-mode-map + :doc "Local keymap to use in Gomoku mode." + ;; Key bindings for cursor motion. + "y" #'gomoku-move-nw + "u" #'gomoku-move-ne + "b" #'gomoku-move-sw + "n" #'gomoku-move-se + "h" #'gomoku-move-left + "l" #'gomoku-move-right + "j" #'gomoku-move-down + "k" #'gomoku-move-up + + "" #'gomoku-move-nw + "" #'gomoku-move-ne + "" #'gomoku-move-sw + "" #'gomoku-move-se + "" #'gomoku-move-left + "" #'gomoku-move-right + "" #'gomoku-move-down + "" #'gomoku-move-up + + "C-b" #'gomoku-move-left + "C-f" #'gomoku-move-right + "C-n" #'gomoku-move-down + "C-p" #'gomoku-move-up + + ;; Key bindings for entering Human moves. + "X" #'gomoku-human-plays + "x" #'gomoku-human-plays + "SPC" #'gomoku-human-plays + "RET" #'gomoku-human-plays + "C-c C-p" #'gomoku-human-plays + "C-c C-b" #'gomoku-human-takes-back + "C-c C-r" #'gomoku-human-resigns + "C-c C-e" #'gomoku-emacs-plays + + "" #'gomoku-human-plays + "" #'gomoku-human-plays + "" #'gomoku-click + "" #'gomoku-click + "" #'gomoku-click + "" #'gomoku-click + "" #'gomoku-mouse-play + "" #'gomoku-mouse-play + + " " #'gomoku-move-left + " " #'gomoku-move-left + " " #'gomoku-move-right + " " #'gomoku-move-right + " " #'gomoku-move-up + " " #'gomoku-move-down + " " #'gomoku-beginning-of-line + " " #'gomoku-end-of-line + " " #'gomoku-human-takes-back + " " #'gomoku-human-takes-back) (defvar gomoku-emacs-won () diff --git a/lisp/play/mpuz.el b/lisp/play/mpuz.el index df2b6fc867..6091016b7c 100644 --- a/lisp/play/mpuz.el +++ b/lisp/play/mpuz.el @@ -76,17 +76,12 @@ The value t means never ding, and `error' means only ding on wrong input." "Hook to run upon entry to mpuz." :type 'hook) -(defvar mpuz-mode-map - (let ((map (make-sparse-keymap))) - (mapc (lambda (ch) - (define-key map (char-to-string ch) 'mpuz-try-letter)) - "abcdefghijABCDEFGHIJ") - (define-key map "\C-g" 'mpuz-offer-abort) - (define-key map "?" 'describe-mode) - map) - "Local keymap to use in Mult Puzzle.") - - +(defvar-keymap mpuz-mode-map + :doc "Local keymap to use in Mult Puzzle." + "C-g" #'mpuz-offer-abort + "?" #'describe-mode) +(dolist (ch (mapcar #'char-to-string "abcdefghijABCDEFGHIJ")) + (keymap-set mpuz-mode-map ch #'mpuz-try-letter)) (define-derived-mode mpuz-mode fundamental-mode "Mult Puzzle" :interactive nil diff --git a/lisp/play/pong.el b/lisp/play/pong.el index b8545dfa82..f1426d8f0f 100644 --- a/lisp/play/pong.el +++ b/lisp/play/pong.el @@ -173,23 +173,23 @@ ;;; Initialize maps -(defvar pong-mode-map - (let ((map (make-sparse-keymap 'pong-mode-map))) - (define-key map [left] 'pong-move-left) - (define-key map [right] 'pong-move-right) - (define-key map [up] 'pong-move-up) - (define-key map [down] 'pong-move-down) - (define-key map pong-left-key 'pong-move-left) - (define-key map pong-right-key 'pong-move-right) - (define-key map pong-up-key 'pong-move-up) - (define-key map pong-down-key 'pong-move-down) - (define-key map pong-quit-key 'pong-quit) - (define-key map pong-pause-key 'pong-pause) - map) - "Modemap for pong-mode.") - -(defvar pong-null-map - (make-sparse-keymap 'pong-null-map) "Null map for pong-mode.") +(defvar-keymap pong-mode-map + :doc "Modemap for pong-mode." + :name 'pong-mode-map + "" #'pong-move-left + "" #'pong-move-right + "" #'pong-move-up + "" #'pong-move-down + pong-left-key #'pong-move-left + pong-right-key #'pong-move-right + pong-up-key #'pong-move-up + pong-down-key #'pong-move-down + pong-quit-key #'pong-quit + pong-pause-key #'pong-pause) + +(defvar-keymap pong-null-map + :doc "Null map for pong-mode." + :name 'pong-null-map) diff --git a/lisp/play/solitaire.el b/lisp/play/solitaire.el index bc1a0e44cb..19d7ba51bc 100644 --- a/lisp/play/solitaire.el +++ b/lisp/play/solitaire.el @@ -40,48 +40,46 @@ "Hook to run upon entry to Solitaire." :type 'hook) -(defvar solitaire-mode-map - (let ((map (make-sparse-keymap))) - (set-keymap-parent map special-mode-map) - - (define-key map "\C-f" 'solitaire-right) - (define-key map "\C-b" 'solitaire-left) - (define-key map "\C-p" 'solitaire-up) - (define-key map "\C-n" 'solitaire-down) - (define-key map "\r" 'solitaire-move) - (define-key map [remap undo] 'solitaire-undo) - (define-key map " " 'solitaire-do-check) - - (define-key map [right] 'solitaire-right) - (define-key map [left] 'solitaire-left) - (define-key map [up] 'solitaire-up) - (define-key map [down] 'solitaire-down) - - (define-key map [S-right] 'solitaire-move-right) - (define-key map [S-left] 'solitaire-move-left) - (define-key map [S-up] 'solitaire-move-up) - (define-key map [S-down] 'solitaire-move-down) - - (define-key map [kp-6] 'solitaire-right) - (define-key map [kp-4] 'solitaire-left) - (define-key map [kp-8] 'solitaire-up) - (define-key map [kp-2] 'solitaire-down) - (define-key map [kp-5] 'solitaire-center-point) - - (define-key map [S-kp-6] 'solitaire-move-right) - (define-key map [S-kp-4] 'solitaire-move-left) - (define-key map [S-kp-8] 'solitaire-move-up) - (define-key map [S-kp-2] 'solitaire-move-down) - - (define-key map [kp-enter] 'solitaire-move) - (define-key map [kp-0] 'solitaire-undo) - - ;; spoil it with s ;) - (define-key map [?s] 'solitaire-solve) - - ;; (define-key map [kp-0] 'solitaire-hint) - Not yet provided ;) - map) - "Keymap for playing Solitaire.") +(defvar-keymap solitaire-mode-map + :doc "Keymap for playing Solitaire." + :parent special-mode-map + "C-f" #'solitaire-right + "C-b" #'solitaire-left + "C-p" #'solitaire-up + "C-n" #'solitaire-down + "RET" #'solitaire-move + "SPC" #'solitaire-do-check + + "" #'solitaire-right + "" #'solitaire-left + "" #'solitaire-up + "" #'solitaire-down + + "S-" #'solitaire-move-right + "S-" #'solitaire-move-left + "S-" #'solitaire-move-up + "S-" #'solitaire-move-down + + "" #'solitaire-right + "" #'solitaire-left + "" #'solitaire-up + "" #'solitaire-down + "" #'solitaire-center-point + + "S-" #'solitaire-move-right + "S-" #'solitaire-move-left + "S-" #'solitaire-move-up + "S-" #'solitaire-move-down + + "" #'solitaire-move + "" #'solitaire-undo + " " #'solitaire-undo + + ;; spoil it with s ;) + "s" #'solitaire-solve + + ;; "[kp-0]" #'solitaire-hint - Not yet provided ;) + ) ;; Solitaire mode is suitable only for specially formatted data. (put 'solitaire-mode 'mode-class 'special) commit c09fcb8f07c1fa6864a38c28e3f27298136b8b8e Author: Lars Ingebrigtsen Date: Fri Dec 31 16:50:50 2021 +0100 `make-finalizer' now has to be called with a function, so adjust test diff --git a/test/src/alloc-tests.el b/test/src/alloc-tests.el index 5383c43603..80b18dfa49 100644 --- a/test/src/alloc-tests.el +++ b/test/src/alloc-tests.el @@ -30,7 +30,7 @@ (require 'cl-lib) (ert-deftest finalizer-object-type () - (should (equal (type-of (make-finalizer nil)) 'finalizer))) + (should (equal (type-of (make-finalizer #'ignore)) 'finalizer))) (ert-deftest record-1 () (let ((x (record 'foo 1 2 3))) commit db0cab990c64d1b5808ed94e72f665305b60f5d9 Author: Michael Albinus Date: Fri Dec 31 14:36:49 2021 +0100 Documentation update for Secret Service * doc/misc/auth.texi (Secret Service API): Precise "session" collection. * lisp/auth-source.el (auth-sources): Adapt custom label. * lisp/net/secrets.el: Adjust comments. diff --git a/doc/misc/auth.texi b/doc/misc/auth.texi index 6602f9dc2e..b6823ea779 100644 --- a/doc/misc/auth.texi +++ b/doc/misc/auth.texi @@ -305,7 +305,8 @@ The @dfn{Secret Service API} is a standard from to securely store passwords and other confidential information. This API is implemented by system daemons such as the GNOME Keyring and the KDE Wallet (these are GNOME and KDE packages respectively and should -be available on most modern GNU/Linux systems). +be available on most modern GNU/Linux systems). It has been tested +also with KeePassXC. The auth-source library uses the @file{secrets.el} library to connect through the Secret Service API@. You can also use that library in @@ -360,19 +361,19 @@ Collections can be created and deleted by the functions Usually, this is not done from within Emacs. Do not delete standard collections such as @code{"login"}. -The special collection @code{"session"} exists for the lifetime of the -corresponding client session (in our case, Emacs's lifetime). It is -created automatically when Emacs uses the Secret Service interface and -it is deleted when Emacs is killed. Therefore, it can be used to -store and retrieve secret items temporarily. The @code{"session"} -collection is better than a persistent collection when the secret -items should not live longer than Emacs. The session collection can -be specified either by the string @code{"session"}, or by @code{nil}, -whenever a collection parameter is needed in the following functions. - -However, not all Secret Service provider create this temporary -@code{"session"} collection, like KeePassXC. You shall check first -that this collection exists, before you use it. +With GNOME Keyring, there exists a special collection called +@code{"session"}, which has the lifetime of the user being logged in. +Its data are not stored on disk and go away when the user logs out. +Therefore, it can be used to store and retrieve secret items +temporarily. The @code{"session"} collection is better than a +persistent collection when the secret items should not live +permanently. The @code{"session"} collection can be addressed either +by the string @code{"session"}, or by @code{nil}, whenever a +collection parameter is needed. + +However, other Secret Service provider don't create this temporary +@code{"session"} collection. You shall check first that this +collection exists, before you use it. @defun secrets-list-items collection Returns all the item labels of @var{collection} as a list. diff --git a/lisp/auth-source.el b/lisp/auth-source.el index 8c5b5564e7..1c58410f02 100644 --- a/lisp/auth-source.el +++ b/lisp/auth-source.el @@ -256,7 +256,7 @@ can get pretty complex." (choice :tag "Authentication backend choice" (string :tag "Authentication Source (file)") (list - :tag "Secret Service API/KWallet/GNOME Keyring" + :tag "Secret Service API/KWallet/GNOME Keyring/KeyPassXC" (const :format "" :value :secrets) (choice :tag "Collection to use" (string :tag "Collection name") diff --git a/lisp/net/secrets.el b/lisp/net/secrets.el index 25802f2c46..552638348c 100644 --- a/lisp/net/secrets.el +++ b/lisp/net/secrets.el @@ -77,15 +77,17 @@ ;; (secrets-delete-collection "my collection") ;; (secrets-create-collection "my collection") -;; There exists a special collection called "session", which has the -;; lifetime of the corresponding client session (aka Emacs's -;; lifetime). It is created automatically when Emacs uses the Secret -;; Service interface, and it is deleted when Emacs is killed. +;; With GNOME Keyring, there exists a special collection called +;; "session", which has the lifetime of the user being logged in. Its +;; data are not stored on disk and go away when the user logs out. ;; Therefore, it can be used to store and retrieve secret items -;; temporarily. This shall be preferred over creation of a persistent -;; collection, when the information shall not live longer than Emacs. -;; The session collection can be addressed either by the string -;; "session", or by nil, whenever a collection parameter is needed. +;; temporarily. The "session" collection can be addressed either by +;; the string "session", or by nil, whenever a collection parameter is +;; needed. + +;; However, other Secret Service provider don't create this temporary +;; "session" collection. You shall check first that this collection +;; exists, before you use it. ;; As already said, a collection is a group of secret items. A secret ;; item has a label, the "secret" (which is a string), and a set of @@ -98,8 +100,7 @@ ;; => ("this item" "another item") ;; Secret items can be added or deleted to a collection. In the -;; following examples, we use the special collection "session", which -;; is bound to Emacs's lifetime. +;; following examples, we use the special collection "session". ;; ;; (secrets-delete-item "session" "my item") ;; (secrets-create-item "session" "my item" "geheim" @@ -137,7 +138,7 @@ ;; It has been tested with GNOME Keyring 2.29.92. An implementation ;; for KWallet will be available at ;; svn://anonsvn.kde.org/home/kde/trunk/playground/base/ksecretservice; -;; not tested yet. +;; not tested yet. This package has also been tested with KeePassXC 2.6.6. ;; Pacify byte-compiler. D-Bus support in the Emacs core can be ;; disabled with configuration option "--without-dbus". Declare used @@ -263,7 +264,7 @@ It returns t if not." ;; ;; -;; This is not guaranteed to exist. For example, KeePassXC does not offer this. +;; This exist only for GNOME Keyring. (defconst secrets-session-collection-path "/org/freedesktop/secrets/collection/session" "The D-Bus temporary session collection object path.") @@ -906,7 +907,7 @@ to their attributes." secrets-interface-service "CollectionDeleted" 'secrets-collection-handler) - ;; We shall inform, whether the secret service is enabled on this + ;; We shall inform, that the secret service is enabled on this ;; machine. (setq secrets-enabled t)) @@ -917,6 +918,7 @@ to their attributes." ;; * secrets-debug should be structured like auth-source-debug to ;; prevent leaking sensitive information. Right now I don't see ;; anything sensitive though. + ;; * Check, whether the dh-ietf1024-aes128-cbc-pkcs7 algorithm can be ;; used for the transfer of the secrets. Currently, we use the ;; plain algorithm. commit 1f34f072be43f25538b1cbedef6a5b828c900c64 Author: Po Lu Date: Fri Dec 31 21:08:23 2021 +0800 Fix copyright dates in some files belonging to the pgtk port * src/pgtkgui.h: * src/pgtkim.c: * src/pgtkmenu.c: * src/pgtkselect.c: * src/pgtkselect.h: * src/pgtkterm.c: * src/pgtkterm.h: Fix copyright dates to say '2021'. diff --git a/src/pgtkgui.h b/src/pgtkgui.h index 035e0179f6..9703fe6a02 100644 --- a/src/pgtkgui.h +++ b/src/pgtkgui.h @@ -1,5 +1,5 @@ /* Definitions and headers for communication on the pure Gtk+3. - Copyright (C) 1995, 2005, 2008-2020 Free Software Foundation, Inc. + Copyright (C) 1995, 2005, 2008-2021 Free Software Foundation, Inc. This file is part of GNU Emacs. diff --git a/src/pgtkim.c b/src/pgtkim.c index c0104ebc0a..a38599c5a9 100644 --- a/src/pgtkim.c +++ b/src/pgtkim.c @@ -1,6 +1,6 @@ /* Pure Gtk+-3 communication module. -Copyright (C) 1989, 1993-1994, 2005-2006, 2008-2020 Free Software +Copyright (C) 1989, 1993-1994, 2005-2006, 2008-2021 Free Software Foundation, Inc. This file is part of GNU Emacs. diff --git a/src/pgtkmenu.c b/src/pgtkmenu.c index fd2c53a1b8..dbab2f9645 100644 --- a/src/pgtkmenu.c +++ b/src/pgtkmenu.c @@ -1,5 +1,5 @@ /* Pure GTK3 menu and toolbar module. - Copyright (C) 2019-2020 Free Software Foundation, Inc. + Copyright (C) 2019-2021 Free Software Foundation, Inc. This file is part of GNU Emacs. diff --git a/src/pgtkselect.c b/src/pgtkselect.c index 77a563dc3f..2a96caf032 100644 --- a/src/pgtkselect.c +++ b/src/pgtkselect.c @@ -1,5 +1,5 @@ /* Gtk selection processing for emacs. - Copyright (C) 1993-1994, 2005-2006, 2008-2020 Free Software + Copyright (C) 1993-1994, 2005-2006, 2008-2021 Free Software Foundation, Inc. This file is part of GNU Emacs. diff --git a/src/pgtkselect.h b/src/pgtkselect.h index 7ad04c217a..294eefc11d 100644 --- a/src/pgtkselect.h +++ b/src/pgtkselect.h @@ -1,5 +1,5 @@ /* Definitions and headers for selection of pure Gtk+3. - Copyright (C) 1989, 1993, 2005, 2008-2020 Free Software Foundation, + Copyright (C) 1989, 1993, 2005, 2008-2021 Free Software Foundation, Inc. This file is part of GNU Emacs. diff --git a/src/pgtkterm.c b/src/pgtkterm.c index 0814fb0df8..c2e684272f 100644 --- a/src/pgtkterm.c +++ b/src/pgtkterm.c @@ -1,6 +1,6 @@ /* Pure Gtk+-3 communication module. -*- coding: utf-8 -*- -Copyright (C) 1989, 1993-1994, 2005-2006, 2008-2020 Free Software +Copyright (C) 1989, 1993-1994, 2005-2006, 2008-2021 Free Software Foundation, Inc. This file is part of GNU Emacs. diff --git a/src/pgtkterm.h b/src/pgtkterm.h index 034e4f3c83..22ebadf559 100644 --- a/src/pgtkterm.h +++ b/src/pgtkterm.h @@ -1,5 +1,5 @@ /* Definitions and headers for communication with pure Gtk+3. - Copyright (C) 1989, 1993, 2005, 2008-2020 Free Software Foundation, + Copyright (C) 1989, 1993, 2005, 2008-2021 Free Software Foundation, Inc. This file is part of GNU Emacs. commit 7dd4dc6ace22aab91939176cb623d54cdb1788e4 Author: Po Lu Date: Fri Dec 31 13:03:07 2021 +0000 On Haiku, sync a frames's connection to the app sever after raising * src/haiku_support.h: (BWindow_sync) * src/haiku_support.cc (BWindow_sync): New function. * src/haikuterm.c (haiku_frame_raise_lower): Synchronize window after raising it to avoid situations where raising windows is done out-of-order, such as when ediff raises a frame. diff --git a/src/haiku_support.cc b/src/haiku_support.cc index fea0684b1b..dae0825bd2 100644 --- a/src/haiku_support.cc +++ b/src/haiku_support.cc @@ -2901,6 +2901,18 @@ BWindow_set_min_size (void *window, int width, int height) w->UnlockLooper (); } +/* Synchronize WINDOW's connection to the App Server. */ +void +BWindow_sync (void *window) +{ + BWindow *w = (BWindow *) window; + + if (!w->LockLooper ()) + gui_abort ("Failed to lock window looper for sync"); + w->Sync (); + w->UnlockLooper (); +} + /* Set the alignment of WINDOW's dimensions. */ void BWindow_set_size_alignment (void *window, int align_width, int align_height) diff --git a/src/haiku_support.h b/src/haiku_support.h index 9f5f3c77e3..b08a561def 100644 --- a/src/haiku_support.h +++ b/src/haiku_support.h @@ -819,6 +819,9 @@ extern "C" extern void BWindow_set_size_alignment (void *window, int align_width, int align_height); + extern void + BWindow_sync (void *window); + #ifdef __cplusplus extern void * find_appropriate_view_for_draw (void *vw); diff --git a/src/haikuterm.c b/src/haikuterm.c index 24fa44b01d..9b54e50b61 100644 --- a/src/haikuterm.c +++ b/src/haikuterm.c @@ -346,7 +346,7 @@ haiku_frame_raise_lower (struct frame *f, bool raise_p) { block_input (); BWindow_activate (FRAME_HAIKU_WINDOW (f)); - flush_frame (f); + BWindow_sync (FRAME_HAIKU_WINDOW (f)); unblock_input (); } } commit a8c3e8e2a6efa77b38110a9c1fee1ece8d8da4d5 Author: Po Lu Date: Fri Dec 31 10:59:53 2021 +0000 Fix child frame unlinking on Haiku * src/haiku_support.cc (UnlinkChild): Fix obvious mistake. (DoMove): Lock child frame window before moving it. diff --git a/src/haiku_support.cc b/src/haiku_support.cc index 66b0e519b0..fea0684b1b 100644 --- a/src/haiku_support.cc +++ b/src/haiku_support.cc @@ -346,8 +346,8 @@ class EmacsWindow : public BWindow { if (last) last->next = tem->next; - if (tem == subset_windows) - subset_windows = NULL; + else + subset_windows = tem->next; delete tem; return; } @@ -405,9 +405,11 @@ class EmacsWindow : public BWindow DoMove (struct child_frame *f) { BRect frame = this->Frame (); + if (!f->window->LockLooper ()) + gui_abort ("Failed to lock child frame window for move"); f->window->MoveTo (frame.left + f->xoff, frame.top + f->yoff); - this->Sync (); + f->window->UnlockLooper (); } void commit eab422a6532899468a70ec44986c1ee5174287b7 Merge: d1fde0ab8a 95ee6e8b90 Author: Po Lu Date: Fri Dec 31 09:38:41 2021 +0000 Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs commit d1fde0ab8ae53b684ff4ba858f1e270bc3ba9db6 Author: Po Lu Date: Fri Dec 31 09:31:27 2021 +0000 Use a single global lock for the child frame state on Haiku Each BWindows (and various system callbacks) runs in a separate thread, so there are very complicated locking semantics that used to be handled manually. This changes child frame state to use a single global lock, which makes things much easier. * src/haiku_support.cc (child_frame_lock): New variable. (class EmacsWindow): (~EmacsWindow): (Unparent): (ParentTo): (MoveChild): (FrameMoved): (EmacsHide): (EmacsShow): (GetParentWidthHeight): (OffsetChildRect): (MakeFullscreen): (SetUpDoubleBuffering): Use a single lock for controlling access to child frame state. diff --git a/src/haiku_support.cc b/src/haiku_support.cc index d211f1157d..66b0e519b0 100644 --- a/src/haiku_support.cc +++ b/src/haiku_support.cc @@ -85,6 +85,13 @@ static key_map *key_map = NULL; static char *key_chars = NULL; static BLocker key_map_lock; +/* The locking semantics of BWindows running in multiple threads are + so complex that child frame state (which is the only state that is + shared between different BWindows at runtime) does best with a + single global lock. */ + +static BLocker child_frame_lock; + extern "C" { extern _Noreturn void emacs_abort (void); @@ -247,6 +254,8 @@ class EmacsWindow : public BWindow ~EmacsWindow () { + if (!child_frame_lock.Lock ()) + gui_abort ("Failed to lock child frame state lock"); struct child_frame *next; for (struct child_frame *f = subset_windows; f; f = next) { @@ -257,6 +266,7 @@ class EmacsWindow : public BWindow if (this->parent) UnparentAndUnlink (); + child_frame_lock.Unlock (); } void @@ -269,10 +279,13 @@ class EmacsWindow : public BWindow void UpwardsSubsetChildren (EmacsWindow *w) { + if (!child_frame_lock.Lock ()) + gui_abort ("Failed to lock child frame state lock"); UpwardsSubset (w); for (struct child_frame *f = subset_windows; f; f = f->next) f->window->UpwardsSubsetChildren (w); + child_frame_lock.Unlock (); } void @@ -285,15 +298,20 @@ class EmacsWindow : public BWindow void UpwardsUnSubsetChildren (EmacsWindow *w) { + if (!child_frame_lock.Lock ()) + gui_abort ("Failed to lock child frame state lock"); UpwardsUnSubset (w); for (struct child_frame *f = subset_windows; f; f = f->next) f->window->UpwardsUnSubsetChildren (w); + child_frame_lock.Unlock (); } void Unparent (void) { + if (!child_frame_lock.Lock ()) + gui_abort ("Failed to lock child frame state lock"); this->SetFeel (B_NORMAL_WINDOW_FEEL); UpwardsUnSubsetChildren (parent); this->RemoveFromSubset (this); @@ -303,13 +321,17 @@ class EmacsWindow : public BWindow fullscreen_p = 0; MakeFullscreen (1); } + child_frame_lock.Unlock (); } void UnparentAndUnlink (void) { + if (!child_frame_lock.Lock ()) + gui_abort ("Failed to lock child frame state lock"); this->parent->UnlinkChild (this); this->Unparent (); + child_frame_lock.Unlock (); } void @@ -337,6 +359,9 @@ class EmacsWindow : public BWindow void ParentTo (EmacsWindow *window) { + if (!child_frame_lock.Lock ()) + gui_abort ("Failed to lock child frame state lock"); + if (this->parent) UnparentAndUnlink (); @@ -352,6 +377,8 @@ class EmacsWindow : public BWindow } this->Sync (); window->LinkChild (this); + + child_frame_lock.Unlock (); } void @@ -393,6 +420,9 @@ class EmacsWindow : public BWindow MoveChild (EmacsWindow *window, int xoff, int yoff, int weak_p) { + if (!child_frame_lock.Lock ()) + gui_abort ("Failed to lock child frame state lock"); + for (struct child_frame *f = subset_windows; f; f = f->next) { @@ -402,10 +432,13 @@ class EmacsWindow : public BWindow f->yoff = yoff; if (!weak_p) DoMove (f); + + child_frame_lock.Unlock (); return; } } + child_frame_lock.Unlock (); gui_abort ("Trying to move a child frame that doesn't exist"); } @@ -606,9 +639,14 @@ class EmacsWindow : public BWindow haiku_write (MOVE_EVENT, &rq); + if (!child_frame_lock.Lock ()) + gui_abort ("Failed to lock child frame state lock"); + for (struct child_frame *f = subset_windows; f; f = f->next) DoMove (f); + + child_frame_lock.Unlock (); BWindow::FrameMoved (newPosition); } @@ -623,10 +661,14 @@ class EmacsWindow : public BWindow void EmacsMoveTo (int x, int y) { + if (!child_frame_lock.Lock ()) + gui_abort ("Failed to lock child frame state lock"); + if (!this->parent) this->MoveTo (x, y); else this->parent->MoveChild (this, x, y, 0); + child_frame_lock.Unlock (); } bool @@ -654,9 +696,14 @@ class EmacsWindow : public BWindow { if (this->IsHidden ()) return; + if (!child_frame_lock.Lock ()) + gui_abort ("Failed to lock child frame state lock"); + Hide (); if (this->parent) UpwardsUnSubsetChildren (this->parent); + + child_frame_lock.Unlock (); } void @@ -664,11 +711,17 @@ class EmacsWindow : public BWindow { if (!this->IsHidden ()) return; + + if (!child_frame_lock.Lock ()) + gui_abort ("Failed to lock child frame state lock"); + if (this->parent) shown_flag = 1; Show (); if (this->parent) UpwardsSubsetChildren (this->parent); + + child_frame_lock.Unlock (); } void @@ -719,6 +772,9 @@ class EmacsWindow : public BWindow void GetParentWidthHeight (int *width, int *height) { + if (!child_frame_lock.Lock ()) + gui_abort ("Failed to lock child frame state lock"); + if (parent) { *width = parent->Frame ().Width (); @@ -730,11 +786,16 @@ class EmacsWindow : public BWindow *width = s.Frame ().Width (); *height = s.Frame ().Height (); } + + child_frame_lock.Unlock (); } void OffsetChildRect (BRect *r, EmacsWindow *c) { + if (!child_frame_lock.Lock ()) + gui_abort ("Failed to lock child frame state lock"); + for (struct child_frame *f; f; f = f->next) if (f->window == c) { @@ -742,9 +803,11 @@ class EmacsWindow : public BWindow r->bottom -= f->yoff; r->left -= f->xoff; r->right -= f->xoff; + child_frame_lock.Unlock (); return; } + child_frame_lock.Lock (); gui_abort ("Trying to calculate offsets for a child frame that doesn't exist"); } @@ -753,8 +816,8 @@ class EmacsWindow : public BWindow { BScreen screen (this); - if (!screen.IsValid ()) - gui_abort ("Trying to make a window fullscreen without a screen"); + if (!screen.IsValid ()) + gui_abort ("Trying to make a window fullscreen without a screen"); if (make_fullscreen_p == fullscreen_p) return; @@ -768,9 +831,15 @@ class EmacsWindow : public BWindow flags |= B_NOT_MOVABLE | B_NOT_ZOOMABLE; pre_fullscreen_rect = Frame (); + + if (!child_frame_lock.Lock ()) + gui_abort ("Failed to lock child frame state lock"); + if (parent) parent->OffsetChildRect (&pre_fullscreen_rect, this); + child_frame_lock.Unlock (); + int w, h; EmacsMoveTo (0, 0); GetParentWidthHeight (&w, &h); @@ -1065,7 +1134,7 @@ class EmacsView : public BView if (looper_locked_count) { if (!offscreen_draw_bitmap_1->Lock ()) - gui_abort ("Failed to lock bitmap after double buffering was set up."); + gui_abort ("Failed to lock bitmap after double buffering was set up"); } UnlockLooper (); commit 95ee6e8b907f44ef56de7c0a7272ccfc0f2f2727 Author: Stephen Berman Date: Fri Dec 31 10:25:52 2021 +0100 Fix handling of webkit xwidget bookmarks Make jumping to a bookmarked webkit xwidget in another window or another frame show the xwidget only in that window or frame and refactor new session code used by the bookmark code (bug#52856). In addition, make xwidget-webkit-clone-* commands work. * lisp/xwidget.el (xwidget-webkit-clone-and-split-below) (xwidget-webkit-clone-and-split-right): Unbreak these functions by passing just the URL to them, not the message displaying it. (xwidget-webkit-bookmark-jump-new-session): Adjust doc string, rephrasing and removing a customization suggestion that cannot take effect. (xwidget-webkit-bookmark-jump-handler): New autoloaded function. (xwidget-webkit-bookmark-make-record): Use it. (xwidget-webkit--create-new-session-buffer): New function extracted from `xwidget-webkit-new-session'. (xwidget-webkit-new-session): Use it. diff --git a/lisp/xwidget.el b/lisp/xwidget.el index 12ee597504..ab40e81c4d 100644 --- a/lisp/xwidget.el +++ b/lisp/xwidget.el @@ -139,7 +139,7 @@ Interactively, URL defaults to the string looking like a url around point." Get the URL of current session, then browse to the URL in `split-window-below' with a new xwidget webkit session." (interactive nil xwidget-webkit-mode) - (let ((url (xwidget-webkit-current-url))) + (let ((url (xwidget-webkit-uri (xwidget-webkit-current-session)))) (with-selected-window (split-window-below) (xwidget-webkit-new-session url)))) @@ -148,7 +148,7 @@ in `split-window-below' with a new xwidget webkit session." Get the URL of current session, then browse to the URL in `split-window-right' with a new xwidget webkit session." (interactive nil xwidget-webkit-mode) - (let ((url (xwidget-webkit-current-url))) + (let ((url (xwidget-webkit-uri (xwidget-webkit-current-session)))) (with-selected-window (split-window-right) (xwidget-webkit-new-session url)))) @@ -545,24 +545,31 @@ directory, URL is saved at the specified directory as FILE-NAME." ;;; Bookmarks integration (defcustom xwidget-webkit-bookmark-jump-new-session nil - "Control bookmark jump to use new session or not. -If non-nil, use a new xwidget webkit session after bookmark jump. -Otherwise, it will use `xwidget-webkit-last-session'. -When you set this variable to nil, consider further customization with -`xwidget-webkit-last-session-buffer'." + "Whether to jump to a bookmarked URL in a new xwidget webkit session. +If non-nil, create a new xwidget webkit session, otherwise use +the value of `xwidget-webkit-last-session'." :version "28.1" :type 'boolean) (defun xwidget-webkit-bookmark-make-record () - "Create bookmark record in webkit xwidget. -See `xwidget-webkit-bookmark-jump-new-session' for whether this -should create a new session or not." + "Create a bookmark record for a webkit xwidget." (nconc (bookmark-make-record-default t t) `((page . ,(xwidget-webkit-uri (xwidget-webkit-current-session))) - (handler . (lambda (bmk) - (xwidget-webkit-browse-url - (bookmark-prop-get bmk 'page) - xwidget-webkit-bookmark-jump-new-session)))))) + (handler . xwidget-webkit-bookmark-jump-handler)))) + +;;;###autoload +(defun xwidget-webkit-bookmark-jump-handler (bookmark) + "Jump to the web page bookmarked by the bookmark record BOOKMARK. +If `xwidget-webkit-bookmark-jump-new-session' is non-nil, create +a new xwidget-webkit session, otherwise use an existing session." + (let* ((url (bookmark-prop-get bookmark 'page)) + (xwbuf (if (or xwidget-webkit-bookmark-jump-new-session + (not (xwidget-webkit-current-session))) + (xwidget-webkit--create-new-session-buffer url) + (xwidget-buffer (xwidget-webkit-current-session))))) + (with-current-buffer xwbuf + (xwidget-webkit-goto-uri (xwidget-webkit-current-session) url)) + (set-buffer xwbuf))) ;;; xwidget webkit session @@ -810,37 +817,44 @@ For example, use this to display an anchor." (add-to-list 'window-size-change-functions 'xwidget-webkit-adjust-size-in-frame)) -(defun xwidget-webkit-new-session (url &optional callback) - "Create a new webkit session buffer with URL." +(defun xwidget-webkit--create-new-session-buffer (url &optional callback) + "Create a new webkit session buffer to display URL in an xwidget. +Optional function CALLBACK specifies the callback for webkit xwidgets; +see `xwidget-webkit-callback'." (let* ((bufname - ;; Generate a temp-name based on current buffer name. it - ;; will be renamed by `xwidget-webkit-callback' in the - ;; future. This approach can limit flicker of buffer-name in - ;; mode-line. + ;; Generate a temp-name based on current buffer name. The + ;; buffer will subsequently be renamed by + ;; `xwidget-webkit-callback'. This approach can avoid + ;; flicker of buffer-name in mode-line. (generate-new-buffer-name (buffer-name))) (callback (or callback #'xwidget-webkit-callback)) (current-session (xwidget-webkit-current-session)) xw) - (setq xwidget-webkit-last-session-buffer (switch-to-buffer - (get-buffer-create bufname))) + (setq xwidget-webkit-last-session-buffer (get-buffer-create bufname)) ;; The xwidget id is stored in a text property, so we need to have ;; at least character in this buffer. ;; Insert invisible url, good default for next `g' to browse url. - (let ((start (point))) - (insert url) - (put-text-property start (+ start (length url)) 'invisible t) - (setq xw (xwidget-insert - start 'webkit bufname - (xwidget-window-inside-pixel-width (selected-window)) - (xwidget-window-inside-pixel-height (selected-window)) - nil current-session))) - (when xwidget-webkit-cookie-file - (xwidget-webkit-set-cookie-storage-file - xw (expand-file-name xwidget-webkit-cookie-file))) - (xwidget-put xw 'callback callback) - (xwidget-put xw 'display-callback #'xwidget-webkit-display-callback) - (xwidget-webkit-mode) - (xwidget-webkit-goto-uri (xwidget-webkit-last-session) url))) + (with-current-buffer xwidget-webkit-last-session-buffer + (let ((start (point))) + (insert url) + (put-text-property start (+ start (length url)) 'invisible t) + (setq xw (xwidget-insert + start 'webkit bufname + (xwidget-window-inside-pixel-width (selected-window)) + (xwidget-window-inside-pixel-height (selected-window)) + nil current-session))) + (when xwidget-webkit-cookie-file + (xwidget-webkit-set-cookie-storage-file + xw (expand-file-name xwidget-webkit-cookie-file))) + (xwidget-put xw 'callback callback) + (xwidget-put xw 'display-callback #'xwidget-webkit-display-callback) + (xwidget-webkit-mode)) + xwidget-webkit-last-session-buffer)) + +(defun xwidget-webkit-new-session (url) + "Display URL in a new webkit xwidget." + (switch-to-buffer (xwidget-webkit--create-new-session-buffer url)) + (xwidget-webkit-goto-uri (xwidget-webkit-last-session) url)) (defun xwidget-webkit-import-widget (xwidget) "Create a new webkit session buffer from XWIDGET, an existing xwidget. commit a6adfe21e4f5de1e0fe342daf4b7cfd317941948 Author: Juri Linkov Date: Fri Dec 31 11:20:51 2021 +0200 * lisp/tab-line.el (tab-line--get-tab-property): New function (bug#52881). (tab-line-auto-hscroll): Use ‘tab-line--get-tab-property’ instead of ‘get-pos-property 1’, and ‘get-text-property’ instead of ‘get-pos-property’. (tab-line-select-tab, tab-line-close-tab): Use tab-line--get-tab-property. diff --git a/lisp/tab-line.el b/lisp/tab-line.el index 5affae7913..57a2171cea 100644 --- a/lisp/tab-line.el +++ b/lisp/tab-line.el @@ -615,6 +615,12 @@ the selected tab visible." (defvar tab-line-auto-hscroll-buffer (generate-new-buffer " *tab-line-hscroll*")) +(defun tab-line--get-tab-property (prop string) + (or (get-text-property 1 prop string) ;; for 99% cases of 1-char separator + (get-text-property 0 prop string) ;; for empty separator + (let ((pos (next-single-property-change 0 prop string))) ;; long separator + (and pos (get-text-property pos prop string))))) + (defun tab-line-auto-hscroll (strings hscroll) (with-current-buffer tab-line-auto-hscroll-buffer (let ((truncate-partial-width-windows nil) @@ -636,7 +642,7 @@ the selected tab visible." (not (integerp hscroll))) (let ((selected (seq-position strings 'selected (lambda (str prop) - (get-pos-property 1 prop str))))) + (tab-line--get-tab-property prop str))))) (cond ((null selected) ;; Do nothing if no tab is selected @@ -650,13 +656,13 @@ the selected tab visible." (if (> (vertical-motion 1) 0) (let* ((point (previous-single-property-change (point) 'tab)) (tab-prop (when point - (or (get-pos-property point 'tab) + (or (get-text-property point 'tab) (and (setq point (previous-single-property-change point 'tab)) - (get-pos-property point 'tab))))) + (get-text-property point 'tab))))) (new-hscroll (when tab-prop (seq-position strings tab-prop (lambda (str tab) - (eq (get-pos-property 1 'tab str) tab)))))) + (eq (tab-line--get-tab-property 'tab str) tab)))))) (when new-hscroll (setq hscroll (float new-hscroll)) (set-window-parameter nil 'tab-line-hscroll hscroll))) @@ -677,13 +683,13 @@ the selected tab visible." (when (> (vertical-motion 1) 0) (let* ((point (previous-single-property-change (point) 'tab)) (tab-prop (when point - (or (get-pos-property point 'tab) + (or (get-text-property point 'tab) (and (setq point (previous-single-property-change point 'tab)) - (get-pos-property point 'tab))))) + (get-text-property point 'tab))))) (new-hscroll (when tab-prop (seq-position strings tab-prop (lambda (str tab) - (eq (get-pos-property 1 'tab str) tab)))))) + (eq (tab-line--get-tab-property 'tab str) tab)))))) (when new-hscroll (setq hscroll (float new-hscroll)) (set-window-parameter nil 'tab-line-hscroll hscroll))))))))) @@ -742,7 +748,7 @@ So, for example, switching to a previous tab is equivalent to using the `previous-buffer' command." (interactive "e") (let* ((posnp (event-start event)) - (tab (get-pos-property 1 'tab (car (posn-string posnp)))) + (tab (tab-line--get-tab-property 'tab (car (posn-string posnp)))) (buffer (if (bufferp tab) tab (cdr (assq 'buffer tab))))) (if buffer (tab-line-select-tab-buffer buffer (posn-window posnp)) @@ -854,7 +860,7 @@ sight of the tab line." (interactive (list last-nonmenu-event)) (let* ((posnp (and (listp event) (event-start event))) (window (and posnp (posn-window posnp))) - (tab (get-pos-property 1 'tab (car (posn-string posnp)))) + (tab (tab-line--get-tab-property 'tab (car (posn-string posnp)))) (buffer (if (bufferp tab) tab (cdr (assq 'buffer tab)))) (close-function (unless (bufferp tab) (cdr (assq 'close tab))))) (with-selected-window (or window (selected-window)) commit 0922634b28ff501ded2bf8f343c848f5e4db35d5 Author: Eli Zaretskii Date: Fri Dec 31 10:56:28 2021 +0200 Minor improvements of 'lisp-directory' docs * lisp/startup.el (lisp-directory): * etc/NEWS: * doc/lispref/loading.texi (Library Search): Improve wording of documentation of 'lisp-directory' and related features. diff --git a/doc/lispref/loading.texi b/doc/lispref/loading.texi index 3efcf055dc..070f763db8 100644 --- a/doc/lispref/loading.texi +++ b/doc/lispref/loading.texi @@ -293,30 +293,33 @@ directory). When Emacs starts up, it sets up the value of @code{load-path} in several steps. First, it looks for the directory containing its own -Lisp files, using default locations set when Emacs was compiled. -It saves this directory in @code{lisp-directory}. Normally, this -is a directory something like +Lisp files, using default locations set when Emacs was compiled. It +saves this directory in @code{lisp-directory}. Normally, this is a +directory where the @file{*.elc} files are installed, something like @example "/usr/local/share/emacs/@var{version}/lisp" @end example -(In this and the following examples, replace @file{/usr/local} with -the installation prefix appropriate for your Emacs.) -These directories contain the standard Lisp files that come with -Emacs. If Emacs cannot find them, it will not start correctly. +@noindent +where @var{version} is the Emacs version. (In this and the following +examples, replace @file{/usr/local} with the prefix appropriate for +your Emacs installation.) This directory and its subdirectories +contain the standard Lisp files that come with Emacs. If Emacs cannot +find its own Lisp files, it will not start correctly. If you run Emacs from the directory where it was built---that is, an -executable that has not been formally installed---Emacs instead -initializes @code{lisp-directory} using the @file{lisp} -directory in the directory containing the sources from which it -was built. +executable that has not been installed yet---Emacs instead initializes +@code{lisp-directory} using the @file{lisp} subdirectory of the +directory containing the sources from which it was built. -Emacs first initializes @code{load-path} with this @code{lisp-directory}. +Emacs then initializes @code{load-path} with this @code{lisp-directory}. @c Though there should be no *.el files in builddir/lisp, so it's pointless. If you built Emacs in a separate directory from the -sources, it also adds the lisp directories from the build directory. -(In all cases, elements are represented as absolute file names.) +sources, it also adds the @file{lisp} subdirectory of the build directory. + +All of these directories are stored in the above two variables as +absolute file names. @cindex site-lisp directories Unless you start Emacs with the @option{--no-site-lisp} option, @@ -336,12 +339,12 @@ and @end example @noindent -The first one is for locally installed files for a specific Emacs -version; the second is for locally installed files meant for use -with all installed Emacs versions. (If Emacs is running uninstalled, -it also adds @file{site-lisp} directories from the source and build -directories, if they exist. Normally these directories do not contain -@file{site-lisp} directories.) +The first one is for locally installed files for the current Emacs +@var{version}; the second is for locally installed files meant for use +with any installed Emacs version. (If Emacs is running uninstalled, +it also adds @file{site-lisp} subdirectories from the source and build +directories, if they exist. However, normally the source and build +directories do not contain @file{site-lisp} subdirectories.) @cindex @env{EMACSLOADPATH} environment variable If the environment variable @env{EMACSLOADPATH} is set, it modifies @@ -363,9 +366,10 @@ export EMACSLOADPATH=/home/foo/.emacs.d/lisp: @end example An empty element in the value of the environment variable, whether -trailing (as in the above example), leading, or embedded, is replaced -by the default value of @code{load-path} as determined by the standard -initialization procedure. If there are no such empty elements, then +trailing (as in the above example, note the trailing @samp{:}), +leading, or embedded, is replaced by the default value of +@code{load-path} as determined by the standard initialization +procedure. If there are no such empty elements, then @env{EMACSLOADPATH} specifies the entire @code{load-path}. You must include either an empty element, or the explicit path to the directory containing the standard Lisp files, else Emacs will not function. @@ -394,6 +398,9 @@ add one or more directories to @code{load-path}. For example: (push "~/.emacs.d/lisp" load-path) @end example +@noindent +@xref{List Variables, push}, for the description of @code{push}. + Dumping Emacs uses a special value of @code{load-path}. If you use a @file{site-load.el} or @file{site-init.el} file to customize the dumped Emacs (@pxref{Building Emacs}), any changes to @code{load-path} @@ -401,10 +408,11 @@ that these files make will be lost after dumping. @defvar lisp-directory This variable holds a string naming the directory which holds -Emacs's own @code{.el} and @code{.elc} files. This is usually the +Emacs's own @file{*.el} and @file{*.elc} files. This is usually the place where those files are located in the Emacs installation tree, unless Emacs is run from its build directory in which case it points -to the @code{lisp} directory in source directory from which it was built. +to the @file{lisp} subdirectory in the source directory from which +Emacs was built. @end defvar @deffn Command locate-library library &optional nosuffix path interactive-call diff --git a/etc/NEWS b/etc/NEWS index f6ba0167e0..ca6a716ccd 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -72,9 +72,9 @@ work on any underlying window system supported by GDK, such as Wayland and Broadway. --- -** The docstrings of preloaded files are not in etc/DOC any more. -Instead, they're fetched from the corresponding '.elc' file, as was already -the case for all the non-preloaded files. +** The docstrings of preloaded files are not in 'etc/DOC' any more. +Instead, they're fetched as needed from the corresponding '.elc' file, +as was already the case for all the non-preloaded files. * Startup Changes in Emacs 29.1 diff --git a/lisp/startup.el b/lisp/startup.el index 727432a4cb..76cc9b2ca3 100644 --- a/lisp/startup.el +++ b/lisp/startup.el @@ -1057,7 +1057,7 @@ the `--debug-init' option to view a complete error backtrace." (setq debug-on-error debug-on-error-from-init-file)))) (defvar lisp-directory nil - "Directory containing the Lisp files that come with GNU Emacs.") + "Directory where Emacs's own *.el and *.elc Lisp files are installed.") (defun command-line () "A subroutine of `normal-top-level'. commit 89f205084b7368bb2261e07384f8ff1967a70ba4 Author: Eli Zaretskii Date: Thu Dec 30 20:28:58 2021 +0200 Avoid assertion violations with variable-weight fonts * src/font.c (font_score, font_delete_unmatched): Don't assume weight, slant, and width properties of the font must be fixnums: some variable-weight fonts violate that assumption. Reported by Sean Whitton . Do not merge to master. (Bug#52888) diff --git a/src/font.c b/src/font.c index c0050a99cf..6ff28397d9 100644 --- a/src/font.c +++ b/src/font.c @@ -2170,7 +2170,9 @@ font_score (Lisp_Object entity, Lisp_Object *spec_prop) /* Score three style numeric fields. Maximum difference is 127. */ for (i = FONT_WEIGHT_INDEX; i <= FONT_WIDTH_INDEX; i++) - if (! NILP (spec_prop[i]) && ! EQ (AREF (entity, i), spec_prop[i])) + if (! NILP (spec_prop[i]) + && ! EQ (AREF (entity, i), spec_prop[i]) + && FIXNUMP (AREF (entity, i))) { EMACS_INT diff = ((XFIXNUM (AREF (entity, i)) >> 8) - (XFIXNUM (spec_prop[i]) >> 8)); @@ -2749,8 +2751,9 @@ font_delete_unmatched (Lisp_Object vec, Lisp_Object spec, int size) } for (prop = FONT_WEIGHT_INDEX; prop < FONT_SIZE_INDEX; prop++) if (FIXNUMP (AREF (spec, prop)) - && ((XFIXNUM (AREF (spec, prop)) >> 8) - != (XFIXNUM (AREF (entity, prop)) >> 8))) + && ! (FIXNUMP (AREF (entity, prop)) + && ((XFIXNUM (AREF (spec, prop)) >> 8) + == (XFIXNUM (AREF (entity, prop)) >> 8)))) prop = FONT_SPEC_MAX; if (prop < FONT_SPEC_MAX && size commit f2031d0ddb6a21eebbf396094a5c4d4e73019271 Author: Eli Zaretskii Date: Thu Dec 30 20:07:29 2021 +0200 Minor improvement in user documentation of completion style * doc/emacs/mini.texi (Completion Styles): Add reference to "Completion Variables" in the ELisp manual. (Bug#52901) diff --git a/doc/emacs/mini.texi b/doc/emacs/mini.texi index b0f6e424a7..56222bb6e1 100644 --- a/doc/emacs/mini.texi +++ b/doc/emacs/mini.texi @@ -497,7 +497,10 @@ falls back on the next style. @vindex completion-styles The list variable @code{completion-styles} specifies the completion styles to use. Each list element is the name of a completion style (a -Lisp symbol). The default completion styles are (in order): +Lisp symbol). The available style symbols are stored in the variable +@code{completion-styles-alist} (@pxref{Completion Variables,,, elisp, +The Emacs Lisp Reference Manual}). The default completion styles are +(in order): @table @code @item basic commit 1e3076e2dbddaeb8cf678a9bfb30b7d269de1479 Author: Campbell Barton Date: Thu Dec 30 17:20:45 2021 +1100 Fix bug where bookmark-jump used (point), not (point-at-bol) This matches changes from e852822f3db469c985bf022651f184d6ff2c518a, regression in 7fe88446c30279285e3171091189b3d1af697c05. * lisp/bookmark.el (bookmark--jump-via): Look at overlays at BOL. Otherwise the fringe bookmark indication is not deleted with the bookmark. Copyright-paperwork-exempt: yes diff --git a/lisp/bookmark.el b/lisp/bookmark.el index 623f0acd28..c5e7f2720d 100644 --- a/lisp/bookmark.el +++ b/lisp/bookmark.el @@ -1164,7 +1164,7 @@ and then show any annotations for this bookmark." ;; FIXME: we used to only run bookmark-after-jump-hook in ;; `bookmark-jump' itself, but in none of the other commands. (when bookmark-set-fringe-mark - (let ((overlays (overlays-in (point) (point))) + (let ((overlays (overlays-in (point-at-bol) (1+ (point-at-bol)))) temp found) (while (and (not found) (setq temp (pop overlays))) (when (eq 'bookmark (overlay-get temp 'category))