commit da6e4a862509395bf4c3e30b2b53da6674324c58 (HEAD, refs/remotes/origin/master) Author: Yuan Fu Date: Sun Aug 25 14:48:58 2024 -0700 ; * test/src/treesit-tests.el (treesit-indirect-buffer): Untag. diff --git a/test/src/treesit-tests.el b/test/src/treesit-tests.el index 5b951d35ba1..d62344e81f0 100644 --- a/test/src/treesit-tests.el +++ b/test/src/treesit-tests.el @@ -190,7 +190,6 @@ (ert-deftest treesit-indirect-buffer () "Tests for indirect buffers." - :tags (if (getenv "EMACS_EMBA_CI") '(:unstable)) (skip-unless (treesit-language-available-p 'json)) (let ((base (get-buffer-create "*treesit test*")) parser indirect) commit d4bd5a3cbabe917770119d468446ada6ca1b5040 Merge: 22c228bba30 9b299dd79c1 Author: Eli Zaretskii Date: Sun Aug 25 14:54:03 2024 -0400 Merge from origin/emacs-30 9b299dd79c1 Revert a recent change that caused redisplay slowdown 4eaab54896f ; * doc/lispref/display.texi (Low-Level Font): Fix wordin... 0a500193087 Indent ERT failure explanations rigidly 713069dd7a8 [Eglot] Stricter "expand common" behavior 096730510cd eglot-tests.el: New tests for existing completion behavior 969498c25d0 Remove dangerous HTML edit from admin.el # Conflicts: # etc/EGLOT-NEWS commit 22c228bba301a7c08e5dec73ed4d938c2b2dc61f Merge: 99f23546967 52829bcee61 Author: Eli Zaretskii Date: Sun Aug 25 14:53:04 2024 -0400 ; Merge from origin/emacs-30 The following commit was skipped: 52829bcee61 ; Fix bad references to other manuals commit 99f23546967e2710cabf896a3fbb69077c0aac35 Merge: 55aad592e17 8c251a4c419 Author: Eli Zaretskii Date: Sun Aug 25 14:53:04 2024 -0400 Merge from origin/emacs-30 8c251a4c419 ; Mention in PROBLEMS issues with long popup menus 0a626a64c70 * etc/emacs_lldb.py (Lisp_Object): PVEC_COMPILED -> PVEC_... commit 9b299dd79c1627c7ad6b037d599a8e80a92573cd Author: Eli Zaretskii Date: Sun Aug 25 21:43:59 2024 +0300 Revert a recent change that caused redisplay slowdown * src/xfaces.c (recompute_basic_faces): Revert the change which caused recalculation of all the faces, as it made cursor motion too slow. Reported by Juri Linkov (bug#72692). diff --git a/src/xfaces.c b/src/xfaces.c index 34897817ffd..684b6ccfac7 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -736,11 +736,6 @@ recompute_basic_faces (struct frame *f) clear_face_cache (false); if (!realize_basic_faces (f)) emacs_abort (); - /* Force complete face recalculation next time we use the display - code, because realize_basic_faces could free the fontset used - by non-ASCII faces corresponding to ASCII faces of the basic - faces, and attempt to use that fontset might segfault. */ - f->face_change = true; } } commit 4eaab54896fbefb08f5ec3134f53ec5f5365f23a Author: Eli Zaretskii Date: Sun Aug 25 20:47:51 2024 +0300 ; * doc/lispref/display.texi (Low-Level Font): Fix wording (bug#72771). diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index f283d680d2e..9a43ad0568a 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi @@ -4372,9 +4372,10 @@ should be equal to the value of @var{height} above. The width, in pixels, of the font's space character. @item average-width -The average width of the font characters. If this is zero, Emacs uses -the value of @var{space-width} instead, when it calculates text layout -on display. +The average width of the font characters. Emacs uses this for +calculating text layout on display; if the value of @var{average-width} +is zero, Emacs uses the value of @var{space-width} instead for those +purposes. @item filename The file name of the font as a string. This can be @code{nil} if the commit 55aad592e177dc2c503ebe9ad2a46e227683315e Author: Jim Porter Date: Fri Aug 23 15:11:24 2024 -0700 Improve computation of indent depth in SHR and 'visual-wrap-prefix-mode' Now, we get the average-width of the current font using 'string-pixel-width' and a specified space display spec, which doesn't require the buffer to be displayed in a window (bug#72771). * lisp/net/shr.el (shr-indent): * lisp/visual-wrap.el (visual-wrap--content-prefix): Fix getting the font when the buffer isn't displayed in a window. (visual-wrap-fill-context-prefix): Fix indentation. diff --git a/lisp/net/shr.el b/lisp/net/shr.el index b9ac9f0c8c0..cd0e482aee7 100644 --- a/lisp/net/shr.el +++ b/lisp/net/shr.el @@ -1051,17 +1051,17 @@ When `shr-fill-text' is nil, only indent." (if (not shr-use-fonts) (insert-char ?\s shr-indentation) (insert ?\s) - (put-text-property - (1- (point)) (point) 'display - ;; Set the specified space width in terms of the default width - ;; of the current face, like (N . width). That way, the - ;; indentation is calculated correctly when using - ;; `text-scale-adjust'. - `(space :width (,(if-let ((font (font-at (1- (point)))) - (info (query-font font))) - (/ (float shr-indentation) (aref info 7)) - shr-indentation) - . width)))) + ;; Set the specified space width in units of the average-width + ;; of the current font, like (N . width). That way, the + ;; indentation is calculated correctly when using + ;; `text-scale-adjust'. + (let ((avg-space (propertize (buffer-substring (1- (point)) (point)) + 'display '(space :width 1)))) + (put-text-property + (1- (point)) (point) 'display + `(space :width (,(/ (float shr-indentation) + (string-pixel-width avg-space (current-buffer))) + . width))))) (put-text-property start (+ (point) prefix) 'shr-prefix-length (+ prefix (- (point) start)))))) diff --git a/lisp/visual-wrap.el b/lisp/visual-wrap.el index 902a9e41c5e..76276c0f474 100644 --- a/lisp/visual-wrap.el +++ b/lisp/visual-wrap.el @@ -160,20 +160,14 @@ PREFIX was empty." prefix) (t ;; Otherwise, we want the prefix to be whitespace of the same width - ;; as the first-line prefix. If possible, compute the real pixel - ;; width of the first-line prefix in canonical-width characters. - ;; This is useful if the first-line prefix uses some very-wide - ;; characters. - (if-let ((font (font-at position)) - (info (query-font font))) + ;; as the first-line prefix. We want to return an integer width (in + ;; units of the font's average-width) large enough to fit the + ;; first-line prefix. + (let ((avg-space (propertize (buffer-substring position (1+ position)) + 'display '(space :width 1)))) (max (string-width prefix) (ceiling (string-pixel-width prefix (current-buffer)) - (aref info 7))) - ;; We couldn't get the font, so we're in a terminal and - ;; `string-pixel-width' is really returning the number of columns. - ;; (This is different from `string-width', since that doesn't - ;; respect specified spaces.) - (string-pixel-width prefix))))) + (string-pixel-width avg-space (current-buffer)))))))) (defun visual-wrap-fill-context-prefix (beg end) "Compute visual wrap prefix from text between BEG and END. @@ -189,7 +183,7 @@ by `visual-wrap-extra-indent'." ;; make much sense (and is positively harmful in ;; taskpaper-mode where paragraph-start matches everything). (or (let ((paragraph-start regexp-unmatchable)) - (fill-context-prefix beg end)) + (fill-context-prefix beg end)) ;; Note: fill-context-prefix may return nil; See: ;; http://article.gmane.org/gmane.emacs.devel/156285 "")) commit 0a500193087efc96aa3791dc4c2084ef5f6c3c06 Author: F. Jason Park Date: Fri Aug 9 16:49:28 2024 -0700 Indent ERT failure explanations rigidly This also affects the listing of `should' forms produced by hitting the L key on a test button in an ERT buffer. * lisp/emacs-lisp/ert.el (ert--pp-with-indentation-and-newline): Indent the pretty-printed result to match the caller's current column as a reference indentation. * test/lisp/emacs-lisp/ert-tests.el (ert--pp-with-indentation-and-newline): New test. (Bug#72561) diff --git a/lisp/emacs-lisp/ert.el b/lisp/emacs-lisp/ert.el index 2d96e5ce5a9..105c44d49aa 100644 --- a/lisp/emacs-lisp/ert.el +++ b/lisp/emacs-lisp/ert.el @@ -1317,13 +1317,12 @@ empty string." "Pretty-print OBJECT, indenting it to the current column of point. Ensures a final newline is inserted." (let ((begin (point)) + (cols (current-column)) (pp-escape-newlines t) (print-escape-control-characters t)) (pp object (current-buffer)) (unless (bolp) (insert "\n")) - (save-excursion - (goto-char begin) - (indent-sexp)))) + (indent-rigidly begin (point) cols))) (defun ert--insert-infos (result) "Insert `ert-info' infos from RESULT into current buffer. diff --git a/test/lisp/emacs-lisp/ert-tests.el b/test/lisp/emacs-lisp/ert-tests.el index 1aff73d66f6..9ca336697a6 100644 --- a/test/lisp/emacs-lisp/ert-tests.el +++ b/test/lisp/emacs-lisp/ert-tests.el @@ -876,6 +876,60 @@ This macro is used to test if macroexpansion in `should' works." (should (eq (ert--get-explainer 'string-equal) 'ert--explain-string-equal)) (should (eq (ert--get-explainer 'string=) 'ert--explain-string-equal))) +(ert-deftest ert--pp-with-indentation-and-newline () + :tags '(:causes-redisplay) + (let ((failing-test (make-ert-test + :name 'failing-test + :body (lambda () + (should (equal '((:one "1" :three "3" :two "2")) + '((:one "1"))))))) + (want-body "\ +Selector: +Passed: 0 +Failed: 1 (1 unexpected) +Skipped: 0 +Total: 1/1 + +Started at: @@TIMESTAMP@@ +Finished. +Finished at: @@TIMESTAMP@@ + +F + +F failing-test + (ert-test-failed + ((should (equal '((:one \"1\" :three \"3\" :two \"2\")) '((:one \"1\")))) + :form (equal ((:one \"1\" :three \"3\" :two \"2\")) ((:one \"1\"))) :value + nil :explanation + (list-elt 0 + (proper-lists-of-different-length 6 2 + (:one \"1\" :three \"3\" + :two \"2\") + (:one \"1\") + first-mismatch-at 2)))) +\n\n") + (want-msg "Ran 1 tests, 0 results were as expected, 1 unexpected") + (buffer-name (generate-new-buffer-name " *ert-test-run-tests*"))) + (cl-letf* ((ert-debug-on-error nil) + (ert--output-buffer-name buffer-name) + (messages nil) + ((symbol-function 'message) + (lambda (format-string &rest args) + (push (apply #'format format-string args) messages))) + ((symbol-function 'ert--format-time-iso8601) + (lambda (_) "@@TIMESTAMP@@"))) + (save-window-excursion + (unwind-protect + (let ((fill-column 70)) + (ert-run-tests-interactively failing-test) + (should (equal (list want-msg) messages)) + (should (equal (string-replace "\t" " " + (with-current-buffer buffer-name + (buffer-string))) + want-body))) + (when noninteractive + (kill-buffer buffer-name))))))) + (provide 'ert-tests) ;;; ert-tests.el ends here commit 713069dd7a87cff8388c25f1bc2c2c1b5217b1ca Author: Dmitry Gutov Date: Sun Aug 25 18:23:51 2024 +0300 [Eglot] Stricter "expand common" behavior * lisp/progmodes/eglot.el (eglot--dumb-tryc): Check that the expanded string matches every completion strictly (bug#72705). And in the fallback case, check whether the table matches the original prefix at all. Return nil otherwise. * test/lisp/progmodes/eglot-tests.el (eglot-test-stop-completion-on-nonprefix) (eglot-test-try-completion-nomatch): Corresponding tests. * etc/EGLOT-NEWS: New entry. diff --git a/etc/EGLOT-NEWS b/etc/EGLOT-NEWS index ff9a53bd242..b39e52af8e4 100644 --- a/etc/EGLOT-NEWS +++ b/etc/EGLOT-NEWS @@ -36,6 +36,12 @@ documentation snippets. These affect mostly the "vanilla" frontend to completions (invoked with C-M-i). +** More strict completion expansion (bug#72705). + +It ensures that "expand common" commands (such as C-M-i or TAB in +third-party frontends) don't result in fewer completions than before +they are called. + ** Experimental support for Eglot-only subprojects (github#1337) Useful for complex projects with subprojects needing different language diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index 6fc8e60f90f..844fc634be9 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -3149,8 +3149,18 @@ for which LSP on-type-formatting should be requested." (defun eglot--dumb-tryc (pat table pred point) (let ((probe (funcall table pat pred nil))) (cond ((eq probe t) t) - (probe (cons probe (length probe))) - (t (cons pat point))))) + (probe + (if (and (not (equal probe pat)) + (cl-every + (lambda (s) (string-prefix-p probe s completion-ignore-case)) + (funcall table pat pred t))) + (cons probe (length probe)) + (cons pat point))) + (t + ;; Match ignoring suffix: if there are any completions for + ;; the current prefix at least, keep the current input. + (and (funcall table (substring pat 0 point) pred t) + (cons pat point)))))) (add-to-list 'completion-category-defaults '(eglot-capf (styles eglot--dumb-flex))) (add-to-list 'completion-styles-alist '(eglot--dumb-flex eglot--dumb-tryc eglot--dumb-allc)) diff --git a/test/lisp/progmodes/eglot-tests.el b/test/lisp/progmodes/eglot-tests.el index 3b67045122f..e0168baee54 100644 --- a/test/lisp/progmodes/eglot-tests.el +++ b/test/lisp/progmodes/eglot-tests.el @@ -645,6 +645,36 @@ directory hierarchy." (forward-line -1) (should (looking-at "Complete, but not unique"))))))) +(ert-deftest eglot-test-stop-completion-on-nonprefix () + "Test completion also resulting in 'Complete, but not unique'." + (skip-unless (executable-find "clangd")) + (eglot--with-fixture + `(("project" . (("coiso.c" . + ,(concat "int foot; int footer; int fo_obar;" + "int main() {foo"))))) + (with-current-buffer + (eglot--find-file-noselect "project/coiso.c") + (eglot--wait-for-clangd) + (goto-char (point-max)) + (completion-at-point) + (should (looking-back "foo"))))) + +(ert-deftest eglot-test-try-completion-nomatch () + "Test completion table with non-matching input, returning nil." + (skip-unless (executable-find "clangd")) + (eglot--with-fixture + `(("project" . (("coiso.c" . + ,(concat "int main() {abc"))))) + (with-current-buffer + (eglot--find-file-noselect "project/coiso.c") + (eglot--wait-for-clangd) + (goto-char (point-max)) + (should + (null + (completion-try-completion + "abc" + (nth 2 (eglot-completion-at-point)) nil 3)))))) + (ert-deftest eglot-test-try-completion-inside-symbol () "Test completion table inside symbol, with only prefix matching." (skip-unless (executable-find "clangd")) commit 096730510cdf8c582972f68afeef3226ee5810ca Author: Dmitry Gutov Date: Sun Aug 25 18:05:28 2024 +0300 eglot-tests.el: New tests for existing completion behavior * test/lisp/progmodes/eglot-tests.el (eglot-test-common-prefix-completion) (eglot-test-try-completion-inside-symbol) (eglot-test-rust-completion-exit-function): New tests. (eglot--wait-for-rust-analyzer): New function. diff --git a/test/lisp/progmodes/eglot-tests.el b/test/lisp/progmodes/eglot-tests.el index af1ee998919..3b67045122f 100644 --- a/test/lisp/progmodes/eglot-tests.el +++ b/test/lisp/progmodes/eglot-tests.el @@ -587,6 +587,18 @@ directory hierarchy." (eglot--wait-for (s-notifs 20) (&key method &allow-other-keys) (string= method "textDocument/publishDiagnostics")))) +(defun eglot--wait-for-rust-analyzer () + (eglot--sniffing (:server-notifications s-notifs) + (should (eglot--tests-connect)) + (eglot--wait-for (s-notifs 20) (&key method params &allow-other-keys) + (and + (string= method "$/progress") + "rustAnalyzer/Indexing" + (equal params + '(:token "rustAnalyzer/Indexing" :value + ;; Could wait for :kind "end" instead, but it's 2 more seconds. + (:kind "begin" :title "Indexing" :cancellable :json-false :percentage 0))))))) + (ert-deftest eglot-test-basic-completions () "Test basic autocompletion in a clangd LSP." (skip-unless (executable-find "clangd")) @@ -600,6 +612,20 @@ directory hierarchy." (message (buffer-string)) (should (looking-back "fprintf.?"))))) +(ert-deftest eglot-test-common-prefix-completion () + "Test completion appending the common prefix." + (skip-unless (executable-find "clangd")) + (eglot--with-fixture + `(("project" . (("coiso.c" . + ,(concat "int foo_bar; int foo_bar_baz;" + "int main() {foo"))))) + (with-current-buffer + (eglot--find-file-noselect "project/coiso.c") + (eglot--wait-for-clangd) + (goto-char (point-max)) + (completion-at-point) + (should (looking-back "{foo_bar"))))) + (ert-deftest eglot-test-non-unique-completions () "Test completion resulting in 'Complete, but not unique'." (skip-unless (executable-find "clangd")) @@ -619,19 +645,71 @@ directory hierarchy." (forward-line -1) (should (looking-at "Complete, but not unique"))))))) -(ert-deftest eglot-test-basic-xref () - "Test basic xref functionality in a clangd LSP." +(ert-deftest eglot-test-try-completion-inside-symbol () + "Test completion table inside symbol, with only prefix matching." (skip-unless (executable-find "clangd")) (eglot--with-fixture `(("project" . (("coiso.c" . - ,(concat "int foo=42; int fooey;" - "int main() {foo=82;}"))))) + ,(concat + "int foobar;" + "int main() {foo123"))))) (with-current-buffer (eglot--find-file-noselect "project/coiso.c") - (should (eglot--tests-connect)) - (search-forward "{foo") - (call-interactively 'xref-find-definitions) - (should (looking-at "foo=42"))))) + (eglot--wait-for-clangd) + (goto-char (- (point-max) 3)) + (when (buffer-live-p "*Completions*") + (kill-buffer "*Completions*")) + (completion-at-point) + (should (looking-back "foo")) + (should (looking-at "123")) + (should (get-buffer "*Completions*")) + ))) + +(ert-deftest eglot-test-rust-completion-exit-function () + "Ensure that the rust-analyzer exit function creates the expected contents." + (skip-unless (executable-find "rust-analyzer")) + (skip-unless (executable-find "cargo")) + (eglot--with-fixture + '(("cmpl-project" . + (("main.rs" . + "fn test() -> i32 { let v: usize = 1; v.count_on1234.1234567890;")))) + (with-current-buffer + (eglot--find-file-noselect "cmpl-project/main.rs") + (should (zerop (shell-command "cargo init"))) + (eglot--tests-connect) + (goto-char (point-min)) + (search-forward "v.count_on") + (let ((minibuffer-message-timeout 0) + ;; Fail at (ding) if completion fails. + (executing-kbd-macro t)) + (when (buffer-live-p "*Completions*") + (kill-buffer "*Completions*")) + ;; The design is pretty brittle, we'll need to monitor the + ;; language server for changes in behavior. + (eglot--wait-for-rust-analyzer) + (completion-at-point) + (should (looking-back "\\.count_on")) + (should (get-buffer "*Completions*")) + (minibuffer-next-completion 1) + (minibuffer-choose-completion t)) + (should + (equal + "fn test() -> i32 { let v: usize = 1; v.count_ones().1234567890;" + (buffer-string)))))) + +(ert-deftest eglot-test-basic-xref () + "Test basic xref functionality in a clangd LSP." + (skip-unless (executable-find "clangd")) + (eglot--with-fixture + `(("project" . (("coiso.c" . + ,(concat "int foo=42; int fooey;" + "int main() {foo=82;}"))))) + (with-current-buffer + (eglot--find-file-noselect "project/coiso.c") + (should (eglot--tests-connect)) + (search-forward "{foo") + (call-interactively 'xref-find-definitions) + (should (looking-at "foo=42"))))) (defvar eglot--test-c-buffer "\ commit 969498c25d0112dbdc3aa2ef75dc63681101203e Author: Eli Zaretskii Date: Sun Aug 25 15:46:05 2024 +0300 Remove dangerous HTML edit from admin.el * admin/admin.el (manual-html-fix-index-2): Avoid lax matches with "
    " which could mistakenly edit unrelated parts of HTML. (Bug#72761) diff --git a/admin/admin.el b/admin/admin.el index a4d3720ab69..edd3246a1a3 100644 --- a/admin/admin.el +++ b/admin/admin.el @@ -613,9 +613,7 @@ style=\"text-align:left\">") ;; item is not there anymore. So for HTML manuals produced by ;; those newer versions of Texinfo we punt and leave the menu in ;; its original form. - (when (or (search-forward "
      " nil t) - ;; FIXME? The following search seems dangerously lax. - (search-forward "
        " nil t)) + (when (or (search-forward "
          " nil t)) ;; Convert the list that Makeinfo made into a table. (replace-match "") (forward-line 1) commit 3a8222e700304e4dff84fcdfa8ff2a4e48646c82 Author: Mattias EngdegÄrd Date: Sat Aug 24 15:00:32 2024 +0200 Faster region-beginning and region-end for rectangle selections * lisp/rect.el (rectangle--region-beginning, rectangle--region-end): Make these run in O(1), not linear, time and space. diff --git a/lisp/rect.el b/lisp/rect.el index 0212dedcb48..93007824679 100644 --- a/lisp/rect.el +++ b/lisp/rect.el @@ -766,7 +766,17 @@ Ignores `line-move-visual'." ((not rectangle-mark-mode) (funcall orig)) (t - (apply #'min (mapcar #'car (region-bounds)))))) + (save-excursion + (let* ((pt (point)) + (mk (mark)) + (start (min pt mk)) + (end (max pt mk)) + (cols (rectangle--pos-cols start end)) + (startcol (car cols)) + (endcol (cdr cols))) + (goto-char start) + (move-to-column (min startcol endcol)) + (point)))))) (defun rectangle--region-end (orig) "Like `region-end' but supports rectangular regions." @@ -774,7 +784,17 @@ Ignores `line-move-visual'." ((not rectangle-mark-mode) (funcall orig)) (t - (apply #'max (mapcar #'cdr (region-bounds)))))) + (save-excursion + (let* ((pt (point)) + (mk (mark)) + (start (min pt mk)) + (end (max pt mk)) + (cols (rectangle--pos-cols start end)) + (startcol (car cols)) + (endcol (cdr cols))) + (goto-char end) + (move-to-column (max startcol endcol)) + (point)))))) (defun rectangle--extract-region (orig &optional delete) (cond commit 52829bcee614af0322882e3349c2cfcd913a8531 Author: Eli Zaretskii Date: Sun Aug 25 13:55:35 2024 +0300 ; Fix bad references to other manuals * doc/misc/bovine.texi (top, Optional Lambda Expression) (Starting Rules, Bovine Grammar Rules, How Lexical Tokens Match): * doc/misc/eudc.texi (Overview, Creating BBDB Records) (Inline Query Expansion): * doc/misc/dbus.texi (Top): * doc/misc/efaq.texi (Top): * doc/misc/wisent.texi (Wisent Semantic, Wisent Lex): Fix cross-references to other manuals. Remove redundant pointers from Top node. (Bug#72761) (cherry picked from commit 7319f5e078b6c98379414a4601a269e6581ec206) diff --git a/doc/misc/bovine.texi b/doc/misc/bovine.texi index f4eb0784cb2..b585cff0187 100644 --- a/doc/misc/bovine.texi +++ b/doc/misc/bovine.texi @@ -83,8 +83,7 @@ wisent}. Bovine @acronym{LL} grammars are stored in files with a @file{.by} extension. When compiled, the contents is converted into a file of -the form @file{NAME-by.el}. This, in turn is byte compiled. -@xref{top,, Grammar Framework Manual, grammar-fw}. +the form @file{NAME-by.el}. @ifnottex @insertcopying @@ -105,8 +104,7 @@ the form @file{NAME-by.el}. This, in turn is byte compiled. In Bison, one and only one nonterminal is designated as the ``start'' symbol. In @semantic{}, one or more nonterminals can be designated as the ``start'' symbol. They are declared following the @code{%start} -keyword separated by spaces. @xref{start Decl,, Grammar Framework -Manual, grammar-fw}. +keyword separated by spaces. If no @code{%start} keyword is used in a grammar, then the very first is used. Internally the first start nonterminal is targeted by the @@ -116,8 +114,7 @@ parser harness. To find locally defined variables, the local context handler needs to parse the body of functional code. The @code{scopestart} declaration specifies the name of a nonterminal used as the goal to parse a local -context, @pxref{scopestart Decl,, Grammar Framework Manual, -grammar-fw}. Internally the +context. Internally the scopestart nonterminal is targeted by the reserved symbol @code{bovine-inner-scope}, so it can be found by the parser harness. @@ -126,7 +123,7 @@ scopestart nonterminal is targeted by the reserved symbol The rules are what allow the compiler to create tags from a language file. Once the setup is done in the prologue, you can start writing -rules. @xref{Grammar Rules,, Grammar Framework Manual, grammar-fw}. +rules. @example @var{result} : @var{components1} @var{optional-semantic-action1}) @@ -148,8 +145,7 @@ A particular @var{result} written into your grammar becomes the parser's goal. It is designated by a @code{%start} statement (@pxref{Starting Rules}). The value returned by the associated @var{optional-semantic-action} is the parser's result. It should be -a tree of @semantic{} @dfn{tags}, @pxref{Semantic Tags,, Semantic -Application Development, semantic-appdev}. +a tree of @semantic{} @dfn{tags}. @var{components} is made up of symbols. A symbol such as @code{FOO} means that a syntactic token of class @code{FOO} must be matched. @@ -172,8 +168,7 @@ For instance: @end example Means that @code{FOO} is a reserved language keyword, matched as such -by looking up into a keyword table, @pxref{keyword Decl,, Grammar -Framework Manual, grammar-fw}. This is because @code{"foo"} will be +by looking up into a keyword table. This is because @code{"foo"} will be converted to @code{FOO} in the lexical analysis stage. Thus the symbol @code{FOO} won't be available any other way. @@ -386,8 +381,6 @@ Is an optional set of labeled values such as @code{:constant-flag t :parent Create a tag with @var{name} of respectively the class @code{variable}, @code{function}, @code{type}, @code{include}, @code{package}, and @code{code}. -See @ref{Creating Tags,, Semantic Application Development, -semantic-appdev}, for the lisp functions these translate into. @end table If the symbol @code{%quotemode backquote} is specified, then use diff --git a/doc/misc/calc.texi b/doc/misc/calc.texi index 384ad889ae1..7aadaac4a44 100644 --- a/doc/misc/calc.texi +++ b/doc/misc/calc.texi @@ -142,7 +142,7 @@ modify this GNU manual.'' @c [begin] @ifnottex -@node Top, Getting Started, (dir), (dir) +@node Top @top The GNU Emacs Calculator @noindent diff --git a/doc/misc/dbus.texi b/doc/misc/dbus.texi index e2e9de729de..4d46564944f 100644 --- a/doc/misc/dbus.texi +++ b/doc/misc/dbus.texi @@ -41,7 +41,7 @@ modify this GNU manual.'' @contents -@node Top, Overview, (dir), (dir) +@node Top @top D-Bus integration in Emacs This manual documents an API for usage of D-Bus in Emacs. D-Bus is a diff --git a/doc/misc/efaq.texi b/doc/misc/efaq.texi index fd98088bc7c..9b422915d7e 100644 --- a/doc/misc/efaq.texi +++ b/doc/misc/efaq.texi @@ -48,7 +48,7 @@ itself allows free copying and redistribution. @contents -@node Top, FAQ notation, (dir), (dir) +@node Top @top The GNU Emacs FAQ This is the GNU Emacs FAQ. diff --git a/doc/misc/eudc.texi b/doc/misc/eudc.texi index 0a16f2561f7..fa7d130f3ed 100644 --- a/doc/misc/eudc.texi +++ b/doc/misc/eudc.texi @@ -107,7 +107,7 @@ inline query Fast minibuffer queries for email addresses and phone numbers @item Interface to BBDB to let you insert server records into your own BBDB database -(@pxref{Top,,BBDB,bbdb,BBDB Manual}) +(@pxref{BBDB,,BBDB,bbdb,BBDB Manual}) @end itemize @menu @@ -986,8 +986,8 @@ In addition to providing a dedicated EUDC function for binding to a key shortcut (@pxref{Inline Query Expansion}), EUDC also provides a function to contribute search results to the Emacs in-buffer completion system available via the function -@code{completion-at-point} (@pxref{Identifier -Inquiries,,,maintaining}) in @code{message-mode} buffers +@code{completion-at-point} (@pxref{List Identifiers,,,emacs, The GNU +Emacs Manual}) in @code{message-mode} buffers (@pxref{Top,Message,, message, Message}). When using this mechanism, queries are made in the multi-server query mode of operation (@pxref{Multi-server Queries}). @@ -1133,7 +1133,7 @@ that all available servers should be tried. @findex eudc-insert-record-at-point-into-bbdb @findex eudc-try-bbdb-insert With EUDC, you can automatically create BBDB records -(@pxref{Top,,BBDB,bbdb,BBDB Manual}) from records you get from a +(@pxref{BBDB,,BBDB,bbdb,BBDB Manual}) from records you get from a directory server. You do this by moving point to the appropriate record in a query result display buffer and invoking the command @kbd{M-x eudc-insert-record-at-point-into-bbdb} with the diff --git a/doc/misc/wisent.texi b/doc/misc/wisent.texi index ad59ce03a4a..e8c527d95ba 100644 --- a/doc/misc/wisent.texi +++ b/doc/misc/wisent.texi @@ -1576,9 +1576,6 @@ To use the Wisent parser with @semantic{} you have to define your grammar in @dfn{WY} form, a grammar format very close to the one used by Bison. -Please see @ref{top, Semantic Grammar Framework Manual,, grammar-fw}, -for more information on @semantic{} grammars. - @menu * Grammar styles:: * Wisent Lex:: @@ -1963,8 +1960,7 @@ See implementation of the function @code{wisent-skip-token} in @findex semantic-lex The lexical analysis step of @semantic{} is performed by the general -function @code{semantic-lex}. For more information, see @ref{Writing -Lexers, Semantic Language Development,,semantic-langdev}. +function @code{semantic-lex}. @code{semantic-lex} produces lexical tokens of the form: commit 7319f5e078b6c98379414a4601a269e6581ec206 Author: Eli Zaretskii Date: Sun Aug 25 13:55:35 2024 +0300 ; Fix bad references to other manuals * doc/misc/bovine.texi (top, Optional Lambda Expression) (Starting Rules, Bovine Grammar Rules, How Lexical Tokens Match): * doc/misc/eudc.texi (Overview, Creating BBDB Records) (Inline Query Expansion): * doc/misc/dbus.texi (Top): * doc/misc/efaq.texi (Top): * doc/misc/wisent.texi (Wisent Semantic, Wisent Lex): Fix cross-references to other manuals. Remove redundant pointers from Top node. diff --git a/doc/misc/bovine.texi b/doc/misc/bovine.texi index f4eb0784cb2..b585cff0187 100644 --- a/doc/misc/bovine.texi +++ b/doc/misc/bovine.texi @@ -83,8 +83,7 @@ wisent}. Bovine @acronym{LL} grammars are stored in files with a @file{.by} extension. When compiled, the contents is converted into a file of -the form @file{NAME-by.el}. This, in turn is byte compiled. -@xref{top,, Grammar Framework Manual, grammar-fw}. +the form @file{NAME-by.el}. @ifnottex @insertcopying @@ -105,8 +104,7 @@ the form @file{NAME-by.el}. This, in turn is byte compiled. In Bison, one and only one nonterminal is designated as the ``start'' symbol. In @semantic{}, one or more nonterminals can be designated as the ``start'' symbol. They are declared following the @code{%start} -keyword separated by spaces. @xref{start Decl,, Grammar Framework -Manual, grammar-fw}. +keyword separated by spaces. If no @code{%start} keyword is used in a grammar, then the very first is used. Internally the first start nonterminal is targeted by the @@ -116,8 +114,7 @@ parser harness. To find locally defined variables, the local context handler needs to parse the body of functional code. The @code{scopestart} declaration specifies the name of a nonterminal used as the goal to parse a local -context, @pxref{scopestart Decl,, Grammar Framework Manual, -grammar-fw}. Internally the +context. Internally the scopestart nonterminal is targeted by the reserved symbol @code{bovine-inner-scope}, so it can be found by the parser harness. @@ -126,7 +123,7 @@ scopestart nonterminal is targeted by the reserved symbol The rules are what allow the compiler to create tags from a language file. Once the setup is done in the prologue, you can start writing -rules. @xref{Grammar Rules,, Grammar Framework Manual, grammar-fw}. +rules. @example @var{result} : @var{components1} @var{optional-semantic-action1}) @@ -148,8 +145,7 @@ A particular @var{result} written into your grammar becomes the parser's goal. It is designated by a @code{%start} statement (@pxref{Starting Rules}). The value returned by the associated @var{optional-semantic-action} is the parser's result. It should be -a tree of @semantic{} @dfn{tags}, @pxref{Semantic Tags,, Semantic -Application Development, semantic-appdev}. +a tree of @semantic{} @dfn{tags}. @var{components} is made up of symbols. A symbol such as @code{FOO} means that a syntactic token of class @code{FOO} must be matched. @@ -172,8 +168,7 @@ For instance: @end example Means that @code{FOO} is a reserved language keyword, matched as such -by looking up into a keyword table, @pxref{keyword Decl,, Grammar -Framework Manual, grammar-fw}. This is because @code{"foo"} will be +by looking up into a keyword table. This is because @code{"foo"} will be converted to @code{FOO} in the lexical analysis stage. Thus the symbol @code{FOO} won't be available any other way. @@ -386,8 +381,6 @@ Is an optional set of labeled values such as @code{:constant-flag t :parent Create a tag with @var{name} of respectively the class @code{variable}, @code{function}, @code{type}, @code{include}, @code{package}, and @code{code}. -See @ref{Creating Tags,, Semantic Application Development, -semantic-appdev}, for the lisp functions these translate into. @end table If the symbol @code{%quotemode backquote} is specified, then use diff --git a/doc/misc/calc.texi b/doc/misc/calc.texi index 384ad889ae1..7aadaac4a44 100644 --- a/doc/misc/calc.texi +++ b/doc/misc/calc.texi @@ -142,7 +142,7 @@ modify this GNU manual.'' @c [begin] @ifnottex -@node Top, Getting Started, (dir), (dir) +@node Top @top The GNU Emacs Calculator @noindent diff --git a/doc/misc/dbus.texi b/doc/misc/dbus.texi index b81c862c80f..42fe07367b8 100644 --- a/doc/misc/dbus.texi +++ b/doc/misc/dbus.texi @@ -41,7 +41,7 @@ modify this GNU manual.'' @contents -@node Top, Overview, (dir), (dir) +@node Top @top D-Bus integration in Emacs This manual documents an API for usage of D-Bus in Emacs. D-Bus is a diff --git a/doc/misc/efaq.texi b/doc/misc/efaq.texi index b342e73bb52..521361250b8 100644 --- a/doc/misc/efaq.texi +++ b/doc/misc/efaq.texi @@ -48,7 +48,7 @@ itself allows free copying and redistribution. @contents -@node Top, FAQ notation, (dir), (dir) +@node Top @top The GNU Emacs FAQ This is the GNU Emacs FAQ. diff --git a/doc/misc/eudc.texi b/doc/misc/eudc.texi index 0a16f2561f7..fa7d130f3ed 100644 --- a/doc/misc/eudc.texi +++ b/doc/misc/eudc.texi @@ -107,7 +107,7 @@ inline query Fast minibuffer queries for email addresses and phone numbers @item Interface to BBDB to let you insert server records into your own BBDB database -(@pxref{Top,,BBDB,bbdb,BBDB Manual}) +(@pxref{BBDB,,BBDB,bbdb,BBDB Manual}) @end itemize @menu @@ -986,8 +986,8 @@ In addition to providing a dedicated EUDC function for binding to a key shortcut (@pxref{Inline Query Expansion}), EUDC also provides a function to contribute search results to the Emacs in-buffer completion system available via the function -@code{completion-at-point} (@pxref{Identifier -Inquiries,,,maintaining}) in @code{message-mode} buffers +@code{completion-at-point} (@pxref{List Identifiers,,,emacs, The GNU +Emacs Manual}) in @code{message-mode} buffers (@pxref{Top,Message,, message, Message}). When using this mechanism, queries are made in the multi-server query mode of operation (@pxref{Multi-server Queries}). @@ -1133,7 +1133,7 @@ that all available servers should be tried. @findex eudc-insert-record-at-point-into-bbdb @findex eudc-try-bbdb-insert With EUDC, you can automatically create BBDB records -(@pxref{Top,,BBDB,bbdb,BBDB Manual}) from records you get from a +(@pxref{BBDB,,BBDB,bbdb,BBDB Manual}) from records you get from a directory server. You do this by moving point to the appropriate record in a query result display buffer and invoking the command @kbd{M-x eudc-insert-record-at-point-into-bbdb} with the diff --git a/doc/misc/wisent.texi b/doc/misc/wisent.texi index ad59ce03a4a..e8c527d95ba 100644 --- a/doc/misc/wisent.texi +++ b/doc/misc/wisent.texi @@ -1576,9 +1576,6 @@ To use the Wisent parser with @semantic{} you have to define your grammar in @dfn{WY} form, a grammar format very close to the one used by Bison. -Please see @ref{top, Semantic Grammar Framework Manual,, grammar-fw}, -for more information on @semantic{} grammars. - @menu * Grammar styles:: * Wisent Lex:: @@ -1963,8 +1960,7 @@ See implementation of the function @code{wisent-skip-token} in @findex semantic-lex The lexical analysis step of @semantic{} is performed by the general -function @code{semantic-lex}. For more information, see @ref{Writing -Lexers, Semantic Language Development,,semantic-langdev}. +function @code{semantic-lex}. @code{semantic-lex} produces lexical tokens of the form: commit 1f4da7fe3e8dac64c4da0ea2ff812be521946ea2 Author: Michael Albinus Date: Sun Aug 25 12:18:01 2024 +0200 ; Still fighting with emba.gnu.org config * test/infra/gitlab-ci.yml (variables): Remove GIT_DEPTH. (.job-template): Set cache:policy to pull-push, as before. Check behavior of docker export. (.build-template): Remove needs and cache. (.test-template): Remove cache. Adapt artifacts:paths. diff --git a/test/infra/gitlab-ci.yml b/test/infra/gitlab-ci.yml index 320e869ea8b..de31b37d148 100644 --- a/test/infra/gitlab-ci.yml +++ b/test/infra/gitlab-ci.yml @@ -42,7 +42,6 @@ workflow: - when: always variables: - GIT_DEPTH: 0 GIT_STRATEGY: fetch EMACS_EMBA_CI: 1 EMACS_TEST_JUNIT_REPORT: junit-test-report.xml @@ -76,6 +75,7 @@ default: cache: key: ${CI_COMMIT_SHA} paths: [] + policy: pull-push # These will be saved for followup builds. artifacts: expire_in: 24 hrs @@ -87,8 +87,8 @@ default: - 'docker run -i -e EMACS_EMBA_CI=${EMACS_EMBA_CI} -e EMACS_TEST_JUNIT_REPORT=${EMACS_TEST_JUNIT_REPORT} -e EMACS_TEST_TIMEOUT=${EMACS_TEST_TIMEOUT} -e EMACS_TEST_VERBOSE=${EMACS_TEST_VERBOSE} -e NPROC=`nproc` --volumes-from $(docker ps -q -f "label=com.gitlab.gitlab-runner.job.id=${CI_JOB_ID}"):ro --name ${test_name} ${CI_REGISTRY_IMAGE}:${target}-${BUILD_TAG} /bin/bash -xvc "git fetch ${PWD} HEAD && echo checking out these updated files && git diff --name-only FETCH_HEAD && ( git diff --name-only FETCH_HEAD | xargs git checkout -f FETCH_HEAD ) && make -j \$NPROC && make -k -j \$NPROC ${make_params}"' after_script: # - docker ps -a - # - printenv - # - test -n "$(docker ps -aq -f name=${test_name})" && ( docker export ${test_name} | tar -tvf - ) + - pwd; printenv + - test -n "$(docker ps -aq -f name=${test_name})" && ( docker export ${test_name} | tar -tvf - ) # Prepare test artifacts. - test -n "$(docker ps -aq -f name=${test_name})" && docker cp ${test_name}:checkout/test ${test_name} - test -n "$(docker ps -aq -f name=${test_name})" && docker cp ${test_name}:checkout/configure.log ${test_name} @@ -98,9 +98,6 @@ default: - find ${test_name} -type d -depth -exec rmdir {} + 2>/dev/null .build-template: - needs: [] - cache: - policy: push rules: - if: '$CI_PIPELINE_SOURCE == "web"' when: always @@ -131,15 +128,13 @@ default: - docker push ${CI_REGISTRY_IMAGE}:${target}-${BUILD_TAG} .test-template: - cache: - policy: pull artifacts: name: ${test_name} public: true expire_in: 1 week when: always paths: - - ${test_name}/ + - "${test_name}/**.log" reports: junit: ${test_name}/${EMACS_TEST_JUNIT_REPORT} commit 71505b723c9fb9de20f6d38be7c73d595e9be3ce Author: Eli Zaretskii Date: Sun Aug 25 10:24:35 2024 +0300 Fix handling of 'min-width' display property * src/xdisp.c (get_display_property, display_min_width): Rename BUFPOS to CHARPOS, to avoid confusion (it is not necessarily a buffer position). Suggested by Jim Porter . (get_display_property): Call 'Fget_char_property' to support 'min-width' properties of overlays as well. (display_min_width): Handle the buffer and string cases more accurately, without relying only on the values of positions. (handle_display_prop, handle_single_display_spec): Pass correct position to 'display_min_width', when iterating over a string. (handle_display_prop): When OBJECT is a window, pass it to display_min_width. (set_iterator_to_next): Call 'display_min_width' when at end of a display or overlay string. (Bug#72721) * etc/NEWS: Announce the support for overlays. diff --git a/etc/NEWS b/etc/NEWS index cc879ba4487..07d1cce0966 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -331,6 +331,12 @@ removed because its supported date styles can be handled by 'parse-time-string'. To restore the previously documented behavior, specify "+0000" or "Z" as the time zone in the argument. +--- +** The 'min-width' property is now supported for overlays as well. +This 'display' property was previously supported only as text property. +Now overlays can also have this property, with the same effect for the +text "covered" by the overlay. + * Changes in Emacs 31.1 on Non-Free Operating Systems diff --git a/src/xdisp.c b/src/xdisp.c index 30771a1c83d..f9a10267bad 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -5632,16 +5632,25 @@ find_display_property (Lisp_Object disp, Lisp_Object prop) return XCDR (elem); } +/* Return the value of 'display' text or overlay property PROP of + character at CHARPOS in OBJECT. Return nil if character at CHARPOS + has no 'display' property or if the 'display' property of that + character does not include PROP. OBJECT can be a buffer or a window + or a string. */ static Lisp_Object -get_display_property (ptrdiff_t bufpos, Lisp_Object prop, Lisp_Object object) +get_display_property (ptrdiff_t charpos, Lisp_Object prop, Lisp_Object object) { - return find_display_property (Fget_text_property (make_fixnum (bufpos), + return find_display_property (Fget_char_property (make_fixnum (charpos), Qdisplay, object), prop); } +/* Handle 'display' property '(min-width (WIDTH))' at CHARPOS in OBJECT. + OBJECT can be a buffer (or nil, which means the current buffer) or a + string. MIN_WIDTH is the value of min-width spec that we expect to + process. */ static void -display_min_width (struct it *it, ptrdiff_t bufpos, +display_min_width (struct it *it, ptrdiff_t charpos, Lisp_Object object, Lisp_Object width_spec) { /* We're being called at the end of the `min-width' sequence, @@ -5652,15 +5661,21 @@ display_min_width (struct it *it, ptrdiff_t bufpos, /* When called from display_string (i.e., the mode line), we're being called with a string as the object, and we may be called with many sub-strings belonging to the same - :propertize run. */ - if ((bufpos == 0 - && !EQ (it->min_width_property, - get_display_property (0, Qmin_width, object))) + :propertize run. */ + if ((STRINGP (object) + && ((charpos == 0 + && !EQ (it->min_width_property, + get_display_property (0, Qmin_width, object))) + || (charpos > 0 + && EQ (it->min_width_property, + get_display_property (charpos - 1, Qmin_width, + object))))) /* In a buffer -- check that we're really right after the sequence of characters covered by this `min-width'. */ - || (bufpos > BEGV + || (!STRINGP (object) + && charpos > BEGV && EQ (it->min_width_property, - get_display_property (bufpos - 1, Qmin_width, object)))) + get_display_property (charpos - 1, Qmin_width, object)))) { Lisp_Object w = Qnil; double width; @@ -5707,15 +5722,18 @@ display_min_width (struct it *it, ptrdiff_t bufpos, the end. */ if (CONSP (width_spec)) { - if (bufpos == BEGV + if ((!STRINGP (object) + && charpos == BEGV) /* Mode line (see above). */ - || (bufpos == 0 + || (STRINGP (object) + && charpos == 0 && !EQ (it->min_width_property, get_display_property (0, Qmin_width, object))) /* Buffer. */ - || (bufpos > BEGV + || (!STRINGP (object) + && charpos > BEGV && !EQ (width_spec, - get_display_property (bufpos - 1, Qmin_width, object)))) + get_display_property (charpos - 1, Qmin_width, object)))) { it->min_width_property = width_spec; it->min_width_start = it->current_x; @@ -5792,13 +5810,24 @@ handle_display_prop (struct it *it) Qdisplay, object, &overlay); /* Rest of the code must have OBJECT be either a string or a buffer. */ + Lisp_Object objwin = object; if (!STRINGP (it->string)) object = it->w->contents; /* Handle min-width ends. */ if (!NILP (it->min_width_property) && NILP (find_display_property (propval, Qmin_width))) - display_min_width (it, bufpos, object, Qnil); + { + ptrdiff_t pos = bufpos, start = BEGV; + + if (STRINGP (object)) + { + pos = IT_STRING_CHARPOS (*it); + start = 0; + } + if (pos > start) + display_min_width (it, pos, objwin, Qnil); + } if (NILP (propval)) return HANDLED_NORMALLY; @@ -6099,7 +6128,13 @@ handle_single_display_spec (struct it *it, Lisp_Object spec, Lisp_Object object, && CONSP (XCAR (XCDR (spec)))) { if (it) - display_min_width (it, bufpos, object, XCAR (XCDR (spec))); + { + ptrdiff_t pos = bufpos; + + if (STRINGP (object)) + pos = IT_STRING_CHARPOS (*it); + display_min_width (it, pos, object, XCAR (XCDR (spec))); + } return 0; } @@ -9004,6 +9039,10 @@ set_iterator_to_next (struct it *it, bool reseat_p) next, if there is one. */ if (IT_STRING_CHARPOS (*it) >= SCHARS (it->string)) { + /* Maybe add a stretch glyph if the string had 'min-width' + display spec. */ + display_min_width (it, IT_STRING_CHARPOS (*it), it->string, + Qnil); it->ellipsis_p = false; next_overlay_string (it); if (it->ellipsis_p) @@ -9019,6 +9058,12 @@ set_iterator_to_next (struct it *it, bool reseat_p) if (IT_STRING_CHARPOS (*it) == SCHARS (it->string) && it->sp > 0) { + /* Maybe add a stretch glyph if the string had 'min-width' + display spec. We only do this if it->sp > 0 because + mode-line strings are handled differently, see + display_min_width. */ + display_min_width (it, IT_STRING_CHARPOS (*it), it->string, + Qnil); pop_it (it); if (it->method == GET_FROM_STRING) goto consider_string_end; commit 8c251a4c4194802a2b69165d699c3ba43d45c401 Author: Eli Zaretskii Date: Sun Aug 25 09:04:21 2024 +0300 ; Mention in PROBLEMS issues with long popup menus * etc/PROBLEMS: Problems with very long popup menus on Lucid builds. (Bug#72791) diff --git a/etc/PROBLEMS b/etc/PROBLEMS index 4d6927705b1..841294ec7f1 100644 --- a/etc/PROBLEMS +++ b/etc/PROBLEMS @@ -1984,6 +1984,12 @@ To check thoroughly for such resource specifications, use 'xrdb -query' to see what resources the X server records, and also look at the user's ~/.Xdefaults and ~/.Xdefaults-* files. +*** In Emacs built with Lucid cannot display very long popup menus. + +Very long popup menus cannot be shown in their entirety, and don't have +a scroll bar to scroll them vertically. Lucid does not support this +feature. A workaround is to use other toolkits (GTK, LessTif, etc.). + *** Emacs running under X Window System does not handle mouse clicks. *** 'emacs -geometry 80x20' finds a file named '80x20'. commit 0a626a64c70e6842027d58dd2b52776d864cedb2 Author: Mattias EngdegÄrd Date: Sat Aug 24 14:27:26 2024 +0200 * etc/emacs_lldb.py (Lisp_Object): PVEC_COMPILED -> PVEC_CLOSURE diff --git a/etc/emacs_lldb.py b/etc/emacs_lldb.py index ba80d3431f3..219361faffd 100644 --- a/etc/emacs_lldb.py +++ b/etc/emacs_lldb.py @@ -69,7 +69,7 @@ class Lisp_Object: "PVEC_MODULE_FUNCTION": "struct Lisp_Module_Function", "PVEC_NATIVE_COMP_UNIT": "struct Lisp_Native_Comp_Unit", "PVEC_SQLITE": "struct Lisp_Sqlite", - "PVEC_COMPILED": "struct Lisp_Vector", + "PVEC_CLOSURE": "struct Lisp_Vector", "PVEC_CHAR_TABLE": "struct Lisp_Vector", "PVEC_SUB_CHAR_TABLE": "void", "PVEC_RECORD": "struct Lisp_Vector",