commit 822b6cca1e1f80ab6bd28d03f29d288cc6f6ad0e (HEAD, refs/remotes/origin/master) Author: Juri Linkov Date: Wed May 21 09:31:45 2025 +0300 * lisp/treesit.el: New variables for 'down-list' and 'up-list'. (treesit-sexp-type-down-list, treesit-sexp-type-up-list): New buffer-local variables. (treesit-down-list): Use 'treesit-sexp-type-down-list'. (treesit-up-list): Use 'treesit-sexp-type-up-list'. * lisp/progmodes/elixir-ts-mode.el (elixir-ts-mode): Set 'treesit-sexp-type-down-list' and 'treesit-sexp-type-up-list' to 'list'. diff --git a/lisp/progmodes/elixir-ts-mode.el b/lisp/progmodes/elixir-ts-mode.el index 7edf42c2489..b98a1fb96e8 100644 --- a/lisp/progmodes/elixir-ts-mode.el +++ b/lisp/progmodes/elixir-ts-mode.el @@ -792,9 +792,15 @@ Return nil if NODE is not a defun node or doesn't have a name." heex-ts--font-lock-feature-list))) (treesit-major-mode-setup) + (setq-local syntax-propertize-function #'elixir-ts--syntax-propertize) + ;; Enable the 'sexp' navigation by default - (treesit-cycle-sexp-type))) + (setq-local forward-sexp-function #'treesit-forward-sexp + treesit-sexp-type-regexp 'sexp + ;; But still use 'list' for `down-list' and `up-list' + treesit-sexp-type-down-list 'list + treesit-sexp-type-up-list 'list))) (derived-mode-add-parents 'elixir-ts-mode '(elixir-mode)) diff --git a/lisp/treesit.el b/lisp/treesit.el index 68de843ce4d..5df8eb70cbf 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -2981,6 +2981,14 @@ delimits medium sized statements in the source code. It is, however, smaller in scope than sentences. This is used by `treesit-forward-sexp' and friends.") +(defvar-local treesit-sexp-type-down-list nil + "A regexp that matches the sexp nodes for `down-list'. +This is used by `treesit-down-list'.") + +(defvar-local treesit-sexp-type-up-list nil + "A regexp that matches the sexp nodes for `up-list'. +This is used by `treesit-up-list'.") + ;; Avoid interpreting the symbol `list' as a function. (put 'list 'treesit-thing-symbol t) @@ -3126,7 +3134,9 @@ redefined by the variable `down-list-function'. ARG is described in the docstring of `down-list'." (interactive "^p") - (let* ((pred (or treesit-sexp-type-regexp 'list)) + (let* ((pred (or treesit-sexp-type-down-list + treesit-sexp-type-regexp + 'list)) (arg (or arg 1)) (cnt arg) (inc (if (> arg 0) 1 -1))) @@ -3142,7 +3152,8 @@ ARG is described in the docstring of `down-list'." (treesit-thing-prev (point) pred))) (child (when sibling (treesit-node-child sibling (if (> arg 0) 0 -1))))) - (or (when (and (null treesit-sexp-type-regexp) + (or (when (and (null (or treesit-sexp-type-down-list + treesit-sexp-type-regexp)) default-pos (or (null child) (if (> arg 0) @@ -3167,7 +3178,9 @@ redefined by the variable `up-list-function'. ARG is described in the docstring of `up-list'." (interactive "^p") - (let* ((pred (or treesit-sexp-type-regexp 'list)) + (let* ((pred (or treesit-sexp-type-up-list + treesit-sexp-type-regexp + 'list)) (arg (or arg 1)) (treesit--parser-overlay-offset -1) (cnt arg) @@ -3195,7 +3208,8 @@ ARG is described in the docstring of `up-list'." (treesit-node-at (point) (car parsers)) pred) parsers (cdr parsers))))) - (or (when (and (null treesit-sexp-type-regexp) + (or (when (and (null (or treesit-sexp-type-up-list + treesit-sexp-type-regexp)) default-pos (or (null parent) (if (> arg 0) commit 87fa5f565d70c514bd47b59bb0ef0cba8750e983 Author: Juri Linkov Date: Tue May 20 21:30:38 2025 +0300 * lisp/tab-line.el (tab-line-move-tab-forward): New command. (tab-line-move-tab-backward): New command. (tab-line-mode-map): Bind 'C-x M-' to 'tab-line-move-tab-backward' and 'C-x M-' to 'tab-line-move-tab-forward'. (tab-line-switch-repeat-map): Bind 'M-' to 'tab-line-move-tab-backward' and 'M-' to 'tab-line-move-tab-forward'. Suggested by pinmacs . diff --git a/etc/NEWS b/etc/NEWS index edfd7f20f18..4ad6c48d78a 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -383,6 +383,12 @@ customize help text for tabs displayed on the tab-bar. Help text is normally shown in the echo area or via tooltips. See the variable's docstring for arguments passed to a help-text function. +--- +*** New command 'tab-line-move-tab-forward' ('C-x M-'). +Together with the new command 'tab-line-move-tab-backward' +('C-x M-') it can be used to move the current tab +on the tab line to a different position. + ** Project --- diff --git a/lisp/tab-line.el b/lisp/tab-line.el index 552c480725c..411d8cbd70d 100644 --- a/lisp/tab-line.el +++ b/lisp/tab-line.el @@ -1004,7 +1004,7 @@ is possible when `tab-line-switch-cycling' is non-nil." (switch-to-buffer buffer)))))))) (defun tab-line-mouse-move-tab (event) - "Move a tab to a different position on the tab line. + "Move a tab to a different position on the tab line using mouse. This command should be bound to a drag event. It moves the tab at the mouse-down event to the position at mouse-up event. It can be used only when `tab-line-tabs-function' is @@ -1028,6 +1028,46 @@ customized to `tab-line-tabs-fixed-window-buffers'." (set-window-parameter window1 'tab-line-cache nil) (with-selected-window window1 (force-mode-line-update)))))) +(defun tab-line-move-tab-forward (&optional arg) + "Move a tab to a different position on the tab line. +ARG specifies the number of positions to move: +- When positive, move the current tab ARG positions to the right. +- When negative, move the current tab -ARG positions to the left. +- When nil, act as if ARG is 1, moving one position to the right. +It can be used only when `tab-line-tabs-function' is +customized to `tab-line-tabs-fixed-window-buffers'." + (interactive "p") + (when (eq tab-line-tabs-function #'tab-line-tabs-fixed-window-buffers) + (let* ((window (selected-window)) + (buffers (window-parameter window 'tab-line-buffers)) + (buffer (current-buffer)) + (pos (seq-position buffers buffer)) + (len (length buffers)) + (new-pos (+ pos (or arg 1)))) + (when (and pos (> len 1)) + (setq new-pos (if tab-line-switch-cycling + (mod new-pos len) + (max 0 (min new-pos (1- len))))) + (setq buffers (delq buffer buffers)) + (setq buffers (append + (seq-take buffers new-pos) + (list buffer) + (seq-drop buffers new-pos))) + (set-window-parameter window 'tab-line-buffers buffers) + (set-window-parameter window 'tab-line-cache nil) + (force-mode-line-update))))) + +(defun tab-line-move-tab-backward (&optional arg) + "Move a tab to a different position on the tab line. +ARG specifies the number of positions to move: +- When positive, move the current tab ARG positions to the left. +- When negative, move the current tab -ARG positions to the right. +- When nil, act as if ARG is 1, moving one position to the left. +It can be used only when `tab-line-tabs-function' is +customized to `tab-line-tabs-fixed-window-buffers'." + (interactive "p") + (tab-line-move-tab-forward (- (or arg 1)))) + (defcustom tab-line-close-tab-function 'bury-buffer "What to do upon closing a tab on the tab line. @@ -1133,14 +1173,18 @@ However, return the correct mouse position list if EVENT is a :doc "Keymap for keys of `tab-line-mode'." "C-x " #'tab-line-switch-to-prev-tab "C-x C-" #'tab-line-switch-to-prev-tab + "C-x M-" #'tab-line-move-tab-backward "C-x " #'tab-line-switch-to-next-tab - "C-x C-" #'tab-line-switch-to-next-tab) + "C-x C-" #'tab-line-switch-to-next-tab + "C-x M-" #'tab-line-move-tab-forward) (defvar-keymap tab-line-switch-repeat-map :doc "Keymap to repeat tab/buffer cycling. Used in `repeat-mode'." :repeat t - "" #'tab-line-switch-to-prev-tab - "" #'tab-line-switch-to-next-tab) + "" #'tab-line-switch-to-prev-tab + "M-" #'tab-line-move-tab-backward + "" #'tab-line-switch-to-next-tab + "M-" #'tab-line-move-tab-forward) ;;;###autoload (define-minor-mode tab-line-mode commit d8bf84f7f45620070f5666c023ca977eebf4dd90 Author: Elijah Gabe Pérez Date: Mon May 19 18:33:39 2025 -0400 lisp/progmodes/hideshow.el (hs--get-ellipsis): Simplify Mostly using `truncate-string-ellipsis`. diff --git a/lisp/progmodes/hideshow.el b/lisp/progmodes/hideshow.el index 5eb3a729ac5..445bdeeb7a7 100644 --- a/lisp/progmodes/hideshow.el +++ b/lisp/progmodes/hideshow.el @@ -219,6 +219,7 @@ ;; unbundles state save and restore, and includes more isearch support. ;;; Code: +(require 'mule-util) ; For `truncate-string-ellipsis' ;;--------------------------------------------------------------------------- ;; user-configurable variables @@ -564,46 +565,35 @@ to call with the newly initialized overlay." (defun hs--get-ellipsis (b e) "Helper function for `hs-make-overlay'. This returns the ellipsis string to use and its face." - (cond* - ((bind* - (standard-display-table (or standard-display-table - (make-display-table))) - (d-t-ellipsis (display-table-slot standard-display-table 'selective-display)) - (d-t-face ; Get only the first glyph face - (if d-t-ellipsis (glyph-face (aref d-t-ellipsis 0)))) - ;; Convert the ellipsis vector from display-table to a propertized - ;; string - (ellipsis - (cond - ((and d-t-ellipsis - (not (stringp d-t-ellipsis)) - ;; Ensure the vector is not empty - (not (length= d-t-ellipsis 0))) - (let ((string - (mapconcat - (lambda (g) - (apply #'propertize - (char-to-string (glyph-char g)) - (if (glyph-face g) - (list 'face (glyph-face g))))) - d-t-ellipsis))) - ;; If the ellipsis string has no face, use `hs-ellipsis' - (if (get-text-property 0 'face string) - string - (propertize string 'face 'hs-ellipsis)))) - ((char-displayable-on-frame-p ?…) - (propertize "…" 'face 'hs-ellipsis)) - (t (propertize "..." 'face 'hs-ellipsis)))))) - (hs-display-lines-hidden - (let ((lines (1- (count-lines b e)))) - (concat - (propertize - (concat (number-to-string lines) - (if (= lines 1) " line" " lines")) - 'face (or d-t-face 'hs-ellipsis)) - ellipsis))) - (t - ellipsis))) + (let* ((standard-display-table + (or standard-display-table (make-display-table))) + (d-t-ellipsis + (display-table-slot standard-display-table 'selective-display)) + ;; Convert ellipsis vector to a propertized string + (string + (if (and (vectorp d-t-ellipsis) + ;; Ensure the vector is not empty + (not (length= d-t-ellipsis 0))) + (mapconcat + (lambda (g) + (apply #'propertize (char-to-string (glyph-char g)) + (if (glyph-face g) (list 'face (glyph-face g))))) + d-t-ellipsis))) + (string-face (if string (get-text-property 0 'face string))) + (lines (if-let* (hs-display-lines-hidden + (l (1- (count-lines b e))) + (l-str (concat (number-to-string l) + (if (= l 1) " line" " lines")))) + (apply #'propertize l-str + (if string-face + (list 'face string-face)))))) + (if string-face + ;; Return STRING and LINES if STRING has no face + (concat lines string) + ;; Otherwise propertize both with `hs-ellipsis' + (propertize + (concat lines (or string (truncate-string-ellipsis))) + 'face 'hs-ellipsis)))) (defun hs-isearch-show (ov) "Delete overlay OV, and set `hs-headline' to nil. commit cd364a2119b81f58e0d8f6579809dceb86a8f63c Author: Spencer Baugh Date: Mon May 19 11:35:38 2025 -0400 Fix 'completion-ignore-case' with 'completion--file-name-table' 509cbe1c35b3d "Improve env var handling in read-file-name" caused 'try-completion' and 'all-completion' operations with 'completion--file-name-table' to no longer update the case of text which was already present in the input string. That is, completions would be returned ignoring case, but the completions would have letter-casing which matched the input string rather than matching the actual file names. This was caused by unnecessarily replacing text in the returned file name completions with text from the input string ORIG, which in turn was caused by the desire to preserve text from ORIG even after 'substitute-in-file-name' changed it. Fix this by detecting when ORIG was not substantially changed by 'substitute-in-file-name'; in that case, the returned file name completions also don't need substantial changes. * lisp/minibuffer.el (completion--file-name-table): Use text from the completions, not the input string. (Bug#78323) * test/lisp/minibuffer-tests.el (completion-table-test-quoting): Test with 'completion-ignore-case' as well. diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index c2c3b5823a2..122459be062 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -3536,6 +3536,16 @@ except that it passes the file name through `substitute-in-file-name'." (if (eq (car-safe action) 'boundaries) (cons 'boundaries (completion--sifn-boundaries orig table pred (cdr action))) (let* ((sifned (substitute-in-file-name orig)) + (orig-start (car (completion--sifn-boundaries orig table pred ""))) + (sifned-start (car (completion-boundaries sifned table pred ""))) + (orig-in-bounds (substring orig orig-start)) + (sifned-in-bounds (substring sifned sifned-start)) + (only-need-double-dollars + ;; If true, sifn only un-doubled $s in ORIG, so we can fix a + ;; completion to match ORIG by just doubling $s again. This + ;; preserves more text from the completion, behaving better with + ;; non-nil `completion-ignore-case'. + (string-equal orig-in-bounds (minibuffer--double-dollars sifned-in-bounds))) (result (let ((completion-regexp-list ;; Regexps are matched against the real file names after @@ -3550,21 +3560,21 @@ except that it passes the file name through `substitute-in-file-name'." (if (stringp result) ;; Extract the newly added text, quote any dollar signs, and ;; append it to ORIG. - (let ((new-text (substring result (length sifned)))) - (concat orig (minibuffer--double-dollars new-text))) + (if only-need-double-dollars + (concat (substring orig nil orig-start) + (minibuffer--double-dollars (substring result sifned-start))) + (let ((new-text (substring result (length sifned)))) + (concat orig (minibuffer--double-dollars new-text)))) result)) ((eq action t) ; all-completions (mapcar - (let ((orig-prefix - (substring orig (car (completion--sifn-boundaries orig table pred "")))) - (sifned-prefix-length - (- (length sifned) - (car (completion-boundaries sifned table pred ""))))) + (if only-need-double-dollars + #'minibuffer--double-dollars ;; Extract the newly added text, quote any dollar signs, and append ;; it to the part of ORIG inside the completion boundaries. (lambda (compl) - (let ((new-text (substring compl sifned-prefix-length))) - (concat orig-prefix (minibuffer--double-dollars new-text))))) + (let ((new-text (substring compl (length sifned-in-bounds)))) + (concat orig-in-bounds (minibuffer--double-dollars new-text))))) result)) (t result)))))) diff --git a/test/lisp/minibuffer-tests.el b/test/lisp/minibuffer-tests.el index bed797bdb14..f9a26d17e58 100644 --- a/test/lisp/minibuffer-tests.el +++ b/test/lisp/minibuffer-tests.el @@ -108,7 +108,26 @@ (should (equal (completion-try-completion input #'completion--file-name-table nil (length input)) - (cons output (length output))))))) + (cons output (length output))))) + ;; Everything also works with `completion-ignore-case'. + (let ((completion-ignore-case t)) + (pcase-dolist (`(,input ,output) + '( + ("data/M-CTTQ" "data/minibuffer-test-cttq$$tion") + ("data/M-CTTQ$$t" "data/minibuffer-test-cttq$$tion") + ;; When an env var is in the completion bounds, try-completion + ;; won't change letter case. + ("lisp/c${CTTQ1}E" "lisp/c${CTTQ1}Et/") + ("lisp/ced${CTTQ2}SE-U" "lisp/ced${CTTQ2}SEmantic-utest") + ;; If the env var is before the completion bounds, try-completion + ;; *will* change letter case. + ("lisp/c${CTTQ1}et/SE-U" "lisp/c${CTTQ1}et/semantic-utest") + ("lis/c${CTTQ1}/SE-U" "lisp/c${CTTQ1}et/semantic-utest") + )) + (should (equal (car (completion-try-completion input + #'completion--file-name-table + nil (length input))) + output)))))) (ert-deftest completion--insert-strings-faces () (with-temp-buffer commit 0de59ded25aa9f1751edb7170c51a98be70b7edf Author: Martin Rudalics Date: Mon May 19 09:14:15 2025 +0200 Fix thinko in 'fit-frame-to-buffer-1' (Bug#78418) * lisp/window.el (fit-frame-to-buffer-1): Don't add extra line when character sizes evenly divide decorations sizes (Bug#78418). diff --git a/lisp/window.el b/lisp/window.el index e0e626e9500..e372ef8b9bb 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -10153,14 +10153,14 @@ for `fit-frame-to-buffer'." ;; this may cause lines getting wrapped. To avoid that, round ;; sizes up here which will, however, leave a blank space at the ;; end of the longest line(s). - (setq text-minus-body-width - (+ text-minus-body-width - (- char-width - (% text-minus-body-width char-width)))) - (setq text-minus-body-height - (+ text-minus-body-height - (- char-height - (% text-minus-body-height char-height))))) + (let ((remainder (% text-minus-body-width char-width))) + (unless (zerop remainder) + (setq text-minus-body-width + (+ text-minus-body-width (- char-width remainder))))) + (let ((remainder (% text-minus-body-height char-height))) + (unless (zerop remainder) + (setq text-minus-body-height + (+ text-minus-body-height(- char-height remainder)))))) (setq text-width (if width (+ width text-minus-body-width) commit baa33c3806074453a4410dd0128d47b576b5ed0c Author: Michael Albinus Date: Mon May 19 08:45:37 2025 +0200 ; Fix last change diff --git a/test/infra/gitlab-ci.yml b/test/infra/gitlab-ci.yml index 10ee1527b9b..26ea1807457 100644 --- a/test/infra/gitlab-ci.yml +++ b/test/infra/gitlab-ci.yml @@ -110,16 +110,12 @@ default: # - 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} - - find ${test_name}/ -depth ! -name "*.log" ! -name "*.xml" -type f -print - - find ${test_name}/ -depth ! -name "*.log" ! -name "*.xml" -type f -delete - - find ${test_name}/ -depth -empty -type d -print - - find ${test_name}/ -depth -empty -type d -delete - - test -n "$(docker ps -aq -f name=${test_name})" && docker cp ${test_name}:checkout/configure.log ${test_name} - - test -n "$(docker ps -aq -f name=${test_name})" && docker cp ${test_name}:checkout/compatibility-report.html ${test_name} + - test -n "$(docker ps -aq -f name=${test_name})" && docker cp ${test_name}:checkout/configure.log ${test_name} || true + - test -n "$(docker ps -aq -f name=${test_name})" && docker cp ${test_name}:checkout/compatibility-report.html ${test_name} || true - test -n "$(docker ps -aq -f name=${test_name})" && docker rm ${test_name} - # - find ${test_name} ! \( -name "*.log" -o -name ${EMACS_TEST_JUNIT_REPORT} \) -type f -delete + - find ${test_name} ! \( -name "*.log" -o -name ${EMACS_TEST_JUNIT_REPORT} -o -name compatibility-report.html \) -type f -delete # BusyBox find does not know -empty. - # - find ${test_name} -type d -depth -exec rmdir {} + 2>/dev/null + - find ${test_name} -type d -depth -exec rmdir {} + 2>/dev/null .build-template: needs: [] @@ -326,9 +322,6 @@ build-image-tree-sitter: extends: [.job-template, .build-template, .tree-sitter-template] variables: target: emacs-tree-sitter - artifacts: - paths: - - ${test_name}/compatibility-report.html test-tree-sitter: stage: platforms commit 860a6c86c5696513707f980dffbe7c58f0f52b7b Author: Stefan Monnier Date: Sun May 18 15:48:54 2025 -0400 eww.el: Misc changes * lisp/net/eww.el (eww--parse-html-region): Don't decode when it's a no-op. (eww-display-raw): Simplify. (eww-mode): Prefer #' to quote function names. (eww-switch-to-buffer): Use `completion-table-with-metadata` instead of `completion-extra-properties`. Don't prompt the user when there's only one choice. (eww-buffer-list): Use `eww--buffer-p`. diff --git a/lisp/net/eww.el b/lisp/net/eww.el index ad2355db3c6..5462b3c78f4 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el @@ -784,9 +784,11 @@ Use CODING-SYSTEM to decode the region; if nil, decode as UTF-8. This replaces the region with the preprocessed HTML." (setq coding-system (or coding-system 'utf-8)) (with-restriction start end - (condition-case nil - (decode-coding-region (point-min) (point-max) coding-system) - (coding-system-error nil)) + (unless (and (not enable-multibyte-characters) + (eq coding-system 'utf-8)) + (condition-case nil + (decode-coding-region (point-min) (point-max) coding-system) + (coding-system-error nil))) ;; Remove CRLF and replace NUL with � before parsing. (while (re-search-forward "\\(\r$\\)\\|\0" nil t) (replace-match (if (match-beginning 1) "" "�") t t)) @@ -1034,7 +1036,7 @@ This replaces the region with the preprocessed HTML." (erase-buffer) (insert data) (condition-case nil - (decode-coding-region (point-min) (1+ (length data)) encode) + (decode-coding-region (point-min) (point) encode) (coding-system-error nil))) (goto-char (point-min))))) @@ -1383,7 +1385,7 @@ within text input fields." (setq-local shr-url-transformer #'eww--transform-url) ;; Also rescale images when rescaling the text. (add-hook 'text-scale-mode-hook #'eww--rescale-images nil t) - (setq-local outline-search-function 'shr-outline-search + (setq-local outline-search-function #'shr-outline-search outline-level 'shr-outline-level) (add-hook 'post-command-hook #'eww-check-text-conversion nil t) (setq buffer-read-only t) @@ -2322,24 +2324,22 @@ If CHARSET is nil then use UTF-8." If no such buffer exist, fallback to calling `eww'." (interactive nil eww-mode) (let ((list (cl-loop for buf in (nreverse (buffer-list)) - if (eww--buffer-p buf) - return buf))) + if (and (eww--buffer-p buf) + (not (eq buf (current-buffer)))) + collect (buffer-name buf)))) (if list (pop-to-buffer-same-window - (let ((curbuf (current-buffer))) - (minibuffer-with-setup-hook - (lambda () - (setq-local completion-extra-properties - `(:annotation-function - ,(lambda (buf) - (with-current-buffer buf - (format " %s" (eww-current-url))))))) - (read-buffer "Switch to EWW buffer: " - list t - (lambda (bufn) - (setq bufn (or (cdr-safe bufn) (get-buffer bufn))) - (and (eww--buffer-p bufn) - (not (eq bufn curbuf)))))))) + (if (length= list 1) + (car list) + (completing-read "Switch to EWW buffer: " + (completion-table-with-metadata + list + `((category . buffer) + (annotation-function + . ,(lambda (buf) + (with-current-buffer buf + (format " %s" (eww-current-url))))))) + nil t))) (call-interactively #'eww)))) (defun eww-toggle-fonts () @@ -2714,7 +2714,7 @@ see)." (defun eww-buffer-list () "Return a list of all live eww buffers." - (match-buffers '(derived-mode . eww-mode))) + (match-buffers #'eww--buffer-p)) (defun eww-list-buffers () "Pop a buffer with a list of eww buffers." commit 168b67b1eeb2e2b79d2e5f3712d8ebfda31fd753 Author: Stefan Monnier Date: Sun May 18 15:44:35 2025 -0400 eww.el: Use `track-changes` * lisp/net/eww.el: Require `track-changes`. (eww-display-document): Don't `inhibit-modification-hooks` any more. Use `track-changes-register` *at the end* instead. (eww-mode): Don't use `after-change-functions` any more. (eww--track-changes): New function. (eww--process-text-input): Rename from `eww-process-text-input`. Try and be more careful: don't presume `point` is near the modification. Check for a form both at BEG and at END. Don't rely on `:start/:end` pointing to the right places. Use `:length` instead and shrink the field back to its original length when possible. (eww-size-text-inputs): Set `:length` rather than `:start/:end`. diff --git a/lisp/net/eww.el b/lisp/net/eww.el index 736e42e94fa..ad2355db3c6 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el @@ -35,6 +35,7 @@ (require 'url-file) (require 'vtable) (require 'xdg) +(require 'track-changes) (eval-when-compile (require 'subr-x)) (defgroup eww nil @@ -812,7 +813,6 @@ This replaces the region with the preprocessed HTML." (setq bidi-paragraph-direction nil) (plist-put eww-data :dom document) (let ((inhibit-read-only t) - (inhibit-modification-hooks t) ;; Possibly set by the caller, e.g., `eww-render' which ;; preserves the old URL #target before chasing redirects. (shr-target-id (or shr-target-id @@ -848,6 +848,10 @@ This replaces the region with the preprocessed HTML." (while (and (not (eobp)) (get-text-property (point) 'eww-form)) (forward-line 1))))) + ;; We used to enable this in `eww-mode', but it cause tracking + ;; of changes while we insert the document, whereas we only care about + ;; changes performed afterwards. + (track-changes-register #'eww--track-changes :nobefore t) (eww-size-text-inputs)))) (defun eww-display-html (charset url &optional document point buffer) @@ -1350,14 +1354,11 @@ within text input fields." ;; Autoload cookie needed by desktop.el. ;;;###autoload (define-derived-mode eww-mode special-mode "eww" - "Mode for browsing the web. - -\\{eww-mode-map}" + "Mode for browsing the web." :interactive nil (setq-local eww-data (list :title "")) (setq-local browse-url-browser-function #'eww-browse-url) - (add-hook 'after-change-functions #'eww-process-text-input nil t) - (add-hook 'context-menu-functions 'eww-context-menu 5 t) + (add-hook 'context-menu-functions #'eww-context-menu 5 t) (setq-local eww-history nil) (setq-local eww-history-position 0) (when (boundp 'tool-bar-map) @@ -1485,7 +1486,6 @@ instead of `browse-url-new-window-flag'." (defun eww-restore-history (elem) (let ((inhibit-read-only t) - (inhibit-modification-hooks t) (text (plist-get elem :text))) (setq eww-data elem) (if (null text) @@ -1756,16 +1756,34 @@ Interactively, EVENT is the value of `last-nonmenu-event'." "List of input types which represent a text input. See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.") -(defun eww-process-text-input (beg end replace-length) - (when-let* ((pos (field-beginning (point)))) - (let* ((form (get-text-property pos 'eww-form)) - (properties (text-properties-at pos)) +(defun eww--track-changes (tracker-id) + (track-changes-fetch + tracker-id + (lambda (beg end len) + (eww--process-text-input beg end len) + ;; Disregard our own changes. + (track-changes-fetch tracker-id #'ignore)))) + +(defun eww--process-text-input (beg end replace-length) + (when-let* ((_ (integerp replace-length)) + (pos end) + (form (or (get-text-property pos 'eww-form) + (progn + (setq pos (max (point-min) (1- beg))) + (get-text-property pos 'eww-form))))) + (let* ((properties (text-properties-at pos)) (buffer-undo-list t) (inhibit-read-only t) (length (- end beg replace-length)) (type (plist-get form :type))) - (when (and form - (member type eww-text-input-types)) + (when (member type eww-text-input-types) + ;; Make sure the new text has the right properties, which also + ;; integrates the new text into the "current field". + (set-text-properties beg end properties) + ;; FIXME: This tries to preserve the "length" of the input field, + ;; but we should try to preserve the *width* instead. + ;; FIXME: Maybe instead of inserting/deleting spaces, we should + ;; have a single stretch-space character at the end. (cond ((> length 0) ;; Delete some space at the end. @@ -1781,18 +1799,21 @@ See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.") ((< length 0) ;; Add padding. (save-excursion - (goto-char end) - (goto-char - (if (equal type "textarea") - (1- (line-end-position)) - (1+ (eww-end-of-field)))) - (let ((start (point))) - (insert (make-string (abs length) ? )) - (set-text-properties start (point) properties)) - (goto-char (1- end))))) - (set-text-properties (cdr (assq :start form)) - (cdr (assq :end form)) - properties) + (goto-char pos) + (let* ((field-length (- (eww-end-of-field) + (eww-beginning-of-field))) + (ideal-length (cdr (assq :length form)))) + ;; FIXME: This test isn't right for multiline fields. + (when (or (null ideal-length) (> ideal-length field-length)) + (goto-char + (if (equal type "textarea") + (1- (line-end-position)) + (1+ (eww-end-of-field)))) + (let ((start (point))) + (insert (make-string (min (abs length) + (- ideal-length field-length)) + ? )) + (set-text-properties start (point) properties))))))) (let ((value (buffer-substring-no-properties (eww-beginning-of-field) (eww-end-of-field)))) @@ -2014,11 +2035,11 @@ Interactively, EVENT is the value of `last-nonmenu-event'." (< start (point-max))) (when (or (get-text-property start 'eww-form) (setq start (next-single-property-change start 'eww-form))) - (let ((props (get-text-property start 'eww-form))) - (nconc props (list (cons :start start))) + (let ((props (get-text-property start 'eww-form)) + (beg start)) (setq start (next-single-property-change start 'eww-form nil (point-max))) - (nconc props (list (cons :end start)))))))) + (nconc props (list (cons :length (- start beg))))))))) (defun eww-input-value (input) (let ((type (plist-get input :type)) commit 48c66f26c1454c449ac40407651d22dc5cc57424 Author: Stefan Monnier Date: Sun May 18 15:31:10 2025 -0400 lisp/net/eww.el: Remove redundant `:group` arguments diff --git a/lisp/net/eww.el b/lisp/net/eww.el index 3fdb64db1ee..736e42e94fa 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el @@ -49,7 +49,6 @@ - %t is replaced by the title. - %u is replaced by the URL." :version "24.4" - :group 'eww :type 'string) (defcustom eww-search-confirm-send-region t @@ -60,13 +59,11 @@ default to mitigate the risk of accidental data leak. Set this variable to nil to send the region to the search engine straight away." :version "31.1" - :group 'eww :type 'boolean) (defcustom eww-search-prefix "https://duckduckgo.com/html/?q=" "Prefix URL to search engine." :version "24.4" - :group 'eww :type 'string) (defcustom eww-use-browse-url "\\`mailto:" @@ -80,7 +77,6 @@ The action to be taken can be further customized via "Default directory where `eww' saves downloaded files. Used by `eww--download-directory', which see." :version "29.1" - :group 'eww :type 'directory) (defun eww--download-directory () @@ -99,7 +95,6 @@ is defined, use the latter instead." This should either be a directory name or a function (called with no parameters) that returns a directory name." :version "28.1" - :group 'eww :type '(choice directory function)) ;;;###autoload @@ -113,7 +108,6 @@ Each of the elements is a function returning either a string or a list of strings. The results will be joined into a single list with duplicate entries (if any) removed." :version "30.1" - :group 'eww :type 'hook :options '(eww-links-at-point thing-at-point-url-at-point @@ -131,13 +125,11 @@ complete response of the server from which the page was requested. If the list of the functions is exhausted without any non-nil value, EWW assumes content-type is \"application/octet-stream\", per RFC-9110." :version "31.1" - :group 'eww :type '(repeat function)) (defcustom eww-bookmarks-directory user-emacs-directory "Directory where bookmark files will be stored." :version "25.1" - :group 'eww :type 'directory) (defcustom eww-desktop-remove-duplicates t @@ -146,7 +138,6 @@ If non-nil, repetitive EWW history entries (comprising of the URI, the title, and the point position) will not be saved as part of the Emacs desktop. Otherwise, such entries will be retained." :version "25.1" - :group 'eww :type 'boolean) (defcustom eww-restore-desktop nil @@ -156,7 +147,6 @@ If nil, buffers will require manual reload, and will contain the text specified in `eww-restore-reload-prompt' instead of the actual Web page contents." :version "25.1" - :group 'eww :type '(choice (const :tag "Restore all automatically" t) (const :tag "Require manual reload" nil))) @@ -167,13 +157,11 @@ This prompt will be used if `eww-restore-desktop' is nil. The string will be passed through `substitute-command-keys'." :version "25.1" - :group 'eww :type 'string) (defcustom eww-history-limit 50 "Maximum number of entries to retain in the history." :version "25.1" - :group 'eww :type '(choice (const :tag "Unlimited" nil) integer)) @@ -192,7 +180,6 @@ the first item is the program, and the rest are the arguments." "\\`\\(video/\\|audio/\\|application/ogg\\)" "Always use external browser for specified content-type." :version "24.4" - :group 'eww :type '(choice (const :tag "Never" nil) regexp)) @@ -203,7 +190,6 @@ If t, then open the URL in a new tab rather than a new buffer if If `tab-bar', then open the URL in a new tab only when the tab bar is enabled." :version "27.1" - :group 'eww :type '(choice (const :tag "Always open URL in new tab" t) (const :tag "Open new tab when tab bar is enabled" tab-bar) (const :tag "Never open URL in new tab" nil))) @@ -226,7 +212,6 @@ EWW provides the following values for this option: You can also set this to any other function you wish." :version "30.1" - :group 'eww :type '(choice (function-item :tag "Delete future history" eww-delete-future-history) (function-item :tag "Clone previous history" @@ -238,7 +223,6 @@ You can also set this to any other function you wish." (defcustom eww-after-render-hook nil "A hook called after eww has finished rendering the buffer." :version "25.1" - :group 'eww :type 'hook) (defcustom eww-auto-rename-buffer nil @@ -266,20 +250,17 @@ of `eww-buffer-name-length'." (const :tag "Do not rename buffers (default)" nil) (const :tag "Rename buffer to web page title" title) (const :tag "Rename buffer to web page URL" url) - (function :tag "A user-defined function to rename the buffer")) - :group 'eww) + (function :tag "A user-defined function to rename the buffer"))) (defcustom eww-buffer-name-length 40 "Length of renamed buffer name, per `eww-auto-rename-buffer'." :type 'natnum - :version "29.1" - :group 'eww) + :version "29.1") (defcustom eww-form-checkbox-selected-symbol "[X]" "Symbol used to represent a selected checkbox. See also `eww-form-checkbox-symbol'." :version "24.4" - :group 'eww :type '(choice (const "[X]") (const "☒") ; Unicode BALLOT BOX WITH X (const "☑") ; Unicode BALLOT BOX WITH CHECK @@ -289,7 +270,6 @@ See also `eww-form-checkbox-symbol'." "Symbol used to represent a checkbox. See also `eww-form-checkbox-selected-symbol'." :version "24.4" - :group 'eww :type '(choice (const "[ ]") (const "☐") ; Unicode BALLOT BOX string)) @@ -327,62 +307,54 @@ by default." :box (:line-width 2 :style released-button) :background "#808080" :foreground "black")) "Face for eww buffer buttons." - :version "24.4" - :group 'eww) + :version "24.4") (defface eww-form-file '((((type x w32 ns haiku pgtk android) (class color)) ; Like default mode line :box (:line-width 2 :style released-button) :background "#808080" :foreground "black")) "Face for eww buffer buttons." - :version "25.1" - :group 'eww) + :version "25.1") (defface eww-form-checkbox '((((type x w32 ns haiku pgtk android) (class color)) ; Like default mode line :box (:line-width 2 :style released-button) :background "lightgrey" :foreground "black")) "Face for eww buffer buttons." - :version "24.4" - :group 'eww) + :version "24.4") (defface eww-form-select '((((type x w32 ns haiku pgtk android) (class color)) ; Like default mode line :box (:line-width 2 :style released-button) :background "lightgrey" :foreground "black")) "Face for eww buffer buttons." - :version "24.4" - :group 'eww) + :version "24.4") (defface eww-form-text '((t :background "#505050" :foreground "white" :box (:line-width 1))) "Face for eww text inputs." - :version "24.4" - :group 'eww) + :version "24.4") (defface eww-form-textarea '((t :background "#C0C0C0" :foreground "black" :box (:line-width 1))) "Face for eww textarea inputs." - :version "24.4" - :group 'eww) + :version "24.4") (defface eww-invalid-certificate '((default :weight bold) (((class color)) :foreground "red")) "Face for web pages with invalid certificates." - :version "25.1" - :group 'eww) + :version "25.1") (defface eww-valid-certificate '((default :weight bold) (((class color)) :foreground "ForestGreen")) "Face for web pages with valid certificates." - :version "25.1" - :group 'eww) + :version "25.1") (defvar eww-data nil) (defvar eww-history nil) commit c8294f3a0fc5eb3302cd3513fb99333d21fab33e Author: Michael Albinus Date: Sun May 18 20:39:59 2025 +0200 Generate tree-sitter compatibility report on emba * test/infra/Dockerfile.emba (emacs-tree-sitter): Generate compatibility report. * test/infra/gitlab-ci.yml (.job-template): Modify artifacts preparation. (build-tree-sitter): Add artifact. diff --git a/test/infra/Dockerfile.emba b/test/infra/Dockerfile.emba index b7af7006acf..96fe0440667 100644 --- a/test/infra/Dockerfile.emba +++ b/test/infra/Dockerfile.emba @@ -140,7 +140,13 @@ RUN src/emacs -Q --batch \ --eval '(message "treesit-language-source-alist\n%s" \ (pp-to-string treesit-language-source-alist))' \ --eval '(dolist (lang (sort (mapcar (quote car) treesit-language-source-alist))) \ - (message "%s ABI version %d" lang (treesit-language-abi-version lang)))' + (message "%s ABI version %d" lang (treesit-language-abi-version lang)))' \ + -l admin/tree-sitter/treesit-admin.el \ + --eval '(setq treesit-admin--builtin-language-sources treesit-language-source-alist)' \ + -f treesit-admin-check-manual-coverage \ + --eval '(treesit-admin--generate-compatibility-report \ + (list (expand-file-name "src/emacs")) treesit-admin--builtin-modes \ + (expand-file-name "compatibility-report.html"))' FROM emacs-base as emacs-gnustep diff --git a/test/infra/gitlab-ci.yml b/test/infra/gitlab-ci.yml index a0666550030..10ee1527b9b 100644 --- a/test/infra/gitlab-ci.yml +++ b/test/infra/gitlab-ci.yml @@ -110,11 +110,16 @@ default: # - 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} + - find ${test_name}/ -depth ! -name "*.log" ! -name "*.xml" -type f -print + - find ${test_name}/ -depth ! -name "*.log" ! -name "*.xml" -type f -delete + - find ${test_name}/ -depth -empty -type d -print + - find ${test_name}/ -depth -empty -type d -delete - test -n "$(docker ps -aq -f name=${test_name})" && docker cp ${test_name}:checkout/configure.log ${test_name} + - test -n "$(docker ps -aq -f name=${test_name})" && docker cp ${test_name}:checkout/compatibility-report.html ${test_name} - test -n "$(docker ps -aq -f name=${test_name})" && docker rm ${test_name} - - find ${test_name} ! \( -name "*.log" -o -name ${EMACS_TEST_JUNIT_REPORT} \) -type f -delete + # - find ${test_name} ! \( -name "*.log" -o -name ${EMACS_TEST_JUNIT_REPORT} \) -type f -delete # BusyBox find does not know -empty. - - find ${test_name} -type d -depth -exec rmdir {} + 2>/dev/null + # - find ${test_name} -type d -depth -exec rmdir {} + 2>/dev/null .build-template: needs: [] @@ -321,6 +326,9 @@ build-image-tree-sitter: extends: [.job-template, .build-template, .tree-sitter-template] variables: target: emacs-tree-sitter + artifacts: + paths: + - ${test_name}/compatibility-report.html test-tree-sitter: stage: platforms commit a4424fb8cd2d638ee348ee7fd08d0e5f397fad75 Author: Sean Whitton Date: Sun May 18 12:35:13 2025 +0100 Factor out vc-git--with-apply-temp-to-staging * lisp/vc/vc-git.el (vc-git--with-apply-temp-to-staging): New macro. (vc-git-checkin): Use it. diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el index 582de105c17..c75c61cb3f4 100644 --- a/lisp/vc/vc-git.el +++ b/lisp/vc/vc-git.el @@ -1111,6 +1111,19 @@ It is based on `log-edit-mode', and has Git-specific extensions." ("Sign-Off" . ,(boolean-arg-fn "--signoff"))) comment))) +(defmacro vc-git--with-apply-temp-to-staging (temp &rest body) + (declare (indent 1) (debug (symbolp body))) + `(let ((,temp (make-nearby-temp-file ,(format "git-%s" temp)))) + (unwind-protect (progn ,@body + ;; This uses `file-local-name' to strip the + ;; TRAMP prefix, not `file-relative-name', + ;; because we've had at least one problem + ;; report where relativizing the file name + ;; meant that Git failed to find it. + (vc-git-command nil 0 nil "apply" "--cached" + (file-local-name ,temp))) + (delete-file ,temp)))) + (defun vc-git-checkin (files comment &optional _rev) (let* ((file1 (or (car files) default-directory)) (root (vc-git-root file1)) @@ -1194,8 +1207,7 @@ It is based on `log-edit-mode', and has Git-specific extensions." (t (push file-name to-stash))) (setq pos (point)))))) (unless (string-empty-p vc-git-patch-string) - (let ((patch-file (make-nearby-temp-file "git-patch")) - ;; Temporarily countermand the let-binding at the + (let (;; Temporarily countermand the let-binding at the ;; beginning of this function. (coding-system-for-write (coding-system-change-eol-conversion @@ -1203,12 +1215,9 @@ It is based on `log-edit-mode', and has Git-specific extensions." ;; to have the Unix EOL format, because Git expects ;; that, even on Windows. (or pcsw vc-git-commits-coding-system) 'unix))) - (with-temp-file patch-file - (insert vc-git-patch-string)) - (unwind-protect - (vc-git-command nil 0 nil "apply" "--cached" - (file-local-name patch-file)) - (delete-file patch-file)))) + (vc-git--with-apply-temp-to-staging patch + (with-temp-file patch + (insert vc-git-patch-string))))) (when to-stash (vc-git--stash-staged-changes to-stash))) (let ((files (and only (not vc-git-patch-string) files)) (args (vc-git--log-edit-extract-headers comment)) @@ -1218,15 +1227,9 @@ It is based on `log-edit-mode', and has Git-specific extensions." (when (and msg-file (file-exists-p msg-file)) (delete-file msg-file)) (when to-stash - (let ((cached (make-nearby-temp-file "git-cached"))) - (unwind-protect - (progn - (with-temp-file cached - (vc-git-command t 0 nil "stash" "show" "-p")) - (vc-git-command nil 0 "apply" "--cached" - (file-local-name cached))) - (delete-file cached)) - (vc-git-command nil 0 nil "stash" "drop")))))) + (vc-git--with-apply-temp-to-staging cached + (with-temp-file cached + (vc-git-command t 0 nil "stash" "show" "-p"))))))) (when msg-file (let ((coding-system-for-write (or pcsw vc-git-commits-coding-system))) @@ -1282,6 +1285,8 @@ It is based on `log-edit-mode', and has Git-specific extensions." (unwind-protect (progn (vc-git-command nil 0 nil "read-tree" "HEAD") + ;; See `vc-git--with-apply-temp-to-staging' + ;; regarding use of `file-local-name'. (vc-git-command nil 0 nil "apply" "--cached" (file-local-name cached)) (setq tree (git-string "write-tree"))) commit 913b4e1c97c0b8ec279cfcf62ed40b5b58393e44 Author: Stephen Berman Date: Sun May 18 09:39:02 2025 +0200 Amend Electric Pair mode documentation * doc/emacs/programs.texi (Matching): Restore to the documentation of Electric Pair mode the description of the use of a prefix argument, which was overwritten by merging changes from the emacs-30 branch, and clarify the usage. diff --git a/doc/emacs/programs.texi b/doc/emacs/programs.texi index c678002ba31..0462f1925b7 100644 --- a/doc/emacs/programs.texi +++ b/doc/emacs/programs.texi @@ -1086,6 +1086,11 @@ delimiters, leaving point after the delimiter you typed (this facilitates continuing to type either before the text following the opening delimiter or after the closing delimiter). + If you provide a prefix argument when inserting an opening +delimiter---and if the region is active, also when inserting a closing +delimiter---this results in the insertion of as many nested pairs of +matching delimiters as the numeric value of that prefix argument. + There are several user options for modifying the behavior of Electric Pair mode: commit 38789e9a2878846cadb72fef58cc24872fe46ae4 Author: Eli Zaretskii Date: Sun May 18 09:05:07 2025 +0300 Improve reporting of language-grammar library ABI version mismatch * lisp/treesit.el (treesit-ready-p): More accurate wording of message when grammar library fails to load. * src/treesit.c (treesit_load_language): Improve message when reporting library ABI version mismatch. Suggested by Soham Gumaste . diff --git a/lisp/treesit.el b/lisp/treesit.el index a353bc942d3..68de843ce4d 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -4297,7 +4297,7 @@ instead of emitting a warning." (pcase-let ((`(,available . ,err) (treesit-language-available-p lang t))) (when (not available) - (setq msg (format "language grammar for %s is unavailable (%s): %s" + (setq msg (format "language grammar for %s failed to load (%s): %s" lang (nth 0 err) (string-join (mapcar (lambda (x) (format "%s" x)) diff --git a/src/treesit.c b/src/treesit.c index 3a19e0cb282..de74e41c89a 100644 --- a/src/treesit.c +++ b/src/treesit.c @@ -757,6 +757,7 @@ treesit_load_language (Lisp_Object language_symbol, error = NULL; handle = NULL; + Lisp_Object loaded_lib = Qnil; FOR_EACH_TAIL (tail) { char *library_name = SSDATA (XCAR (tail)); @@ -764,7 +765,10 @@ treesit_load_language (Lisp_Object language_symbol, handle = dynlib_open (library_name); error = dynlib_error (); if (error == NULL) - break; + { + loaded_lib = XCAR (tail); + break; + } else error_list = Fcons (build_string (error), error_list); } @@ -808,9 +812,15 @@ treesit_load_language (Lisp_Object language_symbol, ts_parser_delete (parser); if (!success) { + Lisp_Object fmt = + build_string ("%s's ABI version is %d, but supported versions are %d-%d"); + Lisp_Object formatted_msg = + CALLN (Fformat_message, fmt, loaded_lib, + make_fixnum (ts_language_version (lang)), + make_fixnum (TREE_SITTER_MIN_COMPATIBLE_LANGUAGE_VERSION), + make_fixnum (TREE_SITTER_LANGUAGE_VERSION)); *signal_symbol = Qtreesit_load_language_error; - *signal_data = list2 (Qversion_mismatch, - make_fixnum (ts_language_version (lang))); + *signal_data = list2 (Qlang_version_mismatch, formatted_msg); return loaded_lang; } @@ -5091,7 +5101,7 @@ syms_of_treesit (void) DEFSYM (Qnot_found, "not-found"); DEFSYM (Qsymbol_error, "symbol-error"); - DEFSYM (Qversion_mismatch, "version-mismatch"); + DEFSYM (Qlang_version_mismatch, "language-grammar-version-mismatch"); DEFSYM (Qtreesit_error, "treesit-error"); DEFSYM (Qtreesit_query_error, "treesit-query-error"); commit 28a8bd6061d99c71ca2ac17868dfc8cf36a1c728 Author: Stefan Monnier Date: Sat May 17 14:23:34 2025 -0400 editorconfig.el: Fix bug#78097 When there is no `.editorconfig` variable, the `file-name-directory` call can signal an error, but that can happen only if `editorconfig-get-local-variables-functions` added entries "out of thin air". So just skip running that hook to avoid this corner case. * lisp/editorconfig.el (editorconfig--get-dir-local-variables): Don't run `editorconfig-get-local-variables-functions` when we found no EditorConfig settings. diff --git a/lisp/editorconfig.el b/lisp/editorconfig.el index bfc8ef46ed3..d9e3899ec3a 100644 --- a/lisp/editorconfig.el +++ b/lisp/editorconfig.el @@ -709,7 +709,8 @@ Meant to be used on `auto-coding-functions'." Meant to be used on `hack-dir-local-get-variables-functions'." (when (stringp buffer-file-name) (let* ((props (editorconfig-call-get-properties-function buffer-file-name)) - (alist (editorconfig--get-local-variables props))) + (alist (if (< 0 (hash-table-count props)) + (editorconfig--get-local-variables props)))) ;; FIXME: If there's `/foo/.editorconfig', `/foo/bar/.dir-locals.el', ;; and `/foo/bar/baz/.editorconfig', it would be nice to return two ;; pairs here, so that hack-dir-local can give different priorities commit b9b52f009289ede7967a176bc6ed069c87514794 Author: Po Lu Date: Sun May 18 08:46:27 2025 +0800 Prevent double frees in closing fonts provided by the Haiku font driver * src/haikufont.c (haikufont_close): Clear INFO->metrics, glyphs, be_font after they are released and do not attempt to access them if NULL. (bug#77478) diff --git a/src/haikufont.c b/src/haikufont.c index 7522b92207f..29a76e674a5 100644 --- a/src/haikufont.c +++ b/src/haikufont.c @@ -890,25 +890,32 @@ haikufont_close (struct font *font) return; block_input (); - if (info && info->be_font) + if (info->be_font) BFont_close (info->be_font); - for (i = 0; i < info->metrics_nrows; i++) + if (info->metrics) { - if (info->metrics[i]) - xfree (info->metrics[i]); + for (i = 0; i < info->metrics_nrows; i++) + { + if (info->metrics[i]) + xfree (info->metrics[i]); + } + xfree (info->metrics); } - if (info->metrics) - xfree (info->metrics); - - for (i = 0; i < 0x100; ++i) + if (info->glyphs) { - if (info->glyphs[i]) - xfree (info->glyphs[i]); + for (i = 0; i < 0x100; ++i) + { + if (info->glyphs[i]) + xfree (info->glyphs[i]); + } + xfree (info->glyphs); } - xfree (info->glyphs); + info->metrics = NULL; + info->glyphs = NULL; + info->be_font = NULL; unblock_input (); } commit f77f464637c6ce86d5d69963543f86bc517ad14c Author: Stefan Monnier Date: Sat May 17 12:34:33 2025 -0400 (eww-switch-to-buffer): Don't let-bind `completion-extra-properties` * lisp/net/eww.el (eww--buffer-p): New function. (eww-switch-to-buffer): Use it. And set `completion-extra-properties` buffer-locally rather than let-binding it. diff --git a/lisp/net/eww.el b/lisp/net/eww.el index e59df6d1699..3fdb64db1ee 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el @@ -2320,29 +2320,33 @@ If CHARSET is nil then use UTF-8." (eww-reload nil 'utf-8) (eww-reload nil charset))) +(defun eww--buffer-p (buf) + (provided-mode-derived-p (buffer-local-value 'major-mode buf) + 'eww-mode)) + (defun eww-switch-to-buffer () "Prompt for an EWW buffer to display in the selected window. If no such buffer exist, fallback to calling `eww'." (interactive nil eww-mode) (let ((list (cl-loop for buf in (nreverse (buffer-list)) - if (with-current-buffer buf (derived-mode-p 'eww-mode)) - return buf))) + if (eww--buffer-p buf) + return buf))) (if list - (let ((completion-extra-properties - `(:annotation-function - ,(lambda (buf) - (with-current-buffer buf - (format " %s" (eww-current-url)))))) - (curbuf (current-buffer))) - (pop-to-buffer-same-window - (read-buffer "Switch to EWW buffer: " - list - t - (lambda (bufn) - (setq bufn (if (consp bufn) (cdr bufn) (get-buffer bufn))) - (and (with-current-buffer bufn - (derived-mode-p 'eww-mode)) - (not (eq bufn curbuf))))))) + (pop-to-buffer-same-window + (let ((curbuf (current-buffer))) + (minibuffer-with-setup-hook + (lambda () + (setq-local completion-extra-properties + `(:annotation-function + ,(lambda (buf) + (with-current-buffer buf + (format " %s" (eww-current-url))))))) + (read-buffer "Switch to EWW buffer: " + list t + (lambda (bufn) + (setq bufn (or (cdr-safe bufn) (get-buffer bufn))) + (and (eww--buffer-p bufn) + (not (eq bufn curbuf)))))))) (call-interactively #'eww)))) (defun eww-toggle-fonts () commit e05f76667d5e723d5a817848ca2db1252827778a Author: Eli Zaretskii Date: Sat May 17 16:46:07 2025 +0300 Support 'dired-hide-details-mode' in find-lisp.el * lisp/find-lisp.el (find-lisp-find-dired-insert-file): Call 'dired-insert-set-properties' to support 'dired-hide-details-mode' in the resulting Dired display. (Bug#78455) diff --git a/lisp/find-lisp.el b/lisp/find-lisp.el index 5f6b56e5f00..ddfc7e9a7b3 100644 --- a/lisp/find-lisp.el +++ b/lisp/find-lisp.el @@ -304,14 +304,16 @@ FILE is a file or a directory name. This function heeds `dired-actual-switches'." (set-buffer buffer) - (insert find-lisp-line-indent - (find-lisp-format - (propertize file 'dired-filename t) - (file-attributes file 'string) - (or (and dired-actual-switches - (split-string-and-unquote dired-actual-switches)) - (list "")) - nil))) + (let ((pt (point))) + (insert find-lisp-line-indent + (find-lisp-format + (propertize file 'dired-filename t) + (file-attributes file 'string) + (or (and dired-actual-switches + (split-string-and-unquote dired-actual-switches)) + (list "")) + nil)) + (dired-insert-set-properties pt (point)))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Lifted from ls-lisp. We don't want to require it, because that commit 2606e3dd994d2d75850630707c00c0156afced9a Author: Mattias Engdegård Date: Sat May 17 11:12:31 2025 +0200 * doc/lispref/searching.texi (Rx Notation): Fix example (bug#76731) The example purporting to match C comments was wrong. Reported by Yue Yi, whose proposed remedy is used here. diff --git a/doc/lispref/searching.texi b/doc/lispref/searching.texi index 7840fe77e60..9e498b56bb4 100644 --- a/doc/lispref/searching.texi +++ b/doc/lispref/searching.texi @@ -1030,13 +1030,13 @@ programming language: @example @group -(rx "/*" ; Initial /* +(rx "/*" ; Initial /* (zero-or-more - (or (not "*") ; Either non-*, - (seq "*" ; or * followed by - (not "/")))) ; non-/ - (one-or-more "*") ; At least one star, - "/") ; and the final / + (or (not "*") ; Either non-*, + (seq (one-or-more "*") ; or some * followed by + (not (or "*" "/"))))) ; neither * nor / + (one-or-more "*") ; At least one star, + "/") ; and the final / @end group @end example @@ -1047,7 +1047,7 @@ or, using shorter synonyms and written more compactly, @group (rx "/*" (* (| (not "*") - (: "*" (not "/")))) + (: (+ "*") (not (in "*/"))))) (+ "*") "/") @end group @end example @@ -1056,7 +1056,7 @@ or, using shorter synonyms and written more compactly, In conventional string syntax, it would be written @example -"/\\*\\(?:[^*]\\|\\*[^/]\\)*\\*+/" +"/\\*\\(?:[^*]\\|\\*+[^*/]\\)*\\*+/" @end example The @code{rx} notation is mainly useful in Lisp code; it cannot be commit e888bd990dcc82690ae33052f2aaec3ca827960c Author: Mattias Engdegård Date: Thu May 15 20:44:56 2025 +0200 * src/lread.c (read0): Don't allow radix 0 or 1. This was just a silly mistake introduced in Emacs 29. Found by Pip Cet. diff --git a/src/lread.c b/src/lread.c index 95c9e711130..98cda8316ac 100644 --- a/src/lread.c +++ b/src/lread.c @@ -4256,7 +4256,7 @@ read0 (Lisp_Object readcharfun, bool locate_syms) if (c == 'r' || c == 'R') { /* #NrDIGITS -- radix-N number */ - if (n < 0 || n > 36) + if (n < 2 || n > 36) invalid_radix_integer (n, readcharfun); obj = read_integer (readcharfun, n); break; commit 6571a2d70b44135ba04baf5d3eabc83fc4c0f085 Author: Eli Zaretskii Date: Sat May 17 15:14:47 2025 +0300 ; Fix a recent change in hideshow.el * lisp/progmodes/hideshow.el (hs--get-ellipsis): Don't assume 'standard-display-table' is defined. diff --git a/lisp/progmodes/hideshow.el b/lisp/progmodes/hideshow.el index ac6eb3681d1..5eb3a729ac5 100644 --- a/lisp/progmodes/hideshow.el +++ b/lisp/progmodes/hideshow.el @@ -566,6 +566,8 @@ to call with the newly initialized overlay." This returns the ellipsis string to use and its face." (cond* ((bind* + (standard-display-table (or standard-display-table + (make-display-table))) (d-t-ellipsis (display-table-slot standard-display-table 'selective-display)) (d-t-face ; Get only the first glyph face (if d-t-ellipsis (glyph-face (aref d-t-ellipsis 0)))) commit bd57055a58d527744523a5f0e13dc68d8521da31 Merge: 214c0ba3c76 299d3a44012 Author: Eli Zaretskii Date: Sat May 17 06:52:01 2025 -0400 Merge from origin/emacs-30 299d3a44012 Fix saving abbrevs by 'abbrev-edit-save-buffer' 399d05332ed ; Remove confusing text from ELisp manual feecb1fbc60 ; * doc/emacs/cmdargs.texi (General Variables): More accu... 18e1aabbeaa ; Improve documentation of the -L command-line option c80fbe3f235 typescript-ts-mode: align ternary-chain branches (bug#78187) 16bfbc6fe31 ; Tramp test fixes f0ac271da38 ; Time Stamps doc: Clearer customize recipe 49c06df224a ; * doc/lispref/variables.texi (Default Value): Update. cbea5997c07 ; * lisp/mh-e/mh-e.el: Commentary: link to The MH-E Manual 0bf956235e3 Improve Tramp test eaf01d034c0 * lisp/autorevert.el (auto-revert-remote-files): Adapt do... e32bb816adb ; Improve documentation of ls-lisp.el 2d5f2434706 ; * lisp/emacs-lisp/comp.el (native-compile-prune-cache):... bb735331650 Improve Electric Pair mode documentation (bug#78021) commit 299d3a440121ff6692a85615ff97e6ad4dde91db Author: Eli Zaretskii Date: Sat May 17 13:00:13 2025 +0300 Fix saving abbrevs by 'abbrev-edit-save-buffer' * lisp/abbrev.el (abbrev-edit-save-buffer): Reset 'abbrevs-changed'. Suggested by Rick . (Bug#78435) diff --git a/lisp/abbrev.el b/lisp/abbrev.el index 93eb086da7a..e0c8a3af931 100644 --- a/lisp/abbrev.el +++ b/lisp/abbrev.el @@ -289,7 +289,8 @@ abbrevs have been saved." The saved abbrevs are written to the file specified by `abbrev-file-name'." (interactive nil edit-abbrevs-mode) - (abbrev-edit-save-to-file abbrev-file-name)) + (abbrev-edit-save-to-file abbrev-file-name) + (setq abbrevs-changed nil)) (defun add-mode-abbrev (arg) commit 399d05332eda348ae7552cdff674e4c8973be815 Author: Eli Zaretskii Date: Sat May 17 12:35:29 2025 +0300 ; Remove confusing text from ELisp manual * doc/lispref/variables.texi (Defining Variables): Remove outdated confusing warning. For the details, see https://lists.gnu.org/archive/html/emacs-devel/2025-05/msg00332.html. diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi index c11d93d4be4..1379498ac16 100644 --- a/doc/lispref/variables.texi +++ b/doc/lispref/variables.texi @@ -615,14 +615,6 @@ float-pi @end example @end defspec - @strong{Warning:} If you use a @code{defconst} or @code{defvar} -special form while the variable has a local binding (made with -@code{let}, or a function argument), it sets the local binding rather -than the global binding. This is not what you usually want. To -prevent this, use these special forms at top level in a file, where -normally no local binding is in effect, and make sure to load the file -before making a local binding for the variable. - @node Tips for Defining @section Tips for Defining Variables Robustly commit 214c0ba3c76b69d8e3ee1ff639782f9380d9054c Author: Eli Zaretskii Date: Sat May 17 12:11:37 2025 +0300 ; * lisp/progmodes/hideshow.el (hs--get-ellipsis): Doc fix (bug#78234). diff --git a/lisp/progmodes/hideshow.el b/lisp/progmodes/hideshow.el index e7987cab5fb..ac6eb3681d1 100644 --- a/lisp/progmodes/hideshow.el +++ b/lisp/progmodes/hideshow.el @@ -563,7 +563,7 @@ to call with the newly initialized overlay." (defun hs--get-ellipsis (b e) "Helper function for `hs-make-overlay'. -This return the ellipsis string to use and its face." +This returns the ellipsis string to use and its face." (cond* ((bind* (d-t-ellipsis (display-table-slot standard-display-table 'selective-display)) commit 8b6e1d8435712a1d312244f9fe3a43d8b346f49a Author: Elías Gabriel Pérez Date: Fri May 2 22:44:07 2025 -0600 Prettify and improve hideshow (bug#78234) Buttonize the ellipsis and optionally display in the ellipsis the total number of hidden lines. * lisp/progmodes/hideshow.el (hs-display-lines-hidden): New user option. (hs-ellipsis): New face. (hs-make-overlay): Tweak. (hs--get-ellipsis): New function. * doc/emacs/programs.texi (Hideshow): Update documentation. * etc/NEWS: Announce changes. diff --git a/doc/emacs/programs.texi b/doc/emacs/programs.texi index f3cdc1b8e6c..b9961662faa 100644 --- a/doc/emacs/programs.texi +++ b/doc/emacs/programs.texi @@ -1668,6 +1668,7 @@ Hide all blocks @var{n} levels below this block @end table @vindex hs-hide-comments-when-hiding-all +@vindex hs-display-lines-hidden @vindex hs-isearch-open @vindex hs-special-modes-alist These variables can be used to customize Hideshow mode: @@ -1677,6 +1678,10 @@ Hide all blocks @var{n} levels below this block If non-@code{nil}, @kbd{C-c @@ C-M-h} (@code{hs-hide-all}) hides comments too. +@item hs-display-lines-hidden +If non-@code{nil}, display the number of hidden lines next to the +ellipsis. + @item hs-isearch-open This variable specifies the conditions under which incremental search should unhide a hidden block when matching text occurs within the diff --git a/etc/NEWS b/etc/NEWS index 04a8a5dc4aa..edfd7f20f18 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -721,6 +721,12 @@ Now 'treesit-explore-mode' (or 'treesit-explore') prompts for a parser rather than a language, and it is now possible to select a local parser at point to explore. +** Hideshow + +*** New user option 'hs-display-lines-hidden'. +If this option is non-nil, Hideshow displays the number of hidden +lines next to the ellipsis. + ** C-ts mode +++ diff --git a/lisp/progmodes/hideshow.el b/lisp/progmodes/hideshow.el index c1d62fb92ab..e7987cab5fb 100644 --- a/lisp/progmodes/hideshow.el +++ b/lisp/progmodes/hideshow.el @@ -228,10 +228,22 @@ :prefix "hs-" :group 'languages) +(defface hs-ellipsis + '((t :height 0.80 :box (:line-width -1) :inherit default)) + "Face used for hideshow ellipsis. +Note: If `selective-display' ellipsis already has a face, hideshow will +use that face for the ellipsis instead." + :version "31.1") + (defcustom hs-hide-comments-when-hiding-all t "Hide the comments too when you do an `hs-hide-all'." :type 'boolean) +(defcustom hs-display-lines-hidden nil + "If non-nil, display the number of hidden lines next to the ellipsis." + :type 'boolean + :version "31.1") + (defcustom hs-minor-mode-hook nil "Hook called when hideshow minor mode is activated or deactivated." :type 'hook @@ -528,8 +540,17 @@ to call with the newly initialized overlay." (io (if (eq 'block hs-isearch-open) ;; backward compatibility -- `block'<=>`code' 'code - hs-isearch-open))) + hs-isearch-open)) + (map (make-sparse-keymap))) (overlay-put ov 'invisible 'hs) + (define-key map (kbd "") #'hs-show-block) + (overlay-put ov 'display + (propertize + (hs--get-ellipsis b e) + 'mouse-face + 'highlight + 'help-echo "mouse-1: show hidden lines" + 'keymap map)) (overlay-put ov 'hs kind) (overlay-put ov 'hs-b-offset b-offset) (overlay-put ov 'hs-e-offset e-offset) @@ -540,6 +561,48 @@ to call with the newly initialized overlay." (when hs-set-up-overlay (funcall hs-set-up-overlay ov)) ov)) +(defun hs--get-ellipsis (b e) + "Helper function for `hs-make-overlay'. +This return the ellipsis string to use and its face." + (cond* + ((bind* + (d-t-ellipsis (display-table-slot standard-display-table 'selective-display)) + (d-t-face ; Get only the first glyph face + (if d-t-ellipsis (glyph-face (aref d-t-ellipsis 0)))) + ;; Convert the ellipsis vector from display-table to a propertized + ;; string + (ellipsis + (cond + ((and d-t-ellipsis + (not (stringp d-t-ellipsis)) + ;; Ensure the vector is not empty + (not (length= d-t-ellipsis 0))) + (let ((string + (mapconcat + (lambda (g) + (apply #'propertize + (char-to-string (glyph-char g)) + (if (glyph-face g) + (list 'face (glyph-face g))))) + d-t-ellipsis))) + ;; If the ellipsis string has no face, use `hs-ellipsis' + (if (get-text-property 0 'face string) + string + (propertize string 'face 'hs-ellipsis)))) + ((char-displayable-on-frame-p ?…) + (propertize "…" 'face 'hs-ellipsis)) + (t (propertize "..." 'face 'hs-ellipsis)))))) + (hs-display-lines-hidden + (let ((lines (1- (count-lines b e)))) + (concat + (propertize + (concat (number-to-string lines) + (if (= lines 1) " line" " lines")) + 'face (or d-t-face 'hs-ellipsis)) + ellipsis))) + (t + ellipsis))) + (defun hs-isearch-show (ov) "Delete overlay OV, and set `hs-headline' to nil. commit 719b2fd580b79c6e2463a295cad58cd2066fa1b7 Author: Manuel Giraud Date: Sun May 11 14:40:18 2025 +0200 Fix `eww-switch-to-buffer' when resorting to `eww' * lisp/net/eww.el (eww-switch-to-buffer): Do not bind `completion-extra-properties' before calling `eww'. (bug#78372) diff --git a/lisp/net/eww.el b/lisp/net/eww.el index c11e378c714..e59df6d1699 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el @@ -2324,26 +2324,26 @@ If CHARSET is nil then use UTF-8." "Prompt for an EWW buffer to display in the selected window. If no such buffer exist, fallback to calling `eww'." (interactive nil eww-mode) - (let ((completion-extra-properties - `(:annotation-function - ,(lambda (buf) - (with-current-buffer buf - (format " %s" (eww-current-url)))))) - (curbuf (current-buffer)) - (list (cl-loop for buf in (nreverse (buffer-list)) + (let ((list (cl-loop for buf in (nreverse (buffer-list)) if (with-current-buffer buf (derived-mode-p 'eww-mode)) return buf))) (if list - (pop-to-buffer-same-window - (read-buffer "Switch to EWW buffer: " - list - t - (lambda (bufn) - (setq bufn (if (consp bufn) (cdr bufn) (get-buffer bufn))) - (and (with-current-buffer bufn - (derived-mode-p 'eww-mode)) - (not (eq bufn curbuf)))))) - (call-interactively 'eww)))) + (let ((completion-extra-properties + `(:annotation-function + ,(lambda (buf) + (with-current-buffer buf + (format " %s" (eww-current-url)))))) + (curbuf (current-buffer))) + (pop-to-buffer-same-window + (read-buffer "Switch to EWW buffer: " + list + t + (lambda (bufn) + (setq bufn (if (consp bufn) (cdr bufn) (get-buffer bufn))) + (and (with-current-buffer bufn + (derived-mode-p 'eww-mode)) + (not (eq bufn curbuf))))))) + (call-interactively #'eww)))) (defun eww-toggle-fonts () "Toggle whether to use monospaced or font-enabled layouts." commit c1153963b5db351d3fbe8f661e17efb55ebb2cb8 Author: Richard Lawrence Date: Sun May 11 07:47:42 2025 +0200 Fix DTSTART date when exporting `diary-float' Instead of using current date as DTSTART and then excluding it when it doesn't match the `diary-float' rule, just use the first date which matches the rule in `icalendar-recurring-start-year'. * lisp/calendar/icalendar.el (icalendar--convert-float-to-ical): Compute the correct date. * test/lisp/calendar/icalendar-tests.el: Add a test for the reported test case. (Bug#78085) diff --git a/lisp/calendar/icalendar.el b/lisp/calendar/icalendar.el index 9ad393cb061..b3334e483c1 100644 --- a/lisp/calendar/icalendar.el +++ b/lisp/calendar/icalendar.el @@ -1766,10 +1766,19 @@ entries. ENTRY-MAIN is the first line of the diary entry." ;matching, esp. with ;different forms of ;MONTH - (month (nth 1 sexp)) + (month-exp (nth 1 sexp)) + (months (cond ((eq month-exp t) nil) ; don't add a BYMONTH clause + ((integerp month-exp) (list month-exp)) + (t month-exp))) (dayname (nth 2 sexp)) (n (nth 3 sexp)) (day (nth 4 sexp)) + (dtstart + ;; Start on the first day matching the rule in + ;; icalendar-recurring-start-year: + (calendar-nth-named-day n dayname + (if months (apply #'min months) 1) + icalendar-recurring-start-year)) (summary (replace-regexp-in-string "\\(^\s+\\|\s+$\\)" "" @@ -1781,31 +1790,19 @@ entries. ENTRY-MAIN is the first line of the diary entry." (error "Don't know if or how to implement day in `diary-float'"))) (cons (concat - ;;Start today (yes this is an arbitrary choice): "\nDTSTART;VALUE=DATE:" - (format-time-string "%Y%m%d") - ;;BUT remove today if `diary-float' - ;;expression does not hold true for today: - (when - (null (calendar-dlet ((date (calendar-current-date)) - (entry entry-main)) - (diary-float month dayname n))) - (concat - "\nEXDATE;VALUE=DATE:" - (format-time-string "%Y%m%d"))) + (format "%04d%02d%02d" + (calendar-extract-year dtstart) + (calendar-extract-month dtstart) + (calendar-extract-day dtstart)) "\nRRULE:" - (if (or (numberp month) (listp month)) + (if months "FREQ=YEARLY;BYMONTH=" "FREQ=MONTHLY") - (when - (listp month) + (when months (mapconcat - (lambda (m) - (number-to-string m)) - (cadr month) ",")) - (when - (numberp month) - (number-to-string month)) + (lambda (m) (number-to-string m)) + months ",")) ";BYDAY=" (number-to-string n) (aref icalendar--weekday-array dayname)) diff --git a/test/lisp/calendar/icalendar-tests.el b/test/lisp/calendar/icalendar-tests.el index 421c991bcac..5e745c05d0a 100644 --- a/test/lisp/calendar/icalendar-tests.el +++ b/test/lisp/calendar/icalendar-tests.el @@ -132,6 +132,22 @@ (car result))) (should (string= "Sommerferien" (cdr result))))) +(ert-deftest icalendar--convert-float-to-ical () + "Test method for `icalendar--convert-float-to-ical'." + ;; See Bug#78085 + (let* ((calendar-date-style 'iso) + (icalendar-recurring-start-year 2025) + (first-saturday-date "20250104") ; first Sat. in 2025 + result) + (setq result (icalendar--convert-float-to-ical + "" "%%(diary-float t 6 1) 1st Sat/month")) + (should (consp result)) + (should (string= (concat + "\nDTSTART;VALUE=DATE:" first-saturday-date + "\nRRULE:FREQ=MONTHLY;BYDAY=1SA") + (car result))) + (should (string= "1st Sat/month" (cdr result))))) + (ert-deftest icalendar--convert-yearly-to-ical () "Test method for `icalendar--convert-yearly-to-ical'." (let* ((calendar-date-style 'iso) commit 3b2b0424cf9458d8f59b283139f46e1515989df3 Author: Eli Zaretskii Date: Sat May 17 11:57:43 2025 +0300 ; Fix last change * lisp/pulse.el (pulse-faces, pulse-face-duration): * etc/NEWS: Fix documentation of last change. (Bug#77715) diff --git a/etc/NEWS b/etc/NEWS index 5bb9324b9cc..04a8a5dc4aa 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1946,6 +1946,13 @@ New faces have been added to 'icomplete-vertical-mode': This is intended for customizing directory-local variables in the current directory's ".dir-locals.el" file. +** Pulse + +-- +*** New function 'pulse-faces'. +This function pulses a specified list of faces. The pulse duration is +determined by the new user option 'pulse-face-duration'. + ** Miscellaneous --- diff --git a/lisp/pulse.el b/lisp/pulse.el index 3663c6cafdc..3f0fbbab3bb 100644 --- a/lisp/pulse.el +++ b/lisp/pulse.el @@ -228,32 +228,34 @@ Only pulses the line if `pulse-command-advice-flag' is non-nil." (pulse-momentary-highlight-one-line (point)))) ;;; Pulse faces -;; Functions for pulse any defined face. +;; Functions for pulsing any defined face(s). (require 'face-remap) (defcustom pulse-face-duration pulse-delay - "Time (in seconds) used for pulse face duration." + "Time (in seconds) used for `pulse-faces' duration." :type 'number :group 'pulse :version "31.1") -;; FIXME: The pulse smooth effect cannot be archieved here due -;; the face remaping will not work well for that. +;; FIXME: The pulse's smooth effect cannot be achieved here because +;; the face-remaping will not work well for that. (defun pulse-faces (faces &optional with-face) - "Pulse FACES with face WITH-FACE (if defined) briefly. -FACES must be a list of faces to pulse. -WITH-FACE is optional, it can be a defined face or a list of face -properties to apply." + "Briefly pulse FACES by using attributes of face WITH-FACE (if defined). +FACES should be a list of faces to pulse. +WITH-FACE is optional, it can be a defined face or a list +of face properties to apply. If nil or omitted, it defaults +to `pulse-highlight-face'." (when-let* (((numberp pulse-face-duration)) ; Ensure time is a number (with-face (or with-face 'pulse-highlight-face)) (in-buffer (current-buffer)) (cookies (mapcar (lambda (f) (if (consp with-face) - (apply #'face-remap-add-relative f with-face) + (apply #'face-remap-add-relative + f with-face) (face-remap-add-relative f with-face))) faces))) - ;; Use run-with-timer if the duration is very long for not blocking - ;; emacs, otherwise fallback to sleep-for. + ;; Use run-with-timer if the duration is very long, so as to avoid + ;; blocking emacs; otherwise fall back to 'sleep-for'. (if (> pulse-face-duration 0.1) (run-with-timer pulse-face-duration 0 (lambda () @@ -264,7 +266,7 @@ properties to apply." (mapc #'face-remap-remove-relative cookies))))) (unwind-protect (progn - ;; redisplay for apply the face remap + ;; Redisplay to apply the face remapping. (redisplay) (sleep-for pulse-face-duration)) (mapc #'face-remap-remove-relative cookies))))) commit b25139a5322ae809fe32d91d55e2212cc91b1b38 Author: Elías Gabriel Pérez Date: Thu Apr 10 11:38:21 2025 -0600 New pulse functions for pulse faces and new file for ring bell fns These new pulse functions allow pulse any defined face briefly. The new file contains functions intended to be used in `ring-bell-function' as alternatives to `visible-bell'. * lisp/pulse.el (pulse-face-duration): New user option. (pulse-flash-face): New function. * lisp/ring-bell-fns.el (flash-face-attributes) (flash-face-faces): New user options. (flash-face-bell-function, flash-echo-area-bell-function): New functions. (bug#77715) * etc/NEWS: Announce changes diff --git a/etc/NEWS b/etc/NEWS index d4e97883322..5bb9324b9cc 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1994,6 +1994,31 @@ change their face if the current line exceeds the 'fill-column'. The new face 'display-fill-column-indicator-warning-face' is used to highlight the fill-column indicators. By default, this is disabled. +--- +*** New function 'flash-face-bell-function'. +This function flashes a face briefly. +It is intended to be used in 'ring-bell-function'. + +--- +*** New function 'flash-echo-area-bell-function'. +This function flashes current echo area briefly. +It is intended to be used in 'ring-bell-function'. + +--- +*** New user option 'flash-face-duration'. +This option controls the flash duration for 'flash-face-bell-function' +and 'flash-echo-area-bell-function'. + +--- +*** New user option 'flash-face-faces'. +This option tells 'flash-face-bell-function' which faces should flash. + +--- +*** New user option 'flash-face-attributes' +This option tells 'flash-face-bell-function' and +'flash-echo-area-bell-function' which face attributes should be used +for flash. + --- ** Flymake diff --git a/lisp/pulse.el b/lisp/pulse.el index a2569338e11..3663c6cafdc 100644 --- a/lisp/pulse.el +++ b/lisp/pulse.el @@ -227,6 +227,48 @@ Only pulses the line if `pulse-command-advice-flag' is non-nil." (when pulse-command-advice-flag (pulse-momentary-highlight-one-line (point)))) +;;; Pulse faces +;; Functions for pulse any defined face. +(require 'face-remap) + +(defcustom pulse-face-duration pulse-delay + "Time (in seconds) used for pulse face duration." + :type 'number + :group 'pulse + :version "31.1") + +;; FIXME: The pulse smooth effect cannot be archieved here due +;; the face remaping will not work well for that. +(defun pulse-faces (faces &optional with-face) + "Pulse FACES with face WITH-FACE (if defined) briefly. +FACES must be a list of faces to pulse. +WITH-FACE is optional, it can be a defined face or a list of face +properties to apply." + (when-let* (((numberp pulse-face-duration)) ; Ensure time is a number + (with-face (or with-face 'pulse-highlight-face)) + (in-buffer (current-buffer)) + (cookies (mapcar (lambda (f) + (if (consp with-face) + (apply #'face-remap-add-relative f with-face) + (face-remap-add-relative f with-face))) + faces))) + ;; Use run-with-timer if the duration is very long for not blocking + ;; emacs, otherwise fallback to sleep-for. + (if (> pulse-face-duration 0.1) + (run-with-timer pulse-face-duration 0 + (lambda () + ;; Remove the face remaping in the buffer + ;; where `pulse-faces' was called. + (if (buffer-live-p in-buffer) + (with-current-buffer in-buffer + (mapc #'face-remap-remove-relative cookies))))) + (unwind-protect + (progn + ;; redisplay for apply the face remap + (redisplay) + (sleep-for pulse-face-duration)) + (mapc #'face-remap-remove-relative cookies))))) + (provide 'pulse) ;;; pulse.el ends here diff --git a/lisp/ring-bell-fns.el b/lisp/ring-bell-fns.el new file mode 100644 index 00000000000..1a985225bf3 --- /dev/null +++ b/lisp/ring-bell-fns.el @@ -0,0 +1,81 @@ +;;; ring-bell-fns.el --- Collection of functions for ring-bell -*- lexical-binding: t; -*- + +;; Copyright (C) 2025 Free Software Foundation, Inc. + +;; Author: Elijah Gabe Pérez +;; Keywords: faces + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . + +;;; Commentary: + +;; Collection of functions intended to be used with `ring-bell-function'. +;; as alternatives to `visible-bell' + +;;; Code: +(require 'pulse) + +(defgroup ring-bell nil + "Customization options for ring bell." + :version "31.1" + :group 'emacs) + +(defcustom flash-face-attributes + '(:background "red" :foreground "white") + "Face attributes to use in any function from `ring-bell-fns'. +This is intended to be used in any function from `ring-bell-fns' such as +`flash-face-bell-function' and `flash-echo-area-bell-function' to make +the flash face more noticeable." + :type 'plist + :version "31.1") + +(defcustom flash-face-faces + '(mode-line-active) + "A list of faces to be flashed by `flash-face-bell-function'." + :type '(repeat face) + :version "31.1") + +;;;###autoload +(defun flash-face-bell-function () + "Indicate ringing the bell by flashing some faces. +Intended to be used in `ring-bell-function'." + (pulse-faces flash-face-faces flash-face-attributes)) + +;;;###autoload +(defun flash-echo-area-bell-function () + "Indicate ringing the bell by flashing the echo area. +Intended to be used in `ring-bell-function'." + ;; pulse-faces uses run-with-timer if `pulse-face-duration' + ;; is long, which makes the flashing in the echo area not visible. + ;; for fix this then apply the flashing to *Echo Area 0* + ;; and minibuffer buffer for the `run-with-timer', + ;; and fallback to minibuffer buffer due performance. + (if (> pulse-face-duration 0.1) + (dolist (buf `(,(window-buffer (minibuffer-window)) + ;; get or create the echo area for flash it too. + ,(get-buffer-create" *Echo Area 0*"))) + (redisplay) + (with-current-buffer buf + (pulse-faces '(default) flash-face-attributes))) + (with-current-buffer (window-buffer (minibuffer-window)) + ;; For make the flash effect take effect in the + ;; minibuffer/echo area, insert a space only if it is empty. + (if (= (buffer-size) 0) + (insert ?\s)) + (pulse-faces '(default) flash-face-attributes)))) + +(provide 'ring-bell-fns) +;;; ring-bell-fns.el ends here commit 44c808773403ee200fcfaf340b11d9244bf5b398 Author: Eli Zaretskii Date: Sat May 17 11:26:23 2025 +0300 Allow nil as valid value for 'url-cookie-save-interval' * lisp/url/url-cookie.el (url-cookie-save-interval): Fix doc string and :type. (Bug#78303) diff --git a/lisp/url/url-cookie.el b/lisp/url/url-cookie.el index bb7364ef06e..42f81b2b5f6 100644 --- a/lisp/url/url-cookie.el +++ b/lisp/url/url-cookie.el @@ -349,22 +349,24 @@ i.e. 1970-1-1) are loaded as expiring one year from now instead." (defvar url-cookie-timer nil) (defcustom url-cookie-save-interval 3600 - "The number of seconds between automatic saves of cookies. -Default is 1 hour. Note that if you change this variable outside of -the `customize' interface after `url-do-setup' has been run, you need -to run the `url-cookie-setup-save-timer' function manually." + "If non-nil, the number of seconds between automatic saves of cookies. +Default is 1 hour; set to nil to disable automatic saving of cookies. +Note that if you change this variable outside of the `customize' +interface after `url-do-setup' has been run, you need to run +the `url-cookie-setup-save-timer' function manually." :set (lambda (var val) (set-default var val) (if (bound-and-true-p url-setup-done) (url-cookie-setup-save-timer))) - :type 'natnum) + :type '(choice (const :tag "Disable automatic saving of cookies" :value nil) + (natnum :tag "Interval in seconds for auto-saving cookies"))) (defun url-cookie-setup-save-timer () "Reset the cookie saver timer." (interactive) (ignore-errors (cancel-timer url-cookie-timer)) (setq url-cookie-timer nil) - (if url-cookie-save-interval + (if (natnump url-cookie-save-interval) (setq url-cookie-timer (run-at-time url-cookie-save-interval url-cookie-save-interval #'url-cookie-write-file)))) commit 7d7d821c495abcd740fd20f6a8df6da5bd920cd3 Author: Juri Linkov Date: Fri May 16 19:03:41 2025 +0300 * lisp/treesit.el (treesit-simple-imenu): Restore the previous behavior. Use 'treesit-parser-list' again to not depend on the cursor's position (bug#78456). diff --git a/lisp/treesit.el b/lisp/treesit.el index 8ccdb73c25f..a353bc942d3 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -3978,8 +3978,9 @@ by `treesit-simple-imenu-settings'." (lambda (entry) (let* ((lang (car entry)) (settings (cdr entry)) - (global-parser (car (treesit-parsers-at nil lang nil '(primary global)))) - (local-parsers (treesit-local-parsers-at nil lang))) + (global-parser (car (treesit-parser-list nil lang))) + (local-parsers + (treesit-parser-list nil lang 'embedded))) (cons (treesit-language-display-name lang) ;; No one says you can't have both global and local ;; parsers for the same language. E.g., Rust uses commit feecb1fbc60d6d027a766aaf08fb50feeaaeb192 Author: Eli Zaretskii Date: Fri May 16 15:39:53 2025 +0300 ; * doc/emacs/cmdargs.texi (General Variables): More accurate wording. diff --git a/doc/emacs/cmdargs.texi b/doc/emacs/cmdargs.texi index 7f3116c2929..00167056be1 100644 --- a/doc/emacs/cmdargs.texi +++ b/doc/emacs/cmdargs.texi @@ -574,7 +574,7 @@ whenever we say ``colon-separated list of directories'', it pertains to Unix and GNU/Linux systems. On MS-DOS and MS-Windows, the directories are separated by semi-colons instead, since DOS/Windows file names might include a colon after a drive letter.} to search for -Emacs Lisp files. If set, it modifies the usual initial value of the +Emacs Lisp files. If set, it replaces the usual initial value of the @code{load-path} variable (@pxref{Lisp Libraries}). An empty element stands for the default value of @code{load-path}; e.g., using @samp{EMACSLOADPATH="/tmp:"} adds @file{/tmp} to the front of commit 18e1aabbeaa284ef86a1d77de434dd2acde418c3 Author: Eli Zaretskii Date: Fri May 16 15:02:58 2025 +0300 ; Improve documentation of the -L command-line option * doc/emacs/cmdargs.texi (Action Arguments): Mention that '-L' is in effect only after the init files are loaded. diff --git a/doc/emacs/cmdargs.texi b/doc/emacs/cmdargs.texi index 7b74c42288e..7f3116c2929 100644 --- a/doc/emacs/cmdargs.texi +++ b/doc/emacs/cmdargs.texi @@ -146,6 +146,13 @@ appends (rather than prepends) the remainder to @code{load-path}. (On MS Windows, use @samp{;} instead of @samp{:}; i.e., use the value of @code{path-separator}.) +Note that the changes to @code{load-path} as result of using this option +do @emph{not} affect the directories where Emacs looks for the site +startup file and the Lisp packages loaded by the user's early-init and +init files (@pxref{Init File}), because @code{load-path} is changed by +the @samp{-L} option @emph{after} these files are loaded and +interpreted. + @item -f @var{function} @opindex -f @itemx --funcall=@var{function} commit c80fbe3f2355ab7182dcba98ed9717f0231aab00 Author: Konstantin Kharlamov Date: Thu May 1 20:28:29 2025 +0700 typescript-ts-mode: align ternary-chain branches (bug#78187) * lisp/progmodes/typescript-ts-mode.el: (typescript-ts-mode--indent-rules): Make sure each new ternary branch is aligned with the previous one. * test/lisp/progmodes/typescript-ts-mode-resources/indent.erts: (Chained ternary expressions): New test. diff --git a/lisp/progmodes/typescript-ts-mode.el b/lisp/progmodes/typescript-ts-mode.el index f1410df6421..6cc1eb0bea9 100644 --- a/lisp/progmodes/typescript-ts-mode.el +++ b/lisp/progmodes/typescript-ts-mode.el @@ -118,7 +118,7 @@ Argument LANGUAGE is either `typescript' or `tsx'." ((and (parent-is "comment") c-ts-common-looking-at-star) c-ts-common-comment-start-after-first-star -1) ((parent-is "comment") prev-adaptive-prefix 0) - ((parent-is "ternary_expression") parent-bol typescript-ts-mode-indent-offset) + ((parent-is "ternary_expression") standalone-parent typescript-ts-mode-indent-offset) ((parent-is "member_expression") parent-bol typescript-ts-mode-indent-offset) ((parent-is "named_imports") parent-bol typescript-ts-mode-indent-offset) ((parent-is "statement_block") parent-bol typescript-ts-mode-indent-offset) diff --git a/test/lisp/progmodes/typescript-ts-mode-resources/indent.erts b/test/lisp/progmodes/typescript-ts-mode-resources/indent.erts index ef7368602d6..8abaa81c627 100644 --- a/test/lisp/progmodes/typescript-ts-mode-resources/indent.erts +++ b/test/lisp/progmodes/typescript-ts-mode-resources/indent.erts @@ -93,6 +93,15 @@ const foo = () => { }; =-=-= +Name: Chained ternary expressions + +=-= +const a = cond1 ? 1 + : cond2 ? 2 + : cond3 ? 3 + : 4; +=-=-= + Code: (lambda () (setq indent-tabs-mode nil) commit 9659f8aa344f73164bece7408d63991531fc115d Author: Sean Whitton Date: Thu May 15 21:16:07 2025 +0100 ; * lisp/vc/vc.el: Restore alphebetization. diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index dcb32e9da67..60748d05ed8 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -29,7 +29,9 @@ ;; ;; Per Cederqvist ;; Paul Eggert +;; Dmitry Gutov ;; Sebastian Kremer +;; Juri Linkov ;; Martin Lorentzson ;; Dave Love ;; Stefan Monnier @@ -38,8 +40,6 @@ ;; J.D. Smith ;; Andre Spiegel ;; Richard Stallman -;; Dmitry Gutov -;; Juri Linkov ;; Sean Whitton ;; ;; In July 2007 ESR returned and redesigned the mode to cope better commit db198e0e59bff0c1cb28a591928377f5a0e9d158 Author: Eli Zaretskii Date: Thu May 15 16:29:27 2025 +0300 ; Fix wording of recently-added documentation * src/eval.c (Fset_buffer_local_toplevel_value) (Fbuffer_local_toplevel_value): * doc/lispref/variables.texi (Default Value): Fix wording of documentation. diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi index 130ee7bcf7f..b32e0b1413a 100644 --- a/doc/lispref/variables.texi +++ b/doc/lispref/variables.texi @@ -1942,9 +1942,10 @@ the context of @var{symbol}'s let-binding. @end defun @cindex top-level buffer-local value - In addition, a variable's buffer-local value may be shadowed by a -let-binding. There are two further functions to get and set the -top-level buffer-local value of a variable. + A variable's buffer-local value may also be shadowed by a +let-binding. Two functions allow getting and setting the +top-level buffer-local value of a variable, i.e., the value outside of +the let-binding. @defun buffer-local-toplevel-value symbol &optional buffer This function returns the local value for @var{symbol} in @var{buffer}, @@ -1966,10 +1967,10 @@ function causes a local value for them to exist in @var{buffer}. If as the buffer-local value for the variable across changes of major mode. This is useful when you want to make a change to a buffer-local value -that will persist after the command now being executed completes, but +that will persist after the command now being executed completes, where your code may be executed with that variable let-bound. In this -case the usual tool for setting buffer-local values, @code{setq-local}, -will only change the value of the let-binding, and not the underlying +case the usual way of setting buffer-local values, using @code{setq-local}, +will only change the value inside the let-binding, and not the underlying buffer-local value. This function sets the latter. @end defun diff --git a/src/eval.c b/src/eval.c index 8721f00389a..fbb881d682d 100644 --- a/src/eval.c +++ b/src/eval.c @@ -833,7 +833,7 @@ DEFUN ("set-default-toplevel-value", Fset_default_toplevel_value, DEFUN ("buffer-local-toplevel-value", Fbuffer_local_toplevel_value, Sbuffer_local_toplevel_value, 1, 2, 0, - doc: /* Return SYMBOL's toplevel local value in BUFFER. + doc: /* Return SYMBOL's toplevel buffer-local value in BUFFER. "Toplevel" means outside of any let binding. BUFFER defaults to the current buffer. If SYMBOL has no local value in BUFFER, signals an error. */) @@ -852,8 +852,8 @@ If SYMBOL has no local value in BUFFER, signals an error. */) DEFUN ("set-buffer-local-toplevel-value", Fset_buffer_local_toplevel_value, Sset_buffer_local_toplevel_value, 2, 3, 0, - doc: /* Set SYMBOL's toplevel local value to VALUE in BUFFER. -"Toplevel" means outside of any let binding. + doc: /* Set SYMBOL's toplevel buffer-local value in BUFFER to VALUE. +"Toplevel" means outside of any let-binding. BUFFER defaults to the current buffer. Makes SYMBOL buffer-local in BUFFER if it was not already. */) (Lisp_Object symbol, Lisp_Object value, Lisp_Object buffer) commit 16bfbc6fe312526cec8a331a759615ffe3eb4523 Author: Michael Albinus Date: Thu May 15 15:15:22 2025 +0200 ; Tramp test fixes * test/lisp/net/tramp-tests.el (tramp-test26-interactive-file-name-completion): Simplify. (tramp--test-putty-p): Fix docstring. (tramp--test-scp-p): New defun. (tramp-test42-utf8): Use it. diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el index 84f864e2d62..4fe3fca0df8 100644 --- a/test/lisp/net/tramp-tests.el +++ b/test/lisp/net/tramp-tests.el @@ -5096,9 +5096,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." (dolist (test-and-result ;; These are triples of strings (TEST-STRING - ;; RESULT-CHECK COMPLETION-CHECK). RESULT-CHECK - ;; could be not unique, in this case it is a list - ;; (RESULT1 RESULT2 ...). + ;; RESULT-CHECK COMPLETION-CHECK). (append ;; Complete method name. (unless (string-empty-p tramp-method-regexp) @@ -5124,11 +5122,9 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." ipv6-prefix (substring-no-properties host 0 (min 2 (length host)))) - (,(concat - tramp-prefix-format hop method-string host-string) - ,(concat - tramp-prefix-format hop method-string - default-user-string host-string)) + ,(concat + tramp-prefix-format hop method-string + default-user-string host-string) ,host-string))) ;; Complete user and host name. (unless (or (tramp-string-empty-or-nil-p user) @@ -5169,14 +5165,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." ;; (tramp--test-message ;; "syntax: %s style: %s test: %s result: %s" ;; syntax style test result) - (if (stringp (cadr test-and-result)) - (should - (string-prefix-p (cadr test-and-result) result)) - (should - (let (res) - (dolist (elem (cadr test-and-result) res) - (setq - res (or res (string-prefix-p elem result)))))))) + (should (string-prefix-p (cadr test-and-result) result))) (with-current-buffer "*Completions*" ;; We must remove leading `default-directory'. @@ -7379,7 +7368,7 @@ This does not support external Emacs calls." (tramp-method-out-of-band-p tramp-test-vec 1)) (defun tramp--test-putty-p () - "Check, whether the method method usaes PuTTY. + "Check, whether the method uses PuTTY. This does not support connection share for more than two connections." (member (file-remote-p ert-remote-temporary-file-directory 'method) @@ -7396,6 +7385,15 @@ This does not support special file names." (string-equal "rsync" (file-remote-p ert-remote-temporary-file-directory 'method))) +(defun tramp--test-scp-p () + "Check, whether an scp method is used. +This does not support quoted special characters in recent sshd +implementations." + ;; Detected with OpenSSH_9.9p1. + (member + (file-remote-p ert-remote-temporary-file-directory 'method) + '("pscp" "scp" "scpx"))) + (defun tramp--test-sh-p () "Check, whether the remote host runs a based method from tramp-sh.el." (tramp-sh-file-name-handler-p tramp-test-vec)) @@ -7768,6 +7766,7 @@ This requires restrictions of file name syntax." (skip-unless (not (getenv "EMACS_HYDRA_CI"))) ; SLOW ~ 620s (skip-unless (not (tramp--test-container-p))) (skip-unless (not (tramp--test-rsync-p))) + (skip-unless (not (tramp--test-scp-p))) (skip-unless (not (tramp--test-windows-nt-and-out-of-band-p))) (skip-unless (not (tramp--test-ksh-p))) (skip-unless (not (tramp--test-gdrive-p))) commit 511e3d4e798c70d4a9a6216e0c5ff04e36600ea7 Author: Dmitry Gutov Date: Thu May 15 13:46:20 2025 +0100 vc-git-checkin: Fix calling 'git apply --cached' remotely * lisp/vc/vc-git.el (vc-git-checkin) (vc-git--stash-staged-changes): Fix calling 'git apply --cached' remotely (bug#78405). diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el index 53dedb05320..582de105c17 100644 --- a/lisp/vc/vc-git.el +++ b/lisp/vc/vc-git.el @@ -1206,7 +1206,8 @@ It is based on `log-edit-mode', and has Git-specific extensions." (with-temp-file patch-file (insert vc-git-patch-string)) (unwind-protect - (vc-git-command nil 0 nil "apply" "--cached" patch-file) + (vc-git-command nil 0 nil "apply" "--cached" + (file-local-name patch-file)) (delete-file patch-file)))) (when to-stash (vc-git--stash-staged-changes to-stash))) (let ((files (and only (not vc-git-patch-string) files)) @@ -1222,7 +1223,8 @@ It is based on `log-edit-mode', and has Git-specific extensions." (progn (with-temp-file cached (vc-git-command t 0 nil "stash" "show" "-p")) - (vc-git-command nil 0 "apply" "--cached" cached)) + (vc-git-command nil 0 "apply" "--cached" + (file-local-name cached))) (delete-file cached)) (vc-git-command nil 0 nil "stash" "drop")))))) (when msg-file @@ -1281,7 +1283,7 @@ It is based on `log-edit-mode', and has Git-specific extensions." (progn (vc-git-command nil 0 nil "read-tree" "HEAD") (vc-git-command nil 0 nil "apply" "--cached" - cached) + (file-local-name cached)) (setq tree (git-string "write-tree"))) (delete-file index)))) (delete-file cached)) commit f70bb4d7677ba308bf15f445ecc99e30754bad84 Author: Sean Whitton Date: Wed May 14 18:43:22 2025 +0100 default_toplevel_binding, local_toplevel_binding: Loop upwards * src/eval.c (default_toplevel_binding, local_toplevel_binding): Loop upwards, not downwards, given that we want the earliest relevant binding present in the stack. diff --git a/src/eval.c b/src/eval.c index cc131844428..8721f00389a 100644 --- a/src/eval.c +++ b/src/eval.c @@ -741,43 +741,39 @@ Internal use only. */) static union specbinding * default_toplevel_binding (Lisp_Object symbol) { - union specbinding *binding = NULL; - union specbinding *pdl = specpdl_ptr; - while (pdl > specpdl) + for (union specbinding *pdl = specpdl; pdl < specpdl_ptr; ++pdl) { - switch ((--pdl)->kind) + switch (pdl->kind) { case SPECPDL_LET_DEFAULT: case SPECPDL_LET: if (EQ (specpdl_symbol (pdl), symbol)) - binding = pdl; + return pdl; break; default: break; } } - return binding; + return NULL; } static union specbinding * local_toplevel_binding (Lisp_Object symbol, Lisp_Object buf) { - union specbinding *binding = NULL; - union specbinding *pdl = specpdl_ptr; - while (pdl > specpdl) + for (union specbinding *pdl = specpdl; pdl < specpdl_ptr; ++pdl) { - switch ((--pdl)->kind) + switch (pdl->kind) { case SPECPDL_LET_LOCAL: if (BASE_EQ (specpdl_where (pdl), buf) && EQ (specpdl_symbol (pdl), symbol)) - binding = pdl; + return pdl; break; default: break; } } - return binding; + return NULL; } /* Look for a lexical-binding of SYMBOL somewhere up the stack. commit 45627ca7ccd0e84452d497997a7f75535ed83864 Author: Sean Whitton Date: Tue May 13 12:21:21 2025 +0100 New top-level buffer-local value functions * src/eval.c (local_toplevel_binding) (Fbuffer_local_toplevel_value, Fset_buffer_local_toplevel_value) (syms_of_eval): New functions. * doc/lispref/variables.texi (Default Value): * lisp/subr.el (setq-local): * etc/NEWS: Document them. * test/lisp/emacs-lisp/lisp-tests.el (core-elisp-tests-4-toplevel-values): New test. * lisp/progmodes/xref.el (xref--show-xref-buffer) (xref-show-definitions-buffer-at-bottom): * lisp/vc/vc-dispatcher.el (vc-setup-buffer): Use set-buffer-local-toplevel-value. diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi index f0ba2c329ce..130ee7bcf7f 100644 --- a/doc/lispref/variables.texi +++ b/doc/lispref/variables.texi @@ -1941,6 +1941,38 @@ global value of @var{symbol} regardless of whether your code runs in the context of @var{symbol}'s let-binding. @end defun +@cindex top-level buffer-local value + In addition, a variable's buffer-local value may be shadowed by a +let-binding. There are two further functions to get and set the +top-level buffer-local value of a variable. + +@defun buffer-local-toplevel-value symbol &optional buffer +This function returns the local value for @var{symbol} in @var{buffer}, +defaulting to the current buffer, outside of any let-binding. If +@var{symbol} is not local in @var{buffer}, this function signals an +error. +@end defun + +@defun set-buffer-local-toplevel-value symbol value &optional buffer +This function sets the local value of @var{symbol} to @var{value} in +@var{buffer}, defaulting to the current buffer, outside of any +let-binding. + +@var{symbol} is made local in @var{buffer} if it was not already. For +global variables, this means @var{symbol} will have a separate value in +@var{buffer}; for variables that are automatically buffer-local, this +function causes a local value for them to exist in @var{buffer}. If +@var{symbol} is permanently buffer-local, @var{value} will now persist +as the buffer-local value for the variable across changes of major mode. + +This is useful when you want to make a change to a buffer-local value +that will persist after the command now being executed completes, but +where your code may be executed with that variable let-bound. In this +case the usual tool for setting buffer-local values, @code{setq-local}, +will only change the value of the let-binding, and not the underlying +buffer-local value. This function sets the latter. +@end defun + @node File Local Variables @section File Local Variables diff --git a/etc/NEWS b/etc/NEWS index 9452f32b03d..d4e97883322 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2362,6 +2362,12 @@ sleep state. 'advertised-undo', 'advertised-widget-backward', and 'dired-advertised-find-file'. ++++ +** New functions to get and set top-level buffer-local values. +'buffer-local-toplevel-value' and 'set-buffer-local-toplevel-value' get +and set the top-level buffer-local value of a variable. A top-level +value is the one that variable has outside of any let-bindings. + * Changes in Emacs 31.1 on Non-Free Operating Systems diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el index addd647d99a..ddf10b6e4ee 100644 --- a/lisp/progmodes/xref.el +++ b/lisp/progmodes/xref.el @@ -1252,7 +1252,9 @@ Return an alist of the form ((GROUP . (XREF ...)) ...)." (dd default-directory) buf) (with-current-buffer (get-buffer-create xref-buffer-name) - (xref--ensure-default-directory dd (current-buffer)) + (if (fboundp 'set-buffer-local-toplevel-value) + (set-buffer-local-toplevel-value 'default-directory dd) + (xref--ensure-default-directory dd (current-buffer))) (xref--xref-buffer-mode) (xref--show-common-initialize xref-alist fetcher alist) (setq mode-line-process (list xref-mode-line-matches)) @@ -1378,7 +1380,9 @@ local keymap that binds `RET' to `xref-quit-and-goto-xref'." (setq xref-alist (xref--analyze xrefs)) (with-current-buffer (get-buffer-create xref-buffer-name) - (xref--ensure-default-directory dd (current-buffer)) + (if (fboundp 'set-buffer-local-toplevel-value) + (set-buffer-local-toplevel-value 'default-directory dd) + (xref--ensure-default-directory dd (current-buffer))) (xref--transient-buffer-mode) (xref--show-common-initialize xref-alist fetcher alist) (pop-to-buffer (current-buffer) diff --git a/lisp/subr.el b/lisp/subr.el index 15c8bd8a043..d15b6c53730 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -174,6 +174,9 @@ of VARIABLEs set by earlier pairs. The return value of the `setq-local' form is the VALUE of the last pair. +In some corner cases you may need to resort to +`set-buffer-local-toplevel-value' instead, which see. + \(fn [VARIABLE VALUE]...)" (declare (debug setq)) (unless (evenp (length pairs)) diff --git a/lisp/vc/vc-dispatcher.el b/lisp/vc/vc-dispatcher.el index 27837ddace1..2368cc6512e 100644 --- a/lisp/vc/vc-dispatcher.el +++ b/lisp/vc/vc-dispatcher.el @@ -199,19 +199,7 @@ Another is that undo information is not kept." (setq-local vc-parent-buffer-name (concat " from " (buffer-name camefrom)))) - ;; We want to set the buffer-local value of `default-directory' to - ;; olddir. This `setq' alone ought to be sufficient. But if there - ;; is a let-binding of `default-directory' in effect, such as the - ;; one established by `vc-print-root-log', then all we are able to - ;; do is change the let-binding, and not affect the underlying - ;; buffer-local cell. Work around this using `run-with-timer'. - ;; See bug#53626 and bug#77306. - (setq default-directory olddir) - (run-with-timer 0 nil (lambda () - (when (buffer-live-p buf) - (with-current-buffer buf - (setq default-directory olddir))))) - + (set-buffer-local-toplevel-value 'default-directory olddir) (let ((buffer-undo-list t) (inhibit-read-only t)) (erase-buffer)))) diff --git a/src/eval.c b/src/eval.c index 68da81ff8da..cc131844428 100644 --- a/src/eval.c +++ b/src/eval.c @@ -759,6 +759,27 @@ default_toplevel_binding (Lisp_Object symbol) return binding; } +static union specbinding * +local_toplevel_binding (Lisp_Object symbol, Lisp_Object buf) +{ + union specbinding *binding = NULL; + union specbinding *pdl = specpdl_ptr; + while (pdl > specpdl) + { + switch ((--pdl)->kind) + { + case SPECPDL_LET_LOCAL: + if (BASE_EQ (specpdl_where (pdl), buf) + && EQ (specpdl_symbol (pdl), symbol)) + binding = pdl; + break; + + default: break; + } + } + return binding; +} + /* Look for a lexical-binding of SYMBOL somewhere up the stack. This will only find bindings created with interpreted code, since once compiled names of lexical variables are basically gone anyway. */ @@ -813,6 +834,53 @@ DEFUN ("set-default-toplevel-value", Fset_default_toplevel_value, return Qnil; } +DEFUN ("buffer-local-toplevel-value", + Fbuffer_local_toplevel_value, + Sbuffer_local_toplevel_value, 1, 2, 0, + doc: /* Return SYMBOL's toplevel local value in BUFFER. +"Toplevel" means outside of any let binding. +BUFFER defaults to the current buffer. +If SYMBOL has no local value in BUFFER, signals an error. */) + (Lisp_Object symbol, Lisp_Object buffer) +{ + if (NILP (buffer)) + buffer = Fcurrent_buffer (); + if (NILP (Flocal_variable_p (symbol, buffer))) + xsignal1 (Qvoid_variable, symbol); + union specbinding *binding = local_toplevel_binding (symbol, buffer); + return binding + ? specpdl_old_value (binding) + : Fbuffer_local_value (symbol, buffer); +} + +DEFUN ("set-buffer-local-toplevel-value", + Fset_buffer_local_toplevel_value, + Sset_buffer_local_toplevel_value, 2, 3, 0, + doc: /* Set SYMBOL's toplevel local value to VALUE in BUFFER. +"Toplevel" means outside of any let binding. +BUFFER defaults to the current buffer. +Makes SYMBOL buffer-local in BUFFER if it was not already. */) + (Lisp_Object symbol, Lisp_Object value, Lisp_Object buffer) +{ + Lisp_Object buf = !NILP (buffer) ? buffer : Fcurrent_buffer (); + union specbinding *binding = local_toplevel_binding (symbol, buf); + + if (binding) + set_specpdl_old_value (binding, value); + else if (NILP (buffer)) + Fset (Fmake_local_variable (symbol), value); + else + { + specpdl_ref count = SPECPDL_INDEX (); + record_unwind_current_buffer (); + Fset_buffer (buffer); + Fset (Fmake_local_variable (symbol), value); + unbind_to (count, Qnil); + } + + return Qnil; +} + DEFUN ("internal--define-uninitialized-variable", Finternal__define_uninitialized_variable, Sinternal__define_uninitialized_variable, 1, 2, 0, @@ -4502,6 +4570,8 @@ alist of active lexical bindings. */); defsubr (&Smake_interpreted_closure); defsubr (&Sdefault_toplevel_value); defsubr (&Sset_default_toplevel_value); + defsubr (&Sbuffer_local_toplevel_value); + defsubr (&Sset_buffer_local_toplevel_value); defsubr (&Sdefvar); defsubr (&Sdefvar_1); defsubr (&Sdefvaralias); diff --git a/src/lisp.h b/src/lisp.h index ff68b5d2736..def1a0ebe34 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -3496,7 +3496,7 @@ extern void defvar_kboard (struct Lisp_Kboard_Objfwd const *, char const *); These are used in the syms_of_FILENAME functions. An ordinary (not in buffer_defaults, per-buffer, or per-keyboard) - lisp variable is actually a field in `struct emacs_globals'. The + Lisp variable is actually a field in `struct emacs_globals'. The field's name begins with "f_", which is a convention enforced by these macros. Each such global has a corresponding #define in globals.h; the plain name should be used in the code. @@ -3547,6 +3547,7 @@ extern void defvar_kboard (struct Lisp_Kboard_Objfwd const *, char const *); - The specpdl stack keeps track of backtraces, unwind-protects and dynamic let-bindings. It is allocated from the 'specpdl' array, a manually managed stack. + ("pdl" stands for "push-down list" which just means "stack".) - The handler stack keeps track of active catch tags and condition-case handlers. It is allocated in a manually managed stack implemented by a doubly-linked list allocated via xmalloc and never freed. */ diff --git a/test/lisp/emacs-lisp/lisp-tests.el b/test/lisp/emacs-lisp/lisp-tests.el index 9bd9fc3d4f3..1ef6bc864a7 100644 --- a/test/lisp/emacs-lisp/lisp-tests.el +++ b/test/lisp/emacs-lisp/lisp-tests.el @@ -238,6 +238,37 @@ (ert-deftest core-elisp-tests-3-backquote () (should (eq 3 (eval ``,,'(+ 1 2) t)))) +(defvar-local c-e-l 'foo) +(ert-deftest core-elisp-tests-4-toplevel-values () + (setq-default c-e-l 'foo) + (let ((c-e-l 'bar)) + (let ((c-e-l 'baz)) + (setq-default c-e-l 'bar) + (should (eq c-e-l 'bar)) + (should (eq (default-toplevel-value 'c-e-l) 'foo)) + (set-default-toplevel-value 'c-e-l 'baz) + (should (eq c-e-l 'bar)) + (should (eq (default-toplevel-value 'c-e-l) 'baz)))) + (let ((c-e-u 'foo)) + (should (condition-case _ + (default-toplevel-value 'c-e-u) + (void-variable t)))) + (with-temp-buffer + (setq-local c-e-l 'bar) + (should (eq (buffer-local-toplevel-value 'c-e-l) 'bar)) + (let ((c-e-l 'baz)) + (let ((c-e-l 'quux)) + (setq-local c-e-l 'baz) + (should (eq c-e-l 'baz)) + (should (eq (buffer-local-toplevel-value 'c-e-l) 'bar)) + (set-buffer-local-toplevel-value 'c-e-l 'foo) + (should (eq c-e-l 'baz)) + (should (eq (buffer-local-toplevel-value 'c-e-l) 'foo))))) + (with-temp-buffer + (should (condition-case _ + (buffer-local-toplevel-value 'c-e-l) + (void-variable t))))) + ;; Test up-list and backward-up-list. (defun lisp-run-up-list-test (fn data start instructions) (cl-labels ((posof (thing) commit 825d64aa57801dee2d95ab5d4f7f57b656764a48 Author: Manuel Giraud Date: Thu May 8 16:30:20 2025 +0200 Scroll with mouse wheel in calendar (bug#78298) * lisp/calendar/calendar.el (calendar-mode-map): Add scrolling with mouse wheel. * etc/NEWS: Announce the change. diff --git a/etc/NEWS b/etc/NEWS index 612d2d841cb..9452f32b03d 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2049,6 +2049,7 @@ DISABLE-URI non-nil. When starting these debuggers (e.g., 'M-x pdb') while visiting a file, pressing 'M-n' in the command prompt suggests a command line including the file name, using the minibuffer's "future history". + ** Calendar +++ @@ -2056,6 +2057,11 @@ the file name, using the minibuffer's "future history". This command recenters the month of the date at point. By default, it is bound to 'C-l' in the calendar buffer. +--- +*** Mouse wheel bindings for scrolling the calendar. +You can now use the mouse wheel to scroll the calendar by 3 months. +With the shift modifier, it scrolls by one month. With the meta +modifier, it scrolls by year. * New Modes and Packages in Emacs 31.1 diff --git a/lisp/calendar/calendar.el b/lisp/calendar/calendar.el index b0f6a9152d5..c448955450e 100644 --- a/lisp/calendar/calendar.el +++ b/lisp/calendar/calendar.el @@ -1587,12 +1587,18 @@ Otherwise, use the selected window of EVENT's frame." (define-key map (vector 'remap c) 'calendar-not-implemented)) (define-key map "<" 'calendar-scroll-right) (define-key map "\C-x<" 'calendar-scroll-right) + (define-key map [S-wheel-up] 'calendar-scroll-right) (define-key map [prior] 'calendar-scroll-right-three-months) (define-key map "\ev" 'calendar-scroll-right-three-months) + (define-key map [wheel-up] 'calendar-scroll-right-three-months) + (define-key map [M-wheel-up] 'calendar-backward-year) (define-key map ">" 'calendar-scroll-left) (define-key map "\C-x>" 'calendar-scroll-left) + (define-key map [S-wheel-down] 'calendar-scroll-left) (define-key map [next] 'calendar-scroll-left-three-months) (define-key map "\C-v" 'calendar-scroll-left-three-months) + (define-key map [wheel-down] 'calendar-scroll-left-three-months) + (define-key map [M-wheel-down] 'calendar-forward-year) (define-key map "\C-l" 'calendar-recenter) (define-key map "\C-b" 'calendar-backward-day) (define-key map "\C-p" 'calendar-backward-week) commit b644823443bf4b9f2257d1409024094bb5b608d2 Author: Stefan Monnier Date: Wed May 14 12:28:25 2025 -0400 cl-extra-tests.el: Follow convention * test/lisp/emacs-lisp/cl-extra-tests.el (multiples-of) (unsigned-byte): Stick to the tradition of accepting nil. diff --git a/test/lisp/emacs-lisp/cl-extra-tests.el b/test/lisp/emacs-lisp/cl-extra-tests.el index 1f94d71e567..6280be06cbb 100644 --- a/test/lisp/emacs-lisp/cl-extra-tests.el +++ b/test/lisp/emacs-lisp/cl-extra-tests.el @@ -351,7 +351,7 @@ ;;;; Method dispatch for derived types. (cl-deftype multiples-of (&optional m) - (let ((multiplep (if (eq m '*) + (let ((multiplep (if (memq m '(nil *)) #'ignore (lambda (n) (= 0 (% n m)))))) `(and integer (satisfies ,multiplep)))) @@ -368,7 +368,7 @@ (cl-deftype unsigned-byte (&optional bits) "Unsigned integer." - `(integer 0 ,(if (eq bits '*) bits (1- (ash 1 bits))))) + `(integer 0 ,(if (memq bits '(nil *)) bits (1- (ash 1 bits))))) (cl-deftype unsigned-16bits () "Unsigned 16-bits integer." commit 8bccccedb65a6d3991c41398effa9317adaec873 Author: Juri Linkov Date: Wed May 14 09:57:40 2025 +0300 Use JSX comments on jsx treesit nodes in js-ts-mode and tsx-ts-mode * lisp/progmodes/js.el (js--treesit-comment-jsx): New internal variable. (js--treesit-comment-setup): New function. (js-ts-mode): Set buffer-local 'comment-setup-function' to 'js--treesit-comment-setup'. * lisp/progmodes/typescript-ts-mode.el (typescript-ts-base-mode): Set buffer-local 'comment-setup-function' to 'js--treesit-comment-setup'. diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index bf7f9873aaa..14d06f1171d 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el @@ -4038,6 +4038,17 @@ See `treesit-thing-settings' for more information.") (rx bos (or "comment" "line_comment" "block_comment" "description") eos) "Regexp for `c-ts-common--comment-regexp'.") +(defvar-local js--treesit-comment-jsx 'undefined) + +(defun js--treesit-comment-setup () + (let ((jsx (not (null (treesit-parent-until + (treesit-node-at (point)) "jsx"))))) + (unless (eq js--treesit-comment-jsx jsx) + (setq js--treesit-comment-jsx jsx) + (cond (jsx (setq-local comment-start "{/* ") + (setq-local comment-end " */}")) + (t (c-ts-common-comment-setup)))))) + ;;;###autoload (define-derived-mode js-ts-mode js-base-mode "JavaScript" "Major mode for editing JavaScript. @@ -4052,7 +4063,7 @@ See `treesit-thing-settings' for more information.") ;; Which-func. (setq-local which-func-imenu-joiner-function #'js--which-func-joiner) ;; Comment. - (c-ts-common-comment-setup) + (setq-local comment-setup-function #'js--treesit-comment-setup) (setq-local comment-multi-line t) ;; Electric-indent. diff --git a/lisp/progmodes/typescript-ts-mode.el b/lisp/progmodes/typescript-ts-mode.el index e0458b3192e..7e3f0cb05b7 100644 --- a/lisp/progmodes/typescript-ts-mode.el +++ b/lisp/progmodes/typescript-ts-mode.el @@ -610,7 +610,7 @@ This mode is intended to be inherited by concrete major modes." :syntax-table typescript-ts-mode--syntax-table ;; Comments. - (c-ts-common-comment-setup) + (setq-local comment-setup-function #'js--treesit-comment-setup) ;; Electric (setq-local electric-indent-chars commit 81cbff70f29c5138859b75b9a7369e0019c457b6 Author: Stefan Monnier Date: Tue May 13 22:38:15 2025 -0400 lisp/emacs-lisp/cl-preloaded.el (cl--define-derived-type): Fix corner case diff --git a/lisp/emacs-lisp/cl-preloaded.el b/lisp/emacs-lisp/cl-preloaded.el index d6962ba1dee..263a9b85225 100644 --- a/lisp/emacs-lisp/cl-preloaded.el +++ b/lisp/emacs-lisp/cl-preloaded.el @@ -508,8 +508,11 @@ PARENTS is a list of types NAME is a subtype of, or nil." (error "Type %S already in another class: %S" name (type-of class)))) ;; Setup a type descriptor for NAME. (setf (cl--find-class name) - (cl--derived-type-class-make name (function-documentation expander) - parents)) + (cl--derived-type-class-make + name + (and (fboundp 'function-documentation) ;Bootstrap corner case. + (function-documentation expander)) + parents)) (define-symbol-prop name 'cl-deftype-handler expander) (when predicate (define-symbol-prop name 'cl-deftype-satisfies predicate) commit b8f23179dacc7477f1c680fef38bb2bc70ac4fca Author: David Ponce Date: Tue May 13 22:32:55 2025 -0400 lisp/emacs-lisp/cl-macs.el (cl--define-derived-type): Fix thinko diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index d086afc49e4..d594b3cb233 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -3820,7 +3820,7 @@ If PARENTS is non-nil, ARGLIST must be nil." ;; Thanks to `eval-and-compile', `cl--define-derived-type' is needed ;; both at compile-time and at runtime, so we need to double-check. (static-if (not (fboundp 'cl--define-derived-type)) nil - (unless (fboundp 'cl--define-derived-type) + (when (fboundp 'cl--define-derived-type) (cl-deftype natnum () (declare (parents integer)) '(satisfies natnump)) (cl-deftype character () (declare (parents fixnum natnum)) '(and fixnum natnum)) commit f0ac271da385a81a3f537f48a67d59d0057f921e Author: Stephen Gildea Date: Tue May 13 15:58:07 2025 -0700 ; Time Stamps doc: Clearer customize recipe * doc/emacs/files.texi (Time Stamps): Reorder the customize sentence so that the key words come in the order you would use them. diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi index d7a8822771c..7c798331711 100644 --- a/doc/emacs/files.texi +++ b/doc/emacs/files.texi @@ -1032,11 +1032,11 @@ After the first time stamp, the line might look like this: Time-stamp: <1993-07-06 11:05:14 terryg> @end example -Second, configure Emacs to run @code{time-stamp} any time it saves a +Second, configure your Emacs to run @code{time-stamp} whenever it saves a file, by adding @code{time-stamp} to @code{before-save-hook} (@pxref{Hooks}). -You can either customize the option @code{before-save-hook} -(with @kbd{M-x customize-option}, @pxref{Specific Customization}), +You can either use @kbd{M-x customize-option} (@pxref{Specific +Customization}) to customize the option @code{before-save-hook}, or you can edit your init file adding this line: @example commit ebeeced9e3ca94bbb679730155a2582bc12f8ea7 Author: Eli Zaretskii Date: Tue May 13 18:50:31 2025 +0300 Fix description of a remapped command's bindings * lisp/help-fns.el (help-fns--key-bindings): Qualify the description of any menu-bar bindings by remapping. (Bug#78391) diff --git a/lisp/help-fns.el b/lisp/help-fns.el index e7bbd25b413..7e0595740e5 100644 --- a/lisp/help-fns.el +++ b/lisp/help-fns.el @@ -624,8 +624,15 @@ the C sources, too." (let ((start (point))) (help-fns--insert-menu-bindings menus - (concat "It can " (and keys "also ") + (concat "It " (if remapped "could " "can ") (and keys "also ") "be invoked from the menu: ")) + (when remapped + (princ ", but that was remapped to ") + (princ (if (symbolp remapped) + (format-message "`%s'" remapped) + "an anonymous command")) + (princ "as well.\n")) + (or remapped (princ ".")) (fill-region-as-paragraph start (point)))) (ensure-empty-lines))))))) commit b3e280faba98d2ca7e4feef1017e3bebf53f036a Author: Eli Zaretskii Date: Tue May 13 14:45:04 2025 +0300 Eglot: Fix parsing file:// URIs on MS-Windows * lisp/progmodes/eglot.el (eglot-uri-to-path): Remove the leading slash in MS-Windows file names only if they begin with a slash. This adjusts the function to the recent fix for bug#76982 in 'url-generic-parse-url', which previously would produce file names that begin with an extra slash. (Bug#78392) diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index eae8e1b9189..6f6b05a393d 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -1165,7 +1165,8 @@ object." ;; Remove the leading "/" for local MS Windows-style paths. (normalized (if (and (not remote-prefix) (eq system-type 'windows-nt) - (cl-plusp (length retval))) + (cl-plusp (length retval)) + (eq (aref retval 0) ?/)) (w32-long-file-name (substring retval 1)) retval))) (concat remote-prefix normalized)) commit 49c06df224a10f4b39b24025476e4de588292228 Author: Sean Whitton Date: Tue May 13 12:07:09 2025 +0100 ; * doc/lispref/variables.texi (Default Value): Update. Frame-local variables have been removed. diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi index bc930784262..c11d93d4be4 100644 --- a/doc/lispref/variables.texi +++ b/doc/lispref/variables.texi @@ -1791,8 +1791,8 @@ came from or how to save it, rather than with how to edit the contents. The global value of a variable with buffer-local bindings is also called the @dfn{default} value, because it is the value that is in -effect whenever neither the current buffer nor the selected frame has -its own binding for the variable. +effect whenever the current buffer lacks its own binding for the +variable. The functions @code{default-value} and @code{setq-default} access and change a variable's default value regardless of whether the current commit 4b4276d64f47fad6e485b6da8cf908204f167f61 Author: Alan Mackenzie Date: Tue May 13 10:13:34 2025 +0000 CC Mode: Fix cc-fonts.el errors for XEmacs. * lisp/progmodes/cc-fonts.el (c-font-lock-cpp-messages): Use c-put-font-lock-face rather than c-put-font-lock-string-face since we don't have the double quote marks here that the latter function corrects for. (c-complex-decl-matchers): Replace cl-delete-duplicates with the macro c--delete-duplicates. diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el index 976eff53cd6..9837b0c6d39 100644 --- a/lisp/progmodes/cc-fonts.el +++ b/lisp/progmodes/cc-fonts.el @@ -531,7 +531,10 @@ (re-search-forward c-cpp-messages-re limit t)) (let ((beg (match-beginning c-cpp-message-match-no)) (end (match-end c-cpp-message-match-no))) - (c-put-font-lock-string-face beg end) + ;; Don't use c-put-font-lock-string-face here, since in XEmacs that + ;; would fail to fontify the first and last characters - We don't have + ;; any string delimiters in this construction. + (c-put-font-lock-face beg end 'font-lock-string-face) ;; We replace '(1) (punctuation) syntax-table text properties on ' by ;; '(3) (symbol), so that these characters won't later get the warning ;; face. @@ -2413,7 +2416,7 @@ on level 2 only and so aren't combined with `c-complex-decl-matchers'." ;; Fontify basic types. ,(let ((re (c-make-keywords-re nil - (cl-delete-duplicates + (c--delete-duplicates (append (c-lang-const c-primitive-type-kwds) (c-lang-const c-type-with-paren-kwds)) :test #'equal)))) commit e17001b2e181ae5f6d568573788e94f19e1cff0a Author: Sean Whitton Date: Tue May 13 10:13:26 2025 +0100 ; * src/buffer.c (Fgenerate_new_buffer_name): Fix typo. diff --git a/src/buffer.c b/src/buffer.c index 53aa3163fe0..a465153279d 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -1273,8 +1273,8 @@ is first appended to NAME, to speed up finding a non-existent buffer. */) genbase = name; else { - enum { bug_52711 = true }; /* https://bugs.gnu.org/57211 */ - char number[bug_52711 ? INT_BUFSIZE_BOUND (int) + 1 : sizeof "-999999"]; + enum { bug_57211 = true }; /* https://bugs.gnu.org/57211 */ + char number[bug_57211 ? INT_BUFSIZE_BOUND (int) + 1 : sizeof "-999999"]; EMACS_INT r = get_random (); eassume (0 <= r); int i = r % 1000000; commit a8309895ae83a18dbdfe4afae49152e98bee1e6f Author: Sean Whitton Date: Tue May 13 10:09:26 2025 +0100 ; * lisp/vc/diff-mode.el (diff-mode-shared-map): Document. diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el index c76c916ec70..6c7cd321745 100644 --- a/lisp/vc/diff-mode.el +++ b/lisp/vc/diff-mode.el @@ -180,6 +180,10 @@ The default \"-b\" means to ignore whitespace-only changes, ;;;; (defvar-keymap diff-mode-shared-map + :doc "Additional bindings for read-only `diff-mode' buffers. +These bindings are also available with an ESC prefix +(i.e. a \\=`M-' prefix) in read-write `diff-mode' buffers, +and with a `diff-minor-mode-prefix' prefix in `diff-minor-mode'." "n" #'diff-hunk-next "N" #'diff-file-next "p" #'diff-hunk-prev commit d1be1c91e0618da5129fcc5a8d42146277efac57 Author: Michael Albinus Date: Tue May 13 09:48:31 2025 +0200 * test/README: Tests in *-tests/ directories are also performed. diff --git a/test/README b/test/README index bf2d731215f..a4ddccae742 100644 --- a/test/README +++ b/test/README @@ -50,9 +50,9 @@ following targets: Like "make check", but run all tests. * make check- - Like "make check", but run only the tests in test//*.el. - is a relative directory path, which has replaced "/" by "-", - like in "check-src" or "check-lisp-net". + Like "make check", but run only the tests in test//*.el and + test//*-tests/*.el. is a relative directory path, + which has replaced "/" by "-", like in "check-src" or "check-lisp-net". * make -or- make .log Run all tests declared in .el. This includes expensive commit 40559bf71cd5efdf4c88ab43bc7e55abf3a66c20 Author: Stefan Monnier Date: Mon May 12 17:49:02 2025 -0400 help.el: Don't abuse `inhibit-modification-hooks` * lisp/help.el (substitute-command-keys): Set `inhibit-modification-hooks` locally so it doesn't affect downstream function. (help--window-setup): Don't let-bind `inhibit-modification-hooks`. It was introduced accidentally in commit cd87a5c7a18e. diff --git a/lisp/help.el b/lisp/help.el index 15e7cecf156..49394fea2cd 100644 --- a/lisp/help.el +++ b/lisp/help.el @@ -305,6 +305,8 @@ specifies what to do when the user exits the help buffer. Do not call this in the scope of `with-help-window'." (and (not (get-buffer-window standard-output)) + ;; FIXME: Call this code *after* we display the buffer, so we can + ;; detect reliably whether it's been put in its own frame or what. (let ((first-message (cond ((or pop-up-frames @@ -331,7 +333,7 @@ Do not call this in the scope of `with-help-window'." (list (selected-window) (window-buffer) (window-start) (window-point))) "Type \\[switch-to-buffer] RET to remove help window.")))) - (funcall (or function 'message) + (funcall (or function #'message) (concat (if first-message (substitute-command-keys first-message)) @@ -1396,10 +1398,10 @@ Otherwise, return a new string." ;; overriding-local-map, or from a \\ construct in STRING ;; itself. (let ((keymap overriding-local-map) - (inhibit-modification-hooks t) (inhibit-read-only t) (orig-buf (current-buffer))) (with-temp-buffer + (setq-local inhibit-modification-hooks t) ;; For speed. (insert string) (goto-char (point-min)) (while (< (point) (point-max)) @@ -2170,8 +2172,7 @@ The `temp-buffer-window-setup-hook' hook is called." buffer-file-name nil) (setq-local help-mode--current-data nil) (buffer-disable-undo) - (let ((inhibit-read-only t) - (inhibit-modification-hooks t)) + (let ((inhibit-read-only t)) (erase-buffer) (delete-all-overlays) (prog1 commit 872658764823bb805796002c46c0e6e4456e65b7 Author: Stefan Monnier Date: Mon May 12 17:20:12 2025 -0400 (hash-table-contains-p): Don't allocate memory (bug#78162) * lisp/subr.el (static-when): Remove spurious extra `progn` and improve warning message's location info. (hash-table-contains-p): Don't allocate memory (bug#78162). Suggested by Daniel Mendler . diff --git a/lisp/subr.el b/lisp/subr.el index 79288921bed..15c8bd8a043 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -330,7 +330,8 @@ the value of the last one, or nil if there are none." (cons 'progn body) nil) (macroexp-warn-and-return (format-message "`static-when' with empty body") - (list 'progn nil nil) '(empty-body static-when) t))) + nil '(empty-body static-when) t + condition))) (defmacro unless (cond &rest body) "If COND yields nil, do BODY, else return nil. @@ -7436,11 +7437,11 @@ TRIM-LEFT and TRIM-RIGHT default to \"[ \\t\\n\\r]+\"." (declare (important-return-value t)) (string-trim-left (string-trim-right string trim-right) trim-left)) -(defsubst hash-table-contains-p (key table) - "Return non-nil if TABLE has an element with KEY." - (declare (side-effect-free t) - (important-return-value t)) - (let ((missing (make-symbol "missing"))) +(let ((missing (make-symbol "missing"))) + (defsubst hash-table-contains-p (key table) + "Return non-nil if TABLE has an element with KEY." + (declare (side-effect-free t) + (important-return-value t)) (not (eq (gethash key table missing) missing)))) ;; The initial anchoring is for better performance in searching matches. commit 0c3cf0e16c1f28b1c50ecd5918af5802801e51b2 Author: Stefan Monnier Date: Mon May 12 15:25:05 2025 -0400 comint.el: Cosmetic changes * lisp/comint.el: Prefer #' to quote function names. (comint-mode): Turn some of the `make-local-variable`s to `setq-local` or `defval-local`. (comint-osc-hyperlink): Delete bogus alias. (comint-replace-by-expanded-history-before-point): Use `looking-at-p`. (comint-history-isearch-wrap): Share a bit more code. diff --git a/lisp/comint.el b/lisp/comint.el index 17350f8ecd6..bb718f25ee0 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -434,7 +434,7 @@ This is used by `comint-watch-for-password-prompt' to reduce the amount of time spent searching for password prompts.") ;; Here are the per-interpreter hooks. -(defvar comint-get-old-input (function comint-get-old-input-default) +(defvar comint-get-old-input #'comint-get-old-input-default "Function that returns old text in Comint mode. This function is called when return is typed while the point is in old text. It returns the text to be submitted as process input. The @@ -477,7 +477,7 @@ either globally or locally.") (defvar comint-input-sender-no-newline nil "Non-nil directs the `comint-input-sender' function not to send a newline.") -(defvar comint-input-sender (function comint-simple-send) +(defvar comint-input-sender #'comint-simple-send "Function to actually send to PROCESS the STRING submitted by user. Usually this is just `comint-simple-send', but if your mode needs to massage the input string, put a different function here. @@ -536,42 +536,42 @@ via PTYs.") (defvar comint-mode-map (let ((map (make-sparse-keymap))) ;; Keys: - (define-key map "\ep" 'comint-previous-input) - (define-key map "\en" 'comint-next-input) - (define-key map [C-up] 'comint-previous-input) - (define-key map [C-down] 'comint-next-input) - (define-key map "\er" 'comint-history-isearch-backward-regexp) - (define-key map [?\C-c ?\M-r] 'comint-previous-matching-input-from-input) - (define-key map [?\C-c ?\M-s] 'comint-next-matching-input-from-input) - (define-key map [?\C-x up] 'comint-complete-input-ring) - (define-key map "\e\C-l" 'comint-show-output) - (define-key map "\C-m" 'comint-send-input) - (define-key map "\C-d" 'comint-delchar-or-maybe-eof) + (define-key map "\ep" #'comint-previous-input) + (define-key map "\en" #'comint-next-input) + (define-key map [C-up] #'comint-previous-input) + (define-key map [C-down] #'comint-next-input) + (define-key map "\er" #'comint-history-isearch-backward-regexp) + (define-key map [?\C-c ?\M-r] #'comint-previous-matching-input-from-input) + (define-key map [?\C-c ?\M-s] #'comint-next-matching-input-from-input) + (define-key map [?\C-x up] #'comint-complete-input-ring) + (define-key map "\e\C-l" #'comint-show-output) + (define-key map "\C-m" #'comint-send-input) + (define-key map "\C-d" #'comint-delchar-or-maybe-eof) ;; The following two are standardly bound to delete-forward-char, ;; but they should never do EOF, just delete. - (define-key map [delete] 'delete-forward-char) - (define-key map [kp-delete] 'delete-forward-char) - (define-key map "\C-c " 'comint-accumulate) - (define-key map "\C-c\C-x" 'comint-get-next-from-history) - (define-key map "\C-c\C-a" 'comint-bol-or-process-mark) - (define-key map "\C-c\C-u" 'comint-kill-input) - (define-key map "\C-c\C-w" 'backward-kill-word) - (define-key map "\C-c\C-c" 'comint-interrupt-subjob) - (define-key map "\C-c\C-z" 'comint-stop-subjob) - (define-key map "\C-c\C-\\" 'comint-quit-subjob) - (define-key map "\C-c\C-m" 'comint-copy-old-input) - (define-key map "\C-c\C-o" 'comint-delete-output) - (define-key map "\C-c\M-o" 'comint-clear-buffer) - (define-key map "\C-c\C-r" 'comint-show-output) - (define-key map "\C-c\C-e" 'comint-show-maximum-output) - (define-key map "\C-c\C-l" 'comint-dynamic-list-input-ring) - (define-key map "\C-c\C-n" 'comint-next-prompt) - (define-key map "\C-c\C-p" 'comint-previous-prompt) - (define-key map "\C-c\C-d" 'comint-send-eof) - (define-key map "\C-c\C-s" 'comint-write-output) - (define-key map "\C-c." 'comint-insert-previous-argument) + (define-key map [delete] #'delete-forward-char) + (define-key map [kp-delete] #'delete-forward-char) + (define-key map "\C-c " #'comint-accumulate) + (define-key map "\C-c\C-x" #'comint-get-next-from-history) + (define-key map "\C-c\C-a" #'comint-bol-or-process-mark) + (define-key map "\C-c\C-u" #'comint-kill-input) + (define-key map "\C-c\C-w" #'backward-kill-word) + (define-key map "\C-c\C-c" #'comint-interrupt-subjob) + (define-key map "\C-c\C-z" #'comint-stop-subjob) + (define-key map "\C-c\C-\\" #'comint-quit-subjob) + (define-key map "\C-c\C-m" #'comint-copy-old-input) + (define-key map "\C-c\C-o" #'comint-delete-output) + (define-key map "\C-c\M-o" #'comint-clear-buffer) + (define-key map "\C-c\C-r" #'comint-show-output) + (define-key map "\C-c\C-e" #'comint-show-maximum-output) + (define-key map "\C-c\C-l" #'comint-dynamic-list-input-ring) + (define-key map "\C-c\C-n" #'comint-next-prompt) + (define-key map "\C-c\C-p" #'comint-previous-prompt) + (define-key map "\C-c\C-d" #'comint-send-eof) + (define-key map "\C-c\C-s" #'comint-write-output) + (define-key map "\C-c." #'comint-insert-previous-argument) ;; Mouse Buttons: - (define-key map [mouse-2] 'comint-insert-input) + (define-key map [mouse-2] #'comint-insert-input) ;; Menu bars: ;; completion: (define-key map [menu-bar completion] @@ -650,7 +650,8 @@ via PTYs.") "C-p" #'comint-previous-prompt) ;; Fixme: Is this still relevant? -(defvar comint-ptyp t +(defvar-local comint-ptyp t + ;; FIXME: What bug and how does this work around that bug? "Non-nil if communications via pty; false if by pipe. Buffer local. This is to work around a bug in Emacs process signaling.") @@ -670,7 +671,7 @@ This is to support the command \\[comint-get-next-from-history].") "Non-nil if you are accumulating input lines to send as input together. The command \\[comint-accumulate] sets this.") -(defvar comint-stored-incomplete-input nil +(defvar-local comint-stored-incomplete-input nil "Stored input for history cycling.") (put 'comint-replace-by-expanded-history 'menu-enable 'comint-input-autoexpand) @@ -735,20 +736,10 @@ Entry to this mode runs the hooks on `comint-mode-hook'." ;; It is ok to let the input method edit prompt text, but RET must ;; be processed by Emacs. (setq text-conversion-style 'action) - (make-local-variable 'comint-last-prompt) + ;; FIXME: Should be the responsibility of the setter to use `setq-local'! (make-local-variable 'comint-prompt-regexp) ; Don't set; default (make-local-variable 'comint-input-ring-size) ; ...to global val. - (make-local-variable 'comint-input-ring) (make-local-variable 'comint-input-ring-file-name) - (or (and (boundp 'comint-input-ring) comint-input-ring) - (setq comint-input-ring (make-ring comint-input-ring-size))) - (make-local-variable 'comint-input-ring-index) - (make-local-variable 'comint-save-input-ring-index) - (or (and (boundp 'comint-input-ring-index) comint-input-ring-index) - (setq comint-input-ring-index nil)) - (or (and (boundp 'comint-save-input-ring-index) comint-save-input-ring-index) - (setq comint-save-input-ring-index nil)) - (make-local-variable 'comint-matching-input-from-input-string) (make-local-variable 'comint-input-autoexpand) (make-local-variable 'comint-input-ignoredups) (make-local-variable 'comint-delimiter-argument-list) @@ -760,7 +751,15 @@ Entry to this mode runs the hooks on `comint-mode-hook'." (make-local-variable 'comint-scroll-to-bottom-on-input) (make-local-variable 'comint-move-point-for-output) (make-local-variable 'comint-scroll-show-maximum-output) - (make-local-variable 'comint-stored-incomplete-input) + (make-local-variable 'comint-process-echoes) + (make-local-variable 'comint-file-name-chars) + (make-local-variable 'comint-file-name-quote-list) + (or (and (boundp 'comint-input-ring) comint-input-ring) + (setq-local comint-input-ring (make-ring comint-input-ring-size))) + (or (and (boundp 'comint-input-ring-index) comint-input-ring-index) + (setq-local comint-input-ring-index nil)) + (or (and (boundp 'comint-save-input-ring-index) comint-save-input-ring-index) + (setq-local comint-save-input-ring-index nil)) ;; Following disabled because it seems to break the case when ;; comint-scroll-show-maximum-output is nil, and no-one can remember ;; what the original problem was. If there are problems with point @@ -769,11 +768,7 @@ Entry to this mode runs the hooks on `comint-mode-hook'." ;; ;; This makes it really work to keep point at the bottom. ;; (setq-local scroll-conservatively 10000) - (add-hook 'pre-command-hook 'comint-preinput-scroll-to-bottom t t) - (make-local-variable 'comint-ptyp) - (make-local-variable 'comint-process-echoes) - (make-local-variable 'comint-file-name-chars) - (make-local-variable 'comint-file-name-quote-list) + (add-hook 'pre-command-hook #'comint-preinput-scroll-to-bottom t t) ;; dir tracking on remote files (setq-local comint-file-name-prefix (or (file-remote-p default-directory) "")) @@ -781,9 +776,9 @@ Entry to this mode runs the hooks on `comint-mode-hook'." (setq-local font-lock-defaults '(nil t)) (add-function :filter-return (local 'filter-buffer-substring-function) #'comint--unmark-string-as-output) - (add-hook 'change-major-mode-hook 'font-lock-defontify nil t) - (add-hook 'isearch-mode-hook 'comint-history-isearch-setup nil t) - (add-hook 'completion-at-point-functions 'comint-completion-at-point nil t) + (add-hook 'change-major-mode-hook #'font-lock-defontify nil t) + (add-hook 'isearch-mode-hook #'comint-history-isearch-setup nil t) + (add-hook 'completion-at-point-functions #'comint-completion-at-point nil t) ;; This behavior is not useful in comint buffers, and is annoying (setq-local next-line-add-newlines nil)) @@ -885,7 +880,7 @@ series of processes in the same Comint buffer. The hook (if (consp command) (open-network-stream name buffer (car command) (cdr command)) (comint-exec-1 name buffer command switches)))) - (set-process-filter proc 'comint-output-filter) + (set-process-filter proc #'comint-output-filter) (setq-local comint-ptyp process-connection-type) ; t if pty, nil if pipe. ;; Jump to the end, and set the process mark. (goto-char (point-max)) @@ -920,7 +915,7 @@ series of processes in the same Comint buffer. The hook ;; If the command has slashes, make sure we ;; first look relative to the current directory. (cons default-directory exec-path) exec-path))) - (setq proc (apply 'start-file-process name buffer command switches))) + (setq proc (apply #'start-file-process name buffer command switches))) ;; Some file name handler cannot start a process, fe ange-ftp. (unless (processp proc) (error "No process started")) (let ((coding-systems (process-coding-system proc))) @@ -1167,7 +1162,7 @@ See also `comint-read-input-ring'." (set-buffer history-buffer) (let ((keymap (make-sparse-keymap))) (set-keymap-parent keymap (current-local-map)) - (define-key keymap "\C-m" 'comint-dynamic-list-input-ring-select) + (define-key keymap "\C-m" #'comint-dynamic-list-input-ring-select) (use-local-map keymap)) (forward-line 3) (while (search-backward "completion" nil 'move) @@ -1365,12 +1360,12 @@ If N is negative, search forwards for the -Nth following match." (unless (memq last-command '(comint-previous-matching-input-from-input comint-next-matching-input-from-input)) ;; Starting a new search - (setq comint-matching-input-from-input-string - (buffer-substring - (or (marker-position comint-accum-marker) - (process-mark (get-buffer-process (current-buffer)))) - (point)) - comint-input-ring-index nil)) + (setq-local comint-matching-input-from-input-string + (buffer-substring + (or (marker-position comint-accum-marker) + (process-mark (get-buffer-process (current-buffer)))) + (point)) + comint-input-ring-index nil)) (comint-previous-matching-input (concat "^" (regexp-quote comint-matching-input-from-input-string)) n t) @@ -1499,7 +1494,7 @@ actual side-effect." (let* ((mb1 (match-beginning 1)) (me1 (match-end 1)) (mb2 (match-beginning 2)) (me2 (match-end 2)) (exp (buffer-substring (or mb2 mb1) (or me2 me1))) - (pref (if (save-match-data (looking-at "!\\?")) "" "^")) + (pref (if (looking-at-p "!\\?") "" "^")) (pos (save-match-data (comint-previous-matching-input-string-position (concat pref (regexp-quote exp)) 1)))) @@ -1601,21 +1596,21 @@ Intended to be added to `isearch-mode-hook' in `comint-mode'." (setq-local isearch-push-state-function #'comint-history-isearch-push-state) (setq-local isearch-lazy-count nil) - (add-hook 'isearch-mode-end-hook 'comint-history-isearch-end nil t))) + (add-hook 'isearch-mode-end-hook #'comint-history-isearch-end nil t))) (defun comint-history-isearch-end () "Clean up the comint after terminating Isearch in comint." (if comint-history-isearch-message-overlay (delete-overlay comint-history-isearch-message-overlay)) (setq isearch-message-prefix-add nil) - (setq isearch-search-fun-function 'isearch-search-fun-default) + (setq isearch-search-fun-function #'isearch-search-fun-default) (setq isearch-message-function nil) (setq isearch-wrap-function nil) (setq isearch-push-state-function nil) ;; Force isearch to not change mark. (setq isearch-opoint (point)) (kill-local-variable 'isearch-lazy-count) - (remove-hook 'isearch-mode-end-hook 'comint-history-isearch-end t) + (remove-hook 'isearch-mode-end-hook #'comint-history-isearch-end t) (unless isearch-suspended (setq comint--force-history-isearch nil))) @@ -1732,9 +1727,9 @@ or to the last history element for a backward search." ;; When `comint-history-isearch-search' fails on reaching the ;; beginning/end of the history, wrap the search to the first/last ;; input history element. - (if isearch-forward - (comint-goto-input (1- (ring-length comint-input-ring))) - (comint-goto-input nil)) + (comint-goto-input (if isearch-forward + (1- (ring-length comint-input-ring)) + nil)) (goto-char (if isearch-forward (comint-line-beginning-position) (point-max)))) (defun comint-history-isearch-push-state () @@ -2116,7 +2111,7 @@ either globally or locally.") "If nil, Comint will interpret `carriage control' characters in output. See `comint-carriage-motion' for details.") -(defvar comint-last-prompt nil +(defvar-local comint-last-prompt nil "Markers pointing to the last prompt. If non-nil, a cons cell containing markers. The car points to the start, the cdr to the end of the last prompt recognized.") @@ -3361,7 +3356,7 @@ See `comint-word'." (t (error "Unexpected case in comint--unquote&requote-argument!"))) (setq qpos (match-end 0))) (funcall push (substring qstr qpos) (length qstr)) - (list (mapconcat #'identity (nreverse ustrs) "") + (list (mapconcat #'identity (nreverse ustrs)) qupos #'comint-quote-filename))) (defun comint--unquote-argument (str) @@ -3517,7 +3512,7 @@ specifying a common substring for adding the faces `completions-first-difference' and `completions-common-part' to the completions." (let ((window (get-buffer-window "*Completions*" 0))) - (setq completions (sort completions 'string-lessp)) + (setq completions (sort completions #'string-lessp)) (if (and (eq last-command this-command) window (window-live-p window) (window-buffer window) (buffer-name (window-buffer window)) @@ -3812,7 +3807,7 @@ and does not normally need to be invoked by the end user or programmer." ;; Because the cleanup happens as a callback, it's not easy to guarantee ;; that it really occurs. -(defalias 'comint-redirect-remove-redirection 'comint-redirect-cleanup) +(defalias 'comint-redirect-remove-redirection #'comint-redirect-cleanup) (defun comint-redirect-filter (orig-filter process input-string) "Filter function which redirects output from PROCESS to a buffer or buffers. @@ -4014,11 +4009,13 @@ REGEXP-GROUP is the regular expression group in REGEXP to use." (define-obsolete-variable-alias 'comint-osc-handlers 'ansi-osc-handlers "30.1") (define-obsolete-function-alias - 'comint-osc-directory-tracker 'ansi-osc-directory-tracker "30.1") -(define-obsolete-function-alias - 'comint-osc-hyperlink-handler 'ansi-osc-hyperlink-handler "30.1") + 'comint-osc-directory-tracker #'ansi-osc-directory-tracker "30.1") (define-obsolete-function-alias - 'comint-osc-hyperlink 'ansi-osc-hyperlink "30.1") + 'comint-osc-hyperlink-handler #'ansi-osc-hyperlink-handler "30.1") +;; There's never been any `comint-osc-hyperlink' function (nor +;; is there a `ansi-osc-hyperlink')! +;;(define-obsolete-function-alias +;; 'comint-osc-hyperlink #'ansi-osc-hyperlink "30.1") (define-obsolete-variable-alias 'comint-osc-hyperlink-map 'ansi-osc-hyperlink-map "30.1") commit 396c8873f3bf992635fce12478313ce1e1d84017 Author: Stefan Monnier Date: Mon May 12 14:51:07 2025 -0400 lisp/comint.el (comint-delchar-or-maybe-eof): Obey global C-d binding Fixes bug#78262. diff --git a/lisp/comint.el b/lisp/comint.el index 188989ff8a4..17350f8ecd6 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -2789,14 +2789,15 @@ called this function are inserted into the buffer." (if (> (point) (marker-position pmark)) (kill-region pmark (point))))) -(defun comint-delchar-or-maybe-eof (arg) - "Delete ARG characters forward or send an EOF to subprocess. +(defun comint-delchar-or-maybe-eof (&optional _arg) + "Behave like the global binding or send an EOF to subprocess. Sends an EOF only if point is at the end of the buffer and there is no input." - (interactive "p" comint-mode) + (interactive nil comint-mode) (let ((proc (get-buffer-process (current-buffer)))) (if (and (eobp) proc (= (point) (marker-position (process-mark proc)))) (comint-send-eof) - (delete-char arg)))) + (let ((cmd (lookup-key global-map (this-command-keys)))) + (call-interactively (or (command-remapping cmd) cmd)))))) (defun comint-send-eof () "Send an EOF to the current buffer's process." commit 824e4868db312f0cd9e735cf13d54466c4af5934 Author: Juri Linkov Date: Mon May 12 21:23:03 2025 +0300 * lisp/treesit.el (treesit--parser-overlay-offset): New variable. (treesit-parsers-at): Use it (bug#77906). (treesit-forward-sexp, treesit--forward-list-with-default) (treesit-up-list): Let-bind 'treesit--parser-overlay-offset'. diff --git a/lisp/treesit.el b/lisp/treesit.el index a10dbe1d445..8ccdb73c25f 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -839,6 +839,11 @@ those inside are kept." if (<= start (car range) (cdr range) end) collect range)) +(defvar treesit--parser-overlay-offset 0 + "Defines at which position to get the parser overlay. +The commands that move backward need to set it to -1 to be +able to use the range that ends immediately before point.") + (defun treesit-parsers-at (&optional pos language with-host only) "Return all parsers at POS. @@ -869,7 +874,8 @@ That is, the deepest embedded parser comes first." (let ((res nil)) ;; Refer to (ref:local-parser-overlay) for more explanation of local ;; parser overlays. - (dolist (ov (overlays-at (or pos (point)))) + (dolist (ov (overlays-at (+ (or pos (point)) + treesit--parser-overlay-offset))) (when-let* ((parser (overlay-get ov 'treesit-parser)) (host-parser (or (null with-host) (overlay-get ov 'treesit-host-parser))) @@ -3019,7 +3025,8 @@ across atoms (such as symbols or words) inside the list." t) (if (> arg 0) (treesit-end-of-thing pred (abs arg) 'restricted) - (treesit-beginning-of-thing pred (abs arg) 'restricted)) + (let ((treesit--parser-overlay-offset -1)) + (treesit-beginning-of-thing pred (abs arg) 'restricted))) ;; If we couldn't move, we should signal an error and report ;; the obstacle, like `forward-sexp' does. If we couldn't ;; find a parent, we simply return nil without moving point, @@ -3034,6 +3041,7 @@ the boundaries of the list. ARG is described in the docstring of `forward-list'." (let* ((pred (or treesit-sexp-type-regexp 'list)) (arg (or arg 1)) + (treesit--parser-overlay-offset (if (> arg 0) 0 -1)) (cnt arg) (inc (if (> arg 0) 1 -1))) (while (/= cnt 0) @@ -3161,6 +3169,7 @@ ARG is described in the docstring of `up-list'." (interactive "^p") (let* ((pred (or treesit-sexp-type-regexp 'list)) (arg (or arg 1)) + (treesit--parser-overlay-offset -1) (cnt arg) (inc (if (> arg 0) 1 -1))) (while (/= cnt 0) commit c53f53f11b0dbf4417bc8b478659f8ec33b182b4 Author: Arash Esbati Date: Mon May 12 20:17:12 2025 +0200 ; RefTeX: Describe activation with use-package * doc/misc/reftex.texi (Installation): Add examples how to activate RefTeX with use-package. Fix markup. diff --git a/doc/misc/reftex.texi b/doc/misc/reftex.texi index 8c7739b00f2..40ffbac737d 100644 --- a/doc/misc/reftex.texi +++ b/doc/misc/reftex.texi @@ -252,16 +252,27 @@ version 20.2. @findex turn-on-reftex @findex reftex-mode +@findex use-package @vindex LaTeX-mode-hook @vindex latex-mode-hook To turn @RefTeX{} Mode on and off in a particular buffer, use @kbd{M-x reftex-mode @key{RET}}. To turn on @RefTeX{} Mode for all LaTeX files, add the following lines to your @file{.emacs} file: -@example +@lisp (add-hook 'LaTeX-mode-hook #'turn-on-reftex) ; with AUCTeX LaTeX mode (add-hook 'latex-mode-hook #'turn-on-reftex) ; with Emacs latex mode -@end example +@end lisp + +@noindent +Users of the use-package library can achieve the same result with: + +@lisp +(use-package reftex ; with AUCTeX LaTeX mode + :hook (LaTeX-mode . turn-on-reftex)) +(use-package reftex ; with Emacs latex mode + :hook (latex-mode . turn-on-reftex)) +@end lisp That's all! commit 8a19c249f813e9f3830308e40f0205d7665f78a3 Author: Stefan Monnier Date: Mon May 5 11:55:29 2025 -0400 simple.el (delete-trailing-whitespace-mode): New minor mode (bug#78264) Partly motivated by bug#78097. * lisp/simple.el (delete-trailing-whitespace-if-possible): New function. (delete-trailing-whitespace-mode): New minor mode. * lisp/editorconfig.el (editorconfig-trim-whitespaces-mode): Change default to `delete-trailing-whitespace-mode`. (editorconfig--get-trailing-ws): Simplify accordingly. (editorconfig--add-hook-safe-p): Delete function. Don't touch `safe-local-eval-function` any more. diff --git a/etc/NEWS b/etc/NEWS index 2dca61740d4..612d2d841cb 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2059,6 +2059,10 @@ is bound to 'C-l' in the calendar buffer. * New Modes and Packages in Emacs 31.1 +** New minor mode 'delete-trailing-whitespace-mode'. +A simple buffer-local mode that runs 'delete-trailing-whitespace' +before saving the buffer. + ** New major mode 'conf-npmrc-mode'. A major mode based on 'conf-mode' for editing ".npmrc" files. diff --git a/lisp/editorconfig.el b/lisp/editorconfig.el index 7cdd79fa3b0..bfc8ef46ed3 100644 --- a/lisp/editorconfig.el +++ b/lisp/editorconfig.el @@ -277,13 +277,13 @@ a list of settings in the form (VARIABLE . VALUE)." :version "30.1" :risky t) -(defcustom editorconfig-trim-whitespaces-mode nil +(defcustom editorconfig-trim-whitespaces-mode #'delete-trailing-whitespace-mode "Buffer local minor-mode to use to trim trailing whitespaces. If set, enable that mode when `trim_trailing_whitespace` is set to true. Otherwise, use `delete-trailing-whitespace'." :version "30.1" - :type 'symbol) + :type 'function) (defvar-local editorconfig-properties-hash nil "Hash object of EditorConfig properties that was enabled for current buffer. @@ -542,33 +542,17 @@ This function will revert buffer when the coding-system has been changed." "Call `delete-trailing-whitespace' unless the buffer is read-only." (unless buffer-read-only (delete-trailing-whitespace))) -;; Arrange for our (eval . (add-hook ...)) "local var" to be considered safe. -(defun editorconfig--add-hook-safe-p (exp) - (equal exp '(add-hook 'before-save-hook - #'editorconfig--delete-trailing-whitespace nil t))) -(let ((predicates (get 'add-hook 'safe-local-eval-function))) - (when (functionp predicates) - (setq predicates (list predicates))) - (unless (memq #'editorconfig--add-hook-safe-p predicates) - (put 'add-hook 'safe-local-eval-function #'editorconfig--add-hook-safe-p))) - (defun editorconfig--get-trailing-ws (props) "Get vars to trim of trailing whitespace according to PROPS." - (pcase (gethash 'trim_trailing_whitespace props) - ("true" - `((eval - . ,(if editorconfig-trim-whitespaces-mode - `(,editorconfig-trim-whitespaces-mode 1) - '(add-hook 'before-save-hook - #'editorconfig--delete-trailing-whitespace nil t))))) - ("false" - ;; Just do it right away rather than return a (VAR . VAL), which - ;; would be probably more trouble than it's worth. - (when editorconfig-trim-whitespaces-mode - (funcall editorconfig-trim-whitespaces-mode 0)) - (remove-hook 'before-save-hook - #'editorconfig--delete-trailing-whitespace t) - nil))) + (let ((fun (or editorconfig-trim-whitespaces-mode + #'delete-trailing-whitespace-mode))) + (pcase (gethash 'trim_trailing_whitespace props) + ("true" `((eval . (,fun 1)))) + ("false" + ;; Just do it right away rather than return a (VAR . VAL), which + ;; would be probably more trouble than it's worth. + (funcall fun 0) + nil)))) (defun editorconfig--get-line-length (props) "Get the max line length (`fill-column') to PROPS." diff --git a/lisp/simple.el b/lisp/simple.el index 486092de2c8..f686907ad68 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -888,6 +888,21 @@ buffer if the variable `delete-trailing-lines' is non-nil." ;; Return nil for the benefit of `write-file-functions'. nil) +(defun delete-trailing-whitespace-if-possible () + "Call `delete-trailing-whitespace' unless the buffer is read-only." + (unless buffer-read-only (delete-trailing-whitespace))) + +(define-minor-mode delete-trailing-whitespace-mode + "Delete trailing whitespace before saving the current buffer." + :global nil + (cond + (delete-trailing-whitespace-mode + (add-hook 'before-save-hook + #'delete-trailing-whitespace-if-possible nil t)) + (t + (remove-hook 'before-save-hook + #'delete-trailing-whitespace-if-possible t)))) + (defun newline-and-indent (&optional arg) "Insert a newline, then indent according to major mode. Indentation is done using the value of `indent-line-function'. commit d11570d80ee18932ffb0ceed552313ada2879bcb Author: Jens Schmidt Date: Mon May 5 13:47:17 2025 +0200 Require key and cert when searching for client cert * lisp/net/network-stream.el (network-stream-certificate): Require :key and :cert when searching auth sources for a client certificate. (Bug#78189) diff --git a/lisp/net/network-stream.el b/lisp/net/network-stream.el index 1bd960025aa..93f3682883a 100644 --- a/lisp/net/network-stream.el +++ b/lisp/net/network-stream.el @@ -249,7 +249,8 @@ gnutls-boot (as returned by `gnutls-boot-parameters')." (ignore-errors (car (auth-source-search :max 1 :host host - :port (format "%s" service))))) + :port (format "%s" service) + :require '(:key :cert))))) (key (plist-get auth-info :key)) (cert (plist-get auth-info :cert))) (and key cert (file-readable-p key) (file-readable-p cert) commit b91efd401d68f22510856008ce79121b8b9bd199 Author: Michael Albinus Date: Mon May 12 16:39:15 2025 +0200 Improve handling of tests in *-tests subdirs * test/Makefile.in (subdir_template): Add rules for *-tests subdirs. * test/infra/Makefile.in: Remove special handling of eieio, faceup and so-long. Add recipes for *-tests subdirs. Filter out rules for *-tests subdirs. * test/infra/test-jobs.yml: Regenerate. diff --git a/test/Makefile.in b/test/Makefile.in index 3d8a8b87cd9..20505432e31 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -258,7 +258,8 @@ SUBDIR_TARGETS = define subdir_template SUBDIR_TARGETS += check-$(subst /,-,$(1)) .PHONY: check-$(subst /,-,$(1)) - check-$(subst /,-,$(1)): + check-$(subst /,-,$(1)): \ + $(patsubst %,check-%,$(subst /,-,$(wildcard $(1)/*-tests))) @${MAKE} check LOGFILES="$(patsubst %.el,%.log, \ $(patsubst $(srcdir)/%,%,$(wildcard ${srcdir}/$(1)/*.el)))" endef diff --git a/test/infra/Makefile.in b/test/infra/Makefile.in index 4598fe1688a..8347df4e2bf 100644 --- a/test/infra/Makefile.in +++ b/test/infra/Makefile.in @@ -53,14 +53,6 @@ define subdir_template @echo ' - changes:' >>$(FILE) @echo ' - $(1)/*.{h,c}' >>$(FILE) endef - else ifeq ($(findstring eieio, $(1)), eieio) - define changes - @echo ' - lisp/emacs-lisp/eieio*.el' >>$(FILE) - endef - else ifeq ($(findstring faceup, $(1)), faceup) - define changes - @echo ' - lisp/emacs-lisp/faceup*.el' >>$(FILE) - endef else ifeq ($(findstring progmodes, $(1)), progmodes) define changes @echo ' - $(1)/eglot.el' >>$(FILE) @@ -72,10 +64,6 @@ define subdir_template @echo ' - changes:' >>$(FILE) @echo ' - $(1)/*.el' >>$(FILE) endef - else ifeq ($(findstring so-long, $(1)), so-long) - define changes - @echo ' - lisp/so-long*.el' >>$(FILE) - endef else ifeq ($(findstring textmodes, $(1)), textmodes) define changes @echo ' - $(1)/*-ts-mode.el' >>$(FILE) @@ -108,6 +96,9 @@ define subdir_template @echo ' when: never' >>$(FILE) @echo ' - changes:' >>$(FILE) $(changes) + $(foreach subdir, $(notdir $(wildcard ../$(1)/*-tests)), + @echo ' - test/$(1)/$(subdir)/*resources/**' >>$(FILE) + @echo ' - test/$(1)/$(subdir)/*.el' >>$(FILE)) @echo ' - test/$(1)/*resources/**' >>$(FILE) @echo ' - test/$(1)/*.el' >>$(FILE) @echo ' variables:' >>$(FILE) @@ -115,7 +106,8 @@ define subdir_template @echo ' make_params: -C test $(target)' >>$(FILE) endef -$(foreach subdir, $(SUBDIRS), $(eval $(call subdir_template,$(subdir)))) +$(foreach subdir, $(filter-out %-tests,$(SUBDIRS)), \ + $(eval $(call subdir_template,$(subdir)))) TREE-SITTER-FILES ?= $(shell cd .. ; \ find lisp src -name "*-tests.el" | xargs grep -El "treesit.*-p" | \ diff --git a/test/infra/test-jobs.yml b/test/infra/test-jobs.yml index 180f29947ca..f0db97f55c0 100644 --- a/test/infra/test-jobs.yml +++ b/test/infra/test-jobs.yml @@ -28,6 +28,8 @@ test-lisp-inotify: when: never - changes: - lisp/*.el + - test/lisp/so-long-tests/*resources/** + - test/lisp/so-long-tests/*.el - test/lisp/*resources/** - test/lisp/*.el variables: @@ -147,45 +149,15 @@ test-lisp-emacs-lisp-inotify: when: never - changes: - lisp/emacs-lisp/*.el - - test/lisp/emacs-lisp/*resources/** - - test/lisp/emacs-lisp/*.el - variables: - target: emacs-inotify - make_params: -C test check-lisp-emacs-lisp - -test-lisp-emacs-lisp-eieio-tests-inotify: - stage: normal - extends: [.job-template, .test-template] - needs: - - job: build-image-inotify - optional: true - rules: - - if: '$CI_PIPELINE_SOURCE == "schedule"' - when: never - - changes: - - lisp/emacs-lisp/eieio*.el - test/lisp/emacs-lisp/eieio-tests/*resources/** - test/lisp/emacs-lisp/eieio-tests/*.el - variables: - target: emacs-inotify - make_params: -C test check-lisp-emacs-lisp-eieio-tests - -test-lisp-emacs-lisp-faceup-tests-inotify: - stage: normal - extends: [.job-template, .test-template] - needs: - - job: build-image-inotify - optional: true - rules: - - if: '$CI_PIPELINE_SOURCE == "schedule"' - when: never - - changes: - - lisp/emacs-lisp/faceup*.el - test/lisp/emacs-lisp/faceup-tests/*resources/** - test/lisp/emacs-lisp/faceup-tests/*.el + - test/lisp/emacs-lisp/*resources/** + - test/lisp/emacs-lisp/*.el variables: target: emacs-inotify - make_params: -C test check-lisp-emacs-lisp-faceup-tests + make_params: -C test check-lisp-emacs-lisp test-lisp-emulation-inotify: stage: normal @@ -432,23 +404,6 @@ test-lisp-progmodes-inotify: target: emacs-inotify make_params: -C test check-lisp-progmodes -test-lisp-so-long-tests-inotify: - stage: normal - extends: [.job-template, .test-template] - needs: - - job: build-image-inotify - optional: true - rules: - - if: '$CI_PIPELINE_SOURCE == "schedule"' - when: never - - changes: - - lisp/so-long*.el - - test/lisp/so-long-tests/*resources/** - - test/lisp/so-long-tests/*.el - variables: - target: emacs-inotify - make_params: -C test check-lisp-so-long-tests - test-lisp-term-inotify: stage: normal extends: [.job-template, .test-template] @@ -533,6 +488,8 @@ test-lisp-vc-inotify: when: never - changes: - lisp/vc/*.el + - test/lisp/vc/vc-tests/*resources/** + - test/lisp/vc/vc-tests/*.el - test/lisp/vc/*resources/** - test/lisp/vc/*.el variables: commit 8b67e566b9fe156b6be8be0a6381052fa79abc2c Author: Eli Zaretskii Date: Mon May 12 15:08:20 2025 +0300 Fix filelock-tests on MS-Windows * test/src/filelock-tests.el (filelock-tests-file-locked-p-spoiled) (filelock-tests-unlock-spoiled) (filelock-tests-kill-buffer-spoiled): Don't special-case MS-Windows, as it was evidently fixed to signal the same error as Posix systems. diff --git a/test/src/filelock-tests.el b/test/src/filelock-tests.el index 834019faeab..330b7879371 100644 --- a/test/src/filelock-tests.el +++ b/test/src/filelock-tests.el @@ -123,10 +123,7 @@ the case)." (filelock-tests--fixture (filelock-tests--spoil-lock-file buffer-file-truename) (let ((err (should-error (file-locked-p (buffer-file-name))))) - (should (equal (seq-subseq err 0 2) - (if (eq system-type 'windows-nt) - '(permission-denied "Testing file lock") - '(file-error "Testing file lock"))))))) + (should (equal (seq-subseq err 0 2) '(file-error "Testing file lock")))))) (ert-deftest filelock-tests-unlock-spoiled () "Check that `unlock-buffer' fails if the lockfile is \"spoiled\"." @@ -142,11 +139,8 @@ the case)." ;; `userlock--handle-unlock-error' (bug#46397). (cl-letf (((symbol-function 'userlock--handle-unlock-error) (lambda (err) (signal (car err) (cdr err))))) - (should (equal - (if (eq system-type 'windows-nt) - '(permission-denied "Unlocking file") - '(file-error "Unlocking file")) - (seq-subseq (should-error (unlock-buffer)) 0 2)))))) + (should (equal '(file-error "Unlocking file") + (seq-subseq (should-error (unlock-buffer)) 0 2)))))) (ert-deftest filelock-tests-kill-buffer-spoiled () "Check that `kill-buffer' fails if a lockfile is \"spoiled\"." @@ -168,11 +162,8 @@ the case)." (cl-letf (((symbol-function 'yes-or-no-p) #'always) ((symbol-function 'userlock--handle-unlock-error) (lambda (err) (signal (car err) (cdr err))))) - (should (equal - (if (eq system-type 'windows-nt) - '(permission-denied "Unlocking file") - '(file-error "Unlocking file")) - (seq-subseq (should-error (kill-buffer)) 0 2)))))) + (should (equal '(file-error "Unlocking file") + (seq-subseq (should-error (kill-buffer)) 0 2)))))) (ert-deftest filelock-tests-detect-external-change () "Check that an external file modification is reported." commit 4ddafede8d7bebdaa795279cc4c527e5fe425add Author: Sean Whitton Date: Mon May 12 10:11:18 2025 +0100 diff-mode-shared-map: Don't inherit from special-mode-map * lisp/vc/diff-mode.el (diff-mode-shared-map): No longer inherit from special-mode-map. (diff-mode-map): Tidy up list of unbindings now that we no longer need to override any bindings from special-mode-map. (minor-mode-map-alist): : Ensure that the minor mode keymap continues to inherit from special-mode-map by calling make-composed-keymap here. Co-authored-by: Stefan Monnier diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el index 18f467eee74..c76c916ec70 100644 --- a/lisp/vc/diff-mode.el +++ b/lisp/vc/diff-mode.el @@ -180,7 +180,6 @@ The default \"-b\" means to ignore whitespace-only changes, ;;;; (defvar-keymap diff-mode-shared-map - :parent special-mode-map "n" #'diff-hunk-next "N" #'diff-file-next "p" #'diff-hunk-prev @@ -207,8 +206,7 @@ The default \"-b\" means to ignore whitespace-only changes, ;; We want to inherit most bindings from ;; `diff-mode-shared-map', but not all since they may hide ;; useful `M-' global bindings when editing. - (dolist (key '("A" "r" "R" "g" "q" "W" "w" "z" "?" - "SPC" "S-SPC" "DEL")) + (dolist (key '("A" "r" "R" "W" "w")) (keymap-set map key nil)) map) ;; From compilation-minor-mode. @@ -1599,7 +1597,9 @@ else cover the whole buffer." ;; It should be lower than `outline-minor-mode' and `view-mode'. (or (assq 'diff-mode-read-only minor-mode-map-alist) (nconc minor-mode-map-alist - (list (cons 'diff-mode-read-only diff-mode-shared-map)))) + (list (cons 'diff-mode-read-only + (make-composed-keymap diff-mode-shared-map + special-mode-map))))) (defvar whitespace-style) (defvar whitespace-trailing-regexp) commit 882c849034a909a62179c38ee01cc08572fa1a68 Author: Eli Zaretskii Date: Sun May 11 19:27:13 2025 +0300 Avoid unnecessary calls to GetFileAttributes on MS-Windows * src/w32.c (access_attrs): New function, refactored from 'faccessat'. (faccessat): Call 'access_attrs' early to determine whether the file doesn't exist, and if so, avoid calling 'chase_symlinks'. Also avoid calling 'chase_symlinks' if it is known that the file cannot be a symlink, given its attributes. (Bug#78341) diff --git a/src/w32.c b/src/w32.c index c504c141b31..5de721ad71f 100644 --- a/src/w32.c +++ b/src/w32.c @@ -4108,6 +4108,69 @@ logon_network_drive (const char *path) } } +/* Subroutine of faccessat. Determines attributes of FILE (which is + assumed to be in UTF-8 and after map_w32_filename) as reported by + GetFileAttributes. Returns -1 if it fails (meaning the file doesn't + exist or cannot be accessed by the current user), otherwise returns + the bitmap of file's attributes. */ +static DWORD +access_attrs (const char *file) +{ + DWORD attrs; + + if (w32_unicode_filenames) + { + wchar_t file_w[MAX_PATH]; + + filename_to_utf16 (file, file_w); + attrs = GetFileAttributesW (file_w); + } + else + { + char file_a[MAX_PATH]; + + filename_to_ansi (file, file_a); + attrs = GetFileAttributesA (file_a); + } + + if (attrs == -1) + { + DWORD w32err = GetLastError (); + + switch (w32err) + { + case ERROR_INVALID_NAME: + case ERROR_BAD_PATHNAME: + if (is_unc_volume (file)) + { + attrs = unc_volume_file_attributes (file); + if (attrs == -1) + { + errno = EACCES; + return -1; + } + return attrs; + } + /* FALLTHROUGH */ + FALLTHROUGH; + case ERROR_FILE_NOT_FOUND: + case ERROR_PATH_NOT_FOUND: + case ERROR_INVALID_DRIVE: + case ERROR_NOT_READY: + case ERROR_BAD_NETPATH: + case ERROR_BAD_NET_NAME: + errno = ENOENT; + break; + default: + errno = EACCES; + break; + } + return -1; + } + + return attrs; +} + /* Emulate faccessat(2). */ int faccessat (int dirfd, const char * path, int mode, int flags) @@ -4142,65 +4205,26 @@ faccessat (int dirfd, const char * path, int mode, int flags) /* MSVCRT implementation of 'access' doesn't recognize D_OK, and its newer versions blow up when passed D_OK. */ path = map_w32_filename (path, NULL); + + attributes = access_attrs (path); + if (attributes == -1) /* PATH doesn't exist or is inaccessible */ + return -1; + /* If the last element of PATH is a symlink, we need to resolve it to get the attributes of its target file. Note: any symlinks in PATH elements other than the last one are transparently resolved by GetFileAttributes below. */ + int not_a_symlink = ((attributes & FILE_ATTRIBUTE_REPARSE_POINT) == 0); if ((volume_info.flags & FILE_SUPPORTS_REPARSE_POINTS) != 0 - && (flags & AT_SYMLINK_NOFOLLOW) == 0) - path = chase_symlinks (path); - - if (w32_unicode_filenames) - { - wchar_t path_w[MAX_PATH]; - - filename_to_utf16 (path, path_w); - attributes = GetFileAttributesW (path_w); - } - else - { - char path_a[MAX_PATH]; - - filename_to_ansi (path, path_a); - attributes = GetFileAttributesA (path_a); - } - - if (attributes == -1) + && (flags & AT_SYMLINK_NOFOLLOW) == 0 + && !not_a_symlink) { - DWORD w32err = GetLastError (); - - switch (w32err) - { - case ERROR_INVALID_NAME: - case ERROR_BAD_PATHNAME: - if (is_unc_volume (path)) - { - attributes = unc_volume_file_attributes (path); - if (attributes == -1) - { - errno = EACCES; - return -1; - } - goto check_attrs; - } - /* FALLTHROUGH */ - FALLTHROUGH; - case ERROR_FILE_NOT_FOUND: - case ERROR_PATH_NOT_FOUND: - case ERROR_INVALID_DRIVE: - case ERROR_NOT_READY: - case ERROR_BAD_NETPATH: - case ERROR_BAD_NET_NAME: - errno = ENOENT; - break; - default: - errno = EACCES; - break; - } - return -1; + path = chase_symlinks (path); + attributes = access_attrs (path); + if (attributes == -1) + return -1; } - check_attrs: if ((mode & X_OK) != 0 && !(is_exec (path) || (attributes & FILE_ATTRIBUTE_DIRECTORY) != 0)) { commit cbea5997c077878b757b0168762f1a114ee1e484 Author: Stephen Gildea Date: Sun May 11 08:45:05 2025 -0700 ; * lisp/mh-e/mh-e.el: Commentary: link to The MH-E Manual diff --git a/lisp/mh-e/mh-e.el b/lisp/mh-e/mh-e.el index 7bca8bfde73..8bf90412249 100644 --- a/lisp/mh-e/mh-e.el +++ b/lisp/mh-e/mh-e.el @@ -26,6 +26,8 @@ ;; MH-E is an Emacs interface to the MH mail system. +;; To learn about MH-E, read The MH-E Manual at info node '(mh-e)'. + ;; MH-E is compatible with MH versions 6.8.4 and higher, all versions ;; of nmh, and GNU mailutils 1.0 and higher. commit 7d84ffc2ded59a1d32b902cf7487a6486e0d9869 Author: Eli Zaretskii Date: Sun May 11 15:47:17 2025 +0300 Add test for file time-stamp granularity on MS-Windows * test/src/fileio-tests.el (fileio-tests-w32-time-stamp-granularity): New test. diff --git a/test/src/fileio-tests.el b/test/src/fileio-tests.el index c2938c4900e..13cc5de29e8 100644 --- a/test/src/fileio-tests.el +++ b/test/src/fileio-tests.el @@ -217,4 +217,23 @@ Also check that an encoding error can appear in a symlink." (should-not (file-exists-p "//")) (should (file-attributes "//"))) +(ert-deftest fileio-tests-w32-time-stamp-granularity () + "Test 100-nsec granularity of file time stamps on MS-Windows." + (skip-unless (eq system-type 'windows-nt)) + ;; FIXME: This only works on NTFS volumes, so should skip the test if + ;; not NTFS. But we don't expose the filesystem type to Lisp. + (let ((tfile (make-temp-file "tstamp"))) + (unwind-protect + (progn + (set-file-times tfile (encode-time '(59.123456789 15 23 01 02 2025))) + (should + (equal (format-time-string "%Y/%m/%d %H:%M:%S.%N" + (file-attribute-modification-time + (file-attributes tfile))) + ;; Last 2 digits of seconds must be zero due to + ;; 100-nsec resolution of Windows file time stamps. + "2025/02/01 23:15:59.123456700"))) + (delete-file tfile)))) + + ;;; fileio-tests.el ends here commit 0bf956235e3475f93bd3c146da05a0f87afab714 Author: Michael Albinus Date: Sun May 11 14:25:59 2025 +0200 Improve Tramp test * test/lisp/net/tramp-tests.el (tramp-test26-interactive-file-name-completion): Adapt test. diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el index 2c95cf97ff4..84f864e2d62 100644 --- a/test/lisp/net/tramp-tests.el +++ b/test/lisp/net/tramp-tests.el @@ -5083,6 +5083,14 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." ipv6-postfix tramp-postfix-host-format))) ;; The hop string fits only the initial syntax. (hop (and (eq tramp-syntax orig-syntax) hop)) + ;; Needed for host name completion. + (default-user + (file-remote-p + (concat tramp-prefix-format hop method-string host-string) + 'user)) + (default-user-string + (unless (tramp-string-empty-or-nil-p default-user) + (concat default-user tramp-postfix-user-format))) test result completions) (dolist @@ -5120,7 +5128,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." tramp-prefix-format hop method-string host-string) ,(concat tramp-prefix-format hop method-string - user-string host-string)) + default-user-string host-string)) ,host-string))) ;; Complete user and host name. (unless (or (tramp-string-empty-or-nil-p user) commit eaf01d034c0c20f5dc205331de22761016887707 Author: Michael Albinus Date: Sun May 11 14:25:32 2025 +0200 * lisp/autorevert.el (auto-revert-remote-files): Adapt docstring. diff --git a/lisp/autorevert.el b/lisp/autorevert.el index 4e05bc6818d..38917c97527 100644 --- a/lisp/autorevert.el +++ b/lisp/autorevert.el @@ -274,7 +274,7 @@ it should return non-nil to make Global Auto-Revert Mode not revert this buffer.") (defcustom auto-revert-remote-files nil - "If non-nil remote files are also reverted." + "If nil remote files are not reverted in Auto Revert modes." :group 'auto-revert :type 'boolean :version "24.4") commit e32bb816adbbd070bbb2bf42b06feb4b6d917b5b Author: Eli Zaretskii Date: Sun May 11 14:42:51 2025 +0300 ; Improve documentation of ls-lisp.el * lisp/ls-lisp.el (ls-lisp-format-time-list) (ls-lisp-use-localized-time-format, ls-lisp-format-time): Doc fixes. diff --git a/lisp/ls-lisp.el b/lisp/ls-lisp.el index 5c723d4ef4d..3a1385dffa8 100644 --- a/lisp/ls-lisp.el +++ b/lisp/ls-lisp.el @@ -208,10 +208,15 @@ Otherwise they are treated as Emacs regexps (for backward compatibility)." '("%b %e %H:%M" "%b %e %Y") "List of `format-time-string' specs to display file time stamps. -These specs are used ONLY if a valid locale can not be determined. +These specs are used ONLY if a valid locale can not be determined, +or if the locale is \"C\" or \"POSIX\". If a valid non-\"C\" locale +can be determined, file time stamps are displayed using hardcoded +formats \"%m-%d %H:%M\" for new files and \"%Y-%m-%d\" for old files. -If `ls-lisp-use-localized-time-format' is non-nil, these specs are used -regardless of whether the locale can be determined. +If `ls-lisp-use-localized-time-format' is non-nil, the specs specified +by this option are used regardless of whether the locale can be determined. + +The locale is determined by `ls-lisp-format-time', which see. Syntax: (EARLY-TIME-FORMAT OLD-TIME-FORMAT) @@ -228,7 +233,7 @@ current year. The OLD-TIME-FORMAT is used for older files. To use ISO (defcustom ls-lisp-use-localized-time-format nil "Non-nil means to always use `ls-lisp-format-time-list' for time stamps. -This applies even if a valid locale is specified. +This applies even if a valid locale is determined by `ls-lisp-format-time'. WARNING: Using localized date/time format might cause Dired columns to fail to line up, e.g. if month names are not all of the same length." @@ -827,7 +832,11 @@ Return nil if no time switch found." "Format time for file with attributes FILE-ATTR according to TIME-INDEX. Use the same method as ls to decide whether to show time-of-day or year, depending on distance between file date and the current time. -All ls time options, namely c, t and u, are handled." +All ls time options, namely c, t and u, are handled. + +This function determines as side effect the locale relevant for +displaying times, by using `system-time-locale' if non-nil, and +falling back to environment variables LC_ALL, LC_TIME, and LANG." (let* ((time (nth (or time-index 5) file-attr)) ; default is last modtime (diff (time-subtract time nil)) ;; Consider a time to be recent if it is within the past six commit 3975094f1d96680fe73232ca4216733904ebecd0 Author: Eli Zaretskii Date: Sun May 11 13:33:24 2025 +0300 Support sub-second file time-stamps on MS-Windows * nt/inc/sys/stat.h (struct stat): New members for nsec part of file times. * lib-src/ntlib.c (convert_time): * src/w32.c (convert_time): Accept an additional argument TIME_NSEC and set it to the sub-second part of time. All callers changed. diff --git a/lib-src/ntlib.c b/lib-src/ntlib.c index bcb9a4bbab2..2ba8d09c1ec 100644 --- a/lib-src/ntlib.c +++ b/lib-src/ntlib.c @@ -30,6 +30,7 @@ along with GNU Emacs. If not, see . */ #include #include #include +#include #include #include #include @@ -256,7 +257,7 @@ static long double utc_base; static int init = 0; static time_t -convert_time (FILETIME ft) +convert_time (FILETIME ft, int *time_nsec) { long double ret; @@ -266,7 +267,8 @@ convert_time (FILETIME ft) ret = (long double) ft.dwHighDateTime * 4096.0L * 1024.0L * 1024.0L + ft.dwLowDateTime; ret -= utc_base; - return (time_t) (ret * 1e-7L); + *time_nsec = (int) fmodl (ret, 1.0e7L) * 100; + return (time_t) (ret * 1.0e-7L); } static int @@ -373,11 +375,19 @@ stat (const char * path, struct stat * buf) buf->st_size += wfd.nFileSizeLow; /* Convert timestamps to Unix format. */ - buf->st_mtime = convert_time (wfd.ftLastWriteTime); - buf->st_atime = convert_time (wfd.ftLastAccessTime); - if (buf->st_atime == 0) buf->st_atime = buf->st_mtime; - buf->st_ctime = convert_time (wfd.ftCreationTime); - if (buf->st_ctime == 0) buf->st_ctime = buf->st_mtime; + buf->st_mtime = convert_time (wfd.ftLastWriteTime, &buf->st_mtimensec); + buf->st_atime = convert_time (wfd.ftLastAccessTime, &buf->st_atimensec); + if (buf->st_atime == 0) + { + buf->st_atime = buf->st_mtime; + buf->st_atimensec = buf->st_mtimensec; + } + buf->st_ctime = convert_time (wfd.ftCreationTime, &buf->st_ctimensec); + if (buf->st_ctime == 0) + { + buf->st_ctime = buf->st_mtime; + buf->st_ctimensec = buf->st_mtimensec; + } /* determine rwx permissions */ if (wfd.dwFileAttributes & FILE_ATTRIBUTE_READONLY) @@ -473,11 +483,19 @@ fstat (int desc, struct stat * buf) buf->st_size += info.nFileSizeLow; /* Convert timestamps to Unix format. */ - buf->st_mtime = convert_time (info.ftLastWriteTime); - buf->st_atime = convert_time (info.ftLastAccessTime); - if (buf->st_atime == 0) buf->st_atime = buf->st_mtime; - buf->st_ctime = convert_time (info.ftCreationTime); - if (buf->st_ctime == 0) buf->st_ctime = buf->st_mtime; + buf->st_mtime = convert_time (info.ftLastWriteTime, &buf->st_mtimensec); + buf->st_atime = convert_time (info.ftLastAccessTime, &buf->st_atimensec); + if (buf->st_atime == 0) + { + buf->st_atime = buf->st_mtime; + buf->st_atimensec = buf->st_mtimensec; + } + buf->st_ctime = convert_time (info.ftCreationTime, &buf->st_ctimensec); + if (buf->st_ctime == 0) + { + buf->st_ctime = buf->st_mtime; + buf->st_ctimensec = buf->st_mtimensec; + } /* determine rwx permissions */ if (info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) diff --git a/nt/inc/sys/stat.h b/nt/inc/sys/stat.h index 3aa70f3052e..c93923fd9e8 100644 --- a/nt/inc/sys/stat.h +++ b/nt/inc/sys/stat.h @@ -108,6 +108,9 @@ struct stat { time_t st_ctime; char st_uname[260]; char st_gname[260]; + int st_atimensec; + int st_mtimensec; + int st_ctimensec; }; /* These are here to avoid compiler warnings when using wchar.h. */ diff --git a/src/w32.c b/src/w32.c index d7bf173ce25..c504c141b31 100644 --- a/src/w32.c +++ b/src/w32.c @@ -5076,9 +5076,10 @@ initialize_utc_base (void) } static time_t -convert_time (FILETIME ft) +convert_time (FILETIME ft, int *time_nsec) { ULONGLONG tmp; + time_t time_sec; if (!init) { @@ -5090,7 +5091,10 @@ convert_time (FILETIME ft) return 0; FILETIME_TO_U64 (tmp, ft); - return (time_t) ((tmp - utc_base) / 10000000L); + tmp -= utc_base; + time_sec = (time_t) (tmp / 10000000L); + *time_nsec = (tmp - (ULONGLONG) time_sec * 10000000L) * 100L; + return time_sec; } static void @@ -5707,11 +5711,19 @@ stat_worker (const char * path, struct stat * buf, int follow_symlinks) buf->st_nlink = nlinks; /* Convert timestamps to Unix format. */ - buf->st_mtime = convert_time (wtime); - buf->st_atime = convert_time (atime); - if (buf->st_atime == 0) buf->st_atime = buf->st_mtime; - buf->st_ctime = convert_time (ctime); - if (buf->st_ctime == 0) buf->st_ctime = buf->st_mtime; + buf->st_mtime = convert_time (wtime, &buf->st_mtimensec); + buf->st_atime = convert_time (atime, &buf->st_atimensec); + if (buf->st_atime == 0) + { + buf->st_atime = buf->st_mtime; + buf->st_atimensec = buf->st_mtimensec; + } + buf->st_ctime = convert_time (ctime, &buf->st_ctimensec); + if (buf->st_ctime == 0) + { + buf->st_ctime = buf->st_mtime; + buf->st_ctimensec = buf->st_mtimensec; + } /* determine rwx permissions */ if (is_a_symlink && !follow_symlinks) @@ -5853,11 +5865,19 @@ fstat (int desc, struct stat * buf) buf->st_size += info.nFileSizeLow; /* Convert timestamps to Unix format. */ - buf->st_mtime = convert_time (info.ftLastWriteTime); - buf->st_atime = convert_time (info.ftLastAccessTime); - if (buf->st_atime == 0) buf->st_atime = buf->st_mtime; - buf->st_ctime = convert_time (info.ftCreationTime); - if (buf->st_ctime == 0) buf->st_ctime = buf->st_mtime; + buf->st_mtime = convert_time (info.ftLastWriteTime, &buf->st_mtimensec); + buf->st_atime = convert_time (info.ftLastAccessTime, &buf->st_atimensec); + if (buf->st_atime == 0) + { + buf->st_atime = buf->st_mtime; + buf->st_atimensec = buf->st_mtimensec; + } + buf->st_ctime = convert_time (info.ftCreationTime, &buf->st_ctimensec); + if (buf->st_ctime == 0) + { + buf->st_ctime = buf->st_mtime; + buf->st_ctimensec = buf->st_mtimensec; + } /* determine rwx permissions */ if (info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) commit 9df2074a06fefa0b5bfe9714b45c383fa45d6650 Author: João Távora Date: Sun May 11 11:14:02 2025 +0100 Tweak .clangd to work with gcc-compiled Emacs (bug#78367) A Gcc configuration of Emacs emits -fstrict-flex-arrays but clangd doesn't understand that. This causes spurious errors of "unknown flag" that prevent analysis. So tweak .clangd to the nearest clang equivalent (which is very similar). * .clangd (CompileFlags): Remove -fstrict-flex-arrays, add -fstrict-flex-arrays=3. diff --git a/.clangd b/.clangd index 469d33dfd03..5c7308d64ae 100644 --- a/.clangd +++ b/.clangd @@ -2,4 +2,5 @@ If: PathMatch: "src/*.c" CompileFlags: - Add: [-Wno-unused-macros, -include=config.h] + Add: [-Wno-unused-macros, -include=config.h, -fstrict-flex-arrays=3] + Remove: [-fstrict-flex-arrays] commit c69c18b732c2b1cd772dc7e15c0ea3074a3492bc Author: João Távora Date: Sun May 11 11:09:06 2025 +0100 Eglot: fix call hierarchy navigation again (bug#78367, bug#78250) * lisp/progmodes/eglot.el (eglot--hierarchy-label): Fix again. diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index 04d3f74a6cb..eae8e1b9189 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -4617,13 +4617,22 @@ If NOERROR, return predicate, else erroring function." 'keymap eglot-hierarchy-label-map 'action (lambda (_btn) - (pop-to-buffer (find-file-noselect (eglot-uri-to-path (or parent-uri uri)))) - (eglot--goto - (or - (elt - (get-text-property 0 'eglot--hierarchy-call-sites name) - 0) - item-range)))) + (let* ((method + (get-text-property 0 'eglot--hierarchy-method name)) + (target-uri + (if (eq method :callHierarchy/outgoingCalls) + ;; We probably want `parent-uri' for this edge case + ;; because that's where the call site we want + ;; lives. (bug#78250, bug#78367). + (or parent-uri uri) + uri))) + (pop-to-buffer (find-file-noselect (eglot-uri-to-path target-uri))) + (eglot--goto + (or + (elt + (get-text-property 0 'eglot--hierarchy-call-sites name) + 0) + item-range))))) (buffer-string)))) (defun eglot--hierarchy-1 (name provider preparer specs) commit 5b73625714ff6357170d83bff8fafa8d4c6a47c4 Author: Sean Whitton Date: Sun May 11 11:12:53 2025 +0100 diff-mode-map: Unhide some additional M- * lisp/vc/diff-mode.el (diff-mode-map): Don't inherit M-?, M-SPC, M-DEL and M-S-SPC bindings through from special-mode-map. diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el index e64a2b0b57e..18f467eee74 100644 --- a/lisp/vc/diff-mode.el +++ b/lisp/vc/diff-mode.el @@ -207,7 +207,8 @@ The default \"-b\" means to ignore whitespace-only changes, ;; We want to inherit most bindings from ;; `diff-mode-shared-map', but not all since they may hide ;; useful `M-' global bindings when editing. - (dolist (key '("A" "r" "R" "g" "q" "W" "w" "z")) + (dolist (key '("A" "r" "R" "g" "q" "W" "w" "z" "?" + "SPC" "S-SPC" "DEL")) (keymap-set map key nil)) map) ;; From compilation-minor-mode. commit dfafe1830f06634ec779fd62f7081d4cc4f6d3e7 Author: Stefan Monnier Date: Sun May 11 01:30:01 2025 -0400 lisp/emacs-lisp/cl-macs.el (cl--define-derived-type): Fix partial bootstrap diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index 084ac56c5f8..d086afc49e4 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -3817,38 +3817,40 @@ If PARENTS is non-nil, ARGLIST must be nil." ;; loaded before `cl-preloaded.el' is defined. (put 'list 'cl-deftype-satisfies #'listp) -(static-if (not (fboundp 'cl--define-derived-type)) - nil ;; Can't define them yet! - (cl-deftype natnum () (declare (parents integer)) '(satisfies natnump)) - (cl-deftype character () (declare (parents fixnum natnum)) - '(and fixnum natnum)) - (cl-deftype base-char () (declare (parents character)) - '(satisfies characterp)) - (cl-deftype extended-char () (declare (parents character)) - '(and character (not base-char))) - (cl-deftype keyword () (declare (parents symbol)) '(satisfies keywordp)) - (cl-deftype command () - ;; FIXME: Can't use `function' as parent because of arrays as - ;; keyboard macros, which are redundant since `kmacro.el'!! - ;;(declare (parents function)) - '(satisfies commandp)) - - (eval-when-compile - (defmacro cl--defnumtype (type base) - `(cl-deftype ,type (&optional min max) - (list 'and ',base - (if (memq min '(* nil)) t - (if (consp min) - `(satisfies . ,(lambda (val) (> val (car min)))) - `(satisfies . ,(lambda (val) (>= val min))))) - (if (memq max '(* nil)) t - (if (consp max) - `(satisfies . ,(lambda (val) (< val (car max)))) - `(satisfies . ,(lambda (val) (<= val max))))))))) - ;;(cl--defnumtype integer ??) - ;;(cl--defnumtype float ??) - ;;(cl--defnumtype number ??) - (cl--defnumtype real number)) +;; Thanks to `eval-and-compile', `cl--define-derived-type' is needed +;; both at compile-time and at runtime, so we need to double-check. +(static-if (not (fboundp 'cl--define-derived-type)) nil + (unless (fboundp 'cl--define-derived-type) + (cl-deftype natnum () (declare (parents integer)) '(satisfies natnump)) + (cl-deftype character () (declare (parents fixnum natnum)) + '(and fixnum natnum)) + (cl-deftype base-char () (declare (parents character)) + '(satisfies characterp)) + (cl-deftype extended-char () (declare (parents character)) + '(and character (not base-char))) + (cl-deftype keyword () (declare (parents symbol)) '(satisfies keywordp)) + (cl-deftype command () + ;; FIXME: Can't use `function' as parent because of arrays as + ;; keyboard macros, which are redundant since `kmacro.el'!! + ;;(declare (parents function)) + '(satisfies commandp)) + + (eval-when-compile + (defmacro cl--defnumtype (type base) + `(cl-deftype ,type (&optional min max) + (list 'and ',base + (if (memq min '(* nil)) t + (if (consp min) + `(satisfies . ,(lambda (val) (> val (car min)))) + `(satisfies . ,(lambda (val) (>= val min))))) + (if (memq max '(* nil)) t + (if (consp max) + `(satisfies . ,(lambda (val) (< val (car max)))) + `(satisfies . ,(lambda (val) (<= val max))))))))) + ;;(cl--defnumtype integer ??) + ;;(cl--defnumtype float ??) + ;;(cl--defnumtype number ??) + (cl--defnumtype real number))) ;; Additional functions that we can now define because we've defined ;; `cl-defsubst' and `cl-typep'. commit 2d5f2434706a17055325432d6eb2b711ac785220 Author: Eli Zaretskii Date: Sat May 10 22:23:27 2025 +0300 ; * lisp/emacs-lisp/comp.el (native-compile-prune-cache): Doc fix. diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el index e2abd6dbc5b..2bc8b996622 100644 --- a/lisp/emacs-lisp/comp.el +++ b/lisp/emacs-lisp/comp.el @@ -3656,12 +3656,22 @@ variable \"NATIVE_DISABLED\" is set, only byte compile." (setq command-line-args-left (cdr command-line-args-left))))) (defun native-compile-prune-cache () - "Remove .eln files that aren't applicable to the current Emacs invocation." + "Remove *.eln files that aren't usable by the current Emacs build. + +This command removes all the *.eln files in `native-comp-eln-load-path' +which are incompatible with the Emacs session in which you invoke this +command. This includes the *.eln files compiled by all the Emacs +sessions where `comp-native-version-dir' had a value different from the +current session. + +Note that this command does not prune the *.eln files in the last +directory in `native-comp-eln-load-path', which holds *.eln files +compiled during the Emacs build process." (interactive) (unless (featurep 'native-compile) (user-error "This Emacs isn't built with native-compile support")) - ;; The last item in native-comp-eln-load-path is assumed to be a system - ;; directory, so don't try to delete anything there (bug#59658). + ;; The last directory in 'native-comp-eln-load-path' is assumed to be a + ;; system directory, so don't try to delete anything there (bug#59658). (dolist (dir (butlast native-comp-eln-load-path)) ;; If a directory is non absolute it is assumed to be relative to ;; `invocation-directory'. commit 66990628b8f91554e05aa2bee9a657149ac0037c Author: Stefan Monnier Date: Sat May 10 12:05:17 2025 -0400 lisp/net/browse-url.el (browse-url-interactive-arg): Fix bug#78026 Don't burp when run from a timer where (this-command-keys) will usually return an empty vector. diff --git a/lisp/net/browse-url.el b/lisp/net/browse-url.el index 3b2d3983002..96b4baaa615 100644 --- a/lisp/net/browse-url.el +++ b/lisp/net/browse-url.el @@ -713,8 +713,7 @@ This function returns a list (URL NEW-WINDOW-FLAG) for use in `interactive'. NEW-WINDOW-FLAG is the prefix arg; if `browse-url-new-window-flag' is non-nil, invert the prefix arg instead." - (let ((event (elt (this-command-keys) 0))) - (mouse-set-point event)) + (mouse-set-point last-nonmenu-event) (list (read-string prompt (or (and transient-mark-mode mark-active ;; rfc2396 Appendix E. (replace-regexp-in-string commit bb735331650a9b5ac3c28ed8e1d9459059bd1195 Author: Stephen Berman Date: Sat May 10 16:25:05 2025 +0200 Improve Electric Pair mode documentation (bug#78021) * doc/emacs/programs.texi (Matching): Clarify and improve documentation of Electric Pair mode. * lisp/elec-pair.el: Improve description in header line. Add text and a reference to the Emacs user manual in the Commentary section. (electric-pair-skip-self, electric-pair-inhibit-predicate) (electric-pair-preserve-balance) (electric-pair-delete-adjacent-pairs) (electric-pair-open-newline-between-pairs) (electric-pair-skip-whitespace) (electric-pair-skip-whitespace-function) (electric-pair-analyze-conversion) (electric-pair--skip-whitespace) (electric-pair-text-syntax-table, electric-pair--with-syntax) (electric-pair-syntax-info, electric-pair--insert) (electric-pair--syntax-ppss, electric-pair--balance-info) (electric-pair-inhibit-if-helps-balance) (electric-pair-skip-if-helps-balance) (electric-pair-open-newline-between-pairs-psif) (electric-pair-mode): Clarify and improve doc strings and some comments. (electric-pair-post-self-insert-function): Restructure doc string to shorten overlong first line, and reformat overlong lines of code. diff --git a/doc/emacs/programs.texi b/doc/emacs/programs.texi index 820a772104e..e783ca3e715 100644 --- a/doc/emacs/programs.texi +++ b/doc/emacs/programs.texi @@ -1063,52 +1063,95 @@ nonblank line. @cindex Electric Pair mode @cindex inserting matching parentheses @findex electric-pair-mode - Electric Pair mode, a global minor mode, provides a way to easily -insert matching delimiters: parentheses, braces, brackets, etc. -Whenever you insert an opening delimiter, the matching closing delimiter -is automatically inserted as well, leaving point between the two. -However, if you insert a closing delimiter where one already exists -(probably a mistake, since typing the opening delimiter inserted the -closing one for you), Emacs simply moves point to after the closing -delimiter, skipping the insertion. If the region is active -(@pxref{Mark}), insertion of a delimiter operates on the region: the -characters in the region are enclosed in a pair of matching delimiters, -leaving point after the delimiter you typed. If you provide a prefix -argument when inserting a delimiter, the numeric value of that prefix -argument specifies the number of pairs to insert. - -These variables control additional features of Electric Pair mode: + Electric Pair mode is a minor mode that provides a way to easily +insert pairs of matching delimiters: parentheses, braces, brackets, +quotes, etc.@: (what counts as matching delimiters depends on the major +mode). To toggle Electric Pair mode globally, type @w{@kbd{M-x +electric-pair-mode}}. To toggle it only in the current buffer, type +@w{@kbd{M-x electric-pair-local-mode}}. + + When this mode is enabled, typing an opening delimiter inserts both +that character and, immediately following it, the matching closing +delimiter, leaving point between the two. This makes it unnecessary to +type a matching closing delimiter in most cases. If you type one +nonetheless, Emacs simply inserts that character, unless point is +immediately before a closing delimiter of the same type; in that case, +point moves to immediately after the closing delimiter and no additional +closing delimiter is inserted. Thus, typing the sequence , is a perhaps more convenient +alternative to the sequence , @kbd{C-f}. + + With an active region (@pxref{Mark}), Electric Pair mode operates +differently: inserting either an opening or a closing delimiter encloses +the characters in the region within the resulting pair of matching +delimiters, leaving point after the delimiter you typed (this +facilitates continuing to type either before the text following the +opening delimiter or after the closing delimiter). + + There are several user options for modifying the behavior of Electric +Pair mode: @itemize @bullet @item @vindex electric-pair-preserve-balance -@code{electric-pair-preserve-balance}, when non-@code{nil}, makes the -default pairing logic balance out the number of opening and closing -delimiters. +@code{electric-pair-preserve-balance}, when non-@code{nil} (the +default), makes typing a delimiter preserve the balance between opening +and closing delimiters. Thus, if you type an opening delimiter and +there is an unpaired matching closing delimiter later in the buffer, +then only the opening delimiter gets inserted (and not a matching +closing delimiter immediately following it); likewise, if there is an +unpaired opening delimiter, then typing a matching closing delimiter +later in the buffer inserts this character even when the following +character is another matching closing delimiter. + + When set to @code{nil}, typing an opening delimiter inserts only this +character, but only when point is either immediately before or +immediately after a matching opening delimiter, or immediately before a +letter or digit; in all other positions inserting an opening delimiter +automatically inserts a matching closing delimiter immediately following +it, even if there is an unpaired matching closing delimiter later in the +buffer. And typing a closing delimiter immediately before another +closing delimiter of the same type does not insert that character but +moves point as described above, even when there is an unpaired matching +opening delimiter earlier in the buffer. + + If there is an active region, this variable has no effect. @item @vindex electric-pair-delete-adjacent-pairs -@code{electric-pair-delete-adjacent-pairs}, when non-@code{nil}, makes -backspacing between two adjacent delimiters also automatically delete -the closing delimiter. +@code{electric-pair-delete-adjacent-pairs}, when non-@code{nil} (the +default), makes deleting an opening delimiter by typing the @key{DEL} +key (which is normally the @key{BACKSPACE} key; @pxref{DEL Does Not +Delete}) automatically also delete an immediately following matching +closing delimiter (but not if there are any characters---including just +whitespace---between the paired delimiters). When set to @code{nil}, +typing @key{BACKSPACE} deletes only the opening delimiter. (Typing +@key{BACKSPACE} to delete a closing delimiter always deletes only this +character.) @item @vindex electric-pair-open-newline-between-pairs -@code{electric-pair-open-newline-between-pairs}, when non-@code{nil}, -makes inserting a newline between two adjacent pairs also -automatically open an extra newline after point. +When @code{electric-pair-open-newline-between-pairs} is non-@code{nil} +(the default) and point is between an opening delimiter and an +immediately following matching closing delimiter, then typing a newline +automatically inserts an extra newline after point (possibly indenting +the empty line point is on, depending on the major mode). When set to +@code{nil}, typing a newline inserts only one newline before point, as +usual. @item @vindex electric-pair-skip-whitespace -@code{electric-pair-skip-whitespace}, when non-@code{nil}, causes the minor -mode to skip whitespace forward before deciding whether to skip over -the closing delimiter. +When @code{electric-pair-skip-whitespace} has its default non-@code{nil} +value and point is separated from a closing delimiter only by +whitespace, then typing a closing delimiter of the same type does not +insert that character but instead moves point to immediately after the +already present closing delimiter. You can also set this option to +additionally delete any whitespace that point moves over. When set to +@code{nil}, typing a closing delimiter simply inserts that character +(even when this makes the following closing delimiter of the same type +unbalanced). @end itemize -To toggle Electric Pair mode, type @kbd{M-x electric-pair-mode}. To -toggle the mode in a single buffer, use @kbd{M-x -electric-pair-local-mode}. - @node Comments @section Manipulating Comments @cindex comments diff --git a/lisp/elec-pair.el b/lisp/elec-pair.el index 155cd3b7782..17761c23766 100644 --- a/lisp/elec-pair.el +++ b/lisp/elec-pair.el @@ -1,4 +1,4 @@ -;;; elec-pair.el --- Automatic parenthesis pairing -*- lexical-binding:t -*- +;;; elec-pair.el --- Automatically insert matching delimiters -*- lexical-binding:t -*- ;; Copyright (C) 2013-2025 Free Software Foundation, Inc. @@ -21,6 +21,11 @@ ;;; Commentary: +;; This library provides a way to easily insert pairs of matching +;; delimiters (parentheses, braces, brackets, quotes, etc.) and +;; optionally preserve or override the balance of delimiters. It is +;; documented in the Emacs user manual node "(emacs) Matching". + ;;; Code: (require 'electric) @@ -59,15 +64,16 @@ defined in `electric-pair-text-syntax-table'." (defcustom electric-pair-skip-self #'electric-pair-default-skip-self "If non-nil, skip char instead of inserting a second closing paren. -When inserting a closing paren character right before the same character, -just skip that character instead, so that hitting ( followed by ) results -in \"()\" rather than \"())\". +When inserting a closing delimiter right before the same character, just +skip that character instead, so that, for example, consecutively +typing `(' and `)' results in \"()\" rather than \"())\". -This can be convenient for people who find it easier to hit ) than \\[forward-char]. +This can be convenient for people who find it easier to type `)' than +\\[forward-char]. -Can also be a function of one argument (the closer char just -inserted), in which case that function's return value is -considered instead." +Can also be a function of one argument (the closing delimiter just +inserted), in which case that function's return value is considered +instead." :version "24.1" :group 'electricity :type '(choice @@ -80,9 +86,9 @@ considered instead." #'electric-pair-default-inhibit "Predicate to prevent insertion of a matching pair. -The function is called with a single char (the opening char just inserted). -If it returns non-nil, then `electric-pair-mode' will not insert a matching -closer." +The function is called with a single char (the opening delimiter just +inserted). If it returns non-nil, then `electric-pair-mode' will not +insert a matching closing delimiter." :version "24.4" :group 'electricity :type '(choice @@ -92,22 +98,32 @@ closer." function)) (defcustom electric-pair-preserve-balance t - "Non-nil if default pairing and skipping should help balance parentheses. - -The default values of `electric-pair-inhibit-predicate' and -`electric-pair-skip-self' check this variable before delegating to other -predicates responsible for making decisions on whether to pair/skip some -characters based on the actual state of the buffer's parentheses and -quotes." + "Whether to keep matching delimiters balanced. +When non-nil, typing a delimiter inserts only this character if there is +a unpaired matching delimiter later (if the latter is a closing +delimiter) or earlier (if the latter is a opening delimiter) in the +buffer. When nil, inserting a delimiter disregards unpaired matching +delimiters. + +Whether this variable takes effect depends on the variables +`electric-pair-inhibit-predicate' and `electric-pair-skip-self', which +check the value of this variable before delegating to other predicates +responsible for making decisions on whether to pair/skip some characters +based on the actual state of the buffer's delimiters. In addition, this +variable has no effect if there is an active region." :version "24.4" :group 'electricity :type 'boolean) (defcustom electric-pair-delete-adjacent-pairs t - "If non-nil, backspacing an open paren also deletes adjacent closer. - -Can also be a function of no arguments, in which case that function's -return value is considered instead." + "Whether to automatically delete a matching delimiter. +If non-nil, then when an opening delimiter immediately precedes a +matching closing delimiter and point is between them, typing DEL (the +backspace key) deletes both delimiters. If nil, only the opening +delimiter is deleted. + +The value of this variable can also be a function of no arguments, in +which case that function's return value is considered instead." :version "24.4" :group 'electricity :type '(choice @@ -116,10 +132,14 @@ return value is considered instead." function)) (defcustom electric-pair-open-newline-between-pairs t - "If non-nil, a newline between adjacent parentheses opens an extra one. - -Can also be a function of no arguments, in which case that function's -return value is considered instead." + "Whether to insert an extra newline between matching delimiters. +If non-nil, then when an opening delimiter immediately precedes a +matching closing delimiter and point is between them, typing a newline +automatically inserts an extra newline after point. If nil, just one +newline is inserted before point. + +The value of this variable can also be a function of no arguments, in +which case that function's return value is considered instead." :version "24.4" :group 'electricity :type '(choice @@ -128,16 +148,19 @@ return value is considered instead." function)) (defcustom electric-pair-skip-whitespace t - "If non-nil skip whitespace when skipping over closing parens. + "Whether typing a closing delimiter moves point over whitespace. +If non-nil and point is separated from a closing delimiter only by +whitespace, then typing a closing delimiter of the same type does not +insert that character but instead moves point to immediately after the +already present closing delimiter. If the value of this variable is set +tothe symbol `chomp', then the whitespace moved over is deleted. If the +value is nil, typing a closing delimiter simply inserts it at point. The specific kind of whitespace skipped is given by the variable `electric-pair-skip-whitespace-chars'. -The symbol `chomp' specifies that the skipped-over whitespace -should be deleted. - -Can also be a function of no arguments, in which case that function's -return value is considered instead." +The value of this variable can also be a function of no arguments, in +which case that function's return value is considered instead." :version "24.4" :group 'electricity :type '(choice @@ -157,16 +180,16 @@ return value is considered instead." (defvar-local electric-pair-skip-whitespace-function #'electric-pair--skip-whitespace - "Function to use to skip whitespace forward. + "Function to use to move point forward over whitespace. Before attempting a skip, if `electric-pair-skip-whitespace' is -non-nil, this function is called. It move point to a new buffer +non-nil, this function is called. It moves point to a new buffer position, presumably skipping only whitespace in between.") (defun electric-pair-analyze-conversion (string) - "Notice that STRING has been deleted by an input method. + "Delete delimiters enclosing the STRING deleted by an input method. If the last character of STRING is an electric pair character, and the character after point is too, then delete that other -character." +character. Called by `analyze-text-conversion'." (let* ((prev (aref string (1- (length string)))) (next (char-after)) (syntax-info (electric-pair-syntax-info prev)) @@ -177,7 +200,8 @@ character." (delete-char 1)))) (defun electric-pair--skip-whitespace () - "Skip whitespace forward, not crossing comment or string boundaries." + "Move point forward over whitespace. +But do not move point if doing so crosses comment or string boundaries." (let ((saved (point)) (string-or-comment (nth 8 (syntax-ppss)))) (skip-chars-forward (apply #'string electric-pair-skip-whitespace-chars)) @@ -187,9 +211,9 @@ character." (defvar electric-pair-text-syntax-table prog-mode-syntax-table "Syntax table used when pairing inside comments and strings. -`electric-pair-mode' considers this syntax table only when point in inside -quotes or comments. If lookup fails here, `electric-pair-text-pairs' will -be considered.") +`electric-pair-mode' considers this syntax table only when point is +within text marked as a comment or enclosed within quotes. If lookup +fails here, `electric-pair-text-pairs' will be considered.") (defun electric-pair-conservative-inhibit (char) (or @@ -206,7 +230,7 @@ be considered.") "Run BODY with appropriate syntax table active. STRING-OR-COMMENT is the start position of the string/comment in which we are, if applicable. -Uses the text-mode syntax table if within a string or a comment." +Uses the `text-mode' syntax table if within a string or a comment." (declare (debug t) (indent 1)) `(electric-pair--with-syntax-1 ,string-or-comment (lambda () ,@body))) @@ -229,11 +253,11 @@ Uses the text-mode syntax table if within a string or a comment." (defun electric-pair-syntax-info (command-event) "Calculate a list (SYNTAX PAIR UNCONDITIONAL STRING-OR-COMMENT-START). -SYNTAX is COMMAND-EVENT's syntax character. PAIR is -COMMAND-EVENT's pair. UNCONDITIONAL indicates the variables -`electric-pair-pairs' or `electric-pair-text-pairs' were used to -lookup syntax. STRING-OR-COMMENT-START indicates that point is -inside a comment or string." +SYNTAX is COMMAND-EVENT's syntax character. PAIR is COMMAND-EVENT's +pair. UNCONDITIONAL indicates that the variables `electric-pair-pairs' +or `electric-pair-text-pairs' were used to look up syntax. +STRING-OR-COMMENT-START indicates that point is inside a comment or +string." (let* ((pre-string-or-comment (or (bobp) (nth 8 (save-excursion (syntax-ppss (1- (point))))))) @@ -264,20 +288,20 @@ inside a comment or string." (let ((last-command-event char) (blink-matching-paren nil) (electric-pair-mode nil) - ;; When adding the "closer" delimiter, a job his function is + ;; When adding a closing delimiter, a job this function is ;; frequently used for, we don't want to munch any extra ;; newlines above us. That would be the default behavior of - ;; `electric-layout-mode', which potentially kicked in before - ;; us to add these newlines, and is probably about to kick in - ;; again after we add the closer. + ;; `electric-layout-mode', which potentially kicked in before us + ;; to add these newlines, and is probably about to kick in again + ;; after we add the closer. (electric-layout-allow-duplicate-newlines t)) (self-insert-command 1))) (defun electric-pair--syntax-ppss (&optional pos where) - "Like `syntax-ppss', but sometimes fallback to `parse-partial-sexp'. + "Like `syntax-ppss', but maybe fall back to `parse-partial-sexp'. WHERE is a list defaulting to \\='(string comment) and indicates -when to fallback to `parse-partial-sexp'." +when to fall back to `parse-partial-sexp'." (let* ((pos (or pos (point))) (where (or where '(string comment))) (quick-ppss (syntax-ppss pos)) @@ -298,12 +322,12 @@ when to fallback to `parse-partial-sexp'." (parse-partial-sexp (point-min) pos) quick-ppss)))) -;; Balancing means controlling pairing and skipping of parentheses +;; Balancing means controlling pairing and skipping of delimiters ;; so that, if possible, the buffer ends up at least as balanced as ;; before, if not more. The algorithm is slightly complex because ;; some situations like "()))" need pairing to occur at the end but ;; not at the beginning. Balancing should also happen independently -;; for different types of parentheses, so that having your {}'s +;; for different types of delimiter, so that having your {}'s ;; unbalanced doesn't keep `electric-pair-mode' from balancing your ;; ()'s and your []'s. (defun electric-pair--balance-info (direction string-or-comment) @@ -322,7 +346,7 @@ If point is not enclosed by any lists, return ((t) . (t))." (let* (innermost outermost (at-top-level-or-equivalent-fn - ;; called when `scan-sexps' ran perfectly, when it found + ;; Called when `scan-sexps' ran perfectly, when it found ;; a parenthesis pointing in the direction of travel. ;; Also when travel started inside a comment and exited it. (lambda () @@ -330,7 +354,7 @@ If point is not enclosed by any lists, return ((t) . (t))." (unless innermost (setq innermost (list t))))) (ended-prematurely-fn - ;; called when `scan-sexps' crashed against a parenthesis + ;; Called when `scan-sexps' crashed against a parenthesis ;; pointing opposite the direction of travel. After ;; traversing that character, the idea is to travel one sexp ;; in the opposite direction looking for a matching @@ -381,7 +405,7 @@ If point is not enclosed by any lists, return ((t) . (t))." (funcall at-top-level-or-equivalent-fn)) (scan-error (cond ((or - ;; some error happened and it is not of the "ended + ;; Some error happened and it is not of the "ended ;; prematurely" kind... (not (string-match "ends prematurely" (nth 1 err))) ;; ... or we were in a comment and just came out of @@ -390,7 +414,7 @@ If point is not enclosed by any lists, return ((t) . (t))." (not (nth 8 (syntax-ppss))))) (funcall at-top-level-or-equivalent-fn)) (t - ;; exit the sexp + ;; Exit the sexp. (goto-char (nth 3 err)) (funcall ended-prematurely-fn))))))) (cons innermost outermost))) @@ -440,7 +464,7 @@ strings." (unwind-protect (progn ,@body) (goto-char ,point))))) (defun electric-pair-inhibit-if-helps-balance (char) - "Return non-nil if auto-pairing of CHAR would hurt parentheses' balance. + "Return non-nil if auto-pairing of CHAR unbalances delimiters. Works by first removing the character from the buffer, then doing some list calculations, finally restoring the situation as if nothing @@ -470,7 +494,7 @@ happened." (electric-pair--unbalanced-strings-p char))))))))) (defun electric-pair-skip-if-helps-balance (char) - "Return non-nil if skipping CHAR would benefit parentheses' balance. + "Return non-nil if skipping CHAR preserves balance of delimiters. Works by first removing the character from the buffer, then doing some list calculations, finally restoring the situation as if nothing happened." @@ -505,7 +529,10 @@ happened." (electric-pair-conservative-inhibit char))) (defun electric-pair-post-self-insert-function () - "Member of `post-self-insert-hook'. Do main work for `electric-pair-mode'. + "Do main work for `electric-pair-mode'. +This function is added to `post-self-insert-hook' when +`electric-pair-mode' is enabled. + If the newly inserted character C has delimiter syntax, this function may decide to insert additional paired delimiters, or skip the insertion of the new character altogether by jumping @@ -561,14 +588,18 @@ The decision is taken by order of preference: (if (functionp electric-pair-skip-self) (electric-pair--save-literal-point-excursion (goto-char pos) - (funcall electric-pair-skip-self last-command-event)) + (funcall electric-pair-skip-self + last-command-event)) electric-pair-skip-self)) (save-excursion - (when (and (not (and unconditional - (eq syntax ?\"))) - (setq skip-whitespace-info - (if (and (not (eq electric-pair-skip-whitespace 'chomp)) - (functionp electric-pair-skip-whitespace)) + (when (and + (not (and unconditional (eq syntax ?\"))) + (setq skip-whitespace-info + (if (and + (not + (eq electric-pair-skip-whitespace + 'chomp)) + (functionp electric-pair-skip-whitespace)) (funcall electric-pair-skip-whitespace) electric-pair-skip-whitespace))) (funcall electric-pair-skip-whitespace-function)) @@ -596,7 +627,8 @@ The decision is taken by order of preference: (defun electric-pair-open-newline-between-pairs-psif () "Honor `electric-pair-open-newline-between-pairs'. -Member of `post-self-insert-hook' if `electric-pair-mode' is on." +This function is added to `post-self-insert-hook' when +`electric-pair-mode' is enabled." (when (and (if (functionp electric-pair-open-newline-between-pairs) (funcall electric-pair-open-newline-between-pairs) electric-pair-open-newline-between-pairs) @@ -646,15 +678,15 @@ ARG and KILLP are passed directly to ;;;###autoload (define-minor-mode electric-pair-mode - "Toggle automatic parens pairing (Electric Pair mode). + "Toggle automatic pairing of delimiters (Electric Pair mode). -Electric Pair mode is a global minor mode. When enabled, typing -an open parenthesis automatically inserts the corresponding -closing parenthesis, and vice versa. (Likewise for brackets, etc.). -If the region is active, the parentheses (brackets, etc.) are -inserted around the region instead. +Electric Pair mode is a global minor mode. When enabled, typing an +opening delimiter (parenthesis, bracket, etc.) automatically inserts the +corresponding closing delimiter. If the region is active, the +delimiters are inserted around the region instead. -To toggle the mode in a single buffer, use `electric-pair-local-mode'." +To toggle the mode only in the current buffer, use +`electric-pair-local-mode'." :global t :group 'electricity (if electric-pair-mode (progn commit 1410bfb7ca5a3497fbbf36a9d31f9a1dce8fd63a Merge: 7265be09ceb 0d493864cee Author: Eli Zaretskii Date: Sat May 10 07:40:30 2025 -0400 Merge from origin/emacs-30 0d493864cee Fix indentation of XML comments 1a2c29b5317 Improve Tramp's make-process handling for Solaris a7dffc2ea38 Document 'time-stamp-time-zone' in Emacs Manual 0b4eb525b69 Make treesit--simple-indent-eval more permissive (bug#78065) ed7b55f6bf1 Adapt Tramp tests b172a1478c1 ; * doc/lispref/tips.texi (Library Headers): Fix wording ... 81629b2b2ba ; * lisp/gnus/mail-source.el (mail-sources): Fix a typo (... commit 7265be09cebc9ee752b688b7a85fb1ac18b45ef5 Author: Jostein Kjønigsen Date: Wed Apr 30 11:33:26 2025 +0200 sh-script.el: Improve consistency in variable-use fontification. sh-mode--treesit-settings: Ensure all variable use is treated the same way. Before this patch the following commands would all be treated differently: echo "${var}" echo "$var" echo ${var} echo $var Now they are treated the same. * lisp/progmodes/sh-script.el (sh-mode--treesit-settings): Tweak rules. (Bug#78167) diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el index 7216975ebfd..5075e9a0afc 100644 --- a/lisp/progmodes/sh-script.el +++ b/lisp/progmodes/sh-script.el @@ -3369,7 +3369,11 @@ See `sh-mode--treesit-other-keywords' and :language 'bash :override t '((command_substitution) @sh-quoted-exec - (string (expansion (variable_name) @font-lock-variable-use-face))) + (expansion (variable_name) @font-lock-variable-use-face) + (expansion ["${" "}"] @font-lock-bracket-face) + (simple_expansion + "$" @font-lock-bracket-face + (variable_name) @font-lock-variable-use-face)) :feature 'heredoc :language 'bash commit 0d493864cee2ea1d7661d51b973db58667b6b65b Author: Eli Zaretskii Date: Sat May 10 13:11:22 2025 +0300 Fix indentation of XML comments * lisp/nxml/nxml-mode.el (nxml-compute-indent-in-delimited-token): Fix indentation in XML comments with empty lines. Patch by John Ciolfi . (Bug#73206) diff --git a/lisp/nxml/nxml-mode.el b/lisp/nxml/nxml-mode.el index 7acc19b9058..1d2471cc1fa 100644 --- a/lisp/nxml/nxml-mode.el +++ b/lisp/nxml/nxml-mode.el @@ -1522,6 +1522,8 @@ of the line. This expects the xmltok-* variables to be set up as by ((progn (goto-char pos) (forward-line -1) + (while (looking-at "^[[:blank:]]*$") + (forward-line -1)) (<= (point) xmltok-start)) (goto-char (+ xmltok-start (length open-delim))) (when (and (string= open-delim " @end example -@vindex time-stamp-format By default the time stamp is formatted according to your locale setting (@pxref{Environment}) and time zone (@pxref{Time of Day,,, elisp, The Emacs Lisp Reference Manual}). +@vindex time-stamp-time-zone +Set @code{time-stamp-time-zone} to override the time zone used. +@vindex time-stamp-format See the built-in documentation for the variable @code{time-stamp-format} -for specifics and other variables that affect the formatting. +for specifics on formatting and other variables that affect it. @node Time Stamps for One File @subsubsection Forcing Time Stamps for One File commit ceba490da921399393200e704520d313eb1ac5c8 Author: Stefan Monnier Date: Thu May 8 17:11:05 2025 -0400 cl-types: Improve error messages * lisp/emacs-lisp/cl-extra.el (cl--derived-type-generalizers): Check that the type is valid and fully defined. * lisp/emacs-lisp/cl-lib.el (cl-generic-generalizers) : Don't delegate to another method just because the type is invalid. * lisp/emacs-lisp/cl-preloaded.el (cl--define-derived-type): Minor simplification, and improvement to an error message. diff --git a/lisp/emacs-lisp/cl-extra.el b/lisp/emacs-lisp/cl-extra.el index 60e0eb07677..1fe0411062f 100644 --- a/lisp/emacs-lisp/cl-extra.el +++ b/lisp/emacs-lisp/cl-extra.el @@ -1082,6 +1082,15 @@ TYPES is an internal argument." ;;;###autoload (defun cl--derived-type-generalizers (type) + ;; Make sure this derived type can be used without arguments. + (let ((expander (or (get type 'cl-deftype-handler) + (error "Type %S lacks cl-deftype-handler" type)))) + ;; Check that the type can be used without arguments. + (funcall expander) + ;; Check that we have a precomputed predicate since that's what + ;; `cl-types-of' uses. + (unless (get type 'cl-deftype-satisfies) + (error "Type %S lacks cl-deftype-satisfies" type))) ;; Add a new dispatch type to the dispatch list, then ;; synchronize with `cl--derived-type-list' so that both lists follow ;; the same type precedence order. diff --git a/lisp/emacs-lisp/cl-lib.el b/lisp/emacs-lisp/cl-lib.el index b64b9c17e12..f1b3b8fdbcc 100644 --- a/lisp/emacs-lisp/cl-lib.el +++ b/lisp/emacs-lisp/cl-lib.el @@ -568,10 +568,7 @@ If ALIST is non-nil, the new pairs are prepended to it." (declare-function cl--derived-type-generalizers "cl-extra" (type)) (cl-defmethod cl-generic-generalizers :extra "derived-types" (type) "Support for dispatch on derived types, i.e. defined with `cl-deftype'." - (if (and (symbolp type) (cl-derived-type-class-p (cl--find-class type)) - ;; Make sure this derived type can be used without arguments. - (let ((expander (get type 'cl-deftype-handler))) - (and expander (with-demoted-errors "%S" (funcall expander))))) + (if (and (symbolp type) (cl-derived-type-class-p (cl--find-class type))) (cl--derived-type-generalizers type) (cl-call-next-method)))) diff --git a/lisp/emacs-lisp/cl-preloaded.el b/lisp/emacs-lisp/cl-preloaded.el index e4b467ceb24..d6962ba1dee 100644 --- a/lisp/emacs-lisp/cl-preloaded.el +++ b/lisp/emacs-lisp/cl-preloaded.el @@ -505,37 +505,26 @@ PARENTS is a list of types NAME is a subtype of, or nil." ;; "complement" another declaration of the same type, ;; so maybe we should turn this into a warning (and ;; not overwrite the `cl--find-class' in that case)? - (error "Type in another class: %S" (type-of class)))) + (error "Type %S already in another class: %S" name (type-of class)))) ;; Setup a type descriptor for NAME. (setf (cl--find-class name) (cl--derived-type-class-make name (function-documentation expander) parents)) (define-symbol-prop name 'cl-deftype-handler expander) (when predicate - (define-symbol-prop name 'cl-deftype-satisfies predicate)) - ;; Record new type. The constructor of the class - ;; `cl-type-class' already ensures that parent types must be - ;; defined before their "child" types (i.e. already added to - ;; the `cl--derived-type-list' for types defined with `cl-deftype'). - ;; So it is enough to simply push a new type at the beginning - ;; of the list. - ;; Redefinition is more complicated, because child types may - ;; be in the list, so moving the type to the head can be - ;; incorrect. The "cheap" solution is to leave the list - ;; unchanged (and hope the redefinition doesn't change the - ;; hierarchy too much). - ;; Side note: Redefinitions introduce other problems as well - ;; because the class object's `parents` slot contains - ;; references to `cl--class` objects, so after a redefinition - ;; via (setf (cl--find-class FOO) ...), the children's - ;; `parents` slots point to the old class object. That's a - ;; problem that affects all types and that we don't really try - ;; to solve currently. - (or (memq name cl--derived-type-list) - ;; Exclude types that can't be used without arguments. - ;; They'd signal errors in `cl-types-of'! - (not predicate) - (push name cl--derived-type-list)))) + (define-symbol-prop name 'cl-deftype-satisfies predicate) + ;; If the type can be used without arguments, record it for + ;; use by `cl-types-of'. + ;; The order in `cl--derived-type-list' is important, but the + ;; constructor of the class `cl-type-class' already ensures that + ;; parent types must be defined before their "child" types + ;; (i.e. already added to the `cl--derived-type-list' for types + ;; defined with `cl-deftype'). So it is enough to simply push + ;; a new type at the beginning of the list. + ;; Redefinition is a can of worms anyway, so we don't try to be clever + ;; in that case. + (or (memq name cl--derived-type-list) + (push name cl--derived-type-list))))) ;; Make sure functions defined with cl-defsubst can be inlined even in ;; packages which do not require CL. We don't put an autoload cookie commit c522428b33c8a34b7309b6166f35255bc4f2447c Author: Stefan Monnier Date: Thu May 8 10:51:16 2025 -0400 lisp/bs.el (bs--goto-current-buffer): Fix thinko in last commit diff --git a/lisp/bs.el b/lisp/bs.el index ac4da0b5c05..0a799b6d514 100644 --- a/lisp/bs.el +++ b/lisp/bs.el @@ -572,7 +572,7 @@ SORT-DESCRIPTION is an element of `bs-sort-functions'." "Go to line which represents the current buffer. Actually, it goes to the line which begins with the character in `bs-string-current' or `bs-string-current-marked'." - (let ((regexp (concat "\\`" + (let ((regexp (concat "^" (regexp-opt (list bs-string-current bs-string-current-marked)))) point) commit 0469f41ac2e8f78bfbf9500b335fa32195c0482e Author: Manuel Giraud Date: Thu May 1 17:06:07 2025 +0200 Recenter for the calendar (bug#78205) * lisp/calendar/cal-move.el (calendar-recenter-last-op): New variable to track last recenter operation. (calendar-recenter): New command to recenter the calendar. * lisp/calendar/calendar.el (calendar-mode-map): Keybinding for this command. * doc/emacs/calendar.texi (Scroll Calendar): Document this command. * etc/NEWS: Announce this command. diff --git a/doc/emacs/calendar.texi b/doc/emacs/calendar.texi index 55798eae16e..56f297db5d0 100644 --- a/doc/emacs/calendar.texi +++ b/doc/emacs/calendar.texi @@ -258,6 +258,8 @@ Scroll forward by three months (@code{calendar-scroll-left-three-months}). @itemx @key{PageUp} @itemx @key{prior} Scroll backward by three months (@code{calendar-scroll-right-three-months}). +@item C-l +Recenter the date at point. @end table @kindex > @r{(Calendar mode)} @@ -293,6 +295,15 @@ calendar backward by a year. (or @key{prior}) are equivalent to @kbd{C-v} and @kbd{M-v}, just as they are in other modes. +@kindex C-l @r{(Calendar mode)} +@findex calendar-recenter + The command @kbd{C-l} (@code{calendar-recenter}) scrolls the calendar +on display so that the month of the date at point is centered +horizontally. Next invocation of this command puts that month on the +leftmost position, and another invocation puts it on the rightmost +position. Subsequent invocations reuse the same order in a cyclical +manner. + @node Counting Days @section Counting Days diff --git a/etc/NEWS b/etc/NEWS index 7259946b59b..d1b0189da0c 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2040,6 +2040,12 @@ DISABLE-URI non-nil. When starting these debuggers (e.g., 'M-x pdb') while visiting a file, pressing 'M-n' in the command prompt suggests a command line including the file name, using the minibuffer's "future history". +** Calendar + ++++ +*** New command 'calendar-recenter'. +This command recenters the month of the date at point. By default, it +is bound to 'C-l' in the calendar buffer. * New Modes and Packages in Emacs 31.1 diff --git a/lisp/calendar/cal-move.el b/lisp/calendar/cal-move.el index b0a8917209f..aad05f572d6 100644 --- a/lisp/calendar/cal-move.el +++ b/lisp/calendar/cal-move.el @@ -217,6 +217,39 @@ EVENT is an event like `last-nonmenu-event'." last-nonmenu-event)) (calendar-scroll-left (* -3 arg) event)) +(defvar calendar-recenter-last-op nil + "Last calendar recenter operation performed.") + +;;;###cal-autoload +(defun calendar-recenter () + "Scroll the calendar so that the month of the date at point is centered. +Next invocation puts this month on the leftmost position, and another +invocation puts this month on the rightmost position. Subsequent +invocations reuse the same order in a cyclical manner." + (interactive) + (let ((positions '(center first last)) + (cursor-month (calendar-extract-month + (calendar-cursor-to-nearest-date)))) + ;; Update global last position upon repeat. + (setq calendar-recenter-last-op + (if (eq this-command last-command) + (car (or (cdr (memq calendar-recenter-last-op positions)) + positions)) + (car positions))) + ;; Like most functions in calendar, a span of three displayed months + ;; is implied here. + (cond ((eq calendar-recenter-last-op 'center) + (cond ((= cursor-month (1- displayed-month)) + (calendar-scroll-right)) + ((= cursor-month (1+ displayed-month)) + (calendar-scroll-left)))) + ;; Other sub-cases should not happen as we should be centered + ;; from here. + ((eq calendar-recenter-last-op 'first) + (calendar-scroll-left)) + ((eq calendar-recenter-last-op 'last) + (calendar-scroll-right 2))))) + ;;;###cal-autoload (defun calendar-forward-day (arg) "Move the cursor forward ARG days. diff --git a/lisp/calendar/calendar.el b/lisp/calendar/calendar.el index 058982647fe..b0f6a9152d5 100644 --- a/lisp/calendar/calendar.el +++ b/lisp/calendar/calendar.el @@ -1593,6 +1593,7 @@ Otherwise, use the selected window of EVENT's frame." (define-key map "\C-x>" 'calendar-scroll-left) (define-key map [next] 'calendar-scroll-left-three-months) (define-key map "\C-v" 'calendar-scroll-left-three-months) + (define-key map "\C-l" 'calendar-recenter) (define-key map "\C-b" 'calendar-backward-day) (define-key map "\C-p" 'calendar-backward-week) (define-key map "\e{" 'calendar-backward-month) commit c9c6abfa81c58b4a62f4fa5fcaad94b219f5d706 Author: Paul Eggert Date: Wed May 7 23:57:18 2025 -0700 Update from Gnulib by running admin/merge-gnulib The following changes were made by hand, so that admin/merge-gnulib could succeed instead of failing because the diff didn’t match. * admin/gnulib-patches/lib/getloadavg.c.diff: Remove, as it is no longer needed now that recent Gnulib has been merged. * admin/merge-gnulib (GNULIB_TOOL_FLAGS): Remove the --local-dir="$src"admin/gnulib-patches option, as it is no longer needed either. diff --git a/admin/gnulib-patches/lib/getloadavg.c.diff b/admin/gnulib-patches/lib/getloadavg.c.diff deleted file mode 100644 index afa633703b7..00000000000 --- a/admin/gnulib-patches/lib/getloadavg.c.diff +++ /dev/null @@ -1,14 +0,0 @@ -diff --git a/lib/getloadavg.c b/lib/getloadavg.c -index 9da41c16c02..1cb1c01097d 100644 ---- a/lib/getloadavg.c -+++ b/lib/getloadavg.c -@@ -499,7 +499,8 @@ getloadavg (double loadavg[], int nelem) - } - # endif - --# if !defined (LDAV_DONE) && (defined __linux__ || defined __ANDROID__) -+# if !defined (LDAV_DONE) && (defined __linux__ || defined __ANDROID__) \ -+ && (!defined __ANDROID__ || __ANDROID_API__ >= 13) - /* Linux without glibc, Android, Cygwin */ - # define LDAV_DONE - # undef LOAD_AVE_TYPE diff --git a/admin/merge-gnulib b/admin/merge-gnulib index 88f74d6eb7f..54dcf275d55 100755 --- a/admin/merge-gnulib +++ b/admin/merge-gnulib @@ -80,10 +80,6 @@ case $src in *) src=$src/ ;; esac -GNULIB_TOOL_FLAGS="$GNULIB_TOOL_FLAGS - --local-dir="$src"admin/gnulib-patches -" - # Gnulib's source directory. gnulib_srcdir=${1-$src../gnulib} diff --git a/lib/attribute.h b/lib/attribute.h index 625195c8565..ae7bbe8e2cb 100644 --- a/lib/attribute.h +++ b/lib/attribute.h @@ -85,10 +85,10 @@ _GL_ATTRIBUTE_FALLTHROUGH, _GL_ATTRIBUTE_FORMAT, _GL_ATTRIBUTE_LEAF, _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_MAY_ALIAS, _GL_ATTRIBUTE_MAYBE_UNUSED, _GL_ATTRIBUTE_NODISCARD, _GL_ATTRIBUTE_NOINLINE, _GL_ATTRIBUTE_NONNULL, - _GL_ATTRIBUTE_NONSTRING, _GL_ATTRIBUTE_NOTHROW, _GL_ATTRIBUTE_PACKED, - _GL_ATTRIBUTE_PURE, _GL_ATTRIBUTE_REPRODUCIBLE, - _GL_ATTRIBUTE_RETURNS_NONNULL, _GL_ATTRIBUTE_SENTINEL, - _GL_ATTRIBUTE_UNSEQUENCED. */ + _GL_ATTRIBUTE_NONNULL_IF_NONZERO, _GL_ATTRIBUTE_NONSTRING, + _GL_ATTRIBUTE_NOTHROW, _GL_ATTRIBUTE_PACKED, _GL_ATTRIBUTE_PURE, + _GL_ATTRIBUTE_REPRODUCIBLE, _GL_ATTRIBUTE_RETURNS_NONNULL, + _GL_ATTRIBUTE_SENTINEL, _GL_ATTRIBUTE_UNSEQUENCED. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif @@ -170,6 +170,12 @@ /* Applies to: functions. */ #define ATTRIBUTE_NONNULL(args) _GL_ATTRIBUTE_NONNULL (args) +/* ATTRIBUTE_NONNULL_IF_NONZERO (NP, NI) - Argument NP (a pointer) + must not be NULL if the argument NI (an integer) is != 0. */ +/* Applies to: functions. */ +#define ATTRIBUTE_NONNULL_IF_NONZERO(np, ni) _GL_ATTRIBUTE_NONNULL_IF_NONZERO (np, ni) + + /* The function's return value is a non-NULL pointer. */ /* Applies to: functions. */ #define ATTRIBUTE_RETURNS_NONNULL _GL_ATTRIBUTE_RETURNS_NONNULL diff --git a/lib/cdefs.h b/lib/cdefs.h index 53269033d9d..65da09dc096 100644 --- a/lib/cdefs.h +++ b/lib/cdefs.h @@ -482,7 +482,7 @@ run in pedantic mode if the uses are carefully marked using the `__extension__' keyword. But this is not generally available before version 2.8. */ -#if !(__GNUC_PREREQ (2,8) || defined __clang__) +#if ! (__GNUC_PREREQ (2,8) || defined __clang__ || 0x5150 <= __SUNPRO_C) # define __extension__ /* Ignore */ #endif diff --git a/lib/diffseq.h b/lib/diffseq.h index 8a823f98ea0..914bc643bb4 100644 --- a/lib/diffseq.h +++ b/lib/diffseq.h @@ -77,6 +77,11 @@ #include "minmax.h" */ +/* This file uses _GL_GNUC_PREREQ. */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + /* Maximum value of type OFFSET. */ #ifndef OFFSET_MAX # define OFFSET_MAX \ @@ -93,7 +98,7 @@ #endif /* Suppress gcc's "...may be used before initialized" warnings, - generated by GCC versions up to at least GCC 14.2. + generated by GCC versions up to at least GCC 15.1. Likewise for gcc -fanalyzer's "use of uninitialized value" warnings. */ #if _GL_GNUC_PREREQ (4, 7) # pragma GCC diagnostic push diff --git a/lib/getloadavg.c b/lib/getloadavg.c index 1cb1c01097d..752ec1f5ae7 100644 --- a/lib/getloadavg.c +++ b/lib/getloadavg.c @@ -140,7 +140,7 @@ # define SUNOS_5 # endif -# if defined (__osf__) && (defined (__alpha) || defined (__alpha__)) +# if defined (__osf__) && defined (__alpha) # define OSF_ALPHA # include # include @@ -499,9 +499,9 @@ getloadavg (double loadavg[], int nelem) } # endif -# if !defined (LDAV_DONE) && (defined __linux__ || defined __ANDROID__) \ - && (!defined __ANDROID__ || __ANDROID_API__ >= 13) - /* Linux without glibc, Android, Cygwin */ +# if (!defined LDAV_DONE \ + && (defined __ANDROID__ ? 13 <= __ANDROID_API__ : defined __linux__)) + /* non-Android Linux without glibc, Android 3.2+, Cygwin */ # define LDAV_DONE # undef LOAD_AVE_TYPE @@ -514,7 +514,7 @@ getloadavg (double loadavg[], int nelem) loadavg[2] = info.loads[2] / (double)(1U << SI_LOAD_SHIFT); elem = 3; } -# endif /* __linux__ || __ANDROID__ */ +# endif /* __ANDROID__ ? 13 <= __ANDROID_API__ : __linux__ */ # if !defined (LDAV_DONE) && defined __CYGWIN__ /* Cygwin */ diff --git a/lib/gnulib.mk.in b/lib/gnulib.mk.in index cf7d0470f67..fb34cf2cc1d 100644 --- a/lib/gnulib.mk.in +++ b/lib/gnulib.mk.in @@ -22,7 +22,6 @@ # Generated by gnulib-tool. # Reproduce by: # gnulib-tool --import \ -# --local-dir=./admin/gnulib-patches \ # --lib=libgnu \ # --source-base=lib \ # --m4-base=m4 \ diff --git a/lib/stddef.in.h b/lib/stddef.in.h index 3e4a8ec6032..dc689b8df80 100644 --- a/lib/stddef.in.h +++ b/lib/stddef.in.h @@ -31,7 +31,7 @@ || defined __need_ptrdiff_t || defined __need_NULL \ || defined __need_wint_t) \ /* Avoid warning triggered by "gcc -std=gnu23 -Wsystem-headers" \ - in Fedora 40 with gcc 14.0.1. \ + in GCC 13.3 and 14.2 \ . */ \ && !@STDDEF_NOT_IDEMPOTENT@ /* Special invocation convention inside gcc header files. In diff --git a/lib/stdlib.in.h b/lib/stdlib.in.h index dbe8ebc8502..1342db48772 100644 --- a/lib/stdlib.in.h +++ b/lib/stdlib.in.h @@ -168,6 +168,18 @@ _GL_INLINE_HEADER_BEGIN # endif #endif +/* _GL_ATTRIBUTE_NONNULL_IF_NONZERO (NP, NI) declares that the argument NP + (a pointer) must not be NULL if the argument NI (an integer) is != 0. */ +/* Applies to: functions. */ +#ifndef _GL_ATTRIBUTE_NONNULL_IF_NONZERO +# if __GNUC__ >= 15 && !defined __clang__ +# define _GL_ATTRIBUTE_NONNULL_IF_NONZERO(np, ni) \ + __attribute__ ((__nonnull_if_nonzero__ (np, ni))) +# else +# define _GL_ATTRIBUTE_NONNULL_IF_NONZERO(np, ni) +# endif +#endif + /* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. */ #ifndef _GL_ATTRIBUTE_NOTHROW @@ -223,6 +235,18 @@ _GL_INLINE_HEADER_BEGIN #endif +/* Declarations for ISO C N3322. */ +#if defined __GNUC__ && __GNUC__ >= 15 && !defined __clang__ +_GL_EXTERN_C void *bsearch (const void *__key, + const void *__base, size_t __nmemb, size_t __size, + int (*__compare) (const void *, const void *)) + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (2, 3) _GL_ARG_NONNULL ((5)); +_GL_EXTERN_C void qsort (void *__base, size_t __nmemb, size_t __size, + int (*__compare) (const void *, const void *)) + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 2) _GL_ARG_NONNULL ((4)); +#endif + + #if @GNULIB__EXIT@ /* Terminate the current process with the given return code, without running the 'atexit' handlers. */ @@ -1182,7 +1206,8 @@ typedef int (*_gl_qsort_r_compar_fn) (void const *, void const *, void *); _GL_FUNCDECL_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, _gl_qsort_r_compar_fn compare, void *arg), - _GL_ARG_NONNULL ((1, 4))); + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 2) + _GL_ARG_NONNULL ((4))); _GL_CXXALIAS_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, _gl_qsort_r_compar_fn compare, void *arg)); @@ -1191,7 +1216,8 @@ _GL_CXXALIAS_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, _GL_FUNCDECL_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, _gl_qsort_r_compar_fn compare, void *arg), - _GL_ARG_NONNULL ((1, 4))); + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 2) + _GL_ARG_NONNULL ((4))); # endif _GL_CXXALIAS_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, _gl_qsort_r_compar_fn compare, diff --git a/lib/string.in.h b/lib/string.in.h index 44b9497d802..e7642211685 100644 --- a/lib/string.in.h +++ b/lib/string.in.h @@ -116,6 +116,18 @@ # endif #endif +/* _GL_ATTRIBUTE_NONNULL_IF_NONZERO (NP, NI) declares that the argument NP + (a pointer) must not be NULL if the argument NI (an integer) is != 0. */ +/* Applies to: functions. */ +#ifndef _GL_ATTRIBUTE_NONNULL_IF_NONZERO +# if __GNUC__ >= 15 && !defined __clang__ +# define _GL_ATTRIBUTE_NONNULL_IF_NONZERO(np, ni) \ + __attribute__ ((__nonnull_if_nonzero__ (np, ni))) +# else +# define _GL_ATTRIBUTE_NONNULL_IF_NONZERO(np, ni) +# endif +#endif + /* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. */ #ifndef _GL_ATTRIBUTE_NOTHROW @@ -154,6 +166,7 @@ /* The definition of _GL_WARN_ON_USE is copied here. */ + /* Make _GL_ATTRIBUTE_DEALLOC_FREE work, even though may not have been included yet. */ #if @GNULIB_FREE_POSIX@ @@ -198,6 +211,44 @@ _GL_EXTERN_C void free (void *); # endif #endif + +/* Declarations for ISO C N3322. */ +#if defined __GNUC__ && __GNUC__ >= 15 && !defined __clang__ +_GL_EXTERN_C void *memcpy (void *__dest, const void *__src, size_t __n) + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 3) + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (2, 3); +_GL_EXTERN_C void *memccpy (void *__dest, const void *__src, int __c, size_t __n) + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 4) + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (2, 4); +_GL_EXTERN_C void *memmove (void *__dest, const void *__src, size_t __n) + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 3) + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (2, 3); +_GL_EXTERN_C char *strncpy (char *__dest, const char *__src, size_t __n) + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 3) + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (2, 3); +_GL_EXTERN_C char *strndup (const char *__s, size_t __n) + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 2); +_GL_EXTERN_C char *strncat (char *__dest, const char *__src, size_t __n) + _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_NONNULL_IF_NONZERO (2, 3); +_GL_EXTERN_C int memcmp (const void *__s1, const void *__s2, size_t __n) + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 3) + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (2, 3); +_GL_EXTERN_C int strncmp (const char *__s1, const char *__s2, size_t __n) + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 3) + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (2, 3); +# ifndef __cplusplus +_GL_EXTERN_C void *memchr (const void *__s, int __c, size_t __n) + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 3); +_GL_EXTERN_C void *memrchr (const void *__s, int __c, size_t __n) + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 3); +# endif +_GL_EXTERN_C void *memset (void *__s, int __c, size_t __n) + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 3); +_GL_EXTERN_C void *memset_explicit (void *__s, int __c, size_t __n) + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 3); +#endif + + /* Clear a block of memory. The compiler will not delete a call to this function, even if the block is dead after the call. */ #if @GNULIB_EXPLICIT_BZERO@ @@ -215,6 +266,7 @@ _GL_WARN_ON_USE (explicit_bzero, "explicit_bzero is unportable - " # endif #endif + /* Find the index of the least-significant set bit. */ #if @GNULIB_FFSL@ # if !@HAVE_FFSL@ @@ -281,7 +333,7 @@ _GL_CXXALIASWARN (memccpy); # endif _GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n), _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 3)); _GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n)); # else /* On some systems, this function is defined as an overloaded function: @@ -388,7 +440,7 @@ _GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - " # if ! @HAVE_DECL_MEMRCHR@ _GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t), _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 3)); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const void * std::memrchr (const void *, int, size_t); } @@ -425,12 +477,14 @@ _GL_WARN_ON_USE (memrchr, "memrchr is unportable - " # define memset_explicit rpl_memset_explicit # endif _GL_FUNCDECL_RPL (memset_explicit, void *, - (void *__dest, int __c, size_t __n), _GL_ARG_NONNULL ((1))); + (void *__dest, int __c, size_t __n), + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 3)); _GL_CXXALIAS_RPL (memset_explicit, void *, (void *__dest, int __c, size_t __n)); # else # if !@HAVE_MEMSET_EXPLICIT@ _GL_FUNCDECL_SYS (memset_explicit, void *, - (void *__dest, int __c, size_t __n), _GL_ARG_NONNULL ((1))); + (void *__dest, int __c, size_t __n), + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 3)); # endif _GL_CXXALIAS_SYS (memset_explicit, void *, (void *__dest, int __c, size_t __n)); # endif @@ -697,7 +751,8 @@ _GL_CXXALIASWARN (strdup); # endif _GL_FUNCDECL_RPL (strncat, char *, (char *restrict dest, const char *restrict src, size_t n), - _GL_ARG_NONNULL ((1, 2))); + _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (2, 3)); _GL_CXXALIAS_RPL (strncat, char *, (char *restrict dest, const char *restrict src, size_t n)); # else @@ -724,7 +779,7 @@ _GL_WARN_ON_USE (strncat, "strncat is unportable - " # endif _GL_FUNCDECL_RPL (strndup, char *, (char const *__s, size_t __n), - _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 2) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (strndup, char *, (char const *__s, size_t __n)); # else @@ -733,13 +788,13 @@ _GL_CXXALIAS_RPL (strndup, char *, (char const *__s, size_t __n)); # if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 _GL_FUNCDECL_SYS (strndup, char *, (char const *__s, size_t __n), - _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 2) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE) _GL_ATTRIBUTE_NOTHROW; # else _GL_FUNCDECL_SYS (strndup, char *, (char const *__s, size_t __n), - _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 2) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # endif @@ -752,13 +807,13 @@ _GL_CXXALIASWARN (strndup); # if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 _GL_FUNCDECL_SYS (strndup, char *, (char const *__s, size_t __n), - _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 2) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE) _GL_ATTRIBUTE_NOTHROW; # else _GL_FUNCDECL_SYS (strndup, char *, (char const *__s, size_t __n), - _GL_ARG_NONNULL ((1)) + _GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 2) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # endif diff --git a/lib/utimensat.c b/lib/utimensat.c index ca1d39e5900..fcf2d27eb3e 100644 --- a/lib/utimensat.c +++ b/lib/utimensat.c @@ -118,7 +118,7 @@ rpl_utimensat (int fd, char const *file, struct timespec const times[2], ts[1] = times[1]; times = ts; } -# if defined __hppa__ || defined __NetBSD__ +# if defined __hppa || defined __NetBSD__ /* Linux kernel 2.6.22.19 on hppa does not reject invalid tv_nsec values. diff --git a/m4/gnulib-common.m4 b/m4/gnulib-common.m4 index daf05db2a47..d5bf2fb358e 100644 --- a/m4/gnulib-common.m4 +++ b/m4/gnulib-common.m4 @@ -1,5 +1,5 @@ # gnulib-common.m4 -# serial 109 +# serial 110 dnl Copyright (C) 2007-2025 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -117,6 +117,9 @@ AC_DEFUN([gl_COMMON_BODY], [ # define _GL_HAS_ATTRIBUTE(attr) __has_attribute (__##attr##__) # else # define _GL_HAS_ATTRIBUTE(attr) _GL_ATTR_##attr +/* The following lines list the first GCC version that supports the attribute. + Although the lines are not used in GCC 5 and later (as GCC 5 introduced + __has_attribute support), list GCC versions 5+ anyway for completeness. */ # define _GL_ATTR_alloc_size _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_always_inline _GL_GNUC_PREREQ (3, 2) # define _GL_ATTR_artificial _GL_GNUC_PREREQ (4, 3) @@ -137,14 +140,15 @@ AC_DEFUN([gl_COMMON_BODY], [ # endif # define _GL_ATTR_noinline _GL_GNUC_PREREQ (3, 1) # define _GL_ATTR_nonnull _GL_GNUC_PREREQ (3, 3) +# define _GL_ATTR_nonnull_if_nonzero _GL_GNUC_PREREQ (15, 1) # define _GL_ATTR_nonstring _GL_GNUC_PREREQ (8, 0) # define _GL_ATTR_nothrow _GL_GNUC_PREREQ (3, 3) # define _GL_ATTR_packed _GL_GNUC_PREREQ (2, 7) # define _GL_ATTR_pure _GL_GNUC_PREREQ (2, 96) -# define _GL_ATTR_reproducible 0 /* not yet supported, as of GCC 14 */ +# define _GL_ATTR_reproducible _GL_GNUC_PREREQ (15, 1) # define _GL_ATTR_returns_nonnull _GL_GNUC_PREREQ (4, 9) # define _GL_ATTR_sentinel _GL_GNUC_PREREQ (4, 0) -# define _GL_ATTR_unsequenced 0 /* not yet supported, as of GCC 14 */ +# define _GL_ATTR_unsequenced _GL_GNUC_PREREQ (15, 1) # define _GL_ATTR_unused _GL_GNUC_PREREQ (2, 7) # define _GL_ATTR_warn_unused_result _GL_GNUC_PREREQ (3, 4) # endif @@ -681,6 +685,17 @@ AC_DEFUN([gl_COMMON_BODY], [ # endif #endif +/* _GL_ATTRIBUTE_NONNULL_IF_NONZERO (NP, NI) declares that the argument NP + (a pointer) must not be NULL if the argument NI (an integer) is != 0. */ +/* Applies to: functions. */ +#ifndef _GL_ATTRIBUTE_NONNULL_IF_NONZERO +# if _GL_HAS_ATTRIBUTE (nonnull_if_nonzero) +# define _GL_ATTRIBUTE_NONNULL_IF_NONZERO(np, ni) __attribute__ ((__nonnull_if_nonzero__ (np, ni))) +# else +# define _GL_ATTRIBUTE_NONNULL_IF_NONZERO(np, ni) +# endif +#endif + /* _GL_ATTRIBUTE_NONSTRING declares that the contents of a character array is not meant to be NUL-terminated. */ /* Applies to: struct/union members and variables that are arrays of element diff --git a/m4/manywarnings.m4 b/m4/manywarnings.m4 index cf3f730b4c3..eebba901806 100644 --- a/m4/manywarnings.m4 +++ b/m4/manywarnings.m4 @@ -97,7 +97,7 @@ AC_DEFUN([gl_MANYWARN_ALL_GCC(C)], # export LC_ALL=C && comm -3 \ # <((sed -n 's/^ *\(-[^ 0-9][^ ]*\).*/\1/p' manywarnings.m4; \ # awk '/^[^#]/ {print $1}' ../build-aux/gcc-warning.spec) | sort) \ - # <(LC_ALL=C gcc --help=warnings | sed -n 's/^ \(-[^ ]*\) .*/\1/p' | sort) + # <(gcc --help=warnings | sed -n 's/^ \(-[^ ]*\) .*/\1/p' | sort) $1= for gl_manywarn_item in -fanalyzer -fstrict-flex-arrays \ @@ -106,7 +106,6 @@ AC_DEFUN([gl_MANYWARN_ALL_GCC(C)], -Wbad-function-cast \ -Wcast-align=strict \ -Wdate-time \ - -Wdisabled-optimization \ -Wdouble-promotion \ -Wduplicated-branches \ -Wduplicated-cond \ diff --git a/m4/stddef_h.m4 b/m4/stddef_h.m4 index a6bc6243143..3bc8cd85fea 100644 --- a/m4/stddef_h.m4 +++ b/m4/stddef_h.m4 @@ -1,5 +1,5 @@ # stddef_h.m4 -# serial 19 +# serial 21 dnl Copyright (C) 2009-2025 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -91,12 +91,14 @@ AC_DEFUN_ONCE([gl_STDDEF_H], fi dnl https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114870 - dnl affects GCC 13 and 14. + dnl affects GCC 13.3 and 14.2. AC_CACHE_CHECK([whether is idempotent], [gl_cv_stddef_idempotent], [AC_COMPILE_IFELSE([AC_LANG_SOURCE( [[ - #if __GNUC__ == 13 || __GNUC__ == 14 + #if \ + ((__GNUC__ == 13 && __GNUC_MINOR__ <= 3) \ + || (__GNUC__ == 14 && __GNUC_MINOR__ <= 2)) #error "bug 114870 is present" #endif ]])], commit 322ed637b4c2fe826d41c5af3800b2f2e381bb0f Author: Stefan Monnier Date: Wed May 7 23:26:40 2025 -0400 cl-lib.el (cl-generic-generalizers): Fix partial bootstrap * lisp/emacs-lisp/cl-lib.el (cl-generic-generalizers): Tweak the bootstrap hack to avoid a problem when dumping `bootstrap-emacs` when `cl-lib.el` has already been compiled. * lisp/emacs-lisp/cl-macs.el (list): Move out of `static-if` test. diff --git a/lisp/emacs-lisp/cl-lib.el b/lisp/emacs-lisp/cl-lib.el index 7d013dfca5f..b64b9c17e12 100644 --- a/lisp/emacs-lisp/cl-lib.el +++ b/lisp/emacs-lisp/cl-lib.el @@ -560,12 +560,11 @@ If ALIST is non-nil, the new pairs are prepended to it." ;; those rare places where we do need it. ) -(static-if (not (fboundp 'cl-defmethod)) - ;; `cl-generic' requires `cl-lib' at compile-time, so `cl-lib' can't - ;; use `cl-defmethod' before `cl-generic' has been compiled. - ;; Also, there is no mechanism to autoload methods, so this can't be - ;; moved to `cl-extra.el'. - nil +(when (fboundp 'cl-generic-define-method) + ;; `cl-generic' requires `cl-lib' at compile-time, so `cl-lib' can't + ;; use `cl-defmethod' before `cl-generic' has been loaded. + ;; Also, there is no mechanism to autoload methods, so this can't be + ;; moved to `cl-extra.el'. (declare-function cl--derived-type-generalizers "cl-extra" (type)) (cl-defmethod cl-generic-generalizers :extra "derived-types" (type) "Support for dispatch on derived types, i.e. defined with `cl-deftype'." diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index 583335076b4..084ac56c5f8 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -3812,6 +3812,11 @@ If PARENTS is non-nil, ARGLIST must be nil." (cl--define-derived-type ',name ,expander ,predicate ',parents))))) +;; This one is redundant, but we keep it to silence a +;; warning during the early bootstrap when `cl-seq.el' gets +;; loaded before `cl-preloaded.el' is defined. +(put 'list 'cl-deftype-satisfies #'listp) + (static-if (not (fboundp 'cl--define-derived-type)) nil ;; Can't define them yet! (cl-deftype natnum () (declare (parents integer)) '(satisfies natnump)) @@ -3827,10 +3832,6 @@ If PARENTS is non-nil, ARGLIST must be nil." ;; keyboard macros, which are redundant since `kmacro.el'!! ;;(declare (parents function)) '(satisfies commandp)) - ;; This one is redundant, but we keep it to silence a - ;; warning during the early bootstrap when `cl-seq.el' gets - ;; loaded before `cl-preloaded.el' is defined. - (put 'list 'cl-deftype-satisfies #'listp) (eval-when-compile (defmacro cl--defnumtype (type base) commit 777da8c3f9ea73077c00957d48d8e6b317b9657d Author: Stefan Monnier Date: Wed May 7 23:17:41 2025 -0400 (cl-deftype): Precompute the predicate function Always define a `cl-deftype-satisfies` predicate (if possible), so we only need `cl-typep` to "interpret" a type specifier when we use a compound type but never for the atomic types (e.g. never in `cl-types-of`). * lisp/emacs-lisp/cl-macs.el (cl-typep): Test `cl-deftype-satisfies` first. Don't handle `real` here any more. (base-char, character, command, keyword, natnum, real): Define with `c-deftype`. (cl-deftype): Precompute the predicate for the atomic derived type, if applicable. * lisp/emacs-lisp/cl-preloaded.el (cl--define-derived-type): Add argument for the precomputed predicate function. * lisp/emacs-lisp/cl-extra.el (cl-types-of): Use `cl-deftype-satisfies` instead of `cl-type-p`. diff --git a/lisp/emacs-lisp/cl-extra.el b/lisp/emacs-lisp/cl-extra.el index b3886b5bde3..60e0eb07677 100644 --- a/lisp/emacs-lisp/cl-extra.el +++ b/lisp/emacs-lisp/cl-extra.el @@ -1034,20 +1034,22 @@ TYPES is an internal argument." (let* ((found nil)) ;; Build a list of all types OBJECT belongs to. (dolist (type (or types cl--derived-type-list)) - (and - ;; If OBJECT is of type, add type to the matching list. - (if types - ;; For method dispatch, we don't need to filter out errors, - ;; since we can presume that method dispatch is used only on - ;; sanely-defined types. - (cl-typep object type) - (condition-case-unless-debug e - (cl-typep object type) - (error (setq cl--derived-type-list (delq type cl--derived-type-list)) - (warn "cl-types-of %S: %s" - type (error-message-string e)) - nil))) - (push type found))) + (let ((pred (get type 'cl-deftype-satisfies))) + (and + ;; If OBJECT is of type, add type to the matching list. + (if types + ;; For method dispatch, we don't need to filter out errors, + ;; since we can presume that method dispatch is used only on + ;; sanely-defined types. + (funcall pred object) + (condition-case-unless-debug e + (funcall pred object) + (error (setq cl--derived-type-list + (delq type cl--derived-type-list)) + (warn "cl-types-of %S: %s" + type (error-message-string e)) + nil))) + (push type found)))) (push (cl-type-of object) found) ;; Return the list of types OBJECT belongs to, which is also the list ;; of specifiers for OBJECT. This memoization has two purposes: diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index c45effbb9b6..583335076b4 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -3552,32 +3552,20 @@ Of course, we really can't know that for sure, so it's just a heuristic." (or (cdr (assq sym byte-compile-function-environment)) (cdr (assq sym macroexpand-all-environment)))))) -;; Please keep it in sync with `comp-known-predicates'. -(pcase-dolist (`(,type . ,pred) - ;; Mostly kept in alphabetical order. - ;; These aren't defined via `cl--define-built-in-type'. - '((base-char . characterp) ;Could be subtype of `fixnum'. - (character . natnump) ;Could be subtype of `fixnum'. - (command . commandp) ;Subtype of closure & subr. - (keyword . keywordp) ;Would need `keyword-with-pos`. - (natnum . natnump) ;Subtype of fixnum & bignum. - (real . numberp) ;Not clear where it would fit. - ;; This one is redundant, but we keep it to silence a - ;; warning during the early bootstrap when `cl-seq.el' gets - ;; loaded before `cl-preloaded.el' is defined. - (list . listp) - )) - (put type 'cl-deftype-satisfies pred)) - ;;;###autoload (define-inline cl-typep (val type) "Return t if VAL is of type TYPE, nil otherwise." (inline-letevals (val) (pcase (inline-const-val type) + ((and (or (and type (pred symbolp)) `(,type)) + (guard (get type 'cl-deftype-satisfies))) + (inline-quote (funcall #',(get type 'cl-deftype-satisfies) ,val))) ((and `(,name . ,args) (guard (get name 'cl-deftype-handler))) (inline-quote (cl-typep ,val ',(apply (get name 'cl-deftype-handler) args)))) - (`(,(and name (or 'integer 'float 'real 'number)) + ;; FIXME: Move this to a `cl-deftype'. The problem being that these + ;; types are hybrid "built-in and derived". + (`(,(and name (or 'integer 'float 'number)) . ,(or `(,min ,max) pcase--dontcare)) (inline-quote (and (cl-typep ,val ',name) @@ -3611,8 +3599,6 @@ Of course, we really can't know that for sure, so it's just a heuristic." ((and (pred symbolp) type (guard (get type 'cl-deftype-handler))) (inline-quote (cl-typep ,val ',(funcall (get type 'cl-deftype-handler))))) - ((and (pred symbolp) type (guard (get type 'cl-deftype-satisfies))) - (inline-quote (funcall #',(get type 'cl-deftype-satisfies) ,val))) ((and (or 'nil 't) type) (inline-quote ',type)) ((and (pred symbolp) type) (macroexp-warn-and-return @@ -3813,18 +3799,58 @@ If PARENTS is non-nil, ARGLIST must be nil." (cl-callf (lambda (x) (delq declares x)) decls))) (and parents arglist (error "Parents specified, but arglist not empty")) - `(eval-and-compile - (cl--define-derived-type - ',name - (cl-function (lambda (&cl-defs ('*) ,@arglist) ,@decls ,@forms)) - ',parents)))) + (let* ((expander + `(cl-function (lambda (&cl-defs ('*) ,@arglist) ,@decls ,@forms))) + ;; FIXME: Pass a better lexical context. + (specifier (ignore-errors (funcall (eval expander t)))) + (predicate + (pcase specifier + (`(satisfies ,f) `#',f) + ('nil nil) + (type `(lambda (x) (cl-typep x ',type)))))) + `(eval-and-compile + (cl--define-derived-type + ',name ,expander ,predicate ',parents))))) (static-if (not (fboundp 'cl--define-derived-type)) - nil ;; Can't define it yet! - (cl-deftype extended-char () '(and character (not base-char)))) - -;;; Additional functions that we can now define because we've defined -;;; `cl-defsubst' and `cl-typep'. + nil ;; Can't define them yet! + (cl-deftype natnum () (declare (parents integer)) '(satisfies natnump)) + (cl-deftype character () (declare (parents fixnum natnum)) + '(and fixnum natnum)) + (cl-deftype base-char () (declare (parents character)) + '(satisfies characterp)) + (cl-deftype extended-char () (declare (parents character)) + '(and character (not base-char))) + (cl-deftype keyword () (declare (parents symbol)) '(satisfies keywordp)) + (cl-deftype command () + ;; FIXME: Can't use `function' as parent because of arrays as + ;; keyboard macros, which are redundant since `kmacro.el'!! + ;;(declare (parents function)) + '(satisfies commandp)) + ;; This one is redundant, but we keep it to silence a + ;; warning during the early bootstrap when `cl-seq.el' gets + ;; loaded before `cl-preloaded.el' is defined. + (put 'list 'cl-deftype-satisfies #'listp) + + (eval-when-compile + (defmacro cl--defnumtype (type base) + `(cl-deftype ,type (&optional min max) + (list 'and ',base + (if (memq min '(* nil)) t + (if (consp min) + `(satisfies . ,(lambda (val) (> val (car min)))) + `(satisfies . ,(lambda (val) (>= val min))))) + (if (memq max '(* nil)) t + (if (consp max) + `(satisfies . ,(lambda (val) (< val (car max)))) + `(satisfies . ,(lambda (val) (<= val max))))))))) + ;;(cl--defnumtype integer ??) + ;;(cl--defnumtype float ??) + ;;(cl--defnumtype number ??) + (cl--defnumtype real number)) + +;; Additional functions that we can now define because we've defined +;; `cl-defsubst' and `cl-typep'. (define-inline cl-struct-slot-value (struct-type slot-name inst) "Return the value of slot SLOT-NAME in INST of STRUCT-TYPE. diff --git a/lisp/emacs-lisp/cl-preloaded.el b/lisp/emacs-lisp/cl-preloaded.el index 8956245f24c..e4b467ceb24 100644 --- a/lisp/emacs-lisp/cl-preloaded.el +++ b/lisp/emacs-lisp/cl-preloaded.el @@ -491,10 +491,12 @@ The fields are used as follows: (:copier nil)) "Type descriptors for derived types, i.e. defined by `cl-deftype'.") -(defun cl--define-derived-type (name expander &optional parents) +(defun cl--define-derived-type (name expander predicate &optional parents) "Register derived type with NAME for method dispatching. EXPANDER is the function that computes the type specifier from the arguments passed to the derived type. +PREDICATE is the precomputed function to test this type when used as an +atomic type, or nil if it cannot be used as an atomic type. PARENTS is a list of types NAME is a subtype of, or nil." (let* ((class (cl--find-class name))) (when class @@ -509,6 +511,8 @@ PARENTS is a list of types NAME is a subtype of, or nil." (cl--derived-type-class-make name (function-documentation expander) parents)) (define-symbol-prop name 'cl-deftype-handler expander) + (when predicate + (define-symbol-prop name 'cl-deftype-satisfies predicate)) ;; Record new type. The constructor of the class ;; `cl-type-class' already ensures that parent types must be ;; defined before their "child" types (i.e. already added to @@ -530,7 +534,7 @@ PARENTS is a list of types NAME is a subtype of, or nil." (or (memq name cl--derived-type-list) ;; Exclude types that can't be used without arguments. ;; They'd signal errors in `cl-types-of'! - (not (ignore-errors (funcall expander))) + (not predicate) (push name cl--derived-type-list)))) ;; Make sure functions defined with cl-defsubst can be inlined even in commit a918f9e640f0c652d2f908fda88ecb2905eb4c58 Author: Yuan Fu Date: Wed May 7 11:07:49 2025 -0700 ; * src/pdumper.c (dump_buffer): Update hash. diff --git a/src/pdumper.c b/src/pdumper.c index 5cd84995226..b3de90bfa03 100644 --- a/src/pdumper.c +++ b/src/pdumper.c @@ -2807,7 +2807,7 @@ dump_obarray (struct dump_context *ctx, Lisp_Object object) static dump_off dump_buffer (struct dump_context *ctx, const struct buffer *in_buffer) { -#if CHECK_STRUCTS && !defined HASH_buffer_B02F648B82 +#if CHECK_STRUCTS && !defined HASH_buffer_23EB984887 # error "buffer changed. See CHECK_STRUCTS comment in config.h." #endif struct buffer munged_buffer = *in_buffer; commit 0d96565d5df014d2b9454b1960dffb850feb6b7c Author: Jeremy Bryant Date: Wed Apr 16 21:14:57 2025 +0100 ; RefTeX: Update author email Update Carsten's email across related reftex* files: lisp/textmodes/reftex.el lisp/textmodes/reftex-auc.el lisp/textmodes/reftex-cite.el lisp/textmodes/reftex-dcr.el lisp/textmodes/reftex-global.el lisp/textmodes/reftex-index.el lisp/textmodes/reftex-parse.el lisp/textmodes/reftex-ref.el lisp/textmodes/reftex-sel.el lisp/textmodes/reftex-toc.el lisp/textmodes/reftex-vars.el lisp/textmodes/reftex.el (AUCTeX bug#77850) diff --git a/lisp/textmodes/reftex-auc.el b/lisp/textmodes/reftex-auc.el index 7302156a60b..88cf1b1a3cf 100644 --- a/lisp/textmodes/reftex-auc.el +++ b/lisp/textmodes/reftex-auc.el @@ -2,7 +2,7 @@ ;; Copyright (C) 1997-2025 Free Software Foundation, Inc. -;; Author: Carsten Dominik +;; Author: Carsten Dominik ;; Maintainer: auctex-devel@gnu.org ;; This file is part of GNU Emacs. diff --git a/lisp/textmodes/reftex-cite.el b/lisp/textmodes/reftex-cite.el index 8830f188c93..6c6d551063f 100644 --- a/lisp/textmodes/reftex-cite.el +++ b/lisp/textmodes/reftex-cite.el @@ -2,7 +2,7 @@ ;; Copyright (C) 1997-2025 Free Software Foundation, Inc. -;; Author: Carsten Dominik +;; Author: Carsten Dominik ;; Maintainer: auctex-devel@gnu.org ;; This file is part of GNU Emacs. diff --git a/lisp/textmodes/reftex-dcr.el b/lisp/textmodes/reftex-dcr.el index 77516ca840a..65d0670bc35 100644 --- a/lisp/textmodes/reftex-dcr.el +++ b/lisp/textmodes/reftex-dcr.el @@ -2,7 +2,7 @@ ;; Copyright (C) 1997-2025 Free Software Foundation, Inc. -;; Author: Carsten Dominik +;; Author: Carsten Dominik ;; Maintainer: auctex-devel@gnu.org ;; This file is part of GNU Emacs. diff --git a/lisp/textmodes/reftex-global.el b/lisp/textmodes/reftex-global.el index bd330d3a418..2463b231904 100644 --- a/lisp/textmodes/reftex-global.el +++ b/lisp/textmodes/reftex-global.el @@ -2,7 +2,7 @@ ;; Copyright (C) 1997-2025 Free Software Foundation, Inc. -;; Author: Carsten Dominik +;; Author: Carsten Dominik ;; Maintainer: auctex-devel@gnu.org ;; This file is part of GNU Emacs. diff --git a/lisp/textmodes/reftex-index.el b/lisp/textmodes/reftex-index.el index 1d18d6047b5..17f4cd66dcf 100644 --- a/lisp/textmodes/reftex-index.el +++ b/lisp/textmodes/reftex-index.el @@ -2,7 +2,7 @@ ;; Copyright (C) 1997-2025 Free Software Foundation, Inc. -;; Author: Carsten Dominik +;; Author: Carsten Dominik ;; Maintainer: auctex-devel@gnu.org ;; This file is part of GNU Emacs. diff --git a/lisp/textmodes/reftex-parse.el b/lisp/textmodes/reftex-parse.el index cd8b3378558..a7ff07eff8e 100644 --- a/lisp/textmodes/reftex-parse.el +++ b/lisp/textmodes/reftex-parse.el @@ -2,7 +2,7 @@ ;; Copyright (C) 1997-2025 Free Software Foundation, Inc. -;; Author: Carsten Dominik +;; Author: Carsten Dominik ;; Maintainer: auctex-devel@gnu.org ;; This file is part of GNU Emacs. diff --git a/lisp/textmodes/reftex-ref.el b/lisp/textmodes/reftex-ref.el index 8aa34ec942a..f8bd3556018 100644 --- a/lisp/textmodes/reftex-ref.el +++ b/lisp/textmodes/reftex-ref.el @@ -2,7 +2,7 @@ ;; Copyright (C) 1997-2025 Free Software Foundation, Inc. -;; Author: Carsten Dominik +;; Author: Carsten Dominik ;; Maintainer: auctex-devel@gnu.org ;; This file is part of GNU Emacs. diff --git a/lisp/textmodes/reftex-sel.el b/lisp/textmodes/reftex-sel.el index 6e65ad4786c..45087e69de8 100644 --- a/lisp/textmodes/reftex-sel.el +++ b/lisp/textmodes/reftex-sel.el @@ -2,7 +2,7 @@ ;; Copyright (C) 1997-2025 Free Software Foundation, Inc. -;; Author: Carsten Dominik +;; Author: Carsten Dominik ;; Maintainer: auctex-devel@gnu.org ;; This file is part of GNU Emacs. diff --git a/lisp/textmodes/reftex-toc.el b/lisp/textmodes/reftex-toc.el index 2e3be51c87c..3c780bddd20 100644 --- a/lisp/textmodes/reftex-toc.el +++ b/lisp/textmodes/reftex-toc.el @@ -2,7 +2,7 @@ ;; Copyright (C) 1997-2025 Free Software Foundation, Inc. -;; Author: Carsten Dominik +;; Author: Carsten Dominik ;; Maintainer: auctex-devel@gnu.org ;; This file is part of GNU Emacs. diff --git a/lisp/textmodes/reftex-vars.el b/lisp/textmodes/reftex-vars.el index 49343b85de7..6c852566df9 100644 --- a/lisp/textmodes/reftex-vars.el +++ b/lisp/textmodes/reftex-vars.el @@ -2,7 +2,7 @@ ;; Copyright (C) 1997-1999, 2001-2025 Free Software Foundation, Inc. -;; Author: Carsten Dominik +;; Author: Carsten Dominik ;; Maintainer: auctex-devel@gnu.org ;; This file is part of GNU Emacs. diff --git a/lisp/textmodes/reftex.el b/lisp/textmodes/reftex.el index 2b0b3fee0b9..ee217804d8f 100644 --- a/lisp/textmodes/reftex.el +++ b/lisp/textmodes/reftex.el @@ -2,7 +2,7 @@ ;; Copyright (C) 1997-2025 Free Software Foundation, Inc. -;; Author: Carsten Dominik +;; Author: Carsten Dominik ;; Maintainer: auctex-devel@gnu.org ;; Keywords: tex commit 4e1fe56e316c041ed3b07f510ecba428c6b06cd1 Author: James Cherti Date: Fri Apr 11 10:18:19 2025 -0400 Mark !%:.^~, as punctuation rather than symbol constituents In Bash, the characters !%:.^~, are not valid in variable names. In sh, they are not permitted in either function or variable names. Treating them as punctuation is convenient, as they are rarely used in function names and never in variable names. Even among commands, their usage is uncommon. The only character among these that is commonly seen in command names is '.', although it is rarely used in function names. Marking these characters as punctuation, rather than symbol constituents, enhances the accuracy of symbol detection. * lisp/progmodes/sh-script.el: Mark !%:.^~, as punctuation in the sh-mode-syntax-table syntax table. Copyright-paperwork-exempt: yes diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el index 287f0501350..7216975ebfd 100644 --- a/lisp/progmodes/sh-script.el +++ b/lisp/progmodes/sh-script.el @@ -406,13 +406,13 @@ name symbol." ;; to work fine. This is needed so that dabbrev-expand ;; $VARNAME works. ?$ "'" - ?! "_" - ?% "_" - ?: "_" - ?. "_" - ?^ "_" - ?~ "_" - ?, "_" + ?! "." + ?% "." + ?: "." + ?. "." + ?^ "." + ?~ "." + ?, "." ?= "." ?/ "." ?\; "." commit 1590a2b3d5473f5bcdf21d63c968db57b88f60b1 Merge: 74e7e0f08ab 9f50fdf1e75 Author: Stefan Monnier Date: Wed May 7 14:56:49 2025 -0400 Merge branch 'cl-types' commit 74e7e0f08abfe6b50ba7c2a153a989bf4910835e Author: Eli Zaretskii Date: Wed May 7 21:43:59 2025 +0300 Improve support of UTF-8 encoded file names in ZIP archives * lisp/arc-mode.el (archive-zip-summarize): Support the 0x7075 UPath Unicode Path Extra Field extension of ZIP format. (Bug#78290) diff --git a/lisp/arc-mode.el b/lisp/arc-mode.el index 646df770de2..10ff3871074 100644 --- a/lisp/arc-mode.el +++ b/lisp/arc-mode.el @@ -2090,6 +2090,25 @@ This doesn't recover lost files, it just undoes changes in the buffer itself." ;; an 8-byte uncompressed size. (archive-l-e (+ p 46 fnlen 4) 8) ucsize)) + (up-len (if (and (> exlen 9) ; 0x7075 Tag: 2 bytes, + ; TSize: 2 bytes, + ; Version: 1 byte, + ; CRC32: 4 bytes + ;; UPath extension tag 0x7075 ("up") + (eq (char-after (+ p 46 fnlen)) ?u) + (eq (char-after (+ p 46 fnlen 1)) ?p)) + ;; Subtract 1 byte for version and 4 more + ;; bytes for file-name's CRC-32 + (- (archive-l-e (+ p 46 fnlen 2) 2) 5))) + (upath (if up-len + ;; FIXME: Should verify UPath is up-to-date by + ;; computing CRC-32 and comparing with the + ;; value stored before UPath + (decode-coding-region (+ p 46 fnlen 9) + (+ p 46 fnlen 9 up-len) + 'utf-8-unix + t))) + (efnname (or upath efnname)) (isdir (and (= ucsize 0) (string= (file-name-nondirectory efnname) ""))) (mode (cond ((memq creator '(2 3)) ; Unix commit 3089d822ffa7d0d5fcc1cd56b432ab80c1f6771f Author: Stephen Gildea Date: Wed May 7 11:16:50 2025 -0700 ; MH-E: Remove unused defvar * lisp/mh-e/mh-e.el (mh-delay-invisible-header-generation-flag): Variable is no longer used; remove its declaration. diff --git a/lisp/mh-e/mh-e.el b/lisp/mh-e/mh-e.el index f64b02c7bca..99a65ece085 100644 --- a/lisp/mh-e/mh-e.el +++ b/lisp/mh-e/mh-e.el @@ -2766,12 +2766,6 @@ here that you would like to be displayed in Real definition, below, uses variables that aren't defined yet." nil))) -(defvar mh-delay-invisible-header-generation-flag t - "Non-nil means to delay the generation of invisible header fields. -Because the function `mh-invisible-headers' uses both -`mh-invisible-header-fields' and `mh-invisible-header-fields', it -cannot be run until both variables have been initialized.") - (defcustom mh-invisible-header-fields nil "Additional header fields to hide. commit 839d29b81ffac1d809f76e182468f40e184cfe22 Author: Stefan Monnier Date: Wed May 7 11:45:14 2025 -0400 lisp/register.el (register-read-with-preview-traditional): Use PRED diff --git a/etc/NEWS b/etc/NEWS index 109f997ead7..cf3abc58504 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -564,6 +564,11 @@ This variable has no effect when Transient Mark mode is off. * Changes in Specialized Modes and Packages in Emacs 31.1 +** Register +*** The "*Register Preview*" buffer shows only suitable registers. +That was already the case for the "fancy" UI but is now also true in +the default UI you get, i.e. when 'register-use-preview' is 'traditional'. + ** Tree-sitter *** New user option 'treesit-auto-install-grammar'. diff --git a/lisp/register.el b/lisp/register.el index a7afc7e08e4..8d8c3ab5b8f 100644 --- a/lisp/register.el +++ b/lisp/register.el @@ -289,7 +289,7 @@ The register value nil represents an empty register. This calls the function specified by `register--read-with-preview-function'." (funcall register--read-with-preview-function prompt pred)) -(defun register-read-with-preview-traditional (prompt &optional _pred) +(defun register-read-with-preview-traditional (prompt &optional pred) "Read register name, prompting with PROMPT; possibly show existing registers. This reads and returns the name of a register. PROMPT should be a string to prompt the user for the name. @@ -305,7 +305,7 @@ when `register-use-preview' is set to `traditional'." (run-with-timer register-preview-delay nil (lambda () (unless (get-buffer-window buffer) - (register-preview buffer)))))) + (register-preview buffer nil pred)))))) (help-chars (cl-loop for c in (cons help-char help-event-list) when (not (get-register c)) collect c))) @@ -314,7 +314,7 @@ when `register-use-preview' is set to `traditional'." (while (memq (read-key (propertize prompt 'face 'minibuffer-prompt)) help-chars) (unless (get-buffer-window buffer) - (register-preview buffer 'show-empty))) + (register-preview buffer 'show-empty pred))) (when (or (eq ?\C-g last-input-event) (eq 'escape last-input-event) (eq ?\C-\[ last-input-event)) commit 9f50fdf1e75040d7feaa1edb235377a33da94781 Author: Stefan Monnier Date: Wed May 7 13:54:47 2025 -0400 (cl-deftype): Don't set `cl-deftype-handler` directly In order to make it easier to change that in the future, let `cl--define-derived-type` take care of storing the derived type's function into `cl-deftype-handler`. * lisp/emacs-lisp/cl-preloaded.el (cl--define-derived-type): Change calling convention. Set `cl-deftype-handler`. * lisp/emacs-lisp/cl-macs.el (cl-deftype): Don't set `cl-deftype-handler`, instead pass the function to `cl--define-derived-type`. diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index 0fc791890aa..c45effbb9b6 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -3803,9 +3803,6 @@ If PARENTS is non-nil, ARGLIST must be nil." (declare (debug cl-defmacro) (doc-string 3) (indent 2)) (pcase-let* ((`(,decls . ,forms) (macroexp-parse-body body)) - (docstring (if (stringp (car decls)) - (car decls) - (cadr (assq :documentation decls)))) (declares (assq 'declare decls)) (parent-decl (assq 'parents (cdr declares))) (parents (cdr parent-decl))) @@ -3817,12 +3814,10 @@ If PARENTS is non-nil, ARGLIST must be nil." (and parents arglist (error "Parents specified, but arglist not empty")) `(eval-and-compile - (cl--define-derived-type ',name ',parents ',arglist ,docstring) - (define-symbol-prop ',name 'cl-deftype-handler - (cl-function - (lambda (&cl-defs ('*) ,@arglist) - ,@decls - ,@forms)))))) + (cl--define-derived-type + ',name + (cl-function (lambda (&cl-defs ('*) ,@arglist) ,@decls ,@forms)) + ',parents)))) (static-if (not (fboundp 'cl--define-derived-type)) nil ;; Can't define it yet! diff --git a/lisp/emacs-lisp/cl-preloaded.el b/lisp/emacs-lisp/cl-preloaded.el index 7dac0519681..8956245f24c 100644 --- a/lisp/emacs-lisp/cl-preloaded.el +++ b/lisp/emacs-lisp/cl-preloaded.el @@ -491,10 +491,11 @@ The fields are used as follows: (:copier nil)) "Type descriptors for derived types, i.e. defined by `cl-deftype'.") -(defun cl--define-derived-type (name parents arglist &optional docstring) +(defun cl--define-derived-type (name expander &optional parents) "Register derived type with NAME for method dispatching. -PARENTS is a list of types NAME is a subtype of, or nil. -DOCSTRING is an optional documentation string." +EXPANDER is the function that computes the type specifier from +the arguments passed to the derived type. +PARENTS is a list of types NAME is a subtype of, or nil." (let* ((class (cl--find-class name))) (when class (or (cl-derived-type-class-p class) @@ -505,7 +506,9 @@ DOCSTRING is an optional documentation string." (error "Type in another class: %S" (type-of class)))) ;; Setup a type descriptor for NAME. (setf (cl--find-class name) - (cl--derived-type-class-make name docstring parents)) + (cl--derived-type-class-make name (function-documentation expander) + parents)) + (define-symbol-prop name 'cl-deftype-handler expander) ;; Record new type. The constructor of the class ;; `cl-type-class' already ensures that parent types must be ;; defined before their "child" types (i.e. already added to @@ -527,7 +530,7 @@ DOCSTRING is an optional documentation string." (or (memq name cl--derived-type-list) ;; Exclude types that can't be used without arguments. ;; They'd signal errors in `cl-types-of'! - (not (memq (car arglist) '(nil &rest &optional &keys))) + (not (ignore-errors (funcall expander))) (push name cl--derived-type-list)))) ;; Make sure functions defined with cl-defsubst can be inlined even in commit d7459da58de8bf317d7669f001c35244ba38d17b Author: Stefan Monnier Date: Wed May 7 13:24:58 2025 -0400 lisp/emacs-lisp/cl-types.el: Delete file diff --git a/lisp/emacs-lisp/cl-types.el b/lisp/emacs-lisp/cl-types.el deleted file mode 100644 index c265e50f0f2..00000000000 --- a/lisp/emacs-lisp/cl-types.el +++ /dev/null @@ -1,53 +0,0 @@ -;; -*- lexical-binding: t; -*- - -;;; Old Sizes: - -;; % (cd lisp/emacs-lisp/; l cl-*.elc) -;; -rw-r--r-- 1 monnier monnier 68920 5 mai 13:49 cl-generic.elc -;; -rw-r--r-- 1 monnier monnier 41841 5 mai 13:49 cl-preloaded.elc -;; -rw-r--r-- 1 monnier monnier 23037 5 mai 13:58 cl-lib.elc -;; -rw-r--r-- 1 monnier monnier 32664 5 mai 14:14 cl-extra.elc -;; -rw-r--r-- 1 monnier monnier 53769 5 mai 14:14 cl-loaddefs.elc -;; -rw-r--r-- 1 monnier monnier 17921 5 mai 14:14 cl-indent.elc -;; -rw-r--r-- 1 monnier monnier 18295 5 mai 14:14 cl-print.elc -;; -rw-r--r-- 1 monnier monnier 101608 5 mai 14:14 cl-macs.elc -;; -rw-r--r-- 1 monnier monnier 43849 5 mai 14:14 cl-seq.elc -;; -rw-r--r-- 1 monnier monnier 8691 5 mai 18:53 cl-types.elc -;; % - -;;; After the move: - -;; % (cd lisp/emacs-lisp/; l cl-*.elc) -;; -rw-r--r-- 1 monnier monnier 46390 5 mai 23:04 cl-preloaded.elc -;; -rw-r--r-- 1 monnier monnier 68920 5 mai 23:04 cl-generic.elc -;; -rw-r--r-- 1 monnier monnier 23620 5 mai 23:05 cl-lib.elc -;; -rw-r--r-- 1 monnier monnier 54752 5 mai 23:15 cl-loaddefs.elc -;; -rw-r--r-- 1 monnier monnier 17921 5 mai 23:05 cl-indent.elc -;; -rw-r--r-- 1 monnier monnier 34065 5 mai 23:05 cl-extra.elc -;; -rw-r--r-- 1 monnier monnier 18295 5 mai 23:05 cl-print.elc -;; -rw-r--r-- 1 monnier monnier 102581 5 mai 23:05 cl-macs.elc -;; -rw-r--r-- 1 monnier monnier 159 5 mai 23:05 cl-types.elc -;; -rw-r--r-- 1 monnier monnier 43849 5 mai 23:05 cl-seq.elc -;; % - -;; cl-preloaded: +4549 41841 => 46390 -;; cl-lib: + 583 23037 => 23620 -;; cl-macs: + 973 101608 => 102581 -;; cl-extra +1401 32664 => 34065 -;; cl-loaddefs: + 983 53769 => 54752 - -;; Data types defined by `cl-deftype' are now recognized as argument -;; types for dispatching generic functions methods. - -;; Needed until merged in existing libraries. -(require 'cl-lib) -(eval-when-compile (require 'cl-macs)) ;For cl--find-class. -(declare-function cl-remprop "cl-extra" (symbol propname)) -(declare-function cl--class-children "cl-extra" (class)) - - - - -(provide 'cl-types) - -;;; cl-types.el ends here commit b13044dae3db9c449a93f52fecfd848a3e7dd67d Author: Stefan Monnier Date: Wed May 7 13:24:07 2025 -0400 cl-types: The big renaming to "derived types" `cl-defstruct` also defines a type and is also in CL, so "cl-type" is not precise enough to talk about those types defined with `cl-deftype`. Use the term "derived type" to be more clear, as is done in the HyperSpec. * doc/misc/cl.texi (Derived types): Move `cl-deftype` to this new subsection. Document the use of derived types as method specializers. * lisp/emacs-lisp/cl-extra.el (cl--types-of-memo): Rename from `cl--type-unique`. (cl--derived-type-dispatch-list): Rename from `cl--type-dispatch-list`. (cl--derived-type-generalizer): Rename from `cl--type-generalizer`. (cl--derived-type-generalizers): Rename from `cl--type-generalizers`. * lisp/emacs-lisp/cl-lib.el (cl-generic-generalizers) : Rename from . Catch but don't hide errors when a derived type cannot be used as an atomic type specifier. * lisp/emacs-lisp/cl-preloaded.el (cl--derived-type-list): Rename from `cl--type-list`. (cl-derived-type-class): Rename from `cl-type-class`. (cl--derived-type-class-make): Rename from `cl--type-class-make`. (cl--define-derived-type): Rename from `cl--type-deftype`. diff --git a/doc/misc/cl.texi b/doc/misc/cl.texi index 4bceddb8196..a1246b11a8a 100644 --- a/doc/misc/cl.texi +++ b/doc/misc/cl.texi @@ -888,8 +888,12 @@ floats. In all other circumstances, @code{cl-coerce} signals an error. @end defun -@defmac cl-deftype name arglist forms@dots{} -This macro defines a new type called @var{name}. It is similar +@node Derived types +@subsection Derived types + +@defmac cl-deftype name arglist [docstring] [decls] forms@dots{} +This macro defines a new type called @var{name}. +Types defined this way are called @dfn{derived types}. It is similar to @code{defmacro} in many ways; when @var{name} is encountered as a type name, the body @var{forms} are evaluated and should return a type specifier that is equivalent to the type. The @@ -923,6 +927,26 @@ The @code{cl-typecase} (@pxref{Conditionals}) and @code{cl-check-type} @code{cl-concatenate}, and @code{cl-merge} functions take type-name arguments to specify the type of sequence to return. @xref{Sequences}. +Contrary to Common Lisp, CL-Lib supports the use of derived types +as method specializers. This comes with a significant caveat: derived +types are much too flexible for Emacs to be able to automatically find +out which type is a subtype of another, so the ordering of +methods is not well-defined when several methods are applicable for +a given argument value and the specializer of one or more of those +methods is a derived type. To make the order more well-defined, a derived type +definition can explicitly state that it is a subtype of others using the +@var{decls} argument: + +@example +(cl-deftype unsigned-byte (&optional bits) + (list 'integer 0 (if (eq bits '*) bits (1- (ash 1 bits))))) + +(cl-deftype unsigned-8bits () + "Unsigned 8-bits integer." + (declare (parents unsigned-byte)) + '(unsigned-byte 8)) +@end example + @node Equality Predicates @section Equality Predicates diff --git a/lisp/emacs-lisp/cl-extra.el b/lisp/emacs-lisp/cl-extra.el index f232f06718e..b3886b5bde3 100644 --- a/lisp/emacs-lisp/cl-extra.el +++ b/lisp/emacs-lisp/cl-extra.el @@ -965,7 +965,7 @@ Outputs to the current buffer." (insert (propertize "\nClass Allocated Slots:\n\n" 'face 'bold)) (mapc #'cl--describe-class-slot cslots)))) -;;;; Method dispatch on `cl-deftype' types. +;;;; Method dispatch on `cl-deftype' types (a.k.a "derived types"). ;; Extend `cl-deftype' to define data types which are also valid ;; argument types for dispatching generic function methods (see also @@ -978,8 +978,8 @@ Outputs to the current buffer." ;; - `cl-types-of', that returns the types an object belongs to. ;; Ensure each type satisfies `eql'. -(defvar cl--type-unique (make-hash-table :test 'equal) - "Record an unique value of each type.") +(defvar cl--types-of-memo (make-hash-table :test 'equal) + "Memoization table used in `cl-types-of'.") ;; FIXME: `cl-types-of' CPU cost is proportional to the number of types ;; defined with `cl-deftype', so the more popular it gets, the slower @@ -1007,9 +1007,12 @@ Outputs to the current buffer." ;; one of them (`cl-typep' itself being a recursive function that ;; basically interprets the type language). This is going to slow ;; down dispatch very significantly for those generic functions that -;; have a method that dispatches on a user defined type, compared to +;; have a method that dispatches on a derived type, compared to ;; those that don't. ;; +;; As a simple optimization, the method dispatch tests only those +;; derived types which have been used as a specialize in a method. +;; ;; A possible further improvement: ;; ;; - based on the PARENTS declaration, create a map from builtin-type @@ -1019,19 +1022,18 @@ Outputs to the current buffer." ;; associated with the `t' "dummy parent". [ We could even go crazy ;; and try and guess PARENTS when not provided, by analyzing the ;; type's definition. ] -;; ;; - in `cl-types-of' start by calling `cl-type-of', then use the map ;; to find which cl-types may need to be checked. ;; ;;;###autoload (defun cl-types-of (object &optional types) - "Return the types OBJECT belongs to. + "Return the atomic types OBJECT belongs to. Return an unique list of types OBJECT belongs to, ordered from the most specific type to the most general. TYPES is an internal argument." (let* ((found nil)) ;; Build a list of all types OBJECT belongs to. - (dolist (type (or types cl--type-list)) + (dolist (type (or types cl--derived-type-list)) (and ;; If OBJECT is of type, add type to the matching list. (if types @@ -1041,25 +1043,28 @@ TYPES is an internal argument." (cl-typep object type) (condition-case-unless-debug e (cl-typep object type) - (error (setq cl--type-list (delq type cl--type-list)) + (error (setq cl--derived-type-list (delq type cl--derived-type-list)) (warn "cl-types-of %S: %s" type (error-message-string e)) nil))) (push type found))) (push (cl-type-of object) found) - ;; Return an unique value of the list of types OBJECT belongs to, - ;; which is also the list of specifiers for OBJECT. - (with-memoization (gethash found cl--type-unique) + ;; Return the list of types OBJECT belongs to, which is also the list + ;; of specifiers for OBJECT. This memoization has two purposes: + ;; - Speed up computation. + ;; - Make sure we always return the same (eq) object, so that the + ;; method dispatch's own caching works as it should. + (with-memoization (gethash found cl--types-of-memo) ;; Compute an ordered list of types from the DAG. (let (dag) (dolist (type found) (push (cl--class-allparents (cl--find-class type)) dag)) (merge-ordered-lists dag))))) -(defvar cl--type-dispatch-list nil +(defvar cl--derived-type-dispatch-list nil "List of types that need to be checked during dispatch.") -(cl-generic-define-generalizer cl--type-generalizer +(cl-generic-define-generalizer cl--derived-type-generalizer ;; FIXME: This priority can't be always right. :-( ;; E.g. a method dispatching on a type like (or number function), ;; should take precedence over a method on `t' but not over a method @@ -1070,22 +1075,22 @@ TYPES is an internal argument." ;; suffer from "undefined method ordering" problems, unless/until we ;; restrict it somehow to a subset that we can handle reliably. 20 ;; "typeof" < "cl-types-of" < "head" priority - (lambda (obj &rest _) `(cl-types-of ,obj cl--type-dispatch-list)) + (lambda (obj &rest _) `(cl-types-of ,obj cl--derived-type-dispatch-list)) (lambda (tag &rest _) (if (consp tag) tag))) ;;;###autoload -(defun cl--type-generalizers (type) +(defun cl--derived-type-generalizers (type) ;; Add a new dispatch type to the dispatch list, then - ;; synchronize with `cl--type-list' so that both lists follow + ;; synchronize with `cl--derived-type-list' so that both lists follow ;; the same type precedence order. ;; The `merge-ordered-lists' is `cl-types-of' should we make this ;; ordering unnecessary, but it's still handy for all those types ;; that don't declare their parents. - (unless (memq type cl--type-dispatch-list) - (setq cl--type-dispatch-list - (seq-intersection cl--type-list - (cons type cl--type-dispatch-list)))) - (list cl--type-generalizer)) + (unless (memq type cl--derived-type-dispatch-list) + (setq cl--derived-type-dispatch-list + (seq-intersection cl--derived-type-list + (cons type cl--derived-type-dispatch-list)))) + (list cl--derived-type-generalizer)) ;;;; Trailer diff --git a/lisp/emacs-lisp/cl-lib.el b/lisp/emacs-lisp/cl-lib.el index 2de81311380..7d013dfca5f 100644 --- a/lisp/emacs-lisp/cl-lib.el +++ b/lisp/emacs-lisp/cl-lib.el @@ -566,14 +566,14 @@ If ALIST is non-nil, the new pairs are prepended to it." ;; Also, there is no mechanism to autoload methods, so this can't be ;; moved to `cl-extra.el'. nil - (declare-function cl--type-generalizers "cl-extra" (type)) - (cl-defmethod cl-generic-generalizers :extra "cl-types-of" (type) - "Support for dispatch on cl-types." - (if (and (symbolp type) (cl-type-class-p (cl--find-class type)) + (declare-function cl--derived-type-generalizers "cl-extra" (type)) + (cl-defmethod cl-generic-generalizers :extra "derived-types" (type) + "Support for dispatch on derived types, i.e. defined with `cl-deftype'." + (if (and (symbolp type) (cl-derived-type-class-p (cl--find-class type)) ;; Make sure this derived type can be used without arguments. (let ((expander (get type 'cl-deftype-handler))) - (and expander (ignore-errors (funcall expander))))) - (cl--type-generalizers type) + (and expander (with-demoted-errors "%S" (funcall expander))))) + (cl--derived-type-generalizers type) (cl-call-next-method)))) (defun cl--old-struct-type-of (orig-fun object) diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index 424ebe2c7ad..0fc791890aa 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -3785,7 +3785,7 @@ macro that returns its `&whole' argument." ;;;###autoload (defmacro cl-deftype (name arglist &rest body) - "Define NAME as a new data type. + "Define NAME as a new, so-called derived type. The type NAME can then be used in `cl-typecase', `cl-check-type', etc., and to some extent, as method specializer. @@ -3816,20 +3816,15 @@ If PARENTS is non-nil, ARGLIST must be nil." (cl-callf (lambda (x) (delq declares x)) decls))) (and parents arglist (error "Parents specified, but arglist not empty")) - `(eval-and-compile ;;cl-eval-when (compile load eval) - ;; FIXME: Where should `cl--type-deftype' go? Currently, code - ;; using `cl-deftype' can use (eval-when-compile (require - ;; 'cl-lib)), so `cl--type-deftype' needs to go either to - ;; `cl-preloaded.el' or it should be autoloaded even when - ;; `cl-lib' is not loaded. - (cl--type-deftype ',name ',parents ',arglist ,docstring) + `(eval-and-compile + (cl--define-derived-type ',name ',parents ',arglist ,docstring) (define-symbol-prop ',name 'cl-deftype-handler (cl-function (lambda (&cl-defs ('*) ,@arglist) ,@decls ,@forms)))))) -(static-if (not (fboundp 'cl--type-deftype)) +(static-if (not (fboundp 'cl--define-derived-type)) nil ;; Can't define it yet! (cl-deftype extended-char () '(and character (not base-char)))) diff --git a/lisp/emacs-lisp/cl-preloaded.el b/lisp/emacs-lisp/cl-preloaded.el index 0447191bbc7..7dac0519681 100644 --- a/lisp/emacs-lisp/cl-preloaded.el +++ b/lisp/emacs-lisp/cl-preloaded.el @@ -467,18 +467,18 @@ The fields are used as follows: ;;;; Support for `cl-deftype'. -(defvar cl--type-list nil +(defvar cl--derived-type-list nil "Precedence list of the defined cl-types.") ;; FIXME: The `cl-deftype-handler' property should arguably be turned ;; into a field of this struct (but it has performance and ;; compatibility implications, so let's not make that change for now). (cl-defstruct - (cl-type-class + (cl-derived-type-class (:include cl--class) (:noinline t) (:constructor nil) - (:constructor cl--type-class-make + (:constructor cl--derived-type-class-make (name docstring parent-types @@ -489,15 +489,15 @@ The fields are used as follows: (error "Unknown type: %S" type))) parent-types)))) (:copier nil)) - "Type descriptors for types defined by `cl-deftype'.") + "Type descriptors for derived types, i.e. defined by `cl-deftype'.") -(defun cl--type-deftype (name parents arglist &optional docstring) - "Register cl-type with NAME for method dispatching. +(defun cl--define-derived-type (name parents arglist &optional docstring) + "Register derived type with NAME for method dispatching. PARENTS is a list of types NAME is a subtype of, or nil. DOCSTRING is an optional documentation string." (let* ((class (cl--find-class name))) (when class - (or (cl-type-class-p class) + (or (cl-derived-type-class-p class) ;; FIXME: We have some uses `cl-deftype' in Emacs that ;; "complement" another declaration of the same type, ;; so maybe we should turn this into a warning (and @@ -505,11 +505,11 @@ DOCSTRING is an optional documentation string." (error "Type in another class: %S" (type-of class)))) ;; Setup a type descriptor for NAME. (setf (cl--find-class name) - (cl--type-class-make name docstring parents)) + (cl--derived-type-class-make name docstring parents)) ;; Record new type. The constructor of the class ;; `cl-type-class' already ensures that parent types must be ;; defined before their "child" types (i.e. already added to - ;; the `cl--type-list' for types defined with `cl-deftype'). + ;; the `cl--derived-type-list' for types defined with `cl-deftype'). ;; So it is enough to simply push a new type at the beginning ;; of the list. ;; Redefinition is more complicated, because child types may @@ -524,11 +524,11 @@ DOCSTRING is an optional documentation string." ;; `parents` slots point to the old class object. That's a ;; problem that affects all types and that we don't really try ;; to solve currently. - (or (memq name cl--type-list) + (or (memq name cl--derived-type-list) ;; Exclude types that can't be used without arguments. ;; They'd signal errors in `cl-types-of'! (not (memq (car arglist) '(nil &rest &optional &keys))) - (push name cl--type-list)))) + (push name cl--derived-type-list)))) ;; Make sure functions defined with cl-defsubst can be inlined even in ;; packages which do not require CL. We don't put an autoload cookie commit f6f35644b7f49732fe38fac3c199ef3a6a22abe7 Author: David Ponce Date: Wed May 7 12:24:00 2025 -0400 (cl-types-of): Fix two plain bugs * lisp/emacs-lisp/cl-extra.el (cl-types-of): Fix error handling. Don't mutate `found` since it's stored as key in the hash-table. diff --git a/lisp/emacs-lisp/cl-extra.el b/lisp/emacs-lisp/cl-extra.el index bd7bb96dd6a..f232f06718e 100644 --- a/lisp/emacs-lisp/cl-extra.el +++ b/lisp/emacs-lisp/cl-extra.el @@ -1035,24 +1035,26 @@ TYPES is an internal argument." (and ;; If OBJECT is of type, add type to the matching list. (if types - ;; For method dispatch, we don't need to filter out errors, since - ;; we can presume that method dispatch is used only on + ;; For method dispatch, we don't need to filter out errors, + ;; since we can presume that method dispatch is used only on ;; sanely-defined types. (cl-typep object type) (condition-case-unless-debug e (cl-typep object type) (error (setq cl--type-list (delq type cl--type-list)) (warn "cl-types-of %S: %s" - type (error-message-string e))))) + type (error-message-string e)) + nil))) (push type found))) (push (cl-type-of object) found) ;; Return an unique value of the list of types OBJECT belongs to, ;; which is also the list of specifiers for OBJECT. (with-memoization (gethash found cl--type-unique) ;; Compute an ordered list of types from the DAG. - (merge-ordered-lists - (mapcar (lambda (type) (cl--class-allparents (cl--find-class type))) - (nreverse found)))))) + (let (dag) + (dolist (type found) + (push (cl--class-allparents (cl--find-class type)) dag)) + (merge-ordered-lists dag))))) (defvar cl--type-dispatch-list nil "List of types that need to be checked during dispatch.") commit 5fee8a04335c0699d6072a9d775df2b197ad7c41 Author: Juri Linkov Date: Wed May 7 09:45:36 2025 +0300 ; * etc/NEWS: Add 'comment-setup-function'. diff --git a/etc/NEWS b/etc/NEWS index 146cdedaa43..109f997ead7 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2301,6 +2301,11 @@ provide instructions for finding the definition. New convenience function 'find-function-update-type-alist' offers a concise way to update a symbol's 'find-function-type-alist' property. +--- +** New function variable 'comment-setup-function' for multi-language modes. +It can set comment-related variables such as 'comment-start' +depending on the language under point. + +++ ** 'inhibit-message' can now inhibit clearing of the echo area. Binding 'inhibit-message' to a non-nil value will now suppress both commit 47b075e24b65b0c07ea3e887b9c6d46ba8fbaa78 Author: Juri Linkov Date: Wed May 7 09:31:01 2025 +0300 Update the default value of 'diff-outline-regexp'. * lisp/vc/diff-mode.el (diff-outline-regexp): Change the default value to match the diff command name in recursive diff. Move after 'diff-hunk-header-re' variable definition used in the new value. (diff-setup-buffer-type): Change setq of 'diff-outline-regexp' to buffer-local (bug#78269). diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el index e3cc266a1af..e64a2b0b57e 100644 --- a/lisp/vc/diff-mode.el +++ b/lisp/vc/diff-mode.el @@ -174,8 +174,6 @@ The default \"-b\" means to ignore whitespace-only changes, (defvar-local diff-default-directory nil "The default directory where the current Diff buffer was created.") -(defvar diff-outline-regexp - "\\([*+][*+][*+] [^0-9]\\|@@ ...\\|\\*\\*\\* [0-9].\\|--- [0-9]..\\)") ;;;; ;;;; keymap, menu, ... @@ -614,6 +612,9 @@ See https://lists.gnu.org/r/emacs-devel/2007-11/msg01990.html") (defconst diff-separator-re "^--+ ?$") +(defvar diff-outline-regexp + (concat "\\(^diff.*\\|" diff-hunk-header-re "\\)")) + (defvar diff-narrowed-to nil) (defun diff-hunk-style (&optional style) @@ -1719,7 +1720,7 @@ modified lines of the diff." 'hg nil)))) (when (eq diff-buffer-type 'git) - (setq diff-outline-regexp + (setq-local diff-outline-regexp (concat "\\(^diff --git.*\\|" diff-hunk-header-re "\\)"))) (setq-local outline-level #'diff--outline-level) (setq-local outline-regexp diff-outline-regexp)) commit ddc7bd547a2b422c4b8dca30076c0d9b70de09ad Author: Juri Linkov Date: Wed May 7 09:20:18 2025 +0300 Don't ignore errors in diff-syntax-fontify-hunk. * lisp/nxml/nxml-mode.el (nxml-extend-region): Protect against error "Invalid search bound (wrong side of point)". * lisp/vc/diff-mode.el (diff-syntax-fontify-hunk): Use 'with-demoted-errors' instead of 'ignore-errors'. diff --git a/lisp/nxml/nxml-mode.el b/lisp/nxml/nxml-mode.el index 7acc19b9058..1f2c7e81a09 100644 --- a/lisp/nxml/nxml-mode.el +++ b/lisp/nxml/nxml-mode.el @@ -817,7 +817,8 @@ Called with `font-lock-beg' and `font-lock-end' dynamically bound." (skip-syntax-forward " ") ;; find the beginning of the previous tag - (when (not (equal (char-after) ?\<)) + (when (and (not (equal (char-after) ?\<)) + (< nxml-prolog-end (point))) (search-backward "<" nxml-prolog-end t)) (nxml-ensure-scan-up-to-date) (nxml-move-outside-backwards) diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el index a5f4169a7f3..e3cc266a1af 100644 --- a/lisp/vc/diff-mode.el +++ b/lisp/vc/diff-mode.el @@ -3181,11 +3181,7 @@ When OLD is non-nil, highlight the hunk from the old source." ((memq diff-font-lock-syntax '(hunk-also hunk-only)) (with-temp-buffer (insert text) - ;; Enabling a major mode on a single hunk without - ;; sufficient context often raises many errors such as - ;; "Premature end of data", "Invalid search bound", etc. - ;; So need to ignore all these errors. - (ignore-errors + (with-demoted-errors "%S" (diff-syntax-fontify-props file text line-nb t))))))))) ;; Put properties over the hunk text commit 0b4eb525b69822c6b503982ef49980c72c8d0232 Author: Yuan Fu Date: Tue May 6 20:57:06 2025 -0700 Make treesit--simple-indent-eval more permissive (bug#78065) * lisp/treesit.el (treesit--simple-indent-eval): Allow EXP to be anything, so higher-order indent presets can take anything as an argument: t, nil, symbols, keywords, etc. diff --git a/lisp/treesit.el b/lisp/treesit.el index a26625eca57..2b5989fcaee 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -1902,14 +1902,12 @@ the function." ;; `functionp'. ((alist-get exp treesit-simple-indent-presets)) ((functionp exp) exp) - ((symbolp exp) - (if (null exp) - exp - ;; Matchers only return lambdas, anchors only return - ;; integer, so we should never see a variable. - (signal 'treesit-indent-error - (list "Couldn't find the preset corresponding to expression" - exp)))) + ;; There are higher-order presets that take arguments, like + ;; (nth-sibling 1 t), so it's possible for exp to be something + ;; other than numbers and functions. Don't signal an error if + ;; exp isn't a function nor a number. In fact, allow exp to be + ;; any symbol or keyword, so users can define higher-order + ;; presets that takes keyword or symbol as arguments. (t exp))) ;; This variable might seem unnecessary: why split commit 2eb90d43e6e3b8325503d56c7778b9245b930d88 Author: Stefan Monnier Date: Tue May 6 23:04:46 2025 -0400 (cl-generic-generalizers): Fix typo in last change diff --git a/lisp/emacs-lisp/cl-lib.el b/lisp/emacs-lisp/cl-lib.el index dd89ed872b7..2de81311380 100644 --- a/lisp/emacs-lisp/cl-lib.el +++ b/lisp/emacs-lisp/cl-lib.el @@ -572,7 +572,7 @@ If ALIST is non-nil, the new pairs are prepended to it." (if (and (symbolp type) (cl-type-class-p (cl--find-class type)) ;; Make sure this derived type can be used without arguments. (let ((expander (get type 'cl-deftype-handler))) - (and expander (ignore-error (funcall expander))))) + (and expander (ignore-errors (funcall expander))))) (cl--type-generalizers type) (cl-call-next-method)))) commit 147113b3b5a89b401448424dd01c4ac915ea6081 Author: Stefan Monnier Date: Tue May 6 22:53:01 2025 -0400 (cl-generic-generalizers): Skip types that need arguments * lisp/emacs-lisp/cl-lib.el (cl-generic-generalizers) "cl-types-of": make sure the atomic derived type is valid. diff --git a/lisp/emacs-lisp/cl-lib.el b/lisp/emacs-lisp/cl-lib.el index ff014965eb9..dd89ed872b7 100644 --- a/lisp/emacs-lisp/cl-lib.el +++ b/lisp/emacs-lisp/cl-lib.el @@ -568,10 +568,13 @@ If ALIST is non-nil, the new pairs are prepended to it." nil (declare-function cl--type-generalizers "cl-extra" (type)) (cl-defmethod cl-generic-generalizers :extra "cl-types-of" (type) - "Support for dispatch on cl-types." - (if (and (symbolp type) (cl-type-class-p (cl--find-class type))) - (cl--type-generalizers type) - (cl-call-next-method)))) + "Support for dispatch on cl-types." + (if (and (symbolp type) (cl-type-class-p (cl--find-class type)) + ;; Make sure this derived type can be used without arguments. + (let ((expander (get type 'cl-deftype-handler))) + (and expander (ignore-error (funcall expander))))) + (cl--type-generalizers type) + (cl-call-next-method)))) (defun cl--old-struct-type-of (orig-fun object) (or (and (vectorp object) (> (length object) 0) commit fa05cfd4455f2883d16992e5f1323a8945956987 Author: Po Lu Date: Tue May 6 22:29:46 2025 +0800 Fix compilation on Android 35 and on Termux * configure.ac (gl_cv_onwards_func_tzalloc): Define to "future OS version" on Android API 35 and later. Detect posix_spawn* by means of gl_CHECK_FUNCS_ANDROID. * src/conf_post.h (tzalloc, tzfree): Define to non-conflicting names on Android 35 and later. diff --git a/configure.ac b/configure.ac index eeb5f40d246..fddb2b9be3c 100644 --- a/configure.ac +++ b/configure.ac @@ -49,6 +49,11 @@ if test "$XCONFIGURE" = "android"; then CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=32" enable_largefile=no enable_year2038=no]) + # Gnulib should not attempt not to reimplement tzalloc, as strftime + # attempts to link with symbols that are only present in the Gnulib + # replacement. + AS_IF([test "$ANDROID_SDK" -ge "35"], + [gl_cv_onwards_func_tzalloc="future OS version"]) fi dnl Set emacs_config_options to the options of 'configure', quoted for the shell, @@ -6341,10 +6346,10 @@ dnl posix_spawn. The chdir and setsid functionality is relatively dnl recent, so we check for it specifically. AC_CHECK_HEADERS([spawn.h]) AC_SUBST([HAVE_SPAWN_H]) -AC_CHECK_FUNCS([posix_spawn \ - posix_spawn_file_actions_addchdir \ - posix_spawn_file_actions_addchdir_np \ - posix_spawnattr_setflags]) +gl_CHECK_FUNCS_ANDROID([posix_spawn], [#include ]) +gl_CHECK_FUNCS_ANDROID([posix_spawn_file_actions_addchdir], [#include ]) +gl_CHECK_FUNCS_ANDROID([posix_spawn_file_actions_addchdir_np], [#include ]) +gl_CHECK_FUNCS_ANDROID([posix_spawnattr_setflags], [#include ]) AC_SUBST([HAVE_POSIX_SPAWN]) AC_SUBST([HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR]) AC_SUBST([HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR_NP]) diff --git a/src/conf_post.h b/src/conf_post.h index 6be76d5481a..7b6c2bc933b 100644 --- a/src/conf_post.h +++ b/src/conf_post.h @@ -395,3 +395,14 @@ extern int emacs_setenv_TZ (char const *); : S_ISCHR (mode) ? DT_CHR : S_ISFIFO (mode) ? DT_FIFO \ : S_ISSOCK (mode) ? DT_SOCK : DT_UNKNOWN) #endif /* MSDOS */ + +#if defined __ANDROID__ && __ANDROID_API__ >= 35 +#define _GL_TIME_H +#include +#undef _GL_TIME_H + +/* Redefine tzalloc and tzfree so as not to conflict with their + system-provided versions, which are incompatible. */ +#define tzalloc rpl_tzalloc +#define tzfree rpl_tzfree +#endif /* defined __ANDROID__ && __ANDROID_API__ >= 35 */ commit ed7b55f6bf1b8d0ceb40c9e196d8b31fd6afc21e Author: Michael Albinus Date: Tue May 6 12:22:45 2025 +0200 Adapt Tramp tests * test/lisp/net/tramp-tests.el (tramp-test29-start-file-process) (tramp-test30-make-process): Adapt tests. diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el index e22f1afc18b..2c95cf97ff4 100644 --- a/test/lisp/net/tramp-tests.el +++ b/test/lisp/net/tramp-tests.el @@ -5401,6 +5401,12 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." (with-timeout (10 (tramp--test-timeout-handler)) (while (< (- (point-max) (point-min)) (length "foo")) (while (accept-process-output proc 0 nil t)))) + ;; Some `cat' implementations do not support the `cat -' + ;; call. We skip then. + (skip-unless + (not + (string-match-p (rx "cat: -: input file is output file\n") + (buffer-string)))) (should (string-match-p "foo" (buffer-string)))) ;; Cleanup. @@ -5595,6 +5601,12 @@ If UNSTABLE is non-nil, the test is tagged as `:unstable'." (with-timeout (10 (tramp--test-timeout-handler)) (while (< (- (point-max) (point-min)) (length "foo")) (while (accept-process-output proc 0 nil t)))) + ;; Some `cat' implementations do not support the `cat -' + ;; call. We skip then. + (skip-unless + (not + (string-match-p (rx "cat: -: input file is output file\n") + (buffer-string)))) (should (string-match-p "foo" (buffer-string)))) ;; Cleanup. commit 852d50ecfcfa505ca245be8d82123b27cc967f73 Author: Elijah Gabe Pérez Date: Tue May 6 10:58:31 2025 +0100 Eglot: bind mouse-1 to margin and mode-line code actions * lisp/progmodes/eglot.el (eglot-mode-line-action-suggestion): advertise mouse-1. (eglot-diagnostics-map): Bind left-margin mouse-1 (eglot-code-action-suggestion): Advertise mouse 1. Simplify. Co-authored-by: João Távora diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index 474245352d6..d33b0b05fd4 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -2531,7 +2531,11 @@ still unanswered LSP requests to the server\n")))) '(:eval (when (and (memq 'mode-line eglot-code-action-indications) (overlay-buffer eglot--suggestion-overlay)) - (overlay-get eglot--suggestion-overlay 'eglot--suggestion-tooltip))) + (eglot--mode-line-props + eglot-code-action-indicator 'eglot-code-action-indicator-face + `((mouse-1 + eglot-code-actions-at-mouse + "execute code actions at point"))))) "Eglot mode line construct for at-point code actions.") (add-to-list @@ -2578,7 +2582,7 @@ still unanswered LSP requests to the server\n")))) (defvar eglot-diagnostics-map (let ((map (make-sparse-keymap))) (define-key map [mouse-2] #'eglot-code-actions-at-mouse) - (define-key map [left-margin mouse-2] #'eglot-code-actions-at-mouse) + (define-key map [left-margin mouse-1] #'eglot-code-actions-at-mouse) map) "Keymap active in Eglot-backed Flymake diagnostic overlays.") @@ -4146,14 +4150,13 @@ at point. With prefix argument, prompt for ACTION-KIND." (setq tooltip (propertize eglot-code-action-indicator 'face 'eglot-code-action-indicator-face - 'help-echo blurb + 'help-echo "mouse-1: execute code actions at point" 'mouse-face 'highlight 'keymap eglot-diagnostics-map)) (save-excursion (goto-char (car bounds)) (let ((ov (make-overlay (car bounds) (cadr bounds)))) (overlay-put ov 'eglot--actions actions) - (overlay-put ov 'eglot--suggestion-tooltip tooltip) (overlay-put ov 'before-string commit fc4d8ce9514dd45ab34dbef6f023347b42ee9fef Author: Stefan Monnier Date: Mon May 5 23:18:56 2025 -0400 cl-types: Integrate into CL-Lib * lisp/emacs-lisp/cl-extra.el (cl--type-unique, cl-types-of) (cl--type-dispatch-list, cl--type-generalizer): Move to `cl-extra.el`. (cl--type-generalizers): New function extracted from "cl-types-of" method of `cl-generic-generalizers`. * lisp/emacs-lisp/cl-lib.el (cl-generic-generalizers): New method to dispatch on derived types. Use `cl--type-generalizers`. * lisp/emacs-lisp/cl-macs.el (cl-deftype): Move from `cl-types.el` and rename from `cl-deftype2`. (extended-char): Tweak definition to fix bootstrapping issues. * lisp/emacs-lisp/cl-preloaded.el (cl--type-list, cl-type-class) (cl--type-deftype): Move from `cl-types.el`. * lisp/emacs-lisp/oclosure.el (oclosure): Don't abuse `cl-deftype` to register the predicate function. * test/lisp/emacs-lisp/cl-extra-tests.el: Move tests from `cl-type-tests.el`. diff --git a/lisp/emacs-lisp/cl-extra.el b/lisp/emacs-lisp/cl-extra.el index 6390d17a5b7..bd7bb96dd6a 100644 --- a/lisp/emacs-lisp/cl-extra.el +++ b/lisp/emacs-lisp/cl-extra.el @@ -965,6 +965,127 @@ Outputs to the current buffer." (insert (propertize "\nClass Allocated Slots:\n\n" 'face 'bold)) (mapc #'cl--describe-class-slot cslots)))) +;;;; Method dispatch on `cl-deftype' types. + +;; Extend `cl-deftype' to define data types which are also valid +;; argument types for dispatching generic function methods (see also +;; ). +;; +;; The main entry points are: +;; +;; - `cl-deftype', that defines new data types. +;; +;; - `cl-types-of', that returns the types an object belongs to. + +;; Ensure each type satisfies `eql'. +(defvar cl--type-unique (make-hash-table :test 'equal) + "Record an unique value of each type.") + +;; FIXME: `cl-types-of' CPU cost is proportional to the number of types +;; defined with `cl-deftype', so the more popular it gets, the slower +;; it becomes. And of course, the cost of each type check is +;; unbounded, so a single "expensive" type can slow everything down +;; further. +;; +;; The usual dispatch is +;; +;; (lambda (arg &rest args) +;; (let ((f (gethash (cl-typeof arg) precomputed-methods-table))) +;; (if f +;; (apply f arg args) +;; ;; Slow case when encountering a new type +;; ...))) +;; +;; where often the most expensive part is `&rest' (which has to +;; allocate a list for those remaining arguments), +;; +;; So we're talking about replacing +;; +;; &rest + cl-type-of + gethash + if + apply +;; +;; with a function that loops over N types, calling `cl-typep' on each +;; one of them (`cl-typep' itself being a recursive function that +;; basically interprets the type language). This is going to slow +;; down dispatch very significantly for those generic functions that +;; have a method that dispatches on a user defined type, compared to +;; those that don't. +;; +;; A possible further improvement: +;; +;; - based on the PARENTS declaration, create a map from builtin-type +;; to the set of cl-types that have that builtin-type among their +;; parents. That presumes some PARENTS include some builtin-types, +;; obviously otherwise the map will be trivial with all cl-types +;; associated with the `t' "dummy parent". [ We could even go crazy +;; and try and guess PARENTS when not provided, by analyzing the +;; type's definition. ] +;; +;; - in `cl-types-of' start by calling `cl-type-of', then use the map +;; to find which cl-types may need to be checked. +;; +;;;###autoload +(defun cl-types-of (object &optional types) + "Return the types OBJECT belongs to. +Return an unique list of types OBJECT belongs to, ordered from the +most specific type to the most general. +TYPES is an internal argument." + (let* ((found nil)) + ;; Build a list of all types OBJECT belongs to. + (dolist (type (or types cl--type-list)) + (and + ;; If OBJECT is of type, add type to the matching list. + (if types + ;; For method dispatch, we don't need to filter out errors, since + ;; we can presume that method dispatch is used only on + ;; sanely-defined types. + (cl-typep object type) + (condition-case-unless-debug e + (cl-typep object type) + (error (setq cl--type-list (delq type cl--type-list)) + (warn "cl-types-of %S: %s" + type (error-message-string e))))) + (push type found))) + (push (cl-type-of object) found) + ;; Return an unique value of the list of types OBJECT belongs to, + ;; which is also the list of specifiers for OBJECT. + (with-memoization (gethash found cl--type-unique) + ;; Compute an ordered list of types from the DAG. + (merge-ordered-lists + (mapcar (lambda (type) (cl--class-allparents (cl--find-class type))) + (nreverse found)))))) + +(defvar cl--type-dispatch-list nil + "List of types that need to be checked during dispatch.") + +(cl-generic-define-generalizer cl--type-generalizer + ;; FIXME: This priority can't be always right. :-( + ;; E.g. a method dispatching on a type like (or number function), + ;; should take precedence over a method on `t' but not over a method + ;; on `number'. Similarly a method dispatching on a type like + ;; (satisfies (lambda (x) (equal x '(A . B)))) should take precedence + ;; over a method on (head 'A). + ;; Fixing this 100% is impossible so this generalizer is condemned to + ;; suffer from "undefined method ordering" problems, unless/until we + ;; restrict it somehow to a subset that we can handle reliably. + 20 ;; "typeof" < "cl-types-of" < "head" priority + (lambda (obj &rest _) `(cl-types-of ,obj cl--type-dispatch-list)) + (lambda (tag &rest _) (if (consp tag) tag))) + +;;;###autoload +(defun cl--type-generalizers (type) + ;; Add a new dispatch type to the dispatch list, then + ;; synchronize with `cl--type-list' so that both lists follow + ;; the same type precedence order. + ;; The `merge-ordered-lists' is `cl-types-of' should we make this + ;; ordering unnecessary, but it's still handy for all those types + ;; that don't declare their parents. + (unless (memq type cl--type-dispatch-list) + (setq cl--type-dispatch-list + (seq-intersection cl--type-list + (cons type cl--type-dispatch-list)))) + (list cl--type-generalizer)) + +;;;; Trailer (make-obsolete-variable 'cl-extra-load-hook "use `with-eval-after-load' instead." "28.1") diff --git a/lisp/emacs-lisp/cl-lib.el b/lisp/emacs-lisp/cl-lib.el index 4645b4dffb1..ff014965eb9 100644 --- a/lisp/emacs-lisp/cl-lib.el +++ b/lisp/emacs-lisp/cl-lib.el @@ -560,6 +560,19 @@ If ALIST is non-nil, the new pairs are prepended to it." ;; those rare places where we do need it. ) +(static-if (not (fboundp 'cl-defmethod)) + ;; `cl-generic' requires `cl-lib' at compile-time, so `cl-lib' can't + ;; use `cl-defmethod' before `cl-generic' has been compiled. + ;; Also, there is no mechanism to autoload methods, so this can't be + ;; moved to `cl-extra.el'. + nil + (declare-function cl--type-generalizers "cl-extra" (type)) + (cl-defmethod cl-generic-generalizers :extra "cl-types-of" (type) + "Support for dispatch on cl-types." + (if (and (symbolp type) (cl-type-class-p (cl--find-class type))) + (cl--type-generalizers type) + (cl-call-next-method)))) + (defun cl--old-struct-type-of (orig-fun object) (or (and (vectorp object) (> (length object) 0) (let ((tag (aref object 0))) diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index a966ec5eaf6..424ebe2c7ad 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -3786,15 +3786,52 @@ macro that returns its `&whole' argument." ;;;###autoload (defmacro cl-deftype (name arglist &rest body) "Define NAME as a new data type. -The type name can then be used in `cl-typecase', `cl-check-type', etc." - (declare (debug cl-defmacro) (doc-string 3) (indent 2)) - `(cl-eval-when (compile load eval) - (define-symbol-prop ',name 'cl-deftype-handler - (cl-function (lambda (&cl-defs ('*) ,@arglist) ,@body))))) +The type NAME can then be used in `cl-typecase', `cl-check-type', +etc., and to some extent, as method specializer. + +ARGLIST is a Common Lisp argument list of the sort accepted by +`cl-defmacro'. BODY forms should return a type specifier that is equivalent +to the type (see the Info node `(cl)Type Predicates'). -(cl-deftype extended-char () '(and character (not base-char))) -;; Define fixnum so `cl-typep' recognize it and the type check emitted -;; by `cl-the' is effective. +If there is a `declare' form in BODY, the spec (parents . PARENTS) +can specify a list of types NAME is a subtype of. +The list of PARENTS types determines the order of methods invocation, +and missing PARENTS may cause incorrect ordering of methods, while +extraneous PARENTS may cause use of extraneous methods. + +If PARENTS is non-nil, ARGLIST must be nil." + (declare (debug cl-defmacro) (doc-string 3) (indent 2)) + (pcase-let* + ((`(,decls . ,forms) (macroexp-parse-body body)) + (docstring (if (stringp (car decls)) + (car decls) + (cadr (assq :documentation decls)))) + (declares (assq 'declare decls)) + (parent-decl (assq 'parents (cdr declares))) + (parents (cdr parent-decl))) + (when parent-decl + ;; "Consume" the `parents' declaration. + (cl-callf (lambda (x) (delq parent-decl x)) (cdr declares)) + (when (equal declares '(declare)) + (cl-callf (lambda (x) (delq declares x)) decls))) + (and parents arglist + (error "Parents specified, but arglist not empty")) + `(eval-and-compile ;;cl-eval-when (compile load eval) + ;; FIXME: Where should `cl--type-deftype' go? Currently, code + ;; using `cl-deftype' can use (eval-when-compile (require + ;; 'cl-lib)), so `cl--type-deftype' needs to go either to + ;; `cl-preloaded.el' or it should be autoloaded even when + ;; `cl-lib' is not loaded. + (cl--type-deftype ',name ',parents ',arglist ,docstring) + (define-symbol-prop ',name 'cl-deftype-handler + (cl-function + (lambda (&cl-defs ('*) ,@arglist) + ,@decls + ,@forms)))))) + +(static-if (not (fboundp 'cl--type-deftype)) + nil ;; Can't define it yet! + (cl-deftype extended-char () '(and character (not base-char)))) ;;; Additional functions that we can now define because we've defined ;;; `cl-defsubst' and `cl-typep'. diff --git a/lisp/emacs-lisp/cl-preloaded.el b/lisp/emacs-lisp/cl-preloaded.el index dfea8d6c8e3..0447191bbc7 100644 --- a/lisp/emacs-lisp/cl-preloaded.el +++ b/lisp/emacs-lisp/cl-preloaded.el @@ -465,6 +465,71 @@ The fields are used as follows: (setf (cl--class-parents (cl--find-class 'cl-structure-object)) (list (cl--find-class 'record)))) +;;;; Support for `cl-deftype'. + +(defvar cl--type-list nil + "Precedence list of the defined cl-types.") + +;; FIXME: The `cl-deftype-handler' property should arguably be turned +;; into a field of this struct (but it has performance and +;; compatibility implications, so let's not make that change for now). +(cl-defstruct + (cl-type-class + (:include cl--class) + (:noinline t) + (:constructor nil) + (:constructor cl--type-class-make + (name + docstring + parent-types + &aux (parents + (mapcar + (lambda (type) + (or (cl--find-class type) + (error "Unknown type: %S" type))) + parent-types)))) + (:copier nil)) + "Type descriptors for types defined by `cl-deftype'.") + +(defun cl--type-deftype (name parents arglist &optional docstring) + "Register cl-type with NAME for method dispatching. +PARENTS is a list of types NAME is a subtype of, or nil. +DOCSTRING is an optional documentation string." + (let* ((class (cl--find-class name))) + (when class + (or (cl-type-class-p class) + ;; FIXME: We have some uses `cl-deftype' in Emacs that + ;; "complement" another declaration of the same type, + ;; so maybe we should turn this into a warning (and + ;; not overwrite the `cl--find-class' in that case)? + (error "Type in another class: %S" (type-of class)))) + ;; Setup a type descriptor for NAME. + (setf (cl--find-class name) + (cl--type-class-make name docstring parents)) + ;; Record new type. The constructor of the class + ;; `cl-type-class' already ensures that parent types must be + ;; defined before their "child" types (i.e. already added to + ;; the `cl--type-list' for types defined with `cl-deftype'). + ;; So it is enough to simply push a new type at the beginning + ;; of the list. + ;; Redefinition is more complicated, because child types may + ;; be in the list, so moving the type to the head can be + ;; incorrect. The "cheap" solution is to leave the list + ;; unchanged (and hope the redefinition doesn't change the + ;; hierarchy too much). + ;; Side note: Redefinitions introduce other problems as well + ;; because the class object's `parents` slot contains + ;; references to `cl--class` objects, so after a redefinition + ;; via (setf (cl--find-class FOO) ...), the children's + ;; `parents` slots point to the old class object. That's a + ;; problem that affects all types and that we don't really try + ;; to solve currently. + (or (memq name cl--type-list) + ;; Exclude types that can't be used without arguments. + ;; They'd signal errors in `cl-types-of'! + (not (memq (car arglist) '(nil &rest &optional &keys))) + (push name cl--type-list)))) + ;; Make sure functions defined with cl-defsubst can be inlined even in ;; packages which do not require CL. We don't put an autoload cookie ;; directly on that function, since those cookies only go to cl-loaddefs. diff --git a/lisp/emacs-lisp/cl-types.el b/lisp/emacs-lisp/cl-types.el index a466c309a33..c265e50f0f2 100644 --- a/lisp/emacs-lisp/cl-types.el +++ b/lisp/emacs-lisp/cl-types.el @@ -1,5 +1,41 @@ ;; -*- lexical-binding: t; -*- +;;; Old Sizes: + +;; % (cd lisp/emacs-lisp/; l cl-*.elc) +;; -rw-r--r-- 1 monnier monnier 68920 5 mai 13:49 cl-generic.elc +;; -rw-r--r-- 1 monnier monnier 41841 5 mai 13:49 cl-preloaded.elc +;; -rw-r--r-- 1 monnier monnier 23037 5 mai 13:58 cl-lib.elc +;; -rw-r--r-- 1 monnier monnier 32664 5 mai 14:14 cl-extra.elc +;; -rw-r--r-- 1 monnier monnier 53769 5 mai 14:14 cl-loaddefs.elc +;; -rw-r--r-- 1 monnier monnier 17921 5 mai 14:14 cl-indent.elc +;; -rw-r--r-- 1 monnier monnier 18295 5 mai 14:14 cl-print.elc +;; -rw-r--r-- 1 monnier monnier 101608 5 mai 14:14 cl-macs.elc +;; -rw-r--r-- 1 monnier monnier 43849 5 mai 14:14 cl-seq.elc +;; -rw-r--r-- 1 monnier monnier 8691 5 mai 18:53 cl-types.elc +;; % + +;;; After the move: + +;; % (cd lisp/emacs-lisp/; l cl-*.elc) +;; -rw-r--r-- 1 monnier monnier 46390 5 mai 23:04 cl-preloaded.elc +;; -rw-r--r-- 1 monnier monnier 68920 5 mai 23:04 cl-generic.elc +;; -rw-r--r-- 1 monnier monnier 23620 5 mai 23:05 cl-lib.elc +;; -rw-r--r-- 1 monnier monnier 54752 5 mai 23:15 cl-loaddefs.elc +;; -rw-r--r-- 1 monnier monnier 17921 5 mai 23:05 cl-indent.elc +;; -rw-r--r-- 1 monnier monnier 34065 5 mai 23:05 cl-extra.elc +;; -rw-r--r-- 1 monnier monnier 18295 5 mai 23:05 cl-print.elc +;; -rw-r--r-- 1 monnier monnier 102581 5 mai 23:05 cl-macs.elc +;; -rw-r--r-- 1 monnier monnier 159 5 mai 23:05 cl-types.elc +;; -rw-r--r-- 1 monnier monnier 43849 5 mai 23:05 cl-seq.elc +;; % + +;; cl-preloaded: +4549 41841 => 46390 +;; cl-lib: + 583 23037 => 23620 +;; cl-macs: + 973 101608 => 102581 +;; cl-extra +1401 32664 => 34065 +;; cl-loaddefs: + 983 53769 => 54752 + ;; Data types defined by `cl-deftype' are now recognized as argument ;; types for dispatching generic functions methods. @@ -9,271 +45,8 @@ (declare-function cl-remprop "cl-extra" (symbol propname)) (declare-function cl--class-children "cl-extra" (class)) -;; Extend `cl-deftype' to define data types which are also valid -;; argument types for dispatching generic function methods (see also -;; ). -;; -;; The main entry points are: -;; -;; - `cl-deftype', that defines new data types. -;; -;; - `cl-types-of', that returns the types an object belongs to. - -(defvar cl--type-list nil - "Precedence list of the defined cl-types.") - -;; FIXME: The `cl-deftype-handler' property should arguably be turned -;; into a field of this struct (but it has performance and -;; compatibility implications, so let's not make that change for now). -(cl-defstruct - (cl-type-class - (:include cl--class) - (:noinline t) - (:constructor nil) - (:constructor cl--type-class-make - (name - docstring - parent-types - &aux (parents - (mapcar - (lambda (type) - (or (cl--find-class type) - (error "Unknown type: %S" type))) - parent-types)))) - (:copier nil)) - "Type descriptors for types defined by `cl-deftype'.") - -(defun cl--type-p (object) - "Return non-nil if OBJECT is a cl-type. -That is, a type defined by `cl-deftype', of class `cl-type-class'." - (and (symbolp object) (cl-type-class-p (cl--find-class object)))) - -(defun cl--type-deftype (name parents arglist &optional docstring) - "Register cl-type with NAME for method dispatching. -PARENTS is a list of types NAME is a subtype of, or nil. -DOCSTRING is an optional documentation string." - (let* ((class (cl--find-class name))) - (when class - (or (cl-type-class-p class) - ;; FIXME: We have some uses `cl-deftype' in Emacs that - ;; "complement" another declaration of the same type, - ;; so maybe we should turn this into a warning (and - ;; not overwrite the `cl--find-class' in that case)? - (error "Type in another class: %S" (type-of class)))) - ;; Setup a type descriptor for NAME. - (setf (cl--find-class name) - (cl--type-class-make name docstring parents)) - ;; Record new type. The constructor of the class - ;; `cl-type-class' already ensures that parent types must be - ;; defined before their "child" types (i.e. already added to - ;; the `cl--type-list' for types defined with `cl-deftype'). - ;; So it is enough to simply push a new type at the beginning - ;; of the list. - ;; Redefinition is more complicated, because child types may - ;; be in the list, so moving the type to the head can be - ;; incorrect. The "cheap" solution is to leave the list - ;; unchanged (and hope the redefinition doesn't change the - ;; hierarchy too much). - ;; Side note: Redefinitions introduce other problems as well - ;; because the class object's `parents` slot contains - ;; references to `cl--class` objects, so after a redefinition - ;; via (setf (cl--find-class FOO) ...), the children's - ;; `parents` slots point to the old class object. That's a - ;; problem that affects all types and that we don't really try - ;; to solve currently. - (or (memq name cl--type-list) - ;; Exclude types that can't be used without arguments. - ;; They'd signal errors in `cl-types-of'! - (not (memq (car arglist) '(nil &rest &optional &keys))) - (push name cl--type-list)))) - -;;;###autoload -(defmacro cl-deftype2 (name arglist &rest body) - "Define NAME as a new data type. -The type NAME can then be used in `cl-typecase', `cl-check-type', -etc., and as argument type for dispatching generic function methods. - -ARGLIST is a Common Lisp argument list of the sort accepted by -`cl-defmacro'. BODY forms are evaluated and should return a type -specifier that is equivalent to the type (see the Info node `(cl) Type -Predicates' in the GNU Emacs Common Lisp Emulation manual). - -If there is a `declare' form in BODY, the spec (parents PARENTS) is -recognized to specify a list of types NAME is a subtype of. For -instance: - - (cl-deftype2 unsigned-byte (&optional bits) - \"Unsigned integer.\" - (list \\='integer 0 (if (eq bits \\='*) bits (1- (ash 1 bits))))) - - (cl-deftype2 unsigned-8bits () - \"Unsigned 8-bits integer.\" - (declare (parents unsigned-byte)) - \\='(unsigned-byte 8)) - -The list of PARENTS types determines the order of methods invocation, -and missing PARENTS may cause incorrect ordering of methods, while -extraneous PARENTS may cause use of extraneous methods. - -If PARENTS is non-nil, ARGLIST must be nil." - (declare (debug cl-defmacro) (doc-string 3) (indent 2)) - (pcase-let* - ((`(,decls . ,forms) (macroexp-parse-body body)) - (docstring (if (stringp (car decls)) - (car decls) - (cadr (assq :documentation decls)))) - (declares (assq 'declare decls)) - (parent-decl (assq 'parents (cdr declares))) - (parents (cdr parent-decl))) - (when parent-decl - ;; "Consume" the `parents' declaration. - (cl-callf (lambda (x) (delq parent-decl x)) (cdr declares)) - (when (equal declares '(declare)) - (cl-callf (lambda (x) (delq declares x)) decls))) - (if (memq name parents) - (error "Type in parents: %S" parents)) - (and parents arglist - (error "Parents specified, but arglist not empty")) - `(eval-and-compile ;;cl-eval-when (compile load eval) - ;; FIXME: Where should `cl--type-deftype' go? Currently, code - ;; using `cl-deftype' can use (eval-when-compile (require - ;; 'cl-lib)), so `cl--type-deftype' needs to go either to - ;; `cl-preloaded.el' or it should be autoloaded even when - ;; `cl-lib' is not loaded. - (cl--type-deftype ',name ',parents ',arglist ,docstring) - (define-symbol-prop ',name 'cl-deftype-handler - (cl-function - (lambda (&cl-defs ('*) ,@arglist) - ,@decls - ,@forms)))))) - -;; Ensure each type satisfies `eql'. -(defvar cl--type-unique (make-hash-table :test 'equal) - "Record an unique value of each type.") - -;; FIXME: `cl-types-of' CPU cost is proportional to the number of types -;; defined with `cl-deftype', so the more popular it gets, the slower -;; it becomes. And of course, the cost of each type check is -;; unbounded, so a single "expensive" type can slow everything down -;; further. -;; -;; The usual dispatch is -;; -;; (lambda (arg &rest args) -;; (let ((f (gethash (cl-typeof arg) precomputed-methods-table))) -;; (if f -;; (apply f arg args) -;; ;; Slow case when encountering a new type -;; ...))) -;; -;; where often the most expensive part is `&rest' (which has to -;; allocate a list for those remaining arguments), -;; -;; So we're talking about replacing -;; -;; &rest + cl-type-of + gethash + if + apply -;; -;; with a function that loops over N types, calling `cl-typep' on each -;; one of them (`cl-typep' itself being a recursive function that -;; basically interprets the type language). This is going to slow -;; down dispatch very significantly for those generic functions that -;; have a method that dispatches on a user defined type, compared to -;; those that don't. -;; -;; A possible further improvement: -;; -;; - based on the PARENTS declaration, create a map from builtin-type -;; to the set of cl-types that have that builtin-type among their -;; parents. That presumes some PARENTS include some builtin-types, -;; obviously otherwise the map will be trivial with all cl-types -;; associated with the `t' "dummy parent". [ We could even go crazy -;; and try and guess PARENTS when not provided, by analyzing the -;; type's definition. ] -;; -;; - in `cl-types-of' start by calling `cl-type-of', then use the map -;; to find which cl-types may need to be checked. -;; -(defun cl-types-of (object &optional types) - "Return the types OBJECT belongs to. -Return an unique list of types OBJECT belongs to, ordered from the -most specific type to the most general. -TYPES is an internal argument." - (let* ((found nil)) - ;; Build a list of all types OBJECT belongs to. - (dolist (type (or types cl--type-list)) - (and - ;; If OBJECT is of type, add type to the matching list. - (if types - ;; For method dispatch, we don't need to filter out errors, since - ;; we can presume that method dispatch is used only on - ;; sanely-defined types. - (cl-typep object type) - (condition-case-unless-debug e - (cl-typep object type) - (error (setq cl--type-list (delq type cl--type-list)) - (warn "cl-types-of %S: %s" - type (error-message-string e))))) - (push type found))) - (push (cl-type-of object) found) - ;; Return an unique value of the list of types OBJECT belongs to, - ;; which is also the list of specifiers for OBJECT. - (with-memoization (gethash found cl--type-unique) - ;; Compute an ordered list of types from the DAG. - (merge-ordered-lists - (mapcar (lambda (type) (cl--class-allparents (cl--find-class type))) - (nreverse found)))))) - -;;; Method dispatching -;; - -(defvar cl--type-dispatch-list nil - "List of types that need to be checked during dispatch.") - -(cl-generic-define-generalizer cl--type-generalizer - ;; FIXME: This priority can't be always right. :-( - ;; E.g. a method dispatching on a type like (or number function), - ;; should take precedence over a method on `t' but not over a method - ;; on `number'. Similarly a method dispatching on a type like - ;; (satisfies (lambda (x) (equal x '(A . B)))) should take precedence - ;; over a method on (head 'A). - ;; Fixing this 100% is impossible so this generalizer is condemned to - ;; suffer from "undefined method ordering" problems, unless/until we - ;; restrict it somehow to a subset that we can handle reliably. - 20 ;; "typeof" < "cl-types-of" < "head" priority - (lambda (obj &rest _) `(cl-types-of ,obj cl--type-dispatch-list)) - (lambda (tag &rest _) (if (consp tag) tag))) - -(cl-defmethod cl-generic-generalizers :extra "cl-types-of" (type) - "Support for dispatch on cl-types." - (if (cl--type-p type) - (progn - ;; Add a new dispatch type to the dispatch list, then - ;; synchronize with `cl--type-list' so that both lists follow - ;; the same type precedence order. - ;; The `merge-ordered-lists' is `cl-types-of' should we make this - ;; ordering unnecessary, but it's still handy for all those types - ;; that don't declare their parents. - (unless (memq type cl--type-dispatch-list) - (setq cl--type-dispatch-list - (seq-intersection cl--type-list - (cons type cl--type-dispatch-list)))) - (list cl--type-generalizer)) - (cl-call-next-method))) -;;; Support for unloading. -;; Keep it for now, for testing. -(defun cl--type-undefine (name) - "Remove the definition of cl-type with NAME. -NAME is an unquoted symbol representing a cl-type. -Signal an error if NAME has subtypes." - (cl-check-type name (satisfies cl--type-p)) - (when-let* ((children (cl--class-children (cl--find-class name)))) - (error "Type has children: %S" children)) - (cl-remprop name 'cl--class) - (cl-remprop name 'cl-deftype-handler) - (setq cl--type-dispatch-list (delq name cl--type-dispatch-list)) - (setq cl--type-list (delq name cl--type-list))) (provide 'cl-types) diff --git a/lisp/emacs-lisp/oclosure.el b/lisp/emacs-lisp/oclosure.el index d38429648e6..19823f44d4c 100644 --- a/lisp/emacs-lisp/oclosure.el +++ b/lisp/emacs-lisp/oclosure.el @@ -151,7 +151,7 @@ (defun oclosure--p (oclosure) (not (not (oclosure-type oclosure)))) -(cl-deftype oclosure () '(satisfies oclosure--p)) +(define-symbol-prop 'oclosure 'cl-deftype-satisfies #'oclosure--p) (defun oclosure--slot-mutable-p (slotdesc) (not (alist-get :read-only (cl--slot-descriptor-props slotdesc)))) diff --git a/test/lisp/emacs-lisp/cl-extra-tests.el b/test/lisp/emacs-lisp/cl-extra-tests.el index 20d1e532a6f..1f94d71e567 100644 --- a/test/lisp/emacs-lisp/cl-extra-tests.el +++ b/test/lisp/emacs-lisp/cl-extra-tests.el @@ -348,4 +348,96 @@ (should (cl-tailp l l)) (should (not (cl-tailp '(4 5) l))))) +;;;; Method dispatch for derived types. + +(cl-deftype multiples-of (&optional m) + (let ((multiplep (if (eq m '*) + #'ignore + (lambda (n) (= 0 (% n m)))))) + `(and integer (satisfies ,multiplep)))) + +(cl-deftype multiples-of-2 () + '(multiples-of 2)) + +(cl-deftype multiples-of-3 () + '(multiples-of 3)) + +(cl-deftype multiples-of-4 () + (declare (parents multiples-of-2)) + '(and multiples-of-2 (multiples-of 4))) + +(cl-deftype unsigned-byte (&optional bits) + "Unsigned integer." + `(integer 0 ,(if (eq bits '*) bits (1- (ash 1 bits))))) + +(cl-deftype unsigned-16bits () + "Unsigned 16-bits integer." + (declare (parents unsigned-byte)) + '(unsigned-byte 16)) + +(cl-deftype unsigned-8bits () + "Unsigned 8-bits integer." + (declare (parents unsigned-16bits)) + '(unsigned-byte 8)) + +(cl-defmethod my-foo ((_n unsigned-byte)) + (format "unsigned")) + +(cl-defmethod my-foo ((_n unsigned-16bits)) + (format "unsigned 16bits - also %s" + (cl-call-next-method))) + +(cl-defmethod my-foo ((_n unsigned-8bits)) + (format "unsigned 8bits - also %s" + (cl-call-next-method))) + +(ert-deftest cl-types-test () + "Test types definition, cl-types-of and method dispatching." + + ;; Invalid DAG error + ;; FIXME: We don't test that any more. + ;; (should-error + ;; (eval + ;; '(cl-deftype unsigned-16bits () + ;; "Unsigned 16-bits integer." + ;; (declare (parents unsigned-8bits)) + ;; '(unsigned-byte 16)) + ;; lexical-binding + ;; )) + + ;; Test that (cl-types-of 4) is (multiples-of-4 multiples-of-2 ...) + ;; Test that (cl-types-of 6) is (multiples-of-3 multiples-of-2 ...) + ;; Test that (cl-types-of 12) is (multiples-of-4 multiples-of-3 multiples-of-2 ...) + (let ((types '(multiples-of-2 multiples-of-3 multiples-of-4))) + (should (equal '(multiples-of-2) + (seq-intersection (cl-types-of 2) types))) + + (should (equal '(multiples-of-4 multiples-of-2) + (seq-intersection (cl-types-of 4) types))) + + (should (equal '(multiples-of-3 multiples-of-2) + (seq-intersection (cl-types-of 6) types))) + + (should (member (seq-intersection (cl-types-of 12) types) + ;; Order between 3 and 4/2 is undefined. + '((multiples-of-3 multiples-of-4 multiples-of-2) + (multiples-of-4 multiples-of-2 multiples-of-3)))) + + (should (equal '() + (seq-intersection (cl-types-of 5) types))) + ) + + ;;; Method dispatching. + (should (equal "unsigned 8bits - also unsigned 16bits - also unsigned" + (my-foo 100))) + + (should (equal "unsigned 16bits - also unsigned" + (my-foo 256))) + + (should (equal "unsigned" + (my-foo most-positive-fixnum))) + ) + + + ;;; cl-extra-tests.el ends here diff --git a/test/lisp/emacs-lisp/cl-types-tests.el b/test/lisp/emacs-lisp/cl-types-tests.el deleted file mode 100644 index 746270578e7..00000000000 --- a/test/lisp/emacs-lisp/cl-types-tests.el +++ /dev/null @@ -1,96 +0,0 @@ -;;; Test `cl-typedef' -*- lexical-binding: t; -*- -;; -(require 'ert) -(require 'cl-types) - -(cl-deftype2 multiples-of (&optional m) - (let ((multiplep (if (eq m '*) - #'ignore - (lambda (n) (= 0 (% n m)))))) - `(and integer (satisfies ,multiplep)))) - -(cl-deftype2 multiples-of-2 () - '(multiples-of 2)) - -(cl-deftype2 multiples-of-3 () - '(multiples-of 3)) - -(cl-deftype2 multiples-of-4 () - (declare (parents multiples-of-2)) - '(and multiples-of-2 (multiples-of 4))) - -(cl-deftype2 unsigned-byte (&optional bits) - "Unsigned integer." - `(integer 0 ,(if (eq bits '*) bits (1- (ash 1 bits))))) - -(cl-deftype2 unsigned-16bits () - "Unsigned 16-bits integer." - (declare (parents unsigned-byte)) - '(unsigned-byte 16)) - -(cl-deftype2 unsigned-8bits () - "Unsigned 8-bits integer." - (declare (parents unsigned-16bits)) - '(unsigned-byte 8)) - -(cl-defmethod my-foo ((_n unsigned-byte)) - (format "unsigned")) - -(cl-defmethod my-foo ((_n unsigned-16bits)) - (format "unsigned 16bits - also %s" - (cl-call-next-method))) - -(cl-defmethod my-foo ((_n unsigned-8bits)) - (format "unsigned 8bits - also %s" - (cl-call-next-method))) - -(ert-deftest cl-types-test () - "Test types definition, cl-types-of and method dispatching." - - ;; Invalid DAG error - ;; FIXME: We don't test that any more. - ;; (should-error - ;; (eval - ;; '(cl-deftype2 unsigned-16bits () - ;; "Unsigned 16-bits integer." - ;; (declare (parents unsigned-8bits)) - ;; '(unsigned-byte 16)) - ;; lexical-binding - ;; )) - - ;; Test that (cl-types-of 4) is (multiples-of-4 multiples-of-2 ...) - ;; Test that (cl-types-of 6) is (multiples-of-3 multiples-of-2 ...) - ;; Test that (cl-types-of 12) is (multiples-of-4 multiples-of-3 multiples-of-2 ...) - (let ((types '(multiples-of-2 multiples-of-3 multiples-of-4))) - (should (equal '(multiples-of-2) - (seq-intersection (cl-types-of 2) types))) - - (should (equal '(multiples-of-4 multiples-of-2) - (seq-intersection (cl-types-of 4) types))) - - (should (equal '(multiples-of-3 multiples-of-2) - (seq-intersection (cl-types-of 6) types))) - - (should (member (seq-intersection (cl-types-of 12) types) - ;; Order between 3 and 4/2 is undefined. - '((multiples-of-3 multiples-of-4 multiples-of-2) - (multiples-of-4 multiples-of-2 multiples-of-3)))) - - (should (equal '() - (seq-intersection (cl-types-of 5) types))) - ) - - ;;; Method dispatching. - (should (equal "unsigned 8bits - also unsigned 16bits - also unsigned" - (my-foo 100))) - - (should (equal "unsigned 16bits - also unsigned" - (my-foo 256))) - - (should (equal "unsigned" - (my-foo most-positive-fixnum))) - ) - -(provide 'cl-types-tests) - -;;; cl-types-tests.el ends here commit 68a50324a70bd794d7f3228290310093f1515f7b Author: Stefan Monnier Date: Mon May 5 14:57:05 2025 -0400 cl-types: Simplify a bit further Mostly, get rid of `cl--type-flag` and rely only on the presence/absence of the type on `cl--types-list` to "flag" erroring-types. Also, don't try and catch errors during dispatch. * lisp/emacs-lisp/cl-types.el (cl--type-dispatch-list): Move to the relevant section. (cl--type-parents): Inline into sole caller. (cl--type-deftype): Add `arglist` argument. Don't signal an error if the type already existed but wasn't in `cl--type-list` since that's normal and we can fix it. Don't touch `cl--type-flag` any more. Don't add to `cl--type-list` if it can't be used without arguments. (cl-deftype2): Adjust call accordingly. (cl--type-error): Inline into sole caller. (cl-types-of): Be more careful to preserve ordering of types before passing them to `merge-ordered-lists`. Add `types` argument for use by dispatch. Don't bother skipping the `root-type` since that's a built-in type, so it should never happen anyway. Don't catch errors if called from dispatch. Don't bother with `cl--type-flag`. (cl--type-generalizer): Use new arg of `cl-types-of` instead of let-binding `cl--type-list`, in case `cl-types-of` ends up (auto)loading a file or some such thing which needs to use/modify `cl--type-list`. (cl--type-undefine): Move to end of file. * test/lisp/emacs-lisp/cl-types-tests.el (cl-types-test): Remove DAG test since we don't detect such errors any more. Relax ordering test when the order is not guaranteed by parent-relationships. diff --git a/lisp/emacs-lisp/cl-types.el b/lisp/emacs-lisp/cl-types.el index b7816ca3a84..a466c309a33 100644 --- a/lisp/emacs-lisp/cl-types.el +++ b/lisp/emacs-lisp/cl-types.el @@ -22,9 +22,6 @@ (defvar cl--type-list nil "Precedence list of the defined cl-types.") -(defvar cl--type-dispatch-list nil - "List of types that need to be checked during dispatch.") - ;; FIXME: The `cl-deftype-handler' property should arguably be turned ;; into a field of this struct (but it has performance and ;; compatibility implications, so let's not make that change for now). @@ -51,71 +48,44 @@ That is, a type defined by `cl-deftype', of class `cl-type-class'." (and (symbolp object) (cl-type-class-p (cl--find-class object)))) -(defun cl--type-parents (name) - "Get parents of type with NAME. -NAME is a symbol representing a type. -Return a possibly empty list of types." - (cl--class-allparents (cl--find-class name))) - -;; Keep it for now, for testing. -(defun cl--type-undefine (name) - "Remove the definition of cl-type with NAME. -NAME is an unquoted symbol representing a cl-type. -Signal an error if NAME has subtypes." - (cl-check-type name (satisfies cl--type-p)) - (when-let* ((children (cl--class-children (cl--find-class name)))) - (error "Type has children: %S" children)) - (cl-remprop name 'cl--type-flag) - (cl-remprop name 'cl--class) - (cl-remprop name 'cl-deftype-handler) - (setq cl--type-dispatch-list (delq name cl--type-dispatch-list)) - (setq cl--type-list (delq name cl--type-list))) - -(defun cl--type-deftype (name parents &optional docstring) - ;; FIXME: Should we also receive the arglist? +(defun cl--type-deftype (name parents arglist &optional docstring) "Register cl-type with NAME for method dispatching. PARENTS is a list of types NAME is a subtype of, or nil. DOCSTRING is an optional documentation string." - (condition-case err - (let* ((class (cl--find-class name)) - (recorded (memq name cl--type-list))) - (if (null class) - (or (null recorded) - (error "Type registered, but doesn't exist")) - (or recorded (error "Type exists, but not registered")) - (or (cl-type-class-p class) - ;; FIXME: We have some uses `cl-deftype' in Emacs that - ;; "complement" another declaration of the same type, - ;; so maybe we should turn this into a warning (and - ;; not overwrite the `cl--find-class' in that case)? - (error "Type in another class: %S" (type-of class)))) - ;; Setup a type descriptor for NAME. - (setf (cl--find-class name) - (cl--type-class-make name docstring parents)) - ;; Reset NAME as a newly defined type. - (cl-remprop name 'cl--type-flag) - ;; Record new type. The constructor of the class - ;; `cl-type-class' already ensures that parent types must be - ;; defined before their "child" types (i.e. already added to - ;; the `cl--type-list' for types defined with `cl-deftype'). - ;; So it is enough to simply push a new type at the beginning - ;; of the list. - ;; Redefinition is more complicated, because child types may - ;; be in the list, so moving the type to the head can be - ;; incorrect. The "cheap" solution is to leave the list - ;; unchanged (and hope the redefinition doesn't change the - ;; hierarchy too much). - ;; Side note: Redefinitions introduce other problems as well - ;; because the class object's `parents` slot contains - ;; references to `cl--class` objects, so after a redefinition - ;; via (setf (cl--find-class FOO) ...), the children's - ;; `parents` slots point to the old class object. That's a - ;; problem that affects all types and that we don't really try - ;; to solve currently. - (or recorded (push name cl--type-list))) - (error - (error (format "Define %S failed: %s" - name (error-message-string err)))))) + (let* ((class (cl--find-class name))) + (when class + (or (cl-type-class-p class) + ;; FIXME: We have some uses `cl-deftype' in Emacs that + ;; "complement" another declaration of the same type, + ;; so maybe we should turn this into a warning (and + ;; not overwrite the `cl--find-class' in that case)? + (error "Type in another class: %S" (type-of class)))) + ;; Setup a type descriptor for NAME. + (setf (cl--find-class name) + (cl--type-class-make name docstring parents)) + ;; Record new type. The constructor of the class + ;; `cl-type-class' already ensures that parent types must be + ;; defined before their "child" types (i.e. already added to + ;; the `cl--type-list' for types defined with `cl-deftype'). + ;; So it is enough to simply push a new type at the beginning + ;; of the list. + ;; Redefinition is more complicated, because child types may + ;; be in the list, so moving the type to the head can be + ;; incorrect. The "cheap" solution is to leave the list + ;; unchanged (and hope the redefinition doesn't change the + ;; hierarchy too much). + ;; Side note: Redefinitions introduce other problems as well + ;; because the class object's `parents` slot contains + ;; references to `cl--class` objects, so after a redefinition + ;; via (setf (cl--find-class FOO) ...), the children's + ;; `parents` slots point to the old class object. That's a + ;; problem that affects all types and that we don't really try + ;; to solve currently. + (or (memq name cl--type-list) + ;; Exclude types that can't be used without arguments. + ;; They'd signal errors in `cl-types-of'! + (not (memq (car arglist) '(nil &rest &optional &keys))) + (push name cl--type-list)))) ;;;###autoload (defmacro cl-deftype2 (name arglist &rest body) @@ -170,7 +140,7 @@ If PARENTS is non-nil, ARGLIST must be nil." ;; 'cl-lib)), so `cl--type-deftype' needs to go either to ;; `cl-preloaded.el' or it should be autoloaded even when ;; `cl-lib' is not loaded. - (cl--type-deftype ',name ',parents ,docstring) + (cl--type-deftype ',name ',parents ',arglist ,docstring) (define-symbol-prop ',name 'cl-deftype-handler (cl-function (lambda (&cl-defs ('*) ,@arglist) @@ -181,17 +151,6 @@ If PARENTS is non-nil, ARGLIST must be nil." (defvar cl--type-unique (make-hash-table :test 'equal) "Record an unique value of each type.") -(defun cl--type-error (type error) - "Mark TYPE as in-error, and report the produced ERROR value." - ;; Temporarily raise the recursion limit to avoid another recursion - ;; error while reporting ERROR. - (let ((max-lisp-eval-depth (+ 800 max-lisp-eval-depth))) - ;; Mark TYPE as in-error and remove it from the dispatch list. - (put type 'cl--type-flag 'error) - (setq cl--type-dispatch-list (delq type cl--type-dispatch-list)) - (warn "cl-types-of %s, %s" type (error-message-string error))) - nil) - ;; FIXME: `cl-types-of' CPU cost is proportional to the number of types ;; defined with `cl-deftype', so the more popular it gets, the slower ;; it becomes. And of course, the cost of each type check is @@ -234,59 +193,54 @@ If PARENTS is non-nil, ARGLIST must be nil." ;; - in `cl-types-of' start by calling `cl-type-of', then use the map ;; to find which cl-types may need to be checked. ;; -(defun cl-types-of (object) -"Return the types OBJECT belongs to. +(defun cl-types-of (object &optional types) + "Return the types OBJECT belongs to. Return an unique list of types OBJECT belongs to, ordered from the -most specific type to the most general." -(let* ((root-type (cl-type-of object)) - (found (list root-type))) - ;; Build a list of all types OBJECT belongs to. - (dolist (type cl--type-list) - (let ((flag (get type 'cl--type-flag))) +most specific type to the most general. +TYPES is an internal argument." + (let* ((found nil)) + ;; Build a list of all types OBJECT belongs to. + (dolist (type (or types cl--type-list)) (and - ;; Skip type, if it previously produced an error. - (not (eq flag 'error)) - ;; Skip type which we are sure will not match. - (or (null flag) (eq flag root-type)) ;; If OBJECT is of type, add type to the matching list. - (condition-case-unless-debug e + (if types + ;; For method dispatch, we don't need to filter out errors, since + ;; we can presume that method dispatch is used only on + ;; sanely-defined types. (cl-typep object type) - (error (cl--type-error type e))) - (or flag (put type 'cl--type-flag root-type)) - (push type found)))) - ;; Return an unique value of the list of types OBJECT belongs to, - ;; which is also the list of specifiers for OBJECT. - (with-memoization (gethash found cl--type-unique) - ;; Compute an ordered list of types from the DAG. - (merge-ordered-lists (mapcar #'cl--type-parents found))))) + (condition-case-unless-debug e + (cl-typep object type) + (error (setq cl--type-list (delq type cl--type-list)) + (warn "cl-types-of %S: %s" + type (error-message-string e))))) + (push type found))) + (push (cl-type-of object) found) + ;; Return an unique value of the list of types OBJECT belongs to, + ;; which is also the list of specifiers for OBJECT. + (with-memoization (gethash found cl--type-unique) + ;; Compute an ordered list of types from the DAG. + (merge-ordered-lists + (mapcar (lambda (type) (cl--class-allparents (cl--find-class type))) + (nreverse found)))))) ;;; Method dispatching ;; -;; For a declaration like -;; -;; (cl-deftype list-of (elem-type) -;; `(and list -;; (satisfies ,(lambda (list) -;; (cl-every (lambda (elem) -;; (cl-typep elem elem-type)) -;; list))))) -;; -;; we add the type to `cl--type-list' even though it's unusable there -;; (the `cl-typep` call in `cl-types-of' will always signal an error -;; because the type can't be used without argument). -;; -;; One way to solve this (and even open up the possibility to -;; dispatch on complex types like `(list-of FOO)') is to populate -;; `cl--type-dispatch-list' (i.e. the list of types that need to -;; be checked during dispatch) from `cl-generic-generalizers' so it -;; includes only those types for which there's a method, rather than -;; all defined types. +(defvar cl--type-dispatch-list nil + "List of types that need to be checked during dispatch.") (cl-generic-define-generalizer cl--type-generalizer + ;; FIXME: This priority can't be always right. :-( + ;; E.g. a method dispatching on a type like (or number function), + ;; should take precedence over a method on `t' but not over a method + ;; on `number'. Similarly a method dispatching on a type like + ;; (satisfies (lambda (x) (equal x '(A . B)))) should take precedence + ;; over a method on (head 'A). + ;; Fixing this 100% is impossible so this generalizer is condemned to + ;; suffer from "undefined method ordering" problems, unless/until we + ;; restrict it somehow to a subset that we can handle reliably. 20 ;; "typeof" < "cl-types-of" < "head" priority - (lambda (obj &rest _) `(let ((cl--type-list cl--type-dispatch-list)) - (cl-types-of ,obj))) + (lambda (obj &rest _) `(cl-types-of ,obj cl--type-dispatch-list)) (lambda (tag &rest _) (if (consp tag) tag))) (cl-defmethod cl-generic-generalizers :extra "cl-types-of" (type) @@ -296,6 +250,9 @@ most specific type to the most general." ;; Add a new dispatch type to the dispatch list, then ;; synchronize with `cl--type-list' so that both lists follow ;; the same type precedence order. + ;; The `merge-ordered-lists' is `cl-types-of' should we make this + ;; ordering unnecessary, but it's still handy for all those types + ;; that don't declare their parents. (unless (memq type cl--type-dispatch-list) (setq cl--type-dispatch-list (seq-intersection cl--type-list @@ -303,6 +260,21 @@ most specific type to the most general." (list cl--type-generalizer)) (cl-call-next-method))) +;;; Support for unloading. + +;; Keep it for now, for testing. +(defun cl--type-undefine (name) + "Remove the definition of cl-type with NAME. +NAME is an unquoted symbol representing a cl-type. +Signal an error if NAME has subtypes." + (cl-check-type name (satisfies cl--type-p)) + (when-let* ((children (cl--class-children (cl--find-class name)))) + (error "Type has children: %S" children)) + (cl-remprop name 'cl--class) + (cl-remprop name 'cl-deftype-handler) + (setq cl--type-dispatch-list (delq name cl--type-dispatch-list)) + (setq cl--type-list (delq name cl--type-list))) + (provide 'cl-types) ;;; cl-types.el ends here diff --git a/test/lisp/emacs-lisp/cl-types-tests.el b/test/lisp/emacs-lisp/cl-types-tests.el index f247ddd89d9..746270578e7 100644 --- a/test/lisp/emacs-lisp/cl-types-tests.el +++ b/test/lisp/emacs-lisp/cl-types-tests.el @@ -48,14 +48,15 @@ "Test types definition, cl-types-of and method dispatching." ;; Invalid DAG error - (should-error - (eval - '(cl-deftype2 unsigned-16bits () - "Unsigned 16-bits integer." - (declare (parents unsigned-8bits)) - '(unsigned-byte 16)) - lexical-binding - )) + ;; FIXME: We don't test that any more. + ;; (should-error + ;; (eval + ;; '(cl-deftype2 unsigned-16bits () + ;; "Unsigned 16-bits integer." + ;; (declare (parents unsigned-8bits)) + ;; '(unsigned-byte 16)) + ;; lexical-binding + ;; )) ;; Test that (cl-types-of 4) is (multiples-of-4 multiples-of-2 ...) ;; Test that (cl-types-of 6) is (multiples-of-3 multiples-of-2 ...) @@ -70,8 +71,10 @@ (should (equal '(multiples-of-3 multiples-of-2) (seq-intersection (cl-types-of 6) types))) - (should (equal '(multiples-of-3 multiples-of-4 multiples-of-2) - (seq-intersection (cl-types-of 12) types))) + (should (member (seq-intersection (cl-types-of 12) types) + ;; Order between 3 and 4/2 is undefined. + '((multiples-of-3 multiples-of-4 multiples-of-2) + (multiples-of-4 multiples-of-2 multiples-of-3)))) (should (equal '() (seq-intersection (cl-types-of 5) types))) commit a64a56fbf03d5ece647254c8920fe5af59cdf3cd Author: Stefan Monnier Date: Mon May 5 14:05:36 2025 -0400 (comment-setup-function): Make it usable with `add-function` * lisp/newcomment.el (comment-setup-function): Give it a non-nil default. (comment-normalize-vars): Call it unconditionally. diff --git a/lisp/newcomment.el b/lisp/newcomment.el index a6a1b7340a6..9593d464cc7 100644 --- a/lisp/newcomment.el +++ b/lisp/newcomment.el @@ -344,7 +344,7 @@ terminated by the end of line (i.e., `comment-end' is empty)." "Return the mirror image of string S, without any trailing space." (comment-string-strip (concat (nreverse (string-to-list s))) nil t)) -(defvar comment-setup-function nil +(defvar comment-setup-function #'ignore "Function to set up variables needed by commenting functions.") ;;;###autoload @@ -354,8 +354,7 @@ All the `comment-*' commands call this function to set up various variables, like `comment-start', to ensure that the commenting functions work correctly. Lisp callers of any other `comment-*' function should first call this function explicitly." - (when (functionp comment-setup-function) - (funcall comment-setup-function)) + (funcall comment-setup-function) (unless (and (not comment-start) noerror) (unless comment-start (let ((cs (read-string "No comment syntax is defined. Use: "))) commit 61cb73a2dbe756b060d4256c3b7ebe09f71ed2b7 Author: Juri Linkov Date: Mon May 5 19:57:29 2025 +0300 New variable 'comment-setup-function' for multi-language modes. * lisp/newcomment.el (comment-setup-function): New variable. (comment-normalize-vars): Call non-nil 'comment-setup-function'. * lisp/textmodes/mhtml-ts-mode.el (mhtml-ts-mode--comment-current-lang): New internal variable. (mhtml-ts-mode--comment-setup): New function. (mhtml-ts-mode): Set 'comment-setup-function' to 'mhtml-ts-mode--comment-setup' instead of using 'c-ts-common-comment-setup' only for JavaScript. https://lists.gnu.org/archive/html/emacs-devel/2025-05/msg00025.html diff --git a/lisp/newcomment.el b/lisp/newcomment.el index 4da3b55d2f0..a6a1b7340a6 100644 --- a/lisp/newcomment.el +++ b/lisp/newcomment.el @@ -344,6 +344,9 @@ terminated by the end of line (i.e., `comment-end' is empty)." "Return the mirror image of string S, without any trailing space." (comment-string-strip (concat (nreverse (string-to-list s))) nil t)) +(defvar comment-setup-function nil + "Function to set up variables needed by commenting functions.") + ;;;###autoload (defun comment-normalize-vars (&optional noerror) "Check and set up variables needed by other commenting functions. @@ -351,6 +354,8 @@ All the `comment-*' commands call this function to set up various variables, like `comment-start', to ensure that the commenting functions work correctly. Lisp callers of any other `comment-*' function should first call this function explicitly." + (when (functionp comment-setup-function) + (funcall comment-setup-function)) (unless (and (not comment-start) noerror) (unless comment-start (let ((cs (read-string "No comment syntax is defined. Use: "))) diff --git a/lisp/textmodes/mhtml-ts-mode.el b/lisp/textmodes/mhtml-ts-mode.el index d41f93e2682..6b261205409 100644 --- a/lisp/textmodes/mhtml-ts-mode.el +++ b/lisp/textmodes/mhtml-ts-mode.el @@ -356,6 +356,26 @@ Return nil if there is no name or if NODE is not a defun node." (js-name js-name) (css-name css-name)))) +(defvar-local mhtml-ts-mode--comment-current-lang nil) + +(defun mhtml-ts-mode--comment-setup () + (let ((lang (treesit-language-at (point)))) + (unless (eq mhtml-ts-mode--comment-current-lang lang) + (setq mhtml-ts-mode--comment-current-lang lang) + (pcase lang + ('html + (setq-local comment-start "") + (setq-local comment-end-skip nil)) + ('css + (setq-local comment-start "/*") + (setq-local comment-start-skip "/\\*+[ \t]*") + (setq-local comment-end "*/") + (setq-local comment-end-skip "[ \t]*\\*+/")) + ('javascript + (c-ts-common-comment-setup)))))) + ;;; Flymake integration (defvar-local mhtml-ts-mode--flymake-process nil @@ -431,9 +451,8 @@ Powered by tree-sitter." ;; just like it's done in the original mode. ;; Comment. - ;; indenting settings for js-ts-mode. - (c-ts-common-comment-setup) (setq-local comment-multi-line t) + (setq-local comment-setup-function #'mhtml-ts-mode--comment-setup) ;; Font-lock. commit e5746d3677b86ef3d0ba0d7f1e916180cc4b6f69 Author: Juri Linkov Date: Mon May 5 19:52:28 2025 +0300 * lisp/vc/diff-mode.el (diff-syntax-fontify-hunk): Add 'ignore-errors'. diff --git a/lisp/vc/diff-mode.el b/lisp/vc/diff-mode.el index 459154f534b..a5f4169a7f3 100644 --- a/lisp/vc/diff-mode.el +++ b/lisp/vc/diff-mode.el @@ -3181,7 +3181,12 @@ When OLD is non-nil, highlight the hunk from the old source." ((memq diff-font-lock-syntax '(hunk-also hunk-only)) (with-temp-buffer (insert text) - (diff-syntax-fontify-props file text line-nb t)))))))) + ;; Enabling a major mode on a single hunk without + ;; sufficient context often raises many errors such as + ;; "Premature end of data", "Invalid search bound", etc. + ;; So need to ignore all these errors. + (ignore-errors + (diff-syntax-fontify-props file text line-nb t))))))))) ;; Put properties over the hunk text (goto-char beg) commit 6c3a995ed535f9fb492461a53442e4d8bd4deb17 Author: Juri Linkov Date: Mon May 5 19:50:24 2025 +0300 * lisp/outline.el (outline-minor-mode-highlight-buffer): Adjust match data. After a successful call to 'outline-search-function' set the end of the match data to the end of the line that is equivalent to adding ".*" in the regexp. This accompanies the recent change in 'outline-font-lock-keywords'. diff --git a/lisp/outline.el b/lisp/outline.el index e484bcef878..61e9b0f3289 100644 --- a/lisp/outline.el +++ b/lisp/outline.el @@ -522,7 +522,10 @@ outline font-lock faces to those of major mode." (let ((regexp (unless outline-search-function (concat "^\\(?:" outline-regexp "\\).*$")))) (while (if outline-search-function - (funcall outline-search-function) + (when-let* ((ret (funcall outline-search-function))) + ;; This is equivalent to adding ".*" in the regexp above. + (set-match-data (list (match-beginning 0) (pos-eol))) + ret) (re-search-forward regexp nil t)) (let ((overlay (make-overlay (match-beginning 0) (match-end 0)))) (overlay-put overlay 'outline-highlight t) commit 8f649c42702144dbbacba180c78ab0df04951807 Author: David Ponce Date: Mon May 5 11:03:56 2025 -0400 cl-types.el: Speed up deftype and dispatch * lisp/emacs-lisp/cl-types.el (cl--type-list): Doc string. (cl--type-dispatch-list): New variable. (cl--type-parents): Make it a plain defun. (cl--type-children, cl--type-dag): Remove. (cl--type-undefine): Remove duplicate test for `cl--type-p'. Use `cl--class-children'. Clear `cl--type-flag' instead of `cl--type-error'. Also remove type from the dispatch list. (cl--type-deftype): Doc string. Remove useless safeguard of data on error. Fix some error messages. Clear `cl--type-flag' when a type is (re)defined. Just push new types on `cl--type-list'. (cl--type-error): Set `cl--type-flag' to the symbol `error' and remove type in error from the dispatch list. (cl-types-of): Doc string. Remove useless check for `cl-type-class-p'. Skip types which we are sure will not match. Simplify creation of the DAG. (cl--type-generalizer): In the tagcode-function, check only types that can be dispatched. (cl-generic-generalizers): Populate the dispatch list. diff --git a/lisp/emacs-lisp/cl-types.el b/lisp/emacs-lisp/cl-types.el index c10ce4a24fb..b7816ca3a84 100644 --- a/lisp/emacs-lisp/cl-types.el +++ b/lisp/emacs-lisp/cl-types.el @@ -20,7 +20,10 @@ ;; - `cl-types-of', that returns the types an object belongs to. (defvar cl--type-list nil - "List of defined types to lookup for method dispatching.") + "Precedence list of the defined cl-types.") + +(defvar cl--type-dispatch-list nil + "List of types that need to be checked during dispatch.") ;; FIXME: The `cl-deftype-handler' property should arguably be turned ;; into a field of this struct (but it has performance and @@ -48,83 +51,71 @@ That is, a type defined by `cl-deftype', of class `cl-type-class'." (and (symbolp object) (cl-type-class-p (cl--find-class object)))) -(defsubst cl--type-parents (name) +(defun cl--type-parents (name) "Get parents of type with NAME. NAME is a symbol representing a type. Return a possibly empty list of types." (cl--class-allparents (cl--find-class name))) -(defsubst cl--type-children (name) - "Get children of the type with NAME. -NAME is a symbol representing a type. -Return a possibly empty list of types." - (cl--class-children (cl--find-class name))) - -(defsubst cl--type-dag (types) - "Return a DAG from the list of TYPES." - (mapcar #'cl--type-parents types)) - ;; Keep it for now, for testing. (defun cl--type-undefine (name) "Remove the definition of cl-type with NAME. NAME is an unquoted symbol representing a cl-type. Signal an error if NAME has subtypes." (cl-check-type name (satisfies cl--type-p)) - (when-let* ((children (and (cl--type-p name) - (cl--type-children name)))) + (when-let* ((children (cl--class-children (cl--find-class name)))) (error "Type has children: %S" children)) - (cl-remprop name 'cl--type-error) + (cl-remprop name 'cl--type-flag) (cl-remprop name 'cl--class) (cl-remprop name 'cl-deftype-handler) + (setq cl--type-dispatch-list (delq name cl--type-dispatch-list)) (setq cl--type-list (delq name cl--type-list))) (defun cl--type-deftype (name parents &optional docstring) ;; FIXME: Should we also receive the arglist? - "Generalize cl-type with NAME for method dispatching. + "Register cl-type with NAME for method dispatching. PARENTS is a list of types NAME is a subtype of, or nil. DOCSTRING is an optional documentation string." - (let ((typelist cl--type-list) - (oldplist (copy-sequence (symbol-plist name)))) - (condition-case err - (let* ((class (cl--find-class name)) - (recorded (memq name typelist))) - (if (null class) - (or (null recorded) - (error "Type generalized, but doesn't exist")) - (or recorded (error "Type exists, but not generalized")) - (or (cl-type-class-p class) - ;; FIXME: We have some uses `cl-deftype' in Emacs that - ;; "complement" another declaration of the same type, - ;; so maybe we should turn this into a warning (and - ;; not overwrite the `cl--find-class' in that case)? - (error "Type in another class: %S" (type-of class)))) - ;; Setup a type descriptor for NAME. - (setf (cl--find-class name) - (cl--type-class-make name docstring parents)) - (if recorded - ;; Clear any previous error mark. - (cl-remprop name 'cl--type-error) - ;; Record new type to include its dependency in the DAG. - (push name typelist)) - ;; `cl-types-of' iterates through all known types to collect - ;; all those an object belongs to, sorted from the most - ;; specific type to the more general type. So, keep the - ;; global list in this order. - ;; FIXME: This global operation is a bit worrisome, because it - ;; scales poorly with the number of types. I guess it's OK - ;; for now because `cl-deftype' is not very popular, but it'll - ;; probably need to be replaced at some point. Maybe we - ;; should simply require that the parents be defined already, - ;; then we can just `push' the new type, knowing it's in - ;; topological order by construction. - (setq cl--type-list - (merge-ordered-lists - (cl--type-dag typelist) - (lambda (_) (error "Invalid dependency graph"))))) - (error - (setf (symbol-plist name) oldplist) - (error (format "Define %S failed: %s" - name (error-message-string err))))))) + (condition-case err + (let* ((class (cl--find-class name)) + (recorded (memq name cl--type-list))) + (if (null class) + (or (null recorded) + (error "Type registered, but doesn't exist")) + (or recorded (error "Type exists, but not registered")) + (or (cl-type-class-p class) + ;; FIXME: We have some uses `cl-deftype' in Emacs that + ;; "complement" another declaration of the same type, + ;; so maybe we should turn this into a warning (and + ;; not overwrite the `cl--find-class' in that case)? + (error "Type in another class: %S" (type-of class)))) + ;; Setup a type descriptor for NAME. + (setf (cl--find-class name) + (cl--type-class-make name docstring parents)) + ;; Reset NAME as a newly defined type. + (cl-remprop name 'cl--type-flag) + ;; Record new type. The constructor of the class + ;; `cl-type-class' already ensures that parent types must be + ;; defined before their "child" types (i.e. already added to + ;; the `cl--type-list' for types defined with `cl-deftype'). + ;; So it is enough to simply push a new type at the beginning + ;; of the list. + ;; Redefinition is more complicated, because child types may + ;; be in the list, so moving the type to the head can be + ;; incorrect. The "cheap" solution is to leave the list + ;; unchanged (and hope the redefinition doesn't change the + ;; hierarchy too much). + ;; Side note: Redefinitions introduce other problems as well + ;; because the class object's `parents` slot contains + ;; references to `cl--class` objects, so after a redefinition + ;; via (setf (cl--find-class FOO) ...), the children's + ;; `parents` slots point to the old class object. That's a + ;; problem that affects all types and that we don't really try + ;; to solve currently. + (or recorded (push name cl--type-list))) + (error + (error (format "Define %S failed: %s" + name (error-message-string err)))))) ;;;###autoload (defmacro cl-deftype2 (name arglist &rest body) @@ -192,10 +183,12 @@ If PARENTS is non-nil, ARGLIST must be nil." (defun cl--type-error (type error) "Mark TYPE as in-error, and report the produced ERROR value." - (put type 'cl--type-error error) ;; Mark TYPE as in-error. ;; Temporarily raise the recursion limit to avoid another recursion ;; error while reporting ERROR. (let ((max-lisp-eval-depth (+ 800 max-lisp-eval-depth))) + ;; Mark TYPE as in-error and remove it from the dispatch list. + (put type 'cl--type-flag 'error) + (setq cl--type-dispatch-list (delq type cl--type-dispatch-list)) (warn "cl-types-of %s, %s" type (error-message-string error))) nil) @@ -242,55 +235,72 @@ If PARENTS is non-nil, ARGLIST must be nil." ;; to find which cl-types may need to be checked. ;; (defun cl-types-of (object) - "Return the types OBJECT belongs to. +"Return the types OBJECT belongs to. Return an unique list of types OBJECT belongs to, ordered from the most specific type to the most general." - (let (found) - ;; Build a list of all types OBJECT belongs to. - (dolist (type cl--type-list) +(let* ((root-type (cl-type-of object)) + (found (list root-type))) + ;; Build a list of all types OBJECT belongs to. + (dolist (type cl--type-list) + (let ((flag (get type 'cl--type-flag))) (and ;; Skip type, if it previously produced an error. - (null (get type 'cl--type-error)) - ;; Skip type not defined by `cl-deftype'. - (cl-type-class-p (cl--find-class type)) - ;; If BAR is declared as a parent of FOO and `cl-types-of' has - ;; already decided that the value is of type FOO, then we - ;; already know BAR will be in the output anyway and there's no - ;; point testing BAR. So, skip type already selected as parent - ;; of another type, assuming that, most of the time, `assq' - ;; will be faster than `cl-typep'. - (null (assq type found)) + (not (eq flag 'error)) + ;; Skip type which we are sure will not match. + (or (null flag) (eq flag root-type)) ;; If OBJECT is of type, add type to the matching list. (condition-case-unless-debug e (cl-typep object type) (error (cl--type-error type e))) - (push type found))) - ;; Return an unique value of the list of types OBJECT belongs to, - ;; which is also the list of specifiers for OBJECT. - (with-memoization (gethash found cl--type-unique) - ;; Compute a DAG from the collected matching types. - (let (dag) - (dolist (type found) - (let ((pl (cl--type-parents type))) - (while pl - (push pl dag) - (setq pl (cdr pl))))) - ;; Compute an ordered list of types from the DAG. - (merge-ordered-lists - (nreverse (cons (cl--type-parents (cl-type-of object)) - dag))))))) + (or flag (put type 'cl--type-flag root-type)) + (push type found)))) + ;; Return an unique value of the list of types OBJECT belongs to, + ;; which is also the list of specifiers for OBJECT. + (with-memoization (gethash found cl--type-unique) + ;; Compute an ordered list of types from the DAG. + (merge-ordered-lists (mapcar #'cl--type-parents found))))) ;;; Method dispatching ;; + +;; For a declaration like +;; +;; (cl-deftype list-of (elem-type) +;; `(and list +;; (satisfies ,(lambda (list) +;; (cl-every (lambda (elem) +;; (cl-typep elem elem-type)) +;; list))))) +;; +;; we add the type to `cl--type-list' even though it's unusable there +;; (the `cl-typep` call in `cl-types-of' will always signal an error +;; because the type can't be used without argument). +;; +;; One way to solve this (and even open up the possibility to +;; dispatch on complex types like `(list-of FOO)') is to populate +;; `cl--type-dispatch-list' (i.e. the list of types that need to +;; be checked during dispatch) from `cl-generic-generalizers' so it +;; includes only those types for which there's a method, rather than +;; all defined types. + (cl-generic-define-generalizer cl--type-generalizer 20 ;; "typeof" < "cl-types-of" < "head" priority - (lambda (obj &rest _) `(cl-types-of ,obj)) + (lambda (obj &rest _) `(let ((cl--type-list cl--type-dispatch-list)) + (cl-types-of ,obj))) (lambda (tag &rest _) (if (consp tag) tag))) (cl-defmethod cl-generic-generalizers :extra "cl-types-of" (type) "Support for dispatch on cl-types." (if (cl--type-p type) - (list cl--type-generalizer) + (progn + ;; Add a new dispatch type to the dispatch list, then + ;; synchronize with `cl--type-list' so that both lists follow + ;; the same type precedence order. + (unless (memq type cl--type-dispatch-list) + (setq cl--type-dispatch-list + (seq-intersection cl--type-list + (cons type cl--type-dispatch-list)))) + (list cl--type-generalizer)) (cl-call-next-method))) (provide 'cl-types) commit cc6e604da6f274aafeda1476b2e1e2083063c20e Author: Eli Zaretskii Date: Mon May 5 15:16:43 2025 +0300 ; More fixes for treesit tests * test/src/treesit-tests.el (treesit-parse-string) (treesit-parser-tracking-line-column-p) (treesit-tracking-line-column-p, treesit--linecol-at) (treesit--linecol-cache-set, treesit--linecol-cache) (treesit-languages-require-line-column-tracking): Declare. diff --git a/test/src/treesit-tests.el b/test/src/treesit-tests.el index 8dda02a35ad..84cf490e549 100644 --- a/test/src/treesit-tests.el +++ b/test/src/treesit-tests.el @@ -58,6 +58,14 @@ (declare-function treesit-search-forward "treesit.c") (declare-function treesit-search-subtree "treesit.c") +(declare-function treesit-parse-string "treesit.c") +(declare-function treesit-parser-tracking-line-column-p "treesit.c") +(declare-function treesit-tracking-line-column-p "treesit.c") +(declare-function treesit--linecol-at "treesit.c") +(declare-function treesit--linecol-cache-set "treesit.c") +(declare-function treesit--linecol-cache "treesit.c") + + ;;; Basic API (ert-deftest treesit-basic-parsing () @@ -290,6 +298,7 @@ (should (equal (treesit--linecol-at 2) '(1 . 1))) (should (equal (treesit--linecol-at 1) '(1 . 0))))) +(defvar treesit-languages-require-line-column-tracking) (ert-deftest treesit-linecol-enable-disable () "Test enabling/disabling linecol tracking." (skip-unless (treesit-language-available-p 'json)) commit b84e306be765d5071577f81a12f9557e64732ecf Author: Eli Zaretskii Date: Mon May 5 15:07:28 2025 +0300 ; Fix recently added treesit tests * test/src/treesit-tests.el (treesit-linecol-basic) (treesit-linecol-search-back-across-newline) (treesit-linecol-col-same-line): Skip tests if tree-sitter is not available. diff --git a/test/src/treesit-tests.el b/test/src/treesit-tests.el index 2118afc2928..8dda02a35ad 100644 --- a/test/src/treesit-tests.el +++ b/test/src/treesit-tests.el @@ -228,6 +228,7 @@ (ert-deftest treesit-linecol-basic () "Tests for basic lincol synchronization." + (skip-unless (fboundp 'treesit--linecol-cache)) (with-temp-buffer (should (equal (treesit--linecol-cache) '(:line 0 :col 0 :bytepos 0))) @@ -271,6 +272,7 @@ (ert-deftest treesit-linecol-search-back-across-newline () "Search for newline backwards." + (skip-unless (fboundp 'treesit--linecol-at)) (with-temp-buffer (insert "\n ") (treesit--linecol-cache-set 2 1 3) @@ -280,6 +282,7 @@ (ert-deftest treesit-linecol-col-same-line () "Test col calculation when cache and target pos is in the same line." + (skip-unless (fboundp 'treesit--linecol-at)) (with-temp-buffer (insert "aaaaaa") (treesit--linecol-cache-set 1 5 6) commit b172a1478c16067d88b3a79eed857f265cafb1b7 Author: Eli Zaretskii Date: Mon May 5 14:51:56 2025 +0300 ; * doc/lispref/tips.texi (Library Headers): Fix wording (bug#78253). diff --git a/doc/lispref/tips.texi b/doc/lispref/tips.texi index f0238276501..3088decc1b2 100644 --- a/doc/lispref/tips.texi +++ b/doc/lispref/tips.texi @@ -1213,10 +1213,10 @@ lines. Here is a table of them: @table @samp @item ;;; Commentary: This begins introductory comments that explain how the library works. -It should come right after the copying permissions, terminated by a -@samp{Change Log}, @samp{History} or @samp{Code} comment line. This -text is used by the Finder package, so it should make sense in that -context. +It should come right after the copying permissions, and is terminated by +one of the comment lines described below: @samp{Change Log}, +@samp{History} or @samp{Code}. This text is used by the Finder package, +so it should make sense in that context. @item ;;; Change Log: This begins an optional log of changes to the file over time. Don't commit 9261d353ccc0f94da8049faaade025f338d75354 Author: Jostein Kjønigsen Date: Mon May 5 09:45:36 2025 +0200 Fix test-regressions in python-ts-mode * lisp/progmodes/python.el (python--treesit-settings): Use more specific selectors for constants. * test/lisp/progmodes/python-tests.el (python-ts-mode-nested-types-face-1) (python-ts-mode-union-types-face-1) (python-ts-mode-union-types-face-2): None is now a constant. diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index b057e2b24f0..96aa473e9e3 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -1273,7 +1273,9 @@ fontified." :feature 'constant :language 'python '([(true) (false) (none)] @font-lock-constant-face - ((identifier) @font-lock-constant-face + ((assignment (identifier) @font-lock-constant-face) + (:match "\\`[A-Z][A-Z0-9_]+\\'" @font-lock-constant-face)) + ((call arguments: (argument_list (identifier) @font-lock-constant-face)) (:match "\\`[A-Z][A-Z0-9_]+\\'" @font-lock-constant-face)) ((attribute attribute: (identifier) @font-lock-constant-face) diff --git a/test/lisp/progmodes/python-tests.el b/test/lisp/progmodes/python-tests.el index 22a7c3a5e89..2c00f47d82c 100644 --- a/test/lisp/progmodes/python-tests.el +++ b/test/lisp/progmodes/python-tests.el @@ -7742,27 +7742,45 @@ always located at the beginning of buffer." (ert-deftest python-ts-mode-nested-types-face-1 () (python-ts-tests-with-temp-buffer "def func(v:dict[ list[ tuple[str] ], int | None] | None):" - (dolist (test '("dict" "list" "tuple" "str" "int" "None" "None")) + (dolist (test '("dict" "list" "tuple" "str" "int")) (search-forward test) (goto-char (match-beginning 0)) - (should (eq (face-at-point) 'font-lock-type-face))))) + (should (eq (face-at-point) 'font-lock-type-face))) + + (goto-char (point-min)) + (dolist (test '("None" "None")) + (search-forward test) + (goto-char (match-beginning 0)) + (should (eq (face-at-point) 'font-lock-constant-face))))) (ert-deftest python-ts-mode-union-types-face-1 () (python-ts-tests-with-temp-buffer "def f(val: tuple[tuple, list[Lvl1 | Lvl2[Lvl3[Lvl4[Lvl5 | None]], Lvl2]]]):" - (dolist (test '("tuple" "tuple" "list" "Lvl1" "Lvl2" "Lvl3" "Lvl4" "Lvl5" "None" "Lvl2")) + (dolist (test '("tuple" "tuple" "list" "Lvl1" "Lvl2" "Lvl3" "Lvl4" "Lvl5" "Lvl2")) (search-forward test) (goto-char (match-beginning 0)) - (should (eq (face-at-point) 'font-lock-type-face))))) + (should (eq (face-at-point) 'font-lock-type-face))) + + (goto-char (point-min)) + (dolist (test '("None")) + (search-forward test) + (goto-char (match-beginning 0)) + (should (eq (face-at-point) 'font-lock-constant-face))))) (ert-deftest python-ts-mode-union-types-face-2 () (python-ts-tests-with-temp-buffer "def f(val: Type0 | Type1[Type2, pack0.Type3] | pack1.pack2.Type4 | None):" - (dolist (test '("Type0" "Type1" "Type2" "Type3" "Type4" "None")) + (dolist (test '("Type0" "Type1" "Type2" "Type3" "Type4")) (search-forward test) (goto-char (match-beginning 0)) (should (eq (face-at-point) 'font-lock-type-face))) + (goto-char (point-min)) + (dolist (test '("None")) + (search-forward test) + (goto-char (match-beginning 0)) + (should (eq (face-at-point) 'font-lock-constant-face))) + (goto-char (point-min)) (dolist (test '("pack0" "pack1" "pack2")) (search-forward test) commit 7cb7e96a5cca6778054cf74fd2c7548ca40f0691 Author: Stefan Monnier Date: Sun May 4 23:42:12 2025 -0400 whitespace.el: Collaborate better with `combine-after-change-calls` * lisp/whitespace.el: Remove redundant `:group` arguments. Prefer #' to quote function names. (whitespace-buffer-changed): Delete function. (whitespace-color-on): Don't touch `before-change-functions`. (whitespace--update-bob-eob): Set `whitespace-buffer-changed` here, instead. (whitespace-post-command-hook): Apply De Morgan. (whitespace--empty-at-bob-matcher, whitespace-post-command-hook) (whitespace--update-bob-eob): Use `point-min` and `point-max`. diff --git a/lisp/whitespace.el b/lisp/whitespace.el index efee11faf98..10425759562 100644 --- a/lisp/whitespace.el +++ b/lisp/whitespace.el @@ -458,8 +458,7 @@ See also `whitespace-display-mappings' for documentation." (const :tag "(Face) SPACEs before TAB" space-before-tab) (const :tag "(Mark) SPACEs and HARD SPACEs" space-mark) (const :tag "(Mark) TABs" tab-mark) - (const :tag "(Mark) NEWLINEs" newline-mark)) - :group 'whitespace) + (const :tag "(Mark) NEWLINEs" newline-mark))) (defvar whitespace-space 'whitespace-space "Symbol face used to visualize SPACE. @@ -475,8 +474,7 @@ Used when `whitespace-style' includes the value `spaces'.") (t :inverse-video t)) "Face used to visualize SPACE. -See `whitespace-space-regexp'." - :group 'whitespace) +See `whitespace-space-regexp'.") (defvar whitespace-hspace 'whitespace-hspace @@ -492,8 +490,7 @@ Used when `whitespace-style' includes the value `spaces'.") (t :inverse-video t)) "Face used to visualize HARD SPACE. -See `whitespace-hspace-regexp'." - :group 'whitespace) +See `whitespace-hspace-regexp'.") (defvar whitespace-tab 'whitespace-tab @@ -510,8 +507,7 @@ Used when `whitespace-style' includes the value `tabs'.") (t :inverse-video t)) "Face used to visualize TAB. -See `whitespace-tab-regexp'." - :group 'whitespace) +See `whitespace-tab-regexp'.") (defvar whitespace-newline 'whitespace-newline @@ -531,8 +527,7 @@ and `newline'.") (t :underline t)) "Face used to visualize NEWLINE char mapping. -See `whitespace-display-mappings'." - :group 'whitespace) +See `whitespace-display-mappings'.") (defvar whitespace-trailing 'whitespace-trailing @@ -546,8 +541,7 @@ Used when `whitespace-style' includes the value `trailing'.") (t :background "red1" :foreground "yellow")) "Face used to visualize trailing blanks. -See `whitespace-trailing-regexp'." - :group 'whitespace) +See `whitespace-trailing-regexp'.") (defvar whitespace-line 'whitespace-line @@ -561,8 +555,7 @@ Used when `whitespace-style' includes the value `line'.") (t :background "gray20" :foreground "violet")) "Face used to visualize \"long\" lines. -See `whitespace-line-column'." - :group 'whitespace) +See `whitespace-line-column'.") (defvar whitespace-space-before-tab 'whitespace-space-before-tab @@ -576,8 +569,7 @@ Used when `whitespace-style' includes the value `space-before-tab'.") (t :background "DarkOrange" :foreground "firebrick")) "Face used to visualize SPACEs before TAB. -See `whitespace-space-before-tab-regexp'." - :group 'whitespace) +See `whitespace-space-before-tab-regexp'.") (defvar whitespace-indentation 'whitespace-indentation @@ -590,16 +582,14 @@ Used when `whitespace-style' includes the value `indentation'.") (t :background "yellow" :foreground "firebrick")) "Face used to visualize `tab-width' or more SPACEs at beginning of line. -See `whitespace-indentation-regexp'." - :group 'whitespace) +See `whitespace-indentation-regexp'.") (defface whitespace-big-indent '((((class mono)) :inverse-video t :weight bold :underline t) (t :background "red" :foreground "firebrick")) "Face used to visualize big indentation. -See `whitespace-big-indent-regexp'." - :group 'whitespace) +See `whitespace-big-indent-regexp'.") (defface whitespace-missing-newline-at-eof '((((class mono)) :inverse-video t :weight bold :underline t) @@ -616,8 +606,7 @@ Used when `whitespace-style' includes the value `empty'.") (t :background "yellow" :foreground "firebrick" :extend t)) "Face used to visualize empty lines at beginning and/or end of buffer. -See `whitespace-empty-at-bob-regexp' and `whitespace-empty-at-eob-regexp." - :group 'whitespace) +See `whitespace-empty-at-bob-regexp' and `whitespace-empty-at-eob-regexp.") (defvar whitespace-space-after-tab 'whitespace-space-after-tab @@ -631,8 +620,7 @@ Used when `whitespace-style' includes the value `space-after-tab'.") (t :background "yellow" :foreground "firebrick")) "Face used to visualize `tab-width' or more SPACEs after TAB. -See `whitespace-space-after-tab-regexp'." - :group 'whitespace) +See `whitespace-space-after-tab-regexp'.") (defcustom whitespace-hspace-regexp @@ -655,8 +643,7 @@ NOTE: Always enclose the elements to highlight in \\\\(...\\\\). Use exactly one pair of enclosing \\\\( and \\\\). This variable is used when `whitespace-style' includes `spaces'." - :type '(regexp :tag "HARD SPACE Chars") - :group 'whitespace) + :type '(regexp :tag "HARD SPACE Chars")) (defcustom whitespace-space-regexp "\\( +\\)" @@ -679,8 +666,7 @@ NOTE: Always enclose the elements to highlight in \\\\(...\\\\). Use exactly one pair of enclosing \\\\( and \\\\). This variable is used when `whitespace-style' includes `spaces'." - :type '(regexp :tag "SPACE Chars") - :group 'whitespace) + :type '(regexp :tag "SPACE Chars")) (defcustom whitespace-tab-regexp "\\(\t+\\)" @@ -703,8 +689,7 @@ NOTE: Always enclose the elements to highlight in \\\\(...\\\\). Use exactly one pair of enclosing \\\\( and \\\\). This variable is used when `whitespace-style' includes `tabs'." - :type '(regexp :tag "TAB Chars") - :group 'whitespace) + :type '(regexp :tag "TAB Chars")) (defcustom whitespace-trailing-regexp @@ -722,8 +707,7 @@ NOTE: Always enclose the elements to highlight in \"\\\\(\"...\"\\\\)$\". Use exactly one pair of enclosing elements above. This variable is used when `whitespace-style' includes `trailing'." - :type '(regexp :tag "Trailing Chars") - :group 'whitespace) + :type '(regexp :tag "Trailing Chars")) (defcustom whitespace-space-before-tab-regexp "\\( +\\)\\(\t+\\)" @@ -733,8 +717,7 @@ The SPACE characters are highlighted using the `whitespace-space-before-tab' face. This variable is used when `whitespace-style' includes `space-before-tab', `space-before-tab::tab' or `space-before-tab::space'." - :type '(regexp :tag "SPACEs Before TAB") - :group 'whitespace) + :type '(regexp :tag "SPACEs Before TAB")) (defcustom whitespace-indentation-regexp @@ -751,8 +734,7 @@ face. This variable is used when `whitespace-style' includes `indentation', `indentation::tab' or `indentation::space'." :type '(cons (string :tag "Indentation SPACEs") - (regexp :tag "Indentation TABs")) - :group 'whitespace) + (regexp :tag "Indentation TABs"))) (defcustom whitespace-empty-at-bob-regexp "\\`\\([ \t\n]*\\(?:\n\\|$\\)\\)" @@ -760,8 +742,7 @@ This variable is used when `whitespace-style' includes `indentation', The empty lines are highlighted using the `whitespace-empty' face. This variable is used when `whitespace-style' includes `empty'." - :type '(regexp :tag "Empty Lines At Beginning Of Buffer") - :group 'whitespace) + :type '(regexp :tag "Empty Lines At Beginning Of Buffer")) (defcustom whitespace-empty-at-eob-regexp "^\\([ \t\n]+\\)\\'" @@ -769,8 +750,7 @@ This variable is used when `whitespace-style' includes `empty'." The empty lines are highlighted using the `whitespace-empty' face. This variable is used when `whitespace-style' includes `empty'." - :type '(regexp :tag "Empty Lines At End Of Buffer") - :group 'whitespace) + :type '(regexp :tag "Empty Lines At End Of Buffer")) (defcustom whitespace-space-after-tab-regexp @@ -788,8 +768,7 @@ face. This variable is used when `whitespace-style' includes `space-after-tab', `space-after-tab::tab' or `space-after-tab::space'." :type '(cons (string :tag "SPACEs After TAB") - string) - :group 'whitespace) + string)) (defcustom whitespace-big-indent-regexp "^\\(\\(?:\t\\{4,\\}\\| \\{32,\\}\\)[\t ]*\\)" @@ -805,8 +784,7 @@ NOTE: Always enclose the elements to highlight in \\\\(...\\\\). This variable is used when `whitespace-style' includes `big-indent'." :version "25.1" - :type '(regexp :tag "Detect too much indentation at the beginning of a line") - :group 'whitespace) + :type '(regexp :tag "Detect too much indentation at the beginning of a line")) (defcustom whitespace-line-column 80 @@ -823,8 +801,7 @@ This variable is used when `whitespace-style' includes `lines', :type '(choice :tag "Line Length Limit" (integer :tag "Line Length") (const :tag "Use fill-column" nil)) - :safe 'integerp - :group 'whitespace) + :safe #'integerp) ;; Hacked from `visible-whitespace-mappings' in visws.el @@ -887,8 +864,7 @@ This variable is used when `whitespace-style' includes `tab-mark', (vector :tag "" (repeat :inline t :tag "Vector Characters" - (character :tag "Char")))))) - :group 'whitespace) + (character :tag "Char"))))))) (defcustom whitespace-global-modes t @@ -917,8 +893,7 @@ C++ modes only." :value (not) (const :tag "Except" not) (repeat :inline t - (symbol :tag "Mode")))) - :group 'whitespace) + (symbol :tag "Mode"))))) (defcustom whitespace-action nil @@ -957,8 +932,7 @@ Any other value is treated as nil." (const :tag "Report On Bogus" report-on-bogus) (const :tag "Auto Cleanup" auto-cleanup) (const :tag "Abort On Bogus" abort-on-bogus) - (const :tag "Warn If Read-Only" warn-if-read-only)))) - :group 'whitespace) + (const :tag "Warn If Read-Only" warn-if-read-only))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -975,9 +949,6 @@ See also `whitespace-style', `whitespace-newline' and This mode uses a number of faces to visualize the whitespace; see the customization group `whitespace' for details." :lighter " ws" - :init-value nil - :global nil - :group 'whitespace (cond (noninteractive ; running a batch job (setq whitespace-mode nil)) @@ -999,9 +970,6 @@ use `whitespace-mode'. See also `whitespace-newline' and `whitespace-display-mappings'." :lighter " nl" - :init-value nil - :global nil - :group 'whitespace (let ((whitespace-style '(face newline-mark newline))) (whitespace-mode (if whitespace-newline-mode 1 -1))) @@ -1017,8 +985,7 @@ See also `whitespace-newline' and `whitespace-display-mappings'." (define-globalized-minor-mode global-whitespace-mode whitespace-mode whitespace-turn-on-if-enabled - :init-value nil - :group 'whitespace) + :init-value nil) (defvar whitespace-enable-predicate (lambda () @@ -1057,9 +1024,7 @@ please use `global-whitespace-mode'. See also `whitespace-newline' and `whitespace-display-mappings'." :lighter " NL" - :init-value nil :global t - :group 'whitespace (let ((whitespace-style '(newline-mark newline))) (global-whitespace-mode (if global-whitespace-newline-mode 1 -1)) @@ -2037,7 +2002,7 @@ resultant list will be returned." (defun whitespace-turn-on () "Turn on whitespace visualization." ;; prepare local hooks - (add-hook 'write-file-functions 'whitespace-write-file-hook nil t) + (add-hook 'write-file-functions #'whitespace-write-file-hook nil t) ;; create whitespace local buffer environment (setq-local whitespace-font-lock-keywords nil) (setq-local whitespace-display-table nil) @@ -2054,7 +2019,7 @@ resultant list will be returned." (defun whitespace-turn-off () "Turn off whitespace visualization." - (remove-hook 'write-file-functions 'whitespace-write-file-hook t) + (remove-hook 'write-file-functions #'whitespace-write-file-hook t) (when whitespace-active-style (whitespace-color-off) (whitespace-display-char-off))) @@ -2108,7 +2073,6 @@ resultant list will be returned." (whitespace--update-bob-eob) (setq-local whitespace-buffer-changed nil) (add-hook 'post-command-hook #'whitespace-post-command-hook nil t) - (add-hook 'before-change-functions #'whitespace-buffer-changed nil t) (add-hook 'after-change-functions #'whitespace--update-bob-eob ;; The -1 ensures that it runs before any ;; `font-lock-mode' hook functions. @@ -2205,7 +2169,6 @@ resultant list will be returned." (kill-local-variable 'whitespace-point--used) (when (whitespace-style-face-p) (remove-hook 'post-command-hook #'whitespace-post-command-hook t) - (remove-hook 'before-change-functions #'whitespace-buffer-changed t) (remove-hook 'after-change-functions #'whitespace--update-bob-eob t) (remove-hook 'clone-buffer-hook #'whitespace--clone t) @@ -2273,11 +2236,11 @@ Highlighting those lines can be distracting.)" whitespace-eob-marker (save-excursion (goto-char whitespace-point) (line-beginning-position))))) - (when (= p 1) + (when (= p (point-min)) (with-silent-modifications ;; See the comment in `whitespace--update-bob-eob' for why ;; this text property is added here. - (put-text-property 1 whitespace-bob-marker + (put-text-property (point-min) whitespace-bob-marker 'font-lock-multiline t))) (when (< p e) (set-match-data (list p e)) @@ -2298,7 +2261,7 @@ excluded from the match. (The idea is that the user might be about to start typing, and if they do, that line and previous empty lines will no longer be EoB empty lines. Highlighting those lines can be distracting.)" - (when (= limit (1+ (buffer-size))) + (when (= limit (point-max)) (with-silent-modifications ;; See the comment in `whitespace--update-bob-eob' for why this ;; text property is added here. @@ -2313,24 +2276,20 @@ those lines can be distracting.)" (set-match-data (list b limit)) (goto-char limit)))) -(defun whitespace-buffer-changed (_beg _end) - "Set `whitespace-buffer-changed' variable to t." - (setq whitespace-buffer-changed t)) - (defun whitespace-post-command-hook () "Save current point into `whitespace-point' variable. Also refontify when necessary." - (unless (and (eq whitespace-point (point)) - (not whitespace-buffer-changed)) + (when (or (not (eq whitespace-point (point))) + whitespace-buffer-changed) (when (and (not whitespace-buffer-changed) (memq 'empty whitespace-active-style)) ;; No need to handle the `whitespace-buffer-changed' case here ;; because that is taken care of by the `font-lock-multiline' ;; text property. (when (<= (min (point) whitespace-point) whitespace-bob-marker) - (font-lock-flush 1 whitespace-bob-marker)) + (font-lock-flush (point-min) whitespace-bob-marker)) (when (>= (max (point) whitespace-point) whitespace-eob-marker) - (font-lock-flush whitespace-eob-marker (1+ (buffer-size))))) + (font-lock-flush whitespace-eob-marker (point-max)))) (setq-local whitespace-buffer-changed nil) (setq whitespace-point (point)) ; current point position (let ((refontify (or (and (eolp) ; It is at end of line ... @@ -2408,6 +2367,7 @@ Also apply `font-lock-multiline' text property. If BEG and END are non-nil, assume that only characters in that range have changed since the last call to this function (for optimization purposes)." + (setq whitespace-buffer-changed t) (when (memq 'empty whitespace-active-style) ;; When a line is changed, `font-lock-mode' normally limits ;; re-processing to only the changed line. That behavior is @@ -2452,7 +2412,7 @@ purposes)." ;; "x" from " x"). (forward-line 1) (point)))) - (goto-char 1) + (goto-char (point-min)) (set-marker whitespace-bob-marker (point)) (save-match-data (when (looking-at whitespace-empty-at-bob-regexp) @@ -2466,7 +2426,7 @@ purposes)." ;; See above comment for the BoB case. (forward-line -1) (point)))) - (goto-char (1+ (buffer-size))) + (goto-char (point-max)) (set-marker whitespace-eob-marker (point)) (save-match-data (when (whitespace--looking-back commit b97b3b057ca8128cb479f8d3893816d146cfef59 Author: Po Lu Date: Mon May 5 08:51:42 2025 +0800 Synchronize Android and Haiku terminal frontends with X * src/androidterm.c (handle_one_android_event): * src/haikuterm.c (haiku_read_socket): Port recent changes to handle_one_xevent. diff --git a/src/androidterm.c b/src/androidterm.c index 96f595f3bdf..beab3406fdd 100644 --- a/src/androidterm.c +++ b/src/androidterm.c @@ -957,9 +957,9 @@ handle_one_android_event (struct android_display_info *dpyinfo, /* If mouse-highlight is an integer, input clears out mouse highlighting. */ if (!hlinfo->mouse_face_hidden && FIXNUMP (Vmouse_highlight) - && (any == 0 - || !EQ (any->tool_bar_window, hlinfo->mouse_face_window) - || !EQ (any->tab_bar_window, hlinfo->mouse_face_window))) + && (any == NULL + || (!EQ (any->tool_bar_window, hlinfo->mouse_face_window) + && !EQ (any->tab_bar_window, hlinfo->mouse_face_window)))) { mouse_frame = hlinfo->mouse_face_mouse_frame; diff --git a/src/haikuterm.c b/src/haikuterm.c index 5c0863d3509..75c82ebdf31 100644 --- a/src/haikuterm.c +++ b/src/haikuterm.c @@ -3352,9 +3352,9 @@ haiku_read_socket (struct terminal *terminal, struct input_event *hold_quit) /* 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))) + && (f == NULL + || (!EQ (f->tool_bar_window, hlinfo->mouse_face_window) + && !EQ (f->tab_bar_window, hlinfo->mouse_face_window)))) { mouse_frame = hlinfo->mouse_face_mouse_frame; diff --git a/src/xterm.c b/src/xterm.c index 03064acbe6c..0ff7804112f 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -20201,8 +20201,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, /* If mouse-highlight is an integer, input clears out mouse highlighting. */ - if (!hlinfo->mouse_face_hidden - && FIXNUMP (Vmouse_highlight) + if (!hlinfo->mouse_face_hidden && FIXNUMP (Vmouse_highlight) && (f == NULL || (!EQ (f->tab_bar_window, hlinfo->mouse_face_window) #if ! defined (USE_GTK) commit 815dea7b59392d83ca8f9e98d1569484aea605ad Author: Juri Linkov Date: Sun May 4 20:50:40 2025 +0300 Avoid duplication in defining tree-sitter grammar sources. * lisp/progmodes/php-ts-mode.el: Require 'html-ts-mode'. (php-ts-mode--language-source-alist): Remove duplicate source info for html, css, javascript, jsdoc. (php-ts-mode-install-parsers): Install pre-defined grammars. (php-ts-mode): Move 'require' to the top. * lisp/textmodes/mhtml-ts-mode.el (mhtml-ts-mode--language-source-alist): Remove variable since 'treesit-language-source-alist' is pre-filled by requiring 'html-ts-mode', 'css-mode', 'js'. (mhtml-ts-mode-install-parsers): Install pre-defined grammars. * test/infra/Dockerfile.emba: Remove 'mhtml-ts-mode' that doesn't define own grammars. diff --git a/lisp/progmodes/php-ts-mode.el b/lisp/progmodes/php-ts-mode.el index 3f7a9ac2d8a..f5a56e29797 100644 --- a/lisp/progmodes/php-ts-mode.el +++ b/lisp/progmodes/php-ts-mode.el @@ -69,6 +69,7 @@ (require 'treesit) (require 'c-ts-common) ;; For comment indent and filling. +(require 'html-ts-mode) ;; for embed html (require 'css-mode) ;; for embed css into html (require 'js) ;; for embed javascript into html (require 'comint) @@ -82,11 +83,7 @@ ;;; Install treesitter language parsers (defvar php-ts-mode--language-source-alist '((php "https://github.com/tree-sitter/tree-sitter-php" "v0.23.11" "php/src") - (phpdoc "https://github.com/claytonrcarter/tree-sitter-phpdoc") - (html "https://github.com/tree-sitter/tree-sitter-html" "v0.23.2") - (javascript "https://github.com/tree-sitter/tree-sitter-javascript" "v0.23.1") - (jsdoc "https://github.com/tree-sitter/tree-sitter-jsdoc" "v0.23.2") - (css "https://github.com/tree-sitter/tree-sitter-css" "v0.23.1")) + (phpdoc "https://github.com/claytonrcarter/tree-sitter-phpdoc")) "Treesitter language parsers required by `php-ts-mode'. You can customize `treesit-language-source-alist' if you want to stick to a specific commit and/or use different parsers.") @@ -96,10 +93,11 @@ to stick to a specific commit and/or use different parsers.") (defun php-ts-mode-install-parsers () "Install all the required treesitter parsers. -`php-ts-mode--language-source-alist' defines which parsers to install." +`treesit-language-source-alist' defines which parsers to install. +It's pre-filled by loading \"html-ts-mode\", \"css-mode\", \"js\"." (interactive) - (dolist (item php-ts-mode--language-source-alist) - (treesit-install-language-grammar (car item)))) + (dolist (lang '(php phpdoc html css javascript jsdoc)) + (treesit-install-language-grammar lang))) ;;; Custom variables @@ -1391,13 +1389,6 @@ Depends on `c-ts-common-comment-setup'." available. You can install the parsers with M-x `php-ts-mode-install-parsers'") - ;; Require html-ts-mode only when we load php-ts-mode - ;; so that we don't get a tree-sitter compilation warning for - ;; php-ts-mode. - (defvar html-ts-mode--indent-rules) - (require 'html-ts-mode) - ;; For embed html - ;; phpdoc is a local parser, don't create a parser for it (treesit-parser-create 'html) (treesit-parser-create 'css) diff --git a/lisp/textmodes/mhtml-ts-mode.el b/lisp/textmodes/mhtml-ts-mode.el index ab5d631eed6..d41f93e2682 100644 --- a/lisp/textmodes/mhtml-ts-mode.el +++ b/lisp/textmodes/mhtml-ts-mode.el @@ -50,9 +50,9 @@ ;;; Code: (require 'treesit) +(require 'html-ts-mode) (require 'css-mode) ;; for embed css into html (require 'js) ;; for embed javascript into html -(require 'html-ts-mode) (eval-when-compile (require 'rx)) @@ -62,26 +62,13 @@ ;; in a Emacs not built with tree-sitter library. (treesit-declare-unavailable-functions) -;; In a multi-language major mode can be useful to have an "installer" to -;; simplify the installation of the grammars supported by the major-mode. -(defvar mhtml-ts-mode--language-source-alist - '((html "https://github.com/tree-sitter/tree-sitter-html" "v0.23.2") - (javascript "https://github.com/tree-sitter/tree-sitter-javascript" "v0.23.1") - (jsdoc "https://github.com/tree-sitter/tree-sitter-jsdoc" "v0.23.2") - (css "https://github.com/tree-sitter/tree-sitter-css" "v0.23.1")) - "Treesitter language parsers required by `mhtml-ts-mode'. -You can customize `treesit-language-source-alist' if you want -to stick to a specific commit and/or use different parsers.") - -(dolist (item mhtml-ts-mode--language-source-alist) - (add-to-list 'treesit-language-source-alist item t)) - (defun mhtml-ts-mode-install-parsers () "Install all the required treesitter parsers. -`mhtml-ts-mode--language-source-alist' defines which parsers to install." +`treesit-language-source-alist' defines which parsers to install. +It's pre-filled by loading \"html-ts-mode\", \"css-mode\", \"js\"." (interactive) - (dolist (item mhtml-ts-mode--language-source-alist) - (treesit-install-language-grammar (car item)))) + (dolist (lang '(html css javascript jsdoc)) + (treesit-install-language-grammar lang))) ;;; Custom variables diff --git a/test/infra/Dockerfile.emba b/test/infra/Dockerfile.emba index c6aed2aeac9..b7af7006acf 100644 --- a/test/infra/Dockerfile.emba +++ b/test/infra/Dockerfile.emba @@ -132,9 +132,9 @@ RUN src/emacs -Q --batch \ --eval '(setq treesit-extra-load-path (list "/root/.emacs.d/tree-sitter"))' \ --eval '(dolist (feature (quote (c-ts-mode cmake-ts-mode csharp-mode \ dockerfile-ts-mode elixir-ts-mode heex-ts-mode go-ts-mode java-ts-mode \ - js json-ts-mode lua-ts-mode python ruby-ts-mode rust-ts-mode sh-script \ - typescript-ts-mode css-mode html-ts-mode markdown-ts-mode toml-ts-mode \ - yaml-ts-mode mhtml-ts-mode php-ts-mode treesit-x))) (require feature))' \ + js json-ts-mode lua-ts-mode php-ts-mode python ruby-ts-mode rust-ts-mode \ + sh-script typescript-ts-mode css-mode html-ts-mode markdown-ts-mode \ + toml-ts-mode yaml-ts-mode treesit-x))) (require feature))' \ --eval '(dolist (lang (mapcar (quote car) treesit-language-source-alist)) \ (treesit-install-language-grammar lang "/root/.emacs.d/tree-sitter"))' \ --eval '(message "treesit-language-source-alist\n%s" \ commit 9e75d1815125178b4b8584faa02569d6b84fc0b5 Author: Juri Linkov Date: Sun May 4 20:03:32 2025 +0300 * lisp/textmodes/markdown-ts-mode.el: Improve. (markdown-ts-list-marker): Inherit from 'shadow' like in non-ts mode. (markdown-ts-block-quote): Inherit from 'italic' like in non-ts mode. (markdown-ts--treesit-settings): Use 'shadow' for parens in 'markdown-inline' only under 'inline_link' and 'image'. Use @markdown-ts-block-quote for 'block_quote'. Override with 'append' for links. (markdown-ts--range-settings): Use global html parser for 'html_tag' since its ranges are interconnected. (markdown-ts-setup): Create the 'html' parser. diff --git a/lisp/textmodes/markdown-ts-mode.el b/lisp/textmodes/markdown-ts-mode.el index b6b310a9647..d85cb581fe8 100644 --- a/lisp/textmodes/markdown-ts-mode.el +++ b/lisp/textmodes/markdown-ts-mode.el @@ -127,10 +127,10 @@ maps to tree-sitter language `cpp'.") (defface markdown-ts-heading-6 '((t (:inherit outline-6))) "Face for sixth level Markdown headings.") -(defface markdown-ts-list-marker '((t (:inherit font-lock-keyword-face))) +(defface markdown-ts-list-marker '((t (:inherit shadow))) "Face for Markdown list markers like - and *.") -(defface markdown-ts-block-quote '((t (:inherit font-lock-string-face))) +(defface markdown-ts-block-quote '((t (:inherit italic))) "Face for Markdown block quotes.") (defface markdown-ts-language-keyword '((t (:inherit font-lock-keyword-face))) @@ -140,10 +140,11 @@ maps to tree-sitter language `cpp'.") (defvar markdown-ts--treesit-settings (treesit-font-lock-rules - :language 'markdown + :language 'markdown-inline :override t :feature 'delimiter - '([ "[" "]" "(" ")" ] @shadow) + '((inline_link [ "[" "]" "(" ")" ] @shadow) + (image [ "!" "[" "]" "(" ")" ] @shadow)) :language 'markdown :feature 'heading @@ -172,14 +173,12 @@ maps to tree-sitter language `cpp'.") (list_item (list_marker_star) @markdown-ts-list-marker) (list_item (list_marker_plus) @markdown-ts-list-marker) (list_item (list_marker_minus) @markdown-ts-list-marker) - (list_item (list_marker_dot) @markdown-ts-list-marker) - - (block_quote) @markdown-ts-block-quote) + (list_item (list_marker_dot) @markdown-ts-list-marker)) :language 'markdown :feature 'paragraph :override 'prepend - '((block_quote) @italic + '((block_quote) @markdown-ts-block-quote (block_quote_marker) @markdown-ts-delimiter (fenced_code_block_delimiter) @markdown-ts-delimiter (fenced_code_block @@ -189,7 +188,7 @@ maps to tree-sitter language `cpp'.") (paragraph (inline (block_continuation) @markdown-ts-delimiter)))) :language 'markdown-inline - :override t ;; override paren delimiter inside inline link + :override 'append :feature 'paragraph-inline '(((image_description) @link) ((link_destination) @font-lock-string-face) @@ -313,7 +312,6 @@ the same features enabled in MODE." :embed 'html :host 'markdown-inline - :local t '((html_tag) @html) :embed #'markdown-ts--convert-code-block-language @@ -330,6 +328,7 @@ the same features enabled in MODE." (setq-local treesit-range-settings (markdown-ts--range-settings)) (when (treesit-ready-p 'html t) + (treesit-parser-create 'html) (require 'html-ts-mode) (defvar html-ts-mode--font-lock-settings) (defvar html-ts-mode--treesit-font-lock-feature-list) commit 660ebdddf6583e447b50f6574dca4ca8ff42ef60 Author: João Távora Date: Sun May 4 08:27:13 2025 +0100 Eglot: allow other keys in window/logMessage (bug#77948) * lisp/progmodes/eglot.el (eglot-handle-notification window/logMessage): Fix. diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index d796c9fc802..474245352d6 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -2630,7 +2630,7 @@ return it back to the server. :null is returned if the list was empty." (if (and actions label) (cdr (assoc label actions)) :null))) (cl-defmethod eglot-handle-notification - (_server (_method (eql window/logMessage)) &key _type _message) + (_server (_method (eql window/logMessage)) &key _type _message &allow-other-keys) "Handle notification window/logMessage.") ;; noop, use events buffer (cl-defmethod eglot-handle-notification commit 81629b2b2ba282136bc5055bbaa0302321306e61 Author: Eli Zaretskii Date: Sun May 4 09:47:49 2025 +0300 ; * lisp/gnus/mail-source.el (mail-sources): Fix a typo (bug#78235). diff --git a/lisp/gnus/mail-source.el b/lisp/gnus/mail-source.el index daba2f3fd20..554db48800d 100644 --- a/lisp/gnus/mail-source.el +++ b/lisp/gnus/mail-source.el @@ -201,8 +201,8 @@ Leave mails for this many days" :value 14))))) (string :tag "Program")) (group :inline t (const :format "" - :value :authenticator) - (choice :tag "Authenticator" + :value :authentication) + (choice :tag "Authentication" :value login ,@mail-source-imap-authenticators)) (group :inline t commit 6ccfc8977821d02e8d589c801e6cad2e74ab699b Author: Gerd Möllmann Date: Sun May 4 08:17:27 2025 +0200 Fix support of 'mouse-highlight' on X (bug#78218) * src/xterm.c (handle_one_xevent): Fix comparison with tool-bar and tab-bar window. diff --git a/src/xterm.c b/src/xterm.c index 249916cf954..03064acbe6c 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -20201,13 +20201,14 @@ handle_one_xevent (struct x_display_info *dpyinfo, /* If mouse-highlight is an integer, input clears out mouse highlighting. */ - if (!hlinfo->mouse_face_hidden && FIXNUMP (Vmouse_highlight) - && (f == 0 + if (!hlinfo->mouse_face_hidden + && FIXNUMP (Vmouse_highlight) + && (f == NULL + || (!EQ (f->tab_bar_window, hlinfo->mouse_face_window) #if ! defined (USE_GTK) - || !EQ (f->tool_bar_window, hlinfo->mouse_face_window) + && !EQ (f->tool_bar_window, hlinfo->mouse_face_window) #endif - || !EQ (f->tab_bar_window, hlinfo->mouse_face_window)) - ) + ))) { mouse_frame = hlinfo->mouse_face_mouse_frame; commit 1897da0b599cc3ea1e4aa626e47ac8943a7b6833 Author: Yuan Fu Date: Tue Mar 18 17:26:26 2025 -0700 Add line-column tracking for tree-sitter Add line-column tracking for tree-sitter parsers. Copied from comments in treesit.c: Technically we had to send tree-sitter the line and column position of each edit. But in practice we just send it dummy values, because tree-sitter doesn't use it for parsing and mostly just carries the line and column positions around and return it when e.g. reporting node positions[1]. This has been working fine until we encountered grammars that actually utilizes the line and column information for parsing (Haskell)[2]. [1] https://github.com/tree-sitter/tree-sitter/issues/445 [2] https://github.com/tree-sitter/tree-sitter/issues/4001 So now we have to keep track of line and column positions and pass valid values to tree-sitter. (It adds quite some complexity, but only linearly; one can ignore all the linecol stuff when trying to understand treesit code and then come back to it later.) Eli convinced me to disable tracking by default, and only enable it for languages that needs it. So the buffer starts out not tracking linecol. And when a parser is created, if the language is in treesit-languages-require-line-column-tracking, we enable tracking in the buffer, and enable tracking for the parser. To simplify things, once a buffer starts tracking linecol, it never disables tracking, even if parsers that need tracking are all deleted; and for parsers, tracking is determined at creation time, if it starts out tracking/non-tracking, it stays that way, regardless of later changes to treesit-languages-require-line-column-tracking. To make calculating line/column positons fast, we store linecol caches for begv, point, and zv in the buffer (buf->ts_linecol_cache_xxx); and in the parser object, we store linecol cache for visible beg/end of that parser. In buffer editing functions, we need the linecol for start/old_end/new_end, those can be calculated by scanning newlines (treesit_linecol_of_pos) from the buffer point cache, which should be always near the point. And we usually set the calculated linecol of new_end back to the buffer point cache. We also need to calculate linecol for the visible_beg/end for each parser, and linecol for the buffer's begv/zv, these positions are usually far from point, so we have caches for all of them (in either the parser object or the buffer). These positions are far from point, so it's inefficient to scan newlines from point to there to get up-to-date linecol for them; but in the same time, because they're far and outside the changed region, we can calculate their change in line and column number by simply counting how much newlines are added/removed in the changed region (compute_new_linecol_by_change). * doc/lispref/parsing.texi (Using Parser): Mention line-column tracking in manual. * etc/NEWS: Add news. * lisp/treesit.el: (treesit-languages-need-line-column-tracking): New variable. * src/buffer.c: Include treesit.h (for TREESIT_EMPTY_LINECOL). (Fget_buffer_create): (Fmake_indirect_buffer): Initialize new buffer fields. (Fbuffer_swap_text): Add new buffer fields. * src/buffer.h (ts_linecol): New struct. (buffer): New buffer fields. (BUF_TS_LINECOL_BEGV): (BUF_TS_LINECOL_POINT): (BUF_TS_LINECOL_ZV): (SET_BUF_TS_LINECOL_BEGV): (SET_BUF_TS_LINECOL_POINT): (SET_BUF_TS_LINECOL_ZV): New inline functions. * src/casefiddle.c (casify_region): Record linecol info. * src/editfns.c (Fsubst_char_in_region): (Ftranslate_region_internal): (Ftranspose_regions): Record linecol info. * src/insdel.c (insert_1_both): (insert_from_string_1): (insert_from_gap_1): (insert_from_buffer): (replace_range): (del_range_2): Record linecol info. * src/treesit.c (TREESIT_BOB_LINECOL): (TREESIT_EMPTY_LINECOL): (TREESIT_TS_POINT_1_0): New constants. (treesit_debug_print_linecol): (treesit_buf_tracks_linecol_p): (restore_restriction_and_selective_display): (treesit_count_lines): (treesit_debug_validate_linecol): (treesit_linecol_of_pos): (treesit_make_ts_point): (Ftreesit_tracking_line_column_p): (Ftreesit_parser_tracking_line_column_p): New functions. (treesit_tree_edit_1): Accept real TSPoint and pass to tree-sitter. (compute_new_linecol_by_change): New function. (treesit_record_change_1): Rename from treesit_record_change, handle linecol if tracking is enabled. (treesit_linecol_maybe): New function. (treesit_record_change): New wrapper around treesit_record_change_1 that handles some boilerplate and sets buffer state. (treesit_sync_visible_region): Handle linecol if tracking is enabled. (make_treesit_parser): Setup parser's linecol cache if tracking is enabled. (Ftreesit_parser_create): Enable tracking if the parser's language requires it. (Ftreesit__linecol_at): (Ftreesit__linecol_cache_set): (Ftreesit__linecol_cache): New functions for debugging and testing. (syms_of_treesit): New variable Vtreesit_languages_require_line_column_tracking. * src/treesit.h (Lisp_TS_Parser): New fields. (TREESIT_BOB_LINECOL): (TREESIT_EMPTY_LINECOL): New constants. * test/src/treesit-tests.el (treesit-linecol-basic): (treesit-linecol-search-back-across-newline): (treesit-linecol-col-same-line): (treesit-linecol-enable-disable): New tests. * src/lisp.h: Declare display_count_lines. * src/xdisp.c (display_count_lines): Remove static keyword. diff --git a/doc/lispref/parsing.texi b/doc/lispref/parsing.texi index f7be47dc044..aa321785460 100644 --- a/doc/lispref/parsing.texi +++ b/doc/lispref/parsing.texi @@ -419,6 +419,27 @@ tree-sitter can be activated. Major modes should check this value when deciding whether to enable tree-sitter features. @end defvar +@defvar treesit-languages-require-line-column-tracking +Emacs by default doesn't keep track of line and column numbers for +positions in a buffer. However, some language grammars utilize the line +and column information for parsing. If parsers of these languages are +created in a buffer, Emacs will turn on line and column tracking and +report these information to these parsers. Once the buffer starts +tracking line and column, it never stops doing so. And once a parser is +created as tracking/not-tracking line and column, it stays that way +regardless of changes to this variable. + +This variable is a list of languages that require line and column +tracking. The vast majority of languages don't need line and column +information. So far, only Haskell is known to need it. + +@findex treesit-tracking-line-column-p +@findex treesit-parser-tracking-line-column-p +User can use @code{treesit-tracking-line-column-p} and +@code{treesit-parser-tracking-line-column-p} to check if a buffer or +parser is tracking line and column, respectively. +@end defvar + @cindex creating tree-sitter parsers @cindex tree-sitter parser, creating @defun treesit-parser-create language &optional buffer no-reuse tag diff --git a/etc/NEWS b/etc/NEWS index 1e79d18e4ab..146cdedaa43 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -682,6 +682,23 @@ tree-sitter modes. Users can customize this variable to add simple custom indentation rules for tree-sitter major modes. ++++ +*** New variable 'treesit-languages-require-line-column-tracking' +Now Emacs can optionally track line and column numbers for buffer edits +and send that information to tree-sitter parsers. Parsers of languages +in this list will receive line and column information. This is only +needed for very few languages. So far only Haskell is known to need it. + ++++ +*** New function 'treesit-tracking-line-column-p' +New function to check if a buffer is tracking line and column for buffer +edits. + ++++ +*** New function 'treesit-parser-tracking-line-column-p' +New function to check if a parser is receiving line and column +information. + +++ *** 'treesit-language-at-point-function' is now optional. Multi-language major modes can rely on the default return value from diff --git a/lisp/treesit.el b/lisp/treesit.el index 2794fdfe91f..69cc28b0cec 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -1229,7 +1229,11 @@ omitted, default END to BEG." return rng finally return nil)))) -;;; Language display name +;;; Language + +;; Defined in tressit.c. This is just to add some default values. +(defvar treesit-languages-need-line-column-tracking + '(haskell)) ;; The entries are sorted by `sort-lines'. (defvar treesit-language-display-name-alist diff --git a/src/buffer.c b/src/buffer.c index a408b799ff4..53aa3163fe0 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -48,6 +48,10 @@ along with GNU Emacs. If not, see . */ #include "w32heap.h" /* for mmap_* */ #endif +#ifdef HAVE_TREE_SITTER +#include "treesit.h" +#endif + /* Work around GCC bug 109847 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109847 which causes GCC to mistakenly complain about @@ -641,6 +645,13 @@ even if it is dead. The return value is never nil. */) bset_width_table (b, Qnil); b->prevent_redisplay_optimizations_p = 1; +#ifdef HAVE_TREE_SITTER + /* By default, use empty linecol, which means disable tracking. */ + SET_BUF_TS_LINECOL_BEGV (b, TREESIT_EMPTY_LINECOL); + SET_BUF_TS_LINECOL_POINT (b, TREESIT_EMPTY_LINECOL); + SET_BUF_TS_LINECOL_ZV (b, TREESIT_EMPTY_LINECOL); +#endif + /* An ordinary buffer normally doesn't need markers to handle BEGV and ZV. */ bset_pt_marker (b, Qnil); @@ -867,6 +878,13 @@ Interactively, CLONE and INHIBIT-BUFFER-HOOKS are nil. */) b->bidi_paragraph_cache = 0; bset_width_table (b, Qnil); +#ifdef HAVE_TREE_SITTER + /* By default, use empty linecol, which means disable tracking. */ + SET_BUF_TS_LINECOL_BEGV (b, TREESIT_EMPTY_LINECOL); + SET_BUF_TS_LINECOL_POINT (b, TREESIT_EMPTY_LINECOL); + SET_BUF_TS_LINECOL_ZV (b, TREESIT_EMPTY_LINECOL); +#endif + name = Fcopy_sequence (name); set_string_intervals (name, NULL); bset_name (b, name); @@ -2618,6 +2636,13 @@ results, see Info node `(elisp)Swapping Text'. */) bset_point_before_scroll (current_buffer, Qnil); bset_point_before_scroll (other_buffer, Qnil); +#ifdef HAVE_TREE_SITTER + swapfield_ (ts_parser_list, Lisp_Object); + swapfield (ts_linecol_begv, struct ts_linecol); + swapfield (ts_linecol_point, struct ts_linecol); + swapfield (ts_linecol_zv, struct ts_linecol); +#endif + modiff_incr (¤t_buffer->text->modiff, 1); modiff_incr (&other_buffer->text->modiff, 1); modiff_incr (¤t_buffer->text->chars_modiff, 1); diff --git a/src/buffer.h b/src/buffer.h index d19ff22babd..26a334ea810 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -220,6 +220,20 @@ extern ptrdiff_t advance_to_char_boundary (ptrdiff_t byte_pos); /* Define the actual buffer data structures. */ +/* This data structure stores the cache of a position and its line and + column number. The column number is counted in bytes. The line + number and column number don't respect narrowing. */ +struct ts_linecol +{ + /* The byte position. */ + ptrdiff_t bytepos; + /* The line number of this position. */ + ptrdiff_t line; + /* The column number (in bytes) of this position (0-based). Basically + the byte offset from BOL (or BOB). */ + ptrdiff_t col; +}; + /* This data structure describes the actual text contents of a buffer. It is shared between indirect buffers and their base buffer. */ @@ -700,6 +714,25 @@ struct buffer /* The interval tree containing this buffer's overlays. */ struct itree_tree *overlays; + /* Right now only tree-sitter makes use of this, so I don't want + non-tree-sitter build to pay for it. If something else can make + use of this, we can remove the gate. */ +#ifdef HAVE_TREE_SITTER + /* Cache of line and column number of a position. Tree-sitter uses + this cache to calculate line and column of the beginning and end of + buffer edits. Stores three caches for BEGV, point, ZV, + respectively. All three are refreshed in buffer edit functions, so + they're always up-to-date (in the sense that the bytepos and + line/column number are in sync, not in the sense that the bytepos + is at the actual position of point/BEGV/ZV, indeed, most of the + time the bytepos is only near the actual position). All caches are + initialized to empty, meaning no linecol tracking for this + buffer. */ + struct ts_linecol ts_linecol_begv; + struct ts_linecol ts_linecol_point; + struct ts_linecol ts_linecol_zv; +#endif + /* Changes in the buffer are recorded here for undo, and t means don't record anything. This information belongs to the base buffer of an indirect buffer. But we can't store it in the @@ -1134,6 +1167,45 @@ BUFFER_CHECK_INDIRECTION (struct buffer *b) } } +#ifdef HAVE_TREE_SITTER + +INLINE struct ts_linecol +BUF_TS_LINECOL_BEGV (struct buffer *buf) +{ + return buf->ts_linecol_begv; +} +INLINE struct ts_linecol +BUF_TS_LINECOL_POINT (struct buffer *buf) +{ + return buf->ts_linecol_point; +} + +INLINE struct ts_linecol +BUF_TS_LINECOL_ZV (struct buffer *buf) +{ + return buf->ts_linecol_zv; +} + +INLINE void +SET_BUF_TS_LINECOL_BEGV (struct buffer *buf, struct ts_linecol linecol) +{ + buf->ts_linecol_begv = linecol; +} + +INLINE void +SET_BUF_TS_LINECOL_POINT (struct buffer *buf, struct ts_linecol linecol) +{ + buf->ts_linecol_point = linecol; +} + +INLINE void +SET_BUF_TS_LINECOL_ZV (struct buffer *buf, struct ts_linecol linecol) +{ + buf->ts_linecol_zv = linecol; +} + +#endif + /* This structure holds the default values of the buffer-local variables that have special slots in each buffer. The default value occupies the same slot in this structure diff --git a/src/casefiddle.c b/src/casefiddle.c index faeb16fb8f2..93a66b15923 100644 --- a/src/casefiddle.c +++ b/src/casefiddle.c @@ -543,6 +543,12 @@ casify_region (enum case_action flag, Lisp_Object b, Lisp_Object e) #ifdef HAVE_TREE_SITTER ptrdiff_t start_byte = CHAR_TO_BYTE (start); ptrdiff_t old_end_byte = CHAR_TO_BYTE (end); + struct ts_linecol start_linecol + = treesit_linecol_maybe (start, start_byte, + BUF_TS_LINECOL_POINT (current_buffer)); + struct ts_linecol old_end_linecol + = treesit_linecol_maybe (end, old_end_byte, + BUF_TS_LINECOL_POINT (current_buffer)); #endif ptrdiff_t orig_end = end; @@ -565,8 +571,11 @@ casify_region (enum case_action flag, Lisp_Object b, Lisp_Object e) update_compositions (start, end, CHECK_ALL); } #ifdef HAVE_TREE_SITTER - treesit_record_change (start_byte, old_end_byte, - CHAR_TO_BYTE (orig_end + added)); + ptrdiff_t new_end = orig_end + added; + ptrdiff_t new_end_byte = CHAR_TO_BYTE (new_end); + + treesit_record_change (start_byte, old_end_byte, new_end_byte, + start_linecol, old_end_linecol, new_end); #endif return orig_end + added; diff --git a/src/editfns.c b/src/editfns.c index e6d8e278c12..714ed422b38 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -2305,6 +2305,19 @@ Both characters must have the same length of multi-byte form. */) = !NILP (BVAR (current_buffer, enable_multibyte_characters)); int fromc, toc; +#ifdef HAVE_TREE_SITTER + ptrdiff_t start_char = fix_position (start); + ptrdiff_t old_end_char = fix_position (end); + ptrdiff_t start_byte = CHAR_TO_BYTE (start_char); + ptrdiff_t old_end_byte = CHAR_TO_BYTE (old_end_char); + struct ts_linecol start_linecol + = treesit_linecol_maybe (start_char, start_byte, + BUF_TS_LINECOL_POINT (current_buffer)); + struct ts_linecol old_end_linecol + = treesit_linecol_maybe (old_end_char, old_end_byte, + BUF_TS_LINECOL_POINT (current_buffer)); +#endif + restart: validate_region (&start, &end); @@ -2405,7 +2418,8 @@ Both characters must have the same length of multi-byte form. */) if (changed > 0) { #ifdef HAVE_TREE_SITTER - treesit_record_change (changed, last_changed, last_changed); + treesit_record_change (start_byte, old_end_byte, old_end_byte, + start_linecol, old_end_linecol, old_end_char); #endif signal_after_change (changed, last_changed - changed, last_changed - changed); @@ -2592,6 +2606,15 @@ It returns the number of characters changed. */) } else { +#ifdef HAVE_TREE_SITTER + struct ts_linecol linecol_cache + = BUF_TS_LINECOL_POINT (current_buffer); + struct ts_linecol start_linecol + = treesit_linecol_maybe (pos, pos_byte, linecol_cache); + struct ts_linecol old_end_linecol + = treesit_linecol_maybe (pos + 1, pos_byte + len, + start_linecol); +#endif record_change (pos, 1); while (str_len-- > 0) *p++ = *str++; @@ -2604,7 +2627,8 @@ It returns the number of characters changed. */) modified buffer content manually, so we need to notify tree-sitter manually. */ treesit_record_change (pos_byte, pos_byte + len, - pos_byte + len); + pos_byte + len, start_linecol, + old_end_linecol, pos + 1); #endif } characters_changed++; @@ -4555,6 +4579,15 @@ ring. */) start1_byte = CHAR_TO_BYTE (start1); end2_byte = CHAR_TO_BYTE (end2); +#ifdef HAVE_TREE_SITTER + struct ts_linecol start_linecol + = treesit_linecol_maybe (start1, start1_byte, + BUF_TS_LINECOL_POINT (current_buffer)); + struct ts_linecol old_end_linecol + = treesit_linecol_maybe (end2, end2_byte, + BUF_TS_LINECOL_POINT (current_buffer)); +#endif + /* Make sure the gap won't interfere, by moving it out of the text we will operate on. */ if (start1 < gap && gap < end2) @@ -4694,10 +4727,8 @@ ring. */) } #ifdef HAVE_TREE_SITTER - /* I don't think it's common to transpose two far-apart regions, so - amalgamating the edit into one should be fine. This is what the - signal_after_change below does, too. */ - treesit_record_change (start1_byte, end2_byte, end2_byte); + treesit_record_change (start1_byte, end2_byte, end2_byte, + start_linecol, old_end_linecol, end2); #endif signal_after_change (start1, end2 - start1, end2 - start1); diff --git a/src/insdel.c b/src/insdel.c index 7e361fbb2ce..24bacdbcaf2 100644 --- a/src/insdel.c +++ b/src/insdel.c @@ -898,6 +898,12 @@ insert_1_both (const char *string, if (NILP (BVAR (current_buffer, enable_multibyte_characters))) nchars = nbytes; +#ifdef HAVE_TREE_SITTER + struct ts_linecol start_linecol + = treesit_linecol_maybe (PT, PT_BYTE, + BUF_TS_LINECOL_POINT (current_buffer)); +#endif + if (prepare) /* Do this before moving and increasing the gap, because the before-change hooks might move the gap @@ -952,7 +958,9 @@ insert_1_both (const char *string, #ifdef HAVE_TREE_SITTER eassert (nbytes >= 0); eassert (PT_BYTE >= 0); - treesit_record_change (PT_BYTE, PT_BYTE, PT_BYTE + nbytes); + + treesit_record_change (PT_BYTE, PT_BYTE, PT_BYTE + nbytes, + start_linecol, start_linecol, PT + nchars); #endif adjust_point (nchars, nbytes); @@ -1024,6 +1032,12 @@ insert_from_string_1 (Lisp_Object string, ptrdiff_t pos, ptrdiff_t pos_byte, = count_size_as_multibyte (SDATA (string) + pos_byte, nbytes); +#ifdef HAVE_TREE_SITTER + struct ts_linecol start_linecol + = treesit_linecol_maybe (PT, PT_BYTE, + BUF_TS_LINECOL_POINT (current_buffer)); +#endif + /* Do this before moving and increasing the gap, because the before-change hooks might move the gap or make it smaller. */ @@ -1088,7 +1102,9 @@ insert_from_string_1 (Lisp_Object string, ptrdiff_t pos, ptrdiff_t pos_byte, #ifdef HAVE_TREE_SITTER eassert (nbytes >= 0); eassert (PT_BYTE >= 0); - treesit_record_change (PT_BYTE, PT_BYTE, PT_BYTE + nbytes); + + treesit_record_change (PT_BYTE, PT_BYTE, PT_BYTE + nbytes, + start_linecol, start_linecol, PT + nchars); #endif adjust_point (nchars, outgoing_nbytes); @@ -1101,7 +1117,8 @@ insert_from_string_1 (Lisp_Object string, ptrdiff_t pos, ptrdiff_t pos_byte, GPT_ADDR (if not text_at_gap_tail). Contrary to insert_from_gap, this does not invalidate any cache, nor update any markers, nor record any buffer modification information - of any sort, with the single exception of notifying tree-sitter. */ + of any sort, with the single exception of notifying tree-sitter and + updating tree-sitter linecol cache. */ void insert_from_gap_1 (ptrdiff_t nchars, ptrdiff_t nbytes, bool text_at_gap_tail) { @@ -1110,6 +1127,9 @@ insert_from_gap_1 (ptrdiff_t nchars, ptrdiff_t nbytes, bool text_at_gap_tail) #ifdef HAVE_TREE_SITTER ptrdiff_t ins_bytepos = GPT_BYTE; + struct ts_linecol start_linecol + = treesit_linecol_maybe (GPT, GPT_BYTE, + BUF_TS_LINECOL_POINT (current_buffer)); #endif GAP_SIZE -= nbytes; @@ -1130,7 +1150,9 @@ insert_from_gap_1 (ptrdiff_t nchars, ptrdiff_t nbytes, bool text_at_gap_tail) #ifdef HAVE_TREE_SITTER eassert (nbytes >= 0); eassert (ins_bytepos >= 0); - treesit_record_change (ins_bytepos, ins_bytepos, ins_bytepos + nbytes); + + treesit_record_change (ins_bytepos, ins_bytepos, ins_bytepos + nbytes, + start_linecol, start_linecol, ins_bytepos + nbytes); #endif } @@ -1193,6 +1215,9 @@ insert_from_buffer (struct buffer *buf, #ifdef HAVE_TREE_SITTER ptrdiff_t obyte = PT_BYTE; + struct ts_linecol start_linecol + = treesit_linecol_maybe (opoint, obyte, + BUF_TS_LINECOL_POINT (current_buffer)); #endif insert_from_buffer_1 (buf, charpos, nchars, inherit); @@ -1203,7 +1228,9 @@ insert_from_buffer (struct buffer *buf, eassert (PT_BYTE >= BEG_BYTE); eassert (obyte >= BEG_BYTE); eassert (PT_BYTE >= obyte); - treesit_record_change (obyte, obyte, PT_BYTE); + + treesit_record_change (obyte, obyte, PT_BYTE, + start_linecol, start_linecol, PT); #endif } @@ -1494,6 +1521,16 @@ replace_range (ptrdiff_t from, ptrdiff_t to, Lisp_Object new, if (nbytes_del <= 0 && inschars == 0) return; +#ifdef HAVE_TREE_SITTER + struct ts_linecol start_linecol + = treesit_linecol_maybe (from, from_byte, + BUF_TS_LINECOL_POINT (current_buffer)); + struct ts_linecol old_end_linecol + = treesit_linecol_maybe (to, to_byte, + BUF_TS_LINECOL_POINT (current_buffer)); +#endif + + ptrdiff_t insbeg_bytes, insend_bytes; ptrdiff_t insbytes; unsigned char *insbeg_ptr; @@ -1633,7 +1670,9 @@ replace_range (ptrdiff_t from, ptrdiff_t to, Lisp_Object new, eassert (to_byte >= from_byte); eassert (outgoing_insbytes >= 0); eassert (from_byte >= 0); - treesit_record_change (from_byte, to_byte, from_byte + outgoing_insbytes); + + treesit_record_change (from_byte, to_byte, from_byte + outgoing_insbytes, + start_linecol, old_end_linecol, from + inschars); #endif /* Relocate point as if it were a marker. */ @@ -1960,6 +1999,15 @@ del_range_2 (ptrdiff_t from, ptrdiff_t from_byte, nchars_del = to - from; nbytes_del = to_byte - from_byte; +#ifdef HAVE_TREE_SITTER + struct ts_linecol start_linecol + = treesit_linecol_maybe (from, from_byte, + BUF_TS_LINECOL_POINT (current_buffer)); + struct ts_linecol old_end_linecol + = treesit_linecol_maybe (to, to_byte, + BUF_TS_LINECOL_POINT (current_buffer)); +#endif + /* Make sure the gap is somewhere in or next to what we are deleting. */ if (from > GPT) gap_right (from, from_byte); @@ -2019,7 +2067,8 @@ del_range_2 (ptrdiff_t from, ptrdiff_t from_byte, #ifdef HAVE_TREE_SITTER eassert (from_byte <= to_byte); eassert (from_byte >= 0); - treesit_record_change (from_byte, to_byte, from_byte); + treesit_record_change (from_byte, to_byte, from_byte, + start_linecol, old_end_linecol, from); #endif return deletion; diff --git a/src/lisp.h b/src/lisp.h index c2450440ab9..ff68b5d2736 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -4415,6 +4415,10 @@ extern void update_echo_area (void); extern void truncate_echo_area (ptrdiff_t); extern void redisplay (void); extern ptrdiff_t count_lines (ptrdiff_t start_byte, ptrdiff_t end_byte); +extern ptrdiff_t display_count_lines (ptrdiff_t start_byte, + ptrdiff_t limit_byte, + ptrdiff_t count, + ptrdiff_t *byte_pos_ptr); void set_frame_cursor_types (struct frame *, Lisp_Object); extern void syms_of_xdisp (void); diff --git a/src/treesit.c b/src/treesit.c index b0979397d35..3a19e0cb282 100644 --- a/src/treesit.c +++ b/src/treesit.c @@ -307,18 +307,13 @@ init_treesit_functions (void) in Emacs's use cases. - Many tree-sitter functions take a TSPoint, which is basically a - row and column. Emacs uses a gap buffer and does not keep - information about the row and column position of a buffer. - According to the author of tree-sitter, those functions only take - a TSPoint so that it can be moved alongside the byte position and - returned to the caller afterwards, and the position actually used - is the specified byte position. He also said that he _thinks_ - that just passing a byte position will also work. As a result, a - dummy value is used in place of each TSPoint. Judging by the - nature of parsing algorithms, I think it is safe to use only the - byte position, and I don't think this will change in the future. - - See: https://github.com/tree-sitter/tree-sitter/issues/445 + line and column. Emacs uses a gap buffer and does not keep + information about the line and column positions in a buffer, so + it's hard for us to pass it to tree-sitter. Instead we just give + it dummy values. But there are certain languages that does need + the line and column positions to work right, like Haskell. So we + added optional line and column tracking. See the linecol section + below. treesit.h has some commentary on the two main data structure for the parser and node. treesit_sync_visible_region has some @@ -350,8 +345,8 @@ init_treesit_functions (void) Tree-sitter-related code in other files: - src/alloc.c for gc for parser and node - - src/casefiddle.c & src/insdel.c for notifying tree-sitter - parser of buffer changes. + - src/casefiddle.c, src/insdel.c, src/editfns.c for notifying + tree-sitter parser of buffer changes. - lisp/emacs-lisp/cl-preloaded.el & data.c & lisp.h for parser and node type. - print.c for printing tree-sitter objects (node, parser, query). @@ -406,7 +401,66 @@ init_treesit_functions (void) from the user's POV, each buffer, regardless of indirect or not, appears to have their own parser list. A discussion can be found in bug#59693. Note that that discussion led to an earlier design, which - is different from the current one. */ + is different from the current one. + + Line and column reporting to tree-sitter: technically we had to send + tree-sitter the line and column position of each edit. But in + practice we just send it dummy values, because tree-sitter doesn't + use it for parsing and mostly just carries the line and column + positions around and return it when e.g. reporting node positions[1]. + This has been working fine until we encountered grammars that + actually utilizes the line and column information for parsing + (Haskell)[2]. + + [1] https://github.com/tree-sitter/tree-sitter/issues/445 + [2] https://github.com/tree-sitter/tree-sitter/issues/4001 + + So now we have to keep track of line and column positions and pass + valid values to tree-sitter. (It adds quite some complexity, but + only linearly; one can ignore all the linecol stuff when trying to + understand treesit code and then come back to it later.) Eli + convinced me to disable tracking by default, and only enable it for + languages that needs it. So the buffer starts out not tracking + linecol. And when a parser is created, if the language is in + treesit-languages-require-line-column-tracking, we enable tracking in + the buffer, and enable tracking for the parser. To simplify things, + once a buffer starts tracking linecol, it never disables tracking, + even if parsers that need tracking are all deleted; and for parsers, + tracking is determined at creation time, if it starts out + tracking/non-tracking, it stays that way, regardless of later changes + to treesit-languages-require-line-column-tracking. + + To make calculating line/column positons fast, we store linecol + caches for begv, point, and zv in the buffer + (buf->ts_linecol_cache_xxx); and in the parser object, we store + linecol cache for visible beg/end of that parser. + + In buffer editing functions, we need the linecol for + start/old_end/new_end, those can be calculated by scanning newlines + (treesit_linecol_of_pos) from the buffer point cache, which should be + always near the point. And we usually set the calculated linecol of + new_end back to the buffer point cache. + + We also need to calculate linecol for the visible_beg/end for each + parser, and linecol for the buffer's begv/zv, these positions are + usually far from point, so we have caches for all of them (in either + the parser object or the buffer). These positions are far from + point, so it's inefficient to scan newlines from point to there to + get up-to-date linecol for them; but in the same time, because + they're far and outside the changed region, we can calculate their + change in line and column number by simply counting how much newlines + are added/removed in the changed region + (compute_new_linecol_by_change). */ + + +/*** Constants */ + +/* A linecol_cache that points to BOB, this is always valid. */ +const struct ts_linecol TREESIT_BOB_LINECOL = { 1, 1, 0 }; +/* An uninitialized linecol. */ +const struct ts_linecol TREESIT_EMPTY_LINECOL = { 0, 0, 0 }; +const TSPoint TREESIT_TS_POINT_1_0 = { 1, 0 }; + /*** Initialization */ @@ -864,6 +918,241 @@ loaded or the file name couldn't be determined, return nil. */) } +/*** Linecol functions */ + +#define TREESIT_DEBUG_LINECOL false + +void treesit_debug_print_linecol (struct ts_linecol); + +void +treesit_debug_print_linecol (struct ts_linecol linecol) +{ + printf ("{ line=%ld col=%ld bytepos=%ld }\n", linecol.line, linecol.col, linecol.bytepos); +} + +/* Returns true if BUF tracks linecol. */ +bool treesit_buf_tracks_linecol_p (struct buffer *buf) +{ + return BUF_TS_LINECOL_BEGV (buf).bytepos != 0; +} + +static void +restore_restriction_and_selective_display (Lisp_Object record) +{ + save_restriction_restore (Fcar (record)); + BVAR (current_buffer, selective_display) = Fcdr (record); + return; +} + +/* Similar to display_count_lines, but behaves differently when + searching backwards: when found a newline, stop at the newline, + return count as normal (display_count_lines stops after the newline + and subtracts one from count). When searching forward, stop at the + position after the newline. Another difference is this function + disregards narrowing, so it works on bytepos outside of the visible + range. */ +static ptrdiff_t +treesit_count_lines (ptrdiff_t start_byte, + ptrdiff_t limit_byte, ptrdiff_t count, + ptrdiff_t *byte_pos_ptr) +{ + /* I don't think display_count_lines signals, so the unwind-protect + technically isn't necessary. Also treesit_count_lines aren't + suppose to signal either since it's used in functions that aren't + supposed to signal (treesit_record_change and friends). */ + Lisp_Object record = Fcons (save_restriction_save (), + BVAR (current_buffer, selective_display)); + + + specpdl_ref pdl_count = SPECPDL_INDEX (); + record_unwind_protect (restore_restriction_and_selective_display, record); + + BVAR (current_buffer, selective_display) = Qnil; + labeled_restrictions_remove_in_current_buffer (); + Fwiden (); + ptrdiff_t counted = display_count_lines (start_byte, limit_byte, + count, byte_pos_ptr); + + unbind_to (pdl_count, Qnil); + + /* If searching backwards and we found COUNT newlines, countermand the + different logic in display_count_lines. */ + if (count < 0 && limit_byte != *byte_pos_ptr) + { + counted += 1; + *byte_pos_ptr -= 1; + } + + return counted; +} + +static void +treesit_debug_validate_linecol (struct ts_linecol linecol) +{ + eassert (linecol.bytepos <= Z_BYTE); + + /* We can't use count_lines as ground truth because it respects + narrowing, and calling it with a bytepos outside of the visible + portion results in infloop. */ + ptrdiff_t _unused; + ptrdiff_t true_line_count = treesit_count_lines (BEG_BYTE, linecol.bytepos, + Z_BYTE, &_unused) + 1; + eassert (true_line_count == linecol.line); +} + +/* Calculate and return the line and column number of BYTE_POS by + scanning newlines from CACHE. CACHE must be valid. */ +static struct ts_linecol +treesit_linecol_of_pos (ptrdiff_t target_bytepos, + struct ts_linecol cache) +{ + if (TREESIT_DEBUG_LINECOL) + { + treesit_debug_validate_linecol (cache); + } + + /* When we finished searching for newlines between CACHE and + TARGET_POS, BYTE_POS_2 is at TARGET_POS, and BYTE_POS_1 is at the + previous newline. If TARGET_POS happends to be on a newline, + BYTE_POS_1 will be on that position. BYTE_POS_1 is used for + calculating the column. (If CACHE and TARGET_POS are in the same + line, BYTE_POS_1 is unset and we don't use it.) */ + ptrdiff_t byte_pos_1 = 0; + ptrdiff_t byte_pos_2 = 0; + /* Number of lines between CACHE and TARGET_POS. */ + ptrdiff_t line_delta = 0; + + if (target_bytepos == cache.bytepos) + return cache; + + /* Search forward. */ + if (cache.bytepos < target_bytepos) + { + byte_pos_2 = cache.bytepos; + while (byte_pos_2 < target_bytepos) + { + ptrdiff_t counted = treesit_count_lines (byte_pos_2, target_bytepos, + 1, &byte_pos_2); + + if (counted > 0) + { + byte_pos_1 = byte_pos_2; + } + line_delta += counted; + } + eassert (byte_pos_2 == target_bytepos); + /* At this point, byte_pos_2 is at target_pos, and byte_pos_1 is + at the previous newline if we went across any. */ + + struct ts_linecol target_linecol; + target_linecol.bytepos = target_bytepos; + target_linecol.line = cache.line + line_delta; + /* If we moved across any newline, use the previous newline to + calculate the column; if we stayed at the same line, use the + cached column to calculate the new column. */ + target_linecol.col = line_delta > 0 + ? target_bytepos - byte_pos_1 + : target_bytepos - cache.bytepos + cache.col; + + if (TREESIT_DEBUG_LINECOL) + { + treesit_debug_validate_linecol (target_linecol); + } + + return target_linecol; + } + + /* Search backward. */ + byte_pos_2 = cache.bytepos; + while (byte_pos_2 > target_bytepos) + { + ptrdiff_t counted = treesit_count_lines (byte_pos_2, target_bytepos, + -1, &byte_pos_2); + line_delta -= counted; + } + eassert (byte_pos_2 == target_bytepos); + /* At this point, pos_2 is at target_pos. */ + + struct ts_linecol target_linecol; + target_linecol.bytepos = target_bytepos; + target_linecol.line = cache.line + line_delta; + eassert (cache.line + line_delta > 0); + + /* Calculate the column. */ + if (line_delta == 0) + { + target_linecol.col = cache.col - (cache.bytepos - target_bytepos); + } + else + { + /* We need to find the previous newline in order to calculate the + column. */ + ptrdiff_t counted = treesit_count_lines (byte_pos_2, BEG_BYTE, -1, &byte_pos_2); + target_linecol.col + = target_bytepos - (byte_pos_2 + counted == 1 ? 1 : 0); + } + + if (TREESIT_DEBUG_LINECOL) + { + treesit_debug_validate_linecol (target_linecol); + } + + return target_linecol; +} + +/* Return a TSPoint given POS and VISIBLE_BEG. VISIBLE_BEG must be + before POS. */ +static TSPoint +treesit_make_ts_point (struct ts_linecol visible_beg, + struct ts_linecol pos) +{ + TSPoint point; + if (visible_beg.line == pos.line) + { + point.row = 0; + point.column = pos.col - visible_beg.col; + eassert (point.column >= 0); + } + else + { + point.row = pos.line - visible_beg.line; + eassert (point.row > 0); + point.column = pos.col; + } + return point; +} + +DEFUN ("treesit-tracking-line-column-p", + Ftreesit_tracking_line_column_p, + Streesit_tracking_line_column_p, 0, 1, 0, + doc : /* Return non-nil if BUFFER is tracking line and column. + +Return nil otherwise. BUFFER defaults to the current buffer. */) + (Lisp_Object buffer) +{ + struct buffer *buf = current_buffer; + if (!NILP (buffer)) + { + CHECK_BUFFER (buffer); + buf = XBUFFER (buffer); + } + + return treesit_buf_tracks_linecol_p (buf) ? Qt : Qnil; +} + +DEFUN ("treesit-parser-tracking-line-column-p", + Ftreesit_parser_tracking_line_column_p, + Streesit_parser_tracking_line_column_p, 1, 1, 0, + doc : /* Return non-nil if PARSER is tracking line and column. + +Return nil otherwise.*/) + (Lisp_Object parser) +{ + CHECK_TS_PARSER (parser); + return XTS_PARSER (parser)->visi_beg_linecol.bytepos == 0 ? Qnil : Qt; +} + + /*** Parsing functions */ static void @@ -879,34 +1168,147 @@ treesit_check_parser (Lisp_Object obj) larger than UINT32_MAX. */ static inline void treesit_tree_edit_1 (TSTree *tree, ptrdiff_t start_byte, - ptrdiff_t old_end_byte, ptrdiff_t new_end_byte) + ptrdiff_t old_end_byte, ptrdiff_t new_end_byte, + TSPoint start_point, TSPoint old_end_point, + TSPoint new_end_point) { eassert (start_byte >= 0); eassert (start_byte <= old_end_byte); eassert (start_byte <= new_end_byte); - TSPoint dummy_point = {0, 0}; eassert (start_byte <= UINT32_MAX); eassert (old_end_byte <= UINT32_MAX); eassert (new_end_byte <= UINT32_MAX); TSInputEdit edit = {(uint32_t) start_byte, (uint32_t) old_end_byte, (uint32_t) new_end_byte, - dummy_point, dummy_point, dummy_point}; + start_point, old_end_point, new_end_point}; ts_tree_edit (tree, &edit); } -/* Update each parser's tree after the user made an edit. This - function does not parse the buffer and only updates the tree, so it - should be very fast. */ -void -treesit_record_change (ptrdiff_t start_byte, ptrdiff_t old_end_byte, - ptrdiff_t new_end_byte) +/* Given a position at POS_LINECOL, and the linecol of a buffer change + (START_LINECOL, OLD_END_LINECOL, and NEW_END_LINCOL), compute the new + linecol for that position, then scan from this now valid linecol to + TARGET_BYTEPOS and return the linecol at TARGET_BYTEPOS. + + When POS_LINECOL is outside of the range between START_LINECOL and + OLD_END_LINECOL, we can calculate the change in line and column + number of POS_LINECOL by simply counting how many newlines are + removed/added in the change. Once we have the up-to-date line and + column number at POS_LINECOL.bytepos, we can just scan to + TARGET_BYTEPOS to get a linecol for it. The assumption is that + TARGET_BYTEPOS is far from START_LINECOL, etc, but close to + POS_LINECOL. So we avoids scanning longs distance from + START_LINECOL, etc. + + However, this optimization only works when POS_LINECOL is outside the + range between START_LINECOL and OLD_END_LINECOL. If not, we've have + to scan from START_LINECOL or NEW_END_LINECOL to TARGET_BYTEPOS. */ +static struct ts_linecol +compute_new_linecol_by_change (struct ts_linecol pos_linecol, + struct ts_linecol start_linecol, + struct ts_linecol old_end_linecol, + struct ts_linecol new_end_linecol, + ptrdiff_t target_bytepos) +{ + struct ts_linecol new_linecol = { 0, 0, 0 }; + + /* 1. Even start is behind pos, pos isn't affected. */ + if (start_linecol.bytepos >= pos_linecol.bytepos) + { + new_linecol = pos_linecol; + } + /* 2. When old_end (oe) is before pos, the differnce between pos and + pos' is the difference between old_end and new_end (ne). + + | | | | | | + s oe pos s oe pos + OR + | | | | | + s ne pos' s ne pos' + + */ + else if (old_end_linecol.bytepos <= pos_linecol.bytepos) + { + ptrdiff_t line_delta = new_end_linecol.line - old_end_linecol.line; + new_linecol.line = pos_linecol.line + line_delta; + new_linecol.bytepos + = pos_linecol.bytepos + new_end_linecol.bytepos - old_end_linecol.bytepos; + + /* Suppose # is text, | is cursor: + + ################ + ########|########| + oe pos + + Now, if we insert something: + + ################ + ########|OOOOO + OOOOOOOOOO|########| + ne pos' + + Clearly, col for pos' is just the col of new_end plus the + distance between old_end and pos. The same goes for deletion. + */ + if (old_end_linecol.line == pos_linecol.line) + { + eassert (old_end_linecol.col <= pos_linecol.col); + ptrdiff_t old_end_to_pos = pos_linecol.col - old_end_linecol.col; + new_linecol.col = new_end_linecol.col + old_end_to_pos; + } + else + { + new_linecol.col = pos_linecol.col; + } + } + /* 3. At this point, start < pos < old_end. We're kinda cooked, there + aren't much we can do other than scan the buffer from new_end or + start. */ + else if (target_bytepos - start_linecol.bytepos + < eabs (target_bytepos - new_end_linecol.bytepos)) + { + new_linecol = treesit_linecol_of_pos (target_bytepos, start_linecol); + } + else + { + new_linecol = treesit_linecol_of_pos (target_bytepos, new_end_linecol); + } + + /* Now new_linecol is a valid linecol, scan from it to target_bytepos. */ + if (new_linecol.bytepos != target_bytepos) + { + new_linecol = treesit_linecol_of_pos (target_bytepos, new_linecol); + } + + if (TREESIT_DEBUG_LINECOL) + treesit_debug_validate_linecol (new_linecol); + + return new_linecol; +} + +/* Update each parser's tree after the user made an edit. This function + does not parse the buffer and only updates the tree, so it should be + very fast. If the caller knows there's no parser in the current + buffer, they can pass empty linecol for + START/OLD_END/NEW_END_linecol. + + If the current buffer doesn't track linecol, start_linecol, + old_end_linecol, and new_end_linecol will be empty. In that case, + don't process linecols. */ +static void +treesit_record_change_1 (ptrdiff_t start_byte, ptrdiff_t old_end_byte, + ptrdiff_t new_end_byte, + struct ts_linecol start_linecol, + struct ts_linecol old_end_linecol, + struct ts_linecol new_end_linecol) { struct buffer *base_buffer = current_buffer; if (current_buffer->base_buffer) base_buffer = current_buffer->base_buffer; Lisp_Object parser_list = BVAR (base_buffer, ts_parser_list); + bool buf_tracks_linecol = start_linecol.bytepos != 0; + FOR_EACH_TAIL_SAFE (parser_list) { CHECK_CONS (parser_list); @@ -916,16 +1318,22 @@ treesit_record_change (ptrdiff_t start_byte, ptrdiff_t old_end_byte, /* See comment (ref:visible-beg-null) if you wonder why we don't update visible_beg/end when tree is NULL. */ + bool parser_tracks_linecol + = XTS_PARSER (lisp_parser)->visi_beg_linecol.bytepos != 0; + if (tree != NULL) { eassert (start_byte <= old_end_byte); eassert (start_byte <= new_end_byte); - /* Think the recorded change as a delete followed by an - insert, and think of them as moving unchanged text back - and forth. After all, the whole point of updating the - tree is to update the position of unchanged text. */ - ptrdiff_t visible_beg = XTS_PARSER (lisp_parser)->visible_beg; - ptrdiff_t visible_end = XTS_PARSER (lisp_parser)->visible_end; + /* Before sending the edit to tree-sitter, we need to first + clip the beg/end to visible_beg and visible_end of the + parser. A tip for understanding the code below: think the + recorded change as a delete followed by an insert, and + think of them as moving unchanged text back and forth. + After all, the whole point of updating the tree is to + update the position of unchanged text. */ + const ptrdiff_t visible_beg = XTS_PARSER (lisp_parser)->visible_beg; + const ptrdiff_t visible_end = XTS_PARSER (lisp_parser)->visible_end; eassert (visible_beg >= 0); eassert (visible_beg <= visible_end); @@ -949,10 +1357,6 @@ treesit_record_change (ptrdiff_t start_byte, ptrdiff_t old_end_byte, eassert (start_offset <= old_end_offset); eassert (start_offset <= new_end_offset); - treesit_tree_edit_1 (tree, start_offset, old_end_offset, - new_end_offset); - XTS_PARSER (lisp_parser)->need_reparse = true; - /* VISIBLE_BEG/END records tree-sitter's range of view in the buffer. We need to adjust them when tree-sitter's view changes. */ @@ -966,19 +1370,133 @@ treesit_record_change (ptrdiff_t start_byte, ptrdiff_t old_end_byte, visi_beg_delta = (old_end_byte < visible_beg ? new_end_byte - old_end_byte : 0); - XTS_PARSER (lisp_parser)->visible_beg = visible_beg + visi_beg_delta; - XTS_PARSER (lisp_parser)->visible_end = (visible_end - + visi_beg_delta - + (new_end_offset - - old_end_offset)); + const ptrdiff_t new_visible_beg = visible_beg + visi_beg_delta; + const ptrdiff_t new_visible_end + = (visible_end + visi_beg_delta + + (new_end_offset - old_end_offset)); + + XTS_PARSER (lisp_parser)->visible_beg = new_visible_beg; + XTS_PARSER (lisp_parser)->visible_end = new_visible_end; + + eassert (BEG_BYTE <= new_visible_beg); + eassert (new_visible_beg <= new_visible_end); + eassert (new_visible_end <= Z_BYTE); + + /* (Optionally) calculate the point for start/old_end/new_end + to be sent to tree-sitter. Also update parser cache for + linecol. */ + TSPoint start_point = TREESIT_TS_POINT_1_0; + TSPoint old_end_point = TREESIT_TS_POINT_1_0; + TSPoint new_end_point = TREESIT_TS_POINT_1_0; + if (parser_tracks_linecol) + { + eassert (buf_tracks_linecol); + struct ts_linecol old_visi_beg_linecol + = XTS_PARSER (lisp_parser)->visi_beg_linecol; + struct ts_linecol old_visi_end_linecol + = XTS_PARSER (lisp_parser)->visi_end_linecol; + + const struct ts_linecol new_visi_beg_linecol + = compute_new_linecol_by_change (old_visi_beg_linecol, + start_linecol, + old_end_linecol, + new_end_linecol, + new_visible_beg); + const struct ts_linecol new_visi_end_linecol + = compute_new_linecol_by_change (old_visi_end_linecol, + start_linecol, + old_end_linecol, + new_end_linecol, + new_visible_end); + XTS_PARSER (lisp_parser)->visi_beg_linecol + = new_visi_beg_linecol; + XTS_PARSER (lisp_parser)->visi_end_linecol + = new_visi_end_linecol; + + /* Now, calculate TSPoints and finally update the tree. */ + struct ts_linecol new_begv_linecol + = XTS_PARSER (lisp_parser)->visi_beg_linecol; + old_end_point = treesit_make_ts_point (old_visi_beg_linecol, + old_end_linecol); + start_point = treesit_make_ts_point (new_begv_linecol, + start_linecol); + new_end_point = treesit_make_ts_point (new_begv_linecol, + new_end_linecol); + } - eassert (XTS_PARSER (lisp_parser)->visible_beg >= 0); - eassert (XTS_PARSER (lisp_parser)->visible_beg - <= XTS_PARSER (lisp_parser)->visible_end); + treesit_tree_edit_1 (tree, start_offset, old_end_offset, + new_end_offset, start_point, old_end_point, + new_end_point); + XTS_PARSER (lisp_parser)->need_reparse = true; } } } +/* Return the linecol of POS, calculated from CACHE. But if there's no + parser in the current buffer, or line-column tracking is disabled, + skip calculation and return an empty linecol instead. */ +struct ts_linecol +treesit_linecol_maybe (ptrdiff_t pos, ptrdiff_t pos_byte, + struct ts_linecol cache) +{ + if (NILP (BVAR (current_buffer, ts_parser_list)) + || !treesit_buf_tracks_linecol_p (current_buffer)) + return TREESIT_EMPTY_LINECOL; + + return treesit_linecol_of_pos (pos_byte, cache); +} + +/* Update each parser's tree after the user made an edit. This function + does not parse the buffer and only updates the tree, so it should be + very fast. + + This is a wrapper over treesit_record_change that does a bit more + boilerplate work: it (optionally) calculates linecol for new_end, + pass all the positions into treesit_record_change_1 which does the + real work, and finally (optionally) sets buffer's linecol cache to + new_end's linecol. + + If NEW_END is next to NEW_END_BYTE in the arglist, caller might + accidentally swap them, so I placed NEW_END at the end of the + arglist. + + If the current buffer doesn't track linecol, start_linecol and + old_end_linecol will be empty. In that case, don't process + linecols. */ +void +treesit_record_change (ptrdiff_t start_byte, ptrdiff_t old_end_byte, + ptrdiff_t new_end_byte, + struct ts_linecol start_linecol, + struct ts_linecol old_end_linecol, + ptrdiff_t new_end) +{ + struct ts_linecol new_end_linecol + = treesit_linecol_maybe (new_end, new_end_byte, start_linecol); + + treesit_record_change_1 (start_byte, old_end_byte, new_end_byte, + start_linecol, old_end_linecol, new_end_linecol); + + if (new_end_linecol.bytepos != 0) + { + const struct ts_linecol new_begv_linecol + = compute_new_linecol_by_change (BUF_TS_LINECOL_BEGV (current_buffer), + start_linecol, + old_end_linecol, + new_end_linecol, + BEGV_BYTE); + const struct ts_linecol new_zv_linecol + = compute_new_linecol_by_change (BUF_TS_LINECOL_ZV (current_buffer), + start_linecol, + old_end_linecol, + new_end_linecol, + ZV_BYTE); + + SET_BUF_TS_LINECOL_BEGV (current_buffer, new_begv_linecol); + SET_BUF_TS_LINECOL_POINT (current_buffer, new_end_linecol); + SET_BUF_TS_LINECOL_ZV (current_buffer, new_zv_linecol); + } +} + static TSRange *treesit_make_ts_ranges (Lisp_Object, Lisp_Object, uint32_t *); @@ -1034,6 +1552,7 @@ treesit_sync_visible_region (Lisp_Object parser) { TSTree *tree = XTS_PARSER (parser)->tree; struct buffer *buffer = XBUFFER (XTS_PARSER (parser)->buffer); + const bool track_linecol = treesit_buf_tracks_linecol_p (buffer); /* If we are setting visible_beg/end for the first time, we can skip the offset acrobatics and updating the tree below. */ @@ -1046,6 +1565,7 @@ treesit_sync_visible_region (Lisp_Object parser) ptrdiff_t visible_beg = XTS_PARSER (parser)->visible_beg; ptrdiff_t visible_end = XTS_PARSER (parser)->visible_end; + eassert (0 <= visible_beg); eassert (visible_beg <= visible_end); @@ -1066,39 +1586,81 @@ treesit_sync_visible_region (Lisp_Object parser) from ________|xxxx|__ to |xxxx|__________ */ + struct ts_linecol visi_beg_linecol = track_linecol + ? XTS_PARSER (parser)->visi_beg_linecol : TREESIT_EMPTY_LINECOL; + struct ts_linecol visi_end_linecol = track_linecol + ? XTS_PARSER (parser)->visi_end_linecol : TREESIT_EMPTY_LINECOL; + + struct ts_linecol buffer_begv_linecol = track_linecol + ? treesit_linecol_of_pos (BUF_BEGV_BYTE (buffer), BUF_TS_LINECOL_BEGV (buffer)) + : TREESIT_EMPTY_LINECOL; + struct ts_linecol buffer_zv_linecol = track_linecol + ? treesit_linecol_of_pos (BUF_ZV_BYTE (buffer), BUF_TS_LINECOL_ZV (buffer)) + : TREESIT_EMPTY_LINECOL; + + if (track_linecol) eassert (visi_beg_linecol.bytepos == visible_beg); + /* 1. Make sure visible_beg <= BUF_BEGV_BYTE. */ if (visible_beg > BUF_BEGV_BYTE (buffer)) { + TSPoint point_new_end = track_linecol + ? treesit_make_ts_point (buffer_begv_linecol, visi_beg_linecol) + : TREESIT_TS_POINT_1_0; /* Tree-sitter sees: insert at the beginning. */ - treesit_tree_edit_1 (tree, 0, 0, visible_beg - BUF_BEGV_BYTE (buffer)); + treesit_tree_edit_1 (tree, 0, 0, visible_beg - BUF_BEGV_BYTE (buffer), + TREESIT_TS_POINT_1_0, TREESIT_TS_POINT_1_0, + point_new_end); visible_beg = BUF_BEGV_BYTE (buffer); + visi_beg_linecol = buffer_begv_linecol; eassert (visible_beg <= visible_end); } /* 2. Make sure visible_end = BUF_ZV_BYTE. */ if (visible_end < BUF_ZV_BYTE (buffer)) { + TSPoint point_start = track_linecol + ? treesit_make_ts_point (visi_beg_linecol, visi_end_linecol) + : TREESIT_TS_POINT_1_0; + TSPoint point_new_end = track_linecol + ? treesit_make_ts_point (visi_beg_linecol, buffer_zv_linecol) + : TREESIT_TS_POINT_1_0; /* Tree-sitter sees: insert at the end. */ treesit_tree_edit_1 (tree, visible_end - visible_beg, visible_end - visible_beg, - BUF_ZV_BYTE (buffer) - visible_beg); + BUF_ZV_BYTE (buffer) - visible_beg, + point_start, point_start, point_new_end); visible_end = BUF_ZV_BYTE (buffer); + visi_end_linecol = buffer_zv_linecol; eassert (visible_beg <= visible_end); } else if (visible_end > BUF_ZV_BYTE (buffer)) { + TSPoint point_start = track_linecol + ? treesit_make_ts_point (visi_beg_linecol, buffer_zv_linecol) + : TREESIT_TS_POINT_1_0; + TSPoint point_old_end = track_linecol + ? treesit_make_ts_point (visi_beg_linecol, visi_end_linecol) + : TREESIT_TS_POINT_1_0; /* Tree-sitter sees: delete at the end. */ treesit_tree_edit_1 (tree, BUF_ZV_BYTE (buffer) - visible_beg, visible_end - visible_beg, - BUF_ZV_BYTE (buffer) - visible_beg); + BUF_ZV_BYTE (buffer) - visible_beg, + point_start, point_old_end, point_start); visible_end = BUF_ZV_BYTE (buffer); + visi_end_linecol = buffer_zv_linecol; eassert (visible_beg <= visible_end); } /* 3. Make sure visible_beg = BUF_BEGV_BYTE. */ if (visible_beg < BUF_BEGV_BYTE (buffer)) { + TSPoint point_old_end = track_linecol + ? treesit_make_ts_point (visi_beg_linecol, buffer_begv_linecol) + : TREESIT_TS_POINT_1_0; /* Tree-sitter sees: delete at the beginning. */ - treesit_tree_edit_1 (tree, 0, BUF_BEGV_BYTE (buffer) - visible_beg, 0); + treesit_tree_edit_1 (tree, 0, BUF_BEGV_BYTE (buffer) - visible_beg, 0, + TREESIT_TS_POINT_1_0, point_old_end, + TREESIT_TS_POINT_1_0); visible_beg = BUF_BEGV_BYTE (buffer); + visi_beg_linecol = buffer_begv_linecol; eassert (visible_beg <= visible_end); } eassert (0 <= visible_beg); @@ -1108,6 +1670,14 @@ treesit_sync_visible_region (Lisp_Object parser) XTS_PARSER (parser)->visible_beg = visible_beg; XTS_PARSER (parser)->visible_end = visible_end; + XTS_PARSER (parser)->visi_beg_linecol = visi_beg_linecol; + XTS_PARSER (parser)->visi_end_linecol = visi_end_linecol; + + if (track_linecol) + { + eassert (visi_beg_linecol.bytepos == visible_beg); + eassert (visi_end_linecol.bytepos == visible_end); + } /* Fix ranges so that the ranges stays with in visible_end. Here we try to do minimal work so that the ranges is minimally correct and @@ -1356,7 +1926,7 @@ treesit_read_buffer (void *parser, uint32_t byte_index, Lisp_Object make_treesit_parser (Lisp_Object buffer, TSParser *parser, TSTree *tree, Lisp_Object language_symbol, - Lisp_Object tag) + Lisp_Object tag, bool tracks_linecol) { struct Lisp_TS_Parser *lisp_parser; @@ -1381,6 +1951,27 @@ make_treesit_parser (Lisp_Object buffer, TSParser *parser, lisp_parser->need_to_gc_buffer = false; lisp_parser->within_reparse = false; eassert (lisp_parser->visible_beg <= lisp_parser->visible_end); + + if (tracks_linecol) + { + struct buffer *old_buf = current_buffer; + set_buffer_internal (XBUFFER (buffer)); + + /* treesit_linecol_of_pos doesn't signal, so no need to + unwind-protect. */ + lisp_parser->visi_beg_linecol + = treesit_linecol_of_pos (BEGV_BYTE, TREESIT_BOB_LINECOL); + lisp_parser->visi_end_linecol + = treesit_linecol_of_pos (ZV_BYTE, lisp_parser->visi_beg_linecol); + + set_buffer_internal (old_buf); + } + else + { + lisp_parser->visi_beg_linecol = TREESIT_EMPTY_LINECOL; + lisp_parser->visi_end_linecol = TREESIT_EMPTY_LINECOL; + } + return make_lisp_ptr (lisp_parser, Lisp_Vectorlike); } @@ -1698,13 +2289,28 @@ an indirect buffer. */) always succeed. */ ts_parser_set_language (parser, lang); + const bool lang_need_linecol_tracking + = !NILP (Fmemq (remapped_lang, + Vtreesit_languages_require_line_column_tracking)); + /* Create parser. Use the unmapped LANGUAGE symbol, so the nodes created by this parser (and the parser itself) identify themselves as the unmapped language. This makes the grammar mapping completely transparent. */ Lisp_Object lisp_parser = make_treesit_parser (buf_orig, parser, NULL, - language, tag); + language, tag, + lang_need_linecol_tracking); + + /* Enable line-column tracking if this language requires it. */ + if (lang_need_linecol_tracking && !treesit_buf_tracks_linecol_p (buf)) + { + /* We can use TREESIT_BOB_LINECOL for begv and zv since these + cache doesn't need to be always in sync with BEGV and ZV. */ + SET_BUF_TS_LINECOL_BEGV (buf, TREESIT_BOB_LINECOL); + SET_BUF_TS_LINECOL_POINT (buf, TREESIT_BOB_LINECOL); + SET_BUF_TS_LINECOL_ZV (buf, TREESIT_BOB_LINECOL); + } /* Update parser-list. */ BVAR (buf, ts_parser_list) = Fcons (lisp_parser, BVAR (buf, ts_parser_list)); @@ -4376,6 +4982,65 @@ nodes in the subtree, including NODE. */) } } +DEFUN ("treesit--linecol-at", Ftreesit__linecol_at, + Streesit__linecol_at, 1, 1, 0, + doc: /* Test buffer-local linecol cache. + +Calculate the line and column at POS using the buffer-local cache, +return the line and column in the form of + + (LINE . COL) + +This is used for internal testing and debugging ONLY. */) + (Lisp_Object pos) +{ + CHECK_NUMBER (pos); + struct ts_linecol pos_linecol + = treesit_linecol_of_pos (CHAR_TO_BYTE (XFIXNUM (pos)), + BUF_TS_LINECOL_POINT (current_buffer)); + return Fcons (make_fixnum (pos_linecol.line), make_fixnum (pos_linecol.col)); +} + +DEFUN ("treesit--linecol-cache-set", Ftreesit__linecol_cache_set, + Streesit__linecol_cache_set, 3, 3, 0, + doc: /* Set the linecol cache for the current buffer. + +This is used for internal testing and debugging ONLY. */) + (Lisp_Object line, Lisp_Object col, Lisp_Object bytepos) +{ + CHECK_FIXNUM (line); + CHECK_FIXNUM (col); + CHECK_FIXNUM (bytepos); + + struct ts_linecol linecol; + linecol.line = XFIXNUM (line); + linecol.col = XFIXNUM (col); + linecol.bytepos = XFIXNUM (bytepos); + + SET_BUF_TS_LINECOL_POINT (current_buffer, linecol); + + return Qnil; +} + +DEFUN ("treesit--linecol-cache", Ftreesit__linecol_cache, + Streesit__linecol_cache, 0, 0, 0, + doc: /* Return the buffer-local linecol cache for debugging. + +Return a plist (:line LINE :col COL :pos POS :bytepos BYTEPOS). This is +used for internal testing and debugging ONLY. */) + (void) +{ + struct ts_linecol cache = BUF_TS_LINECOL_POINT (current_buffer); + + Lisp_Object plist = (list4 (QCcol, make_fixnum (cache.col), + QCbytepos, make_fixnum (cache.bytepos))); + plist = Fcons (make_fixnum (cache.line), plist); + plist = Fcons (QCline, plist); + + return plist; +} + + #endif /* HAVE_TREE_SITTER */ DEFUN ("treesit-available-p", Ftreesit_available_p, @@ -4418,6 +5083,11 @@ syms_of_treesit (void) DEFSYM (QCequal, ":equal"); DEFSYM (QCmatch, ":match"); DEFSYM (QCpred, ":pred"); + DEFSYM (QCline, ":line"); + DEFSYM (QCcol, ":col"); + DEFSYM (QCpos, ":pos"); + DEFSYM (QCbytepos, ":bytepos"); + DEFSYM (Qnot_found, "not-found"); DEFSYM (Qsymbol_error, "symbol-error"); @@ -4552,6 +5222,17 @@ applies to LANGUAGE-A will be redirected to LANGUAGE-B instead. */); DEFSYM (Qtreesit_language_remap_alist, "treesit-language-remap-alist"); Fmake_variable_buffer_local (Qtreesit_language_remap_alist); + DEFVAR_LISP ("treesit-languages-require-line-column-tracking", + Vtreesit_languages_require_line_column_tracking, + doc: + /* A list of languages that need line-column tracking. + +Most tree-sitter language grammars don't require line and column +tracking to work, but some languages do. When creating a parser, if the +language is in this list, Emacs enables line-column tracking for the +buffer. */); + Vtreesit_languages_require_line_column_tracking = Qnil; + staticpro (&Vtreesit_str_libtree_sitter); Vtreesit_str_libtree_sitter = build_string ("libtree-sitter-"); staticpro (&Vtreesit_str_tree_sitter); @@ -4596,6 +5277,9 @@ applies to LANGUAGE-A will be redirected to LANGUAGE-B instead. */); defsubr (&Streesit_language_abi_version); defsubr (&Streesit_grammar_location); + defsubr (&Streesit_parser_tracking_line_column_p); + defsubr (&Streesit_tracking_line_column_p); + defsubr (&Streesit_parser_p); defsubr (&Streesit_node_p); defsubr (&Streesit_compiled_query_p); @@ -4649,6 +5333,10 @@ applies to LANGUAGE-A will be redirected to LANGUAGE-B instead. */); defsubr (&Streesit_induce_sparse_tree); defsubr (&Streesit_node_match_p); defsubr (&Streesit_subtree_stat); + + defsubr (&Streesit__linecol_at); + defsubr (&Streesit__linecol_cache); + defsubr (&Streesit__linecol_cache_set); #endif /* HAVE_TREE_SITTER */ defsubr (&Streesit_available_p); #ifdef WINDOWSNT diff --git a/src/treesit.h b/src/treesit.h index 0d4635f4253..5937dba8653 100644 --- a/src/treesit.h +++ b/src/treesit.h @@ -26,6 +26,7 @@ along with GNU Emacs. If not, see . */ #include #include "lisp.h" +#include "buffer.h" INLINE_HEADER_BEGIN @@ -97,6 +98,14 @@ struct Lisp_TS_Parser (ref:visible-beg-null) in treesit.c for more explanation. */ ptrdiff_t visible_beg; ptrdiff_t visible_end; + /* Caches the line and column number of VISIBLE_BEG. It's always + valid and matches VISIBLE_BEG (because it's updated at each buffer + edit). (It has to be, because in treesit_record_change, we need to + calculate the line/col offset of old_end_linecol, the exact reason + why is left as an exercise to the reader.) */ + struct ts_linecol visi_beg_linecol; + /* Similar to VISI_BEG_LINECOL but caches VISIBLE_END. */ + struct ts_linecol visi_end_linecol; /* This counter is incremented every time a change is made to the buffer in treesit_record_change. The node retrieved from this parser inherits this timestamp. This way we can make sure the node is @@ -222,9 +231,21 @@ CHECK_TS_COMPILED_QUERY (Lisp_Object query) INLINE_HEADER_END -extern void treesit_record_change (ptrdiff_t, ptrdiff_t, ptrdiff_t); +extern const struct ts_linecol TREESIT_BOB_LINECOL; +/* An uninitialized linecol. */ +extern const struct ts_linecol TREESIT_EMPTY_LINECOL; +extern const TSPoint TREESIT_TS_POINT_1_0; + +extern bool treesit_buf_tracks_linecol_p (struct buffer *); +extern struct ts_linecol linecol_offset (struct ts_linecol, + struct ts_linecol); +extern struct ts_linecol treesit_linecol_maybe (ptrdiff_t, ptrdiff_t, + struct ts_linecol); +extern void treesit_record_change (ptrdiff_t, ptrdiff_t, ptrdiff_t, + struct ts_linecol, struct ts_linecol, + ptrdiff_t); extern Lisp_Object make_treesit_parser (Lisp_Object, TSParser *, TSTree *, - Lisp_Object, Lisp_Object); + Lisp_Object, Lisp_Object, bool); extern Lisp_Object make_treesit_node (Lisp_Object, TSNode); extern bool treesit_node_uptodate_p (Lisp_Object); diff --git a/src/xdisp.c b/src/xdisp.c index a26626dd61e..9f3a684f25e 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -1163,8 +1163,6 @@ static const char *decode_mode_spec (struct window *, int, int, Lisp_Object *); static void display_menu_bar (struct window *); static void display_tab_bar (struct window *); static void update_tab_bar (struct frame *, bool); -static ptrdiff_t display_count_lines (ptrdiff_t, ptrdiff_t, ptrdiff_t, - ptrdiff_t *); static void pint2str (register char *, register int, register ptrdiff_t); static int display_string (const char *, Lisp_Object, Lisp_Object, @@ -29399,7 +29397,7 @@ count_lines (ptrdiff_t start_byte, ptrdiff_t end_byte) found COUNT lines, or LIMIT_BYTE if we hit the limit before finding COUNT lines. */ -static ptrdiff_t +ptrdiff_t display_count_lines (ptrdiff_t start_byte, ptrdiff_t limit_byte, ptrdiff_t count, ptrdiff_t *byte_pos_ptr) diff --git a/test/src/treesit-tests.el b/test/src/treesit-tests.el index 770849c4566..2118afc2928 100644 --- a/test/src/treesit-tests.el +++ b/test/src/treesit-tests.el @@ -224,6 +224,84 @@ (kill-buffer base) (kill-buffer indirect)))) +;;; Linecol + +(ert-deftest treesit-linecol-basic () + "Tests for basic lincol synchronization." + (with-temp-buffer + (should (equal (treesit--linecol-cache) + '(:line 0 :col 0 :bytepos 0))) + (treesit--linecol-cache-set 1 0 1) + (should (equal (treesit--linecol-at (point)) + '(1 . 0))) + (insert "\n") + ;; Buffer content: a single newline. + (should (equal (treesit--linecol-at (point)) + '(2 . 0))) + + (treesit--linecol-cache-set 2 0 2) + (should (equal (treesit--linecol-cache) + '(:line 2 :col 0 :bytepos 2))) + + (goto-char (point-min)) + (should (equal (treesit--linecol-at (point)) + '(1 . 0))) + + (insert "0123456789") + ;; Buffer content: ten chars followed by a newline. + (treesit--linecol-cache-set 1 0 1) + (should (equal (treesit--linecol-at (point)) + '(1 . 10))) + + (goto-char (point-max)) + (should (equal (treesit--linecol-at (point)) + '(2 . 0))) + + (treesit--linecol-cache-set 1 5 6) + (should (equal (treesit--linecol-at (point)) + '(2 . 0))) + + (treesit--linecol-cache-set 2 0 12) + ;; Position 6 is in the middle of the first line. + (should (equal (treesit--linecol-at 6) + '(1 . 5))) + ;; Position 11 is at the end of the line. + (should (equal (treesit--linecol-at 11) + '(1 . 10))))) + +(ert-deftest treesit-linecol-search-back-across-newline () + "Search for newline backwards." + (with-temp-buffer + (insert "\n ") + (treesit--linecol-cache-set 2 1 3) + (should (equal (treesit--linecol-at (point)) '(2 . 1))) + (should (equal (treesit--linecol-at 2) '(2 . 0))) + (should (equal (treesit--linecol-at 1) '(1 . 0))))) + +(ert-deftest treesit-linecol-col-same-line () + "Test col calculation when cache and target pos is in the same line." + (with-temp-buffer + (insert "aaaaaa") + (treesit--linecol-cache-set 1 5 6) + (should (equal (treesit--linecol-at 6) '(1 . 5))) + (should (equal (treesit--linecol-at 2) '(1 . 1))) + (should (equal (treesit--linecol-at 1) '(1 . 0))))) + +(ert-deftest treesit-linecol-enable-disable () + "Test enabling/disabling linecol tracking." + (skip-unless (treesit-language-available-p 'json)) + (with-temp-buffer + (let ((treesit-languages-require-line-column-tracking nil) + parser) + (setq parser (treesit-parser-create 'json)) + (should (not (treesit-tracking-line-column-p))) + (should (not (treesit-parser-tracking-line-column-p parser))) + + (setq treesit-languages-require-line-column-tracking '(json)) + (setq parser (treesit-parser-create 'json nil t)) + (should (treesit-tracking-line-column-p)) + (should (treesit-parser-tracking-line-column-p parser))))) + ;;; Tree traversal (ert-deftest treesit-search-subtree () commit 159e3a981ed5482393182b036e38818d42405c90 Author: Gerd Möllmann Date: Sun May 4 06:39:22 2025 +0200 Fix support of 'mouse-highlight' on NS (bug#78218) * src/nsterm.m: ([EmacsView keyDown:]): Add missing '!' in if-condition. Check tab_bar_window as other window systems do. diff --git a/src/nsterm.m b/src/nsterm.m index 5514a693c86..f822481e2e2 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -6962,10 +6962,12 @@ most recently updated (I guess), which is not the correct one. */ [NSCursor setHiddenUntilMouseMoves:! NILP (Vmake_pointer_invisible)]; - if (hlinfo->mouse_face_hidden && FIXNUMP (Vmouse_highlight)) + if (!hlinfo->mouse_face_hidden + && FIXNUMP (Vmouse_highlight) + && !EQ (emacsframe->tab_bar_window, hlinfo->mouse_face_window)) { clear_mouse_face (hlinfo); - hlinfo->mouse_face_hidden = 1; + hlinfo->mouse_face_hidden = true; } if (!processingCompose) commit f41ab0b425c7cfb2c337deb28ef2d7e4bd339394 Author: Philip Kaludercic Date: Sat May 3 23:39:17 2025 +0200 Preserve directory structure of local packages * lisp/emacs-lisp/package.el (package-unpack): Re-create the directory structure of the source directory and copy the files in the right place. (package-dir-info): Try to find package info in files closer to the specified package source root. (Bug#78017) diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index ad60afb62da..82fcf439a11 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -1013,9 +1013,11 @@ untar into a directory named DIR; otherwise, signal an error." (dired-get-marked-files)) (directory-files-recursively default-directory "" nil)))) (dolist (source-file file-list) - (let ((target-el-file - (expand-file-name (file-name-nondirectory source-file) pkg-dir))) - (copy-file source-file target-el-file t))) + (let ((target (expand-file-name + (file-relative-name source-file default-directory) + pkg-dir))) + (make-directory (file-name-directory target) t) + (copy-file source-file target t))) ;; Now that the files have been installed, this package is ;; indistinguishable from a `tar' or a `single'. Let's make ;; things simple by ensuring we're one of them. @@ -1255,27 +1257,24 @@ The return result is a `package-desc'." (with-temp-buffer (insert-file-contents desc-file) (package--read-pkg-desc 'dir)) - (let ((files (or (and (derived-mode-p 'dired-mode) - (dired-get-marked-files)) - (directory-files-recursively default-directory "\\.el\\'"))) - info) - (while files - (with-temp-buffer - (let ((file (pop files))) - ;; The file may be a link to a nonexistent file; e.g., a - ;; lock file. - (when (file-exists-p file) + (catch 'found + (let ((files (or (and (derived-mode-p 'dired-mode) + (dired-get-marked-files)) + (directory-files-recursively default-directory "\\.el\\'")))) + ;; We sort the file names in lexicographical order, to ensure + ;; that we check shorter file names first (ie. those further + ;; up in the directory structure). + (dolist (file (sort files)) + ;; The file may be a link to a nonexistent file; e.g., a + ;; lock file. + (when (file-exists-p file) + (with-temp-buffer (insert-file-contents file) ;; When we find the file with the data, - (when (setq info (ignore-errors (package-buffer-info))) - ;; stop looping, - (setq files nil) - ;; set the 'dir kind, - (setf (package-desc-kind info) 'dir)))))) - (unless info - (error "No .el files with package headers in `%s'" default-directory)) - ;; and return the info. - info)))) + (when-let* ((info (ignore-errors (package-buffer-info)))) + (setf (package-desc-kind info) 'dir) + (throw 'found info)))))) + (error "No .el files with package headers in `%s'" default-directory))))) ;;; Communicating with Archives commit 8a097aede53dfb8f595d79824c784c188b210093 Author: Eli Zaretskii Date: Sat May 3 16:26:44 2025 +0300 Avoid warnings about 'lexical-binding' in 'eval-buffer' * src/lread.c (Feval_buffer): Don't emit a lexbind warning if the buffer already has a local value of 'lexical-binding'. Doc fix. (Bug#77883) diff --git a/src/lread.c b/src/lread.c index 5c8bbe7da9f..95c9e711130 100644 --- a/src/lread.c +++ b/src/lread.c @@ -2589,11 +2589,14 @@ DO-ALLOW-PRINT, if non-nil, specifies that output functions in the evaluated code should work normally even if PRINTFLAG is nil, in which case the output is displayed in the echo area. -This function ignores the current value of the `lexical-binding' -variable. Instead it will heed any +This function ignores the global value of the `lexical-binding' +variable. Instead it will heed the buffer-local value of that +variable and any -*- lexical-binding: t -*- -settings in the buffer, and if there is no such setting, the buffer -will be evaluated without lexical binding. +settings in the buffer; if there is no such setting, and the +buffer-local value of the variable is nil, the buffer will be +evaluated with the value of `lexical binding' equal to its +top-level default value, as returned by `default-toplevel-value'. This function preserves the position of point. */) (Lisp_Object buffer, Lisp_Object printflag, Lisp_Object filename, @@ -2621,7 +2624,10 @@ This function preserves the position of point. */) specbind (Qstandard_output, tem); record_unwind_protect_excursion (); BUF_TEMP_SET_PT (XBUFFER (buf), BUF_BEGV (XBUFFER (buf))); - specbind (Qlexical_binding, get_lexical_binding (buf, buf)); + /* Don't emit a warning about 'lexical-binding' if it already has a + local binding in the buffer. */ + if (NILP (Flocal_variable_p (Qlexical_binding, buf))) + specbind (Qlexical_binding, get_lexical_binding (buf, buf)); BUF_TEMP_SET_PT (XBUFFER (buf), BUF_BEGV (XBUFFER (buf))); readevalloop (buf, 0, filename, !NILP (printflag), unibyte, Qnil, Qnil, Qnil); commit 61de658827bef91cd32d992ff28a3b0d320aaf24 Merge: c31f23016c6 28a276efe87 Author: Michael Albinus Date: Sat May 3 15:05:09 2025 +0200 Merge from origin/emacs-30 28a276efe87 Fix quoted local file name parts in Tramp # Conflicts: # lisp/net/tramp.el commit 28a276efe8744227e15a8077f6333974eda157bb Author: Michael Albinus Date: Sat May 3 15:00:18 2025 +0200 Fix quoted local file name parts in Tramp * lisp/net/tramp.el (tramp-handle-directory-file-name): * lisp/net/tramp-integration.el (tramp-rfn-eshadow-update-overlay): Handle quoted local file name part. diff --git a/lisp/net/tramp-integration.el b/lisp/net/tramp-integration.el index 552d52835e9..6df9b17cdc3 100644 --- a/lisp/net/tramp-integration.el +++ b/lisp/net/tramp-integration.el @@ -59,8 +59,9 @@ ;;; Fontification of `read-file-name': -(defvar tramp-rfn-eshadow-overlay) -(make-variable-buffer-local 'tramp-rfn-eshadow-overlay) +;; An overlay covering the shadowed part of the filename (local to the +;; minibuffer). +(defvar-local tramp-rfn-eshadow-overlay nil) (defun tramp-rfn-eshadow-setup-minibuffer () "Set up a minibuffer for `file-name-shadow-mode'. @@ -104,7 +105,8 @@ been set up by `rfn-eshadow-setup-minibuffer'." (minibuffer-prompt-end))) ;; We do not want to send any remote command. (non-essential t)) - (when (tramp-tramp-file-p (buffer-substring end (point-max))) + (when (and (tramp-tramp-file-p (buffer-substring end (point-max))) + (not (file-name-quoted-p (buffer-substring end (point-max))))) (save-excursion (save-restriction (narrow-to-region diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 6c1a4ae7127..e0e080021c7 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -4076,6 +4076,7 @@ Let-bind it when necessary.") ;; Otherwise, remove any trailing slash from localname component. ;; Method, host, etc, are unchanged. (while (with-parsed-tramp-file-name directory nil + (setq localname (file-name-unquote localname)) (and (tramp-compat-length> localname 0) (eq (aref localname (1- (length localname))) ?/) (not (string= localname "/")))) @@ -4164,8 +4165,8 @@ Let-bind it when necessary.") (eq (file-attribute-type (file-attributes (file-truename filename))) t))) (defun tramp-handle-file-equal-p (filename1 filename2) - "Like `file-equalp-p' for Tramp files." - ;; Native `file-equalp-p' calls `file-truename', which requires a + "Like `file-equal-p' for Tramp files." + ;; Native `file-equal-p' calls `file-truename', which requires a ;; remote connection. This can be avoided, if FILENAME1 and ;; FILENAME2 are not located on the same remote host. (when (tramp-equal-remote commit c31f23016c6db449c646c12352e9207a19f5b70f Author: Eli Zaretskii Date: Sat May 3 14:07:27 2025 +0300 Fix support of 'mouse-highlight' on MS-Windows console * src/w32inevt.c (w32_console_read_socket): Support numerical value of 'mouse-highlight'. (Bug#78218) diff --git a/src/w32inevt.c b/src/w32inevt.c index b0e6b5a9286..9e3c3a75446 100644 --- a/src/w32inevt.c +++ b/src/w32inevt.c @@ -812,7 +812,16 @@ w32_console_read_socket (struct terminal *terminal, add = 1; } if (add) - kbd_buffer_store_event_hold (&inev, hold_quit); + { + Mouse_HLInfo *hlinfo = + &terminal->display_info.tty->mouse_highlight; + if (!hlinfo->mouse_face_hidden && FIXNUMP (Vmouse_highlight)) + { + clear_mouse_face (hlinfo); + hlinfo->mouse_face_hidden = true; + } + kbd_buffer_store_event_hold (&inev, hold_quit); + } break; case MOUSE_EVENT: commit 3bf5a1cda7c820c37553637236569121fe2c8367 Merge: 02d68845376 1f998d11a58 Author: Eli Zaretskii Date: Sat May 3 06:26:31 2025 -0400 Merge from origin/emacs-30 1f998d11a58 ; * doc/misc/ert.texi (erts files): Improve indexing. 52183c9596c ; * lisp/battery.el (battery-status-function): Doc fix. dc3e79a80ee ; * etc/DEBUG: Grammar fix. 7d02ffe87b4 ; * lisp/international/mule.el (define-coding-system): Do... commit 02d6884537632f41d57edd8c0a03bc51795948c1 Merge: 790c475ec57 ebeaa728b66 Author: Eli Zaretskii Date: Sat May 3 06:26:31 2025 -0400 ; Merge from origin/emacs-30 The following commits were skipped: ebeaa728b66 Fix compilation-mode matches for csharp-mode (bug#78128) eb6a50d3e3f ; Fix last change (do not merge to master). e1e052501b3 Add 3 scripts to fontset setup commit 790c475ec57b2f3c72f00be3ba186caee1538ebf Author: Eli Zaretskii Date: Sat May 3 13:24:59 2025 +0300 ; * lisp/textmodes/markdown-ts-mode.el (treesit-node-child): Declare. diff --git a/lisp/textmodes/markdown-ts-mode.el b/lisp/textmodes/markdown-ts-mode.el index 8823d9f0314..b6b310a9647 100644 --- a/lisp/textmodes/markdown-ts-mode.el +++ b/lisp/textmodes/markdown-ts-mode.el @@ -31,6 +31,7 @@ (require 'subr-x) (declare-function treesit-node-parent "treesit.c") +(declare-function treesit-node-child "treesit.c") (declare-function treesit-node-type "treesit.c") (declare-function treesit-parser-create "treesit.c") commit ee8b4eaca12af0ef6bf0d37780efaa558c25d45e Author: Matthew Tromp Date: Tue Apr 22 15:27:58 2025 -0400 Add `next-error' support for flymake diagnostics buffers This adds `next-error' support for flymake diagnostics buffers. Buffers created with `flymake-show-buffer-diagnostics' and `flymake-show-project-diagnostics' are now next-error enabled, and `next-error' and `previous-error' will navigate through their listed diagnostics. * lisp/progmodes/flymake.el (flymake-current-diagnostic-line) (flymake--diagnostics-next-error): Add. (flymake-show-diagnostic, flymake-show-buffer-diagnostics) (flymake-show-project-diagnostics): Set next-error-last-buffer. (flymake--tabulated-setup): Set next-error-function. (Bug#77809) Copyright-paperwork-exempt: yes diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index cfabfef78a0..2d30ec3f5bd 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -1433,6 +1433,9 @@ Interactively, with a prefix arg, FORCE is t." map) "Keymap for `flymake-mode'") +(defvar-local flymake-current-diagnostic-line 0 + "The line of the most recently focused diagnostic in a diagnostics buffer.") + ;;;###autoload (define-minor-mode flymake-mode "Toggle Flymake mode on or off. @@ -1893,7 +1896,8 @@ TYPE is usually keyword `:error', `:warning' or `:note'." (defun flymake-show-diagnostic (pos &optional other-window) "From Flymake diagnostics buffer, show source of diagnostic at POS." (interactive (list (point) t)) - (let* ((id (or (tabulated-list-get-id pos) + (let* ((diagnostics-buffer (current-buffer)) + (id (or (tabulated-list-get-id pos) (user-error "Nothing at point"))) (diag (plist-get id :diagnostic)) (locus (flymake--diag-locus diag)) @@ -1903,6 +1907,7 @@ TYPE is usually keyword `:error', `:warning' or `:note'." (goto-char b) (pulse-momentary-highlight-region b (or e (line-end-position)))))) + (setq flymake-current-diagnostic-line (line-number-at-pos pos)) (with-current-buffer (cond ((bufferp locus) locus) (t (find-file-noselect locus))) (with-selected-window @@ -1918,6 +1923,8 @@ TYPE is usually keyword `:error', `:warning' or `:note'." (car beg) (cdr beg)))) (funcall visit bbeg bend))))) + ;; Emacs < 27 + (setq next-error-last-buffer diagnostics-buffer) (current-buffer)))) (defun flymake-goto-diagnostic (pos) @@ -2031,6 +2038,7 @@ resizing columns and ommiting redudant columns." (defun flymake--tabulated-setup (use-project) "Helper for `flymake-diagnostics-buffer-mode'. And also `flymake-project-diagnostics-mode'." + (setq-local next-error-function #'flymake--diagnostics-next-error) (let ((saved-r-b-f revert-buffer-function) (refresh (lambda () @@ -2060,6 +2068,23 @@ And also `flymake-project-diagnostics-mode'." (funcall refresh) (apply saved-r-b-f args))))) +(defun flymake--diagnostics-next-error (n &optional reset) + "`next-error-function' for flymake diagnostics buffers. +N is an integer representing how many errors to move. +If RESET is non-nil, return to the beginning of the errors before +moving." + (let ((line (if reset 1 flymake-current-diagnostic-line)) + (total-lines (count-lines (point-min) (point-max)))) + (goto-char (point-min)) + (unless (zerop total-lines) + (let ((target-line (+ line n))) + (setq target-line (max 1 target-line)) + (setq target-line (min target-line total-lines)) + (forward-line (1- target-line)))) + (when-let* ((win (get-buffer-window nil t))) + (set-window-point win (point))) + (flymake-goto-diagnostic (point)))) + (define-derived-mode flymake-diagnostics-buffer-mode tabulated-list-mode "Flymake diagnostics" "A mode for listing Flymake diagnostics." @@ -2116,6 +2141,7 @@ This function doesn't move point" window) (with-current-buffer target (setq flymake--diagnostics-buffer-source source) + (setq next-error-last-buffer (current-buffer)) (revert-buffer) (setq window (display-buffer (current-buffer) @@ -2222,6 +2248,7 @@ some of this variable's contents the diagnostic listings.") (with-current-buffer buffer (flymake-project-diagnostics-mode) (setq-local flymake--project-diagnostic-list-project prj) + (setq next-error-last-buffer (current-buffer)) (revert-buffer) (display-buffer (current-buffer) `((display-buffer-reuse-window commit 1f998d11a585a9915cc6e8b67050dc1bb9191107 Author: Eli Zaretskii Date: Sat May 3 10:34:43 2025 +0300 ; * doc/misc/ert.texi (erts files): Improve indexing. diff --git a/doc/misc/ert.texi b/doc/misc/ert.texi index bde76d79394..205ed027f3e 100644 --- a/doc/misc/ert.texi +++ b/doc/misc/ert.texi @@ -939,6 +939,7 @@ where the @samp{|} character is in the ``after'' form (and issue a test failure if that isn't the case). (This is used in all subsequent tests, unless overridden by a new @samp{Point-Char} spec.) +@cindex skipping tests, in erts file @item Skip If this is present and value is a form that evaluates to a non-@code{nil} value, the test will be skipped. commit d164116aa52b10bdfe8242dd1089406d4e557f32 Author: Roi Martin Date: Thu Mar 6 20:26:46 2025 +0100 Fix 'Skip' behavior in erts files (bug#76839) * lisp/emacs-lisp/ert.el (ert-test--erts-test): Fix 'Skip' behavior in erts files, so only the test case where it is specified is skipped. * test/lisp/emacs-lisp/ert-tests.el (ert-test-erts-skip-one) (ert-test-erts-skip-last): Add test cases. diff --git a/lisp/emacs-lisp/ert.el b/lisp/emacs-lisp/ert.el index b021c4d704c..efd917082b7 100644 --- a/lisp/emacs-lisp/ert.el +++ b/lisp/emacs-lisp/ert.el @@ -2921,7 +2921,7 @@ write erts files." (if (and skip (eval (car (read-from-string skip)))) ;; Skipping this test. - () + (goto-char end-after) ;; Do the test. (goto-char end-after) ;; We have a separate after section. diff --git a/test/lisp/emacs-lisp/ert-resources/erts-skip-last.erts b/test/lisp/emacs-lisp/ert-resources/erts-skip-last.erts new file mode 100644 index 00000000000..fd39efcaaa6 --- /dev/null +++ b/test/lisp/emacs-lisp/ert-resources/erts-skip-last.erts @@ -0,0 +1,8 @@ +Name: last +Skip: t + +=-= +FOO +=-= +BAR +=-=-= diff --git a/test/lisp/emacs-lisp/ert-resources/erts-skip-one.erts b/test/lisp/emacs-lisp/ert-resources/erts-skip-one.erts new file mode 100644 index 00000000000..3b35081c414 --- /dev/null +++ b/test/lisp/emacs-lisp/ert-resources/erts-skip-one.erts @@ -0,0 +1,16 @@ +Name: first +Skip: t + +=-= +FOO +=-= +FOO +=-=-= + +Name: second + +=-= +FOO +=-= +BAR +=-=-= diff --git a/test/lisp/emacs-lisp/ert-tests.el b/test/lisp/emacs-lisp/ert-tests.el index d138240b0f8..467d01fed9d 100644 --- a/test/lisp/emacs-lisp/ert-tests.el +++ b/test/lisp/emacs-lisp/ert-tests.el @@ -28,6 +28,7 @@ (require 'cl-lib) (require 'ert) +(require 'ert-x) ;;; Self-test that doesn't rely on ERT, for bootstrapping. @@ -1029,6 +1030,17 @@ F failing-test (ert-with-test-buffer (:name "foo" :selected t) (buffer-name))))) +(ert-deftest ert-test-erts-skip-one () + "Test that Skip does not affect subsequent test cases (Bug#76839)." + (should-error (ert-test-erts-file (ert-resource-file "erts-skip-one.erts") + (lambda () ())) + :type 'ert-test-failed)) + +(ert-deftest ert-test-erts-skip-last () + "Test that Skip does not fail on last test case (Bug#76839)." + (ert-test-erts-file (ert-resource-file "erts-skip-last.erts") + (lambda () ()))) + (provide 'ert-tests) ;;; ert-tests.el ends here commit f180e4c9cb676e771acdaed7b0fd76c1c83dd485 Author: Sean Whitton Date: Sat May 3 10:32:42 2025 +0800 Improve native--compile-skip-on-battery-p * lisp/emacs-lisp/comp-run.el (native--compile-skip-on-battery-p): Look at %L, %b and %B format characters. Add commentary. diff --git a/lisp/emacs-lisp/comp-run.el b/lisp/emacs-lisp/comp-run.el index 8703b582e3c..1761190ea17 100644 --- a/lisp/emacs-lisp/comp-run.el +++ b/lisp/emacs-lisp/comp-run.el @@ -54,9 +54,9 @@ or one if there's just one execution unit." :risky t :version "28.1") -;; If we could start compilations that were skipped if and when AC power -;; is subsequently reconnected, we could consider changing the default -;; to nil. --spwhitton +;; TODO If we could start compilations that were skipped if and when AC +;; power is subsequently reconnected, we could consider changing +;; the default to nil. --spwhitton (defcustom native-comp-async-on-battery-power t "Whether to start asynchronous native compilation while on battery power. Customize this to nil to disable starting async compilations when AC @@ -179,11 +179,28 @@ LOAD and SELECTOR work as described in `native--compile-async'." (defun native--compile-skip-on-battery-p () "Should we skip JIT compilation because we're running on battery power?" + ;; The `battery-status-function' API is not specified so as to + ;; render it cleanly machine-readable, so we resort to heuristics. + ;; We could extend the API to return machine-readable information in + ;; the alist when an optional boolean argument is provided to the + ;; `battery-status-function'; we could use `func-arity' to check + ;; whether a custom `battery-status-function' supports the extension. + ;; However, so far in the time we've had battery.el, it would appear + ;; that this is the first time we've wanted to use the information + ;; other than just for generating messages. (and-let* (((not native-comp-async-on-battery-power)) ((require 'battery)) battery-status-function - (status (assq ?L (funcall battery-status-function))) - ((not (string= (cdr status) "on-line")))))) + (res (funcall battery-status-function)) + ((or (member (cdr (assq ?L res)) '("off-line" "BAT" "Battery")) + ;; If %L has not given us what we need, we don't + ;; consider battery charge levels or percentages, + ;; because power users often configure their batteries + ;; to stop charging at less than 100% as a way to + ;; extend the lifetime of their battery hardware. + (string= (cdr (assq ?b res)) "+") + (member (cdr (assq ?B res)) '("charging" "pending-charge")) + (not (string= (cdr (assq ?B res)) "discharging"))))))) (defvar comp-files-queue () "List of Emacs Lisp files to be compiled.") commit 9048fcf22c3ec3b5cc77dbb98993a53f5f9b7cd5 Author: Stefan Monnier Date: Fri May 2 16:59:17 2025 -0400 (decode_coding): Avoid nested *-change-functions (bug#78042) * src/coding.c (decode_coding): Avoid nested *-change-functions (bug#78042). * test/src/editfns-tests.el (sanity-check-change-functions-before) (sanity-check-change-functions-after): Record notifications in `sanity-check-change-functions-op`. (sanity-check-change-functions-with-op): Don't rely on `sanity-check-change-functions-op` always holding only the `op`. (sanity-check-change-functions-errors): Include the sequence of notifications in the error info. (editfns-tests--before/after-change-functions): Add tests for (bug#78042). diff --git a/src/coding.c b/src/coding.c index 63b0dbeb18b..a923b6bd82d 100644 --- a/src/coding.c +++ b/src/coding.c @@ -7363,6 +7363,7 @@ decode_coding (struct coding_system *coding) struct ccl_spec cclspec; int carryover; int i; + specpdl_ref count = SPECPDL_INDEX (); USE_SAFE_ALLOCA; @@ -7389,6 +7390,9 @@ decode_coding (struct coding_system *coding) undo_list = BVAR (current_buffer, undo_list); bset_undo_list (current_buffer, Qt); + /* Avoid running nested *-change-functions via 'produce_annotation'. + Our callers run *-change-functions over the whole region anyway. */ + specbind (Qinhibit_modification_hooks, Qt); } coding->consumed = coding->consumed_char = 0; @@ -7501,7 +7505,7 @@ decode_coding (struct coding_system *coding) record_insert (coding->dst_pos, coding->produced_char); } - SAFE_FREE (); + SAFE_FREE_UNBIND_TO (count, Qnil); } diff --git a/test/src/editfns-tests.el b/test/src/editfns-tests.el index 2553ad3ec2c..9a27c420f1e 100644 --- a/test/src/editfns-tests.el +++ b/test/src/editfns-tests.el @@ -498,10 +498,10 @@ (defvar sanity-check-change-functions-op nil) (defmacro sanity-check-change-functions-with-op (op &rest body) (declare (debug t) (indent 1)) - `(let ((sanity-check-change-functions-op ,op)) - (sanity-check--message "%S..." sanity-check-change-functions-op) + `(let ((sanity-check-change-functions-op (list ,op))) + (sanity-check--message "%S..." ,op) ,@body - (sanity-check--message "%S...done" sanity-check-change-functions-op))) + (sanity-check--message "%S...done" ,op))) (defun sanity-check--message (&rest args) (if sanity-check-change-functions-verbose (apply #'message args))) @@ -530,6 +530,7 @@ (setq sanity-check-change-functions-buffer-size (buffer-size))))) (defun sanity-check-change-functions-before (beg end) + (push `(BEFORE ,beg ,end) sanity-check-change-functions-op) (sanity-check--message "Before: %S %S" beg end) (unless (<= (point-min) beg end (point-max)) (sanity-check-change-functions-error @@ -540,6 +541,7 @@ (setq sanity-check-change-functions-end end)) (defun sanity-check-change-functions-after (beg end len) + (push `(AFTER ,beg ,end ,len) sanity-check-change-functions-op) (sanity-check--message "After : %S %S (%S)" beg end len) (unless (<= (point-min) beg end (point-max)) (sanity-check-change-functions-error @@ -565,7 +567,7 @@ (defun sanity-check-change-functions-errors () (sanity-check-change-functions-check-size) (if sanity-check-change-functions-errors - (cons sanity-check-change-functions-op + (cons (reverse sanity-check-change-functions-op) sanity-check-change-functions-errors))) (ert-deftest editfns-tests--before/after-change-functions () @@ -591,6 +593,24 @@ (decode-coding-region beg (point) 'utf-8) (should (null (sanity-check-change-functions-errors))))) + (let ((beg (point))) ;bug#78042 + (apply #'insert (make-list 5000 "hell\351 ")) + (sanity-check-change-functions-with-op 'DECODE-CODING-LARGE-REGION + (decode-coding-region beg (point) 'windows-1252) + (should-not (sanity-check-change-functions-errors)))) + + (let ((beg (point))) ;bug#78042 + (sanity-check-change-functions-with-op 'DECODE-CODING-INSERT + ;; The `insert' calls make sure we track the buffer-size + ;; so as to detect if `decode-coding-string' fails to run the + ;; `*-change-functions'. + (insert "<") + (decode-coding-string "hell\351 " 'windows-1252 nil (current-buffer)) + (forward-char 6) + (insert ">") + (should (equal "" (buffer-substring beg (point)))) + (should-not (sanity-check-change-functions-errors)))) + (sanity-check-change-functions-with-op 'ENCODE-CODING-STRING (encode-coding-string "ééé" 'utf-8 nil (current-buffer)) (should (null (sanity-check-change-functions-errors)))) commit 99ca41b6ef300653a0d15b73a0c0d446a9a9e059 Author: Michael Albinus Date: Fri May 2 14:55:52 2025 +0200 ; Fix last change in tramp-tests.el diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el index 79fb57e6486..eeb90539f61 100644 --- a/test/lisp/net/tramp-tests.el +++ b/test/lisp/net/tramp-tests.el @@ -5169,6 +5169,27 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." ;; (untrace-function #'completion-file-name-table) (tramp-change-syntax orig-syntax)))) +(defun tramp--test-split-on-boundary (s) + "Return completion boundaries for string S." + (let ((bounds (completion-boundaries s #'completion--file-name-table nil ""))) + (cons (substring s nil (car bounds)) (substring s (car bounds))))) + +(ert-deftest tramp-test26-file-name-completion-boundaries () + "Test file name completion boundaries are correct in various cases." + ;; `completion--file-name-table' was reworked in Emacs 31, the + ;; boundaries are always incorrect before that. + (skip-unless (tramp--test-emacs31-p)) + + (should (equal (tramp--test-split-on-boundary "/ssh:user@host:foo") + '("/ssh:user@host:" . "foo"))) + (should (equal (tramp--test-split-on-boundary "/ssh:user@host:/~/foo") + '("/ssh:user@host:/~/" . "foo"))) + (should (equal (tramp--test-split-on-boundary "/ssh:user@host:/usr//usr/foo") + '("/ssh:user@host:/usr//usr/" . "foo"))) + (should (equal (tramp--test-split-on-boundary + "/ssh:user@host:/ssh:user@host://usr/foo") + '("/ssh:user@host:/ssh:user@host://usr/" . "foo")))) + (ert-deftest tramp-test27-load () "Check `load'." (skip-unless (tramp--test-enabled)) @@ -7182,6 +7203,12 @@ Some semantics has been changed for there, without new functions or variables, so we check the Emacs version directly." (>= emacs-major-version 29)) +(defun tramp--test-emacs31-p () + "Check for Emacs version >= 31.1. +Some semantics has been changed for there, without new functions +or variables, so we check the Emacs version directly." + (>= emacs-major-version 31)) + (defun tramp--test-adb-p () "Check, whether the remote host runs Android. This requires restrictions of file name syntax." @@ -8530,29 +8557,6 @@ Since it unloads Tramp, it shall be the last test to run." (should (featurep 'tramp)) (should (featurep 'tramp-archive))) -(defun tramp--test-emacs31-p () - "Check for Emacs version >= 31.1." - (>= emacs-major-version 31)) - -(defun tramp--split-on-boundary (s) - (let ((bounds (completion-boundaries s #'completion--file-name-table nil ""))) - (cons (substring s nil (car bounds)) (substring s (car bounds))))) - -(ert-deftest tramp-test51-file-name-completion-boundaries () - "Test file name completion boundaries are correct in various cases." - ;; `completion--file-name-table' was reworked in 31, the boundaries - ;; are always incorrect before that. - (skip-unless (tramp--test-emacs31-p)) - - (should (equal (tramp--split-on-boundary "/ssh:user@host:foo") - '("/ssh:user@host:" . "foo"))) - (should (equal (tramp--split-on-boundary "/ssh:user@host:/~/foo") - '("/ssh:user@host:/~/" . "foo"))) - (should (equal (tramp--split-on-boundary "/ssh:user@host:/usr//usr/foo") - '("/ssh:user@host:/usr//usr/" . "foo"))) - (should (equal (tramp--split-on-boundary "/ssh:user@host:/ssh:user@host://usr/foo") - '("/ssh:user@host:/ssh:user@host://usr/" . "foo")))) - (defun tramp-test-all (&optional interactive) "Run all tests for \\[tramp]. If INTERACTIVE is non-nil, the tests are run interactively." commit d56d7ca35cf3c0185fe42bf7f64e3aa6a5281e3e Author: Spencer Baugh Date: Fri May 2 14:47:37 2025 +0200 Fix completion boundaries for TRAMP file names Previously, we assumed (roughly) that substitute-in-file-name always returns a suffix of the original string. But substitute-in-file-name on "/ssh:user@host:/~/" returns "/ssh:user@host:~/", preserving the TRAMP magic prefix. Weaken the assertion in completion--sifn-boundaries to allow this; the new assertion is more clear about the property we care about, anyway. * lisp/minibuffer.el (completion--sifn-boundaries): Weaken assertion slightly. * test/lisp/net/tramp-tests.el (tramp--test-emacs31-p) (tramp--split-on-boundary) (tramp-test51-file-name-completion-boundaries): Add. diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index f65f566fe24..c2c3b5823a2 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -3514,16 +3514,19 @@ boundaries for the original string." ;; and then transform that into an offset in STRING instead. We can't do this ;; if we expand environment variables, so double the $s to prevent that. (let* ((doubled-string (replace-regexp-in-string "\\$" "$$" string t t)) - ;; sifn will change $$ back into $, so the result is a suffix of STRING - ;; (in fact, it's the last absolute file name in STRING). - (last-file-name (substitute-in-file-name doubled-string)) - (bounds (completion-boundaries last-file-name table pred suffix))) - (cl-assert (string-suffix-p last-file-name string) t) - ;; BOUNDS contains the start boundary in LAST-FILE-NAME; adjust it to be an - ;; offset in STRING instead. - (cons (+ (- (length string) (length last-file-name)) (car bounds)) - ;; No special processing happens on SUFFIX and the end boundary. - (cdr bounds)))) + ;; sifn will change $$ back into $, so SIFNED is mostly the + ;; same as STRING, with some text deleted. + (sifned (substitute-in-file-name doubled-string)) + (bounds (completion-boundaries sifned table pred suffix)) + (sifned-start (car bounds)) + ;; Adjust SIFNED-START to be an offset in STRING instead of in SIFNED. + (string-start (+ (- sifned-start (length sifned)) (length string)))) + ;; The text within the boundaries should be identical. + (cl-assert + (eq t (compare-strings sifned sifned-start nil string string-start nil)) + t) + ;; No special processing happens on SUFFIX and the end boundary. + (cons string-start (cdr bounds)))) (defun completion--file-name-table (orig pred action) "Internal subroutine for `read-file-name'. Do not call this. diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el index c13119fb920..79fb57e6486 100644 --- a/test/lisp/net/tramp-tests.el +++ b/test/lisp/net/tramp-tests.el @@ -8530,6 +8530,29 @@ Since it unloads Tramp, it shall be the last test to run." (should (featurep 'tramp)) (should (featurep 'tramp-archive))) +(defun tramp--test-emacs31-p () + "Check for Emacs version >= 31.1." + (>= emacs-major-version 31)) + +(defun tramp--split-on-boundary (s) + (let ((bounds (completion-boundaries s #'completion--file-name-table nil ""))) + (cons (substring s nil (car bounds)) (substring s (car bounds))))) + +(ert-deftest tramp-test51-file-name-completion-boundaries () + "Test file name completion boundaries are correct in various cases." + ;; `completion--file-name-table' was reworked in 31, the boundaries + ;; are always incorrect before that. + (skip-unless (tramp--test-emacs31-p)) + + (should (equal (tramp--split-on-boundary "/ssh:user@host:foo") + '("/ssh:user@host:" . "foo"))) + (should (equal (tramp--split-on-boundary "/ssh:user@host:/~/foo") + '("/ssh:user@host:/~/" . "foo"))) + (should (equal (tramp--split-on-boundary "/ssh:user@host:/usr//usr/foo") + '("/ssh:user@host:/usr//usr/" . "foo"))) + (should (equal (tramp--split-on-boundary "/ssh:user@host:/ssh:user@host://usr/foo") + '("/ssh:user@host:/ssh:user@host://usr/" . "foo")))) + (defun tramp-test-all (&optional interactive) "Run all tests for \\[tramp]. If INTERACTIVE is non-nil, the tests are run interactively." commit 52183c9596cc4d346c872ad81ecbcf695e636f0b Author: Eli Zaretskii Date: Fri May 2 15:07:35 2025 +0300 ; * lisp/battery.el (battery-status-function): Doc fix. diff --git a/lisp/battery.el b/lisp/battery.el index 0f39b3f7087..846cf22829f 100644 --- a/lisp/battery.el +++ b/lisp/battery.el @@ -136,7 +136,13 @@ Its cons cells are of the form (CONVERSION . REPLACEMENT-TEXT) CONVERSION is the character code of a \"conversion specification\" -introduced by a `%' character in a control string." +introduced by a `%' character in a control string. See the +documentation of `battery-echo-area-format' for supported conversion +specifications and the format used by `battery' to show battery +status in the echo area. + +The default value of the function is determined at startup, and depends +on the battery-related services available on the system." :version "28.1" :type '(choice (const nil) function)) commit 3f8f738d1d6b583415aa5d5584299794838316ca Author: Eli Zaretskii Date: Fri May 2 08:59:14 2025 +0300 ; * lisp/progmodes/cc-fonts.el (cl-delete-duplicates): Declare. diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el index eca249ee2f6..976eff53cd6 100644 --- a/lisp/progmodes/cc-fonts.el +++ b/lisp/progmodes/cc-fonts.el @@ -86,6 +86,7 @@ (cc-bytecomp-defvar parse-sexp-lookup-properties) ; Emacs only. (declare-function cl-set-difference "cl-seq" (cl-list1 cl-list2 &rest cl-keys)) +(declare-function cl-delete-duplicates "cl-seq" (seq &rest cl-keys)) ;; Need to declare these local symbols during compilation since ;; they're referenced from lambdas in `byte-compile' calls that are commit d32ab06145a6055f5e39d348bddba72c3f705d75 Author: Sean Whitton Date: Fri May 2 12:49:35 2025 +0800 Move documentation of this-command buffer display condition entry * doc/lispref/buffers.texi (Buffer List): Document this-command buffer display condition entry. * doc/lispref/windows.texi (Choosing Window): Give an example of using this-command buffer display condition entry in display-buffer-alist. (Buffer Display Action Alists): * lisp/window.el (display-buffer): Delete documentation of this-command buffer display condition entry from these locations because it is not a buffer display action alist entry. * lisp/subr.el (buffer-match-p): Update cross reference. diff --git a/doc/lispref/buffers.texi b/doc/lispref/buffers.texi index aad0499f51b..01aa620b828 100644 --- a/doc/lispref/buffers.texi +++ b/doc/lispref/buffers.texi @@ -1006,6 +1006,13 @@ This is pertinent only when this function is called by satisfied if the action alist with which @code{display-buffer} was called includes @w{@code{(category . @var{expr})}} in the value of its @var{action} argument. @xref{Buffer Display Action Alists}. +@item this-command +@vindex this-command@r{, a buffer display condition entry} +This too is pertinent only when this function is called by +@code{display-buffer} (@pxref{Buffer Display Action Alists}), and is +satisfied when the command now being executed is equal to @var{expr}, or +if @var{expr} is a list, when the command now being executed is a member +of that list. @end table @item t Satisfied by any buffer. A convenient alternative to @code{""} (empty diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi index ce851d7f377..4535daaadf2 100644 --- a/doc/lispref/windows.texi +++ b/doc/lispref/windows.texi @@ -3152,6 +3152,26 @@ as a symbol @code{comint}. Then @code{display-buffer-alist} matches this category for all buffers displayed with the same category. This avoids the need to construct a complex regular expression that matches a buffer name. + +You can also match on the command now being executed. This is useful +when different commands display buffers with the same name, but you want +different command's buffers to be displayed differently. For example: + +@example +@group +(add-to-list 'display-buffer-alist + '((and "^\\*vc-diff\\*" + (not (this-command . vc-root-diff))) + nil + (post-command-select-window . nil))) +@end group +@end example + +This means that windows displaying VC diffs, such as those generated by +@kbd{C-x v =} (@code{vc-diff}, @pxref{Old Revisions,,, emacs, the Emacs +Manual}) are not left selected, except for windows displaying buffers +generated by @kbd{C-x v D} (@code{vc-root-diff}), which are left +selected. @end defopt @defopt display-buffer-base-action @@ -3914,14 +3934,6 @@ List, @code{buffer-match-p}}. Thus, if a Lisp program uses a particular @var{symbol} as the category when calling @code{display-buffer}, users can customize how these buffers will be displayed by including such an entry in @code{display-buffer-alist}. - -@vindex this-command@r{, a buffer display action alist entry} -@item this-command -The value is a symbol naming a command or a list of command symbols. It -represents the condition which is satisfied if any of those commands are -being executed. You can use this in the condition part of -@code{display-buffer-alist} entries to match buffers displayed during -the execution of particular commands. @end table By convention, the entries @code{window-height}, @code{window-width} diff --git a/lisp/subr.el b/lisp/subr.el index 975f28e0a17..79288921bed 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -7632,8 +7632,8 @@ CONDITION is either: * `this-command': the buffer matches if the command now being executed is `eq' to or a `memq' of the cons-cell's cdr. (This case is not useful when calling `buffer-match-p' directly, but - is needed to support the `this-command' buffer display action alist - entry. See `display-buffer'.) + is needed to support the `this-command' buffer display condition + entry. See Info node `(elisp)Choosing Window'.) * `not': the cadr is interpreted as a negation of a condition. * `and': the cdr is a list of recursive conditions, that all have to be met. diff --git a/lisp/window.el b/lisp/window.el index e6f0364c00c..e0e626e9500 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -8236,11 +8236,6 @@ Action alist entries are: `(category . symbol)' in its action argument, then you can match the displayed buffer by using the same category in the condition part of `display-buffer-alist' entries. - `this-command' -- A symbol naming the command now being executed, or a - list of command symbols, to mean the condition that any of those - commands are being executed. - You can use this in the condition part of `display-buffer-alist' - entries to match buffers displayed by particular commands. The entries `window-height', `window-width', `window-size' and `preserve-size' are applied only when the window used for commit 6b11687555cdd1d6896bad5eb09af217b28d6076 Author: Sean Whitton Date: Fri May 2 12:04:26 2025 +0800 New user option native-comp-async-on-battery-power * lisp/emacs-lisp/comp-run.el (native-comp-async-on-battery-power): New option. (battery-status-function): Declare. (native--compile-skip-on-battery-p): New function. (comp--run-async-workers): Call it. * etc/NEWS: Announce the new option. diff --git a/etc/NEWS b/etc/NEWS index 6fa979a2785..1e79d18e4ab 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -466,6 +466,11 @@ now add a note about this automatically. When enabled, display the 'help-at-pt-kbd-string' via ElDoc. This setting is an alternative to 'help-at-pt-display-when-idle'. +--- +** New user option 'native-comp-async-on-battery-power'. +Customize this to nil to disable starting new asynchronous native +compilations while AC power is not connected. + * Editing Changes in Emacs 31.1 diff --git a/lisp/emacs-lisp/comp-run.el b/lisp/emacs-lisp/comp-run.el index e0e00d88f83..8703b582e3c 100644 --- a/lisp/emacs-lisp/comp-run.el +++ b/lisp/emacs-lisp/comp-run.el @@ -54,6 +54,23 @@ or one if there's just one execution unit." :risky t :version "28.1") +;; If we could start compilations that were skipped if and when AC power +;; is subsequently reconnected, we could consider changing the default +;; to nil. --spwhitton +(defcustom native-comp-async-on-battery-power t + "Whether to start asynchronous native compilation while on battery power. +Customize this to nil to disable starting async compilations when AC +power is not connected. Async compilations that are already running +when AC power is disconnected are not affected. Compilations skipped +because AC power was disconnected are not started again if AC power is +subsequently reconnected; in most cases, those compilations will not be +tried again until after you next restart Emacs. + +Customizing this to nil has no effect unless `battery-status-function' +can correctly detect the absence of connected AC power on your platform." + :type 'boolean + :version "31.1") + (defcustom native-comp-async-report-warnings-errors t "Whether to report warnings and errors from asynchronous native compilation. @@ -158,6 +175,16 @@ LOAD and SELECTOR work as described in `native--compile-async'." (string-match-p re file)) native-comp-jit-compilation-deny-list)))) +(defvar battery-status-function) + +(defun native--compile-skip-on-battery-p () + "Should we skip JIT compilation because we're running on battery power?" + (and-let* (((not native-comp-async-on-battery-power)) + ((require 'battery)) + battery-status-function + (status (assq ?L (funcall battery-status-function))) + ((not (string= (cdr status) "on-line")))))) + (defvar comp-files-queue () "List of Emacs Lisp files to be compiled.") @@ -221,7 +248,8 @@ display a message." (cl-assert (null comp-no-spawn)) (if (or comp-files-queue (> (comp--async-runnings) 0)) - (unless (>= (comp--async-runnings) (comp--effective-async-max-jobs)) + (unless (or (>= (comp--async-runnings) (comp--effective-async-max-jobs)) + (native--compile-skip-on-battery-p)) (cl-loop for (source-file . load) = (pop comp-files-queue) while source-file commit dc3e79a80ee5b958ab0f6ffc6861fb5ac9418bab Author: Sean Whitton Date: Fri May 2 10:26:08 2025 +0800 ; * etc/DEBUG: Grammar fix. diff --git a/etc/DEBUG b/etc/DEBUG index f8186a429cd..450359dc323 100644 --- a/etc/DEBUG +++ b/etc/DEBUG @@ -541,7 +541,7 @@ related data structures in a terse and user-friendly format: 'pgrow' dumps all glyphs in current glyph_row 'row'. 'pcursor' dumps current output_cursor. -The above commands also exist in a version with an 'x' suffix which takes an +The above commands also exist in versions with an 'x' suffix which take an object of the relevant type as argument. For example, 'pgrowx' dumps all glyphs in its argument, which must be of type 'struct glyph_row'. commit 1b0fe9b387ee4021b86f6fb120f5f7ed05367a9d Author: Juri Linkov Date: Thu May 1 21:23:33 2025 +0300 Embed html, yaml and toml in markdown-ts-mode. * lisp/textmodes/markdown-ts-mode.el (markdown-ts--treesit-settings): Use @italic on the whole 'block_quote'. (markdown-ts-outline-predicate): New function. (markdown-ts--range-settings): Embed 'yaml' in host 'markdown', embed 'toml' in host 'markdown', embed 'html' in host 'markdown-inline', and use local 'html_block'. (markdown-ts-setup): Append html/yaml/toml to treesit-font-lock-settings and treesit-font-lock-feature-list when their grammars are ready. (markdown-ts-mode): Set comment-start/comment-end. Set treesit-outline-predicate to 'markdown-ts-outline-predicate'. * lisp/textmodes/toml-ts-mode.el (toml-ts-mode--font-lock-feature-list): New variable. (toml-ts-mode): Use it. * lisp/textmodes/yaml-ts-mode.el (yaml-ts-mode--font-lock-feature-list): New variable. (yaml-ts-mode): Use it. (yaml-ts-mode--outline-nodes): New variable. (yaml-ts-mode--outline-predicate): Use it. * lisp/treesit-x.el (liquid-generic-ts-mode): Use 'treesit-ready-p' on optional 'yaml' grammar. Merge 'yaml-ts-mode--font-lock-feature-list'. diff --git a/lisp/textmodes/markdown-ts-mode.el b/lisp/textmodes/markdown-ts-mode.el index a2ea434c017..8823d9f0314 100644 --- a/lisp/textmodes/markdown-ts-mode.el +++ b/lisp/textmodes/markdown-ts-mode.el @@ -178,7 +178,8 @@ maps to tree-sitter language `cpp'.") :language 'markdown :feature 'paragraph :override 'prepend - '((block_quote_marker) @markdown-ts-delimiter + '((block_quote) @italic + (block_quote_marker) @markdown-ts-delimiter (fenced_code_block_delimiter) @markdown-ts-delimiter (fenced_code_block (info_string (language) @markdown-ts-language-keyword)) @@ -218,6 +219,12 @@ maps to tree-sitter language `cpp'.") (thread-first (treesit-node-parent node) (treesit-node-text)) name))) +(defun markdown-ts-outline-predicate (node) + "Match a hierarchical section that has a heading." + (and (equal (treesit-node-type node) "section") + (when-let* ((child (treesit-node-child node 0))) + (equal (treesit-node-type child) "atx_heading")))) + ;;; Code blocks (defvar-local markdown-ts--configured-languages nil @@ -288,10 +295,26 @@ the same features enabled in MODE." :range-fn #'treesit-range-fn-exclude-children '((inline) @markdown-inline) + :embed 'yaml + :host 'markdown + :local t + '((minus_metadata) @yaml) + + :embed 'toml + :host 'markdown + :local t + '((plus_metadata) @toml) + :embed 'html :host 'markdown + :local t '((html_block) @html) + :embed 'html + :host 'markdown-inline + :local t + '((html_tag) @html) + :embed #'markdown-ts--convert-code-block-language :host 'markdown :local t @@ -304,19 +327,61 @@ the same features enabled in MODE." "Setup treesit for `markdown-ts-mode'." (setq-local treesit-font-lock-settings markdown-ts--treesit-settings) (setq-local treesit-range-settings (markdown-ts--range-settings)) + + (when (treesit-ready-p 'html t) + (require 'html-ts-mode) + (defvar html-ts-mode--font-lock-settings) + (defvar html-ts-mode--treesit-font-lock-feature-list) + (setq-local treesit-font-lock-settings + (append treesit-font-lock-settings + html-ts-mode--font-lock-settings)) + (setq-local treesit-font-lock-feature-list + (treesit-merge-font-lock-feature-list + treesit-font-lock-feature-list + html-ts-mode--treesit-font-lock-feature-list))) + + (when (treesit-ready-p 'yaml t) + (require 'yaml-ts-mode) + (defvar yaml-ts-mode--font-lock-settings) + (defvar yaml-ts-mode--font-lock-feature-list) + (setq-local treesit-font-lock-settings + (append treesit-font-lock-settings + yaml-ts-mode--font-lock-settings)) + (setq-local treesit-font-lock-feature-list + (treesit-merge-font-lock-feature-list + treesit-font-lock-feature-list + yaml-ts-mode--font-lock-feature-list))) + + (when (treesit-ready-p 'toml t) + (require 'toml-ts-mode) + (defvar toml-ts-mode--font-lock-settings) + (defvar toml-ts-mode--font-lock-feature-list) + (setq treesit-font-lock-settings + (append treesit-font-lock-settings + toml-ts-mode--font-lock-settings)) + (setq-local treesit-font-lock-feature-list + (treesit-merge-font-lock-feature-list + treesit-font-lock-feature-list + toml-ts-mode--font-lock-feature-list))) + (treesit-major-mode-setup)) ;;;###autoload (define-derived-mode markdown-ts-mode text-mode "Markdown" "Major mode for editing Markdown using tree-sitter grammar." + + (setq-local comment-start "") + (setq-local font-lock-defaults nil treesit-font-lock-feature-list '((delimiter heading) (paragraph) (paragraph-inline))) (setq-local treesit-simple-imenu-settings - `(("Headings" markdown-ts-imenu-node-p nil markdown-ts-imenu-name-function))) - (setq-local treesit-outline-predicate "section") + `(("Headings" ,#'markdown-ts-imenu-node-p + nil ,#'markdown-ts-imenu-name-function))) + (setq-local treesit-outline-predicate #'markdown-ts-outline-predicate) (when (and (treesit-ensure-installed 'markdown) (treesit-ensure-installed 'markdown-inline)) diff --git a/lisp/textmodes/toml-ts-mode.el b/lisp/textmodes/toml-ts-mode.el index b1414852dbb..854ff93fd6b 100644 --- a/lisp/textmodes/toml-ts-mode.el +++ b/lisp/textmodes/toml-ts-mode.el @@ -114,6 +114,13 @@ '((ERROR) @font-lock-warning-face)) "Font-lock settings for TOML.") +(defvar toml-ts-mode--font-lock-feature-list + '((comment) + (constant number pair string) + (escape-sequence) + (delimiter error)) + "Font-lock feature list for TOML.") + (defun toml-ts-mode--defun-name (node) "Return the defun name of NODE. Return nil if there is no name or if NODE is not a defun node." @@ -153,11 +160,7 @@ Return nil if there is no name or if NODE is not a defun node." ;; Font-lock. (setq-local treesit-font-lock-settings toml-ts-mode--font-lock-settings) - (setq-local treesit-font-lock-feature-list - '((comment) - (constant number pair string) - (escape-sequence) - (delimiter error))) + (setq-local treesit-font-lock-feature-list toml-ts-mode--font-lock-feature-list) ;; Imenu. (setq-local treesit-simple-imenu-settings diff --git a/lisp/textmodes/yaml-ts-mode.el b/lisp/textmodes/yaml-ts-mode.el index 3338044652b..6bd1bd946ae 100644 --- a/lisp/textmodes/yaml-ts-mode.el +++ b/lisp/textmodes/yaml-ts-mode.el @@ -126,6 +126,13 @@ '((ERROR) @font-lock-warning-face)) "Tree-sitter font-lock settings for `yaml-ts-mode'.") +(defvar yaml-ts-mode--font-lock-feature-list + '((comment) + (string type) + (constant escape-sequence number property) + (bracket delimiter error misc-punctuation)) + "Tree-sitter font-lock feature list for `yaml-ts-mode'.") + (defun yaml-ts-mode--fill-paragraph (&optional justify) "Fill paragraph. Behaves like `fill-paragraph', but respects block node @@ -158,11 +165,14 @@ Return nil if there is no name or if NODE is not a defun node." node "key") t))) +(defvar yaml-ts-mode--outline-nodes + (rx (or "block_mapping_pair" "block_sequence_item")) + "Node names for outline headings.") + (defun yaml-ts-mode--outline-predicate (node) "Limit outlines to top-level mappings." - (let ((regexp (rx (or "block_mapping_pair" "block_sequence_item")))) - (when (string-match-p regexp (treesit-node-type node)) - (not (treesit-node-top-level node regexp))))) + (when (string-match-p yaml-ts-mode--outline-nodes (treesit-node-type node)) + (not (treesit-node-top-level node yaml-ts-mode--outline-nodes)))) ;;;###autoload (define-derived-mode yaml-ts-mode text-mode "YAML" @@ -183,11 +193,7 @@ Return nil if there is no name or if NODE is not a defun node." ;; Font-lock. (setq-local treesit-font-lock-settings yaml-ts-mode--font-lock-settings) - (setq-local treesit-font-lock-feature-list - '((comment) - (string type) - (constant escape-sequence number property) - (bracket delimiter error misc-punctuation))) + (setq-local treesit-font-lock-feature-list yaml-ts-mode--font-lock-feature-list) (setq-local fill-paragraph-function #'yaml-ts-mode--fill-paragraph) diff --git a/lisp/treesit-x.el b/lisp/treesit-x.el index b0e3863c034..d13d6b1a35a 100644 --- a/lisp/treesit-x.el +++ b/lisp/treesit-x.el @@ -244,9 +244,10 @@ of `define-treesit-generic-mode'. "for_loop_statement") eos))))) - (when (treesit-ensure-installed 'yaml) - (defvar yaml-ts-mode--font-lock-settings) + (when (treesit-ready-p 'yaml t) (require 'yaml-ts-mode) + (defvar yaml-ts-mode--font-lock-settings) + (defvar yaml-ts-mode--font-lock-feature-list) (setq-local treesit-range-settings (append treesit-range-settings (treesit-range-rules @@ -256,7 +257,11 @@ of `define-treesit-generic-mode'. '(((front_matter) @cap))))) (setq-local treesit-font-lock-settings (append treesit-font-lock-settings - yaml-ts-mode--font-lock-settings)))) + yaml-ts-mode--font-lock-settings)) + (setq-local treesit-font-lock-feature-list + (treesit-merge-font-lock-feature-list + treesit-font-lock-feature-list + yaml-ts-mode--font-lock-feature-list)))) (defvar alpinejs-generic-ts-attr-regexp (rx bos (or "x-" ":" "@")) commit cd557d6f6480cae81c39a451b2a2aaee720ba985 Author: Juri Linkov Date: Thu May 1 21:03:34 2025 +0300 Improve elixir-ts--thing-settings. * lisp/progmodes/elixir-ts-mode.el (elixir-ts--thing-settings): Add extra grouping "keywords" to named sexp nodes. Add "," to anonymous sexp nodes. Use bos/eos. * lisp/progmodes/ruby-ts-mode.el (ruby-ts-mode): Use bos/eos for anonymous sexp nodes for better disambiguation. * test/lisp/progmodes/heex-ts-mode-tests.el (heex-ts-mode-test-indentation): Skip the test when 'elixir' is missing since 'heex-ts-mode' depends on the 'elixir' grammar. diff --git a/lisp/progmodes/elixir-ts-mode.el b/lisp/progmodes/elixir-ts-mode.el index 52744f194a2..7edf42c2489 100644 --- a/lisp/progmodes/elixir-ts-mode.el +++ b/lisp/progmodes/elixir-ts-mode.el @@ -590,10 +590,12 @@ (defvar elixir-ts--thing-settings `((sexp (not (or (and named - ,(rx bos (or "source" "comment") eos)) + ,(rx bos (or "source" "keywords" "comment") + eos)) (and anonymous - ,(rx (or "{" "}" "[" "]" "(" ")" - "do" "end")))))) + ,(rx bos (or "{" "}" "[" "]" "(" ")" "," + "do" "end") + eos))))) (list (or (and "\\`arguments\\'" ,#'elixir-ts--with-parens-0-p) (and "\\`unary_operator\\'" ,#'elixir-ts--with-parens-1-p) diff --git a/lisp/progmodes/ruby-ts-mode.el b/lisp/progmodes/ruby-ts-mode.el index 53fefe068b2..0ab9f30d70d 100644 --- a/lisp/progmodes/ruby-ts-mode.el +++ b/lisp/progmodes/ruby-ts-mode.el @@ -1179,11 +1179,12 @@ leading double colon is not added." "then") eos)) (and anonymous - ,(rx (or "do" "begin" - "if" "unless" - "def" "end" - "(" ")" "[" "]" - "{" "}" "|" "," ";")))))) + ,(rx bos (or "do" "begin" + "if" "unless" + "def" "end" + "(" ")" "[" "]" + "{" "}" "|" "," ";") + eos))))) (list ,(cons (rx bos (or diff --git a/test/lisp/progmodes/heex-ts-mode-tests.el b/test/lisp/progmodes/heex-ts-mode-tests.el index 01c7ed0fcf1..816d4dd7158 100644 --- a/test/lisp/progmodes/heex-ts-mode-tests.el +++ b/test/lisp/progmodes/heex-ts-mode-tests.el @@ -24,7 +24,7 @@ (require 'treesit) (ert-deftest heex-ts-mode-test-indentation () - (skip-unless (treesit-ready-p 'heex)) + (skip-unless (and (treesit-ready-p 'heex) (treesit-ready-p 'elixir))) (ert-test-erts-file (ert-resource-file "indent.erts"))) (provide 'heex-ts-mode-tests) commit 7d02ffe87b401048fe10958cdc463f3bf7676ffd Author: Eli Zaretskii Date: Thu May 1 21:02:39 2025 +0300 ; * lisp/international/mule.el (define-coding-system): Doc fix. diff --git a/lisp/international/mule.el b/lisp/international/mule.el index 8063ef68b7e..ddb2894daee 100644 --- a/lisp/international/mule.el +++ b/lisp/international/mule.el @@ -793,8 +793,9 @@ coding-system, to avoid infinite recursion. `:default-char' -VALUE must be a character. On encoding, a character not supported by -the coding system is replaced with VALUE. +VALUE must be a character. On encoding, characters that are not +supported by the coding system are each replaced with VALUE. If +not specified, the default is the space character #x20. `:for-unibyte' commit 5684a3808677fb701833c83325cd3bc8de475561 Author: Juri Linkov Date: Thu May 1 20:55:33 2025 +0300 Avoid adding duplicate items to 'treesit-language-source-alist'. * lisp/textmodes/mhtml-ts-mode.el: * lisp/progmodes/php-ts-mode.el: Use 'add-to-list' on items in language-source-alist that should check for duplicate items. * test/infra/Dockerfile.emba: Move multi-language mhtml-ts-mode and php-ts-mode to the end to give their dependent grammars a lower priority. * test/lisp/progmodes/js-tests.el (js-ts-mode-test-indentation): Skip the test when 'jsdoc' is missing since 'js-ts-mode' depends on the 'jsdoc' grammar. diff --git a/lisp/progmodes/php-ts-mode.el b/lisp/progmodes/php-ts-mode.el index 5e3f30d94c9..3f7a9ac2d8a 100644 --- a/lisp/progmodes/php-ts-mode.el +++ b/lisp/progmodes/php-ts-mode.el @@ -91,9 +91,8 @@ You can customize `treesit-language-source-alist' if you want to stick to a specific commit and/or use different parsers.") -(setq treesit-language-source-alist - (append treesit-language-source-alist - php-ts-mode--language-source-alist)) +(dolist (item php-ts-mode--language-source-alist) + (add-to-list 'treesit-language-source-alist item t)) (defun php-ts-mode-install-parsers () "Install all the required treesitter parsers. diff --git a/lisp/textmodes/mhtml-ts-mode.el b/lisp/textmodes/mhtml-ts-mode.el index e38db0779c1..ab5d631eed6 100644 --- a/lisp/textmodes/mhtml-ts-mode.el +++ b/lisp/textmodes/mhtml-ts-mode.el @@ -73,9 +73,8 @@ You can customize `treesit-language-source-alist' if you want to stick to a specific commit and/or use different parsers.") -(setq treesit-language-source-alist - (append treesit-language-source-alist - mhtml-ts-mode--language-source-alist)) +(dolist (item mhtml-ts-mode--language-source-alist) + (add-to-list 'treesit-language-source-alist item t)) (defun mhtml-ts-mode-install-parsers () "Install all the required treesitter parsers. diff --git a/test/infra/Dockerfile.emba b/test/infra/Dockerfile.emba index 1c1fbfc361a..c6aed2aeac9 100644 --- a/test/infra/Dockerfile.emba +++ b/test/infra/Dockerfile.emba @@ -131,10 +131,10 @@ RUN src/emacs -Q --batch \ (treesit-library-abi-version t) (treesit-library-abi-version))' \ --eval '(setq treesit-extra-load-path (list "/root/.emacs.d/tree-sitter"))' \ --eval '(dolist (feature (quote (c-ts-mode cmake-ts-mode csharp-mode \ - dockerfile-ts-mode elixir-ts-mode go-ts-mode heex-ts-mode java-ts-mode \ - js json-ts-mode lua-ts-mode php-ts-mode python ruby-ts-mode rust-ts-mode \ - sh-script typescript-ts-mode css-mode html-ts-mode markdown-ts-mode \ - mhtml-ts-mode toml-ts-mode yaml-ts-mode treesit-x))) (require feature))' \ + dockerfile-ts-mode elixir-ts-mode heex-ts-mode go-ts-mode java-ts-mode \ + js json-ts-mode lua-ts-mode python ruby-ts-mode rust-ts-mode sh-script \ + typescript-ts-mode css-mode html-ts-mode markdown-ts-mode toml-ts-mode \ + yaml-ts-mode mhtml-ts-mode php-ts-mode treesit-x))) (require feature))' \ --eval '(dolist (lang (mapcar (quote car) treesit-language-source-alist)) \ (treesit-install-language-grammar lang "/root/.emacs.d/tree-sitter"))' \ --eval '(message "treesit-language-source-alist\n%s" \ diff --git a/test/lisp/progmodes/js-tests.el b/test/lisp/progmodes/js-tests.el index 7d7aa7562a3..1a7edc5735e 100644 --- a/test/lisp/progmodes/js-tests.el +++ b/test/lisp/progmodes/js-tests.el @@ -291,7 +291,7 @@ function bar() { ;;;; Tree-sitter tests. (ert-deftest js-ts-mode-test-indentation () - (skip-unless (treesit-ready-p 'javascript)) + (skip-unless (and (treesit-ready-p 'javascript) (treesit-ready-p 'jsdoc))) (ert-test-erts-file (ert-resource-file "js-ts-indents.erts"))) (provide 'js-tests) commit 311ea96ccfae813f5cb55a5bc9a13be19c0a4127 Author: Stefan Monnier Date: Thu May 1 12:38:33 2025 -0400 register.el (register--jumpable-p): Fix bug#78186 While `register--get-method-type` worked fine for `register-val-insert` it always returns nil for `register-val-jump-to` because it presumed the method took a single argument. Make it work for multi-arg generic functions. * lisp/register.el (register--get-method-type): Add `other-args-type` arg. (register--jumpable-p): Use it. diff --git a/lisp/register.el b/lisp/register.el index a36d0e6648e..a7afc7e08e4 100644 --- a/lisp/register.el +++ b/lisp/register.el @@ -575,16 +575,17 @@ With a prefix argument, prompt for BUFFER as well." (add-hook 'kill-buffer-hook #'register-buffer-to-file-query nil t)) (set-register register (cons 'buffer buffer))) -(defun register--get-method-type (val genfun) +(defun register--get-method-type (val genfun &optional other-args-type) (let* ((type (cl-type-of val)) (types (cl--class-allparents (cl-find-class type)))) - (while (and types (not (cl-find-method genfun nil (list (car types))))) + (while (and types (not (cl-find-method genfun nil + (cons (car types) other-args-type)))) (setq types (cdr types))) (car types))) (defun register--jumpable-p (regval) "Return non-nil if `register-val-insert' is implemented for REGVAL." - (pcase (register--get-method-type regval 'register-val-jump-to) + (pcase (register--get-method-type regval 'register-val-jump-to '(t)) ('t nil) ('registerv (registerv-jump-func regval)) ('cons commit 8ddb8b0e45f150a5866c86af8ed2054b792761ff Author: Alan Mackenzie Date: Thu May 1 16:12:18 2025 +0000 Implement C23 features: Improve the handling of #error and #warning in C and C++ Modes. * lisp/progmodes/cc-engine.el (c-looking-at-c++-attribute) (c-enclosing-c++-attribute, c-forward-sws, c-backward-sws): Handle attributes in C as they have been handled in C++. (c-forward-align-clause-throw-if-invalid): New macro. (c-forward-type): Handle alignas, alignof, and _BitInt, putting a catch block around most of the function to catch invalid uses of these new keywords. (c-in-id-arglist): New function. (c-forward-decl-or-cast-1): Recognize a "maybe" type identifier as a type in arglists when there is no parameter identifier associated with it. * lisp/progmodes/cc-fonts.el (c-font-lock-cpp-messages): New function. (c-cpp-matchers): Move the handling of "invalid" comment delimiters outside of the block handling CPP directives. Remove the inline handling of #error and #warning, using the new function c-font-lock-cpp-messages instead. (c-get-fontification-context): Handle alignof, alignas, _BitInt. (c-font-lock-declarations): Adapt fontification of K&R parameters to the C23 nameless parameter scheme. * lisp/progmodes/cc-langs.el (c-has-quoted-numbers) (c-stmt-boundary-skip-chars) (c-recognize-post-brace-list-type-p, c-modifier-kwds) (c-constant-kwds): Handle C the same as the existing C++ handling. (c-cpp-message-directives-re, noncontinued-line-end) (c-cpp-messages-re, c-cpp-message-match-no): New c-lang-consts/vars. (c-cpp-include-directives): New directive embed. (c-cpp-expr-directives): New directives elifdef, elifndef. (c-primitive-type-kwds): New types, _Decimal*, bool, char*_t, nullptr_t. (c-typeof-kwds): New keyword typeof_unqual. (c-type-with-paren-kwds, c-type-with-paren-key): New c-lang-const/vars. (c-type-modifier-with-parens-kwds) (c-type-modifier-with-parens-key, c-type-internal-paren-kwds) (c-type-internal-paren-key): New c-lang-const/vars. (c-type-modifier-prefix-kwds, c-type-start-kwds): Amend with the above new c-lang-consts. (c-no-type-with-equals-kwds, c-no-type-with-equals-key): New c-lang-const/vars. (c-modifier-kwds): Add constexpr, auto, and thread_local to the C value. (c-paren-nontype-kwds): Add static_assert to the C value. (c-constant-kwds): Add nullptr to the C value. (c-regular-keywords-regexp): Include c-type-with-paren-kwds. (c-recognize-nameless-type-decls): New c-lang-const/var. * lisp/progmodes/cc-mode.el (c-leave-cc-mode-mode): Also clear c-digit-separator properties. diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index 11652c5223d..48c11fab861 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -84,8 +84,9 @@ ;; 'syntax-table ;; Used to modify the syntax of some characters. It is used to ;; mark the "<" and ">" of angle bracket parens with paren syntax, to -;; "hide" obtrusive characters in preprocessor lines, and to mark C++ -;; raw strings to enable their fontification. +;; "hide" obtrusive characters in preprocessor lines, to mark C++ raw +;; strings to enable their fontification, and to mark syntactically +;; wrong single quotes, again for their fontification. ;; ;; This property is used on single characters and is therefore ;; always treated as front and rear nonsticky (or start and end open @@ -142,9 +143,14 @@ ;; Put on the brace which introduces a brace list and on the commas ;; which separate the elements within it. ;; -;; 'c-typedef This property is applied to the first character of a -;; "typedef" keyword. It's value is a list of the identifiers that -;; the "typedef" declares as types. +;; 'c-digit-separator +;; Used for digit separators in numeric literals, where it gets set +;; with the value t. +;; +;; 'c-typedef +;; This property is applied to the first character of a "typedef" +;; keyword. It's value is a list of the identifiers that the "typedef" +;; declares as types. ;; ;; 'c-awk-NL-prop ;; Used in AWK mode to mark the various kinds of newlines. See @@ -713,11 +719,11 @@ comment at the start of cc-engine.el for more info." (defmacro c-looking-at-c++-attribute () - ;; If we're in C++ Mode, and point is at the [[ introducing an attribute, - ;; return the position of the end of the attribute, otherwise return nil. - ;; The match data are NOT preserved over this macro. + ;; If we're in C or C++ Mode, and point is at the [[ introducing an + ;; attribute, return the position of the end of the attribute, otherwise + ;; return nil. The match data are NOT preserved over this macro. `(and - (c-major-mode-is 'c++-mode) + (c-major-mode-is '(c-mode c++-mode)) (looking-at "\\[\\[") (save-excursion (and @@ -1511,7 +1517,7 @@ comment at the start of cc-engine.el for more info." ;; In a string/comment? ((setq lit-range (c-literal-limits from)) (goto-char (cdr lit-range))) - ;; Skip over a C++ attribute? + ;; Skip over a C or C++ attribute? ((eq (char-after) ?\[) (if (setq attr-end (c-looking-at-c++-attribute)) (goto-char attr-end) @@ -1946,11 +1952,11 @@ comment at the start of cc-engine.el for more info." (defvar c-sws-lit-limits nil) (defun c-enclosing-c++-attribute () - ;; If we're in C++ Mode, and point is within a correctly balanced [[ ... ]] - ;; attribute structure, return a cons of its starting and ending positions. - ;; Otherwise, return nil. + ;; If we're in C or C++ Mode, and point is within a correctly balanced [[ + ;; ... ]] attribute structure, return a cons of its starting and ending + ;; positions. Otherwise, return nil. (and - (c-major-mode-is 'c++-mode) + (c-major-mode-is '(c-mode c++-mode)) (save-excursion (let ((lim (max (- (point) 200) (point-min))) cand) @@ -2139,7 +2145,7 @@ comment at the start of cc-engine.el for more info." (when (or (looking-at c-syntactic-ws-start) (and c-opt-cpp-prefix (looking-at c-noise-macro-name-re)) - (and (c-major-mode-is 'c++-mode) + (and (c-major-mode-is '(c-mode c++-mode)) (looking-at "\\[\\[")) (looking-at c-doc-line-join-re)) @@ -2397,7 +2403,7 @@ comment at the start of cc-engine.el for more info." (re-search-backward doc-line-join-here (c-point 'bopl) t)) (and - (c-major-mode-is 'c++-mode) + (c-major-mode-is '(c-mode c++-mode)) (eq (char-before) ?\]) (eq (char-before (1- (point))) ?\]) (save-excursion @@ -2570,7 +2576,7 @@ comment at the start of cc-engine.el for more info." (goto-char next-rung-pos) t) - ((and (c-major-mode-is 'c++-mode) + ((and (c-major-mode-is '(c-mode c++-mode)) (eq (char-before) ?\]) (eq (char-before (1- (point))) ?\]) (save-excursion @@ -8637,15 +8643,35 @@ multi-line strings (but not C++, for example)." (goto-char here) nil))) +(defmacro c-forward-align-clause-throw-if-invalid (throw-tag) + ;; If we are at a `c-type-modifier-with-parens-key' keyword, try to go + ;; forward over the clause it introduces, and return t. If the clause is + ;; ill formed (or absent), move point to START, set RES to nil, and throw + ;; nil to the tag THROW-TAG. Otherwise, return nil. The match data are + ;; preserved. + ;; This macro is intended only for use withing `c-forward-type'. + `(if (save-match-data + (looking-at c-type-modifier-with-parens-key)) + (if (and (zerop (c-forward-token-2)) + (eq (char-after) ?\() + (c-safe (c-go-list-forward)) + (eq (char-before) ?\)) + (setq pos (point)) + (progn (c-forward-syntactic-ws) t)) + t + (setq res nil) + (goto-char start) + (throw ,throw-tag nil)) + nil)) + (defun c-forward-keyword-clause (match &optional stop-at-end) - ;; Submatch MATCH in the current match data is assumed to surround a - ;; token. If it's a keyword, move over it and any immediately - ;; following clauses associated with it, stopping either at the start - ;; of the next token, or (when STOP-AT-END is non-nil) at the end - ;; of the clause. t is returned in that case, otherwise the point - ;; stays and nil is returned. The kind of clauses that are - ;; recognized are those specified by `c-type-list-kwds', - ;; `c-ref-list-kwds', `c-colon-type-list-kwds', + ;; Submatch MATCH in the current match data is assumed to surround a token. + ;; If it's a keyword, move over it and, if present, over any immediately + ;; following clauses associated with it, stopping either at the start of the + ;; next token, or (when STOP-AT-END is non-nil) at the end of the clause. t + ;; is returned in that case, otherwise the point stays and nil is returned. + ;; The kind of clauses that are recognized are those specified by + ;; `c-type-list-kwds', `c-ref-list-kwds', `c-colon-type-list-kwds', ;; `c-paren-nontype-kwds', `c-paren-type-kwds', `c-<>-type-kwds', ;; `c-<>-arglist-kwds', and `c-protection-kwds'. ;; @@ -9332,7 +9358,7 @@ multi-line strings (but not C++, for example)." ;; o - 'found if it's a type that matches one in `c-found-types'; ;; o - 'maybe if it's an identifier that might be a type; ;; o - 'decltype if it's a decltype(variable) declaration; - or - ;; o - 'no-id if "auto" precluded parsing a type identifier (C++) + ;; o - 'no-id if "auto" precluded parsing a type identifier (C or C++) ;; or the type int was implicit (C). ;; o - nil if it can't be a type (the point isn't moved then). ;; @@ -9353,327 +9379,370 @@ multi-line strings (but not C++, for example)." (c-forward-syntactic-ws)) (let ((start (point)) pos res name-res id-start id-end id-range - post-prefix-pos prefix-end-pos) + post-prefix-pos prefix-end-pos equals-makes-type) ;; Skip leading type modifiers. If any are found we know it's a ;; prefix of a type. - (when c-maybe-typeless-specifier-re - (while (looking-at c-maybe-typeless-specifier-re) - (save-match-data - (when (looking-at c-no-type-key) - (setq res 'no-id))) + (catch 'type-error + (when c-maybe-typeless-specifier-re + (while (looking-at c-maybe-typeless-specifier-re) + (save-match-data + (when (looking-at c-no-type-key) + (setq res 'no-id)) + (when (looking-at c-no-type-with-equals-key) + (setq equals-makes-type t))) + (if (c-forward-align-clause-throw-if-invalid 'type-error) + (setq prefix-end-pos pos) + (goto-char (match-end 1)) + (setq prefix-end-pos (point)) + (setq pos (point)) + (c-forward-syntactic-ws) + (or (eq res 'no-id) + (setq res 'prefix))))) + (setq post-prefix-pos (point)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + (cond + ((looking-at c-typeof-key) ; e.g. C++'s "decltype". (goto-char (match-end 1)) - (setq prefix-end-pos (point)) (setq pos (point)) (c-forward-syntactic-ws) - (or (eq res 'no-id) - (setq res 'prefix)))) - (setq post-prefix-pos (point)) + (setq res (and (eq (char-after) ?\() + (c-safe (c-forward-sexp)) + 'decltype)) + (if res + (progn + (setq pos (point)) + (c-forward-syntactic-ws)) + (goto-char start))) - (cond - ((looking-at c-typeof-key) ; e.g. C++'s "decltype". - (goto-char (match-end 1)) - (setq pos (point)) - (c-forward-syntactic-ws) - (setq res (and (eq (char-after) ?\() - (c-safe (c-forward-sexp)) - 'decltype)) - (if res - (progn - (setq pos (point)) - (c-forward-syntactic-ws)) - (goto-char start))) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - ((looking-at c-type-prefix-key) ; e.g. "struct", "class", but NOT - ; "typedef". - (goto-char (match-end 1)) - (setq pos (point)) - (c-forward-syntactic-ws) + ((looking-at c-type-prefix-key) ; e.g. "struct", "class", but NOT + ; "typedef". + (goto-char (match-end 1)) + (setq pos (point)) + (c-forward-syntactic-ws) - (while (cond - ((looking-at c-decl-hangon-key) - (c-forward-keyword-clause 1 t) - (setq pos (point)) - (c-forward-syntactic-ws)) - ((looking-at c-pack-key) - (goto-char (match-end 1)) - (setq pos (point)) - (c-forward-syntactic-ws)) - ((and c-opt-cpp-prefix - (looking-at c-noise-macro-with-parens-name-re)) - (c-forward-noise-clause t) - (setq pos (point)) - (c-forward-syntactic-ws)))) + (while (cond + ((looking-at c-decl-hangon-key) + (c-forward-keyword-clause 1 t) + (setq pos (point)) + (c-forward-syntactic-ws)) + ((looking-at c-pack-key) + (goto-char (match-end 1)) + (setq pos (point)) + (c-forward-syntactic-ws)) + ((and c-opt-cpp-prefix + (looking-at c-noise-macro-with-parens-name-re)) + (c-forward-noise-clause t) + (setq pos (point)) + (c-forward-syntactic-ws)))) - (setq id-start (point)) - (setq name-res (c-forward-name t)) - (setq pos (point)) - (setq res (not (null name-res))) - (when (eq name-res t) - ;; With some keywords the name can be used without the prefix, so we - ;; add the name to `c-found-types' when this is the case. - (when (save-excursion - (goto-char post-prefix-pos) - (looking-at c-self-contained-typename-key)) - (c-add-type id-start - (point))) - (when (and c-record-type-identifiers - c-last-identifier-range) - (c-record-type-id c-last-identifier-range))) - (c-forward-syntactic-ws) - (when (and brace-block-too - (memq res '(t nil)) - (eq (char-after) ?\{) - (save-excursion - (c-safe - (progn (c-forward-sexp) - (setq pos (point)))))) - (goto-char pos) + (setq id-start (point)) + (setq name-res (c-forward-name t)) + (setq pos (point)) + (setq res (not (null name-res))) + (when (eq name-res t) + ;; With some keywords the name can be used without the prefix, so we + ;; add the name to `c-found-types' when this is the case. + (when (save-excursion + (goto-char post-prefix-pos) + (looking-at c-self-contained-typename-key)) + (c-add-type id-start + (point))) + (when (and c-record-type-identifiers + c-last-identifier-range) + (c-record-type-id c-last-identifier-range))) (c-forward-syntactic-ws) - (setq res t)) - (unless res (goto-char start))) ; invalid syntax + (when (and brace-block-too + (memq res '(t nil)) + (eq (char-after) ?\{) + (save-excursion + (c-safe + (progn (c-forward-sexp) + (setq pos (point)))))) + (goto-char pos) + (c-forward-syntactic-ws) + (setq res t)) + (unless res (goto-char start))) ; invalid syntax - ((and - (not (eq res 'no-id)) - (progn - (setq pos nil) - (while (and c-opt-cpp-prefix - (looking-at c-noise-macro-with-parens-name-re)) - (c-forward-noise-clause)) - (if (looking-at c-identifier-start) - (save-excursion - (setq id-start (point) - name-res (c-forward-name t)) - (when name-res - (setq id-end (point) - id-range c-last-identifier-range)))) - (and (cond ((looking-at c-primitive-type-key) - (setq res t)) - ((c-with-syntax-table c-identifier-syntax-table - (looking-at c-known-type-key)) - (setq res 'known))) - (or (not id-end) - (>= (save-excursion - (save-match-data - (goto-char (match-end 1)) - (setq pos (point)) - (c-forward-syntactic-ws) - pos)) - id-end) - (setq res nil))))) - ;; Looking at a primitive or known type identifier. We've - ;; checked for a name first so that we don't go here if the - ;; known type match only is a prefix of another name. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - (setq id-end (match-end 1)) + ((looking-at c-type-with-paren-key) ; C's "_BitInt". + (goto-char (match-end 1)) + (c-forward-syntactic-ws) + (if (and (eq (char-after) ?\() + (c-go-list-forward nil (min (+ (point) 500) (point-max))) + (eq (char-before) ?\))) + (progn + (setq pos (point)) + (c-forward-syntactic-ws) + (setq res t)) + (goto-char start) + (setq res nil))) ; invalid syntax. - (when (and c-record-type-identifiers - (or c-promote-possible-types (eq res t))) - (c-record-type-id (cons (match-beginning 1) (match-end 1)))) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - (cond - ((and c-opt-type-component-key + ((and + (not (eq res 'no-id)) + (not (and equals-makes-type + (save-excursion + (and (zerop (c-forward-token-2)) + (looking-at "=\\([^=]\\|$\\)"))) + (setq res 'no-id))) + (progn + (setq pos nil) + (while (and c-opt-cpp-prefix + (looking-at c-noise-macro-with-parens-name-re)) + (c-forward-noise-clause)) + (if (looking-at c-identifier-start) + (save-excursion + (setq id-start (point) + name-res (c-forward-name t)) + (when name-res + (setq id-end (point) + id-range c-last-identifier-range)))) + (and (cond ((looking-at c-primitive-type-key) + (setq res t)) + ((c-with-syntax-table c-identifier-syntax-table + (looking-at c-known-type-key)) + (setq res 'known))) + (or (not id-end) + (>= (save-excursion + (save-match-data + (goto-char (match-end 1)) + (setq pos (point)) + (c-forward-syntactic-ws) + pos)) + id-end) + (setq res nil))))) + ;; Looking at a primitive or known type identifier. We've + ;; checked for a name first so that we don't go here if the + ;; known type match only is a prefix of another name. + + (setq id-end (match-end 1)) + + (when (and c-record-type-identifiers + (or c-promote-possible-types (eq res t))) + (c-record-type-id (cons (match-beginning 1) (match-end 1)))) + + (cond + ((and c-opt-type-component-key (save-match-data (looking-at c-opt-type-component-key))) ;; There might be more keywords for the type. - (let (safe-pos) - (c-forward-keyword-clause 1 t) + (let (safe-pos) + (c-forward-keyword-clause 1 t) + (while (progn + (setq safe-pos (point)) + (c-forward-syntactic-ws) + (looking-at c-opt-type-component-key)) + (when (and c-record-type-identifiers + (looking-at c-primitive-type-key)) + (c-record-type-id (cons (match-beginning 1) + (match-end 1)))) + (or (c-forward-align-clause-throw-if-invalid 'type-error) + (c-forward-keyword-clause 1 t))) + (if (looking-at c-primitive-type-key) + (progn + (when c-record-type-identifiers + (c-record-type-id (cons (match-beginning 1) + (match-end 1)))) + (c-forward-keyword-clause 1 t) + (setq res t) + (while (progn + (setq safe-pos (point)) + (c-forward-syntactic-ws) + (looking-at c-opt-type-component-key)) + (c-forward-keyword-clause 1 t))) + (goto-char safe-pos) + (setq res 'prefix)) + (setq pos (point)))) + ((save-match-data (c-forward-keyword-clause 1 t)) (while (progn - (setq safe-pos (point)) + (setq pos (point)) (c-forward-syntactic-ws) - (looking-at c-opt-type-component-key)) - (when (and c-record-type-identifiers - (looking-at c-primitive-type-key)) - (c-record-type-id (cons (match-beginning 1) - (match-end 1)))) - (c-forward-keyword-clause 1 t)) - (if (looking-at c-primitive-type-key) - (progn - (when c-record-type-identifiers - (c-record-type-id (cons (match-beginning 1) - (match-end 1)))) - (c-forward-keyword-clause 1 t) - (setq res t) - (while (progn - (setq safe-pos (point)) - (c-forward-syntactic-ws) - (looking-at c-opt-type-component-key)) - (c-forward-keyword-clause 1 t))) - (goto-char safe-pos) - (setq res 'prefix)) - (setq pos (point)))) - ((save-match-data (c-forward-keyword-clause 1 t)) - (while (progn - (setq pos (point)) - (c-forward-syntactic-ws) - (and c-opt-type-component-key - (looking-at c-opt-type-component-key))) - (c-forward-keyword-clause 1 t))) - (pos (goto-char pos)) - (t (goto-char (match-end 1)) - (setq pos (point)))) - (c-forward-syntactic-ws)) - - ((and (eq name-res t) - (eq res 'prefix) - (c-major-mode-is 'c-mode) - (save-excursion - (goto-char id-end) - (setq pos (point)) - (c-forward-syntactic-ws) - (and (not (looking-at c-symbol-start)) - (or - (not (looking-at c-type-decl-prefix-key)) - (and (eq (char-after) ?\() - (not (save-excursion - (c-forward-declarator)))))))) - ;; A C specifier followed by an implicit int, e.g. - ;; "register count;" - (goto-char prefix-end-pos) - (setq pos (point)) - (unless stop-at-end + (and c-opt-type-component-key + (looking-at c-opt-type-component-key))) + (or (c-forward-align-clause-throw-if-invalid 'type-error) + (c-forward-keyword-clause 1 t)))) + (pos (goto-char pos)) + (t (goto-char (match-end 1)) + (setq pos (point)))) (c-forward-syntactic-ws)) - (setq res 'no-id)) - (name-res - (cond ((eq name-res t) - ;; A normal identifier. - (goto-char id-end) - (setq pos (point)) - (c-forward-syntactic-ws) - (if (or res c-promote-possible-types) - (progn - (when (not (eq c-promote-possible-types 'just-one)) - (c-add-type id-start id-end)) - (when (and c-record-type-identifiers id-range) - (c-record-type-id id-range)) - (unless res - (setq res 'found)) - (when (eq res 'prefix) - (setq res t))) - (setq res (if (c-check-qualified-type id-start) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + ((and (eq name-res t) + (eq res 'prefix) + (c-major-mode-is 'c-mode) + (save-excursion + (goto-char id-end) + (setq pos (point)) + (c-forward-syntactic-ws) + (and (not (looking-at c-symbol-start)) + (or + (not (looking-at c-type-decl-prefix-key)) + (and (eq (char-after) ?\() + (not (save-excursion + (c-forward-declarator)))))))) + ;; A C specifier followed by an implicit int, e.g. + ;; "register count;" + (goto-char prefix-end-pos) + (setq pos (point)) + (unless stop-at-end + (c-forward-syntactic-ws)) + (setq res 'no-id)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + (name-res + (cond ((eq name-res t) + ;; A normal identifier. + (goto-char id-end) + (setq pos (point)) + (c-forward-syntactic-ws) + (if (or res c-promote-possible-types) + (progn + (when (not (eq c-promote-possible-types 'just-one)) + (c-add-type id-start id-end)) + (when (and c-record-type-identifiers id-range) + (c-record-type-id id-range)) + (unless res + (setq res 'found)) + (when (eq res 'prefix) + (setq res t))) + (setq res (if (c-check-qualified-type id-start) + ;; It's an identifier that has been used as + ;; a type somewhere else. + 'found + ;; It's an identifier that might be a type. + 'maybe)))) + ((eq name-res 'template) + ;; A template is sometimes a type. + (goto-char id-end) + (setq pos (point)) + (c-forward-syntactic-ws) + (setq res + (if (eq (char-after) ?\() + (if (c-check-qualified-type id-start) ;; It's an identifier that has been used as ;; a type somewhere else. 'found ;; It's an identifier that might be a type. - 'maybe)))) - ((eq name-res 'template) - ;; A template is sometimes a type. - (goto-char id-end) - (setq pos (point)) - (c-forward-syntactic-ws) - (setq res - (if (eq (char-after) ?\() - (if (c-check-qualified-type id-start) - ;; It's an identifier that has been used as - ;; a type somewhere else. - 'found - ;; It's an identifier that might be a type. - 'maybe) - t))) - (t - ;; Otherwise it's an operator identifier, which is not a type. - (goto-char start) - (setq res nil)))) - - ((eq res 'prefix) - ;; Deal with "extern "C" foo_t my_foo;" - (setq res nil))) - - (when (not (memq res '(nil no-id))) - ;; Skip trailing type modifiers. If any are found we know it's - ;; a type. - (when c-opt-type-modifier-key - (while (looking-at c-opt-type-modifier-key) ; e.g. "const", "volatile" + 'maybe) + t))) + (t + ;; Otherwise it's an operator identifier, which is not a type. + (goto-char start) + (setq res nil)))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + ((eq res 'prefix) + ;; Deal with "extern "C" foo_t my_foo;" + (setq res nil))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + (when (not (memq res '(nil no-id))) + ;; Skip trailing type modifiers. If any are found we know it's + ;; a type. + (when c-opt-type-modifier-key + (while (looking-at c-opt-type-modifier-key) ; e.g. "const", "volatile" + (unless (c-forward-align-clause-throw-if-invalid 'type-error) + (goto-char (match-end 1)) + (setq pos (point)) + (c-forward-syntactic-ws) + (setq res t)))) + + ;; Step over any type suffix operator. Do not let the existence + ;; of these alter the classification of the found type, since + ;; these operators typically are allowed in normal expressions + ;; too. + (when c-opt-type-suffix-key ; e.g. "..." + (while (looking-at c-opt-type-suffix-key) + (goto-char (match-end 1)) + (setq pos (point)) + (c-forward-syntactic-ws))) + + ;; Skip any "WS" identifiers (e.g. "final" or "override" in C++) + (while (looking-at c-type-decl-suffix-ws-ids-key) (goto-char (match-end 1)) (setq pos (point)) (c-forward-syntactic-ws) - (setq res t))) - - ;; Step over any type suffix operator. Do not let the existence - ;; of these alter the classification of the found type, since - ;; these operators typically are allowed in normal expressions - ;; too. - (when c-opt-type-suffix-key ; e.g. "..." - (while (looking-at c-opt-type-suffix-key) - (goto-char (match-end 1)) + (setq res t)) + + (when c-opt-type-concat-key ; Only/mainly for pike. + ;; Look for a trailing operator that concatenates the type + ;; with a following one, and if so step past that one through + ;; a recursive call. Note that we don't record concatenated + ;; types in `c-found-types' - it's the component types that + ;; are recorded when appropriate. (setq pos (point)) - (c-forward-syntactic-ws))) - - ;; Skip any "WS" identifiers (e.g. "final" or "override" in C++) - (while (looking-at c-type-decl-suffix-ws-ids-key) - (goto-char (match-end 1)) - (setq pos (point)) - (c-forward-syntactic-ws) - (setq res t)) - - (when c-opt-type-concat-key ; Only/mainly for pike. - ;; Look for a trailing operator that concatenates the type - ;; with a following one, and if so step past that one through - ;; a recursive call. Note that we don't record concatenated - ;; types in `c-found-types' - it's the component types that - ;; are recorded when appropriate. - (setq pos (point)) - (let* ((c-promote-possible-types (or (memq res '(t known)) - c-promote-possible-types)) - ;; If we can't promote then set `c-record-found-types' so that - ;; we can merge in the types from the second part afterwards if - ;; it turns out to be a known type there. - (c-record-found-types (and c-record-type-identifiers - (not c-promote-possible-types))) - subres) - (if (and (looking-at c-opt-type-concat-key) + (let* ((c-promote-possible-types (or (memq res '(t known)) + c-promote-possible-types)) + ;; If we can't promote then set `c-record-found-types' so that + ;; we can merge in the types from the second part afterwards if + ;; it turns out to be a known type there. + (c-record-found-types (and c-record-type-identifiers + (not c-promote-possible-types))) + subres) + (if (and (looking-at c-opt-type-concat-key) - (progn - (goto-char (match-end 1)) - (c-forward-syntactic-ws) - (setq subres (c-forward-type nil t)) - (setq pos (point)))) - - (progn - ;; If either operand certainly is a type then both are, but we - ;; don't let the existence of the operator itself promote two - ;; uncertain types to a certain one. - (cond ((eq res t)) - ((eq subres t) - (unless (eq name-res 'template) - (c-add-type id-start id-end)) - (when (and c-record-type-identifiers id-range) - (c-record-type-id id-range)) - (setq res t)) - ((eq res 'known)) - ((eq subres 'known) - (setq res 'known)) - ((eq res 'found)) - ((eq subres 'found) - (setq res 'found)) - (t - (setq res 'maybe))) - - (when (and (eq res t) - (consp c-record-found-types)) - ;; Cause the confirmed types to get fontified. - (let ((cur c-record-found-types)) - (while (consp (car-safe cur)) - (c-fontify-new-found-type - (buffer-substring-no-properties (caar cur) (cdar cur))) - (setq cur (cdr cur)))) - ;; Merge in the ranges of any types found by the second - ;; `c-forward-type'. - (setq c-record-type-identifiers - ;; `nconc' doesn't mind that the tail of - ;; `c-record-found-types' is t. - (nconc c-record-found-types - c-record-type-identifiers))))))) + (progn + (goto-char (match-end 1)) + (c-forward-syntactic-ws) + (setq subres (c-forward-type nil t)) + (setq pos (point)))) - (goto-char pos) - (unless stop-at-end - (c-forward-syntactic-ws)) + (progn + ;; If either operand certainly is a type then both are, but we + ;; don't let the existence of the operator itself promote two + ;; uncertain types to a certain one. + (cond ((eq res t)) + ((eq subres t) + (unless (eq name-res 'template) + (c-add-type id-start id-end)) + (when (and c-record-type-identifiers id-range) + (c-record-type-id id-range)) + (setq res t)) + ((eq res 'known)) + ((eq subres 'known) + (setq res 'known)) + ((eq res 'found)) + ((eq subres 'found) + (setq res 'found)) + (t + (setq res 'maybe))) + + (when (and (eq res t) + (consp c-record-found-types)) + ;; Cause the confirmed types to get fontified. + (let ((cur c-record-found-types)) + (while (consp (car-safe cur)) + (c-fontify-new-found-type + (buffer-substring-no-properties (caar cur) (cdar cur))) + (setq cur (cdr cur)))) + ;; Merge in the ranges of any types found by the second + ;; `c-forward-type'. + (setq c-record-type-identifiers + ;; `nconc' doesn't mind that the tail of + ;; `c-record-found-types' is t. + (nconc c-record-found-types + c-record-type-identifiers))))))) - (when (and c-record-found-types (memq res '(known found)) id-range) - (setq c-record-found-types - (cons id-range c-record-found-types)))) + (goto-char pos) + (unless stop-at-end + (c-forward-syntactic-ws)) + (when (and c-record-found-types (memq res '(known found)) id-range) + (setq c-record-found-types + (cons id-range c-record-found-types))))) ;;(message "c-forward-type %s -> %s: %s" start (point) res) res)) @@ -10009,6 +10078,32 @@ point unchanged and return nil." (and (zerop (c-forward-token-2)) ; over "requires". (c-forward-constraint-clause limit stop-at-end))) +(defun c-in-id-arglist () + ;; If point is inside a paren delimited non-empty arglist, all of whose + ;; arguments are identifiers, return a cons of the start and (after) the end + ;; of the arglist. Otherwise return nil. + (let* ((paren-state (c-parse-state)) + (enclosing-paren-pos (c-most-enclosing-brace paren-state))) + (save-excursion + (and + enclosing-paren-pos + (eq (char-after enclosing-paren-pos) ?\() + (progn + (goto-char (1+ enclosing-paren-pos)) + (c-forward-syntactic-ws) + (catch 'in-arglist + (while + (and + (c-on-identifier) + (zerop (c-forward-token-2)) + (progn + (when (eq (char-after) ?\)) + (throw 'in-arglist + (cons enclosing-paren-pos (1+ (point))))) + (eq (char-after) ?\,)) + (zerop (c-forward-token-2)))) + nil)))))) + (defun c-forward-decl-arglist (not-top id-in-parens &optional limit) ;; Point is at an open parenthesis, assumed to be the arglist of a function ;; declaration. Move over this arglist and following syntactic whitespace, @@ -11287,10 +11382,13 @@ This function might do hidden buffer changes." ;; style declarations and parenthesis style initializers ;; aren't allowed then the single identifier must be a ;; type, else we require that it's known or found - ;; (primitive types are handled above). + ;; (primitive types are handled above). We also allow + ;; 'maybe types when nameless types can be in arglists. (or (and (not c-recognize-knr-p) (not c-recognize-paren-inits)) - (memq at-type '(known found)))) + (memq at-type '(known found)) + (and c-recognize-nameless-type-decls + (eq at-type 'maybe)))) ((eq context '<>) ;; Inside a template arglist. Accept known and found ;; types; other identifiers could just as well be diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el index ac5a32f704f..eca249ee2f6 100644 --- a/lisp/progmodes/cc-fonts.el +++ b/lisp/progmodes/cc-fonts.el @@ -521,6 +521,29 @@ (c-put-font-lock-face (car elem) (cdr elem) c-reference-face-name)))) +(defun c-font-lock-cpp-messages (limit) + ;; Font lock #error and #warning messages between point and LIMIT. + ;; Always return nil to prevent a further call to this function. + ;; The position of point at the end of this function is random. + (while + (and (< (point) limit) + (re-search-forward c-cpp-messages-re limit t)) + (let ((beg (match-beginning c-cpp-message-match-no)) + (end (match-end c-cpp-message-match-no))) + (c-put-font-lock-string-face beg end) + ;; We replace '(1) (punctuation) syntax-table text properties on ' by + ;; '(3) (symbol), so that these characters won't later get the warning + ;; face. + (goto-char beg) + (while (and + (< (point) end) + (c-search-forward-char-property-with-value-on-char + 'syntax-table '(1) ?\' end)) + (c-put-char-property ;; -trim-caches + (1- (point)) 'syntax-table '(3))) + (goto-char end))) + nil) + (c-lang-defconst c-cpp-matchers "Font lock matchers for preprocessor directives and purely lexical stuff. Used on level 1 and higher." @@ -529,28 +552,20 @@ stuff. Used on level 1 and higher." ;; sets `font-lock-type-face' in languages where ;; `c-recognize-<>-arglists' is set. - t `(,@(when (c-lang-const c-opt-cpp-prefix) + t `(;; Fontify "invalid" comment delimiters + ,@(when (and (c-lang-const c-block-comment-starter) + (c-lang-const c-line-comment-starter)) + `(c-maybe-font-lock-wrong-style-comments)) + ,@(when (c-lang-const c-opt-cpp-prefix) (let* ((noncontinued-line-end "\\(\\=\\|\\(\\=\\|[^\\]\\)[\n\r]\\)") (ncle-depth (regexp-opt-depth noncontinued-line-end)) (sws-depth (c-lang-const c-syntactic-ws-depth)) (nsws-depth (c-lang-const c-nonempty-syntactic-ws-depth))) - `(;; Fontify "invalid" comment delimiters - ,@(when (and (c-lang-const c-block-comment-starter) - (c-lang-const c-line-comment-starter)) - `(c-maybe-font-lock-wrong-style-comments)) - - ;; The stuff after #error and #warning is a message, so + `(;; The stuff after #error and #warning is a message, so ;; fontify it as a string. ,@(when (c-lang-const c-cpp-message-directives) - (let* ((re (c-make-keywords-re 'appendable ; nil - (c-lang-const c-cpp-message-directives))) - (re-depth (regexp-opt-depth re))) - `((,(concat noncontinued-line-end - (c-lang-const c-opt-cpp-prefix) - re - "\\s +\\(.*\\)$") - ,(+ ncle-depth re-depth 1) font-lock-string-face t)))) + '(c-font-lock-cpp-messages)) ;; Fontify filenames in #include <...> as strings. ,@(when (c-lang-const c-cpp-include-directives) @@ -1219,22 +1234,29 @@ casts and declarations are fontified. Used on level 2 and higher." ;; characters it allows within the list. (let ((type (and (> match-pos (point-min)) (c-get-char-property (1- match-pos) 'c-type))) - id-pos) + id-pos tok-end-pos) (cond ;; Are we just after something like "(foo((bar))" ? ((and (eq (char-before match-pos) ?\)) (c-go-list-backward match-pos) (progn (c-backward-syntactic-ws) - (and (setq id-pos (c-on-identifier)) - (goto-char id-pos) - (progn - (c-backward-syntactic-ws) - (eq (char-before) ?\())))) - (c-get-fontification-context (point) not-front-decl toplev)) + (setq tok-end-pos (point)) + (cond + ((and (setq id-pos (c-on-identifier)) + (goto-char id-pos) + (progn + (c-backward-syntactic-ws) + (eq (char-before) ?\())) + (c-get-fontification-context (point) not-front-decl toplev)) + ((progn + (goto-char tok-end-pos) + (and (zerop (c-backward-token-2)) + (looking-at c-type-internal-paren-key))) + (cons 'not-decl nil)))))) ((not (memq (char-before match-pos) '(?\( ?, ?\[ ?< ?{))) (cons (and toplev 'top) nil)) - ;; A control flow expression or a decltype + ;; A control flow expression or a decltype, etc. ((and (eq (char-before match-pos) ?\() (save-excursion (goto-char match-pos) @@ -1246,7 +1268,8 @@ casts and declarations are fontified. Used on level 2 and higher." (cons nil nil)) ((or (looking-at c-block-stmt-2-key) (looking-at c-block-stmt-1-2-key) - (looking-at c-typeof-key)) + (looking-at c-typeof-key) + (looking-at c-type-internal-paren-key)) (cons nil t)) (t nil))))) ;; Near BOB. @@ -1531,8 +1554,8 @@ casts and declarations are fontified. Used on level 2 and higher." ;; `parse-sexp-lookup-properties' (when it exists). (parse-sexp-lookup-properties (cc-eval-when-compile - (boundp 'parse-sexp-lookup-properties)) - )) + (boundp 'parse-sexp-lookup-properties))) + list-bounds) ;; Below we fontify a whole declaration even when it crosses the limit, ;; to avoid gaps when jit/lazy-lock fontifies the file a block at a @@ -1622,6 +1645,24 @@ casts and declarations are fontified. Used on level 2 and higher." nil) ((eq context 'generic) (c-font-lock-c11-generic-clause)) + + ;; K&R parameters. + ((and + c-recognize-knr-p + (or toplev inside-macro) + (eq context 'decl) + (setq list-bounds (c-in-id-arglist)) + (save-excursion + (goto-char (car list-bounds)) + (and (zerop (c-backward-token-2)) + (eq (point) (c-on-identifier)))) + (save-excursion + (goto-char (cdr list-bounds)) + (c-forward-syntactic-ws) + (not (memq (char-after) '(?\; ?{ ?\? ?: ?\,))))) + ;; Nothing to fontify. + (goto-char (cdr list-bounds))) + (t (setq decl-or-cast (c-forward-decl-or-cast-1 @@ -2371,7 +2412,10 @@ on level 2 only and so aren't combined with `c-complex-decl-matchers'." ;; Fontify basic types. ,(let ((re (c-make-keywords-re nil - (c-lang-const c-primitive-type-kwds)))) + (cl-delete-duplicates + (append (c-lang-const c-primitive-type-kwds) + (c-lang-const c-type-with-paren-kwds)) + :test #'equal)))) (if (c-major-mode-is 'pike-mode) ;; No symbol is a keyword after "->" in Pike. `(,(concat "\\(\\=.?\\|[^>]\\|[^-]>\\)" diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el index 17fb51aaeac..772b09e1f97 100644 --- a/lisp/progmodes/cc-langs.el +++ b/lisp/progmodes/cc-langs.el @@ -835,7 +835,7 @@ there be copies of the opener contained in the multi-line string." (c-lang-defconst c-has-quoted-numbers "Whether the language has numbers quoted like 4'294'967'295." t nil - c++ t) + (c c++) t) (c-lang-defvar c-has-quoted-numbers (c-lang-const c-has-quoted-numbers)) (c-lang-defconst c-has-compound-literals @@ -1172,11 +1172,37 @@ string message." '("error")) (c c++ objc pike) '("error" "warning")) +(c-lang-defconst c-cpp-message-directives-re + ;; Appendable regexp matching any of the tokens in `c-cpp-message-directives'. + t (c-make-keywords-re 'appendable (c-lang-const c-cpp-message-directives))) + +(c-lang-defconst noncontinued-line-end + t "\\(\\=\\|\\(\\=\\|[^\\]\\)[\n\r]\\)") +(c-lang-defconst ncle-depth + t (regexp-opt-depth (c-lang-const noncontinued-line-end))) + +(c-lang-defconst c-cpp-messages-re + ;; Regexp to match a #error or #warning construct. See + ;; `c-cpp-message-directives'. + t (if (c-lang-const c-cpp-message-directives) + (concat (c-lang-const noncontinued-line-end) + (c-lang-const c-opt-cpp-prefix) + (c-lang-const c-cpp-message-directives-re) + "\\s +\\(\\(\\\\\\(\\\\?\n\\|.\\)\\|[^\n]\\)*\\)$"))) +(c-lang-defvar c-cpp-messages-re (c-lang-const c-cpp-messages-re)) + +(c-lang-defconst c-cpp-message-match-no + t (if (c-lang-const c-cpp-messages-re) + (+ 1 (c-lang-const ncle-depth) + (regexp-opt-depth (c-lang-const c-cpp-message-directives-re))))) +(c-lang-defvar c-cpp-message-match-no (c-lang-const c-cpp-message-match-no)) + (c-lang-defconst c-cpp-include-directives "List of cpp directives (without the prefix) that are followed by a file name in angle brackets or quotes." t (if (c-lang-const c-opt-cpp-prefix) '("include")) + c '("include" "embed") objc '("include" "import")) (c-lang-defconst c-cpp-include-key @@ -1235,7 +1261,8 @@ definition, or nil if the language doesn't have any." "List of cpp directives (without the prefix) that are followed by an expression." t (if (c-lang-const c-opt-cpp-prefix) - '("if" "elif"))) + '("if" "elif" + "elifdef" "elifndef"))) (c-lang-defconst c-cpp-expr-intro-re "Regexp which matches the start of a CPP directive which contains an @@ -1751,9 +1778,10 @@ This doesn't count the merely contextual bits of the regexp match." (c-lang-const c-opt-cpp-symbol) ; usually # (substring (c-lang-const c-stmt-delim-chars) 1)) ; ";{}?:" (c-lang-const c-stmt-delim-chars)) - c++ (concat (substring (c-lang-const c-stmt-boundary-skip-chars) 0 1) ; "^" - "[" - (substring (c-lang-const c-stmt-boundary-skip-chars) 1))) ; ";{}?:" + (c c++) (concat + (substring (c-lang-const c-stmt-boundary-skip-chars) 0 1) ; "^" + "[" + (substring (c-lang-const c-stmt-boundary-skip-chars) 1))) ; ";{}?:" (c-lang-defvar c-stmt-boundary-skip-chars (c-lang-const c-stmt-boundary-skip-chars)) @@ -2250,7 +2278,7 @@ This works in Emacs >= 25.1." ;; `c-kwds-lang-consts' list below and used to build `c-keywords' etc. (c-lang-defconst c-primitive-type-kwds - "Primitive type keywords. As opposed to the other keyword lists, the + "Primitive type keywords. As opposed to most other keyword lists, the keywords listed here are fontified with the type face instead of the keyword face. @@ -2265,10 +2293,12 @@ the appropriate place for that." t '("char" "double" "float" "int" "long" "short" "signed" "unsigned" "void") c (append - '("_Bool" "_Complex" "_Imaginary") ; Conditionally defined in C99. + '("_Bool" "_Complex" "_Imaginary" ;) Conditionally defined in C99. + "_Decimal32" "_Decimal64" "_Decimal128" + "bool" "char8_t" "char16_t" "char32_t" "nullptr_t") (c-lang-const c-primitive-type-kwds)) c++ (append - '("bool" "wchar_t" "char8_t" "char16_t" "char32_t") + '("bool" "wchar_t" "char8_t" "char16_t" "char32_t" "nullptr_t") (c-lang-const c-primitive-type-kwds)) ;; Objective-C extends C, but probably not the new stuff in C99. objc (append @@ -2327,7 +2357,7 @@ of a variable declaration." "Keywords followed by a parenthesized expression, which stands for the type of that expression." t nil - c '("typeof") ; longstanding GNU C(++) extension. + c '("typeof" "typeof_unqual") c++ '("decltype" "typeof")) (c-lang-defconst c-typeof-key @@ -2357,6 +2387,16 @@ used in declarations without the keyword." (c-lang-defvar c-self-contained-typename-key (c-lang-const c-self-contained-typename-key)) +(c-lang-defconst c-type-with-paren-kwds + "Keywords followed by a parenthesis expression, which form types." + t nil + c '("_BitInt")) + +(c-lang-defconst c-type-with-paren-key + "Adorned regexp which matches an element of `c-type-with-paren-kwds'." + t (c-make-keywords-re t (c-lang-const c-type-with-paren-kwds))) +(c-lang-defvar c-type-with-paren-key (c-lang-const c-type-with-paren-key)) + (c-lang-defconst c-type-prefix-kwds "Keywords where the following name - if any - is a type name, and where the keyword together with the symbol works as a type in @@ -2375,6 +2415,31 @@ on one of the `*-decl-kwds' lists." t (c-make-keywords-re t (c-lang-const c-type-prefix-kwds))) (c-lang-defvar c-type-prefix-key (c-lang-const c-type-prefix-key)) +(c-lang-defconst c-type-modifier-with-parens-kwds + "Keywords which have parenthesis expressions which modify a type. +They can appear anywhere in the type. Not included here are kwds which +stand in place of a type, namely those in `c-no-type-kwds'." + t nil + c '("alignof" "alignas" "_Alignas" "_Alignof")) + +(c-lang-defconst c-type-modifier-with-parens-key + ;; Adorned regexp matching `c-type-modifier-with-parens-kwds'. + t (c-make-keywords-re t (c-lang-const c-type-modifier-with-parens-kwds))) +(c-lang-defvar c-type-modifier-with-parens-key + (c-lang-const c-type-modifier-with-parens-key)) + +(c-lang-defconst c-type-internal-paren-kwds + ;; Keywords which can be followed by a parenthesis expression inside a type + ;; specification. + t (append (c-lang-const c-type-with-paren-kwds) + (c-lang-const c-type-modifier-with-parens-kwds))) + +(c-lang-defconst c-type-internal-paren-key + ;; Adorned regexp matching any member of `c-type-internal-paren-kwds'. + t (c-make-keywords-re t (c-lang-const c-type-internal-paren-kwds))) +(c-lang-defvar c-type-internal-paren-key + (c-lang-const c-type-internal-paren-key)) + (c-lang-defconst c-type-modifier-prefix-kwds "Type modifier keywords which can appear in front of a type. These can also occur almost anywhere in types but they don't build a type of @@ -2386,6 +2451,7 @@ fontified with the keyword face and not the type face." objc '("const" "volatile") java '("final") t (append (c-lang-const c-no-type-kwds) + (c-lang-const c-type-modifier-with-parens-kwds) (c-lang-const c-type-modifier-prefix-kwds))) (c-lang-defconst c-opt-type-modifier-prefix-key @@ -2427,7 +2493,8 @@ the type face." ;; or a complete type). t (c--delete-duplicates (append (c-lang-const c-primitive-type-kwds) (c-lang-const c-type-prefix-kwds) - (c-lang-const c-type-modifier-kwds)) + (c-lang-const c-type-modifier-kwds) + (c-lang-const c-type-with-paren-kwds)) :test 'string-equal)) (c-lang-defconst c-type-decl-suffix-ws-ids-kwds @@ -2539,7 +2606,7 @@ and precede the opening brace." "Set to t when we recognize a colon and then a type after an enum, e.g., enum foo : int { A, B, C };" t nil - c++ t) + (c c++) t) (c-lang-defvar c-recognize-post-brace-list-type-p (c-lang-const c-recognize-post-brace-list-type-p)) @@ -2644,6 +2711,17 @@ will be handled." t (c-make-keywords-re t (c-lang-const c-no-type-kwds))) (c-lang-defvar c-no-type-key (c-lang-const c-no-type-key)) +(c-lang-defconst c-no-type-with-equals-kwds + "Keywords after which no type is needed when there's an = sign." + t nil + c '("auto")) + +(c-lang-defconst c-no-type-with-equals-key + ;; Regexp mathing an entry from `c-no-type-with-equals-kwds'. + t (c-make-keywords-re t (c-lang-const c-no-type-with-equals-kwds))) +(c-lang-defvar c-no-type-with-equals-key + (c-lang-const c-no-type-with-equals-key)) + (c-lang-defconst c-typeless-decl-kwds "Keywords introducing declarations where the (first) identifier \(declarator) follows directly after the keyword, without any type. @@ -2750,10 +2828,12 @@ If any of these also are on `c-type-list-kwds', `c-ref-list-kwds', `c-<>-type-kwds', or `c-<>-arglist-kwds' then the associated clauses will be handled." t nil - (c c++) '("extern" "inline" "register" "static") - c (append '("auto") (c-lang-const c-modifier-kwds)) - c++ (append '("consteval" "constexpr" "constinit" "explicit" - "friend" "mutable" "template" "thread_local" "virtual") + (c c++) '("constexpr" "extern" "inline" "register" + "static" "thread_local") + c (append '("auto" "_Thread_local") + (c-lang-const c-modifier-kwds)) + c++ (append '("consteval" "constinit" "explicit" + "friend" "mutable" "template" "virtual") ;; "using" is now handled specially (2020-09-14). (c-lang-const c-modifier-kwds)) objc '("auto" "bycopy" "byref" "extern" "in" "inout" "oneway" "out" "static") @@ -3061,7 +3141,9 @@ contain type identifiers." (c c++) '(;; GCC extension. "__attribute__" ;; MSVC extension. - "__declspec") + "__declspec" + "static_assert") + c (append (c-lang-const c-paren-nontype-kwds) '("_Static_assert")) c++ (append (c-lang-const c-paren-nontype-kwds) '("noexcept" "alignas"))) (c-lang-defconst c-paren-nontype-key @@ -3337,11 +3419,9 @@ not really template operators." (c-lang-defconst c-constant-kwds "Keywords for constants." t nil - c '("NULL" ;; Not a keyword, but practically works as one. - "false" "true") ; Defined in C99. - c++ (append - '("nullptr") - (c-lang-const c-constant-kwds c)) + (c c++) '("NULL" ;; Not a keyword, but practically works as one. + "false" "true" ; Defined in C99. + "nullptr") objc '("nil" "Nil" "YES" "NO" "IBAction" "IBOutlet" "NS_DURING" "NS_HANDLER" "NS_ENDHANDLER") idl '("TRUE" "FALSE") @@ -3618,7 +3698,8 @@ Note that Java specific rules are currently applied to tell this from t (c-make-keywords-re t (c--set-difference (c-lang-const c-keywords) (append (c-lang-const c-primitive-type-kwds) - (c-lang-const c-constant-kwds)) + (c-lang-const c-constant-kwds) + (c-lang-const c-type-with-paren-kwds)) :test 'string-equal))) (c-lang-defvar c-regular-keywords-regexp (c-lang-const c-regular-keywords-regexp)) @@ -4237,6 +4318,13 @@ This is only used in c++-mode." (c-lang-defvar c-pre-brace-non-bracelist-key (c-lang-const c-pre-brace-non-bracelist-key)) +(c-lang-defconst c-recognize-nameless-type-decls + "Non-nil means a type may be used in an arglist without an identifier." + t nil + c t) +(c-lang-defvar c-recognize-nameless-type-decls + (c-lang-const c-recognize-nameless-type-decls)) + (c-lang-defconst c-recognize-typeless-decls "Non-nil means function declarations without return type should be recognized. That can introduce an ambiguity with parenthesized macro diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el index efeb6c1005a..126cca5c071 100644 --- a/lisp/progmodes/cc-mode.el +++ b/lisp/progmodes/cc-mode.el @@ -194,6 +194,8 @@ (c-clear-char-properties (point-min) (point-max) 'c-is-sws) (c-clear-char-properties (point-min) (point-max) 'c-in-sws) (c-clear-char-properties (point-min) (point-max) 'c-type) + (if c-has-quoted-numbers + (c-clear-char-properties (point-min) (point-max) 'c-digit-separator)) (if (c-major-mode-is 'awk-mode) (c-clear-char-properties (point-min) (point-max) 'c-awk-NL-prop)))) (setq c-buffer-is-cc-mode nil))) @@ -2596,7 +2598,7 @@ with // and /*, not more generic line and block comments." (goto-char (car ml-delim))) (c-backward-syntactic-ws lim) (when (setq enclosing-attribute (c-enclosing-c++-attribute)) - (goto-char (car enclosing-attribute)) ; Only happens in C++ Mode. + (goto-char (car enclosing-attribute)) ; Only happens in C or C++ Mode. (c-backward-syntactic-ws lim)) (while (and (> (point) lim) (memq (char-before) '(?\[ ?\())) commit b589fa9e23d896ce76b64016e0a5750f2131c393 Author: Michael Albinus Date: Thu May 1 16:49:35 2025 +0200 ; Fix last change diff --git a/test/infra/gitlab-ci.yml b/test/infra/gitlab-ci.yml index d50c6193a73..a0666550030 100644 --- a/test/infra/gitlab-ci.yml +++ b/test/infra/gitlab-ci.yml @@ -84,25 +84,25 @@ default: script: - docker pull ${CI_REGISTRY_IMAGE}:${target}-${BUILD_TAG} - 'export PWD=$(pwd)' - - '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` \ - -e http_proxy=${http_proxy} \ - -e https_proxy=${https_proxy} \ - -e no_proxy=${no_proxy} \ - --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 && \ + - '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` + -e http_proxy=${http_proxy} + -e https_proxy=${https_proxy} + -e no_proxy=${no_proxy} + --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 commit 75870a7ad184be7a8fe0a8e0497665a3b04cd6fa Author: Eli Zaretskii Date: Thu May 1 17:42:12 2025 +0300 ; Fix wording of recently added documentation * lisp/window.el (display-buffer): * doc/lispref/windows.texi (Buffer Display Action Alists): Fix wording. diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi index 82b670fd634..ce851d7f377 100644 --- a/doc/lispref/windows.texi +++ b/doc/lispref/windows.texi @@ -3917,8 +3917,8 @@ entry in @code{display-buffer-alist}. @vindex this-command@r{, a buffer display action alist entry} @item this-command -The value is a symbol naming a command or a list of such symbols. It -means the condition when that command, or any of those commands, are now +The value is a symbol naming a command or a list of command symbols. It +represents the condition which is satisfied if any of those commands are being executed. You can use this in the condition part of @code{display-buffer-alist} entries to match buffers displayed during the execution of particular commands. diff --git a/lisp/window.el b/lisp/window.el index afa9a156e46..e6f0364c00c 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -8237,8 +8237,8 @@ Action alist entries are: the displayed buffer by using the same category in the condition part of `display-buffer-alist' entries. `this-command' -- A symbol naming the command now being executed, or a - list of such symbols to mean the condition when any of those commands - are now being executed. + list of command symbols, to mean the condition that any of those + commands are being executed. You can use this in the condition part of `display-buffer-alist' entries to match buffers displayed by particular commands. commit 5cdcebc2ad0e55fa7b7e938a6860505a13f408bf Author: Eli Zaretskii Date: Thu May 1 17:35:47 2025 +0300 ; Fix sectioning of recent changes in the Emacs user manual * doc/emacs/maintaining.texi (VC-Aware Project Backend): * doc/emacs/emacs.texi (Top): Fix recent changes. diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi index 2e9f24314eb..3e3e13f14a4 100644 --- a/doc/emacs/emacs.texi +++ b/doc/emacs/emacs.texi @@ -884,6 +884,7 @@ Projects * Project Buffer Commands:: Commands for handling project buffers. * Switching Projects:: Switching between projects. * Managing Projects:: Managing the project list file. +* VC-Aware Project Backend:: Default project backend. Change Logs diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi index 94f2c8331ca..b65df366f05 100644 --- a/doc/emacs/maintaining.texi +++ b/doc/emacs/maintaining.texi @@ -2048,9 +2048,10 @@ matched against the project root, and the predicate should take the project object as the only argument and return non-@code{nil} if the project should @emph{not} be saved to @code{project-list-file}. +@node VC-Aware Project Backend +@subsection VC-Aware Project Backend @cindex VC-aware project backend @cindex project backend, VC-aware -@node VC-Aware Project Backend This backend is part of Emacs and is enabled by default. (Other backends may need installation of add-on packages and their proper configuration.) commit 343f0c44f35c41b93c66f67da0ddeceb98bbdb93 Author: Sean Whitton Date: Thu May 1 20:55:56 2025 +0800 New this-command buffer display action alist entry * lisp/subr.el (buffer-match-p): New this-command cons cell condition to implement new this-command buffer display action alist entry (bug#78082). * lisp/window.el (display-buffer): * doc/lispref/windows.texi (Buffer Display Action Alists): * etc/NEWS: Document the new buffer display action alist entry. diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi index 3a8dffd1af1..82b670fd634 100644 --- a/doc/lispref/windows.texi +++ b/doc/lispref/windows.texi @@ -3914,6 +3914,14 @@ List, @code{buffer-match-p}}. Thus, if a Lisp program uses a particular @var{symbol} as the category when calling @code{display-buffer}, users can customize how these buffers will be displayed by including such an entry in @code{display-buffer-alist}. + +@vindex this-command@r{, a buffer display action alist entry} +@item this-command +The value is a symbol naming a command or a list of such symbols. It +means the condition when that command, or any of those commands, are now +being executed. You can use this in the condition part of +@code{display-buffer-alist} entries to match buffers displayed during +the execution of particular commands. @end table By convention, the entries @code{window-height}, @code{window-width} diff --git a/etc/NEWS b/etc/NEWS index e080d8ed3a2..6fa979a2785 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -312,6 +312,11 @@ When bound to non-nil, 'window-state-get' will normalize 'uniquify' managed buffer names by removing 'uniquify' prefixes and suffixes. This helps to restore window buffers across Emacs sessions. ++++ +*** New action alist entry 'this-command' for 'display-buffer'. +You can use this in 'display-buffer-alist' to match buffers displayed +during the execution of particular commands. + ** Frames +++ diff --git a/lisp/subr.el b/lisp/subr.el index a5c850ebe5e..975f28e0a17 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -7629,6 +7629,11 @@ CONDITION is either: the buffer matches if the caller of `display-buffer' provides `(category . SYMBOL)' in its ACTION argument, and SYMBOL is `eq' to the cons-cell's cdr. + * `this-command': the buffer matches if the command now being executed + is `eq' to or a `memq' of the cons-cell's cdr. + (This case is not useful when calling `buffer-match-p' directly, but + is needed to support the `this-command' buffer display action alist + entry. See `display-buffer'.) * `not': the cadr is interpreted as a negation of a condition. * `and': the cdr is a list of recursive conditions, that all have to be met. @@ -7659,6 +7664,10 @@ CONDITION is either: (if args nil '(nil))))))) (`(category . ,category) (eq (alist-get 'category (cdar args)) category)) + (`(this-command . ,command-or-commands) + (if (listp command-or-commands) + (memq this-command command-or-commands) + (eq this-command command-or-commands))) (`(major-mode . ,mode) (eq (buffer-local-value 'major-mode buffer) diff --git a/lisp/window.el b/lisp/window.el index e0e626e9500..afa9a156e46 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -8236,6 +8236,11 @@ Action alist entries are: `(category . symbol)' in its action argument, then you can match the displayed buffer by using the same category in the condition part of `display-buffer-alist' entries. + `this-command' -- A symbol naming the command now being executed, or a + list of such symbols to mean the condition when any of those commands + are now being executed. + You can use this in the condition part of `display-buffer-alist' + entries to match buffers displayed by particular commands. The entries `window-height', `window-width', `window-size' and `preserve-size' are applied only when the window used for commit 7ae86074231159647d9bcb579dc5ea5a569acf0d Author: Sean Whitton Date: Thu May 1 20:52:32 2025 +0800 ; * lisp/emacs-lisp/package.el (dired-get-marked-files): Declare. diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index b1987731308..ad60afb62da 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -998,6 +998,8 @@ untar into a directory named DIR; otherwise, signal an error." (apply #'nconc (mapcar (lambda (pair) (list (car pair) (cdr pair))) alist)))) +(declare-function dired-get-marked-files "dired") + (defun package-unpack (pkg-desc) "Install the contents of the current buffer as a package." (let* ((name (package-desc-name pkg-desc)) commit ab67f684e92489da84bc6bb559e0d2dc0456d949 Author: Michael Albinus Date: Thu May 1 12:47:44 2025 +0200 Improve treesitter tests on emba * test/infra/Dockerfile.emba (emacs-tree-sitter): Print language versions. * test/infra/gitlab-ci.yml (.job-template): Pass ${http_proxy}, ${https_proxy} and ${no_proxy} to the docker call. (.tree-sitter-template): Add some dependencies. diff --git a/test/infra/Dockerfile.emba b/test/infra/Dockerfile.emba index 80056e35a1f..1c1fbfc361a 100644 --- a/test/infra/Dockerfile.emba +++ b/test/infra/Dockerfile.emba @@ -123,13 +123,12 @@ RUN make -j `nproc` bootstrap RUN mkdir -p /root/.emacs.d/tree-sitter RUN git config --global http.sslverify "false" # See https://github.com/emacs-tree-sitter/tree-sitter-langs/tree/master/repos -# The recommended versions are generated by 'treesit-admin-verify-major-mode-queries` +# The recommended versions are generated by 'treesit-admin-verify-major-mode-queries' # at the beginning of every ts-mode file. Loading a ts-mode file adds its # grammar source to 'treesit-language-source-alist'. RUN src/emacs -Q --batch \ - --eval \ - '(message "ABI min version %d max version %d" \ - (treesit-library-abi-version t) (treesit-library-abi-version))' \ + --eval '(message "library ABI min version %d max version %d" \ + (treesit-library-abi-version t) (treesit-library-abi-version))' \ --eval '(setq treesit-extra-load-path (list "/root/.emacs.d/tree-sitter"))' \ --eval '(dolist (feature (quote (c-ts-mode cmake-ts-mode csharp-mode \ dockerfile-ts-mode elixir-ts-mode go-ts-mode heex-ts-mode java-ts-mode \ @@ -137,7 +136,11 @@ RUN src/emacs -Q --batch \ sh-script typescript-ts-mode css-mode html-ts-mode markdown-ts-mode \ mhtml-ts-mode toml-ts-mode yaml-ts-mode treesit-x))) (require feature))' \ --eval '(dolist (lang (mapcar (quote car) treesit-language-source-alist)) \ - (treesit-install-language-grammar lang "/root/.emacs.d/tree-sitter"))' + (treesit-install-language-grammar lang "/root/.emacs.d/tree-sitter"))' \ + --eval '(message "treesit-language-source-alist\n%s" \ + (pp-to-string treesit-language-source-alist))' \ + --eval '(dolist (lang (sort (mapcar (quote car) treesit-language-source-alist))) \ + (message "%s ABI version %d" lang (treesit-language-abi-version lang)))' FROM emacs-base as emacs-gnustep diff --git a/test/infra/gitlab-ci.yml b/test/infra/gitlab-ci.yml index 9c2480e92e2..d50c6193a73 100644 --- a/test/infra/gitlab-ci.yml +++ b/test/infra/gitlab-ci.yml @@ -84,7 +84,26 @@ default: script: - docker pull ${CI_REGISTRY_IMAGE}:${target}-${BUILD_TAG} - 'export PWD=$(pwd)' - - '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}"' + - '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` \ + -e http_proxy=${http_proxy} \ + -e https_proxy=${https_proxy} \ + -e no_proxy=${no_proxy} \ + --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 # - pwd; printenv @@ -187,13 +206,14 @@ default: - "**.in" - lisp/align.el - lisp/progmodes/*-ts-mode.el + - lisp/progmodes/c-ts-common.el - lisp/progmodes/csharp-mode.el - lisp/progmodes/js.el - lisp/progmodes/python.el - lisp/progmodes/sh-script.el - lisp/textmodes/*-ts-mode.el - lisp/textmodes/css-mode.el - - lisp/treesit.el + - lisp/treesit*.el - src/treesit.{h,c} - test/infra/* - test/lisp/align-resources/** @@ -293,10 +313,8 @@ test-eglot: make_params: >- check-expensive TEST_HOME=/root LOGFILES="lisp/progmodes/eglot-tests.log" - # EMACS_EXTRAOPT="--eval \(package-reinstall\ \(quote\ company\)\) - # --eval \(package-reinstall\ \(quote\ yasnippet\)\) - # --eval \(use-package\ company\) - # --eval \(use-package\ yasnippet\)" + # EMACS_EXTRAOPT="--eval \(use-package\ company\ :ensure\ t\) + # --eval \(use-package\ yasnippet\ :ensure\ t\)" build-image-tree-sitter: stage: platform-images commit b9632a9049d07de3a0d6f0ae005a28b38825ff82 Author: Jostein Kjønigsen Date: Fri Apr 25 15:29:31 2025 +0200 Fix compilation-mode matches for csharp-mode (bug#78128) * lisp/progmodes/csharp-mode.el: (csharp-compilation-re-dotnet-error): (csharp-compilation-re-dotnet-warning): Ignore leading whitespace. diff --git a/lisp/progmodes/csharp-mode.el b/lisp/progmodes/csharp-mode.el index 5cca2ac917c..bec94eed35c 100644 --- a/lisp/progmodes/csharp-mode.el +++ b/lisp/progmodes/csharp-mode.el @@ -584,10 +584,10 @@ compilation and evaluation time conflicts." "Regexp to match compilation warning from xbuild.") (defconst csharp-compilation-re-dotnet-error - "\\([^\r\n]+\\) : error [A-Z]+[0-9]+:") + "[[:blank:]]*\\([^\r\n]+\\) : error [A-Z]+[0-9]+:") (defconst csharp-compilation-re-dotnet-warning - "\\([^\r\n]+\\) : warning [A-Z]+[0-9]+:") + "[[:blank:]]*\\([^\r\n]+\\) : warning [A-Z]+[0-9]+:") (defconst csharp-compilation-re-dotnet-testfail (concat commit 2964d51c9cd9b55e60901069c378d0e8277d60f9 Author: Jostein Kjønigsen Date: Thu Mar 20 10:39:31 2025 +0100 Improve python-ts-mode fontification (bug#78129) Fontification based on selectors & code-conventions: - Lambda parameters: variable declarations - For in statements: variable declarations - Import statements: variable declerations - Constants: All upper case alphanumerical identifiers - Types: CamelCase alphanumerical identifiers - Enums: Enum-values as constants. * lisp/progmodes/python.el: (python--treesit-settings): Improve queries. diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 32df5846b67..b057e2b24f0 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -1235,7 +1235,15 @@ fontified." name: (identifier) @font-lock-type-face) (parameters (identifier) @font-lock-variable-name-face) (parameters (typed_parameter (identifier) @font-lock-variable-name-face)) - (parameters (default_parameter name: (identifier) @font-lock-variable-name-face))) + (parameters (default_parameter name: (identifier) @font-lock-variable-name-face)) + (lambda_parameters (identifier) @font-lock-variable-name-face) + (for_in_clause + left: (identifier) @font-lock-variable-name-face) + ((import_from_statement + name: ((dotted_name (identifier) @font-lock-type-face))) + (:match "\\`[A-Z][A-Za-z0-9]+\\'" @font-lock-type-face)) + (import_from_statement + name: ((dotted_name (identifier) @font-lock-variable-name-face)))) :feature 'builtin :language 'python @@ -1264,7 +1272,12 @@ fontified." :feature 'constant :language 'python - '([(true) (false) (none)] @font-lock-constant-face) + '([(true) (false) (none)] @font-lock-constant-face + ((identifier) @font-lock-constant-face + (:match "\\`[A-Z][A-Z0-9_]+\\'" @font-lock-constant-face)) + ((attribute + attribute: (identifier) @font-lock-constant-face) + (:match "\\`[A-Z][A-Z0-9_]+\\'" @font-lock-constant-face))) :feature 'assignment :language 'python @@ -1292,8 +1305,6 @@ fontified." :feature 'type :language 'python - ;; Override built-in faces when dict/list are used for type hints. - :override t `(((identifier) @font-lock-type-face (:match ,(rx-to-string `(seq bol (or ,@python--treesit-exceptions) @@ -1338,7 +1349,9 @@ fontified." ((call function: (identifier) @func-name (argument_list :anchor (_) (binary_operator) @python--treesit-fontify-union-types-strict)) - (:match "^is\\(?:instance\\|subclass\\)$" @func-name))) + (:match "^is\\(?:instance\\|subclass\\)$" @func-name)) + ((identifier) @font-lock-type-face + (:match "\\`[A-Z][A-Za-z0-9]+\\'" @font-lock-type-face))) :feature 'escape-sequence :language 'python commit 6c35ae082770c1bb875e870f83c3eff4a3197283 Author: Jostein Kjønigsen Date: Tue Apr 29 14:23:56 2025 +0200 Improve csharp-ts-mode fontification (bug#78130) Improves: - fontification of generic types with namespace-prefixes - function-call parameters - variable use in string interpolation - implicitly typed parameters in lambda-expressions - index-expressions - variables used in return-statements - variables used in binary expressions * lisp/progmodes/csharp-mode.el: (csharp-ts-mode--font-lock-settings): Improve queries. diff --git a/lisp/progmodes/csharp-mode.el b/lisp/progmodes/csharp-mode.el index e002391d305..5cca2ac917c 100644 --- a/lisp/progmodes/csharp-mode.el +++ b/lisp/progmodes/csharp-mode.el @@ -777,15 +777,49 @@ compilation and evaluation time conflicts." :feature 'expression '((conditional_expression (identifier) @font-lock-variable-use-face) (postfix_unary_expression (identifier)* @font-lock-variable-use-face) - (initializer_expression (assignment_expression left: (identifier) @font-lock-variable-use-face)) + (initializer_expression (assignment_expression left: (identifier) @font-lock-property-use-face)) (interpolated_string_expression (interpolation (identifier) @font-lock-variable-use-face)) (interpolated_string_expression (interpolation (member_access_expression - expression: (identifier) @font-lock-variable-use-face - name: (identifier) @font-lock-property-use-face)))) + name: (identifier) @font-lock-property-use-face))) + ((interpolated_string_expression + (interpolation + (member_access_expression + expression: (identifier) @font-lock-variable-use-face))) + (:match "^[a-z][A-Za-z0-9]+" @font-lock-variable-use-face)) + ((element_access_expression (identifier) @font-lock-variable-use-face) + (:match "^[a-z][A-Za-z0-9]+" @font-lock-variable-use-face)) + ((element_access_expression (identifier) @font-lock-variable-use-face) + (:match "^[a-z][A-Za-z0-9]+" @font-lock-variable-use-face)) + ((return_statement (identifier) @font-lock-variable-use-face) + (:match "^[a-z][A-Za-z0-9]+" @font-lock-variable-use-face)) + ((return_statement (member_access_expression + expression: (identifier) @font-lock-variable-use-face)) + (:match "^[a-z][A-Za-z0-9]+" @font-lock-variable-use-face)) + ((is_pattern_expression + expression: (identifier) @font-lock-variable-use-face) + (:match "^[a-z][A-Za-z0-9]+" @font-lock-variable-use-face)) + ((is_pattern_expression + expression: (member_access_expression + expression: (identifier) @font-lock-variable-use-face)) + (:match "^[a-z][A-Za-z0-9]+" @font-lock-variable-use-face)) + (is_pattern_expression + expression: (member_access_expression + name: (identifier) @font-lock-property-use-face)) + (is_pattern_expression + pattern: (constant_pattern (identifier) @font-lock-type-face)) + (is_pattern_expression + pattern: (constant_pattern (member_access_expression + name: (identifier) @font-lock-type-face))) + ((binary_expression + left: (identifier) @font-lock-variable-use-face) + (:match "^[a-z][A-Za-z0-9]+" @font-lock-variable-use-face)) + ((binary_expression + right: (identifier) @font-lock-variable-use-face) + (:match "^[a-z][A-Za-z0-9]+" @font-lock-variable-use-face))) :language 'c-sharp :feature 'bracket @@ -869,6 +903,8 @@ compilation and evaluation time conflicts." (identifier) @font-lock-type-face)) (array_type (identifier) @font-lock-type-face) + (qualified_name + name: (generic_name (identifier) @font-lock-type-face)) (cast_expression (identifier) @font-lock-type-face) (cast_expression (generic_name (identifier) @font-lock-type-face)) ["operator"] @font-lock-type-face @@ -941,6 +977,8 @@ compilation and evaluation time conflicts." (identifier) @font-lock-variable-name-face)) (variable_declaration (identifier) @font-lock-type-face) + (variable_declaration (qualified_name + name: (generic_name (identifier) @font-lock-type-face))) (variable_declaration (generic_name (identifier) @font-lock-type-face)) (variable_declarator (identifier) @font-lock-variable-name-face) @@ -949,6 +987,8 @@ compilation and evaluation time conflicts." (parameter name: (identifier) @font-lock-variable-name-face) (lambda_expression (identifier) @font-lock-variable-name-face) + (lambda_expression + parameters: (implicit_parameter) @font-lock-variable-name-face) (declaration_expression type: (identifier) @font-lock-type-face) (declaration_expression name: (identifier) @font-lock-variable-name-face)) @@ -956,15 +996,25 @@ compilation and evaluation time conflicts." :language 'c-sharp :feature 'function '((invocation_expression + function: (identifier) @font-lock-function-call-face) + (invocation_expression function: (member_access_expression name: (identifier) @font-lock-function-call-face)) - (invocation_expression - function: (identifier) @font-lock-function-call-face) (invocation_expression function: (member_access_expression name: (generic_name (identifier) @font-lock-function-call-face))) (invocation_expression - function: (generic_name (identifier) @font-lock-function-call-face))) + function: (generic_name (identifier) @font-lock-function-call-face)) + ((invocation_expression + function: (member_access_expression + expression: (identifier) @font-lock-variable-use-face)) + (:match "^[a-z][A-Za-z0-9]+" @font-lock-variable-use-face)) + (argument (identifier) @font-lock-variable-use-face) + ((argument (member_access_expression + expression: (identifier) @font-lock-variable-use-face)) + (:match "^[a-z][A-Za-z0-9]+" @font-lock-variable-use-face)) + (argument (member_access_expression + name: (identifier) @font-lock-property-use-face))) :language 'c-sharp :feature 'escape-sequence commit 15e77fe03a816e839a6af326cb7837518de0fd23 Author: Philip Kaludercic Date: Thu May 1 09:49:44 2025 +0200 ; Fix invalid 'expand-file-name' call from 4226eb2b * lisp/emacs-lisp/package-vc.el (package-vc--main-file) (package-vc--unpack-1): Provide a fallback value if the package specification has no :lisp-dir. diff --git a/lisp/emacs-lisp/package-vc.el b/lisp/emacs-lisp/package-vc.el index c1431aa4324..babc0b71524 100644 --- a/lisp/emacs-lisp/package-vc.el +++ b/lisp/emacs-lisp/package-vc.el @@ -244,7 +244,7 @@ asynchronously." (let* ((pkg-spec (package-vc--desc->spec pkg-desc)) (name (symbol-name (package-desc-name pkg-desc))) (directory (expand-file-name - (plist-get pkg-spec :lisp-dir) + (or (plist-get pkg-spec :lisp-dir) ".") (or (package-desc-dir pkg-desc) (expand-file-name name package-user-dir)))) (file (expand-file-name @@ -462,7 +462,7 @@ identify a package as a VC package later on), building documentation and marking the package as installed." (let* ((pkg-spec (package-vc--desc->spec pkg-desc)) (lisp-dir (plist-get pkg-spec :lisp-dir)) - (lisp-path (expand-file-name lisp-dir pkg-dir)) + (lisp-path (expand-file-name (or lisp-dir ".") pkg-dir)) missing) ;; In case the package was installed directly from source, the commit ebeaa728b66d0674fa499bf0bf2ae573ec9984aa Author: Jostein Kjønigsen Date: Fri Apr 25 15:29:31 2025 +0200 Fix compilation-mode matches for csharp-mode (bug#78128) * lisp/progmodes/csharp-mode.el: (csharp-compilation-re-dotnet-error): (csharp-compilation-re-dotnet-warning): Ignore leading whitespace. diff --git a/lisp/progmodes/csharp-mode.el b/lisp/progmodes/csharp-mode.el index 55ae7db714b..3e372546eb6 100644 --- a/lisp/progmodes/csharp-mode.el +++ b/lisp/progmodes/csharp-mode.el @@ -591,10 +591,10 @@ compilation and evaluation time conflicts." "Regexp to match compilation warning from xbuild.") (defconst csharp-compilation-re-dotnet-error - "\\([^\r\n]+\\) : error [A-Z]+[0-9]+:") + "[[:blank:]]*\\([^\r\n]+\\) : error [A-Z]+[0-9]+:") (defconst csharp-compilation-re-dotnet-warning - "\\([^\r\n]+\\) : warning [A-Z]+[0-9]+:") + "[[:blank:]]*\\([^\r\n]+\\) : warning [A-Z]+[0-9]+:") (defconst csharp-compilation-re-dotnet-testfail (concat commit 1acb6454329ab66ef9f4b3f4a1937a7ab38121f7 Author: Spencer Baugh Date: Wed Apr 30 09:35:29 2025 -0400 Replace cl-remove-if with seq-remove in minibuffer.el * lisp/minibuffer.el (completion--file-name-table): Replace cl-remove-if with seq-remove. (bug#78149) diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index f8593fde0f7..f65f566fe24 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -3539,8 +3539,8 @@ except that it passes the file name through `substitute-in-file-name'." ;; expansion, so regexps containing $ won't work. Drop ;; them; we'll return more completions, but callers need to ;; handle that anyway. - (cl-remove-if (lambda (regexp) (string-search "$" regexp)) - completion-regexp-list))) + (seq-remove (lambda (regexp) (string-search "$" regexp)) + completion-regexp-list))) (complete-with-action action table sifned pred)))) (cond ((null action) ; try-completion commit dd5ae0f3ba56e762ae1265b0cb0fe9f2a28281ec Author: João Távora Date: Wed Apr 30 22:44:56 2025 +0100 Eglot: tweak previous change (clear Flymake 'Wait' state) When we don't have anything to give to Flymake, we still want to signal we're alive so the mode-line doesn't show a confusing 'Wait'. * lisp/progmodes/eglot.el (eglot--report-to-flymake): Clear 'Wait' state. diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index 530fd4aa5b8..d796c9fc802 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -3147,16 +3147,24 @@ may be called multiple times (respecting the protocol of (defun eglot--report-to-flymake (diags version) "Internal helper for `eglot-flymake-backend'." - (when (or (null version) (= version eglot--versioned-identifier)) (save-restriction (widen) - (funcall eglot--current-flymake-report-fn diags - ;; If the buffer hasn't changed since last - ;; call to the report function, flymake won't - ;; delete old diagnostics. Using :region - ;; keyword forces flymake to delete - ;; them (github#159). - :region (cons (point-min) (point-max))))) + (if (or (null version) (= version eglot--versioned-identifier)) + (funcall eglot--current-flymake-report-fn diags + ;; If the buffer hasn't changed since last + ;; call to the report function, flymake won't + ;; delete old diagnostics. Using :region + ;; keyword forces flymake to delete + ;; them (github#159). + :region (cons (point-min) (point-max))) + ;; Here, we don't have anything up to date to give Flymake: we + ;; just want to keep whatever diagnostics it has annotated in + ;; the buffer. However, as a nice-to-have, we still want to + ;; signal we're alive and clear a possible "Wait" state. We + ;; hackingly achieve this by reporting an empty list and making + ;; sure it pertains to a 0-length region. + (funcall eglot--current-flymake-report-fn nil + :region (cons (point-min) (point-min))))) (setq eglot--diagnostics (cons diags version))) (defun eglot-xref-backend () "Eglot xref backend." 'eglot) commit d6755ff1e146979731689585dc25a6e61fb4000e Author: Philip Kaludercic Date: Wed Apr 30 17:16:35 2025 +0200 Allow selecting what to copy when installing a local package * lisp/emacs-lisp/package.el (package-unpack, package-dir-info): Check the marked files if in a Dired buffer, and otherwise fallback on the previous behaviour or if there was no selection. (package-install-from-buffer): Document the feature. * etc/NEWS: Mention the change. (Bug#78017) diff --git a/etc/NEWS b/etc/NEWS index d149a7387e2..e080d8ed3a2 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1777,6 +1777,11 @@ interactively. *** 'package-upgrade' no longer accepts a string argument. When called from Lisp, it now only accepts a symbol. +--- +*** 'package-install-from-buffer' respects files marked by Dired. +When invoking the command in a Dired buffer with marked files, +the command will only copy those files. + +++ *** package-x.el is now obsolete. diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 66f6b795a5e..b1987731308 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -1007,7 +1007,9 @@ untar into a directory named DIR; otherwise, signal an error." ('dir (make-directory pkg-dir t) (let ((file-list - (directory-files-recursively default-directory "" nil))) + (or (and (derived-mode-p 'dired-mode) + (dired-get-marked-files)) + (directory-files-recursively default-directory "" nil)))) (dolist (source-file file-list) (let ((target-el-file (expand-file-name (file-name-nondirectory source-file) pkg-dir))) @@ -1251,7 +1253,9 @@ The return result is a `package-desc'." (with-temp-buffer (insert-file-contents desc-file) (package--read-pkg-desc 'dir)) - (let ((files (directory-files-recursively default-directory "\\.el\\'")) + (let ((files (or (and (derived-mode-p 'dired-mode) + (dired-get-marked-files)) + (directory-files-recursively default-directory "\\.el\\'"))) info) (while files (with-temp-buffer @@ -2373,7 +2377,8 @@ info node `(elisp)Packaging'). Specially, if current buffer is a directory, the -pkg.el description file is not mandatory, in which case the information -is derived from the main .el file in the directory. +is derived from the main .el file in the directory. Using Dired, +you can restrict what files to install by marking specific files. Downloads and installs required packages as needed." (interactive) commit ef5c7ec4990a603ff476e2266c31ea055ac0b609 Author: Philip Kaludercic Date: Wed Apr 30 17:07:09 2025 +0200 Improve detection of VC package revisions * lisp/emacs-lisp/package-vc.el (package-vc-commit): If the package specification lists a :lisp-dir, use that to search for Lisp files. diff --git a/lisp/emacs-lisp/package-vc.el b/lisp/emacs-lisp/package-vc.el index 0652979b6bb..c1431aa4324 100644 --- a/lisp/emacs-lisp/package-vc.el +++ b/lisp/emacs-lisp/package-vc.el @@ -219,7 +219,9 @@ asynchronously." ;; FIXME: vc should be extended to allow querying the commit of a ;; directory (as is possible when dealing with git repositories). ;; This should be a fallback option. - (cl-loop with dir = (package-desc-dir pkg-desc) + (cl-loop with dir = (let ((pkg-spec (package-vc--desc->spec pkg-desc))) + (or (plist-get pkg-spec :lisp-dir) + (package-desc-dir pkg-desc))) for file in (directory-files dir t "\\.el\\'" t) when (vc-working-revision file) return it finally return "unknown")) commit 4226eb2b20408ba49787195bbc59bb0066c9c9e4 Author: Philip Kaludercic Date: Wed Apr 30 17:05:08 2025 +0200 Avoid using symbolic links when installing local VC packages * lisp/emacs-lisp/package-vc.el (package-vc--main-file): Use `expand-file-name' to support :lisp-dir entries outside of the elpa directory. (package-vc--unpack-1): Same as above. (package-vc-install-from-checkout): Instead of creating a symlink to the requested directory, create an empty directory and use autoload indirections, analogously to checkouts with Lisp code in a subdirectory. (Bug#78017) diff --git a/lisp/emacs-lisp/package-vc.el b/lisp/emacs-lisp/package-vc.el index daceb4eb9c0..0652979b6bb 100644 --- a/lisp/emacs-lisp/package-vc.el +++ b/lisp/emacs-lisp/package-vc.el @@ -241,10 +241,10 @@ asynchronously." (cl-assert (package-vc-p pkg-desc)) (let* ((pkg-spec (package-vc--desc->spec pkg-desc)) (name (symbol-name (package-desc-name pkg-desc))) - (directory (file-name-concat + (directory (expand-file-name + (plist-get pkg-spec :lisp-dir) (or (package-desc-dir pkg-desc) - (expand-file-name name package-user-dir)) - (plist-get pkg-spec :lisp-dir))) + (expand-file-name name package-user-dir)))) (file (expand-file-name (or (plist-get pkg-spec :main-file) (concat name ".el")) @@ -460,7 +460,7 @@ identify a package as a VC package later on), building documentation and marking the package as installed." (let* ((pkg-spec (package-vc--desc->spec pkg-desc)) (lisp-dir (plist-get pkg-spec :lisp-dir)) - (lisp-path (file-name-concat pkg-dir lisp-dir)) + (lisp-path (expand-file-name lisp-dir pkg-dir)) missing) ;; In case the package was installed directly from source, the @@ -508,7 +508,7 @@ documentation and marking the package as installed." (with-temp-buffer (insert ";; Autoload indirection for package-vc\n\n") (prin1 `(load (expand-file-name - ,(file-name-concat lisp-dir auto-name) + ,(expand-file-name auto-name lisp-dir) (or (and load-file-name (file-name-directory load-file-name)) (car load-path)))) @@ -924,16 +924,17 @@ for the NAME of the package to set up." (read-string (format-prompt "Package name" base) nil nil base))))) - (unless (vc-responsible-backend dir) - (user-error "Directory %S is not under version control" dir)) (package-vc--archives-initialize) (let* ((name (or name (file-name-base (directory-file-name dir)))) - (pkg-dir (expand-file-name name package-user-dir))) + (pkg-dir (expand-file-name name package-user-dir)) + (package-vc-selected-packages + (cons (list name :lisp-dir (expand-file-name dir)) + package-vc-selected-packages))) (when (file-exists-p pkg-dir) (if (yes-or-no-p (format "Overwrite previous checkout for package `%s'?" name)) (package--delete-directory pkg-dir) (error "There already exists a checkout for %s" name))) - (make-symbolic-link (expand-file-name dir) pkg-dir) + (make-directory pkg-dir t) (package-vc--unpack-1 (package-desc-create :name (intern name) commit b81f937e60b2fb499820e708d1ff4ba349df5f1a Author: Philip Kaludercic Date: Sun Apr 27 17:28:57 2025 +0200 Do a deep-copy when installing a package from a local package * lisp/emacs-lisp/package.el (package-unpack, package-dir-info): Call 'directory-files-recursively' with appropriate arguments. (Bug#78017) diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index a255778af64..66f6b795a5e 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -1007,8 +1007,7 @@ untar into a directory named DIR; otherwise, signal an error." ('dir (make-directory pkg-dir t) (let ((file-list - (directory-files - default-directory 'full "\\`[^.].*\\.el\\'" 'nosort))) + (directory-files-recursively default-directory "" nil))) (dolist (source-file file-list) (let ((target-el-file (expand-file-name (file-name-nondirectory source-file) pkg-dir))) @@ -1252,7 +1251,7 @@ The return result is a `package-desc'." (with-temp-buffer (insert-file-contents desc-file) (package--read-pkg-desc 'dir)) - (let ((files (directory-files default-directory t "\\.el\\'" t)) + (let ((files (directory-files-recursively default-directory "\\.el\\'")) info) (while files (with-temp-buffer commit 766adfa8a731683c221630c3fee5aa5ace22428e Author: Alan Mackenzie Date: Wed Apr 30 18:51:37 2025 +0000 Fix typo in bug#19867 correction (CC Mode indentation bugs) * lisp/progmodes/cc-align.el (c-lineup-item-after-paren-at-boi): Replace an erroneous skip-syntax-backward with skip-chars-backward. diff --git a/lisp/progmodes/cc-align.el b/lisp/progmodes/cc-align.el index da276f29603..556730fce0b 100644 --- a/lisp/progmodes/cc-align.el +++ b/lisp/progmodes/cc-align.el @@ -348,7 +348,7 @@ Works with: brace-list-intro, enum-intro, constraint-cont." (c-go-up-list-backward nil (c-langelem-pos c-syntactic-element))) (looking-at "\\s(") (save-excursion - (skip-syntax-backward " \t([{" (c-point 'boi)) + (skip-chars-backward " \t([{" (c-point 'boi)) (eq (point) (c-point 'boi))) (progn (forward-char) (c-forward-syntactic-ws (c-point 'eol)) commit b06046edcfceb6ba426880444894373f21ea4a79 Author: Juri Linkov Date: Wed Apr 30 20:34:52 2025 +0300 Fix the match data in elisp-outline-search. * lisp/progmodes/elisp-mode.el (elisp-outline-search): Add 'save-match-data' since 'syntax-ppss' garbles the match data. diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el index a9c00085056..e3b17f9b4fc 100644 --- a/lisp/progmodes/elisp-mode.el +++ b/lisp/progmodes/elisp-mode.el @@ -294,10 +294,13 @@ Comments in the form will be lost." (save-excursion (not (nth 8 (syntax-ppss (match-beginning 0)))))) (let ((search-success nil)) (while (and (setq search-success - (funcall (if backward #'re-search-backward #'re-search-forward) + (funcall (if backward #'re-search-backward + #'re-search-forward) (concat "^\\(?:" outline-regexp "\\)") bound (if move 'move t))) - (save-excursion (nth 8 (syntax-ppss (match-beginning 0)))))) + (save-excursion + (save-match-data + (nth 8 (syntax-ppss (match-beginning 0))))))) search-success))) (defcustom emacs-lisp-mode-hook nil commit 85cd476a1408d2d87714d076144f9ad11cf3f31c Author: Juri Linkov Date: Wed Apr 30 20:30:14 2025 +0300 * test/infra/Dockerfile.emba: Avoid duplication of tree-sitter data. Require ts-mode files in order to add their tree-sitter grammar sources to 'treesit-language-source-alist'. diff --git a/test/infra/Dockerfile.emba b/test/infra/Dockerfile.emba index 3fbca2a38b5..80056e35a1f 100644 --- a/test/infra/Dockerfile.emba +++ b/test/infra/Dockerfile.emba @@ -123,43 +123,19 @@ RUN make -j `nproc` bootstrap RUN mkdir -p /root/.emacs.d/tree-sitter RUN git config --global http.sslverify "false" # See https://github.com/emacs-tree-sitter/tree-sitter-langs/tree/master/repos -# The verified versions are generated by 'treesit-admin-verify-major-mode-queries` -# at the comments section in ts-mode files. +# The recommended versions are generated by 'treesit-admin-verify-major-mode-queries` +# at the beginning of every ts-mode file. Loading a ts-mode file adds its +# grammar source to 'treesit-language-source-alist'. RUN src/emacs -Q --batch \ --eval \ '(message "ABI min version %d max version %d" \ (treesit-library-abi-version t) (treesit-library-abi-version))' \ - --eval '(setq \ - treesit-extra-load-path (list "/root/.emacs.d/tree-sitter") \ - treesit-language-source-alist \ - (quote ((bash "https://github.com/tree-sitter/tree-sitter-bash" "v0.23.3") \ - (c "https://github.com/tree-sitter/tree-sitter-c" "v0.23.4") \ - (c-sharp "https://github.com/tree-sitter/tree-sitter-c-sharp" "v0.23.1") \ - (cmake "https://github.com/uyha/tree-sitter-cmake" "v0.5.0") \ - (cpp "https://github.com/tree-sitter/tree-sitter-cpp" "v0.23.4") \ - (css "https://github.com/tree-sitter/tree-sitter-css" "v0.23.1") \ - (elixir "https://github.com/elixir-lang/tree-sitter-elixir" "v0.3.3") \ - (go "https://github.com/tree-sitter/tree-sitter-go" "v0.23.4") \ - (gomod "https://github.com/camdencheek/tree-sitter-go-mod" "v1.1.0") \ - (gowork "https://github.com/omertuc/tree-sitter-go-work") \ - (heex "https://github.com/phoenixframework/tree-sitter-heex" "v0.7.0") \ - (html "https://github.com/tree-sitter/tree-sitter-html" "v0.23.2") \ - (java "https://github.com/tree-sitter/tree-sitter-java" "v0.23.5") \ - (javascript "https://github.com/tree-sitter/tree-sitter-javascript" "v0.23.1") \ - (jsdoc "https://github.com/tree-sitter/tree-sitter-jsdoc" "v0.23.2") \ - (json "https://github.com/tree-sitter/tree-sitter-json" "v0.24.8") \ - (lua "https://github.com/tree-sitter-grammars/tree-sitter-lua" "v0.3.0") \ - (markdown "https://github.com/tree-sitter-grammars/tree-sitter-markdown" "v0.4.1" "tree-sitter-markdown/src") \ - (markdown-inline "https://github.com/tree-sitter-grammars/tree-sitter-markdown" "v0.4.1" "tree-sitter-markdown-inline/src") \ - (php "https://github.com/tree-sitter/tree-sitter-php" "v0.23.11" "php/src") \ - (phpdoc "https://github.com/claytonrcarter/tree-sitter-phpdoc") \ - (python "https://github.com/tree-sitter/tree-sitter-python" "v0.23.6") \ - (ruby "https://github.com/tree-sitter/tree-sitter-ruby" "v0.23.1") \ - (rust "https://github.com/tree-sitter/tree-sitter-rust" "v0.23.2") \ - (toml "https://github.com/tree-sitter-grammars/tree-sitter-toml" "v0.7.0") \ - (tsx "https://github.com/tree-sitter/tree-sitter-typescript" "v0.23.2" "tsx/src") \ - (typescript "https://github.com/tree-sitter/tree-sitter-typescript" "v0.23.2" "typescript/src") \ - (yaml "https://github.com/tree-sitter-grammars/tree-sitter-yaml" "v0.7.0"))))' \ + --eval '(setq treesit-extra-load-path (list "/root/.emacs.d/tree-sitter"))' \ + --eval '(dolist (feature (quote (c-ts-mode cmake-ts-mode csharp-mode \ + dockerfile-ts-mode elixir-ts-mode go-ts-mode heex-ts-mode java-ts-mode \ + js json-ts-mode lua-ts-mode php-ts-mode python ruby-ts-mode rust-ts-mode \ + sh-script typescript-ts-mode css-mode html-ts-mode markdown-ts-mode \ + mhtml-ts-mode toml-ts-mode yaml-ts-mode treesit-x))) (require feature))' \ --eval '(dolist (lang (mapcar (quote car) treesit-language-source-alist)) \ (treesit-install-language-grammar lang "/root/.emacs.d/tree-sitter"))' commit dbd168823794ef2173bb6eb894174bc0c1685cd9 Author: Juri Linkov Date: Wed Apr 30 20:28:05 2025 +0300 Add python tree-sitter grammar data to 'treesit-language-source-alist'. * lisp/progmodes/python.el (python-ts-mode): Use 'treesit-ensure-installed' when it's fboundp. diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 8848a98fe5f..32df5846b67 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -269,6 +269,11 @@ (declare-function treesit-node-parent "treesit.c") (declare-function treesit-node-prev-sibling "treesit.c") +(add-to-list + 'treesit-language-source-alist + '(python "https://github.com/tree-sitter/tree-sitter-python" "v0.23.6") + t) + ;; Avoid compiler warnings (defvar compilation-error-regexp-alist) (defvar outline-heading-end-regexp) @@ -7294,7 +7299,9 @@ implementations: `python-mode' and `python-ts-mode'." \\{python-ts-mode-map}" :syntax-table python-mode-syntax-table - (when (treesit-ready-p 'python) + (when (if (fboundp 'treesit-ensure-installed) ; Emacs 31 + (treesit-ensure-installed 'python) + (treesit-ready-p 'python)) (setq treesit-primary-parser (treesit-parser-create 'python)) (setq-local treesit-font-lock-feature-list '(( comment definition) commit ab9580920278e69ecf1ccbd8dbf3cc1a0f8b019f Merge: cb701f95c61 1284b6f1187 Author: Stefan Monnier Date: Wed Apr 30 12:31:58 2025 -0400 Merge branch 'cleanup-register-preview' commit 1284b6f1187be768e1af013339d7a228c6a8e84d Author: Stefan Monnier Date: Wed Apr 30 09:41:22 2025 -0400 (register-type, register--type): Delete functions Automatically figure out which regval can be used for insertion and jump based on the presence of a matching method. * lisp/register.el (register-type, register--type): Delete functions. (register--get-method-type, register--jumpable-p) (register--insertable-p): New functions. (jump-to-register, insert-register): Use them. * lisp/frameset.el (register--type): Delete method. diff --git a/lisp/frameset.el b/lisp/frameset.el index cbdbc1ac239..ee30f77c3ba 100644 --- a/lisp/frameset.el +++ b/lisp/frameset.el @@ -1444,11 +1444,6 @@ Called from `list-registers' and `view-register'. Internal use only." (if (= 1 ns) "" "s") (format-time-string "%c" (frameset-timestamp fs)))))) -(cl-defmethod register--type ((_regval frameset-register)) - ;; FIXME: Why `frame' rather than `frameset'? - ;; FIXME: We shouldn't need to touch an internal function. - 'frame) - ;;;###autoload (defun frameset-to-register (register) "Store the current frameset in register REGISTER. diff --git a/lisp/register.el b/lisp/register.el index b01f2e12023..a36d0e6648e 100644 --- a/lisp/register.el +++ b/lisp/register.el @@ -223,43 +223,6 @@ Do nothing when defining or executing kmacros." (interactive) (register-preview-forward-line -1)) -(defun register-type (regval) - "Return register value REGVAL's type. -Register type that can be returned is one of the following: - - string - - number - - marker - - buffer - - file - - file-query - - window - - frame - - kmacro - -One can add new types to a specific command by defining a new `cl-defmethod' -matching that command. Predicates for type in new `cl-defmethod' should -satisfy `cl-typep', otherwise the new type should be defined with -`cl-deftype'." - (if (integerp (car-safe regval)) (setq regval (cdr regval))) - ;; Call register--type against the register value. - (register--type (if (consp regval) - (car regval) - regval))) - -(cl-defgeneric register--type (regval) - "Return the type of register value REGVAL." - (ignore regval)) - -(cl-defmethod register--type ((_regval (eql nil))) 'null) -(cl-defmethod register--type ((_regval string)) 'string) -(cl-defmethod register--type ((_regval number)) 'number) -(cl-defmethod register--type ((_regval marker)) 'marker) -(cl-defmethod register--type ((_regval (eql buffer))) 'buffer) -(cl-defmethod register--type ((_regval (eql file))) 'file) -(cl-defmethod register--type ((_regval (eql file-query))) 'file-query) -(cl-defmethod register--type ((_regval window-configuration)) 'window) -(cl-defmethod register--type ((regval oclosure)) (oclosure-type regval)) - (defun register-of-type-alist (pred) "Filter `register-alist' according to PRED." (if (null pred) @@ -569,13 +532,7 @@ ignored if the register contains anything but a frameset. Interactively, prompt for REGISTER using `register-read-with-preview'." (interactive (list (register-read-with-preview "Jump to register: " - (lambda (regval) - (memq (register-type regval) - ;; FIXME: This should not be hardcoded but - ;; computed based on whether a given register - ;; type implements `register-val-jump-to'. - '(window frame marker kmacro - file buffer file-query)))) + #'register--jumpable-p) current-prefix-arg)) (let ((val (get-register register))) (register-val-jump-to val delete))) @@ -618,6 +575,24 @@ With a prefix argument, prompt for BUFFER as well." (add-hook 'kill-buffer-hook #'register-buffer-to-file-query nil t)) (set-register register (cons 'buffer buffer))) +(defun register--get-method-type (val genfun) + (let* ((type (cl-type-of val)) + (types (cl--class-allparents (cl-find-class type)))) + (while (and types (not (cl-find-method genfun nil (list (car types))))) + (setq types (cdr types))) + (car types))) + +(defun register--jumpable-p (regval) + "Return non-nil if `register-val-insert' is implemented for REGVAL." + (pcase (register--get-method-type regval 'register-val-jump-to) + ('t nil) + ('registerv (registerv-jump-func regval)) + ('cons + (or (frame-configuration-p (car regval)) + (window-configuration-p (car regval)) + (memq (car regval) '(file buffer file-query)))) + (type type))) + (cl-defgeneric register-val-jump-to (_val _arg) "Execute the \"jump\" operation of VAL. VAL is the contents of a register as returned by `get-register'. @@ -865,18 +840,22 @@ Interactively, prompt for REGISTER using `register-read-with-preview'." (barf-if-buffer-read-only) (list (register-read-with-preview "Insert register: " - (lambda (regval) - (memq (register-type regval) - ;; FIXME: This should not be hardcoded but - ;; computed based on whether a given register - ;; type implements `register-val-insert'. - '(string number)))) + #'register--insertable-p) (not current-prefix-arg)))) (push-mark) (let ((val (get-register register))) (register-val-insert val)) (if (not arg) (exchange-point-and-mark))) +(defun register--insertable-p (regval) + "Return non-nil if `register-val-insert' is implemented for REGVAL." + (pcase (register--get-method-type regval 'register-val-insert) + ;; Only rectangles are currently supported. + ('t nil) + ('registerv (registerv-insert-func regval)) + ('cons (stringp (car regval))) + (type type))) + (cl-defgeneric register-val-insert (_val) "Insert register value VAL in current buffer at point." (user-error "Register does not contain text")) commit 826a83112964189b6049e288dbe8344a7362f29c Author: Stefan Monnier Date: Wed Apr 30 08:55:17 2025 -0400 (register-preview-1): Delete function * lisp/register.el (register-preview): Add `pred` arg. (register-preview-1): Delete function. (register-read-with-preview-fancy): Use `register-preview` instead. diff --git a/lisp/register.el b/lisp/register.el index 7de364429e2..b01f2e12023 100644 --- a/lisp/register.el +++ b/lisp/register.el @@ -268,36 +268,11 @@ satisfy `cl-typep', otherwise the new type should be defined with when (funcall pred (cdr register)) collect register))) -(defun register-preview (buffer &optional show-empty) +(defun register-preview (buffer &optional show-empty pred) "Pop up a window showing the preview of registers in BUFFER. If SHOW-EMPTY is non-nil, show the preview window even if no registers. -Format of each entry is controlled by the variable `register-preview-function'." - (when (or show-empty (consp register-alist)) - (with-current-buffer-window buffer - register-preview-display-buffer-alist - nil - (with-current-buffer standard-output - (setq cursor-in-non-selected-windows nil) - (mapc (lambda (elem) - (when (get-register (car elem)) - (insert (funcall register-preview-function elem)))) - register-alist))))) - -(defcustom register-preview-display-buffer-alist '(display-buffer-at-bottom - (window-height . fit-window-to-buffer) - (preserve-size . (nil . t))) - "Window configuration for the register preview buffer." - :type display-buffer--action-custom-type - :version "30.1") - -(defun register-preview-1 (buffer &optional show-empty pred) - "Pop up a window showing the preview of registers in BUFFER. - -This is the preview function used with the `register-read-with-preview-fancy' -function. -If SHOW-EMPTY is non-nil, show the preview window even if no registers. Optional argument PRED specifies the types of register to show; -if it is nil, show all the registers. See `register-type' for suitable types. +if it is nil, show all the registers. Format of each entry is controlled by the variable `register-preview-function'." (let ((registers (register-of-type-alist pred))) (when (or show-empty (consp registers)) @@ -321,6 +296,13 @@ Format of each entry is controlled by the variable `register-preview-function'." (forward-line 1)) (not (eobp))) +(defcustom register-preview-display-buffer-alist '(display-buffer-at-bottom + (window-height . fit-window-to-buffer) + (preserve-size . (nil . t))) + "Window configuration for the register preview buffer." + :type display-buffer--action-custom-type + :version "30.1") + (defun register--preview-get-defaults (pred strs) "Return default registers according to PRED and available registers. STRS is the list of non-empty registers that match PRED," @@ -417,13 +399,13 @@ or `never'." ;; Do nothing when buffer1 is in use. (unless (get-buffer-window buf) (with-selected-window (minibuffer-selected-window) - (register-preview-1 buffer 'show-empty pred)))))) + (register-preview buffer 'show-empty pred)))))) (define-key map (kbd "") #'register-preview-next) (define-key map (kbd "") #'register-preview-previous) (define-key map (kbd "C-n") #'register-preview-next) (define-key map (kbd "C-p") #'register-preview-previous) (unless (or executing-kbd-macro (eq register-use-preview 'never)) - (register-preview-1 buf nil pred)) + (register-preview buf nil pred)) (unwind-protect (let ((setup ;; FIXME: Weird name for a `post-command-hook' function. (lambda () @@ -464,7 +446,7 @@ or `never'." (when (or (eq noconfirm t) ; Using insist ;; Don't exit when noconfirm == (never) ;; If we are here user has pressed C-h - ;; calling `register-preview-1'. + ;; calling `register-preview'. (memq nil noconfirm)) ;; Happen only when ;; *-use-preview == insist. commit b2904e064d023c3a6d19af58ffd8ce21342c794c Author: Stefan Monnier Date: Wed Apr 30 08:50:59 2025 -0400 (register-command-info): Delete function * lisp/register.el (register-command-info): Delete function. (register-read-with-preview-fancy): Don't use it any more. (jump-to-register, increment-register, view-register) (insert-register, append-to-register, prepend-to-register): Pass a `pred` arg instead. diff --git a/lisp/register.el b/lisp/register.el index 6970907e84e..7de364429e2 100644 --- a/lisp/register.el +++ b/lisp/register.el @@ -185,30 +185,6 @@ This is the default value of the variable `register-preview-function'." (single-key-description (car r)) (register-describe-oneline (car r)))) -(cl-defgeneric register-command-info (command) - "Return a list of types of registers to use for COMMAND." - (ignore command)) -(cl-defmethod register-command-info ((_command (eql insert-register))) - ;; FIXME: This should not be hardcoded but computed based on whether - ;; a given register type implements `register-val-insert'. - '(string number)) -(cl-defmethod register-command-info ((_command (eql jump-to-register))) - ;; FIXME: This should not be hardcoded but computed based on whether - ;; a given register type implements `register-val-jump-to'. - '(window frame marker kmacro - file buffer file-query)) -(cl-defmethod register-command-info ((_command (eql view-register))) - '(t)) -(cl-defmethod register-command-info ((_command (eql append-to-register))) - '(string null) ;;FIXME: Fails on rectangles! - ) -(cl-defmethod register-command-info ((_command (eql prepend-to-register))) - '(string null) ;;FIXME: Fails on rectangles! - ) -(cl-defmethod register-command-info ((_command (eql increment-register))) - '(string number null) ;;FIXME: Fails on rectangles! - ) - (defun register-preview-forward-line (arg) "Move to next or previous line in register preview buffer. If ARG is positive, go to next line; if negative, go to previous line. @@ -422,11 +398,6 @@ or `never'." (map (let ((m (make-sparse-keymap))) (set-keymap-parent m minibuffer-local-map) m)) - (types (register-command-info this-command)) - (pred (or pred - (when types - (lambda (regval) - (memq (register-type regval) types))))) (enable-recursive-minibuffers t) result win (msg (if (string-match ":? *\\'" prompt) @@ -614,7 +585,15 @@ to delete any existing frames that the frameset doesn't mention. ignored if the register contains anything but a frameset. Interactively, prompt for REGISTER using `register-read-with-preview'." - (interactive (list (register-read-with-preview "Jump to register: ") + (interactive (list (register-read-with-preview + "Jump to register: " + (lambda (regval) + (memq (register-type regval) + ;; FIXME: This should not be hardcoded but + ;; computed based on whether a given register + ;; type implements `register-val-jump-to'. + '(window frame marker kmacro + file buffer file-query)))) current-prefix-arg)) (let ((val (get-register register))) (register-val-jump-to val delete))) @@ -751,7 +730,10 @@ If REGISTER is empty or if it contains text, call Interactively, prompt for REGISTER using `register-read-with-preview'." (interactive (list current-prefix-arg - (register-read-with-preview "Increment register: "))) + (register-read-with-preview + "Increment register: " + (lambda (regval) + (or (numberp regval) (null regval) (stringp regval)))))) (let ((register-val (get-register register))) (cond ((numberp register-val) @@ -766,7 +748,8 @@ Interactively, prompt for REGISTER using `register-read-with-preview'." REGISTER is a character, the name of the register. Interactively, prompt for REGISTER using `register-read-with-preview'." - (interactive (list (register-read-with-preview "View register: "))) + (interactive (list (register-read-with-preview "View register: " + (lambda (regval) regval)))) (let ((val (get-register register))) (if (null val) (message "Register %s is empty" (single-key-description register)) @@ -898,7 +881,14 @@ and t otherwise. Interactively, prompt for REGISTER using `register-read-with-preview'." (interactive (progn (barf-if-buffer-read-only) - (list (register-read-with-preview "Insert register: ") + (list (register-read-with-preview + "Insert register: " + (lambda (regval) + (memq (register-type regval) + ;; FIXME: This should not be hardcoded but + ;; computed based on whether a given register + ;; type implements `register-val-insert'. + '(string number)))) (not current-prefix-arg)))) (push-mark) (let ((val (get-register register))) @@ -963,7 +953,10 @@ START and END are buffer positions indicating what to append. Interactively, prompt for REGISTER using `register-read-with-preview', and use mark and point as START and END." - (interactive (list (register-read-with-preview "Append to register: ") + (interactive (list (register-read-with-preview + "Append to register: " + (lambda (regval) + (or (null regval) (stringp regval)))) (region-beginning) (region-end) current-prefix-arg)) @@ -989,7 +982,10 @@ START and END are buffer positions indicating what to prepend. Interactively, prompt for REGISTER using `register-read-with-preview', and use mark and point as START and END." - (interactive (list (register-read-with-preview "Prepend to register: ") + (interactive (list (register-read-with-preview + "Prepend to register: " + (lambda (regval) + (or (null regval) (stringp regval)))) (region-beginning) (region-end) current-prefix-arg)) commit c43964d27aacc05be9cd6f42a1d8295a9b661551 Author: Stefan Monnier Date: Wed Apr 30 08:40:00 2025 -0400 (register-type): Change arg to be the "regval" * lisp/register.el (register-type): Change arg to be the "regval". (register-read-with-preview-fancy): Adjust call accordingly diff --git a/lisp/register.el b/lisp/register.el index abe326f0713..6970907e84e 100644 --- a/lisp/register.el +++ b/lisp/register.el @@ -247,8 +247,8 @@ Do nothing when defining or executing kmacros." (interactive) (register-preview-forward-line -1)) -(defun register-type (register) - "Return REGISTER type. +(defun register-type (regval) + "Return register value REGVAL's type. Register type that can be returned is one of the following: - string - number @@ -264,10 +264,11 @@ One can add new types to a specific command by defining a new `cl-defmethod' matching that command. Predicates for type in new `cl-defmethod' should satisfy `cl-typep', otherwise the new type should be defined with `cl-deftype'." + (if (integerp (car-safe regval)) (setq regval (cdr regval))) ;; Call register--type against the register value. - (register--type (if (consp (cdr register)) - (cadr register) - (cdr register)))) + (register--type (if (consp regval) + (car regval) + regval))) (cl-defgeneric register--type (regval) "Return the type of register value REGVAL." @@ -425,8 +426,7 @@ or `never'." (pred (or pred (when types (lambda (regval) - ;; FIXME: Dummy ?d because of the API of `register-type' - (memq (register-type (cons ?d regval)) types))))) + (memq (register-type regval) types))))) (enable-recursive-minibuffers t) result win (msg (if (string-match ":? *\\'" prompt) commit 0fc6bd5c76a5e55401cf086e3b8fc6ed8eb32b94 Author: Stefan Monnier Date: Wed Apr 30 08:25:35 2025 -0400 (register-read-with-preview): Add optional `pred` arg * lisp/register.el (register--read-with-preview-function): Improve docstring.. (register--type) <(eql nil)>: New method. (register-of-type-alist, register-preview-1) (register--preview-get-defaults): Replace `types` arg with `pred` arg. (register-read-with-preview, register-read-with-preview-traditional): Add `pred` arg. (register-read-with-preview-fancy): Add `pred` arg. Use it instead of the `types` info returned by `register-command-info`, when provided. diff --git a/lisp/register.el b/lisp/register.el index 92026d6f2ff..abe326f0713 100644 --- a/lisp/register.el +++ b/lisp/register.el @@ -110,7 +110,8 @@ value except `traditional'." (defvar register--read-with-preview-function nil "Function to use for reading a register name with preview. -Two functions are provided, one that provide navigation and highlighting +Should implement the behavior documented for `register-read-with-preview'. +Two functions are provided, one that provides navigation and highlighting of the selected register, filtering of register according to command in use, defaults register to use when setting a new register, confirmation and notification when you are about to overwrite a register, and generic @@ -272,6 +273,7 @@ satisfy `cl-typep', otherwise the new type should be defined with "Return the type of register value REGVAL." (ignore regval)) +(cl-defmethod register--type ((_regval (eql nil))) 'null) (cl-defmethod register--type ((_regval string)) 'string) (cl-defmethod register--type ((_regval number)) 'number) (cl-defmethod register--type ((_regval marker)) 'marker) @@ -281,12 +283,12 @@ satisfy `cl-typep', otherwise the new type should be defined with (cl-defmethod register--type ((_regval window-configuration)) 'window) (cl-defmethod register--type ((regval oclosure)) (oclosure-type regval)) -(defun register-of-type-alist (types) - "Filter `register-alist' according to TYPES." - (if (or (null types) (memq t types)) +(defun register-of-type-alist (pred) + "Filter `register-alist' according to PRED." + (if (null pred) register-alist (cl-loop for register in register-alist - when (memq (register-type register) types) + when (funcall pred (cdr register)) collect register))) (defun register-preview (buffer &optional show-empty) @@ -311,16 +313,16 @@ Format of each entry is controlled by the variable `register-preview-function'." :type display-buffer--action-custom-type :version "30.1") -(defun register-preview-1 (buffer &optional show-empty types) +(defun register-preview-1 (buffer &optional show-empty pred) "Pop up a window showing the preview of registers in BUFFER. This is the preview function used with the `register-read-with-preview-fancy' function. If SHOW-EMPTY is non-nil, show the preview window even if no registers. -Optional argument TYPES (a list) specifies the types of register to show; -if it is nil or t, show all the registers. See `register-type' for suitable types. +Optional argument PRED specifies the types of register to show; +if it is nil, show all the registers. See `register-type' for suitable types. Format of each entry is controlled by the variable `register-preview-function'." - (let ((registers (register-of-type-alist types))) + (let ((registers (register-of-type-alist pred))) (when (or show-empty (consp registers)) (with-current-buffer-window buffer @@ -342,24 +344,30 @@ Format of each entry is controlled by the variable `register-preview-function'." (forward-line 1)) (not (eobp))) -(defun register--preview-get-defaults (types strs) - "Return default registers according to TYPES and available registers. -STRS is the list of non-empty registers that match TYPES," - (unless types +(defun register--preview-get-defaults (pred strs) + "Return default registers according to PRED and available registers. +STRS is the list of non-empty registers that match PRED," + (unless pred (cl-loop for s in register-preview-default-keys unless (member s strs) collect s))) -(defun register-read-with-preview (prompt) +(defun register-read-with-preview (prompt &optional pred) "Read register name, prompting with PROMPT; possibly show existing registers. This reads and returns the name of a register. PROMPT should be a string to prompt the user for the name. If `help-char' (or a member of `help-event-list') is pressed, display preview window unconditionally. + +PRED if non-nil should be a function specifying the kinds of registers that +can be used. It is called with one argument, a register value, and should +return non-nil if and only if that register value can be used. +The register value nil represents an empty register. + This calls the function specified by `register--read-with-preview-function'." - (funcall register--read-with-preview-function prompt)) + (funcall register--read-with-preview-function prompt pred)) -(defun register-read-with-preview-traditional (prompt) +(defun register-read-with-preview-traditional (prompt &optional _pred) "Read register name, prompting with PROMPT; possibly show existing registers. This reads and returns the name of a register. PROMPT should be a string to prompt the user for the name. @@ -396,7 +404,7 @@ when `register-use-preview' is set to `traditional'." (and (window-live-p w) (delete-window w))) (and (get-buffer buffer) (kill-buffer buffer))))) -(defun register-read-with-preview-fancy (prompt) +(defun register-read-with-preview-fancy (prompt &optional pred) "Read register name, prompting with PROMPT; possibly show existing registers. This reads and returns the name of a register. PROMPT should be a string to prompt the user for the name. @@ -414,6 +422,11 @@ or `never'." (set-keymap-parent m minibuffer-local-map) m)) (types (register-command-info this-command)) + (pred (or pred + (when types + (lambda (regval) + ;; FIXME: Dummy ?d because of the API of `register-type' + (memq (register-type (cons ?d regval)) types))))) (enable-recursive-minibuffers t) result win (msg (if (string-match ":? *\\'" prompt) @@ -423,8 +436,8 @@ or `never'." (noconfirm (memq register-use-preview '(nil never))) (strs (mapcar (lambda (x) (string (car x))) - (register-of-type-alist types)))) - (when (and types (not (memq 'null types)) (null strs)) + (register-of-type-alist pred)))) + (when (and pred (not (funcall pred nil)) (null strs)) (error "No suitable register")) (dolist (k (cons help-char help-event-list)) (define-key map (vector k) @@ -433,13 +446,13 @@ or `never'." ;; Do nothing when buffer1 is in use. (unless (get-buffer-window buf) (with-selected-window (minibuffer-selected-window) - (register-preview-1 buffer 'show-empty types)))))) + (register-preview-1 buffer 'show-empty pred)))))) (define-key map (kbd "") #'register-preview-next) (define-key map (kbd "") #'register-preview-previous) (define-key map (kbd "C-n") #'register-preview-next) (define-key map (kbd "C-p") #'register-preview-previous) (unless (or executing-kbd-macro (eq register-use-preview 'never)) - (register-preview-1 buf nil types)) + (register-preview-1 buf nil pred)) (unwind-protect (let ((setup ;; FIXME: Weird name for a `post-command-hook' function. (lambda () @@ -447,10 +460,11 @@ or `never'." (let ((input (minibuffer-contents))) (when (> (length input) 1) ;; Only keep the first of the new chars. - (let ((new (substring input 1 2)) - (old (substring input 0 1))) - (setq input (if (or (null types) - (member new strs)) + (let* ((new (substring input 1 2)) + (old (substring input 0 1)) + (newreg (aref new 0)) + (regval (cdr (assq newreg register-alist)))) + (setq input (if (or (null pred) (funcall pred regval)) new old)) (delete-minibuffer-contents) (insert input) @@ -459,8 +473,10 @@ or `never'." (when (and (string= new old) (eq register-use-preview 'insist)) (setq noconfirm t)))) - (when (and types (not (string= input "")) - (not (member input strs))) + (when (and pred (not (string= input "")) + (let* ((reg (aref input 0)) + (regval (cdr (assq reg register-alist)))) + (not (funcall pred regval)))) (setq input "") (delete-minibuffer-contents) (minibuffer-message "Not matching")) @@ -517,7 +533,7 @@ or `never'." (lambda () (add-hook 'post-command-hook setup nil 'local)) (setq result (read-from-minibuffer prompt nil map nil nil - (register--preview-get-defaults types strs)))) + (register--preview-get-defaults pred strs)))) (cl-assert (and result (not (string= result ""))) nil "No register specified") (string-to-char result)) commit 1143a5273860fd6402aaf3fb6e1df39c31a3cc41 Author: Stefan Monnier Date: Wed Apr 30 07:51:12 2025 -0400 (register-preview-info): Delete struct type * lisp/register.el (register-preview-info): Delete struct type. (register-command-info): Return a list of types, instead. (register-read-with-preview-fancy): Adjust accordingly. diff --git a/lisp/register.el b/lisp/register.el index 104274c9d65..92026d6f2ff 100644 --- a/lisp/register.el +++ b/lisp/register.el @@ -184,60 +184,29 @@ This is the default value of the variable `register-preview-function'." (single-key-description (car r)) (register-describe-oneline (car r)))) -(cl-defstruct register-preview-info - "Store data for a specific register command. -TYPES holds the list of supported types of registers. - If nil, means it can operate on any register, even empty ones. - The t type means it can operate on any non-empty register. - The `null' type stands for the type of empty registers." - types) - (cl-defgeneric register-command-info (command) - "Return a `register-preview-info' object storing data for COMMAND." + "Return a list of types of registers to use for COMMAND." (ignore command)) (cl-defmethod register-command-info ((_command (eql insert-register))) - (make-register-preview-info ;; FIXME: This should not be hardcoded but computed based on whether ;; a given register type implements `register-val-insert'. - :types '(string number))) + '(string number)) (cl-defmethod register-command-info ((_command (eql jump-to-register))) - (make-register-preview-info ;; FIXME: This should not be hardcoded but computed based on whether ;; a given register type implements `register-val-jump-to'. - :types '(window frame marker kmacro - file buffer file-query))) + '(window frame marker kmacro + file buffer file-query)) (cl-defmethod register-command-info ((_command (eql view-register))) - (make-register-preview-info - :types '(t))) + '(t)) (cl-defmethod register-command-info ((_command (eql append-to-register))) - (make-register-preview-info - :types '(string null) ;;FIXME: Fails on rectangles! - )) + '(string null) ;;FIXME: Fails on rectangles! + ) (cl-defmethod register-command-info ((_command (eql prepend-to-register))) - (make-register-preview-info - :types '(string null) ;;FIXME: Fails on rectangles! - )) + '(string null) ;;FIXME: Fails on rectangles! + ) (cl-defmethod register-command-info ((_command (eql increment-register))) - (make-register-preview-info - :types '(string number null) ;;FIXME: Fails on rectangles! - )) -(cl-defmethod register-command-info ((_command (eql copy-to-register))) - (make-register-preview-info)) -(cl-defmethod register-command-info ((_command (eql point-to-register))) - (make-register-preview-info)) -(cl-defmethod register-command-info ((_command (eql number-to-register))) - (make-register-preview-info)) -(cl-defmethod register-command-info - ((_command (eql window-configuration-to-register))) - (make-register-preview-info)) -(cl-defmethod register-command-info ((_command (eql frameset-to-register))) - (make-register-preview-info)) -(cl-defmethod register-command-info ((_command (eql copy-rectangle-to-register))) - (make-register-preview-info)) -(cl-defmethod register-command-info ((_command (eql file-to-register))) - (make-register-preview-info)) -(cl-defmethod register-command-info ((_command (eql buffer-to-register))) - (make-register-preview-info)) + '(string number null) ;;FIXME: Fails on rectangles! + ) (defun register-preview-forward-line (arg) "Move to next or previous line in register preview buffer. @@ -444,19 +413,17 @@ or `never'." (map (let ((m (make-sparse-keymap))) (set-keymap-parent m minibuffer-local-map) m)) - (data (register-command-info this-command)) + (types (register-command-info this-command)) (enable-recursive-minibuffers t) - types result win strs + result win (msg (if (string-match ":? *\\'" prompt) (concat (substring prompt 0 (match-beginning 0)) " `%s'") "Using register `%s'")) - (noconfirm (memq register-use-preview '(nil never)))) - (if data - (setq types (register-preview-info-types data))) - (setq strs (mapcar (lambda (x) + (noconfirm (memq register-use-preview '(nil never))) + (strs (mapcar (lambda (x) (string (car x))) - (register-of-type-alist types))) + (register-of-type-alist types)))) (when (and types (not (memq 'null types)) (null strs)) (error "No suitable register")) (dolist (k (cons help-char help-event-list)) commit 3044d16b81b80e79339faf30560d4db4c59b3a97 Author: Stefan Monnier Date: Tue Apr 29 23:51:56 2025 -0400 (register-preview-info): Delete slot `act` * lisp/register.el (register-preview-info): Delete slot `act`. (register-command-info): Delete arg `:act`. (register--preview-get-defaults): Rename from `register--preview-get-defaults` and rewrite with, different args. (register-read-with-preview-fancy): Use it instead of `act`. diff --git a/lisp/register.el b/lisp/register.el index 89d4a857cfc..104274c9d65 100644 --- a/lisp/register.el +++ b/lisp/register.el @@ -189,9 +189,8 @@ This is the default value of the variable `register-preview-function'." TYPES holds the list of supported types of registers. If nil, means it can operate on any register, even empty ones. The t type means it can operate on any non-empty register. - The `null' type stands for the type of empty registers. -ACT is the type of action the command is doing on register." - types act) + The `null' type stands for the type of empty registers." + types) (cl-defgeneric register-command-info (command) "Return a `register-preview-info' object storing data for COMMAND." @@ -200,56 +199,45 @@ ACT is the type of action the command is doing on register." (make-register-preview-info ;; FIXME: This should not be hardcoded but computed based on whether ;; a given register type implements `register-val-insert'. - :types '(string number) - :act 'insert)) + :types '(string number))) (cl-defmethod register-command-info ((_command (eql jump-to-register))) (make-register-preview-info ;; FIXME: This should not be hardcoded but computed based on whether ;; a given register type implements `register-val-jump-to'. :types '(window frame marker kmacro - file buffer file-query) - :act 'jump)) + file buffer file-query))) (cl-defmethod register-command-info ((_command (eql view-register))) (make-register-preview-info - :types '(t) - :act 'view)) + :types '(t))) (cl-defmethod register-command-info ((_command (eql append-to-register))) (make-register-preview-info :types '(string null) ;;FIXME: Fails on rectangles! - :act 'modify)) + )) (cl-defmethod register-command-info ((_command (eql prepend-to-register))) (make-register-preview-info :types '(string null) ;;FIXME: Fails on rectangles! - :act 'modify)) + )) (cl-defmethod register-command-info ((_command (eql increment-register))) (make-register-preview-info :types '(string number null) ;;FIXME: Fails on rectangles! - :act 'modify)) + )) (cl-defmethod register-command-info ((_command (eql copy-to-register))) - (make-register-preview-info - :act 'set)) + (make-register-preview-info)) (cl-defmethod register-command-info ((_command (eql point-to-register))) - (make-register-preview-info - :act 'set)) + (make-register-preview-info)) (cl-defmethod register-command-info ((_command (eql number-to-register))) - (make-register-preview-info - :act 'set)) + (make-register-preview-info)) (cl-defmethod register-command-info ((_command (eql window-configuration-to-register))) - (make-register-preview-info - :act 'set)) + (make-register-preview-info)) (cl-defmethod register-command-info ((_command (eql frameset-to-register))) - (make-register-preview-info - :act 'set)) + (make-register-preview-info)) (cl-defmethod register-command-info ((_command (eql copy-rectangle-to-register))) - (make-register-preview-info - :act 'set)) + (make-register-preview-info)) (cl-defmethod register-command-info ((_command (eql file-to-register))) - (make-register-preview-info - :act 'set)) + (make-register-preview-info)) (cl-defmethod register-command-info ((_command (eql buffer-to-register))) - (make-register-preview-info - :act 'set)) + (make-register-preview-info)) (defun register-preview-forward-line (arg) "Move to next or previous line in register preview buffer. @@ -385,13 +373,13 @@ Format of each entry is controlled by the variable `register-preview-function'." (forward-line 1)) (not (eobp))) -(cl-defgeneric register-preview-get-defaults (action) - "Return default registers according to ACTION." - (ignore action)) -(cl-defmethod register-preview-get-defaults ((_action (eql set))) - (cl-loop for s in register-preview-default-keys - unless (assoc (string-to-char s) register-alist) - collect s)) +(defun register--preview-get-defaults (types strs) + "Return default registers according to TYPES and available registers. +STRS is the list of non-empty registers that match TYPES," + (unless types + (cl-loop for s in register-preview-default-keys + unless (member s strs) + collect s))) (defun register-read-with-preview (prompt) "Read register name, prompting with PROMPT; possibly show existing registers. @@ -458,21 +446,19 @@ or `never'." m)) (data (register-command-info this-command)) (enable-recursive-minibuffers t) - types result act win strs + types result win strs (msg (if (string-match ":? *\\'" prompt) (concat (substring prompt 0 (match-beginning 0)) " `%s'") "Using register `%s'")) (noconfirm (memq register-use-preview '(nil never)))) (if data - (setq types (register-preview-info-types data) - act (register-preview-info-act data)) - (setq act 'set)) + (setq types (register-preview-info-types data))) (setq strs (mapcar (lambda (x) (string (car x))) (register-of-type-alist types))) (when (and types (not (memq 'null types)) (null strs)) - (error "No register suitable for `%s'" act)) + (error "No suitable register")) (dolist (k (cons help-char help-event-list)) (define-key map (vector k) (lambda () @@ -564,7 +550,7 @@ or `never'." (lambda () (add-hook 'post-command-hook setup nil 'local)) (setq result (read-from-minibuffer prompt nil map nil nil - (register-preview-get-defaults act)))) + (register--preview-get-defaults types strs)))) (cl-assert (and result (not (string= result ""))) nil "No register specified") (string-to-char result)) commit 573b377e8c57d60ea4fa881641ed0f851858fe8e Author: Stefan Monnier Date: Tue Apr 29 23:36:23 2025 -0400 (register-preview-info): Delete slot `smatch` Use the `types` slot to carry that info instead. Replace the list of types `(all)` with `(t)` since `t` is the usual name of the "supertype of all types". Use the type `null` to represent the fact that empty registers can be used. Allow an empty list of types to stand for `(t null)`, i.e. any register even empty ones. * lisp/register.el (register-preview-info): Delete slot `smatch`. (register-command-info): Delete arg `:smatch`. Adjust `:types` instead. Fix the `copy-rectangle-to-register` case, which disallowed using an empty register. (register-of-type-alist): Adjust handling of `types` accordingly. (register-preview-1): Simplify. (register-read-with-preview-fancy): Use types instead of `smatch`. Use it also in place of `act`. diff --git a/lisp/register.el b/lisp/register.el index 00f2e08e66e..89d4a857cfc 100644 --- a/lisp/register.el +++ b/lisp/register.el @@ -186,11 +186,12 @@ This is the default value of the variable `register-preview-function'." (cl-defstruct register-preview-info "Store data for a specific register command. -TYPES are the supported types of registers. -ACT is the type of action the command is doing on register. -SMATCH accept a boolean value to say if the command accepts non-matching -registers." - types act smatch) +TYPES holds the list of supported types of registers. + If nil, means it can operate on any register, even empty ones. + The t type means it can operate on any non-empty register. + The `null' type stands for the type of empty registers. +ACT is the type of action the command is doing on register." + types act) (cl-defgeneric register-command-info (command) "Return a `register-preview-info' object storing data for COMMAND." @@ -200,69 +201,54 @@ registers." ;; FIXME: This should not be hardcoded but computed based on whether ;; a given register type implements `register-val-insert'. :types '(string number) - :act 'insert - :smatch t)) + :act 'insert)) (cl-defmethod register-command-info ((_command (eql jump-to-register))) (make-register-preview-info ;; FIXME: This should not be hardcoded but computed based on whether ;; a given register type implements `register-val-jump-to'. :types '(window frame marker kmacro file buffer file-query) - :act 'jump - :smatch t)) + :act 'jump)) (cl-defmethod register-command-info ((_command (eql view-register))) (make-register-preview-info - :types '(all) - :act 'view - :smatch t)) + :types '(t) + :act 'view)) (cl-defmethod register-command-info ((_command (eql append-to-register))) (make-register-preview-info - :types '(string) ;; FIXME: Fails on rectangles! - :act 'modify - :smatch t)) + :types '(string null) ;;FIXME: Fails on rectangles! + :act 'modify)) (cl-defmethod register-command-info ((_command (eql prepend-to-register))) (make-register-preview-info - :types '(string) ;;FIXME: Fails on rectangles! - :act 'modify - :smatch t)) + :types '(string null) ;;FIXME: Fails on rectangles! + :act 'modify)) (cl-defmethod register-command-info ((_command (eql increment-register))) (make-register-preview-info - :types '(string number) ;;FIXME: Fails on rectangles! - :act 'modify - :smatch t)) + :types '(string number null) ;;FIXME: Fails on rectangles! + :act 'modify)) (cl-defmethod register-command-info ((_command (eql copy-to-register))) (make-register-preview-info - :types '(all) :act 'set)) (cl-defmethod register-command-info ((_command (eql point-to-register))) (make-register-preview-info - :types '(all) :act 'set)) (cl-defmethod register-command-info ((_command (eql number-to-register))) (make-register-preview-info - :types '(all) :act 'set)) (cl-defmethod register-command-info ((_command (eql window-configuration-to-register))) (make-register-preview-info - :types '(all) :act 'set)) (cl-defmethod register-command-info ((_command (eql frameset-to-register))) (make-register-preview-info - :types '(all) :act 'set)) (cl-defmethod register-command-info ((_command (eql copy-rectangle-to-register))) (make-register-preview-info - :types '(all) - :act 'set - :smatch t)) + :act 'set)) (cl-defmethod register-command-info ((_command (eql file-to-register))) (make-register-preview-info - :types '(all) :act 'set)) (cl-defmethod register-command-info ((_command (eql buffer-to-register))) (make-register-preview-info - :types '(all) :act 'set)) (defun register-preview-forward-line (arg) @@ -340,7 +326,7 @@ satisfy `cl-typep', otherwise the new type should be defined with (defun register-of-type-alist (types) "Filter `register-alist' according to TYPES." - (if (memq 'all types) + (if (or (null types) (memq t types)) register-alist (cl-loop for register in register-alist when (memq (register-type register) types) @@ -375,9 +361,9 @@ This is the preview function used with the `register-read-with-preview-fancy' function. If SHOW-EMPTY is non-nil, show the preview window even if no registers. Optional argument TYPES (a list) specifies the types of register to show; -if it is nil, show all the registers. See `register-type' for suitable types. +if it is nil or t, show all the registers. See `register-type' for suitable types. Format of each entry is controlled by the variable `register-preview-function'." - (let ((registers (register-of-type-alist (or types '(all))))) + (let ((registers (register-of-type-alist types))) (when (or show-empty (consp registers)) (with-current-buffer-window buffer @@ -472,7 +458,7 @@ or `never'." m)) (data (register-command-info this-command)) (enable-recursive-minibuffers t) - types result act win strs smatch + types result act win strs (msg (if (string-match ":? *\\'" prompt) (concat (substring prompt 0 (match-beginning 0)) " `%s'") @@ -480,14 +466,12 @@ or `never'." (noconfirm (memq register-use-preview '(nil never)))) (if data (setq types (register-preview-info-types data) - act (register-preview-info-act data) - smatch (register-preview-info-smatch data)) - (setq types '(all) - act 'set)) + act (register-preview-info-act data)) + (setq act 'set)) (setq strs (mapcar (lambda (x) (string (car x))) (register-of-type-alist types))) - (when (and (memq act '(insert jump view)) (null strs)) + (when (and types (not (memq 'null types)) (null strs)) (error "No register suitable for `%s'" act)) (dolist (k (cons help-char help-event-list)) (define-key map (vector k) @@ -512,7 +496,7 @@ or `never'." ;; Only keep the first of the new chars. (let ((new (substring input 1 2)) (old (substring input 0 1))) - (setq input (if (or (null smatch) + (setq input (if (or (null types) (member new strs)) new old)) (delete-minibuffer-contents) @@ -522,7 +506,7 @@ or `never'." (when (and (string= new old) (eq register-use-preview 'insist)) (setq noconfirm t)))) - (when (and smatch (not (string= input "")) + (when (and types (not (string= input "")) (not (member input strs))) (setq input "") (delete-minibuffer-contents) commit 215246108e1d35f5172c76549c71ffae901ab840 Author: Stefan Monnier Date: Tue Apr 29 22:57:41 2025 -0400 (register-preview-info): Delete `msg` slot * lisp/register.el (register-preview-info): Remove `msg` slot. (register-command-info): Delete `:msg` args. (register-read-with-preview-fancy): Compute `msg` from the `prompt`. diff --git a/lisp/register.el b/lisp/register.el index f8f6488fee4..00f2e08e66e 100644 --- a/lisp/register.el +++ b/lisp/register.el @@ -187,11 +187,10 @@ This is the default value of the variable `register-preview-function'." (cl-defstruct register-preview-info "Store data for a specific register command. TYPES are the supported types of registers. -MSG is the minibuffer message to show when a register is selected. ACT is the type of action the command is doing on register. SMATCH accept a boolean value to say if the command accepts non-matching registers." - types msg act smatch) + types act smatch) (cl-defgeneric register-command-info (command) "Return a `register-preview-info' object storing data for COMMAND." @@ -201,7 +200,6 @@ registers." ;; FIXME: This should not be hardcoded but computed based on whether ;; a given register type implements `register-val-insert'. :types '(string number) - :msg "Insert register `%s'" :act 'insert :smatch t)) (cl-defmethod register-command-info ((_command (eql jump-to-register))) @@ -210,74 +208,61 @@ registers." ;; a given register type implements `register-val-jump-to'. :types '(window frame marker kmacro file buffer file-query) - :msg "Jump to register `%s'" :act 'jump :smatch t)) (cl-defmethod register-command-info ((_command (eql view-register))) (make-register-preview-info :types '(all) - :msg "View register `%s'" :act 'view :smatch t)) (cl-defmethod register-command-info ((_command (eql append-to-register))) (make-register-preview-info :types '(string) ;; FIXME: Fails on rectangles! - :msg "Append to register `%s'" :act 'modify :smatch t)) (cl-defmethod register-command-info ((_command (eql prepend-to-register))) (make-register-preview-info :types '(string) ;;FIXME: Fails on rectangles! - :msg "Prepend to register `%s'" :act 'modify :smatch t)) (cl-defmethod register-command-info ((_command (eql increment-register))) (make-register-preview-info :types '(string number) ;;FIXME: Fails on rectangles! - :msg "Increment register `%s'" :act 'modify :smatch t)) (cl-defmethod register-command-info ((_command (eql copy-to-register))) (make-register-preview-info :types '(all) - :msg "Copy to register `%s'" :act 'set)) (cl-defmethod register-command-info ((_command (eql point-to-register))) (make-register-preview-info :types '(all) - :msg "Point to register `%s'" :act 'set)) (cl-defmethod register-command-info ((_command (eql number-to-register))) (make-register-preview-info :types '(all) - :msg "Number to register `%s'" :act 'set)) (cl-defmethod register-command-info ((_command (eql window-configuration-to-register))) (make-register-preview-info :types '(all) - :msg "Window configuration to register `%s'" :act 'set)) (cl-defmethod register-command-info ((_command (eql frameset-to-register))) (make-register-preview-info :types '(all) - :msg "Frameset to register `%s'" :act 'set)) (cl-defmethod register-command-info ((_command (eql copy-rectangle-to-register))) (make-register-preview-info :types '(all) - :msg "Copy rectangle to register `%s'" :act 'set :smatch t)) (cl-defmethod register-command-info ((_command (eql file-to-register))) (make-register-preview-info :types '(all) - :msg "File to register `%s'" :act 'set)) (cl-defmethod register-command-info ((_command (eql buffer-to-register))) (make-register-preview-info :types '(all) - :msg "Buffer to register `%s'" :act 'set)) (defun register-preview-forward-line (arg) @@ -487,15 +472,17 @@ or `never'." m)) (data (register-command-info this-command)) (enable-recursive-minibuffers t) - types msg result act win strs smatch + types result act win strs smatch + (msg (if (string-match ":? *\\'" prompt) + (concat (substring prompt 0 (match-beginning 0)) + " `%s'") + "Using register `%s'")) (noconfirm (memq register-use-preview '(nil never)))) (if data (setq types (register-preview-info-types data) - msg (register-preview-info-msg data) act (register-preview-info-act data) smatch (register-preview-info-smatch data)) (setq types '(all) - msg "Overwrite register `%s'" act 'set)) (setq strs (mapcar (lambda (x) (string (car x))) commit 3bc1c13661a334fedd8967188715cf85ef2af992 Author: Stefan Monnier Date: Tue Apr 29 22:54:41 2025 -0400 (register-preview-info): Delete `noconfirm` slot * lisp/register.el (register-preview-info): Remove `noconfirm` slot. (register-command-info): Delete `:noconfirm` args. (register-read-with-preview-fancy): Hardcode the `noconfirm` setting because it was always exactly the same anyway. diff --git a/lisp/register.el b/lisp/register.el index a1bffb5529b..f8f6488fee4 100644 --- a/lisp/register.el +++ b/lisp/register.el @@ -190,9 +190,8 @@ TYPES are the supported types of registers. MSG is the minibuffer message to show when a register is selected. ACT is the type of action the command is doing on register. SMATCH accept a boolean value to say if the command accepts non-matching -registers. -If NOCONFIRM is non-nil, request confirmation of register name by RET." - types msg act smatch noconfirm) +registers." + types msg act smatch) (cl-defgeneric register-command-info (command) "Return a `register-preview-info' object storing data for COMMAND." @@ -204,8 +203,7 @@ If NOCONFIRM is non-nil, request confirmation of register name by RET." :types '(string number) :msg "Insert register `%s'" :act 'insert - :smatch t - :noconfirm (memq register-use-preview '(nil never)))) + :smatch t)) (cl-defmethod register-command-info ((_command (eql jump-to-register))) (make-register-preview-info ;; FIXME: This should not be hardcoded but computed based on whether @@ -214,86 +212,73 @@ If NOCONFIRM is non-nil, request confirmation of register name by RET." file buffer file-query) :msg "Jump to register `%s'" :act 'jump - :smatch t - :noconfirm (memq register-use-preview '(nil never)))) + :smatch t)) (cl-defmethod register-command-info ((_command (eql view-register))) (make-register-preview-info :types '(all) :msg "View register `%s'" :act 'view - :noconfirm (memq register-use-preview '(nil never)) :smatch t)) (cl-defmethod register-command-info ((_command (eql append-to-register))) (make-register-preview-info :types '(string) ;; FIXME: Fails on rectangles! :msg "Append to register `%s'" :act 'modify - :noconfirm (memq register-use-preview '(nil never)) :smatch t)) (cl-defmethod register-command-info ((_command (eql prepend-to-register))) (make-register-preview-info :types '(string) ;;FIXME: Fails on rectangles! :msg "Prepend to register `%s'" :act 'modify - :noconfirm (memq register-use-preview '(nil never)) :smatch t)) (cl-defmethod register-command-info ((_command (eql increment-register))) (make-register-preview-info :types '(string number) ;;FIXME: Fails on rectangles! :msg "Increment register `%s'" :act 'modify - :noconfirm (memq register-use-preview '(nil never)) :smatch t)) (cl-defmethod register-command-info ((_command (eql copy-to-register))) (make-register-preview-info :types '(all) :msg "Copy to register `%s'" - :act 'set - :noconfirm (memq register-use-preview '(nil never)))) + :act 'set)) (cl-defmethod register-command-info ((_command (eql point-to-register))) (make-register-preview-info :types '(all) :msg "Point to register `%s'" - :act 'set - :noconfirm (memq register-use-preview '(nil never)))) + :act 'set)) (cl-defmethod register-command-info ((_command (eql number-to-register))) (make-register-preview-info :types '(all) :msg "Number to register `%s'" - :act 'set - :noconfirm (memq register-use-preview '(nil never)))) + :act 'set)) (cl-defmethod register-command-info ((_command (eql window-configuration-to-register))) (make-register-preview-info :types '(all) :msg "Window configuration to register `%s'" - :act 'set - :noconfirm (memq register-use-preview '(nil never)))) + :act 'set)) (cl-defmethod register-command-info ((_command (eql frameset-to-register))) (make-register-preview-info :types '(all) :msg "Frameset to register `%s'" - :act 'set - :noconfirm (memq register-use-preview '(nil never)))) + :act 'set)) (cl-defmethod register-command-info ((_command (eql copy-rectangle-to-register))) (make-register-preview-info :types '(all) :msg "Copy rectangle to register `%s'" :act 'set - :noconfirm (memq register-use-preview '(nil never)) :smatch t)) (cl-defmethod register-command-info ((_command (eql file-to-register))) (make-register-preview-info :types '(all) :msg "File to register `%s'" - :act 'set - :noconfirm (memq register-use-preview '(nil never)))) + :act 'set)) (cl-defmethod register-command-info ((_command (eql buffer-to-register))) (make-register-preview-info :types '(all) :msg "Buffer to register `%s'" - :act 'set - :noconfirm (memq register-use-preview '(nil never)))) + :act 'set)) (defun register-preview-forward-line (arg) "Move to next or previous line in register preview buffer. @@ -502,13 +487,13 @@ or `never'." m)) (data (register-command-info this-command)) (enable-recursive-minibuffers t) - types msg result act win strs smatch noconfirm) + types msg result act win strs smatch + (noconfirm (memq register-use-preview '(nil never)))) (if data (setq types (register-preview-info-types data) msg (register-preview-info-msg data) act (register-preview-info-act data) - smatch (register-preview-info-smatch data) - noconfirm (register-preview-info-noconfirm data)) + smatch (register-preview-info-smatch data)) (setq types '(all) msg "Overwrite register `%s'" act 'set)) @@ -600,7 +585,7 @@ or `never'." (with-selected-window (minibuffer-window) (minibuffer-message msg (key-description pat))) - ;; `:noconfirm' is specified explicitly, don't ask for + ;; `noconfirm' is specified explicitly, don't ask for ;; confirmation and exit immediately (bug#66394). (setq result pat) (exit-minibuffer)))))))) commit fcaec1ff0d6be18d4fa3682401ced30741be6243 Author: Stefan Monnier Date: Tue Apr 29 22:48:33 2025 -0400 (register-preview-function): Use a single default again * lisp/register.el (register-preview-function): Revert to Emacs<30 value. (register-use-preview, register-preview, register-preview-1): Don't touch it. (register-preview-default): Merge it with `register-preview-default-1`. (register--preview-function): Delete function. diff --git a/lisp/register.el b/lisp/register.el index 8a71fd70a79..a1bffb5529b 100644 --- a/lisp/register.el +++ b/lisp/register.el @@ -120,12 +120,11 @@ provided function, `register-read-with-preview-traditional', behaves the same as in Emacs 29 and before: no filtering, no navigation, and no defaults.") -(defvar register-preview-function nil +(defvar register-preview-function #'register-preview-default "Function to format a register for previewing. Called with one argument, a cons (NAME . CONTENTS), as found in `register-alist'. The function should return a string, the -description of the argument. The function to use is set according -to the value of `register--read-with-preview-function'.") +description of the argument.") (defcustom register-use-preview 'traditional "Whether register commands show preview of registers with non-nil values. @@ -158,8 +157,7 @@ behavior of Emacs 29 and before." (setq register--read-with-preview-function (if (eq val 'traditional) #'register-read-with-preview-traditional - #'register-read-with-preview-fancy)) - (setq register-preview-function nil))) + #'register-read-with-preview-fancy)))) (defun get-register (register) "Return contents of Emacs register named REGISTER, or nil if none." @@ -179,32 +177,13 @@ See the documentation of the variable `register-alist' for possible VALUEs." (substring d (match-end 0)) d))) -(defun register-preview-default-1 (r) - "Function used to format a register for fancy previewing. -This is used as the value of the variable `register-preview-function' -when `register-use-preview' is set to t or nil." - (format "%s: %s\n" - (propertize (string (car r)) - 'display (single-key-description (car r))) - (register-describe-oneline (car r)))) - (defun register-preview-default (r) - "Function used to format a register for traditional preview. -This is the default value of the variable `register-preview-function', -and is used when `register-use-preview' is set to `traditional'." + "Function used to format a register for previewing. +This is the default value of the variable `register-preview-function'." (format "%s: %s\n" (single-key-description (car r)) (register-describe-oneline (car r)))) -(cl-defgeneric register--preview-function (read-preview-function) - "Return a function to format registers for previewing by READ-PREVIEW-FUNCTION.") -(cl-defmethod register--preview-function ((_read-preview-function - (eql register-read-with-preview-traditional))) - #'register-preview-default) -(cl-defmethod register--preview-function ((_read-preview-function - (eql register-read-with-preview-fancy))) - #'register-preview-default-1) - (cl-defstruct register-preview-info "Store data for a specific register command. TYPES are the supported types of registers. @@ -332,7 +311,7 @@ Do nothing when defining or executing kmacros." pos) (goto-char (if ovs (overlay-start (car ovs)) - (point-min))) + (point-min))) (setq pos (point)) (and ovs (forward-line arg)) (when (and (funcall fn) @@ -401,9 +380,6 @@ satisfy `cl-typep', otherwise the new type should be defined with "Pop up a window showing the preview of registers in BUFFER. If SHOW-EMPTY is non-nil, show the preview window even if no registers. Format of each entry is controlled by the variable `register-preview-function'." - (unless register-preview-function - (setq register-preview-function (register--preview-function - register--read-with-preview-function))) (when (or show-empty (consp register-alist)) (with-current-buffer-window buffer register-preview-display-buffer-alist @@ -431,9 +407,6 @@ If SHOW-EMPTY is non-nil, show the preview window even if no registers. Optional argument TYPES (a list) specifies the types of register to show; if it is nil, show all the registers. See `register-type' for suitable types. Format of each entry is controlled by the variable `register-preview-function'." - (unless register-preview-function - (setq register-preview-function (register--preview-function - register--read-with-preview-function))) (let ((registers (register-of-type-alist (or types '(all))))) (when (or show-empty (consp registers)) (with-current-buffer-window @@ -582,7 +555,7 @@ or `never'." (setq input "") (delete-minibuffer-contents) (minibuffer-message "Not matching")) - (when (not (string= input pat)) + (when (not (string= input pat)) ;; FIXME: Why this test? (setq pat input)))) (unless (or (string= pat "") (get-text-property (minibuffer-prompt-end) commit 44069711e87c3a56f36a917ee46d673f77e0c733 Author: Stefan Monnier Date: Wed Apr 30 12:22:25 2025 -0400 (register-read-with-preview-fancy): Fix handling of control chars The code assumed that the string returned by `register-preview-function` has the register name as the first char. This was an incompatible change which broke packages that set this var, such as `calculator.el` and others. Remove this assumption by recording the register names in the preview buffer on a new `register--name` text property. While at it, fix a few other problems where control chars were not pretty printed. * lisp/register.el (register-preview-1): Remember the raw register name in the `register--name` text property. (register-preview-forward-line): Use the `register--name` text property. (register--find-preview): New function. (register-read-with-preview-fancy): Use it. If the last command inserted more than one char, only keep the first of the new chars. Make sure control chars are pretty printed in the minibuffer. including minibuffer messages. diff --git a/lisp/register.el b/lisp/register.el index 8fa141a4ec6..8a71fd70a79 100644 --- a/lisp/register.el +++ b/lisp/register.el @@ -326,8 +326,7 @@ Do nothing when defining or executing kmacros." (let ((fn (if (> arg 0) #'eobp #'bobp)) (posfn (if (> arg 0) #'point-min - (lambda () (1- (point-max))))) - str) + (lambda () (1- (point-max)))))) (with-current-buffer "*Register Preview*" (let ((ovs (overlays-in (point-min) (point-max))) pos) @@ -339,12 +338,11 @@ Do nothing when defining or executing kmacros." (when (and (funcall fn) (or (> arg 0) (eql pos (point)))) (goto-char (funcall posfn))) - (setq str (buffer-substring-no-properties - (pos-bol) (1+ (pos-bol)))) - (remove-overlays) - (with-selected-window (minibuffer-window) - (delete-minibuffer-contents) - (insert str))))))) + (let ((reg (get-text-property (pos-bol) 'register--name))) + (remove-overlays) + (with-selected-window (minibuffer-window) + (delete-minibuffer-contents) + (insert (string reg))))))))) (defun register-preview-next () "Go to next line in the register preview buffer." @@ -444,10 +442,19 @@ Format of each entry is controlled by the variable `register-preview-function'." nil (with-current-buffer standard-output (setq cursor-in-non-selected-windows nil) - (mapc (lambda (elem) - (when (get-register (car elem)) - (insert (funcall register-preview-function elem)))) - registers)))))) + (dolist (elem registers) + (when (cdr elem) + (let ((beg (point))) + (insert (funcall register-preview-function elem)) + (put-text-property beg (point) + 'register--name (car elem)))))))))) + +(defun register--find-preview (regname) + (goto-char (point-min)) + (while (not (or (eobp) + (eql regname (get-text-property (point) 'register--name)))) + (forward-line 1)) + (not (eobp))) (cl-defgeneric register-preview-get-defaults (action) "Return default registers according to ACTION." @@ -557,7 +564,8 @@ or `never'." (with-selected-window (minibuffer-window) (let ((input (minibuffer-contents))) (when (> (length input) 1) - (let ((new (substring input 1)) + ;; Only keep the first of the new chars. + (let ((new (substring input 1 2)) (old (substring input 0 1))) (setq input (if (or (null smatch) (member new strs)) @@ -576,6 +584,12 @@ or `never'." (minibuffer-message "Not matching")) (when (not (string= input pat)) (setq pat input)))) + (unless (or (string= pat "") + (get-text-property (minibuffer-prompt-end) + 'display)) + (put-text-property (minibuffer-prompt-end) + (1+ (minibuffer-prompt-end)) + 'display (key-description pat))) (if (setq win (get-buffer-window buffer)) (with-selected-window win (when (or (eq noconfirm t) ; Using insist @@ -594,24 +608,25 @@ or `never'." (goto-char (point-min)) (remove-overlays) (unless (string= pat "") - (if (re-search-forward (concat "^" pat) nil t) - (progn (move-overlay - ov - (match-beginning 0) (pos-eol)) + (if (register--find-preview (aref pat 0)) + (progn (move-overlay ov (point) (pos-eol)) (overlay-put ov 'face 'match) (when msg (with-selected-window (minibuffer-window) - (minibuffer-message msg pat)))) + (minibuffer-message + msg (key-description pat))))) (with-selected-window (minibuffer-window) (minibuffer-message - "Register `%s' is empty" pat)))))) + "Register `%s' is empty" + (key-description pat))))))) (unless (string= pat "") (with-selected-window (minibuffer-window) (if (and (member pat strs) (null noconfirm)) (with-selected-window (minibuffer-window) - (minibuffer-message msg pat)) + (minibuffer-message + msg (key-description pat))) ;; `:noconfirm' is specified explicitly, don't ask for ;; confirmation and exit immediately (bug#66394). (setq result pat) commit 30b9694f2af20ccb25b4994a71b805f597448630 Author: Stefan Monnier Date: Wed Apr 30 07:41:03 2025 -0400 register.el: Fix some inconsistencies in the code * lisp/frameset.el (register-val-jump-to): Fix `:cleanup-frames`. The code did not obey its documented behavior and matched against the wrong symbols. * lisp/register.el (register-command-info) , : Remove `number` from the `:types` argument since those operations fail on numbers. diff --git a/lisp/frameset.el b/lisp/frameset.el index 9de16750c44..cbdbc1ac239 100644 --- a/lisp/frameset.el +++ b/lisp/frameset.el @@ -1412,15 +1412,15 @@ All keyword parameters default to nil." :reuse-frames (if arg t 'match) :cleanup-frames (if arg ;; delete frames - nil + t ;; iconify frames (lambda (frame action) (pcase action - ('rejected (iconify-frame frame)) + (:rejected (iconify-frame frame)) ;; In the unexpected case that a frame was a candidate ;; (matching frame id) and yet not restored, remove it ;; because it is in fact a duplicate. - ('ignored (delete-frame frame)))))) + (:ignored (delete-frame frame)))))) ;; Restore selected frame, buffer and point. (let ((frame (frameset-frame-with-id (frameset-register-frame-id data))) diff --git a/lisp/register.el b/lisp/register.el index c5a150c8f25..8fa141a4ec6 100644 --- a/lisp/register.el +++ b/lisp/register.el @@ -220,6 +220,8 @@ If NOCONFIRM is non-nil, request confirmation of register name by RET." (ignore command)) (cl-defmethod register-command-info ((_command (eql insert-register))) (make-register-preview-info + ;; FIXME: This should not be hardcoded but computed based on whether + ;; a given register type implements `register-val-insert'. :types '(string number) :msg "Insert register `%s'" :act 'insert @@ -227,6 +229,8 @@ If NOCONFIRM is non-nil, request confirmation of register name by RET." :noconfirm (memq register-use-preview '(nil never)))) (cl-defmethod register-command-info ((_command (eql jump-to-register))) (make-register-preview-info + ;; FIXME: This should not be hardcoded but computed based on whether + ;; a given register type implements `register-val-jump-to'. :types '(window frame marker kmacro file buffer file-query) :msg "Jump to register `%s'" @@ -242,21 +246,21 @@ If NOCONFIRM is non-nil, request confirmation of register name by RET." :smatch t)) (cl-defmethod register-command-info ((_command (eql append-to-register))) (make-register-preview-info - :types '(string number) + :types '(string) ;; FIXME: Fails on rectangles! :msg "Append to register `%s'" :act 'modify :noconfirm (memq register-use-preview '(nil never)) :smatch t)) (cl-defmethod register-command-info ((_command (eql prepend-to-register))) (make-register-preview-info - :types '(string number) + :types '(string) ;;FIXME: Fails on rectangles! :msg "Prepend to register `%s'" :act 'modify :noconfirm (memq register-use-preview '(nil never)) :smatch t)) (cl-defmethod register-command-info ((_command (eql increment-register))) (make-register-preview-info - :types '(string number) + :types '(string number) ;;FIXME: Fails on rectangles! :msg "Increment register `%s'" :act 'modify :noconfirm (memq register-use-preview '(nil never)) commit e760e580191dd82890f8653f5538a2a7378ff26d Author: Stefan Monnier Date: Tue Apr 29 22:50:30 2025 -0400 lisp/register.el: Minor cosmetics Remove redundant `:group` arguments. Prefer #' to quote function names. Fix some markup on symbol names in docstrings. diff --git a/lisp/register.el b/lisp/register.el index cdb769991f4..c5a150c8f25 100644 --- a/lisp/register.el +++ b/lisp/register.el @@ -90,7 +90,6 @@ A list of the form (FRAME-CONFIGURATION POSITION) When collecting text with \\[append-to-register] (or \\[prepend-to-register]), contents of this register is added to the beginning (or end, respectively) of the marked text." - :group 'register :type '(choice (const :tag "None" nil) (character :tag "Use register" :value ?+))) @@ -100,10 +99,9 @@ If nil, do not show register previews, unless `help-char' (or a member of `help-event-list') is pressed. This variable has no effect when `register-use-preview' is set to any -value except \\='traditional." +value except `traditional'." :version "24.4" - :type '(choice number (const :tag "No preview unless requested" nil)) - :group 'register) + :type '(choice number (const :tag "No preview unless requested" nil))) (defcustom register-preview-default-keys (mapcar #'string (number-sequence ?a ?z)) "Default keys for setting a new register." @@ -193,7 +191,7 @@ when `register-use-preview' is set to t or nil." (defun register-preview-default (r) "Function used to format a register for traditional preview. This is the default value of the variable `register-preview-function', -and is used when `register-use-preview' is set to \\='traditional." +and is used when `register-use-preview' is set to `traditional'." (format "%s: %s\n" (single-key-description (car r)) (register-describe-oneline (car r)))) @@ -474,7 +472,7 @@ If `help-char' (or a member of `help-event-list') is pressed, display preview window unconditionally. This function is used as the value of `register--read-with-preview-function' -when `register-use-preview' is set to \\='traditional." +when `register-use-preview' is set to `traditional'." (let* ((buffer "*Register Preview*") (timer (when (numberp register-preview-delay) (run-with-timer register-preview-delay nil @@ -509,8 +507,8 @@ If `help-char' (or a member of `help-event-list') is pressed, display preview window regardless. This function is used as the value of `register--read-with-preview-function' -when `register-use-preview' is set to any value other than \\='traditional -or \\='never." +when `register-use-preview' is set to any value other than `traditional' +or `never'." (let* ((buffer "*Register Preview*") (buffer1 "*Register quick preview*") (buf (if register-use-preview buffer buffer1)) @@ -543,14 +541,14 @@ or \\='never." (unless (get-buffer-window buf) (with-selected-window (minibuffer-selected-window) (register-preview-1 buffer 'show-empty types)))))) - (define-key map (kbd "") 'register-preview-next) - (define-key map (kbd "") 'register-preview-previous) - (define-key map (kbd "C-n") 'register-preview-next) - (define-key map (kbd "C-p") 'register-preview-previous) + (define-key map (kbd "") #'register-preview-next) + (define-key map (kbd "") #'register-preview-previous) + (define-key map (kbd "C-n") #'register-preview-next) + (define-key map (kbd "C-p") #'register-preview-previous) (unless (or executing-kbd-macro (eq register-use-preview 'never)) (register-preview-1 buf nil types)) (unwind-protect - (let ((setup + (let ((setup ;; FIXME: Weird name for a `post-command-hook' function. (lambda () (with-selected-window (minibuffer-window) (let ((input (minibuffer-contents))) @@ -639,7 +637,7 @@ Interactively, prompt for REGISTER using `register-read-with-preview'." "Point to register: ")) current-prefix-arg)) ;; Turn the marker into a file-ref if the buffer is killed. - (add-hook 'kill-buffer-hook 'register-swap-out nil t) + (add-hook 'kill-buffer-hook #'register-swap-out nil t) (set-register register ;; FIXME: How does this `current-frame-configuration' differ ;; in practice with what `frameset-to-register' does? @@ -683,7 +681,7 @@ Interactively, prompt for REGISTER using `register-read-with-preview'." (make-obsolete 'frame-configuration-to-register 'frameset-to-register "24.4") -(defalias 'register-to-point 'jump-to-register) +(defalias 'register-to-point #'jump-to-register) (defun jump-to-register (register &optional delete) "Go to location stored in REGISTER, or restore configuration stored there. Push the mark if going to the location moves point, unless called in succession. commit eb6a50d3e3f3c348a7fbdb2dfcbf87425ca6e5cd Author: Eli Zaretskii Date: Wed Apr 30 16:16:30 2025 +0300 ; Fix last change (do not merge to master). diff --git a/lisp/international/fontset.el b/lisp/international/fontset.el index 38f837362c8..7e627d2ae7c 100644 --- a/lisp/international/fontset.el +++ b/lisp/international/fontset.el @@ -857,18 +857,7 @@ pahawh-hmong medefaidrin znamenny-musical-notation - khudawadi - khojki - mahajani - sogdian - old-sogdian old-turkic - nabataean - palmyrene - linear-a - linear-b - caucasian-albanian - elbasan byzantine-musical-symbol musical-symbol ancient-greek-musical-notation commit e1e052501b38e486343fc04fb5f5a6e29b3bcd11 Author: Eli Zaretskii Date: Wed Apr 30 16:13:53 2025 +0300 Add 3 scripts to fontset setup * lisp/international/fontset.el (setup-default-fontset) (script-representative-chars): Add support for Avestan, Old Turkic and Chakma. Patch by Werner Lemberg . Do not merge to master. diff --git a/lisp/international/fontset.el b/lisp/international/fontset.el index eeded92085f..38f837362c8 100644 --- a/lisp/international/fontset.el +++ b/lisp/international/fontset.el @@ -243,6 +243,8 @@ (lydian #x10920) (kharoshthi #x10A00) (manichaean #x10AC0) + (avestan #x10B00) + (old-turkic #x10C00 #x10C01) (hanifi-rohingya #x10D00 #x10D24 #x10D39) (yezidi #x10E80) (old-sogdian #x10F00) @@ -252,6 +254,7 @@ (old-uyghur #x10F70) (brahmi #x11013 #x11045 #x11052 #x11065) (kaithi #x1108D #x110B0 #x110BD) + (chakma #x11103 #x11127) (mahajani #x11150) (sharada #x11191 #x111B3 #x111CD) (khojki #x11200) @@ -832,11 +835,13 @@ yezidi kharoshthi manichaean + avestan chorasmian elymaic old-uyghur brahmi kaithi + chakma sharada grantha tirhuta @@ -852,6 +857,18 @@ pahawh-hmong medefaidrin znamenny-musical-notation + khudawadi + khojki + mahajani + sogdian + old-sogdian + old-turkic + nabataean + palmyrene + linear-a + linear-b + caucasian-albanian + elbasan byzantine-musical-symbol musical-symbol ancient-greek-musical-notation commit cb701f95c61e95298fb7d06f9f98f017dadfbcfe Author: Eli Zaretskii Date: Wed Apr 30 16:08:15 2025 +0300 ; Improve last change * lisp/international/fontset.el (script-representative-chars): Improve last change by adding more representative chars. diff --git a/lisp/international/fontset.el b/lisp/international/fontset.el index 09ed449f08f..083c3b1ad3c 100644 --- a/lisp/international/fontset.el +++ b/lisp/international/fontset.el @@ -245,7 +245,7 @@ (kharoshthi #x10A00) (manichaean #x10AC0) (avestan #x10B00) - (old-turkic #x10C00) + (old-turkic #x10C00 #x10C01) (hanifi-rohingya #x10D00 #x10D24 #x10D39) (garay #x10D50 #x10D70 #x10D4A #x10D41) (yezidi #x10E80) @@ -256,7 +256,7 @@ (old-uyghur #x10F70) (brahmi #x11013 #x11045 #x11052 #x11065) (kaithi #x1108D #x110B0 #x110BD) - (chakma #x11103) + (chakma #x11103 #x11127) (mahajani #x11150) (sharada #x11191 #x111B3 #x111CD) (khojki #x11200) commit 9c98b6cbd37fb3d73424702b8a175e5f323b1c2d Author: Werner Lemberg Date: Wed Apr 30 14:31:31 2025 +0200 Improve support for Avestan, Old Turkic, and Chakma * lisp/international/fontset.el (script-representative-chars, setup-default-fontset): Add support for Avestan, Old Turkic, and Chakma. diff --git a/lisp/international/fontset.el b/lisp/international/fontset.el index aaa72f961bc..09ed449f08f 100644 --- a/lisp/international/fontset.el +++ b/lisp/international/fontset.el @@ -244,6 +244,8 @@ (lydian #x10920) (kharoshthi #x10A00) (manichaean #x10AC0) + (avestan #x10B00) + (old-turkic #x10C00) (hanifi-rohingya #x10D00 #x10D24 #x10D39) (garay #x10D50 #x10D70 #x10D4A #x10D41) (yezidi #x10E80) @@ -254,6 +256,7 @@ (old-uyghur #x10F70) (brahmi #x11013 #x11045 #x11052 #x11065) (kaithi #x1108D #x110B0 #x110BD) + (chakma #x11103) (mahajani #x11150) (sharada #x11191 #x111B3 #x111CD) (khojki #x11200) @@ -846,11 +849,13 @@ yezidi kharoshthi manichaean + avestan chorasmian elymaic old-uyghur brahmi kaithi + chakma sharada grantha tirhuta @@ -871,6 +876,7 @@ mahajani sogdian old-sogdian + old-turkic nabataean palmyrene linear-a commit 6bb3c6f9e181bb0279457c4f74b86fae03a4c68c Merge: 606e7b73bac cc5b1a01a2c Author: Eli Zaretskii Date: Wed Apr 30 07:14:23 2025 -0400 Merge from origin/emacs-30 cc5b1a01a2c ; * doc/misc/efaq-w32.texi (Location of init file): Fix a... 6c2aaedfceb Fix compilation errors in emacsclient.c with MinGW GCC 15 d56e5ba97ee ; * etc/DEBUG: Add link to GCC bug #78685. 80cbd1e31cc ; Fix key notation in Introduction to Emacs Lisp 1224e5fd961 ; * lisp/files.el (revert-buffer-restore-functions): Doc ... 79e7eeb3296 ; Improve documentation of 'format-time-string' 2838b64fc8b ; * lisp/textmodes/text-mode.el (text-mode-variant): Fix ... 9adb05422ea ; Improve obsolescence of 'text-mode-variant' 4858d818488 ; * lisp/files.el (revert-buffer-restore-functions): Doc ... 2a8e223b8d7 ; Mention early-init file in Emacs FAQ for Windows 14c707b42d9 ; Isearch: Fix key bindings in docstrings commit cc5b1a01a2c20e48fc4469cf0efd2bea7731ce58 Author: Eli Zaretskii Date: Wed Apr 30 14:10:25 2025 +0300 ; * doc/misc/efaq-w32.texi (Location of init file): Fix a typo. diff --git a/doc/misc/efaq-w32.texi b/doc/misc/efaq-w32.texi index 0a0ac539de5..e50716ff654 100644 --- a/doc/misc/efaq-w32.texi +++ b/doc/misc/efaq-w32.texi @@ -376,7 +376,7 @@ looked up and loaded. @cindex .emacs.d @cindex _emacs @cindex init.el -@cinde early-init.el +@cindex early-init.el @cindex registry, setting the HOME directory in On Windows, the @file{.emacs} init file may be called @file{_emacs} for commit 6c2aaedfcebb310e0c948d6972f90cc7d96193f9 Author: Eli Zaretskii Date: Wed Apr 30 14:06:44 2025 +0300 Fix compilation errors in emacsclient.c with MinGW GCC 15 * lib-src/emacsclient.c (set_fg, get_wc): Declare using actual function signatures. (w32_give_focus): Cast return value of 'GetProcAddress' to correct pointer types. (Bug#78160) diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c index 2cf90f4039b..ddfe19ffbd6 100644 --- a/lib-src/emacsclient.c +++ b/lib-src/emacsclient.c @@ -1715,8 +1715,13 @@ set_socket (bool no_exit_if_error) } #ifdef HAVE_NTGUI -FARPROC set_fg; /* Pointer to AllowSetForegroundWindow. */ -FARPROC get_wc; /* Pointer to RealGetWindowClassA. */ +typedef void (* VOIDFNPTR) (void); +typedef BOOL (WINAPI *AllowSetForegroundWindow_proc) (DWORD); +/* Pointer to AllowSetForegroundWindow. */ +static AllowSetForegroundWindow_proc set_fg; +typedef UINT (WINAPI *RealGetWindowClassA_proc) (HWND, LPSTR, UINT); +/* Pointer to RealGetWindowClassA. */ +static RealGetWindowClassA_proc get_wc; void w32_set_user_model_id (void); @@ -1794,8 +1799,8 @@ w32_give_focus (void) emacsclient can allow Emacs to grab the focus by calling the function AllowSetForegroundWindow. Unfortunately, older Windows (W95, W98 and NT) lack this function, so we have to check its availability. */ - if ((set_fg = GetProcAddress (user32, "AllowSetForegroundWindow")) - && (get_wc = GetProcAddress (user32, "RealGetWindowClassA"))) + if ((set_fg = (AllowSetForegroundWindow_proc) (VOIDFNPTR) GetProcAddress (user32, "AllowSetForegroundWindow")) + && (get_wc = (RealGetWindowClassA_proc) (VOIDFNPTR) GetProcAddress (user32, "RealGetWindowClassA"))) EnumWindows (w32_find_emacs_process, (LPARAM) 0); } #endif /* HAVE_NTGUI */ commit 606e7b73bacb282d3de0d626c9c62281cde4ea57 Author: Sean Whitton Date: Wed Apr 30 17:28:04 2025 +0800 cperl-mode-map: Don't bind C-j * lisp/progmodes/cperl-mode.el (cperl-mode-map): Don't bind C-j. The default global mode bindings will DTRT depending on whether or not electric-indent-mode is on. diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el index 7052ac75817..5d6580150dd 100644 --- a/lisp/progmodes/cperl-mode.el +++ b/lisp/progmodes/cperl-mode.el @@ -986,7 +986,6 @@ Unless KEEP, removes the old indentation." (define-key map ")" 'cperl-electric-rparen) (define-key map ";" 'cperl-electric-semi) (define-key map ":" 'cperl-electric-terminator) - (define-key map "\C-j" 'newline-and-indent) (define-key map "\C-c\C-j" 'cperl-linefeed) (define-key map "\C-c\C-t" 'cperl-invert-if-unless) (define-key map "\C-c\C-a" 'cperl-toggle-auto-newline) commit d56e5ba97ee49bc7d82ad21e35ac8fbc21a0b0e1 Author: Sean Whitton Date: Wed Apr 30 17:12:50 2025 +0800 ; * etc/DEBUG: Add link to GCC bug #78685. diff --git a/etc/DEBUG b/etc/DEBUG index 32256e1ad6f..f8186a429cd 100644 --- a/etc/DEBUG +++ b/etc/DEBUG @@ -20,7 +20,7 @@ such as --prefix): CFLAGS='-O0 -g3' The -O0 flag is important, as debugging optimized code can be hard, even -in the case that the -Og compiler option is used. If the problem +in the case that the -Og compiler option is used.[1] If the problem happens only with optimized code, you may need to enable optimizations. If that happens, try using -Og first instead of -O2, as -Og disables some optimizations that make debugging some code exceptionally hard. @@ -38,6 +38,9 @@ this below under "Debugging Emacs redisplay problems". Emacs needs not be installed to be debugged, you can debug the binary created in the 'src' directory. +[1] gcc's -Og has some known problems and limitations, documented here: + https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78685 + *** Configuring GDB To start GDB to debug Emacs, you can simply type "gdb ./emacs RET" at commit 9b560a54c3b5c04c683124db44b53ae005b36729 Author: Robert Pluim Date: Wed Apr 30 10:52:28 2025 +0200 Fix custom type of 'flymake-show-diagnostics-at-end-of-line' * lisp/progmodes/flymake.el (flymake-show-diagnostics-at-end-of-line): Add 'fancy' value to custom type. * etc/NEWS: "variable" -> "user option". (Bug#78148) diff --git a/etc/NEWS b/etc/NEWS index 3014285c9f6..d149a7387e2 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1952,9 +1952,9 @@ flymake will automatically fall back to using margin indicators in windows without fringes, including any window on a text terminal. *** Enhanced 'flymake-show-diagnostics-at-end-of-line' -The new value 'fancy' allowed for this variable will attempt to layout -diagnostics below the affected line using unicode graphics to point to -diagnostic locus. +The new value 'fancy' allowed for this user option will attempt to +layout diagnostics below the affected line using unicode graphics to +point to diagnostic locus. *** Enhanced 'flymake-show-buffer-diagnostics'. The command 'flymake-show-buffer-diagnostics' is now capable of diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index b38f21b41c8..cfabfef78a0 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -623,6 +623,7 @@ Any other non-nil value means show all diagnostic summaries at end-of-line." :type '(choice (const :tag "Display most severe diagnostic" short) (const :tag "Display all diagnostics" t) + (const :tag "Display all diagnostics using Unicode" fancy) (const :tag "Don't display diagnostics at end-of-line" nil)) :package-version '(Flymake . "1.3.6")) commit 80cbd1e31cc360ee26d462e62a253f8b54807a65 Author: Eli Zaretskii Date: Wed Apr 30 09:03:17 2025 +0300 ; Fix key notation in Introduction to Emacs Lisp * doc/lispintro/emacs-lisp-intro.texi (Typing Lists) (Note for Novices): Fix notation of 'M-C-\'. (Bug#78153) diff --git a/doc/lispintro/emacs-lisp-intro.texi b/doc/lispintro/emacs-lisp-intro.texi index b041678d8c8..07abbaf96b5 100644 --- a/doc/lispintro/emacs-lisp-intro.texi +++ b/doc/lispintro/emacs-lisp-intro.texi @@ -940,21 +940,21 @@ same time, and then press and release @kbd{t}.) Also, I often refer to one of Emacs's standard commands by listing the keys which you press to invoke the command and then giving the name of -the command in parentheses, like this: @kbd{M-C-\} +the command in parentheses, like this: @kbd{C-M-\} (@code{indent-region}). What this means is that the @code{indent-region} command is customarily invoked by typing -@kbd{M-C-\}. (You can, if you wish, change the keys that are typed to +@kbd{C-M-\}. (You can, if you wish, change the keys that are typed to invoke the command; this is called @dfn{rebinding}. @xref{Keymaps, , -Keymaps}.) The abbreviation @kbd{M-C-\} means that you type your -@key{META} key, @key{CTRL} key and @kbd{\} key all at the same time. +Keymaps}.) The abbreviation @kbd{C-M-\} means that you type your +@key{CTRL} key, @key{META} key, and @kbd{\} key all at the same time. (On many modern keyboards the @key{META} key is labeled @key{ALT}.) Sometimes a combination like this is called a keychord, since it is similar to the way you play a chord on a piano. If your keyboard does not have a @key{META} key, the @key{ESC} key prefix is used in place -of it. In this case, @kbd{M-C-\} means that you press and release your +of it. In this case, @kbd{C-M-\} means that you press and release your @key{ESC} key and then type the @key{CTRL} key and the @kbd{\} key at -the same time. But usually @kbd{M-C-\} means press the @key{CTRL} key +the same time. But usually @kbd{C-M-\} means press the @key{CTRL} key along with the key that is labeled @key{ALT} and, at the same time, press the @kbd{\} key. @@ -962,7 +962,7 @@ In addition to typing a lone keychord, you can prefix what you type with @kbd{C-u}, which is called the @dfn{universal argument}. The @kbd{C-u} keychord passes an argument to the subsequent command. Thus, to indent a region of plain text by 6 spaces, mark the region, -and then type @w{@kbd{C-u 6 M-C-\}}. (If you do not specify a number, +and then type @w{@kbd{C-u 6 C-M-\}}. (If you do not specify a number, Emacs either passes the number 4 to the command or otherwise runs the command differently than it would otherwise.) @xref{Arguments, , Numeric Arguments, emacs, The GNU Emacs Manual}. @@ -1258,7 +1258,7 @@ Interaction mode or Emacs Lisp mode, you have available to you several commands to format the Lisp expression so it is easy to read. For example, pressing the @key{TAB} key automatically indents the line the cursor is on by the right amount. A command to properly indent the -code in a region is customarily bound to @kbd{M-C-\}. Indentation is +code in a region is customarily bound to @kbd{C-M-\}. Indentation is designed so that you can see which elements of a list belong to which list---elements of a sub-list are indented more than the elements of the enclosing list. commit b1407b41a16c4a3ec15c88be91ba0ae1e65c212e Author: Stefan Monnier Date: Tue Apr 29 16:04:54 2025 -0400 register.el: Remove bogus deftypes and fix associated methods * lisp/register.el (frame-register, kmacro-register): Remove bogus deftypes. (register--type) : Fix kmacro method and generalize it to any OClosure. (register--type) : Fix method and move it to ... * lisp/frameset.el (register--type) : ... here, where `frameset-register` is defined. diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el index 8de45626bf0..4c6c6a0007c 100644 --- a/lisp/emacs-lisp/cl-generic.el +++ b/lisp/emacs-lisp/cl-generic.el @@ -1442,6 +1442,7 @@ Used internally for the (major-mode MODE) context specializers." (cl-call-next-method))) (cl--generic-prefill-dispatchers 0 oclosure) +(cl--generic-prefill-dispatchers 0 (eql 'x) oclosure integer) ;;; Support for unloading. diff --git a/lisp/frameset.el b/lisp/frameset.el index 1796d2af072..9de16750c44 100644 --- a/lisp/frameset.el +++ b/lisp/frameset.el @@ -1444,6 +1444,11 @@ Called from `list-registers' and `view-register'. Internal use only." (if (= 1 ns) "" "s") (format-time-string "%c" (frameset-timestamp fs)))))) +(cl-defmethod register--type ((_regval frameset-register)) + ;; FIXME: Why `frame' rather than `frameset'? + ;; FIXME: We shouldn't need to touch an internal function. + 'frame) + ;;;###autoload (defun frameset-to-register (register) "Store the current frameset in register REGISTER. diff --git a/lisp/register.el b/lisp/register.el index ad2abf7e4ea..cdb769991f4 100644 --- a/lisp/register.el +++ b/lisp/register.el @@ -35,7 +35,6 @@ ;; FIXME: Clean up namespace usage! -(declare-function frameset-register-p "frameset") (declare-function dired-current-directory "dired") (cl-defstruct @@ -64,6 +63,7 @@ They both receive DATA as argument." (registerv--make data print-func jump-func insert-func)) (defvar register-alist nil + ;; FIXME: This conflates the FRAME-CONFIGURATION and the FRAMESET cases. "Alist of elements (NAME . CONTENTS), one for each Emacs register. NAME is a character (a number). CONTENTS is a string, number, marker, list or a struct returned by `registerv-make'. @@ -387,10 +387,7 @@ satisfy `cl-typep', otherwise the new type should be defined with (cl-defmethod register--type ((_regval (eql file))) 'file) (cl-defmethod register--type ((_regval (eql file-query))) 'file-query) (cl-defmethod register--type ((_regval window-configuration)) 'window) -(cl-deftype frame-register () '(satisfies frameset-register-p)) -(cl-defmethod register--type :extra "frame-register" (_regval) 'frame) -(cl-deftype kmacro-register () '(satisfies kmacro-register-p)) -(cl-defmethod register--type :extra "kmacro-register" (_regval) 'kmacro) +(cl-defmethod register--type ((regval oclosure)) (oclosure-type regval)) (defun register-of-type-alist (types) "Filter `register-alist' according to TYPES." @@ -644,6 +641,8 @@ Interactively, prompt for REGISTER using `register-read-with-preview'." ;; Turn the marker into a file-ref if the buffer is killed. (add-hook 'kill-buffer-hook 'register-swap-out nil t) (set-register register + ;; FIXME: How does this `current-frame-configuration' differ + ;; in practice with what `frameset-to-register' does? (if arg (list (current-frame-configuration) (point-marker)) (point-marker)))) commit 1224e5fd961ba53a5d6aba46e3c92a2fd047a165 Author: Eli Zaretskii Date: Tue Apr 29 21:28:01 2025 +0300 ; * lisp/files.el (revert-buffer-restore-functions): Doc fix (bug#78124). diff --git a/lisp/files.el b/lisp/files.el index 246b17baa3f..3828bf38d99 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -6988,14 +6988,14 @@ A customized `revert-buffer-function' need not run this hook.") (defvar revert-buffer-preserve-modes) (defvar revert-buffer-restore-functions '(revert-buffer-restore-read-only) - "Functions to preserve any state during `revert-buffer'. -The value of this variable is a list of functions that are called before -reverting the buffer. Each of these functions are called without -arguments and should return a lambda that can restore a previous state -of the buffer. Then after reverting the buffer each of these lambdas -will be called one by one in the order of the list to restore previous -states of the buffer. An example of the buffer state is keeping the -buffer read-only, or keeping minor modes, etc. + "Functions to preserve buffer state during `revert-buffer'. +The value of this variable is a list of functions that are called +before reverting the buffer. Each of these functions is called without +arguments and should return a lambda form that can restore a previous +state of the buffer. After reverting the buffer, each of these lambda +forms will be called in order to restore previous states of the buffer. +An example of the buffer state is keeping the buffer read-only, or +keeping minor modes, etc. The default value restores the buffer's read-only state to what it was before reverting. commit 483762ef2f71b86c7da98082db14e87f58d009d7 Author: Juri Linkov Date: Tue Apr 29 20:14:07 2025 +0300 Use 'file-equal-p' in 'multi-isearch-read-files' (bug#77678). * lisp/misearch.el (multi-isearch-read-files): Replace 'string-equal' with 'file-equal-p' that should handle abbreviated file names as well. diff --git a/lisp/misearch.el b/lisp/misearch.el index 257042e39b9..5d41ae5fc15 100644 --- a/lisp/misearch.el +++ b/lisp/misearch.el @@ -327,7 +327,7 @@ Every next/previous file in the defined sequence is visited by default-directory buffer-file-name))) (file nil)) - (while (not (string-equal + (while (not (file-equal-p (setq file (read-file-name "Next file to search (RET to end): " default-directory commit 746a3cb3143194436c4a1a63d26aac890c1a705f Author: Juri Linkov Date: Tue Apr 29 19:55:48 2025 +0300 Ignore parens in strings for outline headings in emacs-lisp-mode. * lisp/outline.el (outline-font-lock-keywords): For non-nil outline-search-function return a lambda that calls the function, then sets the match data to the end of the line that is equivalent to adding ".*" in the regexp. Then search functions don't need to match ".*" themselves. * lisp/progmodes/elisp-mode.el (elisp-outline-search): New function to skip leading parens in strings when searching for outline headings. (emacs-lisp-mode): Set buffer-local 'outline-search-function' to 'elisp-outline-search'. https://lists.gnu.org/archive/html/emacs-devel/2025-04/msg00934.html diff --git a/lisp/outline.el b/lisp/outline.el index a53e0a1f070..e484bcef878 100644 --- a/lisp/outline.el +++ b/lisp/outline.el @@ -261,7 +261,12 @@ non-nil and point is located on the heading line.") (defvar outline-font-lock-keywords '( ;; Highlight headings according to the level. - (eval . (list (or outline-search-function + (eval . (list (or (when outline-search-function + (lambda (limit) + (when-let* ((ret (funcall outline-search-function limit))) + ;; This is equivalent to adding ".*" in the regexp below. + (set-match-data (list (match-beginning 0) (pos-eol))) + ret))) (concat "^\\(?:" outline-regexp "\\).*" outline-heading-end-regexp)) 0 '(if outline-minor-mode (if outline-minor-mode-highlight diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el index e8b2a8da65e..a9c00085056 100644 --- a/lisp/progmodes/elisp-mode.el +++ b/lisp/progmodes/elisp-mode.el @@ -287,6 +287,19 @@ Comments in the form will be lost." (string-to-syntax "'"))))) start end))) +(defun elisp-outline-search (&optional bound move backward looking-at) + "Don't use leading parens in strings for outline headings." + (if looking-at + (and (looking-at outline-regexp) + (save-excursion (not (nth 8 (syntax-ppss (match-beginning 0)))))) + (let ((search-success nil)) + (while (and (setq search-success + (funcall (if backward #'re-search-backward #'re-search-forward) + (concat "^\\(?:" outline-regexp "\\)") + bound (if move 'move t))) + (save-excursion (nth 8 (syntax-ppss (match-beginning 0)))))) + search-success))) + (defcustom emacs-lisp-mode-hook nil "Hook run when entering Emacs Lisp mode." :options '(eldoc-mode imenu-add-menubar-index checkdoc-minor-mode) @@ -382,6 +395,7 @@ be used instead. (add-hook 'xref-backend-functions #'elisp--xref-backend nil t) (setq-local project-vc-external-roots-function #'elisp-load-path-roots) (setq-local syntax-propertize-function #'elisp-mode-syntax-propertize) + (setq-local outline-search-function #'elisp-outline-search) (add-hook 'completion-at-point-functions #'elisp-completion-at-point nil 'local) (add-hook 'flymake-diagnostic-functions #'elisp-flymake-checkdoc nil t) commit 9d0595d8795fbd604c6429317daff4d6445f8904 Author: Juri Linkov Date: Tue Apr 29 19:41:44 2025 +0300 Fix invalid search bound in 'search-within-boundaries'. * lisp/isearch.el (search-within-boundaries): Don't go over BOUND. * test/lisp/isearch-tests.el (isearch--test-search-within-boundaries): Test with the BOUND arg as well (bug#78116). diff --git a/lisp/isearch.el b/lisp/isearch.el index 5cde8092bde..b23f38077aa 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -4625,7 +4625,13 @@ defaults to the value of `isearch-search-fun-default' when nil." ;; Otherwise, try to search for the next property. (unless beg (setq beg (funcall next-fun old)) - (when beg (goto-char beg))) + (when beg + (if (or (null bound) + (if isearch-forward + (< beg bound) + (> beg bound))) + (goto-char beg) + (setq beg nil)))) ;; Non-nil `beg' means there are more properties. (while (and beg (not found)) ;; Search for the end of the current property. @@ -4675,7 +4681,13 @@ defaults to the value of `isearch-search-fun-default' when nil." ;; Get the next text property. (unless found (setq beg (funcall next-fun end)) - (when beg (goto-char beg)))) + (when beg + (if (or (null bound) + (if isearch-forward + (< beg bound) + (> beg bound))) + (goto-char beg) + (setq beg nil))))) (unless found (goto-char old)) found)) diff --git a/test/lisp/isearch-tests.el b/test/lisp/isearch-tests.el index 301108afbe4..3b2c070d003 100644 --- a/test/lisp/isearch-tests.el +++ b/test/lisp/isearch-tests.el @@ -247,7 +247,29 @@ (dolist (pos (append (reverse pairs) nil)) (should (eq (car pos) (isearch-search-string "foo$" nil t))) (should (equal (match-string 0) "foo")) - (when (cdr pos) (should (eq (cdr pos) (match-end 0))))))) + (when (cdr pos) (should (eq (cdr pos) (match-end 0)))))) + + ;; With BOUND arg (bug#78116) + (goto-char (point-min)) + (let ((isearch-forward t) + (isearch-regexp nil) + (pos (car pairs))) + (should (eq (cdr pos) (isearch-search-string "foo" (cdr pos) t))) + (should (eq nil (isearch-search-string "foo" (cdr pos) t))) + ;; Start on the text property inside boundaries + (forward-char -1) + (should (eq nil (isearch-search-string "foo" (cdr pos) t)))) + + ;; With BOUND arg (bug#78116) + (goto-char (point-max)) + (let ((isearch-forward nil) + (isearch-regexp nil) + (pos (car (last pairs)))) + (should (eq (car pos) (isearch-search-string "foo" (car pos) t))) + (should (eq nil (isearch-search-string "foo" (car pos) t))) + ;; Start on the text property inside boundaries + (forward-char 1) + (should (eq nil (isearch-search-string "foo" (car pos) t))))) (ert-deftest isearch--test-search-fun-in-text-property () (let* ((pairs '((4 . 7) (11 . 14) (21 . 24))) commit 622825995204b7aae70b836c8e5e5d44385c401b Author: Juri Linkov Date: Tue Apr 29 19:35:30 2025 +0300 Respect point when changing direction after isearch scrolling. * lisp/isearch.el (isearch-repeat): Don't go to isearch-other-end on changing direction after scrolling (bug#78074). diff --git a/lisp/isearch.el b/lisp/isearch.el index e37d1814eb7..5cde8092bde 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -1950,7 +1950,14 @@ Use `isearch-exit' to quit without signaling." (funcall isearch-wrap-function) (goto-char (if isearch-forward (point-min) (point-max)))))) ;; C-s in reverse or C-r in forward, change direction. - (if (and isearch-other-end isearch-repeat-on-direction-change) + (if (and isearch-other-end isearch-repeat-on-direction-change + (or (null isearch-cmds) + ;; Go to 'isearch-other-end' only when point is still + ;; on the current match. However, after scrolling + ;; (when 'isearch-allow-scroll' is 'unlimited'), + ;; repeat the reversed search from a new position + ;; where point was moved during scrolling (bug#78074). + (eq (isearch--state-point (car isearch-cmds)) (point)))) (goto-char isearch-other-end)) (setq isearch-forward (not isearch-forward) isearch-success t)) commit 4323ff209f2f73ca4e6d389de69eb310988c0b1f Author: David Ponce Date: Tue Apr 29 10:48:37 2025 -0400 (cl-types-of): Speed up by caching more of its work * lisp/emacs-lisp/cl-types.el (cl--type-parents): Make it a proper function. (cl--type-children): Use `cl--class-children` and make it a `defsubst`. (cl--type-dag): η-reduce and make it a `defsubst`. (cl--type-undefine): Also reset `cl--type-error`. (cl--type-deftype): Modify `cl--type-list` atomically so we never need to restore it upon error. Don't test bogus parent here. (cl-deftype2): Test bogus parent here instead. Also, better preserve the declarations for the lambda. (cl-types-of): Do less uncached work. diff --git a/lisp/emacs-lisp/cl-types.el b/lisp/emacs-lisp/cl-types.el index 0a384e09d79..c10ce4a24fb 100644 --- a/lisp/emacs-lisp/cl-types.el +++ b/lisp/emacs-lisp/cl-types.el @@ -3,9 +3,11 @@ ;; Data types defined by `cl-deftype' are now recognized as argument ;; types for dispatching generic functions methods. -;; Will be removed when included in cl-lib. +;; Needed until merged in existing libraries. (require 'cl-lib) (eval-when-compile (require 'cl-macs)) ;For cl--find-class. +(declare-function cl-remprop "cl-extra" (symbol propname)) +(declare-function cl--class-children "cl-extra" (class)) ;; Extend `cl-deftype' to define data types which are also valid ;; argument types for dispatching generic function methods (see also @@ -42,62 +44,60 @@ "Type descriptors for types defined by `cl-deftype'.") (defun cl--type-p (object) - "Return non-nil if OBJECT is a used defined type. -That is, a type of class `cl-type-class'." + "Return non-nil if OBJECT is a cl-type. +That is, a type defined by `cl-deftype', of class `cl-type-class'." (and (symbolp object) (cl-type-class-p (cl--find-class object)))) -(defmacro cl--type-parents (name) +(defsubst cl--type-parents (name) "Get parents of type with NAME. -NAME is a symbol representing a type." - `(cl--class-allparents (cl--find-class ,name))) +NAME is a symbol representing a type. +Return a possibly empty list of types." + (cl--class-allparents (cl--find-class name))) -(defun cl--type-children (name) +(defsubst cl--type-children (name) "Get children of the type with NAME. NAME is a symbol representing a type. Return a possibly empty list of types." - (cl-check-type name (satisfies cl--type-p)) - (let (children) - (dolist (elt cl--type-list) - (or (eq name elt) - (if (memq name (cl--type-parents elt)) - (push elt children)))) - children)) + (cl--class-children (cl--find-class name))) -(defun cl--type-dag () - "Return a DAG from the list of defined types." - (mapcar (lambda (type) (cl--type-parents type)) cl--type-list)) +(defsubst cl--type-dag (types) + "Return a DAG from the list of TYPES." + (mapcar #'cl--type-parents types)) ;; Keep it for now, for testing. (defun cl--type-undefine (name) - "Remove the definitions of type with NAME. -NAME is an unquoted symbol representing a type. -Signal an error if other types inherit from NAME." - (declare-function cl-remprop "cl-extra" (symbol propname)) + "Remove the definition of cl-type with NAME. +NAME is an unquoted symbol representing a cl-type. +Signal an error if NAME has subtypes." (cl-check-type name (satisfies cl--type-p)) (when-let* ((children (and (cl--type-p name) (cl--type-children name)))) (error "Type has children: %S" children)) + (cl-remprop name 'cl--type-error) (cl-remprop name 'cl--class) (cl-remprop name 'cl-deftype-handler) (setq cl--type-list (delq name cl--type-list))) (defun cl--type-deftype (name parents &optional docstring) - "Generalize type with NAME for method dispatching. + ;; FIXME: Should we also receive the arglist? + "Generalize cl-type with NAME for method dispatching. PARENTS is a list of types NAME is a subtype of, or nil. DOCSTRING is an optional documentation string." - (let ((oldtlist (copy-sequence cl--type-list)) + (let ((typelist cl--type-list) (oldplist (copy-sequence (symbol-plist name)))) (condition-case err (let* ((class (cl--find-class name)) - (recorded (memq name cl--type-list))) + (recorded (memq name typelist))) (if (null class) (or (null recorded) (error "Type generalized, but doesn't exist")) (or recorded (error "Type exists, but not generalized")) (or (cl-type-class-p class) + ;; FIXME: We have some uses `cl-deftype' in Emacs that + ;; "complement" another declaration of the same type, + ;; so maybe we should turn this into a warning (and + ;; not overwrite the `cl--find-class' in that case)? (error "Type in another class: %S" (type-of class)))) - (if (memq name parents) - (error "Type in parents: %S" parents)) ;; Setup a type descriptor for NAME. (setf (cl--find-class name) (cl--type-class-make name docstring parents)) @@ -105,18 +105,23 @@ DOCSTRING is an optional documentation string." ;; Clear any previous error mark. (cl-remprop name 'cl--type-error) ;; Record new type to include its dependency in the DAG. - (push name cl--type-list)) + (push name typelist)) ;; `cl-types-of' iterates through all known types to collect ;; all those an object belongs to, sorted from the most ;; specific type to the more general type. So, keep the ;; global list in this order. + ;; FIXME: This global operation is a bit worrisome, because it + ;; scales poorly with the number of types. I guess it's OK + ;; for now because `cl-deftype' is not very popular, but it'll + ;; probably need to be replaced at some point. Maybe we + ;; should simply require that the parents be defined already, + ;; then we can just `push' the new type, knowing it's in + ;; topological order by construction. (setq cl--type-list (merge-ordered-lists - (cl--type-dag) + (cl--type-dag typelist) (lambda (_) (error "Invalid dependency graph"))))) (error - ;; On error restore previous data. - (setq cl--type-list oldtlist) (setf (symbol-plist name) oldplist) (error (format "Define %S failed: %s" name (error-message-string err))))))) @@ -155,16 +160,30 @@ If PARENTS is non-nil, ARGLIST must be nil." ((`(,decls . ,forms) (macroexp-parse-body body)) (docstring (if (stringp (car decls)) (car decls) - (cadr (assq :documentation decls)))) - (parents (cdr (assq 'parents (cdr (assq 'declare decls)))))) + (cadr (assq :documentation decls)))) + (declares (assq 'declare decls)) + (parent-decl (assq 'parents (cdr declares))) + (parents (cdr parent-decl))) + (when parent-decl + ;; "Consume" the `parents' declaration. + (cl-callf (lambda (x) (delq parent-decl x)) (cdr declares)) + (when (equal declares '(declare)) + (cl-callf (lambda (x) (delq declares x)) decls))) + (if (memq name parents) + (error "Type in parents: %S" parents)) (and parents arglist (error "Parents specified, but arglist not empty")) - (if docstring (setq forms (cons docstring forms))) `(eval-and-compile ;;cl-eval-when (compile load eval) + ;; FIXME: Where should `cl--type-deftype' go? Currently, code + ;; using `cl-deftype' can use (eval-when-compile (require + ;; 'cl-lib)), so `cl--type-deftype' needs to go either to + ;; `cl-preloaded.el' or it should be autoloaded even when + ;; `cl-lib' is not loaded. (cl--type-deftype ',name ',parents ,docstring) (define-symbol-prop ',name 'cl-deftype-handler (cl-function (lambda (&cl-defs ('*) ,@arglist) + ,@decls ,@forms)))))) ;; Ensure each type satisfies `eql'. @@ -226,8 +245,8 @@ If PARENTS is non-nil, ARGLIST must be nil." "Return the types OBJECT belongs to. Return an unique list of types OBJECT belongs to, ordered from the most specific type to the most general." - (let ((found (list (cl--type-parents (cl-type-of object))))) - ;; Build a DAG of all types OBJECT belongs to. + (let (found) + ;; Build a list of all types OBJECT belongs to. (dolist (type cl--type-list) (and ;; Skip type, if it previously produced an error. @@ -241,24 +260,25 @@ most specific type to the most general." ;; of another type, assuming that, most of the time, `assq' ;; will be faster than `cl-typep'. (null (assq type found)) - ;; If OBJECT is of type, add type and its parents to the DAG. - (condition-case e + ;; If OBJECT is of type, add type to the matching list. + (condition-case-unless-debug e (cl-typep object type) (error (cl--type-error type e))) - ;; (dolist (p (cl--type-parents type)) - ;; (push (cl--type-parents p) found)) - ;; Equivalent to the `dolist' above, but faster: avoid to - ;; recompute several lists of parents we already know. - (let ((pl (cl--type-parents type))) - (while pl - (push pl found) - (setq pl (cdr pl)))))) - ;; Compute an ordered list of types from the collected DAG. - (setq found (merge-ordered-lists found)) - ;; Return an unique value of this list of types, which is also the - ;; list of specifiers for this type. + (push type found))) + ;; Return an unique value of the list of types OBJECT belongs to, + ;; which is also the list of specifiers for OBJECT. (with-memoization (gethash found cl--type-unique) - found))) + ;; Compute a DAG from the collected matching types. + (let (dag) + (dolist (type found) + (let ((pl (cl--type-parents type))) + (while pl + (push pl dag) + (setq pl (cdr pl))))) + ;; Compute an ordered list of types from the DAG. + (merge-ordered-lists + (nreverse (cons (cl--type-parents (cl-type-of object)) + dag))))))) ;;; Method dispatching ;; @@ -268,7 +288,7 @@ most specific type to the most general." (lambda (tag &rest _) (if (consp tag) tag))) (cl-defmethod cl-generic-generalizers :extra "cl-types-of" (type) - "Support for dispatch on types." + "Support for dispatch on cl-types." (if (cl--type-p type) (list cl--type-generalizer) (cl-call-next-method))) commit 825ea052ad5638c056037c4cac92c9e666dc3820 Author: João Távora Date: Tue Apr 29 12:34:10 2025 +0100 Flymake: promptly delete eol overlay if source overlay changed In the vast majority of cases, changing the source overlay invalidates the content of the end-of-line overlay, so best to delete it asap. * lisp/progmodes/flymake.el (flymake--delete-overlay): Use 'flymake--eol-ov' (flymake--highlight-line): Use some overlay modification hooks. diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index 6a3dbe4f5c5..b38f21b41c8 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -906,7 +906,7 @@ Return to original margin width if ORIG-WIDTH is non-nil." (defun flymake--delete-overlay (ov) "Like `delete-overlay', delete OV, but do some more stuff." - (let ((eolov (overlay-get ov 'eol-ov))) + (let ((eolov (overlay-get ov 'flymake--eol-ov))) (when eolov (let ((src-ovs (delq ov (overlay-get eolov 'flymake-eol-source-overlays)))) (overlay-put eolov 'flymake-eol-source-overlays src-ovs))) @@ -1018,6 +1018,11 @@ Return nil or the overlay created." ;; (overlay-put ov 'evaporate t) (overlay-put ov 'flymake-overlay t) + (overlay-put ov 'modification-hooks + `(,(lambda (ov after &rest _) + (when-let* ((eolov + (and (null after) (overlay-get ov 'flymake--eol-ov)))) + (delete-overlay eolov))))) (overlay-put ov 'flymake-diagnostic diagnostic) ;; Handle `flymake-show-diagnostics-at-end-of-line' ;; @@ -1039,7 +1044,7 @@ Return nil or the overlay created." (overlay-put eolov 'flymake--eol-overlay t) (overlay-put eolov 'flymake-eol-source-overlays (list ov)) (overlay-put eolov 'evaporate (not (= start end)))) ; FIXME: fishy - (overlay-put ov 'eol-ov eolov)))) + (overlay-put ov 'flymake--eol-ov eolov)))) ov)) ;; Nothing in Flymake uses this at all any more, so this is just for commit 7ae275f04c46e1724fafd8c8aa2f3eed5771df1c Author: João Távora Date: Tue Apr 29 12:20:51 2025 +0100 Eglot: improve diagnostic-reporting performance After a change in the buffer has occured, it is often the case that Flymake is quicker to ask for diagnostics than the server is to supply them to us. If we're still stuck with old outdated diagnostics, don't forward them to Flymake, even if it eagerly asks us for them. * etc/EGLOT-NEWS (Changes in upcoming Eglot): Announce changes. * lisp/progmodes/eglot.el (eglot--diagnostics): Rework. (eglot--report-to-flymake): Also take version. (eglot-handle-notification textDocument/publishDiagnostics) (eglot--managed-mode) (eglot-flymake-backend): Tweak call to eglot--report-to-flymake. diff --git a/etc/EGLOT-NEWS b/etc/EGLOT-NEWS index 7b53d5943ba..6505a6d8567 100644 --- a/etc/EGLOT-NEWS +++ b/etc/EGLOT-NEWS @@ -47,6 +47,13 @@ The composition of Eglot's mode line can be fully customized by adding or removing symbols and strings from the customizable variable 'eglot-mode-line-format' +** Improved diagnostic-reporting performance and bugfixes (bug#77588) + +Eglot remembers the LSP document version to which diagonstics reported +by the LSP server pertain. This helps in skipping useless or harmful +updates, avoiding flakiness with code actions and flickering overlays +when the buffer is changed. + * Changes in Eglot 1.18 (20/1/2025) diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index c3409f138e7..530fd4aa5b8 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -2228,7 +2228,7 @@ Use `eglot-managed-p' to determine if current buffer is managed.") do (set (make-local-variable var) saved-binding)) (remove-function (local 'imenu-create-index-function) #'eglot-imenu) (when eglot--current-flymake-report-fn - (eglot--report-to-flymake nil) + (eglot--report-to-flymake nil nil) (setq eglot--current-flymake-report-fn nil)) (run-hooks 'eglot-managed-mode-hook) (let ((server eglot--cached-server)) @@ -2268,7 +2268,10 @@ Use `eglot-managed-p' to determine if current buffer is managed.") (jsonrpc-error "No current JSON-RPC connection"))) (defvar-local eglot--diagnostics nil - "Flymake diagnostics for this buffer.") + "A cons (DIAGNOSTICS . VERSION) for current buffer. +DIAGNOSTICS is a list of Flymake diagnostics objects. VERSION is the +LSP Document version reported for DIAGNOSTICS (comparable to +`eglot--versioned-identifier') or nil if server didn't bother.") (defvar revert-buffer-preserve-modes) (defun eglot--after-revert-hook () @@ -2699,8 +2702,11 @@ expensive cached value of `file-truename'.") initially (if (and version (/= version eglot--versioned-identifier)) (cl-return)) - (setq flymake-list-only-diagnostics - (assoc-delete-all path flymake-list-only-diagnostics)) + (setq + ;; if no explicit version received, assume it's current. + version eglot--versioned-identifier + flymake-list-only-diagnostics + (assoc-delete-all path flymake-list-only-diagnostics)) for diag-spec across diagnostics collect (eglot--dbind ((Diagnostic) range code message severity source tags) diag-spec @@ -2740,9 +2746,9 @@ expensive cached value of `file-truename'.") ;; starts on idle-timer (github#958) (not (null flymake-no-changes-timeout)) eglot--current-flymake-report-fn) - (eglot--report-to-flymake diags)) + (eglot--report-to-flymake diags version)) (t - (setq eglot--diagnostics diags))))) + (setq eglot--diagnostics (cons diags version)))))) (cl-loop for diag-spec across diagnostics collect (eglot--dbind ((Diagnostic) code range message severity source) diag-spec @@ -3134,22 +3140,24 @@ may be called multiple times (respecting the protocol of `flymake-diagnostic-functions')." (cond (eglot--managed-mode (setq eglot--current-flymake-report-fn report-fn) - (eglot--report-to-flymake eglot--diagnostics)) + (eglot--report-to-flymake (car eglot--diagnostics) + (cdr eglot--diagnostics))) (t (funcall report-fn nil)))) -(defun eglot--report-to-flymake (diags) +(defun eglot--report-to-flymake (diags version) "Internal helper for `eglot-flymake-backend'." - (save-restriction - (widen) - (funcall eglot--current-flymake-report-fn diags - ;; If the buffer hasn't changed since last - ;; call to the report function, flymake won't - ;; delete old diagnostics. Using :region - ;; keyword forces flymake to delete - ;; them (github#159). - :region (cons (point-min) (point-max)))) - (setq eglot--diagnostics diags)) + (when (or (null version) (= version eglot--versioned-identifier)) + (save-restriction + (widen) + (funcall eglot--current-flymake-report-fn diags + ;; If the buffer hasn't changed since last + ;; call to the report function, flymake won't + ;; delete old diagnostics. Using :region + ;; keyword forces flymake to delete + ;; them (github#159). + :region (cons (point-min) (point-max))))) + (setq eglot--diagnostics (cons diags version))) (defun eglot-xref-backend () "Eglot xref backend." 'eglot) commit 79e7eeb32964ba79f0d0ef06c9c0d7c16c542f37 Author: Eli Zaretskii Date: Tue Apr 29 11:19:19 2025 +0300 ; Improve documentation of 'format-time-string' * doc/lispref/os.texi (Time Parsing): Fix documentation of week numbers for %U, %V and %W. (Bug#78096) diff --git a/doc/lispref/os.texi b/doc/lispref/os.texi index 3f2388daeb3..0e9e3982ec5 100644 --- a/doc/lispref/os.texi +++ b/doc/lispref/os.texi @@ -1938,14 +1938,18 @@ This is a synonym for @samp{%H:%M:%S}. This stands for the numeric day of week (1--7). Monday is day 1. @item %U This stands for the week of the year (01--52), assuming that weeks -start on Sunday. +start on Sunday. If January 1 is not a Sunday, the first partial week +is week zero. @item %V -This stands for the week of the year according to ISO 8601. +This stands for the week of the year according to ISO 8601. Note that, +unlike @samp{%U} and @samp{%W}, the week according to ISO 8601 does +@emph{not} roll over to 1 on January 1, but keeps its last number. @item %w This stands for the numeric day of week (0--6). Sunday is day 0. @item %W -This stands for the week of the year (01--52), assuming that weeks -start on Monday. +This stands for the week of the year (01--52), assuming that weeks start +on Monday. If January 1 is not a Monday, the first partial week is week +zero. @item %x This has a locale-specific meaning. In the default locale (named @samp{C}), it is equivalent to @samp{%D}. commit 2838b64fc8b71d2a534fcf01e02a20066d99e2b3 Author: Eli Zaretskii Date: Tue Apr 29 10:47:35 2025 +0300 ; * lisp/textmodes/text-mode.el (text-mode-variant): Fix last change. diff --git a/lisp/textmodes/text-mode.el b/lisp/textmodes/text-mode.el index 7507b7d80d1..6318e6db8b4 100644 --- a/lisp/textmodes/text-mode.el +++ b/lisp/textmodes/text-mode.el @@ -41,7 +41,7 @@ "Non-nil if this buffer's major mode is a variant of Text mode.") (make-obsolete-variable 'text-mode-variant "\ -Don't set it, and instead of testing its value use `derived-mode-p'." "27.1") +don't set it, and instead of testing its value use `derived-mode-p'." "27.1") ;; Actually defined in textconv.c. (defvar text-conversion-style) commit 9adb05422eaaa290a6a0542ba8862b806b34fe7c Author: Eli Zaretskii Date: Tue Apr 29 10:09:54 2025 +0300 ; Improve obsolescence of 'text-mode-variant' * lisp/textmodes/text-mode.el (text-mode-variant): Improve obsolescence announcement text. * doc/lispref/modes.texi (Example Major Modes): Update example. (Bug#78125). diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi index 31d420eedb6..3a6b163c81c 100644 --- a/doc/lispref/modes.texi +++ b/doc/lispref/modes.texi @@ -1509,9 +1509,6 @@ You can thus get the full benefit of adaptive filling (see the variable `adaptive-fill-mode'). \\@{text-mode-map@} Turning on Text mode runs the normal hook `text-mode-hook'." -@end group -@group - (setq-local text-mode-variant t) (setq-local require-final-newline mode-require-final-newline)) @end group @end smallexample diff --git a/lisp/textmodes/text-mode.el b/lisp/textmodes/text-mode.el index d918efa72c6..7507b7d80d1 100644 --- a/lisp/textmodes/text-mode.el +++ b/lisp/textmodes/text-mode.el @@ -39,7 +39,9 @@ (defvar text-mode-variant nil "Non-nil if this buffer's major mode is a variant of Text mode.") -(make-obsolete-variable 'text-mode-variant 'derived-mode-p "27.1") +(make-obsolete-variable 'text-mode-variant + "\ +Don't set it, and instead of testing its value use `derived-mode-p'." "27.1") ;; Actually defined in textconv.c. (defvar text-conversion-style) commit 4858d81848839c9167a523e4b566dbb253e566c6 Author: Eli Zaretskii Date: Tue Apr 29 09:39:34 2025 +0300 ; * lisp/files.el (revert-buffer-restore-functions): Doc fix. diff --git a/lisp/files.el b/lisp/files.el index 2707a4e8bbe..246b17baa3f 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -6995,7 +6995,14 @@ arguments and should return a lambda that can restore a previous state of the buffer. Then after reverting the buffer each of these lambdas will be called one by one in the order of the list to restore previous states of the buffer. An example of the buffer state is keeping the -buffer read-only, or keeping minor modes, etc.") +buffer read-only, or keeping minor modes, etc. + +The default value restores the buffer's read-only state to what it +was before reverting. + +Set this variable to nil to disable restoring any buffer state +attributes from before reverting. Then only the file from which the +buffer is reverted will determine the buffer's state after reverting.") (defun revert-buffer-restore-read-only () "Preserve read-only state for `revert-buffer'." commit 3c47139b8f602286a8c5c5ca72431b933b4f2a23 Author: Yuan Fu Date: Fri Mar 14 22:56:18 2025 -0700 Update tree-sitter subroutine in Fsubst_char_in_region Some explanation: Fsubst_char_in_region used to have a branch, one branch path calls replace_range, one branch path modifies the buffer directly. replace_range already calls treesit_record_change within it, so we needed to make sure we only call treesit_record_change in the other branch path. After I added the call to treesit_record_change, some changes are made to Fsubst_char_in_region, and the branch was removed. So no wonder Stefan had the confusion and wrote the FIXME note. Now that the branch is gone, we can indeed call treesit_record_change in the end like signal_after_change. * src/editfns.c (Fsubst_char_in_region): Move to end. diff --git a/src/editfns.c b/src/editfns.c index c4f23ccbe5b..e6d8e278c12 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -2396,10 +2396,6 @@ Both characters must have the same length of multi-byte form. */) record_change (pos, 1); for (i = 0; i < len; i++) *p++ = tostr[i]; -#ifdef HAVE_TREE_SITTER - /* FIXME: Why not do it when we `signal_after_change`? */ - treesit_record_change (pos_byte, pos_byte + len, pos_byte + len); -#endif last_changed = pos + 1; } pos_byte = pos_byte_next; @@ -2408,6 +2404,9 @@ Both characters must have the same length of multi-byte form. */) if (changed > 0) { +#ifdef HAVE_TREE_SITTER + treesit_record_change (changed, last_changed, last_changed); +#endif signal_after_change (changed, last_changed - changed, last_changed - changed); update_compositions (changed, last_changed, CHECK_ALL); commit 2a8e223b8d7c8e18a10ced98f5b794c4de9737e6 Author: Eli Zaretskii Date: Tue Apr 29 09:05:28 2025 +0300 ; Mention early-init file in Emacs FAQ for Windows * doc/misc/efaq-w32.texi (Location of init file, Init file): Mention the early-init file. Suggested by David Hedlund . diff --git a/doc/misc/efaq-w32.texi b/doc/misc/efaq-w32.texi index 766acb0f3ca..0a0ac539de5 100644 --- a/doc/misc/efaq-w32.texi +++ b/doc/misc/efaq-w32.texi @@ -353,6 +353,7 @@ not bundled with Emacs. @xref{Other useful ports}. @section What is my init file? @cindex .emacs @cindex init file +@cindex early init file When Emacs starts up, it attempts to load and execute the contents of a file commonly called @file{.emacs} (though it may have other names, @@ -362,22 +363,31 @@ code to your .emacs, or you can use the Customization interface accessible from the @emph{Options} menu. If the file does not exist, Emacs will start with the default settings. +In addition, Emacs 27 and later attempts to load and execute the +contents of the @file{early-init.el} file. As its name suggests, this +file, if it exists, is loaded and executed early on during the Emacs +startup sequence, before @code{.emacs}, and is intended to contain the +few initializations which must be performed before @file{.emacs} is +looked up and loaded. + @node Location of init file @section Where do I put my init file? @cindex HOME directory @cindex .emacs.d @cindex _emacs @cindex init.el +@cinde early-init.el @cindex registry, setting the HOME directory in -On Windows, the @file{.emacs} file may be called @file{_emacs} for +On Windows, the @file{.emacs} init file may be called @file{_emacs} for backward compatibility with DOS and FAT filesystems where filenames could not start with a dot. Some users prefer to continue using such a name due to historical problems various Windows tools had in the past with file names that begin with a dot. The init file may also be -called @file{.emacs.d/init.el}. Many of the other files that are -created by Lisp packages are stored in the @file{.emacs.d} directory -too, which keeps all your Emacs related files in one place. +called @file{.emacs.d/init.el}. The @file{early-init.el} file and many +of the other files that are created by Lisp packages are stored in the +@file{.emacs.d} directory too, which keeps all your Emacs related files +in one place. All the files mentioned above should go in your @env{HOME} directory. The @env{HOME} directory is determined by following the steps below: commit d2c7d8ff6727d160e9e3a17d3775230281f8fb2d Author: Eli Zaretskii Date: Tue Apr 29 08:07:33 2025 +0300 ; * lisp/cus-edit.el: Fix a typo in a comment. diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el index a92f08fafc5..e029e2610b0 100644 --- a/lisp/cus-edit.el +++ b/lisp/cus-edit.el @@ -6085,7 +6085,7 @@ Moves point into the widget that holds the value." (run-mode-hooks 'Custom-mode-hook)) ;; As discussed in bug#77228, deriving from `Custom-mode' would -;; include all their settings that are not necessary for +;; include all the settings that are not necessary for ;; `customize-dirlocals' and that can break it. ;; FIXME: Introduce a `Custom-base-mode', which could be useful ;; also for `gnus-custom-mode'. commit 8970c9589bfb9b89d2e302cf70374a8cb7bb6c81 Author: Po Lu Date: Tue Apr 29 12:54:50 2025 +0800 * lisp/progmodes/grep.el (grep-hello-file): Fix another typo. diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el index a07ac664f6f..45b04f772d3 100644 --- a/lisp/progmodes/grep.el +++ b/lisp/progmodes/grep.el @@ -708,7 +708,7 @@ first capture group of `grep-heading-regexp'.") (file-name-as-directory (temporary-file-directory))))) (when (file-remote-p file-name) - (write-region "Copyright\n" nil result)) + (write-region "Copyright\n" nil file-name)) file-name)) ((and (eq system-type 'android) (featurep 'android)) ;; /assets/etc is not accessible to grep or other shell commit ac40a65f75a132e47e0d4c68e7ca8b2247153b3c Author: Po Lu Date: Tue Apr 29 12:53:51 2025 +0800 * lisp/progmodes/grep.el (grep-hello-file): Fix typos. diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el index 09610fdc74f..a07ac664f6f 100644 --- a/lisp/progmodes/grep.el +++ b/lisp/progmodes/grep.el @@ -707,8 +707,9 @@ first capture group of `grep-heading-regexp'.") (let ((file-name (make-temp-file (file-name-as-directory (temporary-file-directory))))) - (when (file-remote-p result) - (write-region "Copyright\n" nil result)))) + (when (file-remote-p file-name) + (write-region "Copyright\n" nil result)) + file-name)) ((and (eq system-type 'android) (featurep 'android)) ;; /assets/etc is not accessible to grep or other shell ;; commands on Android, and therefore the template must commit b9886bb2069b3803fbd5ddd51fa3375b0becc0f1 Author: Sean Whitton Date: Mon Apr 28 21:32:12 2025 +0800 New log-edit-maybe-show-diff option for log-edit-hook * lisp/vc/log-edit.el (log-edit-maybe-show-diff): New function. (log-edit-hook): Add it as an option. (log-edit-diff-function): * etc/NEWS: Document it. diff --git a/etc/NEWS b/etc/NEWS index a5936b1c6cf..3014285c9f6 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1715,6 +1715,14 @@ were added, removed or edited, Emacs would refuse to proceed. Now Emacs prompts to first register the unregistered files, so that all files in the fileset are in a compatible state for a checkin. +--- +*** New 'log-edit-hook' option to display diff of changes to commit. +You can customize 'log-edit-hook' to include its new +'log-edit-maybe-show-diff' option to enable displaying a diff of the +changes to be committed in a window. This is like the 'C-c C-d' command +in Log Edit mode buffers, except that it does not select the *vc-diff* +buffer's window, and so works well when added to 'log-edit-hook'. + --- *** New buffer-local variable 'vc-buffer-overriding-fileset'. Primarily intended for buffers not visiting files, this specifies the diff --git a/lisp/vc/log-edit.el b/lisp/vc/log-edit.el index 508b4e41d68..7f02e61787a 100644 --- a/lisp/vc/log-edit.el +++ b/lisp/vc/log-edit.el @@ -186,8 +186,8 @@ This applies when its SETUP argument is non-nil." log-edit-insert-changelog log-edit-show-files) "Hook run at the end of `log-edit'." - ;; Added log-edit-insert-message-template, moved log-edit-show-files. - :version "24.4" + ;; Added `log-edit-maybe-show-diff'. + :version "31.1" :group 'log-edit :type '(hook :options (log-edit-insert-message-template log-edit-insert-cvs-rcstemplate @@ -195,7 +195,8 @@ This applies when its SETUP argument is non-nil." log-edit-insert-changelog log-edit-insert-filenames log-edit-insert-filenames-without-changelog - log-edit-show-files))) + log-edit-show-files + log-edit-maybe-show-diff))) (defcustom log-edit-mode-hook (if (boundp 'vc-log-mode-hook) vc-log-mode-hook) "Hook run when entering `log-edit-mode'." @@ -249,7 +250,7 @@ when this variable is set to nil.") (defvar log-edit-diff-function (lambda () (error "Diff functionality has not been set up")) "Function to display an appropriate `diff-mode' buffer for the change. -Called by the `log-edit-show-diff' command. +Called by `log-edit-show-diff' and `log-edit-maybe-show-diff'. The function should display the buffer in a window and leave that window selected when it returns, probably by calling `pop-to-buffer'.") (defvar log-edit-listfun nil) @@ -860,10 +861,30 @@ comment history, see `log-edit-comment-ring', and hides `log-edit-files-buf'." (vc-diff nil nil (list log-edit-vc-backend vc-log-fileset))) (defun log-edit-show-diff () - "Show the diff for the files to be committed." + "Show diff for the changes to be committed." (interactive) (funcall log-edit-diff-function)) +(defun log-edit-maybe-show-diff () + "Show diff for the changes to be committed without selecting its window. +This function is intended to be added to `log-edit-hook'. +It does nothing in the case that the commit was initiated from a +`diff-mode' buffer, i.e., when you are committing a patch. This is +because in that case the existing `diff-mode' buffer normally remains +visible when the *vc-log* buffer pops up." + ;; No (interactive) form because our use of `vc-parent-buffer' + ;; assumes we are being called during \\`C-x v v' or similar. + ;; If a user wants a version of `log-edit-show-diff' which doesn't + ;; select the window they can use a `post-command-select-window' + ;; display buffer action alist entry on `log-edit-show-diff'. + (unless (and (bound-and-true-p vc-parent-buffer) + (with-current-buffer vc-parent-buffer + (derived-mode-p 'diff-mode))) + (save-selected-window + (let ((display-buffer-overriding-action '(nil + . ((inhibit-same-window . t))))) + (funcall log-edit-diff-function))))) + (defun log-edit-show-files () "Show the list of files to be committed." (interactive) commit d44c87ceb6dc7e85ccfecf47f52f8495e34c1d0b Author: Sean Whitton Date: Mon Apr 28 20:45:44 2025 +0800 log-edit-diff-function leaves the diff-mode buffer's window selected This reverts the following two changesets: Author: Sean Whitton AuthorDate: Tue Oct 29 09:40:02 2024 +0800 Fix window selection after log-edit-show-diff Author: Sean Whitton AuthorDate: Tue Apr 8 20:36:42 2025 +0800 Fix window selection after log-edit-show-diff, again This also replaces the following changeset: Author: Sean Whitton AuthorDate: Tue Oct 29 12:52:20 2024 +0800 * lisp/vc/log-edit.el (log-edit-diff-function): Document. * lisp/vc/log-edit.el (log-edit-diff-function): Document that the function *should* leave the window selected when it returns. (log-edit-diff-fileset): * lisp/vc/vc.el (vc-modify-change-comment): Don't use save-selected-window (bug#77946). (vc-diff-patch-string): Call pop-to-buffer, not display-buffer (bug#77946). diff --git a/lisp/vc/log-edit.el b/lisp/vc/log-edit.el index 19cf1a5ae3d..508b4e41d68 100644 --- a/lisp/vc/log-edit.el +++ b/lisp/vc/log-edit.el @@ -250,8 +250,8 @@ when this variable is set to nil.") (lambda () (error "Diff functionality has not been set up")) "Function to display an appropriate `diff-mode' buffer for the change. Called by the `log-edit-show-diff' command. -Should not leave the `diff-mode' buffer's window selected; that is, the -Log Edit buffer's window should be selected when the function returns.") +The function should display the buffer in a window and leave that window +selected when it returns, probably by calling `pop-to-buffer'.") (defvar log-edit-listfun nil) (defvar log-edit-parent-buffer nil) @@ -857,8 +857,7 @@ comment history, see `log-edit-comment-ring', and hides `log-edit-files-buf'." (defun log-edit-diff-fileset () "Display diffs for the files to be committed." (interactive) - (save-selected-window - (vc-diff nil nil (list log-edit-vc-backend vc-log-fileset)))) + (vc-diff nil nil (list log-edit-vc-backend vc-log-fileset))) (defun log-edit-show-diff () "Show the diff for the files to be committed." diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index 0d135854d69..f58290ccd69 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -2066,7 +2066,7 @@ in the output buffer." (setq-local revert-buffer-function (lambda (_ _) (vc-diff-patch-string patch-string))) (setq-local vc-patch-string patch-string) - (display-buffer (current-buffer)) + (pop-to-buffer (current-buffer)) (vc-run-delayed (vc-diff-finish (current-buffer) nil)))) (defun vc-diff-internal (async vc-fileset rev1 rev2 &optional verbose buffer) @@ -2644,9 +2644,8 @@ the variable `vc-BACKEND-header'." (prevrev (vc-call-backend backend 'previous-revision rootdir rev))) - (save-selected-window - (vc-diff-internal nil (list backend (list rootdir)) - prevrev rev))))))) + (vc-diff-internal nil (list backend (list rootdir)) + prevrev rev)))))) ;;;###autoload (defun vc-merge () commit 14c707b42d9db7dd2220118ecb49df8e2a5e7b78 Author: Jake Forster Date: Mon Apr 28 22:22:18 2025 +0930 ; Isearch: Fix key bindings in docstrings * lisp/isearch.el (isearch-allow-motion) (isearch-motion-changes-direction): Use isearch-mode-map for commands in docstrings (bug#78118). Copyright-paperwork-exempt: yes diff --git a/lisp/isearch.el b/lisp/isearch.el index 5fd91bd92d6..ee1bb676d5c 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -3047,11 +3047,11 @@ See also the related option `isearch-allow-motion'." (defcustom isearch-allow-motion nil "Whether to allow movement between isearch matches by cursor motion commands. -If non-nil, the four motion commands \\[beginning-of-buffer], \\[end-of-buffer], \ -\\[scroll-up-command] and \\[scroll-down-command], when invoked during -Isearch, move respectively to the first occurrence of the current search string -in the buffer, the last one, the first one after the current window, and the -last one before the current window. +If non-nil, the four motion commands \\\\[beginning-of-buffer], \\[end-of-buffer], \ +\\[scroll-up-command] and \\[scroll-down-command], when invoked +during Isearch, move respectively to the first occurrence of the current +search string in the buffer, the last one, the first one after the current +window, and the last one before the current window. If nil, these motion commands normally exit Isearch and are executed. See also the related options `isearch-motion-changes-direction' and `isearch-allow-scroll'." @@ -3064,8 +3064,8 @@ See also the related options `isearch-motion-changes-direction' and "Whether motion commands during incremental search change search direction. If nil, the search direction (forward or backward) does not change when motion commands are used during incremental search, except when wrapping. -If non-nil, the search direction is forward after \\[beginning-of-buffer] and \ -\\[scroll-up-command], and +If non-nil, the search direction is forward after \ +\\\\[beginning-of-buffer] and \\[scroll-up-command], and backward after \\[end-of-buffer] and \\[scroll-down-command]." :type '(choice (const :tag "Off" nil) (const :tag "On" t)) commit 3279194bf2c859e76c95045c80a033fc54094f07 Author: Po Lu Date: Tue Apr 29 08:28:16 2025 +0800 Port Grep argument autodetection to Android * lisp/progmodes/grep.el (grep-hello-file): On Android, copy sample text to a real directory. diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el index ed64d8a5bc8..09610fdc74f 100644 --- a/lisp/progmodes/grep.el +++ b/lisp/progmodes/grep.el @@ -703,13 +703,26 @@ first capture group of `grep-heading-regexp'.") (or result 0)))) (defun grep-hello-file () - (let ((result - (if (file-remote-p default-directory) - (make-temp-file (file-name-as-directory (temporary-file-directory))) - (expand-file-name "HELLO" data-directory)))) - (when (file-remote-p result) - (write-region "Copyright\n" nil result)) - result)) + (cond ((file-remote-p default-directory) + (let ((file-name (make-temp-file + (file-name-as-directory + (temporary-file-directory))))) + (when (file-remote-p result) + (write-region "Copyright\n" nil result)))) + ((and (eq system-type 'android) (featurep 'android)) + ;; /assets/etc is not accessible to grep or other shell + ;; commands on Android, and therefore the template must + ;; be copied to a location that is. + (let ((temp-file (concat temporary-file-directory + "grep-test.txt"))) + (prog1 temp-file + (unless (file-regular-p temp-file) + ;; Create a temporary file if grep-text.txt can't be + ;; overwritten. + (when (file-exists-p temp-file) + (setq temp-file (make-temp-file "grep-test-"))) + (write-region "Copyright\n" nil temp-file))))) + (t (expand-file-name "HELLO" data-directory)))) ;;;###autoload (defun grep-compute-defaults () commit dfbeb7478ecd817f888927154858c380fb60390f Author: Stefan Monnier Date: Mon Apr 28 15:47:46 2025 -0400 lisp/emacs-lisp/cl-types.el: New file * test/lisp/emacs-lisp/cl-types-tests.el: Also, new file. diff --git a/lisp/emacs-lisp/cl-types.el b/lisp/emacs-lisp/cl-types.el new file mode 100644 index 00000000000..0a384e09d79 --- /dev/null +++ b/lisp/emacs-lisp/cl-types.el @@ -0,0 +1,278 @@ +;; -*- lexical-binding: t; -*- + +;; Data types defined by `cl-deftype' are now recognized as argument +;; types for dispatching generic functions methods. + +;; Will be removed when included in cl-lib. +(require 'cl-lib) +(eval-when-compile (require 'cl-macs)) ;For cl--find-class. + +;; Extend `cl-deftype' to define data types which are also valid +;; argument types for dispatching generic function methods (see also +;; ). +;; +;; The main entry points are: +;; +;; - `cl-deftype', that defines new data types. +;; +;; - `cl-types-of', that returns the types an object belongs to. + +(defvar cl--type-list nil + "List of defined types to lookup for method dispatching.") + +;; FIXME: The `cl-deftype-handler' property should arguably be turned +;; into a field of this struct (but it has performance and +;; compatibility implications, so let's not make that change for now). +(cl-defstruct + (cl-type-class + (:include cl--class) + (:noinline t) + (:constructor nil) + (:constructor cl--type-class-make + (name + docstring + parent-types + &aux (parents + (mapcar + (lambda (type) + (or (cl--find-class type) + (error "Unknown type: %S" type))) + parent-types)))) + (:copier nil)) + "Type descriptors for types defined by `cl-deftype'.") + +(defun cl--type-p (object) + "Return non-nil if OBJECT is a used defined type. +That is, a type of class `cl-type-class'." + (and (symbolp object) (cl-type-class-p (cl--find-class object)))) + +(defmacro cl--type-parents (name) + "Get parents of type with NAME. +NAME is a symbol representing a type." + `(cl--class-allparents (cl--find-class ,name))) + +(defun cl--type-children (name) + "Get children of the type with NAME. +NAME is a symbol representing a type. +Return a possibly empty list of types." + (cl-check-type name (satisfies cl--type-p)) + (let (children) + (dolist (elt cl--type-list) + (or (eq name elt) + (if (memq name (cl--type-parents elt)) + (push elt children)))) + children)) + +(defun cl--type-dag () + "Return a DAG from the list of defined types." + (mapcar (lambda (type) (cl--type-parents type)) cl--type-list)) + +;; Keep it for now, for testing. +(defun cl--type-undefine (name) + "Remove the definitions of type with NAME. +NAME is an unquoted symbol representing a type. +Signal an error if other types inherit from NAME." + (declare-function cl-remprop "cl-extra" (symbol propname)) + (cl-check-type name (satisfies cl--type-p)) + (when-let* ((children (and (cl--type-p name) + (cl--type-children name)))) + (error "Type has children: %S" children)) + (cl-remprop name 'cl--class) + (cl-remprop name 'cl-deftype-handler) + (setq cl--type-list (delq name cl--type-list))) + +(defun cl--type-deftype (name parents &optional docstring) + "Generalize type with NAME for method dispatching. +PARENTS is a list of types NAME is a subtype of, or nil. +DOCSTRING is an optional documentation string." + (let ((oldtlist (copy-sequence cl--type-list)) + (oldplist (copy-sequence (symbol-plist name)))) + (condition-case err + (let* ((class (cl--find-class name)) + (recorded (memq name cl--type-list))) + (if (null class) + (or (null recorded) + (error "Type generalized, but doesn't exist")) + (or recorded (error "Type exists, but not generalized")) + (or (cl-type-class-p class) + (error "Type in another class: %S" (type-of class)))) + (if (memq name parents) + (error "Type in parents: %S" parents)) + ;; Setup a type descriptor for NAME. + (setf (cl--find-class name) + (cl--type-class-make name docstring parents)) + (if recorded + ;; Clear any previous error mark. + (cl-remprop name 'cl--type-error) + ;; Record new type to include its dependency in the DAG. + (push name cl--type-list)) + ;; `cl-types-of' iterates through all known types to collect + ;; all those an object belongs to, sorted from the most + ;; specific type to the more general type. So, keep the + ;; global list in this order. + (setq cl--type-list + (merge-ordered-lists + (cl--type-dag) + (lambda (_) (error "Invalid dependency graph"))))) + (error + ;; On error restore previous data. + (setq cl--type-list oldtlist) + (setf (symbol-plist name) oldplist) + (error (format "Define %S failed: %s" + name (error-message-string err))))))) + +;;;###autoload +(defmacro cl-deftype2 (name arglist &rest body) + "Define NAME as a new data type. +The type NAME can then be used in `cl-typecase', `cl-check-type', +etc., and as argument type for dispatching generic function methods. + +ARGLIST is a Common Lisp argument list of the sort accepted by +`cl-defmacro'. BODY forms are evaluated and should return a type +specifier that is equivalent to the type (see the Info node `(cl) Type +Predicates' in the GNU Emacs Common Lisp Emulation manual). + +If there is a `declare' form in BODY, the spec (parents PARENTS) is +recognized to specify a list of types NAME is a subtype of. For +instance: + + (cl-deftype2 unsigned-byte (&optional bits) + \"Unsigned integer.\" + (list \\='integer 0 (if (eq bits \\='*) bits (1- (ash 1 bits))))) + + (cl-deftype2 unsigned-8bits () + \"Unsigned 8-bits integer.\" + (declare (parents unsigned-byte)) + \\='(unsigned-byte 8)) + +The list of PARENTS types determines the order of methods invocation, +and missing PARENTS may cause incorrect ordering of methods, while +extraneous PARENTS may cause use of extraneous methods. + +If PARENTS is non-nil, ARGLIST must be nil." + (declare (debug cl-defmacro) (doc-string 3) (indent 2)) + (pcase-let* + ((`(,decls . ,forms) (macroexp-parse-body body)) + (docstring (if (stringp (car decls)) + (car decls) + (cadr (assq :documentation decls)))) + (parents (cdr (assq 'parents (cdr (assq 'declare decls)))))) + (and parents arglist + (error "Parents specified, but arglist not empty")) + (if docstring (setq forms (cons docstring forms))) + `(eval-and-compile ;;cl-eval-when (compile load eval) + (cl--type-deftype ',name ',parents ,docstring) + (define-symbol-prop ',name 'cl-deftype-handler + (cl-function + (lambda (&cl-defs ('*) ,@arglist) + ,@forms)))))) + +;; Ensure each type satisfies `eql'. +(defvar cl--type-unique (make-hash-table :test 'equal) + "Record an unique value of each type.") + +(defun cl--type-error (type error) + "Mark TYPE as in-error, and report the produced ERROR value." + (put type 'cl--type-error error) ;; Mark TYPE as in-error. + ;; Temporarily raise the recursion limit to avoid another recursion + ;; error while reporting ERROR. + (let ((max-lisp-eval-depth (+ 800 max-lisp-eval-depth))) + (warn "cl-types-of %s, %s" type (error-message-string error))) + nil) + +;; FIXME: `cl-types-of' CPU cost is proportional to the number of types +;; defined with `cl-deftype', so the more popular it gets, the slower +;; it becomes. And of course, the cost of each type check is +;; unbounded, so a single "expensive" type can slow everything down +;; further. +;; +;; The usual dispatch is +;; +;; (lambda (arg &rest args) +;; (let ((f (gethash (cl-typeof arg) precomputed-methods-table))) +;; (if f +;; (apply f arg args) +;; ;; Slow case when encountering a new type +;; ...))) +;; +;; where often the most expensive part is `&rest' (which has to +;; allocate a list for those remaining arguments), +;; +;; So we're talking about replacing +;; +;; &rest + cl-type-of + gethash + if + apply +;; +;; with a function that loops over N types, calling `cl-typep' on each +;; one of them (`cl-typep' itself being a recursive function that +;; basically interprets the type language). This is going to slow +;; down dispatch very significantly for those generic functions that +;; have a method that dispatches on a user defined type, compared to +;; those that don't. +;; +;; A possible further improvement: +;; +;; - based on the PARENTS declaration, create a map from builtin-type +;; to the set of cl-types that have that builtin-type among their +;; parents. That presumes some PARENTS include some builtin-types, +;; obviously otherwise the map will be trivial with all cl-types +;; associated with the `t' "dummy parent". [ We could even go crazy +;; and try and guess PARENTS when not provided, by analyzing the +;; type's definition. ] +;; +;; - in `cl-types-of' start by calling `cl-type-of', then use the map +;; to find which cl-types may need to be checked. +;; +(defun cl-types-of (object) + "Return the types OBJECT belongs to. +Return an unique list of types OBJECT belongs to, ordered from the +most specific type to the most general." + (let ((found (list (cl--type-parents (cl-type-of object))))) + ;; Build a DAG of all types OBJECT belongs to. + (dolist (type cl--type-list) + (and + ;; Skip type, if it previously produced an error. + (null (get type 'cl--type-error)) + ;; Skip type not defined by `cl-deftype'. + (cl-type-class-p (cl--find-class type)) + ;; If BAR is declared as a parent of FOO and `cl-types-of' has + ;; already decided that the value is of type FOO, then we + ;; already know BAR will be in the output anyway and there's no + ;; point testing BAR. So, skip type already selected as parent + ;; of another type, assuming that, most of the time, `assq' + ;; will be faster than `cl-typep'. + (null (assq type found)) + ;; If OBJECT is of type, add type and its parents to the DAG. + (condition-case e + (cl-typep object type) + (error (cl--type-error type e))) + ;; (dolist (p (cl--type-parents type)) + ;; (push (cl--type-parents p) found)) + ;; Equivalent to the `dolist' above, but faster: avoid to + ;; recompute several lists of parents we already know. + (let ((pl (cl--type-parents type))) + (while pl + (push pl found) + (setq pl (cdr pl)))))) + ;; Compute an ordered list of types from the collected DAG. + (setq found (merge-ordered-lists found)) + ;; Return an unique value of this list of types, which is also the + ;; list of specifiers for this type. + (with-memoization (gethash found cl--type-unique) + found))) + +;;; Method dispatching +;; +(cl-generic-define-generalizer cl--type-generalizer + 20 ;; "typeof" < "cl-types-of" < "head" priority + (lambda (obj &rest _) `(cl-types-of ,obj)) + (lambda (tag &rest _) (if (consp tag) tag))) + +(cl-defmethod cl-generic-generalizers :extra "cl-types-of" (type) + "Support for dispatch on types." + (if (cl--type-p type) + (list cl--type-generalizer) + (cl-call-next-method))) + +(provide 'cl-types) + +;;; cl-types.el ends here diff --git a/test/lisp/emacs-lisp/cl-types-tests.el b/test/lisp/emacs-lisp/cl-types-tests.el new file mode 100644 index 00000000000..f247ddd89d9 --- /dev/null +++ b/test/lisp/emacs-lisp/cl-types-tests.el @@ -0,0 +1,93 @@ +;;; Test `cl-typedef' -*- lexical-binding: t; -*- +;; +(require 'ert) +(require 'cl-types) + +(cl-deftype2 multiples-of (&optional m) + (let ((multiplep (if (eq m '*) + #'ignore + (lambda (n) (= 0 (% n m)))))) + `(and integer (satisfies ,multiplep)))) + +(cl-deftype2 multiples-of-2 () + '(multiples-of 2)) + +(cl-deftype2 multiples-of-3 () + '(multiples-of 3)) + +(cl-deftype2 multiples-of-4 () + (declare (parents multiples-of-2)) + '(and multiples-of-2 (multiples-of 4))) + +(cl-deftype2 unsigned-byte (&optional bits) + "Unsigned integer." + `(integer 0 ,(if (eq bits '*) bits (1- (ash 1 bits))))) + +(cl-deftype2 unsigned-16bits () + "Unsigned 16-bits integer." + (declare (parents unsigned-byte)) + '(unsigned-byte 16)) + +(cl-deftype2 unsigned-8bits () + "Unsigned 8-bits integer." + (declare (parents unsigned-16bits)) + '(unsigned-byte 8)) + +(cl-defmethod my-foo ((_n unsigned-byte)) + (format "unsigned")) + +(cl-defmethod my-foo ((_n unsigned-16bits)) + (format "unsigned 16bits - also %s" + (cl-call-next-method))) + +(cl-defmethod my-foo ((_n unsigned-8bits)) + (format "unsigned 8bits - also %s" + (cl-call-next-method))) + +(ert-deftest cl-types-test () + "Test types definition, cl-types-of and method dispatching." + + ;; Invalid DAG error + (should-error + (eval + '(cl-deftype2 unsigned-16bits () + "Unsigned 16-bits integer." + (declare (parents unsigned-8bits)) + '(unsigned-byte 16)) + lexical-binding + )) + + ;; Test that (cl-types-of 4) is (multiples-of-4 multiples-of-2 ...) + ;; Test that (cl-types-of 6) is (multiples-of-3 multiples-of-2 ...) + ;; Test that (cl-types-of 12) is (multiples-of-4 multiples-of-3 multiples-of-2 ...) + (let ((types '(multiples-of-2 multiples-of-3 multiples-of-4))) + (should (equal '(multiples-of-2) + (seq-intersection (cl-types-of 2) types))) + + (should (equal '(multiples-of-4 multiples-of-2) + (seq-intersection (cl-types-of 4) types))) + + (should (equal '(multiples-of-3 multiples-of-2) + (seq-intersection (cl-types-of 6) types))) + + (should (equal '(multiples-of-3 multiples-of-4 multiples-of-2) + (seq-intersection (cl-types-of 12) types))) + + (should (equal '() + (seq-intersection (cl-types-of 5) types))) + ) + + ;;; Method dispatching. + (should (equal "unsigned 8bits - also unsigned 16bits - also unsigned" + (my-foo 100))) + + (should (equal "unsigned 16bits - also unsigned" + (my-foo 256))) + + (should (equal "unsigned" + (my-foo most-positive-fixnum))) + ) + +(provide 'cl-types-tests) + +;;; cl-types-tests.el ends here commit 509cbe1c35b3dd005a53ac041f9c87ee53b8e115 Author: Spencer Baugh Date: Mon Apr 14 16:01:38 2025 -0400 Improve env var handling in read-file-name Fix various bugs, including bug#77718, by rewriting the way file name completion handles environment variable expansion. Instead of using completion-table-with-quoting to manipulate the string being completed on, simply make the completion table itself understand substitute-in-file-name. Tests are updated: partial-completion now preserves unexpanded environment variables. However, partial-completion no longer works across environment variables containing delimiters; that's an acceptable sacrifice. * lisp/minibuffer.el (completion--sifn-boundaries): Add. (completion--file-name-table): Rewrite to use substitute-in-file-name explicitly. (bug#77718) * test/lisp/minibuffer-tests.el (completion-table-test-quoting): Update. diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index 6ad95f209ee..f8593fde0f7 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -3504,13 +3504,66 @@ same as `substitute-in-file-name'." (setq qpos (1- qpos))) (cons qpos #'minibuffer-maybe-quote-filename))))) -(defalias 'completion--file-name-table - (completion-table-with-quoting #'completion-file-name-table - #'substitute-in-file-name - #'completion--sifn-requote) +(defun completion--sifn-boundaries (string table pred suffix) + "Return completion boundaries on file name STRING. + +Runs `substitute-in-file-name' on STRING first, but returns completion +boundaries for the original string." + ;; We want to compute the start boundary on the result of + ;; `substitute-in-file-name' (since that's what we use for actual completion), + ;; and then transform that into an offset in STRING instead. We can't do this + ;; if we expand environment variables, so double the $s to prevent that. + (let* ((doubled-string (replace-regexp-in-string "\\$" "$$" string t t)) + ;; sifn will change $$ back into $, so the result is a suffix of STRING + ;; (in fact, it's the last absolute file name in STRING). + (last-file-name (substitute-in-file-name doubled-string)) + (bounds (completion-boundaries last-file-name table pred suffix))) + (cl-assert (string-suffix-p last-file-name string) t) + ;; BOUNDS contains the start boundary in LAST-FILE-NAME; adjust it to be an + ;; offset in STRING instead. + (cons (+ (- (length string) (length last-file-name)) (car bounds)) + ;; No special processing happens on SUFFIX and the end boundary. + (cdr bounds)))) + +(defun completion--file-name-table (orig pred action) "Internal subroutine for `read-file-name'. Do not call this. This is a completion table for file names, like `completion-file-name-table' -except that it passes the file name through `substitute-in-file-name'.") +except that it passes the file name through `substitute-in-file-name'." + (let ((table #'completion-file-name-table)) + (if (eq (car-safe action) 'boundaries) + (cons 'boundaries (completion--sifn-boundaries orig table pred (cdr action))) + (let* ((sifned (substitute-in-file-name orig)) + (result + (let ((completion-regexp-list + ;; Regexps are matched against the real file names after + ;; expansion, so regexps containing $ won't work. Drop + ;; them; we'll return more completions, but callers need to + ;; handle that anyway. + (cl-remove-if (lambda (regexp) (string-search "$" regexp)) + completion-regexp-list))) + (complete-with-action action table sifned pred)))) + (cond + ((null action) ; try-completion + (if (stringp result) + ;; Extract the newly added text, quote any dollar signs, and + ;; append it to ORIG. + (let ((new-text (substring result (length sifned)))) + (concat orig (minibuffer--double-dollars new-text))) + result)) + ((eq action t) ; all-completions + (mapcar + (let ((orig-prefix + (substring orig (car (completion--sifn-boundaries orig table pred "")))) + (sifned-prefix-length + (- (length sifned) + (car (completion-boundaries sifned table pred ""))))) + ;; Extract the newly added text, quote any dollar signs, and append + ;; it to the part of ORIG inside the completion boundaries. + (lambda (compl) + (let ((new-text (substring compl sifned-prefix-length))) + (concat orig-prefix (minibuffer--double-dollars new-text))))) + result)) + (t result)))))) (defalias 'read-file-name-internal (completion-table-in-turn #'completion--embedded-envvar-table diff --git a/test/lisp/minibuffer-tests.el b/test/lisp/minibuffer-tests.el index 59ac5ab9578..bed797bdb14 100644 --- a/test/lisp/minibuffer-tests.el +++ b/test/lisp/minibuffer-tests.el @@ -103,8 +103,7 @@ ("lisp/c${CTTQ1}et/se-u" "lisp/c${CTTQ1}et/semantic-utest") ("lisp/ced${CTTQ2}se-u" "lisp/ced${CTTQ2}semantic-utest") ;; Test that env-vars don't prevent partial-completion. - ;; FIXME: Ideally we'd like to keep the ${CTTQ}! - ("lis/c${CTTQ1}/se-u" "lisp/cedet/semantic-utest") + ("lis/c${CTTQ1}/se-u" "lisp/c${CTTQ1}et/semantic-utest") )) (should (equal (completion-try-completion input #'completion--file-name-table commit 21e340494a5a832453999d3853839db5d8a4d865 Author: Spencer Baugh Date: Tue Jun 4 10:35:10 2024 -0400 Don't escape "." in `prin1' when followed by a letter Among other users, let-alist widely uses symbols which start with a ".". Make those symbols print more nicely by tweaking the escaping rules in print_object to not escape a leading "." followed by a letter. This is a conservative change to avoid constraining future lexer changes. This is a followup to 637dde4aba921435f78d0de769ad74c4f3230aa6, which removed some unnecessary escaping of "." and "?" when printing symbols in prin1. (Actually, if we always escaped "?" (which was the case before 637dde4aba92) then "." only ever needs to be escaped when string_to_number returns non-nil. So 637dde4aba92 could have just dropped the escaping of "." with no other changes, if it didn't also remove escaping of "?") * src/print.c (print_object): Don't escape "." as the first character in a symbol if followed by a letter. (bug#77656). * test/src/print-tests.el (test-dots): Update for new behavior. diff --git a/src/print.c b/src/print.c index c7cba5bface..b17ec337f70 100644 --- a/src/print.c +++ b/src/print.c @@ -2442,10 +2442,13 @@ print_object (Lisp_Object obj, Lisp_Object printcharfun, bool escapeflag) ((c_isdigit (p[signedp]) || p[signedp] == '.') && !NILP (string_to_number (p, 10, &len)) && len == size_byte) - /* We don't escape "." or "?" (unless they're the first - character in the symbol name). */ + /* We don't escape "?" unless it's the first character in the + symbol name. */ || *p == '?' - || *p == '.'; + /* We don't escape "." unless it's the first character in the + symbol name; even then, we don't escape it if it's followed + by [a-zA-Z]. */ + || (*p == '.' && !(size_byte > 1 && c_isalpha (*(p+1)))); if (! NILP (Vprint_gensym) && !SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P (obj)) diff --git a/test/src/print-tests.el b/test/src/print-tests.el index 1a04cf73f30..af57311135b 100644 --- a/test/src/print-tests.el +++ b/test/src/print-tests.el @@ -415,8 +415,10 @@ otherwise, use a different charset." (ert-deftest test-dots () (should (equal (prin1-to-string 'foo.bar) "foo.bar")) - (should (equal (prin1-to-string '.foo) "\\.foo")) - (should (equal (prin1-to-string '.foo.) "\\.foo.")) + (should (equal (prin1-to-string '.foo) ".foo")) + (should (equal (prin1-to-string '.foo.) ".foo.")) + (should (equal (prin1-to-string '.$) "\\.$")) + (should (equal (prin1-to-string '\.) "\\.")) (should (equal (prin1-to-string 'bar?bar) "bar?bar")) (should (equal (prin1-to-string '\?bar) "\\?bar")) (should (equal (prin1-to-string '\?bar?) "\\?bar?"))) commit a0f26f3eaf1ccde728806003932dc9e44ef07e9d Author: Stefan Monnier Date: Mon Apr 28 13:35:09 2025 -0400 (Custom-dirlocals-mode): Let `define-derived-mode` do its job * lisp/cus-edit.el (Custom-dirlocals-mode-map): Rename from `custom-dirlocals-map`. (Custom-dirlocals-menu): Adjust accordingly. (Custom-dirlocals-mode): Let `define-derived-mode` do its job. Use `run-mode-hooks`. diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el index 5fc53bdcdd7..a92f08fafc5 100644 --- a/lisp/cus-edit.el +++ b/lisp/cus-edit.el @@ -5919,7 +5919,9 @@ This stores EXP (without evaluating it) as the saved spec for SYMBOL." (defvar-local custom-dirlocals-file-widget nil "Widget that holds the name of the dir-locals file being customized.") -(defvar-keymap custom-dirlocals-map +(define-obsolete-variable-alias 'custom-dirlocals-map + 'Custom-dirlocals-mode-map "31.1") +(defvar-keymap Custom-dirlocals-mode-map :doc "Keymap used in the \"*Customize Dirlocals*\" buffer." :full t :parent widget-keymap @@ -5951,7 +5953,7 @@ This stores EXP (without evaluating it) as the saved spec for SYMBOL." See `custom-commands' for further explanation.") (easy-menu-define - Custom-dirlocals-menu (list custom-dirlocals-map + Custom-dirlocals-menu (list Custom-dirlocals-mode-map custom-dirlocals-field-map) "Menu used in dirlocals customization buffers." (nconc (list "Custom" @@ -6063,14 +6065,8 @@ Moves point into the widget that holds the value." (add-hook 'widget-forward-hook #'custom-dirlocals-maybe-update-cons nil t)) (define-derived-mode Custom-dirlocals-mode nil "Custom dirlocals" - "Major mode for customizing Directory Local Variables in current directory. -Entry to this mode calls the value of `Custom-mode-hook' if its value -is non-nil. - -\\{custom-dirlocals-map}" - (kill-all-local-variables) + "Major mode for customizing Directory Local Variables in current directory." (custom-dirlocals--set-widget-vars) - (setq-local major-mode #'Custom-dirlocals-mode) (setq-local text-conversion-style 'action) (setq-local touch-screen-keyboard-function #'Custom-display-on-screen-keyboard-p) @@ -6082,13 +6078,17 @@ is non-nil. (mapc (lambda (arg) (tool-bar-local-item-from-menu - (nth 1 arg) (nth 4 arg) map custom-dirlocals-map + (nth 1 arg) (nth 4 arg) map Custom-dirlocals-mode-map :label (nth 5 arg))) custom-dirlocals-commands) (setq custom-dirlocals-tool-bar-map map)))) - (use-local-map custom-dirlocals-map) - (run-hooks 'Custom-mode-hook)) + (run-mode-hooks 'Custom-mode-hook)) +;; As discussed in bug#77228, deriving from `Custom-mode' would +;; include all their settings that are not necessary for +;; `customize-dirlocals' and that can break it. +;; FIXME: Introduce a `Custom-base-mode', which could be useful +;; also for `gnus-custom-mode'. (derived-mode-add-parents 'Custom-dirlocals-mode '(Custom-mode)) (defmacro custom-dirlocals-with-buffer (&rest body) commit c801856820c17247416846ac565b81268b4aca16 Author: Michael Albinus Date: Mon Apr 28 08:22:09 2025 +0200 ; Fix previous change * test/lisp/url/url-parse-tests.el (url-generic-parse-url/ms-windows-file-uri-handling): Rename. diff --git a/test/lisp/url/url-parse-tests.el b/test/lisp/url/url-parse-tests.el index 66b27f3a638..aaa680567ac 100644 --- a/test/lisp/url/url-parse-tests.el +++ b/test/lisp/url/url-parse-tests.el @@ -166,7 +166,7 @@ (url-parse-make-urlobj "http" nil nil "банки.рф" nil "/фыва/" nil nil t)))) -(ert-deftest url-generic-parse-url/ms-windows-file-uri-hanlding () +(ert-deftest url-generic-parse-url/ms-windows-file-uri-handling () "Make an exception if a file:// URI \"looks like\" a Windows file." (should (equal (url-generic-parse-url "file:///c:/windows-path") (url-parse-make-urlobj "file" nil nil "" nil @@ -194,7 +194,7 @@ (should (equal (url-filename (url-generic-parse-url "file://localhost/c:/path/to/file")) "c:/path/to/file")) - ;; empty "file" url structs have to behave as they did before this fix + ;; empty "file" url structs have to behave proper (should (equal (url-recreate-url (url-parse-make-urlobj "file" nil nil "myhost" nil nil nil nil t)) commit bc5afe421b47ec31ce94ad8dc02912acd93c3319 Author: Sebastián Monía Date: Mon Apr 28 08:19:06 2025 +0200 url-parse.el: correct code for Windows paths (bug#76982) * lisp/url/url-parse.el (url-recreate-url): Handle empty filenames without errors. * test/lisp/url/url-parse-tests.el (url-generic-parse-url/ms-windows-file-uri-hanlding): Add one more test for the scenario above. diff --git a/lisp/url/url-parse.el b/lisp/url/url-parse.el index d2f49ef2c5f..195cc957668 100644 --- a/lisp/url/url-parse.el +++ b/lisp/url/url-parse.el @@ -86,6 +86,7 @@ If the specified port number is the default, return nil." ;; For Windows/DOS-like paths, `url-generic-parse-url' strips ;; the leading /, so we need to add it back (bug#76982) (file (if (and (string= "file" type) + (url-filename urlobj) (string-match "^[A-Za-z]:[/\\]" (url-filename urlobj))) (concat "/" (url-filename urlobj)) (url-filename urlobj))) diff --git a/test/lisp/url/url-parse-tests.el b/test/lisp/url/url-parse-tests.el index c4c4b2fc8f8..66b27f3a638 100644 --- a/test/lisp/url/url-parse-tests.el +++ b/test/lisp/url/url-parse-tests.el @@ -190,10 +190,16 @@ (should (equal (url-filename (url-generic-parse-url "file:///c:\\directory\\file.txt")) "c:\\directory\\file.txt")) - ;; + ;; paths with hostname = "localhost" should work too (should (equal (url-filename (url-generic-parse-url "file://localhost/c:/path/to/file")) - "c:/path/to/file"))) + "c:/path/to/file")) + ;; empty "file" url structs have to behave as they did before this fix + (should (equal (url-recreate-url + (url-parse-make-urlobj "file" nil nil "myhost" nil + nil nil nil t)) + "file://myhost/"))) + (provide 'url-parse-tests) commit c0491a8b807b6b2dae27fd4749c101915bd04e53 Author: Sean Whitton Date: Mon Apr 28 10:46:48 2025 +0800 ; project-vc-include-unregistered: Add FIXME about renaming. diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index 27b69277e81..808d2890b8d 100644 --- a/lisp/progmodes/project.el +++ b/lisp/progmodes/project.el @@ -449,6 +449,9 @@ you might have to restart Emacs to see the effect." :package-version '(project . "0.2.0")) ;;;###autoload(put 'project-vc-merge-submodules 'safe-local-variable #'booleanp) +;; FIXME Consider renaming this to `project-vc-include-unregistered' for +;; consistency with VC. "untracked" comes from Git and Mercurial so is +;; fine for now, but these may not always be the most popular VCS. (defcustom project-vc-include-untracked t "When non-nil, the VC-aware project backend includes untracked files." :type 'boolean commit 56baa23e1afedd4c1f2ead47b28d39b646f4275a Author: Sean Whitton Date: Mon Apr 28 10:46:10 2025 +0800 ; * doc/emacs/maintaining.texi (VC-Aware Project Backend): Copyedit. diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi index 7128c84e3f8..94f2c8331ca 100644 --- a/doc/emacs/maintaining.texi +++ b/doc/emacs/maintaining.texi @@ -2062,9 +2062,9 @@ It has some performance optimizations for listing the files with some of the popular VCS systems (currently Git and Mercurial). @defopt project-vc-include-untracked -By default, files which are neither registered with the VCS nor ignored -are considered part of the project. Customize this variable to nil to -change that. +By default, files which are neither registered with nor ignored by the +VCS are considered part of the project. Customize this variable to nil +to change that. @end defopt @defopt project-vc-ignores commit 4765a3b3f2b83e6a2ba4e63f78bec16dc8ca737f Author: Tim Landscheidt Date: Mon Apr 28 03:05:22 2025 +0300 Fix ruby lint output regexps * doc/misc/flymake.texi (An annotated example backend): Fix regexp. * lisp/progmodes/ruby-mode.el (ruby-flymake-simple) (ruby-flymake-rubocop): Fix regexp (https://lists.gnu.org/archive/html/emacs-devel/2025-04/msg00851.html). diff --git a/doc/misc/flymake.texi b/doc/misc/flymake.texi index d3a76c8c4d7..d6c8778d785 100644 --- a/doc/misc/flymake.texi +++ b/doc/misc/flymake.texi @@ -858,7 +858,7 @@ Binding,,, elisp, The Emacs Lisp Reference Manual}) to be active. ;; (cl-loop while (search-forward-regexp - "^\\(?:.*.rb\\|-\\):\\([0-9]+\\): \\(.*\\)$" + "^\\(?:.*\\.rb\\|-\\):\\([0-9]+\\): \\(.*\\)$" nil t) for msg = (match-string 2) for (beg . end) = (flymake-diag-region diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index 210c8efb6fc..d9044c03aea 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el @@ -2516,7 +2516,7 @@ A slash character after any of these should begin a regexp.")) (goto-char (point-min)) (cl-loop while (search-forward-regexp - "^\\(?:.*.rb\\|-\\):\\([0-9]+\\): \\(.*\\)$" + "^\\(?:.*\\.rb\\|-\\):\\([0-9]+\\): \\(.*\\)$" nil t) for msg = (match-string 2) for (beg . end) = (flymake-diag-region @@ -2625,7 +2625,7 @@ the gem \"rubocop\". When t, it is used unconditionally." (goto-char (point-min)) (cl-loop while (search-forward-regexp - "^\\(?:.*.rb\\|-\\):\\([0-9]+\\):\\([0-9]+\\): \\(.*\\)$" + "^\\(?:.*\\.rb\\|-\\):\\([0-9]+\\):\\([0-9]+\\): \\(.*\\)$" nil t) for msg = (match-string 3) for (beg . end) = (flymake-diag-region commit 568a4894a8d7cc61c7a4cf416939e01fb78f0ead Author: Dmitry Gutov Date: Mon Apr 28 01:41:40 2025 +0300 * doc/emacs/maintaining.texi (VC-Aware Project Backend): * doc/emacs/maintaining.texi (VC-Aware Project Backend): New node (bug#77974). (Projects): Use "backend" instead of "back-end". diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi index c761dc33c86..7128c84e3f8 100644 --- a/doc/emacs/maintaining.texi +++ b/doc/emacs/maintaining.texi @@ -1782,20 +1782,18 @@ more programs. Files that belong to a project are typically stored in a hierarchy of directories; the top-level directory of the hierarchy is known as the @dfn{project root}. -@cindex project back-end +@cindex project backend Whether a given directory is a root of some project is determined by -the project-specific infrastructure, known as @dfn{project back-end}. -Emacs currently supports two such back-ends: VC-aware (@pxref{Version +the project-specific infrastructure, known as @dfn{project backend}. +Emacs currently supports two such backends: VC-aware (@pxref{Version Control}), whereby a VCS repository is considered a project; and EDE (@pxref{EDE}). This is expected to be extended in the future to support additional types of projects. Which files do or don't belong to a project is also determined by -the project back-end. For example, the VC-aware back-end doesn't +the project backend. For example, the VC-aware backend doesn't consider ``ignored'' files (@pxref{VC Ignore}) to be part of the -project. Also, the VC-aware Project back-end considers ``untracked'' -files by default. That behavior is controllable with the variable -@code{project-vc-include-untracked}. +project. See its entry below for description and related options. @cindex current project name on mode line @defopt project-mode-line @@ -1810,6 +1808,7 @@ The default value is @code{nil}. * Project Buffer Commands:: Commands for handling project buffers. * Switching Projects:: Switching between projects. * Managing Projects:: Managing the project list file. +* VC-Aware Project Backend:: Default project backend. @end menu @node Project File Commands @@ -2049,6 +2048,50 @@ matched against the project root, and the predicate should take the project object as the only argument and return non-@code{nil} if the project should @emph{not} be saved to @code{project-list-file}. +@cindex VC-aware project backend +@cindex project backend, VC-aware +@node VC-Aware Project Backend +This backend is part of Emacs and is enabled by default. (Other +backends may need installation of add-on packages and their proper +configuration.) + +It determines the contents of the project based on the VCS repository's +configuration (if any), excluding the ``ignored'' files from the output. + +It has some performance optimizations for listing the files with some of +the popular VCS systems (currently Git and Mercurial). + +@defopt project-vc-include-untracked +By default, files which are neither registered with the VCS nor ignored +are considered part of the project. Customize this variable to nil to +change that. +@end defopt + +@defopt project-vc-ignores +Using this variable you can add more ignore patterns to the project, to +exclude more files from the project's file listing. The value is a list +of glob strings. They can match both regular files and directories. To +anchor an entry to the project root, start it with @code{./}. To match +directories only, end it with @code{/}. +@end defopt + +@defopt project-vc-name +This variable allows you to change the automatically detected name of +the project to a string of your choice. By default the name is the base +name of its root directory. +@end defopt + +@defopt project-vc-extra-root-markers +This variable allows you to set up detection of non-VC projects in this +backend, and also to have some subdirectories detected as separate +projects. The value is a list. + +Each element is either a base file name or a glob pattern for such. + +Example values: @file{.dir-locals.el}, @file{package.json}, +@file{requirements.txt}, @file{*.gemspec}. +@end defopt + @node Change Log @section Change Logs commit 74e3755eb650af66bc360e5b393bd6097ddd1c87 Merge: 5478e3bb204 aa1b55d5210 Author: Po Lu Date: Sun Apr 27 21:09:29 2025 +0800 Merge from savannah/emacs-30 aa1b55d5210 Fix the Android build commit 5478e3bb204fa4cb673052c73aeb97a5a80a69e5 Merge: d87cde31777 d394cd73d1b Author: Po Lu Date: Sun Apr 27 21:09:29 2025 +0800 ; Merge from savannah/emacs-30 The following commit was skipped: d394cd73d1b Avoid infinite recursion under 'rectangle-mark-mode' commit d87cde317770b31e594f33b7e216de5646214aee Merge: 0262e3e158e b5967dda32d Author: Po Lu Date: Sun Apr 27 21:09:29 2025 +0800 Merge from savannah/emacs-30 b5967dda32d ; * doc/misc/ert.texi (Introduction): Be more Lisp-specific. be4819bd578 Include additional version metadata during Windows install commit aa1b55d5210f4c8ad83a0e8c2367e8691d785fa7 Author: Po Lu Date: Sun Apr 27 21:08:48 2025 +0800 Fix the Android build * java/README.res: Move from java/res/README, as the AAPT does not permit non-resource files in resource directories. diff --git a/java/res/README b/java/README.res similarity index 71% rename from java/res/README rename to java/README.res index 38f3f232033..ac981dbebc3 100644 --- a/java/res/README +++ b/java/README.res @@ -1,4 +1,4 @@ * The wrench icon that is superimposed on Emacs's own icon in - drawable/emacs_wrench.png was released into the Public Domain by the + res/drawable/emacs_wrench.png was released into the Public Domain by the Tango Desktop Project. commit 0262e3e158e35770f864d3131baf8f1793a20e58 Author: João Távora Date: Sun Apr 27 13:00:28 2025 +0100 Flymake: Experimental 'fancy' flymake-show-diagnostics-at-end-of-line * doc/misc/flymake.texi (Customizable variables): Describe new flymake-show-diagnostics-at-end-of-line. * etc/NEWS: Mention 'flymake-show-diagnostics-at-end-of-line'. * lisp/progmodes/flymake.el (flymake-show-diagnostics-at-end-of-line): Update docstring. * lisp/progmodes/flymake.el (flymake--eol-overlay-summary): Rework. Move to separate section. (flymake--update-eol-overlays): Rework. Use 'display'. Move to separate section. (flymake--eol-draw-fancy-1, flymake--eol-draw-fancy): New helpers. (flymake-end-of-line-diagnostics-face): Remove box. diff --git a/doc/misc/flymake.texi b/doc/misc/flymake.texi index e5d68f90a9b..d3a76c8c4d7 100644 --- a/doc/misc/flymake.texi +++ b/doc/misc/flymake.texi @@ -351,9 +351,11 @@ If non-@code{nil}, moving to errors with @code{flymake-goto-next-error} and @item flymake-show-diagnostics-at-end-of-line If non-@code{nil}, show summarized descriptions of diagnostics at the end of the line. Depending on your preference, this can either be -distracting and easily confused with actual code, or a significant -early aid that relieves you from moving around or reaching for the -mouse to consult an error message. +distracting and easily confused with actual code, or a significant early +aid that relieves you from moving around or reaching for the mouse to +consult an error message. This value may also be set to @code{fancy}, +which will attempt to layout diagnostics below the affected line using +unicode graphics to point to diagnostic locus. @item flymake-diagnostic-format-alist Control which parts of a diagnostic to show in various situations. diff --git a/etc/NEWS b/etc/NEWS index 5c7b212ef1a..a5936b1c6cf 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1943,6 +1943,11 @@ When 'flymake-indicator-type' is set to 'fringes', as is now the default, flymake will automatically fall back to using margin indicators in windows without fringes, including any window on a text terminal. +*** Enhanced 'flymake-show-diagnostics-at-end-of-line' +The new value 'fancy' allowed for this variable will attempt to layout +diagnostics below the affected line using unicode graphics to point to +diagnostic locus. + *** Enhanced 'flymake-show-buffer-diagnostics'. The command 'flymake-show-buffer-diagnostics' is now capable of highlighting a nearby diagnostic in the resulting listing. Additionally, diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index 974ac664822..6a3dbe4f5c5 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -586,7 +586,7 @@ verify FILTER, a function, and sort them by COMPARE (using KEY)." :package-version '(Flymake . "1.3.4")) (defface flymake-end-of-line-diagnostics-face - '((t :height 0.85 :box (:line-width -1))) + '((t :height 0.85)) "Face used for end-of-line diagnostics. See variable `flymake-show-diagnostics-at-end-of-line'." :package-version '(Flymake . "1.3.5")) @@ -616,8 +616,11 @@ See variable `flymake-show-diagnostics-at-end-of-line'." (defcustom flymake-show-diagnostics-at-end-of-line nil "If non-nil, add diagnostic summary messages at end-of-line. The value `short' means that only the most severe diagnostic -shall be shown. Any other non-nil value means show all -diagnostic summaries at end-of-line." +shall be shown. +The value `fancy' means to layout diagnostic summary information +below the affected line with Unicode graphics. +Any other non-nil value means show all diagnostic summaries at +end-of-line." :type '(choice (const :tag "Display most severe diagnostic" short) (const :tag "Display all diagnostics" t) (const :tag "Don't display diagnostics at end-of-line" nil)) @@ -909,42 +912,6 @@ Return to original margin width if ORIG-WIDTH is non-nil." (overlay-put eolov 'flymake-eol-source-overlays src-ovs))) (delete-overlay ov))) -(defun flymake--eol-overlay-summary (src-ovs) - "Helper function for `flymake--update-eol-overlays'." - (cl-flet ((summarize (d) - (flymake--format-diagnostic d :eol 'eol-face))) - (let* ((diags - (cl-sort - (mapcar (lambda (o) (overlay-get o 'flymake-diagnostic)) src-ovs) - #'> - :key (lambda (d) (flymake--severity (flymake-diagnostic-type d))))) - (summary - (concat - " " - (cond ((eq flymake-show-diagnostics-at-end-of-line 'short) - (concat - (summarize (car diags)) - (and (cdr diags) - (concat - " " - (propertize (format "and %s more" - (1- (length diags))) - 'face 'flymake-eol-information-face))))) - (t - (mapconcat #'summarize diags " ")))))) - (put-text-property 0 1 'cursor t summary) - summary))) - -(defun flymake--update-eol-overlays () - "Update the `before-string' property of end-of-line overlays." - (save-restriction - (widen) - (dolist (o (overlays-in (point-min) (point-max))) - (when (overlay-get o 'flymake--eol-overlay) - (if-let* ((src-ovs (overlay-get o 'flymake-eol-source-overlays))) - (overlay-put o 'before-string (flymake--eol-overlay-summary src-ovs)) - (delete-overlay o)))))) - (cl-defun flymake--highlight-line (diagnostic &optional foreign) "Attempt to overlay DIAGNOSTIC in current buffer. @@ -2268,6 +2235,130 @@ some of this variable's contents the diagnostic listings.") (eq flymake--diagnostics-buffer-source buffer))) (revert-buffer))))) + +;;; Eol overlay helpers +;;; +(defun flymake--update-eol-overlays () + "Update the `display' property of end-of-line overlays." + (save-restriction + (widen) + (dolist (o (overlays-in (point-min) (point-max))) + (when (overlay-get o 'flymake--eol-overlay) + (if-let* ((src-ovs (overlay-get o 'flymake-eol-source-overlays))) + (overlay-put o 'display (flymake--eol-overlay-summary src-ovs)) + (delete-overlay o)))))) + +(defun flymake--eol-overlay-summary (src-ovs) + "Helper function for `flymake--update-eol-overlays'." + (cl-flet ((summarize (d) + (flymake--format-diagnostic d :eol 'eol-face))) + (let* ((diags + (cl-sort + (mapcar (lambda (o) (overlay-get o 'flymake-diagnostic)) src-ovs) + #'> + :key (lambda (d) (flymake--severity (flymake-diagnostic-type d))))) + (summary + (concat + " " + (cond ((eq flymake-show-diagnostics-at-end-of-line 'short) + (concat + (summarize (car diags)) + (and (cdr diags) + (concat + " " + (propertize (format "and %s more" + (1- (length diags))) + 'face 'flymake-eol-information-face))))) + ((eq flymake-show-diagnostics-at-end-of-line 'fancy) + (flymake--eol-draw-fancy diags #'summarize)) + (t + (mapconcat #'summarize diags " "))) + "\n"))) + (put-text-property 0 1 'cursor t summary) + summary))) + +(defun flymake--eol-draw-fancy-1 (text boxdraw-face line-beg-col + height-to-clear + text-beg-col + text-end-col) + (cl-flet ((move (cl) + (let* ((lep (line-end-position)) + (target (+ (point) cl)) + (diff (- target lep))) + (cond ((> diff 0) + (goto-char lep) + (insert (make-string diff ? ))) + (t + (goto-char target))))) + (onward () + (let ((rem (forward-line 1))) + (unless (and (not (eobp)) (zerop rem)) + (goto-char (point-max)) + (insert "\n"))))) + (goto-char (point-min)) + (cl-loop + with fork = (propertize "├" 'face boxdraw-face) + with pipe = (propertize "│" 'face boxdraw-face) + with inhibit-field-text-motion = t + for i from 0 + repeat height-to-clear + do (move line-beg-col) + (let ((c (char-before))) + (delete-char -1) + (insert + (propertize + (cond ;; ((zerop i) "┬") + ((memq c '(?└ ?├)) fork) + (t pipe)) + 'face boxdraw-face))) + (onward)) + (move line-beg-col) + (delete-char -1) + (insert (propertize "└" 'face boxdraw-face)) + (insert (propertize (make-string (- text-beg-col line-beg-col 1) + ?─) + 'face boxdraw-face)) + (insert " ") + (let ((rect (with-temp-buffer + (insert text) + (let ((fill-column (- text-end-col text-beg-col))) + (fill-paragraph) + (forward-line 0) + (move fill-column) + (extract-rectangle (point-min) (point-max)))))) + (insert-rectangle rect) + (+ height-to-clear (length rect))))) + +(defun flymake--eol-draw-fancy (diags summarize-fn) + (with-temp-buffer + (cl-loop + with sorted = (cl-sort diags #'> :key #'flymake-diagnostic-beg) + for diag in sorted + for text = (funcall summarize-fn diag) + for line-beg-col = + (with-current-buffer (flymake-diagnostic-buffer diag) + (save-excursion + (goto-char (flymake-diagnostic-beg diag)) + (1+ (current-column)))) + for height-to-clear = 0 then ret + for i from 0 + for adjust = (* i 2) + for face = `(:inherit default + :foreground + ,(face-attribute + (get-text-property 0 'face text) + :foreground nil t)) + for text-beg-col = (max (- (max 30 (+ line-beg-col 5)) adjust) (+ line-beg-col 1)) + for text-end-col = (max 100 (+ text-beg-col 40)) + for ret = (flymake--eol-draw-fancy-1 + text + face + line-beg-col + height-to-clear + text-beg-col + text-end-col)) + (concat " \n" (buffer-string)))) + (provide 'flymake) ;;; flymake.el ends here commit ebcde0f90f67852d485a36941b0661cfd1b892eb Author: Michael Shields Date: Sat Apr 19 12:58:26 2025 -0700 Fix use-package :custom-face to set face-defface-spec (bug#77928) By default, `face-set-spec' sets the override face spec, so face attributes are combined with defaults rather than replacing them. This was a behavior change that was an apparently unintended consequence of commit 6b344a9. Also set the `face-modified' property, which causes Customize to flag the face as changed outside Customize. * doc/misc/use-package.texi (Faces): Document the behavior. * lisp/use-package/use-package-core.el (use-package-handler/:custom-face): (use-package): Improve docstring to reflect implementation. * test/lisp/use-package/use-package-tests.el (use-package-test/:custom-face-1): (use-package-test/:custom-face-2): (use-package-test/:custom-face-3): (use-package-test/:custom-face-4): Add tests. diff --git a/doc/misc/use-package.texi b/doc/misc/use-package.texi index c8630cee1c9..2f980df9f45 100644 --- a/doc/misc/use-package.texi +++ b/doc/misc/use-package.texi @@ -1471,7 +1471,7 @@ faces. Example: (use-package example :custom-face (example-1-face ((t (:foreground "LightPink")))) - (example-2-face ((t (:foreground "LightGreen"))) face-defspec-spec)) + (example-2-face ((t (:foreground "LightGreen"))))) @end group @group @@ -1486,6 +1486,11 @@ faces. Example: @end group @end lisp +Similarly to @code{:custom} (@pxref{User options}), this allows +configuring customizable faces outside of Customize (@pxref{Saving +Customizations,,, emacs, GNU Emacs Manual}). Using both systems to +configure the same face can lead to confusing results. + @node Hiding minor modes @section Hiding minor modes with diminish and delight @cindex hiding minor modes diff --git a/lisp/use-package/use-package-core.el b/lisp/use-package/use-package-core.el index 630ee83601c..65b9485b4e3 100644 --- a/lisp/use-package/use-package-core.el +++ b/lisp/use-package/use-package-core.el @@ -1623,7 +1623,11 @@ no keyword implies `:all'." (defun use-package-handler/:custom-face (name _keyword args rest state) "Generate use-package custom-face keyword code." (use-package-concat - (mapcar #'(lambda (def) `(apply #'face-spec-set (backquote ,def))) args) + (mapcar #'(lambda (def) + `(progn + (apply #'face-spec-set (append (backquote ,def) '(face-defface-spec))) + (put ',(car def) 'face-modified t))) + args) (use-package-process-keywords name rest state))) ;;;; :init @@ -1887,7 +1891,7 @@ Usage: :custom Call `Custom-set' or `set-default' with each variable definition without modifying the Emacs `custom-file'. (compare with `custom-set-variables'). -:custom-face Call `custom-set-faces' with each face definition. +:custom-face Call `face-spec-set' with each face definition. :ensure Loads the package using package.el if necessary. :pin Pin the package to an archive. :vc Install the package directly from a version control system diff --git a/test/lisp/use-package/use-package-tests.el b/test/lisp/use-package/use-package-tests.el index 8554b37d5b8..b221c5de5c1 100644 --- a/test/lisp/use-package/use-package-tests.el +++ b/test/lisp/use-package/use-package-tests.el @@ -1153,7 +1153,12 @@ (match-expansion (use-package foo :custom-face (foo ((t (:background "#e4edfc"))))) `(progn - (apply #'face-spec-set (backquote (foo ((t (:background "#e4edfc")))))) + (progn + (apply #'face-spec-set + (append (backquote (foo ((t (:background "#e4edfc"))))) + '(face-defface-spec)) + ) + (put 'foo 'face-modified t)) (require 'foo nil nil)))) (ert-deftest use-package-test/:custom-face-2 () @@ -1163,19 +1168,42 @@ (example-1-face ((t (:foreground "LightPink")))) (example-2-face ((t (:foreground "LightGreen"))))) `(progn - (apply #'face-spec-set - (backquote (example-1-face ((t (:foreground "LightPink")))))) - (apply #'face-spec-set - (backquote (example-2-face ((t (:foreground "LightGreen")))))) + (progn + (apply #'face-spec-set + (append (backquote (example-1-face ((t (:foreground "LightPink"))))) + '(face-defface-spec))) + (put 'example-1-face 'face-modified t)) + (progn + (apply #'face-spec-set + (append (backquote (example-2-face ((t (:foreground "LightGreen"))))) + '(face-defface-spec))) + (put 'example-2-face 'face-modified t)) (require 'example nil nil)))) (ert-deftest use-package-test/:custom-face-3 () (match-expansion (use-package foo :custom-face (foo ((t (:background "#e4edfc"))) face-defspec-spec)) `(progn - (apply #'face-spec-set (backquote (foo ((t (:background "#e4edfc"))) face-defspec-spec))) + (progn + (apply #'face-spec-set + (append (backquote (foo ((t (:background "#e4edfc"))) face-defspec-spec)) + '(face-defface-spec))) + (put 'foo 'face-modified t)) (require 'foo nil nil)))) +(ert-deftest use-package-test/:custom-face-4 () + (defface use-package-test/base-face '((t (:background "green"))) "") + (defface use-package-test/face '((t (:inherit use-package-test/base-face))) "") + (use-package emacs + :custom-face + (use-package-test/face ((t (:foreground "blue"))))) + (should (equal (face-foreground 'use-package-test/face nil t) + "blue")) + (should (equal (face-background 'use-package-test/face nil t) + nil)) + (should (equal (get 'use-package-test/face 'face-modified) + t))) + (ert-deftest use-package-test/:init-1 () (match-expansion (use-package foo :init (init)) commit d394cd73d1b21bd1f6d1679c2fcbb10433477092 Author: Eli Zaretskii Date: Sun Apr 27 10:08:38 2025 +0300 Avoid infinite recursion under 'rectangle-mark-mode' * lisp/rect.el (rectangle--region-beginning) (rectangle--region-end): Avoid infinite recursion. Patch by Alcor . Do not merge to master. (Bug#77973) diff --git a/lisp/rect.el b/lisp/rect.el index c82bca8100c..b6dc9548bb1 100644 --- a/lisp/rect.el +++ b/lisp/rect.el @@ -766,7 +766,7 @@ Ignores `line-move-visual'." ((not rectangle-mark-mode) (funcall orig)) (t - (apply #'min (mapcar #'car (region-bounds)))))) + (apply #'min (mapcar #'car (let (rectangle-mark-mode) (region-bounds))))))) (defun rectangle--region-end (orig) "Like `region-end' but supports rectangular regions." @@ -774,7 +774,7 @@ Ignores `line-move-visual'." ((not rectangle-mark-mode) (funcall orig)) (t - (apply #'max (mapcar #'cdr (region-bounds)))))) + (apply #'max (mapcar #'cdr (let (rectangle-mark-mode) (region-bounds))))))) (defun rectangle--extract-region (orig &optional delete) (cond commit 0c55cd0e176cc73178e8f18d959d5a6f9bf632de Author: Adam Sjøgren Date: Sun Apr 20 18:44:16 2025 +0200 Improve documentation of 'insert-kbd-macro' * lisp/macros.el (insert-kbd-macro): Update documentation of what happens when no macro name is supplied. * doc/emacs/kmacro.texi (Save Keyboard Macro): Document saving 'last-kbd-macro'. (Bug#77317) diff --git a/doc/emacs/kmacro.texi b/doc/emacs/kmacro.texi index 62f275de259..09c6c5d4675 100644 --- a/doc/emacs/kmacro.texi +++ b/doc/emacs/kmacro.texi @@ -472,9 +472,9 @@ C-x C-k b 4 will bind the last keyboard macro to the key sequence @kbd{C-x C-k 4}. @findex insert-kbd-macro - Once a macro has a command name, you can save its definition in a file. -Then it can be used in another editing session. First, visit the file -you want to save the definition in. Then use this command: + You can save a macro's definition in a file. Then it can be used in +another editing session. First, visit the file you want to save the +definition in. Then use this command: @example M-x insert-kbd-macro @key{RET} @var{macroname} @key{RET} @@ -494,6 +494,9 @@ additional Lisp code to record the keys (if any) that you have bound to @var{macroname}, so that the macro will be reassigned the same keys when you load the file. + If you do not give @code{insert-kbd-macro} a macro name, it will +insert Lisp code to restore the @code{last-kdb-macro}. + @node Edit Keyboard Macro @section Editing a Keyboard Macro diff --git a/lisp/macros.el b/lisp/macros.el index fe79fe10f98..59554773629 100644 --- a/lisp/macros.el +++ b/lisp/macros.el @@ -49,7 +49,8 @@ ;;;###autoload (defun insert-kbd-macro (macroname &optional keys) "Insert in buffer the definition of kbd macro MACRONAME, as Lisp code. -MACRONAME should be a symbol. +MACRONAME should be a symbol; if none is given, the function inserts +the definition of `last-kdb-macro'. Optional second arg KEYS means also record the keys it is on \(this is the prefix argument, when calling interactively). commit 925ac2ef7043a1cf5356f8fa1f15ae43529319bc Author: Sean Whitton Date: Sun Apr 27 12:30:41 2025 +0800 Mark vc-dav.el as obsolete (bug#77626) * lisp/vc/vc-dav.el: Move from here ... * lisp/obsolete/vc-dav.el: ... to here (bug#77626). Add Obsolete-since header. * etc/NEWS: Announce the obsoletion. diff --git a/etc/NEWS b/etc/NEWS index f73bb24b855..5c7b212ef1a 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1727,6 +1727,9 @@ This replaces and generalizes the old 'vc-annotate-parent-file'. This specifies the revision to which the buffer's contents corresponds. This replaces and generalizes the old 'vc-annotate-parent-rev'. +--- +*** vc-dav.el is now obsolete. + ** Diff mode +++ diff --git a/lisp/vc/vc-dav.el b/lisp/obsolete/vc-dav.el similarity index 99% rename from lisp/vc/vc-dav.el rename to lisp/obsolete/vc-dav.el index ad86fdd99b2..29d111b7621 100644 --- a/lisp/vc/vc-dav.el +++ b/lisp/obsolete/vc-dav.el @@ -5,6 +5,7 @@ ;; Author: Bill Perry ;; Keywords: url, vc ;; Package: vc +;; Obsolete-since: 31.1 ;; This file is part of GNU Emacs. commit b5967dda32dd9091389e30d8aaa46bdf8319d3e8 Author: Sean Whitton Date: Sun Apr 27 11:59:17 2025 +0800 ; * doc/misc/ert.texi (Introduction): Be more Lisp-specific. diff --git a/doc/misc/ert.texi b/doc/misc/ert.texi index fdf2b2b8aaf..bde76d79394 100644 --- a/doc/misc/ert.texi +++ b/doc/misc/ert.texi @@ -134,11 +134,11 @@ package @file{pp.el}): ;; (pp-to-string '('a 'b)) ; same as above @end lisp -The code contained in these comments can be evaluated from time to -time to compare the output with the expected output. ERT formalizes -this and introduces a common convention, which simplifies Emacs -development, since programmers no longer have to manually find and -evaluate such comments. +The Lisp forms contained in these comments can be evaluated from time to +time, e.g. with @kbd{C-x C-e}, to compare the output with the expected +output. ERT formalizes this and introduces a common convention, which +simplifies Emacs development, since programmers no longer have to +manually find and evaluate such comments. An ERT test definition equivalent to the above comments is this: commit 07c2b169edc2c5aaad1c8f494663a8198b2d4ca2 Author: Sean Whitton Date: Sun Apr 27 11:45:54 2025 +0800 Improve syncing VC buffers before generating diffs * lisp/vc/vc.el (vc-maybe-buffer-sync): Delete. Correct handling of indirect buffers is now implicitly achieved by vc-buffer-sync-fileset. (vc-buffer-sync-fileset): Make NOT-ESSENTIAL argument optional, new MISSING-IN-DIRS optional argument. Rewrite to handle directories named in the fileset, not only files. (vc-ediff): Replace call to vc-maybe-buffer-sync with a call to vc-buffer-sync-fileset. (vc-root-diff): Similarly replace call to vc-maybe-buffer-sync. This means the user is prompted to save additional buffers, that they likely want to save before generating the diffs. * test/lisp/vc/vc-misc-tests.el: New file. diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index 4b7d2f7b53b..0d135854d69 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -2281,10 +2281,6 @@ state of each file in the fileset." t (list backend (list rootdir)) rev1 rev2 (called-interactively-p 'interactive))))) -(defun vc-maybe-buffer-sync (not-essential) - (with-current-buffer (or (buffer-base-buffer) (current-buffer)) - (when buffer-file-name (vc-buffer-sync not-essential)))) - ;;;###autoload (defun vc-diff (&optional historic not-essential fileset) "Display diffs between file revisions. @@ -2303,11 +2299,40 @@ Optional argument FILESET, if non-nil, overrides the fileset." (vc-diff-internal t fileset nil nil (called-interactively-p 'interactive))))) -(defun vc-buffer-sync-fileset (fileset not-essential) - (dolist (filename (cadr fileset)) - (when-let* ((buffer (find-buffer-visiting filename))) - (with-current-buffer buffer - (vc-buffer-sync not-essential))))) +(defun vc-buffer-sync-fileset (fileset &optional not-essential missing-in-dirs) + "Call `vc-buffer-sync' for most buffers visiting files in FILESET. +NOT-ESSENTIAL means it is okay to continue if the user says not to save. + +For files named explicitly in FILESET, this function always syncs their +buffers. By contrast, for directories named in FILESET, its behavior +depends on MISSING-IN-DIRS. For each directory named in FILESET, it +considers buffers visiting any file contained within that directory or +its subdirectories. If MISSING-IN-DIRS is nil, it syncs only those +buffers whose files exist on disk. Otherwise it syncs all of them." + ;; This treatment of directories named in FILESET is wanted for, at + ;; least, users with `vc-find-revision-no-save' set to non-nil: not + ;; treating directories this way would imply calling `vc-buffer-sync' + ;; on all buffers generated by \\`C-x v ~' during \\`C-x v D'. + (let (dirs buffers) + (dolist (name (cadr fileset)) + (if (file-directory-p name) + (push name dirs) + (when-let* ((buf (find-buffer-visiting name))) + (push buf buffers)))) + (when dirs + (setq buffers + (cl-nunion buffers + (match-buffers + (lambda (buf) + (and-let* + ((file (buffer-local-value 'buffer-file-name buf)) + ((or missing-in-dirs (file-exists-p file))) + ((cl-some (lambda (dir) + (file-in-directory-p file dir)) + dirs))))))))) + (dolist (buf buffers) + (with-current-buffer buf + (vc-buffer-sync not-essential))))) ;;;###autoload (defun vc-diff-mergebase (_files rev1 rev2) @@ -2384,8 +2409,9 @@ saving the buffer." (interactive (list current-prefix-arg t)) (if historic (call-interactively 'vc-version-ediff) - (vc-maybe-buffer-sync not-essential) - (vc-version-ediff (cadr (vc-deduce-fileset t)) nil nil))) + (let ((fileset (vc-deduce-fileset))) + (vc-buffer-sync-fileset fileset not-essential) + (vc-version-ediff (cadr fileset) nil nil)))) ;;;###autoload (defun vc-root-diff (historic &optional not-essential) @@ -2401,7 +2427,6 @@ saving the buffer." (if historic ;; We want the diff for the VC root dir. (call-interactively 'vc-root-version-diff) - (vc-maybe-buffer-sync not-essential) (let ((backend (vc-deduce-backend)) (default-directory default-directory) rootdir) @@ -2416,10 +2441,11 @@ saving the buffer." ;; relative to it. Bind default-directory to the root directory ;; here, this way the *vc-diff* buffer is setup correctly, so ;; relative file names work. - (let ((default-directory rootdir)) - (vc-diff-internal - t (list backend (list rootdir)) nil nil - (called-interactively-p 'interactive)))))) + (let ((default-directory rootdir) + (fileset `(,backend (,rootdir)))) + (vc-buffer-sync-fileset fileset not-essential) + (vc-diff-internal t fileset nil nil + (called-interactively-p 'interactive)))))) ;;;###autoload (defun vc-root-dir () diff --git a/test/lisp/vc/vc-misc-tests.el b/test/lisp/vc/vc-misc-tests.el new file mode 100644 index 00000000000..d19dda36d2f --- /dev/null +++ b/test/lisp/vc/vc-misc-tests.el @@ -0,0 +1,67 @@ +;;; vc-misc-tests.el --- backend-agnostic VC tests -*- lexical-binding:t -*- + +;; Copyright (C) 2025 Free Software Foundation, Inc. + +;; Author: Sean Whitton + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . + +;;; Commentary: + +;;; Code: + +(require 'ert-x) +(require 'vc) + +(ert-deftest vc-test-buffer-sync-fileset () + "Test `vc-buffer-sync-fileset'." + (cl-flet ((test-it (&rest args) + (let (buffers) + (cl-letf (((symbol-function 'vc-buffer-sync) + (lambda (&rest _) + (push (current-buffer) buffers)))) + (apply #'vc-buffer-sync-fileset args) + (sort buffers))))) + (ert-with-temp-directory temp + (let* ((default-directory temp) + (present (find-file-noselect "present")) + (missing (find-file-noselect "missing")) + (only-present (list present)) + (only-missing (list missing)) + (missing+present (list missing present))) + (with-current-buffer present (basic-save-buffer)) + (with-temp-file "unvisited") + ;; Regular behavior for files. + (should (equal (test-it `(Git ("missing"))) + only-missing)) + (should (equal (test-it `(Git ("present" "missing"))) + missing+present)) + ;; Regular behavior for directories. + (should (equal (test-it `(Git (,temp))) + only-present)) + ;; Two ways to override regular behavior for directories. + (should (equal (test-it `(Git (,temp)) nil t) + missing+present)) + (should (equal (test-it `(Git (,temp "missing"))) + missing+present)) + ;; Doesn't sync PRESENT twice. + (should (equal (test-it `(Git ("present" ,temp))) + only-present)) + (should (equal (test-it `(Git ("missing" ,temp "present"))) + missing+present)))))) + +(provide 'vc-misc-tests) +;;; vc-misc-tests.el ends here commit d047a89e769f3c8429c43a40d5f251a895590d3a Author: Sean Whitton Date: Sat Apr 26 13:15:55 2025 +0800 vc-diff: Delete redundant call to vc-maybe-buffer-sync This call is redundant with the subsequent call to vc-buffer-sync-fileset. I believe this call to vc-maybe-buffer-sync was reintroduced by accident -- the changeset adding the call to vc-buffer-sync-fileset deleted a call to vc-sync-fileset in the same place. * lisp/vc/vc.el (vc-diff): Delete redundant call to vc-maybe-buffer-sync. * lisp/files.el (find-buffer-visiting): Note in docstring that this function only ever returns base buffers. diff --git a/lisp/files.el b/lisp/files.el index 4fb1221ec0d..09968d693f9 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -2344,6 +2344,9 @@ If PREDICATE is non-nil, only buffers satisfying it are eligible, and others are ignored. PREDICATE is called with the buffer as the only argument, but not with the buffer as the current buffer. +Note that indirect buffers don't count as visiting files, +and that therefore this function only ever returns base buffers. + If there is no such live buffer, return nil." (or (let ((buf (get-file-buffer filename))) (when (and buf (or (not predicate) (funcall predicate buf))) buf)) diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index a8e99d280ef..4b7d2f7b53b 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -2298,7 +2298,6 @@ Optional argument FILESET, if non-nil, overrides the fileset." (interactive (list current-prefix-arg t)) (if historic (call-interactively 'vc-version-diff) - (vc-maybe-buffer-sync not-essential) (let ((fileset (or fileset (vc-deduce-fileset t)))) (vc-buffer-sync-fileset fileset not-essential) (vc-diff-internal t fileset nil nil commit 6b204c2d164a53ff85e132d4a77bd7afbb0fc42e Author: Sean Whitton Date: Sat Apr 26 12:55:56 2025 +0800 Rename vc-buffer-sync's argument to NOT-ESSENTIAL * lisp/vc/vc-dispatcher.el (vc-buffer-sync): * lisp/vc/vc.el (vc-maybe-buffer-sync, vc-diff) (vc-buffer-sync-fileset, vc-ediff, vc-root-diff): Rename argument from NOT-URGENT to NOT-ESSENTIAL. diff --git a/lisp/vc/vc-dispatcher.el b/lisp/vc/vc-dispatcher.el index f51eb728cf8..0a733336edd 100644 --- a/lisp/vc/vc-dispatcher.el +++ b/lisp/vc/vc-dispatcher.el @@ -697,9 +697,9 @@ editing!" (when vc-dir-buffers (vc-dir-resynch-file file))) -(defun vc-buffer-sync (&optional not-urgent) +(defun vc-buffer-sync (&optional not-essential) "Make sure the current buffer and its working file are in sync. -NOT-URGENT means it is ok to continue if the user says not to save." +NOT-ESSENTIAL means it is okay to continue if the user says not to save." (let (missing) (when (cond ((buffer-modified-p)) @@ -712,7 +712,7 @@ NOT-URGENT means it is ok to continue if the user says not to save." "is missing on disk" "modified")))) (save-buffer) - (unless not-urgent + (unless not-essential (error "Aborted")))))) ;; Command closures diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index 12f39be4bdb..a8e99d280ef 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -2281,34 +2281,34 @@ state of each file in the fileset." t (list backend (list rootdir)) rev1 rev2 (called-interactively-p 'interactive))))) -(defun vc-maybe-buffer-sync (not-urgent) +(defun vc-maybe-buffer-sync (not-essential) (with-current-buffer (or (buffer-base-buffer) (current-buffer)) - (when buffer-file-name (vc-buffer-sync not-urgent)))) + (when buffer-file-name (vc-buffer-sync not-essential)))) ;;;###autoload -(defun vc-diff (&optional historic not-urgent fileset) +(defun vc-diff (&optional historic not-essential fileset) "Display diffs between file revisions. Normally this compares the currently selected fileset with their working revisions. With a prefix argument HISTORIC, it reads two revision designators specifying which revisions to compare. -The optional argument NOT-URGENT non-nil means it is ok to say no to -saving the buffer. The optional argument FILESET can override the -deduced fileset." +Optional argument NOT-ESSENTIAL non-nil means it is okay to say no to +saving the buffer. +Optional argument FILESET, if non-nil, overrides the fileset." (interactive (list current-prefix-arg t)) (if historic (call-interactively 'vc-version-diff) - (vc-maybe-buffer-sync not-urgent) + (vc-maybe-buffer-sync not-essential) (let ((fileset (or fileset (vc-deduce-fileset t)))) - (vc-buffer-sync-fileset fileset not-urgent) + (vc-buffer-sync-fileset fileset not-essential) (vc-diff-internal t fileset nil nil (called-interactively-p 'interactive))))) -(defun vc-buffer-sync-fileset (fileset not-urgent) +(defun vc-buffer-sync-fileset (fileset not-essential) (dolist (filename (cadr fileset)) (when-let* ((buffer (find-buffer-visiting filename))) (with-current-buffer buffer - (vc-buffer-sync not-urgent))))) + (vc-buffer-sync not-essential))))) ;;;###autoload (defun vc-diff-mergebase (_files rev1 rev2) @@ -2374,35 +2374,35 @@ state of each file in FILES." (error "More than one file is not supported")))) ;;;###autoload -(defun vc-ediff (historic &optional not-urgent) +(defun vc-ediff (historic &optional not-essential) "Display diffs between file revisions using ediff. Normally this compares the currently selected fileset with their working revisions. With a prefix argument HISTORIC, it reads two revision designators specifying which revisions to compare. -The optional argument NOT-URGENT non-nil means it is ok to say no to +Optional argument NOT-ESSENTIAL non-nil means it is okay to say no to saving the buffer." (interactive (list current-prefix-arg t)) (if historic (call-interactively 'vc-version-ediff) - (vc-maybe-buffer-sync not-urgent) + (vc-maybe-buffer-sync not-essential) (vc-version-ediff (cadr (vc-deduce-fileset t)) nil nil))) ;;;###autoload -(defun vc-root-diff (historic &optional not-urgent) +(defun vc-root-diff (historic &optional not-essential) "Display diffs between VC-controlled whole tree revisions. Normally, this compares the tree corresponding to the current fileset with the working revision. With a prefix argument HISTORIC, prompt for two revision designators specifying which revisions to compare. -The optional argument NOT-URGENT non-nil means it is ok to say no to +Optional argument NOT-ESSENTIAL non-nil means it is okay to say no to saving the buffer." (interactive (list current-prefix-arg t)) (if historic ;; We want the diff for the VC root dir. (call-interactively 'vc-root-version-diff) - (vc-maybe-buffer-sync not-urgent) + (vc-maybe-buffer-sync not-essential) (let ((backend (vc-deduce-backend)) (default-directory default-directory) rootdir) commit be4819bd578b696a4692cf7cc1b3d52390a65129 Author: Sean Bright Date: Wed Apr 2 13:52:06 2025 -0400 Include additional version metadata during Windows install * admin/nt/dist-build/emacs.nsi: Add DisplayIcon, DisplayVersion, and Publisher values to the Uninstall registry key. Copyright-paperwork-exempt: yes diff --git a/admin/nt/dist-build/emacs.nsi b/admin/nt/dist-build/emacs.nsi index 4a5de4f85f9..9239eb07ec7 100644 --- a/admin/nt/dist-build/emacs.nsi +++ b/admin/nt/dist-build/emacs.nsi @@ -72,6 +72,9 @@ Section # add registry key to enable uninstall from control panel WriteRegStr HKLM "${UNINST_KEY}" "DisplayName" "GNU Emacs ${VERSION_BRANCH}" + WriteRegStr HKLM "${UNINST_KEY}" "DisplayIcon" "$\"$UninstallerPath$\"" + WriteRegStr HKLM "${UNINST_KEY}" "DisplayVersion" "${VERSION_BRANCH}" + WriteRegStr HKLM "${UNINST_KEY}" "Publisher" "Free Software Foundation, Inc." WriteRegStr HKLM "${UNINST_KEY}" "UninstallString" "$\"$UninstallerPath$\"" ;Create shortcuts commit 191b4cd9a76aa31ff9711370842394f37955c06a Author: Eli Zaretskii Date: Sat Apr 26 18:01:42 2025 +0300 ; Fix compilation warning in string-edit.el * lisp/textmodes/string-edit.el (string-edit): Avoid shadowing the global 'major-mode'. diff --git a/lisp/textmodes/string-edit.el b/lisp/textmodes/string-edit.el index c8fdffe5f4c..dda70437f78 100644 --- a/lisp/textmodes/string-edit.el +++ b/lisp/textmodes/string-edit.el @@ -37,10 +37,10 @@ ;;;###autoload (cl-defun string-edit (prompt string success-callback - &key abort-callback major-mode read) + &key abort-callback major-mode-sym read) "Switch to a new buffer to edit STRING. -Call MAJOR-MODE (defaulting to `string-edit-mode') to set up the new +Call MAJOR-MODE-SYM (defaulting to `string-edit-mode') to set up the new buffer, and insert PROMPT (defaulting to nothing) at the start of the buffer. @@ -79,7 +79,7 @@ Also see `read-string-from-buffer'." (set-buffer-modified-p nil) (setq buffer-undo-list nil) - (funcall (or major-mode #'string-edit-mode)) + (funcall (or major-mode-sym #'string-edit-mode)) (string-edit-minor-mode) (setq-local string-edit--success-callback success-callback) (setq-local string-edit--abort-callback abort-callback) commit 86211172e31f50b04ddfd74fc640cff9adc79025 Merge: 09f4818eba3 1f520db97bd Author: Eli Zaretskii Date: Sat Apr 26 10:57:33 2025 -0400 Merge from origin/emacs-30 1f520db97bd * doc/emacs/files.texi (Time Stamp Customization): Typo. d824b66c242 ; * doc/emacs/search.texi (Isearch Yank): Improve flow. 62b284f9153 ; * etc/DEBUG: Say that debugging code compiled w/ -Og ca... 49ea1f64c77 ; Improve documentation of 'modifier-bar-mode' a975232c0fd ; * doc/emacs/programs.texi (Matching): Fix wording (bug#... 29142dab316 ; * doc/misc/efaq-w32.texi (MinGW-w64): Fix punctuation (... 4cd4a801d86 ; * java/res/README: Note origin of emacs_wrench.png. commit 09f4818eba3747ce30d4d94f913140c92c8230d6 Merge: 1c7fe501fed cc52c1e1d0b Author: Eli Zaretskii Date: Sat Apr 26 10:53:24 2025 -0400 ; Merge from origin/emacs-30 The following commit was skipped: cc52c1e1d0b Backport: fix flymake margin indicator fallback logic commit 1c7fe501fedb41aaf5b22d82dab5a365f86e4c85 Author: Eli Zaretskii Date: Sat Apr 26 17:30:20 2025 +0300 Fix 'kill-ring-deindent-mode' * lisp/indent-aux.el (kill-ring-deindent-buffer-substring-function): Fix deindenting for modes which set 'indent-tab-mode' to nil. (Bug#77981) diff --git a/lisp/indent-aux.el b/lisp/indent-aux.el index 27d5875bc22..eeb8f1ee6bb 100644 --- a/lisp/indent-aux.el +++ b/lisp/indent-aux.el @@ -45,10 +45,14 @@ is yanked." end (max a b))) (let ((indentation (save-excursion (goto-char beg) (current-column))) + (i-t-m indent-tabs-mode) (text (if delete (delete-and-extract-region beg end) (buffer-substring beg end)))) (with-temp-buffer + ;; Indent/deindent the same as the major mode in the original + ;; buffer. + (setq indent-tabs-mode i-t-m) (insert text) (indent-rigidly (point-min) (point-max) (- indentation)) commit f7aad714d2854e3f05d87298776628df1d5bfbb2 Author: Eli Zaretskii Date: Sat Apr 26 17:20:01 2025 +0300 Avoid signaling errors in 'cursor-face-highlight-mode' * lisp/simple.el (redisplay--update-cursor-face-highlight): Don't go beyond the accessible portion of the buffer. (Bug#77747) diff --git a/lisp/simple.el b/lisp/simple.el index ee09a6f1b19..486092de2c8 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -7265,7 +7265,7 @@ This variable is similar to `highlight-nonselected-windows'." (pt (window-point window)) (cursor-face (get-text-property pt 'cursor-face))) (let* ((start (previous-single-property-change - (1+ pt) 'cursor-face nil (point-min))) + (min (1+ pt) (point-max)) 'cursor-face nil (point-min))) (end (next-single-property-change pt 'cursor-face nil (point-max))) (new (redisplay--highlight-overlay-function commit ec8075219da2e3cb676d89db58164f54b079b85d Author: Jens Schmidt Date: Thu Apr 24 23:32:45 2025 +0200 ; Fix previous arc-mode-test commit * test/lisp/arc-mode-tests.el (define-arc-mode-test-on-type): Doc fix. ("7z"): Use archiver executable "7z" on all ports. diff --git a/test/lisp/arc-mode-tests.el b/test/lisp/arc-mode-tests.el index 51e8a5eba3f..dd8fdf9e0bc 100644 --- a/test/lisp/arc-mode-tests.el +++ b/test/lisp/arc-mode-tests.el @@ -79,7 +79,7 @@ Return a cons (ARC . EXIT-STATUS)." (cons arc (funcall (archive--act-files command files) arc))) (defmacro define-arc-mode-test-on-type (name command extension type) - "Define and execute a test that tests function `archive-find-type'. + "Define a test that tests function `archive-find-type'. Name the test based on NAME. The generated test first calls (call-process (car COMMAND) nil nil nil @@ -133,10 +133,9 @@ member MEMBER. Then the test finds ARCHIVE and ensures that function (define-arc-mode-test-on-type "ar" '("ar" "q") "a" 'ar) -(define-arc-mode-test-on-type "7z" (list (if (eq system-type 'windows-nt) - "7z" "7za") - "a") - "7z" '7z) +;; prefer executable "7z" to "7za", since the former seems be supported +;; on a broader range of ports +(define-arc-mode-test-on-type "7z" '("7z" "a") "7z" '7z) (ert-deftest arc-mode-test-zip-ensure-ext () "Regression test for bug#61326." commit af22c9292df85df9421ef11cadccb656a4bf3d7f Author: Manuel Giraud Date: Thu Apr 24 16:27:33 2025 +0200 Reuse calendar temporary faces * lisp/calendar/calendar.el (calendar-make-temp-face): Reuse temporary face produced by calendar. (Bug#78036) diff --git a/lisp/calendar/calendar.el b/lisp/calendar/calendar.el index 08ecd586ec1..058982647fe 100644 --- a/lisp/calendar/calendar.el +++ b/lisp/calendar/calendar.el @@ -2515,9 +2515,9 @@ ATTRLIST is a list with elements of the form :face face :foreground color." (if (not faceinfo) ;; No attributes to apply, so just use an existing-face. face - ;; FIXME should we be using numbered temp-faces, reusing where poss? + ;; Compute temp face name. (setq temp-face - (make-symbol + (intern (concat ":caltemp" (mapconcat (lambda (sym) (cond @@ -2525,10 +2525,12 @@ ATTRLIST is a list with elements of the form :face face :foreground color." ((numberp sym) (number-to-string sym)) (t sym))) attrlist "")))) - (make-face temp-face) - (copy-face face temp-face) - ;; Apply the font aspects. - (apply #'set-face-attribute temp-face nil (nreverse faceinfo)) + ;; Create this new face if it does not already exist. + (unless (member temp-face (face-list)) + (make-face temp-face) + (copy-face face temp-face) + ;; Apply the font aspects. + (apply #'set-face-attribute temp-face nil (nreverse faceinfo))) temp-face))) (defun calendar-mark-visible-date (date &optional mark) commit 98776ebd391e8cd617b78bfd849222ad07c9642a Author: Eli Zaretskii Date: Sat Apr 26 16:46:34 2025 +0300 Fix thai-pattachote input method * lisp/leim/quail/thai.el (thai-pattachote): Add missing characters instead of duplicate ones. Suggested by Robert Nikander . (Bug#77998) diff --git a/lisp/leim/quail/thai.el b/lisp/leim/quail/thai.el index 07ba657f9b8..8ae861e9b66 100644 --- a/lisp/leim/quail/thai.el +++ b/lisp/leim/quail/thai.el @@ -98,11 +98,11 @@ The difference from the ordinal Thai keyboard: 0 "+" "ฑ" "/" "," "?" "_" "ข" ; SPC .. ' "(" ")" "." "%" "ะ" "๑" "จ" "พ" ; ( .. / "๐" "=" "๒" "๓" "๔" "๕" "ู" "๗" ; 0 .. 7 - "๘" "๙" "ฆ" "ไ" "ฟ" "๖" "ฒ" "ฬ" ; 8 .. ? + "๘" "๙" "ฆ" "ไ" "ฟ" "๖" "ฉ" "ฬ" ; 8 .. ? "\"" "๋" "ั" "ฐ" "ำ" "ๆ" "ณ" "์" ; @ .. G "ื" "ซ" "ผ" "ช" "โ" "ฮ" "ศ" "ถ" ; H .. O "ฒ" "๊" "ญ" "ธ" "ษ" "ฝ" "ภ" "ฤ" ; P .. W - "ฎ" "ึ" "ฎ" "ใ" "ฺ" "ฒ" "ุ" "-" ; X .. _ + "ฏ" "ึ" "ฎ" "ใ" "ฺ" "ฌ" "ุ" "-" ; X .. _ "ฃ" "้" "ิ" "ล" "ง" "ย" "ก" "ั" ; ` .. g "ี" "ม" "า" "น" "เ" "ส" "ค" "ว" ; h .. o "แ" "็" "อ" "ท" "ร" "ด" "ห" "ต" ; p .. w commit 67e8351bdb78eadaf07a5b308806ec3c00c9e979 Author: Jostein Kjønigsen Date: Wed Apr 23 10:32:30 2025 +0200 csharp-mode.el: Improve fontification of string-interpolation exprs * lisp/progmodes/csharp-mode.el (csharp-ts-mode--font-lock-settings): Remove too wide selector, causing non-string content to be fonitified as strings. Add additional eselectors to highlight variables inside interpolation-expressions too. (Bug#78008) diff --git a/lisp/progmodes/csharp-mode.el b/lisp/progmodes/csharp-mode.el index a421d616d9b..e002391d305 100644 --- a/lisp/progmodes/csharp-mode.el +++ b/lisp/progmodes/csharp-mode.el @@ -777,11 +777,19 @@ compilation and evaluation time conflicts." :feature 'expression '((conditional_expression (identifier) @font-lock-variable-use-face) (postfix_unary_expression (identifier)* @font-lock-variable-use-face) - (initializer_expression (assignment_expression left: (identifier) @font-lock-variable-use-face))) + (initializer_expression (assignment_expression left: (identifier) @font-lock-variable-use-face)) + (interpolated_string_expression + (interpolation + (identifier) @font-lock-variable-use-face)) + (interpolated_string_expression + (interpolation + (member_access_expression + expression: (identifier) @font-lock-variable-use-face + name: (identifier) @font-lock-property-use-face)))) :language 'c-sharp :feature 'bracket - '((["(" ")" "[" "]" "{" "}"]) @font-lock-bracket-face) + '((["(" ")" "[" "]" "{" "}" (interpolation_brace)]) @font-lock-bracket-face) :language 'c-sharp :feature 'delimiter @@ -839,8 +847,7 @@ compilation and evaluation time conflicts." "$\"" "@$\"" "$@\"") - '((interpolated_string_expression) - (interpolation_start) + '((interpolation_start) (interpolation_quote)))] @font-lock-string-face) commit f808f637f57eb0fe87fdc2ea7c2a1fd9e2f9d912 Author: Paul Nelson Date: Mon Apr 21 22:14:53 2025 +0200 Add "forward history" support for some debuggers * lisp/progmodes/gud.el (gud-query-cmdline): Add an optional default-list parameter to allow passing a list of "forward history" suggestions to the minibuffer. (perldb, pdb, guiler): Use buffer file name to suggest a default debugging command via "forward history". * doc/emacs/building.texi (Starting GUD): Document the new feature. (Bug#77989) diff --git a/doc/emacs/building.texi b/doc/emacs/building.texi index 02ca71f069b..39c5e79a870 100644 --- a/doc/emacs/building.texi +++ b/doc/emacs/building.texi @@ -674,6 +674,9 @@ Run the SDB debugger. using the minibuffer. The minibuffer's initial contents contain the standard executable name and options for the debugger, and sometimes also a guess for the name of the executable file you want to debug. +For @code{pdb}, @code{perldb}, and @code{guiler}, if the current buffer +visits a file, pressing @kbd{M-n} (@code{next-history-element}) +in the prompt suggests a full command line including that file name. Shell wildcards and variables are not allowed in this command line. Emacs assumes that the first command argument which does not start with a @samp{-} is the executable file name. diff --git a/etc/NEWS b/etc/NEWS index 695166a7dc3..f73bb24b855 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1975,6 +1975,14 @@ normal file name starts with "file:", you can disable the URI recognition by invoking 'sqlite-open' with the new optional argument DISABLE-URI non-nil. +** GUD + +--- +*** pdb, perldb, and guiler suggest debugging the current file via 'M-n'. +When starting these debuggers (e.g., 'M-x pdb') while visiting a file, +pressing 'M-n' in the command prompt suggests a command line including +the file name, using the minibuffer's "future history". + * New Modes and Packages in Emacs 31.1 diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el index 3cca55be3a7..7108673dddc 100644 --- a/lisp/progmodes/gud.el +++ b/lisp/progmodes/gud.el @@ -757,7 +757,11 @@ The option \"--fullname\" must be included in this value." :parent minibuffer-local-map "C-i" #'comint-dynamic-complete-filename) -(defun gud-query-cmdline (minor-mode &optional init) +(defun gud-query-cmdline (minor-mode &optional init default-list) + "Prompt for a command to run the debugger. +MINOR-MODE is the name of the debugger to run. INIT is the initial +command, before any history is available. DEFAULT-LIST is a list of +default commands, accessible via \\[next-history-element]." (let* ((hist-sym (gud-symbol 'history nil minor-mode)) (cmd-name (gud-val 'command-name minor-mode))) (unless (boundp hist-sym) (set hist-sym nil)) @@ -780,7 +784,8 @@ The option \"--fullname\" must be included in this value." (setq file f))) file))))) gud-minibuffer-local-map nil - hist-sym))) + hist-sym + default-list))) (defvar gdb-first-prompt t) @@ -1671,8 +1676,13 @@ Noninteractively, COMMAND-LINE should be on the form The directory containing the perl program becomes the initial working directory and source-file directory for your debugger." (interactive - (list (gud-query-cmdline 'perldb - (concat (or (buffer-file-name) "-E 0") " ")))) + (list + (gud-query-cmdline + 'perldb + (concat (or (buffer-file-name) "-E 0") " ") + (when-let* ((file (buffer-file-name))) + (list (concat gud-perldb-command-name " " + (shell-quote-argument file) " ")))))) (gud-common-init command-line 'gud-perldb-massage-args 'gud-perldb-marker-filter) @@ -1802,7 +1812,11 @@ If called interactively, the command line will be prompted for. The directory containing this file becomes the initial working directory and source-file directory for your debugger." (interactive - (list (gud-query-cmdline 'pdb))) + (list (gud-query-cmdline + 'pdb nil + (when-let* ((file (buffer-file-name))) + (list (concat gud-pdb-command-name " " + (shell-quote-argument file))))))) (gud-common-init command-line nil 'gud-pdb-marker-filter) (setq-local gud-minor-mode 'pdb) @@ -1889,7 +1903,12 @@ This should be an executable on your path, or an absolute file name." The directory containing FILE becomes the initial working directory and source-file directory for your debugger." (interactive - (list (gud-query-cmdline 'guiler))) + (list + (gud-query-cmdline + 'guiler nil + (when-let* ((file (buffer-file-name))) + (list (concat gud-guiler-command-name " " + (shell-quote-argument file))))))) (gud-common-init command-line nil 'gud-guiler-marker-filter) (setq-local gud-minor-mode 'guiler) commit dd3429526aacef0aa98171a598a535a72b9cde39 Author: Paul Nelson Date: Mon Apr 21 16:25:06 2025 +0200 Don't consider "Grep finished" lines as matches for file names * lisp/progmodes/grep.el (grep-compilation-transform-finished-rules): New variable containing rules to prevent "Grep finished" lines from being misinterpreted as matches for file names. (grep-mode): Add these rules to 'compilation-transform-file-match-alist' (bug#77732). diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el index b0105f08ea2..ed64d8a5bc8 100644 --- a/lisp/progmodes/grep.el +++ b/lisp/progmodes/grep.el @@ -542,6 +542,13 @@ redundant).") "Additional things to highlight in grep output. This gets tacked on the end of the generated expressions.") +(defvar grep-compilation-transform-finished-rules + '(("^Grep[/a-zA-Z]* finished with \\(?:\\(\\(?:[0-9]+ \\)?match\\(?:es\\)? found\\)\\|\\(no matches found\\)\\).*" . nil) + ("^Grep[/a-zA-Z]* \\(exited abnormally\\|interrupt\\|killed\\|terminated\\)\\(?:.*with code \\([0-9]+\\)\\)?.*" . nil)) + "Rules added to `compilation-transform-file-match-alist' in `grep-mode' +These prevent the \"Grep finished\" lines from being misinterpreted as +matches (bug#77732).") + ;;;###autoload (defvar grep-program "grep" "The default grep program for `grep-command' and `grep-find-command'. @@ -971,6 +978,9 @@ The value depends on `grep-command', `grep-template', grep-hit-face) (setq-local compilation-error-regexp-alist grep-regexp-alist) + (setq-local compilation-transform-file-match-alist + (append grep-compilation-transform-finished-rules + compilation-transform-file-match-alist)) (setq-local compilation-mode-line-errors grep-mode-line-matches) ;; compilation-directory-matcher can't be nil, so we set it to a regexp that commit 406f30c985943152488f704000eb4a1c4cc745ec Merge: 46776cae052 19b6c94566c Author: Eli Zaretskii Date: Sat Apr 26 15:32:16 2025 +0300 Merge branch 'master' of git.savannah.gnu.org:/srv/git/emacs commit 19b6c94566c6003cb7a056fce565ced2896acd4b Author: Sean Whitton Date: Sat Apr 26 20:28:23 2025 +0800 log-edit-insert-message-template: Reorder headers * lisp/vc/log-edit.el (log-edit-insert-message-template): Put Author before Summary when both are to be inserted. diff --git a/lisp/vc/log-edit.el b/lisp/vc/log-edit.el index 3c3288777c8..19cf1a5ae3d 100644 --- a/lisp/vc/log-edit.el +++ b/lisp/vc/log-edit.el @@ -914,12 +914,16 @@ different header separator appropriate for `log-edit-mode'." (interactive) (when (or (called-interactively-p 'interactive) (log-edit-empty-buffer-p)) - (dolist (header (append '("Summary") (and log-edit-setup-add-author - '("Author")))) - - (insert (log-edit--make-header-line header))) - (insert "\n") - (message-position-point))) + ;; Put Author first because then the user can immediately yank in a + ;; multiline log message, or use \\`C-c C-w' (probably because they + ;; know it will generate exactly one line), without thereby pushing + ;; Author out of the header and into the log message body. + ;; (Also note that `log-edit-set-header' inserts all other headers + ;; before Summary.) + (when log-edit-setup-add-author + (insert (log-edit--make-header-line "Author"))) + (insert (log-edit--make-header-line "Summary") "\n") + (end-of-line -1))) (defun log-edit-insert-cvs-template () "Insert the commit log template specified by the CVS administrator, if any. commit 30b7318a8f6c593fc6553a45445e84e4e50cd119 Author: Sean Whitton Date: Sat Apr 26 20:04:43 2025 +0800 ; comment-indent: Leave point where we used to. diff --git a/lisp/newcomment.el b/lisp/newcomment.el index 28ee4467589..4da3b55d2f0 100644 --- a/lisp/newcomment.el +++ b/lisp/newcomment.el @@ -726,7 +726,7 @@ If CONTINUE is non-nil, use the `comment-continue' markers if any." ;; are already within a multiline comment at BOL (bug#78003). ((and (not begpos) (not continue) comment-use-syntax comment-use-global-state - (nth 4 (syntax-ppss (line-beginning-position)))) + (save-excursion (nth 4 (syntax-ppss (line-beginning-position))))) ;; We don't know anything about the nature of the multiline ;; construct, so immediately delegate to the mode. (indent-according-to-mode)) commit 46776cae052b9bb106ce322d700abbc7cccc4c77 Author: Liu Hui Date: Mon Apr 21 12:46:55 2025 +0800 Fix filename completion in Python shell (bug#77853) 'comint-filename-completion' may complete the filename at wrong locations. Users who want proper filename completion should use specialized completion backends (e.g. Jedi). * lisp/progmodes/python.el (inferior-python-mode): Remove 'comint-filename-completion' in 'comint-dynamic-complete-functions'. diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 594681594b0..8848a98fe5f 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -3755,6 +3755,8 @@ variable. (setq-local compilation-error-regexp-alist python-shell-compilation-regexp-alist) (setq-local scroll-conservatively 1) + (setq-local comint-dynamic-complete-functions + '(comint-c-a-p-replace-by-expanded-history)) (add-hook 'completion-at-point-functions #'python-shell-completion-at-point nil 'local) (define-key inferior-python-mode-map "\t" commit 8f58f55551341001119034f2e9f5fdc87d3abd54 Author: Spencer Baugh Date: Tue Apr 15 17:17:27 2025 -0400 Improve help-fns-edit-variable for Lisp editing Before d50c82f3e98e ("Simplify 'help-enable-variable-value-editing' using 'string-edit'"), 'help-fns-edit-variable' would open a buffer in 'emacs-lisp-mode' and would not allow exiting that buffer with an invalid Lisp expression. Restore that functionality by enhancing 'string-edit' to allow choosing a major mode and allow passing a function to validate the buffer contents before returning. * lisp/help-fns.el (help-fns-edit-variable): Call 'string-edit', passing 'emacs-lisp-mode' and 'read'. * lisp/textmodes/string-edit.el (string-edit--read): Add. (string-edit): Add :major-mode and :read arguments and avoid passive voice. (read-string-from-buffer): Avoid passive voice in docs. (string-edit-mode-map, string-edit-minor-mode-map) (string-edit-mode, string-edit-minor-mode): Move 'string-edit' keybindings to a minor mode. (string-edit-done): Call 'string-edit--read' before exiting. (Bug#77834) diff --git a/lisp/help-fns.el b/lisp/help-fns.el index dbd307e3d25..e7bbd25b413 100644 --- a/lisp/help-fns.el +++ b/lisp/help-fns.el @@ -1570,11 +1570,20 @@ by this command." (let ((var (get-text-property (point) 'help-fns--edit-variable))) (unless var (error "No variable under point")) - (let ((str (read-string-from-buffer - (format ";; Edit the `%s' variable." (nth 0 var)) - (prin1-to-string (nth 1 var))))) - (set (nth 0 var) (read str)) - (revert-buffer)))) + (string-edit + (format ";; Edit the `%s' variable." (nth 0 var)) + (prin1-to-string (nth 1 var)) + (lambda (edited) + (set (nth 0 var) edited) + (exit-recursive-edit)) + :abort-callback + (lambda () + (exit-recursive-edit) + (error "Aborted edit, variable unchanged")) + :major-mode #'emacs-lisp-mode + :read #'read) + (recursive-edit) + (revert-buffer))) (autoload 'shortdoc-help-fns-examples-function "shortdoc") diff --git a/lisp/textmodes/string-edit.el b/lisp/textmodes/string-edit.el index 3c76db202c7..c8fdffe5f4c 100644 --- a/lisp/textmodes/string-edit.el +++ b/lisp/textmodes/string-edit.el @@ -33,20 +33,25 @@ (defvar string-edit--success-callback) (defvar string-edit--abort-callback) +(defvar string-edit--read) ;;;###autoload (cl-defun string-edit (prompt string success-callback - &key abort-callback) + &key abort-callback major-mode read) "Switch to a new buffer to edit STRING. -When the user finishes editing (with \\\\[string-edit-done]), SUCCESS-CALLBACK -is called with the resulting string. -If the user aborts (with \\\\[string-edit-abort]), ABORT-CALLBACK (if any) is -called with no parameters. +Call MAJOR-MODE (defaulting to `string-edit-mode') to set up the new +buffer, and insert PROMPT (defaulting to nothing) at the start of the +buffer. -PROMPT will be inserted at the start of the buffer, but won't be -included in the resulting string. If PROMPT is nil, no help text -will be inserted. +When the user finishes editing (with \\\\[string-edit-done]), call +READ (defaulting to `identity') on the resulting string, omitting PROMPT if any. + +If READ returns without an error, quit the buffer and call +SUCCESS-CALLBACK on the result. + +If the user aborts (with \\\\[string-edit-abort]), +call ABORT-CALLBACK (if any) with no parameters. Also see `read-string-from-buffer'." (with-current-buffer (generate-new-buffer "*edit string*") @@ -74,26 +79,27 @@ Also see `read-string-from-buffer'." (set-buffer-modified-p nil) (setq buffer-undo-list nil) - (string-edit-mode) + (funcall (or major-mode #'string-edit-mode)) + (string-edit-minor-mode) (setq-local string-edit--success-callback success-callback) (setq-local string-edit--abort-callback abort-callback) + (setq-local string-edit--read read) (setq-local header-line-format (substitute-command-keys - "Type \\\\[string-edit-done] when you've finished editing or \\[string-edit-abort] to abort")) + "Type \\\\[string-edit-done] when you've finished editing or \\[string-edit-abort] to abort")) (message "%s" (substitute-command-keys - "Type \\\\[string-edit-done] when you've finished editing")))) + "Type \\\\[string-edit-done] when you've finished editing")))) ;;;###autoload (defun read-string-from-buffer (prompt string) "Switch to a new buffer to edit STRING in a recursive edit. The user finishes editing with \\\\[string-edit-done], or aborts with \\\\[string-edit-abort]). -PROMPT will be inserted at the start of the buffer, but won't be -included in the resulting string. If nil, no prompt will be -inserted in the buffer. +Insert PROMPT at the start of the buffer. If nil, no prompt is +inserted. -When the user exits recursive edit, this function returns the -edited STRING. +When the user exits recursive edit, return the contents of the +buffer (without including PROMPT). Also see `string-edit'." (string-edit @@ -108,11 +114,16 @@ Also see `string-edit'." (recursive-edit) string) -(defvar-keymap string-edit-mode-map +(defvar-keymap string-edit-minor-mode-map "C-c C-c" #'string-edit-done "C-c C-k" #'string-edit-abort) -(define-derived-mode string-edit-mode text-mode "String" +(define-minor-mode string-edit-minor-mode + "Minor mode for editing strings" + :lighter "String" + :interactive nil) + +(define-derived-mode string-edit-mode text-mode "Text" "Mode for editing strings." :interactive nil) @@ -120,13 +131,16 @@ Also see `string-edit'." "Finish editing the string and call the callback function. This will kill the current buffer." (interactive) - (goto-char (point-min)) - ;; Skip past the help text. - (text-property-search-forward 'string-edit--prompt) - (let ((string (buffer-substring (point) (point-max))) - (callback string-edit--success-callback)) + (let* ((string + (save-excursion + (goto-char (point-min)) + ;; Skip past the help text. + (text-property-search-forward 'string-edit--prompt) + (buffer-substring (point) (point-max)))) + (valid (funcall (or string-edit--read #'identity) string)) + (callback string-edit--success-callback)) (quit-window 'kill) - (funcall callback string))) + (funcall callback valid))) (defun string-edit-abort () "Abort editing the current string." commit 5b635d8bd6b7b3353e103b2a20c502d700597082 Author: Sean Whitton Date: Sat Apr 26 19:48:49 2025 +0800 ; mode-line-collapse-minor-modes: Tweak wording. diff --git a/lisp/bindings.el b/lisp/bindings.el index c4dae911db5..8b021a05ce2 100644 --- a/lisp/bindings.el +++ b/lisp/bindings.el @@ -431,8 +431,8 @@ a menu, so this function is not useful for non-menu keymaps." (defcustom mode-line-collapse-minor-modes nil "Minor modes for which mode line lighters are hidden. -Hidden lighters are collapsed into one, which is customizable via option -`mode-line-collapse-minor-modes-to'. +Hidden lighters are collapsed into one, which latter is customizable +using the option `mode-line-collapse-minor-modes-to'. The value could be a list (MODES ...) which means to collapse lighters only for MODES, or a list (not MODES ...) which means to collapse all commit 643ebbcac929ee8b2a30843250cddf112cab471f Author: Pengji Zhang Date: Sat Apr 19 12:04:36 2025 +0800 Make lighter for collapsed minor modes customizable (bug#77361) * lisp/bindings.el (mode-line-collapse-minor-modes-to): New option for the collapsed lighter of minor modes. (mode-line-collapse-minor-modes): Mention that the collapsed lighter can be customized. (mode-line--minor-modes): Use the new option. diff --git a/lisp/bindings.el b/lisp/bindings.el index 8fde7ad6d4b..c4dae911db5 100644 --- a/lisp/bindings.el +++ b/lisp/bindings.el @@ -431,7 +431,8 @@ a menu, so this function is not useful for non-menu keymaps." (defcustom mode-line-collapse-minor-modes nil "Minor modes for which mode line lighters are hidden. -Hidden lighters are collapsed into one. +Hidden lighters are collapsed into one, which is customizable via option +`mode-line-collapse-minor-modes-to'. The value could be a list (MODES ...) which means to collapse lighters only for MODES, or a list (not MODES ...) which means to collapse all @@ -445,6 +446,15 @@ lighters hidden." :group 'mode-line :version "31.1") +(defcustom mode-line-collapse-minor-modes-to + (if (char-displayable-p ?…) " …" " ...") + "Lighter for collapsed minor modes. +This is effective only when `mode-line-collapse-minor-modes' is non-nil." + :type 'string + :initialize #'custom-initialize-delay + :group 'mode-line + :version "31.1") + (defcustom mode-line-modes-delimiters '("(" . ")") "Strings placed around the modes displayed in the mode line. These elements are placed around `mode-name' and `mode-line-modes'." @@ -550,7 +560,7 @@ mouse-3: Toggle minor modes" :parent mode-line-minor-mode-keymap " " menu " " #'describe-mode))) - `(:propertize ,(if (char-displayable-p ?…) " …" " ...") + `(:propertize mode-line-collapse-minor-modes-to mouse-face mode-line-highlight help-echo "Hidden minor modes\n\ mouse-1: Display hidden minor modes\n\ commit 0e2fd0e441b2cc7686450d8784707ebc6fbe4917 Author: Daniel Semyonov Date: Sun Apr 13 16:06:39 2025 +0300 nnfeed: Pass through list request failure reports * lisp/gnus/nnfeed.el (nnfeed-request-list): Report the same message reported by the inheriting backend on failure. (Bug#74857) diff --git a/lisp/gnus/nnfeed.el b/lisp/gnus/nnfeed.el index d07a5c0539d..6a65633b7e0 100644 --- a/lisp/gnus/nnfeed.el +++ b/lisp/gnus/nnfeed.el @@ -609,15 +609,17 @@ Only HEADERS of a type included in MIME are considered." (deffoo nnfeed-request-list (&optional server) (with-current-buffer nntp-server-buffer (erase-buffer) - (when-let* ((p (point)) - (s (nnfeed--parse-feed - (or server (nnfeed--current-server-no-prefix)))) - ((hash-table-p s))) - (maphash (lambda (group g) - (insert (format "\"%s\" %s %s y\n" - group (aref g 3) (aref g 4)))) - s) - (not (= (point) p))))) + (if-let* ((p (point)) + (s (nnfeed--parse-feed + (or server (nnfeed--current-server-no-prefix)))) + ((hash-table-p s))) + (progn + (maphash (lambda (group g) + (insert (format "\"%s\" %s %s y\n" + group (aref g 3) (aref g 4)))) + s) + (not (= (point) p))) + (nnheader-report 'nnfeed (nnheader-get-report nnfeed-backend))))) (deffoo nnfeed-request-post (&optional _server) (nnheader-report nnfeed-backend "%s is a read only backend" nnfeed-backend)) commit 417ee3a7f7c66f6c23c9bab7228bfb64014573dd Author: Randy Taylor Date: Sat Apr 5 15:52:45 2025 -0400 Fix 'yaml-ts-mode' filling of comments (Bug#77095) * lisp/textmodes/yaml-ts-mode.el (yaml-ts-mode--fill-paragraph): Handle comment filling differently than block_scalars. (yaml-ts-mode): Set 'comment-start-skip'. diff --git a/lisp/textmodes/yaml-ts-mode.el b/lisp/textmodes/yaml-ts-mode.el index 26b7655acba..3338044652b 100644 --- a/lisp/textmodes/yaml-ts-mode.el +++ b/lisp/textmodes/yaml-ts-mode.el @@ -134,18 +134,21 @@ boundaries. JUSTIFY is passed to `fill-paragraph'." (save-restriction (widen) (let ((node (treesit-node-at (point)))) - (if (member (treesit-node-type node) '("block_scalar" "comment")) - (let* ((start (treesit-node-start node)) - (end (treesit-node-end node)) - (start-marker (point-marker)) - (fill-paragraph-function nil)) - (save-excursion - (goto-char start) - (forward-line) - (move-marker start-marker (point)) - (narrow-to-region (point) end)) - (fill-region start-marker end justify)) - t)))) + (pcase (treesit-node-type node) + ("block_scalar" + (let* ((start (treesit-node-start node)) + (end (treesit-node-end node)) + (start-marker (point-marker)) + (fill-paragraph-function nil)) + (save-excursion + (goto-char start) + (forward-line) + (move-marker start-marker (point)) + (narrow-to-region (point) end)) + (fill-region start-marker end justify))) + ("comment" + (fill-comment-paragraph justify)))) + t)) (defun yaml-ts-mode--defun-name (node) "Return the defun name of NODE. @@ -173,6 +176,7 @@ Return nil if there is no name or if NODE is not a defun node." ;; Comments. (setq-local comment-start "# ") (setq-local comment-end "") + (setq-local comment-start-skip "#+\\s-*") ;; Indentation. (setq-local indent-tabs-mode nil) commit 9ae82726d8ea4530f26f2baa16b705ba3cd71834 Author: kobarity Date: Mon Apr 21 23:17:37 2025 +0900 Add cache to Python block navigation functions * lisp/progmodes/python.el (python-nav-cache) (python-nav-cache-tick): New variables. (python-nav-cache-get, python-nav-cache-set) (python-nav-with-cache): New functions. (python-nav-beginning-of-block, python-nav-end-of-block): New wrapper functions. (python-nav--beginning-of-block): Renamed from 'python-nav-beginning-of-block'. (python-nav--end-of-block): Renamed from 'python-nav-end-of-block'. (Bug#77620) diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 81440cfcfc9..594681594b0 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -2386,9 +2386,54 @@ backward to previous statement." (python-nav-beginning-of-statement) (setq arg (1+ arg)))) +(defvar python-nav-cache nil + "Cache to hold the results of navigation functions.") + +(defvar python-nav-cache-tick 0 + "`buffer-chars-modified-tick' when registering the navigation cache.") + +(defun python-nav-cache-get (kind) + "Get value from the navigation cache. +If the current buffer is not modified, the navigation cache is searched +using KIND and the current line number as a key." + (and (= (buffer-chars-modified-tick) python-nav-cache-tick) + (cdr (assoc (cons kind (line-number-at-pos nil t)) python-nav-cache)))) + +(defun python-nav-cache-set (kind current target) + "Add a key-value pair to the navigation cache. +Invalidate the navigation cache if the current buffer has been modified. +Then add a key-value pair to the navigation cache. The key consists of +KIND and CURRENT line number, and the value is TARGET position." + (let ((tick (buffer-chars-modified-tick))) + (when (/= tick python-nav-cache-tick) + (setq-local python-nav-cache nil + python-nav-cache-tick tick)) + (push (cons (cons kind current) target) python-nav-cache) + target)) + +(defun python-nav-with-cache (kind func) + "Cached version of the navigation FUNC. +If a value is obtained from the navigation cache using KIND, it will +navigate there and return the position. Otherwise, use FUNC to navigate +and cache the result." + (let ((target (python-nav-cache-get kind))) + (if target + (progn + (goto-char target) + (point-marker)) + (let ((current (line-number-at-pos nil t))) + (python-nav-cache-set kind current (funcall func)))))) + (defun python-nav-beginning-of-block () "Move to start of current block." (interactive "^") + (python-nav-with-cache + 'beginning-of-block #'python-nav--beginning-of-block)) + +(defun python-nav--beginning-of-block () + "Move to start of current block. +This is an internal implementation of `python-nav-beginning-of-block' +without the navigation cache." (let ((starting-pos (point))) ;; Go to first line beginning a statement (while (and (not (bobp)) @@ -2413,6 +2458,13 @@ backward to previous statement." (defun python-nav-end-of-block () "Move to end of current block." (interactive "^") + (python-nav-with-cache + 'end-of-block #'python-nav--end-of-block)) + +(defun python-nav--end-of-block () + "Move to end of current block. +This is an internal implementation of `python-nav-end-of-block' without +the navigation cache." (when (python-nav-beginning-of-block) (let ((block-indentation (current-indentation))) (python-nav-end-of-statement) commit d753c884948499c0c557d01fefe5914f7d57573c Author: kobarity Date: Sun Apr 20 21:14:46 2025 +0900 Performance optimization of 'python-info-statement-ends-block-p' * lisp/progmodes/python.el (python-info-statement-ends-block-p): Add a comparison of the indentation of the next statement with the indentation of the current statement. (Bug#77620) diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index b03e4f9efdf..81440cfcfc9 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -6156,14 +6156,25 @@ parent defun name." (defun python-info-statement-ends-block-p () "Return non-nil if point is at end of block." - (let ((end-of-block-pos (save-excursion - (python-nav-end-of-block))) - (end-of-statement-pos (save-excursion - (python-nav-end-of-statement) - (python-util-forward-comment -1) - (point)))) - (and end-of-block-pos end-of-statement-pos - (= end-of-block-pos end-of-statement-pos)))) + (let* (current-statement + (current-indentation (save-excursion + (setq current-statement + (python-nav-beginning-of-statement)) + (current-indentation))) + next-statement + (next-indentation (save-excursion + (python-nav-forward-statement) + (setq next-statement (point)) + (current-indentation)))) + (unless (and (< current-statement next-statement) + (<= current-indentation next-indentation)) + (and-let* ((end-of-statement-pos (save-excursion + (python-nav-end-of-statement) + (python-util-forward-comment -1) + (point))) + (end-of-block-pos (save-excursion + (python-nav-end-of-block)))) + (= end-of-block-pos end-of-statement-pos))))) (defun python-info-beginning-of-statement-p () "Return non-nil if point is at beginning of statement." commit 55cf15e163b407878921b4428e5436f01cf1fd90 Author: kobarity Date: Sun Apr 20 21:14:46 2025 +0900 Fix Python block end predicates (bug#77941) * lisp/progmodes/python.el (python-info-statement-ends-block-p) (python-info-end-of-block-p): Add consideration of comments. * test/lisp/progmodes/python-tests.el (python-info-statement-ends-block-p-3) (python-info-end-of-block-p-3): New tests. diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 32035773fde..b03e4f9efdf 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -6159,7 +6159,9 @@ parent defun name." (let ((end-of-block-pos (save-excursion (python-nav-end-of-block))) (end-of-statement-pos (save-excursion - (python-nav-end-of-statement)))) + (python-nav-end-of-statement) + (python-util-forward-comment -1) + (point)))) (and end-of-block-pos end-of-statement-pos (= end-of-block-pos end-of-statement-pos)))) @@ -6182,7 +6184,10 @@ parent defun name." (defun python-info-end-of-block-p () "Return non-nil if point is at end of block." - (and (python-info-end-of-statement-p) + (and (= (point) (save-excursion + (python-nav-end-of-statement) + (python-util-forward-comment -1) + (point))) (python-info-statement-ends-block-p))) (define-obsolete-function-alias diff --git a/test/lisp/progmodes/python-tests.el b/test/lisp/progmodes/python-tests.el index 898e2b036e0..22a7c3a5e89 100644 --- a/test/lisp/progmodes/python-tests.el +++ b/test/lisp/progmodes/python-tests.el @@ -5821,6 +5821,15 @@ if width == 0 and height == 0 and \\ (python-tests-look-at "raise ValueError(") (should (python-info-statement-ends-block-p)))) +(ert-deftest python-info-statement-ends-block-p-3 () + (python-tests-with-temp-buffer + " +def function(): + print() # Comment +" + (python-tests-look-at "print()") + (should (python-info-statement-ends-block-p)))) + (ert-deftest python-info-beginning-of-statement-p-1 () (python-tests-with-temp-buffer " @@ -5983,6 +5992,15 @@ if width == 0 and height == 0 and \\ (python-util-forward-comment -1) (should (python-info-end-of-block-p)))) +(ert-deftest python-info-end-of-block-p-3 () + (python-tests-with-temp-buffer + " +def function(): + print() # Comment +" + (python-tests-look-at " # Comment") + (should (python-info-end-of-block-p)))) + (ert-deftest python-info-dedenter-opening-block-position-1 () (python-tests-with-temp-buffer " commit 7bb648eb804c6420cd0f76cd8075a0faa30a4bfd Author: Jonas Bernoulli Date: Tue Apr 15 00:57:37 2025 +0200 mode-line-modes-delimiters: New option diff --git a/etc/NEWS b/etc/NEWS index b4ac68d3e0b..695166a7dc3 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -336,6 +336,11 @@ single button. The value could also be a list to specify minor mode lighters to hide or show. The default value is nil, which retains the previous behavior of showing all minor mode lighters. +*** New user option 'mode-line-modes-delimiters'. +This option allows changing or removing the delimiters shown around +the major mode and list of minor modes in the mode line. The default +retains the existing behavior of inserting parentheses. + ** Tab Bars and Tab Lines --- diff --git a/lisp/bindings.el b/lisp/bindings.el index 2d6e1579e10..8fde7ad6d4b 100644 --- a/lisp/bindings.el +++ b/lisp/bindings.el @@ -445,6 +445,15 @@ lighters hidden." :group 'mode-line :version "31.1") +(defcustom mode-line-modes-delimiters '("(" . ")") + "Strings placed around the modes displayed in the mode line. +These elements are placed around `mode-name' and `mode-line-modes'." + :type '(choice (const :tag "No delimiters") + (cons (string :tag "Left delimiter") + (string :tag "Right delimiter"))) + :group 'mode-line + :version "31.1") + (defvar mode-line-minor-modes '(:eval (mode-line--minor-modes)) "Mode line construct for minor mode lighters.") ;;;###autoload @@ -577,7 +586,7 @@ Keymap to display on minor modes.") (let ((recursive-edit-help-echo "Recursive edit, type C-M-c to get out")) (list (propertize "%[" 'help-echo recursive-edit-help-echo) - "(" + '(:eval (car mode-line-modes-delimiters)) `(:propertize ("" mode-name) help-echo "Major mode\n\ mouse-1: Display major mode menu\n\ @@ -591,7 +600,7 @@ mouse-3: Toggle minor modes" 'local-map (make-mode-line-mouse-map 'mouse-2 #'mode-line-widen)) '("" mode-line-minor-modes) - ")" + '(:eval (cdr mode-line-modes-delimiters)) (propertize "%]" 'help-echo recursive-edit-help-echo) " ")) "Mode line construct for displaying major and minor modes.") commit a4bff5755120aebe6c240271b93e0f0cd8972c2a Author: Michael Albinus Date: Sat Apr 26 09:46:16 2025 +0200 * etc/NEWS: Presentational fixes and improvements. diff --git a/etc/NEWS b/etc/NEWS index 4eff25326e1..b4ac68d3e0b 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -226,11 +226,12 @@ but as a plain Lisp variable, not a user option.) +++ *** New commands to modify window layouts. -'C-x w t' and 'C-x w r /' rotate the window layout. -'C-x w o /' rotate the windows within the current layout. -'C-x w f ///' flip window layouts. -By default these commands operate on the selected frame's root window. +- 'C-x w t' and 'C-x w r /' rotate the window layout. +- 'C-x w o /' rotate the windows within the current layout. +- 'C-x w f ///' flip window layouts. + +By default, these commands operate on the selected frame's root window. With a prefix argument, they operate on the selected window's parent. +++ @@ -376,12 +377,12 @@ docstring for arguments passed to a help-text function. --- *** New command 'project-root-find-file'. -It is equivalent to running ‘project-any-command’ with ‘find-file’. +It is equivalent to running 'project-any-command' with 'find-file'. --- *** New command 'project-customize-dirlocals'. -It is equivalent to running ‘project-any-command’ with -‘customize-dirlocals’. +It is equivalent to running 'project-any-command' with +'customize-dirlocals'. --- *** Improved prompt for 'project-switch-project'. @@ -613,8 +614,7 @@ modes. *** Tree-sitter enabled modes now properly support 'show-paren-mode'. They do that by letting 'show-paren-mode' use the results of parsing by the tree-sitter library. The new function 'treesit-show-paren-data' is -used to communicate the tree-sitter parsing results to -'show-paren-mode'. +used to communicate the tree-sitter parsing results to 'show-paren-mode'. *** Tree-sitter enabled modes now properly support 'hs-minor-mode'. All commands from hideshow.el can selectively display blocks @@ -632,15 +632,16 @@ variable 'treesit-language-display-name-alist' holds the translations of language symbols where that translation is not trivial. *** New function 'treesit-merge-font-lock-feature-list'. -This function merges two tree-sitter font-lock feature lists. Returns a -new font-lock feature list with no duplicates in the same level. It can -be used to merge font-lock feature lists in a multi-language major mode. +This function merges two tree-sitter font-lock feature lists. It +returns a new font-lock feature list with no duplicates in the same +level. It can be used to merge font-lock feature lists in a +multi-language major mode. *** New function 'treesit-replace-font-lock-feature-settings'. Given two tree-sitter font-lock settings, it replaces the feature in the second font-lock settings with the same feature in the first font-lock settings. In a multi-language major mode it is sometimes necessary to -replace features from one of the major modes, with others that are +replace features from one of the major modes with others, that are better suited to the new multilingual context. *** New function 'treesit-simple-indent-modify-rules'. @@ -687,7 +688,7 @@ at point to explore. +++ *** New user option 'c-ts-mode-enable-doxygen'. -By default, this is nil, and the Doxygen comment blocks in C/C++ source +By default, this is nil, and the Doxygen comment blocks in C/C++ sources are highlighted like other comments. When non-nil, Doxygen comment blocks are syntax-highlighted if the Doxygen grammar library is available. @@ -718,7 +719,7 @@ additional flags to pass to the go test command line. +++ *** New user option 'java-ts-mode-enable-doxygen'. -By default, this is nil, and the Doxygen comment blocks in Java source +By default, this is nil, and the Doxygen comment blocks in Java sources are highlighted like other comments. When non-nil, Doxygen comment blocks are syntax-highlighted if the Doxygen grammar library is available. @@ -746,14 +747,14 @@ Rust number literals may have an optional type suffix. When this option is non-nil, this suffix is fontified using 'font-lock-type-face'. ** EIEIO + --- *** New value 'warn' for 'eieio-backward-compatibility'. This is the new default value and causes warnings to be emitted at run-time for the use of the associated deprecated features. -(setq eieio-backward-compatibility t) can be used to recover +'(setq eieio-backward-compatibility t)' can be used to recover the previous silence. ---- ** Text mode --- @@ -810,9 +811,9 @@ Otherwise, if set to 'full', display the full docstring. --- *** New user option 'elisp-eldoc-docstring-length-limit'. -This user option controls the maximum length of doc strings in character +This user option controls the maximum length of docstrings in character units that 'elisp-eldoc-funcall-with-docstring' and -'elisp-eldoc-var-docstring-with-value' will show. By default it is set +'elisp-eldoc-var-docstring-with-value' will show. By default, it is set to 1000 characters. ** Buffer Menu @@ -1446,9 +1447,9 @@ a control panel window. When non-nil, 'dired-create-empty-file' creates a new empty file and adds an entry for it (or its topmost new parent directory if created) under the current subdirectory in the Dired buffer by default -(otherwise, it adds adds the new file (and new subdirectories if -provided) to whichever directory the user enters at the prompt). When -nil, `dired-create-empty-file' acts on the default directory by default. +(otherwise, it adds the new file (and new subdirectories if provided) to +whichever directory the user enters at the prompt). When nil, +'dired-create-empty-file' acts on the default directory by default. Note that setting this user option to non-nil makes invoking 'dired-create-empty-file' outside of a Dired buffer raise an error (like @@ -1839,7 +1840,7 @@ Meant to be given a global binding convenient to the user. Example: - 'speedbar-prefer-window' tells 'speedbar' to open a side window instead of a frame. -- ‘speedbar-dedicated-window’ defines whether the ‘speedbar’ is +- 'speedbar-dedicated-window' defines whether the 'speedbar' is displayed in a dedicated window. - 'speedbar-window-default-width' defines the initial width of the 'speedbar-window'. @@ -1876,7 +1877,7 @@ New faces have been added to 'icomplete-vertical-mode': --- *** New major mode 'Customize-dirlocals-mode'. This is intended for customizing directory-local variables in the -current directory's '.dir-locals.el' file. +current directory's ".dir-locals.el" file. ** Miscellaneous @@ -1924,7 +1925,7 @@ modes. Customize it to a non-nil value to have the fill-column indicators change their face if the current line exceeds the 'fill-column'. The new face 'display-fill-column-indicator-warning-face' is used to -highlight the fill-column indicators. By default this is disabled. +highlight the fill-column indicators. By default, this is disabled. --- ** Flymake @@ -1936,7 +1937,7 @@ windows without fringes, including any window on a text terminal. *** Enhanced 'flymake-show-buffer-diagnostics'. The command 'flymake-show-buffer-diagnostics' is now capable of -highliting a nearby diagnostic in the resulting listing. Additionally, +highlighting a nearby diagnostic in the resulting listing. Additionally, it is bound to mouse clicks on fringe and margin indicators, operating on the diagnostics of the corresponding line. The user may bind it in other situations such as the diagnostic overlay map. @@ -2240,9 +2241,9 @@ New convenience function 'find-function-update-type-alist' offers a concise way to update a symbol's 'find-function-type-alist' property. +++ -** 'inhibit-message' can now inhibit clearing of the echo-area. +** 'inhibit-message' can now inhibit clearing of the echo area. Binding 'inhibit-message' to a non-nil value will now suppress both -the display of messages and the clearing of the echo-area, such as +the display of messages and the clearing of the echo area, such as caused by calling 'message' with a nil argument. ** Special Events @@ -2295,7 +2296,7 @@ recognition APIs, the relevant permission dialog is now displayed, thus allowing Emacs users access to speech recognition utilities. Note: Accepting this permission allows the use of system APIs, which may -send user data to Apple’s speech recognition servers. +send user data to Apple's speech recognition servers. +++ ** On Mac OS X, stipples now render with color. commit 52b68f60544a0430265ae4cbbf7fdd16b457bf46 Author: Eli Zaretskii Date: Sat Apr 26 09:55:39 2025 +0300 ; * etc/NEWS: Fix a typo (bug#78068). diff --git a/etc/NEWS b/etc/NEWS index c4c796917b9..4eff25326e1 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -812,7 +812,7 @@ Otherwise, if set to 'full', display the full docstring. *** New user option 'elisp-eldoc-docstring-length-limit'. This user option controls the maximum length of doc strings in character units that 'elisp-eldoc-funcall-with-docstring' and -'elisp-eldoc-var-docstring-with-value' will shopw. By default it is set +'elisp-eldoc-var-docstring-with-value' will show. By default it is set to 1000 characters. ** Buffer Menu commit bacde21fde4794744eaaaf2f7f136ef0fdfbe0c8 Author: Sean Whitton Date: Sat Apr 26 11:47:23 2025 +0800 ; typescript-ts-mode-multivar-indent-style: Add missing group. diff --git a/lisp/progmodes/typescript-ts-mode.el b/lisp/progmodes/typescript-ts-mode.el index 466a3de6d0f..e0458b3192e 100644 --- a/lisp/progmodes/typescript-ts-mode.el +++ b/lisp/progmodes/typescript-ts-mode.el @@ -80,7 +80,8 @@ level: For changes to this variable to take effect, restart the major mode." :version "31.1" - :type 'symbol) + :type 'symbol + :group 'typescript) (defface typescript-ts-jsx-tag-face '((t . (:inherit font-lock-function-call-face))) commit 94d8f5b94fb6fa281f5ea3bb8a8d945628f3a188 Author: Sean Whitton Date: Sat Apr 26 11:45:25 2025 +0800 ; typescript-ts-mode-multivar-indent-style: Use different example. This prevents it becoming a hyperlink in *Help* buffers. diff --git a/lisp/progmodes/typescript-ts-mode.el b/lisp/progmodes/typescript-ts-mode.el index 47d6aca3163..466a3de6d0f 100644 --- a/lisp/progmodes/typescript-ts-mode.el +++ b/lisp/progmodes/typescript-ts-mode.el @@ -68,14 +68,14 @@ If the value is `align', align each declaration: const foo = \\='bar\\=', - car = \\='cdr\\=', + baz = \\='quux\\=', stop = \\='start\\='; If the value is `indent', indent subsequent declarations by one indent level: const foo = \\='bar\\=', - car = \\='cdr\\=', + baz = \\='quux\\=', stop = \\='start\\='; For changes to this variable to take effect, restart the major mode." commit 5a043bf3dfa42a6d9b8376687a2dc9e5fb71fe4a Author: Sean Whitton Date: Sat Apr 26 11:43:49 2025 +0800 ; typescript-ts-mode-multivar-indent-style: Fix use of apostrophes. diff --git a/lisp/progmodes/typescript-ts-mode.el b/lisp/progmodes/typescript-ts-mode.el index 46f0d7fffbc..47d6aca3163 100644 --- a/lisp/progmodes/typescript-ts-mode.el +++ b/lisp/progmodes/typescript-ts-mode.el @@ -67,16 +67,16 @@ If the value is `align', align each declaration: - const foo = 'bar', - car = 'cdr', - stop = 'start'; + const foo = \\='bar\\=', + car = \\='cdr\\=', + stop = \\='start\\='; If the value is `indent', indent subsequent declarations by one indent level: - const foo = 'bar', - car = 'cdr', - stop = 'start'; + const foo = \\='bar\\=', + car = \\='cdr\\=', + stop = \\='start\\='; For changes to this variable to take effect, restart the major mode." :version "31.1" commit 1f520db97bdb8cfc9a66c46964331db84c41d7e8 Author: Stephen Gildea Date: Fri Apr 25 18:37:39 2025 -0700 * doc/emacs/files.texi (Time Stamp Customization): Typo. diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi index e15ab605db1..517e2a1fdd0 100644 --- a/doc/emacs/files.texi +++ b/doc/emacs/files.texi @@ -1090,7 +1090,7 @@ type @kbd{M-x normal-mode} to re-read them. Here is another example, with the time stamp inserted into the last paragraph of an HTML document. Since this template is at the end of the document, not in the first -eight lines, @code{time-stamp-format} starts with @code{-10/} to tell +eight lines, @code{time-stamp-pattern} starts with @code{-10/} to tell @code{time-stamp} to look at the last 10 lines. The @code{%%} asks for the default format (specified by @code{time-stamp-format}). commit 3393644b715a4b5a1b438b556478cc9e45f3e0ad Author: Yuan Fu Date: Fri Apr 25 17:38:58 2025 -0700 Add multivar indent style in typescript-ts-mode (bug#77803) * lisp/progmodes/typescript-ts-mode.el: (typescript-ts-mode-multivar-indent-style): New option. (typescript-ts-mode--indent-rules): Support both styles. diff --git a/lisp/progmodes/typescript-ts-mode.el b/lisp/progmodes/typescript-ts-mode.el index 50ebefa7871..46f0d7fffbc 100644 --- a/lisp/progmodes/typescript-ts-mode.el +++ b/lisp/progmodes/typescript-ts-mode.el @@ -62,6 +62,26 @@ :safe 'integerp :group 'typescript) +(defcustom typescript-ts-mode-multivar-indent-style 'indent + "Indentation style for multivar declaration. + +If the value is `align', align each declaration: + + const foo = 'bar', + car = 'cdr', + stop = 'start'; + +If the value is `indent', indent subsequent declarations by one indent +level: + + const foo = 'bar', + car = 'cdr', + stop = 'start'; + +For changes to this variable to take effect, restart the major mode." + :version "31.1" + :type 'symbol) + (defface typescript-ts-jsx-tag-face '((t . (:inherit font-lock-function-call-face))) "Face for HTML tags like
and

in JSX." @@ -153,7 +173,9 @@ Argument LANGUAGE is either `typescript' or `tsx'." ((parent-is "type_arguments") parent-bol typescript-ts-mode-indent-offset) ((parent-is "type_parameters") parent-bol typescript-ts-mode-indent-offset) ((parent-is ,(rx (or "variable" "lexical") "_" (or "declaration" "declarator"))) - parent-bol typescript-ts-mode-indent-offset) + ,@(pcase typescript-ts-mode-multivar-indent-style + ('indent '(parent-bol typescript-ts-mode-indent-offset)) + ('align '(typescript-ts-mode--anchor-decl 1)))) ((parent-is "arguments") parent-bol typescript-ts-mode-indent-offset) ((parent-is "array") parent-bol typescript-ts-mode-indent-offset) ((parent-is "formal_parameters") parent-bol typescript-ts-mode-indent-offset) commit 3098d34bfd13c4f06d90ee002fe00ca0de1b46cc Author: Roi Martin Date: Sat Apr 19 13:50:52 2025 +0200 * Fix missing lexical-binding cookie warning on async compilation (bug#77918) * lisp/emacs-lisp/comp-run.el (comp--run-async-workers): Fix missing lexical-binding cookie warning on async compilation. diff --git a/lisp/emacs-lisp/comp-run.el b/lisp/emacs-lisp/comp-run.el index 061f1767b74..e0e00d88f83 100644 --- a/lisp/emacs-lisp/comp-run.el +++ b/lisp/emacs-lisp/comp-run.el @@ -282,6 +282,7 @@ display a message." (mapcar #'prin1-to-string expr))) (_ (progn (with-temp-file temp-file + (insert ";;; -*- lexical-binding: t -*-\n") (mapc #'insert expr-strings)) (comp-log "\n") (mapc #'comp-log expr-strings))) commit 48940a5d485649bfd6840ddaaf91c17fbe90dbc0 Author: Stefan Monnier Date: Fri Apr 25 16:35:04 2025 -0400 lisp/auth-source.el (authinfo--keywords): Avoid obsolete font-lock face vars diff --git a/lisp/auth-source.el b/lisp/auth-source.el index 946debca95e..45f2a488dd5 100644 --- a/lisp/auth-source.el +++ b/lisp/auth-source.el @@ -2395,21 +2395,21 @@ See `auth-source-search' for details on SPEC." :version "28.1") (defvar authinfo--keywords - '(("^#.*" . font-lock-comment-face) + '(("^#.*" (0 'font-lock-comment-face)) ("^\\(machine\\)[ \t]+\\([^ \t\n]+\\)" - (1 font-lock-variable-name-face) - (2 font-lock-builtin-face)) + (1 'font-lock-variable-name-face) + (2 'font-lock-builtin-face)) ("\\(login\\)[ \t]+\\([^ \t\n]+\\)" - (1 font-lock-comment-delimiter-face) - (2 font-lock-keyword-face)) + (1 'font-lock-comment-delimiter-face) + (2 'font-lock-keyword-face)) ("\\(password\\)[ \t]+\\([^ \t\n]+\\)" - (1 font-lock-comment-delimiter-face) - (2 font-lock-doc-face)) + (1 'font-lock-comment-delimiter-face) + (2 'font-lock-doc-face)) ("\\(port\\)[ \t]+\\([^ \t\n]+\\)" - (1 font-lock-comment-delimiter-face) - (2 font-lock-type-face)) + (1 'font-lock-comment-delimiter-face) + (2 'font-lock-type-face)) ("\\([^ \t\n]+\\)[, \t]+\\([^ \t\n]+\\)" - (1 font-lock-constant-face) + (1 'font-lock-constant-face) (2 nil)))) ;;;###autoload commit 648453c04d9b91d96452b930c0c948b0b39b5dc0 Author: Sean Whitton Date: Fri Apr 25 09:27:00 2025 +0800 ; Change let* to just let in last change. diff --git a/lisp/newcomment.el b/lisp/newcomment.el index 8ccedb0ef0f..28ee4467589 100644 --- a/lisp/newcomment.el +++ b/lisp/newcomment.el @@ -714,13 +714,13 @@ If CONTINUE is non-nil, use the `comment-continue' markers if any." (interactive "*") (comment-normalize-vars) (beginning-of-line) - (let* ((starter (or (and continue comment-continue) - comment-start - (error "No comment syntax defined"))) - (ender (or (and continue comment-continue "") - comment-end)) - (begpos (comment-search-forward (line-end-position) t)) - cpos indent) + (let ((starter (or (and continue comment-continue) + comment-start + (error "No comment syntax defined"))) + (ender (or (and continue comment-continue "") + comment-end)) + (begpos (comment-search-forward (line-end-position) t)) + cpos indent) (cond ;; If we couldn't find a comment *starting* on this line, see if we ;; are already within a multiline comment at BOL (bug#78003). commit a6829a0c35326361b2b04bd4a010a30fe99802b1 Author: Sean Whitton Date: Thu Apr 24 15:38:34 2025 +0800 comment-indent: Handle BOL already within a multiline comment * lisp/newcomment.el (comment-indent): Newly handle the case that BOL is already within a multiline comment (bug#78003). Thanks to Stefan Monnier for review and reworking the control flow. diff --git a/lisp/newcomment.el b/lisp/newcomment.el index 23fcbc05372..8ccedb0ef0f 100644 --- a/lisp/newcomment.el +++ b/lisp/newcomment.el @@ -713,61 +713,70 @@ Point is expected to be at the start of the comment." If CONTINUE is non-nil, use the `comment-continue' markers if any." (interactive "*") (comment-normalize-vars) - (let ((starter (or (and continue comment-continue) - comment-start)) - (ender (or (and continue comment-continue "") - comment-end))) - (unless starter (error "No comment syntax defined")) - (beginning-of-line) - (let* ((eolpos (line-end-position)) - (begpos (comment-search-forward eolpos t)) - cpos indent) - (if (and comment-insert-comment-function (not begpos)) - ;; If no comment and c-i-c-f is set, let it do everything. - (funcall comment-insert-comment-function) - ;; An existing comment? - (if begpos - (progn - (if (and (not (looking-at "[\t\n ]")) - (looking-at comment-end-skip)) - ;; The comment is empty and we have skipped all its space - ;; and landed right before the comment-ender: - ;; Go back to the middle of the space. - (forward-char (/ (skip-chars-backward " \t") -2))) - (setq cpos (point-marker))) - ;; If none, insert one. - (save-excursion - ;; Some `comment-indent-function's insist on not moving - ;; comments that are in column 0, so we first go to the - ;; likely target column. - (indent-to comment-column) - ;; Ensure there's a space before the comment for things - ;; like sh where it matters (as well as being neater). - (unless (memq (char-before) '(nil ?\n ?\t ?\s)) - (insert ?\s)) - (setq begpos (point)) - (insert starter) - (setq cpos (point-marker)) - (insert ender))) - (goto-char begpos) - ;; Compute desired indent. - (setq indent (save-excursion (funcall comment-indent-function))) - ;; If `indent' is nil and there's code before the comment, we can't - ;; use `indent-according-to-mode', so we default to comment-column. - (unless (or indent (save-excursion (skip-chars-backward " \t") (bolp))) - (setq indent comment-column)) - (if (not indent) - ;; comment-indent-function refuses: delegate to line-indent. - (indent-according-to-mode) - ;; If the comment is at the right of code, adjust the indentation. - (unless (save-excursion (skip-chars-backward " \t") (bolp)) - (setq indent (comment-choose-indent indent))) - ;; If that's different from comment's current position, change it. - (unless (= (current-column) indent) - (delete-region (point) (progn (skip-chars-backward " \t") (point))) - (indent-to indent))) - (goto-char cpos) - (set-marker cpos nil))))) + (beginning-of-line) + (let* ((starter (or (and continue comment-continue) + comment-start + (error "No comment syntax defined"))) + (ender (or (and continue comment-continue "") + comment-end)) + (begpos (comment-search-forward (line-end-position) t)) + cpos indent) + (cond + ;; If we couldn't find a comment *starting* on this line, see if we + ;; are already within a multiline comment at BOL (bug#78003). + ((and (not begpos) (not continue) + comment-use-syntax comment-use-global-state + (nth 4 (syntax-ppss (line-beginning-position)))) + ;; We don't know anything about the nature of the multiline + ;; construct, so immediately delegate to the mode. + (indent-according-to-mode)) + ((and (not begpos) comment-insert-comment-function) + ;; If no comment and c-i-c-f is set, let it do everything. + (funcall comment-insert-comment-function)) + (t + ;; An existing comment? + (if begpos + (progn + (if (and (not (looking-at "[\t\n ]")) + (looking-at comment-end-skip)) + ;; The comment is empty and we have skipped all its space + ;; and landed right before the comment-ender: + ;; Go back to the middle of the space. + (forward-char (/ (skip-chars-backward " \t") -2))) + (setq cpos (point-marker))) + ;; If none, insert one. + (save-excursion + ;; Some `comment-indent-function's insist on not moving + ;; comments that are in column 0, so we first go to the + ;; likely target column. + (indent-to comment-column) + ;; Ensure there's a space before the comment for things + ;; like sh where it matters (as well as being neater). + (unless (memq (char-before) '(nil ?\n ?\t ?\s)) + (insert ?\s)) + (setq begpos (point)) + (insert starter) + (setq cpos (point-marker)) + (insert ender))) + (goto-char begpos) + ;; Compute desired indent. + (setq indent (save-excursion (funcall comment-indent-function))) + ;; If `indent' is nil and there's code before the comment, we can't + ;; use `indent-according-to-mode', so we default to comment-column. + (unless (or indent (save-excursion (skip-chars-backward " \t") (bolp))) + (setq indent comment-column)) + (if (not indent) + ;; comment-indent-function refuses: delegate to line-indent. + (indent-according-to-mode) + ;; If the comment is at the right of code, adjust the indentation. + (unless (save-excursion (skip-chars-backward " \t") (bolp)) + (setq indent (comment-choose-indent indent))) + ;; If that's different from comment's current position, change it. + (unless (= (current-column) indent) + (delete-region (point) (progn (skip-chars-backward " \t") (point))) + (indent-to indent))) + (goto-char cpos) + (set-marker cpos nil))))) ;;;###autoload (defun comment-set-column (arg) commit e38401e71bddaa16b6de4783fb90e75955faba38 Author: Eli Zaretskii Date: Thu Apr 24 16:22:13 2025 +0300 ; * test/lisp/arc-mode-tests.el ("7z"): Fix 7z entry. diff --git a/test/lisp/arc-mode-tests.el b/test/lisp/arc-mode-tests.el index f6c84db1ad8..51e8a5eba3f 100644 --- a/test/lisp/arc-mode-tests.el +++ b/test/lisp/arc-mode-tests.el @@ -133,7 +133,10 @@ member MEMBER. Then the test finds ARCHIVE and ensures that function (define-arc-mode-test-on-type "ar" '("ar" "q") "a" 'ar) -(define-arc-mode-test-on-type "7z" '("7za" "a") "7z" '7z) +(define-arc-mode-test-on-type "7z" (list (if (eq system-type 'windows-nt) + "7z" "7za") + "a") + "7z" '7z) (ert-deftest arc-mode-test-zip-ensure-ext () "Regression test for bug#61326." commit d74cbf0519edff34f334b62b4f163e98d51336e0 Author: Jens Schmidt Date: Fri Apr 18 14:16:17 2025 +0200 Detect more types of split zip archives * lisp/arc-mode.el (archive-find-type): Detect more types of split zip archives. * test/lisp/arc-mode-tests.el (arc-mode-test-make-file) (arc-mode-test-make-archive): Factor out functions from ... (arc-mode-test-zip-ensure-ext): ... this test. (define-arc-mode-test-on-type): Add macro to test function `archive-find-type' and use the macro to test detection of various archive types. (Bug 77898) diff --git a/lisp/arc-mode.el b/lisp/arc-mode.el index 28be1e9c617..646df770de2 100644 --- a/lisp/arc-mode.el +++ b/lisp/arc-mode.el @@ -792,7 +792,15 @@ archive. ;; The funny [] here make it unlikely that the .elc file will be treated ;; as an archive by other software. (let (case-fold-search) - (cond ((looking-at "\\(PK00\\)?[P]K\003\004") 'zip) + ;; See APPNOTE.txt (version 6.3.10) from PKWARE for the zip + ;; file signatures: + ;; - PK\003\004 == 0x04034b50: local file header signature + ;; (section 4.3.7) + ;; - PK\007\010 == 0x08074b50 (followed by local header): + ;; spanned/split archive signature (section 8.5.3) + ;; - PK00 == 0x30304b50 (followed by local header): temporary + ;; spanned/split archive signature (section 8.5.4) + (cond ((looking-at "\\(?:PK\007\010\\|PK00\\)?[P]K\003\004") 'zip) ((looking-at "..-l[hz][0-9ds]-") 'lzh) ((looking-at "....................[\334]\247\304\375") 'zoo) ((and (looking-at "\C-z") ; signature too simple, IMHO diff --git a/test/lisp/arc-mode-tests.el b/test/lisp/arc-mode-tests.el index f0bb46d734f..f6c84db1ad8 100644 --- a/test/lisp/arc-mode-tests.el +++ b/test/lisp/arc-mode-tests.el @@ -62,6 +62,79 @@ (when (buffer-live-p tar-buffer) (kill-buffer tar-buffer)) (when (buffer-live-p gz-buffer) (kill-buffer gz-buffer))))) +(defun arc-mode-test-make-file (name) + "Create file NAME in default directory with content NAME. +Return NAME." + (with-temp-buffer + (insert name) + (write-file name)) + name) + +(defun arc-mode-test-make-archive (command arc files) + "Call COMMAND to create archive ARC containing FILES. +Return a cons (ARC . EXIT-STATUS)." + (unless (listp command) + (setq command (list command))) + (delete-file arc nil) + (cons arc (funcall (archive--act-files command files) arc))) + +(defmacro define-arc-mode-test-on-type (name command extension type) + "Define and execute a test that tests function `archive-find-type'. +Name the test based on NAME. The generated test first calls + + (call-process (car COMMAND) nil nil nil + (append COMMAND (list ARCHIVE MEMBER))) + +to create file ARCHIVE with extension EXTENSION and containing a single +member MEMBER. Then the test finds ARCHIVE and ensures that function +`archive-find-type' detects it as an archive having type TYPE." + (let* ((command (eval command)) + (argv0 (car command)) + (type (eval type))) + `(ert-deftest ,(intern (format "arc-mode-test-type-%s" name)) () + (skip-unless (executable-find ,argv0)) + (let ((default-directory arc-mode-tests-data-directory) + (member nil) (archive nil) (buffer nil) + result exit-status type) + (unwind-protect + (progn + (setq member (arc-mode-test-make-file "member") + result (arc-mode-test-make-archive + (quote ,command) ,(format "arc.%s" extension) (list member)) + archive (car result) + exit-status (cdr result)) + ;; do not count archiver errors as test failures + (skip-unless (eq exit-status 0)) + (with-current-buffer + (setq buffer (find-file-literally archive)) + (setq type (condition-case err + (archive-find-type) + (error + ;; turn the most likely error into a nice + ;; and self-explaining symbol that can be + ;; compared in a `should' + (if (string= (cadr err) "Buffer format not recognized") + 'signature-not-recognized + (signal (car err) (cdr err)))))) + (should (eq type (quote ,type))))) + (when buffer (kill-buffer buffer)) + (dolist (file (list member archive)) + (when file (ignore-errors (delete-file file))))))))) + +(define-arc-mode-test-on-type "zip" '("zip") "zip" 'zip) + +(define-arc-mode-test-on-type "split-zip" '("zip" "-s1") "zip" 'zip) + +(define-arc-mode-test-on-type "arc" '("arc" "a") "arc" 'arc) + +(define-arc-mode-test-on-type "lha" '("lha" "a") "lzh" 'lzh) + +(define-arc-mode-test-on-type "rar" '("rar" "a") "rar" 'rar) + +(define-arc-mode-test-on-type "ar" '("ar" "q") "a" 'ar) + +(define-arc-mode-test-on-type "7z" '("7za" "a") "7z" '7z) + (ert-deftest arc-mode-test-zip-ensure-ext () "Regression test for bug#61326." (skip-unless (executable-find "zip")) @@ -71,16 +144,6 @@ (base-zip-2 "base-2.zip") (content-1 '("1" "2")) (content-2 '("3" "4")) - (make-file (lambda (name) - (push name created-files) - (with-temp-buffer - (insert name) - (write-file name)))) - (make-zip - (lambda (zip files) - (delete-file zip nil) - (push zip created-files) - (funcall (archive--act-files '("zip") files) zip))) (update-fn (lambda (zip-nonempty) (with-current-buffer (find-file-noselect zip-nonempty) @@ -123,9 +186,12 @@ (unwind-protect (progn ;; setup: make two zip files with different contents - (mapc make-file (append content-1 content-2)) - (funcall make-zip base-zip-1 content-1) - (funcall make-zip base-zip-2 content-2) + (dolist (file (append content-1 content-2)) + (push (arc-mode-test-make-file file) created-files)) + (push (car (arc-mode-test-make-archive "zip" base-zip-1 content-1)) + created-files) + (push (car (arc-mode-test-make-archive "zip" base-zip-2 content-2)) + created-files) ;; test 1: with "test-update" and "test-update.zip", update ;; "test-update": (1) ensure only "test-update" is modified, (2) commit eb6531ba942042a426390835ebddc83b7936d60f Author: Eli Zaretskii Date: Thu Apr 24 15:56:23 2025 +0300 Allow to disable 'lexical-binding' * lisp/progmodes/elisp-mode.el (elisp-enable-lexical-binding): Optionally, allow to disable 'lexical-binding'. diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el index 5dc6a748e31..e8b2a8da65e 100644 --- a/lisp/progmodes/elisp-mode.el +++ b/lisp/progmodes/elisp-mode.el @@ -307,18 +307,36 @@ Comments in the form will be lost." (defun elisp-enable-lexical-binding (&optional interactive) "Make the current buffer use `lexical-binding'. +With a prefix argument \\[universal-argument], make the buffer use +dynamic binding instead. +In addition to setting the value of `lexical-binding' in the buffer, +this function adds the lexbind cookie to the first line of the buffer, +if it is not already there, so that saving the buffer to its file +will cause Emacs to use the specified value of `lexical-binding' +when the file is loaded henceforth. INTERACTIVE non-nil means ask the user for confirmation; this -happens in interactive invocations." +happens in interactive invocations. +When calling from Lisp, use nil or a positive number as the value +of INTERACTIVE to enable `lexical-binding', a negative number to +disable it." (interactive "p") - (if (and (local-variable-p 'lexical-binding) lexical-binding) - (when interactive - (message "lexical-binding already enabled!") - (ding)) - (when (or (not interactive) - (y-or-n-p (format "Enable lexical-binding in this %s? " - (if buffer-file-name "file" "buffer")))) - (setq-local lexical-binding t) - (add-file-local-variable-prop-line 'lexical-binding t interactive)))) + (let* ((disable-lexbind (or (and (numberp interactive) + (< interactive 0)) + (if current-prefix-arg t))) + (required-value (not disable-lexbind))) + (if (and (local-variable-p 'lexical-binding) + (null (xor required-value lexical-binding))) + (when interactive + (message "lexical-binding already %s!" + (if disable-lexbind "disabled" "enabled")) + (ding)) + (when (or (not interactive) + (y-or-n-p (format "%s lexical-binding in this %s? " + (if disable-lexbind "Disable" "Enable") + (if buffer-file-name "file" "buffer")))) + (setq-local lexical-binding required-value) + (add-file-local-variable-prop-line 'lexical-binding required-value + interactive))))) (defvar-keymap elisp--dynlex-modeline-map " " #'elisp-enable-lexical-binding) commit d824b66c2425544c0f26160af591c61860087272 Author: Sean Whitton Date: Thu Apr 24 20:38:51 2025 +0800 ; * doc/emacs/search.texi (Isearch Yank): Improve flow. diff --git a/doc/emacs/search.texi b/doc/emacs/search.texi index c9b1bdfc8bd..788d91f78ba 100644 --- a/doc/emacs/search.texi +++ b/doc/emacs/search.texi @@ -341,7 +341,7 @@ down-casing. @kindex M-s M-. @findex isearch-forward-thing-at-point To begin a new incremental search with the text near point yanked -into the initial search string, type @kbd{M-s M-.} that runs the +into the initial search string, type @kbd{M-s M-.}, which runs the command @code{isearch-forward-thing-at-point}. If the region was active, then it yanks the text from the region into the search string. Otherwise, it tries to yank a URL, a symbol or an expression found commit 3a95e1ede8269f9ba0c223383bc2e8b28e6f7413 Author: Sean Whitton Date: Thu Apr 24 20:19:32 2025 +0800 ; * etc/NEWS: Document deletion of block comment variables. diff --git a/etc/NEWS b/etc/NEWS index 8e3950327f0..c4c796917b9 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2044,6 +2044,12 @@ restore the old behavior, you can set 'eshell-pwd-convert-function' to ** The rx 'eval' form now uses the current Elisp dialect for evaluation. Previously, its argument was always evaluated using dynamic binding. +--- +** Unused block comment variables have been removed. +The unused variables 'block-comment-start' and 'block-comment-end', +which never actually had any effect when set by major modes, have been +removed. + * Lisp Changes in Emacs 31.1 commit 62b284f91530952b248884f0de2f0dbd7b97b26c Author: Sean Whitton Date: Thu Apr 24 20:14:36 2025 +0800 ; * etc/DEBUG: Say that debugging code compiled w/ -Og can be hard. diff --git a/etc/DEBUG b/etc/DEBUG index 4145ba7e36e..32256e1ad6f 100644 --- a/etc/DEBUG +++ b/etc/DEBUG @@ -19,11 +19,11 @@ such as --prefix): ./configure --enable-checking='yes,glyphs' --enable-check-lisp-object-type \ CFLAGS='-O0 -g3' -The -O0 flag is important, as debugging optimized code can be hard. -If the problem happens only with optimized code, you may need to -enable optimizations. If that happens, try using -Og first instead of --O2, as -Og disables some optimizations that make debugging some code -exceptionally hard. +The -O0 flag is important, as debugging optimized code can be hard, even +in the case that the -Og compiler option is used. If the problem +happens only with optimized code, you may need to enable optimizations. +If that happens, try using -Og first instead of -O2, as -Og disables +some optimizations that make debugging some code exceptionally hard. Older versions of GCC may need more than just the -g3 flag. For more, search for "analyze failed assertions" below. commit ccfb40a13d3d1d43990b9b659502a6ba2046059a Author: Eli Zaretskii Date: Thu Apr 24 15:07:34 2025 +0300 ; Improve documentation of last change * etc/NEWS: Add entry about 'Custom-dirlocals-mode'. * lisp/cus-edit.el (Custom-dirlocals-mode): Doc fix. (Bug#77228) diff --git a/etc/NEWS b/etc/NEWS index ade5abc43fc..8e3950327f0 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1871,6 +1871,13 @@ New faces have been added to 'icomplete-vertical-mode': - 'icomplete-vertical-unselected-prefix-indicator-face' controls the appearance of unselected candidate prefixes. +** Customize + +--- +*** New major mode 'Customize-dirlocals-mode'. +This is intended for customizing directory-local variables in the +current directory's '.dir-locals.el' file. + ** Miscellaneous --- diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el index fc05f8ebc7c..5fc53bdcdd7 100644 --- a/lisp/cus-edit.el +++ b/lisp/cus-edit.el @@ -6063,8 +6063,8 @@ Moves point into the widget that holds the value." (add-hook 'widget-forward-hook #'custom-dirlocals-maybe-update-cons nil t)) (define-derived-mode Custom-dirlocals-mode nil "Custom dirlocals" - "Major mode for customize Directory Local Variables in the current directory. -Entry to this mode calls the value of `Custom-mode-hook' if that value + "Major mode for customizing Directory Local Variables in current directory. +Entry to this mode calls the value of `Custom-mode-hook' if its value is non-nil. \\{custom-dirlocals-map}" commit 6414ed0d1166b0f24515ce92bb6db2c3d718a96a Author: Elías Gabriel Pérez Date: Sun Mar 23 21:26:26 2025 -0600 Create major mode for `customize-dirlocals` (bug#77228) * lisp/cus-edit.el (Custom-dirlocals-mode): New major mode. (custom-dirlocals-with-buffer): Move settings to `Custom-dirlocals-mode'. diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el index b260ea5fe95..fc05f8ebc7c 100644 --- a/lisp/cus-edit.el +++ b/lisp/cus-edit.el @@ -6062,31 +6062,47 @@ Moves point into the widget that holds the value." (custom--initialize-widget-variables) (add-hook 'widget-forward-hook #'custom-dirlocals-maybe-update-cons nil t)) +(define-derived-mode Custom-dirlocals-mode nil "Custom dirlocals" + "Major mode for customize Directory Local Variables in the current directory. +Entry to this mode calls the value of `Custom-mode-hook' if that value +is non-nil. + +\\{custom-dirlocals-map}" + (kill-all-local-variables) + (custom-dirlocals--set-widget-vars) + (setq-local major-mode #'Custom-dirlocals-mode) + (setq-local text-conversion-style 'action) + (setq-local touch-screen-keyboard-function + #'Custom-display-on-screen-keyboard-p) + (setq-local revert-buffer-function #'Custom-dirlocals-revert-buffer) + (setq-local tool-bar-map + (or custom-dirlocals-tool-bar-map + ;; Set up `custom-dirlocals-tool-bar-map'. + (let ((map (make-sparse-keymap))) + (mapc + (lambda (arg) + (tool-bar-local-item-from-menu + (nth 1 arg) (nth 4 arg) map custom-dirlocals-map + :label (nth 5 arg))) + custom-dirlocals-commands) + (setq custom-dirlocals-tool-bar-map map)))) + (use-local-map custom-dirlocals-map) + (run-hooks 'Custom-mode-hook)) + +(derived-mode-add-parents 'Custom-dirlocals-mode '(Custom-mode)) + (defmacro custom-dirlocals-with-buffer (&rest body) "Arrange to execute BODY in a \"*Customize Dirlocals*\" buffer." ;; We don't use `custom-buffer-create' because the settings here ;; don't go into the `custom-file'. `(progn (switch-to-buffer "*Customize Dirlocals*") - (kill-all-local-variables) + (let ((inhibit-read-only t)) (erase-buffer)) (remove-overlays) - (custom-dirlocals--set-widget-vars) + (Custom-dirlocals-mode) ,@body - (setq-local tool-bar-map - (or custom-dirlocals-tool-bar-map - ;; Set up `custom-dirlocals-tool-bar-map'. - (let ((map (make-sparse-keymap))) - (mapc - (lambda (arg) - (tool-bar-local-item-from-menu - (nth 1 arg) (nth 4 arg) map custom-dirlocals-map - :label (nth 5 arg))) - custom-dirlocals-commands) - (setq custom-dirlocals-tool-bar-map map)))) - (setq-local revert-buffer-function #'Custom-dirlocals-revert-buffer) - (use-local-map custom-dirlocals-map) (widget-setup))) (defun custom-dirlocals-get-options () commit 49ea1f64c77415a893f59e0c4f4ebef6c499541b Author: Eli Zaretskii Date: Thu Apr 24 12:32:02 2025 +0300 ; Improve documentation of 'modifier-bar-mode' * doc/emacs/custom.texi (Modifier Keys): * doc/emacs/frames.texi (Tool Bars): * lisp/tool-bar.el (modifier-bar-mode): Improve documentation of 'modifier-bar-mode'. diff --git a/doc/emacs/custom.texi b/doc/emacs/custom.texi index f69187ff239..6a3e9d899dc 100644 --- a/doc/emacs/custom.texi +++ b/doc/emacs/custom.texi @@ -2164,6 +2164,10 @@ You can similarly enter the Shift, Control, and Meta modifiers by using @kbd{C-x @@ S}, @kbd{C-x @@ c}, and @kbd{C-x @@ m}, respectively, although this is rarely needed. + On graphical terminals, you can enable the Modifier Bar mode, which +allows simulating the missing modifier keys by clicking a tool-bar +button. @xref{Tool Bars}. + @node Function Keys @subsection Rebinding Function Keys diff --git a/doc/emacs/frames.texi b/doc/emacs/frames.texi index e0d8a607072..8225825e261 100644 --- a/doc/emacs/frames.texi +++ b/doc/emacs/frames.texi @@ -1343,15 +1343,18 @@ displayed by moving the mouse pointer to the top of the screen. @cindex displaying modifier keys in the tool bar @cindex mode, Modifier Bar @cindex Modifier Bar - Keyboards often lack one or more of the modifier keys that Emacs -might want to use, making it difficult or impossible to input key -sequences that contain them. Emacs can optionally display a list of -buttons that act as substitutes for modifier keys within the tool bar; -these buttons are also referred to as the ``modifier bar''. Clicking -an icon within the modifier bar will cause a modifier key to be -applied to the next keyboard event that is read. The modifier bar is -displayed when the global minor mode @code{modifier-bar-mode} is -enabled; to do so, type @kbd{M-x modifier-bar-mode}. + Keyboards often lack one or more of the modifier keys (@pxref{Modifier +Keys}) that Emacs users might want to use, making it difficult or +impossible to input key sequences with these modifiers. For example, +many keyboards lack the Hyper and Super modifiers, and smartphones +usually also lack Ctrl and Alt modifiers. Emacs can optionally display +a tool bar of buttons that can substitute the modifier keys; this +additional tool bar is known as the @dfn{modifier bar}. Clicking a +button within the modifier bar will cause the modifier key shown on the +button to be applied to the next keyboard event that Emacs reads. The +modifier bar is displayed when the global minor mode +@code{modifier-bar-mode} is enabled; to do so, type @kbd{M-x +modifier-bar-mode}. @node Tab Bars @section Tab Bars diff --git a/lisp/tool-bar.el b/lisp/tool-bar.el index 384b926349d..bc4f8acf6d0 100644 --- a/lisp/tool-bar.el +++ b/lisp/tool-bar.el @@ -532,12 +532,13 @@ decoding the current key sequence, nil otherwise." (not (memq modifier modifier-bar-modifier-list))) (define-minor-mode modifier-bar-mode - "Toggle display of the modifier bar. + "Toggle display of the key-modifier tool bar. -When enabled, a small tool bar will be displayed next to the tool -bar containing items bound to -`tool-bar-event-apply-control-modifier' and its related commands, -which see." +When enabled, a small tool bar will be displayed in addition to the +regular tool bar, containing buttons for key modifiers such as +Ctrl, Shift, Alt, etc. This is useful on terminals whose keyboard +has no keys for these modifiers, such as smartphones and other +devices with small keyboards." :init-value nil :global t :group 'tool-bar commit a975232c0fd7bbcce39f904518bd068a879ea4f0 Author: Eli Zaretskii Date: Thu Apr 24 12:07:56 2025 +0300 ; * doc/emacs/programs.texi (Matching): Fix wording (bug#78021). diff --git a/doc/emacs/programs.texi b/doc/emacs/programs.texi index e155092676b..820a772104e 100644 --- a/doc/emacs/programs.texi +++ b/doc/emacs/programs.texi @@ -960,11 +960,11 @@ argument specifies the number of levels to go down. @node Matching @subsection Matching Parentheses -@cindex matching parentheses +@cindex matching, parentheses and other paired delimiters @cindex parentheses, displaying matches - Emacs has a number of @dfn{parenthesis matching} features, which -make it easy to see how and whether parentheses (or other delimiters) + Emacs has a number of @dfn{parenthesis matching} features, which make +it easy to see how and whether parentheses (or other paired delimiters) match up. Whenever you type a self-inserting character that is a closing @@ -1065,14 +1065,17 @@ nonblank line. @findex electric-pair-mode Electric Pair mode, a global minor mode, provides a way to easily insert matching delimiters: parentheses, braces, brackets, etc. -Whenever you insert an opening delimiter, the matching closing -delimiter is automatically inserted as well, leaving point between the -two. Conversely, when you insert a closing delimiter over an existing -one, no insertion takes places, and that position is simply skipped -over. If the region is active (@pxref{Mark}), insertion of a -delimiter operates on the region: the characters in the region are -enclosed in a pair of matching delimiters, leaving point after the -delimiter you typed. +Whenever you insert an opening delimiter, the matching closing delimiter +is automatically inserted as well, leaving point between the two. +However, if you insert a closing delimiter where one already exists +(probably a mistake, since typing the opening delimiter inserted the +closing one for you), Emacs simply moves point to after the closing +delimiter, skipping the insertion. If the region is active +(@pxref{Mark}), insertion of a delimiter operates on the region: the +characters in the region are enclosed in a pair of matching delimiters, +leaving point after the delimiter you typed. If you provide a prefix +argument when inserting a delimiter, the numeric value of that prefix +argument specifies the number of pairs to insert. These variables control additional features of Electric Pair mode: commit 4b7816fc804813287e75544f8d016be6eca08873 Author: Po Lu Date: Thu Apr 24 09:04:33 2025 +0800 ; * src/w32dwrite.c: Minor coding style adjustments. diff --git a/src/w32dwrite.c b/src/w32dwrite.c index 08ccf3c82cc..97bac632ed7 100644 --- a/src/w32dwrite.c +++ b/src/w32dwrite.c @@ -525,13 +525,13 @@ typedef struct ID2D1SimplifiedGeometrySinkVtbl { ULONG (STDMETHODCALLTYPE *AddRef) (ID2D1SimplifiedGeometrySink *This); ULONG (STDMETHODCALLTYPE *Release) (ID2D1SimplifiedGeometrySink *This); - VOID (STDMETHODCALLTYPE *SetFillMode)(ID2D1SimplifiedGeometrySink *This, D2D1_FILL_MODE fillMode); - VOID (STDMETHODCALLTYPE *SetSegmentFlags)(ID2D1SimplifiedGeometrySink *This, D2D1_PATH_SEGMENT vertexFlags); - VOID (STDMETHODCALLTYPE *BeginFigure)(ID2D1SimplifiedGeometrySink *This, D2D1_POINT_2F startPoint, D2D1_FIGURE_BEGIN figureBegin); - VOID (STDMETHODCALLTYPE *AddLines)(ID2D1SimplifiedGeometrySink *This, const D2D1_POINT_2F *points, UINT pointsCount); - VOID (STDMETHODCALLTYPE *AddBeziers)(ID2D1SimplifiedGeometrySink *This, const D2D1_BEZIER_SEGMENT *beziers, UINT beziersCount); - VOID (STDMETHODCALLTYPE *EndFigure)(ID2D1SimplifiedGeometrySink *This, D2D1_FIGURE_END figureEnd); - HRESULT (STDMETHODCALLTYPE *Close)(ID2D1SimplifiedGeometrySink *This); + VOID (STDMETHODCALLTYPE *SetFillMode) (ID2D1SimplifiedGeometrySink *This, D2D1_FILL_MODE fillMode); + VOID (STDMETHODCALLTYPE *SetSegmentFlags) (ID2D1SimplifiedGeometrySink *This, D2D1_PATH_SEGMENT vertexFlags); + VOID (STDMETHODCALLTYPE *BeginFigure) (ID2D1SimplifiedGeometrySink *This, D2D1_POINT_2F startPoint, D2D1_FIGURE_BEGIN figureBegin); + VOID (STDMETHODCALLTYPE *AddLines) (ID2D1SimplifiedGeometrySink *This, const D2D1_POINT_2F *points, UINT pointsCount); + VOID (STDMETHODCALLTYPE *AddBeziers) (ID2D1SimplifiedGeometrySink *This, const D2D1_BEZIER_SEGMENT *beziers, UINT beziersCount); + VOID (STDMETHODCALLTYPE *EndFigure) (ID2D1SimplifiedGeometrySink *This, D2D1_FIGURE_END figureEnd); + HRESULT (STDMETHODCALLTYPE *Close) (ID2D1SimplifiedGeometrySink *This); END_INTERFACE } ID2D1SimplifiedGeometrySinkVtbl; @@ -873,8 +873,8 @@ text_extents_internal (IDWriteFontFace *dwrite_font_face, dwrite_geometry_sink.max_y = 0; } - metrics->ascent = (int)round (-dwrite_geometry_sink.min_y); - metrics->descent = (int)round (dwrite_geometry_sink.max_y); + metrics->ascent = (int) round (-dwrite_geometry_sink.min_y); + metrics->descent = (int) round (dwrite_geometry_sink.max_y); } SAFE_FREE (); @@ -1107,8 +1107,8 @@ w32_initialize_direct_write (void) #else dwrite_geometry_sink_vtbl.AddRef = (void *) geometry_sink_AddRef; dwrite_geometry_sink_vtbl.Release = (void *) geometry_sink_Release; - dwrite_geometry_sink_vtbl.QueryInterface = (void *) - geometry_sink_QueryInterface; + dwrite_geometry_sink_vtbl.QueryInterface + = (void *) geometry_sink_QueryInterface; #endif dwrite_geometry_sink_vtbl.AddBeziers = geometry_sink_AddBeziers; commit 261a965ff1a423c9dc0ee7c89974e4fc3c16b863 Author: Juri Linkov Date: Wed Apr 23 20:17:46 2025 +0300 Add the keyword ':copy-queries' to 'treesit-language-source-alist'. * lisp/treesit-x.el (define-treesit-generic-mode): Add keyword ':copy-queries t' to the end of 'source'. * lisp/treesit.el (treesit-language-source-alist): Document the keyword ':copy-queries'. (treesit--install-language-grammar-1): Add &rest args. Process the keyword args. Call 'treesit--copy-queries' when :copy-queries is non-nil. (treesit--copy-queries): Add arg 'source-dir'. Copy queries from source-dir as well. Copy only the file "highlights.scm". diff --git a/lisp/treesit-x.el b/lisp/treesit-x.el index 1de4b9765e8..b0e3863c034 100644 --- a/lisp/treesit-x.el +++ b/lisp/treesit-x.el @@ -110,7 +110,7 @@ of `define-treesit-generic-mode'. (_ (pop body)))) (when (stringp source) - (setq source (list 'quote (ensure-list source)))) + (setq source (list 'quote (list source nil nil nil nil nil :copy-queries t)))) (when (stringp auto-mode) (setq auto-mode (list 'quote (ensure-list auto-mode)))) diff --git a/lisp/treesit.el b/lisp/treesit.el index bf5c1ed5f6c..2794fdfe91f 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -4962,7 +4962,7 @@ window." The value should be an alist where each element has the form - (LANG . (URL REVISION SOURCE-DIR CC C++ COMMIT)) + (LANG . (URL REVISION SOURCE-DIR CC C++ COMMIT [KEYWORD VALUE]...)) Only LANG and URL are mandatory. LANG is the language symbol. URL is the URL of the grammar's Git repository or a directory @@ -4977,7 +4977,13 @@ SOURCE-DIR is the relative subdirectory in the repository in which the grammar's parser.c file resides, defaulting to \"src\". CC and C++ are C and C++ compilers, defaulting to \"cc\" and -\"c++\", respectively.") +\"c++\", respectively. + +The currently supported keywords: + +`:copy-queries' when non-nil specifies whether to copy the files +in the \"queries\" directory from the source directory to the +installation directory.") (defun treesit--install-language-grammar-build-recipe (lang) "Interactively produce a download/build recipe for LANG and return it. @@ -5161,7 +5167,7 @@ clone if `treesit--install-language-grammar-blobless' is t." (apply #'treesit--call-process-signal args))) (defun treesit--install-language-grammar-1 - (out-dir lang url &optional revision source-dir cc c++ commit) + (out-dir lang url &optional revision source-dir cc c++ commit &rest args) "Compile and install a tree-sitter language grammar library. OUT-DIR is the directory to put the compiled library file. If it @@ -5183,7 +5189,14 @@ If anything goes wrong, this function signals an `treesit-error'." (workdir (if url-is-dir maybe-repo-dir (expand-file-name "repo"))) - version) + copy-queries version) + + ;; Process the keyword args. + (while (keywordp (car args)) + (pcase (pop args) + (:copy-queries (setq copy-queries (pop args))) + (_ (pop args)))) + (unwind-protect (with-temp-buffer (if url-is-dir @@ -5194,7 +5207,8 @@ If anything goes wrong, this function signals an `treesit-error'." (treesit--git-checkout-branch workdir commit)) (setq version (treesit--language-git-revision workdir)) (treesit--build-grammar workdir out-dir lang source-dir cc c++) - (treesit--copy-queries workdir out-dir lang)) + (when copy-queries + (treesit--copy-queries workdir out-dir lang source-dir))) ;; Remove workdir if it's not a repo owned by user and we ;; managed to create it in the first place. (when (and (not url-is-dir) (file-exists-p workdir)) @@ -5273,14 +5287,18 @@ If anything goes wrong, this function signals an `treesit-error'." (ignore-errors (delete-file old-fname))) (message "Library installed to %s/%s" out-dir lib-name)))) -(defun treesit--copy-queries (workdir out-dir lang) - "Copy the LANG \"queries\" directory from WORKDIR to OUT-DIR." - (let* ((query-dir (expand-file-name "queries" workdir)) +(defun treesit--copy-queries (workdir out-dir lang source-dir) + "Copy files in LANG \"queries\" directory from WORKDIR to OUT-DIR. +The copied query files are queries/highlights.scm." + (let* ((query-dir (expand-file-name + (or (and source-dir (format "%s/../queries" source-dir)) + "queries") + workdir)) (dest-dir (expand-file-name (format "queries/%s" lang) out-dir))) (when (file-directory-p query-dir) (unless (file-directory-p dest-dir) (make-directory dest-dir t)) - (dolist (file (directory-files query-dir t "\\.scm\\'" t)) + (dolist (file (directory-files query-dir t "highlights\\.scm\\'" t)) (copy-file file (expand-file-name (file-name-nondirectory file) dest-dir) t))))) (defcustom treesit-auto-install-grammar 'ask commit d3f1f4923f73db617a69ac5d26d08809f814a811 Author: Eli Zaretskii Date: Wed Apr 23 17:29:20 2025 +0300 ; * src/w32dwrite.c (text_extents_internal): Fix typos in comments. diff --git a/src/w32dwrite.c b/src/w32dwrite.c index 46f11f06d9f..08ccf3c82cc 100644 --- a/src/w32dwrite.c +++ b/src/w32dwrite.c @@ -768,8 +768,8 @@ convert_metrics_sz (int sz, float font_size, int units_per_em) } -/* It the caller does not need ascent/descent information, it should pass - need_ascent_descent = false. This is used to avoid the overhead of +/* If the caller does not need ascent/descent information, it should pass + NEED_ASCENT_DESCENT = false. This is used to avoid the overhead of calling GetGlyphRunOutline. */ static bool commit 05480592898a2a33e7e683280456ada0d663bfd4 Author: Cecilio Pardo Date: Sat Apr 19 22:46:38 2025 +0200 w32: change the way text is measured when using DirectWrite Now the glyph outline is inspected directly to get its real size, as the direct measuring functions give generic values for some fonts. * src/w32dwrite.c (data structures): Added data structures from header files that are not present in the 32bit MinGW build environment. (text_extents_internal): Call GetGlyphRunOutline to get exact glyph vertical bounds. Add new parameter to make this optional if case that information is not required. (w32_dwrite_text_extents, w32_initialize_direct_write) (w32_dwrite_draw): New parameter for 'text_extents_internal'. (Bug#77171) diff --git a/src/w32dwrite.c b/src/w32dwrite.c index 10af8545a11..46f11f06d9f 100644 --- a/src/w32dwrite.c +++ b/src/w32dwrite.c @@ -115,6 +115,42 @@ typedef struct DWRITE_GLYPH_METRICS { INT32 verticalOriginY; } DWRITE_GLYPH_METRICS; +typedef struct D2D1_POINT_2F { + float x; + float y; +} D2D1_POINT_2F; + +typedef struct D2D1_BEZIER_SEGMENT { + D2D1_POINT_2F point1; + D2D1_POINT_2F point2; + D2D1_POINT_2F point3; +} D2D1_BEZIER_SEGMENT; + +typedef enum D2D1_FILL_MODE { + D2D1_FILL_MODE_ALTERNATE = 0, + D2D1_FILL_MODE_WINDING = 1, + D2D1_FILL_MODE_FORCE_DWORD = 0xffffffff +} D2D1_FILL_MODE; + +typedef enum D2D1_PATH_SEGMENT { + D2D1_PATH_SEGMENT_NONE = 0x00000000, + D2D1_PATH_SEGMENT_FORCE_UNSTROKED = 0x00000001, + D2D1_PATH_SEGMENT_FORCE_ROUND_LINE_JOIN = 0x00000002, + D2D1_PATH_SEGMENT_FORCE_DWORD = 0xffffffff +} D2D1_PATH_SEGMENT; + +typedef enum D2D1_FIGURE_BEGIN { + D2D1_FIGURE_BEGIN_FILLED = 0, + D2D1_FIGURE_BEGIN_HOLLOW = 1, + D2D1_FIGURE_BEGIN_FORCE_DWORD = 0xffffffff +} D2D1_FIGURE_BEGIN; + +typedef enum D2D1_FIGURE_END { + D2D1_FIGURE_END_OPEN = 0, + D2D1_FIGURE_END_CLOSED = 1, + D2D1_FIGURE_END_FORCE_DWORD = 0xffffffff +} D2D1_FIGURE_END; + typedef interface IDWriteRenderingParams IDWriteRenderingParams; typedef interface IDWriteFont IDWriteFont; typedef interface IDWriteGdiInterop IDWriteGdiInterop; @@ -124,6 +160,7 @@ typedef interface IDWriteFontFace IDWriteFontFace; typedef interface IDWriteBitmapRenderTarget IDWriteBitmapRenderTarget; typedef interface IDWriteBitmapRenderTarget1 IDWriteBitmapRenderTarget1; typedef interface IDWriteColorGlyphRunEnumerator IDWriteColorGlyphRunEnumerator; +typedef interface ID2D1SimplifiedGeometrySink ID2D1SimplifiedGeometrySink; DEFINE_GUID (IID_IDWriteBitmapRenderTarget1, 0x791e8298, 0x3ef3, 0x4230, 0x98, 0x80, 0xc9, 0xbd, 0xec, 0xc4, 0x20, 0x64); @@ -192,7 +229,16 @@ typedef struct IDWriteFontFaceVtbl { EMACS_DWRITE_UNUSED (TryGetFontTable); EMACS_DWRITE_UNUSED (ReleaseFontTable); - EMACS_DWRITE_UNUSED (GetGlyphRunOutline); + HRESULT (STDMETHODCALLTYPE *GetGlyphRunOutline) + (IDWriteFontFace *This, + FLOAT emSize, + const UINT16 *glyph_indices, + const DWRITE_GLYPH_OFFSET *glyph_offsets, + const FLOAT *glyph_advances, + UINT32 glyph_count, + WINBOOL is_sideways, + WINBOOL is_right_to_left, + ID2D1SimplifiedGeometrySink *geometry_sink); EMACS_DWRITE_UNUSED (GetRecommendedRenderingMode); EMACS_DWRITE_UNUSED (GetGdiCompatibleMetrics); @@ -470,8 +516,34 @@ typedef struct IDWriteFactory2Vtbl { interface IDWriteFactory2 { CONST_VTBL IDWriteFactory2Vtbl *lpVtbl; }; + +typedef struct ID2D1SimplifiedGeometrySinkVtbl { + BEGIN_INTERFACE + + HRESULT (STDMETHODCALLTYPE *QueryInterface) + (ID2D1SimplifiedGeometrySink *This, REFIID riid, void **ppvObject); + ULONG (STDMETHODCALLTYPE *AddRef) (ID2D1SimplifiedGeometrySink *This); + ULONG (STDMETHODCALLTYPE *Release) (ID2D1SimplifiedGeometrySink *This); + + VOID (STDMETHODCALLTYPE *SetFillMode)(ID2D1SimplifiedGeometrySink *This, D2D1_FILL_MODE fillMode); + VOID (STDMETHODCALLTYPE *SetSegmentFlags)(ID2D1SimplifiedGeometrySink *This, D2D1_PATH_SEGMENT vertexFlags); + VOID (STDMETHODCALLTYPE *BeginFigure)(ID2D1SimplifiedGeometrySink *This, D2D1_POINT_2F startPoint, D2D1_FIGURE_BEGIN figureBegin); + VOID (STDMETHODCALLTYPE *AddLines)(ID2D1SimplifiedGeometrySink *This, const D2D1_POINT_2F *points, UINT pointsCount); + VOID (STDMETHODCALLTYPE *AddBeziers)(ID2D1SimplifiedGeometrySink *This, const D2D1_BEZIER_SEGMENT *beziers, UINT beziersCount); + VOID (STDMETHODCALLTYPE *EndFigure)(ID2D1SimplifiedGeometrySink *This, D2D1_FIGURE_END figureEnd); + HRESULT (STDMETHODCALLTYPE *Close)(ID2D1SimplifiedGeometrySink *This); + END_INTERFACE +} ID2D1SimplifiedGeometrySinkVtbl; + +interface ID2D1SimplifiedGeometrySink { + const ID2D1SimplifiedGeometrySinkVtbl *lpVtbl; +}; + +typedef ID2D1SimplifiedGeometrySink IDWriteGeometrySink; + #else /* MINGW_W64 */ # include +# include #endif /* User configurable variables. If they are smaller than 0, use @@ -498,12 +570,127 @@ release_com (IUnknown **i) #define RELEASE_COM(i) release_com ((IUnknown **) &i) +/* Implementation of IDWriteGeometrySink, used to the get bounding + vertical coordinates of glyphs (ascent/descent). The methods that + affect the bounding box are BeginFigure (which gives a start point), + AddBeziers and AddLines. + + Normal procedures to get text extents fail to give correct + ascent/descent metrics for individual glyphs, using a default value + for an entire font. That is not acceptable, specially for fonts like + "Sans Serif Collection", which include glyphs for many different + scripts and have a huge default value. + + Because of that, we need to use the GetGlyphRunOutline and examine + the glyph's geometry. +*/ + +struct geometry_sink +{ + IDWriteGeometrySink sink; + int empty; + float min_y, max_y; +}; + +static HRESULT STDMETHODCALLTYPE +geometry_sink_QueryInterface (IUnknown *This, REFIID ri, void **r) +{ + return E_NOINTERFACE; +} + +/* There is nothing to allocate of free heres, so we can safely skip ref counting. */ +static ULONG STDMETHODCALLTYPE +geometry_sink_AddRef (IUnknown *This) +{ + return 1; +} + +static ULONG STDMETHODCALLTYPE +geometry_sink_Release (IUnknown *This) +{ + return 1; +} + +static void STDMETHODCALLTYPE +geometry_sink_AddBeziers (IDWriteGeometrySink *This, + const D2D1_BEZIER_SEGMENT *beziers, UINT32 count) +{ + struct geometry_sink *sink = (struct geometry_sink *) This; + for (UINT32 i = 0; i < count; i++) + { + if (sink->min_y > beziers[i].point1.y) + sink->min_y = beziers[i].point1.y; + if (sink->max_y < beziers[i].point1.y) + sink->max_y = beziers[i].point1.y; + if (sink->min_y > beziers[i].point2.y) + sink->min_y = beziers[i].point2.y; + if (sink->max_y < beziers[i].point2.y) + sink->max_y = beziers[i].point2.y; + if (sink->min_y > beziers[i].point3.y) + sink->min_y = beziers[i].point3.y; + if (sink->max_y < beziers[i].point3.y) + sink->max_y = beziers[i].point3.y; + } +} + +static void STDMETHODCALLTYPE +geometry_sink_AddLines (IDWriteGeometrySink *This, + const D2D1_POINT_2F *points, UINT32 count) +{ + struct geometry_sink *sink = (struct geometry_sink *) This; + for (UINT32 i = 0; i < count; i++) + { + if (sink->min_y > points[i].y) + sink->min_y = points[i].y; + if (sink->max_y < points[i].y) + sink->max_y = points[i].y; + } +} + +static void STDMETHODCALLTYPE +geometry_sink_BeginFigure (IDWriteGeometrySink *This, + D2D1_POINT_2F startPoint, + D2D1_FIGURE_BEGIN figureBegin) +{ + struct geometry_sink *sink = (struct geometry_sink *) This; + if (sink->min_y > startPoint.y) + sink->min_y = startPoint.y; + if (sink->max_y < startPoint.y) + sink->max_y = startPoint.y; + sink->empty = 0; +} + +static void STDMETHODCALLTYPE +geometry_sink_EndFigure (IDWriteGeometrySink *This, D2D1_FIGURE_END figureEnd) +{ +} + +static HRESULT STDMETHODCALLTYPE +geometry_sink_Close (IDWriteGeometrySink *This) +{ + return S_OK; +} + +static void STDMETHODCALLTYPE +geometry_sink_SetFillMode (IDWriteGeometrySink *This, + D2D1_FILL_MODE fillMode) +{ +} + +static void STDMETHODCALLTYPE +geometry_sink_SetSegmentFlags (IDWriteGeometrySink *This, + D2D1_PATH_SEGMENT vertexFlags) +{ +} + /* Global variables for DirectWrite. */ static bool direct_write_available = false; static IDWriteFactory *dwrite_factory = NULL; static IDWriteFactory2 *dwrite_factory2 = NULL; static IDWriteGdiInterop *gdi_interop = NULL; static IDWriteRenderingParams *rendering_params = NULL; +static struct geometry_sink dwrite_geometry_sink; +static ID2D1SimplifiedGeometrySinkVtbl dwrite_geometry_sink_vtbl; static bool verify_hr (HRESULT hr, const char *msg) @@ -580,9 +767,14 @@ convert_metrics_sz (int sz, float font_size, int units_per_em) return (float) sz * font_size / units_per_em; } -/* Does not fill in the ascent and descent fields of metrics. */ + +/* It the caller does not need ascent/descent information, it should pass + need_ascent_descent = false. This is used to avoid the overhead of + calling GetGlyphRunOutline. */ + static bool text_extents_internal (IDWriteFontFace *dwrite_font_face, + bool need_ascent_descent, float font_size, const unsigned *code, int nglyphs, struct font_metrics *metrics) { @@ -652,6 +844,39 @@ text_extents_internal (IDWriteFontFace *dwrite_font_face, metrics->rbearing = rbearing; } metrics->width = round (width); + + if (need_ascent_descent) + { + dwrite_geometry_sink.min_y = FLT_MAX; + dwrite_geometry_sink.max_y = -FLT_MAX; + dwrite_geometry_sink.empty = 1; + + hr = dwrite_font_face->lpVtbl->GetGlyphRunOutline (dwrite_font_face, + font_size, + indices, + NULL, + NULL, + nglyphs, + FALSE, + FALSE, + &dwrite_geometry_sink.sink); + + if (!verify_hr (hr, "Failed to GetGlyhRunOutline")) + { + SAFE_FREE (); + return false; + } + + if (dwrite_geometry_sink.empty) + { + dwrite_geometry_sink.min_y = 0; + dwrite_geometry_sink.max_y = 0; + } + + metrics->ascent = (int)round (-dwrite_geometry_sink.min_y); + metrics->descent = (int)round (dwrite_geometry_sink.max_y); + } + SAFE_FREE (); return true; } @@ -697,7 +922,8 @@ w32_dwrite_text_extents (struct font *font, const unsigned *code, int nglyphs, metrics->ascent = font->ascent; metrics->descent = font->descent; - return text_extents_internal (dwrite_font_face, font_size, code, nglyphs, + return text_extents_internal (dwrite_font_face, true, + font_size, code, nglyphs, metrics); } @@ -871,8 +1097,29 @@ w32_initialize_direct_write (void) return; } - direct_write_available = true; + dwrite_geometry_sink.sink.lpVtbl = &dwrite_geometry_sink_vtbl; +#ifdef MINGW_W64 + dwrite_geometry_sink_vtbl.Base.AddRef = geometry_sink_AddRef; + dwrite_geometry_sink_vtbl.Base.Release = geometry_sink_Release; + dwrite_geometry_sink_vtbl.Base.QueryInterface = + geometry_sink_QueryInterface; +#else + dwrite_geometry_sink_vtbl.AddRef = (void *) geometry_sink_AddRef; + dwrite_geometry_sink_vtbl.Release = (void *) geometry_sink_Release; + dwrite_geometry_sink_vtbl.QueryInterface = (void *) + geometry_sink_QueryInterface; +#endif + + dwrite_geometry_sink_vtbl.AddBeziers = geometry_sink_AddBeziers; + dwrite_geometry_sink_vtbl.AddLines = geometry_sink_AddLines; + dwrite_geometry_sink_vtbl.BeginFigure = geometry_sink_BeginFigure; + dwrite_geometry_sink_vtbl.EndFigure = geometry_sink_EndFigure; + dwrite_geometry_sink_vtbl.Close = geometry_sink_Close; + dwrite_geometry_sink_vtbl.SetFillMode = geometry_sink_SetFillMode; + dwrite_geometry_sink_vtbl.SetSegmentFlags = geometry_sink_SetSegmentFlags; + + direct_write_available = true; w32_inhibit_dwrite = false; } @@ -896,7 +1143,7 @@ w32_dwrite_draw (HDC hdc, int x, int y, unsigned *glyphs, int len, return false; struct font_metrics metrics; - if (!text_extents_internal (dwrite_font_face, font_size, glyphs, len, + if (!text_extents_internal (dwrite_font_face, false, font_size, glyphs, len, &metrics)) { uniscribe_font->dwrite_skip_font = true; @@ -935,7 +1182,7 @@ w32_dwrite_draw (HDC hdc, int x, int y, unsigned *glyphs, int len, for (int i = 0; i < len; i++) { - if (!text_extents_internal (dwrite_font_face, font_size, glyphs + i, 1, + if (!text_extents_internal (dwrite_font_face, false, font_size, glyphs + i, 1, &metrics)) { uniscribe_font->dwrite_skip_font = true; commit 29142dab3169b650c87a08b1313757a899f321cc Author: Eli Zaretskii Date: Wed Apr 23 16:18:26 2025 +0300 ; * doc/misc/efaq-w32.texi (MinGW-w64): Fix punctuation (bug#78005). diff --git a/doc/misc/efaq-w32.texi b/doc/misc/efaq-w32.texi index 4e409261cd9..766acb0f3ca 100644 --- a/doc/misc/efaq-w32.texi +++ b/doc/misc/efaq-w32.texi @@ -2157,7 +2157,7 @@ MSYS2 is an independent rewrite of MSYS, based on modern Cygwin and MinGW-w64 with the aim of better interoperability with native Windows software. It plays the same role MSYS does in MinGW. Being a distribution, MSYS2 provides tools to build software as well as more -than 2.600 precompiled packages ready for use. +than 2600 precompiled packages ready for use. @node EZWinPorts @section EZWinPorts commit 01f97fabfe1bde122cc64590523cf5499b1b6d8d Author: João Távora Date: Wed Apr 23 08:34:56 2025 +0100 Eglot: require bug-fixed Flymake 1.4.1 (bug#77856) * lisp/progmodes/eglot.el (Package-Requires) Require Flymake 1.4.1. diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index 4121accedeb..c3409f138e7 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -7,7 +7,7 @@ ;; Maintainer: João Távora ;; URL: https://github.com/joaotavora/eglot ;; Keywords: convenience, languages -;; Package-Requires: ((emacs "26.3") (eldoc "1.14.0") (external-completion "0.1") (flymake "1.4.0") (jsonrpc "1.0.24") (project "0.9.8") (seq "2.23") (xref "1.6.2")) +;; Package-Requires: ((emacs "26.3") (eldoc "1.14.0") (external-completion "0.1") (flymake "1.4.1") (jsonrpc "1.0.24") (project "0.9.8") (seq "2.23") (xref "1.6.2")) ;; This is a GNU ELPA :core package. Avoid adding functionality ;; that is not available in the version of Emacs recorded above or any commit 79cef45a1204a2a9e4999ed6dd0db68db6ab7c41 Author: João Távora Date: Wed Apr 23 08:33:43 2025 +0100 Flymake: more concise flymake--tabulated-list-format-base * lisp/progmodes/flymake.el (flymake--tabulated-list-format-base): Tweak diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index 26a7b67fbbc..974ac664822 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -1956,16 +1956,16 @@ POS can be a buffer position or a button" (defvar flymake--tabulated-list-format-base `[("File" 15) - ("Line" 5 ,(lambda (l1 l2) + ("Line" 4 ,(lambda (l1 l2) (< (plist-get (car l1) :line) (plist-get (car l2) :line))) :right-align t) ("Col" 3 nil :right-align t) - ("Type" 8 ,(lambda (l1 l2) + ("Type" 4 ,(lambda (l1 l2) (< (plist-get (car l1) :severity) (plist-get (car l2) :severity)))) - ("Origin" 8 t) - ("Code" 8 t) + ("Origin" 6 t) + ("Code" 4 t) ("Message" 0 t)]) (defun flymake--tabulated-setup-1 (diags project-root) commit a25fc9a518dc1c4bf1ef86bb949ed2f3c995adea Author: João Távora Date: Wed Apr 23 08:32:51 2025 +0100 Flymake: fix flymake-make-diagnostic for numeric code (bug#77856) * lisp/progmodes/flymake.el (flymake-make-diagnostic): Tighten up type requirements. (Version): Bump to 1.4.1 diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index 8d63b23f2b8..26a7b67fbbc 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -4,7 +4,7 @@ ;; Author: Pavel Kobyakov ;; Maintainer: Spencer Baugh -;; Version: 1.4.0 +;; Version: 1.4.1 ;; Keywords: c languages tools ;; Package-Requires: ((emacs "26.1") (eldoc "1.14.0") (project "0.7.1")) @@ -391,8 +391,9 @@ TYPE is a diagnostic symbol (see Info Node `(Flymake)Flymake error types') INFO is a description of the problem detected. It may be a string, or -list of three strings (ORIGIN CODE MESSAGE) appropriately categorizing -and describing the diagnostic. +list (ORIGIN CODE MESSAGE) appropriately categorizing and describing the +diagnostic. ORIGIN may be a string or nil. CODE maybe be a string, a +number or nil. MESSAGE must be a string. DATA is any object that the caller wishes to attach to the created diagnostic for later retrieval with `flymake-diagnostic-data'. @@ -409,8 +410,10 @@ in the `flymake-overlay-control' property of the diagnostic's type symbol." (when (stringp locus) (setq locus (expand-file-name locus))) - (when (stringp info) - (setq info (list nil nil info))) + (cond ((stringp info) + (setq info (list nil nil info))) + ((numberp (cadr info)) + (setf (cadr info) (number-to-string (cadr info))))) (flymake--diag-make :locus locus :beg beg :end end :type type :origin (car info) :code (cadr info) :message (caddr info) :data data commit 89b7e726f12f34c94c5f05f8972fa8a6a3ea56b5 Author: Juri Linkov Date: Wed Apr 23 09:51:34 2025 +0300 * lisp/desktop.el: Fix the recent cleanup. (desktop-read): Use 'file-name-directory' on the file name returned by 'locate-file'. diff --git a/lisp/desktop.el b/lisp/desktop.el index a0492770517..b82a9dc9626 100644 --- a/lisp/desktop.el +++ b/lisp/desktop.el @@ -1313,7 +1313,8 @@ It returns t if a desktop file was loaded, nil otherwise. ;; Else, with a prefix arg, ask for a directory name. (and ask (read-directory-name "Directory for desktop file: " nil nil t)) ;; Otherwise search desktop file in desktop-path. - (locate-file desktop-base-file-name desktop-path) + (when-let* ((file (locate-file desktop-base-file-name desktop-path))) + (file-name-directory file)) ;; If not found and `desktop-path' is non-nil, use its first element. (car desktop-path) ;; Default: .emacs.d. commit add8bf000aee39e40feacff7e0df7248fa4ef9c5 Author: Juri Linkov Date: Tue Apr 22 21:01:28 2025 +0300 Replace some 'treesit-query-compile' with 'treesit-query-valid-p'. * admin/tree-sitter/treesit-admin.el (treesit-admin--verify-major-mode-queries) (treesit-admin--validate-mode-lang): * lisp/progmodes/csharp-mode.el (csharp-ts-mode--test-this-expression) (csharp-ts-mode--test-interpolated-string-text) (csharp-ts-mode--test-string-content) (csharp-ts-mode--test-type-constraint) (csharp-ts-mode--test-type-of-expression) (csharp-ts-mode--test-typeof-expression) (csharp-ts-mode--test-name-equals) (csharp-ts-mode--test-if-directive) (csharp-ts-mode--test-method-declaration-type-field): * lisp/progmodes/php-ts-mode.el (php-ts-mode--test-namespace-name-as-prefix-p) (php-ts-mode--test-namespace-aliasing-clause-p) (php-ts-mode--test-namespace-use-group-clause-p) (php-ts-mode--test-visibility-modifier-operation-clause-p) (php-ts-mode--test-property-hook-clause-p): * lisp/progmodes/typescript-ts-mode.el (tsx-ts-mode--font-lock-compatibility-bb1f97b): Use the newer equivalent 'treesit-query-valid-p' instead of 'treesit-query-compile' with 'ignore-errors'. diff --git a/admin/tree-sitter/treesit-admin.el b/admin/tree-sitter/treesit-admin.el index ef6d256a538..f41c4592039 100644 --- a/admin/tree-sitter/treesit-admin.el +++ b/admin/tree-sitter/treesit-admin.el @@ -156,9 +156,7 @@ queries that has problems with latest grammar." (unless (memq language (alist-get mode mode-language-alist)) (push language (alist-get mode mode-language-alist))) ;; Validate query. - (when (not (ignore-errors - (treesit-query-compile language query t) - t)) + (unless (treesit-query-valid-p language query) (push (list mode language feature) invalid-feature-list) (setq all-queries-valid nil)))) (when all-queries-valid @@ -261,9 +259,7 @@ Return non-nil if all queries are valid, nil otherwise." (language (treesit-query-language query))) ;; Validate query. (when (and (eq lang language) - (not (ignore-errors - (treesit-query-compile language query t) - t))) + (not (treesit-query-valid-p language query))) (setq all-queries-valid nil)))) all-queries-valid)) diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el index 8d4b6f587d5..070984f4aac 100644 --- a/lisp/progmodes/c-ts-mode.el +++ b/lisp/progmodes/c-ts-mode.el @@ -674,9 +674,7 @@ MODE should be either `c' or `cpp'." (mapcan (lambda (entry) (let ((keywords (cdr entry))) - (if (ignore-errors - (treesit-query-compile 'c `([,@keywords] @cap) t) - t) + (if (treesit-query-valid-p 'c `([,@keywords] @cap)) (copy-sequence keywords) nil))) c-ts-mode--optional-c-keywords) diff --git a/lisp/progmodes/csharp-mode.el b/lisp/progmodes/csharp-mode.el index fe2fbb0d1e5..a421d616d9b 100644 --- a/lisp/progmodes/csharp-mode.el +++ b/lisp/progmodes/csharp-mode.el @@ -733,57 +733,39 @@ compilation and evaluation time conflicts." (defun csharp-ts-mode--test-this-expression () "Return non-nil if (this_expression) is named in csharp grammar." - (ignore-errors - (treesit-query-compile 'c-sharp "(this_expression)" t) - t)) + (treesit-query-valid-p 'c-sharp "(this_expression)")) (defun csharp-ts-mode--test-interpolated-string-text () "Return non-nil if (interpolated_string_text) is in the grammar." - (ignore-errors - (treesit-query-compile 'c-sharp "(interpolated_string_text)" t) - t)) + (treesit-query-valid-p 'c-sharp "(interpolated_string_text)")) (defun csharp-ts-mode--test-string-content () "Return non-nil if (interpolated_string_text) is in the grammar." - (ignore-errors - (treesit-query-compile 'c-sharp "(string_content)" t) - t)) + (treesit-query-valid-p 'c-sharp "(string_content)")) (defun csharp-ts-mode--test-type-constraint () "Return non-nil if (type_constraint) is in the grammar." - (ignore-errors - (treesit-query-compile 'c-sharp "(type_constraint)" t) - t)) + (treesit-query-valid-p 'c-sharp "(type_constraint)")) (defun csharp-ts-mode--test-type-of-expression () "Return non-nil if (type_of_expression) is in the grammar." - (ignore-errors - (treesit-query-compile 'c-sharp "(type_of_expression)" t) - t)) + (treesit-query-valid-p 'c-sharp "(type_of_expression)")) (defun csharp-ts-mode--test-typeof-expression () "Return non-nil if (type_of_expression) is in the grammar." - (ignore-errors - (treesit-query-compile 'c-sharp "(typeof_expression)" t) - t)) + (treesit-query-valid-p 'c-sharp "(typeof_expression)")) (defun csharp-ts-mode--test-name-equals () "Return non-nil if (name_equals) is in the grammar." - (ignore-errors - (treesit-query-compile 'c-sharp "(name_equals)" t) - t)) + (treesit-query-valid-p 'c-sharp "(name_equals)")) (defun csharp-ts-mode--test-if-directive () "Return non-nil if (if_directive) is in the grammar." - (ignore-errors - (treesit-query-compile 'c-sharp "(if_directive)" t) - t)) + (treesit-query-valid-p 'c-sharp "(if_directive)")) (defun csharp-ts-mode--test-method-declaration-type-field () "Return non-nil if (method_declaration) has a type field." - (ignore-errors - (treesit-query-compile 'c-sharp "(method_declaration type: (_))" t) - t)) + (treesit-query-valid-p 'c-sharp "(method_declaration type: (_))")) (defvar csharp-ts-mode--type-field (if (csharp-ts-mode--test-method-declaration-type-field) diff --git a/lisp/progmodes/php-ts-mode.el b/lisp/progmodes/php-ts-mode.el index b3e9ad51eaa..5e3f30d94c9 100644 --- a/lisp/progmodes/php-ts-mode.el +++ b/lisp/progmodes/php-ts-mode.el @@ -840,28 +840,23 @@ characters of the current line." (defun php-ts-mode--test-namespace-name-as-prefix-p () "Return t if namespace_name_as_prefix is a named node, nil otherwise." - (ignore-errors - (progn (treesit-query-compile 'php "(namespace_name_as_prefix)" t) t))) + (treesit-query-valid-p 'php "(namespace_name_as_prefix)")) (defun php-ts-mode--test-namespace-aliasing-clause-p () "Return t if namespace_aliasing_clause is a named node, nil otherwise." - (ignore-errors - (progn (treesit-query-compile 'php "(namespace_aliasing_clause)" t) t))) + (treesit-query-valid-p 'php "(namespace_aliasing_clause)")) (defun php-ts-mode--test-namespace-use-group-clause-p () "Return t if namespace_use_group_clause is a named node, nil otherwise." - (ignore-errors - (progn (treesit-query-compile 'php "(namespace_use_group_clause)" t) t))) + (treesit-query-valid-p 'php "(namespace_use_group_clause)")) (defun php-ts-mode--test-visibility-modifier-operation-clause-p () "Return t if (visibility_modifier (operation)) is defined, nil otherwise." - (ignore-errors - (progn (treesit-query-compile 'php "(visibility_modifier (operation))" t) t))) + (treesit-query-valid-p 'php "(visibility_modifier (operation))")) (defun php-ts-mode--test-property-hook-clause-p () "Return t if property_hook is a named node, nil otherwise." - (ignore-errors - (progn (treesit-query-compile 'php "(property_hook)" t) t))) + (treesit-query-valid-p 'php "(property_hook)")) (defun php-ts-mode--font-lock-settings () "Tree-sitter font-lock settings." diff --git a/lisp/progmodes/typescript-ts-mode.el b/lisp/progmodes/typescript-ts-mode.el index 1b971fa80fd..50ebefa7871 100644 --- a/lisp/progmodes/typescript-ts-mode.el +++ b/lisp/progmodes/typescript-ts-mode.el @@ -246,12 +246,10 @@ Argument LANGUAGE is either `typescript' or `tsx'." (jsx_attribute (property_identifier) @typescript-ts-jsx-attribute-face)))) - (or (ignore-errors - (treesit-query-compile language queries-a t) - queries-a) - (ignore-errors - (treesit-query-compile language queries-b t) - queries-b) + (or (and (treesit-query-valid-p language queries-a) + queries-a) + (and (treesit-query-valid-p language queries-b) + queries-b) ;; Return a dummy query that doesn't do anything, if neither ;; query works. '("," @_ignore)))) commit 573a2c09b991df5442ab3b9984c2885011153333 Author: Juri Linkov Date: Tue Apr 22 20:35:53 2025 +0300 * lisp/treesit.el (treesit-show-paren-data--categorize): Add docstring. (bug#77906) diff --git a/lisp/treesit.el b/lisp/treesit.el index 6075e28e5cb..bf5c1ed5f6c 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -4207,6 +4207,9 @@ Expected to be called after each text change." ;;; Show paren mode (defun treesit-show-paren-data--categorize (pos &optional end-p) + "Return a list suitable for `show-paren-data-function' (which see). +If the optional argument END-P is non-nil, interpret the position POS +as belonging to the node that ends before POS (by subtracting 1 from POS)." (let* ((pred 'list) (parent (when (treesit-thing-defined-p pred (treesit-language-at (if end-p (1- pos) pos))) commit a7f35dc1770266ec7661c5af58611540489c5256 Author: Juri Linkov Date: Tue Apr 22 19:53:32 2025 +0300 * lisp/treesit-x.el: Quote :parent in define-treesit-generic-mode. (define-treesit-generic-mode): Support quoted symbol for parent. (liquid-generic-ts-mode): Quote :parent like quoted all other properties. diff --git a/lisp/treesit-x.el b/lisp/treesit-x.el index 662c5c7ff3b..1de4b9765e8 100644 --- a/lisp/treesit-x.el +++ b/lisp/treesit-x.el @@ -123,7 +123,8 @@ of `define-treesit-generic-mode'. (add-to-list 'auto-mode-alist (cons re ',mode))) (define-derived-mode ,mode - ,(or parent 'fundamental-mode) + ,(or (if (eq (car-safe parent) 'quote) (cadr parent) parent) + 'fundamental-mode) ,(or name pretty-name) ,(or docstring (concat (or name pretty-name) " mode.\n" @@ -214,7 +215,7 @@ of `define-treesit-generic-mode'. :source "https://github.com/hankthetank27/tree-sitter-liquid" :auto-mode "\\.liquid\\'" :name "Liquid" - :parent mhtml-ts-mode + :parent 'mhtml-ts-mode (setq-local treesit-range-settings (append treesit-range-settings commit 426c98bd96f6ab79f6f72f89cfde9759560ad64b Author: Juri Linkov Date: Tue Apr 22 19:48:30 2025 +0300 * lisp/treesit-x.el: Use 'treesit-ensure-installed'. (define-treesit-generic-mode): Append new item to 'treesit-language-source-alist' instead of prepending. (treesit-generic-mode-setup): Remove 'source' arg. Use 'treesit-ensure-installed'. (liquid-generic-ts-mode): Use 'treesit-ensure-installed'. (alpinejs-generic-ts-setup): Run setup hook. (treesit-generic-mode-font-lock-map): Add more mappings. diff --git a/lisp/treesit-x.el b/lisp/treesit-x.el index 5989bb89850..662c5c7ff3b 100644 --- a/lisp/treesit-x.el +++ b/lisp/treesit-x.el @@ -116,7 +116,7 @@ of `define-treesit-generic-mode'. `(progn ;; Add lang and source to source-alist. - (add-to-list 'treesit-language-source-alist (cons ,lang ,source)) + (add-to-list 'treesit-language-source-alist (cons ,lang ,source) t) ;; Add it to auto-mode-alist (dolist (re ,auto-mode) @@ -128,21 +128,14 @@ of `define-treesit-generic-mode'. ,(or docstring (concat (or name pretty-name) " mode.\n" "This a tree-sitter mode defined with `define-treesit-generic-mode'.")) - (treesit-generic-mode-setup ,lang ,source) + (treesit-generic-mode-setup ,lang) ,@body (treesit-major-mode-setup))))) ;;;###autoload -(defun treesit-generic-mode-setup (lang source) +(defun treesit-generic-mode-setup (lang) "Go into the treesit generic mode MODE." - (unless (treesit-ready-p lang t) - (when (y-or-n-p (format "Install grammar for %s?" lang)) - (apply - #'treesit--install-language-grammar-1 - (locate-user-emacs-file "tree-sitter") - lang source))) - - (when (treesit-ready-p lang) + (when (treesit-ensure-installed lang) (setq treesit-primary-parser (treesit-parser-create lang)) (when-let* ((query (treesit-generic-mode-font-lock-query lang))) @@ -164,17 +157,26 @@ of `define-treesit-generic-mode'. ("@boolean" . "@font-lock-constant-face") ("@comment" . "@font-lock-comment-face") ("@constant" . "@font-lock-constant-face") + ("@delimiter" . "@font-lock-delimiter-face") ("@error" . "@font-lock-warning-face") ("@escape" . "@font-lock-escape-face") + ("@function" . "@font-lock-function-name-face") + ("@function.call" . "@font-lock-function-call-face") ("@keyword" . "@font-lock-keyword-face") + ("@keyword.operator" . "@font-lock-operator-face") + ("@number" . "@font-lock-number-face") ("@operator" . "@font-lock-operator-face") - ("@property" . "@font-lock-property-use-face") + ("@property" . "@font-lock-property-name-face") ("@punctuation.bracket" . "@font-lock-bracket-face") ("@punctuation.delimiter" . "@font-lock-delimiter-face") ("@punctuation.special" . "@font-lock-misc-punctuation-face") + ("@string" . "@font-lock-string-face") ("@string.regexp" . "@font-lock-regexp-face") ("@string.special" . "@font-lock-string-face") - ("@string" . "@font-lock-string-face") + ("@tag.delimiter" . "@font-lock-delimiter-face") + ("@text.reference" . "@font-lock-doc-face") + ("@type" . "@font-lock-type-face") + ("@variable" . "@font-lock-variable-name-face") ("@variable.builtin" . "@font-lock-builtin-face") ("@variable.parameter" . "@font-lock-variable-name-face") ) @@ -241,7 +243,7 @@ of `define-treesit-generic-mode'. "for_loop_statement") eos))))) - (when (treesit-ready-p 'yaml t) + (when (treesit-ensure-installed 'yaml) (defvar yaml-ts-mode--font-lock-settings) (require 'yaml-ts-mode) (setq-local treesit-range-settings @@ -310,7 +312,9 @@ Intended to be used in combination with such major modes as (:match ,alpinejs-generic-ts-attr-regexp @_name) (quoted_attribute_value "\"" @font-lock-string-face)))))) - (treesit-major-mode-setup)) + (treesit-major-mode-setup) + + (run-mode-hooks 'alpinejs-generic-ts-setup-hook)) (provide 'treesit-x) commit 8fb45fcaedbe1b89bab54406c8739404d0ad35bc Author: Juri Linkov Date: Tue Apr 22 19:32:36 2025 +0300 Fix all issues for the case when tree-sitter is disabled. * lisp/treesit.el (treesit-declare-unavailable-functions): Declare 'treesit-language-abi-version' and 'treesit-library-abi-version'. * lisp/progmodes/elixir-ts-mode.el (elixir-ts--range-rules): * lisp/progmodes/heex-ts-mode.el (heex-ts--range-rules): * lisp/progmodes/rust-ts-mode.el (treesit-language-source-alist): Guard with 'treesit-available-p'. diff --git a/lisp/progmodes/elixir-ts-mode.el b/lisp/progmodes/elixir-ts-mode.el index f7d6932c7c2..52744f194a2 100644 --- a/lisp/progmodes/elixir-ts-mode.el +++ b/lisp/progmodes/elixir-ts-mode.el @@ -622,12 +622,13 @@ "`treesit-thing-settings' for Elixir.") (defvar elixir-ts--range-rules - (treesit-range-rules - :embed 'heex - :host 'elixir - '((sigil (sigil_name) @_name - (:match "^[HF]$" @_name) - (quoted_content) @heex)))) + (when (treesit-available-p) + (treesit-range-rules + :embed 'heex + :host 'elixir + '((sigil (sigil_name) @_name + (:match "^[HF]$" @_name) + (quoted_content) @heex))))) (defvar heex-ts--range-rules) (defvar heex-ts--thing-settings) diff --git a/lisp/progmodes/heex-ts-mode.el b/lisp/progmodes/heex-ts-mode.el index 2d6dce784bc..cf3fad4af10 100644 --- a/lisp/progmodes/heex-ts-mode.el +++ b/lisp/progmodes/heex-ts-mode.el @@ -173,18 +173,19 @@ Return nil if NODE is not a defun node or doesn't have a name." "`treesit-thing-settings' for HEEx.") (defvar heex-ts--range-rules - (treesit-range-rules - :embed 'elixir - :host 'heex - '((directive [(partial_expression_value) - (ending_expression_value)] - @cap)) - - :embed 'elixir - :host 'heex - :local t - '((directive (expression_value) @cap) - (expression (expression_value) @cap)))) + (when (treesit-available-p) + (treesit-range-rules + :embed 'elixir + :host 'heex + '((directive [(partial_expression_value) + (ending_expression_value)] + @cap)) + + :embed 'elixir + :host 'heex + :local t + '((directive (expression_value) @cap) + (expression (expression_value) @cap))))) (defvar elixir-ts--font-lock-settings) (defvar elixir-ts--font-lock-feature-list) diff --git a/lisp/progmodes/rust-ts-mode.el b/lisp/progmodes/rust-ts-mode.el index beb27504cc7..9d2450baa90 100644 --- a/lisp/progmodes/rust-ts-mode.el +++ b/lisp/progmodes/rust-ts-mode.el @@ -44,7 +44,8 @@ (add-to-list 'treesit-language-source-alist `(rust "https://github.com/tree-sitter/tree-sitter-rust" - ,(if (< (treesit-library-abi-version) 15) "v0.23.2" "v0.24.0")) + ,(when (treesit-available-p) + (if (< (treesit-library-abi-version) 15) "v0.23.2" "v0.24.0"))) t) (defcustom rust-ts-mode-indent-offset 4 diff --git a/lisp/treesit.el b/lisp/treesit.el index b9441618024..6075e28e5cb 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -70,6 +70,9 @@ in a Emacs not built with tree-sitter library." (declare-function treesit-language-available-p "treesit.c") (declare-function treesit-language-version "treesit.c") + (declare-function treesit-language-abi-version "treesit.c") + (declare-function treesit-library-abi-version "treesit.c") + (declare-function treesit-parser-p "treesit.c") (declare-function treesit-node-p "treesit.c") (declare-function treesit-compiled-query-p "treesit.c") commit 2bf3790f374e0a162e05a470940f57b43a244ad7 Author: Stefan Monnier Date: Tue Apr 22 11:52:15 2025 -0400 desktop.el: Janitorial cleanup * lisp/desktop.el: Remove redundant `:group` arguments. Prefer #' to quote function names. (desktop-var-serdes-funs): Improve docstring markup. (desktop-clear, desktop-create-buffer): Use lexical-binding. (desktop--v2s): Avoid (ab)use of ,@ which doesn't splice a list. (desktop-outvar): Strength-reduce `eval` => `symbol-value`. (desktop-create-buffer): Don't assume point-min==1. (desktop-buffer): Belatedly mark as obsolete. (desktop-read): Use `locate-file`. diff --git a/lisp/desktop.el b/lisp/desktop.el index b19889c5c42..a0492770517 100644 --- a/lisp/desktop.el +++ b/lisp/desktop.el @@ -174,7 +174,7 @@ to t, or add this line in your init file: (desktop-save-mode 1) When this mode is enabled, Emacs will save the desktop when it exits -(this may prompt you, see the option `desktop-save'). The next time +\(this may prompt you, see the option `desktop-save'). The next time Emacs starts, if this mode is active it will restore the desktop. To manually save the desktop at any time, use the command \\[desktop-save]. @@ -187,7 +187,6 @@ To see all the options you can set, browse the `desktop' customization group. For further details, see info node `(emacs)Saving Emacs Sessions'." :global t - :group 'desktop (if desktop-save-mode (desktop-auto-save-enable) (desktop-auto-save-disable))) @@ -217,7 +216,6 @@ determine where the desktop is saved." (const :tag "Ask if desktop file exists, else don't save" ask-if-exists) (const :tag "Save if desktop file exists, else don't" if-exists) (const :tag "Never save" nil)) - :group 'desktop :version "22.1") (defcustom desktop-auto-save-timeout auto-save-timeout @@ -234,7 +232,6 @@ Zero or nil means disable auto-saving due to idleness." (if (and (integerp value) (> value 0)) (desktop-auto-save-enable value) (desktop-auto-save-disable)))) - :group 'desktop :version "24.4") (defcustom desktop-load-locked-desktop 'ask @@ -260,27 +257,23 @@ case if you have remotely mounted (NFS) paths in (const :tag "Don't load" nil) (const :tag "Ask the user" ask) (const :tag "Load if no local process" check-pid)) - :group 'desktop :version "22.2") (defcustom desktop-base-file-name (convert-standard-filename ".emacs.desktop") "Name of file for Emacs desktop, excluding the directory part." - :type 'file - :group 'desktop) + :type 'file) (defcustom desktop-base-lock-name (convert-standard-filename ".emacs.desktop.lock") "Name of lock file for Emacs desktop, excluding the directory part." :type 'file - :group 'desktop :version "22.2") (defcustom desktop-path (list user-emacs-directory "~") "List of directories to search for the desktop file. The base name of the file is specified in `desktop-base-file-name'." :type '(repeat directory) - :group 'desktop :version "23.2") ; user-emacs-directory added (defcustom desktop-missing-file-warning nil @@ -290,7 +283,6 @@ Also pause for a moment to display message about errors signaled in If nil, just print error messages in the message buffer." :type 'boolean - :group 'desktop :version "22.1") (defcustom desktop-no-desktop-file-hook nil @@ -298,7 +290,6 @@ If nil, just print error messages in the message buffer." Run in the directory in which the desktop file was sought. May be used to show a Dired buffer." :type 'hook - :group 'desktop :version "22.1") (defcustom desktop-not-loaded-hook nil @@ -306,7 +297,6 @@ May be used to show a Dired buffer." Run in the directory in which the desktop file was found. May be used to deal with accidental multiple Emacs jobs." :type 'hook - :group 'desktop :options '(desktop-save-mode-off save-buffers-kill-emacs) :version "22.2") @@ -314,7 +304,6 @@ May be used to deal with accidental multiple Emacs jobs." "Normal hook run after a successful `desktop-read'. May be used to show a buffer list." :type 'hook - :group 'desktop :options '(list-buffers) :version "22.1") @@ -323,8 +312,7 @@ May be used to show a buffer list." Run with the desktop buffer current with only the header present. May be used to add to the desktop code or to truncate history lists, for example." - :type 'hook - :group 'desktop) + :type 'hook) (defcustom desktop-globals-to-save '(desktop-missing-file-warning @@ -339,8 +327,7 @@ An element may be variable name (a symbol) or a cons cell of the form \(VAR . MAX-SIZE), which means to truncate VAR's value to at most MAX-SIZE elements (if the value is a list) before saving the value. Feature: Saving `kill-ring' implies saving `kill-ring-yank-pointer'." - :type '(repeat (restricted-sexp :match-alternatives (symbolp consp))) - :group 'desktop) + :type '(repeat (restricted-sexp :match-alternatives (symbolp consp)))) (defcustom desktop-globals-to-clear '(kill-ring @@ -354,7 +341,6 @@ An element may be variable name (a symbol) or a cons cell of the form \(VAR . FORM). Symbols are set to nil and for cons cells VAR is set to the value obtained by evaluating FORM." :type '(repeat (restricted-sexp :match-alternatives (symbolp consp))) - :group 'desktop :version "22.1") (defcustom desktop-clear-preserve-buffers @@ -364,8 +350,7 @@ to the value obtained by evaluating FORM." Each element is a regular expression. Buffers with a name matched by any of these won't be deleted." :version "23.3" ; added Warnings - bug#6336 - :type '(repeat regexp) - :group 'desktop) + :type '(repeat regexp)) ;;;###autoload (defcustom desktop-locals-to-save @@ -389,8 +374,7 @@ these won't be deleted." "List of local variables to save for each buffer. The variables are saved only when they really are local. Conventional minor modes are restored automatically; they should not be listed here." - :type '(repeat symbol) - :group 'desktop) + :type '(repeat symbol)) (defcustom desktop-buffers-not-to-save "\\` " "Regexp identifying buffers that are to be excluded from saving. @@ -399,8 +383,7 @@ To exclude buffers that visit files, use `desktop-files-not-to-save' or `desktop-modes-not-to-save'." :type '(choice (const :tag "None" nil) regexp) - :version "24.4" ; skip invisible temporary buffers - :group 'desktop) + :version "24.4") ; skip invisible temporary buffers ;; Skip tramp and ange-ftp files (defcustom desktop-files-not-to-save @@ -413,15 +396,13 @@ you may wish customizing `remote-file-name-access-timeout' to a non-nil value, to avoid hanging the desktop restoration because some remote host is off-line." :type '(choice (const :tag "None" nil) - regexp) - :group 'desktop) + regexp)) ;; We skip TAGS files to save time (tags-file-name is saved instead). (defcustom desktop-modes-not-to-save '(tags-table-mode) "List of major modes whose buffers should not be saved." - :type '(repeat symbol) - :group 'desktop) + :type '(repeat symbol)) (defcustom desktop-restore-frames (not (featurep 'android)) "When non-nil, save and restore the frame and window configuration. @@ -432,7 +413,6 @@ This option is enabled by default, except on Android. It is disabled by default on Android because the window manager there prevents programs from restoring frames." :type 'boolean - :group 'desktop :version "31.1") (defcustom desktop-restore-in-current-display t @@ -443,7 +423,6 @@ If `delete', deletes frames on other displays instead of restoring them." :type '(choice (const :tag "Restore in current display" t) (const :tag "Restore in original display" nil) (const :tag "Delete frames in other displays" delete)) - :group 'desktop :version "24.4") (defcustom desktop-restore-forces-onscreen t @@ -459,7 +438,6 @@ no effect on restoring frames in a non-GUI session." :type '(choice (const :tag "Only fully offscreen frames" t) (const :tag "Also partially offscreen frames" all) (const :tag "Do not force frames onscreen" nil)) - :group 'desktop :version "24.4") (defcustom desktop-restore-reuses-frames t @@ -469,7 +447,6 @@ If `keep', keeps existing frames and does not reuse them." :type '(choice (const :tag "Reuse existing frames" t) (const :tag "Delete existing frames" nil) (const :tag "Keep existing frames" keep)) - :group 'desktop :version "24.4") (defcustom desktop-file-name-format 'absolute @@ -479,7 +456,6 @@ Possible values are: tilde -- Relative to ~. local -- Relative to directory of desktop file." :type '(choice (const absolute) (const tilde) (const local)) - :group 'desktop :version "22.1") (defcustom desktop-restore-eager t @@ -487,20 +463,17 @@ Possible values are: Remaining buffers are restored lazily (when Emacs is idle). If value is t, all buffers are restored immediately." :type '(choice (const t) integer) - :group 'desktop :version "22.1") (defcustom desktop-lazy-verbose t "Verbose reporting of lazily created buffers." :type 'boolean - :group 'desktop :version "22.1") (defcustom desktop-lazy-idle-delay 5 "Idle delay before starting to create buffers. See `desktop-restore-eager'." :type 'natnum - :group 'desktop :version "22.1") ;;;###autoload @@ -578,8 +551,7 @@ and the name of the minor mode function are different have to be added to this table. See also `desktop-minor-mode-handlers'." :type '(alist :key-type (symbol :tag "Minor mode") :value-type (list :tag "Restore function" - (choice (const nil) function))) - :group 'desktop) + (choice (const nil) function)))) ;;;###autoload (defvar desktop-minor-mode-handlers nil @@ -682,7 +654,7 @@ Used to detect desktop file conflicts.") (lambda (mr) (mapcar #'copy-marker mr)))) "Table of serialization/deserialization functions for variables. -Each record is a list of form: (var serializer deserializer). +Each record is a list of form: (VAR SERIALIZER DESERIALIZER). These records can be freely reordered, deleted, or new ones added. However, for compatibility, don't modify the functions for existing records.") @@ -774,7 +746,9 @@ if different)." (dolist (var desktop-globals-to-clear) (if (symbolp var) (set-default var nil) - (set-default var (eval (cdr var))))) + ;; FIXME: To avoid maiming kitten we should also support `funcall' + ;; instead of only `eval' here. + (set-default var (eval (cdr var) t)))) (let ((preserve-regexp (concat "\\`\\(" (mapconcat (lambda (regexp) (concat "\\(" regexp "\\)")) @@ -866,7 +840,7 @@ buffer, which is (in order): `buffer-file-name'; `buffer-name'; `major-mode'; - list of minor-modes,; + list of minor-modes; `point'; `mark'; `buffer-read-only'; @@ -980,7 +954,7 @@ QUOTE may be `may' (value may be quoted), (cons 'must `(,@(mapcar #'cdr (nreverse (if use-list* (cdr newlist) newlist))) - ,@(if use-list* (cdar newlist))))))) + . ,(if use-list* (cdar newlist))))))) ((subrp value) (cons nil `(symbol-function ',(intern-soft (substring (prin1-to-string value) 7 -1))))) @@ -1026,8 +1000,8 @@ which means to truncate VAR's value to at most MAX-SIZE elements (when (boundp var) (when (and (integerp size) (> size 0) - (listp (eval var))) - (desktop-truncate (eval var) size)) + (listp (symbol-value var))) + (desktop-truncate (symbol-value var) size)) (insert "(setq " (symbol-name var) " " @@ -1046,7 +1020,7 @@ have its state saved in the desktop file.") "Return t if buffer should have its state saved in the desktop file. FILENAME is the visited file name, BUFNAME is the buffer name, and MODE is the major mode. -\n\(fn FILENAME BUFNAME MODE)" +\n(fn FILENAME BUFNAME MODE)" (let ((case-fold-search nil) (no-regexp-to-check (not (stringp desktop-files-not-to-save))) dired-skip) @@ -1339,14 +1313,9 @@ It returns t if a desktop file was loaded, nil otherwise. ;; Else, with a prefix arg, ask for a directory name. (and ask (read-directory-name "Directory for desktop file: " nil nil t)) ;; Otherwise search desktop file in desktop-path. - (let ((dirs desktop-path)) - (while (and dirs - (not (file-exists-p - (desktop-full-file-name (car dirs))))) - (setq dirs (cdr dirs))) - (and dirs (car dirs))) + (locate-file desktop-base-file-name desktop-path) ;; If not found and `desktop-path' is non-nil, use its first element. - (and desktop-path (car desktop-path)) + (car desktop-path) ;; Default: .emacs.d. user-emacs-directory)))) (if (file-exists-p (desktop-full-file-name)) @@ -1498,7 +1467,7 @@ This function is called from `window-configuration-change-hook'." (> desktop-auto-save-timeout 0)) (setq desktop-auto-save-timer (run-with-idle-timer desktop-auto-save-timeout nil - 'desktop-auto-save)))) + #'desktop-auto-save)))) (defun desktop-auto-save-cancel-timer () (when desktop-auto-save-timer @@ -1657,8 +1626,16 @@ and try to load that." (condition-case err ;; Evaluate point. Thus point can be something like ;; '(search-forward ... - (eval desktop-buffer-point) - (error (message "%s" (error-message-string err)) 1)))) + ;; FIXME: How/where could this happen? AFAICT this var + ;; is lexical has been lexical since 2013 and thus equal + ;; to the arg `buffer-point' which always comes from the + ;; corresponding entry in `desktop-buffer-info' where we + ;; put just an integer. + ;; FIXME: If we want to keep this feature, we should + ;; also allow `desktop-buffer-point' to be a function. + (eval desktop-buffer-point t) + (error (message "%s" (error-message-string err)) + (point-min))))) (when desktop-buffer-mark (if (consp desktop-buffer-mark) (progn @@ -1701,6 +1678,8 @@ and try to load that." ;; Backward compatibility -- update parameters to 205 standards. (defun desktop-buffer (buffer-filename buffer-name buffer-majormode mim pt mk ro tl fc cfs cr buffer-misc) + ;; FIXME: Actually, it's been obsolete since 1994 (commit ec4c6f225a81)! + (declare (obsolete desktop-create-buffer "31")) (desktop-create-buffer 205 buffer-filename buffer-name buffer-majormode (cdr mim) pt mk ro buffer-misc @@ -1716,7 +1695,8 @@ ARGS must be an argument list for `desktop-create-buffer'." (setq desktop-buffer-args-list (nconc desktop-buffer-args-list (list args))) (unless desktop-lazy-timer (setq desktop-lazy-timer - (run-with-idle-timer desktop-lazy-idle-delay t 'desktop-idle-create-buffers)))) + (run-with-idle-timer desktop-lazy-idle-delay t + #'desktop-idle-create-buffers)))) (defun desktop-lazy-create-buffer () "Pop args from `desktop-buffer-args-list', create buffer and bury it." commit 057e990fba0975dae06bc365157dd4ff95bfd7a7 Author: Po Lu Date: Tue Apr 22 20:56:48 2025 +0800 * src/androidfns.c (Fx_display_grayscale_p): Fix value on color displays. diff --git a/src/androidfns.c b/src/androidfns.c index ec8651aafcb..8ea06fc4405 100644 --- a/src/androidfns.c +++ b/src/androidfns.c @@ -1271,8 +1271,7 @@ DEFUN ("x-display-grayscale-p", Fx_display_grayscale_p, struct android_display_info *dpyinfo; dpyinfo = check_android_display_info (terminal); - return (dpyinfo->n_planes > 1 && dpyinfo->n_planes <= 8 - ? Qt : Qnil); + return dpyinfo->n_planes > 1 ? Qt : Qnil; } DEFUN ("x-display-pixel-width", Fx_display_pixel_width, commit b2a77b6e01ba190d7b8e0943d8e64c97ed55947d Author: Sean Whitton Date: Tue Apr 22 20:45:34 2025 +0800 Delete unused block-comment-start and block-comment-end * lisp/newcomment.el (block-comment-start) (block-comment-end): Delete. (comment-indent): * lisp/cedet/semantic/doc.el (semantic-doc-snarf-comment-for-tag): Remove use of the now-deleted variables. diff --git a/lisp/cedet/semantic/doc.el b/lisp/cedet/semantic/doc.el index fad020ec330..0fbc5f5f6db 100644 --- a/lisp/cedet/semantic/doc.el +++ b/lisp/cedet/semantic/doc.el @@ -110,12 +110,6 @@ If NOSNARF is `lex', then return the lex token." (while (string-match "^\\s-*\\s.+\\s-*" ct) (setq ct (concat (substring ct 0 (match-beginning 0)) (substring ct (match-end 0))))) - ;; End of a block comment. - (if (and (boundp 'block-comment-end) - block-comment-end - (string-match block-comment-end ct)) - (setq ct (concat (substring ct 0 (match-beginning 0)) - (substring ct (match-end 0))))) ;; In case it's a real string, STRIPIT. (while (string-match "\\s-*\\s\"+\\s-*" ct) (setq ct (concat (substring ct 0 (match-beginning 0)) diff --git a/lisp/newcomment.el b/lisp/newcomment.el index 945187e863f..23fcbc05372 100644 --- a/lisp/newcomment.el +++ b/lisp/newcomment.el @@ -56,7 +56,6 @@ ;; - spill auto-fill of comments onto the end of the next line. ;; - uncomment-region with a consp (for blocks) or somehow make the ;; deletion of continuation markers less dangerous. -;; - drop block-comment- unless it's really used. ;; - uncomment-region on a subpart of a comment. ;; - support gnu-style "multi-line with space in continue". ;; - somehow allow comment-dwim to use the region even if transient-mark-mode @@ -183,10 +182,6 @@ guaranteed to be correctly ordered. It is called within `save-excursion'. Applicable at least in modes for languages like fixed-format Fortran where comments always start in column zero.") -;; ?? never set -(defvar block-comment-start nil) -(defvar block-comment-end nil) - (defvar comment-quote-nested t "Non-nil if nested comments should be quoted. This should be locally set by each major mode if needed.") @@ -718,12 +713,10 @@ Point is expected to be at the start of the comment." If CONTINUE is non-nil, use the `comment-continue' markers if any." (interactive "*") (comment-normalize-vars) - (let* ((empty (save-excursion (beginning-of-line) - (looking-at "[ \t]*$"))) - (starter (or (and continue comment-continue) - (and empty block-comment-start) comment-start)) - (ender (or (and continue comment-continue "") - (and empty block-comment-end) comment-end))) + (let ((starter (or (and continue comment-continue) + comment-start)) + (ender (or (and continue comment-continue "") + comment-end))) (unless starter (error "No comment syntax defined")) (beginning-of-line) (let* ((eolpos (line-end-position)) commit 4808f785ccb0166a87983405c6317ab2a4d6dfde Author: Sean Whitton Date: Tue Apr 22 20:42:45 2025 +0800 Revert addition of electric-block-comment-mode & follow-up commits As presently under discussion in bug#77823, the intended new functionality is not really about comments at all. Remove it for now to allow us to redesign from a clean slate, and to deal with the regression reported in bug#77823. This reverts the following three changesets: Author: Elías Gabriel Pérez AuthorDate: Mon Mar 17 12:56:52 2025 -0600 New minor mode: `electric-block-comment-mode' Author: Elías Gabriel Pérez AuthorDate: Mon Mar 31 17:58:16 2025 -0600 Add block-comment-start and block-comment-end to supported modes Author: Elías Gabriel Pérez AuthorDate: Sun Apr 13 12:26:08 2025 -0600 Add block-comment variables to cc-mode diff --git a/etc/NEWS b/etc/NEWS index 24028367cd8..ade5abc43fc 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1984,15 +1984,6 @@ A major mode based on the tree-sitter library for editing "go.work" files. If tree-sitter is properly set-up by the user, it can be enabled for files named "go.work". -** New minor mode 'electric-block-comment-mode'. -This mode automatically closes block comments. Typing the value of -'block-comment-start' closes it inserting the corresponding -'block-comment-end'. Thus, allows closing block comments for major -modes that support it, such as: 'c-mode', 'c++-mode', 'java-mode', -'js-mode', 'css-mode', and derived: 'html-mode', 'mhtml-mode', -'xml-mode' and 'nxml-mode', 'pascal-mode', 'lua-ts-mode', 'lisp-mode' -and 'common-lisp-mode'. - * Incompatible Lisp Changes in Emacs 31.1 diff --git a/lisp/electric.el b/lisp/electric.el index da5fa973757..39e13e1ca0c 100644 --- a/lisp/electric.el +++ b/lisp/electric.el @@ -731,38 +731,6 @@ use `electric-quote-local-mode'." (setq-default electric-quote-mode nil) ; But keep it globally disabled. ))) -;;; Electric comment block - -(defun electric-block-comment-post-self-insert-function () - "Function that `electric-block-comment' adds to `post-self-insert-hook'. -This closes block comment with `block-comment-end' when `block-comment-start' -is typed." - (when (and block-comment-start block-comment-end - ;; Check if we are exactly behind a `block-comment-start' - (save-excursion - (save-match-data - (re-search-backward (regexp-quote block-comment-start) - (- (point) (length block-comment-start)) - t))) - ;; And if there is not anything front us - (looking-at-p (concat "[^[:space:]]"))) - (insert " ") - (save-excursion - (insert (concat " " block-comment-end))))) - -(define-minor-mode electric-block-comment-mode - "Toggle automatic closing of block comments (Electric Block Comment mode). - -When enabled, typing `block-comment-start' closes it inserting their -corresponding `block-comment-end'." - :group 'electricity - :version "31.1" - (if electric-block-comment-mode - (add-hook 'post-self-insert-hook - #'electric-block-comment-post-self-insert-function 10 t) - (remove-hook 'post-self-insert-hook - #'electric-block-comment-post-self-insert-function t))) - (provide 'electric) ;;; electric.el ends here diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el index f27baae1b36..006b713ae6e 100644 --- a/lisp/emacs-lisp/lisp-mode.el +++ b/lisp/emacs-lisp/lisp-mode.el @@ -828,8 +828,6 @@ or to switch back to an existing one." "\\(\\(^\\|[^\\\n]\\)\\(\\\\\\\\\\)*\\)\\(;+\\|#|\\) *") (setq-local comment-end-skip "[ \t]*\\(\\s>\\||#\\)") (setq-local font-lock-comment-end-skip "|#") - (setq-local block-comment-start "#|") - (setq-local block-comment-end "|#") (setq imenu-case-fold-search t)) (defun lisp-find-tag-default () diff --git a/lisp/newcomment.el b/lisp/newcomment.el index eb36f91104d..945187e863f 100644 --- a/lisp/newcomment.el +++ b/lisp/newcomment.el @@ -56,6 +56,7 @@ ;; - spill auto-fill of comments onto the end of the next line. ;; - uncomment-region with a consp (for blocks) or somehow make the ;; deletion of continuation markers less dangerous. +;; - drop block-comment- unless it's really used. ;; - uncomment-region on a subpart of a comment. ;; - support gnu-style "multi-line with space in continue". ;; - somehow allow comment-dwim to use the region even if transient-mark-mode @@ -182,11 +183,9 @@ guaranteed to be correctly ordered. It is called within `save-excursion'. Applicable at least in modes for languages like fixed-format Fortran where comments always start in column zero.") -(defvar block-comment-start nil - "String to insert to start a new block comment, or nil if no supported.") - -(defvar block-comment-end nil - "String to insert to end a new block comment, or nil if no supported.") +;; ?? never set +(defvar block-comment-start nil) +(defvar block-comment-end nil) (defvar comment-quote-nested t "Non-nil if nested comments should be quoted. diff --git a/lisp/nxml/nxml-mode.el b/lisp/nxml/nxml-mode.el index 994b2779d1a..7acc19b9058 100644 --- a/lisp/nxml/nxml-mode.el +++ b/lisp/nxml/nxml-mode.el @@ -529,8 +529,6 @@ Many aspects this mode can be customized using (setq-local comment-start-skip "") (setq-local comment-end-skip "[ \t\r\n]*-->") - (setq-local block-comment-start "") (setq-local comment-line-break-function #'nxml-newline-and-indent) (setq-local comment-quote-nested-function #'nxml-comment-quote-nested) (setq-local comment-continue "") ; avoid double-hyphens as a padding diff --git a/lisp/progmodes/c-ts-common.el b/lisp/progmodes/c-ts-common.el index 56c8ae49000..5f9d485538a 100644 --- a/lisp/progmodes/c-ts-common.el +++ b/lisp/progmodes/c-ts-common.el @@ -282,8 +282,6 @@ Set up: - `comment-end' - `comment-start-skip' - `comment-end-skip' - - `block-comment-start' - - `block-comment-end' - `adaptive-fill-mode' - `adaptive-fill-first-line-regexp' - `paragraph-start' @@ -300,8 +298,6 @@ Set up: (rx (* (syntax whitespace)) (group (or (syntax comment-end) (seq (+ "*") "/"))))) - (setq-local block-comment-start "/*") - (setq-local block-comment-end "*/") (setq-local adaptive-fill-mode t) (setq-local adaptive-fill-function #'c-ts-common--adaptive-fill-prefix) ;; Always accept * or | as prefix, even if there's only one line in diff --git a/lisp/progmodes/cc-cmds.el b/lisp/progmodes/cc-cmds.el index 06397d23321..9230faa56da 100644 --- a/lisp/progmodes/cc-cmds.el +++ b/lisp/progmodes/cc-cmds.el @@ -5015,7 +5015,6 @@ If a fill prefix is specified, it overrides all the above." (setq comment-start "/* " comment-end " */")) (unless (string-match "[ \t]*//" comment-start) (setq comment-start "// " comment-end ""))) - (setq block-comment-start "/*" block-comment-end "*/") (setq col (save-excursion (back-to-indentation) (current-column))) diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el index fa3788ba383..efeb6c1005a 100644 --- a/lisp/progmodes/cc-mode.el +++ b/lisp/progmodes/cc-mode.el @@ -610,8 +610,6 @@ that requires a literal mode spec at compile time." (make-local-variable 'comment-start) (make-local-variable 'comment-end) (make-local-variable 'comment-start-skip) - (make-local-variable 'block-comment-start) - (make-local-variable 'block-comment-end) (make-local-variable 'paragraph-start) (make-local-variable 'paragraph-separate) diff --git a/lisp/progmodes/go-ts-mode.el b/lisp/progmodes/go-ts-mode.el index e1736fe9208..8cabaa9f34d 100644 --- a/lisp/progmodes/go-ts-mode.el +++ b/lisp/progmodes/go-ts-mode.el @@ -692,8 +692,6 @@ what the parent of the node would be if it were a node." (setq-local comment-start "// ") (setq-local comment-end "") (setq-local comment-start-skip (rx "//" (* (syntax whitespace)))) - (setq-local block-comment-start "/*") - (setq-local block-comment-end "*/") ;; Indent. (setq-local indent-tabs-mode t diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index aa0d35efab8..bf7f9873aaa 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el @@ -3846,8 +3846,6 @@ Currently there are `js-mode' and `js-ts-mode'." (setq-local comment-start "// ") (setq-local comment-start-skip "\\(?://+\\|/\\*+\\)\\s *") (setq-local comment-end "") - (setq-local block-comment-start "/*") - (setq-local block-comment-end "*/") (setq-local fill-paragraph-function #'js-fill-paragraph) (setq-local normal-auto-fill-function #'js-do-auto-fill) diff --git a/lisp/progmodes/json-ts-mode.el b/lisp/progmodes/json-ts-mode.el index 9d374119810..11ec5d5c079 100644 --- a/lisp/progmodes/json-ts-mode.el +++ b/lisp/progmodes/json-ts-mode.el @@ -142,8 +142,6 @@ Return nil if there is no name or if NODE is not a defun node." (setq-local comment-start "// ") (setq-local comment-start-skip "\\(?://+\\|/\\*+\\)\\s *") (setq-local comment-end "") - (setq-local block-comment-start "/*") - (setq-local block-comment-end "*/") ;; Electric (setq-local electric-indent-chars diff --git a/lisp/progmodes/lua-ts-mode.el b/lisp/progmodes/lua-ts-mode.el index dc129277778..8c2ff2ae7e0 100644 --- a/lisp/progmodes/lua-ts-mode.el +++ b/lisp/progmodes/lua-ts-mode.el @@ -673,8 +673,6 @@ Calls REPORT-FN directly." (setq-local comment-start "--") (setq-local comment-start-skip "--\\s-*") (setq-local comment-end "") - (setq-local block-comment-start "--[[" ) - (setq-local block-comment-end "]]") ;; Font-lock. (setq-local treesit-font-lock-settings lua-ts--font-lock-settings) diff --git a/lisp/progmodes/opascal.el b/lisp/progmodes/opascal.el index 9dcaff9645e..bd6bc3b28ac 100644 --- a/lisp/progmodes/opascal.el +++ b/lisp/progmodes/opascal.el @@ -1767,9 +1767,7 @@ Coloring: (setq-local comment-start "// ") (setq-local comment-start-skip "\\(?://\\|(\\*\\|{\\)[ \t]*") - (setq-local comment-end-skip "[ \t]*\\(?:\n\\|\\*)\\|}\\)") - (setq-local block-comment-start "(*") - (setq-local block-comment-end "*)")) + (setq-local comment-end-skip "[ \t]*\\(?:\n\\|\\*)\\|}\\)")) (provide 'opascal) ;;; opascal.el ends here diff --git a/lisp/progmodes/pascal.el b/lisp/progmodes/pascal.el index 113cf68c8d6..b6316d4dfe1 100644 --- a/lisp/progmodes/pascal.el +++ b/lisp/progmodes/pascal.el @@ -348,8 +348,6 @@ See also the user variables `pascal-type-keywords', `pascal-start-keywords' and (setq-local comment-start "{") (setq-local comment-start-skip "(\\*+ *\\|{ *") (setq-local comment-end "}") - (setq-local block-comment-start "(*") - (setq-local block-comment-end "*)") (add-hook 'completion-at-point-functions 'pascal-completions-at-point nil t) ;; Font lock support (setq-local font-lock-defaults '(pascal-font-lock-keywords nil t)) diff --git a/lisp/progmodes/typescript-ts-mode.el b/lisp/progmodes/typescript-ts-mode.el index 5a84740af6e..1b971fa80fd 100644 --- a/lisp/progmodes/typescript-ts-mode.el +++ b/lisp/progmodes/typescript-ts-mode.el @@ -665,8 +665,6 @@ at least 3 (which is the default value)." ;; Comments. (setq-local comment-start "// ") (setq-local comment-end "") - (setq-local block-comment-start "/*") - (setq-local block-comment-end "*/") (setq-local comment-start-skip (rx (or (seq "/" (+ "/")) (seq "/" (+ "*"))) (* (syntax whitespace)))) diff --git a/lisp/textmodes/css-mode.el b/lisp/textmodes/css-mode.el index e3f295c3412..b48c98efa02 100644 --- a/lisp/textmodes/css-mode.el +++ b/lisp/textmodes/css-mode.el @@ -1858,8 +1858,6 @@ implementations: `css-mode' and `css-ts-mode'." (setq-local comment-start-skip "/\\*+[ \t]*") (setq-local comment-end "*/") (setq-local comment-end-skip "[ \t]*\\*+/") - (setq-local block-comment-start "/*") - (setq-local block-comment-end "*/") (setq-local electric-indent-chars (append css-electric-keys electric-indent-chars)) ;; The default "." creates ambiguity with class selectors. @@ -2083,8 +2081,6 @@ be used to fill comments. "Major mode to edit \"Sassy CSS\" files." (setq-local comment-start "// ") (setq-local comment-end "") - (setq-local block-comment-start "/*") - (setq-local block-comment-end "*/") (setq-local comment-continue " *") (setq-local comment-start-skip "/[*/]+[ \t]*") (setq-local comment-end-skip "[ \t]*\\(?:\n\\|\\*+/\\)") diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el index 4dbc6839c68..2accd31bc36 100644 --- a/lisp/textmodes/sgml-mode.el +++ b/lisp/textmodes/sgml-mode.el @@ -622,8 +622,6 @@ Do \\[describe-key] on the following bindings to discover what they do. (setq-local indent-line-function #'sgml-indent-line) (setq-local comment-start "") - (setq-local block-comment-start "") (setq-local comment-indent-function #'sgml-comment-indent) (setq-local comment-line-break-function #'sgml-comment-indent-new-line) (setq-local skeleton-further-elements '((completion-ignore-case t))) commit 871ec9615a949e967bf7d19466eb9c56ed80ff7e Author: Gerd Möllmann Date: Tue Apr 22 11:35:12 2025 +0200 Realloc less often in adjust_glyph_matrix (bug#77961) * src/dispnew.c (adjust_glyph_matrix): Only xnrealloc when the glyph matrix got wider or taller. diff --git a/src/dispnew.c b/src/dispnew.c index 440b1ba83b9..d65a7cbc1f1 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -503,13 +503,17 @@ adjust_glyph_matrix (struct window *w, struct glyph_matrix *matrix, int x, int y while (row < end) { - row->glyphs[LEFT_MARGIN_AREA] - = xnrealloc (row->glyphs[LEFT_MARGIN_AREA], - dim.width, sizeof (struct glyph)); - /* We actually need to clear only the 'frame' member, but - it's easier to clear everything. */ - memset (row->glyphs[LEFT_MARGIN_AREA], 0, - dim.width * sizeof (struct glyph)); + /* Only realloc if matrix got wider or taller (bug#77961). */ + if (dim.width > matrix->matrix_w || new_rows) + { + row->glyphs[LEFT_MARGIN_AREA] + = xnrealloc (row->glyphs[LEFT_MARGIN_AREA], + dim.width, sizeof (struct glyph)); + /* We actually need to clear only the 'frame' member, but + it's easier to clear everything. */ + memset (row->glyphs[LEFT_MARGIN_AREA], 0, + dim.width * sizeof (struct glyph)); + } if ((row == matrix->rows + dim.height - 1 /* The mode line, if displayed, never has marginal commit 6f30b9584f7feec395e4b6806ec2eda542639e98 Author: Juri Linkov Date: Tue Apr 22 09:47:30 2025 +0300 Fix tree-sitter ABI version incompatibility in rust-ts-mode * lisp/progmodes/rust-ts-mode.el (treesit-language-source-alist): For ABI version 15 add the recommended version "v0.24.0". diff --git a/lisp/progmodes/rust-ts-mode.el b/lisp/progmodes/rust-ts-mode.el index cfad454b396..beb27504cc7 100644 --- a/lisp/progmodes/rust-ts-mode.el +++ b/lisp/progmodes/rust-ts-mode.el @@ -43,7 +43,8 @@ (add-to-list 'treesit-language-source-alist - '(rust "https://github.com/tree-sitter/tree-sitter-rust" "v0.23.2") + `(rust "https://github.com/tree-sitter/tree-sitter-rust" + ,(if (< (treesit-library-abi-version) 15) "v0.23.2" "v0.24.0")) t) (defcustom rust-ts-mode-indent-offset 4 commit fc5e905dc90e21b1a381bde42e22c06f45c17e16 Author: Michael Albinus Date: Tue Apr 22 08:45:34 2025 +0200 Make `man' more portable * lisp/man.el (Man-init-defvars): Use [:cntrl:]. Character ranges with octal numbers aren't portable enough. (Bug#77944) diff --git a/lisp/man.el b/lisp/man.el index d34d9154052..397162a7ad1 100644 --- a/lisp/man.el +++ b/lisp/man.el @@ -635,9 +635,7 @@ This is necessary if one wants to dump man.el with Emacs." (if Man-sed-script (concat "-e '" Man-sed-script "'") "") - ;; Use octal numbers. Otherwise, \032 (Ctrl-Z) would - ;; suspend remote connections. - "-e '/^[\\o001-\\o032][\\o001-\\o032]*$/d'" + "-e '/^[[:cntrl:]][[:cntrl:]]*$/d'" "-e '/\e[789]/s///g'" "-e '/Reformatting page. Wait/d'" "-e '/Reformatting entry. Wait/d'" @@ -772,7 +770,7 @@ Different man programs support this feature in different ways. The default Debian man program (\"man-db\") has a `--local-file' \(or `-l') option for this purpose. The default Red Hat man program has no such option, but interprets any name containing -a \"/\" as a local filename. The function returns either `man-db' +a \"/\" as a local filename. The function returns either `man-db', `man', or nil." (if (eq Man-support-local-filenames 'auto-detect) (with-connection-local-variables commit 45e849bddc1c7777628d3f42557ddbd8a6ba96b7 Author: Stefan Kangas Date: Tue Apr 22 05:53:35 2025 +0200 ; Fix thinko in recent commit diff --git a/src/xterm.c b/src/xterm.c index 1884e780e34..249916cf954 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -11971,10 +11971,10 @@ x_new_focus_frame (struct x_display_info *dpyinfo, struct frame *frame) { struct frame *old_focus = dpyinfo->x_focus_frame; #if defined USE_GTK && !defined HAVE_GTK3 && defined HAVE_XINPUT2 + XIEventMask mask; if (dpyinfo->supports_xi2) { ptrdiff_t l = XIMaskLen (XI_LASTEVENT); - XIEventMask mask; mask.mask = alloca (l); mask.mask_len = l; memset (mask.mask, 0, l); commit 649bb9dcd9518a273f99fd56e40d921f6191cb69 Author: Eli Zaretskii Date: Mon Apr 21 14:13:41 2025 +0300 ; * etc/NEWS: Fix wording of a recent addition. diff --git a/etc/NEWS b/etc/NEWS index 4a52ec2a4f1..24028367cd8 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1930,9 +1930,9 @@ windows without fringes, including any window on a text terminal. *** Enhanced 'flymake-show-buffer-diagnostics'. The command 'flymake-show-buffer-diagnostics' is now capable of highliting a nearby diagnostic in the resulting listing. Additionally, -it is bound by to mouse clicks on fringe and margin indicators, -operating on the diagnostics of the corresponding line. The user may -bind it in other situations such as the diagnostic overlay map. +it is bound to mouse clicks on fringe and margin indicators, operating +on the diagnostics of the corresponding line. The user may bind it in +other situations such as the diagnostic overlay map. *** More powerful 'flymake-make-diagnostic' API. Flymake backends can now specify origin and code attributes, allowing @@ -1946,8 +1946,8 @@ code, message or one-liner message) appear in each output destination. *** Dynamic column sizing in diagnostic listings. The tabulated listings produced by 'flymake-show-buffer-diagnostics' and -'flymake-show-project-diagnostics' now automatically their column widths -based on content, optimizing display space and readability. +'flymake-show-project-diagnostics' now automatically adjust their column +widths based on content, optimizing display space and readability. ** SQLite commit 23583bb3a140883edda4ca8958f0447da75e0eea Author: Stefan Monnier Date: Sun Apr 20 23:21:30 2025 -0400 (text-clone--maintain): Don't modify the buf from the after-change hook * lisp/subr.el (text-clone--pending-overlays): New var. (text-clone--maintain-overlays): New function, extracted from `text-clone--maintain`. (text-clone--maintain): Use it. diff --git a/lisp/subr.el b/lisp/subr.el index 352e7e4caab..a5c850ebe5e 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -6393,57 +6393,83 @@ backwards ARG times if negative." ;;;; Text clones (defvar text-clone--maintaining nil) +(defvar text-clone--pending-overlays nil) (defun text-clone--maintain (ol1 after beg end &optional _len) "Propagate the changes made under the overlay OL1 to the other clones. This is used on the `modification-hooks' property of text clones." (when (and after (not undo-in-progress) - (not text-clone--maintaining) - (overlay-start ol1)) - (let ((margin (if (overlay-get ol1 'text-clone-spreadp) 1 0))) - (setq beg (max beg (+ (overlay-start ol1) margin))) - (setq end (min end (- (overlay-end ol1) margin))) + (not text-clone--maintaining)) + ;; An after-change hook (like this one) should never modify a buffer, + ;; so record the change and arrange to process it soon. + (let ((pending (overlay-get ol1 'text-clone--pending))) + (if pending + (progn + (setcar pending (min beg (car pending))) + (setcdr pending (max end (cdr pending)))) + (overlay-put ol1 'text-clone--pending (cons beg end)) + (push ol1 text-clone--pending-overlays) + (unless (memq #'text-clone--maintain-overlays + (default-value 'post-command-hook)) + ;; Perform the update as soon as possible. + (add-hook 'post-command-hook #'text-clone--maintain-overlays) + (run-with-timer 0 nil #'text-clone--maintain-overlays)))))) + +(defun text-clone--maintain-overlays () + (while text-clone--pending-overlays + (let* ((ol1 (pop text-clone--pending-overlays)) + (pending (overlay-get ol1 'text-clone--pending)) + (margin (if (overlay-get ol1 'text-clone-spreadp) 1 0)) + (beg (max (car pending) + (+ (or (overlay-start ol1) (point-max)) margin))) + (end (min (cdr pending) + (- (or (overlay-end ol1) (1- beg)) margin)))) + (overlay-put ol1 'text-clone--pending nil) (when (<= beg end) - (save-excursion - (when (overlay-get ol1 'text-clone-syntax) - ;; Check content of the clone's text. - (let ((cbeg (+ (overlay-start ol1) margin)) - (cend (- (overlay-end ol1) margin))) - (goto-char cbeg) - (save-match-data - (if (not (re-search-forward - (overlay-get ol1 'text-clone-syntax) cend t)) - ;; Mark the overlay for deletion. - (setq end cbeg) - (when (< (match-end 0) cend) - ;; Shrink the clone at its end. - (setq end (min end (match-end 0))) - (move-overlay ol1 (overlay-start ol1) - (+ (match-end 0) margin))) - (when (> (match-beginning 0) cbeg) - ;; Shrink the clone at its beginning. - (setq beg (max (match-beginning 0) beg)) - (move-overlay ol1 (- (match-beginning 0) margin) - (overlay-end ol1))))))) - ;; Now go ahead and update the clones. - (let ((head (- beg (overlay-start ol1))) - (tail (- (overlay-end ol1) end)) - (str (buffer-substring beg end)) - (nothing-left t) - (text-clone--maintaining t)) - (dolist (ol2 (overlay-get ol1 'text-clones)) - (let ((oe (overlay-end ol2))) - (unless (or (eq ol1 ol2) (null oe)) - (setq nothing-left nil) - (let ((mod-beg (+ (overlay-start ol2) head))) - ;;(overlay-put ol2 'modification-hooks nil) - (goto-char (- (overlay-end ol2) tail)) - (unless (> mod-beg (point)) - (save-excursion (insert str)) - (delete-region mod-beg (point))) - ;;(overlay-put ol2 'modification-hooks '(text-clone--maintain)) - )))) - (if nothing-left (delete-overlay ol1)))))))) + (with-current-buffer (overlay-buffer ol1) + (save-excursion + (when (overlay-get ol1 'text-clone-syntax) + ;; Check content of the clone's text. + (let ((cbeg (+ (overlay-start ol1) margin)) + (cend (- (overlay-end ol1) margin))) + (goto-char cbeg) + (save-match-data + (if (not (re-search-forward + (overlay-get ol1 'text-clone-syntax) cend t)) + ;; Mark the overlay for deletion. + (setq end cbeg) + (when (< (match-end 0) cend) + ;; Shrink the clone at its end. + (setq end (min end (match-end 0))) + (move-overlay ol1 (overlay-start ol1) + (+ (match-end 0) margin))) + (when (> (match-beginning 0) cbeg) + ;; Shrink the clone at its beginning. + (setq beg (max (match-beginning 0) beg)) + (move-overlay ol1 (- (match-beginning 0) margin) + (overlay-end ol1))))))) + ;; Now go ahead and update the clones. + (let ((head (- beg (overlay-start ol1))) + (tail (- (overlay-end ol1) end)) + (str (buffer-substring beg end)) + (nothing-left t) + (text-clone--maintaining t)) + (dolist (ol2 (overlay-get ol1 'text-clones)) + (let ((oe (overlay-end ol2))) + (unless (or (eq ol1 ol2) (null oe)) + (setq nothing-left nil) + (let ((mod-beg (+ (overlay-start ol2) head))) + ;;(overlay-put ol2 'modification-hooks nil) + (goto-char (- (overlay-end ol2) tail)) + (unless (> mod-beg (point)) + (save-excursion (insert str)) + (delete-region mod-beg (point))) + ;;(overlay-put ol2 'modification-hooks + ;; '(text-clone--maintain)) + )))) + (if nothing-left (delete-overlay ol1)))))))) + (remove-hook 'post-command-hook #'text-clone--maintain-overlays) + (cancel-function-timers #'text-clone--maintain-overlays)) (defun text-clone-create (start end &optional spreadp syntax) "Create a text clone of START...END at point. commit a84a934a4481d35ab2200f8dedc9ed3af6a5571d Author: Po Lu Date: Mon Apr 21 09:37:55 2025 +0800 Render lib/getloadavg.c patches more permanent * admin/gnulib-patches/lib/getloadavg.c.diff: New file. * admin/merge-gnulib (GNULIB_TOOL_FLAGS): Set --local-dir to admin/gnulib-patches. * lib/gnulib.mk.in: Update from Gnulib. diff --git a/admin/gnulib-patches/lib/getloadavg.c.diff b/admin/gnulib-patches/lib/getloadavg.c.diff new file mode 100644 index 00000000000..afa633703b7 --- /dev/null +++ b/admin/gnulib-patches/lib/getloadavg.c.diff @@ -0,0 +1,14 @@ +diff --git a/lib/getloadavg.c b/lib/getloadavg.c +index 9da41c16c02..1cb1c01097d 100644 +--- a/lib/getloadavg.c ++++ b/lib/getloadavg.c +@@ -499,7 +499,8 @@ getloadavg (double loadavg[], int nelem) + } + # endif + +-# if !defined (LDAV_DONE) && (defined __linux__ || defined __ANDROID__) ++# if !defined (LDAV_DONE) && (defined __linux__ || defined __ANDROID__) \ ++ && (!defined __ANDROID__ || __ANDROID_API__ >= 13) + /* Linux without glibc, Android, Cygwin */ + # define LDAV_DONE + # undef LOAD_AVE_TYPE diff --git a/admin/merge-gnulib b/admin/merge-gnulib index 54dcf275d55..88f74d6eb7f 100755 --- a/admin/merge-gnulib +++ b/admin/merge-gnulib @@ -80,6 +80,10 @@ case $src in *) src=$src/ ;; esac +GNULIB_TOOL_FLAGS="$GNULIB_TOOL_FLAGS + --local-dir="$src"admin/gnulib-patches +" + # Gnulib's source directory. gnulib_srcdir=${1-$src../gnulib} diff --git a/lib/gnulib.mk.in b/lib/gnulib.mk.in index fb34cf2cc1d..cf7d0470f67 100644 --- a/lib/gnulib.mk.in +++ b/lib/gnulib.mk.in @@ -22,6 +22,7 @@ # Generated by gnulib-tool. # Reproduce by: # gnulib-tool --import \ +# --local-dir=./admin/gnulib-patches \ # --lib=libgnu \ # --source-base=lib \ # --m4-base=m4 \ commit 7ac6b33560a0449eb4b69664790f97124bfc2933 Author: João Távora Date: Fri Apr 18 19:45:54 2025 +0100 Eglot: use richer diagnostic-making capability of Flymake 1.4.0 * lisp/progmodes/eglot.el (Package-Requires): Require Flymake 1.4.0. (eglot-handle-notification): Tweak. diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index b077f4a6207..4121accedeb 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -7,7 +7,7 @@ ;; Maintainer: João Távora ;; URL: https://github.com/joaotavora/eglot ;; Keywords: convenience, languages -;; Package-Requires: ((emacs "26.3") (eldoc "1.14.0") (external-completion "0.1") (flymake "1.2.1") (jsonrpc "1.0.24") (project "0.9.8") (seq "2.23") (xref "1.6.2")) +;; Package-Requires: ((emacs "26.3") (eldoc "1.14.0") (external-completion "0.1") (flymake "1.4.0") (jsonrpc "1.0.24") (project "0.9.8") (seq "2.23") (xref "1.6.2")) ;; This is a GNU ELPA :core package. Avoid adding functionality ;; that is not available in the version of Emacs recorded above or any @@ -2684,8 +2684,6 @@ expensive cached value of `file-truename'.") ((<= sev 1) 'eglot-error) ((= sev 2) 'eglot-warning) (t 'eglot-note))) - (mess (source code message) - (concat source (and code (format " [%s]" code)) ": " message)) (find-it (abspath) ;; `find-buffer-visiting' would be natural, but calls the ;; potentially slow `file-truename' (bug#70036). @@ -2706,7 +2704,6 @@ expensive cached value of `file-truename'.") for diag-spec across diagnostics collect (eglot--dbind ((Diagnostic) range code message severity source tags) diag-spec - (setq message (mess source code message)) (pcase-let ((`(,beg . ,end) (eglot-range-region range))) ;; Fallback to `flymake-diag-region' if server @@ -2729,8 +2726,9 @@ expensive cached value of `file-truename'.") (eglot--make-diag (current-buffer) beg end (eglot--diag-type severity) - message `((eglot-lsp-diag . ,diag-spec) - (eglot--doc-version . ,version)) + (list source code message) + `((eglot-lsp-diag . ,diag-spec) + (eglot--doc-version . ,version)) (when-let* ((faces (cl-loop for tag across tags when (alist-get tag eglot--tag-faces) @@ -2748,12 +2746,12 @@ expensive cached value of `file-truename'.") (cl-loop for diag-spec across diagnostics collect (eglot--dbind ((Diagnostic) code range message severity source) diag-spec - (setq message (mess source code message)) (let* ((start (plist-get range :start)) (line (1+ (plist-get start :line))) (char (1+ (plist-get start :character)))) (eglot--make-diag - path (cons line char) nil (eglot--diag-type severity) message))) + path (cons line char) nil (eglot--diag-type severity) + (list source code message)))) into diags finally (setq flymake-list-only-diagnostics commit 64f4fbde8ae84c10f9e86ad1293c67ff78e867f0 Author: João Távora Date: Sat Apr 19 20:50:29 2025 +0100 Flymake: bump package version to 1.4.0 * lisp/progmodes/flymake.el (Version): Bump to 1.4.0. * etc/NEWS: Add entries for recent Flymake improvements. diff --git a/etc/NEWS b/etc/NEWS index 8ac0efa603e..4a52ec2a4f1 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1934,6 +1934,21 @@ it is bound by to mouse clicks on fringe and margin indicators, operating on the diagnostics of the corresponding line. The user may bind it in other situations such as the diagnostic overlay map. +*** More powerful 'flymake-make-diagnostic' API. +Flymake backends can now specify origin and code attributes, allowing +Flymake and other extensions to segregate diagnostics based on this +extended information. + +*** New user option 'flymake-diagnostic-format-alist'. +This provides fine-grained control over diagnostic formatting across +different contexts, allowing you to specify which components (origin, +code, message or one-liner message) appear in each output destination. + +*** Dynamic column sizing in diagnostic listings. +The tabulated listings produced by 'flymake-show-buffer-diagnostics' and +'flymake-show-project-diagnostics' now automatically their column widths +based on content, optimizing display space and readability. + ** SQLite +++ diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index 4d1e6ef74e6..8d63b23f2b8 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -4,7 +4,7 @@ ;; Author: Pavel Kobyakov ;; Maintainer: Spencer Baugh -;; Version: 1.3.7 +;; Version: 1.4.0 ;; Keywords: c languages tools ;; Package-Requires: ((emacs "26.1") (eldoc "1.14.0") (project "0.7.1")) commit 3001d50d9ae6e41b3f1d8e576b13a85198f60da9 Author: João Távora Date: Sun Apr 20 13:29:26 2025 +0100 Flymake: rework, simplify and address problems of recent change (bug#75841) Various problems were addressed: - Unbreak Flymake for Emacs 26.3. Due to use of some Elisp constructs, the change completely broke compatibility to Emacs < 29.1. That violated Flymake's status as a :core package as highlighted in its description, which has implications for packages depending on it (such as Eglot); - No new two commands are needed (they weren't documented in the manual anyway). The new functionality was integrated in the existing flymake-show-buffer-diagnostics; - Some helper functions aren't needed at all (they weren't marked internal anyway); - The new hook called only when a particular function is called non-interactively in a particular way is not useful. A case for the usefulness (if any) of this hook must be made separately. Such a hook should be documented in the manual; - Added missing recentering after revealing diagnostic in buffer; - The menu entry "List all problems" was never intended to direct the user the user to any particular problem at point; - The useful new functionality is called out in the manual and NEWS. * lisp/progmodes/flymake.el (flymake--indicator-overlay-spec): Use flymake-show-buffer-diagnostics-at-mouse. (flymake-mode-map): Recover old definition. (flymake-after-show-buffer-diagnostics-hook): Remove hook. (flymake-show-buffer-diagnostics): Rework. (flymake-show-diagnostic, flymake-goto-diagnostic): Rework docstring. (flymake-show-buffer-diagnostics-at-event-position) (flymake-show-buffer-diagnostics-at-event-line): Delete undocumented commands. (flymake-diagnostics-at-mouse-event) (flymake-pulse-momentary-highlight-region): Delete non-helpful helper. * doc/misc/flymake.texi (listing diagnostics): Mention new functionality. diff --git a/doc/misc/flymake.texi b/doc/misc/flymake.texi index dd60e0a1bca..e5d68f90a9b 100644 --- a/doc/misc/flymake.texi +++ b/doc/misc/flymake.texi @@ -178,6 +178,10 @@ listing includes the type of the diagnostic, its line and column in the file, as well as the diagnostic message. You may sort the listing by each of these columns. +When invoked on a diagnostic (either via the keyboard or a mouse click) +the command @code{flymake-show-buffer-diagnostics} attempts to reveal +said diagnostic in the listing. + @node Mode line status @section Mode line status @cindex flymake mode line diff --git a/etc/NEWS b/etc/NEWS index 56a45068daf..8ac0efa603e 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1927,6 +1927,13 @@ When 'flymake-indicator-type' is set to 'fringes', as is now the default, flymake will automatically fall back to using margin indicators in windows without fringes, including any window on a text terminal. +*** Enhanced 'flymake-show-buffer-diagnostics'. +The command 'flymake-show-buffer-diagnostics' is now capable of +highliting a nearby diagnostic in the resulting listing. Additionally, +it is bound by to mouse clicks on fringe and margin indicators, +operating on the diagnostics of the corresponding line. The user may +bind it in other situations such as the diagnostic overlay map. + ** SQLite +++ diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index 65733ad9568..4d1e6ef74e6 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -859,9 +859,11 @@ associated `flymake-category' return DEFAULT." 'face `(:inherit (,(cdr valuelist) default)) 'mouse-face 'highlight 'help-echo "Open Flymake diagnostics" - 'keymap `,(define-keymap - (format "<%s> " flymake-margin-indicator-position) - #'flymake-show-buffer-diagnostics-at-event-line)))))))) + 'keymap (let ((map (make-sparse-keymap))) + (define-key + map `[,flymake-margin-indicator-position mouse-1] + #'flymake-show-buffer-diagnostics) + map)))))))) (defun flymake--resize-margins (&optional orig-width) "Resize current window margins according to `flymake-margin-indicator-position'. @@ -1447,28 +1449,13 @@ Interactively, with a prefix arg, FORCE is t." nil))) (flymake--import-foreign-diagnostics)))))) -(defun flymake-show-buffer-diagnostics-at-event-line (event) - "Show diagnostics buffer on mouse click in the margin or fringe. -This uses two different approaches to work. -For margin it is set as a char property of the margin character directly. -While in the fringe it is set as part of the `flymake-mode-map'." - (interactive "e") - (when-let* ((diagnostics (flymake-diagnostics-at-mouse-event event t)) - (first-diag (car diagnostics))) - (with-selected-window (posn-window (event-end event)) - (with-current-buffer (window-buffer) - (when (or (< (point) (flymake-diagnostic-beg first-diag)) - (> (point) (flymake-diagnostic-end first-diag))) - (goto-char (flymake-diagnostic-beg first-diag))) - - (flymake-show-buffer-diagnostics first-diag))))) - -;; Set the fringe mouse-1 action directly and perform the filtering -;; latter iterating over the overlays. -(defvar-keymap flymake-mode-map - :doc "Keymap for `flymake-mode'." - (format "<%s> " flymake-fringe-indicator-position) - #'flymake-show-buffer-diagnostics-at-event-line) +(defvar flymake-mode-map + (let ((map (make-sparse-keymap))) + (define-key map + `[,flymake-fringe-indicator-position mouse-1] + #'flymake-show-buffer-diagnostics) + map) + "Keymap for `flymake-mode'") ;;;###autoload (define-minor-mode flymake-mode @@ -1721,28 +1708,6 @@ default) no filter is applied." t)) (flymake-goto-next-error (- (or n 1)) filter interactive)) -(defun flymake-diagnostics-at-mouse-event (event full-line) - "Get the flymake diagnostics for a position given by a mouse EVENT. -When FULL-LINE is not nil it gives all the diagnostics in the EVENT's -line. The function does not move the cursor position." - (mouse-minibuffer-check event) - (let* ((posn (event-end event)) - (pos (posn-point posn))) - (when (and (numberp pos) - (< pos (point-max))) ;; pos is == (point-max) when the click is after the buffer end. - (with-selected-window (posn-window posn) - (with-current-buffer (window-buffer) - (save-excursion - (goto-char pos) - (if full-line - (flymake-diagnostics (line-beginning-position) (line-end-position)) - (flymake-diagnostics pos (1+ pos))))))))) - -(defun flymake-show-buffer-diagnostics-at-event-position (event) - (interactive "e") - (flymake-show-buffer-diagnostics - (car (flymake-diagnostics-at-mouse-event event nil)))) - ;;; Mode-line and menu ;;; @@ -1751,7 +1716,7 @@ line. The function does not move the cursor position." [ "Go to next problem" flymake-goto-next-error t ] [ "Go to previous problem" flymake-goto-prev-error t ] [ "Check now" flymake-start t ] - [ "List all problems" flymake-show-buffer-diagnostics-at-event-position t ] + [ "List all problems" flymake-show-buffer-diagnostics t ] "--" [ "Go to log buffer" flymake-switch-to-log-buffer t ] [ "Turn off Flymake" flymake-mode t ])) @@ -1779,15 +1744,6 @@ Separating each of these with space is not necessary." :type 'string :version "29.1") -(defcustom flymake-after-show-buffer-diagnostics-hook '(flymake-pulse-momentary-highlight-region) - "Hook called after jumping to a diagnostic line. - -This hooks are called when `flymake-show-buffer-diagnostics' receives -the optional `diagnostic' argument and it matches an entry in the -diagnostic's buffer." - :type 'hook - :version "31.0") - (defvar flymake-mode-line-title '(:eval (flymake--mode-line-title)) "Mode-line construct to show Flymake's mode name and menu.") @@ -1958,19 +1914,8 @@ TYPE is usually keyword `:error', `:warning' or `:note'." (define-key map (kbd "SPC") 'flymake-show-diagnostic) map)) - -(defun flymake-pulse-momentary-highlight-region (&optional start end) - "Helper function to highlight region. -This uses the point `line-beginning-position' and `line-end-position' to -determine the optional START and END when the optional values are not -specified." - (pulse-momentary-highlight-region (or start (line-beginning-position)) - (or end (line-end-position)) - 'highlight)) - - (defun flymake-show-diagnostic (pos &optional other-window) - "Show location of diagnostic at POS." + "From Flymake diagnostics buffer, show source of diagnostic at POS." (interactive (list (point) t)) (let* ((id (or (tabulated-list-get-id pos) (user-error "Nothing at point"))) @@ -1980,7 +1925,8 @@ specified." (end (flymake--diag-end diag)) (visit (lambda (b e) (goto-char b) - (flymake-pulse-momentary-highlight-region b e)))) + (pulse-momentary-highlight-region + b (or e (line-end-position)))))) (with-current-buffer (cond ((bufferp locus) locus) (t (find-file-noselect locus))) (with-selected-window @@ -1999,7 +1945,7 @@ specified." (current-buffer)))) (defun flymake-goto-diagnostic (pos) - "Show location of diagnostic at POS. + "From Flymake diagnostics buffer, goto source of diagnostic at POS. POS can be a buffer position or a button" (interactive "d") (pop-to-buffer @@ -2154,8 +2100,35 @@ And also `flymake-project-diagnostics-mode'." (fit-window-to-buffer window 15 8)) (defun flymake-show-buffer-diagnostics (&optional diagnostic) - "Show a list of Flymake diagnostics for current buffer." - (interactive) + "Show listing of Flymake diagnostics for current buffer. +With optional DIAGNOSTIC, find and highlight this diagnostic in the +listing. + +Interactively, grab DIAGNOSTIC from context. For mouse events in +margins and fringes, use the first diagnostic in the corresponding line, +else look in the click position. For non-mouse events, look for +diagnostics at point. + +This function doesn't move point" + (interactive + (if (mouse-event-p last-command-event) + (with-selected-window (posn-window (event-end last-command-event)) + (with-current-buffer (window-buffer) + (let* ((event-point (posn-point (event-end last-command-event))) + (diags + (or + (flymake-diagnostics event-point) + (let (event-lbp event-lep) + (save-excursion + (goto-char event-point) + (setq event-lbp (line-beginning-position) + event-lep (line-end-position))) + (flymake-diagnostics event-lbp event-lep)))) + (diag (car diags))) + (unless diag + (error "No diagnostics here")) + (list diag)))) + (flymake-diagnostics (point)))) (unless flymake-mode (user-error "Flymake mode is not enabled in the current buffer")) (let* ((name (flymake--diagnostics-buffer-name)) @@ -2163,22 +2136,27 @@ And also `flymake-project-diagnostics-mode'." (target (or (get-buffer name) (with-current-buffer (get-buffer-create name) (flymake-diagnostics-buffer-mode) - (current-buffer))))) + (current-buffer)))) + window) (with-current-buffer target (setq flymake--diagnostics-buffer-source source) (revert-buffer) - (display-buffer (current-buffer) - `((display-buffer-reuse-window - display-buffer-below-selected) - (window-height . flymake--fit-diagnostics-window))) - (when (and diagnostic flymake-after-show-buffer-diagnostics-hook) - (goto-char (point-min)) - (catch 'done - (while-let ((id (tabulated-list-get-id (point)))) - (if (eq (plist-get id :diagnostic) diagnostic) - (progn (run-hooks 'flymake-after-show-buffer-diagnostics-hook) - (throw 'done nil)) - (forward-line)))))))) + (setq window + (display-buffer (current-buffer) + `((display-buffer-reuse-window + display-buffer-below-selected) + (window-height . flymake--fit-diagnostics-window)))) + (when (and window diagnostic) + (with-selected-window window + (cl-loop initially (goto-char (point-min)) + until (eobp) + until (eq (plist-get (tabulated-list-get-id) :diagnostic) + diagnostic) + do (forward-line) + finally + (recenter) + (pulse-momentary-highlight-one-line + (point) 'highlight))))))) ;;; Per-project diagnostic listing commit 77cd3a406b500f4106dde4b925fe4fec30b4a2fb Author: João Távora Date: Sun Apr 20 13:24:52 2025 +0100 Flymake: address some compatibility problems with older Emacsen Can't use with-supressed-warnings, introduced in Emacs 27.1. Also can't use multi-arg setq-local, probably introduced around the same time. This commit by itself still doesn't allow Flymake to be loaded in Emacs < 29. That fix will come in a later commit. * lisp/progmodes/flymake.el (flymake--mode-line-counter-map): Use with-no-warnings. * lisp/progmodes/flymake.el (flymake--resize-margins): Use setq, setq-local not needed. diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index 2ea91ccb15c..65733ad9568 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -871,14 +871,14 @@ Return to original margin width if ORIG-WIDTH is non-nil." (cond ((and orig-width flymake--original-margin-width) (if (eq flymake-margin-indicator-position 'left-margin) - (setq-local left-margin-width flymake--original-margin-width) - (setq-local right-margin-width flymake--original-margin-width))) + (setq left-margin-width flymake--original-margin-width) + (setq right-margin-width flymake--original-margin-width))) (t (if (eq flymake-margin-indicator-position 'left-margin) - (setq-local flymake--original-margin-width left-margin-width - left-margin-width 2) - (setq-local flymake--original-margin-width right-margin-width - right-margin-width 2)))) + (setq flymake--original-margin-width left-margin-width + left-margin-width 2) + (setq flymake--original-margin-width right-margin-width + right-margin-width 2)))) ;; Apply margin to all windows available. (mapc (lambda (x) (set-window-buffer x (window-buffer x))) @@ -1895,8 +1895,7 @@ correctly.") (let ((map (make-sparse-keymap))) ;; BEWARE: `mouse-wheel-UP-event' corresponds to `wheel-DOWN' events ;; and vice versa!! - (with-suppressed-warnings - ((obsolete mouse-wheel-up-event mouse-wheel-down-event)) + (with-no-warnings (define-key map (vector 'mode-line mouse-wheel-down-event) #'flymake--mode-line-counter-scroll-prev) (define-key map [mode-line wheel-down] commit 53d732d775fb416f6a412c2a87f12beed682c96c Author: João Távora Date: Fri Apr 18 23:08:37 2025 +0100 Flymake: dynamically resize and layout diagnostic listings Since 'origin' and 'code' are new separate optional attributes of each diagnostic, it becomes important to not waste space in these listings when these are absent. When a specific column isn't used by any line, omit it. Also spare just enough horizontal space to hold the largest element in each column. * lisp/progmodes/flymake.el (flymake--tabulated-setup): New helper. (flymake-diagnostics-buffer-mode) (flymake-project-diagnostics-mode): Use flymake--setup-tabulated-listing. (flymake--fit-diagnostics-window): New helper. (flymake--tabulated-list-format-base): Rename from flymake--diagnostics-base-tabulated-list-format. (flymake--tabulated-setup-1): Rename and rework from flymake--tabulated-entries-1. (flymake--diagnostics-buffer-entries): Remove. (flymake-diagnostics-buffer-mode) (flymake-project-diagnostics-mode): Simplify. (flymake--project-diagnostics-entries): Remove. diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index f2f59f05131..2ea91ccb15c 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -1948,8 +1948,9 @@ TYPE is usually keyword `:error', `:warning' or `:note'." (flymake--mode-line-counter-1 type)) probe))) -;;; Per-buffer diagnostic listing - + +;;; Per-buffer diagnostic listings +;;; (defvar-local flymake--diagnostics-buffer-source nil) (defvar flymake-diagnostics-buffer-mode-map @@ -2005,21 +2006,27 @@ POS can be a buffer position or a button" (pop-to-buffer (flymake-show-diagnostic (if (button-type pos) (button-start pos) pos)))) -(defun flymake--tabulated-diagnostic-origin (diag) - (or (flymake-diagnostic-origin diag) - (let* ((backend (flymake-diagnostic-backend diag)) - (bname (or (ignore-errors (symbol-name backend)) - "(anonymous function)"))) - (propertize - (replace-regexp-in-string "\\(.\\)[^-]+\\(-\\|$\\)" - "\\1\\2" bname) - 'help-echo (format "From `%s' backend" backend))))) - -(defun flymake--tabulated-entries-1 (diags project-root) - "Helper for `flymake--diagnostics-buffer-entries'. -PROJECT-ROOT indicates that each entry should be preceded by the -filename of the diagnostic relative to that directory." +(defvar flymake--tabulated-list-format-base + `[("File" 15) + ("Line" 5 ,(lambda (l1 l2) + (< (plist-get (car l1) :line) + (plist-get (car l2) :line))) + :right-align t) + ("Col" 3 nil :right-align t) + ("Type" 8 ,(lambda (l1 l2) + (< (plist-get (car l1) :severity) + (plist-get (car l2) :severity)))) + ("Origin" 8 t) + ("Code" 8 t) + ("Message" 0 t)]) + +(defun flymake--tabulated-setup-1 (diags project-root) + "Helper for `flymake--tabulated-setup'. +Sets `tabulated-list-format' and `tabulated-list-entries', dinamically +resizing columns and ommiting redudant columns." (cl-loop + with fields = (copy-tree flymake--tabulated-list-format-base t) + initially (cl-loop for y across fields do (setf (cadr y) nil)) for diag in diags for locus = (flymake-diagnostic-buffer diag) for file = (if (bufferp locus) @@ -2044,72 +2051,99 @@ filename of the diagnostic relative to that directory." (;; somehow dead annotated diagnostic, ignore/give up t nil)) for type = (flymake-diagnostic-type diag) - for origin = (flymake--tabulated-diagnostic-origin diag) - for data-vec = `[,(format "%s" line) - ,(format "%s" col) - ,(propertize (format "%s" - (flymake--lookup-type-property - type 'flymake-type-name type)) - 'face (flymake--lookup-type-property - type 'mode-line-face 'flymake-error)) - ,origin - (,(flymake-diagnostic-text diag '(oneliner)) - mouse-face highlight - help-echo "mouse-2: visit this diagnostic" - face nil - action flymake-goto-diagnostic - mouse-action flymake-goto-diagnostic)] - when (and line col) collect - (list (list :diagnostic diag - :line line - :severity (flymake--lookup-type-property - type - 'severity (warning-numeric-level :error))) - (if project-root - (vconcat `[(,(file-name-nondirectory file) - help-echo ,(file-relative-name file project-root) - face nil - mouse-face highlight - action flymake-goto-diagnostic - mouse-action flymake-goto-diagnostic )] - data-vec) - data-vec)))) - -(defun flymake--diagnostics-buffer-entries () - "Get tabulated list entries for current tabulated list buffer. -Expects `flymake--diagnostics-buffer-entries' to be bound to a -buffer." - ;; Do nothing if 'flymake--diagnostics-buffer-source' has not yet - ;; been set to a valid buffer. This could happen when this function - ;; is called too early. For example 'global-display-line-numbers-mode' - ;; calls us from its mode hook, when the diagnostic buffer has just - ;; been created by 'flymake-show-buffer-diagnostics', but is not yet - ;; set up properly (Bug#40529). - (when (bufferp flymake--diagnostics-buffer-source) - (with-current-buffer flymake--diagnostics-buffer-source - (when flymake-mode - (flymake--tabulated-entries-1 (flymake-diagnostics) nil))))) - -(defvar flymake--diagnostics-base-tabulated-list-format - `[("Line" 5 ,(lambda (l1 l2) - (< (plist-get (car l1) :line) - (plist-get (car l2) :line))) - :right-align t) - ("Col" 3 nil :right-align t) - ("Type" 8 ,(lambda (l1 l2) - (< (plist-get (car l1) :severity) - (plist-get (car l2) :severity)))) - ("Origin" 8 t) - ("Message" 0 t)]) + for data-line = `[,(and project-root + `(,(file-name-nondirectory file) + help-echo ,(file-relative-name file project-root) + face nil + mouse-face highlight + action flymake-goto-diagnostic + mouse-action flymake-goto-diagnostic )) + ,(format "%s" line) + ,(format "%s" col) + ,(propertize (format "%s" + (flymake--lookup-type-property + type 'flymake-type-name type)) + 'face (flymake--lookup-type-property + type 'mode-line-face 'flymake-error)) + ,(flymake-diagnostic-origin diag) + ,(flymake-diagnostic-code diag) + (,(flymake-diagnostic-text diag '(oneliner)) + mouse-face highlight + help-echo "mouse-2: visit this diagnostic" + face nil + action flymake-goto-diagnostic + mouse-action flymake-goto-diagnostic)] + for meta = (and line col + (list :diagnostic diag + :line line + :severity (flymake--lookup-type-property + type + 'severity (warning-numeric-level :error)))) + when meta + do (cl-loop for x across data-line + for y across fields + for z across flymake--tabulated-list-format-base + for xlen = (cond ((stringp x) (length x)) + (t (length (car x)))) + when (cl-plusp xlen) + do (setf (cadr y) + (max xlen + (or (cadr y) (cadr z))))) + collect (list meta data-line) into data + finally + ;; `data' and `fields' now hold more or less suitable values for + ;; `tabulated-list-entries' and `tabulated-list-format' respectively, + ;; but we need to trim them, first removing the columns of data where + ;; the corresponding field is known to be nil for every line, and + ;; then removing the field description itself. + (cl-loop + for entry in data + do (setf (cadr entry) (cl-loop for x across (cadr entry) + for y across fields + when (cadr y) + vconcat (vector (or x "-"))))) + (setq tabulated-list-entries data + tabulated-list-format + (cl-loop for y across fields + when (cadr y) vconcat (vector y))))) + +(defun flymake--tabulated-setup (use-project) + "Helper for `flymake-diagnostics-buffer-mode'. +And also `flymake-project-diagnostics-mode'." + (let ((saved-r-b-f revert-buffer-function) + (refresh + (lambda () + (cond + (use-project + (let ((p (project-current))) + (flymake--tabulated-setup-1 + (flymake--project-diagnostics p) + (project-root p)))) + (t + ;; Do nothing if 'flymake--diagnostics-buffer-source' has + ;; not yet been set to a valid buffer. This could happen + ;; when this function is called too early. For example + ;; 'global-display-line-numbers-mode' calls us from its + ;; mode hook, when the diagnostic buffer has just been + ;; created by 'flymake-show-buffer-diagnostics', but is not + ;; yet set up properly (Bug#40529). + (flymake--tabulated-setup-1 + (and (bufferp flymake--diagnostics-buffer-source) + (with-current-buffer flymake--diagnostics-buffer-source + (and flymake-mode + (flymake-diagnostics)))) + nil))) + (tabulated-list-init-header)))) + (setq revert-buffer-function + (lambda (&rest args) + (funcall refresh) + (apply saved-r-b-f args))))) (define-derived-mode flymake-diagnostics-buffer-mode tabulated-list-mode "Flymake diagnostics" "A mode for listing Flymake diagnostics." :interactive nil - (setq tabulated-list-format flymake--diagnostics-base-tabulated-list-format) - (setq tabulated-list-entries - 'flymake--diagnostics-buffer-entries) - (tabulated-list-init-header)) + (flymake--tabulated-setup nil)) (defun flymake--diagnostics-buffer-name () (format "*Flymake diagnostics for `%s'*" (current-buffer))) @@ -2117,6 +2151,9 @@ buffer." (define-obsolete-function-alias 'flymake-show-diagnostics-buffer 'flymake-show-buffer-diagnostics "1.2.1") +(defun flymake--fit-diagnostics-window (window) + (fit-window-to-buffer window 15 8)) + (defun flymake-show-buffer-diagnostics (&optional diagnostic) "Show a list of Flymake diagnostics for current buffer." (interactive) @@ -2134,8 +2171,7 @@ buffer." (display-buffer (current-buffer) `((display-buffer-reuse-window display-buffer-below-selected) - (window-height . (lambda (window) - (fit-window-to-buffer window 10))))) + (window-height . flymake--fit-diagnostics-window))) (when (and diagnostic flymake-after-show-buffer-diagnostics-hook) (goto-char (point-min)) (catch 'done @@ -2174,14 +2210,9 @@ some of this variable's contents the diagnostic listings.") (define-derived-mode flymake-project-diagnostics-mode tabulated-list-mode "Flymake diagnostics" - "A mode for listing Flymake diagnostics." + "A mode for listing Flymake diagnostics in a project." :interactive nil - (setq tabulated-list-format - (vconcat [("File" 25 t)] - flymake--diagnostics-base-tabulated-list-format)) - (setq tabulated-list-entries - 'flymake--project-diagnostics-entries) - (tabulated-list-init-header)) + (flymake--tabulated-setup t)) (cl-defun flymake--project-diagnostics (&optional (project (project-current))) "Get all known relevant diagnostics for PROJECT." @@ -2226,11 +2257,6 @@ some of this variable's contents the diagnostic listings.") append diags)) (append buffer-annotated-diags relevant-foreign-diags list-only-diags))) -(defun flymake--project-diagnostics-entries () - (let ((p (project-current))) - (flymake--tabulated-entries-1 (flymake--project-diagnostics p) - (project-root p)))) - (defun flymake--project-diagnostics-buffer (root) (get-buffer-create (format "*Flymake diagnostics for `%s'*" root))) @@ -2247,7 +2273,7 @@ some of this variable's contents the diagnostic listings.") (display-buffer (current-buffer) `((display-buffer-reuse-window display-buffer-at-bottom) - (window-height . fit-window-to-buffer)))))) + (window-height . flymake--fit-diagnostics-window)))))) (defun flymake--update-diagnostics-listings (buffer) "Update diagnostics listings somehow relevant to BUFFER." commit ed1311a62a4e02817e548b0873ab21114047c076 Author: João Távora Date: Fri Apr 18 19:43:45 2025 +0100 Flymake: new flymake-diagnostic-format-alist (bug#77439, bug#77480) * lisp/progmodes/flymake.el (flymake-diagnostic-text): Overhaul. (flymake-diagnostic-format-alist): New defcustom. (flymake--diagnostic-format): New util. (flymake--eol-overlay-summary) (flymake--highlight-line) (flymake-eldoc-function): Use flymake--diagnostic-format. (flymake--tabulated-diagnostic-origin): New helper. (flymake--tabulated-entries-1): Use flymake--tabulated-diagnostic-origin. (flymake--diagnostics-base-tabulated-list-format): "Backend" -> "Origin" * doc/misc/flymake.texi (Customizable variable): Mention new variable. diff --git a/doc/misc/flymake.texi b/doc/misc/flymake.texi index 0e43df17aa2..dd60e0a1bca 100644 --- a/doc/misc/flymake.texi +++ b/doc/misc/flymake.texi @@ -351,6 +351,9 @@ distracting and easily confused with actual code, or a significant early aid that relieves you from moving around or reaching for the mouse to consult an error message. +@item flymake-diagnostic-format-alist +Control which parts of a diagnostic to show in various situations. + @item flymake-error-eol A custom face for summarizing diagnostic error messages. diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index e63b7ed1675..f2f59f05131 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -449,30 +449,88 @@ diagnostics at BEG." (flymake--diag-accessor flymake-diagnostic-end flymake--diag-end end) (flymake--diag-accessor flymake-diagnostic-buffer flymake--diag-locus locus) -(defun flymake-diagnostic-text (diag) - "Get Flymake diagnostic DIAG's text." - (let ((a (flymake--diag-origin diag)) - (b (flymake--diag-code diag)) - (c (flymake--diag-message diag))) +(defcustom flymake-diagnostic-format-alist + '((:help-echo . (origin code oneliner)) + (:eol . (oneliner)) + (:eldoc . (origin code message)) + (:eldoc-echo . (origin code oneliner)) + (t . (origin code oneliner))) + "How to format diagnostics for different output destinations. +Value is an alist where each element looks like (DESTINATION . PARTS). +DESTINATION is a symbol designating an outlet. One of: + +- `:help-echo', for the native Flymake echoing of diagnostics in the + echo area as used my `flymake-goto-next-error' and `flymake-goto-prev-error'; +- `:eol', for use with `flymake-show-diagnostics-at-end-of-line'; +- `:eldoc', for use with Flymake's ElDoc backend; +- `:eldoc-echo', for use with Flymake's ElDoc backend, but for ElDoc's own + confined outlets; +- t for all other destinations. + +PARTS says which parts of the diagnostic to include. It is a list of +symbols where the following values are meaningful: + +- `origin': include diagnostic origin if it exists; +- `code': include diagnostics code if it exists; +- `message': include the full diagnostic's message text; +- `oneliner': include truncated diagnostic text;" + :package-version '(Flymake . "1.4.0") + :type '(alist :key-type (choice (const :help-echo) + (const :eol) + (const :eldoc) + (const :eldoc-echo) + (const t)) + :value-type (set (const origin) + (const code) + (const message) + (const oneliner)))) + +(cl-defun flymake-diagnostic-text (diag + &optional (parts '(origin code message))) + "Describe diagnostic DIAG's as a string. +PARTS says which parts of the diagnostic to include. It is a list of +symbols as described in `flymake-diagnostic-format-alist' (which see). +PARTS defaults to `(origin code message)'." + (let* ((w parts) + (a (and (memq 'origin w) (flymake--diag-origin diag))) + (b (and (memq 'code w) (flymake--diag-code diag))) + (c (cond ((memq 'message w) (flymake--diag-message diag)) + ((memq 'oneliner w) + (let* ((msg (flymake--diag-message diag))) + (substring msg 0 (cl-loop for i from 0 for a across msg + when (eq a ?\n) return i))))))) (concat a (when (and a b) " ") (when b (concat "[" b "]")) (when (and c (or a b)) ": ") c))) +(defun flymake--format-diagnostic (diag destination face-prop) + (let ((txt (flymake-diagnostic-text + diag (alist-get destination flymake-diagnostic-format-alist + (alist-get t flymake-diagnostic-format-alist + '(origin code message)))))) + (if face-prop + (propertize txt 'face + (flymake--lookup-type-property + (flymake-diagnostic-type diag) face-prop + 'flymake-error)) + txt))) + (defun flymake-diagnostic-oneliner (diag &optional nopaintp) "Get truncated one-line text string for diagnostic DIAG. This is useful for displaying the DIAG's text to the user in confined spaces, such as the echo are. Unless NOPAINTP is t, propertize returned text with the `echo-face' property of DIAG's type." - (let* ((txt (flymake-diagnostic-text diag)) - (txt (substring txt 0 (cl-loop for i from 0 for a across txt - when (eq a ?\n) return i)))) + (let* ((txt (flymake-diagnostic-text diag '(origin code oneliner)))) (if nopaintp txt (propertize txt 'face (flymake--lookup-type-property (flymake-diagnostic-type diag) 'echo-face 'flymake-error))))) +(make-obsolete 'flymake-diagnostic-oneliner + "use `flymake-diagnostic-text' instead." + "Flymake package version 1.4.0") (cl-defun flymake--really-all-overlays () "Get flymake-related overlays. @@ -849,9 +907,7 @@ Return to original margin width if ORIG-WIDTH is non-nil." (defun flymake--eol-overlay-summary (src-ovs) "Helper function for `flymake--update-eol-overlays'." (cl-flet ((summarize (d) - (propertize (flymake-diagnostic-oneliner d t) 'face - (flymake--lookup-type-property (flymake--diag-type d) - 'eol-face)))) + (flymake--format-diagnostic d :eol 'eol-face))) (let* ((diags (cl-sort (mapcar (lambda (o) (overlay-get o 'flymake-diagnostic)) src-ovs) @@ -978,7 +1034,8 @@ Return nil or the overlay created." (lambda (window _ov pos) (with-selected-window window (mapconcat - #'flymake-diagnostic-oneliner + (lambda (d) + (flymake--format-diagnostic d :help-echo 'echo-face)) (flymake-diagnostics pos) "\n")))) (default-maybe 'severity (warning-numeric-level :error)) @@ -1584,9 +1641,13 @@ START and STOP and LEN are as in `after-change-functions'." Intended for `eldoc-documentation-functions' (which see)." (when-let* ((diags (flymake-diagnostics (point)))) (funcall report-doc - (mapconcat #'flymake-diagnostic-text diags "\n") - :echo (mapconcat #'flymake-diagnostic-oneliner - diags "\n")))) + (mapconcat (lambda (d) + (flymake--format-diagnostic d :eldoc 'echo-face)) + diags "\n") + :echo (mapconcat + (lambda (d) + (flymake--format-diagnostic d :eldoc-echo 'echo-face)) + diags "\n")))) (defun flymake-goto-next-error (&optional n filter interactive) "Go to Nth next Flymake diagnostic that matches FILTER. @@ -1944,6 +2005,16 @@ POS can be a buffer position or a button" (pop-to-buffer (flymake-show-diagnostic (if (button-type pos) (button-start pos) pos)))) +(defun flymake--tabulated-diagnostic-origin (diag) + (or (flymake-diagnostic-origin diag) + (let* ((backend (flymake-diagnostic-backend diag)) + (bname (or (ignore-errors (symbol-name backend)) + "(anonymous function)"))) + (propertize + (replace-regexp-in-string "\\(.\\)[^-]+\\(-\\|$\\)" + "\\1\\2" bname) + 'help-echo (format "From `%s' backend" backend))))) + (defun flymake--tabulated-entries-1 (diags project-root) "Helper for `flymake--diagnostics-buffer-entries'. PROJECT-ROOT indicates that each entry should be preceded by the @@ -1973,9 +2044,7 @@ filename of the diagnostic relative to that directory." (;; somehow dead annotated diagnostic, ignore/give up t nil)) for type = (flymake-diagnostic-type diag) - for backend = (flymake-diagnostic-backend diag) - for bname = (or (ignore-errors (symbol-name backend)) - "(anonymous function)") + for origin = (flymake--tabulated-diagnostic-origin diag) for data-vec = `[,(format "%s" line) ,(format "%s" col) ,(propertize (format "%s" @@ -1983,13 +2052,8 @@ filename of the diagnostic relative to that directory." type 'flymake-type-name type)) 'face (flymake--lookup-type-property type 'mode-line-face 'flymake-error)) - ,(propertize - (if bname - (replace-regexp-in-string "\\(.\\)[^-]+\\(-\\|$\\)" - "\\1\\2" bname) - "(anon)") - 'help-echo (format "From `%s' backend" backend)) - (,(flymake-diagnostic-oneliner diag t) + ,origin + (,(flymake-diagnostic-text diag '(oneliner)) mouse-face highlight help-echo "mouse-2: visit this diagnostic" face nil @@ -2035,7 +2099,7 @@ buffer." ("Type" 8 ,(lambda (l1 l2) (< (plist-get (car l1) :severity) (plist-get (car l2) :severity)))) - ("Backend" 8 t) + ("Origin" 8 t) ("Message" 0 t)]) (define-derived-mode flymake-diagnostics-buffer-mode tabulated-list-mode commit 0fe05a920adc457d6f4adca71979059b8e2d0253 Author: João Távora Date: Thu Apr 17 22:00:39 2025 +0100 Flymake: more powerful flymake-make-diagnostic and rework manual Flymake backends may now explicitly specify an origin and a code for a diagnostic in addition to the textual description. This change lays groundwork for richer diagnostic listings and user options for summarizing diagnostics, addressing bug#77439 and bug#77480. * doc/misc/flymake.texi (Flymake API): Rename from "Extending Flymake". Rework. (Inspecting diagnostics): New section. * lisp/progmodes/flymake.el (flymake--diag): Add origin, code and message. Remove text. (flymake-make-diagnostic): Support new origin, code and message. (flymake-diagnostic-text): Rework. diff --git a/doc/misc/flymake.texi b/doc/misc/flymake.texi index 668a72b4cd1..0e43df17aa2 100644 --- a/doc/misc/flymake.texi +++ b/doc/misc/flymake.texi @@ -62,7 +62,7 @@ To learn about using Flymake, @pxref{Using Flymake}. When the Emacs LSP support mode Eglot is enabled, Flymake will use that as an additional back-end. @xref{Eglot Features,,, eglot, Eglot: The Emacs LSP Client}. Flymake is also designed to be easily extended to -support new backends via an Elisp interface. @xref{Extending Flymake}. +support new backends via an Elisp interface. @xref{Flymake API}. @ifnottex @insertcopying @@ -70,7 +70,7 @@ support new backends via an Elisp interface. @xref{Extending Flymake}. @menu * Using Flymake:: -* Extending Flymake:: +* Flymake API:: * The legacy Proc backend:: * GNU Free Documentation License:: * Index:: @@ -210,7 +210,7 @@ investigate and remedy the situation (@pxref{Troubleshooting}). @item @code{?} @tab There are no applicable Flymake backends for this buffer, thus Flymake cannot annotate it. To fix this, a user may look to extending Flymake -and add a new backend (@pxref{Extending Flymake}). +and add a new backend (@pxref{Flymake API}). @end multitable @@ -361,19 +361,23 @@ A custom face for summarizing diagnostic warning messages. A custom face for summarizing diagnostic notes. @end vtable -@node Extending Flymake -@chapter Extending Flymake +@node Flymake API, The legacy Proc backend, Using Flymake, Top +@chapter Flymake API @cindex extending flymake -Flymake can primarily be extended in one of two ways: +Flymake's API supports the following use cases: @enumerate @item -By changing the look and feel of the annotations produced by the +Changing the look and feel of the annotations produced by the different backends. @xref{Flymake error types}. @item -By adding a new buffer-checking backend. @xref{Backend functions}. +Adding a new buffer-checking backend. @xref{Backend functions}. + +@item +Writing extension to and process Flymake's output. @xref{Inspecting +diagnostics}. @end enumerate The following sections discuss each approach in detail. @@ -381,6 +385,7 @@ The following sections discuss each approach in detail. @menu * Flymake error types:: * Backend functions:: +* Inspecting diagnostics:: @end menu @node Flymake error types @@ -673,37 +678,19 @@ reports targeting other parts of the buffer remain valid. Before delivering them to Flymake, backends create diagnostic objects by calling the function @code{flymake-make-diagnostic}. -@deffn Function flymake-make-diagnostic locus beg end type text &optional data +@deffn Function flymake-make-diagnostic locus beg end type info &optional data Make a Flymake diagnostic for the region of text in @var{locus}'s -delimited by @var{beg} and @var{end}. @var{type} is a diagnostic -symbol (@pxref{Flymake error types}), and @var{text} is a description -of the problem detected in this region. Most commonly @var{locus} is -the buffer object designating for the current buffer being -syntax-checked. However, it may be a string naming a file relative -to the current working directory. @xref{Foreign and list-only -diagnostics}, for when this may be useful. Depending on the type of -@var{locus}, @var{beg} and @var{end} are both either buffer positions -or conses (@var{line} . @var{col}) which specify the line and column -of the diagnostic's start and end positions, respectively. -@end deffn - -@cindex access diagnostic object -These objects' properties can be accessed with the functions -@code{flymake-diagnostic-backend}, @code{flymake-diagnostic-buffer}, -@code{flymake-diagnostic-text}, @code{flymake-diagnostic-beg}, -@code{flymake-diagnostic-end}, @code{flymake-diagnostic-type} and -@code{flymake-diagnostic-data}. - -Additionally, the function @code{flymake-diagnostics} will collect -such objects in the region you specify. - -@cindex collect diagnostic objects -@deffn Function flymake-diagnostics beg end -Get a list of Flymake diagnostics in the region determined by -@var{beg} and @var{end}. If neither @var{beg} or @var{end} is -supplied, use the whole buffer, otherwise if @var{beg} is -non-@code{nil} and @var{end} is @code{nil}, consider only diagnostics -at @var{beg}. +delimited by @var{beg} and @var{end}. @var{type} is a diagnostic symbol +(@pxref{Flymake error types}). @var{text} can be a string or a list +(@var{origin} @var{code} @var{message}) appropriately categorizing and +describing the diagnostic. Most commonly, @var{locus} is the buffer +object designating for the current buffer being syntax-checked. +However, it may be a string naming a file relative to the current +working directory. @xref{Foreign and list-only diagnostics}, for when +this may be useful. Depending on the type of @var{locus}, @var{beg} and +@var{end} are both either buffer positions or conses (@var{line} +. @var{col}) which specify the line and column of the diagnostic's start +and end positions, respectively. @end deffn @cindex buffer position from line and column number @@ -900,6 +887,32 @@ Binding,,, elisp, The Emacs Lisp Reference Manual}) to be active. @end group @end example +@node Inspecting diagnostics +@section Inspecting diagnostics + +When Flymake has called on the backend and collected its diagnostics, it +will annotate the buffer with it. After this happens, Elisp programs +may call @code{flymake-diagnostics} to collect such objects in a +specified region. + +@cindex collect diagnostic objects +@deffn Function flymake-diagnostics beg end +Get a list of Flymake diagnostics in the region determined by +@var{beg} and @var{end}. If neither @var{beg} or @var{end} is +supplied, use the whole buffer, otherwise if @var{beg} is +non-@code{nil} and @var{end} is @code{nil}, consider only diagnostics +at @var{beg}. +@end deffn + +@cindex access diagnostic object +A diagnostic object's properties can be accessed with the functions +@code{flymake-diagnostic-backend}, @code{flymake-diagnostic-buffer}, +@code{flymake-diagnostic-origin}, @code{flymake-diagnostic-code} +@code{flymake-diagnostic-message}, @code{flymake-diagnostic-beg}, +@code{flymake-diagnostic-end}, @code{flymake-diagnostic-type} and +@code{flymake-diagnostic-data}. @code{flymake-diagnostic-text} will +compose the diagnostic's origin, code and message in a single string. + @node The legacy Proc backend @chapter The legacy ``Proc'' backend @cindex legacy proc backend diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index 7340fed9be4..e63b7ed1675 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -371,7 +371,7 @@ generated it." (cl-defstruct (flymake--diag (:constructor flymake--diag-make)) - locus beg end type text backend data overlay-properties overlay + locus beg end type origin code message backend data overlay-properties overlay ;; FIXME: See usage of these two in `flymake--highlight-line'. ;; Ideally they wouldn't be needed. orig-beg orig-end) @@ -381,32 +381,39 @@ generated it." beg end type - text + info &optional data overlay-properties) "Make a Flymake diagnostic for LOCUS's region from BEG to END. LOCUS is a buffer object or a string designating a file name. -TYPE is a diagnostic symbol and TEXT is string describing the -problem detected in this region. DATA is any object that the -caller wishes to attach to the created diagnostic for later -retrieval with `flymake-diagnostic-data'. - -If LOCUS is a buffer BEG and END should be buffer positions -inside it. If LOCUS designates a file, BEG and END should be a -cons (LINE . COL) indicating a file position. In this second -case, END may be omitted in which case the region is computed -using `flymake-diag-region' if the diagnostic is appended to an -actual buffer. - -OVERLAY-PROPERTIES is an alist of properties attached to the -created diagnostic, overriding the default properties and any -properties listed in the `flymake-overlay-control' property of -the diagnostic's type symbol." +TYPE is a diagnostic symbol (see Info Node `(Flymake)Flymake error +types') + +INFO is a description of the problem detected. It may be a string, or +list of three strings (ORIGIN CODE MESSAGE) appropriately categorizing +and describing the diagnostic. + +DATA is any object that the caller wishes to attach to the created +diagnostic for later retrieval with `flymake-diagnostic-data'. + +If LOCUS is a buffer, BEG and END should be buffer positions inside it. +If LOCUS designates a file, BEG and END should be a cons (LINE . COL) +indicating a file position. In this second case, END may be omitted in +which case the region is computed using `flymake-diag-region' if the +diagnostic is appended to an actual buffer. + +OVERLAY-PROPERTIES is an alist of properties attached to the created +diagnostic, overriding the default properties and any properties listed +in the `flymake-overlay-control' property of the diagnostic's type +symbol." (when (stringp locus) (setq locus (expand-file-name locus))) + (when (stringp info) + (setq info (list nil nil info))) (flymake--diag-make :locus locus :beg beg :end end - :type type :text text :data data + :type type :origin (car info) :code (cadr info) + :message (caddr info) :data data :overlay-properties overlay-properties :orig-beg beg :orig-end end)) @@ -432,14 +439,27 @@ diagnostics at BEG." ,(format "Get Flymake diagnostic DIAG's %s." (symbol-name thing)) (,internal diag))) -(flymake--diag-accessor flymake-diagnostic-text flymake--diag-text text) (flymake--diag-accessor flymake-diagnostic-type flymake--diag-type type) (flymake--diag-accessor flymake-diagnostic-backend flymake--diag-backend backend) +(flymake--diag-accessor flymake-diagnostic-origin flymake--diag-origin backend) +(flymake--diag-accessor flymake-diagnostic-code flymake--diag-code backend) +(flymake--diag-accessor flymake-diagnostic-message flymake--diag-message backend) (flymake--diag-accessor flymake-diagnostic-data flymake--diag-data data) (flymake--diag-accessor flymake-diagnostic-beg flymake--diag-beg beg) (flymake--diag-accessor flymake-diagnostic-end flymake--diag-end end) (flymake--diag-accessor flymake-diagnostic-buffer flymake--diag-locus locus) +(defun flymake-diagnostic-text (diag) + "Get Flymake diagnostic DIAG's text." + (let ((a (flymake--diag-origin diag)) + (b (flymake--diag-code diag)) + (c (flymake--diag-message diag))) + (concat a + (when (and a b) " ") + (when b (concat "[" b "]")) + (when (and c (or a b)) ": ") + c))) + (defun flymake-diagnostic-oneliner (diag &optional nopaintp) "Get truncated one-line text string for diagnostic DIAG. This is useful for displaying the DIAG's text to the user in @@ -813,7 +833,9 @@ Return to original margin width if ORIG-WIDTH is non-nil." flymake--diag-beg flymake-diagnostic-type flymake-diagnostic-backend - flymake-diagnostic-text) + flymake-diagnostic-origin + flymake-diagnostic-code + flymake-diagnostic-message) always (equal (funcall comp a) (funcall comp b))))) (defun flymake--delete-overlay (ov) commit b38fd553eb3291f140801ca158f6ab245496fa69 Author: Juri Linkov Date: Sun Apr 20 21:29:36 2025 +0300 * lisp/treesit.el (treesit-show-paren-data--categorize): Fix off-by-one error. (bug#77906) diff --git a/lisp/treesit.el b/lisp/treesit.el index 69abef22e0e..b9441618024 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -4206,7 +4206,7 @@ Expected to be called after each text change." (defun treesit-show-paren-data--categorize (pos &optional end-p) (let* ((pred 'list) (parent (when (treesit-thing-defined-p - pred (treesit-language-at pos)) + pred (treesit-language-at (if end-p (1- pos) pos))) (treesit-parent-until (treesit-node-at (if end-p (1- pos) pos)) pred))) (first (when parent (treesit-node-child parent 0))) commit d7b56fc2ee9d32f6fd9f3b6e8d3772fb714f0f32 Author: Juri Linkov Date: Sun Apr 20 20:46:31 2025 +0300 * lisp/treesit.el (treesit-cycle-sexp-type): Add optional arg 'interactive'. Display the message only for interactive usage. diff --git a/lisp/treesit.el b/lisp/treesit.el index 72459a5a94f..69abef22e0e 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -3200,7 +3200,7 @@ ARG is described in the docstring of `up-list'." (point) (point)))))) (setq cnt (- cnt inc))))) -(defun treesit-cycle-sexp-type () +(defun treesit-cycle-sexp-type (&optional interactive) "Cycle the type of navigation for sexp and list commands. This type affects navigation commands such as `treesit-forward-sexp', `treesit-forward-list', `treesit-down-list', `treesit-up-list'. @@ -3214,9 +3214,9 @@ navigate symbols and treesit definition to navigate lists. The `sexp' type uses the `sexp' thing defined in `treesit-thing-settings'. With this type commands use only the treesit definition of parser nodes, without distinction between symbols and lists." - (interactive) + (interactive "p") (if (not (treesit-thing-defined-p 'list (treesit-language-at (point)))) - (message "No `list' thing is defined in `treesit-thing-settings'") + (user-error "No `list' thing is defined in `treesit-thing-settings'") (setq-local treesit-sexp-type-regexp (unless treesit-sexp-type-regexp (if (treesit-thing-defined-p @@ -3227,10 +3227,11 @@ without distinction between symbols and lists." (if treesit-sexp-type-regexp #'treesit-forward-sexp #'treesit-forward-sexp-list)) - (message "Cycle sexp type to navigate %s" - (or (and treesit-sexp-type-regexp - "treesit nodes") - "syntax symbols and treesit lists")))) + (when interactive + (message "Cycle sexp type to navigate %s" + (or (and treesit-sexp-type-regexp + "treesit nodes") + "syntax symbols and treesit lists"))))) (defun treesit-transpose-sexps (&optional arg) "Tree-sitter `transpose-sexps' function. commit 4151a44f605631d8d4028e1c2458a0a8c206a64d Author: Juri Linkov Date: Sun Apr 20 20:43:53 2025 +0300 ; * test/infra/Dockerfile.emba: Add cmake/markdown/php/phpdoc/toml/yaml. diff --git a/test/infra/Dockerfile.emba b/test/infra/Dockerfile.emba index c4bae4ed731..3fbca2a38b5 100644 --- a/test/infra/Dockerfile.emba +++ b/test/infra/Dockerfile.emba @@ -135,6 +135,7 @@ RUN src/emacs -Q --batch \ (quote ((bash "https://github.com/tree-sitter/tree-sitter-bash" "v0.23.3") \ (c "https://github.com/tree-sitter/tree-sitter-c" "v0.23.4") \ (c-sharp "https://github.com/tree-sitter/tree-sitter-c-sharp" "v0.23.1") \ + (cmake "https://github.com/uyha/tree-sitter-cmake" "v0.5.0") \ (cpp "https://github.com/tree-sitter/tree-sitter-cpp" "v0.23.4") \ (css "https://github.com/tree-sitter/tree-sitter-css" "v0.23.1") \ (elixir "https://github.com/elixir-lang/tree-sitter-elixir" "v0.3.3") \ @@ -148,11 +149,17 @@ RUN src/emacs -Q --batch \ (jsdoc "https://github.com/tree-sitter/tree-sitter-jsdoc" "v0.23.2") \ (json "https://github.com/tree-sitter/tree-sitter-json" "v0.24.8") \ (lua "https://github.com/tree-sitter-grammars/tree-sitter-lua" "v0.3.0") \ + (markdown "https://github.com/tree-sitter-grammars/tree-sitter-markdown" "v0.4.1" "tree-sitter-markdown/src") \ + (markdown-inline "https://github.com/tree-sitter-grammars/tree-sitter-markdown" "v0.4.1" "tree-sitter-markdown-inline/src") \ + (php "https://github.com/tree-sitter/tree-sitter-php" "v0.23.11" "php/src") \ + (phpdoc "https://github.com/claytonrcarter/tree-sitter-phpdoc") \ (python "https://github.com/tree-sitter/tree-sitter-python" "v0.23.6") \ (ruby "https://github.com/tree-sitter/tree-sitter-ruby" "v0.23.1") \ (rust "https://github.com/tree-sitter/tree-sitter-rust" "v0.23.2") \ + (toml "https://github.com/tree-sitter-grammars/tree-sitter-toml" "v0.7.0") \ (tsx "https://github.com/tree-sitter/tree-sitter-typescript" "v0.23.2" "tsx/src") \ - (typescript "https://github.com/tree-sitter/tree-sitter-typescript" "v0.23.2" "typescript/src"))))' \ + (typescript "https://github.com/tree-sitter/tree-sitter-typescript" "v0.23.2" "typescript/src") \ + (yaml "https://github.com/tree-sitter-grammars/tree-sitter-yaml" "v0.7.0"))))' \ --eval '(dolist (lang (mapcar (quote car) treesit-language-source-alist)) \ (treesit-install-language-grammar lang "/root/.emacs.d/tree-sitter"))' commit 25854625332b0f751e0cea3e4d598023cbfc2781 Author: Juri Linkov Date: Sun Apr 20 20:39:41 2025 +0300 Fix indentation test failure for elixir-ts--indent-rules * lisp/progmodes/elixir-ts-mode.el (elixir-ts--indent-rules): Add query for Elixir embedded in Heex (bug#76788). * lisp/progmodes/heex-ts-mode.el (heex-ts-mode): Append treesit-simple-indent-rules to elixir-ts--indent-rules. diff --git a/lisp/progmodes/elixir-ts-mode.el b/lisp/progmodes/elixir-ts-mode.el index 3a136894454..f7d6932c7c2 100644 --- a/lisp/progmodes/elixir-ts-mode.el +++ b/lisp/progmodes/elixir-ts-mode.el @@ -244,7 +244,21 @@ (defvar elixir-ts--indent-rules (let ((offset elixir-ts-indent-offset)) `((elixir - ((parent-is "^source$") column-0 0) + ((parent-is "^source$") + ,(lambda (_node _parent bol &rest _) + ;; If Elixir is embedded indent to parent + ;; otherwise indent to the bol. + (if (treesit-local-parsers-at (point)) + (save-excursion + (goto-char (treesit-node-start + (treesit-node-at bol 'heex))) + (back-to-indentation) + (point)) + (pos-bol))) + ,(lambda (_node _parent _bol &rest _) + (if (treesit-local-parsers-at (point)) + elixir-ts-indent-offset + 0))) ((parent-is "^string$") parent-bol 0) ((parent-is "^quoted_content$") (lambda (_n parent bol &rest _) diff --git a/lisp/progmodes/heex-ts-mode.el b/lisp/progmodes/heex-ts-mode.el index a5fc6e2e232..2d6dce784bc 100644 --- a/lisp/progmodes/heex-ts-mode.el +++ b/lisp/progmodes/heex-ts-mode.el @@ -188,6 +188,7 @@ Return nil if NODE is not a defun node or doesn't have a name." (defvar elixir-ts--font-lock-settings) (defvar elixir-ts--font-lock-feature-list) +(defvar elixir-ts--indent-rules) (defvar elixir-ts--thing-settings) ;;;###autoload @@ -244,6 +245,10 @@ Return nil if NODE is not a defun node or doesn't have a name." treesit-font-lock-feature-list elixir-ts--font-lock-feature-list)) + (setq-local treesit-simple-indent-rules + (append treesit-simple-indent-rules + elixir-ts--indent-rules)) + (setq-local treesit-thing-settings (append treesit-thing-settings `((elixir ,@elixir-ts--thing-settings))))) commit 8c04396b198e81c1467314e44b720e3322ca8643 Author: Michael Albinus Date: Sun Apr 20 18:16:14 2025 +0200 Fix emerge.el for remote files * lisp/vc/emerge.el (emerge-make-diff-list) (emerge-make-diff3-list): Set proper `default-directory' in order to support remote files. (Bug#6850, Bug#74352) * test/lisp/vc/emerge-tests.el: New file. diff --git a/lisp/vc/emerge.el b/lisp/vc/emerge.el index 45405028df9..56afcf4b7af 100644 --- a/lisp/vc/emerge.el +++ b/lisp/vc/emerge.el @@ -583,6 +583,7 @@ This is *not* a user option, since Emerge uses it for its own processing.") (with-current-buffer emerge-diff-buffer (erase-buffer) + (setq default-directory temporary-file-directory) (shell-command (format "%s %s %s %s" (shell-quote-argument emerge-diff-program) @@ -755,16 +756,17 @@ This is *not* a user option, since Emerge uses it for its own processing.") (defun emerge-make-diff3-list (file-A file-B file-ancestor) (setq emerge-diff-buffer (get-buffer-create "*emerge-diff*")) (with-current-buffer - emerge-diff-buffer - (erase-buffer) - (shell-command - (format "%s %s %s %s %s" - (shell-quote-argument emerge-diff3-program) - emerge-diff-options - (shell-quote-argument file-A) - (shell-quote-argument file-ancestor) - (shell-quote-argument file-B)) - t)) + emerge-diff-buffer + (erase-buffer) + (setq default-directory temporary-file-directory) + (shell-command + (format "%s %s %s %s %s" + (shell-quote-argument emerge-diff3-program) + emerge-diff-options + (shell-quote-argument file-A) + (shell-quote-argument file-ancestor) + (shell-quote-argument file-B)) + t)) (emerge-prepare-error-list emerge-diff3-ok-lines-regexp) (emerge-convert-diffs-to-markers emerge-A-buffer emerge-B-buffer emerge-merge-buffer diff --git a/test/lisp/vc/emerge-tests.el b/test/lisp/vc/emerge-tests.el new file mode 100644 index 00000000000..e9c92dfaa79 --- /dev/null +++ b/test/lisp/vc/emerge-tests.el @@ -0,0 +1,81 @@ +;;; emerge-tests.el --- Tests of shadowfile -*- lexical-binding:t -*- + +(require 'tramp) +(require 'ert-x) +(require 'emerge) + +(setq auth-source-save-behavior nil + password-cache-expiry nil + ;; When the remote user id is 0, Tramp refuses unsafe temporary files. + tramp-allow-unsafe-temporary-files + (or tramp-allow-unsafe-temporary-files noninteractive) + tramp-cache-read-persistent-data t ;; For auth-sources. + tramp-persistency-file-name nil + tramp-verbose 0 + ;; On macOS, `temporary-file-directory' is a symlinked directory. + temporary-file-directory (file-truename temporary-file-directory) + ert-remote-temporary-file-directory + (ignore-errors (file-truename ert-remote-temporary-file-directory))) + +(ert-deftest emerge-test-files () + "Check emerge for two files." + (skip-when (memq system-type '(windows-nt ms-dos))) + (skip-unless (file-remote-p ert-remote-temporary-file-directory)) + + ;; Remote file. + (ert-with-temp-file + file1 :prefix (expand-file-name "emerge-tests" ert-remote-temporary-file-directory) :text "foo" + ;; Local file. + (ert-with-temp-file + file2 :prefix (expand-file-name "emerge-tests" temporary-file-directory) :text "foo" + ;; Output. + (ert-with-temp-file + file3 :prefix (expand-file-name "emerge-tests" temporary-file-directory) + + ;; Run emerge. + (should (emerge-files nil file1 file2 file3)) + (cl-letf (((symbol-function #'y-or-n-p) #'always)) + (emerge-quit nil)) + + ;; Check result. + (with-temp-buffer + (insert-file-contents file3) + (should (string-equal "foo" (buffer-string)))))))) + +(ert-deftest emerge-test-files-with-ancestor () + "Check emerge for three files." + (skip-when (memq system-type '(windows-nt ms-dos))) + (skip-unless (file-remote-p ert-remote-temporary-file-directory)) + + ;; Remote file. + (ert-with-temp-file + file1 :prefix (expand-file-name "emerge-tests" ert-remote-temporary-file-directory) :text "foo" + ;; Local file. + (ert-with-temp-file + file2 :prefix (expand-file-name "emerge-tests" temporary-file-directory) :text "foo" + ;; Remote file. + (ert-with-temp-file + file3 :prefix (expand-file-name "emerge-tests" ert-remote-temporary-file-directory) :text "foo" + ;; Output. + (ert-with-temp-file + file4 :prefix (expand-file-name "emerge-tests" temporary-file-directory) + + ;; Run emerge. + (should (emerge-files-with-ancestor nil file1 file2 file3 file4)) + (cl-letf (((symbol-function #'y-or-n-p) #'always)) + (emerge-quit nil)) + + ;; Check result. + (with-temp-buffer + (insert-file-contents file4) + (should (string-equal "foo" (buffer-string))))))))) + +(defun emerge-test-all (&optional interactive) + "Run all tests for `emerge-*'." + (interactive "p") + (if interactive + (ert-run-tests-interactively "^emerge-") + (ert-run-tests-batch "^emerge-"))) + +(provide 'emerge-tests) +;;; emerge-tests.el ends here commit 2f2fbae88280a460d2750ee685351475145e9d55 Author: Stefan Monnier Date: Sun Apr 20 10:10:17 2025 -0400 (savehist-minibuffer-hook): Exclude uninterned history vars * lisp/savehist.el (savehist--reload): Don't bother merging the value of vars that were not changed. (savehist-minibuffer-hook): Exclude uninterned history vars. diff --git a/lisp/savehist.el b/lisp/savehist.el index 34226b3bd81..2cd591bc04f 100644 --- a/lisp/savehist.el +++ b/lisp/savehist.el @@ -243,7 +243,8 @@ Be careful to do it while preserving the current history data." ;; For each histvar that we knew about, make sure all the entries that ;; were there before are still here now and in the same order. (with-demoted-errors "%S" ;Maybe some var is not a list or something. - (set s (savehist--merge v (symbol-value s)))))))) + (unless (equal v (symbol-value s)) + (set s (savehist--merge v (symbol-value s))))))))) (defun savehist--file-modtime () (or (file-attribute-modification-time (file-attributes savehist-file)) @@ -443,7 +444,12 @@ Does nothing if Savehist mode is off." ;; (which `read-password' does), ;; `minibuffer-history-variable' is bound to t to mean ;; "no history is being recorded". - (memq minibuffer-history-variable savehist-ignored-variables)) + (memq minibuffer-history-variable savehist-ignored-variables) + ;; Filter out uninterned history vars since we can't + ;; reliably write+read them back in anyway (and presumably + ;; they are not intended to survive sessions). + (not (eq (intern-soft minibuffer-history-variable) + minibuffer-history-variable))) (add-to-list 'savehist-minibuffer-history-variables minibuffer-history-variable))) commit 6fb2a4691f4d53473c0a326d3a6c23df9008b6e8 Author: Gerd Möllmann Date: Sun Apr 20 15:06:13 2025 +0200 ; Pacify free variable warning in vc-git.el * lisp/vc/vc-git.el (log-edit-font-lock-keywords): Defvar. diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el index f41d51fe34a..4acacaff203 100644 --- a/lisp/vc/vc-git.el +++ b/lisp/vc/vc-git.el @@ -108,6 +108,9 @@ (require 'vc) (require 'vc-dir)) +;; Pacify "free variable" warning. +(defvar log-edit-font-lock-keywords) + (defgroup vc-git nil "VC Git backend." :version "24.1" commit 57966a3350e17b449697638d6adb1ed1d63bf8d5 Author: Po Lu Date: Sun Apr 20 20:49:24 2025 +0800 Temporary fix for compilation on Android API levels <= 13 * lib/getloadavg.c (getloadavg): Don't use sysinfo on Android API levels <= 13. This will be resolved in Gnulib shortly, with any luck. diff --git a/lib/getloadavg.c b/lib/getloadavg.c index 9da41c16c02..1cb1c01097d 100644 --- a/lib/getloadavg.c +++ b/lib/getloadavg.c @@ -499,7 +499,8 @@ getloadavg (double loadavg[], int nelem) } # endif -# if !defined (LDAV_DONE) && (defined __linux__ || defined __ANDROID__) +# if !defined (LDAV_DONE) && (defined __linux__ || defined __ANDROID__) \ + && (!defined __ANDROID__ || __ANDROID_API__ >= 13) /* Linux without glibc, Android, Cygwin */ # define LDAV_DONE # undef LOAD_AVE_TYPE commit 4428077c2bea73570cfe9f9d6b40809aeda7f5c9 Author: Vincenzo Pupillo Date: Sat Apr 19 22:58:39 2025 +0200 Fix indentation of "{" on a new line of a function declaration * lisp/progmodes/js.el (js--treesit-switch-body-helper): New anchor helper function for the switch_body. (js--treesit-member-chained-expression-helper): New anchor helper function for chained calls in member_expression. (js--treesit-arrow-function-helper): New anchor helper function for arrow_function. (js--treesit-indent-rules): Fix rule for the indentation of "{" when of a new line of a function declaration. (Bug#76704) Fix the indentation of the parent of arrow_function, member_expression, switch_body, ternary_expression and sequence_expression. diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index 243329de7ae..aa0d35efab8 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el @@ -3449,25 +3449,86 @@ Check if a node type is available, then return the right indent rules." `(((match "<" "jsx_text") parent 0) ((parent-is "jsx_text") parent js-indent-level))))) +(defun js--treesit-switch-body-helper (_node parent _bol &rest _args) + "Anchor helper for the switch body.. +If \"{\" is on a newline return the PARENT bol plus an offset, +otherwise return the usual `parent-bol' value. If `js-switch-indent-offset' > 0 +this is the offset, otherwise is `js-indent-level'." + (save-excursion + (goto-char (treesit-node-start parent)) + (back-to-indentation) + (if (not (eq ?{ (char-after))) + (+ (point) js-switch-indent-offset) + (let ((offset ; offset relative to "{" + (if (= js-switch-indent-offset 0) + js-indent-level + js-switch-indent-offset)) + (pos ; position relative to the "statement_block" + (treesit-node-start + (treesit-node-parent + parent)))) + (+ pos offset))))) + +(defun js--treesit-member-chained-expression-helper (_node parent _bol &rest _args) + "Anchor helper for member chained expressions. +Returns a position relative to PARENT context and the value of +`js-chain-indent'. +See `js-chain-indent' and `js--chained-expression-p'." + (let ((parent-start (treesit-node-start parent))) + (if (not js-chain-indent) + (if-let* ((ancestor-node + (treesit-parent-until + parent + "variable_declarator"))) + (treesit-node-start ancestor-node) + (save-excursion + (goto-char parent-start) + (back-to-indentation) + (if (eq parent-start (point)) + (+ parent-start js-indent-level) + parent-start))) + (save-excursion + (goto-char parent-start) + (let ((pos (search-forward "." (pos-eol) t 1))) + (if (and pos (> pos 0)) + (- pos 1) + parent-start)))))) + +(defun js--treesit-arrow-function-helper (node parent bol &rest args) + "Anchor helper for arrow_function, return a position based on context. +If and arrow function has a variable_declarator ancestor, returns the +same value of `grand-parent' otherwise return `parent-bol' plus +`js-indent-level'. +PARENT is NODE's parent, BOL is the beginning of non-whitespace +characters of the current line." + (if-let* ((ancestor-node + (treesit-parent-until + parent + "variable_declarator"))) + (apply (alist-get 'grand-parent treesit-simple-indent-presets) + node parent bol args) + (+ (apply (alist-get 'parent-bol treesit-simple-indent-presets) + node parent bol args) + js-indent-level))) + (defvar js--treesit-indent-rules - (let ((switch-case (rx "switch_" (or "case" "default")))) `((javascript ((parent-is "program") parent-bol 0) - ((node-is "}") parent-bol 0) + ((node-is "}") standalone-parent 0) ((node-is ")") parent-bol 0) ((node-is "]") parent-bol 0) ((node-is ">") parent-bol 0) ((and (parent-is "comment") c-ts-common-looking-at-star) c-ts-common-comment-start-after-first-star -1) ((parent-is "comment") prev-adaptive-prefix 0) + ((n-p-gp "identifier" "ternary_expression" "parenthesized_expression") + parent 0) ((parent-is "ternary_expression") parent-bol js-indent-level) - ((parent-is "member_expression") parent-bol js-indent-level) - ((node-is ,switch-case) parent-bol 0) - ;; "{" on the newline. - ((node-is "statement_block") parent-bol js-indent-level) + ((parent-is "sequence_expression") parent 0) + ((parent-is "member_expression") js--treesit-member-chained-expression-helper 0) ((parent-is "named_imports") parent-bol js-indent-level) - ((parent-is "statement_block") parent-bol js-indent-level) - ((parent-is "variable_declarator") parent-bol js-indent-level) + ((parent-is "statement_block") standalone-parent js-indent-level) + ((parent-is "variable_declarator") parent 0) ((parent-is "arguments") parent-bol js-indent-level) ((parent-is "array") parent-bol js-indent-level) ((parent-is "formal_parameters") parent-bol js-indent-level) @@ -3476,12 +3537,16 @@ Check if a node type is available, then return the right indent rules." ((parent-is "object_pattern") parent-bol js-indent-level) ((parent-is "object") parent-bol js-indent-level) ((parent-is "pair") parent-bol js-indent-level) - ((parent-is "arrow_function") parent-bol js-indent-level) + ((parent-is "arrow_function") js--treesit-arrow-function-helper 0) ((parent-is "parenthesized_expression") parent-bol js-indent-level) ((parent-is "binary_expression") parent-bol js-indent-level) + ((parent-is "assignment_expression") parent-bol js-indent-level) ((parent-is "class_body") parent-bol js-indent-level) - ((parent-is ,switch-case) parent-bol js-indent-level) - ((parent-is "statement_block") parent-bol js-indent-level) + ;; "{" on the newline, should stay here. + ((node-is "statement_block") parent-bol 0) + ((parent-is "switch_statement") parent-bol 0) + ((parent-is "switch_body") js--treesit-switch-body-helper 0) + ((parent-is ,(rx "switch_" (or "case" "default"))) parent-bol js-indent-level) ((match "while" "do_statement") parent-bol 0) ((match "else" "if_statement") parent-bol 0) ((parent-is ,(rx (or (seq (or "if" "for" "for_in" "while" "do") "_statement") @@ -3502,7 +3567,7 @@ Check if a node type is available, then return the right indent rules." (no-node parent-bol 0)) (jsdoc ((and (parent-is "document") c-ts-common-looking-at-star) - c-ts-common-comment-start-after-first-star -1))))) + c-ts-common-comment-start-after-first-star -1)))) (defvar js--treesit-keywords '("as" "async" "await" "break" "case" "catch" "class" "const" "continue" commit 372ce97180930b63fdd15d1d89fb1a519d4cf85f Author: Paul Eggert Date: Sat Apr 19 22:50:28 2025 -0700 Omit trailing white space in one line * oldXMenu/Recomp.c: Omit trailing spaces in C source code line. This was the only such line found by this command: grep '[ ]$' $(git ls-files | grep '\.[chmy]$') diff --git a/oldXMenu/Recomp.c b/oldXMenu/Recomp.c index 5c129fc5432..3945d2f2da8 100644 --- a/oldXMenu/Recomp.c +++ b/oldXMenu/Recomp.c @@ -35,7 +35,7 @@ without express or implied warranty. int XMenuRecompute(Display *display, register XMenu *menu) - + /* Menu object to be recomputed. */ { register XMPane *p_ptr; /* Pane pointer. */ @@ -120,4 +120,3 @@ XMenuRecompute(Display *display, register XMenu *menu) _XMErrorCode = XME_NO_ERROR; return(XM_SUCCESS); } - commit 589f596c96964ecf5e736a4b3b674ede4b193910 Author: Paul Eggert Date: Sat Apr 19 19:29:05 2025 -0700 Use -Wtrailing-whitespace when warning * configure.ac: When enabling GCC warnings, enable GCC 15’s new -Wtrailing-whitespace option if available, as that’s the Emacs style. diff --git a/configure.ac b/configure.ac index 8b26d0882f3..eeb5f40d246 100644 --- a/configure.ac +++ b/configure.ac @@ -1851,6 +1851,7 @@ AS_IF([test $gl_gcc_warnings = no], gl_WARN_ADD([$w]) done gl_WARN_ADD([-Wredundant-decls]) # Prefer this, as we don't use Bison. + gl_WARN_ADD([-Wtrailing-whitespace]) # This project's coding style gl_WARN_ADD([-Wno-missing-field-initializers]) # We need this one gl_WARN_ADD([-Wno-override-init]) # More trouble than it is worth gl_WARN_ADD([-Wno-sign-compare]) # Too many warnings for now commit e2fb12a40ca2b90dfedbfe916ed8a87345ca89f1 Author: Paul Eggert Date: Sat Apr 19 19:22:37 2025 -0700 Pacify GCC 15 -Wunterminated-string-initialization * src/fns.c (hexbuf_digest): * src/json.c (json_out_string): Add ATTRIBUTE_NONSTRING to character arrays that are not strings. diff --git a/src/fns.c b/src/fns.c index 52f667a72a5..21916b6fb46 100644 --- a/src/fns.c +++ b/src/fns.c @@ -6014,7 +6014,7 @@ hexbuf_digest (char *hexbuf, void const *digest, int digest_size) for (int i = digest_size - 1; i >= 0; i--) { - static char const hexdigit[16] = "0123456789abcdef"; + static char const hexdigit[16] ATTRIBUTE_NONSTRING = "0123456789abcdef"; int p_i = p[i]; hexbuf[2 * i] = hexdigit[p_i >> 4]; hexbuf[2 * i + 1] = hexdigit[p_i & 0xf]; diff --git a/src/json.c b/src/json.c index beac242b709..44eae653eb5 100644 --- a/src/json.c +++ b/src/json.c @@ -323,7 +323,7 @@ json_out_string (json_out_t *jo, Lisp_Object str, int skip) { /* FIXME: this code is slow, make faster! */ - static const char hexchar[16] = "0123456789ABCDEF"; + static const char hexchar[16] ATTRIBUTE_NONSTRING = "0123456789ABCDEF"; ptrdiff_t len = SBYTES (str); json_make_room (jo, len + 2); json_out_byte (jo, '"'); commit 67ae1790088616777b352acffc63aeeb7ee50cb6 Author: Paul Eggert Date: Sat Apr 19 19:21:15 2025 -0700 Pacify GCC 15 -Wanalyzer-null-dereference * src/emacs.c (find_emacs_executable): Add an eassume. This pacifies -Wanalyzer-null-dereference with gcc (GCC) 15.0.1 20250329 (Red Hat 15.0.1-0). diff --git a/src/emacs.c b/src/emacs.c index 79604d09a37..cf8f4bd63f7 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -808,6 +808,8 @@ find_emacs_executable (char const *argv0, ptrdiff_t *candidate_size) candidate = xpalloc (NULL, candidate_size, needed - *candidate_size + 1, -1, 1); } + else + eassume (candidate); memcpy (candidate + 0, path_part, path_part_length); candidate[path_part_length] = DIRECTORY_SEP; memcpy (candidate + path_part_length + 1, argv0, argv0_length + 1); commit c8eed90eb4d0583dc3463edfad176b9d3f98d11f Author: Paul Eggert Date: Sat Apr 19 18:44:52 2025 -0700 Avoid name clashes with static GnuTLS Work around a bug in GnuTLS 3.7.11 and earlier: when built statically, its mistakenly exports symbols hash_lookup and hash_string, which collide with Emacs symbols of the same name, preventing temacs from linking statically. Problem reported by Greg A. Woods (Bug#77476). Because GnuTLS never uses hash_lookup or hash_string this issue ordinarily doesn’t seem to prevent temacs from linking to GnuTLS on GNU/Linux, as it’s linked dynamically and the dynamic linker never needs to resolve references to either symbol. However, I suppose a clash or bug could occur even with dynamic linking if Emacs later loads a module that uses either symbol. Although GnuTLS should be fixed, Emacs should link statically to current and older GnuTLS versions in the meantime, and it should avoid potential problems with dynamic linking. Renaming the two clashing names is an easy way to do this. For consistency with the new name for hash_lookup, also rename hash_lookup_with_hash and hash_lookup_get_hash. * src/fns.c (hash_find_with_hash): Rename from hash_lookup_with_hash. (hash_find): Rename from hash_lookup. (hash_find_get_hash): Rename from hash_lookup_get_hash. (hash_char_array): Rename from hash_string. All uses changed. diff --git a/src/bytecode.c b/src/bytecode.c index ecea0c6df36..4475d4a0b30 100644 --- a/src/bytecode.c +++ b/src/bytecode.c @@ -1763,7 +1763,7 @@ exec_byte_code (Lisp_Object fun, ptrdiff_t args_template, } else { - ptrdiff_t i = hash_lookup (h, v1); + ptrdiff_t i = hash_find (h, v1); if (i >= 0) { op = XFIXNUM (HASH_VALUE (h, i)); diff --git a/src/category.c b/src/category.c index 297ba94c73d..f65c7d94331 100644 --- a/src/category.c +++ b/src/category.c @@ -54,7 +54,7 @@ hash_get_category_set (Lisp_Object table, Lisp_Object category_set) make_hash_table (&hashtest_equal, DEFAULT_HASH_SIZE, Weak_None)); struct Lisp_Hash_Table *h = XHASH_TABLE (XCHAR_TABLE (table)->extras[1]); hash_hash_t hash; - ptrdiff_t i = hash_lookup_get_hash (h, category_set, &hash); + ptrdiff_t i = hash_find_get_hash (h, category_set, &hash); if (i >= 0) return HASH_KEY (h, i); hash_put (h, category_set, Qnil, hash); diff --git a/src/ccl.c b/src/ccl.c index a45fe0439c4..36094ca627e 100644 --- a/src/ccl.c +++ b/src/ccl.c @@ -1375,7 +1375,7 @@ ccl_driver (struct ccl_program *ccl, int *source, int *destination, int src_size eop = (FIXNUM_OVERFLOW_P (reg[RRR]) ? -1 - : hash_lookup (h, make_fixnum (reg[RRR]))); + : hash_find (h, make_fixnum (reg[RRR]))); if (eop >= 0) { Lisp_Object opl; @@ -1404,7 +1404,7 @@ ccl_driver (struct ccl_program *ccl, int *source, int *destination, int src_size eop = (FIXNUM_OVERFLOW_P (i) ? -1 - : hash_lookup (h, make_fixnum (i))); + : hash_find (h, make_fixnum (i))); if (eop >= 0) { Lisp_Object opl; diff --git a/src/charset.c b/src/charset.c index 797dfde276f..3264d75f92e 100644 --- a/src/charset.c +++ b/src/charset.c @@ -1112,8 +1112,7 @@ usage: (define-charset-internal ...) */) hash_hash_t hash_code; ptrdiff_t hash_index - = hash_lookup_get_hash (hash_table, args[charset_arg_name], - &hash_code); + = hash_find_get_hash (hash_table, args[charset_arg_name], &hash_code); if (hash_index >= 0) { new_definition_p = false; diff --git a/src/charset.h b/src/charset.h index 0217ec321ff..f76e9100892 100644 --- a/src/charset.h +++ b/src/charset.h @@ -285,7 +285,7 @@ extern int emacs_mule_charset[256]; /* Return an index to Vcharset_hash_table of the charset whose symbol is SYMBOL. */ #define CHARSET_SYMBOL_HASH_INDEX(symbol) \ - hash_lookup (XHASH_TABLE (Vcharset_hash_table), symbol) + hash_find (XHASH_TABLE (Vcharset_hash_table), symbol) /* Return the attribute vector of CHARSET. */ #define CHARSET_ATTRIBUTES(charset) (charset)->attributes diff --git a/src/coding.h b/src/coding.h index b72ffde3c55..2d538ba69d3 100644 --- a/src/coding.h +++ b/src/coding.h @@ -193,7 +193,7 @@ enum coding_attr_index /* Return the ID of CODING_SYSTEM_SYMBOL. */ #define CODING_SYSTEM_ID(coding_system_symbol) \ - hash_lookup (XHASH_TABLE (Vcoding_system_hash_table), \ + hash_find (XHASH_TABLE (Vcoding_system_hash_table), \ coding_system_symbol) /* Return true if CODING_SYSTEM_SYMBOL is a coding system. */ diff --git a/src/composite.c b/src/composite.c index 2ef72a33d2e..b6c5b61a6a9 100644 --- a/src/composite.c +++ b/src/composite.c @@ -241,7 +241,7 @@ get_composition_id (ptrdiff_t charpos, ptrdiff_t bytepos, ptrdiff_t nchars, goto invalid_composition; hash_hash_t hash_code; - hash_index = hash_lookup_get_hash (hash_table, key, &hash_code); + hash_index = hash_find_get_hash (hash_table, key, &hash_code); if (hash_index >= 0) { /* We have already registered the same composition. Change PROP diff --git a/src/emacs-module.c b/src/emacs-module.c index 7797b04e026..2feca41e7ae 100644 --- a/src/emacs-module.c +++ b/src/emacs-module.c @@ -413,7 +413,7 @@ static bool module_global_reference_p (emacs_value v, ptrdiff_t *n) { struct Lisp_Hash_Table *h = XHASH_TABLE (Vmodule_refs_hash); - /* Note that we can't use `hash_lookup' because V might be a local + /* Note that we can't use `hash_find' because V might be a local reference that's identical to some global reference. */ DOHASH (h, k, val) if (&XMODULE_GLOBAL_REFERENCE (val)->value == v) @@ -431,7 +431,7 @@ module_make_global_ref (emacs_env *env, emacs_value value) struct Lisp_Hash_Table *h = XHASH_TABLE (Vmodule_refs_hash); Lisp_Object new_obj = value_to_lisp (value); hash_hash_t hashcode; - ptrdiff_t i = hash_lookup_get_hash (h, new_obj, &hashcode); + ptrdiff_t i = hash_find_get_hash (h, new_obj, &hashcode); /* Note: This approach requires the garbage collector to never move objects. */ @@ -470,7 +470,7 @@ module_free_global_ref (emacs_env *env, emacs_value global_value) MODULE_FUNCTION_BEGIN (); struct Lisp_Hash_Table *h = XHASH_TABLE (Vmodule_refs_hash); Lisp_Object obj = value_to_lisp (global_value); - ptrdiff_t i = hash_lookup (h, obj); + ptrdiff_t i = hash_find (h, obj); if (module_assertions) { diff --git a/src/fns.c b/src/fns.c index e9643627bfa..52f667a72a5 100644 --- a/src/fns.c +++ b/src/fns.c @@ -2815,8 +2815,8 @@ equal_no_quit (Lisp_Object o1, Lisp_Object o2) return internal_equal (o1, o2, EQUAL_NO_QUIT, 0, Qnil); } -static ptrdiff_t hash_lookup_with_hash (struct Lisp_Hash_Table *h, - Lisp_Object key, hash_hash_t hash); +static ptrdiff_t hash_find_with_hash (struct Lisp_Hash_Table *h, + Lisp_Object key, hash_hash_t hash); /* Return true if O1 and O2 are equal. EQUAL_KIND specifies what kind @@ -2848,7 +2848,7 @@ internal_equal_1 (Lisp_Object o1, Lisp_Object o2, enum equal_kind equal_kind, { struct Lisp_Hash_Table *h = XHASH_TABLE (*ht); hash_hash_t hash = hash_from_key (h, o1); - ptrdiff_t i = hash_lookup_with_hash (h, o1, hash); + ptrdiff_t i = hash_find_with_hash (h, o1, hash); if (i >= 0) { /* `o1' was seen already. */ Lisp_Object o2s = HASH_VALUE (h, i); @@ -5031,8 +5031,8 @@ hash_table_thaw (Lisp_Object hash_table) /* Look up KEY with hash HASH in table H. Return entry index or -1 if none. */ static ptrdiff_t -hash_lookup_with_hash (struct Lisp_Hash_Table *h, - Lisp_Object key, hash_hash_t hash) +hash_find_with_hash (struct Lisp_Hash_Table *h, + Lisp_Object key, hash_hash_t hash) { ptrdiff_t start_of_bucket = hash_index_index (h, hash); for (ptrdiff_t i = HASH_INDEX (h, start_of_bucket); @@ -5048,20 +5048,20 @@ hash_lookup_with_hash (struct Lisp_Hash_Table *h, /* Look up KEY in table H. Return entry index or -1 if none. */ ptrdiff_t -hash_lookup (struct Lisp_Hash_Table *h, Lisp_Object key) +hash_find (struct Lisp_Hash_Table *h, Lisp_Object key) { - return hash_lookup_with_hash (h, key, hash_from_key (h, key)); + return hash_find_with_hash (h, key, hash_from_key (h, key)); } /* Look up KEY in hash table H. Return its hash value in *PHASH. Value is the index of the entry in H matching KEY, or -1 if not found. */ ptrdiff_t -hash_lookup_get_hash (struct Lisp_Hash_Table *h, Lisp_Object key, - hash_hash_t *phash) +hash_find_get_hash (struct Lisp_Hash_Table *h, Lisp_Object key, + hash_hash_t *phash) { EMACS_UINT hash = hash_from_key (h, key); *phash = hash; - return hash_lookup_with_hash (h, key, hash); + return hash_find_with_hash (h, key, hash); } static void @@ -5286,7 +5286,7 @@ sweep_weak_table (struct Lisp_Hash_Table *h, bool remove_entries_p) can be any EMACS_UINT value. */ EMACS_UINT -hash_string (char const *ptr, ptrdiff_t len) +hash_char_array (char const *ptr, ptrdiff_t len) { char const *p = ptr; char const *end = ptr + len; @@ -5459,7 +5459,7 @@ sxhash_obj (Lisp_Object obj, int depth) return XHASH (obj); case Lisp_String: - return hash_string (SSDATA (obj), SBYTES (obj)); + return hash_char_array (SSDATA (obj), SBYTES (obj)); case Lisp_Vectorlike: { @@ -5861,7 +5861,7 @@ usage: (gethash KEY TABLE &optional DEFAULT) */) (Lisp_Object key, Lisp_Object table, Lisp_Object dflt) { struct Lisp_Hash_Table *h = check_hash_table (table); - ptrdiff_t i = hash_lookup (h, key); + ptrdiff_t i = hash_find (h, key); return i >= 0 ? HASH_VALUE (h, i) : dflt; } @@ -5876,7 +5876,7 @@ VALUE. In any case, return VALUE. */) check_mutable_hash_table (table, h); EMACS_UINT hash = hash_from_key (h, key); - ptrdiff_t i = hash_lookup_with_hash (h, key, hash); + ptrdiff_t i = hash_find_with_hash (h, key, hash); if (i >= 0) set_hash_value_slot (h, i, value); else diff --git a/src/image.c b/src/image.c index 65d8db24adc..1d3faecf507 100644 --- a/src/image.c +++ b/src/image.c @@ -5552,7 +5552,7 @@ xpm_free_color_cache (void) static int xpm_color_bucket (char *color_name) { - EMACS_UINT hash = hash_string (color_name, strlen (color_name)); + EMACS_UINT hash = hash_char_array (color_name, strlen (color_name)); return hash % XPM_COLOR_CACHE_BUCKETS; } @@ -6238,7 +6238,7 @@ xpm_put_color_table_h (Lisp_Object color_table, Lisp_Object chars = make_unibyte_string (chars_start, chars_len); hash_hash_t hash_code; - hash_lookup_get_hash (table, chars, &hash_code); + hash_find_get_hash (table, chars, &hash_code); hash_put (table, chars, color, hash_code); } @@ -6249,7 +6249,7 @@ xpm_get_color_table_h (Lisp_Object color_table, { struct Lisp_Hash_Table *table = XHASH_TABLE (color_table); ptrdiff_t i = - hash_lookup (table, make_unibyte_string (chars_start, chars_len)); + hash_find (table, make_unibyte_string (chars_start, chars_len)); return i >= 0 ? HASH_VALUE (table, i) : Qnil; } diff --git a/src/json.c b/src/json.c index 5795c582ce0..beac242b709 100644 --- a/src/json.c +++ b/src/json.c @@ -1571,7 +1571,7 @@ json_parse_object (struct json_parser *parser) hash_hash_t hash; Lisp_Object key = parser->object_workspace[i]; Lisp_Object value = parser->object_workspace[i + 1]; - ptrdiff_t i = hash_lookup_get_hash (h, key, &hash); + ptrdiff_t i = hash_find_get_hash (h, key, &hash); if (i < 0) hash_put (h, key, value, hash); else diff --git a/src/lisp.h b/src/lisp.h index bca58b9c12d..c2450440ab9 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -4261,14 +4261,14 @@ extern Lisp_Object larger_vector (Lisp_Object, ptrdiff_t, ptrdiff_t); extern bool sweep_weak_table (struct Lisp_Hash_Table *, bool); extern void hexbuf_digest (char *, void const *, int); extern char *extract_data_from_object (Lisp_Object, ptrdiff_t *, ptrdiff_t *); -EMACS_UINT hash_string (char const *, ptrdiff_t); +EMACS_UINT hash_char_array (char const *, ptrdiff_t); EMACS_UINT sxhash (Lisp_Object); Lisp_Object make_hash_table (const struct hash_table_test *, EMACS_INT, hash_table_weakness_t); Lisp_Object hash_table_weakness_symbol (hash_table_weakness_t weak); -ptrdiff_t hash_lookup (struct Lisp_Hash_Table *, Lisp_Object); -ptrdiff_t hash_lookup_get_hash (struct Lisp_Hash_Table *h, Lisp_Object key, - hash_hash_t *phash); +ptrdiff_t hash_find (struct Lisp_Hash_Table *, Lisp_Object); +ptrdiff_t hash_find_get_hash (struct Lisp_Hash_Table *h, Lisp_Object key, + hash_hash_t *phash); ptrdiff_t hash_put (struct Lisp_Hash_Table *, Lisp_Object, Lisp_Object, hash_hash_t); void hash_remove_from_table (struct Lisp_Hash_Table *, Lisp_Object); diff --git a/src/lread.c b/src/lread.c index d39330bd0eb..5c8bbe7da9f 100644 --- a/src/lread.c +++ b/src/lread.c @@ -4266,7 +4266,7 @@ read0 (Lisp_Object readcharfun, bool locate_syms) = XHASH_TABLE (read_objects_map); Lisp_Object number = make_fixnum (n); hash_hash_t hash; - ptrdiff_t i = hash_lookup_get_hash (h, number, &hash); + ptrdiff_t i = hash_find_get_hash (h, number, &hash); if (i >= 0) /* Not normal, but input could be malformed. */ set_hash_value_slot (h, i, placeholder); @@ -4284,7 +4284,7 @@ read0 (Lisp_Object readcharfun, bool locate_syms) /* #N# -- reference to numbered object */ struct Lisp_Hash_Table *h = XHASH_TABLE (read_objects_map); - ptrdiff_t i = hash_lookup (h, make_fixnum (n)); + ptrdiff_t i = hash_find (h, make_fixnum (n)); if (i < 0) INVALID_SYNTAX_WITH_BUFFER (); obj = HASH_VALUE (h, i); @@ -4579,7 +4579,7 @@ read0 (Lisp_Object readcharfun, bool locate_syms) struct Lisp_Hash_Table *h2 = XHASH_TABLE (read_objects_completed); hash_hash_t hash; - ptrdiff_t i = hash_lookup_get_hash (h2, placeholder, &hash); + ptrdiff_t i = hash_find_get_hash (h2, placeholder, &hash); eassert (i < 0); hash_put (h2, placeholder, Qnil, hash); obj = placeholder; @@ -4594,7 +4594,7 @@ read0 (Lisp_Object readcharfun, bool locate_syms) struct Lisp_Hash_Table *h2 = XHASH_TABLE (read_objects_completed); hash_hash_t hash; - ptrdiff_t i = hash_lookup_get_hash (h2, obj, &hash); + ptrdiff_t i = hash_find_get_hash (h2, obj, &hash); eassert (i < 0); hash_put (h2, obj, Qnil, hash); } @@ -4606,8 +4606,8 @@ read0 (Lisp_Object readcharfun, bool locate_syms) /* ...and #n# will use the real value from now on. */ struct Lisp_Hash_Table *h = XHASH_TABLE (read_objects_map); hash_hash_t hash; - ptrdiff_t i = hash_lookup_get_hash (h, e->u.numbered.number, - &hash); + ptrdiff_t i = hash_find_get_hash (h, e->u.numbered.number, + &hash); eassert (i >= 0); set_hash_value_slot (h, i, obj); } @@ -4661,7 +4661,7 @@ substitute_object_recurse (struct subst *subst, Lisp_Object subtree) by #n=, which means that we can find it as a value in COMPLETED. */ if (EQ (subst->completed, Qt) - || hash_lookup (XHASH_TABLE (subst->completed), subtree) >= 0) + || hash_find (XHASH_TABLE (subst->completed), subtree) >= 0) subst->seen = Fcons (subtree, subst->seen); /* Recurse according to subtree's type. @@ -5173,7 +5173,7 @@ OBARRAY, if nil, defaults to the value of the variable `obarray'. */) static ptrdiff_t obarray_index (struct Lisp_Obarray *oa, const char *str, ptrdiff_t size_byte) { - EMACS_UINT hash = hash_string (str, size_byte); + EMACS_UINT hash = hash_char_array (str, size_byte); return knuth_hash (reduce_emacs_uint_to_hash_hash (hash), oa->size_bits); } diff --git a/src/macfont.m b/src/macfont.m index 4ff720c5dd2..2a0b9aa2554 100644 --- a/src/macfont.m +++ b/src/macfont.m @@ -1018,7 +1018,7 @@ static void mac_font_get_glyphs_for_variants (CFDataRef, UTF32Char, if (HASH_TABLE_P (macfont_family_cache)) { struct Lisp_Hash_Table *h = XHASH_TABLE (macfont_family_cache); - ptrdiff_t i = hash_lookup (h, symbol); + ptrdiff_t i = hash_find (h, symbol); if (i >= 0) { @@ -1045,7 +1045,7 @@ static void mac_font_get_glyphs_for_variants (CFDataRef, UTF32Char, h = XHASH_TABLE (macfont_family_cache); hash_hash_t hash; - i = hash_lookup_get_hash (h, symbol, &hash); + i = hash_find_get_hash (h, symbol, &hash); value = string ? make_mint_ptr ((void *) CFRetain (string)) : Qnil; if (i >= 0) { diff --git a/src/minibuf.c b/src/minibuf.c index 28ec780b24e..6d96160a851 100644 --- a/src/minibuf.c +++ b/src/minibuf.c @@ -2103,7 +2103,7 @@ the values STRING, PREDICATE and `lambda'. */) else if (HASH_TABLE_P (collection)) { struct Lisp_Hash_Table *h = XHASH_TABLE (collection); - ptrdiff_t i = hash_lookup (h, string); + ptrdiff_t i = hash_find (h, string); if (i >= 0) { tem = HASH_KEY (h, i); commit 71ee484cac3e0e5b68f006b4cca81c13ca6ce11e Author: Paul Eggert Date: Sat Apr 19 12:18:28 2025 -0700 Update from Gnulib by running admin/merge-gnulib diff --git a/doc/misc/texinfo.tex b/doc/misc/texinfo.tex index faad184e345..3ebea93cb1d 100644 --- a/doc/misc/texinfo.tex +++ b/doc/misc/texinfo.tex @@ -3,7 +3,7 @@ % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % -\def\texinfoversion{2025-01-31.21} +\def\texinfoversion{2025-03-22.08} % % Copyright 1985, 1986, 1988, 1990-2025 Free Software Foundation, Inc. % @@ -287,7 +287,6 @@ % Avoid "undefined control sequence" errors. \def\currentchapterdefs{} \def\currentsectiondefs{} -\def\currentsection{} \def\prevchapterdefs{} \def\prevsectiondefs{} \def\currentcolordefs{} @@ -980,18 +979,51 @@ \newif\ifpdf \newif\ifpdfmakepagedest +% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 +% can be set). So we test for \relax and 0 as well as being undefined. +\ifx\pdfoutput\thisisundefined +\else + \ifx\pdfoutput\relax + \else + \ifcase\pdfoutput + \else + \pdftrue + \fi + \fi +\fi + +\newif\ifxetex +\ifx\XeTeXrevision\thisisundefined\else + \xetextrue +\fi + \newif\ifluatex \ifx\luatexversion\thisisundefined\else \luatextrue + \ifnum\luatexversion>84 + \pdftrue + \fi \fi +\newif\ifpdforxetex +\ifpdf + \pdforxetextrue +\fi +\ifxetex + \pdforxetextrue +\fi + + + +% Whether to use non-ASCII bytes in internal link targets. Presently this +% is almost always on. +\newif\iftxiuseunicodedestname +\txiuseunicodedestnametrue + % % For LuaTeX % -\newif\iftxiuseunicodedestname -\txiuseunicodedestnamefalse % For pdfTeX etc. - \ifluatex % Use Unicode destination names \txiuseunicodedestnametrue @@ -1045,7 +1077,7 @@ % \endgroup \def\pdfescapestring#1{\directlua{PDFescstr('\luaescapestring{#1}')}} - \ifnum\luatexversion>84 + \ifpdf % For LuaTeX >= 0.85 \def\pdfdest{\pdfextension dest} \let\pdfoutput\outputmode @@ -1068,33 +1100,6 @@ \fi \fi -% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 -% can be set). So we test for \relax and 0 as well as being undefined. -\ifx\pdfoutput\thisisundefined -\else - \ifx\pdfoutput\relax - \else - \ifcase\pdfoutput - \else - \pdftrue - \fi - \fi -\fi - -\newif\ifxetex -\ifx\XeTeXrevision\thisisundefined\else - \xetextrue -\fi - -\newif\ifpdforxetex -\pdforxetexfalse -\ifpdf - \pdforxetextrue -\fi -\ifxetex - \pdforxetextrue -\fi - % Output page labels information. % See PDF reference v.1.7 p.594, section 8.3.1. @@ -1388,9 +1393,6 @@ \safewhatsit{\pdfdest name{\pdfdestname} xyz}% } % - % used to mark target names; must be expandable. - \def\pdfmkpgn#1{#1} - % % Adding outlines to PDF; macros for calculating structure of outlines % come from Petr Olsak \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% @@ -1416,7 +1418,7 @@ \def\pdfdestname{#4}% \fi % - \pdfoutline goto name{\pdfmkpgn{\pdfdestname}}#2{\pdfoutlinetext}% + \pdfoutline goto name{\pdfdestname}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% @@ -1427,15 +1429,18 @@ \def\thischapnum{##2}% \def\thissecnum{0}% \def\thissubsecnum{0}% + \def\indexlastsec{chap\thischapnum}% }% \def\numsecentry##1##2##3##4{% \advancenumber{chap\thischapnum}% \def\thissecnum{##2}% \def\thissubsecnum{0}% + \def\indexlastsec{sec\thissecnum}% }% \def\numsubsecentry##1##2##3##4{% \advancenumber{sec\thissecnum}% \def\thissubsecnum{##2}% + \def\indexlastsec{subsec\thissecnum}% }% \def\numsubsubsecentry##1##2##3##4{% \advancenumber{subsec\thissubsecnum}% @@ -1443,7 +1448,13 @@ \def\thischapnum{0}% \def\thissecnum{0}% \def\thissubsecnum{0}% + \let\indexlastsec\empty % + % Index initials are subsidiary to whatever sectioning command just + % occurred, usually @appendix or @chapter but occasionally a lower level. + \def\idxinitialentry##1##2##3##4{% + \expandafter\advancenumber\expandafter{\indexlastsec}% + }% % use \def rather than \let here because we redefine \chapentry et % al. a second time, below. \def\appentry{\numchapentry}% @@ -1455,9 +1466,6 @@ \def\unnsubsecentry{\numsubsecentry}% \def\unnsubsubsecentry{\numsubsubsecentry}% % - % Treat index initials like @section. Note that this is the wrong - % level if the index is not at the level of @appendix or @chapter. - \def\idxinitialentry{\numsecentry}% \readdatafile{toc}% % % Read toc second time, this time actually producing the outlines. @@ -1482,18 +1490,6 @@ \def\idxinitialentry##1##2##3##4{% \dopdfoutline{##1}{}{idx.##1.##2}{##4}}% % - % PDF outlines are displayed using system fonts, instead of - % document fonts. Therefore we cannot use special characters, - % since the encoding is unknown. For example, the eogonek from - % Latin 2 (0xea) gets translated to a | character. Info from - % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. - % - % TODO this right, we have to translate 8-bit characters to - % their "best" equivalent, based on the @documentencoding. Too - % much work for too little return. Just use the ASCII equivalents - % we use for the index sort strings. - % - \indexnofonts \ifnodeseen\else \dopdfoutlinecontents \fi % for @contents at beginning \setupdatafile % We can have normal brace characters in the PDF outlines, unlike @@ -1501,9 +1497,9 @@ \def\{{\lbracecharliteral}% \def\}{\rbracecharliteral}% \catcode`\\=\active \otherbackslash - \input \tocreadfilename + \input \tocreadfilename\relax + \ifnodeseen \dopdfoutlinecontents \fi % for @contents at end \endgroup - \ifnodeseen \dopdfoutlinecontents \fi % for @contents at end } \def\dopdfoutlinecontents{% \expandafter\dopdfoutline\expandafter{\putwordTOC}{}{txi.CONTENTS}{}% @@ -1541,7 +1537,7 @@ % \def\pdflink#1{\pdflinkpage{#1}{#1}}% \def\pdflinkpage#1#2{% - \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} + \startlink attr{/Border [0 0 0]} goto name{#1} \setcolor{\linkcolor}#2\endlink} \else % non-pdf mode @@ -1644,18 +1640,20 @@ % horizontal space being required in the PDF viewer. \def\partentry##1##2##3##4{}% ignore parts in the outlines \def\numchapentry##1##2##3##4{% - \dopdfoutline{##2 ##1}{1}{##3}{##4}}% + \dopdfoutline{##2 ##1}{1}{##3}{##4}% + \def\indexseclevel{2}}% \def\numsecentry##1##2##3##4{% - \dopdfoutline{##1}{2}{##3}{##4}}% + \dopdfoutline{##1}{2}{##3}{##4}% + \def\indexseclevel{3}}% \def\numsubsecentry##1##2##3##4{% - \dopdfoutline{##1}{3}{##3}{##4}}% + \dopdfoutline{##1}{3}{##3}{##4}% + \def\indexseclevel{4}}% \def\numsubsubsecentry##1##2##3##4{% - \dopdfoutline{##1}{4}{##3}{##4}}% + \dopdfoutline{##1}{4}{##3}{##4}% + \def\indexseclevel{5}}% % - % Note this is at the wrong level unless the index is in an @appendix - % or @chapter. \def\idxinitialentry##1##2##3##4{% - \dopdfoutline{##1}{2}{idx.##1.##2}{##4}}% + \dopdfoutline{##1}{\indexseclevel}{idx.##1.##2}{##4}}% % \let\appentry\numchapentry% \let\appsecentry\numsecentry% @@ -1680,7 +1678,9 @@ \def\{{\lbracecharliteral}% \def\}{\rbracecharliteral}% \catcode`\\=\active \otherbackslash + \xetexpreauxfile \input \tocreadfilename\relax + \xetexpostauxfile \ifnodeseen \dopdfoutlinecontents \fi % for @contents at end \endgroup } @@ -5177,8 +5177,8 @@ % \uccode`\1=`\{ \uppercase{\def\{{1}}% \uccode`\1=`\} \uppercase{\def\}{1}}% - \let\lbracechar\{% - \let\rbracechar\}% + \def\lbracechar##1{\{}% + \def\rbracechar##1{\}}% % % % We need to get rid of all macros, leaving only the arguments (if present). @@ -5523,6 +5523,8 @@ \tolerance = 9500 \plainfrenchspacing \everypar = {}% don't want the \kern\-parindent from indentation suppression. + \let\entry\indexentry + \ifxetex\xetexpreauxfile\fi % % See comment in \requireopenindexfile. \def\indexname{#1}\ifx\indexname\indexisfl\def\indexname{f1}\fi @@ -5548,6 +5550,7 @@ \fi \fi \closein 1 + \ifxetex\xetexpostauxfile\fi \endgroup} % Checked in @bye @@ -5583,7 +5586,9 @@ }% \else \begindoublecolumns + \ifxetex\xetexpreauxfile\fi \input \jobname.\indexname s + \ifxetex\xetexpostauxfile\fi \enddoublecolumns \fi }{% @@ -5594,11 +5599,39 @@ % should work because we (hopefully) don't otherwise use @ in index files. %\catcode`\@=12\relax \catcode`\@=0\relax + \ifxetex\xetexpreauxfile\fi \input \jobname.\indexname s + \ifxetex\xetexpostauxfile\fi \enddoublecolumns }% } +\def\indexentry#1#2{% + \let\entrypagetarget\empty + \ifpdforxetex + % only link the index text to the page if no comma appears in the + % list of pages, i.e. there is only one page + \checkpagelistcomma{#2}\pagelistcomma + \expandafter\ifcase\pagelistcomma + \def\entrypagetarget{#2}% + \fi + \fi% + \entryinternal{#1}{#2}% +} + +\def\checkpagelistcomma#1#2{% + \checkpagelistcommaxx#2#1,\finish +} +\def\checkpagelistcommaxx#1#2,#3\finish{% + \def\tmp{#3}% + \ifx\tmp\empty + \def#1{0\relax} + \else + \def#1{1\relax} + \fi +} + + % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. @@ -5673,18 +5706,14 @@ \def\doindexinitialentry#1{% \ifpdforxetex \global\advance\idxinitialno by 1 - \def\indexlbrace{\{} - \def\indexrbrace{\}} - \def\indexbackslash{\realbackslash} - \def\indexatchar{\@} + \def\indexlbrace{\{}% + \def\indexrbrace{\}}% + \def\indexbackslash{\realbackslash}% + \def\indexatchar{\@}% \writetocentry{idxinitial}{\asis #1}{IDX\the\idxinitialno}% % The @asis removes a pair of braces around e.g. {@indexatchar} that % are output by texindex. % - \vbox to 0pt{}% - % This vbox fixes the \pdfdest location for double column formatting. - % Without it, the \pdfdest is output above topskip glue at the top - % of a column as this glue is not added until the first box. \pdfmkdest{idx.\asis #1.IDX\the\idxinitialno}% \fi } @@ -5704,16 +5733,18 @@ \newdimen\entrycontskip \entrycontskip=1em -% for PDF output, whether to make the text of the entry a link to the page -% number. set for @contents and @shortcontents where there is only one -% page number. +% for PDF output, whether to make the text of the entry a link to the section. +% set for @contents and @shortcontents. \newif\iflinkentrytext -% \entry typesets a paragraph consisting of the text (#1), dot leaders, and -% then page number (#2) flushed to the right margin. It is used for index -% and table of contents entries. The paragraph is indented by \leftskip. -% If \tocnodetarget is set, link text to the referenced node. -\def\entry{% +% \entryinternal typesets a paragraph consisting of the text (#1), dot +% leaders, and then page number (#2) flushed to the right margin. It is +% used for index and table of contents entries. The paragraph is indented +% by \leftskip. +% For PDF output, if \linkentrytexttrue and \tocnodetarget is set, link text +% to the referenced node. Else if \entrypagetarget is set, link text to the +% page. +\def\entryinternal{% \begingroup % % Start a new paragraph if necessary, so our assignments below can't @@ -5761,7 +5792,11 @@ \endlink \fi \else - \unhbox\boxA + \ifx\entrypagetarget\empty + \unhbox\boxA + \else + \pdflinkpage{\entrypagetarget}{\unhbox\boxA}% + \fi \fi \else \unhbox\boxA @@ -6433,6 +6468,10 @@ \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} +% @xrefname - give text with printed name for linking to node and allow +% referencing node, but do not print any heading. +\parseargdef\xrefname{\donoderef{Yomitfromtoc}{#1}}% + % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. @@ -6554,11 +6593,6 @@ \chapfonts \rm \let\footnote=\errfootnoteheading % give better error message % - % Have to define \currentsection before calling \donoderef, because the - % xref code eventually uses it. On the other hand, it has to be called - % after \pchapsepmacro, or the headline will change too soon. - \gdef\currentsection{#1}% - % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. \ifx\temptype\Ynothingkeyword @@ -6585,7 +6619,7 @@ % been typeset. If the destination for the pdf outline is after the % text, then jumping from the outline may wind up with the text not % being visible, for instance under high magnification. - \donoderef{#2}% + \donoderef{#2}{#1}% % % Typeset the actual heading. \nobreak % Avoid page breaks at the interline glue. @@ -6701,21 +6735,17 @@ \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% - \gdef\currentsection{#1}% \else\ifx\temptype\Yomitfromtockeyword - % for @headings -- no section number, don't include in toc, - % and don't redefine \currentsection. + % for @headings -- no section number, don't include in toc. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% - \gdef\currentsection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% - \gdef\currentsection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chapmacro. @@ -6723,7 +6753,7 @@ % % Write the node reference (= pdf destination for pdftex). % Again, see comments in \chapmacro. - \donoderef{#3}% + \donoderef{#3}{#1}% % % Interline glue will be inserted when the vbox is completed. % That glue will be a valid breakpoint for the page, since it'll be @@ -6955,6 +6985,7 @@ % \def\contents{% \startcontents{\putwordTOC}{\contentsmkdest}% + \ifxetex\xetexpreauxfile\fi \openin 1 \tocreadfilename\space \ifeof 1 \else \findsecnowidths @@ -6966,6 +6997,7 @@ \pdfmakeoutlines \fi \closein 1 + \ifxetex\xetexpostauxfile\fi \endgroup \contentsendroman } @@ -6999,11 +7031,13 @@ \let\numsubsubsecentry = \numsecentry \let\appsubsubsecentry = \numsecentry \let\unnsubsubsecentry = \numsecentry + \ifxetex\xetexpreauxfile\fi \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \closein 1 + \ifxetex\xetexpostauxfile\fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup @@ -7167,6 +7201,7 @@ \extrasecnoskip=0pt \let\tocnodetarget\empty +\let\entrypagetarget\empty % \tocentry{TITLE}{SEC NO}{NODE}{PAGE} % @@ -7174,7 +7209,7 @@ \def\tocnodetarget{#3}% \def\secno{#2}% \ifx\empty\secno - \entry{#1}{#4}% + \entryinternal{#1}{#4}% \else \ifdim 0pt=\secnowidth \setbox0=\hbox{#2\hskip\labelspace\hskip\extrasecnoskip}% @@ -7185,7 +7220,7 @@ #2\hskip\labelspace\hskip\extrasecnoskip\hfill}% \fi \entrycontskip=\wd0 - \entry{\box0 #1}{#4}% + \entryinternal{\box0 #1}{#4}% \fi } \newdimen\labelspace @@ -8170,18 +8205,11 @@ } \fi -\let\E=\expandafter - % Used at the time of macro expansion. % Argument is macro body with arguments substituted \def\scanmacro#1{% \newlinechar`\^^M - % expand the expansion of \eatleadingcr twice to maybe remove a leading - % newline (and \else and \fi tokens), then call \eatspaces on the result. - \def\xeatspaces##1{% - \E\E\E\E\E\E\E\eatspaces\E\E\E\E\E\E\E{\eatleadingcr##1% - }}% - \def\xempty##1{}% + \def\xeatspaces##1{\eatleadingcrthen\eatspaces{##1}}% % % Process the macro body under the current catcode regime. \scantokens{#1@comment}% @@ -8234,10 +8262,12 @@ \unbrace{\gdef\trim@@@ #1 } #2@{#1} } -{\catcode`\^^M=\other% -\gdef\eatleadingcr#1{\if\noexpand#1\noexpand^^M\else\E#1\fi}}% -% Warning: this won't work for a delimited argument -% or for an empty argument +% Trim a single leading ^^M off a string, then call #1 +{\catcode`\^^M=\active \catcode`\Q=3% +\gdef\eatleadingcrthen #1#2{\eatlcra #1Q#2Q^^MQ}% +\gdef\eatlcra #1#2Q^^M{\eatlcrb #1#2Q}% +\gdef\eatlcrb #1Q#2Q#3Q{#1{#2}}% +} % Trim a single trailing ^^M off a string. {\catcode`\^^M=\other \catcode`\Q=3% @@ -8373,6 +8403,10 @@ % is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. +% Make @ a letter, so that we can make private-to-Texinfo macro names. +\edef\texiatcatcode{\the\catcode`\@} +\catcode `@=11\relax + % Parse the optional {params} list to @macro or @rmacro. % Set \paramno to the number of arguments, % and \paramlist to a parameter text for the macro (e.g. #1,#2,#3 for a @@ -8385,14 +8419,13 @@ % That gets used by \mbodybackslash (above). % % If there are 10 or more arguments, a different technique is used: see -% \parsemmanyargdef. +% \parsemmanyargdef@@. % \def\parsemargdef#1;{% \paramno=0\def\paramlist{}% \let\hash\relax % \hash is redefined to `#' later to get it into definitions \let\xeatspaces\relax - \let\xempty\relax \parsemargdefxxx#1,;,% \ifnum\paramno<10\relax\else \paramno0\relax @@ -8404,11 +8437,9 @@ \else \let\next=\parsemargdefxxx \advance\paramno by 1 \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname - {\xeatspaces{\hash\the\paramno\noexpand\xempty{}}}% + {\xeatspaces{\hash\the\paramno}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} -% the \xempty{} is to give \eatleadingcr an argument in the case of an -% empty macro argument. % \parsemacbody, \parsermacbody % @@ -8419,14 +8450,12 @@ % body to be transformed. % Set \macrobody to the body of the macro, and call \macrodef. % +\catcode `\@\texiatcatcode {\catcode`\ =\other\long\gdef\parsemacbody#1@end macro{% \xdef\macrobody{\eatcr{#1}}\endgroup\macrodef}}% {\catcode`\ =\other\long\gdef\parsermacbody#1@end rmacro{% \xdef\macrobody{\eatcr{#1}}\endgroup\macrodef}}% - -% Make @ a letter, so that we can make private-to-Texinfo macro names. -\edef\texiatcatcode{\the\catcode`\@} -\catcode `@=11\relax +\catcode `\@=11\relax %%%%%%%%%%%%%% Code for > 10 arguments only %%%%%%%%%%%%%%%%%% @@ -8687,15 +8716,13 @@ \noexpand\expandafter \expandafter\noexpand\csname\the\macname @@\endcsname}% \expandafter\xdef\csname\the\macname @@\endcsname##1{% - \noexpand\passargtomacro - \expandafter\noexpand\csname\the\macname @@@\endcsname{##1,}}% + \noexpand\passargtomacro + \expandafter\noexpand\csname\the\macname @@@\endcsname{##1,}}% \expandafter\xdef\csname\the\macname @@@\endcsname##1{% - \expandafter\noexpand\csname\the\macname @@@@\endcsname ##1}% - \expandafter\expandafter - \expandafter\xdef - \expandafter\expandafter - \csname\the\macname @@@@\endcsname\paramlist{% - \endgroup\noexpand\scanmacro{\macrobody}}% + \expandafter\noexpand\csname\the\macname @@@@\endcsname ##1}% + \expandaftergroup{\expandafter\xdef\csname\the\macname @@@@\endcsname}% + \paramlist{% + \endgroup\noexpand\scanmacro{\macrobody}}% \else % 10 or more: \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% @@ -8707,6 +8734,16 @@ \catcode `\@\texiatcatcode\relax % end private-to-Texinfo catcodes +% utility definition to avoid excessive use of \expandafter. call +% as \expandaftergroup{CONTENT}\WORD to expand \WORD exactly once and remove +% braces around CONTENT. +\def\expandaftergroup#1#2{% + \expandafter\expandaftergroupx\expandafter{#2}{#1}% +} +\def\expandaftergroupx#1#2{% + #2#1% +} + \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} @@ -8876,9 +8913,8 @@ \expandafter\noexpand \csname\the\macname @@@\endcsname##1\noexpand\endlinemacro } - \expandafter\expandafter - \expandafter\xdef - \expandafter\expandafter\csname\the\macname @@@\endcsname\paramlist{% + \expandaftergroup{\expandafter\xdef\csname\the\macname @@@\endcsname}% + \paramlist{% \newlinechar=13 % split \macrobody into lines \noexpand\scantokens{\macrobody}% } @@ -8953,11 +8989,11 @@ \let\lastnode=\empty % Write a cross-reference definition for the current node. #1 is the -% type (Ynumbered, Yappendix, Ynothing). +% type (Ynumbered, Yappendix, Ynothing). #2 is the section title. % -\def\donoderef#1{% +\def\donoderef#1#2{% \ifx\lastnode\empty\else - \setref{\lastnode}{#1}% + \setref{\lastnode}{#1}{#2}% \global\let\lastnode=\empty \setnodeseenonce \fi @@ -8978,21 +9014,28 @@ % \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} -\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} - -% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an -% anchor), which consists of three parts: -% 1) NAME-title - the current sectioning name taken from \currentsection, -% or the anchor name. -% 2) NAME-snt - section number and type, passed as the SNT arg, or -% empty for anchors. +\def\anchor#1{% + \savesf \setref{#1}{Yanchor}{#1}\restoresf \ignorespaces +} + +% @namedanchor{NAME, XREFNAME} -- define xref target at arbitrary point +% with label text for cross-references to it. +\def\namedanchor#1{\donamedanchor#1\finish}% +\def\donamedanchor#1,#2\finish{% + \savesf \setref{#1}{Yanchor}{\ignorespaces #2\unskip}\restoresf \ignorespaces +} + +% \setref{NAME}{SNT}{TITLE} defines a cross-reference point NAME (a node +% or an anchor), which consists of three parts: +% 1) NAME-title - the current sectioning name +% 2) NAME-snt - section number and type, passed as the SNT arg. % 3) NAME-pg - the page number. % % This is called from \donoderef, \anchor, and \dofloat. In the case of % floats, there is an additional part, which is not written here: % 4) NAME-lof - the text as it should appear in a @listoffloats. % -\def\setref#1#2{% +\def\setref#1#2#3{% \pdfmkdest{#1}% \iflinks {% @@ -9004,7 +9047,7 @@ \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% - \toks0 = \expandafter{\currentsection}% + \toks0 = {#3}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout @@ -9058,15 +9101,7 @@ \setbox\infofilenamebox = \hbox{\infofilename\unskip}% % \startxreflink{#1}{#4}% - {% - % Have to otherify everything special to allow the \csname to - % include an _ in the xref name, etc. - \indexnofonts - \turnoffactive - \def\value##1{##1}% - \expandafter\global\expandafter\let\expandafter\Xthisreftitle - \csname XR#1-title\endcsname - }% + \getrefx{#1-title}\Xthisreftitle % % Float references are printed completely differently: "Figure 1.2" % instead of "[somenode], p.3". \iffloat distinguishes them by @@ -9099,21 +9134,23 @@ % Cross-manual reference with a printed manual name. % \crossmanualxref{\cite{\printedmanual\unskip}}% - % \else\ifdim \wd\infofilenamebox > 0pt % Cross-manual reference with only an info filename (arg 4), no % printed manual name (arg 5). This is essentially the same as % the case above; we output the filename, since we have nothing else. % \crossmanualxref{\code{\infofilename\unskip}}% - % \else % Reference within this manual. % - % Only output a following space if the -snt ref is nonempty, as the ref - % will be empty for @unnumbered and @anchor. - \setbox2 = \hbox{\ignorespaces \refx{#1-snt}}% - \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi + % Only output a following space if the -snt ref is nonempty, as is + % the case for @unnumbered and @anchor. + \getrefx{#1-snt}\tmp + \ifx\tmp\empty\else + \ifx\tmp\Yanchor\else + \tmp\space + \fi + \fi % % output the `[mynode]' via the macro below so it can be overridden. \xrefprintnodename\printedrefname @@ -9169,7 +9206,7 @@ \else % Otherwise just copy the Info node name. \def\printedrefname{\ignorespaces #1}% - \fi% + \fi \fi \fi \fi @@ -9201,7 +9238,7 @@ \ifnum\filenamelength>0 goto file{\the\filename.pdf} name{\pdfdestname}% \else - goto name{\pdfmkpgn{\pdfdestname}}% + goto name{\pdfdestname}% \fi \else % XeTeX \ifnum\filenamelength>0 @@ -9281,6 +9318,7 @@ % \def\Ynothing{} \def\Yomitfromtoc{} +\def\Yanchor{\isanchor} \let\isanchor\relax \def\Ynumbered{% \ifnum\secno=0 \putwordChapter@tie \the\chapno @@ -9307,14 +9345,7 @@ % \refx{NAME} - reference a cross-reference string named NAME. \def\refx#1{% - \requireauxfile - {% - \indexnofonts - \turnoffactive - \def\value##1{##1}% - \expandafter\global\expandafter\let\expandafter\thisrefX - \csname XR#1\endcsname - }% + \getrefx{#1}\thisrefX \ifx\thisrefX\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright @@ -9335,6 +9366,17 @@ \fi } +% Set #2 to xref string #1 +\def\getrefx#1#2{% + \requireauxfile + {% + \indexnofonts + \turnoffactive + \def\value##1{##1}% + \expandafter\global\expandafter\let\expandafter#2\csname XR#1\endcsname + }% +} + % This is the macro invoked by entries in the aux file. Define a control % sequence for a cross-reference target (we prepend XR to the control sequence % name to avoid collisions). The value is the page number. If this is a float @@ -9399,12 +9441,14 @@ % Read the last existing aux file, if any. No error if none exists. % \def\tryauxfile{% + \ifxetex\xetexpreauxfile\fi \openin 1 \jobname.aux \ifeof 1 \else \readdatafile{aux}% \global\havexrefstrue \fi \closein 1 + \ifxetex\xetexpostauxfile\fi } \def\setupdatafile{% @@ -9790,14 +9834,15 @@ \global\advance\floatno by 1 % {% - % This magic value for \currentsection is output by \setref as the - % XREFLABEL-title value. \xrefX uses it to distinguish float + % This magic value for the third argument of \setref is output as + % the XREFLABEL-title value. \xrefX uses it to distinguish float % labels (which have a completely different output format) from % node and anchor labels. And \xrdef uses it to construct the % lists of floats. % - \edef\currentsection{\floatmagic=\safefloattype}% - \setref{\floatlabel}{Yfloat}% + \edef\tmp{\noexpand\setref{\floatlabel}{Yfloat}% + {\floatmagic=\safefloattype}}% + \tmp }% \fi % @@ -9919,7 +9964,7 @@ % #1 is the control sequence we are passed; we expand into a conditional % which is true if #1 represents a float ref. That is, the magic -% \currentsection value which we \setref above. +% value which we passed to \setref above. % \def\iffloat#1{\expandafter\doiffloat#1==\finish} % @@ -9976,6 +10021,7 @@ \toksA = \expandafter{\csname XR#1-lof\endcsname}% % % use the same \entry macro we use to generate the TOC and index. + \let\entry\entryinternal \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% \writeentry }} @@ -10071,17 +10117,24 @@ \fi \fi +\let\xetexpreauxfile\relax +\let\xetexpostauxfile\relax + % Set I/O by bytes instead of UTF-8 sequence for XeTeX and LuaTex % for non-UTF-8 (byte-wise) encodings. % \def\setbytewiseio{% \ifxetex - \XeTeXdefaultencoding "bytes" % For subsequent files to be read - \XeTeXinputencoding "bytes" % For document root file - % Unfortunately, there seems to be no corresponding XeTeX command for - % output encoding. This is a problem for auxiliary index and TOC files. - % The only solution would be perhaps to write out @U{...} sequences in - % place of non-ASCII characters. + % For document root file + \XeTeXinputencoding "bytes" + % + % Setting for subsequent files to be read with @include. + \XeTeXdefaultencoding "bytes" + % + % Use UTF-8 for reading auxiliary index and TOC files, which are + % always output in UTF-8 with XeTeX. + \def\xetexpreauxfile{\XeTeXdefaultencoding "UTF-8"}% + \def\xetexpostauxfile{\XeTeXdefaultencoding "bytes"}% \fi \ifluatex @@ -10713,12 +10766,12 @@ % Suppress ligature creation from adjacent characters. \ifluatex - \def\nolig{{}} -\else % Braces do not suppress ligature creation in LuaTeX, e.g. in of{}fice % to suppress the "ff" ligature. Using a kern appears to be the only % workaround. \def\nolig{\kern0pt{}} +\else + \def\nolig{{}} \fi % https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_M diff --git a/lib/acl-internal.c b/lib/acl-internal.c index 1a6087b03a9..6c50feacbb8 100644 --- a/lib/acl-internal.c +++ b/lib/acl-internal.c @@ -31,7 +31,7 @@ # include #endif -#if USE_ACL && HAVE_ACL_GET_FILE /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ +#if USE_ACL && HAVE_ACL_GET_FILE /* Linux, FreeBSD, NetBSD >= 10, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ # if HAVE_ACL_TYPE_EXTENDED /* Mac OS X */ @@ -45,7 +45,7 @@ acl_extended_nontrivial (acl_t acl) return (acl_entries (acl) > 0); } -# else /* Linux, FreeBSD, IRIX, Tru64, Cygwin >= 2.5 */ +# else /* Linux, FreeBSD, NetBSD >= 10, IRIX, Tru64, Cygwin >= 2.5 */ /* ACL is an ACL, from a file, stored as type ACL_TYPE_ACCESS. Return 1 if the given ACL is non-trivial. @@ -59,7 +59,7 @@ acl_access_nontrivial (acl_t acl) at least, allowing us to write return (3 < acl_entries (acl)); but the following code is more robust. */ -# if HAVE_ACL_FIRST_ENTRY /* Linux, FreeBSD, Cygwin >= 2.5 */ +# if HAVE_ACL_FIRST_ENTRY /* Linux, FreeBSD, NetBSD >= 10, Cygwin >= 2.5 */ acl_entry_t ace; int got_one; @@ -548,7 +548,7 @@ void free_permission_context (struct permission_context *ctx) { #if USE_ACL -# if HAVE_ACL_GET_FILE /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ +# if HAVE_ACL_GET_FILE /* Linux, FreeBSD, NetBSD >= 10, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ if (ctx->acl) acl_free (ctx->acl); # if !HAVE_ACL_TYPE_EXTENDED diff --git a/lib/acl-internal.h b/lib/acl-internal.h index f37b3bcff5b..cb969e9797e 100644 --- a/lib/acl-internal.h +++ b/lib/acl-internal.h @@ -52,10 +52,7 @@ extern int aclsort (int, int, struct acl *); #include #include - -#ifndef SIZE_MAX -# define SIZE_MAX ((size_t) -1) -#endif +#include #ifndef HAVE_FCHMOD # define HAVE_FCHMOD false @@ -121,8 +118,13 @@ rpl_acl_set_fd (int fd, acl_t acl) # endif /* Linux-specific */ -/* Cygwin >= 2.5 implements this function, but it returns 1 for all - directories, thus is unusable. */ +/* Cygwin >= 2.5 implements acl_extended_file(), but it returns 1 for nearly all + directories — for reasons explained in + —, thus is + unusable. For the user, 'ls' should not print a '+' sign, indicating the + presence of an ACL, for 99,9% of the files; this would not be useful. + Therefore, on Cygwin, we ignore the acl_extended_file function and instead + use our own acl_access_nontrivial function. */ # if !defined HAVE_ACL_EXTENDED_FILE || defined __CYGWIN__ # undef HAVE_ACL_EXTENDED_FILE # define HAVE_ACL_EXTENDED_FILE false diff --git a/lib/acl_entries.c b/lib/acl_entries.c index 808ad93fe2c..57b7b4998c0 100644 --- a/lib/acl_entries.c +++ b/lib/acl_entries.c @@ -22,7 +22,7 @@ #include "acl-internal.h" /* This file assumes POSIX-draft like ACLs - (Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5). */ + (Linux, FreeBSD, NetBSD >= 10, Mac OS X, IRIX, Tru64, Cygwin >= 2.5). */ /* Return the number of entries in ACL. Return -1 and set errno upon failure to determine it. */ @@ -34,7 +34,7 @@ acl_entries (acl_t acl) if (acl != NULL) { -#if HAVE_ACL_FIRST_ENTRY /* Linux, FreeBSD, Mac OS X, Cygwin >= 2.5 */ +#if HAVE_ACL_FIRST_ENTRY /* Linux, FreeBSD, NetBSD >= 10, Mac OS X, Cygwin >= 2.5 */ # if HAVE_ACL_TYPE_EXTENDED /* Mac OS X */ /* acl_get_entry returns 0 when it successfully fetches an entry, and -1/EINVAL at the end. */ @@ -45,7 +45,7 @@ acl_entries (acl_t acl) got_one >= 0; got_one = acl_get_entry (acl, ACL_NEXT_ENTRY, &ace)) count++; -# else /* Linux, FreeBSD, Cygwin >= 2.5 */ +# else /* Linux, FreeBSD, NetBSD >= 10, Cygwin >= 2.5 */ /* acl_get_entry returns 1 when it successfully fetches an entry, and 0 at the end. */ acl_entry_t ace; diff --git a/lib/fcntl.in.h b/lib/fcntl.in.h index ac61c0865a4..d7f551b30f3 100644 --- a/lib/fcntl.in.h +++ b/lib/fcntl.in.h @@ -22,8 +22,12 @@ #endif @PRAGMA_COLUMNS@ -#if defined __need_system_fcntl_h -/* Special invocation convention. */ +#if defined __need_system_fcntl_h || defined _@GUARD_PREFIX@_ALREADY_INCLUDING_FCNTL_H +/* Special invocation convention: + - On Haiku we have a sequence of nested includes + -> -> + In this situation, GNULIB_defined_O_NONBLOCK gets defined before the + system's definition of O_NONBLOCK is processed. */ /* Needed before . May also define off_t to a 64-bit type on native Windows. */ @@ -50,6 +54,8 @@ #ifndef _@GUARD_PREFIX@_FCNTL_H +#define _@GUARD_PREFIX@_ALREADY_INCLUDING_FCNTL_H + /* Needed before . May also define off_t to a 64-bit type on native Windows. Also defines off64_t on macOS, NetBSD, OpenBSD, MSVC, Cygwin, Haiku. */ @@ -72,6 +78,8 @@ # include #endif +#undef _@GUARD_PREFIX@_ALREADY_INCLUDING_FCNTL_H + #ifndef _@GUARD_PREFIX@_FCNTL_H #define _@GUARD_PREFIX@_FCNTL_H diff --git a/lib/file-has-acl.c b/lib/file-has-acl.c index c02cfee842b..66b920c1ab2 100644 --- a/lib/file-has-acl.c +++ b/lib/file-has-acl.c @@ -50,7 +50,6 @@ static char const UNKNOWN_SECURITY_CONTEXT[] = "?"; # include # endif # include -# include # include # include # include @@ -363,6 +362,29 @@ acl_nfs4_nontrivial (uint32_t *xattr, ssize_t nbytes) } #endif +#if (!USE_LINUX_XATTR && USE_ACL && HAVE_ACL_GET_FD \ + && !HAVE_ACL_EXTENDED_FILE && !HAVE_ACL_TYPE_EXTENDED \ + && !HAVE_ACL_GET_LINK_NP) +# include +# ifdef O_PATH + +/* Like acl_get_file, but do not follow symbolic links. */ +static acl_t +acl_get_link_np (char const *name, acl_type_t type) +{ + int fd = open (name, O_PATH | O_NOFOLLOW); + if (fd < 0) + return NULL; + acl_t r = acl_get_fd (fd); + int err = errno; + close (fd); + errno = err; + return r; +} +# define HAVE_ACL_GET_LINK_NP 1 +# endif +#endif + /* Return 1 if NAME has a nontrivial access control list, 0 if ACLs are not supported, or if NAME has no or only a base ACL, and -1 (setting errno) on error. Note callers can determine @@ -468,7 +490,7 @@ file_has_aclinfo (MAYBE_UNUSED char const *restrict name, ret = -1; # else /* FreeBSD, NetBSD >= 10, IRIX, Tru64, Cygwin >= 2.5 */ acl_t (*acl_get_file_or_link) (char const *, acl_type_t) = acl_get_file; -# if HAVE_ACL_GET_LINK_NP /* FreeBSD, NetBSD >= 10 */ +# if HAVE_ACL_GET_LINK_NP /* FreeBSD, NetBSD >= 10, Cygwin >= 2.5 */ if (! (flags & ACL_SYMLINK_FOLLOW)) acl_get_file_or_link = acl_get_link_np; # endif diff --git a/lib/fpending.c b/lib/fpending.c index 7614b607832..be8a9877349 100644 --- a/lib/fpending.c +++ b/lib/fpending.c @@ -26,7 +26,7 @@ /* This file is not used on systems that already have the __fpending function, namely glibc >= 2.2, Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.34, - Android API >= 23. */ + Android API >= 23, musl libc, Haiku >= hrev58760. */ /* Return the number of pending (aka buffered, unflushed) bytes on the stream, FP, that is open for writing. */ diff --git a/lib/getloadavg.c b/lib/getloadavg.c index a7966462c73..9da41c16c02 100644 --- a/lib/getloadavg.c +++ b/lib/getloadavg.c @@ -47,8 +47,6 @@ N_NAME_POINTER The nlist n_name element is a pointer, not an array. HAVE_STRUCT_NLIST_N_UN_N_NAME 'n_un.n_name' is member of 'struct nlist'. - LINUX_LDAV_FILE [__linux__, __ANDROID__, __CYGWIN__]: File - containing load averages. Specific system predefines this file uses, aside from setting default values if not emacs: @@ -65,8 +63,7 @@ UMAX4_3 VMS _WIN32 Native Windows (possibly also defined on Cygwin) - __linux__, __ANDROID__ Linux: assumes /proc file system mounted. - Support from Michael K. Johnson. + __linux__, __ANDROID__ Linux: assumes sysinfo() call. __CYGWIN__ Cygwin emulates linux /proc/loadavg. __NetBSD__ NetBSD: assumes /kern file system mounted. @@ -108,10 +105,10 @@ # endif /* Same issues as for NeXT apply to the HURD-based GNU system. */ -# ifdef __GNU__ +# if defined __gnu_hurd__ || defined NeXT # undef BSD # undef FSCALE -# endif /* __GNU__ */ +# endif /* __gnu_hurd__ || NeXT */ /* Set values that are different from the defaults, which are set a little farther down with #ifndef. */ @@ -312,8 +309,7 @@ # endif # endif -# if defined (__GNU__) && !defined (NeXT) -/* Note that NeXT Openstep defines __GNU__ even though it should not. */ +# if defined __gnu_hurd__ && !defined NeXT /* GNU system acts much like NeXT, for load average purposes, but not exactly. */ # define NeXT @@ -358,6 +354,11 @@ # include # endif +# if defined __linux__ || defined __ANDROID__ +# include +# include +# endif + # if (defined __linux__ || defined __ANDROID__ \ || defined __CYGWIN__ || defined SUNOS_5 \ || (defined LOAD_AVE_TYPE && ! defined __VMS)) @@ -498,20 +499,32 @@ getloadavg (double loadavg[], int nelem) } # endif -# if !defined (LDAV_DONE) && (defined __linux__ || defined __ANDROID__ || defined __CYGWIN__) +# if !defined (LDAV_DONE) && (defined __linux__ || defined __ANDROID__) /* Linux without glibc, Android, Cygwin */ # define LDAV_DONE # undef LOAD_AVE_TYPE -# ifndef LINUX_LDAV_FILE -# define LINUX_LDAV_FILE "/proc/loadavg" -# endif + { + struct sysinfo info; + if (sysinfo (&info) < 0) + return -1; + loadavg[0] = info.loads[0] / (double)(1U << SI_LOAD_SHIFT); + loadavg[1] = info.loads[1] / (double)(1U << SI_LOAD_SHIFT); + loadavg[2] = info.loads[2] / (double)(1U << SI_LOAD_SHIFT); + elem = 3; + } +# endif /* __linux__ || __ANDROID__ */ + +# if !defined (LDAV_DONE) && defined __CYGWIN__ + /* Cygwin */ +# define LDAV_DONE +# undef LOAD_AVE_TYPE char ldavgbuf[3 * (INT_STRLEN_BOUND (int) + sizeof ".00 ")]; char const *ptr = ldavgbuf; int fd, count, saved_errno; - fd = open (LINUX_LDAV_FILE, O_RDONLY | O_CLOEXEC); + fd = open ("/proc/loadavg", O_RDONLY | O_CLOEXEC); if (fd == -1) return -1; count = read (fd, ldavgbuf, sizeof ldavgbuf - 1); @@ -554,7 +567,7 @@ getloadavg (double loadavg[], int nelem) return elem; -# endif /* __linux__ || __ANDROID__ || __CYGWIN__ */ +# endif /* __CYGWIN__ */ # if !defined (LDAV_DONE) && defined (__NetBSD__) /* NetBSD < 0.9 */ # define LDAV_DONE diff --git a/lib/getopt-pfx-ext.h b/lib/getopt-pfx-ext.h index 1f2b2d71bf7..a61c68c795e 100644 --- a/lib/getopt-pfx-ext.h +++ b/lib/getopt-pfx-ext.h @@ -38,11 +38,9 @@ # endif # undef getopt_long # undef getopt_long_only -# undef option # undef _getopt_internal # define getopt_long __GETOPT_ID (getopt_long) # define getopt_long_only __GETOPT_ID (getopt_long_only) -# define option __GETOPT_ID (option) # define _getopt_internal __GETOPT_ID (getopt_internal) /* The system's getopt.h may have already included getopt-ext.h to diff --git a/lib/getopt.in.h b/lib/getopt.in.h index 79200ecdab9..4a87a2d53bf 100644 --- a/lib/getopt.in.h +++ b/lib/getopt.in.h @@ -30,7 +30,12 @@ ; our definitions will be present soon enough. */ #if @HAVE_GETOPT_H@ # define _GL_SYSTEM_GETOPT +/* Rename the system's 'struct option' to 'struct sys_option', + so that we don't have to rename ours to 'struct rpl_option' + (which would cause significant trouble in C++ mode). */ +# define option sys_option # @INCLUDE_NEXT@ @NEXT_GETOPT_H@ +# undef option # undef _GL_SYSTEM_GETOPT #endif diff --git a/lib/gnulib.mk.in b/lib/gnulib.mk.in index fa2250cf686..fb34cf2cc1d 100644 --- a/lib/gnulib.mk.in +++ b/lib/gnulib.mk.in @@ -49,6 +49,7 @@ # --avoid=iswxdigit \ # --avoid=langinfo-h \ # --avoid=libgmp-mpq \ +# --avoid=locale-h \ # --avoid=localename-unsafe-limited \ # --avoid=lock \ # --avoid=mbrtowc \ @@ -624,6 +625,7 @@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ +GL_GNULIB_STRERROR_L = @GL_GNULIB_STRERROR_L@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ @@ -916,6 +918,7 @@ HAVE_STR2SIG = @HAVE_STR2SIG@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ +HAVE_STRERROR_L = @HAVE_STRERROR_L@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ @@ -1213,6 +1216,7 @@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ +REPLACE_GETLOGIN = @REPLACE_GETLOGIN@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ @@ -1307,6 +1311,7 @@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ +REPLACE_STRERROR_L = @REPLACE_STRERROR_L@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ @@ -1543,6 +1548,7 @@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ standardlisppath = @standardlisppath@ sysconfdir = @sysconfdir@ +systemduserunitdir = @systemduserunitdir@ target_alias = @target_alias@ version = @version@ with_mailutils = @with_mailutils@ @@ -1715,13 +1721,25 @@ libgnu_a_SOURCES += c-ctype.h c-ctype.c endif ## end gnulib module c-ctype -## begin gnulib module c-strcase -ifeq (,$(OMIT_GNULIB_MODULE_c-strcase)) +## begin gnulib module c-strcasecmp +ifeq (,$(OMIT_GNULIB_MODULE_c-strcasecmp)) -libgnu_a_SOURCES += c-strcase.h c-strcasecmp.c c-strncasecmp.c +libgnu_a_SOURCES += c-strcasecmp.c + +EXTRA_DIST += c-strcase.h + +endif +## end gnulib module c-strcasecmp + +## begin gnulib module c-strncasecmp +ifeq (,$(OMIT_GNULIB_MODULE_c-strncasecmp)) + +libgnu_a_SOURCES += c-strncasecmp.c + +EXTRA_DIST += c-strcase.h endif -## end gnulib module c-strcase +## end gnulib module c-strncasecmp ## begin gnulib module canonicalize-lgpl ifeq (,$(OMIT_GNULIB_MODULE_canonicalize-lgpl)) @@ -3681,6 +3699,7 @@ string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H -e 's/@''GNULIB_STR_STARTSWITH''@/$(GL_GNULIB_STR_STARTSWITH)/g' \ -e 's/@''GNULIB_STRERROR''@/$(GL_GNULIB_STRERROR)/g' \ -e 's/@''GNULIB_STRERROR_R''@/$(GL_GNULIB_STRERROR_R)/g' \ + -e 's/@''GNULIB_STRERROR_L''@/$(GL_GNULIB_STRERROR_L)/g' \ -e 's/@''GNULIB_STRERRORNAME_NP''@/$(GL_GNULIB_STRERRORNAME_NP)/g' \ -e 's/@''GNULIB_SIGABBREV_NP''@/$(GL_GNULIB_SIGABBREV_NP)/g' \ -e 's/@''GNULIB_SIGDESCR_NP''@/$(GL_GNULIB_SIGDESCR_NP)/g' \ @@ -3711,6 +3730,7 @@ string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ + -e 's|@''HAVE_STRERROR_L''@|$(HAVE_STRERROR_L)|g' \ -e 's|@''HAVE_STRERRORNAME_NP''@|$(HAVE_STRERRORNAME_NP)|g' \ -e 's|@''HAVE_SIGABBREV_NP''@|$(HAVE_SIGABBREV_NP)|g' \ -e 's|@''HAVE_SIGDESCR_NP''@|$(HAVE_SIGDESCR_NP)|g' \ @@ -3734,6 +3754,7 @@ string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ + -e 's|@''REPLACE_STRERROR_L''@|$(REPLACE_STRERROR_L)|g' \ -e 's|@''REPLACE_STRERRORNAME_NP''@|$(REPLACE_STRERRORNAME_NP)|g' \ -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ -e 's|@''REPLACE_STRVERSCMP''@|$(REPLACE_STRVERSCMP)|g' \ @@ -4328,6 +4349,7 @@ unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \ -e 's|@''REPLACE_GETDTABLESIZE''@|$(REPLACE_GETDTABLESIZE)|g' \ -e 's|@''REPLACE_GETENTROPY''@|$(REPLACE_GETENTROPY)|g' \ + -e 's|@''REPLACE_GETLOGIN''@|$(REPLACE_GETLOGIN)|g' \ -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ diff --git a/lib/intprops.h b/lib/intprops.h index 83efe39910a..2f9fa0a0222 100644 --- a/lib/intprops.h +++ b/lib/intprops.h @@ -39,7 +39,7 @@ then 'switch (INT_PROMOTE (E))' pacifies gcc -Wswitch-enum if some enum values are deliberately omitted from the switch's cases. Here, unary + is safer than a cast or inline function, as unary + - does only integer promotions. */ + does only integer promotions and is disallowed on pointers. */ #define INT_PROMOTE(e) (+ (e)) diff --git a/lib/nproc.c b/lib/nproc.c index d48e4dd94f5..83439aa0eb2 100644 --- a/lib/nproc.c +++ b/lib/nproc.c @@ -398,20 +398,16 @@ parse_omp_threads (char const* threads) /* Convert it from positive decimal to 'unsigned long'. */ if (c_isdigit (*threads)) { - char *endptr = NULL; + char *endptr; unsigned long int value = strtoul (threads, &endptr, 10); - - if (endptr != NULL) - { - while (*endptr != '\0' && c_isspace (*endptr)) - endptr++; - if (*endptr == '\0') - return value; - /* Also accept the first value in a nesting level, - since we can't determine the nesting level from env vars. */ - else if (*endptr == ',') - return value; - } + while (*endptr != '\0' && c_isspace (*endptr)) + endptr++; + if (*endptr == '\0') + return value; + /* Also accept the first value in a nesting level, + since we can't determine the nesting level from env vars. */ + else if (*endptr == ',') + return value; } return ret; @@ -438,6 +434,9 @@ num_processors (enum nproc_query query) query = NPROC_CURRENT; } /* Here query is one of NPROC_ALL, NPROC_CURRENT. */ + if (omp_env_limit == 1) + /* No need to even call num_processors_ignoring_omp (query). */ + return 1; { unsigned long nprocs = num_processors_ignoring_omp (query); return MIN (nprocs, omp_env_limit); diff --git a/lib/readutmp.h b/lib/readutmp.h index b5e8133c7c6..60d63df9598 100644 --- a/lib/readutmp.h +++ b/lib/readutmp.h @@ -45,7 +45,7 @@ # include #endif -/* Needed for BOOT_TIME and USER_PROCESS. */ +/* Needed for BOOT_TIME, USER_PROCESS, LOGIN_PROCESS. */ #if HAVE_UTMPX_H # if defined _THREAD_SAFE && defined UTMP_DATA_INIT /* When including both utmp.h and utmpx.h on AIX 4.3, with _THREAD_SAFE @@ -74,7 +74,8 @@ struct gl_utmp struct timespec ut_ts; /* time */ pid_t ut_pid; /* process ID of ? */ pid_t ut_session; /* process ID of session leader */ - short ut_type; /* BOOT_TIME, USER_PROCESS, or other */ + short ut_type; /* BOOT_TIME, USER_PROCESS, LOGIN_PROCESS, + or other */ struct { int e_termination; int e_exit; } ut_exit; }; @@ -257,19 +258,21 @@ struct utmpx32 # define WTMP_FILE "/etc/wtmp" #endif -/* In early versions of Android, did not define BOOT_TIME, only - USER_PROCESS. We need to use the value that is defined in newer versions - of Android. */ +/* In early versions of Android, did not define BOOT_TIME or + LOGIN_PROCESS, only USER_PROCESS. We need to use the value that is defined + in newer versions of Android. */ #if defined __ANDROID__ && !defined BOOT_TIME # define BOOT_TIME 2 +# define LOGIN_PROCESS 6 #endif /* Some platforms, such as OpenBSD, don't have an ut_type field and don't have - the BOOT_TIME and USER_PROCESS macros. But we want to support them in - 'struct gl_utmp'. */ + the BOOT_TIME, USER_PROCESS, and LOGIN_PROCESS macros. But we want to + support them in 'struct gl_utmp'. */ #if !(HAVE_UTMPX_H ? HAVE_STRUCT_UTMPX_UT_TYPE : HAVE_STRUCT_UTMP_UT_TYPE) # define BOOT_TIME 2 # define USER_PROCESS 0 +# define LOGIN_PROCESS 6 #endif /* Macros that test (UT)->ut_type. */ @@ -283,6 +286,11 @@ struct utmpx32 #else # define UT_TYPE_USER_PROCESS(UT) 0 #endif +#ifdef LOGIN_PROCESS +# define UT_TYPE_LOGIN_PROCESS(UT) ((UT)->ut_type == LOGIN_PROCESS) +#else +# define UT_TYPE_LOGIN_PROCESS(UT) 0 +#endif /* Determines whether an entry *UT corresponds to a user process. */ #define IS_USER_PROCESS(UT) \ diff --git a/lib/regcomp.c b/lib/regcomp.c index 41b0f989c03..a23f289d7a1 100644 --- a/lib/regcomp.c +++ b/lib/regcomp.c @@ -831,7 +831,7 @@ init_dfa (re_dfa_t *dfa, size_t pat_len) if (table_size > pat_len) break; - dfa->state_table = calloc (sizeof (struct re_state_table_entry), table_size); + dfa->state_table = calloc (table_size, sizeof (struct re_state_table_entry)); dfa->state_hash_mask = table_size - 1; dfa->mb_cur_max = MB_CUR_MAX; @@ -862,7 +862,7 @@ init_dfa (re_dfa_t *dfa, size_t pat_len) { int i, j, ch; - dfa->sb_char = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); + dfa->sb_char = (re_bitset_ptr_t) calloc (1, sizeof (bitset_t)); if (__glibc_unlikely (dfa->sb_char == NULL)) return REG_ESPACE; @@ -3055,8 +3055,8 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, _NL_COLLATE_SYMB_EXTRAMB); } #endif - sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); - mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1); + sbcset = (re_bitset_ptr_t) calloc (1, sizeof (bitset_t)); + mbcset = (re_charset_t *) calloc (1, sizeof (re_charset_t)); if (__glibc_unlikely (sbcset == NULL || mbcset == NULL)) { re_free (sbcset); @@ -3548,13 +3548,13 @@ build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE trans, reg_errcode_t ret; bin_tree_t *tree; - sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); + sbcset = (re_bitset_ptr_t) calloc (1, sizeof (bitset_t)); if (__glibc_unlikely (sbcset == NULL)) { *err = REG_ESPACE; return NULL; } - mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1); + mbcset = (re_charset_t *) calloc (1, sizeof (re_charset_t)); if (__glibc_unlikely (mbcset == NULL)) { re_free (sbcset); diff --git a/lib/regex.h b/lib/regex.h index 67a3aa70a51..e9ab85e8b5a 100644 --- a/lib/regex.h +++ b/lib/regex.h @@ -66,15 +66,14 @@ typedef unsigned long int active_reg_t; /* The following bits are used to determine the regexp syntax we recognize. The set/not-set meanings are chosen so that Emacs syntax - remains the value 0. The bits are given in alphabetical order, and - the definitions shifted by one from the previous bit; thus, when we - add or remove a bit, only one other definition need change. */ + is the value 0 for Emacs 20 (2000) and earlier, and the value + RE_SYNTAX_EMACS for Emacs 21 (2001) and later. */ typedef unsigned long int reg_syntax_t; #ifdef __USE_GNU /* If this bit is not set, then \ inside a bracket expression is literal. If set, then such a \ quotes the following character. */ -# define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1) +# define RE_BACKSLASH_ESCAPE_IN_LISTS 1ul /* If this bit is not set, then + and ? are operators, and \+ and \? are literals. @@ -215,7 +214,8 @@ extern reg_syntax_t re_syntax_options; (The [[[ comments delimit what gets put into the Texinfo file, so don't delete them!) */ /* [[[begin syntaxes]]] */ -# define RE_SYNTAX_EMACS 0 +# define RE_SYNTAX_EMACS \ + (RE_CHAR_CLASSES | RE_INTERVALS) # define RE_SYNTAX_AWK \ (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \ @@ -522,20 +522,6 @@ typedef struct /* Declarations for routines. */ -#ifndef _REGEX_NELTS -# if (defined __STDC_VERSION__ && 199901L <= __STDC_VERSION__ \ - && !defined __STDC_NO_VLA__) -# define _REGEX_NELTS(n) n -# else -# define _REGEX_NELTS(n) -# endif -#endif - -#if defined __GNUC__ && 4 < __GNUC__ + (6 <= __GNUC_MINOR__) -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wvla" -#endif - #ifndef _Attr_access_ # ifdef __attr_access # define _Attr_access_(arg) __attr_access (arg) @@ -682,8 +668,7 @@ extern int regcomp (regex_t *_Restrict_ __preg, extern int regexec (const regex_t *_Restrict_ __preg, const char *_Restrict_ __String, size_t __nmatch, - regmatch_t __pmatch[_Restrict_arr_ - _REGEX_NELTS (__nmatch)], + regmatch_t __pmatch[_Restrict_arr_], int __eflags); extern size_t regerror (int __errcode, const regex_t *_Restrict_ __preg, @@ -692,10 +677,6 @@ extern size_t regerror (int __errcode, const regex_t *_Restrict_ __preg, extern void regfree (regex_t *__preg); -#if defined __GNUC__ && 4 < __GNUC__ + (6 <= __GNUC_MINOR__) -# pragma GCC diagnostic pop -#endif - #ifdef __cplusplus } #endif /* C++ */ diff --git a/lib/regex_internal.c b/lib/regex_internal.c index 8bf761c7616..9b89cc9372b 100644 --- a/lib/regex_internal.c +++ b/lib/regex_internal.c @@ -1595,7 +1595,7 @@ create_ci_newstate (const re_dfa_t *dfa, const re_node_set *nodes, reg_errcode_t err; re_dfastate_t *newstate; - newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1); + newstate = (re_dfastate_t *) calloc (1, sizeof (re_dfastate_t)); if (__glibc_unlikely (newstate == NULL)) return NULL; err = re_node_set_init_copy (&newstate->nodes, nodes); @@ -1643,7 +1643,7 @@ create_cd_newstate (const re_dfa_t *dfa, const re_node_set *nodes, reg_errcode_t err; re_dfastate_t *newstate; - newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1); + newstate = (re_dfastate_t *) calloc (1, sizeof (re_dfastate_t)); if (__glibc_unlikely (newstate == NULL)) return NULL; err = re_node_set_init_copy (&newstate->nodes, nodes); diff --git a/lib/regexec.c b/lib/regexec.c index 58215bd3766..c5ab9b6649f 100644 --- a/lib/regexec.c +++ b/lib/regexec.c @@ -185,7 +185,7 @@ static reg_errcode_t extend_buffers (re_match_context_t *mctx, int min_len); int regexec (const regex_t *__restrict preg, const char *__restrict string, - size_t nmatch, regmatch_t pmatch[_REGEX_NELTS (nmatch)], int eflags) + size_t nmatch, regmatch_t pmatch[], int eflags) { reg_errcode_t err; Idx start, length; @@ -229,7 +229,7 @@ int attribute_compat_text_section __compat_regexec (const regex_t *__restrict preg, const char *__restrict string, size_t nmatch, - regmatch_t pmatch[_REGEX_NELTS (nmatch)], int eflags) + regmatch_t pmatch[], int eflags) { return regexec (preg, string, nmatch, pmatch, eflags & (REG_NOTBOL | REG_NOTEOL)); @@ -2721,8 +2721,8 @@ get_subexp (re_match_context_t *mctx, Idx bkref_node, Idx bkref_str_idx) continue; /* No. */ if (sub_top->path == NULL) { - sub_top->path = calloc (sizeof (state_array_t), - sl_str - sub_top->str_idx + 1); + sub_top->path = calloc (sl_str - sub_top->str_idx + 1, + sizeof (state_array_t)); if (sub_top->path == NULL) return REG_ESPACE; } @@ -3266,7 +3266,7 @@ build_trtable (const re_dfa_t *dfa, re_dfastate_t *state) if (ndests == 0) { state->trtable = (re_dfastate_t **) - calloc (sizeof (re_dfastate_t *), SBC_MAX); + calloc (SBC_MAX, sizeof (re_dfastate_t *)); if (__glibc_unlikely (state->trtable == NULL)) return false; return true; @@ -3338,7 +3338,7 @@ build_trtable (const re_dfa_t *dfa, re_dfastate_t *state) discern by looking at the character code: allocate a 256-entry transition table. */ trtable = state->trtable = - (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), SBC_MAX); + (re_dfastate_t **) calloc (SBC_MAX, sizeof (re_dfastate_t *)); if (__glibc_unlikely (trtable == NULL)) goto out_free; @@ -3369,7 +3369,7 @@ build_trtable (const re_dfa_t *dfa, re_dfastate_t *state) transition tables, one starting at trtable[0] and one starting at trtable[SBC_MAX]. */ trtable = state->word_trtable = - (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), 2 * SBC_MAX); + (re_dfastate_t **) calloc (2 * SBC_MAX, sizeof (re_dfastate_t *)); if (__glibc_unlikely (trtable == NULL)) goto out_free; diff --git a/lib/stdio-impl.h b/lib/stdio-impl.h index 878e9f8c97d..4b4263fe908 100644 --- a/lib/stdio-impl.h +++ b/lib/stdio-impl.h @@ -30,6 +30,49 @@ # endif #endif +/* Haiku stdio implementation. */ +#if defined __HAIKU__ +# include +/* This FILE structure was made into an incomplete type in 2025. + See . */ +# define fp_ ((struct { int _flags; \ + char *_IO_read_ptr; \ + char *_IO_read_end; \ + char *_IO_read_base; \ + char *_IO_write_base; \ + char *_IO_write_ptr; \ + char *_IO_write_end; \ + char *_IO_buf_base; \ + char *_IO_buf_end; \ + char *_IO_save_base; \ + char *_IO_backup_base; \ + char *_IO_save_end; \ + void *_markers; \ + void *_chain; \ + int _fileno; \ + int _flags2; \ + off_t _old_offset; \ + unsigned short _cur_column; \ + signed char _vtable_offset; \ + char _shortbuf[1]; \ + void *_lock; \ + int64_t _offset; \ + /* More fields, not relevant here. */ \ + } *) fp) +# if !defined _IO_UNBUFFERED +# define _IO_UNBUFFERED 0x2 +# endif +# if !defined _IO_EOF_SEEN +# define _IO_EOF_SEEN 0x10 +# endif +# if !defined _IO_IN_BACKUP +# define _IO_IN_BACKUP 0x100 +# endif +# if !defined _IO_LINE_BUF +# define _IO_LINE_BUF 0x200 +# endif +#endif + /* BSD stdio derived implementations. */ #if defined __NetBSD__ /* NetBSD */ diff --git a/lib/stdlib.in.h b/lib/stdlib.in.h index bd82086ff37..dbe8ebc8502 100644 --- a/lib/stdlib.in.h +++ b/lib/stdlib.in.h @@ -63,7 +63,7 @@ #include /* MirBSD 10 defines WEXITSTATUS in , not in . - glibc 2.40 defines WCOREDUMP in , not in . */ + glibc 2.41 defines WCOREDUMP in , not in . */ #if @GNULIB_SYSTEM_POSIX@ && !(defined WEXITSTATUS && defined WCOREDUMP) # include #endif @@ -120,14 +120,14 @@ struct random_data # include #endif -#if ((@GNULIB_STRTOL@ && @REPLACE_STRTOL@) || (@GNULIB_STRTOLL@ && @REPLACE_STRTOLL@) || (@GNULIB_STRTOUL@ && @REPLACE_STRTOUL@) || (@GNULIB_STRTOULL@ && @REPLACE_STRTOULL@)) && defined __cplusplus && !defined GNULIB_NAMESPACE && defined __GNUG__ && !defined __clang__ && defined __sun +#if ((@GNULIB_STRTOL@ && @REPLACE_STRTOL@) || (@GNULIB_STRTOLL@ && @REPLACE_STRTOLL@) || (@GNULIB_STRTOUL@ && @REPLACE_STRTOUL@) || (@GNULIB_STRTOULL@ && @REPLACE_STRTOULL@)) && defined __cplusplus && !defined GNULIB_NAMESPACE && defined __GNUG__ && !defined __clang__ && (defined __sun || defined _AIX) /* When strtol, strtoll, strtoul, or strtoull is going to be defined as a macro below, this may cause compilation errors later in the libstdc++ header files (that are part of GCC), such as: error: 'rpl_strtol' is not a member of 'std' To avoid this, include the relevant header files here, before these symbols - get defined as macros. But do so only on Solaris 11 (where it is needed), - not on mingw (where it would cause other compilation errors). */ + get defined as macros. But do so only on Solaris 11 and AIX (where it is + needed), not on mingw (where it would cause other compilation errors). */ # include #endif @@ -1473,11 +1473,17 @@ _GL_WARN_ON_USE (setstate_r, "setstate_r is unportable - " # if @REPLACE_REALLOC_FOR_REALLOC_POSIX@ # if @REPLACE_REALLOC_FOR_REALLOC_POSIX@ == 2 # define _GL_INLINE_RPL_REALLOC 1 +# ifdef __cplusplus +extern "C" { +# endif _GL_REALLOC_INLINE void * rpl_realloc (void *ptr, size_t size) { return realloc (ptr, size ? size : 1); } +# ifdef __cplusplus +} +# endif # endif # if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ || _GL_USE_STDLIB_ALLOC) diff --git a/lib/string.in.h b/lib/string.in.h index ce488299006..44b9497d802 100644 --- a/lib/string.in.h +++ b/lib/string.in.h @@ -54,6 +54,11 @@ /* NetBSD 5.0 mis-defines NULL. */ #include +#if @GNULIB_STRERROR_L@ +/* Get locale_t. */ +# include +#endif + /* MirBSD defines mbslen as a macro. */ #if @GNULIB_MBSLEN@ && defined __MirBSD__ # include @@ -429,7 +434,9 @@ _GL_FUNCDECL_SYS (memset_explicit, void *, # endif _GL_CXXALIAS_SYS (memset_explicit, void *, (void *__dest, int __c, size_t __n)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (memset_explicit); +# endif #elif defined GNULIB_POSIXCHECK # undef memset_explicit # if HAVE_RAW_DECL_MEMSET_EXPLICIT @@ -1178,6 +1185,33 @@ _GL_CXXALIASWARN (mbsrchr); _GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); +# ifndef _GL_NO_CONST_GENERICS +/* Don't silently convert a 'const char *' to a 'char *'. Programmers want + compiler warnings for 'const' related mistakes. */ +# ifdef __cplusplus +extern "C++" { /* needed for AIX */ +template + T * mbsstr_template (T* haystack, const char *needle); +template <> + inline char * mbsstr_template (char *haystack, const char *needle) + { return mbsstr (haystack, needle); } +template <> + inline const char * mbsstr_template (const char *haystack, const char *needle) + { return mbsstr (haystack, needle); } +} +# undef mbsstr +# define mbsstr mbsstr_template +# elif !defined mbsstr +# if ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \ + || defined __ICC || defined __TINYC__ \ + || (__STDC_VERSION__ >= 201112L && !(defined __GNUC__ || defined __clang__))) +# define mbsstr(h,n) \ + _Generic ((h), \ + char const *: (char const *) mbsstr ((h), (n)), \ + default : mbsstr ((h), (n))) +# endif +# endif +# endif #endif #if @GNULIB_MBSCASECMP@ @@ -1219,6 +1253,33 @@ _GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n) _GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); +# ifndef _GL_NO_CONST_GENERICS +/* Don't silently convert a 'const char *' to a 'char *'. Programmers want + compiler warnings for 'const' related mistakes. */ +# ifdef __cplusplus +extern "C++" { /* needed for AIX */ +template + T * mbspcasecmp_template (T* string, const char *prefix); +template <> + inline char * mbspcasecmp_template (char *string, const char *prefix) + { return mbspcasecmp (string, prefix); } +template <> + inline const char * mbspcasecmp_template (const char *string, const char *prefix) + { return mbspcasecmp (string, prefix); } +} +# undef mbspcasecmp +# define mbspcasecmp mbspcasecmp_template +# elif !defined mbspcasecmp +# if ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \ + || defined __ICC || defined __TINYC__ \ + || (__STDC_VERSION__ >= 201112L && !(defined __GNUC__ || defined __clang__))) +# define mbspcasecmp(s,p) \ + _Generic ((s), \ + char const *: (char const *) mbspcasecmp ((s), (p)), \ + default : mbspcasecmp ((s), (p))) +# endif +# endif +# endif #endif #if @GNULIB_MBSCASESTR@ @@ -1230,6 +1291,33 @@ _GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix) _GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); +# ifndef _GL_NO_CONST_GENERICS +/* Don't silently convert a 'const char *' to a 'char *'. Programmers want + compiler warnings for 'const' related mistakes. */ +# ifdef __cplusplus +extern "C++" { /* needed for AIX */ +template + T * mbscasestr_template (T* haystack, const char *needle); +template <> + inline char * mbscasestr_template (char *haystack, const char *needle) + { return mbscasestr (haystack, needle); } +template <> + inline const char * mbscasestr_template (const char *haystack, const char *needle) + { return mbscasestr (haystack, needle); } +} +# undef mbscasestr +# define mbscasestr mbscasestr_template +# elif !defined mbscasestr +# if ((__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) || (__clang_major__ >= 3) \ + || defined __ICC || defined __TINYC__ \ + || (__STDC_VERSION__ >= 201112L && !(defined __GNUC__ || defined __clang__))) +# define mbscasestr(h,n) \ + _Generic ((h), \ + char const *: (char const *) mbscasestr ((h), (n)), \ + default : mbscasestr ((h), (n))) +# endif +# endif +# endif #endif #if @GNULIB_MBSCSPN@ @@ -1388,6 +1476,44 @@ _GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - " # endif #endif +/* Map any int, typically from errno, into an error message. + With locale_t argument. */ +#if @GNULIB_STRERROR_L@ +# if @REPLACE_STRERROR_L@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strerror_l +# define strerror_l rpl_strerror_l +# endif +_GL_FUNCDECL_RPL (strerror_l, char *, (int errnum, locale_t locale), + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (strerror_l, char *, (int errnum, locale_t locale)); +# else +# if !@HAVE_STRERROR_L@ +_GL_FUNCDECL_SYS (strerror_l, char *, (int errnum, locale_t locale), + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (strerror_l, char *, (int errnum, locale_t locale)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (strerror_l); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strerror_l +# if HAVE_RAW_DECL_STRERROR_L +_GL_WARN_ON_USE (strerror_l, "strerror_l is unportable - " + "use gnulib module strerror_l for portability"); +# endif +#endif + +/* Map any int, typically from errno, into an error message. Multithread-safe, + with locale_t argument. + Not portable! Only provided by gnulib. */ +#if @GNULIB_STRERROR_L@ +_GL_FUNCDECL_SYS (strerror_l_r, int, + (int errnum, char *buf, size_t buflen, locale_t locale), + _GL_ARG_NONNULL ((2, 4))); +#endif + /* Return the name of the system error code ERRNUM. */ #if @GNULIB_STRERRORNAME_NP@ # if @REPLACE_STRERRORNAME_NP@ @@ -1403,7 +1529,9 @@ _GL_FUNCDECL_SYS (strerrorname_np, const char *, (int errnum), ); # endif _GL_CXXALIAS_SYS (strerrorname_np, const char *, (int errnum)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (strerrorname_np); +# endif #elif defined GNULIB_POSIXCHECK # undef strerrorname_np # if HAVE_RAW_DECL_STRERRORNAME_NP diff --git a/lib/time.in.h b/lib/time.in.h index 60801c972c9..3ff16e3b3e4 100644 --- a/lib/time.in.h +++ b/lib/time.in.h @@ -186,7 +186,9 @@ _GL_FUNCDECL_SYS (timespec_getres, int, (struct timespec *ts, int base), # endif _GL_CXXALIAS_SYS (timespec_getres, int, (struct timespec *ts, int base)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (timespec_getres); +# endif # elif defined GNULIB_POSIXCHECK # undef timespec_getres # if HAVE_RAW_DECL_TIMESPEC_GETRES diff --git a/lib/unistd.in.h b/lib/unistd.in.h index 3f96e10d7e7..c135a770dc1 100644 --- a/lib/unistd.in.h +++ b/lib/unistd.in.h @@ -95,12 +95,15 @@ # include #endif +/* FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.5, Solaris 11.4, and glibc 2.41 + do not define O_CLOEXEC in . */ /* Cygwin 1.7.1 and Android 4.3 declare unlinkat in , not in . */ /* But avoid namespace pollution on glibc systems. */ -#if (@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) \ - && (defined __CYGWIN__ || defined __ANDROID__) \ - && ! defined __GLIBC__ +#if ! defined O_CLOEXEC \ + || ((@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) \ + && (defined __CYGWIN__ || defined __ANDROID__) \ + && ! defined __GLIBC__) # include #endif @@ -463,7 +466,9 @@ _GL_CXXALIAS_SYS (copy_file_range, ssize_t, (int ifd, off_t *ipos, int ofd, off_t *opos, size_t len, unsigned flags)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (copy_file_range); +# endif #elif defined GNULIB_POSIXCHECK # undef copy_file_range # if HAVE_RAW_DECL_COPY_FILE_RANGE @@ -1362,11 +1367,21 @@ _GL_WARN_ON_USE (gethostname, "gethostname is unportable - " ${LOGNAME-$USER} on Unix platforms, $USERNAME on native Windows platforms. */ -# if !@HAVE_DECL_GETLOGIN@ +# if @REPLACE_GETLOGIN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define getlogin rpl_getlogin +# endif +_GL_FUNCDECL_RPL (getlogin, char *, (void), ); +_GL_CXXALIAS_RPL (getlogin, char *, (void)); +# else +# if !@HAVE_DECL_GETLOGIN@ _GL_FUNCDECL_SYS (getlogin, char *, (void), ); -# endif +# endif _GL_CXXALIAS_SYS (getlogin, char *, (void)); +# endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (getlogin); +# endif #elif defined GNULIB_POSIXCHECK # undef getlogin # if HAVE_RAW_DECL_GETLOGIN @@ -2405,7 +2420,7 @@ _GL_WARN_ON_USE (unlinkat, "unlinkat is not portable - " #if @GNULIB_USLEEP@ /* Pause the execution of the current thread for N microseconds. Returns 0 on completion, or -1 on range error. - See the POSIX:2001 specification + See the POSIX.1-2004 specification . */ # if @REPLACE_USLEEP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) diff --git a/lib/utimens.h b/lib/utimens.h index 007958dd933..62ea7d8f5fd 100644 --- a/lib/utimens.h +++ b/lib/utimens.h @@ -25,7 +25,7 @@ #include #if HAVE_UTIMENS || HAVE_LUTIMENS -# include +# include #endif #ifdef __cplusplus diff --git a/lib/utimensat.c b/lib/utimensat.c index 227474fdaa5..ca1d39e5900 100644 --- a/lib/utimensat.c +++ b/lib/utimensat.c @@ -136,8 +136,9 @@ rpl_utimensat (int fd, char const *file, struct timespec const times[2], } # endif # endif -# if defined __APPLE__ && defined __MACH__ - /* macOS 10.13 does not reject invalid tv_nsec values either. */ +# if (defined __APPLE__ && defined __MACH__) || defined __gnu_hurd__ + /* macOS 10.13 and GNU Hurd do not reject invalid tv_nsec values + either. */ if (times && ((times[0].tv_nsec != UTIME_OMIT && times[0].tv_nsec != UTIME_NOW @@ -151,6 +152,7 @@ rpl_utimensat (int fd, char const *file, struct timespec const times[2], errno = EINVAL; return -1; } +# if defined __APPLE__ && defined __MACH__ size_t len = strlen (file); if (len > 0 && file[len - 1] == '/') { @@ -163,6 +165,7 @@ rpl_utimensat (int fd, char const *file, struct timespec const times[2], return -1; } } +# endif # endif result = utimensat (fd, file, times, flag); /* Linux kernel 2.6.25 has a bug where it returns EINVAL for diff --git a/lib/verify.h b/lib/verify.h index 96fde0b9c81..3b01d7c2fb3 100644 --- a/lib/verify.h +++ b/lib/verify.h @@ -157,9 +157,10 @@ #define _GL_CONCAT0(x, y) x##y /* _GL_COUNTER is an integer, preferably one that changes each time we - use it. Use __COUNTER__ if it works, falling back on __LINE__ - otherwise. __LINE__ isn't perfect, but it's better than a - constant. */ + use it. Use __COUNTER__ if it works (it does so with most compilers, + see ), + falling back on __LINE__ otherwise. __LINE__ isn't perfect, but it's + better than a constant. */ #if defined __COUNTER__ && __COUNTER__ != __COUNTER__ # define _GL_COUNTER __COUNTER__ #else diff --git a/m4/builtin-expect.m4 b/m4/builtin-expect.m4 index 2c2fab4bb62..76d3286788a 100644 --- a/m4/builtin-expect.m4 +++ b/m4/builtin-expect.m4 @@ -1,5 +1,5 @@ # builtin-expect.m4 -# serial 2 +# serial 3 dnl Copyright 2016-2025 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -48,5 +48,4 @@ AC_DEFUN([gl___BUILTIN_EXPECT], #elif HAVE___BUILTIN_EXPECT == 2 # include #endif - ]) -]) +])]) diff --git a/m4/futimens.m4 b/m4/futimens.m4 index fe89fdffa1b..7252dd66d1a 100644 --- a/m4/futimens.m4 +++ b/m4/futimens.m4 @@ -1,5 +1,5 @@ # futimens.m4 -# serial 11 +# serial 12 dnl Copyright (C) 2009-2025 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -32,22 +32,45 @@ AC_DEFUN([gl_FUNC_FUTIMENS], ]GL_MDA_DEFINES], [[struct timespec ts[2]; int fd = creat ("conftest.file", 0600); + int result = 0; struct stat st; - if (fd < 0) return 1; + if (fd < 0) + return 1; ts[0].tv_sec = 1; ts[0].tv_nsec = UTIME_OMIT; ts[1].tv_sec = 1; ts[1].tv_nsec = UTIME_NOW; errno = 0; - if (futimens (AT_FDCWD, NULL) == 0) return 2; - if (errno != EBADF) return 3; - if (futimens (fd, ts)) return 4; + if (futimens (AT_FDCWD, NULL) == 0 || errno != EBADF) + result |= 2; + if (futimens (fd, ts)) + result |= 4; sleep (1); ts[0].tv_nsec = UTIME_NOW; ts[1].tv_nsec = UTIME_OMIT; - if (futimens (fd, ts)) return 5; - if (fstat (fd, &st)) return 6; - if (st.st_ctime < st.st_atime) return 7; + if (futimens (fd, ts)) + result |= 8; + if (fstat (fd, &st)) + result |= 16; + if (st.st_ctime < st.st_atime) + result |= 32; + enum + { + BILLION = 1000 * 1000 * 1000, + /* Bogus positive and negative tv_nsec values closest to valid + range, but without colliding with UTIME_NOW or UTIME_OMIT. */ + UTIME_BOGUS_POS = BILLION + ((UTIME_NOW == BILLION || UTIME_OMIT == BILLION) + ? (1 + (UTIME_NOW == BILLION + 1) + + (UTIME_OMIT == BILLION + 1)) + : 0) + }; + ts[0].tv_sec = 1; + ts[0].tv_nsec = UTIME_BOGUS_POS; + ts[1].tv_sec = 1; + ts[1].tv_nsec = 0; + if (futimens (fd, ts) == 0) + result |= 64; + return result; ]])], [gl_cv_func_futimens_works=yes], [gl_cv_func_futimens_works=no], diff --git a/m4/gnulib-common.m4 b/m4/gnulib-common.m4 index 6eff85bea12..daf05db2a47 100644 --- a/m4/gnulib-common.m4 +++ b/m4/gnulib-common.m4 @@ -1,5 +1,5 @@ # gnulib-common.m4 -# serial 107 +# serial 109 dnl Copyright (C) 2007-2025 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -20,6 +20,20 @@ AC_DEFUN([gl_COMMON_BODY], [ AH_VERBATIM([0witness], [/* Witness that has been included. */ #define _GL_CONFIG_H_INCLUDED 1 +]) + dnl Avoid warnings from gcc -Wtrailing-whitespace. + dnl This is a temporary workaround until Autoconf fixes it. + dnl Test case: + dnl empty1=; empty2=; AC_DEFINE_UNQUOTED([FOO], [$empty1$empty2], [...]) + dnl should produce "#define FOO /**/", not "#define FOO ". + AH_TOP([#if defined __GNUC__ && __GNUC__ >= 15 && !defined __clang__ +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wtrailing-whitespace" +#endif +]) + AH_BOTTOM([#if defined __GNUC__ && __GNUC__ >= 15 && !defined __clang__ +# pragma GCC diagnostic pop +#endif ]) AH_VERBATIM([_GL_GNUC_PREREQ], [/* True if the compiler says it groks GNU C version MAJOR.MINOR. @@ -1304,7 +1318,7 @@ AC_DEFUN([gl_CC_ALLOW_WARNINGS], AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([for C compiler option to allow warnings], [gl_cv_cc_wallow], - [rm -f conftest* + [rm -fr conftest* echo 'int dummy;' > conftest.c AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c 2>conftest1.err]) >/dev/null AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -Wno-error -c conftest.c 2>conftest2.err]) >/dev/null @@ -1317,7 +1331,7 @@ AC_DEFUN([gl_CC_ALLOW_WARNINGS], else gl_cv_cc_wallow=none fi - rm -f conftest* + rm -fr conftest* ]) case "$gl_cv_cc_wallow" in none) GL_CFLAG_ALLOW_WARNINGS='' ;; @@ -1335,7 +1349,7 @@ AC_DEFUN([gl_CXX_ALLOW_WARNINGS], if test -n "$CXX" && test "$CXX" != no; then AC_CACHE_CHECK([for C++ compiler option to allow warnings], [gl_cv_cxx_wallow], - [rm -f conftest* + [rm -fr conftest* echo 'int dummy;' > conftest.cc AC_TRY_COMMAND([${CXX-c++} $CXXFLAGS $CPPFLAGS -c conftest.cc 2>conftest1.err]) >/dev/null AC_TRY_COMMAND([${CXX-c++} $CXXFLAGS $CPPFLAGS -Wno-error -c conftest.cc 2>conftest2.err]) >/dev/null @@ -1348,7 +1362,7 @@ AC_DEFUN([gl_CXX_ALLOW_WARNINGS], else gl_cv_cxx_wallow=none fi - rm -f conftest* + rm -fr conftest* ]) case "$gl_cv_cxx_wallow" in none) GL_CXXFLAG_ALLOW_WARNINGS='' ;; diff --git a/m4/gnulib-comp.m4 b/m4/gnulib-comp.m4 index 42f67d0a42b..97db7d32a66 100644 --- a/m4/gnulib-comp.m4 +++ b/m4/gnulib-comp.m4 @@ -57,6 +57,8 @@ AC_DEFUN([gl_EARLY], # Code from module byteswap: # Code from module c-ctype: # Code from module c-strcase: + # Code from module c-strcasecmp: + # Code from module c-strncasecmp: # Code from module c99: # Code from module canonicalize-lgpl: # Code from module careadlinkat: diff --git a/m4/manywarnings.m4 b/m4/manywarnings.m4 index 86ec8889c96..cf3f730b4c3 100644 --- a/m4/manywarnings.m4 +++ b/m4/manywarnings.m4 @@ -1,5 +1,5 @@ # manywarnings.m4 -# serial 28 +# serial 29 dnl Copyright (C) 2008-2025 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -94,7 +94,7 @@ AC_DEFUN([gl_MANYWARN_ALL_GCC(C)], # List all gcc warning categories. # To compare this list to your installed GCC's, run this Bash command: # - # comm -3 \ + # export LC_ALL=C && comm -3 \ # <((sed -n 's/^ *\(-[^ 0-9][^ ]*\).*/\1/p' manywarnings.m4; \ # awk '/^[^#]/ {print $1}' ../build-aux/gcc-warning.spec) | sort) \ # <(LC_ALL=C gcc --help=warnings | sed -n 's/^ \(-[^ ]*\) .*/\1/p' | sort) diff --git a/m4/regex.m4 b/m4/regex.m4 index 80dfb8e1e5f..49a8059f618 100644 --- a/m4/regex.m4 +++ b/m4/regex.m4 @@ -1,5 +1,5 @@ # regex.m4 -# serial 78 +# serial 81 dnl Copyright (C) 1996-2001, 2003-2025 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -53,6 +53,11 @@ AC_DEFUN([gl_REGEX], /* Exit with distinguishable exit code. */ static void sigabrt_no_core (int sig) { raise (SIGTERM); } #endif + + /* There is no need to check whether RE_SYNTAX_EMACS is + (RE_CHAR_CLASSES | RE_INTERVALS), corresponding to + Emacs 21 (2001) and later, because Gnulib's lib/regex.h + is always used and has this value. */ ]], [[int result = 0; static struct re_pattern_buffer regex; diff --git a/m4/stddef_h.m4 b/m4/stddef_h.m4 index c09396ae559..a6bc6243143 100644 --- a/m4/stddef_h.m4 +++ b/m4/stddef_h.m4 @@ -1,5 +1,5 @@ # stddef_h.m4 -# serial 17 +# serial 19 dnl Copyright (C) 2009-2025 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -90,24 +90,25 @@ AC_DEFUN_ONCE([gl_STDDEF_H], GL_GENERATE_STDDEF_H=true fi - AC_CACHE_CHECK([for clean definition of __STDC_VERSION_STDDEF_H__], - [gl_cv_clean_version_stddef], - [AC_PREPROC_IFELSE( - [AC_LANG_SOURCE( - [[/* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114870 */ - #include - #undef __STDC_VERSION_STDDEF_H__ - #include - #ifdef __STDC_VERSION_STDDEF_H__ - # error " defines __STDC_VERSION_STDDEF_H__" - #endif - ]])], - [gl_cv_clean_version_stddef=yes], - [gl_cv_clean_version_stddef=no])]) - if test "$gl_cv_clean_version_stddef" = no; then - STDDEF_NOT_IDEMPOTENT=1 - GL_GENERATE_STDDEF_H=true - fi + dnl https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114870 + dnl affects GCC 13 and 14. + AC_CACHE_CHECK([whether is idempotent], + [gl_cv_stddef_idempotent], + [AC_COMPILE_IFELSE([AC_LANG_SOURCE( + [[ + #if __GNUC__ == 13 || __GNUC__ == 14 + #error "bug 114870 is present" + #endif + ]])], + [gl_cv_stddef_idempotent="guessing yes"], + [gl_cv_stddef_idempotent="guessing no"]) + ]) + case "$gl_cv_stddef_idempotent" in + *yes) ;; + *) STDDEF_NOT_IDEMPOTENT=1 + GL_GENERATE_STDDEF_H=true + ;; + esac if $GL_GENERATE_STDDEF_H; then gl_NEXT_HEADERS([stddef.h]) diff --git a/m4/string_h.m4 b/m4/string_h.m4 index d0a67608114..bdcd6ef2b67 100644 --- a/m4/string_h.m4 +++ b/m4/string_h.m4 @@ -1,5 +1,5 @@ # string_h.m4 -# serial 43 +# serial 44 dnl Copyright (C) 2007-2025 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -25,7 +25,8 @@ AC_DEFUN_ONCE([gl_STRING_H], [explicit_bzero ffsl ffsll memmem mempcpy memrchr memset_explicit rawmemchr stpcpy stpncpy strchrnul strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r - strerror_r strerrorname_np sigabbrev_np sigdescr_np strsignal strverscmp]) + strerror_l strerror_r strerrorname_np + sigabbrev_np sigdescr_np strsignal strverscmp]) AC_REQUIRE([AC_C_RESTRICT]) ]) @@ -90,6 +91,7 @@ AC_DEFUN([gl_STRING_H_REQUIRE_DEFAULTS], gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBS_ENDSWITH]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRERROR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRERROR_R]) + gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRERROR_L]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRERRORNAME_NP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGABBREV_NP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGDESCR_NP]) @@ -128,6 +130,7 @@ AC_DEFUN([gl_STRING_H_DEFAULTS], HAVE_STRCASESTR=1; AC_SUBST([HAVE_STRCASESTR]) HAVE_DECL_STRTOK_R=1; AC_SUBST([HAVE_DECL_STRTOK_R]) HAVE_DECL_STRERROR_R=1; AC_SUBST([HAVE_DECL_STRERROR_R]) + HAVE_STRERROR_L=1; AC_SUBST([HAVE_STRERROR_L]) HAVE_STRERRORNAME_NP=1; AC_SUBST([HAVE_STRERRORNAME_NP]) HAVE_SIGABBREV_NP=1; AC_SUBST([HAVE_SIGABBREV_NP]) HAVE_SIGDESCR_NP=1; AC_SUBST([HAVE_SIGDESCR_NP]) @@ -150,6 +153,7 @@ AC_DEFUN([gl_STRING_H_DEFAULTS], REPLACE_STRTOK_R=0; AC_SUBST([REPLACE_STRTOK_R]) REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR]) REPLACE_STRERROR_R=0; AC_SUBST([REPLACE_STRERROR_R]) + REPLACE_STRERROR_L=0; AC_SUBST([REPLACE_STRERROR_L]) REPLACE_STRERRORNAME_NP=0; AC_SUBST([REPLACE_STRERRORNAME_NP]) REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL]) REPLACE_STRVERSCMP=0; AC_SUBST([REPLACE_STRVERSCMP]) diff --git a/m4/unistd_h.m4 b/m4/unistd_h.m4 index 2c08d65e0d8..6ec16286ef8 100644 --- a/m4/unistd_h.m4 +++ b/m4/unistd_h.m4 @@ -1,5 +1,5 @@ # unistd_h.m4 -# serial 96 +# serial 97 dnl Copyright (C) 2006-2025 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -244,6 +244,7 @@ AC_DEFUN([gl_UNISTD_H_DEFAULTS], REPLACE_GETDOMAINNAME=0; AC_SUBST([REPLACE_GETDOMAINNAME]) REPLACE_GETDTABLESIZE=0; AC_SUBST([REPLACE_GETDTABLESIZE]) REPLACE_GETENTROPY=0; AC_SUBST([REPLACE_GETENTROPY]) + REPLACE_GETLOGIN=0; AC_SUBST([REPLACE_GETLOGIN]) REPLACE_GETLOGIN_R=0; AC_SUBST([REPLACE_GETLOGIN_R]) REPLACE_GETGROUPS=0; AC_SUBST([REPLACE_GETGROUPS]) REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE]) diff --git a/m4/utimensat.m4 b/m4/utimensat.m4 index 8753e1cb294..d017af37b25 100644 --- a/m4/utimensat.m4 +++ b/m4/utimensat.m4 @@ -1,5 +1,5 @@ # utimensat.m4 -# serial 12 +# serial 14 dnl Copyright (C) 2009-2025 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -67,11 +67,30 @@ AC_DEFUN([gl_FUNC_UTIMENSAT], ts[1].tv_sec = 1; ts[1].tv_nsec = UTIME_OMIT; if (utimensat (AT_FDCWD, f, ts, 0)) - result |= 16; + result |= 8; if (stat (f, &st)) - result |= 32; + result |= 8; else if (st.st_ctime < st.st_atime) - result |= 64; + result |= 16; + } + enum + { + BILLION = 1000 * 1000 * 1000, + /* Bogus positive and negative tv_nsec values closest to valid + range, but without colliding with UTIME_NOW or UTIME_OMIT. */ + UTIME_BOGUS_POS = BILLION + ((UTIME_NOW == BILLION || UTIME_OMIT == BILLION) + ? (1 + (UTIME_NOW == BILLION + 1) + + (UTIME_OMIT == BILLION + 1)) + : 0) + }; + { + struct timespec ts[2]; + ts[0].tv_sec = 1; + ts[0].tv_nsec = UTIME_BOGUS_POS; + ts[1].tv_sec = 1; + ts[1].tv_nsec = 0; + if (utimensat (AT_FDCWD, f, ts, 0) == 0) + result |= 32; } return result; ]])], @@ -83,8 +102,11 @@ AC_DEFUN([gl_FUNC_UTIMENSAT], ], [case "$host_os" in # Guess yes on Linux or glibc systems. - linux-* | linux | *-gnu* | gnu*) + linux*) gl_cv_func_utimensat_works="guessing yes" ;; + # Guess no on GNU/Hurd. + gnu*) + gl_cv_func_utimensat_works="guessing no" ;; # Guess yes on systems that emulate the Linux system calls. midipix*) gl_cv_func_utimensat_works="guessing yes" ;; diff --git a/m4/warnings.m4 b/m4/warnings.m4 index 5d7c4ef03a0..c616d7751fc 100644 --- a/m4/warnings.m4 +++ b/m4/warnings.m4 @@ -1,5 +1,5 @@ # warnings.m4 -# serial 20 +# serial 21 dnl Copyright (C) 2008-2025 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -114,7 +114,7 @@ AC_DEFUN([gl_CC_INHIBIT_WARNINGS], AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([for C compiler option to inhibit all warnings], [gl_cv_cc_winhibit], - [rm -f conftest* + [rm -fr conftest* echo 'int dummy;' > conftest.c AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c 2>conftest1.err]) >/dev/null AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -w -c conftest.c 2>conftest2.err]) >/dev/null @@ -123,7 +123,7 @@ AC_DEFUN([gl_CC_INHIBIT_WARNINGS], else gl_cv_cc_winhibit=none fi - rm -f conftest* + rm -fr conftest* ]) case "$gl_cv_cc_winhibit" in none) GL_CFLAG_INHIBIT_WARNINGS='' ;; @@ -146,7 +146,7 @@ AC_DEFUN([gl_CXX_INHIBIT_WARNINGS], if test -n "$CXX" && test "$CXX" != no; then AC_CACHE_CHECK([for C++ compiler option to inhibit all warnings], [gl_cv_cxx_winhibit], - [rm -f conftest* + [rm -fr conftest* echo 'int dummy;' > conftest.cc AC_TRY_COMMAND([${CXX-c++} $CXXFLAGS $CPPFLAGS -c conftest.cc 2>conftest1.err]) >/dev/null AC_TRY_COMMAND([${CXX-c++} $CXXFLAGS $CPPFLAGS -w -c conftest.cc 2>conftest2.err]) >/dev/null @@ -155,7 +155,7 @@ AC_DEFUN([gl_CXX_INHIBIT_WARNINGS], else gl_cv_cxx_winhibit=none fi - rm -f conftest* + rm -fr conftest* ]) case "$gl_cv_cxx_winhibit" in none) GL_CXXFLAG_INHIBIT_WARNINGS='' ;; commit 30335bb73483fce9d4204f1e18618fe777d0f45e Author: Paul Eggert Date: Sat Apr 19 12:15:51 2025 -0700 Don’t use Gnulib’s locale-h module * admin/merge-gnulib (AVOIDED_MODULES): Add locale-h, as Emacs should’t need this Gnulib module. This change is needed for when we next run admin/merge-gnulib, as some Gnulib dependencies changed recently. diff --git a/admin/merge-gnulib b/admin/merge-gnulib index ae433961df3..54dcf275d55 100755 --- a/admin/merge-gnulib +++ b/admin/merge-gnulib @@ -58,7 +58,7 @@ GNULIB_MODULES=' AVOIDED_MODULES=' access btowc chmod close crypto/af_alg dup fchdir fstat gnulib-i18n iswblank iswctype iswdigit iswxdigit langinfo-h libgmp-mpq - localename-unsafe-limited lock + locale-h localename-unsafe-limited lock mbrtowc mbsinit memchr mkdir msvc-inval msvc-nothrow nl_langinfo openat-die opendir pthread-h raise save-cwd select setenv sigprocmask stat stdarg-h commit 4fa10b5760c7ded3cc18d0da614a5f0cd38edfef Author: Paul Eggert Date: Sat Apr 19 11:58:34 2025 -0700 Pacify "statement not reached" in value_cmp Problem found by Oracle Developer Studio 12.6. * src/fns.c (value_cmp): Omit unnecessary goto. diff --git a/src/fns.c b/src/fns.c index 3f109a81836..e9643627bfa 100644 --- a/src/fns.c +++ b/src/fns.c @@ -3113,9 +3113,7 @@ value_cmp (Lisp_Object a, Lisp_Object b, int maxdepth) } if (NILP (b)) return 1; - else - goto type_mismatch; - goto tail_recurse; + goto type_mismatch; case Lisp_Vectorlike: if (VECTORLIKEP (b)) commit 03a1df37990049c2ad9491b150a8983355a213f8 Author: Paul Eggert Date: Sat Apr 19 09:58:10 2025 -0700 Fix libsrc assumption in src/Makefile.in * src/Makefile.in (ETAGS): Don’t assume $(libsrc) = ../lib-src. diff --git a/src/Makefile.in b/src/Makefile.in index 8296329f136..e4fc2fef711 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -826,7 +826,7 @@ distclean: bootstrap-clean maintainer-clean: distclean rm -f TAGS -ETAGS = ../lib-src/etags${EXEEXT} +ETAGS = $(libsrc)/etags${EXEEXT} ${ETAGS}: FORCE $(MAKE) -C $(dir $@) $(notdir $@) commit 45232485aef3e44e9106f605ecf155de8f707edb Author: Sean Whitton Date: Sun Apr 20 09:40:12 2025 +0800 vc-user-edit-command: Add trailing space to initial input * lisp/vc/vc-dispatcher.el (vc-user-edit-command): Add trailing space to initial input to ease adding additional flags. diff --git a/lisp/vc/vc-dispatcher.el b/lisp/vc/vc-dispatcher.el index bd681b2c1cf..f51eb728cf8 100644 --- a/lisp/vc/vc-dispatcher.el +++ b/lisp/vc/vc-dispatcher.el @@ -328,10 +328,11 @@ Intended to be used as the value of `vc-filter-command-function'." (if file-or-list " (files list to be appended)" "")) - (combine-and-quote-strings - (cons command (remq nil (if files-separator-p - (butlast flags) - flags)))))))) + (concat (combine-and-quote-strings + (cons command (remq nil (if files-separator-p + (butlast flags) + flags)))) + " "))))) (list (car edited) file-or-list (nconc (cdr edited) (and files-separator-p '("--")))))) commit 4cd4a801d865f64aa23c64bd544d68aa68f3fb1c Author: Sean Whitton Date: Sun Apr 20 09:22:06 2025 +0800 ; * java/res/README: Note origin of emacs_wrench.png. diff --git a/java/res/README b/java/res/README new file mode 100644 index 00000000000..38f3f232033 --- /dev/null +++ b/java/res/README @@ -0,0 +1,4 @@ +* The wrench icon that is superimposed on Emacs's own icon in + drawable/emacs_wrench.png was released into the Public Domain by the + Tango Desktop Project. + commit 8abd2ee0526ba576aefefa51870443ef01a4b2dd Author: Werner Fink Date: Mon Apr 7 13:51:07 2025 +0200 Fix seccomp-filter for newer Linux kernels * lib-src/seccomp-filter.c (MAP_DROPPABLE): Define if undefined. (main): Use MAP_DROPPABLE flag. Allow `tcgetattr' call of glibc on physical terminal devices. (Bug#77232) diff --git a/lib-src/seccomp-filter.c b/lib-src/seccomp-filter.c index d6421f0ebdb..e9f41afbaba 100644 --- a/lib-src/seccomp-filter.c +++ b/lib-src/seccomp-filter.c @@ -42,6 +42,7 @@ variants of those files that can be used to sandbox Emacs before #include #include #include +#include /* mandatory accordingly to latest ioctl_tty(2) */ #include #include @@ -64,6 +65,11 @@ variants of those files that can be used to sandbox Emacs before #define ARCH_CET_STATUS 0x3001 #endif +/* https://github.com/torvalds/linux/commit/9651fcedf7b92d3f7f1ab179e8ab55b85ee10fc1 */ +#ifndef MAP_DROPPABLE +#define MAP_DROPPABLE 0x08 +#endif + static ATTRIBUTE_FORMAT_PRINTF (2, 3) _Noreturn void fail (int error, const char *format, ...) { @@ -187,7 +193,7 @@ main (int argc, char **argv) some versions of the dynamic loader still use it. Also allow allocating thread stacks. */ SCMP_A3_32 (SCMP_CMP_MASKED_EQ, - ~(MAP_SHARED | MAP_PRIVATE | MAP_FILE + ~(MAP_SHARED | MAP_PRIVATE | MAP_FILE | MAP_DROPPABLE | MAP_ANONYMOUS | MAP_FIXED | MAP_DENYWRITE | MAP_STACK | MAP_NORESERVE), 0)); @@ -274,6 +280,11 @@ main (int argc, char **argv) SCMP_A0_32 (SCMP_CMP_EQ, STDIN_FILENO), SCMP_A1_32 (SCMP_CMP_EQ, TIOCGPGRP)); + /* Allow `tcgetattr' call of glibc on physical terminal devices. */ + RULE (SCMP_ACT_ALLOW, SCMP_SYS (ioctl), + SCMP_A0_32 (SCMP_CMP_EQ, STDERR_FILENO), + SCMP_A1_32 (SCMP_CMP_EQ, TCGETS)); + /* Allow reading (but not setting) file flags. */ RULE (SCMP_ACT_ALLOW, SCMP_SYS (fcntl), SCMP_A1_32 (SCMP_CMP_EQ, F_GETFL)); commit cc52c1e1d0be936f7091534fa89845cfd2770c20 Author: Spencer Baugh Date: Thu Apr 17 16:22:08 2025 -0400 Backport: fix flymake margin indicator fallback logic Backport 861e7f8b60e4bf076bf5991d25a22b3a012746bd to fix bug#77313, so that fringe indicators are once again reliably the default on frames that support them. Do not merge to master. * lisp/progmodes/flymake.el (flymake-indicator-type) (flymake-mode): Fix margin fallback behavior. diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index f8a294908ba..a9e15fbbb12 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -185,22 +185,23 @@ See `flymake-error-bitmap' and `flymake-warning-bitmap'." (const right-fringe) (const :tag "No fringe indicators" nil))) -(defcustom flymake-indicator-type (if (display-graphic-p) - 'fringes - 'margins) +(defcustom flymake-indicator-type 'fringes "Indicate which indicator type to use for display errors. The value can be nil (don't indicate errors but just highlight them), -fringes (use fringes) or margins (use margins) +the symbol `fringes' (use fringes) or the symbol `margins' (use +margins). Difference between fringes and margin is that fringes support displaying bitmaps on graphical displays and margins display text in a blank area from current buffer that works in both graphical and text displays. +Thus, even when `fringes' is selected, margins will still be used on +text displays and also when fringes are disabled. See Info node `Fringes' and Info node `(elisp)Display Margins'." - :version "30.1" + :version "30.2" :type '(choice (const :tag "Use Fringes" fringes) - (const :tag "Use Margins "margins) + (const :tag "Use Margins" margins) (const :tag "No indicators" nil))) (defcustom flymake-margin-indicators-string @@ -1393,6 +1394,13 @@ special *Flymake log* buffer." :group 'flymake :lighter (add-hook 'kill-buffer-hook 'flymake-kill-buffer-hook nil t) (add-hook 'eldoc-documentation-functions 'flymake-eldoc-function t t) + (when (and (eq flymake-indicator-type 'fringes) + (not (cl-case flymake-fringe-indicator-position + (left-fringe (< 0 (nth 0 (window-fringes)))) + (right-fringe (< 0 (nth 1 (window-fringes))))))) + ;; There are no fringes in the buffer, fallback to margins. + (setq-local flymake-indicator-type 'margins)) + ;; AutoResize margins. (flymake--resize-margins) commit 2cf545f47dc945b8ebff641af7e15798ddd419c2 Author: Kazuhiro Ito Date: Sun Apr 13 20:00:44 2025 +0900 Fix 'rfc6068-parse-mailto-url' with 'inhibit-eol-conversion' * lisp/mail/rfc6068.el (rfc6068-parse-mailto-url): Fix EOL type to CRLF and never inhibit EOL conversion in decoding. (Bug#77776) diff --git a/lisp/mail/rfc6068.el b/lisp/mail/rfc6068.el index 8f0b4234410..cfa51196000 100644 --- a/lisp/mail/rfc6068.el +++ b/lisp/mail/rfc6068.el @@ -39,7 +39,8 @@ string instead of decoding as utf-8." (buffer-string)))) (if inhibit-decode string - (decode-coding-string string 'utf-8)))) + (let (inhibit-eol-conversion) + (decode-coding-string string 'utf-8-dos))))) (defun rfc6068-parse-mailto-url (mailto-url) "Parse MAILTO-URL, and return an alist of header-name, header-value pairs. commit 6b901a8e85987940738b21032b035ba4e8f7379b Author: shipmints Date: Thu Mar 20 12:53:09 2025 -0400 Strip text properties on recentf entries, when saved (bug#77140) Text properties are added by common completion frameworks, and serve no purpose when stored in 'recentf-save-file', waste space, and slow loading the file. * lisp/recentf.el (recentf-dump-variable): Process string values through 'substring-no-properties'. diff --git a/lisp/recentf.el b/lisp/recentf.el index 3e0c2dfd508..a773ea9ec01 100644 --- a/lisp/recentf.el +++ b/lisp/recentf.el @@ -310,10 +310,10 @@ They are successively passed a file name to transform it." :type '(choice (const :tag "None" nil) (repeat :tag "Functions" - (choice - (const file-truename) - (const abbreviate-file-name) - (function :tag "Other function")))) + (choice + (const file-truename) + (const abbreviate-file-name) + (function :tag "Other function")))) :version "29.1") (defcustom recentf-show-file-shortcuts-flag t @@ -372,7 +372,9 @@ the full list." (setq value (seq-take value limit))) (insert (format "\n(setq %S\n '(" variable)) (dolist (e value) - (insert (format "\n %S" e))) + (insert (format "\n %S" + (or (and (stringp e) (substring-no-properties e)) + e)))) (insert "\n ))\n")))) (defvar recentf-auto-cleanup-timer nil commit fe8e88a1df593ec1cb0b96cbeb9f0ca832686258 Author: Peter Oliver Date: Wed Apr 2 15:53:15 2025 +0100 Provide Open Age Ratings Service metadata * etc/emacs.metainfo.xml: Add a section. (Bug#77492), this and the preceding 2 commits. diff --git a/etc/emacs.metainfo.xml b/etc/emacs.metainfo.xml index ad29940a5c3..8414e9ac6ba 100644 --- a/etc/emacs.metainfo.xml +++ b/etc/emacs.metainfo.xml @@ -59,6 +59,28 @@ Editing a Lisp program, whilst viewing the manual + + + + + moderate + intense + mild + mild + moderate + intense + + + mild + mild + + + intense + + + intense + + emacs-devel_AT_gnu.org #7f5ab6 commit b3fb93e0e88bb06c1bfdfa6a0c35ec5e146d94e5 Author: Peter Oliver Date: Wed Apr 2 15:15:02 2025 +0100 Tweak AppStream metadata to satisfy `appstream-util validate' * etc/emacs.metainfo.xml: `appstream-util validate' suggests that screenshot height and width attributes should match the actual size of the image, and that captions be no longer than 50 chars and do not end in `.'. Follow those rules. diff --git a/etc/emacs.metainfo.xml b/etc/emacs.metainfo.xml index cc316fb8ffd..ad29940a5c3 100644 --- a/etc/emacs.metainfo.xml +++ b/etc/emacs.metainfo.xml @@ -55,8 +55,8 @@ Free Software Foundation - https://www.gnu.org/software/emacs/images/appdata-26.png - Editing a Lisp program whilst viewing the Emacs manual. + https://www.gnu.org/software/emacs/images/appdata-26.png + Editing a Lisp program, whilst viewing the manual emacs-devel_AT_gnu.org commit 4f3188a88c04602d151585dce3e93a5cff38a967 Author: Peter Oliver Date: Wed Apr 2 15:06:05 2025 +0100 Add AppStream metadata about supported and recommended hardware * etc/emacs.metainfo.xml: Note that Emacs is best with a keyboard, but other forms of input are possible. Also note that Emacs can access the Internet. A modestly sized display is sufficient. diff --git a/etc/emacs.metainfo.xml b/etc/emacs.metainfo.xml index b063b918a2d..cc316fb8ffd 100644 --- a/etc/emacs.metainfo.xml +++ b/etc/emacs.metainfo.xml @@ -37,6 +37,19 @@ https://www.gnu.org/software/emacs/manual/html_node/emacs/Contributing.html emacs.desktop emacs.service + + keyboard + + + 480 + 312 + + + console + pointing + touch + + GNU GPL-3.0+ and GFDL-1.3+ Free Software Foundation commit 87d615e26cc565cd49be79d08116354341d1af93 Author: Stefan Kangas Date: Sat Apr 19 10:35:59 2025 +0200 ; Fix failing diff-mode tests * test/lisp/vc/diff-mode-resources/git.patch: Delete file, moving its contents to... * test/lisp/vc/diff-mode-tests.el (diff-mode-tests--git-patch): ...this new variable. Git merges kept deleting a trailing whitespace in the patch signature, so let's do this instead. (diff-mode-test-git-patch) (diff-mode-test-git-patch/before-first-hunk) (diff-mode-test-git-patch/signature): Use above new variable. diff --git a/test/lisp/vc/diff-mode-resources/git.patch b/test/lisp/vc/diff-mode-resources/git.patch deleted file mode 100644 index fdb586d37d3..00000000000 --- a/test/lisp/vc/diff-mode-resources/git.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 1234567890abcdef1234567890abcdef12345678 Mon Sep 17 00:00:00 2001 -From: Alyssa P. Hacker -Date: Sun, 3 Mar 2025 10:30:00 -0400 -Subject: [PATCH] Subtle bug fixes and slight improvements - -- This is not a removed line -+ This is not an added line - ---- - src/main.py | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) - -diff --git a/src/main.py b/src/main.py -index 9f6c5fe43e47eab441232e54456c5c2b06297b65..7b3f91a8b4ed923c8f43183276e3ab36fe04f6c9 100644 ---- a/src/main.py -+++ b/src/main.py -@@ -2,25 +2,24 @@ - - def main(): - # Initialize the magic number generator -- magic_number = 42 -- print("Magic number: ", magic_number) - -- # TODO: Fix the infinite loop -- while True: -- print("This loop will never end") -+ magic_number = 73 # After reconsidering, 73 seems more appropriate -+ print("Updated magic number: ", magic_number) - -+ # The infinite loop was probably not the best approach -+ # while True: -+ # print("This loop will never end.") - - # This part of the code handles other important tasks - print("Processing other tasks...") - - # Error handling has been updated for clarity -- if not fixed_it_yet: -- print("ERROR: Still broken!") -+ if not fixed_it_yet: # This should be fine now -+ print("ERROR: No longer an issue.") - - # Exiting the function on a positive note -- print("Goodbye, cruel world!") -+ print("Goodbye, world!") - - if __name__ == "__main__": - main() - --- -2.40.0 diff --git a/test/lisp/vc/diff-mode-tests.el b/test/lisp/vc/diff-mode-tests.el index 5611e9abc79..b82fb3effbe 100644 --- a/test/lisp/vc/diff-mode-tests.el +++ b/test/lisp/vc/diff-mode-tests.el @@ -557,45 +557,96 @@ baz")))) +1 "))))) +(defvar diff-mode-tests--git-patch + "From 1234567890abcdef1234567890abcdef12345678 Mon Sep 17 00:00:00 2001 +From: Alyssa P. Hacker +Date: Sun, 3 Mar 2025 10:30:00 -0400 +Subject: [PATCH] Subtle bug fixes and slight improvements + +- This is not a removed line ++ This is not an added line + +--- + src/main.py | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/src/main.py b/src/main.py +index 9f6c5fe43e47eab441232e54456c5c2b06297b65..7b3f91a8b4ed923c8f43183276e3ab36fe04f6c9 100644 +--- a/src/main.py ++++ b/src/main.py +@@ -2,25 +2,24 @@ + + def main(): + # Initialize the magic number generator +- magic_number = 42 +- print(\"Magic number: \", magic_number) + +- # TODO: Fix the infinite loop +- while True: +- print(\"This loop will never end\") ++ magic_number = 73 # After reconsidering, 73 seems more appropriate ++ print(\"Updated magic number: \", magic_number) + ++ # The infinite loop was probably not the best approach ++ # while True: ++ # print(\"This loop will never end.\") + + # This part of the code handles other important tasks + print(\"Processing other tasks...\") + + # Error handling has been updated for clarity +- if not fixed_it_yet: +- print(\"ERROR: Still broken!\") ++ if not fixed_it_yet: # This should be fine now ++ print(\"ERROR: No longer an issue.\") + + # Exiting the function on a positive note +- print(\"Goodbye, cruel world!\") ++ print(\"Goodbye, world!\") + + if __name__ == \"__main__\": + main() + +--\s +2.40.0 +") + (ert-deftest diff-mode-test-git-patch () - (let ((file (ert-resource-file "git.patch"))) - (with-temp-buffer - (insert-file-contents file) - (diff-mode) - (font-lock-ensure) - (goto-char (point-min)) - (re-search-forward "magic_number = 42") - (should (eq (get-text-property (match-beginning 0) 'face) - 'diff-removed)) - (re-search-forward "magic_number = 73") - (should (eq (get-text-property (match-beginning 0) 'face) - 'diff-added))))) + (with-temp-buffer + (insert diff-mode-tests--git-patch) + (diff-mode) + (font-lock-ensure) + (goto-char (point-min)) + (re-search-forward "magic_number = 42") + (should (eq (get-text-property (match-beginning 0) 'face) + 'diff-removed)) + (re-search-forward "magic_number = 73") + (should (eq (get-text-property (match-beginning 0) 'face) + 'diff-added)))) (ert-deftest diff-mode-test-git-patch/before-first-hunk () - (let ((file (ert-resource-file "git.patch"))) - (with-temp-buffer - (insert-file-contents file) - (diff-mode) - (font-lock-ensure) - (goto-char (point-min)) - (re-search-forward "This is not a removed line") - (should (eq (get-text-property (match-beginning 0) 'face) - 'diff-context)) - (re-search-forward "This is not an added line") - (font-lock-ensure) - (should (eq (get-text-property (match-beginning 0) 'face) - 'diff-context))))) + (with-temp-buffer + (insert diff-mode-tests--git-patch) + (diff-mode) + (font-lock-ensure) + (goto-char (point-min)) + (re-search-forward "This is not a removed line") + (should (eq (get-text-property (match-beginning 0) 'face) + 'diff-context)) + (re-search-forward "This is not an added line") + (font-lock-ensure) + (should (eq (get-text-property (match-beginning 0) 'face) + 'diff-context)))) (ert-deftest diff-mode-test-git-patch/signature () - (let ((file (ert-resource-file "git.patch"))) - (with-temp-buffer - (insert-file-contents file) - (diff-mode) - (font-lock-ensure) - (goto-char (point-max)) - (re-search-backward "^-- $") - (should (eq (get-text-property (match-beginning 0) 'face) - 'diff-context))))) + (with-temp-buffer + (insert diff-mode-tests--git-patch) + (diff-mode) + (font-lock-ensure) + (goto-char (point-max)) + (re-search-backward "^-- $") + (should (eq (get-text-property (match-beginning 0) 'face) + 'diff-context)))) (ert-deftest diff-mode-test-topmost-addition-undo () (let ((patch "diff --git a/fruits b/fruits commit fa4e686148de22cee0b1671fd6b3241212c110a6 Author: Stefan Kangas Date: Sat Apr 19 08:51:09 2025 +0200 ; Delete superfluous comments explaining config.h * src/pgtkfns.c: * src/pgtkim.c: * src/pgtkmenu.c: * src/pgtkselect.c: * src/pgtkterm.c: * src/termcap.c: * src/tparam.c: Delete superfluous comments explaining config.h. diff --git a/src/pgtkfns.c b/src/pgtkfns.c index 4f5cbd45492..b55728b579c 100644 --- a/src/pgtkfns.c +++ b/src/pgtkfns.c @@ -18,8 +18,6 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see . */ -/* This should be the first include, as it may set up #defines affecting - interpretation of even the system includes. */ #include #include diff --git a/src/pgtkim.c b/src/pgtkim.c index e182083f055..fc7399eaeac 100644 --- a/src/pgtkim.c +++ b/src/pgtkim.c @@ -18,8 +18,6 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see . */ -/* This should be the first include, as it may set up #defines affecting - interpretation of even the system includes. */ #include #include "pgtkterm.h" diff --git a/src/pgtkmenu.c b/src/pgtkmenu.c index e7a862b0c18..0d96666d094 100644 --- a/src/pgtkmenu.c +++ b/src/pgtkmenu.c @@ -16,12 +16,6 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see . */ -/* - */ - - -/* This should be the first include, as it may set up #defines affecting - interpretation of even the system includes. */ #include #include "lisp.h" diff --git a/src/pgtkselect.c b/src/pgtkselect.c index 7e314df8921..c532bda00e3 100644 --- a/src/pgtkselect.c +++ b/src/pgtkselect.c @@ -17,8 +17,6 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see . */ -/* This should be the first include, as it may set up #defines affecting - interpretation of even the system includes. */ #include #include "lisp.h" diff --git a/src/pgtkterm.c b/src/pgtkterm.c index 3d59a239ccd..9e21fe01b4c 100644 --- a/src/pgtkterm.c +++ b/src/pgtkterm.c @@ -18,8 +18,6 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see . */ -/* This should be the first include, as it may set up #defines affecting - interpretation of even the system includes. */ #include /* Work around GCC bug 102671. */ diff --git a/src/termcap.c b/src/termcap.c index 8c2bf0e0643..529a0114c85 100644 --- a/src/termcap.c +++ b/src/termcap.c @@ -18,7 +18,6 @@ along with this program. If not, see . */ /* Since 2010-03, 073589f4, Emacs 24.1, this file is only used by the MS-DOS port of Emacs. */ -/* Emacs config.h may rename various library functions such as malloc. */ #include #include diff --git a/src/tparam.c b/src/tparam.c index 527294270ea..7687ca606f1 100644 --- a/src/tparam.c +++ b/src/tparam.c @@ -15,7 +15,6 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ -/* Emacs config.h may rename various library functions such as malloc. */ #include #include "lisp.h" /* for xmalloc */ commit 177accc53d7ed2afc5768ae117fc6a19749e8fb6 Author: Stefan Kangas Date: Sat Apr 19 08:48:17 2025 +0200 xterm.c: Move GTK3-specific variables into narrower scopes Avoid declaring GTK3-specific variables in larger-than-necessary scopes, especially under #ifdefs. Instead, declare them where used. This improves readability and reduces #ifdef clutter without changing behavior. * src/xterm.c: [HAVE_GTK3] (x_update_opaque_region): (XTframe_up_to_date, x_new_focus_frame, handle_one_xevent) (x_ignore_errors_for_next_request, x_stop_ignoring_errors): Clean up variable declarations. diff --git a/src/xterm.c b/src/xterm.c index 18a9231e75a..1884e780e34 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -5209,10 +5209,6 @@ x_update_opaque_region (struct frame *f, XEvent *configure) (configure ? configure->xconfigure.height : FRAME_PIXEL_HEIGHT (f))}; -#ifdef HAVE_GTK3 - GObjectClass *object_class; - GtkWidgetClass *class; -#endif if (!FRAME_DISPLAY_INFO (f)->alpha_bits) return; @@ -5240,8 +5236,9 @@ x_update_opaque_region (struct frame *f, XEvent *configure) unknown reason. (bug#55779) */ if (!FRAME_PARENT_FRAME (f)) { - object_class = G_OBJECT_GET_CLASS (FRAME_GTK_OUTER_WIDGET (f)); - class = GTK_WIDGET_CLASS (object_class); + GObjectClass *object_class + = G_OBJECT_GET_CLASS (FRAME_GTK_OUTER_WIDGET (f)); + GtkWidgetClass *class = GTK_WIDGET_CLASS (object_class); if (class->style_updated) class->style_updated (FRAME_GTK_OUTER_WIDGET (f)); @@ -7635,12 +7632,6 @@ x_update_end (struct frame *f) static void XTframe_up_to_date (struct frame *f) { -#if defined HAVE_XSYNC && defined HAVE_GTK3 - GtkWidget *widget; - GdkWindow *window; - GdkFrameClock *clock; -#endif - eassert (FRAME_X_P (f)); block_input (); FRAME_MOUSE_UPDATE (f); @@ -7667,10 +7658,10 @@ XTframe_up_to_date (struct frame *f) #else if (FRAME_X_OUTPUT (f)->xg_sync_end_pending_p) { - widget = FRAME_GTK_OUTER_WIDGET (f); - window = gtk_widget_get_window (widget); + GtkWidget *widget = FRAME_GTK_OUTER_WIDGET (f); + GdkWindow *window = gtk_widget_get_window (widget); eassert (window); - clock = gdk_window_get_frame_clock (window); + GdkFrameClock *clock = gdk_window_get_frame_clock (window); eassert (clock); gdk_frame_clock_request_phase (clock, @@ -11980,12 +11971,10 @@ x_new_focus_frame (struct x_display_info *dpyinfo, struct frame *frame) { struct frame *old_focus = dpyinfo->x_focus_frame; #if defined USE_GTK && !defined HAVE_GTK3 && defined HAVE_XINPUT2 - XIEventMask mask; - ptrdiff_t l; - if (dpyinfo->supports_xi2) { - l = XIMaskLen (XI_LASTEVENT); + ptrdiff_t l = XIMaskLen (XI_LASTEVENT); + XIEventMask mask; mask.mask = alloca (l); mask.mask_len = l; memset (mask.mask, 0, l); @@ -19287,12 +19276,6 @@ handle_one_xevent (struct x_display_info *dpyinfo, struct frame *f = x_top_window_to_frame (dpyinfo, event->xclient.window); -#if defined HAVE_GTK3 - GtkWidget *widget; - GdkWindow *window; - GdkFrameClock *frame_clock; -#endif - if (f) { #ifndef HAVE_GTK3 @@ -19313,8 +19296,8 @@ handle_one_xevent (struct x_display_info *dpyinfo, *finish = X_EVENT_DROP; #else - widget = FRAME_GTK_OUTER_WIDGET (f); - window = gtk_widget_get_window (widget); + GtkWidget *widget = FRAME_GTK_OUTER_WIDGET (f); + GdkWindow *window = gtk_widget_get_window (widget); eassert (window); /* This could be a (former) child frame for which @@ -19324,7 +19307,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, if (widget && !FRAME_X_OUTPUT (f)->xg_sync_end_pending_p) { - frame_clock = gdk_window_get_frame_clock (window); + GdkFrameClock *frame_clock = gdk_window_get_frame_clock (window); eassert (frame_clock); gdk_frame_clock_request_phase (frame_clock, @@ -24641,9 +24624,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, int i, ndevices, n_disabled, *disabled; struct xi_device_t *device; #if !defined USE_X_TOOLKIT && (!defined USE_GTK || defined HAVE_GTK3) - bool any_changed; - - any_changed = false; + bool any_changed = false; #endif /* !USE_X_TOOLKIT && (!USE_GTK || HAVE_GTK3) */ hev = (XIHierarchyEvent *) xi_event; SAFE_NALLOCA (disabled, 1, hev->num_info); @@ -24770,9 +24751,6 @@ handle_one_xevent (struct x_display_info *dpyinfo, { struct xi_device_t *device, *source; bool menu_bar_p = false, tool_bar_p = false; -#ifdef HAVE_GTK3 - GdkRectangle test_rect; -#endif EMACS_INT local_detail; device = xi_device_from_id (dpyinfo, xev->deviceid); source = xi_device_from_id (dpyinfo, xev->sourceid); @@ -24805,6 +24783,7 @@ handle_one_xevent (struct x_display_info *dpyinfo, { int scale = xg_get_scale (f); + GdkRectangle test_rect; test_rect.x = xev->event_x / scale; test_rect.y = xev->event_y / scale; test_rect.width = 1; @@ -26462,9 +26441,6 @@ x_ignore_errors_for_next_request (struct x_display_info *dpyinfo, { struct x_failable_request *request, *max; unsigned long next_request; -#ifdef HAVE_GTK3 - GdkDisplay *gdpy; -#endif /* This code is not reentrant, so be sure nothing calls it recursively in response to input. */ @@ -26475,9 +26451,7 @@ x_ignore_errors_for_next_request (struct x_display_info *dpyinfo, callbacks, which this can be called from. Instead of trying to restore our own, add a trap for the following requests with GDK as well. */ - - gdpy = gdk_x11_lookup_xdisplay (dpyinfo->display); - + GdkDisplay *gdpy = gdk_x11_lookup_xdisplay (dpyinfo->display); if (gdpy) gdk_x11_display_error_trap_push (gdpy); #endif @@ -26521,9 +26495,6 @@ void x_stop_ignoring_errors (struct x_display_info *dpyinfo) { struct x_failable_request *range; -#ifdef HAVE_GTK3 - GdkDisplay *gdpy; -#endif range = dpyinfo->next_failable_request - 1; range->end = XNextRequest (dpyinfo->display) - 1; @@ -26535,7 +26506,7 @@ x_stop_ignoring_errors (struct x_display_info *dpyinfo) emacs_abort (); #ifdef HAVE_GTK3 - gdpy = gdk_x11_lookup_xdisplay (dpyinfo->display); + GdkDisplay *gdpy = gdk_x11_lookup_xdisplay (dpyinfo->display); if (gdpy) gdk_x11_display_error_trap_pop_ignored (gdpy); commit 9ea9c5a73e004903ca1c6e15cf5797458315ad9a Merge: 37b2c2fcdd9 2a45f0bceba Author: Michael Albinus Date: Sat Apr 19 10:00:04 2025 +0200 Merge from origin/emacs-30 2a45f0bceba * lisp/progmodes/heex-ts-mode.el (heex-ts): Fix :group name. 9750333dde9 Fix typescript-ts-mode indentation (bug#77803) commit 2a45f0bceba4f39fdc354e46ad686040f474e0e4 Author: Michael Albinus Date: Sat Apr 19 09:41:58 2025 +0200 * lisp/progmodes/heex-ts-mode.el (heex-ts): Fix :group name. diff --git a/lisp/progmodes/heex-ts-mode.el b/lisp/progmodes/heex-ts-mode.el index 0f7785a3279..378c9ad4e22 100644 --- a/lisp/progmodes/heex-ts-mode.el +++ b/lisp/progmodes/heex-ts-mode.el @@ -42,7 +42,7 @@ (defgroup heex-ts nil "Major mode for editing HEEx code." :prefix "heex-ts-" - :group 'langauges) + :group 'languages) (defcustom heex-ts-indent-offset 2 "Indentation of HEEx statements." commit 37b2c2fcdd9344f33f843d3fd5f9129babdf172f Author: Eli Zaretskii Date: Sat Apr 19 09:11:57 2025 +0300 ; Improve the documentation of a recent commit * etc/NEWS: * doc/lispref/frames.texi (Deleting Frames): Improve documentation of 'frame-deletable-p'. diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi index 197f4c17b46..73e6b6268d4 100644 --- a/doc/lispref/frames.texi +++ b/doc/lispref/frames.texi @@ -2839,8 +2839,11 @@ than deleted. @end deffn The following function checks whether a frame can be safely deleted. It -is useful to avoid that a subsequent call of @code{delete-frame} throws -an error. +is useful for avoiding the situation whereby a subsequent call of +@code{delete-frame} fails to delete its argument @var{frame} and/or +signals an error. To that end, your Lisp program should call +@code{delete-frame} only if the following function returns +non-@code{nil}. @defun frame-deletable-p &optional frame This function returns non-@code{nil} if the frame specified by diff --git a/etc/NEWS b/etc/NEWS index 0593f07d381..56a45068daf 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -315,9 +315,10 @@ helps to restore window buffers across Emacs sessions. +++ *** New function 'frame-deletable-p'. -Calling this function before 'delete-frame' is useful to avoid how the -latter function signals an error when its FRAME argument cannot be -deleted. +If this function returns nil, the following call to 'delete-frame' might +fail to delete its argument FRAME or might signal an error. It is +therefore advisable to use this function as part of a condition that +determines whether to call 'delete-frame'. +++ *** New value 'force' for user option 'frame-inhibit-implied-resize'. commit f200b3c91060afe559945e8128a021d5b3aa3ee1 Author: Eli Zaretskii Date: Sat Apr 19 08:59:06 2025 +0300 ; Fix typos in last change. diff --git a/lisp/treesit.el b/lisp/treesit.el index ccd9786d53f..72459a5a94f 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -5277,14 +5277,14 @@ If anything goes wrong, this function signals an `treesit-error'." (copy-file file (expand-file-name (file-name-nondirectory file) dest-dir) t))))) (defcustom treesit-auto-install-grammar 'ask - "Whether to install trere-sitter language grammar libraries when needed. + "Whether to install tree-sitter language grammar libraries when needed. This controls whether Emacs will install missing grammar libraries when they are needed by some tree-sitter based mode. If `ask', ask for confirmation before installing the required grammar library. If `always', install the grammar library without asking. If nil or `never' or anything else, don't install the grammar library even while visiting a file in the mode that requires such grammar; this -might dispolay a warning and/or fail to turn on the mode." +might display a warning and/or fail to turn on the mode." :type '(choice (const :tag "Never install grammar libraries" never) (const :tag "Always automatically install grammar libraries" always) commit 5ec6613f13f414702d88eddbb3a510f3b8da4dd3 Author: Eli Zaretskii Date: Sat Apr 19 08:56:21 2025 +0300 Rename 'treesit-auto-install' to 'treesit-auto-install-grammar' * etc/NEWS: * lisp/treesit.el (treesit-auto-install-grammar): Rename from 'treesit-auto-install'; all users changed. Doc fix. (treesit-ensure-installed): Doc fix. diff --git a/etc/NEWS b/etc/NEWS index 98f8e703013..0593f07d381 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -549,8 +549,10 @@ This variable has no effect when Transient Mark mode is off. ** Tree-sitter -*** New user option 'treesit-auto-install'. -It controls the automatic installation of tree-sitter grammars. +*** New user option 'treesit-auto-install-grammar'. +It controls the automatic installation of tree-sitter grammar libraries +needed for tree-sitter based modes, if these grammar libraries are not +available when such modes are turned on. *** The file treesit-x.el defines a number of simple tree-sitter modes. Using the new macro 'define-treesit-generic-mode', generic modes are diff --git a/lisp/treesit.el b/lisp/treesit.el index 72897580ccd..ccd9786d53f 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -5276,25 +5276,32 @@ If anything goes wrong, this function signals an `treesit-error'." (dolist (file (directory-files query-dir t "\\.scm\\'" t)) (copy-file file (expand-file-name (file-name-nondirectory file) dest-dir) t))))) -(defcustom treesit-auto-install 'ask - "Automatic installation of a language grammar. -If `ask', prompt for a confirmation before installing the required -language grammar. If `always', silently install the grammar. -If nil or `never' or anything else, don't install the grammar -even while visiting a file in the mode that requires such grammar." - :type '(choice (const :tag "Never try to install grammar" never) - (const :tag "Always install grammar automatically" always) - (const :tag "Ask whether to install grammar" ask)) +(defcustom treesit-auto-install-grammar 'ask + "Whether to install trere-sitter language grammar libraries when needed. +This controls whether Emacs will install missing grammar libraries +when they are needed by some tree-sitter based mode. +If `ask', ask for confirmation before installing the required grammar library. +If `always', install the grammar library without asking. +If nil or `never' or anything else, don't install the grammar library +even while visiting a file in the mode that requires such grammar; this +might dispolay a warning and/or fail to turn on the mode." + :type '(choice (const :tag "Never install grammar libraries" never) + (const :tag "Always automatically install grammar libraries" + always) + (const :tag "Ask whether to install missing grammar libraries" + ask)) :version "31.1") (defun treesit-ensure-installed (lang) - "Ensure that the grammar for the language LANG is installed. -The option `treesit-auto-install' defines whether to install it -automatically, or ask for a confirmation." + "Ensure that the grammar library for the language LANG is installed. +The option `treesit-auto-install-grammar' defines whether to install +the grammar library if it's unavailable." (or (treesit-ready-p lang t) - (when (or (eq treesit-auto-install 'always) - (and (eq treesit-auto-install 'ask) - (y-or-n-p (format "Install grammar for `%s'?" lang)))) + (when (or (eq treesit-auto-install-grammar 'always) + (and (eq treesit-auto-install-grammar 'ask) + (y-or-n-p (format "\ +Tree-sitter grammar for `%s' is missing; install it?" + lang)))) (treesit-install-language-grammar lang) ;; Check that the grammar was installed successfully (treesit-ready-p lang)))) commit 9750333dde9d23510341632d1c9a950d9c67415c Author: Konstantin Kharlamov Date: Tue Apr 15 17:34:11 2025 +0300 Fix typescript-ts-mode indentation (bug#77803) Don't align variable names to their declaratory expression. Before this commit in code like: const a = 1, b = 2; the b would get indented to `const'. Similarly for `var' and `let'. The expected behavior instead is getting indented to `typescript-ts-mode-indent-offset'. * lisp/progmodes/typescript-ts-mode.el (typescript-ts-mode--indent-rules): Indent identifiers declarations to `typescript-ts-mode-indent-offset'. * test/lisp/progmodes/typescript-ts-mode-resources/indent.erts (Lexical and variable declarations): Update test accordingly. diff --git a/lisp/progmodes/typescript-ts-mode.el b/lisp/progmodes/typescript-ts-mode.el index b4b078950c3..f1410df6421 100644 --- a/lisp/progmodes/typescript-ts-mode.el +++ b/lisp/progmodes/typescript-ts-mode.el @@ -130,7 +130,7 @@ Argument LANGUAGE is either `typescript' or `tsx'." ((parent-is "type_arguments") parent-bol typescript-ts-mode-indent-offset) ((parent-is "type_parameters") parent-bol typescript-ts-mode-indent-offset) ((parent-is ,(rx (or "variable" "lexical") "_" (or "declaration" "declarator"))) - typescript-ts-mode--anchor-decl 1) + parent-bol typescript-ts-mode-indent-offset) ((parent-is "arguments") parent-bol typescript-ts-mode-indent-offset) ((parent-is "array") parent-bol typescript-ts-mode-indent-offset) ((parent-is "formal_parameters") parent-bol typescript-ts-mode-indent-offset) diff --git a/test/lisp/progmodes/typescript-ts-mode-resources/indent.erts b/test/lisp/progmodes/typescript-ts-mode-resources/indent.erts index 877382953c1..ef7368602d6 100644 --- a/test/lisp/progmodes/typescript-ts-mode-resources/indent.erts +++ b/test/lisp/progmodes/typescript-ts-mode-resources/indent.erts @@ -67,22 +67,22 @@ Name: Lexical and variable declarations =-= const foo = () => { let x = 1, - yyyy: { - [k: string | number]: string, - } = { - "foo": "foo", - "bar": "bar", - }; + yyyy: { + [k: string | number]: string, + } = { + "foo": "foo", + "bar": "bar", + }; var obar = 1, - fo: { [x: any]: any } = { - "a": 1, - "b": 2, - }; + fo: { [x: any]: any } = { + "a": 1, + "b": 2, + }; const cccc = 1, - bbb = { - "x": 0 - }, - ddddd = 0; + bbb = { + "x": 0 + }, + ddddd = 0; // First decls with value starting on same line const a = (x: string): string => { return x + x; commit 6430654b4d35b16093fcbf80fa5523aaf202c437 Merge: 40f71d7070b ef8bfe90b72 Author: Yuan Fu Date: Fri Apr 18 16:31:22 2025 -0700 Merge from savannah/emacs-30 ef8bfe90b72 Handle offset in treesit--update-ranges-local (bug#77848) # Conflicts: # lisp/treesit.el commit 40f71d7070b0f59886d366e07581054686a842ec Merge: e7ca83a2f4c 4dcd66abd57 Author: Yuan Fu Date: Fri Apr 18 16:30:41 2025 -0700 ; Merge from savannah/emacs-30 The following commit was skipped: 4dcd66abd57 Disable echo back instead of setting tty to raw in Inferi... commit e7ca83a2f4cdc7b93ebbc6ac0c894b3742594932 Merge: 630a3a35f82 01d4eb3dd42 Author: Yuan Fu Date: Fri Apr 18 16:30:39 2025 -0700 Merge from savannah/emacs-30 01d4eb3dd42 ; Improve doc string of 'insert-char' 93ad8407ed8 * admin/notes/emba: Fix docker build instruction. b901290ae7f * doc/lispref/text.texi (Margins): Grammar fix. 16855c89dde Merge branch 'emacs-30' of git.savannah.gnu.org:/srv/git/... 8792d3431b1 Backport: Fix tree-sitter tests on Emba # Conflicts: # test/infra/Dockerfile.emba commit 630a3a35f8268a934b542ec8c401ab85dff5610d Merge: e09b59790eb 275712a18c7 Author: Yuan Fu Date: Fri Apr 18 16:26:23 2025 -0700 ; Merge from savannah/emacs-30 The following commits were skipped: 275712a18c7 ; Improve documentation of 'help-fns-edit-variable' commit e09b59790eb1d7a2090f20d65549d6d98a1f415b Merge: f965b0d756d 2b535a9c771 Author: Yuan Fu Date: Fri Apr 18 16:26:23 2025 -0700 Merge from savannah/emacs-30 2b535a9c771 ; Improve documentation of some functions in files-x.el 45cf832ac75 Fix deleting the first line of calc trail commit f965b0d756d8a9f143c7c5d57c51939a3943617b Merge: 7f6524f5845 74e25c9413b Author: Yuan Fu Date: Fri Apr 18 16:26:23 2025 -0700 ; Merge from savannah/emacs-30 The following commits were skipped: 74e25c9413b Fix file descriptor leaks on arm Android 22b646efe38 ; Fix a typo in proced.el commit 7f6524f5845267c6db4c97291d79bddbe2008829 Merge: 80e74dc832b 17418125353 Author: Yuan Fu Date: Fri Apr 18 16:26:22 2025 -0700 Merge from savannah/emacs-30 17418125353 lisp/help.el (help-form-show): Improve last change (bug#7... commit ef8bfe90b7201f9f42484219267cec9d79d5b938 Author: Yuan Fu Date: Fri Apr 18 16:22:45 2025 -0700 Handle offset in treesit--update-ranges-local (bug#77848) * lisp/treesit.el: (treesit--update-ranges-local): Add OFFSET parameter. (treesit-update-ranges): Pass offset to treesit--update-ranges-local. diff --git a/lisp/treesit.el b/lisp/treesit.el index d40088178fc..a26625eca57 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -736,7 +736,7 @@ it." (delete-overlay ov))))) (defun treesit--update-ranges-local - (query embedded-lang modified-tick &optional beg end) + (query embedded-lang modified-tick &optional beg end offset) "Update range for local parsers between BEG and END. Use QUERY to get the ranges, and make sure each range has a local parser for EMBEDDED-LANG. @@ -748,11 +748,16 @@ property. When this function touches an overlay, it sets the `treesit-parser-ov-timestamp' property of the overlay to MODIFIED-TICK. This will help Emacs garbage-collect overlays that -aren't in use anymore." +aren't in use anymore. + +OFFSET is a cons of start and end offsets that are applied to the range +for the local parser." ;; Update range. (let* ((host-lang (treesit-query-language query)) (host-parser (treesit-parser-create host-lang)) - (ranges (treesit-query-range host-parser query beg end))) + (ranges (treesit-query-range host-parser query beg end)) + (offset-left (or (car offset) 0)) + (offset-right (or (cdr offset) 0))) (pcase-dolist (`(,beg . ,end) ranges) (let ((has-parser nil)) (setq @@ -780,7 +785,8 @@ aren't in use anymore." (overlay-put ov 'treesit-parser-ov-timestamp modified-tick) (treesit-parser-set-included-ranges - embedded-parser `((,beg . ,end))))))))) + embedded-parser `((,(+ beg offset-left) + . ,(+ end offset-right)))))))))) (defun treesit-update-ranges (&optional beg end) "Update the ranges for each language in the current buffer. @@ -803,7 +809,7 @@ region." ((functionp query) (funcall query beg end)) (local (treesit--update-ranges-local - query language modified-tick beg end)) + query language modified-tick beg end offset)) (t (let* ((host-lang (treesit-query-language query)) (parser (treesit-parser-create language)) commit 80e74dc832bd8683133d61ac34cce3c71bb38e13 Author: Juri Linkov Date: Fri Apr 18 20:15:40 2025 +0300 Fix parens inside links in markdown-ts--treesit-settings. * lisp/textmodes/markdown-ts-mode.el (markdown-ts--treesit-settings): Override paren delimiter inside inline link. https://lists.gnu.org/archive/html/emacs-devel/2025-04/msg00655.html diff --git a/lisp/textmodes/markdown-ts-mode.el b/lisp/textmodes/markdown-ts-mode.el index 9177573203e..a2ea434c017 100644 --- a/lisp/textmodes/markdown-ts-mode.el +++ b/lisp/textmodes/markdown-ts-mode.el @@ -187,6 +187,7 @@ maps to tree-sitter language `cpp'.") (paragraph (inline (block_continuation) @markdown-ts-delimiter)))) :language 'markdown-inline + :override t ;; override paren delimiter inside inline link :feature 'paragraph-inline '(((image_description) @link) ((link_destination) @font-lock-string-face) commit d56e37c83c721c5bcffcf434138b27482b7e3fa6 Author: Juri Linkov Date: Fri Apr 18 19:52:19 2025 +0300 Embed elixir in heex as well as elixir->heex->elixir (bug#76788). * lisp/progmodes/elixir-ts-mode.el (elixir-ts--range-rules): Rename to a shorter name from 'elixir-ts--treesit-range-rules'. (elixir-ts--font-lock-feature-list, elixir-ts--thing-settings) (elixir-ts--range-rules): New variables with default values extracted from 'elixir-ts-mode'. (elixir-ts-mode): Use 'elixir-ts--font-lock-feature-list', 'elixir-ts--thing-settings', 'elixir-ts--range-rules' and 'heex-ts--range-rules'. Use 'treesit-merge-font-lock-feature-list' to merge 'heex-ts--font-lock-feature-list'. * lisp/progmodes/heex-ts-mode.el (heex-ts--font-lock-feature-list, heex-ts--range-rules): New variables. (heex-ts-mode): Use 'heex-ts--font-lock-feature-list', 'heex-ts--range-rules'. Merge 'elixir-ts--font-lock-settings', 'elixir-ts--font-lock-feature-list', 'elixir-ts--thing-settings' for embedding elixir in heex. Enable the 'sexp' navigation by default with 'treesit-cycle-sexp-type'. * lisp/progmodes/c-ts-mode.el (c-ts-mode): Append 'treesit-range-rules' to possibly already existing list in 'treesit-range-settings'. * lisp/treesit.el (treesit-language-at-point-default): Optimize to use 'when-let*'. diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el index fd255d68a57..8d4b6f587d5 100644 --- a/lisp/progmodes/c-ts-mode.el +++ b/lisp/progmodes/c-ts-mode.el @@ -1516,13 +1516,14 @@ in your init files." treesit-font-lock-settings c-ts-mode-doxygen-comment-font-lock-settings)) (setq-local treesit-range-settings - (treesit-range-rules - :embed 'doxygen - :host 'c - :local t - `(((comment) @cap - (:match - ,c-ts-mode--doxygen-comment-regex @cap))))))))) + (append treesit-range-settings + (treesit-range-rules + :embed 'doxygen + :host 'c + :local t + `(((comment) @cap + (:match + ,c-ts-mode--doxygen-comment-regex @cap)))))))))) (derived-mode-add-parents 'c-ts-mode '(c-mode)) diff --git a/lisp/progmodes/elixir-ts-mode.el b/lisp/progmodes/elixir-ts-mode.el index 2a0a388a4e4..3a136894454 100644 --- a/lisp/progmodes/elixir-ts-mode.el +++ b/lisp/progmodes/elixir-ts-mode.el @@ -567,18 +567,59 @@ "Tree-sitter font-lock settings.") -(defvar elixir-ts--treesit-range-rules - (when (treesit-available-p) - (treesit-range-rules - :embed 'heex - :host 'elixir - '((sigil (sigil_name) @_name - (:match "^[HF]$" @_name) - (quoted_content) @heex))))) - +(defvar elixir-ts--font-lock-feature-list + '(( elixir-comment elixir-doc elixir-definition) + ( elixir-string elixir-keyword elixir-data-type) + ( elixir-sigil elixir-builtin elixir-string-escape) + ( elixir-function-call elixir-variable elixir-operator elixir-number )) + "Tree-sitter font-lock feature list.") + +(defvar elixir-ts--thing-settings + `((sexp (not (or (and named + ,(rx bos (or "source" "comment") eos)) + (and anonymous + ,(rx (or "{" "}" "[" "]" "(" ")" + "do" "end")))))) + (list + (or (and "\\`arguments\\'" ,#'elixir-ts--with-parens-0-p) + (and "\\`unary_operator\\'" ,#'elixir-ts--with-parens-1-p) + ,(rx bos (or "block" + "quoted_atom" + "string" + "interpolation" + "sigil" + "quoted_keyword" + "list" + "tuple" + "bitstring" + "map" + "do_block" + "anonymous_function") + eos))) + (sexp-default + ;; For `C-M-f' in "&|(a)" + ("(" . ,(lambda (node) + (equal (treesit-node-type (treesit-node-parent node)) + "unary_operator")))) + (sentence + ,(rx bos (or "call") eos)) + (text + ,(rx bos (or "string" "sigil" "comment") eos))) + "`treesit-thing-settings' for Elixir.") + +(defvar elixir-ts--range-rules + (treesit-range-rules + :embed 'heex + :host 'elixir + '((sigil (sigil_name) @_name + (:match "^[HF]$" @_name) + (quoted_content) @heex)))) + +(defvar heex-ts--range-rules) (defvar heex-ts--thing-settings) (defvar heex-ts--indent-rules) (defvar heex-ts--font-lock-settings) +(defvar heex-ts--font-lock-feature-list) (defun elixir-ts--treesit-anchor-grand-parent-bol (_n parent &rest _) "Return the beginning of non-space characters for the parent node of PARENT." @@ -693,11 +734,7 @@ Return nil if NODE is not a defun node or doesn't have a name." ;; Font-lock. (setq-local treesit-font-lock-settings elixir-ts--font-lock-settings) (setq-local treesit-font-lock-feature-list - '(( elixir-comment elixir-doc elixir-definition) - ( elixir-string elixir-keyword elixir-data-type) - ( elixir-sigil elixir-builtin elixir-string-escape) - ( elixir-function-call elixir-variable elixir-operator elixir-number ))) - + elixir-ts--font-lock-feature-list) ;; Imenu. (setq-local treesit-simple-imenu-settings @@ -708,37 +745,7 @@ Return nil if NODE is not a defun node or doesn't have a name." ;; Navigation. (setq-local treesit-thing-settings - `((elixir - (sexp (not (or (and named - ,(rx bos (or "source" "comment") eos)) - (and anonymous - ,(rx (or "{" "}" "[" "]" "(" ")" - "do" "end")))))) - (list - (or (and "\\`arguments\\'" ,#'elixir-ts--with-parens-0-p) - (and "\\`unary_operator\\'" ,#'elixir-ts--with-parens-1-p) - ,(rx bos (or "block" - "quoted_atom" - "string" - "interpolation" - "sigil" - "quoted_keyword" - "list" - "tuple" - "bitstring" - "map" - "do_block" - "anonymous_function") - eos))) - (sexp-default - ;; For `C-M-f' in "&|(a)" - ("(" . ,(lambda (node) - (equal (treesit-node-type (treesit-node-parent node)) - "unary_operator")))) - (sentence - ,(rx bos (or "call") eos)) - (text - ,(rx bos (or "string" "sigil" "comment") eos))) + `((elixir ,@elixir-ts--thing-settings) (heex ,@heex-ts--thing-settings))) (setq-local treesit-defun-type-regexp '("call" . elixir-ts--defun-p)) @@ -747,7 +754,12 @@ Return nil if NODE is not a defun node or doesn't have a name." ;; Embedded Heex. (when (treesit-ensure-installed 'heex) - (setq-local treesit-range-settings elixir-ts--treesit-range-rules) + (setq-local treesit-range-settings + (append elixir-ts--range-rules + ;; Leave only local parsers from heex + ;; for elixir->heex->elixir embedding. + (seq-filter (lambda (r) (nth 2 r)) + heex-ts--range-rules))) (setq-local treesit-font-lock-settings (append treesit-font-lock-settings @@ -758,12 +770,9 @@ Return nil if NODE is not a defun node or doesn't have a name." heex-ts--indent-rules)) (setq-local treesit-font-lock-feature-list - '(( elixir-comment elixir-doc elixir-definition - heex-comment heex-keyword heex-doctype ) - ( elixir-string elixir-keyword elixir-data-type - heex-component heex-tag heex-attribute heex-string ) - ( elixir-sigil elixir-builtin elixir-string-escape) - ( elixir-function-call elixir-variable elixir-operator elixir-number )))) + (treesit-merge-font-lock-feature-list + treesit-font-lock-feature-list + heex-ts--font-lock-feature-list))) (treesit-major-mode-setup) (setq-local syntax-propertize-function #'elixir-ts--syntax-propertize) diff --git a/lisp/progmodes/heex-ts-mode.el b/lisp/progmodes/heex-ts-mode.el index 38d75e69243..e5a4fe196ac 100644 --- a/lisp/progmodes/heex-ts-mode.el +++ b/lisp/progmodes/heex-ts-mode.el @@ -132,6 +132,12 @@ ]))) "Tree-sitter font-lock settings.") +(defvar heex-ts--font-lock-feature-list + '(( heex-comment heex-keyword heex-doctype ) + ( heex-component heex-tag heex-attribute heex-string ) + () ()) + "Tree-sitter font-lock feature list.") + (defun heex-ts--defun-name (node) "Return the name of the defun NODE. Return nil if NODE is not a defun node or doesn't have a name." @@ -166,6 +172,24 @@ Return nil if NODE is not a defun node or doesn't have a name." ,(rx bos (or "comment" "text") eos))) "`treesit-thing-settings' for HEEx.") +(defvar heex-ts--range-rules + (treesit-range-rules + :embed 'elixir + :host 'heex + '((directive [(partial_expression_value) + (ending_expression_value)] + @cap)) + + :embed 'elixir + :host 'heex + :local t + '((directive (expression_value) @cap) + (expression (expression_value) @cap)))) + +(defvar elixir-ts--font-lock-settings) +(defvar elixir-ts--font-lock-feature-list) +(defvar elixir-ts--thing-settings) + ;;;###autoload (define-derived-mode heex-ts-mode html-mode "HEEx" "Major mode for editing HEEx, powered by tree-sitter." @@ -204,11 +228,29 @@ Return nil if NODE is not a defun node or doesn't have a name." (setq-local treesit-simple-indent-rules heex-ts--indent-rules) (setq-local treesit-font-lock-feature-list - '(( heex-comment heex-keyword heex-doctype ) - ( heex-component heex-tag heex-attribute heex-string ) - () ())) + heex-ts--font-lock-feature-list) + + (when (treesit-ready-p 'elixir) + (require 'elixir-ts-mode) + (treesit-parser-create 'elixir) + + (setq-local treesit-range-settings heex-ts--range-rules) + + (setq-local treesit-font-lock-settings + (append treesit-font-lock-settings + elixir-ts--font-lock-settings)) + (setq-local treesit-font-lock-feature-list + (treesit-merge-font-lock-feature-list + treesit-font-lock-feature-list + elixir-ts--font-lock-feature-list)) + + (setq-local treesit-thing-settings + (append treesit-thing-settings + `((elixir ,@elixir-ts--thing-settings))))) - (treesit-major-mode-setup))) + (treesit-major-mode-setup) + ;; Enable the 'sexp' navigation by default + (treesit-cycle-sexp-type))) (derived-mode-add-parents 'heex-ts-mode '(heex-mode)) diff --git a/lisp/treesit.el b/lisp/treesit.el index 2b2551c169f..72897580ccd 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -195,9 +195,8 @@ Returns the language at POSITION, or nil if there's no parser in the buffer. When there are multiple parsers that cover POSITION, use the parser with the deepest embed level as it's the \"most relevant\" parser at POSITION." - (let ((parser (car (treesit-parsers-at position)))) - (when parser - (treesit-parser-language parser)))) + (when-let* ((parser (car (treesit-parsers-at position)))) + (treesit-parser-language parser))) ;;; Node API supplement commit 3d3be6dd0eb320e73d59ad6958e7c6e2c1b6a434 Author: Juri Linkov Date: Fri Apr 18 19:22:50 2025 +0300 Lock tree-sitter language grammars to verified versions. * admin/notes/tree-sitter/build-module/build.sh: Update org for toml/yaml. * admin/tree-sitter/treesit-admin.el (treesit-admin--builtin-language-sources): Add verified versions. * lisp/progmodes/c-ts-mode.el: Append language source to treesit-language-source-alist. (c-ts-mode, c++-ts-mode): Use treesit-ensure-installed. * lisp/progmodes/cmake-ts-mode.el: Append language source to treesit-language-source-alist. (cmake-ts-mode): Use treesit-ensure-installed. * lisp/progmodes/csharp-mode.el: Append language source to treesit-language-source-alist. (csharp-ts-mode): Use treesit-ensure-installed. * lisp/progmodes/dockerfile-ts-mode.el: Append language source to treesit-language-source-alist. (dockerfile-ts-mode): Use treesit-ensure-installed. * lisp/progmodes/elixir-ts-mode.el: Append language source to treesit-language-source-alist. (elixir-ts-mode): Use treesit-ensure-installed. * lisp/progmodes/go-ts-mode.el: Append language source to treesit-language-source-alist. (go-ts-mode, go-mod-ts-mode, go-work-ts-mode): Use treesit-ensure-installed. * lisp/progmodes/heex-ts-mode.el: Append language source to treesit-language-source-alist. (heex-ts-mode): Use treesit-ensure-installed. * lisp/progmodes/java-ts-mode.el: Append language source to treesit-language-source-alist. (java-ts-mode): Use treesit-ensure-installed. * lisp/progmodes/js.el: Append language source to treesit-language-source-alist. (js-ts-mode): Use treesit-ensure-installed. * lisp/progmodes/json-ts-mode.el: Append language source to treesit-language-source-alist. (json-ts-mode): Use treesit-ensure-installed. * lisp/progmodes/lua-ts-mode.el: Append language source to treesit-language-source-alist. (lua-ts-mode): Use treesit-ensure-installed. * lisp/progmodes/php-ts-mode.el (php-ts-mode--language-source-alist): Update versions from comments in ts-modes. Append to treesit-language-source-alist. (php-ts-mode-install-parsers): Use treesit-language-source-alist directly. (php-ts-mode): Use treesit-ensure-installed. * lisp/progmodes/ruby-ts-mode.el: Append language source to treesit-language-source-alist. (ruby-ts-mode): Use treesit-ensure-installed. * lisp/progmodes/rust-ts-mode.el: Append language source to treesit-language-source-alist. (rust-ts-mode): Use treesit-ensure-installed. * lisp/progmodes/sh-script.el: Append language source to treesit-language-source-alist. (bash-ts-mode): Use treesit-ensure-installed. * lisp/progmodes/typescript-ts-mode.el: Append language source to treesit-language-source-alist. (typescript-ts-mode, tsx-ts-mode): Use treesit-ensure-installed. * lisp/textmodes/css-mode.el: Append language source to treesit-language-source-alist. (css-ts-mode): Use treesit-ensure-installed. * lisp/textmodes/html-ts-mode.el: Append language source to treesit-language-source-alist. (html-ts-mode): Use treesit-ensure-installed. * lisp/textmodes/markdown-ts-mode.el: Append language source to treesit-language-source-alist. (markdown-ts-mode): Use treesit-ensure-installed. * lisp/textmodes/mhtml-ts-mode.el (mhtml-ts-mode--language-source-alist): Append to treesit-language-source-alist. (mhtml-ts-mode-install-parsers): Use treesit-language-source-alist directly. (mhtml-ts-mode): Use treesit-ensure-installed. * lisp/textmodes/toml-ts-mode.el: Append language source to treesit-language-source-alist. (toml-ts-mode): Use treesit-ensure-installed. * lisp/textmodes/yaml-ts-mode.el: Append language source to treesit-language-source-alist. (yaml-ts-mode): Use treesit-ensure-installed. * test/infra/Dockerfile.emba: Add verified versions to treesit-language-source-alist. diff --git a/admin/notes/tree-sitter/build-module/build.sh b/admin/notes/tree-sitter/build-module/build.sh index 4f3c6da3c5f..0cece86e5f7 100755 --- a/admin/notes/tree-sitter/build-module/build.sh +++ b/admin/notes/tree-sitter/build-module/build.sh @@ -59,8 +59,11 @@ case "${lang}" in sourcedir="tree-sitter-typescript/tsx/src" grammardir="tree-sitter-typescript/tsx" ;; + "toml") + org="tree-sitter-grammars" + ;; "yaml") - org="ikatyang" + org="tree-sitter-grammars" ;; esac diff --git a/admin/tree-sitter/treesit-admin.el b/admin/tree-sitter/treesit-admin.el index 86174ed2625..ef6d256a538 100644 --- a/admin/tree-sitter/treesit-admin.el +++ b/admin/tree-sitter/treesit-admin.el @@ -72,31 +72,33 @@ ;;; Query validation (defvar treesit-admin--builtin-language-sources - '((c "https://github.com/tree-sitter/tree-sitter-c") - (cpp "https://github.com/tree-sitter/tree-sitter-cpp") - (cmake "https://github.com/uyha/tree-sitter-cmake") - (dockerfile "https://github.com/camdencheek/tree-sitter-dockerfile") - (go "https://github.com/tree-sitter/tree-sitter-go") - (ruby "https://github.com/tree-sitter/tree-sitter-ruby") - (javascript "https://github.com/tree-sitter/tree-sitter-javascript") + '((c "https://github.com/tree-sitter/tree-sitter-c" "v0.23.4") + (cpp "https://github.com/tree-sitter/tree-sitter-cpp" "v0.23.4") + (cmake "https://github.com/uyha/tree-sitter-cmake" "v0.5.0") + (dockerfile "https://github.com/camdencheek/tree-sitter-dockerfile" "v0.2.0") + (go "https://github.com/tree-sitter/tree-sitter-go" "v0.23.4") + (ruby "https://github.com/tree-sitter/tree-sitter-ruby" "v0.23.1") + (javascript "https://github.com/tree-sitter/tree-sitter-javascript" "v0.23.1") (typescript "https://github.com/tree-sitter/tree-sitter-typescript" - nil "typescript/src") + "v0.23.2" "typescript/src") (tsx "https://github.com/tree-sitter/tree-sitter-typescript" - nil "tsx/src") - (json "https://github.com/tree-sitter/tree-sitter-json") - (rust "https://github.com/tree-sitter/tree-sitter-rust") + "v0.23.2" "tsx/src") + (json "https://github.com/tree-sitter/tree-sitter-json" "v0.24.8") + (rust "https://github.com/tree-sitter/tree-sitter-rust" "v0.23.2") (php "https://github.com/tree-sitter/tree-sitter-php" - nil "php/src") - (css "https://github.com/tree-sitter/tree-sitter-css") + "v0.23.11" "php/src") + (css "https://github.com/tree-sitter/tree-sitter-css" "v0.23.1") (phpdoc "https://github.com/claytonrcarter/tree-sitter-phpdoc") - (doxygen "https://github.com/tree-sitter-grammars/tree-sitter-doxygen") - (lua "https://github.com/tree-sitter-grammars/tree-sitter-lua") - (python "https://github.com/tree-sitter/tree-sitter-python") - (html "https://github.com/tree-sitter/tree-sitter-html") - (elixir "https://github.com/elixir-lang/tree-sitter-elixir") - (heex "https://github.com/phoenixframework/tree-sitter-heex") - (java "https://github.com/tree-sitter/tree-sitter-java") - (jsdoc "https://github.com/tree-sitter/tree-sitter-jsdoc")) + (doxygen "https://github.com/tree-sitter-grammars/tree-sitter-doxygen" "v1.1.0") + (lua "https://github.com/tree-sitter-grammars/tree-sitter-lua" "v0.3.0") + (python "https://github.com/tree-sitter/tree-sitter-python" "v0.23.6") + (html "https://github.com/tree-sitter/tree-sitter-html" "v0.23.2") + (elixir "https://github.com/elixir-lang/tree-sitter-elixir" "v0.3.3") + (heex "https://github.com/phoenixframework/tree-sitter-heex" "v0.7.0") + (java "https://github.com/tree-sitter/tree-sitter-java" "v0.23.5") + (jsdoc "https://github.com/tree-sitter/tree-sitter-jsdoc" "v0.23.2") + (toml "https://github.com/tree-sitter-grammars/tree-sitter-toml" "v0.7.0") + (yaml "https://github.com/tree-sitter-grammars/tree-sitter-yaml" "v0.7.0")) "A list of sources for the builtin modes. The source information are in the format of `treesit-language-source-alist'. This is for development only.") diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el index a9af2eb679a..fd255d68a57 100644 --- a/lisp/progmodes/c-ts-mode.el +++ b/lisp/progmodes/c-ts-mode.el @@ -86,6 +86,19 @@ (eval-when-compile (require 'rx)) (treesit-declare-unavailable-functions) +(add-to-list + 'treesit-language-source-alist + '(c "https://github.com/tree-sitter/tree-sitter-c" "v0.23.4") + t) +(add-to-list + 'treesit-language-source-alist + '(cpp "https://github.com/tree-sitter/tree-sitter-cpp" "v0.23.4") + t) +(add-to-list + 'treesit-language-source-alist + '(doxygen "https://github.com/tree-sitter-grammars/tree-sitter-doxygen" "v1.1.0") + t) + ;;; Custom variables (defcustom c-ts-mode-indent-offset 2 @@ -1460,7 +1473,7 @@ in your init files." :group 'c :after-hook (c-ts-mode-set-modeline) - (when (treesit-ready-p 'c) + (when (treesit-ensure-installed 'c) ;; Create an "for-each" parser, see `c-ts-mode--emacs-set-ranges' ;; for more. (when c-ts-mode-emacs-sources-support @@ -1495,7 +1508,8 @@ in your init files." (treesit-font-lock-recompute-features '(emacs-devel))) ;; Inject doxygen parser for comment. - (when (and c-ts-mode-enable-doxygen (treesit-ready-p 'doxygen t)) + (when (and c-ts-mode-enable-doxygen + (treesit-ensure-installed 'doxygen)) (setq-local treesit-primary-parser primary-parser) (setq-local treesit-font-lock-settings (append @@ -1535,7 +1549,7 @@ recommended to enable `electric-pair-mode' with this mode." :group 'c++ :after-hook (c-ts-mode-set-modeline) - (when (treesit-ready-p 'cpp) + (when (treesit-ensure-installed 'cpp) (let ((primary-parser (treesit-parser-create 'cpp))) ;; Syntax. @@ -1557,7 +1571,8 @@ recommended to enable `electric-pair-mode' with this mode." #'c-ts-mode--emacs-current-defun-name)) ;; Inject doxygen parser for comment. - (when (and c-ts-mode-enable-doxygen (treesit-ready-p 'doxygen t)) + (when (and c-ts-mode-enable-doxygen + (treesit-ensure-installed 'doxygen)) (setq-local treesit-primary-parser primary-parser) (setq-local treesit-font-lock-settings (append @@ -1670,9 +1685,6 @@ the code is C or C++, and based on that chooses whether to enable (assq-delete-all 'c-or-c++-mode major-mode-remap-defaults)) (add-to-list 'major-mode-remap-defaults '(c-or-c++-mode . c-or-c++-ts-mode))) -(when (and c-ts-mode-enable-doxygen (not (treesit-ready-p 'doxygen t))) - (message "Doxygen syntax highlighting can't be enabled, please install the language grammar.")) - (provide 'c-ts-mode) (provide 'c++-ts-mode) diff --git a/lisp/progmodes/cmake-ts-mode.el b/lisp/progmodes/cmake-ts-mode.el index 0f449f1d626..d5008fcc102 100644 --- a/lisp/progmodes/cmake-ts-mode.el +++ b/lisp/progmodes/cmake-ts-mode.el @@ -40,6 +40,11 @@ (eval-when-compile (require 'rx)) (treesit-declare-unavailable-functions) +(add-to-list + 'treesit-language-source-alist + '(cmake "https://github.com/uyha/tree-sitter-cmake" "v0.5.0") + t) + (defcustom cmake-ts-mode-indent-offset 2 "Number of spaces for each indentation step in `cmake-ts-mode'." :version "29.1" @@ -212,7 +217,7 @@ Return nil if there is no name or if NODE is not a defun node." :group 'cmake :syntax-table cmake-ts-mode--syntax-table - (when (treesit-ready-p 'cmake) + (when (treesit-ensure-installed 'cmake) (setq treesit-primary-parser (treesit-parser-create 'cmake)) ;; Comments. diff --git a/lisp/progmodes/csharp-mode.el b/lisp/progmodes/csharp-mode.el index 5e9b8d680eb..fe2fbb0d1e5 100644 --- a/lisp/progmodes/csharp-mode.el +++ b/lisp/progmodes/csharp-mode.el @@ -649,6 +649,11 @@ compilation and evaluation time conflicts." ;;; Tree-sitter support +(add-to-list + 'treesit-language-source-alist + '(c-sharp "https://github.com/tree-sitter/tree-sitter-c-sharp" "v0.23.1") + t) + (defcustom csharp-ts-mode-indent-offset 4 "Number of spaces for each indentation step in `csharp-ts-mode'." :type 'integer @@ -1056,7 +1061,7 @@ Key bindings: "Major mode for editing C# code." :syntax-table (csharp--make-mode-syntax-table) - (unless (treesit-ready-p 'c-sharp) + (unless (treesit-ensure-installed 'c-sharp) (error "Tree-sitter for C# isn't available")) ;; Tree-sitter. diff --git a/lisp/progmodes/dockerfile-ts-mode.el b/lisp/progmodes/dockerfile-ts-mode.el index 016bb2f7272..5dcc5704c34 100644 --- a/lisp/progmodes/dockerfile-ts-mode.el +++ b/lisp/progmodes/dockerfile-ts-mode.el @@ -40,6 +40,11 @@ (eval-when-compile (require 'rx)) (treesit-declare-unavailable-functions) +(add-to-list + 'treesit-language-source-alist + '(dockerfile "https://github.com/camdencheek/tree-sitter-dockerfile" "v0.2.0") + t) + (defvar dockerfile-ts-mode--syntax-table (let ((table (make-syntax-table))) (modify-syntax-entry ?# "<" table) @@ -161,7 +166,7 @@ Return nil if there is no name or if NODE is not a stage node." :group 'dockerfile :syntax-table dockerfile-ts-mode--syntax-table - (when (treesit-ready-p 'dockerfile) + (when (treesit-ensure-installed 'dockerfile) (setq treesit-primary-parser (treesit-parser-create 'dockerfile)) ;; Comments. diff --git a/lisp/progmodes/elixir-ts-mode.el b/lisp/progmodes/elixir-ts-mode.el index 8358ffdc63a..2a0a388a4e4 100644 --- a/lisp/progmodes/elixir-ts-mode.el +++ b/lisp/progmodes/elixir-ts-mode.el @@ -57,6 +57,15 @@ (eval-when-compile (require 'rx)) (treesit-declare-unavailable-functions) +(add-to-list + 'treesit-language-source-alist + '(elixir "https://github.com/elixir-lang/tree-sitter-elixir" "v0.3.3") + t) +(add-to-list + 'treesit-language-source-alist + '(heex "https://github.com/phoenixframework/tree-sitter-heex" "v0.7.0") + t) + (defgroup elixir-ts nil "Major mode for editing Elixir code." :prefix "elixir-ts-" @@ -667,11 +676,11 @@ Return nil if NODE is not a defun node or doesn't have a name." (add-hook 'post-self-insert-hook #'elixir-ts--electric-pair-string-delimiter 'append t) - (when (treesit-ready-p 'elixir) + (when (treesit-ensure-installed 'elixir) ;; The HEEx parser has to be created first for elixir to ensure elixir ;; is the first language when looking for treesit ranges. ;; (In Emacs 31 this requirement is removed.) - (when (treesit-ready-p 'heex) + (when (treesit-ensure-installed 'heex) ;; Require heex-ts-mode only when we load elixir-ts-mode ;; so that we don't get a tree-sitter compilation warning for ;; elixir-ts-mode. @@ -737,7 +746,7 @@ Return nil if NODE is not a defun node or doesn't have a name." (setq-local treesit-defun-name-function #'elixir-ts--defun-name) ;; Embedded Heex. - (when (treesit-ready-p 'heex) + (when (treesit-ensure-installed 'heex) (setq-local treesit-range-settings elixir-ts--treesit-range-rules) (setq-local treesit-font-lock-settings diff --git a/lisp/progmodes/go-ts-mode.el b/lisp/progmodes/go-ts-mode.el index 16150e7531b..e1736fe9208 100644 --- a/lisp/progmodes/go-ts-mode.el +++ b/lisp/progmodes/go-ts-mode.el @@ -46,6 +46,19 @@ (eval-when-compile (require 'rx)) (treesit-declare-unavailable-functions) +(add-to-list + 'treesit-language-source-alist + '(go "https://github.com/tree-sitter/tree-sitter-go" "v0.23.4") + t) +(add-to-list + 'treesit-language-source-alist + '(gomod "https://github.com/camdencheek/tree-sitter-go-mod" "v1.1.0") + t) +(add-to-list + 'treesit-language-source-alist + '(gowork "https://github.com/omertuc/tree-sitter-go-work") + t) + (defcustom go-ts-mode-indent-offset 8 "Number of spaces for each indentation step in `go-ts-mode'." :version "29.1" @@ -277,7 +290,7 @@ :group 'go :syntax-table go-ts-mode--syntax-table - (when (treesit-ready-p 'go) + (when (treesit-ensure-installed 'go) (setq treesit-primary-parser (treesit-parser-create 'go)) ;; Comments. @@ -584,7 +597,7 @@ what the parent of the node would be if it were a node." :group 'go :syntax-table go-mod-ts-mode--syntax-table - (when (treesit-ready-p 'gomod) + (when (treesit-ensure-installed 'gomod) (setq treesit-primary-parser (treesit-parser-create 'gomod)) ;; Comments. @@ -672,7 +685,7 @@ what the parent of the node would be if it were a node." "Major mode for editing go.work files, powered by tree-sitter." :group 'go - (when (treesit-ready-p 'gowork) + (when (treesit-ensure-installed 'gowork) (setq treesit-primary-parser (treesit-parser-create 'gowork)) ;; Comments. diff --git a/lisp/progmodes/heex-ts-mode.el b/lisp/progmodes/heex-ts-mode.el index 93b87d3a29d..38d75e69243 100644 --- a/lisp/progmodes/heex-ts-mode.el +++ b/lisp/progmodes/heex-ts-mode.el @@ -44,6 +44,15 @@ (eval-when-compile (require 'rx)) (treesit-declare-unavailable-functions) +(add-to-list + 'treesit-language-source-alist + '(heex "https://github.com/phoenixframework/tree-sitter-heex" "v0.7.0") + t) +(add-to-list + 'treesit-language-source-alist + '(elixir "https://github.com/elixir-lang/tree-sitter-elixir" "v0.3.3") + t) + (defgroup heex-ts nil "Major mode for editing HEEx code." :prefix "heex-ts-" @@ -162,7 +171,7 @@ Return nil if NODE is not a defun node or doesn't have a name." "Major mode for editing HEEx, powered by tree-sitter." :group 'heex-ts - (when (treesit-ready-p 'heex) + (when (treesit-ensure-installed 'heex) (setq treesit-primary-parser (treesit-parser-create 'heex)) ;; Comments diff --git a/lisp/progmodes/java-ts-mode.el b/lisp/progmodes/java-ts-mode.el index c1bd09dcb52..d48d6b45927 100644 --- a/lisp/progmodes/java-ts-mode.el +++ b/lisp/progmodes/java-ts-mode.el @@ -43,6 +43,15 @@ (require 'c-ts-common) ; For comment indent and filling. (treesit-declare-unavailable-functions) +(add-to-list + 'treesit-language-source-alist + '(java "https://github.com/tree-sitter/tree-sitter-java" "v0.23.5") + t) +(add-to-list + 'treesit-language-source-alist + '(doxygen "https://github.com/tree-sitter-grammars/tree-sitter-doxygen" "v1.1.0") + t) + (defcustom java-ts-mode-indent-offset 4 "Number of spaces for each indentation step in `java-ts-mode'." :version "29.1" @@ -385,7 +394,7 @@ Return nil if there is no name or if NODE is not a defun node." :group 'java :syntax-table java-ts-mode--syntax-table - (unless (treesit-ready-p 'java) + (unless (treesit-ensure-installed 'java) (error "Tree-sitter for Java isn't available")) (let ((primary-parser (treesit-parser-create 'java))) @@ -480,7 +489,8 @@ Return nil if there is no name or if NODE is not a defun node." java-ts-mode--font-lock-settings) ;; Inject doxygen parser for comment. - (when (and java-ts-mode-enable-doxygen (treesit-ready-p 'doxygen t)) + (when (and java-ts-mode-enable-doxygen + (treesit-ensure-installed 'doxygen)) (setq-local treesit-primary-parser primary-parser) (setq-local treesit-font-lock-settings (append treesit-font-lock-settings @@ -515,9 +525,6 @@ Return nil if there is no name or if NODE is not a defun node." (if (treesit-ready-p 'java) (add-to-list 'auto-mode-alist '("\\.java\\'" . java-ts-mode))) -(when (and java-ts-mode-enable-doxygen (not (treesit-ready-p 'doxygen t))) - (message "Doxygen syntax highlighting can't be enabled, please install the language grammar.")) - (provide 'java-ts-mode) ;;; java-ts-mode.el ends here diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index beda6737d41..243329de7ae 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el @@ -3408,6 +3408,15 @@ This function is intended for use in `after-change-functions'." ;;; Tree sitter integration +(add-to-list + 'treesit-language-source-alist + '(javascript "https://github.com/tree-sitter/tree-sitter-javascript" "v0.23.1") + t) +(add-to-list + 'treesit-language-source-alist + '(jsdoc "https://github.com/tree-sitter/tree-sitter-jsdoc" "v0.23.2") + t) + (defun js--treesit-font-lock-compatibility-definition-feature () "Font lock helper, to handle different releases of tree-sitter-javascript. Check if a node type is available, then return the right font lock rules @@ -3973,7 +3982,7 @@ See `treesit-thing-settings' for more information.") \\" :group 'js :syntax-table js-mode-syntax-table - (when (treesit-ready-p 'javascript) + (when (treesit-ensure-installed 'javascript) ;; Borrowed from `js-mode'. (setq-local prettify-symbols-alist js--prettify-symbols-alist) (setq-local parse-sexp-ignore-comments t) @@ -4004,7 +4013,7 @@ See `treesit-thing-settings' for more information.") (setq-local treesit-font-lock-settings js--treesit-font-lock-settings) (setq-local treesit-font-lock-feature-list js--treesit-font-lock-feature-list) - (when (treesit-ready-p 'jsdoc t) + (when (treesit-ensure-installed 'jsdoc) (setq-local treesit-range-settings (treesit-range-rules :embed 'jsdoc diff --git a/lisp/progmodes/json-ts-mode.el b/lisp/progmodes/json-ts-mode.el index c13e2e7f956..9d374119810 100644 --- a/lisp/progmodes/json-ts-mode.el +++ b/lisp/progmodes/json-ts-mode.el @@ -40,6 +40,11 @@ (require 'rx) (treesit-declare-unavailable-functions) +(add-to-list + 'treesit-language-source-alist + '(json "https://github.com/tree-sitter/tree-sitter-json" "v0.24.8") + t) + (defcustom json-ts-mode-indent-offset 2 "Number of spaces for each indentation step in `json-ts-mode'." :version "29.1" @@ -128,7 +133,7 @@ Return nil if there is no name or if NODE is not a defun node." :group 'json :syntax-table json-ts-mode--syntax-table - (unless (treesit-ready-p 'json) + (unless (treesit-ensure-installed 'json) (error "Tree-sitter for JSON isn't available")) (setq treesit-primary-parser (treesit-parser-create 'json)) diff --git a/lisp/progmodes/lua-ts-mode.el b/lisp/progmodes/lua-ts-mode.el index 87b035e27b0..dc129277778 100644 --- a/lisp/progmodes/lua-ts-mode.el +++ b/lisp/progmodes/lua-ts-mode.el @@ -48,6 +48,11 @@ (eval-when-compile (require 'rx)) +(add-to-list + 'treesit-language-source-alist + '(lua "https://github.com/tree-sitter-grammars/tree-sitter-lua" "v0.3.0") + t) + (defgroup lua-ts nil "Major mode for editing Lua files." :prefix "lua-ts-" @@ -661,7 +666,7 @@ Calls REPORT-FN directly." :syntax-table lua-ts--syntax-table (use-local-map lua-ts-mode-map) - (when (treesit-ready-p 'lua) + (when (treesit-ensure-installed 'lua) (setq treesit-primary-parser (treesit-parser-create 'lua)) ;; Comments. diff --git a/lisp/progmodes/php-ts-mode.el b/lisp/progmodes/php-ts-mode.el index 50e51e40b0b..b3e9ad51eaa 100644 --- a/lisp/progmodes/php-ts-mode.el +++ b/lisp/progmodes/php-ts-mode.el @@ -81,23 +81,26 @@ ;;; Install treesitter language parsers (defvar php-ts-mode--language-source-alist - '((php . ("https://github.com/tree-sitter/tree-sitter-php" "v0.23.11" "php/src")) - (phpdoc . ("https://github.com/claytonrcarter/tree-sitter-phpdoc")) - (html . ("https://github.com/tree-sitter/tree-sitter-html" "v0.23.0")) - (javascript . ("https://github.com/tree-sitter/tree-sitter-javascript" "v0.23.0")) - (jsdoc . ("https://github.com/tree-sitter/tree-sitter-jsdoc" "v0.23.0")) - (css . ("https://github.com/tree-sitter/tree-sitter-css" "v0.23.0"))) + '((php "https://github.com/tree-sitter/tree-sitter-php" "v0.23.11" "php/src") + (phpdoc "https://github.com/claytonrcarter/tree-sitter-phpdoc") + (html "https://github.com/tree-sitter/tree-sitter-html" "v0.23.2") + (javascript "https://github.com/tree-sitter/tree-sitter-javascript" "v0.23.1") + (jsdoc "https://github.com/tree-sitter/tree-sitter-jsdoc" "v0.23.2") + (css "https://github.com/tree-sitter/tree-sitter-css" "v0.23.1")) "Treesitter language parsers required by `php-ts-mode'. -You can customize this variable if you want to stick to a specific -commit and/or use different parsers.") +You can customize `treesit-language-source-alist' if you want +to stick to a specific commit and/or use different parsers.") + +(setq treesit-language-source-alist + (append treesit-language-source-alist + php-ts-mode--language-source-alist)) (defun php-ts-mode-install-parsers () "Install all the required treesitter parsers. `php-ts-mode--language-source-alist' defines which parsers to install." (interactive) - (let ((treesit-language-source-alist php-ts-mode--language-source-alist)) - (dolist (item php-ts-mode--language-source-alist) - (treesit-install-language-grammar (car item))))) + (dolist (item php-ts-mode--language-source-alist) + (treesit-install-language-grammar (car item)))) ;;; Custom variables @@ -1384,12 +1387,12 @@ Depends on `c-ts-common-comment-setup'." :syntax-table php-ts-mode--syntax-table (if (not (and - (treesit-ready-p 'php) - (treesit-ready-p 'phpdoc) - (treesit-ready-p 'html) - (treesit-ready-p 'javascript) - (treesit-ready-p 'jsdoc) - (treesit-ready-p 'css))) + (treesit-ensure-installed 'php) + (treesit-ensure-installed 'phpdoc) + (treesit-ensure-installed 'html) + (treesit-ensure-installed 'javascript) + (treesit-ensure-installed 'jsdoc) + (treesit-ensure-installed 'css))) (error "Tree-sitter for PHP isn't available. You can install the parsers with M-x `php-ts-mode-install-parsers'") diff --git a/lisp/progmodes/ruby-ts-mode.el b/lisp/progmodes/ruby-ts-mode.el index c70acfd755c..53fefe068b2 100644 --- a/lisp/progmodes/ruby-ts-mode.el +++ b/lisp/progmodes/ruby-ts-mode.el @@ -123,6 +123,11 @@ (require 'ruby-mode) (treesit-declare-unavailable-functions) +(add-to-list + 'treesit-language-source-alist + '(ruby "https://github.com/tree-sitter/tree-sitter-ruby" "v0.23.1") + t) + (defgroup ruby-ts nil "Major mode for editing Ruby code." :prefix "ruby-ts-" @@ -1155,7 +1160,7 @@ leading double colon is not added." :group 'ruby :syntax-table ruby-mode-syntax-table - (unless (treesit-ready-p 'ruby) + (unless (treesit-ensure-installed 'ruby) (error "Tree-sitter for Ruby isn't available")) (setq treesit-primary-parser (treesit-parser-create 'ruby)) diff --git a/lisp/progmodes/rust-ts-mode.el b/lisp/progmodes/rust-ts-mode.el index e3fff304ab3..cfad454b396 100644 --- a/lisp/progmodes/rust-ts-mode.el +++ b/lisp/progmodes/rust-ts-mode.el @@ -41,6 +41,11 @@ (require 'c-ts-common) ; For comment indent and filling. (treesit-declare-unavailable-functions) +(add-to-list + 'treesit-language-source-alist + '(rust "https://github.com/tree-sitter/tree-sitter-rust" "v0.23.2") + t) + (defcustom rust-ts-mode-indent-offset 4 "Number of spaces for each indentation step in `rust-ts-mode'." :version "29.1" @@ -545,7 +550,7 @@ See `prettify-symbols-compose-predicate'." :group 'rust :syntax-table rust-ts-mode--syntax-table - (when (treesit-ready-p 'rust) + (when (treesit-ensure-installed 'rust) (setq treesit-primary-parser (treesit-parser-create 'rust)) ;; Syntax. diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el index bd2178167ee..287f0501350 100644 --- a/lisp/progmodes/sh-script.el +++ b/lisp/progmodes/sh-script.el @@ -1630,7 +1630,7 @@ with your script for an edit-interpret-debug cycle." This mode automatically falls back to `sh-mode' if the buffer is not written in Bash or sh." :syntax-table sh-mode-syntax-table - (when (treesit-ready-p 'bash) + (when (treesit-ensure-installed 'bash) (sh-set-shell "bash" nil nil) (add-hook 'flymake-diagnostic-functions #'sh-shellcheck-flymake nil t) (add-hook 'hack-local-variables-hook @@ -3312,6 +3312,11 @@ member of `flymake-diagnostic-functions'." ;;; Tree-sitter font-lock +(add-to-list + 'treesit-language-source-alist + '(bash "https://github.com/tree-sitter/tree-sitter-bash" "v0.23.3") + t) + (defvar sh-mode--treesit-operators '("|" "|&" "||" "&&" ">" ">>" "<" "<<" "<<-" "<<<" "==" "!=" ";&" ";;&") "A list of `sh-mode' operators to fontify.") diff --git a/lisp/progmodes/typescript-ts-mode.el b/lisp/progmodes/typescript-ts-mode.el index 69191a694ed..a2049ba2d64 100644 --- a/lisp/progmodes/typescript-ts-mode.el +++ b/lisp/progmodes/typescript-ts-mode.el @@ -42,6 +42,19 @@ (require 'c-ts-common) ; For comment indent and filling. (treesit-declare-unavailable-functions) +(add-to-list + 'treesit-language-source-alist + '(typescript + "https://github.com/tree-sitter/tree-sitter-typescript" "v0.23.2" + "typescript/src") + t) +(add-to-list + 'treesit-language-source-alist + '(tsx + "https://github.com/tree-sitter/tree-sitter-typescript" "v0.23.2" + "tsx/src") + t) + (defcustom typescript-ts-mode-indent-offset 2 "Number of spaces for each indentation step in `typescript-ts-mode'." :version "29.1" @@ -608,7 +621,7 @@ This mode is intended to be inherited by concrete major modes." :group 'typescript :syntax-table typescript-ts-mode--syntax-table - (when (treesit-ready-p 'typescript) + (when (treesit-ensure-installed 'typescript) (setq treesit-primary-parser (treesit-parser-create 'typescript)) ;; Indent. @@ -646,7 +659,7 @@ at least 3 (which is the default value)." :group 'typescript :syntax-table typescript-ts-mode--syntax-table - (when (treesit-ready-p 'tsx) + (when (treesit-ensure-installed 'tsx) (setq treesit-primary-parser (treesit-parser-create 'tsx)) ;; Comments. diff --git a/lisp/textmodes/css-mode.el b/lisp/textmodes/css-mode.el index cfb8ff51760..e3f295c3412 100644 --- a/lisp/textmodes/css-mode.el +++ b/lisp/textmodes/css-mode.el @@ -1341,6 +1341,11 @@ for determining whether point is within a selector." ;;; Tree-sitter +(add-to-list + 'treesit-language-source-alist + '(css "https://github.com/tree-sitter/tree-sitter-css" "v0.23.1") + t) + (defvar css-ts-mode-map (copy-keymap css-mode-map) "Keymap used in `css-ts-mode'.") @@ -1884,7 +1889,7 @@ can also be used to fill comments. \\{css-mode-map}" :syntax-table css-mode-syntax-table - (when (treesit-ready-p 'css) + (when (treesit-ensure-installed 'css) ;; Borrowed from `css-mode'. (setq-local syntax-propertize-function css-syntax-propertize-function) diff --git a/lisp/textmodes/html-ts-mode.el b/lisp/textmodes/html-ts-mode.el index ff79945b291..15d419b1a37 100644 --- a/lisp/textmodes/html-ts-mode.el +++ b/lisp/textmodes/html-ts-mode.el @@ -43,6 +43,11 @@ (declare-function treesit-node-type "treesit.c") (declare-function treesit-search-subtree "treesit.c") +(add-to-list + 'treesit-language-source-alist + '(html "https://github.com/tree-sitter/tree-sitter-html" "v0.23.2") + t) + (defcustom html-ts-mode-indent-offset 2 "Number of spaces for each indentation step in `html-ts-mode'." :version "29.1" @@ -144,7 +149,7 @@ Return nil if there is no name or if NODE is not a defun node." "Major mode for editing Html, powered by tree-sitter." :group 'html - (unless (treesit-ready-p 'html t) + (unless (treesit-ensure-installed 'html) (error "Tree-sitter for HTML isn't available")) (setq treesit-primary-parser (treesit-parser-create 'html)) diff --git a/lisp/textmodes/markdown-ts-mode.el b/lisp/textmodes/markdown-ts-mode.el index dddeede1e29..9177573203e 100644 --- a/lisp/textmodes/markdown-ts-mode.el +++ b/lisp/textmodes/markdown-ts-mode.el @@ -34,6 +34,19 @@ (declare-function treesit-node-type "treesit.c") (declare-function treesit-parser-create "treesit.c") +(add-to-list + 'treesit-language-source-alist + '(markdown + "https://github.com/tree-sitter-grammars/tree-sitter-markdown" "v0.4.1" + "tree-sitter-markdown/src") + t) +(add-to-list + 'treesit-language-source-alist + '(markdown-inline + "https://github.com/tree-sitter-grammars/tree-sitter-markdown" "v0.4.1" + "tree-sitter-markdown-inline/src") + t) + ;;; Helper functions (defvar markdown-ts--code-block-language-map @@ -304,7 +317,8 @@ the same features enabled in MODE." `(("Headings" markdown-ts-imenu-node-p nil markdown-ts-imenu-name-function))) (setq-local treesit-outline-predicate "section") - (when (treesit-ready-p 'markdown) + (when (and (treesit-ensure-installed 'markdown) + (treesit-ensure-installed 'markdown-inline)) (treesit-parser-create 'markdown-inline) (treesit-parser-create 'markdown) (markdown-ts-setup))) diff --git a/lisp/textmodes/mhtml-ts-mode.el b/lisp/textmodes/mhtml-ts-mode.el index 0c98ec472b2..e38db0779c1 100644 --- a/lisp/textmodes/mhtml-ts-mode.el +++ b/lisp/textmodes/mhtml-ts-mode.el @@ -65,21 +65,24 @@ ;; In a multi-language major mode can be useful to have an "installer" to ;; simplify the installation of the grammars supported by the major-mode. (defvar mhtml-ts-mode--language-source-alist - '((html . ("https://github.com/tree-sitter/tree-sitter-html" "v0.23.2")) - (javascript . ("https://github.com/tree-sitter/tree-sitter-javascript" "v0.23.1")) - (jsdoc . ("https://github.com/tree-sitter/tree-sitter-jsdoc" "v0.23.2")) - (css . ("https://github.com/tree-sitter/tree-sitter-css" "v0.23.1"))) + '((html "https://github.com/tree-sitter/tree-sitter-html" "v0.23.2") + (javascript "https://github.com/tree-sitter/tree-sitter-javascript" "v0.23.1") + (jsdoc "https://github.com/tree-sitter/tree-sitter-jsdoc" "v0.23.2") + (css "https://github.com/tree-sitter/tree-sitter-css" "v0.23.1")) "Treesitter language parsers required by `mhtml-ts-mode'. -You can customize this variable if you want to stick to a specific -commit and/or use different parsers.") +You can customize `treesit-language-source-alist' if you want +to stick to a specific commit and/or use different parsers.") + +(setq treesit-language-source-alist + (append treesit-language-source-alist + mhtml-ts-mode--language-source-alist)) (defun mhtml-ts-mode-install-parsers () "Install all the required treesitter parsers. `mhtml-ts-mode--language-source-alist' defines which parsers to install." (interactive) - (let ((treesit-language-source-alist mhtml-ts-mode--language-source-alist)) - (dolist (item mhtml-ts-mode--language-source-alist) - (treesit-install-language-grammar (car item))))) + (dolist (item mhtml-ts-mode--language-source-alist) + (treesit-install-language-grammar (car item)))) ;;; Custom variables @@ -432,9 +435,9 @@ Calls REPORT-FN directly. Requires tidy." "Major mode for editing HTML with embedded JavaScript and CSS. Powered by tree-sitter." (if (not (and - (treesit-ready-p 'html t) - (treesit-ready-p 'javascript t) - (treesit-ready-p 'css t))) + (treesit-ensure-installed 'html) + (treesit-ensure-installed 'javascript) + (treesit-ensure-installed 'css))) (error "Tree-sitter parsers for HTML isn't available. You can install the parsers with M-x `mhtml-ts-mode-install-parsers'") @@ -487,7 +490,7 @@ Powered by tree-sitter." ;; jsdoc is not mandatory for js-ts-mode, so we respect this by ;; adding jsdoc range rules only when jsdoc is available. - (when (treesit-ready-p 'jsdoc t) + (when (treesit-ensure-installed 'jsdoc) (setq-local treesit-range-settings (append treesit-range-settings (treesit-range-rules diff --git a/lisp/textmodes/toml-ts-mode.el b/lisp/textmodes/toml-ts-mode.el index 3b55fe7706a..b1414852dbb 100644 --- a/lisp/textmodes/toml-ts-mode.el +++ b/lisp/textmodes/toml-ts-mode.el @@ -36,6 +36,11 @@ (declare-function treesit-node-child "treesit.c") (declare-function treesit-node-child-by-field-name "treesit.c") +(add-to-list + 'treesit-language-source-alist + '(toml "https://github.com/tree-sitter-grammars/tree-sitter-toml" "v0.7.0") + t) + (defcustom toml-ts-mode-indent-offset 2 "Number of spaces for each indentation step in `toml-ts-mode'." :version "29.1" @@ -123,7 +128,7 @@ Return nil if there is no name or if NODE is not a defun node." :group 'toml-mode :syntax-table toml-ts-mode--syntax-table - (when (treesit-ready-p 'toml) + (when (treesit-ensure-installed 'toml) (setq treesit-primary-parser (treesit-parser-create 'toml)) ;; Comments diff --git a/lisp/textmodes/yaml-ts-mode.el b/lisp/textmodes/yaml-ts-mode.el index 7d11223aefa..26b7655acba 100644 --- a/lisp/textmodes/yaml-ts-mode.el +++ b/lisp/textmodes/yaml-ts-mode.el @@ -35,6 +35,11 @@ (declare-function treesit-node-type "treesit.c") (declare-function treesit-node-child-by-field-name "treesit.c") +(add-to-list + 'treesit-language-source-alist + '(yaml "https://github.com/tree-sitter-grammars/tree-sitter-yaml" "v0.7.0") + t) + (defvar yaml-ts-mode--syntax-table (let ((table (make-syntax-table))) (modify-syntax-entry ?# "<" table) @@ -162,7 +167,7 @@ Return nil if there is no name or if NODE is not a defun node." :group 'yaml :syntax-table yaml-ts-mode--syntax-table - (when (treesit-ready-p 'yaml) + (when (treesit-ensure-installed 'yaml) (setq treesit-primary-parser (treesit-parser-create 'yaml)) ;; Comments. diff --git a/test/infra/Dockerfile.emba b/test/infra/Dockerfile.emba index 7b70a98ebd9..c4bae4ed731 100644 --- a/test/infra/Dockerfile.emba +++ b/test/infra/Dockerfile.emba @@ -123,6 +123,8 @@ RUN make -j `nproc` bootstrap RUN mkdir -p /root/.emacs.d/tree-sitter RUN git config --global http.sslverify "false" # See https://github.com/emacs-tree-sitter/tree-sitter-langs/tree/master/repos +# The verified versions are generated by 'treesit-admin-verify-major-mode-queries` +# at the comments section in ts-mode files. RUN src/emacs -Q --batch \ --eval \ '(message "ABI min version %d max version %d" \ @@ -130,27 +132,27 @@ RUN src/emacs -Q --batch \ --eval '(setq \ treesit-extra-load-path (list "/root/.emacs.d/tree-sitter") \ treesit-language-source-alist \ - (quote ((bash "https://github.com/tree-sitter/tree-sitter-bash") \ - (c "https://github.com/tree-sitter/tree-sitter-c") \ - (c-sharp "https://github.com/tree-sitter/tree-sitter-c-sharp") \ - (cpp "https://github.com/tree-sitter/tree-sitter-cpp") \ - (css "https://github.com/tree-sitter/tree-sitter-css") \ - (elixir "https://github.com/elixir-lang/tree-sitter-elixir") \ - (go "https://github.com/tree-sitter/tree-sitter-go") \ - (gomod "https://github.com/camdencheek/tree-sitter-go-mod") \ + (quote ((bash "https://github.com/tree-sitter/tree-sitter-bash" "v0.23.3") \ + (c "https://github.com/tree-sitter/tree-sitter-c" "v0.23.4") \ + (c-sharp "https://github.com/tree-sitter/tree-sitter-c-sharp" "v0.23.1") \ + (cpp "https://github.com/tree-sitter/tree-sitter-cpp" "v0.23.4") \ + (css "https://github.com/tree-sitter/tree-sitter-css" "v0.23.1") \ + (elixir "https://github.com/elixir-lang/tree-sitter-elixir" "v0.3.3") \ + (go "https://github.com/tree-sitter/tree-sitter-go" "v0.23.4") \ + (gomod "https://github.com/camdencheek/tree-sitter-go-mod" "v1.1.0") \ (gowork "https://github.com/omertuc/tree-sitter-go-work") \ - (heex "https://github.com/phoenixframework/tree-sitter-heex") \ - (html "https://github.com/tree-sitter/tree-sitter-html") \ - (java "https://github.com/tree-sitter/tree-sitter-java") \ - (javascript "https://github.com/tree-sitter/tree-sitter-javascript") \ - (jsdoc "https://github.com/tree-sitter/tree-sitter-jsdoc") \ - (json "https://github.com/tree-sitter/tree-sitter-json") \ - (lua "https://github.com/tree-sitter-grammars/tree-sitter-lua") \ - (python "https://github.com/tree-sitter/tree-sitter-python") \ - (ruby "https://github.com/tree-sitter/tree-sitter-ruby") \ - (rust "https://github.com/tree-sitter/tree-sitter-rust" "v0.23.3") \ - (tsx "https://github.com/tree-sitter/tree-sitter-typescript" "master" "tsx/src") \ - (typescript "https://github.com/tree-sitter/tree-sitter-typescript" "master" "typescript/src"))))' \ + (heex "https://github.com/phoenixframework/tree-sitter-heex" "v0.7.0") \ + (html "https://github.com/tree-sitter/tree-sitter-html" "v0.23.2") \ + (java "https://github.com/tree-sitter/tree-sitter-java" "v0.23.5") \ + (javascript "https://github.com/tree-sitter/tree-sitter-javascript" "v0.23.1") \ + (jsdoc "https://github.com/tree-sitter/tree-sitter-jsdoc" "v0.23.2") \ + (json "https://github.com/tree-sitter/tree-sitter-json" "v0.24.8") \ + (lua "https://github.com/tree-sitter-grammars/tree-sitter-lua" "v0.3.0") \ + (python "https://github.com/tree-sitter/tree-sitter-python" "v0.23.6") \ + (ruby "https://github.com/tree-sitter/tree-sitter-ruby" "v0.23.1") \ + (rust "https://github.com/tree-sitter/tree-sitter-rust" "v0.23.2") \ + (tsx "https://github.com/tree-sitter/tree-sitter-typescript" "v0.23.2" "tsx/src") \ + (typescript "https://github.com/tree-sitter/tree-sitter-typescript" "v0.23.2" "typescript/src"))))' \ --eval '(dolist (lang (mapcar (quote car) treesit-language-source-alist)) \ (treesit-install-language-grammar lang "/root/.emacs.d/tree-sitter"))' commit c9b6be7d27299093d16d592f1ffe0a731136beb2 Author: Juri Linkov Date: Fri Apr 18 19:17:39 2025 +0300 * lisp/treesit.el (treesit-auto-install): New defcustom. (treesit-ensure-installed): New function. diff --git a/etc/NEWS b/etc/NEWS index 9697d578886..98f8e703013 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -549,6 +549,9 @@ This variable has no effect when Transient Mark mode is off. ** Tree-sitter +*** New user option 'treesit-auto-install'. +It controls the automatic installation of tree-sitter grammars. + *** The file treesit-x.el defines a number of simple tree-sitter modes. Using the new macro 'define-treesit-generic-mode', generic modes are defined including, but not limited to, 'gitattributes-generic-ts-mode'. diff --git a/lisp/treesit.el b/lisp/treesit.el index c67d7bb996e..2b2551c169f 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -5277,6 +5277,29 @@ If anything goes wrong, this function signals an `treesit-error'." (dolist (file (directory-files query-dir t "\\.scm\\'" t)) (copy-file file (expand-file-name (file-name-nondirectory file) dest-dir) t))))) +(defcustom treesit-auto-install 'ask + "Automatic installation of a language grammar. +If `ask', prompt for a confirmation before installing the required +language grammar. If `always', silently install the grammar. +If nil or `never' or anything else, don't install the grammar +even while visiting a file in the mode that requires such grammar." + :type '(choice (const :tag "Never try to install grammar" never) + (const :tag "Always install grammar automatically" always) + (const :tag "Ask whether to install grammar" ask)) + :version "31.1") + +(defun treesit-ensure-installed (lang) + "Ensure that the grammar for the language LANG is installed. +The option `treesit-auto-install' defines whether to install it +automatically, or ask for a confirmation." + (or (treesit-ready-p lang t) + (when (or (eq treesit-auto-install 'always) + (and (eq treesit-auto-install 'ask) + (y-or-n-p (format "Install grammar for `%s'?" lang)))) + (treesit-install-language-grammar lang) + ;; Check that the grammar was installed successfully + (treesit-ready-p lang)))) + ;;; Shortdocs (defun treesit--generate-shortdoc-examples () commit 7d886f214e165d84d3fdbe14b3766d9e88056529 Author: Robert Pluim Date: Thu Apr 17 16:08:53 2025 +0200 Match mail headers case-insensitively when encoding * lisp/mail/rfc2047.el (rfc2047-encode-message-header): Bind 'case-fold-search' to t when looking up the encoding method, otherwise a header spelled "CC" is encoded using the wrong method. (Bug#77866) diff --git a/lisp/mail/rfc2047.el b/lisp/mail/rfc2047.el index 66760a6595b..db6c0423a54 100644 --- a/lisp/mail/rfc2047.el +++ b/lisp/mail/rfc2047.el @@ -265,7 +265,8 @@ Should be called narrowed to the head of the message." (if (= (length charsets) 1) (cons (mm-charset-to-coding-system (car charsets)) mm-coding-system-priorities) - mm-coding-system-priorities))) + mm-coding-system-priorities)) + (case-fold-search t)) (while (setq elem (pop alist)) (when (or (and (stringp (car elem)) (looking-at (car elem))) commit f5e6f284e9f970cdbdfb25c8ae8308165f3ce5c5 Author: Stefan Monnier Date: Fri Apr 18 09:35:14 2025 -0400 (tab-bar-tests-quit-restore-window): Try and clarify the skip * test/lisp/tab-bar-tests.el (tab-bar-tests-quit-restore-window): Rewrite the `skip-unless` based on the code's history because I found the current code quite confusing. diff --git a/test/lisp/tab-bar-tests.el b/test/lisp/tab-bar-tests.el index 06a52ed42b1..257f6bd37d3 100644 --- a/test/lisp/tab-bar-tests.el +++ b/test/lisp/tab-bar-tests.el @@ -52,13 +52,16 @@ (tab-bar-tabs-set nil)) (ert-deftest tab-bar-tests-quit-restore-window () - ;; Emba runs the container without "--tty" - ;; (the environment variable "TERM" is nil), and this - ;; test fails with '(error "Could not open file: /dev/tty")'. - ;; Therefore skip it unless it can use '(tty-type . "linux")'. - (skip-unless (or (and (eq system-type 'gnu/linux) (getenv "TERM")) - (and (not noninteractive) - (eq system-type 'windows-nt)))) + (skip-when (pcase system-type + ;; Skip test on MS-Windows in batch mode, since terminal + ;; frames cannot be created in that case. + ('windows-nt noninteractive) + ;; Emba runs the container without "--tty" + ;; (the environment variable "TERM" is nil), and this + ;; test fails with '(error "Could not open file: /dev/tty")'. + ;; Therefore skip it unless it can use '(tty-type . "linux")'. + ('gnu/linux (null (getenv "TERM"))))) + (let* ((frame-params (when noninteractive '((window-system . nil) (tty-type . "linux")))) commit 4dcd66abd570e09093e37c3d0e150fd76a15c95c Author: kobarity Date: Thu Mar 20 19:03:33 2025 +0900 Disable echo back instead of setting tty to raw in Inferior Python * lisp/progmodes/python.el (python-shell-setup-code): Change the Python setup code. (Bug#76943) (cherry picked from commit 4c5c20ddc2cdde570ccf54c4aa60644828ee213d) diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index f966190ea6d..e593ea93ff4 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -3528,11 +3528,13 @@ eventually provide a shell." (defconst python-shell-setup-code "\ try: - import tty + import termios except ImportError: pass else: - tty.setraw(0)" + attr = termios.tcgetattr(0) + attr[3] &= ~termios.ECHO + termios.tcsetattr(0, termios.TCSADRAIN, attr)" "Code used to setup the inferior Python processes.") (defconst python-shell-eval-setup-code commit 01d4eb3dd427feb3439378eab573d685daf47bb7 Author: Eli Zaretskii Date: Fri Apr 18 14:10:19 2025 +0300 ; Improve doc string of 'insert-char' * src/editfns.c (Finsert_char): Doc fix. Suggested by Lactose ‎ (bug#77889). diff --git a/src/editfns.c b/src/editfns.c index ecc16a62f76..a3f220671a8 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -1440,8 +1440,9 @@ DEFUN ("insert-char", Finsert_char, Sinsert_char, 1, 3, (prefix-numeric-value current-prefix-arg)\ t))", doc: /* Insert COUNT copies of CHARACTER. + Interactively, prompt for CHARACTER using `read-char-by-name'. -You can specify CHARACTER in one of these ways: +You can specify CHARACTER at the prompt in one of these ways: - As its Unicode character name, e.g. \"LATIN SMALL LETTER A\". Completion is available; if you type a substring of the name @@ -1455,14 +1456,18 @@ You can specify CHARACTER in one of these ways: - As a code point with a radix specified with #, e.g. #o21430 (octal), #x2318 (hex), or #10r8984 (decimal). -If called interactively, COUNT is given by the prefix argument. If -omitted or nil, it defaults to 1. +When called from Lisp, CHARACTER should be an integer whose value +is valid for a character; see `characterp'. To specify a character by +its Unicode name in calls from Lisp, use `char-from-name'. + +When called interactively, COUNT is the prefix argument. If omitted or +nil, it defaults to 1. Inserting the character(s) relocates point and before-insertion markers in the same ways as the function `insert'. The optional third argument INHERIT, if non-nil, says to inherit text -properties from adjoining text, if those properties are sticky. If +properties from adjoining text, if those properties are sticky. When called interactively, INHERIT is t. */) (Lisp_Object character, Lisp_Object count, Lisp_Object inherit) { commit 9f0c43a3d1b38c93bf21bf25db0f5dd489338d7c Author: Sean Whitton Date: Fri Apr 18 18:27:11 2025 +0800 ; * etc/NEWS: Copyediting. diff --git a/etc/NEWS b/etc/NEWS index d57c118d9e7..9697d578886 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -219,8 +219,8 @@ popup interface, such as the interfaces that the GNU ELPA packages Corfu and Company provide, you can set this option to the same sort function that your popup interface uses for a more integrated experience. -Note: 'completion-preview-sort-function' was present also in Emacs 30.1, -albeit as a variable, not a user option. +('completion-preview-sort-function' was already present in Emacs 30.1, +but as a plain Lisp variable, not a user option.) ** Windows @@ -315,8 +315,9 @@ helps to restore window buffers across Emacs sessions. +++ *** New function 'frame-deletable-p'. -Calling this function before 'delete-frame' is useful to avoid that the -latter throws an error when the argument FRAME cannot be deleted. +Calling this function before 'delete-frame' is useful to avoid how the +latter function signals an error when its FRAME argument cannot be +deleted. +++ *** New value 'force' for user option 'frame-inhibit-implied-resize'. commit 20b919cfb1b5861a91a57b5f0c27e6c6fc03aff5 Author: Sean Whitton Date: Fri Apr 18 18:25:16 2025 +0800 Bind new window layout commands under C-x w * lisp/window.el (rotate-windows-repeat-map) (window-layout-rotate-repeat-map, window-layout-flip-repeat-map): New keymaps. (window-prefix-map): Bind new window layout commands. * etc/NEWS: Rewrite entry for the new commands. diff --git a/etc/NEWS b/etc/NEWS index 0918553c733..d57c118d9e7 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -225,11 +225,13 @@ albeit as a variable, not a user option. ** Windows +++ -*** New functions to modify window layout. -Several functions to modify the window layout have been added: -'window-layout-rotate-clockwise', 'window-layout-rotate-anticlockwise', -'window-layout-flip-topdown', 'window-layout-flip-leftright', -'window-layout-transpose', 'rotate-windows', and 'rotate-windows-back'. +*** New commands to modify window layouts. +'C-x w t' and 'C-x w r /' rotate the window layout. +'C-x w o /' rotate the windows within the current layout. +'C-x w f ///' flip window layouts. + +By default these commands operate on the selected frame's root window. +With a prefix argument, they operate on the selected window's parent. +++ *** Windmove commands now move to skipped windows if invoked twice in a row. diff --git a/lisp/window.el b/lisp/window.el index cdd6b932502..e0e626e9500 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -11381,6 +11381,29 @@ Used in `repeat-mode'." ;; Additional keys: "v" #'shrink-window) +(defvar-keymap rotate-windows-repeat-map + :doc "Keymap to repeat window-rotating commands. +Used in `repeat-mode'." + :repeat t + "" #'rotate-windows-back + "" #'rotate-windows) + +(defvar-keymap window-layout-rotate-repeat-map + :doc "Keymap to repeat window layout-rotating commands. +Used in `repeat-mode'." + :repeat t + "" #'window-layout-rotate-anticlockwise + "" #'window-layout-rotate-clockwise) + +(defvar-keymap window-layout-flip-repeat-map + :doc "Keymap to repeat window-flipping commands. +Used in `repeat-mode'." + :repeat t + "" #'window-layout-flip-leftright + "" #'window-layout-flip-leftright + "" #'window-layout-flip-topdown + "" #'window-layout-flip-topdown) + (defvar-keymap window-prefix-map :doc "Keymap for subcommands of \\`C-x w'." "2" #'split-root-window-below @@ -11391,7 +11414,17 @@ Used in `repeat-mode'." "^ t" #'tab-window-detach "-" #'fit-window-to-buffer "0" #'delete-windows-on - "q" #'quit-window) + "q" #'quit-window + + "o " #'rotate-windows-back + "o " #'rotate-windows + "t" #'window-layout-transpose + "r " #'window-layout-rotate-anticlockwise + "r " #'window-layout-rotate-clockwise + "f " #'window-layout-flip-leftright + "f " #'window-layout-flip-leftright + "f " #'window-layout-flip-topdown + "f " #'window-layout-flip-topdown) (define-key ctl-x-map "w" window-prefix-map) (provide 'window) commit 93ad8407ed82c27835cf27b15ee2637a2ebba482 Author: Michael Albinus Date: Fri Apr 18 09:31:54 2025 +0200 * admin/notes/emba: Fix docker build instruction. diff --git a/admin/notes/emba b/admin/notes/emba index 2d0aaa6e8f0..cf4184ccc92 100644 --- a/admin/notes/emba +++ b/admin/notes/emba @@ -91,7 +91,7 @@ emba.gnu.org:5050, is not accessible publicly. Instead, the container images must be build locally. Change the current directory to a recent Emacs branch (not a worktree), and apply the command - docker build --target emacs-inotify --tag emacs-inotify \ + docker buildx build --target emacs-inotify --tag emacs-inotify \ -f test/infra/Dockerfile.emba . This creates the Debian-based image emacs-inotify, based on the commit a731dd63fb259758fb52630f4f499357cbc727c0 Author: Juri Linkov Date: Fri Apr 18 09:42:31 2025 +0300 ; * test/lisp/tab-bar-tests.el (tab-bar-tests-quit-restore-window): Comment. diff --git a/test/lisp/tab-bar-tests.el b/test/lisp/tab-bar-tests.el index dc8bb2ecc68..06a52ed42b1 100644 --- a/test/lisp/tab-bar-tests.el +++ b/test/lisp/tab-bar-tests.el @@ -52,6 +52,10 @@ (tab-bar-tabs-set nil)) (ert-deftest tab-bar-tests-quit-restore-window () + ;; Emba runs the container without "--tty" + ;; (the environment variable "TERM" is nil), and this + ;; test fails with '(error "Could not open file: /dev/tty")'. + ;; Therefore skip it unless it can use '(tty-type . "linux")'. (skip-unless (or (and (eq system-type 'gnu/linux) (getenv "TERM")) (and (not noninteractive) (eq system-type 'windows-nt)))) commit b901290ae7f2e45a80a1d24a1b8d65f94e58b3ca Author: Sean Whitton Date: Fri Apr 18 14:31:50 2025 +0800 * doc/lispref/text.texi (Margins): Grammar fix. Author: diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi index f3cf0294c81..8329a67d6c2 100644 --- a/doc/lispref/text.texi +++ b/doc/lispref/text.texi @@ -1931,7 +1931,7 @@ they default to the whole buffer. This function adjusts the indentation at the beginning of the current line to the value specified by the variable @code{left-margin}. (That may involve either inserting or deleting whitespace.) This function -is value of @code{indent-line-function} in Paragraph-Indent Text mode. +is the value of @code{indent-line-function} in Paragraph-Indent Text mode. @end defun @defopt left-margin commit 2f67352d7ae708f8a3b6c4883eb4854e5e382d59 Author: Eshel Yaron Date: Thu Apr 17 21:31:07 2025 +0200 ; Fix warnings in 'auth-source-search' (bug#77612) * lisp/auth-source.el (auth-source-search): When calling 'slot-value', specify slots by name, not by ':initarg'. diff --git a/lisp/auth-source.el b/lisp/auth-source.el index 1d039d8b0d1..946debca95e 100644 --- a/lisp/auth-source.el +++ b/lisp/auth-source.el @@ -708,7 +708,11 @@ must call it to obtain the actual value." (condition-case nil (unless (auth-source-search-collection (plist-get spec key) - (slot-value backend key)) + (slot-value + backend + (if (keywordp key) + (intern-soft (substring (symbol-name key) 1)) + key))) (setq filtered-backends (delq backend filtered-backends)) (cl-return)) (invalid-slot-name nil)))) commit 58ff10138060df71fd3158159382c5dd93440a3e Author: Eli Zaretskii Date: Fri Apr 18 08:11:47 2025 +0300 ; Allow a tab-bar test on MS-Windows * test/lisp/tab-bar-tests.el (tab-bar-tests-quit-restore-window): Allow this test on MS-Windows in interactive sessions. diff --git a/test/lisp/tab-bar-tests.el b/test/lisp/tab-bar-tests.el index 33ec580b450..dc8bb2ecc68 100644 --- a/test/lisp/tab-bar-tests.el +++ b/test/lisp/tab-bar-tests.el @@ -52,7 +52,9 @@ (tab-bar-tabs-set nil)) (ert-deftest tab-bar-tests-quit-restore-window () - (skip-unless (and (eq system-type 'gnu/linux) (getenv "TERM"))) + (skip-unless (or (and (eq system-type 'gnu/linux) (getenv "TERM")) + (and (not noninteractive) + (eq system-type 'windows-nt)))) (let* ((frame-params (when noninteractive '((window-system . nil) (tty-type . "linux")))) commit 16855c89dde64faeb10060be61b74876aacc76da Merge: 275712a18c7 8792d3431b1 Author: Eli Zaretskii Date: Fri Apr 18 08:03:48 2025 +0300 Merge branch 'emacs-30' of git.savannah.gnu.org:/srv/git/emacs into emacs-30 commit f728aa72c047ff8485bce08a6effb1c7790bce9f Author: Yuan Fu Date: Thu Apr 17 16:56:07 2025 -0700 Add guard in treesit-language-at-point-default (bug#77870) * lisp/treesit.el (treesit-language-at-point-default): Return nil if there's no parser in the buffer. (treesit-parsers-at): Add docstring for parser order. diff --git a/lisp/treesit.el b/lisp/treesit.el index 59718fd3d3d..c67d7bb996e 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -190,9 +190,14 @@ the return value of that function instead." (defun treesit-language-at-point-default (position) "Default function for `treesit-language-at-point-function'. -Return the deepest parser by embed level." - (treesit-parser-language - (car (treesit-parsers-at position)))) + +Returns the language at POSITION, or nil if there's no parser in the +buffer. When there are multiple parsers that cover POSITION, use the +parser with the deepest embed level as it's the \"most relevant\" parser +at POSITION." + (let ((parser (car (treesit-parsers-at position)))) + (when parser + (treesit-parser-language parser)))) ;;; Node API supplement @@ -855,7 +860,10 @@ by an overlay with non-nil `treesit-parser-local-p' property. If ONLY contains the symbol `global', include non-local parsers excluding the primary parser. -If ONLY contains the symbol `primary', include the primary parser." +If ONLY contains the symbol `primary', include the primary parser. + +The returned parsers are sorted in descending order of embed level. +That is, the deepest embedded parser comes first." (let ((res nil)) ;; Refer to (ref:local-parser-overlay) for more explanation of local ;; parser overlays. commit 4f80a116f53c2d8dc58301630f6dc7de6e0e346e Author: Yuan Fu Date: Thu Apr 17 16:42:07 2025 -0700 Add missing OFFSET arg to treesit--update-ranges-local (bug#77848) * lisp/treesit.el (treesit--update-ranges-local): (treesit--update-range-1): Add missing OFFSET arg. diff --git a/lisp/treesit.el b/lisp/treesit.el index a22af750fd1..59718fd3d3d 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -1053,7 +1053,7 @@ Return updated parsers as a list." (defun treesit--update-ranges-local ( host-parser query embedded-lang modified-tick embed-level - &optional beg end range-fn) + &optional beg end offset range-fn) "Update range for local parsers between BEG and END under HOST-PARSER. Use QUERY to get the ranges, and make sure each range has a local parser for EMBEDDED-LANG. HOST-PARSER and QUERY must match. @@ -1083,10 +1083,10 @@ Return the created local parsers as a list." (let ((ranges-by-lang (if (functionp embedded-lang) (treesit-query-range-by-language - host-parser query embedded-lang beg end range-fn) + host-parser query embedded-lang beg end offset range-fn) (list (cons embedded-lang (treesit-query-range - host-parser query beg end range-fn))))) + host-parser query beg end offset range-fn))))) (touched-parsers nil)) (dolist (lang-and-range ranges-by-lang) (let ((embedded-lang (car lang-and-range)) @@ -1164,7 +1164,7 @@ Function range settings in SETTINGS are ignored." (append touched-parsers (treesit--update-ranges-local host-parser query embed-lang modified-tick - embed-level beg end range-fn)))) + embed-level beg end offset range-fn)))) ;; When updating ranges, we want to avoid querying the whole ;; buffer which could be slow in very large buffers. ;; Instead, we only query for nodes that intersect with the commit b75c18f3c6c8d347d4f1a9cce746e673d91997a9 Author: Yuan Fu Date: Thu Apr 17 16:17:12 2025 -0700 Make sure prog-fill-reindent-defun work for strings too My previous commit foolishly excluded strings from the condition, now add them back. * lisp/progmodes/prog-mode.el (prog-fill-reindent-defun): Include strings. diff --git a/lisp/progmodes/prog-mode.el b/lisp/progmodes/prog-mode.el index 4e9e228fa9c..62d22cb78c0 100644 --- a/lisp/progmodes/prog-mode.el +++ b/lisp/progmodes/prog-mode.el @@ -154,7 +154,7 @@ or follows point." ;; FIXME: For some reason, the comment-start syntax regexp doesn't ;; work for me. But I kept it around to be safe, and in the hope ;; that if can cover cases where comment-start-skip is unset. - (if (or (nth 4 (syntax-ppss)) + (if (or (nth 8 (syntax-ppss)) ;; If point is at the beginning of a comment delimiter, ;; syntax-ppss doesn't consider point as being inside a ;; comment. @@ -168,11 +168,11 @@ or follows point." ;; reached EOL or (nth 4 (syntax-ppss)) returns ;; non-nil. (re-search-forward comment-start-skip (pos-eol) t) - (nth 4 (syntax-ppss)))) + (nth 8 (syntax-ppss)))) (save-excursion (beginning-of-line) (and (re-search-forward "\\s-*\\s<" (line-end-position) t) - (nth 4 (syntax-ppss))))) + (nth 8 (syntax-ppss))))) (fill-paragraph argument (region-active-p)) (beginning-of-defun) (let ((start (point))) commit 6702a448c1c2500abb4f393da29edc31acd5e058 Author: Stefan Kangas Date: Fri Apr 18 00:42:52 2025 +0200 pgtk: Make x-display-grayscale-p return Qt We already unconditionally claim that `xw-display-color-p`, which, according to the docstring of this function, implies that we handle grayscale too. * src/pgtkfns.c (Fx_display_grayscale_p): Return Qt unconditionally. diff --git a/src/pgtkfns.c b/src/pgtkfns.c index ae97c1093d3..4f5cbd45492 100644 --- a/src/pgtkfns.c +++ b/src/pgtkfns.c @@ -2291,7 +2291,7 @@ DEFUN ("x-display-grayscale-p", Fx_display_grayscale_p, Sx_display_grayscale_p, doc: /* SKIP: real doc in xfns.c. */) (Lisp_Object terminal) { - return Qnil; + return Qt; } DEFUN ("x-display-pixel-width", Fx_display_pixel_width, Sx_display_pixel_width, 0, 1, 0, commit b05da1c3fc611417ace0af3860a93fb878f72f4d Author: Stefan Kangas Date: Thu Apr 17 23:51:26 2025 +0200 * src/pgtkfns.c (Fx_gtk_launch_uri): Improve docstring. diff --git a/src/pgtkfns.c b/src/pgtkfns.c index e979b84d2e6..ae97c1093d3 100644 --- a/src/pgtkfns.c +++ b/src/pgtkfns.c @@ -3705,7 +3705,9 @@ unwind_gerror_ptr (void* data) } DEFUN ("x-gtk-launch-uri", Fx_gtk_launch_uri, Sx_gtk_launch_uri, 2, 2, 0, - doc: /* launch URI */) + doc: /* Tell GTK to launch the default application to show given URI. + +This function is only available on PGTK. */) (Lisp_Object frame, Lisp_Object uri) { CHECK_FRAME (frame); commit 9f4347e00c02c3aa436118425a0cda2bc7f69d51 Author: Juri Linkov Date: Thu Apr 17 21:21:29 2025 +0300 Don't switch to another frame if window is not on the selected frame. * lisp/window.el (window--quit-restore-select-window): Add optional arg 'frame'. Don't switch to another frame if window is not on the selected frame (bug#71386). (quit-restore-window): Provide the 'frame' arg to 'window--quit-restore-select-window' calls. Patch by martin rudalics . * test/lisp/tab-bar-tests.el (tab-bar-tests-quit-restore-window): No need to reselect the frame after 'quit-window'. diff --git a/lisp/window.el b/lisp/window.el index d1d869a83b8..cdd6b932502 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -5335,13 +5335,19 @@ the window has never shown before." :version "31.1" :group 'windows) -(defun window--quit-restore-select-window (window) +(defun window--quit-restore-select-window (window &optional frame) "Select WINDOW after having quit another one. Do not select an inactive minibuffer window." (when (and (window-live-p window) (or (not (window-minibuffer-p window)) (minibuffer-window-active-p window))) - (select-window window))) + ;; If WINDOW is not on the selected frame, don't switch to + ;; another frame. + (unless (and (eq frame (selected-frame)) + (not (eq frame (window-frame window)))) + (setq frame (window-frame window)) + (set-frame-selected-window frame window) + (select-frame-set-input-focus frame)))) (defun quit-restore-window (&optional window bury-or-kill) "Quit WINDOW and deal with its buffer. @@ -5400,6 +5406,7 @@ elsewhere. This value is used by `quit-windows-on'." (unless (eq (car buf) buffer) (throw 'prev-buffer (car buf)))))) (dedicated (window-dedicated-p window)) + (frame (window-frame window)) quad entry reset-prev) (cond ;; First try to delete dedicated windows that are not side windows. @@ -5407,7 +5414,7 @@ elsewhere. This value is used by `quit-windows-on'." (window--delete window 'dedicated (memq bury-or-kill '(kill killing)))) ;; If the previously selected window is still alive, select it. - (window--quit-restore-select-window quit-restore-2)) + (window--quit-restore-select-window quit-restore-2 frame)) ((and (not prev-buffer) (or (memq (nth 1 quit-restore) '(frame tab)) (and (eq (nth 1 quit-restore) 'window) @@ -5419,7 +5426,7 @@ elsewhere. This value is used by `quit-windows-on'." ;; Delete WINDOW if possible. (window--delete window nil (eq bury-or-kill 'kill))) ;; If the previously selected window is still alive, select it. - (window--quit-restore-select-window quit-restore-2)) + (window--quit-restore-select-window quit-restore-2 frame)) ((and (or (and quit-restore-window-no-switch (not prev-buffer)) ;; Ignore first of the previous buffers if ;; 'quit-restore-window-no-switch' says so. @@ -5429,7 +5436,7 @@ elsewhere. This value is used by `quit-windows-on'." (window--delete window nil (memq bury-or-kill '(kill killing)))) ;; If the previously selected window is still alive, select it. - (window--quit-restore-select-window quit-restore-2)) + (window--quit-restore-select-window quit-restore-2 frame)) ((or (and (listp (setq quad (nth 1 quit-restore-prev))) (buffer-live-p (car quad)) (eq (nth 3 quit-restore-prev) buffer) diff --git a/test/lisp/tab-bar-tests.el b/test/lisp/tab-bar-tests.el index 3f9ee3aa4b7..33ec580b450 100644 --- a/test/lisp/tab-bar-tests.el +++ b/test/lisp/tab-bar-tests.el @@ -89,9 +89,6 @@ (should (eq (length (window-list)) 2)) (should (equal (buffer-name) "*info*")) (quit-window) - ;; 'quit-window' unexpectedly selects the original frame, - ;; so move back to the created frame - (select-frame (car (frame-list))) (should (eq (length (window-list)) 1)) (should (eq (length (frame-list)) 2)) (should (equal (buffer-name) "*Messages*")) @@ -99,7 +96,7 @@ (should (eq (length (frame-list)) 2)) ;; Delete the created frame afterwards because with tty frames ;; the output of 'message' is bound to the original frame - (delete-frame)) + (delete-frame (car (frame-list)))) ;; 2.1. 'quit-restore-window' should close the tab ;; from initial window (bug#59862) commit 054a181d2d0890b7c299c0279d0c16e25130ef7e Author: Juri Linkov Date: Thu Apr 17 21:04:02 2025 +0300 Adapt tab-bar-tests-quit-restore-window for emba. * test/lisp/tab-bar-tests.el (tab-bar-tests-quit-restore-window): Skip unless system-type is 'gnu/linux' and "TERM" is non-nil that is nil on emba. diff --git a/test/lisp/tab-bar-tests.el b/test/lisp/tab-bar-tests.el index 81555dad171..3f9ee3aa4b7 100644 --- a/test/lisp/tab-bar-tests.el +++ b/test/lisp/tab-bar-tests.el @@ -52,7 +52,7 @@ (tab-bar-tabs-set nil)) (ert-deftest tab-bar-tests-quit-restore-window () - (skip-when (and noninteractive (eq system-type 'windows-nt))) + (skip-unless (and (eq system-type 'gnu/linux) (getenv "TERM"))) (let* ((frame-params (when noninteractive '((window-system . nil) (tty-type . "linux")))) commit 2808bef2522481b3b3e6a7f2739ae8dbd02c13f5 Author: Juri Linkov Date: Thu Apr 17 20:21:16 2025 +0300 * lisp/treesit.el (treesit-parsers-at): Fix for 'with-host' arg. Don't add the primary parser or the first of treesit-parser-list when non-nil 'with-host' is provided since there is no host for the primary parser (bug#76788). diff --git a/lisp/treesit.el b/lisp/treesit.el index 8be6276decb..a22af750fd1 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -873,10 +873,10 @@ If ONLY contains the symbol `primary', include the primary parser." (and (memq 'global only) (not (overlay-get ov 'treesit-parser-local-p)))))) (push (if with-host (cons parser host-parser) parser) res))) - (when (and treesit-primary-parser (or (null only) (memq 'primary only))) - (push treesit-primary-parser res)) - (unless res - (push (car (treesit-parser-list)) res)) + (when (and (not with-host) (or (null only) (memq 'primary only))) + (push (or treesit-primary-parser + (car (treesit-parser-list))) + res)) (seq-sort-by (lambda (p) (treesit-parser-embed-level (or (car-safe p) p))) commit 4c5c20ddc2cdde570ccf54c4aa60644828ee213d Author: kobarity Date: Thu Mar 20 19:03:33 2025 +0900 Disable echo back instead of setting tty to raw in Inferior Python * lisp/progmodes/python.el (python-shell-setup-code): Change the Python setup code. (Bug#76943) diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 6fbabe99cb0..32035773fde 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -3564,11 +3564,13 @@ eventually provide a shell." (defconst python-shell-setup-code "\ try: - import tty + import termios except ImportError: pass else: - tty.setraw(0)" + attr = termios.tcgetattr(0) + attr[3] &= ~termios.ECHO + termios.tcsetattr(0, termios.TCSADRAIN, attr)" "Code used to setup the inferior Python processes.") (defconst python-shell-eval-setup-code commit 1e4ce136036e1ff43fcc436114e66ce48f33ea01 Author: Protesilaos Stavrou Date: Thu Apr 17 10:33:43 2025 +0300 Update modus-themes to their 4.7.0 version * doc/misc/modus-themes.org: Update the manual to document how 'modus-themes-list-colors' has changed. Make other minor changes. * etc/themes/modus-operandi-deuteranopia-theme.el: * etc/themes/modus-operandi-theme.el: * etc/themes/modus-operandi-tinted-theme.el: * etc/themes/modus-operandi-tritanopia-theme.el: * etc/themes/modus-vivendi-deuteranopia-theme.el: * etc/themes/modus-vivendi-theme.el: * etc/themes/modus-vivendi-tinted-theme.el: * etc/themes/modus-vivendi-tritanopia-theme.el: Make stylistic refinements. * etc/themes/modus-themes.el: Make refinements to supported faces, add support for more faces, and the like. Release notes: . diff --git a/doc/misc/modus-themes.org b/doc/misc/modus-themes.org index 4c8a1c82749..8b5940f83a4 100644 --- a/doc/misc/modus-themes.org +++ b/doc/misc/modus-themes.org @@ -4,9 +4,9 @@ #+language: en #+options: ':t toc:nil author:t email:t num:t #+startup: content -#+macro: stable-version 4.6.0 -#+macro: release-date 2024-10-27 -#+macro: development-version 4.7.0-dev +#+macro: stable-version 4.7.0 +#+macro: release-date 2025-04-17 +#+macro: development-version 4.8.0-dev #+macro: file @@texinfo:@file{@@$1@@texinfo:}@@ #+macro: space @@texinfo:@: @@ #+macro: kbd @@texinfo:@kbd{@@$1@@texinfo:}@@ @@ -88,7 +88,7 @@ The Modus themes consist of eight themes, divided into four subgroups. are variants of the two main themes. They slightly tone down the intensity of the background and provide a bit more color variety. ~modus-operandi-tinted~ has a set of base tones that are shades of - light ocher (earthly colors), while ~modus-vivendi-tinted~ gives a + light ochre (earthly colors), while ~modus-vivendi-tinted~ gives a night sky impression. - Deuteranopia themes :: ~modus-operandi-deuteranopia~ and its @@ -1309,37 +1309,32 @@ Examples demonstrating how to use the aforementioned: #+findex: modus-themes-list-colors The command ~modus-themes-list-colors~ uses minibuffer completion to select an item from the Modus themes and then produces a buffer with -previews of its color palette entries. The buffer has a naming scheme -that reflects the given choice, like =modus-operandi-list-colors= for -the ~modus-operandi~ theme. +previews of all of its color palette entries. #+findex: modus-themes-list-colors-current The command ~modus-themes-list-colors-current~ skips the minibuffer -selection process and just produces a preview for the current Modus -theme. +selection process to produce a preview for the current Modus theme. When called with a prefix argument (=C-u= with the default key bindings), these commands will show a preview of the palette's -semantic color mappings instead of the named colors. In this context, -"named colors" are entries that associate a symbol to a string color -value, such as =(blue-warmer "#354fcf")=. Whereas "semantic color -mappings" associate a named color to a symbol, like =(string -blue-warmer)=, thus making the theme render all string constructs in -the =blue-warmer= color value ([[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette overrides]]). +semantic color mappings instead of the full palette ([[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette overrides]]). #+findex: modus-themes-preview-colors #+findex: modus-themes-preview-colors-current -Aliases for those commands are ~modus-themes-preview-colors~ and +Aliases for these commands are ~modus-themes-preview-colors~ and ~modus-themes-preview-colors-current~. -Each row shows a foreground and background coloration using the -underlying value it references. For example a line with =#a60000= (a -shade of red) will show red text followed by a stripe with that same -color as a backdrop. +Each row includes a foreground and background rendition of the given +color value. For example a line with =#a60000= (a shade of red) will +show a column with a red background combined with a suitable +foreground followed by another column with a red foreground against +the current theme's background. The intent is to illustrate which +values are suitable as a background or foreground. The name of the buffer describes the given Modus theme and what the -contents are, such as =*modus-operandi-list-colors*= for named colors -and ==*modus-operandi-list-mappings*= for the semantic color mappings. +contents are, such as =*modus-operandi-list-all*= for the entirety of +the palette (named colors as well as semantic color mappings) and +==*modus-operandi-list-mappings*= for the mappings only. * Use colors from the Modus themes palette :PROPERTIES: @@ -1361,7 +1356,7 @@ value in some other application. :END: #+findex: modus-themes-get-color-value -The function ~modus-themes-get-color-value~ can be called from Lisp to +The fuction ~modus-themes-get-color-value~ can be called from Lisp to return the value of a color from the active Modus theme palette. It takea a =COLOR= argument and an optional =OVERRIDES=. It also accepts a third =THEME= argument, to get the color from the given theme. @@ -2367,7 +2362,7 @@ until version 4.3.0. ;; was the default in versions of the Modus themes before 4.4.0 (setq modus-themes-common-palette-overrides '((bg-prose-block-contents unspecified) - (bg-prose-block-delimiter unspecified) + (bg-prose-block-delimiter unspeficied) (fg-prose-block-delimiter fg-dim))) #+end_src @@ -2941,7 +2936,7 @@ Reload the theme for changes to take effect. :CUSTOM_ID: h:a5140c9c-18b2-45db-8021-38d0b5074116 :END: -By default, the background of the ~region~ face extends from the +By the default, the background of the ~region~ face extends from the end of the line to the edge of the window. To limit it to the end of the line, we need to override the face's =:extend= attribute. Adding this to the Emacs configuration file will suffice: @@ -3365,7 +3360,7 @@ specification of that variable looks like this: With the exception of ~org-verbatim~ and ~org-code~ faces, everything else uses the corresponding type of emphasis: a bold typographic weight, or -italicized, underlined, and struck through text. +italicised, underlined, and struck through text. The best way for users to add some extra attributes, such as a foreground color, is to define their own faces and assign them to the @@ -3985,13 +3980,13 @@ styles to use. The following is but a basic attempt to get started. (modus-themes-with-colors (custom-set-faces ;; FIXME: What is a "region cursor" and should it differ from the position highlights below? - `(meow-region-cursor-1 ((,c :inherit (bold modus-themes-reset-soft) :background ,bg-char-0))) - `(meow-region-cursor-2 ((,c :inherit (bold modus-themes-reset-soft) :background ,bg-char-1))) - `(meow-region-cursor-3 ((,c :inherit (bold modus-themes-reset-soft) :background ,bg-char-2))) + `(meow-region-cursor-1 ((,c :inherit (bold modus-themes-search-current modus-themes-reset-soft)))) + `(meow-region-cursor-2 ((,c :inherit (bold modus-themes-search-current modus-themes-reset-soft)))) + `(meow-region-cursor-3 ((,c :inherit (bold modus-themes-search-current modus-themes-reset-soft)))) - `(meow-position-highlight-number-1 ((,c :inherit (bold modus-themes-reset-soft) :background ,bg-char-0))) - `(meow-position-highlight-number-2 ((,c :inherit (bold modus-themes-reset-soft) :background ,bg-char-1))) - `(meow-position-highlight-number-3 ((,c :inherit (bold modus-themes-reset-soft) :background ,bg-char-2)))))) + `(meow-position-highlight-number-1 ((,c :inherit (bold modus-themes-search-current modus-themes-reset-soft)))) + `(meow-position-highlight-number-2 ((,c :inherit (bold modus-themes-search-current modus-themes-reset-soft)))) + `(meow-position-highlight-number-3 ((,c :inherit (bold modus-themes-search-current modus-themes-reset-soft))))))) (add-hook 'enable-theme-functions #'my-modus-themes-custom-faces) #+end_src @@ -4049,45 +4044,6 @@ the theme level. Users can try this instead: [[#h:d87673fe-2ce1-4c80-a4b8-be36ca9f2d24][Using a hook at the post-load-theme phase]]. -** DIY Add support for howm -:PROPERTIES: -:CUSTOM_ID: h:7ea8fa66-1cd8-47b0-92b4-9998a3068f85 -:END: - -The ~howm~ package is a note-taking solution for Emacs. Users can add -support for its faces with something like the following. - -#+begin_src emacs-lisp -(defun my-modus-themes-custom-faces (&rest _) - (modus-themes-with-colors - (custom-set-faces - `(action-lock-face ((,c :inherit button))) - `(howm-mode-keyword-face (( ))) - `(howm-mode-ref-face ((,c :inherit link))) - `(howm-mode-title-face ((,c :inherit modus-themes-heading-0))) - `(howm-mode-wiki-face ((,c :inherit link))) - `(howm-reminder-deadline-face ((,c :foreground ,date-deadline))) - `(howm-reminder-late-deadline-face ((,c :inherit bold :foreground ,date-deadline))) - `(howm-reminder-defer-face ((,c :foreground ,date-scheduled))) - `(howm-reminder-scheduled-face ((,c :foreground ,date-scheduled))) - `(howm-reminder-done-face ((,c :foreground ,prose-done))) - `(howm-reminder-todo-face ((,c :foreground ,prose-todo))) - `(howm-reminder-normal-face ((,c :foreground ,date-common))) - `(howm-reminder-today-face ((,c :inherit bold :foreground ,date-common))) - `(howm-reminder-tomorrow-face ((,c :inherit bold :foreground ,date-scheduled))) - `(howm-simulate-todo-mode-line-face ((,c :inherit bold))) - `(howm-view-empty-face (( ))) - `(howm-view-hilit-face ((,c :inherit match))) - `(howm-view-name-face ((,c :inherit bold))) - `(iigrep-counts-face1 ((,c :foreground ,rainbow-1))) - `(iigrep-counts-face2 ((,c :foreground ,rainbow-2))) - `(iigrep-counts-face3 ((,c :foreground ,rainbow-3))) - `(iigrep-counts-face4 ((,c :foreground ,rainbow-4))) - `(iigrep-counts-face5 ((,c :foreground ,rainbow-5)))))) - -(add-hook 'enable-theme-functions #'my-modus-themes-custom-faces) -#+end_src - ** DIY Use a hook at the post-load-theme phase :PROPERTIES: :CUSTOM_ID: h:d87673fe-2ce1-4c80-a4b8-be36ca9f2d24 @@ -4207,6 +4163,7 @@ project. The idea is to offer an overview of the known status of all affected face groups. The items with an appended asterisk =*= tend to have lots of extensions, so the "full support" may not be 100% true… ++ abbrev + ace-window + agda2-mode + all-the-icons @@ -4314,6 +4271,7 @@ have lots of extensions, so the "full support" may not be 100% true… + hl-fill-column + hl-line-mode + hl-todo ++ howm + hydra + ibuffer + icomplete @@ -4420,6 +4378,7 @@ have lots of extensions, so the "full support" may not be 100% true… + sly + smart-mode-line + smerge ++ spacious-padding + speedbar + spell-fu + stripes @@ -4435,8 +4394,10 @@ have lots of extensions, so the "full support" may not be 100% true… + terraform-mode + term + textsec ++ tldr + transient (pop-up windows such as Magit's) + trashed ++ treemacs + tree-sitter + tty-menu + tuareg @@ -5407,7 +5368,7 @@ more effective than trying to do the same with either red or blue (the latter is the least effective in that regard). When we need to work with several colors, it is always better to have -sufficient maneuvering space, especially since we cannot pick arbitrary +sufficient manoeuvring space, especially since we cannot pick arbitrary colors but only those that satisfy the accessibility objectives of the themes. @@ -5513,7 +5474,7 @@ it is already understood that one must follow the indicator or headline to view its contents and (ii) underlining everything would make the interface virtually unusable. -Again, one must exercise judgment in order to avoid discrimination, +Again, one must exercise judgement in order to avoid discrimination, where "discrimination" refers to: + The treatment of substantially different magnitudes as if they were of @@ -5587,7 +5548,7 @@ the themes, which is partially fleshed out in this manual. With regard to the artistic aspect (where "art" qua skill may amount to an imprecise science), there is no hard-and-fast rule in effect as it -requires one to exercise discretion and make decisions based on +requires one to exercize discretion and make decisions based on context-dependent information or constraints. As is true with most things in life, when in doubt, do not cling on to the letter of the law but try to understand its spirit. @@ -5736,14 +5697,14 @@ The Modus themes are a collective effort. Every bit of work matters. Contovounesios, Björn Lindström, Carlo Zancanaro, Christian Tietze, Daniel Mendler, David Edmondson, Eli Zaretskii, Fritz Grabo, Gautier Ponsinet, Illia Ostapyshyn, Jared Finder, Kévin Le Gouguec, Koen van - Greevenbroek, Kostadin Ninev, Madhavan Krishnan, Manuel Giraud, - Markus Beppler, Matthew Stevenson, Mauro Aranda, Nacho Barrientos, - Niall Dooley, Nicolas De Jaeghere, Paul David, Pavel Novichkov, - Philip Kaludercic, Pierre Téchoueyres, Rudolf Adamkovič, Sergey - Nichiporchik, Shreyas Ragavan, Stefan Kangas, Stephen Berman, - Stephen Gildea, Steve Downey, Thanos Apollo, Tomasz Hołubowicz, - Utkarsh Singh, Vincent Murphy, Xinglu Chen, Yuanchen Xie, fluentpwn, - okamsn. + Greevenbroek, Kostadin Ninev, Leilei332, Madhavan Krishnan, Manuel + Giraud, Markus Beppler, Matthew Stevenson, Mauro Aranda, Nacho + Barrientos, Niall Dooley, Nicolas De Jaeghere, Paul David, Pavel + Novichkov, Philip Kaludercic, Pierre Téchoueyres, Rahul M. + {{{space()}}} Juliato, Rudolf Adamkovič, Sergey Nichiporchik, + Shreyas Ragavan, Stefan Kangas, Stephen Berman, Stephen Gildea, + Steve Downey, Thanos Apollo, Tomasz Hołubowicz, Utkarsh Singh, + Vincent Murphy, Xinglu Chen, Yuanchen Xie, fluentpwn, okamsn. + Ideas and user feedback :: Aaron Jensen, Adam Porter, Adam Spiers, Adrian Manea, Aleksei Pirogov, Alex Griffin, Alex Koen, Alex @@ -5779,7 +5740,8 @@ The Modus themes are a collective effort. Every bit of work matters. Eugene, Fourchaux, Fredrik, Moesasji, Nick, Summer Emacs, TheBlob42, TitusMu, Trey, ZharMeny, bepolymathe, bit9tream, bangedorrunt, derek-upham, doolio, fleimgruber, gitrj95, iSeeU, jixiuf, ltmsyvag, - okamsn, pRot0ta1p, shipmints, soaringbird, tumashu, wakamenod. + okamsn, pedro-nonfree, pRot0ta1p, shipmints, soaringbird, tumashu, + wakamenod. + Packaging :: Basil L.{{{space()}}} Contovounesios, Eli Zaretskii, Glenn Morris, Mauro Aranda, Richard Stallman, Stefan Kangas (core @@ -5812,7 +5774,7 @@ All errors are my own. Version 1.3, 3 November 2008 - Copyright (C) 2000-2002, 2007-2008, 2025 Free Software Foundation, Inc. + Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. diff --git a/etc/themes/modus-operandi-deuteranopia-theme.el b/etc/themes/modus-operandi-deuteranopia-theme.el index 55015c7f30b..45167dbd7d4 100644 --- a/etc/themes/modus-operandi-deuteranopia-theme.el +++ b/etc/themes/modus-operandi-deuteranopia-theme.el @@ -1,6 +1,6 @@ ;;; modus-operandi-deuteranopia-theme.el --- Deuteranopia-optimized theme with a white background -*- lexical-binding:t -*- -;; Copyright (C) 2019-2025 Free Software Foundation, Inc. +;; Copyright (C) 2019-2025 Free Software Foundation, Inc. ;; Author: Protesilaos Stavrou ;; Maintainer: Protesilaos Stavrou @@ -167,15 +167,11 @@ standard)." (bg-completion "#c0deff") (bg-hover "#b2e4dc") - (bg-hover-secondary "#f5d0a0") + (bg-hover-secondary "#e5d7a0") (bg-hl-line "#dae5ec") (bg-region "#bdbdbd") (fg-region "#000000") - (bg-char-0 "#7feaff") - (bg-char-1 "#ffaaff") - (bg-char-2 "#dff000") - (bg-mode-line-active "#d0d6ff") (fg-mode-line-active "#0f0f0f") (border-mode-line-active "#4f4f74") @@ -216,13 +212,6 @@ standard)." (bg-diff-context "#f3f3f3") -;;; Paren match - - (bg-paren-match "#5fcfff") - (fg-paren-match fg-main) - (bg-paren-expression "#efd3f5") - (underline-paren-match unspecified) - ;;; Mappings ;;;; General mappings @@ -257,17 +246,17 @@ standard)." ;;;; Code mappings (bracket fg-main) - (builtin magenta-warmer) + (builtin yellow) (comment yellow-cooler) - (constant blue-cooler) + (constant blue-faint) (delimiter fg-main) (docmarkup magenta-faint) (docstring green-faint) - (fnname magenta) - (keyword magenta-cooler) + (fnname yellow-warmer) + (keyword blue-cooler) (number fg-main) (operator fg-main) - (preprocessor red-cooler) + (preprocessor magenta-cooler) (punctuation fg-main) (rx-backslash blue-cooler) (rx-construct yellow-cooler) @@ -275,12 +264,19 @@ standard)." (type cyan-cooler) (variable cyan) +;;;; Paren match + + (bg-paren-match bg-cyan-subtle) + (fg-paren-match fg-main) + (underline-paren-match unspecified) + (bg-paren-expression bg-yellow-nuanced) + ;;;; Accent mappings - (accent-0 blue) + (accent-0 blue-warmer) (accent-1 yellow-warmer) (accent-2 cyan) - (accent-3 magenta-cooler) + (accent-3 yellow-cooler) ;;;; Button mappings @@ -291,10 +287,10 @@ standard)." ;;;; Completion mappings - (fg-completion-match-0 blue) + (fg-completion-match-0 blue-warmer) (fg-completion-match-1 yellow-warmer) (fg-completion-match-2 cyan) - (fg-completion-match-3 magenta-cooler) + (fg-completion-match-3 yellow-cooler) (bg-completion-match-0 unspecified) (bg-completion-match-1 unspecified) (bg-completion-match-2 unspecified) @@ -313,7 +309,7 @@ standard)." (date-scheduled yellow-cooler) (date-scheduled-subtle yellow-faint) (date-weekday cyan) - (date-weekend magenta) + (date-weekend blue-cooler) ;;;; Line number mappings @@ -374,7 +370,7 @@ standard)." (fg-prose-macro magenta-cooler) (bg-prose-verbatim unspecified) - (fg-prose-verbatim magenta-warmer) + (fg-prose-verbatim yellow) (prose-done blue) (prose-todo yellow-warmer) @@ -385,7 +381,7 @@ standard)." (prose-table fg-alt) (prose-table-formula yellow-warmer) - (prose-tag magenta-faint) + (prose-tag fg-alt) ;;;; Rainbow mappings @@ -403,7 +399,7 @@ standard)." (bg-search-current bg-yellow-intense) (bg-search-lazy bg-blue-intense) - (bg-search-replace bg-magenta-intense) + (bg-search-replace bg-yellow-intense) (bg-search-rx-group-0 bg-cyan-intense) (bg-search-rx-group-1 bg-magenta-intense) @@ -463,11 +459,11 @@ standard)." (fg-heading-0 cyan-cooler) (fg-heading-1 fg-main) (fg-heading-2 yellow-faint) - (fg-heading-3 fg-alt) - (fg-heading-4 magenta) - (fg-heading-5 green-faint) - (fg-heading-6 red-faint) - (fg-heading-7 cyan-warmer) + (fg-heading-3 blue-faint) + (fg-heading-4 green-faint) + (fg-heading-5 magenta-cooler) + (fg-heading-6 yellow-cooler) + (fg-heading-7 cyan) (fg-heading-8 fg-dim) (bg-heading-0 unspecified) diff --git a/etc/themes/modus-operandi-theme.el b/etc/themes/modus-operandi-theme.el index 7c653b23fb3..6f92f864616 100644 --- a/etc/themes/modus-operandi-theme.el +++ b/etc/themes/modus-operandi-theme.el @@ -1,6 +1,6 @@ ;;; modus-operandi-theme.el --- Elegant, highly legible theme with a white background -*- lexical-binding:t -*- -;; Copyright (C) 2019-2025 Free Software Foundation, Inc. +;; Copyright (C) 2019-2025 Free Software Foundation, Inc. ;; Author: Protesilaos Stavrou ;; Maintainer: Protesilaos Stavrou @@ -170,10 +170,6 @@ which corresponds to a minimum contrast in relative luminance of (bg-region "#bdbdbd") (fg-region "#000000") - (bg-char-0 "#7feaff") - (bg-char-1 "#ffaaff") - (bg-char-2 "#dff000") - (bg-mode-line-active "#c8c8c8") (fg-mode-line-active "#000000") (border-mode-line-active "#5a5a5a") @@ -214,13 +210,6 @@ which corresponds to a minimum contrast in relative luminance of (bg-diff-context "#f3f3f3") -;;; Paren match - - (bg-paren-match "#5fcfff") - (fg-paren-match fg-main) - (bg-paren-expression "#efd3f5") - (underline-paren-match unspecified) - ;;; Mappings ;;;; General mappings @@ -273,6 +262,13 @@ which corresponds to a minimum contrast in relative luminance of (type cyan-cooler) (variable cyan) +;;;; Paren match + + (bg-paren-match bg-cyan-subtle) + (fg-paren-match fg-main) + (underline-paren-match unspecified) + (bg-paren-expression bg-yellow-nuanced) + ;;;; Accent mappings (accent-0 blue) diff --git a/etc/themes/modus-operandi-tinted-theme.el b/etc/themes/modus-operandi-tinted-theme.el index ca783c2f022..11b7f38ba0f 100644 --- a/etc/themes/modus-operandi-tinted-theme.el +++ b/etc/themes/modus-operandi-tinted-theme.el @@ -1,6 +1,6 @@ -;;; modus-operandi-tinted-theme.el --- Elegant, highly legible theme with a light ocher background -*- lexical-binding:t -*- +;;; modus-operandi-tinted-theme.el --- Elegant, highly legible theme with a light ochre background -*- lexical-binding:t -*- -;; Copyright (C) 2019-2025 Free Software Foundation, Inc. +;; Copyright (C) 2019-2025 Free Software Foundation, Inc. ;; Author: Protesilaos Stavrou ;; Maintainer: Protesilaos Stavrou @@ -44,7 +44,7 @@ ;;;###theme-autoload (deftheme modus-operandi-tinted - "Elegant, highly legible theme with a light ocher background. + "Elegant, highly legible theme with a light ochre background. Conforms with the highest legibility standard for color contrast between background and foreground in any given piece of text, which corresponds to a minimum contrast in relative luminance of @@ -73,18 +73,18 @@ which corresponds to a minimum contrast in relative luminance of (red-cooler "#a0132f") (red-faint "#7f0000") (red-intense "#d00000") - (green "#006800") - (green-warmer "#316500") - (green-cooler "#00663f") + (green "#006300") + (green-warmer "#306010") + (green-cooler "#00603f") (green-faint "#2a5045") (green-intense "#008900") - (yellow "#6f5500") - (yellow-warmer "#884900") - (yellow-cooler "#7a4f2f") - (yellow-faint "#624416") + (yellow "#6d5000") + (yellow-warmer "#894000") + (yellow-cooler "#602938") + (yellow-faint "#574316") (yellow-intense "#808000") (blue "#0031a9") - (blue-warmer "#3548cf") + (blue-warmer "#3546c2") (blue-cooler "#0000b0") (blue-faint "#003497") (blue-intense "#0000ff") @@ -93,10 +93,10 @@ which corresponds to a minimum contrast in relative luminance of (magenta-cooler "#531ab6") (magenta-faint "#7c318f") (magenta-intense "#dd22dd") - (cyan "#005e8b") - (cyan-warmer "#3f578f") + (cyan "#00598b") + (cyan-warmer "#32548f") (cyan-cooler "#005f5f") - (cyan-faint "#005077") + (cyan-faint "#304463") (cyan-intense "#008899") ;;; Uncommon accent foregrounds @@ -165,15 +165,11 @@ which corresponds to a minimum contrast in relative luminance of (bg-completion "#f0c1cf") (bg-hover "#b2e4dc") - (bg-hover-secondary "#f5d0a0") + (bg-hover-secondary "#dfe09f") (bg-hl-line "#f1d5d0") (bg-region "#c2bcb5") (fg-region "#000000") - (bg-char-0 "#7feaff") - (bg-char-1 "#ffaaff") - (bg-char-2 "#dff000") - (bg-mode-line-active "#cab9b2") (fg-mode-line-active "#000000") (border-mode-line-active "#545454") @@ -214,13 +210,6 @@ which corresponds to a minimum contrast in relative luminance of (bg-diff-context "#efe9df") -;;; Paren match - - (bg-paren-match "#7fdfcf") - (fg-paren-match fg-main) - (bg-paren-expression "#efd3f5") - (underline-paren-match unspecified) - ;;; Mappings ;;;; General mappings @@ -230,11 +219,11 @@ which corresponds to a minimum contrast in relative luminance of (keybind red) (name magenta) - (identifier yellow-cooler) + (identifier yellow-faint) (err red) - (warning yellow-warmer) - (info cyan-cooler) + (warning yellow) + (info green) (underline-err red-intense) (underline-warning yellow-intense) @@ -255,30 +244,37 @@ which corresponds to a minimum contrast in relative luminance of ;;;; Code mappings (bracket fg-main) - (builtin magenta-warmer) + (builtin magenta) (comment red-faint) - (constant blue-cooler) + (constant magenta-cooler) (delimiter fg-main) (docmarkup magenta-faint) - (docstring green-faint) - (fnname magenta) - (keyword magenta-cooler) + (docstring cyan-faint) + (fnname yellow-cooler) + (keyword blue) (number fg-main) (operator fg-main) - (preprocessor red-cooler) + (preprocessor yellow-warmer) (punctuation fg-main) - (rx-backslash magenta) - (rx-construct green-cooler) - (string blue-warmer) - (type cyan-cooler) - (variable cyan) + (rx-backslash magenta-warmer) + (rx-construct magenta-cooler) + (string cyan) + (type green-warmer) + (variable green-cooler) + +;;;; Paren match + + (bg-paren-match bg-cyan-subtle) + (fg-paren-match fg-main) + (underline-paren-match unspecified) + (bg-paren-expression bg-yellow-nuanced) ;;;; Accent mappings - (accent-0 blue) - (accent-1 magenta-warmer) - (accent-2 cyan) - (accent-3 red) + (accent-0 red-cooler) + (accent-1 cyan) + (accent-2 magenta-cooler) + (accent-3 yellow-warmer) ;;;; Button mappings @@ -336,14 +332,14 @@ which corresponds to a minimum contrast in relative luminance of ;;;; Mail mappings - (mail-cite-0 blue-faint) - (mail-cite-1 yellow-warmer) - (mail-cite-2 cyan-cooler) + (mail-cite-0 cyan-cooler) + (mail-cite-1 yellow) + (mail-cite-2 green-warmer) (mail-cite-3 red-cooler) - (mail-part cyan) - (mail-recipient magenta-cooler) + (mail-part magenta-cooler) + (mail-recipient blue-warmer) (mail-subject magenta-warmer) - (mail-other magenta-faint) + (mail-other magenta) ;;;; Mark mappings @@ -356,7 +352,7 @@ which corresponds to a minimum contrast in relative luminance of ;;;; Prompt mappings - (fg-prompt cyan-cooler) + (fg-prompt green-cooler) (bg-prompt unspecified) ;;;; Prose mappings @@ -366,13 +362,13 @@ which corresponds to a minimum contrast in relative luminance of (bg-prose-block-contents bg-dim) (bg-prose-code unspecified) - (fg-prose-code cyan-cooler) + (fg-prose-code green-cooler) (bg-prose-macro unspecified) - (fg-prose-macro magenta-cooler) + (fg-prose-macro blue-cooler) (bg-prose-verbatim unspecified) - (fg-prose-verbatim magenta-warmer) + (fg-prose-verbatim yellow-warmer) (prose-done green) (prose-todo red) @@ -458,7 +454,7 @@ which corresponds to a minimum contrast in relative luminance of ;;;; Heading mappings - (fg-heading-0 cyan-cooler) + (fg-heading-0 green-cooler) (fg-heading-1 fg-main) (fg-heading-2 yellow-faint) (fg-heading-3 fg-alt) diff --git a/etc/themes/modus-operandi-tritanopia-theme.el b/etc/themes/modus-operandi-tritanopia-theme.el index af6f9e3f1a4..8638d201d7f 100644 --- a/etc/themes/modus-operandi-tritanopia-theme.el +++ b/etc/themes/modus-operandi-tritanopia-theme.el @@ -1,6 +1,6 @@ ;;; modus-operandi-tritanopia-theme.el --- Tritanopia-optimized theme with a white background -*- lexical-binding:t -*- -;; Copyright (C) 2019-2025 Free Software Foundation, Inc. +;; Copyright (C) 2019-2025 Free Software Foundation, Inc. ;; Author: Protesilaos Stavrou ;; Maintainer: Protesilaos Stavrou @@ -63,7 +63,7 @@ standard)." (bg-dim "#f2f2f2") (fg-main "#000000") (fg-dim "#595959") - (fg-alt "#193668") + (fg-alt "#024960") (bg-active "#c4c4c4") (bg-inactive "#e0e0e0") (border "#9f9f9f") @@ -167,15 +167,11 @@ standard)." (bg-completion "#afdfef") (bg-hover "#ffafbc") - (bg-hover-secondary "#9fdfff") + (bg-hover-secondary "#abdfdd") (bg-hl-line "#dfeaec") (bg-region "#bdbdbd") (fg-region "#000000") - (bg-char-0 "#ff908f") - (bg-char-1 "#bfbfff") - (bg-char-2 "#5fcfdf") - (bg-mode-line-active "#afe0f2") (fg-mode-line-active "#0f0f0f") (border-mode-line-active "#2f4f44") @@ -216,13 +212,6 @@ standard)." (bg-diff-context "#f3f3f3") -;;; Paren match - - (bg-paren-match "#5fcfff") - (fg-paren-match fg-main) - (bg-paren-expression "#efd3f5") - (underline-paren-match unspecified) - ;;; Mappings ;;;; General mappings @@ -275,6 +264,13 @@ standard)." (type blue-warmer) (variable cyan-cooler) +;;;; Paren match + + (bg-paren-match bg-cyan-subtle) + (fg-paren-match fg-main) + (underline-paren-match unspecified) + (bg-paren-expression bg-red-nuanced) + ;;;; Accent mappings (accent-0 cyan) @@ -385,7 +381,7 @@ standard)." (prose-table fg-alt) (prose-table-formula red-cooler) - (prose-tag magenta-faint) + (prose-tag fg-alt) ;;;; Rainbow mappings diff --git a/etc/themes/modus-themes.el b/etc/themes/modus-themes.el index 655d7a830e6..945d7b5585f 100644 --- a/etc/themes/modus-themes.el +++ b/etc/themes/modus-themes.el @@ -1,12 +1,12 @@ ;;; modus-themes.el --- Elegant, highly legible and customizable themes -*- lexical-binding:t -*- -;; Copyright (C) 2019-2025 Free Software Foundation, Inc. +;; Copyright (C) 2019-2025 Free Software Foundation, Inc. ;; Author: Protesilaos Stavrou ;; Maintainer: Protesilaos Stavrou ;; URL: https://github.com/protesilaos/modus-themes -;; Version: 4.6.0 -;; Package-Requires: ((emacs "27.1")) +;; Version: 4.7.0 +;; Package-Requires: ((emacs "28.1")) ;; Keywords: faces, theme, accessibility ;; This file is part of GNU Emacs. @@ -309,11 +309,12 @@ If the value is nil or otherwise does not specify two valid Modus themes, the command `modus-themes-toggle' reverts to selecting a theme from the list of available Modus themes. In effect, it is the same as using the command `modus-themes-select'." - :type `(choice - (const :tag "No toggle" nil) - (list :tag "Pick two themes to toggle between" - (choice :tag "Theme one of two" ,@(mapcar (lambda (theme) (list 'const theme)) modus-themes-items)) - (choice :tag "Theme two of two" ,@(mapcar (lambda (theme) (list 'const theme)) modus-themes-items)))) + :type (let ((themes (mapcar (lambda (theme) (list 'const theme)) modus-themes-items))) + `(choice + (const :tag "No toggle" nil) + (list :tag "Pick two themes to toggle between" + (choice :tag "Theme one of two" ,@themes) + (choice :tag "Theme two of two" ,@themes)))) :package-version '(modus-themes . "4.0.0") :version "30.1" :group 'modus-themes) @@ -327,7 +328,8 @@ the same as using the command `modus-themes-select'." :version "31.1" :group 'modus-themes) -(defvaralias 'modus-themes-post-load-hook 'modus-themes-after-load-theme-hook) +(defvaralias 'modus-themes-post-load-hook 'modus-themes-after-load-theme-hook + "Alias for `modus-themes-after-load-theme-hook'.") (defcustom modus-themes-after-load-theme-hook nil "Hook that runs after loading a Modus theme. @@ -1153,7 +1155,7 @@ This function is used in the macros `modus-themes-theme', (eq value 'unspecified)) value) ((and (symbolp value) - (memq value (mapcar #'car palette))) + value) (modus-themes--retrieve-palette-value value palette)) (t 'unspecified)))) @@ -1209,15 +1211,15 @@ symbol, which is safe when used as a face attribute's value." "Render `modus-themes--list-known-themes' as completion with theme category." (modus-themes--completion-table 'theme (modus-themes--list-known-themes))) -(defun modus-themes--select-prompt () - "Minibuffer prompt to select a Modus theme." +(defun modus-themes--select-prompt (&optional prompt) + "Minibuffer prompt to select a Modus theme. +With optional PROMPT string, use it. Else use a generic prompt." (let ((completion-extra-properties `(:annotation-function ,#'modus-themes--annotate-theme))) (intern (completing-read - "Select Modus theme: " + (or prompt "Select Modus theme: ") (modus-themes--completion-table-candidates) - nil t nil - 'modus-themes--select-theme-history)))) + nil t nil 'modus-themes--select-theme-history)))) ;;;###autoload (defun modus-themes-select (theme) @@ -1231,13 +1233,13 @@ Disable other themes per `modus-themes-disable-other-themes'." (defun modus-themes--toggle-theme-p () "Return non-nil if `modus-themes-to-toggle' are valid." - (mapc - (lambda (theme) - (if (or (memq theme modus-themes-items) - (memq theme (modus-themes--list-known-themes))) - theme - (user-error "`%s' is not part of `modus-themes-items'" theme))) - modus-themes-to-toggle)) + (condition-case nil + (dolist (theme modus-themes-to-toggle) + (or (memq theme modus-themes-items) + (memq theme (modus-themes--list-known-themes)) + (error "`%s' is not part of `modus-themes-items'" theme))) + (error nil) + (:success modus-themes-to-toggle))) ;;;###autoload (defun modus-themes-toggle () @@ -1294,87 +1296,88 @@ the list becomes the last. Do not modify THEMES in the process." ;;;;; Preview a theme palette -(defun modus-themes--list-colors-render (buffer theme &optional mappings &rest _) - "Render colors in BUFFER from THEME for `modus-themes-list-colors'. -Optional MAPPINGS changes the output to only list the semantic -color mappings of the palette, instead of its named colors." +(defun modus-themes--list-colors-get-mappings (palette) + "Get the semantic palette entries in PALETTE. +PALETTE is the value of a variable like `modus-operandi-palette'." + (seq-remove + (lambda (cell) + (stringp (cadr cell))) + palette)) + +(defun modus-themes--list-colors-tabulated (theme &optional mappings) + "Return a data structure of THEME palette or MAPPINGS for tabulated list." (let* ((current-palette (modus-themes--palette-value theme mappings)) (palette (if mappings - (seq-remove (lambda (cell) - (stringp (cadr cell))) - current-palette) - current-palette)) - (current-buffer buffer) - (current-theme theme)) - (with-help-window buffer - (with-current-buffer standard-output - (erase-buffer) - (when (<= (display-color-cells) 256) - (insert (concat "Your display terminal may not render all color previews!\n" - "It seems to only support <= 256 colors.\n\n")) - (put-text-property (point-min) (point) 'face 'warning)) - ;; We need this to properly render the first line. - (insert " ") - (dolist (cell palette) - (let* ((name (car cell)) - (color (modus-themes-get-color-value name mappings theme)) - (pad (make-string 10 ?\s)) - (fg (if (eq color 'unspecified) - (progn - (readable-foreground-color (modus-themes-get-color-value 'bg-main nil theme)) - (setq pad (make-string 6 ?\s))) - (readable-foreground-color color)))) - (let ((old-point (point))) - (insert (format "%s %s" color pad)) - (put-text-property old-point (point) 'face `( :foreground ,color))) - (let ((old-point (point))) - (insert (format " %s %s %s\n" color pad name)) - (put-text-property old-point (point) - 'face `( :background ,color - :foreground ,fg - :extend t))) - ;; We need this to properly render the last line. - (insert " "))) - (setq-local revert-buffer-function - (lambda (_ignore-auto _noconfirm) - (modus-themes--list-colors-render current-buffer current-theme mappings))))))) - -(defvar modus-themes--list-colors-prompt-history '() - "Minibuffer history for `modus-themes--list-colors-prompt'.") - -(defun modus-themes--list-colors-prompt () - "Prompt for Modus theme. -Helper function for `modus-themes-list-colors'." - (let ((def (format "%s" (modus-themes--current-theme))) - (completion-extra-properties `(:annotation-function ,#'modus-themes--annotate-theme))) - (completing-read - (format "Use palette from theme [%s]: " def) - (modus-themes--completion-table-candidates) - nil t nil - 'modus-themes--list-colors-prompt-history def))) + (modus-themes--list-colors-get-mappings current-palette) + current-palette))) + (mapcar (lambda (cell) + (pcase-let* ((`(,name ,value) cell) + (name-string (format "%s" name)) + (value-string (format "%s" value)) + (value-string-padded (string-pad value-string 30)) + (color (modus-themes-get-color-value name mappings theme))) ; resolve a semantic mapping + (list name + (vector + (if (and (symbolp value) + (not (eq value 'unspecified))) + "Yes" + "") + name-string + (propertize value-string 'face `( :foreground ,color)) + (propertize value-string-padded 'face (list :background color + :foreground (if (string= color "unspecified") + (readable-foreground-color (modus-themes-get-color-value 'bg-main nil theme)) + (readable-foreground-color color)))))))) + palette))) + +(defvar modus-themes-current-preview nil) +(defvar modus-themes-current-preview-show-mappings nil) + +(defun modus-themes--set-tabulated-entries () + "Set the value of `tabulated-list-entries' with palette entries." + (setq-local tabulated-list-entries + (modus-themes--list-colors-tabulated modus-themes-current-preview modus-themes-current-preview-show-mappings))) (defun modus-themes-list-colors (theme &optional mappings) - "Preview named colors of the Modus THEME of choice. -With optional prefix argument for MAPPINGS preview the semantic -color mappings instead of the named colors." - (interactive (list (intern (modus-themes--list-colors-prompt)) current-prefix-arg)) - (modus-themes--list-colors-render - (format (if mappings "*%s-list-mappings*" "*%s-list-colors*") theme) - theme - mappings)) + "Preview the palette of the Modus THEME of choice. +With optional prefix argument for MAPPINGS preview only the semantic +color mappings instead of the complete palette." + (interactive + (let ((prompt (if current-prefix-arg + "Preview palette mappings of THEME: " + "Preview palette of THEME: "))) + (list + (modus-themes--select-prompt prompt) + current-prefix-arg))) + (let ((buffer (get-buffer-create (format (if mappings "*%s-list-mappings*" "*%s-list-all*") theme)))) + (with-current-buffer buffer + (let ((modus-themes-current-preview theme) + (modus-themes-current-preview-show-mappings mappings)) + (modus-themes-preview-mode))) + (pop-to-buffer buffer))) (defalias 'modus-themes-preview-colors 'modus-themes-list-colors - "Alias of `modus-themes-list-colors'.") + "Alias for `modus-themes-list-colors'.") (defun modus-themes-list-colors-current (&optional mappings) - "Call `modus-themes-list-colors' for the current Modus theme. -Optional prefix argument MAPPINGS has the same meaning as for -`modus-themes-list-colors'." + "Like `modus-themes-list-colors' with optional MAPPINGS for the current theme." (interactive "P") (modus-themes-list-colors (modus-themes--current-theme) mappings)) (defalias 'modus-themes-preview-colors-current 'modus-themes-list-colors-current - "Alias of `modus-themes-list-colors-current'.") + "Alias for `modus-themes-list-colors-current'.") + +(define-derived-mode modus-themes-preview-mode tabulated-list-mode "Modus palette" + "Major mode to display a Modus themes palette." + :interactive nil + (setq-local tabulated-list-format + [("Mapping?" 10 t) + ("Symbol name" 30 t) + ("As foreground" 30 t) + ("As background" 0 t)]) + (modus-themes--set-tabulated-entries) + (tabulated-list-init-header) + (tabulated-list-print)) @@ -1449,7 +1452,7 @@ color that is combined with FG-FOR-BG." :foreground fg :weight ;; If we have `bold' specifically, we inherit the face of - ;; the same name. This allows the user to customize that + ;; the same name. This allows the user to customise that ;; face, such as to change its font family. (if (and weight (not (eq weight 'bold))) weight @@ -1670,6 +1673,7 @@ FG and BG are the main colors." `(tool-bar ((,c :background ,bg-dim :foreground ,fg-main))) `(vertical-border ((,c :foreground ,border))) ;;;;; basic and/or ungrouped styles + `(abbrev-table-name ((,c :inherit bold))) `(appt-notification ((,c :inherit bold :foreground ,modeline-err))) `(blink-matching-paren-offscreen ((,c :background ,bg-paren-match))) `(bold ((,c :weight bold))) @@ -1720,6 +1724,25 @@ FG and BG are the main colors." `(link ((,c :inherit button))) `(link-visited ((,c :background ,bg-link-visited :foreground ,fg-link-visited :underline ,underline-link-visited))) `(tooltip ((,c :background ,bg-active :foreground ,fg-main))) +;;;;; adoc-mode + `(adoc-code-face ((,c :inherit font-lock-constant-face))) + `(adoc-command-face ((,c :inherit modus-themes-prose-macro))) + `(adoc-complex-replacement-face ((,c :background ,bg-magenta-subtle :foreground ,magenta))) + `(adoc-emphasis-face ((t (:inherit bold)))) + `(adoc-gen-face ((,c :foreground ,blue))) + `(adoc-meta-face ((,c :inherit modus-themes-fixed-pitch :foreground ,prose-metadata))) + `(adoc-meta-hide-face ((,c :inherit modus-themes-fixed-pitch :foreground ,prose-metadata))) + `(adoc-replacement-face ((,c :inherit font-lock-escape-face))) + `(adoc-secondary-text-face ((,c :inherit modus-themes-fixed-pitch :foreground ,prose-metadata-value))) + `(adoc-table-face ((,c :inherit modus-themes-fixed-pitch :foreground ,prose-table))) + `(adoc-title-0-face ((,c :inherit modus-themes-heading-0))) + `(adoc-title-1-face ((,c :inherit modus-themes-heading-1))) + `(adoc-title-2-face ((,c :inherit modus-themes-heading-2))) + `(adoc-title-3-face ((,c :inherit modus-themes-heading-3))) + `(adoc-title-4-face ((,c :inherit modus-themes-heading-4))) + `(adoc-title-5-face ((,c :inherit modus-themes-heading-5))) + `(adoc-typewriter-face ((,c :inherit modus-themes-prose-verbatim))) + `(adoc-verbatim-face ((,c :inherit modus-themes-prose-verbatim))) ;;;;; agda2-mode `(agda2-highlight-bound-variable-face ((,c :inherit font-lock-variable-name-face))) `(agda2-highlight-catchall-clause-face ((,c :background ,bg-inactive))) @@ -1849,13 +1872,14 @@ FG and BG are the main colors." `(TeX-error-description-warning ((,c :inherit warning))) ;;;;; auto-dim-other-buffers `(auto-dim-other-buffers-face ((,c :background ,bg-inactive))) + `(auto-dim-other-buffers-hide-face ((,c :foreground ,bg-inactive :background ,bg-inactive))) ;;;;; avy `(avy-background-face ((,c :background ,bg-dim :foreground ,fg-dim :extend t))) - `(avy-goto-char-timer-face ((,c :inherit bold :background ,bg-active))) - `(avy-lead-face ((,c :inherit (bold modus-themes-reset-soft) :background ,bg-char-0))) - `(avy-lead-face-0 ((,c :inherit (bold modus-themes-reset-soft) :background ,bg-char-1))) - `(avy-lead-face-1 ((,c :inherit modus-themes-reset-soft :background ,bg-inactive))) - `(avy-lead-face-2 ((,c :inherit (bold modus-themes-reset-soft) :background ,bg-char-2))) + `(avy-goto-char-timer-face ((,c :inherit (bold modus-themes-search-lazy modus-themes-reset-soft)))) + `(avy-lead-face ((,c :inherit (bold modus-themes-search-current modus-themes-reset-soft)))) + `(avy-lead-face-0 ((,c :inherit (bold modus-themes-search-current modus-themes-reset-soft)))) + `(avy-lead-face-1 ((,c :inherit (bold modus-themes-search-current modus-themes-reset-soft)))) + `(avy-lead-face-2 ((,c :inherit (bold modus-themes-search-current modus-themes-reset-soft)))) ;;;;; aw (ace-window) `(aw-background-face ((,c :foreground "gray50"))) `(aw-key-face ((,c :inherit modus-themes-key-binding))) @@ -2028,8 +2052,8 @@ FG and BG are the main colors." ;;;;; corfu-candidate-overlay `(corfu-candidate-overlay-face ((t :inherit shadow))) ;;;;; corfu-quick - `(corfu-quick1 ((,c :inherit bold :background ,bg-char-0))) - `(corfu-quick2 ((,c :inherit bold :background ,bg-char-1))) + `(corfu-quick1 ((,c :inherit (bold modus-themes-search-current)))) + `(corfu-quick2 ((,c :inherit (bold modus-themes-search-current)))) ;;;;; counsel `(counsel-active-mode ((,c :foreground ,keyword))) `(counsel-application-name ((,c :foreground ,name))) @@ -2518,10 +2542,10 @@ FG and BG are the main colors." `(geiser-font-lock-xref-link ((,c :inherit button))) ;;;;; git-commit `(git-commit-comment-action ((,c :inherit font-lock-comment-face))) - `(git-commit-comment-branch-local ((,c :inherit font-lock-comment-face :foreground ,accent-0))) - `(git-commit-comment-branch-remote ((,c :inherit font-lock-comment-face :foreground ,accent-1))) + `(git-commit-comment-branch-local ((,c :inherit (bold font-lock-comment-face) :foreground ,accent-0))) + `(git-commit-comment-branch-remote ((,c :inherit (bold font-lock-comment-face) :foreground ,accent-1))) `(git-commit-comment-heading ((,c :inherit (bold font-lock-comment-face)))) - `(git-commit-comment-file ((,c :inherit font-lock-comment-face :foreground ,name))) + `(git-commit-comment-file ((,c :inherit font-lock-comment-face :foreground ,accent-2))) ; like `magit-filename' `(git-commit-keyword ((,c :foreground ,keyword))) `(git-commit-nonempty-second-line ((,c :inherit error))) `(git-commit-overlong-summary ((,c :inherit warning))) @@ -2682,6 +2706,30 @@ FG and BG are the main colors." `(hl-fill-column-face ((,c :background ,bg-active))) ;;;;; hl-todo `(hl-todo ((,c :inherit (bold font-lock-comment-face) :foreground ,err))) +;;;;; howm + `(action-lock-face ((,c :inherit button))) + `(howm-mode-keyword-face (( ))) + `(howm-mode-ref-face ((,c :inherit link))) + `(howm-mode-title-face ((,c :inherit modus-themes-heading-0))) + `(howm-mode-wiki-face ((,c :inherit link))) + `(howm-reminder-deadline-face ((,c :foreground ,date-deadline))) + `(howm-reminder-late-deadline-face ((,c :inherit bold :foreground ,date-deadline))) + `(howm-reminder-defer-face ((,c :foreground ,date-scheduled))) + `(howm-reminder-scheduled-face ((,c :foreground ,date-scheduled))) + `(howm-reminder-done-face ((,c :foreground ,prose-done))) + `(howm-reminder-todo-face ((,c :foreground ,prose-todo))) + `(howm-reminder-normal-face ((,c :foreground ,date-common))) + `(howm-reminder-today-face ((,c :inherit bold :foreground ,date-common))) + `(howm-reminder-tomorrow-face ((,c :inherit bold :foreground ,date-scheduled))) + `(howm-simulate-todo-mode-line-face ((,c :inherit bold))) + `(howm-view-empty-face (( ))) + `(howm-view-hilit-face ((,c :inherit match))) + `(howm-view-name-face ((,c :inherit bold))) + `(iigrep-counts-face1 ((,c :foreground ,rainbow-1))) + `(iigrep-counts-face2 ((,c :foreground ,rainbow-2))) + `(iigrep-counts-face3 ((,c :foreground ,rainbow-3))) + `(iigrep-counts-face4 ((,c :foreground ,rainbow-4))) + `(iigrep-counts-face5 ((,c :foreground ,rainbow-5))) ;;;;; hydra `(hydra-face-amaranth ((,c :inherit bold :foreground ,yellow-warmer))) `(hydra-face-blue ((,c :inherit bold :foreground ,blue))) @@ -2695,14 +2743,16 @@ FG and BG are the main colors." `(ibut-face ((,c :inherit button :background ,bg-link-symbolic :foreground ,fg-link-symbolic :underline ,underline-link-symbolic))) ;;;;; icomplete `(icomplete-first-match ((,c :inherit modus-themes-completion-match-0))) + `(icomplete-vertical-selected-prefix-indicator-face ((,c :inherit bold :foreground ,keybind))) + `(icomplete-vertical-unselected-prefix-indicator-face ((,c :inherit shadow))) `(icomplete-selected-match ((,c :inherit modus-themes-completion-selected))) ;;;;; ido-mode `(ido-first-match ((,c :inherit modus-themes-completion-match-0))) `(ido-incomplete-regexp ((,c :inherit error))) `(ido-indicator ((,c :inherit bold))) `(ido-only-match ((,c :inherit ido-first-match))) - `(ido-subdir ((,c :foreground ,accent-0))) - `(ido-virtual ((,c :foreground ,accent-1))) + `(ido-subdir ((,c :foreground ,keyword))) + `(ido-virtual ((,c :foreground ,warning))) ;;;;; iedit `(iedit-occurrence ((,c :inherit modus-themes-search-lazy))) `(iedit-read-only-occurrence ((,c :inherit modus-themes-search-current))) @@ -2803,19 +2853,19 @@ FG and BG are the main colors." `(ivy-minibuffer-match-face-4 ((,c :inherit modus-themes-completion-match-2))) `(ivy-remote ((,c :inherit italic))) `(ivy-separator ((,c :inherit shadow))) - `(ivy-subdir ((,c :foreground ,accent-0))) - `(ivy-virtual ((,c :foreground ,accent-1))) + `(ivy-subdir ((,c :foreground ,keyword))) + `(ivy-virtual ((,c :foreground ,warning))) ;;;;; ivy-posframe `(ivy-posframe-border ((,c :background ,border))) `(ivy-posframe-cursor ((,c :background ,fg-main :foreground ,bg-main))) ;;;;; jabber `(jabber-activity-face ((,c :foreground ,modeline-info))) `(jabber-roster-user-away ((,c :foreground ,red-faint))) - `(jabber-roster-user-xa ((,c :foreground ,magenta :slant italic))) - `(jabber-roster-user-dnd ((,c :foreground ,red :weight bold))) + `(jabber-roster-user-xa ((,c :foreground ,magenta :italic t))) + `(jabber-roster-user-dnd ((,c :foreground ,red :bold t))) `(jabber-roster-user-chatty ((,c :foreground ,cyan-intense))) `(jabber-roster-user-error ((,c :inherit error))) - `(jabber-roster-user-offline ((,c :foreground ,fg-dim :slant italic))) + `(jabber-roster-user-offline ((,c :foreground ,fg-dim :italic t))) `(jabber-roster-user-online ((,c :foreground ,cyan :weight bold))) `(jabber-chat-prompt-foreign ((,c :foreground ,red :weight bold))) `(jabber-chat-prompt-system ((,c :foreground ,green))) @@ -3326,7 +3376,7 @@ FG and BG are the main colors." `(org-clock-overlay ((,c :inherit secondary-selection))) `(org-code ((,c :inherit modus-themes-prose-code))) `(org-column ((,c :inherit default :background ,bg-dim))) - `(org-column-title ((,c :inherit (bold default) :underline t :background ,bg-dim))) + `(org-column-title ((,c :inherit (modus-themes-fixed-pitch bold default) :underline t :background ,bg-dim))) `(org-date ((,c :inherit modus-themes-fixed-pitch :foreground ,date-common))) `(org-date-selected ((,c :foreground ,date-common :inverse-video t))) ;; NOTE 2024-03-17: Normally we do not want to add this padding @@ -3706,6 +3756,9 @@ FG and BG are the main colors." `(smerge-refined-changed (())) `(smerge-refined-removed ((,c :inherit diff-refine-removed))) `(smerge-upper ((,c :inherit diff-removed))) +;;;;; spacious-padding + `(spacious-padding-subtle-mode-line-active ((,c :foreground ,accent-0))) + `(spacious-padding-subtle-mode-line-inactive ((,c :foreground ,border))) ;;;;; speedbar `(speedbar-button-face ((,c :inherit button))) `(speedbar-directory-face ((,c :inherit bold :foreground ,accent-0))) @@ -3812,6 +3865,13 @@ FG and BG are the main colors." `(term-underline ((,c :underline t))) ;;;;; textsec `(textsec-suspicious (( ))) +;;;;; tldr + `(tldr-code-block (( ))) + `(tldr-command-argument ((,c :inherit font-lock-string-face))) + `(tldr-command-itself ((,c :inherit font-lock-builtin-face))) + `(tldr-description ((,c :inherit font-lock-doc-face))) + `(tldr-introduction ((,c :inherit font-lock-comment-face))) + `(tldr-title ((,c :inherit bold))) ;;;;; transient `(transient-active-infix ((,c :inherit highlight))) `(transient-amaranth ((,c :inherit bold :foreground ,yellow-warmer))) @@ -3834,7 +3894,9 @@ FG and BG are the main colors." `(transient-key ((,c :inherit modus-themes-key-binding))) `(transient-key-exit ((,c :inherit modus-themes-key-binding))) `(transient-key-noop ((,c :inherit (shadow modus-themes-key-binding)))) + `(transient-key-recurse ((,c :inherit modus-themes-key-binding))) `(transient-key-return ((,c :inherit modus-themes-key-binding))) + `(transient-key-stack ((,c :inherit modus-themes-key-binding))) `(transient-key-stay ((,c :inherit modus-themes-key-binding))) `(transient-mismatched-key ((,c :underline t))) `(transient-nonstandard-key ((,c :underline t))) @@ -3851,6 +3913,39 @@ FG and BG are the main colors." `(trashed-mark ((,c :inherit bold))) `(trashed-marked ((,c :inherit modus-themes-mark-alt))) `(trashed-restored ((,c :inherit modus-themes-mark-sel))) +;;;;; treemacs + `(treemacs-async-loading-face ((,c :foreground ,fg-main))) + `(treemacs-directory-face ((,c :foreground ,accent-0))) + `(treemacs-directory-collapsed-face ((,c :foreground ,accent-0))) + `(treemacs-file-face ((,c :foreground ,fg-main))) + `(treemacs-fringe-indicator-face ((,c :foreground ,fg-main))) + `(treemacs-git-added-face ((,c :inherit success))) + `(treemacs-git-commit-diff-face ((,c :foreground ,err))) + `(treemacs-git-conflict-face ((,c :inherit error))) + `(treemacs-git-ignored-face ((,c :inherit shadow))) + `(treemacs-git-modified-face ((,c :inherit warning))) + `(treemacs-git-renamed-face ((,c :inherit italic))) + `(treemacs-git-unmodified-face ((,c :foreground ,fg-main))) + `(treemacs-git-untracked-face ((,c :inherit success))) + `(treemacs-header-button-face ((,c :foreground ,fg-main))) + `(treemacs-help-column-face ((,c :inherit modus-themes-bold :foreground ,keyword))) + `(treemacs-help-title-face ((,c :foreground ,fg-main))) + `(treemacs-hl-line-face ((,c :background ,bg-hl-line :extend t))) + `(treemacs-marked-file-face ((,c :inherit modus-themes-mark-alt))) + `(treemacs-nerd-icons-face ((,c :foreground ,accent-0))) + `(treemacs-on-failure-pulse-face ((,c :foreground ,fg-main))) + `(treemacs-on-success-pulse-face ((,c :foreground ,fg-main))) + `(treemacs-peek-mode-indicator-face ((,c :foreground ,fg-main))) + `(treemacs-remote-face ((,c :foreground ,fg-main))) + `(treemacs-root-face ((,c :foreground ,accent-0))) + `(treemacs-root-remote-disconnected-face ((,c :inherit warning))) + `(treemacs-root-remote-unreadable-face ((,c :inherit warning))) + `(treemacs-root-unreadable-face ((,c :inherit error))) + `(treemacs-tags-face ((,c :foreground ,fg-main))) + `(treemacs-term-node-face ((,c :inherit modus-themes-bold :foreground ,keyword))) + `(treemacs-window-background-face ((,c :background ,bg-main))) + `(treemacs-nerd-icons-root-face ((,c :foreground ,accent-0))) + `(treemacs-nerd-icons-file-face ((,c :foreground ,accent-0))) ;;;;; tree-sitter `(tree-sitter-hl-face:attribute ((,c :inherit font-lock-variable-name-face))) `(tree-sitter-hl-face:constant.builtin ((,c :inherit tree-sitter-hl-face:constant))) @@ -3930,8 +4025,8 @@ FG and BG are the main colors." ;;;;; vertico `(vertico-current ((,c :inherit modus-themes-completion-selected))) ;;;;; vertico-quick - `(vertico-quick1 ((,c :inherit bold :background ,bg-char-0))) - `(vertico-quick2 ((,c :inherit bold :background ,bg-char-1))) + `(vertico-quick1 ((,c :inherit (bold modus-themes-search-current)))) + `(vertico-quick2 ((,c :inherit (bold modus-themes-search-current)))) ;;;;; vimish-fold `(vimish-fold-fringe ((,c :foreground ,cyan))) `(vimish-fold-mouse-face ((,c :inherit modus-themes-intense-blue))) @@ -3956,20 +4051,24 @@ FG and BG are the main colors." `(vr/match-1 ((,c :inherit modus-themes-search-lazy))) `(vr/match-separator-face ((,c :inherit bold :background ,bg-active))) ;;;;; vterm - ;; NOTE 2023-08-10: `vterm-color-black' and `vterm-color-white' - ;; use the "bright" semantic color mappings to make sure they are - ;; distinct from `vterm-color-default'. `(vterm-color-black ((,c :background ,bg-term-black :foreground ,fg-term-black))) + `(vterm-color-bright-black ((,c :background ,bg-term-black-bright :foreground ,fg-term-black-bright))) + `(vterm-color-red ((,c :background ,bg-term-red :foreground ,fg-term-red))) + `(vterm-color-bright-red ((,c :background ,bg-term-red-bright :foreground ,fg-term-red-bright))) + `(vterm-color-green ((,c :background ,bg-term-green :foreground ,fg-term-green))) + `(vterm-color-bright-green ((,c :background ,bg-term-green-bright :foreground ,fg-term-green-bright))) + `(vterm-color-yellow ((,c :background ,bg-term-yellow :foreground ,fg-term-yellow))) + `(vterm-color-bright-yellow ((,c :background ,bg-term-yellow-bright :foreground ,fg-term-yellow-bright))) `(vterm-color-blue ((,c :background ,bg-term-blue :foreground ,fg-term-blue))) + `(vterm-color-bright-blue ((,c :background ,bg-term-blue-bright :foreground ,fg-term-blue-bright))) + `(vterm-color-magenta ((,c :background ,bg-term-magenta :foreground ,fg-term-magenta))) + `(vterm-color-bright-magenta ((,c :background ,bg-term-magenta-bright :foreground ,fg-term-magenta-bright))) `(vterm-color-cyan ((,c :background ,bg-term-cyan :foreground ,fg-term-cyan))) - `(vterm-color-default ((,c :background ,bg-main :foreground ,fg-main))) - `(vterm-color-green ((,c :background ,bg-term-green :foreground ,fg-term-green))) + `(vterm-color-bright-cyan ((,c :background ,bg-term-cyan-bright :foreground ,fg-term-cyan-bright))) + `(vterm-color-white ((,c :background ,bg-term-white :foreground ,fg-term-white))) + `(vterm-color-bright-white ((,c :background ,bg-term-white-bright :foreground ,fg-term-white-bright))) `(vterm-color-inverse-video ((,c :background ,bg-main :inverse-video t))) - `(vterm-color-magenta ((,c :background ,bg-term-magenta :foreground ,fg-term-magenta))) - `(vterm-color-red ((,c :background ,bg-term-red :foreground ,fg-term-red))) `(vterm-color-underline ((,c :underline t))) - `(vterm-color-white ((,c :background ,bg-term-white :foreground ,fg-term-white))) - `(vterm-color-yellow ((,c :background ,bg-term-yellow :foreground ,fg-term-yellow))) ;;;;; vundo `(vundo-default ((,c :inherit shadow))) `(vundo-highlight ((,c :inherit (bold vundo-node) :foreground ,red))) diff --git a/etc/themes/modus-vivendi-deuteranopia-theme.el b/etc/themes/modus-vivendi-deuteranopia-theme.el index ec4a97ff434..676432f8531 100644 --- a/etc/themes/modus-vivendi-deuteranopia-theme.el +++ b/etc/themes/modus-vivendi-deuteranopia-theme.el @@ -1,6 +1,6 @@ ;;; modus-vivendi-deuteranopia-theme.el --- Deuteranopia-optimized theme with a black background -*- lexical-binding:t -*- -;; Copyright (C) 2019-2025 Free Software Foundation, Inc. +;; Copyright (C) 2019-2025 Free Software Foundation, Inc. ;; Author: Protesilaos Stavrou ;; Maintainer: Protesilaos Stavrou @@ -167,15 +167,11 @@ standard)." (bg-completion "#2f447f") (bg-hover "#45605e") - (bg-hover-secondary "#654a39") + (bg-hover-secondary "#604c30") (bg-hl-line "#2f3849") (bg-region "#5a5a5a") (fg-region "#ffffff") - (bg-char-0 "#0050af") - (bg-char-1 "#7f1f7f") - (bg-char-2 "#625a00") - (bg-mode-line-active "#2a2a6a") (fg-mode-line-active "#f0f0f0") (border-mode-line-active "#8080a7") @@ -216,13 +212,6 @@ standard)." (bg-diff-context "#1a1a1a") -;;; Paren match - - (bg-paren-match "#2f7f9f") - (fg-paren-match fg-main) - (bg-paren-expression "#453040") - (underline-paren-match unspecified) - ;;; Mappings ;;;; General mappings @@ -257,17 +246,17 @@ standard)." ;;;; Code mappings (bracket fg-main) - (builtin magenta-warmer) + (builtin yellow) (comment yellow-cooler) - (constant blue-cooler) + (constant blue-faint) (delimiter fg-main) (docmarkup magenta-faint) (docstring cyan-faint) - (fnname magenta) - (keyword magenta-cooler) + (fnname yellow-warmer) + (keyword blue-cooler) (number fg-main) (operator fg-main) - (preprocessor red-cooler) + (preprocessor magenta-cooler) (punctuation fg-main) (rx-backslash blue-cooler) (rx-construct yellow-cooler) @@ -275,12 +264,19 @@ standard)." (type cyan-cooler) (variable cyan) +;;;; Paren match + + (bg-paren-match bg-cyan-subtle) + (fg-paren-match fg-main) + (underline-paren-match unspecified) + (bg-paren-expression bg-yellow-nuanced) + ;;;; Accent mappings - (accent-0 blue-cooler) + (accent-0 blue-warmer) (accent-1 yellow) (accent-2 cyan-cooler) - (accent-3 magenta-warmer) + (accent-3 yellow-cooler) ;;;; Button mappings @@ -294,7 +290,7 @@ standard)." (fg-completion-match-0 blue-cooler) (fg-completion-match-1 yellow) (fg-completion-match-2 cyan-cooler) - (fg-completion-match-3 magenta-warmer) + (fg-completion-match-3 yellow-cooler) (bg-completion-match-0 unspecified) (bg-completion-match-1 unspecified) (bg-completion-match-2 unspecified) @@ -313,7 +309,7 @@ standard)." (date-scheduled yellow-cooler) (date-scheduled-subtle yellow-faint) (date-weekday cyan) - (date-weekend magenta) + (date-weekend magenta-cooler) ;;;; Line number mappings @@ -374,7 +370,7 @@ standard)." (fg-prose-macro magenta-cooler) (bg-prose-verbatim unspecified) - (fg-prose-verbatim magenta-warmer) + (fg-prose-verbatim yellow) (prose-done blue) (prose-todo yellow-warmer) @@ -385,7 +381,7 @@ standard)." (prose-table fg-alt) (prose-table-formula yellow-warmer) - (prose-tag magenta-faint) + (prose-tag fg-alt) ;;;; Rainbow mappings @@ -403,7 +399,7 @@ standard)." (bg-search-current bg-yellow-intense) (bg-search-lazy bg-blue-intense) - (bg-search-replace bg-magenta-intense) + (bg-search-replace bg-yellow-intense) (bg-search-rx-group-0 bg-cyan-intense) (bg-search-rx-group-1 bg-magenta-intense) @@ -464,10 +460,10 @@ standard)." (fg-heading-1 fg-main) (fg-heading-2 yellow-faint) (fg-heading-3 blue-faint) - (fg-heading-4 magenta) - (fg-heading-5 green-faint) - (fg-heading-6 red-faint) - (fg-heading-7 cyan-faint) + (fg-heading-4 green-faint) + (fg-heading-5 magenta-cooler) + (fg-heading-6 yellow-cooler) + (fg-heading-7 cyan) (fg-heading-8 fg-dim) (bg-heading-0 unspecified) diff --git a/etc/themes/modus-vivendi-theme.el b/etc/themes/modus-vivendi-theme.el index 523e1586c3e..b613353ade7 100644 --- a/etc/themes/modus-vivendi-theme.el +++ b/etc/themes/modus-vivendi-theme.el @@ -1,6 +1,6 @@ ;;; modus-vivendi-theme.el --- Elegant, highly legible theme with a black background -*- lexical-binding:t -*- -;; Copyright (C) 2019-2025 Free Software Foundation, Inc. +;; Copyright (C) 2019-2025 Free Software Foundation, Inc. ;; Author: Protesilaos Stavrou ;; Maintainer: Protesilaos Stavrou @@ -170,10 +170,6 @@ which corresponds to a minimum contrast in relative luminance of (bg-region "#5a5a5a") (fg-region "#ffffff") - (bg-char-0 "#0050af") - (bg-char-1 "#7f1f7f") - (bg-char-2 "#625a00") - (bg-mode-line-active "#505050") (fg-mode-line-active "#ffffff") (border-mode-line-active "#959595") @@ -214,13 +210,6 @@ which corresponds to a minimum contrast in relative luminance of (bg-diff-context "#1a1a1a") -;;; Paren match - - (bg-paren-match "#2f7f9f") - (fg-paren-match fg-main) - (bg-paren-expression "#453040") - (underline-paren-match unspecified) - ;;; Mappings ;;;; General mappings @@ -273,6 +262,13 @@ which corresponds to a minimum contrast in relative luminance of (type cyan-cooler) (variable cyan) +;;;; Paren match + + (bg-paren-match bg-cyan-subtle) + (fg-paren-match fg-main) + (underline-paren-match unspecified) + (bg-paren-expression bg-yellow-nuanced) + ;;;; Accent mappings (accent-0 blue-cooler) diff --git a/etc/themes/modus-vivendi-tinted-theme.el b/etc/themes/modus-vivendi-tinted-theme.el index 03fb25edd02..ba186fc9f8f 100644 --- a/etc/themes/modus-vivendi-tinted-theme.el +++ b/etc/themes/modus-vivendi-tinted-theme.el @@ -1,6 +1,6 @@ ;;; modus-vivendi-tinted-theme.el --- Elegant, highly legible theme with a night sky background -*- lexical-binding:t -*- -;; Copyright (C) 2019-2025 Free Software Foundation, Inc. +;; Copyright (C) 2019-2025 Free Software Foundation, Inc. ;; Author: Protesilaos Stavrou ;; Maintainer: Protesilaos Stavrou @@ -71,11 +71,11 @@ which corresponds to a minimum contrast in relative luminance of (red "#ff5f59") (red-warmer "#ff6b55") (red-cooler "#ff7f86") - (red-faint "#ff9f80") + (red-faint "#ef8386") (red-intense "#ff5f5f") (green "#44bc44") - (green-warmer "#70b900") - (green-cooler "#00c06f") + (green-warmer "#75c13e") + (green-cooler "#11c777") (green-faint "#88ca9f") (green-intense "#44df44") (yellow "#d0bc00") @@ -165,15 +165,11 @@ which corresponds to a minimum contrast in relative luminance of (bg-completion "#483d8a") (bg-hover "#45605e") - (bg-hover-secondary "#654a39") + (bg-hover-secondary "#64404f") (bg-hl-line "#303a6f") (bg-region "#555a66") (fg-region "#ffffff") - (bg-char-0 "#0050af") - (bg-char-1 "#7f1f7f") - (bg-char-2 "#625a00") - (bg-mode-line-active "#484d67") (fg-mode-line-active "#ffffff") (border-mode-line-active "#979797") @@ -214,13 +210,6 @@ which corresponds to a minimum contrast in relative luminance of (bg-diff-context "#1a1f30") -;;; Paren match - - (bg-paren-match "#5f789f") - (fg-paren-match fg-main) - (bg-paren-expression "#453040") - (underline-paren-match unspecified) - ;;; Mappings ;;;; General mappings @@ -233,8 +222,8 @@ which corresponds to a minimum contrast in relative luminance of (identifier yellow-faint) (err red) - (warning yellow-warmer) - (info cyan-cooler) + (warning yellow) + (info green-cooler) (underline-err red-intense) (underline-warning yellow) @@ -255,30 +244,37 @@ which corresponds to a minimum contrast in relative luminance of ;;;; Code mappings (bracket fg-main) - (builtin magenta-warmer) + (builtin magenta) (comment red-faint) - (constant blue-cooler) + (constant magenta-cooler) (delimiter fg-main) (docmarkup magenta-faint) (docstring cyan-faint) - (fnname magenta) - (keyword magenta-cooler) + (fnname magenta-warmer) + (keyword blue-warmer) (number fg-main) (operator fg-main) (preprocessor red-cooler) (punctuation fg-main) - (rx-backslash magenta) - (rx-construct green-cooler) - (string blue-warmer) - (type cyan-cooler) - (variable cyan) + (rx-backslash magenta-warmer) + (rx-construct magenta-cooler) + (string blue) + (type green-cooler) + (variable cyan-warmer) + +;;;; Paren match + + (bg-paren-match bg-cyan-subtle) + (fg-paren-match fg-main) + (underline-paren-match unspecified) + (bg-paren-expression bg-yellow-nuanced) ;;;; Accent mappings - (accent-0 blue-cooler) - (accent-1 magenta-warmer) - (accent-2 cyan-cooler) - (accent-3 yellow) + (accent-0 magenta-cooler) + (accent-1 cyan) + (accent-2 magenta-warmer) + (accent-3 yellow-warmer) ;;;; Button mappings @@ -336,14 +332,14 @@ which corresponds to a minimum contrast in relative luminance of ;;;; Mail mappings - (mail-cite-0 blue-warmer) + (mail-cite-0 blue) (mail-cite-1 yellow-cooler) (mail-cite-2 cyan-cooler) (mail-cite-3 red-cooler) - (mail-part blue) - (mail-recipient magenta-cooler) + (mail-part magenta-cooler) + (mail-recipient blue-warmer) (mail-subject magenta-warmer) - (mail-other magenta-faint) + (mail-other magenta) ;;;; Mark mappings @@ -356,7 +352,7 @@ which corresponds to a minimum contrast in relative luminance of ;;;; Prompt mappings - (fg-prompt cyan-cooler) + (fg-prompt cyan-warmer) (bg-prompt unspecified) ;;;; Prose mappings diff --git a/etc/themes/modus-vivendi-tritanopia-theme.el b/etc/themes/modus-vivendi-tritanopia-theme.el index a06f8e04cb9..7929c69e31b 100644 --- a/etc/themes/modus-vivendi-tritanopia-theme.el +++ b/etc/themes/modus-vivendi-tritanopia-theme.el @@ -1,6 +1,6 @@ ;;; modus-vivendi-tritanopia-theme.el --- Tritanopia-optimized theme with a black background -*- lexical-binding:t -*- -;; Copyright (C) 2019-2025 Free Software Foundation, Inc. +;; Copyright (C) 2019-2025 Free Software Foundation, Inc. ;; Author: Protesilaos Stavrou ;; Maintainer: Protesilaos Stavrou @@ -63,7 +63,7 @@ standard)." (bg-dim "#1e1e1e") (fg-main "#ffffff") (fg-dim "#989898") - (fg-alt "#c6daff") + (fg-alt "#a0d7f2") (bg-active "#535353") (bg-inactive "#303030") (border "#646464") @@ -167,15 +167,11 @@ standard)." (bg-completion "#004253") (bg-hover "#8e3e3b") - (bg-hover-secondary "#00405f") + (bg-hover-secondary "#204853") (bg-hl-line "#2f3849") (bg-region "#5a5a5a") (fg-region "#ffffff") - (bg-char-0 "#922a00") - (bg-char-1 "#00709f") - (bg-char-2 "#5f3faf") - (bg-mode-line-active "#003c52") (fg-mode-line-active "#f0f0f0") (border-mode-line-active "#5f8fb4") @@ -216,13 +212,6 @@ standard)." (bg-diff-context "#1a1a1a") -;;; Paren match - - (bg-paren-match "#2f7f9f") - (fg-paren-match fg-main) - (bg-paren-expression "#453040") - (underline-paren-match unspecified) - ;;; Mappings ;;;; General mappings @@ -275,6 +264,13 @@ standard)." (type blue-warmer) (variable cyan-cooler) +;;;; Paren match + + (bg-paren-match bg-cyan-subtle) + (fg-paren-match fg-main) + (underline-paren-match unspecified) + (bg-paren-expression bg-red-nuanced) + ;;;; Accent mappings (accent-0 cyan) @@ -385,7 +381,7 @@ standard)." (prose-table fg-alt) (prose-table-formula red-cooler) - (prose-tag magenta-faint) + (prose-tag fg-alt) ;;;; Rainbow mappings commit ee46b6c4e67aa52b4ef683c5c16f64638e369cd3 Author: Juri Linkov Date: Thu Apr 17 09:49:04 2025 +0300 Use the first parser from 'treesit-parser-list' to fix tests. * lisp/treesit.el (treesit-parsers-at): Add treesit-primary-parser only when it's non-nil. When the result list is still empty, add the first parser from 'treesit-parser-list'. https://lists.gnu.org/archive/html/emacs-devel/2025-04/msg00627.html * test/src/treesit-tests.el (treesit-node-supplemental) (treesit-node-at, treesit-node-check) (treesit-search-subtree-forward-1) (treesit-search-subtree-backward-1): Wrap test body in 'with-temp-buffer'. diff --git a/lisp/treesit.el b/lisp/treesit.el index 156e0b87709..8be6276decb 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -873,8 +873,10 @@ If ONLY contains the symbol `primary', include the primary parser." (and (memq 'global only) (not (overlay-get ov 'treesit-parser-local-p)))))) (push (if with-host (cons parser host-parser) parser) res))) - (when (or (null only) (memq 'primary only)) - (setq res (cons treesit-primary-parser res))) + (when (and treesit-primary-parser (or (null only) (memq 'primary only))) + (push treesit-primary-parser res)) + (unless res + (push (car (treesit-parser-list)) res)) (seq-sort-by (lambda (p) (treesit-parser-embed-level (or (car-safe p) p))) diff --git a/test/src/treesit-tests.el b/test/src/treesit-tests.el index caacb74315d..770849c4566 100644 --- a/test/src/treesit-tests.el +++ b/test/src/treesit-tests.el @@ -835,104 +835,107 @@ visible_end.)" (ert-deftest treesit-node-supplemental () "Supplemental node functions." (skip-unless (treesit-language-available-p 'json)) - (let (parser root-node doc-node) - (progn - (insert "[1,2,{\"name\": \"Bob\"},3]") - (setq parser (treesit-parser-create 'json)) - (setq root-node (treesit-parser-root-node - parser)) - (setq doc-node (treesit-node-child root-node 0))) - ;; `treesit-node-buffer'. - (should (equal (treesit-node-buffer root-node) - (current-buffer))) - ;; `treesit-node-language'. - (should (eq (treesit-node-language root-node) - 'json)) - ;; `treesit-node-at'. - (should (equal (treesit-node-string - (treesit-node-at 1 'json)) - "(\"[\")")) - ;; `treesit-node-on' - (should (equal (treesit-node-string - (treesit-node-on 1 2 'json)) - "(\"[\")")) - ;; `treesit-buffer-root-node'. - (should (treesit-node-eq - (treesit-buffer-root-node 'json) - root-node)) - ;; `treesit-filter-child'. - (should (equal (mapcar - (lambda (node) - (treesit-node-type node)) - (treesit-filter-child - doc-node (lambda (node) - (treesit-node-check node 'named)))) - '("number" "number" "object" "number"))) - ;; `treesit-node-text'. - (should (equal (treesit-node-text doc-node) - "[1,2,{\"name\": \"Bob\"},3]")) - ;; `treesit-node-index'. - (should (eq (treesit-node-index doc-node) - 0)) - ;; TODO: - ;; `treesit-parent-until' - ;; `treesit-parent-while' - ;; `treesit-node-children' - ;; `treesit-node-field-name' - ;; `treesit-search-forward-goto' - )) + (with-temp-buffer + (let (parser root-node doc-node) + (progn + (insert "[1,2,{\"name\": \"Bob\"},3]") + (setq parser (treesit-parser-create 'json)) + (setq root-node (treesit-parser-root-node + parser)) + (setq doc-node (treesit-node-child root-node 0))) + ;; `treesit-node-buffer'. + (should (equal (treesit-node-buffer root-node) + (current-buffer))) + ;; `treesit-node-language'. + (should (eq (treesit-node-language root-node) + 'json)) + ;; `treesit-node-at'. + (should (equal (treesit-node-string + (treesit-node-at 1 'json)) + "(\"[\")")) + ;; `treesit-node-on' + (should (equal (treesit-node-string + (treesit-node-on 1 2 'json)) + "(\"[\")")) + ;; `treesit-buffer-root-node'. + (should (treesit-node-eq + (treesit-buffer-root-node 'json) + root-node)) + ;; `treesit-filter-child'. + (should (equal (mapcar + (lambda (node) + (treesit-node-type node)) + (treesit-filter-child + doc-node (lambda (node) + (treesit-node-check node 'named)))) + '("number" "number" "object" "number"))) + ;; `treesit-node-text'. + (should (equal (treesit-node-text doc-node) + "[1,2,{\"name\": \"Bob\"},3]")) + ;; `treesit-node-index'. + (should (eq (treesit-node-index doc-node) + 0)) + ;; TODO: + ;; `treesit-parent-until' + ;; `treesit-parent-while' + ;; `treesit-node-children' + ;; `treesit-node-field-name' + ;; `treesit-search-forward-goto' + ))) (ert-deftest treesit-node-at () "Test `treesit-node-at'." (skip-unless (treesit-language-available-p 'json)) - (let (parser) - (progn - (insert "[1, 2, 3,4] ") - (setq parser (treesit-parser-create 'json)) - (treesit-parser-root-node parser)) - ;; Point at ",", should return ",". - (goto-char (point-min)) - (search-forward "1") - (should (equal (treesit-node-text - (treesit-node-at (point))) - ",")) - ;; Point behind ",", should still return the ",". - (search-forward ",") - (should (equal (treesit-node-text - (treesit-node-at (point))) - ",")) - ;; Point between "," and "2", should return 2. - (forward-char) - (should (equal (treesit-node-text - (treesit-node-at (point))) - "2")) - ;; EOF, should return the last leaf node "]". - (goto-char (point-max)) - (should (equal (treesit-node-text - (treesit-node-at (point))) - "]")))) + (with-temp-buffer + (let (parser) + (progn + (insert "[1, 2, 3,4] ") + (setq parser (treesit-parser-create 'json)) + (treesit-parser-root-node parser)) + ;; Point at ",", should return ",". + (goto-char (point-min)) + (search-forward "1") + (should (equal (treesit-node-text + (treesit-node-at (point))) + ",")) + ;; Point behind ",", should still return the ",". + (search-forward ",") + (should (equal (treesit-node-text + (treesit-node-at (point))) + ",")) + ;; Point between "," and "2", should return 2. + (forward-char) + (should (equal (treesit-node-text + (treesit-node-at (point))) + "2")) + ;; EOF, should return the last leaf node "]". + (goto-char (point-max)) + (should (equal (treesit-node-text + (treesit-node-at (point))) + "]"))))) (ert-deftest treesit-node-check () "Test `treesit-node-check'." (skip-unless (treesit-language-available-p 'json)) - (let (parser root-node array-node comment-node) - (progn - (insert "/* comment */ [1, 2, 3,4 ") - (setq parser (treesit-parser-create 'json)) - (setq root-node (treesit-parser-root-node - parser)) - (setq comment-node (treesit-node-child root-node 0)) - (setq array-node (treesit-node-child root-node 1))) - - (should (treesit-node-check comment-node 'extra)) - (should (treesit-node-check array-node 'has-error)) - (should-error (treesit-node-check array-node 'xxx)) - (should (treesit-node-check (treesit-node-child array-node -1) - 'missing)) - (goto-char (point-max)) - (insert "]") - (treesit-parser-root-node parser) - (should (treesit-node-check array-node 'outdated)))) + (with-temp-buffer + (let (parser root-node array-node comment-node) + (progn + (insert "/* comment */ [1, 2, 3,4 ") + (setq parser (treesit-parser-create 'json)) + (setq root-node (treesit-parser-root-node + parser)) + (setq comment-node (treesit-node-child root-node 0)) + (setq array-node (treesit-node-child root-node 1))) + + (should (treesit-node-check comment-node 'extra)) + (should (treesit-node-check array-node 'has-error)) + (should-error (treesit-node-check array-node 'xxx)) + (should (treesit-node-check (treesit-node-child array-node -1) + 'missing)) + (goto-char (point-max)) + (insert "]") + (treesit-parser-root-node parser) + (should (treesit-node-check array-node 'outdated))))) ;;; Defun navigation ;; @@ -1262,36 +1265,38 @@ This tests bug#60355." "Test search subtree forward." (skip-unless (treesit-language-available-p 'python)) (require 'python) - (python-ts-mode) - (insert "Temp(1, 2)") - (goto-char (point-min)) - (pcase-let* ((`((,_ . ,call-node)) - (treesit-query-capture (treesit-buffer-root-node) - '((call) @c))) - (node (treesit-search-subtree - call-node - (lambda (n) (equal (treesit-node-type n) "integer"))))) - - (should node) - (should (equal (treesit-node-text node) "1")))) + (with-temp-buffer + (python-ts-mode) + (insert "Temp(1, 2)") + (goto-char (point-min)) + (pcase-let* ((`((,_ . ,call-node)) + (treesit-query-capture (treesit-buffer-root-node) + '((call) @c))) + (node (treesit-search-subtree + call-node + (lambda (n) (equal (treesit-node-type n) "integer"))))) + + (should node) + (should (equal (treesit-node-text node) "1"))))) (ert-deftest treesit-search-subtree-backward-1 () "Test search subtree with backward=t." (skip-unless (treesit-language-available-p 'python)) (require 'python) - (python-ts-mode) - (insert "Temp(1, 2)") - (goto-char (point-min)) - (pcase-let* ((`((,_ . ,call-node)) - (treesit-query-capture (treesit-buffer-root-node) - '((call) @c))) - (node (treesit-search-subtree - call-node - (lambda (n) (equal (treesit-node-type n) "integer")) - t))) - - (should node) - (should (equal (treesit-node-text node) "2")))) + (with-temp-buffer + (python-ts-mode) + (insert "Temp(1, 2)") + (goto-char (point-min)) + (pcase-let* ((`((,_ . ,call-node)) + (treesit-query-capture (treesit-buffer-root-node) + '((call) @c))) + (node (treesit-search-subtree + call-node + (lambda (n) (equal (treesit-node-type n) "integer")) + t))) + + (should node) + (should (equal (treesit-node-text node) "2"))))) ;;; Imenu commit 2925ff6c5383408fa6ad780066469970aa833d38 Author: Eli Zaretskii Date: Thu Apr 17 09:25:09 2025 +0300 Don't override 'revert-buffer-function' globally in 'eww-buffers-mode' * lisp/net/eww.el (eww-buffers-mode): Set 'revert-buffer-function' buffer-locally. (Bug#77854) diff --git a/lisp/net/eww.el b/lisp/net/eww.el index caee50a712f..7edd1acbcf9 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el @@ -2816,10 +2816,10 @@ The format of the data is (title url buffer), for use in of \\{eww-buffers-mode-map}" :interactive nil (buffer-disable-undo) - (setq truncate-lines t - ;; This is set so that pressing "g" with point just below the - ;; table will still update the listing. - revert-buffer-function #'eww--list-buffers-display-table)) + (setq truncate-lines t) + ;; This is set so that pressing "g" with point just below the table + ;; will still update the listing. + (setq-local revert-buffer-function #'eww--list-buffers-display-table)) ;;; Desktop support commit 4fcba8456e897cc77d1825e696aacb446ce45405 Author: Stefan Kangas Date: Thu Apr 17 07:56:55 2025 +0200 Delete duplicate docstrings in PGTK build * src/pgtkfns.c (Fx_export_frames, Fx_create_frame) (Fx_server_max_request_size, Fx_display_screens, Fx_display_mm_height) (Fx_display_mm_width, Fx_display_backing_store, Fx_display_visual_class) (Fx_display_save_under, Fx_open_connection, Fx_close_connection) (Fx_display_list, Fxw_color_defined_p, Fxw_color_values) (Fxw_display_color_p, Fx_display_grayscale_p, Fx_display_pixel_width) (Fx_display_pixel_height, Fx_display_planes, Fx_display_color_cells) (Fx_show_tip, Fx_hide_tip, Fx_file_dialog, Fx_select_font): Replace duplicate docstrings with "SKIP" marker. See the comment in doc.c. * src/xfns.c (Fx_server_max_request_size, Fx_display_screens) (Fx_display_backing_store, Fx_display_visual_class, Fx_file_dialog): Update docstrings with details about the PGTK build. diff --git a/src/pgtkfns.c b/src/pgtkfns.c index 6231ef1cb48..e979b84d2e6 100644 --- a/src/pgtkfns.c +++ b/src/pgtkfns.c @@ -879,15 +879,7 @@ pgtk_set_scroll_bar_background (struct frame *f, Lisp_Object new_value, DEFUN ("x-export-frames", Fx_export_frames, Sx_export_frames, 0, 2, 0, - doc: /* Return image data of FRAMES in TYPE format. -FRAMES should be nil (the selected frame), a frame, or a list of -frames (each of which corresponds to one page). Each frame should be -visible. Optional arg TYPE should be either `pdf' (default), `png', -`postscript', or `svg'. Supported types are determined by the -compile-time configuration of cairo. - -Note: Text drawn with the `x' font backend is shown with hollow boxes -unless TYPE is `png'. */) + doc: /* SKIP: real doc in xfns.c. */) (Lisp_Object frames, Lisp_Object type) { Lisp_Object rest, tmp; @@ -1178,14 +1170,7 @@ scale factor. */) } DEFUN ("x-create-frame", Fx_create_frame, Sx_create_frame, 1, 1, 0, - doc: /* Make a new X window, which is called a "frame" in Emacs terms. -Return an Emacs frame object. PARMS is an alist of frame parameters. -If the parameters specify that the frame should not have a minibuffer, -and do not specify a specific minibuffer window to use, then -`default-minibuffer-frame' must be a frame whose minibuffer can be -shared by the new frame. - -This function is an internal primitive--use `make-frame' instead. */ ) + doc: /* SKIP: real doc in xfns.c. */ ) (Lisp_Object parms) { struct frame *f; @@ -2003,7 +1988,7 @@ DEFUN ("pgtk-set-resource", Fpgtk_set_resource, Spgtk_set_resource, 2, 2, 0, DEFUN ("x-server-max-request-size", Fx_server_max_request_size, Sx_server_max_request_size, 0, 1, 0, - doc: /* This function is a no-op. It is only present for completeness. */ ) + doc: /* SKIP: real doc in xfns.c. */ ) (Lisp_Object terminal) { check_pgtk_display_info (terminal); @@ -2014,13 +1999,7 @@ DEFUN ("x-server-max-request-size", Fx_server_max_request_size, Sx_server_max_re DEFUN ("x-display-screens", Fx_display_screens, Sx_display_screens, 0, 1, 0, - doc: /* Return the number of screens on the display server TERMINAL. -The optional argument TERMINAL specifies which display to ask about. -TERMINAL should be a terminal object, a frame or a display name (a string). -If omitted or nil, that stands for the selected frame's display. - -Note: "screen" here is not in X11's. For the number of physical monitors, -use `(length \(display-monitor-attributes-list TERMINAL))' instead. */) + doc: /* SKIP: real doc in xfns.c. */) (Lisp_Object terminal) { check_pgtk_display_info (terminal); @@ -2029,14 +2008,7 @@ use `(length \(display-monitor-attributes-list TERMINAL))' instead. */) DEFUN ("x-display-mm-height", Fx_display_mm_height, Sx_display_mm_height, 0, 1, 0, - doc: /* Return the height in millimeters of the display TERMINAL. -The optional argument TERMINAL specifies which display to ask about. -TERMINAL should be a terminal object, a frame or a display name (a string). -If omitted or nil, that stands for the selected frame's display. - -On \"multi-monitor\" setups this refers to the height in millimeters for -all physical monitors associated with TERMINAL. To get information -for each physical monitor, use `display-monitor-attributes-list'. */) + doc: /* SKIP: real doc in xfns.c. */) (Lisp_Object terminal) { struct pgtk_display_info *dpyinfo = check_pgtk_display_info (terminal); @@ -2070,14 +2042,7 @@ for each physical monitor, use `display-monitor-attributes-list'. */) DEFUN ("x-display-mm-width", Fx_display_mm_width, Sx_display_mm_width, 0, 1, 0, - doc: /* Return the width in millimeters of the display TERMINAL. -The optional argument TERMINAL specifies which display to ask about. -TERMINAL should be a terminal object, a frame or a display name (a string). -If omitted or nil, that stands for the selected frame's display. - -On \"multi-monitor\" setups this refers to the width in millimeters for -all physical monitors associated with TERMINAL. To get information -for each physical monitor, use `display-monitor-attributes-list'. */) + doc: /* SKIP: real doc in xfns.c. */) (Lisp_Object terminal) { struct pgtk_display_info *dpyinfo = check_pgtk_display_info (terminal); @@ -2111,11 +2076,7 @@ for each physical monitor, use `display-monitor-attributes-list'. */) DEFUN ("x-display-backing-store", Fx_display_backing_store, Sx_display_backing_store, 0, 1, 0, - doc: /* Return an indication of whether the display TERMINAL does backing store. -The value may be `buffered', `retained', or `non-retained'. -The optional argument TERMINAL specifies which display to ask about. -TERMINAL should be a terminal object, a frame or a display name (a string). -If omitted or nil, that stands for the selected frame's display. */) + doc: /* SKIP: real doc in xfns.c. */) (Lisp_Object terminal) { check_pgtk_display_info (terminal); @@ -2124,15 +2085,7 @@ If omitted or nil, that stands for the selected frame's display. */) DEFUN ("x-display-visual-class", Fx_display_visual_class, Sx_display_visual_class, 0, 1, 0, - doc: /* Return the visual class of the display TERMINAL. -The value is one of the symbols `static-gray', `gray-scale', -`static-color', `pseudo-color', `true-color', or `direct-color'. - -The optional argument TERMINAL specifies which display to ask about. -TERMINAL should a terminal object, a frame or a display name (a string). -If omitted or nil, that stands for the selected frame's display. - -On PGTK, always return true-color. */) + doc: /* SKIP: real doc in xfns.c. */) (Lisp_Object terminal) { return Qtrue_color; @@ -2140,10 +2093,7 @@ On PGTK, always return true-color. */) DEFUN ("x-display-save-under", Fx_display_save_under, Sx_display_save_under, 0, 1, 0, - doc: /* Return t if TERMINAL supports the save-under feature. -The optional argument TERMINAL specifies which display to ask about. -TERMINAL should be a terminal object, a frame or a display name (a string). -If omitted or nil, that stands for the selected frame's display. */) + doc: /* SKIP: real doc in xfns.c. */) (Lisp_Object terminal) { check_pgtk_display_info (terminal); @@ -2152,11 +2102,7 @@ If omitted or nil, that stands for the selected frame's display. */) DEFUN ("x-open-connection", Fx_open_connection, Sx_open_connection, 1, 3, 0, - doc: /* Open a connection to a display server. -DISPLAY is the name of the display to connect to. -Optional second arg XRM-STRING is a string of resources in xrdb format. -If the optional third arg MUST-SUCCEED is non-nil, -terminate Emacs if we can't open the connection. */) + doc: /* SKIP: real doc in xfns.c. */) (Lisp_Object display, Lisp_Object resource_string, Lisp_Object must_succeed) { struct pgtk_display_info *dpyinfo; @@ -2180,10 +2126,7 @@ terminate Emacs if we can't open the connection. */) DEFUN ("x-close-connection", Fx_close_connection, Sx_close_connection, 1, 1, 0, - doc: /* Close the connection to TERMINAL's display server. -For TERMINAL, specify a terminal object, a frame or a display name (a -string). If TERMINAL is nil, that stands for the selected frame's -terminal. */) + doc: /* SKIP: real doc in xfns.c. */) (Lisp_Object terminal) { struct pgtk_display_info *dpyinfo = check_pgtk_display_info (terminal); @@ -2198,7 +2141,7 @@ terminal. */) DEFUN ("x-display-list", Fx_display_list, Sx_display_list, 0, 0, 0, - doc: /* Return the list of display names that Emacs has connections to. */) + doc: /* SKIP: real doc in xfns.c. */) (void) { Lisp_Object result = Qnil; @@ -2306,7 +2249,7 @@ pgtk_get_focus_frame (struct frame *frame) } DEFUN ("xw-color-defined-p", Fxw_color_defined_p, Sxw_color_defined_p, 1, 2, 0, - doc: /* Internal function called by `color-defined-p', which see. */) + doc: /* SKIP: real doc in xfns.c. */) (Lisp_Object color, Lisp_Object frame) { Emacs_Color col; @@ -2322,7 +2265,7 @@ DEFUN ("xw-color-defined-p", Fxw_color_defined_p, Sxw_color_defined_p, 1, 2, 0, DEFUN ("xw-color-values", Fxw_color_values, Sxw_color_values, 1, 2, 0, - doc: /* Internal function called by `color-values', which see. */) + doc: /* SKIP: real doc in xfns.c. */) (Lisp_Object color, Lisp_Object frame) { Emacs_Color col; @@ -2337,7 +2280,7 @@ DEFUN ("xw-color-values", Fxw_color_values, Sxw_color_values, 1, 2, 0, } DEFUN ("xw-display-color-p", Fxw_display_color_p, Sxw_display_color_p, 0, 1, 0, - doc: /* Internal function called by `display-color-p', which see. */) + doc: /* SKIP: real doc in xfns.c. */) (Lisp_Object terminal) { check_pgtk_display_info (terminal); @@ -2345,25 +2288,14 @@ DEFUN ("xw-display-color-p", Fxw_display_color_p, Sxw_display_color_p, 0, 1, 0, } DEFUN ("x-display-grayscale-p", Fx_display_grayscale_p, Sx_display_grayscale_p, 0, 1, 0, - doc: /* Return t if the display supports shades of gray. -Note that color displays do support shades of gray. -The optional argument TERMINAL specifies which display to ask about. -TERMINAL should be a terminal object, a frame or a display name (a string). -If omitted or nil, that stands for the selected frame's display. */) + doc: /* SKIP: real doc in xfns.c. */) (Lisp_Object terminal) { return Qnil; } DEFUN ("x-display-pixel-width", Fx_display_pixel_width, Sx_display_pixel_width, 0, 1, 0, - doc: /* Return the width in pixels of the display TERMINAL. -The optional argument TERMINAL specifies which display to ask about. -TERMINAL should be a terminal object, a frame or a display name (a string). -If omitted or nil, that stands for the selected frame's display. - -On \"multi-monitor\" setups this refers to the pixel width for all -physical monitors associated with TERMINAL. To get information for -each physical monitor, use `display-monitor-attributes-list'. */) + doc: /* SKIP: real doc in xfns.c. */) (Lisp_Object terminal) { struct pgtk_display_info *dpyinfo = check_pgtk_display_info (terminal); @@ -2401,14 +2333,7 @@ each physical monitor, use `display-monitor-attributes-list'. */) } DEFUN ("x-display-pixel-height", Fx_display_pixel_height, Sx_display_pixel_height, 0, 1, 0, - doc: /* Return the height in pixels of the display TERMINAL. -The optional argument TERMINAL specifies which display to ask about. -TERMINAL should be a terminal object, a frame or a display name (a string). -If omitted or nil, that stands for the selected frame's display. - -On \"multi-monitor\" setups this refers to the pixel height for all -physical monitors associated with TERMINAL. To get information for -each physical monitor, use `display-monitor-attributes-list'. */) + doc: /* SKIP: real doc in xfns.c. */) (Lisp_Object terminal) { struct pgtk_display_info *dpyinfo = check_pgtk_display_info (terminal); @@ -2574,10 +2499,7 @@ pgtk_frame_scale_factor (struct frame *f) } DEFUN ("x-display-planes", Fx_display_planes, Sx_display_planes, 0, 1, 0, - doc: /* Return the number of bitplanes of the display TERMINAL. -The optional argument TERMINAL specifies which display to ask about. -TERMINAL should be a terminal object, a frame or a display name (a string). -If omitted or nil, that stands for the selected frame's display. */) + doc: /* SKIP: real doc in xfns.c. */) (Lisp_Object terminal) { check_pgtk_display_info (terminal); @@ -2586,10 +2508,7 @@ If omitted or nil, that stands for the selected frame's display. */) DEFUN ("x-display-color-cells", Fx_display_color_cells, Sx_display_color_cells, 0, 1, 0, - doc: /* Returns the number of color cells of the display TERMINAL. -The optional argument TERMINAL specifies which display to ask about. -TERMINAL should be a terminal object, a frame or a display name (a string). -If omitted or nil, that stands for the selected frame's display. */) + doc: /* SKIP: real doc in xfns.c. */) (Lisp_Object terminal) { struct pgtk_display_info *dpyinfo = check_pgtk_display_info (terminal); @@ -3071,36 +2990,7 @@ pgtk_hide_tip (bool delete) } DEFUN ("x-show-tip", Fx_show_tip, Sx_show_tip, 1, 6, 0, - doc: /* Show STRING in a "tooltip" window on frame FRAME. -A tooltip window is a small X window displaying a string. - -This is an internal function; Lisp code should call `tooltip-show'. - -FRAME nil or omitted means use the selected frame. - -PARMS is an optional list of frame parameters which can be used to -change the tooltip's appearance. - -Automatically hide the tooltip after TIMEOUT seconds. TIMEOUT nil -means use the default timeout from the `x-show-tooltip-timeout' -variable. - -If the list of frame parameters PARMS contains a `left' parameter, -display the tooltip at that x-position. If the list of frame parameters -PARMS contains no `left' but a `right' parameter, display the tooltip -right-adjusted at that x-position. Otherwise display it at the -x-position of the mouse, with offset DX added (default is 5 if DX isn't -specified). - -Likewise for the y-position: If a `top' frame parameter is specified, it -determines the position of the upper edge of the tooltip window. If a -`bottom' parameter but no `top' frame parameter is specified, it -determines the position of the lower edge of the tooltip window. -Otherwise display the tooltip window at the y-position of the mouse, -with offset DY added (default is -10). - -A tooltip's maximum size is specified by `x-max-tooltip-size'. -Text larger than the specified size is clipped. */) + doc: /* SKIP: real doc in xfns.c. */) (Lisp_Object string, Lisp_Object frame, Lisp_Object parms, Lisp_Object timeout, Lisp_Object dx, Lisp_Object dy) { @@ -3385,8 +3275,7 @@ Text larger than the specified size is clipped. */) DEFUN ("x-hide-tip", Fx_hide_tip, Sx_hide_tip, 0, 0, 0, - doc: /* Hide the current tooltip window, if there is any. -Value is t if tooltip was open, nil otherwise. */) + doc: /* SKIP: real doc in xfns.c. */) (void) { return pgtk_hide_tip (!tooltip_reuse_hidden_frame); @@ -3686,18 +3575,7 @@ clean_up_dialog (void) } DEFUN ("x-file-dialog", Fx_file_dialog, Sx_file_dialog, 2, 5, 0, - doc: /* Read file name, prompting with PROMPT in directory DIR. -Use a file selection dialog. Select DEFAULT-FILENAME in the dialog's file -selection box, if specified. If MUSTMATCH is non-nil, the returned file -or directory must exist. - -This function is defined only on PGTK, NS, MS Windows, and X Windows with the -Motif or Gtk toolkits. With the Motif toolkit, ONLY-DIR-P is ignored. -Otherwise, if ONLY-DIR-P is non-nil, the user can select only directories. -On MS Windows 7 and later, the file selection dialog "remembers" the last -directory where the user selected a file, and will open that directory -instead of DIR on subsequent invocations of this function with the same -value of DIR as in previous invocations; this is standard MS Windows behavior. */) + doc: /* SKIP: real doc in xfns.c. */) (Lisp_Object prompt, Lisp_Object dir, Lisp_Object default_filename, Lisp_Object mustmatch, Lisp_Object only_dir_p) { @@ -3763,10 +3641,7 @@ If omitted or nil, that stands for the selected frame's display. */) } DEFUN ("x-select-font", Fx_select_font, Sx_select_font, 0, 2, 0, - doc: /* Read a font using a GTK dialog and return a font spec. - -FRAME is the frame on which to pop up the font chooser. If omitted or -nil, it defaults to the selected frame. */) + doc: /* SKIP: real doc in xfns.c. */) (Lisp_Object frame, Lisp_Object ignored) { struct frame *f = decode_window_system_frame (frame); diff --git a/src/xfns.c b/src/xfns.c index 67b15428bf0..4f7be935000 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -5715,7 +5715,7 @@ TERMINAL should be a terminal object, a frame or a display name (a string). If omitted or nil, that stands for the selected frame's display. On MS Windows, this function just returns 1. -On Nextstep, this function just returns nil. */) +On Nextstep and PGTK, this function just returns nil. */) (Lisp_Object terminal) { struct x_display_info *dpyinfo = check_x_display_info (terminal); @@ -5800,8 +5800,11 @@ The optional argument TERMINAL specifies which display to ask about. TERMINAL should be a terminal object, a frame or a display name (a string). If omitted or nil, that stands for the selected frame's display. +On PGTK and Nextstep, "screen" is in X terminology, not that of Wayland +and Nextstep, respectively. + On MS Windows, this function just returns 1. -On Nextstep, "screen" is in X terminology, not that of Nextstep. + For the number of physical monitors, use `(length \(display-monitor-attributes-list TERMINAL))' instead. */) (Lisp_Object terminal) @@ -5859,7 +5862,10 @@ TERMINAL should be a terminal object, a frame or a display name (a string). If omitted or nil, that stands for the selected frame's display. The value may be `always', `when-mapped', or `not-useful'. -On Nextstep, the value may be `buffered', `retained', or `non-retained'. + +On Nextstep and PGTK, the value may be `buffered', `retained', or +`non-retained'. + On MS Windows, this returns nothing useful. */) (Lisp_Object terminal) { @@ -5897,7 +5903,9 @@ The value is one of the symbols `static-gray', `gray-scale', The optional argument TERMINAL specifies which display to ask about. TERMINAL should a terminal object, a frame or a display name (a string). If omitted or nil, that stands for the selected frame's display. -\(On MS Windows, this function does not accept terminal objects.) */) +\(On MS Windows, this function does not accept terminal objects.) + +On PGTK, always return `true-color'. */) (Lisp_Object terminal) { struct x_display_info *dpyinfo = check_x_display_info (terminal); @@ -9624,9 +9632,10 @@ Use a file selection dialog. Select DEFAULT-FILENAME in the dialog's file selection box, if specified. If MUSTMATCH is non-nil, the returned file or directory must exist. -This function is defined only on NS, Haiku, MS Windows, and X Windows with the -Motif or Gtk toolkits. With the Motif toolkit, ONLY-DIR-P is ignored. +This function is defined only on PGTK, NS, Haiku, MS Windows, and X Windows with +the Motif or Gtk toolkits. With the Motif toolkit, ONLY-DIR-P is ignored. Otherwise, if ONLY-DIR-P is non-nil, the user can select only directories. + On MS Windows 7 and later, the file selection dialog "remembers" the last directory where the user selected a file, and will open that directory instead of DIR on subsequent invocations of this function with the same commit 79814379d646e507c1af8ab26e300ac43d036664 Author: Yuan Fu Date: Wed Apr 16 22:50:56 2025 -0700 Remove treesit.el dependency from prog-mode.el prog-mode.el doens't need treesit.el dependency. And it shouldn't depend on it. In principle, treesit.el should integrate into various parts of Emacs through standard hooks and variables. * lisp/progmodes/prog-mode.el: (prog-fill-reindent-defun): Remove treesit.el functions. Use generic functions to check whether the current line has comments, and make the test more comprehensive. diff --git a/lisp/progmodes/prog-mode.el b/lisp/progmodes/prog-mode.el index 6c6b14d455a..4e9e228fa9c 100644 --- a/lisp/progmodes/prog-mode.el +++ b/lisp/progmodes/prog-mode.el @@ -30,10 +30,7 @@ ;;; Code: (eval-when-compile (require 'cl-lib) - (require 'subr-x) - (require 'treesit)) - -(treesit-declare-unavailable-functions) + (require 'subr-x)) (defgroup prog-mode nil "Generic programming mode, from which others derive." @@ -144,8 +141,6 @@ instead." (end (progn (forward-sexp 1) (point)))) (indent-region start end nil)))) -(declare-function treesit-node-at "treesit.c") - (defun prog-fill-reindent-defun (&optional argument) "Refill or reindent the paragraph or defun that contains point. @@ -156,19 +151,33 @@ Otherwise, reindent the function definition that contains point or follows point." (interactive "P") (save-excursion - (let ((treesit-text-node - (and (treesit-available-p) - (treesit-parser-list) - (treesit-node-match-p - (treesit-node-at (point)) 'text t)))) - (if (or treesit-text-node - (nth 8 (syntax-ppss)) - (re-search-forward "\\s-*\\s<" (line-end-position) t)) - (fill-paragraph argument (region-active-p)) - (beginning-of-defun) - (let ((start (point))) - (end-of-defun) - (indent-region start (point) nil)))))) + ;; FIXME: For some reason, the comment-start syntax regexp doesn't + ;; work for me. But I kept it around to be safe, and in the hope + ;; that if can cover cases where comment-start-skip is unset. + (if (or (nth 4 (syntax-ppss)) + ;; If point is at the beginning of a comment delimiter, + ;; syntax-ppss doesn't consider point as being inside a + ;; comment. + (save-excursion + (beginning-of-line) + (and comment-start-skip + ;; FIXME: This doesn't work for the case where there + ;; are two matches of comment-start-skip, and the + ;; first one is, say, inside a string. We need to + ;; call re-search-forward repeatedly until either + ;; reached EOL or (nth 4 (syntax-ppss)) returns + ;; non-nil. + (re-search-forward comment-start-skip (pos-eol) t) + (nth 4 (syntax-ppss)))) + (save-excursion + (beginning-of-line) + (and (re-search-forward "\\s-*\\s<" (line-end-position) t) + (nth 4 (syntax-ppss))))) + (fill-paragraph argument (region-active-p)) + (beginning-of-defun) + (let ((start (point))) + (end-of-defun) + (indent-region start (point) nil))))) (defun prog-first-column () "Return the indentation column normally used for top-level constructs." commit 9d43715baa5da4a644e180c7fb4550be0eb69be4 Author: Yuan Fu Date: Tue Apr 15 17:28:32 2025 -0700 Fix c-ts-common--fill-paragraph for non-rust modes (bug#77727) * lisp/progmodes/c-ts-common.el: (c-ts-common--comment-regexp): Add // and /* to regexp for Rust. (c-ts-common--line-comment-p): Extract out into new function, add a check that the parent node is a comment node. (c-ts-common--fill-paragraph): Extract some code out. diff --git a/lisp/progmodes/c-ts-common.el b/lisp/progmodes/c-ts-common.el index 26d24180e8c..56c8ae49000 100644 --- a/lisp/progmodes/c-ts-common.el +++ b/lisp/progmodes/c-ts-common.el @@ -110,9 +110,25 @@ non-whitespace characters of the current line." (defvar c-ts-common--comment-regexp ;; These covers C/C++, Java, JavaScript, TypeScript, Rust, C#. - (rx (or "comment" "line_comment" "block_comment")) + (rx (or "comment" "line_comment" "block_comment" "//" "/*")) "Regexp pattern that matches a comment in C-like languages.") +(defun c-ts-common--line-comment-p (node) + "Return non-nil if NODE is a comment node." + (or (save-excursion + (goto-char (treesit-node-start node)) + (looking-at "//")) + ;; In rust, NODE will be the body of a comment, and the + ;; parent will be the whole comment. + (let* ((parent (treesit-node-parent node)) + (parent-start (treesit-node-start parent))) + (when (and (treesit-node-match-p + parent c-ts-common--comment-regexp) + parent parent-start) + (save-excursion + (goto-char parent-start) + (looking-at "//")))))) + (defun c-ts-common--fill-paragraph (&optional arg) "Filling function for `c-ts-common'. ARG is passed to `fill-paragraph'." @@ -122,16 +138,7 @@ ARG is passed to `fill-paragraph'." (let ((node (treesit-node-at (point)))) (when (string-match-p c-ts-common--comment-regexp (treesit-node-type node)) - (if (or (save-excursion - (goto-char (treesit-node-start node)) - (looking-at "//")) - ;; In rust, NODE will be the body of a comment, and the - ;; parent will be the whole comment. - (if-let* ((start (treesit-node-start - (treesit-node-parent node)))) - (save-excursion - (goto-char start) - (looking-at "//")))) + (if (c-ts-common--line-comment-p node) (fill-comment-paragraph arg) (c-ts-common--fill-block-comment arg))) ;; Return t so `fill-paragraph' doesn't attempt to fill by commit ae1d01328f260f1a9891280c96139494629a83e8 Author: Stefan Monnier Date: Thu Apr 17 00:03:43 2025 -0400 (eieio-backward-compatibility): Set to `warn` (bug#77612) * lisp/emacs-lisp/eieio-base.el (make-instance) : Really skip backward compatibility when `eieio-backward-compatibility` is nil and emit message if it's `warn`. (eieio-persistent-make-instance): Warn when an obsolete name is used. * lisp/emacs-lisp/eieio-core.el (eieio-backward-compatibility): Change default to `warn`. (eieio-defclass-internal): Warn when the *-list-p function is called (eieio--slot-name-index): Warn when a initarg is used to access a slot. * lisp/emacs-lisp/eieio.el (defclass): Warn when a class-slot is accessed via the obsolete method. (make-instance, clone) : Really skip backward compatibility when `eieio-backward-compatibility` is nil and emit message if it's `warn`. diff --git a/etc/NEWS b/etc/NEWS index af4829c2ede..0918553c733 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -736,6 +736,15 @@ well as for other connection parameters. Rust number literals may have an optional type suffix. When this option is non-nil, this suffix is fontified using 'font-lock-type-face'. +** EIEIO +--- +*** New value 'warn' for 'eieio-backward-compatibility'. +This is the new default value and causes warnings to be emitted +at run-time for the use of the associated deprecated features. +(setq eieio-backward-compatibility t) can be used to recover +the previous silence. + +--- ** Text mode --- diff --git a/lisp/emacs-lisp/eieio-base.el b/lisp/emacs-lisp/eieio-base.el index 7975cdf280d..e2065b65095 100644 --- a/lisp/emacs-lisp/eieio-base.el +++ b/lisp/emacs-lisp/eieio-base.el @@ -207,11 +207,12 @@ All slots are unbound, except those initialized with PARAMS." nobj)) (cl-defmethod make-instance ((class (subclass eieio-named)) &rest args) - (if (not (stringp (car args))) + (if (not (and eieio-backward-compatibility args + (let ((x (car args))) (or (stringp x) (null x))))) (cl-call-next-method) - (funcall (if eieio-backward-compatibility #'ignore #'message) - "Obsolete: name passed without :object-name to %S constructor" - class) + (when (eq eieio-backward-compatibility 'warn) + (message "Obsolete: name passed without :object-name to %S constructor" + class)) (apply #'cl-call-next-method class :object-name args))) ;;; eieio-persistent @@ -345,6 +346,8 @@ objects found there." (object-of-class-p newobj 'eieio-named) (not (oref newobj object-name)) name) + (when (eq eieio-backward-compatibility 'warn) + (message "Obsolete name slot initialized for %S" newobj)) (oset newobj object-name name)) newobj)))) diff --git a/lisp/emacs-lisp/eieio-core.el b/lisp/emacs-lisp/eieio-core.el index 99f8feb9644..a06c36e5b72 100644 --- a/lisp/emacs-lisp/eieio-core.el +++ b/lisp/emacs-lisp/eieio-core.el @@ -63,12 +63,14 @@ default setting for optimization purposes.") (defvar eieio-optimize-primary-methods-flag t "Non-nil means to optimize the method dispatch on primary methods.") -(defvar eieio-backward-compatibility t +(defvar eieio-backward-compatibility 'warn "If nil, drop support for some behaviors of older versions of EIEIO. Currently under control of this var: - Define every class as a var whose value is the class symbol. - Define -child-p and -list-p predicates. -- Allow object names in constructors.") +- Allow object names in constructors. +When `warn', also emit warnings at run-time when code uses those +deprecated features.") (define-obsolete-variable-alias 'eieio-unbound 'eieio--unbound "28.1") (defvar eieio--unbound (make-symbol "eieio--unbound") @@ -359,6 +361,8 @@ See `defclass' for more information." (internal--format-docstring-line "Test OBJ to see if it a list of objects which are a child of type `%s'." cname)) + (when (eq eieio-backward-compatibility 'warn) + (message "Use of obsolete function %S" csym)) (when (listp obj) (let ((ans t)) ;; nil is valid ;; Loop over all the elements of the input list, test @@ -909,12 +913,15 @@ reverse-lookup that name, and recurse with the associated slot value." (let* ((fsi (gethash slot (cl--class-index-table class)))) (if (integerp fsi) fsi - (let ((fn (eieio--initarg-to-attribute class slot))) - (if fn + (when eieio-backward-compatibility + (let ((fn (eieio--initarg-to-attribute class slot))) + (when fn + (when (eq eieio-backward-compatibility 'warn) + (message "Accessing slot `%S' via obsolete initarg name `%S'" + fn slot)) ;; Accessing a slot via its :initarg is accepted by EIEIO ;; (but not CLOS) but is a bad idea (for one: it's slower). - (eieio--slot-name-index class fn) - nil))))) + (eieio--slot-name-index class fn))))))) (defun eieio--class-slot-name-index (class slot) "In CLASS find the index of the named SLOT. diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el index d66915260c8..e1051eb7d4e 100644 --- a/lisp/emacs-lisp/eieio.el +++ b/lisp/emacs-lisp/eieio.el @@ -216,6 +216,9 @@ and reference them using the function `class-option'." "Retrieve the class slot `%S' from a class `%S'." sname name) "\nThis method is obsolete.") + (when (eq eieio-backward-compatibility 'warn) + (message "Use of obsolete method %S on %S" + ',acces '(subclass ,name))) (if (slot-boundp this ',sname) (eieio-oref-default this ',sname))) accessors))) @@ -732,12 +735,13 @@ It allocates the vector used to represent an EIEIO object, and then calls `initialize-instance' on that object." (let* ((new-object (copy-sequence (eieio--class-default-object-cache (eieio--class-object class))))) - (if (and slots - (let ((x (car slots))) - (or (stringp x) (null x)))) - (funcall (if eieio-backward-compatibility #'ignore #'message) - "Obsolete name argument %S passed to %S constructor" - (pop slots) class)) + (when (and eieio-backward-compatibility slots + (let ((x (car slots))) + (or (stringp x) (null x)))) + (let ((name (pop slots))) + (when (eq eieio-backward-compatibility 'warn) + (message "Obsolete name argument %S passed to %S constructor" + name class)))) ;; Call the initialize method on the new object with the slots ;; that were passed down to us. (initialize-instance new-object slots) @@ -841,9 +845,12 @@ first and modify the returned object.") (cl-defmethod clone ((obj eieio-default-superclass) &rest params) "Make a copy of OBJ, and then apply PARAMS." (let ((nobj (copy-sequence obj))) - (if (stringp (car params)) - (funcall (if eieio-backward-compatibility #'ignore #'message) - "Obsolete name argument %S passed to clone" (pop params))) + (when (and eieio-backward-compatibility params + (let ((x (car params))) + (or (stringp x) (null x)))) + (let ((name (pop params))) + (when (eq eieio-backward-compatibility 'warn) + (message "Obsolete name argument %S passed to clone" name)))) (if params (shared-initialize nobj params)) nobj)) commit 0fc2fc9a4de3855cf14b6e1f548795831099981b Author: Po Lu Date: Thu Apr 17 09:33:06 2025 +0800 Prevent unrelocated symbols with position from being dumped * src/pdumper.c (dump_builtin_symbol_p): Test BARE_SYMBOL_P \(object) rather than SYMBOLP to avoid depending on the value of symbols_with_pos_enabled or depositing non-relocated references to vectorlikes in the dump file. Clarify commentary. diff --git a/src/pdumper.c b/src/pdumper.c index 1deb8473956..5cd84995226 100644 --- a/src/pdumper.c +++ b/src/pdumper.c @@ -727,12 +727,18 @@ emacs_offset (const void *emacs_ptr) return ptrdiff_t_to_dump_off (emacs_ptr_relative); } -/* Return whether OBJECT is a symbol the storage of which is built - into Emacs (and so is invariant across ASLR). */ +/* Return whether OBJECT is a symbol the storage of which is built into + Emacs (and hence is implicitly offset from an address in the Emacs + image). */ + static bool dump_builtin_symbol_p (Lisp_Object object) { - return SYMBOLP (object) && c_symbol_p (XSYMBOL (object)); + /* Symbols with position cannot be dumped, but not returning true for + them avoids producing references to unrelocated Lisp_Objects in + fixup processing or depending on the value of + symbols_with_pos_enabled. */ + return BARE_SYMBOL_P (object) && c_symbol_p (XSYMBOL (object)); } /* Return whether OBJECT has the same bit pattern in all Emacs commit c0cb59578b5aeb75b4856dda518d80cd015caa7d Author: F. Jason Park Date: Tue Apr 8 23:17:21 2025 -0700 Don't round-trip auto-reconnect probe in ERC * lisp/erc/erc-backend.el (erc-server--reconnect-opened) (erc--server-reconnect-opened): Rename former to latter. Restore original buffer-local value of session connector for Emacs 29 and below. (erc--server-reconnect-timeout-check) (erc--server-reconnect-timeout-scale-function): Change from buffer-local to normal variables, which they should have been originally. (erc--recon-probe-reschedule): Ensure `erc-server-reconnect-timeout' is always non-nil to avoid seeing format specifier in admin message. Use current buffer when `proc' argument is nil. Perform cleanup when `proc' and `erc-server-process' differ. (erc-server-delayed-check-reconnect-reuse-process-p): New variable. (erc--recon-probe-sentinel): Run `erc--server-reconnect-opened' immediately because sending a speculative PING doesn't work on all servers and proxies, most crucially on ZNC, which replies with an error only after an extended timeout. (erc--recon-probe-filter): Remove unused function. (erc--recon-probe-check) Rework to not use fixed periodic timer, change second parameter to a Lisp time object. (erc-server-delayed-check-reconnect): Use realistic name when reusing process so that the session's process isn't "*erc-connectivity-check*". Set filter to `ignore'. Always run `erc--recon-probe-sentinel' when status is `open' or something other than `connect', but don't bother spawning a `erc--recon-probe-check' task as well because any problems creating the process should already be known. Handle quits during connect functions that perform blocking I/O, such as `socks-open-network-stream'. (erc-schedule-reconnect): Don't bother setting filter to nil. * test/lisp/erc/erc-scenarios-base-auto-recon.el (erc-scenarios-base-auto-recon-unavailable) (erc-scenarios-base-auto-recon-check/no-reuse): Rename former to latter. (erc-scenarios-base-auto-recon-no-proto) (erc-scenarios-base-auto-recon-check/reuse): Rename former to latter and rewrite not to expect a PING. * test/lisp/erc/resources/erc-d/erc-d.el (erc-d--forget-process): New function. (erc-d--process-sentinel): Stop serving when all dialogs have been exhausted. (Bug#62044) diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el index e9b39a6f3f4..81907ffa462 100644 --- a/lisp/erc/erc-backend.el +++ b/lisp/erc/erc-backend.el @@ -832,17 +832,23 @@ Make sure you are in an ERC buffer when running this." (with-current-buffer buffer (erc-server-reconnect)))) -(defun erc-server--reconnect-opened (buffer process) +(defun erc--server-reconnect-opened (buffer process) "Reconnect session for server BUFFER using open PROCESS." (when (buffer-live-p buffer) (with-current-buffer buffer - (let ((erc-session-connector (lambda (&rest _) process))) + (let* ((orig erc-session-connector) + (erc-session-connector + (lambda (&rest _) + (setq erc-session-connector orig) + process))) (erc-server-reconnect))))) (defvar-local erc--server-reconnect-timeout nil) -(defvar-local erc--server-reconnect-timeout-check 10) -(defvar-local erc--server-reconnect-timeout-scale-function - #'erc--server-reconnect-timeout-double) + +;; These variables exist for use in unit tests. +(defvar erc--server-reconnect-timeout-check 10) +(defvar erc--server-reconnect-timeout-scale-function + #'erc--server-reconnect-timeout-double) (defun erc--server-reconnect-timeout-double (existing) "Double EXISTING timeout, but cap it at 5 minutes." @@ -851,84 +857,57 @@ Make sure you are in an ERC buffer when running this." (defun erc--recon-probe-reschedule (proc) "Print a message saying PROC's intended peer can't be reached. Then call `erc-schedule-reconnect'." - (let ((buffer (process-buffer proc))) - (when (buffer-live-p buffer) - (with-current-buffer buffer - (let ((erc-server-reconnect-timeout erc--server-reconnect-timeout)) - ;; FIXME either remove this deletion or explain why the one - ;; performed by `erc-schedule-reconnect' is insufficient. - ;; Perhaps because `proc' may not equal `erc-server-process'? - (when proc ; conn refused w/o :nowait - (delete-process proc)) - (erc-display-message nil '(notice error) buffer - 'recon-probe-nobody-home) - (erc-schedule-reconnect buffer 0)))))) + (let ((buffer (or (and-let* ((proc) + (buffer (process-buffer proc)) + ((buffer-live-p buffer)) + (buffer))) + (current-buffer)))) + (with-current-buffer buffer + (let ((erc-server-reconnect-timeout + (or erc--server-reconnect-timeout + erc-server-reconnect-timeout))) + (when (and proc (not (eq proc erc-server-process))) + (set-process-sentinel proc #'ignore) + (delete-process proc)) + (erc-display-message nil '(notice error) buffer + 'recon-probe-nobody-home) + (erc-schedule-reconnect buffer 0))))) + +(defvar erc-server-delayed-check-reconnect-reuse-process-p t + "Whether to reuse a successful probe as the session process.") (defun erc--recon-probe-sentinel (proc event) "Send a \"PING\" to PROC's peer on an \"open\" EVENT. Otherwise, try connecting from scratch again after timeout." (pcase event ("open\n" - (let ((cookie (time-convert nil 'integer))) - (process-put proc 'erc--reconnect-cookie cookie) - ;; FIXME account for possible `file-error' when sending. - (run-at-time nil nil #'process-send-string proc - (format "PING %d\r\n" cookie)))) - ((and "connection broken by remote peer\n" - (guard (process-get proc 'erc--reconnect-cookie)) - (let buffer (process-buffer proc)) - (guard (buffer-live-p buffer))) - ;; This can run, for example, if the client dials a TLS-terminating - ;; endpoint with a non-TLS opener, like `erc-open-tls-stream', or - ;; if the server doesn't take kindly to an opening "PING" during - ;; connection registration. - (with-current-buffer buffer - (delete-process proc) - ;; Undo latest penalizing timeout increment. - (setq erc--server-reconnect-timeout - (max 1 (/ erc--server-reconnect-timeout 2))) - (erc-display-message nil '(notice error) buffer 'recon-probe-hung-up - ?t erc--server-reconnect-timeout) - (run-at-time erc--server-reconnect-timeout - nil #'erc-server-delayed-reconnect buffer))) + (set-process-sentinel proc #'ignore) + ;; This has been observed to possibly raise a `file-error'. + (if erc-server-delayed-check-reconnect-reuse-process-p + (run-at-time nil nil #'erc--server-reconnect-opened + (process-buffer proc) proc) + (run-at-time nil nil #'delete-process proc) + (run-at-time nil nil #'erc-server-delayed-reconnect + (process-buffer proc)))) ((or "connection broken by remote peer\n" (rx bot "failed")) (run-at-time nil nil #'erc--recon-probe-reschedule proc)))) -(defun erc--recon-probe-filter (proc string) - "Reconnect, reusing PROC if STRING contains a \"PONG\"." - (when-let* ((buffer (process-buffer proc)) - (buffer-live-p buffer)) - (with-current-buffer buffer - (setq erc--server-reconnect-timeout nil)) - (if-let* ; reuse proc if string has complete message - ((cookie (process-get proc 'erc--reconnect-cookie)) - ;; Accommodate a leading ": ". - ((string-suffix-p (format "PONG %d\r\n" cookie) string))) - (progn - (erc-log-irc-protocol string nil) - (set-process-sentinel proc #'ignore) - (set-process-filter proc nil) - (run-at-time nil nil #'erc-server--reconnect-opened buffer proc)) - (delete-process proc) - (run-at-time nil nil #'erc-server-delayed-reconnect buffer)))) - -(defun erc--recon-probe-check (proc tmrx) - "Restart auto-reconnect probe if PROC has failed or TIMER has EXPIRE'd. -Expect TMRX to be a cons cell of (EXPIRE . TIMER)." - (let* ((status (process-status proc)) - (expiredp (time-less-p (pop tmrx) (current-time))) - (buffer (process-buffer proc))) - (when (or expiredp - (not (eq 'connect status)) ; e.g., `closed' - (not (buffer-live-p buffer))) - (cancel-timer tmrx)) +(defun erc--recon-probe-check (proc expire) + "Restart reconnect probe if PROC has failed or EXPIRE time has passed. +Otherwise, if PROC's buffer is live and its status is `connect', arrange +for running again in 1 second." + (let* ((buffer (process-buffer proc)) + ;; + status) (cond ((not (buffer-live-p buffer))) - (expiredp + ((time-less-p expire (current-time)) + ;; TODO convert into proper catalog message for i18n. (erc-display-message nil 'error buffer "Timed out while dialing...") - (delete-process proc) (erc--recon-probe-reschedule proc)) - ((eq 'failed status) - (erc--recon-probe-reschedule proc))))) + ((eq (setq status (process-status proc)) 'failed) + (erc--recon-probe-reschedule proc)) + ((eq status 'connect) + (run-at-time 1 nil #'erc--recon-probe-check proc expire))))) ;; This probing strategy may appear to hang at various junctures. It's ;; assumed that when *Messages* contains "Waiting for socket ..." or @@ -951,26 +930,31 @@ this function as their reconnector." erc-server-reconnect-timeout))) (condition-case _ (let* ((cert erc-session-client-certificate) - (tmrx (list (time-add erc--server-reconnect-timeout-check - (current-time)))) (server (if (string-match erc--server-connect-dumb-ipv6-regexp erc-session-server) (match-string 1 erc-session-server) erc-session-server)) - (proc (apply erc-session-connector "*erc-connectivity-check*" + (name (if erc-server-delayed-check-reconnect-reuse-process-p + (format "erc-%s-%s" server erc-session-port) + "*erc-connectivity-check*")) + (proc (apply erc-session-connector name nil server erc-session-port - (and cert (list :client-certificate cert))))) - (setcdr tmrx (run-at-time 1 1 #'erc--recon-probe-check proc tmrx)) - (set-process-filter proc #'erc--recon-probe-filter) - (set-process-sentinel proc #'erc--recon-probe-sentinel) + (and cert (list :client-certificate cert)))) + (status (process-status proc))) (set-process-buffer proc buffer) - ;; Should `erc-server-process' also be set to `proc' here so - ;; that `erc-schedule-reconnect' can use it? - (cl-assert (processp proc)) - (when (eq (process-status proc) 'open) ; :nowait is nil - (erc--recon-probe-sentinel proc "open\n"))) + (set-process-filter proc #'ignore) + (if (not (eq status 'connect)) ; :nowait is nil + (erc--recon-probe-sentinel proc (if (eq status 'open) + "open\n" + "failed")) + (run-at-time 1 nil #'erc--recon-probe-check proc + (time-add erc--server-reconnect-timeout-check + (current-time))) + (set-process-sentinel proc #'erc--recon-probe-sentinel))) ;; E.g., "make client process failed" "Connection refused". - (file-error (erc--recon-probe-reschedule nil)))))) + (file-error (erc--recon-probe-reschedule nil)) + ;; C-g during blocking connect, like with the SOCKS connector. + (quit (erc--cancel-auto-reconnect-timer)))))) (defun erc-server-prefer-check-reconnect (buffer) "Defer to another reconnector based on BUFFER's `erc-session-connector'. @@ -1085,7 +1069,6 @@ When `erc-server-reconnect-attempts' is a number, increment ?i (if count erc-server-reconnect-count "N") ?n (if count erc-server-reconnect-attempts "A")) (set-process-sentinel proc #'ignore) - (set-process-filter proc nil) (delete-process proc) (erc-update-mode-line) (setq erc-server-reconnecting nil diff --git a/test/lisp/erc/erc-scenarios-base-auto-recon.el b/test/lisp/erc/erc-scenarios-base-auto-recon.el index e08a062ccab..744e2041bce 100644 --- a/test/lisp/erc/erc-scenarios-base-auto-recon.el +++ b/test/lisp/erc/erc-scenarios-base-auto-recon.el @@ -39,7 +39,7 @@ ;; This demos one possible flavor of intermittent service. ;; It may end up needing to be marked :unstable. -(ert-deftest erc-scenarios-base-auto-recon-unavailable () +(ert-deftest erc-scenarios-base-auto-recon-check/no-reuse () :tags '(:expensive-test) (erc-scenarios-common-with-cleanup ((erc-server-flood-penalty 0.1) @@ -48,6 +48,7 @@ (erc-server-auto-reconnect t) (expect (erc-d-t-make-expecter)) (erc-scenarios-common-dialog "base/reconnect") + (erc-server-delayed-check-reconnect-reuse-process-p nil) (dumb-server nil)) (ert-info ("Dialing fails: nobody home") @@ -94,14 +95,12 @@ ;; Here, a listener accepts but doesn't respond to any messages. -(ert-deftest erc-scenarios-base-auto-recon-no-proto () +(ert-deftest erc-scenarios-base-auto-recon-check/reuse () :tags '(:expensive-test) + (should erc-server-delayed-check-reconnect-reuse-process-p) (erc-scenarios-common-with-cleanup ((erc-server-flood-penalty 0.1) (erc-scenarios-common-dialog "base/reconnect") - (erc-d-auto-pong nil) - (erc-d-tmpl-vars - `((cookie . ,(lambda (a) (funcall a :set (funcall a :match 1)))))) (dumb-server (erc-d-run "localhost" t 'unexpected-disconnect)) (port (process-contact dumb-server :service)) (erc--server-reconnect-timeout-scale-function (lambda (_) 1)) @@ -117,19 +116,19 @@ (funcall expect 10 "server is in debug mode") (should (equal (buffer-name) "FooNet")) (erc-d-t-wait-for 10 erc--server-reconnect-timer) - (delete-process dumb-server) (funcall expect 10 "failed") (ert-info ("Reconnect function freezes attempts at 1") (funcall expect 10 '(: "reconnecting" (+ nonl) "attempt 1/2")) - (funcall expect 10 "nobody home") - (funcall expect 10 "timed out while dialing") + (funcall expect 10 "Timed out while dialing") + (funcall expect 10 "Nobody home") (funcall expect 10 '(: "reconnecting" (+ nonl) "attempt 1/2")) - (funcall expect 10 "nobody home")))) + (funcall expect 10 "Timed out while dialing") + (funcall expect 10 "Nobody home")))) (ert-info ("Service restored") + (delete-process dumb-server) (setq dumb-server (erc-d-run "localhost" port - 'just-ping 'unexpected-disconnect)) (with-current-buffer "FooNet" (funcall expect 30 "server is in debug mode"))) diff --git a/test/lisp/erc/resources/erc-d/erc-d.el b/test/lisp/erc/resources/erc-d/erc-d.el index 0d777806474..6cbd7525827 100644 --- a/test/lisp/erc/resources/erc-d/erc-d.el +++ b/test/lisp/erc/resources/erc-d/erc-d.el @@ -422,10 +422,19 @@ This will start the teardown for DIALOG." (make-erc-d-i-message :command "eof" :unparsed erc-d--eof-sentinel)) (run-at-time nil nil #'erc-d-command dialog 'eof)) +(defun erc-d--forget-process (process) + "Set sentinel and filter for PROCESS to `ignore'." + (let ((server (process-get process :server))) + (set-process-sentinel server #'ignore) + (set-process-sentinel process #'ignore) + (set-process-filter server #'ignore) + (set-process-filter process #'ignore))) + (defun erc-d--process-sentinel (process event) "Set up or tear down client-connection PROCESS depending on EVENT." (erc-d--log-process-event process process event) - (if (eq 'open (process-status process)) + (if (and (eq 'open (process-status process)) + (process-get process :dialog-dialogs)) (erc-d--initialize-client process) (let* ((dialog (process-get process :dialog)) (exes (and dialog (erc-d-dialog-exchanges dialog)))) @@ -435,7 +444,9 @@ This will start the teardown for DIALOG." ;; Ignore disconnecting peer when pattern is DROP ((and (string-prefix-p "deleted" event) (erc-d--drop-p (ring-ref exes -1)))) - (t (erc-d--teardown))) + (t (erc-d--forget-process process) + (erc-d--teardown))) + (erc-d--forget-process process) (erc-d--teardown))))) (defun erc-d--filter (process string) commit 8f18b398a57f2f1bbef28260740e139b0494927b Author: F. Jason Park Date: Sun Apr 13 21:30:34 2025 -0700 ; Don't assume snapshot exists in ERC test helper * test/lisp/erc/erc-scenarios-base-association.el (erc-scenarios-common--base-association-multi-net): Increase timeout. * test/lisp/erc/erc-scenarios-base-compat-rename-bouncer.el (erc-scenarios-common--base-compat-no-rename-bouncer): Increase timeout. * test/lisp/erc/erc-scenarios-keep-place-indicator.el (erc-scenarios-keep-place-indicator--follow): Skip in CI. * test/lisp/erc/resources/erc-d/resources/incremental.eld: Increase timeout. * test/lisp/erc/resources/erc-tests-common.el (erc-tests-common-snapshot-compare): Forgo inserting file if generating snapshot interactively because it may not yet exist. diff --git a/test/lisp/erc/erc-scenarios-base-association.el b/test/lisp/erc/erc-scenarios-base-association.el index 4f5666cdd11..be24dd72c65 100644 --- a/test/lisp/erc/erc-scenarios-base-association.el +++ b/test/lisp/erc/erc-scenarios-base-association.el @@ -53,7 +53,7 @@ :nick "tester" :password "changeme" :full-name "tester") - (funcall expect 3 "debug mode") + (funcall expect 10 "debug mode") (erc-cmd-JOIN "#chan"))) (erc-d-t-wait-for 2 (get-buffer "#chan")) diff --git a/test/lisp/erc/erc-scenarios-base-compat-rename-bouncer.el b/test/lisp/erc/erc-scenarios-base-compat-rename-bouncer.el index d7fc94fff98..080cfe8ea92 100644 --- a/test/lisp/erc/erc-scenarios-base-compat-rename-bouncer.el +++ b/test/lisp/erc/erc-scenarios-base-compat-rename-bouncer.el @@ -76,7 +76,7 @@ :full-name "tester" :id nil)) (setq erc-server-process-bar erc-server-process) - (erc-d-t-wait-for 3 (eq (erc-network) 'barnet)) + (erc-d-t-wait-for 10 (eq (erc-network) 'barnet)) (erc-d-t-wait-for 3 "Final buffer name determined" (string= (buffer-name) (format "127.0.0.1:%d<2>" port))) (funcall expect 5 "barnet"))) diff --git a/test/lisp/erc/erc-scenarios-keep-place-indicator.el b/test/lisp/erc/erc-scenarios-keep-place-indicator.el index cb82e3ff84a..cc05bf105cb 100644 --- a/test/lisp/erc/erc-scenarios-keep-place-indicator.el +++ b/test/lisp/erc/erc-scenarios-keep-place-indicator.el @@ -33,8 +33,9 @@ :tags `(:expensive-test ,@(and (getenv "CI") '(:unstable)) ,@(and (getenv "ERC_TESTS_GRAPHICAL") '(:erc--graphical))) - (when (version< emacs-version "29") (ert-skip "Times out")) - ;; XXX verify that this continues to be the case ^. + + (when (getenv "CI") + (ert-skip "Times out intermittently")) (should-not erc-scrolltobottom-all) (should-not erc-scrolltobottom-mode) diff --git a/test/lisp/erc/resources/erc-d/resources/incremental.eld b/test/lisp/erc/resources/erc-d/resources/incremental.eld index 7d192a53066..57a032ed3cb 100644 --- a/test/lisp/erc/resources/erc-d/resources/incremental.eld +++ b/test/lisp/erc/resources/erc-d/resources/incremental.eld @@ -17,7 +17,7 @@ (0.0 ":irc.foo.net 266 tester 3 3 :Current global users 3, max 3") (0.0 ":irc.foo.net 422 tester :MOTD File is missing")) -((mode-user 1.2 "MODE tester +i") +((mode-user 3 "MODE tester +i") (0.0 ":irc.foo.net 221 tester +Zi") (0.0 ":irc.foo.net 306 tester :You have been marked as being away")) diff --git a/test/lisp/erc/resources/erc-tests-common.el b/test/lisp/erc/resources/erc-tests-common.el index 91e248a944f..7713a2780b5 100644 --- a/test/lisp/erc/resources/erc-tests-common.el +++ b/test/lisp/erc/resources/erc-tests-common.el @@ -291,18 +291,13 @@ string." (got (erc--remove-text-properties (buffer-substring (point-min) erc-insert-marker))) (repr (funcall (or trans-fn #'identity) (prin1-to-string got))) - (xstr (read (with-temp-buffer - (insert-file-contents-literally expect-file) - (buffer-string))))) + ;; + xstr) (with-current-buffer (generate-new-buffer name) (with-silent-modifications (insert (setq got (read repr)))) (when buf-init-fn (funcall buf-init-fn)) (erc-mode)) - (unless noninteractive - (with-current-buffer (generate-new-buffer (format "%s-xpt" name)) - (insert xstr) - (erc-mode))) ;; LHS is a string, RHS is a symbol. (if (string= erc-tests-common-snapshot-save-p (ert-test-name (ert-running-test))) @@ -311,6 +306,13 @@ string." (insert repr)) ;; Limit writing snapshots to one test at a time. (message "erc-tests-common-snapshot-compare: wrote %S" expect-file)) + (setq xstr (read (with-temp-buffer + (insert-file-contents-literally expect-file) + (buffer-string)))) + (unless noninteractive + (with-current-buffer (generate-new-buffer (format "%s-xpt" name)) + (insert xstr) + (erc-mode))) (if (file-exists-p expect-file) ;; Ensure string-valued properties, like timestamps, aren't ;; recursive (signals `max-lisp-eval-depth' exceeded). commit c5b97b7b321c873dbe8a36d27781435ba10a2278 Author: João Távora Date: Thu Apr 17 00:31:07 2025 +0100 Eglot: be aware of LSP version of contextual diagnostics In certain situations, Eglot has to report to the server parts of the diagnostics that it itself sent us. The server may use this as context to compute code actions, for example. Eglot selects diagnostics by asking Flymake, looking for the ones that contain Eglot-specific cookies. But when doing so, it is important to also be aware of the LSP document version these each of these diagnostics pertain to, since if a diagonstic in the buffer pertains to an older version of the LSP document (because Flymake fired or the server hasn't pushed a new set), that diagnostics 'eglot-lsp-data' cookie is invalid and possibly harmful. An example is when a diagnostic extends all the way to the end of the buffer. If we attempt to fix by shortening the buffer, an Eldoc-started code actions request may be sent to the server considering the soon-to-be-deleted Flymake diagnostic as context. But that diagnostic's 'eglot-lsp-data' cookie is no longer valid and when processing that context we try to go past point-max and burp an annoying error. Best to check the version of the diagnostic (if we have it) and ignore the ones that don't match the document version. * lisp/progmodes/eglot.el (eglot--versioned-identifier): Move up. (eglot--flymake-diagnostics, eglot--diag-to-lsp-diag): New helpers. (eglot-handle-notification): Record LSP doc version in diagnostics. (eglot--code-action-bounds) (eglot--code-action-params): Use eglot--flymake-diagnostics. diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index 8231c542d29..b077f4a6207 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -1240,6 +1240,9 @@ If optional MARKERS, make markers instead." (cl-defmethod initialize-instance :before ((_server eglot-lsp-server) &optional args) (cl-remf args :initializationOptions)) +(defvar-local eglot--versioned-identifier 0 + "LSP document version. Bumped on `eglot--after-change'.") + (defvar eglot--servers-by-project (make-hash-table :test #'equal) "Keys are projects. Values are lists of processes.") @@ -2556,6 +2559,19 @@ still unanswered LSP requests to the server\n")))) (defalias 'eglot--make-diag #'flymake-make-diagnostic) (defalias 'eglot--diag-data #'flymake-diagnostic-data) +(defun eglot--flymake-diagnostics (beg &optional end) + "Like `flymake-diagnostics', but for Eglot-specific diagnostics." + (cl-loop for diag in (flymake-diagnostics beg end) + for data = (eglot--diag-data diag) + for lsp-diag = (alist-get 'eglot-lsp-diag data) + for version = (alist-get 'eglot--doc-version data) + when (and lsp-diag (or (null version) + (= version eglot--versioned-identifier))) + collect diag)) + +(defun eglot--diag-to-lsp-diag (diag) + (alist-get 'eglot-lsp-diag (eglot--diag-data diag))) + (defvar eglot-diagnostics-map (let ((map (make-sparse-keymap))) (define-key map [mouse-2] #'eglot-code-actions-at-mouse) @@ -2658,8 +2674,6 @@ Value is (TRUENAME . (:uri STR)), where STR is what is sent to the server on textDocument/didOpen and similar calls. TRUENAME is the expensive cached value of `file-truename'.") -(defvar-local eglot--versioned-identifier 0) - (cl-defmethod eglot-handle-notification (server (_method (eql textDocument/publishDiagnostics)) &key uri diagnostics version @@ -2715,7 +2729,8 @@ expensive cached value of `file-truename'.") (eglot--make-diag (current-buffer) beg end (eglot--diag-type severity) - message `((eglot-lsp-diag . ,diag-spec)) + message `((eglot-lsp-diag . ,diag-spec) + (eglot--doc-version . ,version)) (when-let* ((faces (cl-loop for tag across tags when (alist-get tag eglot--tag-faces) @@ -3983,7 +3998,7 @@ edit proposed by the server." "Calculate appropriate bounds depending on region and point." (let (diags boftap) (cond ((use-region-p) `(,(region-beginning) ,(region-end))) - ((setq diags (flymake-diagnostics (point))) + ((setq diags (eglot--flymake-diagnostics (point))) (cl-loop for d in diags minimizing (flymake-diagnostic-beg d) into beg maximizing (flymake-diagnostic-end d) into end @@ -4000,10 +4015,8 @@ edit proposed by the server." :end (eglot--pos-to-lsp-position end)) :context `(:diagnostics - [,@(cl-loop for diag in (flymake-diagnostics beg end) - when (cdr (assoc 'eglot-lsp-diag - (eglot--diag-data diag))) - collect it)] + [,@(mapcar #'eglot--diag-to-lsp-diag + (eglot--flymake-diagnostics beg end))] ,@(when only `(:only [,only])) ,@(when triggerKind `(:triggerKind ,triggerKind))))) commit 2330e7b6d676761b60c3247f53224815512a9a58 Author: Stefan Monnier Date: Wed Apr 16 17:05:04 2025 -0400 lisp/savehist.el (savehist--reload): Don't accidentally set nil Reported by Michael Heerdegen . diff --git a/lisp/savehist.el b/lisp/savehist.el index 7a0c1fe6952..34226b3bd81 100644 --- a/lisp/savehist.el +++ b/lisp/savehist.el @@ -214,9 +214,10 @@ Be careful to do it while preserving the current history data." (savehist--file-modtime))))) ;; FIXME: Process the file manually rather than passing it to `load'. (let ((savehist-old-minibuffer-history-variables - (mapcar (lambda (s) (and (boundp s) (cons s (symbol-value s)))) - (cons 'savehist-minibuffer-history-variables - savehist-minibuffer-history-variables)))) + (delq nil (mapcar (lambda (s) + (and (boundp s) (cons s (symbol-value s)))) + (cons 'savehist-minibuffer-history-variables + savehist-minibuffer-history-variables))))) (condition-case errvar (progn ;; Don't set coding-system-for-read -- we rely on the commit f68482cbc047925d22acf687b814cb94dd7b5bf0 Author: Juri Linkov Date: Wed Apr 16 21:45:40 2025 +0300 * lisp/textmodes/markdown-ts-mode.el: More ts-modes for code blocks. (markdown-ts--code-block-language-map): Add more aliases. (markdown-ts-code-block-source-mode-map): Add more mappings for existing core ts-modes. (markdown-ts--convert-code-block-language): Check 'lang-string' with 'symbolp'. Check 'mode' with 'fboundp'. diff --git a/lisp/textmodes/markdown-ts-mode.el b/lisp/textmodes/markdown-ts-mode.el index 86507ae6858..dddeede1e29 100644 --- a/lisp/textmodes/markdown-ts-mode.el +++ b/lisp/textmodes/markdown-ts-mode.el @@ -37,7 +37,9 @@ ;;; Helper functions (defvar markdown-ts--code-block-language-map - '(("c++" . cpp) ("c#" . c-sharp)) + '(("c++" . cpp) + ("c#" . c-sharp) + ("sh" . bash)) "Alist mapping code block language names to tree-sitter languages. Keys should be strings, and values should be language symbols. @@ -53,7 +55,31 @@ For example, \"c++\" in maps to tree-sitter language `cpp'.") (defvar markdown-ts-code-block-source-mode-map - '((javascript . js-ts-mode)) + '((bash . bash-ts-mode) + (c . c-ts-mode) + (c-sharp . csharp-ts-mode) + (cmake . cmake-ts-mode) + (cpp . c++-ts-mode) + (css . css-ts-mode) + (dockerfile . dockerfile-ts-mode) + (elixir . elixir-ts-mode) + (go . go-ts-mode) + (gomod . go-mod-ts-mode) + (gowork . go-work-ts-mode) + (heex . heex-ts-mode) + (html . html-ts-mode) + (java . java-ts-mode) + (javascript . js-ts-mode) + (json . json-ts-mode) + (lua . lua-ts-mode) + (php . php-ts-mode) + (python . python-ts-mode) + (ruby . ruby-ts-mode) + (rust . rust-ts-mode) + (toml . toml-ts-mode) + (tsx . tsx-ts-mode) + (typescript . typescript-ts-mode) + (yaml . yaml-ts-mode)) "An alist of supported code block languages and their major mode.") ;;; Faces @@ -228,12 +254,14 @@ the same features enabled in MODE." (let* ((lang-string (alist-get (treesit-node-text node) markdown-ts--code-block-language-map (treesit-node-text node) nil #'equal)) - (lang (intern (downcase lang-string)))) + (lang (if (symbolp lang-string) + lang-string + (intern (downcase lang-string))))) ;; FIXME: Kind of a hack here: we use this function as a hook for ;; loading up configs for the language for the code block on-demand. (unless (memq lang markdown-ts--configured-languages) (let ((mode (alist-get lang markdown-ts-code-block-source-mode-map))) - (when mode + (when (fboundp mode) (markdown-ts--add-config-for-mode lang mode) (push lang markdown-ts--configured-languages)))) lang)) commit a6d746400cdf237b58c60920f4cb9a38db12951d Author: Juri Linkov Date: Wed Apr 16 20:32:54 2025 +0300 Change the default navigation sexp-type in 'elixir-ts-mode'. * lisp/progmodes/elixir-ts-mode.el (elixir-ts-mode): Call 'treesit-cycle-sexp-type' at the end to enable navigation across nodes defined by the tree-sitter thing 'sexp' by default (bug#76788). diff --git a/lisp/progmodes/elixir-ts-mode.el b/lisp/progmodes/elixir-ts-mode.el index 43cb6d12cc3..8358ffdc63a 100644 --- a/lisp/progmodes/elixir-ts-mode.el +++ b/lisp/progmodes/elixir-ts-mode.el @@ -670,6 +670,7 @@ Return nil if NODE is not a defun node or doesn't have a name." (when (treesit-ready-p 'elixir) ;; The HEEx parser has to be created first for elixir to ensure elixir ;; is the first language when looking for treesit ranges. + ;; (In Emacs 31 this requirement is removed.) (when (treesit-ready-p 'heex) ;; Require heex-ts-mode only when we load elixir-ts-mode ;; so that we don't get a tree-sitter compilation warning for @@ -756,7 +757,9 @@ Return nil if NODE is not a defun node or doesn't have a name." ( elixir-function-call elixir-variable elixir-operator elixir-number )))) (treesit-major-mode-setup) - (setq-local syntax-propertize-function #'elixir-ts--syntax-propertize))) + (setq-local syntax-propertize-function #'elixir-ts--syntax-propertize) + ;; Enable the 'sexp' navigation by default + (treesit-cycle-sexp-type))) (derived-mode-add-parents 'elixir-ts-mode '(elixir-mode)) commit 7574eb82c5cd150a0706a81e9f8555962a1e2167 Author: Juri Linkov Date: Wed Apr 16 20:11:34 2025 +0300 New hook 'outline-after-change-functions' (bug#77256). * lisp/outline.el (outline-after-change-functions): New variable. (outline--fix-buttons-after-change): Run hook 'outline-after-change-functions'. * lisp/treesit.el (treesit--after-change): Improve docstring. (treesit-major-mode-setup): Simplify to just add 'treesit--after-change' to 'outline-after-change-functions' hook. * lisp/progmodes/rust-ts-mode.el (rust-ts-mode): Add explicit 'treesit-outline-predicate' that is like 'treesit-simple-imenu-settings', but also adds "trait_item". diff --git a/lisp/outline.el b/lisp/outline.el index 1209b1ce766..a53e0a1f070 100644 --- a/lisp/outline.el +++ b/lisp/outline.el @@ -1980,7 +1980,11 @@ With a prefix argument, show headings up to that LEVEL." (outline--insert-button (if close-p 'close 'open)))) (or from (point-min)) (or to (point-max))))) -(defun outline--fix-buttons-after-change (beg end _len) +(defvar outline-after-change-functions nil + "List of functions to call after each text change in outline-mode.") + +(defun outline--fix-buttons-after-change (beg end len) + (run-hook-with-args 'outline-after-change-functions beg end len) ;; Handle whole lines (save-excursion (goto-char beg) (setq beg (pos-bol))) (save-excursion (goto-char end) (setq end (pos-eol))) diff --git a/lisp/progmodes/rust-ts-mode.el b/lisp/progmodes/rust-ts-mode.el index ae2bc8ee78c..e3fff304ab3 100644 --- a/lisp/progmodes/rust-ts-mode.el +++ b/lisp/progmodes/rust-ts-mode.el @@ -578,6 +578,16 @@ See `prettify-symbols-compose-predicate'." ("Struct" "\\`struct_item\\'" nil nil) ("Fn" "\\`function_item\\'" nil nil))) + ;; Outline. + (setq-local treesit-outline-predicate + (rx bos (or "mod_item" + "enum_item" + "impl_item" + "type_item" + "struct_item" + "function_item" + "trait_item") + eos)) ;; Indent. (setq-local indent-tabs-mode nil treesit-simple-indent-rules rust-ts-mode--indent-rules) diff --git a/lisp/treesit.el b/lisp/treesit.el index 3cf3be5122c..156e0b87709 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -4112,7 +4112,8 @@ For BOUND, MOVE, BACKWARD, LOOKING-AT, see the descriptions in level)) (defun treesit--after-change (beg end _len) - "Force updating the ranges after each text change." + "Force updating the ranges in BEG...END. +Expected to be called after each text change." (treesit-update-ranges beg end)) ;;; Hideshow mode @@ -4410,15 +4411,7 @@ before calling this function." #'treesit-outline-predicate--from-imenu)) (setq-local outline-search-function #'treesit-outline-search outline-level #'treesit-outline-level) - (add-hook 'outline-minor-mode-hook - (lambda () - (if (bound-and-true-p outline-minor-mode) - (add-hook 'after-change-functions - #'treesit--after-change - 0 t) - (remove-hook 'after-change-functions - #'treesit--after-change t))) - nil t)) + (add-hook 'outline-after-change-functions #'treesit--after-change nil t)) ;; Remove existing local parsers. (dolist (ov (overlays-in (point-min) (point-max))) commit 77bf9d33ee42d90e86d9cc5d3a67356b19ca2f6b Author: Juri Linkov Date: Wed Apr 16 20:00:56 2025 +0300 Add 'treesit-language-at-point-default' (bug#77256). * lisp/treesit.el (treesit-language-at-point-function): Change the default value from nil to 'treesit-language-at-point-default'. (treesit-language-at): Funcall 'treesit-language-at-point-function' unconditionally. (treesit-language-at-point-default): New function with body from 'treesit-language-at'. (treesit-node-at): Simplify by replacing duplicate code with the call to 'treesit-parsers-at'. diff --git a/lisp/treesit.el b/lisp/treesit.el index 5a408b09507..3cf3be5122c 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -165,7 +165,8 @@ of max unsigned 32-bit value for byte offsets into buffer text." The primary parser should be a parser that parses the entire buffer, as opposed to embedded parsers which parses only part of the buffer.") -(defvar-local treesit-language-at-point-function nil +(defvar-local treesit-language-at-point-function + #'treesit-language-at-point-default "A function that returns the language at point. This is used by `treesit-language-at', which is used by various functions to determine which parser to use at point. @@ -183,10 +184,15 @@ When there are multiple parsers that covers POSITION, determine the most relevant parser (hence language) by their embed level. If `treesit-language-at-point-function' is non-nil, return the return value of that function instead." - (if treesit-language-at-point-function - (funcall treesit-language-at-point-function position) - (treesit-parser-language - (car (treesit-parsers-at position))))) + (funcall (or treesit-language-at-point-function + #'treesit-language-at-point-default) + position)) + +(defun treesit-language-at-point-default (position) + "Default function for `treesit-language-at-point-function'. +Return the deepest parser by embed level." + (treesit-parser-language + (car (treesit-parsers-at position)))) ;;; Node API supplement @@ -238,12 +244,8 @@ language and doesn't match the language of the local parser." ;; 2. Given a language, try local parser, then global ;; parser. (parser-or-lang - (let* ((local-parser (car (treesit-local-parsers-at - pos parser-or-lang))) - (global-parser (car (treesit-parsers-at - pos parser-or-lang nil - '(primary global)))) - (parser (or local-parser global-parser))) + (let ((parser (car (treesit-parsers-at + pos parser-or-lang)))) (when parser (treesit-parser-root-node parser)))) ;; 3. No given language, try to get a language at point. @@ -252,20 +254,8 @@ language and doesn't match the language of the local parser." ;; finding parser, try local parser first, then global ;; parser. (t - ;; LANG can be nil. We don't want to use the fallback - ;; in `treesit-language-at', so here we call - ;; `treesit-language-at-point-function' directly. - (let* ((lang (and treesit-language-at-point-function - (funcall treesit-language-at-point-function - pos))) - (local-parser - ;; Find the local parser with highest - ;; embed-level at point. - (car (treesit-local-parsers-at pos lang))) - (global-parser (car (treesit-parsers-at - pos lang nil - '(primary global)))) - (parser (or local-parser global-parser))) + ;; LANG can be nil. Use the parser deepest by embed level. + (let ((parser (car (treesit-parsers-at pos)))) (when parser (treesit-parser-root-node parser)))))) (node root) commit 4532fbefece210061d01ab9523f3054aadb1c45a Author: Stefan Monnier Date: Wed Apr 16 10:15:16 2025 -0400 (Freplace_region_contents): Treat point as insert-before marker Experience suggests that it's more often useful to keep point at the end of the replacement than it is to keep point at the beginning of the replacement. This also aligns the behavior of `replace-region-contents` with that of `insert`. * src/insdel.c (replace_range): Treat PT like an insert-before marker. * src/editfns.c (Freplace_region_contents): Adjust docstring accordingly. diff --git a/src/editfns.c b/src/editfns.c index 227f5f0be2c..a938d094534 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -1928,10 +1928,11 @@ If optional argument INHERIT is non-nil, the inserted text will inherit properties from adjoining text. As far as possible the replacement is non-destructive, i.e. existing -buffer contents, markers, properties, and overlays in the current -buffer stay intact. However, if point is at the end of the replaced -text, it may not be at the end of the replacement when this function -returns. +buffer contents, markers, point, properties, and overlays in the current +buffer stay intact. Point is treated like an "insert before" marker: +if point starts at END, it will always be at the end of the replacement +when this function returns, whereas if point starts at BEG it will +remain at BEG only if the replaced text is not empty. Because this function can be very slow if there is a large number of differences between the two buffers, there are two optional arguments diff --git a/src/insdel.c b/src/insdel.c index 6656221faa1..7e361fbb2ce 100644 --- a/src/insdel.c +++ b/src/insdel.c @@ -1637,7 +1637,9 @@ replace_range (ptrdiff_t from, ptrdiff_t to, Lisp_Object new, #endif /* Relocate point as if it were a marker. */ - if (from < PT) + if (from < PT + /* Mimic 'insert' when FROM==TO==PT). */ + || PT == to) adjust_point ((from + inschars - min (PT, to)), (from_byte + outgoing_insbytes - min (PT_BYTE, to_byte))); commit 275712a18c7e5ce38831721936fd9fb3ed3adb00 Author: Eli Zaretskii Date: Wed Apr 16 11:13:41 2025 +0300 ; Improve documentation of 'help-fns-edit-variable' * lisp/help-fns.el (help-fns-edit-variable) (help-enable-variable-value-editing): Doc fixes. (cherry picked from commit bf737dc42a70fd8665b7c5ad506249a6119ec4c4) diff --git a/lisp/help-fns.el b/lisp/help-fns.el index c3433ad6015..980cc5b78a4 100644 --- a/lisp/help-fns.el +++ b/lisp/help-fns.el @@ -134,11 +134,11 @@ with the current prefix. The files are chosen according to :version "26.3") (defcustom help-enable-variable-value-editing nil - "If non-nil, allow editing values in *Help* buffers. + "If non-nil, allow editing variable values in *Help* buffers. To edit the value of a variable, use \\[describe-variable] to display a \"*Help*\" buffer, move point after the text -\"Its value is\" and type \\`e'. +\"Its value is\" and type \\`e' to invoke `help-fns-edit-variable'. Values that aren't readable by the Emacs Lisp reader can't be edited even if this option is enabled." @@ -1506,7 +1506,16 @@ it is displayed along with the global value." (put 'help-fns-edit-variable 'disabled t) (defun help-fns-edit-variable () - "Edit the variable under point." + "Edit the variable value at point in \"*Help*\" buffer. +This command only works if `help-enable-variable-value-editing' is non-nil. + +To edit the value of a variable, use \\[describe-variable] followed by the name +of a variable, to display a \"*Help*\" buffer, move point to +the variable's value, usually after the text \"Its value is\", and +type \\`e' to invoke this command. + +Values that aren't readable by the Emacs Lisp reader can't be edited +by this command." (declare (completion ignore)) (interactive) (let ((var (get-text-property (point) 'help-fns--edit-variable))) commit 8792d3431b15d83c5ec7f7706d3989eb036c0b98 Author: Michael Albinus Date: Tue Apr 15 14:17:25 2025 +0200 Backport: Fix tree-sitter tests on Emba * test/infra/Dockerfile.emba: Use tree-sitter-rust v0.23.3 in order to match ABI version of libtree-sitter0. (cherry picked from commit 788c9cfb62c7fd50b171a9209dd7453bd03f14bf) diff --git a/test/infra/Dockerfile.emba b/test/infra/Dockerfile.emba index 201b369513d..8c6641b19b9 100644 --- a/test/infra/Dockerfile.emba +++ b/test/infra/Dockerfile.emba @@ -117,33 +117,38 @@ RUN ./autogen.sh autoconf RUN ./configure --with-tree-sitter RUN make -j `nproc` bootstrap -# Install language grammars. +# Install language grammars. The ABI versions of libtree-sitter0 and +# the respective grammars must match. The grammar ABI version is determined by +# grep LANGUAGE_VERSION /path/to/grammar-repo/src/parser.c RUN mkdir -p /root/.emacs.d/tree-sitter RUN git config --global http.sslverify "false" # See https://github.com/emacs-tree-sitter/tree-sitter-langs/tree/master/repos RUN src/emacs -Q --batch \ + --eval \ + '(message "ABI min version %d max version %d" \ + (treesit-library-abi-version t) (treesit-library-abi-version))' \ --eval '(setq \ treesit-extra-load-path (list "/root/.emacs.d/tree-sitter") \ treesit-language-source-alist \ - (quote ((bash "https://github.com/tree-sitter/tree-sitter-bash") \ - (c "https://github.com/tree-sitter/tree-sitter-c") \ - (c-sharp "https://github.com/tree-sitter/tree-sitter-c-sharp") \ - (cpp "https://github.com/tree-sitter/tree-sitter-cpp") \ - (css "https://github.com/tree-sitter/tree-sitter-css") \ - (elixir "https://github.com/elixir-lang/tree-sitter-elixir") \ - (go "https://github.com/tree-sitter/tree-sitter-go") \ - (gomod "https://github.com/camdencheek/tree-sitter-go-mod") \ - (heex "https://github.com/phoenixframework/tree-sitter-heex") \ - (html "https://github.com/tree-sitter/tree-sitter-html") \ - (java "https://github.com/tree-sitter/tree-sitter-java") \ - (javascript "https://github.com/tree-sitter/tree-sitter-javascript") \ - (json "https://github.com/tree-sitter/tree-sitter-json") \ - (lua "https://github.com/tree-sitter-grammars/tree-sitter-lua") \ - (python "https://github.com/tree-sitter/tree-sitter-python") \ - (ruby "https://github.com/tree-sitter/tree-sitter-ruby") \ - (rust "https://github.com/tree-sitter/tree-sitter-rust") \ - (tsx "https://github.com/tree-sitter/tree-sitter-typescript" "master" "tsx/src") \ - (typescript "https://github.com/tree-sitter/tree-sitter-typescript" "master" "typescript/src"))))' \ + (quote ((bash "https://github.com/tree-sitter/tree-sitter-bash") \ + (c "https://github.com/tree-sitter/tree-sitter-c") \ + (c-sharp "https://github.com/tree-sitter/tree-sitter-c-sharp") \ + (cpp "https://github.com/tree-sitter/tree-sitter-cpp") \ + (css "https://github.com/tree-sitter/tree-sitter-css") \ + (elixir "https://github.com/elixir-lang/tree-sitter-elixir") \ + (go "https://github.com/tree-sitter/tree-sitter-go") \ + (gomod "https://github.com/camdencheek/tree-sitter-go-mod") \ + (heex "https://github.com/phoenixframework/tree-sitter-heex") \ + (html "https://github.com/tree-sitter/tree-sitter-html") \ + (java "https://github.com/tree-sitter/tree-sitter-java") \ + (javascript "https://github.com/tree-sitter/tree-sitter-javascript") \ + (json "https://github.com/tree-sitter/tree-sitter-json") \ + (lua "https://github.com/tree-sitter-grammars/tree-sitter-lua") \ + (python "https://github.com/tree-sitter/tree-sitter-python") \ + (ruby "https://github.com/tree-sitter/tree-sitter-ruby") \ + (rust "https://github.com/tree-sitter/tree-sitter-rust" "v0.23.3") \ + (tsx "https://github.com/tree-sitter/tree-sitter-typescript" "master" "tsx/src") \ + (typescript "https://github.com/tree-sitter/tree-sitter-typescript" "master" "typescript/src"))))' \ --eval '(dolist (lang (mapcar (quote car) treesit-language-source-alist)) \ (treesit-install-language-grammar lang "/root/.emacs.d/tree-sitter"))' commit bf737dc42a70fd8665b7c5ad506249a6119ec4c4 Author: Eli Zaretskii Date: Wed Apr 16 11:13:41 2025 +0300 ; Improve documentation of 'help-fns-edit-variable' * lisp/help-fns.el (help-fns-edit-variable) (help-enable-variable-value-editing): Doc fixes. diff --git a/lisp/help-fns.el b/lisp/help-fns.el index 0eb0a7a40be..dbd307e3d25 100644 --- a/lisp/help-fns.el +++ b/lisp/help-fns.el @@ -135,11 +135,11 @@ with the current prefix. The files are chosen according to :version "26.3") (defcustom help-enable-variable-value-editing nil - "If non-nil, allow editing values in *Help* buffers. + "If non-nil, allow editing variable values in *Help* buffers. To edit the value of a variable, use \\[describe-variable] to display a \"*Help*\" buffer, move point after the text -\"Its value is\" and type \\`e'. +\"Its value is\" and type \\`e' to invoke `help-fns-edit-variable'. Values that aren't readable by the Emacs Lisp reader can't be edited even if this option is enabled." @@ -1555,7 +1555,16 @@ it is displayed along with the global value." (put 'help-fns-edit-variable 'disabled t) (defun help-fns-edit-variable () - "Edit the variable under point." + "Edit the variable value at point in \"*Help*\" buffer. +This command only works if `help-enable-variable-value-editing' is non-nil. + +To edit the value of a variable, use \\[describe-variable] followed by the name +of a variable, to display a \"*Help*\" buffer, move point to +the variable's value, usually after the text \"Its value is\", and +type \\`e' to invoke this command. + +Values that aren't readable by the Emacs Lisp reader can't be edited +by this command." (declare (completion ignore)) (interactive) (let ((var (get-text-property (point) 'help-fns--edit-variable))) commit 179c6931c57700d842179eb193369de1587287ee Author: Eli Zaretskii Date: Wed Apr 16 10:17:30 2025 +0300 ; Fix documentation of a recent commit * lisp/textmodes/markdown-ts-mode.el (markdown-ts-delimiter) (markdown-ts-heading-1, markdown-ts-setext-heading) (markdown-ts-heading-2, markdown-ts-heading-3) (markdown-ts-heading-4, markdown-ts-heading-5) (markdown-ts-heading-6, markdown-ts-list-marker) (markdown-ts-block-quote, markdown-ts-language-keyword) (markdown-ts--configured-languages): Doc fixes. diff --git a/lisp/textmodes/markdown-ts-mode.el b/lisp/textmodes/markdown-ts-mode.el index cc3b4b9e306..86507ae6858 100644 --- a/lisp/textmodes/markdown-ts-mode.el +++ b/lisp/textmodes/markdown-ts-mode.el @@ -64,37 +64,37 @@ maps to tree-sitter language `cpp'.") :group 'faces) (defface markdown-ts-delimiter '((t (:inherit shadow))) - "Face for the # before headings.") + "Face for the # before Markdown headings.") (defface markdown-ts-heading-1 '((t (:inherit outline-1))) - "Face for first level headings.") + "Face for first level Markdown headings.") (defface markdown-ts-setext-heading '((t (:inherit markdown-ts-heading-1))) - "Face for setext headings (headings underlined by === or ---).") + "Face for setext Markdown headings (headings underlined by === or ---).") (defface markdown-ts-heading-2 '((t (:inherit outline-2))) - "Face for second level headings.") + "Face for second level Markdown headings.") (defface markdown-ts-heading-3 '((t (:inherit outline-3))) - "Face for third level headings.") + "Face for third level Markdown headings.") (defface markdown-ts-heading-4 '((t (:inherit outline-4))) - "Face for fourth level headings.") + "Face for fourth level Markdown headings.") (defface markdown-ts-heading-5 '((t (:inherit outline-5))) - "Face for fifth level headings.") + "Face for fifth level Markdown headings.") (defface markdown-ts-heading-6 '((t (:inherit outline-6))) - "Face for sixth level headings.") + "Face for sixth level Markdown headings.") (defface markdown-ts-list-marker '((t (:inherit font-lock-keyword-face))) - "Face for list markers like - and *.") + "Face for Markdown list markers like - and *.") (defface markdown-ts-block-quote '((t (:inherit font-lock-string-face))) - "Face for block quotes.") + "Face for Markdown block quotes.") (defface markdown-ts-language-keyword '((t (:inherit font-lock-keyword-face))) - "Face for the language keyword for code blocks.") + "Face for the language keyword for Markdown code blocks.") ;;; Font-lock @@ -183,9 +183,9 @@ maps to tree-sitter language `cpp'.") (defvar-local markdown-ts--configured-languages nil "A list of languages that have been setup in this buffer. -When a code block of a language appear, `markdown-ts-mode' loads +When a code block of a language appears, `markdown-ts-mode' loads language setups like font-lock and indentation for that language, and -add that language to this list.") +adds that language to this list.") (defun markdown-ts--harvest-treesit-configs (mode) "Harvest tree-sitter configs from MODE. commit 864bc762a2006a549ce5274f872c3233ef09003a Author: Juri Linkov Date: Wed Apr 16 09:23:35 2025 +0300 * test/lisp/tab-bar-tests.el (tab-bar-tests-quit-restore-window): Fix. Select the created frame because 'quit-window' unexpectedly selects the original frame (https://debbugs.gnu.org/71386#262). Add a comment about the `message' call bound to the original frame. https://lists.gnu.org/archive/html/emacs-devel/2025-04/msg00546.html diff --git a/test/lisp/tab-bar-tests.el b/test/lisp/tab-bar-tests.el index 450713ce228..81555dad171 100644 --- a/test/lisp/tab-bar-tests.el +++ b/test/lisp/tab-bar-tests.el @@ -89,12 +89,16 @@ (should (eq (length (window-list)) 2)) (should (equal (buffer-name) "*info*")) (quit-window) + ;; 'quit-window' unexpectedly selects the original frame, + ;; so move back to the created frame + (select-frame (car (frame-list))) (should (eq (length (window-list)) 1)) (should (eq (length (frame-list)) 2)) - ;; FIXME: uncomment (should (equal (buffer-name) "*Messages*")) + (should (equal (buffer-name) "*Messages*")) (quit-window) (should (eq (length (frame-list)) 2)) - ;; Clean up the frame afterwards + ;; Delete the created frame afterwards because with tty frames + ;; the output of 'message' is bound to the original frame (delete-frame)) ;; 2.1. 'quit-restore-window' should close the tab commit 6f1e317764dab918d40b08d2e8e9166d42ae6c8d Author: Yuan Fu Date: Tue Mar 11 20:37:43 2025 -0700 Expand markdown-ts-mode and add code block support for javascript - Define new faces and use them in place of font-lock faces - Add more fontification, add a new feature for headings. - Remove fontification for code blocks, so embedeed parser can fontify them - Add experimental code block support for javascript by using tree-sitter setup from js-ts-mode. - Correctly setup markdown_inline with range settings. * lisp/textmodes/markdown-ts-mode.el: (markdown-ts--code-block-language-map): (markdown-ts-code-block-source-mode-map): New variables. (markdown-ts-faces): New group. (markdown-ts-delimiter): (markdown-ts-heading-1): (markdown-ts-setext-heading): (markdown-ts-heading-2): (markdown-ts-heading-3): (markdown-ts-heading-4): (markdown-ts-heading-5): (markdown-ts-heading-6): (markdown-ts-list-marker): (markdown-ts-block-quote): (markdown-ts-language-keyword): New faces. (markdown-ts--treesit-settings): (markdown-ts--configured-languages): New variables. (markdown-ts--harvest-treesit-configs): (markdown-ts--add-config-for-mode): (markdown-ts--convert-code-block-language): New functions. (markdown-ts--range-settings): New variable. (markdown-ts-setup): Setup range configuration. (markdown-ts-mode): Add heading feature. diff --git a/lisp/textmodes/markdown-ts-mode.el b/lisp/textmodes/markdown-ts-mode.el index 18669bf7483..cc3b4b9e306 100644 --- a/lisp/textmodes/markdown-ts-mode.el +++ b/lisp/textmodes/markdown-ts-mode.el @@ -34,6 +34,70 @@ (declare-function treesit-node-type "treesit.c") (declare-function treesit-parser-create "treesit.c") +;;; Helper functions + +(defvar markdown-ts--code-block-language-map + '(("c++" . cpp) ("c#" . c-sharp)) + "Alist mapping code block language names to tree-sitter languages. + +Keys should be strings, and values should be language symbols. + +For example, \"c++\" in + + ```c++ + int main() { + return 0; + } + ``` + +maps to tree-sitter language `cpp'.") + +(defvar markdown-ts-code-block-source-mode-map + '((javascript . js-ts-mode)) + "An alist of supported code block languages and their major mode.") + +;;; Faces + +(defgroup markdown-ts-faces nil + "Faces used in Markdown TS Mode." + :group 'markdown-ts-faces + :group 'faces) + +(defface markdown-ts-delimiter '((t (:inherit shadow))) + "Face for the # before headings.") + +(defface markdown-ts-heading-1 '((t (:inherit outline-1))) + "Face for first level headings.") + +(defface markdown-ts-setext-heading '((t (:inherit markdown-ts-heading-1))) + "Face for setext headings (headings underlined by === or ---).") + +(defface markdown-ts-heading-2 '((t (:inherit outline-2))) + "Face for second level headings.") + +(defface markdown-ts-heading-3 '((t (:inherit outline-3))) + "Face for third level headings.") + +(defface markdown-ts-heading-4 '((t (:inherit outline-4))) + "Face for fourth level headings.") + +(defface markdown-ts-heading-5 '((t (:inherit outline-5))) + "Face for fifth level headings.") + +(defface markdown-ts-heading-6 '((t (:inherit outline-6))) + "Face for sixth level headings.") + +(defface markdown-ts-list-marker '((t (:inherit font-lock-keyword-face))) + "Face for list markers like - and *.") + +(defface markdown-ts-block-quote '((t (:inherit font-lock-string-face))) + "Face for block quotes.") + +(defface markdown-ts-language-keyword '((t (:inherit font-lock-keyword-face))) + "Face for the language keyword for code blocks.") + +;;; Font-lock + (defvar markdown-ts--treesit-settings (treesit-font-lock-rules :language 'markdown @@ -41,35 +105,66 @@ :feature 'delimiter '([ "[" "]" "(" ")" ] @shadow) + :language 'markdown + :feature 'heading + '((atx_heading (atx_h1_marker)) @markdown-ts-heading-1 + (atx_heading (atx_h2_marker)) @markdown-ts-heading-2 + (atx_heading (atx_h3_marker)) @markdown-ts-heading-3 + (atx_heading (atx_h4_marker)) @markdown-ts-heading-4 + (atx_heading (atx_h5_marker)) @markdown-ts-heading-5 + (atx_heading (atx_h6_marker)) @markdown-ts-heading-6 + (setext_heading) @markdown-ts-setext-heading) + + :language 'markdown + :feature 'heading + :override 'prepend + '((atx_h1_marker) @markdown-ts-delimiter + (atx_h2_marker) @markdown-ts-delimiter + (atx_h3_marker) @markdown-ts-delimiter + (atx_h4_marker) @markdown-ts-delimiter + (atx_h5_marker) @markdown-ts-delimiter + (atx_h6_marker) @markdown-ts-delimiter) + + :language 'markdown + :feature 'paragraph + '(((thematic_break) @markdown-ts-delimiter) + ((indented_code_block) @font-lock-string-face) + (list_item (list_marker_star) @markdown-ts-list-marker) + (list_item (list_marker_plus) @markdown-ts-list-marker) + (list_item (list_marker_minus) @markdown-ts-list-marker) + (list_item (list_marker_dot) @markdown-ts-list-marker) + + (block_quote) @markdown-ts-block-quote) :language 'markdown :feature 'paragraph - '([((setext_heading) @font-lock-keyword-face) - ((atx_heading) @font-lock-keyword-face) - ((thematic_break) @shadow) - ((indented_code_block) @font-lock-string-face) - (list_item (list_marker_star) @font-lock-keyword-face) - (list_item (list_marker_plus) @font-lock-keyword-face) - (list_item (list_marker_minus) @font-lock-keyword-face) - (list_item (list_marker_dot) @font-lock-keyword-face) - (fenced_code_block (fenced_code_block_delimiter) @font-lock-doc-face) - (fenced_code_block (code_fence_content) @font-lock-string-face) - ((block_quote_marker) @font-lock-string-face) - (block_quote (paragraph) @font-lock-string-face) - (block_quote (block_quote_marker) @font-lock-string-face) - ]) + :override 'prepend + '((block_quote_marker) @markdown-ts-delimiter + (fenced_code_block_delimiter) @markdown-ts-delimiter + (fenced_code_block + (info_string (language) @markdown-ts-language-keyword)) + (block_quote + (block_quote_marker) @markdown-ts-delimiter + (paragraph (inline (block_continuation) @markdown-ts-delimiter)))) :language 'markdown-inline :feature 'paragraph-inline - '([ - ((image_description) @link) - ((link_destination) @font-lock-string-face) - ((code_span) @font-lock-string-face) - ((emphasis) @underline) - ((strong_emphasis) @bold) - (inline_link (link_text) @link) - (inline_link (link_destination) @font-lock-string-face) - (shortcut_link (link_text) @link)]))) + '(((image_description) @link) + ((link_destination) @font-lock-string-face) + ((code_span) @font-lock-string-face) + ((emphasis) @italic) + ((strong_emphasis) @bold) + (inline_link (link_text) @link) + (inline_link (link_destination) @font-lock-string-face) + (shortcut_link (link_text) @link)) + + :language 'markdown-inline + :feature 'paragraph-inline + :override 'append + '((emphasis_delimiter) @markdown-ts-delimiter) + )) + +;;; Imenu (defun markdown-ts-imenu-node-p (node) "Check if NODE is a valid entry to imenu." @@ -80,21 +175,102 @@ "Return an imenu entry if NODE is a valid header." (let ((name (treesit-node-text node))) (if (markdown-ts-imenu-node-p node) - (thread-first (treesit-node-parent node)(treesit-node-text)) + (thread-first (treesit-node-parent node) (treesit-node-text)) name))) +;;; Code blocks + +(defvar-local markdown-ts--configured-languages nil + "A list of languages that have been setup in this buffer. + +When a code block of a language appear, `markdown-ts-mode' loads +language setups like font-lock and indentation for that language, and +add that language to this list.") + +(defun markdown-ts--harvest-treesit-configs (mode) + "Harvest tree-sitter configs from MODE. +Return a plist with the following keys and value: + + :font-lock (from `treesit-font-lock-settings') + :simple-indent (from `treesit-simple-indent-rules') + :range (from `treesit-range-settings')" + (with-temp-buffer + (funcall mode) + (list :font-lock treesit-font-lock-settings + :simple-indent treesit-simple-indent-rules + :range treesit-range-settings))) + +(defun markdown-ts--add-config-for-mode (language mode) + "Add configurations for LANGUAGE from MODE to current buffer. + +Configuration includes font-lock and indent. For font-lock rules, use +the same features enabled in MODE." + (let ((configs (markdown-ts--harvest-treesit-configs mode))) + (ignore language) ; We might make use of this later. + (setq treesit-font-lock-settings + (append treesit-font-lock-settings + ;; Get all the font-lock settings, including ones that + ;; don't pertain to LANGUAGE. This way we get jsdoc + ;; from js-ts-mode, for example. + (plist-get configs :font-lock))) + (setq treesit-simple-indent-rules + (append treesit-simple-indent-rules + ;; Similarly, get all indent rules. + (plist-get configs :simple-indent))) + (setq treesit-range-settings + (append treesit-range-settings + (plist-get configs :range))) + (setq-local indent-line-function #'treesit-indent) + (setq-local indent-region-function #'treesit-indent-region))) + +(defun markdown-ts--convert-code-block-language (node) + "Convert NODE to a language for the code block." + (let* ((lang-string (alist-get (treesit-node-text node) + markdown-ts--code-block-language-map + (treesit-node-text node) nil #'equal)) + (lang (intern (downcase lang-string)))) + ;; FIXME: Kind of a hack here: we use this function as a hook for + ;; loading up configs for the language for the code block on-demand. + (unless (memq lang markdown-ts--configured-languages) + (let ((mode (alist-get lang markdown-ts-code-block-source-mode-map))) + (when mode + (markdown-ts--add-config-for-mode lang mode) + (push lang markdown-ts--configured-languages)))) + lang)) + +(defun markdown-ts--range-settings () + "Return range settings for `markdown-ts-mode'." + (treesit-range-rules + :embed 'markdown-inline + :host 'markdown + :range-fn #'treesit-range-fn-exclude-children + '((inline) @markdown-inline) + + :embed 'html + :host 'markdown + '((html_block) @html) + + :embed #'markdown-ts--convert-code-block-language + :host 'markdown + :local t + '((fenced_code_block (info_string (language) @language) + (code_fence_content) @content)))) + +;;; Major mode + (defun markdown-ts-setup () "Setup treesit for `markdown-ts-mode'." (setq-local treesit-font-lock-settings markdown-ts--treesit-settings) + (setq-local treesit-range-settings (markdown-ts--range-settings)) (treesit-major-mode-setup)) ;;;###autoload (define-derived-mode markdown-ts-mode text-mode "Markdown" "Major mode for editing Markdown using tree-sitter grammar." (setq-local font-lock-defaults nil - treesit-font-lock-feature-list '((delimiter) - (paragraph) - (paragraph-inline))) + treesit-font-lock-feature-list '((delimiter heading) + (paragraph) + (paragraph-inline))) (setq-local treesit-simple-imenu-settings `(("Headings" markdown-ts-imenu-node-p nil markdown-ts-imenu-name-function))) commit 23b957e128a270f0ea829103839f5645e1c1bf1d Author: Stefan Kangas Date: Tue Apr 15 22:22:16 2025 +0200 ; Add missing :group to new defcustom * lisp/dired-aux.el (dired-create-empty-file-in-current-directory): Add missing :group. diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el index 100f203b3f6..e5b08af2a30 100644 --- a/lisp/dired-aux.el +++ b/lisp/dired-aux.el @@ -2881,6 +2881,7 @@ adds the new file (and new subdirectories if provided) to whichever directory the user enters at the prompt). If nil, `dired-create-empty-file' acts on the default directory by default." :type 'boolean + :group 'dired :version "31.1") ;;;###autoload commit 8528249ee29b243772de48c7c44d07744adb3afc Author: Jared Finder Date: Sat Feb 22 14:25:37 2025 -0800 Show drag cursor on all window lines (mode, tab, header) * lisp/ruler-mode.el (ruler-mode-map): Remove down-mouse-1 binding that conflicts with dragging header line. * src/xdisp.c (note_mode_line_or_margin_highlight): Renamed to... (note_line_or_margin_highlight): ...new name since it applies to any window line (mode, tab, header). Set drag cursor for window top lines. (note_mouse_highlight): Update call to new name (bug#76084). diff --git a/lisp/ruler-mode.el b/lisp/ruler-mode.el index 64568e06cc9..e196722a413 100644 --- a/lisp/ruler-mode.el +++ b/lisp/ruler-mode.el @@ -511,7 +511,6 @@ START-EVENT is the mouse click event." (defvar-keymap ruler-mode-map :doc "Keymap for `ruler-mode'." - " " #'ignore " " #'ignore " " #'ruler-mode-mouse-grab-any-column " S-" #'ruler-mode-mouse-set-left-margin diff --git a/src/xdisp.c b/src/xdisp.c index dedd4bcaeea..a26626dd61e 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -35873,15 +35873,15 @@ define_frame_cursor1 (struct frame *f, Emacs_Cursor cursor, Lisp_Object pointer) #endif } -/* Take proper action when mouse has moved to the mode or header line - or marginal area AREA of window W, x-position X and y-position Y. - X is relative to the start of the text display area of W, so the - width of bitmap areas and scroll bars must be subtracted to get a - position relative to the start of the mode line. */ +/* Take proper action when mouse has moved to one of the window's lines + (mode, tab, or header) or marginal area AREA of window W, x-position + X and y-position Y. X is relative to the start of the text display + area of W, so the width of bitmap areas and scroll bars must be + subtracted to get a position relative to the start of a line. */ static void -note_mode_line_or_margin_highlight (Lisp_Object window, int x, int y, - enum window_part area) +note_line_or_margin_highlight (Lisp_Object window, int x, int y, + enum window_part area) { struct window *w = XWINDOW (window); struct frame *f = XFRAME (w->frame); @@ -36017,9 +36017,13 @@ note_mode_line_or_margin_highlight (Lisp_Object window, int x, int y, /* Change the mouse pointer according to what is under it. */ if (FRAME_WINDOW_P (f)) { - bool draggable = (! WINDOW_BOTTOMMOST_P (w) - || minibuf_level - || NILP (Vresize_mini_windows)); + bool draggable_window_bottom_line = + (area == ON_MODE_LINE && (! WINDOW_BOTTOMMOST_P (w) + || minibuf_level + || NILP (Vresize_mini_windows))); + bool draggable_window_top_line = + ((area == ON_HEADER_LINE || area == ON_TAB_LINE) + && ! WINDOW_TOPMOST_P (w)); if (STRINGP (string)) { @@ -36038,11 +36042,12 @@ note_mode_line_or_margin_highlight (Lisp_Object window, int x, int y, map = Fget_text_property (pos, Qlocal_map, string); if (!KEYMAPP (map)) map = Fget_text_property (pos, Qkeymap, string); - if (!KEYMAPP (map) && draggable && area == ON_MODE_LINE) + if (!KEYMAPP (map) && (draggable_window_top_line + || draggable_window_bottom_line)) cursor = FRAME_OUTPUT_DATA (f)->vertical_drag_cursor; } } - else if (draggable && area == ON_MODE_LINE) + else if (draggable_window_top_line || draggable_window_bottom_line) cursor = FRAME_OUTPUT_DATA (f)->vertical_drag_cursor; else if ((area == ON_MODE_LINE && WINDOW_BOTTOMMOST_P (w) @@ -36474,11 +36479,11 @@ note_mouse_highlight (struct frame *f, int x, int y) } #endif - /* Mouse is on the mode, header line or margin? */ + /* Mouse is on a line or margin? */ if (part == ON_MODE_LINE || part == ON_HEADER_LINE || part == ON_TAB_LINE || part == ON_LEFT_MARGIN || part == ON_RIGHT_MARGIN) { - note_mode_line_or_margin_highlight (window, x, y, part); + note_line_or_margin_highlight (window, x, y, part); #ifdef HAVE_WINDOW_SYSTEM if (part == ON_LEFT_MARGIN || part == ON_RIGHT_MARGIN) commit f67e64028efd2d2b12126039ffd830e769015910 Author: Jens Schmidt Date: Sat Apr 12 00:02:56 2025 +0200 Better handle errors after sync man invocations * lisp/man.el (Man-start-calling): Declare as debuggable. (Man-getpage-in-background): Call `Man-bgproc-sentinel' with a cons (BUFFER . EXIT-STATUS) as PROCESS argument for synchronous calls. (Man-bgproc-sentinel): Use that information to handle those more similarly to asynchronous calls. Do not employ window selection hacks for synchronous calls. (Bug#77755) diff --git a/lisp/man.el b/lisp/man.el index 4d5e8e323ca..d34d9154052 100644 --- a/lisp/man.el +++ b/lisp/man.el @@ -1166,6 +1166,7 @@ for the current invocation." (defmacro Man-start-calling (&rest body) "Start the man command in `body' after setting up the environment." + (declare (debug t)) `(let ((process-environment (copy-sequence process-environment)) ;; The following is so Awk script gets \n intact ;; But don't prevent decoding of the outside. @@ -1253,7 +1254,7 @@ Return the buffer in which the manpage will appear." exit-status))) (setq msg exit-status)) (man--maybe-fontify-manpage) - (Man-bgproc-sentinel bufname msg)))))) + (Man-bgproc-sentinel (cons buffer exit-status) msg)))))) buffer)) (defun Man-update-manpage () @@ -1541,17 +1542,26 @@ command is run. Second argument STRING is the entire string of output." "Manpage background process sentinel. When manpage command is run asynchronously, PROCESS is the process object for the manpage command; when manpage command is run -synchronously, PROCESS is the name of the buffer where the manpage -command is run. Second argument MSG is the exit message of the -manpage command." - (let ((Man-buffer (if (stringp process) (get-buffer process) - (process-buffer process))) +synchronously, PROCESS is a cons (BUFFER . EXIT-STATUS) of the buffer +where the manpage command has run and the exit status of the manpage +command. Second argument MSG is the exit message of the manpage +command." + (let ((asynchronous (processp process)) + Man-buffer process-status exit-status (delete-buff nil) message) + (if asynchronous + (setq Man-buffer (process-buffer process) + process-status (process-status process) + exit-status (process-exit-status process)) + (setq Man-buffer (car process) + process-status 'exit + exit-status (cdr process))) + (if (not (buffer-live-p Man-buffer)) ;; deleted buffer - (or (stringp process) - (set-process-buffer process nil)) + (and asynchronous + (set-process-buffer process nil)) (with-current-buffer Man-buffer (save-excursion @@ -1570,15 +1580,14 @@ manpage command." ;; `Man-highlight-references'. The \\s- bits here are ;; meant to allow for multiple options with -k among them. ((and (string-match "\\(\\`\\|\\s-\\)-k\\s-" Man-arguments) - (eq (process-status process) 'exit) - (= (process-exit-status process) 0) + (eq process-status 'exit) + (= exit-status 0) (= (point-min) (point-max))) (setq message (format "%s: no matches" Man-arguments) delete-buff t)) - ((or (stringp process) - (not (and (eq (process-status process) 'exit) - (= (process-exit-status process) 0)))) + ((not (and (eq process-status 'exit) + (= exit-status 0))) (or (zerop (length msg)) (progn (setq message @@ -1630,10 +1639,13 @@ manpage command." (progn (quit-restore-window (get-buffer-window Man-buffer t) 'kill) - ;; Ensure that we end up in the correct window. - (let ((old-window (old-selected-window))) - (when (window-live-p old-window) - (select-window old-window)))) + ;; Ensure that we end up in the correct window. Which is + ;; only relevant in rather special cases and if we have + ;; been called in an asynchronous fashion, see bug#38164. + (and asynchronous + (let ((old-window (old-selected-window))) + (when (window-live-p old-window) + (select-window old-window))))) (kill-buffer Man-buffer))) (when message commit 1d3b1b7d88d7710aed9403c3ce750042387dfe5c Author: Juri Linkov Date: Tue Apr 15 20:55:50 2025 +0300 ; * etc/NEWS: Move ts-modes after tree-sitter section. diff --git a/etc/NEWS b/etc/NEWS index 1baa82be31d..af4829c2ede 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -674,6 +674,68 @@ Now 'treesit-explore-mode' (or 'treesit-explore') prompts for a parser rather than a language, and it is now possible to select a local parser at point to explore. +** C-ts mode + ++++ +*** New user option 'c-ts-mode-enable-doxygen'. +By default, this is nil, and the Doxygen comment blocks in C/C++ source +are highlighted like other comments. When non-nil, Doxygen comment +blocks are syntax-highlighted if the Doxygen grammar library is +available. + +** Go-ts mode + ++++ +*** New unit test commands. +Three new commands are now available to run unit tests. + +The 'go-ts-mode-test-function-at-point' command runs the unit test at +point. If a region is active, it runs all the unit tests under the +region. It is bound to 'C-c C-t t' in 'go-ts-mode'. + +The 'go-ts-mode-test-this-file' command runs all unit tests in the current +file. It is bound to 'C-c C-t f' in 'go-ts-mode'. + +The 'go-ts-mode-test-this-package' command runs all unit tests under the +package of the current buffer. It is bound to 'C-c C-t p' in 'go-ts-mode'. + +The 'go-ts-mode-build-tags' user option is available to set a list of +build tags for the test commands. + +The 'go-ts-mode-test-flags' user option is available to set a list of +additional flags to pass to the go test command line. + +** Java-ts mode + ++++ +*** New user option 'java-ts-mode-enable-doxygen'. +By default, this is nil, and the Doxygen comment blocks in Java source +are highlighted like other comments. When non-nil, Doxygen comment +blocks are syntax-highlighted if the Doxygen grammar library is +available. + +--- +*** New user option 'java-ts-mode-method-chaining-indent-offset'. +Now method chaining is indented by 8 spaces rather than 4, and this +option controls how much is indented for method chaining. + +** PHP-ts mode + +--- +*** 'php-ts-mode-run-php-webserver' can now accept a custom "php.ini" file. +You can use the new optional argument CONFIG when calling +'php-ts-mode-run-php-webserver' to pass an alternative "php.ini" file to +the built-in Web server. Interactively, when invoked with a prefix +argument, 'php-ts-mode-run-php-webserver' prompts for the config file as +well as for other connection parameters. + +** Rust-ts mode + +--- +*** New user option 'rust-ts-mode-fontify-number-suffix-as-type'. +Rust number literals may have an optional type suffix. When this option +is non-nil, this suffix is fontified using 'font-lock-type-face'. + ** Text mode --- @@ -1156,51 +1218,6 @@ To get the old behavior back, add an element '(enum-open 'c-offsets-alist' likewise in any of the other ways detailed in the "(ccmode) Config Basics" node of the CC mode manual. -** Go-ts mode - -+++ -*** New unit test commands. -Three new commands are now available to run unit tests. - -The 'go-ts-mode-test-function-at-point' command runs the unit test at -point. If a region is active, it runs all the unit tests under the -region. It is bound to 'C-c C-t t' in 'go-ts-mode'. - -The 'go-ts-mode-test-this-file' command runs all unit tests in the current -file. It is bound to 'C-c C-t f' in 'go-ts-mode'. - -The 'go-ts-mode-test-this-package' command runs all unit tests under the -package of the current buffer. It is bound to 'C-c C-t p' in 'go-ts-mode'. - -The 'go-ts-mode-build-tags' user option is available to set a list of -build tags for the test commands. - -The 'go-ts-mode-test-flags' user option is available to set a list of -additional flags to pass to the go test command line. - -** C-ts mode - -+++ -*** New user option 'c-ts-mode-enable-doxygen'. -By default, this is nil, and the Doxygen comment blocks in C/C++ source -are highlighted like other comments. When non-nil, Doxygen comment -blocks are syntax-highlighted if the Doxygen grammar library is -available. - -** Java-ts mode - -+++ -*** New user option 'java-ts-mode-enable-doxygen'. -By default, this is nil, and the Doxygen comment blocks in Java source -are highlighted like other comments. When non-nil, Doxygen comment -blocks are syntax-highlighted if the Doxygen grammar library is -available. - ---- -*** New user option 'java-ts-mode-method-chaining-indent-offset'. -Now method chaining is indented by 8 spaces rather than 4, and this -option controls how much is indented for method chaining. - ** Emacs Lisp mode --- @@ -1378,23 +1395,6 @@ They suggest the previous revision as the default for REV1, not the last one as before. This makes them different from 'vc-diff' and 'vc-root-diff' when those are called without a prefix argument. -** PHP-ts mode - ---- -*** 'php-ts-mode-run-php-webserver' can now accept a custom "php.ini" file. -You can use the new optional argument CONFIG when calling -'php-ts-mode-run-php-webserver' to pass an alternative "php.ini" file to -the built-in Web server. Interactively, when invoked with a prefix -argument, 'php-ts-mode-run-php-webserver' prompts for the config file as -well as for other connection parameters. - -** Rust-ts mode - ---- -*** New user option 'rust-ts-mode-fontify-number-suffix-as-type'. -Rust number literals may have an optional type suffix. When this option -is non-nil, this suffix is fontified using 'font-lock-type-face'. - ** Ediff +++ commit aa24b9c849d13aa63de3079672003fb760bf511f Author: Juri Linkov Date: Tue Apr 15 20:33:14 2025 +0300 * lisp/treesit.el (treesit-up-list): Signal an error. Signal 'scan-error' when called noninteractively (bug#77744). diff --git a/lisp/treesit.el b/lisp/treesit.el index ae0ef56c65a..5a408b09507 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -3193,7 +3193,12 @@ ARG is described in the docstring of `up-list'." (goto-char (if (> arg 0) (treesit-node-end parent) (treesit-node-start parent)))) - (user-error "At top level"))) + (if no-syntax-crossing + ;; Assume called interactively; don't signal an error. + (user-error "At top level") + (signal 'scan-error + (list (format-message "No more %S to move across" pred) + (point) (point)))))) (setq cnt (- cnt inc))))) (defun treesit-cycle-sexp-type () commit 0ac12aed09702b2d135312e8dad4e173fcd23dae Author: Stephen Berman Date: Tue Apr 15 19:01:19 2025 +0200 Optionally add new empty file to Dired subdirectory Suggested by Kasper Gałkowski (bug#77668) * etc/NEWS: Announce new Dired user option. * lisp/dired-aux.el (dired-create-empty-file-in-current-directory): New user option. (dired-create-empty-file): Use it. Update and clarify doc string. diff --git a/etc/NEWS b/etc/NEWS index 2a19e1457a6..1baa82be31d 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1423,6 +1423,20 @@ a control panel window. ** Dired +--- +*** New user option 'dired-create-empty-file-in-current-directory'. +When non-nil, 'dired-create-empty-file' creates a new empty file and +adds an entry for it (or its topmost new parent directory if created) +under the current subdirectory in the Dired buffer by default +(otherwise, it adds adds the new file (and new subdirectories if +provided) to whichever directory the user enters at the prompt). When +nil, `dired-create-empty-file' acts on the default directory by default. + +Note that setting this user option to non-nil makes invoking +'dired-create-empty-file' outside of a Dired buffer raise an error (like +other Dired commands that always prompt with the current subdirectory, +such as 'dired-create-directory'). + +++ *** New user option 'dired-check-symlinks' allows disabling validity checks. Dired uses 'file-truename' to check symbolic link validity when diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el index 2e8d5c1a379..100f203b3f6 100644 --- a/lisp/dired-aux.el +++ b/lisp/dired-aux.el @@ -2872,13 +2872,32 @@ If DIRECTORY already exists, signal an error." (dired-add-file new) (dired-move-to-filename)))) +(defcustom dired-create-empty-file-in-current-directory nil + "Whether `dired-create-empty-file' acts on the current directory. +If non-nil, `dired-create-empty-file' creates a new empty file and adds +an entry for it (or its topmost new parent directory if created) under +the current subdirectory in the Dired buffer by default (otherwise, it +adds the new file (and new subdirectories if provided) to whichever +directory the user enters at the prompt). If nil, +`dired-create-empty-file' acts on the default directory by default." + :type 'boolean + :version "31.1") + ;;;###autoload (defun dired-create-empty-file (file) "Create an empty file called FILE. -Add a new entry for the new file in the Dired buffer. Parent directories of FILE are created as needed. +Add an entry in the Dired buffer for the topmost new parent +directory of FILE, if created, otherwise for the new file. +If user option `dired-create-empty-file-in-current-directory' is +non-nil, act on the current subdirectory by default, otherwise act on +the default directory by default. If FILE already exists, signal an error." - (interactive (list (read-file-name "Create empty file: ")) dired-mode) + (interactive + (list (read-file-name "Create empty file: " + (and dired-create-empty-file-in-current-directory + (dired-current-directory)))) + dired-mode) (let* ((expanded (expand-file-name file)) new) (if (file-exists-p expanded) commit 2b535a9c7719a13ab19884cca754024003875c88 Author: Eli Zaretskii Date: Tue Apr 15 16:58:50 2025 +0300 ; Improve documentation of some functions in files-x.el * lisp/files-x.el (modify-file-local-variable) (modify-file-local-variable-prop-line) (add-file-local-variable-prop-line) (delete-file-local-variable-prop-line, add-file-local-variable) (delete-file-local-variable): Document the effect of INTERACTIVE argument. diff --git a/lisp/files-x.el b/lisp/files-x.el index 82b69de7c17..1aa209de4db 100644 --- a/lisp/files-x.el +++ b/lisp/files-x.el @@ -159,7 +159,10 @@ is not `delete' then this function adds the first line containing the string `Local Variables:' and the last line containing the string `End:'. If OP is `delete' then delete all existing settings of VARIABLE -from the Local Variables list ignoring the input argument VALUE." +from the Local Variables list ignoring the input argument VALUE. + +If optional variable INTERACTIVE is non-nil, display a message telling +the user how to make the new value take effect." (catch 'exit (let ((beg (point)) end replaced-pos) (unless enable-local-variables @@ -250,7 +253,10 @@ containing the string `End:'. For adding local variables on the first line of a file, for example for settings like `lexical-binding, which must be specified there, -use the `add-file-local-variable-prop-line' command instead." +use the `add-file-local-variable-prop-line' command instead. + +If optional variable INTERACTIVE is non-nil, display a message telling +the user how to make the new value take effect." (interactive (let ((variable (read-file-local-variable "Add file-local variable"))) ;; Error before reading value. @@ -265,7 +271,10 @@ use the `add-file-local-variable-prop-line' command instead." ;;;###autoload (defun delete-file-local-variable (variable &optional interactive) - "Delete all settings of file-local VARIABLE from the Local Variables list." + "Delete all settings of file-local VARIABLE from the Local Variables list. + +If optional variable INTERACTIVE is non-nil, display a message telling +the user how to make the new value take effect." (interactive (list (read-file-local-variable "Delete file-local variable") t)) (modify-file-local-variable variable nil 'delete interactive)) @@ -281,7 +290,10 @@ If there is no -*- line at the beginning of the current file buffer and OP is not `delete' then this function adds the -*- line. If OP is `delete' then delete all existing settings of VARIABLE -from the -*- line ignoring the input argument VALUE." +from the -*- line ignoring the input argument VALUE. + +If optional variable INTERACTIVE is non-nil, display a message telling +the user how to make the new value take effect." (catch 'exit (let ((beg (point)) end replaced-pos) (unless enable-local-variables @@ -409,7 +421,10 @@ If there is no -*- line at the beginning of the current file buffer then this function adds it. To add variables to the Local Variables list at the end of the file, -use the `add-file-local-variable' command instead." +use the `add-file-local-variable' command instead. + +If optional variable INTERACTIVE is non-nil, display a message telling +the user how to make the new value take effect." (interactive (let ((variable (read-file-local-variable "Add -*- file-local variable"))) (list variable (read-file-local-variable-value variable) t))) @@ -417,7 +432,10 @@ use the `add-file-local-variable' command instead." ;;;###autoload (defun delete-file-local-variable-prop-line (variable &optional interactive) - "Delete all settings of file-local VARIABLE from the -*- line." + "Delete all settings of file-local VARIABLE from the -*- line. + +If optional variable INTERACTIVE is non-nil, display a message telling +the user how to make the new value take effect." (interactive (list (read-file-local-variable "Delete -*- file-local variable") t)) (modify-file-local-variable-prop-line variable nil 'delete interactive)) commit 74842b4cb2c164ceed5cbe6ee5ad578ee46fe012 Author: Elías Gabriel Pérez Date: Sun Apr 13 12:26:08 2025 -0600 Add block-comment variables to cc-mode. * lisp/progmodes/cc-cmds.el (c-indent-new-comment-line): Add block-comment-start and block-comment-end * lisp/progmodes/cc-mode.el (c-basic-common-init): Declare block-comment-start and block-comment-end buffer-local. * lisp/emacs-lisp/lisp-mode.el (lisp-mode-variables): Move block-comment variables ... (lisp-mode): ... to here. (Bug#77424) diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el index ce79393fb90..f27baae1b36 100644 --- a/lisp/emacs-lisp/lisp-mode.el +++ b/lisp/emacs-lisp/lisp-mode.el @@ -701,8 +701,6 @@ font-lock keywords will not be case sensitive." (setq-local add-log-current-defun-function #'lisp-current-defun-name) (setq-local comment-start ";") (setq-local comment-start-skip ";+ *") - (setq-local block-comment-start "#|") - (setq-local block-comment-end "|#") (setq-local comment-add 1) ;default to `;;' in comment-region (setq-local comment-column 40) (setq-local comment-use-syntax t) @@ -830,6 +828,8 @@ or to switch back to an existing one." "\\(\\(^\\|[^\\\n]\\)\\(\\\\\\\\\\)*\\)\\(;+\\|#|\\) *") (setq-local comment-end-skip "[ \t]*\\(\\s>\\||#\\)") (setq-local font-lock-comment-end-skip "|#") + (setq-local block-comment-start "#|") + (setq-local block-comment-end "|#") (setq imenu-case-fold-search t)) (defun lisp-find-tag-default () diff --git a/lisp/progmodes/cc-cmds.el b/lisp/progmodes/cc-cmds.el index 9230faa56da..06397d23321 100644 --- a/lisp/progmodes/cc-cmds.el +++ b/lisp/progmodes/cc-cmds.el @@ -5015,6 +5015,7 @@ If a fill prefix is specified, it overrides all the above." (setq comment-start "/* " comment-end " */")) (unless (string-match "[ \t]*//" comment-start) (setq comment-start "// " comment-end ""))) + (setq block-comment-start "/*" block-comment-end "*/") (setq col (save-excursion (back-to-indentation) (current-column))) diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el index efeb6c1005a..fa3788ba383 100644 --- a/lisp/progmodes/cc-mode.el +++ b/lisp/progmodes/cc-mode.el @@ -610,6 +610,8 @@ that requires a literal mode spec at compile time." (make-local-variable 'comment-start) (make-local-variable 'comment-end) (make-local-variable 'comment-start-skip) + (make-local-variable 'block-comment-start) + (make-local-variable 'block-comment-end) (make-local-variable 'paragraph-start) (make-local-variable 'paragraph-separate) commit 788c9cfb62c7fd50b171a9209dd7453bd03f14bf Author: Michael Albinus Date: Tue Apr 15 14:17:25 2025 +0200 Fix tree-sitter tests on Emba * test/infra/Dockerfile.emba: Use tree-sitter-rust v0.23.3 in order to match ABI version of libtree-sitter0. diff --git a/test/infra/Dockerfile.emba b/test/infra/Dockerfile.emba index 201d48056e7..7b70a98ebd9 100644 --- a/test/infra/Dockerfile.emba +++ b/test/infra/Dockerfile.emba @@ -117,35 +117,40 @@ RUN ./autogen.sh autoconf RUN ./configure --with-tree-sitter RUN make -j `nproc` bootstrap -# Install language grammars. +# Install language grammars. The ABI versions of libtree-sitter0 and +# the respective grammars must match. The grammar ABI version is determined by +# grep LANGUAGE_VERSION /path/to/grammar-repo/src/parser.c RUN mkdir -p /root/.emacs.d/tree-sitter RUN git config --global http.sslverify "false" # See https://github.com/emacs-tree-sitter/tree-sitter-langs/tree/master/repos RUN src/emacs -Q --batch \ + --eval \ + '(message "ABI min version %d max version %d" \ + (treesit-library-abi-version t) (treesit-library-abi-version))' \ --eval '(setq \ treesit-extra-load-path (list "/root/.emacs.d/tree-sitter") \ treesit-language-source-alist \ - (quote ((bash "https://github.com/tree-sitter/tree-sitter-bash") \ - (c "https://github.com/tree-sitter/tree-sitter-c") \ - (c-sharp "https://github.com/tree-sitter/tree-sitter-c-sharp") \ - (cpp "https://github.com/tree-sitter/tree-sitter-cpp") \ - (css "https://github.com/tree-sitter/tree-sitter-css") \ - (elixir "https://github.com/elixir-lang/tree-sitter-elixir") \ - (go "https://github.com/tree-sitter/tree-sitter-go") \ - (gomod "https://github.com/camdencheek/tree-sitter-go-mod") \ - (gowork "https://github.com/omertuc/tree-sitter-go-work") \ - (heex "https://github.com/phoenixframework/tree-sitter-heex") \ - (html "https://github.com/tree-sitter/tree-sitter-html") \ - (java "https://github.com/tree-sitter/tree-sitter-java") \ - (javascript "https://github.com/tree-sitter/tree-sitter-javascript") \ - (jsdoc "https://github.com/tree-sitter/tree-sitter-jsdoc") \ - (json "https://github.com/tree-sitter/tree-sitter-json") \ - (lua "https://github.com/tree-sitter-grammars/tree-sitter-lua") \ - (python "https://github.com/tree-sitter/tree-sitter-python") \ - (ruby "https://github.com/tree-sitter/tree-sitter-ruby") \ - (rust "https://github.com/tree-sitter/tree-sitter-rust") \ - (tsx "https://github.com/tree-sitter/tree-sitter-typescript" "master" "tsx/src") \ - (typescript "https://github.com/tree-sitter/tree-sitter-typescript" "master" "typescript/src"))))' \ + (quote ((bash "https://github.com/tree-sitter/tree-sitter-bash") \ + (c "https://github.com/tree-sitter/tree-sitter-c") \ + (c-sharp "https://github.com/tree-sitter/tree-sitter-c-sharp") \ + (cpp "https://github.com/tree-sitter/tree-sitter-cpp") \ + (css "https://github.com/tree-sitter/tree-sitter-css") \ + (elixir "https://github.com/elixir-lang/tree-sitter-elixir") \ + (go "https://github.com/tree-sitter/tree-sitter-go") \ + (gomod "https://github.com/camdencheek/tree-sitter-go-mod") \ + (gowork "https://github.com/omertuc/tree-sitter-go-work") \ + (heex "https://github.com/phoenixframework/tree-sitter-heex") \ + (html "https://github.com/tree-sitter/tree-sitter-html") \ + (java "https://github.com/tree-sitter/tree-sitter-java") \ + (javascript "https://github.com/tree-sitter/tree-sitter-javascript") \ + (jsdoc "https://github.com/tree-sitter/tree-sitter-jsdoc") \ + (json "https://github.com/tree-sitter/tree-sitter-json") \ + (lua "https://github.com/tree-sitter-grammars/tree-sitter-lua") \ + (python "https://github.com/tree-sitter/tree-sitter-python") \ + (ruby "https://github.com/tree-sitter/tree-sitter-ruby") \ + (rust "https://github.com/tree-sitter/tree-sitter-rust" "v0.23.3") \ + (tsx "https://github.com/tree-sitter/tree-sitter-typescript" "master" "tsx/src") \ + (typescript "https://github.com/tree-sitter/tree-sitter-typescript" "master" "typescript/src"))))' \ --eval '(dolist (lang (mapcar (quote car) treesit-language-source-alist)) \ (treesit-install-language-grammar lang "/root/.emacs.d/tree-sitter"))' commit 2b7268c43f52942f88aef1cf442603819c505b21 Author: Po Lu Date: Tue Apr 15 17:20:37 2025 +0800 ; * exec/loader-mips64el.s (skip_environ): Eliminate one more `daddi'. diff --git a/exec/loader-mips64el.s b/exec/loader-mips64el.s index cab80d5e19f..2f20c2cf5d3 100644 --- a/exec/loader-mips64el.s +++ b/exec/loader-mips64el.s @@ -207,8 +207,9 @@ skip_environ: $sp = copy of string. */ move T4, $sp # current sp dsub T5, $t3, $sp # new argc - current sp + li $t8, -16 blt T5, 16, 1f # more than two slots apart - dadd $sp, $t3, -16 # $sp = two slots below new argc + dadd $sp, $t3, $t8 # $sp = two slots below new argc j 2f # skip copying fds move $sp, T4 # retain current sp 1: ld T5, (T4) # old primary fd commit 638b084a611316c6fa4a58adb4dec97e461b31da Author: Po Lu Date: Tue Apr 15 17:20:05 2025 +0800 Unconditionally define MIPS_NABI on mips64el * exec/configure.ac (MIPS_NABI): Always define to 1 on mips64el-*-linux*. diff --git a/exec/configure.ac b/exec/configure.ac index 3415a0aa91c..ef825e26788 100644 --- a/exec/configure.ac +++ b/exec/configure.ac @@ -470,7 +470,8 @@ _ACEOF AS_IF([test "x$exec_cv_as_daddi" != "xyes"], [DADDI_BROKEN=yes]) exec_CHECK_LINUX_CLONE3 - exec_CHECK_MIPS_NABI + AC_DEFINE([MIPS_NABI], [1], + [Define to 1 if MIPS NABI calling convention is being used.]) LOADERFLAGS="$LOADERFLAGS $LDPREFIX-Ttext=0x3e00000000" is_mips=yes exec_loader=loader-mips64el.s], [*], commit 1aa14f8fc548eca8eaff91b55e92672fd510ae37 Merge: 3f73b29875d 19b6e36a225 Author: Eli Zaretskii Date: Tue Apr 15 12:19:32 2025 +0300 Merge branch 'master' of git.savannah.gnu.org:/srv/git/emacs commit 3f73b29875dcfcc9b22d8346f8965f3fb31f4fb4 Author: Visuwesh Date: Sun Apr 13 14:28:09 2025 +0530 Don't warn about lexbind cookies when loading calc settings * lisp/calc/calc-mode.el (calc-settings-file-name): * lisp/calc/calc.el (calc-mode): Bind 'warning-inhibit-types' to avoid lexbind cookie missing warning. diff --git a/lisp/calc/calc-mode.el b/lisp/calc/calc-mode.el index 6f31d6af040..d68daee1e48 100644 --- a/lisp/calc/calc-mode.el +++ b/lisp/calc/calc-mode.el @@ -326,7 +326,8 @@ (equal user-init-file calc-settings-file) (> arg 0)) (< arg 0) - (load name t) + (let ((warning-inhibit-types '((files missing-lexbind-cookie)))) + (load name t)) (message "New file"))))) (defun math-get-modes-vec () diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el index 80559c1657c..a7bd671998e 100644 --- a/lisp/calc/calc.el +++ b/lisp/calc/calc.el @@ -1347,7 +1347,8 @@ Notations: 3.14e6 3.14 * 10^6 (equal calc-settings-file user-init-file) (progn (setq calc-loaded-settings-file t) - (load (file-name-sans-extension calc-settings-file) t))) ; t = missing-ok + (let ((warning-inhibit-types '((files missing-lexbind-cookie)))) + (load (file-name-sans-extension calc-settings-file) t)))) ; t = missing-ok (let ((p command-line-args)) (while p (and (equal (car p) "-f") commit 19b6e36a22513b437b86d4b6418ce31f551902cc Author: Po Lu Date: Tue Apr 15 17:11:56 2025 +0800 * exec/loader-mips64el.s (rest_of_exec): Deal with assembler bugs. diff --git a/exec/loader-mips64el.s b/exec/loader-mips64el.s index be978d8b18b..cab80d5e19f 100644 --- a/exec/loader-mips64el.s +++ b/exec/loader-mips64el.s @@ -175,13 +175,15 @@ rest_of_exec: dadd $s1, $s1, $t0 # s1 = start of envp skip_environ: /* Locate the auxiliary vector. */ + li $t8, 8 # DADDI2 isn't appropriate in delay slots. 1: ld $t0, ($s1) # t0 = *s1 bnez $t0, 1b # skip environment entry - daddi $s1, $s1, 8 # s1++ + dadd $s1, $s1, $t8 # s1++ move $s2, $s1 # s2 = end of environment + li $t8, 16 1: ld $t0, ($s1) # t0 = s1->a_type bnez $t0, 1b # skip auxiliary vector entry - daddi $s1, $s1, 16 # (Elf64_auxv_t *) s1++ + dadd $s1, $s1, $t8 # (Elf64_auxv_t *) s1++ /* Decide how many bytes must be copied and where to save the file name. Move the stack pointer to a safe position below any data that must be preserved. */ commit 458ad0cb899491da546c06a3f1cd63c0f54623ac Author: Po Lu Date: Tue Apr 15 17:03:57 2025 +0800 * exec/configure.ac (exec_CHECK_MIPS_NABI): Test __LP64__ also. diff --git a/exec/configure.ac b/exec/configure.ac index d462a25b9d9..3415a0aa91c 100644 --- a/exec/configure.ac +++ b/exec/configure.ac @@ -213,11 +213,11 @@ AC_CACHE_CHECK([whether MIPS NABI calling convention is used], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include ]], [[ -#ifndef __mips64__ +#if !defined __mips64__ && !defined __LP64__ #if _MIPS_SIM == _ABIO32 OABI in use. #endif /* _MIPS_SIM == _ABIO32 */ -#endif /* !__mips64__ */ +#endif /* !__mips64__ && !defined __LP64__ */ ]])], [exec_cv_mips_nabi=yes], [exec_cv_mips_nabi=no])]) commit 45cf832ac75f8d6fb41a4856d1987062e81dcddb Author: Wojciech Siewierski Date: Mon Apr 14 18:57:28 2025 +0200 Fix deleting the first line of calc trail * lisp/calc/calc-trail.el (calc-trail-kill): Remove the check preventing the removal of the first trail line, which is no longer relevant since commit 8e1376a3912. (Bug#77816) diff --git a/lisp/calc/calc-trail.el b/lisp/calc/calc-trail.el index f134a7b16b9..433d3983b12 100644 --- a/lisp/calc/calc-trail.el +++ b/lisp/calc/calc-trail.el @@ -167,14 +167,7 @@ (interactive "p") (calc-with-trail-buffer (let ((buffer-read-only nil)) - (save-restriction - (narrow-to-region ; don't delete "Emacs Trail" header - (save-excursion - (goto-char (point-min)) - (forward-line 1) - (point)) - (point-max)) - (kill-line n))) + (kill-line n)) (calc-trail-here))) (provide 'calc-trail) commit 5bf86e2be0693c579a43759fd1da1651344d401e Author: Po Lu Date: Tue Apr 15 16:14:14 2025 +0800 Port recent Android changes to mips64el * exec/config-mips.m4.in (DADDI2, DADDI3): Disable at-clobbering by assembler macros expressly. * exec/loader-mips64el.s: Adapt from loader-mipsel.s. * exec/configure.ac (exec_cv_as_daddi): Properly escape reg names. * exec/exec.c (struct exec_jump_command, exec_0): Don't define or set `fpu_mode' if __LP64__. * exec/exec.h (struct exec_tracee): New field `callno'. * exec/trace.c (process_system_call): Always record the current system call number in TRACEE lest it should be required once it has been overwritten upon the syscall's completion. (seccomp_system_call): Likewise. (after_fork): Clear `tracee->callno'. diff --git a/exec/config-mips.m4.in b/exec/config-mips.m4.in index 1c9a4c293a6..4ab395ff2cb 100644 --- a/exec/config-mips.m4.in +++ b/exec/config-mips.m4.in @@ -38,7 +38,11 @@ define(`RESTORE', `ifelse(`@MIPS_N32@',`yes',` nop',` addi $sp, 32')') define(`FP', `ifelse(`@MIPS_N32@',`yes',`$s8',`$fp')') dnl For mips64. Some assemblers don't want to assemble `daddi'. -define(`DADDI2', `ifelse(`@DADDI_BROKEN@',`yes',` li $at, $2 -dadd $1, $1, $at',` daddi $1, $2')') -define(`DADDI3', `ifelse(`@DADDI_BROKEN@',`yes',` li $at, $3 -dadd $1, $2, $at',` daddi $1, $2, $3')') +define(`DADDI2', `ifelse(`@DADDI_BROKEN@',`yes',`.set noat +li $at, $2 +dadd $1, $1, $at +.set at',` daddi $1, $2')') +define(`DADDI3', `ifelse(`@DADDI_BROKEN@',`yes',`.set noat +li $at, $3 +dadd $1, $2, $at +.set at',` daddi $1, $2, $3')') diff --git a/exec/configure.ac b/exec/configure.ac index d91049b8d7b..d462a25b9d9 100644 --- a/exec/configure.ac +++ b/exec/configure.ac @@ -455,12 +455,12 @@ AS_CASE([$host], [x86_64-*linux*], .section text .global __start __start: - li $t0, 0 - li $t1, 0 - daddi $t0, $t1, 1 - daddi $t0, $t1, -1 - daddi $t0, -1 - daddi $t0, 1 + li \$t0, 0 + li \$t1, 0 + daddi \$t0, \$t1, 1 + daddi \$t0, \$t1, -1 + daddi \$t0, -1 + daddi \$t0, 1 _ACEOF $AS $ASFLAGS conftest.s -o conftest.$OBJEXT \ diff --git a/exec/exec.c b/exec/exec.c index b9c3e4ec92a..b83e34bc1b2 100644 --- a/exec/exec.c +++ b/exec/exec.c @@ -231,10 +231,10 @@ struct exec_jump_command /* The value of AT_BASE inside the aux vector. */ USER_WORD at_base; -#if defined __mips__ +#if defined __mips__ && !defined __LP64__ /* The FPU mode to apply. Not used when !MIPS_NABI. */ USER_WORD fpu_mode; -#endif /* defined __mips__ */ +#endif /* defined __mips__ && !defined __LP64__ */ }; @@ -918,6 +918,7 @@ exec_0 (char *name, struct exec_tracee *tracee, USER_WORD header_offset; USER_WORD name_len, aligned_len; struct exec_jump_command jump; + /* This also encompasses !__LP64__. */ #if defined __mips__ && !defined MIPS_NABI int fpu_mode; #endif /* defined __mips__ && !defined MIPS_NABI */ @@ -1130,9 +1131,9 @@ exec_0 (char *name, struct exec_tracee *tracee, fpu_mode = FP_FRE; jump.fpu_mode = fpu_mode; -#elif defined __mips__ +#elif defined __mips__ && !defined __LP64__ jump.fpu_mode = 0; -#endif /* defined __mips__ && !defined MIPS_NABI */ +#endif /* defined __mips__ && defined MIPS_NABI && !defined __LP64__ */ /* The offset used for at_phdr should be that of the first mapping. */ diff --git a/exec/exec.h b/exec/exec.h index eee48dfe2ed..d420061ff87 100644 --- a/exec/exec.h +++ b/exec/exec.h @@ -152,6 +152,10 @@ struct exec_tracee completion. */ USER_WORD sp; + /* ID of the system call that is pending completion. This value is + not available as the call number is overwritten on success. */ + USER_WORD callno; + /* Name of the executable being run. */ char *exec_file; diff --git a/exec/loader-mips64el.s b/exec/loader-mips64el.s index 1493af3c309..be978d8b18b 100644 --- a/exec/loader-mips64el.s +++ b/exec/loader-mips64el.s @@ -15,36 +15,40 @@ # You should have received a copy of the GNU General Public License # along with GNU Emacs. If not, see . - /* NOTE: this file is presently non-functional. */ - include(`config-mips.m4') +/* These "registers" alias a4-a7 and caution must be exercised not + to overwrite them when issuing system calls. */ +define(`T4', `$a4') +define(`T5', `$a5') +define(`T6', `$a6') +define(`T7', `$a7') + .set noreorder # delay slots managed by hand - .set noat # no assembler macros .section .text .global __start __start: -dnl li $v0, 5034 # SYS_nanosleep -dnl dla $a0, .timespec # rqtp -dnl li $a1, 0 # rmtp -dnl syscall # syscall - ld $s2, ($sp) # original stack pointer + ## li $v0, 5034 # SYS_nanosleep + ## dla $a0, timespec # rqtp + ## li $a1, 0 # rmtp + ## syscall # syscall + ld $s6, ($sp) # original stack pointer DADDI3( $s0, $sp, 16) # start of load area DADDI2( $sp, -16) # primary fd, secondary fd li $t0, -1 # secondary fd sd $t0, 8($sp) # initialize secondary fd -.next_action: +next_action: ld $s1, ($s0) # action number andi $t0, $s1, 15 # t0 = action number & 15 - beqz $t0, .open_file # open file? + beqz $t0, open_file # open file? nop # delay slot DADDI2( $t0, -3) # t0 -= 3 - beqz $t0, .rest_of_exec # jump to code + beqz $t0, rest_of_exec # jump to code nop # delay slot li $t1, 1 - beq $t0, $t1, .do_mmap_anon # anonymous mmap? + beq $t0, $t1, do_mmap_anon # anonymous mmap? nop # delay slot -.do_mmap: +do_mmap: ld $t0, 8($s0) # vm address ld $t1, 16($s0) # file_offset ld $t2, 24($s0) # protection @@ -52,10 +56,10 @@ dnl syscall # syscall ld $v0, 40($s0) # flags ld $v1, ($sp) # primary fd andi $s3, $s1, 16 # s1 & 16? - beqz $s3, .do_mmap_1 # secondary fd? + beqz $s3, do_mmap_1 # secondary fd? nop # delay slot ld $v1, 8($sp) # secondary fd -.do_mmap_1: +do_mmap_1: move $a0, $t0 # syscall arg move $a1, $t3 # syscall arg move $a2, $t2 # syscall arg @@ -64,21 +68,21 @@ dnl syscall # syscall move $a5, $t1 # syscall arg li $v0, 5009 # SYS_mmap syscall # syscall - bne $a3, $zero, .perror # perror? + bne $a3, $zero, perror # perror? nop # delay slot ld $t1, 48($s0) # clear dadd $t0, $a0, $a1 # t0 = end of mapping dsub $t1, $t0, $t1 # t1 = t0 - clear -.align: - beq $t0, $t1, .continue # already finished +align: + beq $t0, $t1, continue # already finished nop # delay slot andi $t2, $t1, 7 # t1 & 7? - bnez $t2, .filld # start filling longs + bnez $t2, filld # start filling longs nop # delay slot -.filld: +filld: dsub $t2, $t0, $t1 # t2 = t0 - t1 sltiu $t2, $t2, 64 # t2 < 64? - bne $t2, $zero, .fillb # fill bytes + bne $t2, $zero, fillb # fill bytes nop # delay slot sd $zero, ($t1) # zero doubleword DADDI2( $t1, 8) # next doubleword @@ -96,140 +100,255 @@ dnl syscall # syscall DADDI2( $t1, 8) # next doubleword sd $zero, ($t1) # zero doubleword DADDI2( $t1, 8) # next doubleword - j .filld # fill either doubleword or byte + j filld # fill either doubleword or byte nop # delay slot -.fillb: - beq $t0, $t1, .continue # already finished? +fillb: + beq $t0, $t1, continue # already finished? nop # delay slot sb $zero, ($t1) # clear byte DADDI2( $t1, 1) # t1++ -.continue: +continue: DADDI2( $s0, 56) # s0 = next action - j .next_action # next action + j next_action # next action nop # delay slot -.do_mmap_anon: +do_mmap_anon: ld $t0, 8($s0) # vm address ld $t1, 16($s0) # file_offset ld $t2, 24($s0) # protection ld $t3, 32($s0) # length ld $v0, 40($s0) # flags - li $v1, -1 # fd - j .do_mmap_1 # do mmap + dli $v1, -1 # fd + j do_mmap_1 # do mmap nop # branch delay slot -.open_file: - li $v0, 5002 # SYS_open +open_file: + dli $v0, 5002 # SYS_open DADDI3( $a0, $s0, 8) # start of name move $a1, $zero # flags = O_RDONLY move $a2, $zero # mode = 0 syscall # syscall - bne $a3, $zero, .perror # perror + bne $a3, $zero, perror # perror nop # delay slot DADDI2( $s0, 8) # start of string move $t3, $s0 # t3 = s0 -.nextc: +nextc: lb $t0, ($s0) # load byte DADDI2( $s0, 1) # s0++ - li $t1, 47 # directory separator `/' - bne $t0, $t1, .nextc1 # is separator char? + dli $t1, 47 # directory separator `/' + bne $t0, $t1, nextc1 # is separator char? nop # delay slot move $t3, $s0 # t3 = char past separator -.nextc1: - bnez $t0, .nextc # next character? +nextc1: + bnez $t0, nextc # next character? nop # delay slot DADDI2( $s0, 7) # adjust for round - li $t2, -8 # t2 = -8 + dli $t2, -8 # t2 = -8 and $s0, $s0, $t2 # mask for round andi $t0, $s1, 16 # t1 = s1 & 16 move $t1, $sp # address of primary fd - beqz $t0, .primary # primary fd? + beqz $t0, primary # primary fd? nop # delay slot DADDI2( $t1, 8) # address of secondary fd sd $v0, ($t1) # store fd - j .next_action # next action + j next_action # next action nop # delay slot -.primary: +primary: sd $v0, ($t1) # store fd - li $v0, 5153 # SYS_prctl - li $a0, 15 # PR_SET_NAME + dli $v0, 5153 # SYS_prctl + dli $a0, 15 # PR_SET_NAME move $a1, $t3 # char past separator move $a2, $zero # a2 move $a3, $zero # a3 move $a4, $zero # a4 move $a5, $zero # a5 syscall # syscall - j .next_action # next action + j next_action # next action nop # delay slot -.perror: +perror: move $a0, $v0 # errno - li $v0, 5058 # SYS_exit + dli $v0, 5058 # SYS_exit syscall # syscall -.rest_of_exec: - move $s1, $s2 # original SP +rest_of_exec: + move $s1, $s6 # original SP ld $t0, ($s1) # argc dsll $t0, $t0, 3 # argc *= 8 DADDI2( $t0, 16) # argc += 16 dadd $s1, $s1, $t0 # s1 = start of envp -.skipenv: - ld $t0, ($s1) # t0 = *s1 - DADDI2( $s1, 8) # s1++ - bne $t0, $zero, .skipenv # skip again - nop # delay slot - dla $t3, .auxvtab # address of auxv table -.one_auxv: - ld $t0, ($s1) # t0 = auxv type - li $t1, 10 # t1 = 10 - beqz $t0, .finish # is AT_IGNORE? - nop # delay slot - sltu $t1, $t0, $t1 # t1 = t0 < num offsets - beqz $t1, .next # next auxv - nop # delay slot - dsll $t1, $t0, 2 # t1 = t0 * 4 - dadd $t1, $t3, $t1 # t1 = .auxvtab + t1 - lw $t2, ($t1) # t2 = *t1 - beqz $t2, .next # skip auxv - nop # delay slot - dadd $t2, $s0, $t2 # t2 = s0 + t2 - ld $t2, ($t2) # t2 = *t2 - sd $t2, 8($s1) # set auxv value -.next: - DADDI2( $s1, 16) # next auxv - j .one_auxv # next auxv - nop # delay slot -.finish: - ld $t0, 8($sp) # secondary fd +skip_environ: + /* Locate the auxiliary vector. */ +1: ld $t0, ($s1) # t0 = *s1 + bnez $t0, 1b # skip environment entry + daddi $s1, $s1, 8 # s1++ + move $s2, $s1 # s2 = end of environment +1: ld $t0, ($s1) # t0 = s1->a_type + bnez $t0, 1b # skip auxiliary vector entry + daddi $s1, $s1, 16 # (Elf64_auxv_t *) s1++ + /* Decide how many bytes must be copied and where to + save the file name. Move the stack pointer to a safe + position below any data that must be preserved. */ + ld $t1, 56($s0) # length of string + DADDI2( $t1, 1) + DADDI3( $t2, $s0, 64) # pointer to string + dsub $t3, $s1, $s6 # number of bytes in vectors + dsub $t0, $s1, $t1 # position of string + and $t0, $t0, -16 # align value + dsub $t3, $t0, $t3 # position of argc + and $t3, $t3, -16 # align value + /* Move the stack pointer and save required information. + 8($fp) = secondary/interpreter fd. + 0($fp) = primary/executable fd. + -8($fp) = cmd->entry + -16($fp) = cmd->at_entry + -24($fp) = cmd->at_phent + -32($fp) = cmd->at_phnum + -40($fp) = cmd->at_phdr + -48($fp) = cmd->at_base + $sp = copy of string. */ + move T4, $sp # current sp + dsub T5, $t3, $sp # new argc - current sp + blt T5, 16, 1f # more than two slots apart + dadd $sp, $t3, -16 # $sp = two slots below new argc + j 2f # skip copying fds + move $sp, T4 # retain current sp +1: ld T5, (T4) # old primary fd + ld T5, ($sp) # save the same + ld T5, 8(T4) # old interpreter fd + sd T5, 8($sp) # save the same +2: move $fp, $sp # set base pointer + DADDI2( $sp, -48) # command data + ld T5, 8($s0) # entry + ld T6, 16($s0) # at_entry + ld T7, 24($s0) # at_phent + ld $t8, 32($s0) # at_phnum + sd T5, -8($fp) # save entry + ld T5, 40($s0) # at_phdr + sd T6, -16($fp) # save at_entry + ld T6, 48($s0) # at_base + sd T7, -24($fp) # save at_phent + sd $t8, -32($fp) # save at_phnum + sd T5, -40($fp) # save at_phdr + sd T6, -48($fp) # save at_base + dsub $sp, $sp, $t1 # space for string + /* Save the input string. */ + dadd T5, $t2, $t1 # end of source ($t2) + move T6, $sp # dst + move $s0, $t1 # $s0 = length of string + /* src = $t2, dst = T6 */ + bgeu $t2, T5, 2f # there already? + nop +1: lb $t1, ($t2) # $t1 = *$t2 + DADDI2( $t2, 1) # $t2++ + DADDI2( T6, 1) # $t6++ + bltu $t2, T5, 1b + sb $t1, -1(T6) # *(T6 - 1) = $t1 +2: move $s3, $sp # copy of string + and $sp, $sp, -16 # align stack +copy_env_and_args: + /* Copy argc, argv, and the environment array. + T4 = destination, T5 = src, $s2 = src_end */ + move T4, $t3 # destination of argc + move T5, $s6 # original SP + bgeu T5, $s2, 2f # there already? + nop +1: ld $t1, (T5) # $t1 = *src + DADDI2( T5, 8) # src++ + DADDI2( T4, 8) # dst++ + bltu T5, $s2, 1b # src < src_end + sd $t1, -8(T4) # *(dst - 8) = $t1 +copy_auxv: + /* T4 = destination, T5 = first auxval. */ +2: ld $t1, (T5) # a_type + ld $t2, 8(T5) # a_un.a_val + DADDI2( T4, 16) # (Elf64_auxv_t *) dst++ + DADDI2( T5, 16) # (Elf64_auxv_t *) src + beqz $t1, 8f # AT_NULL + li T6, 3 + beq $t1, T6, 1f # AT_PHDR + li T6, 4 + beq $t1, T6, 2f # AT_PHENT + li T6, 5 + beq $t1, T6, 3f # AT_PHNUM + li T6, 9 + beq $t1, T6, 4f # AT_ENTRY + li T6, 7 + beq $t1, T6, 5f # AT_BASE + li T6, 31 + beq $t1, T6, 6f # AT_EXECFN + nop + b 7f + nop +1: b 7f + ld $t2, -40($fp) +2: b 7f + ld $t2, -24($fp) +3: b 7f + ld $t2, -32($fp) +4: b 7f + ld $t2, -16($fp) +5: b 7f + ld $t2, -48($fp) +6: b 7f + move $t2, $t0 +7: sd $t1, -16(T4) # dst->a_type + j copy_auxv + sd $t2, -8(T4) # dst->a_un.a_val + /* Copy the final element. */ +8: sd $t1, -16(T4) # dst->a_type + sd $t2, -8(T4) # dst->a_un.a_val +finish: + /* Copy the string to its position in auxv + (src = $s3, dst = $t0). */ + dadd $t1, $s3, $s0 # src end + bgeu $s3, $t1, 2f # there already? + nop +1: lb $t2, ($s3) # c = *src + DADDI2( $s3, 1) # src++ + DADDI2( $t0, 1) # dst++ + bltu $s3, $t1, 1b + sb $t2, -1($t0) # *(dst - 1) = c + /* Save variables. */ +2: move $s6, $t3 # new stack pointer + ld $t0, 8($fp) # secondary fd li $t1, -1 # t1 = -1 - ld $s1, ($sp) # s1 = primary fd + ld $s1, ($fp) # s1 = primary fd + beq $t0, $t2, finish1 # secondary fd set? li $v0, 5003 # SYS_close - beq $t0, $t2, .finish1 # secondary fd set? - nop # delay slot move $a0, $t0 # secondary fd syscall # syscall li $v0, 5003 # SYS_close -.finish1: +finish1: move $a0, $s1 # primary fd syscall # syscall -.jump: +jump: move $v0, $zero # rtld_fini - ld $t0, 8($s0) # entry - move $sp, $s2 # restore stack pointer, delay slot - jr $t0 # enter - nop # delay slot + ld $t9, -8($fp) # entry + move $sp, $s6 # restore stack pointer, delay slot + /* Clear at least one page's worth of stack. glibc on mipsel + copies certain fields from the stack to the `link_map' + structure representing ld.so, which are not subsequently + replaced if otherwise than zero. -.auxvtab: - .long 0 # 0 - .long 0 # 1 - .long 0 # 2 - .long 40 # 3 AT_PHDR - .long 24 # 4 AT_PHENT - .long 32 # 5 AT_PHNUM - .long 0 # 6 - .long 48 # 7 AT_BASE - .long 0 # 8 - .long 16 # 9 AT_ENTRY + XXX: report this glibc bug? */ + DADDI3( $v0, $sp, -4096) + and $v0, $v0, -4095 +1: sd $zero, ($v0) # copy 32 byte blocks + sd $zero, 8($v0) + sd $zero, 16($v0) + sd $zero, 24($v0) + DADDI2( $v0, 32) + dsub $t0, $sp, $v0 # remainder + bge $t0, 32, 1b # test remainder + nop # copy 4 byte blocks + beqz $t0, 2f + nop +1: DADDI2( $v0, 4) + bltu $v0, $sp, 1b + sw $zero, -4($v0) +2: jr $t9 # enter + nop # delay slot -.timespec: - .quad 10 - .quad 10 +## timespec: +## .quad 10 +## .quad 10 # Local Variables: # asm-comment-char: ?# diff --git a/exec/trace.c b/exec/trace.c index b0ec602d821..2421785a80a 100644 --- a/exec/trace.c +++ b/exec/trace.c @@ -1246,7 +1246,11 @@ process_system_call (struct exec_tracee *tracee) set, this must be exec, whatever the value of SYSCALL_NUM_REG, which is erased when exec loads another image. */ - callno = (!tracee->exec_data ? regs.SYSCALL_NUM_REG : EXEC_SYSCALL); + callno = (!tracee->exec_data + ? (!tracee->waiting_for_syscall + ? regs.SYSCALL_NUM_REG : tracee->callno) + : EXEC_SYSCALL); + tracee->callno = callno; switch (callno) { case EXEC_SYSCALL: @@ -1653,6 +1657,11 @@ seccomp_system_call (struct exec_tracee *tracee) /* Now dispatch based on the system call. */ callno = regs.SYSCALL_NUM_REG; + + /* Record the call number, which may be required if one of the + following handlers should arrange for process_system_call to + intercede after the system call completes. */ + tracee->callno = callno; switch (callno) { case EXEC_SYSCALL: @@ -1715,7 +1724,7 @@ seccomp_system_call (struct exec_tracee *tracee) if (rc < 0) return; - tracee->waiting_for_syscall = !tracee->waiting_for_syscall; + tracee->waiting_for_syscall = true; break; default: @@ -2033,6 +2042,7 @@ after_fork (pid_t pid) return 1; tracee->pid = pid; + tracee->callno = 0; tracee->next = tracing_processes; tracee->waiting_for_syscall = false; tracee->new_child = false; commit c3fe19aab90c3da68e9a8a48dbfb011317041d1a Author: Eli Zaretskii Date: Tue Apr 15 09:45:16 2025 +0300 ; Fix tab-bar-tests on MS-Windows * test/lisp/tab-bar-tests.el (tab-bar-tests-quit-restore-window): Skip test on MS-Windows in batch mode, since terminal frames cannot be created in that case. diff --git a/test/lisp/tab-bar-tests.el b/test/lisp/tab-bar-tests.el index a26d15ce977..450713ce228 100644 --- a/test/lisp/tab-bar-tests.el +++ b/test/lisp/tab-bar-tests.el @@ -52,6 +52,7 @@ (tab-bar-tabs-set nil)) (ert-deftest tab-bar-tests-quit-restore-window () + (skip-when (and noninteractive (eq system-type 'windows-nt))) (let* ((frame-params (when noninteractive '((window-system . nil) (tty-type . "linux")))) commit e790873be10720c108b9d6833ce0232167f03bf2 Author: Po Lu Date: Tue Apr 15 11:14:14 2025 +0800 Address typos in MIPS executable loader * exec/loader-mipsel.s (rest_of_exec): Delete redundant nop. (skip_environ): Correct stack space test. Don't jump into the label for the sp preserving case's delay slot. diff --git a/exec/loader-mipsel.s b/exec/loader-mipsel.s index bf90493e726..92239614de3 100644 --- a/exec/loader-mipsel.s +++ b/exec/loader-mipsel.s @@ -15,7 +15,7 @@ # You should have received a copy of the GNU General Public License # along with GNU Emacs. If not, see . - include(`config-mips.m4') +include(`config-mips.m4') ## Beware: $t0-$t4 alias the syscall (and function, but they are not ## material in this context) argument registers on N32 systems, and @@ -28,7 +28,7 @@ __start: ## li $v0, SYSCALL_nanosleep # SYS_nanosleep ## la $a0, timespec # rqtp ## li $a1, 0 # rmtp - ## syscall # syscall + ## syscall # syscall lw $s6, ($sp) # original stack pointer addi $s0, $sp, 8 # start of load area addi $sp, -8 # primary fd, secondary fd @@ -158,7 +158,6 @@ perror: rest_of_exec: move $s1, $s6 # s1 = original SP lw $t0, ($s1) # argc - nop # delay slot sll $t0, $t0, 2 # argc *= 4 addi $t0, $t0, 8 # argc += 8 add $s1, $s1, $t0 # s1 = start of envp @@ -195,11 +194,11 @@ skip_environ: $sp = copy of string. */ move $t4, $sp # current sp sub $t5, $t3, $sp # new argc - current sp - bleu $t5, -8, 1f # more than two slots apart + blt $t5, 8, 1f # more than two slots apart addi $sp, $t3, -8 # $sp = two slots below new argc j 2f # skip copying fds -1: move $sp, $t4 # retain current sp - lw $t5, ($t4) # old primary fd + move $sp, $t4 # retain current sp +1: lw $t5, ($t4) # old primary fd sw $t5, ($sp) # save the same lw $t5, 4($t4) # old interpreter fd sw $t5, 4($sp) # save the same commit b4551334508076b10a895e400beba5b3e9a5e14c Author: Po Lu Date: Tue Apr 15 09:53:27 2025 +0800 Avoid performance regressions in unoptimized builds * src/alloc.c (lisp_malloc): Declare val register. diff --git a/src/alloc.c b/src/alloc.c index 167be74d2f7..07ca8474bf3 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -872,11 +872,13 @@ void *lisp_malloc_loser EXTERNALLY_VISIBLE; static void * lisp_malloc (size_t nbytes, bool clearit, enum mem_type type) { + register void *val; + #ifdef GC_MALLOC_CHECK allocated_mem_type = type; #endif - void *val = clearit ? calloc (1, nbytes) : malloc (nbytes); + val = clearit ? calloc (1, nbytes) : malloc (nbytes); #if ! USE_LSB_TAG /* If the memory just allocated cannot be addressed thru a Lisp commit a7f5d183a8c13dfb7fb43777abdf96233df0ca0c Author: Stefan Kangas Date: Mon Apr 14 20:40:49 2025 +0200 Remove unused XMALLOC_BLOCK_INPUT_CHECK debug facility The compile-time option XMALLOC_BLOCK_INPUT_CHECK was added in 2012 (commit 4d7e6e51dd4acecff) to allow blocking input during malloc-family calls, in case any issues arose from related changes in Emacs 24.3. However, it has not been referenced on emacs-devel or the bug tracker in over a decade. It is clear that we do not need it, as our signal handlers do not allocate memory. Removing it simplifies the allocation function wrappers and eliminates dead debug code. Ref: https://debbugs.gnu.org/12450 * src/alloc.c [XMALLOC_BLOCK_INPUT_CHECK] (malloc_block_input, malloc_unblock_input): Delete functions. (MALLOC_BLOCK_INPUT, MALLOC_UNBLOCK_INPUT): Delete macros. Update all callers. diff --git a/src/alloc.c b/src/alloc.c index c0d68e6c964..167be74d2f7 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -635,39 +635,6 @@ static_assert (LISP_ALIGNMENT % GCALIGNMENT == 0); enum { MALLOC_IS_LISP_ALIGNED = alignof (max_align_t) % LISP_ALIGNMENT == 0 }; static_assert (MALLOC_IS_LISP_ALIGNED); -/* If compiled with XMALLOC_BLOCK_INPUT_CHECK, define a symbol - BLOCK_INPUT_IN_MEMORY_ALLOCATORS that is visible to the debugger. - If that variable is set, block input while in one of Emacs's memory - allocation functions. There should be no need for this debugging - option, since signal handlers do not allocate memory, but Emacs - formerly allocated memory in signal handlers and this compile-time - option remains as a way to help debug the issue should it rear its - ugly head again. */ -#ifdef XMALLOC_BLOCK_INPUT_CHECK -bool block_input_in_memory_allocators EXTERNALLY_VISIBLE; -static void -malloc_block_input (void) -{ - if (block_input_in_memory_allocators) - block_input (); -} -static void -malloc_unblock_input (void) -{ - if (block_input_in_memory_allocators) - { - int err = errno; - unblock_input (); - errno = err; - } -} -# define MALLOC_BLOCK_INPUT malloc_block_input () -# define MALLOC_UNBLOCK_INPUT malloc_unblock_input () -#else -# define MALLOC_BLOCK_INPUT ((void) 0) -# define MALLOC_UNBLOCK_INPUT ((void) 0) -#endif - #define MALLOC_PROBE(size) \ do { \ if (profiler_memory_running) \ @@ -679,12 +646,7 @@ malloc_unblock_input (void) void * xmalloc (size_t size) { - void *val; - - MALLOC_BLOCK_INPUT; - val = malloc (size); - MALLOC_UNBLOCK_INPUT; - + void *val = malloc (size); if (!val) memory_full (size); MALLOC_PROBE (size); @@ -696,12 +658,7 @@ xmalloc (size_t size) void * xzalloc (size_t size) { - void *val; - - MALLOC_BLOCK_INPUT; - val = calloc (1, size); - MALLOC_UNBLOCK_INPUT; - + void *val = calloc (1, size); if (!val) memory_full (size); MALLOC_PROBE (size); @@ -713,12 +670,7 @@ xzalloc (size_t size) void * xrealloc (void *block, size_t size) { - void *val; - - MALLOC_BLOCK_INPUT; - val = realloc (block, size); - MALLOC_UNBLOCK_INPUT; - + void *val = realloc (block, size); if (!val) memory_full (size); MALLOC_PROBE (size); @@ -735,9 +687,7 @@ xfree (void *block) return; if (pdumper_object_p (block)) return; - MALLOC_BLOCK_INPUT; free (block); - MALLOC_UNBLOCK_INPUT; /* We don't call refill_memory_reserve here because in practice the call in r_alloc_free seems to suffice. */ } @@ -922,15 +872,11 @@ void *lisp_malloc_loser EXTERNALLY_VISIBLE; static void * lisp_malloc (size_t nbytes, bool clearit, enum mem_type type) { - register void *val; - - MALLOC_BLOCK_INPUT; - #ifdef GC_MALLOC_CHECK allocated_mem_type = type; #endif - val = clearit ? calloc (1, nbytes) : malloc (nbytes); + void *val = clearit ? calloc (1, nbytes) : malloc (nbytes); #if ! USE_LSB_TAG /* If the memory just allocated cannot be addressed thru a Lisp @@ -954,7 +900,6 @@ lisp_malloc (size_t nbytes, bool clearit, enum mem_type type) mem_insert (val, (char *) val + nbytes, type); #endif - MALLOC_UNBLOCK_INPUT; if (!val) memory_full (nbytes); MALLOC_PROBE (nbytes); @@ -970,7 +915,6 @@ lisp_free (void *block) if (pdumper_object_p (block)) return; - MALLOC_BLOCK_INPUT; #ifndef GC_MALLOC_CHECK struct mem_node *m = mem_find (block); #endif @@ -978,7 +922,6 @@ lisp_free (void *block) #ifndef GC_MALLOC_CHECK mem_delete (m); #endif - MALLOC_UNBLOCK_INPUT; } /***** Allocation of aligned blocks of memory to store Lisp data. *****/ @@ -1116,8 +1059,6 @@ lisp_align_malloc (size_t nbytes, enum mem_type type) eassert (nbytes <= BLOCK_BYTES); - MALLOC_BLOCK_INPUT; - #ifdef GC_MALLOC_CHECK allocated_mem_type = type; #endif @@ -1141,10 +1082,7 @@ lisp_align_malloc (size_t nbytes, enum mem_type type) #endif if (base == 0) - { - MALLOC_UNBLOCK_INPUT; - memory_full (ABLOCKS_BYTES); - } + memory_full (ABLOCKS_BYTES); aligned = (base == abase); if (!aligned) @@ -1168,7 +1106,6 @@ lisp_align_malloc (size_t nbytes, enum mem_type type) { lisp_malloc_loser = base; free (base); - MALLOC_UNBLOCK_INPUT; memory_full (SIZE_MAX); } } @@ -1205,8 +1142,6 @@ lisp_align_malloc (size_t nbytes, enum mem_type type) mem_insert (val, (char *) val + nbytes, type); #endif - MALLOC_UNBLOCK_INPUT; - MALLOC_PROBE (nbytes); eassert (0 == ((uintptr_t) val) % BLOCK_ALIGN); @@ -1219,7 +1154,6 @@ lisp_align_free (void *block) struct ablock *ablock = block; struct ablocks *abase = ABLOCK_ABASE (ablock); - MALLOC_BLOCK_INPUT; #ifndef GC_MALLOC_CHECK mem_delete (mem_find (block)); #endif @@ -1259,7 +1193,6 @@ lisp_align_free (void *block) #endif free (ABLOCKS_BASE (abase)); } - MALLOC_UNBLOCK_INPUT; } @@ -1322,8 +1255,6 @@ make_interval (void) { INTERVAL val; - MALLOC_BLOCK_INPUT; - if (interval_free_list) { val = interval_free_list; @@ -1346,8 +1277,6 @@ make_interval (void) ASAN_UNPOISON_INTERVAL (val); } - MALLOC_UNBLOCK_INPUT; - tally_consing (sizeof (struct interval)); intervals_consed++; RESET_INTERVAL (val); @@ -1735,8 +1664,6 @@ allocate_string (void) { struct Lisp_String *s; - MALLOC_BLOCK_INPUT; - /* If the free-list is empty, allocate a new string_block, and add all the Lisp_Strings in it to the free-list. */ if (string_free_list == NULL) @@ -1765,8 +1692,6 @@ allocate_string (void) ASAN_UNPOISON_STRING (s); string_free_list = NEXT_FREE_LISP_STRING (s); - MALLOC_UNBLOCK_INPUT; - ++strings_consed; tally_consing (sizeof *s); @@ -1810,8 +1735,6 @@ allocate_string_data (struct Lisp_String *s, of string data. */ ptrdiff_t needed = sdata_size (nbytes); - MALLOC_BLOCK_INPUT; - if (nbytes > LARGE_STRING_BYTES || immovable) { size_t size = FLEXSIZEOF (struct sblock, data, needed); @@ -1875,8 +1798,6 @@ allocate_string_data (struct Lisp_String *s, b->next_free = (sdata *) ((char *) data + needed + GC_STRING_EXTRA); eassert ((uintptr_t) b->next_free % alignof (sdata) == 0); - MALLOC_UNBLOCK_INPUT; - s->u.s.data = SDATA_DATA (data); #ifdef GC_CHECK_STRING_BYTES SDATA_NBYTES (data) = nbytes; @@ -2606,8 +2527,6 @@ make_float (double float_value) { register Lisp_Object val; - MALLOC_BLOCK_INPUT; - if (float_free_list) { XSETFLOAT (val, float_free_list); @@ -2631,8 +2550,6 @@ make_float (double float_value) float_block_index++; } - MALLOC_UNBLOCK_INPUT; - XFLOAT_INIT (val, float_value); eassert (!XFLOAT_MARKED_P (XFLOAT (val))); tally_consing (sizeof (struct Lisp_Float)); @@ -2730,8 +2647,6 @@ DEFUN ("cons", Fcons, Scons, 2, 2, 0, { register Lisp_Object val; - MALLOC_BLOCK_INPUT; - if (cons_free_list) { ASAN_UNPOISON_CONS (cons_free_list); @@ -2755,8 +2670,6 @@ DEFUN ("cons", Fcons, Scons, 2, 2, 0, cons_block_index++; } - MALLOC_UNBLOCK_INPUT; - XSETCAR (val, car); XSETCDR (val, cdr); eassert (!XCONS_MARKED_P (XCONS (val))); @@ -3488,8 +3401,6 @@ allocate_vectorlike (ptrdiff_t len, bool clearit) ptrdiff_t nbytes = header_size + len * word_size; struct Lisp_Vector *p; - MALLOC_BLOCK_INPUT; - #ifdef DOUG_LEA_MALLOC if (!mmap_lisp_allowed_p ()) mallopt (M_MMAP_MAX, 0); @@ -3518,8 +3429,6 @@ allocate_vectorlike (ptrdiff_t len, bool clearit) tally_consing (nbytes); vector_cells_consed += len; - MALLOC_UNBLOCK_INPUT; - return p; } @@ -3817,8 +3726,6 @@ Its value is void, and its function definition and property list are nil. */) CHECK_STRING (name); - MALLOC_BLOCK_INPUT; - if (symbol_free_list) { ASAN_UNPOISON_SYMBOL (symbol_free_list); @@ -3842,8 +3749,6 @@ Its value is void, and its function definition and property list are nil. */) symbol_block_index++; } - MALLOC_UNBLOCK_INPUT; - init_symbol (val, name); tally_consing (sizeof (struct Lisp_Symbol)); symbols_consed++; @@ -4250,16 +4155,12 @@ memory_full (size_t nbytes) bool enough_free_memory = false; if (SPARE_MEMORY < nbytes) { - void *p; - - MALLOC_BLOCK_INPUT; - p = malloc (SPARE_MEMORY); + void *p = malloc (SPARE_MEMORY); if (p) { free (p); enough_free_memory = true; } - MALLOC_UNBLOCK_INPUT; } if (! enough_free_memory) commit 74df372398dbc90f6c0185f1701af28129073de7 Author: Po Lu Date: Mon Apr 14 21:28:15 2025 +0800 Port recent changes to mipsel systems * exec/exec.c (exec_0): Don't disable AT_EXECFN substitution on MIPS systems. * exec/loader-aarch64.s (skip_environ): Correct typo in commentary. * exec/loader-mips64el.s: Add a disclaimer that this file is currently inoperable. * exec/loader-mipsel.s (__start): Move environment and argument vectors and produce and replace AT_EXECFN. Clear stack before proceeding to circumvent an oversight in glibc. diff --git a/exec/config-mips.m4.in b/exec/config-mips.m4.in index c42bbbad2ec..1c9a4c293a6 100644 --- a/exec/config-mips.m4.in +++ b/exec/config-mips.m4.in @@ -18,6 +18,7 @@ dnl You should have received a copy of the GNU General Public License dnl along with GNU Emacs. If not, see . define(`SYSCALL_open', `ifelse(`@MIPS_N32@',`yes',`6002',`4005')') +dnl define(`SYSCALL_openat', `ifelse(`@MIPS_N32@',`yes',`6251',`4288')') define(`SYSCALL_close', `ifelse(`@MIPS_N32@',`yes',`6003',`4006')') define(`SYSCALL_mmap', `ifelse(`@MIPS_N32@',`yes',`6009',`4090')') define(`SYSCALL_nanosleep', `ifelse(`@MIPS_N32@',`yes',`6034',`4166')') @@ -34,6 +35,7 @@ define(`SYSCALL', `ifelse(`@MIPS_N32@',`yes',` move $a4, $1 sw $4, 28($sp)')') define(`RESTORE', `ifelse(`@MIPS_N32@',`yes',` nop',` addi $sp, 32')') +define(`FP', `ifelse(`@MIPS_N32@',`yes',`$s8',`$fp')') dnl For mips64. Some assemblers don't want to assemble `daddi'. define(`DADDI2', `ifelse(`@DADDI_BROKEN@',`yes',` li $at, $2 diff --git a/exec/exec.c b/exec/exec.c index 7a8ef2c3a1a..b9c3e4ec92a 100644 --- a/exec/exec.c +++ b/exec/exec.c @@ -231,10 +231,10 @@ struct exec_jump_command /* The value of AT_BASE inside the aux vector. */ USER_WORD at_base; -#if defined __mips__ && !defined MIPS_NABI - /* The FPU mode to apply. */ +#if defined __mips__ + /* The FPU mode to apply. Not used when !MIPS_NABI. */ USER_WORD fpu_mode; -#endif /* defined __mips__ && !defined MIPS_NABI */ +#endif /* defined __mips__ */ }; @@ -916,9 +916,7 @@ exec_0 (char *name, struct exec_tracee *tracee, program_header program; USER_WORD entry, program_entry, offset; USER_WORD header_offset; -#ifndef __mips__ USER_WORD name_len, aligned_len; -#endif /* !__mips__ */ struct exec_jump_command jump; #if defined __mips__ && !defined MIPS_NABI int fpu_mode; @@ -1132,6 +1130,8 @@ exec_0 (char *name, struct exec_tracee *tracee, fpu_mode = FP_FRE; jump.fpu_mode = fpu_mode; +#elif defined __mips__ + jump.fpu_mode = 0; #endif /* defined __mips__ && !defined MIPS_NABI */ /* The offset used for at_phdr should be that of the first @@ -1149,8 +1149,6 @@ exec_0 (char *name, struct exec_tracee *tracee, sizeof jump); loader_area_used += sizeof jump; - /* TODO: MIPS support. */ -#ifndef __mips__ /* Copy the length of NAME and NAME itself to the loader area. */ name_len = strlen (name); aligned_len = ((name_len + 1 + sizeof name_len - 1) @@ -1167,7 +1165,6 @@ exec_0 (char *name, struct exec_tracee *tracee, offset = aligned_len - (name_len + 1); while (offset--) loader_area[loader_area_used++] = '\0'; -#endif /* !__mips__ */ /* Close the file descriptor and return the number of bytes used. */ diff --git a/exec/loader-aarch64.s b/exec/loader-aarch64.s index 376f439417f..d3c565bf3f8 100644 --- a/exec/loader-aarch64.s +++ b/exec/loader-aarch64.s @@ -144,7 +144,7 @@ skip_environ: and x7, x7, -8 // align value add x4, x7, x4 // destination argc and x4, x4, -16 // align destination argc - // Load values that must be into registers x14-x19. + // Load values that must be preserved into registers x14-x19. // x14 = cmd->entry // x15 = cmd->at_entry // x16 = cmd->at_phent diff --git a/exec/loader-mips64el.s b/exec/loader-mips64el.s index 491b7ccfb60..1493af3c309 100644 --- a/exec/loader-mips64el.s +++ b/exec/loader-mips64el.s @@ -15,6 +15,8 @@ # You should have received a copy of the GNU General Public License # along with GNU Emacs. If not, see . + /* NOTE: this file is presently non-functional. */ + include(`config-mips.m4') .set noreorder # delay slots managed by hand diff --git a/exec/loader-mipsel.s b/exec/loader-mipsel.s index 9ffe7e928e7..bf90493e726 100644 --- a/exec/loader-mipsel.s +++ b/exec/loader-mipsel.s @@ -15,34 +15,34 @@ # You should have received a copy of the GNU General Public License # along with GNU Emacs. If not, see . -include(`config-mips.m4') + include(`config-mips.m4') -# Make sure not to use t4 through t7, in order to maintain portability -# with N32 ABI systems. +## Beware: $t0-$t4 alias the syscall (and function, but they are not +## material in this context) argument registers on N32 systems, and +## mustn't be relied upon to hold arguments to `SYSCALL'. .set noreorder # delay slots managed by hand .section .text .global __start __start: -dnl li $v0, SYSCALL_nanosleep # SYS_nanosleep -dnl la $a0, .timespec # rqtp -dnl li $a1, 0 # rmtp -dnl syscall # syscall + ## li $v0, SYSCALL_nanosleep # SYS_nanosleep + ## la $a0, timespec # rqtp + ## li $a1, 0 # rmtp + ## syscall # syscall lw $s6, ($sp) # original stack pointer addi $s0, $sp, 8 # start of load area addi $sp, -8 # primary fd, secondary fd li $t0, -1 # secondary fd sw $t0, 4($sp) # initialize secondary fd -.next_action: +next_action: lw $s2, ($s0) # action number - nop # delay slot andi $t0, $s2, 15 # t0 = s2 & 15 - beqz $t0, .open_file # open file? + beqz $t0, open_file # open file? li $t1, 3 # t1 = 3, delay slot - beq $t0, $t1, .rest_of_exec # jump to code + beq $t0, $t1, rest_of_exec # jump to code li $t1, 4 # t1 = 4, delay slot - beq $t0, $t1, .do_mmap_anon # anonymous mmap -.do_mmap: + beq $t0, $t1, do_mmap_anon # anonymous mmap +do_mmap: lw $a0, 4($s0) # vm_address, delay slot lw $v1, 8($s0) # file_offset lw $a2, 12($s0) # protection @@ -50,33 +50,33 @@ dnl syscall # syscall lw $a3, 20($s0) # flags lw $v0, ($sp) # primary fd andi $t1, $s2, 16 # t1 = s2 & 16 - beqz $t1, .do_mmap_1 # secondary fd? + beqz $t1, do_mmap_1 # secondary fd? nop # delay slot lw $v0, 4($sp) # secondary fd nop # delay slot -.do_mmap_1: +do_mmap_1: SYSCALL(`$v0',`$v1',`$zero',`$zero') # syscall args li $v0, SYSCALL_mmap # SYS_mmap syscall # syscall - bne $a3, $zero, .perror # perror + bnez $a3, perror # perror RESTORE() # delay slot, restore sp lw $s5, 24($s0) # clear add $t0, $a0, $a1 # t0 = length + vm_address, delay slot sub $t1, $t0, $s5 # t1 = t0 - clear -.align: - beq $t0, $t1, .continue # already finished? +align: + beq $t0, $t1, continue # already finished? nop # delay slot andi $t2, $t1, 3 # t1 & 3? - bnez $t2, .fillw # start filling longs + bnez $t2, fillw # start filling longs nop # delay slot sb $zero, ($t1) # clear byte addi $t1, $t1, 1 # t1++ - j .align # continue + j align # continue nop # delay slot -.fillw: +fillw: sub $t2, $t0, $t1 # t2 = t0 - t1 sltiu $t2, $t2, 32 # r2 < 32? - bne $t2, $zero, .fillb # fill bytes + bne $t2, $zero, fillb # fill bytes nop # delay slot sw $zero, ($t1) # zero word addi $t1, $t1, 4 # next word @@ -94,53 +94,52 @@ RESTORE() # delay slot, restore sp addi $t1, $t1, 4 # next word sw $zero, ($t1) # zero word addi $t1, $t1, 4 # next word - j .fillw # fill either word or byte + j fillw # fill either word or byte nop # delay slot -.fillb: - beq $t0, $t1, .continue # already finished? +fillb: + beq $t0, $t1, continue # already finished? nop # delay slot sb $zero, ($t1) # clear byte addi $t1, $t1, 1 # t1++ -.continue: +continue: addi $s0, $s0, 28 # s0 = next action - j .next_action # next action + j next_action # next action nop # delay slot -.do_mmap_anon: +do_mmap_anon: lw $v1, 8($s0) # file_offset lw $a2, 12($s0) # protection lw $a1, 16($s0) # length lw $a3, 20($s0) # flags - li $t4, -1 # fd - j .do_mmap_1 # do mmap - nop # delay slot -.open_file: + j do_mmap_1 # do mmap + li $v0, -1 # fd, delay slot +open_file: li $v0, SYSCALL_open # SYS_open addi $a0, $s0, 4 # start of name move $a1, $zero # flags = O_RDONLY move $a2, $zero # mode = 0 syscall # syscall - bne $a3, $zero, .perror # perror + bne $a3, $zero, perror # perror addi $s0, $s0, 4 # start of string, delay slot move $t3, $s0 # t3 = char past separator -.nextc: +nextc: lb $t0, ($s0) # load byte addi $s0, $s0, 1 # s0++ li $t1, 47 # directory separator `/' - bne $t0, $t1, .nextc1 # is separator char? + bne $t0, $t1, nextc1 # is separator char? nop # delay slot move $t3, $s0 # t3 = char past separator -.nextc1: - bnez $t0, .nextc # next character? +nextc1: + bnez $t0, nextc # next character? nop # delay slot addi $s0, $s0, 3 # adjust for round li $t2, -4 # t2 = -4 and $s0, $s0, $t2 # mask for round andi $t0, $s2, 16 # t1 = s2 & 16 - beqz $t0, .primary # primary fd? + beqz $t0, primary # primary fd? move $t0, $sp # address of primary fd, delay slot addi $t0, $t0, 4 # address of secondary fd - j .next_action # next action -.primary: + j next_action # next action +primary: sw $v0, ($t0) # store fd, delay slot li $v0, SYSCALL_prctl # SYS_prctl li $a0, 15 # PR_SET_NAME @@ -150,86 +149,209 @@ RESTORE() # delay slot, restore sp SYSCALL(`$a2',`$a2',`$a2',`$a2') # syscall args syscall # syscall RESTORE() # restore sp - j .next_action # next action + j next_action # next action nop # delay slot -.perror: +perror: move $a0, $v0 # errno li $v0, SYSCALL_exit # SYS_exit syscall # syscall -.rest_of_exec: +rest_of_exec: move $s1, $s6 # s1 = original SP lw $t0, ($s1) # argc nop # delay slot sll $t0, $t0, 2 # argc *= 4 addi $t0, $t0, 8 # argc += 8 add $s1, $s1, $t0 # s1 = start of envp -.skipenv: - lw $t0, ($s1) # t0 = *s1 +skip_environ: + /* Locate the auxiliary vector. */ +1: lw $t0, ($s1) # t0 = *s1 + bnez $t0, 1b # skip environment entry addi $s1, $s1, 4 # s1++ - bne $t0, $zero, .skipenv # skip again - nop # delay slot - la $s2, .auxvtab # address of auxv table -.one_auxv: - lw $t0, ($s1) # t0 = auxv type - li $t1, 10 # t1 = 10, delay slot - beqz $t0, .finish # is AT_IGNORE? - sltu $t1, $t0, $t1 # t1 = t0 < num offsets, delay slot - beq $t1, $zero, .next # next auxv - sll $t1, $t0, 2 # t1 = t0 * 4, delay slot - add $t1, $s2, $t1 # t1 = .auxvtab + t1 - lw $t2, ($t1) # t2 = *t1 - nop # delay slot - beqz $t2, .next # skip auxv - add $t2, $s0, $t2 # t2 = s0 + t2 - lw $t2, ($t2) # t2 = *t2 - nop # delay slot - sw $t2, 4($s1) # set auxv value -.next: - addi $s1, $s1, 8 # next auxv - j .one_auxv # next auxv - nop # delay slot -.finish: - lw $t0, 4($sp) # secondary fd - lw $s1, ($sp) # primary fd, delay slot, preserved + move $s2, $s1 # $s2 = end of environment +1: lw $t0, ($s1) # t0 = *s1 + bnez $t0, 1b # skip auxiliary vector entry + addi $s1, $s1, 8 # (Elf32_auxv_t *) s1++ + /* Decide how many bytes must be copied and where to + save the file name. Move the stack pointer to a safe + position below any data that must be preserved. */ + lw $t1, 32($s0) # length of string + addi $t1, $t1, 1 + addi $t2, $s0, 36 # pointer to string + sub $t3, $s1, $s6 # number of bytes in vectors + sub $t0, $s1, $t1 # position of string + and $t0, $t0, -16 # align value + sub $t3, $t0, $t3 # position of argc + and $t3, $t3, -16 # align value + /* Move the stack pointer and save required information. + 4(FP) = secondary/interpreter fd. + 0(FP) = primary/executable fd. + -4(FP) = cmd->entry + -8(FP) = cmd->at_entry + -12(FP) = cmd->at_phent + -16(FP) = cmd->at_phnum + -20(FP) = cmd->at_phdr + -24(FP) = cmd->at_base + -28(FP) = cmd->fpu_mode (only significant when N32) + $sp = copy of string. */ + move $t4, $sp # current sp + sub $t5, $t3, $sp # new argc - current sp + bleu $t5, -8, 1f # more than two slots apart + addi $sp, $t3, -8 # $sp = two slots below new argc + j 2f # skip copying fds +1: move $sp, $t4 # retain current sp + lw $t5, ($t4) # old primary fd + sw $t5, ($sp) # save the same + lw $t5, 4($t4) # old interpreter fd + sw $t5, 4($sp) # save the same +2: move FP, $sp # set base pointer + addi $sp, $sp, -28 # command data + lw $t5, 4($s0) # entry + lw $t6, 8($s0) # at_entry + sw $t5, -4(FP) # save entry + sw $t6, -8(FP) # save at_entry + lw $t5, 12($s0) # at_phent + lw $t6, 16($s0) # at_phnum + sw $t5, -12(FP) # save at_phent + sw $t6, -16(FP) # save at_phnum + lw $t5, 20($s0) # at_phdr + lw $t6, 24($s0) # at_base + sw $t5, -20(FP) # save at_phdr + sw $t6, -24(FP) # save at_base + lw $t5, 28($s0) # fpu_mode + sw $t5, -28(FP) # save fpu_mode + sub $sp, $sp, $t1 # space for string + /* Save the input string. */ + add $t5, $t2, $t1 # end of source ($t2) + move $t6, $sp # dst + move $s0, $t1 # $s0 = length of string + /* src = $t2, dst = $t6 */ + bgeu $t2, $t5, 2f # there already? + nop +1: lb $t1, ($t2) # $t1 = *$t2 + addi $t2, $t2, 1 # $t2++ + addi $t6, $t6, 1 # $t6++ + bltu $t2, $t5, 1b + sb $t1, -1($t6) # *($t6 - 1) = $t1 +2: move $s3, $sp # copy of string + and $sp, $sp, -16 # align stack +copy_env_and_args: + /* Copy argc, argv, and the environment array. + $t4 = destination, $t5 = src, $s2 = src_end */ + move $t4, $t3 # destination of argc + move $t5, $s6 # original SP + bgeu $t5, $s2, 2f # there already? + nop +1: lw $t1, ($t5) # $t1 = *src + addi $t5, $t5, 4 # src++ + addi $t4, $t4, 4 # dst++ + bltu $t5, $s2, 1b # src < src_end + sw $t1, -4($t4) # *(dst - 4) = $t1 +copy_auxv: + /* $t4 = destination, $t5 = first auxval. */ +2: lw $t1, ($t5) # a_type + lw $t2, 4($t5) # a_un.a_val + addi $t4, $t4, 8 # (Elf32_auxv_t *) dst++ + addi $t5, $t5, 8 # (Elf32_auxv_t *) src++ + beqz $t1, 8f # AT_NULL + li $t6, 3 + beq $t1, $t6, 1f # AT_PHDR + li $t6, 4 + beq $t1, $t6, 2f # AT_PHENT + li $t6, 5 + beq $t1, $t6, 3f # AT_PHNUM + li $t6, 9 + beq $t1, $t6, 4f # AT_ENTRY + li $t6, 7 + beq $t1, $t6, 5f # AT_BASE + li $t6, 31 + beq $t1, $t6, 6f # AT_EXECFN + nop + b 7f + nop +1: b 7f + lw $t2, -20(FP) +2: b 7f + lw $t2, -12(FP) +3: b 7f + lw $t2, -16(FP) +4: b 7f + lw $t2, -8(FP) +5: b 7f + lw $t2, -24(FP) +6: b 7f + move $t2, $t0 +7: sw $t1, -8($t4) # dst->a_type + j copy_auxv + sw $t2, -4($t4) # dst->a_un.a_val + /* Copy the final element. */ +8: sw $t1, -8($t4) # dst->a_type + sw $t2, -4($t4) # dst->a_un.a_val +finish: + /* Copy the string to its position in auxv + (src = $s3, dst = $t0). */ + add $t1, $s3, $s0 # src end + bgeu $s3, $t1, 2f # there already? + nop +1: lb $t2, ($s3) # c = *src + addi $s3, $s3, 1 # *src++ + addi $t0, $t0, 1 # dst++ + bltu $s3, $t1, 1b + sb $t2, -1($t0) # *(dst - 1) = c + /* Save variables. */ +2: move $s6, $t3 # new stack pointer + lw $t4, 4(FP) # secondary fd + lw $s1, (FP) # primary fd, delay slot, preserved li $t2, -1 # immediate -1 - beq $t0, $t2, .finish1 # secondary fd set? + beq $t4, $t2, finish1 # secondary fd set? li $v0, SYSCALL_close # SYS_close, delay slot - move $a0, $t0 # fd + move $a0, $t4 # fd syscall # syscall li $v0, SYSCALL_close # SYS_close -.finish1: +finish1: move $a0, $s1 # primary fd syscall # syscall li $v0, SYSCALL_prctl # SYS_prctl li $a0, 45 # PR_SET_FP_MODE - lw $a1, 28($s0) # fpu_mode + lw $a1, -28(FP) # fpu_mode move $a2, $zero # arg3 move $a3, $zero # arg4 SYSCALL(`$a2',`$a2',`$a2',`$a2') # syscall args syscall # syscall RESTORE() # restore sp -.jump: +jump: move $v0, $zero # rtld_fini - lw $t0, 4($s0) # entry + lw $t9, -4(FP) # entry move $sp, $s6 # restore stack pointer, delay slot - jr $t0 # enter - nop # delay slot + /* Clear at least one page's worth of stack. glibc on mipsel + copies certain fields from the stack to the `link_map' + structure representing ld.so, which are not subsequently + replaced if otherwise than zero. -.auxvtab: - .long 0 # 0 - .long 0 # 1 - .long 0 # 2 - .long 20 # 3 AT_PHDR - .long 12 # 4 AT_PHENT - .long 16 # 5 AT_PHNUM - .long 0 # 6 - .long 24 # 7 AT_BASE - .long 0 # 8 - .long 8 # 9 AT_ENTRY + XXX: report this glibc bug? */ + addi $v0, $sp, -4096 + and $v0, $v0, -4095 +1: sw $zero, ($v0) # copy 32 byte blocks + sw $zero, 4($v0) + sw $zero, 8($v0) + sw $zero, 12($v0) + sw $zero, 16($v0) + sw $zero, 20($v0) + sw $zero, 24($v0) + sw $zero, 28($v0) + addi $v0, $v0, 32 + sub $t0, $sp, $v0 # remainder + bge $t0, 32, 1b # test remainder + nop # copy 4 byte blocks + beqz $t0, 2f +1: addi $v0, $v0, 4 + bltu $v0, $sp, 1b + sw $zero, -4($v0) +2: jr $t9 # enter + nop # delay slot -.timespec: - .long 10 - .long 10 +## timespec: +## .long 10 +## .long 10 # Local Variables: # asm-comment-char: ?# commit 4918de1699152e98c7aaa3ecb21795a3cbd05194 Author: Eli Zaretskii Date: Mon Apr 14 12:42:28 2025 +0300 Support file:// URIs and readonly DB in 'sqlite-open' * src/sqlite.c (Fsqlite_open): Two new optional arguments, READONLY and DISABLE-URI. Doc fix. * etc/NEWS: * doc/lispref/text.texi (Database): Document the new optional arguments to 'sqlite-open'. (Bug#65274) diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi index 954979a00e6..a20699d1944 100644 --- a/doc/lispref/text.texi +++ b/doc/lispref/text.texi @@ -5366,11 +5366,17 @@ available in this Emacs session. When SQLite support is available, the following functions can be used. @cindex database object -@defun sqlite-open &optional file +@defun sqlite-open &optional file readonly disable-uri This function opens @var{file} as an SQLite database file. If @var{file} doesn't exist, a new database will be created and stored in that file. If @var{file} is omitted or @code{nil}, a new in-memory -database is created instead. +database is created instead. Second optional argument @var{readonly}, +if non-@code{nil}, means open the database only for reading; the +database must already exist in that case. By default, @var{file} can be +a @file{file://} URI as well as a file name; in the unusual case that +you have a local file whose name begins with @file{file:}, specify a +non-@code{nil} value for the third optional argument @var{disable-uri} +to disable the automatic recognition and processing of URIs. The return value is a @dfn{database object} that can be used as the argument to most of the subsequent functions described below. diff --git a/etc/NEWS b/etc/NEWS index 082508b7d80..2a19e1457a6 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1895,6 +1895,19 @@ When 'flymake-indicator-type' is set to 'fringes', as is now the default, flymake will automatically fall back to using margin indicators in windows without fringes, including any window on a text terminal. +** SQLite + ++++ +*** SQLite databases can now be opened in read-only mode. +The new optional argument READONLY to 'sqlite-open' function allows to +open an existing database only for reading. + +*** 'sqlite-open' now recognizes 'file://' URIs as well as file names. +The 'file://' URIs are supported by default. In the unusual case that a +normal file name starts with "file:", you can disable the URI +recognition by invoking 'sqlite-open' with the new optional argument +DISABLE-URI non-nil. + * New Modes and Packages in Emacs 31.1 diff --git a/src/sqlite.c b/src/sqlite.c index 0de7488d8fd..99f91fd6da6 100644 --- a/src/sqlite.c +++ b/src/sqlite.c @@ -277,18 +277,28 @@ check_sqlite (Lisp_Object db, bool is_statement) static int db_count = 0; -DEFUN ("sqlite-open", Fsqlite_open, Ssqlite_open, 0, 1, 0, +DEFUN ("sqlite-open", Fsqlite_open, Ssqlite_open, 0, 3, 0, doc: /* Open FILE as an sqlite database. -If FILE is nil, an in-memory database will be opened instead. */) - (Lisp_Object file) +If FILE is nil or omitted, an in-memory database will be opened instead. +If READONLY is non-nil or omitted, open the database in read-only mode, +otherwise open it in read-write mode. +By default, file:// URIs are automatically recognized, unless +DISABLE-URI is non-nil. */) + (Lisp_Object file, Lisp_Object readonly, Lisp_Object disable_uri) { Lisp_Object name; - int flags = (SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE); + int flags; + + if (!NILP (readonly)) + flags = SQLITE_OPEN_READONLY; + else + flags = (SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE); #ifdef SQLITE_OPEN_FULLMUTEX flags |= SQLITE_OPEN_FULLMUTEX; #endif #ifdef SQLITE_OPEN_URI - flags |= SQLITE_OPEN_URI; + if (NILP (disable_uri)) + flags |= SQLITE_OPEN_URI; #endif if (!init_sqlite_functions ()) commit f7ca720e2d0aebeabc454a24a600c23fd444b60b Author: Eli Zaretskii Date: Mon Apr 14 11:42:26 2025 +0300 ; * etc/NEWS: Move tree-sitter related items. diff --git a/etc/NEWS b/etc/NEWS index 1651a13e88e..082508b7d80 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -546,6 +546,13 @@ This variable has no effect when Transient Mark mode is off. ** Tree-sitter +*** The file treesit-x.el defines a number of simple tree-sitter modes. +Using the new macro 'define-treesit-generic-mode', generic modes are +defined including, but not limited to, 'gitattributes-generic-ts-mode'. +Visiting a file in such mode asks for confirmation before installing +its tree-sitter grammar. Then it highlights the visited file +according to the syntax defined by the grammar. + *** New command 'treesit-cycle-sexp-type'. It cycles the type of navigation for commands that move across sexp's and lists, such as 'treesit-forward-sexp', 'treesit-forward-list', @@ -556,6 +563,117 @@ symbols and using the thing 'list' for lists. With the 'sexp' type these commands move across nodes defined by the tree-sitter thing 'sexp' in 'treesit-thing-settings'. ++++ +*** Indirect buffers can have their own parser list. +Before, indirect buffers share their base buffer’s parser list and +parsers. Now they can have their own parser list. + ++++ +*** New variable 'treesit-language-remap-alist'. +This variable allows a user to remap one language into another, such +that creating a parser for language A actually creates a parser for +language B. By extension, any font-lock rules or indentation rules for +language A will be applied to language B instead. + +This is useful for reusing font-lock rules and indentation rules of +language A for language B, when language B is a strict superset of +language A. + ++++ +*** New accessor functions for each setting in 'treesit-font-lock-settings'. +Now users can access a setting's query, feature, enable flag, and +override flag by 'treesit-font-lock-setting-query', +'treesit-font-lock-setting-feature', 'treesit-font-lock-setting-enable', +and 'treesit-font-lock-setting-override'. + +*** New tree-sitter thing 'list'. +Unlike the existing thing 'sexp' that defines both lists and atoms, +'list' defines only lists to be navigated by 'forward-sexp'. +The new function 'treesit-forward-sexp-list' uses 'list' +to move across lists. But to move across atoms inside the list +it uses 'forward-sexp-default-function'. + +*** New tree-sitter based functions for moving by lists. +If a major mode defines 'list' in 'treesit-thing-settings', +tree-sitter setup for these modes sets 'forward-list-function' to +'treesit-forward-list', 'up-list-function' to 'treesit-up-list', and +'down-list-function' to 'treesit-down-list'. This enables the +'forward-list', 'up-list', and 'down-list' motion commands for those +modes. + +*** Tree-sitter enabled modes now properly support 'show-paren-mode'. +They do that by letting 'show-paren-mode' use the results of parsing by +the tree-sitter library. The new function 'treesit-show-paren-data' is +used to communicate the tree-sitter parsing results to +'show-paren-mode'. + +*** Tree-sitter enabled modes now properly support 'hs-minor-mode'. +All commands from hideshow.el can selectively display blocks +defined by the new tree-sitter thing 'list'. + +*** New tree-sitter thing 'comment'. +The new variable 'forward-comment-function' is set to the new function +'treesit-forward-comment' if a major mode defines the thing 'comment'. + ++++ +*** New function 'treesit-language-display-name'. +This new function returns the display name of a language given the +language symbol. For example, 'cpp' is translated to "C++". A new +variable 'treesit-language-display-name-alist' holds the translations of +language symbols where that translation is not trivial. + +*** New function 'treesit-merge-font-lock-feature-list'. +This function merges two tree-sitter font-lock feature lists. Returns a +new font-lock feature list with no duplicates in the same level. It can +be used to merge font-lock feature lists in a multi-language major mode. + +*** New function 'treesit-replace-font-lock-feature-settings'. +Given two tree-sitter font-lock settings, it replaces the feature in the +second font-lock settings with the same feature in the first font-lock +settings. In a multi-language major mode it is sometimes necessary to +replace features from one of the major modes, with others that are +better suited to the new multilingual context. + +*** New function 'treesit-simple-indent-modify-rules'. +Given two tree-sitter indent rules, it replaces, adds, or prepends rules +in the old rules with new ones, then returns the modified rules. In a +multi-language major mode it is sometimes necessary to modify rules from +one of the major modes to better suit the new multilingual context. + ++++ +*** New variable 'treesit-aggregated-simple-imenu-settings'. +This variable allows major modes to setup Imenu for multiple languages. + ++++ +*** New variable 'treesit-aggregated-outline-predicate'. +This variable allows major modes to setup 'outline-minor-mode' +for multiple languages. + +*** New function 'treesit-simple-indent-add-rules'. +This new function makes it easier to customize indent rules for +tree-sitter modes. + +*** New variable 'treesit-simple-indent-override-rules'. +Users can customize this variable to add simple custom indentation rules +for tree-sitter major modes. + ++++ +*** 'treesit-language-at-point-function' is now optional. +Multi-language major modes can rely on the default return value from +'treesit-language-at' that uses the new function 'treesit-parsers-at'. + ++++ +*** New command 'treesit-explore'. +This command replaces 'treesit-explore-mode'. It turns on +'treesit-explore-mode' if it is not on, and pops up the explorer buffer +if it is already on. + ++++ +*** 'treesit-explore-mode' now supports local parsers. +Now 'treesit-explore-mode' (or 'treesit-explore') prompts for a parser +rather than a language, and it is now possible to select a local parser +at point to explore. + ** Text mode --- @@ -1970,126 +2088,6 @@ authorize the invoked D-Bus method (for example via polkit). ** The customization group 'wp' has been removed. It has been obsolete since Emacs 26.1. Use the group 'text' instead. -** Changes in tree-sitter modes - -*** The file treesit-x.el defines a number of simple tree-sitter modes. -Using the new macro 'define-treesit-generic-mode', generic modes are -defined including, but not limited to, 'gitattributes-generic-ts-mode'. -Visiting a file in such mode asks for confirmation before installing -its tree-sitter grammar. Then it highlights the visited file -according to the syntax defined by the grammar. - -+++ -*** Indirect buffers can have their own parser list. -Before, indirect buffers share their base buffer’s parser list and -parsers. Now they can have their own parser list. - -+++ -*** New variable 'treesit-language-remap-alist'. -This variable allows a user to remap one language into another, such -that creating a parser for language A actually creates a parser for -language B. By extension, any font-lock rules or indentation rules for -language A will be applied to language B instead. - -This is useful for reusing font-lock rules and indentation rules of -language A for language B, when language B is a strict superset of -language A. - -+++ -*** New accessor functions for each setting in 'treesit-font-lock-settings'. -Now users can access a setting's query, feature, enable flag, and -override flag by 'treesit-font-lock-setting-query', -'treesit-font-lock-setting-feature', 'treesit-font-lock-setting-enable', -and 'treesit-font-lock-setting-override'. - -*** New tree-sitter thing 'list'. -Unlike the existing thing 'sexp' that defines both lists and atoms, -'list' defines only lists to be navigated by 'forward-sexp'. -The new function 'treesit-forward-sexp-list' uses 'list' -to move across lists. But to move across atoms inside the list -it uses 'forward-sexp-default-function'. - -*** New tree-sitter based functions for moving by lists. -If a major mode defines 'list' in 'treesit-thing-settings', -tree-sitter setup for these modes sets 'forward-list-function' to -'treesit-forward-list', 'up-list-function' to 'treesit-up-list', and -'down-list-function' to 'treesit-down-list'. This enables the -'forward-list', 'up-list', and 'down-list' motion commands for those -modes. - -*** Tree-sitter enabled modes now properly support 'show-paren-mode'. -They do that by letting 'show-paren-mode' use the results of parsing by -the tree-sitter library. The new function 'treesit-show-paren-data' is -used to communicate the tree-sitter parsing results to -'show-paren-mode'. - -*** Tree-sitter enabled modes now properly support 'hs-minor-mode'. -All commands from hideshow.el can selectively display blocks -defined by the new tree-sitter thing 'list'. - -*** New tree-sitter thing 'comment'. -The new variable 'forward-comment-function' is set to the new function -'treesit-forward-comment' if a major mode defines the thing 'comment'. - -+++ -*** New function 'treesit-language-display-name'. -This new function returns the display name of a language given the -language symbol. For example, 'cpp' is translated to "C++". A new -variable 'treesit-language-display-name-alist' holds the translations of -language symbols where that translation is not trivial. - -*** New function 'treesit-merge-font-lock-feature-list'. -This function merges two tree-sitter font-lock feature lists. Returns a -new font-lock feature list with no duplicates in the same level. It can -be used to merge font-lock feature lists in a multi-language major mode. - -*** New function 'treesit-replace-font-lock-feature-settings'. -Given two tree-sitter font-lock settings, it replaces the feature in the -second font-lock settings with the same feature in the first font-lock -settings. In a multi-language major mode it is sometimes necessary to -replace features from one of the major modes, with others that are -better suited to the new multilingual context. - -*** New function 'treesit-simple-indent-modify-rules'. -Given two tree-sitter indent rules, it replaces, adds, or prepends rules -in the old rules with new ones, then returns the modified rules. In a -multi-language major mode it is sometimes necessary to modify rules from -one of the major modes to better suit the new multilingual context. - -+++ -*** New variable 'treesit-aggregated-simple-imenu-settings'. -This variable allows major modes to setup Imenu for multiple languages. - -+++ -*** New variable 'treesit-aggregated-outline-predicate'. -This variable allows major modes to setup 'outline-minor-mode' -for multiple languages. - -*** New function 'treesit-simple-indent-add-rules'. -This new function makes it easier to customize indent rules for -tree-sitter modes. - -*** New variable 'treesit-simple-indent-override-rules'. -Users can customize this variable to add simple custom indentation rules -for tree-sitter major modes. - -+++ -*** 'treesit-language-at-point-function' is now optional. -Multi-language major modes can rely on the default return value from -'treesit-language-at' that uses the new function 'treesit-parsers-at'. - -+++ -*** New command 'treesit-explore'. -This command replaces 'treesit-explore-mode'. It turns on -'treesit-explore-mode' if it is not on, and pops up the explorer buffer -if it is already on. - -+++ -*** 'treesit-explore-mode' now supports local parsers. -Now 'treesit-explore-mode' (or 'treesit-explore') prompts for a parser -rather than a language, and it is now possible to select a local parser -at point to explore. - +++ ** New optional BUFFER argument for 'string-pixel-width'. If supplied, 'string-pixel-width' will use any face remappings from commit 462bd149cddc2a7ba81de7ad0c286bcb64681d69 Author: Po Lu Date: Mon Apr 14 09:10:14 2025 +0800 Fix typos in executable loaders * exec/loader-aarch64.s (skip_environ, cleanup): Minor thinkos. * exec/loader-x86_64.s (skip_environ): Insert missing label. diff --git a/exec/loader-aarch64.s b/exec/loader-aarch64.s index 64f95725eca..376f439417f 100644 --- a/exec/loader-aarch64.s +++ b/exec/loader-aarch64.s @@ -167,7 +167,7 @@ skip_environ: 1: ldrb w3, [x2], #1 strb w3, [x1], #1 cmp x2, x9 - bls 1b + blo 1b copy_env_and_args: // Copy argc and the environment array. mov x8, x10 @@ -204,7 +204,7 @@ cleanup: 1: ldrb w3, [x5], #1 strb w3, [x7], #1 cmp x5, x9 - bls 1b + blo 1b // Close file descriptors. 2: cmp x28, #-1 // is secondary fd set? beq cleanup1 // not set diff --git a/exec/loader-x86_64.s b/exec/loader-x86_64.s index 236f8d6670f..9340ac8fc65 100644 --- a/exec/loader-x86_64.s +++ b/exec/loader-x86_64.s @@ -162,7 +162,7 @@ skip_environ: rep movsb # copy file name movq %r10, %rsi # file name /* Preserve jump command. */ - cmpq %r8, %r11 # decide copy direction +1: cmpq %r8, %r11 # decide copy direction jb 1f # copy forward movq 48(%r8), %rax movq %rax, 48(%r11) # %r11->at_base commit f7e34d52dcc175f3205e308ab57e83d7b0515792 Author: Dmitry Gutov Date: Mon Apr 14 03:34:42 2025 +0300 Fix help-customize in describe-symbol buffers * lisp/help-fns.el (describe-symbol): Protect help-mode--current-data from being modified inside the help-setup-xref call (bug#77510). diff --git a/lisp/help-fns.el b/lisp/help-fns.el index 77f1c1e678f..0eb0a7a40be 100644 --- a/lisp/help-fns.el +++ b/lisp/help-fns.el @@ -1967,7 +1967,8 @@ current buffer and the selected frame, respectively." (unless single ;; Don't record the `describe-variable' item in the stack. (setq help-xref-stack-item nil) - (help-setup-xref (list #'describe-symbol symbol) nil)) + (let ((help-mode--current-data help-mode--current-data)) + (help-setup-xref (list #'describe-symbol symbol) nil))) (goto-char (point-max)) (help-xref--navigation-buttons) (goto-char (point-min)))))) commit 19913b1567940b8af5bfcef5c6efe19a3656e66b Author: Stefan Monnier Date: Sun Apr 13 12:45:54 2025 -0400 (cl-generic-define-method): Try and fix bug#77464 * lisp/emacs-lisp/cl-generic.el (cl-generic-define-method): Don't set the function to `dummy`, even temporarily. diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el index d1d57fe40bd..8de45626bf0 100644 --- a/lisp/emacs-lisp/cl-generic.el +++ b/lisp/emacs-lisp/cl-generic.el @@ -644,22 +644,24 @@ The set of acceptable TYPEs (also called \"specializers\") is defined ;; FIXME: Try to avoid re-constructing a new function if the old one ;; is still valid (e.g. still empty method cache)? (gfun (cl--generic-make-function generic))) - (unless (symbol-function sym) - (defalias sym 'dummy)) ;Record definition into load-history. (cl-pushnew `(cl-defmethod . ,(cl--generic-load-hist-format (cl--generic-name generic) qualifiers specializers)) current-load-list :test #'equal) (let ((old-adv-cc (get-advertised-calling-convention - (symbol-function sym))) - ;; Prevent `defalias' from recording this as the definition site of - ;; the generic function. - current-load-list) + (symbol-function sym)))) (when (listp old-adv-cc) - (set-advertised-calling-convention gfun old-adv-cc nil)) - ;; But do use `defalias', so that it interacts properly with nadvice, - ;; e.g. for tracing/debug-on-entry. - (defalias sym gfun))))) + (set-advertised-calling-convention gfun old-adv-cc nil))) + (if (not (symbol-function sym)) + ;; If this is the first definition, use it as "the definition site of + ;; the generic function" since we don't know if a `cl-defgeneric' + ;; will follow or not. + (defalias sym gfun) + ;; Prevent `defalias' from recording this as the definition site of + ;; the generic function. But do use `defalias', so it interacts + ;; properly with nadvice, e.g. for ;; tracing/debug-on-entry. + (let (current-load-list) + (defalias sym gfun)))))) (defvar cl--generic-dispatchers (make-hash-table :test #'equal)) commit 1dee377bad00737c4730339f62467f45224b5089 Author: Stefan Monnier Date: Sun Apr 13 10:59:47 2025 -0400 lisp/gnus/gnus-start.el (gnus-dribble-eval-file): Ignore lexbind warning diff --git a/lisp/gnus/gnus-start.el b/lisp/gnus/gnus-start.el index d167a7c4dd6..7133df15322 100644 --- a/lisp/gnus/gnus-start.el +++ b/lisp/gnus/gnus-start.el @@ -892,9 +892,9 @@ If REGEXP is given, lines that match it will be deleted." (when (or (file-exists-p auto) (file-exists-p dribble-file)) ;; Load whichever file is newest -- the auto save file ;; or the "real" file. - (if (file-newer-than-file-p auto dribble-file) - (nnheader-insert-file-contents auto) - (nnheader-insert-file-contents dribble-file)) + (nnheader-insert-file-contents + (if (file-newer-than-file-p auto dribble-file) + auto dribble-file)) (unless (zerop (buffer-size)) (set-buffer-modified-p t)) ;; Set the file modes to reflect the .newsrc file modes. @@ -916,9 +916,10 @@ If REGEXP is given, lines that match it will be deleted." (defun gnus-dribble-eval-file () (when gnus-dribble-eval-file (setq gnus-dribble-eval-file nil) - (let ((gnus-dribble-ignore t)) - (with-current-buffer gnus-dribble-buffer - (eval-buffer (current-buffer)))))) + (with-current-buffer gnus-dribble-buffer + (let ((gnus-dribble-ignore t) + (warning-inhibit-types '((files missing-lexbind-cookie)))) + (eval-buffer (current-buffer)))))) (defun gnus-dribble-delete-file () (when (file-exists-p (gnus-dribble-file-name)) commit 9dfd4c6bd3140585392a428201088e9f019b0071 Author: Stefan Monnier Date: Sun Apr 13 10:33:47 2025 -0400 (calc-save-modes): Add a `lexical-binding` cookie * lisp/calc/calc-mode.el (calc-save-modes): Add a `lexical-binding` cookie when it is safe. Use `pcase-dolist` and `pp`. diff --git a/lisp/calc/calc-mode.el b/lisp/calc/calc-mode.el index 1ca6bb7dca2..6f31d6af040 100644 --- a/lisp/calc/calc-mode.el +++ b/lisp/calc/calc-mode.el @@ -290,22 +290,16 @@ (goto-char (point-max)) (insert "\n\n") (forward-char -1)) + (save-excursion + (goto-char (point-max)) + (skip-chars-backward " \n\t ") + (when (bobp) + (insert ";;; -*- mode: emacs-lisp; lexical-binding:t -*-\n"))) (insert ";;; Mode settings stored by Calc on " (current-time-string) "\n") - (let ((list calc-mode-var-list)) - (while list - (let* ((v (car (car list))) - (def (nth 1 (car list))) - (val (car vals))) - (or (equal val def) - (progn - (insert "(setq " (symbol-name v) " ") - (if (and (or (listp val) - (symbolp val)) - (not (memq val '(nil t)))) - (insert "'")) - (insert (prin1-to-string val) ")\n")))) - (setq list (cdr list) - vals (cdr vals)))) + (pcase-dolist (`(,v ,def) calc-mode-var-list) + (let* ((val (pop vals))) + (or (equal val def) + (pp `(setq ,v ,(macroexp-quote val)) (current-buffer))))) (run-hooks 'calc-mode-save-hook) (insert ";;; End of mode settings\n") (save-buffer) commit e0c7b6e31e8c03dd66a929742898f2d6e2628356 Author: Eli Zaretskii Date: Sun Apr 13 16:35:49 2025 +0300 Fix warning messages about lexbind cookie in subdirs.el * lisp/files.el (internal--get-default-lexical-binding): Don't log a warning message when lexbind warning is disabled, and 'display-warning' is unavailable or signals an error. diff --git a/lisp/files.el b/lisp/files.el index ad6047bd02d..4fb1221ec0d 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -4314,7 +4314,10 @@ for more information." ;; fail (e.g. not yet defined, or can't be (auto)loaded), ;; so use a simple fallback that won't get in the way. (error - (message "Missing `lexical-binding' cookie in %S" source))))) + ;; But not if this particular warning is disabled. + (unless (equal warning-inhibit-types + '((files missing-lexbind-cookie))) + (message "Missing `lexical-binding' cookie in %S" source)))))) (default-toplevel-value 'lexical-binding))) (setq internal--get-default-lexical-binding-function commit ebaf4241263e167e992981efb8d1bf571f311803 Author: Eshel Yaron Date: Sun Apr 13 13:53:29 2025 +0200 ; Fix recently broken test (bug#77777). * test/lisp/emacs-lisp/find-func-tests.el (find-func-tests--locate-macro-generated-symbols): bind 'trusted-content' to names of files in which we want to expand macros during this test. diff --git a/test/lisp/emacs-lisp/find-func-tests.el b/test/lisp/emacs-lisp/find-func-tests.el index 3faf9f99aff..5a2dbc5d8d7 100644 --- a/test/lisp/emacs-lisp/find-func-tests.el +++ b/test/lisp/emacs-lisp/find-func-tests.el @@ -118,10 +118,13 @@ expected function symbol and function library, respectively." (declare-function compilation--message->loc nil "compile") (ert-deftest find-func-tests--locate-macro-generated-symbols () ;bug#45443 - (should (cdr (find-function-search-for-symbol - #'compilation--message->loc nil "compile"))) - (should (cdr (find-function-search-for-symbol - 'c-mode-hook 'defvar "cc-mode")))) + (let ((trusted-content + (list (abbreviate-file-name (find-library-name "compile")) + (abbreviate-file-name (find-library-name "cc-mode"))))) + (should (cdr (find-function-search-for-symbol + #'compilation--message->loc nil "compile"))) + (should (cdr (find-function-search-for-symbol + 'c-mode-hook 'defvar "cc-mode"))))) (provide 'find-func-tests) ;;; find-func-tests.el ends here commit 74e25c9413b9a9b824bb07b7b5ced9be18c45936 Author: Po Lu Date: Sun Apr 13 19:02:00 2025 +0800 Fix file descriptor leaks on arm Android * exec/loader-aarch64.s (_start): * exec/loader-armeabi.s (_start): Fix thinko. Do not merge to master. diff --git a/exec/loader-aarch64.s b/exec/loader-aarch64.s index 686a804aa0e..a04e4362ef0 100644 --- a/exec/loader-aarch64.s +++ b/exec/loader-aarch64.s @@ -168,7 +168,7 @@ _start: b .one_auxv .cleanup: cmp x28, #-1 // is secondary fd set? - bne .cleanup1 // not set + beq .cleanup1 // not set mov x8, #57 // SYS_close mov x0, x28 // secondary fd svc #0 // syscall diff --git a/exec/loader-armeabi.s b/exec/loader-armeabi.s index 2aa52f3e006..e0aabdbe734 100644 --- a/exec/loader-armeabi.s +++ b/exec/loader-armeabi.s @@ -181,7 +181,7 @@ _start: b .one_auxv .cleanup: cmp r14, #-1 @ secondary fd set? - bne .cleanup1 @ not set + beq .cleanup1 @ not set mov r7, #6 @ SYS_close mov r0, r14 @ secondary fd swi #0 @ syscall commit 7a01350624e1665e707f98e13d51f53e9f87ce95 Author: Po Lu Date: Sun Apr 13 18:50:59 2025 +0800 Replace AT_EXECFN in auxiliary vectors of programs executed on Android * exec/exec.c (insert_args, exec_0): On non-MIPS systems, copy NAME and its length to the loader area. State that MIPS support is not yet available (though it will be pending the availability of a functioning emulator). * exec/loader-aarch64.s (_start): * exec/loader-armeabi.s (_start): * exec/loader-x86.s (_start): * exec/loader-x86_64.s (_start): Displace auxv, environ, and argv to create sufficient space for the provided file name, and copy the file name there. Replace AT_EXECFN to refer to this space. diff --git a/exec/exec.c b/exec/exec.c index b1c9825daff..7a8ef2c3a1a 100644 --- a/exec/exec.c +++ b/exec/exec.c @@ -831,7 +831,7 @@ insert_args (struct exec_tracee *tracee, USER_REGS_STRUCT *regs, assert (new3 == new + effective_size); /* And that it is properly aligned. */ - assert (!(new3 & (sizeof new3 - 2))); + assert (!(new3 & (sizeof new3 - 1))); /* Now modify the system call argument to point to new + text_size. */ @@ -916,6 +916,9 @@ exec_0 (char *name, struct exec_tracee *tracee, program_header program; USER_WORD entry, program_entry, offset; USER_WORD header_offset; +#ifndef __mips__ + USER_WORD name_len, aligned_len; +#endif /* !__mips__ */ struct exec_jump_command jump; #if defined __mips__ && !defined MIPS_NABI int fpu_mode; @@ -1146,6 +1149,26 @@ exec_0 (char *name, struct exec_tracee *tracee, sizeof jump); loader_area_used += sizeof jump; + /* TODO: MIPS support. */ +#ifndef __mips__ + /* Copy the length of NAME and NAME itself to the loader area. */ + name_len = strlen (name); + aligned_len = ((name_len + 1 + sizeof name_len - 1) + & -sizeof name_len); + if (sizeof loader_area - loader_area_used + < aligned_len + sizeof name_len) + goto fail1; + memcpy (loader_area + loader_area_used, &name_len, sizeof name_len); + loader_area_used += sizeof name_len; + memcpy (loader_area + loader_area_used, name, name_len + 1); + loader_area_used += name_len + 1; + + /* Properly align the loader area. */ + offset = aligned_len - (name_len + 1); + while (offset--) + loader_area[loader_area_used++] = '\0'; +#endif /* !__mips__ */ + /* Close the file descriptor and return the number of bytes used. */ diff --git a/exec/loader-aarch64.s b/exec/loader-aarch64.s index 686a804aa0e..64f95725eca 100644 --- a/exec/loader-aarch64.s +++ b/exec/loader-aarch64.s @@ -22,68 +22,68 @@ .section .text .global _start _start: - //mov x8, 101 // SYS_nanosleep - //adr x0, timespec // req - //mov x1, #0 // rem - //svc #0 // syscall + // mov x8, 101 // SYS_nanosleep + // adr x0, timespec // req + // mov x1, #0 // rem + // svc #0 // syscall mov x20, sp // x20 = sp ldr x10, [x20] // x10 = original SP add x20, x20, #16 // x20 = start of load area mov x28, #-1 // x28 = secondary fd -.next_action: +next_action: ldr x11, [x20] // action number and x12, x11, #-17 // actual action number - cbz x12, .open_file // open file? + cbz x12, open_file // open file? cmp x12, #3 // jump? - beq .rest_of_exec + beq rest_of_exec cmp x12, #4 // anonymous mmap? - beq .do_mmap_anon -.do_mmap: + beq do_mmap_anon +do_mmap: ldr x0, [x20, 8] // vm_address ldr x1, [x20, 32] // length ldr x2, [x20, 24] // protection ldr x3, [x20, 40] // flags tst x11, #16 // primary fd? mov x4, x29 // primary fd - beq .do_mmap_1 + beq do_mmap_1 mov x4, x28 // secondary fd -.do_mmap_1: +do_mmap_1: mov x8, #222 // SYS_mmap ldr x5, [x20, 16] // file_offset svc #0 // syscall ldr x9, [x20, 8] // length cmp x0, x9 // mmap result - bne .perror // print error + bne perror // print error ldr x3, [x20, 48] // clear add x1, x1, x0 // x1 = vm_address + end sub x3, x1, x3 // x3 = x1 - clear mov x0, #0 // x0 = 0 -.fill64: +fill64: sub x2, x1, x3 // x2 = x1 - x3 cmp x2, #63 // x2 >= 64? - ble .fillb // start filling bytes + ble fillb // start filling bytes stp x0, x0, [x3] // x3[0] = 0, x3[1] = 0 stp x0, x0, [x3, 16] // x3[2] = 0, x3[3] = 0 stp x0, x0, [x3, 32] // x3[4] = 0, x3[5] = 0 stp x0, x0, [x3, 48] // x3[6] = 0, x3[7] = 0 add x3, x3, #64 // x3 += 8 - b .fill64 -.fillb: + b fill64 +fillb: cmp x1, x3 // x1 == x3? - beq .continue // done + beq continue // done strb w0, [x3], #1 // ((char *) x3)++ = 0 - b .fillb -.continue: + b fillb +continue: add x20, x20, #56 // next action - b .next_action -.do_mmap_anon: + b next_action +do_mmap_anon: ldr x0, [x20, 8] // vm_address ldr x1, [x20, 32] // length ldr x2, [x20, 24] // protection ldr x3, [x20, 40] // flags mov x4, #-1 // fd - b .do_mmap_1 -.open_file: + b do_mmap_1 +open_file: mov x8, #56 // SYS_openat mov x0, #-100 // AT_FDCWD add x1, x20, #8 // file name @@ -91,19 +91,19 @@ _start: mov x3, #0 // mode svc #0 // syscall cmp x0, #-1 // rc < 0? - ble .perror + ble perror mov x19, x1 // x19 == x1 -.nextc: +nextc: ldrb w2, [x1], #1 // b = *x1++ cmp w2, #47 // dir separator? - bne .nextc1 // not dir separator + bne nextc1 // not dir separator mov x19, x1 // x19 = char past separator -.nextc1: - cbnz w2, .nextc // b? +nextc1: + cbnz w2, nextc // b? add x1, x1, #7 // round up x1 and x20, x1, #-8 // mask for round, set x20 tst x11, #16 // primary fd? - bne .secondary // secondary fd + bne secondary // secondary fd mov x29, x0 // primary fd mov x8, #167 // SYS_prctl mov x0, #15 // PR_SET_NAME @@ -113,75 +113,117 @@ _start: mov x4, #0 // arg4 mov x5, #0 // arg5 svc #0 // syscall - b .next_action // next action -.secondary: + b next_action // next action +secondary: mov x28, x0 // secondary fd - b .next_action // next action. -.perror: + b next_action // next action. +perror: mov x8, #93 // SYS_exit mvn x0, x0 // x1 = ~x0 add x0, x0, 1 // x1 += 1 svc #0 // exit -.rest_of_exec: +rest_of_exec: mov x7, x20 // x7 = x20 - mov x20, x10 // x20 = x10 - ldr x9, [x20] // argc - add x9, x9, #2 // x9 += 2 + mov x8, x10 // x8 = x10 + ldr x9, [x8], #16 // (void *) x8 += 2 lsl x9, x9, #3 // argc * 8 - add x20, x20, x9 // now past argv -.skipenv: - ldr x9, [x20], #8 // x9 = *envp++ - cbnz x9, .skipenv // x9? -.one_auxv: - ldr x9, [x20], #16 // x9 = *sp, sp += 2 - cbz x9, .cleanup // !x9? - cmp x9, #3 // is AT_PHDR? - beq .replace_phdr // replace - cmp x9, #4 // is AT_PHENT? - beq .replace_phent // replace - cmp x9, #5 // is AT_PHNUM? - beq .replace_phnum // replace - cmp x9, #9 // is AT_ENTRY? - beq .replace_entry // replace - cmp x9, #7 // is AT_BASE? - beq .replace_base // replace - b .one_auxv // next auxv -.replace_phdr: - ldr x9, [x7, 40] // at_phdr - str x9, [x20, -8] // store value - b .one_auxv -.replace_phent: - ldr x9, [x7, 24] // at_phent - str x9, [x20, -8] // store value - b .one_auxv -.replace_phnum: - ldr x9, [x7, 32] // at_phnum - str x9, [x20, -8] // store value - b .one_auxv -.replace_entry: - ldr x9, [x7, 16] // at_entry - str x9, [x20, -8] // store value - b .one_auxv -.replace_base: - ldr x9, [x7, 48] // at_base - str x9, [x20, -8] // store value - b .one_auxv -.cleanup: - cmp x28, #-1 // is secondary fd set? - bne .cleanup1 // not set + add x8, x8, x9 // now past argv +skip_environ: + ldr x9, [x8], #8 // x9 = *envp++ + cbnz x9, skip_environ // x9? + // Skip the auxiliary vector. +1: ldp x11, x12, [x8], #16 // a_type, a_un.a_val + cbnz x11, 1b // a_type != NULL + // Prepare sufficient space at x20 for the file name string. + // Load the aforesaid string, and its length. + ldr x6, [x7, 56] // string length + add x6, x6, 1 + add x5, x7, 64 // string pointer + sub x4, x10, x8 // number of elements to copy + sub x7, x8, x6 // AT_EXECFN location + and x7, x7, -8 // align value + add x4, x7, x4 // destination argc + and x4, x4, -16 // align destination argc + // Load values that must be into registers x14-x19. + // x14 = cmd->entry + // x15 = cmd->at_entry + // x16 = cmd->at_phent + // x17 = cmd->at_phnum + // x18 = cmd->at_phdr + // x19 = cmd->at_base + ldp x14, x15, [x20, 8] + ldp x16, x17, [x20, 24] + ldp x18, x19, [x20, 40] + // Move the string to a safe location, if necessary. + sub x3, x4, x5 // distance from dest to string + cmp x3, x6 // distance > length + bge copy_env_and_args // not necessary + mov x2, x5 // src + sub x5, x4, x6 // backup string + mov x1, x5 // dst + add x9, x2, x6 // src end + cmp x2, x9 + bcs copy_env_and_args +1: ldrb w3, [x2], #1 + strb w3, [x1], #1 + cmp x2, x9 + bls 1b +copy_env_and_args: + // Copy argc and the environment array. + mov x8, x10 + mov x10, x4 +1: ldr x9, [x8], #8 // envp + str x9, [x4], #8 + cbnz x9, 1b +1: ldr x9, [x8], #8 // environ + str x9, [x4], #8 + cbnz x9, 1b +copy_auxv: + ldp x11, x12, [x8], #16 // a_type, a_un.a_val + stp x11, x12, [x4], #16 // write value + cbz x11, cleanup // AT_NULL + cmp x11, #3 // AT_PHDR + csel x12, x18, x12, eq + cmp x11, #4 // AT_PHENT + csel x12, x16, x12, eq + cmp x11, #5 // AT_PHNUM + csel x12, x17, x12, eq + cmp x11, #9 // AT_ENTRY + csel x12, x15, x12, eq + cmp x11, #7 // AT_BASE + csel x12, x19, x12, eq + cmp x11, #31 // AT_EXECFN + csel x12, x7, x12, eq + str x12, [x4, -8] // replace value + b copy_auxv +cleanup: + // Copy the filename. + add x9, x5, x6 // end + cmp x5, x9 + bcs 2f +1: ldrb w3, [x5], #1 + strb w3, [x7], #1 + cmp x5, x9 + bls 1b + // Close file descriptors. +2: cmp x28, #-1 // is secondary fd set? + beq cleanup1 // not set mov x8, #57 // SYS_close mov x0, x28 // secondary fd svc #0 // syscall -.cleanup1: +cleanup1: mov x8, #57 // SYS_close mov x0, x29 // primary fd svc #0 // syscall -.enter: +enter: mov sp, x10 // restore original SP mov x0, #0 // clear rtld_fini - ldr x1, [x7, 8] // branch to code - br x1 + br x14 -timespec: - .quad 10 - .quad 10 +// timespec: +// .quad 10 +// .quad 10 + +// Local Variables: +// asm-comment-char: ?/ +// End: diff --git a/exec/loader-armeabi.s b/exec/loader-armeabi.s index 2aa52f3e006..572020bb573 100644 --- a/exec/loader-armeabi.s +++ b/exec/loader-armeabi.s @@ -18,23 +18,23 @@ .section .text .global _start _start: - @mov r7, #162 @ SYS_nanosleep - @adr r0, timespec @ req - @mov r1, #0 @ rem - @swi #0 @ syscall + @@ mov r7, #162 @ SYS_nanosleep + @@ adr r0, timespec @ req + @@ mov r1, #0 @ rem + @@ swi #0 @ syscall mov r8, sp @ r8 = sp ldr r9, [r8], #8 @ r9 = original sp, r8 += 8 mov r14, #-1 @ r14 = secondary fd -.next_action: +next_action: ldr r11, [r8] @ r11 = action number and r12, r11, #-17 @ actual action number cmp r12, #0 @ open file? - beq .open_file @ open file. + beq open_file @ open file. cmp r12, #3 @ jump? - beq .rest_of_exec @ jump to code. + beq rest_of_exec @ jump to code. cmp r12, #4 @ anonymous mmap? - beq .do_mmap_anon @ anonymous mmap. -.do_mmap: + beq do_mmap_anon @ anonymous mmap. +do_mmap: add r6, r8, #4 @ r6 = r8 + 4 ldm r6!, {r0, r5} @ vm_address, file_offset ldm r6!, {r1, r2} @ protection, length @@ -45,28 +45,28 @@ _start: ldm r6!, {r3, r12} @ flags, clear tst r11, #16 @ primary fd? mov r4, r10 @ primary fd - beq .do_mmap_1 + beq do_mmap_1 mov r4, r14 @ secondary fd -.do_mmap_1: +do_mmap_1: mov r7, #192 @ SYS_mmap2 swi #0 @ syscall ldr r2, [r8, #4] @ vm_address cmp r2, r0 @ rc == vm_address? - bne .perror + bne perror add r0, r1, r2 @ r0 = length + vm_address sub r3, r0, r12 @ r3 = r0 - clear mov r1, #0 @ r1 = 0 -.align: +align: cmp r0, r3 @ r0 == r3? - beq .continue @ continue + beq continue @ continue tst r3, #3 @ r3 & 3? - bne .fill32 @ fill aligned + bne fill32 @ fill aligned strb r1, [r3], #1 @ fill byte - b .align @ align again -.fill32: + b align @ align again +fill32: sub r2, r0, r3 @ r2 = r0 - r3 cmp r2, #31 @ r2 >= 32? - ble .fillb @ start filling bytes + ble fillb @ start filling bytes str r1, [r3], #4 @ *r3++ = 0 str r1, [r3], #4 @ *r3++ = 0 str r1, [r3], #4 @ *r3++ = 0 @@ -75,16 +75,16 @@ _start: str r1, [r3], #4 @ *r3++ = 0 str r1, [r3], #4 @ *r3++ = 0 str r1, [r3], #4 @ *r3++ = 0 - b .fill32 -.fillb: + b fill32 +fillb: cmp r0, r3 @ r0 == r3 - beq .continue @ done + beq continue @ done strb r1, [r3], #1 @ ((char *) r3)++ = 0 - b .fillb -.continue: + b fillb +continue: add r8, r8, #28 @ next action - b .next_action -.do_mmap_anon: + b next_action +do_mmap_anon: add r6, r8, #4 @ r6 = r8 + 4 ldm r6!, {r0, r5} @ vm_address, file_offset ldm r6!, {r1, r2} @ protection, length @@ -94,29 +94,29 @@ _start: mov r2, r3 @ swap ldm r6!, {r3, r12} @ flags, clear mov r4, #-1 @ fd - b .do_mmap_1 -.open_file: + b do_mmap_1 +open_file: mov r7, #5 @ SYS_open add r0, r8, #4 @ file name mov r1, #0 @ O_RDONLY mov r2, #0 @ mode swi #0 @ syscall cmp r0, #-1 @ r0 <= -1? - ble .perror + ble perror add r8, r8, #4 @ r8 = start of string mov r1, r8 @ r1 = r8 -.nextc: +nextc: ldrb r2, [r8], #1 @ b = *r0++ cmp r2, #47 @ dir separator? - bne .nextc1 @ not dir separator + bne nextc1 @ not dir separator mov r1, r8 @ r1 = char past separator -.nextc1: +nextc1: cmp r2, #0 @ b? - bne .nextc @ next character + bne nextc @ next character add r8, r8, #3 @ round up r8 and r8, r8, #-4 @ mask for round, set r8 tst r11, #16 @ primary fd? - bne .secondary @ secondary fd + bne secondary @ secondary fd mov r10, r0 @ primary fd mov r7, #172 @ SYS_prctl mov r0, #15 @ PR_SET_NAME, r1 = name @@ -125,79 +125,139 @@ _start: mov r4, #0 @ arg4 mov r5, #0 @ arg5 swi #0 @ syscall - b .next_action @ next action -.secondary: + b next_action @ next action +secondary: mov r14, r0 @ secondary fd - b .next_action @ next action -.perror: + b next_action @ next action +perror: mov r7, #1 @ SYS_exit mvn r0, r0 @ r0 = ~r0 add r0, r0, #1 @ r0 += 1 swi #0 -.rest_of_exec: +rest_of_exec: @ r8 points to seven ints + string mov r7, r9 @ r7 = original SP - ldr r6, [r7] @ argc - add r6, r6, #2 @ argc + 2 + ldr r6, [r7], #8 @ argc & terminator lsl r6, r6, #2 @ argc *= 4 add r7, r7, r6 @ now past argv -.skipenv: - ldr r6, [r7], #4 @ r6 = *r7++ - cmp r6, #0 @ r6? - bne .skipenv @ r6? -.one_auxv: - ldr r6, [r7], #8 @ r6 = *r7, r7 += 2 - cmp r6, #0 @ !r6? - beq .cleanup @ r6? - cmp r6, #3 @ is AT_PHDR? - beq .replace_phdr @ replace - cmp r6, #4 @ is AT_PHENT? - beq .replace_phent @ replace - cmp r6, #5 @ is AT_PHNUM? - beq .replace_phnum @ replace - cmp r6, #9 @ is AT_ENTRY? - beq .replace_entry @ replace - cmp r6, #7 @ is AT_BASE? - beq .replace_base @ replace - b .one_auxv @ next auxv -.replace_phdr: - ldr r6, [r8, #20] @ at_phdr - str r6, [r7, #-4] @ store value - b .one_auxv -.replace_phent: - ldr r6, [r8, #12] @ at_phent - str r6, [r7, #-4] @ store value - b .one_auxv -.replace_phnum: - ldr r6, [r8, #16] @ at_phnum - str r6, [r7, #-4] @ store value - b .one_auxv -.replace_entry: - ldr r6, [r8, #8] @ at_entry - str r6, [r7, #-4] @ store value - b .one_auxv -.replace_base: - ldr r6, [r8, #24] @ at_base - str r6, [r7, #-4] @ store value - b .one_auxv -.cleanup: + ldr r6, [r8, #28] @ length of string + add r6, r6, #1 +skip_environ: +1: ldr r1, [r7], #4 @ r1 = *r7++ + tst r1, r1 @ r1 + bne 1b @ r1 +1: ldm r7!, {r0, r1} @ a_type, a_un.a_val + tst r0, r0 + bne 1b @ a_type -> 1b + @@ Establish the number of bytes in the argument, environment, + @@ and auxiliary vectors to be moved. + sub r5, r7, r9 @ r5 = bytes in vectors + @@ Expand r7 with sufficient space for the filename and align + @@ it. + sub r4, r7, r5 + and r4, r4, #-8 @ r4 = address of AT_EXECFN + sub r3, r4, r5 @ r4 - number of bytes in vectors + and r3, r3, #-16 @ r3 = position of new argc + @@ Reserve an area that is guaranteed not to be clobbered into + @@ which to copy the command and file name. + mov r2, r3 + cmp r2, r8 + blo 1f + mov r2, r8 +1: sub r2, r2, #24 @ space for data + @@ [r2, #0] = entry + @@ [r2, #4] = at_entry + @@ [r2, #8] = at_phent + @@ [r2, #12] = at_phnum + @@ [r2, #16] = at_phdr + @@ [r2, #20] = at_base + add r7, r8, #4 @ &cmd->entry + ldm r7!, {r0, r1} + stm r2!, {r0, r1} + ldm r7!, {r0, r1} + stm r2!, {r0, r1} + ldm r7!, {r0, r1} + stm r2!, {r0, r1} + sub r2, r2, #24 + sub r0, r2, r6 @ r0 = copy of AT_EXECFN + add r1, r8, #32 @ src + add r5, r1, r6 @ src end + cmp r1, r5 + bcs copy_env_and_args +1: ldrb r7, [r1], #1 + strb r7, [r0], #1 + cmp r1, r5 + blo 1b +copy_env_and_args: + mov r5, r3 +1: ldr r0, [r9], #4 @ argc and arguments + str r0, [r5], #4 @ *dst = ... + tst r0, r0 + bne 1b +1: ldr r0, [r9], #4 @ environment string + str r0, [r5], #4 @ *dst = ... + tst r0, r0 + bne 1b +copy_auxv: + ldm r9!, {r0, r1} @ a_type, a_un.a_val + tst r0, r0 @ AT_NULL + beq 8f + cmp r0, #3 @ AT_PHDR + beq 2f + cmp r0, #4 @ AT_PHENT + beq 3f + cmp r0, #5 @ AT_PHNUM + beq 4f + cmp r0, #9 @ AT_ENTRY + beq 5f + cmp r0, #7 @ AT_BASE + beq 6f + cmp r0, #31 @ AT_EXECFN + beq 7f +1: stm r5!, {r0, r1} + b copy_auxv +2: ldr r1, [r2, #16] + b 1b +3: ldr r1, [r2, #8] + b 1b +4: ldr r1, [r2, #12] + b 1b +5: ldr r1, [r2, #4] + b 1b +6: ldr r1, [r2, #20] + b 1b +7: mov r1, r4 + b 1b +8: + stm r5!, {r0, r1} +cleanup: + @@ Copy the filename. + sub r0, r2, r6 @ src + add r1, r0, r6 @ src end + cmp r0, r1 + bcs 2f +1: ldrb r5, [r0], #1 + strb r5, [r4], #1 @ *dst++ + cmp r0, r1 + blo 1b +2: mov r9, r3 @ replace original SP cmp r14, #-1 @ secondary fd set? - bne .cleanup1 @ not set + beq cleanup1 @ not set mov r7, #6 @ SYS_close mov r0, r14 @ secondary fd swi #0 @ syscall -.cleanup1: +cleanup1: mov r7, #6 @ SYS_close mov r0, r10 @ primary fd swi #0 @ syscall -.enter: +enter: mov sp, r9 @ restore original SP mov r0, #0 @ clear rtld_fini - ldr r1, [r8, #4] @ branch to code + ldr r1, [r2] @ branch to code bx r1 -timespec: - .long 10 - .long 10 +@@ timespec: +@@ .long 10 +@@ .long 10 @ Local Variables: @ asm-comment-char: ?@ diff --git a/exec/loader-x86.s b/exec/loader-x86.s index 5e5bb7253ab..d9cfa28f6a3 100644 --- a/exec/loader-x86.s +++ b/exec/loader-x86.s @@ -15,26 +15,29 @@ # You should have received a copy of the GNU General Public License # along with GNU Emacs. If not, see . +/* Sorry! This program is a hopeless shambles in consequence of + being hastily written in under twenty minutes with minimal testing. */ + .section .text .global _start _start: -# movl $162, %eax # SYS_nanosleep -# leal timespec, %ebx -# xorl %ecx, %ecx -# int $0x80 + ## movl $162, %eax # SYS_nanosleep + ## leal timespec, %ebx + ## xorl %ecx, %ecx + ## int $0x80 leal 8(%esp), %ebp # ebp = start of load area subl $8, %esp # (%esp) = primary fd, 4(%esp) = secondary fd movl $-1, 4(%esp) -.next_action: +next_action: movl (%ebp), %edx # edx = action number andl $-17, %edx cmpl $0, %edx # open file? - je .open_file + je open_file cmpl $3, %edx # jump? - je .rest_of_exec + je rest_of_exec cmpl $4, %edx # anonymous mmap? - je .do_mmap_anon -.do_mmap: + je do_mmap_anon +do_mmap: subl $24, %esp movl $90, %eax # SYS_old_mmap movl %esp, %ebx @@ -52,27 +55,27 @@ _start: movl %ecx, 16(%esp) # fd movl 8(%ebp), %ecx # offset movl %ecx, 20(%esp) -.do_mmap_1: +do_mmap_1: int $0x80 addl $24, %esp # restore esp cmpl $-1, %eax # mmap failed? - je .perror + je perror movl 24(%ebp), %ecx # clear testl %ecx, %ecx - jz .continue + jz continue movl 4(%ebp), %esi # start of mapping addl 16(%ebp), %esi # end of mapping subl %ecx, %esi # start of clear area -.again: +again: testl %ecx, %ecx - jz .continue + jz continue subl $1, %ecx movb $0, (%esi, %ecx, 1) - jmp .again -.continue: + jmp again +continue: leal 28(%ebp), %ebp - jmp .next_action -.do_mmap_anon: + jmp next_action +do_mmap_anon: subl $24, %esp movl $90, %eax # SYS_old_mmap movl %esp, %ebx @@ -87,8 +90,8 @@ _start: movl $-1, 16(%esp) # fd movl 8(%ebp), %ecx # offset movl %ecx, 20(%esp) - jmp .do_mmap_1 -.open_file: + jmp do_mmap_1 +open_file: movl $5, %eax # SYS_open leal 4(%ebp), %ebx # ebx = %esp + 8 pushl %ebx @@ -96,27 +99,27 @@ _start: xorl %edx, %edx # mode = 0 int $0x80 cmpl $-1, %eax # open failed? - jle .perror + jle perror movl %ebp, %esi # (esi) = original action number popl %ebp # ebp = start of string movl %ebp, %ecx # char past separator decl %ebp -.nextc: +nextc: incl %ebp movb (%ebp), %dl # dl = *ebp cmpb $47, %dl # dl == '\?'? - jne .nextc1 + jne nextc1 leal 1(%ebp), %ecx # ecx = char past separator -.nextc1: +nextc1: cmpb $0, %dl # dl == 0? - jne .nextc + jne nextc addl $4, %ebp # adjust past ebp prior to rounding andl $-4, %ebp # round ebp up to the next long testl $16, (%esi) # original action number & 16? - jz .primary + jz primary movl %eax, 4(%esp) # secondary fd = eax - jmp .next_action -.primary: + jmp next_action +primary: pushl %ebp xorl %esi, %esi # arg3 movl %eax, 4(%esp) # primary fd = eax @@ -127,74 +130,168 @@ _start: xorl %ebp, %ebp # arg5 int $0x80 # syscall popl %ebp - jmp .next_action -.perror: + jmp next_action +perror: movl %eax, %ebx negl %ebx movl $1, %eax int $0x80 -.rest_of_exec: +rest_of_exec: movl 8(%esp), %ecx # ecx = original stack pointer movl (%ecx), %esi # esi = argc leal 8(%ecx, %esi, 4), %ecx # ecx = start of environ -.skip_environ: + movl (%esp), %eax # %eax = primary fd + movl 4(%esp), %edi # %edi = secondary fd +skip_environ: movl (%ecx), %esi # envp[N] addl $4, %ecx testl %esi, %esi # envp[n] ? - jnz .skip_environ # otherwise, esi is now at the start of auxv -.one_auxv: - movl (%ecx), %esi # auxv type + jnz skip_environ # otherwise, ecx is now at the end of auxv +1: testl $-1, (%ecx) # auxv type leal 8(%ecx), %ecx # skip to next auxv - testl %esi, %esi # is 0? - jz .cleanup - cmpl $3, %esi # is AT_PHDR - je .replace_phdr - cmpl $4, %esi # is AT_PHENT? - je .replace_phent - cmpl $5, %esi # is AT_PHNUM? - je .replace_phnum - cmpl $9, %esi # is AT_ENTRY? - je .replace_entry - cmpl $7, %esi # is AT_BASE - je .replace_base - jmp .one_auxv -.replace_phdr: - movl 20(%ebp), %esi + jnz 1b # otherwise copy auxv + movl %ecx, %edx # end of auxv + /* Prepare sufficient space for the new executable name at the + start of the auxiliary vector. */ +1: leal 32(%ebp), %esi # file name + /* 28(%ebp) = file name length. */ + subl 28(%ebp), %ecx # destination of file name + decl %ecx + /* This is still 16 bytes on i386--see arch_align_stack: + https://android.googlesource.com/kernel/goldfish/+/refs/heads + /android-goldfish-3.10/arch/x86/kernel/process.c#446. */ + andl $-16, %ecx # align stack + /* Prepare to store the auxiliary, environment, and argument + vectors. */ + subl 8(%esp), %edx # end of auxv to start of stack + negl %edx + andl $-16, %edx # align value + movl %ecx, (%ebp) # temporarily save ecx + addl %edx, %ecx # %ecx = new position of argc + /* Allocate a temporary stack away from any crucial data in which + to store parameters and temporaries. */ + cmpl %ecx, %ebp # select position of temporary stack + movl %ecx, %ebx # ebx = temporary stack + jge 1f # %ebx = MIN (%ecx, %edx) + movl %ebp, %ebx # ebx = temporary stack +1: movl (%ebp), %edx # edx = destination of file name + movl %edx, -4(%ebx) # -4(%ebx) = destination of file name + movl 28(%ebp), %edx # file name length + movl %edx, -8(%ebx) # -8(%ebx) = file name length + movl %ecx, -12(%ebx) # -12(%ebx) = new position of argc + movl %esi, -16(%ebx) # -16(%ebx) = file name + movl 8(%esp), %edx # %edx = initial stack pointer + leal -16(%ebx), %esp # switch to temporary stack + /* Push parameters of `struct exec_jump_command'. */ + push %edx # initial stack pointer -20(%ebx) + push 4(%ebp) # entry -24(%ebx) + push 8(%ebp) # at_entry -28(%ebx) + push 12(%ebp) # at_phent -32(%ebx) + push 16(%ebp) # at_phnum -36(%ebx) + push 20(%ebp) # at_phdr -40(%ebx) + push 24(%ebp) # at_base -44(%ebx) + /* Push primary and secondary fds. */ + push %eax # primary fd -48(%ebx) + push %edi # secondary fd -52(%ebx) + /* Swap %ebp with %ebx. */ + push %ebp + push %ebx + pop %ebp + pop %ebx # ebx is the exec_jump_command + /* Save the string lest it should be overwritten while + the environment is moved. */ + movl -8(%ebp), %ecx + subl $4, %esp # -56(%ebp) + subl %ecx, %esp + leal -1(%esp), %edi + movl %edi, -56(%ebp) # copy of string + incl %ecx + movl %edi, %esp + cld + rep movsb # complete copy + andl $-4, %esp # align stack + movl -12(%ebp), %ecx + /* Begin moving the argument vectors and environment from + the original SP to the adjusted one. */ +1: movl (%edx), %eax # argc and values + movl %eax, (%ecx) + leal 4(%ecx), %ecx + leal 4(%edx), %edx + testl %eax, %eax + jnz 1b +1: movl (%edx), %eax # envp + movl %eax, (%ecx) + leal 4(%ecx), %ecx + leal 4(%edx), %edx + testl %eax, %eax + jnz 1b +copy_auxv: + movl (%edx), %eax # a_type + movl 4(%edx), %esi # a_un.a_val + testl %eax, %eax + leal 8(%edx), %edx + movl %eax, (%ecx) # copy auxv type + leal 8(%ecx), %ecx + jz cleanup # AT_NULL + cmpl $3, %eax # AT_PHDR + jz 1f + cmpl $4, %eax # AT_PHENT + jz 2f + cmpl $5, %eax # AT_PHNUM + jz 3f + cmpl $9, %eax # AT_ENTRY + jz 4f + cmpl $7, %eax # AT_BASE + jz 5f + cmpl $31, %eax # AT_EXECFN + jz 6f + movl %esi, -4(%ecx) + jmp copy_auxv +1: movl -40(%ebp), %esi + movl %esi, -4(%ecx) + jmp copy_auxv +2: movl -32(%ebp), %esi movl %esi, -4(%ecx) - jmp .one_auxv -.replace_phent: - movl 12(%ebp), %esi + jmp copy_auxv +3: movl -36(%ebp), %esi movl %esi, -4(%ecx) - jmp .one_auxv -.replace_phnum: - movl 16(%ebp), %esi + jmp copy_auxv +4: movl -28(%ebp), %esi movl %esi, -4(%ecx) - jmp .one_auxv -.replace_entry: - movl 8(%ebp), %esi + jmp copy_auxv +5: movl -44(%ebp), %esi movl %esi, -4(%ecx) - jmp .one_auxv -.replace_base: - movl 24(%ebp), %esi + jmp copy_auxv +6: movl -4(%ebp), %esi # Note: the filename is yet to be copied. movl %esi, -4(%ecx) - jmp .one_auxv -.cleanup: + jmp copy_auxv +cleanup: + movl $0, -4(%ecx) # AT_NULL value + /* Copy data for AT_EXECFN to the destination address. */ + movl -4(%ebp), %edi + movl -56(%ebp), %esi + movl -8(%ebp), %ecx + incl %ecx + rep movsb movl $6, %eax # SYS_close - cmpl $-1, 4(%esp) # see if interpreter fd is set - je .cleanup_1 - movl 4(%esp), %ebx + cmpl $-1, -52(%ebp) # see if interpreter fd is set + je cleanup_1 + movl -52(%ebp), %ebx int $0x80 movl $6, %eax # SYS_close -.cleanup_1: - movl (%esp), %ebx +cleanup_1: + movl -48(%ebp), %ebx int $0x80 -.enter: +enter: pushl $0 popfl # restore floating point state - movl 8(%esp), %esp # restore initial stack pointer + movl -12(%ebp), %esp # restore initial stack pointer xorl %edx, %edx # clear rtld_fini - jmpl *4(%ebp) # entry + jmpl *-24(%ebp) # entry +## timespec: +## .long 10 +## .long 10 -timespec: - .long 10 - .long 10 +# Local Variables: +# asm-comment-char: ?# +# End: diff --git a/exec/loader-x86_64.s b/exec/loader-x86_64.s index 0854df98db9..236f8d6670f 100644 --- a/exec/loader-x86_64.s +++ b/exec/loader-x86_64.s @@ -25,17 +25,17 @@ _start: popq %r13 # original SP popq %r15 # size of load area. movq $-1, %r12 # r12 is the interpreter fd -.next_action: +next_action: movq (%rsp), %r14 # action number movq %r14, %r15 # original action number andq $-17, %r14 cmpq $0, %r14 # open file? - je .open_file + je open_file cmpq $3, %r14 # jump? - je .rest_of_exec + je rest_of_exec cmpq $4, %r14 # anonymous mmap? - je .do_mmap_anon -.do_mmap: + je do_mmap_anon +do_mmap: movq $9, %rax # SYS_mmap movq 8(%rsp), %rdi # address movq 16(%rsp), %r9 # offset @@ -46,26 +46,26 @@ _start: testq $16, %r15 movq %r12, %r8 cmovzq %rbx, %r8 -.do_mmap_1: +do_mmap_1: syscall cmpq $-1, %rax # mmap failed - je .perror + je perror movq 48(%rsp), %r9 # clear testq %r9, %r9 - jz .continue + jz continue movq 8(%rsp), %r10 # start of mapping addq 32(%rsp), %r10 # end of mapping subq %r9, %r10 # start of clear area -.again: +again: testq %r9, %r9 - jz .continue + jz continue subq $1, %r9 movb $0, (%r10, %r9, 1) - jmp .again -.continue: + jmp again +continue: leaq 56(%rsp), %rsp - jmp .next_action -.do_mmap_anon: + jmp next_action +do_mmap_anon: movq $9, %rax # SYS_mmap movq 8(%rsp), %rdi # address movq 16(%rsp), %r9 # offset @@ -73,35 +73,35 @@ _start: movq 32(%rsp), %rsi # length movq 40(%rsp), %r10 # flags movq $-1, %r8 # -1 - jmp .do_mmap_1 -.open_file: + jmp do_mmap_1 +open_file: movq $2, %rax # SYS_open leaq 8(%rsp), %rdi # rdi = %rsp + 8 xorq %rsi, %rsi # flags = O_RDONLY xorq %rdx, %rdx # mode = 0 syscall cmpq $-1, %rax # open failed - jle .perror + jle perror movq %rdi, %rsp # rsp = start of string subq $1, %rsp movq %rsp, %r14 # r14 = start of string -.nextc: +nextc: addq $1, %rsp movb (%rsp), %dil # rdi = *rsp cmpb $47, %dil # *rsp == '/'? - jne .nextc1 + jne nextc1 movq %rsp, %r14 # r14 = rsp addq $1, %r14 # r14 = char past separator -.nextc1: +nextc1: cmpb $0, %dil # *rsp == 0? - jne .nextc + jne nextc addq $8, %rsp # adjust past rsp prior to rounding andq $-8, %rsp # round rsp up to the next quad testq $16, %r15 # r15 & 16? - jz .primary + jz primary movq %rax, %r12 # otherwise, move fd to r12 - jmp .next_action -.primary: + jmp next_action +primary: movq %rax, %rbx # if not, move fd to rbx movq $157, %rax # SYS_prctl movq $15, %rdi # PR_SET_NAME @@ -111,82 +111,159 @@ _start: xorq %r8, %r8 # arg4 xorq %r9, %r9 # arg5 syscall - jmp .next_action -.perror: + jmp next_action +perror: movq %rax, %r12 # error code negq %r12 movq $1, %rax # SYS_write movq $1, %rdi # stdout leaq error(%rip), %rsi # buffer - movq $23, %rdx # count + movq $24, %rdx # count syscall movq $60, %rax # SYS_exit movq %r12, %rdi # code syscall -.rest_of_exec: # rsp now points to six quads: +rest_of_exec: # rsp now points to seven quads + string: movq %rsp, %r8 # now, they are r8 movq %r13, %rsp # restore SP popq %r10 # argc leaq 8(%rsp,%r10,8), %rsp # now at start of environ -.skip_environ: - popq %r10 # envp[N] - testq %r10, %r10 # envp[n]? - jnz .skip_environ # otherwise, rsp is now at the start of auxv -.one_auxv: - popq %rcx # auxv type - addq $8, %rsp # skip value - testq %rcx, %rcx # is 0? - jz .cleanup - cmpq $3, %rcx # is AT_PHDR? - je .replace_phdr - cmpq $4, %rcx # is AT_PHENT? - je .replace_phent - cmpq $5, %rcx # is AT_PHNUM? - je .replace_phnum - cmpq $9, %rcx # is AT_ENTRY? - je .replace_entry - cmpq $7, %rcx # is AT_BASE? - je .replace_base - jmp .one_auxv -.replace_phdr: - movq 40(%r8), %r9 - movq %r9, -8(%rsp) # set at_phdr - jmp .one_auxv -.replace_phent: - movq 24(%r8), %r9 - movq %r9, -8(%rsp) # set at_phent - jmp .one_auxv -.replace_phnum: - movq 32(%r8), %r9 - movq %r9, -8(%rsp) # set at_phnum - jmp .one_auxv -.replace_entry: - movq 16(%r8), %r9 - movq %r9, -8(%rsp) # set at_entry - jmp .one_auxv -.replace_base: - movq 48(%r8), %r9 - movq %r9, -8(%rsp) # set at_base - jmp .one_auxv -.cleanup: +skip_environ: + popq %rcx # envp[N] + testq %rcx, %rcx # envp[n]? + jnz skip_environ # otherwise, rsp is now at the end of auxv + movq %rsp, %r11 # start of auxv +1: testq $-1, (%r11) # NULL? + leaq 16(%r11), %r11 # next entry + jnz 1b # otherwise copy auxv + /* Prepare sufficient space for the new executable name at the + start of the auxiliary vector. */ +1: leaq 64(%r8), %rsi # file name + movq 56(%r8), %r9 # name length + leaq -1(%r11), %r14 + subq %r9, %r14 # destination of file name + andq $-16, %r14 # align destination + /* Prepare to copy argv, environ and auxv. */ +1: subq %r13, %r11 # size required + addq $15, %r11 # align size + andq $-16, %r11 + negq %r11 # subtract + leaq -56(%r14,%r11,1), %r11 # %r11 = destination - struct exec_jump_command + /* Move the file name out of the way. */ + leaq 9(%rsi,%r9,1), %r10 # end of name + 8 + cmpq %r10, %r11 # end of name >= struct exec_jump_command - 8 + jae 1f # save exec command + xorq %r10, %r10 + subq %r9, %r10 + leaq -9(%r11,%r10,1), %rdi # position of new name + movq %rdi, %r10 + cld + leaq 1(%r9), %rcx # length (including termination) + rep movsb # copy file name + movq %r10, %rsi # file name + /* Preserve jump command. */ + cmpq %r8, %r11 # decide copy direction + jb 1f # copy forward + movq 48(%r8), %rax + movq %rax, 48(%r11) # %r11->at_base + movq 40(%r8), %rax + movq %rax, 40(%r11) # %r11->at_phdr + movq 32(%r8), %rax + movq %rax, 32(%r11) # %r11->at_phnum + movq 24(%r8), %rax + movq %rax, 24(%r11) # %r11->at_phent + movq 16(%r8), %rax + movq %rax, 16(%r11) # %r11->at_entry + movq 8(%r8), %rax + movq %rax, 8(%r11) # %r11->entry + movq (%r8), %rax + movq %rax, (%r11) # %r11->command + movq %r14, -8(%r11) # destination of file name + jmp copy_env_and_args +1: movq %r14, -8(%r11) # destination of file name + movq (%r8), %rax + movq %rax, (%r11) # %r11->command + movq 8(%r8), %rax + movq %rax, 8(%r11) # %r11->entry + movq 16(%r8), %rax + movq %rax, 16(%r11) # %r11->at_entry + movq 24(%r8), %rax + movq %rax, 24(%r11) # %r11->at_phent + movq 32(%r8), %rax + movq %rax, 32(%r11) # %r11->at_phnum + movq 40(%r8), %rax + movq %rax, 40(%r11) # %r11->at_phdr + movq 48(%r8), %rax + movq %rax, 48(%r11) # %r11->at_base +copy_env_and_args: + /* Copy argv and environ to their new positions. */ + leaq 8(%r13), %r10 # src + leaq 64(%r11), %rdi # dest + movq (%r13), %rcx # argc + movq %rcx, -8(%rdi) # copy argc +1: movq (%r10), %rcx + movq %rcx, (%rdi) + testq %rcx, %rcx + leaq 8(%r10), %r10 # src++ + leaq 8(%rdi), %rdi # dst++ + jnz 1b +1: movq (%r10), %rcx + movq %rcx, (%rdi) + testq %rcx, %rcx + leaq 8(%r10), %r10 # src++ + leaq 8(%rdi), %rdi # dst++ + jnz 1b +copy_auxv: + movq (%r10), %rcx # a_type + movq 8(%r10), %rdx # a_un.a_val + addq $16, %r10 # next entry + movq %rcx, (%rdi) + jrcxz cleanup # AT_NULL + cmpq $3, %rcx # AT_PHDR + cmoveq 40(%r11), %rdx # %r11->at_phdr + cmpq $4, %rcx # AT_PHENT + cmoveq 24(%r11), %rdx # %r11->at_phent + cmpq $5, %rcx # AT_PHNUM + cmoveq 32(%r11), %rdx # %r11->at_phnum + cmpq $9, %rcx # AT_ENTRY + cmoveq 16(%r11), %rdx # %r11->at_entry + cmpq $7, %rcx # AT_BASE + cmoveq 48(%r11), %rdx # %r11->at_base + cmpq $31, %rcx # AT_EXECFN + jne 1f + movq -8(%r11), %rdx # string +1: movq %rdx, 8(%rdi) # AT_NULL value + addq $16, %rdi # next entry + jmp copy_auxv +cleanup: + /* Copy the filename. */ + movq -8(%r11), %rdi # destination of file name + leaq 1(%r9), %rcx # length (including termination) + rep movsb + movq %rdx, 8(%rdi) # AT_NULL value + leaq 56(%r11), %r13 # restore original stack pointer movq $3, %rax # SYS_close cmpq $-1, %r12 # see if interpreter fd is set - je .cleanup_1 + je cleanup_1 movq %r12, %rdi syscall movq $3, %rax # SYS_close -.cleanup_1: +cleanup_1: movq %rbx, %rdi syscall -.enter: + /* Enter the program. */ pushq $0 popfq # clear FP state movq %r13, %rsp # restore SP xorq %rdx, %rdx # clear rtld_fini - jmpq *8(%r8) # entry + jmpq *-48(%rsp) # entry error: - .ascii "_start: internal error." -timespec: - .quad 10 - .quad 10 + .ascii "_start: internal error.\n" +#timespec: +# .quad 10 +# .quad 10 + +# Local Variables: +# asm-comment-char: ?# +# End: diff --git a/exec/trace.c b/exec/trace.c index ff67ed5d941..b0ec602d821 100644 --- a/exec/trace.c +++ b/exec/trace.c @@ -909,6 +909,18 @@ finish_exec (struct exec_tracee *tracee, USER_REGS_STRUCT *regs) tracee->pid, 0, 0)) goto error; + /* Enable this block to debug the executable loader. */ +#if 0 + { + int rc, wstatus; + again1: + rc = waitpid (tracee->pid, &wstatus, __WALL); + if (rc == -1 && errno == EINTR) + goto again1; + ptrace (PTRACE_DETACH, tracee->pid, 0, 0); + } +#endif /* 0 */ + error: free (tracee->exec_data); tracee->exec_data = NULL; commit f5b59a8a7318d611a04ef32f4042e3ca9bd1b315 Author: Eli Zaretskii Date: Sun Apr 13 13:03:03 2025 +0300 ; Fix last change * lisp/progmodes/elisp-mode.el (elisp-eldoc-docstring-length-limit): * etc/NEWS: Fix documentation of last change. (Bug#77628) diff --git a/etc/NEWS b/etc/NEWS index 8957534d238..1651a13e88e 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -612,10 +612,10 @@ Otherwise, if set to 'full', display the full docstring. --- *** New user option 'elisp-eldoc-docstring-length-limit'. -This user option controls maximum docstring character limit displayed by -'elisp-eldoc-funcall-with-docstring' and -'elisp-eldoc-var-docstring-with-value'. By default it is set to 1000 -characters +This user option controls the maximum length of doc strings in character +units that 'elisp-eldoc-funcall-with-docstring' and +'elisp-eldoc-var-docstring-with-value' will shopw. By default it is set +to 1000 characters. ** Buffer Menu diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el index bcd6d02ae8f..5dc6a748e31 100644 --- a/lisp/progmodes/elisp-mode.el +++ b/lisp/progmodes/elisp-mode.el @@ -1846,7 +1846,7 @@ Intended for `eldoc-documentation-functions' (which see)." 'font-lock-keyword-face))))) (defcustom elisp-eldoc-docstring-length-limit 1000 - "Maximum docstring character limit displayed by elisp eldoc functions." + "Maximum length of doc strings displayed by elisp ElDoc functions." :type 'natnum :group 'elisp :version "31.1") commit 53bd9f54c61d5edac8b04cc6b72aadb48466110e Author: Elías Gabriel Pérez Date: Mon Apr 7 23:00:20 2025 -0600 Add variable for control docstring length in elisp eldoc functions * etc/NEWS: Announce new variable. * lisp/progmodes/elisp-mode.el (elisp-eldoc-docstring-length-limit): New user option. (elisp-eldoc-funcall-with-docstring): Add "Undocumented" as docstring if the function has no docstring. (elisp-eldoc-var-docstring-with-value): Use `elisp-eldoc-docstring-length-limit'. (Bug#77628) diff --git a/etc/NEWS b/etc/NEWS index 1224e17c17f..8957534d238 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -610,6 +610,13 @@ displayed in 'elisp-eldoc-funcall-with-docstring'. If set to 'short' (the default), only display the first sentence of the docstring. Otherwise, if set to 'full', display the full docstring. +--- +*** New user option 'elisp-eldoc-docstring-length-limit'. +This user option controls maximum docstring character limit displayed by +'elisp-eldoc-funcall-with-docstring' and +'elisp-eldoc-var-docstring-with-value'. By default it is set to 1000 +characters + ** Buffer Menu --- diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el index 748d2f11360..bcd6d02ae8f 100644 --- a/lisp/progmodes/elisp-mode.el +++ b/lisp/progmodes/elisp-mode.el @@ -1845,6 +1845,12 @@ Intended for `eldoc-documentation-functions' (which see)." 'font-lock-function-name-face 'font-lock-keyword-face))))) +(defcustom elisp-eldoc-docstring-length-limit 1000 + "Maximum docstring character limit displayed by elisp eldoc functions." + :type 'natnum + :group 'elisp + :version "31.1") + (defcustom elisp-eldoc-funcall-with-docstring-length 'short "Control length of doc string shown by `elisp-eldoc-funcall-with-docstring'. If set to `short', only show the first sentence of the doc string. @@ -1861,21 +1867,26 @@ Intended for `eldoc-documentation-functions' (which see). Compared to `elisp-eldoc-funcall', this also includes the current function doc string, doc string length depends on `elisp-eldoc-funcall-with-docstring-length'." - (let* ((sym-info (elisp--fnsym-in-current-sexp)) - (fn-sym (car sym-info)) - (doc (when (fboundp fn-sym) - (propertize - (cdr (help-split-fundoc - (condition-case nil (documentation fn-sym t) - (invalid-function nil)) - fn-sym)) - 'face 'font-lock-doc-face)))) - (when fn-sym - (funcall callback + (when-let* ((sym-info (elisp--fnsym-in-current-sexp)) + (fn-sym (car sym-info)) + ((fboundp fn-sym)) + (fn-doc (or (cdr (help-split-fundoc + (condition-case nil (documentation fn-sym t) + (invalid-function nil)) + fn-sym)) + "Undocumented.")) + (more (- (length fn-doc) elisp-eldoc-docstring-length-limit)) + (doc (concat + (propertize + (string-limit fn-doc elisp-eldoc-docstring-length-limit) + 'face 'font-lock-doc-face) + (when (> more 0) + (format "[%sc more]" more))))) + (funcall callback (concat (apply #'elisp-get-fnsym-args-string sym-info) ;; Ensure not display the docstring in the ;; mode-line. - (when (and doc (not (minibufferp))) + (when (not (minibufferp)) (concat "\n" (pcase elisp-eldoc-funcall-with-docstring-length @@ -1887,7 +1898,7 @@ current function doc string, doc string length depends on :thing fn-sym :face (if (functionp fn-sym) 'font-lock-function-name-face - 'font-lock-keyword-face))))) + 'font-lock-keyword-face)))) (defun elisp-eldoc-var-docstring (callback &rest _ignored) "Document variable at point by calling CALLBACK. @@ -1915,12 +1926,12 @@ current variable value and a bigger chunk of the docstring." (symbol-value cs) (let* ((doc (documentation-property cs 'variable-documentation t)) - (more (- (length doc) 1000))) + (more (- (length doc) elisp-eldoc-docstring-length-limit))) (concat (propertize (string-limit (if (string= doc "nil") "Undocumented." doc) - 1000) + elisp-eldoc-docstring-length-limit) 'face 'font-lock-doc-face) (when (> more 0) (format "[%sc more]" more))))) commit 22b646efe3820fae4c7635e883f4ed9aad1c6cd4 Author: Eli Zaretskii Date: Sun Apr 13 12:38:04 2025 +0300 ; Fix a typo in proced.el * lisp/proced.el (proced-filter): Fix a typo. Reported by Armin Darvish . (Bug#77713) (cherry picked from commit 3a13fb2069fc861e20fca893aa64dd70dcef0de3) diff --git a/lisp/proced.el b/lisp/proced.el index a60f70c949e..429bc06e745 100644 --- a/lisp/proced.el +++ b/lisp/proced.el @@ -1185,7 +1185,7 @@ Return the filtered process list." ( ;; apply predicate to each list of attributes (eq (car filter) 'function) (dolist (process process-alist) - (if (funcall (car filter) (cdr process)) + (if (funcall (cdr filter) (cdr process)) (push process new-alist)))) (t ;; apply predicate to specified attribute (let* ((cdrfilter (cdr filter)) commit 3a13fb2069fc861e20fca893aa64dd70dcef0de3 Author: Eli Zaretskii Date: Sun Apr 13 12:38:04 2025 +0300 ; Fix a typo in proced.el * lisp/proced.el (proced-filter): Fix a typo. Reported by Armin Darvish . (Bug#77713) diff --git a/lisp/proced.el b/lisp/proced.el index 51e6f3aca4d..e68383df10e 100644 --- a/lisp/proced.el +++ b/lisp/proced.el @@ -1184,7 +1184,7 @@ Return the filtered process list." ( ;; apply predicate to each list of attributes (eq (car filter) 'function) (dolist (process process-alist) - (if (funcall (car filter) (cdr process)) + (if (funcall (cdr filter) (cdr process)) (push process new-alist)))) (t ;; apply predicate to specified attribute (let* ((cdrfilter (cdr filter)) commit c4012904fd87e158a76f9b8017684def3b206a3a Author: Eli Zaretskii Date: Sun Apr 13 12:14:27 2025 +0300 ; (url-generic-parse-url/ms-windows-file-uri-hanlding): Fix test. diff --git a/test/lisp/url/url-parse-tests.el b/test/lisp/url/url-parse-tests.el index 16c811da31b..c4c4b2fc8f8 100644 --- a/test/lisp/url/url-parse-tests.el +++ b/test/lisp/url/url-parse-tests.el @@ -185,9 +185,7 @@ (should (equal (url-recreate-url (url-parse-make-urlobj "file" nil nil nil nil "c:/path/to/file" nil nil nil)) - (if (memq system-type '(windows-nt ms-dos)) - "file:/c:/path/to/file" - "file:c:/path/to/file"))) + "file:/c:/path/to/file")) ;; accept backslashes too (should (equal (url-filename (url-generic-parse-url "file:///c:\\directory\\file.txt")) commit c76892edd28a7bfd7c303c3161d7ddf41c646541 Author: Eli Zaretskii Date: Sun Apr 13 12:12:13 2025 +0300 ; Fix last change * test/lisp/url/url-parse-tests.el (url-generic-parse-url/ms-windows-file-uri-hanlding): Reformat and fix the test on MS-Windows. diff --git a/test/lisp/url/url-parse-tests.el b/test/lisp/url/url-parse-tests.el index 8d57190ac32..16c811da31b 100644 --- a/test/lisp/url/url-parse-tests.el +++ b/test/lisp/url/url-parse-tests.el @@ -167,25 +167,35 @@ "/фыва/" nil nil t)))) (ert-deftest url-generic-parse-url/ms-windows-file-uri-hanlding () - "bug#76982 Make an exception if a URI refers to a filename and it \"looks like\" a Windows path: strip the leading /" - (should (equal (url-generic-parse-url "file:///c:/windows-path") (url-parse-make-urlobj "file" nil nil "" nil "c:/windows-path" nil nil t))) - (should (equal (url-filename (url-generic-parse-url "file:///c:/directory/file.txt")) "c:/directory/file.txt")) - (should (equal (url-recreate-url (url-parse-make-urlobj "file" nil nil "" nil "c:/directory/file.txt" nil nil t)) "file:///c:/directory/file.txt")) + "Make an exception if a file:// URI \"looks like\" a Windows file." + (should (equal (url-generic-parse-url "file:///c:/windows-path") + (url-parse-make-urlobj "file" nil nil "" nil + "c:/windows-path" nil nil t))) + (should (equal (url-filename (url-generic-parse-url + "file:///c:/directory/file.txt")) + "c:/directory/file.txt")) + (should (equal (url-recreate-url + (url-parse-make-urlobj "file" nil nil "" nil + "c:/directory/file.txt" nil nil t)) + "file:///c:/directory/file.txt")) ;; https://www.rfc-editor.org/rfc/rfc8089.html#appendix-E.2 - (should (equal (url-generic-parse-url "file:c:/path/to/file") (url-parse-make-urlobj "file" nil nil nil nil "c:/path/to/file" nil nil nil))) - (should (equal (url-recreate-url (url-parse-make-urlobj "file" nil nil nil nil "c:/path/to/file" nil nil nil)) "file:c:/path/to/file")) + (should (equal (url-generic-parse-url "file:c:/path/to/file") + (url-parse-make-urlobj "file" nil nil nil nil + "c:/path/to/file" nil nil nil))) + (should (equal (url-recreate-url + (url-parse-make-urlobj "file" nil nil nil nil + "c:/path/to/file" nil nil nil)) + (if (memq system-type '(windows-nt ms-dos)) + "file:/c:/path/to/file" + "file:c:/path/to/file"))) ;; accept backslashes too - (should (equal (url-filename (url-generic-parse-url "file:///c:\\directory\\file.txt")) "c:\\directory\\file.txt")) + (should (equal (url-filename + (url-generic-parse-url "file:///c:\\directory\\file.txt")) + "c:\\directory\\file.txt")) ;; - (should (equal (url-filename (url-generic-parse-url "file://localhost/c:/path/to/file")) "c:/path/to/file")) - ) - - - - - - - + (should (equal (url-filename + (url-generic-parse-url "file://localhost/c:/path/to/file")) + "c:/path/to/file"))) (provide 'url-parse-tests) commit fec6e16f143c08d68ad336b9039f8ed1c3cbfc05 Author: Sebastián Monía Date: Tue Apr 8 18:09:06 2025 -0400 Special treatment for file:// URIs on Windows * lisp/url/url-parse.el (url-generic-parse-url): Remove prefix / when a file URI's filename starts with a single letter followed by a colon and a slash or backslash. (url-recreate-url): Mirror the change applied when parsing, so the URL is recreated properly on MS-Windows. * test/lisp/url/url-parse-tests.el (url-generic-parse-url/ms-windows-file-uri-hanlding): New test. (Bug#76982) diff --git a/lisp/url/url-parse.el b/lisp/url/url-parse.el index 4c65721b83d..d2f49ef2c5f 100644 --- a/lisp/url/url-parse.el +++ b/lisp/url/url-parse.el @@ -83,7 +83,12 @@ If the specified port number is the default, return nil." ;; port is empty or if its value would be the same as that of ;; the scheme's default." (port (url-port-if-non-default urlobj)) - (file (url-filename urlobj)) + ;; For Windows/DOS-like paths, `url-generic-parse-url' strips + ;; the leading /, so we need to add it back (bug#76982) + (file (if (and (string= "file" type) + (string-match "^[A-Za-z]:[/\\]" (url-filename urlobj))) + (concat "/" (url-filename urlobj)) + (url-filename urlobj))) (frag (url-target urlobj))) (concat (if type (concat type ":")) (if (url-fullness urlobj) "//") @@ -190,6 +195,12 @@ parses to ;; authority) at the beginning of the absolute path. (setq save-pos (point)) + ;; For file:// URIs, if the path "looks like" Windows/DOS, + ;; it makes sense to strip the leading slash (bug#76982) + (when (and (string= "file" scheme) + (looking-at "/[A-Za-z]:[/\\]")) + (forward-char) + (setq save-pos (point))) (if (string= "data" scheme) ;; For the "data" URI scheme, all the rest is the FILE. (setq file (buffer-substring save-pos (point-max))) @@ -210,6 +221,7 @@ parses to (if (and host (string-match "%[0-9][0-9]" host)) (setq host (url-unhex-string host))) + (url-parse-make-urlobj scheme user pass host port file fragment nil full)))))) diff --git a/test/lisp/url/url-parse-tests.el b/test/lisp/url/url-parse-tests.el index e70c1eef32f..8d57190ac32 100644 --- a/test/lisp/url/url-parse-tests.el +++ b/test/lisp/url/url-parse-tests.el @@ -166,6 +166,27 @@ (url-parse-make-urlobj "http" nil nil "банки.рф" nil "/фыва/" nil nil t)))) +(ert-deftest url-generic-parse-url/ms-windows-file-uri-hanlding () + "bug#76982 Make an exception if a URI refers to a filename and it \"looks like\" a Windows path: strip the leading /" + (should (equal (url-generic-parse-url "file:///c:/windows-path") (url-parse-make-urlobj "file" nil nil "" nil "c:/windows-path" nil nil t))) + (should (equal (url-filename (url-generic-parse-url "file:///c:/directory/file.txt")) "c:/directory/file.txt")) + (should (equal (url-recreate-url (url-parse-make-urlobj "file" nil nil "" nil "c:/directory/file.txt" nil nil t)) "file:///c:/directory/file.txt")) + ;; https://www.rfc-editor.org/rfc/rfc8089.html#appendix-E.2 + (should (equal (url-generic-parse-url "file:c:/path/to/file") (url-parse-make-urlobj "file" nil nil nil nil "c:/path/to/file" nil nil nil))) + (should (equal (url-recreate-url (url-parse-make-urlobj "file" nil nil nil nil "c:/path/to/file" nil nil nil)) "file:c:/path/to/file")) + ;; accept backslashes too + (should (equal (url-filename (url-generic-parse-url "file:///c:\\directory\\file.txt")) "c:\\directory\\file.txt")) + ;; + (should (equal (url-filename (url-generic-parse-url "file://localhost/c:/path/to/file")) "c:/path/to/file")) + ) + + + + + + + + (provide 'url-parse-tests) ;;; url-parse-tests.el ends here commit 6f494d74f645d6cffd98e168721a0347de271a54 Author: Pengji Zhang Date: Sat Mar 29 19:04:58 2025 +0800 New user option to hide minor mode lighters (bug#77361) * lisp/bindings.el (mode-line-collapse-minor-modes): New user option. (mode-line-minor-modes): New variable to hold mode line constructs for minor modes. (mode-line--make-lighter-menu): New helper function to generate the menu for hidden minor modes. (mode-line--minor-modes): New helper function to computer mode line constructs for minor mode lighters. (mode-line-modes): Use the new variable 'mode-line-minor-modes', and adjust the order of elements so the indicator for hidden minor modes is shown towards the end. * doc/lispref/modes.texi (Mode Line Basics): Move the paragraph for 'mode-line-compact' from here... * doc/emacs/display.texi (Optional Mode Line): ...to here, and document the new user option. * etc/NEWS: Annouce the new user option. diff --git a/doc/emacs/display.texi b/doc/emacs/display.texi index 520d3289f2d..ad496b5b1cd 100644 --- a/doc/emacs/display.texi +++ b/doc/emacs/display.texi @@ -1811,6 +1811,21 @@ formats by setting each of the variables @code{eol-mnemonic-unix}, @code{eol-mnemonic-dos}, @code{eol-mnemonic-mac}, and @code{eol-mnemonic-undecided} to the strings you prefer. +@vindex mode-line-compact +@vindex mode-line-collapse-minor-modes + Some modes put a lot of data in the mode line, pushing elements at the +end of the mode line off to the right. Emacs can ``compress'' the mode +line if the @code{mode-line-compact} variable is non-@code{nil} by +turning stretches of spaces into a single space. If this variable is +@code{long}, this is only done when the mode line is wider than the +currently selected window. (This computation is approximate, based on +the number of characters, and not their displayed width.) This variable +can be buffer-local to only compress mode-lines in certain buffers. To +further ``compress'' the mode line, you may customize the +@code{mode-line-collapse-minor-modes} option to a non-@code{nil} value, +and Emacs will hide some minor mode indicators on the mode line by +collapsing them into a single clickable button. + @node Text Display @section How Text Is Displayed @cindex characters (in text) diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi index 788d98fdf20..0dd73fe17a8 100644 --- a/doc/lispref/modes.texi +++ b/doc/lispref/modes.texi @@ -2152,17 +2152,6 @@ windows, you can say something like: @end lisp @end defun -@vindex mode-line-compact - Some modes put a lot of data in the mode line, pushing elements at -the end of the mode line off to the right. Emacs can ``compress'' the -mode line if the @code{mode-line-compact} variable is non-@code{nil} -by turning stretches of spaces into a single space. If this variable -is @code{long}, this is only done when the mode line is wider than the -currently selected window. (This computation is approximate, based on -the number of characters, and not their displayed width.) This -variable can be buffer-local to only compress mode-lines in certain -buffers. - @node Mode Line Data @subsection The Data Structure of the Mode Line @cindex mode line construct diff --git a/etc/NEWS b/etc/NEWS index ea664e18bbe..1224e17c17f 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -322,6 +322,15 @@ This will inhibit implied resizing while a new frame is made and can be useful on tiling window managers where the initial frame size should be specified by external means. +** Mode Line + ++++ +*** New user option 'mode-line-collapse-minor-modes'. +If non-nil, minor mode lighters on the mode line are collapsed into a +single button. The value could also be a list to specify minor mode +lighters to hide or show. The default value is nil, which retains the +previous behavior of showing all minor mode lighters. + ** Tab Bars and Tab Lines --- diff --git a/lisp/bindings.el b/lisp/bindings.el index 9707ce4b474..2d6e1579e10 100644 --- a/lisp/bindings.el +++ b/lisp/bindings.el @@ -429,6 +429,126 @@ a menu, so this function is not useful for non-menu keymaps." (bindings--menu-item-string (cdr-safe b)))))) (nconc (make-sparse-keymap prompt) bindings))) +(defcustom mode-line-collapse-minor-modes nil + "Minor modes for which mode line lighters are hidden. +Hidden lighters are collapsed into one. + +The value could be a list (MODES ...) which means to collapse lighters +only for MODES, or a list (not MODES ...) which means to collapse all +lighters for minor modes not in MODES. Other non-nil values make all +lighters hidden." + :type '(choice (const :tag "No modes" nil) + (repeat :tag "Modes" symbol) + (cons :tag "All modes except" + (const not) (repeat symbol)) + (const :tag "All modes" t)) + :group 'mode-line + :version "31.1") + +(defvar mode-line-minor-modes '(:eval (mode-line--minor-modes)) + "Mode line construct for minor mode lighters.") +;;;###autoload +(put 'mode-line-minor-modes 'risky-local-variable t) + +(defun mode-line--make-lighter-menu (alist) + "Return a menu keymap for minor mode lighters in ALIST. +ALIST should be in the same format as `minor-mode-alist'. + +Return nil if no lighters in ALIST should be visible, for example, there +are no active minor modes or non-empty lighters." + (let ((menu (make-sparse-keymap "Minor Modes")) + (empty t)) + (dolist (item alist) + (when-let* ((variable (car item)) + ((and (boundp variable) + (symbol-value variable))) + (lighter (format-mode-line `("" ,@(cdr-safe item)))) + ((not (string= lighter ""))) + (toggle (or (get variable :minor-mode-function) variable)) + ;; Follow the format in `mouse-minor-mode-menu' + (name (format "%s - %s" lighter + (capitalize + (string-replace + "-" " " (symbol-name toggle)))))) + (when (eq ? (aref name 0)) + (setq name (substring name 1))) + (let* ((map (cdr-safe (assq variable minor-mode-map-alist))) + (mm-menu (and (keymapp map) + (keymap-lookup map "")))) + (setq mm-menu + (cond (mm-menu (mouse-menu-non-singleton mm-menu)) + ((fboundp toggle) + (define-keymap :name name + "" (list 'menu-item + "Help for minor mode" + (lambda () (interactive) + (describe-function toggle))) + "" (list 'menu-item + "Turn off minor mode" + toggle))) + ;; No menu and not a minor mode function, so just + ;; display the label without a sub-menu. + (t nil))) + (keymap-set menu (format "<%s>" toggle) + (list 'menu-item name mm-menu)) + (setq empty nil)))) + (and (not empty) menu))) + +(defun mode-line--minor-modes () + "Compute mode line constructs for minor mode lighters." + (let (visible hidden) + (cond + ((not mode-line-collapse-minor-modes) + (setq visible minor-mode-alist + hidden nil)) + ((eq 'not (car-safe mode-line-collapse-minor-modes)) + (let ((modes (cdr mode-line-collapse-minor-modes))) + (dolist (item minor-mode-alist) + (if (memq (car item) modes) + (push item visible) + (push item hidden))) + (setq visible (nreverse visible) + hidden (nreverse hidden)))) + ((listp mode-line-collapse-minor-modes) + (let ((modes mode-line-collapse-minor-modes)) + (dolist (item minor-mode-alist) + (if (memq (car item) modes) + (push item hidden) + (push item visible))) + (setq visible (nreverse visible) + hidden (nreverse hidden)))) + (t (setq visible nil + hidden minor-mode-alist))) + (list "" + `(:propertize ("" ,visible) + mouse-face mode-line-highlight + help-echo "Minor mode\n\ +mouse-1: Display minor mode menu\n\ +mouse-2: Show help for minor mode\n\ +mouse-3: Toggle minor modes" + local-map ,mode-line-minor-mode-keymap) + (unless (string= "" (format-mode-line `("" ,hidden))) + (let* ((menu + ;; FIXME: This is to defer the computation of the + ;; menu, but may not play well with touchscreen. + (lambda (e) + (interactive "@e") + (if-let* ((m (mode-line--make-lighter-menu hidden))) + (popup-menu m e) + (message "No menu available")))) + (keymap + (define-keymap + :parent mode-line-minor-mode-keymap + " " menu + " " #'describe-mode))) + `(:propertize ,(if (char-displayable-p ?…) " …" " ...") + mouse-face mode-line-highlight + help-echo "Hidden minor modes\n\ +mouse-1: Display hidden minor modes\n\ +mouse-2: Show help for enabled minor modes\n\ +mouse-3: Toggle minor modes" + local-map ,keymap)))))) + (defvar mode-line-major-mode-keymap (let ((map (make-sparse-keymap))) (define-key map [mode-line down-mouse-1] @@ -466,17 +586,11 @@ mouse-3: Toggle minor modes" mouse-face mode-line-highlight local-map ,mode-line-major-mode-keymap) '("" mode-line-process) - `(:propertize ("" minor-mode-alist) - mouse-face mode-line-highlight - help-echo "Minor mode\n\ -mouse-1: Display minor mode menu\n\ -mouse-2: Show help for minor mode\n\ -mouse-3: Toggle minor modes" - local-map ,mode-line-minor-mode-keymap) (propertize "%n" 'help-echo "mouse-2: Remove narrowing from buffer" 'mouse-face 'mode-line-highlight 'local-map (make-mode-line-mouse-map 'mouse-2 #'mode-line-widen)) + '("" mode-line-minor-modes) ")" (propertize "%]" 'help-echo recursive-edit-help-echo) " ")) commit e82989757f42e95bf72a2a55de415a8162a55dc3 Author: Jens Schmidt Date: Wed Apr 2 22:48:31 2025 +0200 Use a pristine copy of argv to restart Emacs argv as left after main has proccessed the command-line can differ both in order and contents of the original command-line arguments, which can lead to surprising results when restarting emacs on the cooked argv through `kill-emacs'. Starting from that observation, consistenly use variables 'initial_cmdline' on Windows, 'initial_argc', 'initial_argv' on non-Windows, and 'initial_argv0' in all ports. * src/lisp.h: Declare 'initial_argv0', limit declaration of 'initial_argv' and 'initial_argc' to non-Windows ports. * src/emacs.c: Likewise, but for the definitions. (init_cmdargs): Move initialization of 'initial_argv' and 'initial_argc' ... (copy_args) [!WINDOWSNT]: ... to this new function ... (main): ... and call that in 'main', also initializing 'initial_argv0' before the command-line processing. * src/emacs.c (Fkill_emacs): * src/pgtkterm.c (pgtk_term_init): * src/sysdep.c (emacs_perror): * src/xterm.c (x_term_init): Use 'initial_argv0' where only that is required. (Bug#77389) diff --git a/src/emacs.c b/src/emacs.c index 6ff7b632c0f..79604d09a37 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -238,14 +238,32 @@ static int daemon_pipe[2]; HANDLE w32_daemon_event; #endif -/* Save argv and argc. */ +/* Save argv and argc. + + initial_argc, initial_argv: + A pristine copy of the command-line arguments as passed into main, + saved away before main has had a chance to modify them. On + Windows, we use initial_cmdline instead. + + initial_argv0: + argv[0] as passed into main. Available on all ports. + + initial_emacs_executable: + Path to the current executable. Based on argv[0] but verified to + point to an existing executable if non-NULL. */ +#ifndef WINDOWSNT char **initial_argv; int initial_argc; +#endif +char *initial_argv0; static char *initial_emacs_executable = NULL; /* The name of the working directory, or NULL if this info is unavailable. */ char const *emacs_wd; +#ifndef WINDOWSNT +static void copy_args (int argc, char **argv); +#endif static void sort_args (int argc, char **argv); static void syms_of_emacs (void); @@ -476,9 +494,6 @@ init_cmdargs (int argc, char **argv, int skip_args, char const *original_pwd) Lisp_Object raw_name; AUTO_STRING (slash_colon, "/:"); - initial_argv = argv; - initial_argc = argc; - #ifdef WINDOWSNT /* Must use argv[0] converted to UTF-8, as it begets many standard file and directory names. */ @@ -1396,6 +1411,11 @@ android_emacs_init (int argc, char **argv, char *dump_file) init_standard_fds (); atexit (close_output_streams); +#ifndef WINDOWSNT + copy_args (argc, argv); +#endif + initial_argv0 = argv[0]; + /* Command-line argument processing. The arguments in the argv[] array are sorted in the descending @@ -2696,6 +2716,26 @@ static const struct standard_args standard_args[] = { "-kill", "--kill", -10, 0 }, }; +#ifndef WINDOWSNT + +/* Copy the elements of ARGV (assumed to have ARGC elements) and store + the copy in initial_argv. Store ARGC in initial_argc. */ + +static void +copy_args (int argc, char **argv) +{ + char **new = xmalloc ((argc + 1) * sizeof *new); + int i; + new[0] = argv[0]; + for (i = 1; i < argc; i++) + new[i] = xstrdup (argv[i]); + new[argc] = argv[argc]; + initial_argv = new; + initial_argc = argc; +} + +#endif + /* Reorder the elements of ARGV (assumed to have ARGC elements) so that the highest priority ones come first. Do not change the order of elements of equal priority. @@ -2900,7 +2940,7 @@ killed. */ error ("Unknown Emacs executable"); if (!file_access_p (initial_emacs_executable, F_OK)) - error ("Emacs executable \"%s\" can't be found", initial_argv[0]); + error ("Emacs executable \"%s\" can't be found", initial_argv0); } #endif diff --git a/src/lisp.h b/src/lisp.h index 243e8cc7f36..bca58b9c12d 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -5136,8 +5136,11 @@ extern void init_frame_once (void); extern void syms_of_frame (void); /* Defined in emacs.c. */ +#ifndef WINDOWSNT extern char **initial_argv; extern int initial_argc; +#endif +extern char *initial_argv0; extern char const *emacs_wd; #if defined (HAVE_X_WINDOWS) || defined (HAVE_PGTK) || defined (HAVE_NS) extern bool display_arg; diff --git a/src/pgtkterm.c b/src/pgtkterm.c index a2e23a5616b..3d59a239ccd 100644 --- a/src/pgtkterm.c +++ b/src/pgtkterm.c @@ -7075,7 +7075,7 @@ pgtk_term_init (Lisp_Object display_name, char *resource_name) argv[argc] = 0; argc = 0; - argv[argc++] = initial_argv[0]; + argv[argc++] = initial_argv0; if (strlen (dpy_name) != 0) { diff --git a/src/sysdep.c b/src/sysdep.c index a161b4af100..042de2acf80 100644 --- a/src/sysdep.c +++ b/src/sysdep.c @@ -2854,8 +2854,7 @@ emacs_perror (char const *message) { int err = errno; char const *error_string = emacs_strerror (err); - char const *command = (initial_argv && initial_argv[0] - ? initial_argv[0] : "emacs"); + char const *command = (initial_argv0 ? initial_argv0 : "emacs"); /* Write it out all at once, if it's short; this is less likely to be interleaved with other output. */ char buf[min (PIPE_BUF, MAX_ALLOCA)]; diff --git a/src/xterm.c b/src/xterm.c index b21efd5a2a2..18a9231e75a 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -30619,7 +30619,7 @@ x_term_init (Lisp_Object display_name, char *xrm_option, char *resource_name) argv[argc] = 0; argc = 0; - argv[argc++] = initial_argv[0]; + argv[argc++] = initial_argv0; if (! NILP (display_name)) { commit 5665b446b7a5b2f6ff4d4e7ea9b2c91e0e733c92 Author: Asher Copeland Date: Wed Apr 2 10:55:06 2025 -0700 Fix 'backward-delete-char-untabify' * lisp/simple.el (backward-delete-char-untabify): Fix behavior when there's an active region. (Bug#75042) Copyright-paperwork-exempt: yes diff --git a/lisp/simple.el b/lisp/simple.el index 7037158df8d..ee09a6f1b19 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -6601,30 +6601,36 @@ To disable this, set option `delete-active-region' to nil. Interactively, ARG is the prefix arg (default 1) and KILLP is t if a prefix arg was specified." (interactive "*p\nP") - (when (eq backward-delete-char-untabify-method 'untabify) - (let ((count arg)) - (save-excursion - (while (and (> count 0) (not (bobp))) - (if (= (preceding-char) ?\t) - (let ((col (current-column))) - (forward-char -1) - (setq col (- col (current-column))) - (insert-char ?\s col) - (delete-char 1))) - (forward-char -1) - (setq count (1- count)))))) - (let* ((skip (cond ((eq backward-delete-char-untabify-method 'hungry) " \t") - ((eq backward-delete-char-untabify-method 'all) - " \t\n\r"))) - (n (if skip - (let* ((oldpt (point)) - (wh (- oldpt (save-excursion - (skip-chars-backward skip) - (constrain-to-field nil oldpt))))) - (+ arg (if (zerop wh) 0 (1- wh)))) - arg))) - ;; Avoid warning about delete-backward-char - (with-no-warnings (delete-backward-char n killp)))) + (if (and (use-region-p) + delete-active-region + (= arg 1)) + ;; Delete the text of the region and deactivate the mark, in the + ;; same way that `delete-backward-char' does. + (with-no-warnings (delete-backward-char 1 killp)) + (when (eq backward-delete-char-untabify-method 'untabify) + (let ((count arg)) + (save-excursion + (while (and (> count 0) (not (bobp))) + (if (= (preceding-char) ?\t) + (let ((col (current-column))) + (forward-char -1) + (setq col (- col (current-column))) + (insert-char ?\s col) + (delete-char 1))) + (forward-char -1) + (setq count (1- count)))))) + (let* ((skip (cond ((eq backward-delete-char-untabify-method 'hungry) " \t") + ((eq backward-delete-char-untabify-method 'all) + " \t\n\r"))) + (n (if skip + (let* ((oldpt (point)) + (wh (- oldpt (save-excursion + (skip-chars-backward skip) + (constrain-to-field nil oldpt))))) + (+ arg (if (zerop wh) 0 (1- wh)))) + arg))) + ;; Avoid warning about delete-backward-char + (with-no-warnings (delete-backward-char n killp))))) (defun char-uppercase-p (char) "Return non-nil if CHAR is an upper-case character. commit d9ad0c953be1da33c2a7df0d5cae3358bf2b7b1a Author: Eli Zaretskii Date: Sun Apr 13 11:13:36 2025 +0300 ; Fix a typo in last change. diff --git a/lisp/progmodes/lua-ts-mode.el b/lisp/progmodes/lua-ts-mode.el index 0919369d15a..87b035e27b0 100644 --- a/lisp/progmodes/lua-ts-mode.el +++ b/lisp/progmodes/lua-ts-mode.el @@ -669,7 +669,7 @@ Calls REPORT-FN directly." (setq-local comment-start-skip "--\\s-*") (setq-local comment-end "") (setq-local block-comment-start "--[[" ) - (setq-local block-comment-end "]]")) + (setq-local block-comment-end "]]") ;; Font-lock. (setq-local treesit-font-lock-settings lua-ts--font-lock-settings) commit 4c6b1712a4d67ae40ccc087c7946de4cb14e8cc7 Author: Elías Gabriel Pérez Date: Mon Mar 31 17:58:16 2025 -0600 Add block-comment-start and block-comment-end to supported modes * lisp/emacs-lisp/lisp-mode.el (lisp-mode-variables): Add block-comment-start and block-comment-end from here... * lisp/newcomment.el (block-comment-start, block-comment-end):... * lisp/nxml/nxml-mode.el (nxml-mode):... * lisp/progmodes/c-ts-common.el (c-ts-common-comment-setup):... * lisp/progmodes/go-ts-mode.el (go-work-ts-mode):... * lisp/progmodes/js.el (js--mode-setup):... * lisp/progmodes/json-ts-mode.el (json-ts-mode):... * lisp/progmodes/lua-ts-mode.el (lua-ts-mode):... * lisp/progmodes/opascal.el (opascal-mode):... * lisp/progmodes/pascal.el (pascal-mode):... * lisp/progmodes/typescript-ts-mode.el (tsx-ts-mode):... * lisp/textmodes/css-mode.el (css-base-mode, scss-mode):... * lisp/textmodes/sgml-mode.el (sgml-mode): ... to here. (Bug#77424) diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el index 006b713ae6e..ce79393fb90 100644 --- a/lisp/emacs-lisp/lisp-mode.el +++ b/lisp/emacs-lisp/lisp-mode.el @@ -701,6 +701,8 @@ font-lock keywords will not be case sensitive." (setq-local add-log-current-defun-function #'lisp-current-defun-name) (setq-local comment-start ";") (setq-local comment-start-skip ";+ *") + (setq-local block-comment-start "#|") + (setq-local block-comment-end "|#") (setq-local comment-add 1) ;default to `;;' in comment-region (setq-local comment-column 40) (setq-local comment-use-syntax t) diff --git a/lisp/newcomment.el b/lisp/newcomment.el index 945187e863f..eb36f91104d 100644 --- a/lisp/newcomment.el +++ b/lisp/newcomment.el @@ -56,7 +56,6 @@ ;; - spill auto-fill of comments onto the end of the next line. ;; - uncomment-region with a consp (for blocks) or somehow make the ;; deletion of continuation markers less dangerous. -;; - drop block-comment- unless it's really used. ;; - uncomment-region on a subpart of a comment. ;; - support gnu-style "multi-line with space in continue". ;; - somehow allow comment-dwim to use the region even if transient-mark-mode @@ -183,9 +182,11 @@ guaranteed to be correctly ordered. It is called within `save-excursion'. Applicable at least in modes for languages like fixed-format Fortran where comments always start in column zero.") -;; ?? never set -(defvar block-comment-start nil) -(defvar block-comment-end nil) +(defvar block-comment-start nil + "String to insert to start a new block comment, or nil if no supported.") + +(defvar block-comment-end nil + "String to insert to end a new block comment, or nil if no supported.") (defvar comment-quote-nested t "Non-nil if nested comments should be quoted. diff --git a/lisp/nxml/nxml-mode.el b/lisp/nxml/nxml-mode.el index 7acc19b9058..994b2779d1a 100644 --- a/lisp/nxml/nxml-mode.el +++ b/lisp/nxml/nxml-mode.el @@ -529,6 +529,8 @@ Many aspects this mode can be customized using (setq-local comment-start-skip "") (setq-local comment-end-skip "[ \t\r\n]*-->") + (setq-local block-comment-start "") (setq-local comment-line-break-function #'nxml-newline-and-indent) (setq-local comment-quote-nested-function #'nxml-comment-quote-nested) (setq-local comment-continue "") ; avoid double-hyphens as a padding diff --git a/lisp/progmodes/c-ts-common.el b/lisp/progmodes/c-ts-common.el index 71c177788a8..26d24180e8c 100644 --- a/lisp/progmodes/c-ts-common.el +++ b/lisp/progmodes/c-ts-common.el @@ -275,6 +275,8 @@ Set up: - `comment-end' - `comment-start-skip' - `comment-end-skip' + - `block-comment-start' + - `block-comment-end' - `adaptive-fill-mode' - `adaptive-fill-first-line-regexp' - `paragraph-start' @@ -291,6 +293,8 @@ Set up: (rx (* (syntax whitespace)) (group (or (syntax comment-end) (seq (+ "*") "/"))))) + (setq-local block-comment-start "/*") + (setq-local block-comment-end "*/") (setq-local adaptive-fill-mode t) (setq-local adaptive-fill-function #'c-ts-common--adaptive-fill-prefix) ;; Always accept * or | as prefix, even if there's only one line in diff --git a/lisp/progmodes/go-ts-mode.el b/lisp/progmodes/go-ts-mode.el index c2ed501fb27..16150e7531b 100644 --- a/lisp/progmodes/go-ts-mode.el +++ b/lisp/progmodes/go-ts-mode.el @@ -679,6 +679,8 @@ what the parent of the node would be if it were a node." (setq-local comment-start "// ") (setq-local comment-end "") (setq-local comment-start-skip (rx "//" (* (syntax whitespace)))) + (setq-local block-comment-start "/*") + (setq-local block-comment-end "*/") ;; Indent. (setq-local indent-tabs-mode t diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index 69d05feb594..beda6737d41 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el @@ -3772,6 +3772,8 @@ Currently there are `js-mode' and `js-ts-mode'." (setq-local comment-start "// ") (setq-local comment-start-skip "\\(?://+\\|/\\*+\\)\\s *") (setq-local comment-end "") + (setq-local block-comment-start "/*") + (setq-local block-comment-end "*/") (setq-local fill-paragraph-function #'js-fill-paragraph) (setq-local normal-auto-fill-function #'js-do-auto-fill) diff --git a/lisp/progmodes/json-ts-mode.el b/lisp/progmodes/json-ts-mode.el index 1b8f033e97a..c13e2e7f956 100644 --- a/lisp/progmodes/json-ts-mode.el +++ b/lisp/progmodes/json-ts-mode.el @@ -137,6 +137,8 @@ Return nil if there is no name or if NODE is not a defun node." (setq-local comment-start "// ") (setq-local comment-start-skip "\\(?://+\\|/\\*+\\)\\s *") (setq-local comment-end "") + (setq-local block-comment-start "/*") + (setq-local block-comment-end "*/") ;; Electric (setq-local electric-indent-chars diff --git a/lisp/progmodes/lua-ts-mode.el b/lisp/progmodes/lua-ts-mode.el index cec7eae879f..0919369d15a 100644 --- a/lisp/progmodes/lua-ts-mode.el +++ b/lisp/progmodes/lua-ts-mode.el @@ -668,6 +668,8 @@ Calls REPORT-FN directly." (setq-local comment-start "--") (setq-local comment-start-skip "--\\s-*") (setq-local comment-end "") + (setq-local block-comment-start "--[[" ) + (setq-local block-comment-end "]]")) ;; Font-lock. (setq-local treesit-font-lock-settings lua-ts--font-lock-settings) diff --git a/lisp/progmodes/opascal.el b/lisp/progmodes/opascal.el index bd6bc3b28ac..9dcaff9645e 100644 --- a/lisp/progmodes/opascal.el +++ b/lisp/progmodes/opascal.el @@ -1767,7 +1767,9 @@ Coloring: (setq-local comment-start "// ") (setq-local comment-start-skip "\\(?://\\|(\\*\\|{\\)[ \t]*") - (setq-local comment-end-skip "[ \t]*\\(?:\n\\|\\*)\\|}\\)")) + (setq-local comment-end-skip "[ \t]*\\(?:\n\\|\\*)\\|}\\)") + (setq-local block-comment-start "(*") + (setq-local block-comment-end "*)")) (provide 'opascal) ;;; opascal.el ends here diff --git a/lisp/progmodes/pascal.el b/lisp/progmodes/pascal.el index b6316d4dfe1..113cf68c8d6 100644 --- a/lisp/progmodes/pascal.el +++ b/lisp/progmodes/pascal.el @@ -348,6 +348,8 @@ See also the user variables `pascal-type-keywords', `pascal-start-keywords' and (setq-local comment-start "{") (setq-local comment-start-skip "(\\*+ *\\|{ *") (setq-local comment-end "}") + (setq-local block-comment-start "(*") + (setq-local block-comment-end "*)") (add-hook 'completion-at-point-functions 'pascal-completions-at-point nil t) ;; Font lock support (setq-local font-lock-defaults '(pascal-font-lock-keywords nil t)) diff --git a/lisp/progmodes/typescript-ts-mode.el b/lisp/progmodes/typescript-ts-mode.el index bc4b635735f..69191a694ed 100644 --- a/lisp/progmodes/typescript-ts-mode.el +++ b/lisp/progmodes/typescript-ts-mode.el @@ -652,6 +652,8 @@ at least 3 (which is the default value)." ;; Comments. (setq-local comment-start "// ") (setq-local comment-end "") + (setq-local block-comment-start "/*") + (setq-local block-comment-end "*/") (setq-local comment-start-skip (rx (or (seq "/" (+ "/")) (seq "/" (+ "*"))) (* (syntax whitespace)))) diff --git a/lisp/textmodes/css-mode.el b/lisp/textmodes/css-mode.el index 765589593cd..cfb8ff51760 100644 --- a/lisp/textmodes/css-mode.el +++ b/lisp/textmodes/css-mode.el @@ -1853,6 +1853,8 @@ implementations: `css-mode' and `css-ts-mode'." (setq-local comment-start-skip "/\\*+[ \t]*") (setq-local comment-end "*/") (setq-local comment-end-skip "[ \t]*\\*+/") + (setq-local block-comment-start "/*") + (setq-local block-comment-end "*/") (setq-local electric-indent-chars (append css-electric-keys electric-indent-chars)) ;; The default "." creates ambiguity with class selectors. @@ -2076,6 +2078,8 @@ be used to fill comments. "Major mode to edit \"Sassy CSS\" files." (setq-local comment-start "// ") (setq-local comment-end "") + (setq-local block-comment-start "/*") + (setq-local block-comment-end "*/") (setq-local comment-continue " *") (setq-local comment-start-skip "/[*/]+[ \t]*") (setq-local comment-end-skip "[ \t]*\\(?:\n\\|\\*+/\\)") diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el index 2accd31bc36..4dbc6839c68 100644 --- a/lisp/textmodes/sgml-mode.el +++ b/lisp/textmodes/sgml-mode.el @@ -622,6 +622,8 @@ Do \\[describe-key] on the following bindings to discover what they do. (setq-local indent-line-function #'sgml-indent-line) (setq-local comment-start "") + (setq-local block-comment-start "") (setq-local comment-indent-function #'sgml-comment-indent) (setq-local comment-line-break-function #'sgml-comment-indent-new-line) (setq-local skeleton-further-elements '((completion-ignore-case t))) commit 158cf528c4aa690be84f9d1c3bc96b750e8b37b3 Author: Stephane Zermatten Date: Mon Mar 31 16:41:08 2025 +0300 Fix term.el bug with very short multibyte character chunk Before this change, a chunk containing only a part of a multibyte character would be discarded and displayed undecoded on the terminal. * lisp/term.el (term-emulate-terminal): Fix handling chunks with part of a multibyte character. (Bug#77410) * test/lisp/term-tests.el (term-decode-partial) (term-undecodable-input): Fix and enhance tests. Copyright-paperwork-exempt: yes diff --git a/lisp/term.el b/lisp/term.el index 862103d88e6..a971300c055 100644 --- a/lisp/term.el +++ b/lisp/term.el @@ -3116,7 +3116,7 @@ See `term-prompt-regexp'." (- count 1 partial))) 'eight-bit)) (incf partial)) - (when (> count partial 0) + (when (> partial 0) (setq term-terminal-undecoded-bytes (substring decoded-substring (- partial))) (setq decoded-substring diff --git a/test/lisp/term-tests.el b/test/lisp/term-tests.el index 5ef8c1174df..ffb341f3b52 100644 --- a/test/lisp/term-tests.el +++ b/test/lisp/term-tests.el @@ -402,17 +402,18 @@ This is a reduced example from GNU nano's initial screen." (ert-deftest term-decode-partial () ;; Bug#25288. "Test multibyte characters sent into multiple chunks." ;; Set `locale-coding-system' so test will be deterministic. - (let* ((locale-coding-system 'utf-8-unix) - (string (make-string 7 ?ш)) - (bytes (encode-coding-string string locale-coding-system))) - (should (equal string - (term-test-screen-from-input - 40 1 `(,(substring bytes 0 (/ (length bytes) 2)) - ,(substring bytes (/ (length bytes) 2)))))))) + (let ((locale-coding-system 'utf-8-unix)) + (should (equal "шшш" (term-test-screen-from-input + 40 1 '("\321" "\210\321\210\321\210")))) + (should (equal "шшш" (term-test-screen-from-input + 40 1 '("\321\210\321" "\210\321\210")))) + (should (equal "шшш" (term-test-screen-from-input + 40 1 '("\321\210\321\210\321" "\210")))))) + (ert-deftest term-undecodable-input () ;; Bug#29918. "Undecodable bytes should be passed through without error." (let* ((locale-coding-system 'utf-8-unix) ; As above. - (bytes "\376\340\360\370") + (bytes "\376\340\360\370.") (string (decode-coding-string bytes locale-coding-system))) (should (equal string (term-test-screen-from-input commit b0d6fe1449fbd32c01d69174f552d6884337a809 Author: Eli Zaretskii Date: Sun Apr 13 10:44:55 2025 +0300 Disable clearing echo-area when 'inhibit-message' is non-nil * src/xdisp.c (clear_message): Don't clear echo-area if 'inhibit-message' is non-nil. * etc/NEWS: * doc/lispref/display.texi (Displaying Messages): Document the above change. (Bug#77257) diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index 55c6206cf4d..3b48cb93405 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi @@ -404,8 +404,10 @@ elapsed since the time the first message was emitted. @defvar inhibit-message When this variable is non-@code{nil}, @code{message} and related functions -will not display any messages in the Echo Area. Echo-area messages -are still logged in the @file{*Messages*} buffer, though. +will not display any messages in the Echo Area, and will also not clear +previous echo-area messages when @code{message} is called with a +@code{nil} or an empty argument. Echo-area messages are still logged in +the @file{*Messages*} buffer, though. @end defvar @defmac with-temp-message message &rest body diff --git a/etc/NEWS b/etc/NEWS index b3fca97ce7f..ea664e18bbe 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2154,6 +2154,12 @@ provide instructions for finding the definition. New convenience function 'find-function-update-type-alist' offers a concise way to update a symbol's 'find-function-type-alist' property. ++++ +** 'inhibit-message' can now inhibit clearing of the echo-area. +Binding 'inhibit-message' to a non-nil value will now suppress both +the display of messages and the clearing of the echo-area, such as +caused by calling 'message' with a nil argument. + ** Special Events +++ diff --git a/src/xdisp.c b/src/xdisp.c index 4a0ea5778ba..dedd4bcaeea 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -13405,7 +13405,7 @@ clear_message (bool current_p, bool last_displayed_p) { Lisp_Object preserve = Qnil; - if (current_p) + if (current_p && !inhibit_message) { if (FUNCTIONP (Vclear_message_function) /* FIXME: (bug#63253) Same as for `set-message-function` above. */ commit 7b36d7295e1567f5a1b3725ddbc3a7e85079660c Author: Eli Zaretskii Date: Sun Apr 13 10:34:46 2025 +0300 ; * src/editfns.c (Freplace_region_contents): Doc fix (bug#76313). diff --git a/src/editfns.c b/src/editfns.c index 969b1205db2..227f5f0be2c 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -1929,7 +1929,9 @@ properties from adjoining text. As far as possible the replacement is non-destructive, i.e. existing buffer contents, markers, properties, and overlays in the current -buffer stay intact. +buffer stay intact. However, if point is at the end of the replaced +text, it may not be at the end of the replacement when this function +returns. Because this function can be very slow if there is a large number of differences between the two buffers, there are two optional arguments @@ -1940,14 +1942,16 @@ for comparing the buffers. If it takes longer than MAX-SECS, the function falls back to a plain `delete-region' and `insert-buffer-substring'. (Note that the checks are not performed too evenly over time, so in some cases it may run a bit longer than -allowed). +allowed). In partricular, passing zero as the value of MAX-SECS +disables the comparison step, so this function immediately falls +back to a plain delete/insert method. The optional argument MAX-COSTS defines the quality of the difference computation. If the actual costs exceed this limit, heuristics are used to provide a faster but suboptimal solution. The default value is 1000000. -Note: If the replacement is a string, it’ll usually be placed internally +Note: If the replacement is a string, it'll usually be placed internally in a temporary buffer. Therefore, all else being equal, it is preferable to pass a buffer rather than a string as SOURCE argument. commit 9f6eb6cebb619396821d426de1d2b858b0738285 Author: Sean Whitton Date: Sun Apr 13 14:38:27 2025 +0800 ; Fix replacements of old vc-annotate-parent-file * lisp/vc/vc-annotate.el (vc-annotate-working-revision) (vc-annotate-extract-revision-at-line) (vc-annotate-revision-at-line, vc-annotate-warp-revision) (vc-annotate-goto-line): Fix extracting the file name from vc-buffer-overriding-fileset. diff --git a/lisp/vc/vc-annotate.el b/lisp/vc/vc-annotate.el index e47ab426ef4..9e9d4df8cc0 100644 --- a/lisp/vc/vc-annotate.el +++ b/lisp/vc/vc-annotate.el @@ -497,7 +497,7 @@ revisions after." (interactive) (if (not (equal major-mode 'vc-annotate-mode)) (message "Cannot be invoked outside of a vc annotate buffer") - (let ((warp-rev (vc-working-revision (cadr vc-buffer-overriding-fileset)))) + (let ((warp-rev (vc-working-revision (caadr vc-buffer-overriding-fileset)))) (if (equal warp-rev vc-buffer-revision) (message "Already at revision %s" warp-rev) (vc-annotate-warp-revision warp-rev))))) @@ -510,7 +510,7 @@ Return a cons (REV . FILENAME)." 'annotate-extract-revision-at-line))) (if (or (null rev) (consp rev)) rev - (cons rev (cadr vc-buffer-overriding-fileset))))) + (cons rev (caadr vc-buffer-overriding-fileset))))) (defun vc-annotate-revision-at-line () "Visit the annotation of the revision identified in the current line." @@ -521,7 +521,7 @@ Return a cons (REV . FILENAME)." (if (not rev-at-line) (message "Cannot extract revision number from the current line") (if (and (equal (car rev-at-line) vc-buffer-revision) - (string= (cdr rev-at-line) (cadr vc-buffer-overriding-fileset))) + (string= (cdr rev-at-line) (caadr vc-buffer-overriding-fileset))) (message "Already at revision %s" rev-at-line) (vc-annotate-warp-revision (car rev-at-line) (cdr rev-at-line))))))) @@ -651,7 +651,7 @@ describes a revision number, so warp to that revision." (while (and (> revspec 0) newrev) (setq newrev (vc-call-backend vc-annotate-backend 'next-revision (or file - (cadr vc-buffer-overriding-fileset)) + (caadr vc-buffer-overriding-fileset)) newrev)) (setq revspec (1- revspec))) (unless newrev @@ -662,7 +662,7 @@ describes a revision number, so warp to that revision." (while (and (< revspec 0) newrev) (setq newrev (vc-call-backend vc-annotate-backend 'previous-revision (or file - (cadr vc-buffer-overriding-fileset)) + (caadr vc-buffer-overriding-fileset)) newrev)) (setq revspec (1+ revspec))) (unless newrev @@ -672,7 +672,7 @@ describes a revision number, so warp to that revision." (t (error "Invalid argument to vc-annotate-warp-revision"))) (when newrev (vc-annotate (or file - (cadr vc-buffer-overriding-fileset)) + (caadr vc-buffer-overriding-fileset)) newrev vc-annotate-parent-display-mode buf @@ -767,7 +767,7 @@ The annotations are relative to the current time, unless overridden by OFFSET." (widen) (line-number-at-pos))) (rev vc-buffer-revision) - (file (cadr vc-buffer-overriding-fileset))) + (file (caadr vc-buffer-overriding-fileset))) (pop-to-buffer (or (and (buffer-live-p vc-parent-buffer) vc-parent-buffer) commit f3e0bdf1b98ceeb055065766db53c0c6218840c4 Author: Stefan Monnier Date: Sat Apr 12 23:00:08 2025 -0400 lisp/subr.el (setq-local): Make local after evaluating the new value In case the evaluation needs to look at the variable's value, make sure we make it buffer-local afterwards. diff --git a/lisp/subr.el b/lisp/subr.el index fa0ab09b0e7..352e7e4caab 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -185,9 +185,10 @@ pair. ;; Can't use backquote here, it's too early in the bootstrap. (setq expr (cons - (list 'set - (list 'make-local-variable (list 'quote (car pairs))) - (car (cdr pairs))) + (list 'setq (car pairs) + (list 'prog1 + (car (cdr pairs)) + (list 'make-local-variable (list 'quote (car pairs))))) expr)) (setq pairs (cdr (cdr pairs)))) (macroexp-progn (nreverse expr)))) commit b99893af1ec373bf96c3326fa6f77740de55e621 Author: Stefan Monnier Date: Sat Apr 12 22:58:22 2025 -0400 (replace-buffer-contents): Mark as obsolete, again. * lisp/subr.el (replace-buffer-contents): Mark as obsolete, again. * src/editfns.c (Freplace_region_contents): Add interactive form. diff --git a/lisp/subr.el b/lisp/subr.el index 164ed2a6f63..fa0ab09b0e7 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -4772,6 +4772,7 @@ Interactively, prompt for SOURCE. The replacement is performed using `replace-region-contents' which also describes the MAX-SECS and MAX-COSTS arguments and the return value." + (declare (obsolete replace-region-contents "31.1")) (interactive "bSource buffer: ") (replace-region-contents (point-min) (point-max) (get-buffer source) max-secs max-costs)) diff --git a/src/editfns.c b/src/editfns.c index 669d3cdb140..969b1205db2 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -1916,7 +1916,10 @@ static bool compareseq_early_abort (struct context *); #include "diffseq.h" DEFUN ("replace-region-contents", Freplace_region_contents, - Sreplace_region_contents, 3, 6, 0, + Sreplace_region_contents, 3, 6, + "(list (if (use-region-p) (region-beginning) (point-min)) \ + (if (use-region-p) (region-end) (point-max)) \ + (get-buffer (read-buffer-to-switch \"Source buffer: \")))", doc: /* Replace the region between BEG and END with that of SOURCE. SOURCE can be a buffer, a string, or a vector [SBUF SBEG SEND] denoting the subtring SBEG..SEND of buffer SBUF. commit 356178c8e726cc4c309254b2ba1eae9c41bd2f38 Author: Stefan Monnier Date: Sat Apr 12 22:49:48 2025 -0400 savehist.el: Unbreak tests * lisp/savehist.el (savehist-loaded): Fix typo. (savehist--reload): Add compatibility with test case. diff --git a/lisp/savehist.el b/lisp/savehist.el index fa616e58672..7a0c1fe6952 100644 --- a/lisp/savehist.el +++ b/lisp/savehist.el @@ -162,7 +162,7 @@ along with minibuffer history. You can change its value off (defvar savehist-loaded nil "Whether the history has already been loaded.") -(make-obsolete-variable savehist-loaded 'savehist--file-sync-modtime "31") +(make-obsolete-variable 'savehist-loaded 'savehist--file-sync-modtime "31") (defvar savehist--file-sync-modtime nil "Modtime of the `savehist-file' when we last sync'd up with it.") @@ -209,7 +209,9 @@ histories, which is probably undesirable." "Load the history data from `savehist-file'. Be careful to do it while preserving the current history data." (when (and (file-exists-p savehist-file) - (not (equal savehist--file-sync-modtime (savehist--file-modtime)))) + (not (and savehist-loaded + (equal savehist--file-sync-modtime + (savehist--file-modtime))))) ;; FIXME: Process the file manually rather than passing it to `load'. (let ((savehist-old-minibuffer-history-variables (mapcar (lambda (s) (and (boundp s) (cons s (symbol-value s)))) commit bfeb755e03b5cab8f1f234b1a54afbcfd71f9eb2 Author: Stefan Monnier Date: Sat Apr 12 22:43:20 2025 -0400 savehist.el: Handle concurrent access to `savehist-file` * lisp/savehist.el (savehist--manage-timer): Minor simplification. (savehist-coding-system): Use `utf-8-emacs-unix` so it works even if some history entries contain chars that aren't in Unicode. (savehist-loaded): Mark it obsolete. (savehist--file-sync-modtime): New var to replace it. (savehist--file-modtime, savehist--merge): New functions. (savehist--reload): New function, extracted from `savehist-mode`. Make it merge the old history and the newly loaded one. Remember the time of sync in `savehist--file-sync-modtime`. (savehist-mode): Use it. (savehist-save): Use it as well, and set `savehist--file-sync-modtime`. (savehist--last-autosave): New var. (savehist-autosave): Use it to skip saves when not enough time has passed. diff --git a/etc/NEWS b/etc/NEWS index 95dba3fdc79..b3fca97ce7f 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -757,6 +757,12 @@ Emacs exit. ** Savehist +--- +*** The history file can be modified by external tools. +Emacs can now handle this case gracefully by merging the external +and internal history information. +This feature is activated only when 'savehist-additional-variables' is nil. + --- *** Savehist no longer saves additional variables more than once. If you configured 'savehist-additional-variables' with variables that @@ -1900,9 +1906,9 @@ This means that you can now call it with just one argument, like The following macros, previously only available in the experimental 'ert-x' module, are now considered stable and have been moved to 'ert': -- ert-with-test-buffer -- ert-with-buffer-selected -- ert-with-buffer-renamed +- 'ert-with-test-buffer' +- 'ert-with-buffer-selected' +- 'ert-with-buffer-renamed' See "(ert) Helper Functions" node in the ERT manual for more information. diff --git a/lisp/savehist.el b/lisp/savehist.el index f113024d519..fa616e58672 100644 --- a/lisp/savehist.el +++ b/lisp/savehist.el @@ -72,7 +72,11 @@ as long as `savehist-save-minibuffer-history' is non-nil. User options should be saved with the Customize interface. This list is useful for saving automatically updated variables that are not -minibuffer histories, such as `compile-command' or `kill-ring'." +minibuffer histories, such as `compile-command' or `kill-ring'. + +NOTE: If this variable is not nil, then Emacs will not try to handle +gracefully concurrent modifications to the `savehist-file', e.g. by other +Emacs sessions or other tools like file-synchronization systems." :type '(repeat variable)) (defcustom savehist-ignored-variables nil ;; '(command-history) @@ -115,8 +119,7 @@ executes in under 5 ms on my system." savehist-autosave-interval (null savehist-timer)) (setq savehist-timer - (run-with-timer savehist-autosave-interval - savehist-autosave-interval #'savehist-autosave)) + (run-with-timer savehist-autosave-interval t #'savehist-autosave)) (savehist--cancel-timer))) (defcustom savehist-autosave-interval (* 5 60) @@ -142,7 +145,7 @@ to save." ;; This should be capable of representing characters used by Emacs. ;; We prefer UTF-8 over ISO 2022 because it is well-known outside ;; Mule. -(defvar savehist-coding-system 'utf-8-unix +(defvar savehist-coding-system 'utf-8-emacs-unix "The coding system Savehist uses for saving the minibuffer history. Changing this value while Emacs is running is supported, but considered unwise, unless you know what you are doing.") @@ -158,9 +161,11 @@ along with minibuffer history. You can change its value off `savehist-save-hook' to influence which variables are saved.") (defvar savehist-loaded nil - "Whether the history has already been loaded. -This prevents toggling Savehist mode from destroying existing -minibuffer history.") + "Whether the history has already been loaded.") +(make-obsolete-variable savehist-loaded 'savehist--file-sync-modtime "31") + +(defvar savehist--file-sync-modtime nil + "Modtime of the `savehist-file' when we last sync'd up with it.") ;; Functions. @@ -197,8 +202,19 @@ histories, which is probably undesirable." :global t (if (not savehist-mode) (savehist-uninstall) - (when (and (not savehist-loaded) - (file-exists-p savehist-file)) + (savehist--reload (called-interactively-p 'interactive)) + (savehist-install))) + +(defun savehist--reload (interactively) + "Load the history data from `savehist-file'. +Be careful to do it while preserving the current history data." + (when (and (file-exists-p savehist-file) + (not (equal savehist--file-sync-modtime (savehist--file-modtime)))) + ;; FIXME: Process the file manually rather than passing it to `load'. + (let ((savehist-old-minibuffer-history-variables + (mapcar (lambda (s) (and (boundp s) (cons s (symbol-value s)))) + (cons 'savehist-minibuffer-history-variables + savehist-minibuffer-history-variables)))) (condition-case errvar (progn ;; Don't set coding-system-for-read -- we rely on the @@ -207,15 +223,43 @@ histories, which is probably undesirable." ;; we can still correctly load the old file. (let ((warning-inhibit-types '((files missing-lexbind-cookie)))) (load savehist-file nil - (not (called-interactively-p 'interactive)))) + (not interactively))) + (setq savehist--file-sync-modtime (savehist--file-modtime)) (setq savehist-loaded t)) (error ;; Don't install the mode if reading failed. Doing so would ;; effectively destroy the user's data at the next save. (setq savehist-mode nil) (savehist-uninstall) - (signal (car errvar) (cdr errvar))))) - (savehist-install))) + (signal (car errvar) (cdr errvar)))) + + ;; In case we're loading the file late, there was info in the history + ;; variables that may have been overwritten by the info extracted from + ;; the file, so put it back in. + (pcase-dolist (`(,s . ,v) savehist-old-minibuffer-history-variables) + ;; For each histvar that we knew about, make sure all the entries that + ;; were there before are still here now and in the same order. + (with-demoted-errors "%S" ;Maybe some var is not a list or something. + (set s (savehist--merge v (symbol-value s)))))))) + +(defun savehist--file-modtime () + (or (file-attribute-modification-time (file-attributes savehist-file)) + t)) + +(defun savehist--merge (old new) + "Merge the OLD history we had with the NEW history we just loaded." + ;; We don't know the relative age of the various entries in OLD and + ;; NEW; it's possible that most entries in NEW are much older than + ;; those in OLD or vice versa, or anything in-between. Maybe we should + ;; export the `lib/diffseq.h' to ELisp and use it here, but in the mean + ;; time we interleave the two lists, which should usually be tolerable. + (let ((res ())) + (while (and old new) + (push (pop old) res) ;; Keep the first element first. + (push (pop new) res)) + ;; In order to avoid problems when merging repeatedly, we want to be + ;; idempotent, i.e. (merge (merge OLD NEW) NEW) = (merge OLD NEW). + (delete-dups (nconc (nreverse res) old new)))) (defun savehist-install () "Hook Savehist into Emacs. @@ -240,6 +284,16 @@ Unbound symbols referenced in `savehist-additional-variables' are ignored. If AUTO-SAVE is non-nil, compare the saved contents to the one last saved, and don't save the buffer if they are the same." (interactive) + ;; FIXME: We don't know how to merge old and new values of those vars + ;; in `savehist-additional-variables', so only do the auto-sync + ;; if there aren't such variables. + (unless (or savehist-additional-variables + (equal savehist--file-sync-modtime (savehist--file-modtime))) + ;; The file has been changed since last time we saw it. + ;; Probably some other Emacs session. Load the corresponding info so we + ;; don't end up throwing it away by blindly overwriting it. There's + ;; still a race-condition, but hopefully less problematic. + (savehist--reload nil)) (with-temp-buffer (insert (format-message @@ -317,6 +371,12 @@ If AUTO-SAVE is non-nil, compare the saved contents to the one last saved, (insert ?\n)))))))) ;; If autosaving, avoid writing if nothing has changed since the ;; last write. + ;; Note: it may be the case that nothing changed but that the + ;; underlying file is not what we would write (because the file has been + ;; overwritten by something else, but reloading the file had no effect); + ;; the fact that we still do not autosave in this case is not a bug: + ;; without this, when several Emacs processes share the same history + ;; file, they'd keep fighting over it without ever reaching a fixpoint. (let ((checksum (md5 (current-buffer) nil nil savehist-coding-system))) (condition-case err (unless (and auto-save (equal checksum savehist-last-checksum)) @@ -335,6 +395,7 @@ If AUTO-SAVE is non-nil, compare the saved contents to the one last saved, (unless (called-interactively-p 'interactive) 'quiet))) (when savehist-file-modes (set-file-modes savehist-file savehist-file-modes)) + (setq savehist--file-sync-modtime (savehist--file-modtime)) (setq savehist-last-checksum checksum)) (file-error (unless savehist--has-given-file-warning commit 3169aeb421d1f6b2851d0fd8cedb3594071b2cef Author: Paul Eggert Date: Sat Apr 12 12:30:58 2025 -0700 ; Fix typo in comment. diff --git a/configure.ac b/configure.ac index 81a247a696c..8b26d0882f3 100644 --- a/configure.ac +++ b/configure.ac @@ -2224,7 +2224,7 @@ AC_CACHE_CHECK([for flags to work around GCC bug 58416], [AC_LANG_DEFINES_PROVIDED [/* Work around GCC bug with double in unions on x86, where the generated insns copy non-floating-point data - via fldl/fstpl instruction pairs. This can misbehave + via fldl/fstpl instruction pairs. This can misbehave if the data's bit pattern looks like a NaN. See, e.g.: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58416#c10 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71460 commit 17418125353ce998580ba8f0928ffd2c47af7df3 Author: Stefan Monnier Date: Sat Apr 12 11:11:38 2025 -0400 lisp/help.el (help-form-show): Improve last change (bug#77118) Fill the buffer from within the `with-output-to-temp-buffer`, as before. diff --git a/lisp/help.el b/lisp/help.el index a06679b31f5..5cd97897767 100644 --- a/lisp/help.el +++ b/lisp/help.el @@ -2262,13 +2262,11 @@ The `temp-buffer-window-setup-hook' hook is called." "Display the output of a non-nil `help-form'." (let ((msg (eval help-form t))) (if (stringp msg) - (let ((bufname " *Char Help*")) - (with-output-to-temp-buffer bufname) + (with-output-to-temp-buffer " *Char Help*" ;; Use `insert' instead of `princ' so that keys in `help-form' ;; are displayed with `help-key-binding' face (bug#77118). - (with-current-buffer bufname - (let (buffer-read-only) - (insert msg))))))) + (with-current-buffer standard-output + (insert msg)))))) (defun help--append-keystrokes-help (str) (let* ((keys (this-single-command-keys)) commit 2b3763e955def02d32d636df9fa955443c5e9ef9 Merge: 6221e9a66dc d3c39fb522d Author: Eli Zaretskii Date: Sat Apr 12 08:57:38 2025 -0400 Merge from origin/emacs-30 d3c39fb522d Fix display of keys in 'help-form' buffers (bug#77118) 6509cc20a9e Improve documentation of 'user-emacs-directory' 3f060597306 Update remarks on name prefixes in coding conventions e966ff9759a ; * doc/emacs/files.texi (Image Mode): Fix a typo (bug#77... 378bea99b1a ; Fix doc strings of a few Dired commands 30fb2ac07a7 ; * CONTRIBUTE: Clarify single-line commit should end wit... 417d14a95ee ; * admin/MAINTAINERS: Complete the handover of VC bb756b195a7 ; Fix typo in Tramp commit 6221e9a66dcff775385906d08cde6208f0282907 Merge: bf7bcbaa3de 684adc07c28 Author: Eli Zaretskii Date: Sat Apr 12 08:57:38 2025 -0400 ; Merge from origin/emacs-30 The following commit was skipped: 684adc07c28 ; Fix a recent backport commit bf7bcbaa3decf976e9409fe9d3fe183a6e8d6920 Author: Visuwesh Date: Mon Apr 7 15:16:38 2025 +0530 Limit fontification of "customize" in setopt suggestion * lisp/help-fns.el (help-fns--customize-variable): Limit the fontification to newly inserted text to avoid spurious fontification of other instances of the word "customize." diff --git a/lisp/help-fns.el b/lisp/help-fns.el index 6c4c3f4da97..77f1c1e678f 100644 --- a/lisp/help-fns.el +++ b/lisp/help-fns.el @@ -1589,7 +1589,9 @@ it is displayed along with the global value." ;; Make a link to customize if this variable can be customized. (when (custom-variable-p variable) (let ((customize-label "customize") - (custom-set (get variable 'custom-set))) + (custom-set (get variable 'custom-set)) + (opoint (with-current-buffer standard-output + (point)))) (princ (concat " You can " customize-label (or text " this variable."))) (when (and custom-set ;; Don't override manually written documentation. @@ -1606,7 +1608,7 @@ it is displayed along with the global value." ".")))) (with-current-buffer standard-output (save-excursion - (while (re-search-backward (concat "\\(" customize-label "\\)") nil t) + (while (re-search-backward (concat "\\(" customize-label "\\)") opoint t) (help-xref-button 1 'help-customize-variable variable)))) (terpri)))) commit 50531a00b53be7f98a763090331812aae5d3a015 Author: Eli Zaretskii Date: Sat Apr 12 14:12:05 2025 +0300 ; * etc/NEWS: Fix wording and punctuation in last added entry. diff --git a/etc/NEWS b/etc/NEWS index fce6fd3e9dc..95dba3fdc79 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1750,10 +1750,10 @@ highlight the fill-column indicators. By default this is disabled. --- ** Flymake -*** Windows without fringes now automatically use margin indicators -When flymake-indicator-type is set to 'fringes', as is now the default, +*** Windows without fringes now automatically use margin indicators. +When 'flymake-indicator-type' is set to 'fringes', as is now the default, flymake will automatically fall back to using margin indicators in -windows without fringes, including any window in a text terminal. +windows without fringes, including any window on a text terminal. * New Modes and Packages in Emacs 31.1 commit 861e7f8b60e4bf076bf5991d25a22b3a012746bd Author: Spencer Baugh Date: Tue Apr 8 08:43:37 2025 -0400 flymake: fall back to margins on text terminals Previously, flymake-indicator-type defaulted to either fringes or margins. But fringes should be used on graphical frames, and margins on TTY frames. So default to fringes instead, and simply fall back to margins automatically on text frames. * lisp/progmodes/flymake.el (flymake-indicator-type): Set to fringes. (bug#77313) (flymake-mode): Fallback to margins if there's no fringes. * doc/misc/flymake.texi (Customizable variables): Mention fallback behavior. * etc/NEWS: Announce fallback behavior. diff --git a/doc/misc/flymake.texi b/doc/misc/flymake.texi index 54835767928..668a72b4cd1 100644 --- a/doc/misc/flymake.texi +++ b/doc/misc/flymake.texi @@ -313,6 +313,9 @@ The indicator type which Flymake should use to indicate lines with errors or warnings. Depending on your preference, this can either use @code{fringes} or @code{margins} for indicating errors. +If set to @code{fringes} (the default), it will automatically fall back +to using margins in windows or frames without fringes, such as text +terminals. @item flymake-error-bitmap A bitmap used in the fringe to mark lines for which an error has diff --git a/etc/NEWS b/etc/NEWS index ad824493903..fce6fd3e9dc 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1747,6 +1747,14 @@ change their face if the current line exceeds the 'fill-column'. The new face 'display-fill-column-indicator-warning-face' is used to highlight the fill-column indicators. By default this is disabled. +--- +** Flymake + +*** Windows without fringes now automatically use margin indicators +When flymake-indicator-type is set to 'fringes', as is now the default, +flymake will automatically fall back to using margin indicators in +windows without fringes, including any window in a text terminal. + * New Modes and Packages in Emacs 31.1 diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index 6cc7e1f7a79..7340fed9be4 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -185,22 +185,23 @@ See `flymake-error-bitmap' and `flymake-warning-bitmap'." (const right-fringe) (const :tag "No fringe indicators" nil))) -(defcustom flymake-indicator-type (if (display-graphic-p) - 'fringes - 'margins) +(defcustom flymake-indicator-type 'fringes "Indicate which indicator type to use for display errors. The value can be nil (don't indicate errors but just highlight them), -fringes (use fringes) or margins (use margins) +the symbol `fringes' (use fringes) or the symbol `margins' (use +margins). Difference between fringes and margin is that fringes support displaying bitmaps on graphical displays and margins display text in a blank area from current buffer that works in both graphical and text displays. +Thus, even when `fringes' is selected, margins will still be used on +text displays and also when fringes are disabled. See Info node `Fringes' and Info node `(elisp)Display Margins'." - :version "30.1" + :version "31.1" :type '(choice (const :tag "Use Fringes" fringes) - (const :tag "Use Margins "margins) + (const :tag "Use Margins" margins) (const :tag "No indicators" nil))) (defcustom flymake-margin-indicators-string @@ -1439,6 +1440,13 @@ special *Flymake log* buffer." :group 'flymake :lighter (add-hook 'kill-buffer-hook 'flymake-kill-buffer-hook nil t) (add-hook 'eldoc-documentation-functions 'flymake-eldoc-function t t) + (when (and (eq flymake-indicator-type 'fringes) + (not (cl-case flymake-fringe-indicator-position + (left-fringe (< 0 (nth 0 (window-fringes)))) + (right-fringe (< 0 (nth 1 (window-fringes))))))) + ;; There are no fringes in the buffer, fallback to margins. + (setq-local flymake-indicator-type 'margins)) + ;; AutoResize margins. (flymake--resize-margins) commit d3c39fb522df50e460940bac10ff489564211d0a Author: Stephen Berman Date: Sat Apr 12 12:01:50 2025 +0200 Fix display of keys in 'help-form' buffers (bug#77118) * lisp/help.el (help-form-show): Use 'insert' instead of 'princ' so that keys in 'help-form' are displayed with 'help-key-binding' face. diff --git a/lisp/help.el b/lisp/help.el index 1d87c2209c8..a06679b31f5 100644 --- a/lisp/help.el +++ b/lisp/help.el @@ -2262,8 +2262,13 @@ The `temp-buffer-window-setup-hook' hook is called." "Display the output of a non-nil `help-form'." (let ((msg (eval help-form t))) (if (stringp msg) - (with-output-to-temp-buffer " *Char Help*" - (princ msg))))) + (let ((bufname " *Char Help*")) + (with-output-to-temp-buffer bufname) + ;; Use `insert' instead of `princ' so that keys in `help-form' + ;; are displayed with `help-key-binding' face (bug#77118). + (with-current-buffer bufname + (let (buffer-read-only) + (insert msg))))))) (defun help--append-keystrokes-help (str) (let* ((keys (this-single-command-keys)) commit 6509cc20a9e000033fe969fb075d6cd37831d1d1 Author: Eli Zaretskii Date: Sat Apr 12 09:52:04 2025 +0300 Improve documentation of 'user-emacs-directory' * doc/emacs/custom.texi (Find Init): Document the effect of 'user-emacs-directory' on native compilation. Advise against changing the value of 'user-emacs-directory' in init files. (Bug#77745) diff --git a/doc/emacs/custom.texi b/doc/emacs/custom.texi index 4432a0834aa..f69187ff239 100644 --- a/doc/emacs/custom.texi +++ b/doc/emacs/custom.texi @@ -2964,9 +2964,19 @@ Emacs will set @code{user-emacs-directory} to the directory it decides to use. This directory is subsequently used to look for your other user-specific Emacs files, such as @code{custom-file} (@pxref{Saving Customizations}), the saved desktop (@pxref{Saving Emacs Sessions}) and -others. The @code{--init-directory} command-line option (@pxref{Initial -Options}) overrides the value of @code{user-emacs-directory} determined -as side effect of the search for your user init file described above. +others. It is also used to compute the value of the +@code{native-comp-eln-load-path} (@pxref{Lisp Libraries}), which is +where Emacs looks for natively-compiled Lisp code and where it deposits +the newly-compiled Lisp code produced by asynchronous compilation of +packages your init files and the subsequent Emacs session load. The +@code{--init-directory} command-line option (@pxref{Initial Options}) +overrides the value of @code{user-emacs-directory} determined as side +effect of the search for your user init file described above. + +Since @code{user-emacs-directory}, once determined by Emacs, is used by +the rest of the startup code to locate other files and directories, we +do not recommend changing its value in your init files, as that could +disrupt or break the correct startup of your Emacs sessions. Although this is backward-compatible with older Emacs versions, modern POSIX platforms prefer putting your initialization files under commit 3f06059730679ef6267668e9c1d28ba78534bd56 Author: Sean Whitton Date: Sat Apr 12 11:05:45 2025 +0800 Update remarks on name prefixes in coding conventions * doc/lispref/tips.texi (Coding Conventions): Say that it's okay to put the name prefix later for defining constructs, rather than explicitly instructing the reader to do so. Condense the recommendation to err on the side of prepending the name prefix. diff --git a/doc/lispref/tips.texi b/doc/lispref/tips.texi index 7eba1c8f388..f0238276501 100644 --- a/doc/lispref/tips.texi +++ b/doc/lispref/tips.texi @@ -73,18 +73,13 @@ not meant to be used by other packages. Occasionally, for a command name intended for users to use, it is more convenient if some words come before the package's name prefix. For example, it is our convention to have commands that list objects named -as @samp{list-@var{something}}, e.g., a package called @samp{frob} -could have a command @samp{list-frobs}, when its other global symbols -begin with @samp{frob-}. Also, constructs that define functions, -variables, etc., work better if they start with @samp{define-}, so put -the name prefix later on in the name. - -This recommendation applies even to names for traditional Lisp -primitives that are not primitives in Emacs Lisp---such as -@code{copy-list}. Believe it or not, there is more than one plausible -way to define @code{copy-list}. Play it safe; append your name prefix -to produce a name like @code{foo-copy-list} or @code{mylib-copy-list} -instead. +as @samp{list-@var{something}}, e.g., a package called @samp{frob} could +have a command @samp{list-frobs}, when its other global symbols begin +with @samp{frob-}. Also, constructs that define functions, variables, +etc., may work better if they start with @samp{define-}, so it's okay to +put the name prefix later on in the name. Outside of these +well-established cases, however, err on the side of prepending your name +prefix. If you write a function that you think ought to be added to Emacs under a certain name, such as @code{twiddle-files}, don't call it by that name commit 3b841700a8bef1d5b16542679458ddfb588ea777 Author: Sean Whitton Date: Sat Apr 12 10:05:57 2025 +0800 vc-do-async-command: Ellipse later lines in multiline arguments * lisp/emacs-lisp/cl-print.el (cl-print-expand-ellipsis): Bind inhibit-read-only to t. * lisp/vc/vc-dispatcher.el (require): Require cl-print at compile time. (vc-do-async-command): When printing command arguments that contain multiple lines, use cl-prin1 with cl-print-string-length bound in order to ellipse lines other than the first. Switch the outer quotation marks to single quotation marks. diff --git a/lisp/emacs-lisp/cl-print.el b/lisp/emacs-lisp/cl-print.el index 62cda07ac73..ba699f75b71 100644 --- a/lisp/emacs-lisp/cl-print.el +++ b/lisp/emacs-lisp/cl-print.el @@ -518,7 +518,9 @@ BUTTON can also be a buffer position or nil (to mean point)." (user-error "No ellipsis to expand here"))) (let* ((end (next-single-property-change (point) 'cl-print-ellipsis)) (begin (previous-single-property-change end 'cl-print-ellipsis)) - (value (get-text-property begin 'cl-print-ellipsis))) + (value (get-text-property begin 'cl-print-ellipsis)) + ;; Ensure clicking the button works even in read only buffers. + (inhibit-read-only t)) ;; FIXME: Rather than `t' (i.e. reuse the print-length/level unchanged), ;; I think it would make sense to increase the level by 1 and to ;; double the length at each expansion step. diff --git a/lisp/vc/vc-dispatcher.el b/lisp/vc/vc-dispatcher.el index 090f5fff4a9..bd681b2c1cf 100644 --- a/lisp/vc/vc-dispatcher.el +++ b/lisp/vc/vc-dispatcher.el @@ -109,7 +109,9 @@ ;; TODO: ;; - log buffers need font-locking. -(eval-when-compile (require 'cl-lib)) +(eval-when-compile + (require 'cl-lib) + (require 'cl-print)) ;; General customization @@ -473,10 +475,22 @@ Display the buffer in some window, but don't select it." (unless (eq (point) (point-min)) (insert " \n")) (setq new-window-start (point)) - (insert "Running \"" cmd) + (insert "Running '" cmd) (dolist (flag flags) - (insert " " flag)) - (insert "\"...\n") + (let ((lines (string-lines flag))) + (insert " ") + ;; If the argument has newlines in it (as a commit + ;; message commonly will) then ellipse it down so + ;; that the whole command is more readable. + (if (cdr lines) + (let ((flag (copy-sequence flag)) + (cl-print-string-length (length + (car lines)))) + (set-text-properties 0 (length flag) nil + flag) + (cl-prin1 flag buffer)) + (insert flag)))) + (insert "'...\n") args)))) (setq proc (apply #'vc-do-command t 'async command nil args)))) (unless vc--inhibit-async-window commit cc232bd7a19dcd8b5c77320615a5e93ea0f589b6 Author: Sean Whitton Date: Sat Apr 12 10:05:29 2025 +0800 ; * etc/NEWS: Move new variables only for Lisp programmers downwards. diff --git a/etc/NEWS b/etc/NEWS index fbd23c79574..ad824493903 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1468,18 +1468,6 @@ appearance of the list can be customized with the new faces ** VC ---- -*** New buffer-local variable 'vc-buffer-overriding-fileset'. -Primarily intended for buffers not visiting files, this specifies the -VC backend and VCS-managed file name or file names to which the buffer's -contents corresponds. It overrides the behavior of 'vc-deduce-fileset'. -This replaces and generalizes the old 'vc-annotate-parent-file'. - ---- -*** New buffer-local variable 'vc-buffer-revision'. -This specifies the revision to which the buffer's contents corresponds. -This replaces and generalizes the old 'vc-annotate-parent-rev'. - --- *** Using 'e' from Log View mode to modify change comments now works for Git. @@ -1549,6 +1537,18 @@ were added, removed or edited, Emacs would refuse to proceed. Now Emacs prompts to first register the unregistered files, so that all files in the fileset are in a compatible state for a checkin. +--- +*** New buffer-local variable 'vc-buffer-overriding-fileset'. +Primarily intended for buffers not visiting files, this specifies the +VC backend and VCS-managed file name or file names to which the buffer's +contents corresponds. It overrides the behavior of 'vc-deduce-fileset'. +This replaces and generalizes the old 'vc-annotate-parent-file'. + +--- +*** New buffer-local variable 'vc-buffer-revision'. +This specifies the revision to which the buffer's contents corresponds. +This replaces and generalizes the old 'vc-annotate-parent-rev'. + ** Diff mode +++ commit 695edc5b55bec645fe2df8924513826b202022b6 Author: Juri Linkov Date: Fri Apr 11 19:34:29 2025 +0300 Rename treesit-toggle-sexp-type to treesit-cycle-sexp-type. * lisp/treesit.el (treesit-cycle-sexp-type): Rename from 'treesit-toggle-sexp-type'. Fix docstring. https://lists.gnu.org/archive/html/emacs-devel/2025-04/msg00291.html diff --git a/etc/NEWS b/etc/NEWS index 0d7746b7bab..fbd23c79574 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -537,15 +537,15 @@ This variable has no effect when Transient Mark mode is off. ** Tree-sitter -*** New command 'treesit-toggle-sexp-type'. -It toggles the type of navigation for commands that move across sexp's +*** New command 'treesit-cycle-sexp-type'. +It cycles the type of navigation for commands that move across sexp's and lists, such as 'treesit-forward-sexp', 'treesit-forward-list', 'treesit-down-list', and 'treesit-up-list'. The type can be either 'list', the default, or 'sexp'. With the default 'list' type these commands move using syntax tables for symbols and using the thing 'list' for lists. -With the 'sexp' type these commands move by tree-sitter defined parser nodes -defined by the tree-sitter thing 'sexp' as determined by 'treesit-thing-at'. +With the 'sexp' type these commands move across nodes defined by +the tree-sitter thing 'sexp' in 'treesit-thing-settings'. ** Text mode diff --git a/lisp/treesit.el b/lisp/treesit.el index 733a1f9c207..ae0ef56c65a 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -3196,11 +3196,10 @@ ARG is described in the docstring of `up-list'." (user-error "At top level"))) (setq cnt (- cnt inc))))) -(defun treesit-toggle-sexp-type () - "Toggle the type of navigation for sexp and list commands. -This type toggle affects navigation commands such as -`treesit-forward-sexp', `treesit-forward-list', `treesit-down-list', -`treesit-up-list'. +(defun treesit-cycle-sexp-type () + "Cycle the type of navigation for sexp and list commands. +This type affects navigation commands such as `treesit-forward-sexp', +`treesit-forward-list', `treesit-down-list', `treesit-up-list'. The type can be `list' (the default) or `sexp'. @@ -3224,7 +3223,7 @@ without distinction between symbols and lists." (if treesit-sexp-type-regexp #'treesit-forward-sexp #'treesit-forward-sexp-list)) - (message "Toggle sexp type to navigate %s" + (message "Cycle sexp type to navigate %s" (or (and treesit-sexp-type-regexp "treesit nodes") "syntax symbols and treesit lists")))) commit 53058e15c3313a262d5bc1f0873452779dd2821f Author: Sean Whitton Date: Fri Apr 11 18:46:37 2025 +0800 ; * etc/NEWS: Expand description of vc-buffer-overriding-fileset. diff --git a/etc/NEWS b/etc/NEWS index 27c582ca596..0d7746b7bab 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1470,7 +1470,9 @@ appearance of the list can be customized with the new faces --- *** New buffer-local variable 'vc-buffer-overriding-fileset'. -This can be used to override the behavior of 'vc-deduce-fileset'. +Primarily intended for buffers not visiting files, this specifies the +VC backend and VCS-managed file name or file names to which the buffer's +contents corresponds. It overrides the behavior of 'vc-deduce-fileset'. This replaces and generalizes the old 'vc-annotate-parent-file'. --- commit 1be9007c0ddec625810148fbee21643db38bad37 Author: Michael Albinus Date: Fri Apr 11 11:58:40 2025 +0200 ; * etc/NEWS: Fix typos. diff --git a/etc/NEWS b/etc/NEWS index 0ff3e8184ee..27c582ca596 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -30,9 +30,9 @@ The traditional unexec dumper, deprecated since Emacs 27, has been removed. --- -** Emacs's old ctags program is no longer built or installed. +** Emacs's old 'ctags' program is no longer built or installed. You are encouraged to use Universal Ctags instead. -For now, to get the old ctags behavior you can can run 'etags --ctags' +For now, to get the old 'ctags' behavior you can can run 'etags --ctags' or use a shell script named 'ctags' that runs 'etags --ctags "$@"'. --- @@ -64,7 +64,7 @@ init file. * Changes in Emacs 31.1 -** `prettify-symbols-mode' attempts to ignore undisplayable characters. +** 'prettify-symbols-mode' attempts to ignore undisplayable characters. Previously, such characters would be rendered as, e.g., white boxes. +++ @@ -234,7 +234,7 @@ Several functions to modify the window layout have been added: +++ *** Windmove commands now move to skipped windows if invoked twice in a row. The new user option 'windmove-allow-repeated-command-override' controls -this behavior: if it's non-nil, invoking the same windmove command twice +this behavior: if it is non-nil, invoking the same windmove command twice overrides the 'no-other-window' property, allowing navigation to windows that would normally be skipped. The default is t; customize it to nil if you want the old behavior. @@ -307,7 +307,7 @@ window whose buffer shares text with the buffer to display. *** New variable 'window-state-normalize-buffer-name'. When bound to non-nil, 'window-state-get' will normalize 'uniquify' managed buffer names by removing 'uniquify' prefixes and suffixes. This -helps restore window buffers across Emacs sessions. +helps to restore window buffers across Emacs sessions. ** Frames @@ -438,8 +438,8 @@ doesn't already mention 'setopt', the 'describe-variable' command will now add a note about this automatically. +++ -** New user option 'eldoc-help-at-pt' to show help at point via Eldoc. -When enabled, display the 'help-at-pt-kbd-string' via Eldoc. This +** New user option 'eldoc-help-at-pt' to show help at point via ElDoc. +When enabled, display the 'help-at-pt-kbd-string' via ElDoc. This setting is an alternative to 'help-at-pt-display-when-idle'. @@ -484,7 +484,7 @@ These include: Burmese, Burmese (visual order), Shan, and Mon. --- ** 'visual-wrap-prefix-mode' now supports variable-pitch fonts. When using 'visual-wrap-prefix-mode' in buffers with variable-pitch -fonts, the wrapped text will now be lined up correctly so that it's +fonts, the wrapped text will now be lined up correctly so that it is exactly below the text after the prefix on the first line. --- @@ -527,7 +527,7 @@ based on the state of the buffer, such as for the different states of modal editing packages. ** New user variable 'exchange-point-and-mark-highlight-region'. -When set to nil, this modifies `exchange-point-and-mark' so that it doesn't +When set to nil, this modifies 'exchange-point-and-mark' so that it doesn't activate the mark if it is not already active. The default value is t, which retains the old behavior. This variable has no effect when Transient Mark mode is off. @@ -544,12 +544,12 @@ and lists, such as 'treesit-forward-sexp', 'treesit-forward-list', 'list', the default, or 'sexp'. With the default 'list' type these commands move using syntax tables for symbols and using the thing 'list' for lists. -With 'sexp' type these commands move by treesit-defined parser nodes -defined by the treesit thing 'sexp' as determined by 'treesit-thing-at'. +With the 'sexp' type these commands move by tree-sitter defined parser nodes +defined by the tree-sitter thing 'sexp' as determined by 'treesit-thing-at'. ---- ** Text mode +--- *** New commands to convert between ASCII and full-width characters. New commands 'fullwidth-region' and 'fullwidth-word' convert ASCII characters in region or in the word at point to the corresponding @@ -558,23 +558,25 @@ characters in CJK texts. For example, 'A' is converted to 'A', '1' is converted to '1', etc. Companion commands 'halfwidth-region' and 'halfwidth-word' perform the opposite conversion. ---- ** ASM mode +--- *** 'asm-mode-set-comment-hook' is obsolete. -You can now set `asm-comment-char' from 'asm-mode-hook' instead. +You can now set 'asm-comment-char' from 'asm-mode-hook' instead. ---- ** Ibuffer +--- *** New column 'recency' in Ibuffer display. The user option 'ibuffer-formats' configures the Ibuffer formats. Add 'recency' to the format to display the column. +--- *** New value 'title' for the user option 'ibuffer-use-header-line'. Display column titles in the header line if 'ibuffer-use-header-line' is set to 'title'. +--- *** New user option 'ibuffer-human-readable-size'. When non-nil, buffer sizes are shown in human readable format. @@ -585,21 +587,23 @@ or functions. This is useful when your prompts can benefit from dynamic content. ** ElDoc + --- -*** New eldoc function 'elisp-eldoc-funcall-with-docstring'. -This function includes the current function docstring in eldoc echo area -and can be used as a more detailed alternative to 'elisp-eldoc-funcall'. +*** New ElDoc function 'elisp-eldoc-funcall-with-docstring'. +This function includes the current function's docstring in the ElDoc +echo area and can be used as a more detailed alternative to +'elisp-eldoc-funcall'. --- *** New user option 'elisp-eldoc-funcall-with-docstring-length'. -This user option specifies how long function doc string must be +This user option specifies how long function docstrings must be displayed in 'elisp-eldoc-funcall-with-docstring'. If set to 'short' -(the default), only display the first sentence of the doc string. -Otherwise, if set to 'full', display the full doc string.' +(the default), only display the first sentence of the docstring. +Otherwise, if set to 'full', display the full docstring. ---- ** Buffer Menu +--- *** New user option 'Buffer-menu-human-readable-sizes'. When non-nil, buffer sizes are shown in human readable format. The default is nil, which retains the old format. @@ -696,6 +700,14 @@ It is an alias for the 'progn' special-form. +++ *** 'cl-gensym' is now obsolete; use 'gensym' instead. ++++ +*** New macro 'cl-with-accessors'. +This macro is similar to 'with-slots', but uses accessor functions +instead of slot names. It is useful when slots' accessor functions are +used repeatedly, such as reading from a slot and then writing to that +slot. Symbol macros are created for the accessor functions using +'cl-symbol-macrolet', so that they can be used with 'setq' and 'setf'. + ** Whitespace --- @@ -913,30 +925,31 @@ only search in input history. If you customize it to the symbol 'dwim', those commands search in input history only when the point is after the last prompt. -+++ ** Mail Utils ++++ *** New user option 'mail-re-regexps'. This contains the list of regular expressions used to match "Re:" and international variants of it when modifying the Subject field in replies. -+++ ** Rmail ++++ *** 'rmail-re-abbrevs' default value is now derived from 'mail-re-regexps'. 'mail-re-regexps' is a new user option that is easier to customize than 'rmail-re-abbrevs'. 'rmail-re-abbrevs' is still honored if it was already set. -+++ ** Message ++++ *** 'message-subject-re-regexp' default value is now derived from 'mail-re-regexps'. 'mail-re-regexps' is a new user option that is easier to customize than 'message-subject-re-regexp'. 'message-subject-re-regexp' is still honored if it was already set. ++++ *** 'message-strip-subject-re' now matches case-insensitively. ** SHR @@ -1046,7 +1059,7 @@ available. --- *** New user option 'java-ts-mode-method-chaining-indent-offset'. Now method chaining is indented by 8 spaces rather than 4, and this -variable controls how much is indented for method chaining. +option controls how much is indented for method chaining. ** Emacs Lisp mode @@ -1261,9 +1274,9 @@ changes when supplied with a universal prefix argument via 'C-u': - 'C-u c b' copies all changes from buffer C to buffer B. +++ -*** Ediff now supports more flexible custom window layouts +*** Ediff now supports more flexible custom window layouts. Custom implementations of 'ediff-window-setup-function' no -longer need to display *all* ediff windows. Any of the A, B, C, +longer need to display *all* Ediff windows. Any of the A, B, C, and control windows can be left undisplayed and the corresponding variable set to nil. This change enables custom layouts without a control panel window. @@ -1379,7 +1392,7 @@ mode. Now, one needs to say '(midnight-mode +1)' instead. ** Python mode -*** New repeat-map for Python indentation commands. +*** New 'repeat-map' for Python indentation commands. The commands 'python-indent-shift-left' and 'python-indent-shift-right' can now be repeated using 'repeat-mode'. With 'repeat-mode' enabled, after invoking one of these commands via 'C-c <' or 'C-c >', you can @@ -1455,6 +1468,16 @@ appearance of the list can be customized with the new faces ** VC +--- +*** New buffer-local variable 'vc-buffer-overriding-fileset'. +This can be used to override the behavior of 'vc-deduce-fileset'. +This replaces and generalizes the old 'vc-annotate-parent-file'. + +--- +*** New buffer-local variable 'vc-buffer-revision'. +This specifies the revision to which the buffer's contents corresponds. +This replaces and generalizes the old 'vc-annotate-parent-rev'. + --- *** Using 'e' from Log View mode to modify change comments now works for Git. @@ -1489,10 +1512,10 @@ command line. --- *** New user options 'vc-resolve-conflicts' and 'vc-*-resolve-conflicts'. -Control whether to mark a conflicted file as resolved when saving. -You can now control it globally, with 'vc-resolve-conflicts' or for +They control whether to mark a conflicted file as resolved when saving. +You can now control it globally, with 'vc-resolve-conflicts', or for specific backends with 'vc-bzr-resolve-conflicts', -'vc-hg-resolve-conflicts' and 'vc-svn-resolve-conflicts'. +'vc-hg-resolve-conflicts', and 'vc-svn-resolve-conflicts'. --- *** New value for 'vc-git-resolve-conflicts'. @@ -1502,7 +1525,7 @@ since 'vc-resolve-conflicts' defaults to t, the previous default value for 'vc-git-resolve-conflicts'. --- -*** VC-Dir can now automatically add and remove marks on other lines. +*** VC Directory can now automatically add and remove marks on other lines. When you try to use a mark or unmark command where doing so would only be permitted if other lines were marked or unmarked first, Emacs will now ask you if you'd like to change the marks on those other lines. @@ -1513,12 +1536,12 @@ You can customize 'vc-dir-allow-mass-mark-changes' to restore the old behavior or dispense with the prompting. --- -*** New VC-Dir bindings 'z d' and 'D' to delete Git stashes. +*** New VC Directory bindings 'z d' and 'D' to delete Git stashes. These correspond to the existing 'z p' to pop a stash and 'P' to pop the -stash at point (deleting the stash at point is also bound to C-k). +stash at point (deleting the stash at point is also bound to 'C-k'). --- -*** VC-Dir now offers to register files when checking in mixed filesets. +*** VC Directory now offers to register files when checking in mixed filesets. Previously, if some files to be checked in were unregistered but others were added, removed or edited, Emacs would refuse to proceed. Now Emacs prompts to first register the unregistered files, so that all @@ -1632,27 +1655,22 @@ Meant to be given a global binding convenient to the user. Example: ** Speedbar +++ -*** The new command 'speedbar-window-mode' opens Speedbar in a window -instead of a frame. +*** New commands for Speedbar. -+++ -*** New command 'speedbar-window' is an alias for 'speedbar-window-mode'. +- 'speedbar-window-mode' opens Speedbar in a window instead of a frame. +- 'speedbar-window' is an alias for 'speedbar-window-mode'. +++ -*** The new user option 'speedbar-prefer-window', tells 'speedbar' to -open a side window instead of a frame. +*** New user options for Speedbar. -+++ -*** The new user option ‘speedbar-dedicated-window’ defines whether the -‘speedbar’ is displayed in a dedicated window. - -+++ -*** The new user option 'speedbar-window-default-width' defines the -initial width of the 'speedbar-window' - -+++ -*** The new user option 'speedbar-window-max-width' defines the maximum -width of the 'speedbar-window' when it is closed and then restored. +- 'speedbar-prefer-window' tells 'speedbar' to open a side window + instead of a frame. +- ‘speedbar-dedicated-window’ defines whether the ‘speedbar’ is + displayed in a dedicated window. +- 'speedbar-window-default-width' defines the initial width of the + 'speedbar-window'. +- 'speedbar-window-max-width' defines the maximum width of the + 'speedbar-window' when it is closed and then restored. --- *** 'speedbar-easymenu-definition-trailer' is now a function. @@ -1661,6 +1679,7 @@ width of the 'speedbar-window' when it is closed and then restored. *** New user options for 'icomplete-vertical-mode'. New user options have been added to enhance 'icomplete-vertical-mode': + - 'icomplete-vertical-in-buffer-adjust-list' aligns in-buffer completion to the original cursor column. - 'icomplete-vertical-render-prefix-indicator' adds a prefix indicator @@ -1672,21 +1691,12 @@ New user options have been added to enhance 'icomplete-vertical-mode': *** New faces for 'icomplete-vertical-mode'. New faces have been added to 'icomplete-vertical-mode': + - 'icomplete-vertical-selected-prefix-indicator-face' controls the appearance of the selected candidate prefix. - 'icomplete-vertical-unselected-prefix-indicator-face' controls the appearance of unselected candidate prefixes. -** CL-Lib - -+++ -*** New macro 'cl-with-accessors'. -This macro is similar to 'with-slots', but uses accessor functions -instead of slot names. It is useful when slots' accessor functions are -used repeatedly, such as reading from a slot and then writing to that -slot. Symbol macros are created for the accessor functions using -'cl-symbol-macrolet', so that they can be used with 'setq' and 'setf'. - ** Miscellaneous --- @@ -1757,20 +1767,14 @@ A major mode based on the tree-sitter library for editing "go.work" files. If tree-sitter is properly set-up by the user, it can be enabled for files named "go.work". -** The file treesit-x.el defines a number of simple treesit modes. -Using the new macro 'define-treesit-generic-mode' generic modes are -defined including, but not limited to, 'gitattributes-generic-ts-mode'. -Visiting a file in such mode ask for confirmation before installing -its tree-sitter grammar. Then it highlights the visited file -according to syntax defined by the grammar. - ** New minor mode 'electric-block-comment-mode'. -This mode automatically close block comment, typing -`block-comment-start' closes it inserting their corresponding -`block-comment-end'. Thus, allows closing block comments for major -modes that support it, such as: c-mode, c++-mode, java-mode, js-mode, -css-mode, and derived: html-mode, mhtml-mode, xml-mode and nxml-mode, -pascal-mode, lua-ts-mode, lisp-mode and common-lisp-mode +This mode automatically closes block comments. Typing the value of +'block-comment-start' closes it inserting the corresponding +'block-comment-end'. Thus, allows closing block comments for major +modes that support it, such as: 'c-mode', 'c++-mode', 'java-mode', +'js-mode', 'css-mode', and derived: 'html-mode', 'mhtml-mode', +'xml-mode' and 'nxml-mode', 'pascal-mode', 'lua-ts-mode', 'lisp-mode' +and 'common-lisp-mode'. * Incompatible Lisp Changes in Emacs 31.1 @@ -1936,6 +1940,13 @@ It has been obsolete since Emacs 26.1. Use the group 'text' instead. ** Changes in tree-sitter modes +*** The file treesit-x.el defines a number of simple tree-sitter modes. +Using the new macro 'define-treesit-generic-mode', generic modes are +defined including, but not limited to, 'gitattributes-generic-ts-mode'. +Visiting a file in such mode asks for confirmation before installing +its tree-sitter grammar. Then it highlights the visited file +according to the syntax defined by the grammar. + +++ *** Indirect buffers can have their own parser list. Before, indirect buffers share their base buffer’s parser list and @@ -2038,13 +2049,13 @@ Multi-language major modes can rely on the default return value from +++ *** New command 'treesit-explore'. This command replaces 'treesit-explore-mode'. It turns on -'treesit-explore-mode' if it’s not on, and pops up the explorer buffer -if it’s already on. +'treesit-explore-mode' if it is not on, and pops up the explorer buffer +if it is already on. +++ *** 'treesit-explore-mode' now supports local parsers. Now 'treesit-explore-mode' (or 'treesit-explore') prompts for a parser -rather than a language, and it’s now possible to select a local parser +rather than a language, and it is now possible to select a local parser at point to explore. +++ @@ -2142,18 +2153,6 @@ sleep state. 'advertised-undo', 'advertised-widget-backward', and 'dired-advertised-find-file'. -** VC - ---- -*** New buffer-local variable 'vc-buffer-overriding-fileset'. -This can be used to override the behavior of 'vc-deduce-fileset'. -This replaces and generalizes the old 'vc-annotate-parent-file'. - ---- -*** New buffer-local variable 'vc-buffer-revision'. -This specifies the revision to which the buffer's contents corresponds. -This replaces and generalizes the old 'vc-annotate-parent-rev'. - * Changes in Emacs 31.1 on Non-Free Operating Systems commit e966ff9759ae9fe6aa2e12681bc01315dbe83f71 Author: Eli Zaretskii Date: Fri Apr 11 11:33:26 2025 +0300 ; * doc/emacs/files.texi (Image Mode): Fix a typo (bug#77723). diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi index 2a7017779f6..e15ab605db1 100644 --- a/doc/emacs/files.texi +++ b/doc/emacs/files.texi @@ -2489,7 +2489,7 @@ select a group of images to copy somewhere else). The @kbd{m} (@code{image-mode-mark-file}) command will mark the current file in any Dired buffer(s) that display the current file's directory. If no such buffer is open, the directory is opened in a new buffer. To -unmark files, use the @kbd{u} (@code{image-mode-mark-file}) command. +unmark files, use the @kbd{u} (@code{image-mode-unmark-file}) command. Finally, if you just want to copy the current buffers file name to the kill ring, you can use the @kbd{w} (@code{image-mode-copy-file-name-as-kill}) command. commit 95675b4db0f4a72adfcde00fa24db6f3379f0f2e Author: Sean Whitton Date: Fri Apr 11 11:47:32 2025 +0800 ; Delete FIXME in vc-print-log This isn't a state-changing operation, indeed, and passing t here is relevant to dired-vc-deduce-fileset. diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index d2c777d5c55..12f39be4bdb 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -3127,7 +3127,7 @@ shown log style is available via `vc-log-short-style'." (list rev lim))) (t (list nil (when (> vc-log-show-limit 0) vc-log-show-limit))))) - (let* ((vc-fileset (vc-deduce-fileset t)) ;FIXME: Why t? --Stef + (let* ((vc-fileset (vc-deduce-fileset t)) (backend (car vc-fileset)) (files (cadr vc-fileset)) (working-revision (or working-revision vc-buffer-revision))) commit 60530889c309746def95f32d3dfc117bc4f98444 Author: Sean Whitton Date: Fri Apr 4 10:49:57 2025 +0800 New buffer-local vc-buffer-overriding-fileset and vc-buffer-revision * lisp/vc/vc.el (vc-buffer-overriding-fileset) (vc-buffer-revision): New variables (bug#77529). (vc-find-revision-save, vc-find-revision-no-save): Set them. (vc-deduce-fileset): Respect vc-buffer-overriding-fileset. (vc-print-log): Use vc-buffer-revision as a default working revision. * lisp/vc/vc-annotate.el (vc-annotate-parent-file) (vc-annotate-parent-rev): Delete. (vc-annotate): Respect vc-buffer-overriding-fileset and vc-buffer-revision. This makes 'C-x v g' work from buffers generated by 'C-x v ~' (bug#5424). Set the two variables in the newly prepared buffer. (vc-annotate-working-revision) (vc-annotate-extract-revision-at-line) (vc-annotate-revision-at-line, vc-annotate-warp-revision) (vc-annotate-goto-line): * lisp/vc/vc-svn.el (vc-svn-annotate-current-time): Use vc-buffer-overriding-fileset instead of vc-annotate-parent-file, vc-buffer-revision instead of vc-annotate-parent-rev. (vc-annotate-parent-rev): Delete declaration. * etc/NEWS: Announce the new variables. diff --git a/etc/NEWS b/etc/NEWS index 463b59a4a9c..0ff3e8184ee 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2142,6 +2142,18 @@ sleep state. 'advertised-undo', 'advertised-widget-backward', and 'dired-advertised-find-file'. +** VC + +--- +*** New buffer-local variable 'vc-buffer-overriding-fileset'. +This can be used to override the behavior of 'vc-deduce-fileset'. +This replaces and generalizes the old 'vc-annotate-parent-file'. + +--- +*** New buffer-local variable 'vc-buffer-revision'. +This specifies the revision to which the buffer's contents corresponds. +This replaces and generalizes the old 'vc-annotate-parent-rev'. + * Changes in Emacs 31.1 on Non-Free Operating Systems diff --git a/lisp/vc/vc-annotate.el b/lisp/vc/vc-annotate.el index 1be6bab09a5..e47ab426ef4 100644 --- a/lisp/vc/vc-annotate.el +++ b/lisp/vc/vc-annotate.el @@ -194,8 +194,6 @@ List of factors, used to expand/compress the time scale. See `vc-annotate'." ;; internal buffer-local variables (defvar vc-annotate-backend nil) -(defvar vc-annotate-parent-file nil) -(defvar vc-annotate-parent-rev nil) (defvar vc-annotate-parent-display-mode nil) (defconst vc-annotate-font-lock-keywords @@ -368,7 +366,7 @@ use; you may override this using the second optional arg MODE." (defvar vc-sentinel-movepoint) ;;;###autoload -(defun vc-annotate (file rev &optional display-mode buf move-point-to vc-bk) +(defun vc-annotate (file rev &optional display-mode buf move-point-to backend) "Display the edit history of the current FILE using colors. This command creates a buffer that shows, for each line of the current @@ -389,7 +387,7 @@ age, and everything that is older than that is shown in blue. If MOVE-POINT-TO is given, move the point to that line. -If VC-BK is given used that VC backend. +If BACKEND is given, use that VC backend. Customization variables: @@ -401,22 +399,25 @@ mode-specific menu. `vc-annotate-color-map' and should be applied to the background or to the foreground." (interactive (save-current-buffer - (vc-ensure-vc-buffer) - (list buffer-file-name - (let ((def (funcall (if vc-annotate-use-short-revision - #'vc-short-revision - #'vc-working-revision) - buffer-file-name))) - (if (null current-prefix-arg) def - (vc-read-revision - (format-prompt "Annotate from revision" def) - (list buffer-file-name) nil def))) - (if (null current-prefix-arg) - vc-annotate-display-mode - (float (string-to-number - (read-string (format-prompt "Annotate span days" 20) - nil nil "20"))))))) - (vc-ensure-vc-buffer) + (let ((name (if (length= (cadr vc-buffer-overriding-fileset) 1) + (caadr vc-buffer-overriding-fileset) + (vc-ensure-vc-buffer) + buffer-file-name))) + (list name + (let ((def (or vc-buffer-revision + (funcall (if vc-annotate-use-short-revision + #'vc-short-revision + #'vc-working-revision) + name)))) + (if (null current-prefix-arg) def + (vc-read-revision + (format-prompt "Annotate from revision" def) + (list name) nil def))) + (if (null current-prefix-arg) + vc-annotate-display-mode + (float (string-to-number + (read-string (format-prompt "Annotate span days" 20) + nil nil "20")))))))) (setq vc-annotate-display-mode display-mode) ;Not sure why. --Stef (let* ((temp-buffer-name (format "*Annotate %s (rev %s)*" (buffer-name) rev)) (temp-buffer-show-function 'vc-annotate-display-select) @@ -435,31 +436,33 @@ should be applied to the background or to the foreground." (rename-buffer temp-buffer-name t) ;; In case it had to be uniquified. (setq temp-buffer-name (buffer-name)))) - (with-output-to-temp-buffer temp-buffer-name - (let ((backend (or vc-bk (vc-backend file))) - (coding-system-for-read buffer-file-coding-system)) - ;; For a VC backend running on DOS/Windows, it's normal to - ;; produce CRLF EOLs even if the original file has Unix EOLs, - ;; which will show ^M characters in the Annotate buffer. (One - ;; known case in point is "svn annotate".) Prevent that by - ;; forcing DOS EOL decoding. - (if (memq system-type '(windows-nt ms-dos)) - (setq coding-system-for-read - (coding-system-change-eol-conversion coding-system-for-read - 'dos))) - (vc-call-backend backend 'annotate-command file - (get-buffer temp-buffer-name) rev) - ;; we must setup the mode first, and then set our local - ;; variables before the show-function is called at the exit of - ;; with-output-to-temp-buffer - (with-current-buffer temp-buffer-name - (unless (equal major-mode 'vc-annotate-mode) - (vc-annotate-mode)) - (setq-local vc-annotate-backend backend) - (setq-local vc-annotate-parent-file file) - (setq-local vc-annotate-parent-rev rev) - (setq-local vc-annotate-parent-display-mode display-mode) - (kill-local-variable 'revert-buffer-function)))) + (let ((backend (or backend + (car vc-buffer-overriding-fileset) + (vc-backend file))) + (coding-system-for-read buffer-file-coding-system)) + (with-output-to-temp-buffer temp-buffer-name + ;; For a VC backend running on DOS/Windows, it's normal to + ;; produce CRLF EOLs even if the original file has Unix EOLs, + ;; which will show ^M characters in the Annotate buffer. (One + ;; known case in point is "svn annotate".) Prevent that by + ;; forcing DOS EOL decoding. + (if (memq system-type '(windows-nt ms-dos)) + (setq coding-system-for-read + (coding-system-change-eol-conversion coding-system-for-read + 'dos))) + (vc-call-backend backend 'annotate-command file + (get-buffer temp-buffer-name) rev) + ;; we must setup the mode first, and then set our local + ;; variables before the show-function is called at the exit of + ;; with-output-to-temp-buffer + (with-current-buffer temp-buffer-name + (unless (equal major-mode 'vc-annotate-mode) + (vc-annotate-mode)) + (setq-local vc-annotate-backend backend) + (setq-local vc-buffer-overriding-fileset `(,backend (,file))) + (setq-local vc-buffer-revision rev) + (setq-local vc-annotate-parent-display-mode display-mode) + (kill-local-variable 'revert-buffer-function)))) (with-current-buffer temp-buffer-name (vc-run-delayed @@ -494,8 +497,8 @@ revisions after." (interactive) (if (not (equal major-mode 'vc-annotate-mode)) (message "Cannot be invoked outside of a vc annotate buffer") - (let ((warp-rev (vc-working-revision vc-annotate-parent-file))) - (if (equal warp-rev vc-annotate-parent-rev) + (let ((warp-rev (vc-working-revision (cadr vc-buffer-overriding-fileset)))) + (if (equal warp-rev vc-buffer-revision) (message "Already at revision %s" warp-rev) (vc-annotate-warp-revision warp-rev))))) @@ -507,7 +510,7 @@ Return a cons (REV . FILENAME)." 'annotate-extract-revision-at-line))) (if (or (null rev) (consp rev)) rev - (cons rev vc-annotate-parent-file)))) + (cons rev (cadr vc-buffer-overriding-fileset))))) (defun vc-annotate-revision-at-line () "Visit the annotation of the revision identified in the current line." @@ -517,8 +520,8 @@ Return a cons (REV . FILENAME)." (let ((rev-at-line (vc-annotate-extract-revision-at-line))) (if (not rev-at-line) (message "Cannot extract revision number from the current line") - (if (and (equal (car rev-at-line) vc-annotate-parent-rev) - (string= (cdr rev-at-line) vc-annotate-parent-file)) + (if (and (equal (car rev-at-line) vc-buffer-revision) + (string= (cdr rev-at-line) (cadr vc-buffer-overriding-fileset))) (message "Already at revision %s" rev-at-line) (vc-annotate-warp-revision (car rev-at-line) (cdr rev-at-line))))))) @@ -644,27 +647,33 @@ describes a revision number, so warp to that revision." (newrev nil)) (cond ((and (integerp revspec) (> revspec 0)) - (setq newrev vc-annotate-parent-rev) + (setq newrev vc-buffer-revision) (while (and (> revspec 0) newrev) (setq newrev (vc-call-backend vc-annotate-backend 'next-revision - (or file vc-annotate-parent-file) newrev)) + (or file + (cadr vc-buffer-overriding-fileset)) + newrev)) (setq revspec (1- revspec))) (unless newrev (message "Cannot increment %d revisions from revision %s" - revspeccopy vc-annotate-parent-rev))) + revspeccopy vc-buffer-revision))) ((and (integerp revspec) (< revspec 0)) - (setq newrev vc-annotate-parent-rev) + (setq newrev vc-buffer-revision) (while (and (< revspec 0) newrev) (setq newrev (vc-call-backend vc-annotate-backend 'previous-revision - (or file vc-annotate-parent-file) newrev)) + (or file + (cadr vc-buffer-overriding-fileset)) + newrev)) (setq revspec (1+ revspec))) (unless newrev (message "Cannot decrement %d revisions from revision %s" - (- 0 revspeccopy) vc-annotate-parent-rev))) + (- 0 revspeccopy) vc-buffer-revision))) ((stringp revspec) (setq newrev revspec)) (t (error "Invalid argument to vc-annotate-warp-revision"))) (when newrev - (vc-annotate (or file vc-annotate-parent-file) newrev + (vc-annotate (or file + (cadr vc-buffer-overriding-fileset)) + newrev vc-annotate-parent-display-mode buf ;; Pass the current line so that vc-annotate will @@ -757,13 +766,13 @@ The annotations are relative to the current time, unless overridden by OFFSET." (let ((line (save-restriction (widen) (line-number-at-pos))) - (rev vc-annotate-parent-rev)) + (rev vc-buffer-revision) + (file (cadr vc-buffer-overriding-fileset))) (pop-to-buffer (or (and (buffer-live-p vc-parent-buffer) vc-parent-buffer) - (and (file-exists-p vc-annotate-parent-file) - (find-file-noselect vc-annotate-parent-file)) - (error "File not found: %s" vc-annotate-parent-file))) + (and (file-exists-p file) (find-file-noselect file)) + (error "File not found: %s" file))) (save-restriction (widen) (goto-char (point-min)) diff --git a/lisp/vc/vc-svn.el b/lisp/vc/vc-svn.el index e81636552b5..079aa3c0a22 100644 --- a/lisp/vc/vc-svn.el +++ b/lisp/vc/vc-svn.el @@ -791,10 +791,8 @@ Set file properties accordingly. If FILENAME is non-nil, return its status." ;; Arbitrarily assume 10 commits per day. (/ (string-to-number rev) 10.0)) -(defvar vc-annotate-parent-rev) - (defun vc-svn-annotate-current-time () - (vc-svn-annotate-time-of-rev vc-annotate-parent-rev)) + (vc-svn-annotate-time-of-rev vc-buffer-revision)) (defconst vc-svn-annotate-re "[ \t]*\\([0-9]+\\)[ \t]+[^\t ]+ ") diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index 12f86907470..d2c777d5c55 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -1184,6 +1184,19 @@ If the value is t, the backend is deduced in all modes." (declare-function vc-dir-deduce-fileset "vc-dir" (&optional state-model-only-files)) (declare-function dired-vc-deduce-fileset "dired-aux" (&optional state-model-only-files not-state-changing)) +(defvar-local vc-buffer-overriding-fileset nil + "Specialized, static value for `vc-deduce-fileset' for this buffer. +If non-nil, this should be a list of length 2 or 5. +See `vc-deduce-fileset' regarding these possible forms. +If this list is of length 2, it will be used only when the +STATE-MODEL-ONLY-FILES argument to `vc-deduce-fileset' is nil.") + +(defvar-local vc-buffer-revision nil + "VCS revision to which this buffer's contents corresponds. +Lisp code which sets this should also set `vc-buffer-overriding-fileset' +such that the buffer's local variables also specify a VC backend, +rendering the value of this variable unambiguous.") + (defun vc-deduce-fileset (&optional not-state-changing allow-unregistered state-model-only-files) @@ -1223,6 +1236,14 @@ BEWARE: this function may change the current buffer." (set-buffer (buffer-base-buffer))) (let (backend) (cond + ((and vc-buffer-overriding-fileset + (not (or (length= vc-buffer-overriding-fileset 2) + (length= vc-buffer-overriding-fileset 5)))) + (error "Invalid value for `vc-buffer-overriding-fileset' %S" + vc-buffer-overriding-fileset)) + ((and (or (not state-model-only-files) + (length= vc-buffer-overriding-fileset 5)) + vc-buffer-overriding-fileset)) ((derived-mode-p 'vc-dir-mode) (vc-dir-deduce-fileset state-model-only-files)) ((derived-mode-p 'dired-mode) @@ -1265,6 +1286,9 @@ BEWARE: this function may change the current buffer." (list buffer-file-name)))) (t (error "File is not under version control"))))) +;; This function should possibly honor `vc-buffer-overriding-fileset' +;; when the fileset consists of a single file, but only if that file is +;; part of the current working revision, i.e., actually on disk now. (defun vc-ensure-vc-buffer () "Make sure that the current buffer visits a version-controlled file." (cond @@ -2442,7 +2466,8 @@ Use BACKEND as the VC backend if specified." Saves the buffer to the file." (let ((automatic-backup (vc-version-backup-file-name file revision)) (filebuf (or (get-file-buffer file) (current-buffer))) - (filename (vc-version-backup-file-name file revision 'manual))) + (filename (vc-version-backup-file-name file revision 'manual)) + (backend (or backend (vc-backend file)))) (unless (file-exists-p filename) (if (file-exists-p automatic-backup) (rename-file automatic-backup filename nil) @@ -2460,19 +2485,19 @@ Saves the buffer to the file." ;; Change buffer to get local value of ;; vc-checkout-switches. (with-current-buffer filebuf - (if backend - (vc-call-backend backend 'find-revision file revision outbuf) - (vc-call find-revision file revision outbuf))))) + (vc-call-backend backend 'find-revision + file revision outbuf)))) (setq failed nil)) (when (and failed (file-exists-p filename)) (delete-file filename)))) (vc-mode-line file)) (message "Checking out %s...done" filename))) - (let ((result-buf (find-file-noselect filename))) + (let ((result-buf (find-file-noselect filename)) + (file (expand-file-name file))) ; ensure it's absolute (with-current-buffer result-buf - ;; Set the parent buffer so that things like - ;; C-x v g, C-x v l, ... etc work. - (setq-local vc-parent-buffer filebuf)) + (setq-local vc-parent-buffer filebuf + vc-buffer-overriding-fileset `(,backend (,file)) + vc-buffer-revision revision)) result-buf))) (defun vc-find-revision-no-save (file revision &optional backend buffer) @@ -2481,9 +2506,11 @@ If BUFFER omitted or nil, this function creates a new buffer and sets `buffer-file-name' to the name constructed from the file name and the revision number. Unlike `vc-find-revision-save', doesn't save the buffer to the file." - (let* ((buffer (when (buffer-live-p buffer) buffer)) + (let* ((buffer (and (buffer-live-p buffer) buffer)) (filebuf (or buffer (get-file-buffer file) (current-buffer))) - (filename (unless buffer (vc-version-backup-file-name file revision 'manual)))) + (filename (and (not buffer) + (vc-version-backup-file-name file revision 'manual))) + (backend (or backend (vc-backend file)))) (unless (and (not buffer) (or (get-file-buffer filename) (file-exists-p filename))) @@ -2494,9 +2521,7 @@ Unlike `vc-find-revision-save', doesn't save the buffer to the file." (unless buffer (setq buffer-file-name filename)) (let ((outbuf (current-buffer))) (with-current-buffer filebuf - (if backend - (vc-call-backend backend 'find-revision file revision outbuf) - (vc-call find-revision file revision outbuf)))) + (vc-call-backend backend 'find-revision file revision outbuf))) (decode-coding-inserted-region (point-min) (point-max) file) (after-insert-file-set-coding (- (point-max) (point-min))) (goto-char (point-min)) @@ -2524,9 +2549,12 @@ Unlike `vc-find-revision-save', doesn't save the buffer to the file." (kill-buffer (get-file-buffer filename))))))) (let ((result-buf (or buffer (get-file-buffer filename) - (find-file-noselect filename)))) + (find-file-noselect filename))) + (file (expand-file-name file))) ; ensure it's absolute (with-current-buffer result-buf - (setq-local vc-parent-buffer filebuf)) + (setq-local vc-parent-buffer filebuf + vc-buffer-overriding-fileset `(,backend (,file)) + vc-buffer-revision revision)) result-buf))) ;; Header-insertion code @@ -3102,8 +3130,7 @@ shown log style is available via `vc-log-short-style'." (let* ((vc-fileset (vc-deduce-fileset t)) ;FIXME: Why t? --Stef (backend (car vc-fileset)) (files (cadr vc-fileset)) -;; (working-revision (or working-revision (vc-working-revision (car files)))) - ) + (working-revision (or working-revision vc-buffer-revision))) (vc-print-log-internal backend files working-revision nil limit))) ;;;###autoload commit 37164032f690f8a2382f4216c0eb947ce48e2f1f Author: Sean Whitton Date: Fri Apr 11 10:01:31 2025 +0800 ; Normalize spacing in last change diff --git a/lisp/abbrev.el b/lisp/abbrev.el index 517b67216c3..c4d35496cee 100644 --- a/lisp/abbrev.el +++ b/lisp/abbrev.el @@ -271,7 +271,7 @@ abbrevs have been saved." (when (unencodable-char-position (point-min) (point-max) 'utf-8) (setq coding-system-for-write 'utf-8-emacs)) (goto-char (point-min)) - (insert (format ";;-*-coding: %S; lexical-binding:t -*-\n" + (insert (format ";; -*- coding: %S; lexical-binding: t -*-\n" coding-system-for-write)) (write-region nil nil file nil (and (not verbose) 0))))) diff --git a/lisp/filesets.el b/lisp/filesets.el index a5e255d9d37..c1a4499388c 100644 --- a/lisp/filesets.el +++ b/lisp/filesets.el @@ -2336,7 +2336,7 @@ fileset thinks this is necessary or not." (delete-file filesets-menu-cache-file)) ;;(message "Filesets: saving menu cache") (with-temp-buffer - (insert ";; -*- mode: emacs-lisp; lexical-binding:t -*-\n") + (insert ";; -*- mode: emacs-lisp; lexical-binding: t -*-\n") (dolist (this filesets-menu-cache-contents) (if (get this 'custom-type) (progn diff --git a/lisp/recentf.el b/lisp/recentf.el index 166963cd468..3e0c2dfd508 100644 --- a/lisp/recentf.el +++ b/lisp/recentf.el @@ -1318,7 +1318,7 @@ Optional argument N must be a valid digit number. It defaults to 1. (defconst recentf-save-file-header ;; FIXME: This should arguably be a `lisp-data' file, but currently ;; it contains and is used as an executable ELisp code. - ";;; Automatically generated by `recentf' on %s -*- mode: emacs-lisp; lexical-binding:t -*-\n" + ";;; Automatically generated by `recentf' on %s -*- mode: emacs-lisp; lexical-binding: t -*-\n" "Header to be written into the `recentf-save-file'.") (defconst recentf-save-file-coding-system diff --git a/lisp/savehist.el b/lisp/savehist.el index 7d0bed37749..f113024d519 100644 --- a/lisp/savehist.el +++ b/lisp/savehist.el @@ -244,7 +244,7 @@ If AUTO-SAVE is non-nil, compare the saved contents to the one last saved, (insert (format-message (concat - ";; -*- mode: emacs-lisp; lexical-binding:t; coding: %s -*-\n" + ";; -*- mode: emacs-lisp; lexical-binding: t; coding: %s -*-\n" ";; Minibuffer history file, automatically generated by `savehist'.\n" "\n") savehist-coding-system)) diff --git a/lisp/url/url-cookie.el b/lisp/url/url-cookie.el index ad8e6056f83..bb7364ef06e 100644 --- a/lisp/url/url-cookie.el +++ b/lisp/url/url-cookie.el @@ -150,7 +150,7 @@ i.e. 1970-1-1) are loaded as expiring one year from now instead." (url-cookie-clean-up) (url-cookie-clean-up t) (with-temp-buffer - (insert ";; Emacs-W3 HTTP cookies file -*- lexical-binding:t -*-\n" + (insert ";; Emacs-W3 HTTP cookies file -*- lexical-binding: t -*-\n" ";; Automatically generated file!!! DO NOT EDIT!!!\n\n" "(setq url-cookie-storage\n '") (let ((print-length nil) (print-level nil)) commit c0ea954d0f650227dc518f02a292daeb27cf0c37 Author: Stefan Monnier Date: Thu Apr 10 16:31:30 2025 -0400 Add `lexical-binding` cookie to generated files Side-companion to commits bb0f84bc0bf7 and 50947fd51202. While in there, couldn't resist adding a few minor cleanups I had lying around. * lisp/savehist.el (savehist-save): Add `lexical-binding:t` cookie. * lisp/url/url-cookie.el: Remove redundant `:group` arguments. (url-cookie-write-file): Add `lexical-binding:t` cookie. * lisp/abbrev.el: Prefer #' to quote function names. (write-abbrev-file): Add a `lexical-binding:t` cookie. (unexpand-abbrev): Use `replace-region-contents` and 3-args `<=`. (define-abbrev-table): Use `defvar-1`. * lisp/filesets.el (filesets-menu-cache-file-save-maybe): Add `lexical-binding:t` cookie. (filesets-ingroup-patterns): Don't quote lambdas. (filesets-spawn-external-viewer): Remove redundant "" arg to `mapconcat`. * lisp/recentf.el: Prefer #' to quote function names. (recentf-save-file-header): Add `lexical-binding:t` cookie and change mode to match the actual content. diff --git a/lisp/abbrev.el b/lisp/abbrev.el index d2dc96fe5ca..517b67216c3 100644 --- a/lisp/abbrev.el +++ b/lisp/abbrev.el @@ -42,7 +42,7 @@ (defcustom abbrev-file-name (locate-user-emacs-file "abbrev_defs" ".abbrev_defs") "Default name of file from which to read and where to save abbrevs." - :initialize 'custom-initialize-delay + :initialize #'custom-initialize-delay :type 'file) (defcustom only-global-abbrevs nil @@ -62,7 +62,7 @@ be replaced by its expansion." ;; defining it again. :variable abbrev-mode) -(put 'abbrev-mode 'safe-local-variable 'booleanp) +(put 'abbrev-mode 'safe-local-variable #'booleanp) (define-obsolete-variable-alias 'edit-abbrevs-map @@ -271,7 +271,8 @@ abbrevs have been saved." (when (unencodable-char-position (point-min) (point-max) 'utf-8) (setq coding-system-for-write 'utf-8-emacs)) (goto-char (point-min)) - (insert (format ";;-*-coding: %s;-*-\n" coding-system-for-write)) + (insert (format ";;-*-coding: %S; lexical-binding:t -*-\n" + coding-system-for-write)) (write-region nil nil file nil (and (not verbose) 0))))) (defun abbrev-edit-save-to-file (file) @@ -495,13 +496,13 @@ A prefix argument means don't query; expand all abbrevs." (set sym nil) ; Make sure it won't be confused for an abbrev. (put sym prop val))) -(defalias 'abbrev-get 'get +(defalias 'abbrev-get #'get "Get the property PROP of abbrev ABBREV See `define-abbrev' for the effect of some special properties. \(fn ABBREV PROP)") -(defalias 'abbrev-put 'put +(defalias 'abbrev-put #'put "Set the property PROP of abbrev ABBREV to value VAL. See `define-abbrev' for the effect of some special properties. @@ -574,8 +575,7 @@ This causes `save-some-buffers' to offer to save the abbrevs.") (defcustom abbrev-all-caps nil "Non-nil means expand multi-word abbrevs in all caps if the abbrev was so." - :type 'boolean - :group 'abbrev-mode) + :type 'boolean) (defvar abbrev-start-location nil "Buffer position for `expand-abbrev' to use as the start of the abbrev. @@ -692,7 +692,7 @@ current (if global is nil) or standard syntax table." (cl-pushnew (aref abbrev (match-beginning 0)) badchars) (setq pos (1+ pos))) (error "Some abbrev characters (%s) are not word constituents %s" - (apply 'string (nreverse badchars)) + (apply #'string (nreverse badchars)) (if global "in the standard syntax" "in this mode")))))) (defun define-global-abbrev (abbrev expansion) @@ -1097,8 +1097,7 @@ This differs from ordinary undo in that other editing done since then is not undone." (interactive) (save-excursion - (unless (or (< last-abbrev-location (point-min)) - (> last-abbrev-location (point-max))) + (when (<= (point-min) last-abbrev-location (point-max)) (goto-char last-abbrev-location) (when (stringp last-abbrev-text) ;; This isn't correct if last-abbrev's hook was used @@ -1107,9 +1106,9 @@ is not undone." (unless (stringp val) (error "Value of abbrev-symbol must be a string")) ;; Don't inherit properties here; just copy from old contents. - (insert last-abbrev-text) - ;; Delete after inserting, to better preserve markers. - (delete-region (point) (+ (point) (length val))) + (replace-region-contents (point) (+ (point) (length val)) + last-abbrev-text 0) + (goto-char (+ (point) (length last-abbrev-text))) (setq last-abbrev-text nil)))))) (defun abbrev--write (sym) @@ -1159,21 +1158,21 @@ a call to `define-abbrev-table' that, when evaluated, will define the abbrev table NAME exactly as it is currently defined. Abbrevs marked as \"system abbrevs\" are ignored." (let ((symbols (abbrev--table-symbols name readable))) - (setq symbols (sort symbols 'string-lessp)) + (setq symbols (sort symbols #'string-lessp)) (let ((standard-output (current-buffer))) (if readable (progn (insert "(") (prin1 name) (insert ")\n\n") - (mapc 'abbrev--describe symbols) + (mapc #'abbrev--describe symbols) (insert "\n\n")) (insert "(define-abbrev-table '") (prin1 name) (if (null symbols) (insert " '())\n\n") (insert "\n '(\n") - (mapc 'abbrev--write symbols) + (mapc #'abbrev--write symbols) (insert " ))\n\n"))) nil))) @@ -1216,7 +1215,7 @@ Properties with special meaning: ;; There is really no docstring, instead the docstring arg ;; is a property name. (push docstring props) (setq docstring nil)) - (eval `(defvar ,tablename nil ,@(if docstring (list docstring)))) + (defvar-1 tablename nil docstring) (let ((table (if (boundp tablename) (symbol-value tablename)))) (unless table (setq table (make-abbrev-table)) @@ -1230,7 +1229,7 @@ Properties with special meaning: (unless (cdr props) (error "Missing value for property %S" (car props))) (abbrev-table-put table (pop props) (pop props))) (dolist (elt definitions) - (apply 'define-abbrev table elt)))) + (apply #'define-abbrev table elt)))) (defun abbrev-table-menu (table &optional prompt sortfun) "Return a menu that shows all abbrevs in TABLE. diff --git a/lisp/filesets.el b/lisp/filesets.el index c9d98e292b4..a5e255d9d37 100644 --- a/lisp/filesets.el +++ b/lisp/filesets.el @@ -671,69 +671,70 @@ In order to view pdf or rtf files in an Emacs buffer, you could use these: (boolean :tag "Boolean"))))))) (defcustom filesets-ingroup-patterns - '(("^.+\\.tex$" t + ;; FIXME: This value does not seem realistically editable via the Custom UI. + `(("^.+\\.tex$" t (((:name "Package") (:pattern "\\\\usepackage\\W*\\(\\[[^]]*\\]\\W*\\)?{\\W*\\(.+\\)\\W*}") (:match-number 2) (:stub-flag t) - (:get-file-name (lambda (master file) - (filesets-which-file master - (concat file ".sty") - (filesets-convert-path-list - (or (getenv "MY_TEXINPUTS") - (getenv "TEXINPUTS"))))))) + (:get-file-name ,(lambda (master file) + (filesets-which-file master + (concat file ".sty") + (filesets-convert-path-list + (or (getenv "MY_TEXINPUTS") + (getenv "TEXINPUTS"))))))) ((:name "Include") (:pattern "\\\\include\\W*{\\W*\\(.+\\)\\W*}") - (:get-file-name (lambda (master file) - (filesets-which-file master - (concat file ".tex") - (filesets-convert-path-list - (or (getenv "MY_TEXINPUTS") - (getenv "TEXINPUTS")))))) + (:get-file-name ,(lambda (master file) + (filesets-which-file master + (concat file ".tex") + (filesets-convert-path-list + (or (getenv "MY_TEXINPUTS") + (getenv "TEXINPUTS")))))) (:scan-depth 5)) ((:name "Input") (:pattern "\\\\input\\W*{\\W*\\(.+\\)\\W*}") - (:stubp (lambda (a b) (not (filesets-files-in-same-directory-p a b)))) - (:get-file-name (lambda (master file) - (filesets-which-file master - (concat file ".tex") - (filesets-convert-path-list - (or (getenv "MY_TEXINPUTS") - (getenv "TEXINPUTS")))))) + (:stubp ,(lambda (a b) (not (filesets-files-in-same-directory-p a b)))) + (:get-file-name ,(lambda (master file) + (filesets-which-file master + (concat file ".tex") + (filesets-convert-path-list + (or (getenv "MY_TEXINPUTS") + (getenv "TEXINPUTS")))))) (:scan-depth 5)) ((:name "Bibliography") (:pattern "\\\\bibliography\\W*{\\W*\\(.+\\)\\W*}") - (:get-file-name (lambda (master file) - (filesets-which-file master - (concat file ".bib") - (filesets-convert-path-list - (or (getenv "MY_BIBINPUTS") - (getenv "BIBINPUTS"))))))))) + (:get-file-name ,(lambda (master file) + (filesets-which-file master + (concat file ".bib") + (filesets-convert-path-list + (or (getenv "MY_BIBINPUTS") + (getenv "BIBINPUTS"))))))))) ("^.+\\.el$" t (((:name "Require") (:pattern "(require\\W+'\\(.+\\))") - (:stubp (lambda (a b) (not (filesets-files-in-same-directory-p a b)))) - (:get-file-name (lambda (master file) - (filesets-which-file master - (concat file ".el") - load-path)))) + (:stubp ,(lambda (a b) (not (filesets-files-in-same-directory-p a b)))) + (:get-file-name ,(lambda (master file) + (filesets-which-file master + (concat file ".el") + load-path)))) ((:name "Load") (:pattern "(load\\(-library\\)?\\W+\"\\(.+\\)\")") (:match-number 2) - (:get-file-name (lambda (master file) - (filesets-which-file master file load-path)))))) + (:get-file-name ,(lambda (master file) + (filesets-which-file master file load-path)))))) ("^\\([A-ZÄÖÜ][a-zäöüß]+\\([A-ZÄÖÜ][a-zäöüß]+\\)+\\)$" t (((:pattern "\\<\\([A-ZÄÖÜ][a-zäöüß]+\\([A-ZÄÖÜ][a-zäöüß]+\\)+\\)\\>") (:scan-depth 5) - (:stubp (lambda (a b) (not (filesets-files-in-same-directory-p a b)))) + (:stubp ,(lambda (a b) (not (filesets-files-in-same-directory-p a b)))) (:case-sensitive t) - (:get-file-name (lambda (master file) - (filesets-which-file - master - file - (if (boundp 'emacs-wiki-directories) - emacs-wiki-directories - nil)))))))) + (:get-file-name ,(lambda (master file) + (filesets-which-file + master + file + (if (boundp 'emacs-wiki-directories) + emacs-wiki-directories + nil)))))))) "Inclusion group definitions. @@ -1227,7 +1228,7 @@ Use the viewer defined in EV-ENTRY (a valid element of (shell-quote-argument (if (functionp this) (funcall this) this)))) - fmt "") + fmt) (shell-quote-argument file)))) (output (cond @@ -2335,6 +2336,7 @@ fileset thinks this is necessary or not." (delete-file filesets-menu-cache-file)) ;;(message "Filesets: saving menu cache") (with-temp-buffer + (insert ";; -*- mode: emacs-lisp; lexical-binding:t -*-\n") (dolist (this filesets-menu-cache-contents) (if (get this 'custom-type) (progn diff --git a/lisp/recentf.el b/lisp/recentf.el index 09f3b046ef2..166963cd468 100644 --- a/lisp/recentf.el +++ b/lisp/recentf.el @@ -88,7 +88,7 @@ See the command `recentf-save-list'." :group 'recentf :version "31.1" :type 'file - :initialize 'custom-initialize-default + :initialize #'custom-initialize-default :set (lambda (symbol value) (let ((oldvalue (symbol-value symbol))) (custom-set-default symbol value) @@ -158,7 +158,7 @@ Set VARIABLE with VALUE, and force a rebuild of the recentf menu." "Name of the recentf menu." :group 'recentf :type 'string - :set 'recentf-menu-customization-changed) + :set #'recentf-menu-customization-changed) (defcustom recentf-menu-path '("File") "Path where to add the recentf menu. @@ -166,7 +166,7 @@ If nil add it at top level (see also `easy-menu-add-item')." :group 'recentf :type '(choice (const :tag "Top Level" nil) (sexp :tag "Menu Path")) - :set 'recentf-menu-customization-changed) + :set #'recentf-menu-customization-changed) (defcustom recentf-menu-before "Open File..." "Name of the menu before which the recentf menu will be added. @@ -174,7 +174,7 @@ If nil add it at end of menu (see also `easy-menu-add-item')." :group 'recentf :type '(choice (string :tag "Name") (const :tag "Last" nil)) - :set 'recentf-menu-customization-changed) + :set #'recentf-menu-customization-changed) (defcustom recentf-menu-action #'find-file "Function to invoke with a filename item of the recentf menu. @@ -391,11 +391,11 @@ See also the option `recentf-auto-cleanup'.") nil) ((numberp recentf-auto-cleanup) (run-with-idle-timer - recentf-auto-cleanup t 'recentf-cleanup)) + recentf-auto-cleanup t #'recentf-cleanup)) ((stringp recentf-auto-cleanup) (run-at-time ;; Repeat every 24 hours. - recentf-auto-cleanup (* 24 60 60) 'recentf-cleanup)))))) + recentf-auto-cleanup (* 24 60 60) #'recentf-cleanup)))))) ;;; File functions ;; @@ -508,7 +508,7 @@ Enable `recentf-mode' if it isn't already." (funcall recentf-menu-action file))) ;;;###autoload -(defalias 'recentf 'recentf-open) +(defalias 'recentf #'recentf-open) ;;; Menu building @@ -1316,7 +1316,9 @@ Optional argument N must be a valid digit number. It defaults to 1. ;;; Save/load/cleanup the recent list ;; (defconst recentf-save-file-header - ";;; Automatically generated by `recentf' on %s. -*- mode: lisp-data -*-\n" + ;; FIXME: This should arguably be a `lisp-data' file, but currently + ;; it contains and is used as an executable ELisp code. + ";;; Automatically generated by `recentf' on %s -*- mode: emacs-lisp; lexical-binding:t -*-\n" "Header to be written into the `recentf-save-file'.") (defconst recentf-save-file-coding-system diff --git a/lisp/savehist.el b/lisp/savehist.el index f5e680196f7..7d0bed37749 100644 --- a/lisp/savehist.el +++ b/lisp/savehist.el @@ -244,7 +244,7 @@ If AUTO-SAVE is non-nil, compare the saved contents to the one last saved, (insert (format-message (concat - ";; -*- mode: emacs-lisp; coding: %s -*-\n" + ";; -*- mode: emacs-lisp; lexical-binding:t; coding: %s -*-\n" ";; Minibuffer history file, automatically generated by `savehist'.\n" "\n") savehist-coding-system)) diff --git a/lisp/url/url-cookie.el b/lisp/url/url-cookie.el index d8bf76647a0..ad8e6056f83 100644 --- a/lisp/url/url-cookie.el +++ b/lisp/url/url-cookie.el @@ -56,16 +56,14 @@ (defcustom url-cookie-confirmation nil "If non-nil, confirmation by the user is required to accept HTTP cookies." - :type 'boolean - :group 'url-cookie) + :type 'boolean) (defcustom url-cookie-multiple-line nil "If nil, HTTP requests put all cookies for the server on one line. Some web servers, such as https://www.hotmail.com/, only accept cookies when they are on one line. This is broken behavior, but just try telling Microsoft that." - :type 'boolean - :group 'url-cookie) + :type 'boolean) (defvar url-cookies-changed-since-last-save nil "Whether the cookies list has changed since the last save operation.") @@ -152,7 +150,7 @@ i.e. 1970-1-1) are loaded as expiring one year from now instead." (url-cookie-clean-up) (url-cookie-clean-up t) (with-temp-buffer - (insert ";; Emacs-W3 HTTP cookies file\n" + (insert ";; Emacs-W3 HTTP cookies file -*- lexical-binding:t -*-\n" ";; Automatically generated file!!! DO NOT EDIT!!!\n\n" "(setq url-cookie-storage\n '") (let ((print-length nil) (print-level nil)) @@ -266,13 +264,11 @@ i.e. 1970-1-1) are loaded as expiring one year from now instead." (defcustom url-cookie-trusted-urls nil "A list of regular expressions matching URLs to always accept cookies from." - :type '(repeat regexp) - :group 'url-cookie) + :type '(repeat regexp)) (defcustom url-cookie-untrusted-urls nil "A list of regular expressions matching URLs to never accept cookies from." - :type '(repeat regexp) - :group 'url-cookie) + :type '(repeat regexp)) (defun url-cookie-host-can-set-p (host domain) (cond @@ -361,8 +357,7 @@ to run the `url-cookie-setup-save-timer' function manually." (set-default var val) (if (bound-and-true-p url-setup-done) (url-cookie-setup-save-timer))) - :type 'natnum - :group 'url-cookie) + :type 'natnum) (defun url-cookie-setup-save-timer () "Reset the cookie saver timer." commit ec62674cb959278240a56246cb6a958217dd17c0 Author: Juri Linkov Date: Thu Apr 10 19:20:35 2025 +0300 Fix treesit-forward-sexp/list navigation in the middle of a node. * lisp/treesit.el (treesit--forward-list-with-default): Check the thing 'sexp-default' (bug#76791). * lisp/progmodes/elixir-ts-mode.el (elixir-ts-mode): * lisp/progmodes/go-ts-mode.el (go-ts-mode): * lisp/progmodes/ruby-ts-mode.el (ruby-ts-mode): * lisp/progmodes/sh-script.el (bash-ts-mode): Add the thing 'sexp-default' to 'treesit-thing-settings'. diff --git a/lisp/progmodes/elixir-ts-mode.el b/lisp/progmodes/elixir-ts-mode.el index 9d938e10fde..43cb6d12cc3 100644 --- a/lisp/progmodes/elixir-ts-mode.el +++ b/lisp/progmodes/elixir-ts-mode.el @@ -720,6 +720,11 @@ Return nil if NODE is not a defun node or doesn't have a name." "do_block" "anonymous_function") eos))) + (sexp-default + ;; For `C-M-f' in "&|(a)" + ("(" . ,(lambda (node) + (equal (treesit-node-type (treesit-node-parent node)) + "unary_operator")))) (sentence ,(rx bos (or "call") eos)) (text diff --git a/lisp/progmodes/go-ts-mode.el b/lisp/progmodes/go-ts-mode.el index b133698c772..c2ed501fb27 100644 --- a/lisp/progmodes/go-ts-mode.el +++ b/lisp/progmodes/go-ts-mode.el @@ -306,6 +306,11 @@ "argument_list" "literal_value") eos)) + (sexp-default + ;; For `C-M-f' in "switch a |{ }" + (lambda (node) + (equal (treesit-node-type (treesit-node-parent node)) + "expression_switch_statement"))) (sentence (or "declaration" "statement"))))) diff --git a/lisp/progmodes/ruby-ts-mode.el b/lisp/progmodes/ruby-ts-mode.el index 588f729add8..c70acfd755c 100644 --- a/lisp/progmodes/ruby-ts-mode.el +++ b/lisp/progmodes/ruby-ts-mode.el @@ -1219,6 +1219,12 @@ leading double colon is not added." "hash") eos) #'ruby-ts--list-p)) + (sexp-default + ;; For `C-M-f' in "#|{a}" + ("#{" . ,(lambda (node) + (and (eq (char-after (point)) ?{) + (equal (treesit-node-type (treesit-node-parent node)) + "interpolation"))))) (sentence ,(rx bos (or "return" "body_statement" "call" @@ -1226,19 +1232,8 @@ leading double colon is not added." eos)) (text ,(lambda (node) (or (member (treesit-node-type node) - '("comment" "string_content" "heredoc_content")) - ;; for C-M-f in hash[:key] and hash['key'] - (and (member (treesit-node-text node) - '("[" "]")) - (equal (treesit-node-type - (treesit-node-parent node)) - "element_reference")) - ;; for C-M-f in "abc #{ghi} def" - (and (member (treesit-node-text node) - '("#{" "}")) - (equal (treesit-node-type - (treesit-node-parent node)) - "interpolation")))))))) + '("comment" "string_content" + "heredoc_content")))))))) ;; Imenu. (setq-local imenu-create-index-function #'ruby-ts--imenu) diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el index c4b7d0837a4..bd2178167ee 100644 --- a/lisp/progmodes/sh-script.el +++ b/lisp/progmodes/sh-script.el @@ -1662,6 +1662,12 @@ not written in Bash or sh." "command_substitution" "process_substitution") eos)) + (sexp-default + ;; For `C-M-f' in "$|(a)" + ("$(" . + ,(lambda (node) + (equal (treesit-node-type (treesit-node-parent node)) + "command_substitution")))) (sentence ,(rx bos (or "redirected_statement" "declaration_command" diff --git a/lisp/treesit.el b/lisp/treesit.el index 84a9f75d758..733a1f9c207 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -3049,6 +3049,14 @@ ARG is described in the docstring of `forward-list'." ;; Use the default function only if it doesn't go ;; over the sibling and doesn't go out of the current group. (or (when (and default-pos + ;; Fallback to the default sexp function when + ;; matching the thing 'sexp-default' at point. + (treesit-node-match-p + (treesit-node-at (if (> arg 0) (point) + (max (1- (point)) (point-min)))) + 'sexp-default t)) + (goto-char default-pos)) + (when (and default-pos (or (null sibling) (if (> arg 0) (<= default-pos (treesit-node-start sibling)) commit addcab68918a2dbbff997642e1287bd309a741bc Author: Juri Linkov Date: Thu Apr 10 19:04:12 2025 +0300 Rename treesit-toggle-sexp-mode to treesit-toggle-sexp-type. * lisp/treesit.el (treesit-toggle-sexp-type): Rename from 'treesit-toggle-sexp-mode'. Fix docstring. https://lists.gnu.org/archive/html/emacs-devel/2025-04/msg00273.html diff --git a/etc/NEWS b/etc/NEWS index e5b11b79fb6..463b59a4a9c 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -537,14 +537,14 @@ This variable has no effect when Transient Mark mode is off. ** Tree-sitter -*** New command 'treesit-toggle-sexp-mode'. -It toggles the mode of navigation for commands that move across sexp's +*** New command 'treesit-toggle-sexp-type'. +It toggles the type of navigation for commands that move across sexp's and lists, such as 'treesit-forward-sexp', 'treesit-forward-list', -'treesit-down-list', and 'treesit-up-list'. This mode can be either +'treesit-down-list', and 'treesit-up-list'. The type can be either 'list', the default, or 'sexp'. -In the default 'list' mode these commands move using syntax tables for +With the default 'list' type these commands move using syntax tables for symbols and using the thing 'list' for lists. -In 'sexp' mode these commands move by treesit-defined parser nodes +With 'sexp' type these commands move by treesit-defined parser nodes defined by the treesit thing 'sexp' as determined by 'treesit-thing-at'. --- diff --git a/lisp/treesit.el b/lisp/treesit.el index 9d9863e5575..84a9f75d758 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -3188,20 +3188,20 @@ ARG is described in the docstring of `up-list'." (user-error "At top level"))) (setq cnt (- cnt inc))))) -(defun treesit-toggle-sexp-mode () - "Toggle the mode of navigation for sexp and list commands. -This mode toggle affects navigation commands such as +(defun treesit-toggle-sexp-type () + "Toggle the type of navigation for sexp and list commands. +This type toggle affects navigation commands such as `treesit-forward-sexp', `treesit-forward-list', `treesit-down-list', `treesit-up-list'. -The mode can be `list' (the default) or `sexp'. +The type can be `list' (the default) or `sexp'. -The `list' mode uses the `list' thing defined in `treesit-thing-settings'. -See `treesit-thing-at-point'. In this mode commands use syntax tables to +The `list' type uses the `list' thing defined in `treesit-thing-settings'. +See `treesit-thing-at-point'. With this type commands use syntax tables to navigate symbols and treesit definition to navigate lists. -The `sexp' mode uses the `sexp' thing defined in `treesit-thing-settings'. -In this mode commands use only the treesit definition of parser nodes, +The `sexp' type uses the `sexp' thing defined in `treesit-thing-settings'. +With this type commands use only the treesit definition of parser nodes, without distinction between symbols and lists." (interactive) (if (not (treesit-thing-defined-p 'list (treesit-language-at (point)))) @@ -3216,7 +3216,7 @@ without distinction between symbols and lists." (if treesit-sexp-type-regexp #'treesit-forward-sexp #'treesit-forward-sexp-list)) - (message "Toggle to mode where sexp commands navigate %s" + (message "Toggle sexp type to navigate %s" (or (and treesit-sexp-type-regexp "treesit nodes") "syntax symbols and treesit lists")))) commit cb9aded6d934a384e9281e43f943281bdca5d517 Author: Eli Zaretskii Date: Thu Apr 10 16:46:00 2025 +0300 ; Fix an error in 'package-quickstart-refresh' * lisp/emacs-lisp/package.el (package-quickstart-refresh): Fix a thinko. (Bug#77701) diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index bec44a6b637..a255778af64 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -4633,8 +4633,9 @@ find FILE." (insert ";; ¡¡ This file is autogenerated by `package-quickstart-refresh', DO NOT EDIT !!\n\n") (setq package--quickstart-dir (file-name-directory (expand-file-name package-quickstart-file))) - (insert (pp '(setq package--quickstart-dir - (file-name-directory (expand-file-name load-file-name))))) + (pp '(setq package--quickstart-dir + (file-name-directory (expand-file-name load-file-name))) + (current-buffer)) (dolist (pkg package--quickstart-pkgs) (let* ((file ;; Prefer uncompiled files (and don't accept .so files). commit aa8a5090ec102a7e39d1cc7661c6dffd27dbea67 Author: Eli Zaretskii Date: Thu Apr 10 08:04:08 2025 -0400 ; Update ldefs-boot.el diff --git a/lisp/ldefs-boot.el b/lisp/ldefs-boot.el index e1e203875f4..709e12176d4 100644 --- a/lisp/ldefs-boot.el +++ b/lisp/ldefs-boot.el @@ -1452,7 +1452,7 @@ point is moved into the passwords (see `authinfo-hide-elements'). (fn)" t) (autoload 'read-passwd "auth-source" "\ -Read a password, prompting with PROMPT, and return it. +Read a password, prompting with PROMPT, and return password as a string. If optional CONFIRM is non-nil, read the password twice to make sure. Optional DEFAULT is a default password to use instead of empty input. @@ -2296,7 +2296,7 @@ Optional second arg NO-HISTORY means don't record this in the minibuffer history list `bookmark-history'. (fn BOOKMARK-NAME &optional NO-HISTORY)" t) -(defalias 'bookmark-locate 'bookmark-insert-location) +(defalias 'bookmark-locate #'bookmark-insert-location) (autoload 'bookmark-rename "bookmark" "\ Change the name of OLD-NAME bookmark to NEW-NAME name. If called from keyboard, prompt for OLD-NAME and NEW-NAME. @@ -2314,6 +2314,8 @@ name. (autoload 'bookmark-insert "bookmark" "\ Insert the text of the file pointed to by bookmark BOOKMARK-NAME. BOOKMARK-NAME is a bookmark name (a string), not a bookmark record. +Refuse to insert bookmarks if its handler's property `bookmark-inhibit', +which is a list, contains `insert'. You may have a problem using this function if the value of variable `bookmark-alist' is nil. If that happens, you need to load in some @@ -2383,8 +2385,8 @@ Display a list of existing bookmarks. The list is displayed in a buffer named `*Bookmark List*'. The leftmost column displays a D if the bookmark is flagged for deletion, or > if it is flagged for displaying." t) -(defalias 'list-bookmarks 'bookmark-bmenu-list) -(defalias 'edit-bookmarks 'bookmark-bmenu-list) +(defalias 'list-bookmarks #'bookmark-bmenu-list) +(defalias 'edit-bookmarks #'bookmark-bmenu-list) (autoload 'bookmark-bmenu-search "bookmark" "\ Incremental search of bookmarks, hiding the non-matches as we go." '(bookmark-bmenu-mode)) (defvar menu-bar-bookmark-map (let ((map (make-sparse-keymap "Bookmark functions"))) (define-key map [load] '(menu-item "Load a Bookmark File..." bookmark-load :help "Load bookmarks from a bookmark file)")) (define-key map [write] '(menu-item "Save Bookmarks As..." bookmark-write :help "Write bookmarks to a file (reading the file name with the minibuffer)")) (define-key map [save] '(menu-item "Save Bookmarks" bookmark-save :help "Save currently defined bookmarks")) (define-key map [edit] '(menu-item "Edit Bookmark List" bookmark-bmenu-list :help "Display a list of existing bookmarks")) (define-key map [delete] '(menu-item "Delete Bookmark..." bookmark-delete :help "Delete a bookmark from the bookmark list")) (define-key map [delete-all] '(menu-item "Delete all Bookmarks..." bookmark-delete-all :help "Delete all bookmarks from the bookmark list")) (define-key map [rename] '(menu-item "Rename Bookmark..." bookmark-rename :help "Change the name of a bookmark")) (define-key map [locate] '(menu-item "Insert Location..." bookmark-locate :help "Insert the name of the file associated with a bookmark")) (define-key map [insert] '(menu-item "Insert Contents..." bookmark-insert :help "Insert the text of the file pointed to by a bookmark")) (define-key map [set] '(menu-item "Set Bookmark..." bookmark-set :help "Set a bookmark named inside a file.")) (define-key map [jump] '(menu-item "Jump to Bookmark..." bookmark-jump :help "Jump to a bookmark (a point in some file)")) map)) @@ -4081,11 +4083,6 @@ See the documentation of `define-ccl-program' for the detail of CCL program. (fn CCL-PROG &rest ARGS)") (register-definition-prefixes "ccl" '("ccl-")) - -;;; Generated autoloads from cdl.el - -(register-definition-prefixes "cdl" '("cdl-")) - ;;; Generated autoloads from cedet/cedet.el @@ -4222,7 +4219,9 @@ Returns non-nil if any false statements are found. (put 'checkdoc-arguments-in-order-flag 'safe-local-variable #'booleanp) (put 'checkdoc-package-keywords-flag 'safe-local-variable #'booleanp) (put 'checkdoc-verb-check-experimental-flag 'safe-local-variable #'booleanp) +(put 'checkdoc-allow-quoting-nil-and-t 'safe-local-variable #'booleanp) (put 'checkdoc-symbol-words 'safe-local-variable #'list-of-strings-p) +(put 'checkdoc-arguments-missing-flag 'safe-local-variable 'booleanp) (put 'checkdoc-proper-noun-regexp 'safe-local-variable 'stringp) (put 'checkdoc-common-verbs-regexp 'safe-local-variable 'stringp) (autoload 'checkdoc "checkdoc" "\ @@ -4578,7 +4577,7 @@ printer proceeds to the next function on the list. This variable is not used at present, but it is defined in hopes that a future Emacs interpreter will be able to use it.") -(autoload 'cl-incf "cl-lib" "\ +(defalias 'cl-incf #'incf "\ Increment PLACE by X (1 by default). PLACE may be a symbol, or any generalized variable allowed by `setf'. The return value is the incremented value of PLACE. @@ -4586,7 +4585,8 @@ The return value is the incremented value of PLACE. If X is specified, it should be an expression that should evaluate to a number. -(fn PLACE &optional X)" nil t) +This macro is considered deprecated in favor of the built-in macro +`incf' that was added in Emacs 31.1.") (defvar cl-old-struct-compat-mode nil "\ Non-nil if Cl-Old-Struct-Compat mode is enabled. See the `cl-old-struct-compat-mode' command @@ -5392,27 +5392,29 @@ list.") ;;; Generated autoloads from emacs-lisp/cond-star.el +(push '(cond-star 1 0) package--builtin-versions) (autoload 'cond* "cond-star" "\ Extended form of traditional Lisp `cond' construct. A `cond*' construct is a series of clauses, and a clause normally has the form (CONDITION BODY...). CONDITION can be a Lisp expression, as in `cond'. -Or it can be one of `(pcase* PATTERN DATUM)', -`(bind* BINDINGS...)', or `(match* PATTERN DATUM)', +Or it can be one of`(bind* BINDINGS...)', `(match* PATTERN DATUM)', +or `(pcase* PATTERN DATUM)', + +`(bind* BINDINGS...)' means to bind BINDINGS (as if they were in `let*') +for the body of the clause, and all subsequent clauses, since the `bind*' +clause is always a non-exit clause. As a condition, it counts as true +and runs the body of the clause if the first binding's value is non-nil. + +`(match* PATTERN DATUM)' means to match DATUM against the pattern PATTERN +For its patterns, see `match*'. +The condition counts as true if PATTERN matches DATUM. `(pcase* PATTERN DATUM)' means to match DATUM against the pattern PATTERN, using the same pattern syntax as `pcase'. The condition counts as true if PATTERN matches DATUM. -`(bind* BINDINGS...)' means to bind BINDINGS (as if they were in `let*') -for the body of the clause. As a condition, it counts as true -if the first binding's value is non-nil. All the bindings are made -unconditionally for whatever scope they cover. - -`(match* PATTERN DATUM)' is an alternative to `pcase*' that uses another -syntax for its patterns, see `match*'. - When a clause's condition is true, and it exits the `cond*' or is the last clause, the value of the last expression in its body becomes the return value of the `cond*' construct. @@ -5420,12 +5422,12 @@ in its body becomes the return value of the `cond*' construct. Non-exit clause: If a clause has only one element, or if its first element is -a `bind*' clause, this clause never exits the `cond*' construct. +t or a `bind*' clause, this clause never exits the `cond*' construct. Instead, control always falls through to the next clause (if any). All bindings made in CONDITION for the BODY of the non-exit clause are passed along to the rest of the clauses in this `cond*' construct. -\\[match*\\] for documentation of the patterns for use in `match*'. +\\[match*] for documentation of the patterns for use in `match*'. (fn &rest CLAUSES)" nil t) (register-definition-prefixes "cond-star" '("cond*-" "match*")) @@ -5584,6 +5586,10 @@ For details see `conf-mode'. Exec=gimp-2.8 %U Terminal=false +(fn)" t) +(autoload 'conf-npmrc-mode "conf-mode" "\ + + (fn)" t) (register-definition-prefixes "conf-mode" '("conf-")) @@ -7716,7 +7722,7 @@ The directory name or wildcard spec that this Dired directory lists. Local to each Dired buffer. May be a list, in which case the car is the directory name and the cdr is the list of files to mention. The directory name must be absolute, but need not be fully expanded.") - (define-key ctl-x-map "d" 'dired) + (keymap-set ctl-x-map "d" #'dired) (autoload 'dired "dired" "\ \"Edit\" directory DIRNAME--delete, rename, print, etc. some files in it. Optional second argument SWITCHES specifies the options to be used @@ -7741,17 +7747,17 @@ Type \\[describe-mode] after entering Dired for more info. If DIRNAME is already in a Dired buffer, that buffer is used without refresh. (fn DIRNAME &optional SWITCHES)" t) - (define-key ctl-x-4-map "d" 'dired-other-window) + (keymap-set ctl-x-4-map "d" #'dired-other-window) (autoload 'dired-other-window "dired" "\ \"Edit\" directory DIRNAME. Like `dired' but select in another window. (fn DIRNAME &optional SWITCHES)" t) - (define-key ctl-x-5-map "d" 'dired-other-frame) + (keymap-set ctl-x-5-map "d" #'dired-other-frame) (autoload 'dired-other-frame "dired" "\ \"Edit\" directory DIRNAME. Like `dired' but make a new frame. (fn DIRNAME &optional SWITCHES)" t) - (define-key tab-prefix-map "d" 'dired-other-tab) + (keymap-set tab-prefix-map "d" #'dired-other-tab) (autoload 'dired-other-tab "dired" "\ \"Edit\" directory DIRNAME. Like `dired' but make a new tab. @@ -8117,7 +8123,7 @@ modes derived from `text-mode'\". An element with value t means \"use\" and nil means \"don't use\". There's an implicit nil at the end of the list.") (custom-autoload 'global-display-fill-column-indicator-modes "display-fill-column-indicator" t) -(register-definition-prefixes "display-fill-column-indicator" '("display-fill-column-indicator--turn-on")) +(register-definition-prefixes "display-fill-column-indicator" '("display-fill-column-indicator-" "fill-indicator--set-warning")) ;;; Generated autoloads from display-line-numbers.el @@ -8509,7 +8515,6 @@ INIT-VALUE LIGHTER KEYMAP. (fn MODE DOC [KEYWORD VAL ... &rest BODY])" nil t) (function-put 'define-minor-mode 'doc-string-elt 2) (function-put 'define-minor-mode 'lisp-indent-function 'defun) -(defalias 'define-global-minor-mode #'define-globalized-minor-mode) (autoload 'define-globalized-minor-mode "easy-mmode" "\ Make a global mode GLOBAL-MODE corresponding to buffer-local minor MODE. TURN-ON is a function that will be called with no args in every buffer @@ -8592,6 +8597,7 @@ CSS contains a list of syntax specifications of the form (CHAR . SYNTAX). (function-put 'easy-mmode-defsyntax 'lisp-indent-function 1) (define-obsolete-function-alias 'easy-mmode-define-minor-mode #'define-minor-mode "30.1") (define-obsolete-function-alias 'easy-mmode-define-global-mode #'define-globalized-minor-mode "30.1") +(define-obsolete-function-alias 'define-global-minor-mode #'define-globalized-minor-mode "31.1") (register-definition-prefixes "easy-mmode" '("easy-mmode-")) @@ -8987,16 +8993,6 @@ Run hooks in `electric-buffer-menu-mode-hook' on entry. (fn ARG)" t) (register-definition-prefixes "ebuff-menu" '("Electric-buffer-menu-" "electric-buffer-")) - -;;; Generated autoloads from echistory.el - -(autoload 'Electric-command-history-redo-expression "echistory" "\ -Edit current history line in minibuffer and execute result. -With prefix arg NOCONFIRM, execute current line as-is without editing. - -(fn &optional NOCONFIRM)" t) -(register-definition-prefixes "echistory" '("Electric-history-" "electric-")) - ;;; Generated autoloads from ecomplete.el @@ -9117,7 +9113,12 @@ arguments after setting up the Ediff buffers. (autoload 'ediff-current-file "ediff" "\ Start ediff between current buffer and its file on disk. This command can be used instead of `revert-buffer'. If there is -nothing to revert then this command fails." t) +nothing to revert then this command fails. + +Non-interactively, STARTUP-HOOKS is a list of functions that Emacs calls +without arguments after setting up the Ediff buffers. + +(fn &optional STARTUP-HOOKS)" t) (autoload 'ediff-backup "ediff" "\ Run Ediff on FILE and its backup file. Uses the latest backup, if there are several numerical backups. @@ -9687,7 +9688,62 @@ BUFFER is put back into its original major mode. ;;; Generated autoloads from emacs-lisp/eieio.el -(push '(eieio 1 4) package--builtin-versions) +(autoload 'defclass "eieio" "\ +Define NAME as a new class derived from SUPERCLASS with SLOTS. +OPTIONS-AND-DOC is used as the class' options and base documentation. +SUPERCLASSES is a list of superclasses to inherit from, with SLOTS +being the slots residing in that class definition. Supported tags are: + + :initform - Initializing form. + :initarg - Tag used during initialization. + :accessor - Tag used to create a function to access this slot. + :allocation - Specify where the value is stored. + Defaults to `:instance', but could also be `:class'. + :writer - A function symbol which will `write' an object's slot. + :reader - A function symbol which will `read' an object. + :type - The type of data allowed in this slot (see `typep'). + :documentation + - A string documenting use of this slot. + +The following are extensions on CLOS: + :custom - When customizing an object, the custom :type. Public only. + :label - A text string label used for a slot when customizing. + :group - Name of a customization group this slot belongs in. + :printer - A function to call to print the value of a slot. + See `eieio-override-prin1' as an example. + +A class can also have optional options. These options happen in place +of documentation (including a :documentation tag), in addition to +documentation, or not at all. Supported options are: + + :documentation - The doc-string used for this class. + +Options added to EIEIO: + + :allow-nil-initform - Non-nil to skip typechecking of null initforms. + :custom-groups - List of custom group names. Organizes slots into + reasonable groups for customizations. + :abstract - Non-nil to prevent instances of this class. + If a string, use as an error string if someone does + try to make an instance. + :method-invocation-order + - Control the method invocation order if there is + multiple inheritance. Valid values are: + :breadth-first - The default. + :depth-first + +Options in CLOS not supported in EIEIO: + + :metaclass - Class to use in place of `standard-class' + :default-initargs - Initargs to use when initializing new objects of + this class. + +Due to the way class options are set up, you can add any tags you wish, +and reference them using the function `class-option'. + +(fn NAME SUPERCLASSES SLOTS &rest OPTIONS-AND-DOC)" nil t) +(function-put 'defclass 'doc-string-elt 4) +(function-put 'defclass 'lisp-indent-function 'defun) (autoload 'make-instance "eieio" "\ Make a new instance of CLASS based on INITARGS. For example: @@ -9700,7 +9756,7 @@ for each slot. For example: (make-instance \\='foo :slot1 value1 :slotN valueN) (fn CLASS &rest INITARGS)") -(register-definition-prefixes "eieio" '("child-of-class-p" "defclass" "eieio-" "find-class" "obj" "oref" "oset" "same-class-p" "set-slot-value" "slot-" "with-slots")) +(register-definition-prefixes "eieio" '("child-of-class-p" "eieio-" "find-class" "obj" "oref" "oset" "same-class-p" "set-slot-value" "slot-" "with-slots")) ;;; Generated autoloads from emacs-lisp/eieio-base.el @@ -10134,7 +10190,7 @@ name (which will be attached to the mail). You will end up in a Message buffer where you can explain more about the patch. (fn SUBJECT FILE)" t) -(register-definition-prefixes "emacsbug" '("report-emacs-bug-")) +(register-definition-prefixes "emacsbug" '("report-emacs-bug-" "submit-emacs-patch-excluded-maintainers")) ;;; Generated autoloads from vc/emerge.el @@ -10658,8 +10714,8 @@ Example client certificate (CertFP) usage: (erc-tls :server \"irc.libera.chat\" :port 6697 :client-certificate - \\='(\"/home/bandali/my-cert.key\" - \"/home/bandali/my-cert.crt\")) + \\='(\"/home/bandali/my-key.pem\" + \"/home/bandali/my-cert.pem\")) See the alternative entry-point command `erc' as well as Info node `(erc) Connecting' for a fuller description of the various @@ -10939,26 +10995,29 @@ Display the documentation for TEST-OR-TEST-NAME (a symbol or ert-test). (autoload 'ert-font-lock-deftest "ert-font-lock" "\ Define test NAME (a symbol) using assertions from TEST-STR. -Other than MAJOR-MODE and TEST-STR parameters, this macro accepts -the same parameters and keywords as `ert-deftest' and is intended -to be used through `ert'. +The MAJOR-MODE symbol determines the syntax and font lock of TEST-STR. -(fn NAME () [DOCSTRING] [:expected-result RESULT-TYPE] [:tags \\='(TAG...)] MAJOR-MODE TEST-STR)" nil t) -(function-put 'ert-font-lock-deftest 'doc-string-elt 3) -(function-put 'ert-font-lock-deftest 'lisp-indent-function 2) +Except for the MAJOR-MODE and TEST-STR parameters, this macro accepts +the same arguments and keywords as `ert-deftest' and is intended to be +used through `ert'. + +(fn NAME [DOCSTRING] [:expected-result RESULT-TYPE] [:tags \\='(TAG...)] MAJOR-MODE TEST-STR)" nil t) +(function-put 'ert-font-lock-deftest 'doc-string-elt 2) +(function-put 'ert-font-lock-deftest 'lisp-indent-function 1) (autoload 'ert-font-lock-deftest-file "ert-font-lock" "\ Define test NAME (a symbol) using assertions from FILE. -FILE - path to a file with assertions in ERT resource director as -return by `ert-resource-directory'. +FILE names a file with assertions in the ERT resource directory, as +returned by `ert-resource-directory'. The MAJOR-MODE symbol determines +the syntax and font lock of FILE's contents. -Other than MAJOR-MODE and FILE parameters, this macro accepts the -same parameters and keywords as `ert-deftest' and is intended to -be used through `ert'. +Except for the MAJOR-MODE and FILE parameters, this macro accepts the +same arguments and keywords as `ert-deftest' and is intended to be used +through `ert'. -(fn NAME () [DOCSTRING] [:expected-result RESULT-TYPE] [:tags \\='(TAG...)] MAJOR-MODE FILE)" nil t) -(function-put 'ert-font-lock-deftest-file 'doc-string-elt 3) -(function-put 'ert-font-lock-deftest-file 'lisp-indent-function 2) +(fn NAME [DOCSTRING] [:expected-result RESULT-TYPE] [:tags \\='(TAG...)] MAJOR-MODE FILE)" nil t) +(function-put 'ert-font-lock-deftest-file 'doc-string-elt 2) +(function-put 'ert-font-lock-deftest-file 'lisp-indent-function 1) (autoload 'ert-font-lock-test-string "ert-font-lock" "\ Check font faces in TEST-STRING set by MODE. @@ -10976,8 +11035,6 @@ The function is meant to be run from within an ERT test. ;;; Generated autoloads from emacs-lisp/ert-x.el -(autoload 'ert-kill-all-test-buffers "ert-x" "\ -Kill all test buffers that are still live." t) (register-definition-prefixes "ert-x" '("ert-")) @@ -11893,7 +11950,11 @@ instead of `browse-url-new-window-flag'. (fn URL &optional NEW-WINDOW)") (autoload 'eww-list-bookmarks "eww" "\ -Display the bookmarks." t) +Display the eww bookmarks. +Optional argument BUILD-ONLY, when non-nil, means to build the buffer +without popping it. + +(fn &optional BUILD-ONLY)" t) (autoload 'eww-bookmark-jump "eww" "\ Default bookmark handler for EWW buffers. @@ -13372,10 +13433,6 @@ The mode's hook is called both when the mode is enabled and when it is disabled. (fn &optional ARG)" t) -(autoload 'turn-on-flyspell "flyspell" "\ -Unconditionally turn on Flyspell mode.") -(autoload 'turn-off-flyspell "flyspell" "\ -Unconditionally turn off Flyspell mode.") (autoload 'flyspell--mode-off "flyspell" "\ Turn Flyspell mode off.") (autoload 'flyspell-region "flyspell" "\ @@ -13387,6 +13444,10 @@ of a misspelled word removed when you've corrected it. (fn BEG END)" t) (autoload 'flyspell-buffer "flyspell" "\ Flyspell whole buffer." t) +(define-obsolete-function-alias 'turn-on-flyspell #'flyspell-mode "31.1") +(autoload 'turn-off-flyspell "flyspell" "\ +Unconditionally turn off Flyspell mode.") +(make-obsolete 'turn-off-flyspell 'flyspell-mode "31.1") (register-definition-prefixes "flyspell" '("flyspell-" "mail-mode-flyspell-verify" "make-flyspell-overlay" "sgml-mode-flyspell-verify" "tex")) @@ -15041,6 +15102,11 @@ Major mode for editing Go, powered by tree-sitter. Major mode for editing go.mod files, powered by tree-sitter. (fn)" t) +(autoload 'go-work-ts-mode "go-ts-mode" "\ +Major mode for editing go.work files, powered by tree-sitter. + +(fn)" t) +(add-to-list 'auto-mode-alist '("/go\\.work\\'" . go-work-ts-mode)) (register-definition-prefixes "go-ts-mode" '("go-")) @@ -15624,6 +15690,30 @@ For example, (setf (cadr x) y) is equivalent to (setcar (cdr x) y). The return value is the last VAL in the list. (fn PLACE VAL PLACE VAL ...)" nil t) +(autoload 'incf "gv" "\ +Increment generalized variable PLACE by DELTA (default to 1). + +The DELTA is first added to PLACE, and then stored in PLACE. +Return the incremented value of PLACE. + +For more information about generalized variables, see Info node +`(elisp) Generalized Variables'. + +See also `decf'. + +(fn PLACE &optional DELTA)" nil t) +(autoload 'decf "gv" "\ +Decrement generalized variable PLACE by DELTA (default to 1). + +The DELTA is first subtracted from PLACE, and then stored in PLACE. +Return the decremented value of PLACE. + +For more information about generalized variables, see Info node +`(elisp) Generalized Variables'. + +See also `incf'. + +(fn PLACE &optional DELTA)" nil t) (def-edebug-elem-spec 'gv-place '(form)) (autoload 'gv-ref "gv" "\ Return a reference to PLACE. @@ -15682,42 +15772,6 @@ Repent before ring 31 moves." t) Like `hanoi-unix', but with a 64-bit clock." t) (register-definition-prefixes "hanoi" '("hanoi-")) - -;;; Generated autoloads from mail/hashcash.el - -(autoload 'hashcash-insert-payment "hashcash" "\ -Insert X-Payment and X-Hashcash headers with a payment for ARG. - -(fn ARG)" t) -(autoload 'hashcash-insert-payment-async "hashcash" "\ -Insert X-Payment and X-Hashcash headers with a payment for ARG -Only start calculation. Results are inserted when ready. - -(fn ARG)" t) -(autoload 'hashcash-verify-payment "hashcash" "\ -Verify a hashcash payment. - -(fn TOKEN &optional RESOURCE AMOUNT)") -(autoload 'mail-add-payment "hashcash" "\ -Add X-Payment: and X-Hashcash: headers with a hashcash payment -for each recipient address. Prefix arg sets default payment temporarily. -Set ASYNC to t to start asynchronous calculation. (See -`mail-add-payment-async'). - -(fn &optional ARG ASYNC)" t) -(autoload 'mail-add-payment-async "hashcash" "\ -Add X-Payment: and X-Hashcash: headers with a hashcash payment -for each recipient address. Prefix arg sets default payment temporarily. -Calculation is asynchronous. - -(fn &optional ARG)" t) -(autoload 'mail-check-payment "hashcash" "\ -Look for a valid X-Payment: or X-Hashcash: header. -Prefix arg sets default accept amount temporarily. - -(fn &optional ARG)" t) -(register-definition-prefixes "hashcash" '("hashcash-")) - ;;; Generated autoloads from progmodes/heex-ts-mode.el @@ -15797,7 +15851,12 @@ list of properties through Custom will set the timer, thus enabling buffer local values. It sets the actual value to nil. Thus, Custom distinguishes between a nil value and other values that disable the feature, which Custom identifies with `never'. -The default is `never'.") +The default is `never'. + +Eldoc uses the echo area to display documentation. As such it +conflicts with `help-at-pt-display-when-idle' due to the use of +the echo area. If you use Eldoc, consider setting +`eldoc-help-at-pt' instead.") (custom-autoload 'help-at-pt-display-when-idle "help-at-pt" nil) (autoload 'scan-buf-move-to-region "help-at-pt" "\ Go to the start of the next region with non-nil PROP property. @@ -16499,7 +16558,7 @@ disabled. ;;; Generated autoloads from progmodes/hideshow.el -(defvar hs-special-modes-alist '((c-mode "{" "}" "/[*/]" nil nil) (c-ts-mode "{" "}" "/[*/]" nil nil) (c++-mode "{" "}" "/[*/]" nil nil) (c++-ts-mode "{" "}" "/[*/]" nil nil) (bibtex-mode ("@\\S(*\\(\\s(\\)" 1)) (java-mode "{" "}" "/[*/]" nil nil) (java-ts-mode "{" "}" "/[*/]" nil nil) (js-mode "{" "}" "/[*/]" nil) (js-ts-mode "{" "}" "/[*/]" nil) (lua-ts-mode "{\\|\\[\\[" "}\\|\\]\\]" "--" nil) (mhtml-mode "{\\|<[^/>]*?" "}\\|]*[^/]>" " ['&'], keyvalseq(KeyVals/ -AND y-src/cccp.c 11 an_extern_linkage c-src/h.h 44 an_extern_linkage c-src/h.h 56 an_extern_linkage_ptr c-src/h.h 43 +analyze_regex c-src/etags.c /^analyze_regex (char *regex_arg)$/ +andkeyvalseq prol-src/natded.prolog /^andkeyvalseq(KeyVals) --> ['&'], keyvalseq(KeyVals/ +animals c-src/h.h 81 animals cp-src/c.C 126 animals cp-src/c.C 130 -animals c-src/h.h 81 -(another-forth-word) forth-src/test-forth.fth /^: (another-forth-word) ( -- )$/ -ANSIC c-src/h.h 84 -ANSIC c-src/h.h 85 any_kboard_state c-src/emacs/src/keyboard.c /^any_kboard_state ()$/ appDidInit objcpp-src/SimpleCalc.M /^- appDidInit:sender$/ -appendixletter tex-src/texinfo.tex /^\\def\\appendixletter{\\char\\the\\appendixno}$/ +append prol-src/natded.prolog /^append([],Xs,Xs).$/ +appendToDisplay objcpp-src/SimpleCalc.M /^- appendToDisplay:(const char *)theDigit$/ +append_list prol-src/natded.prolog /^append_list([],[]).$/ +append_string pas-src/common.pas /^procedure append_string;(*($/ +append_tool_bar_item c-src/emacs/src/keyboard.c /^append_tool_bar_item (void)$/ +appendix perl-src/htlmify-cystic 24 +appendix tex-src/texinfo.tex /^\\let\\appendix=\\relax$/ +appendix tex-src/texinfo.tex /^\\outer\\def\\appendix{\\parsearg\\appendixzzz}$/ appendix_name perl-src/htlmify-cystic 13 +appendix_toc perl-src/htlmify-cystic 16 +appendixletter tex-src/texinfo.tex /^\\def\\appendixletter{\\char\\the\\appendixno}$/ appendixnoderef tex-src/texinfo.tex /^\\def\\appendixnoderef{\\ifx\\lastnode\\relax\\else$/ -appendix perl-src/htlmify-cystic 24 appendixsec tex-src/texinfo.tex /^\\let\\appendixsec=\\relax$/ appendixsec tex-src/texinfo.tex /^\\outer\\def\\appendixsec{\\parsearg\\appendixsectionzz/ appendixsection tex-src/texinfo.tex /^\\let\\appendixsection=\\relax$/ @@ -218,25 +1914,15 @@ appendixsubsubsec tex-src/texinfo.tex /^\\let\\appendixsubsubsec=\\relax$/ appendixsubsubsec tex-src/texinfo.tex /^\\outer\\def\\appendixsubsubsec{\\parsearg\\appendixsub/ appendixsubsubsection tex-src/texinfo.tex /^\\let\\appendixsubsubsection=\\relax$/ appendixsubsubseczzz tex-src/texinfo.tex /^\\def\\appendixsubsubseczzz #1{\\seccheck{appendixsub/ -appendix tex-src/texinfo.tex /^\\let\\appendix=\\relax$/ -appendix tex-src/texinfo.tex /^\\outer\\def\\appendix{\\parsearg\\appendixzzz}$/ -appendix_toc perl-src/htlmify-cystic 16 appendixzzz tex-src/texinfo.tex /^\\def\\appendixzzz #1{\\seccheck{appendix}%$/ -append_list prol-src/natded.prolog /^append_list([],[]).$/ -append prol-src/natded.prolog /^append([],Xs,Xs).$/ -append_string pas-src/common.pas /^procedure append_string;(*($/ -AppendTextString pas-src/common.pas /^function AppendTextString;(*($/ -appendToDisplay objcpp-src/SimpleCalc.M /^- appendToDisplay:(const char *)theDigit$/ -append_tool_bar_item c-src/emacs/src/keyboard.c /^append_tool_bar_item (void)$/ apply_modifiers c-src/emacs/src/keyboard.c /^apply_modifiers (int modifiers, Lisp_Object base)$/ apply_modifiers_uncached c-src/emacs/src/keyboard.c /^apply_modifiers_uncached (int modifiers, char *bas/ -/A ps-src/rfc1245.ps /^\/A { $/ aref_addr c-src/emacs/src/lisp.h /^aref_addr (Lisp_Object array, ptrdiff_t idx)$/ -AREF c-src/emacs/src/lisp.h /^AREF (Lisp_Object array, ptrdiff_t idx)$/ arg c-src/emacs/src/lisp.h 2961 arg c-src/emacs/src/lisp.h 2966 arg c-src/emacs/src/lisp.h 2971 arg c-src/h.h 13 +arg_type c-src/etags.c 250 arglist y-src/cccp.y 41 argno y-src/cccp.y 45 args c-src/emacs/src/lisp.h 2986 @@ -244,165 +1930,88 @@ args c-src/h.h 30 argsindent tex-src/texinfo.tex /^\\dimen1=\\hsize \\advance \\dimen1 by -\\defargsindent/ argsindent tex-src/texinfo.tex /^\\newskip\\defargsindent \\defargsindent=50pt$/ argsindent tex-src/texinfo.tex /^\\parshape 2 0in \\dimen0 \\defargsindent \\dimen1 / -ARGS make-src/Makefile /^ARGS=- < srclist$/ -arg_type c-src/etags.c 250 argument c-src/etags.c 253 argvals prol-src/natded.prolog /^argvals([]) --> [].$/ -Arith_Comparison c-src/emacs/src/lisp.h 3497 -ARITH_EQUAL c-src/emacs/src/lisp.h 3498 -ARITH_GRTR c-src/emacs/src/lisp.h 3501 -ARITH_GRTR_OR_EQUAL c-src/emacs/src/lisp.h 3503 -ARITH_LESS c-src/emacs/src/lisp.h 3500 -ARITH_LESS_OR_EQUAL c-src/emacs/src/lisp.h 3502 -ARITH_NOTEQUAL c-src/emacs/src/lisp.h 3499 array c.c 190 -ARRAYELTS c-src/emacs/src/lisp.h /^#define ARRAYELTS(arr) (sizeof (arr) \/ sizeof (arr/ -ARRAY_MARK_FLAG c-src/emacs/src/lisp.h 768 -ARRAYP c-src/emacs/src/lisp.h /^ARRAYP (Lisp_Object x)$/ -A ruby-src/test1.ru /^class A$/ -a ruby-src/test1.ru /^ def a()$/ -A ruby-src/test1.ru /^module A$/ -ASCII_CHAR_P c-src/emacs/src/lisp.h /^#define ASCII_CHAR_P(c) UNSIGNED_CMP (c, <, 0x80)$/ ascii c-src/emacs/src/lisp.h 1598 -ASET c-src/emacs/src/lisp.h /^ASET (Lisp_Object array, ptrdiff_t idx, Lisp_Objec/ asis tex-src/texinfo.tex /^\\def\\asis#1{#1}$/ -ASIZE c-src/emacs/src/lisp.h /^ASIZE (Lisp_Object array)$/ -Asm_help c-src/etags.c 504 -Asm_labels c-src/etags.c /^Asm_labels (FILE *inf)$/ -Asm_suffixes c-src/etags.c 493 asort cp-src/functions.cpp /^void asort(int *a, int num){$/ -ASRC make-src/Makefile /^ASRC=empty.zz empty.zz.gz$/ assemby-code-word forth-src/test-forth.fth /^code assemby-code-word ( dunno what it does )$/ -assert c-src/etags.c 135 assert c-src/etags.c /^# define assert(x) ((void) 0)$/ +assert c-src/etags.c 135 assign_neighbor cp-src/clheir.hpp /^ void assign_neighbor(int direction, location */ -associativity_assertion merc-src/accumulator.m /^:- pred associativity_assertion(module_info::in, l/ assoc_list merc-src/accumulator.m /^:- import_module assoc_list.$/ -AST_Array::AST_Array cp-src/c.C /^AST_Array::AST_Array(UTL_ScopedName *n, unsigned l/ -AST_ConcreteType::AST_ConcreteType cp-src/c.C /^AST_ConcreteType::AST_ConcreteType(AST_Decl::NodeT/ -AST_Root cp-src/c.C 92 -AT cp-src/c.C 52 +associativity_assertion merc-src/accumulator.m /^:- pred associativity_assertion(module_info::in, l/ at_end c-src/etags.c 249 at_filename c-src/etags.c 247 -/atilde ps-src/rfc1245.ps /^\/atilde \/aring \/ccedilla \/eacute \/egrave \/ecircumf/ at_language c-src/etags.c 245 at_least_one_member prol-src/natded.prolog /^at_least_one_member(X,[X|_]):-!.$/ -atom prol-src/natded.prolog /^atom(X) --> [X], {atomic(X)}.$/ -atomval prol-src/natded.prolog /^atomval(X) --> atom(X).$/ at_regexp c-src/etags.c 246 at_stdin c-src/etags.c 248 -AU cp-src/c.C 53 -aultparindent\hang tex-src/texinfo.tex /^\\footstrut\\parindent=\\defaultparindent\\hang\\textin/ +atom prol-src/natded.prolog /^atom(X) --> [X], {atomic(X)}.$/ +atomval prol-src/natded.prolog /^atomval(X) --> atom(X).$/ aultparindent tex-src/texinfo.tex /^\\newdimen\\defaultparindent \\defaultparindent = 15p/ aultparindent tex-src/texinfo.tex /^\\parindent = \\defaultparindent$/ -aUNEVALLED c-src/emacs/src/lisp.h /^ Lisp_Object (*aUNEVALLED) (Lisp_Object args)/ +aultparindent\hang tex-src/texinfo.tex /^\\footstrut\\parindent=\\defaultparindent\\hang\\textin/ +author tex-src/texinfo.tex /^ \\def\\author{\\parsearg\\authorzzz}%$/ authorfont tex-src/texinfo.tex /^ \\def\\authorfont{\\authorrm \\normalbaselineskip =/ authorrm tex-src/texinfo.tex /^\\let\\authorrm = \\secrm$/ -author tex-src/texinfo.tex /^ \\def\\author{\\parsearg\\authorzzz}%$/ authorzzz tex-src/texinfo.tex /^ \\def\\authorzzz##1{\\ifseenauthor\\else\\vskip 0pt / -AUTO_CONS c-src/emacs/src/lisp.h /^#define AUTO_CONS(name, a, b) Lisp_Object name = A/ -AUTO_CONS_EXPR c-src/emacs/src/lisp.h /^#define AUTO_CONS_EXPR(a, b) \\$/ auto_help c-src/etags.c 699 -AUTO_LIST1 c-src/emacs/src/lisp.h /^#define AUTO_LIST1(name, a) \\$/ -AUTO_LIST2 c-src/emacs/src/lisp.h /^#define AUTO_LIST2(name, a, b) \\$/ -AUTO_LIST3 c-src/emacs/src/lisp.h /^#define AUTO_LIST3(name, a, b, c) \\$/ -AUTO_LIST4 c-src/emacs/src/lisp.h /^#define AUTO_LIST4(name, a, b, c, d) \\$/ -AUTOLOADP c-src/emacs/src/lisp.h /^AUTOLOADP (Lisp_Object x)$/ -AUTO_STRING c-src/emacs/src/lisp.h /^#define AUTO_STRING(name, str) \\$/ -AVAIL_ALLOCA c-src/emacs/src/lisp.h /^#define AVAIL_ALLOCA(size) (sa_avail -= (size), al/ -backslash tex-src/texinfo.tex /^\\def\\rawbackslashxx{\\indexbackslash}%$/ +b c-src/h.h 103 +b c-src/h.h 104 +b c-src/h.h 41 +b c.c /^b ()$/ +b c.c 180 +b c.c 259 +b c.c 260 +b c.c 262 +b cp-src/c.C 132 +b ruby-src/test1.ru /^ def b()$/ +b tex-src/texinfo.tex /^\\def\\b##1{\\realbackslash b {##1}}$/ +b tex-src/texinfo.tex /^\\def\\b##1{\\realbackslash b {##1}}%$/ +b tex-src/texinfo.tex /^\\def\\b#1{{\\bf #1}}$/ +b tex-src/texinfo.tex /^\\let\\b=\\indexdummyfont$/ +b tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ backslash tex-src/texinfo.tex /^\\def\\rawbackslashxx{\\indexbackslash}% \\indexbacksl/ +backslash tex-src/texinfo.tex /^\\def\\rawbackslashxx{\\indexbackslash}%$/ balancecolumns tex-src/texinfo.tex /^\\def\\balancecolumns{%$/ -bar1 ruby-src/test1.ru /^ attr_reader(:foo1, :bar1, # comment$/ -bar c.c 143 -bar cp-src/x.cc /^XX::bar()$/ bar c-src/c.c /^void bar() {while(0) {}}$/ bar c-src/h.h 19 -Bar lua-src/test.lua /^function Square.something:Bar ()$/ -Bar perl-src/kai-test.pl /^package Bar;$/ -Barrier_Function_Pointer/t ada-src/etags-test-for.ada /^ type Barrier_Function_Pointer is access$/ +bar c.c 143 +bar cp-src/x.cc /^XX::bar()$/ +bar1 ruby-src/test1.ru /^ attr_reader(:foo1, :bar1, # comment$/ bar= ruby-src/test1.ru /^ attr_writer :bar,$/ -_bar? ruby-src/test1.ru /^ def self._bar?(abc)$/ +bas_syn prol-src/natded.prolog /^bas_syn(n(_)).$/ +base c-src/emacs/src/lisp.h 2188 +base cp-src/Range.h /^ double base (void) const { return rng_base; }$/ +base cp-src/c.C /^double base (void) const { return rng_base; }$/ base_case_ids merc-src/accumulator.m /^:- func base_case_ids(accu_goal_store) = list(accu/ base_case_ids_set merc-src/accumulator.m /^:- func base_case_ids_set(accu_goal_store) = set(a/ -base cp-src/c.C /^double base (void) const { return rng_base; }$/ -base cp-src/Range.h /^ double base (void) const { return rng_base; }$/ -base c-src/emacs/src/lisp.h 2188 -bas_syn prol-src/natded.prolog /^bas_syn(n(_)).$/ baz= ruby-src/test1.ru /^ :baz,$/ -bbbbbb c-src/h.h 113 -bbb c.c 251 bb c.c 275 -b c.c 180 -b c.c 259 -b c.c 260 -b c.c 262 -b c.c /^b ()$/ -B cp-src/c.C 122 -b cp-src/c.C 132 -B cp-src/c.C 54 -B cp-src/c.C 56 -B cp-src/c.C 74 -~B cp-src/c.C /^ ~B() {};$/ -B cp-src/c.C /^void B::B() {}$/ -B cp-src/fail.C 24 -B cp-src/fail.C 8 -b c-src/h.h 103 -b c-src/h.h 104 -b c-src/h.h 41 +bbb c.c 251 +bbbbbb c-src/h.h 113 been_warned c-src/etags.c 222 before_command_echo_length c-src/emacs/src/keyboard.c 130 before_command_key_count c-src/emacs/src/keyboard.c 129 -/BEGINBITMAP2BITc ps-src/rfc1245.ps /^\/BEGINBITMAP2BITc { $/ -/BEGINBITMAP2BIT ps-src/rfc1245.ps /^\/BEGINBITMAP2BIT { $/ -/BEGINBITMAPBWc ps-src/rfc1245.ps /^\/BEGINBITMAPBWc { $/ -/BEGINBITMAPBW ps-src/rfc1245.ps /^\/BEGINBITMAPBW { $/ -/BEGINBITMAPGRAYc ps-src/rfc1245.ps /^\/BEGINBITMAPGRAYc { $/ -/BEGINBITMAPGRAY ps-src/rfc1245.ps /^\/BEGINBITMAPGRAY { $/ -begindoublecolumns tex-src/texinfo.tex /^\\def\\begindoublecolumns{\\begingroup$/ -/BEGINPRINTCODE ps-src/rfc1245.ps /^\/BEGINPRINTCODE { $/ begin tex-src/texinfo.tex /^\\outer\\def\\begin{\\parsearg\\beginxxx}$/ +begindoublecolumns tex-src/texinfo.tex /^\\def\\begindoublecolumns{\\begingroup$/ beginxxx tex-src/texinfo.tex /^\\def\\beginxxx #1{%$/ begtoken c-src/etags.c /^#define begtoken(c) (_btk[CHAR (c)]) \/* c can star/ behaviour_info erl-src/gs_dialog.erl /^behaviour_info(callbacks) ->$/ -BE_Node cp-src/c.C 77 -BE_Node cp-src/c.C /^void BE_Node::BE_Node() {}$/ -/BF ps-src/rfc1245.ps /^\/BF { $/ -bf tex-src/texinfo.tex /^\\def\\bf{\\realbackslash bf }%$/ +bf tex-src/texinfo.tex /^ \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/ bf tex-src/texinfo.tex /^\\def\\bf{\\realbackslash bf }$/ +bf tex-src/texinfo.tex /^\\def\\bf{\\realbackslash bf }%$/ bf tex-src/texinfo.tex /^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/ bf tex-src/texinfo.tex /^\\font\\defbf=cmbx10 scaled \\magstep1 %was 1314$/ -bf tex-src/texinfo.tex /^ \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/ -Bidule/b ada-src/etags-test-for.ada /^ protected body Bidule is$/ -Bidule/b ada-src/waroquiers.ada /^ protected body Bidule is$/ -Bidule/t ada-src/etags-test-for.ada /^ protected Bidule is$/ -Bidule/t ada-src/waroquiers.ada /^ protected Bidule is$/ -bind_polling_period c-src/emacs/src/keyboard.c /^bind_polling_period (int n)$/ bind pyt-src/server.py /^ def bind(self, key, action):$/ -/BITMAPCOLORc ps-src/rfc1245.ps /^\/BITMAPCOLORc { $/ -/BITMAPCOLOR ps-src/rfc1245.ps /^\/BITMAPCOLOR { $/ -/BITMAPGRAYc ps-src/rfc1245.ps /^\/BITMAPGRAYc { $/ -/BITMAPGRAY ps-src/rfc1245.ps /^\/BITMAPGRAY { $/ -BITS_PER_BITS_WORD c-src/emacs/src/lisp.h 125 -BITS_PER_BITS_WORD c-src/emacs/src/lisp.h 129 -BITS_PER_CHAR c-src/emacs/src/lisp.h 136 -BITS_PER_EMACS_INT c-src/emacs/src/lisp.h 139 -BITS_PER_LONG c-src/emacs/src/lisp.h 138 -BITS_PER_SHORT c-src/emacs/src/lisp.h 137 +bind_polling_period c-src/emacs/src/keyboard.c /^bind_polling_period (int n)$/ bits_word c-src/emacs/src/lisp.h 123 bits_word c-src/emacs/src/lisp.h 127 -BITS_WORD_MAX c-src/emacs/src/lisp.h 124 -BITS_WORD_MAX c-src/emacs/src/lisp.h 128 bla c.c /^int bla ()$/ -BLACK cp-src/screen.hpp 12 blah tex-src/testenv.tex /^\\section{blah}$/ bletch el-src/TAGTEST.EL /^(foo::defmumble bletch beuarghh)$/ -BLOCK c-src/emacs/src/gmalloc.c /^#define BLOCK(A) (((char *) (A) - _heapbase) \/ BLO/ -BLOCKIFY c-src/emacs/src/gmalloc.c /^#define BLOCKIFY(SIZE) (((SIZE) + BLOCKSIZE - 1) \// -BLOCKLOG c-src/emacs/src/gmalloc.c 125 -BLOCKSIZE c-src/emacs/src/gmalloc.c 126 -/bl ps-src/rfc1245.ps /^\/bl { $/ -BLUE cp-src/screen.hpp 13 blv c-src/emacs/src/lisp.h 689 blv_found c-src/emacs/src/lisp.h /^blv_found (struct Lisp_Buffer_Local_Value *blv)$/ bodyindent tex-src/texinfo.tex /^\\advance\\dimen2 by -\\defbodyindent$/ @@ -411,261 +2020,141 @@ bodyindent tex-src/texinfo.tex /^\\advance\\leftskip by -\\defbodyindent$/ bodyindent tex-src/texinfo.tex /^\\advance\\leftskip by \\defbodyindent \\advance \\righ/ bodyindent tex-src/texinfo.tex /^\\exdentamount=\\defbodyindent$/ bodyindent tex-src/texinfo.tex /^\\newskip\\defbodyindent \\defbodyindent=.4in$/ -Body_Required/f ada-src/etags-test-for.ada /^ function Body_Required$/ boldbrax tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ -Boo::Boo cp-src/c.C /^Boo::Boo(Boo) :$/ -Boo cp-src/c.C 129 -Boo cp-src/c.C /^ Boo(int _i, int _a, int _b) : i(_i), a(_a), b(/ bool c.c 222 -bool_header_size c-src/emacs/src/lisp.h 1472 bool merc-src/accumulator.m /^:- import_module bool.$/ -boolvar c-src/emacs/src/lisp.h 2287 +bool_header_size c-src/emacs/src/lisp.h 1472 bool_vector_bitref c-src/emacs/src/lisp.h /^bool_vector_bitref (Lisp_Object a, EMACS_INT i)$/ -BOOL_VECTOR_BITS_PER_CHAR c-src/emacs/src/lisp.h 114 -BOOL_VECTOR_BITS_PER_CHAR c-src/emacs/src/lisp.h 115 bool_vector_bytes c-src/emacs/src/lisp.h /^bool_vector_bytes (EMACS_INT size)$/ bool_vector_data c-src/emacs/src/lisp.h /^bool_vector_data (Lisp_Object a)$/ -BOOL_VECTOR_P c-src/emacs/src/lisp.h /^BOOL_VECTOR_P (Lisp_Object a)$/ bool_vector_ref c-src/emacs/src/lisp.h /^bool_vector_ref (Lisp_Object a, EMACS_INT i)$/ bool_vector_set c-src/emacs/src/lisp.h /^bool_vector_set (Lisp_Object a, EMACS_INT i, bool / bool_vector_size c-src/emacs/src/lisp.h /^bool_vector_size (Lisp_Object a)$/ bool_vector_uchar_data c-src/emacs/src/lisp.h /^bool_vector_uchar_data (Lisp_Object a)$/ bool_vector_words c-src/emacs/src/lisp.h /^bool_vector_words (EMACS_INT size)$/ -/B ps-src/rfc1245.ps /^\/B { $/ -bracelev c-src/etags.c 2520 -/braceright ps-src/rfc1245.ps /^\/braceright \/asciitilde \/.notdef \/Adieresis \/Aring/ -/bracketright ps-src/rfc1245.ps /^\/bracketright \/asciicircum \/underscore \/grave \/a \// -/breve ps-src/rfc1245.ps /^\/breve \/dotaccent \/ring \/cedilla \/hungarumlaut \/og/ -BROWN cp-src/screen.hpp 18 +boolvar c-src/emacs/src/lisp.h 2287 br tex-src/texinfo.tex /^\\let\\br = \\par$/ -B ruby-src/test1.ru /^ class B$/ -b ruby-src/test1.ru /^ def b()$/ +bracelev c-src/etags.c 2520 bsp_DevId c-src/h.h 25 bt c-src/emacs/src/lisp.h 2988 -b tex-src/texinfo.tex /^\\def\\b#1{{\\bf #1}}$/ -b tex-src/texinfo.tex /^\\def\\b##1{\\realbackslash b {##1}}%$/ -b tex-src/texinfo.tex /^\\def\\b##1{\\realbackslash b {##1}}$/ -b tex-src/texinfo.tex /^\\let\\b=\\indexdummyfont$/ -b tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ btowc c-src/emacs/src/regex.h /^# define btowc(c) c$/ buffer c-src/emacs/src/lisp.h 2000 buffer c-src/emacs/src/regex.h 341 buffer c-src/etags.c 238 buffer c-src/h.h 119 -BUFFER_OBJFWDP c-src/emacs/src/lisp.h /^BUFFER_OBJFWDP (union Lisp_Fwd *a)$/ -BUFFERP c-src/emacs/src/lisp.h /^BUFFERP (Lisp_Object a)$/ -BUFFERSIZE objc-src/Subprocess.h 43 -buildact prol-src/natded.prolog /^buildact([SynIn],Right,RightPlus1):-$/ build prol-src/natded.prolog /^build([],Left,Left).$/ build_pure_c_string c-src/emacs/src/lisp.h /^build_pure_c_string (const char *str)$/ build_string c-src/emacs/src/lisp.h /^build_string (const char *str)$/ +buildact prol-src/natded.prolog /^buildact([SynIn],Right,RightPlus1):-$/ builtin_lisp_symbol c-src/emacs/src/lisp.h /^builtin_lisp_symbol (int index)$/ bullet tex-src/texinfo.tex /^\\def\\bullet{$\\ptexbullet$}$/ bullet tex-src/texinfo.tex /^\\let\\bullet=\\ptexbullet$/ burst c-src/h.h 28 busy c-src/emacs/src/gmalloc.c 158 -ButtonBar pyt-src/server.py /^def ButtonBar(frame, legend, ref, alternatives, co/ button_down_location c-src/emacs/src/keyboard.c 5210 button_down_time c-src/emacs/src/keyboard.c 5218 bye tex-src/texinfo.tex /^\\outer\\def\\bye{\\pagealignmacro\\tracingstats=1\\ptex/ +byte_stack c-src/emacs/src/lisp.h 3049 bytecode_dest c-src/emacs/src/lisp.h 3037 bytecode_top c-src/emacs/src/lisp.h 3036 -BYTE_MARK_STACK c-src/emacs/src/lisp.h 3181 bytepos c-src/emacs/src/lisp.h 2016 bytes_free c-src/emacs/src/gmalloc.c 314 -_bytes_free c-src/emacs/src/gmalloc.c 377 -byte_stack c-src/emacs/src/lisp.h 3049 bytes_total c-src/emacs/src/gmalloc.c 310 bytes_used c-src/emacs/src/gmalloc.c 312 -_bytes_used c-src/emacs/src/gmalloc.c 375 +c c-src/h.h /^#define c() d$/ +c c-src/h.h 106 +c c.c 180 +c tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ +c tex-src/texinfo.tex /^\\let\\c=\\comment$/ +c_ext c-src/etags.c 2271 caccacacca c.c /^caccacacca (a,b,c,d,e,f,g)$/ cacheLRUEntry_s c.c 172 cacheLRUEntry_t c.c 177 calculate_goal_info merc-src/accumulator.m /^:- pred calculate_goal_info(hlds_goal_expr::in, hl/ -CALLMANY c-src/emacs/src/lisp.h /^#define CALLMANY(f, array) (f) (ARRAYELTS (array),/ -CALLN c-src/emacs/src/lisp.h /^#define CALLN(f, ...) CALLMANY (f, ((Lisp_Object [/ +calloc c-src/emacs/src/gmalloc.c /^calloc (size_t nmemb, size_t size)$/ calloc c-src/emacs/src/gmalloc.c 1721 calloc c-src/emacs/src/gmalloc.c 66 calloc c-src/emacs/src/gmalloc.c 70 -calloc c-src/emacs/src/gmalloc.c /^calloc (size_t nmemb, size_t size)$/ can_be_null c-src/emacs/src/regex.h 370 cancel_echoing c-src/emacs/src/keyboard.c /^cancel_echoing (void)$/ canonicalize_filename c-src/etags.c /^canonicalize_filename (register char *fn)$/ capsenumerate tex-src/texinfo.tex /^\\def\\capsenumerate{\\enumerate{A}}$/ -CAR c-src/emacs/src/lisp.h /^CAR (Lisp_Object c)$/ -CAR_SAFE c-src/emacs/src/lisp.h /^CAR_SAFE (Lisp_Object c)$/ cartbot tex-src/texinfo.tex /^\\def\\cartbot{\\hbox to \\cartouter{\\hskip\\lskip$/ cartouche tex-src/texinfo.tex /^\\long\\def\\cartouche{%$/ carttop tex-src/texinfo.tex /^\\def\\carttop{\\hbox to \\cartouter{\\hskip\\lskip$/ case_Lisp_Int c-src/emacs/src/lisp.h 438 -cat_atoms prol-src/natded.prolog /^cat_atoms(A1,A2,A3):-$/ -CATCHER c-src/emacs/src/lisp.h 3021 +cat c-src/h.h 81 cat cp-src/c.C 126 cat cp-src/c.C 130 -cat c-src/h.h 81 cat prol-src/natded.prolog /^cat(A, Alpha@Beta, Ass3, Qs3, tree(fe,A:Alpha@Beta/ -C_AUTO c-src/etags.c 2198 +cat_atoms prol-src/natded.prolog /^cat_atoms(A1,A2,A3):-$/ cbl tex-src/texinfo.tex /^\\def\\cbl{{\\circle\\char'012\\hskip -6pt}}$/ cbr tex-src/texinfo.tex /^\\def\\cbr{{\\hskip 6pt\\circle\\char'011}}$/ -c c.c 180 cccccccccc c-src/h.h 115 -C cp-src/fail.C 25 -C cp-src/fail.C 9 -C cp-src/fail.C /^ C(int i) {x = i;}$/ -c c-src/h.h 106 -c c-src/h.h /^#define c() d$/ -%cdiff make-src/Makefile /^%cdiff: CTAGS% CTAGS ${infiles}$/ cdr c-src/emacs/src/lisp.h 1159 -CDR c-src/emacs/src/lisp.h /^CDR (Lisp_Object c)$/ -CDR_SAFE c-src/emacs/src/lisp.h /^CDR_SAFE (Lisp_Object c)$/ cell y-src/parse.y 279 center tex-src/texinfo.tex /^\\def\\center{\\parsearg\\centerzzz}$/ centerzzz tex-src/texinfo.tex /^\\def\\centerzzz #1{{\\advance\\hsize by -\\leftskip$/ -C_entries c-src/etags.c /^C_entries (int c_ext, FILE *inf)$/ -C_EXT c-src/etags.c 2193 -c_ext c-src/etags.c 2271 -CFLAGS make-src/Makefile /^CFLAGS=${WARNINGS} -ansi -g3 # -pg -O$/ -/cfs ps-src/rfc1245.ps /^\/cfs { $/ cgrep html-src/software.html /^cgrep$/ chain c-src/emacs/src/lisp.h 1162 chain c-src/emacs/src/lisp.h 2206 chain c-src/emacs/src/lisp.h 2396 -chain_subst_2 merc-src/accumulator.m /^:- pred chain_subst_2(list(A)::in, map(A, B)::in, / chain_subst merc-src/accumulator.m /^:- func chain_subst(accu_subst, accu_subst) = accu/ -ChangeFileType pas-src/common.pas /^function ChangeFileType; (*(FileName : NameString;/ +chain_subst_2 merc-src/accumulator.m /^:- pred chain_subst_2(list(A)::in, map(A, B)::in, / chapbf tex-src/texinfo.tex /^\\let\\chapbf=\\chaprm$/ chapbreak tex-src/texinfo.tex /^\\def\\chapbreak{\\dobreak \\chapheadingskip {-4000}}$/ -chapentryfonts tex-src/texinfo.tex /^\\def\\chapentryfonts{\\secfonts \\rm}$/ -chapentry tex-src/texinfo.tex /^\\def\\chapentry#1#2#3{\\dochapentry{#2\\labelspace#1}/ chapentry tex-src/texinfo.tex /^ \\let\\chapentry = \\shortchapentry$/ +chapentry tex-src/texinfo.tex /^\\def\\chapentry#1#2#3{\\dochapentry{#2\\labelspace#1}/ +chapentryfonts tex-src/texinfo.tex /^\\def\\chapentryfonts{\\secfonts \\rm}$/ chapfonts tex-src/texinfo.tex /^\\def\\chapfonts{%$/ -CHAPFopen tex-src/texinfo.tex /^\\def\\CHAPFopen{$/ -CHAPFplain tex-src/texinfo.tex /^\\def\\CHAPFplain{$/ chapheading tex-src/texinfo.tex /^\\def\\chapheading{\\parsearg\\chapheadingzzz}$/ chapheadingzzz tex-src/texinfo.tex /^\\def\\chapheadingzzz #1{\\chapbreak %$/ chapmacro tex-src/texinfo.tex /^\\global\\let\\chapmacro=\\chfopen$/ chapmacro tex-src/texinfo.tex /^\\global\\let\\chapmacro=\\chfplain$/ chapoddpage tex-src/texinfo.tex /^\\def\\chapoddpage{\\chappager \\ifodd\\pageno \\else \\h/ chappager tex-src/texinfo.tex /^\\def\\chappager{\\par\\vfill\\supereject}$/ -CHAPPAGodd tex-src/texinfo.tex /^\\def\\CHAPPAGodd{$/ -CHAPPAGoff tex-src/texinfo.tex /^\\def\\CHAPPAGoff{$/ -CHAPPAGon tex-src/texinfo.tex /^\\def\\CHAPPAGon{$/ -chapternofonts tex-src/texinfo.tex /^\\def\\chapternofonts{%$/ chapter tex-src/texinfo.tex /^\\let\\chapter=\\relax$/ chapter tex-src/texinfo.tex /^\\outer\\def\\chapter{\\parsearg\\chapterzzz}$/ +chapternofonts tex-src/texinfo.tex /^\\def\\chapternofonts{%$/ chapterzzz tex-src/texinfo.tex /^\\def\\chapterzzz #1{\\seccheck{chapter}%$/ -CHARACTERBITS c-src/emacs/src/lisp.h 2457 -CHAR_ALT c-src/emacs/src/lisp.h 2445 -CHAR_BIT c-src/emacs/src/lisp.h 2957 -CHAR_BIT c-src/emacs/src/lisp.h 2959 -CHAR_BIT c-src/emacs/src/lisp.h 2964 -CHAR_BIT c-src/emacs/src/lisp.h 2969 -CHAR_BIT c-src/emacs/src/lisp.h 2974 -CHAR_BIT c-src/emacs/src/lisp.h 2978 -CHAR_BIT c-src/emacs/src/lisp.h 2983 +char tex-src/texinfo.tex /^\\def\\char{\\realbackslash char}$/ +char tex-src/texinfo.tex /^\\def\\char{\\realbackslash char}%$/ char_bits c-src/emacs/src/lisp.h 2443 -CHAR_CLASS_MAX_LENGTH c-src/emacs/src/regex.h 593 -CHAR_CLASS_MAX_LENGTH c-src/emacs/src/regex.h 597 -CHAR_CLASS_MAX_LENGTH c-src/emacs/src/regex.h 605 -CHAR c-src/etags.c /^#define CHAR(x) ((unsigned int)(x) & (CHARS - 1))/ -CHAR_CTL c-src/emacs/src/lisp.h 2449 -CHAR_HYPER c-src/emacs/src/lisp.h 2447 -CHAR_META c-src/emacs/src/lisp.h 2450 -CHAR_MODIFIER_MASK c-src/emacs/src/lisp.h 2452 +char_table_specials c-src/emacs/src/lisp.h 1692 charpos c-src/emacs/src/lisp.h 2011 -CHARS c-src/etags.c 157 charset_unibyte c-src/emacs/src/regex.h 410 -CHAR_SHIFT c-src/emacs/src/lisp.h 2448 -CHAR_SUPER c-src/emacs/src/lisp.h 2446 -CHAR_TABLE_EXTRA_SLOTS c-src/emacs/src/lisp.h /^CHAR_TABLE_EXTRA_SLOTS (struct Lisp_Char_Table *ct/ -CHAR_TABLE_P c-src/emacs/src/lisp.h /^CHAR_TABLE_P (Lisp_Object a)$/ -CHAR_TABLE_REF_ASCII c-src/emacs/src/lisp.h /^CHAR_TABLE_REF_ASCII (Lisp_Object ct, ptrdiff_t id/ -CHAR_TABLE_REF c-src/emacs/src/lisp.h /^CHAR_TABLE_REF (Lisp_Object ct, int idx)$/ -CHAR_TABLE_SET c-src/emacs/src/lisp.h /^CHAR_TABLE_SET (Lisp_Object ct, int idx, Lisp_Obje/ -char_table_specials c-src/emacs/src/lisp.h 1692 -CHAR_TABLE_STANDARD_SLOTS c-src/emacs/src/lisp.h 1697 -CHARTAB_SIZE_BITS_0 c-src/emacs/src/lisp.h 1567 -CHARTAB_SIZE_BITS_1 c-src/emacs/src/lisp.h 1568 -CHARTAB_SIZE_BITS_2 c-src/emacs/src/lisp.h 1569 -CHARTAB_SIZE_BITS_3 c-src/emacs/src/lisp.h 1570 -CHARTAB_SIZE_BITS c-src/emacs/src/lisp.h 1565 -char tex-src/texinfo.tex /^\\def\\char{\\realbackslash char}%$/ -char tex-src/texinfo.tex /^\\def\\char{\\realbackslash char}$/ chartonmstr pas-src/common.pas /^function chartonmstr; (*($/ -CHAR_TYPE_SIZE y-src/cccp.y 87 -CHAR y-src/cccp.c 7 -CHECK_ARRAY c-src/emacs/src/lisp.h /^CHECK_ARRAY (Lisp_Object x, Lisp_Object predicate)/ -CHECK_BOOL_VECTOR c-src/emacs/src/lisp.h /^CHECK_BOOL_VECTOR (Lisp_Object x)$/ -CHECK_BUFFER c-src/emacs/src/lisp.h /^CHECK_BUFFER (Lisp_Object x)$/ -CHECK_CONS c-src/emacs/src/lisp.h /^CHECK_CONS (Lisp_Object x)$/ +checkQuotation php-src/lce_functions.php /^ function checkQuotation($str)$/ check_cons_list c-src/emacs/src/lisp.h /^# define check_cons_list() lisp_h_check_cons_list/ checker make-src/Makefile /^checker:$/ -CHECKFLAGS make-src/Makefile /^CHECKFLAGS=-DDEBUG -Wno-unused-function$/ checkhdr c-src/emacs/src/gmalloc.c /^checkhdr (const struct hdr *hdr)$/ checkiso html-src/software.html /^checkiso$/ -CHECK_LISP_OBJECT_TYPE c-src/emacs/src/lisp.h 571 -CHECK_LISP_OBJECT_TYPE c-src/emacs/src/lisp.h 572 -CHECK_LISP_OBJECT_TYPE c-src/emacs/src/lisp.h 579 -CHECK_LIST_CONS c-src/emacs/src/lisp.h /^# define CHECK_LIST_CONS(x, y) lisp_h_CHECK_LIST_C/ -CHECK_LIST c-src/emacs/src/lisp.h /^CHECK_LIST (Lisp_Object x)$/ -CHECK_NATNUM c-src/emacs/src/lisp.h /^CHECK_NATNUM (Lisp_Object x)$/ -CHECK_NUMBER_CAR c-src/emacs/src/lisp.h /^CHECK_NUMBER_CAR (Lisp_Object x)$/ -CHECK_NUMBER_CDR c-src/emacs/src/lisp.h /^CHECK_NUMBER_CDR (Lisp_Object x)$/ -CHECK_NUMBER_COERCE_MARKER c-src/emacs/src/lisp.h /^#define CHECK_NUMBER_COERCE_MARKER(x) \\$/ -CHECK_NUMBER c-src/emacs/src/lisp.h /^# define CHECK_NUMBER(x) lisp_h_CHECK_NUMBER (x)$/ -CHECK_NUMBER_OR_FLOAT_COERCE_MARKER c-src/emacs/src/lisp.h /^#define CHECK_NUMBER_OR_FLOAT_COERCE_MARKER(x) / -CHECK_NUMBER_OR_FLOAT c-src/emacs/src/lisp.h /^CHECK_NUMBER_OR_FLOAT (Lisp_Object x)$/ -CHECKOBJS make-src/Makefile /^CHECKOBJS=chkmalloc.o chkxm.o$/ -CHECK_PROCESS c-src/emacs/src/lisp.h /^CHECK_PROCESS (Lisp_Object x)$/ -checkQuotation php-src/lce_functions.php /^ function checkQuotation($str)$/ -CHECK_RANGED_INTEGER c-src/emacs/src/lisp.h /^#define CHECK_RANGED_INTEGER(x, lo, hi) \\$/ -CHECK_STRING_CAR c-src/emacs/src/lisp.h /^CHECK_STRING_CAR (Lisp_Object x)$/ -CHECK_SYMBOL c-src/emacs/src/lisp.h /^# define CHECK_SYMBOL(x) lisp_h_CHECK_SYMBOL (x)$/ -CHECK_TYPE c-src/emacs/src/lisp.h /^# define CHECK_TYPE(ok, predicate, x) lisp_h_CHECK/ -CHECK_TYPE_RANGED_INTEGER c-src/emacs/src/lisp.h /^#define CHECK_TYPE_RANGED_INTEGER(type, x) \\$/ -CHECK_VECTOR c-src/emacs/src/lisp.h /^CHECK_VECTOR (Lisp_Object x)$/ -CHECK_VECTOR_OR_STRING c-src/emacs/src/lisp.h /^CHECK_VECTOR_OR_STRING (Lisp_Object x)$/ -CHECK_WINDOW c-src/emacs/src/lisp.h /^CHECK_WINDOW (Lisp_Object x)$/ chfopen tex-src/texinfo.tex /^\\def\\chfopen #1#2{\\chapoddpage {\\chapfonts$/ chfplain tex-src/texinfo.tex /^\\def\\chfplain #1#2{%$/ childDidExit objc-src/Subprocess.m /^- childDidExit$/ chunks_free c-src/emacs/src/gmalloc.c 313 -_chunks_free c-src/emacs/src/gmalloc.c 376 chunks_used c-src/emacs/src/gmalloc.c 311 -_chunks_used c-src/emacs/src/gmalloc.c 374 +cindex tex-src/texinfo.tex /^\\def\\cindex {\\cpindex}$/ cindexsub tex-src/texinfo.tex /^\\def\\cindexsub {\\begingroup\\obeylines\\cindexsub}$/ cindexsub tex-src/texinfo.tex /^\\gdef\\cindexsub "#1" #2^^M{\\endgroup %$/ -cindex tex-src/texinfo.tex /^\\def\\cindex {\\cpindex}$/ -Circle.getPos lua-src/test.lua /^function Circle.getPos ()$/ -cite tex-src/texinfo.tex /^\\def\\cite##1{\\realbackslash cite {##1}}%$/ cite tex-src/texinfo.tex /^\\def\\cite##1{\\realbackslash cite {##1}}$/ +cite tex-src/texinfo.tex /^\\def\\cite##1{\\realbackslash cite {##1}}%$/ cite tex-src/texinfo.tex /^\\let\\cite=\\indexdummyfont$/ cite tex-src/texinfo.tex /^\\let\\cite=\\smartitalic$/ -C_JAVA c-src/etags.c 2197 cjava c-src/etags.c 2936 -Cjava_entries c-src/etags.c /^Cjava_entries (FILE *inf)$/ -Cjava_help c-src/etags.c 551 -Cjava_suffixes c-src/etags.c 549 -CK_ABS_C y-src/parse.y /^#define CK_ABS_C(x) if((x)MAX_COL)/ -CK_ABS_R y-src/parse.y /^#define CK_ABS_R(x) if((x)MAX_ROW)/ -CK_REL_C y-src/parse.y /^#define CK_REL_C(x) if( ((x)>0 && MAX_COL-(x)0 && MAX_ROW-(x)/ -/dieresis ps-src/rfc1245.ps /^\/dieresis \/.notdef \/AE \/Oslash \/.notdef \/.notdef \// dignorerest c-src/etags.c 2463 direntry tex-src/texinfo.tex /^\\def\\direntry{\\begingroup\\direntryxxx}$/ direntryxxx tex-src/texinfo.tex /^\\long\\def\\direntryxxx #1\\end direntry{\\endgroup\\ig/ discard-input c-src/emacs/src/keyboard.c /^DEFUN ("discard-input", Fdiscard_input, Sdiscard_i/ discard_mouse_events c-src/emacs/src/keyboard.c /^discard_mouse_events (void)$/ -discrete_location cp-src/clheir.hpp 56 discrete_location cp-src/clheir.hpp /^ discrete_location(int xi, int yi, int zi):$/ +discrete_location cp-src/clheir.hpp 56 display cp-src/conway.cpp /^void display(void)$/ display tex-src/texinfo.tex /^\\def\\display{\\begingroup\\inENV %This group ends at/ -DisposeANameList pas-src/common.pas /^procedure DisposeANameList( $/ -DisposeNameList pas-src/common.pas /^procedure DisposeNameList;$/ disposetextstring pas-src/common.pas /^procedure disposetextstring;(*($/ -/dmatrix ps-src/rfc1245.ps /^\/dmatrix matrix def$/ dmn tex-src/texinfo.tex /^\\def\\dmn#1{\\thinspace #1}$/ dnone c-src/etags.c 2460 -/dnormalize ps-src/rfc1245.ps /^\/dnormalize {$/ dobreak tex-src/texinfo.tex /^\\def\\dobreak#1#2{\\par\\ifdim\\lastskip<#1\\removelast/ doc c-src/emacs/src/lisp.h 1689 dochapentry tex-src/texinfo.tex /^\\def\\dochapentry#1#2{%$/ docodeindex tex-src/texinfo.tex /^\\def\\docodeindex#1{\\edef\\indexname{#1}\\parsearg\\si/ +dog c-src/h.h 81 dog cp-src/c.C 126 dog cp-src/c.C 130 -dog c-src/h.h 81 -doindex tex-src/texinfo.tex /^\\def\\doindex#1{\\edef\\indexname{#1}\\parsearg\\single/ doind tex-src/texinfo.tex /^\\def\\doind #1#2{%$/ +doindex tex-src/texinfo.tex /^\\def\\doindex#1{\\edef\\indexname{#1}\\parsearg\\single/ donoderef tex-src/texinfo.tex /^\\def\\donoderef{\\ifx\\lastnode\\relax\\else$/ dontindex tex-src/texinfo.tex /^\\def\\dontindex #1{}$/ dopageno tex-src/texinfo.tex /^\\def\\dopageno#1{{\\rm #1}}$/ @@ -1027,13 +2392,11 @@ doprintindex tex-src/texinfo.tex /^\\def\\doprintindex#1{%$/ dosecentry tex-src/texinfo.tex /^\\def\\dosecentry#1#2{%$/ dosetq tex-src/texinfo.tex /^\\def\\dosetq #1#2{{\\let\\folio=0 \\turnoffactive%$/ doshortpageno tex-src/texinfo.tex /^\\def\\doshortpageno#1{{\\rm #1}}$/ -DOS_NT c-src/etags.c 117 -DOS_NT c-src/etags.c 118 dosubind tex-src/texinfo.tex /^\\def\\dosubind #1#2#3{%$/ dosubsecentry tex-src/texinfo.tex /^\\def\\dosubsecentry#1#2{%$/ dosubsubsecentry tex-src/texinfo.tex /^\\def\\dosubsubsecentry#1#2{%$/ -dotfill tex-src/texinfo.tex /^\\noindent\\hskip\\secondaryindent\\hbox{#1}\\indexdotf/ dotfill tex-src/texinfo.tex /^ \\null\\nobreak\\indexdotfill % Have leaders before/ +dotfill tex-src/texinfo.tex /^\\noindent\\hskip\\secondaryindent\\hbox{#1}\\indexdotf/ dots tex-src/texinfo.tex /^\\def\\dots{$\\ldots$}$/ dots tex-src/texinfo.tex /^\\def\\dots{\\realbackslash dots }%$/ dots tex-src/texinfo.tex /^\\def\\dots{\\realbackslash dots}$/ @@ -1041,11 +2404,8 @@ dots tex-src/texinfo.tex /^\\let\\dots=\\indexdummydots$/ dots tex-src/texinfo.tex /^\\let\\dots=\\ptexdots$/ double_click_count c-src/emacs/src/keyboard.c 5222 doublecolumnout tex-src/texinfo.tex /^\\def\\doublecolumnout{\\splittopskip=\\topskip \\split/ -/dpi ps-src/rfc1245.ps /^\/dpi 72 0 dmatrix defaultmatrix dtransform$/ -/D ps-src/rfc1245.ps /^\/D {curveto} bind def$/ drag_n_drop_syms c-src/emacs/src/keyboard.c 4629 dribble c-src/emacs/src/keyboard.c 236 -D ruby-src/test1.ru /^class ::D; end$/ dsharpseen c-src/etags.c 2461 dummies tex-src/texinfo.tex /^{\\indexdummies % Must do this here, since \\bf, etc/ dummy1 cp-src/burton.cpp /^::dummy::dummy test::dummy1(void)$/ @@ -1064,79 +2424,45 @@ dummyfont tex-src/texinfo.tex /^\\let\\r=\\indexdummyfont$/ dummyfont tex-src/texinfo.tex /^\\let\\samp=\\indexdummyfont$/ dummyfont tex-src/texinfo.tex /^\\let\\sc=\\indexdummyfont$/ dummyfont tex-src/texinfo.tex /^\\let\\strong=\\indexdummyfont$/ -dummyfont tex-src/texinfo.tex /^\\let\\tclose=\\indexdummyfont$/ dummyfont tex-src/texinfo.tex /^\\let\\t=\\indexdummyfont$/ +dummyfont tex-src/texinfo.tex /^\\let\\tclose=\\indexdummyfont$/ dummyfont tex-src/texinfo.tex /^\\let\\var=\\indexdummyfont$/ dummyfont tex-src/texinfo.tex /^\\let\\w=\\indexdummyfont$/ dummytex tex-src/texinfo.tex /^\\let\\TeX=\\indexdummytex$/ -DUMPED c-src/emacs/src/gmalloc.c 80 dump pyt-src/server.py /^ def dump(self, folded):$/ eabs c-src/emacs/src/lisp.h /^#define eabs(x) ((x) < 0 ? -(x) : (x))$/ -Ealphaenumerate tex-src/texinfo.tex /^\\def\\Ealphaenumerate{\\Eenumerate}$/ eassert c-src/emacs/src/lisp.h /^# define eassert(cond) \\$/ eassert c-src/emacs/src/lisp.h /^# define eassert(cond) ((void) (false && (cond))) / eassume c-src/emacs/src/lisp.h /^# define eassume(cond) \\$/ eassume c-src/emacs/src/lisp.h /^# define eassume(cond) assume (cond)$/ eax c-src/sysdep.h 31 eax c-src/sysdep.h 33 -Ecapsenumerate tex-src/texinfo.tex /^\\def\\Ecapsenumerate{\\Eenumerate}$/ -Ecartouche tex-src/texinfo.tex /^\\def\\Ecartouche{%$/ echo_add_key c-src/emacs/src/keyboard.c /^echo_add_key (Lisp_Object c)$/ echo_char c-src/emacs/src/keyboard.c /^echo_char (Lisp_Object c)$/ echo_dash c-src/emacs/src/keyboard.c /^echo_dash (void)$/ -echoing c-src/emacs/src/keyboard.c 154 echo_kboard c-src/emacs/src/keyboard.c 166 echo_keystrokes_p c-src/emacs/src/keyboard.c /^echo_keystrokes_p (void)$/ echo_length c-src/emacs/src/keyboard.c /^echo_length (void)$/ echo_message_buffer c-src/emacs/src/keyboard.c 171 echo_now c-src/emacs/src/keyboard.c /^echo_now (void)$/ echo_truncate c-src/emacs/src/keyboard.c /^echo_truncate (ptrdiff_t nchars)$/ -Edescription tex-src/texinfo.tex /^\\def\\Edescription{\\Etable}% Necessary kludge.$/ -%ediff make-src/Makefile /^%ediff: ETAGS% ETAGS ${infiles}$/ -Edisplay tex-src/texinfo.tex /^\\def\\Edisplay{\\endgroup\\afterenvbreak}%$/ +echoing c-src/emacs/src/keyboard.c 154 editItem pyt-src/server.py /^ def editItem(self):$/ editsite pyt-src/server.py /^ def editsite(self, site):$/ edituser pyt-src/server.py /^ def edituser(self, user):$/ -Eexample tex-src/texinfo.tex /^\\def\\Eexample{\\Elisp}$/ -Eflushleft tex-src/texinfo.tex /^\\def\\Eflushleft{\\endgroup\\afterenvbreak}%$/ -Eflushright tex-src/texinfo.tex /^\\def\\Eflushright{\\endgroup\\afterenvbreak}%$/ -Eformat tex-src/texinfo.tex /^\\def\\Eformat{\\endgroup\\afterenvbreak}$/ -Eftable tex-src/texinfo.tex /^\\def\\Eftable{\\endgraf\\endgroup\\afterenvbreak}%$/ egetenv c-src/emacs/src/lisp.h /^egetenv (const char *var)$/ -Egroup tex-src/texinfo.tex /^ \\def\\Egroup{\\egroup\\endgroup}%$/ -Eifclear tex-src/texinfo.tex /^\\def\\Eifclear{}$/ -Eifset tex-src/texinfo.tex /^\\def\\Eifset{}$/ -Eiftex tex-src/texinfo.tex /^\\def\\Eiftex{}$/ -ELEM_I c-src/h.h 3 -Elisp tex-src/texinfo.tex /^\\def\\Elisp{\\endgroup\\afterenvbreak}%$/ -ELSRC make-src/Makefile /^ELSRC=TAGTEST.EL emacs\/lisp\/progmodes\/etags.el$/ emacs_abort c-src/emacs/src/lisp.h /^extern _Noreturn void emacs_abort (void) NO_INLINE/ -EMACS_INT c-src/emacs/src/lisp.h 103 -EMACS_INT c-src/emacs/src/lisp.h 91 -EMACS_INT c-src/emacs/src/lisp.h 96 -EMACS_INT_MAX c-src/emacs/src/lisp.h 105 -EMACS_INT_MAX c-src/emacs/src/lisp.h 93 -EMACS_INT_MAX c-src/emacs/src/lisp.h 98 -EMACS_LISP_H c-src/emacs/src/lisp.h 22 -EMACS_NAME c-src/etags.c 786 -EMACS_UINT c-src/emacs/src/lisp.h 104 -EMACS_UINT c-src/emacs/src/lisp.h 92 -EMACS_UINT c-src/emacs/src/lisp.h 97 emph tex-src/texinfo.tex /^\\def\\emph##1{\\realbackslash emph {##1}}$/ emph tex-src/texinfo.tex /^\\let\\emph=\\indexdummyfont$/ emph tex-src/texinfo.tex /^\\let\\emph=\\smartitalic$/ -EmptyNmStr pas-src/common.pas /^function EmptyNmStr(* : NameString*);$/ -/ENDBITMAP ps-src/rfc1245.ps /^\/ENDBITMAP {$/ end c-src/emacs/src/keyboard.c 8753 end c-src/emacs/src/lisp.h 2039 end c-src/emacs/src/regex.h 432 -enddoublecolumns tex-src/texinfo.tex /^\\def\\enddoublecolumns{\\output={\\balancecolumns}\\ej/ -/ENDPRINTCODE ps-src/rfc1245.ps /^\/ENDPRINTCODE {$/ end tex-src/texinfo.tex /^\\def\\end{\\parsearg\\endxxx}$/ +enddoublecolumns tex-src/texinfo.tex /^\\def\\enddoublecolumns{\\output={\\balancecolumns}\\ej/ endtoken c-src/etags.c /^#define endtoken(c) (_etk[CHAR (c)]) \/* c ends tok/ endxxx tex-src/texinfo.tex /^\\def\\endxxx #1{%$/ enter_critical_section c-src/h.h 116 -ENTRY c-src/sysdep.h /^#define ENTRY(name) \\$/ entry perl-src/htlmify-cystic 218 entry perl-src/htlmify-cystic 234 entry perl-src/htlmify-cystic 245 @@ -1146,69 +2472,42 @@ entry perl-src/htlmify-cystic 276 entry perl-src/htlmify-cystic 281 entry perl-src/htlmify-cystic 296 entry tex-src/texinfo.tex /^\\def\\entry #1#2{\\begingroup$/ -ENUM_BF c-src/emacs/src/lisp.h /^#define ENUM_BF(TYPE) enum TYPE$/ -ENUM_BF c-src/emacs/src/lisp.h /^#define ENUM_BF(TYPE) unsigned int$/ enumerate tex-src/texinfo.tex /^\\def\\enumerate{\\parsearg\\enumeratezzz}$/ enumeratey tex-src/texinfo.tex /^\\def\\enumeratey #1 #2\\endenumeratey{%$/ enumeratezzz tex-src/texinfo.tex /^\\def\\enumeratezzz #1{\\enumeratey #1 \\endenumerate/ -ENVcheck tex-src/texinfo.tex /^\\def\\ENVcheck{%$/ -Environment tex-src/gzip.texi /^@node Environment, Tapes, Advanced usage, Top$/ -/E ps-src/rfc1245.ps /^\/E {lineto} bind def$/ -EQ c-src/emacs/src/lisp.h /^# define EQ(x, y) lisp_h_EQ (x, y)$/ equalsKey objcpp-src/SimpleCalc.M /^- equalsKey:sender$/ -EQUAL y-src/cccp.c 12 equiv tex-src/texinfo.tex /^\\def\\equiv{\\leavevmode\\lower.1ex\\hbox to 1em{\\hfil/ equiv tex-src/texinfo.tex /^\\def\\equiv{\\realbackslash equiv}$/ -Equotation tex-src/texinfo.tex /^\\def\\Equotation{\\par\\endgroup\\afterenvbreak}%$/ erlang_atom c-src/etags.c /^erlang_atom (char *s)$/ erlang_attribute c-src/etags.c /^erlang_attribute (char *s)$/ erlang_func c-src/etags.c /^erlang_func (char *s, char *last)$/ -Erlang_functions c-src/etags.c /^Erlang_functions (FILE *inf)$/ -Erlang_help c-src/etags.c 567 -Erlang_suffixes c-src/etags.c 565 -ERLSRC make-src/Makefile /^ERLSRC=gs_dialog.erl lines.erl lists.erl$/ error c-src/emacs/src/lisp.h /^extern _Noreturn void error (const char *, ...) AT/ error c-src/etags.c /^error (const char *format, ...)$/ error c-src/etags.c /^static void error (const char *, ...) ATTRIBUTE_FO/ -errorE tex-src/texinfo.tex /^\\def\\errorE#1{$/ -Error_Information/t ada-src/2ataspri.ads /^ type Error_Information is new Interfaces.C.POSI/ -error_signaled c-src/etags.c 264 error tex-src/texinfo.tex /^\\def\\error{\\leavevmode\\lower.7ex\\copy\\errorbox}$/ -ERROR y-src/cccp.c 9 error y-src/cccp.y /^error (msg)$/ -ERROR y-src/parse.y 304 -ErrStrToNmStr pas-src/common.pas /^function ErrStrToNmStr;(*($/ -Esmallexample tex-src/texinfo.tex /^\\def\\Esmallexample{\\Elisp}$/ -Esmallexample tex-src/texinfo.tex /^\\global\\def\\Esmallexample{\\Esmalllisp}$/ -Esmalllisp tex-src/texinfo.tex /^\\def\\Esmalllisp{\\endgroup\\afterenvbreak}%$/ -Etable tex-src/texinfo.tex /^\\def\\Etable{\\endgraf\\endgroup\\afterenvbreak}%$/ -Etable tex-src/texinfo.tex /^\\let\\Etable=\\relax}}$/ -ETAGS12 make-src/Makefile /^ETAGS12: etags12 ${infiles}$/ -ETAGS13 ETAGS14 ETAGS15 make-src/Makefile /^ETAGS13 ETAGS14 ETAGS15: etags% ${infiles}$/ -etags.1.man make-src/Makefile /^etags.1.man: etags.1$/ +errorE tex-src/texinfo.tex /^\\def\\errorE#1{$/ +error_signaled c-src/etags.c 264 etags el-src/emacs/lisp/progmodes/etags.el /^(defgroup etags nil "Tags tables."$/ +etags html-src/software.html /^Etags$/ +etags make-src/Makefile /^etags: etags.c ${OBJS}$/ +etags--xref-find-definitions el-src/emacs/lisp/progmodes/etags.el /^(defun etags--xref-find-definitions (pattern &opti/ +etags--xref-limit el-src/emacs/lisp/progmodes/etags.el /^(defconst etags--xref-limit 1000)$/ etags-file-of-tag el-src/emacs/lisp/progmodes/etags.el /^(defun etags-file-of-tag (&optional relative) ; Do/ -etags_getcwd c-src/etags.c /^etags_getcwd (void)$/ etags-goto-tag-location el-src/emacs/lisp/progmodes/etags.el /^(defun etags-goto-tag-location (tag-info)$/ -etags html-src/software.html /^Etags$/ etags-list-tags el-src/emacs/lisp/progmodes/etags.el /^(defun etags-list-tags (file) ; Doc string?$/ -etags make-src/Makefile /^etags: etags.c ${OBJS}$/ -ETAGS make-src/Makefile /^ETAGS: FRC etags ${infiles}$/ -ETAGS% make-src/Makefile /^ETAGS%: FRC etags% ${infiles}$/ etags-recognize-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun etags-recognize-tags-table ()$/ etags-snarf-tag el-src/emacs/lisp/progmodes/etags.el /^(defun etags-snarf-tag (&optional use-explicit) ; / -etags-tags-apropos-additional el-src/emacs/lisp/progmodes/etags.el /^(defun etags-tags-apropos-additional (regexp)$/ etags-tags-apropos el-src/emacs/lisp/progmodes/etags.el /^(defun etags-tags-apropos (string) ; Doc string?$/ +etags-tags-apropos-additional el-src/emacs/lisp/progmodes/etags.el /^(defun etags-tags-apropos-additional (regexp)$/ etags-tags-completion-table el-src/emacs/lisp/progmodes/etags.el /^(defun etags-tags-completion-table () ; Doc string/ etags-tags-included-tables el-src/emacs/lisp/progmodes/etags.el /^(defun etags-tags-included-tables () ; Doc string?/ etags-tags-table-files el-src/emacs/lisp/progmodes/etags.el /^(defun etags-tags-table-files () ; Doc string?$/ -etags-verify-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun etags-verify-tags-table ()$/ -etags--xref-find-definitions el-src/emacs/lisp/progmodes/etags.el /^(defun etags--xref-find-definitions (pattern &opti/ -etags-xref-find-definitions-tag-order el-src/emacs/lisp/progmodes/etags.el /^(defvar etags-xref-find-definitions-tag-order '(ta/ -etags-xref-find el-src/emacs/lisp/progmodes/etags.el /^(defun etags-xref-find (action id)$/ -etags--xref-limit el-src/emacs/lisp/progmodes/etags.el /^(defconst etags--xref-limit 1000)$/ -Etex tex-src/texinfo.tex /^\\let\\Etex=\\endgroup}$/ -Etitlepage tex-src/texinfo.tex /^\\def\\Etitlepage{%$/ +etags-verify-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun etags-verify-tags-table ()$/ +etags-xref-find el-src/emacs/lisp/progmodes/etags.el /^(defun etags-xref-find (action id)$/ +etags-xref-find-definitions-tag-order el-src/emacs/lisp/progmodes/etags.el /^(defvar etags-xref-find-definitions-tag-order '(ta/ +etags.1.man make-src/Makefile /^etags.1.man: etags.1$/ +etags_getcwd c-src/etags.c /^etags_getcwd (void)$/ eval_dyn c-src/emacs/src/keyboard.c /^eval_dyn (Lisp_Object form)$/ evenfooting tex-src/texinfo.tex /^\\def\\evenfooting{\\parsearg\\evenfootingxxx}$/ evenfootingxxx tex-src/texinfo.tex /^\\gdef\\evenfootingxxx #1{\\evenfootingyyy #1@|@|@|@|/ @@ -1217,8 +2516,8 @@ evenheading tex-src/texinfo.tex /^\\def\\evenheading{\\parsearg\\evenheadingxxx} evenheadingxxx tex-src/texinfo.tex /^\\gdef\\evenheadingxxx #1{\\evenheadingyyy #1@|@|@|@|/ evenheadingyyy tex-src/texinfo.tex /^\\gdef\\evenheadingyyy #1@|#2@|#3@|#4\\finish{%$/ event-convert-list c-src/emacs/src/keyboard.c /^DEFUN ("event-convert-list", Fevent_convert_list, / -event_head c-src/emacs/src/keyboard.c 11021 event-symbol-parse-modifiers c-src/emacs/src/keyboard.c /^DEFUN ("internal-event-symbol-parse-modifiers", Fe/ +event_head c-src/emacs/src/keyboard.c 11021 event_to_kboard c-src/emacs/src/keyboard.c /^event_to_kboard (struct input_event *event)$/ everyfooting tex-src/texinfo.tex /^\\def\\everyfooting{\\parsearg\\everyfootingxxx}$/ everyfootingxxx tex-src/texinfo.tex /^\\gdef\\everyfootingxxx #1{\\everyfootingyyy #1@|@|@|/ @@ -1226,24 +2525,24 @@ everyfootingyyy tex-src/texinfo.tex /^\\gdef\\everyfootingyyy #1@|#2@|#3@|#4\\fi everyheading tex-src/texinfo.tex /^\\def\\everyheading{\\parsearg\\everyheadingxxx}$/ everyheadingxxx tex-src/texinfo.tex /^\\gdef\\everyheadingxxx #1{\\everyheadingyyy #1@|@|@|/ everyheadingyyy tex-src/texinfo.tex /^\\gdef\\everyheadingyyy #1@|#2@|#3@|#4\\finish{%$/ -Evtable tex-src/texinfo.tex /^\\def\\Evtable{\\endgraf\\endgroup\\afterenvbreak}%$/ ewbot tex-src/texinfo.tex /^\\def\\ewbot{\\vrule height0pt depth\\cornerthick widt/ ewtop tex-src/texinfo.tex /^\\def\\ewtop{\\vrule height\\cornerthick depth0pt widt/ exact c-src/emacs/src/gmalloc.c 200 example tex-src/texinfo.tex /^\\let\\example=\\lisp$/ -/exclamdown ps-src/rfc1245.ps /^\/exclamdown \/logicalnot \/.notdef \/florin \/.notdef / exdent tex-src/texinfo.tex /^\\def\\exdent{\\parsearg\\exdentyyy}$/ exdent tex-src/texinfo.tex /^\\let\\exdent=\\nofillexdent$/ exdentyyy tex-src/texinfo.tex /^\\def\\exdentyyy #1{{\\hfil\\break\\hbox{\\kern -\\exdent/ execute cp-src/c.C /^ void execute(CPluginCSCState& p, int w, in/ -EXFUN c-src/emacs/src/lisp.h /^#define EXFUN(fnname, maxargs) \\$/ -exit_critical_to_previous c-src/h.h 117 exit c-src/exit.c /^DEFUN(exit, (status), int status)$/ exit c-src/exit.strange_suffix /^DEFUN(exit, (status), int status)$/ -Exit_LL_Task/p ada-src/2ataspri.adb /^ procedure Exit_LL_Task is$/ -Exit_LL_Task/p ada-src/2ataspri.ads /^ procedure Exit_LL_Task;$/ exit-recursive-edit c-src/emacs/src/keyboard.c /^DEFUN ("exit-recursive-edit", Fexit_recursive_edit/ +exit_critical_to_previous c-src/h.h 117 +exp y-src/atest.y 2 +exp y-src/cccp.y 156 +exp y-src/cccp.y 185 +exp y-src/parse.y 95 exp1 y-src/cccp.y 148 +exp_list y-src/parse.y 263 expand-abbrev c-src/abbrev.c /^DEFUN ("expand-abbrev", Fexpand_abbrev, Sexpand_ab/ expandafter tex-src/texinfo.tex /^\\expandafter\\let\\expandafter\\synindexfoo\\expandaft/ expandmng prol-src/natded.prolog /^expandmng(var(V),var(V)).$/ @@ -1253,18 +2552,24 @@ expandsyn prol-src/natded.prolog /^expandsyn(Syn,Syn):-$/ expansion tex-src/texinfo.tex /^\\def\\expansion{\\leavevmode\\raise.1ex\\hbox to 1em{\\/ expansion tex-src/texinfo.tex /^\\def\\expansion{\\realbackslash expansion}$/ explicitly-quoted-pending-delete-mode el-src/TAGTEST.EL /^(defalias (quote explicitly-quoted-pending-delete-/ -exp_list y-src/parse.y 263 expression_value y-src/cccp.y 68 -exp y-src/atest.y 2 -exp y-src/cccp.y 156 -exp y-src/cccp.y 185 -exp y-src/parse.y 95 -EXTAGS make-src/Makefile /^EXTAGS: extags ${infiles} Makefile$/ -EXTERNALLY_VISIBLE c-src/emacs/src/keyboard.c 3497 -EXTERNALLY_VISIBLE c-src/emacs/src/keyboard.c 4372 -ExtractCommentInfo pas-src/common.pas /^procedure ExtractCommentInfo; (*($/ extras c-src/emacs/src/lisp.h 1603 extvar c-src/h.h 109 +f c-src/c.c /^T f(){if(x){}$/ +f c-src/h.h 89 +f c.c /^int f$/ +f c.c 145 +f c.c 156 +f c.c 168 +f cp-src/c.C /^ void f() {}$/ +f cp-src/c.C /^ int f(){return 0;}; \/\/ first comment$/ +f cp-src/c.C /^A > A,int>::f(A* x) {}$/ +f cp-src/c.C /^A* f() {}$/ +f cp-src/c.C /^class B { void f() {} };$/ +f cp-src/c.C /^int A::f(A* x) {}$/ +f cp-src/c.C /^int f(A x) {}$/ +f cp-src/fail.C /^ int f() { return 5; }$/ +f cp-src/fail.C /^int A::B::f() { return 2; }$/ f1 c.c /^ f1 () { \/* Do something. *\/; }$/ f1 perl-src/kai-test.pl /^sub f1 {$/ f2 c.c /^void f2 () { \/* Do something. *\/; }$/ @@ -1274,92 +2579,39 @@ f4 perl-src/kai-test.pl /^sub Bar::f4 {$/ f5 perl-src/kai-test.pl /^sub f5 {$/ f6 perl-src/kai-test.pl /^sub f6 {$/ f7 perl-src/kai-test.pl /^sub f7 {$/ -Fabbrev_expansion c-src/abbrev.c /^DEFUN ("abbrev-expansion", Fabbrev_expansion, Sabb/ -Fabbrev_symbol c-src/abbrev.c /^DEFUN ("abbrev-symbol", Fabbrev_symbol, Sabbrev_sy/ -Fabort_recursive_edit c-src/emacs/src/keyboard.c /^DEFUN ("abort-recursive-edit", Fabort_recursive_ed/ -=/f ada-src/etags-test-for.ada /^ function "=" (L, R : System.Address) return Boo/ -Fails_t c-src/h.h 5 -/fakecolorsetup ps-src/rfc1245.ps /^\/fakecolorsetup {$/ -FASTCFLAGS make-src/Makefile /^FASTCFLAGS=-O3 -finline-functions -ffast-math -fun/ -FASTCFLAGSWARN make-src/Makefile /^FASTCFLAGSWARN=${WARNINGS} -Werror ${FASTCFLAGS}$/ +fast_string_match_ignore_case c-src/emacs/src/lisp.h /^fast_string_match_ignore_case (Lisp_Object regexp,/ fastctags make-src/Makefile /^fastctags:$/ fastetags make-src/Makefile /^fastetags:$/ -fastmap_accurate c-src/emacs/src/regex.h 383 fastmap c-src/emacs/src/regex.h 355 -fast_string_match_ignore_case c-src/emacs/src/lisp.h /^fast_string_match_ignore_case (Lisp_Object regexp,/ -fatala c.c /^void fatala () __attribute__ ((noreturn));$/ +fastmap_accurate c-src/emacs/src/regex.h 383 fatal c-src/etags.c /^fatal (const char *s1, const char *s2)$/ -f c.c 145 -f c.c 156 -f c.c 168 -f c.c /^int f$/ -Fclear_abbrev_table c-src/abbrev.c /^DEFUN ("clear-abbrev-table", Fclear_abbrev_table, / -Fclear_this_command_keys c-src/emacs/src/keyboard.c /^DEFUN ("clear-this-command-keys", Fclear_this_comm/ -Fcommand_error_default_function c-src/emacs/src/keyboard.c /^DEFUN ("command-error-default-function", Fcommand_/ +fatala c.c /^void fatala () __attribute__ ((noreturn));$/ fconst forth-src/test-forth.fth /^3.1415e fconstant fconst$/ -f cp-src/c.C /^A > A,int>::f(A* x) {}$/ -f cp-src/c.C /^A* f() {}$/ -f cp-src/c.C /^class B { void f() {} };$/ -f cp-src/c.C /^int A::f(A* x) {}$/ -f cp-src/c.C /^int f(A x) {}$/ -f cp-src/c.C /^ int f(){return 0;}; \/\/ first comment$/ -f cp-src/c.C /^ void f() {}$/ -f cp-src/fail.C /^int A::B::f() { return 2; }$/ -f cp-src/fail.C /^ int f() { return 5; }$/ -f c-src/c.c /^T f(){if(x){}$/ -f c-src/h.h 89 -Fcurrent_idle_time c-src/emacs/src/keyboard.c /^DEFUN ("current-idle-time", Fcurrent_idle_time, Sc/ -Fcurrent_input_mode c-src/emacs/src/keyboard.c /^DEFUN ("current-input-mode", Fcurrent_input_mode, / -Fdefine_abbrev c-src/abbrev.c /^DEFUN ("define-abbrev", Fdefine_abbrev, Sdefine_ab/ -Fdefine_abbrev_table c-src/abbrev.c /^DEFUN ("define-abbrev-table", Fdefine_abbrev_table/ -Fdefine_global_abbrev c-src/abbrev.c /^DEFUN ("define-global-abbrev", Fdefine_global_abbr/ -Fdefine_mode_abbrev c-src/abbrev.c /^DEFUN ("define-mode-abbrev", Fdefine_mode_abbrev, / +fdHandler objc-src/Subprocess.m /^- fdHandler:(int)theFd$/ +fdHandler objc-src/Subprocess.m /^fdHandler (int theFd, id self)$/ fdefunkey c-src/etags.c 2409 fdefunname c-src/etags.c 2410 fdesc c-src/etags.c 201 fdesc c-src/etags.c 212 -fdHandler objc-src/Subprocess.m /^- fdHandler:(int)theFd$/ -fdHandler objc-src/Subprocess.m /^fdHandler (int theFd, id self)$/ -Fdiscard_input c-src/emacs/src/keyboard.c /^DEFUN ("discard-input", Fdiscard_input, Sdiscard_i/ fdp c-src/etags.c 217 -Fevent_convert_list c-src/emacs/src/keyboard.c /^DEFUN ("event-convert-list", Fevent_convert_list, / -Fevent_symbol_parse_modifiers c-src/emacs/src/keyboard.c /^DEFUN ("internal-event-symbol-parse-modifiers", Fe/ -Fexit_recursive_edit c-src/emacs/src/keyboard.c /^DEFUN ("exit-recursive-edit", Fexit_recursive_edit/ -Fexpand_abbrev c-src/abbrev.c /^DEFUN ("expand-abbrev", Fexpand_abbrev, Sexpand_ab/ ff cp-src/c.C /^ int ff(){return 1;};$/ -F_getit c-src/etags.c /^F_getit (FILE *inf)$/ ->field1 forth-src/test-forth.fth /^ 9 field >field1$/ ->field2 forth-src/test-forth.fth /^ 5 field >field2$/ field_of_play cp-src/conway.cpp 18 fignore c-src/etags.c 2416 -file_end perl-src/htlmify-cystic /^sub file_end ()$/ -file_index perl-src/htlmify-cystic 33 -fileJoin php-src/lce_functions.php /^ function fileJoin()$/ -filename_is_absolute c-src/etags.c /^filename_is_absolute (char *fn)$/ -filenames c-src/etags.c 196 -file-of-tag el-src/emacs/lisp/progmodes/etags.el /^(defun file-of-tag (&optional relative)$/ -file-of-tag-function el-src/emacs/lisp/progmodes/etags.el /^(defvar file-of-tag-function nil$/ -file tex-src/texinfo.tex /^\\def\\file##1{\\realbackslash file {##1}}%$/ file tex-src/texinfo.tex /^\\def\\file##1{\\realbackslash file {##1}}$/ +file tex-src/texinfo.tex /^\\def\\file##1{\\realbackslash file {##1}}%$/ file tex-src/texinfo.tex /^\\let\\file=\\indexdummyfont$/ file tex-src/texinfo.tex /^\\let\\file=\\samp$/ +file-of-tag el-src/emacs/lisp/progmodes/etags.el /^(defun file-of-tag (&optional relative)$/ +file-of-tag-function el-src/emacs/lisp/progmodes/etags.el /^(defvar file-of-tag-function nil$/ +fileJoin php-src/lce_functions.php /^ function fileJoin()$/ +file_end perl-src/htlmify-cystic /^sub file_end ()$/ +file_index perl-src/htlmify-cystic 33 file_tocs perl-src/htlmify-cystic 30 -/fillprocs ps-src/rfc1245.ps /^\/fillprocs 32 array def$/ -FILTER make-src/Makefile /^FILTER=grep -v '\\.[Cchefy][lor]*,[1-9][0-9]*' || t/ -FINAL_FREE_BLOCKS c-src/emacs/src/gmalloc.c 135 -Finalize_Cond/p ada-src/2ataspri.adb /^ procedure Finalize_Cond (Cond : in out Conditio/ -Finalize_Cond/p ada-src/2ataspri.ads /^ procedure Finalize_Cond (Cond : in out Conditio/ -Finalize_Lock/p ada-src/2ataspri.adb /^ procedure Finalize_Lock (L : in out Lock) is$/ -Finalize_Lock/p ada-src/2ataspri.ads /^ procedure Finalize_Lock (L : in out Lock);$/ -FINALIZERP c-src/emacs/src/lisp.h /^FINALIZERP (Lisp_Object x)$/ -Finalize_TAS_Cell/p ada-src/2ataspri.adb /^ procedure Finalize_TAS_Cell (Cell : in out TAS_/ -Finalize_TAS_Cell/p ada-src/2ataspri.ads /^ procedure Finalize_TAS_Cell (Cell : in out TA/ +filename_is_absolute c-src/etags.c /^filename_is_absolute (char *fn)$/ +filenames c-src/etags.c 196 finalout tex-src/texinfo.tex /^\\def\\finalout{\\overfullrule=0pt}$/ -findcats prol-src/natded.prolog /^findcats([],Left,Left).$/ -find_entries c-src/etags.c /^find_entries (FILE *inf)$/ -findex tex-src/texinfo.tex /^\\def\\findex {\\fnindex}$/ -find-tag-default-function el-src/emacs/lisp/progmodes/etags.el /^(defcustom find-tag-default-function nil$/ find-tag el-src/emacs/lisp/progmodes/etags.el /^(defun find-tag (tagname &optional next-p regexp-p/ +find-tag-default-function el-src/emacs/lisp/progmodes/etags.el /^(defcustom find-tag-default-function nil$/ find-tag-history el-src/emacs/lisp/progmodes/etags.el /^(defvar find-tag-history nil) ; Doc string?$/ find-tag-hook el-src/emacs/lisp/progmodes/etags.el /^(defcustom find-tag-hook nil$/ find-tag-in-order el-src/emacs/lisp/progmodes/etags.el /^(defun find-tag-in-order (pattern$/ @@ -1377,44 +2629,26 @@ find-tag-regexp-tag-order el-src/emacs/lisp/progmodes/etags.el /^(defvar find-ta find-tag-search-function el-src/emacs/lisp/progmodes/etags.el /^(defvar find-tag-search-function nil$/ find-tag-tag el-src/emacs/lisp/progmodes/etags.el /^(defun find-tag-tag (string)$/ find-tag-tag-order el-src/emacs/lisp/progmodes/etags.el /^(defvar find-tag-tag-order nil$/ +find_entries c-src/etags.c /^find_entries (FILE *inf)$/ find_user_signal_name c-src/emacs/src/keyboard.c /^find_user_signal_name (int sig)$/ +findcats prol-src/natded.prolog /^findcats([],Left,Left).$/ +findex tex-src/texinfo.tex /^\\def\\findex {\\fnindex}$/ finish_appendices perl-src/htlmify-cystic /^sub finish_appendices ()$/ finish_sections perl-src/htlmify-cystic /^sub finish_sections ()$/ finish_subsections perl-src/htlmify-cystic /^sub finish_subsections ()$/ finish_subsubsections perl-src/htlmify-cystic /^sub finish_subsubsections ()$/ finishtitlepage tex-src/texinfo.tex /^\\def\\finishtitlepage{%$/ finlist c-src/etags.c 2414 -Finput_pending_p c-src/emacs/src/keyboard.c /^DEFUN ("input-pending-p", Finput_pending_p, Sinput/ -Finsert_abbrev_table_description c-src/abbrev.c /^DEFUN ("insert-abbrev-table-description", Finsert_/ -First100Chars pas-src/common.pas /^procedure First100Chars; (*($/ first c-src/emacs/src/gmalloc.c 151 first tex-src/texinfo.tex /^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/ fitchtreelist prol-src/natded.prolog /^fitchtreelist([]).$/ -FIXNUM_BITS c-src/emacs/src/lisp.h 252 -FIXNUM_OVERFLOW_P c-src/emacs/src/lisp.h /^#define FIXNUM_OVERFLOW_P(i) \\$/ -FIXNUM_OVERFLOW_P c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (EQ, bool, (Lisp_Object x, Lisp_O/ fixup_locale c-src/emacs/src/lisp.h /^INLINE void fixup_locale (void) {}$/ -flag2str pyt-src/server.py /^def flag2str(value, string):$/ flag c-src/getopt.h 83 +flag2str pyt-src/server.py /^def flag2str(value, string):$/ flistseen c-src/etags.c 2415 -FLOATP c-src/emacs/src/lisp.h /^# define FLOATP(x) lisp_h_FLOATP (x)$/ -FLOAT_TO_STRING_BUFSIZE c-src/emacs/src/lisp.h 3927 -/fl ps-src/rfc1245.ps /^\/fl { $/ flushcr tex-src/texinfo.tex /^\\def\\flushcr{\\ifx\\par\\lisppar \\def\\next##1{}\\else / flushleft tex-src/texinfo.tex /^\\def\\flushleft{%$/ flushright tex-src/texinfo.tex /^\\def\\flushright{%$/ -Fmake_abbrev_table c-src/abbrev.c /^DEFUN ("make-abbrev-table", Fmake_abbrev_table, Sm/ -/FMBEGINEPSF ps-src/rfc1245.ps /^\/FMBEGINEPSF { $/ -/FMBEGINPAGE ps-src/rfc1245.ps /^\/FMBEGINPAGE { $/ -/Fmcc ps-src/rfc1245.ps /^\/Fmcc {$/ -/FMDEFINEFONT ps-src/rfc1245.ps /^\/FMDEFINEFONT { $/ -/FMDOCUMENT ps-src/rfc1245.ps /^\/FMDOCUMENT { $/ -/FMENDEPSF ps-src/rfc1245.ps /^\/FMENDEPSF {$/ -/FMENDPAGE ps-src/rfc1245.ps /^\/FMENDPAGE {$/ -/FMLOCAL ps-src/rfc1245.ps /^\/FMLOCAL {$/ -/FMNORMALIZEGRAPHICS ps-src/rfc1245.ps /^\/FMNORMALIZEGRAPHICS { $/ -/FMVERSION ps-src/rfc1245.ps /^\/FMVERSION {$/ -/FMversion ps-src/rfc1245.ps /^\/FMversion (2.0) def $/ fn c-src/exit.c /^ void EXFUN((*fn[1]), (NOARGS));$/ fn c-src/exit.strange_suffix /^ void EXFUN((*fn[1]), (NOARGS));$/ fnheader tex-src/texinfo.tex /^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/ @@ -1423,125 +2657,74 @@ fnitemindex tex-src/texinfo.tex /^\\def\\fnitemindex #1{\\doind {fn}{\\code{#1}} fnx\deffnheader tex-src/texinfo.tex /^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/ focus_set pyt-src/server.py /^ def focus_set(self):$/ folio tex-src/texinfo.tex /^\\def\\dosetq #1#2{{\\let\\folio=0 \\turnoffactive%$/ -folio tex-src/texinfo.tex /^{\\let\\folio=0%$/ folio tex-src/texinfo.tex /^{\\let\\folio=0% Expand all macros now EXCEPT \\folio/ +folio tex-src/texinfo.tex /^{\\let\\folio=0%$/ follow_key c-src/emacs/src/keyboard.c /^follow_key (Lisp_Object keymap, Lisp_Object key)$/ -fonts\rm tex-src/texinfo.tex /^ \\indexfonts\\rm \\tolerance=9500 \\advance\\baseline/ fonts tex-src/texinfo.tex /^\\obeyspaces \\obeylines \\ninett \\indexfonts \\rawbac/ -foo1 ruby-src/test1.ru /^ attr_reader(:foo1, :bar1, # comment$/ -foo2 ruby-src/test1.ru /^ alias_method ( :foo2, #cmmt$/ -foobar2_ c-src/h.h 16 -foobar2 c-src/h.h 20 -foobar c.c /^extern void foobar (void) __attribute__ ((section / -foobar c-src/c.c /^int foobar() {;}$/ -foo==bar el-src/TAGTEST.EL /^(defun foo==bar () (message "hi")) ; Bug#5624$/ -Foo::Bar perl-src/kai-test.pl /^package Foo::Bar;$/ +fonts\rm tex-src/texinfo.tex /^ \\indexfonts\\rm \\tolerance=9500 \\advance\\baseline/ +foo c-src/h.h 18 foo c.c 150 foo c.c 166 foo c.c 167 foo c.c 178 foo c.c 189 +foo cp-src/c.C /^ foo() {$/ foo cp-src/c.C 68 foo cp-src/c.C 79 -foo cp-src/c.C /^ foo() {$/ foo cp-src/x.cc /^XX::foo()$/ -foo c-src/h.h 18 -(foo) forth-src/test-forth.fth /^: (foo) 1 ;$/ -foo forth-src/test-forth.fth /^: foo (foo) ;$/ foo f-src/entry.for /^ character*(*) function foo()$/ foo f-src/entry.strange /^ character*(*) function foo()$/ foo f-src/entry.strange_suffix /^ character*(*) function foo()$/ -Foo perl-src/kai-test.pl /^package Foo;$/ +foo forth-src/test-forth.fth /^: foo (foo) ;$/ foo php-src/ptest.php /^foo()$/ foo ruby-src/test1.ru /^ attr_reader :foo$/ foo! ruby-src/test1.ru /^ def foo!$/ -footnotestyle tex-src/texinfo.tex /^\\let\\footnotestyle=\\comment$/ +foo1 ruby-src/test1.ru /^ attr_reader(:foo1, :bar1, # comment$/ +foo2 ruby-src/test1.ru /^ alias_method ( :foo2, #cmmt$/ +foo==bar el-src/TAGTEST.EL /^(defun foo==bar () (message "hi")) ; Bug#5624$/ +foobar c-src/c.c /^int foobar() {;}$/ +foobar c.c /^extern void foobar (void) __attribute__ ((section / +foobar2 c-src/h.h 20 +foobar2_ c-src/h.h 16 footnote tex-src/texinfo.tex /^\\long\\gdef\\footnote #1{\\global\\advance \\footnoteno/ +footnotestyle tex-src/texinfo.tex /^\\let\\footnotestyle=\\comment$/ footnotezzz tex-src/texinfo.tex /^\\long\\gdef\\footnotezzz #1{\\insert\\footins{$/ -Fopen_dribble_file c-src/emacs/src/keyboard.c /^DEFUN ("open-dribble-file", Fopen_dribble_file, So/ foperator c-src/etags.c 2411 force_auto_save_soon c-src/emacs/src/keyboard.c /^force_auto_save_soon (void)$/ force_explicit_name c-src/etags.c 265 force_quit_count c-src/emacs/src/keyboard.c 10387 -FOR_EACH_ALIST_VALUE c-src/emacs/src/lisp.h /^#define FOR_EACH_ALIST_VALUE(head_var, list_var, v/ -FOR_EACH_TAIL c-src/emacs/src/lisp.h /^#define FOR_EACH_TAIL(hare, list, tortoise, n) \\$/ foreign_export merc-src/accumulator.m /^:- pragma foreign_export("C", unravel_univ(in, out/ -formatSize objc-src/PackInsp.m /^-(const char *)formatSize:(const char *)size inBuf/ format tex-src/texinfo.tex /^\\def\\format{\\begingroup\\inENV %This group ends at / -Forth_help c-src/etags.c 573 -FORTHSRC make-src/Makefile /^FORTHSRC=test-forth.fth$/ -Forth_suffixes c-src/etags.c 571 -Forth_words c-src/etags.c /^Forth_words (FILE *inf)$/ -Fortran_functions c-src/etags.c /^Fortran_functions (FILE *inf)$/ -Fortran_help c-src/etags.c 579 -Fortran_suffixes c-src/etags.c 577 +formatSize objc-src/PackInsp.m /^-(const char *)formatSize:(const char *)size inBuf/ found c-src/emacs/src/lisp.h 2344 -Fposn_at_point c-src/emacs/src/keyboard.c /^DEFUN ("posn-at-point", Fposn_at_point, Sposn_at_p/ -Fposn_at_x_y c-src/emacs/src/keyboard.c /^DEFUN ("posn-at-x-y", Fposn_at_x_y, Sposn_at_x_y, / -/F ps-src/rfc1245.ps /^\/F { $/ fracas html-src/software.html /^Fracas$/ -/fraction ps-src/rfc1245.ps /^\/fraction \/currency \/guilsinglleft \/guilsinglright/ frag c-src/emacs/src/gmalloc.c 152 -_fraghead c-src/emacs/src/gmalloc.c 371 -/FrameDict ps-src/rfc1245.ps /^\/FrameDict 190 dict def $/ frame_local c-src/emacs/src/lisp.h 2341 -FRAMEP c-src/emacs/src/lisp.h /^FRAMEP (Lisp_Object a)$/ -FRC make-src/Makefile /^FRC:;$/ -Fread_key_sequence c-src/emacs/src/keyboard.c /^DEFUN ("read-key-sequence", Fread_key_sequence, Sr/ -Fread_key_sequence_vector c-src/emacs/src/keyboard.c /^DEFUN ("read-key-sequence-vector", Fread_key_seque/ -Frecent_keys c-src/emacs/src/keyboard.c /^DEFUN ("recent-keys", Frecent_keys, Srecent_keys, / -Frecursion_depth c-src/emacs/src/keyboard.c /^DEFUN ("recursion-depth", Frecursion_depth, Srecur/ -Frecursive_edit c-src/emacs/src/keyboard.c /^DEFUN ("recursive-edit", Frecursive_edit, Srecursi/ +free c-src/emacs/src/gmalloc.c /^free (void *ptr)$/ free c-src/emacs/src/gmalloc.c 166 free c-src/emacs/src/gmalloc.c 1723 free c-src/emacs/src/gmalloc.c 67 free c-src/emacs/src/gmalloc.c 72 -_free c-src/emacs/src/gmalloc.c /^_free (void *ptr)$/ -free c-src/emacs/src/gmalloc.c /^free (void *ptr)$/ free_fdesc c-src/etags.c /^free_fdesc (register fdesc *fdp)$/ -FREEFLOOD c-src/emacs/src/gmalloc.c 1863 free_for prol-src/natded.prolog /^free_for(var(_),_,_).$/ -freehook c-src/emacs/src/gmalloc.c /^freehook (void *ptr)$/ -_free_internal c-src/emacs/src/gmalloc.c /^_free_internal (void *ptr)$/ -_free_internal_nolock c-src/emacs/src/gmalloc.c /^_free_internal_nolock (void *ptr)$/ free_regexps c-src/etags.c /^free_regexps (void)$/ free_tree c-src/etags.c /^free_tree (register node *np)$/ free_var prol-src/natded.prolog /^free_var(var(V),var(V)).$/ +freehook c-src/emacs/src/gmalloc.c /^freehook (void *ptr)$/ frenchspacing tex-src/texinfo.tex /^\\def\\frenchspacing{\\sfcode46=1000 \\sfcode63=1000 \\/ frenchspacing tex-src/texinfo.tex /^\\let\\frenchspacing=\\relax%$/ -/freq ps-src/rfc1245.ps /^\/freq dpi 18.75 div 8 div round dup 0 eq {pop 1} i/ -Freset_this_command_lengths c-src/emacs/src/keyboard.c /^DEFUN ("reset-this-command-lengths", Freset_this_c/ fresh_vars prol-src/natded.prolog /^fresh_vars(var(V),var(V)).$/ -Fset_input_interrupt_mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-interrupt-mode", Fset_input_inte/ -Fset_input_meta_mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-meta-mode", Fset_input_meta_mode/ -Fset_input_mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-mode", Fset_input_mode, Sset_inp/ -Fset_output_flow_control c-src/emacs/src/keyboard.c /^DEFUN ("set-output-flow-control", Fset_output_flow/ -Fset_quit_char c-src/emacs/src/keyboard.c /^DEFUN ("set-quit-char", Fset_quit_char, Sset_quit_/ -FSRC make-src/Makefile /^FSRC=entry.for entry.strange_suffix entry.strange$/ fstartlist c-src/etags.c 2413 -Fsuspend_emacs c-src/emacs/src/keyboard.c /^DEFUN ("suspend-emacs", Fsuspend_emacs, Ssuspend_e/ ftable tex-src/texinfo.tex /^\\def\\ftable{\\begingroup\\inENV\\obeylines\\obeyspaces/ ftablex tex-src/texinfo.tex /^\\gdef\\ftablex #1^^M{%$/ -F_takeprec c-src/etags.c /^F_takeprec (void)$/ -Fthis_command_keys c-src/emacs/src/keyboard.c /^DEFUN ("this-command-keys", Fthis_command_keys, St/ -Fthis_command_keys_vector c-src/emacs/src/keyboard.c /^DEFUN ("this-command-keys-vector", Fthis_command_k/ -Fthis_single_command_keys c-src/emacs/src/keyboard.c /^DEFUN ("this-single-command-keys", Fthis_single_co/ -Fthis_single_command_raw_keys c-src/emacs/src/keyboard.c /^DEFUN ("this-single-command-raw-keys", Fthis_singl/ -Ftop_level c-src/emacs/src/keyboard.c /^DEFUN ("top-level", Ftop_level, Stop_level, 0, 0, / -Ftrack_mouse c-src/emacs/src/keyboard.c /^DEFUN ("internal--track-mouse", Ftrack_mouse, Stra/ -FUN0 y-src/parse.y /^yylex FUN0()$/ -FUN1 y-src/parse.y /^str_to_col FUN1(char **,str)$/ -FUN1 y-src/parse.y /^yyerror FUN1(char *, s)$/ -FUN2 y-src/parse.y /^make_list FUN2(YYSTYPE, car, YYSTYPE, cdr)$/ -FUN2 y-src/parse.y /^parse_cell_or_range FUN2(char **,ptr, struct rng */ -func1 c.c /^int func1$/ -func2 c.c /^int func2 (a,b$/ -funcboo c.c /^bool funcboo ()$/ -func c-src/emacs/src/lisp.h /^ void (*func) (int);$/ func c-src/emacs/src/lisp.h /^ void (*func) (Lisp_Object);$/ +func c-src/emacs/src/lisp.h /^ void (*func) (int);$/ func c-src/emacs/src/lisp.h /^ void (*func) (void *);$/ func c-src/emacs/src/lisp.h /^ void (*func) (void);$/ +func1 c.c /^int func1$/ +func2 c.c /^int func2 (a,b$/ func_key_syms c-src/emacs/src/keyboard.c 4626 +funcboo c.c /^bool funcboo ()$/ funcpointer c-src/emacs/src/lisp.h 2126 funcptr c-src/h.h /^ fu int (*funcptr) (void *ptr);$/ function c-src/emacs/src/lisp.h 1685 @@ -1549,12 +2732,8 @@ function c-src/emacs/src/lisp.h 2197 function c-src/emacs/src/lisp.h 2985 function c-src/emacs/src/lisp.h 694 function c-src/etags.c 194 -FUNCTION_KEY_OFFSET c-src/emacs/src/keyboard.c 4766 -FUNCTION_KEY_OFFSET c-src/emacs/src/keyboard.c 5061 -functionparens tex-src/texinfo.tex /^\\gdef\\functionparens{\\boldbrax\\let&=\\amprm\\parenco/ -FUNCTIONP c-src/emacs/src/lisp.h /^FUNCTIONP (Lisp_Object obj)$/ functionp c-src/emacs/src/lisp.h /^functionp (Lisp_Object object)$/ -Funexpand_abbrev c-src/abbrev.c /^DEFUN ("unexpand-abbrev", Funexpand_abbrev, Sunexp/ +functionparens tex-src/texinfo.tex /^\\gdef\\functionparens{\\boldbrax\\let&=\\amprm\\parenco/ fval forth-src/test-forth.fth /^fconst fvalue fval$/ fvar forth-src/test-forth.fth /^fvariable fvar$/ fvdef c-src/etags.c 2418 @@ -1563,138 +2742,79 @@ fvnameseen c-src/etags.c 2412 fvnone c-src/etags.c 2408 fwd c-src/emacs/src/lisp.h 2346 fwd c-src/emacs/src/lisp.h 690 -Fx_get_selection_internal c.c /^DEFUN ("x-get-selection-internal", Fx_get_selectio/ -Fx_get_selection_internal c.c /^ Fx_get_selection_internal, Sx_get_selection/ -Fy_get_selection_internal c.c /^ Fy_get_selection_internal, Sy_get_selection_/ +g cp-src/c.C /^ int g(){return 2;};$/ galileo html-src/software.html /^GaliLEO$/ -GatherControls pyt-src/server.py /^ def GatherControls(self):$/ gather pyt-src/server.py /^ def gather(self):$/ -GCALIGNED c-src/emacs/src/lisp.h 288 -GCALIGNED c-src/emacs/src/lisp.h 290 -GCALIGNMENT c-src/emacs/src/lisp.h 243 gc_aset c-src/emacs/src/lisp.h /^gc_aset (Lisp_Object array, ptrdiff_t idx, Lisp_Ob/ -GC_MAKE_GCPROS_NOOPS c-src/emacs/src/lisp.h 3172 gcmarkbit c-src/emacs/src/lisp.h 1974 gcmarkbit c-src/emacs/src/lisp.h 1981 gcmarkbit c-src/emacs/src/lisp.h 2035 gcmarkbit c-src/emacs/src/lisp.h 2113 gcmarkbit c-src/emacs/src/lisp.h 2204 gcmarkbit c-src/emacs/src/lisp.h 656 -GC_MARK_STACK_CHECK_GCPROS c-src/emacs/src/lisp.h 3173 -GC_MARK_STACK c-src/emacs/src/lisp.h 3177 -GCPRO1 c-src/emacs/src/lisp.h /^#define GCPRO1(a) \\$/ -GCPRO1 c-src/emacs/src/lisp.h /^#define GCPRO1(varname) ((void) gcpro1)$/ -GCPRO2 c-src/emacs/src/lisp.h /^#define GCPRO2(a, b) \\$/ -GCPRO2 c-src/emacs/src/lisp.h /^#define GCPRO2(varname1, varname2) ((void) gcpro2,/ -GCPRO3 c-src/emacs/src/lisp.h /^#define GCPRO3(a, b, c) \\$/ -GCPRO3 c-src/emacs/src/lisp.h /^#define GCPRO3(varname1, varname2, varname3) \\$/ -GCPRO4 c-src/emacs/src/lisp.h /^#define GCPRO4(a, b, c, d) \\$/ -GCPRO4 c-src/emacs/src/lisp.h /^#define GCPRO4(varname1, varname2, varname3, varna/ -GCPRO5 c-src/emacs/src/lisp.h /^#define GCPRO5(a, b, c, d, e) \\$/ -GCPRO5 c-src/emacs/src/lisp.h /^#define GCPRO5(varname1, varname2, varname3, varna/ -GCPRO6 c-src/emacs/src/lisp.h /^#define GCPRO6(a, b, c, d, e, f) \\$/ -GCPRO6 c-src/emacs/src/lisp.h /^#define GCPRO6(varname1, varname2, varname3, varna/ -GCPRO7 c-src/emacs/src/lisp.h /^#define GCPRO7(a, b, c, d, e, f, g) \\$/ -GCPRO7 c-src/emacs/src/lisp.h /^#define GCPRO7(a, b, c, d, e, f, g) (GCPRO6 (a, b,/ gcpro c-src/emacs/src/lisp.h 3042 gcpro c-src/emacs/src/lisp.h 3132 -g cp-src/c.C /^ int g(){return 2;};$/ -GCTYPEBITS c-src/emacs/src/lisp.h 67 -GCTYPEBITS c-src/emacs/src/lisp.h /^DEFINE_GDB_SYMBOL_BEGIN (int, GCTYPEBITS)$/ -GC_USE_GCPROS_AS_BEFORE c-src/emacs/src/lisp.h 3171 -GC_USE_GCPROS_CHECK_ZOMBIES c-src/emacs/src/lisp.h 3174 +gen_help_event c-src/emacs/src/keyboard.c /^gen_help_event (Lisp_Object help, Lisp_Object fram/ genalgorithm html-src/algrthms.html /^Generating the Data<\/font><\/i><\/b>$/ generate_warning merc-src/accumulator.m /^:- pred generate_warning(module_info::in, prog_var/ generate_warnings merc-src/accumulator.m /^:- pred generate_warnings(module_info::in, prog_va/ -~generic_object cp-src/clheir.cpp /^generic_object::~generic_object(void)$/ generic_object cp-src/clheir.cpp /^generic_object::generic_object(void)$/ generic_object cp-src/clheir.hpp 13 -GENERIC_PTR y-src/cccp.y 56 -GENERIC_PTR y-src/cccp.y 58 -gen_help_event c-src/emacs/src/keyboard.c /^gen_help_event (Lisp_Object help, Lisp_Object fram/ -GEQ y-src/cccp.c 15 getArchs objc-src/PackInsp.m /^-(void)getArchs$/ -getcjmp c-src/emacs/src/keyboard.c 147 +getDomainNames php-src/lce_functions.php /^ function getDomainNames()$/ +getFoo lua-src/test.lua /^function Cube.data.getFoo ()$/ +getPOReader php-src/lce_functions.php /^ function &getPOReader($domain)$/ +getPath objc-src/PackInsp.m /^-(const char *)getPath:(char *)buf forType:(const / +getPos lua-src/test.lua /^function Circle.getPos ()$/ +getPos lua-src/test.lua /^function Rectangle.getPos ()$/ +getTextDomains php-src/lce_functions.php /^ function getTextDomains($lines)$/ get_compressor_from_suffix c-src/etags.c /^get_compressor_from_suffix (char *file, char **ext/ get_contiguous_space c-src/emacs/src/gmalloc.c /^get_contiguous_space (ptrdiff_t size, void *positi/ get_current_dir_name c-src/emacs/src/gmalloc.c 33 -getDomainNames php-src/lce_functions.php /^ function getDomainNames()$/ -getFoo lua-src/test.lua /^function Cube.data.getFoo ()$/ get_input_pending c-src/emacs/src/keyboard.c /^get_input_pending (int flags)$/ get_language_from_filename c-src/etags.c /^get_language_from_filename (char *file, int case_s/ get_language_from_interpreter c-src/etags.c /^get_language_from_interpreter (char *interpreter)$/ get_language_from_langname c-src/etags.c /^get_language_from_langname (const char *name)$/ -GetLayerByName lua-src/allegro.lua /^function GetLayerByName (name)$/ get_layer_by_name lua-src/allegro.lua /^local function get_layer_by_name (sprite, layer, n/ -GetNameList pas-src/common.pas /^function GetNameList; (* : BinNodePointer;*)$/ -GetNewNameListNode pas-src/common.pas /^function GetNewNameListNode;(*($/ -getopt1.o make-src/Makefile /^getopt1.o: emacs\/lib-src\/getopt1.c$/ -_GETOPT_H c-src/getopt.h 19 -GETOPTOBJS make-src/Makefile /^GETOPTOBJS= #getopt.o getopt1.o$/ -getopt.o make-src/Makefile /^getopt.o: emacs\/lib-src\/getopt.c$/ +get_tag c-src/etags.c /^get_tag (register char *bp, char **namepp)$/ +get_word c-src/tab.c /^static char *get_word(char **str, char delim)$/ +getcjmp c-src/emacs/src/keyboard.c 147 getopt perl-src/yagrip.pl /^sub getopt {$/ -Get_Own_Priority/f ada-src/2ataspri.adb /^ function Get_Own_Priority return System.Any_Pri/ -Get_Own_Priority/f ada-src/2ataspri.ads /^ function Get_Own_Priority return System.Any_Pri/ -getPath objc-src/PackInsp.m /^-(const char *)getPath:(char *)buf forType:(const / -getPOReader php-src/lce_functions.php /^ function &getPOReader($domain)$/ -getPos lua-src/test.lua /^function Circle.getPos ()$/ -getPos lua-src/test.lua /^function Rectangle.getPos ()$/ -Get_Priority/f ada-src/2ataspri.adb /^ function Get_Priority (T : TCB_Ptr) return Syst/ -Get_Priority/f ada-src/2ataspri.ads /^ function Get_Priority (T : TCB_Ptr) return Syst/ +getopt.o make-src/Makefile /^getopt.o: emacs\/lib-src\/getopt.c$/ +getopt1.o make-src/Makefile /^getopt1.o: emacs\/lib-src\/getopt1.c$/ getptys objc-src/Subprocess.m /^getptys (int *master, int *slave)$/ -get_tag c-src/etags.c /^get_tag (register char *bp, char **namepp)$/ -getTextDomains php-src/lce_functions.php /^ function getTextDomains($lines)$/ gettext php-src/lce_functions.php /^ function gettext($msgid)$/ -GetTextRef pas-src/common.pas /^function GetTextRef;(*($/ -GetUniqueLayerName lua-src/allegro.lua /^function GetUniqueLayerName ()$/ -get_word c-src/tab.c /^static char *get_word(char **str, char delim)$/ -GE y-src/parse.c 8 ggg c-src/h.h 10 ghi1 c-src/h.h 36 ghi2 c-src/h.h 39 giallo cp-src/c.C 40 glider cp-src/conway.cpp /^void glider(int x, int y)$/ gloggingall tex-src/texinfo.tex /^\\def\\gloggingall{\\begingroup \\globaldefs = 1 \\logg/ -/gn ps-src/rfc1245.ps /^\/gn { $/ gnu html-src/software.html /^Free software that I wrote for the GNU project or / -_GNU_SOURCE c-src/etags.c 94 gobble_input c-src/emacs/src/keyboard.c /^gobble_input (void)$/ goto-tag-location-function el-src/emacs/lisp/progmodes/etags.el /^(defvar goto-tag-location-function nil$/ goto_xy cp-src/screen.cpp /^void goto_xy(unsigned char x, unsigned char y)$/ -/G ps-src/rfc1245.ps /^\/G { $/ -/graymode ps-src/rfc1245.ps /^\/graymode true def$/ -/grayness ps-src/rfc1245.ps /^\/grayness {$/ -GREEN cp-src/screen.hpp 14 group tex-src/texinfo.tex /^\\def\\group{\\begingroup$/ -GROW_RAW_KEYBUF c-src/emacs/src/keyboard.c 119 -gtr tex-src/texinfo.tex /^\\def\\gtr{\\realbackslash gtr}%$/ gtr tex-src/texinfo.tex /^\\def\\gtr{\\realbackslash gtr}$/ -/guillemotleft ps-src/rfc1245.ps /^\/guillemotleft \/guillemotright \/ellipsis \/.notdef / +gtr tex-src/texinfo.tex /^\\def\\gtr{\\realbackslash gtr}%$/ +handleList pyt-src/server.py /^ def handleList(self, event):$/ +handleNew pyt-src/server.py /^ def handleNew(self, event):$/ handle_async_input c-src/emacs/src/keyboard.c /^handle_async_input (void)$/ handle_input_available_signal c-src/emacs/src/keyboard.c /^handle_input_available_signal (int sig)$/ handle_interrupt c-src/emacs/src/keyboard.c /^handle_interrupt (bool in_signal_handler)$/ handle_interrupt_signal c-src/emacs/src/keyboard.c /^handle_interrupt_signal (int sig)$/ -handleList pyt-src/server.py /^ def handleList(self, event):$/ -handleNew pyt-src/server.py /^ def handleNew(self, event):$/ +handle_user_signal c-src/emacs/src/keyboard.c /^handle_user_signal (int sig)$/ handler c-src/emacs/src/lisp.h 3023 handlertype c-src/emacs/src/lisp.h 3021 -handle_user_signal c-src/emacs/src/keyboard.c /^handle_user_signal (int sig)$/ has_arg c-src/getopt.h 82 hash c-src/emacs/src/lisp.h 1843 hash c-src/etags.c /^hash (const char *str, int len)$/ -hashfn c-src/emacs/src/lisp.h /^ EMACS_UINT (*hashfn) (struct hash_table_test *t,/ -HASH_HASH c-src/emacs/src/lisp.h /^HASH_HASH (struct Lisp_Hash_Table *h, ptrdiff_t id/ -HASH_INDEX c-src/emacs/src/lisp.h /^HASH_INDEX (struct Lisp_Hash_Table *h, ptrdiff_t i/ -HASH_KEY c-src/emacs/src/lisp.h /^HASH_KEY (struct Lisp_Hash_Table *h, ptrdiff_t idx/ -HASH_NEXT c-src/emacs/src/lisp.h /^HASH_NEXT (struct Lisp_Hash_Table *h, ptrdiff_t id/ -HASH_TABLE_P c-src/emacs/src/lisp.h /^HASH_TABLE_P (Lisp_Object a)$/ -HASH_TABLE_SIZE c-src/emacs/src/lisp.h /^HASH_TABLE_SIZE (struct Lisp_Hash_Table *h)$/ hash_table_test c-src/emacs/src/lisp.h 1805 -HASH_VALUE c-src/emacs/src/lisp.h /^HASH_VALUE (struct Lisp_Hash_Table *h, ptrdiff_t i/ -hat tex-src/texinfo.tex /^\\def\\hat{\\realbackslash hat}%$/ +hashfn c-src/emacs/src/lisp.h /^ EMACS_UINT (*hashfn) (struct hash_table_test *t,/ hat tex-src/texinfo.tex /^\\def\\hat{\\realbackslash hat}$/ -HAVE_NTGUI c-src/etags.c 116 +hat tex-src/texinfo.tex /^\\def\\hat{\\realbackslash hat}%$/ hdr c-src/emacs/src/gmalloc.c 1865 +head_table c-src/emacs/src/keyboard.c 11027 header c-src/emacs/src/lisp.h 1371 header c-src/emacs/src/lisp.h 1388 header c-src/emacs/src/lisp.h 1581 @@ -1702,52 +2822,24 @@ header c-src/emacs/src/lisp.h 1610 header c-src/emacs/src/lisp.h 1672 header c-src/emacs/src/lisp.h 1826 header_size c-src/emacs/src/lisp.h 1471 -HEADINGSafter tex-src/texinfo.tex /^\\def\\HEADINGSafter{\\let\\HEADINGShook=\\HEADINGSdoub/ -HEADINGSdoubleafter tex-src/texinfo.tex /^\\let\\HEADINGSdoubleafter=\\HEADINGSafter$/ -HEADINGSdouble tex-src/texinfo.tex /^\\def\\HEADINGSdouble{$/ -HEADINGSdoublex tex-src/texinfo.tex /^\\def\\HEADINGSdoublex{%$/ -HEADINGShook tex-src/texinfo.tex /^\\def\\HEADINGSafter{\\let\\HEADINGShook=\\HEADINGSdoub/ -HEADINGShook tex-src/texinfo.tex /^\\def\\HEADINGSsingleafter{\\let\\HEADINGShook=\\HEADIN/ -HEADINGShook tex-src/texinfo.tex /^\\let\\HEADINGShook=\\relax$/ -HEADINGSoff tex-src/texinfo.tex /^\\def\\HEADINGSoff{$/ -HEADINGSon tex-src/texinfo.tex /^\\def\\HEADINGSon{\\HEADINGSdouble}$/ -HEADINGSon tex-src/texinfo.tex /^\\global\\def\\HEADINGSon{\\HEADINGSdouble}}$/ -HEADINGSon tex-src/texinfo.tex /^\\global\\def\\HEADINGSon{\\HEADINGSsingle}}$/ -HEADINGSsingleafter tex-src/texinfo.tex /^\\def\\HEADINGSsingleafter{\\let\\HEADINGShook=\\HEADIN/ -HEADINGSsingle tex-src/texinfo.tex /^\\def\\HEADINGSsingle{$/ -HEADINGSsinglex tex-src/texinfo.tex /^\\def\\HEADINGSsinglex{%$/ -headings tex-src/texinfo.tex /^\\def\\headings #1 {\\csname HEADINGS#1\\endcsname}$/ heading tex-src/texinfo.tex /^\\def\\heading{\\parsearg\\secheadingi}$/ -head_table c-src/emacs/src/keyboard.c 11027 -_heapbase c-src/emacs/src/gmalloc.c 356 -HEAP c-src/emacs/src/gmalloc.c 131 -_heapindex c-src/emacs/src/gmalloc.c 365 -_heapinfo c-src/emacs/src/gmalloc.c 359 -_heaplimit c-src/emacs/src/gmalloc.c 368 +headings tex-src/texinfo.tex /^\\def\\headings #1 {\\csname HEADINGS#1\\endcsname}$/ heapsize c-src/emacs/src/gmalloc.c 362 hello scm-src/test.scm /^(define hello "Hello, Emacs!")$/ hello scm-src/test.scm /^(set! hello "Hello, world!")$/ hello-world scm-src/test.scm /^(define (hello-world)$/ -help_char_p c-src/emacs/src/keyboard.c /^help_char_p (Lisp_Object c)$/ help c-src/etags.c 193 -help_form_saved_window_configs c-src/emacs/src/keyboard.c 2156 helpPanel objcpp-src/SimpleCalc.M /^- helpPanel:sender$/ +help_char_p c-src/emacs/src/keyboard.c /^help_char_p (Lisp_Object c)$/ +help_form_saved_window_configs c-src/emacs/src/keyboard.c 2156 helpwin pyt-src/server.py /^def helpwin(helpdict):$/ hide_cursor cp-src/screen.cpp /^void hide_cursor(void)$/ hlds merc-src/accumulator.m /^:- import_module hlds.$/ -/home/www/pub/etags.c.gz make-src/Makefile /^\/home\/www\/pub\/etags.c.gz: etags.c$/ -/home/www/pub/software/unix/etags.tar.gz make-src/Makefile /^\/home\/www\/pub\/software\/unix\/etags.tar.gz: Makefile/ -/H ps-src/rfc1245.ps /^\/H { $/ hsize tex-src/texinfo.tex /^ {\\let\\hsize=\\pagewidth \\makefootline}}$/ -hsize tex-src/texinfo.tex /^{\\let\\hsize=\\pagewidth \\makefootline}}}%$/ hsize tex-src/texinfo.tex /^ {\\let\\hsize=\\pagewidth \\makeheadline}$/ hsize tex-src/texinfo.tex /^\\shipout\\vbox{{\\let\\hsize=\\pagewidth \\makeheadline/ -HTML_help c-src/etags.c 584 -HTML_labels c-src/etags.c /^HTML_labels (FILE *inf)$/ -HTMLSRC make-src/Makefile /^HTMLSRC=softwarelibero.html index.shtml algrthms.h/ -HTML_suffixes c-src/etags.c 582 +hsize tex-src/texinfo.tex /^{\\let\\hsize=\\pagewidth \\makefootline}}}%$/ htmltreelist prol-src/natded.prolog /^htmltreelist([]).$/ -/hx ps-src/rfc1245.ps /^\/hx { $/ hybrid_aligned_alloc c-src/emacs/src/gmalloc.c /^hybrid_aligned_alloc (size_t alignment, size_t siz/ hybrid_calloc c-src/emacs/src/gmalloc.c /^hybrid_calloc (size_t nmemb, size_t size)$/ hybrid_free c-src/emacs/src/gmalloc.c /^hybrid_free (void *ptr)$/ @@ -1755,58 +2847,59 @@ hybrid_get_current_dir_name c-src/emacs/src/gmalloc.c /^hybrid_get_current_dir_n hybrid_malloc c-src/emacs/src/gmalloc.c /^hybrid_malloc (size_t size)$/ hybrid_realloc c-src/emacs/src/gmalloc.c /^hybrid_realloc (void *ptr, size_t size)$/ hypothetical_mem prol-src/natded.prolog /^hypothetical_mem(fi(N),Ass,_):-$/ -/iacute ps-src/rfc1245.ps /^\/iacute \/igrave \/icircumflex \/idieresis \/ntilde \/o/ -ialpage tex-src/texinfo.tex /^ \\availdimen@=\\pageheight \\advance\\availdimen@ by/ -ialpage tex-src/texinfo.tex /^\\def\\pagesofar{\\unvbox\\partialpage %$/ -ialpage tex-src/texinfo.tex /^ \\dimen@=\\pageheight \\advance\\dimen@ by-\\ht\\pa/ -ialpage tex-src/texinfo.tex /^ \\dimen@=\\pageheight \\advance\\dimen@ by-\\ht\\parti/ -ialpage tex-src/texinfo.tex /^\\newbox\\partialpage$/ -ialpage tex-src/texinfo.tex /^ \\output={\\global\\setbox\\partialpage=$/ -i c.c 169 -/Icircumflex ps-src/rfc1245.ps /^\/Icircumflex \/Idieresis \/Igrave \/Oacute \/Ocircumfl/ -i cp-src/c.C 132 -/ic ps-src/rfc1245.ps /^\/ic [ $/ i c-src/c.c 2 i c-src/emacs/src/lisp.h 4673 i c-src/emacs/src/lisp.h 4679 i c-src/emacs/src/lisp.h 567 +i c.c 169 +i cp-src/c.C 132 +i tex-src/texinfo.tex /^\\def\\i##1{\\realbackslash i {##1}}$/ +i tex-src/texinfo.tex /^\\def\\i##1{\\realbackslash i {##1}}%$/ +i tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ +i tex-src/texinfo.tex /^\\let\\i=\\indexdummyfont$/ +i tex-src/texinfo.tex /^\\let\\i=\\smartitalic$/ +ialpage tex-src/texinfo.tex /^ \\dimen@=\\pageheight \\advance\\dimen@ by-\\ht\\pa/ +ialpage tex-src/texinfo.tex /^ \\availdimen@=\\pageheight \\advance\\availdimen@ by/ +ialpage tex-src/texinfo.tex /^ \\dimen@=\\pageheight \\advance\\dimen@ by-\\ht\\parti/ +ialpage tex-src/texinfo.tex /^ \\output={\\global\\setbox\\partialpage=$/ +ialpage tex-src/texinfo.tex /^\\def\\pagesofar{\\unvbox\\partialpage %$/ +ialpage tex-src/texinfo.tex /^\\newbox\\partialpage$/ identify_goal_type merc-src/accumulator.m /^:- pred identify_goal_type(pred_id::in, proc_id::i/ identify_out_and_out_prime merc-src/accumulator.m /^:- pred identify_out_and_out_prime(module_info::in/ identify_recursive_calls merc-src/accumulator.m /^:- pred identify_recursive_calls(pred_id::in, proc/ idx c-src/emacs/src/lisp.h 3150 -IEEE_FLOATING_POINT c-src/emacs/src/lisp.h 2415 +ifclear tex-src/texinfo.tex /^\\def\\ifclear{\\begingroup\\ignoresections\\parsearg\\i/ ifclearfail tex-src/texinfo.tex /^\\def\\ifclearfail{\\begingroup\\ignoresections\\ifclea/ ifclearfailxxx tex-src/texinfo.tex /^\\long\\def\\ifclearfailxxx #1\\end ifclear{\\endgroup\\/ -ifclear tex-src/texinfo.tex /^\\def\\ifclear{\\begingroup\\ignoresections\\parsearg\\i/ ifclearxxx tex-src/texinfo.tex /^\\def\\ifclearxxx #1{\\endgroup$/ ifinfo tex-src/texinfo.tex /^\\def\\ifinfo{\\begingroup\\ignoresections\\ifinfoxxx}$/ ifinfoxxx tex-src/texinfo.tex /^\\long\\def\\ifinfoxxx #1\\end ifinfo{\\endgroup\\ignore/ +ifset tex-src/texinfo.tex /^\\def\\ifset{\\begingroup\\ignoresections\\parsearg\\ifs/ ifsetfail tex-src/texinfo.tex /^\\def\\ifsetfail{\\begingroup\\ignoresections\\ifsetfai/ ifsetfailxxx tex-src/texinfo.tex /^\\long\\def\\ifsetfailxxx #1\\end ifset{\\endgroup\\igno/ -ifset tex-src/texinfo.tex /^\\def\\ifset{\\begingroup\\ignoresections\\parsearg\\ifs/ ifsetxxx tex-src/texinfo.tex /^\\def\\ifsetxxx #1{\\endgroup$/ iftex tex-src/texinfo.tex /^\\def\\iftex{}$/ ifusingtt tex-src/texinfo.tex /^\\def\\ifusingtt#1#2{\\ifdim \\fontdimen3\\the\\font=0pt/ +ignore tex-src/texinfo.tex /^\\def\\ignore{\\begingroup\\ignoresections$/ ignore_case c-src/etags.c 266 ignore_mouse_drag_p c-src/emacs/src/keyboard.c 1256 ignoresections tex-src/texinfo.tex /^\\def\\ignoresections{%$/ -ignore tex-src/texinfo.tex /^\\def\\ignore{\\begingroup\\ignoresections$/ ignorexxx tex-src/texinfo.tex /^\\long\\def\\ignorexxx #1\\end ignore{\\endgroup\\ignore/ ii tex-src/texinfo.tex /^\\def\\ii#1{{\\it #1}} % italic font$/ -IMAGEP c-src/emacs/src/lisp.h /^IMAGEP (Lisp_Object x)$/ immediate_quit c-src/emacs/src/keyboard.c 174 impatto html-src/softwarelibero.html /^Impatto pratico del software libero$/ implementation merc-src/accumulator.m /^:- implementation.$/ implicitmath tex-src/texinfo.tex /^\\let\\implicitmath = $$/ +inENV tex-src/texinfo.tex /^\\newif\\ifENV \\ENVfalse \\def\\inENV{\\ifENV\\relax\\els/ +in_word_set c-src/etags.c /^in_word_set (register const char *str, register un/ inattribute c-src/etags.c 2400 inc cp-src/Range.h /^ double inc (void) const { return rng_inc; }$/ -/inch ps-src/rfc1245.ps /^\/inch {72 mul} def$/ include tex-src/texinfo.tex /^\\def\\include{\\parsearg\\includezzz}$/ includezzz tex-src/texinfo.tex /^\\def\\includezzz #1{{\\def\\thisfile{#1}\\input #1$/ indbf tex-src/texinfo.tex /^\\let\\indbf=\\indrm$/ +index c-src/emacs/src/lisp.h 1856 indexbackslash tex-src/texinfo.tex /^ \\def\\indexbackslash{\\rawbackslashxx}$/ indexbackslash tex-src/texinfo.tex /^\\let\\indexbackslash=0 %overridden during \\printin/ -index c-src/emacs/src/lisp.h 1856 indexdotfill tex-src/texinfo.tex /^\\def\\indexdotfill{\\cleaders$/ indexdummies tex-src/texinfo.tex /^\\def\\indexdummies{%$/ indexdummydots tex-src/texinfo.tex /^\\def\\indexdummydots{...}$/ @@ -1820,104 +2913,70 @@ indsc tex-src/texinfo.tex /^\\let\\indsc=\\indrm$/ indsf tex-src/texinfo.tex /^\\let\\indsf=\\indrm$/ indsl tex-src/texinfo.tex /^\\let\\indsl=\\indit$/ indtt tex-src/texinfo.tex /^\\let\\indtt=\\ninett$/ -inENV tex-src/texinfo.tex /^\\newif\\ifENV \\ENVfalse \\def\\inENV{\\ifENV\\relax\\els/ infabsdir c-src/etags.c 206 infabsname c-src/etags.c 205 infiles make-src/Makefile /^infiles = $(filter-out ${NONSRCS},${SRCS}) srclist/ infname c-src/etags.c 204 +info c-src/emacs/src/gmalloc.c 157 +infoPanel objcpp-src/SimpleCalc.M /^- infoPanel:sender$/ +infoappendix tex-src/texinfo.tex /^\\def\\infoappendix{\\parsearg\\appendixzzz}$/ infoappendixsec tex-src/texinfo.tex /^\\def\\infoappendixsec{\\parsearg\\appendixseczzz}$/ infoappendixsubsec tex-src/texinfo.tex /^\\def\\infoappendixsubsec{\\parsearg\\appendixsubseczz/ infoappendixsubsubsec tex-src/texinfo.tex /^\\def\\infoappendixsubsubsec{\\parsearg\\appendixsubsu/ -infoappendix tex-src/texinfo.tex /^\\def\\infoappendix{\\parsearg\\appendixzzz}$/ infochapter tex-src/texinfo.tex /^\\def\\infochapter{\\parsearg\\chapterzzz}$/ -info c-src/emacs/src/gmalloc.c 157 -infoPanel objcpp-src/SimpleCalc.M /^- infoPanel:sender$/ inforef tex-src/texinfo.tex /^\\def\\inforef #1{\\inforefzzz #1,,,,**}$/ inforefzzz tex-src/texinfo.tex /^\\def\\inforefzzz #1,#2,#3,#4**{See Info file \\file{/ infosection tex-src/texinfo.tex /^\\def\\infosection{\\parsearg\\sectionzzz}$/ infosubsection tex-src/texinfo.tex /^\\def\\infosubsection{\\parsearg\\subsectionzzz}$/ infosubsubsection tex-src/texinfo.tex /^\\def\\infosubsubsection{\\parsearg\\subsubsectionzzz}/ infotop tex-src/texinfo.tex /^\\def\\infotop{\\parsearg\\unnumberedzzz}$/ +infounnumbered tex-src/texinfo.tex /^\\def\\infounnumbered{\\parsearg\\unnumberedzzz}$/ infounnumberedsec tex-src/texinfo.tex /^\\def\\infounnumberedsec{\\parsearg\\unnumberedseczzz}/ infounnumberedsubsec tex-src/texinfo.tex /^\\def\\infounnumberedsubsec{\\parsearg\\unnumberedsubs/ infounnumberedsubsubsec tex-src/texinfo.tex /^\\def\\infounnumberedsubsubsec{\\parsearg\\unnumbereds/ -infounnumbered tex-src/texinfo.tex /^\\def\\infounnumbered{\\parsearg\\unnumberedzzz}$/ -inita c.c /^static void inita () {}$/ -initb c.c /^static void initb () {}$/ -init_control c.c 239 init c-src/etags.c /^init (void)$/ -Initialize_Cond/p ada-src/2ataspri.adb /^ procedure Initialize_Cond (Cond : in out Condit/ -Initialize_Cond/p ada-src/2ataspri.ads /^ procedure Initialize_Cond (Cond : in out Condit/ -initialize_goal_store merc-src/accumulator.m /^:- func initialize_goal_store(list(hlds_goal), ins/ -Initialize_LL_Tasks/p ada-src/2ataspri.adb /^ procedure Initialize_LL_Tasks (T : TCB_Ptr) is$/ -Initialize_LL_Tasks/p ada-src/2ataspri.ads /^ procedure Initialize_LL_Tasks (T : TCB_Ptr);$/ -Initialize_Lock/p ada-src/2ataspri.adb /^ procedure Initialize_Lock$/ -Initialize_Lock/p ada-src/2ataspri.ads /^ procedure Initialize_Lock (Prio : System.Any_Pr/ -initialize-new-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun initialize-new-tags-table ()$/ -initialize_random_junk y-src/cccp.y /^initialize_random_junk ()$/ -InitializeStringPackage pas-src/common.pas /^procedure InitializeStringPackage;$/ -Initialize_TAS_Cell/p ada-src/2ataspri.adb /^ procedure Initialize_TAS_Cell (Cell : out TAS_C/ -Initialize_TAS_Cell/p ada-src/2ataspri.ads /^ procedure Initialize_TAS_Cell (Cell : out TA/ -initial_kboard c-src/emacs/src/keyboard.c 84 -initial tex-src/texinfo.tex /^\\def\\initial #1{%$/ -init_kboard c-src/emacs/src/keyboard.c /^init_kboard (KBOARD *kb, Lisp_Object type)$/ -init_keyboard c-src/emacs/src/keyboard.c /^init_keyboard (void)$/ -InitNameList pas-src/common.pas /^procedure InitNameList;$/ -InitNameStringPool pas-src/common.pas /^procedure InitNameStringPool;$/ -init objcpp-src/SimpleCalc.M /^- init$/ init objc-src/Subprocess.m /^ andStdErr:(BOOL)wantsStdErr$/ init objc-src/Subprocess.m /^- init:(const char *)subprocessString$/ -__init__ pyt-src/server.py /^ def __init__(self):$/ -__init__ pyt-src/server.py /^ def __init__(self, host, sitelist, master=None/ -__init__ pyt-src/server.py /^ def __init__(self, master=None):$/ -__init__ pyt-src/server.py /^ def __init__(self, Master, text, textvar, widt/ -__init__ pyt-src/server.py /^ def __init__(self, newlegend, list, editor, ma/ -__init__ pyt-src/server.py /^ def __init__(self, user, userlist, master=None/ +init objcpp-src/SimpleCalc.M /^- init$/ +init_control c.c 239 +init_kboard c-src/emacs/src/keyboard.c /^init_kboard (KBOARD *kb, Lisp_Object type)$/ +init_keyboard c-src/emacs/src/keyboard.c /^init_keyboard (void)$/ init_registry cp-src/clheir.cpp /^void init_registry(void)$/ init_tool_bar_items c-src/emacs/src/keyboard.c /^init_tool_bar_items (Lisp_Object reuse)$/ -Inner1/b ada-src/etags-test-for.ada /^ package body Inner1 is$/ -Inner1/b ada-src/waroquiers.ada /^ package body Inner1 is$/ -Inner1/s ada-src/etags-test-for.ada /^ package Inner1 is$/ -Inner1/s ada-src/waroquiers.ada /^ package Inner1 is$/ -Inner2/b ada-src/etags-test-for.ada /^ package body Inner2 is$/ -Inner2/b ada-src/waroquiers.ada /^ package body Inner2 is$/ -Inner2/s ada-src/etags-test-for.ada /^ package Inner2 is$/ -Inner2/s ada-src/waroquiers.ada /^ package Inner2 is$/ +inita c.c /^static void inita () {}$/ +initb c.c /^static void initb () {}$/ +initial tex-src/texinfo.tex /^\\def\\initial #1{%$/ +initial_kboard c-src/emacs/src/keyboard.c 84 +initialize-new-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun initialize-new-tags-table ()$/ +initialize_goal_store merc-src/accumulator.m /^:- func initialize_goal_store(list(hlds_goal), ins/ +initialize_random_junk y-src/cccp.y /^initialize_random_junk ()$/ +input-pending-p c-src/emacs/src/keyboard.c /^DEFUN ("input-pending-p", Finput_pending_p, Sinput/ input_available_clear_time c-src/emacs/src/keyboard.c 324 -INPUT_EVENT_POS_MAX c-src/emacs/src/keyboard.c 3698 -INPUT_EVENT_POS_MIN c-src/emacs/src/keyboard.c 3701 input_pending c-src/emacs/src/keyboard.c 239 -input-pending-p c-src/emacs/src/keyboard.c /^DEFUN ("input-pending-p", Finput_pending_p, Sinput/ input_polling_used c-src/emacs/src/keyboard.c /^input_polling_used (void)$/ input_was_pending c-src/emacs/src/keyboard.c 287 insert-abbrev-table-description c-src/abbrev.c /^DEFUN ("insert-abbrev-table-description", Finsert_/ insertion_type c-src/emacs/src/lisp.h 1989 insertname pas-src/common.pas /^function insertname;(*($/ -INSERT_TREE_NODE pas-src/common.pas /^procedure INSERT_TREE_NODE;(*( $/ -Install_Abort_Handler/p ada-src/2ataspri.adb /^ procedure Install_Abort_Handler (Handler : Abor/ -Install_Abort_Handler/p ada-src/2ataspri.ads /^ procedure Install_Abort_Handler (Handler : Abor/ -Install_Error_Handler/p ada-src/2ataspri.adb /^ procedure Install_Error_Handler (Handler : Syst/ -Install_Error_Handler/p ada-src/2ataspri.ads /^ procedure Install_Error_Handler (Handler : Syst/ +instance_method ruby-src/test.rb /^ def instance_method$/ instance_method_equals= ruby-src/test.rb /^ def instance_method_equals=$/ instance_method_exclamation! ruby-src/test.rb /^ def instance_method_exclamation!$/ instance_method_question? ruby-src/test.rb /^ def instance_method_question?$/ -instance_method ruby-src/test.rb /^ def instance_method$/ -INSTANTIATE_MDIAGARRAY_FRIENDS cp-src/MDiagArray2.h /^#define INSTANTIATE_MDIAGARRAY_FRIENDS(T) \\$/ -instruct c-src/etags.c 2527 instr y-src/parse.y 81 -INT_BIT c-src/emacs/src/gmalloc.c 124 -INT c-src/h.h 32 +instruct c-src/etags.c 2527 +int merc-src/accumulator.m /^:- import_module int.$/ +intNumber go-src/test1.go 13 integer c-src/emacs/src/lisp.h 2127 +integer y-src/cccp.y 112 integer_overflow y-src/cccp.y /^integer_overflow ()$/ -INTEGERP c-src/emacs/src/lisp.h /^# define INTEGERP(x) lisp_h_INTEGERP (x)$/ -INTEGER_TO_CONS c-src/emacs/src/lisp.h /^#define INTEGER_TO_CONS(i) \\$/ integertonmstr pas-src/common.pas /^function integertonmstr; (* (TheInteger : integer)/ -integer y-src/cccp.y 112 intensity1 f-src/entry.for /^ & intensity1(efv,fv,svin,svquad,sfpv,maxp,val/ intensity1 f-src/entry.strange /^ & intensity1(efv,fv,svin,svquad,sfpv,maxp,val/ intensity1 f-src/entry.strange_suffix /^ & intensity1(efv,fv,svin,svquad,sfpv,maxp,val/ -interface_locate c-src/c.c /^interface_locate(void)$/ interface merc-src/accumulator.m /^:- interface.$/ +interface_locate c-src/c.c /^interface_locate(void)$/ +intern c-src/emacs/src/lisp.h /^intern (const char *str)$/ +intern_c_string c-src/emacs/src/lisp.h /^intern_c_string (const char *str)$/ internalBitem tex-src/texinfo.tex /^\\def\\internalBitem{\\smallbreak \\parsearg\\itemzzz}$/ internalBitemx tex-src/texinfo.tex /^\\def\\internalBitemx{\\par \\parsearg\\itemzzz}$/ internalBkitem tex-src/texinfo.tex /^\\def\\internalBkitem{\\smallbreak \\parsearg\\kitemzzz/ @@ -1926,123 +2985,87 @@ internalBxitem tex-src/texinfo.tex /^\\def\\internalBxitem "#1"{\\def\\xitemsubt internalBxitemx tex-src/texinfo.tex /^\\def\\internalBxitemx "#1"{\\def\\xitemsubtopix{#1} \\/ internal_last_event_frame c-src/emacs/src/keyboard.c 228 internalsetq tex-src/texinfo.tex /^\\def\\internalsetq #1#2{'xrdef {#1}{\\csname #2\\endc/ -intern c-src/emacs/src/lisp.h /^intern (const char *str)$/ -intern_c_string c-src/emacs/src/lisp.h /^intern_c_string (const char *str)$/ interned c-src/emacs/src/lisp.h 672 interpreters c-src/etags.c 197 +interrupt_input c-src/emacs/src/keyboard.c 328 interrupt_input_blocked c-src/emacs/src/keyboard.c 76 interrupt_input_blocked c-src/emacs/src/lisp.h 3048 -interrupt_input c-src/emacs/src/keyboard.c 328 -interrupts_deferred c-src/emacs/src/keyboard.c 331 -INTERVAL c-src/emacs/src/lisp.h 1149 -INTMASK c-src/emacs/src/lisp.h 437 -int merc-src/accumulator.m /^:- import_module int.$/ -intNumber go-src/test1.go 13 +interrupts_deferred c-src/emacs/src/keyboard.c 331 intoken c-src/etags.c /^#define intoken(c) (_itk[CHAR (c)]) \/* c can be in/ intspec c-src/emacs/src/lisp.h 1688 -INTTYPEBITS c-src/emacs/src/lisp.h 249 -INT_TYPE_SIZE y-src/cccp.y 91 intvar c-src/emacs/src/lisp.h 2277 -INT y-src/cccp.c 6 invalidate_nodes c-src/etags.c /^invalidate_nodes (fdesc *badfdp, node **npp)$/ -Invoking gzip tex-src/gzip.texi /^@node Invoking gzip, Advanced usage, Sample, Top$/ -in_word_set c-src/etags.c /^in_word_set (register const char *str, register un/ io merc-src/accumulator.m /^:- import_module io.$/ -IpAddrKind rs-src/test.rs 3 -ipc3dChannelType cp-src/c.C 1 ipc3dCSC19 cp-src/c.C 6 +ipc3dChannelType cp-src/c.C 1 ipc3dIslandHierarchy cp-src/c.C 1 ipc3dLinkControl cp-src/c.C 1 -__ip c.c 159 -/ip ps-src/rfc1245.ps /^\/ip { $/ -/i ps-src/rfc1245.ps /^\/i \/j \/k \/l \/m \/n \/o \/p \/q \/r \/s \/t \/u \/v \/w \/x \/y/ -irregular_location cp-src/clheir.hpp 47 irregular_location cp-src/clheir.hpp /^ irregular_location(double xi, double yi, doubl/ -ISALNUM c-src/etags.c /^#define ISALNUM(c) isalnum (CHAR (c))$/ -ISALPHA c-src/etags.c /^#define ISALPHA(c) isalpha (CHAR (c))$/ -is_associative_construction merc-src/accumulator.m /^:- pred is_associative_construction(module_info::i/ +irregular_location cp-src/clheir.hpp 47 isComment php-src/lce_functions.php /^ function isComment($class)$/ -IsControlCharName pas-src/common.pas /^function IsControlCharName($/ -IsControlChar pas-src/common.pas /^function IsControlChar; (*($/ +isHoliday cp-src/functions.cpp /^bool isHoliday ( Date d ){$/ +isLeap cp-src/functions.cpp /^bool isLeap ( int year ){$/ +is_associative_construction merc-src/accumulator.m /^:- pred is_associative_construction(module_info::i/ is_curly_brace_form c-src/h.h 54 -IS_DAEMON c-src/emacs/src/lisp.h 4257 -IS_DAEMON c-src/emacs/src/lisp.h 4261 -ISDIGIT c-src/etags.c /^#define ISDIGIT(c) isdigit (CHAR (c))$/ is_explicit c-src/h.h 49 is_func c-src/etags.c 221 -isHoliday cp-src/functions.cpp /^bool isHoliday ( Date d ){$/ is_hor_space y-src/cccp.y 953 is_idchar y-src/cccp.y 948 is_idstart y-src/cccp.y 950 -isLeap cp-src/functions.cpp /^bool isLeap ( int year ){$/ -ISLOWER c-src/etags.c /^#define ISLOWER(c) islower (CHAR (c))$/ is_muldiv_operation cp-src/c.C /^is_muldiv_operation(pc)$/ -ISO_FUNCTION_KEY_OFFSET c-src/emacs/src/keyboard.c 5149 +is_ordset prol-src/ordsets.prolog /^is_ordset(X) :- var(X), !, fail.$/ +is_recursive_case merc-src/accumulator.m /^:- pred is_recursive_case(list(hlds_goal)::in, pre/ iso_lispy_function_keys c-src/emacs/src/keyboard.c 5151 isoperator prol-src/natded.prolog /^isoperator(Char):-$/ isoptab prol-src/natded.prolog /^isoptab('%').$/ -is_ordset prol-src/ordsets.prolog /^is_ordset(X) :- var(X), !, fail.$/ -is_recursive_case merc-src/accumulator.m /^:- pred is_recursive_case(list(hlds_goal)::in, pre/ -Is_Set/f ada-src/2ataspri.adb /^ function Is_Set (Cell : in TAS_Cell) return Bo/ -Is_Set/f ada-src/2ataspri.ads /^ function Is_Set (Cell : in TAS_Cell)/ -ISUPPER c-src/etags.c /^# define ISUPPER(c) isupper (CHAR (c))$/ iswhite c-src/etags.c /^#define iswhite(c) (_wht[CHAR (c)]) \/* c is white / +item tex-src/texinfo.tex /^\\def\\item{\\errmessage{@item while not in a table}}/ +item tex-src/texinfo.tex /^\\let\\item = \\internalBitem %$/ +item tex-src/texinfo.tex /^\\let\\item=\\itemizeitem}$/ +item_properties c-src/emacs/src/keyboard.c 7568 itemcontents tex-src/texinfo.tex /^\\def\\itemcontents{#1}%$/ itemfont tex-src/texinfo.tex /^\\def\\itemfont{#2}%$/ itemindex tex-src/texinfo.tex /^\\let\\itemindex=#1%$/ -itemizeitem tex-src/texinfo.tex /^\\def\\itemizeitem{%$/ itemize tex-src/texinfo.tex /^\\def\\itemize{\\parsearg\\itemizezzz}$/ +itemizeitem tex-src/texinfo.tex /^\\def\\itemizeitem{%$/ itemizey tex-src/texinfo.tex /^\\def\\itemizey #1#2{%$/ itemizezzz tex-src/texinfo.tex /^\\def\\itemizezzz #1{%$/ -item_properties c-src/emacs/src/keyboard.c 7568 -item tex-src/texinfo.tex /^\\def\\item{\\errmessage{@item while not in a table}}/ -item tex-src/texinfo.tex /^\\let\\item = \\internalBitem %$/ -item tex-src/texinfo.tex /^\\let\\item=\\itemizeitem}$/ itemx tex-src/texinfo.tex /^\\def\\itemx{\\errmessage{@itemx while not in a table/ itemx tex-src/texinfo.tex /^\\let\\itemx = \\internalBitemx %$/ itemzzz tex-src/texinfo.tex /^\\def\\itemzzz #1{\\begingroup %$/ -i tex-src/texinfo.tex /^\\def\\i##1{\\realbackslash i {##1}}%$/ -i tex-src/texinfo.tex /^\\def\\i##1{\\realbackslash i {##1}}$/ -i tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ -i tex-src/texinfo.tex /^\\let\\i=\\indexdummyfont$/ -i tex-src/texinfo.tex /^\\let\\i=\\smartitalic$/ ivarheader tex-src/texinfo.tex /^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/ ivarx\defivarheader tex-src/texinfo.tex /^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/ -JAVASRC make-src/Makefile /^JAVASRC=AWTEMul.java KeyEve.java SMan.java SysCol./ jmp c-src/emacs/src/lisp.h 3044 just_read_file c-src/etags.c /^just_read_file (FILE *inf)$/ +kbd tex-src/texinfo.tex /^\\def\\kbd##1{\\realbackslash kbd {##1}}$/ +kbd tex-src/texinfo.tex /^\\def\\kbd##1{\\realbackslash kbd {##1}}%$/ +kbd tex-src/texinfo.tex /^\\def\\kbd#1{\\def\\look{#1}\\expandafter\\kbdfoo\\look??/ +kbd tex-src/texinfo.tex /^\\let\\kbd=\\indexdummyfont$/ kbd_buffer c-src/emacs/src/keyboard.c 291 kbd_buffer_events_waiting c-src/emacs/src/keyboard.c /^kbd_buffer_events_waiting (void)$/ kbd_buffer_get_event c-src/emacs/src/keyboard.c /^kbd_buffer_get_event (KBOARD **kbp,$/ kbd_buffer_nr_stored c-src/emacs/src/keyboard.c /^kbd_buffer_nr_stored (void)$/ -KBD_BUFFER_SIZE c-src/emacs/src/keyboard.c 82 kbd_buffer_store_event c-src/emacs/src/keyboard.c /^kbd_buffer_store_event (register struct input_even/ kbd_buffer_store_event_hold c-src/emacs/src/keyboard.c /^kbd_buffer_store_event_hold (register struct input/ kbd_buffer_store_help_event c-src/emacs/src/keyboard.c /^kbd_buffer_store_help_event (Lisp_Object frame, Li/ kbd_buffer_unget_event c-src/emacs/src/keyboard.c /^kbd_buffer_unget_event (register struct input_even/ kbd_fetch_ptr c-src/emacs/src/keyboard.c 297 -kbdfoo tex-src/texinfo.tex /^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/ kbd_store_ptr c-src/emacs/src/keyboard.c 302 -kbd tex-src/texinfo.tex /^\\def\\kbd#1{\\def\\look{#1}\\expandafter\\kbdfoo\\look??/ -kbd tex-src/texinfo.tex /^\\def\\kbd##1{\\realbackslash kbd {##1}}%$/ -kbd tex-src/texinfo.tex /^\\def\\kbd##1{\\realbackslash kbd {##1}}$/ -kbd tex-src/texinfo.tex /^\\let\\kbd=\\indexdummyfont$/ +kbdfoo tex-src/texinfo.tex /^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/ kboard c-src/emacs/src/keyboard.c 860 kboard_stack c-src/emacs/src/keyboard.c 858 kboard_stack c-src/emacs/src/keyboard.c 864 -KBYTES objc-src/PackInsp.m 58 +key tex-src/texinfo.tex /^\\def\\key #1{{\\tt \\exhyphenpenalty=10000\\uppercase{/ +key tex-src/texinfo.tex /^\\def\\key##1{\\realbackslash key {##1}}$/ +key tex-src/texinfo.tex /^\\def\\key##1{\\realbackslash key {##1}}%$/ +key tex-src/texinfo.tex /^\\let\\key=\\indexdummyfont$/ key_and_value c-src/emacs/src/lisp.h 1868 keyremap c-src/emacs/src/keyboard.c 8742 keyremap c-src/emacs/src/keyboard.c 8754 keyremap_step c-src/emacs/src/keyboard.c /^keyremap_step (Lisp_Object *keybuf, int bufsize, v/ keys_of_keyboard c-src/emacs/src/keyboard.c /^keys_of_keyboard (void)$/ -key tex-src/texinfo.tex /^\\def\\key##1{\\realbackslash key {##1}}%$/ -key tex-src/texinfo.tex /^\\def\\key##1{\\realbackslash key {##1}}$/ -key tex-src/texinfo.tex /^\\def\\key #1{{\\tt \\exhyphenpenalty=10000\\uppercase{/ -key tex-src/texinfo.tex /^\\let\\key=\\indexdummyfont$/ -KEY_TO_CHAR c-src/emacs/src/keyboard.c /^#define KEY_TO_CHAR(k) (XINT (k) & ((1 << CHARACTE/ -keyvalcgi prol-src/natded.prolog /^keyvalcgi(Key,Val):-$/ keyval prol-src/natded.prolog /^keyval(key(Key,Val)) --> [Key,'='], valseq(Val).$/ +keyvalcgi prol-src/natded.prolog /^keyvalcgi(Key,Val):-$/ keyvalscgi prol-src/natded.prolog /^keyvalscgi(KeyVals),$/ keyvalseq prol-src/natded.prolog /^keyvalseq([KeyVal|KeyVals]) --> $/ keyword_parsing y-src/cccp.y 73 @@ -2065,56 +3088,42 @@ kset_local_function_key_map c-src/emacs/src/keyboard.c /^kset_local_function_key kset_overriding_terminal_local_map c-src/emacs/src/keyboard.c /^kset_overriding_terminal_local_map (struct kboard / kset_real_last_command c-src/emacs/src/keyboard.c /^kset_real_last_command (struct kboard *kb, Lisp_Ob/ kset_system_key_syms c-src/emacs/src/keyboard.c /^kset_system_key_syms (struct kboard *kb, Lisp_Obje/ -LabeledEntry pyt-src/server.py /^class LabeledEntry(Frame):$/ +l tex-src/texinfo.tex /^\\def\\l#1{{\\li #1}\\null} % $/ +l tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ labelspace tex-src/texinfo.tex /^\\def\\labelspace{\\hskip1em \\relax}$/ lang c-src/etags.c 208 lang c-src/etags.c 251 lang c-src/etags.c 259 -Lang_function c-src/etags.c 182 -Lang_function c-src/h.h 6 lang_names c-src/etags.c 718 language c-src/etags.c 199 +last-tag el-src/emacs/lisp/progmodes/etags.el /^(defvar last-tag nil$/ last_abbrev_point c-src/abbrev.c 79 -lasta c.c 272 -lastargmargin tex-src/texinfo.tex /^\\newskip\\deflastargmargin \\deflastargmargin=18pt$/ -lastargmargin tex-src/texinfo.tex /^\\setbox0=\\hbox{\\hskip \\deflastargmargin{\\rm #2}\\hs/ last_auto_save c-src/emacs/src/keyboard.c 214 -lastb c.c 278 last_heapinfo c-src/emacs/src/gmalloc.c 403 last_mouse_button c-src/emacs/src/keyboard.c 5215 last_mouse_x c-src/emacs/src/keyboard.c 5216 last_mouse_y c-src/emacs/src/keyboard.c 5217 -lastnode tex-src/texinfo.tex /^\\def\\nodexxx[#1,#2]{\\gdef\\lastnode{#1}}$/ -lastnode tex-src/texinfo.tex /^\\let\\lastnode=\\relax}$/ -lastnode tex-src/texinfo.tex /^\\let\\lastnode=\\relax$/ last_non_minibuf_size c-src/emacs/src/keyboard.c 207 last_point_position c-src/emacs/src/keyboard.c 217 last_state_size c-src/emacs/src/gmalloc.c 402 -last-tag el-src/emacs/lisp/progmodes/etags.el /^(defvar last-tag nil$/ last_undo_boundary c-src/emacs/src/keyboard.c 1287 -LATEST make-src/Makefile /^LATEST=17$/ +lasta c.c 272 +lastargmargin tex-src/texinfo.tex /^\\newskip\\deflastargmargin \\deflastargmargin=18pt$/ +lastargmargin tex-src/texinfo.tex /^\\setbox0=\\hbox{\\hskip \\deflastargmargin{\\rm #2}\\hs/ +lastb c.c 278 +lastnode tex-src/texinfo.tex /^\\def\\nodexxx[#1,#2]{\\gdef\\lastnode{#1}}$/ +lastnode tex-src/texinfo.tex /^\\let\\lastnode=\\relax$/ +lastnode tex-src/texinfo.tex /^\\let\\lastnode=\\relax}$/ lb c-src/etags.c 2923 lbrb tex-src/texinfo.tex /^\\def\\lbrb{{\\bf\\char`\\[}} \\def\\rbrb{{\\bf\\char`\\]}}$/ lbs c-src/etags.c 2924 +lce php-src/lce_functions.php /^ function lce()$/ lce_bindtextdomain php-src/lce_functions.php /^ function lce_bindtextdomain($d_name, $d_path/ lce_bindtextdomain php-src/lce_functions.php /^ function lce_bindtextdomain($domain, $path)$/ -LCE_COMMENT php-src/lce_functions.php 13 -LCE_COMMENT_TOOL php-src/lce_functions.php 17 -LCE_COMMENT_USER php-src/lce_functions.php 15 lce_dgettext php-src/lce_functions.php /^ function lce_dgettext($domain, $msgid)$/ -LCE_FUNCTIONS php-src/lce_functions.php 4 lce_geteditcode php-src/lce_functions.php /^ function lce_geteditcode($type, $name, $text, $r/ lce_gettext php-src/lce_functions.php /^ function lce_gettext($msgid)$/ -L_CELL y-src/parse.c 10 -LCE_MSGID php-src/lce_functions.php 19 -LCE_MSGSTR php-src/lce_functions.php 21 -lce php-src/lce_functions.php /^ function lce()$/ lce_textdomain php-src/lce_functions.php /^ function lce_textdomain($domain)$/ -LCE_TEXT php-src/lce_functions.php 23 -LCE_UNKNOWN php-src/lce_functions.php 9 -LCE_WS php-src/lce_functions.php 11 -L_CONST y-src/parse.c 13 -LDFLAGS make-src/Makefile /^LDFLAGS=#-static -lc_p$/ leasqr html-src/software.html /^Leasqr$/ left c-src/etags.c 216 left_shift y-src/cccp.y /^left_shift (a, b)$/ @@ -2122,167 +3131,75 @@ len c-src/etags.c 237 length c-src/etags.c 2495 length y-src/cccp.y 113 length y-src/cccp.y 44 -LEQ y-src/cccp.c 14 -/less ps-src/rfc1245.ps /^\/less \/equal \/greater \/question \/at \/A \/B \/C \/D \/E/ -less tex-src/texinfo.tex /^\\def\\less{\\realbackslash less}%$/ less tex-src/texinfo.tex /^\\def\\less{\\realbackslash less}$/ +less tex-src/texinfo.tex /^\\def\\less{\\realbackslash less}%$/ let c-src/emacs/src/lisp.h 2981 letter tex-src/texinfo.tex /^ {#1}{Appendix \\appendixletter}{\\noexpand\\folio}}/ -letter tex-src/texinfo.tex /^{#1}{\\appendixletter}{\\the\\secno}{\\noexpand\\folio}/ -letter tex-src/texinfo.tex /^{#1}{\\appendixletter}{\\the\\secno}{\\the\\subsecno}{\\/ letter tex-src/texinfo.tex /^ {\\appendixletter}$/ letter tex-src/texinfo.tex /^ {\\appendixletter}{\\the\\secno}{\\the\\subsecno}{\\th/ letter tex-src/texinfo.tex /^\\chapmacro {#1}{Appendix \\appendixletter}%$/ letter tex-src/texinfo.tex /^\\gdef\\thissection{#1}\\secheading {#1}{\\appendixlet/ letter tex-src/texinfo.tex /^\\global\\advance \\appendixno by 1 \\message{Appendix/ letter tex-src/texinfo.tex /^\\subsecheading {#1}{\\appendixletter}{\\the\\secno}{\\/ +letter tex-src/texinfo.tex /^{#1}{\\appendixletter}{\\the\\secno}{\\noexpand\\folio}/ +letter tex-src/texinfo.tex /^{#1}{\\appendixletter}{\\the\\secno}{\\the\\subsecno}{\\/ letter: tex-src/texinfo.tex /^\\xdef\\thischapter{Appendix \\appendixletter: \\noexp/ level c-src/emacs/src/lisp.h 3153 lex prol-src/natded.prolog /^lex(W,SynOut,Sem):-$/ lexptr y-src/cccp.y 332 -LE y-src/parse.c 7 -L_FN0 y-src/parse.c 14 -L_FN1R y-src/parse.c 20 -L_FN1 y-src/parse.c 15 -L_FN2R y-src/parse.c 21 -L_FN2 y-src/parse.c 16 -L_FN3R y-src/parse.c 22 -L_FN3 y-src/parse.c 17 -L_FN4R y-src/parse.c 23 -L_FN4 y-src/parse.c 18 -L_FNNR y-src/parse.c 24 -L_FNN y-src/parse.c 19 -L_getit c-src/etags.c /^L_getit (void)$/ -L_GE y-src/parse.c 27 -__libc_atexit c-src/exit.c 30 -__libc_atexit c-src/exit.strange_suffix 30 +li tex-src/texinfo.tex /^\\let\\li = \\sf % Sometimes we call it \\li, not \\sf./ libs merc-src/accumulator.m /^:- import_module libs.$/ licenze html-src/softwarelibero.html /^Licenze d'uso di un programma$/ -LIGHTBLUE cp-src/screen.hpp 21 -LIGHTCYAN cp-src/screen.hpp 23 -LIGHTGRAY cp-src/screen.hpp 19 -LIGHTGREEN cp-src/screen.hpp 22 -LIGHTMAGENTA cp-src/screen.hpp 25 -LIGHTRED cp-src/screen.hpp 24 limit cp-src/Range.h /^ double limit (void) const { return rng_limit; }$/ +line c-src/etags.c 2493 +line perl-src/htlmify-cystic 37 +line y-src/parse.y 87 +lineCount php-src/lce_functions.php /^ function lineCount($entry)$/ linebuffer c-src/etags.c 239 linebuffer_init c-src/etags.c /^linebuffer_init (linebuffer *lbp)$/ linebuffer_setlen c-src/etags.c /^linebuffer_setlen (linebuffer *lbp, int toksize)$/ -lineCount php-src/lce_functions.php /^ function lineCount($entry)$/ -line c-src/etags.c 2493 lineno c-src/emacs/src/lisp.h 3147 -lineno c-src/etags.c 2506 -linenumber tex-src/texinfo.tex /^ \\def\\linenumber{\\the\\inputlineno:\\space}$/ -linenumber tex-src/texinfo.tex /^ \\let\\linenumber = \\empty % Non-3.0.$/ -line perl-src/htlmify-cystic 37 -linepos c-src/etags.c 2507 -linepos c-src/etags.c 2922 -line y-src/parse.y 87 -links html-src/software.html /^Links to interesting software$/ -Lisp_Bits c-src/emacs/src/lisp.h 239 -Lisp_Boolfwd c-src/emacs/src/lisp.h 2284 -Lisp_Bool_Vector c-src/emacs/src/lisp.h 1384 -Lisp_Buffer_Local_Value c-src/emacs/src/lisp.h 2334 -Lisp_Buffer_Objfwd c-src/emacs/src/lisp.h 2302 -Lisp_Char_Table c-src/emacs/src/lisp.h 1575 -Lisp_Compiled c-src/emacs/src/lisp.h 2429 -Lisp_Cons c-src/emacs/src/lisp.h 475 -lisp_eval_depth c-src/emacs/src/lisp.h 3045 -Lisp_Finalizer c-src/emacs/src/lisp.h 2186 -Lisp_Float c-src/emacs/src/lisp.h 2391 -Lisp_Float c-src/emacs/src/lisp.h 477 -Lisp_Free c-src/emacs/src/lisp.h 2201 -Lisp_functions c-src/etags.c /^Lisp_functions (FILE *inf)$/ -Lisp_Fwd_Bool c-src/emacs/src/lisp.h 505 -Lisp_Fwd_Buffer_Obj c-src/emacs/src/lisp.h 507 -Lisp_Fwd c-src/emacs/src/lisp.h 2368 -Lisp_Fwd_Int c-src/emacs/src/lisp.h 504 -Lisp_Fwd_Kboard_Obj c-src/emacs/src/lisp.h 508 -Lisp_Fwd_Obj c-src/emacs/src/lisp.h 506 -Lisp_Fwd_Type c-src/emacs/src/lisp.h 502 -Lisp_Hash_Table c-src/emacs/src/lisp.h 1823 -lisp_h_check_cons_list c-src/emacs/src/lisp.h /^# define lisp_h_check_cons_list() ((void) 0)$/ -lisp_h_CHECK_LIST_CONS c-src/emacs/src/lisp.h /^#define lisp_h_CHECK_LIST_CONS(x, y) CHECK_TYPE (C/ -lisp_h_CHECK_NUMBER c-src/emacs/src/lisp.h /^#define lisp_h_CHECK_NUMBER(x) CHECK_TYPE (INTEGER/ -lisp_h_CHECK_SYMBOL c-src/emacs/src/lisp.h /^#define lisp_h_CHECK_SYMBOL(x) CHECK_TYPE (SYMBOLP/ -lisp_h_CHECK_TYPE c-src/emacs/src/lisp.h /^#define lisp_h_CHECK_TYPE(ok, predicate, x) \\$/ -lisp_h_CONSP c-src/emacs/src/lisp.h /^#define lisp_h_CONSP(x) (XTYPE (x) == Lisp_Cons)$/ -Lisp_help c-src/etags.c 591 -lisp_h_EQ c-src/emacs/src/lisp.h /^#define lisp_h_EQ(x, y) (XLI (x) == XLI (y))$/ -lisp_h_FLOATP c-src/emacs/src/lisp.h /^#define lisp_h_FLOATP(x) (XTYPE (x) == Lisp_Float)/ -lisp_h_INTEGERP c-src/emacs/src/lisp.h /^#define lisp_h_INTEGERP(x) ((XTYPE (x) & (Lisp_Int/ -lisp_h_make_number c-src/emacs/src/lisp.h /^# define lisp_h_make_number(n) \\$/ -lisp_h_MARKERP c-src/emacs/src/lisp.h /^#define lisp_h_MARKERP(x) (MISCP (x) && XMISCTYPE / -lisp_h_MISCP c-src/emacs/src/lisp.h /^#define lisp_h_MISCP(x) (XTYPE (x) == Lisp_Misc)$/ -lisp_h_NILP c-src/emacs/src/lisp.h /^#define lisp_h_NILP(x) EQ (x, Qnil)$/ -lisp_h_SET_SYMBOL_VAL c-src/emacs/src/lisp.h /^#define lisp_h_SET_SYMBOL_VAL(sym, v) \\$/ -lisp_h_SYMBOL_CONSTANT_P c-src/emacs/src/lisp.h /^#define lisp_h_SYMBOL_CONSTANT_P(sym) (XSYMBOL (sy/ -lisp_h_SYMBOLP c-src/emacs/src/lisp.h /^#define lisp_h_SYMBOLP(x) (XTYPE (x) == Lisp_Symbo/ -lisp_h_SYMBOL_VAL c-src/emacs/src/lisp.h /^#define lisp_h_SYMBOL_VAL(sym) \\$/ -lisp_h_VECTORLIKEP c-src/emacs/src/lisp.h /^#define lisp_h_VECTORLIKEP(x) (XTYPE (x) == Lisp_V/ -lisp_h_XCAR c-src/emacs/src/lisp.h /^#define lisp_h_XCAR(c) XCONS (c)->car$/ -lisp_h_XCDR c-src/emacs/src/lisp.h /^#define lisp_h_XCDR(c) XCONS (c)->u.cdr$/ -lisp_h_XCONS c-src/emacs/src/lisp.h /^#define lisp_h_XCONS(a) \\$/ -lisp_h_XFASTINT c-src/emacs/src/lisp.h /^# define lisp_h_XFASTINT(a) XINT (a)$/ -lisp_h_XHASH c-src/emacs/src/lisp.h /^#define lisp_h_XHASH(a) XUINT (a)$/ -lisp_h_XIL c-src/emacs/src/lisp.h /^# define lisp_h_XIL(i) (i)$/ -lisp_h_XIL c-src/emacs/src/lisp.h /^# define lisp_h_XIL(i) ((Lisp_Object) { i })$/ -lisp_h_XINT c-src/emacs/src/lisp.h /^# define lisp_h_XINT(a) (XLI (a) >> INTTYPEBITS)$/ -lisp_h_XLI c-src/emacs/src/lisp.h /^# define lisp_h_XLI(o) (o)$/ -lisp_h_XLI c-src/emacs/src/lisp.h /^# define lisp_h_XLI(o) ((o).i)$/ -lisp_h_XPNTR c-src/emacs/src/lisp.h /^#define lisp_h_XPNTR(a) \\$/ -lisp_h_XSYMBOL c-src/emacs/src/lisp.h /^# define lisp_h_XSYMBOL(a) \\$/ -lisp_h_XTYPE c-src/emacs/src/lisp.h /^# define lisp_h_XTYPE(a) ((enum Lisp_Type) (XLI (a/ -lisp_h_XUNTAG c-src/emacs/src/lisp.h /^# define lisp_h_XUNTAG(a, type) ((void *) (intptr_/ -LISP_INITIALLY c-src/emacs/src/lisp.h /^#define LISP_INITIALLY(i) (i)$/ -LISP_INITIALLY c-src/emacs/src/lisp.h /^#define LISP_INITIALLY(i) {i}$/ -LISP_INITIALLY_ZERO c-src/emacs/src/lisp.h 582 -Lisp_Int0 c-src/emacs/src/lisp.h 461 -Lisp_Int1 c-src/emacs/src/lisp.h 462 -Lisp_Intfwd c-src/emacs/src/lisp.h 2274 -Lisp_Kboard_Objfwd c-src/emacs/src/lisp.h 2362 -LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^#define LISP_MACRO_DEFUN(name, type, argdecls, arg/ -LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (CONSP, bool, (Lisp_Object x), (x/ -LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (NILP, bool, (Lisp_Object x), (x)/ -LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (SYMBOL_VAL, Lisp_Object, (struct/ -LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (XCAR, Lisp_Object, (Lisp_Object / -LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (XCONS, struct Lisp_Cons *, (Lisp/ -LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (XHASH, EMACS_INT, (Lisp_Object a/ -LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (XLI, EMACS_INT, (Lisp_Object o),/ -LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (XPNTR, void *, (Lisp_Object a), / -LISP_MACRO_DEFUN_VOID c-src/emacs/src/lisp.h /^#define LISP_MACRO_DEFUN_VOID(name, argdecls, args/ -LISP_MACRO_DEFUN_VOID c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN_VOID (CHECK_LIST_CONS, (Lisp_Obje/ -LISP_MACRO_DEFUN_VOID c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN_VOID (CHECK_TYPE,$/ -LISP_MACRO_DEFUN_VOID c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN_VOID (SET_SYMBOL_VAL,$/ -Lisp_Marker c-src/emacs/src/lisp.h 1978 -Lisp_Misc_Any c-src/emacs/src/lisp.h 1971 -Lisp_Misc c-src/emacs/src/lisp.h 2212 -Lisp_Misc c-src/emacs/src/lisp.h 458 -Lisp_Misc_Finalizer c-src/emacs/src/lisp.h 491 -Lisp_Misc_Float c-src/emacs/src/lisp.h 494 -Lisp_Misc_Free c-src/emacs/src/lisp.h 487 -Lisp_Misc_Limit c-src/emacs/src/lisp.h 496 -Lisp_Misc_Marker c-src/emacs/src/lisp.h 488 -Lisp_Misc_Overlay c-src/emacs/src/lisp.h 489 -Lisp_Misc_Save_Value c-src/emacs/src/lisp.h 490 -Lisp_Misc_Type c-src/emacs/src/lisp.h 485 -Lisp_Object c-src/emacs/src/lisp.h 567 -Lisp_Object c-src/emacs/src/lisp.h 577 -Lisp_Objfwd c-src/emacs/src/lisp.h 2294 -Lisp_Overlay c-src/emacs/src/lisp.h 2021 -lisppar tex-src/texinfo.tex /^\\gdef\\lisppar{\\null\\endgraf}}$/ -Lisp_Save_Type c-src/emacs/src/lisp.h 2064 -Lisp_Save_Value c-src/emacs/src/lisp.h 2110 -Lisp_String c-src/emacs/src/lisp.h 466 -Lisp_Sub_Char_Table c-src/emacs/src/lisp.h 1606 -Lisp_Subr c-src/emacs/src/lisp.h 1670 -Lisp_suffixes c-src/etags.c 589 -Lisp_Symbol c-src/emacs/src/lisp.h 454 -Lisp_Symbol c-src/emacs/src/lisp.h 654 +lineno c-src/etags.c 2506 +linenumber tex-src/texinfo.tex /^ \\def\\linenumber{\\the\\inputlineno:\\space}$/ +linenumber tex-src/texinfo.tex /^ \\let\\linenumber = \\empty % Non-3.0.$/ +linepos c-src/etags.c 2507 +linepos c-src/etags.c 2922 +links html-src/software.html /^Links to interesting software$/ lisp tex-src/texinfo.tex /^\\def\\lisp{\\aboveenvbreak$/ -Lisp_Type c-src/emacs/src/lisp.h 451 -Lisp_Vector c-src/emacs/src/lisp.h 1369 -Lisp_Vectorlike c-src/emacs/src/lisp.h 472 +lisp_eval_depth c-src/emacs/src/lisp.h 3045 +lisp_h_CHECK_LIST_CONS c-src/emacs/src/lisp.h /^#define lisp_h_CHECK_LIST_CONS(x, y) CHECK_TYPE (C/ +lisp_h_CHECK_NUMBER c-src/emacs/src/lisp.h /^#define lisp_h_CHECK_NUMBER(x) CHECK_TYPE (INTEGER/ +lisp_h_CHECK_SYMBOL c-src/emacs/src/lisp.h /^#define lisp_h_CHECK_SYMBOL(x) CHECK_TYPE (SYMBOLP/ +lisp_h_CHECK_TYPE c-src/emacs/src/lisp.h /^#define lisp_h_CHECK_TYPE(ok, predicate, x) \\$/ +lisp_h_CONSP c-src/emacs/src/lisp.h /^#define lisp_h_CONSP(x) (XTYPE (x) == Lisp_Cons)$/ +lisp_h_EQ c-src/emacs/src/lisp.h /^#define lisp_h_EQ(x, y) (XLI (x) == XLI (y))$/ +lisp_h_FLOATP c-src/emacs/src/lisp.h /^#define lisp_h_FLOATP(x) (XTYPE (x) == Lisp_Float)/ +lisp_h_INTEGERP c-src/emacs/src/lisp.h /^#define lisp_h_INTEGERP(x) ((XTYPE (x) & (Lisp_Int/ +lisp_h_MARKERP c-src/emacs/src/lisp.h /^#define lisp_h_MARKERP(x) (MISCP (x) && XMISCTYPE / +lisp_h_MISCP c-src/emacs/src/lisp.h /^#define lisp_h_MISCP(x) (XTYPE (x) == Lisp_Misc)$/ +lisp_h_NILP c-src/emacs/src/lisp.h /^#define lisp_h_NILP(x) EQ (x, Qnil)$/ +lisp_h_SET_SYMBOL_VAL c-src/emacs/src/lisp.h /^#define lisp_h_SET_SYMBOL_VAL(sym, v) \\$/ +lisp_h_SYMBOLP c-src/emacs/src/lisp.h /^#define lisp_h_SYMBOLP(x) (XTYPE (x) == Lisp_Symbo/ +lisp_h_SYMBOL_CONSTANT_P c-src/emacs/src/lisp.h /^#define lisp_h_SYMBOL_CONSTANT_P(sym) (XSYMBOL (sy/ +lisp_h_SYMBOL_VAL c-src/emacs/src/lisp.h /^#define lisp_h_SYMBOL_VAL(sym) \\$/ +lisp_h_VECTORLIKEP c-src/emacs/src/lisp.h /^#define lisp_h_VECTORLIKEP(x) (XTYPE (x) == Lisp_V/ +lisp_h_XCAR c-src/emacs/src/lisp.h /^#define lisp_h_XCAR(c) XCONS (c)->car$/ +lisp_h_XCDR c-src/emacs/src/lisp.h /^#define lisp_h_XCDR(c) XCONS (c)->u.cdr$/ +lisp_h_XCONS c-src/emacs/src/lisp.h /^#define lisp_h_XCONS(a) \\$/ +lisp_h_XFASTINT c-src/emacs/src/lisp.h /^# define lisp_h_XFASTINT(a) XINT (a)$/ +lisp_h_XHASH c-src/emacs/src/lisp.h /^#define lisp_h_XHASH(a) XUINT (a)$/ +lisp_h_XIL c-src/emacs/src/lisp.h /^# define lisp_h_XIL(i) ((Lisp_Object) { i })$/ +lisp_h_XIL c-src/emacs/src/lisp.h /^# define lisp_h_XIL(i) (i)$/ +lisp_h_XINT c-src/emacs/src/lisp.h /^# define lisp_h_XINT(a) (XLI (a) >> INTTYPEBITS)$/ +lisp_h_XLI c-src/emacs/src/lisp.h /^# define lisp_h_XLI(o) ((o).i)$/ +lisp_h_XLI c-src/emacs/src/lisp.h /^# define lisp_h_XLI(o) (o)$/ +lisp_h_XPNTR c-src/emacs/src/lisp.h /^#define lisp_h_XPNTR(a) \\$/ +lisp_h_XSYMBOL c-src/emacs/src/lisp.h /^# define lisp_h_XSYMBOL(a) \\$/ +lisp_h_XTYPE c-src/emacs/src/lisp.h /^# define lisp_h_XTYPE(a) ((enum Lisp_Type) (XLI (a/ +lisp_h_XUNTAG c-src/emacs/src/lisp.h /^# define lisp_h_XUNTAG(a, type) ((void *) (intptr_/ +lisp_h_check_cons_list c-src/emacs/src/lisp.h /^# define lisp_h_check_cons_list() ((void) 0)$/ +lisp_h_make_number c-src/emacs/src/lisp.h /^# define lisp_h_make_number(n) \\$/ +lisppar tex-src/texinfo.tex /^\\gdef\\lisppar{\\null\\endgraf}}$/ lispy_accent_codes c-src/emacs/src/keyboard.c 4634 lispy_accent_keys c-src/emacs/src/keyboard.c 4741 lispy_drag_n_drop_names c-src/emacs/src/keyboard.c 5181 @@ -2292,110 +3209,50 @@ lispy_kana_keys c-src/emacs/src/keyboard.c 5026 lispy_modifier_list c-src/emacs/src/keyboard.c /^lispy_modifier_list (int modifiers)$/ lispy_multimedia_keys c-src/emacs/src/keyboard.c 4962 lispy_wheel_names c-src/emacs/src/keyboard.c 5174 -list2i c-src/emacs/src/lisp.h /^list2i (EMACS_INT x, EMACS_INT y)$/ -list3i c-src/emacs/src/lisp.h /^list3i (EMACS_INT x, EMACS_INT y, EMACS_INT w)$/ -list4i c-src/emacs/src/lisp.h /^list4i (EMACS_INT x, EMACS_INT y, EMACS_INT w, EMA/ -LISTCONTENTSBUTTON objc-src/PackInsp.m 48 -LISTCONTENTS objc-src/PackInsp.m 39 list c-src/emacs/src/gmalloc.c 186 -LISTDESCRIPTIONBUTTON objc-src/PackInsp.m 49 -ListEdit pyt-src/server.py /^class ListEdit(Frame):$/ list merc-src/accumulator.m /^:- import_module list.$/ list-tags el-src/emacs/lisp/progmodes/etags.el /^(defun list-tags (file &optional _next-match)$/ list-tags-function el-src/emacs/lisp/progmodes/etags.el /^(defvar list-tags-function nil$/ +list2i c-src/emacs/src/lisp.h /^list2i (EMACS_INT x, EMACS_INT y)$/ +list3i c-src/emacs/src/lisp.h /^list3i (EMACS_INT x, EMACS_INT y, EMACS_INT w)$/ +list4i c-src/emacs/src/lisp.h /^list4i (EMACS_INT x, EMACS_INT y, EMACS_INT w, EMA/ list_to_ord_set prol-src/ordsets.prolog /^list_to_ord_set(List, Set) :-$/ -li tex-src/texinfo.tex /^\\let\\li = \\sf % Sometimes we call it \\li, not \\sf./ -LL_Assert/p ada-src/2ataspri.adb /^ procedure LL_Assert (B : Boolean; M : String) i/ -LL_Assert/p ada-src/2ataspri.ads /^ procedure LL_Assert (B : Boolean; M : String);$/ -L_LE y-src/parse.c 25 -LL_Task_Procedure_Access/t ada-src/2ataspri.ads /^ type LL_Task_Procedure_Access is access procedu/ -LL_Task_Procedure_Access/t ada-src/etags-test-for.ada /^ type LL_Task_Procedure_Access is access procedu/ -LL_Wrapper/p ada-src/2ataspri.adb /^ procedure LL_Wrapper (T : TCB_Ptr);$/ -LL_Wrapper/p ada-src/2ataspri.adb /^ procedure LL_Wrapper (T : TCB_Ptr) is$/ -LL_Wrapper/p ada-src/etags-test-for.ada /^ procedure LL_Wrapper (T : TCB_Ptr);$/ -L_NE y-src/parse.c 26 lno c-src/etags.c 223 -/lnormalize ps-src/rfc1245.ps /^\/lnormalize { $/ +load objc-src/PackInsp.m /^-load$/ loadContentsOf objc-src/PackInsp.m /^-loadContentsOf:(const char *)type inTable:(HashTa/ loadImage objc-src/PackInsp.m /^-loadImage$/ loadKeyValuesFrom objc-src/PackInsp.m /^-loadKeyValuesFrom:(const char *)type inTable:(Has/ -load objc-src/PackInsp.m /^-load$/ loadPORManager php-src/lce_functions.php /^ function &loadPORManager()$/ local_if_set c-src/emacs/src/lisp.h 2338 -LOCALIZE_ARCH objc-src/PackInsp.m /^#define LOCALIZE_ARCH(s) NXLoadLocalizedStringFrom/ -LOCALIZE objc-src/PackInsp.m /^#define LOCALIZE(s) NXLoadLocalizedStringFromTabl/ -Locate pas-src/common.pas /^function Locate; (*($/ -location cp-src/clheir.hpp 33 location cp-src/clheir.hpp /^ location() { }$/ -LOCK_ALIGNED_BLOCKS c-src/emacs/src/gmalloc.c /^#define LOCK_ALIGNED_BLOCKS() \\$/ -LOCK_ALIGNED_BLOCKS c-src/emacs/src/gmalloc.c /^#define LOCK_ALIGNED_BLOCKS()$/ -LOCK c-src/emacs/src/gmalloc.c /^#define LOCK() \\$/ -LOCK c-src/emacs/src/gmalloc.c /^#define LOCK()$/ -Lock/t ada-src/2ataspri.ads /^ type Lock is$/ -Lock/t ada-src/2ataspri.ads /^ type Lock is private;$/ +location cp-src/clheir.hpp 33 loggingall tex-src/texinfo.tex /^\\def\\loggingall{\\tracingcommands2 \\tracingstats2 $/ -LONG_TYPE_SIZE y-src/cccp.y 95 -LOOKING_AT c-src/etags.c /^#define LOOKING_AT(cp, kw) \/* kw is the keyword, / -LOOKING_AT_NOCASE c-src/etags.c /^#define LOOKING_AT_NOCASE(cp, kw) \/* the keyword i/ look tex-src/texinfo.tex /^\\def\\kbd#1{\\def\\look{#1}\\expandafter\\kbdfoo\\look??/ -lookup_call merc-src/accumulator.m /^:- pred lookup_call(accu_goal_store::in, accu_goal/ -LOOKUP objc-src/PackInsp.m 176 -LOOKUP objc-src/PackInsp.m /^#define LOOKUP(key, notfound) ([table isKey:key] ?/ lookup y-src/cccp.y /^lookup (name, len, hash)$/ -LOOP_ON_INPUT_LINES c-src/etags.c /^#define LOOP_ON_INPUT_LINES(file_pointer, line_buf/ +lookup_call merc-src/accumulator.m /^:- pred lookup_call(accu_goal_store::in, accu_goal/ losespace tex-src/texinfo.tex /^\\def\\losespace #1{#1}$/ lowcase c-src/etags.c /^#define lowcase(c) tolower (CHAR (c))$/ lowercaseenumerate tex-src/texinfo.tex /^\\def\\lowercaseenumerate{%$/ -LowerCaseNmStr pas-src/common.pas /^function LowerCaseNmStr; (*($/ -/L ps-src/rfc1245.ps /^\/L { $/ -/L ps-src/rfc1245.ps /^\/L \/M \/N \/O \/P \/Q \/R \/S \/T \/U \/V \/W \/X \/Y \/Z \/brac/ -L_RANGE y-src/parse.c 11 -LSH y-src/cccp.c 16 -l tex-src/texinfo.tex /^\\def\\l#1{{\\li #1}\\null} % $/ -l tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ -L tex-src/texinfo.tex /^\\let\\L=\\ptexL$/ -LTGT cp-src/MDiagArray2.h 144 -LTGT cp-src/MDiagArray2.h 35 -LTGT cp-src/MDiagArray2.h 39 -LTGT cp-src/MDiagArray2.h 42 -Lua_functions c-src/etags.c /^Lua_functions (FILE *inf)$/ -Lua_help c-src/etags.c 600 -LUASRC make-src/Makefile /^LUASRC=allegro.lua$/ -Lua_suffixes c-src/etags.c 598 lucid_event_type_list_p c-src/emacs/src/keyboard.c /^lucid_event_type_list_p (Lisp_Object object)$/ -L_VAR y-src/parse.c 12 lvvmode tex-src/texinfo.tex /^\\def\\lvvmode{\\vbox to 0pt{}}$/ mabort c-src/emacs/src/gmalloc.c /^mabort (enum mcheck_status status)$/ -macheader tex-src/texinfo.tex /^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/ mach_host_self c-src/machsyscalls.h /^SYSCALL (mach_host_self, -29,$/ -Machine_Exceptions/t ada-src/2ataspri.ads /^ type Machine_Exceptions is new Interfaces.C.POS/ -Machin_T/b ada-src/waroquiers.ada /^ protected body Machin_T is$/ -Machin_T/t ada-src/etags-test-for.ada /^ protected Machin_T is$/ -Machin_T/t ada-src/etags-test-for.ada /^ protected type Machin_T is$/ -Machin_T/t ada-src/waroquiers.ada /^ protected type Machin_T is$/ mach_msg_trap c-src/machsyscalls.h /^SYSCALL (mach_msg_trap, -25,$/ mach_reply_port c-src/machsyscalls.h /^SYSCALL (mach_reply_port, -26,$/ mach_task_self c-src/machsyscalls.h /^SYSCALL (mach_task_self, -28,$/ mach_thread_self c-src/machsyscalls.h /^SYSCALL (mach_thread_self, -27,$/ +macheader tex-src/texinfo.tex /^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/ macx\defmacheader tex-src/texinfo.tex /^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/ -MAGENTA cp-src/screen.hpp 17 -MAGICBYTE c-src/emacs/src/gmalloc.c 1861 magic c-src/emacs/src/gmalloc.c 1868 -MAGICFREE c-src/emacs/src/gmalloc.c 1860 -MAGICWORD c-src/emacs/src/gmalloc.c 1859 mainmagstep tex-src/texinfo.tex /^\\let\\mainmagstep=\\magstep1$/ mainmagstep tex-src/texinfo.tex /^\\let\\mainmagstep=\\magstephalf$/ maintaining.info make-src/Makefile /^maintaining.info: maintaining.texi$/ majorheading tex-src/texinfo.tex /^\\def\\majorheading{\\parsearg\\majorheadingzzz}$/ majorheadingzzz tex-src/texinfo.tex /^\\def\\majorheadingzzz #1{%$/ make-abbrev-table c-src/abbrev.c /^DEFUN ("make-abbrev-table", Fmake_abbrev_table, Sm/ -make_coor prol-src/natded.prolog /^make_coor(s(_),Alpha,Sem1,Sem2,Alpha@Sem1@Sem2).$/ make_C_tag c-src/etags.c /^make_C_tag (bool isfun)$/ +make_coor prol-src/natded.prolog /^make_coor(s(_),Alpha,Sem1,Sem2,Alpha@Sem1@Sem2).$/ make_ctrl_char c-src/emacs/src/keyboard.c /^make_ctrl_char (int c)$/ -MakeDispose pyt-src/server.py /^ def MakeDispose(self):$/ -Makefile_filenames c-src/etags.c 603 -Makefile_help c-src/etags.c 605 -Makefile_targets c-src/etags.c /^Makefile_targets (FILE *inf)$/ make_fixnum_or_float c-src/emacs/src/lisp.h /^#define make_fixnum_or_float(val) \\$/ make_formatted_string c-src/emacs/src/lisp.h /^extern Lisp_Object make_formatted_string (char *, / make_lisp_ptr c-src/emacs/src/lisp.h /^make_lisp_ptr (void *ptr, enum Lisp_Type type)$/ @@ -2406,182 +3263,108 @@ make_lispy_focus_out c-src/emacs/src/keyboard.c /^make_lispy_focus_out (Lisp_Obj make_lispy_movement c-src/emacs/src/keyboard.c /^make_lispy_movement (struct frame *frame, Lisp_Obj/ make_lispy_position c-src/emacs/src/keyboard.c /^make_lispy_position (struct frame *f, Lisp_Object / make_lispy_switch_frame c-src/emacs/src/keyboard.c /^make_lispy_switch_frame (Lisp_Object frame)$/ -MAKE make-src/Makefile /^MAKE:=$(MAKE) --no-print-directory$/ make_number c-src/emacs/src/lisp.h /^# define make_number(n) lisp_h_make_number (n)$/ make_pointer_integer c-src/emacs/src/lisp.h /^make_pointer_integer (void *p)$/ make_scroll_bar_position c-src/emacs/src/keyboard.c /^make_scroll_bar_position (struct input_event *ev, / -MakeSitelist pyt-src/server.py /^ def MakeSitelist(self, master):$/ -MAKESRC make-src/Makefile /^MAKESRC=Makefile$/ make_tag c-src/etags.c /^make_tag (const char *name, \/* tag name, or NULL / make_uninit_sub_char_table c-src/emacs/src/lisp.h /^make_uninit_sub_char_table (int depth, int min_cha/ make_uninit_vector c-src/emacs/src/lisp.h /^make_uninit_vector (ptrdiff_t size)$/ -malloc_atfork_handler_child c-src/emacs/src/gmalloc.c /^malloc_atfork_handler_child (void)$/ -malloc_atfork_handler_parent c-src/emacs/src/gmalloc.c /^malloc_atfork_handler_parent (void)$/ -malloc_atfork_handler_prepare c-src/emacs/src/gmalloc.c /^malloc_atfork_handler_prepare (void)$/ +malloc c-src/emacs/src/gmalloc.c /^extern void *malloc (size_t size) ATTRIBUTE_MALLOC/ +malloc c-src/emacs/src/gmalloc.c /^malloc (size_t size)$/ malloc c-src/emacs/src/gmalloc.c 1719 malloc c-src/emacs/src/gmalloc.c 64 malloc c-src/emacs/src/gmalloc.c 68 -malloc c-src/emacs/src/gmalloc.c /^extern void *malloc (size_t size) ATTRIBUTE_MALLOC/ -_malloc c-src/emacs/src/gmalloc.c /^_malloc (size_t size)$/ -malloc c-src/emacs/src/gmalloc.c /^malloc (size_t size)$/ +malloc_atfork_handler_child c-src/emacs/src/gmalloc.c /^malloc_atfork_handler_child (void)$/ +malloc_atfork_handler_parent c-src/emacs/src/gmalloc.c /^malloc_atfork_handler_parent (void)$/ +malloc_atfork_handler_prepare c-src/emacs/src/gmalloc.c /^malloc_atfork_handler_prepare (void)$/ malloc_enable_thread c-src/emacs/src/gmalloc.c /^malloc_enable_thread (void)$/ -__malloc_extra_blocks c-src/emacs/src/gmalloc.c 382 -MALLOCFLOOD c-src/emacs/src/gmalloc.c 1862 -mallochook c-src/emacs/src/gmalloc.c /^mallochook (size_t size)$/ malloc_info c-src/emacs/src/gmalloc.c 167 malloc_initialize_1 c-src/emacs/src/gmalloc.c /^malloc_initialize_1 (void)$/ -__malloc_initialize c-src/emacs/src/gmalloc.c /^__malloc_initialize (void)$/ -__malloc_initialized c-src/emacs/src/gmalloc.c 380 -_malloc_internal c-src/emacs/src/gmalloc.c /^_malloc_internal (size_t size)$/ -_malloc_internal_nolock c-src/emacs/src/gmalloc.c /^_malloc_internal_nolock (size_t size)$/ -_malloc_mutex c-src/emacs/src/gmalloc.c 518 -_malloc_thread_enabled_p c-src/emacs/src/gmalloc.c 520 +mallochook c-src/emacs/src/gmalloc.c /^mallochook (size_t size)$/ man manpage make-src/Makefile /^man manpage: etags.1.man$/ -/manualpapersize ps-src/rfc1245.ps /^\/manualpapersize {$/ -MANY c-src/emacs/src/lisp.h 2833 mao c-src/h.h 101 map c-src/emacs/src/keyboard.c 8748 map merc-src/accumulator.m /^:- import_module map.$/ +map_word prol-src/natded.prolog /^map_word([[_]|Ws],Exp):-$/ mapping html-src/algrthms.html /^Mapping the Channel Symbols$/ mapsyn prol-src/natded.prolog /^mapsyn(A\/B,AM\/BM):-$/ -map_word prol-src/natded.prolog /^map_word([[_]|Ws],Exp):-$/ -MARKERP c-src/emacs/src/lisp.h /^# define MARKERP(x) lisp_h_MARKERP (x)$/ mark_kboards c-src/emacs/src/keyboard.c /^mark_kboards (void)$/ math tex-src/texinfo.tex /^\\def\\math#1{\\implicitmath #1\\implicitmath}$/ -MAX_ALLOCA c-src/emacs/src/lisp.h 4556 -max_args c-src/emacs/src/lisp.h 1686 -maxargs c-src/emacs/src/lisp.h 2831 +max c-src/emacs/src/lisp.h /^#define max(a, b) ((a) > (b) ? (a) : (b))$/ +max c-src/emacs/src/lisp.h 58 max c.c /^__attribute__ ((always_inline)) max (int a, int b)/ max c.c /^max (int a, int b)$/ max cp-src/conway.cpp /^#define max(x,y) ((x > y) ? x : y)$/ -max c-src/emacs/src/lisp.h 58 -max c-src/emacs/src/lisp.h /^#define max(a, b) ((a) > (b) ? (a) : (b))$/ -MAX_ENCODED_BYTES c-src/emacs/src/keyboard.c 2254 -MAX_HASH_VALUE c-src/etags.c 2329 +max_args c-src/emacs/src/lisp.h 1686 max_num_directions cp-src/clheir.hpp 31 max_num_generic_objects cp-src/clheir.cpp 9 -MAXPATHLEN c-src/etags.c 115 -/max ps-src/rfc1245.ps /^\/max {2 copy lt {exch} if pop} bind def$/ -MAX_WORD_LENGTH c-src/etags.c 2327 -maybe_gc c-src/emacs/src/lisp.h /^maybe_gc (void)$/ +maxargs c-src/emacs/src/lisp.h 2831 maybe merc-src/accumulator.m /^:- import_module maybe.$/ -MAYBEREL y-src/parse.y /^#define MAYBEREL(p) (*(p)=='[' && (isdigit((p)[1])/ -MBYTES objc-src/PackInsp.m 59 -Mcccp y-src/cccp.y /^main ()$/ -Mc cp-src/c.C /^int main (void) { my_function0(0); my_function1(1)/ +maybe_gc c-src/emacs/src/lisp.h /^maybe_gc (void)$/ mcCSC cp-src/c.C 6 mcheck c-src/emacs/src/gmalloc.c /^mcheck (void (*func) (enum mcheck_status))$/ -MCHECK_DISABLED c-src/emacs/src/gmalloc.c 285 -MCHECK_FREE c-src/emacs/src/gmalloc.c 287 -MCHECK_HEAD c-src/emacs/src/gmalloc.c 288 -MCHECK_OK c-src/emacs/src/gmalloc.c 286 mcheck_status c-src/emacs/src/gmalloc.c 283 -MCHECK_TAIL c-src/emacs/src/gmalloc.c 289 mcheck_used c-src/emacs/src/gmalloc.c 2017 -Mconway.cpp cp-src/conway.cpp /^void main(void)$/ mdbcomp merc-src/accumulator.m /^:- import_module mdbcomp.$/ -MDiagArray2 cp-src/MDiagArray2.h 78 -MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (const Array& a) : DiagArray2 / -MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (const DiagArray2& a) : DiagArray/ -MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (const MDiagArray2& a) : DiagArra/ -MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (int r, int c, const T& val) : DiagA/ -MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (int r, int c) : DiagArray2 (r, c/ -MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (T *d, int r, int c) : DiagArray2/ -~MDiagArray2 cp-src/MDiagArray2.h /^ ~MDiagArray2 (void) { }$/ -MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (void) : DiagArray2 () { }$/ -me_22a lua-src/test.lua /^ function test.me_22a(one, two)$/ me22b lua-src/test.lua /^ local function test.me22b (one)$/ +me_22a lua-src/test.lua /^ function test.me_22a(one, two)$/ memalign c-src/emacs/src/gmalloc.c /^memalign (size_t alignment, size_t size)$/ -member_lessthan_goalid merc-src/accumulator.m /^:- pred member_lessthan_goalid(accu_goal_store::in/ member prol-src/natded.prolog /^member(X,[X|_]).$/ +member_lessthan_goalid merc-src/accumulator.m /^:- pred member_lessthan_goalid(accu_goal_store::in/ memclear c-src/emacs/src/lisp.h /^memclear (void *p, ptrdiff_t nbytes)$/ +menu tex-src/texinfo.tex /^\\long\\def\\menu #1\\end menu{}$/ menu_bar_item c-src/emacs/src/keyboard.c /^menu_bar_item (Lisp_Object key, Lisp_Object item, / menu_bar_items c-src/emacs/src/keyboard.c /^menu_bar_items (Lisp_Object old)$/ menu_bar_items_index c-src/emacs/src/keyboard.c 7369 menu_bar_items_vector c-src/emacs/src/keyboard.c 7368 menu_bar_one_keymap_changed_items c-src/emacs/src/keyboard.c 7363 -menu_item_eval_property_1 c-src/emacs/src/keyboard.c /^menu_item_eval_property_1 (Lisp_Object arg)$/ menu_item_eval_property c-src/emacs/src/keyboard.c /^menu_item_eval_property (Lisp_Object sexpr)$/ +menu_item_eval_property_1 c-src/emacs/src/keyboard.c /^menu_item_eval_property_1 (Lisp_Object arg)$/ menu_separator_name_p c-src/emacs/src/keyboard.c /^menu_separator_name_p (const char *label)$/ -menu tex-src/texinfo.tex /^\\long\\def\\menu #1\\end menu{}$/ -Metags c-src/etags.c /^main (int argc, char **argv)$/ metasource c-src/etags.c 198 methodheader tex-src/texinfo.tex /^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/ methodx\defmethodheader tex-src/texinfo.tex /^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/ methparsebody\Edeffn tex-src/texinfo.tex /^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/ methparsebody\Edefmethod tex-src/texinfo.tex /^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/ methparsebody\Edeftypefn tex-src/texinfo.tex /^\\def\\deftypefn{\\defmethparsebody\\Edeftypefn\\deftyp/ -Mfail cp-src/fail.C /^main()$/ -min_args c-src/emacs/src/lisp.h 1686 -min_char c-src/emacs/src/lisp.h 1621 -min cp-src/conway.cpp /^#define min(x,y) ((x > y) ? y : x)$/ min c-src/emacs/src/gmalloc.c /^#define min(a, b) ((a) < (b) ? (a) : (b))$/ -min c-src/emacs/src/lisp.h 57 min c-src/emacs/src/lisp.h /^#define min(a, b) ((a) < (b) ? (a) : (b))$/ -MIN_HASH_VALUE c-src/etags.c 2328 -/min ps-src/rfc1245.ps /^\/min {2 copy gt {exch} if pop} bind def$/ +min c-src/emacs/src/lisp.h 57 +min cp-src/conway.cpp /^#define min(x,y) ((x > y) ? y : x)$/ +min_args c-src/emacs/src/lisp.h 1686 +min_char c-src/emacs/src/lisp.h 1621 minus cp-src/functions.cpp /^void Date::minus ( int days , int month , int year/ minus tex-src/texinfo.tex /^\\def\\minus{$-$}$/ -MIN_WORD_LENGTH c-src/etags.c 2326 -MISCP c-src/emacs/src/lisp.h /^# define MISCP(x) lisp_h_MISCP (x)$/ miti html-src/softwarelibero.html /^Sfatiamo alcuni miti$/ -Mkai-test.pl perl-src/kai-test.pl /^package main;$/ modifier_names c-src/emacs/src/keyboard.c 6319 modifier_symbols c-src/emacs/src/keyboard.c 6327 modify_event_symbol c-src/emacs/src/keyboard.c /^modify_event_symbol (ptrdiff_t symbol_num, int mod/ module_class_method ruby-src/test.rb /^ def ModuleExample.module_class_method$/ -ModuleExample ruby-src/test.rb /^module ModuleExample$/ module_instance_method ruby-src/test.rb /^ def module_instance_method$/ +more= ruby-src/test1.ru /^ :more$/ more_aligned_int c.c 165 morecore_nolock c-src/emacs/src/gmalloc.c /^morecore_nolock (size_t size)$/ morecore_recursing c-src/emacs/src/gmalloc.c 605 -More_Lisp_Bits c-src/emacs/src/lisp.h 801 -more= ruby-src/test1.ru /^ :more$/ -MOST_NEGATIVE_FIXNUM c-src/emacs/src/lisp.h 835 -MOST_POSITIVE_FIXNUM c-src/emacs/src/lisp.h 834 mouse_syms c-src/emacs/src/keyboard.c 4627 move cp-src/clheir.cpp /^void agent::move(int direction)$/ -MOVE c-src/sysdep.h /^#define MOVE(x,y) movl x, y$/ -MoveLayerAfter lua-src/allegro.lua /^function MoveLayerAfter (this_one)$/ -MoveLayerBefore lua-src/allegro.lua /^function MoveLayerBefore (this_one)$/ -MoveLayerBottom lua-src/allegro.lua /^function MoveLayerBottom ()$/ -MoveLayerTop lua-src/allegro.lua /^function MoveLayerTop ()$/ mprobe c-src/emacs/src/gmalloc.c /^mprobe (void *ptr)$/ -/M ps-src/rfc1245.ps /^\/M {newpath moveto} bind def$/ -M ruby-src/test1.ru /^module A::M; end$/ -MSDOS c-src/etags.c 100 -MSDOS c-src/etags.c 106 -MSDOS c-src/etags.c 107 -MSDOS c-src/etags.c 110 msgid php-src/lce_functions.php /^ function msgid($line, $class)$/ -MSGSEL f-src/entry.for /^ ENTRY MSGSEL ( TYPE )$/ -MSGSEL f-src/entry.strange /^ ENTRY MSGSEL ( TYPE )$/ -MSGSEL f-src/entry.strange_suffix /^ ENTRY MSGSEL ( TYPE )$/ msgstr php-src/lce_functions.php /^ function msgstr($line, $class)$/ -/ms ps-src/rfc1245.ps /^\/ms { $/ mstats c-src/emacs/src/gmalloc.c 308 -Mtest1.go go-src/test1.go 1 -Mtest1.go go-src/test1.go /^func main() {$/ -Mtest.go go-src/test.go 1 -Mtest.go go-src/test.go /^func main() {$/ -Mtest.rs rs-src/test.rs /^fn main() {$/ -mtg html-src/software.html /^MTG$/ mt prol-src/natded.prolog /^mt:-$/ -multibyte c-src/emacs/src/regex.h 403 -MULTI_LETTER_MOD c-src/emacs/src/keyboard.c 6231 -MULTI_LETTER_MOD c-src/emacs/src/keyboard.c 6764 -MULTI_LETTER_MOD c-src/emacs/src/keyboard.c /^#define MULTI_LETTER_MOD(BIT, NAME, LEN) \\$/ -MULTI_LETTER_MOD c-src/emacs/src/keyboard.c /^#define MULTI_LETTER_MOD(BIT, NAME, LEN) \\$/ +mtg html-src/software.html /^MTG$/ multi_line c-src/etags.c 267 -Mx.cc cp-src/x.cc /^main(int argc, char *argv[])$/ -mylbrace tex-src/texinfo.tex /^\\def\\mylbrace {{\\tt \\char '173}}$/ -mypi forth-src/test-forth.fth /^synonym mypi fconst$/ +multibyte c-src/emacs/src/regex.h 403 my_printf c.c /^my_printf (void *my_object, const char *my_format,/ -myrbrace tex-src/texinfo.tex /^\\def\\myrbrace {{\\tt \\char '175}}$/ -my_struct c.c 226 my_struct c-src/h.h 91 -my_typedef c.c 228 +my_struct c.c 226 my_typedef c-src/h.h 93 +my_typedef c.c 228 +mylbrace tex-src/texinfo.tex /^\\def\\mylbrace {{\\tt \\char '173}}$/ +mypi forth-src/test-forth.fth /^synonym mypi fconst$/ +myrbrace tex-src/texinfo.tex /^\\def\\myrbrace {{\\tt \\char '175}}$/ +n c-src/exit.c 28 +n c-src/exit.strange_suffix 28 name c-src/emacs/src/keyboard.c 7241 name c-src/emacs/src/lisp.h 1808 name c-src/emacs/src/lisp.h 3144 @@ -2591,12 +3374,8 @@ name c-src/etags.c 218 name c-src/etags.c 2271 name c-src/etags.c 261 name c-src/getopt.h 76 -name c-src/getopt.h 78 -named c-src/etags.c 2505 -NameHasChar pas-src/common.pas /^function NameHasChar; (* (TheName : NameString; Th/ +name c-src/getopt.h 78 name perl-src/htlmify-cystic 357 -namestringequal pas-src/common.pas /^function namestringequal;(*(var Name1,Name2 : Name/ -NameStringLess pas-src/common.pas /^function NameStringLess;(*(var Name1,Name2 : NameS/ name tex-src/texinfo.tex /^\\begingroup\\defname {#1}{Function}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {#1}{Macro}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {#1}{Special Form}%$/ @@ -2605,48 +3384,36 @@ name tex-src/texinfo.tex /^\\begingroup\\defname {#1}{Variable}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{#1}\\deftpargs{#3}\\endgrou/ name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{#1}\\defunargs{#3}\\endgrou/ name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{#1}\\defvarargs{#3}\\endgro/ -name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{\\defcvtype{} of #1}%$/ -name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{\\defoptype{} on #1}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{Instance Variable of #1}%/ name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{Method on #1}%$/ +name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{\\defcvtype{} of #1}%$/ +name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{\\defoptype{} on #1}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {\\code{#1} #2}{Function}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {\\code{#1} #2}{Variable}%$/ -name tex-src/texinfo.tex /^\\begingroup\\defname {\\code{#2} #3}{#1}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {\\code{#2} #3}{#1}$/ +name tex-src/texinfo.tex /^\\begingroup\\defname {\\code{#2} #3}{#1}%$/ name tex-src/texinfo.tex /^\\def\\singlecodeindexer #1{\\doind{\\indexname}{\\code/ name tex-src/texinfo.tex /^\\def\\singleindexer #1{\\doind{\\indexname}{#1}}$/ -NAME y-src/cccp.c 8 name y-src/cccp.y 113 name y-src/cccp.y 43 +named c-src/etags.c 2505 +namestringequal pas-src/common.pas /^function namestringequal;(*(var Name1,Name2 : Name/ nargs c-src/emacs/src/lisp.h 2987 -NATNUMP c-src/emacs/src/lisp.h /^NATNUMP (Lisp_Object x)$/ -/nbluet ps-src/rfc1245.ps /^\/nbluet 256 array def$/ -n c-src/exit.c 28 -n c-src/exit.strange_suffix 28 -NDEBUG c-src/etags.c 88 -need_adjustment c-src/emacs/src/lisp.h 1986 need tex-src/texinfo.tex /^\\def\\need{\\parsearg\\needx}$/ +need_adjustment c-src/emacs/src/lisp.h 1986 needx tex-src/texinfo.tex /^\\def\\needx#1{%$/ -NEG y-src/parse.c 9 neighbors cp-src/clheir.hpp 59 nelem cp-src/Range.h /^ int nelem (void) const { return rng_nelem; }$/ nestlev c-src/etags.c 2525 +new objc-src/PackInsp.m /^+new$/ +new perl-src/htlmify-cystic 163 +new_tag perl-src/htlmify-cystic 18 newcodeindex tex-src/texinfo.tex /^\\def\\newcodeindex #1{$/ newindex tex-src/texinfo.tex /^\\def\\newindex #1{$/ -NewLayer lua-src/allegro.lua /^function NewLayer (name, x, y, w, h)$/ -NewLayerSet lua-src/allegro.lua /^function NewLayerSet (name)$/ newlb c-src/etags.c 2930 newlinepos c-src/etags.c 2932 -NewNameString pas-src/common.pas /^procedure NewNameString; (* (var NSP: NameStringPo/ -new objc-src/PackInsp.m /^+new$/ -new perl-src/htlmify-cystic 163 -new_tag perl-src/htlmify-cystic 18 newtextstring pas-src/common.pas /^function newtextstring; (*: TextString;*)$/ newwrite tex-src/texinfo.tex /^\\gdef\\newwrite{\\alloc@7\\write\\chardef\\sixt@@n}}$/ -next_alive cp-src/conway.hpp 7 -next_almost_prime c-src/emacs/src/lisp.h /^extern EMACS_INT next_almost_prime (EMACS_INT) ATT/ -NEXT_ALMOST_PRIME_LIMIT c-src/emacs/src/lisp.h 3573 -next c.c 174 next c-src/emacs/src/gmalloc.c 164 next c-src/emacs/src/gmalloc.c 188 next c-src/emacs/src/gmalloc.c 198 @@ -2660,52 +3427,51 @@ next c-src/emacs/src/lisp.h 3028 next c-src/emacs/src/lisp.h 3134 next c-src/emacs/src/lisp.h 700 next c-src/etags.c 203 -next-file el-src/emacs/lisp/progmodes/etags.el /^(defun next-file (&optional initialize novisit)$/ -next-file-list el-src/emacs/lisp/progmodes/etags.el /^(defvar next-file-list nil$/ -next_free c-src/emacs/src/lisp.h 1851 -nextfree c-src/emacs/src/lisp.h 3029 +next c.c 174 next tex-src/texinfo.tex /^\\def\\flushcr{\\ifx\\par\\lisppar \\def\\next##1{}\\else / next tex-src/texinfo.tex /^\\def\\next##1{}\\next}$/ next tex-src/texinfo.tex /^\\def\\parsearg #1{\\let\\next=#1\\begingroup\\obeylines/ next tex-src/texinfo.tex /^\\edef\\next{\\write\\auxfile{\\internalsetq {#1}{#2}}}/ -next_weak c-src/emacs/src/lisp.h 1875 next y-src/cccp.y 42 -NE y-src/parse.c 6 +next-file el-src/emacs/lisp/progmodes/etags.el /^(defun next-file (&optional initialize novisit)$/ +next-file-list el-src/emacs/lisp/progmodes/etags.el /^(defvar next-file-list nil$/ +next_alive cp-src/conway.hpp 7 +next_almost_prime c-src/emacs/src/lisp.h /^extern EMACS_INT next_almost_prime (EMACS_INT) ATT/ +next_free c-src/emacs/src/lisp.h 1851 +next_weak c-src/emacs/src/lisp.h 1875 +nextfree c-src/emacs/src/lisp.h 3029 nfree c-src/emacs/src/gmalloc.c 150 -/ngrayt ps-src/rfc1245.ps /^\/ngrayt 256 array def$/ -/ngreent ps-src/rfc1245.ps /^\/ngreent 256 array def$/ -NIL_IS_ZERO c-src/emacs/src/lisp.h 1515 -NILP c-src/emacs/src/lisp.h /^# define NILP(x) lisp_h_NILP (x)$/ nl c-src/etags.c 2521 -NmStrToErrStr pas-src/common.pas /^function NmStrToErrStr;(*($/ -NmStrToInteger pas-src/common.pas /^function NmStrToInteger; (* (Str : NameString) : i/ nm tex-src/testenv.tex /^\\newcommand{\\nm}[2]{\\nomenclature{#1}{#2}}$/ +no tex-src/texinfo.tex /^\\def\\appendixletter{\\char\\the\\appendixno}$/ +no tex-src/texinfo.tex /^\\global\\advance \\appendixno by 1 \\message{Appendix/ +no tex-src/texinfo.tex /^\\ifnum\\secno=0 Appendix\\xreftie'char\\the\\appendixn/ +no tex-src/texinfo.tex /^\\newcount \\appendixno \\appendixno = `\\@$/ +no.\the tex-src/texinfo.tex /^Section\\xreftie'char\\the\\appendixno.\\the\\secno.\\th/ +no.\the tex-src/texinfo.tex /^\\else \\ifnum \\subsecno=0 Section\\xreftie'char\\the\\/ no_argument c-src/getopt.h 89 +no_lang_help c-src/etags.c 707 +no_sub c-src/emacs/src/regex.h 387 nocase_tail c-src/etags.c /^nocase_tail (const char *cp)$/ node c-src/etags.c 225 -noderef tex-src/texinfo.tex /^\\appendixnoderef %$/ -node_st c-src/etags.c 214 node tex-src/texinfo.tex /^\\def\\node{\\ENVcheck\\parsearg\\nodezzz}$/ +node_st c-src/etags.c 214 +noderef tex-src/texinfo.tex /^\\appendixnoderef %$/ nodexxx tex-src/texinfo.tex /^\\def\\nodexxx[#1,#2]{\\gdef\\lastnode{#1}}$/ nodezzz tex-src/texinfo.tex /^\\def\\nodezzz#1{\\nodexxx [#1,]}$/ nofillexdent tex-src/texinfo.tex /^\\def\\nofillexdent{\\parsearg\\nofillexdentyyy}$/ nofillexdentyyy tex-src/texinfo.tex /^\\def\\nofillexdentyyy #1{{\\advance \\leftskip by -\\e/ nofonts tex-src/texinfo.tex /^{\\chapternofonts%$/ nofonts tex-src/texinfo.tex /^{\\indexnofonts$/ -no_lang_help c-src/etags.c 707 nonarrowing tex-src/texinfo.tex /^ \\let\\nonarrowing=\\comment$/ nonarrowing tex-src/texinfo.tex /^\\let\\nonarrowing=\\relax$/ none_help c-src/etags.c 703 -NONPOINTER_BITS c-src/emacs/src/lisp.h 78 -NONPOINTER_BITS c-src/emacs/src/lisp.h 80 -NONSRCS make-src/Makefile /^NONSRCS=entry.strange lists.erl clheir.hpp.gz$/ normalbackslash tex-src/texinfo.tex /^\\def\\normalbackslash{{\\tt\\rawbackslashxx}}$/ normalcaret tex-src/texinfo.tex /^\\def\\normalcaret{^}$/ normaldoublequote tex-src/texinfo.tex /^\\def\\normaldoublequote{"}$/ normalgreater tex-src/texinfo.tex /^\\def\\normalgreater{>}$/ -normalize_fresh prol-src/natded.prolog /^normalize_fresh(M,N):-$/ normalize prol-src/natded.prolog /^normalize(M,MNorm):-$/ -/normalize ps-src/rfc1245.ps /^\/normalize {$/ +normalize_fresh prol-src/natded.prolog /^normalize_fresh(M,N):-$/ normalize_tree prol-src/natded.prolog /^normalize_tree(tree(Rule,Syn:Sem,Trees),$/ normalize_trees prol-src/natded.prolog /^normalize_trees([],[]).$/ normalless tex-src/texinfo.tex /^\\def\\normalless{<}$/ @@ -2715,67 +3481,42 @@ normaltilde tex-src/texinfo.tex /^\\def\\normaltilde{~}$/ normalunderscore tex-src/texinfo.tex /^\\def\\normalunderscore{_}$/ normalverticalbar tex-src/texinfo.tex /^\\def\\normalverticalbar{|}$/ nosave pyt-src/server.py /^ def nosave(self):$/ -no_sub c-src/emacs/src/regex.h 387 +not_bol c-src/emacs/src/regex.h 391 +not_eol c-src/emacs/src/regex.h 394 +not_single_kboard_state c-src/emacs/src/keyboard.c /^not_single_kboard_state (KBOARD *kboard)$/ notag2 c-src/dostorture.c 26 notag2 c-src/torture.c 26 notag4 c-src/dostorture.c 45 notag4 c-src/torture.c 45 -not_bol c-src/emacs/src/regex.h 391 -/.notdef ps-src/rfc1245.ps /^\/.notdef \/.notdef \/.notdef \/.notdef \/.notdef \/.not/ -/.notdef ps-src/rfc1245.ps /^\/.notdef \/.notdef \/.notdef \/.notdef \/space \/exclam/ -not_eol c-src/emacs/src/regex.h 394 -NOTEQUAL y-src/cccp.c 13 -no tex-src/texinfo.tex /^\\def\\appendixletter{\\char\\the\\appendixno}$/ -no tex-src/texinfo.tex /^\\global\\advance \\appendixno by 1 \\message{Appendix/ -no tex-src/texinfo.tex /^\\ifnum\\secno=0 Appendix\\xreftie'char\\the\\appendixn/ -no tex-src/texinfo.tex /^\\newcount \\appendixno \\appendixno = `\\@$/ -no.\the tex-src/texinfo.tex /^\\else \\ifnum \\subsecno=0 Section\\xreftie'char\\the\\/ -no.\the tex-src/texinfo.tex /^Section\\xreftie'char\\the\\appendixno.\\the\\secno.\\th/ notinname c-src/etags.c /^#define notinname(c) (_nin[CHAR (c)]) \/* c is not / -not_single_kboard_state c-src/emacs/src/keyboard.c /^not_single_kboard_state (KBOARD *kboard)$/ npending c-src/emacs/src/keyboard.c 7244 -/N ps-src/rfc1245.ps /^\/N { $/ -/nredt ps-src/rfc1245.ps /^\/nredt 256 array def$/ nsbot tex-src/texinfo.tex /^\\def\\nsbot{\\vbox$/ nstop tex-src/texinfo.tex /^\\def\\nstop{\\vbox$/ -/Ntilde ps-src/rfc1245.ps /^\/Ntilde \/Odieresis \/Udieresis \/aacute \/agrave \/aci/ ntool_bar_items c-src/emacs/src/keyboard.c 7974 -NULL_PTR y-src/cccp.y 63 -NULL y-src/cccp.y 51 +numOfChannels cp-src/c.C 1 +num_columns cp-src/conway.cpp 16 +num_input_events c-src/emacs/src/keyboard.c 210 +num_regs c-src/emacs/src/regex.h 430 +num_rows cp-src/conway.cpp 15 +numberKeys objcpp-src/SimpleCalc.M /^- numberKeys:sender$/ +number_len c-src/etags.c /^static int number_len (long) ATTRIBUTE_CONST;$/ numberedsec tex-src/texinfo.tex /^\\outer\\def\\numberedsec{\\parsearg\\seczzz}$/ numberedsubsec tex-src/texinfo.tex /^\\outer\\def\\numberedsubsec{\\parsearg\\numberedsubsec/ numberedsubseczzz tex-src/texinfo.tex /^\\def\\numberedsubseczzz #1{\\seccheck{subsection}%$/ numberedsubsubsec tex-src/texinfo.tex /^\\outer\\def\\numberedsubsubsec{\\parsearg\\numberedsub/ numberedsubsubseczzz tex-src/texinfo.tex /^\\def\\numberedsubsubseczzz #1{\\seccheck{subsubsecti/ -numberKeys objcpp-src/SimpleCalc.M /^- numberKeys:sender$/ -number_len c-src/etags.c /^static int number_len (long) ATTRIBUTE_CONST;$/ -/numbersign ps-src/rfc1245.ps /^\/numbersign \/dollar \/percent \/ampersand \/quotesing/ numbervars prol-src/natded.prolog /^numbervars(X):-$/ -num_columns cp-src/conway.cpp 16 numericenumerate tex-src/texinfo.tex /^\\def\\numericenumerate{%$/ -num_input_events c-src/emacs/src/keyboard.c 210 -NUM_MOD_NAMES c-src/emacs/src/keyboard.c 6325 -numOfChannels cp-src/c.C 1 -NUM_RECENT_KEYS c-src/emacs/src/keyboard.c 91 -num_regs c-src/emacs/src/regex.h 430 -num_rows cp-src/conway.cpp 15 -NUMSTATS objc-src/PackInsp.h 36 nvars c-src/emacs/src/lisp.h 3140 obeyedspace tex-src/texinfo.tex /^\\gdef\\obeyedspace{\\ }$/ -Objc_help c-src/etags.c 613 -OBJCPPSRC make-src/Makefile /^OBJCPPSRC=SimpleCalc.H SimpleCalc.M$/ -OBJCSRC make-src/Makefile /^OBJCSRC=Subprocess.h Subprocess.m PackInsp.h PackI/ -Objc_suffixes c-src/etags.c 609 objdef c-src/etags.c 2484 object c-src/emacs/src/lisp.h 2128 object_registry cp-src/clheir.cpp 10 -OBJS make-src/Makefile /^OBJS=${GETOPTOBJS} ${REGEXOBJS} ${CHECKOBJS}$/ objtag c-src/etags.c 2453 objvar c-src/emacs/src/lisp.h 2297 obstack_chunk_alloc y-src/parse.y 47 obstack_chunk_free y-src/parse.y 48 ocatseen c-src/etags.c 2477 -/ocircumflex ps-src/rfc1245.ps /^\/ocircumflex \/odieresis \/otilde \/uacute \/ugrave \/u/ octave_MDiagArray2_h cp-src/MDiagArray2.h 29 octave_Range_h cp-src/Range.h 24 oddfooting tex-src/texinfo.tex /^\\def\\oddfooting{\\parsearg\\oddfootingxxx}$/ @@ -2793,56 +3534,52 @@ oimplementation c-src/etags.c 2474 oinbody c-src/etags.c 2478 ok objc-src/PackInsp.m /^-ok:sender$/ ok_to_echo_at_next_pause c-src/emacs/src/keyboard.c 159 -oldpage tex-src/texinfo.tex /^ \\let\\oldpage = \\page$/ old_value c-src/emacs/src/lisp.h 2980 +oldpage tex-src/texinfo.tex /^ \\let\\oldpage = \\page$/ omethodcolon c-src/etags.c 2481 omethodparm c-src/etags.c 2482 omethodsign c-src/etags.c 2479 omethodtag c-src/etags.c 2480 +one tex-src/texinfo.tex /^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/ onepageout tex-src/texinfo.tex /^\\def\\cropmarks{\\let\\onepageout=\\croppageout }$/ onepageout tex-src/texinfo.tex /^\\def\\onepageout#1{\\hoffset=\\normaloffset$/ -one tex-src/texinfo.tex /^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/ onone c-src/etags.c 2472 oparenseen c-src/etags.c 2476 -OPENBUTTON objc-src/PackInsp.m 47 -opencontents tex-src/texinfo.tex /^\\def\\opencontents{\\openout \\contentsfile = \\jobnam/ +open objc-src/PackInsp.m /^-open:sender$/ open-dribble-file c-src/emacs/src/keyboard.c /^DEFUN ("open-dribble-file", Fopen_dribble_file, So/ -openindices tex-src/texinfo.tex /^\\def\\openindices{%$/ openInWorkspace objc-src/PackInsp.m /^static void openInWorkspace(const char *filename)$/ -open objc-src/PackInsp.m /^-open:sender$/ +opencontents tex-src/texinfo.tex /^\\def\\opencontents{\\openout \\contentsfile = \\jobnam/ +openindices tex-src/texinfo.tex /^\\def\\openindices{%$/ operationKeys objcpp-src/SimpleCalc.M /^- operationKeys:sender$/ -operator+ cp-src/c.C /^ A operator+(A& a) {};$/ -operator+ cp-src/c.C /^const A& A::operator+(const A&) { }$/ -operator - cp-src/c.C /^void operator -(int, int) {}$/ -operator+ cp-src/c.C /^void operator+(int, int) {}$/ -operator = cp-src/functions.cpp /^Date & Date::operator = ( Date d ){$/ -operator += cp-src/functions.cpp /^Date & Date::operator += ( int days ){$/ -operator -= cp-src/functions.cpp /^Date & Date::operator -= ( int days ){$/ +operator y-src/cccp.y 438 operator ++ cp-src/functions.cpp /^Date & Date::operator ++ ( void ){$/ -operator -- cp-src/functions.cpp /^Date & Date::operator -- ( void ){$/ +operator += cp-src/functions.cpp /^Date & Date::operator += ( int days ){$/ +operator - cp-src/c.C /^void operator -(int, int) {}$/ operator - cp-src/functions.cpp /^int Date::operator - ( Date d ){$/ +operator -- cp-src/functions.cpp /^Date & Date::operator -- ( void ){$/ +operator -= cp-src/functions.cpp /^Date & Date::operator -= ( int days ){$/ operator < cp-src/functions.cpp /^int Date::operator < ( Date d ) {$/ +operator << cp-src/functions.cpp /^ostream& operator << ( ostream &c, Date d ) {$/ +operator = cp-src/MDiagArray2.h /^ MDiagArray2& operator = (const MDiagArray2/ +operator = cp-src/functions.cpp /^Date & Date::operator = ( Date d ){$/ operator == cp-src/functions.cpp /^int Date::operator == ( Date d ) {$/ operator > cp-src/functions.cpp /^int Date::operator > ( Date d ) {$/ operator >> cp-src/functions.cpp /^istream& operator >> ( istream &i, Date & dd ){$/ -operator << cp-src/functions.cpp /^ostream& operator << ( ostream &c, Date d ) {$/ -operator = cp-src/MDiagArray2.h /^ MDiagArray2& operator = (const MDiagArray2/ -OperatorFun c-src/h.h 88 +operator MArray2 cp-src/MDiagArray2.h /^ operator MArray2 () const$/ operator int cp-src/c.C /^void operator int(int, int) {}$/ operator int cp-src/fail.C /^ operator int() const {return x;}$/ -operator MArray2 cp-src/MDiagArray2.h /^ operator MArray2 () const$/ -operator y-src/cccp.y 438 +operator+ cp-src/c.C /^ A operator+(A& a) {};$/ +operator+ cp-src/c.C /^const A& A::operator+(const A&) { }$/ +operator+ cp-src/c.C /^void operator+(int, int) {}$/ opheader\defoptype tex-src/texinfo.tex /^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/ opnested tex-src/texinfo.tex /^\\gdef\\opnested{\\char`\\(\\global\\advance\\parencount / opnr tex-src/texinfo.tex /^\\def\\opnr{{\\sf\\char`\\(}} \\def\\clnr{{\\sf\\char`\\)}} / opparsebody\Edefop tex-src/texinfo.tex /^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/ oprm tex-src/texinfo.tex /^\\gdef\\oprm#1 {{\\rm\\char`\\(}#1 \\bf \\let(=\\opnested / oprotocol c-src/etags.c 2473 -/O ps-src/rfc1245.ps /^\/O {closepath} bind def$/ optheader tex-src/texinfo.tex /^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/ -optional_argument c-src/getopt.h 91 option c-src/getopt.h 73 -OPTIONS make-src/Makefile /^OPTIONS=--members --declarations --regex=@regexfil/ +optional_argument c-src/getopt.h 91 optx\defoptheader tex-src/texinfo.tex /^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/ optype tex-src/texinfo.tex /^\\begingroup\\defname {#2}{\\defoptype{} on #1}%$/ optype tex-src/texinfo.tex /^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/ @@ -2851,193 +3588,129 @@ opx\defopheader tex-src/texinfo.tex /^\\defopparsebody\\Edefop\\defopx\\defophea ord_add_element prol-src/ordsets.prolog /^ord_add_element([], Element, [Element]).$/ ord_del_element prol-src/ordsets.prolog /^ord_del_element([], _, []).$/ ord_disjoint prol-src/ordsets.prolog /^ord_disjoint(Set1, Set2) :-$/ -/ordfeminine ps-src/rfc1245.ps /^\/ordfeminine \/ordmasculine \/.notdef \/ae \/oslash \/q/ +ord_intersect prol-src/ordsets.prolog /^ord_intersect([Head1|Tail1], [Head2|Tail2]) :-$/ +ord_intersection prol-src/ordsets.prolog /^ord_intersection(Sets, Intersection) :- $/ +ord_intersection prol-src/ordsets.prolog /^ord_intersection([], Set2, [], Set2).$/ +ord_intersection prol-src/ordsets.prolog /^ord_intersection([], _, []).$/ ord_intersection2 prol-src/ordsets.prolog /^ord_intersection2(1, [Set|Sets], Set0, Sets0) :- !/ ord_intersection3 prol-src/ordsets.prolog /^ord_intersection3(<, _, Set1, Head2, Tail2, Inters/ ord_intersection4 prol-src/ordsets.prolog /^ord_intersection4(<, _, Set1, Head2, Tail2, Inters/ -ord_intersection prol-src/ordsets.prolog /^ord_intersection([], _, []).$/ -ord_intersection prol-src/ordsets.prolog /^ord_intersection([], Set2, [], Set2).$/ -ord_intersection prol-src/ordsets.prolog /^ord_intersection(Sets, Intersection) :- $/ -ord_intersect prol-src/ordsets.prolog /^ord_intersect([Head1|Tail1], [Head2|Tail2]) :-$/ ord_member prol-src/ordsets.prolog /^ord_member(X, [E|Es]) :-$/ ord_seteq prol-src/ordsets.prolog /^ord_seteq(Set1, Set2) :-$/ ord_setproduct prol-src/ordsets.prolog /^ord_setproduct([], _, []).$/ ord_subset prol-src/ordsets.prolog /^ord_subset([], _).$/ ord_subtract prol-src/ordsets.prolog /^ord_subtract(Set1, Set2, Union) :-$/ ord_symdiff prol-src/ordsets.prolog /^ord_symdiff([], Set2, Set2).$/ -ord_union4 prol-src/ordsets.prolog /^ord_union4(<, Head, Set1, Head2, Tail2, [Head|Unio/ -ord_union_all prol-src/ordsets.prolog /^ord_union_all(1, [Set|Sets], Set, Sets) :- !.$/ ord_union prol-src/ordsets.prolog /^ord_union(Set1, Set2, Union) :-$/ ord_union prol-src/ordsets.prolog /^ord_union([], Union) :- !, Union = [].$/ -OR y-src/cccp.c 10 +ord_union4 prol-src/ordsets.prolog /^ord_union4(<, Head, Set1, Head2, Tail2, [Head|Unio/ +ord_union_all prol-src/ordsets.prolog /^ord_union_all(1, [Set|Sets], Set, Sets) :- !.$/ oss html-src/softwarelibero.html /^Il movimento open source$/ otagseen c-src/etags.c 2475 -OTAGS make-src/Makefile /^OTAGS: oetags ${SRCS} srclist$/ -/Otilde ps-src/rfc1245.ps /^\/Otilde \/OE \/oe \/endash \/emdash \/quotedblleft \/quo/ +outputTime cp-src/c.C 9 output_file perl-src/htlmify-cystic 35 output_files perl-src/htlmify-cystic 32 outputtable html-src/algrthms.html /^Output$/ -outputTime cp-src/c.C 9 outsyn prol-src/natded.prolog /^outsyn(['Any'],_).$/ -OVERLAYP c-src/emacs/src/lisp.h /^OVERLAYP (Lisp_Object x)$/ -Overview tex-src/gzip.texi /^@node Overview, Sample, Copying, Top$/ -PackageInspector objc-src/PackInsp.h /^@interface PackageInspector:WMInspector$/ +p c-src/emacs/src/lisp.h 4673 +p c-src/emacs/src/lisp.h 4679 +p.x forth-src/test-forth.fth /^ 1 CELLS +FIELD p.x \\ A single cell filed name/ +p.y forth-src/test-forth.fth /^ 1 CELLS +FIELD p.y \\ A single cell field name/ +p/f ada-src/etags-test-for.ada /^ function p pragma Import (C,$/ +p/f ada-src/etags-test-for.ada /^function p ("p");$/ +pD c-src/emacs/src/lisp.h 165 +pD c-src/emacs/src/lisp.h 167 +pD c-src/emacs/src/lisp.h 169 +pD c-src/emacs/src/lisp.h 171 +pI c-src/emacs/src/lisp.h 106 +pI c-src/emacs/src/lisp.h 94 +pI c-src/emacs/src/lisp.h 99 +pMd c-src/emacs/src/lisp.h 150 +pMd c-src/emacs/src/lisp.h 155 +pMu c-src/emacs/src/lisp.h 151 +pMu c-src/emacs/src/lisp.h 156 +p_next c-src/etags.c 258 +page tex-src/texinfo.tex /^ \\let\\page = \\oldpage$/ +page tex-src/texinfo.tex /^ \\def\\page{%$/ +page tex-src/texinfo.tex /^\\def\\page{\\par\\vfill\\supereject}$/ pagealignmacro tex-src/texinfo.tex /^\\global\\let\\pagealignmacro=\\chapoddpage$/ -pagealignmacro tex-src/texinfo.tex /^\\global\\let\\pagealignmacro=\\chappager}$/ pagealignmacro tex-src/texinfo.tex /^\\global\\let\\pagealignmacro=\\chappager$/ +pagealignmacro tex-src/texinfo.tex /^\\global\\let\\pagealignmacro=\\chappager}$/ pagebody tex-src/texinfo.tex /^\\def\\pagebody#1{\\vbox to\\pageheight{\\boxmaxdepth=\\/ pagecontents tex-src/texinfo.tex /^\\gdef\\pagecontents#1{\\ifvoid\\topins\\else\\unvbox\\to/ -/pagedimen ps-src/rfc1245.ps /^\/pagedimen { $/ pagesize c-src/emacs/src/gmalloc.c 1707 pagesofar tex-src/texinfo.tex /^\\def\\pagesofar{\\unvbox\\partialpage %$/ -page tex-src/texinfo.tex /^ \\def\\page{%$/ -page tex-src/texinfo.tex /^\\def\\page{\\par\\vfill\\supereject}$/ -page tex-src/texinfo.tex /^ \\let\\page = \\oldpage$/ pair merc-src/accumulator.m /^:- import_module pair.$/ -/papersize ps-src/rfc1245.ps /^\/papersize {$/ +par tex-src/texinfo.tex /^\\let\\par=\\lisppar$/ +par tex-src/texinfo.tex /^{\\let\\par=\\endgraf \\smallbreak}%$/ paragraphindent tex-src/texinfo.tex /^\\let\\paragraphindent=\\comment$/ -/paragraph ps-src/rfc1245.ps /^\/paragraph \/germandbls \/registered \/copyright \/tra/ -/parenright ps-src/rfc1245.ps /^\/parenright \/asterisk \/plus \/comma \/hyphen \/period/ parent c-src/emacs/src/keyboard.c 8745 parent c-src/emacs/src/lisp.h 1590 -parseargdiscardspace tex-src/texinfo.tex /^\\gdef\\parseargdiscardspace {\\begingroup\\obeylines\\/ -parseargline tex-src/texinfo.tex /^\\def\\parseargline{\\begingroup \\obeylines \\parsearg/ -parsearglinex tex-src/texinfo.tex /^\\gdef\\parsearglinex #1^^M{\\endgroup \\next {#1}}}$/ -parsearg tex-src/texinfo.tex /^\\def\\parsearg #1{\\let\\next=#1\\begingroup\\obeylines/ -parseargx tex-src/texinfo.tex /^\\def\\parseargx{%$/ -parsebody\Edefmac tex-src/texinfo.tex /^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/ -parsebody\Edefspec tex-src/texinfo.tex /^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/ -parsebody\Edeftypefun tex-src/texinfo.tex /^\\def\\deftypefun{\\defparsebody\\Edeftypefun\\deftypef/ -parsebody\Edefun tex-src/texinfo.tex /^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/ +parse prol-src/natded.prolog /^parse(Ws,Cat):-$/ +parseFromVars php-src/lce_functions.php /^ function parseFromVars($prefix)$/ parse_c_expression y-src/cccp.y /^parse_c_expression (string)$/ parse_cgi prol-src/natded.prolog /^parse_cgi(TokenList,KeyVals):-$/ parse_error y-src/parse.y 82 parse_escape y-src/cccp.y /^parse_escape (string_ptr)$/ -parseFromVars php-src/lce_functions.php /^ function parseFromVars($prefix)$/ parse_hash y-src/parse.y 64 parse_menu_item c-src/emacs/src/keyboard.c /^parse_menu_item (Lisp_Object item, int inmenubar)$/ parse_modifiers c-src/emacs/src/keyboard.c /^parse_modifiers (Lisp_Object symbol)$/ parse_modifiers_uncached c-src/emacs/src/keyboard.c /^parse_modifiers_uncached (Lisp_Object symbol, ptrd/ parse_number y-src/cccp.y /^parse_number (olen)$/ -parse prol-src/natded.prolog /^parse(Ws,Cat):-$/ -parse_return_error y-src/cccp.y 70 parse_return y-src/parse.y 74 +parse_return_error y-src/cccp.y 70 parse_solitary_modifier c-src/emacs/src/keyboard.c /^parse_solitary_modifier (Lisp_Object symbol)$/ parse_tool_bar_item c-src/emacs/src/keyboard.c /^parse_tool_bar_item (Lisp_Object key, Lisp_Object / parse_tree merc-src/accumulator.m /^:- import_module parse_tree.$/ -par tex-src/texinfo.tex /^{\\let\\par=\\endgraf \\smallbreak}%$/ -par tex-src/texinfo.tex /^\\let\\par=\\lisppar$/ -Pascal_functions c-src/etags.c /^Pascal_functions (FILE *inf)$/ -Pascal_help c-src/etags.c 621 -Pascal_suffixes c-src/etags.c 619 -PASSRC make-src/Makefile /^PASSRC=common.pas$/ +parsearg tex-src/texinfo.tex /^\\def\\parsearg #1{\\let\\next=#1\\begingroup\\obeylines/ +parseargdiscardspace tex-src/texinfo.tex /^\\gdef\\parseargdiscardspace {\\begingroup\\obeylines\\/ +parseargline tex-src/texinfo.tex /^\\def\\parseargline{\\begingroup \\obeylines \\parsearg/ +parsearglinex tex-src/texinfo.tex /^\\gdef\\parsearglinex #1^^M{\\endgroup \\next {#1}}}$/ +parseargx tex-src/texinfo.tex /^\\def\\parseargx{%$/ +parsebody\Edefmac tex-src/texinfo.tex /^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/ +parsebody\Edefspec tex-src/texinfo.tex /^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/ +parsebody\Edeftypefun tex-src/texinfo.tex /^\\def\\deftypefun{\\defparsebody\\Edeftypefun\\deftypef/ +parsebody\Edefun tex-src/texinfo.tex /^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/ pat c-src/etags.c 262 pattern c-src/etags.c 260 pchapsepmacro tex-src/texinfo.tex /^\\global\\let\\pchapsepmacro=\\chapbreak$/ pchapsepmacro tex-src/texinfo.tex /^\\global\\let\\pchapsepmacro=\\chapoddpage$/ pchapsepmacro tex-src/texinfo.tex /^\\global\\let\\pchapsepmacro=\\chappager$/ -p c-src/emacs/src/lisp.h 4673 -p c-src/emacs/src/lisp.h 4679 -pD c-src/emacs/src/lisp.h 165 -pD c-src/emacs/src/lisp.h 167 -pD c-src/emacs/src/lisp.h 169 -pD c-src/emacs/src/lisp.h 171 pdlcount c-src/emacs/src/lisp.h 3046 -PDT c-src/h.h /^ Date 04 May 87 235311 PDT (Mon)$/ pending-delete-mode el-src/TAGTEST.EL /^(defalias 'pending-delete-mode 'delete-selection-m/ pending_funcalls c-src/emacs/src/keyboard.c 4377 -pending_signals c-src/emacs/src/keyboard.c 80 -/periodcentered ps-src/rfc1245.ps /^\/periodcentered \/quotesinglbase \/quotedblbase \/per/ -Perl_functions c-src/etags.c /^Perl_functions (FILE *inf)$/ -Perl_help c-src/etags.c 630 -Perl_interpreters c-src/etags.c 628 -PERLSRC make-src/Makefile /^PERLSRC=htlmify-cystic yagrip.pl kai-test.pl mirro/ -Perl_suffixes c-src/etags.c 626 -p/f ada-src/etags-test-for.ada /^function p ("p");$/ -p/f ada-src/etags-test-for.ada /^ function p pragma Import (C,$/ +pending_signals c-src/emacs/src/keyboard.c 80 pfatal c-src/etags.c /^pfatal (const char *s1)$/ pfdset c-src/h.h 57 pfnote c-src/etags.c /^pfnote (char *name, bool is_func, char *linestart,/ -/PF ps-src/rfc1245.ps /^\/PF { $/ -PHP_functions c-src/etags.c /^PHP_functions (FILE *inf)$/ -PHP_help c-src/etags.c 639 -PHPSRC make-src/Makefile /^PHPSRC=lce_functions.php ptest.php sendmail.php$/ -PHP_suffixes c-src/etags.c 637 -pI c-src/emacs/src/lisp.h 106 -pI c-src/emacs/src/lisp.h 94 -pI c-src/emacs/src/lisp.h 99 pindex tex-src/texinfo.tex /^\\def\\pindex {\\pgindex}$/ pinned c-src/emacs/src/lisp.h 679 -Pkg1/b ada-src/etags-test-for.ada /^package body Pkg1 is$/ -Pkg1/b ada-src/waroquiers.ada /^package body Pkg1 is$/ -Pkg1_Func1/f ada-src/etags-test-for.ada /^ function Pkg1_Func1 return Boolean;$/ -Pkg1_Func1/f ada-src/etags-test-for.ada /^function Pkg1_Func1 return Boolean is$/ -Pkg1_Func1/f ada-src/etags-test-for.ada /^ function Pkg1_Func1 return Boolean is separate;$/ -Pkg1_Func1/f ada-src/waroquiers.ada /^ function Pkg1_Func1 return Boolean;$/ -Pkg1_Func1/f ada-src/waroquiers.ada /^function Pkg1_Func1 return Boolean is$/ -Pkg1_Func1/f ada-src/waroquiers.ada /^ function Pkg1_Func1 return Boolean is separate;$/ -Pkg1_Func2/f ada-src/etags-test-for.ada /^ function Pkg1_Func2 (Ijk : Integer; Z : Integer)/ -Pkg1_Func2/f ada-src/waroquiers.ada /^ function Pkg1_Func2 (Ijk : Integer; Z : Integer)/ -Pkg1_Pkg1/b ada-src/etags-test-for.ada /^package body Pkg1_Pkg1 is$/ -Pkg1_Pkg1/b ada-src/etags-test-for.ada /^ package body Pkg1_Pkg1 is separate;$/ -Pkg1_Pkg1/b ada-src/waroquiers.ada /^package body Pkg1_Pkg1 is$/ -Pkg1_Pkg1/b ada-src/waroquiers.ada /^ package body Pkg1_Pkg1 is separate;$/ -Pkg1_Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Pkg1_Proc1;$/ -Pkg1_Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Pkg1_Proc1 is$/ -Pkg1_Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Pkg1_Proc1;$/ -Pkg1_Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Pkg1_Proc1 is$/ -Pkg1_Pkg1/s ada-src/etags-test-for.ada /^ package Pkg1_Pkg1 is$/ -Pkg1_Pkg1/s ada-src/waroquiers.ada /^ package Pkg1_Pkg1 is$/ -Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc1;$/ -Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc1 is$/ -Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc1;$/ -Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc1 is$/ -Pkg1_Proc2/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc2 (I : Integer);$/ -Pkg1_Proc2/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc2 (I : Integer) is$/ -Pkg1_Proc2/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc2 (I : Integer);$/ -Pkg1_Proc2/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc2 (I : Integer) is$/ -Pkg1/s ada-src/etags-test-for.ada /^package Pkg1 is$/ -Pkg1/s ada-src/waroquiers.ada /^package Pkg1 is$/ -plainc c-src/etags.c 2934 plain_C_entries c-src/etags.c /^plain_C_entries (FILE *inf)$/ plain_C_suffixes c-src/etags.c 643 +plainc c-src/etags.c 2934 plainsecheading tex-src/texinfo.tex /^\\def\\plainsecheading #1{\\secheadingi {#1}}$/ plist c-src/emacs/src/lisp.h 2040 plist c-src/emacs/src/lisp.h 697 plus cp-src/functions.cpp /^void Date::plus ( int days , int month , int year / plus go-src/test1.go 5 plusvalseq prol-src/natded.prolog /^plusvalseq([]) --> [].$/ -pMd c-src/emacs/src/lisp.h 150 -pMd c-src/emacs/src/lisp.h 155 -pMu c-src/emacs/src/lisp.h 151 -pMu c-src/emacs/src/lisp.h 156 -p_next c-src/etags.c 258 -POEntryAD php-src/lce_functions.php 29 -POEntry php-src/lce_functions.php 105 -POEntry php-src/lce_functions.php /^ function POEntry()$/ -pointer c-src/emacs/src/lisp.h 2125 point forth-src/test-forth.fth /^BEGIN-STRUCTURE point \\ create the named structure/ point tex-src/texinfo.tex /^\\def\\point{$\\star$}$/ -poll_for_input_1 c-src/emacs/src/keyboard.c /^poll_for_input_1 (void)$/ +pointer c-src/emacs/src/lisp.h 2125 poll_for_input c-src/emacs/src/keyboard.c /^poll_for_input (struct atimer *timer)$/ +poll_for_input_1 c-src/emacs/src/keyboard.c /^poll_for_input_1 (void)$/ poll_suppress_count c-src/emacs/src/keyboard.c 1908 poll_suppress_count c-src/emacs/src/lisp.h 3047 poll_timer c-src/emacs/src/keyboard.c 1915 -popclass_above c-src/etags.c /^popclass_above (int bracelev)$/ -pop_kboard c-src/emacs/src/keyboard.c /^pop_kboard (void)$/ pop-tag-mark el-src/emacs/lisp/progmodes/etags.el /^(defalias 'pop-tag-mark 'xref-pop-marker-stack)$/ -POReader php-src/lce_functions.php 163 -POReader php-src/lce_functions.php /^ function POReader($domain, $filename)$/ -PORManager php-src/lce_functions.php 498 -PORManager php-src/lce_functions.php /^ function PORManager()$/ +pop_kboard c-src/emacs/src/keyboard.c /^pop_kboard (void)$/ +popclass_above c-src/etags.c /^popclass_above (int bracelev)$/ position_to_Time c-src/emacs/src/keyboard.c /^position_to_Time (ptrdiff_t pos)$/ posix_memalign c-src/emacs/src/gmalloc.c /^posix_memalign (void **memptr, size_t alignment, s/ posn-at-point c-src/emacs/src/keyboard.c /^DEFUN ("posn-at-point", Fposn_at_point, Sposn_at_p/ posn-at-x-y c-src/emacs/src/keyboard.c /^DEFUN ("posn-at-x-y", Fposn_at_x_y, Sposn_at_x_y, / possible_sum_sign y-src/cccp.y /^#define possible_sum_sign(a, b, sum) ((((a) ^ (b))/ -PostControls pyt-src/server.py /^ def PostControls(self):$/ post pyt-src/server.py /^ def post(self):$/ -POSTSCRIPTFLAGS make-src/Makefile /^POSTSCRIPTFLAGS=--language=none --regex='#\/[^ \\t{]/ pot_etags_version c-src/etags.c 81 pp1 c-src/dostorture.c /^int pp1($/ pp1 c-src/torture.c /^int pp1($/ @@ -3054,243 +3727,139 @@ pp_html_table_fitch_tree prol-src/natded.prolog /^pp_html_table_fitch_tree(T):-$ pp_html_table_tree prol-src/natded.prolog /^pp_html_table_tree(T):-$/ pp_html_tree prol-src/natded.prolog /^pp_html_tree(ass(Syn,V,'$VAR'(N))):-$/ pp_html_trees prol-src/natded.prolog /^pp_html_trees([T|Ts],N,M):-$/ +pp_lam prol-src/natded.prolog /^pp_lam(Var^Alpha):-$/ pp_lam_bracket prol-src/natded.prolog /^pp_lam_bracket(A^B):-$/ pp_lam_paren prol-src/natded.prolog /^pp_lam_paren(Var^Alpha):-$/ -pp_lam prol-src/natded.prolog /^pp_lam(Var^Alpha):-$/ pp_paren prol-src/natded.prolog /^pp_paren(C):-$/ pp_rule prol-src/natded.prolog /^pp_rule(fe):-write('\/E').$/ -/P ps-src/rfc1245.ps /^\/P { $/ +pp_syn prol-src/natded.prolog /^pp_syn(A\/B):-$/ pp_syn_back prol-src/natded.prolog /^pp_syn_back(A\/B):-$/ pp_syn_paren prol-src/natded.prolog /^pp_syn_paren(A\/B):-$/ -pp_syn prol-src/natded.prolog /^pp_syn(A\/B):-$/ pp_tree prol-src/natded.prolog /^pp_tree(T):-$/ pp_trees prol-src/natded.prolog /^pp_trees([T|Ts],Column):-$/ +pp_word prol-src/natded.prolog /^pp_word(W):-$/ pp_word_list prol-src/natded.prolog /^pp_word_list([]).$/ pp_word_list_rest prol-src/natded.prolog /^pp_word_list_rest([]).$/ -pp_word prol-src/natded.prolog /^pp_word(W):-$/ -Pre_Call_State/t ada-src/2ataspri.ads /^ type Pre_Call_State is new System.Address;$/ -.PRECIOUS make-src/Makefile /^.PRECIOUS: ETAGS CTAGS ETAGS16 CTAGS16 ETAGS17 CTA/ predicate c-src/emacs/src/lisp.h 2307 -prev c.c 175 prev c-src/emacs/src/gmalloc.c 165 prev c-src/emacs/src/gmalloc.c 189 prev c-src/emacs/src/lisp.h 2191 +prev c.c 175 primary tex-src/texinfo.tex /^\\def\\primary #1{\\line{#1\\hfil}}$/ -PrintAdd go-src/test1.go /^func (n intNumber) PrintAdd() {$/ -PrintAdd go-src/test1.go /^func (s str) PrintAdd() {$/ +print tex-src/texinfo.tex /^\\def\\print{\\leavevmode\\lower.1ex\\hbox to 1em{\\hfil/ +print tex-src/texinfo.tex /^\\def\\print{\\realbackslash print}$/ printClassification php-src/lce_functions.php /^ function printClassification()$/ +print_help c-src/etags.c /^print_help (argument *argbuffer)$/ +print_language_names c-src/etags.c /^print_language_names (void)$/ +print_version c-src/etags.c /^print_version (void)$/ printedmanual tex-src/texinfo.tex /^\\def\\printedmanual{\\ignorespaces #5}%$/ printedmanual tex-src/texinfo.tex /^section ``\\printednodename'' in \\cite{\\printedmanu/ printednodename tex-src/texinfo.tex /^\\def\\printednodename{\\ignorespaces #1}%$/ printednodename tex-src/texinfo.tex /^\\def\\printednodename{\\ignorespaces #3}%$/ -print_help c-src/etags.c /^print_help (argument *argbuffer)$/ printindex tex-src/texinfo.tex /^\\def\\printindex{\\parsearg\\doprintindex}$/ -print_language_names c-src/etags.c /^print_language_names (void)$/ printmax_t c-src/emacs/src/lisp.h 148 printmax_t c-src/emacs/src/lisp.h 153 -print tex-src/texinfo.tex /^\\def\\print{\\leavevmode\\lower.1ex\\hbox to 1em{\\hfil/ -print tex-src/texinfo.tex /^\\def\\print{\\realbackslash print}$/ -PRINT_UNDOCUMENTED_OPTIONS_HELP c-src/etags.c 804 -print_version c-src/etags.c /^print_version (void)$/ -Private objc-src/Subprocess.m /^@interface Subprocess(Private)$/ -Private_T/b ada-src/etags-test-for.ada /^ task body Private_T is$/ -Private_T/b ada-src/waroquiers.ada /^ task body Private_T is$/ -Private_T/k ada-src/etags-test-for.ada /^ task Private_T;$/ -Private_T/k ada-src/waroquiers.ada /^ task Private_T;$/ -Private_T/p ada-src/etags-test-for.ada /^ procedure Private_T;$/ -Private_T/p ada-src/etags-test-for.ada /^ procedure Private_T is$/ -Private_T/p ada-src/waroquiers.ada /^ procedure Private_T;$/ -Private_T/p ada-src/waroquiers.ada /^ procedure Private_T is$/ -Private_T/t ada-src/etags-test-for.ada /^ type Private_T is$/ -Private_T/t ada-src/etags-test-for.ada /^ type Private_T is private;$/ -Private_T/t ada-src/waroquiers.ada /^ type Private_T is$/ -Private_T/t ada-src/waroquiers.ada /^ type Private_T is private;$/ -Problems tex-src/gzip.texi /^@node Problems, Concept Index, Tapes, Top$/ proc c-src/h.h 87 process_file c-src/etags.c /^process_file (FILE *fh, char *fn, language *lang)$/ process_file_name c-src/etags.c /^process_file_name (char *file, language *lang)$/ -PROCESSP c-src/emacs/src/lisp.h /^PROCESSP (Lisp_Object a)$/ process_pending_signals c-src/emacs/src/keyboard.c /^process_pending_signals (void)$/ process_special_events c-src/emacs/src/keyboard.c /^process_special_events (void)$/ process_tool_bar_item c-src/emacs/src/keyboard.c /^process_tool_bar_item (Lisp_Object key, Lisp_Objec/ -Proc/t ada-src/2ataspri.ads /^ type Proc is access procedure (Addr : System.Ad/ prof make-src/Makefile /^prof: ETAGS$/ prolog_atom c-src/etags.c /^prolog_atom (char *s, size_t pos)$/ -Prolog_functions c-src/etags.c /^Prolog_functions (FILE *inf)$/ -Prolog_help c-src/etags.c 654 prolog_pr c-src/etags.c /^prolog_pr (char *s, char *last)$/ prolog_skip_comment c-src/etags.c /^prolog_skip_comment (linebuffer *plb, FILE *inf)$/ -Prolog_suffixes c-src/etags.c 652 -PROLSRC make-src/Makefile /^PROLSRC=ordsets.prolog natded.prolog$/ -PROP c-src/emacs/src/keyboard.c 8379 -PROP c-src/emacs/src/keyboard.c /^#define PROP(IDX) AREF (tool_bar_item_properties, / prop c-src/etags.c 209 -PROTECT_MALLOC_STATE c-src/emacs/src/gmalloc.c /^#define PROTECT_MALLOC_STATE(PROT) \/* empty *\/$/ -PROTECT_MALLOC_STATE c-src/emacs/src/gmalloc.c /^#define PROTECT_MALLOC_STATE(PROT) protect_malloc_/ protect_malloc_state c-src/emacs/src/gmalloc.c /^protect_malloc_state (int protect_p)$/ -PRTPKG f-src/entry.for /^ LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL,/ -PRTPKG f-src/entry.strange /^ LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL,/ -PRTPKG f-src/entry.strange_suffix /^ LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL,/ -PSEUDO c-src/sysdep.h /^#define PSEUDO(name, syscall_name, args) / -PSEUDOVECSIZE c-src/emacs/src/lisp.h /^#define PSEUDOVECSIZE(type, nonlispfield) \\$/ -PSEUDOVECTOR_AREA_BITS c-src/emacs/src/lisp.h 818 -PSEUDOVECTOR_FLAG c-src/emacs/src/lisp.h 774 -PSEUDOVECTORP c-src/emacs/src/lisp.h /^PSEUDOVECTORP (Lisp_Object a, int code)$/ -PSEUDOVECTOR_REST_BITS c-src/emacs/src/lisp.h 813 -PSEUDOVECTOR_REST_MASK c-src/emacs/src/lisp.h 814 -PSEUDOVECTOR_SIZE_BITS c-src/emacs/src/lisp.h 808 -PSEUDOVECTOR_SIZE_MASK c-src/emacs/src/lisp.h 809 -PSEUDOVECTOR_TYPEP c-src/emacs/src/lisp.h /^PSEUDOVECTOR_TYPEP (struct vectorlike_header *a, i/ -PS_functions c-src/etags.c /^PS_functions (FILE *inf)$/ -PS_help c-src/etags.c 649 -PSSRC make-src/Makefile /^PSSRC=rfc1245.ps$/ -PS_suffixes c-src/etags.c 647 +ptexL tex-src/texinfo.tex /^\\let\\ptexL=\\L$/ ptexb tex-src/texinfo.tex /^\\let\\ptexb=\\b$/ ptexbullet tex-src/texinfo.tex /^\\let\\ptexbullet=\\bullet$/ ptexc tex-src/texinfo.tex /^\\let\\ptexc=\\c$/ -ptexdots tex-src/texinfo.tex /^\\let\\ptexdots=\\dots$/ ptexdot tex-src/texinfo.tex /^\\let\\ptexdot=\\.$/ +ptexdots tex-src/texinfo.tex /^\\let\\ptexdots=\\dots$/ ptexend tex-src/texinfo.tex /^\\let\\ptexend=\\end$/ ptexequiv tex-src/texinfo.tex /^\\let\\ptexequiv = \\equiv$/ ptexfootnote tex-src/texinfo.tex /^\\let\\ptexfootnote=\\footnote$/ ptexi tex-src/texinfo.tex /^\\let\\ptexi=\\i$/ -ptexlbrace tex-src/texinfo.tex /^\\let\\ptexlbrace=\\{$/ ptexl tex-src/texinfo.tex /^\\let\\ptexl=\\l$/ -ptexL tex-src/texinfo.tex /^\\let\\ptexL=\\L$/ +ptexlbrace tex-src/texinfo.tex /^\\let\\ptexlbrace=\\{$/ ptexrbrace tex-src/texinfo.tex /^\\let\\ptexrbrace=\\}$/ ptexstar tex-src/texinfo.tex /^\\let\\ptexstar=\\*$/ ptext tex-src/texinfo.tex /^\\let\\ptext=\\t$/ pthread_mutexattr_setprio_ceiling/f ada-src/2ataspri.adb /^ function pthread_mutexattr_setprio_ceiling$/ pthread_mutexattr_setprotocol/f ada-src/2ataspri.adb /^ function pthread_mutexattr_setprotocol$/ -PTY_LENGTH objc-src/Subprocess.m 21 -PTY_TEMPLATE objc-src/Subprocess.m 20 -Public_T/t ada-src/etags-test-for.ada /^ type Public_T is$/ -Public_T/t ada-src/waroquiers.ada /^ type Public_T is$/ purpose c-src/emacs/src/lisp.h 1594 -pushclass_above c-src/etags.c /^pushclass_above (int bracelev, char *str, int len)/ -PUSH_C_STR c-src/emacs/src/keyboard.c /^#define PUSH_C_STR(str, listvar) \\$/ -PUSH_HANDLER c-src/emacs/src/lisp.h /^#define PUSH_HANDLER(c, tag_ch_val, handlertype) \\/ push_kboard c-src/emacs/src/keyboard.c /^push_kboard (struct kboard *k)$/ +pushclass_above c-src/etags.c /^pushclass_above (int bracelev, char *str, int len)/ put_entries c-src/etags.c /^put_entries (register node *np)$/ -PVEC_BOOL_VECTOR c-src/emacs/src/lisp.h 787 -PVEC_BUFFER c-src/emacs/src/lisp.h 788 -PVEC_CHAR_TABLE c-src/emacs/src/lisp.h 796 -PVEC_COMPILED c-src/emacs/src/lisp.h 795 -PVEC_FONT c-src/emacs/src/lisp.h 798 -PVEC_FRAME c-src/emacs/src/lisp.h 785 -PVEC_FREE c-src/emacs/src/lisp.h 783 -PVEC_HASH_TABLE c-src/emacs/src/lisp.h 789 -PVEC_NORMAL_VECTOR c-src/emacs/src/lisp.h 782 -PVEC_OTHER c-src/emacs/src/lisp.h 793 -PVEC_PROCESS c-src/emacs/src/lisp.h 784 -PVEC_SUB_CHAR_TABLE c-src/emacs/src/lisp.h 797 -PVEC_SUBR c-src/emacs/src/lisp.h 792 -PVEC_TERMINAL c-src/emacs/src/lisp.h 790 pvec_type c-src/emacs/src/lisp.h 780 -PVEC_TYPE_MASK c-src/emacs/src/lisp.h 819 -PVEC_WINDOW_CONFIGURATION c-src/emacs/src/lisp.h 791 -PVEC_WINDOW c-src/emacs/src/lisp.h 786 -p.x forth-src/test-forth.fth /^ 1 CELLS +FIELD p.x \\ A single cell filed name/ pxref tex-src/texinfo.tex /^\\def\\pxref#1{see \\xrefX[#1,,,,,,,]}$/ -p.y forth-src/test-forth.fth /^ 1 CELLS +FIELD p.y \\ A single cell field name/ -Python_functions c-src/etags.c /^Python_functions (FILE *inf)$/ -Python_help c-src/etags.c 660 -Python_suffixes c-src/etags.c 658 -PYTSRC make-src/Makefile /^PYTSRC=server.py$/ quantizing html-src/algrthms.html /^Quantizing the Received$/ questo ../c/c.web 34 quiettest make-src/Makefile /^quiettest:$/ quit_char c-src/emacs/src/keyboard.c 192 -QUIT c-src/emacs/src/lisp.h 3101 -QUITP c-src/emacs/src/lisp.h 3112 quit_throw_to_read_char c-src/emacs/src/keyboard.c /^quit_throw_to_read_char (bool from_signal)$/ quotation tex-src/texinfo.tex /^\\def\\quotation{%$/ -/quoteleft ps-src/rfc1245.ps /^\/quoteleft \/quoteright \/.notdef \/.notdef \/ydieresi/ -qux1 ruby-src/test1.ru /^ :qux1)$/ qux ruby-src/test1.ru /^ alias_method :qux, :tee, attr_accessor(:bogus)/ +qux1 ruby-src/test1.ru /^ :qux1)$/ qux= ruby-src/test1.ru /^ def qux=(tee)$/ +r tex-src/texinfo.tex /^\\def\\r##1{\\realbackslash r {##1}}$/ +r tex-src/texinfo.tex /^\\def\\r##1{\\realbackslash r {##1}}%$/ +r tex-src/texinfo.tex /^\\def\\r#1{{\\rm #1}} % roman font$/ +r tex-src/texinfo.tex /^\\let\\r=\\indexdummyfont$/ r0 c-src/sysdep.h 54 r1 c-src/sysdep.h 55 r_alloc c-src/emacs/src/lisp.h /^extern void *r_alloc (void **, size_t) ATTRIBUTE_A/ -Range cp-src/Range.h 35 -Range cp-src/Range.h /^ Range (const Range& r)$/ -Range cp-src/Range.h /^ Range (double b, double l)$/ -Range cp-src/Range.h /^ Range (double b, double l, double i)$/ -Range cp-src/Range.h /^ Range (void)$/ -RANGED_INTEGERP c-src/emacs/src/lisp.h /^RANGED_INTEGERP (intmax_t lo, Lisp_Object x, intma/ -range_exp_list y-src/parse.y 273 range_exp y-src/parse.y 269 +range_exp_list y-src/parse.y 273 +raw_keybuf c-src/emacs/src/keyboard.c 116 +raw_keybuf_count c-src/emacs/src/keyboard.c 117 rawbackslash tex-src/texinfo.tex /^\\let\\rawbackslash=\\relax%$/ -rawbackslashxx tex-src/texinfo.tex /^\\def\\rawbackslashxx{\\indexbackslash}%$/ rawbackslashxx tex-src/texinfo.tex /^\\def\\rawbackslashxx{\\indexbackslash}% \\indexbacksl/ -raw_keybuf_count c-src/emacs/src/keyboard.c 117 -raw_keybuf c-src/emacs/src/keyboard.c 116 +rawbackslashxx tex-src/texinfo.tex /^\\def\\rawbackslashxx{\\indexbackslash}%$/ rbrb tex-src/texinfo.tex /^\\def\\lbrb{{\\bf\\char`\\[}} \\def\\rbrb{{\\bf\\char`\\]}}$/ rbtp c.c 240 -RCSid objc-src/PackInsp.m 30 +re_iswctype c-src/emacs/src/regex.h 602 +re_nsub c-src/emacs/src/regex.h 364 +re_pattern_buffer c-src/emacs/src/regex.h 335 +re_pattern_buffer c-src/h.h 119 +re_registers c-src/emacs/src/regex.h 428 +re_wchar_t c-src/emacs/src/regex.h 600 +re_wchar_t c-src/emacs/src/regex.h 623 +re_wctype c-src/emacs/src/regex.h 601 +re_wctype_t c-src/emacs/src/regex.h 599 +re_wctype_t c-src/emacs/src/regex.h 618 +re_wctype_to_bit c-src/emacs/src/regex.h /^# define re_wctype_to_bit(cc) 0$/ +read cp-src/conway.hpp /^ char read() { return alive; }$/ +read php-src/lce_functions.php /^ function read()$/ +read-key-sequence c-src/emacs/src/keyboard.c /^DEFUN ("read-key-sequence", Fread_key_sequence, Sr/ +read-key-sequence-vector c-src/emacs/src/keyboard.c /^DEFUN ("read-key-sequence-vector", Fread_key_seque/ read1 ruby-src/test1.ru /^ attr_reader :read1 , :read2; attr_writer :writ/ read2 ruby-src/test1.ru /^ attr_reader :read1 , :read2; attr_writer :writ/ -readable_events c-src/emacs/src/keyboard.c /^readable_events (int flags)$/ -READABLE_EVENTS_DO_TIMERS_NOW c-src/emacs/src/keyboard.c 346 -READABLE_EVENTS_FILTER_EVENTS c-src/emacs/src/keyboard.c 347 -READABLE_EVENTS_IGNORE_SQUEEZABLES c-src/emacs/src/keyboard.c 348 -readauxfile tex-src/texinfo.tex /^\\def\\readauxfile{%$/ read_char c-src/emacs/src/keyboard.c /^read_char (int commandflag, Lisp_Object map,$/ read_char_help_form_unwind c-src/emacs/src/keyboard.c /^read_char_help_form_unwind (void)$/ read_char_minibuf_menu_prompt c-src/emacs/src/keyboard.c /^read_char_minibuf_menu_prompt (int commandflag,$/ read_char_x_menu_prompt c-src/emacs/src/keyboard.c /^read_char_x_menu_prompt (Lisp_Object map,$/ -read cp-src/conway.hpp /^ char read() { return alive; }$/ read_decoded_event_from_main_queue c-src/emacs/src/keyboard.c /^read_decoded_event_from_main_queue (struct timespe/ read_event_from_main_queue c-src/emacs/src/keyboard.c /^read_event_from_main_queue (struct timespec *end_t/ -read_key_sequence_cmd c-src/emacs/src/keyboard.c 232 -read-key-sequence c-src/emacs/src/keyboard.c /^DEFUN ("read-key-sequence", Fread_key_sequence, Sr/ read_key_sequence c-src/emacs/src/keyboard.c /^read_key_sequence (Lisp_Object *keybuf, int bufsiz/ +read_key_sequence_cmd c-src/emacs/src/keyboard.c 232 read_key_sequence_remapped c-src/emacs/src/keyboard.c 233 -read-key-sequence-vector c-src/emacs/src/keyboard.c /^DEFUN ("read-key-sequence-vector", Fread_key_seque/ read_key_sequence_vs c-src/emacs/src/keyboard.c /^read_key_sequence_vs (Lisp_Object prompt, Lisp_Obj/ -readline c-src/etags.c /^readline (linebuffer *lbp, FILE *stream)$/ -readline_internal c-src/etags.c /^readline_internal (linebuffer *lbp, register FILE / -Read_Lock/p ada-src/2ataspri.adb /^ procedure Read_Lock (L : in out Lock; Ceiling_V/ -Read_Lock/p ada-src/2ataspri.ads /^ procedure Read_Lock (L : in out Lock; Ceiling_V/ read_menu_command c-src/emacs/src/keyboard.c /^read_menu_command (void)$/ -read php-src/lce_functions.php /^ function read()$/ read_toc perl-src/htlmify-cystic /^sub read_toc ()$/ -ReadVacation cp-src/functions.cpp /^void ReadVacation ( char *filename ) {$/ +readable_events c-src/emacs/src/keyboard.c /^readable_events (int flags)$/ +readauxfile tex-src/texinfo.tex /^\\def\\readauxfile{%$/ +readline c-src/etags.c /^readline (linebuffer *lbp, FILE *stream)$/ +readline_internal c-src/etags.c /^readline_internal (linebuffer *lbp, register FILE / +realloc c-src/emacs/src/gmalloc.c /^realloc (void *ptr, size_t size)$/ realloc c-src/emacs/src/gmalloc.c 1720 realloc c-src/emacs/src/gmalloc.c 65 realloc c-src/emacs/src/gmalloc.c 69 -_realloc c-src/emacs/src/gmalloc.c /^_realloc (void *ptr, size_t size)$/ -realloc c-src/emacs/src/gmalloc.c /^realloc (void *ptr, size_t size)$/ reallochook c-src/emacs/src/gmalloc.c /^reallochook (void *ptr, size_t size)$/ -_realloc_internal c-src/emacs/src/gmalloc.c /^_realloc_internal (void *ptr, size_t size)$/ -_realloc_internal_nolock c-src/emacs/src/gmalloc.c /^_realloc_internal_nolock (void *ptr, size_t size)$/ -RE_BACKSLASH_ESCAPE_IN_LISTS c-src/emacs/src/regex.h 47 -RE_BK_PLUS_QM c-src/emacs/src/regex.h 52 -RECC_ALNUM c-src/emacs/src/regex.h 610 -RECC_ALPHA c-src/emacs/src/regex.h 610 -RECC_ASCII c-src/emacs/src/regex.h 617 -RECC_BLANK c-src/emacs/src/regex.h 615 -RECC_CNTRL c-src/emacs/src/regex.h 613 -RECC_DIGIT c-src/emacs/src/regex.h 614 -RECC_ERROR c-src/emacs/src/regex.h 609 -RECC_GRAPH c-src/emacs/src/regex.h 611 -RECC_LOWER c-src/emacs/src/regex.h 612 -RECC_MULTIBYTE c-src/emacs/src/regex.h 616 -RECC_NONASCII c-src/emacs/src/regex.h 616 -RECC_PRINT c-src/emacs/src/regex.h 611 -RECC_PUNCT c-src/emacs/src/regex.h 613 -RECC_SPACE c-src/emacs/src/regex.h 615 -RECC_UNIBYTE c-src/emacs/src/regex.h 617 -RECC_UPPER c-src/emacs/src/regex.h 612 -RECC_WORD c-src/emacs/src/regex.h 610 -RECC_XDIGIT c-src/emacs/src/regex.h 614 -recent_keys c-src/emacs/src/keyboard.c 100 recent-keys c-src/emacs/src/keyboard.c /^DEFUN ("recent-keys", Frecent_keys, Srecent_keys, / -recent_keys_index c-src/emacs/src/keyboard.c 94 -RE_CHAR_CLASSES c-src/emacs/src/regex.h 58 -RE_CONTEXT_INDEP_ANCHORS c-src/emacs/src/regex.h 72 -RE_CONTEXT_INDEP_OPS c-src/emacs/src/regex.h 80 -RE_CONTEXT_INVALID_OPS c-src/emacs/src/regex.h 84 +recent_keys c-src/emacs/src/keyboard.c 100 +recent_keys_index c-src/emacs/src/keyboard.c 94 record_asynch_buffer_change c-src/emacs/src/keyboard.c /^record_asynch_buffer_change (void)$/ record_auto_save c-src/emacs/src/keyboard.c /^record_auto_save (void)$/ record_char c-src/emacs/src/keyboard.c /^record_char (Lisp_Object c)$/ @@ -3298,176 +3867,71 @@ record_menu_key c-src/emacs/src/keyboard.c /^record_menu_key (Lisp_Object c)$/ record_single_kboard_state c-src/emacs/src/keyboard.c /^record_single_kboard_state ()$/ record_xmalloc c-src/emacs/src/lisp.h /^extern void *record_xmalloc (size_t) ATTRIBUTE_ALL/ recover_top_level_message c-src/emacs/src/keyboard.c 138 -Rectangle.getPos lua-src/test.lua /^function Rectangle.getPos ()$/ recursion-depth c-src/emacs/src/keyboard.c /^DEFUN ("recursion-depth", Frecursion_depth, Srecur/ -recursive_edit_1 c-src/emacs/src/keyboard.c /^recursive_edit_1 (void)$/ recursive-edit c-src/emacs/src/keyboard.c /^DEFUN ("recursive-edit", Frecursive_edit, Srecursi/ +recursive_edit_1 c-src/emacs/src/keyboard.c /^recursive_edit_1 (void)$/ recursive_edit_unwind c-src/emacs/src/keyboard.c /^recursive_edit_unwind (Lisp_Object buffer)$/ -RED cp-src/screen.hpp 16 -RE_DEBUG c-src/emacs/src/regex.h 161 redirect c-src/emacs/src/lisp.h 663 -RE_DOT_NEWLINE c-src/emacs/src/regex.h 88 -RE_DOT_NOT_NULL c-src/emacs/src/regex.h 92 reduce prol-src/natded.prolog /^reduce((X^M)@N,L):- % beta reduction$/ reduce_subterm prol-src/natded.prolog /^reduce_subterm(M,M2):-$/ -RE_DUP_MAX c-src/emacs/src/regex.h 253 -RE_DUP_MAX c-src/emacs/src/regex.h 256 -/ReEncode ps-src/rfc1245.ps /^\/ReEncode { $/ +ref tex-src/texinfo.tex /^\\def\\ref#1{\\xrefX[#1,,,,,,,]}$/ refill tex-src/texinfo.tex /^\\let\\refill=\\relax$/ refreshPort pyt-src/server.py /^ def refreshPort(self):$/ -RE_FRUGAL c-src/emacs/src/regex.h 147 -ref tex-src/texinfo.tex /^\\def\\ref#1{\\xrefX[#1,,,,,,,]}$/ refx tex-src/texinfo.tex /^\\def\\refx#1#2{%$/ -REG_BADBR c-src/emacs/src/regex.h 313 -REG_BADPAT c-src/emacs/src/regex.h 305 -REG_BADRPT c-src/emacs/src/regex.h 316 -REG_EBRACE c-src/emacs/src/regex.h 312 -REG_EBRACK c-src/emacs/src/regex.h 310 -REG_ECOLLATE c-src/emacs/src/regex.h 306 -REG_ECTYPE c-src/emacs/src/regex.h 307 -REG_EEND c-src/emacs/src/regex.h 319 -REG_EESCAPE c-src/emacs/src/regex.h 308 -REG_ENOSYS c.c 279 -REG_ENOSYS c-src/emacs/src/regex.h 297 -REG_EPAREN c-src/emacs/src/regex.h 311 -REG_ERANGE c-src/emacs/src/regex.h 314 -REG_ERANGEX c-src/emacs/src/regex.h 322 -REG_ERPAREN c-src/emacs/src/regex.h 321 -reg_errcode_t c.c 279 reg_errcode_t c-src/emacs/src/regex.h 323 -REG_ESIZE c-src/emacs/src/regex.h 320 -REG_ESPACE c-src/emacs/src/regex.h 315 -REG_ESUBREG c-src/emacs/src/regex.h 309 +reg_errcode_t c.c 279 +reg_syntax_t c-src/emacs/src/regex.h 43 regex c-src/etags.c 219 -regexfile make-src/Makefile /^regexfile: Makefile$/ -_REGEX_H c-src/emacs/src/regex.h 21 -REGEX make-src/Makefile /^REGEX=\/[ \\t]*DEFVAR_[A-Z_ \\t\\n(]+"\\([^"]+\\)"\/$/ -REGEXOBJS make-src/Makefile /^REGEXOBJS=regex.o$/ regex.o make-src/Makefile /^regex.o: emacs\/src\/regex.c$/ +regex_t c-src/emacs/src/regex.h 416 +regex_tag_multiline c-src/etags.c /^regex_tag_multiline (void)$/ +regexfile make-src/Makefile /^regexfile: Makefile$/ regexp c-src/etags.c 256 regexp c-src/etags.c 268 -regex_tag_multiline c-src/etags.c /^regex_tag_multiline (void)$/ -regex_t c-src/emacs/src/regex.h 416 -REG_EXTENDED c-src/emacs/src/regex.h 263 -REG_ICASE c-src/emacs/src/regex.h 267 registerAction objcpp-src/SimpleCalc.M /^- registerAction:(SEL)action$/ register_heapinfo c-src/emacs/src/gmalloc.c /^register_heapinfo (void)$/ regmatch_t c-src/emacs/src/regex.h 451 -REG_NEWLINE c-src/emacs/src/regex.h 272 -REG_NOERROR c-src/emacs/src/regex.h 300 -REG_NOMATCH c-src/emacs/src/regex.h 301 -REG_NOSUB c-src/emacs/src/regex.h 276 -REG_NOTBOL c-src/emacs/src/regex.h 286 -REG_NOTEOL c-src/emacs/src/regex.h 289 regoff_t c-src/emacs/src/regex.h 423 -regs_allocated c-src/emacs/src/regex.h 379 -regs cp-src/screen.cpp 16 regs c-src/etags.c 263 +regs cp-src/screen.cpp 16 +regs_allocated c-src/emacs/src/regex.h 379 regset c-src/h.h 31 -REGS_FIXED c-src/emacs/src/regex.h 378 -REGS_REALLOCATE c-src/emacs/src/regex.h 377 -REGS_UNALLOCATED c-src/emacs/src/regex.h 376 -reg_syntax_t c-src/emacs/src/regex.h 43 regular_top_level_message c-src/emacs/src/keyboard.c 143 rehash_size c-src/emacs/src/lisp.h 1835 rehash_threshold c-src/emacs/src/lisp.h 1839 -RE_HAT_LISTS_NOT_NEWLINE c-src/emacs/src/regex.h 96 -RE_INTERVALS c-src/emacs/src/regex.h 101 -re_iswctype c-src/emacs/src/regex.h 602 relative_filename c-src/etags.c /^relative_filename (char *file, char *dir)$/ release distrib make-src/Makefile /^release distrib: web$/ -RELEASELIST make-src/Makefile /^RELEASELIST=pot@gnu.org xemacs-review@xemacs.org j/ -ReleaseNameString pas-src/common.pas /^procedure ReleaseNameString; (* (var NSP: NameStri/ -RE_LIMITED_OPS c-src/emacs/src/regex.h 105 removeexp prol-src/natded.prolog /^removeexp(E,E,'NIL'):-!.$/ -RemoveLayer lua-src/allegro.lua /^function RemoveLayer ()$/ -RemoveUnderlineControl pas-src/common.pas /^function RemoveUnderlineControl; (*($/ -RE_NEWLINE_ALT c-src/emacs/src/regex.h 109 -RE_NO_BK_BRACES c-src/emacs/src/regex.h 114 -RE_NO_BK_PARENS c-src/emacs/src/regex.h 118 -RE_NO_BK_REFS c-src/emacs/src/regex.h 122 -RE_NO_BK_VBAR c-src/emacs/src/regex.h 126 -RE_NO_EMPTY_RANGES c-src/emacs/src/regex.h 132 -RE_NO_GNU_OPS c-src/emacs/src/regex.h 144 -RE_NO_NEWLINE_ANCHOR c-src/emacs/src/regex.h 153 -RE_NO_POSIX_BACKTRACKING c-src/emacs/src/regex.h 140 -RE_NREGS c-src/emacs/src/regex.h 440 -re_nsub c-src/emacs/src/regex.h 364 reorder_modifiers c-src/emacs/src/keyboard.c /^reorder_modifiers (Lisp_Object symbol)$/ -re_pattern_buffer c-src/emacs/src/regex.h 335 -re_pattern_buffer c-src/h.h 119 -ReprOfChar pas-src/common.pas /^function ReprOfChar; (*( ch : char) : NameString;*/ -__repr__ pyt-src/server.py /^ def __repr__(self):$/ request c.c /^request request (a, b)$/ requeued_events_pending_p c-src/emacs/src/keyboard.c /^requeued_events_pending_p (void)$/ -required_argument c-src/getopt.h 90 require merc-src/accumulator.m /^:- import_module require.$/ -re_registers c-src/emacs/src/regex.h 428 -resetmathfonts tex-src/texinfo.tex /^\\def\\resetmathfonts{%$/ +required_argument c-src/getopt.h 90 reset-this-command-lengths c-src/emacs/src/keyboard.c /^DEFUN ("reset-this-command-lengths", Freset_this_c/ -RE_SHY_GROUPS c-src/emacs/src/regex.h 150 +resetmathfonts tex-src/texinfo.tex /^\\def\\resetmathfonts{%$/ +rest tex-src/texinfo.tex /^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/ restore_getcjmp c-src/emacs/src/keyboard.c /^restore_getcjmp (sys_jmp_buf temp)$/ restore_kboard_configuration c-src/emacs/src/keyboard.c /^restore_kboard_configuration (int was_locked)$/ -/restorematrix ps-src/rfc1245.ps /^\/restorematrix {$/ -_Restrict_arr_ c-src/emacs/src/regex.h 555 -_Restrict_arr_ c-src/emacs/src/regex.h 557 -_Restrict_ c-src/emacs/src/regex.h 540 -_Restrict_ c-src/emacs/src/regex.h 542 -_Restrict_ c-src/emacs/src/regex.h 544 -rest tex-src/texinfo.tex /^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/ result tex-src/texinfo.tex /^\\def\\result{\\leavevmode\\raise.15ex\\hbox to 1em{\\hf/ result tex-src/texinfo.tex /^\\def\\result{\\realbackslash result}$/ -RESUME_POLLING c-src/emacs/src/keyboard.c 2170 -RE_SYNTAX_AWK c-src/emacs/src/regex.h 186 -RE_SYNTAX_ED c-src/emacs/src/regex.h 216 -RE_SYNTAX_EGREP c-src/emacs/src/regex.h 206 -RE_SYNTAX_EMACS c-src/emacs/src/regex.h 183 -RE_SYNTAX_GNU_AWK c-src/emacs/src/regex.h 193 -RE_SYNTAX_GREP c-src/emacs/src/regex.h 201 -RE_SYNTAX_POSIX_AWK c-src/emacs/src/regex.h 197 -RE_SYNTAX_POSIX_BASIC c-src/emacs/src/regex.h 225 -_RE_SYNTAX_POSIX_COMMON c-src/emacs/src/regex.h 221 -RE_SYNTAX_POSIX_EGREP c-src/emacs/src/regex.h 212 -RE_SYNTAX_POSIX_EXTENDED c-src/emacs/src/regex.h 234 -RE_SYNTAX_POSIX_MINIMAL_BASIC c-src/emacs/src/regex.h 231 -RE_SYNTAX_POSIX_MINIMAL_EXTENDED c-src/emacs/src/regex.h 242 -RE_SYNTAX_SED c-src/emacs/src/regex.h 218 -RE_TRANSLATE_TYPE c-src/emacs/src/regex.h 332 return_to_command_loop c-src/emacs/src/keyboard.c 135 -RETURN_UNGCPRO c-src/emacs/src/lisp.h /^#define RETURN_UNGCPRO(expr) \\$/ -RE_UNMATCHED_RIGHT_PAREN_ORD c-src/emacs/src/regex.h 136 reverse prol-src/natded.prolog /^reverse([],Ws,Ws).$/ revert objc-src/PackInsp.m /^-revert:sender$/ -re_wchar_t c-src/emacs/src/regex.h 600 -re_wchar_t c-src/emacs/src/regex.h 623 -re_wctype c-src/emacs/src/regex.h 601 -re_wctype_t c-src/emacs/src/regex.h 599 -re_wctype_t c-src/emacs/src/regex.h 618 -re_wctype_to_bit c-src/emacs/src/regex.h /^# define re_wctype_to_bit(cc) 0$/ -/RF ps-src/rfc1245.ps /^\/RF { $/ right c-src/etags.c 216 right_shift y-src/cccp.y /^right_shift (a, b)$/ ring1 c.c 241 ring2 c.c 242 +rm tex-src/texinfo.tex /^ \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/ +rm tex-src/texinfo.tex /^\\def\\rm{\\realbackslash rm }%$/ rm_eo c-src/emacs/src/regex.h 450 rm_so c-src/emacs/src/regex.h 449 -rm tex-src/texinfo.tex /^\\def\\rm{\\realbackslash rm }%$/ -rm tex-src/texinfo.tex /^ \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/ rng_base cp-src/Range.h 79 rng_inc cp-src/Range.h 81 rng_limit cp-src/Range.h 80 rng_nelem cp-src/Range.h 83 rosso cp-src/c.C 40 -/R ps-src/rfc1245.ps /^\/R { $/ -/RR ps-src/rfc1245.ps /^\/RR { $/ -RSH y-src/cccp.c 17 rsyncfromfly make-src/Makefile /^rsyncfromfly:$/ rsynctofly make-src/Makefile /^rsynctofly:$/ -RTE/s ada-src/2ataspri.adb /^ package RTE renames Interfaces.C.POSIX_RTE;$/ -r tex-src/texinfo.tex /^\\def\\r##1{\\realbackslash r {##1}}%$/ -r tex-src/texinfo.tex /^\\def\\r##1{\\realbackslash r {##1}}$/ -r tex-src/texinfo.tex /^\\def\\r#1{{\\rm #1}} % roman font$/ -r tex-src/texinfo.tex /^\\let\\r=\\indexdummyfont$/ rtint c-src/h.h 60 rtint c-src/h.h 68 rtstr c-src/h.h 61 @@ -3477,222 +3941,140 @@ rtunion_def c-src/h.h 64 rtx c-src/h.h 62 rtxnp c-src/h.h 71 rtxp c-src/h.h 70 -` ruby-src/test.rb /^ def `(command)$/ -+ ruby-src/test.rb /^ def +(y)$/ -<< ruby-src/test.rb /^ def <<(y)$/ -<= ruby-src/test.rb /^ def <=(y)$/ -<=> ruby-src/test.rb /^ def <=>(y)$/ -== ruby-src/test.rb /^ def ==(y)$/ -=== ruby-src/test.rb /^ def ===(y)$/ -[] ruby-src/test.rb /^ def [](y)$/ -[]= ruby-src/test.rb /^ def []=(y, val)$/ -RUN make-src/Makefile /^RUN=$/ -RUN make-src/Makefile /^RUN=time --quiet --format '%U + %S: %E'$/ -RXINCLUDE make-src/Makefile /^RXINCLUDE=-Iemacs\/src$/ +s c-src/emacs/src/lisp.h 4672 +s c-src/emacs/src/lisp.h 4678 s1 cp-src/c.C 32 -/s1 ps-src/rfc1245.ps /^\/s1 1 string def$/ s2 cp-src/c.C 35 -SAFE_ALLOCA c-src/emacs/src/lisp.h /^#define SAFE_ALLOCA(size) ((size) <= sa_avail \\/ -SAFE_ALLOCA_LISP c-src/emacs/src/lisp.h /^#define SAFE_ALLOCA_LISP(buf, nelt) \\$/ -SAFE_ALLOCA_STRING c-src/emacs/src/lisp.h /^#define SAFE_ALLOCA_STRING(ptr, string) \\$/ -SAFE_FREE c-src/emacs/src/lisp.h /^#define SAFE_FREE() \\$/ -SAFE_NALLOCA c-src/emacs/src/lisp.h /^#define SAFE_NALLOCA(buf, multiplier, nitems) \\/ safe_run_hook_funcall c-src/emacs/src/keyboard.c /^safe_run_hook_funcall (ptrdiff_t nargs, Lisp_Objec/ -safe_run_hooks_1 c-src/emacs/src/keyboard.c /^safe_run_hooks_1 (ptrdiff_t nargs, Lisp_Object *ar/ safe_run_hooks c-src/emacs/src/keyboard.c /^safe_run_hooks (Lisp_Object hook)$/ +safe_run_hooks_1 c-src/emacs/src/keyboard.c /^safe_run_hooks_1 (ptrdiff_t nargs, Lisp_Object *ar/ safe_run_hooks_error c-src/emacs/src/keyboard.c /^safe_run_hooks_error (Lisp_Object error, ptrdiff_t/ -Sample tex-src/gzip.texi /^@node Sample, Invoking gzip, Overview, Top$/ -samp tex-src/texinfo.tex /^\\def\\samp##1{\\realbackslash samp {##1}}%$/ -samp tex-src/texinfo.tex /^\\def\\samp##1{\\realbackslash samp {##1}}$/ samp tex-src/texinfo.tex /^\\def\\samp #1{`\\tclose{#1}'\\null}$/ +samp tex-src/texinfo.tex /^\\def\\samp##1{\\realbackslash samp {##1}}$/ +samp tex-src/texinfo.tex /^\\def\\samp##1{\\realbackslash samp {##1}}%$/ samp tex-src/texinfo.tex /^\\let\\samp=\\indexdummyfont$/ -/sangle ps-src/rfc1245.ps /^\/sangle 1 0 dmatrix defaultmatrix dtransform exch / -SAVE_FUNCPOINTER c-src/emacs/src/lisp.h 2049 +save pyt-src/server.py /^ def save(self):$/ save_getcjmp c-src/emacs/src/keyboard.c /^save_getcjmp (sys_jmp_buf temp)$/ -SAVE_INTEGER c-src/emacs/src/lisp.h 2048 -/savematrix ps-src/rfc1245.ps /^\/savematrix {$/ +save_type c-src/emacs/src/lisp.h /^save_type (struct Lisp_Save_Value *v, int n)$/ savenstr c-src/etags.c /^savenstr (const char *cp, int len)$/ -SAVE_OBJECT c-src/emacs/src/lisp.h 2051 -SAVE_POINTER c-src/emacs/src/lisp.h 2050 -save pyt-src/server.py /^ def save(self):$/ -SAVE_SLOT_BITS c-src/emacs/src/lisp.h 2055 savestr c-src/etags.c /^savestr (const char *cp)$/ -SAVE_TYPE_BITS c-src/emacs/src/lisp.h 2062 -SAVE_TYPE_BITS c-src/emacs/src/lisp.h 2114 -SAVE_TYPE_BITS c-src/emacs/src/lisp.h 2123 -save_type c-src/emacs/src/lisp.h /^save_type (struct Lisp_Save_Value *v, int n)$/ -SAVE_TYPE_FUNCPTR_PTR_OBJ c-src/emacs/src/lisp.h 2076 -SAVE_TYPE_INT_INT c-src/emacs/src/lisp.h 2066 -SAVE_TYPE_INT_INT_INT c-src/emacs/src/lisp.h 2067 -SAVE_TYPE_MEMORY c-src/emacs/src/lisp.h 2080 -SAVE_TYPE_OBJ_OBJ c-src/emacs/src/lisp.h 2069 -SAVE_TYPE_OBJ_OBJ_OBJ c-src/emacs/src/lisp.h 2070 -SAVE_TYPE_OBJ_OBJ_OBJ_OBJ c-src/emacs/src/lisp.h 2071 -SAVE_TYPE_PTR_INT c-src/emacs/src/lisp.h 2073 -SAVE_TYPE_PTR_OBJ c-src/emacs/src/lisp.h 2074 -SAVE_TYPE_PTR_PTR c-src/emacs/src/lisp.h 2075 -SAVE_UNUSED c-src/emacs/src/lisp.h 2047 -SAVE_VALUEP c-src/emacs/src/lisp.h /^SAVE_VALUEP (Lisp_Object x)$/ -SAVE_VALUE_SLOTS c-src/emacs/src/lisp.h 2058 say go-src/test.go /^func say(msg string) {$/ -__sbrk c-src/emacs/src/gmalloc.c 1516 -SBYTES c-src/emacs/src/lisp.h /^SBYTES (Lisp_Object string)$/ +sc tex-src/texinfo.tex /^\\def\\sc#1{{\\smallcaps#1}} % smallcaps font$/ +sc tex-src/texinfo.tex /^\\let\\sc=\\indexdummyfont$/ scan_separators c-src/etags.c /^scan_separators (char *name)$/ -S c.c 156 -SCHARS c-src/emacs/src/lisp.h /^SCHARS (Lisp_Object string)$/ -Scheme_functions c-src/etags.c /^Scheme_functions (FILE *inf)$/ -Scheme_help c-src/etags.c 667 -Scheme_suffixes c-src/etags.c 665 scolonseen c-src/etags.c 2447 scratch c-src/sysdep.h 56 -SCREEN_FP cp-src/screen.hpp /^#define SCREEN_FP(x,y) \\$/ -SCREEN_START cp-src/screen.hpp 33 scroll_bar_parts c-src/emacs/src/keyboard.c 5189 -s c-src/emacs/src/lisp.h 4672 -s c-src/emacs/src/lisp.h 4678 -sc tex-src/texinfo.tex /^\\def\\sc#1{{\\smallcaps#1}} % smallcaps font$/ -sc tex-src/texinfo.tex /^\\let\\sc=\\indexdummyfont$/ -SDATA c-src/emacs/src/lisp.h /^SDATA (Lisp_Object string)$/ -SDTrefGetInteger pas-src/common.pas /^function SDTrefGetInteger : integer;$/ -SDTrefIsEnd pas-src/common.pas /^function SDTrefIsEnd : Boolean;$/ -SDTrefRecToString pas-src/common.pas /^procedure SDTrefRecToString (* ($/ -SDTrefSkipSpaces pas-src/common.pas /^procedure SDTrefSkipSpaces;$/ -SDTrefStringToRec pas-src/common.pas /^procedure SDTrefStringToRec (* ($/ +sec tex-src/texinfo.tex /^\\global\\let\\section = \\appendixsec$/ seccheck tex-src/texinfo.tex /^\\def\\seccheck#1{\\if \\pageno<0 %$/ -secentryfonts tex-src/texinfo.tex /^\\def\\secentryfonts{\\textfonts}$/ secentry tex-src/texinfo.tex /^ \\def\\secentry ##1##2##3##4{}$/ secentry tex-src/texinfo.tex /^\\def\\secentry#1#2#3#4{\\dosecentry{#2.#3\\labelspace/ +secentryfonts tex-src/texinfo.tex /^\\def\\secentryfonts{\\textfonts}$/ secfonts tex-src/texinfo.tex /^\\def\\secfonts{%$/ +secheading tex-src/texinfo.tex /^\\def\\secheading #1#2#3{\\secheadingi {#2.#3\\enspace/ secheadingbreak tex-src/texinfo.tex /^\\def\\secheadingbreak{\\dobreak \\secheadingskip {-10/ secheadingi tex-src/texinfo.tex /^\\def\\secheadingi #1{{\\advance \\secheadingskip by \\/ -secheading tex-src/texinfo.tex /^\\def\\secheading #1#2#3{\\secheadingi {#2.#3\\enspace/ secondary tex-src/texinfo.tex /^\\def\\secondary #1#2{$/ -sec tex-src/texinfo.tex /^\\global\\let\\section = \\appendixsec$/ -section_href perl-src/htlmify-cystic /^sub section_href ($)$/ -section_name perl-src/htlmify-cystic 12 -section_name perl-src/htlmify-cystic /^sub section_name ($)$/ section perl-src/htlmify-cystic 25 section tex-src/texinfo.tex /^\\global\\let\\section = \\appendixsec$/ section tex-src/texinfo.tex /^\\global\\let\\section = \\numberedsec$/ section tex-src/texinfo.tex /^\\global\\let\\section = \\unnumberedsec$/ section tex-src/texinfo.tex /^\\let\\section=\\relax$/ +section_href perl-src/htlmify-cystic /^sub section_href ($)$/ +section_name perl-src/htlmify-cystic /^sub section_name ($)$/ +section_name perl-src/htlmify-cystic 12 section_toc perl-src/htlmify-cystic 15 +section_url perl-src/htlmify-cystic /^sub section_url ()$/ section_url_base perl-src/htlmify-cystic /^sub section_url_base ()$/ section_url_name perl-src/htlmify-cystic /^sub section_url_name ()$/ -section_url perl-src/htlmify-cystic /^sub section_url ()$/ -sectionzzz tex-src/texinfo.tex /^\\outer\\def\\appendixsec{\\parsearg\\appendixsectionzz/ sectionzzz tex-src/texinfo.tex /^\\outer\\def\\appendixsection{\\parsearg\\appendixsecti/ +sectionzzz tex-src/texinfo.tex /^\\outer\\def\\appendixsec{\\parsearg\\appendixsectionzz/ seczzz tex-src/texinfo.tex /^\\def\\infoappendixsec{\\parsearg\\appendixseczzz}$/ seczzz tex-src/texinfo.tex /^\\def\\seczzz #1{\\seccheck{section}%$/ -select_last prol-src/natded.prolog /^select_last([X],X,[]).$/ -SelectLayer lua-src/allegro.lua /^function SelectLayer (layer)$/ select prol-src/natded.prolog /^select(X,[X|Xs],Xs).$/ select-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun select-tags-table ()$/ select-tags-table-mode el-src/emacs/lisp/progmodes/etags.el /^(define-derived-mode select-tags-table-mode specia/ select-tags-table-mode-map el-src/emacs/lisp/progmodes/etags.el /^(defvar select-tags-table-mode-map ; Doc string?$/ select-tags-table-quit el-src/emacs/lisp/progmodes/etags.el /^(defun select-tags-table-quit ()$/ select-tags-table-select el-src/emacs/lisp/progmodes/etags.el /^(defun select-tags-table-select (button)$/ -Self/f ada-src/2ataspri.adb /^ function Self return TCB_Ptr is$/ -Self/f ada-src/2ataspri.ads /^ function Self return TCB_Ptr;$/ -send objc-src/Subprocess.m /^- send:(const char *)string$/ +select_last prol-src/natded.prolog /^select_last([X],X,[]).$/ send objc-src/Subprocess.m /^- send:(const char *)string withNewline:(BOOL)want/ +send objc-src/Subprocess.m /^- send:(const char *)string$/ separator_names c-src/emacs/src/keyboard.c 7372 sepspaces tex-src/texinfo.tex /^\\gdef\\sepspaces{\\def {\\ }}}$/ serializeToVars php-src/lce_functions.php /^ function serializeToVars($prefix)$/ -ServerEdit pyt-src/server.py /^class ServerEdit(Frame):$/ -Server pyt-src/server.py /^class Server:$/ +set cp-src/conway.hpp /^ void set(void) { alive = 1; }$/ +set merc-src/accumulator.m /^:- import_module set.$/ +set tex-src/texinfo.tex /^\\def\\set{\\parsearg\\setxxx}$/ +set-input-interrupt-mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-interrupt-mode", Fset_input_inte/ +set-input-meta-mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-meta-mode", Fset_input_meta_mode/ +set-input-mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-mode", Fset_input_mode, Sset_inp/ +set-output-flow-control c-src/emacs/src/keyboard.c /^DEFUN ("set-output-flow-control", Fset_output_flow/ +set-quit-char c-src/emacs/src/keyboard.c /^DEFUN ("set-quit-char", Fset_quit_char, Sset_quit_/ +setDate cp-src/functions.cpp /^void Date::setDate ( int d , int m , int y ){$/ +setDelegate objc-src/Subprocess.m /^- setDelegate:anObject$/ +setRevertButtonTitle objc-src/PackInsp.m /^-setRevertButtonTitle$/ set_base cp-src/Range.h /^ void set_base (double b) { rng_base = b; }$/ -setchapternewpage tex-src/texinfo.tex /^\\def\\setchapternewpage #1 {\\csname CHAPPAG#1\\endcs/ -setchapterstyle tex-src/texinfo.tex /^\\def\\setchapterstyle #1 {\\csname CHAPF#1\\endcsname/ set_char_table_contents c-src/emacs/src/lisp.h /^set_char_table_contents (Lisp_Object table, ptrdif/ set_char_table_defalt c-src/emacs/src/lisp.h /^set_char_table_defalt (Lisp_Object table, Lisp_Obj/ set_char_table_extras c-src/emacs/src/lisp.h /^set_char_table_extras (Lisp_Object table, ptrdiff_/ set_char_table_purpose c-src/emacs/src/lisp.h /^set_char_table_purpose (Lisp_Object table, Lisp_Ob/ -set cp-src/conway.hpp /^ void set(void) { alive = 1; }$/ -setDate cp-src/functions.cpp /^void Date::setDate ( int d , int m , int y ){$/ -setdeffont tex-src/texinfo.tex /^\\def\\setdeffont #1 {\\csname DEF#1\\endcsname}$/ -setDelegate objc-src/Subprocess.m /^- setDelegate:anObject$/ -setfilename tex-src/texinfo.tex /^\\def\\setfilename{%$/ -setfilename tex-src/texinfo.tex /^ \\global\\let\\setfilename=\\comment % Ignore extra/ set_hash_key_slot c-src/emacs/src/lisp.h /^set_hash_key_slot (struct Lisp_Hash_Table *h, ptrd/ set_hash_value_slot c-src/emacs/src/lisp.h /^set_hash_value_slot (struct Lisp_Hash_Table *h, pt/ set_inc cp-src/Range.h /^ void set_inc (double i) { rng_inc = i; }$/ -set-input-interrupt-mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-interrupt-mode", Fset_input_inte/ -set-input-meta-mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-meta-mode", Fset_input_meta_mode/ -set-input-mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-mode", Fset_input_mode, Sset_inp/ set_limit cp-src/Range.h /^ void set_limit (double l) { rng_limit = l; }$/ -/setmanualfeed ps-src/rfc1245.ps /^\/setmanualfeed {$/ -set merc-src/accumulator.m /^:- import_module set.$/ -set-output-flow-control c-src/emacs/src/keyboard.c /^DEFUN ("set-output-flow-control", Fset_output_flow/ set_overlay_plist c-src/emacs/src/lisp.h /^set_overlay_plist (Lisp_Object overlay, Lisp_Objec/ -Set_Own_Priority/p ada-src/2ataspri.adb /^ procedure Set_Own_Priority (Prio : System.Any_P/ -Set_Own_Priority/p ada-src/2ataspri.ads /^ procedure Set_Own_Priority (Prio : System.Any_P/ -/setpapername ps-src/rfc1245.ps /^\/setpapername { $/ -/setpattern ps-src/rfc1245.ps /^\/setpattern {$/ set_poll_suppress_count c-src/emacs/src/keyboard.c /^set_poll_suppress_count (int count)$/ -Set_Priority/p ada-src/2ataspri.adb /^ procedure Set_Priority$/ -Set_Priority/p ada-src/2ataspri.ads /^ procedure Set_Priority (T : TCB_Ptr; Prio : Sys/ set_prop c-src/emacs/src/keyboard.c /^set_prop (ptrdiff_t idx, Lisp_Object val)$/ -SETPRT f-src/entry.for /^ ENTRY SETPRT ( SHORT, EXPL, LONG, TRACE, D/ -SETPRT f-src/entry.strange /^ ENTRY SETPRT ( SHORT, EXPL, LONG, TRACE, D/ -SETPRT f-src/entry.strange_suffix /^ ENTRY SETPRT ( SHORT, EXPL, LONG, TRACE, D/ -set-quit-char c-src/emacs/src/keyboard.c /^DEFUN ("set-quit-char", Fset_quit_char, Sset_quit_/ -setref tex-src/texinfo.tex /^\\def\\setref#1{%$/ -setref tex-src/texinfo.tex /^\\expandafter\\expandafter\\expandafter\\appendixsetre/ -setRevertButtonTitle objc-src/PackInsp.m /^-setRevertButtonTitle$/ set_save_integer c-src/emacs/src/lisp.h /^set_save_integer (Lisp_Object obj, int n, ptrdiff_/ set_save_pointer c-src/emacs/src/lisp.h /^set_save_pointer (Lisp_Object obj, int n, void *va/ set_string_intervals c-src/emacs/src/lisp.h /^set_string_intervals (Lisp_Object s, INTERVAL i)$/ set_sub_char_table_contents c-src/emacs/src/lisp.h /^set_sub_char_table_contents (Lisp_Object table, pt/ -SET_SYMBOL_BLV c-src/emacs/src/lisp.h /^SET_SYMBOL_BLV (struct Lisp_Symbol *sym, struct Li/ set_symbol_function c-src/emacs/src/lisp.h /^set_symbol_function (Lisp_Object sym, Lisp_Object / -SET_SYMBOL_FWD c-src/emacs/src/lisp.h /^SET_SYMBOL_FWD (struct Lisp_Symbol *sym, union Lis/ set_symbol_next c-src/emacs/src/lisp.h /^set_symbol_next (Lisp_Object sym, struct Lisp_Symb/ set_symbol_plist c-src/emacs/src/lisp.h /^set_symbol_plist (Lisp_Object sym, Lisp_Object pli/ -SET_SYMBOL_VAL c-src/emacs/src/lisp.h /^# define SET_SYMBOL_VAL(sym, v) lisp_h_SET_SYMBOL_/ -set tex-src/texinfo.tex /^\\def\\set{\\parsearg\\setxxx}$/ +set_upto merc-src/accumulator.m /^:- func set_upto(accu_case, int) = set(accu_goal_i/ +set_waiting_for_input c-src/emacs/src/keyboard.c /^set_waiting_for_input (struct timespec *time_to_cl/ +setchapternewpage tex-src/texinfo.tex /^\\def\\setchapternewpage #1 {\\csname CHAPPAG#1\\endcs/ +setchapterstyle tex-src/texinfo.tex /^\\def\\setchapterstyle #1 {\\csname CHAPF#1\\endcsname/ +setdeffont tex-src/texinfo.tex /^\\def\\setdeffont #1 {\\csname DEF#1\\endcsname}$/ +setfilename tex-src/texinfo.tex /^ \\global\\let\\setfilename=\\comment % Ignore extra/ +setfilename tex-src/texinfo.tex /^\\def\\setfilename{%$/ +setref tex-src/texinfo.tex /^\\def\\setref#1{%$/ +setref tex-src/texinfo.tex /^\\expandafter\\expandafter\\expandafter\\appendixsetre/ settitle tex-src/texinfo.tex /^\\def\\settitle{\\parsearg\\settitlezzz}$/ settitlezzz tex-src/texinfo.tex /^\\def\\settitlezzz #1{\\gdef\\thistitle{#1}}$/ setup cp-src/c.C 5 -set_upto merc-src/accumulator.m /^:- func set_upto(accu_case, int) = set(accu_goal_i/ -set_waiting_for_input c-src/emacs/src/keyboard.c /^set_waiting_for_input (struct timespec *time_to_cl/ setxxx tex-src/texinfo.tex /^\\def\\setxxx #1{$/ -/SF ps-src/rfc1245.ps /^\/SF { $/ sf tex-src/texinfo.tex /^\\def\\sf{\\fam=\\sffam \\tensf}$/ sf tex-src/texinfo.tex /^\\def\\sf{\\realbackslash sf}%$/ -@sf tex-src/texinfo.tex /^\\ifhmode\\edef\\@sf{\\spacefactor\\the\\spacefactor}\\\/\\/ -@sf tex-src/texinfo.tex /^\\let\\@sf\\empty$/ sf tex-src/texinfo.tex /^{\\let\\tentt=\\sectt \\let\\tt=\\sectt \\let\\sf=\\sectt$/ shift cp-src/functions.cpp /^void Date::shift ( void ){\/\/Shift this date to pre/ shortchapentry tex-src/texinfo.tex /^\\def\\shortchapentry#1#2#3{%$/ shortcontents tex-src/texinfo.tex /^\\let\\shortcontents = \\summarycontents$/ shortunnumberedentry tex-src/texinfo.tex /^\\def\\shortunnumberedentry#1#2{%$/ -should_attempt_accu_transform_2 merc-src/accumulator.m /^:- pred should_attempt_accu_transform_2(module_inf/ -should_attempt_accu_transform merc-src/accumulator.m /^:- pred should_attempt_accu_transform(module_info:/ shouldLoad objc-src/PackInsp.m /^-(BOOL)shouldLoad$/ +should_attempt_accu_transform merc-src/accumulator.m /^:- pred should_attempt_accu_transform(module_info:/ +should_attempt_accu_transform_2 merc-src/accumulator.m /^:- pred should_attempt_accu_transform_2(module_inf/ should_see_this_array_type cp-src/c.C 156 should_see_this_function_pointer cp-src/c.C 153 should_see_this_one_enclosed_in_extern_C cp-src/c.C 149 show erl-src/gs_dialog.erl /^show(Module, Title, Message, Args) ->$/ showError objc-src/Subprocess.m /^showError (const char *errorString, id theDelegate/ -show_help_echo c-src/emacs/src/keyboard.c /^show_help_echo (Lisp_Object help, Lisp_Object wind/ showInfo objc-src/PackInsp.m /^-showInfo:sender$/ +show_help_echo c-src/emacs/src/keyboard.c /^show_help_echo (Lisp_Object help, Lisp_Object wind/ sig c-src/emacs/src/keyboard.c 7238 -signal_handler1 c-src/h.h 83 signal_handler c-src/h.h 82 +signal_handler1 c-src/h.h 83 signal_handler_t c-src/h.h 94 -SimpleCalc objcpp-src/SimpleCalc.H /^@interface SimpleCalc:Object$/ simulation html-src/software.html /^Software that I wrote for supporting my research a/ -singlecodeindexer tex-src/texinfo.tex /^\\def\\singlecodeindexer #1{\\doind{\\indexname}{\\code/ -singleindexer tex-src/texinfo.tex /^\\def\\singleindexer #1{\\doind{\\indexname}{#1}}$/ single_kboard c-src/emacs/src/keyboard.c 89 single_kboard_state c-src/emacs/src/keyboard.c /^single_kboard_state ()$/ -SINGLE_LETTER_MOD c-src/emacs/src/keyboard.c 6212 -SINGLE_LETTER_MOD c-src/emacs/src/keyboard.c 6763 -SINGLE_LETTER_MOD c-src/emacs/src/keyboard.c /^#define SINGLE_LETTER_MOD(BIT) \\$/ +singlecodeindexer tex-src/texinfo.tex /^\\def\\singlecodeindexer #1{\\doind{\\indexname}{\\code/ +singleindexer tex-src/texinfo.tex /^\\def\\singleindexer #1{\\doind{\\indexname}{#1}}$/ singlespace tex-src/texinfo.tex /^\\def\\singlespace{%$/ -site cp-src/conway.hpp 5 site cp-src/conway.hpp /^ site(int xi, int yi): x(xi), y(yi), alive(0) {/ +site cp-src/conway.hpp 5 size c-src/emacs/src/gmalloc.c 156 size c-src/emacs/src/gmalloc.c 163 size c-src/emacs/src/gmalloc.c 1867 @@ -3700,16 +4082,12 @@ size c-src/emacs/src/lisp.h 1364 size c-src/emacs/src/lisp.h 1390 size c-src/etags.c 236 size c-src/etags.c 2522 -SIZEFORMAT objc-src/PackInsp.m 57 skeyseen c-src/etags.c 2445 -SkipBlanks pas-src/common.pas /^function SkipBlanks; (*($/ -SkipChars pas-src/common.pas /^function SkipChars; (*($/ skip_name c-src/etags.c /^skip_name (char *cp)$/ skip_non_spaces c-src/etags.c /^skip_non_spaces (char *cp)$/ skip_spaces c-src/etags.c /^skip_spaces (char *cp)$/ -SkipSpaces pas-src/common.pas /^procedure SkipSpaces; (* (Str : NameString; var I / -sl tex-src/texinfo.tex /^\\def\\sl{\\realbackslash sl }%$/ sl tex-src/texinfo.tex /^ \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/ +sl tex-src/texinfo.tex /^\\def\\sl{\\realbackslash sl }%$/ smallbook tex-src/texinfo.tex /^\\def\\smallbook{$/ smallbook tex-src/texinfo.tex /^\\let\\smallbook=\\relax$/ smallcaps tex-src/texinfo.tex /^ \\let\\tenbf=\\chapbf \\let\\tentt=\\chaptt \\let\\small/ @@ -3727,72 +4105,31 @@ snarf-tag-function el-src/emacs/lisp/progmodes/etags.el /^(defvar snarf-tag-func snone c-src/etags.c 2443 solutions merc-src/accumulator.m /^:- import_module solutions.$/ some_mouse_moved c-src/emacs/src/keyboard.c /^some_mouse_moved (void)$/ -#some-storage forth-src/test-forth.fth /^2000 buffer: #some-storage$/ +sp tex-src/texinfo.tex /^\\def\\sp{\\parsearg\\spxxx}$/ +space tex-src/texinfo.tex /^ {#2\\labelspace #1}\\dotfill\\doshortpageno{#3}}%/ +space tex-src/texinfo.tex /^ \\dosubsubsecentry{#2.#3.#4.#5\\labelspace#1}{#6}}/ +space tex-src/texinfo.tex /^\\def\\chapentry#1#2#3{\\dochapentry{#2\\labelspace#1}/ +space tex-src/texinfo.tex /^\\def\\secentry#1#2#3#4{\\dosecentry{#2.#3\\labelspace/ +space tex-src/texinfo.tex /^\\def\\subsecentry#1#2#3#4#5{\\dosubsecentry{#2.#3.#4/ spacer c-src/emacs/src/lisp.h 1975 spacer c-src/emacs/src/lisp.h 1982 spacer c-src/emacs/src/lisp.h 2036 spacer c-src/emacs/src/lisp.h 2205 -spacesplitfoo tex-src/texinfo.tex /^\\long\\gdef\\spacesplitfoo#1#2 #3#4\\spacesplitfoo{%$/ spacesplit tex-src/texinfo.tex /^\\gdef\\spacesplit#1#2^^M{\\endgroup\\spacesplitfoo{#1/ -space tex-src/texinfo.tex /^ {#2\\labelspace #1}\\dotfill\\doshortpageno{#3}}%/ -space tex-src/texinfo.tex /^\\def\\chapentry#1#2#3{\\dochapentry{#2\\labelspace#1}/ -space tex-src/texinfo.tex /^\\def\\secentry#1#2#3#4{\\dosecentry{#2.#3\\labelspace/ -space tex-src/texinfo.tex /^\\def\\subsecentry#1#2#3#4#5{\\dosubsecentry{#2.#3.#4/ -space tex-src/texinfo.tex /^ \\dosubsubsecentry{#2.#3.#4.#5\\labelspace#1}{#6}}/ -specbinding c-src/emacs/src/lisp.h 2955 +spacesplitfoo tex-src/texinfo.tex /^\\long\\gdef\\spacesplitfoo#1#2 #3#4\\spacesplitfoo{%$/ specbind_tag c-src/emacs/src/lisp.h 2943 +specbinding c-src/emacs/src/lisp.h 2955 specheader tex-src/texinfo.tex /^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/ specialsymbol prol-src/natded.prolog /^specialsymbol(C1,C2,S):-$/ -SPECPDL_BACKTRACE c-src/emacs/src/lisp.h 2948 -SPECPDL_INDEX c-src/emacs/src/lisp.h /^SPECPDL_INDEX (void)$/ -SPECPDL_LET c-src/emacs/src/lisp.h 2949 -SPECPDL_LET_DEFAULT c-src/emacs/src/lisp.h 2952 -SPECPDL_LET_LOCAL c-src/emacs/src/lisp.h 2951 -SPECPDL_UNWIND c-src/emacs/src/lisp.h 2944 -SPECPDL_UNWIND_INT c-src/emacs/src/lisp.h 2946 -SPECPDL_UNWIND_PTR c-src/emacs/src/lisp.h 2945 -SPECPDL_UNWIND_VOID c-src/emacs/src/lisp.h 2947 specx\defspecheader tex-src/texinfo.tex /^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/ splitexp prol-src/natded.prolog /^splitexp(E,E,('NIL','NIL')):-!.$/ splitoff tex-src/texinfo.tex /^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/ -/S ps-src/rfc1245.ps /^\/S { $/ -sp tex-src/texinfo.tex /^\\def\\sp{\\parsearg\\spxxx}$/ spxxx tex-src/texinfo.tex /^\\def\\spxxx #1{\\par \\vskip #1\\baselineskip}$/ -Square.something:Bar lua-src/test.lua /^function Square.something:Bar ()$/ srclist make-src/Makefile /^srclist: Makefile$/ -SRCS make-src/Makefile /^SRCS=Makefile ${ADASRC} ${ASRC} ${CSRC} ${CPSRC} $/ -SREF c-src/emacs/src/lisp.h /^SREF (Lisp_Object string, ptrdiff_t index)$/ ss3 c.c 255 -SSDATA c-src/emacs/src/lisp.h /^SSDATA (Lisp_Object string)$/ -SSET c-src/emacs/src/lisp.h /^SSET (Lisp_Object string, ptrdiff_t index, unsigne/ sss1 c.c 252 sss2 c.c 253 sstab prol-src/natded.prolog /^sstab(2,'C',',').$/ -stack c.c 155 -STACK_CONS c-src/emacs/src/lisp.h /^#define STACK_CONS(a, b) \\$/ -stagseen c-src/etags.c 2446 -standalone make-src/Makefile /^standalone:$/ -startcontents tex-src/texinfo.tex /^\\def\\startcontents#1{%$/ -start c-src/emacs/src/keyboard.c 8753 -start c-src/emacs/src/lisp.h 2038 -start c-src/emacs/src/regex.h 431 -StartDay cp-src/functions.cpp /^Date StartDay(Date a,int days){\/\/Function to calcu/ -startenumeration tex-src/texinfo.tex /^\\def\\startenumeration#1{%$/ -start php-src/lce_functions.php /^ function start($line, $class)$/ -start_polling c-src/emacs/src/keyboard.c /^start_polling (void)$/ -=starts-with-equals! scm-src/test.scm /^(define =starts-with-equals! #t)$/ -start_up prol-src/natded.prolog /^start_up:-$/ -start y-src/cccp.y 143 -STATE_ABORT php-src/lce_functions.php 25 -STATE_COMPRESSD objc-src/PackInsp.m 54 -STATE_INSTALLED objc-src/PackInsp.m 53 -STATE_LOOP php-src/lce_functions.php 27 -STATE_OK php-src/lce_functions.php 26 -state_protected_p c-src/emacs/src/gmalloc.c 401 -STAT_EQ objc-src/PackInsp.m /^#define STAT_EQ(s1, s2) ((s1)->st_ino == (s2)->st_/ -statetable html-src/algrthms.html /^Next$/ -STATE_UNINSTALLED objc-src/PackInsp.m 52 -staticetags make-src/Makefile /^staticetags:$/ st_C_attribute c-src/etags.c 2209 st_C_class c-src/etags.c 2212 st_C_define c-src/etags.c 2213 @@ -3808,75 +4145,73 @@ st_C_operator c-src/etags.c 2211 st_C_struct c-src/etags.c 2213 st_C_template c-src/etags.c 2212 st_C_typedef c-src/etags.c 2213 -STDIN c-src/etags.c 408 -STDIN c-src/etags.c 411 +st_none c-src/etags.c 2206 +stack c.c 155 +stagseen c-src/etags.c 2446 +standalone make-src/Makefile /^standalone:$/ +start c-src/emacs/src/keyboard.c 8753 +start c-src/emacs/src/lisp.h 2038 +start c-src/emacs/src/regex.h 431 +start php-src/lce_functions.php /^ function start($line, $class)$/ +start y-src/cccp.y 143 +start_polling c-src/emacs/src/keyboard.c /^start_polling (void)$/ +start_up prol-src/natded.prolog /^start_up:-$/ +startcontents tex-src/texinfo.tex /^\\def\\startcontents#1{%$/ +startenumeration tex-src/texinfo.tex /^\\def\\startenumeration#1{%$/ +state_protected_p c-src/emacs/src/gmalloc.c 401 +statetable html-src/algrthms.html /^Next$/ +staticetags make-src/Makefile /^staticetags:$/ step cp-src/clheir.hpp /^ virtual void step(void) { }$/ step cp-src/conway.hpp /^ void step(void) { alive = next_alive; }$/ step_everybody cp-src/clheir.cpp /^void step_everybody(void)$/ -st_none c-src/etags.c 2206 -STOP_POLLING c-src/emacs/src/keyboard.c 2166 stop_polling c-src/emacs/src/keyboard.c /^stop_polling (void)$/ -stored_goal_plain_call merc-src/accumulator.m /^:- inst stored_goal_plain_call for goal_store.stor/ store_info merc-src/accumulator.m /^:- type store_info$/ store_user_signal_events c-src/emacs/src/keyboard.c /^store_user_signal_events (void)$/ +stored_goal_plain_call merc-src/accumulator.m /^:- inst stored_goal_plain_call for goal_store.stor/ +str go-src/test1.go 9 strcaseeq c-src/etags.c /^#define strcaseeq(s,t) (assert ((s)!=NULL && (t)!=/ streq c-src/etags.c /^#define streq(s,t) (assert ((s)!=NULL || (t)!=NULL/ -str go-src/test1.go 9 -STRING_BYTES_BOUND c-src/emacs/src/lisp.h 1261 -STRING_BYTES c-src/emacs/src/lisp.h /^STRING_BYTES (struct Lisp_String *s)$/ -string_intervals c-src/emacs/src/lisp.h /^string_intervals (Lisp_Object s)$/ string merc-src/accumulator.m /^:- import_module string.$/ -STRING_MULTIBYTE c-src/emacs/src/lisp.h /^STRING_MULTIBYTE (Lisp_Object str)$/ -STRING_SET_CHARS c-src/emacs/src/lisp.h /^STRING_SET_CHARS (Lisp_Object string, ptrdiff_t ne/ -STRING_SET_MULTIBYTE c-src/emacs/src/lisp.h /^#define STRING_SET_MULTIBYTE(STR) \\$/ -STRING_SET_UNIBYTE c-src/emacs/src/lisp.h /^#define STRING_SET_UNIBYTE(STR) \\$/ +string_intervals c-src/emacs/src/lisp.h /^string_intervals (Lisp_Object s)$/ stripLine php-src/lce_functions.php /^ function stripLine($line, $class)$/ stripname pas-src/common.pas /^function stripname; (* ($/ -StripPath pas-src/common.pas /^function StripPath; (*($/ strncaseeq c-src/etags.c /^#define strncaseeq(s,t,n) (assert ((s)!=NULL && (t/ strneq c-src/etags.c /^#define strneq(s,t,n) (assert ((s)!=NULL || (t)!=N/ strong tex-src/texinfo.tex /^\\let\\strong=\\b$/ strong tex-src/texinfo.tex /^\\let\\strong=\\indexdummyfont$/ -__str__ pyt-src/server.py /^ def __str__(self):$/ structdef c-src/etags.c 2448 stuff_buffered_input c-src/emacs/src/keyboard.c /^stuff_buffered_input (Lisp_Object stuffstring)$/ -SUB_CHAR_TABLE_OFFSET c-src/emacs/src/lisp.h 1701 -SUB_CHAR_TABLE_P c-src/emacs/src/lisp.h /^SUB_CHAR_TABLE_P (Lisp_Object a)$/ subheading tex-src/texinfo.tex /^\\def\\subheading{\\parsearg\\subsecheadingi}$/ -subprocessDone objc-src/PackInsp.m /^-subprocessDone:(Subprocess *)sender$/ subprocess objc-src/PackInsp.m /^-subprocess:(Subprocess *)sender output:(char *)bu/ -Subprocess objc-src/Subprocess.h 41 -Subprocess objc-src/Subprocess.h /^@interface Subprocess:Object$/ -SUBRP c-src/emacs/src/lisp.h /^SUBRP (Lisp_Object a)$/ -subsecentryfonts tex-src/texinfo.tex /^\\let\\subsecentryfonts = \\textfonts$/ +subprocessDone objc-src/PackInsp.m /^-subprocessDone:(Subprocess *)sender$/ +subsec tex-src/texinfo.tex /^\\global\\let\\subsection = \\appendixsubsec$/ +subsec tex-src/texinfo.tex /^\\let\\subsec=\\relax$/ subsecentry tex-src/texinfo.tex /^ \\def\\subsecentry ##1##2##3##4##5{}$/ subsecentry tex-src/texinfo.tex /^\\def\\subsecentry#1#2#3#4#5{\\dosubsecentry{#2.#3.#4/ +subsecentryfonts tex-src/texinfo.tex /^\\let\\subsecentryfonts = \\textfonts$/ subsecfonts tex-src/texinfo.tex /^\\def\\subsecfonts{%$/ +subsecheading tex-src/texinfo.tex /^\\def\\subsecheading #1#2#3#4{\\subsecheadingi {#2.#3/ subsecheadingbreak tex-src/texinfo.tex /^\\def\\subsecheadingbreak{\\dobreak \\subsecheadingski/ subsecheadingi tex-src/texinfo.tex /^\\def\\subsecheadingi #1{{\\advance \\subsecheadingski/ -subsecheading tex-src/texinfo.tex /^\\def\\subsecheading #1#2#3#4{\\subsecheadingi {#2.#3/ -subsec tex-src/texinfo.tex /^\\global\\let\\subsection = \\appendixsubsec$/ -subsec tex-src/texinfo.tex /^\\let\\subsec=\\relax$/ -subsection_marker perl-src/htlmify-cystic 161 subsection perl-src/htlmify-cystic 26 subsection tex-src/texinfo.tex /^\\global\\let\\subsection = \\appendixsubsec$/ subsection tex-src/texinfo.tex /^\\global\\let\\subsection = \\numberedsubsec$/ subsection tex-src/texinfo.tex /^\\global\\let\\subsection = \\unnumberedsubsec$/ subsection tex-src/texinfo.tex /^\\let\\subsection=\\relax$/ +subsection_marker perl-src/htlmify-cystic 161 subseczzz tex-src/texinfo.tex /^\\def\\infoappendixsubsec{\\parsearg\\appendixsubseczz/ subseczzz tex-src/texinfo.tex /^\\outer\\def\\appendixsubsec{\\parsearg\\appendixsubsec/ -substitute c-src/etags.c /^substitute (char *in, char *out, struct re_registe/ subst prol-src/natded.prolog /^subst(var(Y),var(X),M,N):-$/ -SubString pas-src/common.pas /^function SubString; (*($/ +substitute c-src/etags.c /^substitute (char *in, char *out, struct re_registe/ subsubheading tex-src/texinfo.tex /^\\def\\subsubheading{\\parsearg\\subsubsecheadingi}$/ -subsubsecentryfonts tex-src/texinfo.tex /^\\let\\subsubsecentryfonts = \\textfonts$/ +subsubsec tex-src/texinfo.tex /^\\global\\let\\subsubsection = \\appendixsubsubsec$/ +subsubsec tex-src/texinfo.tex /^\\let\\subsubsec=\\relax$/ subsubsecentry tex-src/texinfo.tex /^ \\def\\subsubsecentry ##1##2##3##4##5##6{}$/ subsubsecentry tex-src/texinfo.tex /^\\def\\subsubsecentry#1#2#3#4#5#6{%$/ +subsubsecentryfonts tex-src/texinfo.tex /^\\let\\subsubsecentryfonts = \\textfonts$/ subsubsecfonts tex-src/texinfo.tex /^\\def\\subsubsecfonts{\\subsecfonts} % Maybe this sho/ -subsubsecheadingi tex-src/texinfo.tex /^\\def\\subsubsecheadingi #1{{\\advance \\subsecheading/ subsubsecheading tex-src/texinfo.tex /^\\def\\subsubsecheading #1#2#3#4#5{\\subsubsecheading/ -subsubsec tex-src/texinfo.tex /^\\global\\let\\subsubsection = \\appendixsubsubsec$/ -subsubsec tex-src/texinfo.tex /^\\let\\subsubsec=\\relax$/ +subsubsecheadingi tex-src/texinfo.tex /^\\def\\subsubsecheadingi #1{{\\advance \\subsecheading/ subsubsection perl-src/htlmify-cystic 27 subsubsection tex-src/texinfo.tex /^\\global\\let\\subsubsection = \\appendixsubsubsec$/ subsubsection tex-src/texinfo.tex /^\\global\\let\\subsubsection = \\numberedsubsubsec$/ @@ -3884,9 +4219,9 @@ subsubsection tex-src/texinfo.tex /^\\global\\let\\subsubsection = \\unnumbereds subsubsection tex-src/texinfo.tex /^\\let\\subsubsection=\\relax$/ subsubseczzz tex-src/texinfo.tex /^\\def\\infoappendixsubsubsec{\\parsearg\\appendixsubsu/ subsubseczzz tex-src/texinfo.tex /^\\outer\\def\\appendixsubsubsec{\\parsearg\\appendixsub/ +subtitle tex-src/texinfo.tex /^ \\def\\subtitle{\\parsearg\\subtitlezzz}%$/ subtitlefont tex-src/texinfo.tex /^ \\def\\subtitlefont{\\subtitlerm \\normalbaselinesk/ subtitlerm tex-src/texinfo.tex /^ \\let\\subtitlerm=\\tenrm$/ -subtitle tex-src/texinfo.tex /^ \\def\\subtitle{\\parsearg\\subtitlezzz}%$/ subtitlezzz tex-src/texinfo.tex /^ \\def\\subtitlezzz##1{{\\subtitlefont \\rightline{#/ subtle ruby-src/test1.ru /^ :tee ; attr_reader :subtle$/ subtree prol-src/natded.prolog /^subtree(T,T).$/ @@ -3900,37 +4235,18 @@ sval y-src/cccp.y 116 swallow_events c-src/emacs/src/keyboard.c /^swallow_events (bool do_display)$/ switch_line_buffers c-src/etags.c /^#define switch_line_buffers() (curndx = 1 - curndx/ sxhash_combine c-src/emacs/src/lisp.h /^sxhash_combine (EMACS_UINT x, EMACS_UINT y)$/ -SXHASH_REDUCE c-src/emacs/src/lisp.h /^SXHASH_REDUCE (EMACS_UINT x)$/ -SYMBOL_BLV c-src/emacs/src/lisp.h /^SYMBOL_BLV (struct Lisp_Symbol *sym)$/ -SYMBOL_CONSTANT_P c-src/emacs/src/lisp.h /^# define SYMBOL_CONSTANT_P(sym) lisp_h_SYMBOL_CONS/ +sym_type c-src/etags.c 2204 symbol c-src/emacs/src/lisp.h 2980 -SYMBOL_FORWARDED c-src/emacs/src/lisp.h 651 -SYMBOL_FWD c-src/emacs/src/lisp.h /^SYMBOL_FWD (struct Lisp_Symbol *sym)$/ -SYMBOL_INDEX c-src/emacs/src/lisp.h /^#define SYMBOL_INDEX(sym) i##sym$/ symbol_interned c-src/emacs/src/lisp.h 639 -SYMBOL_INTERNED c-src/emacs/src/lisp.h 642 -SYMBOL_INTERNED_IN_INITIAL_OBARRAY c-src/emacs/src/lisp.h 643 -SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P c-src/emacs/src/lisp.h /^SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P (Lisp_Object / -SYMBOL_INTERNED_P c-src/emacs/src/lisp.h /^SYMBOL_INTERNED_P (Lisp_Object sym)$/ -SYMBOL_LOCALIZED c-src/emacs/src/lisp.h 650 symbol_name c-src/emacs/src/lisp.h 1687 -SYMBOL_NAME c-src/emacs/src/lisp.h /^SYMBOL_NAME (Lisp_Object sym)$/ -SYMBOLP c-src/emacs/src/lisp.h /^# define SYMBOLP(x) lisp_h_SYMBOLP (x)$/ -SYMBOL_PLAINVAL c-src/emacs/src/lisp.h 648 symbol_redirect c-src/emacs/src/lisp.h 646 -SYMBOL_UNINTERNED c-src/emacs/src/lisp.h 641 -SYMBOL_VAL c-src/emacs/src/lisp.h /^# define SYMBOL_VAL(sym) lisp_h_SYMBOL_VAL (sym)$/ -SYMBOL_VARALIAS c-src/emacs/src/lisp.h 649 syms_of_abbrev c-src/abbrev.c /^syms_of_abbrev ()$/ syms_of_keyboard c-src/emacs/src/keyboard.c /^syms_of_keyboard (void)$/ -sym_type c-src/etags.c 2204 synchronize_system_messages_locale c-src/emacs/src/lisp.h /^INLINE void synchronize_system_messages_locale (vo/ synchronize_system_time_locale c-src/emacs/src/lisp.h /^INLINE void synchronize_system_time_locale (void) / syncodeindex tex-src/texinfo.tex /^\\def\\syncodeindex #1 #2 {%$/ synindex tex-src/texinfo.tex /^\\def\\synindex #1 #2 {%$/ syntax c-src/emacs/src/regex.h 350 -SYSCALL c-src/machsyscalls.c /^#define SYSCALL(name, number, type, args, typed_ar/ -syscall_error c-src/sysdep.h 34 sys_jmp_buf c-src/emacs/src/lisp.h 2906 sys_jmp_buf c-src/emacs/src/lisp.h 2910 sys_jmp_buf c-src/emacs/src/lisp.h 2916 @@ -3940,12 +4256,14 @@ sys_longjmp c-src/emacs/src/lisp.h /^# define sys_longjmp(j, v) siglongjmp (j, v sys_setjmp c-src/emacs/src/lisp.h /^# define sys_setjmp(j) _setjmp (j)$/ sys_setjmp c-src/emacs/src/lisp.h /^# define sys_setjmp(j) setjmp (j)$/ sys_setjmp c-src/emacs/src/lisp.h /^# define sys_setjmp(j) sigsetjmp (j, 0)$/ -System.Task_Primitives/b ada-src/2ataspri.adb /^package body System.Task_Primitives is$/ -System.Task_Primitives/s ada-src/2ataspri.ads /^package System.Task_Primitives is$/ +syscall_error c-src/sysdep.h 34 +t cp-src/c.C 52 +t tex-src/texinfo.tex /^\\def\\t##1{\\realbackslash r {##1}}%$/ +t tex-src/texinfo.tex /^\\def\\t#1{{\\tt \\exhyphenpenalty=10000\\rawbackslash / +t tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ +t tex-src/texinfo.tex /^\\let\\t=\\indexdummyfont$/ t1 cp-src/c.C 34 t2 cp-src/c.C 38 -T2 cp-src/fail.C 16 -T3 c.c 163 tab_count_words c-src/tab.c /^int tab_count_words(char **tab)$/ tab_delete_first c-src/tab.c /^int tab_delete_first(char **tab)$/ tab_fill c-src/tab.c /^char **tab_fill(char *str, char delim)$/ @@ -3954,6 +4272,18 @@ table tex-src/texinfo.tex /^\\def\\table{\\begingroup\\inENV\\obeylines\\obeyspa tablex tex-src/texinfo.tex /^\\gdef\\tablex #1^^M{%$/ tabley tex-src/texinfo.tex /^\\gdef\\tabley#1#2 #3 #4 #5 #6 #7\\endtabley{\\endgrou/ tablez tex-src/texinfo.tex /^\\def\\tablez #1#2#3#4#5#6{%$/ +tag-any-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-any-match-p (_tag)$/ +tag-exact-file-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-exact-file-name-match-p (tag)$/ +tag-exact-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-exact-match-p (tag)$/ +tag-file-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-file-name-match-p (tag)$/ +tag-find-file-of-tag el-src/emacs/lisp/progmodes/etags.el /^(defun tag-find-file-of-tag (file) ; Doc string?$/ +tag-find-file-of-tag-noselect el-src/emacs/lisp/progmodes/etags.el /^(defun tag-find-file-of-tag-noselect (file)$/ +tag-implicit-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-implicit-name-match-p (tag)$/ +tag-lines-already-matched el-src/emacs/lisp/progmodes/etags.el /^(defvar tag-lines-already-matched nil$/ +tag-partial-file-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-partial-file-name-match-p (_tag)$/ +tag-re-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-re-match-p (re)$/ +tag-symbol-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-symbol-match-p (tag)$/ +tag-word-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-word-match-p (tag)$/ tag1 c-src/dostorture.c /^(*tag1 (sig, handler)) ()$/ tag1 c-src/h.h 110 tag1 c-src/torture.c /^(*tag1 (sig, handler)) ()$/ @@ -3967,22 +4297,12 @@ tag5 c-src/dostorture.c /^tag5 (handler, arg)$/ tag5 c-src/torture.c /^tag5 (handler, arg)$/ tag6 c-src/dostorture.c /^tag6 (void (*handler) (void *), void *arg)$/ tag6 c-src/torture.c /^tag6 (void (*handler) (void *), void *arg)$/ -tag-any-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-any-match-p (_tag)$/ -tag-exact-file-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-exact-file-name-match-p (tag)$/ -tag-exact-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-exact-match-p (tag)$/ -tag-file-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-file-name-match-p (tag)$/ -tag-find-file-of-tag el-src/emacs/lisp/progmodes/etags.el /^(defun tag-find-file-of-tag (file) ; Doc string?$/ -tag-find-file-of-tag-noselect el-src/emacs/lisp/progmodes/etags.el /^(defun tag-find-file-of-tag-noselect (file)$/ -taggedfname c-src/etags.c 207 -tag-implicit-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-implicit-name-match-p (tag)$/ -tag-lines-already-matched el-src/emacs/lisp/progmodes/etags.el /^(defvar tag-lines-already-matched nil$/ tag_or_ch c-src/emacs/src/lisp.h 3026 -tag-partial-file-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-partial-file-name-match-p (_tag)$/ -TAG_PTR c-src/emacs/src/lisp.h /^#define TAG_PTR(tag, ptr) \\$/ -tag-re-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-re-match-p (re)$/ +taggedfname c-src/etags.c 207 +tags make-src/Makefile /^tags: TAGS$/ tags-add-tables el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-add-tables 'ask-user$/ -tags-apropos-additional-actions el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-apropos-additional-actions nil$/ tags-apropos el-src/emacs/lisp/progmodes/etags.el /^(defun tags-apropos (regexp)$/ +tags-apropos-additional-actions el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-apropos-additional-actions nil$/ tags-apropos-function el-src/emacs/lisp/progmodes/etags.el /^(defvar tags-apropos-function nil$/ tags-apropos-verbose el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-apropos-verbose nil$/ tags-case-fold-search el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-case-fold-search 'default$/ @@ -4004,8 +4324,6 @@ tags-loop-eval el-src/emacs/lisp/progmodes/etags.el /^(defun tags-loop-eval (for tags-loop-operate el-src/emacs/lisp/progmodes/etags.el /^(defvar tags-loop-operate nil$/ tags-loop-revert-buffers el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-loop-revert-buffers nil$/ tags-loop-scan el-src/emacs/lisp/progmodes/etags.el /^(defvar tags-loop-scan$/ -TAGS make-src/Makefile /^TAGS: etags.c$/ -tags make-src/Makefile /^tags: TAGS$/ tags-next-table el-src/emacs/lisp/progmodes/etags.el /^(defun tags-next-table ()$/ tags-query-replace el-src/emacs/lisp/progmodes/etags.el /^(defun tags-query-replace (from to &optional delim/ tags-recognize-empty-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun tags-recognize-empty-tags-table ()$/ @@ -4031,34 +4349,15 @@ tags-table-set-list el-src/emacs/lisp/progmodes/etags.el /^(defvar tags-table-se tags-tag-face el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-tag-face 'default$/ tags-verify-table el-src/emacs/lisp/progmodes/etags.el /^(defun tags-verify-table (file)$/ tags-with-face el-src/emacs/lisp/progmodes/etags.el /^(defmacro tags-with-face (face &rest body)$/ -tag-symbol-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-symbol-match-p (tag)$/ -TAG_SYMOFFSET c-src/emacs/src/lisp.h /^#define TAG_SYMOFFSET(offset) \\$/ -tag-word-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-word-match-p (tag)$/ -Tapes tex-src/gzip.texi /^@node Tapes, Problems, Environment, Top$/ target_multibyte c-src/emacs/src/regex.h 407 -TAS_Cell/t ada-src/2ataspri.ads /^ type TAS_Cell is$/ -TAS_Cell/t ada-src/2ataspri.ads /^ type TAS_Cell is private;$/ -Task_Control_Block/t ada-src/2ataspri.ads /^ type Task_Control_Block is record$/ -Task_Storage_Size/t ada-src/2ataspri.ads /^ type Task_Storage_Size is new Interfaces.C.size/ -Task_Type/b ada-src/etags-test-for.ada /^ task body Task_Type is$/ -Task_Type/b ada-src/waroquiers.ada /^ task body Task_Type is$/ -Task_Type/k ada-src/etags-test-for.ada /^ task type Task_Type is$/ -Task_Type/k ada-src/waroquiers.ada /^ task type Task_Type is$/ -TCB_Ptr/t ada-src/2ataspri.ads /^ type TCB_Ptr is access all Task_Control_Block;$/ -TCLFLAGS make-src/Makefile /^TCLFLAGS=--lang=none --regex='\/proc[ \\t]+\\([^ \\t]+/ -tclose tex-src/texinfo.tex /^\\def\\tclose##1{\\realbackslash tclose {##1}}%$/ tclose tex-src/texinfo.tex /^\\def\\tclose##1{\\realbackslash tclose {##1}}$/ +tclose tex-src/texinfo.tex /^\\def\\tclose##1{\\realbackslash tclose {##1}}%$/ tclose tex-src/texinfo.tex /^\\def\\tclose#1{{\\rm \\tcloserm=\\fontdimen2\\font \\tt / tclose tex-src/texinfo.tex /^\\let\\tclose=\\indexdummyfont$/ tcpdump html-src/software.html /^tcpdump$/ -t cp-src/c.C 52 -T cp-src/fail.C 14 teats cp-src/c.C 127 tee ruby-src/test1.ru /^ attr_accessor :tee$/ tee= ruby-src/test1.ru /^ attr_accessor :tee$/ -temp1 tex-src/texinfo.tex /^\\xdef\\temp1{#2}%$/ -temp1 tex-src/texinfo.tex /^\\xdef\\temp1{#2 #3}%$/ -temporarily_switch_to_single_kboard c-src/emacs/src/keyboard.c /^temporarily_switch_to_single_kboard (struct frame / temp tex-src/texinfo.tex /^\\edef\\temp{%$/ temp tex-src/texinfo.tex /^\\edef\\temp{{\\realbackslash chapentry $/ temp tex-src/texinfo.tex /^\\edef\\temp{{\\realbackslash chapentry {#1}{\\the\\cha/ @@ -4073,12 +4372,15 @@ temp tex-src/texinfo.tex /^\\edef\\temp{{\\realbackslash unnumbsubsubsecentry{#1 temp tex-src/texinfo.tex /^\\else \\let\\temp=\\ifclearfail \\fi$/ temp tex-src/texinfo.tex /^\\else \\let\\temp=\\relax \\fi$/ temp tex-src/texinfo.tex /^\\expandafter\\ifx\\csname IF#1\\endcsname\\relax \\let\\/ -tenbf tex-src/texinfo.tex /^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/ +temp1 tex-src/texinfo.tex /^\\xdef\\temp1{#2 #3}%$/ +temp1 tex-src/texinfo.tex /^\\xdef\\temp1{#2}%$/ +temporarily_switch_to_single_kboard c-src/emacs/src/keyboard.c /^temporarily_switch_to_single_kboard (struct frame / tenbf tex-src/texinfo.tex /^ \\let\\tenbf=\\chapbf \\let\\tentt=\\chaptt \\let\\small/ tenbf tex-src/texinfo.tex /^ \\let\\tenbf=\\indbf \\let\\tentt=\\indtt \\let\\smallca/ tenbf tex-src/texinfo.tex /^ \\let\\tenbf=\\secbf \\let\\tentt=\\sectt \\let\\smallca/ tenbf tex-src/texinfo.tex /^ \\let\\tenbf=\\ssecbf \\let\\tentt=\\ssectt \\let\\small/ tenbf tex-src/texinfo.tex /^ \\let\\tenbf=\\textbf \\let\\tentt=\\texttt \\let\\small/ +tenbf tex-src/texinfo.tex /^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/ tend c-src/etags.c 2432 teni tex-src/texinfo.tex /^ \\let\\tensf=\\chapsf \\let\\teni=\\chapi \\let\\tensy=\\/ teni tex-src/texinfo.tex /^ \\let\\tensf=\\indsf \\let\\teni=\\indi \\let\\tensy=\\in/ @@ -4110,121 +4412,55 @@ tensy tex-src/texinfo.tex /^ \\let\\tensf=\\indsf \\let\\teni=\\indi \\let\\ten tensy tex-src/texinfo.tex /^ \\let\\tensf=\\secsf \\let\\teni=\\seci \\let\\tensy=\\se/ tensy tex-src/texinfo.tex /^ \\let\\tensf=\\ssecsf \\let\\teni=\\sseci \\let\\tensy=\\/ tensy tex-src/texinfo.tex /^ \\let\\tensf=\\textsf \\let\\teni=\\texti \\let\\tensy=\\/ -tentt tex-src/texinfo.tex /^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/ tentt tex-src/texinfo.tex /^ \\let\\tenbf=\\chapbf \\let\\tentt=\\chaptt \\let\\small/ tentt tex-src/texinfo.tex /^ \\let\\tenbf=\\indbf \\let\\tentt=\\indtt \\let\\smallca/ tentt tex-src/texinfo.tex /^ \\let\\tenbf=\\secbf \\let\\tentt=\\sectt \\let\\smallca/ tentt tex-src/texinfo.tex /^ \\let\\tenbf=\\ssecbf \\let\\tentt=\\ssectt \\let\\small/ tentt tex-src/texinfo.tex /^ \\let\\tenbf=\\textbf \\let\\tentt=\\texttt \\let\\small/ +tentt tex-src/texinfo.tex /^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/ tentt tex-src/texinfo.tex /^{\\let\\tentt=\\sectt \\let\\tt=\\sectt \\let\\sf=\\sectt$/ -TERMINALP c-src/emacs/src/lisp.h /^TERMINALP (Lisp_Object a)$/ -terminateInput objc-src/Subprocess.m /^- terminateInput$/ -terminate objc-src/Subprocess.m /^- terminate:sender$/ term merc-src/accumulator.m /^:- import_module term.$/ -test1 rs-src/test.rs /^fn test1() {$/ -Test_Abort/p ada-src/2ataspri.adb /^ procedure Test_Abort is$/ -Test_Abort/p ada-src/2ataspri.ads /^ procedure Test_Abort;$/ -Test_And_Set/p ada-src/2ataspri.adb /^ procedure Test_And_Set (Cell : in out TAS_Cell;/ -Test_And_Set/p ada-src/2ataspri.ads /^ procedure Test_And_Set (Cell : in out TAS_Cell;/ -test-begin scm-src/test.scm /^(define-syntax test-begin$/ -test cp-src/c.C 86 -test_crlf1 test_crlf.c /^void test_crlf1()$/ -test_crlf2 tset_crlf.c /^void test_crlf2()$/ +terminate objc-src/Subprocess.m /^- terminate:sender$/ +terminateInput objc-src/Subprocess.m /^- terminateInput$/ test c-src/emacs/src/lisp.h 1871 +test cp-src/c.C 86 test erl-src/gs_dialog.erl /^test() ->$/ test go-src/test1.go /^func test(p plus) {$/ test make-src/Makefile /^test:$/ -test.me_22a lua-src/test.lua /^ function test.me_22a(one, two)$/ -test.me22b lua-src/test.lua /^ local function test.me22b (one)$/ -TEST php-src/ptest.php 1 test php-src/ptest.php /^test $/ +test-begin scm-src/test.scm /^(define-syntax test-begin$/ +test.me22b lua-src/test.lua /^ local function test.me22b (one)$/ +test.me_22a lua-src/test.lua /^ function test.me_22a(one, two)$/ +test1 rs-src/test.rs /^fn test1() {$/ +test_crlf1 test_crlf.c /^void test_crlf1()$/ +test_crlf2 tset_crlf.c /^void test_crlf2()$/ test_undefined c-src/emacs/src/keyboard.c /^test_undefined (Lisp_Object binding)$/ -TEX_clgrp c-src/etags.c 4922 -TeX_commands c-src/etags.c /^TeX_commands (FILE *inf)$/ -TEX_decode_env c-src/etags.c /^TEX_decode_env (const char *evarname, const char */ -TEX_defenv c-src/etags.c 4912 -TEX_esc c-src/etags.c 4920 -TeX_help c-src/etags.c 674 -Texinfo_help c-src/etags.c 688 -Texinfo_nodes c-src/etags.c /^Texinfo_nodes (FILE *inf)$/ -Texinfo_suffixes c-src/etags.c 686 -texinfoversion tex-src/texinfo.tex /^\\def\\texinfoversion{2.73}$/ -TEX_LESC c-src/etags.c 4986 -TEX_mode c-src/etags.c /^TEX_mode (FILE *inf)$/ -TEX_opgrp c-src/etags.c 4921 -TEX_SESC c-src/etags.c 4987 -TEXSRC make-src/Makefile /^TEXSRC=testenv.tex gzip.texi texinfo.tex nonewline/ -~ tex-src/texinfo.tex /^\\catcode `\\^=7 \\catcode `\\_=8 \\catcode `\\~=13 \\let/ -' tex-src/texinfo.tex /^\\def\\'{{'}}$/ -@ tex-src/texinfo.tex /^\\def\\@{@}%$/ -` tex-src/texinfo.tex /^\\def\\`{{`}}$/ -* tex-src/texinfo.tex /^\\def\\*{\\hfil\\break\\hbox{}\\ignorespaces}$/ -_ tex-src/texinfo.tex /^\\def_{\\ifusingtt\\normalunderscore\\_}$/ -_ tex-src/texinfo.tex /^\\def\\_{\\lvvmode \\kern.06em \\vbox{\\hrule width.3em / -_ tex-src/texinfo.tex /^\\def\\_{{\\realbackslash _}}%$/ -: tex-src/texinfo.tex /^\\def\\:{\\spacefactor=1000 }$/ -. tex-src/texinfo.tex /^\\def\\.{.\\spacefactor=3000 }$/ -@ tex-src/texinfo.tex /^\\def\\@{{\\tt \\char '100}}$/ -| tex-src/texinfo.tex /^\\def|{{\\tt \\char '174}}$/ -~ tex-src/texinfo.tex /^\\def~{{\\tt \\char '176}}$/ -+ tex-src/texinfo.tex /^\\def+{{\\tt \\char 43}}$/ -> tex-src/texinfo.tex /^\\def>{{\\tt \\gtr}}$/ -^ tex-src/texinfo.tex /^\\def^{{\\tt \\hat}}$/ -< tex-src/texinfo.tex /^\\def<{{\\tt \\less}}$/ -" tex-src/texinfo.tex /^\\def\\turnoffactive{\\let"=\\normaldoublequote$/ -( tex-src/texinfo.tex /^\\gdef\\amprm#1 {{\\rm\\}\\let(=\\oprm \\let)=\\clrm\\ }/ -) tex-src/texinfo.tex /^\\gdef\\amprm#1 {{\\rm\\}\\let(=\\oprm \\let)=\\clrm\\ }/ -( tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ -) tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ -[ tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ -] tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ -& tex-src/texinfo.tex /^\\gdef\\functionparens{\\boldbrax\\let&=\\amprm\\parenco/ -& tex-src/texinfo.tex /^\\gdef\\normalparens{\\boldbrax\\let&=\\ampnr}$/ -( tex-src/texinfo.tex /^\\gdef\\oprm#1 {{\\rm\\char`\\(}#1 \\bf \\let(=\\opnested / -= tex-src/texinfo.tex /^\\global\\def={{\\tt \\char 61}}}$/ -( tex-src/texinfo.tex /^\\ifnum \\parencount=1 {\\rm \\char `\\)}\\sl \\let(=\\opr/ -" tex-src/texinfo.tex /^\\let"=\\activedoublequote$/ -{ tex-src/texinfo.tex /^\\let\\{=\\mylbrace$/ -} tex-src/texinfo.tex /^\\let\\}=\\myrbrace$/ -^ tex-src/texinfo.tex /^\\let^=\\normalcaret$/ -> tex-src/texinfo.tex /^\\let>=\\normalgreater$/ -< tex-src/texinfo.tex /^\\let<=\\normalless$/ -+ tex-src/texinfo.tex /^\\let+=\\normalplus}$/ -~ tex-src/texinfo.tex /^\\let~=\\normaltilde$/ -_ tex-src/texinfo.tex /^\\let_=\\normalunderscore$/ -| tex-src/texinfo.tex /^\\let|=\\normalverticalbar$/ -. tex-src/texinfo.tex /^\\let\\.=\\ptexdot$/ -{ tex-src/texinfo.tex /^\\let\\{=\\ptexlbrace$/ -} tex-src/texinfo.tex /^\\let\\}=\\ptexrbrace$/ -* tex-src/texinfo.tex /^\\let\\*=\\ptexstar$/ -TeX_suffixes c-src/etags.c 672 tex tex-src/texinfo.tex /^\\def\\tex{\\begingroup$/ -TeX tex-src/texinfo.tex /^\\def\\TeX{\\realbackslash TeX}%$/ -TeX tex-src/texinfo.tex /^\\def\\TeX{\\realbackslash TeX}$/ -TeX tex-src/texinfo.tex /^\\let\\TeX=\\indexdummytex$/ +texinfoversion tex-src/texinfo.tex /^\\def\\texinfoversion{2.73}$/ textfonts tex-src/texinfo.tex /^\\def\\textfonts{%$/ -TEX_toktab c-src/etags.c 4908 texttreelist prol-src/natded.prolog /^texttreelist([]).$/ -/TF ps-src/rfc1245.ps /^\/TF { $/ thearg tex-src/texinfo.tex /^ \\def\\thearg{#1}%$/ thearg tex-src/texinfo.tex /^ \\ifx\\thearg\\empty \\def\\thearg{1}\\fi$/ there-is-a-=-in-the-middle! scm-src/test.scm /^(define (there-is-a-=-in-the-middle!) #t)$/ -thischaptername tex-src/texinfo.tex /^\\def\\thischaptername{No Chapter Title}$/ -thischaptername tex-src/texinfo.tex /^\\gdef\\thischaptername{#1}%$/ +this c-src/a/b/b.c 1 +this-command-keys c-src/emacs/src/keyboard.c /^DEFUN ("this-command-keys", Fthis_command_keys, St/ +this-command-keys-vector c-src/emacs/src/keyboard.c /^DEFUN ("this-command-keys-vector", Fthis_command_k/ +this-single-command-keys c-src/emacs/src/keyboard.c /^DEFUN ("this-single-command-keys", Fthis_single_co/ +this-single-command-raw-keys c-src/emacs/src/keyboard.c /^DEFUN ("this-single-command-raw-keys", Fthis_singl/ +this_command_key_count c-src/emacs/src/keyboard.c 108 +this_command_key_count_reset c-src/emacs/src/keyboard.c 112 +this_command_keys c-src/emacs/src/keyboard.c 107 +this_file_toc perl-src/htlmify-cystic 29 +this_single_command_key_start c-src/emacs/src/keyboard.c 125 +thischapter tex-src/texinfo.tex /^ \\unnumbchapmacro{#1}\\def\\thischapter{}%$/ thischapter tex-src/texinfo.tex /^\\def\\thischapter{} \\def\\thissection{}$/ thischapter tex-src/texinfo.tex /^\\gdef\\thischapter{#1}\\gdef\\thissection{#1}%$/ -thischapter tex-src/texinfo.tex /^ \\unnumbchapmacro{#1}\\def\\thischapter{}%$/ thischapter tex-src/texinfo.tex /^\\xdef\\thischapter{Appendix \\appendixletter: \\noexp/ thischapter tex-src/texinfo.tex /^\\xdef\\thischapter{Chapter \\the\\chapno: \\noexpand\\t/ -this_command_key_count c-src/emacs/src/keyboard.c 108 -this_command_key_count_reset c-src/emacs/src/keyboard.c 112 -this_command_keys c-src/emacs/src/keyboard.c 107 -this-command-keys c-src/emacs/src/keyboard.c /^DEFUN ("this-command-keys", Fthis_command_keys, St/ -this-command-keys-vector c-src/emacs/src/keyboard.c /^DEFUN ("this-command-keys-vector", Fthis_command_k/ -this c-src/a/b/b.c 1 +thischaptername tex-src/texinfo.tex /^\\def\\thischaptername{No Chapter Title}$/ +thischaptername tex-src/texinfo.tex /^\\gdef\\thischaptername{#1}%$/ thisfile tex-src/texinfo.tex /^\\def\\includezzz #1{{\\def\\thisfile{#1}\\input #1$/ thisfile tex-src/texinfo.tex /^\\def\\thisfile{}$/ -this_file_toc perl-src/htlmify-cystic 29 thisfootno tex-src/texinfo.tex /^\\edef\\thisfootno{$^{\\the\\footnoteno}$}%$/ thispage tex-src/texinfo.tex /^\\let\\thispage=\\folio$/ thissection tex-src/texinfo.tex /^\\def\\thischapter{} \\def\\thissection{}$/ @@ -4235,30 +4471,26 @@ thissection tex-src/texinfo.tex /^\\gdef\\thissection{#1}\\secheading {#1}{\\app thissection tex-src/texinfo.tex /^\\gdef\\thissection{#1}\\secheading {#1}{\\the\\chapno}/ thissection tex-src/texinfo.tex /^\\gdef\\thissection{#1}\\subsubsecno=0 \\global\\advanc/ thissection tex-src/texinfo.tex /^\\plainsecheading {#1}\\gdef\\thissection{#1}%$/ -this-single-command-keys c-src/emacs/src/keyboard.c /^DEFUN ("this-single-command-keys", Fthis_single_co/ -this_single_command_key_start c-src/emacs/src/keyboard.c 125 -this-single-command-raw-keys c-src/emacs/src/keyboard.c /^DEFUN ("this-single-command-raw-keys", Fthis_singl/ thistitle tex-src/texinfo.tex /^\\def\\settitlezzz #1{\\gdef\\thistitle{#1}}$/ thistitle tex-src/texinfo.tex /^\\def\\thistitle{No Title}$/ three tex-src/texinfo.tex /^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/ threex tex-src/texinfo.tex /^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/ tie tex-src/texinfo.tex /^\\def\\tie{\\penalty 10000\\ } % Save plain tex de/ tignore c-src/etags.c 2433 -timer_check_2 c-src/emacs/src/keyboard.c /^timer_check_2 (Lisp_Object timers, Lisp_Object idl/ timer_check c-src/emacs/src/keyboard.c /^timer_check (void)$/ +timer_check_2 c-src/emacs/src/keyboard.c /^timer_check_2 (Lisp_Object timers, Lisp_Object idl/ timer_idleness_start_time c-src/emacs/src/keyboard.c 335 timer_last_idleness_start_time c-src/emacs/src/keyboard.c 340 timer_resume_idle c-src/emacs/src/keyboard.c /^timer_resume_idle (void)$/ -timers_run c-src/emacs/src/keyboard.c 320 timer_start_idle c-src/emacs/src/keyboard.c /^timer_start_idle (void)$/ timer_stop_idle c-src/emacs/src/keyboard.c /^timer_stop_idle (void)$/ -Time_to_position c-src/emacs/src/keyboard.c /^Time_to_position (Time encoded_pos)$/ +timers_run c-src/emacs/src/keyboard.c 320 tinbody c-src/etags.c 2431 tindex tex-src/texinfo.tex /^\\def\\tindex {\\tpindex}$/ +title tex-src/texinfo.tex /^ \\def\\title{\\parsearg\\titlezzz}%$/ titlefont tex-src/texinfo.tex /^\\def\\titlefont#1{{\\titlerm #1}}$/ titlepage tex-src/texinfo.tex /^\\def\\titlepage{\\begingroup \\parindent=0pt \\textfon/ titlepage tex-src/texinfo.tex /^\\let\\titlepage=\\relax$/ -title tex-src/texinfo.tex /^ \\def\\title{\\parsearg\\titlezzz}%$/ titlezzz tex-src/texinfo.tex /^ \\def\\titlezzz##1{\\leftline{\\titlefont{##1}}$/ tkeyseen c-src/etags.c 2429 tnone c-src/etags.c 2428 @@ -4267,65 +4499,45 @@ today tex-src/texinfo.tex /^\\def\\today{\\number\\day\\space$/ toggleDescription objc-src/PackInsp.m /^-toggleDescription$/ tok c-src/etags.c 2491 token c-src/etags.c 2508 -tokenizeatom prol-src/natded.prolog /^tokenizeatom(Atom,Ws):-$/ -tokenize prol-src/natded.prolog /^tokenize([C1,C2,C3|Cs],Xs-Ys,TsResult):- % spe/ -tokentab2 y-src/cccp.y 442 token y-src/cccp.y 437 token y-src/cccp.y 439 -To_Lower pas-src/common.pas /^function To_Lower;(*(ch:char) : char;*)$/ +tokenize prol-src/natded.prolog /^tokenize([C1,C2,C3|Cs],Xs-Ys,TsResult):- % spe/ +tokenizeatom prol-src/natded.prolog /^tokenizeatom(Atom,Ws):-$/ +tokentab2 y-src/cccp.y 442 tool_bar_item_properties c-src/emacs/src/keyboard.c 7970 tool_bar_items c-src/emacs/src/keyboard.c /^tool_bar_items (Lisp_Object reuse, int *nitems)$/ tool_bar_items_vector c-src/emacs/src/keyboard.c 7965 toolkit_menubar_in_use c-src/emacs/src/keyboard.c /^toolkit_menubar_in_use (struct frame *f)$/ -top_level_1 c-src/emacs/src/keyboard.c /^top_level_1 (Lisp_Object ignore)$/ -top_level_2 c-src/emacs/src/keyboard.c /^top_level_2 (void)$/ -top-level c-src/emacs/src/keyboard.c /^DEFUN ("top-level", Ftop_level, Stop_level, 0, 0, / -top_level merc-src/accumulator.m /^:- type top_level$/ -Top tex-src/gzip.texi /^@node Top, , , (dir)$/ top tex-src/texinfo.tex /^\\let\\top=\\relax$/ top tex-src/texinfo.tex /^\\outer\\def\\top{\\parsearg\\unnumberedzzz}$/ -To_Start_Addr/f ada-src/2ataspri.adb /^ function To_Start_Addr is new$/ +top-level c-src/emacs/src/keyboard.c /^DEFUN ("top-level", Ftop_level, Stop_level, 0, 0, / +top_level merc-src/accumulator.m /^:- type top_level$/ +top_level_1 c-src/emacs/src/keyboard.c /^top_level_1 (Lisp_Object ignore)$/ +top_level_2 c-src/emacs/src/keyboard.c /^top_level_2 (void)$/ total_keys c-src/emacs/src/keyboard.c 97 -TOTAL_KEYWORDS c-src/etags.c 2325 -totally_unblock_input c-src/emacs/src/keyboard.c /^totally_unblock_input (void)$/ total_size_of_entries c-src/etags.c /^total_size_of_entries (register node *np)$/ total_surrounding cp-src/conway.cpp /^int site::total_surrounding(void)$/ -To_TCB_Ptr/f ada-src/2ataspri.adb /^ function To_TCB_Ptr is new$/ -To_Upper pas-src/common.pas /^function To_Upper;(*(ch:char) : char;*)$/ -To_void_ptr/f ada-src/2ataspri.adb /^ function To_void_ptr is new$/ +totally_unblock_input c-src/emacs/src/keyboard.c /^totally_unblock_input (void)$/ tpargs tex-src/texinfo.tex /^\\begingroup\\defname {#2}{#1}\\deftpargs{#3}\\endgrou/ tpcmd c-src/h.h 15 tpcmd c-src/h.h 8 tpheader tex-src/texinfo.tex /^\\def\\deftp{\\defvrparsebody\\Edeftp\\deftpx\\deftphead/ -/T ps-src/rfc1245.ps /^\/T { $/ tpx\deftpheader tex-src/texinfo.tex /^\\def\\deftp{\\defvrparsebody\\Edeftp\\deftpx\\deftphead/ -tracking_off c-src/emacs/src/keyboard.c /^tracking_off (Lisp_Object old_value)$/ track-mouse c-src/emacs/src/keyboard.c /^DEFUN ("internal--track-mouse", Ftrack_mouse, Stra/ +tracking_off c-src/emacs/src/keyboard.c /^tracking_off (Lisp_Object old_value)$/ traffic_light cp-src/conway.cpp /^void traffic_light(int x, int y)$/ translate c-src/emacs/src/regex.h 361 treats cp-src/c.C 131 -Truc.Bidule/b ada-src/etags-test-for.ada /^package body Truc.Bidule is$/ -Truc.Bidule/b ada-src/waroquiers.ada /^package body Truc.Bidule is$/ -Truc.Bidule/s ada-src/etags-test-for.ada /^package Truc.Bidule is$/ -Truc.Bidule/s ada-src/waroquiers.ada /^package Truc.Bidule is$/ -Truc/s ada-src/etags-test-for.ada /^package Truc is$/ -Truc/s ada-src/waroquiers.ada /^package Truc is$/ -TSL/s ada-src/2ataspri.adb /^ package TSL renames System.Tasking_Soft_Links;$/ -t tex-src/texinfo.tex /^\\def\\t##1{\\realbackslash r {##1}}%$/ -t tex-src/texinfo.tex /^\\def\\t#1{{\\tt \\exhyphenpenalty=10000\\rawbackslash / -t tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ -t tex-src/texinfo.tex /^\\let\\t=\\indexdummyfont$/ -ttfont tex-src/texinfo.tex /^\\let\\ttfont = \\t$/ tt prol-src/natded.prolog /^tt:-$/ tt tex-src/texinfo.tex /^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/ -tt tex-src/texinfo.tex /^\\def\\tt{\\realbackslash tt}%$/ tt tex-src/texinfo.tex /^\\def\\tt{\\realbackslash tt}$/ +tt tex-src/texinfo.tex /^\\def\\tt{\\realbackslash tt}%$/ tt tex-src/texinfo.tex /^\\font\\deftt=cmtt10 scaled \\magstep1$/ tt tex-src/texinfo.tex /^{\\let\\tentt=\\sectt \\let\\tt=\\sectt \\let\\sf=\\sectt$/ -ttypeseen c-src/etags.c 2430 +ttfont tex-src/texinfo.tex /^\\let\\ttfont = \\t$/ tty_read_avail_input c-src/emacs/src/keyboard.c /^tty_read_avail_input (struct terminal *terminal,$/ +ttypeseen c-src/etags.c 2430 turnoffactive tex-src/texinfo.tex /^\\def\\turnoffactive{\\let"=\\normaldoublequote$/ -/two ps-src/rfc1245.ps /^\/two \/three \/four \/five \/six \/seven \/eight \/nine \// typdef c-src/etags.c 2434 type c-src/emacs/src/gmalloc.c 145 type c-src/emacs/src/lisp.h 1973 @@ -4351,54 +4563,39 @@ typefunx\deftypefunheader tex-src/texinfo.tex /^\\def\\deftypefun{\\defparsebody typemargin tex-src/texinfo.tex /^\\newskip\\deftypemargin \\deftypemargin=12pt$/ typemargin tex-src/texinfo.tex /^\\rlap{\\rightline{{\\rm #2}\\hskip \\deftypemargin}}}%/ typemargin tex-src/texinfo.tex /^\\setbox0=\\hbox{\\hskip \\deflastargmargin{\\rm #2}\\hs/ -TYPE_RANGED_INTEGERP c-src/emacs/src/lisp.h /^#define TYPE_RANGED_INTEGERP(type, x) \\$/ -Type_Specific_Data/t ada-src/etags-test-for.ada /^ type Type_Specific_Data is record$/ -TYPESTOSTAT objc-src/PackInsp.h 37 typevarheader tex-src/texinfo.tex /^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/ typevarx\deftypevarheader tex-src/texinfo.tex /^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/ typevrheader tex-src/texinfo.tex /^\\def\\deftypevr{\\defvrparsebody\\Edeftypevr\\deftypev/ typevrx\deftypevrheader tex-src/texinfo.tex /^\\def\\deftypevr{\\defvrparsebody\\Edeftypevr\\deftypev/ -/Uacute ps-src/rfc1245.ps /^\/Uacute \/Ucircumflex \/Ugrave \/dotlessi \/circumflex/ +u c-src/emacs/src/lisp.h 2397 u_any c-src/emacs/src/lisp.h 2214 u_boolfwd c-src/emacs/src/lisp.h 2371 u_buffer_objfwd c-src/emacs/src/lisp.h 2373 -UCHAR c-src/emacs/src/lisp.h 2424 -_UCHAR_T c-src/emacs/src/lisp.h 2423 -U_CHAR y-src/cccp.y 38 -u c-src/emacs/src/lisp.h 2397 -/udieresis ps-src/rfc1245.ps /^\/udieresis \/dagger \/.notdef \/cent \/sterling \/secti/ u_finalizer c-src/emacs/src/lisp.h 2219 u_free c-src/emacs/src/lisp.h 2215 u_intfwd c-src/emacs/src/lisp.h 2370 u_kboard_objfwd c-src/emacs/src/lisp.h 2374 u_marker c-src/emacs/src/lisp.h 2216 +u_objfwd c-src/emacs/src/lisp.h 2372 +u_overlay c-src/emacs/src/lisp.h 2217 +u_save_value c-src/emacs/src/lisp.h 2218 unargs tex-src/texinfo.tex /^\\begingroup\\defname {#2}{#1}\\defunargs{#3}\\endgrou/ unargs tex-src/texinfo.tex /^\\defunargs {#2}\\endgroup %$/ unargs tex-src/texinfo.tex /^\\defunargs {#3}\\endgroup %$/ -UNARY y-src/cccp.c 18 unblock_input c-src/emacs/src/keyboard.c /^unblock_input (void)$/ unblock_input_to c-src/emacs/src/keyboard.c /^unblock_input_to (int level)$/ unchar c-src/h.h 99 -UNDEFINED c-src/h.h 118 -UNEVALLED c-src/emacs/src/lisp.h 2834 unexpand-abbrev c-src/abbrev.c /^DEFUN ("unexpand-abbrev", Funexpand_abbrev, Sunexp/ -UNGCPRO c-src/emacs/src/lisp.h 3202 -UNGCPRO c-src/emacs/src/lisp.h 3257 -UNGCPRO c-src/emacs/src/lisp.h 3353 unheader tex-src/texinfo.tex /^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/ univ merc-src/accumulator.m /^:- import_module univ.$/ -UNLOCK_ALIGNED_BLOCKS c-src/emacs/src/gmalloc.c /^#define UNLOCK_ALIGNED_BLOCKS() \\$/ -UNLOCK_ALIGNED_BLOCKS c-src/emacs/src/gmalloc.c /^#define UNLOCK_ALIGNED_BLOCKS()$/ -UNLOCK c-src/emacs/src/gmalloc.c /^#define UNLOCK() \\$/ -UNLOCK c-src/emacs/src/gmalloc.c /^#define UNLOCK()$/ -Unlock/p ada-src/2ataspri.adb /^ procedure Unlock (L : in out Lock) is$/ -Unlock/p ada-src/2ataspri.ads /^ procedure Unlock (L : in out Lock);$/ unnchfopen tex-src/texinfo.tex /^\\def\\unnchfopen #1{%$/ unnchfplain tex-src/texinfo.tex /^\\def\\unnchfplain #1{%$/ -unnumbchapentry tex-src/texinfo.tex /^\\def\\unnumbchapentry#1#2{\\dochapentry{#1}{#2}}$/ unnumbchapentry tex-src/texinfo.tex /^ \\let\\unnumbchapentry = \\shortunnumberedentry/ +unnumbchapentry tex-src/texinfo.tex /^\\def\\unnumbchapentry#1#2{\\dochapentry{#1}{#2}}$/ unnumbchapmacro tex-src/texinfo.tex /^\\global\\let\\unnumbchapmacro=\\unnchfopen}$/ unnumbchapmacro tex-src/texinfo.tex /^\\global\\let\\unnumbchapmacro=\\unnchfplain}$/ +unnumbered tex-src/texinfo.tex /^\\let\\unnumbered=\\relax$/ +unnumbered tex-src/texinfo.tex /^\\outer\\def\\unnumbered{\\parsearg\\unnumberedzzz}$/ unnumberedsec tex-src/texinfo.tex /^\\let\\unnumberedsec=\\relax$/ unnumberedsec tex-src/texinfo.tex /^\\outer\\def\\unnumberedsec{\\parsearg\\unnumberedseczz/ unnumberedsection tex-src/texinfo.tex /^\\let\\unnumberedsection=\\relax$/ @@ -4411,8 +4608,6 @@ unnumberedsubsubsec tex-src/texinfo.tex /^\\let\\unnumberedsubsubsec=\\relax$/ unnumberedsubsubsec tex-src/texinfo.tex /^\\outer\\def\\unnumberedsubsubsec{\\parsearg\\unnumbere/ unnumberedsubsubsection tex-src/texinfo.tex /^\\let\\unnumberedsubsubsection=\\relax$/ unnumberedsubsubseczzz tex-src/texinfo.tex /^\\def\\unnumberedsubsubseczzz #1{\\seccheck{unnumbere/ -unnumbered tex-src/texinfo.tex /^\\let\\unnumbered=\\relax$/ -unnumbered tex-src/texinfo.tex /^\\outer\\def\\unnumbered{\\parsearg\\unnumberedzzz}$/ unnumberedzzz tex-src/texinfo.tex /^\\def\\unnumberedzzz #1{\\seccheck{unnumbered}%$/ unnumbnoderef tex-src/texinfo.tex /^\\def\\unnumbnoderef{\\ifx\\lastnode\\relax\\else$/ unnumbsecentry tex-src/texinfo.tex /^ \\def\\unnumbsecentry ##1##2{}$/ @@ -4424,104 +4619,66 @@ unnumbsubsubsecentry tex-src/texinfo.tex /^ \\def\\unnumbsubsubsecentry ##1 unnumbsubsubsecentry tex-src/texinfo.tex /^\\def\\unnumbsubsubsecentry#1#2{\\dosubsubsecentry{#1/ unravel_univ merc-src/accumulator.m /^:- some [T] pred unravel_univ(univ::in, T::out) is/ unread_switch_frame c-src/emacs/src/keyboard.c 204 -UNSIGNED_CMP c-src/emacs/src/lisp.h /^#define UNSIGNED_CMP(a, op, b) \\$/ unsignedp y-src/cccp.y 112 unwind c-src/emacs/src/lisp.h 2962 unwind_int c-src/emacs/src/lisp.h 2972 unwind_ptr c-src/emacs/src/lisp.h 2967 unwind_void c-src/emacs/src/lisp.h 2976 unx\defunheader tex-src/texinfo.tex /^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/ -u_objfwd c-src/emacs/src/lisp.h 2372 -u_overlay c-src/emacs/src/lisp.h 2217 -__up c.c 160 update_accumulator_pred merc-src/accumulator.m /^:- pred update_accumulator_pred(pred_id::in, proc_/ uppercaseenumerate tex-src/texinfo.tex /^\\def\\uppercaseenumerate{%$/ uprintmax_t c-src/emacs/src/lisp.h 149 uprintmax_t c-src/emacs/src/lisp.h 154 -/U ps-src/rfc1245.ps /^\/U { $/ usage perl-src/yagrip.pl /^sub usage {$/ -u_save_value c-src/emacs/src/lisp.h 2218 usecharno c-src/etags.c 210 used c-src/emacs/src/regex.h 347 used_syntax c-src/emacs/src/regex.h 398 -USE_LSB_TAG c-src/emacs/src/lisp.h 271 -USE_LSB_TAG c-src/emacs/src/lisp.h /^DEFINE_GDB_SYMBOL_BEGIN (bool, USE_LSB_TAG)$/ -USE_PTHREAD c-src/emacs/src/gmalloc.c 25 user_cmp_function c-src/emacs/src/lisp.h 1814 -UserEdit pyt-src/server.py /^class UserEdit(Frame):$/ user_error c-src/emacs/src/keyboard.c /^user_error (const char *msg)$/ user_hash_function c-src/emacs/src/lisp.h 1811 -User pyt-src/server.py /^class User:$/ user_signal_info c-src/emacs/src/keyboard.c 7235 user_signals c-src/emacs/src/keyboard.c 7250 -USE_SAFE_ALLOCA c-src/emacs/src/lisp.h 4560 -USE_STACK_CONS c-src/emacs/src/lisp.h 4689 -USE_STACK_LISP_OBJECTS c-src/emacs/src/lisp.h 4652 -USE_STACK_LISP_OBJECTS c-src/emacs/src/lisp.h 4658 -USE_STACK_LISP_OBJECTS c-src/emacs/src/lisp.h 4659 -USE_STACK_STRING c-src/emacs/src/lisp.h 4691 usfreelock_ptr/t ada-src/etags-test-for.ada /^ type usfreelock_ptr is access$/ -Vabbrev_start_location_buffer c-src/abbrev.c 66 -Vabbrev_start_location c-src/abbrev.c 63 -Vabbrev_table_name_list c-src/abbrev.c 43 -VALBITS c-src/emacs/src/lisp.h 246 -valcell c-src/emacs/src/lisp.h 2357 val c-src/emacs/src/lisp.h 3027 val c-src/emacs/src/lisp.h 691 val c-src/getopt.h 84 -validate php-src/lce_functions.php /^ function validate($value)$/ +val prol-src/natded.prolog /^val(X) --> ['['], valseq(X), [']'].$/ +valcell c-src/emacs/src/lisp.h 2357 valid c-src/etags.c 220 valid c-src/etags.c 2502 +validate php-src/lce_functions.php /^ function validate($value)$/ valloc c-src/emacs/src/gmalloc.c /^valloc (size_t size)$/ -VALMASK c-src/emacs/src/lisp.h 829 -VALMASK c-src/emacs/src/lisp.h /^DEFINE_GDB_SYMBOL_BEGIN (EMACS_INT, VALMASK)$/ -VAL_MAX c-src/emacs/src/lisp.h 263 -val prol-src/natded.prolog /^val(X) --> ['['], valseq(X), [']'].$/ valseq prol-src/natded.prolog /^valseq([Val|Vals]) --> val(Val), plusvalseq(Vals)./ -ValToNmStr pas-src/common.pas /^function ValToNmStr; (*($/ value c-src/emacs/src/lisp.h 687 value y-src/cccp.y 112 +var c-src/emacs/src/keyboard.c 11023 +var c-src/emacs/src/lisp.h 3137 +var tex-src/texinfo.tex /^\\def\\var##1{\\realbackslash var {##1}}$/ +var tex-src/texinfo.tex /^\\def\\var##1{\\realbackslash var {##1}}%$/ +var tex-src/texinfo.tex /^\\let\\var=\\indexdummyfont$/ +var tex-src/texinfo.tex /^\\let\\var=\\smartitalic$/ varargs tex-src/texinfo.tex /^\\begingroup\\defname {#2}{#1}\\defvarargs{#3}\\endgro/ varargs tex-src/texinfo.tex /^\\def\\deftpargs #1{\\bf \\defvarargs{#1}}$/ varargs tex-src/texinfo.tex /^\\defvarargs {#2}\\endgroup %$/ varargs tex-src/texinfo.tex /^\\defvarargs {#3}\\endgroup %$/ -var c-src/emacs/src/keyboard.c 11023 -var c-src/emacs/src/lisp.h 3137 varheader tex-src/texinfo.tex /^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/ varparsebody\Edefopt tex-src/texinfo.tex /^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/ varparsebody\Edeftypevar tex-src/texinfo.tex /^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/ varparsebody\Edefvar tex-src/texinfo.tex /^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/ varset merc-src/accumulator.m /^:- import_module varset.$/ -var tex-src/texinfo.tex /^\\def\\var##1{\\realbackslash var {##1}}%$/ -var tex-src/texinfo.tex /^\\def\\var##1{\\realbackslash var {##1}}$/ -var tex-src/texinfo.tex /^\\let\\var=\\indexdummyfont$/ -var tex-src/texinfo.tex /^\\let\\var=\\smartitalic$/ varx\defvarheader tex-src/texinfo.tex /^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/ vcopy c-src/emacs/src/lisp.h /^vcopy (Lisp_Object v, ptrdiff_t offset, Lisp_Objec/ -VECSIZE c-src/emacs/src/lisp.h /^#define VECSIZE(type) \\$/ vectorlike_header c-src/emacs/src/lisp.h 1343 -VECTORLIKEP c-src/emacs/src/lisp.h /^# define VECTORLIKEP(x) lisp_h_VECTORLIKEP (x)$/ -VECTORP c-src/emacs/src/lisp.h /^VECTORP (Lisp_Object x)$/ verde cp-src/c.C 40 -verify_ascii c-src/emacs/src/lisp.h /^# define verify_ascii(str) (str)$/ verify-tags-table-function el-src/emacs/lisp/progmodes/etags.el /^(defvar verify-tags-table-function nil$/ -VERSION c-src/etags.c 789 -VERSION erl-src/gs_dialog.erl /^-define(VERSION, '2001.1101').$/ -VERSION objc-src/PackInsp.m 34 -Vfundamental_mode_abbrev_table c-src/abbrev.c 52 -Vglobal_abbrev_table c-src/abbrev.c 48 -VHDLFLAGS make-src/Makefile /^VHDLFLAGS=--language=none --regex='\/[ \\t]*\\(ARCHIT/ +verify_ascii c-src/emacs/src/lisp.h /^# define verify_ascii(str) (str)$/ vignore c-src/etags.c 2417 vindex tex-src/texinfo.tex /^\\def\\vindex {\\vrindex}$/ -visit-tags-table-buffer el-src/emacs/lisp/progmodes/etags.el /^(defun visit-tags-table-buffer (&optional cont)$/ visit-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun visit-tags-table (file &optional local)$/ -Vlast_abbrev c-src/abbrev.c 70 -Vlast_abbrev_text c-src/abbrev.c 75 -Vlispy_mouse_stem c-src/emacs/src/keyboard.c 5172 +visit-tags-table-buffer el-src/emacs/lisp/progmodes/etags.el /^(defun visit-tags-table-buffer (&optional cont)$/ void c-src/emacs/src/lisp.h /^INLINE void (check_cons_list) (void) { lisp_h_chec/ voidfuncptr c-src/emacs/src/lisp.h 2108 voidval y-src/cccp.y 115 -/V ps-src/rfc1245.ps /^\/V { $/ vrheader tex-src/texinfo.tex /^\\def\\defvr{\\defvrparsebody\\Edefvr\\defvrx\\defvrhead/ vritemindex tex-src/texinfo.tex /^\\def\\vritemindex #1{\\doind {vr}{\\code{#1}}}%$/ vrparsebody\Edefivar tex-src/texinfo.tex /^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/ @@ -4531,80 +4688,49 @@ vrparsebody\Edefvr tex-src/texinfo.tex /^\\def\\defvr{\\defvrparsebody\\Edefvr\\ vrx\defvrheader tex-src/texinfo.tex /^\\def\\defvr{\\defvrparsebody\\Edefvr\\defvrx\\defvrhead/ vtable tex-src/texinfo.tex /^\\def\\vtable{\\begingroup\\inENV\\obeylines\\obeyspaces/ vtablex tex-src/texinfo.tex /^\\gdef\\vtablex #1^^M{%$/ -waiting_for_input c-src/emacs/src/keyboard.c 150 -WAIT_READING_MAX c-src/emacs/src/lisp.h 4281 -WAIT_READING_MAX c-src/emacs/src/lisp.h 4283 +w tex-src/texinfo.tex /^\\def\\w#1{\\leavevmode\\hbox{#1}}$/ +w tex-src/texinfo.tex /^\\def\\w{\\realbackslash w }%$/ +w tex-src/texinfo.tex /^\\def\\w{\\realbackslash w}$/ +w tex-src/texinfo.tex /^\\let\\w=\\indexdummyfont$/ wait_status_ptr_t c.c 161 -WARNINGS make-src/Makefile /^WARNINGS=-pedantic -Wall -Wpointer-arith -Winline / +waiting_for_input c-src/emacs/src/keyboard.c 150 warning y-src/cccp.y /^warning (msg)$/ -/wbytes ps-src/rfc1245.ps /^\/wbytes { $/ -WCHAR_TYPE_SIZE y-src/cccp.y 99 -weak_alias c-src/emacs/src/gmalloc.c /^weak_alias (free, cfree)$/ weak c-src/emacs/src/lisp.h 1830 +weak_alias c-src/emacs/src/gmalloc.c /^weak_alias (free, cfree)$/ web ftp publish make-src/Makefile /^web ftp publish:$/ what c-src/etags.c 252 wheel_syms c-src/emacs/src/keyboard.c 4628 -where cp-src/clheir.hpp 77 where c-src/emacs/src/lisp.h 2348 where c-src/emacs/src/lisp.h 2980 +where cp-src/clheir.hpp 77 where_in_registry cp-src/clheir.hpp 15 -WHITE cp-src/screen.hpp 27 -/wh ps-src/rfc1245.ps /^\/wh { $/ -WINDOW_CONFIGURATIONP c-src/emacs/src/lisp.h /^WINDOW_CONFIGURATIONP (Lisp_Object a)$/ -WINDOWP c-src/emacs/src/lisp.h /^WINDOWP (Lisp_Object a)$/ -WINDOWSNT c-src/etags.c 101 -WINDOWSNT c-src/etags.c 102 windowWillClose objcpp-src/SimpleCalc.M /^- windowWillClose:sender$/ wipe_kboard c-src/emacs/src/keyboard.c /^wipe_kboard (KBOARD *kb)$/ womboid c-src/h.h 63 womboid c-src/h.h 75 word_size c-src/emacs/src/lisp.h 1473 -WorkingDays cp-src/functions.cpp /^int WorkingDays(Date a, Date b){$/ -WORKING objc-src/PackInsp.m 368 -/W ps-src/rfc1245.ps /^\/W { $/ +write php-src/lce_functions.php /^ function write($save="yes")$/ +write php-src/lce_functions.php /^ function write()$/ write1= ruby-src/test1.ru /^ attr_reader :read1 , :read2; attr_writer :writ/ write2= ruby-src/test1.ru /^ attr_reader :read1 , :read2; attr_writer :writ/ write_abbrev c-src/abbrev.c /^write_abbrev (sym, stream)$/ -writebreaklex prol-src/natded.prolog /^writebreaklex([]).$/ -writebreak prol-src/natded.prolog /^writebreak([]).$/ -writecat prol-src/natded.prolog /^writecat(np(ind(sng),nm(_)),np,[],[]):-!.$/ write_classname c-src/etags.c /^write_classname (linebuffer *cn, const char *quali/ -write_lex_cat prol-src/natded.prolog /^write_lex_cat(File):-$/ write_lex prol-src/natded.prolog /^write_lex(File):-$/ +write_lex_cat prol-src/natded.prolog /^write_lex_cat(File):-$/ +write_xyc cp-src/screen.cpp /^void write_xyc(int x, int y, char c)$/ +writebreak prol-src/natded.prolog /^writebreak([]).$/ +writebreaklex prol-src/natded.prolog /^writebreaklex([]).$/ +writecat prol-src/natded.prolog /^writecat(np(ind(sng),nm(_)),np,[],[]):-!.$/ writelist prol-src/natded.prolog /^writelist([der(Ws)|Ws2]):-$/ writelistsubs prol-src/natded.prolog /^writelistsubs([],X):-$/ -Write_Lock/p ada-src/2ataspri.adb /^ procedure Write_Lock (L : in out Lock; Ceiling_/ -Write_Lock/p ada-src/2ataspri.ads /^ procedure Write_Lock (L : in out Lock; Ceiling_/ writenamestring pas-src/common.pas /^procedure writenamestring;(*($/ -write php-src/lce_functions.php /^ function write()$/ -write php-src/lce_functions.php /^ function write($save="yes")$/ writesubs prol-src/natded.prolog /^writesubs([]).$/ writesups prol-src/natded.prolog /^writesups([]).$/ -write_xyc cp-src/screen.cpp /^void write_xyc(int x, int y, char c)$/ written c-src/etags.c 211 -w tex-src/texinfo.tex /^\\def\\w#1{\\leavevmode\\hbox{#1}}$/ -w tex-src/texinfo.tex /^\\def\\w{\\realbackslash w }%$/ -w tex-src/texinfo.tex /^\\def\\w{\\realbackslash w}$/ -w tex-src/texinfo.tex /^\\let\\w=\\indexdummyfont$/ -XBOOL_VECTOR c-src/emacs/src/lisp.h /^XBOOL_VECTOR (Lisp_Object a)$/ -XBUFFER c-src/emacs/src/lisp.h /^XBUFFER (Lisp_Object a)$/ -XBUFFER_OBJFWD c-src/emacs/src/lisp.h /^XBUFFER_OBJFWD (union Lisp_Fwd *a)$/ -xcar_addr c-src/emacs/src/lisp.h /^xcar_addr (Lisp_Object c)$/ -XCAR c-src/emacs/src/lisp.h /^# define XCAR(c) lisp_h_XCAR (c)$/ x c.c 153 x c.c 179 x c.c 188 x c.c 189 -xcdr_addr c-src/emacs/src/lisp.h /^xcdr_addr (Lisp_Object c)$/ -XCDR c-src/emacs/src/lisp.h /^# define XCDR(c) lisp_h_XCDR (c)$/ -XCHAR_TABLE c-src/emacs/src/lisp.h /^XCHAR_TABLE (Lisp_Object a)$/ -XCHG_0 c-src/sysdep.h 47 -XCHG_1 c-src/sysdep.h 48 -XCHG_2 c-src/sysdep.h 49 -XCHG_3 c-src/sysdep.h 50 -XCHG_4 c-src/sysdep.h 51 -XCHG_5 c-src/sysdep.h 52 -XCONS c-src/emacs/src/lisp.h /^# define XCONS(a) lisp_h_XCONS (a)$/ x cp-src/c.C 53 x cp-src/c.C 80 x cp-src/clheir.hpp 49 @@ -4612,219 +4738,80 @@ x cp-src/clheir.hpp 58 x cp-src/conway.hpp 7 x cp-src/fail.C 10 x cp-src/fail.C 44 -X c-src/h.h 100 -XDEFUN c.c /^XDEFUN ("x-get-selection-internal", Fx_get_selecti/ -xdiff make-src/Makefile /^xdiff: ETAGS EXTAGS ${infiles}$/ -XFASTINT c-src/emacs/src/lisp.h /^# define XFASTINT(a) lisp_h_XFASTINT (a)$/ -XFASTINT c-src/emacs/src/lisp.h /^XFASTINT (Lisp_Object a)$/ -XFINALIZER c-src/emacs/src/lisp.h /^XFINALIZER (Lisp_Object a)$/ -XFLOAT c-src/emacs/src/lisp.h /^XFLOAT (Lisp_Object a)$/ -XFLOAT_DATA c-src/emacs/src/lisp.h /^XFLOAT_DATA (Lisp_Object f)$/ -XFLOATINT c-src/emacs/src/lisp.h /^XFLOATINT (Lisp_Object n)$/ -XFWDTYPE c-src/emacs/src/lisp.h /^XFWDTYPE (union Lisp_Fwd *a)$/ -x-get-selection-internal c.c /^DEFUN ("x-get-selection-internal", Fx_get_selectio/ +x tex-src/texinfo.tex /^\\refx{#1-snt}{} [\\printednodename], page\\tie\\refx{/ x-get-selection-internal c.c /^ Fx_get_selection_internal, Sx_get_selection/ -XHASH c-src/emacs/src/lisp.h /^# define XHASH(a) lisp_h_XHASH (a)$/ -XHASH_TABLE c-src/emacs/src/lisp.h /^XHASH_TABLE (Lisp_Object a)$/ -XIL c-src/emacs/src/lisp.h /^# define XIL(i) lisp_h_XIL (i)$/ -XINT c-src/emacs/src/lisp.h /^# define XINT(a) lisp_h_XINT (a)$/ -XINT c-src/emacs/src/lisp.h /^XINT (Lisp_Object a)$/ -XINTPTR c-src/emacs/src/lisp.h /^XINTPTR (Lisp_Object a)$/ -xitemsubtopix tex-src/texinfo.tex /^\\def\\internalBxitem "#1"{\\def\\xitemsubtopix{#1} \\s/ -xitemsubtopix tex-src/texinfo.tex /^\\def\\internalBxitemx "#1"{\\def\\xitemsubtopix{#1} \\/ +x-get-selection-internal c.c /^DEFUN ("x-get-selection-internal", Fx_get_selectio/ +xcar_addr c-src/emacs/src/lisp.h /^xcar_addr (Lisp_Object c)$/ +xcdr_addr c-src/emacs/src/lisp.h /^xcdr_addr (Lisp_Object c)$/ +xdiff make-src/Makefile /^xdiff: ETAGS EXTAGS ${infiles}$/ xitem tex-src/texinfo.tex /^\\def\\xitem{\\errmessage{@xitem while not in a table/ xitem tex-src/texinfo.tex /^\\let\\xitem = \\internalBxitem %$/ +xitemsubtopix tex-src/texinfo.tex /^\\def\\internalBxitem "#1"{\\def\\xitemsubtopix{#1} \\s/ +xitemsubtopix tex-src/texinfo.tex /^\\def\\internalBxitemx "#1"{\\def\\xitemsubtopix{#1} \\/ xitemx tex-src/texinfo.tex /^\\def\\xitemx{\\errmessage{@xitemx while not in a tab/ xitemx tex-src/texinfo.tex /^\\let\\xitemx = \\internalBxitemx %$/ xitemzzz tex-src/texinfo.tex /^\\def\\xitemzzz #1{\\dosubind {kw}{\\code{#1}}{for {\\b/ xkey tex-src/texinfo.tex /^\\def\\xkey{\\key}$/ -XLI_BUILTIN_LISPSYM c-src/emacs/src/lisp.h /^#define XLI_BUILTIN_LISPSYM(iname) TAG_SYMOFFSET (/ -XLI c-src/emacs/src/lisp.h /^# define XLI(o) lisp_h_XLI (o)$/ xmalloc c-src/etags.c /^xmalloc (size_t size)$/ -XMARKER c-src/emacs/src/lisp.h /^XMARKER (Lisp_Object a)$/ -XMISCANY c-src/emacs/src/lisp.h /^XMISCANY (Lisp_Object a)$/ -XMISC c-src/emacs/src/lisp.h /^XMISC (Lisp_Object a)$/ -XMISCTYPE c-src/emacs/src/lisp.h /^XMISCTYPE (Lisp_Object a)$/ xnew c-src/etags.c /^#define xnew(n, Type) ((Type *) xmalloc ((n) / -XOVERLAY c-src/emacs/src/lisp.h /^XOVERLAY (Lisp_Object a)$/ -XPNTR c-src/emacs/src/lisp.h /^# define XPNTR(a) lisp_h_XPNTR (a)$/ -XPROCESS c-src/emacs/src/lisp.h /^XPROCESS (Lisp_Object a)$/ -/X ps-src/rfc1245.ps /^\/X { $/ xrdef tex-src/texinfo.tex /^\\def\\xrdef #1#2{$/ xrealloc c-src/etags.c /^xrealloc (void *ptr, size_t size)$/ +xref tex-src/texinfo.tex /^\\def\\xref#1{See \\xrefX[#1,,,,,,,]}$/ xref-etags-location el-src/emacs/lisp/progmodes/etags.el /^(defclass xref-etags-location (xref-location)$/ xref-location-line el-src/emacs/lisp/progmodes/etags.el /^(cl-defmethod xref-location-line ((l xref-etags-lo/ xref-location-marker el-src/emacs/lisp/progmodes/etags.el /^(cl-defmethod xref-location-marker ((l xref-etags-/ xref-make-etags-location el-src/emacs/lisp/progmodes/etags.el /^(defun xref-make-etags-location (tag-info file)$/ -xref tex-src/texinfo.tex /^\\def\\xref#1{See \\xrefX[#1,,,,,,,]}$/ -xreftie tex-src/texinfo.tex /^\\gdef\\xreftie{'tie}$/ xrefX tex-src/texinfo.tex /^\\def\\xrefX[#1,#2,#3,#4,#5,#6]{\\begingroup%$/ +xreftie tex-src/texinfo.tex /^\\gdef\\xreftie{'tie}$/ xrnew c-src/etags.c /^#define xrnew(op, n, Type) ((op) = (Type *) xreall/ -XSAVE_FUNCPOINTER c-src/emacs/src/lisp.h /^XSAVE_FUNCPOINTER (Lisp_Object obj, int n)$/ -XSAVE_INTEGER c-src/emacs/src/lisp.h /^XSAVE_INTEGER (Lisp_Object obj, int n)$/ -XSAVE_OBJECT c-src/emacs/src/lisp.h /^XSAVE_OBJECT (Lisp_Object obj, int n)$/ -XSAVE_POINTER c-src/emacs/src/lisp.h /^XSAVE_POINTER (Lisp_Object obj, int n)$/ -XSAVE_VALUE c-src/emacs/src/lisp.h /^XSAVE_VALUE (Lisp_Object a)$/ -XSETBOOL_VECTOR c-src/emacs/src/lisp.h /^#define XSETBOOL_VECTOR(a, b) (XSETPSEUDOVECTOR (a/ -XSETBUFFER c-src/emacs/src/lisp.h /^#define XSETBUFFER(a, b) (XSETPSEUDOVECTOR (a, b, / -XSETCDR c-src/emacs/src/lisp.h /^XSETCDR (Lisp_Object c, Lisp_Object n)$/ -XSETCHAR_TABLE c-src/emacs/src/lisp.h /^#define XSETCHAR_TABLE(a, b) (XSETPSEUDOVECTOR (a,/ -XSETCOMPILED c-src/emacs/src/lisp.h /^#define XSETCOMPILED(a, b) (XSETPSEUDOVECTOR (a, b/ -XSETCONS c-src/emacs/src/lisp.h /^#define XSETCONS(a, b) ((a) = make_lisp_ptr (b, Li/ -XSETFASTINT c-src/emacs/src/lisp.h /^#define XSETFASTINT(a, b) ((a) = make_natnum (b))$/ -XSETFLOAT c-src/emacs/src/lisp.h /^#define XSETFLOAT(a, b) ((a) = make_lisp_ptr (b, L/ -XSET_HASH_TABLE c-src/emacs/src/lisp.h /^#define XSET_HASH_TABLE(VAR, PTR) \\$/ -XSETINT c-src/emacs/src/lisp.h /^#define XSETINT(a, b) ((a) = make_number (b))$/ -XSETMISC c-src/emacs/src/lisp.h /^#define XSETMISC(a, b) ((a) = make_lisp_ptr (b, Li/ -XSETPROCESS c-src/emacs/src/lisp.h /^#define XSETPROCESS(a, b) (XSETPSEUDOVECTOR (a, b,/ -XSETPSEUDOVECTOR c-src/emacs/src/lisp.h /^#define XSETPSEUDOVECTOR(a, b, code) \\$/ -XSETPVECTYPE c-src/emacs/src/lisp.h /^#define XSETPVECTYPE(v, code) \\$/ -XSETPVECTYPESIZE c-src/emacs/src/lisp.h /^#define XSETPVECTYPESIZE(v, code, lispsize, restsi/ -XSETSTRING c-src/emacs/src/lisp.h /^#define XSETSTRING(a, b) ((a) = make_lisp_ptr (b, / -XSETSUB_CHAR_TABLE c-src/emacs/src/lisp.h /^#define XSETSUB_CHAR_TABLE(a, b) (XSETPSEUDOVECTOR/ -XSETSUBR c-src/emacs/src/lisp.h /^#define XSETSUBR(a, b) (XSETPSEUDOVECTOR (a, b, PV/ -XSETSYMBOL c-src/emacs/src/lisp.h /^#define XSETSYMBOL(a, b) ((a) = make_lisp_symbol (/ -XSETTERMINAL c-src/emacs/src/lisp.h /^#define XSETTERMINAL(a, b) (XSETPSEUDOVECTOR (a, b/ -XSETTYPED_PSEUDOVECTOR c-src/emacs/src/lisp.h /^#define XSETTYPED_PSEUDOVECTOR(a, b, size, code) / -XSETVECTOR c-src/emacs/src/lisp.h /^#define XSETVECTOR(a, b) ((a) = make_lisp_ptr (b, / -XSETWINDOW_CONFIGURATION c-src/emacs/src/lisp.h /^#define XSETWINDOW_CONFIGURATION(a, b) \\$/ -XSETWINDOW c-src/emacs/src/lisp.h /^#define XSETWINDOW(a, b) (XSETPSEUDOVECTOR (a, b, / -XSTRING c-src/emacs/src/lisp.h /^XSTRING (Lisp_Object a)$/ -XSUB_CHAR_TABLE c-src/emacs/src/lisp.h /^XSUB_CHAR_TABLE (Lisp_Object a)$/ -XSUBR c-src/emacs/src/lisp.h /^XSUBR (Lisp_Object a)$/ -XSYMBOL c-src/emacs/src/lisp.h /^# define XSYMBOL(a) lisp_h_XSYMBOL (a)$/ -XSYMBOL c-src/emacs/src/lisp.h /^XSYMBOL (Lisp_Object a)$/ -XTERMINAL c-src/emacs/src/lisp.h /^XTERMINAL (Lisp_Object a)$/ -x tex-src/texinfo.tex /^\\refx{#1-snt}{} [\\printednodename], page\\tie\\refx{/ -XTYPE c-src/emacs/src/lisp.h /^# define XTYPE(a) lisp_h_XTYPE (a)$/ -XTYPE c-src/emacs/src/lisp.h /^XTYPE (Lisp_Object a)$/ -XUNTAG c-src/emacs/src/lisp.h /^# define XUNTAG(a, type) lisp_h_XUNTAG (a, type)$/ -XUNTAG c-src/emacs/src/lisp.h /^XUNTAG (Lisp_Object a, int type)$/ -XWINDOW c-src/emacs/src/lisp.h /^XWINDOW (Lisp_Object a)$/ -XX cp-src/x.cc 1 xx make-src/Makefile /^xx="this line is here because of a fontlock bug$/ xyz ruby-src/test1.ru /^ alias_method :xyz,$/ -Xyzzy ruby-src/test1.ru 13 -YACC c-src/etags.c 2199 -Yacc_entries c-src/etags.c /^Yacc_entries (FILE *inf)$/ -Yacc_help c-src/etags.c 693 -Yacc_suffixes c-src/etags.c 691 -Yappendixletterandtype tex-src/texinfo.tex /^\\def\\Yappendixletterandtype{%$/ y cp-src/clheir.hpp 49 y cp-src/clheir.hpp 58 y cp-src/conway.hpp 7 -Y c-src/h.h 100 -YELLOW cp-src/screen.hpp 26 -/yen ps-src/rfc1245.ps /^\/yen \/.notdef \/.notdef \/.notdef \/.notdef \/.notdef / y-get-selection-internal c.c /^ Fy_get_selection_internal, Sy_get_selection_/ -Ynothing tex-src/texinfo.tex /^\\def\\Ynothing{}$/ -Ypagenumber tex-src/texinfo.tex /^\\def\\Ypagenumber{\\folio}$/ -/Y ps-src/rfc1245.ps /^\/Y { $/ -Ysectionnumberandtype tex-src/texinfo.tex /^\\def\\Ysectionnumberandtype{%$/ -YSRC make-src/Makefile /^YSRC=parse.y parse.c atest.y cccp.c cccp.y$/ -Ytitle tex-src/texinfo.tex /^\\def\\Ytitle{\\thischapter}$/ -YYABORT /usr/share/bison/bison.simple 154 -YYACCEPT /usr/share/bison/bison.simple 153 yyalloc /usr/share/bison/bison.simple 84 -YYBACKUP /usr/share/bison/bison.simple /^#define YYBACKUP(Token, Value) \\$/ -YYBISON y-src/cccp.c 4 -YYBISON y-src/parse.c 4 yyclearin /usr/share/bison/bison.simple 150 yydebug /usr/share/bison/bison.simple 238 -YY_DECL_NON_LSP_VARIABLES /usr/share/bison/bison.simple 374 -YY_DECL_VARIABLES /usr/share/bison/bison.simple 385 -YY_DECL_VARIABLES /usr/share/bison/bison.simple 391 -YYDPRINTF /usr/share/bison/bison.simple /^# define YYDPRINTF(Args) \\$/ -YYDPRINTF /usr/share/bison/bison.simple /^# define YYDPRINTF(Args)$/ -YYEMPTY /usr/share/bison/bison.simple 151 -YYEOF /usr/share/bison/bison.simple 152 -YYERRCODE /usr/share/bison/bison.simple 179 yyerrhandle /usr/share/bison/bison.simple 848 yyerrlab1 /usr/share/bison/bison.simple 823 yyerrok /usr/share/bison/bison.simple 149 -YYERROR /usr/share/bison/bison.simple 155 yyerror y-src/cccp.y /^yyerror (s)$/ yyerrstatus /usr/share/bison/bison.simple 846 -YYFAIL /usr/share/bison/bison.simple 159 -YYFPRINTF /usr/share/bison/bison.simple 226 -YYINITDEPTH /usr/share/bison/bison.simple 245 -YYLEX /usr/share/bison/bison.simple 201 -YYLEX /usr/share/bison/bison.simple 203 -YYLEX /usr/share/bison/bison.simple 207 -YYLEX /usr/share/bison/bison.simple 209 -YYLEX /usr/share/bison/bison.simple 213 yylex y-src/cccp.y /^yylex ()$/ -YYLLOC_DEFAULT /usr/share/bison/bison.simple /^# define YYLLOC_DEFAULT(Current, Rhs, N) \\$/ +yyls /usr/share/bison/bison.simple 89 yylsp /usr/share/bison/bison.simple 748 yylsp /usr/share/bison/bison.simple 921 -yyls /usr/share/bison/bison.simple 89 -YYMAXDEPTH /usr/share/bison/bison.simple 256 -YYMAXDEPTH /usr/share/bison/bison.simple 260 -yymemcpy /usr/share/bison/bison.simple 265 yymemcpy /usr/share/bison/bison.simple /^yymemcpy (char *yyto, const char *yyfrom, YYSIZE_T/ -yynewstate /usr/share/bison/bison.simple 763 -yynewstate /usr/share/bison/bison.simple 925 +yymemcpy /usr/share/bison/bison.simple 265 yyn /usr/share/bison/bison.simple 755 yyn /usr/share/bison/bison.simple 861 yyn /usr/share/bison/bison.simple 895 yyn /usr/share/bison/bison.simple 903 -YYPARSE_PARAM_ARG /usr/share/bison/bison.simple 351 -YYPARSE_PARAM_ARG /usr/share/bison/bison.simple 354 -YYPARSE_PARAM_ARG /usr/share/bison/bison.simple 358 -YYPARSE_PARAM_DECL /usr/share/bison/bison.simple 352 -YYPARSE_PARAM_DECL /usr/share/bison/bison.simple 355 -YYPARSE_PARAM_DECL /usr/share/bison/bison.simple 359 +yynewstate /usr/share/bison/bison.simple 763 +yynewstate /usr/share/bison/bison.simple 925 yyparse /usr/share/bison/bison.simple /^yyparse (YYPARSE_PARAM_ARG)$/ -YYPOPSTACK /usr/share/bison/bison.simple 445 -YYPOPSTACK /usr/share/bison/bison.simple 447 -YYRECOVERING /usr/share/bison/bison.simple /^#define YYRECOVERING() (!!yyerrstatus)$/ yyresult /usr/share/bison/bison.simple 932 yyresult /usr/share/bison/bison.simple 939 yyresult /usr/share/bison/bison.simple 947 yyreturn /usr/share/bison/bison.simple 933 yyreturn /usr/share/bison/bison.simple 940 -YYSIZE_T /usr/share/bison/bison.simple 129 -YYSIZE_T /usr/share/bison/bison.simple 132 -YYSIZE_T /usr/share/bison/bison.simple 137 -YYSIZE_T /usr/share/bison/bison.simple 141 -YYSIZE_T /usr/share/bison/bison.simple 146 -YYSIZE_T /usr/share/bison/bison.simple 52 -YYSIZE_T /usr/share/bison/bison.simple 57 -YYSIZE_T /usr/share/bison/bison.simple 72 -YYSIZE_T /usr/share/bison/bison.simple 76 yyss /usr/share/bison/bison.simple 86 -YYSTACK_ALLOC /usr/share/bison/bison.simple 51 -YYSTACK_ALLOC /usr/share/bison/bison.simple 56 -YYSTACK_ALLOC /usr/share/bison/bison.simple 60 -YYSTACK_ALLOC /usr/share/bison/bison.simple 79 -YYSTACK_BYTES /usr/share/bison/bison.simple /^# define YYSTACK_BYTES(N) \\$/ -YYSTACK_FREE /usr/share/bison/bison.simple 80 -YYSTACK_FREE /usr/share/bison/bison.simple /^# define YYSTACK_FREE(Ptr) do { \/* empty *\/; } wh/ -YYSTACK_GAP_MAX /usr/share/bison/bison.simple 94 -YYSTACK_RELOCATE /usr/share/bison/bison.simple 548 -YYSTACK_RELOCATE /usr/share/bison/bison.simple /^# define YYSTACK_RELOCATE(Type, Stack) \\$/ yystate /usr/share/bison/bison.simple 757 yystate /usr/share/bison/bison.simple 761 yystate /usr/share/bison/bison.simple 875 yystate /usr/share/bison/bison.simple 924 -YYSTD /usr/share/bison/bison.simple /^# define YYSTD(x) std::x$/ -YYSTD /usr/share/bison/bison.simple /^# define YYSTD(x) x$/ -yystpcpy /usr/share/bison/bison.simple 317 yystpcpy /usr/share/bison/bison.simple /^yystpcpy (char *yydest, const char *yysrc)$/ -yystrlen /usr/share/bison/bison.simple 294 +yystpcpy /usr/share/bison/bison.simple 317 yystrlen /usr/share/bison/bison.simple /^yystrlen (const char *yystr)$/ -YYSTYPE y-src/parse.y 72 -YYSTYPE y-src/parse.y 73 -YYTERROR /usr/share/bison/bison.simple 178 +yystrlen /usr/share/bison/bison.simple 294 +yyvs /usr/share/bison/bison.simple 87 yyvsp /usr/share/bison/bison.simple 746 yyvsp /usr/share/bison/bison.simple 919 -yyvs /usr/share/bison/bison.simple 87 z c.c 144 z c.c 164 z cp-src/clheir.hpp 49 z cp-src/clheir.hpp 58 -Z c-src/h.h 100 -/Z ps-src/rfc1245.ps /^\/Z {$/ zzz tex-src/texinfo.tex /^\\def\\infoappendix{\\parsearg\\appendixzzz}$/ zzz tex-src/texinfo.tex /^\\def\\infochapter{\\parsearg\\chapterzzz}$/ zzz tex-src/texinfo.tex /^\\def\\infosection{\\parsearg\\sectionzzz}$/ @@ -4832,3 +4819,16 @@ zzz tex-src/texinfo.tex /^\\def\\infosubsection{\\parsearg\\subsectionzzz}$/ zzz tex-src/texinfo.tex /^\\def\\infosubsubsection{\\parsearg\\subsubsectionzzz}/ zzz tex-src/texinfo.tex /^\\outer\\def\\appendix{\\parsearg\\appendixzzz}$/ zzz tex-src/texinfo.tex /^\\outer\\def\\chapter{\\parsearg\\chapterzzz}$/ +{ tex-src/texinfo.tex /^\\let\\{=\\mylbrace$/ +{ tex-src/texinfo.tex /^\\let\\{=\\ptexlbrace$/ +| tex-src/texinfo.tex /^\\def|{{\\tt \\char '174}}$/ +| tex-src/texinfo.tex /^\\let|=\\normalverticalbar$/ +} tex-src/texinfo.tex /^\\let\\}=\\myrbrace$/ +} tex-src/texinfo.tex /^\\let\\}=\\ptexrbrace$/ +~ tex-src/texinfo.tex /^\\catcode `\\^=7 \\catcode `\\_=8 \\catcode `\\~=13 \\let/ +~ tex-src/texinfo.tex /^\\def~{{\\tt \\char '176}}$/ +~ tex-src/texinfo.tex /^\\let~=\\normaltilde$/ +~A cp-src/c.C /^A::~A() {}$/ +~B cp-src/c.C /^ ~B() {};$/ +~MDiagArray2 cp-src/MDiagArray2.h /^ ~MDiagArray2 (void) { }$/ +~generic_object cp-src/clheir.cpp /^generic_object::~generic_object(void)$/ diff --git a/test/manual/etags/CTAGS.good_update b/test/manual/etags/CTAGS.good_update index 7ca04b111a8..22f7a4421e3 100644 --- a/test/manual/etags/CTAGS.good_update +++ b/test/manual/etags/CTAGS.good_update @@ -1,40 +1,1779 @@ -($_,$flag,$opt,$f,$r,@temp perl-src/yagrip.pl 8 +" tex-src/texinfo.tex /^\\def\\turnoffactive{\\let"=\\normaldoublequote$/ +" tex-src/texinfo.tex /^\\let"=\\activedoublequote$/ +#a-defer-word forth-src/test-forth.fth /^defer #a-defer-word$/ +#some-storage forth-src/test-forth.fth /^2000 buffer: #some-storage$/ $0x80 c-src/sysdep.h 32 -${CHECKOBJS} make-src/Makefile /^${CHECKOBJS}: CFLAGS=-g3 -DNULLFREECHECK=0$/ +$SYS_##syscall_na c-src/sysdep.h 31 $domain php-src/lce_functions.php 175 $filename php-src/lce_functions.php 174 $ignore_ws php-src/lce_functions.php 171 $memassign php-src/ptest.php 9 $memassign_space php-src/ptest.php 10 $member php-src/ptest.php 8 -$msgid_lc php-src/lce_functions.php 113 $msgid php-src/lce_functions.php 107 $msgid php-src/lce_functions.php 165 -$msgstr_lc php-src/lce_functions.php 114 +$msgid_lc php-src/lce_functions.php 113 $msgstr php-src/lce_functions.php 108 $msgstr php-src/lce_functions.php 166 +$msgstr_lc php-src/lce_functions.php 114 $po_entries php-src/lce_functions.php 172 $poe_num php-src/lce_functions.php 173 $por_a php-src/lce_functions.php 500 $prefix php-src/lce_functions.php 72 -($prog,$_,@list perl-src/yagrip.pl 39 $state php-src/lce_functions.php 170 -($string,$flag,@string,@temp,@last perl-src/yagrip.pl 40 -$sys_comment_lc php-src/lce_functions.php 116 $sys_comment php-src/lce_functions.php 110 $sys_comment php-src/lce_functions.php 168 -$SYS_##syscall_na c-src/sysdep.h 31 +$sys_comment_lc php-src/lce_functions.php 116 $test php-src/ptest.php 12 -$unk_comment_lc php-src/lce_functions.php 117 $unk_comment php-src/lce_functions.php 111 $unk_comment php-src/lce_functions.php 169 -$user_comment_lc php-src/lce_functions.php 115 +$unk_comment_lc php-src/lce_functions.php 117 $user_comment php-src/lce_functions.php 109 $user_comment php-src/lce_functions.php 167 +$user_comment_lc php-src/lce_functions.php 115 +${CHECKOBJS} make-src/Makefile /^${CHECKOBJS}: CFLAGS=-g3 -DNULLFREECHECK=0$/ +%cdiff make-src/Makefile /^%cdiff: CTAGS% CTAGS ${infiles}$/ +%ediff make-src/Makefile /^%ediff: ETAGS% ETAGS ${infiles}$/ +& tex-src/texinfo.tex /^\\gdef\\functionparens{\\boldbrax\\let&=\\amprm\\parenco/ +& tex-src/texinfo.tex /^\\gdef\\normalparens{\\boldbrax\\let&=\\ampnr}$/ +' tex-src/texinfo.tex /^\\def\\'{{'}}$/ +( tex-src/texinfo.tex /^\\gdef\\amprm#1 {{\\rm\\}\\let(=\\oprm \\let)=\\clrm\\ }/ +( tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ +( tex-src/texinfo.tex /^\\gdef\\oprm#1 {{\\rm\\char`\\(}#1 \\bf \\let(=\\opnested / +( tex-src/texinfo.tex /^\\ifnum \\parencount=1 {\\rm \\char `\\)}\\sl \\let(=\\opr/ +($_,$flag,$opt,$f,$r,@temp perl-src/yagrip.pl 8 +($prog,$_,@list perl-src/yagrip.pl 39 +($string,$flag,@string,@temp,@last perl-src/yagrip.pl 40 +(a-forth-constant forth-src/test-forth.fth /^constant (a-forth-constant$/ +(another-forth-word) forth-src/test-forth.fth /^: (another-forth-word) ( -- )$/ +(foo) forth-src/test-forth.fth /^: (foo) 1 ;$/ +) tex-src/texinfo.tex /^\\gdef\\amprm#1 {{\\rm\\}\\let(=\\oprm \\let)=\\clrm\\ }/ +) tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ +* tex-src/texinfo.tex /^\\def\\*{\\hfil\\break\\hbox{}\\ignorespaces}$/ +* tex-src/texinfo.tex /^\\let\\*=\\ptexstar$/ ++ ruby-src/test.rb /^ def +(y)$/ ++ tex-src/texinfo.tex /^\\def+{{\\tt \\char 43}}$/ ++ tex-src/texinfo.tex /^\\let+=\\normalplus}$/ +. tex-src/texinfo.tex /^\\def\\.{.\\spacefactor=3000 }$/ +. tex-src/texinfo.tex /^\\let\\.=\\ptexdot$/ +.PRECIOUS make-src/Makefile /^.PRECIOUS: ETAGS CTAGS ETAGS16 CTAGS16 ETAGS17 CTA/ +/.notdef ps-src/rfc1245.ps /^\/.notdef \/.notdef \/.notdef \/.notdef \/.notdef \/.not/ +/.notdef ps-src/rfc1245.ps /^\/.notdef \/.notdef \/.notdef \/.notdef \/space \/exclam/ +/A ps-src/rfc1245.ps /^\/A { $/ +/Acircumflex ps-src/rfc1245.ps /^\/Acircumflex \/Ecircumflex \/Aacute \/Edieresis \/Egra/ +/B ps-src/rfc1245.ps /^\/B { $/ +/BEGINBITMAP2BIT ps-src/rfc1245.ps /^\/BEGINBITMAP2BIT { $/ +/BEGINBITMAP2BITc ps-src/rfc1245.ps /^\/BEGINBITMAP2BITc { $/ +/BEGINBITMAPBW ps-src/rfc1245.ps /^\/BEGINBITMAPBW { $/ +/BEGINBITMAPBWc ps-src/rfc1245.ps /^\/BEGINBITMAPBWc { $/ +/BEGINBITMAPGRAY ps-src/rfc1245.ps /^\/BEGINBITMAPGRAY { $/ +/BEGINBITMAPGRAYc ps-src/rfc1245.ps /^\/BEGINBITMAPGRAYc { $/ +/BEGINPRINTCODE ps-src/rfc1245.ps /^\/BEGINPRINTCODE { $/ +/BF ps-src/rfc1245.ps /^\/BF { $/ +/BITMAPCOLOR ps-src/rfc1245.ps /^\/BITMAPCOLOR { $/ +/BITMAPCOLORc ps-src/rfc1245.ps /^\/BITMAPCOLORc { $/ +/BITMAPGRAY ps-src/rfc1245.ps /^\/BITMAPGRAY { $/ +/BITMAPGRAYc ps-src/rfc1245.ps /^\/BITMAPGRAYc { $/ +/C ps-src/rfc1245.ps /^\/C { $/ +/COMMONBITMAP ps-src/rfc1245.ps /^\/COMMONBITMAP { $/ +/COMMONBITMAPc ps-src/rfc1245.ps /^\/COMMONBITMAPc { $/ +/D ps-src/rfc1245.ps /^\/D {curveto} bind def$/ +/DiacriticEncoding ps-src/rfc1245.ps /^\/DiacriticEncoding [$/ +/E ps-src/rfc1245.ps /^\/E {lineto} bind def$/ +/ENDBITMAP ps-src/rfc1245.ps /^\/ENDBITMAP {$/ +/ENDPRINTCODE ps-src/rfc1245.ps /^\/ENDPRINTCODE {$/ +/F ps-src/rfc1245.ps /^\/F { $/ +/FMBEGINEPSF ps-src/rfc1245.ps /^\/FMBEGINEPSF { $/ +/FMBEGINPAGE ps-src/rfc1245.ps /^\/FMBEGINPAGE { $/ +/FMDEFINEFONT ps-src/rfc1245.ps /^\/FMDEFINEFONT { $/ +/FMDOCUMENT ps-src/rfc1245.ps /^\/FMDOCUMENT { $/ +/FMENDEPSF ps-src/rfc1245.ps /^\/FMENDEPSF {$/ +/FMENDPAGE ps-src/rfc1245.ps /^\/FMENDPAGE {$/ +/FMLOCAL ps-src/rfc1245.ps /^\/FMLOCAL {$/ +/FMNORMALIZEGRAPHICS ps-src/rfc1245.ps /^\/FMNORMALIZEGRAPHICS { $/ +/FMVERSION ps-src/rfc1245.ps /^\/FMVERSION {$/ +/FMversion ps-src/rfc1245.ps /^\/FMversion (2.0) def $/ +/Fmcc ps-src/rfc1245.ps /^\/Fmcc {$/ +/FrameDict ps-src/rfc1245.ps /^\/FrameDict 190 dict def $/ +/G ps-src/rfc1245.ps /^\/G { $/ +/H ps-src/rfc1245.ps /^\/H { $/ +/Icircumflex ps-src/rfc1245.ps /^\/Icircumflex \/Idieresis \/Igrave \/Oacute \/Ocircumfl/ +/L ps-src/rfc1245.ps /^\/L \/M \/N \/O \/P \/Q \/R \/S \/T \/U \/V \/W \/X \/Y \/Z \/brac/ +/L ps-src/rfc1245.ps /^\/L { $/ +/M ps-src/rfc1245.ps /^\/M {newpath moveto} bind def$/ +/N ps-src/rfc1245.ps /^\/N { $/ +/Ntilde ps-src/rfc1245.ps /^\/Ntilde \/Odieresis \/Udieresis \/aacute \/agrave \/aci/ +/O ps-src/rfc1245.ps /^\/O {closepath} bind def$/ +/Otilde ps-src/rfc1245.ps /^\/Otilde \/OE \/oe \/endash \/emdash \/quotedblleft \/quo/ +/P ps-src/rfc1245.ps /^\/P { $/ +/PF ps-src/rfc1245.ps /^\/PF { $/ +/R ps-src/rfc1245.ps /^\/R { $/ +/RF ps-src/rfc1245.ps /^\/RF { $/ +/RR ps-src/rfc1245.ps /^\/RR { $/ +/ReEncode ps-src/rfc1245.ps /^\/ReEncode { $/ +/S ps-src/rfc1245.ps /^\/S { $/ +/SF ps-src/rfc1245.ps /^\/SF { $/ +/T ps-src/rfc1245.ps /^\/T { $/ +/TF ps-src/rfc1245.ps /^\/TF { $/ +/U ps-src/rfc1245.ps /^\/U { $/ +/Uacute ps-src/rfc1245.ps /^\/Uacute \/Ucircumflex \/Ugrave \/dotlessi \/circumflex/ +/V ps-src/rfc1245.ps /^\/V { $/ +/W ps-src/rfc1245.ps /^\/W { $/ +/X ps-src/rfc1245.ps /^\/X { $/ +/Y ps-src/rfc1245.ps /^\/Y { $/ +/Z ps-src/rfc1245.ps /^\/Z {$/ +/atilde ps-src/rfc1245.ps /^\/atilde \/aring \/ccedilla \/eacute \/egrave \/ecircumf/ +/bl ps-src/rfc1245.ps /^\/bl { $/ +/braceright ps-src/rfc1245.ps /^\/braceright \/asciitilde \/.notdef \/Adieresis \/Aring/ +/bracketright ps-src/rfc1245.ps /^\/bracketright \/asciicircum \/underscore \/grave \/a \// +/breve ps-src/rfc1245.ps /^\/breve \/dotaccent \/ring \/cedilla \/hungarumlaut \/og/ +/cfs ps-src/rfc1245.ps /^\/cfs { $/ +/colorsetup ps-src/rfc1245.ps /^\/colorsetup {$/ +/desperatepapersize ps-src/rfc1245.ps /^\/desperatepapersize {$/ +/dieresis ps-src/rfc1245.ps /^\/dieresis \/.notdef \/AE \/Oslash \/.notdef \/.notdef \// +/dmatrix ps-src/rfc1245.ps /^\/dmatrix matrix def$/ +/dnormalize ps-src/rfc1245.ps /^\/dnormalize {$/ +/dpi ps-src/rfc1245.ps /^\/dpi 72 0 dmatrix defaultmatrix dtransform$/ +/exclamdown ps-src/rfc1245.ps /^\/exclamdown \/logicalnot \/.notdef \/florin \/.notdef / +/fakecolorsetup ps-src/rfc1245.ps /^\/fakecolorsetup {$/ +/fillprocs ps-src/rfc1245.ps /^\/fillprocs 32 array def$/ +/fl ps-src/rfc1245.ps /^\/fl { $/ +/fraction ps-src/rfc1245.ps /^\/fraction \/currency \/guilsinglleft \/guilsinglright/ +/freq ps-src/rfc1245.ps /^\/freq dpi 18.75 div 8 div round dup 0 eq {pop 1} i/ +/gn ps-src/rfc1245.ps /^\/gn { $/ +/graymode ps-src/rfc1245.ps /^\/graymode true def$/ +/grayness ps-src/rfc1245.ps /^\/grayness {$/ +/guillemotleft ps-src/rfc1245.ps /^\/guillemotleft \/guillemotright \/ellipsis \/.notdef / +/home/www/pub/etags.c.gz make-src/Makefile /^\/home\/www\/pub\/etags.c.gz: etags.c$/ +/home/www/pub/software/unix/etags.tar.gz make-src/Makefile /^\/home\/www\/pub\/software\/unix\/etags.tar.gz: Makefile/ +/hx ps-src/rfc1245.ps /^\/hx { $/ +/i ps-src/rfc1245.ps /^\/i \/j \/k \/l \/m \/n \/o \/p \/q \/r \/s \/t \/u \/v \/w \/x \/y/ +/iacute ps-src/rfc1245.ps /^\/iacute \/igrave \/icircumflex \/idieresis \/ntilde \/o/ +/ic ps-src/rfc1245.ps /^\/ic [ $/ +/inch ps-src/rfc1245.ps /^\/inch {72 mul} def$/ +/ip ps-src/rfc1245.ps /^\/ip { $/ +/less ps-src/rfc1245.ps /^\/less \/equal \/greater \/question \/at \/A \/B \/C \/D \/E/ +/lnormalize ps-src/rfc1245.ps /^\/lnormalize { $/ +/manualpapersize ps-src/rfc1245.ps /^\/manualpapersize {$/ +/max ps-src/rfc1245.ps /^\/max {2 copy lt {exch} if pop} bind def$/ +/min ps-src/rfc1245.ps /^\/min {2 copy gt {exch} if pop} bind def$/ +/ms ps-src/rfc1245.ps /^\/ms { $/ +/nbluet ps-src/rfc1245.ps /^\/nbluet 256 array def$/ +/ngrayt ps-src/rfc1245.ps /^\/ngrayt 256 array def$/ +/ngreent ps-src/rfc1245.ps /^\/ngreent 256 array def$/ +/normalize ps-src/rfc1245.ps /^\/normalize {$/ +/nredt ps-src/rfc1245.ps /^\/nredt 256 array def$/ +/numbersign ps-src/rfc1245.ps /^\/numbersign \/dollar \/percent \/ampersand \/quotesing/ +/ocircumflex ps-src/rfc1245.ps /^\/ocircumflex \/odieresis \/otilde \/uacute \/ugrave \/u/ +/ordfeminine ps-src/rfc1245.ps /^\/ordfeminine \/ordmasculine \/.notdef \/ae \/oslash \/q/ +/pagedimen ps-src/rfc1245.ps /^\/pagedimen { $/ +/papersize ps-src/rfc1245.ps /^\/papersize {$/ +/paragraph ps-src/rfc1245.ps /^\/paragraph \/germandbls \/registered \/copyright \/tra/ +/parenright ps-src/rfc1245.ps /^\/parenright \/asterisk \/plus \/comma \/hyphen \/period/ +/periodcentered ps-src/rfc1245.ps /^\/periodcentered \/quotesinglbase \/quotedblbase \/per/ +/quoteleft ps-src/rfc1245.ps /^\/quoteleft \/quoteright \/.notdef \/.notdef \/ydieresi/ +/restorematrix ps-src/rfc1245.ps /^\/restorematrix {$/ +/s1 ps-src/rfc1245.ps /^\/s1 1 string def$/ +/sangle ps-src/rfc1245.ps /^\/sangle 1 0 dmatrix defaultmatrix dtransform exch / +/savematrix ps-src/rfc1245.ps /^\/savematrix {$/ +/setmanualfeed ps-src/rfc1245.ps /^\/setmanualfeed {$/ +/setpapername ps-src/rfc1245.ps /^\/setpapername { $/ +/setpattern ps-src/rfc1245.ps /^\/setpattern {$/ +/two ps-src/rfc1245.ps /^\/two \/three \/four \/five \/six \/seven \/eight \/nine \// +/udieresis ps-src/rfc1245.ps /^\/udieresis \/dagger \/.notdef \/cent \/sterling \/secti/ +/wbytes ps-src/rfc1245.ps /^\/wbytes { $/ +/wh ps-src/rfc1245.ps /^\/wh { $/ +/yen ps-src/rfc1245.ps /^\/yen \/.notdef \/.notdef \/.notdef \/.notdef \/.notdef / 2const forth-src/test-forth.fth /^3 4 2constant 2const$/ 2val forth-src/test-forth.fth /^2const 2value 2val$/ 2var forth-src/test-forth.fth /^2variable 2var$/ +: tex-src/texinfo.tex /^\\def\\:{\\spacefactor=1000 }$/ +:a-forth-dictionary-entry forth-src/test-forth.fth /^create :a-forth-dictionary-entry$/ +< tex-src/texinfo.tex /^\\def<{{\\tt \\less}}$/ +< tex-src/texinfo.tex /^\\let<=\\normalless$/ +<< ruby-src/test.rb /^ def <<(y)$/ +<= ruby-src/test.rb /^ def <=(y)$/ +<=> ruby-src/test.rb /^ def <=>(y)$/ += tex-src/texinfo.tex /^\\global\\def={{\\tt \\char 61}}}$/ +=/f ada-src/etags-test-for.ada /^ function "=" (L, R : System.Address) return Boo/ +== ruby-src/test.rb /^ def ==(y)$/ +=== ruby-src/test.rb /^ def ===(y)$/ +=starts-with-equals! scm-src/test.scm /^(define =starts-with-equals! #t)$/ +> tex-src/texinfo.tex /^\\def>{{\\tt \\gtr}}$/ +> tex-src/texinfo.tex /^\\let>=\\normalgreater$/ +>field1 forth-src/test-forth.fth /^ 9 field >field1$/ +>field2 forth-src/test-forth.fth /^ 5 field >field2$/ +@ tex-src/texinfo.tex /^\\def\\@{@}%$/ +@ tex-src/texinfo.tex /^\\def\\@{{\\tt \\char '100}}$/ +@sf tex-src/texinfo.tex /^\\ifhmode\\edef\\@sf{\\spacefactor\\the\\spacefactor}\\\/\\/ +@sf tex-src/texinfo.tex /^\\let\\@sf\\empty$/ +A c.c 162 +A cp-src/c.C /^void A::A() {}$/ +A cp-src/c.C 117 +A cp-src/c.C 39 +A cp-src/c.C 56 +A cp-src/c.C 57 +A cp-src/c.C 73 +A cp-src/fail.C 23 +A cp-src/fail.C 7 +A ruby-src/test1.ru /^class A$/ +A ruby-src/test1.ru /^module A$/ +ABC ruby-src/test1.ru 11 +ADASRC make-src/Makefile /^ADASRC=etags-test-for.ada 2ataspri.adb 2ataspri.ad/ +ADDRESS c-src/emacs/src/gmalloc.c /^#define ADDRESS(B) ((void *) (((B) - 1) * BLOCKSIZ/ +ALIGNOF_STRUCT_LISP_VECTOR c-src/emacs/src/lisp.h 1378 +ALLOCATED_BEFORE_DUMPING c-src/emacs/src/gmalloc.c /^#define ALLOCATED_BEFORE_DUMPING(P) \\$/ +ALLOCATE_PSEUDOVECTOR c-src/emacs/src/lisp.h /^#define ALLOCATE_PSEUDOVECTOR(type, field, tag) / +ALLOCATE_ZEROED_PSEUDOVECTOR c-src/emacs/src/lisp.h /^#define ALLOCATE_ZEROED_PSEUDOVECTOR(type, field, / +AND y-src/cccp.c 11 +ANSIC c-src/h.h 84 +ANSIC c-src/h.h 85 +AREF c-src/emacs/src/lisp.h /^AREF (Lisp_Object array, ptrdiff_t idx)$/ +ARGS make-src/Makefile /^ARGS=- < srclist$/ +ARITH_EQUAL c-src/emacs/src/lisp.h 3498 +ARITH_GRTR c-src/emacs/src/lisp.h 3501 +ARITH_GRTR_OR_EQUAL c-src/emacs/src/lisp.h 3503 +ARITH_LESS c-src/emacs/src/lisp.h 3500 +ARITH_LESS_OR_EQUAL c-src/emacs/src/lisp.h 3502 +ARITH_NOTEQUAL c-src/emacs/src/lisp.h 3499 +ARRAYELTS c-src/emacs/src/lisp.h /^#define ARRAYELTS(arr) (sizeof (arr) \/ sizeof (arr/ +ARRAYP c-src/emacs/src/lisp.h /^ARRAYP (Lisp_Object x)$/ +ARRAY_MARK_FLAG c-src/emacs/src/lisp.h 768 +ASCII_CHAR_P c-src/emacs/src/lisp.h /^#define ASCII_CHAR_P(c) UNSIGNED_CMP (c, <, 0x80)$/ +ASET c-src/emacs/src/lisp.h /^ASET (Lisp_Object array, ptrdiff_t idx, Lisp_Objec/ +ASIZE c-src/emacs/src/lisp.h /^ASIZE (Lisp_Object array)$/ +ASRC make-src/Makefile /^ASRC=empty.zz empty.zz.gz$/ +AST_Array::AST_Array cp-src/c.C /^AST_Array::AST_Array(UTL_ScopedName *n, unsigned l/ +AST_ConcreteType::AST_ConcreteType cp-src/c.C /^AST_ConcreteType::AST_ConcreteType(AST_Decl::NodeT/ +AST_Root cp-src/c.C 92 +AT cp-src/c.C 52 +AU cp-src/c.C 53 +AUTOLOADP c-src/emacs/src/lisp.h /^AUTOLOADP (Lisp_Object x)$/ +AUTO_CONS c-src/emacs/src/lisp.h /^#define AUTO_CONS(name, a, b) Lisp_Object name = A/ +AUTO_CONS_EXPR c-src/emacs/src/lisp.h /^#define AUTO_CONS_EXPR(a, b) \\$/ +AUTO_LIST1 c-src/emacs/src/lisp.h /^#define AUTO_LIST1(name, a) \\$/ +AUTO_LIST2 c-src/emacs/src/lisp.h /^#define AUTO_LIST2(name, a, b) \\$/ +AUTO_LIST3 c-src/emacs/src/lisp.h /^#define AUTO_LIST3(name, a, b, c) \\$/ +AUTO_LIST4 c-src/emacs/src/lisp.h /^#define AUTO_LIST4(name, a, b, c, d) \\$/ +AUTO_STRING c-src/emacs/src/lisp.h /^#define AUTO_STRING(name, str) \\$/ +AVAIL_ALLOCA c-src/emacs/src/lisp.h /^#define AVAIL_ALLOCA(size) (sa_avail -= (size), al/ +Abort_Handler_Pointer/t ada-src/2ataspri.ads /^ type Abort_Handler_Pointer is access procedure / +Abort_Task/p ada-src/2ataspri.adb /^ procedure Abort_Task (T : TCB_Ptr) is$/ +Abort_Task/p ada-src/2ataspri.ads /^ procedure Abort_Task (T : TCB_Ptr);$/ +Abort_Wrapper/p ada-src/2ataspri.adb /^ procedure Abort_Wrapper$/ +Ada_funcs c-src/etags.c /^Ada_funcs (FILE *inf)$/ +Ada_getit c-src/etags.c /^Ada_getit (FILE *inf, const char *name_qualifier)$/ +Ada_help c-src/etags.c 475 +Ada_suffixes c-src/etags.c 473 +AddNullToNmStr pas-src/common.pas /^function AddNullToNmStr; (*($/ +Address_To_Call_State/f ada-src/2ataspri.adb /^ function Address_To_Call_State is new$/ +Address_To_TCB_Ptr/f ada-src/2ataspri.ads /^ function Address_To_TCB_Ptr is new$/ +Advanced usage tex-src/gzip.texi /^@node Advanced usage, Environment, Invoking gzip, / +Aligned_Cons c-src/emacs/src/lisp.h 4670 +Aligned_String c-src/emacs/src/lisp.h 4676 +AppendTextString pas-src/common.pas /^function AppendTextString;(*($/ +Arith_Comparison c-src/emacs/src/lisp.h 3497 +Asm_help c-src/etags.c 504 +Asm_labels c-src/etags.c /^Asm_labels (FILE *inf)$/ +Asm_suffixes c-src/etags.c 493 +B cp-src/c.C /^void B::B() {}$/ +B cp-src/c.C 122 +B cp-src/c.C 54 +B cp-src/c.C 56 +B cp-src/c.C 74 +B cp-src/fail.C 24 +B cp-src/fail.C 8 +B ruby-src/test1.ru /^ class B$/ +BE_Node cp-src/c.C /^void BE_Node::BE_Node() {}$/ +BE_Node cp-src/c.C 77 +BITS_PER_BITS_WORD c-src/emacs/src/lisp.h 125 +BITS_PER_BITS_WORD c-src/emacs/src/lisp.h 129 +BITS_PER_CHAR c-src/emacs/src/lisp.h 136 +BITS_PER_EMACS_INT c-src/emacs/src/lisp.h 139 +BITS_PER_LONG c-src/emacs/src/lisp.h 138 +BITS_PER_SHORT c-src/emacs/src/lisp.h 137 +BITS_WORD_MAX c-src/emacs/src/lisp.h 124 +BITS_WORD_MAX c-src/emacs/src/lisp.h 128 +BLACK cp-src/screen.hpp 12 +BLOCK c-src/emacs/src/gmalloc.c /^#define BLOCK(A) (((char *) (A) - _heapbase) \/ BLO/ +BLOCKIFY c-src/emacs/src/gmalloc.c /^#define BLOCKIFY(SIZE) (((SIZE) + BLOCKSIZE - 1) \// +BLOCKLOG c-src/emacs/src/gmalloc.c 125 +BLOCKSIZE c-src/emacs/src/gmalloc.c 126 +BLUE cp-src/screen.hpp 13 +BOOL_VECTOR_BITS_PER_CHAR c-src/emacs/src/lisp.h 114 +BOOL_VECTOR_BITS_PER_CHAR c-src/emacs/src/lisp.h 115 +BOOL_VECTOR_P c-src/emacs/src/lisp.h /^BOOL_VECTOR_P (Lisp_Object a)$/ +BROWN cp-src/screen.hpp 18 +BUFFERP c-src/emacs/src/lisp.h /^BUFFERP (Lisp_Object a)$/ +BUFFERSIZE objc-src/Subprocess.h 43 +BUFFER_OBJFWDP c-src/emacs/src/lisp.h /^BUFFER_OBJFWDP (union Lisp_Fwd *a)$/ +BYTE_MARK_STACK c-src/emacs/src/lisp.h 3181 +Bar lua-src/test.lua /^function Square.something:Bar ()$/ +Bar perl-src/kai-test.pl /^package Bar;$/ +Barrier_Function_Pointer/t ada-src/etags-test-for.ada /^ type Barrier_Function_Pointer is access$/ +Bidule/b ada-src/etags-test-for.ada /^ protected body Bidule is$/ +Bidule/b ada-src/waroquiers.ada /^ protected body Bidule is$/ +Bidule/t ada-src/etags-test-for.ada /^ protected Bidule is$/ +Bidule/t ada-src/waroquiers.ada /^ protected Bidule is$/ +Body_Required/f ada-src/etags-test-for.ada /^ function Body_Required$/ +Boo cp-src/c.C /^ Boo(int _i, int _a, int _b) : i(_i), a(_a), b(/ +Boo cp-src/c.C 129 +Boo::Boo cp-src/c.C /^Boo::Boo(Boo) :$/ +ButtonBar pyt-src/server.py /^def ButtonBar(frame, legend, ref, alternatives, co/ +C cp-src/fail.C /^ C(int i) {x = i;}$/ +C cp-src/fail.C 25 +C cp-src/fail.C 9 +C ruby-src/test1.ru /^class A::C; end$/ +CALLMANY c-src/emacs/src/lisp.h /^#define CALLMANY(f, array) (f) (ARRAYELTS (array),/ +CALLN c-src/emacs/src/lisp.h /^#define CALLN(f, ...) CALLMANY (f, ((Lisp_Object [/ +CAR c-src/emacs/src/lisp.h /^CAR (Lisp_Object c)$/ +CAR_SAFE c-src/emacs/src/lisp.h /^CAR_SAFE (Lisp_Object c)$/ +CATCHER c-src/emacs/src/lisp.h 3021 +CDR c-src/emacs/src/lisp.h /^CDR (Lisp_Object c)$/ +CDR_SAFE c-src/emacs/src/lisp.h /^CDR_SAFE (Lisp_Object c)$/ +CFLAGS make-src/Makefile /^CFLAGS=${WARNINGS} -ansi -g3 # -pg -O$/ +CHAPFopen tex-src/texinfo.tex /^\\def\\CHAPFopen{$/ +CHAPFplain tex-src/texinfo.tex /^\\def\\CHAPFplain{$/ +CHAPPAGodd tex-src/texinfo.tex /^\\def\\CHAPPAGodd{$/ +CHAPPAGoff tex-src/texinfo.tex /^\\def\\CHAPPAGoff{$/ +CHAPPAGon tex-src/texinfo.tex /^\\def\\CHAPPAGon{$/ +CHAR c-src/etags.c /^#define CHAR(x) ((unsigned int)(x) & (CHARS - 1))/ +CHAR y-src/cccp.c 7 +CHARACTERBITS c-src/emacs/src/lisp.h 2457 +CHARS c-src/etags.c 157 +CHARTAB_SIZE_BITS c-src/emacs/src/lisp.h 1565 +CHARTAB_SIZE_BITS_0 c-src/emacs/src/lisp.h 1567 +CHARTAB_SIZE_BITS_1 c-src/emacs/src/lisp.h 1568 +CHARTAB_SIZE_BITS_2 c-src/emacs/src/lisp.h 1569 +CHARTAB_SIZE_BITS_3 c-src/emacs/src/lisp.h 1570 +CHAR_ALT c-src/emacs/src/lisp.h 2445 +CHAR_BIT c-src/emacs/src/lisp.h 2957 +CHAR_BIT c-src/emacs/src/lisp.h 2959 +CHAR_BIT c-src/emacs/src/lisp.h 2964 +CHAR_BIT c-src/emacs/src/lisp.h 2969 +CHAR_BIT c-src/emacs/src/lisp.h 2974 +CHAR_BIT c-src/emacs/src/lisp.h 2978 +CHAR_BIT c-src/emacs/src/lisp.h 2983 +CHAR_CLASS_MAX_LENGTH c-src/emacs/src/regex.h 593 +CHAR_CLASS_MAX_LENGTH c-src/emacs/src/regex.h 597 +CHAR_CLASS_MAX_LENGTH c-src/emacs/src/regex.h 605 +CHAR_CTL c-src/emacs/src/lisp.h 2449 +CHAR_HYPER c-src/emacs/src/lisp.h 2447 +CHAR_META c-src/emacs/src/lisp.h 2450 +CHAR_MODIFIER_MASK c-src/emacs/src/lisp.h 2452 +CHAR_SHIFT c-src/emacs/src/lisp.h 2448 +CHAR_SUPER c-src/emacs/src/lisp.h 2446 +CHAR_TABLE_EXTRA_SLOTS c-src/emacs/src/lisp.h /^CHAR_TABLE_EXTRA_SLOTS (struct Lisp_Char_Table *ct/ +CHAR_TABLE_P c-src/emacs/src/lisp.h /^CHAR_TABLE_P (Lisp_Object a)$/ +CHAR_TABLE_REF c-src/emacs/src/lisp.h /^CHAR_TABLE_REF (Lisp_Object ct, int idx)$/ +CHAR_TABLE_REF_ASCII c-src/emacs/src/lisp.h /^CHAR_TABLE_REF_ASCII (Lisp_Object ct, ptrdiff_t id/ +CHAR_TABLE_SET c-src/emacs/src/lisp.h /^CHAR_TABLE_SET (Lisp_Object ct, int idx, Lisp_Obje/ +CHAR_TABLE_STANDARD_SLOTS c-src/emacs/src/lisp.h 1697 +CHAR_TYPE_SIZE y-src/cccp.y 87 +CHECKFLAGS make-src/Makefile /^CHECKFLAGS=-DDEBUG -Wno-unused-function$/ +CHECKOBJS make-src/Makefile /^CHECKOBJS=chkmalloc.o chkxm.o$/ +CHECK_ARRAY c-src/emacs/src/lisp.h /^CHECK_ARRAY (Lisp_Object x, Lisp_Object predicate)/ +CHECK_BOOL_VECTOR c-src/emacs/src/lisp.h /^CHECK_BOOL_VECTOR (Lisp_Object x)$/ +CHECK_BUFFER c-src/emacs/src/lisp.h /^CHECK_BUFFER (Lisp_Object x)$/ +CHECK_CONS c-src/emacs/src/lisp.h /^CHECK_CONS (Lisp_Object x)$/ +CHECK_LISP_OBJECT_TYPE c-src/emacs/src/lisp.h 571 +CHECK_LISP_OBJECT_TYPE c-src/emacs/src/lisp.h 572 +CHECK_LISP_OBJECT_TYPE c-src/emacs/src/lisp.h 579 +CHECK_LIST c-src/emacs/src/lisp.h /^CHECK_LIST (Lisp_Object x)$/ +CHECK_LIST_CONS c-src/emacs/src/lisp.h /^# define CHECK_LIST_CONS(x, y) lisp_h_CHECK_LIST_C/ +CHECK_NATNUM c-src/emacs/src/lisp.h /^CHECK_NATNUM (Lisp_Object x)$/ +CHECK_NUMBER c-src/emacs/src/lisp.h /^# define CHECK_NUMBER(x) lisp_h_CHECK_NUMBER (x)$/ +CHECK_NUMBER_CAR c-src/emacs/src/lisp.h /^CHECK_NUMBER_CAR (Lisp_Object x)$/ +CHECK_NUMBER_CDR c-src/emacs/src/lisp.h /^CHECK_NUMBER_CDR (Lisp_Object x)$/ +CHECK_NUMBER_COERCE_MARKER c-src/emacs/src/lisp.h /^#define CHECK_NUMBER_COERCE_MARKER(x) \\$/ +CHECK_NUMBER_OR_FLOAT c-src/emacs/src/lisp.h /^CHECK_NUMBER_OR_FLOAT (Lisp_Object x)$/ +CHECK_NUMBER_OR_FLOAT_COERCE_MARKER c-src/emacs/src/lisp.h /^#define CHECK_NUMBER_OR_FLOAT_COERCE_MARKER(x) / +CHECK_PROCESS c-src/emacs/src/lisp.h /^CHECK_PROCESS (Lisp_Object x)$/ +CHECK_RANGED_INTEGER c-src/emacs/src/lisp.h /^#define CHECK_RANGED_INTEGER(x, lo, hi) \\$/ +CHECK_STRING_CAR c-src/emacs/src/lisp.h /^CHECK_STRING_CAR (Lisp_Object x)$/ +CHECK_SYMBOL c-src/emacs/src/lisp.h /^# define CHECK_SYMBOL(x) lisp_h_CHECK_SYMBOL (x)$/ +CHECK_TYPE c-src/emacs/src/lisp.h /^# define CHECK_TYPE(ok, predicate, x) lisp_h_CHECK/ +CHECK_TYPE_RANGED_INTEGER c-src/emacs/src/lisp.h /^#define CHECK_TYPE_RANGED_INTEGER(type, x) \\$/ +CHECK_VECTOR c-src/emacs/src/lisp.h /^CHECK_VECTOR (Lisp_Object x)$/ +CHECK_VECTOR_OR_STRING c-src/emacs/src/lisp.h /^CHECK_VECTOR_OR_STRING (Lisp_Object x)$/ +CHECK_WINDOW c-src/emacs/src/lisp.h /^CHECK_WINDOW (Lisp_Object x)$/ +CK_ABS_C y-src/parse.y /^#define CK_ABS_C(x) if((x)MAX_COL)/ +CK_ABS_R y-src/parse.y /^#define CK_ABS_R(x) if((x)MAX_ROW)/ +CK_REL_C y-src/parse.y /^#define CK_REL_C(x) if( ((x)>0 && MAX_COL-(x)0 && MAX_ROW-(x)/ +MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (const Array& a) : DiagArray2 / +MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (const DiagArray2& a) : DiagArray/ +MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (const MDiagArray2& a) : DiagArra/ +MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (int r, int c) : DiagArray2 (r, c/ +MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (int r, int c, const T& val) : DiagA/ +MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (void) : DiagArray2 () { }$/ +MDiagArray2 cp-src/MDiagArray2.h 78 +MIN_HASH_VALUE c-src/etags.c 2328 +MIN_WORD_LENGTH c-src/etags.c 2326 +MISCP c-src/emacs/src/lisp.h /^# define MISCP(x) lisp_h_MISCP (x)$/ +MOST_NEGATIVE_FIXNUM c-src/emacs/src/lisp.h 835 +MOST_POSITIVE_FIXNUM c-src/emacs/src/lisp.h 834 +MOVE c-src/sysdep.h /^#define MOVE(x,y) movl x, y$/ +MSDOS c-src/etags.c 100 +MSDOS c-src/etags.c 106 +MSDOS c-src/etags.c 107 +MSDOS c-src/etags.c 110 +MSGSEL f-src/entry.for /^ ENTRY MSGSEL ( TYPE )$/ +MSGSEL f-src/entry.strange /^ ENTRY MSGSEL ( TYPE )$/ +MSGSEL f-src/entry.strange_suffix /^ ENTRY MSGSEL ( TYPE )$/ +MULTI_LETTER_MOD c-src/emacs/src/keyboard.c /^#define MULTI_LETTER_MOD(BIT, NAME, LEN) \\$/ +MULTI_LETTER_MOD c-src/emacs/src/keyboard.c /^#define MULTI_LETTER_MOD(BIT, NAME, LEN) \\$/ +MULTI_LETTER_MOD c-src/emacs/src/keyboard.c 6231 +MULTI_LETTER_MOD c-src/emacs/src/keyboard.c 6764 +Machin_T/b ada-src/waroquiers.ada /^ protected body Machin_T is$/ +Machin_T/t ada-src/etags-test-for.ada /^ protected Machin_T is$/ +Machin_T/t ada-src/etags-test-for.ada /^ protected type Machin_T is$/ +Machin_T/t ada-src/waroquiers.ada /^ protected type Machin_T is$/ +Machine_Exceptions/t ada-src/2ataspri.ads /^ type Machine_Exceptions is new Interfaces.C.POS/ +MakeDispose pyt-src/server.py /^ def MakeDispose(self):$/ +MakeSitelist pyt-src/server.py /^ def MakeSitelist(self, master):$/ +Makefile_filenames c-src/etags.c 603 +Makefile_help c-src/etags.c 605 +Makefile_targets c-src/etags.c /^Makefile_targets (FILE *inf)$/ +Mc cp-src/c.C /^int main (void) { my_function0(0); my_function1(1)/ +Mcccp y-src/cccp.y /^main ()$/ +Mconway.cpp cp-src/conway.cpp /^void main(void)$/ +Metags c-src/etags.c /^main (int argc, char **argv)$/ +Mfail cp-src/fail.C /^main()$/ +Mkai-test.pl perl-src/kai-test.pl /^package main;$/ +ModuleExample ruby-src/test.rb /^module ModuleExample$/ +More_Lisp_Bits c-src/emacs/src/lisp.h 801 +MoveLayerAfter lua-src/allegro.lua /^function MoveLayerAfter (this_one)$/ +MoveLayerBefore lua-src/allegro.lua /^function MoveLayerBefore (this_one)$/ +MoveLayerBottom lua-src/allegro.lua /^function MoveLayerBottom ()$/ +MoveLayerTop lua-src/allegro.lua /^function MoveLayerTop ()$/ +Mtest.go go-src/test.go /^func main() {$/ +Mtest.go go-src/test.go 1 +Mtest.rs rs-src/test.rs /^fn main() {$/ +Mtest1.go go-src/test1.go /^func main() {$/ +Mtest1.go go-src/test1.go 1 +Mx.cc cp-src/x.cc /^main(int argc, char *argv[])$/ +NAME y-src/cccp.c 8 +NATNUMP c-src/emacs/src/lisp.h /^NATNUMP (Lisp_Object x)$/ +NDEBUG c-src/etags.c 88 +NE y-src/parse.c 6 +NEG y-src/parse.c 9 +NEXT_ALMOST_PRIME_LIMIT c-src/emacs/src/lisp.h 3573 +NILP c-src/emacs/src/lisp.h /^# define NILP(x) lisp_h_NILP (x)$/ +NIL_IS_ZERO c-src/emacs/src/lisp.h 1515 +NONPOINTER_BITS c-src/emacs/src/lisp.h 78 +NONPOINTER_BITS c-src/emacs/src/lisp.h 80 +NONSRCS make-src/Makefile /^NONSRCS=entry.strange lists.erl clheir.hpp.gz$/ +NOTEQUAL y-src/cccp.c 13 +NULL y-src/cccp.y 51 +NULL_PTR y-src/cccp.y 63 +NUMSTATS objc-src/PackInsp.h 36 +NUM_MOD_NAMES c-src/emacs/src/keyboard.c 6325 +NUM_RECENT_KEYS c-src/emacs/src/keyboard.c 91 +NameHasChar pas-src/common.pas /^function NameHasChar; (* (TheName : NameString; Th/ +NameStringLess pas-src/common.pas /^function NameStringLess;(*(var Name1,Name2 : NameS/ +NewLayer lua-src/allegro.lua /^function NewLayer (name, x, y, w, h)$/ +NewLayerSet lua-src/allegro.lua /^function NewLayerSet (name)$/ +NewNameString pas-src/common.pas /^procedure NewNameString; (* (var NSP: NameStringPo/ +NmStrToErrStr pas-src/common.pas /^function NmStrToErrStr;(*($/ +NmStrToInteger pas-src/common.pas /^function NmStrToInteger; (* (Str : NameString) : i/ +OBJCPPSRC make-src/Makefile /^OBJCPPSRC=SimpleCalc.H SimpleCalc.M$/ +OBJCSRC make-src/Makefile /^OBJCSRC=Subprocess.h Subprocess.m PackInsp.h PackI/ +OBJS make-src/Makefile /^OBJS=${GETOPTOBJS} ${REGEXOBJS} ${CHECKOBJS}$/ +OPENBUTTON objc-src/PackInsp.m 47 +OPTIONS make-src/Makefile /^OPTIONS=--members --declarations --regex=@regexfil/ +OR y-src/cccp.c 10 +OTAGS make-src/Makefile /^OTAGS: oetags ${SRCS} srclist$/ +OVERLAYP c-src/emacs/src/lisp.h /^OVERLAYP (Lisp_Object x)$/ +Objc_help c-src/etags.c 613 +Objc_suffixes c-src/etags.c 609 +OperatorFun c-src/h.h 88 +Overview tex-src/gzip.texi /^@node Overview, Sample, Copying, Top$/ +PASSRC make-src/Makefile /^PASSRC=common.pas$/ +PDT c-src/h.h /^ Date 04 May 87 235311 PDT (Mon)$/ +PERLSRC make-src/Makefile /^PERLSRC=htlmify-cystic yagrip.pl kai-test.pl mirro/ +PHPSRC make-src/Makefile /^PHPSRC=lce_functions.php ptest.php sendmail.php$/ +PHP_functions c-src/etags.c /^PHP_functions (FILE *inf)$/ +PHP_help c-src/etags.c 639 +PHP_suffixes c-src/etags.c 637 +POEntry php-src/lce_functions.php /^ function POEntry()$/ +POEntry php-src/lce_functions.php 105 +POEntryAD php-src/lce_functions.php 29 +PORManager php-src/lce_functions.php /^ function PORManager()$/ +PORManager php-src/lce_functions.php 498 +POReader php-src/lce_functions.php /^ function POReader($domain, $filename)$/ +POReader php-src/lce_functions.php 163 +POSTSCRIPTFLAGS make-src/Makefile /^POSTSCRIPTFLAGS=--language=none --regex='#\/[^ \\t{]/ +PRINT_UNDOCUMENTED_OPTIONS_HELP c-src/etags.c 804 +PROCESSP c-src/emacs/src/lisp.h /^PROCESSP (Lisp_Object a)$/ +PROLSRC make-src/Makefile /^PROLSRC=ordsets.prolog natded.prolog$/ +PROP c-src/emacs/src/keyboard.c /^#define PROP(IDX) AREF (tool_bar_item_properties, / +PROP c-src/emacs/src/keyboard.c 8379 +PROTECT_MALLOC_STATE c-src/emacs/src/gmalloc.c /^#define PROTECT_MALLOC_STATE(PROT) \/* empty *\/$/ +PROTECT_MALLOC_STATE c-src/emacs/src/gmalloc.c /^#define PROTECT_MALLOC_STATE(PROT) protect_malloc_/ +PRTPKG f-src/entry.for /^ LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL,/ +PRTPKG f-src/entry.strange /^ LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL,/ +PRTPKG f-src/entry.strange_suffix /^ LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL,/ +PSEUDO c-src/sysdep.h /^#define PSEUDO(name, syscall_name, args) / +PSEUDOVECSIZE c-src/emacs/src/lisp.h /^#define PSEUDOVECSIZE(type, nonlispfield) \\$/ +PSEUDOVECTORP c-src/emacs/src/lisp.h /^PSEUDOVECTORP (Lisp_Object a, int code)$/ +PSEUDOVECTOR_AREA_BITS c-src/emacs/src/lisp.h 818 +PSEUDOVECTOR_FLAG c-src/emacs/src/lisp.h 774 +PSEUDOVECTOR_REST_BITS c-src/emacs/src/lisp.h 813 +PSEUDOVECTOR_REST_MASK c-src/emacs/src/lisp.h 814 +PSEUDOVECTOR_SIZE_BITS c-src/emacs/src/lisp.h 808 +PSEUDOVECTOR_SIZE_MASK c-src/emacs/src/lisp.h 809 +PSEUDOVECTOR_TYPEP c-src/emacs/src/lisp.h /^PSEUDOVECTOR_TYPEP (struct vectorlike_header *a, i/ +PSSRC make-src/Makefile /^PSSRC=rfc1245.ps$/ +PS_functions c-src/etags.c /^PS_functions (FILE *inf)$/ +PS_help c-src/etags.c 649 +PS_suffixes c-src/etags.c 647 +PTY_LENGTH objc-src/Subprocess.m 21 +PTY_TEMPLATE objc-src/Subprocess.m 20 +PUSH_C_STR c-src/emacs/src/keyboard.c /^#define PUSH_C_STR(str, listvar) \\$/ +PUSH_HANDLER c-src/emacs/src/lisp.h /^#define PUSH_HANDLER(c, tag_ch_val, handlertype) \\/ +PVEC_BOOL_VECTOR c-src/emacs/src/lisp.h 787 +PVEC_BUFFER c-src/emacs/src/lisp.h 788 +PVEC_CHAR_TABLE c-src/emacs/src/lisp.h 796 +PVEC_COMPILED c-src/emacs/src/lisp.h 795 +PVEC_FONT c-src/emacs/src/lisp.h 798 +PVEC_FRAME c-src/emacs/src/lisp.h 785 +PVEC_FREE c-src/emacs/src/lisp.h 783 +PVEC_HASH_TABLE c-src/emacs/src/lisp.h 789 +PVEC_NORMAL_VECTOR c-src/emacs/src/lisp.h 782 +PVEC_OTHER c-src/emacs/src/lisp.h 793 +PVEC_PROCESS c-src/emacs/src/lisp.h 784 +PVEC_SUBR c-src/emacs/src/lisp.h 792 +PVEC_SUB_CHAR_TABLE c-src/emacs/src/lisp.h 797 +PVEC_TERMINAL c-src/emacs/src/lisp.h 790 +PVEC_TYPE_MASK c-src/emacs/src/lisp.h 819 +PVEC_WINDOW c-src/emacs/src/lisp.h 786 +PVEC_WINDOW_CONFIGURATION c-src/emacs/src/lisp.h 791 +PYTSRC make-src/Makefile /^PYTSRC=server.py$/ +PackageInspector objc-src/PackInsp.h /^@interface PackageInspector:WMInspector$/ +Pascal_functions c-src/etags.c /^Pascal_functions (FILE *inf)$/ +Pascal_help c-src/etags.c 621 +Pascal_suffixes c-src/etags.c 619 +Perl_functions c-src/etags.c /^Perl_functions (FILE *inf)$/ +Perl_help c-src/etags.c 630 +Perl_interpreters c-src/etags.c 628 +Perl_suffixes c-src/etags.c 626 +Pkg1/b ada-src/etags-test-for.ada /^package body Pkg1 is$/ +Pkg1/b ada-src/waroquiers.ada /^package body Pkg1 is$/ +Pkg1/s ada-src/etags-test-for.ada /^package Pkg1 is$/ +Pkg1/s ada-src/waroquiers.ada /^package Pkg1 is$/ +Pkg1_Func1/f ada-src/etags-test-for.ada /^ function Pkg1_Func1 return Boolean is separate;$/ +Pkg1_Func1/f ada-src/etags-test-for.ada /^ function Pkg1_Func1 return Boolean;$/ +Pkg1_Func1/f ada-src/etags-test-for.ada /^function Pkg1_Func1 return Boolean is$/ +Pkg1_Func1/f ada-src/waroquiers.ada /^ function Pkg1_Func1 return Boolean is separate;$/ +Pkg1_Func1/f ada-src/waroquiers.ada /^ function Pkg1_Func1 return Boolean;$/ +Pkg1_Func1/f ada-src/waroquiers.ada /^function Pkg1_Func1 return Boolean is$/ +Pkg1_Func2/f ada-src/etags-test-for.ada /^ function Pkg1_Func2 (Ijk : Integer; Z : Integer)/ +Pkg1_Func2/f ada-src/waroquiers.ada /^ function Pkg1_Func2 (Ijk : Integer; Z : Integer)/ +Pkg1_Pkg1/b ada-src/etags-test-for.ada /^ package body Pkg1_Pkg1 is separate;$/ +Pkg1_Pkg1/b ada-src/etags-test-for.ada /^package body Pkg1_Pkg1 is$/ +Pkg1_Pkg1/b ada-src/waroquiers.ada /^ package body Pkg1_Pkg1 is separate;$/ +Pkg1_Pkg1/b ada-src/waroquiers.ada /^package body Pkg1_Pkg1 is$/ +Pkg1_Pkg1/s ada-src/etags-test-for.ada /^ package Pkg1_Pkg1 is$/ +Pkg1_Pkg1/s ada-src/waroquiers.ada /^ package Pkg1_Pkg1 is$/ +Pkg1_Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Pkg1_Proc1;$/ +Pkg1_Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Pkg1_Proc1 is$/ +Pkg1_Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Pkg1_Proc1;$/ +Pkg1_Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Pkg1_Proc1 is$/ +Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc1 is$/ +Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc1;$/ +Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc1 is$/ +Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc1;$/ +Pkg1_Proc2/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc2 (I : Integer) is$/ +Pkg1_Proc2/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc2 (I : Integer);$/ +Pkg1_Proc2/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc2 (I : Integer) is$/ +Pkg1_Proc2/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc2 (I : Integer);$/ +PostControls pyt-src/server.py /^ def PostControls(self):$/ +Pre_Call_State/t ada-src/2ataspri.ads /^ type Pre_Call_State is new System.Address;$/ +PrintAdd go-src/test1.go /^func (n intNumber) PrintAdd() {$/ +PrintAdd go-src/test1.go /^func (s str) PrintAdd() {$/ +Private objc-src/Subprocess.m /^@interface Subprocess(Private)$/ +Private_T/b ada-src/etags-test-for.ada /^ task body Private_T is$/ +Private_T/b ada-src/waroquiers.ada /^ task body Private_T is$/ +Private_T/k ada-src/etags-test-for.ada /^ task Private_T;$/ +Private_T/k ada-src/waroquiers.ada /^ task Private_T;$/ +Private_T/p ada-src/etags-test-for.ada /^ procedure Private_T is$/ +Private_T/p ada-src/etags-test-for.ada /^ procedure Private_T;$/ +Private_T/p ada-src/waroquiers.ada /^ procedure Private_T is$/ +Private_T/p ada-src/waroquiers.ada /^ procedure Private_T;$/ +Private_T/t ada-src/etags-test-for.ada /^ type Private_T is private;$/ +Private_T/t ada-src/etags-test-for.ada /^ type Private_T is$/ +Private_T/t ada-src/waroquiers.ada /^ type Private_T is private;$/ +Private_T/t ada-src/waroquiers.ada /^ type Private_T is$/ +Problems tex-src/gzip.texi /^@node Problems, Concept Index, Tapes, Top$/ +Proc/t ada-src/2ataspri.ads /^ type Proc is access procedure (Addr : System.Ad/ +Prolog_functions c-src/etags.c /^Prolog_functions (FILE *inf)$/ +Prolog_help c-src/etags.c 654 +Prolog_suffixes c-src/etags.c 652 +Public_T/t ada-src/etags-test-for.ada /^ type Public_T is$/ +Public_T/t ada-src/waroquiers.ada /^ type Public_T is$/ +Python_functions c-src/etags.c /^Python_functions (FILE *inf)$/ +Python_help c-src/etags.c 660 +Python_suffixes c-src/etags.c 658 +QUIT c-src/emacs/src/lisp.h 3101 +QUITP c-src/emacs/src/lisp.h 3112 +RANGED_INTEGERP c-src/emacs/src/lisp.h /^RANGED_INTEGERP (intmax_t lo, Lisp_Object x, intma/ +RCSid objc-src/PackInsp.m 30 +READABLE_EVENTS_DO_TIMERS_NOW c-src/emacs/src/keyboard.c 346 +READABLE_EVENTS_FILTER_EVENTS c-src/emacs/src/keyboard.c 347 +READABLE_EVENTS_IGNORE_SQUEEZABLES c-src/emacs/src/keyboard.c 348 +RECC_ALNUM c-src/emacs/src/regex.h 610 +RECC_ALPHA c-src/emacs/src/regex.h 610 +RECC_ASCII c-src/emacs/src/regex.h 617 +RECC_BLANK c-src/emacs/src/regex.h 615 +RECC_CNTRL c-src/emacs/src/regex.h 613 +RECC_DIGIT c-src/emacs/src/regex.h 614 +RECC_ERROR c-src/emacs/src/regex.h 609 +RECC_GRAPH c-src/emacs/src/regex.h 611 +RECC_LOWER c-src/emacs/src/regex.h 612 +RECC_MULTIBYTE c-src/emacs/src/regex.h 616 +RECC_NONASCII c-src/emacs/src/regex.h 616 +RECC_PRINT c-src/emacs/src/regex.h 611 +RECC_PUNCT c-src/emacs/src/regex.h 613 +RECC_SPACE c-src/emacs/src/regex.h 615 +RECC_UNIBYTE c-src/emacs/src/regex.h 617 +RECC_UPPER c-src/emacs/src/regex.h 612 +RECC_WORD c-src/emacs/src/regex.h 610 +RECC_XDIGIT c-src/emacs/src/regex.h 614 +RED cp-src/screen.hpp 16 +REGEX make-src/Makefile /^REGEX=\/[ \\t]*DEFVAR_[A-Z_ \\t\\n(]+"\\([^"]+\\)"\/$/ +REGEXOBJS make-src/Makefile /^REGEXOBJS=regex.o$/ +REGS_FIXED c-src/emacs/src/regex.h 378 +REGS_REALLOCATE c-src/emacs/src/regex.h 377 +REGS_UNALLOCATED c-src/emacs/src/regex.h 376 +REG_BADBR c-src/emacs/src/regex.h 313 +REG_BADPAT c-src/emacs/src/regex.h 305 +REG_BADRPT c-src/emacs/src/regex.h 316 +REG_EBRACE c-src/emacs/src/regex.h 312 +REG_EBRACK c-src/emacs/src/regex.h 310 +REG_ECOLLATE c-src/emacs/src/regex.h 306 +REG_ECTYPE c-src/emacs/src/regex.h 307 +REG_EEND c-src/emacs/src/regex.h 319 +REG_EESCAPE c-src/emacs/src/regex.h 308 +REG_ENOSYS c-src/emacs/src/regex.h 297 +REG_ENOSYS c.c 279 +REG_EPAREN c-src/emacs/src/regex.h 311 +REG_ERANGE c-src/emacs/src/regex.h 314 +REG_ERANGEX c-src/emacs/src/regex.h 322 +REG_ERPAREN c-src/emacs/src/regex.h 321 +REG_ESIZE c-src/emacs/src/regex.h 320 +REG_ESPACE c-src/emacs/src/regex.h 315 +REG_ESUBREG c-src/emacs/src/regex.h 309 +REG_EXTENDED c-src/emacs/src/regex.h 263 +REG_ICASE c-src/emacs/src/regex.h 267 +REG_NEWLINE c-src/emacs/src/regex.h 272 +REG_NOERROR c-src/emacs/src/regex.h 300 +REG_NOMATCH c-src/emacs/src/regex.h 301 +REG_NOSUB c-src/emacs/src/regex.h 276 +REG_NOTBOL c-src/emacs/src/regex.h 286 +REG_NOTEOL c-src/emacs/src/regex.h 289 +RELEASELIST make-src/Makefile /^RELEASELIST=pot@gnu.org xemacs-review@xemacs.org j/ +RESUME_POLLING c-src/emacs/src/keyboard.c 2170 +RETURN_UNGCPRO c-src/emacs/src/lisp.h /^#define RETURN_UNGCPRO(expr) \\$/ +RE_BACKSLASH_ESCAPE_IN_LISTS c-src/emacs/src/regex.h 47 +RE_BK_PLUS_QM c-src/emacs/src/regex.h 52 +RE_CHAR_CLASSES c-src/emacs/src/regex.h 58 +RE_CONTEXT_INDEP_ANCHORS c-src/emacs/src/regex.h 72 +RE_CONTEXT_INDEP_OPS c-src/emacs/src/regex.h 80 +RE_CONTEXT_INVALID_OPS c-src/emacs/src/regex.h 84 +RE_DEBUG c-src/emacs/src/regex.h 161 +RE_DOT_NEWLINE c-src/emacs/src/regex.h 88 +RE_DOT_NOT_NULL c-src/emacs/src/regex.h 92 +RE_DUP_MAX c-src/emacs/src/regex.h 253 +RE_DUP_MAX c-src/emacs/src/regex.h 256 +RE_FRUGAL c-src/emacs/src/regex.h 147 +RE_HAT_LISTS_NOT_NEWLINE c-src/emacs/src/regex.h 96 +RE_INTERVALS c-src/emacs/src/regex.h 101 +RE_LIMITED_OPS c-src/emacs/src/regex.h 105 +RE_NEWLINE_ALT c-src/emacs/src/regex.h 109 +RE_NO_BK_BRACES c-src/emacs/src/regex.h 114 +RE_NO_BK_PARENS c-src/emacs/src/regex.h 118 +RE_NO_BK_REFS c-src/emacs/src/regex.h 122 +RE_NO_BK_VBAR c-src/emacs/src/regex.h 126 +RE_NO_EMPTY_RANGES c-src/emacs/src/regex.h 132 +RE_NO_GNU_OPS c-src/emacs/src/regex.h 144 +RE_NO_NEWLINE_ANCHOR c-src/emacs/src/regex.h 153 +RE_NO_POSIX_BACKTRACKING c-src/emacs/src/regex.h 140 +RE_NREGS c-src/emacs/src/regex.h 440 +RE_SHY_GROUPS c-src/emacs/src/regex.h 150 +RE_SYNTAX_AWK c-src/emacs/src/regex.h 186 +RE_SYNTAX_ED c-src/emacs/src/regex.h 216 +RE_SYNTAX_EGREP c-src/emacs/src/regex.h 206 +RE_SYNTAX_EMACS c-src/emacs/src/regex.h 183 +RE_SYNTAX_GNU_AWK c-src/emacs/src/regex.h 193 +RE_SYNTAX_GREP c-src/emacs/src/regex.h 201 +RE_SYNTAX_POSIX_AWK c-src/emacs/src/regex.h 197 +RE_SYNTAX_POSIX_BASIC c-src/emacs/src/regex.h 225 +RE_SYNTAX_POSIX_EGREP c-src/emacs/src/regex.h 212 +RE_SYNTAX_POSIX_EXTENDED c-src/emacs/src/regex.h 234 +RE_SYNTAX_POSIX_MINIMAL_BASIC c-src/emacs/src/regex.h 231 +RE_SYNTAX_POSIX_MINIMAL_EXTENDED c-src/emacs/src/regex.h 242 +RE_SYNTAX_SED c-src/emacs/src/regex.h 218 +RE_TRANSLATE_TYPE c-src/emacs/src/regex.h 332 +RE_UNMATCHED_RIGHT_PAREN_ORD c-src/emacs/src/regex.h 136 +RSH y-src/cccp.c 17 +RTE/s ada-src/2ataspri.adb /^ package RTE renames Interfaces.C.POSIX_RTE;$/ +RUN make-src/Makefile /^RUN=$/ +RUN make-src/Makefile /^RUN=time --quiet --format '%U + %S: %E'$/ +RXINCLUDE make-src/Makefile /^RXINCLUDE=-Iemacs\/src$/ +Range cp-src/Range.h /^ Range (const Range& r)$/ +Range cp-src/Range.h /^ Range (double b, double l)$/ +Range cp-src/Range.h /^ Range (double b, double l, double i)$/ +Range cp-src/Range.h /^ Range (void)$/ +Range cp-src/Range.h 35 +ReadVacation cp-src/functions.cpp /^void ReadVacation ( char *filename ) {$/ +Read_Lock/p ada-src/2ataspri.adb /^ procedure Read_Lock (L : in out Lock; Ceiling_V/ +Read_Lock/p ada-src/2ataspri.ads /^ procedure Read_Lock (L : in out Lock; Ceiling_V/ +Rectangle.getPos lua-src/test.lua /^function Rectangle.getPos ()$/ +ReleaseNameString pas-src/common.pas /^procedure ReleaseNameString; (* (var NSP: NameStri/ +RemoveLayer lua-src/allegro.lua /^function RemoveLayer ()$/ +RemoveUnderlineControl pas-src/common.pas /^function RemoveUnderlineControl; (*($/ +ReprOfChar pas-src/common.pas /^function ReprOfChar; (*( ch : char) : NameString;*/ +S c.c 156 +SAFE_ALLOCA c-src/emacs/src/lisp.h /^#define SAFE_ALLOCA(size) ((size) <= sa_avail \\/ +SAFE_ALLOCA_LISP c-src/emacs/src/lisp.h /^#define SAFE_ALLOCA_LISP(buf, nelt) \\$/ +SAFE_ALLOCA_STRING c-src/emacs/src/lisp.h /^#define SAFE_ALLOCA_STRING(ptr, string) \\$/ +SAFE_FREE c-src/emacs/src/lisp.h /^#define SAFE_FREE() \\$/ +SAFE_NALLOCA c-src/emacs/src/lisp.h /^#define SAFE_NALLOCA(buf, multiplier, nitems) \\/ +SAVE_FUNCPOINTER c-src/emacs/src/lisp.h 2049 +SAVE_INTEGER c-src/emacs/src/lisp.h 2048 +SAVE_OBJECT c-src/emacs/src/lisp.h 2051 +SAVE_POINTER c-src/emacs/src/lisp.h 2050 +SAVE_SLOT_BITS c-src/emacs/src/lisp.h 2055 +SAVE_TYPE_BITS c-src/emacs/src/lisp.h 2062 +SAVE_TYPE_BITS c-src/emacs/src/lisp.h 2114 +SAVE_TYPE_BITS c-src/emacs/src/lisp.h 2123 +SAVE_TYPE_FUNCPTR_PTR_OBJ c-src/emacs/src/lisp.h 2076 +SAVE_TYPE_INT_INT c-src/emacs/src/lisp.h 2066 +SAVE_TYPE_INT_INT_INT c-src/emacs/src/lisp.h 2067 +SAVE_TYPE_MEMORY c-src/emacs/src/lisp.h 2080 +SAVE_TYPE_OBJ_OBJ c-src/emacs/src/lisp.h 2069 +SAVE_TYPE_OBJ_OBJ_OBJ c-src/emacs/src/lisp.h 2070 +SAVE_TYPE_OBJ_OBJ_OBJ_OBJ c-src/emacs/src/lisp.h 2071 +SAVE_TYPE_PTR_INT c-src/emacs/src/lisp.h 2073 +SAVE_TYPE_PTR_OBJ c-src/emacs/src/lisp.h 2074 +SAVE_TYPE_PTR_PTR c-src/emacs/src/lisp.h 2075 +SAVE_UNUSED c-src/emacs/src/lisp.h 2047 +SAVE_VALUEP c-src/emacs/src/lisp.h /^SAVE_VALUEP (Lisp_Object x)$/ +SAVE_VALUE_SLOTS c-src/emacs/src/lisp.h 2058 +SBYTES c-src/emacs/src/lisp.h /^SBYTES (Lisp_Object string)$/ +SCHARS c-src/emacs/src/lisp.h /^SCHARS (Lisp_Object string)$/ +SCREEN_FP cp-src/screen.hpp /^#define SCREEN_FP(x,y) \\$/ +SCREEN_START cp-src/screen.hpp 33 +SDATA c-src/emacs/src/lisp.h /^SDATA (Lisp_Object string)$/ +SDTrefGetInteger pas-src/common.pas /^function SDTrefGetInteger : integer;$/ +SDTrefIsEnd pas-src/common.pas /^function SDTrefIsEnd : Boolean;$/ +SDTrefRecToString pas-src/common.pas /^procedure SDTrefRecToString (* ($/ +SDTrefSkipSpaces pas-src/common.pas /^procedure SDTrefSkipSpaces;$/ +SDTrefStringToRec pas-src/common.pas /^procedure SDTrefStringToRec (* ($/ +SETPRT f-src/entry.for /^ ENTRY SETPRT ( SHORT, EXPL, LONG, TRACE, D/ +SETPRT f-src/entry.strange /^ ENTRY SETPRT ( SHORT, EXPL, LONG, TRACE, D/ +SETPRT f-src/entry.strange_suffix /^ ENTRY SETPRT ( SHORT, EXPL, LONG, TRACE, D/ +SET_SYMBOL_BLV c-src/emacs/src/lisp.h /^SET_SYMBOL_BLV (struct Lisp_Symbol *sym, struct Li/ +SET_SYMBOL_FWD c-src/emacs/src/lisp.h /^SET_SYMBOL_FWD (struct Lisp_Symbol *sym, union Lis/ +SET_SYMBOL_VAL c-src/emacs/src/lisp.h /^# define SET_SYMBOL_VAL(sym, v) lisp_h_SET_SYMBOL_/ +SINGLE_LETTER_MOD c-src/emacs/src/keyboard.c /^#define SINGLE_LETTER_MOD(BIT) \\$/ +SINGLE_LETTER_MOD c-src/emacs/src/keyboard.c 6212 +SINGLE_LETTER_MOD c-src/emacs/src/keyboard.c 6763 +SIZEFORMAT objc-src/PackInsp.m 57 +SPECPDL_BACKTRACE c-src/emacs/src/lisp.h 2948 +SPECPDL_INDEX c-src/emacs/src/lisp.h /^SPECPDL_INDEX (void)$/ +SPECPDL_LET c-src/emacs/src/lisp.h 2949 +SPECPDL_LET_DEFAULT c-src/emacs/src/lisp.h 2952 +SPECPDL_LET_LOCAL c-src/emacs/src/lisp.h 2951 +SPECPDL_UNWIND c-src/emacs/src/lisp.h 2944 +SPECPDL_UNWIND_INT c-src/emacs/src/lisp.h 2946 +SPECPDL_UNWIND_PTR c-src/emacs/src/lisp.h 2945 +SPECPDL_UNWIND_VOID c-src/emacs/src/lisp.h 2947 +SRCS make-src/Makefile /^SRCS=Makefile ${ADASRC} ${ASRC} ${CSRC} ${CPSRC} $/ +SREF c-src/emacs/src/lisp.h /^SREF (Lisp_Object string, ptrdiff_t index)$/ +SSDATA c-src/emacs/src/lisp.h /^SSDATA (Lisp_Object string)$/ +SSET c-src/emacs/src/lisp.h /^SSET (Lisp_Object string, ptrdiff_t index, unsigne/ +STACK_CONS c-src/emacs/src/lisp.h /^#define STACK_CONS(a, b) \\$/ +STATE_ABORT php-src/lce_functions.php 25 +STATE_COMPRESSD objc-src/PackInsp.m 54 +STATE_INSTALLED objc-src/PackInsp.m 53 +STATE_LOOP php-src/lce_functions.php 27 +STATE_OK php-src/lce_functions.php 26 +STATE_UNINSTALLED objc-src/PackInsp.m 52 +STAT_EQ objc-src/PackInsp.m /^#define STAT_EQ(s1, s2) ((s1)->st_ino == (s2)->st_/ +STDIN c-src/etags.c 408 +STDIN c-src/etags.c 411 +STOP_POLLING c-src/emacs/src/keyboard.c 2166 +STRING_BYTES c-src/emacs/src/lisp.h /^STRING_BYTES (struct Lisp_String *s)$/ +STRING_BYTES_BOUND c-src/emacs/src/lisp.h 1261 +STRING_MULTIBYTE c-src/emacs/src/lisp.h /^STRING_MULTIBYTE (Lisp_Object str)$/ +STRING_SET_CHARS c-src/emacs/src/lisp.h /^STRING_SET_CHARS (Lisp_Object string, ptrdiff_t ne/ +STRING_SET_MULTIBYTE c-src/emacs/src/lisp.h /^#define STRING_SET_MULTIBYTE(STR) \\$/ +STRING_SET_UNIBYTE c-src/emacs/src/lisp.h /^#define STRING_SET_UNIBYTE(STR) \\$/ +SUBRP c-src/emacs/src/lisp.h /^SUBRP (Lisp_Object a)$/ +SUB_CHAR_TABLE_OFFSET c-src/emacs/src/lisp.h 1701 +SUB_CHAR_TABLE_P c-src/emacs/src/lisp.h /^SUB_CHAR_TABLE_P (Lisp_Object a)$/ +SXHASH_REDUCE c-src/emacs/src/lisp.h /^SXHASH_REDUCE (EMACS_UINT x)$/ +SYMBOLP c-src/emacs/src/lisp.h /^# define SYMBOLP(x) lisp_h_SYMBOLP (x)$/ +SYMBOL_BLV c-src/emacs/src/lisp.h /^SYMBOL_BLV (struct Lisp_Symbol *sym)$/ +SYMBOL_CONSTANT_P c-src/emacs/src/lisp.h /^# define SYMBOL_CONSTANT_P(sym) lisp_h_SYMBOL_CONS/ +SYMBOL_FORWARDED c-src/emacs/src/lisp.h 651 +SYMBOL_FWD c-src/emacs/src/lisp.h /^SYMBOL_FWD (struct Lisp_Symbol *sym)$/ +SYMBOL_INDEX c-src/emacs/src/lisp.h /^#define SYMBOL_INDEX(sym) i##sym$/ +SYMBOL_INTERNED c-src/emacs/src/lisp.h 642 +SYMBOL_INTERNED_IN_INITIAL_OBARRAY c-src/emacs/src/lisp.h 643 +SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P c-src/emacs/src/lisp.h /^SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P (Lisp_Object / +SYMBOL_INTERNED_P c-src/emacs/src/lisp.h /^SYMBOL_INTERNED_P (Lisp_Object sym)$/ +SYMBOL_LOCALIZED c-src/emacs/src/lisp.h 650 +SYMBOL_NAME c-src/emacs/src/lisp.h /^SYMBOL_NAME (Lisp_Object sym)$/ +SYMBOL_PLAINVAL c-src/emacs/src/lisp.h 648 +SYMBOL_UNINTERNED c-src/emacs/src/lisp.h 641 +SYMBOL_VAL c-src/emacs/src/lisp.h /^# define SYMBOL_VAL(sym) lisp_h_SYMBOL_VAL (sym)$/ +SYMBOL_VARALIAS c-src/emacs/src/lisp.h 649 +SYSCALL c-src/machsyscalls.c /^#define SYSCALL(name, number, type, args, typed_ar/ +Sample tex-src/gzip.texi /^@node Sample, Invoking gzip, Overview, Top$/ +Scheme_functions c-src/etags.c /^Scheme_functions (FILE *inf)$/ +Scheme_help c-src/etags.c 667 +Scheme_suffixes c-src/etags.c 665 +SelectLayer lua-src/allegro.lua /^function SelectLayer (layer)$/ +Self/f ada-src/2ataspri.adb /^ function Self return TCB_Ptr is$/ +Self/f ada-src/2ataspri.ads /^ function Self return TCB_Ptr;$/ +Server pyt-src/server.py /^class Server:$/ +ServerEdit pyt-src/server.py /^class ServerEdit(Frame):$/ +Set_Own_Priority/p ada-src/2ataspri.adb /^ procedure Set_Own_Priority (Prio : System.Any_P/ +Set_Own_Priority/p ada-src/2ataspri.ads /^ procedure Set_Own_Priority (Prio : System.Any_P/ +Set_Priority/p ada-src/2ataspri.adb /^ procedure Set_Priority$/ +Set_Priority/p ada-src/2ataspri.ads /^ procedure Set_Priority (T : TCB_Ptr; Prio : Sys/ +SimpleCalc objcpp-src/SimpleCalc.H /^@interface SimpleCalc:Object$/ +SkipBlanks pas-src/common.pas /^function SkipBlanks; (*($/ +SkipChars pas-src/common.pas /^function SkipChars; (*($/ +SkipSpaces pas-src/common.pas /^procedure SkipSpaces; (* (Str : NameString; var I / +Square.something:Bar lua-src/test.lua /^function Square.something:Bar ()$/ +StartDay cp-src/functions.cpp /^Date StartDay(Date a,int days){\/\/Function to calcu/ +StripPath pas-src/common.pas /^function StripPath; (*($/ +SubString pas-src/common.pas /^function SubString; (*($/ +Subprocess objc-src/Subprocess.h /^@interface Subprocess:Object$/ +Subprocess objc-src/Subprocess.h 41 +System.Task_Primitives/b ada-src/2ataspri.adb /^package body System.Task_Primitives is$/ +System.Task_Primitives/s ada-src/2ataspri.ads /^package System.Task_Primitives is$/ +T cp-src/fail.C 14 +T2 cp-src/fail.C 16 +T3 c.c 163 +TAGS make-src/Makefile /^TAGS: etags.c$/ +TAG_PTR c-src/emacs/src/lisp.h /^#define TAG_PTR(tag, ptr) \\$/ +TAG_SYMOFFSET c-src/emacs/src/lisp.h /^#define TAG_SYMOFFSET(offset) \\$/ +TAS_Cell/t ada-src/2ataspri.ads /^ type TAS_Cell is private;$/ +TAS_Cell/t ada-src/2ataspri.ads /^ type TAS_Cell is$/ +TCB_Ptr/t ada-src/2ataspri.ads /^ type TCB_Ptr is access all Task_Control_Block;$/ +TCLFLAGS make-src/Makefile /^TCLFLAGS=--lang=none --regex='\/proc[ \\t]+\\([^ \\t]+/ +TERMINALP c-src/emacs/src/lisp.h /^TERMINALP (Lisp_Object a)$/ +TEST php-src/ptest.php 1 +TEXSRC make-src/Makefile /^TEXSRC=testenv.tex gzip.texi texinfo.tex nonewline/ +TEX_LESC c-src/etags.c 4986 +TEX_SESC c-src/etags.c 4987 +TEX_clgrp c-src/etags.c 4922 +TEX_decode_env c-src/etags.c /^TEX_decode_env (const char *evarname, const char */ +TEX_defenv c-src/etags.c 4912 +TEX_esc c-src/etags.c 4920 +TEX_mode c-src/etags.c /^TEX_mode (FILE *inf)$/ +TEX_opgrp c-src/etags.c 4921 +TEX_toktab c-src/etags.c 4908 +TOTAL_KEYWORDS c-src/etags.c 2325 +TSL/s ada-src/2ataspri.adb /^ package TSL renames System.Tasking_Soft_Links;$/ +TYPESTOSTAT objc-src/PackInsp.h 37 +TYPE_RANGED_INTEGERP c-src/emacs/src/lisp.h /^#define TYPE_RANGED_INTEGERP(type, x) \\$/ +Tapes tex-src/gzip.texi /^@node Tapes, Problems, Environment, Top$/ +Task_Control_Block/t ada-src/2ataspri.ads /^ type Task_Control_Block is record$/ +Task_Storage_Size/t ada-src/2ataspri.ads /^ type Task_Storage_Size is new Interfaces.C.size/ +Task_Type/b ada-src/etags-test-for.ada /^ task body Task_Type is$/ +Task_Type/b ada-src/waroquiers.ada /^ task body Task_Type is$/ +Task_Type/k ada-src/etags-test-for.ada /^ task type Task_Type is$/ +Task_Type/k ada-src/waroquiers.ada /^ task type Task_Type is$/ +TeX tex-src/texinfo.tex /^\\def\\TeX{\\realbackslash TeX}$/ +TeX tex-src/texinfo.tex /^\\def\\TeX{\\realbackslash TeX}%$/ +TeX tex-src/texinfo.tex /^\\let\\TeX=\\indexdummytex$/ +TeX_commands c-src/etags.c /^TeX_commands (FILE *inf)$/ +TeX_help c-src/etags.c 674 +TeX_suffixes c-src/etags.c 672 +Test_Abort/p ada-src/2ataspri.adb /^ procedure Test_Abort is$/ +Test_Abort/p ada-src/2ataspri.ads /^ procedure Test_Abort;$/ +Test_And_Set/p ada-src/2ataspri.adb /^ procedure Test_And_Set (Cell : in out TAS_Cell;/ +Test_And_Set/p ada-src/2ataspri.ads /^ procedure Test_And_Set (Cell : in out TAS_Cell;/ +Texinfo_help c-src/etags.c 688 +Texinfo_nodes c-src/etags.c /^Texinfo_nodes (FILE *inf)$/ +Texinfo_suffixes c-src/etags.c 686 +Time_to_position c-src/emacs/src/keyboard.c /^Time_to_position (Time encoded_pos)$/ +To_Lower pas-src/common.pas /^function To_Lower;(*(ch:char) : char;*)$/ +To_Start_Addr/f ada-src/2ataspri.adb /^ function To_Start_Addr is new$/ +To_TCB_Ptr/f ada-src/2ataspri.adb /^ function To_TCB_Ptr is new$/ +To_Upper pas-src/common.pas /^function To_Upper;(*(ch:char) : char;*)$/ +To_void_ptr/f ada-src/2ataspri.adb /^ function To_void_ptr is new$/ +Top tex-src/gzip.texi /^@node Top, , , (dir)$/ +Truc.Bidule/b ada-src/etags-test-for.ada /^package body Truc.Bidule is$/ +Truc.Bidule/b ada-src/waroquiers.ada /^package body Truc.Bidule is$/ +Truc.Bidule/s ada-src/etags-test-for.ada /^package Truc.Bidule is$/ +Truc.Bidule/s ada-src/waroquiers.ada /^package Truc.Bidule is$/ +Truc/s ada-src/etags-test-for.ada /^package Truc is$/ +Truc/s ada-src/waroquiers.ada /^package Truc is$/ +Type_Specific_Data/t ada-src/etags-test-for.ada /^ type Type_Specific_Data is record$/ +UCHAR c-src/emacs/src/lisp.h 2424 +UNARY y-src/cccp.c 18 +UNDEFINED c-src/h.h 118 +UNEVALLED c-src/emacs/src/lisp.h 2834 +UNGCPRO c-src/emacs/src/lisp.h 3202 +UNGCPRO c-src/emacs/src/lisp.h 3257 +UNGCPRO c-src/emacs/src/lisp.h 3353 +UNLOCK c-src/emacs/src/gmalloc.c /^#define UNLOCK() \\$/ +UNLOCK c-src/emacs/src/gmalloc.c /^#define UNLOCK()$/ +UNLOCK_ALIGNED_BLOCKS c-src/emacs/src/gmalloc.c /^#define UNLOCK_ALIGNED_BLOCKS() \\$/ +UNLOCK_ALIGNED_BLOCKS c-src/emacs/src/gmalloc.c /^#define UNLOCK_ALIGNED_BLOCKS()$/ +UNSIGNED_CMP c-src/emacs/src/lisp.h /^#define UNSIGNED_CMP(a, op, b) \\$/ +USE_LSB_TAG c-src/emacs/src/lisp.h /^DEFINE_GDB_SYMBOL_BEGIN (bool, USE_LSB_TAG)$/ +USE_LSB_TAG c-src/emacs/src/lisp.h 271 +USE_PTHREAD c-src/emacs/src/gmalloc.c 25 +USE_SAFE_ALLOCA c-src/emacs/src/lisp.h 4560 +USE_STACK_CONS c-src/emacs/src/lisp.h 4689 +USE_STACK_LISP_OBJECTS c-src/emacs/src/lisp.h 4652 +USE_STACK_LISP_OBJECTS c-src/emacs/src/lisp.h 4658 +USE_STACK_LISP_OBJECTS c-src/emacs/src/lisp.h 4659 +USE_STACK_STRING c-src/emacs/src/lisp.h 4691 +U_CHAR y-src/cccp.y 38 +Unlock/p ada-src/2ataspri.adb /^ procedure Unlock (L : in out Lock) is$/ +Unlock/p ada-src/2ataspri.ads /^ procedure Unlock (L : in out Lock);$/ +User pyt-src/server.py /^class User:$/ +UserEdit pyt-src/server.py /^class UserEdit(Frame):$/ +VALBITS c-src/emacs/src/lisp.h 246 +VALMASK c-src/emacs/src/lisp.h /^DEFINE_GDB_SYMBOL_BEGIN (EMACS_INT, VALMASK)$/ +VALMASK c-src/emacs/src/lisp.h 829 +VAL_MAX c-src/emacs/src/lisp.h 263 +VECSIZE c-src/emacs/src/lisp.h /^#define VECSIZE(type) \\$/ +VECTORLIKEP c-src/emacs/src/lisp.h /^# define VECTORLIKEP(x) lisp_h_VECTORLIKEP (x)$/ +VECTORP c-src/emacs/src/lisp.h /^VECTORP (Lisp_Object x)$/ +VERSION c-src/etags.c 789 +VERSION erl-src/gs_dialog.erl /^-define(VERSION, '2001.1101').$/ +VERSION objc-src/PackInsp.m 34 +VHDLFLAGS make-src/Makefile /^VHDLFLAGS=--language=none --regex='\/[ \\t]*\\(ARCHIT/ +Vabbrev_start_location c-src/abbrev.c 63 +Vabbrev_start_location_buffer c-src/abbrev.c 66 +Vabbrev_table_name_list c-src/abbrev.c 43 +ValToNmStr pas-src/common.pas /^function ValToNmStr; (*($/ +Vfundamental_mode_abbrev_table c-src/abbrev.c 52 +Vglobal_abbrev_table c-src/abbrev.c 48 +Vlast_abbrev c-src/abbrev.c 70 +Vlast_abbrev_text c-src/abbrev.c 75 +Vlispy_mouse_stem c-src/emacs/src/keyboard.c 5172 +WAIT_READING_MAX c-src/emacs/src/lisp.h 4281 +WAIT_READING_MAX c-src/emacs/src/lisp.h 4283 +WARNINGS make-src/Makefile /^WARNINGS=-pedantic -Wall -Wpointer-arith -Winline / +WCHAR_TYPE_SIZE y-src/cccp.y 99 +WHITE cp-src/screen.hpp 27 +WINDOWP c-src/emacs/src/lisp.h /^WINDOWP (Lisp_Object a)$/ +WINDOWSNT c-src/etags.c 101 +WINDOWSNT c-src/etags.c 102 +WINDOW_CONFIGURATIONP c-src/emacs/src/lisp.h /^WINDOW_CONFIGURATIONP (Lisp_Object a)$/ +WORKING objc-src/PackInsp.m 368 +WorkingDays cp-src/functions.cpp /^int WorkingDays(Date a, Date b){$/ +Write_Lock/p ada-src/2ataspri.adb /^ procedure Write_Lock (L : in out Lock; Ceiling_/ +Write_Lock/p ada-src/2ataspri.ads /^ procedure Write_Lock (L : in out Lock; Ceiling_/ +X c-src/h.h 100 +XBOOL_VECTOR c-src/emacs/src/lisp.h /^XBOOL_VECTOR (Lisp_Object a)$/ +XBUFFER c-src/emacs/src/lisp.h /^XBUFFER (Lisp_Object a)$/ +XBUFFER_OBJFWD c-src/emacs/src/lisp.h /^XBUFFER_OBJFWD (union Lisp_Fwd *a)$/ +XCAR c-src/emacs/src/lisp.h /^# define XCAR(c) lisp_h_XCAR (c)$/ +XCDR c-src/emacs/src/lisp.h /^# define XCDR(c) lisp_h_XCDR (c)$/ +XCHAR_TABLE c-src/emacs/src/lisp.h /^XCHAR_TABLE (Lisp_Object a)$/ +XCHG_0 c-src/sysdep.h 47 +XCHG_1 c-src/sysdep.h 48 +XCHG_2 c-src/sysdep.h 49 +XCHG_3 c-src/sysdep.h 50 +XCHG_4 c-src/sysdep.h 51 +XCHG_5 c-src/sysdep.h 52 +XCONS c-src/emacs/src/lisp.h /^# define XCONS(a) lisp_h_XCONS (a)$/ +XDEFUN c.c /^XDEFUN ("x-get-selection-internal", Fx_get_selecti/ +XFASTINT c-src/emacs/src/lisp.h /^# define XFASTINT(a) lisp_h_XFASTINT (a)$/ +XFASTINT c-src/emacs/src/lisp.h /^XFASTINT (Lisp_Object a)$/ +XFINALIZER c-src/emacs/src/lisp.h /^XFINALIZER (Lisp_Object a)$/ +XFLOAT c-src/emacs/src/lisp.h /^XFLOAT (Lisp_Object a)$/ +XFLOATINT c-src/emacs/src/lisp.h /^XFLOATINT (Lisp_Object n)$/ +XFLOAT_DATA c-src/emacs/src/lisp.h /^XFLOAT_DATA (Lisp_Object f)$/ +XFWDTYPE c-src/emacs/src/lisp.h /^XFWDTYPE (union Lisp_Fwd *a)$/ +XHASH c-src/emacs/src/lisp.h /^# define XHASH(a) lisp_h_XHASH (a)$/ +XHASH_TABLE c-src/emacs/src/lisp.h /^XHASH_TABLE (Lisp_Object a)$/ +XIL c-src/emacs/src/lisp.h /^# define XIL(i) lisp_h_XIL (i)$/ +XINT c-src/emacs/src/lisp.h /^# define XINT(a) lisp_h_XINT (a)$/ +XINT c-src/emacs/src/lisp.h /^XINT (Lisp_Object a)$/ +XINTPTR c-src/emacs/src/lisp.h /^XINTPTR (Lisp_Object a)$/ +XLI c-src/emacs/src/lisp.h /^# define XLI(o) lisp_h_XLI (o)$/ +XLI_BUILTIN_LISPSYM c-src/emacs/src/lisp.h /^#define XLI_BUILTIN_LISPSYM(iname) TAG_SYMOFFSET (/ +XMARKER c-src/emacs/src/lisp.h /^XMARKER (Lisp_Object a)$/ +XMISC c-src/emacs/src/lisp.h /^XMISC (Lisp_Object a)$/ +XMISCANY c-src/emacs/src/lisp.h /^XMISCANY (Lisp_Object a)$/ +XMISCTYPE c-src/emacs/src/lisp.h /^XMISCTYPE (Lisp_Object a)$/ +XOVERLAY c-src/emacs/src/lisp.h /^XOVERLAY (Lisp_Object a)$/ +XPNTR c-src/emacs/src/lisp.h /^# define XPNTR(a) lisp_h_XPNTR (a)$/ +XPROCESS c-src/emacs/src/lisp.h /^XPROCESS (Lisp_Object a)$/ +XSAVE_FUNCPOINTER c-src/emacs/src/lisp.h /^XSAVE_FUNCPOINTER (Lisp_Object obj, int n)$/ +XSAVE_INTEGER c-src/emacs/src/lisp.h /^XSAVE_INTEGER (Lisp_Object obj, int n)$/ +XSAVE_OBJECT c-src/emacs/src/lisp.h /^XSAVE_OBJECT (Lisp_Object obj, int n)$/ +XSAVE_POINTER c-src/emacs/src/lisp.h /^XSAVE_POINTER (Lisp_Object obj, int n)$/ +XSAVE_VALUE c-src/emacs/src/lisp.h /^XSAVE_VALUE (Lisp_Object a)$/ +XSETBOOL_VECTOR c-src/emacs/src/lisp.h /^#define XSETBOOL_VECTOR(a, b) (XSETPSEUDOVECTOR (a/ +XSETBUFFER c-src/emacs/src/lisp.h /^#define XSETBUFFER(a, b) (XSETPSEUDOVECTOR (a, b, / +XSETCDR c-src/emacs/src/lisp.h /^XSETCDR (Lisp_Object c, Lisp_Object n)$/ +XSETCHAR_TABLE c-src/emacs/src/lisp.h /^#define XSETCHAR_TABLE(a, b) (XSETPSEUDOVECTOR (a,/ +XSETCOMPILED c-src/emacs/src/lisp.h /^#define XSETCOMPILED(a, b) (XSETPSEUDOVECTOR (a, b/ +XSETCONS c-src/emacs/src/lisp.h /^#define XSETCONS(a, b) ((a) = make_lisp_ptr (b, Li/ +XSETFASTINT c-src/emacs/src/lisp.h /^#define XSETFASTINT(a, b) ((a) = make_natnum (b))$/ +XSETFLOAT c-src/emacs/src/lisp.h /^#define XSETFLOAT(a, b) ((a) = make_lisp_ptr (b, L/ +XSETINT c-src/emacs/src/lisp.h /^#define XSETINT(a, b) ((a) = make_number (b))$/ +XSETMISC c-src/emacs/src/lisp.h /^#define XSETMISC(a, b) ((a) = make_lisp_ptr (b, Li/ +XSETPROCESS c-src/emacs/src/lisp.h /^#define XSETPROCESS(a, b) (XSETPSEUDOVECTOR (a, b,/ +XSETPSEUDOVECTOR c-src/emacs/src/lisp.h /^#define XSETPSEUDOVECTOR(a, b, code) \\$/ +XSETPVECTYPE c-src/emacs/src/lisp.h /^#define XSETPVECTYPE(v, code) \\$/ +XSETPVECTYPESIZE c-src/emacs/src/lisp.h /^#define XSETPVECTYPESIZE(v, code, lispsize, restsi/ +XSETSTRING c-src/emacs/src/lisp.h /^#define XSETSTRING(a, b) ((a) = make_lisp_ptr (b, / +XSETSUBR c-src/emacs/src/lisp.h /^#define XSETSUBR(a, b) (XSETPSEUDOVECTOR (a, b, PV/ +XSETSUB_CHAR_TABLE c-src/emacs/src/lisp.h /^#define XSETSUB_CHAR_TABLE(a, b) (XSETPSEUDOVECTOR/ +XSETSYMBOL c-src/emacs/src/lisp.h /^#define XSETSYMBOL(a, b) ((a) = make_lisp_symbol (/ +XSETTERMINAL c-src/emacs/src/lisp.h /^#define XSETTERMINAL(a, b) (XSETPSEUDOVECTOR (a, b/ +XSETTYPED_PSEUDOVECTOR c-src/emacs/src/lisp.h /^#define XSETTYPED_PSEUDOVECTOR(a, b, size, code) / +XSETVECTOR c-src/emacs/src/lisp.h /^#define XSETVECTOR(a, b) ((a) = make_lisp_ptr (b, / +XSETWINDOW c-src/emacs/src/lisp.h /^#define XSETWINDOW(a, b) (XSETPSEUDOVECTOR (a, b, / +XSETWINDOW_CONFIGURATION c-src/emacs/src/lisp.h /^#define XSETWINDOW_CONFIGURATION(a, b) \\$/ +XSET_HASH_TABLE c-src/emacs/src/lisp.h /^#define XSET_HASH_TABLE(VAR, PTR) \\$/ +XSTRING c-src/emacs/src/lisp.h /^XSTRING (Lisp_Object a)$/ +XSUBR c-src/emacs/src/lisp.h /^XSUBR (Lisp_Object a)$/ +XSUB_CHAR_TABLE c-src/emacs/src/lisp.h /^XSUB_CHAR_TABLE (Lisp_Object a)$/ +XSYMBOL c-src/emacs/src/lisp.h /^# define XSYMBOL(a) lisp_h_XSYMBOL (a)$/ +XSYMBOL c-src/emacs/src/lisp.h /^XSYMBOL (Lisp_Object a)$/ +XTERMINAL c-src/emacs/src/lisp.h /^XTERMINAL (Lisp_Object a)$/ +XTYPE c-src/emacs/src/lisp.h /^# define XTYPE(a) lisp_h_XTYPE (a)$/ +XTYPE c-src/emacs/src/lisp.h /^XTYPE (Lisp_Object a)$/ +XUNTAG c-src/emacs/src/lisp.h /^# define XUNTAG(a, type) lisp_h_XUNTAG (a, type)$/ +XUNTAG c-src/emacs/src/lisp.h /^XUNTAG (Lisp_Object a, int type)$/ +XWINDOW c-src/emacs/src/lisp.h /^XWINDOW (Lisp_Object a)$/ +XX cp-src/x.cc 1 +Xyzzy ruby-src/test1.ru 13 +Y c-src/h.h 100 +YACC c-src/etags.c 2199 +YELLOW cp-src/screen.hpp 26 +YSRC make-src/Makefile /^YSRC=parse.y parse.c atest.y cccp.c cccp.y$/ +YYABORT /usr/share/bison/bison.simple 154 +YYACCEPT /usr/share/bison/bison.simple 153 +YYBACKUP /usr/share/bison/bison.simple /^#define YYBACKUP(Token, Value) \\$/ +YYBISON y-src/cccp.c 4 +YYBISON y-src/parse.c 4 +YYDPRINTF /usr/share/bison/bison.simple /^# define YYDPRINTF(Args) \\$/ +YYDPRINTF /usr/share/bison/bison.simple /^# define YYDPRINTF(Args)$/ +YYEMPTY /usr/share/bison/bison.simple 151 +YYEOF /usr/share/bison/bison.simple 152 +YYERRCODE /usr/share/bison/bison.simple 179 +YYERROR /usr/share/bison/bison.simple 155 +YYFAIL /usr/share/bison/bison.simple 159 +YYFPRINTF /usr/share/bison/bison.simple 226 +YYINITDEPTH /usr/share/bison/bison.simple 245 +YYLEX /usr/share/bison/bison.simple 201 +YYLEX /usr/share/bison/bison.simple 203 +YYLEX /usr/share/bison/bison.simple 207 +YYLEX /usr/share/bison/bison.simple 209 +YYLEX /usr/share/bison/bison.simple 213 +YYLLOC_DEFAULT /usr/share/bison/bison.simple /^# define YYLLOC_DEFAULT(Current, Rhs, N) \\$/ +YYMAXDEPTH /usr/share/bison/bison.simple 256 +YYMAXDEPTH /usr/share/bison/bison.simple 260 +YYPARSE_PARAM_ARG /usr/share/bison/bison.simple 351 +YYPARSE_PARAM_ARG /usr/share/bison/bison.simple 354 +YYPARSE_PARAM_ARG /usr/share/bison/bison.simple 358 +YYPARSE_PARAM_DECL /usr/share/bison/bison.simple 352 +YYPARSE_PARAM_DECL /usr/share/bison/bison.simple 355 +YYPARSE_PARAM_DECL /usr/share/bison/bison.simple 359 +YYPOPSTACK /usr/share/bison/bison.simple 445 +YYPOPSTACK /usr/share/bison/bison.simple 447 +YYRECOVERING /usr/share/bison/bison.simple /^#define YYRECOVERING() (!!yyerrstatus)$/ +YYSIZE_T /usr/share/bison/bison.simple 129 +YYSIZE_T /usr/share/bison/bison.simple 132 +YYSIZE_T /usr/share/bison/bison.simple 137 +YYSIZE_T /usr/share/bison/bison.simple 141 +YYSIZE_T /usr/share/bison/bison.simple 146 +YYSIZE_T /usr/share/bison/bison.simple 52 +YYSIZE_T /usr/share/bison/bison.simple 57 +YYSIZE_T /usr/share/bison/bison.simple 72 +YYSIZE_T /usr/share/bison/bison.simple 76 +YYSTACK_ALLOC /usr/share/bison/bison.simple 51 +YYSTACK_ALLOC /usr/share/bison/bison.simple 56 +YYSTACK_ALLOC /usr/share/bison/bison.simple 60 +YYSTACK_ALLOC /usr/share/bison/bison.simple 79 +YYSTACK_BYTES /usr/share/bison/bison.simple /^# define YYSTACK_BYTES(N) \\$/ +YYSTACK_FREE /usr/share/bison/bison.simple /^# define YYSTACK_FREE(Ptr) do { \/* empty *\/; } wh/ +YYSTACK_FREE /usr/share/bison/bison.simple 80 +YYSTACK_GAP_MAX /usr/share/bison/bison.simple 94 +YYSTACK_RELOCATE /usr/share/bison/bison.simple /^# define YYSTACK_RELOCATE(Type, Stack) \\$/ +YYSTACK_RELOCATE /usr/share/bison/bison.simple 548 +YYSTD /usr/share/bison/bison.simple /^# define YYSTD(x) std::x$/ +YYSTD /usr/share/bison/bison.simple /^# define YYSTD(x) x$/ +YYSTYPE y-src/parse.y 72 +YYSTYPE y-src/parse.y 73 +YYTERROR /usr/share/bison/bison.simple 178 +YY_DECL_NON_LSP_VARIABLES /usr/share/bison/bison.simple 374 +YY_DECL_VARIABLES /usr/share/bison/bison.simple 385 +YY_DECL_VARIABLES /usr/share/bison/bison.simple 391 +Yacc_entries c-src/etags.c /^Yacc_entries (FILE *inf)$/ +Yacc_help c-src/etags.c 693 +Yacc_suffixes c-src/etags.c 691 +Yappendixletterandtype tex-src/texinfo.tex /^\\def\\Yappendixletterandtype{%$/ +Ynothing tex-src/texinfo.tex /^\\def\\Ynothing{}$/ +Ypagenumber tex-src/texinfo.tex /^\\def\\Ypagenumber{\\folio}$/ +Ysectionnumberandtype tex-src/texinfo.tex /^\\def\\Ysectionnumberandtype{%$/ +Ytitle tex-src/texinfo.tex /^\\def\\Ytitle{\\thischapter}$/ +Z c-src/h.h 100 +[ tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ +[] ruby-src/test.rb /^ def [](y)$/ +[]= ruby-src/test.rb /^ def []=(y, val)$/ +] tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ +^ tex-src/texinfo.tex /^\\def^{{\\tt \\hat}}$/ +^ tex-src/texinfo.tex /^\\let^=\\normalcaret$/ +_ tex-src/texinfo.tex /^\\def\\_{\\lvvmode \\kern.06em \\vbox{\\hrule width.3em / +_ tex-src/texinfo.tex /^\\def\\_{{\\realbackslash _}}%$/ +_ tex-src/texinfo.tex /^\\def_{\\ifusingtt\\normalunderscore\\_}$/ +_ tex-src/texinfo.tex /^\\let_=\\normalunderscore$/ +_GETOPT_H c-src/getopt.h 19 +_GNU_SOURCE c-src/etags.c 94 +_REGEX_H c-src/emacs/src/regex.h 21 +_RE_SYNTAX_POSIX_COMMON c-src/emacs/src/regex.h 221 +_Restrict_ c-src/emacs/src/regex.h 540 +_Restrict_ c-src/emacs/src/regex.h 542 +_Restrict_ c-src/emacs/src/regex.h 544 +_Restrict_arr_ c-src/emacs/src/regex.h 555 +_Restrict_arr_ c-src/emacs/src/regex.h 557 +_UCHAR_T c-src/emacs/src/lisp.h 2423 +__COLORS cp-src/screen.hpp 9 +__default_morecore c-src/emacs/src/gmalloc.c /^__default_morecore (ptrdiff_t increment)$/ +__init__ pyt-src/server.py /^ def __init__(self):$/ +__init__ pyt-src/server.py /^ def __init__(self, Master, text, textvar, widt/ +__init__ pyt-src/server.py /^ def __init__(self, host, sitelist, master=None/ +__init__ pyt-src/server.py /^ def __init__(self, master=None):$/ +__init__ pyt-src/server.py /^ def __init__(self, newlegend, list, editor, ma/ +__init__ pyt-src/server.py /^ def __init__(self, user, userlist, master=None/ +__ip c.c 159 +__libc_atexit c-src/exit.c 30 +__libc_atexit c-src/exit.strange_suffix 30 +__malloc_extra_blocks c-src/emacs/src/gmalloc.c 382 +__malloc_initialize c-src/emacs/src/gmalloc.c /^__malloc_initialize (void)$/ +__malloc_initialized c-src/emacs/src/gmalloc.c 380 +__repr__ pyt-src/server.py /^ def __repr__(self):$/ +__sbrk c-src/emacs/src/gmalloc.c 1516 +__str__ pyt-src/server.py /^ def __str__(self):$/ +__up c.c 160 +_aligned_blocks c-src/emacs/src/gmalloc.c 1006 +_aligned_blocks_mutex c-src/emacs/src/gmalloc.c 519 +_bar? ruby-src/test1.ru /^ def self._bar?(abc)$/ +_bytes_free c-src/emacs/src/gmalloc.c 377 +_bytes_used c-src/emacs/src/gmalloc.c 375 +_chunks_free c-src/emacs/src/gmalloc.c 376 +_chunks_used c-src/emacs/src/gmalloc.c 374 +_fraghead c-src/emacs/src/gmalloc.c 371 +_free c-src/emacs/src/gmalloc.c /^_free (void *ptr)$/ +_free_internal c-src/emacs/src/gmalloc.c /^_free_internal (void *ptr)$/ +_free_internal_nolock c-src/emacs/src/gmalloc.c /^_free_internal_nolock (void *ptr)$/ +_heapbase c-src/emacs/src/gmalloc.c 356 +_heapindex c-src/emacs/src/gmalloc.c 365 +_heapinfo c-src/emacs/src/gmalloc.c 359 +_heaplimit c-src/emacs/src/gmalloc.c 368 +_malloc c-src/emacs/src/gmalloc.c /^_malloc (size_t size)$/ +_malloc_internal c-src/emacs/src/gmalloc.c /^_malloc_internal (size_t size)$/ +_malloc_internal_nolock c-src/emacs/src/gmalloc.c /^_malloc_internal_nolock (size_t size)$/ +_malloc_mutex c-src/emacs/src/gmalloc.c 518 +_malloc_thread_enabled_p c-src/emacs/src/gmalloc.c 520 +_realloc c-src/emacs/src/gmalloc.c /^_realloc (void *ptr, size_t size)$/ +_realloc_internal c-src/emacs/src/gmalloc.c /^_realloc_internal (void *ptr, size_t size)$/ +_realloc_internal_nolock c-src/emacs/src/gmalloc.c /^_realloc_internal_nolock (void *ptr, size_t size)$/ +` ruby-src/test.rb /^ def `(command)$/ +` tex-src/texinfo.tex /^\\def\\`{{`}}$/ +a c-src/h.h 103 +a c-src/h.h 40 +a c.c /^a ()$/ +a c.c /^a()$/ +a c.c 152 +a c.c 180 +a cp-src/c.C 132 +a ruby-src/test1.ru /^ def a()$/ +a-forth-constant! forth-src/test-forth.fth /^99 constant a-forth-constant!$/ +a-forth-value? forth-src/test-forth.fth /^55 value a-forth-value?$/ +a-forth-word forth-src/test-forth.fth /^: a-forth-word ( a b c -- )$/ +a-forth-word forth-src/test-forth.fth /^: a-forth-word ( a b c -- a*b+c ) + * ;$/ a0 c-src/emacs/src/lisp.h /^ Lisp_Object (*a0) (void);$/ a1 c-src/emacs/src/lisp.h /^ Lisp_Object (*a1) (Lisp_Object);$/ a2 c-src/emacs/src/lisp.h /^ Lisp_Object (*a2) (Lisp_Object, Lisp_Object)/ @@ -44,44 +1783,38 @@ a5 c-src/emacs/src/lisp.h /^ Lisp_Object (*a5) (Lisp_Object, Lisp_Object,/ a6 c-src/emacs/src/lisp.h /^ Lisp_Object (*a6) (Lisp_Object, Lisp_Object,/ a7 c-src/emacs/src/lisp.h /^ Lisp_Object (*a7) (Lisp_Object, Lisp_Object,/ a8 c-src/emacs/src/lisp.h /^ Lisp_Object (*a8) (Lisp_Object, Lisp_Object,/ -aaaaaa c-src/h.h 111 -aaa c.c 249 -aaa c.c 269 +aMANY c-src/emacs/src/lisp.h /^ Lisp_Object (*aMANY) (ptrdiff_t, Lisp_Object/ +aUNEVALLED c-src/emacs/src/lisp.h /^ Lisp_Object (*aUNEVALLED) (Lisp_Object args)/ aa c.c 269 aa c.c 279 -abbrev_all_caps c-src/abbrev.c 58 +aaa c.c 249 +aaa c.c 269 +aaaaaa c-src/h.h 111 abbrev-expansion c-src/abbrev.c /^DEFUN ("abbrev-expansion", Fabbrev_expansion, Sabb/ -abbrevs_changed c-src/abbrev.c 56 abbrev-symbol c-src/abbrev.c /^DEFUN ("abbrev-symbol", Fabbrev_symbol, Sabbrev_sy/ +abbrev_all_caps c-src/abbrev.c 58 +abbrevs_changed c-src/abbrev.c 56 abc c-src/h.h 33 abc c-src/h.h 37 -ABC ruby-src/test1.ru 11 -Abort_Handler_Pointer/t ada-src/2ataspri.ads /^ type Abort_Handler_Pointer is access procedure / abort-recursive-edit c-src/emacs/src/keyboard.c /^DEFUN ("abort-recursive-edit", Fabort_recursive_ed/ -Abort_Task/p ada-src/2ataspri.adb /^ procedure Abort_Task (T : TCB_Ptr) is$/ -Abort_Task/p ada-src/2ataspri.ads /^ procedure Abort_Task (T : TCB_Ptr);$/ -Abort_Wrapper/p ada-src/2ataspri.adb /^ procedure Abort_Wrapper$/ aboveenvbreak tex-src/texinfo.tex /^\\def\\aboveenvbreak{{\\advance\\aboveenvskipamount by/ abs/f ada-src/etags-test-for.ada /^ function "abs" (Right : Complex) return Real'/ absolute_dirname c-src/etags.c /^absolute_dirname (char *file, char *dir)$/ absolute_filename c-src/etags.c /^absolute_filename (char *file, char *dir)$/ abt cp-src/c.C 55 -a c.c 152 -A c.c 162 -a c.c 180 -a c.c /^a ()$/ -a c.c /^a()$/ -accent_key_syms c-src/emacs/src/keyboard.c 4625 -access_keymap_keyremap c-src/emacs/src/keyboard.c /^access_keymap_keyremap (Lisp_Object map, Lisp_Obje/ acc_pred_info merc-src/accumulator.m /^:- pred acc_pred_info(list(mer_type)::in, list(pro/ acc_proc_info merc-src/accumulator.m /^:- pred acc_proc_info(list(prog_var)::in, prog_var/ +acc_unification merc-src/accumulator.m /^:- pred acc_unification(pair(prog_var)::in, hlds_g/ +acc_var_subst_init merc-src/accumulator.m /^:- pred acc_var_subst_init(list(prog_var)::in,$/ +accent_key_syms c-src/emacs/src/keyboard.c 4625 +access_keymap_keyremap c-src/emacs/src/keyboard.c /^access_keymap_keyremap (Lisp_Object map, Lisp_Obje/ accu_assoc merc-src/accumulator.m /^:- pred accu_assoc(module_info::in, vartypes::in, / accu_assoc merc-src/accumulator.m /^:- type accu_assoc$/ accu_base merc-src/accumulator.m /^:- type accu_base$/ accu_before merc-src/accumulator.m /^:- pred accu_before(module_info::in, vartypes::in,/ accu_case merc-src/accumulator.m /^:- type accu_case$/ -accu_construct_assoc merc-src/accumulator.m /^:- pred accu_construct_assoc(module_info::in, vart/ accu_construct merc-src/accumulator.m /^:- pred accu_construct(module_info::in, vartypes::/ +accu_construct_assoc merc-src/accumulator.m /^:- pred accu_construct_assoc(module_info::in, vart/ accu_create_goal merc-src/accumulator.m /^:- pred accu_create_goal(accu_goal_id::in, list(pr/ accu_divide_base_case merc-src/accumulator.m /^:- pred accu_divide_base_case(module_info::in, var/ accu_goal_id merc-src/accumulator.m /^:- type accu_goal_id$/ @@ -91,120 +1824,83 @@ accu_has_heuristic merc-src/accumulator.m /^:- pred accu_has_heuristic(module_na accu_heuristic merc-src/accumulator.m /^:- pred accu_heuristic(module_name::in, string::in/ accu_is_associative merc-src/accumulator.m /^:- pred accu_is_associative(module_info::in, pred_/ accu_is_update merc-src/accumulator.m /^:- pred accu_is_update(module_info::in, pred_id::i/ -acc_unification merc-src/accumulator.m /^:- pred acc_unification(pair(prog_var)::in, hlds_g/ accu_process_assoc_set merc-src/accumulator.m /^:- pred accu_process_assoc_set(module_info::in, ac/ accu_process_update_set merc-src/accumulator.m /^:- pred accu_process_update_set(module_info::in, a/ accu_related merc-src/accumulator.m /^:- pred accu_related(module_info::in, vartypes::in/ accu_rename merc-src/accumulator.m /^:- func accu_rename(list(accu_goal_id), accu_subst/ -accu_sets_init merc-src/accumulator.m /^:- pred accu_sets_init(accu_sets::out) is det.$/ accu_sets merc-src/accumulator.m /^:- type accu_sets$/ -accu_stage1_2 merc-src/accumulator.m /^:- pred accu_stage1_2(module_info::in, vartypes::i/ +accu_sets_init merc-src/accumulator.m /^:- pred accu_sets_init(accu_sets::out) is det.$/ accu_stage1 merc-src/accumulator.m /^:- pred accu_stage1(module_info::in, vartypes::in,/ +accu_stage1_2 merc-src/accumulator.m /^:- pred accu_stage1_2(module_info::in, vartypes::i/ accu_stage2 merc-src/accumulator.m /^:- pred accu_stage2(module_info::in, proc_info::in/ accu_stage3 merc-src/accumulator.m /^:- pred accu_stage3(accu_goal_id::in, list(prog_va/ accu_standardize merc-src/accumulator.m /^:- pred accu_standardize(hlds_goal::in, hlds_goal:/ accu_store merc-src/accumulator.m /^:- pred accu_store(accu_case::in, hlds_goal::in,$/ accu_subst merc-src/accumulator.m /^:- type accu_subst == map(prog_var, prog_var).$/ -accu_substs_init merc-src/accumulator.m /^:- pred accu_substs_init(list(prog_var)::in, prog_/ accu_substs merc-src/accumulator.m /^:- type accu_substs$/ +accu_substs_init merc-src/accumulator.m /^:- pred accu_substs_init(list(prog_var)::in, prog_/ accu_top_level merc-src/accumulator.m /^:- pred accu_top_level(top_level::in, hlds_goal::i/ accu_transform_proc merc-src/accumulator.m /^:- pred accu_transform_proc(pred_proc_id::in, pred/ accu_update merc-src/accumulator.m /^:- pred accu_update(module_info::in, vartypes::in,/ accu_warning merc-src/accumulator.m /^:- type accu_warning$/ -acc_var_subst_init merc-src/accumulator.m /^:- pred acc_var_subst_init(list(prog_var)::in,$/ -/Acircumflex ps-src/rfc1245.ps /^\/Acircumflex \/Ecircumflex \/Aacute \/Edieresis \/Egra/ -A cp-src/c.C 117 -a cp-src/c.C 132 -A cp-src/c.C 39 -A cp-src/c.C 56 -A cp-src/c.C 57 -A cp-src/c.C 73 -~A cp-src/c.C /^A::~A() {}$/ -A cp-src/c.C /^void A::A() {}$/ -A cp-src/fail.C 23 -A cp-src/fail.C 7 -a c-src/h.h 103 -a c-src/h.h 40 +act prol-src/natded.prolog /^act(OutForm,OutSyn,Ws):-$/ action prol-src/natded.prolog /^action(KeyVals):-$/ -activedoublequote tex-src/texinfo.tex /^\\def\\activedoublequote{{\\tt \\char '042}}$/ active_maps c-src/emacs/src/keyboard.c /^active_maps (Lisp_Object first_event)$/ +activedoublequote tex-src/texinfo.tex /^\\def\\activedoublequote{{\\tt \\char '042}}$/ activeparens tex-src/texinfo.tex /^\\def\\activeparens{%$/ actout prol-src/natded.prolog /^actout('Text',Trees):-$/ -act prol-src/natded.prolog /^act(OutForm,OutSyn,Ws):-$/ -Ada_funcs c-src/etags.c /^Ada_funcs (FILE *inf)$/ -Ada_getit c-src/etags.c /^Ada_getit (FILE *inf, const char *name_qualifier)$/ -Ada_help c-src/etags.c 475 -ADASRC make-src/Makefile /^ADASRC=etags-test-for.ada 2ataspri.adb 2ataspri.ad/ -Ada_suffixes c-src/etags.c 473 -add_active prol-src/natded.prolog /^add_active([],Cat,Goal):-$/ addArchs objc-src/PackInsp.m /^-(void)addArchs:(const char *)string$/ +addPOReader php-src/lce_functions.php /^ function addPOReader($d_name, &$por)$/ +add_active prol-src/natded.prolog /^add_active([],Cat,Goal):-$/ add_command_key c-src/emacs/src/keyboard.c /^add_command_key (Lisp_Object key)$/ add_edge prol-src/natded.prolog /^add_edge(Left,Right,Cat):-$/ add_node c-src/etags.c /^add_node (node *np, node **cur_node_p)$/ -addnoise html-src/algrthms.html /^Adding Noise to the$/ -AddNullToNmStr pas-src/common.pas /^function AddNullToNmStr; (*($/ -addPOReader php-src/lce_functions.php /^ function addPOReader($d_name, &$por)$/ add_regex c-src/etags.c /^add_regex (char *regexp_pattern, language *lang)$/ -ADDRESS c-src/emacs/src/gmalloc.c /^#define ADDRESS(B) ((void *) (((B) - 1) * BLOCKSIZ/ -Address_To_Call_State/f ada-src/2ataspri.adb /^ function Address_To_Call_State is new$/ -Address_To_TCB_Ptr/f ada-src/2ataspri.ads /^ function Address_To_TCB_Ptr is new$/ -address y-src/cccp.y 113 add_user_signal c-src/emacs/src/keyboard.c /^add_user_signal (int sig, const char *name)$/ -#a-defer-word forth-src/test-forth.fth /^defer #a-defer-word$/ +addnoise html-src/algrthms.html /^Adding Noise to the$/ +address y-src/cccp.y 113 adjust_point_for_property c-src/emacs/src/keyboard.c /^adjust_point_for_property (ptrdiff_t last_pt, bool/ -Advanced usage tex-src/gzip.texi /^@node Advanced usage, Environment, Invoking gzip, / -a-forth-constant! forth-src/test-forth.fth /^99 constant a-forth-constant!$/ -(a-forth-constant forth-src/test-forth.fth /^constant (a-forth-constant$/ -:a-forth-dictionary-entry forth-src/test-forth.fth /^create :a-forth-dictionary-entry$/ -a-forth-value? forth-src/test-forth.fth /^55 value a-forth-value?$/ -a-forth-word forth-src/test-forth.fth /^: a-forth-word ( a b c -- )$/ -a-forth-word forth-src/test-forth.fth /^: a-forth-word ( a b c -- a*b+c ) + * ;$/ afourpaper tex-src/texinfo.tex /^\\def\\afourpaper{$/ afterenvbreak tex-src/texinfo.tex /^\\def\\afterenvbreak{\\endgraf \\ifdim\\lastskip<\\above/ agent cp-src/clheir.hpp 75 algorithms html-src/algrthms.html /^Description$/ alias c-src/emacs/src/lisp.h 688 -alignas c-src/emacs/src/lisp.h /^# define alignas(alignment) \/* empty *\/$/ align c-src/emacs/src/gmalloc.c /^align (size_t size)$/ +alignas c-src/emacs/src/lisp.h /^# define alignas(alignment) \/* empty *\/$/ +aligned c-src/emacs/src/gmalloc.c 199 +aligned_alloc c-src/emacs/src/gmalloc.c /^aligned_alloc (size_t alignment, size_t size)$/ aligned_alloc c-src/emacs/src/gmalloc.c 1722 aligned_alloc c-src/emacs/src/gmalloc.c 71 -aligned_alloc c-src/emacs/src/gmalloc.c /^aligned_alloc (size_t alignment, size_t size)$/ -_aligned_blocks c-src/emacs/src/gmalloc.c 1006 -_aligned_blocks_mutex c-src/emacs/src/gmalloc.c 519 -Aligned_Cons c-src/emacs/src/lisp.h 4670 -aligned c-src/emacs/src/gmalloc.c 199 -Aligned_String c-src/emacs/src/lisp.h 4676 alignlist c-src/emacs/src/gmalloc.c 196 -ALIGNOF_STRUCT_LISP_VECTOR c-src/emacs/src/lisp.h 1378 alive cp-src/conway.hpp 7 all_kboards c-src/emacs/src/keyboard.c 86 -ALLOCATED_BEFORE_DUMPING c-src/emacs/src/gmalloc.c /^#define ALLOCATED_BEFORE_DUMPING(P) \\$/ -allocated c-src/emacs/src/regex.h 344 allocate_kboard c-src/emacs/src/keyboard.c /^allocate_kboard (Lisp_Object type)$/ -ALLOCATE_PSEUDOVECTOR c-src/emacs/src/lisp.h /^#define ALLOCATE_PSEUDOVECTOR(type, field, tag) / -ALLOCATE_ZEROED_PSEUDOVECTOR c-src/emacs/src/lisp.h /^#define ALLOCATE_ZEROED_PSEUDOVECTOR(type, field, / +allocated c-src/emacs/src/regex.h 344 alphaenumerate tex-src/texinfo.tex /^\\def\\alphaenumerate{\\enumerate{a}}$/ -aMANY c-src/emacs/src/lisp.h /^ Lisp_Object (*aMANY) (ptrdiff_t, Lisp_Object/ ampnr tex-src/texinfo.tex /^\\def\\opnr{{\\sf\\char`\\(}} \\def\\clnr{{\\sf\\char`\\)}} / amprm tex-src/texinfo.tex /^\\gdef\\amprm#1 {{\\rm\\}\\let(=\\oprm \\let)=\\clrm\\ }/ -analyze_regex c-src/etags.c /^analyze_regex (char *regex_arg)$/ -andkeyvalseq prol-src/natded.prolog /^andkeyvalseq(KeyVals) --> ['&'], keyvalseq(KeyVals/ -AND y-src/cccp.c 11 an_extern_linkage c-src/h.h 44 an_extern_linkage c-src/h.h 56 an_extern_linkage_ptr c-src/h.h 43 +analyze_regex c-src/etags.c /^analyze_regex (char *regex_arg)$/ +andkeyvalseq prol-src/natded.prolog /^andkeyvalseq(KeyVals) --> ['&'], keyvalseq(KeyVals/ +animals c-src/h.h 81 animals cp-src/c.C 126 animals cp-src/c.C 130 -animals c-src/h.h 81 -(another-forth-word) forth-src/test-forth.fth /^: (another-forth-word) ( -- )$/ -ANSIC c-src/h.h 84 -ANSIC c-src/h.h 85 any_kboard_state c-src/emacs/src/keyboard.c /^any_kboard_state ()$/ appDidInit objcpp-src/SimpleCalc.M /^- appDidInit:sender$/ -appendixletter tex-src/texinfo.tex /^\\def\\appendixletter{\\char\\the\\appendixno}$/ +append prol-src/natded.prolog /^append([],Xs,Xs).$/ +appendToDisplay objcpp-src/SimpleCalc.M /^- appendToDisplay:(const char *)theDigit$/ +append_list prol-src/natded.prolog /^append_list([],[]).$/ +append_string pas-src/common.pas /^procedure append_string;(*($/ +append_tool_bar_item c-src/emacs/src/keyboard.c /^append_tool_bar_item (void)$/ +appendix perl-src/htlmify-cystic 24 +appendix tex-src/texinfo.tex /^\\let\\appendix=\\relax$/ +appendix tex-src/texinfo.tex /^\\outer\\def\\appendix{\\parsearg\\appendixzzz}$/ appendix_name perl-src/htlmify-cystic 13 +appendix_toc perl-src/htlmify-cystic 16 +appendixletter tex-src/texinfo.tex /^\\def\\appendixletter{\\char\\the\\appendixno}$/ appendixnoderef tex-src/texinfo.tex /^\\def\\appendixnoderef{\\ifx\\lastnode\\relax\\else$/ -appendix perl-src/htlmify-cystic 24 appendixsec tex-src/texinfo.tex /^\\let\\appendixsec=\\relax$/ appendixsec tex-src/texinfo.tex /^\\outer\\def\\appendixsec{\\parsearg\\appendixsectionzz/ appendixsection tex-src/texinfo.tex /^\\let\\appendixsection=\\relax$/ @@ -219,25 +1915,15 @@ appendixsubsubsec tex-src/texinfo.tex /^\\let\\appendixsubsubsec=\\relax$/ appendixsubsubsec tex-src/texinfo.tex /^\\outer\\def\\appendixsubsubsec{\\parsearg\\appendixsub/ appendixsubsubsection tex-src/texinfo.tex /^\\let\\appendixsubsubsection=\\relax$/ appendixsubsubseczzz tex-src/texinfo.tex /^\\def\\appendixsubsubseczzz #1{\\seccheck{appendixsub/ -appendix tex-src/texinfo.tex /^\\let\\appendix=\\relax$/ -appendix tex-src/texinfo.tex /^\\outer\\def\\appendix{\\parsearg\\appendixzzz}$/ -appendix_toc perl-src/htlmify-cystic 16 appendixzzz tex-src/texinfo.tex /^\\def\\appendixzzz #1{\\seccheck{appendix}%$/ -append_list prol-src/natded.prolog /^append_list([],[]).$/ -append prol-src/natded.prolog /^append([],Xs,Xs).$/ -append_string pas-src/common.pas /^procedure append_string;(*($/ -AppendTextString pas-src/common.pas /^function AppendTextString;(*($/ -appendToDisplay objcpp-src/SimpleCalc.M /^- appendToDisplay:(const char *)theDigit$/ -append_tool_bar_item c-src/emacs/src/keyboard.c /^append_tool_bar_item (void)$/ apply_modifiers c-src/emacs/src/keyboard.c /^apply_modifiers (int modifiers, Lisp_Object base)$/ apply_modifiers_uncached c-src/emacs/src/keyboard.c /^apply_modifiers_uncached (int modifiers, char *bas/ -/A ps-src/rfc1245.ps /^\/A { $/ aref_addr c-src/emacs/src/lisp.h /^aref_addr (Lisp_Object array, ptrdiff_t idx)$/ -AREF c-src/emacs/src/lisp.h /^AREF (Lisp_Object array, ptrdiff_t idx)$/ arg c-src/emacs/src/lisp.h 2961 arg c-src/emacs/src/lisp.h 2966 arg c-src/emacs/src/lisp.h 2971 arg c-src/h.h 13 +arg_type c-src/etags.c 250 arglist y-src/cccp.y 41 argno y-src/cccp.y 45 args c-src/emacs/src/lisp.h 2986 @@ -245,165 +1931,88 @@ args c-src/h.h 30 argsindent tex-src/texinfo.tex /^\\dimen1=\\hsize \\advance \\dimen1 by -\\defargsindent/ argsindent tex-src/texinfo.tex /^\\newskip\\defargsindent \\defargsindent=50pt$/ argsindent tex-src/texinfo.tex /^\\parshape 2 0in \\dimen0 \\defargsindent \\dimen1 / -ARGS make-src/Makefile /^ARGS=- < srclist$/ -arg_type c-src/etags.c 250 argument c-src/etags.c 253 argvals prol-src/natded.prolog /^argvals([]) --> [].$/ -Arith_Comparison c-src/emacs/src/lisp.h 3497 -ARITH_EQUAL c-src/emacs/src/lisp.h 3498 -ARITH_GRTR c-src/emacs/src/lisp.h 3501 -ARITH_GRTR_OR_EQUAL c-src/emacs/src/lisp.h 3503 -ARITH_LESS c-src/emacs/src/lisp.h 3500 -ARITH_LESS_OR_EQUAL c-src/emacs/src/lisp.h 3502 -ARITH_NOTEQUAL c-src/emacs/src/lisp.h 3499 array c.c 190 -ARRAYELTS c-src/emacs/src/lisp.h /^#define ARRAYELTS(arr) (sizeof (arr) \/ sizeof (arr/ -ARRAY_MARK_FLAG c-src/emacs/src/lisp.h 768 -ARRAYP c-src/emacs/src/lisp.h /^ARRAYP (Lisp_Object x)$/ -A ruby-src/test1.ru /^class A$/ -a ruby-src/test1.ru /^ def a()$/ -A ruby-src/test1.ru /^module A$/ -ASCII_CHAR_P c-src/emacs/src/lisp.h /^#define ASCII_CHAR_P(c) UNSIGNED_CMP (c, <, 0x80)$/ ascii c-src/emacs/src/lisp.h 1598 -ASET c-src/emacs/src/lisp.h /^ASET (Lisp_Object array, ptrdiff_t idx, Lisp_Objec/ asis tex-src/texinfo.tex /^\\def\\asis#1{#1}$/ -ASIZE c-src/emacs/src/lisp.h /^ASIZE (Lisp_Object array)$/ -Asm_help c-src/etags.c 504 -Asm_labels c-src/etags.c /^Asm_labels (FILE *inf)$/ -Asm_suffixes c-src/etags.c 493 asort cp-src/functions.cpp /^void asort(int *a, int num){$/ -ASRC make-src/Makefile /^ASRC=empty.zz empty.zz.gz$/ assemby-code-word forth-src/test-forth.fth /^code assemby-code-word ( dunno what it does )$/ -assert c-src/etags.c 135 assert c-src/etags.c /^# define assert(x) ((void) 0)$/ +assert c-src/etags.c 135 assign_neighbor cp-src/clheir.hpp /^ void assign_neighbor(int direction, location */ -associativity_assertion merc-src/accumulator.m /^:- pred associativity_assertion(module_info::in, l/ assoc_list merc-src/accumulator.m /^:- import_module assoc_list.$/ -AST_Array::AST_Array cp-src/c.C /^AST_Array::AST_Array(UTL_ScopedName *n, unsigned l/ -AST_ConcreteType::AST_ConcreteType cp-src/c.C /^AST_ConcreteType::AST_ConcreteType(AST_Decl::NodeT/ -AST_Root cp-src/c.C 92 -AT cp-src/c.C 52 +associativity_assertion merc-src/accumulator.m /^:- pred associativity_assertion(module_info::in, l/ at_end c-src/etags.c 249 at_filename c-src/etags.c 247 -/atilde ps-src/rfc1245.ps /^\/atilde \/aring \/ccedilla \/eacute \/egrave \/ecircumf/ at_language c-src/etags.c 245 at_least_one_member prol-src/natded.prolog /^at_least_one_member(X,[X|_]):-!.$/ -atom prol-src/natded.prolog /^atom(X) --> [X], {atomic(X)}.$/ -atomval prol-src/natded.prolog /^atomval(X) --> atom(X).$/ at_regexp c-src/etags.c 246 at_stdin c-src/etags.c 248 -AU cp-src/c.C 53 -aultparindent\hang tex-src/texinfo.tex /^\\footstrut\\parindent=\\defaultparindent\\hang\\textin/ +atom prol-src/natded.prolog /^atom(X) --> [X], {atomic(X)}.$/ +atomval prol-src/natded.prolog /^atomval(X) --> atom(X).$/ aultparindent tex-src/texinfo.tex /^\\newdimen\\defaultparindent \\defaultparindent = 15p/ aultparindent tex-src/texinfo.tex /^\\parindent = \\defaultparindent$/ -aUNEVALLED c-src/emacs/src/lisp.h /^ Lisp_Object (*aUNEVALLED) (Lisp_Object args)/ +aultparindent\hang tex-src/texinfo.tex /^\\footstrut\\parindent=\\defaultparindent\\hang\\textin/ +author tex-src/texinfo.tex /^ \\def\\author{\\parsearg\\authorzzz}%$/ authorfont tex-src/texinfo.tex /^ \\def\\authorfont{\\authorrm \\normalbaselineskip =/ authorrm tex-src/texinfo.tex /^\\let\\authorrm = \\secrm$/ -author tex-src/texinfo.tex /^ \\def\\author{\\parsearg\\authorzzz}%$/ authorzzz tex-src/texinfo.tex /^ \\def\\authorzzz##1{\\ifseenauthor\\else\\vskip 0pt / -AUTO_CONS c-src/emacs/src/lisp.h /^#define AUTO_CONS(name, a, b) Lisp_Object name = A/ -AUTO_CONS_EXPR c-src/emacs/src/lisp.h /^#define AUTO_CONS_EXPR(a, b) \\$/ auto_help c-src/etags.c 699 -AUTO_LIST1 c-src/emacs/src/lisp.h /^#define AUTO_LIST1(name, a) \\$/ -AUTO_LIST2 c-src/emacs/src/lisp.h /^#define AUTO_LIST2(name, a, b) \\$/ -AUTO_LIST3 c-src/emacs/src/lisp.h /^#define AUTO_LIST3(name, a, b, c) \\$/ -AUTO_LIST4 c-src/emacs/src/lisp.h /^#define AUTO_LIST4(name, a, b, c, d) \\$/ -AUTOLOADP c-src/emacs/src/lisp.h /^AUTOLOADP (Lisp_Object x)$/ -AUTO_STRING c-src/emacs/src/lisp.h /^#define AUTO_STRING(name, str) \\$/ -AVAIL_ALLOCA c-src/emacs/src/lisp.h /^#define AVAIL_ALLOCA(size) (sa_avail -= (size), al/ -backslash tex-src/texinfo.tex /^\\def\\rawbackslashxx{\\indexbackslash}%$/ +b c-src/h.h 103 +b c-src/h.h 104 +b c-src/h.h 41 +b c.c /^b ()$/ +b c.c 180 +b c.c 259 +b c.c 260 +b c.c 262 +b cp-src/c.C 132 +b ruby-src/test1.ru /^ def b()$/ +b tex-src/texinfo.tex /^\\def\\b##1{\\realbackslash b {##1}}$/ +b tex-src/texinfo.tex /^\\def\\b##1{\\realbackslash b {##1}}%$/ +b tex-src/texinfo.tex /^\\def\\b#1{{\\bf #1}}$/ +b tex-src/texinfo.tex /^\\let\\b=\\indexdummyfont$/ +b tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ backslash tex-src/texinfo.tex /^\\def\\rawbackslashxx{\\indexbackslash}% \\indexbacksl/ +backslash tex-src/texinfo.tex /^\\def\\rawbackslashxx{\\indexbackslash}%$/ balancecolumns tex-src/texinfo.tex /^\\def\\balancecolumns{%$/ -bar1 ruby-src/test1.ru /^ attr_reader(:foo1, :bar1, # comment$/ -bar c.c 143 -bar cp-src/x.cc /^XX::bar()$/ bar c-src/c.c /^void bar() {while(0) {}}$/ bar c-src/h.h 19 -Bar lua-src/test.lua /^function Square.something:Bar ()$/ -Bar perl-src/kai-test.pl /^package Bar;$/ -Barrier_Function_Pointer/t ada-src/etags-test-for.ada /^ type Barrier_Function_Pointer is access$/ +bar c.c 143 +bar cp-src/x.cc /^XX::bar()$/ +bar1 ruby-src/test1.ru /^ attr_reader(:foo1, :bar1, # comment$/ bar= ruby-src/test1.ru /^ attr_writer :bar,$/ -_bar? ruby-src/test1.ru /^ def self._bar?(abc)$/ +bas_syn prol-src/natded.prolog /^bas_syn(n(_)).$/ +base c-src/emacs/src/lisp.h 2188 +base cp-src/Range.h /^ double base (void) const { return rng_base; }$/ +base cp-src/c.C /^double base (void) const { return rng_base; }$/ base_case_ids merc-src/accumulator.m /^:- func base_case_ids(accu_goal_store) = list(accu/ base_case_ids_set merc-src/accumulator.m /^:- func base_case_ids_set(accu_goal_store) = set(a/ -base cp-src/c.C /^double base (void) const { return rng_base; }$/ -base cp-src/Range.h /^ double base (void) const { return rng_base; }$/ -base c-src/emacs/src/lisp.h 2188 -bas_syn prol-src/natded.prolog /^bas_syn(n(_)).$/ baz= ruby-src/test1.ru /^ :baz,$/ -bbbbbb c-src/h.h 113 -bbb c.c 251 bb c.c 275 -b c.c 180 -b c.c 259 -b c.c 260 -b c.c 262 -b c.c /^b ()$/ -B cp-src/c.C 122 -b cp-src/c.C 132 -B cp-src/c.C 54 -B cp-src/c.C 56 -B cp-src/c.C 74 -~B cp-src/c.C /^ ~B() {};$/ -B cp-src/c.C /^void B::B() {}$/ -B cp-src/fail.C 24 -B cp-src/fail.C 8 -b c-src/h.h 103 -b c-src/h.h 104 -b c-src/h.h 41 +bbb c.c 251 +bbbbbb c-src/h.h 113 been_warned c-src/etags.c 222 before_command_echo_length c-src/emacs/src/keyboard.c 130 before_command_key_count c-src/emacs/src/keyboard.c 129 -/BEGINBITMAP2BITc ps-src/rfc1245.ps /^\/BEGINBITMAP2BITc { $/ -/BEGINBITMAP2BIT ps-src/rfc1245.ps /^\/BEGINBITMAP2BIT { $/ -/BEGINBITMAPBWc ps-src/rfc1245.ps /^\/BEGINBITMAPBWc { $/ -/BEGINBITMAPBW ps-src/rfc1245.ps /^\/BEGINBITMAPBW { $/ -/BEGINBITMAPGRAYc ps-src/rfc1245.ps /^\/BEGINBITMAPGRAYc { $/ -/BEGINBITMAPGRAY ps-src/rfc1245.ps /^\/BEGINBITMAPGRAY { $/ -begindoublecolumns tex-src/texinfo.tex /^\\def\\begindoublecolumns{\\begingroup$/ -/BEGINPRINTCODE ps-src/rfc1245.ps /^\/BEGINPRINTCODE { $/ begin tex-src/texinfo.tex /^\\outer\\def\\begin{\\parsearg\\beginxxx}$/ +begindoublecolumns tex-src/texinfo.tex /^\\def\\begindoublecolumns{\\begingroup$/ beginxxx tex-src/texinfo.tex /^\\def\\beginxxx #1{%$/ begtoken c-src/etags.c /^#define begtoken(c) (_btk[CHAR (c)]) \/* c can star/ -behaviour_info erl-src/gs_dialog.erl /^behaviour_info(callbacks) ->$/ -BE_Node cp-src/c.C 77 -BE_Node cp-src/c.C /^void BE_Node::BE_Node() {}$/ -/BF ps-src/rfc1245.ps /^\/BF { $/ -bf tex-src/texinfo.tex /^\\def\\bf{\\realbackslash bf }%$/ +behaviour_info erl-src/gs_dialog.erl /^behaviour_info(callbacks) ->$/ +bf tex-src/texinfo.tex /^ \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/ bf tex-src/texinfo.tex /^\\def\\bf{\\realbackslash bf }$/ +bf tex-src/texinfo.tex /^\\def\\bf{\\realbackslash bf }%$/ bf tex-src/texinfo.tex /^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/ bf tex-src/texinfo.tex /^\\font\\defbf=cmbx10 scaled \\magstep1 %was 1314$/ -bf tex-src/texinfo.tex /^ \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/ -Bidule/b ada-src/etags-test-for.ada /^ protected body Bidule is$/ -Bidule/b ada-src/waroquiers.ada /^ protected body Bidule is$/ -Bidule/t ada-src/etags-test-for.ada /^ protected Bidule is$/ -Bidule/t ada-src/waroquiers.ada /^ protected Bidule is$/ -bind_polling_period c-src/emacs/src/keyboard.c /^bind_polling_period (int n)$/ bind pyt-src/server.py /^ def bind(self, key, action):$/ -/BITMAPCOLORc ps-src/rfc1245.ps /^\/BITMAPCOLORc { $/ -/BITMAPCOLOR ps-src/rfc1245.ps /^\/BITMAPCOLOR { $/ -/BITMAPGRAYc ps-src/rfc1245.ps /^\/BITMAPGRAYc { $/ -/BITMAPGRAY ps-src/rfc1245.ps /^\/BITMAPGRAY { $/ -BITS_PER_BITS_WORD c-src/emacs/src/lisp.h 125 -BITS_PER_BITS_WORD c-src/emacs/src/lisp.h 129 -BITS_PER_CHAR c-src/emacs/src/lisp.h 136 -BITS_PER_EMACS_INT c-src/emacs/src/lisp.h 139 -BITS_PER_LONG c-src/emacs/src/lisp.h 138 -BITS_PER_SHORT c-src/emacs/src/lisp.h 137 +bind_polling_period c-src/emacs/src/keyboard.c /^bind_polling_period (int n)$/ bits_word c-src/emacs/src/lisp.h 123 bits_word c-src/emacs/src/lisp.h 127 -BITS_WORD_MAX c-src/emacs/src/lisp.h 124 -BITS_WORD_MAX c-src/emacs/src/lisp.h 128 bla c.c /^int bla ()$/ -BLACK cp-src/screen.hpp 12 blah tex-src/testenv.tex /^\\section{blah}$/ bletch el-src/TAGTEST.EL /^(foo::defmumble bletch beuarghh)$/ -BLOCK c-src/emacs/src/gmalloc.c /^#define BLOCK(A) (((char *) (A) - _heapbase) \/ BLO/ -BLOCKIFY c-src/emacs/src/gmalloc.c /^#define BLOCKIFY(SIZE) (((SIZE) + BLOCKSIZE - 1) \// -BLOCKLOG c-src/emacs/src/gmalloc.c 125 -BLOCKSIZE c-src/emacs/src/gmalloc.c 126 -/bl ps-src/rfc1245.ps /^\/bl { $/ -BLUE cp-src/screen.hpp 13 blv c-src/emacs/src/lisp.h 689 blv_found c-src/emacs/src/lisp.h /^blv_found (struct Lisp_Buffer_Local_Value *blv)$/ bodyindent tex-src/texinfo.tex /^\\advance\\dimen2 by -\\defbodyindent$/ @@ -412,261 +2021,141 @@ bodyindent tex-src/texinfo.tex /^\\advance\\leftskip by -\\defbodyindent$/ bodyindent tex-src/texinfo.tex /^\\advance\\leftskip by \\defbodyindent \\advance \\righ/ bodyindent tex-src/texinfo.tex /^\\exdentamount=\\defbodyindent$/ bodyindent tex-src/texinfo.tex /^\\newskip\\defbodyindent \\defbodyindent=.4in$/ -Body_Required/f ada-src/etags-test-for.ada /^ function Body_Required$/ boldbrax tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ -Boo::Boo cp-src/c.C /^Boo::Boo(Boo) :$/ -Boo cp-src/c.C 129 -Boo cp-src/c.C /^ Boo(int _i, int _a, int _b) : i(_i), a(_a), b(/ bool c.c 222 -bool_header_size c-src/emacs/src/lisp.h 1472 bool merc-src/accumulator.m /^:- import_module bool.$/ -boolvar c-src/emacs/src/lisp.h 2287 +bool_header_size c-src/emacs/src/lisp.h 1472 bool_vector_bitref c-src/emacs/src/lisp.h /^bool_vector_bitref (Lisp_Object a, EMACS_INT i)$/ -BOOL_VECTOR_BITS_PER_CHAR c-src/emacs/src/lisp.h 114 -BOOL_VECTOR_BITS_PER_CHAR c-src/emacs/src/lisp.h 115 bool_vector_bytes c-src/emacs/src/lisp.h /^bool_vector_bytes (EMACS_INT size)$/ bool_vector_data c-src/emacs/src/lisp.h /^bool_vector_data (Lisp_Object a)$/ -BOOL_VECTOR_P c-src/emacs/src/lisp.h /^BOOL_VECTOR_P (Lisp_Object a)$/ bool_vector_ref c-src/emacs/src/lisp.h /^bool_vector_ref (Lisp_Object a, EMACS_INT i)$/ bool_vector_set c-src/emacs/src/lisp.h /^bool_vector_set (Lisp_Object a, EMACS_INT i, bool / bool_vector_size c-src/emacs/src/lisp.h /^bool_vector_size (Lisp_Object a)$/ bool_vector_uchar_data c-src/emacs/src/lisp.h /^bool_vector_uchar_data (Lisp_Object a)$/ bool_vector_words c-src/emacs/src/lisp.h /^bool_vector_words (EMACS_INT size)$/ -/B ps-src/rfc1245.ps /^\/B { $/ -bracelev c-src/etags.c 2520 -/braceright ps-src/rfc1245.ps /^\/braceright \/asciitilde \/.notdef \/Adieresis \/Aring/ -/bracketright ps-src/rfc1245.ps /^\/bracketright \/asciicircum \/underscore \/grave \/a \// -/breve ps-src/rfc1245.ps /^\/breve \/dotaccent \/ring \/cedilla \/hungarumlaut \/og/ -BROWN cp-src/screen.hpp 18 +boolvar c-src/emacs/src/lisp.h 2287 br tex-src/texinfo.tex /^\\let\\br = \\par$/ -B ruby-src/test1.ru /^ class B$/ -b ruby-src/test1.ru /^ def b()$/ +bracelev c-src/etags.c 2520 bsp_DevId c-src/h.h 25 bt c-src/emacs/src/lisp.h 2988 -b tex-src/texinfo.tex /^\\def\\b#1{{\\bf #1}}$/ -b tex-src/texinfo.tex /^\\def\\b##1{\\realbackslash b {##1}}%$/ -b tex-src/texinfo.tex /^\\def\\b##1{\\realbackslash b {##1}}$/ -b tex-src/texinfo.tex /^\\let\\b=\\indexdummyfont$/ -b tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ btowc c-src/emacs/src/regex.h /^# define btowc(c) c$/ buffer c-src/emacs/src/lisp.h 2000 buffer c-src/emacs/src/regex.h 341 buffer c-src/etags.c 238 buffer c-src/h.h 119 -BUFFER_OBJFWDP c-src/emacs/src/lisp.h /^BUFFER_OBJFWDP (union Lisp_Fwd *a)$/ -BUFFERP c-src/emacs/src/lisp.h /^BUFFERP (Lisp_Object a)$/ -BUFFERSIZE objc-src/Subprocess.h 43 -buildact prol-src/natded.prolog /^buildact([SynIn],Right,RightPlus1):-$/ build prol-src/natded.prolog /^build([],Left,Left).$/ build_pure_c_string c-src/emacs/src/lisp.h /^build_pure_c_string (const char *str)$/ build_string c-src/emacs/src/lisp.h /^build_string (const char *str)$/ +buildact prol-src/natded.prolog /^buildact([SynIn],Right,RightPlus1):-$/ builtin_lisp_symbol c-src/emacs/src/lisp.h /^builtin_lisp_symbol (int index)$/ bullet tex-src/texinfo.tex /^\\def\\bullet{$\\ptexbullet$}$/ bullet tex-src/texinfo.tex /^\\let\\bullet=\\ptexbullet$/ burst c-src/h.h 28 busy c-src/emacs/src/gmalloc.c 158 -ButtonBar pyt-src/server.py /^def ButtonBar(frame, legend, ref, alternatives, co/ button_down_location c-src/emacs/src/keyboard.c 5210 button_down_time c-src/emacs/src/keyboard.c 5218 bye tex-src/texinfo.tex /^\\outer\\def\\bye{\\pagealignmacro\\tracingstats=1\\ptex/ +byte_stack c-src/emacs/src/lisp.h 3049 bytecode_dest c-src/emacs/src/lisp.h 3037 bytecode_top c-src/emacs/src/lisp.h 3036 -BYTE_MARK_STACK c-src/emacs/src/lisp.h 3181 bytepos c-src/emacs/src/lisp.h 2016 bytes_free c-src/emacs/src/gmalloc.c 314 -_bytes_free c-src/emacs/src/gmalloc.c 377 -byte_stack c-src/emacs/src/lisp.h 3049 bytes_total c-src/emacs/src/gmalloc.c 310 bytes_used c-src/emacs/src/gmalloc.c 312 -_bytes_used c-src/emacs/src/gmalloc.c 375 +c c-src/h.h /^#define c() d$/ +c c-src/h.h 106 +c c.c 180 +c tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ +c tex-src/texinfo.tex /^\\let\\c=\\comment$/ +c_ext c-src/etags.c 2271 caccacacca c.c /^caccacacca (a,b,c,d,e,f,g)$/ cacheLRUEntry_s c.c 172 cacheLRUEntry_t c.c 177 calculate_goal_info merc-src/accumulator.m /^:- pred calculate_goal_info(hlds_goal_expr::in, hl/ -CALLMANY c-src/emacs/src/lisp.h /^#define CALLMANY(f, array) (f) (ARRAYELTS (array),/ -CALLN c-src/emacs/src/lisp.h /^#define CALLN(f, ...) CALLMANY (f, ((Lisp_Object [/ +calloc c-src/emacs/src/gmalloc.c /^calloc (size_t nmemb, size_t size)$/ calloc c-src/emacs/src/gmalloc.c 1721 calloc c-src/emacs/src/gmalloc.c 66 calloc c-src/emacs/src/gmalloc.c 70 -calloc c-src/emacs/src/gmalloc.c /^calloc (size_t nmemb, size_t size)$/ can_be_null c-src/emacs/src/regex.h 370 cancel_echoing c-src/emacs/src/keyboard.c /^cancel_echoing (void)$/ canonicalize_filename c-src/etags.c /^canonicalize_filename (register char *fn)$/ capsenumerate tex-src/texinfo.tex /^\\def\\capsenumerate{\\enumerate{A}}$/ -CAR c-src/emacs/src/lisp.h /^CAR (Lisp_Object c)$/ -CAR_SAFE c-src/emacs/src/lisp.h /^CAR_SAFE (Lisp_Object c)$/ cartbot tex-src/texinfo.tex /^\\def\\cartbot{\\hbox to \\cartouter{\\hskip\\lskip$/ cartouche tex-src/texinfo.tex /^\\long\\def\\cartouche{%$/ carttop tex-src/texinfo.tex /^\\def\\carttop{\\hbox to \\cartouter{\\hskip\\lskip$/ case_Lisp_Int c-src/emacs/src/lisp.h 438 -cat_atoms prol-src/natded.prolog /^cat_atoms(A1,A2,A3):-$/ -CATCHER c-src/emacs/src/lisp.h 3021 +cat c-src/h.h 81 cat cp-src/c.C 126 cat cp-src/c.C 130 -cat c-src/h.h 81 cat prol-src/natded.prolog /^cat(A, Alpha@Beta, Ass3, Qs3, tree(fe,A:Alpha@Beta/ -C_AUTO c-src/etags.c 2198 +cat_atoms prol-src/natded.prolog /^cat_atoms(A1,A2,A3):-$/ cbl tex-src/texinfo.tex /^\\def\\cbl{{\\circle\\char'012\\hskip -6pt}}$/ cbr tex-src/texinfo.tex /^\\def\\cbr{{\\hskip 6pt\\circle\\char'011}}$/ -c c.c 180 cccccccccc c-src/h.h 115 -C cp-src/fail.C 25 -C cp-src/fail.C 9 -C cp-src/fail.C /^ C(int i) {x = i;}$/ -c c-src/h.h 106 -c c-src/h.h /^#define c() d$/ -%cdiff make-src/Makefile /^%cdiff: CTAGS% CTAGS ${infiles}$/ cdr c-src/emacs/src/lisp.h 1159 -CDR c-src/emacs/src/lisp.h /^CDR (Lisp_Object c)$/ -CDR_SAFE c-src/emacs/src/lisp.h /^CDR_SAFE (Lisp_Object c)$/ cell y-src/parse.y 279 center tex-src/texinfo.tex /^\\def\\center{\\parsearg\\centerzzz}$/ centerzzz tex-src/texinfo.tex /^\\def\\centerzzz #1{{\\advance\\hsize by -\\leftskip$/ -C_entries c-src/etags.c /^C_entries (int c_ext, FILE *inf)$/ -C_EXT c-src/etags.c 2193 -c_ext c-src/etags.c 2271 -CFLAGS make-src/Makefile /^CFLAGS=${WARNINGS} -ansi -g3 # -pg -O$/ -/cfs ps-src/rfc1245.ps /^\/cfs { $/ cgrep html-src/software.html /^cgrep$/ chain c-src/emacs/src/lisp.h 1162 chain c-src/emacs/src/lisp.h 2206 chain c-src/emacs/src/lisp.h 2396 -chain_subst_2 merc-src/accumulator.m /^:- pred chain_subst_2(list(A)::in, map(A, B)::in, / chain_subst merc-src/accumulator.m /^:- func chain_subst(accu_subst, accu_subst) = accu/ -ChangeFileType pas-src/common.pas /^function ChangeFileType; (*(FileName : NameString;/ +chain_subst_2 merc-src/accumulator.m /^:- pred chain_subst_2(list(A)::in, map(A, B)::in, / chapbf tex-src/texinfo.tex /^\\let\\chapbf=\\chaprm$/ chapbreak tex-src/texinfo.tex /^\\def\\chapbreak{\\dobreak \\chapheadingskip {-4000}}$/ -chapentryfonts tex-src/texinfo.tex /^\\def\\chapentryfonts{\\secfonts \\rm}$/ -chapentry tex-src/texinfo.tex /^\\def\\chapentry#1#2#3{\\dochapentry{#2\\labelspace#1}/ chapentry tex-src/texinfo.tex /^ \\let\\chapentry = \\shortchapentry$/ +chapentry tex-src/texinfo.tex /^\\def\\chapentry#1#2#3{\\dochapentry{#2\\labelspace#1}/ +chapentryfonts tex-src/texinfo.tex /^\\def\\chapentryfonts{\\secfonts \\rm}$/ chapfonts tex-src/texinfo.tex /^\\def\\chapfonts{%$/ -CHAPFopen tex-src/texinfo.tex /^\\def\\CHAPFopen{$/ -CHAPFplain tex-src/texinfo.tex /^\\def\\CHAPFplain{$/ chapheading tex-src/texinfo.tex /^\\def\\chapheading{\\parsearg\\chapheadingzzz}$/ chapheadingzzz tex-src/texinfo.tex /^\\def\\chapheadingzzz #1{\\chapbreak %$/ chapmacro tex-src/texinfo.tex /^\\global\\let\\chapmacro=\\chfopen$/ chapmacro tex-src/texinfo.tex /^\\global\\let\\chapmacro=\\chfplain$/ chapoddpage tex-src/texinfo.tex /^\\def\\chapoddpage{\\chappager \\ifodd\\pageno \\else \\h/ chappager tex-src/texinfo.tex /^\\def\\chappager{\\par\\vfill\\supereject}$/ -CHAPPAGodd tex-src/texinfo.tex /^\\def\\CHAPPAGodd{$/ -CHAPPAGoff tex-src/texinfo.tex /^\\def\\CHAPPAGoff{$/ -CHAPPAGon tex-src/texinfo.tex /^\\def\\CHAPPAGon{$/ -chapternofonts tex-src/texinfo.tex /^\\def\\chapternofonts{%$/ chapter tex-src/texinfo.tex /^\\let\\chapter=\\relax$/ chapter tex-src/texinfo.tex /^\\outer\\def\\chapter{\\parsearg\\chapterzzz}$/ +chapternofonts tex-src/texinfo.tex /^\\def\\chapternofonts{%$/ chapterzzz tex-src/texinfo.tex /^\\def\\chapterzzz #1{\\seccheck{chapter}%$/ -CHARACTERBITS c-src/emacs/src/lisp.h 2457 -CHAR_ALT c-src/emacs/src/lisp.h 2445 -CHAR_BIT c-src/emacs/src/lisp.h 2957 -CHAR_BIT c-src/emacs/src/lisp.h 2959 -CHAR_BIT c-src/emacs/src/lisp.h 2964 -CHAR_BIT c-src/emacs/src/lisp.h 2969 -CHAR_BIT c-src/emacs/src/lisp.h 2974 -CHAR_BIT c-src/emacs/src/lisp.h 2978 -CHAR_BIT c-src/emacs/src/lisp.h 2983 +char tex-src/texinfo.tex /^\\def\\char{\\realbackslash char}$/ +char tex-src/texinfo.tex /^\\def\\char{\\realbackslash char}%$/ char_bits c-src/emacs/src/lisp.h 2443 -CHAR_CLASS_MAX_LENGTH c-src/emacs/src/regex.h 593 -CHAR_CLASS_MAX_LENGTH c-src/emacs/src/regex.h 597 -CHAR_CLASS_MAX_LENGTH c-src/emacs/src/regex.h 605 -CHAR c-src/etags.c /^#define CHAR(x) ((unsigned int)(x) & (CHARS - 1))/ -CHAR_CTL c-src/emacs/src/lisp.h 2449 -CHAR_HYPER c-src/emacs/src/lisp.h 2447 -CHAR_META c-src/emacs/src/lisp.h 2450 -CHAR_MODIFIER_MASK c-src/emacs/src/lisp.h 2452 +char_table_specials c-src/emacs/src/lisp.h 1692 charpos c-src/emacs/src/lisp.h 2011 -CHARS c-src/etags.c 157 charset_unibyte c-src/emacs/src/regex.h 410 -CHAR_SHIFT c-src/emacs/src/lisp.h 2448 -CHAR_SUPER c-src/emacs/src/lisp.h 2446 -CHAR_TABLE_EXTRA_SLOTS c-src/emacs/src/lisp.h /^CHAR_TABLE_EXTRA_SLOTS (struct Lisp_Char_Table *ct/ -CHAR_TABLE_P c-src/emacs/src/lisp.h /^CHAR_TABLE_P (Lisp_Object a)$/ -CHAR_TABLE_REF_ASCII c-src/emacs/src/lisp.h /^CHAR_TABLE_REF_ASCII (Lisp_Object ct, ptrdiff_t id/ -CHAR_TABLE_REF c-src/emacs/src/lisp.h /^CHAR_TABLE_REF (Lisp_Object ct, int idx)$/ -CHAR_TABLE_SET c-src/emacs/src/lisp.h /^CHAR_TABLE_SET (Lisp_Object ct, int idx, Lisp_Obje/ -char_table_specials c-src/emacs/src/lisp.h 1692 -CHAR_TABLE_STANDARD_SLOTS c-src/emacs/src/lisp.h 1697 -CHARTAB_SIZE_BITS_0 c-src/emacs/src/lisp.h 1567 -CHARTAB_SIZE_BITS_1 c-src/emacs/src/lisp.h 1568 -CHARTAB_SIZE_BITS_2 c-src/emacs/src/lisp.h 1569 -CHARTAB_SIZE_BITS_3 c-src/emacs/src/lisp.h 1570 -CHARTAB_SIZE_BITS c-src/emacs/src/lisp.h 1565 -char tex-src/texinfo.tex /^\\def\\char{\\realbackslash char}%$/ -char tex-src/texinfo.tex /^\\def\\char{\\realbackslash char}$/ chartonmstr pas-src/common.pas /^function chartonmstr; (*($/ -CHAR_TYPE_SIZE y-src/cccp.y 87 -CHAR y-src/cccp.c 7 -CHECK_ARRAY c-src/emacs/src/lisp.h /^CHECK_ARRAY (Lisp_Object x, Lisp_Object predicate)/ -CHECK_BOOL_VECTOR c-src/emacs/src/lisp.h /^CHECK_BOOL_VECTOR (Lisp_Object x)$/ -CHECK_BUFFER c-src/emacs/src/lisp.h /^CHECK_BUFFER (Lisp_Object x)$/ -CHECK_CONS c-src/emacs/src/lisp.h /^CHECK_CONS (Lisp_Object x)$/ +checkQuotation php-src/lce_functions.php /^ function checkQuotation($str)$/ check_cons_list c-src/emacs/src/lisp.h /^# define check_cons_list() lisp_h_check_cons_list/ checker make-src/Makefile /^checker:$/ -CHECKFLAGS make-src/Makefile /^CHECKFLAGS=-DDEBUG -Wno-unused-function$/ checkhdr c-src/emacs/src/gmalloc.c /^checkhdr (const struct hdr *hdr)$/ checkiso html-src/software.html /^checkiso$/ -CHECK_LISP_OBJECT_TYPE c-src/emacs/src/lisp.h 571 -CHECK_LISP_OBJECT_TYPE c-src/emacs/src/lisp.h 572 -CHECK_LISP_OBJECT_TYPE c-src/emacs/src/lisp.h 579 -CHECK_LIST_CONS c-src/emacs/src/lisp.h /^# define CHECK_LIST_CONS(x, y) lisp_h_CHECK_LIST_C/ -CHECK_LIST c-src/emacs/src/lisp.h /^CHECK_LIST (Lisp_Object x)$/ -CHECK_NATNUM c-src/emacs/src/lisp.h /^CHECK_NATNUM (Lisp_Object x)$/ -CHECK_NUMBER_CAR c-src/emacs/src/lisp.h /^CHECK_NUMBER_CAR (Lisp_Object x)$/ -CHECK_NUMBER_CDR c-src/emacs/src/lisp.h /^CHECK_NUMBER_CDR (Lisp_Object x)$/ -CHECK_NUMBER_COERCE_MARKER c-src/emacs/src/lisp.h /^#define CHECK_NUMBER_COERCE_MARKER(x) \\$/ -CHECK_NUMBER c-src/emacs/src/lisp.h /^# define CHECK_NUMBER(x) lisp_h_CHECK_NUMBER (x)$/ -CHECK_NUMBER_OR_FLOAT_COERCE_MARKER c-src/emacs/src/lisp.h /^#define CHECK_NUMBER_OR_FLOAT_COERCE_MARKER(x) / -CHECK_NUMBER_OR_FLOAT c-src/emacs/src/lisp.h /^CHECK_NUMBER_OR_FLOAT (Lisp_Object x)$/ -CHECKOBJS make-src/Makefile /^CHECKOBJS=chkmalloc.o chkxm.o$/ -CHECK_PROCESS c-src/emacs/src/lisp.h /^CHECK_PROCESS (Lisp_Object x)$/ -checkQuotation php-src/lce_functions.php /^ function checkQuotation($str)$/ -CHECK_RANGED_INTEGER c-src/emacs/src/lisp.h /^#define CHECK_RANGED_INTEGER(x, lo, hi) \\$/ -CHECK_STRING_CAR c-src/emacs/src/lisp.h /^CHECK_STRING_CAR (Lisp_Object x)$/ -CHECK_SYMBOL c-src/emacs/src/lisp.h /^# define CHECK_SYMBOL(x) lisp_h_CHECK_SYMBOL (x)$/ -CHECK_TYPE c-src/emacs/src/lisp.h /^# define CHECK_TYPE(ok, predicate, x) lisp_h_CHECK/ -CHECK_TYPE_RANGED_INTEGER c-src/emacs/src/lisp.h /^#define CHECK_TYPE_RANGED_INTEGER(type, x) \\$/ -CHECK_VECTOR c-src/emacs/src/lisp.h /^CHECK_VECTOR (Lisp_Object x)$/ -CHECK_VECTOR_OR_STRING c-src/emacs/src/lisp.h /^CHECK_VECTOR_OR_STRING (Lisp_Object x)$/ -CHECK_WINDOW c-src/emacs/src/lisp.h /^CHECK_WINDOW (Lisp_Object x)$/ chfopen tex-src/texinfo.tex /^\\def\\chfopen #1#2{\\chapoddpage {\\chapfonts$/ chfplain tex-src/texinfo.tex /^\\def\\chfplain #1#2{%$/ childDidExit objc-src/Subprocess.m /^- childDidExit$/ chunks_free c-src/emacs/src/gmalloc.c 313 -_chunks_free c-src/emacs/src/gmalloc.c 376 chunks_used c-src/emacs/src/gmalloc.c 311 -_chunks_used c-src/emacs/src/gmalloc.c 374 +cindex tex-src/texinfo.tex /^\\def\\cindex {\\cpindex}$/ cindexsub tex-src/texinfo.tex /^\\def\\cindexsub {\\begingroup\\obeylines\\cindexsub}$/ cindexsub tex-src/texinfo.tex /^\\gdef\\cindexsub "#1" #2^^M{\\endgroup %$/ -cindex tex-src/texinfo.tex /^\\def\\cindex {\\cpindex}$/ -Circle.getPos lua-src/test.lua /^function Circle.getPos ()$/ -cite tex-src/texinfo.tex /^\\def\\cite##1{\\realbackslash cite {##1}}%$/ cite tex-src/texinfo.tex /^\\def\\cite##1{\\realbackslash cite {##1}}$/ +cite tex-src/texinfo.tex /^\\def\\cite##1{\\realbackslash cite {##1}}%$/ cite tex-src/texinfo.tex /^\\let\\cite=\\indexdummyfont$/ cite tex-src/texinfo.tex /^\\let\\cite=\\smartitalic$/ -C_JAVA c-src/etags.c 2197 cjava c-src/etags.c 2936 -Cjava_entries c-src/etags.c /^Cjava_entries (FILE *inf)$/ -Cjava_help c-src/etags.c 551 -Cjava_suffixes c-src/etags.c 549 -CK_ABS_C y-src/parse.y /^#define CK_ABS_C(x) if((x)MAX_COL)/ -CK_ABS_R y-src/parse.y /^#define CK_ABS_R(x) if((x)MAX_ROW)/ -CK_REL_C y-src/parse.y /^#define CK_REL_C(x) if( ((x)>0 && MAX_COL-(x)0 && MAX_ROW-(x)/ -/dieresis ps-src/rfc1245.ps /^\/dieresis \/.notdef \/AE \/Oslash \/.notdef \/.notdef \// dignorerest c-src/etags.c 2463 direntry tex-src/texinfo.tex /^\\def\\direntry{\\begingroup\\direntryxxx}$/ direntryxxx tex-src/texinfo.tex /^\\long\\def\\direntryxxx #1\\end direntry{\\endgroup\\ig/ discard-input c-src/emacs/src/keyboard.c /^DEFUN ("discard-input", Fdiscard_input, Sdiscard_i/ discard_mouse_events c-src/emacs/src/keyboard.c /^discard_mouse_events (void)$/ -discrete_location cp-src/clheir.hpp 56 discrete_location cp-src/clheir.hpp /^ discrete_location(int xi, int yi, int zi):$/ +discrete_location cp-src/clheir.hpp 56 display cp-src/conway.cpp /^void display(void)$/ display tex-src/texinfo.tex /^\\def\\display{\\begingroup\\inENV %This group ends at/ -DisposeANameList pas-src/common.pas /^procedure DisposeANameList( $/ -DisposeNameList pas-src/common.pas /^procedure DisposeNameList;$/ disposetextstring pas-src/common.pas /^procedure disposetextstring;(*($/ -/dmatrix ps-src/rfc1245.ps /^\/dmatrix matrix def$/ dmn tex-src/texinfo.tex /^\\def\\dmn#1{\\thinspace #1}$/ dnone c-src/etags.c 2460 -/dnormalize ps-src/rfc1245.ps /^\/dnormalize {$/ dobreak tex-src/texinfo.tex /^\\def\\dobreak#1#2{\\par\\ifdim\\lastskip<#1\\removelast/ doc c-src/emacs/src/lisp.h 1689 dochapentry tex-src/texinfo.tex /^\\def\\dochapentry#1#2{%$/ docodeindex tex-src/texinfo.tex /^\\def\\docodeindex#1{\\edef\\indexname{#1}\\parsearg\\si/ +dog c-src/h.h 81 dog cp-src/c.C 126 dog cp-src/c.C 130 -dog c-src/h.h 81 -doindex tex-src/texinfo.tex /^\\def\\doindex#1{\\edef\\indexname{#1}\\parsearg\\single/ doind tex-src/texinfo.tex /^\\def\\doind #1#2{%$/ +doindex tex-src/texinfo.tex /^\\def\\doindex#1{\\edef\\indexname{#1}\\parsearg\\single/ donoderef tex-src/texinfo.tex /^\\def\\donoderef{\\ifx\\lastnode\\relax\\else$/ dontindex tex-src/texinfo.tex /^\\def\\dontindex #1{}$/ dopageno tex-src/texinfo.tex /^\\def\\dopageno#1{{\\rm #1}}$/ @@ -1028,13 +2393,11 @@ doprintindex tex-src/texinfo.tex /^\\def\\doprintindex#1{%$/ dosecentry tex-src/texinfo.tex /^\\def\\dosecentry#1#2{%$/ dosetq tex-src/texinfo.tex /^\\def\\dosetq #1#2{{\\let\\folio=0 \\turnoffactive%$/ doshortpageno tex-src/texinfo.tex /^\\def\\doshortpageno#1{{\\rm #1}}$/ -DOS_NT c-src/etags.c 117 -DOS_NT c-src/etags.c 118 dosubind tex-src/texinfo.tex /^\\def\\dosubind #1#2#3{%$/ dosubsecentry tex-src/texinfo.tex /^\\def\\dosubsecentry#1#2{%$/ dosubsubsecentry tex-src/texinfo.tex /^\\def\\dosubsubsecentry#1#2{%$/ -dotfill tex-src/texinfo.tex /^\\noindent\\hskip\\secondaryindent\\hbox{#1}\\indexdotf/ dotfill tex-src/texinfo.tex /^ \\null\\nobreak\\indexdotfill % Have leaders before/ +dotfill tex-src/texinfo.tex /^\\noindent\\hskip\\secondaryindent\\hbox{#1}\\indexdotf/ dots tex-src/texinfo.tex /^\\def\\dots{$\\ldots$}$/ dots tex-src/texinfo.tex /^\\def\\dots{\\realbackslash dots }%$/ dots tex-src/texinfo.tex /^\\def\\dots{\\realbackslash dots}$/ @@ -1042,11 +2405,8 @@ dots tex-src/texinfo.tex /^\\let\\dots=\\indexdummydots$/ dots tex-src/texinfo.tex /^\\let\\dots=\\ptexdots$/ double_click_count c-src/emacs/src/keyboard.c 5222 doublecolumnout tex-src/texinfo.tex /^\\def\\doublecolumnout{\\splittopskip=\\topskip \\split/ -/dpi ps-src/rfc1245.ps /^\/dpi 72 0 dmatrix defaultmatrix dtransform$/ -/D ps-src/rfc1245.ps /^\/D {curveto} bind def$/ drag_n_drop_syms c-src/emacs/src/keyboard.c 4629 dribble c-src/emacs/src/keyboard.c 236 -D ruby-src/test1.ru /^class ::D; end$/ dsharpseen c-src/etags.c 2461 dummies tex-src/texinfo.tex /^{\\indexdummies % Must do this here, since \\bf, etc/ dummy1 cp-src/burton.cpp /^::dummy::dummy test::dummy1(void)$/ @@ -1065,79 +2425,45 @@ dummyfont tex-src/texinfo.tex /^\\let\\r=\\indexdummyfont$/ dummyfont tex-src/texinfo.tex /^\\let\\samp=\\indexdummyfont$/ dummyfont tex-src/texinfo.tex /^\\let\\sc=\\indexdummyfont$/ dummyfont tex-src/texinfo.tex /^\\let\\strong=\\indexdummyfont$/ -dummyfont tex-src/texinfo.tex /^\\let\\tclose=\\indexdummyfont$/ dummyfont tex-src/texinfo.tex /^\\let\\t=\\indexdummyfont$/ +dummyfont tex-src/texinfo.tex /^\\let\\tclose=\\indexdummyfont$/ dummyfont tex-src/texinfo.tex /^\\let\\var=\\indexdummyfont$/ dummyfont tex-src/texinfo.tex /^\\let\\w=\\indexdummyfont$/ dummytex tex-src/texinfo.tex /^\\let\\TeX=\\indexdummytex$/ -DUMPED c-src/emacs/src/gmalloc.c 80 dump pyt-src/server.py /^ def dump(self, folded):$/ eabs c-src/emacs/src/lisp.h /^#define eabs(x) ((x) < 0 ? -(x) : (x))$/ -Ealphaenumerate tex-src/texinfo.tex /^\\def\\Ealphaenumerate{\\Eenumerate}$/ eassert c-src/emacs/src/lisp.h /^# define eassert(cond) \\$/ eassert c-src/emacs/src/lisp.h /^# define eassert(cond) ((void) (false && (cond))) / eassume c-src/emacs/src/lisp.h /^# define eassume(cond) \\$/ eassume c-src/emacs/src/lisp.h /^# define eassume(cond) assume (cond)$/ eax c-src/sysdep.h 31 eax c-src/sysdep.h 33 -Ecapsenumerate tex-src/texinfo.tex /^\\def\\Ecapsenumerate{\\Eenumerate}$/ -Ecartouche tex-src/texinfo.tex /^\\def\\Ecartouche{%$/ echo_add_key c-src/emacs/src/keyboard.c /^echo_add_key (Lisp_Object c)$/ echo_char c-src/emacs/src/keyboard.c /^echo_char (Lisp_Object c)$/ echo_dash c-src/emacs/src/keyboard.c /^echo_dash (void)$/ -echoing c-src/emacs/src/keyboard.c 154 echo_kboard c-src/emacs/src/keyboard.c 166 echo_keystrokes_p c-src/emacs/src/keyboard.c /^echo_keystrokes_p (void)$/ echo_length c-src/emacs/src/keyboard.c /^echo_length (void)$/ echo_message_buffer c-src/emacs/src/keyboard.c 171 echo_now c-src/emacs/src/keyboard.c /^echo_now (void)$/ echo_truncate c-src/emacs/src/keyboard.c /^echo_truncate (ptrdiff_t nchars)$/ -Edescription tex-src/texinfo.tex /^\\def\\Edescription{\\Etable}% Necessary kludge.$/ -%ediff make-src/Makefile /^%ediff: ETAGS% ETAGS ${infiles}$/ -Edisplay tex-src/texinfo.tex /^\\def\\Edisplay{\\endgroup\\afterenvbreak}%$/ +echoing c-src/emacs/src/keyboard.c 154 editItem pyt-src/server.py /^ def editItem(self):$/ editsite pyt-src/server.py /^ def editsite(self, site):$/ edituser pyt-src/server.py /^ def edituser(self, user):$/ -Eexample tex-src/texinfo.tex /^\\def\\Eexample{\\Elisp}$/ -Eflushleft tex-src/texinfo.tex /^\\def\\Eflushleft{\\endgroup\\afterenvbreak}%$/ -Eflushright tex-src/texinfo.tex /^\\def\\Eflushright{\\endgroup\\afterenvbreak}%$/ -Eformat tex-src/texinfo.tex /^\\def\\Eformat{\\endgroup\\afterenvbreak}$/ -Eftable tex-src/texinfo.tex /^\\def\\Eftable{\\endgraf\\endgroup\\afterenvbreak}%$/ egetenv c-src/emacs/src/lisp.h /^egetenv (const char *var)$/ -Egroup tex-src/texinfo.tex /^ \\def\\Egroup{\\egroup\\endgroup}%$/ -Eifclear tex-src/texinfo.tex /^\\def\\Eifclear{}$/ -Eifset tex-src/texinfo.tex /^\\def\\Eifset{}$/ -Eiftex tex-src/texinfo.tex /^\\def\\Eiftex{}$/ -ELEM_I c-src/h.h 3 -Elisp tex-src/texinfo.tex /^\\def\\Elisp{\\endgroup\\afterenvbreak}%$/ -ELSRC make-src/Makefile /^ELSRC=TAGTEST.EL emacs\/lisp\/progmodes\/etags.el$/ emacs_abort c-src/emacs/src/lisp.h /^extern _Noreturn void emacs_abort (void) NO_INLINE/ -EMACS_INT c-src/emacs/src/lisp.h 103 -EMACS_INT c-src/emacs/src/lisp.h 91 -EMACS_INT c-src/emacs/src/lisp.h 96 -EMACS_INT_MAX c-src/emacs/src/lisp.h 105 -EMACS_INT_MAX c-src/emacs/src/lisp.h 93 -EMACS_INT_MAX c-src/emacs/src/lisp.h 98 -EMACS_LISP_H c-src/emacs/src/lisp.h 22 -EMACS_NAME c-src/etags.c 786 -EMACS_UINT c-src/emacs/src/lisp.h 104 -EMACS_UINT c-src/emacs/src/lisp.h 92 -EMACS_UINT c-src/emacs/src/lisp.h 97 emph tex-src/texinfo.tex /^\\def\\emph##1{\\realbackslash emph {##1}}$/ emph tex-src/texinfo.tex /^\\let\\emph=\\indexdummyfont$/ emph tex-src/texinfo.tex /^\\let\\emph=\\smartitalic$/ -EmptyNmStr pas-src/common.pas /^function EmptyNmStr(* : NameString*);$/ -/ENDBITMAP ps-src/rfc1245.ps /^\/ENDBITMAP {$/ end c-src/emacs/src/keyboard.c 8753 end c-src/emacs/src/lisp.h 2039 end c-src/emacs/src/regex.h 432 -enddoublecolumns tex-src/texinfo.tex /^\\def\\enddoublecolumns{\\output={\\balancecolumns}\\ej/ -/ENDPRINTCODE ps-src/rfc1245.ps /^\/ENDPRINTCODE {$/ end tex-src/texinfo.tex /^\\def\\end{\\parsearg\\endxxx}$/ +enddoublecolumns tex-src/texinfo.tex /^\\def\\enddoublecolumns{\\output={\\balancecolumns}\\ej/ endtoken c-src/etags.c /^#define endtoken(c) (_etk[CHAR (c)]) \/* c ends tok/ endxxx tex-src/texinfo.tex /^\\def\\endxxx #1{%$/ enter_critical_section c-src/h.h 116 -ENTRY c-src/sysdep.h /^#define ENTRY(name) \\$/ entry perl-src/htlmify-cystic 218 entry perl-src/htlmify-cystic 234 entry perl-src/htlmify-cystic 245 @@ -1147,69 +2473,42 @@ entry perl-src/htlmify-cystic 276 entry perl-src/htlmify-cystic 281 entry perl-src/htlmify-cystic 296 entry tex-src/texinfo.tex /^\\def\\entry #1#2{\\begingroup$/ -ENUM_BF c-src/emacs/src/lisp.h /^#define ENUM_BF(TYPE) enum TYPE$/ -ENUM_BF c-src/emacs/src/lisp.h /^#define ENUM_BF(TYPE) unsigned int$/ enumerate tex-src/texinfo.tex /^\\def\\enumerate{\\parsearg\\enumeratezzz}$/ enumeratey tex-src/texinfo.tex /^\\def\\enumeratey #1 #2\\endenumeratey{%$/ enumeratezzz tex-src/texinfo.tex /^\\def\\enumeratezzz #1{\\enumeratey #1 \\endenumerate/ -ENVcheck tex-src/texinfo.tex /^\\def\\ENVcheck{%$/ -Environment tex-src/gzip.texi /^@node Environment, Tapes, Advanced usage, Top$/ -/E ps-src/rfc1245.ps /^\/E {lineto} bind def$/ -EQ c-src/emacs/src/lisp.h /^# define EQ(x, y) lisp_h_EQ (x, y)$/ equalsKey objcpp-src/SimpleCalc.M /^- equalsKey:sender$/ -EQUAL y-src/cccp.c 12 equiv tex-src/texinfo.tex /^\\def\\equiv{\\leavevmode\\lower.1ex\\hbox to 1em{\\hfil/ equiv tex-src/texinfo.tex /^\\def\\equiv{\\realbackslash equiv}$/ -Equotation tex-src/texinfo.tex /^\\def\\Equotation{\\par\\endgroup\\afterenvbreak}%$/ erlang_atom c-src/etags.c /^erlang_atom (char *s)$/ erlang_attribute c-src/etags.c /^erlang_attribute (char *s)$/ erlang_func c-src/etags.c /^erlang_func (char *s, char *last)$/ -Erlang_functions c-src/etags.c /^Erlang_functions (FILE *inf)$/ -Erlang_help c-src/etags.c 567 -Erlang_suffixes c-src/etags.c 565 -ERLSRC make-src/Makefile /^ERLSRC=gs_dialog.erl lines.erl lists.erl$/ error c-src/emacs/src/lisp.h /^extern _Noreturn void error (const char *, ...) AT/ error c-src/etags.c /^error (const char *format, ...)$/ error c-src/etags.c /^static void error (const char *, ...) ATTRIBUTE_FO/ -errorE tex-src/texinfo.tex /^\\def\\errorE#1{$/ -Error_Information/t ada-src/2ataspri.ads /^ type Error_Information is new Interfaces.C.POSI/ -error_signaled c-src/etags.c 264 error tex-src/texinfo.tex /^\\def\\error{\\leavevmode\\lower.7ex\\copy\\errorbox}$/ -ERROR y-src/cccp.c 9 error y-src/cccp.y /^error (msg)$/ -ERROR y-src/parse.y 304 -ErrStrToNmStr pas-src/common.pas /^function ErrStrToNmStr;(*($/ -Esmallexample tex-src/texinfo.tex /^\\def\\Esmallexample{\\Elisp}$/ -Esmallexample tex-src/texinfo.tex /^\\global\\def\\Esmallexample{\\Esmalllisp}$/ -Esmalllisp tex-src/texinfo.tex /^\\def\\Esmalllisp{\\endgroup\\afterenvbreak}%$/ -Etable tex-src/texinfo.tex /^\\def\\Etable{\\endgraf\\endgroup\\afterenvbreak}%$/ -Etable tex-src/texinfo.tex /^\\let\\Etable=\\relax}}$/ -ETAGS12 make-src/Makefile /^ETAGS12: etags12 ${infiles}$/ -ETAGS13 ETAGS14 ETAGS15 make-src/Makefile /^ETAGS13 ETAGS14 ETAGS15: etags% ${infiles}$/ -etags.1.man make-src/Makefile /^etags.1.man: etags.1$/ +errorE tex-src/texinfo.tex /^\\def\\errorE#1{$/ +error_signaled c-src/etags.c 264 etags el-src/emacs/lisp/progmodes/etags.el /^(defgroup etags nil "Tags tables."$/ +etags html-src/software.html /^Etags$/ +etags make-src/Makefile /^etags: etags.c ${OBJS}$/ +etags--xref-find-definitions el-src/emacs/lisp/progmodes/etags.el /^(defun etags--xref-find-definitions (pattern &opti/ +etags--xref-limit el-src/emacs/lisp/progmodes/etags.el /^(defconst etags--xref-limit 1000)$/ etags-file-of-tag el-src/emacs/lisp/progmodes/etags.el /^(defun etags-file-of-tag (&optional relative) ; Do/ -etags_getcwd c-src/etags.c /^etags_getcwd (void)$/ etags-goto-tag-location el-src/emacs/lisp/progmodes/etags.el /^(defun etags-goto-tag-location (tag-info)$/ -etags html-src/software.html /^Etags$/ etags-list-tags el-src/emacs/lisp/progmodes/etags.el /^(defun etags-list-tags (file) ; Doc string?$/ -etags make-src/Makefile /^etags: etags.c ${OBJS}$/ -ETAGS make-src/Makefile /^ETAGS: FRC etags ${infiles}$/ -ETAGS% make-src/Makefile /^ETAGS%: FRC etags% ${infiles}$/ etags-recognize-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun etags-recognize-tags-table ()$/ etags-snarf-tag el-src/emacs/lisp/progmodes/etags.el /^(defun etags-snarf-tag (&optional use-explicit) ; / -etags-tags-apropos-additional el-src/emacs/lisp/progmodes/etags.el /^(defun etags-tags-apropos-additional (regexp)$/ etags-tags-apropos el-src/emacs/lisp/progmodes/etags.el /^(defun etags-tags-apropos (string) ; Doc string?$/ +etags-tags-apropos-additional el-src/emacs/lisp/progmodes/etags.el /^(defun etags-tags-apropos-additional (regexp)$/ etags-tags-completion-table el-src/emacs/lisp/progmodes/etags.el /^(defun etags-tags-completion-table () ; Doc string/ etags-tags-included-tables el-src/emacs/lisp/progmodes/etags.el /^(defun etags-tags-included-tables () ; Doc string?/ etags-tags-table-files el-src/emacs/lisp/progmodes/etags.el /^(defun etags-tags-table-files () ; Doc string?$/ etags-verify-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun etags-verify-tags-table ()$/ -etags--xref-find-definitions el-src/emacs/lisp/progmodes/etags.el /^(defun etags--xref-find-definitions (pattern &opti/ -etags-xref-find-definitions-tag-order el-src/emacs/lisp/progmodes/etags.el /^(defvar etags-xref-find-definitions-tag-order '(ta/ etags-xref-find el-src/emacs/lisp/progmodes/etags.el /^(defun etags-xref-find (action id)$/ -etags--xref-limit el-src/emacs/lisp/progmodes/etags.el /^(defconst etags--xref-limit 1000)$/ -Etex tex-src/texinfo.tex /^\\let\\Etex=\\endgroup}$/ -Etitlepage tex-src/texinfo.tex /^\\def\\Etitlepage{%$/ +etags-xref-find-definitions-tag-order el-src/emacs/lisp/progmodes/etags.el /^(defvar etags-xref-find-definitions-tag-order '(ta/ +etags.1.man make-src/Makefile /^etags.1.man: etags.1$/ +etags_getcwd c-src/etags.c /^etags_getcwd (void)$/ eval_dyn c-src/emacs/src/keyboard.c /^eval_dyn (Lisp_Object form)$/ evenfooting tex-src/texinfo.tex /^\\def\\evenfooting{\\parsearg\\evenfootingxxx}$/ evenfootingxxx tex-src/texinfo.tex /^\\gdef\\evenfootingxxx #1{\\evenfootingyyy #1@|@|@|@|/ @@ -1218,8 +2517,8 @@ evenheading tex-src/texinfo.tex /^\\def\\evenheading{\\parsearg\\evenheadingxxx} evenheadingxxx tex-src/texinfo.tex /^\\gdef\\evenheadingxxx #1{\\evenheadingyyy #1@|@|@|@|/ evenheadingyyy tex-src/texinfo.tex /^\\gdef\\evenheadingyyy #1@|#2@|#3@|#4\\finish{%$/ event-convert-list c-src/emacs/src/keyboard.c /^DEFUN ("event-convert-list", Fevent_convert_list, / -event_head c-src/emacs/src/keyboard.c 11021 event-symbol-parse-modifiers c-src/emacs/src/keyboard.c /^DEFUN ("internal-event-symbol-parse-modifiers", Fe/ +event_head c-src/emacs/src/keyboard.c 11021 event_to_kboard c-src/emacs/src/keyboard.c /^event_to_kboard (struct input_event *event)$/ everyfooting tex-src/texinfo.tex /^\\def\\everyfooting{\\parsearg\\everyfootingxxx}$/ everyfootingxxx tex-src/texinfo.tex /^\\gdef\\everyfootingxxx #1{\\everyfootingyyy #1@|@|@|/ @@ -1227,24 +2526,24 @@ everyfootingyyy tex-src/texinfo.tex /^\\gdef\\everyfootingyyy #1@|#2@|#3@|#4\\fi everyheading tex-src/texinfo.tex /^\\def\\everyheading{\\parsearg\\everyheadingxxx}$/ everyheadingxxx tex-src/texinfo.tex /^\\gdef\\everyheadingxxx #1{\\everyheadingyyy #1@|@|@|/ everyheadingyyy tex-src/texinfo.tex /^\\gdef\\everyheadingyyy #1@|#2@|#3@|#4\\finish{%$/ -Evtable tex-src/texinfo.tex /^\\def\\Evtable{\\endgraf\\endgroup\\afterenvbreak}%$/ ewbot tex-src/texinfo.tex /^\\def\\ewbot{\\vrule height0pt depth\\cornerthick widt/ ewtop tex-src/texinfo.tex /^\\def\\ewtop{\\vrule height\\cornerthick depth0pt widt/ exact c-src/emacs/src/gmalloc.c 200 example tex-src/texinfo.tex /^\\let\\example=\\lisp$/ -/exclamdown ps-src/rfc1245.ps /^\/exclamdown \/logicalnot \/.notdef \/florin \/.notdef / exdent tex-src/texinfo.tex /^\\def\\exdent{\\parsearg\\exdentyyy}$/ exdent tex-src/texinfo.tex /^\\let\\exdent=\\nofillexdent$/ exdentyyy tex-src/texinfo.tex /^\\def\\exdentyyy #1{{\\hfil\\break\\hbox{\\kern -\\exdent/ execute cp-src/c.C /^ void execute(CPluginCSCState& p, int w, in/ -EXFUN c-src/emacs/src/lisp.h /^#define EXFUN(fnname, maxargs) \\$/ -exit_critical_to_previous c-src/h.h 117 exit c-src/exit.c /^DEFUN(exit, (status), int status)$/ exit c-src/exit.strange_suffix /^DEFUN(exit, (status), int status)$/ -Exit_LL_Task/p ada-src/2ataspri.adb /^ procedure Exit_LL_Task is$/ -Exit_LL_Task/p ada-src/2ataspri.ads /^ procedure Exit_LL_Task;$/ exit-recursive-edit c-src/emacs/src/keyboard.c /^DEFUN ("exit-recursive-edit", Fexit_recursive_edit/ +exit_critical_to_previous c-src/h.h 117 +exp y-src/atest.y 2 +exp y-src/cccp.y 156 +exp y-src/cccp.y 185 +exp y-src/parse.y 95 exp1 y-src/cccp.y 148 +exp_list y-src/parse.y 263 expand-abbrev c-src/abbrev.c /^DEFUN ("expand-abbrev", Fexpand_abbrev, Sexpand_ab/ expandafter tex-src/texinfo.tex /^\\expandafter\\let\\expandafter\\synindexfoo\\expandaft/ expandmng prol-src/natded.prolog /^expandmng(var(V),var(V)).$/ @@ -1254,18 +2553,24 @@ expandsyn prol-src/natded.prolog /^expandsyn(Syn,Syn):-$/ expansion tex-src/texinfo.tex /^\\def\\expansion{\\leavevmode\\raise.1ex\\hbox to 1em{\\/ expansion tex-src/texinfo.tex /^\\def\\expansion{\\realbackslash expansion}$/ explicitly-quoted-pending-delete-mode el-src/TAGTEST.EL /^(defalias (quote explicitly-quoted-pending-delete-/ -exp_list y-src/parse.y 263 expression_value y-src/cccp.y 68 -exp y-src/atest.y 2 -exp y-src/cccp.y 156 -exp y-src/cccp.y 185 -exp y-src/parse.y 95 -EXTAGS make-src/Makefile /^EXTAGS: extags ${infiles} Makefile$/ -EXTERNALLY_VISIBLE c-src/emacs/src/keyboard.c 3497 -EXTERNALLY_VISIBLE c-src/emacs/src/keyboard.c 4372 -ExtractCommentInfo pas-src/common.pas /^procedure ExtractCommentInfo; (*($/ extras c-src/emacs/src/lisp.h 1603 extvar c-src/h.h 109 +f c-src/c.c /^T f(){if(x){}$/ +f c-src/h.h 89 +f c.c /^int f$/ +f c.c 145 +f c.c 156 +f c.c 168 +f cp-src/c.C /^ void f() {}$/ +f cp-src/c.C /^ int f(){return 0;}; \/\/ first comment$/ +f cp-src/c.C /^A > A,int>::f(A* x) {}$/ +f cp-src/c.C /^A* f() {}$/ +f cp-src/c.C /^class B { void f() {} };$/ +f cp-src/c.C /^int A::f(A* x) {}$/ +f cp-src/c.C /^int f(A x) {}$/ +f cp-src/fail.C /^ int f() { return 5; }$/ +f cp-src/fail.C /^int A::B::f() { return 2; }$/ f1 c.c /^ f1 () { \/* Do something. *\/; }$/ f1 perl-src/kai-test.pl /^sub f1 {$/ f2 c.c /^void f2 () { \/* Do something. *\/; }$/ @@ -1275,92 +2580,39 @@ f4 perl-src/kai-test.pl /^sub Bar::f4 {$/ f5 perl-src/kai-test.pl /^sub f5 {$/ f6 perl-src/kai-test.pl /^sub f6 {$/ f7 perl-src/kai-test.pl /^sub f7 {$/ -Fabbrev_expansion c-src/abbrev.c /^DEFUN ("abbrev-expansion", Fabbrev_expansion, Sabb/ -Fabbrev_symbol c-src/abbrev.c /^DEFUN ("abbrev-symbol", Fabbrev_symbol, Sabbrev_sy/ -Fabort_recursive_edit c-src/emacs/src/keyboard.c /^DEFUN ("abort-recursive-edit", Fabort_recursive_ed/ -=/f ada-src/etags-test-for.ada /^ function "=" (L, R : System.Address) return Boo/ -Fails_t c-src/h.h 5 -/fakecolorsetup ps-src/rfc1245.ps /^\/fakecolorsetup {$/ -FASTCFLAGS make-src/Makefile /^FASTCFLAGS=-O3 -finline-functions -ffast-math -fun/ -FASTCFLAGSWARN make-src/Makefile /^FASTCFLAGSWARN=${WARNINGS} -Werror ${FASTCFLAGS}$/ +fast_string_match_ignore_case c-src/emacs/src/lisp.h /^fast_string_match_ignore_case (Lisp_Object regexp,/ fastctags make-src/Makefile /^fastctags:$/ fastetags make-src/Makefile /^fastetags:$/ -fastmap_accurate c-src/emacs/src/regex.h 383 fastmap c-src/emacs/src/regex.h 355 -fast_string_match_ignore_case c-src/emacs/src/lisp.h /^fast_string_match_ignore_case (Lisp_Object regexp,/ -fatala c.c /^void fatala () __attribute__ ((noreturn));$/ +fastmap_accurate c-src/emacs/src/regex.h 383 fatal c-src/etags.c /^fatal (const char *s1, const char *s2)$/ -f c.c 145 -f c.c 156 -f c.c 168 -f c.c /^int f$/ -Fclear_abbrev_table c-src/abbrev.c /^DEFUN ("clear-abbrev-table", Fclear_abbrev_table, / -Fclear_this_command_keys c-src/emacs/src/keyboard.c /^DEFUN ("clear-this-command-keys", Fclear_this_comm/ -Fcommand_error_default_function c-src/emacs/src/keyboard.c /^DEFUN ("command-error-default-function", Fcommand_/ +fatala c.c /^void fatala () __attribute__ ((noreturn));$/ fconst forth-src/test-forth.fth /^3.1415e fconstant fconst$/ -f cp-src/c.C /^A > A,int>::f(A* x) {}$/ -f cp-src/c.C /^A* f() {}$/ -f cp-src/c.C /^class B { void f() {} };$/ -f cp-src/c.C /^int A::f(A* x) {}$/ -f cp-src/c.C /^int f(A x) {}$/ -f cp-src/c.C /^ int f(){return 0;}; \/\/ first comment$/ -f cp-src/c.C /^ void f() {}$/ -f cp-src/fail.C /^int A::B::f() { return 2; }$/ -f cp-src/fail.C /^ int f() { return 5; }$/ -f c-src/c.c /^T f(){if(x){}$/ -f c-src/h.h 89 -Fcurrent_idle_time c-src/emacs/src/keyboard.c /^DEFUN ("current-idle-time", Fcurrent_idle_time, Sc/ -Fcurrent_input_mode c-src/emacs/src/keyboard.c /^DEFUN ("current-input-mode", Fcurrent_input_mode, / -Fdefine_abbrev c-src/abbrev.c /^DEFUN ("define-abbrev", Fdefine_abbrev, Sdefine_ab/ -Fdefine_abbrev_table c-src/abbrev.c /^DEFUN ("define-abbrev-table", Fdefine_abbrev_table/ -Fdefine_global_abbrev c-src/abbrev.c /^DEFUN ("define-global-abbrev", Fdefine_global_abbr/ -Fdefine_mode_abbrev c-src/abbrev.c /^DEFUN ("define-mode-abbrev", Fdefine_mode_abbrev, / +fdHandler objc-src/Subprocess.m /^- fdHandler:(int)theFd$/ +fdHandler objc-src/Subprocess.m /^fdHandler (int theFd, id self)$/ fdefunkey c-src/etags.c 2409 fdefunname c-src/etags.c 2410 fdesc c-src/etags.c 201 fdesc c-src/etags.c 212 -fdHandler objc-src/Subprocess.m /^- fdHandler:(int)theFd$/ -fdHandler objc-src/Subprocess.m /^fdHandler (int theFd, id self)$/ -Fdiscard_input c-src/emacs/src/keyboard.c /^DEFUN ("discard-input", Fdiscard_input, Sdiscard_i/ fdp c-src/etags.c 217 -Fevent_convert_list c-src/emacs/src/keyboard.c /^DEFUN ("event-convert-list", Fevent_convert_list, / -Fevent_symbol_parse_modifiers c-src/emacs/src/keyboard.c /^DEFUN ("internal-event-symbol-parse-modifiers", Fe/ -Fexit_recursive_edit c-src/emacs/src/keyboard.c /^DEFUN ("exit-recursive-edit", Fexit_recursive_edit/ -Fexpand_abbrev c-src/abbrev.c /^DEFUN ("expand-abbrev", Fexpand_abbrev, Sexpand_ab/ ff cp-src/c.C /^ int ff(){return 1;};$/ -F_getit c-src/etags.c /^F_getit (FILE *inf)$/ ->field1 forth-src/test-forth.fth /^ 9 field >field1$/ ->field2 forth-src/test-forth.fth /^ 5 field >field2$/ field_of_play cp-src/conway.cpp 18 fignore c-src/etags.c 2416 -file_end perl-src/htlmify-cystic /^sub file_end ()$/ -file_index perl-src/htlmify-cystic 33 -fileJoin php-src/lce_functions.php /^ function fileJoin()$/ -filename_is_absolute c-src/etags.c /^filename_is_absolute (char *fn)$/ -filenames c-src/etags.c 196 -file-of-tag el-src/emacs/lisp/progmodes/etags.el /^(defun file-of-tag (&optional relative)$/ -file-of-tag-function el-src/emacs/lisp/progmodes/etags.el /^(defvar file-of-tag-function nil$/ -file tex-src/texinfo.tex /^\\def\\file##1{\\realbackslash file {##1}}%$/ file tex-src/texinfo.tex /^\\def\\file##1{\\realbackslash file {##1}}$/ +file tex-src/texinfo.tex /^\\def\\file##1{\\realbackslash file {##1}}%$/ file tex-src/texinfo.tex /^\\let\\file=\\indexdummyfont$/ file tex-src/texinfo.tex /^\\let\\file=\\samp$/ +file-of-tag el-src/emacs/lisp/progmodes/etags.el /^(defun file-of-tag (&optional relative)$/ +file-of-tag-function el-src/emacs/lisp/progmodes/etags.el /^(defvar file-of-tag-function nil$/ +fileJoin php-src/lce_functions.php /^ function fileJoin()$/ +file_end perl-src/htlmify-cystic /^sub file_end ()$/ +file_index perl-src/htlmify-cystic 33 file_tocs perl-src/htlmify-cystic 30 -/fillprocs ps-src/rfc1245.ps /^\/fillprocs 32 array def$/ -FILTER make-src/Makefile /^FILTER=grep -v '\\.[Cchefy][lor]*,[1-9][0-9]*' || t/ -FINAL_FREE_BLOCKS c-src/emacs/src/gmalloc.c 135 -Finalize_Cond/p ada-src/2ataspri.adb /^ procedure Finalize_Cond (Cond : in out Conditio/ -Finalize_Cond/p ada-src/2ataspri.ads /^ procedure Finalize_Cond (Cond : in out Conditio/ -Finalize_Lock/p ada-src/2ataspri.adb /^ procedure Finalize_Lock (L : in out Lock) is$/ -Finalize_Lock/p ada-src/2ataspri.ads /^ procedure Finalize_Lock (L : in out Lock);$/ -FINALIZERP c-src/emacs/src/lisp.h /^FINALIZERP (Lisp_Object x)$/ -Finalize_TAS_Cell/p ada-src/2ataspri.adb /^ procedure Finalize_TAS_Cell (Cell : in out TAS_/ -Finalize_TAS_Cell/p ada-src/2ataspri.ads /^ procedure Finalize_TAS_Cell (Cell : in out TA/ +filename_is_absolute c-src/etags.c /^filename_is_absolute (char *fn)$/ +filenames c-src/etags.c 196 finalout tex-src/texinfo.tex /^\\def\\finalout{\\overfullrule=0pt}$/ -findcats prol-src/natded.prolog /^findcats([],Left,Left).$/ -find_entries c-src/etags.c /^find_entries (FILE *inf)$/ -findex tex-src/texinfo.tex /^\\def\\findex {\\fnindex}$/ -find-tag-default-function el-src/emacs/lisp/progmodes/etags.el /^(defcustom find-tag-default-function nil$/ find-tag el-src/emacs/lisp/progmodes/etags.el /^(defun find-tag (tagname &optional next-p regexp-p/ +find-tag-default-function el-src/emacs/lisp/progmodes/etags.el /^(defcustom find-tag-default-function nil$/ find-tag-history el-src/emacs/lisp/progmodes/etags.el /^(defvar find-tag-history nil) ; Doc string?$/ find-tag-hook el-src/emacs/lisp/progmodes/etags.el /^(defcustom find-tag-hook nil$/ find-tag-in-order el-src/emacs/lisp/progmodes/etags.el /^(defun find-tag-in-order (pattern$/ @@ -1378,44 +2630,26 @@ find-tag-regexp-tag-order el-src/emacs/lisp/progmodes/etags.el /^(defvar find-ta find-tag-search-function el-src/emacs/lisp/progmodes/etags.el /^(defvar find-tag-search-function nil$/ find-tag-tag el-src/emacs/lisp/progmodes/etags.el /^(defun find-tag-tag (string)$/ find-tag-tag-order el-src/emacs/lisp/progmodes/etags.el /^(defvar find-tag-tag-order nil$/ +find_entries c-src/etags.c /^find_entries (FILE *inf)$/ find_user_signal_name c-src/emacs/src/keyboard.c /^find_user_signal_name (int sig)$/ +findcats prol-src/natded.prolog /^findcats([],Left,Left).$/ +findex tex-src/texinfo.tex /^\\def\\findex {\\fnindex}$/ finish_appendices perl-src/htlmify-cystic /^sub finish_appendices ()$/ finish_sections perl-src/htlmify-cystic /^sub finish_sections ()$/ finish_subsections perl-src/htlmify-cystic /^sub finish_subsections ()$/ finish_subsubsections perl-src/htlmify-cystic /^sub finish_subsubsections ()$/ finishtitlepage tex-src/texinfo.tex /^\\def\\finishtitlepage{%$/ finlist c-src/etags.c 2414 -Finput_pending_p c-src/emacs/src/keyboard.c /^DEFUN ("input-pending-p", Finput_pending_p, Sinput/ -Finsert_abbrev_table_description c-src/abbrev.c /^DEFUN ("insert-abbrev-table-description", Finsert_/ -First100Chars pas-src/common.pas /^procedure First100Chars; (*($/ first c-src/emacs/src/gmalloc.c 151 first tex-src/texinfo.tex /^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/ fitchtreelist prol-src/natded.prolog /^fitchtreelist([]).$/ -FIXNUM_BITS c-src/emacs/src/lisp.h 252 -FIXNUM_OVERFLOW_P c-src/emacs/src/lisp.h /^#define FIXNUM_OVERFLOW_P(i) \\$/ -FIXNUM_OVERFLOW_P c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (EQ, bool, (Lisp_Object x, Lisp_O/ fixup_locale c-src/emacs/src/lisp.h /^INLINE void fixup_locale (void) {}$/ -flag2str pyt-src/server.py /^def flag2str(value, string):$/ flag c-src/getopt.h 83 +flag2str pyt-src/server.py /^def flag2str(value, string):$/ flistseen c-src/etags.c 2415 -FLOATP c-src/emacs/src/lisp.h /^# define FLOATP(x) lisp_h_FLOATP (x)$/ -FLOAT_TO_STRING_BUFSIZE c-src/emacs/src/lisp.h 3927 -/fl ps-src/rfc1245.ps /^\/fl { $/ flushcr tex-src/texinfo.tex /^\\def\\flushcr{\\ifx\\par\\lisppar \\def\\next##1{}\\else / flushleft tex-src/texinfo.tex /^\\def\\flushleft{%$/ flushright tex-src/texinfo.tex /^\\def\\flushright{%$/ -Fmake_abbrev_table c-src/abbrev.c /^DEFUN ("make-abbrev-table", Fmake_abbrev_table, Sm/ -/FMBEGINEPSF ps-src/rfc1245.ps /^\/FMBEGINEPSF { $/ -/FMBEGINPAGE ps-src/rfc1245.ps /^\/FMBEGINPAGE { $/ -/Fmcc ps-src/rfc1245.ps /^\/Fmcc {$/ -/FMDEFINEFONT ps-src/rfc1245.ps /^\/FMDEFINEFONT { $/ -/FMDOCUMENT ps-src/rfc1245.ps /^\/FMDOCUMENT { $/ -/FMENDEPSF ps-src/rfc1245.ps /^\/FMENDEPSF {$/ -/FMENDPAGE ps-src/rfc1245.ps /^\/FMENDPAGE {$/ -/FMLOCAL ps-src/rfc1245.ps /^\/FMLOCAL {$/ -/FMNORMALIZEGRAPHICS ps-src/rfc1245.ps /^\/FMNORMALIZEGRAPHICS { $/ -/FMVERSION ps-src/rfc1245.ps /^\/FMVERSION {$/ -/FMversion ps-src/rfc1245.ps /^\/FMversion (2.0) def $/ fn c-src/exit.c /^ void EXFUN((*fn[1]), (NOARGS));$/ fn c-src/exit.strange_suffix /^ void EXFUN((*fn[1]), (NOARGS));$/ fnheader tex-src/texinfo.tex /^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/ @@ -1424,125 +2658,74 @@ fnitemindex tex-src/texinfo.tex /^\\def\\fnitemindex #1{\\doind {fn}{\\code{#1}} fnx\deffnheader tex-src/texinfo.tex /^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/ focus_set pyt-src/server.py /^ def focus_set(self):$/ folio tex-src/texinfo.tex /^\\def\\dosetq #1#2{{\\let\\folio=0 \\turnoffactive%$/ -folio tex-src/texinfo.tex /^{\\let\\folio=0%$/ folio tex-src/texinfo.tex /^{\\let\\folio=0% Expand all macros now EXCEPT \\folio/ +folio tex-src/texinfo.tex /^{\\let\\folio=0%$/ follow_key c-src/emacs/src/keyboard.c /^follow_key (Lisp_Object keymap, Lisp_Object key)$/ -fonts\rm tex-src/texinfo.tex /^ \\indexfonts\\rm \\tolerance=9500 \\advance\\baseline/ fonts tex-src/texinfo.tex /^\\obeyspaces \\obeylines \\ninett \\indexfonts \\rawbac/ -foo1 ruby-src/test1.ru /^ attr_reader(:foo1, :bar1, # comment$/ -foo2 ruby-src/test1.ru /^ alias_method ( :foo2, #cmmt$/ -foobar2_ c-src/h.h 16 -foobar2 c-src/h.h 20 -foobar c.c /^extern void foobar (void) __attribute__ ((section / -foobar c-src/c.c /^int foobar() {;}$/ -foo==bar el-src/TAGTEST.EL /^(defun foo==bar () (message "hi")) ; Bug#5624$/ -Foo::Bar perl-src/kai-test.pl /^package Foo::Bar;$/ +fonts\rm tex-src/texinfo.tex /^ \\indexfonts\\rm \\tolerance=9500 \\advance\\baseline/ +foo c-src/h.h 18 foo c.c 150 foo c.c 166 foo c.c 167 foo c.c 178 foo c.c 189 +foo cp-src/c.C /^ foo() {$/ foo cp-src/c.C 68 foo cp-src/c.C 79 -foo cp-src/c.C /^ foo() {$/ foo cp-src/x.cc /^XX::foo()$/ -foo c-src/h.h 18 -(foo) forth-src/test-forth.fth /^: (foo) 1 ;$/ -foo forth-src/test-forth.fth /^: foo (foo) ;$/ foo f-src/entry.for /^ character*(*) function foo()$/ foo f-src/entry.strange /^ character*(*) function foo()$/ foo f-src/entry.strange_suffix /^ character*(*) function foo()$/ -Foo perl-src/kai-test.pl /^package Foo;$/ +foo forth-src/test-forth.fth /^: foo (foo) ;$/ foo php-src/ptest.php /^foo()$/ foo ruby-src/test1.ru /^ attr_reader :foo$/ foo! ruby-src/test1.ru /^ def foo!$/ -footnotestyle tex-src/texinfo.tex /^\\let\\footnotestyle=\\comment$/ +foo1 ruby-src/test1.ru /^ attr_reader(:foo1, :bar1, # comment$/ +foo2 ruby-src/test1.ru /^ alias_method ( :foo2, #cmmt$/ +foo==bar el-src/TAGTEST.EL /^(defun foo==bar () (message "hi")) ; Bug#5624$/ +foobar c-src/c.c /^int foobar() {;}$/ +foobar c.c /^extern void foobar (void) __attribute__ ((section / +foobar2 c-src/h.h 20 +foobar2_ c-src/h.h 16 footnote tex-src/texinfo.tex /^\\long\\gdef\\footnote #1{\\global\\advance \\footnoteno/ +footnotestyle tex-src/texinfo.tex /^\\let\\footnotestyle=\\comment$/ footnotezzz tex-src/texinfo.tex /^\\long\\gdef\\footnotezzz #1{\\insert\\footins{$/ -Fopen_dribble_file c-src/emacs/src/keyboard.c /^DEFUN ("open-dribble-file", Fopen_dribble_file, So/ foperator c-src/etags.c 2411 force_auto_save_soon c-src/emacs/src/keyboard.c /^force_auto_save_soon (void)$/ force_explicit_name c-src/etags.c 265 force_quit_count c-src/emacs/src/keyboard.c 10387 -FOR_EACH_ALIST_VALUE c-src/emacs/src/lisp.h /^#define FOR_EACH_ALIST_VALUE(head_var, list_var, v/ -FOR_EACH_TAIL c-src/emacs/src/lisp.h /^#define FOR_EACH_TAIL(hare, list, tortoise, n) \\$/ foreign_export merc-src/accumulator.m /^:- pragma foreign_export("C", unravel_univ(in, out/ -formatSize objc-src/PackInsp.m /^-(const char *)formatSize:(const char *)size inBuf/ format tex-src/texinfo.tex /^\\def\\format{\\begingroup\\inENV %This group ends at / -Forth_help c-src/etags.c 573 -FORTHSRC make-src/Makefile /^FORTHSRC=test-forth.fth$/ -Forth_suffixes c-src/etags.c 571 -Forth_words c-src/etags.c /^Forth_words (FILE *inf)$/ -Fortran_functions c-src/etags.c /^Fortran_functions (FILE *inf)$/ -Fortran_help c-src/etags.c 579 -Fortran_suffixes c-src/etags.c 577 +formatSize objc-src/PackInsp.m /^-(const char *)formatSize:(const char *)size inBuf/ found c-src/emacs/src/lisp.h 2344 -Fposn_at_point c-src/emacs/src/keyboard.c /^DEFUN ("posn-at-point", Fposn_at_point, Sposn_at_p/ -Fposn_at_x_y c-src/emacs/src/keyboard.c /^DEFUN ("posn-at-x-y", Fposn_at_x_y, Sposn_at_x_y, / -/F ps-src/rfc1245.ps /^\/F { $/ fracas html-src/software.html /^Fracas$/ -/fraction ps-src/rfc1245.ps /^\/fraction \/currency \/guilsinglleft \/guilsinglright/ frag c-src/emacs/src/gmalloc.c 152 -_fraghead c-src/emacs/src/gmalloc.c 371 -/FrameDict ps-src/rfc1245.ps /^\/FrameDict 190 dict def $/ frame_local c-src/emacs/src/lisp.h 2341 -FRAMEP c-src/emacs/src/lisp.h /^FRAMEP (Lisp_Object a)$/ -FRC make-src/Makefile /^FRC:;$/ -Fread_key_sequence c-src/emacs/src/keyboard.c /^DEFUN ("read-key-sequence", Fread_key_sequence, Sr/ -Fread_key_sequence_vector c-src/emacs/src/keyboard.c /^DEFUN ("read-key-sequence-vector", Fread_key_seque/ -Frecent_keys c-src/emacs/src/keyboard.c /^DEFUN ("recent-keys", Frecent_keys, Srecent_keys, / -Frecursion_depth c-src/emacs/src/keyboard.c /^DEFUN ("recursion-depth", Frecursion_depth, Srecur/ -Frecursive_edit c-src/emacs/src/keyboard.c /^DEFUN ("recursive-edit", Frecursive_edit, Srecursi/ +free c-src/emacs/src/gmalloc.c /^free (void *ptr)$/ free c-src/emacs/src/gmalloc.c 166 free c-src/emacs/src/gmalloc.c 1723 free c-src/emacs/src/gmalloc.c 67 free c-src/emacs/src/gmalloc.c 72 -_free c-src/emacs/src/gmalloc.c /^_free (void *ptr)$/ -free c-src/emacs/src/gmalloc.c /^free (void *ptr)$/ free_fdesc c-src/etags.c /^free_fdesc (register fdesc *fdp)$/ -FREEFLOOD c-src/emacs/src/gmalloc.c 1863 free_for prol-src/natded.prolog /^free_for(var(_),_,_).$/ -freehook c-src/emacs/src/gmalloc.c /^freehook (void *ptr)$/ -_free_internal c-src/emacs/src/gmalloc.c /^_free_internal (void *ptr)$/ -_free_internal_nolock c-src/emacs/src/gmalloc.c /^_free_internal_nolock (void *ptr)$/ free_regexps c-src/etags.c /^free_regexps (void)$/ free_tree c-src/etags.c /^free_tree (register node *np)$/ free_var prol-src/natded.prolog /^free_var(var(V),var(V)).$/ -frenchspacing tex-src/texinfo.tex /^\\def\\frenchspacing{\\sfcode46=1000 \\sfcode63=1000 \\/ -frenchspacing tex-src/texinfo.tex /^\\let\\frenchspacing=\\relax%$/ -/freq ps-src/rfc1245.ps /^\/freq dpi 18.75 div 8 div round dup 0 eq {pop 1} i/ -Freset_this_command_lengths c-src/emacs/src/keyboard.c /^DEFUN ("reset-this-command-lengths", Freset_this_c/ -fresh_vars prol-src/natded.prolog /^fresh_vars(var(V),var(V)).$/ -Fset_input_interrupt_mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-interrupt-mode", Fset_input_inte/ -Fset_input_meta_mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-meta-mode", Fset_input_meta_mode/ -Fset_input_mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-mode", Fset_input_mode, Sset_inp/ -Fset_output_flow_control c-src/emacs/src/keyboard.c /^DEFUN ("set-output-flow-control", Fset_output_flow/ -Fset_quit_char c-src/emacs/src/keyboard.c /^DEFUN ("set-quit-char", Fset_quit_char, Sset_quit_/ -FSRC make-src/Makefile /^FSRC=entry.for entry.strange_suffix entry.strange$/ -fstartlist c-src/etags.c 2413 -Fsuspend_emacs c-src/emacs/src/keyboard.c /^DEFUN ("suspend-emacs", Fsuspend_emacs, Ssuspend_e/ -ftable tex-src/texinfo.tex /^\\def\\ftable{\\begingroup\\inENV\\obeylines\\obeyspaces/ -ftablex tex-src/texinfo.tex /^\\gdef\\ftablex #1^^M{%$/ -F_takeprec c-src/etags.c /^F_takeprec (void)$/ -Fthis_command_keys c-src/emacs/src/keyboard.c /^DEFUN ("this-command-keys", Fthis_command_keys, St/ -Fthis_command_keys_vector c-src/emacs/src/keyboard.c /^DEFUN ("this-command-keys-vector", Fthis_command_k/ -Fthis_single_command_keys c-src/emacs/src/keyboard.c /^DEFUN ("this-single-command-keys", Fthis_single_co/ -Fthis_single_command_raw_keys c-src/emacs/src/keyboard.c /^DEFUN ("this-single-command-raw-keys", Fthis_singl/ -Ftop_level c-src/emacs/src/keyboard.c /^DEFUN ("top-level", Ftop_level, Stop_level, 0, 0, / -Ftrack_mouse c-src/emacs/src/keyboard.c /^DEFUN ("internal--track-mouse", Ftrack_mouse, Stra/ -FUN0 y-src/parse.y /^yylex FUN0()$/ -FUN1 y-src/parse.y /^str_to_col FUN1(char **,str)$/ -FUN1 y-src/parse.y /^yyerror FUN1(char *, s)$/ -FUN2 y-src/parse.y /^make_list FUN2(YYSTYPE, car, YYSTYPE, cdr)$/ -FUN2 y-src/parse.y /^parse_cell_or_range FUN2(char **,ptr, struct rng */ -func1 c.c /^int func1$/ -func2 c.c /^int func2 (a,b$/ -funcboo c.c /^bool funcboo ()$/ -func c-src/emacs/src/lisp.h /^ void (*func) (int);$/ +freehook c-src/emacs/src/gmalloc.c /^freehook (void *ptr)$/ +frenchspacing tex-src/texinfo.tex /^\\def\\frenchspacing{\\sfcode46=1000 \\sfcode63=1000 \\/ +frenchspacing tex-src/texinfo.tex /^\\let\\frenchspacing=\\relax%$/ +fresh_vars prol-src/natded.prolog /^fresh_vars(var(V),var(V)).$/ +fstartlist c-src/etags.c 2413 +ftable tex-src/texinfo.tex /^\\def\\ftable{\\begingroup\\inENV\\obeylines\\obeyspaces/ +ftablex tex-src/texinfo.tex /^\\gdef\\ftablex #1^^M{%$/ func c-src/emacs/src/lisp.h /^ void (*func) (Lisp_Object);$/ +func c-src/emacs/src/lisp.h /^ void (*func) (int);$/ func c-src/emacs/src/lisp.h /^ void (*func) (void *);$/ func c-src/emacs/src/lisp.h /^ void (*func) (void);$/ +func1 c.c /^int func1$/ +func2 c.c /^int func2 (a,b$/ func_key_syms c-src/emacs/src/keyboard.c 4626 +funcboo c.c /^bool funcboo ()$/ funcpointer c-src/emacs/src/lisp.h 2126 funcptr c-src/h.h /^ fu int (*funcptr) (void *ptr);$/ function c-src/emacs/src/lisp.h 1685 @@ -1550,12 +2733,8 @@ function c-src/emacs/src/lisp.h 2197 function c-src/emacs/src/lisp.h 2985 function c-src/emacs/src/lisp.h 694 function c-src/etags.c 194 -FUNCTION_KEY_OFFSET c-src/emacs/src/keyboard.c 4766 -FUNCTION_KEY_OFFSET c-src/emacs/src/keyboard.c 5061 -functionparens tex-src/texinfo.tex /^\\gdef\\functionparens{\\boldbrax\\let&=\\amprm\\parenco/ -FUNCTIONP c-src/emacs/src/lisp.h /^FUNCTIONP (Lisp_Object obj)$/ functionp c-src/emacs/src/lisp.h /^functionp (Lisp_Object object)$/ -Funexpand_abbrev c-src/abbrev.c /^DEFUN ("unexpand-abbrev", Funexpand_abbrev, Sunexp/ +functionparens tex-src/texinfo.tex /^\\gdef\\functionparens{\\boldbrax\\let&=\\amprm\\parenco/ fval forth-src/test-forth.fth /^fconst fvalue fval$/ fvar forth-src/test-forth.fth /^fvariable fvar$/ fvdef c-src/etags.c 2418 @@ -1564,138 +2743,79 @@ fvnameseen c-src/etags.c 2412 fvnone c-src/etags.c 2408 fwd c-src/emacs/src/lisp.h 2346 fwd c-src/emacs/src/lisp.h 690 -Fx_get_selection_internal c.c /^DEFUN ("x-get-selection-internal", Fx_get_selectio/ -Fx_get_selection_internal c.c /^ Fx_get_selection_internal, Sx_get_selection/ -Fy_get_selection_internal c.c /^ Fy_get_selection_internal, Sy_get_selection_/ +g cp-src/c.C /^ int g(){return 2;};$/ galileo html-src/software.html /^GaliLEO$/ -GatherControls pyt-src/server.py /^ def GatherControls(self):$/ gather pyt-src/server.py /^ def gather(self):$/ -GCALIGNED c-src/emacs/src/lisp.h 288 -GCALIGNED c-src/emacs/src/lisp.h 290 -GCALIGNMENT c-src/emacs/src/lisp.h 243 gc_aset c-src/emacs/src/lisp.h /^gc_aset (Lisp_Object array, ptrdiff_t idx, Lisp_Ob/ -GC_MAKE_GCPROS_NOOPS c-src/emacs/src/lisp.h 3172 gcmarkbit c-src/emacs/src/lisp.h 1974 gcmarkbit c-src/emacs/src/lisp.h 1981 gcmarkbit c-src/emacs/src/lisp.h 2035 gcmarkbit c-src/emacs/src/lisp.h 2113 gcmarkbit c-src/emacs/src/lisp.h 2204 gcmarkbit c-src/emacs/src/lisp.h 656 -GC_MARK_STACK_CHECK_GCPROS c-src/emacs/src/lisp.h 3173 -GC_MARK_STACK c-src/emacs/src/lisp.h 3177 -GCPRO1 c-src/emacs/src/lisp.h /^#define GCPRO1(a) \\$/ -GCPRO1 c-src/emacs/src/lisp.h /^#define GCPRO1(varname) ((void) gcpro1)$/ -GCPRO2 c-src/emacs/src/lisp.h /^#define GCPRO2(a, b) \\$/ -GCPRO2 c-src/emacs/src/lisp.h /^#define GCPRO2(varname1, varname2) ((void) gcpro2,/ -GCPRO3 c-src/emacs/src/lisp.h /^#define GCPRO3(a, b, c) \\$/ -GCPRO3 c-src/emacs/src/lisp.h /^#define GCPRO3(varname1, varname2, varname3) \\$/ -GCPRO4 c-src/emacs/src/lisp.h /^#define GCPRO4(a, b, c, d) \\$/ -GCPRO4 c-src/emacs/src/lisp.h /^#define GCPRO4(varname1, varname2, varname3, varna/ -GCPRO5 c-src/emacs/src/lisp.h /^#define GCPRO5(a, b, c, d, e) \\$/ -GCPRO5 c-src/emacs/src/lisp.h /^#define GCPRO5(varname1, varname2, varname3, varna/ -GCPRO6 c-src/emacs/src/lisp.h /^#define GCPRO6(a, b, c, d, e, f) \\$/ -GCPRO6 c-src/emacs/src/lisp.h /^#define GCPRO6(varname1, varname2, varname3, varna/ -GCPRO7 c-src/emacs/src/lisp.h /^#define GCPRO7(a, b, c, d, e, f, g) \\$/ -GCPRO7 c-src/emacs/src/lisp.h /^#define GCPRO7(a, b, c, d, e, f, g) (GCPRO6 (a, b,/ gcpro c-src/emacs/src/lisp.h 3042 gcpro c-src/emacs/src/lisp.h 3132 -g cp-src/c.C /^ int g(){return 2;};$/ -GCTYPEBITS c-src/emacs/src/lisp.h 67 -GCTYPEBITS c-src/emacs/src/lisp.h /^DEFINE_GDB_SYMBOL_BEGIN (int, GCTYPEBITS)$/ -GC_USE_GCPROS_AS_BEFORE c-src/emacs/src/lisp.h 3171 -GC_USE_GCPROS_CHECK_ZOMBIES c-src/emacs/src/lisp.h 3174 +gen_help_event c-src/emacs/src/keyboard.c /^gen_help_event (Lisp_Object help, Lisp_Object fram/ genalgorithm html-src/algrthms.html /^Generating the Data<\/font><\/i><\/b>$/ generate_warning merc-src/accumulator.m /^:- pred generate_warning(module_info::in, prog_var/ generate_warnings merc-src/accumulator.m /^:- pred generate_warnings(module_info::in, prog_va/ -~generic_object cp-src/clheir.cpp /^generic_object::~generic_object(void)$/ generic_object cp-src/clheir.cpp /^generic_object::generic_object(void)$/ generic_object cp-src/clheir.hpp 13 -GENERIC_PTR y-src/cccp.y 56 -GENERIC_PTR y-src/cccp.y 58 -gen_help_event c-src/emacs/src/keyboard.c /^gen_help_event (Lisp_Object help, Lisp_Object fram/ -GEQ y-src/cccp.c 15 getArchs objc-src/PackInsp.m /^-(void)getArchs$/ -getcjmp c-src/emacs/src/keyboard.c 147 +getDomainNames php-src/lce_functions.php /^ function getDomainNames()$/ +getFoo lua-src/test.lua /^function Cube.data.getFoo ()$/ +getPOReader php-src/lce_functions.php /^ function &getPOReader($domain)$/ +getPath objc-src/PackInsp.m /^-(const char *)getPath:(char *)buf forType:(const / +getPos lua-src/test.lua /^function Circle.getPos ()$/ +getPos lua-src/test.lua /^function Rectangle.getPos ()$/ +getTextDomains php-src/lce_functions.php /^ function getTextDomains($lines)$/ get_compressor_from_suffix c-src/etags.c /^get_compressor_from_suffix (char *file, char **ext/ get_contiguous_space c-src/emacs/src/gmalloc.c /^get_contiguous_space (ptrdiff_t size, void *positi/ get_current_dir_name c-src/emacs/src/gmalloc.c 33 -getDomainNames php-src/lce_functions.php /^ function getDomainNames()$/ -getFoo lua-src/test.lua /^function Cube.data.getFoo ()$/ get_input_pending c-src/emacs/src/keyboard.c /^get_input_pending (int flags)$/ get_language_from_filename c-src/etags.c /^get_language_from_filename (char *file, int case_s/ get_language_from_interpreter c-src/etags.c /^get_language_from_interpreter (char *interpreter)$/ get_language_from_langname c-src/etags.c /^get_language_from_langname (const char *name)$/ -GetLayerByName lua-src/allegro.lua /^function GetLayerByName (name)$/ get_layer_by_name lua-src/allegro.lua /^local function get_layer_by_name (sprite, layer, n/ -GetNameList pas-src/common.pas /^function GetNameList; (* : BinNodePointer;*)$/ -GetNewNameListNode pas-src/common.pas /^function GetNewNameListNode;(*($/ -getopt1.o make-src/Makefile /^getopt1.o: emacs\/lib-src\/getopt1.c$/ -_GETOPT_H c-src/getopt.h 19 -GETOPTOBJS make-src/Makefile /^GETOPTOBJS= #getopt.o getopt1.o$/ -getopt.o make-src/Makefile /^getopt.o: emacs\/lib-src\/getopt.c$/ +get_tag c-src/etags.c /^get_tag (register char *bp, char **namepp)$/ +get_word c-src/tab.c /^static char *get_word(char **str, char delim)$/ +getcjmp c-src/emacs/src/keyboard.c 147 getopt perl-src/yagrip.pl /^sub getopt {$/ -Get_Own_Priority/f ada-src/2ataspri.adb /^ function Get_Own_Priority return System.Any_Pri/ -Get_Own_Priority/f ada-src/2ataspri.ads /^ function Get_Own_Priority return System.Any_Pri/ -getPath objc-src/PackInsp.m /^-(const char *)getPath:(char *)buf forType:(const / -getPOReader php-src/lce_functions.php /^ function &getPOReader($domain)$/ -getPos lua-src/test.lua /^function Circle.getPos ()$/ -getPos lua-src/test.lua /^function Rectangle.getPos ()$/ -Get_Priority/f ada-src/2ataspri.adb /^ function Get_Priority (T : TCB_Ptr) return Syst/ -Get_Priority/f ada-src/2ataspri.ads /^ function Get_Priority (T : TCB_Ptr) return Syst/ +getopt.o make-src/Makefile /^getopt.o: emacs\/lib-src\/getopt.c$/ +getopt1.o make-src/Makefile /^getopt1.o: emacs\/lib-src\/getopt1.c$/ getptys objc-src/Subprocess.m /^getptys (int *master, int *slave)$/ -get_tag c-src/etags.c /^get_tag (register char *bp, char **namepp)$/ -getTextDomains php-src/lce_functions.php /^ function getTextDomains($lines)$/ gettext php-src/lce_functions.php /^ function gettext($msgid)$/ -GetTextRef pas-src/common.pas /^function GetTextRef;(*($/ -GetUniqueLayerName lua-src/allegro.lua /^function GetUniqueLayerName ()$/ -get_word c-src/tab.c /^static char *get_word(char **str, char delim)$/ -GE y-src/parse.c 8 ggg c-src/h.h 10 ghi1 c-src/h.h 36 ghi2 c-src/h.h 39 giallo cp-src/c.C 40 glider cp-src/conway.cpp /^void glider(int x, int y)$/ gloggingall tex-src/texinfo.tex /^\\def\\gloggingall{\\begingroup \\globaldefs = 1 \\logg/ -/gn ps-src/rfc1245.ps /^\/gn { $/ gnu html-src/software.html /^Free software that I wrote for the GNU project or / -_GNU_SOURCE c-src/etags.c 94 gobble_input c-src/emacs/src/keyboard.c /^gobble_input (void)$/ goto-tag-location-function el-src/emacs/lisp/progmodes/etags.el /^(defvar goto-tag-location-function nil$/ goto_xy cp-src/screen.cpp /^void goto_xy(unsigned char x, unsigned char y)$/ -/G ps-src/rfc1245.ps /^\/G { $/ -/graymode ps-src/rfc1245.ps /^\/graymode true def$/ -/grayness ps-src/rfc1245.ps /^\/grayness {$/ -GREEN cp-src/screen.hpp 14 group tex-src/texinfo.tex /^\\def\\group{\\begingroup$/ -GROW_RAW_KEYBUF c-src/emacs/src/keyboard.c 119 -gtr tex-src/texinfo.tex /^\\def\\gtr{\\realbackslash gtr}%$/ gtr tex-src/texinfo.tex /^\\def\\gtr{\\realbackslash gtr}$/ -/guillemotleft ps-src/rfc1245.ps /^\/guillemotleft \/guillemotright \/ellipsis \/.notdef / +gtr tex-src/texinfo.tex /^\\def\\gtr{\\realbackslash gtr}%$/ +handleList pyt-src/server.py /^ def handleList(self, event):$/ +handleNew pyt-src/server.py /^ def handleNew(self, event):$/ handle_async_input c-src/emacs/src/keyboard.c /^handle_async_input (void)$/ handle_input_available_signal c-src/emacs/src/keyboard.c /^handle_input_available_signal (int sig)$/ handle_interrupt c-src/emacs/src/keyboard.c /^handle_interrupt (bool in_signal_handler)$/ handle_interrupt_signal c-src/emacs/src/keyboard.c /^handle_interrupt_signal (int sig)$/ -handleList pyt-src/server.py /^ def handleList(self, event):$/ -handleNew pyt-src/server.py /^ def handleNew(self, event):$/ +handle_user_signal c-src/emacs/src/keyboard.c /^handle_user_signal (int sig)$/ handler c-src/emacs/src/lisp.h 3023 handlertype c-src/emacs/src/lisp.h 3021 -handle_user_signal c-src/emacs/src/keyboard.c /^handle_user_signal (int sig)$/ has_arg c-src/getopt.h 82 hash c-src/emacs/src/lisp.h 1843 hash c-src/etags.c /^hash (const char *str, int len)$/ -hashfn c-src/emacs/src/lisp.h /^ EMACS_UINT (*hashfn) (struct hash_table_test *t,/ -HASH_HASH c-src/emacs/src/lisp.h /^HASH_HASH (struct Lisp_Hash_Table *h, ptrdiff_t id/ -HASH_INDEX c-src/emacs/src/lisp.h /^HASH_INDEX (struct Lisp_Hash_Table *h, ptrdiff_t i/ -HASH_KEY c-src/emacs/src/lisp.h /^HASH_KEY (struct Lisp_Hash_Table *h, ptrdiff_t idx/ -HASH_NEXT c-src/emacs/src/lisp.h /^HASH_NEXT (struct Lisp_Hash_Table *h, ptrdiff_t id/ -HASH_TABLE_P c-src/emacs/src/lisp.h /^HASH_TABLE_P (Lisp_Object a)$/ -HASH_TABLE_SIZE c-src/emacs/src/lisp.h /^HASH_TABLE_SIZE (struct Lisp_Hash_Table *h)$/ hash_table_test c-src/emacs/src/lisp.h 1805 -HASH_VALUE c-src/emacs/src/lisp.h /^HASH_VALUE (struct Lisp_Hash_Table *h, ptrdiff_t i/ -hat tex-src/texinfo.tex /^\\def\\hat{\\realbackslash hat}%$/ +hashfn c-src/emacs/src/lisp.h /^ EMACS_UINT (*hashfn) (struct hash_table_test *t,/ hat tex-src/texinfo.tex /^\\def\\hat{\\realbackslash hat}$/ -HAVE_NTGUI c-src/etags.c 116 +hat tex-src/texinfo.tex /^\\def\\hat{\\realbackslash hat}%$/ hdr c-src/emacs/src/gmalloc.c 1865 +head_table c-src/emacs/src/keyboard.c 11027 header c-src/emacs/src/lisp.h 1371 header c-src/emacs/src/lisp.h 1388 header c-src/emacs/src/lisp.h 1581 @@ -1703,52 +2823,24 @@ header c-src/emacs/src/lisp.h 1610 header c-src/emacs/src/lisp.h 1672 header c-src/emacs/src/lisp.h 1826 header_size c-src/emacs/src/lisp.h 1471 -HEADINGSafter tex-src/texinfo.tex /^\\def\\HEADINGSafter{\\let\\HEADINGShook=\\HEADINGSdoub/ -HEADINGSdoubleafter tex-src/texinfo.tex /^\\let\\HEADINGSdoubleafter=\\HEADINGSafter$/ -HEADINGSdouble tex-src/texinfo.tex /^\\def\\HEADINGSdouble{$/ -HEADINGSdoublex tex-src/texinfo.tex /^\\def\\HEADINGSdoublex{%$/ -HEADINGShook tex-src/texinfo.tex /^\\def\\HEADINGSafter{\\let\\HEADINGShook=\\HEADINGSdoub/ -HEADINGShook tex-src/texinfo.tex /^\\def\\HEADINGSsingleafter{\\let\\HEADINGShook=\\HEADIN/ -HEADINGShook tex-src/texinfo.tex /^\\let\\HEADINGShook=\\relax$/ -HEADINGSoff tex-src/texinfo.tex /^\\def\\HEADINGSoff{$/ -HEADINGSon tex-src/texinfo.tex /^\\def\\HEADINGSon{\\HEADINGSdouble}$/ -HEADINGSon tex-src/texinfo.tex /^\\global\\def\\HEADINGSon{\\HEADINGSdouble}}$/ -HEADINGSon tex-src/texinfo.tex /^\\global\\def\\HEADINGSon{\\HEADINGSsingle}}$/ -HEADINGSsingleafter tex-src/texinfo.tex /^\\def\\HEADINGSsingleafter{\\let\\HEADINGShook=\\HEADIN/ -HEADINGSsingle tex-src/texinfo.tex /^\\def\\HEADINGSsingle{$/ -HEADINGSsinglex tex-src/texinfo.tex /^\\def\\HEADINGSsinglex{%$/ -headings tex-src/texinfo.tex /^\\def\\headings #1 {\\csname HEADINGS#1\\endcsname}$/ heading tex-src/texinfo.tex /^\\def\\heading{\\parsearg\\secheadingi}$/ -head_table c-src/emacs/src/keyboard.c 11027 -_heapbase c-src/emacs/src/gmalloc.c 356 -HEAP c-src/emacs/src/gmalloc.c 131 -_heapindex c-src/emacs/src/gmalloc.c 365 -_heapinfo c-src/emacs/src/gmalloc.c 359 -_heaplimit c-src/emacs/src/gmalloc.c 368 +headings tex-src/texinfo.tex /^\\def\\headings #1 {\\csname HEADINGS#1\\endcsname}$/ heapsize c-src/emacs/src/gmalloc.c 362 hello scm-src/test.scm /^(define hello "Hello, Emacs!")$/ hello scm-src/test.scm /^(set! hello "Hello, world!")$/ hello-world scm-src/test.scm /^(define (hello-world)$/ -help_char_p c-src/emacs/src/keyboard.c /^help_char_p (Lisp_Object c)$/ help c-src/etags.c 193 -help_form_saved_window_configs c-src/emacs/src/keyboard.c 2156 helpPanel objcpp-src/SimpleCalc.M /^- helpPanel:sender$/ +help_char_p c-src/emacs/src/keyboard.c /^help_char_p (Lisp_Object c)$/ +help_form_saved_window_configs c-src/emacs/src/keyboard.c 2156 helpwin pyt-src/server.py /^def helpwin(helpdict):$/ hide_cursor cp-src/screen.cpp /^void hide_cursor(void)$/ hlds merc-src/accumulator.m /^:- import_module hlds.$/ -/home/www/pub/etags.c.gz make-src/Makefile /^\/home\/www\/pub\/etags.c.gz: etags.c$/ -/home/www/pub/software/unix/etags.tar.gz make-src/Makefile /^\/home\/www\/pub\/software\/unix\/etags.tar.gz: Makefile/ -/H ps-src/rfc1245.ps /^\/H { $/ hsize tex-src/texinfo.tex /^ {\\let\\hsize=\\pagewidth \\makefootline}}$/ -hsize tex-src/texinfo.tex /^{\\let\\hsize=\\pagewidth \\makefootline}}}%$/ hsize tex-src/texinfo.tex /^ {\\let\\hsize=\\pagewidth \\makeheadline}$/ hsize tex-src/texinfo.tex /^\\shipout\\vbox{{\\let\\hsize=\\pagewidth \\makeheadline/ -HTML_help c-src/etags.c 584 -HTML_labels c-src/etags.c /^HTML_labels (FILE *inf)$/ -HTMLSRC make-src/Makefile /^HTMLSRC=softwarelibero.html index.shtml algrthms.h/ -HTML_suffixes c-src/etags.c 582 +hsize tex-src/texinfo.tex /^{\\let\\hsize=\\pagewidth \\makefootline}}}%$/ htmltreelist prol-src/natded.prolog /^htmltreelist([]).$/ -/hx ps-src/rfc1245.ps /^\/hx { $/ hybrid_aligned_alloc c-src/emacs/src/gmalloc.c /^hybrid_aligned_alloc (size_t alignment, size_t siz/ hybrid_calloc c-src/emacs/src/gmalloc.c /^hybrid_calloc (size_t nmemb, size_t size)$/ hybrid_free c-src/emacs/src/gmalloc.c /^hybrid_free (void *ptr)$/ @@ -1756,58 +2848,59 @@ hybrid_get_current_dir_name c-src/emacs/src/gmalloc.c /^hybrid_get_current_dir_n hybrid_malloc c-src/emacs/src/gmalloc.c /^hybrid_malloc (size_t size)$/ hybrid_realloc c-src/emacs/src/gmalloc.c /^hybrid_realloc (void *ptr, size_t size)$/ hypothetical_mem prol-src/natded.prolog /^hypothetical_mem(fi(N),Ass,_):-$/ -/iacute ps-src/rfc1245.ps /^\/iacute \/igrave \/icircumflex \/idieresis \/ntilde \/o/ -ialpage tex-src/texinfo.tex /^ \\availdimen@=\\pageheight \\advance\\availdimen@ by/ -ialpage tex-src/texinfo.tex /^\\def\\pagesofar{\\unvbox\\partialpage %$/ -ialpage tex-src/texinfo.tex /^ \\dimen@=\\pageheight \\advance\\dimen@ by-\\ht\\pa/ -ialpage tex-src/texinfo.tex /^ \\dimen@=\\pageheight \\advance\\dimen@ by-\\ht\\parti/ -ialpage tex-src/texinfo.tex /^\\newbox\\partialpage$/ -ialpage tex-src/texinfo.tex /^ \\output={\\global\\setbox\\partialpage=$/ -i c.c 169 -/Icircumflex ps-src/rfc1245.ps /^\/Icircumflex \/Idieresis \/Igrave \/Oacute \/Ocircumfl/ -i cp-src/c.C 132 -/ic ps-src/rfc1245.ps /^\/ic [ $/ i c-src/c.c 2 i c-src/emacs/src/lisp.h 4673 i c-src/emacs/src/lisp.h 4679 i c-src/emacs/src/lisp.h 567 +i c.c 169 +i cp-src/c.C 132 +i tex-src/texinfo.tex /^\\def\\i##1{\\realbackslash i {##1}}$/ +i tex-src/texinfo.tex /^\\def\\i##1{\\realbackslash i {##1}}%$/ +i tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ +i tex-src/texinfo.tex /^\\let\\i=\\indexdummyfont$/ +i tex-src/texinfo.tex /^\\let\\i=\\smartitalic$/ +ialpage tex-src/texinfo.tex /^ \\dimen@=\\pageheight \\advance\\dimen@ by-\\ht\\pa/ +ialpage tex-src/texinfo.tex /^ \\availdimen@=\\pageheight \\advance\\availdimen@ by/ +ialpage tex-src/texinfo.tex /^ \\dimen@=\\pageheight \\advance\\dimen@ by-\\ht\\parti/ +ialpage tex-src/texinfo.tex /^ \\output={\\global\\setbox\\partialpage=$/ +ialpage tex-src/texinfo.tex /^\\def\\pagesofar{\\unvbox\\partialpage %$/ +ialpage tex-src/texinfo.tex /^\\newbox\\partialpage$/ identify_goal_type merc-src/accumulator.m /^:- pred identify_goal_type(pred_id::in, proc_id::i/ identify_out_and_out_prime merc-src/accumulator.m /^:- pred identify_out_and_out_prime(module_info::in/ identify_recursive_calls merc-src/accumulator.m /^:- pred identify_recursive_calls(pred_id::in, proc/ idx c-src/emacs/src/lisp.h 3150 -IEEE_FLOATING_POINT c-src/emacs/src/lisp.h 2415 +ifclear tex-src/texinfo.tex /^\\def\\ifclear{\\begingroup\\ignoresections\\parsearg\\i/ ifclearfail tex-src/texinfo.tex /^\\def\\ifclearfail{\\begingroup\\ignoresections\\ifclea/ ifclearfailxxx tex-src/texinfo.tex /^\\long\\def\\ifclearfailxxx #1\\end ifclear{\\endgroup\\/ -ifclear tex-src/texinfo.tex /^\\def\\ifclear{\\begingroup\\ignoresections\\parsearg\\i/ ifclearxxx tex-src/texinfo.tex /^\\def\\ifclearxxx #1{\\endgroup$/ ifinfo tex-src/texinfo.tex /^\\def\\ifinfo{\\begingroup\\ignoresections\\ifinfoxxx}$/ ifinfoxxx tex-src/texinfo.tex /^\\long\\def\\ifinfoxxx #1\\end ifinfo{\\endgroup\\ignore/ +ifset tex-src/texinfo.tex /^\\def\\ifset{\\begingroup\\ignoresections\\parsearg\\ifs/ ifsetfail tex-src/texinfo.tex /^\\def\\ifsetfail{\\begingroup\\ignoresections\\ifsetfai/ ifsetfailxxx tex-src/texinfo.tex /^\\long\\def\\ifsetfailxxx #1\\end ifset{\\endgroup\\igno/ -ifset tex-src/texinfo.tex /^\\def\\ifset{\\begingroup\\ignoresections\\parsearg\\ifs/ ifsetxxx tex-src/texinfo.tex /^\\def\\ifsetxxx #1{\\endgroup$/ iftex tex-src/texinfo.tex /^\\def\\iftex{}$/ ifusingtt tex-src/texinfo.tex /^\\def\\ifusingtt#1#2{\\ifdim \\fontdimen3\\the\\font=0pt/ +ignore tex-src/texinfo.tex /^\\def\\ignore{\\begingroup\\ignoresections$/ ignore_case c-src/etags.c 266 ignore_mouse_drag_p c-src/emacs/src/keyboard.c 1256 ignoresections tex-src/texinfo.tex /^\\def\\ignoresections{%$/ -ignore tex-src/texinfo.tex /^\\def\\ignore{\\begingroup\\ignoresections$/ ignorexxx tex-src/texinfo.tex /^\\long\\def\\ignorexxx #1\\end ignore{\\endgroup\\ignore/ ii tex-src/texinfo.tex /^\\def\\ii#1{{\\it #1}} % italic font$/ -IMAGEP c-src/emacs/src/lisp.h /^IMAGEP (Lisp_Object x)$/ immediate_quit c-src/emacs/src/keyboard.c 174 impatto html-src/softwarelibero.html /^Impatto pratico del software libero$/ implementation merc-src/accumulator.m /^:- implementation.$/ implicitmath tex-src/texinfo.tex /^\\let\\implicitmath = $$/ +inENV tex-src/texinfo.tex /^\\newif\\ifENV \\ENVfalse \\def\\inENV{\\ifENV\\relax\\els/ +in_word_set c-src/etags.c /^in_word_set (register const char *str, register un/ inattribute c-src/etags.c 2400 inc cp-src/Range.h /^ double inc (void) const { return rng_inc; }$/ -/inch ps-src/rfc1245.ps /^\/inch {72 mul} def$/ include tex-src/texinfo.tex /^\\def\\include{\\parsearg\\includezzz}$/ includezzz tex-src/texinfo.tex /^\\def\\includezzz #1{{\\def\\thisfile{#1}\\input #1$/ indbf tex-src/texinfo.tex /^\\let\\indbf=\\indrm$/ +index c-src/emacs/src/lisp.h 1856 indexbackslash tex-src/texinfo.tex /^ \\def\\indexbackslash{\\rawbackslashxx}$/ indexbackslash tex-src/texinfo.tex /^\\let\\indexbackslash=0 %overridden during \\printin/ -index c-src/emacs/src/lisp.h 1856 indexdotfill tex-src/texinfo.tex /^\\def\\indexdotfill{\\cleaders$/ indexdummies tex-src/texinfo.tex /^\\def\\indexdummies{%$/ indexdummydots tex-src/texinfo.tex /^\\def\\indexdummydots{...}$/ @@ -1821,104 +2914,70 @@ indsc tex-src/texinfo.tex /^\\let\\indsc=\\indrm$/ indsf tex-src/texinfo.tex /^\\let\\indsf=\\indrm$/ indsl tex-src/texinfo.tex /^\\let\\indsl=\\indit$/ indtt tex-src/texinfo.tex /^\\let\\indtt=\\ninett$/ -inENV tex-src/texinfo.tex /^\\newif\\ifENV \\ENVfalse \\def\\inENV{\\ifENV\\relax\\els/ infabsdir c-src/etags.c 206 infabsname c-src/etags.c 205 infiles make-src/Makefile /^infiles = $(filter-out ${NONSRCS},${SRCS}) srclist/ infname c-src/etags.c 204 +info c-src/emacs/src/gmalloc.c 157 +infoPanel objcpp-src/SimpleCalc.M /^- infoPanel:sender$/ +infoappendix tex-src/texinfo.tex /^\\def\\infoappendix{\\parsearg\\appendixzzz}$/ infoappendixsec tex-src/texinfo.tex /^\\def\\infoappendixsec{\\parsearg\\appendixseczzz}$/ infoappendixsubsec tex-src/texinfo.tex /^\\def\\infoappendixsubsec{\\parsearg\\appendixsubseczz/ infoappendixsubsubsec tex-src/texinfo.tex /^\\def\\infoappendixsubsubsec{\\parsearg\\appendixsubsu/ -infoappendix tex-src/texinfo.tex /^\\def\\infoappendix{\\parsearg\\appendixzzz}$/ infochapter tex-src/texinfo.tex /^\\def\\infochapter{\\parsearg\\chapterzzz}$/ -info c-src/emacs/src/gmalloc.c 157 -infoPanel objcpp-src/SimpleCalc.M /^- infoPanel:sender$/ inforef tex-src/texinfo.tex /^\\def\\inforef #1{\\inforefzzz #1,,,,**}$/ inforefzzz tex-src/texinfo.tex /^\\def\\inforefzzz #1,#2,#3,#4**{See Info file \\file{/ infosection tex-src/texinfo.tex /^\\def\\infosection{\\parsearg\\sectionzzz}$/ infosubsection tex-src/texinfo.tex /^\\def\\infosubsection{\\parsearg\\subsectionzzz}$/ infosubsubsection tex-src/texinfo.tex /^\\def\\infosubsubsection{\\parsearg\\subsubsectionzzz}/ infotop tex-src/texinfo.tex /^\\def\\infotop{\\parsearg\\unnumberedzzz}$/ +infounnumbered tex-src/texinfo.tex /^\\def\\infounnumbered{\\parsearg\\unnumberedzzz}$/ infounnumberedsec tex-src/texinfo.tex /^\\def\\infounnumberedsec{\\parsearg\\unnumberedseczzz}/ infounnumberedsubsec tex-src/texinfo.tex /^\\def\\infounnumberedsubsec{\\parsearg\\unnumberedsubs/ infounnumberedsubsubsec tex-src/texinfo.tex /^\\def\\infounnumberedsubsubsec{\\parsearg\\unnumbereds/ -infounnumbered tex-src/texinfo.tex /^\\def\\infounnumbered{\\parsearg\\unnumberedzzz}$/ -inita c.c /^static void inita () {}$/ -initb c.c /^static void initb () {}$/ -init_control c.c 239 init c-src/etags.c /^init (void)$/ -Initialize_Cond/p ada-src/2ataspri.adb /^ procedure Initialize_Cond (Cond : in out Condit/ -Initialize_Cond/p ada-src/2ataspri.ads /^ procedure Initialize_Cond (Cond : in out Condit/ -initialize_goal_store merc-src/accumulator.m /^:- func initialize_goal_store(list(hlds_goal), ins/ -Initialize_LL_Tasks/p ada-src/2ataspri.adb /^ procedure Initialize_LL_Tasks (T : TCB_Ptr) is$/ -Initialize_LL_Tasks/p ada-src/2ataspri.ads /^ procedure Initialize_LL_Tasks (T : TCB_Ptr);$/ -Initialize_Lock/p ada-src/2ataspri.adb /^ procedure Initialize_Lock$/ -Initialize_Lock/p ada-src/2ataspri.ads /^ procedure Initialize_Lock (Prio : System.Any_Pr/ -initialize-new-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun initialize-new-tags-table ()$/ -initialize_random_junk y-src/cccp.y /^initialize_random_junk ()$/ -InitializeStringPackage pas-src/common.pas /^procedure InitializeStringPackage;$/ -Initialize_TAS_Cell/p ada-src/2ataspri.adb /^ procedure Initialize_TAS_Cell (Cell : out TAS_C/ -Initialize_TAS_Cell/p ada-src/2ataspri.ads /^ procedure Initialize_TAS_Cell (Cell : out TA/ -initial_kboard c-src/emacs/src/keyboard.c 84 -initial tex-src/texinfo.tex /^\\def\\initial #1{%$/ -init_kboard c-src/emacs/src/keyboard.c /^init_kboard (KBOARD *kb, Lisp_Object type)$/ -init_keyboard c-src/emacs/src/keyboard.c /^init_keyboard (void)$/ -InitNameList pas-src/common.pas /^procedure InitNameList;$/ -InitNameStringPool pas-src/common.pas /^procedure InitNameStringPool;$/ -init objcpp-src/SimpleCalc.M /^- init$/ init objc-src/Subprocess.m /^ andStdErr:(BOOL)wantsStdErr$/ init objc-src/Subprocess.m /^- init:(const char *)subprocessString$/ -__init__ pyt-src/server.py /^ def __init__(self):$/ -__init__ pyt-src/server.py /^ def __init__(self, host, sitelist, master=None/ -__init__ pyt-src/server.py /^ def __init__(self, master=None):$/ -__init__ pyt-src/server.py /^ def __init__(self, Master, text, textvar, widt/ -__init__ pyt-src/server.py /^ def __init__(self, newlegend, list, editor, ma/ -__init__ pyt-src/server.py /^ def __init__(self, user, userlist, master=None/ +init objcpp-src/SimpleCalc.M /^- init$/ +init_control c.c 239 +init_kboard c-src/emacs/src/keyboard.c /^init_kboard (KBOARD *kb, Lisp_Object type)$/ +init_keyboard c-src/emacs/src/keyboard.c /^init_keyboard (void)$/ init_registry cp-src/clheir.cpp /^void init_registry(void)$/ init_tool_bar_items c-src/emacs/src/keyboard.c /^init_tool_bar_items (Lisp_Object reuse)$/ -Inner1/b ada-src/etags-test-for.ada /^ package body Inner1 is$/ -Inner1/b ada-src/waroquiers.ada /^ package body Inner1 is$/ -Inner1/s ada-src/etags-test-for.ada /^ package Inner1 is$/ -Inner1/s ada-src/waroquiers.ada /^ package Inner1 is$/ -Inner2/b ada-src/etags-test-for.ada /^ package body Inner2 is$/ -Inner2/b ada-src/waroquiers.ada /^ package body Inner2 is$/ -Inner2/s ada-src/etags-test-for.ada /^ package Inner2 is$/ -Inner2/s ada-src/waroquiers.ada /^ package Inner2 is$/ +inita c.c /^static void inita () {}$/ +initb c.c /^static void initb () {}$/ +initial tex-src/texinfo.tex /^\\def\\initial #1{%$/ +initial_kboard c-src/emacs/src/keyboard.c 84 +initialize-new-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun initialize-new-tags-table ()$/ +initialize_goal_store merc-src/accumulator.m /^:- func initialize_goal_store(list(hlds_goal), ins/ +initialize_random_junk y-src/cccp.y /^initialize_random_junk ()$/ +input-pending-p c-src/emacs/src/keyboard.c /^DEFUN ("input-pending-p", Finput_pending_p, Sinput/ input_available_clear_time c-src/emacs/src/keyboard.c 324 -INPUT_EVENT_POS_MAX c-src/emacs/src/keyboard.c 3698 -INPUT_EVENT_POS_MIN c-src/emacs/src/keyboard.c 3701 input_pending c-src/emacs/src/keyboard.c 239 -input-pending-p c-src/emacs/src/keyboard.c /^DEFUN ("input-pending-p", Finput_pending_p, Sinput/ input_polling_used c-src/emacs/src/keyboard.c /^input_polling_used (void)$/ input_was_pending c-src/emacs/src/keyboard.c 287 insert-abbrev-table-description c-src/abbrev.c /^DEFUN ("insert-abbrev-table-description", Finsert_/ insertion_type c-src/emacs/src/lisp.h 1989 insertname pas-src/common.pas /^function insertname;(*($/ -INSERT_TREE_NODE pas-src/common.pas /^procedure INSERT_TREE_NODE;(*( $/ -Install_Abort_Handler/p ada-src/2ataspri.adb /^ procedure Install_Abort_Handler (Handler : Abor/ -Install_Abort_Handler/p ada-src/2ataspri.ads /^ procedure Install_Abort_Handler (Handler : Abor/ -Install_Error_Handler/p ada-src/2ataspri.adb /^ procedure Install_Error_Handler (Handler : Syst/ -Install_Error_Handler/p ada-src/2ataspri.ads /^ procedure Install_Error_Handler (Handler : Syst/ +instance_method ruby-src/test.rb /^ def instance_method$/ instance_method_equals= ruby-src/test.rb /^ def instance_method_equals=$/ instance_method_exclamation! ruby-src/test.rb /^ def instance_method_exclamation!$/ instance_method_question? ruby-src/test.rb /^ def instance_method_question?$/ -instance_method ruby-src/test.rb /^ def instance_method$/ -INSTANTIATE_MDIAGARRAY_FRIENDS cp-src/MDiagArray2.h /^#define INSTANTIATE_MDIAGARRAY_FRIENDS(T) \\$/ -instruct c-src/etags.c 2527 instr y-src/parse.y 81 -INT_BIT c-src/emacs/src/gmalloc.c 124 -INT c-src/h.h 32 +instruct c-src/etags.c 2527 +int merc-src/accumulator.m /^:- import_module int.$/ +intNumber go-src/test1.go 13 integer c-src/emacs/src/lisp.h 2127 +integer y-src/cccp.y 112 integer_overflow y-src/cccp.y /^integer_overflow ()$/ -INTEGERP c-src/emacs/src/lisp.h /^# define INTEGERP(x) lisp_h_INTEGERP (x)$/ -INTEGER_TO_CONS c-src/emacs/src/lisp.h /^#define INTEGER_TO_CONS(i) \\$/ integertonmstr pas-src/common.pas /^function integertonmstr; (* (TheInteger : integer)/ -integer y-src/cccp.y 112 intensity1 f-src/entry.for /^ & intensity1(efv,fv,svin,svquad,sfpv,maxp,val/ intensity1 f-src/entry.strange /^ & intensity1(efv,fv,svin,svquad,sfpv,maxp,val/ intensity1 f-src/entry.strange_suffix /^ & intensity1(efv,fv,svin,svquad,sfpv,maxp,val/ -interface_locate c-src/c.c /^interface_locate(void)$/ interface merc-src/accumulator.m /^:- interface.$/ +interface_locate c-src/c.c /^interface_locate(void)$/ +intern c-src/emacs/src/lisp.h /^intern (const char *str)$/ +intern_c_string c-src/emacs/src/lisp.h /^intern_c_string (const char *str)$/ internalBitem tex-src/texinfo.tex /^\\def\\internalBitem{\\smallbreak \\parsearg\\itemzzz}$/ internalBitemx tex-src/texinfo.tex /^\\def\\internalBitemx{\\par \\parsearg\\itemzzz}$/ internalBkitem tex-src/texinfo.tex /^\\def\\internalBkitem{\\smallbreak \\parsearg\\kitemzzz/ @@ -1927,123 +2986,87 @@ internalBxitem tex-src/texinfo.tex /^\\def\\internalBxitem "#1"{\\def\\xitemsubt internalBxitemx tex-src/texinfo.tex /^\\def\\internalBxitemx "#1"{\\def\\xitemsubtopix{#1} \\/ internal_last_event_frame c-src/emacs/src/keyboard.c 228 internalsetq tex-src/texinfo.tex /^\\def\\internalsetq #1#2{'xrdef {#1}{\\csname #2\\endc/ -intern c-src/emacs/src/lisp.h /^intern (const char *str)$/ -intern_c_string c-src/emacs/src/lisp.h /^intern_c_string (const char *str)$/ interned c-src/emacs/src/lisp.h 672 interpreters c-src/etags.c 197 +interrupt_input c-src/emacs/src/keyboard.c 328 interrupt_input_blocked c-src/emacs/src/keyboard.c 76 interrupt_input_blocked c-src/emacs/src/lisp.h 3048 -interrupt_input c-src/emacs/src/keyboard.c 328 interrupts_deferred c-src/emacs/src/keyboard.c 331 -INTERVAL c-src/emacs/src/lisp.h 1149 -INTMASK c-src/emacs/src/lisp.h 437 -int merc-src/accumulator.m /^:- import_module int.$/ -intNumber go-src/test1.go 13 intoken c-src/etags.c /^#define intoken(c) (_itk[CHAR (c)]) \/* c can be in/ intspec c-src/emacs/src/lisp.h 1688 -INTTYPEBITS c-src/emacs/src/lisp.h 249 -INT_TYPE_SIZE y-src/cccp.y 91 intvar c-src/emacs/src/lisp.h 2277 -INT y-src/cccp.c 6 invalidate_nodes c-src/etags.c /^invalidate_nodes (fdesc *badfdp, node **npp)$/ -Invoking gzip tex-src/gzip.texi /^@node Invoking gzip, Advanced usage, Sample, Top$/ -in_word_set c-src/etags.c /^in_word_set (register const char *str, register un/ io merc-src/accumulator.m /^:- import_module io.$/ -IpAddrKind rs-src/test.rs 3 -ipc3dChannelType cp-src/c.C 1 ipc3dCSC19 cp-src/c.C 6 +ipc3dChannelType cp-src/c.C 1 ipc3dIslandHierarchy cp-src/c.C 1 ipc3dLinkControl cp-src/c.C 1 -__ip c.c 159 -/ip ps-src/rfc1245.ps /^\/ip { $/ -/i ps-src/rfc1245.ps /^\/i \/j \/k \/l \/m \/n \/o \/p \/q \/r \/s \/t \/u \/v \/w \/x \/y/ -irregular_location cp-src/clheir.hpp 47 irregular_location cp-src/clheir.hpp /^ irregular_location(double xi, double yi, doubl/ -ISALNUM c-src/etags.c /^#define ISALNUM(c) isalnum (CHAR (c))$/ -ISALPHA c-src/etags.c /^#define ISALPHA(c) isalpha (CHAR (c))$/ -is_associative_construction merc-src/accumulator.m /^:- pred is_associative_construction(module_info::i/ +irregular_location cp-src/clheir.hpp 47 isComment php-src/lce_functions.php /^ function isComment($class)$/ -IsControlCharName pas-src/common.pas /^function IsControlCharName($/ -IsControlChar pas-src/common.pas /^function IsControlChar; (*($/ +isHoliday cp-src/functions.cpp /^bool isHoliday ( Date d ){$/ +isLeap cp-src/functions.cpp /^bool isLeap ( int year ){$/ +is_associative_construction merc-src/accumulator.m /^:- pred is_associative_construction(module_info::i/ is_curly_brace_form c-src/h.h 54 -IS_DAEMON c-src/emacs/src/lisp.h 4257 -IS_DAEMON c-src/emacs/src/lisp.h 4261 -ISDIGIT c-src/etags.c /^#define ISDIGIT(c) isdigit (CHAR (c))$/ is_explicit c-src/h.h 49 is_func c-src/etags.c 221 -isHoliday cp-src/functions.cpp /^bool isHoliday ( Date d ){$/ is_hor_space y-src/cccp.y 953 is_idchar y-src/cccp.y 948 is_idstart y-src/cccp.y 950 -isLeap cp-src/functions.cpp /^bool isLeap ( int year ){$/ -ISLOWER c-src/etags.c /^#define ISLOWER(c) islower (CHAR (c))$/ is_muldiv_operation cp-src/c.C /^is_muldiv_operation(pc)$/ -ISO_FUNCTION_KEY_OFFSET c-src/emacs/src/keyboard.c 5149 +is_ordset prol-src/ordsets.prolog /^is_ordset(X) :- var(X), !, fail.$/ +is_recursive_case merc-src/accumulator.m /^:- pred is_recursive_case(list(hlds_goal)::in, pre/ iso_lispy_function_keys c-src/emacs/src/keyboard.c 5151 isoperator prol-src/natded.prolog /^isoperator(Char):-$/ isoptab prol-src/natded.prolog /^isoptab('%').$/ -is_ordset prol-src/ordsets.prolog /^is_ordset(X) :- var(X), !, fail.$/ -is_recursive_case merc-src/accumulator.m /^:- pred is_recursive_case(list(hlds_goal)::in, pre/ -Is_Set/f ada-src/2ataspri.adb /^ function Is_Set (Cell : in TAS_Cell) return Bo/ -Is_Set/f ada-src/2ataspri.ads /^ function Is_Set (Cell : in TAS_Cell)/ -ISUPPER c-src/etags.c /^# define ISUPPER(c) isupper (CHAR (c))$/ iswhite c-src/etags.c /^#define iswhite(c) (_wht[CHAR (c)]) \/* c is white / +item tex-src/texinfo.tex /^\\def\\item{\\errmessage{@item while not in a table}}/ +item tex-src/texinfo.tex /^\\let\\item = \\internalBitem %$/ +item tex-src/texinfo.tex /^\\let\\item=\\itemizeitem}$/ +item_properties c-src/emacs/src/keyboard.c 7568 itemcontents tex-src/texinfo.tex /^\\def\\itemcontents{#1}%$/ itemfont tex-src/texinfo.tex /^\\def\\itemfont{#2}%$/ itemindex tex-src/texinfo.tex /^\\let\\itemindex=#1%$/ -itemizeitem tex-src/texinfo.tex /^\\def\\itemizeitem{%$/ itemize tex-src/texinfo.tex /^\\def\\itemize{\\parsearg\\itemizezzz}$/ +itemizeitem tex-src/texinfo.tex /^\\def\\itemizeitem{%$/ itemizey tex-src/texinfo.tex /^\\def\\itemizey #1#2{%$/ itemizezzz tex-src/texinfo.tex /^\\def\\itemizezzz #1{%$/ -item_properties c-src/emacs/src/keyboard.c 7568 -item tex-src/texinfo.tex /^\\def\\item{\\errmessage{@item while not in a table}}/ -item tex-src/texinfo.tex /^\\let\\item = \\internalBitem %$/ -item tex-src/texinfo.tex /^\\let\\item=\\itemizeitem}$/ itemx tex-src/texinfo.tex /^\\def\\itemx{\\errmessage{@itemx while not in a table/ itemx tex-src/texinfo.tex /^\\let\\itemx = \\internalBitemx %$/ itemzzz tex-src/texinfo.tex /^\\def\\itemzzz #1{\\begingroup %$/ -i tex-src/texinfo.tex /^\\def\\i##1{\\realbackslash i {##1}}%$/ -i tex-src/texinfo.tex /^\\def\\i##1{\\realbackslash i {##1}}$/ -i tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ -i tex-src/texinfo.tex /^\\let\\i=\\indexdummyfont$/ -i tex-src/texinfo.tex /^\\let\\i=\\smartitalic$/ ivarheader tex-src/texinfo.tex /^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/ ivarx\defivarheader tex-src/texinfo.tex /^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/ -JAVASRC make-src/Makefile /^JAVASRC=AWTEMul.java KeyEve.java SMan.java SysCol./ jmp c-src/emacs/src/lisp.h 3044 just_read_file c-src/etags.c /^just_read_file (FILE *inf)$/ +kbd tex-src/texinfo.tex /^\\def\\kbd##1{\\realbackslash kbd {##1}}$/ +kbd tex-src/texinfo.tex /^\\def\\kbd##1{\\realbackslash kbd {##1}}%$/ +kbd tex-src/texinfo.tex /^\\def\\kbd#1{\\def\\look{#1}\\expandafter\\kbdfoo\\look??/ +kbd tex-src/texinfo.tex /^\\let\\kbd=\\indexdummyfont$/ kbd_buffer c-src/emacs/src/keyboard.c 291 kbd_buffer_events_waiting c-src/emacs/src/keyboard.c /^kbd_buffer_events_waiting (void)$/ kbd_buffer_get_event c-src/emacs/src/keyboard.c /^kbd_buffer_get_event (KBOARD **kbp,$/ kbd_buffer_nr_stored c-src/emacs/src/keyboard.c /^kbd_buffer_nr_stored (void)$/ -KBD_BUFFER_SIZE c-src/emacs/src/keyboard.c 82 kbd_buffer_store_event c-src/emacs/src/keyboard.c /^kbd_buffer_store_event (register struct input_even/ kbd_buffer_store_event_hold c-src/emacs/src/keyboard.c /^kbd_buffer_store_event_hold (register struct input/ kbd_buffer_store_help_event c-src/emacs/src/keyboard.c /^kbd_buffer_store_help_event (Lisp_Object frame, Li/ kbd_buffer_unget_event c-src/emacs/src/keyboard.c /^kbd_buffer_unget_event (register struct input_even/ kbd_fetch_ptr c-src/emacs/src/keyboard.c 297 -kbdfoo tex-src/texinfo.tex /^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/ kbd_store_ptr c-src/emacs/src/keyboard.c 302 -kbd tex-src/texinfo.tex /^\\def\\kbd#1{\\def\\look{#1}\\expandafter\\kbdfoo\\look??/ -kbd tex-src/texinfo.tex /^\\def\\kbd##1{\\realbackslash kbd {##1}}%$/ -kbd tex-src/texinfo.tex /^\\def\\kbd##1{\\realbackslash kbd {##1}}$/ -kbd tex-src/texinfo.tex /^\\let\\kbd=\\indexdummyfont$/ +kbdfoo tex-src/texinfo.tex /^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/ kboard c-src/emacs/src/keyboard.c 860 kboard_stack c-src/emacs/src/keyboard.c 858 kboard_stack c-src/emacs/src/keyboard.c 864 -KBYTES objc-src/PackInsp.m 58 +key tex-src/texinfo.tex /^\\def\\key #1{{\\tt \\exhyphenpenalty=10000\\uppercase{/ +key tex-src/texinfo.tex /^\\def\\key##1{\\realbackslash key {##1}}$/ +key tex-src/texinfo.tex /^\\def\\key##1{\\realbackslash key {##1}}%$/ +key tex-src/texinfo.tex /^\\let\\key=\\indexdummyfont$/ key_and_value c-src/emacs/src/lisp.h 1868 keyremap c-src/emacs/src/keyboard.c 8742 keyremap c-src/emacs/src/keyboard.c 8754 keyremap_step c-src/emacs/src/keyboard.c /^keyremap_step (Lisp_Object *keybuf, int bufsize, v/ keys_of_keyboard c-src/emacs/src/keyboard.c /^keys_of_keyboard (void)$/ -key tex-src/texinfo.tex /^\\def\\key##1{\\realbackslash key {##1}}%$/ -key tex-src/texinfo.tex /^\\def\\key##1{\\realbackslash key {##1}}$/ -key tex-src/texinfo.tex /^\\def\\key #1{{\\tt \\exhyphenpenalty=10000\\uppercase{/ -key tex-src/texinfo.tex /^\\let\\key=\\indexdummyfont$/ -KEY_TO_CHAR c-src/emacs/src/keyboard.c /^#define KEY_TO_CHAR(k) (XINT (k) & ((1 << CHARACTE/ -keyvalcgi prol-src/natded.prolog /^keyvalcgi(Key,Val):-$/ keyval prol-src/natded.prolog /^keyval(key(Key,Val)) --> [Key,'='], valseq(Val).$/ +keyvalcgi prol-src/natded.prolog /^keyvalcgi(Key,Val):-$/ keyvalscgi prol-src/natded.prolog /^keyvalscgi(KeyVals),$/ keyvalseq prol-src/natded.prolog /^keyvalseq([KeyVal|KeyVals]) --> $/ keyword_parsing y-src/cccp.y 73 @@ -2066,56 +3089,42 @@ kset_local_function_key_map c-src/emacs/src/keyboard.c /^kset_local_function_key kset_overriding_terminal_local_map c-src/emacs/src/keyboard.c /^kset_overriding_terminal_local_map (struct kboard / kset_real_last_command c-src/emacs/src/keyboard.c /^kset_real_last_command (struct kboard *kb, Lisp_Ob/ kset_system_key_syms c-src/emacs/src/keyboard.c /^kset_system_key_syms (struct kboard *kb, Lisp_Obje/ -LabeledEntry pyt-src/server.py /^class LabeledEntry(Frame):$/ +l tex-src/texinfo.tex /^\\def\\l#1{{\\li #1}\\null} % $/ +l tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ labelspace tex-src/texinfo.tex /^\\def\\labelspace{\\hskip1em \\relax}$/ lang c-src/etags.c 208 lang c-src/etags.c 251 lang c-src/etags.c 259 -Lang_function c-src/etags.c 182 -Lang_function c-src/h.h 6 lang_names c-src/etags.c 718 language c-src/etags.c 199 +last-tag el-src/emacs/lisp/progmodes/etags.el /^(defvar last-tag nil$/ last_abbrev_point c-src/abbrev.c 79 -lasta c.c 272 -lastargmargin tex-src/texinfo.tex /^\\newskip\\deflastargmargin \\deflastargmargin=18pt$/ -lastargmargin tex-src/texinfo.tex /^\\setbox0=\\hbox{\\hskip \\deflastargmargin{\\rm #2}\\hs/ last_auto_save c-src/emacs/src/keyboard.c 214 -lastb c.c 278 last_heapinfo c-src/emacs/src/gmalloc.c 403 last_mouse_button c-src/emacs/src/keyboard.c 5215 last_mouse_x c-src/emacs/src/keyboard.c 5216 last_mouse_y c-src/emacs/src/keyboard.c 5217 -lastnode tex-src/texinfo.tex /^\\def\\nodexxx[#1,#2]{\\gdef\\lastnode{#1}}$/ -lastnode tex-src/texinfo.tex /^\\let\\lastnode=\\relax}$/ -lastnode tex-src/texinfo.tex /^\\let\\lastnode=\\relax$/ last_non_minibuf_size c-src/emacs/src/keyboard.c 207 last_point_position c-src/emacs/src/keyboard.c 217 last_state_size c-src/emacs/src/gmalloc.c 402 -last-tag el-src/emacs/lisp/progmodes/etags.el /^(defvar last-tag nil$/ last_undo_boundary c-src/emacs/src/keyboard.c 1287 -LATEST make-src/Makefile /^LATEST=17$/ +lasta c.c 272 +lastargmargin tex-src/texinfo.tex /^\\newskip\\deflastargmargin \\deflastargmargin=18pt$/ +lastargmargin tex-src/texinfo.tex /^\\setbox0=\\hbox{\\hskip \\deflastargmargin{\\rm #2}\\hs/ +lastb c.c 278 +lastnode tex-src/texinfo.tex /^\\def\\nodexxx[#1,#2]{\\gdef\\lastnode{#1}}$/ +lastnode tex-src/texinfo.tex /^\\let\\lastnode=\\relax$/ +lastnode tex-src/texinfo.tex /^\\let\\lastnode=\\relax}$/ lb c-src/etags.c 2923 lbrb tex-src/texinfo.tex /^\\def\\lbrb{{\\bf\\char`\\[}} \\def\\rbrb{{\\bf\\char`\\]}}$/ lbs c-src/etags.c 2924 +lce php-src/lce_functions.php /^ function lce()$/ lce_bindtextdomain php-src/lce_functions.php /^ function lce_bindtextdomain($d_name, $d_path/ lce_bindtextdomain php-src/lce_functions.php /^ function lce_bindtextdomain($domain, $path)$/ -LCE_COMMENT php-src/lce_functions.php 13 -LCE_COMMENT_TOOL php-src/lce_functions.php 17 -LCE_COMMENT_USER php-src/lce_functions.php 15 lce_dgettext php-src/lce_functions.php /^ function lce_dgettext($domain, $msgid)$/ -LCE_FUNCTIONS php-src/lce_functions.php 4 lce_geteditcode php-src/lce_functions.php /^ function lce_geteditcode($type, $name, $text, $r/ lce_gettext php-src/lce_functions.php /^ function lce_gettext($msgid)$/ -L_CELL y-src/parse.c 10 -LCE_MSGID php-src/lce_functions.php 19 -LCE_MSGSTR php-src/lce_functions.php 21 -lce php-src/lce_functions.php /^ function lce()$/ lce_textdomain php-src/lce_functions.php /^ function lce_textdomain($domain)$/ -LCE_TEXT php-src/lce_functions.php 23 -LCE_UNKNOWN php-src/lce_functions.php 9 -LCE_WS php-src/lce_functions.php 11 -L_CONST y-src/parse.c 13 -LDFLAGS make-src/Makefile /^LDFLAGS=#-static -lc_p$/ leasqr html-src/software.html /^Leasqr$/ left c-src/etags.c 216 left_shift y-src/cccp.y /^left_shift (a, b)$/ @@ -2123,167 +3132,75 @@ len c-src/etags.c 237 length c-src/etags.c 2495 length y-src/cccp.y 113 length y-src/cccp.y 44 -LEQ y-src/cccp.c 14 -/less ps-src/rfc1245.ps /^\/less \/equal \/greater \/question \/at \/A \/B \/C \/D \/E/ -less tex-src/texinfo.tex /^\\def\\less{\\realbackslash less}%$/ less tex-src/texinfo.tex /^\\def\\less{\\realbackslash less}$/ +less tex-src/texinfo.tex /^\\def\\less{\\realbackslash less}%$/ let c-src/emacs/src/lisp.h 2981 letter tex-src/texinfo.tex /^ {#1}{Appendix \\appendixletter}{\\noexpand\\folio}}/ -letter tex-src/texinfo.tex /^{#1}{\\appendixletter}{\\the\\secno}{\\noexpand\\folio}/ -letter tex-src/texinfo.tex /^{#1}{\\appendixletter}{\\the\\secno}{\\the\\subsecno}{\\/ letter tex-src/texinfo.tex /^ {\\appendixletter}$/ letter tex-src/texinfo.tex /^ {\\appendixletter}{\\the\\secno}{\\the\\subsecno}{\\th/ letter tex-src/texinfo.tex /^\\chapmacro {#1}{Appendix \\appendixletter}%$/ letter tex-src/texinfo.tex /^\\gdef\\thissection{#1}\\secheading {#1}{\\appendixlet/ letter tex-src/texinfo.tex /^\\global\\advance \\appendixno by 1 \\message{Appendix/ letter tex-src/texinfo.tex /^\\subsecheading {#1}{\\appendixletter}{\\the\\secno}{\\/ +letter tex-src/texinfo.tex /^{#1}{\\appendixletter}{\\the\\secno}{\\noexpand\\folio}/ +letter tex-src/texinfo.tex /^{#1}{\\appendixletter}{\\the\\secno}{\\the\\subsecno}{\\/ letter: tex-src/texinfo.tex /^\\xdef\\thischapter{Appendix \\appendixletter: \\noexp/ level c-src/emacs/src/lisp.h 3153 lex prol-src/natded.prolog /^lex(W,SynOut,Sem):-$/ lexptr y-src/cccp.y 332 -LE y-src/parse.c 7 -L_FN0 y-src/parse.c 14 -L_FN1R y-src/parse.c 20 -L_FN1 y-src/parse.c 15 -L_FN2R y-src/parse.c 21 -L_FN2 y-src/parse.c 16 -L_FN3R y-src/parse.c 22 -L_FN3 y-src/parse.c 17 -L_FN4R y-src/parse.c 23 -L_FN4 y-src/parse.c 18 -L_FNNR y-src/parse.c 24 -L_FNN y-src/parse.c 19 -L_getit c-src/etags.c /^L_getit (void)$/ -L_GE y-src/parse.c 27 -__libc_atexit c-src/exit.c 30 -__libc_atexit c-src/exit.strange_suffix 30 +li tex-src/texinfo.tex /^\\let\\li = \\sf % Sometimes we call it \\li, not \\sf./ libs merc-src/accumulator.m /^:- import_module libs.$/ licenze html-src/softwarelibero.html /^Licenze d'uso di un programma$/ -LIGHTBLUE cp-src/screen.hpp 21 -LIGHTCYAN cp-src/screen.hpp 23 -LIGHTGRAY cp-src/screen.hpp 19 -LIGHTGREEN cp-src/screen.hpp 22 -LIGHTMAGENTA cp-src/screen.hpp 25 -LIGHTRED cp-src/screen.hpp 24 limit cp-src/Range.h /^ double limit (void) const { return rng_limit; }$/ +line c-src/etags.c 2493 +line perl-src/htlmify-cystic 37 +line y-src/parse.y 87 +lineCount php-src/lce_functions.php /^ function lineCount($entry)$/ linebuffer c-src/etags.c 239 linebuffer_init c-src/etags.c /^linebuffer_init (linebuffer *lbp)$/ linebuffer_setlen c-src/etags.c /^linebuffer_setlen (linebuffer *lbp, int toksize)$/ -lineCount php-src/lce_functions.php /^ function lineCount($entry)$/ -line c-src/etags.c 2493 lineno c-src/emacs/src/lisp.h 3147 lineno c-src/etags.c 2506 linenumber tex-src/texinfo.tex /^ \\def\\linenumber{\\the\\inputlineno:\\space}$/ linenumber tex-src/texinfo.tex /^ \\let\\linenumber = \\empty % Non-3.0.$/ -line perl-src/htlmify-cystic 37 linepos c-src/etags.c 2507 linepos c-src/etags.c 2922 -line y-src/parse.y 87 links html-src/software.html /^Links to interesting software$/ -Lisp_Bits c-src/emacs/src/lisp.h 239 -Lisp_Boolfwd c-src/emacs/src/lisp.h 2284 -Lisp_Bool_Vector c-src/emacs/src/lisp.h 1384 -Lisp_Buffer_Local_Value c-src/emacs/src/lisp.h 2334 -Lisp_Buffer_Objfwd c-src/emacs/src/lisp.h 2302 -Lisp_Char_Table c-src/emacs/src/lisp.h 1575 -Lisp_Compiled c-src/emacs/src/lisp.h 2429 -Lisp_Cons c-src/emacs/src/lisp.h 475 +lisp tex-src/texinfo.tex /^\\def\\lisp{\\aboveenvbreak$/ lisp_eval_depth c-src/emacs/src/lisp.h 3045 -Lisp_Finalizer c-src/emacs/src/lisp.h 2186 -Lisp_Float c-src/emacs/src/lisp.h 2391 -Lisp_Float c-src/emacs/src/lisp.h 477 -Lisp_Free c-src/emacs/src/lisp.h 2201 -Lisp_functions c-src/etags.c /^Lisp_functions (FILE *inf)$/ -Lisp_Fwd_Bool c-src/emacs/src/lisp.h 505 -Lisp_Fwd_Buffer_Obj c-src/emacs/src/lisp.h 507 -Lisp_Fwd c-src/emacs/src/lisp.h 2368 -Lisp_Fwd_Int c-src/emacs/src/lisp.h 504 -Lisp_Fwd_Kboard_Obj c-src/emacs/src/lisp.h 508 -Lisp_Fwd_Obj c-src/emacs/src/lisp.h 506 -Lisp_Fwd_Type c-src/emacs/src/lisp.h 502 -Lisp_Hash_Table c-src/emacs/src/lisp.h 1823 -lisp_h_check_cons_list c-src/emacs/src/lisp.h /^# define lisp_h_check_cons_list() ((void) 0)$/ lisp_h_CHECK_LIST_CONS c-src/emacs/src/lisp.h /^#define lisp_h_CHECK_LIST_CONS(x, y) CHECK_TYPE (C/ lisp_h_CHECK_NUMBER c-src/emacs/src/lisp.h /^#define lisp_h_CHECK_NUMBER(x) CHECK_TYPE (INTEGER/ lisp_h_CHECK_SYMBOL c-src/emacs/src/lisp.h /^#define lisp_h_CHECK_SYMBOL(x) CHECK_TYPE (SYMBOLP/ lisp_h_CHECK_TYPE c-src/emacs/src/lisp.h /^#define lisp_h_CHECK_TYPE(ok, predicate, x) \\$/ lisp_h_CONSP c-src/emacs/src/lisp.h /^#define lisp_h_CONSP(x) (XTYPE (x) == Lisp_Cons)$/ -Lisp_help c-src/etags.c 591 lisp_h_EQ c-src/emacs/src/lisp.h /^#define lisp_h_EQ(x, y) (XLI (x) == XLI (y))$/ lisp_h_FLOATP c-src/emacs/src/lisp.h /^#define lisp_h_FLOATP(x) (XTYPE (x) == Lisp_Float)/ lisp_h_INTEGERP c-src/emacs/src/lisp.h /^#define lisp_h_INTEGERP(x) ((XTYPE (x) & (Lisp_Int/ -lisp_h_make_number c-src/emacs/src/lisp.h /^# define lisp_h_make_number(n) \\$/ lisp_h_MARKERP c-src/emacs/src/lisp.h /^#define lisp_h_MARKERP(x) (MISCP (x) && XMISCTYPE / -lisp_h_MISCP c-src/emacs/src/lisp.h /^#define lisp_h_MISCP(x) (XTYPE (x) == Lisp_Misc)$/ -lisp_h_NILP c-src/emacs/src/lisp.h /^#define lisp_h_NILP(x) EQ (x, Qnil)$/ -lisp_h_SET_SYMBOL_VAL c-src/emacs/src/lisp.h /^#define lisp_h_SET_SYMBOL_VAL(sym, v) \\$/ -lisp_h_SYMBOL_CONSTANT_P c-src/emacs/src/lisp.h /^#define lisp_h_SYMBOL_CONSTANT_P(sym) (XSYMBOL (sy/ -lisp_h_SYMBOLP c-src/emacs/src/lisp.h /^#define lisp_h_SYMBOLP(x) (XTYPE (x) == Lisp_Symbo/ -lisp_h_SYMBOL_VAL c-src/emacs/src/lisp.h /^#define lisp_h_SYMBOL_VAL(sym) \\$/ -lisp_h_VECTORLIKEP c-src/emacs/src/lisp.h /^#define lisp_h_VECTORLIKEP(x) (XTYPE (x) == Lisp_V/ -lisp_h_XCAR c-src/emacs/src/lisp.h /^#define lisp_h_XCAR(c) XCONS (c)->car$/ -lisp_h_XCDR c-src/emacs/src/lisp.h /^#define lisp_h_XCDR(c) XCONS (c)->u.cdr$/ -lisp_h_XCONS c-src/emacs/src/lisp.h /^#define lisp_h_XCONS(a) \\$/ -lisp_h_XFASTINT c-src/emacs/src/lisp.h /^# define lisp_h_XFASTINT(a) XINT (a)$/ -lisp_h_XHASH c-src/emacs/src/lisp.h /^#define lisp_h_XHASH(a) XUINT (a)$/ -lisp_h_XIL c-src/emacs/src/lisp.h /^# define lisp_h_XIL(i) (i)$/ -lisp_h_XIL c-src/emacs/src/lisp.h /^# define lisp_h_XIL(i) ((Lisp_Object) { i })$/ -lisp_h_XINT c-src/emacs/src/lisp.h /^# define lisp_h_XINT(a) (XLI (a) >> INTTYPEBITS)$/ -lisp_h_XLI c-src/emacs/src/lisp.h /^# define lisp_h_XLI(o) (o)$/ -lisp_h_XLI c-src/emacs/src/lisp.h /^# define lisp_h_XLI(o) ((o).i)$/ -lisp_h_XPNTR c-src/emacs/src/lisp.h /^#define lisp_h_XPNTR(a) \\$/ -lisp_h_XSYMBOL c-src/emacs/src/lisp.h /^# define lisp_h_XSYMBOL(a) \\$/ -lisp_h_XTYPE c-src/emacs/src/lisp.h /^# define lisp_h_XTYPE(a) ((enum Lisp_Type) (XLI (a/ -lisp_h_XUNTAG c-src/emacs/src/lisp.h /^# define lisp_h_XUNTAG(a, type) ((void *) (intptr_/ -LISP_INITIALLY c-src/emacs/src/lisp.h /^#define LISP_INITIALLY(i) (i)$/ -LISP_INITIALLY c-src/emacs/src/lisp.h /^#define LISP_INITIALLY(i) {i}$/ -LISP_INITIALLY_ZERO c-src/emacs/src/lisp.h 582 -Lisp_Int0 c-src/emacs/src/lisp.h 461 -Lisp_Int1 c-src/emacs/src/lisp.h 462 -Lisp_Intfwd c-src/emacs/src/lisp.h 2274 -Lisp_Kboard_Objfwd c-src/emacs/src/lisp.h 2362 -LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^#define LISP_MACRO_DEFUN(name, type, argdecls, arg/ -LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (CONSP, bool, (Lisp_Object x), (x/ -LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (NILP, bool, (Lisp_Object x), (x)/ -LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (SYMBOL_VAL, Lisp_Object, (struct/ -LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (XCAR, Lisp_Object, (Lisp_Object / -LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (XCONS, struct Lisp_Cons *, (Lisp/ -LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (XHASH, EMACS_INT, (Lisp_Object a/ -LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (XLI, EMACS_INT, (Lisp_Object o),/ -LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (XPNTR, void *, (Lisp_Object a), / -LISP_MACRO_DEFUN_VOID c-src/emacs/src/lisp.h /^#define LISP_MACRO_DEFUN_VOID(name, argdecls, args/ -LISP_MACRO_DEFUN_VOID c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN_VOID (CHECK_LIST_CONS, (Lisp_Obje/ -LISP_MACRO_DEFUN_VOID c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN_VOID (CHECK_TYPE,$/ -LISP_MACRO_DEFUN_VOID c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN_VOID (SET_SYMBOL_VAL,$/ -Lisp_Marker c-src/emacs/src/lisp.h 1978 -Lisp_Misc_Any c-src/emacs/src/lisp.h 1971 -Lisp_Misc c-src/emacs/src/lisp.h 2212 -Lisp_Misc c-src/emacs/src/lisp.h 458 -Lisp_Misc_Finalizer c-src/emacs/src/lisp.h 491 -Lisp_Misc_Float c-src/emacs/src/lisp.h 494 -Lisp_Misc_Free c-src/emacs/src/lisp.h 487 -Lisp_Misc_Limit c-src/emacs/src/lisp.h 496 -Lisp_Misc_Marker c-src/emacs/src/lisp.h 488 -Lisp_Misc_Overlay c-src/emacs/src/lisp.h 489 -Lisp_Misc_Save_Value c-src/emacs/src/lisp.h 490 -Lisp_Misc_Type c-src/emacs/src/lisp.h 485 -Lisp_Object c-src/emacs/src/lisp.h 567 -Lisp_Object c-src/emacs/src/lisp.h 577 -Lisp_Objfwd c-src/emacs/src/lisp.h 2294 -Lisp_Overlay c-src/emacs/src/lisp.h 2021 +lisp_h_MISCP c-src/emacs/src/lisp.h /^#define lisp_h_MISCP(x) (XTYPE (x) == Lisp_Misc)$/ +lisp_h_NILP c-src/emacs/src/lisp.h /^#define lisp_h_NILP(x) EQ (x, Qnil)$/ +lisp_h_SET_SYMBOL_VAL c-src/emacs/src/lisp.h /^#define lisp_h_SET_SYMBOL_VAL(sym, v) \\$/ +lisp_h_SYMBOLP c-src/emacs/src/lisp.h /^#define lisp_h_SYMBOLP(x) (XTYPE (x) == Lisp_Symbo/ +lisp_h_SYMBOL_CONSTANT_P c-src/emacs/src/lisp.h /^#define lisp_h_SYMBOL_CONSTANT_P(sym) (XSYMBOL (sy/ +lisp_h_SYMBOL_VAL c-src/emacs/src/lisp.h /^#define lisp_h_SYMBOL_VAL(sym) \\$/ +lisp_h_VECTORLIKEP c-src/emacs/src/lisp.h /^#define lisp_h_VECTORLIKEP(x) (XTYPE (x) == Lisp_V/ +lisp_h_XCAR c-src/emacs/src/lisp.h /^#define lisp_h_XCAR(c) XCONS (c)->car$/ +lisp_h_XCDR c-src/emacs/src/lisp.h /^#define lisp_h_XCDR(c) XCONS (c)->u.cdr$/ +lisp_h_XCONS c-src/emacs/src/lisp.h /^#define lisp_h_XCONS(a) \\$/ +lisp_h_XFASTINT c-src/emacs/src/lisp.h /^# define lisp_h_XFASTINT(a) XINT (a)$/ +lisp_h_XHASH c-src/emacs/src/lisp.h /^#define lisp_h_XHASH(a) XUINT (a)$/ +lisp_h_XIL c-src/emacs/src/lisp.h /^# define lisp_h_XIL(i) ((Lisp_Object) { i })$/ +lisp_h_XIL c-src/emacs/src/lisp.h /^# define lisp_h_XIL(i) (i)$/ +lisp_h_XINT c-src/emacs/src/lisp.h /^# define lisp_h_XINT(a) (XLI (a) >> INTTYPEBITS)$/ +lisp_h_XLI c-src/emacs/src/lisp.h /^# define lisp_h_XLI(o) ((o).i)$/ +lisp_h_XLI c-src/emacs/src/lisp.h /^# define lisp_h_XLI(o) (o)$/ +lisp_h_XPNTR c-src/emacs/src/lisp.h /^#define lisp_h_XPNTR(a) \\$/ +lisp_h_XSYMBOL c-src/emacs/src/lisp.h /^# define lisp_h_XSYMBOL(a) \\$/ +lisp_h_XTYPE c-src/emacs/src/lisp.h /^# define lisp_h_XTYPE(a) ((enum Lisp_Type) (XLI (a/ +lisp_h_XUNTAG c-src/emacs/src/lisp.h /^# define lisp_h_XUNTAG(a, type) ((void *) (intptr_/ +lisp_h_check_cons_list c-src/emacs/src/lisp.h /^# define lisp_h_check_cons_list() ((void) 0)$/ +lisp_h_make_number c-src/emacs/src/lisp.h /^# define lisp_h_make_number(n) \\$/ lisppar tex-src/texinfo.tex /^\\gdef\\lisppar{\\null\\endgraf}}$/ -Lisp_Save_Type c-src/emacs/src/lisp.h 2064 -Lisp_Save_Value c-src/emacs/src/lisp.h 2110 -Lisp_String c-src/emacs/src/lisp.h 466 -Lisp_Sub_Char_Table c-src/emacs/src/lisp.h 1606 -Lisp_Subr c-src/emacs/src/lisp.h 1670 -Lisp_suffixes c-src/etags.c 589 -Lisp_Symbol c-src/emacs/src/lisp.h 454 -Lisp_Symbol c-src/emacs/src/lisp.h 654 -lisp tex-src/texinfo.tex /^\\def\\lisp{\\aboveenvbreak$/ -Lisp_Type c-src/emacs/src/lisp.h 451 -Lisp_Vector c-src/emacs/src/lisp.h 1369 -Lisp_Vectorlike c-src/emacs/src/lisp.h 472 lispy_accent_codes c-src/emacs/src/keyboard.c 4634 lispy_accent_keys c-src/emacs/src/keyboard.c 4741 lispy_drag_n_drop_names c-src/emacs/src/keyboard.c 5181 @@ -2293,110 +3210,50 @@ lispy_kana_keys c-src/emacs/src/keyboard.c 5026 lispy_modifier_list c-src/emacs/src/keyboard.c /^lispy_modifier_list (int modifiers)$/ lispy_multimedia_keys c-src/emacs/src/keyboard.c 4962 lispy_wheel_names c-src/emacs/src/keyboard.c 5174 -list2i c-src/emacs/src/lisp.h /^list2i (EMACS_INT x, EMACS_INT y)$/ -list3i c-src/emacs/src/lisp.h /^list3i (EMACS_INT x, EMACS_INT y, EMACS_INT w)$/ -list4i c-src/emacs/src/lisp.h /^list4i (EMACS_INT x, EMACS_INT y, EMACS_INT w, EMA/ -LISTCONTENTSBUTTON objc-src/PackInsp.m 48 -LISTCONTENTS objc-src/PackInsp.m 39 list c-src/emacs/src/gmalloc.c 186 -LISTDESCRIPTIONBUTTON objc-src/PackInsp.m 49 -ListEdit pyt-src/server.py /^class ListEdit(Frame):$/ list merc-src/accumulator.m /^:- import_module list.$/ list-tags el-src/emacs/lisp/progmodes/etags.el /^(defun list-tags (file &optional _next-match)$/ list-tags-function el-src/emacs/lisp/progmodes/etags.el /^(defvar list-tags-function nil$/ +list2i c-src/emacs/src/lisp.h /^list2i (EMACS_INT x, EMACS_INT y)$/ +list3i c-src/emacs/src/lisp.h /^list3i (EMACS_INT x, EMACS_INT y, EMACS_INT w)$/ +list4i c-src/emacs/src/lisp.h /^list4i (EMACS_INT x, EMACS_INT y, EMACS_INT w, EMA/ list_to_ord_set prol-src/ordsets.prolog /^list_to_ord_set(List, Set) :-$/ -li tex-src/texinfo.tex /^\\let\\li = \\sf % Sometimes we call it \\li, not \\sf./ -LL_Assert/p ada-src/2ataspri.adb /^ procedure LL_Assert (B : Boolean; M : String) i/ -LL_Assert/p ada-src/2ataspri.ads /^ procedure LL_Assert (B : Boolean; M : String);$/ -L_LE y-src/parse.c 25 -LL_Task_Procedure_Access/t ada-src/2ataspri.ads /^ type LL_Task_Procedure_Access is access procedu/ -LL_Task_Procedure_Access/t ada-src/etags-test-for.ada /^ type LL_Task_Procedure_Access is access procedu/ -LL_Wrapper/p ada-src/2ataspri.adb /^ procedure LL_Wrapper (T : TCB_Ptr);$/ -LL_Wrapper/p ada-src/2ataspri.adb /^ procedure LL_Wrapper (T : TCB_Ptr) is$/ -LL_Wrapper/p ada-src/etags-test-for.ada /^ procedure LL_Wrapper (T : TCB_Ptr);$/ -L_NE y-src/parse.c 26 lno c-src/etags.c 223 -/lnormalize ps-src/rfc1245.ps /^\/lnormalize { $/ +load objc-src/PackInsp.m /^-load$/ loadContentsOf objc-src/PackInsp.m /^-loadContentsOf:(const char *)type inTable:(HashTa/ loadImage objc-src/PackInsp.m /^-loadImage$/ loadKeyValuesFrom objc-src/PackInsp.m /^-loadKeyValuesFrom:(const char *)type inTable:(Has/ -load objc-src/PackInsp.m /^-load$/ loadPORManager php-src/lce_functions.php /^ function &loadPORManager()$/ local_if_set c-src/emacs/src/lisp.h 2338 -LOCALIZE_ARCH objc-src/PackInsp.m /^#define LOCALIZE_ARCH(s) NXLoadLocalizedStringFrom/ -LOCALIZE objc-src/PackInsp.m /^#define LOCALIZE(s) NXLoadLocalizedStringFromTabl/ -Locate pas-src/common.pas /^function Locate; (*($/ -location cp-src/clheir.hpp 33 location cp-src/clheir.hpp /^ location() { }$/ -LOCK_ALIGNED_BLOCKS c-src/emacs/src/gmalloc.c /^#define LOCK_ALIGNED_BLOCKS() \\$/ -LOCK_ALIGNED_BLOCKS c-src/emacs/src/gmalloc.c /^#define LOCK_ALIGNED_BLOCKS()$/ -LOCK c-src/emacs/src/gmalloc.c /^#define LOCK() \\$/ -LOCK c-src/emacs/src/gmalloc.c /^#define LOCK()$/ -Lock/t ada-src/2ataspri.ads /^ type Lock is$/ -Lock/t ada-src/2ataspri.ads /^ type Lock is private;$/ +location cp-src/clheir.hpp 33 loggingall tex-src/texinfo.tex /^\\def\\loggingall{\\tracingcommands2 \\tracingstats2 $/ -LONG_TYPE_SIZE y-src/cccp.y 95 -LOOKING_AT c-src/etags.c /^#define LOOKING_AT(cp, kw) \/* kw is the keyword, / -LOOKING_AT_NOCASE c-src/etags.c /^#define LOOKING_AT_NOCASE(cp, kw) \/* the keyword i/ look tex-src/texinfo.tex /^\\def\\kbd#1{\\def\\look{#1}\\expandafter\\kbdfoo\\look??/ -lookup_call merc-src/accumulator.m /^:- pred lookup_call(accu_goal_store::in, accu_goal/ -LOOKUP objc-src/PackInsp.m 176 -LOOKUP objc-src/PackInsp.m /^#define LOOKUP(key, notfound) ([table isKey:key] ?/ lookup y-src/cccp.y /^lookup (name, len, hash)$/ -LOOP_ON_INPUT_LINES c-src/etags.c /^#define LOOP_ON_INPUT_LINES(file_pointer, line_buf/ +lookup_call merc-src/accumulator.m /^:- pred lookup_call(accu_goal_store::in, accu_goal/ losespace tex-src/texinfo.tex /^\\def\\losespace #1{#1}$/ lowcase c-src/etags.c /^#define lowcase(c) tolower (CHAR (c))$/ lowercaseenumerate tex-src/texinfo.tex /^\\def\\lowercaseenumerate{%$/ -LowerCaseNmStr pas-src/common.pas /^function LowerCaseNmStr; (*($/ -/L ps-src/rfc1245.ps /^\/L { $/ -/L ps-src/rfc1245.ps /^\/L \/M \/N \/O \/P \/Q \/R \/S \/T \/U \/V \/W \/X \/Y \/Z \/brac/ -L_RANGE y-src/parse.c 11 -LSH y-src/cccp.c 16 -l tex-src/texinfo.tex /^\\def\\l#1{{\\li #1}\\null} % $/ -l tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ -L tex-src/texinfo.tex /^\\let\\L=\\ptexL$/ -LTGT cp-src/MDiagArray2.h 144 -LTGT cp-src/MDiagArray2.h 35 -LTGT cp-src/MDiagArray2.h 39 -LTGT cp-src/MDiagArray2.h 42 -Lua_functions c-src/etags.c /^Lua_functions (FILE *inf)$/ -Lua_help c-src/etags.c 600 -LUASRC make-src/Makefile /^LUASRC=allegro.lua$/ -Lua_suffixes c-src/etags.c 598 lucid_event_type_list_p c-src/emacs/src/keyboard.c /^lucid_event_type_list_p (Lisp_Object object)$/ -L_VAR y-src/parse.c 12 lvvmode tex-src/texinfo.tex /^\\def\\lvvmode{\\vbox to 0pt{}}$/ mabort c-src/emacs/src/gmalloc.c /^mabort (enum mcheck_status status)$/ -macheader tex-src/texinfo.tex /^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/ mach_host_self c-src/machsyscalls.h /^SYSCALL (mach_host_self, -29,$/ -Machine_Exceptions/t ada-src/2ataspri.ads /^ type Machine_Exceptions is new Interfaces.C.POS/ -Machin_T/b ada-src/waroquiers.ada /^ protected body Machin_T is$/ -Machin_T/t ada-src/etags-test-for.ada /^ protected Machin_T is$/ -Machin_T/t ada-src/etags-test-for.ada /^ protected type Machin_T is$/ -Machin_T/t ada-src/waroquiers.ada /^ protected type Machin_T is$/ mach_msg_trap c-src/machsyscalls.h /^SYSCALL (mach_msg_trap, -25,$/ mach_reply_port c-src/machsyscalls.h /^SYSCALL (mach_reply_port, -26,$/ mach_task_self c-src/machsyscalls.h /^SYSCALL (mach_task_self, -28,$/ mach_thread_self c-src/machsyscalls.h /^SYSCALL (mach_thread_self, -27,$/ +macheader tex-src/texinfo.tex /^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/ macx\defmacheader tex-src/texinfo.tex /^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/ -MAGENTA cp-src/screen.hpp 17 -MAGICBYTE c-src/emacs/src/gmalloc.c 1861 magic c-src/emacs/src/gmalloc.c 1868 -MAGICFREE c-src/emacs/src/gmalloc.c 1860 -MAGICWORD c-src/emacs/src/gmalloc.c 1859 mainmagstep tex-src/texinfo.tex /^\\let\\mainmagstep=\\magstep1$/ mainmagstep tex-src/texinfo.tex /^\\let\\mainmagstep=\\magstephalf$/ maintaining.info make-src/Makefile /^maintaining.info: maintaining.texi$/ majorheading tex-src/texinfo.tex /^\\def\\majorheading{\\parsearg\\majorheadingzzz}$/ majorheadingzzz tex-src/texinfo.tex /^\\def\\majorheadingzzz #1{%$/ make-abbrev-table c-src/abbrev.c /^DEFUN ("make-abbrev-table", Fmake_abbrev_table, Sm/ -make_coor prol-src/natded.prolog /^make_coor(s(_),Alpha,Sem1,Sem2,Alpha@Sem1@Sem2).$/ make_C_tag c-src/etags.c /^make_C_tag (bool isfun)$/ +make_coor prol-src/natded.prolog /^make_coor(s(_),Alpha,Sem1,Sem2,Alpha@Sem1@Sem2).$/ make_ctrl_char c-src/emacs/src/keyboard.c /^make_ctrl_char (int c)$/ -MakeDispose pyt-src/server.py /^ def MakeDispose(self):$/ -Makefile_filenames c-src/etags.c 603 -Makefile_help c-src/etags.c 605 -Makefile_targets c-src/etags.c /^Makefile_targets (FILE *inf)$/ make_fixnum_or_float c-src/emacs/src/lisp.h /^#define make_fixnum_or_float(val) \\$/ make_formatted_string c-src/emacs/src/lisp.h /^extern Lisp_Object make_formatted_string (char *, / make_lisp_ptr c-src/emacs/src/lisp.h /^make_lisp_ptr (void *ptr, enum Lisp_Type type)$/ @@ -2407,182 +3264,108 @@ make_lispy_focus_out c-src/emacs/src/keyboard.c /^make_lispy_focus_out (Lisp_Obj make_lispy_movement c-src/emacs/src/keyboard.c /^make_lispy_movement (struct frame *frame, Lisp_Obj/ make_lispy_position c-src/emacs/src/keyboard.c /^make_lispy_position (struct frame *f, Lisp_Object / make_lispy_switch_frame c-src/emacs/src/keyboard.c /^make_lispy_switch_frame (Lisp_Object frame)$/ -MAKE make-src/Makefile /^MAKE:=$(MAKE) --no-print-directory$/ make_number c-src/emacs/src/lisp.h /^# define make_number(n) lisp_h_make_number (n)$/ make_pointer_integer c-src/emacs/src/lisp.h /^make_pointer_integer (void *p)$/ make_scroll_bar_position c-src/emacs/src/keyboard.c /^make_scroll_bar_position (struct input_event *ev, / -MakeSitelist pyt-src/server.py /^ def MakeSitelist(self, master):$/ -MAKESRC make-src/Makefile /^MAKESRC=Makefile$/ make_tag c-src/etags.c /^make_tag (const char *name, \/* tag name, or NULL / make_uninit_sub_char_table c-src/emacs/src/lisp.h /^make_uninit_sub_char_table (int depth, int min_cha/ make_uninit_vector c-src/emacs/src/lisp.h /^make_uninit_vector (ptrdiff_t size)$/ -malloc_atfork_handler_child c-src/emacs/src/gmalloc.c /^malloc_atfork_handler_child (void)$/ -malloc_atfork_handler_parent c-src/emacs/src/gmalloc.c /^malloc_atfork_handler_parent (void)$/ -malloc_atfork_handler_prepare c-src/emacs/src/gmalloc.c /^malloc_atfork_handler_prepare (void)$/ +malloc c-src/emacs/src/gmalloc.c /^extern void *malloc (size_t size) ATTRIBUTE_MALLOC/ +malloc c-src/emacs/src/gmalloc.c /^malloc (size_t size)$/ malloc c-src/emacs/src/gmalloc.c 1719 malloc c-src/emacs/src/gmalloc.c 64 malloc c-src/emacs/src/gmalloc.c 68 -malloc c-src/emacs/src/gmalloc.c /^extern void *malloc (size_t size) ATTRIBUTE_MALLOC/ -_malloc c-src/emacs/src/gmalloc.c /^_malloc (size_t size)$/ -malloc c-src/emacs/src/gmalloc.c /^malloc (size_t size)$/ +malloc_atfork_handler_child c-src/emacs/src/gmalloc.c /^malloc_atfork_handler_child (void)$/ +malloc_atfork_handler_parent c-src/emacs/src/gmalloc.c /^malloc_atfork_handler_parent (void)$/ +malloc_atfork_handler_prepare c-src/emacs/src/gmalloc.c /^malloc_atfork_handler_prepare (void)$/ malloc_enable_thread c-src/emacs/src/gmalloc.c /^malloc_enable_thread (void)$/ -__malloc_extra_blocks c-src/emacs/src/gmalloc.c 382 -MALLOCFLOOD c-src/emacs/src/gmalloc.c 1862 -mallochook c-src/emacs/src/gmalloc.c /^mallochook (size_t size)$/ malloc_info c-src/emacs/src/gmalloc.c 167 malloc_initialize_1 c-src/emacs/src/gmalloc.c /^malloc_initialize_1 (void)$/ -__malloc_initialize c-src/emacs/src/gmalloc.c /^__malloc_initialize (void)$/ -__malloc_initialized c-src/emacs/src/gmalloc.c 380 -_malloc_internal c-src/emacs/src/gmalloc.c /^_malloc_internal (size_t size)$/ -_malloc_internal_nolock c-src/emacs/src/gmalloc.c /^_malloc_internal_nolock (size_t size)$/ -_malloc_mutex c-src/emacs/src/gmalloc.c 518 -_malloc_thread_enabled_p c-src/emacs/src/gmalloc.c 520 +mallochook c-src/emacs/src/gmalloc.c /^mallochook (size_t size)$/ man manpage make-src/Makefile /^man manpage: etags.1.man$/ -/manualpapersize ps-src/rfc1245.ps /^\/manualpapersize {$/ -MANY c-src/emacs/src/lisp.h 2833 mao c-src/h.h 101 map c-src/emacs/src/keyboard.c 8748 map merc-src/accumulator.m /^:- import_module map.$/ +map_word prol-src/natded.prolog /^map_word([[_]|Ws],Exp):-$/ mapping html-src/algrthms.html /^Mapping the Channel Symbols$/ mapsyn prol-src/natded.prolog /^mapsyn(A\/B,AM\/BM):-$/ -map_word prol-src/natded.prolog /^map_word([[_]|Ws],Exp):-$/ -MARKERP c-src/emacs/src/lisp.h /^# define MARKERP(x) lisp_h_MARKERP (x)$/ mark_kboards c-src/emacs/src/keyboard.c /^mark_kboards (void)$/ math tex-src/texinfo.tex /^\\def\\math#1{\\implicitmath #1\\implicitmath}$/ -MAX_ALLOCA c-src/emacs/src/lisp.h 4556 -max_args c-src/emacs/src/lisp.h 1686 -maxargs c-src/emacs/src/lisp.h 2831 +max c-src/emacs/src/lisp.h /^#define max(a, b) ((a) > (b) ? (a) : (b))$/ +max c-src/emacs/src/lisp.h 58 max c.c /^__attribute__ ((always_inline)) max (int a, int b)/ max c.c /^max (int a, int b)$/ max cp-src/conway.cpp /^#define max(x,y) ((x > y) ? x : y)$/ -max c-src/emacs/src/lisp.h 58 -max c-src/emacs/src/lisp.h /^#define max(a, b) ((a) > (b) ? (a) : (b))$/ -MAX_ENCODED_BYTES c-src/emacs/src/keyboard.c 2254 -MAX_HASH_VALUE c-src/etags.c 2329 +max_args c-src/emacs/src/lisp.h 1686 max_num_directions cp-src/clheir.hpp 31 max_num_generic_objects cp-src/clheir.cpp 9 -MAXPATHLEN c-src/etags.c 115 -/max ps-src/rfc1245.ps /^\/max {2 copy lt {exch} if pop} bind def$/ -MAX_WORD_LENGTH c-src/etags.c 2327 -maybe_gc c-src/emacs/src/lisp.h /^maybe_gc (void)$/ +maxargs c-src/emacs/src/lisp.h 2831 maybe merc-src/accumulator.m /^:- import_module maybe.$/ -MAYBEREL y-src/parse.y /^#define MAYBEREL(p) (*(p)=='[' && (isdigit((p)[1])/ -MBYTES objc-src/PackInsp.m 59 -Mcccp y-src/cccp.y /^main ()$/ -Mc cp-src/c.C /^int main (void) { my_function0(0); my_function1(1)/ +maybe_gc c-src/emacs/src/lisp.h /^maybe_gc (void)$/ mcCSC cp-src/c.C 6 mcheck c-src/emacs/src/gmalloc.c /^mcheck (void (*func) (enum mcheck_status))$/ -MCHECK_DISABLED c-src/emacs/src/gmalloc.c 285 -MCHECK_FREE c-src/emacs/src/gmalloc.c 287 -MCHECK_HEAD c-src/emacs/src/gmalloc.c 288 -MCHECK_OK c-src/emacs/src/gmalloc.c 286 mcheck_status c-src/emacs/src/gmalloc.c 283 -MCHECK_TAIL c-src/emacs/src/gmalloc.c 289 mcheck_used c-src/emacs/src/gmalloc.c 2017 -Mconway.cpp cp-src/conway.cpp /^void main(void)$/ mdbcomp merc-src/accumulator.m /^:- import_module mdbcomp.$/ -MDiagArray2 cp-src/MDiagArray2.h 78 -MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (const Array& a) : DiagArray2 / -MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (const DiagArray2& a) : DiagArray/ -MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (const MDiagArray2& a) : DiagArra/ -MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (int r, int c, const T& val) : DiagA/ -MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (int r, int c) : DiagArray2 (r, c/ -MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (T *d, int r, int c) : DiagArray2/ -~MDiagArray2 cp-src/MDiagArray2.h /^ ~MDiagArray2 (void) { }$/ -MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (void) : DiagArray2 () { }$/ -me_22a lua-src/test.lua /^ function test.me_22a(one, two)$/ me22b lua-src/test.lua /^ local function test.me22b (one)$/ +me_22a lua-src/test.lua /^ function test.me_22a(one, two)$/ memalign c-src/emacs/src/gmalloc.c /^memalign (size_t alignment, size_t size)$/ -member_lessthan_goalid merc-src/accumulator.m /^:- pred member_lessthan_goalid(accu_goal_store::in/ member prol-src/natded.prolog /^member(X,[X|_]).$/ +member_lessthan_goalid merc-src/accumulator.m /^:- pred member_lessthan_goalid(accu_goal_store::in/ memclear c-src/emacs/src/lisp.h /^memclear (void *p, ptrdiff_t nbytes)$/ +menu tex-src/texinfo.tex /^\\long\\def\\menu #1\\end menu{}$/ menu_bar_item c-src/emacs/src/keyboard.c /^menu_bar_item (Lisp_Object key, Lisp_Object item, / menu_bar_items c-src/emacs/src/keyboard.c /^menu_bar_items (Lisp_Object old)$/ menu_bar_items_index c-src/emacs/src/keyboard.c 7369 menu_bar_items_vector c-src/emacs/src/keyboard.c 7368 menu_bar_one_keymap_changed_items c-src/emacs/src/keyboard.c 7363 -menu_item_eval_property_1 c-src/emacs/src/keyboard.c /^menu_item_eval_property_1 (Lisp_Object arg)$/ menu_item_eval_property c-src/emacs/src/keyboard.c /^menu_item_eval_property (Lisp_Object sexpr)$/ +menu_item_eval_property_1 c-src/emacs/src/keyboard.c /^menu_item_eval_property_1 (Lisp_Object arg)$/ menu_separator_name_p c-src/emacs/src/keyboard.c /^menu_separator_name_p (const char *label)$/ -menu tex-src/texinfo.tex /^\\long\\def\\menu #1\\end menu{}$/ -Metags c-src/etags.c /^main (int argc, char **argv)$/ metasource c-src/etags.c 198 methodheader tex-src/texinfo.tex /^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/ methodx\defmethodheader tex-src/texinfo.tex /^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/ methparsebody\Edeffn tex-src/texinfo.tex /^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/ methparsebody\Edefmethod tex-src/texinfo.tex /^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/ methparsebody\Edeftypefn tex-src/texinfo.tex /^\\def\\deftypefn{\\defmethparsebody\\Edeftypefn\\deftyp/ -Mfail cp-src/fail.C /^main()$/ -min_args c-src/emacs/src/lisp.h 1686 -min_char c-src/emacs/src/lisp.h 1621 -min cp-src/conway.cpp /^#define min(x,y) ((x > y) ? y : x)$/ min c-src/emacs/src/gmalloc.c /^#define min(a, b) ((a) < (b) ? (a) : (b))$/ -min c-src/emacs/src/lisp.h 57 min c-src/emacs/src/lisp.h /^#define min(a, b) ((a) < (b) ? (a) : (b))$/ -MIN_HASH_VALUE c-src/etags.c 2328 -/min ps-src/rfc1245.ps /^\/min {2 copy gt {exch} if pop} bind def$/ +min c-src/emacs/src/lisp.h 57 +min cp-src/conway.cpp /^#define min(x,y) ((x > y) ? y : x)$/ +min_args c-src/emacs/src/lisp.h 1686 +min_char c-src/emacs/src/lisp.h 1621 minus cp-src/functions.cpp /^void Date::minus ( int days , int month , int year/ minus tex-src/texinfo.tex /^\\def\\minus{$-$}$/ -MIN_WORD_LENGTH c-src/etags.c 2326 -MISCP c-src/emacs/src/lisp.h /^# define MISCP(x) lisp_h_MISCP (x)$/ miti html-src/softwarelibero.html /^Sfatiamo alcuni miti$/ -Mkai-test.pl perl-src/kai-test.pl /^package main;$/ modifier_names c-src/emacs/src/keyboard.c 6319 modifier_symbols c-src/emacs/src/keyboard.c 6327 modify_event_symbol c-src/emacs/src/keyboard.c /^modify_event_symbol (ptrdiff_t symbol_num, int mod/ module_class_method ruby-src/test.rb /^ def ModuleExample.module_class_method$/ -ModuleExample ruby-src/test.rb /^module ModuleExample$/ module_instance_method ruby-src/test.rb /^ def module_instance_method$/ +more= ruby-src/test1.ru /^ :more$/ more_aligned_int c.c 165 morecore_nolock c-src/emacs/src/gmalloc.c /^morecore_nolock (size_t size)$/ morecore_recursing c-src/emacs/src/gmalloc.c 605 -More_Lisp_Bits c-src/emacs/src/lisp.h 801 -more= ruby-src/test1.ru /^ :more$/ -MOST_NEGATIVE_FIXNUM c-src/emacs/src/lisp.h 835 -MOST_POSITIVE_FIXNUM c-src/emacs/src/lisp.h 834 mouse_syms c-src/emacs/src/keyboard.c 4627 move cp-src/clheir.cpp /^void agent::move(int direction)$/ -MOVE c-src/sysdep.h /^#define MOVE(x,y) movl x, y$/ -MoveLayerAfter lua-src/allegro.lua /^function MoveLayerAfter (this_one)$/ -MoveLayerBefore lua-src/allegro.lua /^function MoveLayerBefore (this_one)$/ -MoveLayerBottom lua-src/allegro.lua /^function MoveLayerBottom ()$/ -MoveLayerTop lua-src/allegro.lua /^function MoveLayerTop ()$/ mprobe c-src/emacs/src/gmalloc.c /^mprobe (void *ptr)$/ -/M ps-src/rfc1245.ps /^\/M {newpath moveto} bind def$/ -M ruby-src/test1.ru /^module A::M; end$/ -MSDOS c-src/etags.c 100 -MSDOS c-src/etags.c 106 -MSDOS c-src/etags.c 107 -MSDOS c-src/etags.c 110 msgid php-src/lce_functions.php /^ function msgid($line, $class)$/ -MSGSEL f-src/entry.for /^ ENTRY MSGSEL ( TYPE )$/ -MSGSEL f-src/entry.strange /^ ENTRY MSGSEL ( TYPE )$/ -MSGSEL f-src/entry.strange_suffix /^ ENTRY MSGSEL ( TYPE )$/ msgstr php-src/lce_functions.php /^ function msgstr($line, $class)$/ -/ms ps-src/rfc1245.ps /^\/ms { $/ mstats c-src/emacs/src/gmalloc.c 308 -Mtest1.go go-src/test1.go 1 -Mtest1.go go-src/test1.go /^func main() {$/ -Mtest.go go-src/test.go 1 -Mtest.go go-src/test.go /^func main() {$/ -Mtest.rs rs-src/test.rs /^fn main() {$/ -mtg html-src/software.html /^MTG$/ mt prol-src/natded.prolog /^mt:-$/ -multibyte c-src/emacs/src/regex.h 403 -MULTI_LETTER_MOD c-src/emacs/src/keyboard.c 6231 -MULTI_LETTER_MOD c-src/emacs/src/keyboard.c 6764 -MULTI_LETTER_MOD c-src/emacs/src/keyboard.c /^#define MULTI_LETTER_MOD(BIT, NAME, LEN) \\$/ -MULTI_LETTER_MOD c-src/emacs/src/keyboard.c /^#define MULTI_LETTER_MOD(BIT, NAME, LEN) \\$/ +mtg html-src/software.html /^MTG$/ multi_line c-src/etags.c 267 -Mx.cc cp-src/x.cc /^main(int argc, char *argv[])$/ -mylbrace tex-src/texinfo.tex /^\\def\\mylbrace {{\\tt \\char '173}}$/ -mypi forth-src/test-forth.fth /^synonym mypi fconst$/ +multibyte c-src/emacs/src/regex.h 403 my_printf c.c /^my_printf (void *my_object, const char *my_format,/ -myrbrace tex-src/texinfo.tex /^\\def\\myrbrace {{\\tt \\char '175}}$/ -my_struct c.c 226 my_struct c-src/h.h 91 -my_typedef c.c 228 +my_struct c.c 226 my_typedef c-src/h.h 93 +my_typedef c.c 228 +mylbrace tex-src/texinfo.tex /^\\def\\mylbrace {{\\tt \\char '173}}$/ +mypi forth-src/test-forth.fth /^synonym mypi fconst$/ +myrbrace tex-src/texinfo.tex /^\\def\\myrbrace {{\\tt \\char '175}}$/ +n c-src/exit.c 28 +n c-src/exit.strange_suffix 28 name c-src/emacs/src/keyboard.c 7241 name c-src/emacs/src/lisp.h 1808 name c-src/emacs/src/lisp.h 3144 @@ -2593,11 +3376,7 @@ name c-src/etags.c 2271 name c-src/etags.c 261 name c-src/getopt.h 76 name c-src/getopt.h 78 -named c-src/etags.c 2505 -NameHasChar pas-src/common.pas /^function NameHasChar; (* (TheName : NameString; Th/ name perl-src/htlmify-cystic 357 -namestringequal pas-src/common.pas /^function namestringequal;(*(var Name1,Name2 : Name/ -NameStringLess pas-src/common.pas /^function NameStringLess;(*(var Name1,Name2 : NameS/ name tex-src/texinfo.tex /^\\begingroup\\defname {#1}{Function}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {#1}{Macro}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {#1}{Special Form}%$/ @@ -2606,48 +3385,36 @@ name tex-src/texinfo.tex /^\\begingroup\\defname {#1}{Variable}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{#1}\\deftpargs{#3}\\endgrou/ name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{#1}\\defunargs{#3}\\endgrou/ name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{#1}\\defvarargs{#3}\\endgro/ -name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{\\defcvtype{} of #1}%$/ -name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{\\defoptype{} on #1}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{Instance Variable of #1}%/ name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{Method on #1}%$/ +name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{\\defcvtype{} of #1}%$/ +name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{\\defoptype{} on #1}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {\\code{#1} #2}{Function}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {\\code{#1} #2}{Variable}%$/ -name tex-src/texinfo.tex /^\\begingroup\\defname {\\code{#2} #3}{#1}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {\\code{#2} #3}{#1}$/ +name tex-src/texinfo.tex /^\\begingroup\\defname {\\code{#2} #3}{#1}%$/ name tex-src/texinfo.tex /^\\def\\singlecodeindexer #1{\\doind{\\indexname}{\\code/ name tex-src/texinfo.tex /^\\def\\singleindexer #1{\\doind{\\indexname}{#1}}$/ -NAME y-src/cccp.c 8 name y-src/cccp.y 113 name y-src/cccp.y 43 +named c-src/etags.c 2505 +namestringequal pas-src/common.pas /^function namestringequal;(*(var Name1,Name2 : Name/ nargs c-src/emacs/src/lisp.h 2987 -NATNUMP c-src/emacs/src/lisp.h /^NATNUMP (Lisp_Object x)$/ -/nbluet ps-src/rfc1245.ps /^\/nbluet 256 array def$/ -n c-src/exit.c 28 -n c-src/exit.strange_suffix 28 -NDEBUG c-src/etags.c 88 -need_adjustment c-src/emacs/src/lisp.h 1986 need tex-src/texinfo.tex /^\\def\\need{\\parsearg\\needx}$/ +need_adjustment c-src/emacs/src/lisp.h 1986 needx tex-src/texinfo.tex /^\\def\\needx#1{%$/ -NEG y-src/parse.c 9 neighbors cp-src/clheir.hpp 59 nelem cp-src/Range.h /^ int nelem (void) const { return rng_nelem; }$/ nestlev c-src/etags.c 2525 +new objc-src/PackInsp.m /^+new$/ +new perl-src/htlmify-cystic 163 +new_tag perl-src/htlmify-cystic 18 newcodeindex tex-src/texinfo.tex /^\\def\\newcodeindex #1{$/ newindex tex-src/texinfo.tex /^\\def\\newindex #1{$/ -NewLayer lua-src/allegro.lua /^function NewLayer (name, x, y, w, h)$/ -NewLayerSet lua-src/allegro.lua /^function NewLayerSet (name)$/ newlb c-src/etags.c 2930 newlinepos c-src/etags.c 2932 -NewNameString pas-src/common.pas /^procedure NewNameString; (* (var NSP: NameStringPo/ -new objc-src/PackInsp.m /^+new$/ -new perl-src/htlmify-cystic 163 -new_tag perl-src/htlmify-cystic 18 newtextstring pas-src/common.pas /^function newtextstring; (*: TextString;*)$/ newwrite tex-src/texinfo.tex /^\\gdef\\newwrite{\\alloc@7\\write\\chardef\\sixt@@n}}$/ -next_alive cp-src/conway.hpp 7 -next_almost_prime c-src/emacs/src/lisp.h /^extern EMACS_INT next_almost_prime (EMACS_INT) ATT/ -NEXT_ALMOST_PRIME_LIMIT c-src/emacs/src/lisp.h 3573 -next c.c 174 next c-src/emacs/src/gmalloc.c 164 next c-src/emacs/src/gmalloc.c 188 next c-src/emacs/src/gmalloc.c 198 @@ -2661,52 +3428,51 @@ next c-src/emacs/src/lisp.h 3028 next c-src/emacs/src/lisp.h 3134 next c-src/emacs/src/lisp.h 700 next c-src/etags.c 203 -next-file el-src/emacs/lisp/progmodes/etags.el /^(defun next-file (&optional initialize novisit)$/ -next-file-list el-src/emacs/lisp/progmodes/etags.el /^(defvar next-file-list nil$/ -next_free c-src/emacs/src/lisp.h 1851 -nextfree c-src/emacs/src/lisp.h 3029 +next c.c 174 next tex-src/texinfo.tex /^\\def\\flushcr{\\ifx\\par\\lisppar \\def\\next##1{}\\else / next tex-src/texinfo.tex /^\\def\\next##1{}\\next}$/ next tex-src/texinfo.tex /^\\def\\parsearg #1{\\let\\next=#1\\begingroup\\obeylines/ next tex-src/texinfo.tex /^\\edef\\next{\\write\\auxfile{\\internalsetq {#1}{#2}}}/ -next_weak c-src/emacs/src/lisp.h 1875 next y-src/cccp.y 42 -NE y-src/parse.c 6 +next-file el-src/emacs/lisp/progmodes/etags.el /^(defun next-file (&optional initialize novisit)$/ +next-file-list el-src/emacs/lisp/progmodes/etags.el /^(defvar next-file-list nil$/ +next_alive cp-src/conway.hpp 7 +next_almost_prime c-src/emacs/src/lisp.h /^extern EMACS_INT next_almost_prime (EMACS_INT) ATT/ +next_free c-src/emacs/src/lisp.h 1851 +next_weak c-src/emacs/src/lisp.h 1875 +nextfree c-src/emacs/src/lisp.h 3029 nfree c-src/emacs/src/gmalloc.c 150 -/ngrayt ps-src/rfc1245.ps /^\/ngrayt 256 array def$/ -/ngreent ps-src/rfc1245.ps /^\/ngreent 256 array def$/ -NIL_IS_ZERO c-src/emacs/src/lisp.h 1515 -NILP c-src/emacs/src/lisp.h /^# define NILP(x) lisp_h_NILP (x)$/ nl c-src/etags.c 2521 -NmStrToErrStr pas-src/common.pas /^function NmStrToErrStr;(*($/ -NmStrToInteger pas-src/common.pas /^function NmStrToInteger; (* (Str : NameString) : i/ nm tex-src/testenv.tex /^\\newcommand{\\nm}[2]{\\nomenclature{#1}{#2}}$/ +no tex-src/texinfo.tex /^\\def\\appendixletter{\\char\\the\\appendixno}$/ +no tex-src/texinfo.tex /^\\global\\advance \\appendixno by 1 \\message{Appendix/ +no tex-src/texinfo.tex /^\\ifnum\\secno=0 Appendix\\xreftie'char\\the\\appendixn/ +no tex-src/texinfo.tex /^\\newcount \\appendixno \\appendixno = `\\@$/ +no.\the tex-src/texinfo.tex /^Section\\xreftie'char\\the\\appendixno.\\the\\secno.\\th/ +no.\the tex-src/texinfo.tex /^\\else \\ifnum \\subsecno=0 Section\\xreftie'char\\the\\/ no_argument c-src/getopt.h 89 +no_lang_help c-src/etags.c 707 +no_sub c-src/emacs/src/regex.h 387 nocase_tail c-src/etags.c /^nocase_tail (const char *cp)$/ node c-src/etags.c 225 -noderef tex-src/texinfo.tex /^\\appendixnoderef %$/ -node_st c-src/etags.c 214 node tex-src/texinfo.tex /^\\def\\node{\\ENVcheck\\parsearg\\nodezzz}$/ +node_st c-src/etags.c 214 +noderef tex-src/texinfo.tex /^\\appendixnoderef %$/ nodexxx tex-src/texinfo.tex /^\\def\\nodexxx[#1,#2]{\\gdef\\lastnode{#1}}$/ nodezzz tex-src/texinfo.tex /^\\def\\nodezzz#1{\\nodexxx [#1,]}$/ nofillexdent tex-src/texinfo.tex /^\\def\\nofillexdent{\\parsearg\\nofillexdentyyy}$/ nofillexdentyyy tex-src/texinfo.tex /^\\def\\nofillexdentyyy #1{{\\advance \\leftskip by -\\e/ nofonts tex-src/texinfo.tex /^{\\chapternofonts%$/ nofonts tex-src/texinfo.tex /^{\\indexnofonts$/ -no_lang_help c-src/etags.c 707 nonarrowing tex-src/texinfo.tex /^ \\let\\nonarrowing=\\comment$/ nonarrowing tex-src/texinfo.tex /^\\let\\nonarrowing=\\relax$/ none_help c-src/etags.c 703 -NONPOINTER_BITS c-src/emacs/src/lisp.h 78 -NONPOINTER_BITS c-src/emacs/src/lisp.h 80 -NONSRCS make-src/Makefile /^NONSRCS=entry.strange lists.erl clheir.hpp.gz$/ normalbackslash tex-src/texinfo.tex /^\\def\\normalbackslash{{\\tt\\rawbackslashxx}}$/ normalcaret tex-src/texinfo.tex /^\\def\\normalcaret{^}$/ normaldoublequote tex-src/texinfo.tex /^\\def\\normaldoublequote{"}$/ normalgreater tex-src/texinfo.tex /^\\def\\normalgreater{>}$/ -normalize_fresh prol-src/natded.prolog /^normalize_fresh(M,N):-$/ normalize prol-src/natded.prolog /^normalize(M,MNorm):-$/ -/normalize ps-src/rfc1245.ps /^\/normalize {$/ +normalize_fresh prol-src/natded.prolog /^normalize_fresh(M,N):-$/ normalize_tree prol-src/natded.prolog /^normalize_tree(tree(Rule,Syn:Sem,Trees),$/ normalize_trees prol-src/natded.prolog /^normalize_trees([],[]).$/ normalless tex-src/texinfo.tex /^\\def\\normalless{<}$/ @@ -2716,67 +3482,42 @@ normaltilde tex-src/texinfo.tex /^\\def\\normaltilde{~}$/ normalunderscore tex-src/texinfo.tex /^\\def\\normalunderscore{_}$/ normalverticalbar tex-src/texinfo.tex /^\\def\\normalverticalbar{|}$/ nosave pyt-src/server.py /^ def nosave(self):$/ -no_sub c-src/emacs/src/regex.h 387 +not_bol c-src/emacs/src/regex.h 391 +not_eol c-src/emacs/src/regex.h 394 +not_single_kboard_state c-src/emacs/src/keyboard.c /^not_single_kboard_state (KBOARD *kboard)$/ notag2 c-src/dostorture.c 26 notag2 c-src/torture.c 26 notag4 c-src/dostorture.c 45 notag4 c-src/torture.c 45 -not_bol c-src/emacs/src/regex.h 391 -/.notdef ps-src/rfc1245.ps /^\/.notdef \/.notdef \/.notdef \/.notdef \/.notdef \/.not/ -/.notdef ps-src/rfc1245.ps /^\/.notdef \/.notdef \/.notdef \/.notdef \/space \/exclam/ -not_eol c-src/emacs/src/regex.h 394 -NOTEQUAL y-src/cccp.c 13 -no tex-src/texinfo.tex /^\\def\\appendixletter{\\char\\the\\appendixno}$/ -no tex-src/texinfo.tex /^\\global\\advance \\appendixno by 1 \\message{Appendix/ -no tex-src/texinfo.tex /^\\ifnum\\secno=0 Appendix\\xreftie'char\\the\\appendixn/ -no tex-src/texinfo.tex /^\\newcount \\appendixno \\appendixno = `\\@$/ -no.\the tex-src/texinfo.tex /^\\else \\ifnum \\subsecno=0 Section\\xreftie'char\\the\\/ -no.\the tex-src/texinfo.tex /^Section\\xreftie'char\\the\\appendixno.\\the\\secno.\\th/ notinname c-src/etags.c /^#define notinname(c) (_nin[CHAR (c)]) \/* c is not / -not_single_kboard_state c-src/emacs/src/keyboard.c /^not_single_kboard_state (KBOARD *kboard)$/ npending c-src/emacs/src/keyboard.c 7244 -/N ps-src/rfc1245.ps /^\/N { $/ -/nredt ps-src/rfc1245.ps /^\/nredt 256 array def$/ nsbot tex-src/texinfo.tex /^\\def\\nsbot{\\vbox$/ nstop tex-src/texinfo.tex /^\\def\\nstop{\\vbox$/ -/Ntilde ps-src/rfc1245.ps /^\/Ntilde \/Odieresis \/Udieresis \/aacute \/agrave \/aci/ ntool_bar_items c-src/emacs/src/keyboard.c 7974 -NULL_PTR y-src/cccp.y 63 -NULL y-src/cccp.y 51 +numOfChannels cp-src/c.C 1 +num_columns cp-src/conway.cpp 16 +num_input_events c-src/emacs/src/keyboard.c 210 +num_regs c-src/emacs/src/regex.h 430 +num_rows cp-src/conway.cpp 15 +numberKeys objcpp-src/SimpleCalc.M /^- numberKeys:sender$/ +number_len c-src/etags.c /^static int number_len (long) ATTRIBUTE_CONST;$/ numberedsec tex-src/texinfo.tex /^\\outer\\def\\numberedsec{\\parsearg\\seczzz}$/ numberedsubsec tex-src/texinfo.tex /^\\outer\\def\\numberedsubsec{\\parsearg\\numberedsubsec/ numberedsubseczzz tex-src/texinfo.tex /^\\def\\numberedsubseczzz #1{\\seccheck{subsection}%$/ numberedsubsubsec tex-src/texinfo.tex /^\\outer\\def\\numberedsubsubsec{\\parsearg\\numberedsub/ numberedsubsubseczzz tex-src/texinfo.tex /^\\def\\numberedsubsubseczzz #1{\\seccheck{subsubsecti/ -numberKeys objcpp-src/SimpleCalc.M /^- numberKeys:sender$/ -number_len c-src/etags.c /^static int number_len (long) ATTRIBUTE_CONST;$/ -/numbersign ps-src/rfc1245.ps /^\/numbersign \/dollar \/percent \/ampersand \/quotesing/ numbervars prol-src/natded.prolog /^numbervars(X):-$/ -num_columns cp-src/conway.cpp 16 numericenumerate tex-src/texinfo.tex /^\\def\\numericenumerate{%$/ -num_input_events c-src/emacs/src/keyboard.c 210 -NUM_MOD_NAMES c-src/emacs/src/keyboard.c 6325 -numOfChannels cp-src/c.C 1 -NUM_RECENT_KEYS c-src/emacs/src/keyboard.c 91 -num_regs c-src/emacs/src/regex.h 430 -num_rows cp-src/conway.cpp 15 -NUMSTATS objc-src/PackInsp.h 36 nvars c-src/emacs/src/lisp.h 3140 obeyedspace tex-src/texinfo.tex /^\\gdef\\obeyedspace{\\ }$/ -Objc_help c-src/etags.c 613 -OBJCPPSRC make-src/Makefile /^OBJCPPSRC=SimpleCalc.H SimpleCalc.M$/ -OBJCSRC make-src/Makefile /^OBJCSRC=Subprocess.h Subprocess.m PackInsp.h PackI/ -Objc_suffixes c-src/etags.c 609 objdef c-src/etags.c 2484 object c-src/emacs/src/lisp.h 2128 object_registry cp-src/clheir.cpp 10 -OBJS make-src/Makefile /^OBJS=${GETOPTOBJS} ${REGEXOBJS} ${CHECKOBJS}$/ objtag c-src/etags.c 2453 objvar c-src/emacs/src/lisp.h 2297 obstack_chunk_alloc y-src/parse.y 47 obstack_chunk_free y-src/parse.y 48 ocatseen c-src/etags.c 2477 -/ocircumflex ps-src/rfc1245.ps /^\/ocircumflex \/odieresis \/otilde \/uacute \/ugrave \/u/ octave_MDiagArray2_h cp-src/MDiagArray2.h 29 octave_Range_h cp-src/Range.h 24 oddfooting tex-src/texinfo.tex /^\\def\\oddfooting{\\parsearg\\oddfootingxxx}$/ @@ -2794,56 +3535,52 @@ oimplementation c-src/etags.c 2474 oinbody c-src/etags.c 2478 ok objc-src/PackInsp.m /^-ok:sender$/ ok_to_echo_at_next_pause c-src/emacs/src/keyboard.c 159 -oldpage tex-src/texinfo.tex /^ \\let\\oldpage = \\page$/ old_value c-src/emacs/src/lisp.h 2980 +oldpage tex-src/texinfo.tex /^ \\let\\oldpage = \\page$/ omethodcolon c-src/etags.c 2481 omethodparm c-src/etags.c 2482 omethodsign c-src/etags.c 2479 omethodtag c-src/etags.c 2480 +one tex-src/texinfo.tex /^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/ onepageout tex-src/texinfo.tex /^\\def\\cropmarks{\\let\\onepageout=\\croppageout }$/ onepageout tex-src/texinfo.tex /^\\def\\onepageout#1{\\hoffset=\\normaloffset$/ -one tex-src/texinfo.tex /^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/ onone c-src/etags.c 2472 oparenseen c-src/etags.c 2476 -OPENBUTTON objc-src/PackInsp.m 47 -opencontents tex-src/texinfo.tex /^\\def\\opencontents{\\openout \\contentsfile = \\jobnam/ +open objc-src/PackInsp.m /^-open:sender$/ open-dribble-file c-src/emacs/src/keyboard.c /^DEFUN ("open-dribble-file", Fopen_dribble_file, So/ -openindices tex-src/texinfo.tex /^\\def\\openindices{%$/ openInWorkspace objc-src/PackInsp.m /^static void openInWorkspace(const char *filename)$/ -open objc-src/PackInsp.m /^-open:sender$/ +opencontents tex-src/texinfo.tex /^\\def\\opencontents{\\openout \\contentsfile = \\jobnam/ +openindices tex-src/texinfo.tex /^\\def\\openindices{%$/ operationKeys objcpp-src/SimpleCalc.M /^- operationKeys:sender$/ -operator+ cp-src/c.C /^ A operator+(A& a) {};$/ -operator+ cp-src/c.C /^const A& A::operator+(const A&) { }$/ -operator - cp-src/c.C /^void operator -(int, int) {}$/ -operator+ cp-src/c.C /^void operator+(int, int) {}$/ -operator = cp-src/functions.cpp /^Date & Date::operator = ( Date d ){$/ -operator += cp-src/functions.cpp /^Date & Date::operator += ( int days ){$/ -operator -= cp-src/functions.cpp /^Date & Date::operator -= ( int days ){$/ +operator y-src/cccp.y 438 operator ++ cp-src/functions.cpp /^Date & Date::operator ++ ( void ){$/ -operator -- cp-src/functions.cpp /^Date & Date::operator -- ( void ){$/ +operator += cp-src/functions.cpp /^Date & Date::operator += ( int days ){$/ +operator - cp-src/c.C /^void operator -(int, int) {}$/ operator - cp-src/functions.cpp /^int Date::operator - ( Date d ){$/ +operator -- cp-src/functions.cpp /^Date & Date::operator -- ( void ){$/ +operator -= cp-src/functions.cpp /^Date & Date::operator -= ( int days ){$/ operator < cp-src/functions.cpp /^int Date::operator < ( Date d ) {$/ +operator << cp-src/functions.cpp /^ostream& operator << ( ostream &c, Date d ) {$/ +operator = cp-src/MDiagArray2.h /^ MDiagArray2& operator = (const MDiagArray2/ +operator = cp-src/functions.cpp /^Date & Date::operator = ( Date d ){$/ operator == cp-src/functions.cpp /^int Date::operator == ( Date d ) {$/ operator > cp-src/functions.cpp /^int Date::operator > ( Date d ) {$/ operator >> cp-src/functions.cpp /^istream& operator >> ( istream &i, Date & dd ){$/ -operator << cp-src/functions.cpp /^ostream& operator << ( ostream &c, Date d ) {$/ -operator = cp-src/MDiagArray2.h /^ MDiagArray2& operator = (const MDiagArray2/ -OperatorFun c-src/h.h 88 +operator MArray2 cp-src/MDiagArray2.h /^ operator MArray2 () const$/ operator int cp-src/c.C /^void operator int(int, int) {}$/ operator int cp-src/fail.C /^ operator int() const {return x;}$/ -operator MArray2 cp-src/MDiagArray2.h /^ operator MArray2 () const$/ -operator y-src/cccp.y 438 +operator+ cp-src/c.C /^ A operator+(A& a) {};$/ +operator+ cp-src/c.C /^const A& A::operator+(const A&) { }$/ +operator+ cp-src/c.C /^void operator+(int, int) {}$/ opheader\defoptype tex-src/texinfo.tex /^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/ opnested tex-src/texinfo.tex /^\\gdef\\opnested{\\char`\\(\\global\\advance\\parencount / opnr tex-src/texinfo.tex /^\\def\\opnr{{\\sf\\char`\\(}} \\def\\clnr{{\\sf\\char`\\)}} / opparsebody\Edefop tex-src/texinfo.tex /^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/ oprm tex-src/texinfo.tex /^\\gdef\\oprm#1 {{\\rm\\char`\\(}#1 \\bf \\let(=\\opnested / oprotocol c-src/etags.c 2473 -/O ps-src/rfc1245.ps /^\/O {closepath} bind def$/ optheader tex-src/texinfo.tex /^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/ -optional_argument c-src/getopt.h 91 option c-src/getopt.h 73 -OPTIONS make-src/Makefile /^OPTIONS=--members --declarations --regex=@regexfil/ +optional_argument c-src/getopt.h 91 optx\defoptheader tex-src/texinfo.tex /^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/ optype tex-src/texinfo.tex /^\\begingroup\\defname {#2}{\\defoptype{} on #1}%$/ optype tex-src/texinfo.tex /^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/ @@ -2852,193 +3589,129 @@ opx\defopheader tex-src/texinfo.tex /^\\defopparsebody\\Edefop\\defopx\\defophea ord_add_element prol-src/ordsets.prolog /^ord_add_element([], Element, [Element]).$/ ord_del_element prol-src/ordsets.prolog /^ord_del_element([], _, []).$/ ord_disjoint prol-src/ordsets.prolog /^ord_disjoint(Set1, Set2) :-$/ -/ordfeminine ps-src/rfc1245.ps /^\/ordfeminine \/ordmasculine \/.notdef \/ae \/oslash \/q/ +ord_intersect prol-src/ordsets.prolog /^ord_intersect([Head1|Tail1], [Head2|Tail2]) :-$/ +ord_intersection prol-src/ordsets.prolog /^ord_intersection(Sets, Intersection) :- $/ +ord_intersection prol-src/ordsets.prolog /^ord_intersection([], Set2, [], Set2).$/ +ord_intersection prol-src/ordsets.prolog /^ord_intersection([], _, []).$/ ord_intersection2 prol-src/ordsets.prolog /^ord_intersection2(1, [Set|Sets], Set0, Sets0) :- !/ ord_intersection3 prol-src/ordsets.prolog /^ord_intersection3(<, _, Set1, Head2, Tail2, Inters/ ord_intersection4 prol-src/ordsets.prolog /^ord_intersection4(<, _, Set1, Head2, Tail2, Inters/ -ord_intersection prol-src/ordsets.prolog /^ord_intersection([], _, []).$/ -ord_intersection prol-src/ordsets.prolog /^ord_intersection([], Set2, [], Set2).$/ -ord_intersection prol-src/ordsets.prolog /^ord_intersection(Sets, Intersection) :- $/ -ord_intersect prol-src/ordsets.prolog /^ord_intersect([Head1|Tail1], [Head2|Tail2]) :-$/ ord_member prol-src/ordsets.prolog /^ord_member(X, [E|Es]) :-$/ ord_seteq prol-src/ordsets.prolog /^ord_seteq(Set1, Set2) :-$/ ord_setproduct prol-src/ordsets.prolog /^ord_setproduct([], _, []).$/ ord_subset prol-src/ordsets.prolog /^ord_subset([], _).$/ ord_subtract prol-src/ordsets.prolog /^ord_subtract(Set1, Set2, Union) :-$/ ord_symdiff prol-src/ordsets.prolog /^ord_symdiff([], Set2, Set2).$/ -ord_union4 prol-src/ordsets.prolog /^ord_union4(<, Head, Set1, Head2, Tail2, [Head|Unio/ -ord_union_all prol-src/ordsets.prolog /^ord_union_all(1, [Set|Sets], Set, Sets) :- !.$/ ord_union prol-src/ordsets.prolog /^ord_union(Set1, Set2, Union) :-$/ ord_union prol-src/ordsets.prolog /^ord_union([], Union) :- !, Union = [].$/ -OR y-src/cccp.c 10 +ord_union4 prol-src/ordsets.prolog /^ord_union4(<, Head, Set1, Head2, Tail2, [Head|Unio/ +ord_union_all prol-src/ordsets.prolog /^ord_union_all(1, [Set|Sets], Set, Sets) :- !.$/ oss html-src/softwarelibero.html /^Il movimento open source$/ otagseen c-src/etags.c 2475 -OTAGS make-src/Makefile /^OTAGS: oetags ${SRCS} srclist$/ -/Otilde ps-src/rfc1245.ps /^\/Otilde \/OE \/oe \/endash \/emdash \/quotedblleft \/quo/ +outputTime cp-src/c.C 9 output_file perl-src/htlmify-cystic 35 output_files perl-src/htlmify-cystic 32 outputtable html-src/algrthms.html /^Output$/ -outputTime cp-src/c.C 9 outsyn prol-src/natded.prolog /^outsyn(['Any'],_).$/ -OVERLAYP c-src/emacs/src/lisp.h /^OVERLAYP (Lisp_Object x)$/ -Overview tex-src/gzip.texi /^@node Overview, Sample, Copying, Top$/ -PackageInspector objc-src/PackInsp.h /^@interface PackageInspector:WMInspector$/ +p c-src/emacs/src/lisp.h 4673 +p c-src/emacs/src/lisp.h 4679 +p.x forth-src/test-forth.fth /^ 1 CELLS +FIELD p.x \\ A single cell filed name/ +p.y forth-src/test-forth.fth /^ 1 CELLS +FIELD p.y \\ A single cell field name/ +p/f ada-src/etags-test-for.ada /^ function p pragma Import (C,$/ +p/f ada-src/etags-test-for.ada /^function p ("p");$/ +pD c-src/emacs/src/lisp.h 165 +pD c-src/emacs/src/lisp.h 167 +pD c-src/emacs/src/lisp.h 169 +pD c-src/emacs/src/lisp.h 171 +pI c-src/emacs/src/lisp.h 106 +pI c-src/emacs/src/lisp.h 94 +pI c-src/emacs/src/lisp.h 99 +pMd c-src/emacs/src/lisp.h 150 +pMd c-src/emacs/src/lisp.h 155 +pMu c-src/emacs/src/lisp.h 151 +pMu c-src/emacs/src/lisp.h 156 +p_next c-src/etags.c 258 +page tex-src/texinfo.tex /^ \\let\\page = \\oldpage$/ +page tex-src/texinfo.tex /^ \\def\\page{%$/ +page tex-src/texinfo.tex /^\\def\\page{\\par\\vfill\\supereject}$/ pagealignmacro tex-src/texinfo.tex /^\\global\\let\\pagealignmacro=\\chapoddpage$/ -pagealignmacro tex-src/texinfo.tex /^\\global\\let\\pagealignmacro=\\chappager}$/ pagealignmacro tex-src/texinfo.tex /^\\global\\let\\pagealignmacro=\\chappager$/ +pagealignmacro tex-src/texinfo.tex /^\\global\\let\\pagealignmacro=\\chappager}$/ pagebody tex-src/texinfo.tex /^\\def\\pagebody#1{\\vbox to\\pageheight{\\boxmaxdepth=\\/ pagecontents tex-src/texinfo.tex /^\\gdef\\pagecontents#1{\\ifvoid\\topins\\else\\unvbox\\to/ -/pagedimen ps-src/rfc1245.ps /^\/pagedimen { $/ pagesize c-src/emacs/src/gmalloc.c 1707 pagesofar tex-src/texinfo.tex /^\\def\\pagesofar{\\unvbox\\partialpage %$/ -page tex-src/texinfo.tex /^ \\def\\page{%$/ -page tex-src/texinfo.tex /^\\def\\page{\\par\\vfill\\supereject}$/ -page tex-src/texinfo.tex /^ \\let\\page = \\oldpage$/ pair merc-src/accumulator.m /^:- import_module pair.$/ -/papersize ps-src/rfc1245.ps /^\/papersize {$/ +par tex-src/texinfo.tex /^\\let\\par=\\lisppar$/ +par tex-src/texinfo.tex /^{\\let\\par=\\endgraf \\smallbreak}%$/ paragraphindent tex-src/texinfo.tex /^\\let\\paragraphindent=\\comment$/ -/paragraph ps-src/rfc1245.ps /^\/paragraph \/germandbls \/registered \/copyright \/tra/ -/parenright ps-src/rfc1245.ps /^\/parenright \/asterisk \/plus \/comma \/hyphen \/period/ parent c-src/emacs/src/keyboard.c 8745 parent c-src/emacs/src/lisp.h 1590 -parseargdiscardspace tex-src/texinfo.tex /^\\gdef\\parseargdiscardspace {\\begingroup\\obeylines\\/ -parseargline tex-src/texinfo.tex /^\\def\\parseargline{\\begingroup \\obeylines \\parsearg/ -parsearglinex tex-src/texinfo.tex /^\\gdef\\parsearglinex #1^^M{\\endgroup \\next {#1}}}$/ -parsearg tex-src/texinfo.tex /^\\def\\parsearg #1{\\let\\next=#1\\begingroup\\obeylines/ -parseargx tex-src/texinfo.tex /^\\def\\parseargx{%$/ -parsebody\Edefmac tex-src/texinfo.tex /^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/ -parsebody\Edefspec tex-src/texinfo.tex /^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/ -parsebody\Edeftypefun tex-src/texinfo.tex /^\\def\\deftypefun{\\defparsebody\\Edeftypefun\\deftypef/ -parsebody\Edefun tex-src/texinfo.tex /^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/ +parse prol-src/natded.prolog /^parse(Ws,Cat):-$/ +parseFromVars php-src/lce_functions.php /^ function parseFromVars($prefix)$/ parse_c_expression y-src/cccp.y /^parse_c_expression (string)$/ parse_cgi prol-src/natded.prolog /^parse_cgi(TokenList,KeyVals):-$/ parse_error y-src/parse.y 82 parse_escape y-src/cccp.y /^parse_escape (string_ptr)$/ -parseFromVars php-src/lce_functions.php /^ function parseFromVars($prefix)$/ parse_hash y-src/parse.y 64 parse_menu_item c-src/emacs/src/keyboard.c /^parse_menu_item (Lisp_Object item, int inmenubar)$/ parse_modifiers c-src/emacs/src/keyboard.c /^parse_modifiers (Lisp_Object symbol)$/ parse_modifiers_uncached c-src/emacs/src/keyboard.c /^parse_modifiers_uncached (Lisp_Object symbol, ptrd/ parse_number y-src/cccp.y /^parse_number (olen)$/ -parse prol-src/natded.prolog /^parse(Ws,Cat):-$/ -parse_return_error y-src/cccp.y 70 parse_return y-src/parse.y 74 +parse_return_error y-src/cccp.y 70 parse_solitary_modifier c-src/emacs/src/keyboard.c /^parse_solitary_modifier (Lisp_Object symbol)$/ parse_tool_bar_item c-src/emacs/src/keyboard.c /^parse_tool_bar_item (Lisp_Object key, Lisp_Object / parse_tree merc-src/accumulator.m /^:- import_module parse_tree.$/ -par tex-src/texinfo.tex /^{\\let\\par=\\endgraf \\smallbreak}%$/ -par tex-src/texinfo.tex /^\\let\\par=\\lisppar$/ -Pascal_functions c-src/etags.c /^Pascal_functions (FILE *inf)$/ -Pascal_help c-src/etags.c 621 -Pascal_suffixes c-src/etags.c 619 -PASSRC make-src/Makefile /^PASSRC=common.pas$/ +parsearg tex-src/texinfo.tex /^\\def\\parsearg #1{\\let\\next=#1\\begingroup\\obeylines/ +parseargdiscardspace tex-src/texinfo.tex /^\\gdef\\parseargdiscardspace {\\begingroup\\obeylines\\/ +parseargline tex-src/texinfo.tex /^\\def\\parseargline{\\begingroup \\obeylines \\parsearg/ +parsearglinex tex-src/texinfo.tex /^\\gdef\\parsearglinex #1^^M{\\endgroup \\next {#1}}}$/ +parseargx tex-src/texinfo.tex /^\\def\\parseargx{%$/ +parsebody\Edefmac tex-src/texinfo.tex /^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/ +parsebody\Edefspec tex-src/texinfo.tex /^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/ +parsebody\Edeftypefun tex-src/texinfo.tex /^\\def\\deftypefun{\\defparsebody\\Edeftypefun\\deftypef/ +parsebody\Edefun tex-src/texinfo.tex /^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/ pat c-src/etags.c 262 pattern c-src/etags.c 260 pchapsepmacro tex-src/texinfo.tex /^\\global\\let\\pchapsepmacro=\\chapbreak$/ pchapsepmacro tex-src/texinfo.tex /^\\global\\let\\pchapsepmacro=\\chapoddpage$/ pchapsepmacro tex-src/texinfo.tex /^\\global\\let\\pchapsepmacro=\\chappager$/ -p c-src/emacs/src/lisp.h 4673 -p c-src/emacs/src/lisp.h 4679 -pD c-src/emacs/src/lisp.h 165 -pD c-src/emacs/src/lisp.h 167 -pD c-src/emacs/src/lisp.h 169 -pD c-src/emacs/src/lisp.h 171 pdlcount c-src/emacs/src/lisp.h 3046 -PDT c-src/h.h /^ Date 04 May 87 235311 PDT (Mon)$/ pending-delete-mode el-src/TAGTEST.EL /^(defalias 'pending-delete-mode 'delete-selection-m/ pending_funcalls c-src/emacs/src/keyboard.c 4377 pending_signals c-src/emacs/src/keyboard.c 80 -/periodcentered ps-src/rfc1245.ps /^\/periodcentered \/quotesinglbase \/quotedblbase \/per/ -Perl_functions c-src/etags.c /^Perl_functions (FILE *inf)$/ -Perl_help c-src/etags.c 630 -Perl_interpreters c-src/etags.c 628 -PERLSRC make-src/Makefile /^PERLSRC=htlmify-cystic yagrip.pl kai-test.pl mirro/ -Perl_suffixes c-src/etags.c 626 -p/f ada-src/etags-test-for.ada /^function p ("p");$/ -p/f ada-src/etags-test-for.ada /^ function p pragma Import (C,$/ -pfatal c-src/etags.c /^pfatal (const char *s1)$/ -pfdset c-src/h.h 57 -pfnote c-src/etags.c /^pfnote (char *name, bool is_func, char *linestart,/ -/PF ps-src/rfc1245.ps /^\/PF { $/ -PHP_functions c-src/etags.c /^PHP_functions (FILE *inf)$/ -PHP_help c-src/etags.c 639 -PHPSRC make-src/Makefile /^PHPSRC=lce_functions.php ptest.php sendmail.php$/ -PHP_suffixes c-src/etags.c 637 -pI c-src/emacs/src/lisp.h 106 -pI c-src/emacs/src/lisp.h 94 -pI c-src/emacs/src/lisp.h 99 +pfatal c-src/etags.c /^pfatal (const char *s1)$/ +pfdset c-src/h.h 57 +pfnote c-src/etags.c /^pfnote (char *name, bool is_func, char *linestart,/ pindex tex-src/texinfo.tex /^\\def\\pindex {\\pgindex}$/ pinned c-src/emacs/src/lisp.h 679 -Pkg1/b ada-src/etags-test-for.ada /^package body Pkg1 is$/ -Pkg1/b ada-src/waroquiers.ada /^package body Pkg1 is$/ -Pkg1_Func1/f ada-src/etags-test-for.ada /^ function Pkg1_Func1 return Boolean;$/ -Pkg1_Func1/f ada-src/etags-test-for.ada /^function Pkg1_Func1 return Boolean is$/ -Pkg1_Func1/f ada-src/etags-test-for.ada /^ function Pkg1_Func1 return Boolean is separate;$/ -Pkg1_Func1/f ada-src/waroquiers.ada /^ function Pkg1_Func1 return Boolean;$/ -Pkg1_Func1/f ada-src/waroquiers.ada /^function Pkg1_Func1 return Boolean is$/ -Pkg1_Func1/f ada-src/waroquiers.ada /^ function Pkg1_Func1 return Boolean is separate;$/ -Pkg1_Func2/f ada-src/etags-test-for.ada /^ function Pkg1_Func2 (Ijk : Integer; Z : Integer)/ -Pkg1_Func2/f ada-src/waroquiers.ada /^ function Pkg1_Func2 (Ijk : Integer; Z : Integer)/ -Pkg1_Pkg1/b ada-src/etags-test-for.ada /^package body Pkg1_Pkg1 is$/ -Pkg1_Pkg1/b ada-src/etags-test-for.ada /^ package body Pkg1_Pkg1 is separate;$/ -Pkg1_Pkg1/b ada-src/waroquiers.ada /^package body Pkg1_Pkg1 is$/ -Pkg1_Pkg1/b ada-src/waroquiers.ada /^ package body Pkg1_Pkg1 is separate;$/ -Pkg1_Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Pkg1_Proc1;$/ -Pkg1_Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Pkg1_Proc1 is$/ -Pkg1_Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Pkg1_Proc1;$/ -Pkg1_Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Pkg1_Proc1 is$/ -Pkg1_Pkg1/s ada-src/etags-test-for.ada /^ package Pkg1_Pkg1 is$/ -Pkg1_Pkg1/s ada-src/waroquiers.ada /^ package Pkg1_Pkg1 is$/ -Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc1;$/ -Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc1 is$/ -Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc1;$/ -Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc1 is$/ -Pkg1_Proc2/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc2 (I : Integer);$/ -Pkg1_Proc2/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc2 (I : Integer) is$/ -Pkg1_Proc2/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc2 (I : Integer);$/ -Pkg1_Proc2/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc2 (I : Integer) is$/ -Pkg1/s ada-src/etags-test-for.ada /^package Pkg1 is$/ -Pkg1/s ada-src/waroquiers.ada /^package Pkg1 is$/ -plainc c-src/etags.c 2934 plain_C_entries c-src/etags.c /^plain_C_entries (FILE *inf)$/ plain_C_suffixes c-src/etags.c 643 +plainc c-src/etags.c 2934 plainsecheading tex-src/texinfo.tex /^\\def\\plainsecheading #1{\\secheadingi {#1}}$/ plist c-src/emacs/src/lisp.h 2040 plist c-src/emacs/src/lisp.h 697 plus cp-src/functions.cpp /^void Date::plus ( int days , int month , int year / plus go-src/test1.go 5 plusvalseq prol-src/natded.prolog /^plusvalseq([]) --> [].$/ -pMd c-src/emacs/src/lisp.h 150 -pMd c-src/emacs/src/lisp.h 155 -pMu c-src/emacs/src/lisp.h 151 -pMu c-src/emacs/src/lisp.h 156 -p_next c-src/etags.c 258 -POEntryAD php-src/lce_functions.php 29 -POEntry php-src/lce_functions.php 105 -POEntry php-src/lce_functions.php /^ function POEntry()$/ -pointer c-src/emacs/src/lisp.h 2125 point forth-src/test-forth.fth /^BEGIN-STRUCTURE point \\ create the named structure/ point tex-src/texinfo.tex /^\\def\\point{$\\star$}$/ -poll_for_input_1 c-src/emacs/src/keyboard.c /^poll_for_input_1 (void)$/ +pointer c-src/emacs/src/lisp.h 2125 poll_for_input c-src/emacs/src/keyboard.c /^poll_for_input (struct atimer *timer)$/ +poll_for_input_1 c-src/emacs/src/keyboard.c /^poll_for_input_1 (void)$/ poll_suppress_count c-src/emacs/src/keyboard.c 1908 poll_suppress_count c-src/emacs/src/lisp.h 3047 poll_timer c-src/emacs/src/keyboard.c 1915 -popclass_above c-src/etags.c /^popclass_above (int bracelev)$/ -pop_kboard c-src/emacs/src/keyboard.c /^pop_kboard (void)$/ pop-tag-mark el-src/emacs/lisp/progmodes/etags.el /^(defalias 'pop-tag-mark 'xref-pop-marker-stack)$/ -POReader php-src/lce_functions.php 163 -POReader php-src/lce_functions.php /^ function POReader($domain, $filename)$/ -PORManager php-src/lce_functions.php 498 -PORManager php-src/lce_functions.php /^ function PORManager()$/ +pop_kboard c-src/emacs/src/keyboard.c /^pop_kboard (void)$/ +popclass_above c-src/etags.c /^popclass_above (int bracelev)$/ position_to_Time c-src/emacs/src/keyboard.c /^position_to_Time (ptrdiff_t pos)$/ posix_memalign c-src/emacs/src/gmalloc.c /^posix_memalign (void **memptr, size_t alignment, s/ posn-at-point c-src/emacs/src/keyboard.c /^DEFUN ("posn-at-point", Fposn_at_point, Sposn_at_p/ posn-at-x-y c-src/emacs/src/keyboard.c /^DEFUN ("posn-at-x-y", Fposn_at_x_y, Sposn_at_x_y, / possible_sum_sign y-src/cccp.y /^#define possible_sum_sign(a, b, sum) ((((a) ^ (b))/ -PostControls pyt-src/server.py /^ def PostControls(self):$/ post pyt-src/server.py /^ def post(self):$/ -POSTSCRIPTFLAGS make-src/Makefile /^POSTSCRIPTFLAGS=--language=none --regex='#\/[^ \\t{]/ pot_etags_version c-src/etags.c 81 pp1 c-src/dostorture.c /^int pp1($/ pp1 c-src/torture.c /^int pp1($/ @@ -3055,243 +3728,139 @@ pp_html_table_fitch_tree prol-src/natded.prolog /^pp_html_table_fitch_tree(T):-$ pp_html_table_tree prol-src/natded.prolog /^pp_html_table_tree(T):-$/ pp_html_tree prol-src/natded.prolog /^pp_html_tree(ass(Syn,V,'$VAR'(N))):-$/ pp_html_trees prol-src/natded.prolog /^pp_html_trees([T|Ts],N,M):-$/ +pp_lam prol-src/natded.prolog /^pp_lam(Var^Alpha):-$/ pp_lam_bracket prol-src/natded.prolog /^pp_lam_bracket(A^B):-$/ pp_lam_paren prol-src/natded.prolog /^pp_lam_paren(Var^Alpha):-$/ -pp_lam prol-src/natded.prolog /^pp_lam(Var^Alpha):-$/ pp_paren prol-src/natded.prolog /^pp_paren(C):-$/ pp_rule prol-src/natded.prolog /^pp_rule(fe):-write('\/E').$/ -/P ps-src/rfc1245.ps /^\/P { $/ +pp_syn prol-src/natded.prolog /^pp_syn(A\/B):-$/ pp_syn_back prol-src/natded.prolog /^pp_syn_back(A\/B):-$/ pp_syn_paren prol-src/natded.prolog /^pp_syn_paren(A\/B):-$/ -pp_syn prol-src/natded.prolog /^pp_syn(A\/B):-$/ pp_tree prol-src/natded.prolog /^pp_tree(T):-$/ pp_trees prol-src/natded.prolog /^pp_trees([T|Ts],Column):-$/ +pp_word prol-src/natded.prolog /^pp_word(W):-$/ pp_word_list prol-src/natded.prolog /^pp_word_list([]).$/ pp_word_list_rest prol-src/natded.prolog /^pp_word_list_rest([]).$/ -pp_word prol-src/natded.prolog /^pp_word(W):-$/ -Pre_Call_State/t ada-src/2ataspri.ads /^ type Pre_Call_State is new System.Address;$/ -.PRECIOUS make-src/Makefile /^.PRECIOUS: ETAGS CTAGS ETAGS16 CTAGS16 ETAGS17 CTA/ predicate c-src/emacs/src/lisp.h 2307 -prev c.c 175 prev c-src/emacs/src/gmalloc.c 165 prev c-src/emacs/src/gmalloc.c 189 prev c-src/emacs/src/lisp.h 2191 +prev c.c 175 primary tex-src/texinfo.tex /^\\def\\primary #1{\\line{#1\\hfil}}$/ -PrintAdd go-src/test1.go /^func (n intNumber) PrintAdd() {$/ -PrintAdd go-src/test1.go /^func (s str) PrintAdd() {$/ +print tex-src/texinfo.tex /^\\def\\print{\\leavevmode\\lower.1ex\\hbox to 1em{\\hfil/ +print tex-src/texinfo.tex /^\\def\\print{\\realbackslash print}$/ printClassification php-src/lce_functions.php /^ function printClassification()$/ +print_help c-src/etags.c /^print_help (argument *argbuffer)$/ +print_language_names c-src/etags.c /^print_language_names (void)$/ +print_version c-src/etags.c /^print_version (void)$/ printedmanual tex-src/texinfo.tex /^\\def\\printedmanual{\\ignorespaces #5}%$/ printedmanual tex-src/texinfo.tex /^section ``\\printednodename'' in \\cite{\\printedmanu/ printednodename tex-src/texinfo.tex /^\\def\\printednodename{\\ignorespaces #1}%$/ printednodename tex-src/texinfo.tex /^\\def\\printednodename{\\ignorespaces #3}%$/ -print_help c-src/etags.c /^print_help (argument *argbuffer)$/ printindex tex-src/texinfo.tex /^\\def\\printindex{\\parsearg\\doprintindex}$/ -print_language_names c-src/etags.c /^print_language_names (void)$/ printmax_t c-src/emacs/src/lisp.h 148 printmax_t c-src/emacs/src/lisp.h 153 -print tex-src/texinfo.tex /^\\def\\print{\\leavevmode\\lower.1ex\\hbox to 1em{\\hfil/ -print tex-src/texinfo.tex /^\\def\\print{\\realbackslash print}$/ -PRINT_UNDOCUMENTED_OPTIONS_HELP c-src/etags.c 804 -print_version c-src/etags.c /^print_version (void)$/ -Private objc-src/Subprocess.m /^@interface Subprocess(Private)$/ -Private_T/b ada-src/etags-test-for.ada /^ task body Private_T is$/ -Private_T/b ada-src/waroquiers.ada /^ task body Private_T is$/ -Private_T/k ada-src/etags-test-for.ada /^ task Private_T;$/ -Private_T/k ada-src/waroquiers.ada /^ task Private_T;$/ -Private_T/p ada-src/etags-test-for.ada /^ procedure Private_T;$/ -Private_T/p ada-src/etags-test-for.ada /^ procedure Private_T is$/ -Private_T/p ada-src/waroquiers.ada /^ procedure Private_T;$/ -Private_T/p ada-src/waroquiers.ada /^ procedure Private_T is$/ -Private_T/t ada-src/etags-test-for.ada /^ type Private_T is$/ -Private_T/t ada-src/etags-test-for.ada /^ type Private_T is private;$/ -Private_T/t ada-src/waroquiers.ada /^ type Private_T is$/ -Private_T/t ada-src/waroquiers.ada /^ type Private_T is private;$/ -Problems tex-src/gzip.texi /^@node Problems, Concept Index, Tapes, Top$/ proc c-src/h.h 87 process_file c-src/etags.c /^process_file (FILE *fh, char *fn, language *lang)$/ process_file_name c-src/etags.c /^process_file_name (char *file, language *lang)$/ -PROCESSP c-src/emacs/src/lisp.h /^PROCESSP (Lisp_Object a)$/ process_pending_signals c-src/emacs/src/keyboard.c /^process_pending_signals (void)$/ process_special_events c-src/emacs/src/keyboard.c /^process_special_events (void)$/ process_tool_bar_item c-src/emacs/src/keyboard.c /^process_tool_bar_item (Lisp_Object key, Lisp_Objec/ -Proc/t ada-src/2ataspri.ads /^ type Proc is access procedure (Addr : System.Ad/ prof make-src/Makefile /^prof: ETAGS$/ prolog_atom c-src/etags.c /^prolog_atom (char *s, size_t pos)$/ -Prolog_functions c-src/etags.c /^Prolog_functions (FILE *inf)$/ -Prolog_help c-src/etags.c 654 prolog_pr c-src/etags.c /^prolog_pr (char *s, char *last)$/ prolog_skip_comment c-src/etags.c /^prolog_skip_comment (linebuffer *plb, FILE *inf)$/ -Prolog_suffixes c-src/etags.c 652 -PROLSRC make-src/Makefile /^PROLSRC=ordsets.prolog natded.prolog$/ -PROP c-src/emacs/src/keyboard.c 8379 -PROP c-src/emacs/src/keyboard.c /^#define PROP(IDX) AREF (tool_bar_item_properties, / prop c-src/etags.c 209 -PROTECT_MALLOC_STATE c-src/emacs/src/gmalloc.c /^#define PROTECT_MALLOC_STATE(PROT) \/* empty *\/$/ -PROTECT_MALLOC_STATE c-src/emacs/src/gmalloc.c /^#define PROTECT_MALLOC_STATE(PROT) protect_malloc_/ protect_malloc_state c-src/emacs/src/gmalloc.c /^protect_malloc_state (int protect_p)$/ -PRTPKG f-src/entry.for /^ LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL,/ -PRTPKG f-src/entry.strange /^ LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL,/ -PRTPKG f-src/entry.strange_suffix /^ LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL,/ -PSEUDO c-src/sysdep.h /^#define PSEUDO(name, syscall_name, args) / -PSEUDOVECSIZE c-src/emacs/src/lisp.h /^#define PSEUDOVECSIZE(type, nonlispfield) \\$/ -PSEUDOVECTOR_AREA_BITS c-src/emacs/src/lisp.h 818 -PSEUDOVECTOR_FLAG c-src/emacs/src/lisp.h 774 -PSEUDOVECTORP c-src/emacs/src/lisp.h /^PSEUDOVECTORP (Lisp_Object a, int code)$/ -PSEUDOVECTOR_REST_BITS c-src/emacs/src/lisp.h 813 -PSEUDOVECTOR_REST_MASK c-src/emacs/src/lisp.h 814 -PSEUDOVECTOR_SIZE_BITS c-src/emacs/src/lisp.h 808 -PSEUDOVECTOR_SIZE_MASK c-src/emacs/src/lisp.h 809 -PSEUDOVECTOR_TYPEP c-src/emacs/src/lisp.h /^PSEUDOVECTOR_TYPEP (struct vectorlike_header *a, i/ -PS_functions c-src/etags.c /^PS_functions (FILE *inf)$/ -PS_help c-src/etags.c 649 -PSSRC make-src/Makefile /^PSSRC=rfc1245.ps$/ -PS_suffixes c-src/etags.c 647 +ptexL tex-src/texinfo.tex /^\\let\\ptexL=\\L$/ ptexb tex-src/texinfo.tex /^\\let\\ptexb=\\b$/ ptexbullet tex-src/texinfo.tex /^\\let\\ptexbullet=\\bullet$/ ptexc tex-src/texinfo.tex /^\\let\\ptexc=\\c$/ -ptexdots tex-src/texinfo.tex /^\\let\\ptexdots=\\dots$/ ptexdot tex-src/texinfo.tex /^\\let\\ptexdot=\\.$/ +ptexdots tex-src/texinfo.tex /^\\let\\ptexdots=\\dots$/ ptexend tex-src/texinfo.tex /^\\let\\ptexend=\\end$/ ptexequiv tex-src/texinfo.tex /^\\let\\ptexequiv = \\equiv$/ ptexfootnote tex-src/texinfo.tex /^\\let\\ptexfootnote=\\footnote$/ ptexi tex-src/texinfo.tex /^\\let\\ptexi=\\i$/ -ptexlbrace tex-src/texinfo.tex /^\\let\\ptexlbrace=\\{$/ ptexl tex-src/texinfo.tex /^\\let\\ptexl=\\l$/ -ptexL tex-src/texinfo.tex /^\\let\\ptexL=\\L$/ +ptexlbrace tex-src/texinfo.tex /^\\let\\ptexlbrace=\\{$/ ptexrbrace tex-src/texinfo.tex /^\\let\\ptexrbrace=\\}$/ ptexstar tex-src/texinfo.tex /^\\let\\ptexstar=\\*$/ ptext tex-src/texinfo.tex /^\\let\\ptext=\\t$/ pthread_mutexattr_setprio_ceiling/f ada-src/2ataspri.adb /^ function pthread_mutexattr_setprio_ceiling$/ pthread_mutexattr_setprotocol/f ada-src/2ataspri.adb /^ function pthread_mutexattr_setprotocol$/ -PTY_LENGTH objc-src/Subprocess.m 21 -PTY_TEMPLATE objc-src/Subprocess.m 20 -Public_T/t ada-src/etags-test-for.ada /^ type Public_T is$/ -Public_T/t ada-src/waroquiers.ada /^ type Public_T is$/ purpose c-src/emacs/src/lisp.h 1594 -pushclass_above c-src/etags.c /^pushclass_above (int bracelev, char *str, int len)/ -PUSH_C_STR c-src/emacs/src/keyboard.c /^#define PUSH_C_STR(str, listvar) \\$/ -PUSH_HANDLER c-src/emacs/src/lisp.h /^#define PUSH_HANDLER(c, tag_ch_val, handlertype) \\/ push_kboard c-src/emacs/src/keyboard.c /^push_kboard (struct kboard *k)$/ +pushclass_above c-src/etags.c /^pushclass_above (int bracelev, char *str, int len)/ put_entries c-src/etags.c /^put_entries (register node *np)$/ -PVEC_BOOL_VECTOR c-src/emacs/src/lisp.h 787 -PVEC_BUFFER c-src/emacs/src/lisp.h 788 -PVEC_CHAR_TABLE c-src/emacs/src/lisp.h 796 -PVEC_COMPILED c-src/emacs/src/lisp.h 795 -PVEC_FONT c-src/emacs/src/lisp.h 798 -PVEC_FRAME c-src/emacs/src/lisp.h 785 -PVEC_FREE c-src/emacs/src/lisp.h 783 -PVEC_HASH_TABLE c-src/emacs/src/lisp.h 789 -PVEC_NORMAL_VECTOR c-src/emacs/src/lisp.h 782 -PVEC_OTHER c-src/emacs/src/lisp.h 793 -PVEC_PROCESS c-src/emacs/src/lisp.h 784 -PVEC_SUB_CHAR_TABLE c-src/emacs/src/lisp.h 797 -PVEC_SUBR c-src/emacs/src/lisp.h 792 -PVEC_TERMINAL c-src/emacs/src/lisp.h 790 pvec_type c-src/emacs/src/lisp.h 780 -PVEC_TYPE_MASK c-src/emacs/src/lisp.h 819 -PVEC_WINDOW_CONFIGURATION c-src/emacs/src/lisp.h 791 -PVEC_WINDOW c-src/emacs/src/lisp.h 786 -p.x forth-src/test-forth.fth /^ 1 CELLS +FIELD p.x \\ A single cell filed name/ pxref tex-src/texinfo.tex /^\\def\\pxref#1{see \\xrefX[#1,,,,,,,]}$/ -p.y forth-src/test-forth.fth /^ 1 CELLS +FIELD p.y \\ A single cell field name/ -Python_functions c-src/etags.c /^Python_functions (FILE *inf)$/ -Python_help c-src/etags.c 660 -Python_suffixes c-src/etags.c 658 -PYTSRC make-src/Makefile /^PYTSRC=server.py$/ quantizing html-src/algrthms.html /^Quantizing the Received$/ questo ../c/c.web 34 quiettest make-src/Makefile /^quiettest:$/ quit_char c-src/emacs/src/keyboard.c 192 -QUIT c-src/emacs/src/lisp.h 3101 -QUITP c-src/emacs/src/lisp.h 3112 quit_throw_to_read_char c-src/emacs/src/keyboard.c /^quit_throw_to_read_char (bool from_signal)$/ quotation tex-src/texinfo.tex /^\\def\\quotation{%$/ -/quoteleft ps-src/rfc1245.ps /^\/quoteleft \/quoteright \/.notdef \/.notdef \/ydieresi/ -qux1 ruby-src/test1.ru /^ :qux1)$/ qux ruby-src/test1.ru /^ alias_method :qux, :tee, attr_accessor(:bogus)/ +qux1 ruby-src/test1.ru /^ :qux1)$/ qux= ruby-src/test1.ru /^ def qux=(tee)$/ +r tex-src/texinfo.tex /^\\def\\r##1{\\realbackslash r {##1}}$/ +r tex-src/texinfo.tex /^\\def\\r##1{\\realbackslash r {##1}}%$/ +r tex-src/texinfo.tex /^\\def\\r#1{{\\rm #1}} % roman font$/ +r tex-src/texinfo.tex /^\\let\\r=\\indexdummyfont$/ r0 c-src/sysdep.h 54 r1 c-src/sysdep.h 55 r_alloc c-src/emacs/src/lisp.h /^extern void *r_alloc (void **, size_t) ATTRIBUTE_A/ -Range cp-src/Range.h 35 -Range cp-src/Range.h /^ Range (const Range& r)$/ -Range cp-src/Range.h /^ Range (double b, double l)$/ -Range cp-src/Range.h /^ Range (double b, double l, double i)$/ -Range cp-src/Range.h /^ Range (void)$/ -RANGED_INTEGERP c-src/emacs/src/lisp.h /^RANGED_INTEGERP (intmax_t lo, Lisp_Object x, intma/ -range_exp_list y-src/parse.y 273 range_exp y-src/parse.y 269 +range_exp_list y-src/parse.y 273 +raw_keybuf c-src/emacs/src/keyboard.c 116 +raw_keybuf_count c-src/emacs/src/keyboard.c 117 rawbackslash tex-src/texinfo.tex /^\\let\\rawbackslash=\\relax%$/ -rawbackslashxx tex-src/texinfo.tex /^\\def\\rawbackslashxx{\\indexbackslash}%$/ rawbackslashxx tex-src/texinfo.tex /^\\def\\rawbackslashxx{\\indexbackslash}% \\indexbacksl/ -raw_keybuf_count c-src/emacs/src/keyboard.c 117 -raw_keybuf c-src/emacs/src/keyboard.c 116 +rawbackslashxx tex-src/texinfo.tex /^\\def\\rawbackslashxx{\\indexbackslash}%$/ rbrb tex-src/texinfo.tex /^\\def\\lbrb{{\\bf\\char`\\[}} \\def\\rbrb{{\\bf\\char`\\]}}$/ rbtp c.c 240 -RCSid objc-src/PackInsp.m 30 +re_iswctype c-src/emacs/src/regex.h 602 +re_nsub c-src/emacs/src/regex.h 364 +re_pattern_buffer c-src/emacs/src/regex.h 335 +re_pattern_buffer c-src/h.h 119 +re_registers c-src/emacs/src/regex.h 428 +re_wchar_t c-src/emacs/src/regex.h 600 +re_wchar_t c-src/emacs/src/regex.h 623 +re_wctype c-src/emacs/src/regex.h 601 +re_wctype_t c-src/emacs/src/regex.h 599 +re_wctype_t c-src/emacs/src/regex.h 618 +re_wctype_to_bit c-src/emacs/src/regex.h /^# define re_wctype_to_bit(cc) 0$/ +read cp-src/conway.hpp /^ char read() { return alive; }$/ +read php-src/lce_functions.php /^ function read()$/ +read-key-sequence c-src/emacs/src/keyboard.c /^DEFUN ("read-key-sequence", Fread_key_sequence, Sr/ +read-key-sequence-vector c-src/emacs/src/keyboard.c /^DEFUN ("read-key-sequence-vector", Fread_key_seque/ read1 ruby-src/test1.ru /^ attr_reader :read1 , :read2; attr_writer :writ/ read2 ruby-src/test1.ru /^ attr_reader :read1 , :read2; attr_writer :writ/ -readable_events c-src/emacs/src/keyboard.c /^readable_events (int flags)$/ -READABLE_EVENTS_DO_TIMERS_NOW c-src/emacs/src/keyboard.c 346 -READABLE_EVENTS_FILTER_EVENTS c-src/emacs/src/keyboard.c 347 -READABLE_EVENTS_IGNORE_SQUEEZABLES c-src/emacs/src/keyboard.c 348 -readauxfile tex-src/texinfo.tex /^\\def\\readauxfile{%$/ read_char c-src/emacs/src/keyboard.c /^read_char (int commandflag, Lisp_Object map,$/ read_char_help_form_unwind c-src/emacs/src/keyboard.c /^read_char_help_form_unwind (void)$/ read_char_minibuf_menu_prompt c-src/emacs/src/keyboard.c /^read_char_minibuf_menu_prompt (int commandflag,$/ read_char_x_menu_prompt c-src/emacs/src/keyboard.c /^read_char_x_menu_prompt (Lisp_Object map,$/ -read cp-src/conway.hpp /^ char read() { return alive; }$/ read_decoded_event_from_main_queue c-src/emacs/src/keyboard.c /^read_decoded_event_from_main_queue (struct timespe/ read_event_from_main_queue c-src/emacs/src/keyboard.c /^read_event_from_main_queue (struct timespec *end_t/ -read_key_sequence_cmd c-src/emacs/src/keyboard.c 232 -read-key-sequence c-src/emacs/src/keyboard.c /^DEFUN ("read-key-sequence", Fread_key_sequence, Sr/ read_key_sequence c-src/emacs/src/keyboard.c /^read_key_sequence (Lisp_Object *keybuf, int bufsiz/ +read_key_sequence_cmd c-src/emacs/src/keyboard.c 232 read_key_sequence_remapped c-src/emacs/src/keyboard.c 233 -read-key-sequence-vector c-src/emacs/src/keyboard.c /^DEFUN ("read-key-sequence-vector", Fread_key_seque/ read_key_sequence_vs c-src/emacs/src/keyboard.c /^read_key_sequence_vs (Lisp_Object prompt, Lisp_Obj/ -readline c-src/etags.c /^readline (linebuffer *lbp, FILE *stream)$/ -readline_internal c-src/etags.c /^readline_internal (linebuffer *lbp, register FILE / -Read_Lock/p ada-src/2ataspri.adb /^ procedure Read_Lock (L : in out Lock; Ceiling_V/ -Read_Lock/p ada-src/2ataspri.ads /^ procedure Read_Lock (L : in out Lock; Ceiling_V/ read_menu_command c-src/emacs/src/keyboard.c /^read_menu_command (void)$/ -read php-src/lce_functions.php /^ function read()$/ read_toc perl-src/htlmify-cystic /^sub read_toc ()$/ -ReadVacation cp-src/functions.cpp /^void ReadVacation ( char *filename ) {$/ +readable_events c-src/emacs/src/keyboard.c /^readable_events (int flags)$/ +readauxfile tex-src/texinfo.tex /^\\def\\readauxfile{%$/ +readline c-src/etags.c /^readline (linebuffer *lbp, FILE *stream)$/ +readline_internal c-src/etags.c /^readline_internal (linebuffer *lbp, register FILE / +realloc c-src/emacs/src/gmalloc.c /^realloc (void *ptr, size_t size)$/ realloc c-src/emacs/src/gmalloc.c 1720 realloc c-src/emacs/src/gmalloc.c 65 realloc c-src/emacs/src/gmalloc.c 69 -_realloc c-src/emacs/src/gmalloc.c /^_realloc (void *ptr, size_t size)$/ -realloc c-src/emacs/src/gmalloc.c /^realloc (void *ptr, size_t size)$/ reallochook c-src/emacs/src/gmalloc.c /^reallochook (void *ptr, size_t size)$/ -_realloc_internal c-src/emacs/src/gmalloc.c /^_realloc_internal (void *ptr, size_t size)$/ -_realloc_internal_nolock c-src/emacs/src/gmalloc.c /^_realloc_internal_nolock (void *ptr, size_t size)$/ -RE_BACKSLASH_ESCAPE_IN_LISTS c-src/emacs/src/regex.h 47 -RE_BK_PLUS_QM c-src/emacs/src/regex.h 52 -RECC_ALNUM c-src/emacs/src/regex.h 610 -RECC_ALPHA c-src/emacs/src/regex.h 610 -RECC_ASCII c-src/emacs/src/regex.h 617 -RECC_BLANK c-src/emacs/src/regex.h 615 -RECC_CNTRL c-src/emacs/src/regex.h 613 -RECC_DIGIT c-src/emacs/src/regex.h 614 -RECC_ERROR c-src/emacs/src/regex.h 609 -RECC_GRAPH c-src/emacs/src/regex.h 611 -RECC_LOWER c-src/emacs/src/regex.h 612 -RECC_MULTIBYTE c-src/emacs/src/regex.h 616 -RECC_NONASCII c-src/emacs/src/regex.h 616 -RECC_PRINT c-src/emacs/src/regex.h 611 -RECC_PUNCT c-src/emacs/src/regex.h 613 -RECC_SPACE c-src/emacs/src/regex.h 615 -RECC_UNIBYTE c-src/emacs/src/regex.h 617 -RECC_UPPER c-src/emacs/src/regex.h 612 -RECC_WORD c-src/emacs/src/regex.h 610 -RECC_XDIGIT c-src/emacs/src/regex.h 614 -recent_keys c-src/emacs/src/keyboard.c 100 recent-keys c-src/emacs/src/keyboard.c /^DEFUN ("recent-keys", Frecent_keys, Srecent_keys, / +recent_keys c-src/emacs/src/keyboard.c 100 recent_keys_index c-src/emacs/src/keyboard.c 94 -RE_CHAR_CLASSES c-src/emacs/src/regex.h 58 -RE_CONTEXT_INDEP_ANCHORS c-src/emacs/src/regex.h 72 -RE_CONTEXT_INDEP_OPS c-src/emacs/src/regex.h 80 -RE_CONTEXT_INVALID_OPS c-src/emacs/src/regex.h 84 record_asynch_buffer_change c-src/emacs/src/keyboard.c /^record_asynch_buffer_change (void)$/ record_auto_save c-src/emacs/src/keyboard.c /^record_auto_save (void)$/ record_char c-src/emacs/src/keyboard.c /^record_char (Lisp_Object c)$/ @@ -3299,176 +3868,71 @@ record_menu_key c-src/emacs/src/keyboard.c /^record_menu_key (Lisp_Object c)$/ record_single_kboard_state c-src/emacs/src/keyboard.c /^record_single_kboard_state ()$/ record_xmalloc c-src/emacs/src/lisp.h /^extern void *record_xmalloc (size_t) ATTRIBUTE_ALL/ recover_top_level_message c-src/emacs/src/keyboard.c 138 -Rectangle.getPos lua-src/test.lua /^function Rectangle.getPos ()$/ recursion-depth c-src/emacs/src/keyboard.c /^DEFUN ("recursion-depth", Frecursion_depth, Srecur/ -recursive_edit_1 c-src/emacs/src/keyboard.c /^recursive_edit_1 (void)$/ recursive-edit c-src/emacs/src/keyboard.c /^DEFUN ("recursive-edit", Frecursive_edit, Srecursi/ +recursive_edit_1 c-src/emacs/src/keyboard.c /^recursive_edit_1 (void)$/ recursive_edit_unwind c-src/emacs/src/keyboard.c /^recursive_edit_unwind (Lisp_Object buffer)$/ -RED cp-src/screen.hpp 16 -RE_DEBUG c-src/emacs/src/regex.h 161 redirect c-src/emacs/src/lisp.h 663 -RE_DOT_NEWLINE c-src/emacs/src/regex.h 88 -RE_DOT_NOT_NULL c-src/emacs/src/regex.h 92 reduce prol-src/natded.prolog /^reduce((X^M)@N,L):- % beta reduction$/ reduce_subterm prol-src/natded.prolog /^reduce_subterm(M,M2):-$/ -RE_DUP_MAX c-src/emacs/src/regex.h 253 -RE_DUP_MAX c-src/emacs/src/regex.h 256 -/ReEncode ps-src/rfc1245.ps /^\/ReEncode { $/ +ref tex-src/texinfo.tex /^\\def\\ref#1{\\xrefX[#1,,,,,,,]}$/ refill tex-src/texinfo.tex /^\\let\\refill=\\relax$/ refreshPort pyt-src/server.py /^ def refreshPort(self):$/ -RE_FRUGAL c-src/emacs/src/regex.h 147 -ref tex-src/texinfo.tex /^\\def\\ref#1{\\xrefX[#1,,,,,,,]}$/ refx tex-src/texinfo.tex /^\\def\\refx#1#2{%$/ -REG_BADBR c-src/emacs/src/regex.h 313 -REG_BADPAT c-src/emacs/src/regex.h 305 -REG_BADRPT c-src/emacs/src/regex.h 316 -REG_EBRACE c-src/emacs/src/regex.h 312 -REG_EBRACK c-src/emacs/src/regex.h 310 -REG_ECOLLATE c-src/emacs/src/regex.h 306 -REG_ECTYPE c-src/emacs/src/regex.h 307 -REG_EEND c-src/emacs/src/regex.h 319 -REG_EESCAPE c-src/emacs/src/regex.h 308 -REG_ENOSYS c.c 279 -REG_ENOSYS c-src/emacs/src/regex.h 297 -REG_EPAREN c-src/emacs/src/regex.h 311 -REG_ERANGE c-src/emacs/src/regex.h 314 -REG_ERANGEX c-src/emacs/src/regex.h 322 -REG_ERPAREN c-src/emacs/src/regex.h 321 -reg_errcode_t c.c 279 reg_errcode_t c-src/emacs/src/regex.h 323 -REG_ESIZE c-src/emacs/src/regex.h 320 -REG_ESPACE c-src/emacs/src/regex.h 315 -REG_ESUBREG c-src/emacs/src/regex.h 309 +reg_errcode_t c.c 279 +reg_syntax_t c-src/emacs/src/regex.h 43 regex c-src/etags.c 219 -regexfile make-src/Makefile /^regexfile: Makefile$/ -_REGEX_H c-src/emacs/src/regex.h 21 -REGEX make-src/Makefile /^REGEX=\/[ \\t]*DEFVAR_[A-Z_ \\t\\n(]+"\\([^"]+\\)"\/$/ -REGEXOBJS make-src/Makefile /^REGEXOBJS=regex.o$/ regex.o make-src/Makefile /^regex.o: emacs\/src\/regex.c$/ +regex_t c-src/emacs/src/regex.h 416 +regex_tag_multiline c-src/etags.c /^regex_tag_multiline (void)$/ +regexfile make-src/Makefile /^regexfile: Makefile$/ regexp c-src/etags.c 256 regexp c-src/etags.c 268 -regex_tag_multiline c-src/etags.c /^regex_tag_multiline (void)$/ -regex_t c-src/emacs/src/regex.h 416 -REG_EXTENDED c-src/emacs/src/regex.h 263 -REG_ICASE c-src/emacs/src/regex.h 267 registerAction objcpp-src/SimpleCalc.M /^- registerAction:(SEL)action$/ register_heapinfo c-src/emacs/src/gmalloc.c /^register_heapinfo (void)$/ regmatch_t c-src/emacs/src/regex.h 451 -REG_NEWLINE c-src/emacs/src/regex.h 272 -REG_NOERROR c-src/emacs/src/regex.h 300 -REG_NOMATCH c-src/emacs/src/regex.h 301 -REG_NOSUB c-src/emacs/src/regex.h 276 -REG_NOTBOL c-src/emacs/src/regex.h 286 -REG_NOTEOL c-src/emacs/src/regex.h 289 regoff_t c-src/emacs/src/regex.h 423 -regs_allocated c-src/emacs/src/regex.h 379 -regs cp-src/screen.cpp 16 regs c-src/etags.c 263 +regs cp-src/screen.cpp 16 +regs_allocated c-src/emacs/src/regex.h 379 regset c-src/h.h 31 -REGS_FIXED c-src/emacs/src/regex.h 378 -REGS_REALLOCATE c-src/emacs/src/regex.h 377 -REGS_UNALLOCATED c-src/emacs/src/regex.h 376 -reg_syntax_t c-src/emacs/src/regex.h 43 regular_top_level_message c-src/emacs/src/keyboard.c 143 rehash_size c-src/emacs/src/lisp.h 1835 rehash_threshold c-src/emacs/src/lisp.h 1839 -RE_HAT_LISTS_NOT_NEWLINE c-src/emacs/src/regex.h 96 -RE_INTERVALS c-src/emacs/src/regex.h 101 -re_iswctype c-src/emacs/src/regex.h 602 relative_filename c-src/etags.c /^relative_filename (char *file, char *dir)$/ release distrib make-src/Makefile /^release distrib: web$/ -RELEASELIST make-src/Makefile /^RELEASELIST=pot@gnu.org xemacs-review@xemacs.org j/ -ReleaseNameString pas-src/common.pas /^procedure ReleaseNameString; (* (var NSP: NameStri/ -RE_LIMITED_OPS c-src/emacs/src/regex.h 105 removeexp prol-src/natded.prolog /^removeexp(E,E,'NIL'):-!.$/ -RemoveLayer lua-src/allegro.lua /^function RemoveLayer ()$/ -RemoveUnderlineControl pas-src/common.pas /^function RemoveUnderlineControl; (*($/ -RE_NEWLINE_ALT c-src/emacs/src/regex.h 109 -RE_NO_BK_BRACES c-src/emacs/src/regex.h 114 -RE_NO_BK_PARENS c-src/emacs/src/regex.h 118 -RE_NO_BK_REFS c-src/emacs/src/regex.h 122 -RE_NO_BK_VBAR c-src/emacs/src/regex.h 126 -RE_NO_EMPTY_RANGES c-src/emacs/src/regex.h 132 -RE_NO_GNU_OPS c-src/emacs/src/regex.h 144 -RE_NO_NEWLINE_ANCHOR c-src/emacs/src/regex.h 153 -RE_NO_POSIX_BACKTRACKING c-src/emacs/src/regex.h 140 -RE_NREGS c-src/emacs/src/regex.h 440 -re_nsub c-src/emacs/src/regex.h 364 reorder_modifiers c-src/emacs/src/keyboard.c /^reorder_modifiers (Lisp_Object symbol)$/ -re_pattern_buffer c-src/emacs/src/regex.h 335 -re_pattern_buffer c-src/h.h 119 -ReprOfChar pas-src/common.pas /^function ReprOfChar; (*( ch : char) : NameString;*/ -__repr__ pyt-src/server.py /^ def __repr__(self):$/ request c.c /^request request (a, b)$/ requeued_events_pending_p c-src/emacs/src/keyboard.c /^requeued_events_pending_p (void)$/ -required_argument c-src/getopt.h 90 require merc-src/accumulator.m /^:- import_module require.$/ -re_registers c-src/emacs/src/regex.h 428 -resetmathfonts tex-src/texinfo.tex /^\\def\\resetmathfonts{%$/ +required_argument c-src/getopt.h 90 reset-this-command-lengths c-src/emacs/src/keyboard.c /^DEFUN ("reset-this-command-lengths", Freset_this_c/ -RE_SHY_GROUPS c-src/emacs/src/regex.h 150 +resetmathfonts tex-src/texinfo.tex /^\\def\\resetmathfonts{%$/ +rest tex-src/texinfo.tex /^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/ restore_getcjmp c-src/emacs/src/keyboard.c /^restore_getcjmp (sys_jmp_buf temp)$/ restore_kboard_configuration c-src/emacs/src/keyboard.c /^restore_kboard_configuration (int was_locked)$/ -/restorematrix ps-src/rfc1245.ps /^\/restorematrix {$/ -_Restrict_arr_ c-src/emacs/src/regex.h 555 -_Restrict_arr_ c-src/emacs/src/regex.h 557 -_Restrict_ c-src/emacs/src/regex.h 540 -_Restrict_ c-src/emacs/src/regex.h 542 -_Restrict_ c-src/emacs/src/regex.h 544 -rest tex-src/texinfo.tex /^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/ result tex-src/texinfo.tex /^\\def\\result{\\leavevmode\\raise.15ex\\hbox to 1em{\\hf/ result tex-src/texinfo.tex /^\\def\\result{\\realbackslash result}$/ -RESUME_POLLING c-src/emacs/src/keyboard.c 2170 -RE_SYNTAX_AWK c-src/emacs/src/regex.h 186 -RE_SYNTAX_ED c-src/emacs/src/regex.h 216 -RE_SYNTAX_EGREP c-src/emacs/src/regex.h 206 -RE_SYNTAX_EMACS c-src/emacs/src/regex.h 183 -RE_SYNTAX_GNU_AWK c-src/emacs/src/regex.h 193 -RE_SYNTAX_GREP c-src/emacs/src/regex.h 201 -RE_SYNTAX_POSIX_AWK c-src/emacs/src/regex.h 197 -RE_SYNTAX_POSIX_BASIC c-src/emacs/src/regex.h 225 -_RE_SYNTAX_POSIX_COMMON c-src/emacs/src/regex.h 221 -RE_SYNTAX_POSIX_EGREP c-src/emacs/src/regex.h 212 -RE_SYNTAX_POSIX_EXTENDED c-src/emacs/src/regex.h 234 -RE_SYNTAX_POSIX_MINIMAL_BASIC c-src/emacs/src/regex.h 231 -RE_SYNTAX_POSIX_MINIMAL_EXTENDED c-src/emacs/src/regex.h 242 -RE_SYNTAX_SED c-src/emacs/src/regex.h 218 -RE_TRANSLATE_TYPE c-src/emacs/src/regex.h 332 return_to_command_loop c-src/emacs/src/keyboard.c 135 -RETURN_UNGCPRO c-src/emacs/src/lisp.h /^#define RETURN_UNGCPRO(expr) \\$/ -RE_UNMATCHED_RIGHT_PAREN_ORD c-src/emacs/src/regex.h 136 reverse prol-src/natded.prolog /^reverse([],Ws,Ws).$/ revert objc-src/PackInsp.m /^-revert:sender$/ -re_wchar_t c-src/emacs/src/regex.h 600 -re_wchar_t c-src/emacs/src/regex.h 623 -re_wctype c-src/emacs/src/regex.h 601 -re_wctype_t c-src/emacs/src/regex.h 599 -re_wctype_t c-src/emacs/src/regex.h 618 -re_wctype_to_bit c-src/emacs/src/regex.h /^# define re_wctype_to_bit(cc) 0$/ -/RF ps-src/rfc1245.ps /^\/RF { $/ right c-src/etags.c 216 right_shift y-src/cccp.y /^right_shift (a, b)$/ ring1 c.c 241 ring2 c.c 242 +rm tex-src/texinfo.tex /^ \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/ +rm tex-src/texinfo.tex /^\\def\\rm{\\realbackslash rm }%$/ rm_eo c-src/emacs/src/regex.h 450 rm_so c-src/emacs/src/regex.h 449 -rm tex-src/texinfo.tex /^\\def\\rm{\\realbackslash rm }%$/ -rm tex-src/texinfo.tex /^ \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/ rng_base cp-src/Range.h 79 rng_inc cp-src/Range.h 81 rng_limit cp-src/Range.h 80 rng_nelem cp-src/Range.h 83 rosso cp-src/c.C 40 -/R ps-src/rfc1245.ps /^\/R { $/ -/RR ps-src/rfc1245.ps /^\/RR { $/ -RSH y-src/cccp.c 17 rsyncfromfly make-src/Makefile /^rsyncfromfly:$/ rsynctofly make-src/Makefile /^rsynctofly:$/ -RTE/s ada-src/2ataspri.adb /^ package RTE renames Interfaces.C.POSIX_RTE;$/ -r tex-src/texinfo.tex /^\\def\\r##1{\\realbackslash r {##1}}%$/ -r tex-src/texinfo.tex /^\\def\\r##1{\\realbackslash r {##1}}$/ -r tex-src/texinfo.tex /^\\def\\r#1{{\\rm #1}} % roman font$/ -r tex-src/texinfo.tex /^\\let\\r=\\indexdummyfont$/ rtint c-src/h.h 60 rtint c-src/h.h 68 rtstr c-src/h.h 61 @@ -3478,222 +3942,140 @@ rtunion_def c-src/h.h 64 rtx c-src/h.h 62 rtxnp c-src/h.h 71 rtxp c-src/h.h 70 -` ruby-src/test.rb /^ def `(command)$/ -+ ruby-src/test.rb /^ def +(y)$/ -<< ruby-src/test.rb /^ def <<(y)$/ -<= ruby-src/test.rb /^ def <=(y)$/ -<=> ruby-src/test.rb /^ def <=>(y)$/ -== ruby-src/test.rb /^ def ==(y)$/ -=== ruby-src/test.rb /^ def ===(y)$/ -[] ruby-src/test.rb /^ def [](y)$/ -[]= ruby-src/test.rb /^ def []=(y, val)$/ -RUN make-src/Makefile /^RUN=$/ -RUN make-src/Makefile /^RUN=time --quiet --format '%U + %S: %E'$/ -RXINCLUDE make-src/Makefile /^RXINCLUDE=-Iemacs\/src$/ +s c-src/emacs/src/lisp.h 4672 +s c-src/emacs/src/lisp.h 4678 s1 cp-src/c.C 32 -/s1 ps-src/rfc1245.ps /^\/s1 1 string def$/ s2 cp-src/c.C 35 -SAFE_ALLOCA c-src/emacs/src/lisp.h /^#define SAFE_ALLOCA(size) ((size) <= sa_avail \\/ -SAFE_ALLOCA_LISP c-src/emacs/src/lisp.h /^#define SAFE_ALLOCA_LISP(buf, nelt) \\$/ -SAFE_ALLOCA_STRING c-src/emacs/src/lisp.h /^#define SAFE_ALLOCA_STRING(ptr, string) \\$/ -SAFE_FREE c-src/emacs/src/lisp.h /^#define SAFE_FREE() \\$/ -SAFE_NALLOCA c-src/emacs/src/lisp.h /^#define SAFE_NALLOCA(buf, multiplier, nitems) \\/ safe_run_hook_funcall c-src/emacs/src/keyboard.c /^safe_run_hook_funcall (ptrdiff_t nargs, Lisp_Objec/ -safe_run_hooks_1 c-src/emacs/src/keyboard.c /^safe_run_hooks_1 (ptrdiff_t nargs, Lisp_Object *ar/ safe_run_hooks c-src/emacs/src/keyboard.c /^safe_run_hooks (Lisp_Object hook)$/ +safe_run_hooks_1 c-src/emacs/src/keyboard.c /^safe_run_hooks_1 (ptrdiff_t nargs, Lisp_Object *ar/ safe_run_hooks_error c-src/emacs/src/keyboard.c /^safe_run_hooks_error (Lisp_Object error, ptrdiff_t/ -Sample tex-src/gzip.texi /^@node Sample, Invoking gzip, Overview, Top$/ -samp tex-src/texinfo.tex /^\\def\\samp##1{\\realbackslash samp {##1}}%$/ -samp tex-src/texinfo.tex /^\\def\\samp##1{\\realbackslash samp {##1}}$/ samp tex-src/texinfo.tex /^\\def\\samp #1{`\\tclose{#1}'\\null}$/ +samp tex-src/texinfo.tex /^\\def\\samp##1{\\realbackslash samp {##1}}$/ +samp tex-src/texinfo.tex /^\\def\\samp##1{\\realbackslash samp {##1}}%$/ samp tex-src/texinfo.tex /^\\let\\samp=\\indexdummyfont$/ -/sangle ps-src/rfc1245.ps /^\/sangle 1 0 dmatrix defaultmatrix dtransform exch / -SAVE_FUNCPOINTER c-src/emacs/src/lisp.h 2049 +save pyt-src/server.py /^ def save(self):$/ save_getcjmp c-src/emacs/src/keyboard.c /^save_getcjmp (sys_jmp_buf temp)$/ -SAVE_INTEGER c-src/emacs/src/lisp.h 2048 -/savematrix ps-src/rfc1245.ps /^\/savematrix {$/ +save_type c-src/emacs/src/lisp.h /^save_type (struct Lisp_Save_Value *v, int n)$/ savenstr c-src/etags.c /^savenstr (const char *cp, int len)$/ -SAVE_OBJECT c-src/emacs/src/lisp.h 2051 -SAVE_POINTER c-src/emacs/src/lisp.h 2050 -save pyt-src/server.py /^ def save(self):$/ -SAVE_SLOT_BITS c-src/emacs/src/lisp.h 2055 savestr c-src/etags.c /^savestr (const char *cp)$/ -SAVE_TYPE_BITS c-src/emacs/src/lisp.h 2062 -SAVE_TYPE_BITS c-src/emacs/src/lisp.h 2114 -SAVE_TYPE_BITS c-src/emacs/src/lisp.h 2123 -save_type c-src/emacs/src/lisp.h /^save_type (struct Lisp_Save_Value *v, int n)$/ -SAVE_TYPE_FUNCPTR_PTR_OBJ c-src/emacs/src/lisp.h 2076 -SAVE_TYPE_INT_INT c-src/emacs/src/lisp.h 2066 -SAVE_TYPE_INT_INT_INT c-src/emacs/src/lisp.h 2067 -SAVE_TYPE_MEMORY c-src/emacs/src/lisp.h 2080 -SAVE_TYPE_OBJ_OBJ c-src/emacs/src/lisp.h 2069 -SAVE_TYPE_OBJ_OBJ_OBJ c-src/emacs/src/lisp.h 2070 -SAVE_TYPE_OBJ_OBJ_OBJ_OBJ c-src/emacs/src/lisp.h 2071 -SAVE_TYPE_PTR_INT c-src/emacs/src/lisp.h 2073 -SAVE_TYPE_PTR_OBJ c-src/emacs/src/lisp.h 2074 -SAVE_TYPE_PTR_PTR c-src/emacs/src/lisp.h 2075 -SAVE_UNUSED c-src/emacs/src/lisp.h 2047 -SAVE_VALUEP c-src/emacs/src/lisp.h /^SAVE_VALUEP (Lisp_Object x)$/ -SAVE_VALUE_SLOTS c-src/emacs/src/lisp.h 2058 say go-src/test.go /^func say(msg string) {$/ -__sbrk c-src/emacs/src/gmalloc.c 1516 -SBYTES c-src/emacs/src/lisp.h /^SBYTES (Lisp_Object string)$/ +sc tex-src/texinfo.tex /^\\def\\sc#1{{\\smallcaps#1}} % smallcaps font$/ +sc tex-src/texinfo.tex /^\\let\\sc=\\indexdummyfont$/ scan_separators c-src/etags.c /^scan_separators (char *name)$/ -S c.c 156 -SCHARS c-src/emacs/src/lisp.h /^SCHARS (Lisp_Object string)$/ -Scheme_functions c-src/etags.c /^Scheme_functions (FILE *inf)$/ -Scheme_help c-src/etags.c 667 -Scheme_suffixes c-src/etags.c 665 scolonseen c-src/etags.c 2447 scratch c-src/sysdep.h 56 -SCREEN_FP cp-src/screen.hpp /^#define SCREEN_FP(x,y) \\$/ -SCREEN_START cp-src/screen.hpp 33 scroll_bar_parts c-src/emacs/src/keyboard.c 5189 -s c-src/emacs/src/lisp.h 4672 -s c-src/emacs/src/lisp.h 4678 -sc tex-src/texinfo.tex /^\\def\\sc#1{{\\smallcaps#1}} % smallcaps font$/ -sc tex-src/texinfo.tex /^\\let\\sc=\\indexdummyfont$/ -SDATA c-src/emacs/src/lisp.h /^SDATA (Lisp_Object string)$/ -SDTrefGetInteger pas-src/common.pas /^function SDTrefGetInteger : integer;$/ -SDTrefIsEnd pas-src/common.pas /^function SDTrefIsEnd : Boolean;$/ -SDTrefRecToString pas-src/common.pas /^procedure SDTrefRecToString (* ($/ -SDTrefSkipSpaces pas-src/common.pas /^procedure SDTrefSkipSpaces;$/ -SDTrefStringToRec pas-src/common.pas /^procedure SDTrefStringToRec (* ($/ +sec tex-src/texinfo.tex /^\\global\\let\\section = \\appendixsec$/ seccheck tex-src/texinfo.tex /^\\def\\seccheck#1{\\if \\pageno<0 %$/ -secentryfonts tex-src/texinfo.tex /^\\def\\secentryfonts{\\textfonts}$/ secentry tex-src/texinfo.tex /^ \\def\\secentry ##1##2##3##4{}$/ secentry tex-src/texinfo.tex /^\\def\\secentry#1#2#3#4{\\dosecentry{#2.#3\\labelspace/ +secentryfonts tex-src/texinfo.tex /^\\def\\secentryfonts{\\textfonts}$/ secfonts tex-src/texinfo.tex /^\\def\\secfonts{%$/ +secheading tex-src/texinfo.tex /^\\def\\secheading #1#2#3{\\secheadingi {#2.#3\\enspace/ secheadingbreak tex-src/texinfo.tex /^\\def\\secheadingbreak{\\dobreak \\secheadingskip {-10/ secheadingi tex-src/texinfo.tex /^\\def\\secheadingi #1{{\\advance \\secheadingskip by \\/ -secheading tex-src/texinfo.tex /^\\def\\secheading #1#2#3{\\secheadingi {#2.#3\\enspace/ secondary tex-src/texinfo.tex /^\\def\\secondary #1#2{$/ -sec tex-src/texinfo.tex /^\\global\\let\\section = \\appendixsec$/ -section_href perl-src/htlmify-cystic /^sub section_href ($)$/ -section_name perl-src/htlmify-cystic 12 -section_name perl-src/htlmify-cystic /^sub section_name ($)$/ section perl-src/htlmify-cystic 25 section tex-src/texinfo.tex /^\\global\\let\\section = \\appendixsec$/ section tex-src/texinfo.tex /^\\global\\let\\section = \\numberedsec$/ section tex-src/texinfo.tex /^\\global\\let\\section = \\unnumberedsec$/ section tex-src/texinfo.tex /^\\let\\section=\\relax$/ +section_href perl-src/htlmify-cystic /^sub section_href ($)$/ +section_name perl-src/htlmify-cystic /^sub section_name ($)$/ +section_name perl-src/htlmify-cystic 12 section_toc perl-src/htlmify-cystic 15 +section_url perl-src/htlmify-cystic /^sub section_url ()$/ section_url_base perl-src/htlmify-cystic /^sub section_url_base ()$/ section_url_name perl-src/htlmify-cystic /^sub section_url_name ()$/ -section_url perl-src/htlmify-cystic /^sub section_url ()$/ -sectionzzz tex-src/texinfo.tex /^\\outer\\def\\appendixsec{\\parsearg\\appendixsectionzz/ sectionzzz tex-src/texinfo.tex /^\\outer\\def\\appendixsection{\\parsearg\\appendixsecti/ +sectionzzz tex-src/texinfo.tex /^\\outer\\def\\appendixsec{\\parsearg\\appendixsectionzz/ seczzz tex-src/texinfo.tex /^\\def\\infoappendixsec{\\parsearg\\appendixseczzz}$/ seczzz tex-src/texinfo.tex /^\\def\\seczzz #1{\\seccheck{section}%$/ -select_last prol-src/natded.prolog /^select_last([X],X,[]).$/ -SelectLayer lua-src/allegro.lua /^function SelectLayer (layer)$/ select prol-src/natded.prolog /^select(X,[X|Xs],Xs).$/ select-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun select-tags-table ()$/ select-tags-table-mode el-src/emacs/lisp/progmodes/etags.el /^(define-derived-mode select-tags-table-mode specia/ select-tags-table-mode-map el-src/emacs/lisp/progmodes/etags.el /^(defvar select-tags-table-mode-map ; Doc string?$/ select-tags-table-quit el-src/emacs/lisp/progmodes/etags.el /^(defun select-tags-table-quit ()$/ select-tags-table-select el-src/emacs/lisp/progmodes/etags.el /^(defun select-tags-table-select (button)$/ -Self/f ada-src/2ataspri.adb /^ function Self return TCB_Ptr is$/ -Self/f ada-src/2ataspri.ads /^ function Self return TCB_Ptr;$/ -send objc-src/Subprocess.m /^- send:(const char *)string$/ +select_last prol-src/natded.prolog /^select_last([X],X,[]).$/ send objc-src/Subprocess.m /^- send:(const char *)string withNewline:(BOOL)want/ +send objc-src/Subprocess.m /^- send:(const char *)string$/ separator_names c-src/emacs/src/keyboard.c 7372 sepspaces tex-src/texinfo.tex /^\\gdef\\sepspaces{\\def {\\ }}}$/ serializeToVars php-src/lce_functions.php /^ function serializeToVars($prefix)$/ -ServerEdit pyt-src/server.py /^class ServerEdit(Frame):$/ -Server pyt-src/server.py /^class Server:$/ +set cp-src/conway.hpp /^ void set(void) { alive = 1; }$/ +set merc-src/accumulator.m /^:- import_module set.$/ +set tex-src/texinfo.tex /^\\def\\set{\\parsearg\\setxxx}$/ +set-input-interrupt-mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-interrupt-mode", Fset_input_inte/ +set-input-meta-mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-meta-mode", Fset_input_meta_mode/ +set-input-mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-mode", Fset_input_mode, Sset_inp/ +set-output-flow-control c-src/emacs/src/keyboard.c /^DEFUN ("set-output-flow-control", Fset_output_flow/ +set-quit-char c-src/emacs/src/keyboard.c /^DEFUN ("set-quit-char", Fset_quit_char, Sset_quit_/ +setDate cp-src/functions.cpp /^void Date::setDate ( int d , int m , int y ){$/ +setDelegate objc-src/Subprocess.m /^- setDelegate:anObject$/ +setRevertButtonTitle objc-src/PackInsp.m /^-setRevertButtonTitle$/ set_base cp-src/Range.h /^ void set_base (double b) { rng_base = b; }$/ -setchapternewpage tex-src/texinfo.tex /^\\def\\setchapternewpage #1 {\\csname CHAPPAG#1\\endcs/ -setchapterstyle tex-src/texinfo.tex /^\\def\\setchapterstyle #1 {\\csname CHAPF#1\\endcsname/ set_char_table_contents c-src/emacs/src/lisp.h /^set_char_table_contents (Lisp_Object table, ptrdif/ set_char_table_defalt c-src/emacs/src/lisp.h /^set_char_table_defalt (Lisp_Object table, Lisp_Obj/ set_char_table_extras c-src/emacs/src/lisp.h /^set_char_table_extras (Lisp_Object table, ptrdiff_/ set_char_table_purpose c-src/emacs/src/lisp.h /^set_char_table_purpose (Lisp_Object table, Lisp_Ob/ -set cp-src/conway.hpp /^ void set(void) { alive = 1; }$/ -setDate cp-src/functions.cpp /^void Date::setDate ( int d , int m , int y ){$/ -setdeffont tex-src/texinfo.tex /^\\def\\setdeffont #1 {\\csname DEF#1\\endcsname}$/ -setDelegate objc-src/Subprocess.m /^- setDelegate:anObject$/ -setfilename tex-src/texinfo.tex /^\\def\\setfilename{%$/ -setfilename tex-src/texinfo.tex /^ \\global\\let\\setfilename=\\comment % Ignore extra/ set_hash_key_slot c-src/emacs/src/lisp.h /^set_hash_key_slot (struct Lisp_Hash_Table *h, ptrd/ set_hash_value_slot c-src/emacs/src/lisp.h /^set_hash_value_slot (struct Lisp_Hash_Table *h, pt/ set_inc cp-src/Range.h /^ void set_inc (double i) { rng_inc = i; }$/ -set-input-interrupt-mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-interrupt-mode", Fset_input_inte/ -set-input-meta-mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-meta-mode", Fset_input_meta_mode/ -set-input-mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-mode", Fset_input_mode, Sset_inp/ set_limit cp-src/Range.h /^ void set_limit (double l) { rng_limit = l; }$/ -/setmanualfeed ps-src/rfc1245.ps /^\/setmanualfeed {$/ -set merc-src/accumulator.m /^:- import_module set.$/ -set-output-flow-control c-src/emacs/src/keyboard.c /^DEFUN ("set-output-flow-control", Fset_output_flow/ -set_overlay_plist c-src/emacs/src/lisp.h /^set_overlay_plist (Lisp_Object overlay, Lisp_Objec/ -Set_Own_Priority/p ada-src/2ataspri.adb /^ procedure Set_Own_Priority (Prio : System.Any_P/ -Set_Own_Priority/p ada-src/2ataspri.ads /^ procedure Set_Own_Priority (Prio : System.Any_P/ -/setpapername ps-src/rfc1245.ps /^\/setpapername { $/ -/setpattern ps-src/rfc1245.ps /^\/setpattern {$/ +set_overlay_plist c-src/emacs/src/lisp.h /^set_overlay_plist (Lisp_Object overlay, Lisp_Objec/ set_poll_suppress_count c-src/emacs/src/keyboard.c /^set_poll_suppress_count (int count)$/ -Set_Priority/p ada-src/2ataspri.adb /^ procedure Set_Priority$/ -Set_Priority/p ada-src/2ataspri.ads /^ procedure Set_Priority (T : TCB_Ptr; Prio : Sys/ set_prop c-src/emacs/src/keyboard.c /^set_prop (ptrdiff_t idx, Lisp_Object val)$/ -SETPRT f-src/entry.for /^ ENTRY SETPRT ( SHORT, EXPL, LONG, TRACE, D/ -SETPRT f-src/entry.strange /^ ENTRY SETPRT ( SHORT, EXPL, LONG, TRACE, D/ -SETPRT f-src/entry.strange_suffix /^ ENTRY SETPRT ( SHORT, EXPL, LONG, TRACE, D/ -set-quit-char c-src/emacs/src/keyboard.c /^DEFUN ("set-quit-char", Fset_quit_char, Sset_quit_/ -setref tex-src/texinfo.tex /^\\def\\setref#1{%$/ -setref tex-src/texinfo.tex /^\\expandafter\\expandafter\\expandafter\\appendixsetre/ -setRevertButtonTitle objc-src/PackInsp.m /^-setRevertButtonTitle$/ set_save_integer c-src/emacs/src/lisp.h /^set_save_integer (Lisp_Object obj, int n, ptrdiff_/ set_save_pointer c-src/emacs/src/lisp.h /^set_save_pointer (Lisp_Object obj, int n, void *va/ set_string_intervals c-src/emacs/src/lisp.h /^set_string_intervals (Lisp_Object s, INTERVAL i)$/ set_sub_char_table_contents c-src/emacs/src/lisp.h /^set_sub_char_table_contents (Lisp_Object table, pt/ -SET_SYMBOL_BLV c-src/emacs/src/lisp.h /^SET_SYMBOL_BLV (struct Lisp_Symbol *sym, struct Li/ set_symbol_function c-src/emacs/src/lisp.h /^set_symbol_function (Lisp_Object sym, Lisp_Object / -SET_SYMBOL_FWD c-src/emacs/src/lisp.h /^SET_SYMBOL_FWD (struct Lisp_Symbol *sym, union Lis/ set_symbol_next c-src/emacs/src/lisp.h /^set_symbol_next (Lisp_Object sym, struct Lisp_Symb/ set_symbol_plist c-src/emacs/src/lisp.h /^set_symbol_plist (Lisp_Object sym, Lisp_Object pli/ -SET_SYMBOL_VAL c-src/emacs/src/lisp.h /^# define SET_SYMBOL_VAL(sym, v) lisp_h_SET_SYMBOL_/ -set tex-src/texinfo.tex /^\\def\\set{\\parsearg\\setxxx}$/ +set_upto merc-src/accumulator.m /^:- func set_upto(accu_case, int) = set(accu_goal_i/ +set_waiting_for_input c-src/emacs/src/keyboard.c /^set_waiting_for_input (struct timespec *time_to_cl/ +setchapternewpage tex-src/texinfo.tex /^\\def\\setchapternewpage #1 {\\csname CHAPPAG#1\\endcs/ +setchapterstyle tex-src/texinfo.tex /^\\def\\setchapterstyle #1 {\\csname CHAPF#1\\endcsname/ +setdeffont tex-src/texinfo.tex /^\\def\\setdeffont #1 {\\csname DEF#1\\endcsname}$/ +setfilename tex-src/texinfo.tex /^ \\global\\let\\setfilename=\\comment % Ignore extra/ +setfilename tex-src/texinfo.tex /^\\def\\setfilename{%$/ +setref tex-src/texinfo.tex /^\\def\\setref#1{%$/ +setref tex-src/texinfo.tex /^\\expandafter\\expandafter\\expandafter\\appendixsetre/ settitle tex-src/texinfo.tex /^\\def\\settitle{\\parsearg\\settitlezzz}$/ settitlezzz tex-src/texinfo.tex /^\\def\\settitlezzz #1{\\gdef\\thistitle{#1}}$/ setup cp-src/c.C 5 -set_upto merc-src/accumulator.m /^:- func set_upto(accu_case, int) = set(accu_goal_i/ -set_waiting_for_input c-src/emacs/src/keyboard.c /^set_waiting_for_input (struct timespec *time_to_cl/ setxxx tex-src/texinfo.tex /^\\def\\setxxx #1{$/ -/SF ps-src/rfc1245.ps /^\/SF { $/ sf tex-src/texinfo.tex /^\\def\\sf{\\fam=\\sffam \\tensf}$/ sf tex-src/texinfo.tex /^\\def\\sf{\\realbackslash sf}%$/ -@sf tex-src/texinfo.tex /^\\ifhmode\\edef\\@sf{\\spacefactor\\the\\spacefactor}\\\/\\/ -@sf tex-src/texinfo.tex /^\\let\\@sf\\empty$/ sf tex-src/texinfo.tex /^{\\let\\tentt=\\sectt \\let\\tt=\\sectt \\let\\sf=\\sectt$/ shift cp-src/functions.cpp /^void Date::shift ( void ){\/\/Shift this date to pre/ shortchapentry tex-src/texinfo.tex /^\\def\\shortchapentry#1#2#3{%$/ shortcontents tex-src/texinfo.tex /^\\let\\shortcontents = \\summarycontents$/ shortunnumberedentry tex-src/texinfo.tex /^\\def\\shortunnumberedentry#1#2{%$/ -should_attempt_accu_transform_2 merc-src/accumulator.m /^:- pred should_attempt_accu_transform_2(module_inf/ -should_attempt_accu_transform merc-src/accumulator.m /^:- pred should_attempt_accu_transform(module_info:/ shouldLoad objc-src/PackInsp.m /^-(BOOL)shouldLoad$/ +should_attempt_accu_transform merc-src/accumulator.m /^:- pred should_attempt_accu_transform(module_info:/ +should_attempt_accu_transform_2 merc-src/accumulator.m /^:- pred should_attempt_accu_transform_2(module_inf/ should_see_this_array_type cp-src/c.C 156 should_see_this_function_pointer cp-src/c.C 153 should_see_this_one_enclosed_in_extern_C cp-src/c.C 149 show erl-src/gs_dialog.erl /^show(Module, Title, Message, Args) ->$/ showError objc-src/Subprocess.m /^showError (const char *errorString, id theDelegate/ -show_help_echo c-src/emacs/src/keyboard.c /^show_help_echo (Lisp_Object help, Lisp_Object wind/ showInfo objc-src/PackInsp.m /^-showInfo:sender$/ +show_help_echo c-src/emacs/src/keyboard.c /^show_help_echo (Lisp_Object help, Lisp_Object wind/ sig c-src/emacs/src/keyboard.c 7238 -signal_handler1 c-src/h.h 83 signal_handler c-src/h.h 82 +signal_handler1 c-src/h.h 83 signal_handler_t c-src/h.h 94 -SimpleCalc objcpp-src/SimpleCalc.H /^@interface SimpleCalc:Object$/ simulation html-src/software.html /^Software that I wrote for supporting my research a/ -singlecodeindexer tex-src/texinfo.tex /^\\def\\singlecodeindexer #1{\\doind{\\indexname}{\\code/ -singleindexer tex-src/texinfo.tex /^\\def\\singleindexer #1{\\doind{\\indexname}{#1}}$/ single_kboard c-src/emacs/src/keyboard.c 89 single_kboard_state c-src/emacs/src/keyboard.c /^single_kboard_state ()$/ -SINGLE_LETTER_MOD c-src/emacs/src/keyboard.c 6212 -SINGLE_LETTER_MOD c-src/emacs/src/keyboard.c 6763 -SINGLE_LETTER_MOD c-src/emacs/src/keyboard.c /^#define SINGLE_LETTER_MOD(BIT) \\$/ +singlecodeindexer tex-src/texinfo.tex /^\\def\\singlecodeindexer #1{\\doind{\\indexname}{\\code/ +singleindexer tex-src/texinfo.tex /^\\def\\singleindexer #1{\\doind{\\indexname}{#1}}$/ singlespace tex-src/texinfo.tex /^\\def\\singlespace{%$/ -site cp-src/conway.hpp 5 site cp-src/conway.hpp /^ site(int xi, int yi): x(xi), y(yi), alive(0) {/ +site cp-src/conway.hpp 5 size c-src/emacs/src/gmalloc.c 156 size c-src/emacs/src/gmalloc.c 163 size c-src/emacs/src/gmalloc.c 1867 @@ -3701,16 +4083,12 @@ size c-src/emacs/src/lisp.h 1364 size c-src/emacs/src/lisp.h 1390 size c-src/etags.c 236 size c-src/etags.c 2522 -SIZEFORMAT objc-src/PackInsp.m 57 skeyseen c-src/etags.c 2445 -SkipBlanks pas-src/common.pas /^function SkipBlanks; (*($/ -SkipChars pas-src/common.pas /^function SkipChars; (*($/ skip_name c-src/etags.c /^skip_name (char *cp)$/ skip_non_spaces c-src/etags.c /^skip_non_spaces (char *cp)$/ skip_spaces c-src/etags.c /^skip_spaces (char *cp)$/ -SkipSpaces pas-src/common.pas /^procedure SkipSpaces; (* (Str : NameString; var I / -sl tex-src/texinfo.tex /^\\def\\sl{\\realbackslash sl }%$/ sl tex-src/texinfo.tex /^ \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/ +sl tex-src/texinfo.tex /^\\def\\sl{\\realbackslash sl }%$/ smallbook tex-src/texinfo.tex /^\\def\\smallbook{$/ smallbook tex-src/texinfo.tex /^\\let\\smallbook=\\relax$/ smallcaps tex-src/texinfo.tex /^ \\let\\tenbf=\\chapbf \\let\\tentt=\\chaptt \\let\\small/ @@ -3728,72 +4106,31 @@ snarf-tag-function el-src/emacs/lisp/progmodes/etags.el /^(defvar snarf-tag-func snone c-src/etags.c 2443 solutions merc-src/accumulator.m /^:- import_module solutions.$/ some_mouse_moved c-src/emacs/src/keyboard.c /^some_mouse_moved (void)$/ -#some-storage forth-src/test-forth.fth /^2000 buffer: #some-storage$/ +sp tex-src/texinfo.tex /^\\def\\sp{\\parsearg\\spxxx}$/ +space tex-src/texinfo.tex /^ {#2\\labelspace #1}\\dotfill\\doshortpageno{#3}}%/ +space tex-src/texinfo.tex /^ \\dosubsubsecentry{#2.#3.#4.#5\\labelspace#1}{#6}}/ +space tex-src/texinfo.tex /^\\def\\chapentry#1#2#3{\\dochapentry{#2\\labelspace#1}/ +space tex-src/texinfo.tex /^\\def\\secentry#1#2#3#4{\\dosecentry{#2.#3\\labelspace/ +space tex-src/texinfo.tex /^\\def\\subsecentry#1#2#3#4#5{\\dosubsecentry{#2.#3.#4/ spacer c-src/emacs/src/lisp.h 1975 spacer c-src/emacs/src/lisp.h 1982 spacer c-src/emacs/src/lisp.h 2036 spacer c-src/emacs/src/lisp.h 2205 -spacesplitfoo tex-src/texinfo.tex /^\\long\\gdef\\spacesplitfoo#1#2 #3#4\\spacesplitfoo{%$/ spacesplit tex-src/texinfo.tex /^\\gdef\\spacesplit#1#2^^M{\\endgroup\\spacesplitfoo{#1/ -space tex-src/texinfo.tex /^ {#2\\labelspace #1}\\dotfill\\doshortpageno{#3}}%/ -space tex-src/texinfo.tex /^\\def\\chapentry#1#2#3{\\dochapentry{#2\\labelspace#1}/ -space tex-src/texinfo.tex /^\\def\\secentry#1#2#3#4{\\dosecentry{#2.#3\\labelspace/ -space tex-src/texinfo.tex /^\\def\\subsecentry#1#2#3#4#5{\\dosubsecentry{#2.#3.#4/ -space tex-src/texinfo.tex /^ \\dosubsubsecentry{#2.#3.#4.#5\\labelspace#1}{#6}}/ -specbinding c-src/emacs/src/lisp.h 2955 +spacesplitfoo tex-src/texinfo.tex /^\\long\\gdef\\spacesplitfoo#1#2 #3#4\\spacesplitfoo{%$/ specbind_tag c-src/emacs/src/lisp.h 2943 +specbinding c-src/emacs/src/lisp.h 2955 specheader tex-src/texinfo.tex /^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/ specialsymbol prol-src/natded.prolog /^specialsymbol(C1,C2,S):-$/ -SPECPDL_BACKTRACE c-src/emacs/src/lisp.h 2948 -SPECPDL_INDEX c-src/emacs/src/lisp.h /^SPECPDL_INDEX (void)$/ -SPECPDL_LET c-src/emacs/src/lisp.h 2949 -SPECPDL_LET_DEFAULT c-src/emacs/src/lisp.h 2952 -SPECPDL_LET_LOCAL c-src/emacs/src/lisp.h 2951 -SPECPDL_UNWIND c-src/emacs/src/lisp.h 2944 -SPECPDL_UNWIND_INT c-src/emacs/src/lisp.h 2946 -SPECPDL_UNWIND_PTR c-src/emacs/src/lisp.h 2945 -SPECPDL_UNWIND_VOID c-src/emacs/src/lisp.h 2947 specx\defspecheader tex-src/texinfo.tex /^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/ splitexp prol-src/natded.prolog /^splitexp(E,E,('NIL','NIL')):-!.$/ splitoff tex-src/texinfo.tex /^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/ -/S ps-src/rfc1245.ps /^\/S { $/ -sp tex-src/texinfo.tex /^\\def\\sp{\\parsearg\\spxxx}$/ spxxx tex-src/texinfo.tex /^\\def\\spxxx #1{\\par \\vskip #1\\baselineskip}$/ -Square.something:Bar lua-src/test.lua /^function Square.something:Bar ()$/ srclist make-src/Makefile /^srclist: Makefile$/ -SRCS make-src/Makefile /^SRCS=Makefile ${ADASRC} ${ASRC} ${CSRC} ${CPSRC} $/ -SREF c-src/emacs/src/lisp.h /^SREF (Lisp_Object string, ptrdiff_t index)$/ ss3 c.c 255 -SSDATA c-src/emacs/src/lisp.h /^SSDATA (Lisp_Object string)$/ -SSET c-src/emacs/src/lisp.h /^SSET (Lisp_Object string, ptrdiff_t index, unsigne/ sss1 c.c 252 sss2 c.c 253 sstab prol-src/natded.prolog /^sstab(2,'C',',').$/ -stack c.c 155 -STACK_CONS c-src/emacs/src/lisp.h /^#define STACK_CONS(a, b) \\$/ -stagseen c-src/etags.c 2446 -standalone make-src/Makefile /^standalone:$/ -startcontents tex-src/texinfo.tex /^\\def\\startcontents#1{%$/ -start c-src/emacs/src/keyboard.c 8753 -start c-src/emacs/src/lisp.h 2038 -start c-src/emacs/src/regex.h 431 -StartDay cp-src/functions.cpp /^Date StartDay(Date a,int days){\/\/Function to calcu/ -startenumeration tex-src/texinfo.tex /^\\def\\startenumeration#1{%$/ -start php-src/lce_functions.php /^ function start($line, $class)$/ -start_polling c-src/emacs/src/keyboard.c /^start_polling (void)$/ -=starts-with-equals! scm-src/test.scm /^(define =starts-with-equals! #t)$/ -start_up prol-src/natded.prolog /^start_up:-$/ -start y-src/cccp.y 143 -STATE_ABORT php-src/lce_functions.php 25 -STATE_COMPRESSD objc-src/PackInsp.m 54 -STATE_INSTALLED objc-src/PackInsp.m 53 -STATE_LOOP php-src/lce_functions.php 27 -STATE_OK php-src/lce_functions.php 26 -state_protected_p c-src/emacs/src/gmalloc.c 401 -STAT_EQ objc-src/PackInsp.m /^#define STAT_EQ(s1, s2) ((s1)->st_ino == (s2)->st_/ -statetable html-src/algrthms.html /^Next$/ -STATE_UNINSTALLED objc-src/PackInsp.m 52 -staticetags make-src/Makefile /^staticetags:$/ st_C_attribute c-src/etags.c 2209 st_C_class c-src/etags.c 2212 st_C_define c-src/etags.c 2213 @@ -3809,75 +4146,73 @@ st_C_operator c-src/etags.c 2211 st_C_struct c-src/etags.c 2213 st_C_template c-src/etags.c 2212 st_C_typedef c-src/etags.c 2213 -STDIN c-src/etags.c 408 -STDIN c-src/etags.c 411 +st_none c-src/etags.c 2206 +stack c.c 155 +stagseen c-src/etags.c 2446 +standalone make-src/Makefile /^standalone:$/ +start c-src/emacs/src/keyboard.c 8753 +start c-src/emacs/src/lisp.h 2038 +start c-src/emacs/src/regex.h 431 +start php-src/lce_functions.php /^ function start($line, $class)$/ +start y-src/cccp.y 143 +start_polling c-src/emacs/src/keyboard.c /^start_polling (void)$/ +start_up prol-src/natded.prolog /^start_up:-$/ +startcontents tex-src/texinfo.tex /^\\def\\startcontents#1{%$/ +startenumeration tex-src/texinfo.tex /^\\def\\startenumeration#1{%$/ +state_protected_p c-src/emacs/src/gmalloc.c 401 +statetable html-src/algrthms.html /^Next$/ +staticetags make-src/Makefile /^staticetags:$/ step cp-src/clheir.hpp /^ virtual void step(void) { }$/ step cp-src/conway.hpp /^ void step(void) { alive = next_alive; }$/ step_everybody cp-src/clheir.cpp /^void step_everybody(void)$/ -st_none c-src/etags.c 2206 -STOP_POLLING c-src/emacs/src/keyboard.c 2166 stop_polling c-src/emacs/src/keyboard.c /^stop_polling (void)$/ -stored_goal_plain_call merc-src/accumulator.m /^:- inst stored_goal_plain_call for goal_store.stor/ store_info merc-src/accumulator.m /^:- type store_info$/ store_user_signal_events c-src/emacs/src/keyboard.c /^store_user_signal_events (void)$/ +stored_goal_plain_call merc-src/accumulator.m /^:- inst stored_goal_plain_call for goal_store.stor/ +str go-src/test1.go 9 strcaseeq c-src/etags.c /^#define strcaseeq(s,t) (assert ((s)!=NULL && (t)!=/ streq c-src/etags.c /^#define streq(s,t) (assert ((s)!=NULL || (t)!=NULL/ -str go-src/test1.go 9 -STRING_BYTES_BOUND c-src/emacs/src/lisp.h 1261 -STRING_BYTES c-src/emacs/src/lisp.h /^STRING_BYTES (struct Lisp_String *s)$/ -string_intervals c-src/emacs/src/lisp.h /^string_intervals (Lisp_Object s)$/ string merc-src/accumulator.m /^:- import_module string.$/ -STRING_MULTIBYTE c-src/emacs/src/lisp.h /^STRING_MULTIBYTE (Lisp_Object str)$/ -STRING_SET_CHARS c-src/emacs/src/lisp.h /^STRING_SET_CHARS (Lisp_Object string, ptrdiff_t ne/ -STRING_SET_MULTIBYTE c-src/emacs/src/lisp.h /^#define STRING_SET_MULTIBYTE(STR) \\$/ -STRING_SET_UNIBYTE c-src/emacs/src/lisp.h /^#define STRING_SET_UNIBYTE(STR) \\$/ +string_intervals c-src/emacs/src/lisp.h /^string_intervals (Lisp_Object s)$/ stripLine php-src/lce_functions.php /^ function stripLine($line, $class)$/ stripname pas-src/common.pas /^function stripname; (* ($/ -StripPath pas-src/common.pas /^function StripPath; (*($/ strncaseeq c-src/etags.c /^#define strncaseeq(s,t,n) (assert ((s)!=NULL && (t/ strneq c-src/etags.c /^#define strneq(s,t,n) (assert ((s)!=NULL || (t)!=N/ strong tex-src/texinfo.tex /^\\let\\strong=\\b$/ strong tex-src/texinfo.tex /^\\let\\strong=\\indexdummyfont$/ -__str__ pyt-src/server.py /^ def __str__(self):$/ structdef c-src/etags.c 2448 stuff_buffered_input c-src/emacs/src/keyboard.c /^stuff_buffered_input (Lisp_Object stuffstring)$/ -SUB_CHAR_TABLE_OFFSET c-src/emacs/src/lisp.h 1701 -SUB_CHAR_TABLE_P c-src/emacs/src/lisp.h /^SUB_CHAR_TABLE_P (Lisp_Object a)$/ subheading tex-src/texinfo.tex /^\\def\\subheading{\\parsearg\\subsecheadingi}$/ -subprocessDone objc-src/PackInsp.m /^-subprocessDone:(Subprocess *)sender$/ subprocess objc-src/PackInsp.m /^-subprocess:(Subprocess *)sender output:(char *)bu/ -Subprocess objc-src/Subprocess.h 41 -Subprocess objc-src/Subprocess.h /^@interface Subprocess:Object$/ -SUBRP c-src/emacs/src/lisp.h /^SUBRP (Lisp_Object a)$/ -subsecentryfonts tex-src/texinfo.tex /^\\let\\subsecentryfonts = \\textfonts$/ +subprocessDone objc-src/PackInsp.m /^-subprocessDone:(Subprocess *)sender$/ +subsec tex-src/texinfo.tex /^\\global\\let\\subsection = \\appendixsubsec$/ +subsec tex-src/texinfo.tex /^\\let\\subsec=\\relax$/ subsecentry tex-src/texinfo.tex /^ \\def\\subsecentry ##1##2##3##4##5{}$/ subsecentry tex-src/texinfo.tex /^\\def\\subsecentry#1#2#3#4#5{\\dosubsecentry{#2.#3.#4/ +subsecentryfonts tex-src/texinfo.tex /^\\let\\subsecentryfonts = \\textfonts$/ subsecfonts tex-src/texinfo.tex /^\\def\\subsecfonts{%$/ +subsecheading tex-src/texinfo.tex /^\\def\\subsecheading #1#2#3#4{\\subsecheadingi {#2.#3/ subsecheadingbreak tex-src/texinfo.tex /^\\def\\subsecheadingbreak{\\dobreak \\subsecheadingski/ subsecheadingi tex-src/texinfo.tex /^\\def\\subsecheadingi #1{{\\advance \\subsecheadingski/ -subsecheading tex-src/texinfo.tex /^\\def\\subsecheading #1#2#3#4{\\subsecheadingi {#2.#3/ -subsec tex-src/texinfo.tex /^\\global\\let\\subsection = \\appendixsubsec$/ -subsec tex-src/texinfo.tex /^\\let\\subsec=\\relax$/ -subsection_marker perl-src/htlmify-cystic 161 subsection perl-src/htlmify-cystic 26 subsection tex-src/texinfo.tex /^\\global\\let\\subsection = \\appendixsubsec$/ subsection tex-src/texinfo.tex /^\\global\\let\\subsection = \\numberedsubsec$/ subsection tex-src/texinfo.tex /^\\global\\let\\subsection = \\unnumberedsubsec$/ subsection tex-src/texinfo.tex /^\\let\\subsection=\\relax$/ +subsection_marker perl-src/htlmify-cystic 161 subseczzz tex-src/texinfo.tex /^\\def\\infoappendixsubsec{\\parsearg\\appendixsubseczz/ subseczzz tex-src/texinfo.tex /^\\outer\\def\\appendixsubsec{\\parsearg\\appendixsubsec/ -substitute c-src/etags.c /^substitute (char *in, char *out, struct re_registe/ subst prol-src/natded.prolog /^subst(var(Y),var(X),M,N):-$/ -SubString pas-src/common.pas /^function SubString; (*($/ +substitute c-src/etags.c /^substitute (char *in, char *out, struct re_registe/ subsubheading tex-src/texinfo.tex /^\\def\\subsubheading{\\parsearg\\subsubsecheadingi}$/ -subsubsecentryfonts tex-src/texinfo.tex /^\\let\\subsubsecentryfonts = \\textfonts$/ +subsubsec tex-src/texinfo.tex /^\\global\\let\\subsubsection = \\appendixsubsubsec$/ +subsubsec tex-src/texinfo.tex /^\\let\\subsubsec=\\relax$/ subsubsecentry tex-src/texinfo.tex /^ \\def\\subsubsecentry ##1##2##3##4##5##6{}$/ subsubsecentry tex-src/texinfo.tex /^\\def\\subsubsecentry#1#2#3#4#5#6{%$/ +subsubsecentryfonts tex-src/texinfo.tex /^\\let\\subsubsecentryfonts = \\textfonts$/ subsubsecfonts tex-src/texinfo.tex /^\\def\\subsubsecfonts{\\subsecfonts} % Maybe this sho/ -subsubsecheadingi tex-src/texinfo.tex /^\\def\\subsubsecheadingi #1{{\\advance \\subsecheading/ subsubsecheading tex-src/texinfo.tex /^\\def\\subsubsecheading #1#2#3#4#5{\\subsubsecheading/ -subsubsec tex-src/texinfo.tex /^\\global\\let\\subsubsection = \\appendixsubsubsec$/ -subsubsec tex-src/texinfo.tex /^\\let\\subsubsec=\\relax$/ +subsubsecheadingi tex-src/texinfo.tex /^\\def\\subsubsecheadingi #1{{\\advance \\subsecheading/ subsubsection perl-src/htlmify-cystic 27 subsubsection tex-src/texinfo.tex /^\\global\\let\\subsubsection = \\appendixsubsubsec$/ subsubsection tex-src/texinfo.tex /^\\global\\let\\subsubsection = \\numberedsubsubsec$/ @@ -3885,9 +4220,9 @@ subsubsection tex-src/texinfo.tex /^\\global\\let\\subsubsection = \\unnumbereds subsubsection tex-src/texinfo.tex /^\\let\\subsubsection=\\relax$/ subsubseczzz tex-src/texinfo.tex /^\\def\\infoappendixsubsubsec{\\parsearg\\appendixsubsu/ subsubseczzz tex-src/texinfo.tex /^\\outer\\def\\appendixsubsubsec{\\parsearg\\appendixsub/ +subtitle tex-src/texinfo.tex /^ \\def\\subtitle{\\parsearg\\subtitlezzz}%$/ subtitlefont tex-src/texinfo.tex /^ \\def\\subtitlefont{\\subtitlerm \\normalbaselinesk/ subtitlerm tex-src/texinfo.tex /^ \\let\\subtitlerm=\\tenrm$/ -subtitle tex-src/texinfo.tex /^ \\def\\subtitle{\\parsearg\\subtitlezzz}%$/ subtitlezzz tex-src/texinfo.tex /^ \\def\\subtitlezzz##1{{\\subtitlefont \\rightline{#/ subtle ruby-src/test1.ru /^ :tee ; attr_reader :subtle$/ subtree prol-src/natded.prolog /^subtree(T,T).$/ @@ -3901,37 +4236,18 @@ sval y-src/cccp.y 116 swallow_events c-src/emacs/src/keyboard.c /^swallow_events (bool do_display)$/ switch_line_buffers c-src/etags.c /^#define switch_line_buffers() (curndx = 1 - curndx/ sxhash_combine c-src/emacs/src/lisp.h /^sxhash_combine (EMACS_UINT x, EMACS_UINT y)$/ -SXHASH_REDUCE c-src/emacs/src/lisp.h /^SXHASH_REDUCE (EMACS_UINT x)$/ -SYMBOL_BLV c-src/emacs/src/lisp.h /^SYMBOL_BLV (struct Lisp_Symbol *sym)$/ -SYMBOL_CONSTANT_P c-src/emacs/src/lisp.h /^# define SYMBOL_CONSTANT_P(sym) lisp_h_SYMBOL_CONS/ +sym_type c-src/etags.c 2204 symbol c-src/emacs/src/lisp.h 2980 -SYMBOL_FORWARDED c-src/emacs/src/lisp.h 651 -SYMBOL_FWD c-src/emacs/src/lisp.h /^SYMBOL_FWD (struct Lisp_Symbol *sym)$/ -SYMBOL_INDEX c-src/emacs/src/lisp.h /^#define SYMBOL_INDEX(sym) i##sym$/ symbol_interned c-src/emacs/src/lisp.h 639 -SYMBOL_INTERNED c-src/emacs/src/lisp.h 642 -SYMBOL_INTERNED_IN_INITIAL_OBARRAY c-src/emacs/src/lisp.h 643 -SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P c-src/emacs/src/lisp.h /^SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P (Lisp_Object / -SYMBOL_INTERNED_P c-src/emacs/src/lisp.h /^SYMBOL_INTERNED_P (Lisp_Object sym)$/ -SYMBOL_LOCALIZED c-src/emacs/src/lisp.h 650 symbol_name c-src/emacs/src/lisp.h 1687 -SYMBOL_NAME c-src/emacs/src/lisp.h /^SYMBOL_NAME (Lisp_Object sym)$/ -SYMBOLP c-src/emacs/src/lisp.h /^# define SYMBOLP(x) lisp_h_SYMBOLP (x)$/ -SYMBOL_PLAINVAL c-src/emacs/src/lisp.h 648 symbol_redirect c-src/emacs/src/lisp.h 646 -SYMBOL_UNINTERNED c-src/emacs/src/lisp.h 641 -SYMBOL_VAL c-src/emacs/src/lisp.h /^# define SYMBOL_VAL(sym) lisp_h_SYMBOL_VAL (sym)$/ -SYMBOL_VARALIAS c-src/emacs/src/lisp.h 649 syms_of_abbrev c-src/abbrev.c /^syms_of_abbrev ()$/ syms_of_keyboard c-src/emacs/src/keyboard.c /^syms_of_keyboard (void)$/ -sym_type c-src/etags.c 2204 synchronize_system_messages_locale c-src/emacs/src/lisp.h /^INLINE void synchronize_system_messages_locale (vo/ synchronize_system_time_locale c-src/emacs/src/lisp.h /^INLINE void synchronize_system_time_locale (void) / syncodeindex tex-src/texinfo.tex /^\\def\\syncodeindex #1 #2 {%$/ synindex tex-src/texinfo.tex /^\\def\\synindex #1 #2 {%$/ syntax c-src/emacs/src/regex.h 350 -SYSCALL c-src/machsyscalls.c /^#define SYSCALL(name, number, type, args, typed_ar/ -syscall_error c-src/sysdep.h 34 sys_jmp_buf c-src/emacs/src/lisp.h 2906 sys_jmp_buf c-src/emacs/src/lisp.h 2910 sys_jmp_buf c-src/emacs/src/lisp.h 2916 @@ -3941,12 +4257,14 @@ sys_longjmp c-src/emacs/src/lisp.h /^# define sys_longjmp(j, v) siglongjmp (j, v sys_setjmp c-src/emacs/src/lisp.h /^# define sys_setjmp(j) _setjmp (j)$/ sys_setjmp c-src/emacs/src/lisp.h /^# define sys_setjmp(j) setjmp (j)$/ sys_setjmp c-src/emacs/src/lisp.h /^# define sys_setjmp(j) sigsetjmp (j, 0)$/ -System.Task_Primitives/b ada-src/2ataspri.adb /^package body System.Task_Primitives is$/ -System.Task_Primitives/s ada-src/2ataspri.ads /^package System.Task_Primitives is$/ +syscall_error c-src/sysdep.h 34 +t cp-src/c.C 52 +t tex-src/texinfo.tex /^\\def\\t##1{\\realbackslash r {##1}}%$/ +t tex-src/texinfo.tex /^\\def\\t#1{{\\tt \\exhyphenpenalty=10000\\rawbackslash / +t tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ +t tex-src/texinfo.tex /^\\let\\t=\\indexdummyfont$/ t1 cp-src/c.C 34 t2 cp-src/c.C 38 -T2 cp-src/fail.C 16 -T3 c.c 163 tab_count_words c-src/tab.c /^int tab_count_words(char **tab)$/ tab_delete_first c-src/tab.c /^int tab_delete_first(char **tab)$/ tab_fill c-src/tab.c /^char **tab_fill(char *str, char delim)$/ @@ -3955,6 +4273,18 @@ table tex-src/texinfo.tex /^\\def\\table{\\begingroup\\inENV\\obeylines\\obeyspa tablex tex-src/texinfo.tex /^\\gdef\\tablex #1^^M{%$/ tabley tex-src/texinfo.tex /^\\gdef\\tabley#1#2 #3 #4 #5 #6 #7\\endtabley{\\endgrou/ tablez tex-src/texinfo.tex /^\\def\\tablez #1#2#3#4#5#6{%$/ +tag-any-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-any-match-p (_tag)$/ +tag-exact-file-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-exact-file-name-match-p (tag)$/ +tag-exact-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-exact-match-p (tag)$/ +tag-file-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-file-name-match-p (tag)$/ +tag-find-file-of-tag el-src/emacs/lisp/progmodes/etags.el /^(defun tag-find-file-of-tag (file) ; Doc string?$/ +tag-find-file-of-tag-noselect el-src/emacs/lisp/progmodes/etags.el /^(defun tag-find-file-of-tag-noselect (file)$/ +tag-implicit-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-implicit-name-match-p (tag)$/ +tag-lines-already-matched el-src/emacs/lisp/progmodes/etags.el /^(defvar tag-lines-already-matched nil$/ +tag-partial-file-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-partial-file-name-match-p (_tag)$/ +tag-re-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-re-match-p (re)$/ +tag-symbol-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-symbol-match-p (tag)$/ +tag-word-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-word-match-p (tag)$/ tag1 c-src/dostorture.c /^(*tag1 (sig, handler)) ()$/ tag1 c-src/h.h 110 tag1 c-src/torture.c /^(*tag1 (sig, handler)) ()$/ @@ -3968,22 +4298,12 @@ tag5 c-src/dostorture.c /^tag5 (handler, arg)$/ tag5 c-src/torture.c /^tag5 (handler, arg)$/ tag6 c-src/dostorture.c /^tag6 (void (*handler) (void *), void *arg)$/ tag6 c-src/torture.c /^tag6 (void (*handler) (void *), void *arg)$/ -tag-any-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-any-match-p (_tag)$/ -tag-exact-file-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-exact-file-name-match-p (tag)$/ -tag-exact-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-exact-match-p (tag)$/ -tag-file-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-file-name-match-p (tag)$/ -tag-find-file-of-tag el-src/emacs/lisp/progmodes/etags.el /^(defun tag-find-file-of-tag (file) ; Doc string?$/ -tag-find-file-of-tag-noselect el-src/emacs/lisp/progmodes/etags.el /^(defun tag-find-file-of-tag-noselect (file)$/ -taggedfname c-src/etags.c 207 -tag-implicit-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-implicit-name-match-p (tag)$/ -tag-lines-already-matched el-src/emacs/lisp/progmodes/etags.el /^(defvar tag-lines-already-matched nil$/ tag_or_ch c-src/emacs/src/lisp.h 3026 -tag-partial-file-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-partial-file-name-match-p (_tag)$/ -TAG_PTR c-src/emacs/src/lisp.h /^#define TAG_PTR(tag, ptr) \\$/ -tag-re-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-re-match-p (re)$/ +taggedfname c-src/etags.c 207 +tags make-src/Makefile /^tags: TAGS$/ tags-add-tables el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-add-tables 'ask-user$/ -tags-apropos-additional-actions el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-apropos-additional-actions nil$/ tags-apropos el-src/emacs/lisp/progmodes/etags.el /^(defun tags-apropos (regexp)$/ +tags-apropos-additional-actions el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-apropos-additional-actions nil$/ tags-apropos-function el-src/emacs/lisp/progmodes/etags.el /^(defvar tags-apropos-function nil$/ tags-apropos-verbose el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-apropos-verbose nil$/ tags-case-fold-search el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-case-fold-search 'default$/ @@ -4005,8 +4325,6 @@ tags-loop-eval el-src/emacs/lisp/progmodes/etags.el /^(defun tags-loop-eval (for tags-loop-operate el-src/emacs/lisp/progmodes/etags.el /^(defvar tags-loop-operate nil$/ tags-loop-revert-buffers el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-loop-revert-buffers nil$/ tags-loop-scan el-src/emacs/lisp/progmodes/etags.el /^(defvar tags-loop-scan$/ -TAGS make-src/Makefile /^TAGS: etags.c$/ -tags make-src/Makefile /^tags: TAGS$/ tags-next-table el-src/emacs/lisp/progmodes/etags.el /^(defun tags-next-table ()$/ tags-query-replace el-src/emacs/lisp/progmodes/etags.el /^(defun tags-query-replace (from to &optional delim/ tags-recognize-empty-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun tags-recognize-empty-tags-table ()$/ @@ -4032,34 +4350,15 @@ tags-table-set-list el-src/emacs/lisp/progmodes/etags.el /^(defvar tags-table-se tags-tag-face el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-tag-face 'default$/ tags-verify-table el-src/emacs/lisp/progmodes/etags.el /^(defun tags-verify-table (file)$/ tags-with-face el-src/emacs/lisp/progmodes/etags.el /^(defmacro tags-with-face (face &rest body)$/ -tag-symbol-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-symbol-match-p (tag)$/ -TAG_SYMOFFSET c-src/emacs/src/lisp.h /^#define TAG_SYMOFFSET(offset) \\$/ -tag-word-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-word-match-p (tag)$/ -Tapes tex-src/gzip.texi /^@node Tapes, Problems, Environment, Top$/ target_multibyte c-src/emacs/src/regex.h 407 -TAS_Cell/t ada-src/2ataspri.ads /^ type TAS_Cell is$/ -TAS_Cell/t ada-src/2ataspri.ads /^ type TAS_Cell is private;$/ -Task_Control_Block/t ada-src/2ataspri.ads /^ type Task_Control_Block is record$/ -Task_Storage_Size/t ada-src/2ataspri.ads /^ type Task_Storage_Size is new Interfaces.C.size/ -Task_Type/b ada-src/etags-test-for.ada /^ task body Task_Type is$/ -Task_Type/b ada-src/waroquiers.ada /^ task body Task_Type is$/ -Task_Type/k ada-src/etags-test-for.ada /^ task type Task_Type is$/ -Task_Type/k ada-src/waroquiers.ada /^ task type Task_Type is$/ -TCB_Ptr/t ada-src/2ataspri.ads /^ type TCB_Ptr is access all Task_Control_Block;$/ -TCLFLAGS make-src/Makefile /^TCLFLAGS=--lang=none --regex='\/proc[ \\t]+\\([^ \\t]+/ -tclose tex-src/texinfo.tex /^\\def\\tclose##1{\\realbackslash tclose {##1}}%$/ tclose tex-src/texinfo.tex /^\\def\\tclose##1{\\realbackslash tclose {##1}}$/ +tclose tex-src/texinfo.tex /^\\def\\tclose##1{\\realbackslash tclose {##1}}%$/ tclose tex-src/texinfo.tex /^\\def\\tclose#1{{\\rm \\tcloserm=\\fontdimen2\\font \\tt / tclose tex-src/texinfo.tex /^\\let\\tclose=\\indexdummyfont$/ tcpdump html-src/software.html /^tcpdump$/ -t cp-src/c.C 52 -T cp-src/fail.C 14 teats cp-src/c.C 127 tee ruby-src/test1.ru /^ attr_accessor :tee$/ -tee= ruby-src/test1.ru /^ attr_accessor :tee$/ -temp1 tex-src/texinfo.tex /^\\xdef\\temp1{#2}%$/ -temp1 tex-src/texinfo.tex /^\\xdef\\temp1{#2 #3}%$/ -temporarily_switch_to_single_kboard c-src/emacs/src/keyboard.c /^temporarily_switch_to_single_kboard (struct frame / +tee= ruby-src/test1.ru /^ attr_accessor :tee$/ temp tex-src/texinfo.tex /^\\edef\\temp{%$/ temp tex-src/texinfo.tex /^\\edef\\temp{{\\realbackslash chapentry $/ temp tex-src/texinfo.tex /^\\edef\\temp{{\\realbackslash chapentry {#1}{\\the\\cha/ @@ -4074,12 +4373,15 @@ temp tex-src/texinfo.tex /^\\edef\\temp{{\\realbackslash unnumbsubsubsecentry{#1 temp tex-src/texinfo.tex /^\\else \\let\\temp=\\ifclearfail \\fi$/ temp tex-src/texinfo.tex /^\\else \\let\\temp=\\relax \\fi$/ temp tex-src/texinfo.tex /^\\expandafter\\ifx\\csname IF#1\\endcsname\\relax \\let\\/ -tenbf tex-src/texinfo.tex /^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/ +temp1 tex-src/texinfo.tex /^\\xdef\\temp1{#2 #3}%$/ +temp1 tex-src/texinfo.tex /^\\xdef\\temp1{#2}%$/ +temporarily_switch_to_single_kboard c-src/emacs/src/keyboard.c /^temporarily_switch_to_single_kboard (struct frame / tenbf tex-src/texinfo.tex /^ \\let\\tenbf=\\chapbf \\let\\tentt=\\chaptt \\let\\small/ tenbf tex-src/texinfo.tex /^ \\let\\tenbf=\\indbf \\let\\tentt=\\indtt \\let\\smallca/ tenbf tex-src/texinfo.tex /^ \\let\\tenbf=\\secbf \\let\\tentt=\\sectt \\let\\smallca/ tenbf tex-src/texinfo.tex /^ \\let\\tenbf=\\ssecbf \\let\\tentt=\\ssectt \\let\\small/ tenbf tex-src/texinfo.tex /^ \\let\\tenbf=\\textbf \\let\\tentt=\\texttt \\let\\small/ +tenbf tex-src/texinfo.tex /^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/ tend c-src/etags.c 2432 teni tex-src/texinfo.tex /^ \\let\\tensf=\\chapsf \\let\\teni=\\chapi \\let\\tensy=\\/ teni tex-src/texinfo.tex /^ \\let\\tensf=\\indsf \\let\\teni=\\indi \\let\\tensy=\\in/ @@ -4111,119 +4413,53 @@ tensy tex-src/texinfo.tex /^ \\let\\tensf=\\indsf \\let\\teni=\\indi \\let\\ten tensy tex-src/texinfo.tex /^ \\let\\tensf=\\secsf \\let\\teni=\\seci \\let\\tensy=\\se/ tensy tex-src/texinfo.tex /^ \\let\\tensf=\\ssecsf \\let\\teni=\\sseci \\let\\tensy=\\/ tensy tex-src/texinfo.tex /^ \\let\\tensf=\\textsf \\let\\teni=\\texti \\let\\tensy=\\/ -tentt tex-src/texinfo.tex /^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/ tentt tex-src/texinfo.tex /^ \\let\\tenbf=\\chapbf \\let\\tentt=\\chaptt \\let\\small/ tentt tex-src/texinfo.tex /^ \\let\\tenbf=\\indbf \\let\\tentt=\\indtt \\let\\smallca/ tentt tex-src/texinfo.tex /^ \\let\\tenbf=\\secbf \\let\\tentt=\\sectt \\let\\smallca/ tentt tex-src/texinfo.tex /^ \\let\\tenbf=\\ssecbf \\let\\tentt=\\ssectt \\let\\small/ tentt tex-src/texinfo.tex /^ \\let\\tenbf=\\textbf \\let\\tentt=\\texttt \\let\\small/ +tentt tex-src/texinfo.tex /^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/ tentt tex-src/texinfo.tex /^{\\let\\tentt=\\sectt \\let\\tt=\\sectt \\let\\sf=\\sectt$/ -TERMINALP c-src/emacs/src/lisp.h /^TERMINALP (Lisp_Object a)$/ -terminateInput objc-src/Subprocess.m /^- terminateInput$/ -terminate objc-src/Subprocess.m /^- terminate:sender$/ term merc-src/accumulator.m /^:- import_module term.$/ -test1 rs-src/test.rs /^fn test1() {$/ -Test_Abort/p ada-src/2ataspri.adb /^ procedure Test_Abort is$/ -Test_Abort/p ada-src/2ataspri.ads /^ procedure Test_Abort;$/ -Test_And_Set/p ada-src/2ataspri.adb /^ procedure Test_And_Set (Cell : in out TAS_Cell;/ -Test_And_Set/p ada-src/2ataspri.ads /^ procedure Test_And_Set (Cell : in out TAS_Cell;/ -test-begin scm-src/test.scm /^(define-syntax test-begin$/ -test cp-src/c.C 86 +terminate objc-src/Subprocess.m /^- terminate:sender$/ +terminateInput objc-src/Subprocess.m /^- terminateInput$/ test c-src/emacs/src/lisp.h 1871 +test cp-src/c.C 86 test erl-src/gs_dialog.erl /^test() ->$/ test go-src/test1.go /^func test(p plus) {$/ test make-src/Makefile /^test:$/ -test.me_22a lua-src/test.lua /^ function test.me_22a(one, two)$/ -test.me22b lua-src/test.lua /^ local function test.me22b (one)$/ -TEST php-src/ptest.php 1 test php-src/ptest.php /^test $/ +test-begin scm-src/test.scm /^(define-syntax test-begin$/ +test.me22b lua-src/test.lua /^ local function test.me22b (one)$/ +test.me_22a lua-src/test.lua /^ function test.me_22a(one, two)$/ +test1 rs-src/test.rs /^fn test1() {$/ test_undefined c-src/emacs/src/keyboard.c /^test_undefined (Lisp_Object binding)$/ -TEX_clgrp c-src/etags.c 4922 -TeX_commands c-src/etags.c /^TeX_commands (FILE *inf)$/ -TEX_decode_env c-src/etags.c /^TEX_decode_env (const char *evarname, const char */ -TEX_defenv c-src/etags.c 4912 -TEX_esc c-src/etags.c 4920 -TeX_help c-src/etags.c 674 -Texinfo_help c-src/etags.c 688 -Texinfo_nodes c-src/etags.c /^Texinfo_nodes (FILE *inf)$/ -Texinfo_suffixes c-src/etags.c 686 -texinfoversion tex-src/texinfo.tex /^\\def\\texinfoversion{2.73}$/ -TEX_LESC c-src/etags.c 4986 -TEX_mode c-src/etags.c /^TEX_mode (FILE *inf)$/ -TEX_opgrp c-src/etags.c 4921 -TEX_SESC c-src/etags.c 4987 -TEXSRC make-src/Makefile /^TEXSRC=testenv.tex gzip.texi texinfo.tex nonewline/ -~ tex-src/texinfo.tex /^\\catcode `\\^=7 \\catcode `\\_=8 \\catcode `\\~=13 \\let/ -' tex-src/texinfo.tex /^\\def\\'{{'}}$/ -@ tex-src/texinfo.tex /^\\def\\@{@}%$/ -` tex-src/texinfo.tex /^\\def\\`{{`}}$/ -* tex-src/texinfo.tex /^\\def\\*{\\hfil\\break\\hbox{}\\ignorespaces}$/ -_ tex-src/texinfo.tex /^\\def_{\\ifusingtt\\normalunderscore\\_}$/ -_ tex-src/texinfo.tex /^\\def\\_{\\lvvmode \\kern.06em \\vbox{\\hrule width.3em / -_ tex-src/texinfo.tex /^\\def\\_{{\\realbackslash _}}%$/ -: tex-src/texinfo.tex /^\\def\\:{\\spacefactor=1000 }$/ -. tex-src/texinfo.tex /^\\def\\.{.\\spacefactor=3000 }$/ -@ tex-src/texinfo.tex /^\\def\\@{{\\tt \\char '100}}$/ -| tex-src/texinfo.tex /^\\def|{{\\tt \\char '174}}$/ -~ tex-src/texinfo.tex /^\\def~{{\\tt \\char '176}}$/ -+ tex-src/texinfo.tex /^\\def+{{\\tt \\char 43}}$/ -> tex-src/texinfo.tex /^\\def>{{\\tt \\gtr}}$/ -^ tex-src/texinfo.tex /^\\def^{{\\tt \\hat}}$/ -< tex-src/texinfo.tex /^\\def<{{\\tt \\less}}$/ -" tex-src/texinfo.tex /^\\def\\turnoffactive{\\let"=\\normaldoublequote$/ -( tex-src/texinfo.tex /^\\gdef\\amprm#1 {{\\rm\\}\\let(=\\oprm \\let)=\\clrm\\ }/ -) tex-src/texinfo.tex /^\\gdef\\amprm#1 {{\\rm\\}\\let(=\\oprm \\let)=\\clrm\\ }/ -( tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ -) tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ -[ tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ -] tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ -& tex-src/texinfo.tex /^\\gdef\\functionparens{\\boldbrax\\let&=\\amprm\\parenco/ -& tex-src/texinfo.tex /^\\gdef\\normalparens{\\boldbrax\\let&=\\ampnr}$/ -( tex-src/texinfo.tex /^\\gdef\\oprm#1 {{\\rm\\char`\\(}#1 \\bf \\let(=\\opnested / -= tex-src/texinfo.tex /^\\global\\def={{\\tt \\char 61}}}$/ -( tex-src/texinfo.tex /^\\ifnum \\parencount=1 {\\rm \\char `\\)}\\sl \\let(=\\opr/ -" tex-src/texinfo.tex /^\\let"=\\activedoublequote$/ -{ tex-src/texinfo.tex /^\\let\\{=\\mylbrace$/ -} tex-src/texinfo.tex /^\\let\\}=\\myrbrace$/ -^ tex-src/texinfo.tex /^\\let^=\\normalcaret$/ -> tex-src/texinfo.tex /^\\let>=\\normalgreater$/ -< tex-src/texinfo.tex /^\\let<=\\normalless$/ -+ tex-src/texinfo.tex /^\\let+=\\normalplus}$/ -~ tex-src/texinfo.tex /^\\let~=\\normaltilde$/ -_ tex-src/texinfo.tex /^\\let_=\\normalunderscore$/ -| tex-src/texinfo.tex /^\\let|=\\normalverticalbar$/ -. tex-src/texinfo.tex /^\\let\\.=\\ptexdot$/ -{ tex-src/texinfo.tex /^\\let\\{=\\ptexlbrace$/ -} tex-src/texinfo.tex /^\\let\\}=\\ptexrbrace$/ -* tex-src/texinfo.tex /^\\let\\*=\\ptexstar$/ -TeX_suffixes c-src/etags.c 672 tex tex-src/texinfo.tex /^\\def\\tex{\\begingroup$/ -TeX tex-src/texinfo.tex /^\\def\\TeX{\\realbackslash TeX}%$/ -TeX tex-src/texinfo.tex /^\\def\\TeX{\\realbackslash TeX}$/ -TeX tex-src/texinfo.tex /^\\let\\TeX=\\indexdummytex$/ +texinfoversion tex-src/texinfo.tex /^\\def\\texinfoversion{2.73}$/ textfonts tex-src/texinfo.tex /^\\def\\textfonts{%$/ -TEX_toktab c-src/etags.c 4908 texttreelist prol-src/natded.prolog /^texttreelist([]).$/ -/TF ps-src/rfc1245.ps /^\/TF { $/ thearg tex-src/texinfo.tex /^ \\def\\thearg{#1}%$/ thearg tex-src/texinfo.tex /^ \\ifx\\thearg\\empty \\def\\thearg{1}\\fi$/ there-is-a-=-in-the-middle! scm-src/test.scm /^(define (there-is-a-=-in-the-middle!) #t)$/ -thischaptername tex-src/texinfo.tex /^\\def\\thischaptername{No Chapter Title}$/ -thischaptername tex-src/texinfo.tex /^\\gdef\\thischaptername{#1}%$/ +this c-src/a/b/b.c 1 +this-command-keys c-src/emacs/src/keyboard.c /^DEFUN ("this-command-keys", Fthis_command_keys, St/ +this-command-keys-vector c-src/emacs/src/keyboard.c /^DEFUN ("this-command-keys-vector", Fthis_command_k/ +this-single-command-keys c-src/emacs/src/keyboard.c /^DEFUN ("this-single-command-keys", Fthis_single_co/ +this-single-command-raw-keys c-src/emacs/src/keyboard.c /^DEFUN ("this-single-command-raw-keys", Fthis_singl/ +this_command_key_count c-src/emacs/src/keyboard.c 108 +this_command_key_count_reset c-src/emacs/src/keyboard.c 112 +this_command_keys c-src/emacs/src/keyboard.c 107 +this_file_toc perl-src/htlmify-cystic 29 +this_single_command_key_start c-src/emacs/src/keyboard.c 125 +thischapter tex-src/texinfo.tex /^ \\unnumbchapmacro{#1}\\def\\thischapter{}%$/ thischapter tex-src/texinfo.tex /^\\def\\thischapter{} \\def\\thissection{}$/ thischapter tex-src/texinfo.tex /^\\gdef\\thischapter{#1}\\gdef\\thissection{#1}%$/ -thischapter tex-src/texinfo.tex /^ \\unnumbchapmacro{#1}\\def\\thischapter{}%$/ thischapter tex-src/texinfo.tex /^\\xdef\\thischapter{Appendix \\appendixletter: \\noexp/ thischapter tex-src/texinfo.tex /^\\xdef\\thischapter{Chapter \\the\\chapno: \\noexpand\\t/ -this_command_key_count c-src/emacs/src/keyboard.c 108 -this_command_key_count_reset c-src/emacs/src/keyboard.c 112 -this_command_keys c-src/emacs/src/keyboard.c 107 -this-command-keys c-src/emacs/src/keyboard.c /^DEFUN ("this-command-keys", Fthis_command_keys, St/ -this-command-keys-vector c-src/emacs/src/keyboard.c /^DEFUN ("this-command-keys-vector", Fthis_command_k/ -this c-src/a/b/b.c 1 +thischaptername tex-src/texinfo.tex /^\\def\\thischaptername{No Chapter Title}$/ +thischaptername tex-src/texinfo.tex /^\\gdef\\thischaptername{#1}%$/ thisfile tex-src/texinfo.tex /^\\def\\includezzz #1{{\\def\\thisfile{#1}\\input #1$/ thisfile tex-src/texinfo.tex /^\\def\\thisfile{}$/ -this_file_toc perl-src/htlmify-cystic 29 thisfootno tex-src/texinfo.tex /^\\edef\\thisfootno{$^{\\the\\footnoteno}$}%$/ thispage tex-src/texinfo.tex /^\\let\\thispage=\\folio$/ thissection tex-src/texinfo.tex /^\\def\\thischapter{} \\def\\thissection{}$/ @@ -4234,30 +4470,26 @@ thissection tex-src/texinfo.tex /^\\gdef\\thissection{#1}\\secheading {#1}{\\app thissection tex-src/texinfo.tex /^\\gdef\\thissection{#1}\\secheading {#1}{\\the\\chapno}/ thissection tex-src/texinfo.tex /^\\gdef\\thissection{#1}\\subsubsecno=0 \\global\\advanc/ thissection tex-src/texinfo.tex /^\\plainsecheading {#1}\\gdef\\thissection{#1}%$/ -this-single-command-keys c-src/emacs/src/keyboard.c /^DEFUN ("this-single-command-keys", Fthis_single_co/ -this_single_command_key_start c-src/emacs/src/keyboard.c 125 -this-single-command-raw-keys c-src/emacs/src/keyboard.c /^DEFUN ("this-single-command-raw-keys", Fthis_singl/ thistitle tex-src/texinfo.tex /^\\def\\settitlezzz #1{\\gdef\\thistitle{#1}}$/ thistitle tex-src/texinfo.tex /^\\def\\thistitle{No Title}$/ three tex-src/texinfo.tex /^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/ threex tex-src/texinfo.tex /^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/ tie tex-src/texinfo.tex /^\\def\\tie{\\penalty 10000\\ } % Save plain tex de/ tignore c-src/etags.c 2433 -timer_check_2 c-src/emacs/src/keyboard.c /^timer_check_2 (Lisp_Object timers, Lisp_Object idl/ timer_check c-src/emacs/src/keyboard.c /^timer_check (void)$/ +timer_check_2 c-src/emacs/src/keyboard.c /^timer_check_2 (Lisp_Object timers, Lisp_Object idl/ timer_idleness_start_time c-src/emacs/src/keyboard.c 335 timer_last_idleness_start_time c-src/emacs/src/keyboard.c 340 timer_resume_idle c-src/emacs/src/keyboard.c /^timer_resume_idle (void)$/ -timers_run c-src/emacs/src/keyboard.c 320 timer_start_idle c-src/emacs/src/keyboard.c /^timer_start_idle (void)$/ timer_stop_idle c-src/emacs/src/keyboard.c /^timer_stop_idle (void)$/ -Time_to_position c-src/emacs/src/keyboard.c /^Time_to_position (Time encoded_pos)$/ +timers_run c-src/emacs/src/keyboard.c 320 tinbody c-src/etags.c 2431 tindex tex-src/texinfo.tex /^\\def\\tindex {\\tpindex}$/ +title tex-src/texinfo.tex /^ \\def\\title{\\parsearg\\titlezzz}%$/ titlefont tex-src/texinfo.tex /^\\def\\titlefont#1{{\\titlerm #1}}$/ titlepage tex-src/texinfo.tex /^\\def\\titlepage{\\begingroup \\parindent=0pt \\textfon/ titlepage tex-src/texinfo.tex /^\\let\\titlepage=\\relax$/ -title tex-src/texinfo.tex /^ \\def\\title{\\parsearg\\titlezzz}%$/ titlezzz tex-src/texinfo.tex /^ \\def\\titlezzz##1{\\leftline{\\titlefont{##1}}$/ tkeyseen c-src/etags.c 2429 tnone c-src/etags.c 2428 @@ -4266,65 +4498,45 @@ today tex-src/texinfo.tex /^\\def\\today{\\number\\day\\space$/ toggleDescription objc-src/PackInsp.m /^-toggleDescription$/ tok c-src/etags.c 2491 token c-src/etags.c 2508 -tokenizeatom prol-src/natded.prolog /^tokenizeatom(Atom,Ws):-$/ -tokenize prol-src/natded.prolog /^tokenize([C1,C2,C3|Cs],Xs-Ys,TsResult):- % spe/ -tokentab2 y-src/cccp.y 442 token y-src/cccp.y 437 token y-src/cccp.y 439 -To_Lower pas-src/common.pas /^function To_Lower;(*(ch:char) : char;*)$/ +tokenize prol-src/natded.prolog /^tokenize([C1,C2,C3|Cs],Xs-Ys,TsResult):- % spe/ +tokenizeatom prol-src/natded.prolog /^tokenizeatom(Atom,Ws):-$/ +tokentab2 y-src/cccp.y 442 tool_bar_item_properties c-src/emacs/src/keyboard.c 7970 tool_bar_items c-src/emacs/src/keyboard.c /^tool_bar_items (Lisp_Object reuse, int *nitems)$/ tool_bar_items_vector c-src/emacs/src/keyboard.c 7965 toolkit_menubar_in_use c-src/emacs/src/keyboard.c /^toolkit_menubar_in_use (struct frame *f)$/ -top_level_1 c-src/emacs/src/keyboard.c /^top_level_1 (Lisp_Object ignore)$/ -top_level_2 c-src/emacs/src/keyboard.c /^top_level_2 (void)$/ -top-level c-src/emacs/src/keyboard.c /^DEFUN ("top-level", Ftop_level, Stop_level, 0, 0, / -top_level merc-src/accumulator.m /^:- type top_level$/ -Top tex-src/gzip.texi /^@node Top, , , (dir)$/ top tex-src/texinfo.tex /^\\let\\top=\\relax$/ top tex-src/texinfo.tex /^\\outer\\def\\top{\\parsearg\\unnumberedzzz}$/ -To_Start_Addr/f ada-src/2ataspri.adb /^ function To_Start_Addr is new$/ +top-level c-src/emacs/src/keyboard.c /^DEFUN ("top-level", Ftop_level, Stop_level, 0, 0, / +top_level merc-src/accumulator.m /^:- type top_level$/ +top_level_1 c-src/emacs/src/keyboard.c /^top_level_1 (Lisp_Object ignore)$/ +top_level_2 c-src/emacs/src/keyboard.c /^top_level_2 (void)$/ total_keys c-src/emacs/src/keyboard.c 97 -TOTAL_KEYWORDS c-src/etags.c 2325 -totally_unblock_input c-src/emacs/src/keyboard.c /^totally_unblock_input (void)$/ total_size_of_entries c-src/etags.c /^total_size_of_entries (register node *np)$/ total_surrounding cp-src/conway.cpp /^int site::total_surrounding(void)$/ -To_TCB_Ptr/f ada-src/2ataspri.adb /^ function To_TCB_Ptr is new$/ -To_Upper pas-src/common.pas /^function To_Upper;(*(ch:char) : char;*)$/ -To_void_ptr/f ada-src/2ataspri.adb /^ function To_void_ptr is new$/ +totally_unblock_input c-src/emacs/src/keyboard.c /^totally_unblock_input (void)$/ tpargs tex-src/texinfo.tex /^\\begingroup\\defname {#2}{#1}\\deftpargs{#3}\\endgrou/ tpcmd c-src/h.h 15 tpcmd c-src/h.h 8 tpheader tex-src/texinfo.tex /^\\def\\deftp{\\defvrparsebody\\Edeftp\\deftpx\\deftphead/ -/T ps-src/rfc1245.ps /^\/T { $/ tpx\deftpheader tex-src/texinfo.tex /^\\def\\deftp{\\defvrparsebody\\Edeftp\\deftpx\\deftphead/ -tracking_off c-src/emacs/src/keyboard.c /^tracking_off (Lisp_Object old_value)$/ track-mouse c-src/emacs/src/keyboard.c /^DEFUN ("internal--track-mouse", Ftrack_mouse, Stra/ +tracking_off c-src/emacs/src/keyboard.c /^tracking_off (Lisp_Object old_value)$/ traffic_light cp-src/conway.cpp /^void traffic_light(int x, int y)$/ translate c-src/emacs/src/regex.h 361 treats cp-src/c.C 131 -Truc.Bidule/b ada-src/etags-test-for.ada /^package body Truc.Bidule is$/ -Truc.Bidule/b ada-src/waroquiers.ada /^package body Truc.Bidule is$/ -Truc.Bidule/s ada-src/etags-test-for.ada /^package Truc.Bidule is$/ -Truc.Bidule/s ada-src/waroquiers.ada /^package Truc.Bidule is$/ -Truc/s ada-src/etags-test-for.ada /^package Truc is$/ -Truc/s ada-src/waroquiers.ada /^package Truc is$/ -TSL/s ada-src/2ataspri.adb /^ package TSL renames System.Tasking_Soft_Links;$/ -t tex-src/texinfo.tex /^\\def\\t##1{\\realbackslash r {##1}}%$/ -t tex-src/texinfo.tex /^\\def\\t#1{{\\tt \\exhyphenpenalty=10000\\rawbackslash / -t tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ -t tex-src/texinfo.tex /^\\let\\t=\\indexdummyfont$/ -ttfont tex-src/texinfo.tex /^\\let\\ttfont = \\t$/ tt prol-src/natded.prolog /^tt:-$/ tt tex-src/texinfo.tex /^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/ -tt tex-src/texinfo.tex /^\\def\\tt{\\realbackslash tt}%$/ tt tex-src/texinfo.tex /^\\def\\tt{\\realbackslash tt}$/ +tt tex-src/texinfo.tex /^\\def\\tt{\\realbackslash tt}%$/ tt tex-src/texinfo.tex /^\\font\\deftt=cmtt10 scaled \\magstep1$/ tt tex-src/texinfo.tex /^{\\let\\tentt=\\sectt \\let\\tt=\\sectt \\let\\sf=\\sectt$/ -ttypeseen c-src/etags.c 2430 +ttfont tex-src/texinfo.tex /^\\let\\ttfont = \\t$/ tty_read_avail_input c-src/emacs/src/keyboard.c /^tty_read_avail_input (struct terminal *terminal,$/ +ttypeseen c-src/etags.c 2430 turnoffactive tex-src/texinfo.tex /^\\def\\turnoffactive{\\let"=\\normaldoublequote$/ -/two ps-src/rfc1245.ps /^\/two \/three \/four \/five \/six \/seven \/eight \/nine \// typdef c-src/etags.c 2434 type c-src/emacs/src/gmalloc.c 145 type c-src/emacs/src/lisp.h 1973 @@ -4350,54 +4562,39 @@ typefunx\deftypefunheader tex-src/texinfo.tex /^\\def\\deftypefun{\\defparsebody typemargin tex-src/texinfo.tex /^\\newskip\\deftypemargin \\deftypemargin=12pt$/ typemargin tex-src/texinfo.tex /^\\rlap{\\rightline{{\\rm #2}\\hskip \\deftypemargin}}}%/ typemargin tex-src/texinfo.tex /^\\setbox0=\\hbox{\\hskip \\deflastargmargin{\\rm #2}\\hs/ -TYPE_RANGED_INTEGERP c-src/emacs/src/lisp.h /^#define TYPE_RANGED_INTEGERP(type, x) \\$/ -Type_Specific_Data/t ada-src/etags-test-for.ada /^ type Type_Specific_Data is record$/ -TYPESTOSTAT objc-src/PackInsp.h 37 typevarheader tex-src/texinfo.tex /^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/ typevarx\deftypevarheader tex-src/texinfo.tex /^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/ typevrheader tex-src/texinfo.tex /^\\def\\deftypevr{\\defvrparsebody\\Edeftypevr\\deftypev/ typevrx\deftypevrheader tex-src/texinfo.tex /^\\def\\deftypevr{\\defvrparsebody\\Edeftypevr\\deftypev/ -/Uacute ps-src/rfc1245.ps /^\/Uacute \/Ucircumflex \/Ugrave \/dotlessi \/circumflex/ +u c-src/emacs/src/lisp.h 2397 u_any c-src/emacs/src/lisp.h 2214 u_boolfwd c-src/emacs/src/lisp.h 2371 u_buffer_objfwd c-src/emacs/src/lisp.h 2373 -UCHAR c-src/emacs/src/lisp.h 2424 -_UCHAR_T c-src/emacs/src/lisp.h 2423 -U_CHAR y-src/cccp.y 38 -u c-src/emacs/src/lisp.h 2397 -/udieresis ps-src/rfc1245.ps /^\/udieresis \/dagger \/.notdef \/cent \/sterling \/secti/ u_finalizer c-src/emacs/src/lisp.h 2219 u_free c-src/emacs/src/lisp.h 2215 u_intfwd c-src/emacs/src/lisp.h 2370 u_kboard_objfwd c-src/emacs/src/lisp.h 2374 u_marker c-src/emacs/src/lisp.h 2216 +u_objfwd c-src/emacs/src/lisp.h 2372 +u_overlay c-src/emacs/src/lisp.h 2217 +u_save_value c-src/emacs/src/lisp.h 2218 unargs tex-src/texinfo.tex /^\\begingroup\\defname {#2}{#1}\\defunargs{#3}\\endgrou/ unargs tex-src/texinfo.tex /^\\defunargs {#2}\\endgroup %$/ unargs tex-src/texinfo.tex /^\\defunargs {#3}\\endgroup %$/ -UNARY y-src/cccp.c 18 unblock_input c-src/emacs/src/keyboard.c /^unblock_input (void)$/ unblock_input_to c-src/emacs/src/keyboard.c /^unblock_input_to (int level)$/ unchar c-src/h.h 99 -UNDEFINED c-src/h.h 118 -UNEVALLED c-src/emacs/src/lisp.h 2834 unexpand-abbrev c-src/abbrev.c /^DEFUN ("unexpand-abbrev", Funexpand_abbrev, Sunexp/ -UNGCPRO c-src/emacs/src/lisp.h 3202 -UNGCPRO c-src/emacs/src/lisp.h 3257 -UNGCPRO c-src/emacs/src/lisp.h 3353 unheader tex-src/texinfo.tex /^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/ univ merc-src/accumulator.m /^:- import_module univ.$/ -UNLOCK_ALIGNED_BLOCKS c-src/emacs/src/gmalloc.c /^#define UNLOCK_ALIGNED_BLOCKS() \\$/ -UNLOCK_ALIGNED_BLOCKS c-src/emacs/src/gmalloc.c /^#define UNLOCK_ALIGNED_BLOCKS()$/ -UNLOCK c-src/emacs/src/gmalloc.c /^#define UNLOCK() \\$/ -UNLOCK c-src/emacs/src/gmalloc.c /^#define UNLOCK()$/ -Unlock/p ada-src/2ataspri.adb /^ procedure Unlock (L : in out Lock) is$/ -Unlock/p ada-src/2ataspri.ads /^ procedure Unlock (L : in out Lock);$/ unnchfopen tex-src/texinfo.tex /^\\def\\unnchfopen #1{%$/ unnchfplain tex-src/texinfo.tex /^\\def\\unnchfplain #1{%$/ -unnumbchapentry tex-src/texinfo.tex /^\\def\\unnumbchapentry#1#2{\\dochapentry{#1}{#2}}$/ unnumbchapentry tex-src/texinfo.tex /^ \\let\\unnumbchapentry = \\shortunnumberedentry/ +unnumbchapentry tex-src/texinfo.tex /^\\def\\unnumbchapentry#1#2{\\dochapentry{#1}{#2}}$/ unnumbchapmacro tex-src/texinfo.tex /^\\global\\let\\unnumbchapmacro=\\unnchfopen}$/ unnumbchapmacro tex-src/texinfo.tex /^\\global\\let\\unnumbchapmacro=\\unnchfplain}$/ +unnumbered tex-src/texinfo.tex /^\\let\\unnumbered=\\relax$/ +unnumbered tex-src/texinfo.tex /^\\outer\\def\\unnumbered{\\parsearg\\unnumberedzzz}$/ unnumberedsec tex-src/texinfo.tex /^\\let\\unnumberedsec=\\relax$/ unnumberedsec tex-src/texinfo.tex /^\\outer\\def\\unnumberedsec{\\parsearg\\unnumberedseczz/ unnumberedsection tex-src/texinfo.tex /^\\let\\unnumberedsection=\\relax$/ @@ -4410,8 +4607,6 @@ unnumberedsubsubsec tex-src/texinfo.tex /^\\let\\unnumberedsubsubsec=\\relax$/ unnumberedsubsubsec tex-src/texinfo.tex /^\\outer\\def\\unnumberedsubsubsec{\\parsearg\\unnumbere/ unnumberedsubsubsection tex-src/texinfo.tex /^\\let\\unnumberedsubsubsection=\\relax$/ unnumberedsubsubseczzz tex-src/texinfo.tex /^\\def\\unnumberedsubsubseczzz #1{\\seccheck{unnumbere/ -unnumbered tex-src/texinfo.tex /^\\let\\unnumbered=\\relax$/ -unnumbered tex-src/texinfo.tex /^\\outer\\def\\unnumbered{\\parsearg\\unnumberedzzz}$/ unnumberedzzz tex-src/texinfo.tex /^\\def\\unnumberedzzz #1{\\seccheck{unnumbered}%$/ unnumbnoderef tex-src/texinfo.tex /^\\def\\unnumbnoderef{\\ifx\\lastnode\\relax\\else$/ unnumbsecentry tex-src/texinfo.tex /^ \\def\\unnumbsecentry ##1##2{}$/ @@ -4423,104 +4618,66 @@ unnumbsubsubsecentry tex-src/texinfo.tex /^ \\def\\unnumbsubsubsecentry ##1 unnumbsubsubsecentry tex-src/texinfo.tex /^\\def\\unnumbsubsubsecentry#1#2{\\dosubsubsecentry{#1/ unravel_univ merc-src/accumulator.m /^:- some [T] pred unravel_univ(univ::in, T::out) is/ unread_switch_frame c-src/emacs/src/keyboard.c 204 -UNSIGNED_CMP c-src/emacs/src/lisp.h /^#define UNSIGNED_CMP(a, op, b) \\$/ unsignedp y-src/cccp.y 112 unwind c-src/emacs/src/lisp.h 2962 unwind_int c-src/emacs/src/lisp.h 2972 unwind_ptr c-src/emacs/src/lisp.h 2967 unwind_void c-src/emacs/src/lisp.h 2976 unx\defunheader tex-src/texinfo.tex /^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/ -u_objfwd c-src/emacs/src/lisp.h 2372 -u_overlay c-src/emacs/src/lisp.h 2217 -__up c.c 160 update_accumulator_pred merc-src/accumulator.m /^:- pred update_accumulator_pred(pred_id::in, proc_/ uppercaseenumerate tex-src/texinfo.tex /^\\def\\uppercaseenumerate{%$/ uprintmax_t c-src/emacs/src/lisp.h 149 uprintmax_t c-src/emacs/src/lisp.h 154 -/U ps-src/rfc1245.ps /^\/U { $/ usage perl-src/yagrip.pl /^sub usage {$/ -u_save_value c-src/emacs/src/lisp.h 2218 usecharno c-src/etags.c 210 used c-src/emacs/src/regex.h 347 used_syntax c-src/emacs/src/regex.h 398 -USE_LSB_TAG c-src/emacs/src/lisp.h 271 -USE_LSB_TAG c-src/emacs/src/lisp.h /^DEFINE_GDB_SYMBOL_BEGIN (bool, USE_LSB_TAG)$/ -USE_PTHREAD c-src/emacs/src/gmalloc.c 25 user_cmp_function c-src/emacs/src/lisp.h 1814 -UserEdit pyt-src/server.py /^class UserEdit(Frame):$/ user_error c-src/emacs/src/keyboard.c /^user_error (const char *msg)$/ user_hash_function c-src/emacs/src/lisp.h 1811 -User pyt-src/server.py /^class User:$/ user_signal_info c-src/emacs/src/keyboard.c 7235 user_signals c-src/emacs/src/keyboard.c 7250 -USE_SAFE_ALLOCA c-src/emacs/src/lisp.h 4560 -USE_STACK_CONS c-src/emacs/src/lisp.h 4689 -USE_STACK_LISP_OBJECTS c-src/emacs/src/lisp.h 4652 -USE_STACK_LISP_OBJECTS c-src/emacs/src/lisp.h 4658 -USE_STACK_LISP_OBJECTS c-src/emacs/src/lisp.h 4659 -USE_STACK_STRING c-src/emacs/src/lisp.h 4691 usfreelock_ptr/t ada-src/etags-test-for.ada /^ type usfreelock_ptr is access$/ -Vabbrev_start_location_buffer c-src/abbrev.c 66 -Vabbrev_start_location c-src/abbrev.c 63 -Vabbrev_table_name_list c-src/abbrev.c 43 -VALBITS c-src/emacs/src/lisp.h 246 -valcell c-src/emacs/src/lisp.h 2357 val c-src/emacs/src/lisp.h 3027 val c-src/emacs/src/lisp.h 691 val c-src/getopt.h 84 -validate php-src/lce_functions.php /^ function validate($value)$/ +val prol-src/natded.prolog /^val(X) --> ['['], valseq(X), [']'].$/ +valcell c-src/emacs/src/lisp.h 2357 valid c-src/etags.c 220 valid c-src/etags.c 2502 +validate php-src/lce_functions.php /^ function validate($value)$/ valloc c-src/emacs/src/gmalloc.c /^valloc (size_t size)$/ -VALMASK c-src/emacs/src/lisp.h 829 -VALMASK c-src/emacs/src/lisp.h /^DEFINE_GDB_SYMBOL_BEGIN (EMACS_INT, VALMASK)$/ -VAL_MAX c-src/emacs/src/lisp.h 263 -val prol-src/natded.prolog /^val(X) --> ['['], valseq(X), [']'].$/ valseq prol-src/natded.prolog /^valseq([Val|Vals]) --> val(Val), plusvalseq(Vals)./ -ValToNmStr pas-src/common.pas /^function ValToNmStr; (*($/ value c-src/emacs/src/lisp.h 687 value y-src/cccp.y 112 +var c-src/emacs/src/keyboard.c 11023 +var c-src/emacs/src/lisp.h 3137 +var tex-src/texinfo.tex /^\\def\\var##1{\\realbackslash var {##1}}$/ +var tex-src/texinfo.tex /^\\def\\var##1{\\realbackslash var {##1}}%$/ +var tex-src/texinfo.tex /^\\let\\var=\\indexdummyfont$/ +var tex-src/texinfo.tex /^\\let\\var=\\smartitalic$/ varargs tex-src/texinfo.tex /^\\begingroup\\defname {#2}{#1}\\defvarargs{#3}\\endgro/ varargs tex-src/texinfo.tex /^\\def\\deftpargs #1{\\bf \\defvarargs{#1}}$/ varargs tex-src/texinfo.tex /^\\defvarargs {#2}\\endgroup %$/ varargs tex-src/texinfo.tex /^\\defvarargs {#3}\\endgroup %$/ -var c-src/emacs/src/keyboard.c 11023 -var c-src/emacs/src/lisp.h 3137 varheader tex-src/texinfo.tex /^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/ varparsebody\Edefopt tex-src/texinfo.tex /^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/ varparsebody\Edeftypevar tex-src/texinfo.tex /^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/ varparsebody\Edefvar tex-src/texinfo.tex /^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/ varset merc-src/accumulator.m /^:- import_module varset.$/ -var tex-src/texinfo.tex /^\\def\\var##1{\\realbackslash var {##1}}%$/ -var tex-src/texinfo.tex /^\\def\\var##1{\\realbackslash var {##1}}$/ -var tex-src/texinfo.tex /^\\let\\var=\\indexdummyfont$/ -var tex-src/texinfo.tex /^\\let\\var=\\smartitalic$/ varx\defvarheader tex-src/texinfo.tex /^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/ vcopy c-src/emacs/src/lisp.h /^vcopy (Lisp_Object v, ptrdiff_t offset, Lisp_Objec/ -VECSIZE c-src/emacs/src/lisp.h /^#define VECSIZE(type) \\$/ vectorlike_header c-src/emacs/src/lisp.h 1343 -VECTORLIKEP c-src/emacs/src/lisp.h /^# define VECTORLIKEP(x) lisp_h_VECTORLIKEP (x)$/ -VECTORP c-src/emacs/src/lisp.h /^VECTORP (Lisp_Object x)$/ -verde cp-src/c.C 40 -verify_ascii c-src/emacs/src/lisp.h /^# define verify_ascii(str) (str)$/ -verify-tags-table-function el-src/emacs/lisp/progmodes/etags.el /^(defvar verify-tags-table-function nil$/ -VERSION c-src/etags.c 789 -VERSION erl-src/gs_dialog.erl /^-define(VERSION, '2001.1101').$/ -VERSION objc-src/PackInsp.m 34 -Vfundamental_mode_abbrev_table c-src/abbrev.c 52 -Vglobal_abbrev_table c-src/abbrev.c 48 -VHDLFLAGS make-src/Makefile /^VHDLFLAGS=--language=none --regex='\/[ \\t]*\\(ARCHIT/ +verde cp-src/c.C 40 +verify-tags-table-function el-src/emacs/lisp/progmodes/etags.el /^(defvar verify-tags-table-function nil$/ +verify_ascii c-src/emacs/src/lisp.h /^# define verify_ascii(str) (str)$/ vignore c-src/etags.c 2417 vindex tex-src/texinfo.tex /^\\def\\vindex {\\vrindex}$/ -visit-tags-table-buffer el-src/emacs/lisp/progmodes/etags.el /^(defun visit-tags-table-buffer (&optional cont)$/ visit-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun visit-tags-table (file &optional local)$/ -Vlast_abbrev c-src/abbrev.c 70 -Vlast_abbrev_text c-src/abbrev.c 75 -Vlispy_mouse_stem c-src/emacs/src/keyboard.c 5172 +visit-tags-table-buffer el-src/emacs/lisp/progmodes/etags.el /^(defun visit-tags-table-buffer (&optional cont)$/ void c-src/emacs/src/lisp.h /^INLINE void (check_cons_list) (void) { lisp_h_chec/ voidfuncptr c-src/emacs/src/lisp.h 2108 voidval y-src/cccp.y 115 -/V ps-src/rfc1245.ps /^\/V { $/ vrheader tex-src/texinfo.tex /^\\def\\defvr{\\defvrparsebody\\Edefvr\\defvrx\\defvrhead/ vritemindex tex-src/texinfo.tex /^\\def\\vritemindex #1{\\doind {vr}{\\code{#1}}}%$/ vrparsebody\Edefivar tex-src/texinfo.tex /^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/ @@ -4530,80 +4687,49 @@ vrparsebody\Edefvr tex-src/texinfo.tex /^\\def\\defvr{\\defvrparsebody\\Edefvr\\ vrx\defvrheader tex-src/texinfo.tex /^\\def\\defvr{\\defvrparsebody\\Edefvr\\defvrx\\defvrhead/ vtable tex-src/texinfo.tex /^\\def\\vtable{\\begingroup\\inENV\\obeylines\\obeyspaces/ vtablex tex-src/texinfo.tex /^\\gdef\\vtablex #1^^M{%$/ -waiting_for_input c-src/emacs/src/keyboard.c 150 -WAIT_READING_MAX c-src/emacs/src/lisp.h 4281 -WAIT_READING_MAX c-src/emacs/src/lisp.h 4283 +w tex-src/texinfo.tex /^\\def\\w#1{\\leavevmode\\hbox{#1}}$/ +w tex-src/texinfo.tex /^\\def\\w{\\realbackslash w }%$/ +w tex-src/texinfo.tex /^\\def\\w{\\realbackslash w}$/ +w tex-src/texinfo.tex /^\\let\\w=\\indexdummyfont$/ wait_status_ptr_t c.c 161 -WARNINGS make-src/Makefile /^WARNINGS=-pedantic -Wall -Wpointer-arith -Winline / +waiting_for_input c-src/emacs/src/keyboard.c 150 warning y-src/cccp.y /^warning (msg)$/ -/wbytes ps-src/rfc1245.ps /^\/wbytes { $/ -WCHAR_TYPE_SIZE y-src/cccp.y 99 -weak_alias c-src/emacs/src/gmalloc.c /^weak_alias (free, cfree)$/ weak c-src/emacs/src/lisp.h 1830 +weak_alias c-src/emacs/src/gmalloc.c /^weak_alias (free, cfree)$/ web ftp publish make-src/Makefile /^web ftp publish:$/ what c-src/etags.c 252 wheel_syms c-src/emacs/src/keyboard.c 4628 -where cp-src/clheir.hpp 77 where c-src/emacs/src/lisp.h 2348 where c-src/emacs/src/lisp.h 2980 +where cp-src/clheir.hpp 77 where_in_registry cp-src/clheir.hpp 15 -WHITE cp-src/screen.hpp 27 -/wh ps-src/rfc1245.ps /^\/wh { $/ -WINDOW_CONFIGURATIONP c-src/emacs/src/lisp.h /^WINDOW_CONFIGURATIONP (Lisp_Object a)$/ -WINDOWP c-src/emacs/src/lisp.h /^WINDOWP (Lisp_Object a)$/ -WINDOWSNT c-src/etags.c 101 -WINDOWSNT c-src/etags.c 102 windowWillClose objcpp-src/SimpleCalc.M /^- windowWillClose:sender$/ wipe_kboard c-src/emacs/src/keyboard.c /^wipe_kboard (KBOARD *kb)$/ womboid c-src/h.h 63 womboid c-src/h.h 75 word_size c-src/emacs/src/lisp.h 1473 -WorkingDays cp-src/functions.cpp /^int WorkingDays(Date a, Date b){$/ -WORKING objc-src/PackInsp.m 368 -/W ps-src/rfc1245.ps /^\/W { $/ +write php-src/lce_functions.php /^ function write($save="yes")$/ +write php-src/lce_functions.php /^ function write()$/ write1= ruby-src/test1.ru /^ attr_reader :read1 , :read2; attr_writer :writ/ write2= ruby-src/test1.ru /^ attr_reader :read1 , :read2; attr_writer :writ/ write_abbrev c-src/abbrev.c /^write_abbrev (sym, stream)$/ -writebreaklex prol-src/natded.prolog /^writebreaklex([]).$/ -writebreak prol-src/natded.prolog /^writebreak([]).$/ -writecat prol-src/natded.prolog /^writecat(np(ind(sng),nm(_)),np,[],[]):-!.$/ write_classname c-src/etags.c /^write_classname (linebuffer *cn, const char *quali/ -write_lex_cat prol-src/natded.prolog /^write_lex_cat(File):-$/ write_lex prol-src/natded.prolog /^write_lex(File):-$/ +write_lex_cat prol-src/natded.prolog /^write_lex_cat(File):-$/ +write_xyc cp-src/screen.cpp /^void write_xyc(int x, int y, char c)$/ +writebreak prol-src/natded.prolog /^writebreak([]).$/ +writebreaklex prol-src/natded.prolog /^writebreaklex([]).$/ +writecat prol-src/natded.prolog /^writecat(np(ind(sng),nm(_)),np,[],[]):-!.$/ writelist prol-src/natded.prolog /^writelist([der(Ws)|Ws2]):-$/ writelistsubs prol-src/natded.prolog /^writelistsubs([],X):-$/ -Write_Lock/p ada-src/2ataspri.adb /^ procedure Write_Lock (L : in out Lock; Ceiling_/ -Write_Lock/p ada-src/2ataspri.ads /^ procedure Write_Lock (L : in out Lock; Ceiling_/ writenamestring pas-src/common.pas /^procedure writenamestring;(*($/ -write php-src/lce_functions.php /^ function write()$/ -write php-src/lce_functions.php /^ function write($save="yes")$/ writesubs prol-src/natded.prolog /^writesubs([]).$/ writesups prol-src/natded.prolog /^writesups([]).$/ -write_xyc cp-src/screen.cpp /^void write_xyc(int x, int y, char c)$/ written c-src/etags.c 211 -w tex-src/texinfo.tex /^\\def\\w#1{\\leavevmode\\hbox{#1}}$/ -w tex-src/texinfo.tex /^\\def\\w{\\realbackslash w }%$/ -w tex-src/texinfo.tex /^\\def\\w{\\realbackslash w}$/ -w tex-src/texinfo.tex /^\\let\\w=\\indexdummyfont$/ -XBOOL_VECTOR c-src/emacs/src/lisp.h /^XBOOL_VECTOR (Lisp_Object a)$/ -XBUFFER c-src/emacs/src/lisp.h /^XBUFFER (Lisp_Object a)$/ -XBUFFER_OBJFWD c-src/emacs/src/lisp.h /^XBUFFER_OBJFWD (union Lisp_Fwd *a)$/ -xcar_addr c-src/emacs/src/lisp.h /^xcar_addr (Lisp_Object c)$/ -XCAR c-src/emacs/src/lisp.h /^# define XCAR(c) lisp_h_XCAR (c)$/ x c.c 153 x c.c 179 x c.c 188 x c.c 189 -xcdr_addr c-src/emacs/src/lisp.h /^xcdr_addr (Lisp_Object c)$/ -XCDR c-src/emacs/src/lisp.h /^# define XCDR(c) lisp_h_XCDR (c)$/ -XCHAR_TABLE c-src/emacs/src/lisp.h /^XCHAR_TABLE (Lisp_Object a)$/ -XCHG_0 c-src/sysdep.h 47 -XCHG_1 c-src/sysdep.h 48 -XCHG_2 c-src/sysdep.h 49 -XCHG_3 c-src/sysdep.h 50 -XCHG_4 c-src/sysdep.h 51 -XCHG_5 c-src/sysdep.h 52 -XCONS c-src/emacs/src/lisp.h /^# define XCONS(a) lisp_h_XCONS (a)$/ x cp-src/c.C 53 x cp-src/c.C 80 x cp-src/clheir.hpp 49 @@ -4611,226 +4737,90 @@ x cp-src/clheir.hpp 58 x cp-src/conway.hpp 7 x cp-src/fail.C 10 x cp-src/fail.C 44 -X c-src/h.h 100 -XDEFUN c.c /^XDEFUN ("x-get-selection-internal", Fx_get_selecti/ -xdiff make-src/Makefile /^xdiff: ETAGS EXTAGS ${infiles}$/ -XFASTINT c-src/emacs/src/lisp.h /^# define XFASTINT(a) lisp_h_XFASTINT (a)$/ -XFASTINT c-src/emacs/src/lisp.h /^XFASTINT (Lisp_Object a)$/ -XFINALIZER c-src/emacs/src/lisp.h /^XFINALIZER (Lisp_Object a)$/ -XFLOAT c-src/emacs/src/lisp.h /^XFLOAT (Lisp_Object a)$/ -XFLOAT_DATA c-src/emacs/src/lisp.h /^XFLOAT_DATA (Lisp_Object f)$/ -XFLOATINT c-src/emacs/src/lisp.h /^XFLOATINT (Lisp_Object n)$/ -XFWDTYPE c-src/emacs/src/lisp.h /^XFWDTYPE (union Lisp_Fwd *a)$/ -x-get-selection-internal c.c /^DEFUN ("x-get-selection-internal", Fx_get_selectio/ +x tex-src/texinfo.tex /^\\refx{#1-snt}{} [\\printednodename], page\\tie\\refx{/ x-get-selection-internal c.c /^ Fx_get_selection_internal, Sx_get_selection/ -XHASH c-src/emacs/src/lisp.h /^# define XHASH(a) lisp_h_XHASH (a)$/ -XHASH_TABLE c-src/emacs/src/lisp.h /^XHASH_TABLE (Lisp_Object a)$/ -XIL c-src/emacs/src/lisp.h /^# define XIL(i) lisp_h_XIL (i)$/ -XINT c-src/emacs/src/lisp.h /^# define XINT(a) lisp_h_XINT (a)$/ -XINT c-src/emacs/src/lisp.h /^XINT (Lisp_Object a)$/ -XINTPTR c-src/emacs/src/lisp.h /^XINTPTR (Lisp_Object a)$/ -xitemsubtopix tex-src/texinfo.tex /^\\def\\internalBxitem "#1"{\\def\\xitemsubtopix{#1} \\s/ -xitemsubtopix tex-src/texinfo.tex /^\\def\\internalBxitemx "#1"{\\def\\xitemsubtopix{#1} \\/ +x-get-selection-internal c.c /^DEFUN ("x-get-selection-internal", Fx_get_selectio/ +xcar_addr c-src/emacs/src/lisp.h /^xcar_addr (Lisp_Object c)$/ +xcdr_addr c-src/emacs/src/lisp.h /^xcdr_addr (Lisp_Object c)$/ +xdiff make-src/Makefile /^xdiff: ETAGS EXTAGS ${infiles}$/ xitem tex-src/texinfo.tex /^\\def\\xitem{\\errmessage{@xitem while not in a table/ xitem tex-src/texinfo.tex /^\\let\\xitem = \\internalBxitem %$/ +xitemsubtopix tex-src/texinfo.tex /^\\def\\internalBxitem "#1"{\\def\\xitemsubtopix{#1} \\s/ +xitemsubtopix tex-src/texinfo.tex /^\\def\\internalBxitemx "#1"{\\def\\xitemsubtopix{#1} \\/ xitemx tex-src/texinfo.tex /^\\def\\xitemx{\\errmessage{@xitemx while not in a tab/ xitemx tex-src/texinfo.tex /^\\let\\xitemx = \\internalBxitemx %$/ xitemzzz tex-src/texinfo.tex /^\\def\\xitemzzz #1{\\dosubind {kw}{\\code{#1}}{for {\\b/ xkey tex-src/texinfo.tex /^\\def\\xkey{\\key}$/ -XLI_BUILTIN_LISPSYM c-src/emacs/src/lisp.h /^#define XLI_BUILTIN_LISPSYM(iname) TAG_SYMOFFSET (/ -XLI c-src/emacs/src/lisp.h /^# define XLI(o) lisp_h_XLI (o)$/ xmalloc c-src/etags.c /^xmalloc (size_t size)$/ -XMARKER c-src/emacs/src/lisp.h /^XMARKER (Lisp_Object a)$/ -XMISCANY c-src/emacs/src/lisp.h /^XMISCANY (Lisp_Object a)$/ -XMISC c-src/emacs/src/lisp.h /^XMISC (Lisp_Object a)$/ -XMISCTYPE c-src/emacs/src/lisp.h /^XMISCTYPE (Lisp_Object a)$/ xnew c-src/etags.c /^#define xnew(n, Type) ((Type *) xmalloc ((n) / -XOVERLAY c-src/emacs/src/lisp.h /^XOVERLAY (Lisp_Object a)$/ -XPNTR c-src/emacs/src/lisp.h /^# define XPNTR(a) lisp_h_XPNTR (a)$/ -XPROCESS c-src/emacs/src/lisp.h /^XPROCESS (Lisp_Object a)$/ -/X ps-src/rfc1245.ps /^\/X { $/ xrdef tex-src/texinfo.tex /^\\def\\xrdef #1#2{$/ xrealloc c-src/etags.c /^xrealloc (void *ptr, size_t size)$/ +xref tex-src/texinfo.tex /^\\def\\xref#1{See \\xrefX[#1,,,,,,,]}$/ xref-etags-location el-src/emacs/lisp/progmodes/etags.el /^(defclass xref-etags-location (xref-location)$/ xref-location-line el-src/emacs/lisp/progmodes/etags.el /^(cl-defmethod xref-location-line ((l xref-etags-lo/ xref-location-marker el-src/emacs/lisp/progmodes/etags.el /^(cl-defmethod xref-location-marker ((l xref-etags-/ xref-make-etags-location el-src/emacs/lisp/progmodes/etags.el /^(defun xref-make-etags-location (tag-info file)$/ -xref tex-src/texinfo.tex /^\\def\\xref#1{See \\xrefX[#1,,,,,,,]}$/ -xreftie tex-src/texinfo.tex /^\\gdef\\xreftie{'tie}$/ xrefX tex-src/texinfo.tex /^\\def\\xrefX[#1,#2,#3,#4,#5,#6]{\\begingroup%$/ +xreftie tex-src/texinfo.tex /^\\gdef\\xreftie{'tie}$/ xrnew c-src/etags.c /^#define xrnew(op, n, Type) ((op) = (Type *) xreall/ -XSAVE_FUNCPOINTER c-src/emacs/src/lisp.h /^XSAVE_FUNCPOINTER (Lisp_Object obj, int n)$/ -XSAVE_INTEGER c-src/emacs/src/lisp.h /^XSAVE_INTEGER (Lisp_Object obj, int n)$/ -XSAVE_OBJECT c-src/emacs/src/lisp.h /^XSAVE_OBJECT (Lisp_Object obj, int n)$/ -XSAVE_POINTER c-src/emacs/src/lisp.h /^XSAVE_POINTER (Lisp_Object obj, int n)$/ -XSAVE_VALUE c-src/emacs/src/lisp.h /^XSAVE_VALUE (Lisp_Object a)$/ -XSETBOOL_VECTOR c-src/emacs/src/lisp.h /^#define XSETBOOL_VECTOR(a, b) (XSETPSEUDOVECTOR (a/ -XSETBUFFER c-src/emacs/src/lisp.h /^#define XSETBUFFER(a, b) (XSETPSEUDOVECTOR (a, b, / -XSETCDR c-src/emacs/src/lisp.h /^XSETCDR (Lisp_Object c, Lisp_Object n)$/ -XSETCHAR_TABLE c-src/emacs/src/lisp.h /^#define XSETCHAR_TABLE(a, b) (XSETPSEUDOVECTOR (a,/ -XSETCOMPILED c-src/emacs/src/lisp.h /^#define XSETCOMPILED(a, b) (XSETPSEUDOVECTOR (a, b/ -XSETCONS c-src/emacs/src/lisp.h /^#define XSETCONS(a, b) ((a) = make_lisp_ptr (b, Li/ -XSETFASTINT c-src/emacs/src/lisp.h /^#define XSETFASTINT(a, b) ((a) = make_natnum (b))$/ -XSETFLOAT c-src/emacs/src/lisp.h /^#define XSETFLOAT(a, b) ((a) = make_lisp_ptr (b, L/ -XSET_HASH_TABLE c-src/emacs/src/lisp.h /^#define XSET_HASH_TABLE(VAR, PTR) \\$/ -XSETINT c-src/emacs/src/lisp.h /^#define XSETINT(a, b) ((a) = make_number (b))$/ -XSETMISC c-src/emacs/src/lisp.h /^#define XSETMISC(a, b) ((a) = make_lisp_ptr (b, Li/ -XSETPROCESS c-src/emacs/src/lisp.h /^#define XSETPROCESS(a, b) (XSETPSEUDOVECTOR (a, b,/ -XSETPSEUDOVECTOR c-src/emacs/src/lisp.h /^#define XSETPSEUDOVECTOR(a, b, code) \\$/ -XSETPVECTYPE c-src/emacs/src/lisp.h /^#define XSETPVECTYPE(v, code) \\$/ -XSETPVECTYPESIZE c-src/emacs/src/lisp.h /^#define XSETPVECTYPESIZE(v, code, lispsize, restsi/ -XSETSTRING c-src/emacs/src/lisp.h /^#define XSETSTRING(a, b) ((a) = make_lisp_ptr (b, / -XSETSUB_CHAR_TABLE c-src/emacs/src/lisp.h /^#define XSETSUB_CHAR_TABLE(a, b) (XSETPSEUDOVECTOR/ -XSETSUBR c-src/emacs/src/lisp.h /^#define XSETSUBR(a, b) (XSETPSEUDOVECTOR (a, b, PV/ -XSETSYMBOL c-src/emacs/src/lisp.h /^#define XSETSYMBOL(a, b) ((a) = make_lisp_symbol (/ -XSETTERMINAL c-src/emacs/src/lisp.h /^#define XSETTERMINAL(a, b) (XSETPSEUDOVECTOR (a, b/ -XSETTYPED_PSEUDOVECTOR c-src/emacs/src/lisp.h /^#define XSETTYPED_PSEUDOVECTOR(a, b, size, code) / -XSETVECTOR c-src/emacs/src/lisp.h /^#define XSETVECTOR(a, b) ((a) = make_lisp_ptr (b, / -XSETWINDOW_CONFIGURATION c-src/emacs/src/lisp.h /^#define XSETWINDOW_CONFIGURATION(a, b) \\$/ -XSETWINDOW c-src/emacs/src/lisp.h /^#define XSETWINDOW(a, b) (XSETPSEUDOVECTOR (a, b, / -XSTRING c-src/emacs/src/lisp.h /^XSTRING (Lisp_Object a)$/ -XSUB_CHAR_TABLE c-src/emacs/src/lisp.h /^XSUB_CHAR_TABLE (Lisp_Object a)$/ -XSUBR c-src/emacs/src/lisp.h /^XSUBR (Lisp_Object a)$/ -XSYMBOL c-src/emacs/src/lisp.h /^# define XSYMBOL(a) lisp_h_XSYMBOL (a)$/ -XSYMBOL c-src/emacs/src/lisp.h /^XSYMBOL (Lisp_Object a)$/ -XTERMINAL c-src/emacs/src/lisp.h /^XTERMINAL (Lisp_Object a)$/ -x tex-src/texinfo.tex /^\\refx{#1-snt}{} [\\printednodename], page\\tie\\refx{/ -XTYPE c-src/emacs/src/lisp.h /^# define XTYPE(a) lisp_h_XTYPE (a)$/ -XTYPE c-src/emacs/src/lisp.h /^XTYPE (Lisp_Object a)$/ -XUNTAG c-src/emacs/src/lisp.h /^# define XUNTAG(a, type) lisp_h_XUNTAG (a, type)$/ -XUNTAG c-src/emacs/src/lisp.h /^XUNTAG (Lisp_Object a, int type)$/ -XWINDOW c-src/emacs/src/lisp.h /^XWINDOW (Lisp_Object a)$/ -XX cp-src/x.cc 1 xx make-src/Makefile /^xx="this line is here because of a fontlock bug$/ xyz ruby-src/test1.ru /^ alias_method :xyz,$/ -Xyzzy ruby-src/test1.ru 13 -YACC c-src/etags.c 2199 -Yacc_entries c-src/etags.c /^Yacc_entries (FILE *inf)$/ -Yacc_help c-src/etags.c 693 -Yacc_suffixes c-src/etags.c 691 -Yappendixletterandtype tex-src/texinfo.tex /^\\def\\Yappendixletterandtype{%$/ y cp-src/clheir.hpp 49 y cp-src/clheir.hpp 58 y cp-src/conway.hpp 7 -Y c-src/h.h 100 -YELLOW cp-src/screen.hpp 26 -/yen ps-src/rfc1245.ps /^\/yen \/.notdef \/.notdef \/.notdef \/.notdef \/.notdef / y-get-selection-internal c.c /^ Fy_get_selection_internal, Sy_get_selection_/ -Ynothing tex-src/texinfo.tex /^\\def\\Ynothing{}$/ -Ypagenumber tex-src/texinfo.tex /^\\def\\Ypagenumber{\\folio}$/ -/Y ps-src/rfc1245.ps /^\/Y { $/ -Ysectionnumberandtype tex-src/texinfo.tex /^\\def\\Ysectionnumberandtype{%$/ -YSRC make-src/Makefile /^YSRC=parse.y parse.c atest.y cccp.c cccp.y$/ -Ytitle tex-src/texinfo.tex /^\\def\\Ytitle{\\thischapter}$/ -YYABORT /usr/share/bison/bison.simple 154 -YYACCEPT /usr/share/bison/bison.simple 153 +yyalloc /usr/share/bison/bison.simple 83 yyalloc /usr/share/bison/bison.simple 84 -YYBACKUP /usr/share/bison/bison.simple /^#define YYBACKUP(Token, Value) \\$/ -YYBISON y-src/cccp.c 4 -YYBISON y-src/parse.c 4 +yyclearin /usr/share/bison/bison.simple 149 yyclearin /usr/share/bison/bison.simple 150 +yydebug /usr/share/bison/bison.simple 237 yydebug /usr/share/bison/bison.simple 238 -YY_DECL_NON_LSP_VARIABLES /usr/share/bison/bison.simple 374 -YY_DECL_VARIABLES /usr/share/bison/bison.simple 385 -YY_DECL_VARIABLES /usr/share/bison/bison.simple 391 -YYDPRINTF /usr/share/bison/bison.simple /^# define YYDPRINTF(Args) \\$/ -YYDPRINTF /usr/share/bison/bison.simple /^# define YYDPRINTF(Args)$/ -YYEMPTY /usr/share/bison/bison.simple 151 -YYEOF /usr/share/bison/bison.simple 152 -YYERRCODE /usr/share/bison/bison.simple 179 yyerrhandle /usr/share/bison/bison.simple 848 yyerrlab1 /usr/share/bison/bison.simple 823 yyerrok /usr/share/bison/bison.simple 148 yyerrok /usr/share/bison/bison.simple 149 -YYERROR /usr/share/bison/bison.simple 155 yyerror y-src/cccp.y /^yyerror (s)$/ yyerrstatus /usr/share/bison/bison.simple 846 -YYFAIL /usr/share/bison/bison.simple 159 -YYFPRINTF /usr/share/bison/bison.simple 226 -YYINITDEPTH /usr/share/bison/bison.simple 245 -YYLEX /usr/share/bison/bison.simple 201 -YYLEX /usr/share/bison/bison.simple 203 -YYLEX /usr/share/bison/bison.simple 207 -YYLEX /usr/share/bison/bison.simple 209 -YYLEX /usr/share/bison/bison.simple 213 yylex y-src/cccp.y /^yylex ()$/ -YYLLOC_DEFAULT /usr/share/bison/bison.simple /^# define YYLLOC_DEFAULT(Current, Rhs, N) \\$/ -yylsp /usr/share/bison/bison.simple 748 -yylsp /usr/share/bison/bison.simple 921 yyls /usr/share/bison/bison.simple 88 yyls /usr/share/bison/bison.simple 89 -YYMAXDEPTH /usr/share/bison/bison.simple 256 -YYMAXDEPTH /usr/share/bison/bison.simple 260 +yylsp /usr/share/bison/bison.simple 748 +yylsp /usr/share/bison/bison.simple 921 +yymemcpy /usr/share/bison/bison.simple /^yymemcpy (char *yyto, const char *yyfrom, YYSIZE_T/ yymemcpy /usr/share/bison/bison.simple 264 yymemcpy /usr/share/bison/bison.simple 265 -yymemcpy /usr/share/bison/bison.simple /^yymemcpy (char *yyto, const char *yyfrom, YYSIZE_T/ -yynewstate /usr/share/bison/bison.simple 763 -yynewstate /usr/share/bison/bison.simple 925 yyn /usr/share/bison/bison.simple 755 yyn /usr/share/bison/bison.simple 861 yyn /usr/share/bison/bison.simple 895 yyn /usr/share/bison/bison.simple 903 -YYPARSE_PARAM_ARG /usr/share/bison/bison.simple 351 -YYPARSE_PARAM_ARG /usr/share/bison/bison.simple 354 -YYPARSE_PARAM_ARG /usr/share/bison/bison.simple 358 -YYPARSE_PARAM_DECL /usr/share/bison/bison.simple 352 -YYPARSE_PARAM_DECL /usr/share/bison/bison.simple 355 -YYPARSE_PARAM_DECL /usr/share/bison/bison.simple 359 +yynewstate /usr/share/bison/bison.simple 763 +yynewstate /usr/share/bison/bison.simple 925 yyparse /usr/share/bison/bison.simple /^yyparse (YYPARSE_PARAM_ARG)$/ -YYPOPSTACK /usr/share/bison/bison.simple 445 -YYPOPSTACK /usr/share/bison/bison.simple 447 -YYRECOVERING /usr/share/bison/bison.simple /^#define YYRECOVERING() (!!yyerrstatus)$/ yyresult /usr/share/bison/bison.simple 932 yyresult /usr/share/bison/bison.simple 939 yyresult /usr/share/bison/bison.simple 947 yyreturn /usr/share/bison/bison.simple 933 yyreturn /usr/share/bison/bison.simple 940 -YYSIZE_T /usr/share/bison/bison.simple 129 -YYSIZE_T /usr/share/bison/bison.simple 132 -YYSIZE_T /usr/share/bison/bison.simple 137 -YYSIZE_T /usr/share/bison/bison.simple 141 -YYSIZE_T /usr/share/bison/bison.simple 146 -YYSIZE_T /usr/share/bison/bison.simple 52 -YYSIZE_T /usr/share/bison/bison.simple 57 -YYSIZE_T /usr/share/bison/bison.simple 72 -YYSIZE_T /usr/share/bison/bison.simple 76 yyss /usr/share/bison/bison.simple 85 yyss /usr/share/bison/bison.simple 86 -YYSTACK_ALLOC /usr/share/bison/bison.simple 51 -YYSTACK_ALLOC /usr/share/bison/bison.simple 56 -YYSTACK_ALLOC /usr/share/bison/bison.simple 60 -YYSTACK_ALLOC /usr/share/bison/bison.simple 79 -YYSTACK_BYTES /usr/share/bison/bison.simple /^# define YYSTACK_BYTES(N) \\$/ -YYSTACK_FREE /usr/share/bison/bison.simple 80 -YYSTACK_FREE /usr/share/bison/bison.simple /^# define YYSTACK_FREE(Ptr) do { \/* empty *\/; } wh/ -YYSTACK_GAP_MAX /usr/share/bison/bison.simple 94 -YYSTACK_RELOCATE /usr/share/bison/bison.simple 548 -YYSTACK_RELOCATE /usr/share/bison/bison.simple /^# define YYSTACK_RELOCATE(Type, Stack) \\$/ yystate /usr/share/bison/bison.simple 757 yystate /usr/share/bison/bison.simple 761 yystate /usr/share/bison/bison.simple 875 yystate /usr/share/bison/bison.simple 924 -YYSTD /usr/share/bison/bison.simple /^# define YYSTD(x) std::x$/ -YYSTD /usr/share/bison/bison.simple /^# define YYSTD(x) x$/ +yystpcpy /usr/share/bison/bison.simple /^yystpcpy (char *yydest, const char *yysrc)$/ yystpcpy /usr/share/bison/bison.simple 316 yystpcpy /usr/share/bison/bison.simple 317 -yystpcpy /usr/share/bison/bison.simple /^yystpcpy (char *yydest, const char *yysrc)$/ +yystrlen /usr/share/bison/bison.simple /^yystrlen (const char *yystr)$/ yystrlen /usr/share/bison/bison.simple 293 yystrlen /usr/share/bison/bison.simple 294 -yystrlen /usr/share/bison/bison.simple /^yystrlen (const char *yystr)$/ -YYSTYPE y-src/parse.y 72 -YYSTYPE y-src/parse.y 73 -YYTERROR /usr/share/bison/bison.simple 178 -yyvsp /usr/share/bison/bison.simple 746 -yyvsp /usr/share/bison/bison.simple 919 yyvs /usr/share/bison/bison.simple 86 yyvs /usr/share/bison/bison.simple 87 +yyvsp /usr/share/bison/bison.simple 746 +yyvsp /usr/share/bison/bison.simple 919 z c.c 144 z c.c 164 z cp-src/clheir.hpp 49 z cp-src/clheir.hpp 58 -Z c-src/h.h 100 -/Z ps-src/rfc1245.ps /^\/Z {$/ zzz tex-src/texinfo.tex /^\\def\\infoappendix{\\parsearg\\appendixzzz}$/ zzz tex-src/texinfo.tex /^\\def\\infochapter{\\parsearg\\chapterzzz}$/ zzz tex-src/texinfo.tex /^\\def\\infosection{\\parsearg\\sectionzzz}$/ @@ -4838,3 +4828,16 @@ zzz tex-src/texinfo.tex /^\\def\\infosubsection{\\parsearg\\subsectionzzz}$/ zzz tex-src/texinfo.tex /^\\def\\infosubsubsection{\\parsearg\\subsubsectionzzz}/ zzz tex-src/texinfo.tex /^\\outer\\def\\appendix{\\parsearg\\appendixzzz}$/ zzz tex-src/texinfo.tex /^\\outer\\def\\chapter{\\parsearg\\chapterzzz}$/ +{ tex-src/texinfo.tex /^\\let\\{=\\mylbrace$/ +{ tex-src/texinfo.tex /^\\let\\{=\\ptexlbrace$/ +| tex-src/texinfo.tex /^\\def|{{\\tt \\char '174}}$/ +| tex-src/texinfo.tex /^\\let|=\\normalverticalbar$/ +} tex-src/texinfo.tex /^\\let\\}=\\myrbrace$/ +} tex-src/texinfo.tex /^\\let\\}=\\ptexrbrace$/ +~ tex-src/texinfo.tex /^\\catcode `\\^=7 \\catcode `\\_=8 \\catcode `\\~=13 \\let/ +~ tex-src/texinfo.tex /^\\def~{{\\tt \\char '176}}$/ +~ tex-src/texinfo.tex /^\\let~=\\normaltilde$/ +~A cp-src/c.C /^A::~A() {}$/ +~B cp-src/c.C /^ ~B() {};$/ +~MDiagArray2 cp-src/MDiagArray2.h /^ ~MDiagArray2 (void) { }$/ +~generic_object cp-src/clheir.cpp /^generic_object::~generic_object(void)$/ commit 8db310ce8b4d453cda8114c3a06cd0f328f99a1b Author: Laurent Stacul Date: Mon Mar 31 20:30:27 2025 +0200 Fix etags for Ruby module definitions with :: Problem: In Ruby we can define a nested module/class the safe way (in the sense, if the parent module does not exist, it will define it: module M module N end end If M already exists, we can also write: module M::N; end With the later notation, the tag generated by etags will be M::N. When browsing the code, using xref-find-definitions when the point is on N, will not be able to find the definition of N because the implicit tag name is M::N. This is the same problem with nested classes or even some rare allowed definitions like explicitely defining a module/class from the global namespace: class ::A; end Solution: We need to give an explicit tag name. To achieve this, on module/class definition we truncate the name to the last found column. * lib-src/etags.c (Ruby_functions): Support "::" in module definitions. * test/manual/etags/README: Update instructions. * test/manual/etags/ruby-src/test1.ru: Add identifiers with "::". * test/manual/etags/CTAGS.good: * test/manual/etags/CTAGS.good_crlf: * test/manual/etags/CTAGS.good_update: * test/manual/etags/ETAGS.good_1: * test/manual/etags/ETAGS.good_2: * test/manual/etags/ETAGS.good_3: * test/manual/etags/ETAGS.good_4: * test/manual/etags/ETAGS.good_5: * test/manual/etags/ETAGS.good_6: * test/manual/etags/ETAGS.good_7: Adapt expected results to the change. (Bug#77421) Copyright-paperwork-exempt: yes diff --git a/lib-src/etags.c b/lib-src/etags.c index d511bc39588..6dde9c42e13 100644 --- a/lib-src/etags.c +++ b/lib-src/etags.c @@ -5069,7 +5069,10 @@ Ruby_functions (FILE *inf) /* Ruby method names can end in a '='. Also, operator overloading can define operators whose names include '='. */ while (!notinname (*cp) || *cp == '=') - cp++; + { + cp++; + if (*(cp - 1) == ':') name = cp; + } /* Remove "self." from the method name. */ if (cp - name > self_size1 diff --git a/test/manual/etags/CTAGS.good b/test/manual/etags/CTAGS.good index c7ce42fbd8c..06662895b21 100644 --- a/test/manual/etags/CTAGS.good +++ b/test/manual/etags/CTAGS.good @@ -327,6 +327,7 @@ ButtonBar pyt-src/server.py /^def ButtonBar(frame, legend, ref, alternatives, co C cp-src/fail.C 9 C cp-src/fail.C /^ C(int i) {x = i;}$/ C cp-src/fail.C 25 +C ruby-src/test1.ru /^class A::C; end$/ CALLMANY c-src/emacs/src/lisp.h /^#define CALLMANY(f, array) (f) (ARRAYELTS (array),/ CALLN c-src/emacs/src/lisp.h /^#define CALLN(f, ...) CALLMANY (f, ((Lisp_Object [/ CAR c-src/emacs/src/lisp.h /^CAR (Lisp_Object c)$/ @@ -483,6 +484,7 @@ Cstar_suffixes c-src/etags.c 562 Cube.data.getFoo lua-src/test.lua /^function Cube.data.getFoo ()$/ D cp-src/fail.C 41 D cp-src/fail.C /^ D() : ::A::T2::T(97), x(1066) {}$/ +D ruby-src/test1.ru /^class ::D; end$/ DAEMON_RUNNING c-src/emacs/src/lisp.h 4258 DAEMON_RUNNING c-src/emacs/src/lisp.h 4262 DARKGRAY cp-src/screen.hpp 20 @@ -964,6 +966,7 @@ LowerCaseNmStr pas-src/common.pas /^function LowerCaseNmStr; (*($/ Lua_functions c-src/etags.c /^Lua_functions (FILE *inf)$/ Lua_help c-src/etags.c 600 Lua_suffixes c-src/etags.c 598 +M ruby-src/test1.ru /^module A::M; end$/ MAGENTA cp-src/screen.hpp 17 MAGICBYTE c-src/emacs/src/gmalloc.c 1861 MAGICFREE c-src/emacs/src/gmalloc.c 1860 diff --git a/test/manual/etags/CTAGS.good_crlf b/test/manual/etags/CTAGS.good_crlf index a9efb408cd8..b50cce78635 100644 --- a/test/manual/etags/CTAGS.good_crlf +++ b/test/manual/etags/CTAGS.good_crlf @@ -1,1775 +1,39 @@ -" tex-src/texinfo.tex /^\\def\\turnoffactive{\\let"=\\normaldoublequote$/ -" tex-src/texinfo.tex /^\\let"=\\activedoublequote$/ -#a-defer-word forth-src/test-forth.fth /^defer #a-defer-word$/ -#some-storage forth-src/test-forth.fth /^2000 buffer: #some-storage$/ -$0x80 c-src/sysdep.h 32 -$SYS_##syscall_na c-src/sysdep.h 31 -$domain php-src/lce_functions.php 175 -$filename php-src/lce_functions.php 174 -$ignore_ws php-src/lce_functions.php 171 -$memassign php-src/ptest.php 9 -$memassign_space php-src/ptest.php 10 -$member php-src/ptest.php 8 -$msgid php-src/lce_functions.php 107 -$msgid php-src/lce_functions.php 165 -$msgid_lc php-src/lce_functions.php 113 -$msgstr php-src/lce_functions.php 108 -$msgstr php-src/lce_functions.php 166 -$msgstr_lc php-src/lce_functions.php 114 -$po_entries php-src/lce_functions.php 172 -$poe_num php-src/lce_functions.php 173 -$por_a php-src/lce_functions.php 500 -$prefix php-src/lce_functions.php 72 -$state php-src/lce_functions.php 170 -$sys_comment php-src/lce_functions.php 110 -$sys_comment php-src/lce_functions.php 168 -$sys_comment_lc php-src/lce_functions.php 116 -$test php-src/ptest.php 12 -$unk_comment php-src/lce_functions.php 111 -$unk_comment php-src/lce_functions.php 169 -$unk_comment_lc php-src/lce_functions.php 117 -$user_comment php-src/lce_functions.php 109 -$user_comment php-src/lce_functions.php 167 -$user_comment_lc php-src/lce_functions.php 115 -${CHECKOBJS} make-src/Makefile /^${CHECKOBJS}: CFLAGS=-g3 -DNULLFREECHECK=0$/ -%cdiff make-src/Makefile /^%cdiff: CTAGS% CTAGS ${infiles}$/ -%ediff make-src/Makefile /^%ediff: ETAGS% ETAGS ${infiles}$/ -& tex-src/texinfo.tex /^\\gdef\\functionparens{\\boldbrax\\let&=\\amprm\\parenco/ -& tex-src/texinfo.tex /^\\gdef\\normalparens{\\boldbrax\\let&=\\ampnr}$/ -' tex-src/texinfo.tex /^\\def\\'{{'}}$/ -( tex-src/texinfo.tex /^\\gdef\\amprm#1 {{\\rm\\}\\let(=\\oprm \\let)=\\clrm\\ }/ -( tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ -( tex-src/texinfo.tex /^\\gdef\\oprm#1 {{\\rm\\char`\\(}#1 \\bf \\let(=\\opnested / -( tex-src/texinfo.tex /^\\ifnum \\parencount=1 {\\rm \\char `\\)}\\sl \\let(=\\opr/ -($_,$flag,$opt,$f,$r,@temp perl-src/yagrip.pl 8 -($prog,$_,@list perl-src/yagrip.pl 39 -($string,$flag,@string,@temp,@last perl-src/yagrip.pl 40 -(a-forth-constant forth-src/test-forth.fth /^constant (a-forth-constant$/ -(another-forth-word) forth-src/test-forth.fth /^: (another-forth-word) ( -- )$/ -(foo) forth-src/test-forth.fth /^: (foo) 1 ;$/ -) tex-src/texinfo.tex /^\\gdef\\amprm#1 {{\\rm\\}\\let(=\\oprm \\let)=\\clrm\\ }/ -) tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ -* tex-src/texinfo.tex /^\\def\\*{\\hfil\\break\\hbox{}\\ignorespaces}$/ -* tex-src/texinfo.tex /^\\let\\*=\\ptexstar$/ -+ ruby-src/test.rb /^ def +(y)$/ -+ tex-src/texinfo.tex /^\\def+{{\\tt \\char 43}}$/ -+ tex-src/texinfo.tex /^\\let+=\\normalplus}$/ -. tex-src/texinfo.tex /^\\def\\.{.\\spacefactor=3000 }$/ -. tex-src/texinfo.tex /^\\let\\.=\\ptexdot$/ -.PRECIOUS make-src/Makefile /^.PRECIOUS: ETAGS CTAGS ETAGS16 CTAGS16 ETAGS17 CTA/ -/.notdef ps-src/rfc1245.ps /^\/.notdef \/.notdef \/.notdef \/.notdef \/.notdef \/.not/ -/.notdef ps-src/rfc1245.ps /^\/.notdef \/.notdef \/.notdef \/.notdef \/space \/exclam/ -/A ps-src/rfc1245.ps /^\/A { $/ -/Acircumflex ps-src/rfc1245.ps /^\/Acircumflex \/Ecircumflex \/Aacute \/Edieresis \/Egra/ -/B ps-src/rfc1245.ps /^\/B { $/ -/BEGINBITMAP2BIT ps-src/rfc1245.ps /^\/BEGINBITMAP2BIT { $/ -/BEGINBITMAP2BITc ps-src/rfc1245.ps /^\/BEGINBITMAP2BITc { $/ -/BEGINBITMAPBW ps-src/rfc1245.ps /^\/BEGINBITMAPBW { $/ -/BEGINBITMAPBWc ps-src/rfc1245.ps /^\/BEGINBITMAPBWc { $/ -/BEGINBITMAPGRAY ps-src/rfc1245.ps /^\/BEGINBITMAPGRAY { $/ -/BEGINBITMAPGRAYc ps-src/rfc1245.ps /^\/BEGINBITMAPGRAYc { $/ -/BEGINPRINTCODE ps-src/rfc1245.ps /^\/BEGINPRINTCODE { $/ -/BF ps-src/rfc1245.ps /^\/BF { $/ -/BITMAPCOLOR ps-src/rfc1245.ps /^\/BITMAPCOLOR { $/ -/BITMAPCOLORc ps-src/rfc1245.ps /^\/BITMAPCOLORc { $/ -/BITMAPGRAY ps-src/rfc1245.ps /^\/BITMAPGRAY { $/ -/BITMAPGRAYc ps-src/rfc1245.ps /^\/BITMAPGRAYc { $/ -/C ps-src/rfc1245.ps /^\/C { $/ -/COMMONBITMAP ps-src/rfc1245.ps /^\/COMMONBITMAP { $/ -/COMMONBITMAPc ps-src/rfc1245.ps /^\/COMMONBITMAPc { $/ -/D ps-src/rfc1245.ps /^\/D {curveto} bind def$/ -/DiacriticEncoding ps-src/rfc1245.ps /^\/DiacriticEncoding [$/ -/E ps-src/rfc1245.ps /^\/E {lineto} bind def$/ -/ENDBITMAP ps-src/rfc1245.ps /^\/ENDBITMAP {$/ -/ENDPRINTCODE ps-src/rfc1245.ps /^\/ENDPRINTCODE {$/ -/F ps-src/rfc1245.ps /^\/F { $/ -/FMBEGINEPSF ps-src/rfc1245.ps /^\/FMBEGINEPSF { $/ -/FMBEGINPAGE ps-src/rfc1245.ps /^\/FMBEGINPAGE { $/ -/FMDEFINEFONT ps-src/rfc1245.ps /^\/FMDEFINEFONT { $/ -/FMDOCUMENT ps-src/rfc1245.ps /^\/FMDOCUMENT { $/ -/FMENDEPSF ps-src/rfc1245.ps /^\/FMENDEPSF {$/ -/FMENDPAGE ps-src/rfc1245.ps /^\/FMENDPAGE {$/ -/FMLOCAL ps-src/rfc1245.ps /^\/FMLOCAL {$/ -/FMNORMALIZEGRAPHICS ps-src/rfc1245.ps /^\/FMNORMALIZEGRAPHICS { $/ -/FMVERSION ps-src/rfc1245.ps /^\/FMVERSION {$/ -/FMversion ps-src/rfc1245.ps /^\/FMversion (2.0) def $/ -/Fmcc ps-src/rfc1245.ps /^\/Fmcc {$/ -/FrameDict ps-src/rfc1245.ps /^\/FrameDict 190 dict def $/ -/G ps-src/rfc1245.ps /^\/G { $/ -/H ps-src/rfc1245.ps /^\/H { $/ -/Icircumflex ps-src/rfc1245.ps /^\/Icircumflex \/Idieresis \/Igrave \/Oacute \/Ocircumfl/ -/L ps-src/rfc1245.ps /^\/L \/M \/N \/O \/P \/Q \/R \/S \/T \/U \/V \/W \/X \/Y \/Z \/brac/ -/L ps-src/rfc1245.ps /^\/L { $/ -/M ps-src/rfc1245.ps /^\/M {newpath moveto} bind def$/ -/N ps-src/rfc1245.ps /^\/N { $/ -/Ntilde ps-src/rfc1245.ps /^\/Ntilde \/Odieresis \/Udieresis \/aacute \/agrave \/aci/ -/O ps-src/rfc1245.ps /^\/O {closepath} bind def$/ -/Otilde ps-src/rfc1245.ps /^\/Otilde \/OE \/oe \/endash \/emdash \/quotedblleft \/quo/ -/P ps-src/rfc1245.ps /^\/P { $/ -/PF ps-src/rfc1245.ps /^\/PF { $/ -/R ps-src/rfc1245.ps /^\/R { $/ -/RF ps-src/rfc1245.ps /^\/RF { $/ -/RR ps-src/rfc1245.ps /^\/RR { $/ -/ReEncode ps-src/rfc1245.ps /^\/ReEncode { $/ -/S ps-src/rfc1245.ps /^\/S { $/ -/SF ps-src/rfc1245.ps /^\/SF { $/ -/T ps-src/rfc1245.ps /^\/T { $/ -/TF ps-src/rfc1245.ps /^\/TF { $/ -/U ps-src/rfc1245.ps /^\/U { $/ -/Uacute ps-src/rfc1245.ps /^\/Uacute \/Ucircumflex \/Ugrave \/dotlessi \/circumflex/ -/V ps-src/rfc1245.ps /^\/V { $/ -/W ps-src/rfc1245.ps /^\/W { $/ -/X ps-src/rfc1245.ps /^\/X { $/ -/Y ps-src/rfc1245.ps /^\/Y { $/ -/Z ps-src/rfc1245.ps /^\/Z {$/ -/atilde ps-src/rfc1245.ps /^\/atilde \/aring \/ccedilla \/eacute \/egrave \/ecircumf/ -/bl ps-src/rfc1245.ps /^\/bl { $/ -/braceright ps-src/rfc1245.ps /^\/braceright \/asciitilde \/.notdef \/Adieresis \/Aring/ -/bracketright ps-src/rfc1245.ps /^\/bracketright \/asciicircum \/underscore \/grave \/a \// -/breve ps-src/rfc1245.ps /^\/breve \/dotaccent \/ring \/cedilla \/hungarumlaut \/og/ -/cfs ps-src/rfc1245.ps /^\/cfs { $/ -/colorsetup ps-src/rfc1245.ps /^\/colorsetup {$/ -/desperatepapersize ps-src/rfc1245.ps /^\/desperatepapersize {$/ -/dieresis ps-src/rfc1245.ps /^\/dieresis \/.notdef \/AE \/Oslash \/.notdef \/.notdef \// -/dmatrix ps-src/rfc1245.ps /^\/dmatrix matrix def$/ -/dnormalize ps-src/rfc1245.ps /^\/dnormalize {$/ -/dpi ps-src/rfc1245.ps /^\/dpi 72 0 dmatrix defaultmatrix dtransform$/ -/exclamdown ps-src/rfc1245.ps /^\/exclamdown \/logicalnot \/.notdef \/florin \/.notdef / -/fakecolorsetup ps-src/rfc1245.ps /^\/fakecolorsetup {$/ -/fillprocs ps-src/rfc1245.ps /^\/fillprocs 32 array def$/ -/fl ps-src/rfc1245.ps /^\/fl { $/ -/fraction ps-src/rfc1245.ps /^\/fraction \/currency \/guilsinglleft \/guilsinglright/ -/freq ps-src/rfc1245.ps /^\/freq dpi 18.75 div 8 div round dup 0 eq {pop 1} i/ -/gn ps-src/rfc1245.ps /^\/gn { $/ -/graymode ps-src/rfc1245.ps /^\/graymode true def$/ -/grayness ps-src/rfc1245.ps /^\/grayness {$/ -/guillemotleft ps-src/rfc1245.ps /^\/guillemotleft \/guillemotright \/ellipsis \/.notdef / -/home/www/pub/etags.c.gz make-src/Makefile /^\/home\/www\/pub\/etags.c.gz: etags.c$/ -/home/www/pub/software/unix/etags.tar.gz make-src/Makefile /^\/home\/www\/pub\/software\/unix\/etags.tar.gz: Makefile/ -/hx ps-src/rfc1245.ps /^\/hx { $/ -/i ps-src/rfc1245.ps /^\/i \/j \/k \/l \/m \/n \/o \/p \/q \/r \/s \/t \/u \/v \/w \/x \/y/ -/iacute ps-src/rfc1245.ps /^\/iacute \/igrave \/icircumflex \/idieresis \/ntilde \/o/ -/ic ps-src/rfc1245.ps /^\/ic [ $/ -/inch ps-src/rfc1245.ps /^\/inch {72 mul} def$/ -/ip ps-src/rfc1245.ps /^\/ip { $/ -/less ps-src/rfc1245.ps /^\/less \/equal \/greater \/question \/at \/A \/B \/C \/D \/E/ -/lnormalize ps-src/rfc1245.ps /^\/lnormalize { $/ -/manualpapersize ps-src/rfc1245.ps /^\/manualpapersize {$/ -/max ps-src/rfc1245.ps /^\/max {2 copy lt {exch} if pop} bind def$/ -/min ps-src/rfc1245.ps /^\/min {2 copy gt {exch} if pop} bind def$/ -/ms ps-src/rfc1245.ps /^\/ms { $/ -/nbluet ps-src/rfc1245.ps /^\/nbluet 256 array def$/ -/ngrayt ps-src/rfc1245.ps /^\/ngrayt 256 array def$/ -/ngreent ps-src/rfc1245.ps /^\/ngreent 256 array def$/ -/normalize ps-src/rfc1245.ps /^\/normalize {$/ -/nredt ps-src/rfc1245.ps /^\/nredt 256 array def$/ -/numbersign ps-src/rfc1245.ps /^\/numbersign \/dollar \/percent \/ampersand \/quotesing/ -/ocircumflex ps-src/rfc1245.ps /^\/ocircumflex \/odieresis \/otilde \/uacute \/ugrave \/u/ -/ordfeminine ps-src/rfc1245.ps /^\/ordfeminine \/ordmasculine \/.notdef \/ae \/oslash \/q/ -/pagedimen ps-src/rfc1245.ps /^\/pagedimen { $/ -/papersize ps-src/rfc1245.ps /^\/papersize {$/ -/paragraph ps-src/rfc1245.ps /^\/paragraph \/germandbls \/registered \/copyright \/tra/ -/parenright ps-src/rfc1245.ps /^\/parenright \/asterisk \/plus \/comma \/hyphen \/period/ -/periodcentered ps-src/rfc1245.ps /^\/periodcentered \/quotesinglbase \/quotedblbase \/per/ -/quoteleft ps-src/rfc1245.ps /^\/quoteleft \/quoteright \/.notdef \/.notdef \/ydieresi/ -/restorematrix ps-src/rfc1245.ps /^\/restorematrix {$/ -/s1 ps-src/rfc1245.ps /^\/s1 1 string def$/ -/sangle ps-src/rfc1245.ps /^\/sangle 1 0 dmatrix defaultmatrix dtransform exch / -/savematrix ps-src/rfc1245.ps /^\/savematrix {$/ -/setmanualfeed ps-src/rfc1245.ps /^\/setmanualfeed {$/ -/setpapername ps-src/rfc1245.ps /^\/setpapername { $/ -/setpattern ps-src/rfc1245.ps /^\/setpattern {$/ -/two ps-src/rfc1245.ps /^\/two \/three \/four \/five \/six \/seven \/eight \/nine \// -/udieresis ps-src/rfc1245.ps /^\/udieresis \/dagger \/.notdef \/cent \/sterling \/secti/ -/wbytes ps-src/rfc1245.ps /^\/wbytes { $/ -/wh ps-src/rfc1245.ps /^\/wh { $/ -/yen ps-src/rfc1245.ps /^\/yen \/.notdef \/.notdef \/.notdef \/.notdef \/.notdef / -2const forth-src/test-forth.fth /^3 4 2constant 2const$/ -2val forth-src/test-forth.fth /^2const 2value 2val$/ -2var forth-src/test-forth.fth /^2variable 2var$/ -: tex-src/texinfo.tex /^\\def\\:{\\spacefactor=1000 }$/ -:a-forth-dictionary-entry forth-src/test-forth.fth /^create :a-forth-dictionary-entry$/ -< tex-src/texinfo.tex /^\\def<{{\\tt \\less}}$/ -< tex-src/texinfo.tex /^\\let<=\\normalless$/ -<< ruby-src/test.rb /^ def <<(y)$/ -<= ruby-src/test.rb /^ def <=(y)$/ -<=> ruby-src/test.rb /^ def <=>(y)$/ -= tex-src/texinfo.tex /^\\global\\def={{\\tt \\char 61}}}$/ -=/f ada-src/etags-test-for.ada /^ function "=" (L, R : System.Address) return Boo/ -== ruby-src/test.rb /^ def ==(y)$/ -=== ruby-src/test.rb /^ def ===(y)$/ -=starts-with-equals! scm-src/test.scm /^(define =starts-with-equals! #t)$/ -> tex-src/texinfo.tex /^\\def>{{\\tt \\gtr}}$/ -> tex-src/texinfo.tex /^\\let>=\\normalgreater$/ ->field1 forth-src/test-forth.fth /^ 9 field >field1$/ ->field2 forth-src/test-forth.fth /^ 5 field >field2$/ -@ tex-src/texinfo.tex /^\\def\\@{@}%$/ -@ tex-src/texinfo.tex /^\\def\\@{{\\tt \\char '100}}$/ -@sf tex-src/texinfo.tex /^\\ifhmode\\edef\\@sf{\\spacefactor\\the\\spacefactor}\\\/\\/ -@sf tex-src/texinfo.tex /^\\let\\@sf\\empty$/ -A c.c 162 -A cp-src/c.C /^void A::A() {}$/ -A cp-src/c.C 117 -A cp-src/c.C 39 -A cp-src/c.C 56 -A cp-src/c.C 57 -A cp-src/c.C 73 -A cp-src/fail.C 23 -A cp-src/fail.C 7 -A ruby-src/test1.ru /^class A$/ -A ruby-src/test1.ru /^module A$/ -ABC ruby-src/test1.ru 11 -ADASRC make-src/Makefile /^ADASRC=etags-test-for.ada 2ataspri.adb 2ataspri.ad/ -ADDRESS c-src/emacs/src/gmalloc.c /^#define ADDRESS(B) ((void *) (((B) - 1) * BLOCKSIZ/ -ALIGNOF_STRUCT_LISP_VECTOR c-src/emacs/src/lisp.h 1378 -ALLOCATED_BEFORE_DUMPING c-src/emacs/src/gmalloc.c /^#define ALLOCATED_BEFORE_DUMPING(P) \\$/ -ALLOCATE_PSEUDOVECTOR c-src/emacs/src/lisp.h /^#define ALLOCATE_PSEUDOVECTOR(type, field, tag) / -ALLOCATE_ZEROED_PSEUDOVECTOR c-src/emacs/src/lisp.h /^#define ALLOCATE_ZEROED_PSEUDOVECTOR(type, field, / -AND y-src/cccp.c 11 -ANSIC c-src/h.h 84 -ANSIC c-src/h.h 85 -AREF c-src/emacs/src/lisp.h /^AREF (Lisp_Object array, ptrdiff_t idx)$/ -ARGS make-src/Makefile /^ARGS=- < srclist$/ -ARITH_EQUAL c-src/emacs/src/lisp.h 3498 -ARITH_GRTR c-src/emacs/src/lisp.h 3501 -ARITH_GRTR_OR_EQUAL c-src/emacs/src/lisp.h 3503 -ARITH_LESS c-src/emacs/src/lisp.h 3500 -ARITH_LESS_OR_EQUAL c-src/emacs/src/lisp.h 3502 -ARITH_NOTEQUAL c-src/emacs/src/lisp.h 3499 -ARRAYELTS c-src/emacs/src/lisp.h /^#define ARRAYELTS(arr) (sizeof (arr) \/ sizeof (arr/ -ARRAYP c-src/emacs/src/lisp.h /^ARRAYP (Lisp_Object x)$/ -ARRAY_MARK_FLAG c-src/emacs/src/lisp.h 768 -ASCII_CHAR_P c-src/emacs/src/lisp.h /^#define ASCII_CHAR_P(c) UNSIGNED_CMP (c, <, 0x80)$/ -ASET c-src/emacs/src/lisp.h /^ASET (Lisp_Object array, ptrdiff_t idx, Lisp_Objec/ -ASIZE c-src/emacs/src/lisp.h /^ASIZE (Lisp_Object array)$/ -ASRC make-src/Makefile /^ASRC=empty.zz empty.zz.gz$/ -AST_Array::AST_Array cp-src/c.C /^AST_Array::AST_Array(UTL_ScopedName *n, unsigned l/ -AST_ConcreteType::AST_ConcreteType cp-src/c.C /^AST_ConcreteType::AST_ConcreteType(AST_Decl::NodeT/ -AST_Root cp-src/c.C 92 -AT cp-src/c.C 52 -AU cp-src/c.C 53 -AUTOLOADP c-src/emacs/src/lisp.h /^AUTOLOADP (Lisp_Object x)$/ -AUTO_CONS c-src/emacs/src/lisp.h /^#define AUTO_CONS(name, a, b) Lisp_Object name = A/ -AUTO_CONS_EXPR c-src/emacs/src/lisp.h /^#define AUTO_CONS_EXPR(a, b) \\$/ -AUTO_LIST1 c-src/emacs/src/lisp.h /^#define AUTO_LIST1(name, a) \\$/ -AUTO_LIST2 c-src/emacs/src/lisp.h /^#define AUTO_LIST2(name, a, b) \\$/ -AUTO_LIST3 c-src/emacs/src/lisp.h /^#define AUTO_LIST3(name, a, b, c) \\$/ -AUTO_LIST4 c-src/emacs/src/lisp.h /^#define AUTO_LIST4(name, a, b, c, d) \\$/ -AUTO_STRING c-src/emacs/src/lisp.h /^#define AUTO_STRING(name, str) \\$/ -AVAIL_ALLOCA c-src/emacs/src/lisp.h /^#define AVAIL_ALLOCA(size) (sa_avail -= (size), al/ -Abort_Handler_Pointer/t ada-src/2ataspri.ads /^ type Abort_Handler_Pointer is access procedure / -Abort_Task/p ada-src/2ataspri.adb /^ procedure Abort_Task (T : TCB_Ptr) is$/ -Abort_Task/p ada-src/2ataspri.ads /^ procedure Abort_Task (T : TCB_Ptr);$/ -Abort_Wrapper/p ada-src/2ataspri.adb /^ procedure Abort_Wrapper$/ -Ada_funcs c-src/etags.c /^Ada_funcs (FILE *inf)$/ -Ada_getit c-src/etags.c /^Ada_getit (FILE *inf, const char *name_qualifier)$/ -Ada_help c-src/etags.c 475 -Ada_suffixes c-src/etags.c 473 -AddNullToNmStr pas-src/common.pas /^function AddNullToNmStr; (*($/ -Address_To_Call_State/f ada-src/2ataspri.adb /^ function Address_To_Call_State is new$/ -Address_To_TCB_Ptr/f ada-src/2ataspri.ads /^ function Address_To_TCB_Ptr is new$/ -Advanced usage tex-src/gzip.texi /^@node Advanced usage, Environment, Invoking gzip, / -Aligned_Cons c-src/emacs/src/lisp.h 4670 -Aligned_String c-src/emacs/src/lisp.h 4676 -AppendTextString pas-src/common.pas /^function AppendTextString;(*($/ -Arith_Comparison c-src/emacs/src/lisp.h 3497 -Asm_help c-src/etags.c 504 -Asm_labels c-src/etags.c /^Asm_labels (FILE *inf)$/ -Asm_suffixes c-src/etags.c 493 -B cp-src/c.C /^void B::B() {}$/ -B cp-src/c.C 122 -B cp-src/c.C 54 -B cp-src/c.C 56 -B cp-src/c.C 74 -B cp-src/fail.C 24 -B cp-src/fail.C 8 -B ruby-src/test1.ru /^ class B$/ -BE_Node cp-src/c.C /^void BE_Node::BE_Node() {}$/ -BE_Node cp-src/c.C 77 -BITS_PER_BITS_WORD c-src/emacs/src/lisp.h 125 -BITS_PER_BITS_WORD c-src/emacs/src/lisp.h 129 -BITS_PER_CHAR c-src/emacs/src/lisp.h 136 -BITS_PER_EMACS_INT c-src/emacs/src/lisp.h 139 -BITS_PER_LONG c-src/emacs/src/lisp.h 138 -BITS_PER_SHORT c-src/emacs/src/lisp.h 137 -BITS_WORD_MAX c-src/emacs/src/lisp.h 124 -BITS_WORD_MAX c-src/emacs/src/lisp.h 128 -BLACK cp-src/screen.hpp 12 -BLOCK c-src/emacs/src/gmalloc.c /^#define BLOCK(A) (((char *) (A) - _heapbase) \/ BLO/ -BLOCKIFY c-src/emacs/src/gmalloc.c /^#define BLOCKIFY(SIZE) (((SIZE) + BLOCKSIZE - 1) \// -BLOCKLOG c-src/emacs/src/gmalloc.c 125 -BLOCKSIZE c-src/emacs/src/gmalloc.c 126 -BLUE cp-src/screen.hpp 13 -BOOL_VECTOR_BITS_PER_CHAR c-src/emacs/src/lisp.h 114 -BOOL_VECTOR_BITS_PER_CHAR c-src/emacs/src/lisp.h 115 -BOOL_VECTOR_P c-src/emacs/src/lisp.h /^BOOL_VECTOR_P (Lisp_Object a)$/ -BROWN cp-src/screen.hpp 18 -BUFFERP c-src/emacs/src/lisp.h /^BUFFERP (Lisp_Object a)$/ -BUFFERSIZE objc-src/Subprocess.h 43 -BUFFER_OBJFWDP c-src/emacs/src/lisp.h /^BUFFER_OBJFWDP (union Lisp_Fwd *a)$/ -BYTE_MARK_STACK c-src/emacs/src/lisp.h 3181 -Bar lua-src/test.lua /^function Square.something:Bar ()$/ -Bar perl-src/kai-test.pl /^package Bar;$/ -Barrier_Function_Pointer/t ada-src/etags-test-for.ada /^ type Barrier_Function_Pointer is access$/ -Bidule/b ada-src/etags-test-for.ada /^ protected body Bidule is$/ -Bidule/b ada-src/waroquiers.ada /^ protected body Bidule is$/ -Bidule/t ada-src/etags-test-for.ada /^ protected Bidule is$/ -Bidule/t ada-src/waroquiers.ada /^ protected Bidule is$/ -Body_Required/f ada-src/etags-test-for.ada /^ function Body_Required$/ -Boo cp-src/c.C /^ Boo(int _i, int _a, int _b) : i(_i), a(_a), b(/ -Boo cp-src/c.C 129 -Boo::Boo cp-src/c.C /^Boo::Boo(Boo) :$/ -ButtonBar pyt-src/server.py /^def ButtonBar(frame, legend, ref, alternatives, co/ -C cp-src/fail.C /^ C(int i) {x = i;}$/ -C cp-src/fail.C 25 -C cp-src/fail.C 9 -CALLMANY c-src/emacs/src/lisp.h /^#define CALLMANY(f, array) (f) (ARRAYELTS (array),/ -CALLN c-src/emacs/src/lisp.h /^#define CALLN(f, ...) CALLMANY (f, ((Lisp_Object [/ -CAR c-src/emacs/src/lisp.h /^CAR (Lisp_Object c)$/ -CAR_SAFE c-src/emacs/src/lisp.h /^CAR_SAFE (Lisp_Object c)$/ -CATCHER c-src/emacs/src/lisp.h 3021 -CDR c-src/emacs/src/lisp.h /^CDR (Lisp_Object c)$/ -CDR_SAFE c-src/emacs/src/lisp.h /^CDR_SAFE (Lisp_Object c)$/ -CFLAGS make-src/Makefile /^CFLAGS=${WARNINGS} -ansi -g3 # -pg -O$/ -CHAPFopen tex-src/texinfo.tex /^\\def\\CHAPFopen{$/ -CHAPFplain tex-src/texinfo.tex /^\\def\\CHAPFplain{$/ -CHAPPAGodd tex-src/texinfo.tex /^\\def\\CHAPPAGodd{$/ -CHAPPAGoff tex-src/texinfo.tex /^\\def\\CHAPPAGoff{$/ -CHAPPAGon tex-src/texinfo.tex /^\\def\\CHAPPAGon{$/ -CHAR c-src/etags.c /^#define CHAR(x) ((unsigned int)(x) & (CHARS - 1))/ -CHAR y-src/cccp.c 7 -CHARACTERBITS c-src/emacs/src/lisp.h 2457 -CHARS c-src/etags.c 157 -CHARTAB_SIZE_BITS c-src/emacs/src/lisp.h 1565 -CHARTAB_SIZE_BITS_0 c-src/emacs/src/lisp.h 1567 -CHARTAB_SIZE_BITS_1 c-src/emacs/src/lisp.h 1568 -CHARTAB_SIZE_BITS_2 c-src/emacs/src/lisp.h 1569 -CHARTAB_SIZE_BITS_3 c-src/emacs/src/lisp.h 1570 -CHAR_ALT c-src/emacs/src/lisp.h 2445 -CHAR_BIT c-src/emacs/src/lisp.h 2957 -CHAR_BIT c-src/emacs/src/lisp.h 2959 -CHAR_BIT c-src/emacs/src/lisp.h 2964 -CHAR_BIT c-src/emacs/src/lisp.h 2969 -CHAR_BIT c-src/emacs/src/lisp.h 2974 -CHAR_BIT c-src/emacs/src/lisp.h 2978 -CHAR_BIT c-src/emacs/src/lisp.h 2983 -CHAR_CLASS_MAX_LENGTH c-src/emacs/src/regex.h 593 -CHAR_CLASS_MAX_LENGTH c-src/emacs/src/regex.h 597 -CHAR_CLASS_MAX_LENGTH c-src/emacs/src/regex.h 605 -CHAR_CTL c-src/emacs/src/lisp.h 2449 -CHAR_HYPER c-src/emacs/src/lisp.h 2447 -CHAR_META c-src/emacs/src/lisp.h 2450 -CHAR_MODIFIER_MASK c-src/emacs/src/lisp.h 2452 -CHAR_SHIFT c-src/emacs/src/lisp.h 2448 -CHAR_SUPER c-src/emacs/src/lisp.h 2446 -CHAR_TABLE_EXTRA_SLOTS c-src/emacs/src/lisp.h /^CHAR_TABLE_EXTRA_SLOTS (struct Lisp_Char_Table *ct/ -CHAR_TABLE_P c-src/emacs/src/lisp.h /^CHAR_TABLE_P (Lisp_Object a)$/ -CHAR_TABLE_REF c-src/emacs/src/lisp.h /^CHAR_TABLE_REF (Lisp_Object ct, int idx)$/ -CHAR_TABLE_REF_ASCII c-src/emacs/src/lisp.h /^CHAR_TABLE_REF_ASCII (Lisp_Object ct, ptrdiff_t id/ -CHAR_TABLE_SET c-src/emacs/src/lisp.h /^CHAR_TABLE_SET (Lisp_Object ct, int idx, Lisp_Obje/ -CHAR_TABLE_STANDARD_SLOTS c-src/emacs/src/lisp.h 1697 -CHAR_TYPE_SIZE y-src/cccp.y 87 -CHECKFLAGS make-src/Makefile /^CHECKFLAGS=-DDEBUG -Wno-unused-function$/ -CHECKOBJS make-src/Makefile /^CHECKOBJS=chkmalloc.o chkxm.o$/ -CHECK_ARRAY c-src/emacs/src/lisp.h /^CHECK_ARRAY (Lisp_Object x, Lisp_Object predicate)/ -CHECK_BOOL_VECTOR c-src/emacs/src/lisp.h /^CHECK_BOOL_VECTOR (Lisp_Object x)$/ -CHECK_BUFFER c-src/emacs/src/lisp.h /^CHECK_BUFFER (Lisp_Object x)$/ -CHECK_CONS c-src/emacs/src/lisp.h /^CHECK_CONS (Lisp_Object x)$/ -CHECK_LISP_OBJECT_TYPE c-src/emacs/src/lisp.h 571 -CHECK_LISP_OBJECT_TYPE c-src/emacs/src/lisp.h 572 -CHECK_LISP_OBJECT_TYPE c-src/emacs/src/lisp.h 579 -CHECK_LIST c-src/emacs/src/lisp.h /^CHECK_LIST (Lisp_Object x)$/ -CHECK_LIST_CONS c-src/emacs/src/lisp.h /^# define CHECK_LIST_CONS(x, y) lisp_h_CHECK_LIST_C/ -CHECK_NATNUM c-src/emacs/src/lisp.h /^CHECK_NATNUM (Lisp_Object x)$/ -CHECK_NUMBER c-src/emacs/src/lisp.h /^# define CHECK_NUMBER(x) lisp_h_CHECK_NUMBER (x)$/ -CHECK_NUMBER_CAR c-src/emacs/src/lisp.h /^CHECK_NUMBER_CAR (Lisp_Object x)$/ -CHECK_NUMBER_CDR c-src/emacs/src/lisp.h /^CHECK_NUMBER_CDR (Lisp_Object x)$/ -CHECK_NUMBER_COERCE_MARKER c-src/emacs/src/lisp.h /^#define CHECK_NUMBER_COERCE_MARKER(x) \\$/ -CHECK_NUMBER_OR_FLOAT c-src/emacs/src/lisp.h /^CHECK_NUMBER_OR_FLOAT (Lisp_Object x)$/ -CHECK_NUMBER_OR_FLOAT_COERCE_MARKER c-src/emacs/src/lisp.h /^#define CHECK_NUMBER_OR_FLOAT_COERCE_MARKER(x) / -CHECK_PROCESS c-src/emacs/src/lisp.h /^CHECK_PROCESS (Lisp_Object x)$/ -CHECK_RANGED_INTEGER c-src/emacs/src/lisp.h /^#define CHECK_RANGED_INTEGER(x, lo, hi) \\$/ -CHECK_STRING_CAR c-src/emacs/src/lisp.h /^CHECK_STRING_CAR (Lisp_Object x)$/ -CHECK_SYMBOL c-src/emacs/src/lisp.h /^# define CHECK_SYMBOL(x) lisp_h_CHECK_SYMBOL (x)$/ -CHECK_TYPE c-src/emacs/src/lisp.h /^# define CHECK_TYPE(ok, predicate, x) lisp_h_CHECK/ -CHECK_TYPE_RANGED_INTEGER c-src/emacs/src/lisp.h /^#define CHECK_TYPE_RANGED_INTEGER(type, x) \\$/ -CHECK_VECTOR c-src/emacs/src/lisp.h /^CHECK_VECTOR (Lisp_Object x)$/ -CHECK_VECTOR_OR_STRING c-src/emacs/src/lisp.h /^CHECK_VECTOR_OR_STRING (Lisp_Object x)$/ -CHECK_WINDOW c-src/emacs/src/lisp.h /^CHECK_WINDOW (Lisp_Object x)$/ -CK_ABS_C y-src/parse.y /^#define CK_ABS_C(x) if((x)MAX_COL)/ -CK_ABS_R y-src/parse.y /^#define CK_ABS_R(x) if((x)MAX_ROW)/ -CK_REL_C y-src/parse.y /^#define CK_REL_C(x) if( ((x)>0 && MAX_COL-(x)0 && MAX_ROW-(x)/ -MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (const Array& a) : DiagArray2 / -MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (const DiagArray2& a) : DiagArray/ -MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (const MDiagArray2& a) : DiagArra/ -MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (int r, int c) : DiagArray2 (r, c/ -MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (int r, int c, const T& val) : DiagA/ -MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (void) : DiagArray2 () { }$/ -MDiagArray2 cp-src/MDiagArray2.h 78 -MIN_HASH_VALUE c-src/etags.c 2328 -MIN_WORD_LENGTH c-src/etags.c 2326 -MISCP c-src/emacs/src/lisp.h /^# define MISCP(x) lisp_h_MISCP (x)$/ -MOST_NEGATIVE_FIXNUM c-src/emacs/src/lisp.h 835 -MOST_POSITIVE_FIXNUM c-src/emacs/src/lisp.h 834 -MOVE c-src/sysdep.h /^#define MOVE(x,y) movl x, y$/ -MSDOS c-src/etags.c 100 -MSDOS c-src/etags.c 106 -MSDOS c-src/etags.c 107 -MSDOS c-src/etags.c 110 -MSGSEL f-src/entry.for /^ ENTRY MSGSEL ( TYPE )$/ -MSGSEL f-src/entry.strange /^ ENTRY MSGSEL ( TYPE )$/ -MSGSEL f-src/entry.strange_suffix /^ ENTRY MSGSEL ( TYPE )$/ -MULTI_LETTER_MOD c-src/emacs/src/keyboard.c /^#define MULTI_LETTER_MOD(BIT, NAME, LEN) \\$/ -MULTI_LETTER_MOD c-src/emacs/src/keyboard.c /^#define MULTI_LETTER_MOD(BIT, NAME, LEN) \\$/ -MULTI_LETTER_MOD c-src/emacs/src/keyboard.c 6231 -MULTI_LETTER_MOD c-src/emacs/src/keyboard.c 6764 -Machin_T/b ada-src/waroquiers.ada /^ protected body Machin_T is$/ -Machin_T/t ada-src/etags-test-for.ada /^ protected Machin_T is$/ -Machin_T/t ada-src/etags-test-for.ada /^ protected type Machin_T is$/ -Machin_T/t ada-src/waroquiers.ada /^ protected type Machin_T is$/ -Machine_Exceptions/t ada-src/2ataspri.ads /^ type Machine_Exceptions is new Interfaces.C.POS/ -MakeDispose pyt-src/server.py /^ def MakeDispose(self):$/ -MakeSitelist pyt-src/server.py /^ def MakeSitelist(self, master):$/ -Makefile_filenames c-src/etags.c 603 -Makefile_help c-src/etags.c 605 -Makefile_targets c-src/etags.c /^Makefile_targets (FILE *inf)$/ -Mc cp-src/c.C /^int main (void) { my_function0(0); my_function1(1)/ -Mcccp y-src/cccp.y /^main ()$/ -Mconway.cpp cp-src/conway.cpp /^void main(void)$/ -Metags c-src/etags.c /^main (int argc, char **argv)$/ -Mfail cp-src/fail.C /^main()$/ -Mkai-test.pl perl-src/kai-test.pl /^package main;$/ -ModuleExample ruby-src/test.rb /^module ModuleExample$/ -More_Lisp_Bits c-src/emacs/src/lisp.h 801 -MoveLayerAfter lua-src/allegro.lua /^function MoveLayerAfter (this_one)$/ -MoveLayerBefore lua-src/allegro.lua /^function MoveLayerBefore (this_one)$/ -MoveLayerBottom lua-src/allegro.lua /^function MoveLayerBottom ()$/ -MoveLayerTop lua-src/allegro.lua /^function MoveLayerTop ()$/ -Mtest.go go-src/test.go /^func main() {$/ -Mtest.go go-src/test.go 1 -Mtest.rs rs-src/test.rs /^fn main() {$/ -Mtest1.go go-src/test1.go /^func main() {$/ -Mtest1.go go-src/test1.go 1 -Mx.cc cp-src/x.cc /^main(int argc, char *argv[])$/ -NAME y-src/cccp.c 8 -NATNUMP c-src/emacs/src/lisp.h /^NATNUMP (Lisp_Object x)$/ -NDEBUG c-src/etags.c 88 -NE y-src/parse.c 6 -NEG y-src/parse.c 9 -NEXT_ALMOST_PRIME_LIMIT c-src/emacs/src/lisp.h 3573 -NILP c-src/emacs/src/lisp.h /^# define NILP(x) lisp_h_NILP (x)$/ -NIL_IS_ZERO c-src/emacs/src/lisp.h 1515 -NONPOINTER_BITS c-src/emacs/src/lisp.h 78 -NONPOINTER_BITS c-src/emacs/src/lisp.h 80 -NONSRCS make-src/Makefile /^NONSRCS=entry.strange lists.erl clheir.hpp.gz$/ -NOTEQUAL y-src/cccp.c 13 -NULL y-src/cccp.y 51 -NULL_PTR y-src/cccp.y 63 -NUMSTATS objc-src/PackInsp.h 36 -NUM_MOD_NAMES c-src/emacs/src/keyboard.c 6325 -NUM_RECENT_KEYS c-src/emacs/src/keyboard.c 91 -NameHasChar pas-src/common.pas /^function NameHasChar; (* (TheName : NameString; Th/ -NameStringLess pas-src/common.pas /^function NameStringLess;(*(var Name1,Name2 : NameS/ -NewLayer lua-src/allegro.lua /^function NewLayer (name, x, y, w, h)$/ -NewLayerSet lua-src/allegro.lua /^function NewLayerSet (name)$/ -NewNameString pas-src/common.pas /^procedure NewNameString; (* (var NSP: NameStringPo/ -NmStrToErrStr pas-src/common.pas /^function NmStrToErrStr;(*($/ -NmStrToInteger pas-src/common.pas /^function NmStrToInteger; (* (Str : NameString) : i/ -OBJCPPSRC make-src/Makefile /^OBJCPPSRC=SimpleCalc.H SimpleCalc.M$/ -OBJCSRC make-src/Makefile /^OBJCSRC=Subprocess.h Subprocess.m PackInsp.h PackI/ -OBJS make-src/Makefile /^OBJS=${GETOPTOBJS} ${REGEXOBJS} ${CHECKOBJS}$/ -OPENBUTTON objc-src/PackInsp.m 47 -OPTIONS make-src/Makefile /^OPTIONS=--members --declarations --regex=@regexfil/ -OR y-src/cccp.c 10 -OTAGS make-src/Makefile /^OTAGS: oetags ${SRCS} srclist$/ -OVERLAYP c-src/emacs/src/lisp.h /^OVERLAYP (Lisp_Object x)$/ -Objc_help c-src/etags.c 613 -Objc_suffixes c-src/etags.c 609 -OperatorFun c-src/h.h 88 -Overview tex-src/gzip.texi /^@node Overview, Sample, Copying, Top$/ -PASSRC make-src/Makefile /^PASSRC=common.pas$/ -PDT c-src/h.h /^ Date 04 May 87 235311 PDT (Mon)$/ -PERLSRC make-src/Makefile /^PERLSRC=htlmify-cystic yagrip.pl kai-test.pl mirro/ -PHPSRC make-src/Makefile /^PHPSRC=lce_functions.php ptest.php sendmail.php$/ -PHP_functions c-src/etags.c /^PHP_functions (FILE *inf)$/ -PHP_help c-src/etags.c 639 -PHP_suffixes c-src/etags.c 637 -POEntry php-src/lce_functions.php /^ function POEntry()$/ -POEntry php-src/lce_functions.php 105 -POEntryAD php-src/lce_functions.php 29 -PORManager php-src/lce_functions.php /^ function PORManager()$/ -PORManager php-src/lce_functions.php 498 -POReader php-src/lce_functions.php /^ function POReader($domain, $filename)$/ -POReader php-src/lce_functions.php 163 -POSTSCRIPTFLAGS make-src/Makefile /^POSTSCRIPTFLAGS=--language=none --regex='#\/[^ \\t{]/ -PRINT_UNDOCUMENTED_OPTIONS_HELP c-src/etags.c 804 -PROCESSP c-src/emacs/src/lisp.h /^PROCESSP (Lisp_Object a)$/ -PROLSRC make-src/Makefile /^PROLSRC=ordsets.prolog natded.prolog$/ -PROP c-src/emacs/src/keyboard.c /^#define PROP(IDX) AREF (tool_bar_item_properties, / -PROP c-src/emacs/src/keyboard.c 8379 -PROTECT_MALLOC_STATE c-src/emacs/src/gmalloc.c /^#define PROTECT_MALLOC_STATE(PROT) \/* empty *\/$/ -PROTECT_MALLOC_STATE c-src/emacs/src/gmalloc.c /^#define PROTECT_MALLOC_STATE(PROT) protect_malloc_/ -PRTPKG f-src/entry.for /^ LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL,/ -PRTPKG f-src/entry.strange /^ LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL,/ -PRTPKG f-src/entry.strange_suffix /^ LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL,/ -PSEUDO c-src/sysdep.h /^#define PSEUDO(name, syscall_name, args) / -PSEUDOVECSIZE c-src/emacs/src/lisp.h /^#define PSEUDOVECSIZE(type, nonlispfield) \\$/ -PSEUDOVECTORP c-src/emacs/src/lisp.h /^PSEUDOVECTORP (Lisp_Object a, int code)$/ -PSEUDOVECTOR_AREA_BITS c-src/emacs/src/lisp.h 818 -PSEUDOVECTOR_FLAG c-src/emacs/src/lisp.h 774 -PSEUDOVECTOR_REST_BITS c-src/emacs/src/lisp.h 813 -PSEUDOVECTOR_REST_MASK c-src/emacs/src/lisp.h 814 -PSEUDOVECTOR_SIZE_BITS c-src/emacs/src/lisp.h 808 -PSEUDOVECTOR_SIZE_MASK c-src/emacs/src/lisp.h 809 -PSEUDOVECTOR_TYPEP c-src/emacs/src/lisp.h /^PSEUDOVECTOR_TYPEP (struct vectorlike_header *a, i/ -PSSRC make-src/Makefile /^PSSRC=rfc1245.ps$/ -PS_functions c-src/etags.c /^PS_functions (FILE *inf)$/ -PS_help c-src/etags.c 649 -PS_suffixes c-src/etags.c 647 -PTY_LENGTH objc-src/Subprocess.m 21 -PTY_TEMPLATE objc-src/Subprocess.m 20 -PUSH_C_STR c-src/emacs/src/keyboard.c /^#define PUSH_C_STR(str, listvar) \\$/ -PUSH_HANDLER c-src/emacs/src/lisp.h /^#define PUSH_HANDLER(c, tag_ch_val, handlertype) \\/ -PVEC_BOOL_VECTOR c-src/emacs/src/lisp.h 787 -PVEC_BUFFER c-src/emacs/src/lisp.h 788 -PVEC_CHAR_TABLE c-src/emacs/src/lisp.h 796 -PVEC_COMPILED c-src/emacs/src/lisp.h 795 -PVEC_FONT c-src/emacs/src/lisp.h 798 -PVEC_FRAME c-src/emacs/src/lisp.h 785 -PVEC_FREE c-src/emacs/src/lisp.h 783 -PVEC_HASH_TABLE c-src/emacs/src/lisp.h 789 -PVEC_NORMAL_VECTOR c-src/emacs/src/lisp.h 782 -PVEC_OTHER c-src/emacs/src/lisp.h 793 -PVEC_PROCESS c-src/emacs/src/lisp.h 784 -PVEC_SUBR c-src/emacs/src/lisp.h 792 -PVEC_SUB_CHAR_TABLE c-src/emacs/src/lisp.h 797 -PVEC_TERMINAL c-src/emacs/src/lisp.h 790 -PVEC_TYPE_MASK c-src/emacs/src/lisp.h 819 -PVEC_WINDOW c-src/emacs/src/lisp.h 786 -PVEC_WINDOW_CONFIGURATION c-src/emacs/src/lisp.h 791 -PYTSRC make-src/Makefile /^PYTSRC=server.py$/ -PackageInspector objc-src/PackInsp.h /^@interface PackageInspector:WMInspector$/ -Pascal_functions c-src/etags.c /^Pascal_functions (FILE *inf)$/ -Pascal_help c-src/etags.c 621 -Pascal_suffixes c-src/etags.c 619 -Perl_functions c-src/etags.c /^Perl_functions (FILE *inf)$/ -Perl_help c-src/etags.c 630 -Perl_interpreters c-src/etags.c 628 -Perl_suffixes c-src/etags.c 626 -Pkg1/b ada-src/etags-test-for.ada /^package body Pkg1 is$/ -Pkg1/b ada-src/waroquiers.ada /^package body Pkg1 is$/ -Pkg1/s ada-src/etags-test-for.ada /^package Pkg1 is$/ -Pkg1/s ada-src/waroquiers.ada /^package Pkg1 is$/ -Pkg1_Func1/f ada-src/etags-test-for.ada /^ function Pkg1_Func1 return Boolean is separate;$/ -Pkg1_Func1/f ada-src/etags-test-for.ada /^ function Pkg1_Func1 return Boolean;$/ -Pkg1_Func1/f ada-src/etags-test-for.ada /^function Pkg1_Func1 return Boolean is$/ -Pkg1_Func1/f ada-src/waroquiers.ada /^ function Pkg1_Func1 return Boolean is separate;$/ -Pkg1_Func1/f ada-src/waroquiers.ada /^ function Pkg1_Func1 return Boolean;$/ -Pkg1_Func1/f ada-src/waroquiers.ada /^function Pkg1_Func1 return Boolean is$/ -Pkg1_Func2/f ada-src/etags-test-for.ada /^ function Pkg1_Func2 (Ijk : Integer; Z : Integer)/ -Pkg1_Func2/f ada-src/waroquiers.ada /^ function Pkg1_Func2 (Ijk : Integer; Z : Integer)/ -Pkg1_Pkg1/b ada-src/etags-test-for.ada /^ package body Pkg1_Pkg1 is separate;$/ -Pkg1_Pkg1/b ada-src/etags-test-for.ada /^package body Pkg1_Pkg1 is$/ -Pkg1_Pkg1/b ada-src/waroquiers.ada /^ package body Pkg1_Pkg1 is separate;$/ -Pkg1_Pkg1/b ada-src/waroquiers.ada /^package body Pkg1_Pkg1 is$/ -Pkg1_Pkg1/s ada-src/etags-test-for.ada /^ package Pkg1_Pkg1 is$/ -Pkg1_Pkg1/s ada-src/waroquiers.ada /^ package Pkg1_Pkg1 is$/ -Pkg1_Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Pkg1_Proc1;$/ -Pkg1_Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Pkg1_Proc1 is$/ -Pkg1_Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Pkg1_Proc1;$/ -Pkg1_Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Pkg1_Proc1 is$/ -Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc1 is$/ -Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc1;$/ -Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc1 is$/ -Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc1;$/ -Pkg1_Proc2/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc2 (I : Integer) is$/ -Pkg1_Proc2/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc2 (I : Integer);$/ -Pkg1_Proc2/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc2 (I : Integer) is$/ -Pkg1_Proc2/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc2 (I : Integer);$/ -PostControls pyt-src/server.py /^ def PostControls(self):$/ -Pre_Call_State/t ada-src/2ataspri.ads /^ type Pre_Call_State is new System.Address;$/ -PrintAdd go-src/test1.go /^func (n intNumber) PrintAdd() {$/ -PrintAdd go-src/test1.go /^func (s str) PrintAdd() {$/ -Private objc-src/Subprocess.m /^@interface Subprocess(Private)$/ -Private_T/b ada-src/etags-test-for.ada /^ task body Private_T is$/ -Private_T/b ada-src/waroquiers.ada /^ task body Private_T is$/ -Private_T/k ada-src/etags-test-for.ada /^ task Private_T;$/ -Private_T/k ada-src/waroquiers.ada /^ task Private_T;$/ -Private_T/p ada-src/etags-test-for.ada /^ procedure Private_T is$/ -Private_T/p ada-src/etags-test-for.ada /^ procedure Private_T;$/ -Private_T/p ada-src/waroquiers.ada /^ procedure Private_T is$/ -Private_T/p ada-src/waroquiers.ada /^ procedure Private_T;$/ -Private_T/t ada-src/etags-test-for.ada /^ type Private_T is private;$/ -Private_T/t ada-src/etags-test-for.ada /^ type Private_T is$/ -Private_T/t ada-src/waroquiers.ada /^ type Private_T is private;$/ -Private_T/t ada-src/waroquiers.ada /^ type Private_T is$/ -Problems tex-src/gzip.texi /^@node Problems, Concept Index, Tapes, Top$/ -Proc/t ada-src/2ataspri.ads /^ type Proc is access procedure (Addr : System.Ad/ -Prolog_functions c-src/etags.c /^Prolog_functions (FILE *inf)$/ -Prolog_help c-src/etags.c 654 -Prolog_suffixes c-src/etags.c 652 -Public_T/t ada-src/etags-test-for.ada /^ type Public_T is$/ -Public_T/t ada-src/waroquiers.ada /^ type Public_T is$/ -Python_functions c-src/etags.c /^Python_functions (FILE *inf)$/ -Python_help c-src/etags.c 660 -Python_suffixes c-src/etags.c 658 -QUIT c-src/emacs/src/lisp.h 3101 -QUITP c-src/emacs/src/lisp.h 3112 -RANGED_INTEGERP c-src/emacs/src/lisp.h /^RANGED_INTEGERP (intmax_t lo, Lisp_Object x, intma/ -RCSid objc-src/PackInsp.m 30 -READABLE_EVENTS_DO_TIMERS_NOW c-src/emacs/src/keyboard.c 346 -READABLE_EVENTS_FILTER_EVENTS c-src/emacs/src/keyboard.c 347 -READABLE_EVENTS_IGNORE_SQUEEZABLES c-src/emacs/src/keyboard.c 348 -RECC_ALNUM c-src/emacs/src/regex.h 610 -RECC_ALPHA c-src/emacs/src/regex.h 610 -RECC_ASCII c-src/emacs/src/regex.h 617 -RECC_BLANK c-src/emacs/src/regex.h 615 -RECC_CNTRL c-src/emacs/src/regex.h 613 -RECC_DIGIT c-src/emacs/src/regex.h 614 -RECC_ERROR c-src/emacs/src/regex.h 609 -RECC_GRAPH c-src/emacs/src/regex.h 611 -RECC_LOWER c-src/emacs/src/regex.h 612 -RECC_MULTIBYTE c-src/emacs/src/regex.h 616 -RECC_NONASCII c-src/emacs/src/regex.h 616 -RECC_PRINT c-src/emacs/src/regex.h 611 -RECC_PUNCT c-src/emacs/src/regex.h 613 -RECC_SPACE c-src/emacs/src/regex.h 615 -RECC_UNIBYTE c-src/emacs/src/regex.h 617 -RECC_UPPER c-src/emacs/src/regex.h 612 -RECC_WORD c-src/emacs/src/regex.h 610 -RECC_XDIGIT c-src/emacs/src/regex.h 614 -RED cp-src/screen.hpp 16 -REGEX make-src/Makefile /^REGEX=\/[ \\t]*DEFVAR_[A-Z_ \\t\\n(]+"\\([^"]+\\)"\/$/ -REGEXOBJS make-src/Makefile /^REGEXOBJS=regex.o$/ -REGS_FIXED c-src/emacs/src/regex.h 378 -REGS_REALLOCATE c-src/emacs/src/regex.h 377 -REGS_UNALLOCATED c-src/emacs/src/regex.h 376 -REG_BADBR c-src/emacs/src/regex.h 313 -REG_BADPAT c-src/emacs/src/regex.h 305 -REG_BADRPT c-src/emacs/src/regex.h 316 -REG_EBRACE c-src/emacs/src/regex.h 312 -REG_EBRACK c-src/emacs/src/regex.h 310 -REG_ECOLLATE c-src/emacs/src/regex.h 306 -REG_ECTYPE c-src/emacs/src/regex.h 307 -REG_EEND c-src/emacs/src/regex.h 319 -REG_EESCAPE c-src/emacs/src/regex.h 308 -REG_ENOSYS c-src/emacs/src/regex.h 297 -REG_ENOSYS c.c 279 -REG_EPAREN c-src/emacs/src/regex.h 311 -REG_ERANGE c-src/emacs/src/regex.h 314 -REG_ERANGEX c-src/emacs/src/regex.h 322 -REG_ERPAREN c-src/emacs/src/regex.h 321 -REG_ESIZE c-src/emacs/src/regex.h 320 -REG_ESPACE c-src/emacs/src/regex.h 315 -REG_ESUBREG c-src/emacs/src/regex.h 309 -REG_EXTENDED c-src/emacs/src/regex.h 263 -REG_ICASE c-src/emacs/src/regex.h 267 -REG_NEWLINE c-src/emacs/src/regex.h 272 -REG_NOERROR c-src/emacs/src/regex.h 300 -REG_NOMATCH c-src/emacs/src/regex.h 301 -REG_NOSUB c-src/emacs/src/regex.h 276 -REG_NOTBOL c-src/emacs/src/regex.h 286 -REG_NOTEOL c-src/emacs/src/regex.h 289 -RELEASELIST make-src/Makefile /^RELEASELIST=pot@gnu.org xemacs-review@xemacs.org j/ -RESUME_POLLING c-src/emacs/src/keyboard.c 2170 -RETURN_UNGCPRO c-src/emacs/src/lisp.h /^#define RETURN_UNGCPRO(expr) \\$/ -RE_BACKSLASH_ESCAPE_IN_LISTS c-src/emacs/src/regex.h 47 -RE_BK_PLUS_QM c-src/emacs/src/regex.h 52 -RE_CHAR_CLASSES c-src/emacs/src/regex.h 58 -RE_CONTEXT_INDEP_ANCHORS c-src/emacs/src/regex.h 72 -RE_CONTEXT_INDEP_OPS c-src/emacs/src/regex.h 80 -RE_CONTEXT_INVALID_OPS c-src/emacs/src/regex.h 84 -RE_DEBUG c-src/emacs/src/regex.h 161 -RE_DOT_NEWLINE c-src/emacs/src/regex.h 88 -RE_DOT_NOT_NULL c-src/emacs/src/regex.h 92 -RE_DUP_MAX c-src/emacs/src/regex.h 253 -RE_DUP_MAX c-src/emacs/src/regex.h 256 -RE_FRUGAL c-src/emacs/src/regex.h 147 -RE_HAT_LISTS_NOT_NEWLINE c-src/emacs/src/regex.h 96 -RE_INTERVALS c-src/emacs/src/regex.h 101 -RE_LIMITED_OPS c-src/emacs/src/regex.h 105 -RE_NEWLINE_ALT c-src/emacs/src/regex.h 109 -RE_NO_BK_BRACES c-src/emacs/src/regex.h 114 -RE_NO_BK_PARENS c-src/emacs/src/regex.h 118 -RE_NO_BK_REFS c-src/emacs/src/regex.h 122 -RE_NO_BK_VBAR c-src/emacs/src/regex.h 126 -RE_NO_EMPTY_RANGES c-src/emacs/src/regex.h 132 -RE_NO_GNU_OPS c-src/emacs/src/regex.h 144 -RE_NO_NEWLINE_ANCHOR c-src/emacs/src/regex.h 153 -RE_NO_POSIX_BACKTRACKING c-src/emacs/src/regex.h 140 -RE_NREGS c-src/emacs/src/regex.h 440 -RE_SHY_GROUPS c-src/emacs/src/regex.h 150 -RE_SYNTAX_AWK c-src/emacs/src/regex.h 186 -RE_SYNTAX_ED c-src/emacs/src/regex.h 216 -RE_SYNTAX_EGREP c-src/emacs/src/regex.h 206 -RE_SYNTAX_EMACS c-src/emacs/src/regex.h 183 -RE_SYNTAX_GNU_AWK c-src/emacs/src/regex.h 193 -RE_SYNTAX_GREP c-src/emacs/src/regex.h 201 -RE_SYNTAX_POSIX_AWK c-src/emacs/src/regex.h 197 -RE_SYNTAX_POSIX_BASIC c-src/emacs/src/regex.h 225 -RE_SYNTAX_POSIX_EGREP c-src/emacs/src/regex.h 212 -RE_SYNTAX_POSIX_EXTENDED c-src/emacs/src/regex.h 234 -RE_SYNTAX_POSIX_MINIMAL_BASIC c-src/emacs/src/regex.h 231 -RE_SYNTAX_POSIX_MINIMAL_EXTENDED c-src/emacs/src/regex.h 242 -RE_SYNTAX_SED c-src/emacs/src/regex.h 218 -RE_TRANSLATE_TYPE c-src/emacs/src/regex.h 332 -RE_UNMATCHED_RIGHT_PAREN_ORD c-src/emacs/src/regex.h 136 -RSH y-src/cccp.c 17 -RTE/s ada-src/2ataspri.adb /^ package RTE renames Interfaces.C.POSIX_RTE;$/ -RUN make-src/Makefile /^RUN=$/ -RUN make-src/Makefile /^RUN=time --quiet --format '%U + %S: %E'$/ -RXINCLUDE make-src/Makefile /^RXINCLUDE=-Iemacs\/src$/ -Range cp-src/Range.h /^ Range (const Range& r)$/ -Range cp-src/Range.h /^ Range (double b, double l)$/ -Range cp-src/Range.h /^ Range (double b, double l, double i)$/ -Range cp-src/Range.h /^ Range (void)$/ -Range cp-src/Range.h 35 -ReadVacation cp-src/functions.cpp /^void ReadVacation ( char *filename ) {$/ -Read_Lock/p ada-src/2ataspri.adb /^ procedure Read_Lock (L : in out Lock; Ceiling_V/ -Read_Lock/p ada-src/2ataspri.ads /^ procedure Read_Lock (L : in out Lock; Ceiling_V/ -Rectangle.getPos lua-src/test.lua /^function Rectangle.getPos ()$/ -ReleaseNameString pas-src/common.pas /^procedure ReleaseNameString; (* (var NSP: NameStri/ -RemoveLayer lua-src/allegro.lua /^function RemoveLayer ()$/ -RemoveUnderlineControl pas-src/common.pas /^function RemoveUnderlineControl; (*($/ -ReprOfChar pas-src/common.pas /^function ReprOfChar; (*( ch : char) : NameString;*/ -S c.c 156 -SAFE_ALLOCA c-src/emacs/src/lisp.h /^#define SAFE_ALLOCA(size) ((size) <= sa_avail \\/ -SAFE_ALLOCA_LISP c-src/emacs/src/lisp.h /^#define SAFE_ALLOCA_LISP(buf, nelt) \\$/ -SAFE_ALLOCA_STRING c-src/emacs/src/lisp.h /^#define SAFE_ALLOCA_STRING(ptr, string) \\$/ -SAFE_FREE c-src/emacs/src/lisp.h /^#define SAFE_FREE() \\$/ -SAFE_NALLOCA c-src/emacs/src/lisp.h /^#define SAFE_NALLOCA(buf, multiplier, nitems) \\/ -SAVE_FUNCPOINTER c-src/emacs/src/lisp.h 2049 -SAVE_INTEGER c-src/emacs/src/lisp.h 2048 -SAVE_OBJECT c-src/emacs/src/lisp.h 2051 -SAVE_POINTER c-src/emacs/src/lisp.h 2050 -SAVE_SLOT_BITS c-src/emacs/src/lisp.h 2055 -SAVE_TYPE_BITS c-src/emacs/src/lisp.h 2062 -SAVE_TYPE_BITS c-src/emacs/src/lisp.h 2114 -SAVE_TYPE_BITS c-src/emacs/src/lisp.h 2123 -SAVE_TYPE_FUNCPTR_PTR_OBJ c-src/emacs/src/lisp.h 2076 -SAVE_TYPE_INT_INT c-src/emacs/src/lisp.h 2066 -SAVE_TYPE_INT_INT_INT c-src/emacs/src/lisp.h 2067 -SAVE_TYPE_MEMORY c-src/emacs/src/lisp.h 2080 -SAVE_TYPE_OBJ_OBJ c-src/emacs/src/lisp.h 2069 -SAVE_TYPE_OBJ_OBJ_OBJ c-src/emacs/src/lisp.h 2070 -SAVE_TYPE_OBJ_OBJ_OBJ_OBJ c-src/emacs/src/lisp.h 2071 -SAVE_TYPE_PTR_INT c-src/emacs/src/lisp.h 2073 -SAVE_TYPE_PTR_OBJ c-src/emacs/src/lisp.h 2074 -SAVE_TYPE_PTR_PTR c-src/emacs/src/lisp.h 2075 -SAVE_UNUSED c-src/emacs/src/lisp.h 2047 -SAVE_VALUEP c-src/emacs/src/lisp.h /^SAVE_VALUEP (Lisp_Object x)$/ -SAVE_VALUE_SLOTS c-src/emacs/src/lisp.h 2058 -SBYTES c-src/emacs/src/lisp.h /^SBYTES (Lisp_Object string)$/ -SCHARS c-src/emacs/src/lisp.h /^SCHARS (Lisp_Object string)$/ -SCREEN_FP cp-src/screen.hpp /^#define SCREEN_FP(x,y) \\$/ -SCREEN_START cp-src/screen.hpp 33 -SDATA c-src/emacs/src/lisp.h /^SDATA (Lisp_Object string)$/ -SDTrefGetInteger pas-src/common.pas /^function SDTrefGetInteger : integer;$/ -SDTrefIsEnd pas-src/common.pas /^function SDTrefIsEnd : Boolean;$/ -SDTrefRecToString pas-src/common.pas /^procedure SDTrefRecToString (* ($/ -SDTrefSkipSpaces pas-src/common.pas /^procedure SDTrefSkipSpaces;$/ -SDTrefStringToRec pas-src/common.pas /^procedure SDTrefStringToRec (* ($/ -SETPRT f-src/entry.for /^ ENTRY SETPRT ( SHORT, EXPL, LONG, TRACE, D/ -SETPRT f-src/entry.strange /^ ENTRY SETPRT ( SHORT, EXPL, LONG, TRACE, D/ -SETPRT f-src/entry.strange_suffix /^ ENTRY SETPRT ( SHORT, EXPL, LONG, TRACE, D/ -SET_SYMBOL_BLV c-src/emacs/src/lisp.h /^SET_SYMBOL_BLV (struct Lisp_Symbol *sym, struct Li/ -SET_SYMBOL_FWD c-src/emacs/src/lisp.h /^SET_SYMBOL_FWD (struct Lisp_Symbol *sym, union Lis/ -SET_SYMBOL_VAL c-src/emacs/src/lisp.h /^# define SET_SYMBOL_VAL(sym, v) lisp_h_SET_SYMBOL_/ -SINGLE_LETTER_MOD c-src/emacs/src/keyboard.c /^#define SINGLE_LETTER_MOD(BIT) \\$/ -SINGLE_LETTER_MOD c-src/emacs/src/keyboard.c 6212 -SINGLE_LETTER_MOD c-src/emacs/src/keyboard.c 6763 -SIZEFORMAT objc-src/PackInsp.m 57 -SPECPDL_BACKTRACE c-src/emacs/src/lisp.h 2948 -SPECPDL_INDEX c-src/emacs/src/lisp.h /^SPECPDL_INDEX (void)$/ -SPECPDL_LET c-src/emacs/src/lisp.h 2949 -SPECPDL_LET_DEFAULT c-src/emacs/src/lisp.h 2952 -SPECPDL_LET_LOCAL c-src/emacs/src/lisp.h 2951 -SPECPDL_UNWIND c-src/emacs/src/lisp.h 2944 -SPECPDL_UNWIND_INT c-src/emacs/src/lisp.h 2946 -SPECPDL_UNWIND_PTR c-src/emacs/src/lisp.h 2945 -SPECPDL_UNWIND_VOID c-src/emacs/src/lisp.h 2947 -SRCS make-src/Makefile /^SRCS=Makefile ${ADASRC} ${ASRC} ${CSRC} ${CPSRC} $/ -SREF c-src/emacs/src/lisp.h /^SREF (Lisp_Object string, ptrdiff_t index)$/ -SSDATA c-src/emacs/src/lisp.h /^SSDATA (Lisp_Object string)$/ -SSET c-src/emacs/src/lisp.h /^SSET (Lisp_Object string, ptrdiff_t index, unsigne/ -STACK_CONS c-src/emacs/src/lisp.h /^#define STACK_CONS(a, b) \\$/ -STATE_ABORT php-src/lce_functions.php 25 -STATE_COMPRESSD objc-src/PackInsp.m 54 -STATE_INSTALLED objc-src/PackInsp.m 53 -STATE_LOOP php-src/lce_functions.php 27 -STATE_OK php-src/lce_functions.php 26 -STATE_UNINSTALLED objc-src/PackInsp.m 52 -STAT_EQ objc-src/PackInsp.m /^#define STAT_EQ(s1, s2) ((s1)->st_ino == (s2)->st_/ -STDIN c-src/etags.c 408 -STDIN c-src/etags.c 411 -STOP_POLLING c-src/emacs/src/keyboard.c 2166 -STRING_BYTES c-src/emacs/src/lisp.h /^STRING_BYTES (struct Lisp_String *s)$/ -STRING_BYTES_BOUND c-src/emacs/src/lisp.h 1261 -STRING_MULTIBYTE c-src/emacs/src/lisp.h /^STRING_MULTIBYTE (Lisp_Object str)$/ -STRING_SET_CHARS c-src/emacs/src/lisp.h /^STRING_SET_CHARS (Lisp_Object string, ptrdiff_t ne/ -STRING_SET_MULTIBYTE c-src/emacs/src/lisp.h /^#define STRING_SET_MULTIBYTE(STR) \\$/ -STRING_SET_UNIBYTE c-src/emacs/src/lisp.h /^#define STRING_SET_UNIBYTE(STR) \\$/ -SUBRP c-src/emacs/src/lisp.h /^SUBRP (Lisp_Object a)$/ -SUB_CHAR_TABLE_OFFSET c-src/emacs/src/lisp.h 1701 -SUB_CHAR_TABLE_P c-src/emacs/src/lisp.h /^SUB_CHAR_TABLE_P (Lisp_Object a)$/ -SXHASH_REDUCE c-src/emacs/src/lisp.h /^SXHASH_REDUCE (EMACS_UINT x)$/ -SYMBOLP c-src/emacs/src/lisp.h /^# define SYMBOLP(x) lisp_h_SYMBOLP (x)$/ -SYMBOL_BLV c-src/emacs/src/lisp.h /^SYMBOL_BLV (struct Lisp_Symbol *sym)$/ -SYMBOL_CONSTANT_P c-src/emacs/src/lisp.h /^# define SYMBOL_CONSTANT_P(sym) lisp_h_SYMBOL_CONS/ -SYMBOL_FORWARDED c-src/emacs/src/lisp.h 651 -SYMBOL_FWD c-src/emacs/src/lisp.h /^SYMBOL_FWD (struct Lisp_Symbol *sym)$/ -SYMBOL_INDEX c-src/emacs/src/lisp.h /^#define SYMBOL_INDEX(sym) i##sym$/ -SYMBOL_INTERNED c-src/emacs/src/lisp.h 642 -SYMBOL_INTERNED_IN_INITIAL_OBARRAY c-src/emacs/src/lisp.h 643 -SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P c-src/emacs/src/lisp.h /^SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P (Lisp_Object / -SYMBOL_INTERNED_P c-src/emacs/src/lisp.h /^SYMBOL_INTERNED_P (Lisp_Object sym)$/ -SYMBOL_LOCALIZED c-src/emacs/src/lisp.h 650 -SYMBOL_NAME c-src/emacs/src/lisp.h /^SYMBOL_NAME (Lisp_Object sym)$/ -SYMBOL_PLAINVAL c-src/emacs/src/lisp.h 648 -SYMBOL_UNINTERNED c-src/emacs/src/lisp.h 641 -SYMBOL_VAL c-src/emacs/src/lisp.h /^# define SYMBOL_VAL(sym) lisp_h_SYMBOL_VAL (sym)$/ -SYMBOL_VARALIAS c-src/emacs/src/lisp.h 649 -SYSCALL c-src/machsyscalls.c /^#define SYSCALL(name, number, type, args, typed_ar/ -Sample tex-src/gzip.texi /^@node Sample, Invoking gzip, Overview, Top$/ -Scheme_functions c-src/etags.c /^Scheme_functions (FILE *inf)$/ -Scheme_help c-src/etags.c 667 -Scheme_suffixes c-src/etags.c 665 -SelectLayer lua-src/allegro.lua /^function SelectLayer (layer)$/ -Self/f ada-src/2ataspri.adb /^ function Self return TCB_Ptr is$/ -Self/f ada-src/2ataspri.ads /^ function Self return TCB_Ptr;$/ -Server pyt-src/server.py /^class Server:$/ -ServerEdit pyt-src/server.py /^class ServerEdit(Frame):$/ -Set_Own_Priority/p ada-src/2ataspri.adb /^ procedure Set_Own_Priority (Prio : System.Any_P/ -Set_Own_Priority/p ada-src/2ataspri.ads /^ procedure Set_Own_Priority (Prio : System.Any_P/ -Set_Priority/p ada-src/2ataspri.adb /^ procedure Set_Priority$/ -Set_Priority/p ada-src/2ataspri.ads /^ procedure Set_Priority (T : TCB_Ptr; Prio : Sys/ -SimpleCalc objcpp-src/SimpleCalc.H /^@interface SimpleCalc:Object$/ -SkipBlanks pas-src/common.pas /^function SkipBlanks; (*($/ -SkipChars pas-src/common.pas /^function SkipChars; (*($/ -SkipSpaces pas-src/common.pas /^procedure SkipSpaces; (* (Str : NameString; var I / -Square.something:Bar lua-src/test.lua /^function Square.something:Bar ()$/ -StartDay cp-src/functions.cpp /^Date StartDay(Date a,int days){\/\/Function to calcu/ -StripPath pas-src/common.pas /^function StripPath; (*($/ -SubString pas-src/common.pas /^function SubString; (*($/ -Subprocess objc-src/Subprocess.h /^@interface Subprocess:Object$/ -Subprocess objc-src/Subprocess.h 41 -System.Task_Primitives/b ada-src/2ataspri.adb /^package body System.Task_Primitives is$/ -System.Task_Primitives/s ada-src/2ataspri.ads /^package System.Task_Primitives is$/ -T cp-src/fail.C 14 -T2 cp-src/fail.C 16 -T3 c.c 163 -TAGS make-src/Makefile /^TAGS: etags.c$/ -TAG_PTR c-src/emacs/src/lisp.h /^#define TAG_PTR(tag, ptr) \\$/ -TAG_SYMOFFSET c-src/emacs/src/lisp.h /^#define TAG_SYMOFFSET(offset) \\$/ -TAS_Cell/t ada-src/2ataspri.ads /^ type TAS_Cell is private;$/ -TAS_Cell/t ada-src/2ataspri.ads /^ type TAS_Cell is$/ -TCB_Ptr/t ada-src/2ataspri.ads /^ type TCB_Ptr is access all Task_Control_Block;$/ -TCLFLAGS make-src/Makefile /^TCLFLAGS=--lang=none --regex='\/proc[ \\t]+\\([^ \\t]+/ -TERMINALP c-src/emacs/src/lisp.h /^TERMINALP (Lisp_Object a)$/ -TEST php-src/ptest.php 1 -TEXSRC make-src/Makefile /^TEXSRC=testenv.tex gzip.texi texinfo.tex nonewline/ -TEX_LESC c-src/etags.c 4986 -TEX_SESC c-src/etags.c 4987 -TEX_clgrp c-src/etags.c 4922 -TEX_decode_env c-src/etags.c /^TEX_decode_env (const char *evarname, const char */ -TEX_defenv c-src/etags.c 4912 -TEX_esc c-src/etags.c 4920 -TEX_mode c-src/etags.c /^TEX_mode (FILE *inf)$/ -TEX_opgrp c-src/etags.c 4921 -TEX_toktab c-src/etags.c 4908 -TOTAL_KEYWORDS c-src/etags.c 2325 -TSL/s ada-src/2ataspri.adb /^ package TSL renames System.Tasking_Soft_Links;$/ -TYPESTOSTAT objc-src/PackInsp.h 37 -TYPE_RANGED_INTEGERP c-src/emacs/src/lisp.h /^#define TYPE_RANGED_INTEGERP(type, x) \\$/ -Tapes tex-src/gzip.texi /^@node Tapes, Problems, Environment, Top$/ -Task_Control_Block/t ada-src/2ataspri.ads /^ type Task_Control_Block is record$/ -Task_Storage_Size/t ada-src/2ataspri.ads /^ type Task_Storage_Size is new Interfaces.C.size/ -Task_Type/b ada-src/etags-test-for.ada /^ task body Task_Type is$/ -Task_Type/b ada-src/waroquiers.ada /^ task body Task_Type is$/ -Task_Type/k ada-src/etags-test-for.ada /^ task type Task_Type is$/ -Task_Type/k ada-src/waroquiers.ada /^ task type Task_Type is$/ -TeX tex-src/texinfo.tex /^\\def\\TeX{\\realbackslash TeX}$/ -TeX tex-src/texinfo.tex /^\\def\\TeX{\\realbackslash TeX}%$/ -TeX tex-src/texinfo.tex /^\\let\\TeX=\\indexdummytex$/ -TeX_commands c-src/etags.c /^TeX_commands (FILE *inf)$/ -TeX_help c-src/etags.c 674 -TeX_suffixes c-src/etags.c 672 -Test_Abort/p ada-src/2ataspri.adb /^ procedure Test_Abort is$/ -Test_Abort/p ada-src/2ataspri.ads /^ procedure Test_Abort;$/ -Test_And_Set/p ada-src/2ataspri.adb /^ procedure Test_And_Set (Cell : in out TAS_Cell;/ -Test_And_Set/p ada-src/2ataspri.ads /^ procedure Test_And_Set (Cell : in out TAS_Cell;/ -Texinfo_help c-src/etags.c 688 -Texinfo_nodes c-src/etags.c /^Texinfo_nodes (FILE *inf)$/ -Texinfo_suffixes c-src/etags.c 686 -Time_to_position c-src/emacs/src/keyboard.c /^Time_to_position (Time encoded_pos)$/ -To_Lower pas-src/common.pas /^function To_Lower;(*(ch:char) : char;*)$/ -To_Start_Addr/f ada-src/2ataspri.adb /^ function To_Start_Addr is new$/ -To_TCB_Ptr/f ada-src/2ataspri.adb /^ function To_TCB_Ptr is new$/ -To_Upper pas-src/common.pas /^function To_Upper;(*(ch:char) : char;*)$/ -To_void_ptr/f ada-src/2ataspri.adb /^ function To_void_ptr is new$/ -Top tex-src/gzip.texi /^@node Top, , , (dir)$/ -Truc.Bidule/b ada-src/etags-test-for.ada /^package body Truc.Bidule is$/ -Truc.Bidule/b ada-src/waroquiers.ada /^package body Truc.Bidule is$/ -Truc.Bidule/s ada-src/etags-test-for.ada /^package Truc.Bidule is$/ -Truc.Bidule/s ada-src/waroquiers.ada /^package Truc.Bidule is$/ -Truc/s ada-src/etags-test-for.ada /^package Truc is$/ -Truc/s ada-src/waroquiers.ada /^package Truc is$/ -Type_Specific_Data/t ada-src/etags-test-for.ada /^ type Type_Specific_Data is record$/ -UCHAR c-src/emacs/src/lisp.h 2424 -UNARY y-src/cccp.c 18 -UNDEFINED c-src/h.h 118 -UNEVALLED c-src/emacs/src/lisp.h 2834 -UNGCPRO c-src/emacs/src/lisp.h 3202 -UNGCPRO c-src/emacs/src/lisp.h 3257 -UNGCPRO c-src/emacs/src/lisp.h 3353 -UNLOCK c-src/emacs/src/gmalloc.c /^#define UNLOCK() \\$/ -UNLOCK c-src/emacs/src/gmalloc.c /^#define UNLOCK()$/ -UNLOCK_ALIGNED_BLOCKS c-src/emacs/src/gmalloc.c /^#define UNLOCK_ALIGNED_BLOCKS() \\$/ -UNLOCK_ALIGNED_BLOCKS c-src/emacs/src/gmalloc.c /^#define UNLOCK_ALIGNED_BLOCKS()$/ -UNSIGNED_CMP c-src/emacs/src/lisp.h /^#define UNSIGNED_CMP(a, op, b) \\$/ -USE_LSB_TAG c-src/emacs/src/lisp.h /^DEFINE_GDB_SYMBOL_BEGIN (bool, USE_LSB_TAG)$/ -USE_LSB_TAG c-src/emacs/src/lisp.h 271 -USE_PTHREAD c-src/emacs/src/gmalloc.c 25 -USE_SAFE_ALLOCA c-src/emacs/src/lisp.h 4560 -USE_STACK_CONS c-src/emacs/src/lisp.h 4689 -USE_STACK_LISP_OBJECTS c-src/emacs/src/lisp.h 4652 -USE_STACK_LISP_OBJECTS c-src/emacs/src/lisp.h 4658 -USE_STACK_LISP_OBJECTS c-src/emacs/src/lisp.h 4659 -USE_STACK_STRING c-src/emacs/src/lisp.h 4691 -U_CHAR y-src/cccp.y 38 -Unlock/p ada-src/2ataspri.adb /^ procedure Unlock (L : in out Lock) is$/ -Unlock/p ada-src/2ataspri.ads /^ procedure Unlock (L : in out Lock);$/ -User pyt-src/server.py /^class User:$/ -UserEdit pyt-src/server.py /^class UserEdit(Frame):$/ -VALBITS c-src/emacs/src/lisp.h 246 -VALMASK c-src/emacs/src/lisp.h /^DEFINE_GDB_SYMBOL_BEGIN (EMACS_INT, VALMASK)$/ -VALMASK c-src/emacs/src/lisp.h 829 -VAL_MAX c-src/emacs/src/lisp.h 263 -VECSIZE c-src/emacs/src/lisp.h /^#define VECSIZE(type) \\$/ -VECTORLIKEP c-src/emacs/src/lisp.h /^# define VECTORLIKEP(x) lisp_h_VECTORLIKEP (x)$/ -VECTORP c-src/emacs/src/lisp.h /^VECTORP (Lisp_Object x)$/ -VERSION c-src/etags.c 789 -VERSION erl-src/gs_dialog.erl /^-define(VERSION, '2001.1101').$/ -VERSION objc-src/PackInsp.m 34 -VHDLFLAGS make-src/Makefile /^VHDLFLAGS=--language=none --regex='\/[ \\t]*\\(ARCHIT/ -Vabbrev_start_location c-src/abbrev.c 63 -Vabbrev_start_location_buffer c-src/abbrev.c 66 -Vabbrev_table_name_list c-src/abbrev.c 43 -ValToNmStr pas-src/common.pas /^function ValToNmStr; (*($/ -Vfundamental_mode_abbrev_table c-src/abbrev.c 52 -Vglobal_abbrev_table c-src/abbrev.c 48 -Vlast_abbrev c-src/abbrev.c 70 -Vlast_abbrev_text c-src/abbrev.c 75 -Vlispy_mouse_stem c-src/emacs/src/keyboard.c 5172 -WAIT_READING_MAX c-src/emacs/src/lisp.h 4281 -WAIT_READING_MAX c-src/emacs/src/lisp.h 4283 -WARNINGS make-src/Makefile /^WARNINGS=-pedantic -Wall -Wpointer-arith -Winline / -WCHAR_TYPE_SIZE y-src/cccp.y 99 -WHITE cp-src/screen.hpp 27 -WINDOWP c-src/emacs/src/lisp.h /^WINDOWP (Lisp_Object a)$/ -WINDOWSNT c-src/etags.c 101 -WINDOWSNT c-src/etags.c 102 -WINDOW_CONFIGURATIONP c-src/emacs/src/lisp.h /^WINDOW_CONFIGURATIONP (Lisp_Object a)$/ -WORKING objc-src/PackInsp.m 368 -WorkingDays cp-src/functions.cpp /^int WorkingDays(Date a, Date b){$/ -Write_Lock/p ada-src/2ataspri.adb /^ procedure Write_Lock (L : in out Lock; Ceiling_/ -Write_Lock/p ada-src/2ataspri.ads /^ procedure Write_Lock (L : in out Lock; Ceiling_/ -X c-src/h.h 100 -XBOOL_VECTOR c-src/emacs/src/lisp.h /^XBOOL_VECTOR (Lisp_Object a)$/ -XBUFFER c-src/emacs/src/lisp.h /^XBUFFER (Lisp_Object a)$/ -XBUFFER_OBJFWD c-src/emacs/src/lisp.h /^XBUFFER_OBJFWD (union Lisp_Fwd *a)$/ -XCAR c-src/emacs/src/lisp.h /^# define XCAR(c) lisp_h_XCAR (c)$/ -XCDR c-src/emacs/src/lisp.h /^# define XCDR(c) lisp_h_XCDR (c)$/ -XCHAR_TABLE c-src/emacs/src/lisp.h /^XCHAR_TABLE (Lisp_Object a)$/ -XCHG_0 c-src/sysdep.h 47 -XCHG_1 c-src/sysdep.h 48 -XCHG_2 c-src/sysdep.h 49 -XCHG_3 c-src/sysdep.h 50 -XCHG_4 c-src/sysdep.h 51 -XCHG_5 c-src/sysdep.h 52 -XCONS c-src/emacs/src/lisp.h /^# define XCONS(a) lisp_h_XCONS (a)$/ -XDEFUN c.c /^XDEFUN ("x-get-selection-internal", Fx_get_selecti/ -XFASTINT c-src/emacs/src/lisp.h /^# define XFASTINT(a) lisp_h_XFASTINT (a)$/ -XFASTINT c-src/emacs/src/lisp.h /^XFASTINT (Lisp_Object a)$/ -XFINALIZER c-src/emacs/src/lisp.h /^XFINALIZER (Lisp_Object a)$/ -XFLOAT c-src/emacs/src/lisp.h /^XFLOAT (Lisp_Object a)$/ -XFLOATINT c-src/emacs/src/lisp.h /^XFLOATINT (Lisp_Object n)$/ -XFLOAT_DATA c-src/emacs/src/lisp.h /^XFLOAT_DATA (Lisp_Object f)$/ -XFWDTYPE c-src/emacs/src/lisp.h /^XFWDTYPE (union Lisp_Fwd *a)$/ -XHASH c-src/emacs/src/lisp.h /^# define XHASH(a) lisp_h_XHASH (a)$/ -XHASH_TABLE c-src/emacs/src/lisp.h /^XHASH_TABLE (Lisp_Object a)$/ -XIL c-src/emacs/src/lisp.h /^# define XIL(i) lisp_h_XIL (i)$/ -XINT c-src/emacs/src/lisp.h /^# define XINT(a) lisp_h_XINT (a)$/ -XINT c-src/emacs/src/lisp.h /^XINT (Lisp_Object a)$/ -XINTPTR c-src/emacs/src/lisp.h /^XINTPTR (Lisp_Object a)$/ -XLI c-src/emacs/src/lisp.h /^# define XLI(o) lisp_h_XLI (o)$/ -XLI_BUILTIN_LISPSYM c-src/emacs/src/lisp.h /^#define XLI_BUILTIN_LISPSYM(iname) TAG_SYMOFFSET (/ -XMARKER c-src/emacs/src/lisp.h /^XMARKER (Lisp_Object a)$/ -XMISC c-src/emacs/src/lisp.h /^XMISC (Lisp_Object a)$/ -XMISCANY c-src/emacs/src/lisp.h /^XMISCANY (Lisp_Object a)$/ -XMISCTYPE c-src/emacs/src/lisp.h /^XMISCTYPE (Lisp_Object a)$/ -XOVERLAY c-src/emacs/src/lisp.h /^XOVERLAY (Lisp_Object a)$/ -XPNTR c-src/emacs/src/lisp.h /^# define XPNTR(a) lisp_h_XPNTR (a)$/ -XPROCESS c-src/emacs/src/lisp.h /^XPROCESS (Lisp_Object a)$/ -XSAVE_FUNCPOINTER c-src/emacs/src/lisp.h /^XSAVE_FUNCPOINTER (Lisp_Object obj, int n)$/ -XSAVE_INTEGER c-src/emacs/src/lisp.h /^XSAVE_INTEGER (Lisp_Object obj, int n)$/ -XSAVE_OBJECT c-src/emacs/src/lisp.h /^XSAVE_OBJECT (Lisp_Object obj, int n)$/ -XSAVE_POINTER c-src/emacs/src/lisp.h /^XSAVE_POINTER (Lisp_Object obj, int n)$/ -XSAVE_VALUE c-src/emacs/src/lisp.h /^XSAVE_VALUE (Lisp_Object a)$/ -XSETBOOL_VECTOR c-src/emacs/src/lisp.h /^#define XSETBOOL_VECTOR(a, b) (XSETPSEUDOVECTOR (a/ -XSETBUFFER c-src/emacs/src/lisp.h /^#define XSETBUFFER(a, b) (XSETPSEUDOVECTOR (a, b, / -XSETCDR c-src/emacs/src/lisp.h /^XSETCDR (Lisp_Object c, Lisp_Object n)$/ -XSETCHAR_TABLE c-src/emacs/src/lisp.h /^#define XSETCHAR_TABLE(a, b) (XSETPSEUDOVECTOR (a,/ -XSETCOMPILED c-src/emacs/src/lisp.h /^#define XSETCOMPILED(a, b) (XSETPSEUDOVECTOR (a, b/ -XSETCONS c-src/emacs/src/lisp.h /^#define XSETCONS(a, b) ((a) = make_lisp_ptr (b, Li/ -XSETFASTINT c-src/emacs/src/lisp.h /^#define XSETFASTINT(a, b) ((a) = make_natnum (b))$/ -XSETFLOAT c-src/emacs/src/lisp.h /^#define XSETFLOAT(a, b) ((a) = make_lisp_ptr (b, L/ -XSETINT c-src/emacs/src/lisp.h /^#define XSETINT(a, b) ((a) = make_number (b))$/ -XSETMISC c-src/emacs/src/lisp.h /^#define XSETMISC(a, b) ((a) = make_lisp_ptr (b, Li/ -XSETPROCESS c-src/emacs/src/lisp.h /^#define XSETPROCESS(a, b) (XSETPSEUDOVECTOR (a, b,/ -XSETPSEUDOVECTOR c-src/emacs/src/lisp.h /^#define XSETPSEUDOVECTOR(a, b, code) \\$/ -XSETPVECTYPE c-src/emacs/src/lisp.h /^#define XSETPVECTYPE(v, code) \\$/ -XSETPVECTYPESIZE c-src/emacs/src/lisp.h /^#define XSETPVECTYPESIZE(v, code, lispsize, restsi/ -XSETSTRING c-src/emacs/src/lisp.h /^#define XSETSTRING(a, b) ((a) = make_lisp_ptr (b, / -XSETSUBR c-src/emacs/src/lisp.h /^#define XSETSUBR(a, b) (XSETPSEUDOVECTOR (a, b, PV/ -XSETSUB_CHAR_TABLE c-src/emacs/src/lisp.h /^#define XSETSUB_CHAR_TABLE(a, b) (XSETPSEUDOVECTOR/ -XSETSYMBOL c-src/emacs/src/lisp.h /^#define XSETSYMBOL(a, b) ((a) = make_lisp_symbol (/ -XSETTERMINAL c-src/emacs/src/lisp.h /^#define XSETTERMINAL(a, b) (XSETPSEUDOVECTOR (a, b/ -XSETTYPED_PSEUDOVECTOR c-src/emacs/src/lisp.h /^#define XSETTYPED_PSEUDOVECTOR(a, b, size, code) / -XSETVECTOR c-src/emacs/src/lisp.h /^#define XSETVECTOR(a, b) ((a) = make_lisp_ptr (b, / -XSETWINDOW c-src/emacs/src/lisp.h /^#define XSETWINDOW(a, b) (XSETPSEUDOVECTOR (a, b, / -XSETWINDOW_CONFIGURATION c-src/emacs/src/lisp.h /^#define XSETWINDOW_CONFIGURATION(a, b) \\$/ -XSET_HASH_TABLE c-src/emacs/src/lisp.h /^#define XSET_HASH_TABLE(VAR, PTR) \\$/ -XSTRING c-src/emacs/src/lisp.h /^XSTRING (Lisp_Object a)$/ -XSUBR c-src/emacs/src/lisp.h /^XSUBR (Lisp_Object a)$/ -XSUB_CHAR_TABLE c-src/emacs/src/lisp.h /^XSUB_CHAR_TABLE (Lisp_Object a)$/ -XSYMBOL c-src/emacs/src/lisp.h /^# define XSYMBOL(a) lisp_h_XSYMBOL (a)$/ -XSYMBOL c-src/emacs/src/lisp.h /^XSYMBOL (Lisp_Object a)$/ -XTERMINAL c-src/emacs/src/lisp.h /^XTERMINAL (Lisp_Object a)$/ -XTYPE c-src/emacs/src/lisp.h /^# define XTYPE(a) lisp_h_XTYPE (a)$/ -XTYPE c-src/emacs/src/lisp.h /^XTYPE (Lisp_Object a)$/ -XUNTAG c-src/emacs/src/lisp.h /^# define XUNTAG(a, type) lisp_h_XUNTAG (a, type)$/ -XUNTAG c-src/emacs/src/lisp.h /^XUNTAG (Lisp_Object a, int type)$/ -XWINDOW c-src/emacs/src/lisp.h /^XWINDOW (Lisp_Object a)$/ -XX cp-src/x.cc 1 -Xyzzy ruby-src/test1.ru 13 -Y c-src/h.h 100 -YACC c-src/etags.c 2199 -YELLOW cp-src/screen.hpp 26 -YSRC make-src/Makefile /^YSRC=parse.y parse.c atest.y cccp.c cccp.y$/ -YYABORT /usr/share/bison/bison.simple 154 -YYACCEPT /usr/share/bison/bison.simple 153 -YYBACKUP /usr/share/bison/bison.simple /^#define YYBACKUP(Token, Value) \\$/ -YYBISON y-src/cccp.c 4 -YYBISON y-src/parse.c 4 -YYDPRINTF /usr/share/bison/bison.simple /^# define YYDPRINTF(Args) \\$/ -YYDPRINTF /usr/share/bison/bison.simple /^# define YYDPRINTF(Args)$/ -YYEMPTY /usr/share/bison/bison.simple 151 -YYEOF /usr/share/bison/bison.simple 152 -YYERRCODE /usr/share/bison/bison.simple 179 -YYERROR /usr/share/bison/bison.simple 155 -YYFAIL /usr/share/bison/bison.simple 159 -YYFPRINTF /usr/share/bison/bison.simple 226 -YYINITDEPTH /usr/share/bison/bison.simple 245 -YYLEX /usr/share/bison/bison.simple 201 -YYLEX /usr/share/bison/bison.simple 203 -YYLEX /usr/share/bison/bison.simple 207 -YYLEX /usr/share/bison/bison.simple 209 -YYLEX /usr/share/bison/bison.simple 213 -YYLLOC_DEFAULT /usr/share/bison/bison.simple /^# define YYLLOC_DEFAULT(Current, Rhs, N) \\$/ -YYMAXDEPTH /usr/share/bison/bison.simple 256 -YYMAXDEPTH /usr/share/bison/bison.simple 260 -YYPARSE_PARAM_ARG /usr/share/bison/bison.simple 351 -YYPARSE_PARAM_ARG /usr/share/bison/bison.simple 354 -YYPARSE_PARAM_ARG /usr/share/bison/bison.simple 358 -YYPARSE_PARAM_DECL /usr/share/bison/bison.simple 352 -YYPARSE_PARAM_DECL /usr/share/bison/bison.simple 355 -YYPARSE_PARAM_DECL /usr/share/bison/bison.simple 359 -YYPOPSTACK /usr/share/bison/bison.simple 445 -YYPOPSTACK /usr/share/bison/bison.simple 447 -YYRECOVERING /usr/share/bison/bison.simple /^#define YYRECOVERING() (!!yyerrstatus)$/ -YYSIZE_T /usr/share/bison/bison.simple 129 -YYSIZE_T /usr/share/bison/bison.simple 132 -YYSIZE_T /usr/share/bison/bison.simple 137 -YYSIZE_T /usr/share/bison/bison.simple 141 -YYSIZE_T /usr/share/bison/bison.simple 146 -YYSIZE_T /usr/share/bison/bison.simple 52 -YYSIZE_T /usr/share/bison/bison.simple 57 -YYSIZE_T /usr/share/bison/bison.simple 72 -YYSIZE_T /usr/share/bison/bison.simple 76 -YYSTACK_ALLOC /usr/share/bison/bison.simple 51 -YYSTACK_ALLOC /usr/share/bison/bison.simple 56 -YYSTACK_ALLOC /usr/share/bison/bison.simple 60 -YYSTACK_ALLOC /usr/share/bison/bison.simple 79 -YYSTACK_BYTES /usr/share/bison/bison.simple /^# define YYSTACK_BYTES(N) \\$/ -YYSTACK_FREE /usr/share/bison/bison.simple /^# define YYSTACK_FREE(Ptr) do { \/* empty *\/; } wh/ -YYSTACK_FREE /usr/share/bison/bison.simple 80 -YYSTACK_GAP_MAX /usr/share/bison/bison.simple 94 -YYSTACK_RELOCATE /usr/share/bison/bison.simple /^# define YYSTACK_RELOCATE(Type, Stack) \\$/ -YYSTACK_RELOCATE /usr/share/bison/bison.simple 548 -YYSTD /usr/share/bison/bison.simple /^# define YYSTD(x) std::x$/ -YYSTD /usr/share/bison/bison.simple /^# define YYSTD(x) x$/ -YYSTYPE y-src/parse.y 72 -YYSTYPE y-src/parse.y 73 -YYTERROR /usr/share/bison/bison.simple 178 -YY_DECL_NON_LSP_VARIABLES /usr/share/bison/bison.simple 374 -YY_DECL_VARIABLES /usr/share/bison/bison.simple 385 -YY_DECL_VARIABLES /usr/share/bison/bison.simple 391 -Yacc_entries c-src/etags.c /^Yacc_entries (FILE *inf)$/ -Yacc_help c-src/etags.c 693 -Yacc_suffixes c-src/etags.c 691 -Yappendixletterandtype tex-src/texinfo.tex /^\\def\\Yappendixletterandtype{%$/ -Ynothing tex-src/texinfo.tex /^\\def\\Ynothing{}$/ -Ypagenumber tex-src/texinfo.tex /^\\def\\Ypagenumber{\\folio}$/ -Ysectionnumberandtype tex-src/texinfo.tex /^\\def\\Ysectionnumberandtype{%$/ -Ytitle tex-src/texinfo.tex /^\\def\\Ytitle{\\thischapter}$/ -Z c-src/h.h 100 -[ tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ -[] ruby-src/test.rb /^ def [](y)$/ -[]= ruby-src/test.rb /^ def []=(y, val)$/ -] tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ -^ tex-src/texinfo.tex /^\\def^{{\\tt \\hat}}$/ -^ tex-src/texinfo.tex /^\\let^=\\normalcaret$/ -_ tex-src/texinfo.tex /^\\def\\_{\\lvvmode \\kern.06em \\vbox{\\hrule width.3em / -_ tex-src/texinfo.tex /^\\def\\_{{\\realbackslash _}}%$/ -_ tex-src/texinfo.tex /^\\def_{\\ifusingtt\\normalunderscore\\_}$/ -_ tex-src/texinfo.tex /^\\let_=\\normalunderscore$/ -_GETOPT_H c-src/getopt.h 19 -_GNU_SOURCE c-src/etags.c 94 -_REGEX_H c-src/emacs/src/regex.h 21 -_RE_SYNTAX_POSIX_COMMON c-src/emacs/src/regex.h 221 -_Restrict_ c-src/emacs/src/regex.h 540 -_Restrict_ c-src/emacs/src/regex.h 542 -_Restrict_ c-src/emacs/src/regex.h 544 -_Restrict_arr_ c-src/emacs/src/regex.h 555 -_Restrict_arr_ c-src/emacs/src/regex.h 557 -_UCHAR_T c-src/emacs/src/lisp.h 2423 -__COLORS cp-src/screen.hpp 9 -__default_morecore c-src/emacs/src/gmalloc.c /^__default_morecore (ptrdiff_t increment)$/ -__init__ pyt-src/server.py /^ def __init__(self):$/ -__init__ pyt-src/server.py /^ def __init__(self, Master, text, textvar, widt/ -__init__ pyt-src/server.py /^ def __init__(self, host, sitelist, master=None/ -__init__ pyt-src/server.py /^ def __init__(self, master=None):$/ -__init__ pyt-src/server.py /^ def __init__(self, newlegend, list, editor, ma/ -__init__ pyt-src/server.py /^ def __init__(self, user, userlist, master=None/ -__ip c.c 159 -__libc_atexit c-src/exit.c 30 -__libc_atexit c-src/exit.strange_suffix 30 -__malloc_extra_blocks c-src/emacs/src/gmalloc.c 382 -__malloc_initialize c-src/emacs/src/gmalloc.c /^__malloc_initialize (void)$/ -__malloc_initialized c-src/emacs/src/gmalloc.c 380 -__repr__ pyt-src/server.py /^ def __repr__(self):$/ -__sbrk c-src/emacs/src/gmalloc.c 1516 -__str__ pyt-src/server.py /^ def __str__(self):$/ -__up c.c 160 -_aligned_blocks c-src/emacs/src/gmalloc.c 1006 -_aligned_blocks_mutex c-src/emacs/src/gmalloc.c 519 -_bar? ruby-src/test1.ru /^ def self._bar?(abc)$/ -_bytes_free c-src/emacs/src/gmalloc.c 377 -_bytes_used c-src/emacs/src/gmalloc.c 375 -_chunks_free c-src/emacs/src/gmalloc.c 376 -_chunks_used c-src/emacs/src/gmalloc.c 374 -_fraghead c-src/emacs/src/gmalloc.c 371 -_free c-src/emacs/src/gmalloc.c /^_free (void *ptr)$/ -_free_internal c-src/emacs/src/gmalloc.c /^_free_internal (void *ptr)$/ -_free_internal_nolock c-src/emacs/src/gmalloc.c /^_free_internal_nolock (void *ptr)$/ -_heapbase c-src/emacs/src/gmalloc.c 356 -_heapindex c-src/emacs/src/gmalloc.c 365 -_heapinfo c-src/emacs/src/gmalloc.c 359 -_heaplimit c-src/emacs/src/gmalloc.c 368 -_malloc c-src/emacs/src/gmalloc.c /^_malloc (size_t size)$/ -_malloc_internal c-src/emacs/src/gmalloc.c /^_malloc_internal (size_t size)$/ -_malloc_internal_nolock c-src/emacs/src/gmalloc.c /^_malloc_internal_nolock (size_t size)$/ -_malloc_mutex c-src/emacs/src/gmalloc.c 518 -_malloc_thread_enabled_p c-src/emacs/src/gmalloc.c 520 -_realloc c-src/emacs/src/gmalloc.c /^_realloc (void *ptr, size_t size)$/ -_realloc_internal c-src/emacs/src/gmalloc.c /^_realloc_internal (void *ptr, size_t size)$/ -_realloc_internal_nolock c-src/emacs/src/gmalloc.c /^_realloc_internal_nolock (void *ptr, size_t size)$/ -` ruby-src/test.rb /^ def `(command)$/ -` tex-src/texinfo.tex /^\\def\\`{{`}}$/ -a c-src/h.h 103 -a c-src/h.h 40 -a c.c /^a ()$/ -a c.c /^a()$/ -a c.c 152 -a c.c 180 -a cp-src/c.C 132 -a ruby-src/test1.ru /^ def a()$/ -a-forth-constant! forth-src/test-forth.fth /^99 constant a-forth-constant!$/ -a-forth-value? forth-src/test-forth.fth /^55 value a-forth-value?$/ -a-forth-word forth-src/test-forth.fth /^: a-forth-word ( a b c -- )$/ -a-forth-word forth-src/test-forth.fth /^: a-forth-word ( a b c -- a*b+c ) + * ;$/ +($_,$flag,$opt,$f,$r,@temp perl-src/yagrip.pl 8 +$0x80 c-src/sysdep.h 32 +${CHECKOBJS} make-src/Makefile /^${CHECKOBJS}: CFLAGS=-g3 -DNULLFREECHECK=0$/ +$domain php-src/lce_functions.php 175 +$filename php-src/lce_functions.php 174 +$ignore_ws php-src/lce_functions.php 171 +$memassign php-src/ptest.php 9 +$memassign_space php-src/ptest.php 10 +$member php-src/ptest.php 8 +$msgid_lc php-src/lce_functions.php 113 +$msgid php-src/lce_functions.php 107 +$msgid php-src/lce_functions.php 165 +$msgstr_lc php-src/lce_functions.php 114 +$msgstr php-src/lce_functions.php 108 +$msgstr php-src/lce_functions.php 166 +$po_entries php-src/lce_functions.php 172 +$poe_num php-src/lce_functions.php 173 +$por_a php-src/lce_functions.php 500 +$prefix php-src/lce_functions.php 72 +($prog,$_,@list perl-src/yagrip.pl 39 +$state php-src/lce_functions.php 170 +($string,$flag,@string,@temp,@last perl-src/yagrip.pl 40 +$sys_comment_lc php-src/lce_functions.php 116 +$sys_comment php-src/lce_functions.php 110 +$sys_comment php-src/lce_functions.php 168 +$SYS_##syscall_na c-src/sysdep.h 31 +$test php-src/ptest.php 12 +$unk_comment_lc php-src/lce_functions.php 117 +$unk_comment php-src/lce_functions.php 111 +$unk_comment php-src/lce_functions.php 169 +$user_comment_lc php-src/lce_functions.php 115 +$user_comment php-src/lce_functions.php 109 +$user_comment php-src/lce_functions.php 167 +2const forth-src/test-forth.fth /^3 4 2constant 2const$/ +2val forth-src/test-forth.fth /^2const 2value 2val$/ +2var forth-src/test-forth.fth /^2variable 2var$/ a0 c-src/emacs/src/lisp.h /^ Lisp_Object (*a0) (void);$/ a1 c-src/emacs/src/lisp.h /^ Lisp_Object (*a1) (Lisp_Object);$/ a2 c-src/emacs/src/lisp.h /^ Lisp_Object (*a2) (Lisp_Object, Lisp_Object)/ @@ -1779,38 +43,44 @@ a5 c-src/emacs/src/lisp.h /^ Lisp_Object (*a5) (Lisp_Object, Lisp_Object,/ a6 c-src/emacs/src/lisp.h /^ Lisp_Object (*a6) (Lisp_Object, Lisp_Object,/ a7 c-src/emacs/src/lisp.h /^ Lisp_Object (*a7) (Lisp_Object, Lisp_Object,/ a8 c-src/emacs/src/lisp.h /^ Lisp_Object (*a8) (Lisp_Object, Lisp_Object,/ -aMANY c-src/emacs/src/lisp.h /^ Lisp_Object (*aMANY) (ptrdiff_t, Lisp_Object/ -aUNEVALLED c-src/emacs/src/lisp.h /^ Lisp_Object (*aUNEVALLED) (Lisp_Object args)/ -aa c.c 269 -aa c.c 279 +aaaaaa c-src/h.h 111 aaa c.c 249 aaa c.c 269 -aaaaaa c-src/h.h 111 -abbrev-expansion c-src/abbrev.c /^DEFUN ("abbrev-expansion", Fabbrev_expansion, Sabb/ -abbrev-symbol c-src/abbrev.c /^DEFUN ("abbrev-symbol", Fabbrev_symbol, Sabbrev_sy/ +aa c.c 269 +aa c.c 279 abbrev_all_caps c-src/abbrev.c 58 +abbrev-expansion c-src/abbrev.c /^DEFUN ("abbrev-expansion", Fabbrev_expansion, Sabb/ abbrevs_changed c-src/abbrev.c 56 +abbrev-symbol c-src/abbrev.c /^DEFUN ("abbrev-symbol", Fabbrev_symbol, Sabbrev_sy/ abc c-src/h.h 33 abc c-src/h.h 37 +ABC ruby-src/test1.ru 11 +Abort_Handler_Pointer/t ada-src/2ataspri.ads /^ type Abort_Handler_Pointer is access procedure / abort-recursive-edit c-src/emacs/src/keyboard.c /^DEFUN ("abort-recursive-edit", Fabort_recursive_ed/ +Abort_Task/p ada-src/2ataspri.adb /^ procedure Abort_Task (T : TCB_Ptr) is$/ +Abort_Task/p ada-src/2ataspri.ads /^ procedure Abort_Task (T : TCB_Ptr);$/ +Abort_Wrapper/p ada-src/2ataspri.adb /^ procedure Abort_Wrapper$/ aboveenvbreak tex-src/texinfo.tex /^\\def\\aboveenvbreak{{\\advance\\aboveenvskipamount by/ abs/f ada-src/etags-test-for.ada /^ function "abs" (Right : Complex) return Real'/ absolute_dirname c-src/etags.c /^absolute_dirname (char *file, char *dir)$/ absolute_filename c-src/etags.c /^absolute_filename (char *file, char *dir)$/ abt cp-src/c.C 55 -acc_pred_info merc-src/accumulator.m /^:- pred acc_pred_info(list(mer_type)::in, list(pro/ -acc_proc_info merc-src/accumulator.m /^:- pred acc_proc_info(list(prog_var)::in, prog_var/ -acc_unification merc-src/accumulator.m /^:- pred acc_unification(pair(prog_var)::in, hlds_g/ -acc_var_subst_init merc-src/accumulator.m /^:- pred acc_var_subst_init(list(prog_var)::in,$/ +a c.c 152 +A c.c 162 +a c.c 180 +a c.c /^a ()$/ +a c.c /^a()$/ accent_key_syms c-src/emacs/src/keyboard.c 4625 access_keymap_keyremap c-src/emacs/src/keyboard.c /^access_keymap_keyremap (Lisp_Object map, Lisp_Obje/ +acc_pred_info merc-src/accumulator.m /^:- pred acc_pred_info(list(mer_type)::in, list(pro/ +acc_proc_info merc-src/accumulator.m /^:- pred acc_proc_info(list(prog_var)::in, prog_var/ accu_assoc merc-src/accumulator.m /^:- pred accu_assoc(module_info::in, vartypes::in, / accu_assoc merc-src/accumulator.m /^:- type accu_assoc$/ accu_base merc-src/accumulator.m /^:- type accu_base$/ accu_before merc-src/accumulator.m /^:- pred accu_before(module_info::in, vartypes::in,/ accu_case merc-src/accumulator.m /^:- type accu_case$/ -accu_construct merc-src/accumulator.m /^:- pred accu_construct(module_info::in, vartypes::/ accu_construct_assoc merc-src/accumulator.m /^:- pred accu_construct_assoc(module_info::in, vart/ +accu_construct merc-src/accumulator.m /^:- pred accu_construct(module_info::in, vartypes::/ accu_create_goal merc-src/accumulator.m /^:- pred accu_create_goal(accu_goal_id::in, list(pr/ accu_divide_base_case merc-src/accumulator.m /^:- pred accu_divide_base_case(module_info::in, var/ accu_goal_id merc-src/accumulator.m /^:- type accu_goal_id$/ @@ -1820,83 +90,120 @@ accu_has_heuristic merc-src/accumulator.m /^:- pred accu_has_heuristic(module_na accu_heuristic merc-src/accumulator.m /^:- pred accu_heuristic(module_name::in, string::in/ accu_is_associative merc-src/accumulator.m /^:- pred accu_is_associative(module_info::in, pred_/ accu_is_update merc-src/accumulator.m /^:- pred accu_is_update(module_info::in, pred_id::i/ +acc_unification merc-src/accumulator.m /^:- pred acc_unification(pair(prog_var)::in, hlds_g/ accu_process_assoc_set merc-src/accumulator.m /^:- pred accu_process_assoc_set(module_info::in, ac/ accu_process_update_set merc-src/accumulator.m /^:- pred accu_process_update_set(module_info::in, a/ accu_related merc-src/accumulator.m /^:- pred accu_related(module_info::in, vartypes::in/ accu_rename merc-src/accumulator.m /^:- func accu_rename(list(accu_goal_id), accu_subst/ -accu_sets merc-src/accumulator.m /^:- type accu_sets$/ accu_sets_init merc-src/accumulator.m /^:- pred accu_sets_init(accu_sets::out) is det.$/ -accu_stage1 merc-src/accumulator.m /^:- pred accu_stage1(module_info::in, vartypes::in,/ +accu_sets merc-src/accumulator.m /^:- type accu_sets$/ accu_stage1_2 merc-src/accumulator.m /^:- pred accu_stage1_2(module_info::in, vartypes::i/ +accu_stage1 merc-src/accumulator.m /^:- pred accu_stage1(module_info::in, vartypes::in,/ accu_stage2 merc-src/accumulator.m /^:- pred accu_stage2(module_info::in, proc_info::in/ accu_stage3 merc-src/accumulator.m /^:- pred accu_stage3(accu_goal_id::in, list(prog_va/ accu_standardize merc-src/accumulator.m /^:- pred accu_standardize(hlds_goal::in, hlds_goal:/ accu_store merc-src/accumulator.m /^:- pred accu_store(accu_case::in, hlds_goal::in,$/ accu_subst merc-src/accumulator.m /^:- type accu_subst == map(prog_var, prog_var).$/ -accu_substs merc-src/accumulator.m /^:- type accu_substs$/ accu_substs_init merc-src/accumulator.m /^:- pred accu_substs_init(list(prog_var)::in, prog_/ +accu_substs merc-src/accumulator.m /^:- type accu_substs$/ accu_top_level merc-src/accumulator.m /^:- pred accu_top_level(top_level::in, hlds_goal::i/ accu_transform_proc merc-src/accumulator.m /^:- pred accu_transform_proc(pred_proc_id::in, pred/ accu_update merc-src/accumulator.m /^:- pred accu_update(module_info::in, vartypes::in,/ accu_warning merc-src/accumulator.m /^:- type accu_warning$/ -act prol-src/natded.prolog /^act(OutForm,OutSyn,Ws):-$/ +acc_var_subst_init merc-src/accumulator.m /^:- pred acc_var_subst_init(list(prog_var)::in,$/ +/Acircumflex ps-src/rfc1245.ps /^\/Acircumflex \/Ecircumflex \/Aacute \/Edieresis \/Egra/ +A cp-src/c.C 117 +a cp-src/c.C 132 +A cp-src/c.C 39 +A cp-src/c.C 56 +A cp-src/c.C 57 +A cp-src/c.C 73 +~A cp-src/c.C /^A::~A() {}$/ +A cp-src/c.C /^void A::A() {}$/ +A cp-src/fail.C 23 +A cp-src/fail.C 7 +a c-src/h.h 103 +a c-src/h.h 40 action prol-src/natded.prolog /^action(KeyVals):-$/ -active_maps c-src/emacs/src/keyboard.c /^active_maps (Lisp_Object first_event)$/ activedoublequote tex-src/texinfo.tex /^\\def\\activedoublequote{{\\tt \\char '042}}$/ +active_maps c-src/emacs/src/keyboard.c /^active_maps (Lisp_Object first_event)$/ activeparens tex-src/texinfo.tex /^\\def\\activeparens{%$/ actout prol-src/natded.prolog /^actout('Text',Trees):-$/ -addArchs objc-src/PackInsp.m /^-(void)addArchs:(const char *)string$/ -addPOReader php-src/lce_functions.php /^ function addPOReader($d_name, &$por)$/ +act prol-src/natded.prolog /^act(OutForm,OutSyn,Ws):-$/ +Ada_funcs c-src/etags.c /^Ada_funcs (FILE *inf)$/ +Ada_getit c-src/etags.c /^Ada_getit (FILE *inf, const char *name_qualifier)$/ +Ada_help c-src/etags.c 475 +ADASRC make-src/Makefile /^ADASRC=etags-test-for.ada 2ataspri.adb 2ataspri.ad/ +Ada_suffixes c-src/etags.c 473 add_active prol-src/natded.prolog /^add_active([],Cat,Goal):-$/ +addArchs objc-src/PackInsp.m /^-(void)addArchs:(const char *)string$/ add_command_key c-src/emacs/src/keyboard.c /^add_command_key (Lisp_Object key)$/ add_edge prol-src/natded.prolog /^add_edge(Left,Right,Cat):-$/ add_node c-src/etags.c /^add_node (node *np, node **cur_node_p)$/ -add_regex c-src/etags.c /^add_regex (char *regexp_pattern, language *lang)$/ -add_user_signal c-src/emacs/src/keyboard.c /^add_user_signal (int sig, const char *name)$/ addnoise html-src/algrthms.html /^Adding Noise to the$/ +AddNullToNmStr pas-src/common.pas /^function AddNullToNmStr; (*($/ +addPOReader php-src/lce_functions.php /^ function addPOReader($d_name, &$por)$/ +add_regex c-src/etags.c /^add_regex (char *regexp_pattern, language *lang)$/ +ADDRESS c-src/emacs/src/gmalloc.c /^#define ADDRESS(B) ((void *) (((B) - 1) * BLOCKSIZ/ +Address_To_Call_State/f ada-src/2ataspri.adb /^ function Address_To_Call_State is new$/ +Address_To_TCB_Ptr/f ada-src/2ataspri.ads /^ function Address_To_TCB_Ptr is new$/ address y-src/cccp.y 113 +add_user_signal c-src/emacs/src/keyboard.c /^add_user_signal (int sig, const char *name)$/ +#a-defer-word forth-src/test-forth.fth /^defer #a-defer-word$/ adjust_point_for_property c-src/emacs/src/keyboard.c /^adjust_point_for_property (ptrdiff_t last_pt, bool/ +Advanced usage tex-src/gzip.texi /^@node Advanced usage, Environment, Invoking gzip, / +a-forth-constant! forth-src/test-forth.fth /^99 constant a-forth-constant!$/ +(a-forth-constant forth-src/test-forth.fth /^constant (a-forth-constant$/ +:a-forth-dictionary-entry forth-src/test-forth.fth /^create :a-forth-dictionary-entry$/ +a-forth-value? forth-src/test-forth.fth /^55 value a-forth-value?$/ +a-forth-word forth-src/test-forth.fth /^: a-forth-word ( a b c -- )$/ +a-forth-word forth-src/test-forth.fth /^: a-forth-word ( a b c -- a*b+c ) + * ;$/ afourpaper tex-src/texinfo.tex /^\\def\\afourpaper{$/ afterenvbreak tex-src/texinfo.tex /^\\def\\afterenvbreak{\\endgraf \\ifdim\\lastskip<\\above/ agent cp-src/clheir.hpp 75 algorithms html-src/algrthms.html /^Description$/ alias c-src/emacs/src/lisp.h 688 -align c-src/emacs/src/gmalloc.c /^align (size_t size)$/ alignas c-src/emacs/src/lisp.h /^# define alignas(alignment) \/* empty *\/$/ -aligned c-src/emacs/src/gmalloc.c 199 -aligned_alloc c-src/emacs/src/gmalloc.c /^aligned_alloc (size_t alignment, size_t size)$/ +align c-src/emacs/src/gmalloc.c /^align (size_t size)$/ aligned_alloc c-src/emacs/src/gmalloc.c 1722 aligned_alloc c-src/emacs/src/gmalloc.c 71 +aligned_alloc c-src/emacs/src/gmalloc.c /^aligned_alloc (size_t alignment, size_t size)$/ +_aligned_blocks c-src/emacs/src/gmalloc.c 1006 +_aligned_blocks_mutex c-src/emacs/src/gmalloc.c 519 +Aligned_Cons c-src/emacs/src/lisp.h 4670 +aligned c-src/emacs/src/gmalloc.c 199 +Aligned_String c-src/emacs/src/lisp.h 4676 alignlist c-src/emacs/src/gmalloc.c 196 +ALIGNOF_STRUCT_LISP_VECTOR c-src/emacs/src/lisp.h 1378 alive cp-src/conway.hpp 7 all_kboards c-src/emacs/src/keyboard.c 86 -allocate_kboard c-src/emacs/src/keyboard.c /^allocate_kboard (Lisp_Object type)$/ +ALLOCATED_BEFORE_DUMPING c-src/emacs/src/gmalloc.c /^#define ALLOCATED_BEFORE_DUMPING(P) \\$/ allocated c-src/emacs/src/regex.h 344 +allocate_kboard c-src/emacs/src/keyboard.c /^allocate_kboard (Lisp_Object type)$/ +ALLOCATE_PSEUDOVECTOR c-src/emacs/src/lisp.h /^#define ALLOCATE_PSEUDOVECTOR(type, field, tag) / +ALLOCATE_ZEROED_PSEUDOVECTOR c-src/emacs/src/lisp.h /^#define ALLOCATE_ZEROED_PSEUDOVECTOR(type, field, / alphaenumerate tex-src/texinfo.tex /^\\def\\alphaenumerate{\\enumerate{a}}$/ +aMANY c-src/emacs/src/lisp.h /^ Lisp_Object (*aMANY) (ptrdiff_t, Lisp_Object/ ampnr tex-src/texinfo.tex /^\\def\\opnr{{\\sf\\char`\\(}} \\def\\clnr{{\\sf\\char`\\)}} / amprm tex-src/texinfo.tex /^\\gdef\\amprm#1 {{\\rm\\}\\let(=\\oprm \\let)=\\clrm\\ }/ +analyze_regex c-src/etags.c /^analyze_regex (char *regex_arg)$/ +andkeyvalseq prol-src/natded.prolog /^andkeyvalseq(KeyVals) --> ['&'], keyvalseq(KeyVals/ +AND y-src/cccp.c 11 an_extern_linkage c-src/h.h 44 an_extern_linkage c-src/h.h 56 an_extern_linkage_ptr c-src/h.h 43 -analyze_regex c-src/etags.c /^analyze_regex (char *regex_arg)$/ -andkeyvalseq prol-src/natded.prolog /^andkeyvalseq(KeyVals) --> ['&'], keyvalseq(KeyVals/ -animals c-src/h.h 81 animals cp-src/c.C 126 animals cp-src/c.C 130 +animals c-src/h.h 81 +(another-forth-word) forth-src/test-forth.fth /^: (another-forth-word) ( -- )$/ +ANSIC c-src/h.h 84 +ANSIC c-src/h.h 85 any_kboard_state c-src/emacs/src/keyboard.c /^any_kboard_state ()$/ appDidInit objcpp-src/SimpleCalc.M /^- appDidInit:sender$/ -append prol-src/natded.prolog /^append([],Xs,Xs).$/ -appendToDisplay objcpp-src/SimpleCalc.M /^- appendToDisplay:(const char *)theDigit$/ -append_list prol-src/natded.prolog /^append_list([],[]).$/ -append_string pas-src/common.pas /^procedure append_string;(*($/ -append_tool_bar_item c-src/emacs/src/keyboard.c /^append_tool_bar_item (void)$/ -appendix perl-src/htlmify-cystic 24 -appendix tex-src/texinfo.tex /^\\let\\appendix=\\relax$/ -appendix tex-src/texinfo.tex /^\\outer\\def\\appendix{\\parsearg\\appendixzzz}$/ -appendix_name perl-src/htlmify-cystic 13 -appendix_toc perl-src/htlmify-cystic 16 appendixletter tex-src/texinfo.tex /^\\def\\appendixletter{\\char\\the\\appendixno}$/ +appendix_name perl-src/htlmify-cystic 13 appendixnoderef tex-src/texinfo.tex /^\\def\\appendixnoderef{\\ifx\\lastnode\\relax\\else$/ +appendix perl-src/htlmify-cystic 24 appendixsec tex-src/texinfo.tex /^\\let\\appendixsec=\\relax$/ appendixsec tex-src/texinfo.tex /^\\outer\\def\\appendixsec{\\parsearg\\appendixsectionzz/ appendixsection tex-src/texinfo.tex /^\\let\\appendixsection=\\relax$/ @@ -1911,15 +218,25 @@ appendixsubsubsec tex-src/texinfo.tex /^\\let\\appendixsubsubsec=\\relax$/ appendixsubsubsec tex-src/texinfo.tex /^\\outer\\def\\appendixsubsubsec{\\parsearg\\appendixsub/ appendixsubsubsection tex-src/texinfo.tex /^\\let\\appendixsubsubsection=\\relax$/ appendixsubsubseczzz tex-src/texinfo.tex /^\\def\\appendixsubsubseczzz #1{\\seccheck{appendixsub/ +appendix tex-src/texinfo.tex /^\\let\\appendix=\\relax$/ +appendix tex-src/texinfo.tex /^\\outer\\def\\appendix{\\parsearg\\appendixzzz}$/ +appendix_toc perl-src/htlmify-cystic 16 appendixzzz tex-src/texinfo.tex /^\\def\\appendixzzz #1{\\seccheck{appendix}%$/ +append_list prol-src/natded.prolog /^append_list([],[]).$/ +append prol-src/natded.prolog /^append([],Xs,Xs).$/ +append_string pas-src/common.pas /^procedure append_string;(*($/ +AppendTextString pas-src/common.pas /^function AppendTextString;(*($/ +appendToDisplay objcpp-src/SimpleCalc.M /^- appendToDisplay:(const char *)theDigit$/ +append_tool_bar_item c-src/emacs/src/keyboard.c /^append_tool_bar_item (void)$/ apply_modifiers c-src/emacs/src/keyboard.c /^apply_modifiers (int modifiers, Lisp_Object base)$/ apply_modifiers_uncached c-src/emacs/src/keyboard.c /^apply_modifiers_uncached (int modifiers, char *bas/ +/A ps-src/rfc1245.ps /^\/A { $/ aref_addr c-src/emacs/src/lisp.h /^aref_addr (Lisp_Object array, ptrdiff_t idx)$/ +AREF c-src/emacs/src/lisp.h /^AREF (Lisp_Object array, ptrdiff_t idx)$/ arg c-src/emacs/src/lisp.h 2961 arg c-src/emacs/src/lisp.h 2966 arg c-src/emacs/src/lisp.h 2971 arg c-src/h.h 13 -arg_type c-src/etags.c 250 arglist y-src/cccp.y 41 argno y-src/cccp.y 45 args c-src/emacs/src/lisp.h 2986 @@ -1927,88 +244,165 @@ args c-src/h.h 30 argsindent tex-src/texinfo.tex /^\\dimen1=\\hsize \\advance \\dimen1 by -\\defargsindent/ argsindent tex-src/texinfo.tex /^\\newskip\\defargsindent \\defargsindent=50pt$/ argsindent tex-src/texinfo.tex /^\\parshape 2 0in \\dimen0 \\defargsindent \\dimen1 / +ARGS make-src/Makefile /^ARGS=- < srclist$/ +arg_type c-src/etags.c 250 argument c-src/etags.c 253 argvals prol-src/natded.prolog /^argvals([]) --> [].$/ +Arith_Comparison c-src/emacs/src/lisp.h 3497 +ARITH_EQUAL c-src/emacs/src/lisp.h 3498 +ARITH_GRTR c-src/emacs/src/lisp.h 3501 +ARITH_GRTR_OR_EQUAL c-src/emacs/src/lisp.h 3503 +ARITH_LESS c-src/emacs/src/lisp.h 3500 +ARITH_LESS_OR_EQUAL c-src/emacs/src/lisp.h 3502 +ARITH_NOTEQUAL c-src/emacs/src/lisp.h 3499 array c.c 190 +ARRAYELTS c-src/emacs/src/lisp.h /^#define ARRAYELTS(arr) (sizeof (arr) \/ sizeof (arr/ +ARRAY_MARK_FLAG c-src/emacs/src/lisp.h 768 +ARRAYP c-src/emacs/src/lisp.h /^ARRAYP (Lisp_Object x)$/ +A ruby-src/test1.ru /^class A$/ +a ruby-src/test1.ru /^ def a()$/ +A ruby-src/test1.ru /^module A$/ +ASCII_CHAR_P c-src/emacs/src/lisp.h /^#define ASCII_CHAR_P(c) UNSIGNED_CMP (c, <, 0x80)$/ ascii c-src/emacs/src/lisp.h 1598 +ASET c-src/emacs/src/lisp.h /^ASET (Lisp_Object array, ptrdiff_t idx, Lisp_Objec/ asis tex-src/texinfo.tex /^\\def\\asis#1{#1}$/ +ASIZE c-src/emacs/src/lisp.h /^ASIZE (Lisp_Object array)$/ +Asm_help c-src/etags.c 504 +Asm_labels c-src/etags.c /^Asm_labels (FILE *inf)$/ +Asm_suffixes c-src/etags.c 493 asort cp-src/functions.cpp /^void asort(int *a, int num){$/ +ASRC make-src/Makefile /^ASRC=empty.zz empty.zz.gz$/ assemby-code-word forth-src/test-forth.fth /^code assemby-code-word ( dunno what it does )$/ -assert c-src/etags.c /^# define assert(x) ((void) 0)$/ assert c-src/etags.c 135 +assert c-src/etags.c /^# define assert(x) ((void) 0)$/ assign_neighbor cp-src/clheir.hpp /^ void assign_neighbor(int direction, location */ -assoc_list merc-src/accumulator.m /^:- import_module assoc_list.$/ associativity_assertion merc-src/accumulator.m /^:- pred associativity_assertion(module_info::in, l/ +assoc_list merc-src/accumulator.m /^:- import_module assoc_list.$/ +AST_Array::AST_Array cp-src/c.C /^AST_Array::AST_Array(UTL_ScopedName *n, unsigned l/ +AST_ConcreteType::AST_ConcreteType cp-src/c.C /^AST_ConcreteType::AST_ConcreteType(AST_Decl::NodeT/ +AST_Root cp-src/c.C 92 +AT cp-src/c.C 52 at_end c-src/etags.c 249 at_filename c-src/etags.c 247 +/atilde ps-src/rfc1245.ps /^\/atilde \/aring \/ccedilla \/eacute \/egrave \/ecircumf/ at_language c-src/etags.c 245 at_least_one_member prol-src/natded.prolog /^at_least_one_member(X,[X|_]):-!.$/ -at_regexp c-src/etags.c 246 -at_stdin c-src/etags.c 248 atom prol-src/natded.prolog /^atom(X) --> [X], {atomic(X)}.$/ atomval prol-src/natded.prolog /^atomval(X) --> atom(X).$/ +at_regexp c-src/etags.c 246 +at_stdin c-src/etags.c 248 +AU cp-src/c.C 53 +aultparindent\hang tex-src/texinfo.tex /^\\footstrut\\parindent=\\defaultparindent\\hang\\textin/ aultparindent tex-src/texinfo.tex /^\\newdimen\\defaultparindent \\defaultparindent = 15p/ aultparindent tex-src/texinfo.tex /^\\parindent = \\defaultparindent$/ -aultparindent\hang tex-src/texinfo.tex /^\\footstrut\\parindent=\\defaultparindent\\hang\\textin/ -author tex-src/texinfo.tex /^ \\def\\author{\\parsearg\\authorzzz}%$/ +aUNEVALLED c-src/emacs/src/lisp.h /^ Lisp_Object (*aUNEVALLED) (Lisp_Object args)/ authorfont tex-src/texinfo.tex /^ \\def\\authorfont{\\authorrm \\normalbaselineskip =/ authorrm tex-src/texinfo.tex /^\\let\\authorrm = \\secrm$/ +author tex-src/texinfo.tex /^ \\def\\author{\\parsearg\\authorzzz}%$/ authorzzz tex-src/texinfo.tex /^ \\def\\authorzzz##1{\\ifseenauthor\\else\\vskip 0pt / +AUTO_CONS c-src/emacs/src/lisp.h /^#define AUTO_CONS(name, a, b) Lisp_Object name = A/ +AUTO_CONS_EXPR c-src/emacs/src/lisp.h /^#define AUTO_CONS_EXPR(a, b) \\$/ auto_help c-src/etags.c 699 -b c-src/h.h 103 -b c-src/h.h 104 -b c-src/h.h 41 -b c.c /^b ()$/ -b c.c 180 -b c.c 259 -b c.c 260 -b c.c 262 -b cp-src/c.C 132 -b ruby-src/test1.ru /^ def b()$/ -b tex-src/texinfo.tex /^\\def\\b##1{\\realbackslash b {##1}}$/ -b tex-src/texinfo.tex /^\\def\\b##1{\\realbackslash b {##1}}%$/ -b tex-src/texinfo.tex /^\\def\\b#1{{\\bf #1}}$/ -b tex-src/texinfo.tex /^\\let\\b=\\indexdummyfont$/ -b tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ -backslash tex-src/texinfo.tex /^\\def\\rawbackslashxx{\\indexbackslash}% \\indexbacksl/ +AUTO_LIST1 c-src/emacs/src/lisp.h /^#define AUTO_LIST1(name, a) \\$/ +AUTO_LIST2 c-src/emacs/src/lisp.h /^#define AUTO_LIST2(name, a, b) \\$/ +AUTO_LIST3 c-src/emacs/src/lisp.h /^#define AUTO_LIST3(name, a, b, c) \\$/ +AUTO_LIST4 c-src/emacs/src/lisp.h /^#define AUTO_LIST4(name, a, b, c, d) \\$/ +AUTOLOADP c-src/emacs/src/lisp.h /^AUTOLOADP (Lisp_Object x)$/ +AUTO_STRING c-src/emacs/src/lisp.h /^#define AUTO_STRING(name, str) \\$/ +AVAIL_ALLOCA c-src/emacs/src/lisp.h /^#define AVAIL_ALLOCA(size) (sa_avail -= (size), al/ backslash tex-src/texinfo.tex /^\\def\\rawbackslashxx{\\indexbackslash}%$/ +backslash tex-src/texinfo.tex /^\\def\\rawbackslashxx{\\indexbackslash}% \\indexbacksl/ balancecolumns tex-src/texinfo.tex /^\\def\\balancecolumns{%$/ -bar c-src/c.c /^void bar() {while(0) {}}$/ -bar c-src/h.h 19 +bar1 ruby-src/test1.ru /^ attr_reader(:foo1, :bar1, # comment$/ bar c.c 143 bar cp-src/x.cc /^XX::bar()$/ -bar1 ruby-src/test1.ru /^ attr_reader(:foo1, :bar1, # comment$/ +bar c-src/c.c /^void bar() {while(0) {}}$/ +bar c-src/h.h 19 +Bar lua-src/test.lua /^function Square.something:Bar ()$/ +Bar perl-src/kai-test.pl /^package Bar;$/ +Barrier_Function_Pointer/t ada-src/etags-test-for.ada /^ type Barrier_Function_Pointer is access$/ bar= ruby-src/test1.ru /^ attr_writer :bar,$/ -bas_syn prol-src/natded.prolog /^bas_syn(n(_)).$/ -base c-src/emacs/src/lisp.h 2188 -base cp-src/Range.h /^ double base (void) const { return rng_base; }$/ -base cp-src/c.C /^double base (void) const { return rng_base; }$/ +_bar? ruby-src/test1.ru /^ def self._bar?(abc)$/ base_case_ids merc-src/accumulator.m /^:- func base_case_ids(accu_goal_store) = list(accu/ base_case_ids_set merc-src/accumulator.m /^:- func base_case_ids_set(accu_goal_store) = set(a/ +base cp-src/c.C /^double base (void) const { return rng_base; }$/ +base cp-src/Range.h /^ double base (void) const { return rng_base; }$/ +base c-src/emacs/src/lisp.h 2188 +bas_syn prol-src/natded.prolog /^bas_syn(n(_)).$/ baz= ruby-src/test1.ru /^ :baz,$/ -bb c.c 275 -bbb c.c 251 bbbbbb c-src/h.h 113 +bbb c.c 251 +bb c.c 275 +b c.c 180 +b c.c 259 +b c.c 260 +b c.c 262 +b c.c /^b ()$/ +B cp-src/c.C 122 +b cp-src/c.C 132 +B cp-src/c.C 54 +B cp-src/c.C 56 +B cp-src/c.C 74 +~B cp-src/c.C /^ ~B() {};$/ +B cp-src/c.C /^void B::B() {}$/ +B cp-src/fail.C 24 +B cp-src/fail.C 8 +b c-src/h.h 103 +b c-src/h.h 104 +b c-src/h.h 41 been_warned c-src/etags.c 222 before_command_echo_length c-src/emacs/src/keyboard.c 130 before_command_key_count c-src/emacs/src/keyboard.c 129 -begin tex-src/texinfo.tex /^\\outer\\def\\begin{\\parsearg\\beginxxx}$/ +/BEGINBITMAP2BITc ps-src/rfc1245.ps /^\/BEGINBITMAP2BITc { $/ +/BEGINBITMAP2BIT ps-src/rfc1245.ps /^\/BEGINBITMAP2BIT { $/ +/BEGINBITMAPBWc ps-src/rfc1245.ps /^\/BEGINBITMAPBWc { $/ +/BEGINBITMAPBW ps-src/rfc1245.ps /^\/BEGINBITMAPBW { $/ +/BEGINBITMAPGRAYc ps-src/rfc1245.ps /^\/BEGINBITMAPGRAYc { $/ +/BEGINBITMAPGRAY ps-src/rfc1245.ps /^\/BEGINBITMAPGRAY { $/ begindoublecolumns tex-src/texinfo.tex /^\\def\\begindoublecolumns{\\begingroup$/ +/BEGINPRINTCODE ps-src/rfc1245.ps /^\/BEGINPRINTCODE { $/ +begin tex-src/texinfo.tex /^\\outer\\def\\begin{\\parsearg\\beginxxx}$/ beginxxx tex-src/texinfo.tex /^\\def\\beginxxx #1{%$/ begtoken c-src/etags.c /^#define begtoken(c) (_btk[CHAR (c)]) \/* c can star/ behaviour_info erl-src/gs_dialog.erl /^behaviour_info(callbacks) ->$/ -bf tex-src/texinfo.tex /^ \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/ -bf tex-src/texinfo.tex /^\\def\\bf{\\realbackslash bf }$/ +BE_Node cp-src/c.C 77 +BE_Node cp-src/c.C /^void BE_Node::BE_Node() {}$/ +/BF ps-src/rfc1245.ps /^\/BF { $/ bf tex-src/texinfo.tex /^\\def\\bf{\\realbackslash bf }%$/ +bf tex-src/texinfo.tex /^\\def\\bf{\\realbackslash bf }$/ bf tex-src/texinfo.tex /^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/ bf tex-src/texinfo.tex /^\\font\\defbf=cmbx10 scaled \\magstep1 %was 1314$/ -bind pyt-src/server.py /^ def bind(self, key, action):$/ +bf tex-src/texinfo.tex /^ \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/ +Bidule/b ada-src/etags-test-for.ada /^ protected body Bidule is$/ +Bidule/b ada-src/waroquiers.ada /^ protected body Bidule is$/ +Bidule/t ada-src/etags-test-for.ada /^ protected Bidule is$/ +Bidule/t ada-src/waroquiers.ada /^ protected Bidule is$/ bind_polling_period c-src/emacs/src/keyboard.c /^bind_polling_period (int n)$/ +bind pyt-src/server.py /^ def bind(self, key, action):$/ +/BITMAPCOLORc ps-src/rfc1245.ps /^\/BITMAPCOLORc { $/ +/BITMAPCOLOR ps-src/rfc1245.ps /^\/BITMAPCOLOR { $/ +/BITMAPGRAYc ps-src/rfc1245.ps /^\/BITMAPGRAYc { $/ +/BITMAPGRAY ps-src/rfc1245.ps /^\/BITMAPGRAY { $/ +BITS_PER_BITS_WORD c-src/emacs/src/lisp.h 125 +BITS_PER_BITS_WORD c-src/emacs/src/lisp.h 129 +BITS_PER_CHAR c-src/emacs/src/lisp.h 136 +BITS_PER_EMACS_INT c-src/emacs/src/lisp.h 139 +BITS_PER_LONG c-src/emacs/src/lisp.h 138 +BITS_PER_SHORT c-src/emacs/src/lisp.h 137 bits_word c-src/emacs/src/lisp.h 123 bits_word c-src/emacs/src/lisp.h 127 +BITS_WORD_MAX c-src/emacs/src/lisp.h 124 +BITS_WORD_MAX c-src/emacs/src/lisp.h 128 bla c.c /^int bla ()$/ +BLACK cp-src/screen.hpp 12 blah tex-src/testenv.tex /^\\section{blah}$/ bletch el-src/TAGTEST.EL /^(foo::defmumble bletch beuarghh)$/ +BLOCK c-src/emacs/src/gmalloc.c /^#define BLOCK(A) (((char *) (A) - _heapbase) \/ BLO/ +BLOCKIFY c-src/emacs/src/gmalloc.c /^#define BLOCKIFY(SIZE) (((SIZE) + BLOCKSIZE - 1) \// +BLOCKLOG c-src/emacs/src/gmalloc.c 125 +BLOCKSIZE c-src/emacs/src/gmalloc.c 126 +/bl ps-src/rfc1245.ps /^\/bl { $/ +BLUE cp-src/screen.hpp 13 blv c-src/emacs/src/lisp.h 689 blv_found c-src/emacs/src/lisp.h /^blv_found (struct Lisp_Buffer_Local_Value *blv)$/ bodyindent tex-src/texinfo.tex /^\\advance\\dimen2 by -\\defbodyindent$/ @@ -2017,141 +411,261 @@ bodyindent tex-src/texinfo.tex /^\\advance\\leftskip by -\\defbodyindent$/ bodyindent tex-src/texinfo.tex /^\\advance\\leftskip by \\defbodyindent \\advance \\righ/ bodyindent tex-src/texinfo.tex /^\\exdentamount=\\defbodyindent$/ bodyindent tex-src/texinfo.tex /^\\newskip\\defbodyindent \\defbodyindent=.4in$/ +Body_Required/f ada-src/etags-test-for.ada /^ function Body_Required$/ boldbrax tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ +Boo::Boo cp-src/c.C /^Boo::Boo(Boo) :$/ +Boo cp-src/c.C 129 +Boo cp-src/c.C /^ Boo(int _i, int _a, int _b) : i(_i), a(_a), b(/ bool c.c 222 -bool merc-src/accumulator.m /^:- import_module bool.$/ bool_header_size c-src/emacs/src/lisp.h 1472 +bool merc-src/accumulator.m /^:- import_module bool.$/ +boolvar c-src/emacs/src/lisp.h 2287 bool_vector_bitref c-src/emacs/src/lisp.h /^bool_vector_bitref (Lisp_Object a, EMACS_INT i)$/ +BOOL_VECTOR_BITS_PER_CHAR c-src/emacs/src/lisp.h 114 +BOOL_VECTOR_BITS_PER_CHAR c-src/emacs/src/lisp.h 115 bool_vector_bytes c-src/emacs/src/lisp.h /^bool_vector_bytes (EMACS_INT size)$/ bool_vector_data c-src/emacs/src/lisp.h /^bool_vector_data (Lisp_Object a)$/ +BOOL_VECTOR_P c-src/emacs/src/lisp.h /^BOOL_VECTOR_P (Lisp_Object a)$/ bool_vector_ref c-src/emacs/src/lisp.h /^bool_vector_ref (Lisp_Object a, EMACS_INT i)$/ bool_vector_set c-src/emacs/src/lisp.h /^bool_vector_set (Lisp_Object a, EMACS_INT i, bool / bool_vector_size c-src/emacs/src/lisp.h /^bool_vector_size (Lisp_Object a)$/ bool_vector_uchar_data c-src/emacs/src/lisp.h /^bool_vector_uchar_data (Lisp_Object a)$/ bool_vector_words c-src/emacs/src/lisp.h /^bool_vector_words (EMACS_INT size)$/ -boolvar c-src/emacs/src/lisp.h 2287 -br tex-src/texinfo.tex /^\\let\\br = \\par$/ +/B ps-src/rfc1245.ps /^\/B { $/ bracelev c-src/etags.c 2520 +/braceright ps-src/rfc1245.ps /^\/braceright \/asciitilde \/.notdef \/Adieresis \/Aring/ +/bracketright ps-src/rfc1245.ps /^\/bracketright \/asciicircum \/underscore \/grave \/a \// +/breve ps-src/rfc1245.ps /^\/breve \/dotaccent \/ring \/cedilla \/hungarumlaut \/og/ +BROWN cp-src/screen.hpp 18 +br tex-src/texinfo.tex /^\\let\\br = \\par$/ +B ruby-src/test1.ru /^ class B$/ +b ruby-src/test1.ru /^ def b()$/ bsp_DevId c-src/h.h 25 bt c-src/emacs/src/lisp.h 2988 +b tex-src/texinfo.tex /^\\def\\b#1{{\\bf #1}}$/ +b tex-src/texinfo.tex /^\\def\\b##1{\\realbackslash b {##1}}%$/ +b tex-src/texinfo.tex /^\\def\\b##1{\\realbackslash b {##1}}$/ +b tex-src/texinfo.tex /^\\let\\b=\\indexdummyfont$/ +b tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ btowc c-src/emacs/src/regex.h /^# define btowc(c) c$/ buffer c-src/emacs/src/lisp.h 2000 buffer c-src/emacs/src/regex.h 341 buffer c-src/etags.c 238 buffer c-src/h.h 119 +BUFFER_OBJFWDP c-src/emacs/src/lisp.h /^BUFFER_OBJFWDP (union Lisp_Fwd *a)$/ +BUFFERP c-src/emacs/src/lisp.h /^BUFFERP (Lisp_Object a)$/ +BUFFERSIZE objc-src/Subprocess.h 43 +buildact prol-src/natded.prolog /^buildact([SynIn],Right,RightPlus1):-$/ build prol-src/natded.prolog /^build([],Left,Left).$/ build_pure_c_string c-src/emacs/src/lisp.h /^build_pure_c_string (const char *str)$/ build_string c-src/emacs/src/lisp.h /^build_string (const char *str)$/ -buildact prol-src/natded.prolog /^buildact([SynIn],Right,RightPlus1):-$/ builtin_lisp_symbol c-src/emacs/src/lisp.h /^builtin_lisp_symbol (int index)$/ bullet tex-src/texinfo.tex /^\\def\\bullet{$\\ptexbullet$}$/ bullet tex-src/texinfo.tex /^\\let\\bullet=\\ptexbullet$/ burst c-src/h.h 28 busy c-src/emacs/src/gmalloc.c 158 +ButtonBar pyt-src/server.py /^def ButtonBar(frame, legend, ref, alternatives, co/ button_down_location c-src/emacs/src/keyboard.c 5210 button_down_time c-src/emacs/src/keyboard.c 5218 bye tex-src/texinfo.tex /^\\outer\\def\\bye{\\pagealignmacro\\tracingstats=1\\ptex/ -byte_stack c-src/emacs/src/lisp.h 3049 bytecode_dest c-src/emacs/src/lisp.h 3037 bytecode_top c-src/emacs/src/lisp.h 3036 +BYTE_MARK_STACK c-src/emacs/src/lisp.h 3181 bytepos c-src/emacs/src/lisp.h 2016 bytes_free c-src/emacs/src/gmalloc.c 314 +_bytes_free c-src/emacs/src/gmalloc.c 377 +byte_stack c-src/emacs/src/lisp.h 3049 bytes_total c-src/emacs/src/gmalloc.c 310 bytes_used c-src/emacs/src/gmalloc.c 312 -c c-src/h.h /^#define c() d$/ -c c-src/h.h 106 -c c.c 180 -c tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ -c tex-src/texinfo.tex /^\\let\\c=\\comment$/ -c_ext c-src/etags.c 2271 +_bytes_used c-src/emacs/src/gmalloc.c 375 caccacacca c.c /^caccacacca (a,b,c,d,e,f,g)$/ cacheLRUEntry_s c.c 172 cacheLRUEntry_t c.c 177 calculate_goal_info merc-src/accumulator.m /^:- pred calculate_goal_info(hlds_goal_expr::in, hl/ -calloc c-src/emacs/src/gmalloc.c /^calloc (size_t nmemb, size_t size)$/ +CALLMANY c-src/emacs/src/lisp.h /^#define CALLMANY(f, array) (f) (ARRAYELTS (array),/ +CALLN c-src/emacs/src/lisp.h /^#define CALLN(f, ...) CALLMANY (f, ((Lisp_Object [/ calloc c-src/emacs/src/gmalloc.c 1721 calloc c-src/emacs/src/gmalloc.c 66 calloc c-src/emacs/src/gmalloc.c 70 +calloc c-src/emacs/src/gmalloc.c /^calloc (size_t nmemb, size_t size)$/ can_be_null c-src/emacs/src/regex.h 370 cancel_echoing c-src/emacs/src/keyboard.c /^cancel_echoing (void)$/ canonicalize_filename c-src/etags.c /^canonicalize_filename (register char *fn)$/ capsenumerate tex-src/texinfo.tex /^\\def\\capsenumerate{\\enumerate{A}}$/ +CAR c-src/emacs/src/lisp.h /^CAR (Lisp_Object c)$/ +CAR_SAFE c-src/emacs/src/lisp.h /^CAR_SAFE (Lisp_Object c)$/ cartbot tex-src/texinfo.tex /^\\def\\cartbot{\\hbox to \\cartouter{\\hskip\\lskip$/ cartouche tex-src/texinfo.tex /^\\long\\def\\cartouche{%$/ carttop tex-src/texinfo.tex /^\\def\\carttop{\\hbox to \\cartouter{\\hskip\\lskip$/ case_Lisp_Int c-src/emacs/src/lisp.h 438 -cat c-src/h.h 81 +cat_atoms prol-src/natded.prolog /^cat_atoms(A1,A2,A3):-$/ +CATCHER c-src/emacs/src/lisp.h 3021 cat cp-src/c.C 126 cat cp-src/c.C 130 +cat c-src/h.h 81 cat prol-src/natded.prolog /^cat(A, Alpha@Beta, Ass3, Qs3, tree(fe,A:Alpha@Beta/ -cat_atoms prol-src/natded.prolog /^cat_atoms(A1,A2,A3):-$/ +C_AUTO c-src/etags.c 2198 cbl tex-src/texinfo.tex /^\\def\\cbl{{\\circle\\char'012\\hskip -6pt}}$/ cbr tex-src/texinfo.tex /^\\def\\cbr{{\\hskip 6pt\\circle\\char'011}}$/ +c c.c 180 cccccccccc c-src/h.h 115 +C cp-src/fail.C 25 +C cp-src/fail.C 9 +C cp-src/fail.C /^ C(int i) {x = i;}$/ +c c-src/h.h 106 +c c-src/h.h /^#define c() d$/ +%cdiff make-src/Makefile /^%cdiff: CTAGS% CTAGS ${infiles}$/ cdr c-src/emacs/src/lisp.h 1159 +CDR c-src/emacs/src/lisp.h /^CDR (Lisp_Object c)$/ +CDR_SAFE c-src/emacs/src/lisp.h /^CDR_SAFE (Lisp_Object c)$/ cell y-src/parse.y 279 center tex-src/texinfo.tex /^\\def\\center{\\parsearg\\centerzzz}$/ centerzzz tex-src/texinfo.tex /^\\def\\centerzzz #1{{\\advance\\hsize by -\\leftskip$/ +C_entries c-src/etags.c /^C_entries (int c_ext, FILE *inf)$/ +C_EXT c-src/etags.c 2193 +c_ext c-src/etags.c 2271 +CFLAGS make-src/Makefile /^CFLAGS=${WARNINGS} -ansi -g3 # -pg -O$/ +/cfs ps-src/rfc1245.ps /^\/cfs { $/ cgrep html-src/software.html /^cgrep$/ chain c-src/emacs/src/lisp.h 1162 chain c-src/emacs/src/lisp.h 2206 chain c-src/emacs/src/lisp.h 2396 -chain_subst merc-src/accumulator.m /^:- func chain_subst(accu_subst, accu_subst) = accu/ chain_subst_2 merc-src/accumulator.m /^:- pred chain_subst_2(list(A)::in, map(A, B)::in, / +chain_subst merc-src/accumulator.m /^:- func chain_subst(accu_subst, accu_subst) = accu/ +ChangeFileType pas-src/common.pas /^function ChangeFileType; (*(FileName : NameString;/ chapbf tex-src/texinfo.tex /^\\let\\chapbf=\\chaprm$/ chapbreak tex-src/texinfo.tex /^\\def\\chapbreak{\\dobreak \\chapheadingskip {-4000}}$/ -chapentry tex-src/texinfo.tex /^ \\let\\chapentry = \\shortchapentry$/ -chapentry tex-src/texinfo.tex /^\\def\\chapentry#1#2#3{\\dochapentry{#2\\labelspace#1}/ chapentryfonts tex-src/texinfo.tex /^\\def\\chapentryfonts{\\secfonts \\rm}$/ +chapentry tex-src/texinfo.tex /^\\def\\chapentry#1#2#3{\\dochapentry{#2\\labelspace#1}/ +chapentry tex-src/texinfo.tex /^ \\let\\chapentry = \\shortchapentry$/ chapfonts tex-src/texinfo.tex /^\\def\\chapfonts{%$/ +CHAPFopen tex-src/texinfo.tex /^\\def\\CHAPFopen{$/ +CHAPFplain tex-src/texinfo.tex /^\\def\\CHAPFplain{$/ chapheading tex-src/texinfo.tex /^\\def\\chapheading{\\parsearg\\chapheadingzzz}$/ chapheadingzzz tex-src/texinfo.tex /^\\def\\chapheadingzzz #1{\\chapbreak %$/ chapmacro tex-src/texinfo.tex /^\\global\\let\\chapmacro=\\chfopen$/ chapmacro tex-src/texinfo.tex /^\\global\\let\\chapmacro=\\chfplain$/ chapoddpage tex-src/texinfo.tex /^\\def\\chapoddpage{\\chappager \\ifodd\\pageno \\else \\h/ chappager tex-src/texinfo.tex /^\\def\\chappager{\\par\\vfill\\supereject}$/ +CHAPPAGodd tex-src/texinfo.tex /^\\def\\CHAPPAGodd{$/ +CHAPPAGoff tex-src/texinfo.tex /^\\def\\CHAPPAGoff{$/ +CHAPPAGon tex-src/texinfo.tex /^\\def\\CHAPPAGon{$/ +chapternofonts tex-src/texinfo.tex /^\\def\\chapternofonts{%$/ chapter tex-src/texinfo.tex /^\\let\\chapter=\\relax$/ chapter tex-src/texinfo.tex /^\\outer\\def\\chapter{\\parsearg\\chapterzzz}$/ -chapternofonts tex-src/texinfo.tex /^\\def\\chapternofonts{%$/ chapterzzz tex-src/texinfo.tex /^\\def\\chapterzzz #1{\\seccheck{chapter}%$/ -char tex-src/texinfo.tex /^\\def\\char{\\realbackslash char}$/ -char tex-src/texinfo.tex /^\\def\\char{\\realbackslash char}%$/ +CHARACTERBITS c-src/emacs/src/lisp.h 2457 +CHAR_ALT c-src/emacs/src/lisp.h 2445 +CHAR_BIT c-src/emacs/src/lisp.h 2957 +CHAR_BIT c-src/emacs/src/lisp.h 2959 +CHAR_BIT c-src/emacs/src/lisp.h 2964 +CHAR_BIT c-src/emacs/src/lisp.h 2969 +CHAR_BIT c-src/emacs/src/lisp.h 2974 +CHAR_BIT c-src/emacs/src/lisp.h 2978 +CHAR_BIT c-src/emacs/src/lisp.h 2983 char_bits c-src/emacs/src/lisp.h 2443 -char_table_specials c-src/emacs/src/lisp.h 1692 +CHAR_CLASS_MAX_LENGTH c-src/emacs/src/regex.h 593 +CHAR_CLASS_MAX_LENGTH c-src/emacs/src/regex.h 597 +CHAR_CLASS_MAX_LENGTH c-src/emacs/src/regex.h 605 +CHAR c-src/etags.c /^#define CHAR(x) ((unsigned int)(x) & (CHARS - 1))/ +CHAR_CTL c-src/emacs/src/lisp.h 2449 +CHAR_HYPER c-src/emacs/src/lisp.h 2447 +CHAR_META c-src/emacs/src/lisp.h 2450 +CHAR_MODIFIER_MASK c-src/emacs/src/lisp.h 2452 charpos c-src/emacs/src/lisp.h 2011 +CHARS c-src/etags.c 157 charset_unibyte c-src/emacs/src/regex.h 410 +CHAR_SHIFT c-src/emacs/src/lisp.h 2448 +CHAR_SUPER c-src/emacs/src/lisp.h 2446 +CHAR_TABLE_EXTRA_SLOTS c-src/emacs/src/lisp.h /^CHAR_TABLE_EXTRA_SLOTS (struct Lisp_Char_Table *ct/ +CHAR_TABLE_P c-src/emacs/src/lisp.h /^CHAR_TABLE_P (Lisp_Object a)$/ +CHAR_TABLE_REF_ASCII c-src/emacs/src/lisp.h /^CHAR_TABLE_REF_ASCII (Lisp_Object ct, ptrdiff_t id/ +CHAR_TABLE_REF c-src/emacs/src/lisp.h /^CHAR_TABLE_REF (Lisp_Object ct, int idx)$/ +CHAR_TABLE_SET c-src/emacs/src/lisp.h /^CHAR_TABLE_SET (Lisp_Object ct, int idx, Lisp_Obje/ +char_table_specials c-src/emacs/src/lisp.h 1692 +CHAR_TABLE_STANDARD_SLOTS c-src/emacs/src/lisp.h 1697 +CHARTAB_SIZE_BITS_0 c-src/emacs/src/lisp.h 1567 +CHARTAB_SIZE_BITS_1 c-src/emacs/src/lisp.h 1568 +CHARTAB_SIZE_BITS_2 c-src/emacs/src/lisp.h 1569 +CHARTAB_SIZE_BITS_3 c-src/emacs/src/lisp.h 1570 +CHARTAB_SIZE_BITS c-src/emacs/src/lisp.h 1565 +char tex-src/texinfo.tex /^\\def\\char{\\realbackslash char}%$/ +char tex-src/texinfo.tex /^\\def\\char{\\realbackslash char}$/ chartonmstr pas-src/common.pas /^function chartonmstr; (*($/ -checkQuotation php-src/lce_functions.php /^ function checkQuotation($str)$/ +CHAR_TYPE_SIZE y-src/cccp.y 87 +CHAR y-src/cccp.c 7 +CHECK_ARRAY c-src/emacs/src/lisp.h /^CHECK_ARRAY (Lisp_Object x, Lisp_Object predicate)/ +CHECK_BOOL_VECTOR c-src/emacs/src/lisp.h /^CHECK_BOOL_VECTOR (Lisp_Object x)$/ +CHECK_BUFFER c-src/emacs/src/lisp.h /^CHECK_BUFFER (Lisp_Object x)$/ +CHECK_CONS c-src/emacs/src/lisp.h /^CHECK_CONS (Lisp_Object x)$/ check_cons_list c-src/emacs/src/lisp.h /^# define check_cons_list() lisp_h_check_cons_list/ checker make-src/Makefile /^checker:$/ +CHECKFLAGS make-src/Makefile /^CHECKFLAGS=-DDEBUG -Wno-unused-function$/ checkhdr c-src/emacs/src/gmalloc.c /^checkhdr (const struct hdr *hdr)$/ checkiso html-src/software.html /^checkiso$/ +CHECK_LISP_OBJECT_TYPE c-src/emacs/src/lisp.h 571 +CHECK_LISP_OBJECT_TYPE c-src/emacs/src/lisp.h 572 +CHECK_LISP_OBJECT_TYPE c-src/emacs/src/lisp.h 579 +CHECK_LIST_CONS c-src/emacs/src/lisp.h /^# define CHECK_LIST_CONS(x, y) lisp_h_CHECK_LIST_C/ +CHECK_LIST c-src/emacs/src/lisp.h /^CHECK_LIST (Lisp_Object x)$/ +CHECK_NATNUM c-src/emacs/src/lisp.h /^CHECK_NATNUM (Lisp_Object x)$/ +CHECK_NUMBER_CAR c-src/emacs/src/lisp.h /^CHECK_NUMBER_CAR (Lisp_Object x)$/ +CHECK_NUMBER_CDR c-src/emacs/src/lisp.h /^CHECK_NUMBER_CDR (Lisp_Object x)$/ +CHECK_NUMBER_COERCE_MARKER c-src/emacs/src/lisp.h /^#define CHECK_NUMBER_COERCE_MARKER(x) \\$/ +CHECK_NUMBER c-src/emacs/src/lisp.h /^# define CHECK_NUMBER(x) lisp_h_CHECK_NUMBER (x)$/ +CHECK_NUMBER_OR_FLOAT_COERCE_MARKER c-src/emacs/src/lisp.h /^#define CHECK_NUMBER_OR_FLOAT_COERCE_MARKER(x) / +CHECK_NUMBER_OR_FLOAT c-src/emacs/src/lisp.h /^CHECK_NUMBER_OR_FLOAT (Lisp_Object x)$/ +CHECKOBJS make-src/Makefile /^CHECKOBJS=chkmalloc.o chkxm.o$/ +CHECK_PROCESS c-src/emacs/src/lisp.h /^CHECK_PROCESS (Lisp_Object x)$/ +checkQuotation php-src/lce_functions.php /^ function checkQuotation($str)$/ +CHECK_RANGED_INTEGER c-src/emacs/src/lisp.h /^#define CHECK_RANGED_INTEGER(x, lo, hi) \\$/ +CHECK_STRING_CAR c-src/emacs/src/lisp.h /^CHECK_STRING_CAR (Lisp_Object x)$/ +CHECK_SYMBOL c-src/emacs/src/lisp.h /^# define CHECK_SYMBOL(x) lisp_h_CHECK_SYMBOL (x)$/ +CHECK_TYPE c-src/emacs/src/lisp.h /^# define CHECK_TYPE(ok, predicate, x) lisp_h_CHECK/ +CHECK_TYPE_RANGED_INTEGER c-src/emacs/src/lisp.h /^#define CHECK_TYPE_RANGED_INTEGER(type, x) \\$/ +CHECK_VECTOR c-src/emacs/src/lisp.h /^CHECK_VECTOR (Lisp_Object x)$/ +CHECK_VECTOR_OR_STRING c-src/emacs/src/lisp.h /^CHECK_VECTOR_OR_STRING (Lisp_Object x)$/ +CHECK_WINDOW c-src/emacs/src/lisp.h /^CHECK_WINDOW (Lisp_Object x)$/ chfopen tex-src/texinfo.tex /^\\def\\chfopen #1#2{\\chapoddpage {\\chapfonts$/ chfplain tex-src/texinfo.tex /^\\def\\chfplain #1#2{%$/ childDidExit objc-src/Subprocess.m /^- childDidExit$/ chunks_free c-src/emacs/src/gmalloc.c 313 +_chunks_free c-src/emacs/src/gmalloc.c 376 chunks_used c-src/emacs/src/gmalloc.c 311 -cindex tex-src/texinfo.tex /^\\def\\cindex {\\cpindex}$/ +_chunks_used c-src/emacs/src/gmalloc.c 374 cindexsub tex-src/texinfo.tex /^\\def\\cindexsub {\\begingroup\\obeylines\\cindexsub}$/ cindexsub tex-src/texinfo.tex /^\\gdef\\cindexsub "#1" #2^^M{\\endgroup %$/ -cite tex-src/texinfo.tex /^\\def\\cite##1{\\realbackslash cite {##1}}$/ +cindex tex-src/texinfo.tex /^\\def\\cindex {\\cpindex}$/ +Circle.getPos lua-src/test.lua /^function Circle.getPos ()$/ cite tex-src/texinfo.tex /^\\def\\cite##1{\\realbackslash cite {##1}}%$/ +cite tex-src/texinfo.tex /^\\def\\cite##1{\\realbackslash cite {##1}}$/ cite tex-src/texinfo.tex /^\\let\\cite=\\indexdummyfont$/ cite tex-src/texinfo.tex /^\\let\\cite=\\smartitalic$/ +C_JAVA c-src/etags.c 2197 cjava c-src/etags.c 2936 -class_method ruby-src/test.rb /^ def ClassExample.class_method$/ +Cjava_entries c-src/etags.c /^Cjava_entries (FILE *inf)$/ +Cjava_help c-src/etags.c 551 +Cjava_suffixes c-src/etags.c 549 +CK_ABS_C y-src/parse.y /^#define CK_ABS_C(x) if((x)MAX_COL)/ +CK_ABS_R y-src/parse.y /^#define CK_ABS_R(x) if((x)MAX_ROW)/ +CK_REL_C y-src/parse.y /^#define CK_REL_C(x) if( ((x)>0 && MAX_COL-(x)0 && MAX_ROW-(x)/ +/dieresis ps-src/rfc1245.ps /^\/dieresis \/.notdef \/AE \/Oslash \/.notdef \/.notdef \// dignorerest c-src/etags.c 2463 direntry tex-src/texinfo.tex /^\\def\\direntry{\\begingroup\\direntryxxx}$/ direntryxxx tex-src/texinfo.tex /^\\long\\def\\direntryxxx #1\\end direntry{\\endgroup\\ig/ discard-input c-src/emacs/src/keyboard.c /^DEFUN ("discard-input", Fdiscard_input, Sdiscard_i/ discard_mouse_events c-src/emacs/src/keyboard.c /^discard_mouse_events (void)$/ -discrete_location cp-src/clheir.hpp /^ discrete_location(int xi, int yi, int zi):$/ discrete_location cp-src/clheir.hpp 56 +discrete_location cp-src/clheir.hpp /^ discrete_location(int xi, int yi, int zi):$/ display cp-src/conway.cpp /^void display(void)$/ display tex-src/texinfo.tex /^\\def\\display{\\begingroup\\inENV %This group ends at/ +DisposeANameList pas-src/common.pas /^procedure DisposeANameList( $/ +DisposeNameList pas-src/common.pas /^procedure DisposeNameList;$/ disposetextstring pas-src/common.pas /^procedure disposetextstring;(*($/ +/dmatrix ps-src/rfc1245.ps /^\/dmatrix matrix def$/ dmn tex-src/texinfo.tex /^\\def\\dmn#1{\\thinspace #1}$/ dnone c-src/etags.c 2460 +/dnormalize ps-src/rfc1245.ps /^\/dnormalize {$/ dobreak tex-src/texinfo.tex /^\\def\\dobreak#1#2{\\par\\ifdim\\lastskip<#1\\removelast/ doc c-src/emacs/src/lisp.h 1689 dochapentry tex-src/texinfo.tex /^\\def\\dochapentry#1#2{%$/ docodeindex tex-src/texinfo.tex /^\\def\\docodeindex#1{\\edef\\indexname{#1}\\parsearg\\si/ -dog c-src/h.h 81 dog cp-src/c.C 126 dog cp-src/c.C 130 -doind tex-src/texinfo.tex /^\\def\\doind #1#2{%$/ +dog c-src/h.h 81 doindex tex-src/texinfo.tex /^\\def\\doindex#1{\\edef\\indexname{#1}\\parsearg\\single/ +doind tex-src/texinfo.tex /^\\def\\doind #1#2{%$/ donoderef tex-src/texinfo.tex /^\\def\\donoderef{\\ifx\\lastnode\\relax\\else$/ dontindex tex-src/texinfo.tex /^\\def\\dontindex #1{}$/ dopageno tex-src/texinfo.tex /^\\def\\dopageno#1{{\\rm #1}}$/ @@ -2389,11 +1027,13 @@ doprintindex tex-src/texinfo.tex /^\\def\\doprintindex#1{%$/ dosecentry tex-src/texinfo.tex /^\\def\\dosecentry#1#2{%$/ dosetq tex-src/texinfo.tex /^\\def\\dosetq #1#2{{\\let\\folio=0 \\turnoffactive%$/ doshortpageno tex-src/texinfo.tex /^\\def\\doshortpageno#1{{\\rm #1}}$/ +DOS_NT c-src/etags.c 117 +DOS_NT c-src/etags.c 118 dosubind tex-src/texinfo.tex /^\\def\\dosubind #1#2#3{%$/ dosubsecentry tex-src/texinfo.tex /^\\def\\dosubsecentry#1#2{%$/ dosubsubsecentry tex-src/texinfo.tex /^\\def\\dosubsubsecentry#1#2{%$/ -dotfill tex-src/texinfo.tex /^ \\null\\nobreak\\indexdotfill % Have leaders before/ dotfill tex-src/texinfo.tex /^\\noindent\\hskip\\secondaryindent\\hbox{#1}\\indexdotf/ +dotfill tex-src/texinfo.tex /^ \\null\\nobreak\\indexdotfill % Have leaders before/ dots tex-src/texinfo.tex /^\\def\\dots{$\\ldots$}$/ dots tex-src/texinfo.tex /^\\def\\dots{\\realbackslash dots }%$/ dots tex-src/texinfo.tex /^\\def\\dots{\\realbackslash dots}$/ @@ -2401,8 +1041,11 @@ dots tex-src/texinfo.tex /^\\let\\dots=\\indexdummydots$/ dots tex-src/texinfo.tex /^\\let\\dots=\\ptexdots$/ double_click_count c-src/emacs/src/keyboard.c 5222 doublecolumnout tex-src/texinfo.tex /^\\def\\doublecolumnout{\\splittopskip=\\topskip \\split/ +/dpi ps-src/rfc1245.ps /^\/dpi 72 0 dmatrix defaultmatrix dtransform$/ +/D ps-src/rfc1245.ps /^\/D {curveto} bind def$/ drag_n_drop_syms c-src/emacs/src/keyboard.c 4629 dribble c-src/emacs/src/keyboard.c 236 +D ruby-src/test1.ru /^class ::D; end$/ dsharpseen c-src/etags.c 2461 dummies tex-src/texinfo.tex /^{\\indexdummies % Must do this here, since \\bf, etc/ dummy1 cp-src/burton.cpp /^::dummy::dummy test::dummy1(void)$/ @@ -2421,45 +1064,79 @@ dummyfont tex-src/texinfo.tex /^\\let\\r=\\indexdummyfont$/ dummyfont tex-src/texinfo.tex /^\\let\\samp=\\indexdummyfont$/ dummyfont tex-src/texinfo.tex /^\\let\\sc=\\indexdummyfont$/ dummyfont tex-src/texinfo.tex /^\\let\\strong=\\indexdummyfont$/ -dummyfont tex-src/texinfo.tex /^\\let\\t=\\indexdummyfont$/ dummyfont tex-src/texinfo.tex /^\\let\\tclose=\\indexdummyfont$/ +dummyfont tex-src/texinfo.tex /^\\let\\t=\\indexdummyfont$/ dummyfont tex-src/texinfo.tex /^\\let\\var=\\indexdummyfont$/ dummyfont tex-src/texinfo.tex /^\\let\\w=\\indexdummyfont$/ dummytex tex-src/texinfo.tex /^\\let\\TeX=\\indexdummytex$/ +DUMPED c-src/emacs/src/gmalloc.c 80 dump pyt-src/server.py /^ def dump(self, folded):$/ eabs c-src/emacs/src/lisp.h /^#define eabs(x) ((x) < 0 ? -(x) : (x))$/ +Ealphaenumerate tex-src/texinfo.tex /^\\def\\Ealphaenumerate{\\Eenumerate}$/ eassert c-src/emacs/src/lisp.h /^# define eassert(cond) \\$/ eassert c-src/emacs/src/lisp.h /^# define eassert(cond) ((void) (false && (cond))) / eassume c-src/emacs/src/lisp.h /^# define eassume(cond) \\$/ eassume c-src/emacs/src/lisp.h /^# define eassume(cond) assume (cond)$/ eax c-src/sysdep.h 31 eax c-src/sysdep.h 33 +Ecapsenumerate tex-src/texinfo.tex /^\\def\\Ecapsenumerate{\\Eenumerate}$/ +Ecartouche tex-src/texinfo.tex /^\\def\\Ecartouche{%$/ echo_add_key c-src/emacs/src/keyboard.c /^echo_add_key (Lisp_Object c)$/ echo_char c-src/emacs/src/keyboard.c /^echo_char (Lisp_Object c)$/ echo_dash c-src/emacs/src/keyboard.c /^echo_dash (void)$/ +echoing c-src/emacs/src/keyboard.c 154 echo_kboard c-src/emacs/src/keyboard.c 166 echo_keystrokes_p c-src/emacs/src/keyboard.c /^echo_keystrokes_p (void)$/ echo_length c-src/emacs/src/keyboard.c /^echo_length (void)$/ echo_message_buffer c-src/emacs/src/keyboard.c 171 echo_now c-src/emacs/src/keyboard.c /^echo_now (void)$/ echo_truncate c-src/emacs/src/keyboard.c /^echo_truncate (ptrdiff_t nchars)$/ -echoing c-src/emacs/src/keyboard.c 154 +Edescription tex-src/texinfo.tex /^\\def\\Edescription{\\Etable}% Necessary kludge.$/ +%ediff make-src/Makefile /^%ediff: ETAGS% ETAGS ${infiles}$/ +Edisplay tex-src/texinfo.tex /^\\def\\Edisplay{\\endgroup\\afterenvbreak}%$/ editItem pyt-src/server.py /^ def editItem(self):$/ editsite pyt-src/server.py /^ def editsite(self, site):$/ edituser pyt-src/server.py /^ def edituser(self, user):$/ +Eexample tex-src/texinfo.tex /^\\def\\Eexample{\\Elisp}$/ +Eflushleft tex-src/texinfo.tex /^\\def\\Eflushleft{\\endgroup\\afterenvbreak}%$/ +Eflushright tex-src/texinfo.tex /^\\def\\Eflushright{\\endgroup\\afterenvbreak}%$/ +Eformat tex-src/texinfo.tex /^\\def\\Eformat{\\endgroup\\afterenvbreak}$/ +Eftable tex-src/texinfo.tex /^\\def\\Eftable{\\endgraf\\endgroup\\afterenvbreak}%$/ egetenv c-src/emacs/src/lisp.h /^egetenv (const char *var)$/ +Egroup tex-src/texinfo.tex /^ \\def\\Egroup{\\egroup\\endgroup}%$/ +Eifclear tex-src/texinfo.tex /^\\def\\Eifclear{}$/ +Eifset tex-src/texinfo.tex /^\\def\\Eifset{}$/ +Eiftex tex-src/texinfo.tex /^\\def\\Eiftex{}$/ +ELEM_I c-src/h.h 3 +Elisp tex-src/texinfo.tex /^\\def\\Elisp{\\endgroup\\afterenvbreak}%$/ +ELSRC make-src/Makefile /^ELSRC=TAGTEST.EL emacs\/lisp\/progmodes\/etags.el$/ emacs_abort c-src/emacs/src/lisp.h /^extern _Noreturn void emacs_abort (void) NO_INLINE/ +EMACS_INT c-src/emacs/src/lisp.h 103 +EMACS_INT c-src/emacs/src/lisp.h 91 +EMACS_INT c-src/emacs/src/lisp.h 96 +EMACS_INT_MAX c-src/emacs/src/lisp.h 105 +EMACS_INT_MAX c-src/emacs/src/lisp.h 93 +EMACS_INT_MAX c-src/emacs/src/lisp.h 98 +EMACS_LISP_H c-src/emacs/src/lisp.h 22 +EMACS_NAME c-src/etags.c 786 +EMACS_UINT c-src/emacs/src/lisp.h 104 +EMACS_UINT c-src/emacs/src/lisp.h 92 +EMACS_UINT c-src/emacs/src/lisp.h 97 emph tex-src/texinfo.tex /^\\def\\emph##1{\\realbackslash emph {##1}}$/ emph tex-src/texinfo.tex /^\\let\\emph=\\indexdummyfont$/ emph tex-src/texinfo.tex /^\\let\\emph=\\smartitalic$/ +EmptyNmStr pas-src/common.pas /^function EmptyNmStr(* : NameString*);$/ +/ENDBITMAP ps-src/rfc1245.ps /^\/ENDBITMAP {$/ end c-src/emacs/src/keyboard.c 8753 end c-src/emacs/src/lisp.h 2039 end c-src/emacs/src/regex.h 432 -end tex-src/texinfo.tex /^\\def\\end{\\parsearg\\endxxx}$/ enddoublecolumns tex-src/texinfo.tex /^\\def\\enddoublecolumns{\\output={\\balancecolumns}\\ej/ +/ENDPRINTCODE ps-src/rfc1245.ps /^\/ENDPRINTCODE {$/ +end tex-src/texinfo.tex /^\\def\\end{\\parsearg\\endxxx}$/ endtoken c-src/etags.c /^#define endtoken(c) (_etk[CHAR (c)]) \/* c ends tok/ endxxx tex-src/texinfo.tex /^\\def\\endxxx #1{%$/ enter_critical_section c-src/h.h 116 +ENTRY c-src/sysdep.h /^#define ENTRY(name) \\$/ entry perl-src/htlmify-cystic 218 entry perl-src/htlmify-cystic 234 entry perl-src/htlmify-cystic 245 @@ -2469,42 +1146,69 @@ entry perl-src/htlmify-cystic 276 entry perl-src/htlmify-cystic 281 entry perl-src/htlmify-cystic 296 entry tex-src/texinfo.tex /^\\def\\entry #1#2{\\begingroup$/ +ENUM_BF c-src/emacs/src/lisp.h /^#define ENUM_BF(TYPE) enum TYPE$/ +ENUM_BF c-src/emacs/src/lisp.h /^#define ENUM_BF(TYPE) unsigned int$/ enumerate tex-src/texinfo.tex /^\\def\\enumerate{\\parsearg\\enumeratezzz}$/ enumeratey tex-src/texinfo.tex /^\\def\\enumeratey #1 #2\\endenumeratey{%$/ enumeratezzz tex-src/texinfo.tex /^\\def\\enumeratezzz #1{\\enumeratey #1 \\endenumerate/ +ENVcheck tex-src/texinfo.tex /^\\def\\ENVcheck{%$/ +Environment tex-src/gzip.texi /^@node Environment, Tapes, Advanced usage, Top$/ +/E ps-src/rfc1245.ps /^\/E {lineto} bind def$/ +EQ c-src/emacs/src/lisp.h /^# define EQ(x, y) lisp_h_EQ (x, y)$/ equalsKey objcpp-src/SimpleCalc.M /^- equalsKey:sender$/ +EQUAL y-src/cccp.c 12 equiv tex-src/texinfo.tex /^\\def\\equiv{\\leavevmode\\lower.1ex\\hbox to 1em{\\hfil/ equiv tex-src/texinfo.tex /^\\def\\equiv{\\realbackslash equiv}$/ +Equotation tex-src/texinfo.tex /^\\def\\Equotation{\\par\\endgroup\\afterenvbreak}%$/ erlang_atom c-src/etags.c /^erlang_atom (char *s)$/ erlang_attribute c-src/etags.c /^erlang_attribute (char *s)$/ erlang_func c-src/etags.c /^erlang_func (char *s, char *last)$/ +Erlang_functions c-src/etags.c /^Erlang_functions (FILE *inf)$/ +Erlang_help c-src/etags.c 567 +Erlang_suffixes c-src/etags.c 565 +ERLSRC make-src/Makefile /^ERLSRC=gs_dialog.erl lines.erl lists.erl$/ error c-src/emacs/src/lisp.h /^extern _Noreturn void error (const char *, ...) AT/ error c-src/etags.c /^error (const char *format, ...)$/ error c-src/etags.c /^static void error (const char *, ...) ATTRIBUTE_FO/ -error tex-src/texinfo.tex /^\\def\\error{\\leavevmode\\lower.7ex\\copy\\errorbox}$/ -error y-src/cccp.y /^error (msg)$/ errorE tex-src/texinfo.tex /^\\def\\errorE#1{$/ +Error_Information/t ada-src/2ataspri.ads /^ type Error_Information is new Interfaces.C.POSI/ error_signaled c-src/etags.c 264 +error tex-src/texinfo.tex /^\\def\\error{\\leavevmode\\lower.7ex\\copy\\errorbox}$/ +ERROR y-src/cccp.c 9 +error y-src/cccp.y /^error (msg)$/ +ERROR y-src/parse.y 304 +ErrStrToNmStr pas-src/common.pas /^function ErrStrToNmStr;(*($/ +Esmallexample tex-src/texinfo.tex /^\\def\\Esmallexample{\\Elisp}$/ +Esmallexample tex-src/texinfo.tex /^\\global\\def\\Esmallexample{\\Esmalllisp}$/ +Esmalllisp tex-src/texinfo.tex /^\\def\\Esmalllisp{\\endgroup\\afterenvbreak}%$/ +Etable tex-src/texinfo.tex /^\\def\\Etable{\\endgraf\\endgroup\\afterenvbreak}%$/ +Etable tex-src/texinfo.tex /^\\let\\Etable=\\relax}}$/ +ETAGS12 make-src/Makefile /^ETAGS12: etags12 ${infiles}$/ +ETAGS13 ETAGS14 ETAGS15 make-src/Makefile /^ETAGS13 ETAGS14 ETAGS15: etags% ${infiles}$/ +etags.1.man make-src/Makefile /^etags.1.man: etags.1$/ etags el-src/emacs/lisp/progmodes/etags.el /^(defgroup etags nil "Tags tables."$/ -etags html-src/software.html /^Etags$/ -etags make-src/Makefile /^etags: etags.c ${OBJS}$/ -etags--xref-find-definitions el-src/emacs/lisp/progmodes/etags.el /^(defun etags--xref-find-definitions (pattern &opti/ -etags--xref-limit el-src/emacs/lisp/progmodes/etags.el /^(defconst etags--xref-limit 1000)$/ etags-file-of-tag el-src/emacs/lisp/progmodes/etags.el /^(defun etags-file-of-tag (&optional relative) ; Do/ +etags_getcwd c-src/etags.c /^etags_getcwd (void)$/ etags-goto-tag-location el-src/emacs/lisp/progmodes/etags.el /^(defun etags-goto-tag-location (tag-info)$/ +etags html-src/software.html /^Etags$/ etags-list-tags el-src/emacs/lisp/progmodes/etags.el /^(defun etags-list-tags (file) ; Doc string?$/ +etags make-src/Makefile /^etags: etags.c ${OBJS}$/ +ETAGS make-src/Makefile /^ETAGS: FRC etags ${infiles}$/ +ETAGS% make-src/Makefile /^ETAGS%: FRC etags% ${infiles}$/ etags-recognize-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun etags-recognize-tags-table ()$/ etags-snarf-tag el-src/emacs/lisp/progmodes/etags.el /^(defun etags-snarf-tag (&optional use-explicit) ; / -etags-tags-apropos el-src/emacs/lisp/progmodes/etags.el /^(defun etags-tags-apropos (string) ; Doc string?$/ etags-tags-apropos-additional el-src/emacs/lisp/progmodes/etags.el /^(defun etags-tags-apropos-additional (regexp)$/ +etags-tags-apropos el-src/emacs/lisp/progmodes/etags.el /^(defun etags-tags-apropos (string) ; Doc string?$/ etags-tags-completion-table el-src/emacs/lisp/progmodes/etags.el /^(defun etags-tags-completion-table () ; Doc string/ etags-tags-included-tables el-src/emacs/lisp/progmodes/etags.el /^(defun etags-tags-included-tables () ; Doc string?/ etags-tags-table-files el-src/emacs/lisp/progmodes/etags.el /^(defun etags-tags-table-files () ; Doc string?$/ etags-verify-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun etags-verify-tags-table ()$/ -etags-xref-find el-src/emacs/lisp/progmodes/etags.el /^(defun etags-xref-find (action id)$/ +etags--xref-find-definitions el-src/emacs/lisp/progmodes/etags.el /^(defun etags--xref-find-definitions (pattern &opti/ etags-xref-find-definitions-tag-order el-src/emacs/lisp/progmodes/etags.el /^(defvar etags-xref-find-definitions-tag-order '(ta/ -etags.1.man make-src/Makefile /^etags.1.man: etags.1$/ -etags_getcwd c-src/etags.c /^etags_getcwd (void)$/ +etags-xref-find el-src/emacs/lisp/progmodes/etags.el /^(defun etags-xref-find (action id)$/ +etags--xref-limit el-src/emacs/lisp/progmodes/etags.el /^(defconst etags--xref-limit 1000)$/ +Etex tex-src/texinfo.tex /^\\let\\Etex=\\endgroup}$/ +Etitlepage tex-src/texinfo.tex /^\\def\\Etitlepage{%$/ eval_dyn c-src/emacs/src/keyboard.c /^eval_dyn (Lisp_Object form)$/ evenfooting tex-src/texinfo.tex /^\\def\\evenfooting{\\parsearg\\evenfootingxxx}$/ evenfootingxxx tex-src/texinfo.tex /^\\gdef\\evenfootingxxx #1{\\evenfootingyyy #1@|@|@|@|/ @@ -2513,8 +1217,8 @@ evenheading tex-src/texinfo.tex /^\\def\\evenheading{\\parsearg\\evenheadingxxx} evenheadingxxx tex-src/texinfo.tex /^\\gdef\\evenheadingxxx #1{\\evenheadingyyy #1@|@|@|@|/ evenheadingyyy tex-src/texinfo.tex /^\\gdef\\evenheadingyyy #1@|#2@|#3@|#4\\finish{%$/ event-convert-list c-src/emacs/src/keyboard.c /^DEFUN ("event-convert-list", Fevent_convert_list, / -event-symbol-parse-modifiers c-src/emacs/src/keyboard.c /^DEFUN ("internal-event-symbol-parse-modifiers", Fe/ event_head c-src/emacs/src/keyboard.c 11021 +event-symbol-parse-modifiers c-src/emacs/src/keyboard.c /^DEFUN ("internal-event-symbol-parse-modifiers", Fe/ event_to_kboard c-src/emacs/src/keyboard.c /^event_to_kboard (struct input_event *event)$/ everyfooting tex-src/texinfo.tex /^\\def\\everyfooting{\\parsearg\\everyfootingxxx}$/ everyfootingxxx tex-src/texinfo.tex /^\\gdef\\everyfootingxxx #1{\\everyfootingyyy #1@|@|@|/ @@ -2522,24 +1226,24 @@ everyfootingyyy tex-src/texinfo.tex /^\\gdef\\everyfootingyyy #1@|#2@|#3@|#4\\fi everyheading tex-src/texinfo.tex /^\\def\\everyheading{\\parsearg\\everyheadingxxx}$/ everyheadingxxx tex-src/texinfo.tex /^\\gdef\\everyheadingxxx #1{\\everyheadingyyy #1@|@|@|/ everyheadingyyy tex-src/texinfo.tex /^\\gdef\\everyheadingyyy #1@|#2@|#3@|#4\\finish{%$/ +Evtable tex-src/texinfo.tex /^\\def\\Evtable{\\endgraf\\endgroup\\afterenvbreak}%$/ ewbot tex-src/texinfo.tex /^\\def\\ewbot{\\vrule height0pt depth\\cornerthick widt/ ewtop tex-src/texinfo.tex /^\\def\\ewtop{\\vrule height\\cornerthick depth0pt widt/ exact c-src/emacs/src/gmalloc.c 200 example tex-src/texinfo.tex /^\\let\\example=\\lisp$/ +/exclamdown ps-src/rfc1245.ps /^\/exclamdown \/logicalnot \/.notdef \/florin \/.notdef / exdent tex-src/texinfo.tex /^\\def\\exdent{\\parsearg\\exdentyyy}$/ exdent tex-src/texinfo.tex /^\\let\\exdent=\\nofillexdent$/ exdentyyy tex-src/texinfo.tex /^\\def\\exdentyyy #1{{\\hfil\\break\\hbox{\\kern -\\exdent/ execute cp-src/c.C /^ void execute(CPluginCSCState& p, int w, in/ +EXFUN c-src/emacs/src/lisp.h /^#define EXFUN(fnname, maxargs) \\$/ +exit_critical_to_previous c-src/h.h 117 exit c-src/exit.c /^DEFUN(exit, (status), int status)$/ exit c-src/exit.strange_suffix /^DEFUN(exit, (status), int status)$/ +Exit_LL_Task/p ada-src/2ataspri.adb /^ procedure Exit_LL_Task is$/ +Exit_LL_Task/p ada-src/2ataspri.ads /^ procedure Exit_LL_Task;$/ exit-recursive-edit c-src/emacs/src/keyboard.c /^DEFUN ("exit-recursive-edit", Fexit_recursive_edit/ -exit_critical_to_previous c-src/h.h 117 -exp y-src/atest.y 2 -exp y-src/cccp.y 156 -exp y-src/cccp.y 185 -exp y-src/parse.y 95 exp1 y-src/cccp.y 148 -exp_list y-src/parse.y 263 expand-abbrev c-src/abbrev.c /^DEFUN ("expand-abbrev", Fexpand_abbrev, Sexpand_ab/ expandafter tex-src/texinfo.tex /^\\expandafter\\let\\expandafter\\synindexfoo\\expandaft/ expandmng prol-src/natded.prolog /^expandmng(var(V),var(V)).$/ @@ -2549,24 +1253,18 @@ expandsyn prol-src/natded.prolog /^expandsyn(Syn,Syn):-$/ expansion tex-src/texinfo.tex /^\\def\\expansion{\\leavevmode\\raise.1ex\\hbox to 1em{\\/ expansion tex-src/texinfo.tex /^\\def\\expansion{\\realbackslash expansion}$/ explicitly-quoted-pending-delete-mode el-src/TAGTEST.EL /^(defalias (quote explicitly-quoted-pending-delete-/ +exp_list y-src/parse.y 263 expression_value y-src/cccp.y 68 +exp y-src/atest.y 2 +exp y-src/cccp.y 156 +exp y-src/cccp.y 185 +exp y-src/parse.y 95 +EXTAGS make-src/Makefile /^EXTAGS: extags ${infiles} Makefile$/ +EXTERNALLY_VISIBLE c-src/emacs/src/keyboard.c 3497 +EXTERNALLY_VISIBLE c-src/emacs/src/keyboard.c 4372 +ExtractCommentInfo pas-src/common.pas /^procedure ExtractCommentInfo; (*($/ extras c-src/emacs/src/lisp.h 1603 extvar c-src/h.h 109 -f c-src/c.c /^T f(){if(x){}$/ -f c-src/h.h 89 -f c.c /^int f$/ -f c.c 145 -f c.c 156 -f c.c 168 -f cp-src/c.C /^ void f() {}$/ -f cp-src/c.C /^ int f(){return 0;}; \/\/ first comment$/ -f cp-src/c.C /^A > A,int>::f(A* x) {}$/ -f cp-src/c.C /^A* f() {}$/ -f cp-src/c.C /^class B { void f() {} };$/ -f cp-src/c.C /^int A::f(A* x) {}$/ -f cp-src/c.C /^int f(A x) {}$/ -f cp-src/fail.C /^ int f() { return 5; }$/ -f cp-src/fail.C /^int A::B::f() { return 2; }$/ f1 c.c /^ f1 () { \/* Do something. *\/; }$/ f1 perl-src/kai-test.pl /^sub f1 {$/ f2 c.c /^void f2 () { \/* Do something. *\/; }$/ @@ -2576,39 +1274,92 @@ f4 perl-src/kai-test.pl /^sub Bar::f4 {$/ f5 perl-src/kai-test.pl /^sub f5 {$/ f6 perl-src/kai-test.pl /^sub f6 {$/ f7 perl-src/kai-test.pl /^sub f7 {$/ -fast_string_match_ignore_case c-src/emacs/src/lisp.h /^fast_string_match_ignore_case (Lisp_Object regexp,/ +Fabbrev_expansion c-src/abbrev.c /^DEFUN ("abbrev-expansion", Fabbrev_expansion, Sabb/ +Fabbrev_symbol c-src/abbrev.c /^DEFUN ("abbrev-symbol", Fabbrev_symbol, Sabbrev_sy/ +Fabort_recursive_edit c-src/emacs/src/keyboard.c /^DEFUN ("abort-recursive-edit", Fabort_recursive_ed/ +=/f ada-src/etags-test-for.ada /^ function "=" (L, R : System.Address) return Boo/ +Fails_t c-src/h.h 5 +/fakecolorsetup ps-src/rfc1245.ps /^\/fakecolorsetup {$/ +FASTCFLAGS make-src/Makefile /^FASTCFLAGS=-O3 -finline-functions -ffast-math -fun/ +FASTCFLAGSWARN make-src/Makefile /^FASTCFLAGSWARN=${WARNINGS} -Werror ${FASTCFLAGS}$/ fastctags make-src/Makefile /^fastctags:$/ fastetags make-src/Makefile /^fastetags:$/ -fastmap c-src/emacs/src/regex.h 355 fastmap_accurate c-src/emacs/src/regex.h 383 -fatal c-src/etags.c /^fatal (const char *s1, const char *s2)$/ +fastmap c-src/emacs/src/regex.h 355 +fast_string_match_ignore_case c-src/emacs/src/lisp.h /^fast_string_match_ignore_case (Lisp_Object regexp,/ fatala c.c /^void fatala () __attribute__ ((noreturn));$/ +fatal c-src/etags.c /^fatal (const char *s1, const char *s2)$/ +f c.c 145 +f c.c 156 +f c.c 168 +f c.c /^int f$/ +Fclear_abbrev_table c-src/abbrev.c /^DEFUN ("clear-abbrev-table", Fclear_abbrev_table, / +Fclear_this_command_keys c-src/emacs/src/keyboard.c /^DEFUN ("clear-this-command-keys", Fclear_this_comm/ +Fcommand_error_default_function c-src/emacs/src/keyboard.c /^DEFUN ("command-error-default-function", Fcommand_/ fconst forth-src/test-forth.fth /^3.1415e fconstant fconst$/ -fdHandler objc-src/Subprocess.m /^- fdHandler:(int)theFd$/ -fdHandler objc-src/Subprocess.m /^fdHandler (int theFd, id self)$/ +f cp-src/c.C /^A > A,int>::f(A* x) {}$/ +f cp-src/c.C /^A* f() {}$/ +f cp-src/c.C /^class B { void f() {} };$/ +f cp-src/c.C /^int A::f(A* x) {}$/ +f cp-src/c.C /^int f(A x) {}$/ +f cp-src/c.C /^ int f(){return 0;}; \/\/ first comment$/ +f cp-src/c.C /^ void f() {}$/ +f cp-src/fail.C /^int A::B::f() { return 2; }$/ +f cp-src/fail.C /^ int f() { return 5; }$/ +f c-src/c.c /^T f(){if(x){}$/ +f c-src/h.h 89 +Fcurrent_idle_time c-src/emacs/src/keyboard.c /^DEFUN ("current-idle-time", Fcurrent_idle_time, Sc/ +Fcurrent_input_mode c-src/emacs/src/keyboard.c /^DEFUN ("current-input-mode", Fcurrent_input_mode, / +Fdefine_abbrev c-src/abbrev.c /^DEFUN ("define-abbrev", Fdefine_abbrev, Sdefine_ab/ +Fdefine_abbrev_table c-src/abbrev.c /^DEFUN ("define-abbrev-table", Fdefine_abbrev_table/ +Fdefine_global_abbrev c-src/abbrev.c /^DEFUN ("define-global-abbrev", Fdefine_global_abbr/ +Fdefine_mode_abbrev c-src/abbrev.c /^DEFUN ("define-mode-abbrev", Fdefine_mode_abbrev, / fdefunkey c-src/etags.c 2409 fdefunname c-src/etags.c 2410 fdesc c-src/etags.c 201 fdesc c-src/etags.c 212 +fdHandler objc-src/Subprocess.m /^- fdHandler:(int)theFd$/ +fdHandler objc-src/Subprocess.m /^fdHandler (int theFd, id self)$/ +Fdiscard_input c-src/emacs/src/keyboard.c /^DEFUN ("discard-input", Fdiscard_input, Sdiscard_i/ fdp c-src/etags.c 217 +Fevent_convert_list c-src/emacs/src/keyboard.c /^DEFUN ("event-convert-list", Fevent_convert_list, / +Fevent_symbol_parse_modifiers c-src/emacs/src/keyboard.c /^DEFUN ("internal-event-symbol-parse-modifiers", Fe/ +Fexit_recursive_edit c-src/emacs/src/keyboard.c /^DEFUN ("exit-recursive-edit", Fexit_recursive_edit/ +Fexpand_abbrev c-src/abbrev.c /^DEFUN ("expand-abbrev", Fexpand_abbrev, Sexpand_ab/ ff cp-src/c.C /^ int ff(){return 1;};$/ +F_getit c-src/etags.c /^F_getit (FILE *inf)$/ +>field1 forth-src/test-forth.fth /^ 9 field >field1$/ +>field2 forth-src/test-forth.fth /^ 5 field >field2$/ field_of_play cp-src/conway.cpp 18 fignore c-src/etags.c 2416 -file tex-src/texinfo.tex /^\\def\\file##1{\\realbackslash file {##1}}$/ -file tex-src/texinfo.tex /^\\def\\file##1{\\realbackslash file {##1}}%$/ -file tex-src/texinfo.tex /^\\let\\file=\\indexdummyfont$/ -file tex-src/texinfo.tex /^\\let\\file=\\samp$/ -file-of-tag el-src/emacs/lisp/progmodes/etags.el /^(defun file-of-tag (&optional relative)$/ -file-of-tag-function el-src/emacs/lisp/progmodes/etags.el /^(defvar file-of-tag-function nil$/ -fileJoin php-src/lce_functions.php /^ function fileJoin()$/ file_end perl-src/htlmify-cystic /^sub file_end ()$/ file_index perl-src/htlmify-cystic 33 -file_tocs perl-src/htlmify-cystic 30 +fileJoin php-src/lce_functions.php /^ function fileJoin()$/ filename_is_absolute c-src/etags.c /^filename_is_absolute (char *fn)$/ filenames c-src/etags.c 196 +file-of-tag el-src/emacs/lisp/progmodes/etags.el /^(defun file-of-tag (&optional relative)$/ +file-of-tag-function el-src/emacs/lisp/progmodes/etags.el /^(defvar file-of-tag-function nil$/ +file tex-src/texinfo.tex /^\\def\\file##1{\\realbackslash file {##1}}%$/ +file tex-src/texinfo.tex /^\\def\\file##1{\\realbackslash file {##1}}$/ +file tex-src/texinfo.tex /^\\let\\file=\\indexdummyfont$/ +file tex-src/texinfo.tex /^\\let\\file=\\samp$/ +file_tocs perl-src/htlmify-cystic 30 +/fillprocs ps-src/rfc1245.ps /^\/fillprocs 32 array def$/ +FILTER make-src/Makefile /^FILTER=grep -v '\\.[Cchefy][lor]*,[1-9][0-9]*' || t/ +FINAL_FREE_BLOCKS c-src/emacs/src/gmalloc.c 135 +Finalize_Cond/p ada-src/2ataspri.adb /^ procedure Finalize_Cond (Cond : in out Conditio/ +Finalize_Cond/p ada-src/2ataspri.ads /^ procedure Finalize_Cond (Cond : in out Conditio/ +Finalize_Lock/p ada-src/2ataspri.adb /^ procedure Finalize_Lock (L : in out Lock) is$/ +Finalize_Lock/p ada-src/2ataspri.ads /^ procedure Finalize_Lock (L : in out Lock);$/ +FINALIZERP c-src/emacs/src/lisp.h /^FINALIZERP (Lisp_Object x)$/ +Finalize_TAS_Cell/p ada-src/2ataspri.adb /^ procedure Finalize_TAS_Cell (Cell : in out TAS_/ +Finalize_TAS_Cell/p ada-src/2ataspri.ads /^ procedure Finalize_TAS_Cell (Cell : in out TA/ finalout tex-src/texinfo.tex /^\\def\\finalout{\\overfullrule=0pt}$/ -find-tag el-src/emacs/lisp/progmodes/etags.el /^(defun find-tag (tagname &optional next-p regexp-p/ +findcats prol-src/natded.prolog /^findcats([],Left,Left).$/ +find_entries c-src/etags.c /^find_entries (FILE *inf)$/ +findex tex-src/texinfo.tex /^\\def\\findex {\\fnindex}$/ find-tag-default-function el-src/emacs/lisp/progmodes/etags.el /^(defcustom find-tag-default-function nil$/ +find-tag el-src/emacs/lisp/progmodes/etags.el /^(defun find-tag (tagname &optional next-p regexp-p/ find-tag-history el-src/emacs/lisp/progmodes/etags.el /^(defvar find-tag-history nil) ; Doc string?$/ find-tag-hook el-src/emacs/lisp/progmodes/etags.el /^(defcustom find-tag-hook nil$/ find-tag-in-order el-src/emacs/lisp/progmodes/etags.el /^(defun find-tag-in-order (pattern$/ @@ -2626,26 +1377,44 @@ find-tag-regexp-tag-order el-src/emacs/lisp/progmodes/etags.el /^(defvar find-ta find-tag-search-function el-src/emacs/lisp/progmodes/etags.el /^(defvar find-tag-search-function nil$/ find-tag-tag el-src/emacs/lisp/progmodes/etags.el /^(defun find-tag-tag (string)$/ find-tag-tag-order el-src/emacs/lisp/progmodes/etags.el /^(defvar find-tag-tag-order nil$/ -find_entries c-src/etags.c /^find_entries (FILE *inf)$/ find_user_signal_name c-src/emacs/src/keyboard.c /^find_user_signal_name (int sig)$/ -findcats prol-src/natded.prolog /^findcats([],Left,Left).$/ -findex tex-src/texinfo.tex /^\\def\\findex {\\fnindex}$/ finish_appendices perl-src/htlmify-cystic /^sub finish_appendices ()$/ finish_sections perl-src/htlmify-cystic /^sub finish_sections ()$/ finish_subsections perl-src/htlmify-cystic /^sub finish_subsections ()$/ finish_subsubsections perl-src/htlmify-cystic /^sub finish_subsubsections ()$/ finishtitlepage tex-src/texinfo.tex /^\\def\\finishtitlepage{%$/ finlist c-src/etags.c 2414 +Finput_pending_p c-src/emacs/src/keyboard.c /^DEFUN ("input-pending-p", Finput_pending_p, Sinput/ +Finsert_abbrev_table_description c-src/abbrev.c /^DEFUN ("insert-abbrev-table-description", Finsert_/ +First100Chars pas-src/common.pas /^procedure First100Chars; (*($/ first c-src/emacs/src/gmalloc.c 151 first tex-src/texinfo.tex /^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/ fitchtreelist prol-src/natded.prolog /^fitchtreelist([]).$/ +FIXNUM_BITS c-src/emacs/src/lisp.h 252 +FIXNUM_OVERFLOW_P c-src/emacs/src/lisp.h /^#define FIXNUM_OVERFLOW_P(i) \\$/ +FIXNUM_OVERFLOW_P c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (EQ, bool, (Lisp_Object x, Lisp_O/ fixup_locale c-src/emacs/src/lisp.h /^INLINE void fixup_locale (void) {}$/ -flag c-src/getopt.h 83 flag2str pyt-src/server.py /^def flag2str(value, string):$/ +flag c-src/getopt.h 83 flistseen c-src/etags.c 2415 +FLOATP c-src/emacs/src/lisp.h /^# define FLOATP(x) lisp_h_FLOATP (x)$/ +FLOAT_TO_STRING_BUFSIZE c-src/emacs/src/lisp.h 3927 +/fl ps-src/rfc1245.ps /^\/fl { $/ flushcr tex-src/texinfo.tex /^\\def\\flushcr{\\ifx\\par\\lisppar \\def\\next##1{}\\else / flushleft tex-src/texinfo.tex /^\\def\\flushleft{%$/ flushright tex-src/texinfo.tex /^\\def\\flushright{%$/ +Fmake_abbrev_table c-src/abbrev.c /^DEFUN ("make-abbrev-table", Fmake_abbrev_table, Sm/ +/FMBEGINEPSF ps-src/rfc1245.ps /^\/FMBEGINEPSF { $/ +/FMBEGINPAGE ps-src/rfc1245.ps /^\/FMBEGINPAGE { $/ +/Fmcc ps-src/rfc1245.ps /^\/Fmcc {$/ +/FMDEFINEFONT ps-src/rfc1245.ps /^\/FMDEFINEFONT { $/ +/FMDOCUMENT ps-src/rfc1245.ps /^\/FMDOCUMENT { $/ +/FMENDEPSF ps-src/rfc1245.ps /^\/FMENDEPSF {$/ +/FMENDPAGE ps-src/rfc1245.ps /^\/FMENDPAGE {$/ +/FMLOCAL ps-src/rfc1245.ps /^\/FMLOCAL {$/ +/FMNORMALIZEGRAPHICS ps-src/rfc1245.ps /^\/FMNORMALIZEGRAPHICS { $/ +/FMVERSION ps-src/rfc1245.ps /^\/FMVERSION {$/ +/FMversion ps-src/rfc1245.ps /^\/FMversion (2.0) def $/ fn c-src/exit.c /^ void EXFUN((*fn[1]), (NOARGS));$/ fn c-src/exit.strange_suffix /^ void EXFUN((*fn[1]), (NOARGS));$/ fnheader tex-src/texinfo.tex /^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/ @@ -2654,74 +1423,125 @@ fnitemindex tex-src/texinfo.tex /^\\def\\fnitemindex #1{\\doind {fn}{\\code{#1}} fnx\deffnheader tex-src/texinfo.tex /^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/ focus_set pyt-src/server.py /^ def focus_set(self):$/ folio tex-src/texinfo.tex /^\\def\\dosetq #1#2{{\\let\\folio=0 \\turnoffactive%$/ -folio tex-src/texinfo.tex /^{\\let\\folio=0% Expand all macros now EXCEPT \\folio/ folio tex-src/texinfo.tex /^{\\let\\folio=0%$/ +folio tex-src/texinfo.tex /^{\\let\\folio=0% Expand all macros now EXCEPT \\folio/ follow_key c-src/emacs/src/keyboard.c /^follow_key (Lisp_Object keymap, Lisp_Object key)$/ -fonts tex-src/texinfo.tex /^\\obeyspaces \\obeylines \\ninett \\indexfonts \\rawbac/ fonts\rm tex-src/texinfo.tex /^ \\indexfonts\\rm \\tolerance=9500 \\advance\\baseline/ -foo c-src/h.h 18 +fonts tex-src/texinfo.tex /^\\obeyspaces \\obeylines \\ninett \\indexfonts \\rawbac/ +foo1 ruby-src/test1.ru /^ attr_reader(:foo1, :bar1, # comment$/ +foo2 ruby-src/test1.ru /^ alias_method ( :foo2, #cmmt$/ +foobar2_ c-src/h.h 16 +foobar2 c-src/h.h 20 +foobar c.c /^extern void foobar (void) __attribute__ ((section / +foobar c-src/c.c /^int foobar() {;}$/ +foo==bar el-src/TAGTEST.EL /^(defun foo==bar () (message "hi")) ; Bug#5624$/ +Foo::Bar perl-src/kai-test.pl /^package Foo::Bar;$/ foo c.c 150 foo c.c 166 foo c.c 167 foo c.c 178 foo c.c 189 -foo cp-src/c.C /^ foo() {$/ foo cp-src/c.C 68 foo cp-src/c.C 79 +foo cp-src/c.C /^ foo() {$/ foo cp-src/x.cc /^XX::foo()$/ +foo c-src/h.h 18 +(foo) forth-src/test-forth.fth /^: (foo) 1 ;$/ +foo forth-src/test-forth.fth /^: foo (foo) ;$/ foo f-src/entry.for /^ character*(*) function foo()$/ foo f-src/entry.strange /^ character*(*) function foo()$/ foo f-src/entry.strange_suffix /^ character*(*) function foo()$/ -foo forth-src/test-forth.fth /^: foo (foo) ;$/ +Foo perl-src/kai-test.pl /^package Foo;$/ foo php-src/ptest.php /^foo()$/ foo ruby-src/test1.ru /^ attr_reader :foo$/ foo! ruby-src/test1.ru /^ def foo!$/ -foo1 ruby-src/test1.ru /^ attr_reader(:foo1, :bar1, # comment$/ -foo2 ruby-src/test1.ru /^ alias_method ( :foo2, #cmmt$/ -foo==bar el-src/TAGTEST.EL /^(defun foo==bar () (message "hi")) ; Bug#5624$/ -foobar c-src/c.c /^int foobar() {;}$/ -foobar c.c /^extern void foobar (void) __attribute__ ((section / -foobar2 c-src/h.h 20 -foobar2_ c-src/h.h 16 -footnote tex-src/texinfo.tex /^\\long\\gdef\\footnote #1{\\global\\advance \\footnoteno/ footnotestyle tex-src/texinfo.tex /^\\let\\footnotestyle=\\comment$/ +footnote tex-src/texinfo.tex /^\\long\\gdef\\footnote #1{\\global\\advance \\footnoteno/ footnotezzz tex-src/texinfo.tex /^\\long\\gdef\\footnotezzz #1{\\insert\\footins{$/ +Fopen_dribble_file c-src/emacs/src/keyboard.c /^DEFUN ("open-dribble-file", Fopen_dribble_file, So/ foperator c-src/etags.c 2411 force_auto_save_soon c-src/emacs/src/keyboard.c /^force_auto_save_soon (void)$/ force_explicit_name c-src/etags.c 265 force_quit_count c-src/emacs/src/keyboard.c 10387 +FOR_EACH_ALIST_VALUE c-src/emacs/src/lisp.h /^#define FOR_EACH_ALIST_VALUE(head_var, list_var, v/ +FOR_EACH_TAIL c-src/emacs/src/lisp.h /^#define FOR_EACH_TAIL(hare, list, tortoise, n) \\$/ foreign_export merc-src/accumulator.m /^:- pragma foreign_export("C", unravel_univ(in, out/ -format tex-src/texinfo.tex /^\\def\\format{\\begingroup\\inENV %This group ends at / formatSize objc-src/PackInsp.m /^-(const char *)formatSize:(const char *)size inBuf/ +format tex-src/texinfo.tex /^\\def\\format{\\begingroup\\inENV %This group ends at / +Forth_help c-src/etags.c 573 +FORTHSRC make-src/Makefile /^FORTHSRC=test-forth.fth$/ +Forth_suffixes c-src/etags.c 571 +Forth_words c-src/etags.c /^Forth_words (FILE *inf)$/ +Fortran_functions c-src/etags.c /^Fortran_functions (FILE *inf)$/ +Fortran_help c-src/etags.c 579 +Fortran_suffixes c-src/etags.c 577 found c-src/emacs/src/lisp.h 2344 +Fposn_at_point c-src/emacs/src/keyboard.c /^DEFUN ("posn-at-point", Fposn_at_point, Sposn_at_p/ +Fposn_at_x_y c-src/emacs/src/keyboard.c /^DEFUN ("posn-at-x-y", Fposn_at_x_y, Sposn_at_x_y, / +/F ps-src/rfc1245.ps /^\/F { $/ fracas html-src/software.html /^Fracas$/ +/fraction ps-src/rfc1245.ps /^\/fraction \/currency \/guilsinglleft \/guilsinglright/ frag c-src/emacs/src/gmalloc.c 152 +_fraghead c-src/emacs/src/gmalloc.c 371 +/FrameDict ps-src/rfc1245.ps /^\/FrameDict 190 dict def $/ frame_local c-src/emacs/src/lisp.h 2341 -free c-src/emacs/src/gmalloc.c /^free (void *ptr)$/ +FRAMEP c-src/emacs/src/lisp.h /^FRAMEP (Lisp_Object a)$/ +FRC make-src/Makefile /^FRC:;$/ +Fread_key_sequence c-src/emacs/src/keyboard.c /^DEFUN ("read-key-sequence", Fread_key_sequence, Sr/ +Fread_key_sequence_vector c-src/emacs/src/keyboard.c /^DEFUN ("read-key-sequence-vector", Fread_key_seque/ +Frecent_keys c-src/emacs/src/keyboard.c /^DEFUN ("recent-keys", Frecent_keys, Srecent_keys, / +Frecursion_depth c-src/emacs/src/keyboard.c /^DEFUN ("recursion-depth", Frecursion_depth, Srecur/ +Frecursive_edit c-src/emacs/src/keyboard.c /^DEFUN ("recursive-edit", Frecursive_edit, Srecursi/ free c-src/emacs/src/gmalloc.c 166 free c-src/emacs/src/gmalloc.c 1723 free c-src/emacs/src/gmalloc.c 67 free c-src/emacs/src/gmalloc.c 72 +_free c-src/emacs/src/gmalloc.c /^_free (void *ptr)$/ +free c-src/emacs/src/gmalloc.c /^free (void *ptr)$/ free_fdesc c-src/etags.c /^free_fdesc (register fdesc *fdp)$/ +FREEFLOOD c-src/emacs/src/gmalloc.c 1863 free_for prol-src/natded.prolog /^free_for(var(_),_,_).$/ +freehook c-src/emacs/src/gmalloc.c /^freehook (void *ptr)$/ +_free_internal c-src/emacs/src/gmalloc.c /^_free_internal (void *ptr)$/ +_free_internal_nolock c-src/emacs/src/gmalloc.c /^_free_internal_nolock (void *ptr)$/ free_regexps c-src/etags.c /^free_regexps (void)$/ free_tree c-src/etags.c /^free_tree (register node *np)$/ free_var prol-src/natded.prolog /^free_var(var(V),var(V)).$/ -freehook c-src/emacs/src/gmalloc.c /^freehook (void *ptr)$/ frenchspacing tex-src/texinfo.tex /^\\def\\frenchspacing{\\sfcode46=1000 \\sfcode63=1000 \\/ frenchspacing tex-src/texinfo.tex /^\\let\\frenchspacing=\\relax%$/ +/freq ps-src/rfc1245.ps /^\/freq dpi 18.75 div 8 div round dup 0 eq {pop 1} i/ +Freset_this_command_lengths c-src/emacs/src/keyboard.c /^DEFUN ("reset-this-command-lengths", Freset_this_c/ fresh_vars prol-src/natded.prolog /^fresh_vars(var(V),var(V)).$/ +Fset_input_interrupt_mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-interrupt-mode", Fset_input_inte/ +Fset_input_meta_mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-meta-mode", Fset_input_meta_mode/ +Fset_input_mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-mode", Fset_input_mode, Sset_inp/ +Fset_output_flow_control c-src/emacs/src/keyboard.c /^DEFUN ("set-output-flow-control", Fset_output_flow/ +Fset_quit_char c-src/emacs/src/keyboard.c /^DEFUN ("set-quit-char", Fset_quit_char, Sset_quit_/ +FSRC make-src/Makefile /^FSRC=entry.for entry.strange_suffix entry.strange$/ fstartlist c-src/etags.c 2413 +Fsuspend_emacs c-src/emacs/src/keyboard.c /^DEFUN ("suspend-emacs", Fsuspend_emacs, Ssuspend_e/ ftable tex-src/texinfo.tex /^\\def\\ftable{\\begingroup\\inENV\\obeylines\\obeyspaces/ ftablex tex-src/texinfo.tex /^\\gdef\\ftablex #1^^M{%$/ -func c-src/emacs/src/lisp.h /^ void (*func) (Lisp_Object);$/ +F_takeprec c-src/etags.c /^F_takeprec (void)$/ +Fthis_command_keys c-src/emacs/src/keyboard.c /^DEFUN ("this-command-keys", Fthis_command_keys, St/ +Fthis_command_keys_vector c-src/emacs/src/keyboard.c /^DEFUN ("this-command-keys-vector", Fthis_command_k/ +Fthis_single_command_keys c-src/emacs/src/keyboard.c /^DEFUN ("this-single-command-keys", Fthis_single_co/ +Fthis_single_command_raw_keys c-src/emacs/src/keyboard.c /^DEFUN ("this-single-command-raw-keys", Fthis_singl/ +Ftop_level c-src/emacs/src/keyboard.c /^DEFUN ("top-level", Ftop_level, Stop_level, 0, 0, / +Ftrack_mouse c-src/emacs/src/keyboard.c /^DEFUN ("internal--track-mouse", Ftrack_mouse, Stra/ +FUN0 y-src/parse.y /^yylex FUN0()$/ +FUN1 y-src/parse.y /^str_to_col FUN1(char **,str)$/ +FUN1 y-src/parse.y /^yyerror FUN1(char *, s)$/ +FUN2 y-src/parse.y /^make_list FUN2(YYSTYPE, car, YYSTYPE, cdr)$/ +FUN2 y-src/parse.y /^parse_cell_or_range FUN2(char **,ptr, struct rng */ +func1 c.c /^int func1$/ +func2 c.c /^int func2 (a,b$/ +funcboo c.c /^bool funcboo ()$/ func c-src/emacs/src/lisp.h /^ void (*func) (int);$/ +func c-src/emacs/src/lisp.h /^ void (*func) (Lisp_Object);$/ func c-src/emacs/src/lisp.h /^ void (*func) (void *);$/ func c-src/emacs/src/lisp.h /^ void (*func) (void);$/ -func1 c.c /^int func1$/ -func2 c.c /^int func2 (a,b$/ func_key_syms c-src/emacs/src/keyboard.c 4626 -funcboo c.c /^bool funcboo ()$/ funcpointer c-src/emacs/src/lisp.h 2126 funcptr c-src/h.h /^ fu int (*funcptr) (void *ptr);$/ function c-src/emacs/src/lisp.h 1685 @@ -2729,8 +1549,12 @@ function c-src/emacs/src/lisp.h 2197 function c-src/emacs/src/lisp.h 2985 function c-src/emacs/src/lisp.h 694 function c-src/etags.c 194 -functionp c-src/emacs/src/lisp.h /^functionp (Lisp_Object object)$/ +FUNCTION_KEY_OFFSET c-src/emacs/src/keyboard.c 4766 +FUNCTION_KEY_OFFSET c-src/emacs/src/keyboard.c 5061 functionparens tex-src/texinfo.tex /^\\gdef\\functionparens{\\boldbrax\\let&=\\amprm\\parenco/ +FUNCTIONP c-src/emacs/src/lisp.h /^FUNCTIONP (Lisp_Object obj)$/ +functionp c-src/emacs/src/lisp.h /^functionp (Lisp_Object object)$/ +Funexpand_abbrev c-src/abbrev.c /^DEFUN ("unexpand-abbrev", Funexpand_abbrev, Sunexp/ fval forth-src/test-forth.fth /^fconst fvalue fval$/ fvar forth-src/test-forth.fth /^fvariable fvar$/ fvdef c-src/etags.c 2418 @@ -2739,79 +1563,138 @@ fvnameseen c-src/etags.c 2412 fvnone c-src/etags.c 2408 fwd c-src/emacs/src/lisp.h 2346 fwd c-src/emacs/src/lisp.h 690 -g cp-src/c.C /^ int g(){return 2;};$/ +Fx_get_selection_internal c.c /^DEFUN ("x-get-selection-internal", Fx_get_selectio/ +Fx_get_selection_internal c.c /^ Fx_get_selection_internal, Sx_get_selection/ +Fy_get_selection_internal c.c /^ Fy_get_selection_internal, Sy_get_selection_/ galileo html-src/software.html /^GaliLEO$/ +GatherControls pyt-src/server.py /^ def GatherControls(self):$/ gather pyt-src/server.py /^ def gather(self):$/ +GCALIGNED c-src/emacs/src/lisp.h 288 +GCALIGNED c-src/emacs/src/lisp.h 290 +GCALIGNMENT c-src/emacs/src/lisp.h 243 gc_aset c-src/emacs/src/lisp.h /^gc_aset (Lisp_Object array, ptrdiff_t idx, Lisp_Ob/ +GC_MAKE_GCPROS_NOOPS c-src/emacs/src/lisp.h 3172 gcmarkbit c-src/emacs/src/lisp.h 1974 gcmarkbit c-src/emacs/src/lisp.h 1981 gcmarkbit c-src/emacs/src/lisp.h 2035 gcmarkbit c-src/emacs/src/lisp.h 2113 gcmarkbit c-src/emacs/src/lisp.h 2204 gcmarkbit c-src/emacs/src/lisp.h 656 +GC_MARK_STACK_CHECK_GCPROS c-src/emacs/src/lisp.h 3173 +GC_MARK_STACK c-src/emacs/src/lisp.h 3177 +GCPRO1 c-src/emacs/src/lisp.h /^#define GCPRO1(a) \\$/ +GCPRO1 c-src/emacs/src/lisp.h /^#define GCPRO1(varname) ((void) gcpro1)$/ +GCPRO2 c-src/emacs/src/lisp.h /^#define GCPRO2(a, b) \\$/ +GCPRO2 c-src/emacs/src/lisp.h /^#define GCPRO2(varname1, varname2) ((void) gcpro2,/ +GCPRO3 c-src/emacs/src/lisp.h /^#define GCPRO3(a, b, c) \\$/ +GCPRO3 c-src/emacs/src/lisp.h /^#define GCPRO3(varname1, varname2, varname3) \\$/ +GCPRO4 c-src/emacs/src/lisp.h /^#define GCPRO4(a, b, c, d) \\$/ +GCPRO4 c-src/emacs/src/lisp.h /^#define GCPRO4(varname1, varname2, varname3, varna/ +GCPRO5 c-src/emacs/src/lisp.h /^#define GCPRO5(a, b, c, d, e) \\$/ +GCPRO5 c-src/emacs/src/lisp.h /^#define GCPRO5(varname1, varname2, varname3, varna/ +GCPRO6 c-src/emacs/src/lisp.h /^#define GCPRO6(a, b, c, d, e, f) \\$/ +GCPRO6 c-src/emacs/src/lisp.h /^#define GCPRO6(varname1, varname2, varname3, varna/ +GCPRO7 c-src/emacs/src/lisp.h /^#define GCPRO7(a, b, c, d, e, f, g) \\$/ +GCPRO7 c-src/emacs/src/lisp.h /^#define GCPRO7(a, b, c, d, e, f, g) (GCPRO6 (a, b,/ gcpro c-src/emacs/src/lisp.h 3042 gcpro c-src/emacs/src/lisp.h 3132 -gen_help_event c-src/emacs/src/keyboard.c /^gen_help_event (Lisp_Object help, Lisp_Object fram/ +g cp-src/c.C /^ int g(){return 2;};$/ +GCTYPEBITS c-src/emacs/src/lisp.h 67 +GCTYPEBITS c-src/emacs/src/lisp.h /^DEFINE_GDB_SYMBOL_BEGIN (int, GCTYPEBITS)$/ +GC_USE_GCPROS_AS_BEFORE c-src/emacs/src/lisp.h 3171 +GC_USE_GCPROS_CHECK_ZOMBIES c-src/emacs/src/lisp.h 3174 genalgorithm html-src/algrthms.html /^Generating the Data<\/font><\/i><\/b>$/ generate_warning merc-src/accumulator.m /^:- pred generate_warning(module_info::in, prog_var/ generate_warnings merc-src/accumulator.m /^:- pred generate_warnings(module_info::in, prog_va/ +~generic_object cp-src/clheir.cpp /^generic_object::~generic_object(void)$/ generic_object cp-src/clheir.cpp /^generic_object::generic_object(void)$/ generic_object cp-src/clheir.hpp 13 +GENERIC_PTR y-src/cccp.y 56 +GENERIC_PTR y-src/cccp.y 58 +gen_help_event c-src/emacs/src/keyboard.c /^gen_help_event (Lisp_Object help, Lisp_Object fram/ +GEQ y-src/cccp.c 15 getArchs objc-src/PackInsp.m /^-(void)getArchs$/ -getDomainNames php-src/lce_functions.php /^ function getDomainNames()$/ -getFoo lua-src/test.lua /^function Cube.data.getFoo ()$/ -getPOReader php-src/lce_functions.php /^ function &getPOReader($domain)$/ -getPath objc-src/PackInsp.m /^-(const char *)getPath:(char *)buf forType:(const / -getPos lua-src/test.lua /^function Circle.getPos ()$/ -getPos lua-src/test.lua /^function Rectangle.getPos ()$/ -getTextDomains php-src/lce_functions.php /^ function getTextDomains($lines)$/ +getcjmp c-src/emacs/src/keyboard.c 147 get_compressor_from_suffix c-src/etags.c /^get_compressor_from_suffix (char *file, char **ext/ get_contiguous_space c-src/emacs/src/gmalloc.c /^get_contiguous_space (ptrdiff_t size, void *positi/ get_current_dir_name c-src/emacs/src/gmalloc.c 33 +getDomainNames php-src/lce_functions.php /^ function getDomainNames()$/ +getFoo lua-src/test.lua /^function Cube.data.getFoo ()$/ get_input_pending c-src/emacs/src/keyboard.c /^get_input_pending (int flags)$/ get_language_from_filename c-src/etags.c /^get_language_from_filename (char *file, int case_s/ get_language_from_interpreter c-src/etags.c /^get_language_from_interpreter (char *interpreter)$/ get_language_from_langname c-src/etags.c /^get_language_from_langname (const char *name)$/ +GetLayerByName lua-src/allegro.lua /^function GetLayerByName (name)$/ get_layer_by_name lua-src/allegro.lua /^local function get_layer_by_name (sprite, layer, n/ -get_tag c-src/etags.c /^get_tag (register char *bp, char **namepp)$/ -get_word c-src/tab.c /^static char *get_word(char **str, char delim)$/ -getcjmp c-src/emacs/src/keyboard.c 147 -getopt perl-src/yagrip.pl /^sub getopt {$/ -getopt.o make-src/Makefile /^getopt.o: emacs\/lib-src\/getopt.c$/ +GetNameList pas-src/common.pas /^function GetNameList; (* : BinNodePointer;*)$/ +GetNewNameListNode pas-src/common.pas /^function GetNewNameListNode;(*($/ getopt1.o make-src/Makefile /^getopt1.o: emacs\/lib-src\/getopt1.c$/ +_GETOPT_H c-src/getopt.h 19 +GETOPTOBJS make-src/Makefile /^GETOPTOBJS= #getopt.o getopt1.o$/ +getopt.o make-src/Makefile /^getopt.o: emacs\/lib-src\/getopt.c$/ +getopt perl-src/yagrip.pl /^sub getopt {$/ +Get_Own_Priority/f ada-src/2ataspri.adb /^ function Get_Own_Priority return System.Any_Pri/ +Get_Own_Priority/f ada-src/2ataspri.ads /^ function Get_Own_Priority return System.Any_Pri/ +getPath objc-src/PackInsp.m /^-(const char *)getPath:(char *)buf forType:(const / +getPOReader php-src/lce_functions.php /^ function &getPOReader($domain)$/ +getPos lua-src/test.lua /^function Circle.getPos ()$/ +getPos lua-src/test.lua /^function Rectangle.getPos ()$/ +Get_Priority/f ada-src/2ataspri.adb /^ function Get_Priority (T : TCB_Ptr) return Syst/ +Get_Priority/f ada-src/2ataspri.ads /^ function Get_Priority (T : TCB_Ptr) return Syst/ getptys objc-src/Subprocess.m /^getptys (int *master, int *slave)$/ +get_tag c-src/etags.c /^get_tag (register char *bp, char **namepp)$/ +getTextDomains php-src/lce_functions.php /^ function getTextDomains($lines)$/ gettext php-src/lce_functions.php /^ function gettext($msgid)$/ +GetTextRef pas-src/common.pas /^function GetTextRef;(*($/ +GetUniqueLayerName lua-src/allegro.lua /^function GetUniqueLayerName ()$/ +get_word c-src/tab.c /^static char *get_word(char **str, char delim)$/ +GE y-src/parse.c 8 ggg c-src/h.h 10 ghi1 c-src/h.h 36 ghi2 c-src/h.h 39 giallo cp-src/c.C 40 glider cp-src/conway.cpp /^void glider(int x, int y)$/ gloggingall tex-src/texinfo.tex /^\\def\\gloggingall{\\begingroup \\globaldefs = 1 \\logg/ +/gn ps-src/rfc1245.ps /^\/gn { $/ gnu html-src/software.html /^Free software that I wrote for the GNU project or / +_GNU_SOURCE c-src/etags.c 94 gobble_input c-src/emacs/src/keyboard.c /^gobble_input (void)$/ goto-tag-location-function el-src/emacs/lisp/progmodes/etags.el /^(defvar goto-tag-location-function nil$/ goto_xy cp-src/screen.cpp /^void goto_xy(unsigned char x, unsigned char y)$/ +/G ps-src/rfc1245.ps /^\/G { $/ +/graymode ps-src/rfc1245.ps /^\/graymode true def$/ +/grayness ps-src/rfc1245.ps /^\/grayness {$/ +GREEN cp-src/screen.hpp 14 group tex-src/texinfo.tex /^\\def\\group{\\begingroup$/ -gtr tex-src/texinfo.tex /^\\def\\gtr{\\realbackslash gtr}$/ +GROW_RAW_KEYBUF c-src/emacs/src/keyboard.c 119 gtr tex-src/texinfo.tex /^\\def\\gtr{\\realbackslash gtr}%$/ -handleList pyt-src/server.py /^ def handleList(self, event):$/ -handleNew pyt-src/server.py /^ def handleNew(self, event):$/ +gtr tex-src/texinfo.tex /^\\def\\gtr{\\realbackslash gtr}$/ +/guillemotleft ps-src/rfc1245.ps /^\/guillemotleft \/guillemotright \/ellipsis \/.notdef / handle_async_input c-src/emacs/src/keyboard.c /^handle_async_input (void)$/ handle_input_available_signal c-src/emacs/src/keyboard.c /^handle_input_available_signal (int sig)$/ handle_interrupt c-src/emacs/src/keyboard.c /^handle_interrupt (bool in_signal_handler)$/ handle_interrupt_signal c-src/emacs/src/keyboard.c /^handle_interrupt_signal (int sig)$/ -handle_user_signal c-src/emacs/src/keyboard.c /^handle_user_signal (int sig)$/ +handleList pyt-src/server.py /^ def handleList(self, event):$/ +handleNew pyt-src/server.py /^ def handleNew(self, event):$/ handler c-src/emacs/src/lisp.h 3023 handlertype c-src/emacs/src/lisp.h 3021 +handle_user_signal c-src/emacs/src/keyboard.c /^handle_user_signal (int sig)$/ has_arg c-src/getopt.h 82 hash c-src/emacs/src/lisp.h 1843 hash c-src/etags.c /^hash (const char *str, int len)$/ -hash_table_test c-src/emacs/src/lisp.h 1805 hashfn c-src/emacs/src/lisp.h /^ EMACS_UINT (*hashfn) (struct hash_table_test *t,/ -hat tex-src/texinfo.tex /^\\def\\hat{\\realbackslash hat}$/ +HASH_HASH c-src/emacs/src/lisp.h /^HASH_HASH (struct Lisp_Hash_Table *h, ptrdiff_t id/ +HASH_INDEX c-src/emacs/src/lisp.h /^HASH_INDEX (struct Lisp_Hash_Table *h, ptrdiff_t i/ +HASH_KEY c-src/emacs/src/lisp.h /^HASH_KEY (struct Lisp_Hash_Table *h, ptrdiff_t idx/ +HASH_NEXT c-src/emacs/src/lisp.h /^HASH_NEXT (struct Lisp_Hash_Table *h, ptrdiff_t id/ +HASH_TABLE_P c-src/emacs/src/lisp.h /^HASH_TABLE_P (Lisp_Object a)$/ +HASH_TABLE_SIZE c-src/emacs/src/lisp.h /^HASH_TABLE_SIZE (struct Lisp_Hash_Table *h)$/ +hash_table_test c-src/emacs/src/lisp.h 1805 +HASH_VALUE c-src/emacs/src/lisp.h /^HASH_VALUE (struct Lisp_Hash_Table *h, ptrdiff_t i/ hat tex-src/texinfo.tex /^\\def\\hat{\\realbackslash hat}%$/ +hat tex-src/texinfo.tex /^\\def\\hat{\\realbackslash hat}$/ +HAVE_NTGUI c-src/etags.c 116 hdr c-src/emacs/src/gmalloc.c 1865 -head_table c-src/emacs/src/keyboard.c 11027 header c-src/emacs/src/lisp.h 1371 header c-src/emacs/src/lisp.h 1388 header c-src/emacs/src/lisp.h 1581 @@ -2819,24 +1702,52 @@ header c-src/emacs/src/lisp.h 1610 header c-src/emacs/src/lisp.h 1672 header c-src/emacs/src/lisp.h 1826 header_size c-src/emacs/src/lisp.h 1471 -heading tex-src/texinfo.tex /^\\def\\heading{\\parsearg\\secheadingi}$/ +HEADINGSafter tex-src/texinfo.tex /^\\def\\HEADINGSafter{\\let\\HEADINGShook=\\HEADINGSdoub/ +HEADINGSdoubleafter tex-src/texinfo.tex /^\\let\\HEADINGSdoubleafter=\\HEADINGSafter$/ +HEADINGSdouble tex-src/texinfo.tex /^\\def\\HEADINGSdouble{$/ +HEADINGSdoublex tex-src/texinfo.tex /^\\def\\HEADINGSdoublex{%$/ +HEADINGShook tex-src/texinfo.tex /^\\def\\HEADINGSafter{\\let\\HEADINGShook=\\HEADINGSdoub/ +HEADINGShook tex-src/texinfo.tex /^\\def\\HEADINGSsingleafter{\\let\\HEADINGShook=\\HEADIN/ +HEADINGShook tex-src/texinfo.tex /^\\let\\HEADINGShook=\\relax$/ +HEADINGSoff tex-src/texinfo.tex /^\\def\\HEADINGSoff{$/ +HEADINGSon tex-src/texinfo.tex /^\\def\\HEADINGSon{\\HEADINGSdouble}$/ +HEADINGSon tex-src/texinfo.tex /^\\global\\def\\HEADINGSon{\\HEADINGSdouble}}$/ +HEADINGSon tex-src/texinfo.tex /^\\global\\def\\HEADINGSon{\\HEADINGSsingle}}$/ +HEADINGSsingleafter tex-src/texinfo.tex /^\\def\\HEADINGSsingleafter{\\let\\HEADINGShook=\\HEADIN/ +HEADINGSsingle tex-src/texinfo.tex /^\\def\\HEADINGSsingle{$/ +HEADINGSsinglex tex-src/texinfo.tex /^\\def\\HEADINGSsinglex{%$/ headings tex-src/texinfo.tex /^\\def\\headings #1 {\\csname HEADINGS#1\\endcsname}$/ +heading tex-src/texinfo.tex /^\\def\\heading{\\parsearg\\secheadingi}$/ +head_table c-src/emacs/src/keyboard.c 11027 +_heapbase c-src/emacs/src/gmalloc.c 356 +HEAP c-src/emacs/src/gmalloc.c 131 +_heapindex c-src/emacs/src/gmalloc.c 365 +_heapinfo c-src/emacs/src/gmalloc.c 359 +_heaplimit c-src/emacs/src/gmalloc.c 368 heapsize c-src/emacs/src/gmalloc.c 362 hello scm-src/test.scm /^(define hello "Hello, Emacs!")$/ hello scm-src/test.scm /^(set! hello "Hello, world!")$/ hello-world scm-src/test.scm /^(define (hello-world)$/ -help c-src/etags.c 193 -helpPanel objcpp-src/SimpleCalc.M /^- helpPanel:sender$/ help_char_p c-src/emacs/src/keyboard.c /^help_char_p (Lisp_Object c)$/ +help c-src/etags.c 193 help_form_saved_window_configs c-src/emacs/src/keyboard.c 2156 +helpPanel objcpp-src/SimpleCalc.M /^- helpPanel:sender$/ helpwin pyt-src/server.py /^def helpwin(helpdict):$/ hide_cursor cp-src/screen.cpp /^void hide_cursor(void)$/ hlds merc-src/accumulator.m /^:- import_module hlds.$/ +/home/www/pub/etags.c.gz make-src/Makefile /^\/home\/www\/pub\/etags.c.gz: etags.c$/ +/home/www/pub/software/unix/etags.tar.gz make-src/Makefile /^\/home\/www\/pub\/software\/unix\/etags.tar.gz: Makefile/ +/H ps-src/rfc1245.ps /^\/H { $/ hsize tex-src/texinfo.tex /^ {\\let\\hsize=\\pagewidth \\makefootline}}$/ +hsize tex-src/texinfo.tex /^{\\let\\hsize=\\pagewidth \\makefootline}}}%$/ hsize tex-src/texinfo.tex /^ {\\let\\hsize=\\pagewidth \\makeheadline}$/ hsize tex-src/texinfo.tex /^\\shipout\\vbox{{\\let\\hsize=\\pagewidth \\makeheadline/ -hsize tex-src/texinfo.tex /^{\\let\\hsize=\\pagewidth \\makefootline}}}%$/ +HTML_help c-src/etags.c 584 +HTML_labels c-src/etags.c /^HTML_labels (FILE *inf)$/ +HTMLSRC make-src/Makefile /^HTMLSRC=softwarelibero.html index.shtml algrthms.h/ +HTML_suffixes c-src/etags.c 582 htmltreelist prol-src/natded.prolog /^htmltreelist([]).$/ +/hx ps-src/rfc1245.ps /^\/hx { $/ hybrid_aligned_alloc c-src/emacs/src/gmalloc.c /^hybrid_aligned_alloc (size_t alignment, size_t siz/ hybrid_calloc c-src/emacs/src/gmalloc.c /^hybrid_calloc (size_t nmemb, size_t size)$/ hybrid_free c-src/emacs/src/gmalloc.c /^hybrid_free (void *ptr)$/ @@ -2844,59 +1755,58 @@ hybrid_get_current_dir_name c-src/emacs/src/gmalloc.c /^hybrid_get_current_dir_n hybrid_malloc c-src/emacs/src/gmalloc.c /^hybrid_malloc (size_t size)$/ hybrid_realloc c-src/emacs/src/gmalloc.c /^hybrid_realloc (void *ptr, size_t size)$/ hypothetical_mem prol-src/natded.prolog /^hypothetical_mem(fi(N),Ass,_):-$/ +/iacute ps-src/rfc1245.ps /^\/iacute \/igrave \/icircumflex \/idieresis \/ntilde \/o/ +ialpage tex-src/texinfo.tex /^ \\availdimen@=\\pageheight \\advance\\availdimen@ by/ +ialpage tex-src/texinfo.tex /^\\def\\pagesofar{\\unvbox\\partialpage %$/ +ialpage tex-src/texinfo.tex /^ \\dimen@=\\pageheight \\advance\\dimen@ by-\\ht\\pa/ +ialpage tex-src/texinfo.tex /^ \\dimen@=\\pageheight \\advance\\dimen@ by-\\ht\\parti/ +ialpage tex-src/texinfo.tex /^\\newbox\\partialpage$/ +ialpage tex-src/texinfo.tex /^ \\output={\\global\\setbox\\partialpage=$/ +i c.c 169 +/Icircumflex ps-src/rfc1245.ps /^\/Icircumflex \/Idieresis \/Igrave \/Oacute \/Ocircumfl/ +i cp-src/c.C 132 +/ic ps-src/rfc1245.ps /^\/ic [ $/ i c-src/c.c 2 i c-src/emacs/src/lisp.h 4673 i c-src/emacs/src/lisp.h 4679 i c-src/emacs/src/lisp.h 567 -i c.c 169 -i cp-src/c.C 132 -i tex-src/texinfo.tex /^\\def\\i##1{\\realbackslash i {##1}}$/ -i tex-src/texinfo.tex /^\\def\\i##1{\\realbackslash i {##1}}%$/ -i tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ -i tex-src/texinfo.tex /^\\let\\i=\\indexdummyfont$/ -i tex-src/texinfo.tex /^\\let\\i=\\smartitalic$/ -ialpage tex-src/texinfo.tex /^ \\dimen@=\\pageheight \\advance\\dimen@ by-\\ht\\pa/ -ialpage tex-src/texinfo.tex /^ \\availdimen@=\\pageheight \\advance\\availdimen@ by/ -ialpage tex-src/texinfo.tex /^ \\dimen@=\\pageheight \\advance\\dimen@ by-\\ht\\parti/ -ialpage tex-src/texinfo.tex /^ \\output={\\global\\setbox\\partialpage=$/ -ialpage tex-src/texinfo.tex /^\\def\\pagesofar{\\unvbox\\partialpage %$/ -ialpage tex-src/texinfo.tex /^\\newbox\\partialpage$/ identify_goal_type merc-src/accumulator.m /^:- pred identify_goal_type(pred_id::in, proc_id::i/ identify_out_and_out_prime merc-src/accumulator.m /^:- pred identify_out_and_out_prime(module_info::in/ identify_recursive_calls merc-src/accumulator.m /^:- pred identify_recursive_calls(pred_id::in, proc/ idx c-src/emacs/src/lisp.h 3150 -ifclear tex-src/texinfo.tex /^\\def\\ifclear{\\begingroup\\ignoresections\\parsearg\\i/ +IEEE_FLOATING_POINT c-src/emacs/src/lisp.h 2415 ifclearfail tex-src/texinfo.tex /^\\def\\ifclearfail{\\begingroup\\ignoresections\\ifclea/ ifclearfailxxx tex-src/texinfo.tex /^\\long\\def\\ifclearfailxxx #1\\end ifclear{\\endgroup\\/ +ifclear tex-src/texinfo.tex /^\\def\\ifclear{\\begingroup\\ignoresections\\parsearg\\i/ ifclearxxx tex-src/texinfo.tex /^\\def\\ifclearxxx #1{\\endgroup$/ ifinfo tex-src/texinfo.tex /^\\def\\ifinfo{\\begingroup\\ignoresections\\ifinfoxxx}$/ ifinfoxxx tex-src/texinfo.tex /^\\long\\def\\ifinfoxxx #1\\end ifinfo{\\endgroup\\ignore/ -ifset tex-src/texinfo.tex /^\\def\\ifset{\\begingroup\\ignoresections\\parsearg\\ifs/ ifsetfail tex-src/texinfo.tex /^\\def\\ifsetfail{\\begingroup\\ignoresections\\ifsetfai/ ifsetfailxxx tex-src/texinfo.tex /^\\long\\def\\ifsetfailxxx #1\\end ifset{\\endgroup\\igno/ +ifset tex-src/texinfo.tex /^\\def\\ifset{\\begingroup\\ignoresections\\parsearg\\ifs/ ifsetxxx tex-src/texinfo.tex /^\\def\\ifsetxxx #1{\\endgroup$/ iftex tex-src/texinfo.tex /^\\def\\iftex{}$/ ifusingtt tex-src/texinfo.tex /^\\def\\ifusingtt#1#2{\\ifdim \\fontdimen3\\the\\font=0pt/ -ignore tex-src/texinfo.tex /^\\def\\ignore{\\begingroup\\ignoresections$/ ignore_case c-src/etags.c 266 ignore_mouse_drag_p c-src/emacs/src/keyboard.c 1256 ignoresections tex-src/texinfo.tex /^\\def\\ignoresections{%$/ +ignore tex-src/texinfo.tex /^\\def\\ignore{\\begingroup\\ignoresections$/ ignorexxx tex-src/texinfo.tex /^\\long\\def\\ignorexxx #1\\end ignore{\\endgroup\\ignore/ ii tex-src/texinfo.tex /^\\def\\ii#1{{\\it #1}} % italic font$/ +IMAGEP c-src/emacs/src/lisp.h /^IMAGEP (Lisp_Object x)$/ immediate_quit c-src/emacs/src/keyboard.c 174 impatto html-src/softwarelibero.html /^Impatto pratico del software libero$/ implementation merc-src/accumulator.m /^:- implementation.$/ implicitmath tex-src/texinfo.tex /^\\let\\implicitmath = $$/ -inENV tex-src/texinfo.tex /^\\newif\\ifENV \\ENVfalse \\def\\inENV{\\ifENV\\relax\\els/ -in_word_set c-src/etags.c /^in_word_set (register const char *str, register un/ inattribute c-src/etags.c 2400 inc cp-src/Range.h /^ double inc (void) const { return rng_inc; }$/ +/inch ps-src/rfc1245.ps /^\/inch {72 mul} def$/ include tex-src/texinfo.tex /^\\def\\include{\\parsearg\\includezzz}$/ includezzz tex-src/texinfo.tex /^\\def\\includezzz #1{{\\def\\thisfile{#1}\\input #1$/ indbf tex-src/texinfo.tex /^\\let\\indbf=\\indrm$/ -index c-src/emacs/src/lisp.h 1856 indexbackslash tex-src/texinfo.tex /^ \\def\\indexbackslash{\\rawbackslashxx}$/ indexbackslash tex-src/texinfo.tex /^\\let\\indexbackslash=0 %overridden during \\printin/ +index c-src/emacs/src/lisp.h 1856 indexdotfill tex-src/texinfo.tex /^\\def\\indexdotfill{\\cleaders$/ indexdummies tex-src/texinfo.tex /^\\def\\indexdummies{%$/ indexdummydots tex-src/texinfo.tex /^\\def\\indexdummydots{...}$/ @@ -2910,70 +1820,104 @@ indsc tex-src/texinfo.tex /^\\let\\indsc=\\indrm$/ indsf tex-src/texinfo.tex /^\\let\\indsf=\\indrm$/ indsl tex-src/texinfo.tex /^\\let\\indsl=\\indit$/ indtt tex-src/texinfo.tex /^\\let\\indtt=\\ninett$/ +inENV tex-src/texinfo.tex /^\\newif\\ifENV \\ENVfalse \\def\\inENV{\\ifENV\\relax\\els/ infabsdir c-src/etags.c 206 infabsname c-src/etags.c 205 infiles make-src/Makefile /^infiles = $(filter-out ${NONSRCS},${SRCS}) srclist/ infname c-src/etags.c 204 -info c-src/emacs/src/gmalloc.c 157 -infoPanel objcpp-src/SimpleCalc.M /^- infoPanel:sender$/ -infoappendix tex-src/texinfo.tex /^\\def\\infoappendix{\\parsearg\\appendixzzz}$/ infoappendixsec tex-src/texinfo.tex /^\\def\\infoappendixsec{\\parsearg\\appendixseczzz}$/ infoappendixsubsec tex-src/texinfo.tex /^\\def\\infoappendixsubsec{\\parsearg\\appendixsubseczz/ infoappendixsubsubsec tex-src/texinfo.tex /^\\def\\infoappendixsubsubsec{\\parsearg\\appendixsubsu/ +infoappendix tex-src/texinfo.tex /^\\def\\infoappendix{\\parsearg\\appendixzzz}$/ infochapter tex-src/texinfo.tex /^\\def\\infochapter{\\parsearg\\chapterzzz}$/ +info c-src/emacs/src/gmalloc.c 157 +infoPanel objcpp-src/SimpleCalc.M /^- infoPanel:sender$/ inforef tex-src/texinfo.tex /^\\def\\inforef #1{\\inforefzzz #1,,,,**}$/ inforefzzz tex-src/texinfo.tex /^\\def\\inforefzzz #1,#2,#3,#4**{See Info file \\file{/ infosection tex-src/texinfo.tex /^\\def\\infosection{\\parsearg\\sectionzzz}$/ infosubsection tex-src/texinfo.tex /^\\def\\infosubsection{\\parsearg\\subsectionzzz}$/ infosubsubsection tex-src/texinfo.tex /^\\def\\infosubsubsection{\\parsearg\\subsubsectionzzz}/ infotop tex-src/texinfo.tex /^\\def\\infotop{\\parsearg\\unnumberedzzz}$/ -infounnumbered tex-src/texinfo.tex /^\\def\\infounnumbered{\\parsearg\\unnumberedzzz}$/ infounnumberedsec tex-src/texinfo.tex /^\\def\\infounnumberedsec{\\parsearg\\unnumberedseczzz}/ infounnumberedsubsec tex-src/texinfo.tex /^\\def\\infounnumberedsubsec{\\parsearg\\unnumberedsubs/ infounnumberedsubsubsec tex-src/texinfo.tex /^\\def\\infounnumberedsubsubsec{\\parsearg\\unnumbereds/ -init c-src/etags.c /^init (void)$/ -init objc-src/Subprocess.m /^ andStdErr:(BOOL)wantsStdErr$/ -init objc-src/Subprocess.m /^- init:(const char *)subprocessString$/ -init objcpp-src/SimpleCalc.M /^- init$/ +infounnumbered tex-src/texinfo.tex /^\\def\\infounnumbered{\\parsearg\\unnumberedzzz}$/ +inita c.c /^static void inita () {}$/ +initb c.c /^static void initb () {}$/ init_control c.c 239 +init c-src/etags.c /^init (void)$/ +Initialize_Cond/p ada-src/2ataspri.adb /^ procedure Initialize_Cond (Cond : in out Condit/ +Initialize_Cond/p ada-src/2ataspri.ads /^ procedure Initialize_Cond (Cond : in out Condit/ +initialize_goal_store merc-src/accumulator.m /^:- func initialize_goal_store(list(hlds_goal), ins/ +Initialize_LL_Tasks/p ada-src/2ataspri.adb /^ procedure Initialize_LL_Tasks (T : TCB_Ptr) is$/ +Initialize_LL_Tasks/p ada-src/2ataspri.ads /^ procedure Initialize_LL_Tasks (T : TCB_Ptr);$/ +Initialize_Lock/p ada-src/2ataspri.adb /^ procedure Initialize_Lock$/ +Initialize_Lock/p ada-src/2ataspri.ads /^ procedure Initialize_Lock (Prio : System.Any_Pr/ +initialize-new-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun initialize-new-tags-table ()$/ +initialize_random_junk y-src/cccp.y /^initialize_random_junk ()$/ +InitializeStringPackage pas-src/common.pas /^procedure InitializeStringPackage;$/ +Initialize_TAS_Cell/p ada-src/2ataspri.adb /^ procedure Initialize_TAS_Cell (Cell : out TAS_C/ +Initialize_TAS_Cell/p ada-src/2ataspri.ads /^ procedure Initialize_TAS_Cell (Cell : out TA/ +initial_kboard c-src/emacs/src/keyboard.c 84 +initial tex-src/texinfo.tex /^\\def\\initial #1{%$/ init_kboard c-src/emacs/src/keyboard.c /^init_kboard (KBOARD *kb, Lisp_Object type)$/ init_keyboard c-src/emacs/src/keyboard.c /^init_keyboard (void)$/ +InitNameList pas-src/common.pas /^procedure InitNameList;$/ +InitNameStringPool pas-src/common.pas /^procedure InitNameStringPool;$/ +init objcpp-src/SimpleCalc.M /^- init$/ +init objc-src/Subprocess.m /^ andStdErr:(BOOL)wantsStdErr$/ +init objc-src/Subprocess.m /^- init:(const char *)subprocessString$/ +__init__ pyt-src/server.py /^ def __init__(self):$/ +__init__ pyt-src/server.py /^ def __init__(self, host, sitelist, master=None/ +__init__ pyt-src/server.py /^ def __init__(self, master=None):$/ +__init__ pyt-src/server.py /^ def __init__(self, Master, text, textvar, widt/ +__init__ pyt-src/server.py /^ def __init__(self, newlegend, list, editor, ma/ +__init__ pyt-src/server.py /^ def __init__(self, user, userlist, master=None/ init_registry cp-src/clheir.cpp /^void init_registry(void)$/ init_tool_bar_items c-src/emacs/src/keyboard.c /^init_tool_bar_items (Lisp_Object reuse)$/ -inita c.c /^static void inita () {}$/ -initb c.c /^static void initb () {}$/ -initial tex-src/texinfo.tex /^\\def\\initial #1{%$/ -initial_kboard c-src/emacs/src/keyboard.c 84 -initialize-new-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun initialize-new-tags-table ()$/ -initialize_goal_store merc-src/accumulator.m /^:- func initialize_goal_store(list(hlds_goal), ins/ -initialize_random_junk y-src/cccp.y /^initialize_random_junk ()$/ -input-pending-p c-src/emacs/src/keyboard.c /^DEFUN ("input-pending-p", Finput_pending_p, Sinput/ +Inner1/b ada-src/etags-test-for.ada /^ package body Inner1 is$/ +Inner1/b ada-src/waroquiers.ada /^ package body Inner1 is$/ +Inner1/s ada-src/etags-test-for.ada /^ package Inner1 is$/ +Inner1/s ada-src/waroquiers.ada /^ package Inner1 is$/ +Inner2/b ada-src/etags-test-for.ada /^ package body Inner2 is$/ +Inner2/b ada-src/waroquiers.ada /^ package body Inner2 is$/ +Inner2/s ada-src/etags-test-for.ada /^ package Inner2 is$/ +Inner2/s ada-src/waroquiers.ada /^ package Inner2 is$/ input_available_clear_time c-src/emacs/src/keyboard.c 324 +INPUT_EVENT_POS_MAX c-src/emacs/src/keyboard.c 3698 +INPUT_EVENT_POS_MIN c-src/emacs/src/keyboard.c 3701 input_pending c-src/emacs/src/keyboard.c 239 +input-pending-p c-src/emacs/src/keyboard.c /^DEFUN ("input-pending-p", Finput_pending_p, Sinput/ input_polling_used c-src/emacs/src/keyboard.c /^input_polling_used (void)$/ input_was_pending c-src/emacs/src/keyboard.c 287 insert-abbrev-table-description c-src/abbrev.c /^DEFUN ("insert-abbrev-table-description", Finsert_/ insertion_type c-src/emacs/src/lisp.h 1989 insertname pas-src/common.pas /^function insertname;(*($/ -instance_method ruby-src/test.rb /^ def instance_method$/ +INSERT_TREE_NODE pas-src/common.pas /^procedure INSERT_TREE_NODE;(*( $/ +Install_Abort_Handler/p ada-src/2ataspri.adb /^ procedure Install_Abort_Handler (Handler : Abor/ +Install_Abort_Handler/p ada-src/2ataspri.ads /^ procedure Install_Abort_Handler (Handler : Abor/ +Install_Error_Handler/p ada-src/2ataspri.adb /^ procedure Install_Error_Handler (Handler : Syst/ +Install_Error_Handler/p ada-src/2ataspri.ads /^ procedure Install_Error_Handler (Handler : Syst/ instance_method_equals= ruby-src/test.rb /^ def instance_method_equals=$/ instance_method_exclamation! ruby-src/test.rb /^ def instance_method_exclamation!$/ instance_method_question? ruby-src/test.rb /^ def instance_method_question?$/ -instr y-src/parse.y 81 +instance_method ruby-src/test.rb /^ def instance_method$/ +INSTANTIATE_MDIAGARRAY_FRIENDS cp-src/MDiagArray2.h /^#define INSTANTIATE_MDIAGARRAY_FRIENDS(T) \\$/ instruct c-src/etags.c 2527 -int merc-src/accumulator.m /^:- import_module int.$/ -intNumber go-src/test1.go 13 +instr y-src/parse.y 81 +INT_BIT c-src/emacs/src/gmalloc.c 124 +INT c-src/h.h 32 integer c-src/emacs/src/lisp.h 2127 -integer y-src/cccp.y 112 integer_overflow y-src/cccp.y /^integer_overflow ()$/ +INTEGERP c-src/emacs/src/lisp.h /^# define INTEGERP(x) lisp_h_INTEGERP (x)$/ +INTEGER_TO_CONS c-src/emacs/src/lisp.h /^#define INTEGER_TO_CONS(i) \\$/ integertonmstr pas-src/common.pas /^function integertonmstr; (* (TheInteger : integer)/ +integer y-src/cccp.y 112 intensity1 f-src/entry.for /^ & intensity1(efv,fv,svin,svquad,sfpv,maxp,val/ intensity1 f-src/entry.strange /^ & intensity1(efv,fv,svin,svquad,sfpv,maxp,val/ intensity1 f-src/entry.strange_suffix /^ & intensity1(efv,fv,svin,svquad,sfpv,maxp,val/ -interface merc-src/accumulator.m /^:- interface.$/ interface_locate c-src/c.c /^interface_locate(void)$/ -intern c-src/emacs/src/lisp.h /^intern (const char *str)$/ -intern_c_string c-src/emacs/src/lisp.h /^intern_c_string (const char *str)$/ +interface merc-src/accumulator.m /^:- interface.$/ internalBitem tex-src/texinfo.tex /^\\def\\internalBitem{\\smallbreak \\parsearg\\itemzzz}$/ internalBitemx tex-src/texinfo.tex /^\\def\\internalBitemx{\\par \\parsearg\\itemzzz}$/ internalBkitem tex-src/texinfo.tex /^\\def\\internalBkitem{\\smallbreak \\parsearg\\kitemzzz/ @@ -2982,87 +1926,123 @@ internalBxitem tex-src/texinfo.tex /^\\def\\internalBxitem "#1"{\\def\\xitemsubt internalBxitemx tex-src/texinfo.tex /^\\def\\internalBxitemx "#1"{\\def\\xitemsubtopix{#1} \\/ internal_last_event_frame c-src/emacs/src/keyboard.c 228 internalsetq tex-src/texinfo.tex /^\\def\\internalsetq #1#2{'xrdef {#1}{\\csname #2\\endc/ +intern c-src/emacs/src/lisp.h /^intern (const char *str)$/ +intern_c_string c-src/emacs/src/lisp.h /^intern_c_string (const char *str)$/ interned c-src/emacs/src/lisp.h 672 interpreters c-src/etags.c 197 -interrupt_input c-src/emacs/src/keyboard.c 328 interrupt_input_blocked c-src/emacs/src/keyboard.c 76 interrupt_input_blocked c-src/emacs/src/lisp.h 3048 +interrupt_input c-src/emacs/src/keyboard.c 328 interrupts_deferred c-src/emacs/src/keyboard.c 331 +INTERVAL c-src/emacs/src/lisp.h 1149 +INTMASK c-src/emacs/src/lisp.h 437 +int merc-src/accumulator.m /^:- import_module int.$/ +intNumber go-src/test1.go 13 intoken c-src/etags.c /^#define intoken(c) (_itk[CHAR (c)]) \/* c can be in/ intspec c-src/emacs/src/lisp.h 1688 +INTTYPEBITS c-src/emacs/src/lisp.h 249 +INT_TYPE_SIZE y-src/cccp.y 91 intvar c-src/emacs/src/lisp.h 2277 +INT y-src/cccp.c 6 invalidate_nodes c-src/etags.c /^invalidate_nodes (fdesc *badfdp, node **npp)$/ +Invoking gzip tex-src/gzip.texi /^@node Invoking gzip, Advanced usage, Sample, Top$/ +in_word_set c-src/etags.c /^in_word_set (register const char *str, register un/ io merc-src/accumulator.m /^:- import_module io.$/ -ipc3dCSC19 cp-src/c.C 6 +IpAddrKind rs-src/test.rs 3 ipc3dChannelType cp-src/c.C 1 +ipc3dCSC19 cp-src/c.C 6 ipc3dIslandHierarchy cp-src/c.C 1 ipc3dLinkControl cp-src/c.C 1 -irregular_location cp-src/clheir.hpp /^ irregular_location(double xi, double yi, doubl/ +__ip c.c 159 +/ip ps-src/rfc1245.ps /^\/ip { $/ +/i ps-src/rfc1245.ps /^\/i \/j \/k \/l \/m \/n \/o \/p \/q \/r \/s \/t \/u \/v \/w \/x \/y/ irregular_location cp-src/clheir.hpp 47 -isComment php-src/lce_functions.php /^ function isComment($class)$/ -isHoliday cp-src/functions.cpp /^bool isHoliday ( Date d ){$/ -isLeap cp-src/functions.cpp /^bool isLeap ( int year ){$/ +irregular_location cp-src/clheir.hpp /^ irregular_location(double xi, double yi, doubl/ +ISALNUM c-src/etags.c /^#define ISALNUM(c) isalnum (CHAR (c))$/ +ISALPHA c-src/etags.c /^#define ISALPHA(c) isalpha (CHAR (c))$/ is_associative_construction merc-src/accumulator.m /^:- pred is_associative_construction(module_info::i/ +isComment php-src/lce_functions.php /^ function isComment($class)$/ +IsControlCharName pas-src/common.pas /^function IsControlCharName($/ +IsControlChar pas-src/common.pas /^function IsControlChar; (*($/ is_curly_brace_form c-src/h.h 54 +IS_DAEMON c-src/emacs/src/lisp.h 4257 +IS_DAEMON c-src/emacs/src/lisp.h 4261 +ISDIGIT c-src/etags.c /^#define ISDIGIT(c) isdigit (CHAR (c))$/ is_explicit c-src/h.h 49 is_func c-src/etags.c 221 +isHoliday cp-src/functions.cpp /^bool isHoliday ( Date d ){$/ is_hor_space y-src/cccp.y 953 is_idchar y-src/cccp.y 948 is_idstart y-src/cccp.y 950 +isLeap cp-src/functions.cpp /^bool isLeap ( int year ){$/ +ISLOWER c-src/etags.c /^#define ISLOWER(c) islower (CHAR (c))$/ is_muldiv_operation cp-src/c.C /^is_muldiv_operation(pc)$/ -is_ordset prol-src/ordsets.prolog /^is_ordset(X) :- var(X), !, fail.$/ -is_recursive_case merc-src/accumulator.m /^:- pred is_recursive_case(list(hlds_goal)::in, pre/ +ISO_FUNCTION_KEY_OFFSET c-src/emacs/src/keyboard.c 5149 iso_lispy_function_keys c-src/emacs/src/keyboard.c 5151 isoperator prol-src/natded.prolog /^isoperator(Char):-$/ isoptab prol-src/natded.prolog /^isoptab('%').$/ +is_ordset prol-src/ordsets.prolog /^is_ordset(X) :- var(X), !, fail.$/ +is_recursive_case merc-src/accumulator.m /^:- pred is_recursive_case(list(hlds_goal)::in, pre/ +Is_Set/f ada-src/2ataspri.adb /^ function Is_Set (Cell : in TAS_Cell) return Bo/ +Is_Set/f ada-src/2ataspri.ads /^ function Is_Set (Cell : in TAS_Cell)/ +ISUPPER c-src/etags.c /^# define ISUPPER(c) isupper (CHAR (c))$/ iswhite c-src/etags.c /^#define iswhite(c) (_wht[CHAR (c)]) \/* c is white / -item tex-src/texinfo.tex /^\\def\\item{\\errmessage{@item while not in a table}}/ -item tex-src/texinfo.tex /^\\let\\item = \\internalBitem %$/ -item tex-src/texinfo.tex /^\\let\\item=\\itemizeitem}$/ -item_properties c-src/emacs/src/keyboard.c 7568 itemcontents tex-src/texinfo.tex /^\\def\\itemcontents{#1}%$/ itemfont tex-src/texinfo.tex /^\\def\\itemfont{#2}%$/ itemindex tex-src/texinfo.tex /^\\let\\itemindex=#1%$/ -itemize tex-src/texinfo.tex /^\\def\\itemize{\\parsearg\\itemizezzz}$/ itemizeitem tex-src/texinfo.tex /^\\def\\itemizeitem{%$/ +itemize tex-src/texinfo.tex /^\\def\\itemize{\\parsearg\\itemizezzz}$/ itemizey tex-src/texinfo.tex /^\\def\\itemizey #1#2{%$/ itemizezzz tex-src/texinfo.tex /^\\def\\itemizezzz #1{%$/ +item_properties c-src/emacs/src/keyboard.c 7568 +item tex-src/texinfo.tex /^\\def\\item{\\errmessage{@item while not in a table}}/ +item tex-src/texinfo.tex /^\\let\\item = \\internalBitem %$/ +item tex-src/texinfo.tex /^\\let\\item=\\itemizeitem}$/ itemx tex-src/texinfo.tex /^\\def\\itemx{\\errmessage{@itemx while not in a table/ itemx tex-src/texinfo.tex /^\\let\\itemx = \\internalBitemx %$/ itemzzz tex-src/texinfo.tex /^\\def\\itemzzz #1{\\begingroup %$/ +i tex-src/texinfo.tex /^\\def\\i##1{\\realbackslash i {##1}}%$/ +i tex-src/texinfo.tex /^\\def\\i##1{\\realbackslash i {##1}}$/ +i tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ +i tex-src/texinfo.tex /^\\let\\i=\\indexdummyfont$/ +i tex-src/texinfo.tex /^\\let\\i=\\smartitalic$/ ivarheader tex-src/texinfo.tex /^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/ ivarx\defivarheader tex-src/texinfo.tex /^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/ +JAVASRC make-src/Makefile /^JAVASRC=AWTEMul.java KeyEve.java SMan.java SysCol./ jmp c-src/emacs/src/lisp.h 3044 just_read_file c-src/etags.c /^just_read_file (FILE *inf)$/ -kbd tex-src/texinfo.tex /^\\def\\kbd##1{\\realbackslash kbd {##1}}$/ -kbd tex-src/texinfo.tex /^\\def\\kbd##1{\\realbackslash kbd {##1}}%$/ -kbd tex-src/texinfo.tex /^\\def\\kbd#1{\\def\\look{#1}\\expandafter\\kbdfoo\\look??/ -kbd tex-src/texinfo.tex /^\\let\\kbd=\\indexdummyfont$/ kbd_buffer c-src/emacs/src/keyboard.c 291 kbd_buffer_events_waiting c-src/emacs/src/keyboard.c /^kbd_buffer_events_waiting (void)$/ kbd_buffer_get_event c-src/emacs/src/keyboard.c /^kbd_buffer_get_event (KBOARD **kbp,$/ kbd_buffer_nr_stored c-src/emacs/src/keyboard.c /^kbd_buffer_nr_stored (void)$/ +KBD_BUFFER_SIZE c-src/emacs/src/keyboard.c 82 kbd_buffer_store_event c-src/emacs/src/keyboard.c /^kbd_buffer_store_event (register struct input_even/ kbd_buffer_store_event_hold c-src/emacs/src/keyboard.c /^kbd_buffer_store_event_hold (register struct input/ kbd_buffer_store_help_event c-src/emacs/src/keyboard.c /^kbd_buffer_store_help_event (Lisp_Object frame, Li/ kbd_buffer_unget_event c-src/emacs/src/keyboard.c /^kbd_buffer_unget_event (register struct input_even/ kbd_fetch_ptr c-src/emacs/src/keyboard.c 297 -kbd_store_ptr c-src/emacs/src/keyboard.c 302 kbdfoo tex-src/texinfo.tex /^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/ +kbd_store_ptr c-src/emacs/src/keyboard.c 302 +kbd tex-src/texinfo.tex /^\\def\\kbd#1{\\def\\look{#1}\\expandafter\\kbdfoo\\look??/ +kbd tex-src/texinfo.tex /^\\def\\kbd##1{\\realbackslash kbd {##1}}%$/ +kbd tex-src/texinfo.tex /^\\def\\kbd##1{\\realbackslash kbd {##1}}$/ +kbd tex-src/texinfo.tex /^\\let\\kbd=\\indexdummyfont$/ kboard c-src/emacs/src/keyboard.c 860 kboard_stack c-src/emacs/src/keyboard.c 858 kboard_stack c-src/emacs/src/keyboard.c 864 -key tex-src/texinfo.tex /^\\def\\key #1{{\\tt \\exhyphenpenalty=10000\\uppercase{/ -key tex-src/texinfo.tex /^\\def\\key##1{\\realbackslash key {##1}}$/ -key tex-src/texinfo.tex /^\\def\\key##1{\\realbackslash key {##1}}%$/ -key tex-src/texinfo.tex /^\\let\\key=\\indexdummyfont$/ +KBYTES objc-src/PackInsp.m 58 key_and_value c-src/emacs/src/lisp.h 1868 keyremap c-src/emacs/src/keyboard.c 8742 keyremap c-src/emacs/src/keyboard.c 8754 keyremap_step c-src/emacs/src/keyboard.c /^keyremap_step (Lisp_Object *keybuf, int bufsize, v/ keys_of_keyboard c-src/emacs/src/keyboard.c /^keys_of_keyboard (void)$/ -keyval prol-src/natded.prolog /^keyval(key(Key,Val)) --> [Key,'='], valseq(Val).$/ +key tex-src/texinfo.tex /^\\def\\key##1{\\realbackslash key {##1}}%$/ +key tex-src/texinfo.tex /^\\def\\key##1{\\realbackslash key {##1}}$/ +key tex-src/texinfo.tex /^\\def\\key #1{{\\tt \\exhyphenpenalty=10000\\uppercase{/ +key tex-src/texinfo.tex /^\\let\\key=\\indexdummyfont$/ +KEY_TO_CHAR c-src/emacs/src/keyboard.c /^#define KEY_TO_CHAR(k) (XINT (k) & ((1 << CHARACTE/ keyvalcgi prol-src/natded.prolog /^keyvalcgi(Key,Val):-$/ +keyval prol-src/natded.prolog /^keyval(key(Key,Val)) --> [Key,'='], valseq(Val).$/ keyvalscgi prol-src/natded.prolog /^keyvalscgi(KeyVals),$/ keyvalseq prol-src/natded.prolog /^keyvalseq([KeyVal|KeyVals]) --> $/ keyword_parsing y-src/cccp.y 73 @@ -3085,42 +2065,56 @@ kset_local_function_key_map c-src/emacs/src/keyboard.c /^kset_local_function_key kset_overriding_terminal_local_map c-src/emacs/src/keyboard.c /^kset_overriding_terminal_local_map (struct kboard / kset_real_last_command c-src/emacs/src/keyboard.c /^kset_real_last_command (struct kboard *kb, Lisp_Ob/ kset_system_key_syms c-src/emacs/src/keyboard.c /^kset_system_key_syms (struct kboard *kb, Lisp_Obje/ -l tex-src/texinfo.tex /^\\def\\l#1{{\\li #1}\\null} % $/ -l tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ +LabeledEntry pyt-src/server.py /^class LabeledEntry(Frame):$/ labelspace tex-src/texinfo.tex /^\\def\\labelspace{\\hskip1em \\relax}$/ lang c-src/etags.c 208 lang c-src/etags.c 251 lang c-src/etags.c 259 +Lang_function c-src/etags.c 182 +Lang_function c-src/h.h 6 lang_names c-src/etags.c 718 language c-src/etags.c 199 -last-tag el-src/emacs/lisp/progmodes/etags.el /^(defvar last-tag nil$/ last_abbrev_point c-src/abbrev.c 79 +lasta c.c 272 +lastargmargin tex-src/texinfo.tex /^\\newskip\\deflastargmargin \\deflastargmargin=18pt$/ +lastargmargin tex-src/texinfo.tex /^\\setbox0=\\hbox{\\hskip \\deflastargmargin{\\rm #2}\\hs/ last_auto_save c-src/emacs/src/keyboard.c 214 +lastb c.c 278 last_heapinfo c-src/emacs/src/gmalloc.c 403 last_mouse_button c-src/emacs/src/keyboard.c 5215 last_mouse_x c-src/emacs/src/keyboard.c 5216 last_mouse_y c-src/emacs/src/keyboard.c 5217 +lastnode tex-src/texinfo.tex /^\\def\\nodexxx[#1,#2]{\\gdef\\lastnode{#1}}$/ +lastnode tex-src/texinfo.tex /^\\let\\lastnode=\\relax}$/ +lastnode tex-src/texinfo.tex /^\\let\\lastnode=\\relax$/ last_non_minibuf_size c-src/emacs/src/keyboard.c 207 last_point_position c-src/emacs/src/keyboard.c 217 last_state_size c-src/emacs/src/gmalloc.c 402 +last-tag el-src/emacs/lisp/progmodes/etags.el /^(defvar last-tag nil$/ last_undo_boundary c-src/emacs/src/keyboard.c 1287 -lasta c.c 272 -lastargmargin tex-src/texinfo.tex /^\\newskip\\deflastargmargin \\deflastargmargin=18pt$/ -lastargmargin tex-src/texinfo.tex /^\\setbox0=\\hbox{\\hskip \\deflastargmargin{\\rm #2}\\hs/ -lastb c.c 278 -lastnode tex-src/texinfo.tex /^\\def\\nodexxx[#1,#2]{\\gdef\\lastnode{#1}}$/ -lastnode tex-src/texinfo.tex /^\\let\\lastnode=\\relax$/ -lastnode tex-src/texinfo.tex /^\\let\\lastnode=\\relax}$/ +LATEST make-src/Makefile /^LATEST=17$/ lb c-src/etags.c 2923 lbrb tex-src/texinfo.tex /^\\def\\lbrb{{\\bf\\char`\\[}} \\def\\rbrb{{\\bf\\char`\\]}}$/ lbs c-src/etags.c 2924 -lce php-src/lce_functions.php /^ function lce()$/ lce_bindtextdomain php-src/lce_functions.php /^ function lce_bindtextdomain($d_name, $d_path/ lce_bindtextdomain php-src/lce_functions.php /^ function lce_bindtextdomain($domain, $path)$/ +LCE_COMMENT php-src/lce_functions.php 13 +LCE_COMMENT_TOOL php-src/lce_functions.php 17 +LCE_COMMENT_USER php-src/lce_functions.php 15 lce_dgettext php-src/lce_functions.php /^ function lce_dgettext($domain, $msgid)$/ +LCE_FUNCTIONS php-src/lce_functions.php 4 lce_geteditcode php-src/lce_functions.php /^ function lce_geteditcode($type, $name, $text, $r/ lce_gettext php-src/lce_functions.php /^ function lce_gettext($msgid)$/ +L_CELL y-src/parse.c 10 +LCE_MSGID php-src/lce_functions.php 19 +LCE_MSGSTR php-src/lce_functions.php 21 +lce php-src/lce_functions.php /^ function lce()$/ lce_textdomain php-src/lce_functions.php /^ function lce_textdomain($domain)$/ +LCE_TEXT php-src/lce_functions.php 23 +LCE_UNKNOWN php-src/lce_functions.php 9 +LCE_WS php-src/lce_functions.php 11 +L_CONST y-src/parse.c 13 +LDFLAGS make-src/Makefile /^LDFLAGS=#-static -lc_p$/ leasqr html-src/software.html /^Leasqr$/ left c-src/etags.c 216 left_shift y-src/cccp.y /^left_shift (a, b)$/ @@ -3128,56 +2122,102 @@ len c-src/etags.c 237 length c-src/etags.c 2495 length y-src/cccp.y 113 length y-src/cccp.y 44 -less tex-src/texinfo.tex /^\\def\\less{\\realbackslash less}$/ +LEQ y-src/cccp.c 14 +/less ps-src/rfc1245.ps /^\/less \/equal \/greater \/question \/at \/A \/B \/C \/D \/E/ less tex-src/texinfo.tex /^\\def\\less{\\realbackslash less}%$/ +less tex-src/texinfo.tex /^\\def\\less{\\realbackslash less}$/ let c-src/emacs/src/lisp.h 2981 letter tex-src/texinfo.tex /^ {#1}{Appendix \\appendixletter}{\\noexpand\\folio}}/ +letter tex-src/texinfo.tex /^{#1}{\\appendixletter}{\\the\\secno}{\\noexpand\\folio}/ +letter tex-src/texinfo.tex /^{#1}{\\appendixletter}{\\the\\secno}{\\the\\subsecno}{\\/ letter tex-src/texinfo.tex /^ {\\appendixletter}$/ letter tex-src/texinfo.tex /^ {\\appendixletter}{\\the\\secno}{\\the\\subsecno}{\\th/ letter tex-src/texinfo.tex /^\\chapmacro {#1}{Appendix \\appendixletter}%$/ letter tex-src/texinfo.tex /^\\gdef\\thissection{#1}\\secheading {#1}{\\appendixlet/ letter tex-src/texinfo.tex /^\\global\\advance \\appendixno by 1 \\message{Appendix/ letter tex-src/texinfo.tex /^\\subsecheading {#1}{\\appendixletter}{\\the\\secno}{\\/ -letter tex-src/texinfo.tex /^{#1}{\\appendixletter}{\\the\\secno}{\\noexpand\\folio}/ -letter tex-src/texinfo.tex /^{#1}{\\appendixletter}{\\the\\secno}{\\the\\subsecno}{\\/ letter: tex-src/texinfo.tex /^\\xdef\\thischapter{Appendix \\appendixletter: \\noexp/ level c-src/emacs/src/lisp.h 3153 lex prol-src/natded.prolog /^lex(W,SynOut,Sem):-$/ lexptr y-src/cccp.y 332 -li tex-src/texinfo.tex /^\\let\\li = \\sf % Sometimes we call it \\li, not \\sf./ +LE y-src/parse.c 7 +L_FN0 y-src/parse.c 14 +L_FN1R y-src/parse.c 20 +L_FN1 y-src/parse.c 15 +L_FN2R y-src/parse.c 21 +L_FN2 y-src/parse.c 16 +L_FN3R y-src/parse.c 22 +L_FN3 y-src/parse.c 17 +L_FN4R y-src/parse.c 23 +L_FN4 y-src/parse.c 18 +L_FNNR y-src/parse.c 24 +L_FNN y-src/parse.c 19 +L_getit c-src/etags.c /^L_getit (void)$/ +L_GE y-src/parse.c 27 +__libc_atexit c-src/exit.c 30 +__libc_atexit c-src/exit.strange_suffix 30 libs merc-src/accumulator.m /^:- import_module libs.$/ licenze html-src/softwarelibero.html /^Licenze d'uso di un programma$/ +LIGHTBLUE cp-src/screen.hpp 21 +LIGHTCYAN cp-src/screen.hpp 23 +LIGHTGRAY cp-src/screen.hpp 19 +LIGHTGREEN cp-src/screen.hpp 22 +LIGHTMAGENTA cp-src/screen.hpp 25 +LIGHTRED cp-src/screen.hpp 24 limit cp-src/Range.h /^ double limit (void) const { return rng_limit; }$/ -line c-src/etags.c 2493 -line perl-src/htlmify-cystic 37 -line y-src/parse.y 87 -lineCount php-src/lce_functions.php /^ function lineCount($entry)$/ linebuffer c-src/etags.c 239 linebuffer_init c-src/etags.c /^linebuffer_init (linebuffer *lbp)$/ linebuffer_setlen c-src/etags.c /^linebuffer_setlen (linebuffer *lbp, int toksize)$/ +lineCount php-src/lce_functions.php /^ function lineCount($entry)$/ +line c-src/etags.c 2493 lineno c-src/emacs/src/lisp.h 3147 lineno c-src/etags.c 2506 linenumber tex-src/texinfo.tex /^ \\def\\linenumber{\\the\\inputlineno:\\space}$/ linenumber tex-src/texinfo.tex /^ \\let\\linenumber = \\empty % Non-3.0.$/ +line perl-src/htlmify-cystic 37 linepos c-src/etags.c 2507 linepos c-src/etags.c 2922 +line y-src/parse.y 87 links html-src/software.html /^Links to interesting software$/ -lisp tex-src/texinfo.tex /^\\def\\lisp{\\aboveenvbreak$/ +Lisp_Bits c-src/emacs/src/lisp.h 239 +Lisp_Boolfwd c-src/emacs/src/lisp.h 2284 +Lisp_Bool_Vector c-src/emacs/src/lisp.h 1384 +Lisp_Buffer_Local_Value c-src/emacs/src/lisp.h 2334 +Lisp_Buffer_Objfwd c-src/emacs/src/lisp.h 2302 +Lisp_Char_Table c-src/emacs/src/lisp.h 1575 +Lisp_Compiled c-src/emacs/src/lisp.h 2429 +Lisp_Cons c-src/emacs/src/lisp.h 475 lisp_eval_depth c-src/emacs/src/lisp.h 3045 +Lisp_Finalizer c-src/emacs/src/lisp.h 2186 +Lisp_Float c-src/emacs/src/lisp.h 2391 +Lisp_Float c-src/emacs/src/lisp.h 477 +Lisp_Free c-src/emacs/src/lisp.h 2201 +Lisp_functions c-src/etags.c /^Lisp_functions (FILE *inf)$/ +Lisp_Fwd_Bool c-src/emacs/src/lisp.h 505 +Lisp_Fwd_Buffer_Obj c-src/emacs/src/lisp.h 507 +Lisp_Fwd c-src/emacs/src/lisp.h 2368 +Lisp_Fwd_Int c-src/emacs/src/lisp.h 504 +Lisp_Fwd_Kboard_Obj c-src/emacs/src/lisp.h 508 +Lisp_Fwd_Obj c-src/emacs/src/lisp.h 506 +Lisp_Fwd_Type c-src/emacs/src/lisp.h 502 +Lisp_Hash_Table c-src/emacs/src/lisp.h 1823 +lisp_h_check_cons_list c-src/emacs/src/lisp.h /^# define lisp_h_check_cons_list() ((void) 0)$/ lisp_h_CHECK_LIST_CONS c-src/emacs/src/lisp.h /^#define lisp_h_CHECK_LIST_CONS(x, y) CHECK_TYPE (C/ lisp_h_CHECK_NUMBER c-src/emacs/src/lisp.h /^#define lisp_h_CHECK_NUMBER(x) CHECK_TYPE (INTEGER/ lisp_h_CHECK_SYMBOL c-src/emacs/src/lisp.h /^#define lisp_h_CHECK_SYMBOL(x) CHECK_TYPE (SYMBOLP/ lisp_h_CHECK_TYPE c-src/emacs/src/lisp.h /^#define lisp_h_CHECK_TYPE(ok, predicate, x) \\$/ lisp_h_CONSP c-src/emacs/src/lisp.h /^#define lisp_h_CONSP(x) (XTYPE (x) == Lisp_Cons)$/ +Lisp_help c-src/etags.c 591 lisp_h_EQ c-src/emacs/src/lisp.h /^#define lisp_h_EQ(x, y) (XLI (x) == XLI (y))$/ lisp_h_FLOATP c-src/emacs/src/lisp.h /^#define lisp_h_FLOATP(x) (XTYPE (x) == Lisp_Float)/ lisp_h_INTEGERP c-src/emacs/src/lisp.h /^#define lisp_h_INTEGERP(x) ((XTYPE (x) & (Lisp_Int/ +lisp_h_make_number c-src/emacs/src/lisp.h /^# define lisp_h_make_number(n) \\$/ lisp_h_MARKERP c-src/emacs/src/lisp.h /^#define lisp_h_MARKERP(x) (MISCP (x) && XMISCTYPE / lisp_h_MISCP c-src/emacs/src/lisp.h /^#define lisp_h_MISCP(x) (XTYPE (x) == Lisp_Misc)$/ lisp_h_NILP c-src/emacs/src/lisp.h /^#define lisp_h_NILP(x) EQ (x, Qnil)$/ lisp_h_SET_SYMBOL_VAL c-src/emacs/src/lisp.h /^#define lisp_h_SET_SYMBOL_VAL(sym, v) \\$/ -lisp_h_SYMBOLP c-src/emacs/src/lisp.h /^#define lisp_h_SYMBOLP(x) (XTYPE (x) == Lisp_Symbo/ lisp_h_SYMBOL_CONSTANT_P c-src/emacs/src/lisp.h /^#define lisp_h_SYMBOL_CONSTANT_P(sym) (XSYMBOL (sy/ +lisp_h_SYMBOLP c-src/emacs/src/lisp.h /^#define lisp_h_SYMBOLP(x) (XTYPE (x) == Lisp_Symbo/ lisp_h_SYMBOL_VAL c-src/emacs/src/lisp.h /^#define lisp_h_SYMBOL_VAL(sym) \\$/ lisp_h_VECTORLIKEP c-src/emacs/src/lisp.h /^#define lisp_h_VECTORLIKEP(x) (XTYPE (x) == Lisp_V/ lisp_h_XCAR c-src/emacs/src/lisp.h /^#define lisp_h_XCAR(c) XCONS (c)->car$/ @@ -3185,18 +2225,64 @@ lisp_h_XCDR c-src/emacs/src/lisp.h /^#define lisp_h_XCDR(c) XCONS (c)->u.cdr$/ lisp_h_XCONS c-src/emacs/src/lisp.h /^#define lisp_h_XCONS(a) \\$/ lisp_h_XFASTINT c-src/emacs/src/lisp.h /^# define lisp_h_XFASTINT(a) XINT (a)$/ lisp_h_XHASH c-src/emacs/src/lisp.h /^#define lisp_h_XHASH(a) XUINT (a)$/ -lisp_h_XIL c-src/emacs/src/lisp.h /^# define lisp_h_XIL(i) ((Lisp_Object) { i })$/ lisp_h_XIL c-src/emacs/src/lisp.h /^# define lisp_h_XIL(i) (i)$/ +lisp_h_XIL c-src/emacs/src/lisp.h /^# define lisp_h_XIL(i) ((Lisp_Object) { i })$/ lisp_h_XINT c-src/emacs/src/lisp.h /^# define lisp_h_XINT(a) (XLI (a) >> INTTYPEBITS)$/ -lisp_h_XLI c-src/emacs/src/lisp.h /^# define lisp_h_XLI(o) ((o).i)$/ lisp_h_XLI c-src/emacs/src/lisp.h /^# define lisp_h_XLI(o) (o)$/ +lisp_h_XLI c-src/emacs/src/lisp.h /^# define lisp_h_XLI(o) ((o).i)$/ lisp_h_XPNTR c-src/emacs/src/lisp.h /^#define lisp_h_XPNTR(a) \\$/ lisp_h_XSYMBOL c-src/emacs/src/lisp.h /^# define lisp_h_XSYMBOL(a) \\$/ lisp_h_XTYPE c-src/emacs/src/lisp.h /^# define lisp_h_XTYPE(a) ((enum Lisp_Type) (XLI (a/ lisp_h_XUNTAG c-src/emacs/src/lisp.h /^# define lisp_h_XUNTAG(a, type) ((void *) (intptr_/ -lisp_h_check_cons_list c-src/emacs/src/lisp.h /^# define lisp_h_check_cons_list() ((void) 0)$/ -lisp_h_make_number c-src/emacs/src/lisp.h /^# define lisp_h_make_number(n) \\$/ +LISP_INITIALLY c-src/emacs/src/lisp.h /^#define LISP_INITIALLY(i) (i)$/ +LISP_INITIALLY c-src/emacs/src/lisp.h /^#define LISP_INITIALLY(i) {i}$/ +LISP_INITIALLY_ZERO c-src/emacs/src/lisp.h 582 +Lisp_Int0 c-src/emacs/src/lisp.h 461 +Lisp_Int1 c-src/emacs/src/lisp.h 462 +Lisp_Intfwd c-src/emacs/src/lisp.h 2274 +Lisp_Kboard_Objfwd c-src/emacs/src/lisp.h 2362 +LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^#define LISP_MACRO_DEFUN(name, type, argdecls, arg/ +LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (CONSP, bool, (Lisp_Object x), (x/ +LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (NILP, bool, (Lisp_Object x), (x)/ +LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (SYMBOL_VAL, Lisp_Object, (struct/ +LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (XCAR, Lisp_Object, (Lisp_Object / +LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (XCONS, struct Lisp_Cons *, (Lisp/ +LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (XHASH, EMACS_INT, (Lisp_Object a/ +LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (XLI, EMACS_INT, (Lisp_Object o),/ +LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (XPNTR, void *, (Lisp_Object a), / +LISP_MACRO_DEFUN_VOID c-src/emacs/src/lisp.h /^#define LISP_MACRO_DEFUN_VOID(name, argdecls, args/ +LISP_MACRO_DEFUN_VOID c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN_VOID (CHECK_LIST_CONS, (Lisp_Obje/ +LISP_MACRO_DEFUN_VOID c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN_VOID (CHECK_TYPE,$/ +LISP_MACRO_DEFUN_VOID c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN_VOID (SET_SYMBOL_VAL,$/ +Lisp_Marker c-src/emacs/src/lisp.h 1978 +Lisp_Misc_Any c-src/emacs/src/lisp.h 1971 +Lisp_Misc c-src/emacs/src/lisp.h 2212 +Lisp_Misc c-src/emacs/src/lisp.h 458 +Lisp_Misc_Finalizer c-src/emacs/src/lisp.h 491 +Lisp_Misc_Float c-src/emacs/src/lisp.h 494 +Lisp_Misc_Free c-src/emacs/src/lisp.h 487 +Lisp_Misc_Limit c-src/emacs/src/lisp.h 496 +Lisp_Misc_Marker c-src/emacs/src/lisp.h 488 +Lisp_Misc_Overlay c-src/emacs/src/lisp.h 489 +Lisp_Misc_Save_Value c-src/emacs/src/lisp.h 490 +Lisp_Misc_Type c-src/emacs/src/lisp.h 485 +Lisp_Object c-src/emacs/src/lisp.h 567 +Lisp_Object c-src/emacs/src/lisp.h 577 +Lisp_Objfwd c-src/emacs/src/lisp.h 2294 +Lisp_Overlay c-src/emacs/src/lisp.h 2021 lisppar tex-src/texinfo.tex /^\\gdef\\lisppar{\\null\\endgraf}}$/ +Lisp_Save_Type c-src/emacs/src/lisp.h 2064 +Lisp_Save_Value c-src/emacs/src/lisp.h 2110 +Lisp_String c-src/emacs/src/lisp.h 466 +Lisp_Sub_Char_Table c-src/emacs/src/lisp.h 1606 +Lisp_Subr c-src/emacs/src/lisp.h 1670 +Lisp_suffixes c-src/etags.c 589 +Lisp_Symbol c-src/emacs/src/lisp.h 454 +Lisp_Symbol c-src/emacs/src/lisp.h 654 +lisp tex-src/texinfo.tex /^\\def\\lisp{\\aboveenvbreak$/ +Lisp_Type c-src/emacs/src/lisp.h 451 +Lisp_Vector c-src/emacs/src/lisp.h 1369 +Lisp_Vectorlike c-src/emacs/src/lisp.h 472 lispy_accent_codes c-src/emacs/src/keyboard.c 4634 lispy_accent_keys c-src/emacs/src/keyboard.c 4741 lispy_drag_n_drop_names c-src/emacs/src/keyboard.c 5181 @@ -3206,50 +2292,110 @@ lispy_kana_keys c-src/emacs/src/keyboard.c 5026 lispy_modifier_list c-src/emacs/src/keyboard.c /^lispy_modifier_list (int modifiers)$/ lispy_multimedia_keys c-src/emacs/src/keyboard.c 4962 lispy_wheel_names c-src/emacs/src/keyboard.c 5174 +list2i c-src/emacs/src/lisp.h /^list2i (EMACS_INT x, EMACS_INT y)$/ +list3i c-src/emacs/src/lisp.h /^list3i (EMACS_INT x, EMACS_INT y, EMACS_INT w)$/ +list4i c-src/emacs/src/lisp.h /^list4i (EMACS_INT x, EMACS_INT y, EMACS_INT w, EMA/ +LISTCONTENTSBUTTON objc-src/PackInsp.m 48 +LISTCONTENTS objc-src/PackInsp.m 39 list c-src/emacs/src/gmalloc.c 186 +LISTDESCRIPTIONBUTTON objc-src/PackInsp.m 49 +ListEdit pyt-src/server.py /^class ListEdit(Frame):$/ list merc-src/accumulator.m /^:- import_module list.$/ list-tags el-src/emacs/lisp/progmodes/etags.el /^(defun list-tags (file &optional _next-match)$/ list-tags-function el-src/emacs/lisp/progmodes/etags.el /^(defvar list-tags-function nil$/ -list2i c-src/emacs/src/lisp.h /^list2i (EMACS_INT x, EMACS_INT y)$/ -list3i c-src/emacs/src/lisp.h /^list3i (EMACS_INT x, EMACS_INT y, EMACS_INT w)$/ -list4i c-src/emacs/src/lisp.h /^list4i (EMACS_INT x, EMACS_INT y, EMACS_INT w, EMA/ list_to_ord_set prol-src/ordsets.prolog /^list_to_ord_set(List, Set) :-$/ +li tex-src/texinfo.tex /^\\let\\li = \\sf % Sometimes we call it \\li, not \\sf./ +LL_Assert/p ada-src/2ataspri.adb /^ procedure LL_Assert (B : Boolean; M : String) i/ +LL_Assert/p ada-src/2ataspri.ads /^ procedure LL_Assert (B : Boolean; M : String);$/ +L_LE y-src/parse.c 25 +LL_Task_Procedure_Access/t ada-src/2ataspri.ads /^ type LL_Task_Procedure_Access is access procedu/ +LL_Task_Procedure_Access/t ada-src/etags-test-for.ada /^ type LL_Task_Procedure_Access is access procedu/ +LL_Wrapper/p ada-src/2ataspri.adb /^ procedure LL_Wrapper (T : TCB_Ptr);$/ +LL_Wrapper/p ada-src/2ataspri.adb /^ procedure LL_Wrapper (T : TCB_Ptr) is$/ +LL_Wrapper/p ada-src/etags-test-for.ada /^ procedure LL_Wrapper (T : TCB_Ptr);$/ +L_NE y-src/parse.c 26 lno c-src/etags.c 223 -load objc-src/PackInsp.m /^-load$/ +/lnormalize ps-src/rfc1245.ps /^\/lnormalize { $/ loadContentsOf objc-src/PackInsp.m /^-loadContentsOf:(const char *)type inTable:(HashTa/ loadImage objc-src/PackInsp.m /^-loadImage$/ loadKeyValuesFrom objc-src/PackInsp.m /^-loadKeyValuesFrom:(const char *)type inTable:(Has/ +load objc-src/PackInsp.m /^-load$/ loadPORManager php-src/lce_functions.php /^ function &loadPORManager()$/ local_if_set c-src/emacs/src/lisp.h 2338 -location cp-src/clheir.hpp /^ location() { }$/ +LOCALIZE_ARCH objc-src/PackInsp.m /^#define LOCALIZE_ARCH(s) NXLoadLocalizedStringFrom/ +LOCALIZE objc-src/PackInsp.m /^#define LOCALIZE(s) NXLoadLocalizedStringFromTabl/ +Locate pas-src/common.pas /^function Locate; (*($/ location cp-src/clheir.hpp 33 +location cp-src/clheir.hpp /^ location() { }$/ +LOCK_ALIGNED_BLOCKS c-src/emacs/src/gmalloc.c /^#define LOCK_ALIGNED_BLOCKS() \\$/ +LOCK_ALIGNED_BLOCKS c-src/emacs/src/gmalloc.c /^#define LOCK_ALIGNED_BLOCKS()$/ +LOCK c-src/emacs/src/gmalloc.c /^#define LOCK() \\$/ +LOCK c-src/emacs/src/gmalloc.c /^#define LOCK()$/ +Lock/t ada-src/2ataspri.ads /^ type Lock is$/ +Lock/t ada-src/2ataspri.ads /^ type Lock is private;$/ loggingall tex-src/texinfo.tex /^\\def\\loggingall{\\tracingcommands2 \\tracingstats2 $/ +LONG_TYPE_SIZE y-src/cccp.y 95 +LOOKING_AT c-src/etags.c /^#define LOOKING_AT(cp, kw) \/* kw is the keyword, / +LOOKING_AT_NOCASE c-src/etags.c /^#define LOOKING_AT_NOCASE(cp, kw) \/* the keyword i/ look tex-src/texinfo.tex /^\\def\\kbd#1{\\def\\look{#1}\\expandafter\\kbdfoo\\look??/ -lookup y-src/cccp.y /^lookup (name, len, hash)$/ lookup_call merc-src/accumulator.m /^:- pred lookup_call(accu_goal_store::in, accu_goal/ +LOOKUP objc-src/PackInsp.m 176 +LOOKUP objc-src/PackInsp.m /^#define LOOKUP(key, notfound) ([table isKey:key] ?/ +lookup y-src/cccp.y /^lookup (name, len, hash)$/ +LOOP_ON_INPUT_LINES c-src/etags.c /^#define LOOP_ON_INPUT_LINES(file_pointer, line_buf/ losespace tex-src/texinfo.tex /^\\def\\losespace #1{#1}$/ lowcase c-src/etags.c /^#define lowcase(c) tolower (CHAR (c))$/ lowercaseenumerate tex-src/texinfo.tex /^\\def\\lowercaseenumerate{%$/ +LowerCaseNmStr pas-src/common.pas /^function LowerCaseNmStr; (*($/ +/L ps-src/rfc1245.ps /^\/L { $/ +/L ps-src/rfc1245.ps /^\/L \/M \/N \/O \/P \/Q \/R \/S \/T \/U \/V \/W \/X \/Y \/Z \/brac/ +L_RANGE y-src/parse.c 11 +LSH y-src/cccp.c 16 +l tex-src/texinfo.tex /^\\def\\l#1{{\\li #1}\\null} % $/ +l tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ +L tex-src/texinfo.tex /^\\let\\L=\\ptexL$/ +LTGT cp-src/MDiagArray2.h 144 +LTGT cp-src/MDiagArray2.h 35 +LTGT cp-src/MDiagArray2.h 39 +LTGT cp-src/MDiagArray2.h 42 +Lua_functions c-src/etags.c /^Lua_functions (FILE *inf)$/ +Lua_help c-src/etags.c 600 +LUASRC make-src/Makefile /^LUASRC=allegro.lua$/ +Lua_suffixes c-src/etags.c 598 lucid_event_type_list_p c-src/emacs/src/keyboard.c /^lucid_event_type_list_p (Lisp_Object object)$/ +L_VAR y-src/parse.c 12 lvvmode tex-src/texinfo.tex /^\\def\\lvvmode{\\vbox to 0pt{}}$/ mabort c-src/emacs/src/gmalloc.c /^mabort (enum mcheck_status status)$/ +macheader tex-src/texinfo.tex /^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/ mach_host_self c-src/machsyscalls.h /^SYSCALL (mach_host_self, -29,$/ +Machine_Exceptions/t ada-src/2ataspri.ads /^ type Machine_Exceptions is new Interfaces.C.POS/ +Machin_T/b ada-src/waroquiers.ada /^ protected body Machin_T is$/ +Machin_T/t ada-src/etags-test-for.ada /^ protected Machin_T is$/ +Machin_T/t ada-src/etags-test-for.ada /^ protected type Machin_T is$/ +Machin_T/t ada-src/waroquiers.ada /^ protected type Machin_T is$/ mach_msg_trap c-src/machsyscalls.h /^SYSCALL (mach_msg_trap, -25,$/ mach_reply_port c-src/machsyscalls.h /^SYSCALL (mach_reply_port, -26,$/ mach_task_self c-src/machsyscalls.h /^SYSCALL (mach_task_self, -28,$/ mach_thread_self c-src/machsyscalls.h /^SYSCALL (mach_thread_self, -27,$/ -macheader tex-src/texinfo.tex /^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/ macx\defmacheader tex-src/texinfo.tex /^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/ +MAGENTA cp-src/screen.hpp 17 +MAGICBYTE c-src/emacs/src/gmalloc.c 1861 magic c-src/emacs/src/gmalloc.c 1868 +MAGICFREE c-src/emacs/src/gmalloc.c 1860 +MAGICWORD c-src/emacs/src/gmalloc.c 1859 mainmagstep tex-src/texinfo.tex /^\\let\\mainmagstep=\\magstep1$/ mainmagstep tex-src/texinfo.tex /^\\let\\mainmagstep=\\magstephalf$/ maintaining.info make-src/Makefile /^maintaining.info: maintaining.texi$/ majorheading tex-src/texinfo.tex /^\\def\\majorheading{\\parsearg\\majorheadingzzz}$/ majorheadingzzz tex-src/texinfo.tex /^\\def\\majorheadingzzz #1{%$/ make-abbrev-table c-src/abbrev.c /^DEFUN ("make-abbrev-table", Fmake_abbrev_table, Sm/ -make_C_tag c-src/etags.c /^make_C_tag (bool isfun)$/ make_coor prol-src/natded.prolog /^make_coor(s(_),Alpha,Sem1,Sem2,Alpha@Sem1@Sem2).$/ +make_C_tag c-src/etags.c /^make_C_tag (bool isfun)$/ make_ctrl_char c-src/emacs/src/keyboard.c /^make_ctrl_char (int c)$/ +MakeDispose pyt-src/server.py /^ def MakeDispose(self):$/ +Makefile_filenames c-src/etags.c 603 +Makefile_help c-src/etags.c 605 +Makefile_targets c-src/etags.c /^Makefile_targets (FILE *inf)$/ make_fixnum_or_float c-src/emacs/src/lisp.h /^#define make_fixnum_or_float(val) \\$/ make_formatted_string c-src/emacs/src/lisp.h /^extern Lisp_Object make_formatted_string (char *, / make_lisp_ptr c-src/emacs/src/lisp.h /^make_lisp_ptr (void *ptr, enum Lisp_Type type)$/ @@ -3260,108 +2406,182 @@ make_lispy_focus_out c-src/emacs/src/keyboard.c /^make_lispy_focus_out (Lisp_Obj make_lispy_movement c-src/emacs/src/keyboard.c /^make_lispy_movement (struct frame *frame, Lisp_Obj/ make_lispy_position c-src/emacs/src/keyboard.c /^make_lispy_position (struct frame *f, Lisp_Object / make_lispy_switch_frame c-src/emacs/src/keyboard.c /^make_lispy_switch_frame (Lisp_Object frame)$/ +MAKE make-src/Makefile /^MAKE:=$(MAKE) --no-print-directory$/ make_number c-src/emacs/src/lisp.h /^# define make_number(n) lisp_h_make_number (n)$/ make_pointer_integer c-src/emacs/src/lisp.h /^make_pointer_integer (void *p)$/ make_scroll_bar_position c-src/emacs/src/keyboard.c /^make_scroll_bar_position (struct input_event *ev, / +MakeSitelist pyt-src/server.py /^ def MakeSitelist(self, master):$/ +MAKESRC make-src/Makefile /^MAKESRC=Makefile$/ make_tag c-src/etags.c /^make_tag (const char *name, \/* tag name, or NULL / make_uninit_sub_char_table c-src/emacs/src/lisp.h /^make_uninit_sub_char_table (int depth, int min_cha/ make_uninit_vector c-src/emacs/src/lisp.h /^make_uninit_vector (ptrdiff_t size)$/ -malloc c-src/emacs/src/gmalloc.c /^extern void *malloc (size_t size) ATTRIBUTE_MALLOC/ -malloc c-src/emacs/src/gmalloc.c /^malloc (size_t size)$/ -malloc c-src/emacs/src/gmalloc.c 1719 -malloc c-src/emacs/src/gmalloc.c 64 -malloc c-src/emacs/src/gmalloc.c 68 malloc_atfork_handler_child c-src/emacs/src/gmalloc.c /^malloc_atfork_handler_child (void)$/ malloc_atfork_handler_parent c-src/emacs/src/gmalloc.c /^malloc_atfork_handler_parent (void)$/ malloc_atfork_handler_prepare c-src/emacs/src/gmalloc.c /^malloc_atfork_handler_prepare (void)$/ +malloc c-src/emacs/src/gmalloc.c 1719 +malloc c-src/emacs/src/gmalloc.c 64 +malloc c-src/emacs/src/gmalloc.c 68 +malloc c-src/emacs/src/gmalloc.c /^extern void *malloc (size_t size) ATTRIBUTE_MALLOC/ +_malloc c-src/emacs/src/gmalloc.c /^_malloc (size_t size)$/ +malloc c-src/emacs/src/gmalloc.c /^malloc (size_t size)$/ malloc_enable_thread c-src/emacs/src/gmalloc.c /^malloc_enable_thread (void)$/ +__malloc_extra_blocks c-src/emacs/src/gmalloc.c 382 +MALLOCFLOOD c-src/emacs/src/gmalloc.c 1862 +mallochook c-src/emacs/src/gmalloc.c /^mallochook (size_t size)$/ malloc_info c-src/emacs/src/gmalloc.c 167 malloc_initialize_1 c-src/emacs/src/gmalloc.c /^malloc_initialize_1 (void)$/ -mallochook c-src/emacs/src/gmalloc.c /^mallochook (size_t size)$/ +__malloc_initialize c-src/emacs/src/gmalloc.c /^__malloc_initialize (void)$/ +__malloc_initialized c-src/emacs/src/gmalloc.c 380 +_malloc_internal c-src/emacs/src/gmalloc.c /^_malloc_internal (size_t size)$/ +_malloc_internal_nolock c-src/emacs/src/gmalloc.c /^_malloc_internal_nolock (size_t size)$/ +_malloc_mutex c-src/emacs/src/gmalloc.c 518 +_malloc_thread_enabled_p c-src/emacs/src/gmalloc.c 520 man manpage make-src/Makefile /^man manpage: etags.1.man$/ +/manualpapersize ps-src/rfc1245.ps /^\/manualpapersize {$/ +MANY c-src/emacs/src/lisp.h 2833 mao c-src/h.h 101 map c-src/emacs/src/keyboard.c 8748 map merc-src/accumulator.m /^:- import_module map.$/ -map_word prol-src/natded.prolog /^map_word([[_]|Ws],Exp):-$/ mapping html-src/algrthms.html /^Mapping the Channel Symbols$/ mapsyn prol-src/natded.prolog /^mapsyn(A\/B,AM\/BM):-$/ +map_word prol-src/natded.prolog /^map_word([[_]|Ws],Exp):-$/ +MARKERP c-src/emacs/src/lisp.h /^# define MARKERP(x) lisp_h_MARKERP (x)$/ mark_kboards c-src/emacs/src/keyboard.c /^mark_kboards (void)$/ math tex-src/texinfo.tex /^\\def\\math#1{\\implicitmath #1\\implicitmath}$/ -max c-src/emacs/src/lisp.h /^#define max(a, b) ((a) > (b) ? (a) : (b))$/ -max c-src/emacs/src/lisp.h 58 +MAX_ALLOCA c-src/emacs/src/lisp.h 4556 +max_args c-src/emacs/src/lisp.h 1686 +maxargs c-src/emacs/src/lisp.h 2831 max c.c /^__attribute__ ((always_inline)) max (int a, int b)/ max c.c /^max (int a, int b)$/ max cp-src/conway.cpp /^#define max(x,y) ((x > y) ? x : y)$/ -max_args c-src/emacs/src/lisp.h 1686 +max c-src/emacs/src/lisp.h 58 +max c-src/emacs/src/lisp.h /^#define max(a, b) ((a) > (b) ? (a) : (b))$/ +MAX_ENCODED_BYTES c-src/emacs/src/keyboard.c 2254 +MAX_HASH_VALUE c-src/etags.c 2329 max_num_directions cp-src/clheir.hpp 31 max_num_generic_objects cp-src/clheir.cpp 9 -maxargs c-src/emacs/src/lisp.h 2831 -maybe merc-src/accumulator.m /^:- import_module maybe.$/ +MAXPATHLEN c-src/etags.c 115 +/max ps-src/rfc1245.ps /^\/max {2 copy lt {exch} if pop} bind def$/ +MAX_WORD_LENGTH c-src/etags.c 2327 maybe_gc c-src/emacs/src/lisp.h /^maybe_gc (void)$/ +maybe merc-src/accumulator.m /^:- import_module maybe.$/ +MAYBEREL y-src/parse.y /^#define MAYBEREL(p) (*(p)=='[' && (isdigit((p)[1])/ +MBYTES objc-src/PackInsp.m 59 +Mcccp y-src/cccp.y /^main ()$/ +Mc cp-src/c.C /^int main (void) { my_function0(0); my_function1(1)/ mcCSC cp-src/c.C 6 mcheck c-src/emacs/src/gmalloc.c /^mcheck (void (*func) (enum mcheck_status))$/ +MCHECK_DISABLED c-src/emacs/src/gmalloc.c 285 +MCHECK_FREE c-src/emacs/src/gmalloc.c 287 +MCHECK_HEAD c-src/emacs/src/gmalloc.c 288 +MCHECK_OK c-src/emacs/src/gmalloc.c 286 mcheck_status c-src/emacs/src/gmalloc.c 283 +MCHECK_TAIL c-src/emacs/src/gmalloc.c 289 mcheck_used c-src/emacs/src/gmalloc.c 2017 +Mconway.cpp cp-src/conway.cpp /^void main(void)$/ mdbcomp merc-src/accumulator.m /^:- import_module mdbcomp.$/ -me22b lua-src/test.lua /^ local function test.me22b (one)$/ +MDiagArray2 cp-src/MDiagArray2.h 78 +MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (const Array& a) : DiagArray2 / +MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (const DiagArray2& a) : DiagArray/ +MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (const MDiagArray2& a) : DiagArra/ +MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (int r, int c, const T& val) : DiagA/ +MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (int r, int c) : DiagArray2 (r, c/ +MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (T *d, int r, int c) : DiagArray2/ +~MDiagArray2 cp-src/MDiagArray2.h /^ ~MDiagArray2 (void) { }$/ +MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (void) : DiagArray2 () { }$/ me_22a lua-src/test.lua /^ function test.me_22a(one, two)$/ +me22b lua-src/test.lua /^ local function test.me22b (one)$/ memalign c-src/emacs/src/gmalloc.c /^memalign (size_t alignment, size_t size)$/ -member prol-src/natded.prolog /^member(X,[X|_]).$/ member_lessthan_goalid merc-src/accumulator.m /^:- pred member_lessthan_goalid(accu_goal_store::in/ +member prol-src/natded.prolog /^member(X,[X|_]).$/ memclear c-src/emacs/src/lisp.h /^memclear (void *p, ptrdiff_t nbytes)$/ -menu tex-src/texinfo.tex /^\\long\\def\\menu #1\\end menu{}$/ menu_bar_item c-src/emacs/src/keyboard.c /^menu_bar_item (Lisp_Object key, Lisp_Object item, / menu_bar_items c-src/emacs/src/keyboard.c /^menu_bar_items (Lisp_Object old)$/ menu_bar_items_index c-src/emacs/src/keyboard.c 7369 menu_bar_items_vector c-src/emacs/src/keyboard.c 7368 menu_bar_one_keymap_changed_items c-src/emacs/src/keyboard.c 7363 -menu_item_eval_property c-src/emacs/src/keyboard.c /^menu_item_eval_property (Lisp_Object sexpr)$/ menu_item_eval_property_1 c-src/emacs/src/keyboard.c /^menu_item_eval_property_1 (Lisp_Object arg)$/ +menu_item_eval_property c-src/emacs/src/keyboard.c /^menu_item_eval_property (Lisp_Object sexpr)$/ menu_separator_name_p c-src/emacs/src/keyboard.c /^menu_separator_name_p (const char *label)$/ +menu tex-src/texinfo.tex /^\\long\\def\\menu #1\\end menu{}$/ +Metags c-src/etags.c /^main (int argc, char **argv)$/ metasource c-src/etags.c 198 methodheader tex-src/texinfo.tex /^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/ methodx\defmethodheader tex-src/texinfo.tex /^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/ methparsebody\Edeffn tex-src/texinfo.tex /^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/ methparsebody\Edefmethod tex-src/texinfo.tex /^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/ methparsebody\Edeftypefn tex-src/texinfo.tex /^\\def\\deftypefn{\\defmethparsebody\\Edeftypefn\\deftyp/ -min c-src/emacs/src/gmalloc.c /^#define min(a, b) ((a) < (b) ? (a) : (b))$/ -min c-src/emacs/src/lisp.h /^#define min(a, b) ((a) < (b) ? (a) : (b))$/ -min c-src/emacs/src/lisp.h 57 -min cp-src/conway.cpp /^#define min(x,y) ((x > y) ? y : x)$/ +Mfail cp-src/fail.C /^main()$/ min_args c-src/emacs/src/lisp.h 1686 min_char c-src/emacs/src/lisp.h 1621 +min cp-src/conway.cpp /^#define min(x,y) ((x > y) ? y : x)$/ +min c-src/emacs/src/gmalloc.c /^#define min(a, b) ((a) < (b) ? (a) : (b))$/ +min c-src/emacs/src/lisp.h 57 +min c-src/emacs/src/lisp.h /^#define min(a, b) ((a) < (b) ? (a) : (b))$/ +MIN_HASH_VALUE c-src/etags.c 2328 +/min ps-src/rfc1245.ps /^\/min {2 copy gt {exch} if pop} bind def$/ minus cp-src/functions.cpp /^void Date::minus ( int days , int month , int year/ minus tex-src/texinfo.tex /^\\def\\minus{$-$}$/ +MIN_WORD_LENGTH c-src/etags.c 2326 +MISCP c-src/emacs/src/lisp.h /^# define MISCP(x) lisp_h_MISCP (x)$/ miti html-src/softwarelibero.html /^Sfatiamo alcuni miti$/ +Mkai-test.pl perl-src/kai-test.pl /^package main;$/ modifier_names c-src/emacs/src/keyboard.c 6319 modifier_symbols c-src/emacs/src/keyboard.c 6327 modify_event_symbol c-src/emacs/src/keyboard.c /^modify_event_symbol (ptrdiff_t symbol_num, int mod/ module_class_method ruby-src/test.rb /^ def ModuleExample.module_class_method$/ +ModuleExample ruby-src/test.rb /^module ModuleExample$/ module_instance_method ruby-src/test.rb /^ def module_instance_method$/ -more= ruby-src/test1.ru /^ :more$/ more_aligned_int c.c 165 morecore_nolock c-src/emacs/src/gmalloc.c /^morecore_nolock (size_t size)$/ morecore_recursing c-src/emacs/src/gmalloc.c 605 +More_Lisp_Bits c-src/emacs/src/lisp.h 801 +more= ruby-src/test1.ru /^ :more$/ +MOST_NEGATIVE_FIXNUM c-src/emacs/src/lisp.h 835 +MOST_POSITIVE_FIXNUM c-src/emacs/src/lisp.h 834 mouse_syms c-src/emacs/src/keyboard.c 4627 move cp-src/clheir.cpp /^void agent::move(int direction)$/ +MOVE c-src/sysdep.h /^#define MOVE(x,y) movl x, y$/ +MoveLayerAfter lua-src/allegro.lua /^function MoveLayerAfter (this_one)$/ +MoveLayerBefore lua-src/allegro.lua /^function MoveLayerBefore (this_one)$/ +MoveLayerBottom lua-src/allegro.lua /^function MoveLayerBottom ()$/ +MoveLayerTop lua-src/allegro.lua /^function MoveLayerTop ()$/ mprobe c-src/emacs/src/gmalloc.c /^mprobe (void *ptr)$/ +/M ps-src/rfc1245.ps /^\/M {newpath moveto} bind def$/ +M ruby-src/test1.ru /^module A::M; end$/ +MSDOS c-src/etags.c 100 +MSDOS c-src/etags.c 106 +MSDOS c-src/etags.c 107 +MSDOS c-src/etags.c 110 msgid php-src/lce_functions.php /^ function msgid($line, $class)$/ +MSGSEL f-src/entry.for /^ ENTRY MSGSEL ( TYPE )$/ +MSGSEL f-src/entry.strange /^ ENTRY MSGSEL ( TYPE )$/ +MSGSEL f-src/entry.strange_suffix /^ ENTRY MSGSEL ( TYPE )$/ msgstr php-src/lce_functions.php /^ function msgstr($line, $class)$/ +/ms ps-src/rfc1245.ps /^\/ms { $/ mstats c-src/emacs/src/gmalloc.c 308 -mt prol-src/natded.prolog /^mt:-$/ +Mtest1.go go-src/test1.go 1 +Mtest1.go go-src/test1.go /^func main() {$/ +Mtest.go go-src/test.go 1 +Mtest.go go-src/test.go /^func main() {$/ +Mtest.rs rs-src/test.rs /^fn main() {$/ mtg html-src/software.html /^MTG$/ -multi_line c-src/etags.c 267 +mt prol-src/natded.prolog /^mt:-$/ multibyte c-src/emacs/src/regex.h 403 -my_printf c.c /^my_printf (void *my_object, const char *my_format,/ -my_struct c-src/h.h 91 -my_struct c.c 226 -my_typedef c-src/h.h 93 -my_typedef c.c 228 +MULTI_LETTER_MOD c-src/emacs/src/keyboard.c 6231 +MULTI_LETTER_MOD c-src/emacs/src/keyboard.c 6764 +MULTI_LETTER_MOD c-src/emacs/src/keyboard.c /^#define MULTI_LETTER_MOD(BIT, NAME, LEN) \\$/ +MULTI_LETTER_MOD c-src/emacs/src/keyboard.c /^#define MULTI_LETTER_MOD(BIT, NAME, LEN) \\$/ +multi_line c-src/etags.c 267 +Mx.cc cp-src/x.cc /^main(int argc, char *argv[])$/ mylbrace tex-src/texinfo.tex /^\\def\\mylbrace {{\\tt \\char '173}}$/ mypi forth-src/test-forth.fth /^synonym mypi fconst$/ +my_printf c.c /^my_printf (void *my_object, const char *my_format,/ myrbrace tex-src/texinfo.tex /^\\def\\myrbrace {{\\tt \\char '175}}$/ -n c-src/exit.c 28 -n c-src/exit.strange_suffix 28 +my_struct c.c 226 +my_struct c-src/h.h 91 +my_typedef c.c 228 +my_typedef c-src/h.h 93 name c-src/emacs/src/keyboard.c 7241 name c-src/emacs/src/lisp.h 1808 name c-src/emacs/src/lisp.h 3144 @@ -3372,7 +2592,11 @@ name c-src/etags.c 2271 name c-src/etags.c 261 name c-src/getopt.h 76 name c-src/getopt.h 78 +named c-src/etags.c 2505 +NameHasChar pas-src/common.pas /^function NameHasChar; (* (TheName : NameString; Th/ name perl-src/htlmify-cystic 357 +namestringequal pas-src/common.pas /^function namestringequal;(*(var Name1,Name2 : Name/ +NameStringLess pas-src/common.pas /^function NameStringLess;(*(var Name1,Name2 : NameS/ name tex-src/texinfo.tex /^\\begingroup\\defname {#1}{Function}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {#1}{Macro}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {#1}{Special Form}%$/ @@ -3381,36 +2605,48 @@ name tex-src/texinfo.tex /^\\begingroup\\defname {#1}{Variable}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{#1}\\deftpargs{#3}\\endgrou/ name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{#1}\\defunargs{#3}\\endgrou/ name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{#1}\\defvarargs{#3}\\endgro/ -name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{Instance Variable of #1}%/ -name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{Method on #1}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{\\defcvtype{} of #1}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{\\defoptype{} on #1}%$/ +name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{Instance Variable of #1}%/ +name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{Method on #1}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {\\code{#1} #2}{Function}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {\\code{#1} #2}{Variable}%$/ -name tex-src/texinfo.tex /^\\begingroup\\defname {\\code{#2} #3}{#1}$/ name tex-src/texinfo.tex /^\\begingroup\\defname {\\code{#2} #3}{#1}%$/ +name tex-src/texinfo.tex /^\\begingroup\\defname {\\code{#2} #3}{#1}$/ name tex-src/texinfo.tex /^\\def\\singlecodeindexer #1{\\doind{\\indexname}{\\code/ name tex-src/texinfo.tex /^\\def\\singleindexer #1{\\doind{\\indexname}{#1}}$/ +NAME y-src/cccp.c 8 name y-src/cccp.y 113 name y-src/cccp.y 43 -named c-src/etags.c 2505 -namestringequal pas-src/common.pas /^function namestringequal;(*(var Name1,Name2 : Name/ nargs c-src/emacs/src/lisp.h 2987 -need tex-src/texinfo.tex /^\\def\\need{\\parsearg\\needx}$/ +NATNUMP c-src/emacs/src/lisp.h /^NATNUMP (Lisp_Object x)$/ +/nbluet ps-src/rfc1245.ps /^\/nbluet 256 array def$/ +n c-src/exit.c 28 +n c-src/exit.strange_suffix 28 +NDEBUG c-src/etags.c 88 need_adjustment c-src/emacs/src/lisp.h 1986 +need tex-src/texinfo.tex /^\\def\\need{\\parsearg\\needx}$/ needx tex-src/texinfo.tex /^\\def\\needx#1{%$/ +NEG y-src/parse.c 9 neighbors cp-src/clheir.hpp 59 nelem cp-src/Range.h /^ int nelem (void) const { return rng_nelem; }$/ nestlev c-src/etags.c 2525 -new objc-src/PackInsp.m /^+new$/ -new perl-src/htlmify-cystic 163 -new_tag perl-src/htlmify-cystic 18 newcodeindex tex-src/texinfo.tex /^\\def\\newcodeindex #1{$/ newindex tex-src/texinfo.tex /^\\def\\newindex #1{$/ +NewLayer lua-src/allegro.lua /^function NewLayer (name, x, y, w, h)$/ +NewLayerSet lua-src/allegro.lua /^function NewLayerSet (name)$/ newlb c-src/etags.c 2930 newlinepos c-src/etags.c 2932 +NewNameString pas-src/common.pas /^procedure NewNameString; (* (var NSP: NameStringPo/ +new objc-src/PackInsp.m /^+new$/ +new perl-src/htlmify-cystic 163 +new_tag perl-src/htlmify-cystic 18 newtextstring pas-src/common.pas /^function newtextstring; (*: TextString;*)$/ newwrite tex-src/texinfo.tex /^\\gdef\\newwrite{\\alloc@7\\write\\chardef\\sixt@@n}}$/ +next_alive cp-src/conway.hpp 7 +next_almost_prime c-src/emacs/src/lisp.h /^extern EMACS_INT next_almost_prime (EMACS_INT) ATT/ +NEXT_ALMOST_PRIME_LIMIT c-src/emacs/src/lisp.h 3573 +next c.c 174 next c-src/emacs/src/gmalloc.c 164 next c-src/emacs/src/gmalloc.c 188 next c-src/emacs/src/gmalloc.c 198 @@ -3424,51 +2660,52 @@ next c-src/emacs/src/lisp.h 3028 next c-src/emacs/src/lisp.h 3134 next c-src/emacs/src/lisp.h 700 next c-src/etags.c 203 -next c.c 174 +next-file el-src/emacs/lisp/progmodes/etags.el /^(defun next-file (&optional initialize novisit)$/ +next-file-list el-src/emacs/lisp/progmodes/etags.el /^(defvar next-file-list nil$/ +next_free c-src/emacs/src/lisp.h 1851 +nextfree c-src/emacs/src/lisp.h 3029 next tex-src/texinfo.tex /^\\def\\flushcr{\\ifx\\par\\lisppar \\def\\next##1{}\\else / next tex-src/texinfo.tex /^\\def\\next##1{}\\next}$/ next tex-src/texinfo.tex /^\\def\\parsearg #1{\\let\\next=#1\\begingroup\\obeylines/ next tex-src/texinfo.tex /^\\edef\\next{\\write\\auxfile{\\internalsetq {#1}{#2}}}/ -next y-src/cccp.y 42 -next-file el-src/emacs/lisp/progmodes/etags.el /^(defun next-file (&optional initialize novisit)$/ -next-file-list el-src/emacs/lisp/progmodes/etags.el /^(defvar next-file-list nil$/ -next_alive cp-src/conway.hpp 7 -next_almost_prime c-src/emacs/src/lisp.h /^extern EMACS_INT next_almost_prime (EMACS_INT) ATT/ -next_free c-src/emacs/src/lisp.h 1851 next_weak c-src/emacs/src/lisp.h 1875 -nextfree c-src/emacs/src/lisp.h 3029 +next y-src/cccp.y 42 +NE y-src/parse.c 6 nfree c-src/emacs/src/gmalloc.c 150 +/ngrayt ps-src/rfc1245.ps /^\/ngrayt 256 array def$/ +/ngreent ps-src/rfc1245.ps /^\/ngreent 256 array def$/ +NIL_IS_ZERO c-src/emacs/src/lisp.h 1515 +NILP c-src/emacs/src/lisp.h /^# define NILP(x) lisp_h_NILP (x)$/ nl c-src/etags.c 2521 +NmStrToErrStr pas-src/common.pas /^function NmStrToErrStr;(*($/ +NmStrToInteger pas-src/common.pas /^function NmStrToInteger; (* (Str : NameString) : i/ nm tex-src/testenv.tex /^\\newcommand{\\nm}[2]{\\nomenclature{#1}{#2}}$/ -no tex-src/texinfo.tex /^\\def\\appendixletter{\\char\\the\\appendixno}$/ -no tex-src/texinfo.tex /^\\global\\advance \\appendixno by 1 \\message{Appendix/ -no tex-src/texinfo.tex /^\\ifnum\\secno=0 Appendix\\xreftie'char\\the\\appendixn/ -no tex-src/texinfo.tex /^\\newcount \\appendixno \\appendixno = `\\@$/ -no.\the tex-src/texinfo.tex /^Section\\xreftie'char\\the\\appendixno.\\the\\secno.\\th/ -no.\the tex-src/texinfo.tex /^\\else \\ifnum \\subsecno=0 Section\\xreftie'char\\the\\/ no_argument c-src/getopt.h 89 -no_lang_help c-src/etags.c 707 -no_sub c-src/emacs/src/regex.h 387 nocase_tail c-src/etags.c /^nocase_tail (const char *cp)$/ node c-src/etags.c 225 -node tex-src/texinfo.tex /^\\def\\node{\\ENVcheck\\parsearg\\nodezzz}$/ -node_st c-src/etags.c 214 noderef tex-src/texinfo.tex /^\\appendixnoderef %$/ +node_st c-src/etags.c 214 +node tex-src/texinfo.tex /^\\def\\node{\\ENVcheck\\parsearg\\nodezzz}$/ nodexxx tex-src/texinfo.tex /^\\def\\nodexxx[#1,#2]{\\gdef\\lastnode{#1}}$/ nodezzz tex-src/texinfo.tex /^\\def\\nodezzz#1{\\nodexxx [#1,]}$/ nofillexdent tex-src/texinfo.tex /^\\def\\nofillexdent{\\parsearg\\nofillexdentyyy}$/ nofillexdentyyy tex-src/texinfo.tex /^\\def\\nofillexdentyyy #1{{\\advance \\leftskip by -\\e/ nofonts tex-src/texinfo.tex /^{\\chapternofonts%$/ nofonts tex-src/texinfo.tex /^{\\indexnofonts$/ +no_lang_help c-src/etags.c 707 nonarrowing tex-src/texinfo.tex /^ \\let\\nonarrowing=\\comment$/ nonarrowing tex-src/texinfo.tex /^\\let\\nonarrowing=\\relax$/ none_help c-src/etags.c 703 +NONPOINTER_BITS c-src/emacs/src/lisp.h 78 +NONPOINTER_BITS c-src/emacs/src/lisp.h 80 +NONSRCS make-src/Makefile /^NONSRCS=entry.strange lists.erl clheir.hpp.gz$/ normalbackslash tex-src/texinfo.tex /^\\def\\normalbackslash{{\\tt\\rawbackslashxx}}$/ normalcaret tex-src/texinfo.tex /^\\def\\normalcaret{^}$/ normaldoublequote tex-src/texinfo.tex /^\\def\\normaldoublequote{"}$/ normalgreater tex-src/texinfo.tex /^\\def\\normalgreater{>}$/ -normalize prol-src/natded.prolog /^normalize(M,MNorm):-$/ normalize_fresh prol-src/natded.prolog /^normalize_fresh(M,N):-$/ +normalize prol-src/natded.prolog /^normalize(M,MNorm):-$/ +/normalize ps-src/rfc1245.ps /^\/normalize {$/ normalize_tree prol-src/natded.prolog /^normalize_tree(tree(Rule,Syn:Sem,Trees),$/ normalize_trees prol-src/natded.prolog /^normalize_trees([],[]).$/ normalless tex-src/texinfo.tex /^\\def\\normalless{<}$/ @@ -3478,42 +2715,67 @@ normaltilde tex-src/texinfo.tex /^\\def\\normaltilde{~}$/ normalunderscore tex-src/texinfo.tex /^\\def\\normalunderscore{_}$/ normalverticalbar tex-src/texinfo.tex /^\\def\\normalverticalbar{|}$/ nosave pyt-src/server.py /^ def nosave(self):$/ -not_bol c-src/emacs/src/regex.h 391 -not_eol c-src/emacs/src/regex.h 394 -not_single_kboard_state c-src/emacs/src/keyboard.c /^not_single_kboard_state (KBOARD *kboard)$/ +no_sub c-src/emacs/src/regex.h 387 notag2 c-src/dostorture.c 26 notag2 c-src/torture.c 26 notag4 c-src/dostorture.c 45 notag4 c-src/torture.c 45 +not_bol c-src/emacs/src/regex.h 391 +/.notdef ps-src/rfc1245.ps /^\/.notdef \/.notdef \/.notdef \/.notdef \/.notdef \/.not/ +/.notdef ps-src/rfc1245.ps /^\/.notdef \/.notdef \/.notdef \/.notdef \/space \/exclam/ +not_eol c-src/emacs/src/regex.h 394 +NOTEQUAL y-src/cccp.c 13 +no tex-src/texinfo.tex /^\\def\\appendixletter{\\char\\the\\appendixno}$/ +no tex-src/texinfo.tex /^\\global\\advance \\appendixno by 1 \\message{Appendix/ +no tex-src/texinfo.tex /^\\ifnum\\secno=0 Appendix\\xreftie'char\\the\\appendixn/ +no tex-src/texinfo.tex /^\\newcount \\appendixno \\appendixno = `\\@$/ +no.\the tex-src/texinfo.tex /^\\else \\ifnum \\subsecno=0 Section\\xreftie'char\\the\\/ +no.\the tex-src/texinfo.tex /^Section\\xreftie'char\\the\\appendixno.\\the\\secno.\\th/ notinname c-src/etags.c /^#define notinname(c) (_nin[CHAR (c)]) \/* c is not / +not_single_kboard_state c-src/emacs/src/keyboard.c /^not_single_kboard_state (KBOARD *kboard)$/ npending c-src/emacs/src/keyboard.c 7244 +/N ps-src/rfc1245.ps /^\/N { $/ +/nredt ps-src/rfc1245.ps /^\/nredt 256 array def$/ nsbot tex-src/texinfo.tex /^\\def\\nsbot{\\vbox$/ nstop tex-src/texinfo.tex /^\\def\\nstop{\\vbox$/ +/Ntilde ps-src/rfc1245.ps /^\/Ntilde \/Odieresis \/Udieresis \/aacute \/agrave \/aci/ ntool_bar_items c-src/emacs/src/keyboard.c 7974 -numOfChannels cp-src/c.C 1 -num_columns cp-src/conway.cpp 16 -num_input_events c-src/emacs/src/keyboard.c 210 -num_regs c-src/emacs/src/regex.h 430 -num_rows cp-src/conway.cpp 15 -numberKeys objcpp-src/SimpleCalc.M /^- numberKeys:sender$/ -number_len c-src/etags.c /^static int number_len (long) ATTRIBUTE_CONST;$/ +NULL_PTR y-src/cccp.y 63 +NULL y-src/cccp.y 51 numberedsec tex-src/texinfo.tex /^\\outer\\def\\numberedsec{\\parsearg\\seczzz}$/ numberedsubsec tex-src/texinfo.tex /^\\outer\\def\\numberedsubsec{\\parsearg\\numberedsubsec/ numberedsubseczzz tex-src/texinfo.tex /^\\def\\numberedsubseczzz #1{\\seccheck{subsection}%$/ numberedsubsubsec tex-src/texinfo.tex /^\\outer\\def\\numberedsubsubsec{\\parsearg\\numberedsub/ numberedsubsubseczzz tex-src/texinfo.tex /^\\def\\numberedsubsubseczzz #1{\\seccheck{subsubsecti/ +numberKeys objcpp-src/SimpleCalc.M /^- numberKeys:sender$/ +number_len c-src/etags.c /^static int number_len (long) ATTRIBUTE_CONST;$/ +/numbersign ps-src/rfc1245.ps /^\/numbersign \/dollar \/percent \/ampersand \/quotesing/ numbervars prol-src/natded.prolog /^numbervars(X):-$/ +num_columns cp-src/conway.cpp 16 numericenumerate tex-src/texinfo.tex /^\\def\\numericenumerate{%$/ +num_input_events c-src/emacs/src/keyboard.c 210 +NUM_MOD_NAMES c-src/emacs/src/keyboard.c 6325 +numOfChannels cp-src/c.C 1 +NUM_RECENT_KEYS c-src/emacs/src/keyboard.c 91 +num_regs c-src/emacs/src/regex.h 430 +num_rows cp-src/conway.cpp 15 +NUMSTATS objc-src/PackInsp.h 36 nvars c-src/emacs/src/lisp.h 3140 obeyedspace tex-src/texinfo.tex /^\\gdef\\obeyedspace{\\ }$/ +Objc_help c-src/etags.c 613 +OBJCPPSRC make-src/Makefile /^OBJCPPSRC=SimpleCalc.H SimpleCalc.M$/ +OBJCSRC make-src/Makefile /^OBJCSRC=Subprocess.h Subprocess.m PackInsp.h PackI/ +Objc_suffixes c-src/etags.c 609 objdef c-src/etags.c 2484 object c-src/emacs/src/lisp.h 2128 object_registry cp-src/clheir.cpp 10 +OBJS make-src/Makefile /^OBJS=${GETOPTOBJS} ${REGEXOBJS} ${CHECKOBJS}$/ objtag c-src/etags.c 2453 objvar c-src/emacs/src/lisp.h 2297 obstack_chunk_alloc y-src/parse.y 47 obstack_chunk_free y-src/parse.y 48 ocatseen c-src/etags.c 2477 +/ocircumflex ps-src/rfc1245.ps /^\/ocircumflex \/odieresis \/otilde \/uacute \/ugrave \/u/ octave_MDiagArray2_h cp-src/MDiagArray2.h 29 octave_Range_h cp-src/Range.h 24 oddfooting tex-src/texinfo.tex /^\\def\\oddfooting{\\parsearg\\oddfootingxxx}$/ @@ -3531,52 +2793,56 @@ oimplementation c-src/etags.c 2474 oinbody c-src/etags.c 2478 ok objc-src/PackInsp.m /^-ok:sender$/ ok_to_echo_at_next_pause c-src/emacs/src/keyboard.c 159 -old_value c-src/emacs/src/lisp.h 2980 oldpage tex-src/texinfo.tex /^ \\let\\oldpage = \\page$/ +old_value c-src/emacs/src/lisp.h 2980 omethodcolon c-src/etags.c 2481 omethodparm c-src/etags.c 2482 omethodsign c-src/etags.c 2479 omethodtag c-src/etags.c 2480 -one tex-src/texinfo.tex /^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/ onepageout tex-src/texinfo.tex /^\\def\\cropmarks{\\let\\onepageout=\\croppageout }$/ onepageout tex-src/texinfo.tex /^\\def\\onepageout#1{\\hoffset=\\normaloffset$/ +one tex-src/texinfo.tex /^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/ onone c-src/etags.c 2472 oparenseen c-src/etags.c 2476 -open objc-src/PackInsp.m /^-open:sender$/ -open-dribble-file c-src/emacs/src/keyboard.c /^DEFUN ("open-dribble-file", Fopen_dribble_file, So/ -openInWorkspace objc-src/PackInsp.m /^static void openInWorkspace(const char *filename)$/ +OPENBUTTON objc-src/PackInsp.m 47 opencontents tex-src/texinfo.tex /^\\def\\opencontents{\\openout \\contentsfile = \\jobnam/ +open-dribble-file c-src/emacs/src/keyboard.c /^DEFUN ("open-dribble-file", Fopen_dribble_file, So/ openindices tex-src/texinfo.tex /^\\def\\openindices{%$/ +openInWorkspace objc-src/PackInsp.m /^static void openInWorkspace(const char *filename)$/ +open objc-src/PackInsp.m /^-open:sender$/ operationKeys objcpp-src/SimpleCalc.M /^- operationKeys:sender$/ -operator y-src/cccp.y 438 -operator ++ cp-src/functions.cpp /^Date & Date::operator ++ ( void ){$/ -operator += cp-src/functions.cpp /^Date & Date::operator += ( int days ){$/ +operator+ cp-src/c.C /^ A operator+(A& a) {};$/ +operator+ cp-src/c.C /^const A& A::operator+(const A&) { }$/ operator - cp-src/c.C /^void operator -(int, int) {}$/ -operator - cp-src/functions.cpp /^int Date::operator - ( Date d ){$/ -operator -- cp-src/functions.cpp /^Date & Date::operator -- ( void ){$/ +operator+ cp-src/c.C /^void operator+(int, int) {}$/ +operator = cp-src/functions.cpp /^Date & Date::operator = ( Date d ){$/ +operator += cp-src/functions.cpp /^Date & Date::operator += ( int days ){$/ operator -= cp-src/functions.cpp /^Date & Date::operator -= ( int days ){$/ +operator ++ cp-src/functions.cpp /^Date & Date::operator ++ ( void ){$/ +operator -- cp-src/functions.cpp /^Date & Date::operator -- ( void ){$/ +operator - cp-src/functions.cpp /^int Date::operator - ( Date d ){$/ operator < cp-src/functions.cpp /^int Date::operator < ( Date d ) {$/ -operator << cp-src/functions.cpp /^ostream& operator << ( ostream &c, Date d ) {$/ -operator = cp-src/MDiagArray2.h /^ MDiagArray2& operator = (const MDiagArray2/ -operator = cp-src/functions.cpp /^Date & Date::operator = ( Date d ){$/ operator == cp-src/functions.cpp /^int Date::operator == ( Date d ) {$/ operator > cp-src/functions.cpp /^int Date::operator > ( Date d ) {$/ operator >> cp-src/functions.cpp /^istream& operator >> ( istream &i, Date & dd ){$/ -operator MArray2 cp-src/MDiagArray2.h /^ operator MArray2 () const$/ +operator << cp-src/functions.cpp /^ostream& operator << ( ostream &c, Date d ) {$/ +operator = cp-src/MDiagArray2.h /^ MDiagArray2& operator = (const MDiagArray2/ +OperatorFun c-src/h.h 88 operator int cp-src/c.C /^void operator int(int, int) {}$/ operator int cp-src/fail.C /^ operator int() const {return x;}$/ -operator+ cp-src/c.C /^ A operator+(A& a) {};$/ -operator+ cp-src/c.C /^const A& A::operator+(const A&) { }$/ -operator+ cp-src/c.C /^void operator+(int, int) {}$/ +operator MArray2 cp-src/MDiagArray2.h /^ operator MArray2 () const$/ +operator y-src/cccp.y 438 opheader\defoptype tex-src/texinfo.tex /^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/ opnested tex-src/texinfo.tex /^\\gdef\\opnested{\\char`\\(\\global\\advance\\parencount / opnr tex-src/texinfo.tex /^\\def\\opnr{{\\sf\\char`\\(}} \\def\\clnr{{\\sf\\char`\\)}} / opparsebody\Edefop tex-src/texinfo.tex /^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/ oprm tex-src/texinfo.tex /^\\gdef\\oprm#1 {{\\rm\\char`\\(}#1 \\bf \\let(=\\opnested / oprotocol c-src/etags.c 2473 +/O ps-src/rfc1245.ps /^\/O {closepath} bind def$/ optheader tex-src/texinfo.tex /^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/ -option c-src/getopt.h 73 optional_argument c-src/getopt.h 91 +option c-src/getopt.h 73 +OPTIONS make-src/Makefile /^OPTIONS=--members --declarations --regex=@regexfil/ optx\defoptheader tex-src/texinfo.tex /^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/ optype tex-src/texinfo.tex /^\\begingroup\\defname {#2}{\\defoptype{} on #1}%$/ optype tex-src/texinfo.tex /^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/ @@ -3585,129 +2851,193 @@ opx\defopheader tex-src/texinfo.tex /^\\defopparsebody\\Edefop\\defopx\\defophea ord_add_element prol-src/ordsets.prolog /^ord_add_element([], Element, [Element]).$/ ord_del_element prol-src/ordsets.prolog /^ord_del_element([], _, []).$/ ord_disjoint prol-src/ordsets.prolog /^ord_disjoint(Set1, Set2) :-$/ -ord_intersect prol-src/ordsets.prolog /^ord_intersect([Head1|Tail1], [Head2|Tail2]) :-$/ -ord_intersection prol-src/ordsets.prolog /^ord_intersection(Sets, Intersection) :- $/ -ord_intersection prol-src/ordsets.prolog /^ord_intersection([], Set2, [], Set2).$/ -ord_intersection prol-src/ordsets.prolog /^ord_intersection([], _, []).$/ +/ordfeminine ps-src/rfc1245.ps /^\/ordfeminine \/ordmasculine \/.notdef \/ae \/oslash \/q/ ord_intersection2 prol-src/ordsets.prolog /^ord_intersection2(1, [Set|Sets], Set0, Sets0) :- !/ ord_intersection3 prol-src/ordsets.prolog /^ord_intersection3(<, _, Set1, Head2, Tail2, Inters/ ord_intersection4 prol-src/ordsets.prolog /^ord_intersection4(<, _, Set1, Head2, Tail2, Inters/ +ord_intersection prol-src/ordsets.prolog /^ord_intersection([], _, []).$/ +ord_intersection prol-src/ordsets.prolog /^ord_intersection([], Set2, [], Set2).$/ +ord_intersection prol-src/ordsets.prolog /^ord_intersection(Sets, Intersection) :- $/ +ord_intersect prol-src/ordsets.prolog /^ord_intersect([Head1|Tail1], [Head2|Tail2]) :-$/ ord_member prol-src/ordsets.prolog /^ord_member(X, [E|Es]) :-$/ ord_seteq prol-src/ordsets.prolog /^ord_seteq(Set1, Set2) :-$/ ord_setproduct prol-src/ordsets.prolog /^ord_setproduct([], _, []).$/ ord_subset prol-src/ordsets.prolog /^ord_subset([], _).$/ ord_subtract prol-src/ordsets.prolog /^ord_subtract(Set1, Set2, Union) :-$/ ord_symdiff prol-src/ordsets.prolog /^ord_symdiff([], Set2, Set2).$/ -ord_union prol-src/ordsets.prolog /^ord_union(Set1, Set2, Union) :-$/ -ord_union prol-src/ordsets.prolog /^ord_union([], Union) :- !, Union = [].$/ ord_union4 prol-src/ordsets.prolog /^ord_union4(<, Head, Set1, Head2, Tail2, [Head|Unio/ ord_union_all prol-src/ordsets.prolog /^ord_union_all(1, [Set|Sets], Set, Sets) :- !.$/ +ord_union prol-src/ordsets.prolog /^ord_union(Set1, Set2, Union) :-$/ +ord_union prol-src/ordsets.prolog /^ord_union([], Union) :- !, Union = [].$/ +OR y-src/cccp.c 10 oss html-src/softwarelibero.html /^Il movimento open source$/ otagseen c-src/etags.c 2475 -outputTime cp-src/c.C 9 +OTAGS make-src/Makefile /^OTAGS: oetags ${SRCS} srclist$/ +/Otilde ps-src/rfc1245.ps /^\/Otilde \/OE \/oe \/endash \/emdash \/quotedblleft \/quo/ output_file perl-src/htlmify-cystic 35 output_files perl-src/htlmify-cystic 32 outputtable html-src/algrthms.html /^Output$/ +outputTime cp-src/c.C 9 outsyn prol-src/natded.prolog /^outsyn(['Any'],_).$/ -p c-src/emacs/src/lisp.h 4673 -p c-src/emacs/src/lisp.h 4679 -p.x forth-src/test-forth.fth /^ 1 CELLS +FIELD p.x \\ A single cell filed name/ -p.y forth-src/test-forth.fth /^ 1 CELLS +FIELD p.y \\ A single cell field name/ -p/f ada-src/etags-test-for.ada /^ function p pragma Import (C,$/ -p/f ada-src/etags-test-for.ada /^function p ("p");$/ -pD c-src/emacs/src/lisp.h 165 -pD c-src/emacs/src/lisp.h 167 -pD c-src/emacs/src/lisp.h 169 -pD c-src/emacs/src/lisp.h 171 -pI c-src/emacs/src/lisp.h 106 -pI c-src/emacs/src/lisp.h 94 -pI c-src/emacs/src/lisp.h 99 -pMd c-src/emacs/src/lisp.h 150 -pMd c-src/emacs/src/lisp.h 155 -pMu c-src/emacs/src/lisp.h 151 -pMu c-src/emacs/src/lisp.h 156 -p_next c-src/etags.c 258 -page tex-src/texinfo.tex /^ \\let\\page = \\oldpage$/ -page tex-src/texinfo.tex /^ \\def\\page{%$/ -page tex-src/texinfo.tex /^\\def\\page{\\par\\vfill\\supereject}$/ +OVERLAYP c-src/emacs/src/lisp.h /^OVERLAYP (Lisp_Object x)$/ +Overview tex-src/gzip.texi /^@node Overview, Sample, Copying, Top$/ +PackageInspector objc-src/PackInsp.h /^@interface PackageInspector:WMInspector$/ pagealignmacro tex-src/texinfo.tex /^\\global\\let\\pagealignmacro=\\chapoddpage$/ -pagealignmacro tex-src/texinfo.tex /^\\global\\let\\pagealignmacro=\\chappager$/ pagealignmacro tex-src/texinfo.tex /^\\global\\let\\pagealignmacro=\\chappager}$/ +pagealignmacro tex-src/texinfo.tex /^\\global\\let\\pagealignmacro=\\chappager$/ pagebody tex-src/texinfo.tex /^\\def\\pagebody#1{\\vbox to\\pageheight{\\boxmaxdepth=\\/ pagecontents tex-src/texinfo.tex /^\\gdef\\pagecontents#1{\\ifvoid\\topins\\else\\unvbox\\to/ +/pagedimen ps-src/rfc1245.ps /^\/pagedimen { $/ pagesize c-src/emacs/src/gmalloc.c 1707 pagesofar tex-src/texinfo.tex /^\\def\\pagesofar{\\unvbox\\partialpage %$/ +page tex-src/texinfo.tex /^ \\def\\page{%$/ +page tex-src/texinfo.tex /^\\def\\page{\\par\\vfill\\supereject}$/ +page tex-src/texinfo.tex /^ \\let\\page = \\oldpage$/ pair merc-src/accumulator.m /^:- import_module pair.$/ -par tex-src/texinfo.tex /^\\let\\par=\\lisppar$/ -par tex-src/texinfo.tex /^{\\let\\par=\\endgraf \\smallbreak}%$/ +/papersize ps-src/rfc1245.ps /^\/papersize {$/ paragraphindent tex-src/texinfo.tex /^\\let\\paragraphindent=\\comment$/ +/paragraph ps-src/rfc1245.ps /^\/paragraph \/germandbls \/registered \/copyright \/tra/ +/parenright ps-src/rfc1245.ps /^\/parenright \/asterisk \/plus \/comma \/hyphen \/period/ parent c-src/emacs/src/keyboard.c 8745 parent c-src/emacs/src/lisp.h 1590 -parse prol-src/natded.prolog /^parse(Ws,Cat):-$/ -parseFromVars php-src/lce_functions.php /^ function parseFromVars($prefix)$/ +parseargdiscardspace tex-src/texinfo.tex /^\\gdef\\parseargdiscardspace {\\begingroup\\obeylines\\/ +parseargline tex-src/texinfo.tex /^\\def\\parseargline{\\begingroup \\obeylines \\parsearg/ +parsearglinex tex-src/texinfo.tex /^\\gdef\\parsearglinex #1^^M{\\endgroup \\next {#1}}}$/ +parsearg tex-src/texinfo.tex /^\\def\\parsearg #1{\\let\\next=#1\\begingroup\\obeylines/ +parseargx tex-src/texinfo.tex /^\\def\\parseargx{%$/ +parsebody\Edefmac tex-src/texinfo.tex /^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/ +parsebody\Edefspec tex-src/texinfo.tex /^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/ +parsebody\Edeftypefun tex-src/texinfo.tex /^\\def\\deftypefun{\\defparsebody\\Edeftypefun\\deftypef/ +parsebody\Edefun tex-src/texinfo.tex /^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/ parse_c_expression y-src/cccp.y /^parse_c_expression (string)$/ parse_cgi prol-src/natded.prolog /^parse_cgi(TokenList,KeyVals):-$/ parse_error y-src/parse.y 82 parse_escape y-src/cccp.y /^parse_escape (string_ptr)$/ +parseFromVars php-src/lce_functions.php /^ function parseFromVars($prefix)$/ parse_hash y-src/parse.y 64 parse_menu_item c-src/emacs/src/keyboard.c /^parse_menu_item (Lisp_Object item, int inmenubar)$/ parse_modifiers c-src/emacs/src/keyboard.c /^parse_modifiers (Lisp_Object symbol)$/ parse_modifiers_uncached c-src/emacs/src/keyboard.c /^parse_modifiers_uncached (Lisp_Object symbol, ptrd/ parse_number y-src/cccp.y /^parse_number (olen)$/ -parse_return y-src/parse.y 74 +parse prol-src/natded.prolog /^parse(Ws,Cat):-$/ parse_return_error y-src/cccp.y 70 +parse_return y-src/parse.y 74 parse_solitary_modifier c-src/emacs/src/keyboard.c /^parse_solitary_modifier (Lisp_Object symbol)$/ parse_tool_bar_item c-src/emacs/src/keyboard.c /^parse_tool_bar_item (Lisp_Object key, Lisp_Object / parse_tree merc-src/accumulator.m /^:- import_module parse_tree.$/ -parsearg tex-src/texinfo.tex /^\\def\\parsearg #1{\\let\\next=#1\\begingroup\\obeylines/ -parseargdiscardspace tex-src/texinfo.tex /^\\gdef\\parseargdiscardspace {\\begingroup\\obeylines\\/ -parseargline tex-src/texinfo.tex /^\\def\\parseargline{\\begingroup \\obeylines \\parsearg/ -parsearglinex tex-src/texinfo.tex /^\\gdef\\parsearglinex #1^^M{\\endgroup \\next {#1}}}$/ -parseargx tex-src/texinfo.tex /^\\def\\parseargx{%$/ -parsebody\Edefmac tex-src/texinfo.tex /^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/ -parsebody\Edefspec tex-src/texinfo.tex /^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/ -parsebody\Edeftypefun tex-src/texinfo.tex /^\\def\\deftypefun{\\defparsebody\\Edeftypefun\\deftypef/ -parsebody\Edefun tex-src/texinfo.tex /^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/ +par tex-src/texinfo.tex /^{\\let\\par=\\endgraf \\smallbreak}%$/ +par tex-src/texinfo.tex /^\\let\\par=\\lisppar$/ +Pascal_functions c-src/etags.c /^Pascal_functions (FILE *inf)$/ +Pascal_help c-src/etags.c 621 +Pascal_suffixes c-src/etags.c 619 +PASSRC make-src/Makefile /^PASSRC=common.pas$/ pat c-src/etags.c 262 pattern c-src/etags.c 260 pchapsepmacro tex-src/texinfo.tex /^\\global\\let\\pchapsepmacro=\\chapbreak$/ pchapsepmacro tex-src/texinfo.tex /^\\global\\let\\pchapsepmacro=\\chapoddpage$/ pchapsepmacro tex-src/texinfo.tex /^\\global\\let\\pchapsepmacro=\\chappager$/ +p c-src/emacs/src/lisp.h 4673 +p c-src/emacs/src/lisp.h 4679 +pD c-src/emacs/src/lisp.h 165 +pD c-src/emacs/src/lisp.h 167 +pD c-src/emacs/src/lisp.h 169 +pD c-src/emacs/src/lisp.h 171 pdlcount c-src/emacs/src/lisp.h 3046 +PDT c-src/h.h /^ Date 04 May 87 235311 PDT (Mon)$/ pending-delete-mode el-src/TAGTEST.EL /^(defalias 'pending-delete-mode 'delete-selection-m/ pending_funcalls c-src/emacs/src/keyboard.c 4377 pending_signals c-src/emacs/src/keyboard.c 80 +/periodcentered ps-src/rfc1245.ps /^\/periodcentered \/quotesinglbase \/quotedblbase \/per/ +Perl_functions c-src/etags.c /^Perl_functions (FILE *inf)$/ +Perl_help c-src/etags.c 630 +Perl_interpreters c-src/etags.c 628 +PERLSRC make-src/Makefile /^PERLSRC=htlmify-cystic yagrip.pl kai-test.pl mirro/ +Perl_suffixes c-src/etags.c 626 +p/f ada-src/etags-test-for.ada /^function p ("p");$/ +p/f ada-src/etags-test-for.ada /^ function p pragma Import (C,$/ pfatal c-src/etags.c /^pfatal (const char *s1)$/ pfdset c-src/h.h 57 pfnote c-src/etags.c /^pfnote (char *name, bool is_func, char *linestart,/ +/PF ps-src/rfc1245.ps /^\/PF { $/ +PHP_functions c-src/etags.c /^PHP_functions (FILE *inf)$/ +PHP_help c-src/etags.c 639 +PHPSRC make-src/Makefile /^PHPSRC=lce_functions.php ptest.php sendmail.php$/ +PHP_suffixes c-src/etags.c 637 +pI c-src/emacs/src/lisp.h 106 +pI c-src/emacs/src/lisp.h 94 +pI c-src/emacs/src/lisp.h 99 pindex tex-src/texinfo.tex /^\\def\\pindex {\\pgindex}$/ pinned c-src/emacs/src/lisp.h 679 +Pkg1/b ada-src/etags-test-for.ada /^package body Pkg1 is$/ +Pkg1/b ada-src/waroquiers.ada /^package body Pkg1 is$/ +Pkg1_Func1/f ada-src/etags-test-for.ada /^ function Pkg1_Func1 return Boolean;$/ +Pkg1_Func1/f ada-src/etags-test-for.ada /^function Pkg1_Func1 return Boolean is$/ +Pkg1_Func1/f ada-src/etags-test-for.ada /^ function Pkg1_Func1 return Boolean is separate;$/ +Pkg1_Func1/f ada-src/waroquiers.ada /^ function Pkg1_Func1 return Boolean;$/ +Pkg1_Func1/f ada-src/waroquiers.ada /^function Pkg1_Func1 return Boolean is$/ +Pkg1_Func1/f ada-src/waroquiers.ada /^ function Pkg1_Func1 return Boolean is separate;$/ +Pkg1_Func2/f ada-src/etags-test-for.ada /^ function Pkg1_Func2 (Ijk : Integer; Z : Integer)/ +Pkg1_Func2/f ada-src/waroquiers.ada /^ function Pkg1_Func2 (Ijk : Integer; Z : Integer)/ +Pkg1_Pkg1/b ada-src/etags-test-for.ada /^package body Pkg1_Pkg1 is$/ +Pkg1_Pkg1/b ada-src/etags-test-for.ada /^ package body Pkg1_Pkg1 is separate;$/ +Pkg1_Pkg1/b ada-src/waroquiers.ada /^package body Pkg1_Pkg1 is$/ +Pkg1_Pkg1/b ada-src/waroquiers.ada /^ package body Pkg1_Pkg1 is separate;$/ +Pkg1_Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Pkg1_Proc1;$/ +Pkg1_Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Pkg1_Proc1 is$/ +Pkg1_Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Pkg1_Proc1;$/ +Pkg1_Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Pkg1_Proc1 is$/ +Pkg1_Pkg1/s ada-src/etags-test-for.ada /^ package Pkg1_Pkg1 is$/ +Pkg1_Pkg1/s ada-src/waroquiers.ada /^ package Pkg1_Pkg1 is$/ +Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc1;$/ +Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc1 is$/ +Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc1;$/ +Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc1 is$/ +Pkg1_Proc2/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc2 (I : Integer);$/ +Pkg1_Proc2/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc2 (I : Integer) is$/ +Pkg1_Proc2/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc2 (I : Integer);$/ +Pkg1_Proc2/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc2 (I : Integer) is$/ +Pkg1/s ada-src/etags-test-for.ada /^package Pkg1 is$/ +Pkg1/s ada-src/waroquiers.ada /^package Pkg1 is$/ +plainc c-src/etags.c 2934 plain_C_entries c-src/etags.c /^plain_C_entries (FILE *inf)$/ plain_C_suffixes c-src/etags.c 643 -plainc c-src/etags.c 2934 plainsecheading tex-src/texinfo.tex /^\\def\\plainsecheading #1{\\secheadingi {#1}}$/ plist c-src/emacs/src/lisp.h 2040 plist c-src/emacs/src/lisp.h 697 plus cp-src/functions.cpp /^void Date::plus ( int days , int month , int year / plus go-src/test1.go 5 plusvalseq prol-src/natded.prolog /^plusvalseq([]) --> [].$/ +pMd c-src/emacs/src/lisp.h 150 +pMd c-src/emacs/src/lisp.h 155 +pMu c-src/emacs/src/lisp.h 151 +pMu c-src/emacs/src/lisp.h 156 +p_next c-src/etags.c 258 +POEntryAD php-src/lce_functions.php 29 +POEntry php-src/lce_functions.php 105 +POEntry php-src/lce_functions.php /^ function POEntry()$/ +pointer c-src/emacs/src/lisp.h 2125 point forth-src/test-forth.fth /^BEGIN-STRUCTURE point \\ create the named structure/ point tex-src/texinfo.tex /^\\def\\point{$\\star$}$/ -pointer c-src/emacs/src/lisp.h 2125 -poll_for_input c-src/emacs/src/keyboard.c /^poll_for_input (struct atimer *timer)$/ poll_for_input_1 c-src/emacs/src/keyboard.c /^poll_for_input_1 (void)$/ +poll_for_input c-src/emacs/src/keyboard.c /^poll_for_input (struct atimer *timer)$/ poll_suppress_count c-src/emacs/src/keyboard.c 1908 poll_suppress_count c-src/emacs/src/lisp.h 3047 poll_timer c-src/emacs/src/keyboard.c 1915 -pop-tag-mark el-src/emacs/lisp/progmodes/etags.el /^(defalias 'pop-tag-mark 'xref-pop-marker-stack)$/ -pop_kboard c-src/emacs/src/keyboard.c /^pop_kboard (void)$/ popclass_above c-src/etags.c /^popclass_above (int bracelev)$/ +pop_kboard c-src/emacs/src/keyboard.c /^pop_kboard (void)$/ +pop-tag-mark el-src/emacs/lisp/progmodes/etags.el /^(defalias 'pop-tag-mark 'xref-pop-marker-stack)$/ +POReader php-src/lce_functions.php 163 +POReader php-src/lce_functions.php /^ function POReader($domain, $filename)$/ +PORManager php-src/lce_functions.php 498 +PORManager php-src/lce_functions.php /^ function PORManager()$/ position_to_Time c-src/emacs/src/keyboard.c /^position_to_Time (ptrdiff_t pos)$/ posix_memalign c-src/emacs/src/gmalloc.c /^posix_memalign (void **memptr, size_t alignment, s/ posn-at-point c-src/emacs/src/keyboard.c /^DEFUN ("posn-at-point", Fposn_at_point, Sposn_at_p/ posn-at-x-y c-src/emacs/src/keyboard.c /^DEFUN ("posn-at-x-y", Fposn_at_x_y, Sposn_at_x_y, / possible_sum_sign y-src/cccp.y /^#define possible_sum_sign(a, b, sum) ((((a) ^ (b))/ +PostControls pyt-src/server.py /^ def PostControls(self):$/ post pyt-src/server.py /^ def post(self):$/ +POSTSCRIPTFLAGS make-src/Makefile /^POSTSCRIPTFLAGS=--language=none --regex='#\/[^ \\t{]/ pot_etags_version c-src/etags.c 81 pp1 c-src/dostorture.c /^int pp1($/ pp1 c-src/torture.c /^int pp1($/ @@ -3724,139 +3054,243 @@ pp_html_table_fitch_tree prol-src/natded.prolog /^pp_html_table_fitch_tree(T):-$ pp_html_table_tree prol-src/natded.prolog /^pp_html_table_tree(T):-$/ pp_html_tree prol-src/natded.prolog /^pp_html_tree(ass(Syn,V,'$VAR'(N))):-$/ pp_html_trees prol-src/natded.prolog /^pp_html_trees([T|Ts],N,M):-$/ -pp_lam prol-src/natded.prolog /^pp_lam(Var^Alpha):-$/ pp_lam_bracket prol-src/natded.prolog /^pp_lam_bracket(A^B):-$/ pp_lam_paren prol-src/natded.prolog /^pp_lam_paren(Var^Alpha):-$/ +pp_lam prol-src/natded.prolog /^pp_lam(Var^Alpha):-$/ pp_paren prol-src/natded.prolog /^pp_paren(C):-$/ pp_rule prol-src/natded.prolog /^pp_rule(fe):-write('\/E').$/ -pp_syn prol-src/natded.prolog /^pp_syn(A\/B):-$/ +/P ps-src/rfc1245.ps /^\/P { $/ pp_syn_back prol-src/natded.prolog /^pp_syn_back(A\/B):-$/ pp_syn_paren prol-src/natded.prolog /^pp_syn_paren(A\/B):-$/ +pp_syn prol-src/natded.prolog /^pp_syn(A\/B):-$/ pp_tree prol-src/natded.prolog /^pp_tree(T):-$/ pp_trees prol-src/natded.prolog /^pp_trees([T|Ts],Column):-$/ -pp_word prol-src/natded.prolog /^pp_word(W):-$/ pp_word_list prol-src/natded.prolog /^pp_word_list([]).$/ pp_word_list_rest prol-src/natded.prolog /^pp_word_list_rest([]).$/ +pp_word prol-src/natded.prolog /^pp_word(W):-$/ +Pre_Call_State/t ada-src/2ataspri.ads /^ type Pre_Call_State is new System.Address;$/ +.PRECIOUS make-src/Makefile /^.PRECIOUS: ETAGS CTAGS ETAGS16 CTAGS16 ETAGS17 CTA/ predicate c-src/emacs/src/lisp.h 2307 +prev c.c 175 prev c-src/emacs/src/gmalloc.c 165 prev c-src/emacs/src/gmalloc.c 189 prev c-src/emacs/src/lisp.h 2191 -prev c.c 175 primary tex-src/texinfo.tex /^\\def\\primary #1{\\line{#1\\hfil}}$/ -print tex-src/texinfo.tex /^\\def\\print{\\leavevmode\\lower.1ex\\hbox to 1em{\\hfil/ -print tex-src/texinfo.tex /^\\def\\print{\\realbackslash print}$/ +PrintAdd go-src/test1.go /^func (n intNumber) PrintAdd() {$/ +PrintAdd go-src/test1.go /^func (s str) PrintAdd() {$/ printClassification php-src/lce_functions.php /^ function printClassification()$/ -print_help c-src/etags.c /^print_help (argument *argbuffer)$/ -print_language_names c-src/etags.c /^print_language_names (void)$/ -print_version c-src/etags.c /^print_version (void)$/ printedmanual tex-src/texinfo.tex /^\\def\\printedmanual{\\ignorespaces #5}%$/ printedmanual tex-src/texinfo.tex /^section ``\\printednodename'' in \\cite{\\printedmanu/ printednodename tex-src/texinfo.tex /^\\def\\printednodename{\\ignorespaces #1}%$/ printednodename tex-src/texinfo.tex /^\\def\\printednodename{\\ignorespaces #3}%$/ +print_help c-src/etags.c /^print_help (argument *argbuffer)$/ printindex tex-src/texinfo.tex /^\\def\\printindex{\\parsearg\\doprintindex}$/ +print_language_names c-src/etags.c /^print_language_names (void)$/ printmax_t c-src/emacs/src/lisp.h 148 printmax_t c-src/emacs/src/lisp.h 153 +print tex-src/texinfo.tex /^\\def\\print{\\leavevmode\\lower.1ex\\hbox to 1em{\\hfil/ +print tex-src/texinfo.tex /^\\def\\print{\\realbackslash print}$/ +PRINT_UNDOCUMENTED_OPTIONS_HELP c-src/etags.c 804 +print_version c-src/etags.c /^print_version (void)$/ +Private objc-src/Subprocess.m /^@interface Subprocess(Private)$/ +Private_T/b ada-src/etags-test-for.ada /^ task body Private_T is$/ +Private_T/b ada-src/waroquiers.ada /^ task body Private_T is$/ +Private_T/k ada-src/etags-test-for.ada /^ task Private_T;$/ +Private_T/k ada-src/waroquiers.ada /^ task Private_T;$/ +Private_T/p ada-src/etags-test-for.ada /^ procedure Private_T;$/ +Private_T/p ada-src/etags-test-for.ada /^ procedure Private_T is$/ +Private_T/p ada-src/waroquiers.ada /^ procedure Private_T;$/ +Private_T/p ada-src/waroquiers.ada /^ procedure Private_T is$/ +Private_T/t ada-src/etags-test-for.ada /^ type Private_T is$/ +Private_T/t ada-src/etags-test-for.ada /^ type Private_T is private;$/ +Private_T/t ada-src/waroquiers.ada /^ type Private_T is$/ +Private_T/t ada-src/waroquiers.ada /^ type Private_T is private;$/ +Problems tex-src/gzip.texi /^@node Problems, Concept Index, Tapes, Top$/ proc c-src/h.h 87 process_file c-src/etags.c /^process_file (FILE *fh, char *fn, language *lang)$/ process_file_name c-src/etags.c /^process_file_name (char *file, language *lang)$/ +PROCESSP c-src/emacs/src/lisp.h /^PROCESSP (Lisp_Object a)$/ process_pending_signals c-src/emacs/src/keyboard.c /^process_pending_signals (void)$/ process_special_events c-src/emacs/src/keyboard.c /^process_special_events (void)$/ process_tool_bar_item c-src/emacs/src/keyboard.c /^process_tool_bar_item (Lisp_Object key, Lisp_Objec/ +Proc/t ada-src/2ataspri.ads /^ type Proc is access procedure (Addr : System.Ad/ prof make-src/Makefile /^prof: ETAGS$/ prolog_atom c-src/etags.c /^prolog_atom (char *s, size_t pos)$/ +Prolog_functions c-src/etags.c /^Prolog_functions (FILE *inf)$/ +Prolog_help c-src/etags.c 654 prolog_pr c-src/etags.c /^prolog_pr (char *s, char *last)$/ prolog_skip_comment c-src/etags.c /^prolog_skip_comment (linebuffer *plb, FILE *inf)$/ +Prolog_suffixes c-src/etags.c 652 +PROLSRC make-src/Makefile /^PROLSRC=ordsets.prolog natded.prolog$/ +PROP c-src/emacs/src/keyboard.c 8379 +PROP c-src/emacs/src/keyboard.c /^#define PROP(IDX) AREF (tool_bar_item_properties, / prop c-src/etags.c 209 +PROTECT_MALLOC_STATE c-src/emacs/src/gmalloc.c /^#define PROTECT_MALLOC_STATE(PROT) \/* empty *\/$/ +PROTECT_MALLOC_STATE c-src/emacs/src/gmalloc.c /^#define PROTECT_MALLOC_STATE(PROT) protect_malloc_/ protect_malloc_state c-src/emacs/src/gmalloc.c /^protect_malloc_state (int protect_p)$/ -ptexL tex-src/texinfo.tex /^\\let\\ptexL=\\L$/ +PRTPKG f-src/entry.for /^ LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL,/ +PRTPKG f-src/entry.strange /^ LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL,/ +PRTPKG f-src/entry.strange_suffix /^ LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL,/ +PSEUDO c-src/sysdep.h /^#define PSEUDO(name, syscall_name, args) / +PSEUDOVECSIZE c-src/emacs/src/lisp.h /^#define PSEUDOVECSIZE(type, nonlispfield) \\$/ +PSEUDOVECTOR_AREA_BITS c-src/emacs/src/lisp.h 818 +PSEUDOVECTOR_FLAG c-src/emacs/src/lisp.h 774 +PSEUDOVECTORP c-src/emacs/src/lisp.h /^PSEUDOVECTORP (Lisp_Object a, int code)$/ +PSEUDOVECTOR_REST_BITS c-src/emacs/src/lisp.h 813 +PSEUDOVECTOR_REST_MASK c-src/emacs/src/lisp.h 814 +PSEUDOVECTOR_SIZE_BITS c-src/emacs/src/lisp.h 808 +PSEUDOVECTOR_SIZE_MASK c-src/emacs/src/lisp.h 809 +PSEUDOVECTOR_TYPEP c-src/emacs/src/lisp.h /^PSEUDOVECTOR_TYPEP (struct vectorlike_header *a, i/ +PS_functions c-src/etags.c /^PS_functions (FILE *inf)$/ +PS_help c-src/etags.c 649 +PSSRC make-src/Makefile /^PSSRC=rfc1245.ps$/ +PS_suffixes c-src/etags.c 647 ptexb tex-src/texinfo.tex /^\\let\\ptexb=\\b$/ ptexbullet tex-src/texinfo.tex /^\\let\\ptexbullet=\\bullet$/ ptexc tex-src/texinfo.tex /^\\let\\ptexc=\\c$/ -ptexdot tex-src/texinfo.tex /^\\let\\ptexdot=\\.$/ ptexdots tex-src/texinfo.tex /^\\let\\ptexdots=\\dots$/ +ptexdot tex-src/texinfo.tex /^\\let\\ptexdot=\\.$/ ptexend tex-src/texinfo.tex /^\\let\\ptexend=\\end$/ ptexequiv tex-src/texinfo.tex /^\\let\\ptexequiv = \\equiv$/ ptexfootnote tex-src/texinfo.tex /^\\let\\ptexfootnote=\\footnote$/ ptexi tex-src/texinfo.tex /^\\let\\ptexi=\\i$/ -ptexl tex-src/texinfo.tex /^\\let\\ptexl=\\l$/ ptexlbrace tex-src/texinfo.tex /^\\let\\ptexlbrace=\\{$/ +ptexl tex-src/texinfo.tex /^\\let\\ptexl=\\l$/ +ptexL tex-src/texinfo.tex /^\\let\\ptexL=\\L$/ ptexrbrace tex-src/texinfo.tex /^\\let\\ptexrbrace=\\}$/ ptexstar tex-src/texinfo.tex /^\\let\\ptexstar=\\*$/ ptext tex-src/texinfo.tex /^\\let\\ptext=\\t$/ pthread_mutexattr_setprio_ceiling/f ada-src/2ataspri.adb /^ function pthread_mutexattr_setprio_ceiling$/ pthread_mutexattr_setprotocol/f ada-src/2ataspri.adb /^ function pthread_mutexattr_setprotocol$/ +PTY_LENGTH objc-src/Subprocess.m 21 +PTY_TEMPLATE objc-src/Subprocess.m 20 +Public_T/t ada-src/etags-test-for.ada /^ type Public_T is$/ +Public_T/t ada-src/waroquiers.ada /^ type Public_T is$/ purpose c-src/emacs/src/lisp.h 1594 -push_kboard c-src/emacs/src/keyboard.c /^push_kboard (struct kboard *k)$/ pushclass_above c-src/etags.c /^pushclass_above (int bracelev, char *str, int len)/ +PUSH_C_STR c-src/emacs/src/keyboard.c /^#define PUSH_C_STR(str, listvar) \\$/ +PUSH_HANDLER c-src/emacs/src/lisp.h /^#define PUSH_HANDLER(c, tag_ch_val, handlertype) \\/ +push_kboard c-src/emacs/src/keyboard.c /^push_kboard (struct kboard *k)$/ put_entries c-src/etags.c /^put_entries (register node *np)$/ +PVEC_BOOL_VECTOR c-src/emacs/src/lisp.h 787 +PVEC_BUFFER c-src/emacs/src/lisp.h 788 +PVEC_CHAR_TABLE c-src/emacs/src/lisp.h 796 +PVEC_COMPILED c-src/emacs/src/lisp.h 795 +PVEC_FONT c-src/emacs/src/lisp.h 798 +PVEC_FRAME c-src/emacs/src/lisp.h 785 +PVEC_FREE c-src/emacs/src/lisp.h 783 +PVEC_HASH_TABLE c-src/emacs/src/lisp.h 789 +PVEC_NORMAL_VECTOR c-src/emacs/src/lisp.h 782 +PVEC_OTHER c-src/emacs/src/lisp.h 793 +PVEC_PROCESS c-src/emacs/src/lisp.h 784 +PVEC_SUB_CHAR_TABLE c-src/emacs/src/lisp.h 797 +PVEC_SUBR c-src/emacs/src/lisp.h 792 +PVEC_TERMINAL c-src/emacs/src/lisp.h 790 pvec_type c-src/emacs/src/lisp.h 780 +PVEC_TYPE_MASK c-src/emacs/src/lisp.h 819 +PVEC_WINDOW_CONFIGURATION c-src/emacs/src/lisp.h 791 +PVEC_WINDOW c-src/emacs/src/lisp.h 786 +p.x forth-src/test-forth.fth /^ 1 CELLS +FIELD p.x \\ A single cell filed name/ pxref tex-src/texinfo.tex /^\\def\\pxref#1{see \\xrefX[#1,,,,,,,]}$/ +p.y forth-src/test-forth.fth /^ 1 CELLS +FIELD p.y \\ A single cell field name/ +Python_functions c-src/etags.c /^Python_functions (FILE *inf)$/ +Python_help c-src/etags.c 660 +Python_suffixes c-src/etags.c 658 +PYTSRC make-src/Makefile /^PYTSRC=server.py$/ quantizing html-src/algrthms.html /^Quantizing the Received$/ questo ../c/c.web 34 quiettest make-src/Makefile /^quiettest:$/ quit_char c-src/emacs/src/keyboard.c 192 +QUIT c-src/emacs/src/lisp.h 3101 +QUITP c-src/emacs/src/lisp.h 3112 quit_throw_to_read_char c-src/emacs/src/keyboard.c /^quit_throw_to_read_char (bool from_signal)$/ quotation tex-src/texinfo.tex /^\\def\\quotation{%$/ -qux ruby-src/test1.ru /^ alias_method :qux, :tee, attr_accessor(:bogus)/ +/quoteleft ps-src/rfc1245.ps /^\/quoteleft \/quoteright \/.notdef \/.notdef \/ydieresi/ qux1 ruby-src/test1.ru /^ :qux1)$/ +qux ruby-src/test1.ru /^ alias_method :qux, :tee, attr_accessor(:bogus)/ qux= ruby-src/test1.ru /^ def qux=(tee)$/ -r tex-src/texinfo.tex /^\\def\\r##1{\\realbackslash r {##1}}$/ -r tex-src/texinfo.tex /^\\def\\r##1{\\realbackslash r {##1}}%$/ -r tex-src/texinfo.tex /^\\def\\r#1{{\\rm #1}} % roman font$/ -r tex-src/texinfo.tex /^\\let\\r=\\indexdummyfont$/ r0 c-src/sysdep.h 54 r1 c-src/sysdep.h 55 r_alloc c-src/emacs/src/lisp.h /^extern void *r_alloc (void **, size_t) ATTRIBUTE_A/ -range_exp y-src/parse.y 269 +Range cp-src/Range.h 35 +Range cp-src/Range.h /^ Range (const Range& r)$/ +Range cp-src/Range.h /^ Range (double b, double l)$/ +Range cp-src/Range.h /^ Range (double b, double l, double i)$/ +Range cp-src/Range.h /^ Range (void)$/ +RANGED_INTEGERP c-src/emacs/src/lisp.h /^RANGED_INTEGERP (intmax_t lo, Lisp_Object x, intma/ range_exp_list y-src/parse.y 273 -raw_keybuf c-src/emacs/src/keyboard.c 116 -raw_keybuf_count c-src/emacs/src/keyboard.c 117 +range_exp y-src/parse.y 269 rawbackslash tex-src/texinfo.tex /^\\let\\rawbackslash=\\relax%$/ -rawbackslashxx tex-src/texinfo.tex /^\\def\\rawbackslashxx{\\indexbackslash}% \\indexbacksl/ rawbackslashxx tex-src/texinfo.tex /^\\def\\rawbackslashxx{\\indexbackslash}%$/ +rawbackslashxx tex-src/texinfo.tex /^\\def\\rawbackslashxx{\\indexbackslash}% \\indexbacksl/ +raw_keybuf_count c-src/emacs/src/keyboard.c 117 +raw_keybuf c-src/emacs/src/keyboard.c 116 rbrb tex-src/texinfo.tex /^\\def\\lbrb{{\\bf\\char`\\[}} \\def\\rbrb{{\\bf\\char`\\]}}$/ rbtp c.c 240 -re_iswctype c-src/emacs/src/regex.h 602 -re_nsub c-src/emacs/src/regex.h 364 -re_pattern_buffer c-src/emacs/src/regex.h 335 -re_pattern_buffer c-src/h.h 119 -re_registers c-src/emacs/src/regex.h 428 -re_wchar_t c-src/emacs/src/regex.h 600 -re_wchar_t c-src/emacs/src/regex.h 623 -re_wctype c-src/emacs/src/regex.h 601 -re_wctype_t c-src/emacs/src/regex.h 599 -re_wctype_t c-src/emacs/src/regex.h 618 -re_wctype_to_bit c-src/emacs/src/regex.h /^# define re_wctype_to_bit(cc) 0$/ -read cp-src/conway.hpp /^ char read() { return alive; }$/ -read php-src/lce_functions.php /^ function read()$/ -read-key-sequence c-src/emacs/src/keyboard.c /^DEFUN ("read-key-sequence", Fread_key_sequence, Sr/ -read-key-sequence-vector c-src/emacs/src/keyboard.c /^DEFUN ("read-key-sequence-vector", Fread_key_seque/ +RCSid objc-src/PackInsp.m 30 read1 ruby-src/test1.ru /^ attr_reader :read1 , :read2; attr_writer :writ/ read2 ruby-src/test1.ru /^ attr_reader :read1 , :read2; attr_writer :writ/ +readable_events c-src/emacs/src/keyboard.c /^readable_events (int flags)$/ +READABLE_EVENTS_DO_TIMERS_NOW c-src/emacs/src/keyboard.c 346 +READABLE_EVENTS_FILTER_EVENTS c-src/emacs/src/keyboard.c 347 +READABLE_EVENTS_IGNORE_SQUEEZABLES c-src/emacs/src/keyboard.c 348 +readauxfile tex-src/texinfo.tex /^\\def\\readauxfile{%$/ read_char c-src/emacs/src/keyboard.c /^read_char (int commandflag, Lisp_Object map,$/ read_char_help_form_unwind c-src/emacs/src/keyboard.c /^read_char_help_form_unwind (void)$/ read_char_minibuf_menu_prompt c-src/emacs/src/keyboard.c /^read_char_minibuf_menu_prompt (int commandflag,$/ read_char_x_menu_prompt c-src/emacs/src/keyboard.c /^read_char_x_menu_prompt (Lisp_Object map,$/ +read cp-src/conway.hpp /^ char read() { return alive; }$/ read_decoded_event_from_main_queue c-src/emacs/src/keyboard.c /^read_decoded_event_from_main_queue (struct timespe/ read_event_from_main_queue c-src/emacs/src/keyboard.c /^read_event_from_main_queue (struct timespec *end_t/ -read_key_sequence c-src/emacs/src/keyboard.c /^read_key_sequence (Lisp_Object *keybuf, int bufsiz/ read_key_sequence_cmd c-src/emacs/src/keyboard.c 232 +read-key-sequence c-src/emacs/src/keyboard.c /^DEFUN ("read-key-sequence", Fread_key_sequence, Sr/ +read_key_sequence c-src/emacs/src/keyboard.c /^read_key_sequence (Lisp_Object *keybuf, int bufsiz/ read_key_sequence_remapped c-src/emacs/src/keyboard.c 233 +read-key-sequence-vector c-src/emacs/src/keyboard.c /^DEFUN ("read-key-sequence-vector", Fread_key_seque/ read_key_sequence_vs c-src/emacs/src/keyboard.c /^read_key_sequence_vs (Lisp_Object prompt, Lisp_Obj/ -read_menu_command c-src/emacs/src/keyboard.c /^read_menu_command (void)$/ -read_toc perl-src/htlmify-cystic /^sub read_toc ()$/ -readable_events c-src/emacs/src/keyboard.c /^readable_events (int flags)$/ -readauxfile tex-src/texinfo.tex /^\\def\\readauxfile{%$/ readline c-src/etags.c /^readline (linebuffer *lbp, FILE *stream)$/ readline_internal c-src/etags.c /^readline_internal (linebuffer *lbp, register FILE / -realloc c-src/emacs/src/gmalloc.c /^realloc (void *ptr, size_t size)$/ +Read_Lock/p ada-src/2ataspri.adb /^ procedure Read_Lock (L : in out Lock; Ceiling_V/ +Read_Lock/p ada-src/2ataspri.ads /^ procedure Read_Lock (L : in out Lock; Ceiling_V/ +read_menu_command c-src/emacs/src/keyboard.c /^read_menu_command (void)$/ +read php-src/lce_functions.php /^ function read()$/ +read_toc perl-src/htlmify-cystic /^sub read_toc ()$/ +ReadVacation cp-src/functions.cpp /^void ReadVacation ( char *filename ) {$/ realloc c-src/emacs/src/gmalloc.c 1720 realloc c-src/emacs/src/gmalloc.c 65 realloc c-src/emacs/src/gmalloc.c 69 +_realloc c-src/emacs/src/gmalloc.c /^_realloc (void *ptr, size_t size)$/ +realloc c-src/emacs/src/gmalloc.c /^realloc (void *ptr, size_t size)$/ reallochook c-src/emacs/src/gmalloc.c /^reallochook (void *ptr, size_t size)$/ -recent-keys c-src/emacs/src/keyboard.c /^DEFUN ("recent-keys", Frecent_keys, Srecent_keys, / +_realloc_internal c-src/emacs/src/gmalloc.c /^_realloc_internal (void *ptr, size_t size)$/ +_realloc_internal_nolock c-src/emacs/src/gmalloc.c /^_realloc_internal_nolock (void *ptr, size_t size)$/ +RE_BACKSLASH_ESCAPE_IN_LISTS c-src/emacs/src/regex.h 47 +RE_BK_PLUS_QM c-src/emacs/src/regex.h 52 +RECC_ALNUM c-src/emacs/src/regex.h 610 +RECC_ALPHA c-src/emacs/src/regex.h 610 +RECC_ASCII c-src/emacs/src/regex.h 617 +RECC_BLANK c-src/emacs/src/regex.h 615 +RECC_CNTRL c-src/emacs/src/regex.h 613 +RECC_DIGIT c-src/emacs/src/regex.h 614 +RECC_ERROR c-src/emacs/src/regex.h 609 +RECC_GRAPH c-src/emacs/src/regex.h 611 +RECC_LOWER c-src/emacs/src/regex.h 612 +RECC_MULTIBYTE c-src/emacs/src/regex.h 616 +RECC_NONASCII c-src/emacs/src/regex.h 616 +RECC_PRINT c-src/emacs/src/regex.h 611 +RECC_PUNCT c-src/emacs/src/regex.h 613 +RECC_SPACE c-src/emacs/src/regex.h 615 +RECC_UNIBYTE c-src/emacs/src/regex.h 617 +RECC_UPPER c-src/emacs/src/regex.h 612 +RECC_WORD c-src/emacs/src/regex.h 610 +RECC_XDIGIT c-src/emacs/src/regex.h 614 recent_keys c-src/emacs/src/keyboard.c 100 +recent-keys c-src/emacs/src/keyboard.c /^DEFUN ("recent-keys", Frecent_keys, Srecent_keys, / recent_keys_index c-src/emacs/src/keyboard.c 94 +RE_CHAR_CLASSES c-src/emacs/src/regex.h 58 +RE_CONTEXT_INDEP_ANCHORS c-src/emacs/src/regex.h 72 +RE_CONTEXT_INDEP_OPS c-src/emacs/src/regex.h 80 +RE_CONTEXT_INVALID_OPS c-src/emacs/src/regex.h 84 record_asynch_buffer_change c-src/emacs/src/keyboard.c /^record_asynch_buffer_change (void)$/ record_auto_save c-src/emacs/src/keyboard.c /^record_auto_save (void)$/ record_char c-src/emacs/src/keyboard.c /^record_char (Lisp_Object c)$/ @@ -3864,71 +3298,176 @@ record_menu_key c-src/emacs/src/keyboard.c /^record_menu_key (Lisp_Object c)$/ record_single_kboard_state c-src/emacs/src/keyboard.c /^record_single_kboard_state ()$/ record_xmalloc c-src/emacs/src/lisp.h /^extern void *record_xmalloc (size_t) ATTRIBUTE_ALL/ recover_top_level_message c-src/emacs/src/keyboard.c 138 +Rectangle.getPos lua-src/test.lua /^function Rectangle.getPos ()$/ recursion-depth c-src/emacs/src/keyboard.c /^DEFUN ("recursion-depth", Frecursion_depth, Srecur/ -recursive-edit c-src/emacs/src/keyboard.c /^DEFUN ("recursive-edit", Frecursive_edit, Srecursi/ recursive_edit_1 c-src/emacs/src/keyboard.c /^recursive_edit_1 (void)$/ +recursive-edit c-src/emacs/src/keyboard.c /^DEFUN ("recursive-edit", Frecursive_edit, Srecursi/ recursive_edit_unwind c-src/emacs/src/keyboard.c /^recursive_edit_unwind (Lisp_Object buffer)$/ +RED cp-src/screen.hpp 16 +RE_DEBUG c-src/emacs/src/regex.h 161 redirect c-src/emacs/src/lisp.h 663 +RE_DOT_NEWLINE c-src/emacs/src/regex.h 88 +RE_DOT_NOT_NULL c-src/emacs/src/regex.h 92 reduce prol-src/natded.prolog /^reduce((X^M)@N,L):- % beta reduction$/ reduce_subterm prol-src/natded.prolog /^reduce_subterm(M,M2):-$/ -ref tex-src/texinfo.tex /^\\def\\ref#1{\\xrefX[#1,,,,,,,]}$/ +RE_DUP_MAX c-src/emacs/src/regex.h 253 +RE_DUP_MAX c-src/emacs/src/regex.h 256 +/ReEncode ps-src/rfc1245.ps /^\/ReEncode { $/ refill tex-src/texinfo.tex /^\\let\\refill=\\relax$/ refreshPort pyt-src/server.py /^ def refreshPort(self):$/ +RE_FRUGAL c-src/emacs/src/regex.h 147 +ref tex-src/texinfo.tex /^\\def\\ref#1{\\xrefX[#1,,,,,,,]}$/ refx tex-src/texinfo.tex /^\\def\\refx#1#2{%$/ -reg_errcode_t c-src/emacs/src/regex.h 323 +REG_BADBR c-src/emacs/src/regex.h 313 +REG_BADPAT c-src/emacs/src/regex.h 305 +REG_BADRPT c-src/emacs/src/regex.h 316 +REG_EBRACE c-src/emacs/src/regex.h 312 +REG_EBRACK c-src/emacs/src/regex.h 310 +REG_ECOLLATE c-src/emacs/src/regex.h 306 +REG_ECTYPE c-src/emacs/src/regex.h 307 +REG_EEND c-src/emacs/src/regex.h 319 +REG_EESCAPE c-src/emacs/src/regex.h 308 +REG_ENOSYS c.c 279 +REG_ENOSYS c-src/emacs/src/regex.h 297 +REG_EPAREN c-src/emacs/src/regex.h 311 +REG_ERANGE c-src/emacs/src/regex.h 314 +REG_ERANGEX c-src/emacs/src/regex.h 322 +REG_ERPAREN c-src/emacs/src/regex.h 321 reg_errcode_t c.c 279 -reg_syntax_t c-src/emacs/src/regex.h 43 +reg_errcode_t c-src/emacs/src/regex.h 323 +REG_ESIZE c-src/emacs/src/regex.h 320 +REG_ESPACE c-src/emacs/src/regex.h 315 +REG_ESUBREG c-src/emacs/src/regex.h 309 regex c-src/etags.c 219 -regex.o make-src/Makefile /^regex.o: emacs\/src\/regex.c$/ -regex_t c-src/emacs/src/regex.h 416 -regex_tag_multiline c-src/etags.c /^regex_tag_multiline (void)$/ regexfile make-src/Makefile /^regexfile: Makefile$/ +_REGEX_H c-src/emacs/src/regex.h 21 +REGEX make-src/Makefile /^REGEX=\/[ \\t]*DEFVAR_[A-Z_ \\t\\n(]+"\\([^"]+\\)"\/$/ +REGEXOBJS make-src/Makefile /^REGEXOBJS=regex.o$/ +regex.o make-src/Makefile /^regex.o: emacs\/src\/regex.c$/ regexp c-src/etags.c 256 regexp c-src/etags.c 268 +regex_tag_multiline c-src/etags.c /^regex_tag_multiline (void)$/ +regex_t c-src/emacs/src/regex.h 416 +REG_EXTENDED c-src/emacs/src/regex.h 263 +REG_ICASE c-src/emacs/src/regex.h 267 registerAction objcpp-src/SimpleCalc.M /^- registerAction:(SEL)action$/ register_heapinfo c-src/emacs/src/gmalloc.c /^register_heapinfo (void)$/ regmatch_t c-src/emacs/src/regex.h 451 +REG_NEWLINE c-src/emacs/src/regex.h 272 +REG_NOERROR c-src/emacs/src/regex.h 300 +REG_NOMATCH c-src/emacs/src/regex.h 301 +REG_NOSUB c-src/emacs/src/regex.h 276 +REG_NOTBOL c-src/emacs/src/regex.h 286 +REG_NOTEOL c-src/emacs/src/regex.h 289 regoff_t c-src/emacs/src/regex.h 423 -regs c-src/etags.c 263 -regs cp-src/screen.cpp 16 regs_allocated c-src/emacs/src/regex.h 379 +regs cp-src/screen.cpp 16 +regs c-src/etags.c 263 regset c-src/h.h 31 +REGS_FIXED c-src/emacs/src/regex.h 378 +REGS_REALLOCATE c-src/emacs/src/regex.h 377 +REGS_UNALLOCATED c-src/emacs/src/regex.h 376 +reg_syntax_t c-src/emacs/src/regex.h 43 regular_top_level_message c-src/emacs/src/keyboard.c 143 rehash_size c-src/emacs/src/lisp.h 1835 rehash_threshold c-src/emacs/src/lisp.h 1839 +RE_HAT_LISTS_NOT_NEWLINE c-src/emacs/src/regex.h 96 +RE_INTERVALS c-src/emacs/src/regex.h 101 +re_iswctype c-src/emacs/src/regex.h 602 relative_filename c-src/etags.c /^relative_filename (char *file, char *dir)$/ release distrib make-src/Makefile /^release distrib: web$/ +RELEASELIST make-src/Makefile /^RELEASELIST=pot@gnu.org xemacs-review@xemacs.org j/ +ReleaseNameString pas-src/common.pas /^procedure ReleaseNameString; (* (var NSP: NameStri/ +RE_LIMITED_OPS c-src/emacs/src/regex.h 105 removeexp prol-src/natded.prolog /^removeexp(E,E,'NIL'):-!.$/ +RemoveLayer lua-src/allegro.lua /^function RemoveLayer ()$/ +RemoveUnderlineControl pas-src/common.pas /^function RemoveUnderlineControl; (*($/ +RE_NEWLINE_ALT c-src/emacs/src/regex.h 109 +RE_NO_BK_BRACES c-src/emacs/src/regex.h 114 +RE_NO_BK_PARENS c-src/emacs/src/regex.h 118 +RE_NO_BK_REFS c-src/emacs/src/regex.h 122 +RE_NO_BK_VBAR c-src/emacs/src/regex.h 126 +RE_NO_EMPTY_RANGES c-src/emacs/src/regex.h 132 +RE_NO_GNU_OPS c-src/emacs/src/regex.h 144 +RE_NO_NEWLINE_ANCHOR c-src/emacs/src/regex.h 153 +RE_NO_POSIX_BACKTRACKING c-src/emacs/src/regex.h 140 +RE_NREGS c-src/emacs/src/regex.h 440 +re_nsub c-src/emacs/src/regex.h 364 reorder_modifiers c-src/emacs/src/keyboard.c /^reorder_modifiers (Lisp_Object symbol)$/ +re_pattern_buffer c-src/emacs/src/regex.h 335 +re_pattern_buffer c-src/h.h 119 +ReprOfChar pas-src/common.pas /^function ReprOfChar; (*( ch : char) : NameString;*/ +__repr__ pyt-src/server.py /^ def __repr__(self):$/ request c.c /^request request (a, b)$/ requeued_events_pending_p c-src/emacs/src/keyboard.c /^requeued_events_pending_p (void)$/ -require merc-src/accumulator.m /^:- import_module require.$/ required_argument c-src/getopt.h 90 -reset-this-command-lengths c-src/emacs/src/keyboard.c /^DEFUN ("reset-this-command-lengths", Freset_this_c/ +require merc-src/accumulator.m /^:- import_module require.$/ +re_registers c-src/emacs/src/regex.h 428 resetmathfonts tex-src/texinfo.tex /^\\def\\resetmathfonts{%$/ -rest tex-src/texinfo.tex /^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/ +reset-this-command-lengths c-src/emacs/src/keyboard.c /^DEFUN ("reset-this-command-lengths", Freset_this_c/ +RE_SHY_GROUPS c-src/emacs/src/regex.h 150 restore_getcjmp c-src/emacs/src/keyboard.c /^restore_getcjmp (sys_jmp_buf temp)$/ restore_kboard_configuration c-src/emacs/src/keyboard.c /^restore_kboard_configuration (int was_locked)$/ +/restorematrix ps-src/rfc1245.ps /^\/restorematrix {$/ +_Restrict_arr_ c-src/emacs/src/regex.h 555 +_Restrict_arr_ c-src/emacs/src/regex.h 557 +_Restrict_ c-src/emacs/src/regex.h 540 +_Restrict_ c-src/emacs/src/regex.h 542 +_Restrict_ c-src/emacs/src/regex.h 544 +rest tex-src/texinfo.tex /^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/ result tex-src/texinfo.tex /^\\def\\result{\\leavevmode\\raise.15ex\\hbox to 1em{\\hf/ result tex-src/texinfo.tex /^\\def\\result{\\realbackslash result}$/ +RESUME_POLLING c-src/emacs/src/keyboard.c 2170 +RE_SYNTAX_AWK c-src/emacs/src/regex.h 186 +RE_SYNTAX_ED c-src/emacs/src/regex.h 216 +RE_SYNTAX_EGREP c-src/emacs/src/regex.h 206 +RE_SYNTAX_EMACS c-src/emacs/src/regex.h 183 +RE_SYNTAX_GNU_AWK c-src/emacs/src/regex.h 193 +RE_SYNTAX_GREP c-src/emacs/src/regex.h 201 +RE_SYNTAX_POSIX_AWK c-src/emacs/src/regex.h 197 +RE_SYNTAX_POSIX_BASIC c-src/emacs/src/regex.h 225 +_RE_SYNTAX_POSIX_COMMON c-src/emacs/src/regex.h 221 +RE_SYNTAX_POSIX_EGREP c-src/emacs/src/regex.h 212 +RE_SYNTAX_POSIX_EXTENDED c-src/emacs/src/regex.h 234 +RE_SYNTAX_POSIX_MINIMAL_BASIC c-src/emacs/src/regex.h 231 +RE_SYNTAX_POSIX_MINIMAL_EXTENDED c-src/emacs/src/regex.h 242 +RE_SYNTAX_SED c-src/emacs/src/regex.h 218 +RE_TRANSLATE_TYPE c-src/emacs/src/regex.h 332 return_to_command_loop c-src/emacs/src/keyboard.c 135 +RETURN_UNGCPRO c-src/emacs/src/lisp.h /^#define RETURN_UNGCPRO(expr) \\$/ +RE_UNMATCHED_RIGHT_PAREN_ORD c-src/emacs/src/regex.h 136 reverse prol-src/natded.prolog /^reverse([],Ws,Ws).$/ revert objc-src/PackInsp.m /^-revert:sender$/ +re_wchar_t c-src/emacs/src/regex.h 600 +re_wchar_t c-src/emacs/src/regex.h 623 +re_wctype c-src/emacs/src/regex.h 601 +re_wctype_t c-src/emacs/src/regex.h 599 +re_wctype_t c-src/emacs/src/regex.h 618 +re_wctype_to_bit c-src/emacs/src/regex.h /^# define re_wctype_to_bit(cc) 0$/ +/RF ps-src/rfc1245.ps /^\/RF { $/ right c-src/etags.c 216 right_shift y-src/cccp.y /^right_shift (a, b)$/ ring1 c.c 241 ring2 c.c 242 -rm tex-src/texinfo.tex /^ \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/ -rm tex-src/texinfo.tex /^\\def\\rm{\\realbackslash rm }%$/ rm_eo c-src/emacs/src/regex.h 450 rm_so c-src/emacs/src/regex.h 449 +rm tex-src/texinfo.tex /^\\def\\rm{\\realbackslash rm }%$/ +rm tex-src/texinfo.tex /^ \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/ rng_base cp-src/Range.h 79 rng_inc cp-src/Range.h 81 rng_limit cp-src/Range.h 80 rng_nelem cp-src/Range.h 83 rosso cp-src/c.C 40 +/R ps-src/rfc1245.ps /^\/R { $/ +/RR ps-src/rfc1245.ps /^\/RR { $/ +RSH y-src/cccp.c 17 rsyncfromfly make-src/Makefile /^rsyncfromfly:$/ rsynctofly make-src/Makefile /^rsynctofly:$/ +RTE/s ada-src/2ataspri.adb /^ package RTE renames Interfaces.C.POSIX_RTE;$/ +r tex-src/texinfo.tex /^\\def\\r##1{\\realbackslash r {##1}}%$/ +r tex-src/texinfo.tex /^\\def\\r##1{\\realbackslash r {##1}}$/ +r tex-src/texinfo.tex /^\\def\\r#1{{\\rm #1}} % roman font$/ +r tex-src/texinfo.tex /^\\let\\r=\\indexdummyfont$/ rtint c-src/h.h 60 rtint c-src/h.h 68 rtstr c-src/h.h 61 @@ -3938,140 +3477,222 @@ rtunion_def c-src/h.h 64 rtx c-src/h.h 62 rtxnp c-src/h.h 71 rtxp c-src/h.h 70 -s c-src/emacs/src/lisp.h 4672 -s c-src/emacs/src/lisp.h 4678 +` ruby-src/test.rb /^ def `(command)$/ ++ ruby-src/test.rb /^ def +(y)$/ +<< ruby-src/test.rb /^ def <<(y)$/ +<= ruby-src/test.rb /^ def <=(y)$/ +<=> ruby-src/test.rb /^ def <=>(y)$/ +== ruby-src/test.rb /^ def ==(y)$/ +=== ruby-src/test.rb /^ def ===(y)$/ +[] ruby-src/test.rb /^ def [](y)$/ +[]= ruby-src/test.rb /^ def []=(y, val)$/ +RUN make-src/Makefile /^RUN=$/ +RUN make-src/Makefile /^RUN=time --quiet --format '%U + %S: %E'$/ +RXINCLUDE make-src/Makefile /^RXINCLUDE=-Iemacs\/src$/ s1 cp-src/c.C 32 +/s1 ps-src/rfc1245.ps /^\/s1 1 string def$/ s2 cp-src/c.C 35 +SAFE_ALLOCA c-src/emacs/src/lisp.h /^#define SAFE_ALLOCA(size) ((size) <= sa_avail \\/ +SAFE_ALLOCA_LISP c-src/emacs/src/lisp.h /^#define SAFE_ALLOCA_LISP(buf, nelt) \\$/ +SAFE_ALLOCA_STRING c-src/emacs/src/lisp.h /^#define SAFE_ALLOCA_STRING(ptr, string) \\$/ +SAFE_FREE c-src/emacs/src/lisp.h /^#define SAFE_FREE() \\$/ +SAFE_NALLOCA c-src/emacs/src/lisp.h /^#define SAFE_NALLOCA(buf, multiplier, nitems) \\/ safe_run_hook_funcall c-src/emacs/src/keyboard.c /^safe_run_hook_funcall (ptrdiff_t nargs, Lisp_Objec/ -safe_run_hooks c-src/emacs/src/keyboard.c /^safe_run_hooks (Lisp_Object hook)$/ safe_run_hooks_1 c-src/emacs/src/keyboard.c /^safe_run_hooks_1 (ptrdiff_t nargs, Lisp_Object *ar/ +safe_run_hooks c-src/emacs/src/keyboard.c /^safe_run_hooks (Lisp_Object hook)$/ safe_run_hooks_error c-src/emacs/src/keyboard.c /^safe_run_hooks_error (Lisp_Object error, ptrdiff_t/ -samp tex-src/texinfo.tex /^\\def\\samp #1{`\\tclose{#1}'\\null}$/ -samp tex-src/texinfo.tex /^\\def\\samp##1{\\realbackslash samp {##1}}$/ +Sample tex-src/gzip.texi /^@node Sample, Invoking gzip, Overview, Top$/ samp tex-src/texinfo.tex /^\\def\\samp##1{\\realbackslash samp {##1}}%$/ +samp tex-src/texinfo.tex /^\\def\\samp##1{\\realbackslash samp {##1}}$/ +samp tex-src/texinfo.tex /^\\def\\samp #1{`\\tclose{#1}'\\null}$/ samp tex-src/texinfo.tex /^\\let\\samp=\\indexdummyfont$/ -save pyt-src/server.py /^ def save(self):$/ +/sangle ps-src/rfc1245.ps /^\/sangle 1 0 dmatrix defaultmatrix dtransform exch / +SAVE_FUNCPOINTER c-src/emacs/src/lisp.h 2049 save_getcjmp c-src/emacs/src/keyboard.c /^save_getcjmp (sys_jmp_buf temp)$/ -save_type c-src/emacs/src/lisp.h /^save_type (struct Lisp_Save_Value *v, int n)$/ +SAVE_INTEGER c-src/emacs/src/lisp.h 2048 +/savematrix ps-src/rfc1245.ps /^\/savematrix {$/ savenstr c-src/etags.c /^savenstr (const char *cp, int len)$/ +SAVE_OBJECT c-src/emacs/src/lisp.h 2051 +SAVE_POINTER c-src/emacs/src/lisp.h 2050 +save pyt-src/server.py /^ def save(self):$/ +SAVE_SLOT_BITS c-src/emacs/src/lisp.h 2055 savestr c-src/etags.c /^savestr (const char *cp)$/ +SAVE_TYPE_BITS c-src/emacs/src/lisp.h 2062 +SAVE_TYPE_BITS c-src/emacs/src/lisp.h 2114 +SAVE_TYPE_BITS c-src/emacs/src/lisp.h 2123 +save_type c-src/emacs/src/lisp.h /^save_type (struct Lisp_Save_Value *v, int n)$/ +SAVE_TYPE_FUNCPTR_PTR_OBJ c-src/emacs/src/lisp.h 2076 +SAVE_TYPE_INT_INT c-src/emacs/src/lisp.h 2066 +SAVE_TYPE_INT_INT_INT c-src/emacs/src/lisp.h 2067 +SAVE_TYPE_MEMORY c-src/emacs/src/lisp.h 2080 +SAVE_TYPE_OBJ_OBJ c-src/emacs/src/lisp.h 2069 +SAVE_TYPE_OBJ_OBJ_OBJ c-src/emacs/src/lisp.h 2070 +SAVE_TYPE_OBJ_OBJ_OBJ_OBJ c-src/emacs/src/lisp.h 2071 +SAVE_TYPE_PTR_INT c-src/emacs/src/lisp.h 2073 +SAVE_TYPE_PTR_OBJ c-src/emacs/src/lisp.h 2074 +SAVE_TYPE_PTR_PTR c-src/emacs/src/lisp.h 2075 +SAVE_UNUSED c-src/emacs/src/lisp.h 2047 +SAVE_VALUEP c-src/emacs/src/lisp.h /^SAVE_VALUEP (Lisp_Object x)$/ +SAVE_VALUE_SLOTS c-src/emacs/src/lisp.h 2058 say go-src/test.go /^func say(msg string) {$/ -sc tex-src/texinfo.tex /^\\def\\sc#1{{\\smallcaps#1}} % smallcaps font$/ -sc tex-src/texinfo.tex /^\\let\\sc=\\indexdummyfont$/ +__sbrk c-src/emacs/src/gmalloc.c 1516 +SBYTES c-src/emacs/src/lisp.h /^SBYTES (Lisp_Object string)$/ scan_separators c-src/etags.c /^scan_separators (char *name)$/ +S c.c 156 +SCHARS c-src/emacs/src/lisp.h /^SCHARS (Lisp_Object string)$/ +Scheme_functions c-src/etags.c /^Scheme_functions (FILE *inf)$/ +Scheme_help c-src/etags.c 667 +Scheme_suffixes c-src/etags.c 665 scolonseen c-src/etags.c 2447 scratch c-src/sysdep.h 56 +SCREEN_FP cp-src/screen.hpp /^#define SCREEN_FP(x,y) \\$/ +SCREEN_START cp-src/screen.hpp 33 scroll_bar_parts c-src/emacs/src/keyboard.c 5189 -sec tex-src/texinfo.tex /^\\global\\let\\section = \\appendixsec$/ +s c-src/emacs/src/lisp.h 4672 +s c-src/emacs/src/lisp.h 4678 +sc tex-src/texinfo.tex /^\\def\\sc#1{{\\smallcaps#1}} % smallcaps font$/ +sc tex-src/texinfo.tex /^\\let\\sc=\\indexdummyfont$/ +SDATA c-src/emacs/src/lisp.h /^SDATA (Lisp_Object string)$/ +SDTrefGetInteger pas-src/common.pas /^function SDTrefGetInteger : integer;$/ +SDTrefIsEnd pas-src/common.pas /^function SDTrefIsEnd : Boolean;$/ +SDTrefRecToString pas-src/common.pas /^procedure SDTrefRecToString (* ($/ +SDTrefSkipSpaces pas-src/common.pas /^procedure SDTrefSkipSpaces;$/ +SDTrefStringToRec pas-src/common.pas /^procedure SDTrefStringToRec (* ($/ seccheck tex-src/texinfo.tex /^\\def\\seccheck#1{\\if \\pageno<0 %$/ +secentryfonts tex-src/texinfo.tex /^\\def\\secentryfonts{\\textfonts}$/ secentry tex-src/texinfo.tex /^ \\def\\secentry ##1##2##3##4{}$/ secentry tex-src/texinfo.tex /^\\def\\secentry#1#2#3#4{\\dosecentry{#2.#3\\labelspace/ -secentryfonts tex-src/texinfo.tex /^\\def\\secentryfonts{\\textfonts}$/ secfonts tex-src/texinfo.tex /^\\def\\secfonts{%$/ -secheading tex-src/texinfo.tex /^\\def\\secheading #1#2#3{\\secheadingi {#2.#3\\enspace/ secheadingbreak tex-src/texinfo.tex /^\\def\\secheadingbreak{\\dobreak \\secheadingskip {-10/ secheadingi tex-src/texinfo.tex /^\\def\\secheadingi #1{{\\advance \\secheadingskip by \\/ +secheading tex-src/texinfo.tex /^\\def\\secheading #1#2#3{\\secheadingi {#2.#3\\enspace/ secondary tex-src/texinfo.tex /^\\def\\secondary #1#2{$/ +sec tex-src/texinfo.tex /^\\global\\let\\section = \\appendixsec$/ +section_href perl-src/htlmify-cystic /^sub section_href ($)$/ +section_name perl-src/htlmify-cystic 12 +section_name perl-src/htlmify-cystic /^sub section_name ($)$/ section perl-src/htlmify-cystic 25 section tex-src/texinfo.tex /^\\global\\let\\section = \\appendixsec$/ section tex-src/texinfo.tex /^\\global\\let\\section = \\numberedsec$/ section tex-src/texinfo.tex /^\\global\\let\\section = \\unnumberedsec$/ section tex-src/texinfo.tex /^\\let\\section=\\relax$/ -section_href perl-src/htlmify-cystic /^sub section_href ($)$/ -section_name perl-src/htlmify-cystic /^sub section_name ($)$/ -section_name perl-src/htlmify-cystic 12 section_toc perl-src/htlmify-cystic 15 -section_url perl-src/htlmify-cystic /^sub section_url ()$/ section_url_base perl-src/htlmify-cystic /^sub section_url_base ()$/ section_url_name perl-src/htlmify-cystic /^sub section_url_name ()$/ -sectionzzz tex-src/texinfo.tex /^\\outer\\def\\appendixsection{\\parsearg\\appendixsecti/ +section_url perl-src/htlmify-cystic /^sub section_url ()$/ sectionzzz tex-src/texinfo.tex /^\\outer\\def\\appendixsec{\\parsearg\\appendixsectionzz/ +sectionzzz tex-src/texinfo.tex /^\\outer\\def\\appendixsection{\\parsearg\\appendixsecti/ seczzz tex-src/texinfo.tex /^\\def\\infoappendixsec{\\parsearg\\appendixseczzz}$/ seczzz tex-src/texinfo.tex /^\\def\\seczzz #1{\\seccheck{section}%$/ +select_last prol-src/natded.prolog /^select_last([X],X,[]).$/ +SelectLayer lua-src/allegro.lua /^function SelectLayer (layer)$/ select prol-src/natded.prolog /^select(X,[X|Xs],Xs).$/ select-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun select-tags-table ()$/ select-tags-table-mode el-src/emacs/lisp/progmodes/etags.el /^(define-derived-mode select-tags-table-mode specia/ select-tags-table-mode-map el-src/emacs/lisp/progmodes/etags.el /^(defvar select-tags-table-mode-map ; Doc string?$/ select-tags-table-quit el-src/emacs/lisp/progmodes/etags.el /^(defun select-tags-table-quit ()$/ select-tags-table-select el-src/emacs/lisp/progmodes/etags.el /^(defun select-tags-table-select (button)$/ -select_last prol-src/natded.prolog /^select_last([X],X,[]).$/ -send objc-src/Subprocess.m /^- send:(const char *)string withNewline:(BOOL)want/ +Self/f ada-src/2ataspri.adb /^ function Self return TCB_Ptr is$/ +Self/f ada-src/2ataspri.ads /^ function Self return TCB_Ptr;$/ send objc-src/Subprocess.m /^- send:(const char *)string$/ +send objc-src/Subprocess.m /^- send:(const char *)string withNewline:(BOOL)want/ separator_names c-src/emacs/src/keyboard.c 7372 sepspaces tex-src/texinfo.tex /^\\gdef\\sepspaces{\\def {\\ }}}$/ serializeToVars php-src/lce_functions.php /^ function serializeToVars($prefix)$/ -set cp-src/conway.hpp /^ void set(void) { alive = 1; }$/ -set merc-src/accumulator.m /^:- import_module set.$/ -set tex-src/texinfo.tex /^\\def\\set{\\parsearg\\setxxx}$/ -set-input-interrupt-mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-interrupt-mode", Fset_input_inte/ -set-input-meta-mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-meta-mode", Fset_input_meta_mode/ -set-input-mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-mode", Fset_input_mode, Sset_inp/ -set-output-flow-control c-src/emacs/src/keyboard.c /^DEFUN ("set-output-flow-control", Fset_output_flow/ -set-quit-char c-src/emacs/src/keyboard.c /^DEFUN ("set-quit-char", Fset_quit_char, Sset_quit_/ -setDate cp-src/functions.cpp /^void Date::setDate ( int d , int m , int y ){$/ -setDelegate objc-src/Subprocess.m /^- setDelegate:anObject$/ -setRevertButtonTitle objc-src/PackInsp.m /^-setRevertButtonTitle$/ +ServerEdit pyt-src/server.py /^class ServerEdit(Frame):$/ +Server pyt-src/server.py /^class Server:$/ set_base cp-src/Range.h /^ void set_base (double b) { rng_base = b; }$/ +setchapternewpage tex-src/texinfo.tex /^\\def\\setchapternewpage #1 {\\csname CHAPPAG#1\\endcs/ +setchapterstyle tex-src/texinfo.tex /^\\def\\setchapterstyle #1 {\\csname CHAPF#1\\endcsname/ set_char_table_contents c-src/emacs/src/lisp.h /^set_char_table_contents (Lisp_Object table, ptrdif/ set_char_table_defalt c-src/emacs/src/lisp.h /^set_char_table_defalt (Lisp_Object table, Lisp_Obj/ set_char_table_extras c-src/emacs/src/lisp.h /^set_char_table_extras (Lisp_Object table, ptrdiff_/ set_char_table_purpose c-src/emacs/src/lisp.h /^set_char_table_purpose (Lisp_Object table, Lisp_Ob/ +set cp-src/conway.hpp /^ void set(void) { alive = 1; }$/ +setDate cp-src/functions.cpp /^void Date::setDate ( int d , int m , int y ){$/ +setdeffont tex-src/texinfo.tex /^\\def\\setdeffont #1 {\\csname DEF#1\\endcsname}$/ +setDelegate objc-src/Subprocess.m /^- setDelegate:anObject$/ +setfilename tex-src/texinfo.tex /^\\def\\setfilename{%$/ +setfilename tex-src/texinfo.tex /^ \\global\\let\\setfilename=\\comment % Ignore extra/ set_hash_key_slot c-src/emacs/src/lisp.h /^set_hash_key_slot (struct Lisp_Hash_Table *h, ptrd/ set_hash_value_slot c-src/emacs/src/lisp.h /^set_hash_value_slot (struct Lisp_Hash_Table *h, pt/ set_inc cp-src/Range.h /^ void set_inc (double i) { rng_inc = i; }$/ +set-input-interrupt-mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-interrupt-mode", Fset_input_inte/ +set-input-meta-mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-meta-mode", Fset_input_meta_mode/ +set-input-mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-mode", Fset_input_mode, Sset_inp/ set_limit cp-src/Range.h /^ void set_limit (double l) { rng_limit = l; }$/ +/setmanualfeed ps-src/rfc1245.ps /^\/setmanualfeed {$/ +set merc-src/accumulator.m /^:- import_module set.$/ +set-output-flow-control c-src/emacs/src/keyboard.c /^DEFUN ("set-output-flow-control", Fset_output_flow/ set_overlay_plist c-src/emacs/src/lisp.h /^set_overlay_plist (Lisp_Object overlay, Lisp_Objec/ +Set_Own_Priority/p ada-src/2ataspri.adb /^ procedure Set_Own_Priority (Prio : System.Any_P/ +Set_Own_Priority/p ada-src/2ataspri.ads /^ procedure Set_Own_Priority (Prio : System.Any_P/ +/setpapername ps-src/rfc1245.ps /^\/setpapername { $/ +/setpattern ps-src/rfc1245.ps /^\/setpattern {$/ set_poll_suppress_count c-src/emacs/src/keyboard.c /^set_poll_suppress_count (int count)$/ +Set_Priority/p ada-src/2ataspri.adb /^ procedure Set_Priority$/ +Set_Priority/p ada-src/2ataspri.ads /^ procedure Set_Priority (T : TCB_Ptr; Prio : Sys/ set_prop c-src/emacs/src/keyboard.c /^set_prop (ptrdiff_t idx, Lisp_Object val)$/ +SETPRT f-src/entry.for /^ ENTRY SETPRT ( SHORT, EXPL, LONG, TRACE, D/ +SETPRT f-src/entry.strange /^ ENTRY SETPRT ( SHORT, EXPL, LONG, TRACE, D/ +SETPRT f-src/entry.strange_suffix /^ ENTRY SETPRT ( SHORT, EXPL, LONG, TRACE, D/ +set-quit-char c-src/emacs/src/keyboard.c /^DEFUN ("set-quit-char", Fset_quit_char, Sset_quit_/ +setref tex-src/texinfo.tex /^\\def\\setref#1{%$/ +setref tex-src/texinfo.tex /^\\expandafter\\expandafter\\expandafter\\appendixsetre/ +setRevertButtonTitle objc-src/PackInsp.m /^-setRevertButtonTitle$/ set_save_integer c-src/emacs/src/lisp.h /^set_save_integer (Lisp_Object obj, int n, ptrdiff_/ set_save_pointer c-src/emacs/src/lisp.h /^set_save_pointer (Lisp_Object obj, int n, void *va/ set_string_intervals c-src/emacs/src/lisp.h /^set_string_intervals (Lisp_Object s, INTERVAL i)$/ set_sub_char_table_contents c-src/emacs/src/lisp.h /^set_sub_char_table_contents (Lisp_Object table, pt/ +SET_SYMBOL_BLV c-src/emacs/src/lisp.h /^SET_SYMBOL_BLV (struct Lisp_Symbol *sym, struct Li/ set_symbol_function c-src/emacs/src/lisp.h /^set_symbol_function (Lisp_Object sym, Lisp_Object / +SET_SYMBOL_FWD c-src/emacs/src/lisp.h /^SET_SYMBOL_FWD (struct Lisp_Symbol *sym, union Lis/ set_symbol_next c-src/emacs/src/lisp.h /^set_symbol_next (Lisp_Object sym, struct Lisp_Symb/ set_symbol_plist c-src/emacs/src/lisp.h /^set_symbol_plist (Lisp_Object sym, Lisp_Object pli/ -set_upto merc-src/accumulator.m /^:- func set_upto(accu_case, int) = set(accu_goal_i/ -set_waiting_for_input c-src/emacs/src/keyboard.c /^set_waiting_for_input (struct timespec *time_to_cl/ -setchapternewpage tex-src/texinfo.tex /^\\def\\setchapternewpage #1 {\\csname CHAPPAG#1\\endcs/ -setchapterstyle tex-src/texinfo.tex /^\\def\\setchapterstyle #1 {\\csname CHAPF#1\\endcsname/ -setdeffont tex-src/texinfo.tex /^\\def\\setdeffont #1 {\\csname DEF#1\\endcsname}$/ -setfilename tex-src/texinfo.tex /^ \\global\\let\\setfilename=\\comment % Ignore extra/ -setfilename tex-src/texinfo.tex /^\\def\\setfilename{%$/ -setref tex-src/texinfo.tex /^\\def\\setref#1{%$/ -setref tex-src/texinfo.tex /^\\expandafter\\expandafter\\expandafter\\appendixsetre/ +SET_SYMBOL_VAL c-src/emacs/src/lisp.h /^# define SET_SYMBOL_VAL(sym, v) lisp_h_SET_SYMBOL_/ +set tex-src/texinfo.tex /^\\def\\set{\\parsearg\\setxxx}$/ settitle tex-src/texinfo.tex /^\\def\\settitle{\\parsearg\\settitlezzz}$/ settitlezzz tex-src/texinfo.tex /^\\def\\settitlezzz #1{\\gdef\\thistitle{#1}}$/ setup cp-src/c.C 5 +set_upto merc-src/accumulator.m /^:- func set_upto(accu_case, int) = set(accu_goal_i/ +set_waiting_for_input c-src/emacs/src/keyboard.c /^set_waiting_for_input (struct timespec *time_to_cl/ setxxx tex-src/texinfo.tex /^\\def\\setxxx #1{$/ +/SF ps-src/rfc1245.ps /^\/SF { $/ sf tex-src/texinfo.tex /^\\def\\sf{\\fam=\\sffam \\tensf}$/ sf tex-src/texinfo.tex /^\\def\\sf{\\realbackslash sf}%$/ +@sf tex-src/texinfo.tex /^\\ifhmode\\edef\\@sf{\\spacefactor\\the\\spacefactor}\\\/\\/ +@sf tex-src/texinfo.tex /^\\let\\@sf\\empty$/ sf tex-src/texinfo.tex /^{\\let\\tentt=\\sectt \\let\\tt=\\sectt \\let\\sf=\\sectt$/ shift cp-src/functions.cpp /^void Date::shift ( void ){\/\/Shift this date to pre/ shortchapentry tex-src/texinfo.tex /^\\def\\shortchapentry#1#2#3{%$/ shortcontents tex-src/texinfo.tex /^\\let\\shortcontents = \\summarycontents$/ shortunnumberedentry tex-src/texinfo.tex /^\\def\\shortunnumberedentry#1#2{%$/ -shouldLoad objc-src/PackInsp.m /^-(BOOL)shouldLoad$/ -should_attempt_accu_transform merc-src/accumulator.m /^:- pred should_attempt_accu_transform(module_info:/ should_attempt_accu_transform_2 merc-src/accumulator.m /^:- pred should_attempt_accu_transform_2(module_inf/ +should_attempt_accu_transform merc-src/accumulator.m /^:- pred should_attempt_accu_transform(module_info:/ +shouldLoad objc-src/PackInsp.m /^-(BOOL)shouldLoad$/ should_see_this_array_type cp-src/c.C 156 should_see_this_function_pointer cp-src/c.C 153 should_see_this_one_enclosed_in_extern_C cp-src/c.C 149 show erl-src/gs_dialog.erl /^show(Module, Title, Message, Args) ->$/ showError objc-src/Subprocess.m /^showError (const char *errorString, id theDelegate/ -showInfo objc-src/PackInsp.m /^-showInfo:sender$/ show_help_echo c-src/emacs/src/keyboard.c /^show_help_echo (Lisp_Object help, Lisp_Object wind/ +showInfo objc-src/PackInsp.m /^-showInfo:sender$/ sig c-src/emacs/src/keyboard.c 7238 -signal_handler c-src/h.h 82 signal_handler1 c-src/h.h 83 +signal_handler c-src/h.h 82 signal_handler_t c-src/h.h 94 +SimpleCalc objcpp-src/SimpleCalc.H /^@interface SimpleCalc:Object$/ simulation html-src/software.html /^Software that I wrote for supporting my research a/ -single_kboard c-src/emacs/src/keyboard.c 89 -single_kboard_state c-src/emacs/src/keyboard.c /^single_kboard_state ()$/ singlecodeindexer tex-src/texinfo.tex /^\\def\\singlecodeindexer #1{\\doind{\\indexname}{\\code/ singleindexer tex-src/texinfo.tex /^\\def\\singleindexer #1{\\doind{\\indexname}{#1}}$/ +single_kboard c-src/emacs/src/keyboard.c 89 +single_kboard_state c-src/emacs/src/keyboard.c /^single_kboard_state ()$/ +SINGLE_LETTER_MOD c-src/emacs/src/keyboard.c 6212 +SINGLE_LETTER_MOD c-src/emacs/src/keyboard.c 6763 +SINGLE_LETTER_MOD c-src/emacs/src/keyboard.c /^#define SINGLE_LETTER_MOD(BIT) \\$/ singlespace tex-src/texinfo.tex /^\\def\\singlespace{%$/ -site cp-src/conway.hpp /^ site(int xi, int yi): x(xi), y(yi), alive(0) {/ site cp-src/conway.hpp 5 +site cp-src/conway.hpp /^ site(int xi, int yi): x(xi), y(yi), alive(0) {/ size c-src/emacs/src/gmalloc.c 156 size c-src/emacs/src/gmalloc.c 163 size c-src/emacs/src/gmalloc.c 1867 @@ -4079,12 +3700,16 @@ size c-src/emacs/src/lisp.h 1364 size c-src/emacs/src/lisp.h 1390 size c-src/etags.c 236 size c-src/etags.c 2522 +SIZEFORMAT objc-src/PackInsp.m 57 skeyseen c-src/etags.c 2445 +SkipBlanks pas-src/common.pas /^function SkipBlanks; (*($/ +SkipChars pas-src/common.pas /^function SkipChars; (*($/ skip_name c-src/etags.c /^skip_name (char *cp)$/ skip_non_spaces c-src/etags.c /^skip_non_spaces (char *cp)$/ skip_spaces c-src/etags.c /^skip_spaces (char *cp)$/ -sl tex-src/texinfo.tex /^ \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/ +SkipSpaces pas-src/common.pas /^procedure SkipSpaces; (* (Str : NameString; var I / sl tex-src/texinfo.tex /^\\def\\sl{\\realbackslash sl }%$/ +sl tex-src/texinfo.tex /^ \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/ smallbook tex-src/texinfo.tex /^\\def\\smallbook{$/ smallbook tex-src/texinfo.tex /^\\let\\smallbook=\\relax$/ smallcaps tex-src/texinfo.tex /^ \\let\\tenbf=\\chapbf \\let\\tentt=\\chaptt \\let\\small/ @@ -4102,31 +3727,72 @@ snarf-tag-function el-src/emacs/lisp/progmodes/etags.el /^(defvar snarf-tag-func snone c-src/etags.c 2443 solutions merc-src/accumulator.m /^:- import_module solutions.$/ some_mouse_moved c-src/emacs/src/keyboard.c /^some_mouse_moved (void)$/ -sp tex-src/texinfo.tex /^\\def\\sp{\\parsearg\\spxxx}$/ -space tex-src/texinfo.tex /^ {#2\\labelspace #1}\\dotfill\\doshortpageno{#3}}%/ -space tex-src/texinfo.tex /^ \\dosubsubsecentry{#2.#3.#4.#5\\labelspace#1}{#6}}/ -space tex-src/texinfo.tex /^\\def\\chapentry#1#2#3{\\dochapentry{#2\\labelspace#1}/ -space tex-src/texinfo.tex /^\\def\\secentry#1#2#3#4{\\dosecentry{#2.#3\\labelspace/ -space tex-src/texinfo.tex /^\\def\\subsecentry#1#2#3#4#5{\\dosubsecentry{#2.#3.#4/ +#some-storage forth-src/test-forth.fth /^2000 buffer: #some-storage$/ spacer c-src/emacs/src/lisp.h 1975 spacer c-src/emacs/src/lisp.h 1982 spacer c-src/emacs/src/lisp.h 2036 spacer c-src/emacs/src/lisp.h 2205 -spacesplit tex-src/texinfo.tex /^\\gdef\\spacesplit#1#2^^M{\\endgroup\\spacesplitfoo{#1/ spacesplitfoo tex-src/texinfo.tex /^\\long\\gdef\\spacesplitfoo#1#2 #3#4\\spacesplitfoo{%$/ -specbind_tag c-src/emacs/src/lisp.h 2943 +spacesplit tex-src/texinfo.tex /^\\gdef\\spacesplit#1#2^^M{\\endgroup\\spacesplitfoo{#1/ +space tex-src/texinfo.tex /^ {#2\\labelspace #1}\\dotfill\\doshortpageno{#3}}%/ +space tex-src/texinfo.tex /^\\def\\chapentry#1#2#3{\\dochapentry{#2\\labelspace#1}/ +space tex-src/texinfo.tex /^\\def\\secentry#1#2#3#4{\\dosecentry{#2.#3\\labelspace/ +space tex-src/texinfo.tex /^\\def\\subsecentry#1#2#3#4#5{\\dosubsecentry{#2.#3.#4/ +space tex-src/texinfo.tex /^ \\dosubsubsecentry{#2.#3.#4.#5\\labelspace#1}{#6}}/ specbinding c-src/emacs/src/lisp.h 2955 +specbind_tag c-src/emacs/src/lisp.h 2943 specheader tex-src/texinfo.tex /^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/ specialsymbol prol-src/natded.prolog /^specialsymbol(C1,C2,S):-$/ +SPECPDL_BACKTRACE c-src/emacs/src/lisp.h 2948 +SPECPDL_INDEX c-src/emacs/src/lisp.h /^SPECPDL_INDEX (void)$/ +SPECPDL_LET c-src/emacs/src/lisp.h 2949 +SPECPDL_LET_DEFAULT c-src/emacs/src/lisp.h 2952 +SPECPDL_LET_LOCAL c-src/emacs/src/lisp.h 2951 +SPECPDL_UNWIND c-src/emacs/src/lisp.h 2944 +SPECPDL_UNWIND_INT c-src/emacs/src/lisp.h 2946 +SPECPDL_UNWIND_PTR c-src/emacs/src/lisp.h 2945 +SPECPDL_UNWIND_VOID c-src/emacs/src/lisp.h 2947 specx\defspecheader tex-src/texinfo.tex /^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/ splitexp prol-src/natded.prolog /^splitexp(E,E,('NIL','NIL')):-!.$/ splitoff tex-src/texinfo.tex /^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/ +/S ps-src/rfc1245.ps /^\/S { $/ +sp tex-src/texinfo.tex /^\\def\\sp{\\parsearg\\spxxx}$/ spxxx tex-src/texinfo.tex /^\\def\\spxxx #1{\\par \\vskip #1\\baselineskip}$/ +Square.something:Bar lua-src/test.lua /^function Square.something:Bar ()$/ srclist make-src/Makefile /^srclist: Makefile$/ +SRCS make-src/Makefile /^SRCS=Makefile ${ADASRC} ${ASRC} ${CSRC} ${CPSRC} $/ +SREF c-src/emacs/src/lisp.h /^SREF (Lisp_Object string, ptrdiff_t index)$/ ss3 c.c 255 +SSDATA c-src/emacs/src/lisp.h /^SSDATA (Lisp_Object string)$/ +SSET c-src/emacs/src/lisp.h /^SSET (Lisp_Object string, ptrdiff_t index, unsigne/ sss1 c.c 252 sss2 c.c 253 sstab prol-src/natded.prolog /^sstab(2,'C',',').$/ +stack c.c 155 +STACK_CONS c-src/emacs/src/lisp.h /^#define STACK_CONS(a, b) \\$/ +stagseen c-src/etags.c 2446 +standalone make-src/Makefile /^standalone:$/ +startcontents tex-src/texinfo.tex /^\\def\\startcontents#1{%$/ +start c-src/emacs/src/keyboard.c 8753 +start c-src/emacs/src/lisp.h 2038 +start c-src/emacs/src/regex.h 431 +StartDay cp-src/functions.cpp /^Date StartDay(Date a,int days){\/\/Function to calcu/ +startenumeration tex-src/texinfo.tex /^\\def\\startenumeration#1{%$/ +start php-src/lce_functions.php /^ function start($line, $class)$/ +start_polling c-src/emacs/src/keyboard.c /^start_polling (void)$/ +=starts-with-equals! scm-src/test.scm /^(define =starts-with-equals! #t)$/ +start_up prol-src/natded.prolog /^start_up:-$/ +start y-src/cccp.y 143 +STATE_ABORT php-src/lce_functions.php 25 +STATE_COMPRESSD objc-src/PackInsp.m 54 +STATE_INSTALLED objc-src/PackInsp.m 53 +STATE_LOOP php-src/lce_functions.php 27 +STATE_OK php-src/lce_functions.php 26 +state_protected_p c-src/emacs/src/gmalloc.c 401 +STAT_EQ objc-src/PackInsp.m /^#define STAT_EQ(s1, s2) ((s1)->st_ino == (s2)->st_/ +statetable html-src/algrthms.html /^Next$/ +STATE_UNINSTALLED objc-src/PackInsp.m 52 +staticetags make-src/Makefile /^staticetags:$/ st_C_attribute c-src/etags.c 2209 st_C_class c-src/etags.c 2212 st_C_define c-src/etags.c 2213 @@ -4142,73 +3808,75 @@ st_C_operator c-src/etags.c 2211 st_C_struct c-src/etags.c 2213 st_C_template c-src/etags.c 2212 st_C_typedef c-src/etags.c 2213 -st_none c-src/etags.c 2206 -stack c.c 155 -stagseen c-src/etags.c 2446 -standalone make-src/Makefile /^standalone:$/ -start c-src/emacs/src/keyboard.c 8753 -start c-src/emacs/src/lisp.h 2038 -start c-src/emacs/src/regex.h 431 -start php-src/lce_functions.php /^ function start($line, $class)$/ -start y-src/cccp.y 143 -start_polling c-src/emacs/src/keyboard.c /^start_polling (void)$/ -start_up prol-src/natded.prolog /^start_up:-$/ -startcontents tex-src/texinfo.tex /^\\def\\startcontents#1{%$/ -startenumeration tex-src/texinfo.tex /^\\def\\startenumeration#1{%$/ -state_protected_p c-src/emacs/src/gmalloc.c 401 -statetable html-src/algrthms.html /^Next$/ -staticetags make-src/Makefile /^staticetags:$/ +STDIN c-src/etags.c 408 +STDIN c-src/etags.c 411 step cp-src/clheir.hpp /^ virtual void step(void) { }$/ step cp-src/conway.hpp /^ void step(void) { alive = next_alive; }$/ step_everybody cp-src/clheir.cpp /^void step_everybody(void)$/ +st_none c-src/etags.c 2206 +STOP_POLLING c-src/emacs/src/keyboard.c 2166 stop_polling c-src/emacs/src/keyboard.c /^stop_polling (void)$/ +stored_goal_plain_call merc-src/accumulator.m /^:- inst stored_goal_plain_call for goal_store.stor/ store_info merc-src/accumulator.m /^:- type store_info$/ store_user_signal_events c-src/emacs/src/keyboard.c /^store_user_signal_events (void)$/ -stored_goal_plain_call merc-src/accumulator.m /^:- inst stored_goal_plain_call for goal_store.stor/ -str go-src/test1.go 9 strcaseeq c-src/etags.c /^#define strcaseeq(s,t) (assert ((s)!=NULL && (t)!=/ streq c-src/etags.c /^#define streq(s,t) (assert ((s)!=NULL || (t)!=NULL/ -string merc-src/accumulator.m /^:- import_module string.$/ +str go-src/test1.go 9 +STRING_BYTES_BOUND c-src/emacs/src/lisp.h 1261 +STRING_BYTES c-src/emacs/src/lisp.h /^STRING_BYTES (struct Lisp_String *s)$/ string_intervals c-src/emacs/src/lisp.h /^string_intervals (Lisp_Object s)$/ +string merc-src/accumulator.m /^:- import_module string.$/ +STRING_MULTIBYTE c-src/emacs/src/lisp.h /^STRING_MULTIBYTE (Lisp_Object str)$/ +STRING_SET_CHARS c-src/emacs/src/lisp.h /^STRING_SET_CHARS (Lisp_Object string, ptrdiff_t ne/ +STRING_SET_MULTIBYTE c-src/emacs/src/lisp.h /^#define STRING_SET_MULTIBYTE(STR) \\$/ +STRING_SET_UNIBYTE c-src/emacs/src/lisp.h /^#define STRING_SET_UNIBYTE(STR) \\$/ stripLine php-src/lce_functions.php /^ function stripLine($line, $class)$/ stripname pas-src/common.pas /^function stripname; (* ($/ +StripPath pas-src/common.pas /^function StripPath; (*($/ strncaseeq c-src/etags.c /^#define strncaseeq(s,t,n) (assert ((s)!=NULL && (t/ strneq c-src/etags.c /^#define strneq(s,t,n) (assert ((s)!=NULL || (t)!=N/ strong tex-src/texinfo.tex /^\\let\\strong=\\b$/ strong tex-src/texinfo.tex /^\\let\\strong=\\indexdummyfont$/ +__str__ pyt-src/server.py /^ def __str__(self):$/ structdef c-src/etags.c 2448 stuff_buffered_input c-src/emacs/src/keyboard.c /^stuff_buffered_input (Lisp_Object stuffstring)$/ +SUB_CHAR_TABLE_OFFSET c-src/emacs/src/lisp.h 1701 +SUB_CHAR_TABLE_P c-src/emacs/src/lisp.h /^SUB_CHAR_TABLE_P (Lisp_Object a)$/ subheading tex-src/texinfo.tex /^\\def\\subheading{\\parsearg\\subsecheadingi}$/ -subprocess objc-src/PackInsp.m /^-subprocess:(Subprocess *)sender output:(char *)bu/ subprocessDone objc-src/PackInsp.m /^-subprocessDone:(Subprocess *)sender$/ -subsec tex-src/texinfo.tex /^\\global\\let\\subsection = \\appendixsubsec$/ -subsec tex-src/texinfo.tex /^\\let\\subsec=\\relax$/ +subprocess objc-src/PackInsp.m /^-subprocess:(Subprocess *)sender output:(char *)bu/ +Subprocess objc-src/Subprocess.h 41 +Subprocess objc-src/Subprocess.h /^@interface Subprocess:Object$/ +SUBRP c-src/emacs/src/lisp.h /^SUBRP (Lisp_Object a)$/ +subsecentryfonts tex-src/texinfo.tex /^\\let\\subsecentryfonts = \\textfonts$/ subsecentry tex-src/texinfo.tex /^ \\def\\subsecentry ##1##2##3##4##5{}$/ subsecentry tex-src/texinfo.tex /^\\def\\subsecentry#1#2#3#4#5{\\dosubsecentry{#2.#3.#4/ -subsecentryfonts tex-src/texinfo.tex /^\\let\\subsecentryfonts = \\textfonts$/ subsecfonts tex-src/texinfo.tex /^\\def\\subsecfonts{%$/ -subsecheading tex-src/texinfo.tex /^\\def\\subsecheading #1#2#3#4{\\subsecheadingi {#2.#3/ subsecheadingbreak tex-src/texinfo.tex /^\\def\\subsecheadingbreak{\\dobreak \\subsecheadingski/ subsecheadingi tex-src/texinfo.tex /^\\def\\subsecheadingi #1{{\\advance \\subsecheadingski/ +subsecheading tex-src/texinfo.tex /^\\def\\subsecheading #1#2#3#4{\\subsecheadingi {#2.#3/ +subsec tex-src/texinfo.tex /^\\global\\let\\subsection = \\appendixsubsec$/ +subsec tex-src/texinfo.tex /^\\let\\subsec=\\relax$/ +subsection_marker perl-src/htlmify-cystic 161 subsection perl-src/htlmify-cystic 26 subsection tex-src/texinfo.tex /^\\global\\let\\subsection = \\appendixsubsec$/ subsection tex-src/texinfo.tex /^\\global\\let\\subsection = \\numberedsubsec$/ subsection tex-src/texinfo.tex /^\\global\\let\\subsection = \\unnumberedsubsec$/ subsection tex-src/texinfo.tex /^\\let\\subsection=\\relax$/ -subsection_marker perl-src/htlmify-cystic 161 subseczzz tex-src/texinfo.tex /^\\def\\infoappendixsubsec{\\parsearg\\appendixsubseczz/ subseczzz tex-src/texinfo.tex /^\\outer\\def\\appendixsubsec{\\parsearg\\appendixsubsec/ -subst prol-src/natded.prolog /^subst(var(Y),var(X),M,N):-$/ substitute c-src/etags.c /^substitute (char *in, char *out, struct re_registe/ +subst prol-src/natded.prolog /^subst(var(Y),var(X),M,N):-$/ +SubString pas-src/common.pas /^function SubString; (*($/ subsubheading tex-src/texinfo.tex /^\\def\\subsubheading{\\parsearg\\subsubsecheadingi}$/ -subsubsec tex-src/texinfo.tex /^\\global\\let\\subsubsection = \\appendixsubsubsec$/ -subsubsec tex-src/texinfo.tex /^\\let\\subsubsec=\\relax$/ +subsubsecentryfonts tex-src/texinfo.tex /^\\let\\subsubsecentryfonts = \\textfonts$/ subsubsecentry tex-src/texinfo.tex /^ \\def\\subsubsecentry ##1##2##3##4##5##6{}$/ subsubsecentry tex-src/texinfo.tex /^\\def\\subsubsecentry#1#2#3#4#5#6{%$/ -subsubsecentryfonts tex-src/texinfo.tex /^\\let\\subsubsecentryfonts = \\textfonts$/ subsubsecfonts tex-src/texinfo.tex /^\\def\\subsubsecfonts{\\subsecfonts} % Maybe this sho/ -subsubsecheading tex-src/texinfo.tex /^\\def\\subsubsecheading #1#2#3#4#5{\\subsubsecheading/ subsubsecheadingi tex-src/texinfo.tex /^\\def\\subsubsecheadingi #1{{\\advance \\subsecheading/ +subsubsecheading tex-src/texinfo.tex /^\\def\\subsubsecheading #1#2#3#4#5{\\subsubsecheading/ +subsubsec tex-src/texinfo.tex /^\\global\\let\\subsubsection = \\appendixsubsubsec$/ +subsubsec tex-src/texinfo.tex /^\\let\\subsubsec=\\relax$/ subsubsection perl-src/htlmify-cystic 27 subsubsection tex-src/texinfo.tex /^\\global\\let\\subsubsection = \\appendixsubsubsec$/ subsubsection tex-src/texinfo.tex /^\\global\\let\\subsubsection = \\numberedsubsubsec$/ @@ -4216,9 +3884,9 @@ subsubsection tex-src/texinfo.tex /^\\global\\let\\subsubsection = \\unnumbereds subsubsection tex-src/texinfo.tex /^\\let\\subsubsection=\\relax$/ subsubseczzz tex-src/texinfo.tex /^\\def\\infoappendixsubsubsec{\\parsearg\\appendixsubsu/ subsubseczzz tex-src/texinfo.tex /^\\outer\\def\\appendixsubsubsec{\\parsearg\\appendixsub/ -subtitle tex-src/texinfo.tex /^ \\def\\subtitle{\\parsearg\\subtitlezzz}%$/ subtitlefont tex-src/texinfo.tex /^ \\def\\subtitlefont{\\subtitlerm \\normalbaselinesk/ subtitlerm tex-src/texinfo.tex /^ \\let\\subtitlerm=\\tenrm$/ +subtitle tex-src/texinfo.tex /^ \\def\\subtitle{\\parsearg\\subtitlezzz}%$/ subtitlezzz tex-src/texinfo.tex /^ \\def\\subtitlezzz##1{{\\subtitlefont \\rightline{#/ subtle ruby-src/test1.ru /^ :tee ; attr_reader :subtle$/ subtree prol-src/natded.prolog /^subtree(T,T).$/ @@ -4232,18 +3900,37 @@ sval y-src/cccp.y 116 swallow_events c-src/emacs/src/keyboard.c /^swallow_events (bool do_display)$/ switch_line_buffers c-src/etags.c /^#define switch_line_buffers() (curndx = 1 - curndx/ sxhash_combine c-src/emacs/src/lisp.h /^sxhash_combine (EMACS_UINT x, EMACS_UINT y)$/ -sym_type c-src/etags.c 2204 +SXHASH_REDUCE c-src/emacs/src/lisp.h /^SXHASH_REDUCE (EMACS_UINT x)$/ +SYMBOL_BLV c-src/emacs/src/lisp.h /^SYMBOL_BLV (struct Lisp_Symbol *sym)$/ +SYMBOL_CONSTANT_P c-src/emacs/src/lisp.h /^# define SYMBOL_CONSTANT_P(sym) lisp_h_SYMBOL_CONS/ symbol c-src/emacs/src/lisp.h 2980 +SYMBOL_FORWARDED c-src/emacs/src/lisp.h 651 +SYMBOL_FWD c-src/emacs/src/lisp.h /^SYMBOL_FWD (struct Lisp_Symbol *sym)$/ +SYMBOL_INDEX c-src/emacs/src/lisp.h /^#define SYMBOL_INDEX(sym) i##sym$/ symbol_interned c-src/emacs/src/lisp.h 639 +SYMBOL_INTERNED c-src/emacs/src/lisp.h 642 +SYMBOL_INTERNED_IN_INITIAL_OBARRAY c-src/emacs/src/lisp.h 643 +SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P c-src/emacs/src/lisp.h /^SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P (Lisp_Object / +SYMBOL_INTERNED_P c-src/emacs/src/lisp.h /^SYMBOL_INTERNED_P (Lisp_Object sym)$/ +SYMBOL_LOCALIZED c-src/emacs/src/lisp.h 650 symbol_name c-src/emacs/src/lisp.h 1687 +SYMBOL_NAME c-src/emacs/src/lisp.h /^SYMBOL_NAME (Lisp_Object sym)$/ +SYMBOLP c-src/emacs/src/lisp.h /^# define SYMBOLP(x) lisp_h_SYMBOLP (x)$/ +SYMBOL_PLAINVAL c-src/emacs/src/lisp.h 648 symbol_redirect c-src/emacs/src/lisp.h 646 +SYMBOL_UNINTERNED c-src/emacs/src/lisp.h 641 +SYMBOL_VAL c-src/emacs/src/lisp.h /^# define SYMBOL_VAL(sym) lisp_h_SYMBOL_VAL (sym)$/ +SYMBOL_VARALIAS c-src/emacs/src/lisp.h 649 syms_of_abbrev c-src/abbrev.c /^syms_of_abbrev ()$/ syms_of_keyboard c-src/emacs/src/keyboard.c /^syms_of_keyboard (void)$/ +sym_type c-src/etags.c 2204 synchronize_system_messages_locale c-src/emacs/src/lisp.h /^INLINE void synchronize_system_messages_locale (vo/ synchronize_system_time_locale c-src/emacs/src/lisp.h /^INLINE void synchronize_system_time_locale (void) / syncodeindex tex-src/texinfo.tex /^\\def\\syncodeindex #1 #2 {%$/ synindex tex-src/texinfo.tex /^\\def\\synindex #1 #2 {%$/ syntax c-src/emacs/src/regex.h 350 +SYSCALL c-src/machsyscalls.c /^#define SYSCALL(name, number, type, args, typed_ar/ +syscall_error c-src/sysdep.h 34 sys_jmp_buf c-src/emacs/src/lisp.h 2906 sys_jmp_buf c-src/emacs/src/lisp.h 2910 sys_jmp_buf c-src/emacs/src/lisp.h 2916 @@ -4253,14 +3940,12 @@ sys_longjmp c-src/emacs/src/lisp.h /^# define sys_longjmp(j, v) siglongjmp (j, v sys_setjmp c-src/emacs/src/lisp.h /^# define sys_setjmp(j) _setjmp (j)$/ sys_setjmp c-src/emacs/src/lisp.h /^# define sys_setjmp(j) setjmp (j)$/ sys_setjmp c-src/emacs/src/lisp.h /^# define sys_setjmp(j) sigsetjmp (j, 0)$/ -syscall_error c-src/sysdep.h 34 -t cp-src/c.C 52 -t tex-src/texinfo.tex /^\\def\\t##1{\\realbackslash r {##1}}%$/ -t tex-src/texinfo.tex /^\\def\\t#1{{\\tt \\exhyphenpenalty=10000\\rawbackslash / -t tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ -t tex-src/texinfo.tex /^\\let\\t=\\indexdummyfont$/ +System.Task_Primitives/b ada-src/2ataspri.adb /^package body System.Task_Primitives is$/ +System.Task_Primitives/s ada-src/2ataspri.ads /^package System.Task_Primitives is$/ t1 cp-src/c.C 34 t2 cp-src/c.C 38 +T2 cp-src/fail.C 16 +T3 c.c 163 tab_count_words c-src/tab.c /^int tab_count_words(char **tab)$/ tab_delete_first c-src/tab.c /^int tab_delete_first(char **tab)$/ tab_fill c-src/tab.c /^char **tab_fill(char *str, char delim)$/ @@ -4269,18 +3954,6 @@ table tex-src/texinfo.tex /^\\def\\table{\\begingroup\\inENV\\obeylines\\obeyspa tablex tex-src/texinfo.tex /^\\gdef\\tablex #1^^M{%$/ tabley tex-src/texinfo.tex /^\\gdef\\tabley#1#2 #3 #4 #5 #6 #7\\endtabley{\\endgrou/ tablez tex-src/texinfo.tex /^\\def\\tablez #1#2#3#4#5#6{%$/ -tag-any-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-any-match-p (_tag)$/ -tag-exact-file-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-exact-file-name-match-p (tag)$/ -tag-exact-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-exact-match-p (tag)$/ -tag-file-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-file-name-match-p (tag)$/ -tag-find-file-of-tag el-src/emacs/lisp/progmodes/etags.el /^(defun tag-find-file-of-tag (file) ; Doc string?$/ -tag-find-file-of-tag-noselect el-src/emacs/lisp/progmodes/etags.el /^(defun tag-find-file-of-tag-noselect (file)$/ -tag-implicit-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-implicit-name-match-p (tag)$/ -tag-lines-already-matched el-src/emacs/lisp/progmodes/etags.el /^(defvar tag-lines-already-matched nil$/ -tag-partial-file-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-partial-file-name-match-p (_tag)$/ -tag-re-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-re-match-p (re)$/ -tag-symbol-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-symbol-match-p (tag)$/ -tag-word-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-word-match-p (tag)$/ tag1 c-src/dostorture.c /^(*tag1 (sig, handler)) ()$/ tag1 c-src/h.h 110 tag1 c-src/torture.c /^(*tag1 (sig, handler)) ()$/ @@ -4294,12 +3967,22 @@ tag5 c-src/dostorture.c /^tag5 (handler, arg)$/ tag5 c-src/torture.c /^tag5 (handler, arg)$/ tag6 c-src/dostorture.c /^tag6 (void (*handler) (void *), void *arg)$/ tag6 c-src/torture.c /^tag6 (void (*handler) (void *), void *arg)$/ -tag_or_ch c-src/emacs/src/lisp.h 3026 +tag-any-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-any-match-p (_tag)$/ +tag-exact-file-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-exact-file-name-match-p (tag)$/ +tag-exact-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-exact-match-p (tag)$/ +tag-file-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-file-name-match-p (tag)$/ +tag-find-file-of-tag el-src/emacs/lisp/progmodes/etags.el /^(defun tag-find-file-of-tag (file) ; Doc string?$/ +tag-find-file-of-tag-noselect el-src/emacs/lisp/progmodes/etags.el /^(defun tag-find-file-of-tag-noselect (file)$/ taggedfname c-src/etags.c 207 -tags make-src/Makefile /^tags: TAGS$/ +tag-implicit-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-implicit-name-match-p (tag)$/ +tag-lines-already-matched el-src/emacs/lisp/progmodes/etags.el /^(defvar tag-lines-already-matched nil$/ +tag_or_ch c-src/emacs/src/lisp.h 3026 +tag-partial-file-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-partial-file-name-match-p (_tag)$/ +TAG_PTR c-src/emacs/src/lisp.h /^#define TAG_PTR(tag, ptr) \\$/ +tag-re-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-re-match-p (re)$/ tags-add-tables el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-add-tables 'ask-user$/ -tags-apropos el-src/emacs/lisp/progmodes/etags.el /^(defun tags-apropos (regexp)$/ tags-apropos-additional-actions el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-apropos-additional-actions nil$/ +tags-apropos el-src/emacs/lisp/progmodes/etags.el /^(defun tags-apropos (regexp)$/ tags-apropos-function el-src/emacs/lisp/progmodes/etags.el /^(defvar tags-apropos-function nil$/ tags-apropos-verbose el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-apropos-verbose nil$/ tags-case-fold-search el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-case-fold-search 'default$/ @@ -4321,6 +4004,8 @@ tags-loop-eval el-src/emacs/lisp/progmodes/etags.el /^(defun tags-loop-eval (for tags-loop-operate el-src/emacs/lisp/progmodes/etags.el /^(defvar tags-loop-operate nil$/ tags-loop-revert-buffers el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-loop-revert-buffers nil$/ tags-loop-scan el-src/emacs/lisp/progmodes/etags.el /^(defvar tags-loop-scan$/ +TAGS make-src/Makefile /^TAGS: etags.c$/ +tags make-src/Makefile /^tags: TAGS$/ tags-next-table el-src/emacs/lisp/progmodes/etags.el /^(defun tags-next-table ()$/ tags-query-replace el-src/emacs/lisp/progmodes/etags.el /^(defun tags-query-replace (from to &optional delim/ tags-recognize-empty-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun tags-recognize-empty-tags-table ()$/ @@ -4346,15 +4031,34 @@ tags-table-set-list el-src/emacs/lisp/progmodes/etags.el /^(defvar tags-table-se tags-tag-face el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-tag-face 'default$/ tags-verify-table el-src/emacs/lisp/progmodes/etags.el /^(defun tags-verify-table (file)$/ tags-with-face el-src/emacs/lisp/progmodes/etags.el /^(defmacro tags-with-face (face &rest body)$/ +tag-symbol-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-symbol-match-p (tag)$/ +TAG_SYMOFFSET c-src/emacs/src/lisp.h /^#define TAG_SYMOFFSET(offset) \\$/ +tag-word-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-word-match-p (tag)$/ +Tapes tex-src/gzip.texi /^@node Tapes, Problems, Environment, Top$/ target_multibyte c-src/emacs/src/regex.h 407 -tclose tex-src/texinfo.tex /^\\def\\tclose##1{\\realbackslash tclose {##1}}$/ +TAS_Cell/t ada-src/2ataspri.ads /^ type TAS_Cell is$/ +TAS_Cell/t ada-src/2ataspri.ads /^ type TAS_Cell is private;$/ +Task_Control_Block/t ada-src/2ataspri.ads /^ type Task_Control_Block is record$/ +Task_Storage_Size/t ada-src/2ataspri.ads /^ type Task_Storage_Size is new Interfaces.C.size/ +Task_Type/b ada-src/etags-test-for.ada /^ task body Task_Type is$/ +Task_Type/b ada-src/waroquiers.ada /^ task body Task_Type is$/ +Task_Type/k ada-src/etags-test-for.ada /^ task type Task_Type is$/ +Task_Type/k ada-src/waroquiers.ada /^ task type Task_Type is$/ +TCB_Ptr/t ada-src/2ataspri.ads /^ type TCB_Ptr is access all Task_Control_Block;$/ +TCLFLAGS make-src/Makefile /^TCLFLAGS=--lang=none --regex='\/proc[ \\t]+\\([^ \\t]+/ tclose tex-src/texinfo.tex /^\\def\\tclose##1{\\realbackslash tclose {##1}}%$/ +tclose tex-src/texinfo.tex /^\\def\\tclose##1{\\realbackslash tclose {##1}}$/ tclose tex-src/texinfo.tex /^\\def\\tclose#1{{\\rm \\tcloserm=\\fontdimen2\\font \\tt / tclose tex-src/texinfo.tex /^\\let\\tclose=\\indexdummyfont$/ tcpdump html-src/software.html /^tcpdump$/ +t cp-src/c.C 52 +T cp-src/fail.C 14 teats cp-src/c.C 127 tee ruby-src/test1.ru /^ attr_accessor :tee$/ tee= ruby-src/test1.ru /^ attr_accessor :tee$/ +temp1 tex-src/texinfo.tex /^\\xdef\\temp1{#2}%$/ +temp1 tex-src/texinfo.tex /^\\xdef\\temp1{#2 #3}%$/ +temporarily_switch_to_single_kboard c-src/emacs/src/keyboard.c /^temporarily_switch_to_single_kboard (struct frame / temp tex-src/texinfo.tex /^\\edef\\temp{%$/ temp tex-src/texinfo.tex /^\\edef\\temp{{\\realbackslash chapentry $/ temp tex-src/texinfo.tex /^\\edef\\temp{{\\realbackslash chapentry {#1}{\\the\\cha/ @@ -4369,15 +4073,12 @@ temp tex-src/texinfo.tex /^\\edef\\temp{{\\realbackslash unnumbsubsubsecentry{#1 temp tex-src/texinfo.tex /^\\else \\let\\temp=\\ifclearfail \\fi$/ temp tex-src/texinfo.tex /^\\else \\let\\temp=\\relax \\fi$/ temp tex-src/texinfo.tex /^\\expandafter\\ifx\\csname IF#1\\endcsname\\relax \\let\\/ -temp1 tex-src/texinfo.tex /^\\xdef\\temp1{#2 #3}%$/ -temp1 tex-src/texinfo.tex /^\\xdef\\temp1{#2}%$/ -temporarily_switch_to_single_kboard c-src/emacs/src/keyboard.c /^temporarily_switch_to_single_kboard (struct frame / +tenbf tex-src/texinfo.tex /^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/ tenbf tex-src/texinfo.tex /^ \\let\\tenbf=\\chapbf \\let\\tentt=\\chaptt \\let\\small/ tenbf tex-src/texinfo.tex /^ \\let\\tenbf=\\indbf \\let\\tentt=\\indtt \\let\\smallca/ tenbf tex-src/texinfo.tex /^ \\let\\tenbf=\\secbf \\let\\tentt=\\sectt \\let\\smallca/ tenbf tex-src/texinfo.tex /^ \\let\\tenbf=\\ssecbf \\let\\tentt=\\ssectt \\let\\small/ tenbf tex-src/texinfo.tex /^ \\let\\tenbf=\\textbf \\let\\tentt=\\texttt \\let\\small/ -tenbf tex-src/texinfo.tex /^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/ tend c-src/etags.c 2432 teni tex-src/texinfo.tex /^ \\let\\tensf=\\chapsf \\let\\teni=\\chapi \\let\\tensy=\\/ teni tex-src/texinfo.tex /^ \\let\\tensf=\\indsf \\let\\teni=\\indi \\let\\tensy=\\in/ @@ -4409,55 +4110,121 @@ tensy tex-src/texinfo.tex /^ \\let\\tensf=\\indsf \\let\\teni=\\indi \\let\\ten tensy tex-src/texinfo.tex /^ \\let\\tensf=\\secsf \\let\\teni=\\seci \\let\\tensy=\\se/ tensy tex-src/texinfo.tex /^ \\let\\tensf=\\ssecsf \\let\\teni=\\sseci \\let\\tensy=\\/ tensy tex-src/texinfo.tex /^ \\let\\tensf=\\textsf \\let\\teni=\\texti \\let\\tensy=\\/ +tentt tex-src/texinfo.tex /^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/ tentt tex-src/texinfo.tex /^ \\let\\tenbf=\\chapbf \\let\\tentt=\\chaptt \\let\\small/ tentt tex-src/texinfo.tex /^ \\let\\tenbf=\\indbf \\let\\tentt=\\indtt \\let\\smallca/ tentt tex-src/texinfo.tex /^ \\let\\tenbf=\\secbf \\let\\tentt=\\sectt \\let\\smallca/ tentt tex-src/texinfo.tex /^ \\let\\tenbf=\\ssecbf \\let\\tentt=\\ssectt \\let\\small/ tentt tex-src/texinfo.tex /^ \\let\\tenbf=\\textbf \\let\\tentt=\\texttt \\let\\small/ -tentt tex-src/texinfo.tex /^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/ tentt tex-src/texinfo.tex /^{\\let\\tentt=\\sectt \\let\\tt=\\sectt \\let\\sf=\\sectt$/ -term merc-src/accumulator.m /^:- import_module term.$/ -terminate objc-src/Subprocess.m /^- terminate:sender$/ +TERMINALP c-src/emacs/src/lisp.h /^TERMINALP (Lisp_Object a)$/ terminateInput objc-src/Subprocess.m /^- terminateInput$/ -test c-src/emacs/src/lisp.h 1871 +terminate objc-src/Subprocess.m /^- terminate:sender$/ +term merc-src/accumulator.m /^:- import_module term.$/ +test1 rs-src/test.rs /^fn test1() {$/ +Test_Abort/p ada-src/2ataspri.adb /^ procedure Test_Abort is$/ +Test_Abort/p ada-src/2ataspri.ads /^ procedure Test_Abort;$/ +Test_And_Set/p ada-src/2ataspri.adb /^ procedure Test_And_Set (Cell : in out TAS_Cell;/ +Test_And_Set/p ada-src/2ataspri.ads /^ procedure Test_And_Set (Cell : in out TAS_Cell;/ +test-begin scm-src/test.scm /^(define-syntax test-begin$/ test cp-src/c.C 86 +test_crlf1 test_crlf.c /^void test_crlf1()$/ +test_crlf2 tset_crlf.c /^void test_crlf2()$/ +test c-src/emacs/src/lisp.h 1871 test erl-src/gs_dialog.erl /^test() ->$/ test go-src/test1.go /^func test(p plus) {$/ test make-src/Makefile /^test:$/ -test php-src/ptest.php /^test $/ -test-begin scm-src/test.scm /^(define-syntax test-begin$/ -test.me22b lua-src/test.lua /^ local function test.me22b (one)$/ test.me_22a lua-src/test.lua /^ function test.me_22a(one, two)$/ -test1 rs-src/test.rs /^fn test1() {$/ -test_crlf1 test_crlf.c /^void test_crlf1()$/ -test_crlf2 tset_crlf.c /^void test_crlf2()$/ +test.me22b lua-src/test.lua /^ local function test.me22b (one)$/ +TEST php-src/ptest.php 1 +test php-src/ptest.php /^test $/ test_undefined c-src/emacs/src/keyboard.c /^test_undefined (Lisp_Object binding)$/ -tex tex-src/texinfo.tex /^\\def\\tex{\\begingroup$/ +TEX_clgrp c-src/etags.c 4922 +TeX_commands c-src/etags.c /^TeX_commands (FILE *inf)$/ +TEX_decode_env c-src/etags.c /^TEX_decode_env (const char *evarname, const char */ +TEX_defenv c-src/etags.c 4912 +TEX_esc c-src/etags.c 4920 +TeX_help c-src/etags.c 674 +Texinfo_help c-src/etags.c 688 +Texinfo_nodes c-src/etags.c /^Texinfo_nodes (FILE *inf)$/ +Texinfo_suffixes c-src/etags.c 686 texinfoversion tex-src/texinfo.tex /^\\def\\texinfoversion{2.73}$/ +TEX_LESC c-src/etags.c 4986 +TEX_mode c-src/etags.c /^TEX_mode (FILE *inf)$/ +TEX_opgrp c-src/etags.c 4921 +TEX_SESC c-src/etags.c 4987 +TEXSRC make-src/Makefile /^TEXSRC=testenv.tex gzip.texi texinfo.tex nonewline/ +~ tex-src/texinfo.tex /^\\catcode `\\^=7 \\catcode `\\_=8 \\catcode `\\~=13 \\let/ +' tex-src/texinfo.tex /^\\def\\'{{'}}$/ +@ tex-src/texinfo.tex /^\\def\\@{@}%$/ +` tex-src/texinfo.tex /^\\def\\`{{`}}$/ +* tex-src/texinfo.tex /^\\def\\*{\\hfil\\break\\hbox{}\\ignorespaces}$/ +_ tex-src/texinfo.tex /^\\def_{\\ifusingtt\\normalunderscore\\_}$/ +_ tex-src/texinfo.tex /^\\def\\_{\\lvvmode \\kern.06em \\vbox{\\hrule width.3em / +_ tex-src/texinfo.tex /^\\def\\_{{\\realbackslash _}}%$/ +: tex-src/texinfo.tex /^\\def\\:{\\spacefactor=1000 }$/ +. tex-src/texinfo.tex /^\\def\\.{.\\spacefactor=3000 }$/ +@ tex-src/texinfo.tex /^\\def\\@{{\\tt \\char '100}}$/ +| tex-src/texinfo.tex /^\\def|{{\\tt \\char '174}}$/ +~ tex-src/texinfo.tex /^\\def~{{\\tt \\char '176}}$/ ++ tex-src/texinfo.tex /^\\def+{{\\tt \\char 43}}$/ +> tex-src/texinfo.tex /^\\def>{{\\tt \\gtr}}$/ +^ tex-src/texinfo.tex /^\\def^{{\\tt \\hat}}$/ +< tex-src/texinfo.tex /^\\def<{{\\tt \\less}}$/ +" tex-src/texinfo.tex /^\\def\\turnoffactive{\\let"=\\normaldoublequote$/ +( tex-src/texinfo.tex /^\\gdef\\amprm#1 {{\\rm\\}\\let(=\\oprm \\let)=\\clrm\\ }/ +) tex-src/texinfo.tex /^\\gdef\\amprm#1 {{\\rm\\}\\let(=\\oprm \\let)=\\clrm\\ }/ +( tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ +) tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ +[ tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ +] tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ +& tex-src/texinfo.tex /^\\gdef\\functionparens{\\boldbrax\\let&=\\amprm\\parenco/ +& tex-src/texinfo.tex /^\\gdef\\normalparens{\\boldbrax\\let&=\\ampnr}$/ +( tex-src/texinfo.tex /^\\gdef\\oprm#1 {{\\rm\\char`\\(}#1 \\bf \\let(=\\opnested / += tex-src/texinfo.tex /^\\global\\def={{\\tt \\char 61}}}$/ +( tex-src/texinfo.tex /^\\ifnum \\parencount=1 {\\rm \\char `\\)}\\sl \\let(=\\opr/ +" tex-src/texinfo.tex /^\\let"=\\activedoublequote$/ +{ tex-src/texinfo.tex /^\\let\\{=\\mylbrace$/ +} tex-src/texinfo.tex /^\\let\\}=\\myrbrace$/ +^ tex-src/texinfo.tex /^\\let^=\\normalcaret$/ +> tex-src/texinfo.tex /^\\let>=\\normalgreater$/ +< tex-src/texinfo.tex /^\\let<=\\normalless$/ ++ tex-src/texinfo.tex /^\\let+=\\normalplus}$/ +~ tex-src/texinfo.tex /^\\let~=\\normaltilde$/ +_ tex-src/texinfo.tex /^\\let_=\\normalunderscore$/ +| tex-src/texinfo.tex /^\\let|=\\normalverticalbar$/ +. tex-src/texinfo.tex /^\\let\\.=\\ptexdot$/ +{ tex-src/texinfo.tex /^\\let\\{=\\ptexlbrace$/ +} tex-src/texinfo.tex /^\\let\\}=\\ptexrbrace$/ +* tex-src/texinfo.tex /^\\let\\*=\\ptexstar$/ +TeX_suffixes c-src/etags.c 672 +tex tex-src/texinfo.tex /^\\def\\tex{\\begingroup$/ +TeX tex-src/texinfo.tex /^\\def\\TeX{\\realbackslash TeX}%$/ +TeX tex-src/texinfo.tex /^\\def\\TeX{\\realbackslash TeX}$/ +TeX tex-src/texinfo.tex /^\\let\\TeX=\\indexdummytex$/ textfonts tex-src/texinfo.tex /^\\def\\textfonts{%$/ +TEX_toktab c-src/etags.c 4908 texttreelist prol-src/natded.prolog /^texttreelist([]).$/ +/TF ps-src/rfc1245.ps /^\/TF { $/ thearg tex-src/texinfo.tex /^ \\def\\thearg{#1}%$/ thearg tex-src/texinfo.tex /^ \\ifx\\thearg\\empty \\def\\thearg{1}\\fi$/ there-is-a-=-in-the-middle! scm-src/test.scm /^(define (there-is-a-=-in-the-middle!) #t)$/ -this c-src/a/b/b.c 1 -this-command-keys c-src/emacs/src/keyboard.c /^DEFUN ("this-command-keys", Fthis_command_keys, St/ -this-command-keys-vector c-src/emacs/src/keyboard.c /^DEFUN ("this-command-keys-vector", Fthis_command_k/ -this-single-command-keys c-src/emacs/src/keyboard.c /^DEFUN ("this-single-command-keys", Fthis_single_co/ -this-single-command-raw-keys c-src/emacs/src/keyboard.c /^DEFUN ("this-single-command-raw-keys", Fthis_singl/ -this_command_key_count c-src/emacs/src/keyboard.c 108 -this_command_key_count_reset c-src/emacs/src/keyboard.c 112 -this_command_keys c-src/emacs/src/keyboard.c 107 -this_file_toc perl-src/htlmify-cystic 29 -this_single_command_key_start c-src/emacs/src/keyboard.c 125 -thischapter tex-src/texinfo.tex /^ \\unnumbchapmacro{#1}\\def\\thischapter{}%$/ +thischaptername tex-src/texinfo.tex /^\\def\\thischaptername{No Chapter Title}$/ +thischaptername tex-src/texinfo.tex /^\\gdef\\thischaptername{#1}%$/ thischapter tex-src/texinfo.tex /^\\def\\thischapter{} \\def\\thissection{}$/ thischapter tex-src/texinfo.tex /^\\gdef\\thischapter{#1}\\gdef\\thissection{#1}%$/ +thischapter tex-src/texinfo.tex /^ \\unnumbchapmacro{#1}\\def\\thischapter{}%$/ thischapter tex-src/texinfo.tex /^\\xdef\\thischapter{Appendix \\appendixletter: \\noexp/ thischapter tex-src/texinfo.tex /^\\xdef\\thischapter{Chapter \\the\\chapno: \\noexpand\\t/ -thischaptername tex-src/texinfo.tex /^\\def\\thischaptername{No Chapter Title}$/ -thischaptername tex-src/texinfo.tex /^\\gdef\\thischaptername{#1}%$/ +this_command_key_count c-src/emacs/src/keyboard.c 108 +this_command_key_count_reset c-src/emacs/src/keyboard.c 112 +this_command_keys c-src/emacs/src/keyboard.c 107 +this-command-keys c-src/emacs/src/keyboard.c /^DEFUN ("this-command-keys", Fthis_command_keys, St/ +this-command-keys-vector c-src/emacs/src/keyboard.c /^DEFUN ("this-command-keys-vector", Fthis_command_k/ +this c-src/a/b/b.c 1 thisfile tex-src/texinfo.tex /^\\def\\includezzz #1{{\\def\\thisfile{#1}\\input #1$/ thisfile tex-src/texinfo.tex /^\\def\\thisfile{}$/ +this_file_toc perl-src/htlmify-cystic 29 thisfootno tex-src/texinfo.tex /^\\edef\\thisfootno{$^{\\the\\footnoteno}$}%$/ thispage tex-src/texinfo.tex /^\\let\\thispage=\\folio$/ thissection tex-src/texinfo.tex /^\\def\\thischapter{} \\def\\thissection{}$/ @@ -4468,26 +4235,30 @@ thissection tex-src/texinfo.tex /^\\gdef\\thissection{#1}\\secheading {#1}{\\app thissection tex-src/texinfo.tex /^\\gdef\\thissection{#1}\\secheading {#1}{\\the\\chapno}/ thissection tex-src/texinfo.tex /^\\gdef\\thissection{#1}\\subsubsecno=0 \\global\\advanc/ thissection tex-src/texinfo.tex /^\\plainsecheading {#1}\\gdef\\thissection{#1}%$/ +this-single-command-keys c-src/emacs/src/keyboard.c /^DEFUN ("this-single-command-keys", Fthis_single_co/ +this_single_command_key_start c-src/emacs/src/keyboard.c 125 +this-single-command-raw-keys c-src/emacs/src/keyboard.c /^DEFUN ("this-single-command-raw-keys", Fthis_singl/ thistitle tex-src/texinfo.tex /^\\def\\settitlezzz #1{\\gdef\\thistitle{#1}}$/ thistitle tex-src/texinfo.tex /^\\def\\thistitle{No Title}$/ three tex-src/texinfo.tex /^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/ threex tex-src/texinfo.tex /^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/ tie tex-src/texinfo.tex /^\\def\\tie{\\penalty 10000\\ } % Save plain tex de/ tignore c-src/etags.c 2433 -timer_check c-src/emacs/src/keyboard.c /^timer_check (void)$/ timer_check_2 c-src/emacs/src/keyboard.c /^timer_check_2 (Lisp_Object timers, Lisp_Object idl/ +timer_check c-src/emacs/src/keyboard.c /^timer_check (void)$/ timer_idleness_start_time c-src/emacs/src/keyboard.c 335 timer_last_idleness_start_time c-src/emacs/src/keyboard.c 340 timer_resume_idle c-src/emacs/src/keyboard.c /^timer_resume_idle (void)$/ +timers_run c-src/emacs/src/keyboard.c 320 timer_start_idle c-src/emacs/src/keyboard.c /^timer_start_idle (void)$/ timer_stop_idle c-src/emacs/src/keyboard.c /^timer_stop_idle (void)$/ -timers_run c-src/emacs/src/keyboard.c 320 +Time_to_position c-src/emacs/src/keyboard.c /^Time_to_position (Time encoded_pos)$/ tinbody c-src/etags.c 2431 tindex tex-src/texinfo.tex /^\\def\\tindex {\\tpindex}$/ -title tex-src/texinfo.tex /^ \\def\\title{\\parsearg\\titlezzz}%$/ titlefont tex-src/texinfo.tex /^\\def\\titlefont#1{{\\titlerm #1}}$/ titlepage tex-src/texinfo.tex /^\\def\\titlepage{\\begingroup \\parindent=0pt \\textfon/ titlepage tex-src/texinfo.tex /^\\let\\titlepage=\\relax$/ +title tex-src/texinfo.tex /^ \\def\\title{\\parsearg\\titlezzz}%$/ titlezzz tex-src/texinfo.tex /^ \\def\\titlezzz##1{\\leftline{\\titlefont{##1}}$/ tkeyseen c-src/etags.c 2429 tnone c-src/etags.c 2428 @@ -4496,45 +4267,65 @@ today tex-src/texinfo.tex /^\\def\\today{\\number\\day\\space$/ toggleDescription objc-src/PackInsp.m /^-toggleDescription$/ tok c-src/etags.c 2491 token c-src/etags.c 2508 -token y-src/cccp.y 437 -token y-src/cccp.y 439 -tokenize prol-src/natded.prolog /^tokenize([C1,C2,C3|Cs],Xs-Ys,TsResult):- % spe/ tokenizeatom prol-src/natded.prolog /^tokenizeatom(Atom,Ws):-$/ +tokenize prol-src/natded.prolog /^tokenize([C1,C2,C3|Cs],Xs-Ys,TsResult):- % spe/ tokentab2 y-src/cccp.y 442 +token y-src/cccp.y 437 +token y-src/cccp.y 439 +To_Lower pas-src/common.pas /^function To_Lower;(*(ch:char) : char;*)$/ tool_bar_item_properties c-src/emacs/src/keyboard.c 7970 tool_bar_items c-src/emacs/src/keyboard.c /^tool_bar_items (Lisp_Object reuse, int *nitems)$/ tool_bar_items_vector c-src/emacs/src/keyboard.c 7965 toolkit_menubar_in_use c-src/emacs/src/keyboard.c /^toolkit_menubar_in_use (struct frame *f)$/ -top tex-src/texinfo.tex /^\\let\\top=\\relax$/ -top tex-src/texinfo.tex /^\\outer\\def\\top{\\parsearg\\unnumberedzzz}$/ -top-level c-src/emacs/src/keyboard.c /^DEFUN ("top-level", Ftop_level, Stop_level, 0, 0, / -top_level merc-src/accumulator.m /^:- type top_level$/ top_level_1 c-src/emacs/src/keyboard.c /^top_level_1 (Lisp_Object ignore)$/ top_level_2 c-src/emacs/src/keyboard.c /^top_level_2 (void)$/ +top-level c-src/emacs/src/keyboard.c /^DEFUN ("top-level", Ftop_level, Stop_level, 0, 0, / +top_level merc-src/accumulator.m /^:- type top_level$/ +Top tex-src/gzip.texi /^@node Top, , , (dir)$/ +top tex-src/texinfo.tex /^\\let\\top=\\relax$/ +top tex-src/texinfo.tex /^\\outer\\def\\top{\\parsearg\\unnumberedzzz}$/ +To_Start_Addr/f ada-src/2ataspri.adb /^ function To_Start_Addr is new$/ total_keys c-src/emacs/src/keyboard.c 97 +TOTAL_KEYWORDS c-src/etags.c 2325 +totally_unblock_input c-src/emacs/src/keyboard.c /^totally_unblock_input (void)$/ total_size_of_entries c-src/etags.c /^total_size_of_entries (register node *np)$/ total_surrounding cp-src/conway.cpp /^int site::total_surrounding(void)$/ -totally_unblock_input c-src/emacs/src/keyboard.c /^totally_unblock_input (void)$/ +To_TCB_Ptr/f ada-src/2ataspri.adb /^ function To_TCB_Ptr is new$/ +To_Upper pas-src/common.pas /^function To_Upper;(*(ch:char) : char;*)$/ +To_void_ptr/f ada-src/2ataspri.adb /^ function To_void_ptr is new$/ tpargs tex-src/texinfo.tex /^\\begingroup\\defname {#2}{#1}\\deftpargs{#3}\\endgrou/ tpcmd c-src/h.h 15 tpcmd c-src/h.h 8 tpheader tex-src/texinfo.tex /^\\def\\deftp{\\defvrparsebody\\Edeftp\\deftpx\\deftphead/ +/T ps-src/rfc1245.ps /^\/T { $/ tpx\deftpheader tex-src/texinfo.tex /^\\def\\deftp{\\defvrparsebody\\Edeftp\\deftpx\\deftphead/ -track-mouse c-src/emacs/src/keyboard.c /^DEFUN ("internal--track-mouse", Ftrack_mouse, Stra/ tracking_off c-src/emacs/src/keyboard.c /^tracking_off (Lisp_Object old_value)$/ +track-mouse c-src/emacs/src/keyboard.c /^DEFUN ("internal--track-mouse", Ftrack_mouse, Stra/ traffic_light cp-src/conway.cpp /^void traffic_light(int x, int y)$/ translate c-src/emacs/src/regex.h 361 treats cp-src/c.C 131 +Truc.Bidule/b ada-src/etags-test-for.ada /^package body Truc.Bidule is$/ +Truc.Bidule/b ada-src/waroquiers.ada /^package body Truc.Bidule is$/ +Truc.Bidule/s ada-src/etags-test-for.ada /^package Truc.Bidule is$/ +Truc.Bidule/s ada-src/waroquiers.ada /^package Truc.Bidule is$/ +Truc/s ada-src/etags-test-for.ada /^package Truc is$/ +Truc/s ada-src/waroquiers.ada /^package Truc is$/ +TSL/s ada-src/2ataspri.adb /^ package TSL renames System.Tasking_Soft_Links;$/ +t tex-src/texinfo.tex /^\\def\\t##1{\\realbackslash r {##1}}%$/ +t tex-src/texinfo.tex /^\\def\\t#1{{\\tt \\exhyphenpenalty=10000\\rawbackslash / +t tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ +t tex-src/texinfo.tex /^\\let\\t=\\indexdummyfont$/ +ttfont tex-src/texinfo.tex /^\\let\\ttfont = \\t$/ tt prol-src/natded.prolog /^tt:-$/ tt tex-src/texinfo.tex /^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/ -tt tex-src/texinfo.tex /^\\def\\tt{\\realbackslash tt}$/ tt tex-src/texinfo.tex /^\\def\\tt{\\realbackslash tt}%$/ +tt tex-src/texinfo.tex /^\\def\\tt{\\realbackslash tt}$/ tt tex-src/texinfo.tex /^\\font\\deftt=cmtt10 scaled \\magstep1$/ tt tex-src/texinfo.tex /^{\\let\\tentt=\\sectt \\let\\tt=\\sectt \\let\\sf=\\sectt$/ -ttfont tex-src/texinfo.tex /^\\let\\ttfont = \\t$/ -tty_read_avail_input c-src/emacs/src/keyboard.c /^tty_read_avail_input (struct terminal *terminal,$/ ttypeseen c-src/etags.c 2430 +tty_read_avail_input c-src/emacs/src/keyboard.c /^tty_read_avail_input (struct terminal *terminal,$/ turnoffactive tex-src/texinfo.tex /^\\def\\turnoffactive{\\let"=\\normaldoublequote$/ +/two ps-src/rfc1245.ps /^\/two \/three \/four \/five \/six \/seven \/eight \/nine \// typdef c-src/etags.c 2434 type c-src/emacs/src/gmalloc.c 145 type c-src/emacs/src/lisp.h 1973 @@ -4560,39 +4351,54 @@ typefunx\deftypefunheader tex-src/texinfo.tex /^\\def\\deftypefun{\\defparsebody typemargin tex-src/texinfo.tex /^\\newskip\\deftypemargin \\deftypemargin=12pt$/ typemargin tex-src/texinfo.tex /^\\rlap{\\rightline{{\\rm #2}\\hskip \\deftypemargin}}}%/ typemargin tex-src/texinfo.tex /^\\setbox0=\\hbox{\\hskip \\deflastargmargin{\\rm #2}\\hs/ +TYPE_RANGED_INTEGERP c-src/emacs/src/lisp.h /^#define TYPE_RANGED_INTEGERP(type, x) \\$/ +Type_Specific_Data/t ada-src/etags-test-for.ada /^ type Type_Specific_Data is record$/ +TYPESTOSTAT objc-src/PackInsp.h 37 typevarheader tex-src/texinfo.tex /^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/ typevarx\deftypevarheader tex-src/texinfo.tex /^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/ typevrheader tex-src/texinfo.tex /^\\def\\deftypevr{\\defvrparsebody\\Edeftypevr\\deftypev/ typevrx\deftypevrheader tex-src/texinfo.tex /^\\def\\deftypevr{\\defvrparsebody\\Edeftypevr\\deftypev/ -u c-src/emacs/src/lisp.h 2397 +/Uacute ps-src/rfc1245.ps /^\/Uacute \/Ucircumflex \/Ugrave \/dotlessi \/circumflex/ u_any c-src/emacs/src/lisp.h 2214 u_boolfwd c-src/emacs/src/lisp.h 2371 u_buffer_objfwd c-src/emacs/src/lisp.h 2373 +UCHAR c-src/emacs/src/lisp.h 2424 +_UCHAR_T c-src/emacs/src/lisp.h 2423 +U_CHAR y-src/cccp.y 38 +u c-src/emacs/src/lisp.h 2397 +/udieresis ps-src/rfc1245.ps /^\/udieresis \/dagger \/.notdef \/cent \/sterling \/secti/ u_finalizer c-src/emacs/src/lisp.h 2219 u_free c-src/emacs/src/lisp.h 2215 u_intfwd c-src/emacs/src/lisp.h 2370 u_kboard_objfwd c-src/emacs/src/lisp.h 2374 u_marker c-src/emacs/src/lisp.h 2216 -u_objfwd c-src/emacs/src/lisp.h 2372 -u_overlay c-src/emacs/src/lisp.h 2217 -u_save_value c-src/emacs/src/lisp.h 2218 unargs tex-src/texinfo.tex /^\\begingroup\\defname {#2}{#1}\\defunargs{#3}\\endgrou/ unargs tex-src/texinfo.tex /^\\defunargs {#2}\\endgroup %$/ unargs tex-src/texinfo.tex /^\\defunargs {#3}\\endgroup %$/ +UNARY y-src/cccp.c 18 unblock_input c-src/emacs/src/keyboard.c /^unblock_input (void)$/ unblock_input_to c-src/emacs/src/keyboard.c /^unblock_input_to (int level)$/ unchar c-src/h.h 99 +UNDEFINED c-src/h.h 118 +UNEVALLED c-src/emacs/src/lisp.h 2834 unexpand-abbrev c-src/abbrev.c /^DEFUN ("unexpand-abbrev", Funexpand_abbrev, Sunexp/ +UNGCPRO c-src/emacs/src/lisp.h 3202 +UNGCPRO c-src/emacs/src/lisp.h 3257 +UNGCPRO c-src/emacs/src/lisp.h 3353 unheader tex-src/texinfo.tex /^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/ univ merc-src/accumulator.m /^:- import_module univ.$/ +UNLOCK_ALIGNED_BLOCKS c-src/emacs/src/gmalloc.c /^#define UNLOCK_ALIGNED_BLOCKS() \\$/ +UNLOCK_ALIGNED_BLOCKS c-src/emacs/src/gmalloc.c /^#define UNLOCK_ALIGNED_BLOCKS()$/ +UNLOCK c-src/emacs/src/gmalloc.c /^#define UNLOCK() \\$/ +UNLOCK c-src/emacs/src/gmalloc.c /^#define UNLOCK()$/ +Unlock/p ada-src/2ataspri.adb /^ procedure Unlock (L : in out Lock) is$/ +Unlock/p ada-src/2ataspri.ads /^ procedure Unlock (L : in out Lock);$/ unnchfopen tex-src/texinfo.tex /^\\def\\unnchfopen #1{%$/ unnchfplain tex-src/texinfo.tex /^\\def\\unnchfplain #1{%$/ -unnumbchapentry tex-src/texinfo.tex /^ \\let\\unnumbchapentry = \\shortunnumberedentry/ unnumbchapentry tex-src/texinfo.tex /^\\def\\unnumbchapentry#1#2{\\dochapentry{#1}{#2}}$/ +unnumbchapentry tex-src/texinfo.tex /^ \\let\\unnumbchapentry = \\shortunnumberedentry/ unnumbchapmacro tex-src/texinfo.tex /^\\global\\let\\unnumbchapmacro=\\unnchfopen}$/ unnumbchapmacro tex-src/texinfo.tex /^\\global\\let\\unnumbchapmacro=\\unnchfplain}$/ -unnumbered tex-src/texinfo.tex /^\\let\\unnumbered=\\relax$/ -unnumbered tex-src/texinfo.tex /^\\outer\\def\\unnumbered{\\parsearg\\unnumberedzzz}$/ unnumberedsec tex-src/texinfo.tex /^\\let\\unnumberedsec=\\relax$/ unnumberedsec tex-src/texinfo.tex /^\\outer\\def\\unnumberedsec{\\parsearg\\unnumberedseczz/ unnumberedsection tex-src/texinfo.tex /^\\let\\unnumberedsection=\\relax$/ @@ -4605,6 +4411,8 @@ unnumberedsubsubsec tex-src/texinfo.tex /^\\let\\unnumberedsubsubsec=\\relax$/ unnumberedsubsubsec tex-src/texinfo.tex /^\\outer\\def\\unnumberedsubsubsec{\\parsearg\\unnumbere/ unnumberedsubsubsection tex-src/texinfo.tex /^\\let\\unnumberedsubsubsection=\\relax$/ unnumberedsubsubseczzz tex-src/texinfo.tex /^\\def\\unnumberedsubsubseczzz #1{\\seccheck{unnumbere/ +unnumbered tex-src/texinfo.tex /^\\let\\unnumbered=\\relax$/ +unnumbered tex-src/texinfo.tex /^\\outer\\def\\unnumbered{\\parsearg\\unnumberedzzz}$/ unnumberedzzz tex-src/texinfo.tex /^\\def\\unnumberedzzz #1{\\seccheck{unnumbered}%$/ unnumbnoderef tex-src/texinfo.tex /^\\def\\unnumbnoderef{\\ifx\\lastnode\\relax\\else$/ unnumbsecentry tex-src/texinfo.tex /^ \\def\\unnumbsecentry ##1##2{}$/ @@ -4616,66 +4424,104 @@ unnumbsubsubsecentry tex-src/texinfo.tex /^ \\def\\unnumbsubsubsecentry ##1 unnumbsubsubsecentry tex-src/texinfo.tex /^\\def\\unnumbsubsubsecentry#1#2{\\dosubsubsecentry{#1/ unravel_univ merc-src/accumulator.m /^:- some [T] pred unravel_univ(univ::in, T::out) is/ unread_switch_frame c-src/emacs/src/keyboard.c 204 +UNSIGNED_CMP c-src/emacs/src/lisp.h /^#define UNSIGNED_CMP(a, op, b) \\$/ unsignedp y-src/cccp.y 112 unwind c-src/emacs/src/lisp.h 2962 unwind_int c-src/emacs/src/lisp.h 2972 unwind_ptr c-src/emacs/src/lisp.h 2967 unwind_void c-src/emacs/src/lisp.h 2976 unx\defunheader tex-src/texinfo.tex /^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/ +u_objfwd c-src/emacs/src/lisp.h 2372 +u_overlay c-src/emacs/src/lisp.h 2217 +__up c.c 160 update_accumulator_pred merc-src/accumulator.m /^:- pred update_accumulator_pred(pred_id::in, proc_/ uppercaseenumerate tex-src/texinfo.tex /^\\def\\uppercaseenumerate{%$/ uprintmax_t c-src/emacs/src/lisp.h 149 uprintmax_t c-src/emacs/src/lisp.h 154 +/U ps-src/rfc1245.ps /^\/U { $/ usage perl-src/yagrip.pl /^sub usage {$/ +u_save_value c-src/emacs/src/lisp.h 2218 usecharno c-src/etags.c 210 used c-src/emacs/src/regex.h 347 used_syntax c-src/emacs/src/regex.h 398 +USE_LSB_TAG c-src/emacs/src/lisp.h 271 +USE_LSB_TAG c-src/emacs/src/lisp.h /^DEFINE_GDB_SYMBOL_BEGIN (bool, USE_LSB_TAG)$/ +USE_PTHREAD c-src/emacs/src/gmalloc.c 25 user_cmp_function c-src/emacs/src/lisp.h 1814 +UserEdit pyt-src/server.py /^class UserEdit(Frame):$/ user_error c-src/emacs/src/keyboard.c /^user_error (const char *msg)$/ user_hash_function c-src/emacs/src/lisp.h 1811 +User pyt-src/server.py /^class User:$/ user_signal_info c-src/emacs/src/keyboard.c 7235 user_signals c-src/emacs/src/keyboard.c 7250 +USE_SAFE_ALLOCA c-src/emacs/src/lisp.h 4560 +USE_STACK_CONS c-src/emacs/src/lisp.h 4689 +USE_STACK_LISP_OBJECTS c-src/emacs/src/lisp.h 4652 +USE_STACK_LISP_OBJECTS c-src/emacs/src/lisp.h 4658 +USE_STACK_LISP_OBJECTS c-src/emacs/src/lisp.h 4659 +USE_STACK_STRING c-src/emacs/src/lisp.h 4691 usfreelock_ptr/t ada-src/etags-test-for.ada /^ type usfreelock_ptr is access$/ +Vabbrev_start_location_buffer c-src/abbrev.c 66 +Vabbrev_start_location c-src/abbrev.c 63 +Vabbrev_table_name_list c-src/abbrev.c 43 +VALBITS c-src/emacs/src/lisp.h 246 +valcell c-src/emacs/src/lisp.h 2357 val c-src/emacs/src/lisp.h 3027 val c-src/emacs/src/lisp.h 691 val c-src/getopt.h 84 -val prol-src/natded.prolog /^val(X) --> ['['], valseq(X), [']'].$/ -valcell c-src/emacs/src/lisp.h 2357 +validate php-src/lce_functions.php /^ function validate($value)$/ valid c-src/etags.c 220 valid c-src/etags.c 2502 -validate php-src/lce_functions.php /^ function validate($value)$/ valloc c-src/emacs/src/gmalloc.c /^valloc (size_t size)$/ +VALMASK c-src/emacs/src/lisp.h 829 +VALMASK c-src/emacs/src/lisp.h /^DEFINE_GDB_SYMBOL_BEGIN (EMACS_INT, VALMASK)$/ +VAL_MAX c-src/emacs/src/lisp.h 263 +val prol-src/natded.prolog /^val(X) --> ['['], valseq(X), [']'].$/ valseq prol-src/natded.prolog /^valseq([Val|Vals]) --> val(Val), plusvalseq(Vals)./ +ValToNmStr pas-src/common.pas /^function ValToNmStr; (*($/ value c-src/emacs/src/lisp.h 687 value y-src/cccp.y 112 -var c-src/emacs/src/keyboard.c 11023 -var c-src/emacs/src/lisp.h 3137 -var tex-src/texinfo.tex /^\\def\\var##1{\\realbackslash var {##1}}$/ -var tex-src/texinfo.tex /^\\def\\var##1{\\realbackslash var {##1}}%$/ -var tex-src/texinfo.tex /^\\let\\var=\\indexdummyfont$/ -var tex-src/texinfo.tex /^\\let\\var=\\smartitalic$/ varargs tex-src/texinfo.tex /^\\begingroup\\defname {#2}{#1}\\defvarargs{#3}\\endgro/ varargs tex-src/texinfo.tex /^\\def\\deftpargs #1{\\bf \\defvarargs{#1}}$/ varargs tex-src/texinfo.tex /^\\defvarargs {#2}\\endgroup %$/ varargs tex-src/texinfo.tex /^\\defvarargs {#3}\\endgroup %$/ +var c-src/emacs/src/keyboard.c 11023 +var c-src/emacs/src/lisp.h 3137 varheader tex-src/texinfo.tex /^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/ varparsebody\Edefopt tex-src/texinfo.tex /^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/ varparsebody\Edeftypevar tex-src/texinfo.tex /^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/ varparsebody\Edefvar tex-src/texinfo.tex /^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/ varset merc-src/accumulator.m /^:- import_module varset.$/ +var tex-src/texinfo.tex /^\\def\\var##1{\\realbackslash var {##1}}%$/ +var tex-src/texinfo.tex /^\\def\\var##1{\\realbackslash var {##1}}$/ +var tex-src/texinfo.tex /^\\let\\var=\\indexdummyfont$/ +var tex-src/texinfo.tex /^\\let\\var=\\smartitalic$/ varx\defvarheader tex-src/texinfo.tex /^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/ vcopy c-src/emacs/src/lisp.h /^vcopy (Lisp_Object v, ptrdiff_t offset, Lisp_Objec/ +VECSIZE c-src/emacs/src/lisp.h /^#define VECSIZE(type) \\$/ vectorlike_header c-src/emacs/src/lisp.h 1343 +VECTORLIKEP c-src/emacs/src/lisp.h /^# define VECTORLIKEP(x) lisp_h_VECTORLIKEP (x)$/ +VECTORP c-src/emacs/src/lisp.h /^VECTORP (Lisp_Object x)$/ verde cp-src/c.C 40 -verify-tags-table-function el-src/emacs/lisp/progmodes/etags.el /^(defvar verify-tags-table-function nil$/ verify_ascii c-src/emacs/src/lisp.h /^# define verify_ascii(str) (str)$/ +verify-tags-table-function el-src/emacs/lisp/progmodes/etags.el /^(defvar verify-tags-table-function nil$/ +VERSION c-src/etags.c 789 +VERSION erl-src/gs_dialog.erl /^-define(VERSION, '2001.1101').$/ +VERSION objc-src/PackInsp.m 34 +Vfundamental_mode_abbrev_table c-src/abbrev.c 52 +Vglobal_abbrev_table c-src/abbrev.c 48 +VHDLFLAGS make-src/Makefile /^VHDLFLAGS=--language=none --regex='\/[ \\t]*\\(ARCHIT/ vignore c-src/etags.c 2417 vindex tex-src/texinfo.tex /^\\def\\vindex {\\vrindex}$/ -visit-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun visit-tags-table (file &optional local)$/ visit-tags-table-buffer el-src/emacs/lisp/progmodes/etags.el /^(defun visit-tags-table-buffer (&optional cont)$/ +visit-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun visit-tags-table (file &optional local)$/ +Vlast_abbrev c-src/abbrev.c 70 +Vlast_abbrev_text c-src/abbrev.c 75 +Vlispy_mouse_stem c-src/emacs/src/keyboard.c 5172 void c-src/emacs/src/lisp.h /^INLINE void (check_cons_list) (void) { lisp_h_chec/ voidfuncptr c-src/emacs/src/lisp.h 2108 voidval y-src/cccp.y 115 +/V ps-src/rfc1245.ps /^\/V { $/ vrheader tex-src/texinfo.tex /^\\def\\defvr{\\defvrparsebody\\Edefvr\\defvrx\\defvrhead/ vritemindex tex-src/texinfo.tex /^\\def\\vritemindex #1{\\doind {vr}{\\code{#1}}}%$/ vrparsebody\Edefivar tex-src/texinfo.tex /^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/ @@ -4685,49 +4531,80 @@ vrparsebody\Edefvr tex-src/texinfo.tex /^\\def\\defvr{\\defvrparsebody\\Edefvr\\ vrx\defvrheader tex-src/texinfo.tex /^\\def\\defvr{\\defvrparsebody\\Edefvr\\defvrx\\defvrhead/ vtable tex-src/texinfo.tex /^\\def\\vtable{\\begingroup\\inENV\\obeylines\\obeyspaces/ vtablex tex-src/texinfo.tex /^\\gdef\\vtablex #1^^M{%$/ -w tex-src/texinfo.tex /^\\def\\w#1{\\leavevmode\\hbox{#1}}$/ -w tex-src/texinfo.tex /^\\def\\w{\\realbackslash w }%$/ -w tex-src/texinfo.tex /^\\def\\w{\\realbackslash w}$/ -w tex-src/texinfo.tex /^\\let\\w=\\indexdummyfont$/ -wait_status_ptr_t c.c 161 waiting_for_input c-src/emacs/src/keyboard.c 150 +WAIT_READING_MAX c-src/emacs/src/lisp.h 4281 +WAIT_READING_MAX c-src/emacs/src/lisp.h 4283 +wait_status_ptr_t c.c 161 +WARNINGS make-src/Makefile /^WARNINGS=-pedantic -Wall -Wpointer-arith -Winline / warning y-src/cccp.y /^warning (msg)$/ -weak c-src/emacs/src/lisp.h 1830 +/wbytes ps-src/rfc1245.ps /^\/wbytes { $/ +WCHAR_TYPE_SIZE y-src/cccp.y 99 weak_alias c-src/emacs/src/gmalloc.c /^weak_alias (free, cfree)$/ +weak c-src/emacs/src/lisp.h 1830 web ftp publish make-src/Makefile /^web ftp publish:$/ what c-src/etags.c 252 wheel_syms c-src/emacs/src/keyboard.c 4628 +where cp-src/clheir.hpp 77 where c-src/emacs/src/lisp.h 2348 where c-src/emacs/src/lisp.h 2980 -where cp-src/clheir.hpp 77 where_in_registry cp-src/clheir.hpp 15 +WHITE cp-src/screen.hpp 27 +/wh ps-src/rfc1245.ps /^\/wh { $/ +WINDOW_CONFIGURATIONP c-src/emacs/src/lisp.h /^WINDOW_CONFIGURATIONP (Lisp_Object a)$/ +WINDOWP c-src/emacs/src/lisp.h /^WINDOWP (Lisp_Object a)$/ +WINDOWSNT c-src/etags.c 101 +WINDOWSNT c-src/etags.c 102 windowWillClose objcpp-src/SimpleCalc.M /^- windowWillClose:sender$/ wipe_kboard c-src/emacs/src/keyboard.c /^wipe_kboard (KBOARD *kb)$/ womboid c-src/h.h 63 womboid c-src/h.h 75 word_size c-src/emacs/src/lisp.h 1473 -write php-src/lce_functions.php /^ function write($save="yes")$/ -write php-src/lce_functions.php /^ function write()$/ +WorkingDays cp-src/functions.cpp /^int WorkingDays(Date a, Date b){$/ +WORKING objc-src/PackInsp.m 368 +/W ps-src/rfc1245.ps /^\/W { $/ write1= ruby-src/test1.ru /^ attr_reader :read1 , :read2; attr_writer :writ/ write2= ruby-src/test1.ru /^ attr_reader :read1 , :read2; attr_writer :writ/ write_abbrev c-src/abbrev.c /^write_abbrev (sym, stream)$/ -write_classname c-src/etags.c /^write_classname (linebuffer *cn, const char *quali/ -write_lex prol-src/natded.prolog /^write_lex(File):-$/ -write_lex_cat prol-src/natded.prolog /^write_lex_cat(File):-$/ -write_xyc cp-src/screen.cpp /^void write_xyc(int x, int y, char c)$/ -writebreak prol-src/natded.prolog /^writebreak([]).$/ writebreaklex prol-src/natded.prolog /^writebreaklex([]).$/ +writebreak prol-src/natded.prolog /^writebreak([]).$/ writecat prol-src/natded.prolog /^writecat(np(ind(sng),nm(_)),np,[],[]):-!.$/ +write_classname c-src/etags.c /^write_classname (linebuffer *cn, const char *quali/ +write_lex_cat prol-src/natded.prolog /^write_lex_cat(File):-$/ +write_lex prol-src/natded.prolog /^write_lex(File):-$/ writelist prol-src/natded.prolog /^writelist([der(Ws)|Ws2]):-$/ writelistsubs prol-src/natded.prolog /^writelistsubs([],X):-$/ +Write_Lock/p ada-src/2ataspri.adb /^ procedure Write_Lock (L : in out Lock; Ceiling_/ +Write_Lock/p ada-src/2ataspri.ads /^ procedure Write_Lock (L : in out Lock; Ceiling_/ writenamestring pas-src/common.pas /^procedure writenamestring;(*($/ +write php-src/lce_functions.php /^ function write()$/ +write php-src/lce_functions.php /^ function write($save="yes")$/ writesubs prol-src/natded.prolog /^writesubs([]).$/ writesups prol-src/natded.prolog /^writesups([]).$/ +write_xyc cp-src/screen.cpp /^void write_xyc(int x, int y, char c)$/ written c-src/etags.c 211 +w tex-src/texinfo.tex /^\\def\\w#1{\\leavevmode\\hbox{#1}}$/ +w tex-src/texinfo.tex /^\\def\\w{\\realbackslash w }%$/ +w tex-src/texinfo.tex /^\\def\\w{\\realbackslash w}$/ +w tex-src/texinfo.tex /^\\let\\w=\\indexdummyfont$/ +XBOOL_VECTOR c-src/emacs/src/lisp.h /^XBOOL_VECTOR (Lisp_Object a)$/ +XBUFFER c-src/emacs/src/lisp.h /^XBUFFER (Lisp_Object a)$/ +XBUFFER_OBJFWD c-src/emacs/src/lisp.h /^XBUFFER_OBJFWD (union Lisp_Fwd *a)$/ +xcar_addr c-src/emacs/src/lisp.h /^xcar_addr (Lisp_Object c)$/ +XCAR c-src/emacs/src/lisp.h /^# define XCAR(c) lisp_h_XCAR (c)$/ x c.c 153 x c.c 179 x c.c 188 x c.c 189 +xcdr_addr c-src/emacs/src/lisp.h /^xcdr_addr (Lisp_Object c)$/ +XCDR c-src/emacs/src/lisp.h /^# define XCDR(c) lisp_h_XCDR (c)$/ +XCHAR_TABLE c-src/emacs/src/lisp.h /^XCHAR_TABLE (Lisp_Object a)$/ +XCHG_0 c-src/sysdep.h 47 +XCHG_1 c-src/sysdep.h 48 +XCHG_2 c-src/sysdep.h 49 +XCHG_3 c-src/sysdep.h 50 +XCHG_4 c-src/sysdep.h 51 +XCHG_5 c-src/sysdep.h 52 +XCONS c-src/emacs/src/lisp.h /^# define XCONS(a) lisp_h_XCONS (a)$/ x cp-src/c.C 53 x cp-src/c.C 80 x cp-src/clheir.hpp 49 @@ -4735,80 +4612,219 @@ x cp-src/clheir.hpp 58 x cp-src/conway.hpp 7 x cp-src/fail.C 10 x cp-src/fail.C 44 -x tex-src/texinfo.tex /^\\refx{#1-snt}{} [\\printednodename], page\\tie\\refx{/ -x-get-selection-internal c.c /^ Fx_get_selection_internal, Sx_get_selection/ -x-get-selection-internal c.c /^DEFUN ("x-get-selection-internal", Fx_get_selectio/ -xcar_addr c-src/emacs/src/lisp.h /^xcar_addr (Lisp_Object c)$/ -xcdr_addr c-src/emacs/src/lisp.h /^xcdr_addr (Lisp_Object c)$/ +X c-src/h.h 100 +XDEFUN c.c /^XDEFUN ("x-get-selection-internal", Fx_get_selecti/ xdiff make-src/Makefile /^xdiff: ETAGS EXTAGS ${infiles}$/ -xitem tex-src/texinfo.tex /^\\def\\xitem{\\errmessage{@xitem while not in a table/ -xitem tex-src/texinfo.tex /^\\let\\xitem = \\internalBxitem %$/ +XFASTINT c-src/emacs/src/lisp.h /^# define XFASTINT(a) lisp_h_XFASTINT (a)$/ +XFASTINT c-src/emacs/src/lisp.h /^XFASTINT (Lisp_Object a)$/ +XFINALIZER c-src/emacs/src/lisp.h /^XFINALIZER (Lisp_Object a)$/ +XFLOAT c-src/emacs/src/lisp.h /^XFLOAT (Lisp_Object a)$/ +XFLOAT_DATA c-src/emacs/src/lisp.h /^XFLOAT_DATA (Lisp_Object f)$/ +XFLOATINT c-src/emacs/src/lisp.h /^XFLOATINT (Lisp_Object n)$/ +XFWDTYPE c-src/emacs/src/lisp.h /^XFWDTYPE (union Lisp_Fwd *a)$/ +x-get-selection-internal c.c /^DEFUN ("x-get-selection-internal", Fx_get_selectio/ +x-get-selection-internal c.c /^ Fx_get_selection_internal, Sx_get_selection/ +XHASH c-src/emacs/src/lisp.h /^# define XHASH(a) lisp_h_XHASH (a)$/ +XHASH_TABLE c-src/emacs/src/lisp.h /^XHASH_TABLE (Lisp_Object a)$/ +XIL c-src/emacs/src/lisp.h /^# define XIL(i) lisp_h_XIL (i)$/ +XINT c-src/emacs/src/lisp.h /^# define XINT(a) lisp_h_XINT (a)$/ +XINT c-src/emacs/src/lisp.h /^XINT (Lisp_Object a)$/ +XINTPTR c-src/emacs/src/lisp.h /^XINTPTR (Lisp_Object a)$/ xitemsubtopix tex-src/texinfo.tex /^\\def\\internalBxitem "#1"{\\def\\xitemsubtopix{#1} \\s/ xitemsubtopix tex-src/texinfo.tex /^\\def\\internalBxitemx "#1"{\\def\\xitemsubtopix{#1} \\/ +xitem tex-src/texinfo.tex /^\\def\\xitem{\\errmessage{@xitem while not in a table/ +xitem tex-src/texinfo.tex /^\\let\\xitem = \\internalBxitem %$/ xitemx tex-src/texinfo.tex /^\\def\\xitemx{\\errmessage{@xitemx while not in a tab/ xitemx tex-src/texinfo.tex /^\\let\\xitemx = \\internalBxitemx %$/ xitemzzz tex-src/texinfo.tex /^\\def\\xitemzzz #1{\\dosubind {kw}{\\code{#1}}{for {\\b/ xkey tex-src/texinfo.tex /^\\def\\xkey{\\key}$/ +XLI_BUILTIN_LISPSYM c-src/emacs/src/lisp.h /^#define XLI_BUILTIN_LISPSYM(iname) TAG_SYMOFFSET (/ +XLI c-src/emacs/src/lisp.h /^# define XLI(o) lisp_h_XLI (o)$/ xmalloc c-src/etags.c /^xmalloc (size_t size)$/ +XMARKER c-src/emacs/src/lisp.h /^XMARKER (Lisp_Object a)$/ +XMISCANY c-src/emacs/src/lisp.h /^XMISCANY (Lisp_Object a)$/ +XMISC c-src/emacs/src/lisp.h /^XMISC (Lisp_Object a)$/ +XMISCTYPE c-src/emacs/src/lisp.h /^XMISCTYPE (Lisp_Object a)$/ xnew c-src/etags.c /^#define xnew(n, Type) ((Type *) xmalloc ((n) / +XOVERLAY c-src/emacs/src/lisp.h /^XOVERLAY (Lisp_Object a)$/ +XPNTR c-src/emacs/src/lisp.h /^# define XPNTR(a) lisp_h_XPNTR (a)$/ +XPROCESS c-src/emacs/src/lisp.h /^XPROCESS (Lisp_Object a)$/ +/X ps-src/rfc1245.ps /^\/X { $/ xrdef tex-src/texinfo.tex /^\\def\\xrdef #1#2{$/ xrealloc c-src/etags.c /^xrealloc (void *ptr, size_t size)$/ -xref tex-src/texinfo.tex /^\\def\\xref#1{See \\xrefX[#1,,,,,,,]}$/ xref-etags-location el-src/emacs/lisp/progmodes/etags.el /^(defclass xref-etags-location (xref-location)$/ xref-location-line el-src/emacs/lisp/progmodes/etags.el /^(cl-defmethod xref-location-line ((l xref-etags-lo/ xref-location-marker el-src/emacs/lisp/progmodes/etags.el /^(cl-defmethod xref-location-marker ((l xref-etags-/ xref-make-etags-location el-src/emacs/lisp/progmodes/etags.el /^(defun xref-make-etags-location (tag-info file)$/ -xrefX tex-src/texinfo.tex /^\\def\\xrefX[#1,#2,#3,#4,#5,#6]{\\begingroup%$/ +xref tex-src/texinfo.tex /^\\def\\xref#1{See \\xrefX[#1,,,,,,,]}$/ xreftie tex-src/texinfo.tex /^\\gdef\\xreftie{'tie}$/ +xrefX tex-src/texinfo.tex /^\\def\\xrefX[#1,#2,#3,#4,#5,#6]{\\begingroup%$/ xrnew c-src/etags.c /^#define xrnew(op, n, Type) ((op) = (Type *) xreall/ +XSAVE_FUNCPOINTER c-src/emacs/src/lisp.h /^XSAVE_FUNCPOINTER (Lisp_Object obj, int n)$/ +XSAVE_INTEGER c-src/emacs/src/lisp.h /^XSAVE_INTEGER (Lisp_Object obj, int n)$/ +XSAVE_OBJECT c-src/emacs/src/lisp.h /^XSAVE_OBJECT (Lisp_Object obj, int n)$/ +XSAVE_POINTER c-src/emacs/src/lisp.h /^XSAVE_POINTER (Lisp_Object obj, int n)$/ +XSAVE_VALUE c-src/emacs/src/lisp.h /^XSAVE_VALUE (Lisp_Object a)$/ +XSETBOOL_VECTOR c-src/emacs/src/lisp.h /^#define XSETBOOL_VECTOR(a, b) (XSETPSEUDOVECTOR (a/ +XSETBUFFER c-src/emacs/src/lisp.h /^#define XSETBUFFER(a, b) (XSETPSEUDOVECTOR (a, b, / +XSETCDR c-src/emacs/src/lisp.h /^XSETCDR (Lisp_Object c, Lisp_Object n)$/ +XSETCHAR_TABLE c-src/emacs/src/lisp.h /^#define XSETCHAR_TABLE(a, b) (XSETPSEUDOVECTOR (a,/ +XSETCOMPILED c-src/emacs/src/lisp.h /^#define XSETCOMPILED(a, b) (XSETPSEUDOVECTOR (a, b/ +XSETCONS c-src/emacs/src/lisp.h /^#define XSETCONS(a, b) ((a) = make_lisp_ptr (b, Li/ +XSETFASTINT c-src/emacs/src/lisp.h /^#define XSETFASTINT(a, b) ((a) = make_natnum (b))$/ +XSETFLOAT c-src/emacs/src/lisp.h /^#define XSETFLOAT(a, b) ((a) = make_lisp_ptr (b, L/ +XSET_HASH_TABLE c-src/emacs/src/lisp.h /^#define XSET_HASH_TABLE(VAR, PTR) \\$/ +XSETINT c-src/emacs/src/lisp.h /^#define XSETINT(a, b) ((a) = make_number (b))$/ +XSETMISC c-src/emacs/src/lisp.h /^#define XSETMISC(a, b) ((a) = make_lisp_ptr (b, Li/ +XSETPROCESS c-src/emacs/src/lisp.h /^#define XSETPROCESS(a, b) (XSETPSEUDOVECTOR (a, b,/ +XSETPSEUDOVECTOR c-src/emacs/src/lisp.h /^#define XSETPSEUDOVECTOR(a, b, code) \\$/ +XSETPVECTYPE c-src/emacs/src/lisp.h /^#define XSETPVECTYPE(v, code) \\$/ +XSETPVECTYPESIZE c-src/emacs/src/lisp.h /^#define XSETPVECTYPESIZE(v, code, lispsize, restsi/ +XSETSTRING c-src/emacs/src/lisp.h /^#define XSETSTRING(a, b) ((a) = make_lisp_ptr (b, / +XSETSUB_CHAR_TABLE c-src/emacs/src/lisp.h /^#define XSETSUB_CHAR_TABLE(a, b) (XSETPSEUDOVECTOR/ +XSETSUBR c-src/emacs/src/lisp.h /^#define XSETSUBR(a, b) (XSETPSEUDOVECTOR (a, b, PV/ +XSETSYMBOL c-src/emacs/src/lisp.h /^#define XSETSYMBOL(a, b) ((a) = make_lisp_symbol (/ +XSETTERMINAL c-src/emacs/src/lisp.h /^#define XSETTERMINAL(a, b) (XSETPSEUDOVECTOR (a, b/ +XSETTYPED_PSEUDOVECTOR c-src/emacs/src/lisp.h /^#define XSETTYPED_PSEUDOVECTOR(a, b, size, code) / +XSETVECTOR c-src/emacs/src/lisp.h /^#define XSETVECTOR(a, b) ((a) = make_lisp_ptr (b, / +XSETWINDOW_CONFIGURATION c-src/emacs/src/lisp.h /^#define XSETWINDOW_CONFIGURATION(a, b) \\$/ +XSETWINDOW c-src/emacs/src/lisp.h /^#define XSETWINDOW(a, b) (XSETPSEUDOVECTOR (a, b, / +XSTRING c-src/emacs/src/lisp.h /^XSTRING (Lisp_Object a)$/ +XSUB_CHAR_TABLE c-src/emacs/src/lisp.h /^XSUB_CHAR_TABLE (Lisp_Object a)$/ +XSUBR c-src/emacs/src/lisp.h /^XSUBR (Lisp_Object a)$/ +XSYMBOL c-src/emacs/src/lisp.h /^# define XSYMBOL(a) lisp_h_XSYMBOL (a)$/ +XSYMBOL c-src/emacs/src/lisp.h /^XSYMBOL (Lisp_Object a)$/ +XTERMINAL c-src/emacs/src/lisp.h /^XTERMINAL (Lisp_Object a)$/ +x tex-src/texinfo.tex /^\\refx{#1-snt}{} [\\printednodename], page\\tie\\refx{/ +XTYPE c-src/emacs/src/lisp.h /^# define XTYPE(a) lisp_h_XTYPE (a)$/ +XTYPE c-src/emacs/src/lisp.h /^XTYPE (Lisp_Object a)$/ +XUNTAG c-src/emacs/src/lisp.h /^# define XUNTAG(a, type) lisp_h_XUNTAG (a, type)$/ +XUNTAG c-src/emacs/src/lisp.h /^XUNTAG (Lisp_Object a, int type)$/ +XWINDOW c-src/emacs/src/lisp.h /^XWINDOW (Lisp_Object a)$/ +XX cp-src/x.cc 1 xx make-src/Makefile /^xx="this line is here because of a fontlock bug$/ xyz ruby-src/test1.ru /^ alias_method :xyz,$/ +Xyzzy ruby-src/test1.ru 13 +YACC c-src/etags.c 2199 +Yacc_entries c-src/etags.c /^Yacc_entries (FILE *inf)$/ +Yacc_help c-src/etags.c 693 +Yacc_suffixes c-src/etags.c 691 +Yappendixletterandtype tex-src/texinfo.tex /^\\def\\Yappendixletterandtype{%$/ y cp-src/clheir.hpp 49 y cp-src/clheir.hpp 58 y cp-src/conway.hpp 7 +Y c-src/h.h 100 +YELLOW cp-src/screen.hpp 26 +/yen ps-src/rfc1245.ps /^\/yen \/.notdef \/.notdef \/.notdef \/.notdef \/.notdef / y-get-selection-internal c.c /^ Fy_get_selection_internal, Sy_get_selection_/ +Ynothing tex-src/texinfo.tex /^\\def\\Ynothing{}$/ +Ypagenumber tex-src/texinfo.tex /^\\def\\Ypagenumber{\\folio}$/ +/Y ps-src/rfc1245.ps /^\/Y { $/ +Ysectionnumberandtype tex-src/texinfo.tex /^\\def\\Ysectionnumberandtype{%$/ +YSRC make-src/Makefile /^YSRC=parse.y parse.c atest.y cccp.c cccp.y$/ +Ytitle tex-src/texinfo.tex /^\\def\\Ytitle{\\thischapter}$/ +YYABORT /usr/share/bison/bison.simple 154 +YYACCEPT /usr/share/bison/bison.simple 153 yyalloc /usr/share/bison/bison.simple 84 +YYBACKUP /usr/share/bison/bison.simple /^#define YYBACKUP(Token, Value) \\$/ +YYBISON y-src/cccp.c 4 +YYBISON y-src/parse.c 4 yyclearin /usr/share/bison/bison.simple 150 yydebug /usr/share/bison/bison.simple 238 +YY_DECL_NON_LSP_VARIABLES /usr/share/bison/bison.simple 374 +YY_DECL_VARIABLES /usr/share/bison/bison.simple 385 +YY_DECL_VARIABLES /usr/share/bison/bison.simple 391 +YYDPRINTF /usr/share/bison/bison.simple /^# define YYDPRINTF(Args) \\$/ +YYDPRINTF /usr/share/bison/bison.simple /^# define YYDPRINTF(Args)$/ +YYEMPTY /usr/share/bison/bison.simple 151 +YYEOF /usr/share/bison/bison.simple 152 +YYERRCODE /usr/share/bison/bison.simple 179 yyerrhandle /usr/share/bison/bison.simple 848 yyerrlab1 /usr/share/bison/bison.simple 823 yyerrok /usr/share/bison/bison.simple 149 +YYERROR /usr/share/bison/bison.simple 155 yyerror y-src/cccp.y /^yyerror (s)$/ yyerrstatus /usr/share/bison/bison.simple 846 +YYFAIL /usr/share/bison/bison.simple 159 +YYFPRINTF /usr/share/bison/bison.simple 226 +YYINITDEPTH /usr/share/bison/bison.simple 245 +YYLEX /usr/share/bison/bison.simple 201 +YYLEX /usr/share/bison/bison.simple 203 +YYLEX /usr/share/bison/bison.simple 207 +YYLEX /usr/share/bison/bison.simple 209 +YYLEX /usr/share/bison/bison.simple 213 yylex y-src/cccp.y /^yylex ()$/ -yyls /usr/share/bison/bison.simple 89 +YYLLOC_DEFAULT /usr/share/bison/bison.simple /^# define YYLLOC_DEFAULT(Current, Rhs, N) \\$/ yylsp /usr/share/bison/bison.simple 748 yylsp /usr/share/bison/bison.simple 921 -yymemcpy /usr/share/bison/bison.simple /^yymemcpy (char *yyto, const char *yyfrom, YYSIZE_T/ +yyls /usr/share/bison/bison.simple 89 +YYMAXDEPTH /usr/share/bison/bison.simple 256 +YYMAXDEPTH /usr/share/bison/bison.simple 260 yymemcpy /usr/share/bison/bison.simple 265 +yymemcpy /usr/share/bison/bison.simple /^yymemcpy (char *yyto, const char *yyfrom, YYSIZE_T/ +yynewstate /usr/share/bison/bison.simple 763 +yynewstate /usr/share/bison/bison.simple 925 yyn /usr/share/bison/bison.simple 755 yyn /usr/share/bison/bison.simple 861 yyn /usr/share/bison/bison.simple 895 yyn /usr/share/bison/bison.simple 903 -yynewstate /usr/share/bison/bison.simple 763 -yynewstate /usr/share/bison/bison.simple 925 +YYPARSE_PARAM_ARG /usr/share/bison/bison.simple 351 +YYPARSE_PARAM_ARG /usr/share/bison/bison.simple 354 +YYPARSE_PARAM_ARG /usr/share/bison/bison.simple 358 +YYPARSE_PARAM_DECL /usr/share/bison/bison.simple 352 +YYPARSE_PARAM_DECL /usr/share/bison/bison.simple 355 +YYPARSE_PARAM_DECL /usr/share/bison/bison.simple 359 yyparse /usr/share/bison/bison.simple /^yyparse (YYPARSE_PARAM_ARG)$/ +YYPOPSTACK /usr/share/bison/bison.simple 445 +YYPOPSTACK /usr/share/bison/bison.simple 447 +YYRECOVERING /usr/share/bison/bison.simple /^#define YYRECOVERING() (!!yyerrstatus)$/ yyresult /usr/share/bison/bison.simple 932 yyresult /usr/share/bison/bison.simple 939 yyresult /usr/share/bison/bison.simple 947 yyreturn /usr/share/bison/bison.simple 933 yyreturn /usr/share/bison/bison.simple 940 +YYSIZE_T /usr/share/bison/bison.simple 129 +YYSIZE_T /usr/share/bison/bison.simple 132 +YYSIZE_T /usr/share/bison/bison.simple 137 +YYSIZE_T /usr/share/bison/bison.simple 141 +YYSIZE_T /usr/share/bison/bison.simple 146 +YYSIZE_T /usr/share/bison/bison.simple 52 +YYSIZE_T /usr/share/bison/bison.simple 57 +YYSIZE_T /usr/share/bison/bison.simple 72 +YYSIZE_T /usr/share/bison/bison.simple 76 yyss /usr/share/bison/bison.simple 86 +YYSTACK_ALLOC /usr/share/bison/bison.simple 51 +YYSTACK_ALLOC /usr/share/bison/bison.simple 56 +YYSTACK_ALLOC /usr/share/bison/bison.simple 60 +YYSTACK_ALLOC /usr/share/bison/bison.simple 79 +YYSTACK_BYTES /usr/share/bison/bison.simple /^# define YYSTACK_BYTES(N) \\$/ +YYSTACK_FREE /usr/share/bison/bison.simple 80 +YYSTACK_FREE /usr/share/bison/bison.simple /^# define YYSTACK_FREE(Ptr) do { \/* empty *\/; } wh/ +YYSTACK_GAP_MAX /usr/share/bison/bison.simple 94 +YYSTACK_RELOCATE /usr/share/bison/bison.simple 548 +YYSTACK_RELOCATE /usr/share/bison/bison.simple /^# define YYSTACK_RELOCATE(Type, Stack) \\$/ yystate /usr/share/bison/bison.simple 757 yystate /usr/share/bison/bison.simple 761 yystate /usr/share/bison/bison.simple 875 yystate /usr/share/bison/bison.simple 924 -yystpcpy /usr/share/bison/bison.simple /^yystpcpy (char *yydest, const char *yysrc)$/ +YYSTD /usr/share/bison/bison.simple /^# define YYSTD(x) std::x$/ +YYSTD /usr/share/bison/bison.simple /^# define YYSTD(x) x$/ yystpcpy /usr/share/bison/bison.simple 317 -yystrlen /usr/share/bison/bison.simple /^yystrlen (const char *yystr)$/ +yystpcpy /usr/share/bison/bison.simple /^yystpcpy (char *yydest, const char *yysrc)$/ yystrlen /usr/share/bison/bison.simple 294 -yyvs /usr/share/bison/bison.simple 87 +yystrlen /usr/share/bison/bison.simple /^yystrlen (const char *yystr)$/ +YYSTYPE y-src/parse.y 72 +YYSTYPE y-src/parse.y 73 +YYTERROR /usr/share/bison/bison.simple 178 yyvsp /usr/share/bison/bison.simple 746 yyvsp /usr/share/bison/bison.simple 919 +yyvs /usr/share/bison/bison.simple 87 z c.c 144 z c.c 164 z cp-src/clheir.hpp 49 z cp-src/clheir.hpp 58 +Z c-src/h.h 100 +/Z ps-src/rfc1245.ps /^\/Z {$/ zzz tex-src/texinfo.tex /^\\def\\infoappendix{\\parsearg\\appendixzzz}$/ zzz tex-src/texinfo.tex /^\\def\\infochapter{\\parsearg\\chapterzzz}$/ zzz tex-src/texinfo.tex /^\\def\\infosection{\\parsearg\\sectionzzz}$/ @@ -4816,16 +4832,3 @@ zzz tex-src/texinfo.tex /^\\def\\infosubsection{\\parsearg\\subsectionzzz}$/ zzz tex-src/texinfo.tex /^\\def\\infosubsubsection{\\parsearg\\subsubsectionzzz}/ zzz tex-src/texinfo.tex /^\\outer\\def\\appendix{\\parsearg\\appendixzzz}$/ zzz tex-src/texinfo.tex /^\\outer\\def\\chapter{\\parsearg\\chapterzzz}$/ -{ tex-src/texinfo.tex /^\\let\\{=\\mylbrace$/ -{ tex-src/texinfo.tex /^\\let\\{=\\ptexlbrace$/ -| tex-src/texinfo.tex /^\\def|{{\\tt \\char '174}}$/ -| tex-src/texinfo.tex /^\\let|=\\normalverticalbar$/ -} tex-src/texinfo.tex /^\\let\\}=\\myrbrace$/ -} tex-src/texinfo.tex /^\\let\\}=\\ptexrbrace$/ -~ tex-src/texinfo.tex /^\\catcode `\\^=7 \\catcode `\\_=8 \\catcode `\\~=13 \\let/ -~ tex-src/texinfo.tex /^\\def~{{\\tt \\char '176}}$/ -~ tex-src/texinfo.tex /^\\let~=\\normaltilde$/ -~A cp-src/c.C /^A::~A() {}$/ -~B cp-src/c.C /^ ~B() {};$/ -~MDiagArray2 cp-src/MDiagArray2.h /^ ~MDiagArray2 (void) { }$/ -~generic_object cp-src/clheir.cpp /^generic_object::~generic_object(void)$/ diff --git a/test/manual/etags/CTAGS.good_update b/test/manual/etags/CTAGS.good_update index f9fd1f3d14b..7ca04b111a8 100644 --- a/test/manual/etags/CTAGS.good_update +++ b/test/manual/etags/CTAGS.good_update @@ -1,1776 +1,40 @@ -" tex-src/texinfo.tex /^\\def\\turnoffactive{\\let"=\\normaldoublequote$/ -" tex-src/texinfo.tex /^\\let"=\\activedoublequote$/ -#a-defer-word forth-src/test-forth.fth /^defer #a-defer-word$/ -#some-storage forth-src/test-forth.fth /^2000 buffer: #some-storage$/ -$0x80 c-src/sysdep.h 32 -$SYS_##syscall_na c-src/sysdep.h 31 -$domain php-src/lce_functions.php 175 -$filename php-src/lce_functions.php 174 -$ignore_ws php-src/lce_functions.php 171 -$memassign php-src/ptest.php 9 -$memassign_space php-src/ptest.php 10 -$member php-src/ptest.php 8 -$msgid php-src/lce_functions.php 107 -$msgid php-src/lce_functions.php 165 -$msgid_lc php-src/lce_functions.php 113 -$msgstr php-src/lce_functions.php 108 -$msgstr php-src/lce_functions.php 166 -$msgstr_lc php-src/lce_functions.php 114 -$po_entries php-src/lce_functions.php 172 -$poe_num php-src/lce_functions.php 173 -$por_a php-src/lce_functions.php 500 -$prefix php-src/lce_functions.php 72 -$state php-src/lce_functions.php 170 -$sys_comment php-src/lce_functions.php 110 -$sys_comment php-src/lce_functions.php 168 -$sys_comment_lc php-src/lce_functions.php 116 -$test php-src/ptest.php 12 -$unk_comment php-src/lce_functions.php 111 -$unk_comment php-src/lce_functions.php 169 -$unk_comment_lc php-src/lce_functions.php 117 -$user_comment php-src/lce_functions.php 109 -$user_comment php-src/lce_functions.php 167 -$user_comment_lc php-src/lce_functions.php 115 -${CHECKOBJS} make-src/Makefile /^${CHECKOBJS}: CFLAGS=-g3 -DNULLFREECHECK=0$/ -%cdiff make-src/Makefile /^%cdiff: CTAGS% CTAGS ${infiles}$/ -%ediff make-src/Makefile /^%ediff: ETAGS% ETAGS ${infiles}$/ -& tex-src/texinfo.tex /^\\gdef\\functionparens{\\boldbrax\\let&=\\amprm\\parenco/ -& tex-src/texinfo.tex /^\\gdef\\normalparens{\\boldbrax\\let&=\\ampnr}$/ -' tex-src/texinfo.tex /^\\def\\'{{'}}$/ -( tex-src/texinfo.tex /^\\gdef\\amprm#1 {{\\rm\\}\\let(=\\oprm \\let)=\\clrm\\ }/ -( tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ -( tex-src/texinfo.tex /^\\gdef\\oprm#1 {{\\rm\\char`\\(}#1 \\bf \\let(=\\opnested / -( tex-src/texinfo.tex /^\\ifnum \\parencount=1 {\\rm \\char `\\)}\\sl \\let(=\\opr/ -($_,$flag,$opt,$f,$r,@temp perl-src/yagrip.pl 8 -($prog,$_,@list perl-src/yagrip.pl 39 -($string,$flag,@string,@temp,@last perl-src/yagrip.pl 40 -(a-forth-constant forth-src/test-forth.fth /^constant (a-forth-constant$/ -(another-forth-word) forth-src/test-forth.fth /^: (another-forth-word) ( -- )$/ -(foo) forth-src/test-forth.fth /^: (foo) 1 ;$/ -) tex-src/texinfo.tex /^\\gdef\\amprm#1 {{\\rm\\}\\let(=\\oprm \\let)=\\clrm\\ }/ -) tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ -* tex-src/texinfo.tex /^\\def\\*{\\hfil\\break\\hbox{}\\ignorespaces}$/ -* tex-src/texinfo.tex /^\\let\\*=\\ptexstar$/ -+ ruby-src/test.rb /^ def +(y)$/ -+ tex-src/texinfo.tex /^\\def+{{\\tt \\char 43}}$/ -+ tex-src/texinfo.tex /^\\let+=\\normalplus}$/ -. tex-src/texinfo.tex /^\\def\\.{.\\spacefactor=3000 }$/ -. tex-src/texinfo.tex /^\\let\\.=\\ptexdot$/ -.PRECIOUS make-src/Makefile /^.PRECIOUS: ETAGS CTAGS ETAGS16 CTAGS16 ETAGS17 CTA/ -/.notdef ps-src/rfc1245.ps /^\/.notdef \/.notdef \/.notdef \/.notdef \/.notdef \/.not/ -/.notdef ps-src/rfc1245.ps /^\/.notdef \/.notdef \/.notdef \/.notdef \/space \/exclam/ -/A ps-src/rfc1245.ps /^\/A { $/ -/Acircumflex ps-src/rfc1245.ps /^\/Acircumflex \/Ecircumflex \/Aacute \/Edieresis \/Egra/ -/B ps-src/rfc1245.ps /^\/B { $/ -/BEGINBITMAP2BIT ps-src/rfc1245.ps /^\/BEGINBITMAP2BIT { $/ -/BEGINBITMAP2BITc ps-src/rfc1245.ps /^\/BEGINBITMAP2BITc { $/ -/BEGINBITMAPBW ps-src/rfc1245.ps /^\/BEGINBITMAPBW { $/ -/BEGINBITMAPBWc ps-src/rfc1245.ps /^\/BEGINBITMAPBWc { $/ -/BEGINBITMAPGRAY ps-src/rfc1245.ps /^\/BEGINBITMAPGRAY { $/ -/BEGINBITMAPGRAYc ps-src/rfc1245.ps /^\/BEGINBITMAPGRAYc { $/ -/BEGINPRINTCODE ps-src/rfc1245.ps /^\/BEGINPRINTCODE { $/ -/BF ps-src/rfc1245.ps /^\/BF { $/ -/BITMAPCOLOR ps-src/rfc1245.ps /^\/BITMAPCOLOR { $/ -/BITMAPCOLORc ps-src/rfc1245.ps /^\/BITMAPCOLORc { $/ -/BITMAPGRAY ps-src/rfc1245.ps /^\/BITMAPGRAY { $/ -/BITMAPGRAYc ps-src/rfc1245.ps /^\/BITMAPGRAYc { $/ -/C ps-src/rfc1245.ps /^\/C { $/ -/COMMONBITMAP ps-src/rfc1245.ps /^\/COMMONBITMAP { $/ -/COMMONBITMAPc ps-src/rfc1245.ps /^\/COMMONBITMAPc { $/ -/D ps-src/rfc1245.ps /^\/D {curveto} bind def$/ -/DiacriticEncoding ps-src/rfc1245.ps /^\/DiacriticEncoding [$/ -/E ps-src/rfc1245.ps /^\/E {lineto} bind def$/ -/ENDBITMAP ps-src/rfc1245.ps /^\/ENDBITMAP {$/ -/ENDPRINTCODE ps-src/rfc1245.ps /^\/ENDPRINTCODE {$/ -/F ps-src/rfc1245.ps /^\/F { $/ -/FMBEGINEPSF ps-src/rfc1245.ps /^\/FMBEGINEPSF { $/ -/FMBEGINPAGE ps-src/rfc1245.ps /^\/FMBEGINPAGE { $/ -/FMDEFINEFONT ps-src/rfc1245.ps /^\/FMDEFINEFONT { $/ -/FMDOCUMENT ps-src/rfc1245.ps /^\/FMDOCUMENT { $/ -/FMENDEPSF ps-src/rfc1245.ps /^\/FMENDEPSF {$/ -/FMENDPAGE ps-src/rfc1245.ps /^\/FMENDPAGE {$/ -/FMLOCAL ps-src/rfc1245.ps /^\/FMLOCAL {$/ -/FMNORMALIZEGRAPHICS ps-src/rfc1245.ps /^\/FMNORMALIZEGRAPHICS { $/ -/FMVERSION ps-src/rfc1245.ps /^\/FMVERSION {$/ -/FMversion ps-src/rfc1245.ps /^\/FMversion (2.0) def $/ -/Fmcc ps-src/rfc1245.ps /^\/Fmcc {$/ -/FrameDict ps-src/rfc1245.ps /^\/FrameDict 190 dict def $/ -/G ps-src/rfc1245.ps /^\/G { $/ -/H ps-src/rfc1245.ps /^\/H { $/ -/Icircumflex ps-src/rfc1245.ps /^\/Icircumflex \/Idieresis \/Igrave \/Oacute \/Ocircumfl/ -/L ps-src/rfc1245.ps /^\/L \/M \/N \/O \/P \/Q \/R \/S \/T \/U \/V \/W \/X \/Y \/Z \/brac/ -/L ps-src/rfc1245.ps /^\/L { $/ -/M ps-src/rfc1245.ps /^\/M {newpath moveto} bind def$/ -/N ps-src/rfc1245.ps /^\/N { $/ -/Ntilde ps-src/rfc1245.ps /^\/Ntilde \/Odieresis \/Udieresis \/aacute \/agrave \/aci/ -/O ps-src/rfc1245.ps /^\/O {closepath} bind def$/ -/Otilde ps-src/rfc1245.ps /^\/Otilde \/OE \/oe \/endash \/emdash \/quotedblleft \/quo/ -/P ps-src/rfc1245.ps /^\/P { $/ -/PF ps-src/rfc1245.ps /^\/PF { $/ -/R ps-src/rfc1245.ps /^\/R { $/ -/RF ps-src/rfc1245.ps /^\/RF { $/ -/RR ps-src/rfc1245.ps /^\/RR { $/ -/ReEncode ps-src/rfc1245.ps /^\/ReEncode { $/ -/S ps-src/rfc1245.ps /^\/S { $/ -/SF ps-src/rfc1245.ps /^\/SF { $/ -/T ps-src/rfc1245.ps /^\/T { $/ -/TF ps-src/rfc1245.ps /^\/TF { $/ -/U ps-src/rfc1245.ps /^\/U { $/ -/Uacute ps-src/rfc1245.ps /^\/Uacute \/Ucircumflex \/Ugrave \/dotlessi \/circumflex/ -/V ps-src/rfc1245.ps /^\/V { $/ -/W ps-src/rfc1245.ps /^\/W { $/ -/X ps-src/rfc1245.ps /^\/X { $/ -/Y ps-src/rfc1245.ps /^\/Y { $/ -/Z ps-src/rfc1245.ps /^\/Z {$/ -/atilde ps-src/rfc1245.ps /^\/atilde \/aring \/ccedilla \/eacute \/egrave \/ecircumf/ -/bl ps-src/rfc1245.ps /^\/bl { $/ -/braceright ps-src/rfc1245.ps /^\/braceright \/asciitilde \/.notdef \/Adieresis \/Aring/ -/bracketright ps-src/rfc1245.ps /^\/bracketright \/asciicircum \/underscore \/grave \/a \// -/breve ps-src/rfc1245.ps /^\/breve \/dotaccent \/ring \/cedilla \/hungarumlaut \/og/ -/cfs ps-src/rfc1245.ps /^\/cfs { $/ -/colorsetup ps-src/rfc1245.ps /^\/colorsetup {$/ -/desperatepapersize ps-src/rfc1245.ps /^\/desperatepapersize {$/ -/dieresis ps-src/rfc1245.ps /^\/dieresis \/.notdef \/AE \/Oslash \/.notdef \/.notdef \// -/dmatrix ps-src/rfc1245.ps /^\/dmatrix matrix def$/ -/dnormalize ps-src/rfc1245.ps /^\/dnormalize {$/ -/dpi ps-src/rfc1245.ps /^\/dpi 72 0 dmatrix defaultmatrix dtransform$/ -/exclamdown ps-src/rfc1245.ps /^\/exclamdown \/logicalnot \/.notdef \/florin \/.notdef / -/fakecolorsetup ps-src/rfc1245.ps /^\/fakecolorsetup {$/ -/fillprocs ps-src/rfc1245.ps /^\/fillprocs 32 array def$/ -/fl ps-src/rfc1245.ps /^\/fl { $/ -/fraction ps-src/rfc1245.ps /^\/fraction \/currency \/guilsinglleft \/guilsinglright/ -/freq ps-src/rfc1245.ps /^\/freq dpi 18.75 div 8 div round dup 0 eq {pop 1} i/ -/gn ps-src/rfc1245.ps /^\/gn { $/ -/graymode ps-src/rfc1245.ps /^\/graymode true def$/ -/grayness ps-src/rfc1245.ps /^\/grayness {$/ -/guillemotleft ps-src/rfc1245.ps /^\/guillemotleft \/guillemotright \/ellipsis \/.notdef / -/home/www/pub/etags.c.gz make-src/Makefile /^\/home\/www\/pub\/etags.c.gz: etags.c$/ -/home/www/pub/software/unix/etags.tar.gz make-src/Makefile /^\/home\/www\/pub\/software\/unix\/etags.tar.gz: Makefile/ -/hx ps-src/rfc1245.ps /^\/hx { $/ -/i ps-src/rfc1245.ps /^\/i \/j \/k \/l \/m \/n \/o \/p \/q \/r \/s \/t \/u \/v \/w \/x \/y/ -/iacute ps-src/rfc1245.ps /^\/iacute \/igrave \/icircumflex \/idieresis \/ntilde \/o/ -/ic ps-src/rfc1245.ps /^\/ic [ $/ -/inch ps-src/rfc1245.ps /^\/inch {72 mul} def$/ -/ip ps-src/rfc1245.ps /^\/ip { $/ -/less ps-src/rfc1245.ps /^\/less \/equal \/greater \/question \/at \/A \/B \/C \/D \/E/ -/lnormalize ps-src/rfc1245.ps /^\/lnormalize { $/ -/manualpapersize ps-src/rfc1245.ps /^\/manualpapersize {$/ -/max ps-src/rfc1245.ps /^\/max {2 copy lt {exch} if pop} bind def$/ -/min ps-src/rfc1245.ps /^\/min {2 copy gt {exch} if pop} bind def$/ -/ms ps-src/rfc1245.ps /^\/ms { $/ -/nbluet ps-src/rfc1245.ps /^\/nbluet 256 array def$/ -/ngrayt ps-src/rfc1245.ps /^\/ngrayt 256 array def$/ -/ngreent ps-src/rfc1245.ps /^\/ngreent 256 array def$/ -/normalize ps-src/rfc1245.ps /^\/normalize {$/ -/nredt ps-src/rfc1245.ps /^\/nredt 256 array def$/ -/numbersign ps-src/rfc1245.ps /^\/numbersign \/dollar \/percent \/ampersand \/quotesing/ -/ocircumflex ps-src/rfc1245.ps /^\/ocircumflex \/odieresis \/otilde \/uacute \/ugrave \/u/ -/ordfeminine ps-src/rfc1245.ps /^\/ordfeminine \/ordmasculine \/.notdef \/ae \/oslash \/q/ -/pagedimen ps-src/rfc1245.ps /^\/pagedimen { $/ -/papersize ps-src/rfc1245.ps /^\/papersize {$/ -/paragraph ps-src/rfc1245.ps /^\/paragraph \/germandbls \/registered \/copyright \/tra/ -/parenright ps-src/rfc1245.ps /^\/parenright \/asterisk \/plus \/comma \/hyphen \/period/ -/periodcentered ps-src/rfc1245.ps /^\/periodcentered \/quotesinglbase \/quotedblbase \/per/ -/quoteleft ps-src/rfc1245.ps /^\/quoteleft \/quoteright \/.notdef \/.notdef \/ydieresi/ -/restorematrix ps-src/rfc1245.ps /^\/restorematrix {$/ -/s1 ps-src/rfc1245.ps /^\/s1 1 string def$/ -/sangle ps-src/rfc1245.ps /^\/sangle 1 0 dmatrix defaultmatrix dtransform exch / -/savematrix ps-src/rfc1245.ps /^\/savematrix {$/ -/setmanualfeed ps-src/rfc1245.ps /^\/setmanualfeed {$/ -/setpapername ps-src/rfc1245.ps /^\/setpapername { $/ -/setpattern ps-src/rfc1245.ps /^\/setpattern {$/ -/two ps-src/rfc1245.ps /^\/two \/three \/four \/five \/six \/seven \/eight \/nine \// -/udieresis ps-src/rfc1245.ps /^\/udieresis \/dagger \/.notdef \/cent \/sterling \/secti/ -/wbytes ps-src/rfc1245.ps /^\/wbytes { $/ -/wh ps-src/rfc1245.ps /^\/wh { $/ -/yen ps-src/rfc1245.ps /^\/yen \/.notdef \/.notdef \/.notdef \/.notdef \/.notdef / -2const forth-src/test-forth.fth /^3 4 2constant 2const$/ -2val forth-src/test-forth.fth /^2const 2value 2val$/ -2var forth-src/test-forth.fth /^2variable 2var$/ -: tex-src/texinfo.tex /^\\def\\:{\\spacefactor=1000 }$/ -:a-forth-dictionary-entry forth-src/test-forth.fth /^create :a-forth-dictionary-entry$/ -< tex-src/texinfo.tex /^\\def<{{\\tt \\less}}$/ -< tex-src/texinfo.tex /^\\let<=\\normalless$/ -<< ruby-src/test.rb /^ def <<(y)$/ -<= ruby-src/test.rb /^ def <=(y)$/ -<=> ruby-src/test.rb /^ def <=>(y)$/ -= tex-src/texinfo.tex /^\\global\\def={{\\tt \\char 61}}}$/ -=/f ada-src/etags-test-for.ada /^ function "=" (L, R : System.Address) return Boo/ -== ruby-src/test.rb /^ def ==(y)$/ -=== ruby-src/test.rb /^ def ===(y)$/ -=starts-with-equals! scm-src/test.scm /^(define =starts-with-equals! #t)$/ -> tex-src/texinfo.tex /^\\def>{{\\tt \\gtr}}$/ -> tex-src/texinfo.tex /^\\let>=\\normalgreater$/ ->field1 forth-src/test-forth.fth /^ 9 field >field1$/ ->field2 forth-src/test-forth.fth /^ 5 field >field2$/ -@ tex-src/texinfo.tex /^\\def\\@{@}%$/ -@ tex-src/texinfo.tex /^\\def\\@{{\\tt \\char '100}}$/ -@sf tex-src/texinfo.tex /^\\ifhmode\\edef\\@sf{\\spacefactor\\the\\spacefactor}\\\/\\/ -@sf tex-src/texinfo.tex /^\\let\\@sf\\empty$/ -A c.c 162 -A cp-src/c.C /^void A::A() {}$/ -A cp-src/c.C 117 -A cp-src/c.C 39 -A cp-src/c.C 56 -A cp-src/c.C 57 -A cp-src/c.C 73 -A cp-src/fail.C 23 -A cp-src/fail.C 7 -A ruby-src/test1.ru /^class A$/ -A ruby-src/test1.ru /^module A$/ -ABC ruby-src/test1.ru 11 -ADASRC make-src/Makefile /^ADASRC=etags-test-for.ada 2ataspri.adb 2ataspri.ad/ -ADDRESS c-src/emacs/src/gmalloc.c /^#define ADDRESS(B) ((void *) (((B) - 1) * BLOCKSIZ/ -ALIGNOF_STRUCT_LISP_VECTOR c-src/emacs/src/lisp.h 1378 -ALLOCATED_BEFORE_DUMPING c-src/emacs/src/gmalloc.c /^#define ALLOCATED_BEFORE_DUMPING(P) \\$/ -ALLOCATE_PSEUDOVECTOR c-src/emacs/src/lisp.h /^#define ALLOCATE_PSEUDOVECTOR(type, field, tag) / -ALLOCATE_ZEROED_PSEUDOVECTOR c-src/emacs/src/lisp.h /^#define ALLOCATE_ZEROED_PSEUDOVECTOR(type, field, / -AND y-src/cccp.c 11 -ANSIC c-src/h.h 84 -ANSIC c-src/h.h 85 -AREF c-src/emacs/src/lisp.h /^AREF (Lisp_Object array, ptrdiff_t idx)$/ -ARGS make-src/Makefile /^ARGS=- < srclist$/ -ARITH_EQUAL c-src/emacs/src/lisp.h 3498 -ARITH_GRTR c-src/emacs/src/lisp.h 3501 -ARITH_GRTR_OR_EQUAL c-src/emacs/src/lisp.h 3503 -ARITH_LESS c-src/emacs/src/lisp.h 3500 -ARITH_LESS_OR_EQUAL c-src/emacs/src/lisp.h 3502 -ARITH_NOTEQUAL c-src/emacs/src/lisp.h 3499 -ARRAYELTS c-src/emacs/src/lisp.h /^#define ARRAYELTS(arr) (sizeof (arr) \/ sizeof (arr/ -ARRAYP c-src/emacs/src/lisp.h /^ARRAYP (Lisp_Object x)$/ -ARRAY_MARK_FLAG c-src/emacs/src/lisp.h 768 -ASCII_CHAR_P c-src/emacs/src/lisp.h /^#define ASCII_CHAR_P(c) UNSIGNED_CMP (c, <, 0x80)$/ -ASET c-src/emacs/src/lisp.h /^ASET (Lisp_Object array, ptrdiff_t idx, Lisp_Objec/ -ASIZE c-src/emacs/src/lisp.h /^ASIZE (Lisp_Object array)$/ -ASRC make-src/Makefile /^ASRC=empty.zz empty.zz.gz$/ -AST_Array::AST_Array cp-src/c.C /^AST_Array::AST_Array(UTL_ScopedName *n, unsigned l/ -AST_ConcreteType::AST_ConcreteType cp-src/c.C /^AST_ConcreteType::AST_ConcreteType(AST_Decl::NodeT/ -AST_Root cp-src/c.C 92 -AT cp-src/c.C 52 -AU cp-src/c.C 53 -AUTOLOADP c-src/emacs/src/lisp.h /^AUTOLOADP (Lisp_Object x)$/ -AUTO_CONS c-src/emacs/src/lisp.h /^#define AUTO_CONS(name, a, b) Lisp_Object name = A/ -AUTO_CONS_EXPR c-src/emacs/src/lisp.h /^#define AUTO_CONS_EXPR(a, b) \\$/ -AUTO_LIST1 c-src/emacs/src/lisp.h /^#define AUTO_LIST1(name, a) \\$/ -AUTO_LIST2 c-src/emacs/src/lisp.h /^#define AUTO_LIST2(name, a, b) \\$/ -AUTO_LIST3 c-src/emacs/src/lisp.h /^#define AUTO_LIST3(name, a, b, c) \\$/ -AUTO_LIST4 c-src/emacs/src/lisp.h /^#define AUTO_LIST4(name, a, b, c, d) \\$/ -AUTO_STRING c-src/emacs/src/lisp.h /^#define AUTO_STRING(name, str) \\$/ -AVAIL_ALLOCA c-src/emacs/src/lisp.h /^#define AVAIL_ALLOCA(size) (sa_avail -= (size), al/ -Abort_Handler_Pointer/t ada-src/2ataspri.ads /^ type Abort_Handler_Pointer is access procedure / -Abort_Task/p ada-src/2ataspri.adb /^ procedure Abort_Task (T : TCB_Ptr) is$/ -Abort_Task/p ada-src/2ataspri.ads /^ procedure Abort_Task (T : TCB_Ptr);$/ -Abort_Wrapper/p ada-src/2ataspri.adb /^ procedure Abort_Wrapper$/ -Ada_funcs c-src/etags.c /^Ada_funcs (FILE *inf)$/ -Ada_getit c-src/etags.c /^Ada_getit (FILE *inf, const char *name_qualifier)$/ -Ada_help c-src/etags.c 475 -Ada_suffixes c-src/etags.c 473 -AddNullToNmStr pas-src/common.pas /^function AddNullToNmStr; (*($/ -Address_To_Call_State/f ada-src/2ataspri.adb /^ function Address_To_Call_State is new$/ -Address_To_TCB_Ptr/f ada-src/2ataspri.ads /^ function Address_To_TCB_Ptr is new$/ -Advanced usage tex-src/gzip.texi /^@node Advanced usage, Environment, Invoking gzip, / -Aligned_Cons c-src/emacs/src/lisp.h 4670 -Aligned_String c-src/emacs/src/lisp.h 4676 -AppendTextString pas-src/common.pas /^function AppendTextString;(*($/ -Arith_Comparison c-src/emacs/src/lisp.h 3497 -Asm_help c-src/etags.c 504 -Asm_labels c-src/etags.c /^Asm_labels (FILE *inf)$/ -Asm_suffixes c-src/etags.c 493 -B cp-src/c.C /^void B::B() {}$/ -B cp-src/c.C 122 -B cp-src/c.C 54 -B cp-src/c.C 56 -B cp-src/c.C 74 -B cp-src/fail.C 24 -B cp-src/fail.C 8 -B ruby-src/test1.ru /^ class B$/ -BE_Node cp-src/c.C /^void BE_Node::BE_Node() {}$/ -BE_Node cp-src/c.C 77 -BITS_PER_BITS_WORD c-src/emacs/src/lisp.h 125 -BITS_PER_BITS_WORD c-src/emacs/src/lisp.h 129 -BITS_PER_CHAR c-src/emacs/src/lisp.h 136 -BITS_PER_EMACS_INT c-src/emacs/src/lisp.h 139 -BITS_PER_LONG c-src/emacs/src/lisp.h 138 -BITS_PER_SHORT c-src/emacs/src/lisp.h 137 -BITS_WORD_MAX c-src/emacs/src/lisp.h 124 -BITS_WORD_MAX c-src/emacs/src/lisp.h 128 -BLACK cp-src/screen.hpp 12 -BLOCK c-src/emacs/src/gmalloc.c /^#define BLOCK(A) (((char *) (A) - _heapbase) \/ BLO/ -BLOCKIFY c-src/emacs/src/gmalloc.c /^#define BLOCKIFY(SIZE) (((SIZE) + BLOCKSIZE - 1) \// -BLOCKLOG c-src/emacs/src/gmalloc.c 125 -BLOCKSIZE c-src/emacs/src/gmalloc.c 126 -BLUE cp-src/screen.hpp 13 -BOOL_VECTOR_BITS_PER_CHAR c-src/emacs/src/lisp.h 114 -BOOL_VECTOR_BITS_PER_CHAR c-src/emacs/src/lisp.h 115 -BOOL_VECTOR_P c-src/emacs/src/lisp.h /^BOOL_VECTOR_P (Lisp_Object a)$/ -BROWN cp-src/screen.hpp 18 -BUFFERP c-src/emacs/src/lisp.h /^BUFFERP (Lisp_Object a)$/ -BUFFERSIZE objc-src/Subprocess.h 43 -BUFFER_OBJFWDP c-src/emacs/src/lisp.h /^BUFFER_OBJFWDP (union Lisp_Fwd *a)$/ -BYTE_MARK_STACK c-src/emacs/src/lisp.h 3181 -Bar lua-src/test.lua /^function Square.something:Bar ()$/ -Bar perl-src/kai-test.pl /^package Bar;$/ -Barrier_Function_Pointer/t ada-src/etags-test-for.ada /^ type Barrier_Function_Pointer is access$/ -Bidule/b ada-src/etags-test-for.ada /^ protected body Bidule is$/ -Bidule/b ada-src/waroquiers.ada /^ protected body Bidule is$/ -Bidule/t ada-src/etags-test-for.ada /^ protected Bidule is$/ -Bidule/t ada-src/waroquiers.ada /^ protected Bidule is$/ -Body_Required/f ada-src/etags-test-for.ada /^ function Body_Required$/ -Boo cp-src/c.C /^ Boo(int _i, int _a, int _b) : i(_i), a(_a), b(/ -Boo cp-src/c.C 129 -Boo::Boo cp-src/c.C /^Boo::Boo(Boo) :$/ -ButtonBar pyt-src/server.py /^def ButtonBar(frame, legend, ref, alternatives, co/ -C cp-src/fail.C /^ C(int i) {x = i;}$/ -C cp-src/fail.C 25 -C cp-src/fail.C 9 -CALLMANY c-src/emacs/src/lisp.h /^#define CALLMANY(f, array) (f) (ARRAYELTS (array),/ -CALLN c-src/emacs/src/lisp.h /^#define CALLN(f, ...) CALLMANY (f, ((Lisp_Object [/ -CAR c-src/emacs/src/lisp.h /^CAR (Lisp_Object c)$/ -CAR_SAFE c-src/emacs/src/lisp.h /^CAR_SAFE (Lisp_Object c)$/ -CATCHER c-src/emacs/src/lisp.h 3021 -CDR c-src/emacs/src/lisp.h /^CDR (Lisp_Object c)$/ -CDR_SAFE c-src/emacs/src/lisp.h /^CDR_SAFE (Lisp_Object c)$/ -CFLAGS make-src/Makefile /^CFLAGS=${WARNINGS} -ansi -g3 # -pg -O$/ -CHAPFopen tex-src/texinfo.tex /^\\def\\CHAPFopen{$/ -CHAPFplain tex-src/texinfo.tex /^\\def\\CHAPFplain{$/ -CHAPPAGodd tex-src/texinfo.tex /^\\def\\CHAPPAGodd{$/ -CHAPPAGoff tex-src/texinfo.tex /^\\def\\CHAPPAGoff{$/ -CHAPPAGon tex-src/texinfo.tex /^\\def\\CHAPPAGon{$/ -CHAR c-src/etags.c /^#define CHAR(x) ((unsigned int)(x) & (CHARS - 1))/ -CHAR y-src/cccp.c 7 -CHARACTERBITS c-src/emacs/src/lisp.h 2457 -CHARS c-src/etags.c 157 -CHARTAB_SIZE_BITS c-src/emacs/src/lisp.h 1565 -CHARTAB_SIZE_BITS_0 c-src/emacs/src/lisp.h 1567 -CHARTAB_SIZE_BITS_1 c-src/emacs/src/lisp.h 1568 -CHARTAB_SIZE_BITS_2 c-src/emacs/src/lisp.h 1569 -CHARTAB_SIZE_BITS_3 c-src/emacs/src/lisp.h 1570 -CHAR_ALT c-src/emacs/src/lisp.h 2445 -CHAR_BIT c-src/emacs/src/lisp.h 2957 -CHAR_BIT c-src/emacs/src/lisp.h 2959 -CHAR_BIT c-src/emacs/src/lisp.h 2964 -CHAR_BIT c-src/emacs/src/lisp.h 2969 -CHAR_BIT c-src/emacs/src/lisp.h 2974 -CHAR_BIT c-src/emacs/src/lisp.h 2978 -CHAR_BIT c-src/emacs/src/lisp.h 2983 -CHAR_CLASS_MAX_LENGTH c-src/emacs/src/regex.h 593 -CHAR_CLASS_MAX_LENGTH c-src/emacs/src/regex.h 597 -CHAR_CLASS_MAX_LENGTH c-src/emacs/src/regex.h 605 -CHAR_CTL c-src/emacs/src/lisp.h 2449 -CHAR_HYPER c-src/emacs/src/lisp.h 2447 -CHAR_META c-src/emacs/src/lisp.h 2450 -CHAR_MODIFIER_MASK c-src/emacs/src/lisp.h 2452 -CHAR_SHIFT c-src/emacs/src/lisp.h 2448 -CHAR_SUPER c-src/emacs/src/lisp.h 2446 -CHAR_TABLE_EXTRA_SLOTS c-src/emacs/src/lisp.h /^CHAR_TABLE_EXTRA_SLOTS (struct Lisp_Char_Table *ct/ -CHAR_TABLE_P c-src/emacs/src/lisp.h /^CHAR_TABLE_P (Lisp_Object a)$/ -CHAR_TABLE_REF c-src/emacs/src/lisp.h /^CHAR_TABLE_REF (Lisp_Object ct, int idx)$/ -CHAR_TABLE_REF_ASCII c-src/emacs/src/lisp.h /^CHAR_TABLE_REF_ASCII (Lisp_Object ct, ptrdiff_t id/ -CHAR_TABLE_SET c-src/emacs/src/lisp.h /^CHAR_TABLE_SET (Lisp_Object ct, int idx, Lisp_Obje/ -CHAR_TABLE_STANDARD_SLOTS c-src/emacs/src/lisp.h 1697 -CHAR_TYPE_SIZE y-src/cccp.y 87 -CHECKFLAGS make-src/Makefile /^CHECKFLAGS=-DDEBUG -Wno-unused-function$/ -CHECKOBJS make-src/Makefile /^CHECKOBJS=chkmalloc.o chkxm.o$/ -CHECK_ARRAY c-src/emacs/src/lisp.h /^CHECK_ARRAY (Lisp_Object x, Lisp_Object predicate)/ -CHECK_BOOL_VECTOR c-src/emacs/src/lisp.h /^CHECK_BOOL_VECTOR (Lisp_Object x)$/ -CHECK_BUFFER c-src/emacs/src/lisp.h /^CHECK_BUFFER (Lisp_Object x)$/ -CHECK_CONS c-src/emacs/src/lisp.h /^CHECK_CONS (Lisp_Object x)$/ -CHECK_LISP_OBJECT_TYPE c-src/emacs/src/lisp.h 571 -CHECK_LISP_OBJECT_TYPE c-src/emacs/src/lisp.h 572 -CHECK_LISP_OBJECT_TYPE c-src/emacs/src/lisp.h 579 -CHECK_LIST c-src/emacs/src/lisp.h /^CHECK_LIST (Lisp_Object x)$/ -CHECK_LIST_CONS c-src/emacs/src/lisp.h /^# define CHECK_LIST_CONS(x, y) lisp_h_CHECK_LIST_C/ -CHECK_NATNUM c-src/emacs/src/lisp.h /^CHECK_NATNUM (Lisp_Object x)$/ -CHECK_NUMBER c-src/emacs/src/lisp.h /^# define CHECK_NUMBER(x) lisp_h_CHECK_NUMBER (x)$/ -CHECK_NUMBER_CAR c-src/emacs/src/lisp.h /^CHECK_NUMBER_CAR (Lisp_Object x)$/ -CHECK_NUMBER_CDR c-src/emacs/src/lisp.h /^CHECK_NUMBER_CDR (Lisp_Object x)$/ -CHECK_NUMBER_COERCE_MARKER c-src/emacs/src/lisp.h /^#define CHECK_NUMBER_COERCE_MARKER(x) \\$/ -CHECK_NUMBER_OR_FLOAT c-src/emacs/src/lisp.h /^CHECK_NUMBER_OR_FLOAT (Lisp_Object x)$/ -CHECK_NUMBER_OR_FLOAT_COERCE_MARKER c-src/emacs/src/lisp.h /^#define CHECK_NUMBER_OR_FLOAT_COERCE_MARKER(x) / -CHECK_PROCESS c-src/emacs/src/lisp.h /^CHECK_PROCESS (Lisp_Object x)$/ -CHECK_RANGED_INTEGER c-src/emacs/src/lisp.h /^#define CHECK_RANGED_INTEGER(x, lo, hi) \\$/ -CHECK_STRING_CAR c-src/emacs/src/lisp.h /^CHECK_STRING_CAR (Lisp_Object x)$/ -CHECK_SYMBOL c-src/emacs/src/lisp.h /^# define CHECK_SYMBOL(x) lisp_h_CHECK_SYMBOL (x)$/ -CHECK_TYPE c-src/emacs/src/lisp.h /^# define CHECK_TYPE(ok, predicate, x) lisp_h_CHECK/ -CHECK_TYPE_RANGED_INTEGER c-src/emacs/src/lisp.h /^#define CHECK_TYPE_RANGED_INTEGER(type, x) \\$/ -CHECK_VECTOR c-src/emacs/src/lisp.h /^CHECK_VECTOR (Lisp_Object x)$/ -CHECK_VECTOR_OR_STRING c-src/emacs/src/lisp.h /^CHECK_VECTOR_OR_STRING (Lisp_Object x)$/ -CHECK_WINDOW c-src/emacs/src/lisp.h /^CHECK_WINDOW (Lisp_Object x)$/ -CK_ABS_C y-src/parse.y /^#define CK_ABS_C(x) if((x)MAX_COL)/ -CK_ABS_R y-src/parse.y /^#define CK_ABS_R(x) if((x)MAX_ROW)/ -CK_REL_C y-src/parse.y /^#define CK_REL_C(x) if( ((x)>0 && MAX_COL-(x)0 && MAX_ROW-(x)/ -MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (const Array& a) : DiagArray2 / -MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (const DiagArray2& a) : DiagArray/ -MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (const MDiagArray2& a) : DiagArra/ -MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (int r, int c) : DiagArray2 (r, c/ -MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (int r, int c, const T& val) : DiagA/ -MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (void) : DiagArray2 () { }$/ -MDiagArray2 cp-src/MDiagArray2.h 78 -MIN_HASH_VALUE c-src/etags.c 2328 -MIN_WORD_LENGTH c-src/etags.c 2326 -MISCP c-src/emacs/src/lisp.h /^# define MISCP(x) lisp_h_MISCP (x)$/ -MOST_NEGATIVE_FIXNUM c-src/emacs/src/lisp.h 835 -MOST_POSITIVE_FIXNUM c-src/emacs/src/lisp.h 834 -MOVE c-src/sysdep.h /^#define MOVE(x,y) movl x, y$/ -MSDOS c-src/etags.c 100 -MSDOS c-src/etags.c 106 -MSDOS c-src/etags.c 107 -MSDOS c-src/etags.c 110 -MSGSEL f-src/entry.for /^ ENTRY MSGSEL ( TYPE )$/ -MSGSEL f-src/entry.strange /^ ENTRY MSGSEL ( TYPE )$/ -MSGSEL f-src/entry.strange_suffix /^ ENTRY MSGSEL ( TYPE )$/ -MULTI_LETTER_MOD c-src/emacs/src/keyboard.c /^#define MULTI_LETTER_MOD(BIT, NAME, LEN) \\$/ -MULTI_LETTER_MOD c-src/emacs/src/keyboard.c /^#define MULTI_LETTER_MOD(BIT, NAME, LEN) \\$/ -MULTI_LETTER_MOD c-src/emacs/src/keyboard.c 6231 -MULTI_LETTER_MOD c-src/emacs/src/keyboard.c 6764 -Machin_T/b ada-src/waroquiers.ada /^ protected body Machin_T is$/ -Machin_T/t ada-src/etags-test-for.ada /^ protected Machin_T is$/ -Machin_T/t ada-src/etags-test-for.ada /^ protected type Machin_T is$/ -Machin_T/t ada-src/waroquiers.ada /^ protected type Machin_T is$/ -Machine_Exceptions/t ada-src/2ataspri.ads /^ type Machine_Exceptions is new Interfaces.C.POS/ -MakeDispose pyt-src/server.py /^ def MakeDispose(self):$/ -MakeSitelist pyt-src/server.py /^ def MakeSitelist(self, master):$/ -Makefile_filenames c-src/etags.c 603 -Makefile_help c-src/etags.c 605 -Makefile_targets c-src/etags.c /^Makefile_targets (FILE *inf)$/ -Mc cp-src/c.C /^int main (void) { my_function0(0); my_function1(1)/ -Mcccp y-src/cccp.y /^main ()$/ -Mconway.cpp cp-src/conway.cpp /^void main(void)$/ -Metags c-src/etags.c /^main (int argc, char **argv)$/ -Mfail cp-src/fail.C /^main()$/ -Mkai-test.pl perl-src/kai-test.pl /^package main;$/ -ModuleExample ruby-src/test.rb /^module ModuleExample$/ -More_Lisp_Bits c-src/emacs/src/lisp.h 801 -MoveLayerAfter lua-src/allegro.lua /^function MoveLayerAfter (this_one)$/ -MoveLayerBefore lua-src/allegro.lua /^function MoveLayerBefore (this_one)$/ -MoveLayerBottom lua-src/allegro.lua /^function MoveLayerBottom ()$/ -MoveLayerTop lua-src/allegro.lua /^function MoveLayerTop ()$/ -Mtest.go go-src/test.go /^func main() {$/ -Mtest.go go-src/test.go 1 -Mtest.rs rs-src/test.rs /^fn main() {$/ -Mtest1.go go-src/test1.go /^func main() {$/ -Mtest1.go go-src/test1.go 1 -Mx.cc cp-src/x.cc /^main(int argc, char *argv[])$/ -NAME y-src/cccp.c 8 -NATNUMP c-src/emacs/src/lisp.h /^NATNUMP (Lisp_Object x)$/ -NDEBUG c-src/etags.c 88 -NE y-src/parse.c 6 -NEG y-src/parse.c 9 -NEXT_ALMOST_PRIME_LIMIT c-src/emacs/src/lisp.h 3573 -NILP c-src/emacs/src/lisp.h /^# define NILP(x) lisp_h_NILP (x)$/ -NIL_IS_ZERO c-src/emacs/src/lisp.h 1515 -NONPOINTER_BITS c-src/emacs/src/lisp.h 78 -NONPOINTER_BITS c-src/emacs/src/lisp.h 80 -NONSRCS make-src/Makefile /^NONSRCS=entry.strange lists.erl clheir.hpp.gz$/ -NOTEQUAL y-src/cccp.c 13 -NULL y-src/cccp.y 51 -NULL_PTR y-src/cccp.y 63 -NUMSTATS objc-src/PackInsp.h 36 -NUM_MOD_NAMES c-src/emacs/src/keyboard.c 6325 -NUM_RECENT_KEYS c-src/emacs/src/keyboard.c 91 -NameHasChar pas-src/common.pas /^function NameHasChar; (* (TheName : NameString; Th/ -NameStringLess pas-src/common.pas /^function NameStringLess;(*(var Name1,Name2 : NameS/ -NewLayer lua-src/allegro.lua /^function NewLayer (name, x, y, w, h)$/ -NewLayerSet lua-src/allegro.lua /^function NewLayerSet (name)$/ -NewNameString pas-src/common.pas /^procedure NewNameString; (* (var NSP: NameStringPo/ -NmStrToErrStr pas-src/common.pas /^function NmStrToErrStr;(*($/ -NmStrToInteger pas-src/common.pas /^function NmStrToInteger; (* (Str : NameString) : i/ -OBJCPPSRC make-src/Makefile /^OBJCPPSRC=SimpleCalc.H SimpleCalc.M$/ -OBJCSRC make-src/Makefile /^OBJCSRC=Subprocess.h Subprocess.m PackInsp.h PackI/ -OBJS make-src/Makefile /^OBJS=${GETOPTOBJS} ${REGEXOBJS} ${CHECKOBJS}$/ -OPENBUTTON objc-src/PackInsp.m 47 -OPTIONS make-src/Makefile /^OPTIONS=--members --declarations --regex=@regexfil/ -OR y-src/cccp.c 10 -OTAGS make-src/Makefile /^OTAGS: oetags ${SRCS} srclist$/ -OVERLAYP c-src/emacs/src/lisp.h /^OVERLAYP (Lisp_Object x)$/ -Objc_help c-src/etags.c 613 -Objc_suffixes c-src/etags.c 609 -OperatorFun c-src/h.h 88 -Overview tex-src/gzip.texi /^@node Overview, Sample, Copying, Top$/ -PASSRC make-src/Makefile /^PASSRC=common.pas$/ -PDT c-src/h.h /^ Date 04 May 87 235311 PDT (Mon)$/ -PERLSRC make-src/Makefile /^PERLSRC=htlmify-cystic yagrip.pl kai-test.pl mirro/ -PHPSRC make-src/Makefile /^PHPSRC=lce_functions.php ptest.php sendmail.php$/ -PHP_functions c-src/etags.c /^PHP_functions (FILE *inf)$/ -PHP_help c-src/etags.c 639 -PHP_suffixes c-src/etags.c 637 -POEntry php-src/lce_functions.php /^ function POEntry()$/ -POEntry php-src/lce_functions.php 105 -POEntryAD php-src/lce_functions.php 29 -PORManager php-src/lce_functions.php /^ function PORManager()$/ -PORManager php-src/lce_functions.php 498 -POReader php-src/lce_functions.php /^ function POReader($domain, $filename)$/ -POReader php-src/lce_functions.php 163 -POSTSCRIPTFLAGS make-src/Makefile /^POSTSCRIPTFLAGS=--language=none --regex='#\/[^ \\t{]/ -PRINT_UNDOCUMENTED_OPTIONS_HELP c-src/etags.c 804 -PROCESSP c-src/emacs/src/lisp.h /^PROCESSP (Lisp_Object a)$/ -PROLSRC make-src/Makefile /^PROLSRC=ordsets.prolog natded.prolog$/ -PROP c-src/emacs/src/keyboard.c /^#define PROP(IDX) AREF (tool_bar_item_properties, / -PROP c-src/emacs/src/keyboard.c 8379 -PROTECT_MALLOC_STATE c-src/emacs/src/gmalloc.c /^#define PROTECT_MALLOC_STATE(PROT) \/* empty *\/$/ -PROTECT_MALLOC_STATE c-src/emacs/src/gmalloc.c /^#define PROTECT_MALLOC_STATE(PROT) protect_malloc_/ -PRTPKG f-src/entry.for /^ LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL,/ -PRTPKG f-src/entry.strange /^ LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL,/ -PRTPKG f-src/entry.strange_suffix /^ LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL,/ -PSEUDO c-src/sysdep.h /^#define PSEUDO(name, syscall_name, args) / -PSEUDOVECSIZE c-src/emacs/src/lisp.h /^#define PSEUDOVECSIZE(type, nonlispfield) \\$/ -PSEUDOVECTORP c-src/emacs/src/lisp.h /^PSEUDOVECTORP (Lisp_Object a, int code)$/ -PSEUDOVECTOR_AREA_BITS c-src/emacs/src/lisp.h 818 -PSEUDOVECTOR_FLAG c-src/emacs/src/lisp.h 774 -PSEUDOVECTOR_REST_BITS c-src/emacs/src/lisp.h 813 -PSEUDOVECTOR_REST_MASK c-src/emacs/src/lisp.h 814 -PSEUDOVECTOR_SIZE_BITS c-src/emacs/src/lisp.h 808 -PSEUDOVECTOR_SIZE_MASK c-src/emacs/src/lisp.h 809 -PSEUDOVECTOR_TYPEP c-src/emacs/src/lisp.h /^PSEUDOVECTOR_TYPEP (struct vectorlike_header *a, i/ -PSSRC make-src/Makefile /^PSSRC=rfc1245.ps$/ -PS_functions c-src/etags.c /^PS_functions (FILE *inf)$/ -PS_help c-src/etags.c 649 -PS_suffixes c-src/etags.c 647 -PTY_LENGTH objc-src/Subprocess.m 21 -PTY_TEMPLATE objc-src/Subprocess.m 20 -PUSH_C_STR c-src/emacs/src/keyboard.c /^#define PUSH_C_STR(str, listvar) \\$/ -PUSH_HANDLER c-src/emacs/src/lisp.h /^#define PUSH_HANDLER(c, tag_ch_val, handlertype) \\/ -PVEC_BOOL_VECTOR c-src/emacs/src/lisp.h 787 -PVEC_BUFFER c-src/emacs/src/lisp.h 788 -PVEC_CHAR_TABLE c-src/emacs/src/lisp.h 796 -PVEC_COMPILED c-src/emacs/src/lisp.h 795 -PVEC_FONT c-src/emacs/src/lisp.h 798 -PVEC_FRAME c-src/emacs/src/lisp.h 785 -PVEC_FREE c-src/emacs/src/lisp.h 783 -PVEC_HASH_TABLE c-src/emacs/src/lisp.h 789 -PVEC_NORMAL_VECTOR c-src/emacs/src/lisp.h 782 -PVEC_OTHER c-src/emacs/src/lisp.h 793 -PVEC_PROCESS c-src/emacs/src/lisp.h 784 -PVEC_SUBR c-src/emacs/src/lisp.h 792 -PVEC_SUB_CHAR_TABLE c-src/emacs/src/lisp.h 797 -PVEC_TERMINAL c-src/emacs/src/lisp.h 790 -PVEC_TYPE_MASK c-src/emacs/src/lisp.h 819 -PVEC_WINDOW c-src/emacs/src/lisp.h 786 -PVEC_WINDOW_CONFIGURATION c-src/emacs/src/lisp.h 791 -PYTSRC make-src/Makefile /^PYTSRC=server.py$/ -PackageInspector objc-src/PackInsp.h /^@interface PackageInspector:WMInspector$/ -Pascal_functions c-src/etags.c /^Pascal_functions (FILE *inf)$/ -Pascal_help c-src/etags.c 621 -Pascal_suffixes c-src/etags.c 619 -Perl_functions c-src/etags.c /^Perl_functions (FILE *inf)$/ -Perl_help c-src/etags.c 630 -Perl_interpreters c-src/etags.c 628 -Perl_suffixes c-src/etags.c 626 -Pkg1/b ada-src/etags-test-for.ada /^package body Pkg1 is$/ -Pkg1/b ada-src/waroquiers.ada /^package body Pkg1 is$/ -Pkg1/s ada-src/etags-test-for.ada /^package Pkg1 is$/ -Pkg1/s ada-src/waroquiers.ada /^package Pkg1 is$/ -Pkg1_Func1/f ada-src/etags-test-for.ada /^ function Pkg1_Func1 return Boolean is separate;$/ -Pkg1_Func1/f ada-src/etags-test-for.ada /^ function Pkg1_Func1 return Boolean;$/ -Pkg1_Func1/f ada-src/etags-test-for.ada /^function Pkg1_Func1 return Boolean is$/ -Pkg1_Func1/f ada-src/waroquiers.ada /^ function Pkg1_Func1 return Boolean is separate;$/ -Pkg1_Func1/f ada-src/waroquiers.ada /^ function Pkg1_Func1 return Boolean;$/ -Pkg1_Func1/f ada-src/waroquiers.ada /^function Pkg1_Func1 return Boolean is$/ -Pkg1_Func2/f ada-src/etags-test-for.ada /^ function Pkg1_Func2 (Ijk : Integer; Z : Integer)/ -Pkg1_Func2/f ada-src/waroquiers.ada /^ function Pkg1_Func2 (Ijk : Integer; Z : Integer)/ -Pkg1_Pkg1/b ada-src/etags-test-for.ada /^ package body Pkg1_Pkg1 is separate;$/ -Pkg1_Pkg1/b ada-src/etags-test-for.ada /^package body Pkg1_Pkg1 is$/ -Pkg1_Pkg1/b ada-src/waroquiers.ada /^ package body Pkg1_Pkg1 is separate;$/ -Pkg1_Pkg1/b ada-src/waroquiers.ada /^package body Pkg1_Pkg1 is$/ -Pkg1_Pkg1/s ada-src/etags-test-for.ada /^ package Pkg1_Pkg1 is$/ -Pkg1_Pkg1/s ada-src/waroquiers.ada /^ package Pkg1_Pkg1 is$/ -Pkg1_Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Pkg1_Proc1;$/ -Pkg1_Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Pkg1_Proc1 is$/ -Pkg1_Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Pkg1_Proc1;$/ -Pkg1_Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Pkg1_Proc1 is$/ -Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc1 is$/ -Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc1;$/ -Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc1 is$/ -Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc1;$/ -Pkg1_Proc2/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc2 (I : Integer) is$/ -Pkg1_Proc2/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc2 (I : Integer);$/ -Pkg1_Proc2/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc2 (I : Integer) is$/ -Pkg1_Proc2/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc2 (I : Integer);$/ -PostControls pyt-src/server.py /^ def PostControls(self):$/ -Pre_Call_State/t ada-src/2ataspri.ads /^ type Pre_Call_State is new System.Address;$/ -PrintAdd go-src/test1.go /^func (n intNumber) PrintAdd() {$/ -PrintAdd go-src/test1.go /^func (s str) PrintAdd() {$/ -Private objc-src/Subprocess.m /^@interface Subprocess(Private)$/ -Private_T/b ada-src/etags-test-for.ada /^ task body Private_T is$/ -Private_T/b ada-src/waroquiers.ada /^ task body Private_T is$/ -Private_T/k ada-src/etags-test-for.ada /^ task Private_T;$/ -Private_T/k ada-src/waroquiers.ada /^ task Private_T;$/ -Private_T/p ada-src/etags-test-for.ada /^ procedure Private_T is$/ -Private_T/p ada-src/etags-test-for.ada /^ procedure Private_T;$/ -Private_T/p ada-src/waroquiers.ada /^ procedure Private_T is$/ -Private_T/p ada-src/waroquiers.ada /^ procedure Private_T;$/ -Private_T/t ada-src/etags-test-for.ada /^ type Private_T is private;$/ -Private_T/t ada-src/etags-test-for.ada /^ type Private_T is$/ -Private_T/t ada-src/waroquiers.ada /^ type Private_T is private;$/ -Private_T/t ada-src/waroquiers.ada /^ type Private_T is$/ -Problems tex-src/gzip.texi /^@node Problems, Concept Index, Tapes, Top$/ -Proc/t ada-src/2ataspri.ads /^ type Proc is access procedure (Addr : System.Ad/ -Prolog_functions c-src/etags.c /^Prolog_functions (FILE *inf)$/ -Prolog_help c-src/etags.c 654 -Prolog_suffixes c-src/etags.c 652 -Public_T/t ada-src/etags-test-for.ada /^ type Public_T is$/ -Public_T/t ada-src/waroquiers.ada /^ type Public_T is$/ -Python_functions c-src/etags.c /^Python_functions (FILE *inf)$/ -Python_help c-src/etags.c 660 -Python_suffixes c-src/etags.c 658 -QUIT c-src/emacs/src/lisp.h 3101 -QUITP c-src/emacs/src/lisp.h 3112 -RANGED_INTEGERP c-src/emacs/src/lisp.h /^RANGED_INTEGERP (intmax_t lo, Lisp_Object x, intma/ -RCSid objc-src/PackInsp.m 30 -READABLE_EVENTS_DO_TIMERS_NOW c-src/emacs/src/keyboard.c 346 -READABLE_EVENTS_FILTER_EVENTS c-src/emacs/src/keyboard.c 347 -READABLE_EVENTS_IGNORE_SQUEEZABLES c-src/emacs/src/keyboard.c 348 -RECC_ALNUM c-src/emacs/src/regex.h 610 -RECC_ALPHA c-src/emacs/src/regex.h 610 -RECC_ASCII c-src/emacs/src/regex.h 617 -RECC_BLANK c-src/emacs/src/regex.h 615 -RECC_CNTRL c-src/emacs/src/regex.h 613 -RECC_DIGIT c-src/emacs/src/regex.h 614 -RECC_ERROR c-src/emacs/src/regex.h 609 -RECC_GRAPH c-src/emacs/src/regex.h 611 -RECC_LOWER c-src/emacs/src/regex.h 612 -RECC_MULTIBYTE c-src/emacs/src/regex.h 616 -RECC_NONASCII c-src/emacs/src/regex.h 616 -RECC_PRINT c-src/emacs/src/regex.h 611 -RECC_PUNCT c-src/emacs/src/regex.h 613 -RECC_SPACE c-src/emacs/src/regex.h 615 -RECC_UNIBYTE c-src/emacs/src/regex.h 617 -RECC_UPPER c-src/emacs/src/regex.h 612 -RECC_WORD c-src/emacs/src/regex.h 610 -RECC_XDIGIT c-src/emacs/src/regex.h 614 -RED cp-src/screen.hpp 16 -REGEX make-src/Makefile /^REGEX=\/[ \\t]*DEFVAR_[A-Z_ \\t\\n(]+"\\([^"]+\\)"\/$/ -REGEXOBJS make-src/Makefile /^REGEXOBJS=regex.o$/ -REGS_FIXED c-src/emacs/src/regex.h 378 -REGS_REALLOCATE c-src/emacs/src/regex.h 377 -REGS_UNALLOCATED c-src/emacs/src/regex.h 376 -REG_BADBR c-src/emacs/src/regex.h 313 -REG_BADPAT c-src/emacs/src/regex.h 305 -REG_BADRPT c-src/emacs/src/regex.h 316 -REG_EBRACE c-src/emacs/src/regex.h 312 -REG_EBRACK c-src/emacs/src/regex.h 310 -REG_ECOLLATE c-src/emacs/src/regex.h 306 -REG_ECTYPE c-src/emacs/src/regex.h 307 -REG_EEND c-src/emacs/src/regex.h 319 -REG_EESCAPE c-src/emacs/src/regex.h 308 -REG_ENOSYS c-src/emacs/src/regex.h 297 -REG_ENOSYS c.c 279 -REG_EPAREN c-src/emacs/src/regex.h 311 -REG_ERANGE c-src/emacs/src/regex.h 314 -REG_ERANGEX c-src/emacs/src/regex.h 322 -REG_ERPAREN c-src/emacs/src/regex.h 321 -REG_ESIZE c-src/emacs/src/regex.h 320 -REG_ESPACE c-src/emacs/src/regex.h 315 -REG_ESUBREG c-src/emacs/src/regex.h 309 -REG_EXTENDED c-src/emacs/src/regex.h 263 -REG_ICASE c-src/emacs/src/regex.h 267 -REG_NEWLINE c-src/emacs/src/regex.h 272 -REG_NOERROR c-src/emacs/src/regex.h 300 -REG_NOMATCH c-src/emacs/src/regex.h 301 -REG_NOSUB c-src/emacs/src/regex.h 276 -REG_NOTBOL c-src/emacs/src/regex.h 286 -REG_NOTEOL c-src/emacs/src/regex.h 289 -RELEASELIST make-src/Makefile /^RELEASELIST=pot@gnu.org xemacs-review@xemacs.org j/ -RESUME_POLLING c-src/emacs/src/keyboard.c 2170 -RETURN_UNGCPRO c-src/emacs/src/lisp.h /^#define RETURN_UNGCPRO(expr) \\$/ -RE_BACKSLASH_ESCAPE_IN_LISTS c-src/emacs/src/regex.h 47 -RE_BK_PLUS_QM c-src/emacs/src/regex.h 52 -RE_CHAR_CLASSES c-src/emacs/src/regex.h 58 -RE_CONTEXT_INDEP_ANCHORS c-src/emacs/src/regex.h 72 -RE_CONTEXT_INDEP_OPS c-src/emacs/src/regex.h 80 -RE_CONTEXT_INVALID_OPS c-src/emacs/src/regex.h 84 -RE_DEBUG c-src/emacs/src/regex.h 161 -RE_DOT_NEWLINE c-src/emacs/src/regex.h 88 -RE_DOT_NOT_NULL c-src/emacs/src/regex.h 92 -RE_DUP_MAX c-src/emacs/src/regex.h 253 -RE_DUP_MAX c-src/emacs/src/regex.h 256 -RE_FRUGAL c-src/emacs/src/regex.h 147 -RE_HAT_LISTS_NOT_NEWLINE c-src/emacs/src/regex.h 96 -RE_INTERVALS c-src/emacs/src/regex.h 101 -RE_LIMITED_OPS c-src/emacs/src/regex.h 105 -RE_NEWLINE_ALT c-src/emacs/src/regex.h 109 -RE_NO_BK_BRACES c-src/emacs/src/regex.h 114 -RE_NO_BK_PARENS c-src/emacs/src/regex.h 118 -RE_NO_BK_REFS c-src/emacs/src/regex.h 122 -RE_NO_BK_VBAR c-src/emacs/src/regex.h 126 -RE_NO_EMPTY_RANGES c-src/emacs/src/regex.h 132 -RE_NO_GNU_OPS c-src/emacs/src/regex.h 144 -RE_NO_NEWLINE_ANCHOR c-src/emacs/src/regex.h 153 -RE_NO_POSIX_BACKTRACKING c-src/emacs/src/regex.h 140 -RE_NREGS c-src/emacs/src/regex.h 440 -RE_SHY_GROUPS c-src/emacs/src/regex.h 150 -RE_SYNTAX_AWK c-src/emacs/src/regex.h 186 -RE_SYNTAX_ED c-src/emacs/src/regex.h 216 -RE_SYNTAX_EGREP c-src/emacs/src/regex.h 206 -RE_SYNTAX_EMACS c-src/emacs/src/regex.h 183 -RE_SYNTAX_GNU_AWK c-src/emacs/src/regex.h 193 -RE_SYNTAX_GREP c-src/emacs/src/regex.h 201 -RE_SYNTAX_POSIX_AWK c-src/emacs/src/regex.h 197 -RE_SYNTAX_POSIX_BASIC c-src/emacs/src/regex.h 225 -RE_SYNTAX_POSIX_EGREP c-src/emacs/src/regex.h 212 -RE_SYNTAX_POSIX_EXTENDED c-src/emacs/src/regex.h 234 -RE_SYNTAX_POSIX_MINIMAL_BASIC c-src/emacs/src/regex.h 231 -RE_SYNTAX_POSIX_MINIMAL_EXTENDED c-src/emacs/src/regex.h 242 -RE_SYNTAX_SED c-src/emacs/src/regex.h 218 -RE_TRANSLATE_TYPE c-src/emacs/src/regex.h 332 -RE_UNMATCHED_RIGHT_PAREN_ORD c-src/emacs/src/regex.h 136 -RSH y-src/cccp.c 17 -RTE/s ada-src/2ataspri.adb /^ package RTE renames Interfaces.C.POSIX_RTE;$/ -RUN make-src/Makefile /^RUN=$/ -RUN make-src/Makefile /^RUN=time --quiet --format '%U + %S: %E'$/ -RXINCLUDE make-src/Makefile /^RXINCLUDE=-Iemacs\/src$/ -Range cp-src/Range.h /^ Range (const Range& r)$/ -Range cp-src/Range.h /^ Range (double b, double l)$/ -Range cp-src/Range.h /^ Range (double b, double l, double i)$/ -Range cp-src/Range.h /^ Range (void)$/ -Range cp-src/Range.h 35 -ReadVacation cp-src/functions.cpp /^void ReadVacation ( char *filename ) {$/ -Read_Lock/p ada-src/2ataspri.adb /^ procedure Read_Lock (L : in out Lock; Ceiling_V/ -Read_Lock/p ada-src/2ataspri.ads /^ procedure Read_Lock (L : in out Lock; Ceiling_V/ -Rectangle.getPos lua-src/test.lua /^function Rectangle.getPos ()$/ -ReleaseNameString pas-src/common.pas /^procedure ReleaseNameString; (* (var NSP: NameStri/ -RemoveLayer lua-src/allegro.lua /^function RemoveLayer ()$/ -RemoveUnderlineControl pas-src/common.pas /^function RemoveUnderlineControl; (*($/ -ReprOfChar pas-src/common.pas /^function ReprOfChar; (*( ch : char) : NameString;*/ -S c.c 156 -SAFE_ALLOCA c-src/emacs/src/lisp.h /^#define SAFE_ALLOCA(size) ((size) <= sa_avail \\/ -SAFE_ALLOCA_LISP c-src/emacs/src/lisp.h /^#define SAFE_ALLOCA_LISP(buf, nelt) \\$/ -SAFE_ALLOCA_STRING c-src/emacs/src/lisp.h /^#define SAFE_ALLOCA_STRING(ptr, string) \\$/ -SAFE_FREE c-src/emacs/src/lisp.h /^#define SAFE_FREE() \\$/ -SAFE_NALLOCA c-src/emacs/src/lisp.h /^#define SAFE_NALLOCA(buf, multiplier, nitems) \\/ -SAVE_FUNCPOINTER c-src/emacs/src/lisp.h 2049 -SAVE_INTEGER c-src/emacs/src/lisp.h 2048 -SAVE_OBJECT c-src/emacs/src/lisp.h 2051 -SAVE_POINTER c-src/emacs/src/lisp.h 2050 -SAVE_SLOT_BITS c-src/emacs/src/lisp.h 2055 -SAVE_TYPE_BITS c-src/emacs/src/lisp.h 2062 -SAVE_TYPE_BITS c-src/emacs/src/lisp.h 2114 -SAVE_TYPE_BITS c-src/emacs/src/lisp.h 2123 -SAVE_TYPE_FUNCPTR_PTR_OBJ c-src/emacs/src/lisp.h 2076 -SAVE_TYPE_INT_INT c-src/emacs/src/lisp.h 2066 -SAVE_TYPE_INT_INT_INT c-src/emacs/src/lisp.h 2067 -SAVE_TYPE_MEMORY c-src/emacs/src/lisp.h 2080 -SAVE_TYPE_OBJ_OBJ c-src/emacs/src/lisp.h 2069 -SAVE_TYPE_OBJ_OBJ_OBJ c-src/emacs/src/lisp.h 2070 -SAVE_TYPE_OBJ_OBJ_OBJ_OBJ c-src/emacs/src/lisp.h 2071 -SAVE_TYPE_PTR_INT c-src/emacs/src/lisp.h 2073 -SAVE_TYPE_PTR_OBJ c-src/emacs/src/lisp.h 2074 -SAVE_TYPE_PTR_PTR c-src/emacs/src/lisp.h 2075 -SAVE_UNUSED c-src/emacs/src/lisp.h 2047 -SAVE_VALUEP c-src/emacs/src/lisp.h /^SAVE_VALUEP (Lisp_Object x)$/ -SAVE_VALUE_SLOTS c-src/emacs/src/lisp.h 2058 -SBYTES c-src/emacs/src/lisp.h /^SBYTES (Lisp_Object string)$/ -SCHARS c-src/emacs/src/lisp.h /^SCHARS (Lisp_Object string)$/ -SCREEN_FP cp-src/screen.hpp /^#define SCREEN_FP(x,y) \\$/ -SCREEN_START cp-src/screen.hpp 33 -SDATA c-src/emacs/src/lisp.h /^SDATA (Lisp_Object string)$/ -SDTrefGetInteger pas-src/common.pas /^function SDTrefGetInteger : integer;$/ -SDTrefIsEnd pas-src/common.pas /^function SDTrefIsEnd : Boolean;$/ -SDTrefRecToString pas-src/common.pas /^procedure SDTrefRecToString (* ($/ -SDTrefSkipSpaces pas-src/common.pas /^procedure SDTrefSkipSpaces;$/ -SDTrefStringToRec pas-src/common.pas /^procedure SDTrefStringToRec (* ($/ -SETPRT f-src/entry.for /^ ENTRY SETPRT ( SHORT, EXPL, LONG, TRACE, D/ -SETPRT f-src/entry.strange /^ ENTRY SETPRT ( SHORT, EXPL, LONG, TRACE, D/ -SETPRT f-src/entry.strange_suffix /^ ENTRY SETPRT ( SHORT, EXPL, LONG, TRACE, D/ -SET_SYMBOL_BLV c-src/emacs/src/lisp.h /^SET_SYMBOL_BLV (struct Lisp_Symbol *sym, struct Li/ -SET_SYMBOL_FWD c-src/emacs/src/lisp.h /^SET_SYMBOL_FWD (struct Lisp_Symbol *sym, union Lis/ -SET_SYMBOL_VAL c-src/emacs/src/lisp.h /^# define SET_SYMBOL_VAL(sym, v) lisp_h_SET_SYMBOL_/ -SINGLE_LETTER_MOD c-src/emacs/src/keyboard.c /^#define SINGLE_LETTER_MOD(BIT) \\$/ -SINGLE_LETTER_MOD c-src/emacs/src/keyboard.c 6212 -SINGLE_LETTER_MOD c-src/emacs/src/keyboard.c 6763 -SIZEFORMAT objc-src/PackInsp.m 57 -SPECPDL_BACKTRACE c-src/emacs/src/lisp.h 2948 -SPECPDL_INDEX c-src/emacs/src/lisp.h /^SPECPDL_INDEX (void)$/ -SPECPDL_LET c-src/emacs/src/lisp.h 2949 -SPECPDL_LET_DEFAULT c-src/emacs/src/lisp.h 2952 -SPECPDL_LET_LOCAL c-src/emacs/src/lisp.h 2951 -SPECPDL_UNWIND c-src/emacs/src/lisp.h 2944 -SPECPDL_UNWIND_INT c-src/emacs/src/lisp.h 2946 -SPECPDL_UNWIND_PTR c-src/emacs/src/lisp.h 2945 -SPECPDL_UNWIND_VOID c-src/emacs/src/lisp.h 2947 -SRCS make-src/Makefile /^SRCS=Makefile ${ADASRC} ${ASRC} ${CSRC} ${CPSRC} $/ -SREF c-src/emacs/src/lisp.h /^SREF (Lisp_Object string, ptrdiff_t index)$/ -SSDATA c-src/emacs/src/lisp.h /^SSDATA (Lisp_Object string)$/ -SSET c-src/emacs/src/lisp.h /^SSET (Lisp_Object string, ptrdiff_t index, unsigne/ -STACK_CONS c-src/emacs/src/lisp.h /^#define STACK_CONS(a, b) \\$/ -STATE_ABORT php-src/lce_functions.php 25 -STATE_COMPRESSD objc-src/PackInsp.m 54 -STATE_INSTALLED objc-src/PackInsp.m 53 -STATE_LOOP php-src/lce_functions.php 27 -STATE_OK php-src/lce_functions.php 26 -STATE_UNINSTALLED objc-src/PackInsp.m 52 -STAT_EQ objc-src/PackInsp.m /^#define STAT_EQ(s1, s2) ((s1)->st_ino == (s2)->st_/ -STDIN c-src/etags.c 408 -STDIN c-src/etags.c 411 -STOP_POLLING c-src/emacs/src/keyboard.c 2166 -STRING_BYTES c-src/emacs/src/lisp.h /^STRING_BYTES (struct Lisp_String *s)$/ -STRING_BYTES_BOUND c-src/emacs/src/lisp.h 1261 -STRING_MULTIBYTE c-src/emacs/src/lisp.h /^STRING_MULTIBYTE (Lisp_Object str)$/ -STRING_SET_CHARS c-src/emacs/src/lisp.h /^STRING_SET_CHARS (Lisp_Object string, ptrdiff_t ne/ -STRING_SET_MULTIBYTE c-src/emacs/src/lisp.h /^#define STRING_SET_MULTIBYTE(STR) \\$/ -STRING_SET_UNIBYTE c-src/emacs/src/lisp.h /^#define STRING_SET_UNIBYTE(STR) \\$/ -SUBRP c-src/emacs/src/lisp.h /^SUBRP (Lisp_Object a)$/ -SUB_CHAR_TABLE_OFFSET c-src/emacs/src/lisp.h 1701 -SUB_CHAR_TABLE_P c-src/emacs/src/lisp.h /^SUB_CHAR_TABLE_P (Lisp_Object a)$/ -SXHASH_REDUCE c-src/emacs/src/lisp.h /^SXHASH_REDUCE (EMACS_UINT x)$/ -SYMBOLP c-src/emacs/src/lisp.h /^# define SYMBOLP(x) lisp_h_SYMBOLP (x)$/ -SYMBOL_BLV c-src/emacs/src/lisp.h /^SYMBOL_BLV (struct Lisp_Symbol *sym)$/ -SYMBOL_CONSTANT_P c-src/emacs/src/lisp.h /^# define SYMBOL_CONSTANT_P(sym) lisp_h_SYMBOL_CONS/ -SYMBOL_FORWARDED c-src/emacs/src/lisp.h 651 -SYMBOL_FWD c-src/emacs/src/lisp.h /^SYMBOL_FWD (struct Lisp_Symbol *sym)$/ -SYMBOL_INDEX c-src/emacs/src/lisp.h /^#define SYMBOL_INDEX(sym) i##sym$/ -SYMBOL_INTERNED c-src/emacs/src/lisp.h 642 -SYMBOL_INTERNED_IN_INITIAL_OBARRAY c-src/emacs/src/lisp.h 643 -SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P c-src/emacs/src/lisp.h /^SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P (Lisp_Object / -SYMBOL_INTERNED_P c-src/emacs/src/lisp.h /^SYMBOL_INTERNED_P (Lisp_Object sym)$/ -SYMBOL_LOCALIZED c-src/emacs/src/lisp.h 650 -SYMBOL_NAME c-src/emacs/src/lisp.h /^SYMBOL_NAME (Lisp_Object sym)$/ -SYMBOL_PLAINVAL c-src/emacs/src/lisp.h 648 -SYMBOL_UNINTERNED c-src/emacs/src/lisp.h 641 -SYMBOL_VAL c-src/emacs/src/lisp.h /^# define SYMBOL_VAL(sym) lisp_h_SYMBOL_VAL (sym)$/ -SYMBOL_VARALIAS c-src/emacs/src/lisp.h 649 -SYSCALL c-src/machsyscalls.c /^#define SYSCALL(name, number, type, args, typed_ar/ -Sample tex-src/gzip.texi /^@node Sample, Invoking gzip, Overview, Top$/ -Scheme_functions c-src/etags.c /^Scheme_functions (FILE *inf)$/ -Scheme_help c-src/etags.c 667 -Scheme_suffixes c-src/etags.c 665 -SelectLayer lua-src/allegro.lua /^function SelectLayer (layer)$/ -Self/f ada-src/2ataspri.adb /^ function Self return TCB_Ptr is$/ -Self/f ada-src/2ataspri.ads /^ function Self return TCB_Ptr;$/ -Server pyt-src/server.py /^class Server:$/ -ServerEdit pyt-src/server.py /^class ServerEdit(Frame):$/ -Set_Own_Priority/p ada-src/2ataspri.adb /^ procedure Set_Own_Priority (Prio : System.Any_P/ -Set_Own_Priority/p ada-src/2ataspri.ads /^ procedure Set_Own_Priority (Prio : System.Any_P/ -Set_Priority/p ada-src/2ataspri.adb /^ procedure Set_Priority$/ -Set_Priority/p ada-src/2ataspri.ads /^ procedure Set_Priority (T : TCB_Ptr; Prio : Sys/ -SimpleCalc objcpp-src/SimpleCalc.H /^@interface SimpleCalc:Object$/ -SkipBlanks pas-src/common.pas /^function SkipBlanks; (*($/ -SkipChars pas-src/common.pas /^function SkipChars; (*($/ -SkipSpaces pas-src/common.pas /^procedure SkipSpaces; (* (Str : NameString; var I / -Square.something:Bar lua-src/test.lua /^function Square.something:Bar ()$/ -StartDay cp-src/functions.cpp /^Date StartDay(Date a,int days){\/\/Function to calcu/ -StripPath pas-src/common.pas /^function StripPath; (*($/ -SubString pas-src/common.pas /^function SubString; (*($/ -Subprocess objc-src/Subprocess.h /^@interface Subprocess:Object$/ -Subprocess objc-src/Subprocess.h 41 -System.Task_Primitives/b ada-src/2ataspri.adb /^package body System.Task_Primitives is$/ -System.Task_Primitives/s ada-src/2ataspri.ads /^package System.Task_Primitives is$/ -T cp-src/fail.C 14 -T2 cp-src/fail.C 16 -T3 c.c 163 -TAGS make-src/Makefile /^TAGS: etags.c$/ -TAG_PTR c-src/emacs/src/lisp.h /^#define TAG_PTR(tag, ptr) \\$/ -TAG_SYMOFFSET c-src/emacs/src/lisp.h /^#define TAG_SYMOFFSET(offset) \\$/ -TAS_Cell/t ada-src/2ataspri.ads /^ type TAS_Cell is private;$/ -TAS_Cell/t ada-src/2ataspri.ads /^ type TAS_Cell is$/ -TCB_Ptr/t ada-src/2ataspri.ads /^ type TCB_Ptr is access all Task_Control_Block;$/ -TCLFLAGS make-src/Makefile /^TCLFLAGS=--lang=none --regex='\/proc[ \\t]+\\([^ \\t]+/ -TERMINALP c-src/emacs/src/lisp.h /^TERMINALP (Lisp_Object a)$/ -TEST php-src/ptest.php 1 -TEXSRC make-src/Makefile /^TEXSRC=testenv.tex gzip.texi texinfo.tex nonewline/ -TEX_LESC c-src/etags.c 4986 -TEX_SESC c-src/etags.c 4987 -TEX_clgrp c-src/etags.c 4922 -TEX_decode_env c-src/etags.c /^TEX_decode_env (const char *evarname, const char */ -TEX_defenv c-src/etags.c 4912 -TEX_esc c-src/etags.c 4920 -TEX_mode c-src/etags.c /^TEX_mode (FILE *inf)$/ -TEX_opgrp c-src/etags.c 4921 -TEX_toktab c-src/etags.c 4908 -TOTAL_KEYWORDS c-src/etags.c 2325 -TSL/s ada-src/2ataspri.adb /^ package TSL renames System.Tasking_Soft_Links;$/ -TYPESTOSTAT objc-src/PackInsp.h 37 -TYPE_RANGED_INTEGERP c-src/emacs/src/lisp.h /^#define TYPE_RANGED_INTEGERP(type, x) \\$/ -Tapes tex-src/gzip.texi /^@node Tapes, Problems, Environment, Top$/ -Task_Control_Block/t ada-src/2ataspri.ads /^ type Task_Control_Block is record$/ -Task_Storage_Size/t ada-src/2ataspri.ads /^ type Task_Storage_Size is new Interfaces.C.size/ -Task_Type/b ada-src/etags-test-for.ada /^ task body Task_Type is$/ -Task_Type/b ada-src/waroquiers.ada /^ task body Task_Type is$/ -Task_Type/k ada-src/etags-test-for.ada /^ task type Task_Type is$/ -Task_Type/k ada-src/waroquiers.ada /^ task type Task_Type is$/ -TeX tex-src/texinfo.tex /^\\def\\TeX{\\realbackslash TeX}$/ -TeX tex-src/texinfo.tex /^\\def\\TeX{\\realbackslash TeX}%$/ -TeX tex-src/texinfo.tex /^\\let\\TeX=\\indexdummytex$/ -TeX_commands c-src/etags.c /^TeX_commands (FILE *inf)$/ -TeX_help c-src/etags.c 674 -TeX_suffixes c-src/etags.c 672 -Test_Abort/p ada-src/2ataspri.adb /^ procedure Test_Abort is$/ -Test_Abort/p ada-src/2ataspri.ads /^ procedure Test_Abort;$/ -Test_And_Set/p ada-src/2ataspri.adb /^ procedure Test_And_Set (Cell : in out TAS_Cell;/ -Test_And_Set/p ada-src/2ataspri.ads /^ procedure Test_And_Set (Cell : in out TAS_Cell;/ -Texinfo_help c-src/etags.c 688 -Texinfo_nodes c-src/etags.c /^Texinfo_nodes (FILE *inf)$/ -Texinfo_suffixes c-src/etags.c 686 -Time_to_position c-src/emacs/src/keyboard.c /^Time_to_position (Time encoded_pos)$/ -To_Lower pas-src/common.pas /^function To_Lower;(*(ch:char) : char;*)$/ -To_Start_Addr/f ada-src/2ataspri.adb /^ function To_Start_Addr is new$/ -To_TCB_Ptr/f ada-src/2ataspri.adb /^ function To_TCB_Ptr is new$/ -To_Upper pas-src/common.pas /^function To_Upper;(*(ch:char) : char;*)$/ -To_void_ptr/f ada-src/2ataspri.adb /^ function To_void_ptr is new$/ -Top tex-src/gzip.texi /^@node Top, , , (dir)$/ -Truc.Bidule/b ada-src/etags-test-for.ada /^package body Truc.Bidule is$/ -Truc.Bidule/b ada-src/waroquiers.ada /^package body Truc.Bidule is$/ -Truc.Bidule/s ada-src/etags-test-for.ada /^package Truc.Bidule is$/ -Truc.Bidule/s ada-src/waroquiers.ada /^package Truc.Bidule is$/ -Truc/s ada-src/etags-test-for.ada /^package Truc is$/ -Truc/s ada-src/waroquiers.ada /^package Truc is$/ -Type_Specific_Data/t ada-src/etags-test-for.ada /^ type Type_Specific_Data is record$/ -UCHAR c-src/emacs/src/lisp.h 2424 -UNARY y-src/cccp.c 18 -UNDEFINED c-src/h.h 118 -UNEVALLED c-src/emacs/src/lisp.h 2834 -UNGCPRO c-src/emacs/src/lisp.h 3202 -UNGCPRO c-src/emacs/src/lisp.h 3257 -UNGCPRO c-src/emacs/src/lisp.h 3353 -UNLOCK c-src/emacs/src/gmalloc.c /^#define UNLOCK() \\$/ -UNLOCK c-src/emacs/src/gmalloc.c /^#define UNLOCK()$/ -UNLOCK_ALIGNED_BLOCKS c-src/emacs/src/gmalloc.c /^#define UNLOCK_ALIGNED_BLOCKS() \\$/ -UNLOCK_ALIGNED_BLOCKS c-src/emacs/src/gmalloc.c /^#define UNLOCK_ALIGNED_BLOCKS()$/ -UNSIGNED_CMP c-src/emacs/src/lisp.h /^#define UNSIGNED_CMP(a, op, b) \\$/ -USE_LSB_TAG c-src/emacs/src/lisp.h /^DEFINE_GDB_SYMBOL_BEGIN (bool, USE_LSB_TAG)$/ -USE_LSB_TAG c-src/emacs/src/lisp.h 271 -USE_PTHREAD c-src/emacs/src/gmalloc.c 25 -USE_SAFE_ALLOCA c-src/emacs/src/lisp.h 4560 -USE_STACK_CONS c-src/emacs/src/lisp.h 4689 -USE_STACK_LISP_OBJECTS c-src/emacs/src/lisp.h 4652 -USE_STACK_LISP_OBJECTS c-src/emacs/src/lisp.h 4658 -USE_STACK_LISP_OBJECTS c-src/emacs/src/lisp.h 4659 -USE_STACK_STRING c-src/emacs/src/lisp.h 4691 -U_CHAR y-src/cccp.y 38 -Unlock/p ada-src/2ataspri.adb /^ procedure Unlock (L : in out Lock) is$/ -Unlock/p ada-src/2ataspri.ads /^ procedure Unlock (L : in out Lock);$/ -User pyt-src/server.py /^class User:$/ -UserEdit pyt-src/server.py /^class UserEdit(Frame):$/ -VALBITS c-src/emacs/src/lisp.h 246 -VALMASK c-src/emacs/src/lisp.h /^DEFINE_GDB_SYMBOL_BEGIN (EMACS_INT, VALMASK)$/ -VALMASK c-src/emacs/src/lisp.h 829 -VAL_MAX c-src/emacs/src/lisp.h 263 -VECSIZE c-src/emacs/src/lisp.h /^#define VECSIZE(type) \\$/ -VECTORLIKEP c-src/emacs/src/lisp.h /^# define VECTORLIKEP(x) lisp_h_VECTORLIKEP (x)$/ -VECTORP c-src/emacs/src/lisp.h /^VECTORP (Lisp_Object x)$/ -VERSION c-src/etags.c 789 -VERSION erl-src/gs_dialog.erl /^-define(VERSION, '2001.1101').$/ -VERSION objc-src/PackInsp.m 34 -VHDLFLAGS make-src/Makefile /^VHDLFLAGS=--language=none --regex='\/[ \\t]*\\(ARCHIT/ -Vabbrev_start_location c-src/abbrev.c 63 -Vabbrev_start_location_buffer c-src/abbrev.c 66 -Vabbrev_table_name_list c-src/abbrev.c 43 -ValToNmStr pas-src/common.pas /^function ValToNmStr; (*($/ -Vfundamental_mode_abbrev_table c-src/abbrev.c 52 -Vglobal_abbrev_table c-src/abbrev.c 48 -Vlast_abbrev c-src/abbrev.c 70 -Vlast_abbrev_text c-src/abbrev.c 75 -Vlispy_mouse_stem c-src/emacs/src/keyboard.c 5172 -WAIT_READING_MAX c-src/emacs/src/lisp.h 4281 -WAIT_READING_MAX c-src/emacs/src/lisp.h 4283 -WARNINGS make-src/Makefile /^WARNINGS=-pedantic -Wall -Wpointer-arith -Winline / -WCHAR_TYPE_SIZE y-src/cccp.y 99 -WHITE cp-src/screen.hpp 27 -WINDOWP c-src/emacs/src/lisp.h /^WINDOWP (Lisp_Object a)$/ -WINDOWSNT c-src/etags.c 101 -WINDOWSNT c-src/etags.c 102 -WINDOW_CONFIGURATIONP c-src/emacs/src/lisp.h /^WINDOW_CONFIGURATIONP (Lisp_Object a)$/ -WORKING objc-src/PackInsp.m 368 -WorkingDays cp-src/functions.cpp /^int WorkingDays(Date a, Date b){$/ -Write_Lock/p ada-src/2ataspri.adb /^ procedure Write_Lock (L : in out Lock; Ceiling_/ -Write_Lock/p ada-src/2ataspri.ads /^ procedure Write_Lock (L : in out Lock; Ceiling_/ -X c-src/h.h 100 -XBOOL_VECTOR c-src/emacs/src/lisp.h /^XBOOL_VECTOR (Lisp_Object a)$/ -XBUFFER c-src/emacs/src/lisp.h /^XBUFFER (Lisp_Object a)$/ -XBUFFER_OBJFWD c-src/emacs/src/lisp.h /^XBUFFER_OBJFWD (union Lisp_Fwd *a)$/ -XCAR c-src/emacs/src/lisp.h /^# define XCAR(c) lisp_h_XCAR (c)$/ -XCDR c-src/emacs/src/lisp.h /^# define XCDR(c) lisp_h_XCDR (c)$/ -XCHAR_TABLE c-src/emacs/src/lisp.h /^XCHAR_TABLE (Lisp_Object a)$/ -XCHG_0 c-src/sysdep.h 47 -XCHG_1 c-src/sysdep.h 48 -XCHG_2 c-src/sysdep.h 49 -XCHG_3 c-src/sysdep.h 50 -XCHG_4 c-src/sysdep.h 51 -XCHG_5 c-src/sysdep.h 52 -XCONS c-src/emacs/src/lisp.h /^# define XCONS(a) lisp_h_XCONS (a)$/ -XDEFUN c.c /^XDEFUN ("x-get-selection-internal", Fx_get_selecti/ -XFASTINT c-src/emacs/src/lisp.h /^# define XFASTINT(a) lisp_h_XFASTINT (a)$/ -XFASTINT c-src/emacs/src/lisp.h /^XFASTINT (Lisp_Object a)$/ -XFINALIZER c-src/emacs/src/lisp.h /^XFINALIZER (Lisp_Object a)$/ -XFLOAT c-src/emacs/src/lisp.h /^XFLOAT (Lisp_Object a)$/ -XFLOATINT c-src/emacs/src/lisp.h /^XFLOATINT (Lisp_Object n)$/ -XFLOAT_DATA c-src/emacs/src/lisp.h /^XFLOAT_DATA (Lisp_Object f)$/ -XFWDTYPE c-src/emacs/src/lisp.h /^XFWDTYPE (union Lisp_Fwd *a)$/ -XHASH c-src/emacs/src/lisp.h /^# define XHASH(a) lisp_h_XHASH (a)$/ -XHASH_TABLE c-src/emacs/src/lisp.h /^XHASH_TABLE (Lisp_Object a)$/ -XIL c-src/emacs/src/lisp.h /^# define XIL(i) lisp_h_XIL (i)$/ -XINT c-src/emacs/src/lisp.h /^# define XINT(a) lisp_h_XINT (a)$/ -XINT c-src/emacs/src/lisp.h /^XINT (Lisp_Object a)$/ -XINTPTR c-src/emacs/src/lisp.h /^XINTPTR (Lisp_Object a)$/ -XLI c-src/emacs/src/lisp.h /^# define XLI(o) lisp_h_XLI (o)$/ -XLI_BUILTIN_LISPSYM c-src/emacs/src/lisp.h /^#define XLI_BUILTIN_LISPSYM(iname) TAG_SYMOFFSET (/ -XMARKER c-src/emacs/src/lisp.h /^XMARKER (Lisp_Object a)$/ -XMISC c-src/emacs/src/lisp.h /^XMISC (Lisp_Object a)$/ -XMISCANY c-src/emacs/src/lisp.h /^XMISCANY (Lisp_Object a)$/ -XMISCTYPE c-src/emacs/src/lisp.h /^XMISCTYPE (Lisp_Object a)$/ -XOVERLAY c-src/emacs/src/lisp.h /^XOVERLAY (Lisp_Object a)$/ -XPNTR c-src/emacs/src/lisp.h /^# define XPNTR(a) lisp_h_XPNTR (a)$/ -XPROCESS c-src/emacs/src/lisp.h /^XPROCESS (Lisp_Object a)$/ -XSAVE_FUNCPOINTER c-src/emacs/src/lisp.h /^XSAVE_FUNCPOINTER (Lisp_Object obj, int n)$/ -XSAVE_INTEGER c-src/emacs/src/lisp.h /^XSAVE_INTEGER (Lisp_Object obj, int n)$/ -XSAVE_OBJECT c-src/emacs/src/lisp.h /^XSAVE_OBJECT (Lisp_Object obj, int n)$/ -XSAVE_POINTER c-src/emacs/src/lisp.h /^XSAVE_POINTER (Lisp_Object obj, int n)$/ -XSAVE_VALUE c-src/emacs/src/lisp.h /^XSAVE_VALUE (Lisp_Object a)$/ -XSETBOOL_VECTOR c-src/emacs/src/lisp.h /^#define XSETBOOL_VECTOR(a, b) (XSETPSEUDOVECTOR (a/ -XSETBUFFER c-src/emacs/src/lisp.h /^#define XSETBUFFER(a, b) (XSETPSEUDOVECTOR (a, b, / -XSETCDR c-src/emacs/src/lisp.h /^XSETCDR (Lisp_Object c, Lisp_Object n)$/ -XSETCHAR_TABLE c-src/emacs/src/lisp.h /^#define XSETCHAR_TABLE(a, b) (XSETPSEUDOVECTOR (a,/ -XSETCOMPILED c-src/emacs/src/lisp.h /^#define XSETCOMPILED(a, b) (XSETPSEUDOVECTOR (a, b/ -XSETCONS c-src/emacs/src/lisp.h /^#define XSETCONS(a, b) ((a) = make_lisp_ptr (b, Li/ -XSETFASTINT c-src/emacs/src/lisp.h /^#define XSETFASTINT(a, b) ((a) = make_natnum (b))$/ -XSETFLOAT c-src/emacs/src/lisp.h /^#define XSETFLOAT(a, b) ((a) = make_lisp_ptr (b, L/ -XSETINT c-src/emacs/src/lisp.h /^#define XSETINT(a, b) ((a) = make_number (b))$/ -XSETMISC c-src/emacs/src/lisp.h /^#define XSETMISC(a, b) ((a) = make_lisp_ptr (b, Li/ -XSETPROCESS c-src/emacs/src/lisp.h /^#define XSETPROCESS(a, b) (XSETPSEUDOVECTOR (a, b,/ -XSETPSEUDOVECTOR c-src/emacs/src/lisp.h /^#define XSETPSEUDOVECTOR(a, b, code) \\$/ -XSETPVECTYPE c-src/emacs/src/lisp.h /^#define XSETPVECTYPE(v, code) \\$/ -XSETPVECTYPESIZE c-src/emacs/src/lisp.h /^#define XSETPVECTYPESIZE(v, code, lispsize, restsi/ -XSETSTRING c-src/emacs/src/lisp.h /^#define XSETSTRING(a, b) ((a) = make_lisp_ptr (b, / -XSETSUBR c-src/emacs/src/lisp.h /^#define XSETSUBR(a, b) (XSETPSEUDOVECTOR (a, b, PV/ -XSETSUB_CHAR_TABLE c-src/emacs/src/lisp.h /^#define XSETSUB_CHAR_TABLE(a, b) (XSETPSEUDOVECTOR/ -XSETSYMBOL c-src/emacs/src/lisp.h /^#define XSETSYMBOL(a, b) ((a) = make_lisp_symbol (/ -XSETTERMINAL c-src/emacs/src/lisp.h /^#define XSETTERMINAL(a, b) (XSETPSEUDOVECTOR (a, b/ -XSETTYPED_PSEUDOVECTOR c-src/emacs/src/lisp.h /^#define XSETTYPED_PSEUDOVECTOR(a, b, size, code) / -XSETVECTOR c-src/emacs/src/lisp.h /^#define XSETVECTOR(a, b) ((a) = make_lisp_ptr (b, / -XSETWINDOW c-src/emacs/src/lisp.h /^#define XSETWINDOW(a, b) (XSETPSEUDOVECTOR (a, b, / -XSETWINDOW_CONFIGURATION c-src/emacs/src/lisp.h /^#define XSETWINDOW_CONFIGURATION(a, b) \\$/ -XSET_HASH_TABLE c-src/emacs/src/lisp.h /^#define XSET_HASH_TABLE(VAR, PTR) \\$/ -XSTRING c-src/emacs/src/lisp.h /^XSTRING (Lisp_Object a)$/ -XSUBR c-src/emacs/src/lisp.h /^XSUBR (Lisp_Object a)$/ -XSUB_CHAR_TABLE c-src/emacs/src/lisp.h /^XSUB_CHAR_TABLE (Lisp_Object a)$/ -XSYMBOL c-src/emacs/src/lisp.h /^# define XSYMBOL(a) lisp_h_XSYMBOL (a)$/ -XSYMBOL c-src/emacs/src/lisp.h /^XSYMBOL (Lisp_Object a)$/ -XTERMINAL c-src/emacs/src/lisp.h /^XTERMINAL (Lisp_Object a)$/ -XTYPE c-src/emacs/src/lisp.h /^# define XTYPE(a) lisp_h_XTYPE (a)$/ -XTYPE c-src/emacs/src/lisp.h /^XTYPE (Lisp_Object a)$/ -XUNTAG c-src/emacs/src/lisp.h /^# define XUNTAG(a, type) lisp_h_XUNTAG (a, type)$/ -XUNTAG c-src/emacs/src/lisp.h /^XUNTAG (Lisp_Object a, int type)$/ -XWINDOW c-src/emacs/src/lisp.h /^XWINDOW (Lisp_Object a)$/ -XX cp-src/x.cc 1 -Xyzzy ruby-src/test1.ru 13 -Y c-src/h.h 100 -YACC c-src/etags.c 2199 -YELLOW cp-src/screen.hpp 26 -YSRC make-src/Makefile /^YSRC=parse.y parse.c atest.y cccp.c cccp.y$/ -YYABORT /usr/share/bison/bison.simple 154 -YYACCEPT /usr/share/bison/bison.simple 153 -YYBACKUP /usr/share/bison/bison.simple /^#define YYBACKUP(Token, Value) \\$/ -YYBISON y-src/cccp.c 4 -YYBISON y-src/parse.c 4 -YYDPRINTF /usr/share/bison/bison.simple /^# define YYDPRINTF(Args) \\$/ -YYDPRINTF /usr/share/bison/bison.simple /^# define YYDPRINTF(Args)$/ -YYEMPTY /usr/share/bison/bison.simple 151 -YYEOF /usr/share/bison/bison.simple 152 -YYERRCODE /usr/share/bison/bison.simple 179 -YYERROR /usr/share/bison/bison.simple 155 -YYFAIL /usr/share/bison/bison.simple 159 -YYFPRINTF /usr/share/bison/bison.simple 226 -YYINITDEPTH /usr/share/bison/bison.simple 245 -YYLEX /usr/share/bison/bison.simple 201 -YYLEX /usr/share/bison/bison.simple 203 -YYLEX /usr/share/bison/bison.simple 207 -YYLEX /usr/share/bison/bison.simple 209 -YYLEX /usr/share/bison/bison.simple 213 -YYLLOC_DEFAULT /usr/share/bison/bison.simple /^# define YYLLOC_DEFAULT(Current, Rhs, N) \\$/ -YYMAXDEPTH /usr/share/bison/bison.simple 256 -YYMAXDEPTH /usr/share/bison/bison.simple 260 -YYPARSE_PARAM_ARG /usr/share/bison/bison.simple 351 -YYPARSE_PARAM_ARG /usr/share/bison/bison.simple 354 -YYPARSE_PARAM_ARG /usr/share/bison/bison.simple 358 -YYPARSE_PARAM_DECL /usr/share/bison/bison.simple 352 -YYPARSE_PARAM_DECL /usr/share/bison/bison.simple 355 -YYPARSE_PARAM_DECL /usr/share/bison/bison.simple 359 -YYPOPSTACK /usr/share/bison/bison.simple 445 -YYPOPSTACK /usr/share/bison/bison.simple 447 -YYRECOVERING /usr/share/bison/bison.simple /^#define YYRECOVERING() (!!yyerrstatus)$/ -YYSIZE_T /usr/share/bison/bison.simple 129 -YYSIZE_T /usr/share/bison/bison.simple 132 -YYSIZE_T /usr/share/bison/bison.simple 137 -YYSIZE_T /usr/share/bison/bison.simple 141 -YYSIZE_T /usr/share/bison/bison.simple 146 -YYSIZE_T /usr/share/bison/bison.simple 52 -YYSIZE_T /usr/share/bison/bison.simple 57 -YYSIZE_T /usr/share/bison/bison.simple 72 -YYSIZE_T /usr/share/bison/bison.simple 76 -YYSTACK_ALLOC /usr/share/bison/bison.simple 51 -YYSTACK_ALLOC /usr/share/bison/bison.simple 56 -YYSTACK_ALLOC /usr/share/bison/bison.simple 60 -YYSTACK_ALLOC /usr/share/bison/bison.simple 79 -YYSTACK_BYTES /usr/share/bison/bison.simple /^# define YYSTACK_BYTES(N) \\$/ -YYSTACK_FREE /usr/share/bison/bison.simple /^# define YYSTACK_FREE(Ptr) do { \/* empty *\/; } wh/ -YYSTACK_FREE /usr/share/bison/bison.simple 80 -YYSTACK_GAP_MAX /usr/share/bison/bison.simple 94 -YYSTACK_RELOCATE /usr/share/bison/bison.simple /^# define YYSTACK_RELOCATE(Type, Stack) \\$/ -YYSTACK_RELOCATE /usr/share/bison/bison.simple 548 -YYSTD /usr/share/bison/bison.simple /^# define YYSTD(x) std::x$/ -YYSTD /usr/share/bison/bison.simple /^# define YYSTD(x) x$/ -YYSTYPE y-src/parse.y 72 -YYSTYPE y-src/parse.y 73 -YYTERROR /usr/share/bison/bison.simple 178 -YY_DECL_NON_LSP_VARIABLES /usr/share/bison/bison.simple 374 -YY_DECL_VARIABLES /usr/share/bison/bison.simple 385 -YY_DECL_VARIABLES /usr/share/bison/bison.simple 391 -Yacc_entries c-src/etags.c /^Yacc_entries (FILE *inf)$/ -Yacc_help c-src/etags.c 693 -Yacc_suffixes c-src/etags.c 691 -Yappendixletterandtype tex-src/texinfo.tex /^\\def\\Yappendixletterandtype{%$/ -Ynothing tex-src/texinfo.tex /^\\def\\Ynothing{}$/ -Ypagenumber tex-src/texinfo.tex /^\\def\\Ypagenumber{\\folio}$/ -Ysectionnumberandtype tex-src/texinfo.tex /^\\def\\Ysectionnumberandtype{%$/ -Ytitle tex-src/texinfo.tex /^\\def\\Ytitle{\\thischapter}$/ -Z c-src/h.h 100 -[ tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ -[] ruby-src/test.rb /^ def [](y)$/ -[]= ruby-src/test.rb /^ def []=(y, val)$/ -] tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ -^ tex-src/texinfo.tex /^\\def^{{\\tt \\hat}}$/ -^ tex-src/texinfo.tex /^\\let^=\\normalcaret$/ -_ tex-src/texinfo.tex /^\\def\\_{\\lvvmode \\kern.06em \\vbox{\\hrule width.3em / -_ tex-src/texinfo.tex /^\\def\\_{{\\realbackslash _}}%$/ -_ tex-src/texinfo.tex /^\\def_{\\ifusingtt\\normalunderscore\\_}$/ -_ tex-src/texinfo.tex /^\\let_=\\normalunderscore$/ -_GETOPT_H c-src/getopt.h 19 -_GNU_SOURCE c-src/etags.c 94 -_REGEX_H c-src/emacs/src/regex.h 21 -_RE_SYNTAX_POSIX_COMMON c-src/emacs/src/regex.h 221 -_Restrict_ c-src/emacs/src/regex.h 540 -_Restrict_ c-src/emacs/src/regex.h 542 -_Restrict_ c-src/emacs/src/regex.h 544 -_Restrict_arr_ c-src/emacs/src/regex.h 555 -_Restrict_arr_ c-src/emacs/src/regex.h 557 -_UCHAR_T c-src/emacs/src/lisp.h 2423 -__COLORS cp-src/screen.hpp 9 -__default_morecore c-src/emacs/src/gmalloc.c /^__default_morecore (ptrdiff_t increment)$/ -__init__ pyt-src/server.py /^ def __init__(self):$/ -__init__ pyt-src/server.py /^ def __init__(self, Master, text, textvar, widt/ -__init__ pyt-src/server.py /^ def __init__(self, host, sitelist, master=None/ -__init__ pyt-src/server.py /^ def __init__(self, master=None):$/ -__init__ pyt-src/server.py /^ def __init__(self, newlegend, list, editor, ma/ -__init__ pyt-src/server.py /^ def __init__(self, user, userlist, master=None/ -__ip c.c 159 -__libc_atexit c-src/exit.c 30 -__libc_atexit c-src/exit.strange_suffix 30 -__malloc_extra_blocks c-src/emacs/src/gmalloc.c 382 -__malloc_initialize c-src/emacs/src/gmalloc.c /^__malloc_initialize (void)$/ -__malloc_initialized c-src/emacs/src/gmalloc.c 380 -__repr__ pyt-src/server.py /^ def __repr__(self):$/ -__sbrk c-src/emacs/src/gmalloc.c 1516 -__str__ pyt-src/server.py /^ def __str__(self):$/ -__up c.c 160 -_aligned_blocks c-src/emacs/src/gmalloc.c 1006 -_aligned_blocks_mutex c-src/emacs/src/gmalloc.c 519 -_bar? ruby-src/test1.ru /^ def self._bar?(abc)$/ -_bytes_free c-src/emacs/src/gmalloc.c 377 -_bytes_used c-src/emacs/src/gmalloc.c 375 -_chunks_free c-src/emacs/src/gmalloc.c 376 -_chunks_used c-src/emacs/src/gmalloc.c 374 -_fraghead c-src/emacs/src/gmalloc.c 371 -_free c-src/emacs/src/gmalloc.c /^_free (void *ptr)$/ -_free_internal c-src/emacs/src/gmalloc.c /^_free_internal (void *ptr)$/ -_free_internal_nolock c-src/emacs/src/gmalloc.c /^_free_internal_nolock (void *ptr)$/ -_heapbase c-src/emacs/src/gmalloc.c 356 -_heapindex c-src/emacs/src/gmalloc.c 365 -_heapinfo c-src/emacs/src/gmalloc.c 359 -_heaplimit c-src/emacs/src/gmalloc.c 368 -_malloc c-src/emacs/src/gmalloc.c /^_malloc (size_t size)$/ -_malloc_internal c-src/emacs/src/gmalloc.c /^_malloc_internal (size_t size)$/ -_malloc_internal_nolock c-src/emacs/src/gmalloc.c /^_malloc_internal_nolock (size_t size)$/ -_malloc_mutex c-src/emacs/src/gmalloc.c 518 -_malloc_thread_enabled_p c-src/emacs/src/gmalloc.c 520 -_realloc c-src/emacs/src/gmalloc.c /^_realloc (void *ptr, size_t size)$/ -_realloc_internal c-src/emacs/src/gmalloc.c /^_realloc_internal (void *ptr, size_t size)$/ -_realloc_internal_nolock c-src/emacs/src/gmalloc.c /^_realloc_internal_nolock (void *ptr, size_t size)$/ -` ruby-src/test.rb /^ def `(command)$/ -` tex-src/texinfo.tex /^\\def\\`{{`}}$/ -a c-src/h.h 103 -a c-src/h.h 40 -a c.c /^a ()$/ -a c.c /^a()$/ -a c.c 152 -a c.c 180 -a cp-src/c.C 132 -a ruby-src/test1.ru /^ def a()$/ -a-forth-constant! forth-src/test-forth.fth /^99 constant a-forth-constant!$/ -a-forth-value? forth-src/test-forth.fth /^55 value a-forth-value?$/ -a-forth-word forth-src/test-forth.fth /^: a-forth-word ( a b c -- )$/ -a-forth-word forth-src/test-forth.fth /^: a-forth-word ( a b c -- a*b+c ) + * ;$/ +($_,$flag,$opt,$f,$r,@temp perl-src/yagrip.pl 8 +$0x80 c-src/sysdep.h 32 +${CHECKOBJS} make-src/Makefile /^${CHECKOBJS}: CFLAGS=-g3 -DNULLFREECHECK=0$/ +$domain php-src/lce_functions.php 175 +$filename php-src/lce_functions.php 174 +$ignore_ws php-src/lce_functions.php 171 +$memassign php-src/ptest.php 9 +$memassign_space php-src/ptest.php 10 +$member php-src/ptest.php 8 +$msgid_lc php-src/lce_functions.php 113 +$msgid php-src/lce_functions.php 107 +$msgid php-src/lce_functions.php 165 +$msgstr_lc php-src/lce_functions.php 114 +$msgstr php-src/lce_functions.php 108 +$msgstr php-src/lce_functions.php 166 +$po_entries php-src/lce_functions.php 172 +$poe_num php-src/lce_functions.php 173 +$por_a php-src/lce_functions.php 500 +$prefix php-src/lce_functions.php 72 +($prog,$_,@list perl-src/yagrip.pl 39 +$state php-src/lce_functions.php 170 +($string,$flag,@string,@temp,@last perl-src/yagrip.pl 40 +$sys_comment_lc php-src/lce_functions.php 116 +$sys_comment php-src/lce_functions.php 110 +$sys_comment php-src/lce_functions.php 168 +$SYS_##syscall_na c-src/sysdep.h 31 +$test php-src/ptest.php 12 +$unk_comment_lc php-src/lce_functions.php 117 +$unk_comment php-src/lce_functions.php 111 +$unk_comment php-src/lce_functions.php 169 +$user_comment_lc php-src/lce_functions.php 115 +$user_comment php-src/lce_functions.php 109 +$user_comment php-src/lce_functions.php 167 +2const forth-src/test-forth.fth /^3 4 2constant 2const$/ +2val forth-src/test-forth.fth /^2const 2value 2val$/ +2var forth-src/test-forth.fth /^2variable 2var$/ a0 c-src/emacs/src/lisp.h /^ Lisp_Object (*a0) (void);$/ a1 c-src/emacs/src/lisp.h /^ Lisp_Object (*a1) (Lisp_Object);$/ a2 c-src/emacs/src/lisp.h /^ Lisp_Object (*a2) (Lisp_Object, Lisp_Object)/ @@ -1780,38 +44,44 @@ a5 c-src/emacs/src/lisp.h /^ Lisp_Object (*a5) (Lisp_Object, Lisp_Object,/ a6 c-src/emacs/src/lisp.h /^ Lisp_Object (*a6) (Lisp_Object, Lisp_Object,/ a7 c-src/emacs/src/lisp.h /^ Lisp_Object (*a7) (Lisp_Object, Lisp_Object,/ a8 c-src/emacs/src/lisp.h /^ Lisp_Object (*a8) (Lisp_Object, Lisp_Object,/ -aMANY c-src/emacs/src/lisp.h /^ Lisp_Object (*aMANY) (ptrdiff_t, Lisp_Object/ -aUNEVALLED c-src/emacs/src/lisp.h /^ Lisp_Object (*aUNEVALLED) (Lisp_Object args)/ -aa c.c 269 -aa c.c 279 +aaaaaa c-src/h.h 111 aaa c.c 249 aaa c.c 269 -aaaaaa c-src/h.h 111 -abbrev-expansion c-src/abbrev.c /^DEFUN ("abbrev-expansion", Fabbrev_expansion, Sabb/ -abbrev-symbol c-src/abbrev.c /^DEFUN ("abbrev-symbol", Fabbrev_symbol, Sabbrev_sy/ +aa c.c 269 +aa c.c 279 abbrev_all_caps c-src/abbrev.c 58 +abbrev-expansion c-src/abbrev.c /^DEFUN ("abbrev-expansion", Fabbrev_expansion, Sabb/ abbrevs_changed c-src/abbrev.c 56 +abbrev-symbol c-src/abbrev.c /^DEFUN ("abbrev-symbol", Fabbrev_symbol, Sabbrev_sy/ abc c-src/h.h 33 abc c-src/h.h 37 +ABC ruby-src/test1.ru 11 +Abort_Handler_Pointer/t ada-src/2ataspri.ads /^ type Abort_Handler_Pointer is access procedure / abort-recursive-edit c-src/emacs/src/keyboard.c /^DEFUN ("abort-recursive-edit", Fabort_recursive_ed/ +Abort_Task/p ada-src/2ataspri.adb /^ procedure Abort_Task (T : TCB_Ptr) is$/ +Abort_Task/p ada-src/2ataspri.ads /^ procedure Abort_Task (T : TCB_Ptr);$/ +Abort_Wrapper/p ada-src/2ataspri.adb /^ procedure Abort_Wrapper$/ aboveenvbreak tex-src/texinfo.tex /^\\def\\aboveenvbreak{{\\advance\\aboveenvskipamount by/ abs/f ada-src/etags-test-for.ada /^ function "abs" (Right : Complex) return Real'/ absolute_dirname c-src/etags.c /^absolute_dirname (char *file, char *dir)$/ absolute_filename c-src/etags.c /^absolute_filename (char *file, char *dir)$/ abt cp-src/c.C 55 -acc_pred_info merc-src/accumulator.m /^:- pred acc_pred_info(list(mer_type)::in, list(pro/ -acc_proc_info merc-src/accumulator.m /^:- pred acc_proc_info(list(prog_var)::in, prog_var/ -acc_unification merc-src/accumulator.m /^:- pred acc_unification(pair(prog_var)::in, hlds_g/ -acc_var_subst_init merc-src/accumulator.m /^:- pred acc_var_subst_init(list(prog_var)::in,$/ +a c.c 152 +A c.c 162 +a c.c 180 +a c.c /^a ()$/ +a c.c /^a()$/ accent_key_syms c-src/emacs/src/keyboard.c 4625 access_keymap_keyremap c-src/emacs/src/keyboard.c /^access_keymap_keyremap (Lisp_Object map, Lisp_Obje/ +acc_pred_info merc-src/accumulator.m /^:- pred acc_pred_info(list(mer_type)::in, list(pro/ +acc_proc_info merc-src/accumulator.m /^:- pred acc_proc_info(list(prog_var)::in, prog_var/ accu_assoc merc-src/accumulator.m /^:- pred accu_assoc(module_info::in, vartypes::in, / accu_assoc merc-src/accumulator.m /^:- type accu_assoc$/ accu_base merc-src/accumulator.m /^:- type accu_base$/ accu_before merc-src/accumulator.m /^:- pred accu_before(module_info::in, vartypes::in,/ accu_case merc-src/accumulator.m /^:- type accu_case$/ -accu_construct merc-src/accumulator.m /^:- pred accu_construct(module_info::in, vartypes::/ accu_construct_assoc merc-src/accumulator.m /^:- pred accu_construct_assoc(module_info::in, vart/ +accu_construct merc-src/accumulator.m /^:- pred accu_construct(module_info::in, vartypes::/ accu_create_goal merc-src/accumulator.m /^:- pred accu_create_goal(accu_goal_id::in, list(pr/ accu_divide_base_case merc-src/accumulator.m /^:- pred accu_divide_base_case(module_info::in, var/ accu_goal_id merc-src/accumulator.m /^:- type accu_goal_id$/ @@ -1821,83 +91,120 @@ accu_has_heuristic merc-src/accumulator.m /^:- pred accu_has_heuristic(module_na accu_heuristic merc-src/accumulator.m /^:- pred accu_heuristic(module_name::in, string::in/ accu_is_associative merc-src/accumulator.m /^:- pred accu_is_associative(module_info::in, pred_/ accu_is_update merc-src/accumulator.m /^:- pred accu_is_update(module_info::in, pred_id::i/ +acc_unification merc-src/accumulator.m /^:- pred acc_unification(pair(prog_var)::in, hlds_g/ accu_process_assoc_set merc-src/accumulator.m /^:- pred accu_process_assoc_set(module_info::in, ac/ accu_process_update_set merc-src/accumulator.m /^:- pred accu_process_update_set(module_info::in, a/ accu_related merc-src/accumulator.m /^:- pred accu_related(module_info::in, vartypes::in/ accu_rename merc-src/accumulator.m /^:- func accu_rename(list(accu_goal_id), accu_subst/ -accu_sets merc-src/accumulator.m /^:- type accu_sets$/ accu_sets_init merc-src/accumulator.m /^:- pred accu_sets_init(accu_sets::out) is det.$/ -accu_stage1 merc-src/accumulator.m /^:- pred accu_stage1(module_info::in, vartypes::in,/ +accu_sets merc-src/accumulator.m /^:- type accu_sets$/ accu_stage1_2 merc-src/accumulator.m /^:- pred accu_stage1_2(module_info::in, vartypes::i/ +accu_stage1 merc-src/accumulator.m /^:- pred accu_stage1(module_info::in, vartypes::in,/ accu_stage2 merc-src/accumulator.m /^:- pred accu_stage2(module_info::in, proc_info::in/ accu_stage3 merc-src/accumulator.m /^:- pred accu_stage3(accu_goal_id::in, list(prog_va/ accu_standardize merc-src/accumulator.m /^:- pred accu_standardize(hlds_goal::in, hlds_goal:/ accu_store merc-src/accumulator.m /^:- pred accu_store(accu_case::in, hlds_goal::in,$/ accu_subst merc-src/accumulator.m /^:- type accu_subst == map(prog_var, prog_var).$/ -accu_substs merc-src/accumulator.m /^:- type accu_substs$/ accu_substs_init merc-src/accumulator.m /^:- pred accu_substs_init(list(prog_var)::in, prog_/ +accu_substs merc-src/accumulator.m /^:- type accu_substs$/ accu_top_level merc-src/accumulator.m /^:- pred accu_top_level(top_level::in, hlds_goal::i/ accu_transform_proc merc-src/accumulator.m /^:- pred accu_transform_proc(pred_proc_id::in, pred/ accu_update merc-src/accumulator.m /^:- pred accu_update(module_info::in, vartypes::in,/ accu_warning merc-src/accumulator.m /^:- type accu_warning$/ -act prol-src/natded.prolog /^act(OutForm,OutSyn,Ws):-$/ +acc_var_subst_init merc-src/accumulator.m /^:- pred acc_var_subst_init(list(prog_var)::in,$/ +/Acircumflex ps-src/rfc1245.ps /^\/Acircumflex \/Ecircumflex \/Aacute \/Edieresis \/Egra/ +A cp-src/c.C 117 +a cp-src/c.C 132 +A cp-src/c.C 39 +A cp-src/c.C 56 +A cp-src/c.C 57 +A cp-src/c.C 73 +~A cp-src/c.C /^A::~A() {}$/ +A cp-src/c.C /^void A::A() {}$/ +A cp-src/fail.C 23 +A cp-src/fail.C 7 +a c-src/h.h 103 +a c-src/h.h 40 action prol-src/natded.prolog /^action(KeyVals):-$/ -active_maps c-src/emacs/src/keyboard.c /^active_maps (Lisp_Object first_event)$/ activedoublequote tex-src/texinfo.tex /^\\def\\activedoublequote{{\\tt \\char '042}}$/ +active_maps c-src/emacs/src/keyboard.c /^active_maps (Lisp_Object first_event)$/ activeparens tex-src/texinfo.tex /^\\def\\activeparens{%$/ actout prol-src/natded.prolog /^actout('Text',Trees):-$/ -addArchs objc-src/PackInsp.m /^-(void)addArchs:(const char *)string$/ -addPOReader php-src/lce_functions.php /^ function addPOReader($d_name, &$por)$/ +act prol-src/natded.prolog /^act(OutForm,OutSyn,Ws):-$/ +Ada_funcs c-src/etags.c /^Ada_funcs (FILE *inf)$/ +Ada_getit c-src/etags.c /^Ada_getit (FILE *inf, const char *name_qualifier)$/ +Ada_help c-src/etags.c 475 +ADASRC make-src/Makefile /^ADASRC=etags-test-for.ada 2ataspri.adb 2ataspri.ad/ +Ada_suffixes c-src/etags.c 473 add_active prol-src/natded.prolog /^add_active([],Cat,Goal):-$/ +addArchs objc-src/PackInsp.m /^-(void)addArchs:(const char *)string$/ add_command_key c-src/emacs/src/keyboard.c /^add_command_key (Lisp_Object key)$/ add_edge prol-src/natded.prolog /^add_edge(Left,Right,Cat):-$/ add_node c-src/etags.c /^add_node (node *np, node **cur_node_p)$/ -add_regex c-src/etags.c /^add_regex (char *regexp_pattern, language *lang)$/ -add_user_signal c-src/emacs/src/keyboard.c /^add_user_signal (int sig, const char *name)$/ addnoise html-src/algrthms.html /^Adding Noise to the$/ +AddNullToNmStr pas-src/common.pas /^function AddNullToNmStr; (*($/ +addPOReader php-src/lce_functions.php /^ function addPOReader($d_name, &$por)$/ +add_regex c-src/etags.c /^add_regex (char *regexp_pattern, language *lang)$/ +ADDRESS c-src/emacs/src/gmalloc.c /^#define ADDRESS(B) ((void *) (((B) - 1) * BLOCKSIZ/ +Address_To_Call_State/f ada-src/2ataspri.adb /^ function Address_To_Call_State is new$/ +Address_To_TCB_Ptr/f ada-src/2ataspri.ads /^ function Address_To_TCB_Ptr is new$/ address y-src/cccp.y 113 +add_user_signal c-src/emacs/src/keyboard.c /^add_user_signal (int sig, const char *name)$/ +#a-defer-word forth-src/test-forth.fth /^defer #a-defer-word$/ adjust_point_for_property c-src/emacs/src/keyboard.c /^adjust_point_for_property (ptrdiff_t last_pt, bool/ +Advanced usage tex-src/gzip.texi /^@node Advanced usage, Environment, Invoking gzip, / +a-forth-constant! forth-src/test-forth.fth /^99 constant a-forth-constant!$/ +(a-forth-constant forth-src/test-forth.fth /^constant (a-forth-constant$/ +:a-forth-dictionary-entry forth-src/test-forth.fth /^create :a-forth-dictionary-entry$/ +a-forth-value? forth-src/test-forth.fth /^55 value a-forth-value?$/ +a-forth-word forth-src/test-forth.fth /^: a-forth-word ( a b c -- )$/ +a-forth-word forth-src/test-forth.fth /^: a-forth-word ( a b c -- a*b+c ) + * ;$/ afourpaper tex-src/texinfo.tex /^\\def\\afourpaper{$/ afterenvbreak tex-src/texinfo.tex /^\\def\\afterenvbreak{\\endgraf \\ifdim\\lastskip<\\above/ agent cp-src/clheir.hpp 75 algorithms html-src/algrthms.html /^Description$/ alias c-src/emacs/src/lisp.h 688 -align c-src/emacs/src/gmalloc.c /^align (size_t size)$/ alignas c-src/emacs/src/lisp.h /^# define alignas(alignment) \/* empty *\/$/ -aligned c-src/emacs/src/gmalloc.c 199 -aligned_alloc c-src/emacs/src/gmalloc.c /^aligned_alloc (size_t alignment, size_t size)$/ +align c-src/emacs/src/gmalloc.c /^align (size_t size)$/ aligned_alloc c-src/emacs/src/gmalloc.c 1722 aligned_alloc c-src/emacs/src/gmalloc.c 71 +aligned_alloc c-src/emacs/src/gmalloc.c /^aligned_alloc (size_t alignment, size_t size)$/ +_aligned_blocks c-src/emacs/src/gmalloc.c 1006 +_aligned_blocks_mutex c-src/emacs/src/gmalloc.c 519 +Aligned_Cons c-src/emacs/src/lisp.h 4670 +aligned c-src/emacs/src/gmalloc.c 199 +Aligned_String c-src/emacs/src/lisp.h 4676 alignlist c-src/emacs/src/gmalloc.c 196 +ALIGNOF_STRUCT_LISP_VECTOR c-src/emacs/src/lisp.h 1378 alive cp-src/conway.hpp 7 all_kboards c-src/emacs/src/keyboard.c 86 -allocate_kboard c-src/emacs/src/keyboard.c /^allocate_kboard (Lisp_Object type)$/ +ALLOCATED_BEFORE_DUMPING c-src/emacs/src/gmalloc.c /^#define ALLOCATED_BEFORE_DUMPING(P) \\$/ allocated c-src/emacs/src/regex.h 344 +allocate_kboard c-src/emacs/src/keyboard.c /^allocate_kboard (Lisp_Object type)$/ +ALLOCATE_PSEUDOVECTOR c-src/emacs/src/lisp.h /^#define ALLOCATE_PSEUDOVECTOR(type, field, tag) / +ALLOCATE_ZEROED_PSEUDOVECTOR c-src/emacs/src/lisp.h /^#define ALLOCATE_ZEROED_PSEUDOVECTOR(type, field, / alphaenumerate tex-src/texinfo.tex /^\\def\\alphaenumerate{\\enumerate{a}}$/ +aMANY c-src/emacs/src/lisp.h /^ Lisp_Object (*aMANY) (ptrdiff_t, Lisp_Object/ ampnr tex-src/texinfo.tex /^\\def\\opnr{{\\sf\\char`\\(}} \\def\\clnr{{\\sf\\char`\\)}} / amprm tex-src/texinfo.tex /^\\gdef\\amprm#1 {{\\rm\\}\\let(=\\oprm \\let)=\\clrm\\ }/ +analyze_regex c-src/etags.c /^analyze_regex (char *regex_arg)$/ +andkeyvalseq prol-src/natded.prolog /^andkeyvalseq(KeyVals) --> ['&'], keyvalseq(KeyVals/ +AND y-src/cccp.c 11 an_extern_linkage c-src/h.h 44 an_extern_linkage c-src/h.h 56 an_extern_linkage_ptr c-src/h.h 43 -analyze_regex c-src/etags.c /^analyze_regex (char *regex_arg)$/ -andkeyvalseq prol-src/natded.prolog /^andkeyvalseq(KeyVals) --> ['&'], keyvalseq(KeyVals/ -animals c-src/h.h 81 animals cp-src/c.C 126 animals cp-src/c.C 130 +animals c-src/h.h 81 +(another-forth-word) forth-src/test-forth.fth /^: (another-forth-word) ( -- )$/ +ANSIC c-src/h.h 84 +ANSIC c-src/h.h 85 any_kboard_state c-src/emacs/src/keyboard.c /^any_kboard_state ()$/ appDidInit objcpp-src/SimpleCalc.M /^- appDidInit:sender$/ -append prol-src/natded.prolog /^append([],Xs,Xs).$/ -appendToDisplay objcpp-src/SimpleCalc.M /^- appendToDisplay:(const char *)theDigit$/ -append_list prol-src/natded.prolog /^append_list([],[]).$/ -append_string pas-src/common.pas /^procedure append_string;(*($/ -append_tool_bar_item c-src/emacs/src/keyboard.c /^append_tool_bar_item (void)$/ -appendix perl-src/htlmify-cystic 24 -appendix tex-src/texinfo.tex /^\\let\\appendix=\\relax$/ -appendix tex-src/texinfo.tex /^\\outer\\def\\appendix{\\parsearg\\appendixzzz}$/ -appendix_name perl-src/htlmify-cystic 13 -appendix_toc perl-src/htlmify-cystic 16 appendixletter tex-src/texinfo.tex /^\\def\\appendixletter{\\char\\the\\appendixno}$/ +appendix_name perl-src/htlmify-cystic 13 appendixnoderef tex-src/texinfo.tex /^\\def\\appendixnoderef{\\ifx\\lastnode\\relax\\else$/ +appendix perl-src/htlmify-cystic 24 appendixsec tex-src/texinfo.tex /^\\let\\appendixsec=\\relax$/ appendixsec tex-src/texinfo.tex /^\\outer\\def\\appendixsec{\\parsearg\\appendixsectionzz/ appendixsection tex-src/texinfo.tex /^\\let\\appendixsection=\\relax$/ @@ -1912,15 +219,25 @@ appendixsubsubsec tex-src/texinfo.tex /^\\let\\appendixsubsubsec=\\relax$/ appendixsubsubsec tex-src/texinfo.tex /^\\outer\\def\\appendixsubsubsec{\\parsearg\\appendixsub/ appendixsubsubsection tex-src/texinfo.tex /^\\let\\appendixsubsubsection=\\relax$/ appendixsubsubseczzz tex-src/texinfo.tex /^\\def\\appendixsubsubseczzz #1{\\seccheck{appendixsub/ +appendix tex-src/texinfo.tex /^\\let\\appendix=\\relax$/ +appendix tex-src/texinfo.tex /^\\outer\\def\\appendix{\\parsearg\\appendixzzz}$/ +appendix_toc perl-src/htlmify-cystic 16 appendixzzz tex-src/texinfo.tex /^\\def\\appendixzzz #1{\\seccheck{appendix}%$/ +append_list prol-src/natded.prolog /^append_list([],[]).$/ +append prol-src/natded.prolog /^append([],Xs,Xs).$/ +append_string pas-src/common.pas /^procedure append_string;(*($/ +AppendTextString pas-src/common.pas /^function AppendTextString;(*($/ +appendToDisplay objcpp-src/SimpleCalc.M /^- appendToDisplay:(const char *)theDigit$/ +append_tool_bar_item c-src/emacs/src/keyboard.c /^append_tool_bar_item (void)$/ apply_modifiers c-src/emacs/src/keyboard.c /^apply_modifiers (int modifiers, Lisp_Object base)$/ apply_modifiers_uncached c-src/emacs/src/keyboard.c /^apply_modifiers_uncached (int modifiers, char *bas/ +/A ps-src/rfc1245.ps /^\/A { $/ aref_addr c-src/emacs/src/lisp.h /^aref_addr (Lisp_Object array, ptrdiff_t idx)$/ +AREF c-src/emacs/src/lisp.h /^AREF (Lisp_Object array, ptrdiff_t idx)$/ arg c-src/emacs/src/lisp.h 2961 arg c-src/emacs/src/lisp.h 2966 arg c-src/emacs/src/lisp.h 2971 arg c-src/h.h 13 -arg_type c-src/etags.c 250 arglist y-src/cccp.y 41 argno y-src/cccp.y 45 args c-src/emacs/src/lisp.h 2986 @@ -1928,88 +245,165 @@ args c-src/h.h 30 argsindent tex-src/texinfo.tex /^\\dimen1=\\hsize \\advance \\dimen1 by -\\defargsindent/ argsindent tex-src/texinfo.tex /^\\newskip\\defargsindent \\defargsindent=50pt$/ argsindent tex-src/texinfo.tex /^\\parshape 2 0in \\dimen0 \\defargsindent \\dimen1 / +ARGS make-src/Makefile /^ARGS=- < srclist$/ +arg_type c-src/etags.c 250 argument c-src/etags.c 253 argvals prol-src/natded.prolog /^argvals([]) --> [].$/ +Arith_Comparison c-src/emacs/src/lisp.h 3497 +ARITH_EQUAL c-src/emacs/src/lisp.h 3498 +ARITH_GRTR c-src/emacs/src/lisp.h 3501 +ARITH_GRTR_OR_EQUAL c-src/emacs/src/lisp.h 3503 +ARITH_LESS c-src/emacs/src/lisp.h 3500 +ARITH_LESS_OR_EQUAL c-src/emacs/src/lisp.h 3502 +ARITH_NOTEQUAL c-src/emacs/src/lisp.h 3499 array c.c 190 +ARRAYELTS c-src/emacs/src/lisp.h /^#define ARRAYELTS(arr) (sizeof (arr) \/ sizeof (arr/ +ARRAY_MARK_FLAG c-src/emacs/src/lisp.h 768 +ARRAYP c-src/emacs/src/lisp.h /^ARRAYP (Lisp_Object x)$/ +A ruby-src/test1.ru /^class A$/ +a ruby-src/test1.ru /^ def a()$/ +A ruby-src/test1.ru /^module A$/ +ASCII_CHAR_P c-src/emacs/src/lisp.h /^#define ASCII_CHAR_P(c) UNSIGNED_CMP (c, <, 0x80)$/ ascii c-src/emacs/src/lisp.h 1598 +ASET c-src/emacs/src/lisp.h /^ASET (Lisp_Object array, ptrdiff_t idx, Lisp_Objec/ asis tex-src/texinfo.tex /^\\def\\asis#1{#1}$/ +ASIZE c-src/emacs/src/lisp.h /^ASIZE (Lisp_Object array)$/ +Asm_help c-src/etags.c 504 +Asm_labels c-src/etags.c /^Asm_labels (FILE *inf)$/ +Asm_suffixes c-src/etags.c 493 asort cp-src/functions.cpp /^void asort(int *a, int num){$/ +ASRC make-src/Makefile /^ASRC=empty.zz empty.zz.gz$/ assemby-code-word forth-src/test-forth.fth /^code assemby-code-word ( dunno what it does )$/ -assert c-src/etags.c /^# define assert(x) ((void) 0)$/ assert c-src/etags.c 135 +assert c-src/etags.c /^# define assert(x) ((void) 0)$/ assign_neighbor cp-src/clheir.hpp /^ void assign_neighbor(int direction, location */ -assoc_list merc-src/accumulator.m /^:- import_module assoc_list.$/ associativity_assertion merc-src/accumulator.m /^:- pred associativity_assertion(module_info::in, l/ +assoc_list merc-src/accumulator.m /^:- import_module assoc_list.$/ +AST_Array::AST_Array cp-src/c.C /^AST_Array::AST_Array(UTL_ScopedName *n, unsigned l/ +AST_ConcreteType::AST_ConcreteType cp-src/c.C /^AST_ConcreteType::AST_ConcreteType(AST_Decl::NodeT/ +AST_Root cp-src/c.C 92 +AT cp-src/c.C 52 at_end c-src/etags.c 249 at_filename c-src/etags.c 247 +/atilde ps-src/rfc1245.ps /^\/atilde \/aring \/ccedilla \/eacute \/egrave \/ecircumf/ at_language c-src/etags.c 245 at_least_one_member prol-src/natded.prolog /^at_least_one_member(X,[X|_]):-!.$/ -at_regexp c-src/etags.c 246 -at_stdin c-src/etags.c 248 atom prol-src/natded.prolog /^atom(X) --> [X], {atomic(X)}.$/ atomval prol-src/natded.prolog /^atomval(X) --> atom(X).$/ +at_regexp c-src/etags.c 246 +at_stdin c-src/etags.c 248 +AU cp-src/c.C 53 +aultparindent\hang tex-src/texinfo.tex /^\\footstrut\\parindent=\\defaultparindent\\hang\\textin/ aultparindent tex-src/texinfo.tex /^\\newdimen\\defaultparindent \\defaultparindent = 15p/ aultparindent tex-src/texinfo.tex /^\\parindent = \\defaultparindent$/ -aultparindent\hang tex-src/texinfo.tex /^\\footstrut\\parindent=\\defaultparindent\\hang\\textin/ -author tex-src/texinfo.tex /^ \\def\\author{\\parsearg\\authorzzz}%$/ +aUNEVALLED c-src/emacs/src/lisp.h /^ Lisp_Object (*aUNEVALLED) (Lisp_Object args)/ authorfont tex-src/texinfo.tex /^ \\def\\authorfont{\\authorrm \\normalbaselineskip =/ authorrm tex-src/texinfo.tex /^\\let\\authorrm = \\secrm$/ +author tex-src/texinfo.tex /^ \\def\\author{\\parsearg\\authorzzz}%$/ authorzzz tex-src/texinfo.tex /^ \\def\\authorzzz##1{\\ifseenauthor\\else\\vskip 0pt / +AUTO_CONS c-src/emacs/src/lisp.h /^#define AUTO_CONS(name, a, b) Lisp_Object name = A/ +AUTO_CONS_EXPR c-src/emacs/src/lisp.h /^#define AUTO_CONS_EXPR(a, b) \\$/ auto_help c-src/etags.c 699 -b c-src/h.h 103 -b c-src/h.h 104 -b c-src/h.h 41 -b c.c /^b ()$/ -b c.c 180 -b c.c 259 -b c.c 260 -b c.c 262 -b cp-src/c.C 132 -b ruby-src/test1.ru /^ def b()$/ -b tex-src/texinfo.tex /^\\def\\b##1{\\realbackslash b {##1}}$/ -b tex-src/texinfo.tex /^\\def\\b##1{\\realbackslash b {##1}}%$/ -b tex-src/texinfo.tex /^\\def\\b#1{{\\bf #1}}$/ -b tex-src/texinfo.tex /^\\let\\b=\\indexdummyfont$/ -b tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ -backslash tex-src/texinfo.tex /^\\def\\rawbackslashxx{\\indexbackslash}% \\indexbacksl/ +AUTO_LIST1 c-src/emacs/src/lisp.h /^#define AUTO_LIST1(name, a) \\$/ +AUTO_LIST2 c-src/emacs/src/lisp.h /^#define AUTO_LIST2(name, a, b) \\$/ +AUTO_LIST3 c-src/emacs/src/lisp.h /^#define AUTO_LIST3(name, a, b, c) \\$/ +AUTO_LIST4 c-src/emacs/src/lisp.h /^#define AUTO_LIST4(name, a, b, c, d) \\$/ +AUTOLOADP c-src/emacs/src/lisp.h /^AUTOLOADP (Lisp_Object x)$/ +AUTO_STRING c-src/emacs/src/lisp.h /^#define AUTO_STRING(name, str) \\$/ +AVAIL_ALLOCA c-src/emacs/src/lisp.h /^#define AVAIL_ALLOCA(size) (sa_avail -= (size), al/ backslash tex-src/texinfo.tex /^\\def\\rawbackslashxx{\\indexbackslash}%$/ +backslash tex-src/texinfo.tex /^\\def\\rawbackslashxx{\\indexbackslash}% \\indexbacksl/ balancecolumns tex-src/texinfo.tex /^\\def\\balancecolumns{%$/ -bar c-src/c.c /^void bar() {while(0) {}}$/ -bar c-src/h.h 19 +bar1 ruby-src/test1.ru /^ attr_reader(:foo1, :bar1, # comment$/ bar c.c 143 bar cp-src/x.cc /^XX::bar()$/ -bar1 ruby-src/test1.ru /^ attr_reader(:foo1, :bar1, # comment$/ +bar c-src/c.c /^void bar() {while(0) {}}$/ +bar c-src/h.h 19 +Bar lua-src/test.lua /^function Square.something:Bar ()$/ +Bar perl-src/kai-test.pl /^package Bar;$/ +Barrier_Function_Pointer/t ada-src/etags-test-for.ada /^ type Barrier_Function_Pointer is access$/ bar= ruby-src/test1.ru /^ attr_writer :bar,$/ -bas_syn prol-src/natded.prolog /^bas_syn(n(_)).$/ -base c-src/emacs/src/lisp.h 2188 -base cp-src/Range.h /^ double base (void) const { return rng_base; }$/ -base cp-src/c.C /^double base (void) const { return rng_base; }$/ +_bar? ruby-src/test1.ru /^ def self._bar?(abc)$/ base_case_ids merc-src/accumulator.m /^:- func base_case_ids(accu_goal_store) = list(accu/ base_case_ids_set merc-src/accumulator.m /^:- func base_case_ids_set(accu_goal_store) = set(a/ +base cp-src/c.C /^double base (void) const { return rng_base; }$/ +base cp-src/Range.h /^ double base (void) const { return rng_base; }$/ +base c-src/emacs/src/lisp.h 2188 +bas_syn prol-src/natded.prolog /^bas_syn(n(_)).$/ baz= ruby-src/test1.ru /^ :baz,$/ -bb c.c 275 -bbb c.c 251 bbbbbb c-src/h.h 113 +bbb c.c 251 +bb c.c 275 +b c.c 180 +b c.c 259 +b c.c 260 +b c.c 262 +b c.c /^b ()$/ +B cp-src/c.C 122 +b cp-src/c.C 132 +B cp-src/c.C 54 +B cp-src/c.C 56 +B cp-src/c.C 74 +~B cp-src/c.C /^ ~B() {};$/ +B cp-src/c.C /^void B::B() {}$/ +B cp-src/fail.C 24 +B cp-src/fail.C 8 +b c-src/h.h 103 +b c-src/h.h 104 +b c-src/h.h 41 been_warned c-src/etags.c 222 before_command_echo_length c-src/emacs/src/keyboard.c 130 before_command_key_count c-src/emacs/src/keyboard.c 129 -begin tex-src/texinfo.tex /^\\outer\\def\\begin{\\parsearg\\beginxxx}$/ +/BEGINBITMAP2BITc ps-src/rfc1245.ps /^\/BEGINBITMAP2BITc { $/ +/BEGINBITMAP2BIT ps-src/rfc1245.ps /^\/BEGINBITMAP2BIT { $/ +/BEGINBITMAPBWc ps-src/rfc1245.ps /^\/BEGINBITMAPBWc { $/ +/BEGINBITMAPBW ps-src/rfc1245.ps /^\/BEGINBITMAPBW { $/ +/BEGINBITMAPGRAYc ps-src/rfc1245.ps /^\/BEGINBITMAPGRAYc { $/ +/BEGINBITMAPGRAY ps-src/rfc1245.ps /^\/BEGINBITMAPGRAY { $/ begindoublecolumns tex-src/texinfo.tex /^\\def\\begindoublecolumns{\\begingroup$/ +/BEGINPRINTCODE ps-src/rfc1245.ps /^\/BEGINPRINTCODE { $/ +begin tex-src/texinfo.tex /^\\outer\\def\\begin{\\parsearg\\beginxxx}$/ beginxxx tex-src/texinfo.tex /^\\def\\beginxxx #1{%$/ begtoken c-src/etags.c /^#define begtoken(c) (_btk[CHAR (c)]) \/* c can star/ behaviour_info erl-src/gs_dialog.erl /^behaviour_info(callbacks) ->$/ -bf tex-src/texinfo.tex /^ \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/ -bf tex-src/texinfo.tex /^\\def\\bf{\\realbackslash bf }$/ +BE_Node cp-src/c.C 77 +BE_Node cp-src/c.C /^void BE_Node::BE_Node() {}$/ +/BF ps-src/rfc1245.ps /^\/BF { $/ bf tex-src/texinfo.tex /^\\def\\bf{\\realbackslash bf }%$/ +bf tex-src/texinfo.tex /^\\def\\bf{\\realbackslash bf }$/ bf tex-src/texinfo.tex /^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/ bf tex-src/texinfo.tex /^\\font\\defbf=cmbx10 scaled \\magstep1 %was 1314$/ -bind pyt-src/server.py /^ def bind(self, key, action):$/ +bf tex-src/texinfo.tex /^ \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/ +Bidule/b ada-src/etags-test-for.ada /^ protected body Bidule is$/ +Bidule/b ada-src/waroquiers.ada /^ protected body Bidule is$/ +Bidule/t ada-src/etags-test-for.ada /^ protected Bidule is$/ +Bidule/t ada-src/waroquiers.ada /^ protected Bidule is$/ bind_polling_period c-src/emacs/src/keyboard.c /^bind_polling_period (int n)$/ +bind pyt-src/server.py /^ def bind(self, key, action):$/ +/BITMAPCOLORc ps-src/rfc1245.ps /^\/BITMAPCOLORc { $/ +/BITMAPCOLOR ps-src/rfc1245.ps /^\/BITMAPCOLOR { $/ +/BITMAPGRAYc ps-src/rfc1245.ps /^\/BITMAPGRAYc { $/ +/BITMAPGRAY ps-src/rfc1245.ps /^\/BITMAPGRAY { $/ +BITS_PER_BITS_WORD c-src/emacs/src/lisp.h 125 +BITS_PER_BITS_WORD c-src/emacs/src/lisp.h 129 +BITS_PER_CHAR c-src/emacs/src/lisp.h 136 +BITS_PER_EMACS_INT c-src/emacs/src/lisp.h 139 +BITS_PER_LONG c-src/emacs/src/lisp.h 138 +BITS_PER_SHORT c-src/emacs/src/lisp.h 137 bits_word c-src/emacs/src/lisp.h 123 bits_word c-src/emacs/src/lisp.h 127 +BITS_WORD_MAX c-src/emacs/src/lisp.h 124 +BITS_WORD_MAX c-src/emacs/src/lisp.h 128 bla c.c /^int bla ()$/ +BLACK cp-src/screen.hpp 12 blah tex-src/testenv.tex /^\\section{blah}$/ bletch el-src/TAGTEST.EL /^(foo::defmumble bletch beuarghh)$/ +BLOCK c-src/emacs/src/gmalloc.c /^#define BLOCK(A) (((char *) (A) - _heapbase) \/ BLO/ +BLOCKIFY c-src/emacs/src/gmalloc.c /^#define BLOCKIFY(SIZE) (((SIZE) + BLOCKSIZE - 1) \// +BLOCKLOG c-src/emacs/src/gmalloc.c 125 +BLOCKSIZE c-src/emacs/src/gmalloc.c 126 +/bl ps-src/rfc1245.ps /^\/bl { $/ +BLUE cp-src/screen.hpp 13 blv c-src/emacs/src/lisp.h 689 blv_found c-src/emacs/src/lisp.h /^blv_found (struct Lisp_Buffer_Local_Value *blv)$/ bodyindent tex-src/texinfo.tex /^\\advance\\dimen2 by -\\defbodyindent$/ @@ -2018,141 +412,261 @@ bodyindent tex-src/texinfo.tex /^\\advance\\leftskip by -\\defbodyindent$/ bodyindent tex-src/texinfo.tex /^\\advance\\leftskip by \\defbodyindent \\advance \\righ/ bodyindent tex-src/texinfo.tex /^\\exdentamount=\\defbodyindent$/ bodyindent tex-src/texinfo.tex /^\\newskip\\defbodyindent \\defbodyindent=.4in$/ +Body_Required/f ada-src/etags-test-for.ada /^ function Body_Required$/ boldbrax tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ +Boo::Boo cp-src/c.C /^Boo::Boo(Boo) :$/ +Boo cp-src/c.C 129 +Boo cp-src/c.C /^ Boo(int _i, int _a, int _b) : i(_i), a(_a), b(/ bool c.c 222 -bool merc-src/accumulator.m /^:- import_module bool.$/ bool_header_size c-src/emacs/src/lisp.h 1472 +bool merc-src/accumulator.m /^:- import_module bool.$/ +boolvar c-src/emacs/src/lisp.h 2287 bool_vector_bitref c-src/emacs/src/lisp.h /^bool_vector_bitref (Lisp_Object a, EMACS_INT i)$/ +BOOL_VECTOR_BITS_PER_CHAR c-src/emacs/src/lisp.h 114 +BOOL_VECTOR_BITS_PER_CHAR c-src/emacs/src/lisp.h 115 bool_vector_bytes c-src/emacs/src/lisp.h /^bool_vector_bytes (EMACS_INT size)$/ bool_vector_data c-src/emacs/src/lisp.h /^bool_vector_data (Lisp_Object a)$/ +BOOL_VECTOR_P c-src/emacs/src/lisp.h /^BOOL_VECTOR_P (Lisp_Object a)$/ bool_vector_ref c-src/emacs/src/lisp.h /^bool_vector_ref (Lisp_Object a, EMACS_INT i)$/ bool_vector_set c-src/emacs/src/lisp.h /^bool_vector_set (Lisp_Object a, EMACS_INT i, bool / bool_vector_size c-src/emacs/src/lisp.h /^bool_vector_size (Lisp_Object a)$/ bool_vector_uchar_data c-src/emacs/src/lisp.h /^bool_vector_uchar_data (Lisp_Object a)$/ bool_vector_words c-src/emacs/src/lisp.h /^bool_vector_words (EMACS_INT size)$/ -boolvar c-src/emacs/src/lisp.h 2287 -br tex-src/texinfo.tex /^\\let\\br = \\par$/ +/B ps-src/rfc1245.ps /^\/B { $/ bracelev c-src/etags.c 2520 +/braceright ps-src/rfc1245.ps /^\/braceright \/asciitilde \/.notdef \/Adieresis \/Aring/ +/bracketright ps-src/rfc1245.ps /^\/bracketright \/asciicircum \/underscore \/grave \/a \// +/breve ps-src/rfc1245.ps /^\/breve \/dotaccent \/ring \/cedilla \/hungarumlaut \/og/ +BROWN cp-src/screen.hpp 18 +br tex-src/texinfo.tex /^\\let\\br = \\par$/ +B ruby-src/test1.ru /^ class B$/ +b ruby-src/test1.ru /^ def b()$/ bsp_DevId c-src/h.h 25 bt c-src/emacs/src/lisp.h 2988 +b tex-src/texinfo.tex /^\\def\\b#1{{\\bf #1}}$/ +b tex-src/texinfo.tex /^\\def\\b##1{\\realbackslash b {##1}}%$/ +b tex-src/texinfo.tex /^\\def\\b##1{\\realbackslash b {##1}}$/ +b tex-src/texinfo.tex /^\\let\\b=\\indexdummyfont$/ +b tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ btowc c-src/emacs/src/regex.h /^# define btowc(c) c$/ buffer c-src/emacs/src/lisp.h 2000 buffer c-src/emacs/src/regex.h 341 buffer c-src/etags.c 238 buffer c-src/h.h 119 +BUFFER_OBJFWDP c-src/emacs/src/lisp.h /^BUFFER_OBJFWDP (union Lisp_Fwd *a)$/ +BUFFERP c-src/emacs/src/lisp.h /^BUFFERP (Lisp_Object a)$/ +BUFFERSIZE objc-src/Subprocess.h 43 +buildact prol-src/natded.prolog /^buildact([SynIn],Right,RightPlus1):-$/ build prol-src/natded.prolog /^build([],Left,Left).$/ build_pure_c_string c-src/emacs/src/lisp.h /^build_pure_c_string (const char *str)$/ build_string c-src/emacs/src/lisp.h /^build_string (const char *str)$/ -buildact prol-src/natded.prolog /^buildact([SynIn],Right,RightPlus1):-$/ builtin_lisp_symbol c-src/emacs/src/lisp.h /^builtin_lisp_symbol (int index)$/ bullet tex-src/texinfo.tex /^\\def\\bullet{$\\ptexbullet$}$/ bullet tex-src/texinfo.tex /^\\let\\bullet=\\ptexbullet$/ burst c-src/h.h 28 busy c-src/emacs/src/gmalloc.c 158 +ButtonBar pyt-src/server.py /^def ButtonBar(frame, legend, ref, alternatives, co/ button_down_location c-src/emacs/src/keyboard.c 5210 button_down_time c-src/emacs/src/keyboard.c 5218 bye tex-src/texinfo.tex /^\\outer\\def\\bye{\\pagealignmacro\\tracingstats=1\\ptex/ -byte_stack c-src/emacs/src/lisp.h 3049 bytecode_dest c-src/emacs/src/lisp.h 3037 bytecode_top c-src/emacs/src/lisp.h 3036 +BYTE_MARK_STACK c-src/emacs/src/lisp.h 3181 bytepos c-src/emacs/src/lisp.h 2016 bytes_free c-src/emacs/src/gmalloc.c 314 +_bytes_free c-src/emacs/src/gmalloc.c 377 +byte_stack c-src/emacs/src/lisp.h 3049 bytes_total c-src/emacs/src/gmalloc.c 310 bytes_used c-src/emacs/src/gmalloc.c 312 -c c-src/h.h /^#define c() d$/ -c c-src/h.h 106 -c c.c 180 -c tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ -c tex-src/texinfo.tex /^\\let\\c=\\comment$/ -c_ext c-src/etags.c 2271 +_bytes_used c-src/emacs/src/gmalloc.c 375 caccacacca c.c /^caccacacca (a,b,c,d,e,f,g)$/ cacheLRUEntry_s c.c 172 cacheLRUEntry_t c.c 177 calculate_goal_info merc-src/accumulator.m /^:- pred calculate_goal_info(hlds_goal_expr::in, hl/ -calloc c-src/emacs/src/gmalloc.c /^calloc (size_t nmemb, size_t size)$/ +CALLMANY c-src/emacs/src/lisp.h /^#define CALLMANY(f, array) (f) (ARRAYELTS (array),/ +CALLN c-src/emacs/src/lisp.h /^#define CALLN(f, ...) CALLMANY (f, ((Lisp_Object [/ calloc c-src/emacs/src/gmalloc.c 1721 calloc c-src/emacs/src/gmalloc.c 66 calloc c-src/emacs/src/gmalloc.c 70 +calloc c-src/emacs/src/gmalloc.c /^calloc (size_t nmemb, size_t size)$/ can_be_null c-src/emacs/src/regex.h 370 cancel_echoing c-src/emacs/src/keyboard.c /^cancel_echoing (void)$/ canonicalize_filename c-src/etags.c /^canonicalize_filename (register char *fn)$/ capsenumerate tex-src/texinfo.tex /^\\def\\capsenumerate{\\enumerate{A}}$/ +CAR c-src/emacs/src/lisp.h /^CAR (Lisp_Object c)$/ +CAR_SAFE c-src/emacs/src/lisp.h /^CAR_SAFE (Lisp_Object c)$/ cartbot tex-src/texinfo.tex /^\\def\\cartbot{\\hbox to \\cartouter{\\hskip\\lskip$/ cartouche tex-src/texinfo.tex /^\\long\\def\\cartouche{%$/ carttop tex-src/texinfo.tex /^\\def\\carttop{\\hbox to \\cartouter{\\hskip\\lskip$/ case_Lisp_Int c-src/emacs/src/lisp.h 438 -cat c-src/h.h 81 +cat_atoms prol-src/natded.prolog /^cat_atoms(A1,A2,A3):-$/ +CATCHER c-src/emacs/src/lisp.h 3021 cat cp-src/c.C 126 cat cp-src/c.C 130 +cat c-src/h.h 81 cat prol-src/natded.prolog /^cat(A, Alpha@Beta, Ass3, Qs3, tree(fe,A:Alpha@Beta/ -cat_atoms prol-src/natded.prolog /^cat_atoms(A1,A2,A3):-$/ +C_AUTO c-src/etags.c 2198 cbl tex-src/texinfo.tex /^\\def\\cbl{{\\circle\\char'012\\hskip -6pt}}$/ cbr tex-src/texinfo.tex /^\\def\\cbr{{\\hskip 6pt\\circle\\char'011}}$/ +c c.c 180 cccccccccc c-src/h.h 115 +C cp-src/fail.C 25 +C cp-src/fail.C 9 +C cp-src/fail.C /^ C(int i) {x = i;}$/ +c c-src/h.h 106 +c c-src/h.h /^#define c() d$/ +%cdiff make-src/Makefile /^%cdiff: CTAGS% CTAGS ${infiles}$/ cdr c-src/emacs/src/lisp.h 1159 +CDR c-src/emacs/src/lisp.h /^CDR (Lisp_Object c)$/ +CDR_SAFE c-src/emacs/src/lisp.h /^CDR_SAFE (Lisp_Object c)$/ cell y-src/parse.y 279 center tex-src/texinfo.tex /^\\def\\center{\\parsearg\\centerzzz}$/ centerzzz tex-src/texinfo.tex /^\\def\\centerzzz #1{{\\advance\\hsize by -\\leftskip$/ +C_entries c-src/etags.c /^C_entries (int c_ext, FILE *inf)$/ +C_EXT c-src/etags.c 2193 +c_ext c-src/etags.c 2271 +CFLAGS make-src/Makefile /^CFLAGS=${WARNINGS} -ansi -g3 # -pg -O$/ +/cfs ps-src/rfc1245.ps /^\/cfs { $/ cgrep html-src/software.html /^cgrep$/ chain c-src/emacs/src/lisp.h 1162 chain c-src/emacs/src/lisp.h 2206 chain c-src/emacs/src/lisp.h 2396 -chain_subst merc-src/accumulator.m /^:- func chain_subst(accu_subst, accu_subst) = accu/ chain_subst_2 merc-src/accumulator.m /^:- pred chain_subst_2(list(A)::in, map(A, B)::in, / +chain_subst merc-src/accumulator.m /^:- func chain_subst(accu_subst, accu_subst) = accu/ +ChangeFileType pas-src/common.pas /^function ChangeFileType; (*(FileName : NameString;/ chapbf tex-src/texinfo.tex /^\\let\\chapbf=\\chaprm$/ chapbreak tex-src/texinfo.tex /^\\def\\chapbreak{\\dobreak \\chapheadingskip {-4000}}$/ -chapentry tex-src/texinfo.tex /^ \\let\\chapentry = \\shortchapentry$/ -chapentry tex-src/texinfo.tex /^\\def\\chapentry#1#2#3{\\dochapentry{#2\\labelspace#1}/ chapentryfonts tex-src/texinfo.tex /^\\def\\chapentryfonts{\\secfonts \\rm}$/ +chapentry tex-src/texinfo.tex /^\\def\\chapentry#1#2#3{\\dochapentry{#2\\labelspace#1}/ +chapentry tex-src/texinfo.tex /^ \\let\\chapentry = \\shortchapentry$/ chapfonts tex-src/texinfo.tex /^\\def\\chapfonts{%$/ +CHAPFopen tex-src/texinfo.tex /^\\def\\CHAPFopen{$/ +CHAPFplain tex-src/texinfo.tex /^\\def\\CHAPFplain{$/ chapheading tex-src/texinfo.tex /^\\def\\chapheading{\\parsearg\\chapheadingzzz}$/ chapheadingzzz tex-src/texinfo.tex /^\\def\\chapheadingzzz #1{\\chapbreak %$/ chapmacro tex-src/texinfo.tex /^\\global\\let\\chapmacro=\\chfopen$/ chapmacro tex-src/texinfo.tex /^\\global\\let\\chapmacro=\\chfplain$/ chapoddpage tex-src/texinfo.tex /^\\def\\chapoddpage{\\chappager \\ifodd\\pageno \\else \\h/ chappager tex-src/texinfo.tex /^\\def\\chappager{\\par\\vfill\\supereject}$/ +CHAPPAGodd tex-src/texinfo.tex /^\\def\\CHAPPAGodd{$/ +CHAPPAGoff tex-src/texinfo.tex /^\\def\\CHAPPAGoff{$/ +CHAPPAGon tex-src/texinfo.tex /^\\def\\CHAPPAGon{$/ +chapternofonts tex-src/texinfo.tex /^\\def\\chapternofonts{%$/ chapter tex-src/texinfo.tex /^\\let\\chapter=\\relax$/ chapter tex-src/texinfo.tex /^\\outer\\def\\chapter{\\parsearg\\chapterzzz}$/ -chapternofonts tex-src/texinfo.tex /^\\def\\chapternofonts{%$/ chapterzzz tex-src/texinfo.tex /^\\def\\chapterzzz #1{\\seccheck{chapter}%$/ -char tex-src/texinfo.tex /^\\def\\char{\\realbackslash char}$/ -char tex-src/texinfo.tex /^\\def\\char{\\realbackslash char}%$/ +CHARACTERBITS c-src/emacs/src/lisp.h 2457 +CHAR_ALT c-src/emacs/src/lisp.h 2445 +CHAR_BIT c-src/emacs/src/lisp.h 2957 +CHAR_BIT c-src/emacs/src/lisp.h 2959 +CHAR_BIT c-src/emacs/src/lisp.h 2964 +CHAR_BIT c-src/emacs/src/lisp.h 2969 +CHAR_BIT c-src/emacs/src/lisp.h 2974 +CHAR_BIT c-src/emacs/src/lisp.h 2978 +CHAR_BIT c-src/emacs/src/lisp.h 2983 char_bits c-src/emacs/src/lisp.h 2443 -char_table_specials c-src/emacs/src/lisp.h 1692 +CHAR_CLASS_MAX_LENGTH c-src/emacs/src/regex.h 593 +CHAR_CLASS_MAX_LENGTH c-src/emacs/src/regex.h 597 +CHAR_CLASS_MAX_LENGTH c-src/emacs/src/regex.h 605 +CHAR c-src/etags.c /^#define CHAR(x) ((unsigned int)(x) & (CHARS - 1))/ +CHAR_CTL c-src/emacs/src/lisp.h 2449 +CHAR_HYPER c-src/emacs/src/lisp.h 2447 +CHAR_META c-src/emacs/src/lisp.h 2450 +CHAR_MODIFIER_MASK c-src/emacs/src/lisp.h 2452 charpos c-src/emacs/src/lisp.h 2011 +CHARS c-src/etags.c 157 charset_unibyte c-src/emacs/src/regex.h 410 +CHAR_SHIFT c-src/emacs/src/lisp.h 2448 +CHAR_SUPER c-src/emacs/src/lisp.h 2446 +CHAR_TABLE_EXTRA_SLOTS c-src/emacs/src/lisp.h /^CHAR_TABLE_EXTRA_SLOTS (struct Lisp_Char_Table *ct/ +CHAR_TABLE_P c-src/emacs/src/lisp.h /^CHAR_TABLE_P (Lisp_Object a)$/ +CHAR_TABLE_REF_ASCII c-src/emacs/src/lisp.h /^CHAR_TABLE_REF_ASCII (Lisp_Object ct, ptrdiff_t id/ +CHAR_TABLE_REF c-src/emacs/src/lisp.h /^CHAR_TABLE_REF (Lisp_Object ct, int idx)$/ +CHAR_TABLE_SET c-src/emacs/src/lisp.h /^CHAR_TABLE_SET (Lisp_Object ct, int idx, Lisp_Obje/ +char_table_specials c-src/emacs/src/lisp.h 1692 +CHAR_TABLE_STANDARD_SLOTS c-src/emacs/src/lisp.h 1697 +CHARTAB_SIZE_BITS_0 c-src/emacs/src/lisp.h 1567 +CHARTAB_SIZE_BITS_1 c-src/emacs/src/lisp.h 1568 +CHARTAB_SIZE_BITS_2 c-src/emacs/src/lisp.h 1569 +CHARTAB_SIZE_BITS_3 c-src/emacs/src/lisp.h 1570 +CHARTAB_SIZE_BITS c-src/emacs/src/lisp.h 1565 +char tex-src/texinfo.tex /^\\def\\char{\\realbackslash char}%$/ +char tex-src/texinfo.tex /^\\def\\char{\\realbackslash char}$/ chartonmstr pas-src/common.pas /^function chartonmstr; (*($/ -checkQuotation php-src/lce_functions.php /^ function checkQuotation($str)$/ +CHAR_TYPE_SIZE y-src/cccp.y 87 +CHAR y-src/cccp.c 7 +CHECK_ARRAY c-src/emacs/src/lisp.h /^CHECK_ARRAY (Lisp_Object x, Lisp_Object predicate)/ +CHECK_BOOL_VECTOR c-src/emacs/src/lisp.h /^CHECK_BOOL_VECTOR (Lisp_Object x)$/ +CHECK_BUFFER c-src/emacs/src/lisp.h /^CHECK_BUFFER (Lisp_Object x)$/ +CHECK_CONS c-src/emacs/src/lisp.h /^CHECK_CONS (Lisp_Object x)$/ check_cons_list c-src/emacs/src/lisp.h /^# define check_cons_list() lisp_h_check_cons_list/ checker make-src/Makefile /^checker:$/ +CHECKFLAGS make-src/Makefile /^CHECKFLAGS=-DDEBUG -Wno-unused-function$/ checkhdr c-src/emacs/src/gmalloc.c /^checkhdr (const struct hdr *hdr)$/ checkiso html-src/software.html /^checkiso$/ +CHECK_LISP_OBJECT_TYPE c-src/emacs/src/lisp.h 571 +CHECK_LISP_OBJECT_TYPE c-src/emacs/src/lisp.h 572 +CHECK_LISP_OBJECT_TYPE c-src/emacs/src/lisp.h 579 +CHECK_LIST_CONS c-src/emacs/src/lisp.h /^# define CHECK_LIST_CONS(x, y) lisp_h_CHECK_LIST_C/ +CHECK_LIST c-src/emacs/src/lisp.h /^CHECK_LIST (Lisp_Object x)$/ +CHECK_NATNUM c-src/emacs/src/lisp.h /^CHECK_NATNUM (Lisp_Object x)$/ +CHECK_NUMBER_CAR c-src/emacs/src/lisp.h /^CHECK_NUMBER_CAR (Lisp_Object x)$/ +CHECK_NUMBER_CDR c-src/emacs/src/lisp.h /^CHECK_NUMBER_CDR (Lisp_Object x)$/ +CHECK_NUMBER_COERCE_MARKER c-src/emacs/src/lisp.h /^#define CHECK_NUMBER_COERCE_MARKER(x) \\$/ +CHECK_NUMBER c-src/emacs/src/lisp.h /^# define CHECK_NUMBER(x) lisp_h_CHECK_NUMBER (x)$/ +CHECK_NUMBER_OR_FLOAT_COERCE_MARKER c-src/emacs/src/lisp.h /^#define CHECK_NUMBER_OR_FLOAT_COERCE_MARKER(x) / +CHECK_NUMBER_OR_FLOAT c-src/emacs/src/lisp.h /^CHECK_NUMBER_OR_FLOAT (Lisp_Object x)$/ +CHECKOBJS make-src/Makefile /^CHECKOBJS=chkmalloc.o chkxm.o$/ +CHECK_PROCESS c-src/emacs/src/lisp.h /^CHECK_PROCESS (Lisp_Object x)$/ +checkQuotation php-src/lce_functions.php /^ function checkQuotation($str)$/ +CHECK_RANGED_INTEGER c-src/emacs/src/lisp.h /^#define CHECK_RANGED_INTEGER(x, lo, hi) \\$/ +CHECK_STRING_CAR c-src/emacs/src/lisp.h /^CHECK_STRING_CAR (Lisp_Object x)$/ +CHECK_SYMBOL c-src/emacs/src/lisp.h /^# define CHECK_SYMBOL(x) lisp_h_CHECK_SYMBOL (x)$/ +CHECK_TYPE c-src/emacs/src/lisp.h /^# define CHECK_TYPE(ok, predicate, x) lisp_h_CHECK/ +CHECK_TYPE_RANGED_INTEGER c-src/emacs/src/lisp.h /^#define CHECK_TYPE_RANGED_INTEGER(type, x) \\$/ +CHECK_VECTOR c-src/emacs/src/lisp.h /^CHECK_VECTOR (Lisp_Object x)$/ +CHECK_VECTOR_OR_STRING c-src/emacs/src/lisp.h /^CHECK_VECTOR_OR_STRING (Lisp_Object x)$/ +CHECK_WINDOW c-src/emacs/src/lisp.h /^CHECK_WINDOW (Lisp_Object x)$/ chfopen tex-src/texinfo.tex /^\\def\\chfopen #1#2{\\chapoddpage {\\chapfonts$/ chfplain tex-src/texinfo.tex /^\\def\\chfplain #1#2{%$/ childDidExit objc-src/Subprocess.m /^- childDidExit$/ chunks_free c-src/emacs/src/gmalloc.c 313 +_chunks_free c-src/emacs/src/gmalloc.c 376 chunks_used c-src/emacs/src/gmalloc.c 311 -cindex tex-src/texinfo.tex /^\\def\\cindex {\\cpindex}$/ +_chunks_used c-src/emacs/src/gmalloc.c 374 cindexsub tex-src/texinfo.tex /^\\def\\cindexsub {\\begingroup\\obeylines\\cindexsub}$/ cindexsub tex-src/texinfo.tex /^\\gdef\\cindexsub "#1" #2^^M{\\endgroup %$/ -cite tex-src/texinfo.tex /^\\def\\cite##1{\\realbackslash cite {##1}}$/ +cindex tex-src/texinfo.tex /^\\def\\cindex {\\cpindex}$/ +Circle.getPos lua-src/test.lua /^function Circle.getPos ()$/ cite tex-src/texinfo.tex /^\\def\\cite##1{\\realbackslash cite {##1}}%$/ +cite tex-src/texinfo.tex /^\\def\\cite##1{\\realbackslash cite {##1}}$/ cite tex-src/texinfo.tex /^\\let\\cite=\\indexdummyfont$/ cite tex-src/texinfo.tex /^\\let\\cite=\\smartitalic$/ +C_JAVA c-src/etags.c 2197 cjava c-src/etags.c 2936 -class_method ruby-src/test.rb /^ def ClassExample.class_method$/ +Cjava_entries c-src/etags.c /^Cjava_entries (FILE *inf)$/ +Cjava_help c-src/etags.c 551 +Cjava_suffixes c-src/etags.c 549 +CK_ABS_C y-src/parse.y /^#define CK_ABS_C(x) if((x)MAX_COL)/ +CK_ABS_R y-src/parse.y /^#define CK_ABS_R(x) if((x)MAX_ROW)/ +CK_REL_C y-src/parse.y /^#define CK_REL_C(x) if( ((x)>0 && MAX_COL-(x)0 && MAX_ROW-(x)/ +/dieresis ps-src/rfc1245.ps /^\/dieresis \/.notdef \/AE \/Oslash \/.notdef \/.notdef \// dignorerest c-src/etags.c 2463 direntry tex-src/texinfo.tex /^\\def\\direntry{\\begingroup\\direntryxxx}$/ direntryxxx tex-src/texinfo.tex /^\\long\\def\\direntryxxx #1\\end direntry{\\endgroup\\ig/ discard-input c-src/emacs/src/keyboard.c /^DEFUN ("discard-input", Fdiscard_input, Sdiscard_i/ discard_mouse_events c-src/emacs/src/keyboard.c /^discard_mouse_events (void)$/ -discrete_location cp-src/clheir.hpp /^ discrete_location(int xi, int yi, int zi):$/ discrete_location cp-src/clheir.hpp 56 +discrete_location cp-src/clheir.hpp /^ discrete_location(int xi, int yi, int zi):$/ display cp-src/conway.cpp /^void display(void)$/ display tex-src/texinfo.tex /^\\def\\display{\\begingroup\\inENV %This group ends at/ +DisposeANameList pas-src/common.pas /^procedure DisposeANameList( $/ +DisposeNameList pas-src/common.pas /^procedure DisposeNameList;$/ disposetextstring pas-src/common.pas /^procedure disposetextstring;(*($/ +/dmatrix ps-src/rfc1245.ps /^\/dmatrix matrix def$/ dmn tex-src/texinfo.tex /^\\def\\dmn#1{\\thinspace #1}$/ dnone c-src/etags.c 2460 +/dnormalize ps-src/rfc1245.ps /^\/dnormalize {$/ dobreak tex-src/texinfo.tex /^\\def\\dobreak#1#2{\\par\\ifdim\\lastskip<#1\\removelast/ doc c-src/emacs/src/lisp.h 1689 dochapentry tex-src/texinfo.tex /^\\def\\dochapentry#1#2{%$/ docodeindex tex-src/texinfo.tex /^\\def\\docodeindex#1{\\edef\\indexname{#1}\\parsearg\\si/ -dog c-src/h.h 81 dog cp-src/c.C 126 dog cp-src/c.C 130 -doind tex-src/texinfo.tex /^\\def\\doind #1#2{%$/ +dog c-src/h.h 81 doindex tex-src/texinfo.tex /^\\def\\doindex#1{\\edef\\indexname{#1}\\parsearg\\single/ +doind tex-src/texinfo.tex /^\\def\\doind #1#2{%$/ donoderef tex-src/texinfo.tex /^\\def\\donoderef{\\ifx\\lastnode\\relax\\else$/ dontindex tex-src/texinfo.tex /^\\def\\dontindex #1{}$/ dopageno tex-src/texinfo.tex /^\\def\\dopageno#1{{\\rm #1}}$/ @@ -2390,11 +1028,13 @@ doprintindex tex-src/texinfo.tex /^\\def\\doprintindex#1{%$/ dosecentry tex-src/texinfo.tex /^\\def\\dosecentry#1#2{%$/ dosetq tex-src/texinfo.tex /^\\def\\dosetq #1#2{{\\let\\folio=0 \\turnoffactive%$/ doshortpageno tex-src/texinfo.tex /^\\def\\doshortpageno#1{{\\rm #1}}$/ +DOS_NT c-src/etags.c 117 +DOS_NT c-src/etags.c 118 dosubind tex-src/texinfo.tex /^\\def\\dosubind #1#2#3{%$/ dosubsecentry tex-src/texinfo.tex /^\\def\\dosubsecentry#1#2{%$/ dosubsubsecentry tex-src/texinfo.tex /^\\def\\dosubsubsecentry#1#2{%$/ -dotfill tex-src/texinfo.tex /^ \\null\\nobreak\\indexdotfill % Have leaders before/ dotfill tex-src/texinfo.tex /^\\noindent\\hskip\\secondaryindent\\hbox{#1}\\indexdotf/ +dotfill tex-src/texinfo.tex /^ \\null\\nobreak\\indexdotfill % Have leaders before/ dots tex-src/texinfo.tex /^\\def\\dots{$\\ldots$}$/ dots tex-src/texinfo.tex /^\\def\\dots{\\realbackslash dots }%$/ dots tex-src/texinfo.tex /^\\def\\dots{\\realbackslash dots}$/ @@ -2402,8 +1042,11 @@ dots tex-src/texinfo.tex /^\\let\\dots=\\indexdummydots$/ dots tex-src/texinfo.tex /^\\let\\dots=\\ptexdots$/ double_click_count c-src/emacs/src/keyboard.c 5222 doublecolumnout tex-src/texinfo.tex /^\\def\\doublecolumnout{\\splittopskip=\\topskip \\split/ +/dpi ps-src/rfc1245.ps /^\/dpi 72 0 dmatrix defaultmatrix dtransform$/ +/D ps-src/rfc1245.ps /^\/D {curveto} bind def$/ drag_n_drop_syms c-src/emacs/src/keyboard.c 4629 dribble c-src/emacs/src/keyboard.c 236 +D ruby-src/test1.ru /^class ::D; end$/ dsharpseen c-src/etags.c 2461 dummies tex-src/texinfo.tex /^{\\indexdummies % Must do this here, since \\bf, etc/ dummy1 cp-src/burton.cpp /^::dummy::dummy test::dummy1(void)$/ @@ -2422,45 +1065,79 @@ dummyfont tex-src/texinfo.tex /^\\let\\r=\\indexdummyfont$/ dummyfont tex-src/texinfo.tex /^\\let\\samp=\\indexdummyfont$/ dummyfont tex-src/texinfo.tex /^\\let\\sc=\\indexdummyfont$/ dummyfont tex-src/texinfo.tex /^\\let\\strong=\\indexdummyfont$/ -dummyfont tex-src/texinfo.tex /^\\let\\t=\\indexdummyfont$/ dummyfont tex-src/texinfo.tex /^\\let\\tclose=\\indexdummyfont$/ +dummyfont tex-src/texinfo.tex /^\\let\\t=\\indexdummyfont$/ dummyfont tex-src/texinfo.tex /^\\let\\var=\\indexdummyfont$/ dummyfont tex-src/texinfo.tex /^\\let\\w=\\indexdummyfont$/ dummytex tex-src/texinfo.tex /^\\let\\TeX=\\indexdummytex$/ +DUMPED c-src/emacs/src/gmalloc.c 80 dump pyt-src/server.py /^ def dump(self, folded):$/ eabs c-src/emacs/src/lisp.h /^#define eabs(x) ((x) < 0 ? -(x) : (x))$/ +Ealphaenumerate tex-src/texinfo.tex /^\\def\\Ealphaenumerate{\\Eenumerate}$/ eassert c-src/emacs/src/lisp.h /^# define eassert(cond) \\$/ eassert c-src/emacs/src/lisp.h /^# define eassert(cond) ((void) (false && (cond))) / eassume c-src/emacs/src/lisp.h /^# define eassume(cond) \\$/ eassume c-src/emacs/src/lisp.h /^# define eassume(cond) assume (cond)$/ eax c-src/sysdep.h 31 eax c-src/sysdep.h 33 +Ecapsenumerate tex-src/texinfo.tex /^\\def\\Ecapsenumerate{\\Eenumerate}$/ +Ecartouche tex-src/texinfo.tex /^\\def\\Ecartouche{%$/ echo_add_key c-src/emacs/src/keyboard.c /^echo_add_key (Lisp_Object c)$/ echo_char c-src/emacs/src/keyboard.c /^echo_char (Lisp_Object c)$/ echo_dash c-src/emacs/src/keyboard.c /^echo_dash (void)$/ +echoing c-src/emacs/src/keyboard.c 154 echo_kboard c-src/emacs/src/keyboard.c 166 echo_keystrokes_p c-src/emacs/src/keyboard.c /^echo_keystrokes_p (void)$/ echo_length c-src/emacs/src/keyboard.c /^echo_length (void)$/ echo_message_buffer c-src/emacs/src/keyboard.c 171 echo_now c-src/emacs/src/keyboard.c /^echo_now (void)$/ echo_truncate c-src/emacs/src/keyboard.c /^echo_truncate (ptrdiff_t nchars)$/ -echoing c-src/emacs/src/keyboard.c 154 +Edescription tex-src/texinfo.tex /^\\def\\Edescription{\\Etable}% Necessary kludge.$/ +%ediff make-src/Makefile /^%ediff: ETAGS% ETAGS ${infiles}$/ +Edisplay tex-src/texinfo.tex /^\\def\\Edisplay{\\endgroup\\afterenvbreak}%$/ editItem pyt-src/server.py /^ def editItem(self):$/ editsite pyt-src/server.py /^ def editsite(self, site):$/ edituser pyt-src/server.py /^ def edituser(self, user):$/ +Eexample tex-src/texinfo.tex /^\\def\\Eexample{\\Elisp}$/ +Eflushleft tex-src/texinfo.tex /^\\def\\Eflushleft{\\endgroup\\afterenvbreak}%$/ +Eflushright tex-src/texinfo.tex /^\\def\\Eflushright{\\endgroup\\afterenvbreak}%$/ +Eformat tex-src/texinfo.tex /^\\def\\Eformat{\\endgroup\\afterenvbreak}$/ +Eftable tex-src/texinfo.tex /^\\def\\Eftable{\\endgraf\\endgroup\\afterenvbreak}%$/ egetenv c-src/emacs/src/lisp.h /^egetenv (const char *var)$/ +Egroup tex-src/texinfo.tex /^ \\def\\Egroup{\\egroup\\endgroup}%$/ +Eifclear tex-src/texinfo.tex /^\\def\\Eifclear{}$/ +Eifset tex-src/texinfo.tex /^\\def\\Eifset{}$/ +Eiftex tex-src/texinfo.tex /^\\def\\Eiftex{}$/ +ELEM_I c-src/h.h 3 +Elisp tex-src/texinfo.tex /^\\def\\Elisp{\\endgroup\\afterenvbreak}%$/ +ELSRC make-src/Makefile /^ELSRC=TAGTEST.EL emacs\/lisp\/progmodes\/etags.el$/ emacs_abort c-src/emacs/src/lisp.h /^extern _Noreturn void emacs_abort (void) NO_INLINE/ +EMACS_INT c-src/emacs/src/lisp.h 103 +EMACS_INT c-src/emacs/src/lisp.h 91 +EMACS_INT c-src/emacs/src/lisp.h 96 +EMACS_INT_MAX c-src/emacs/src/lisp.h 105 +EMACS_INT_MAX c-src/emacs/src/lisp.h 93 +EMACS_INT_MAX c-src/emacs/src/lisp.h 98 +EMACS_LISP_H c-src/emacs/src/lisp.h 22 +EMACS_NAME c-src/etags.c 786 +EMACS_UINT c-src/emacs/src/lisp.h 104 +EMACS_UINT c-src/emacs/src/lisp.h 92 +EMACS_UINT c-src/emacs/src/lisp.h 97 emph tex-src/texinfo.tex /^\\def\\emph##1{\\realbackslash emph {##1}}$/ emph tex-src/texinfo.tex /^\\let\\emph=\\indexdummyfont$/ emph tex-src/texinfo.tex /^\\let\\emph=\\smartitalic$/ +EmptyNmStr pas-src/common.pas /^function EmptyNmStr(* : NameString*);$/ +/ENDBITMAP ps-src/rfc1245.ps /^\/ENDBITMAP {$/ end c-src/emacs/src/keyboard.c 8753 end c-src/emacs/src/lisp.h 2039 end c-src/emacs/src/regex.h 432 -end tex-src/texinfo.tex /^\\def\\end{\\parsearg\\endxxx}$/ enddoublecolumns tex-src/texinfo.tex /^\\def\\enddoublecolumns{\\output={\\balancecolumns}\\ej/ +/ENDPRINTCODE ps-src/rfc1245.ps /^\/ENDPRINTCODE {$/ +end tex-src/texinfo.tex /^\\def\\end{\\parsearg\\endxxx}$/ endtoken c-src/etags.c /^#define endtoken(c) (_etk[CHAR (c)]) \/* c ends tok/ endxxx tex-src/texinfo.tex /^\\def\\endxxx #1{%$/ enter_critical_section c-src/h.h 116 +ENTRY c-src/sysdep.h /^#define ENTRY(name) \\$/ entry perl-src/htlmify-cystic 218 entry perl-src/htlmify-cystic 234 entry perl-src/htlmify-cystic 245 @@ -2470,42 +1147,69 @@ entry perl-src/htlmify-cystic 276 entry perl-src/htlmify-cystic 281 entry perl-src/htlmify-cystic 296 entry tex-src/texinfo.tex /^\\def\\entry #1#2{\\begingroup$/ +ENUM_BF c-src/emacs/src/lisp.h /^#define ENUM_BF(TYPE) enum TYPE$/ +ENUM_BF c-src/emacs/src/lisp.h /^#define ENUM_BF(TYPE) unsigned int$/ enumerate tex-src/texinfo.tex /^\\def\\enumerate{\\parsearg\\enumeratezzz}$/ enumeratey tex-src/texinfo.tex /^\\def\\enumeratey #1 #2\\endenumeratey{%$/ enumeratezzz tex-src/texinfo.tex /^\\def\\enumeratezzz #1{\\enumeratey #1 \\endenumerate/ +ENVcheck tex-src/texinfo.tex /^\\def\\ENVcheck{%$/ +Environment tex-src/gzip.texi /^@node Environment, Tapes, Advanced usage, Top$/ +/E ps-src/rfc1245.ps /^\/E {lineto} bind def$/ +EQ c-src/emacs/src/lisp.h /^# define EQ(x, y) lisp_h_EQ (x, y)$/ equalsKey objcpp-src/SimpleCalc.M /^- equalsKey:sender$/ +EQUAL y-src/cccp.c 12 equiv tex-src/texinfo.tex /^\\def\\equiv{\\leavevmode\\lower.1ex\\hbox to 1em{\\hfil/ equiv tex-src/texinfo.tex /^\\def\\equiv{\\realbackslash equiv}$/ +Equotation tex-src/texinfo.tex /^\\def\\Equotation{\\par\\endgroup\\afterenvbreak}%$/ erlang_atom c-src/etags.c /^erlang_atom (char *s)$/ erlang_attribute c-src/etags.c /^erlang_attribute (char *s)$/ erlang_func c-src/etags.c /^erlang_func (char *s, char *last)$/ +Erlang_functions c-src/etags.c /^Erlang_functions (FILE *inf)$/ +Erlang_help c-src/etags.c 567 +Erlang_suffixes c-src/etags.c 565 +ERLSRC make-src/Makefile /^ERLSRC=gs_dialog.erl lines.erl lists.erl$/ error c-src/emacs/src/lisp.h /^extern _Noreturn void error (const char *, ...) AT/ error c-src/etags.c /^error (const char *format, ...)$/ error c-src/etags.c /^static void error (const char *, ...) ATTRIBUTE_FO/ -error tex-src/texinfo.tex /^\\def\\error{\\leavevmode\\lower.7ex\\copy\\errorbox}$/ -error y-src/cccp.y /^error (msg)$/ errorE tex-src/texinfo.tex /^\\def\\errorE#1{$/ +Error_Information/t ada-src/2ataspri.ads /^ type Error_Information is new Interfaces.C.POSI/ error_signaled c-src/etags.c 264 +error tex-src/texinfo.tex /^\\def\\error{\\leavevmode\\lower.7ex\\copy\\errorbox}$/ +ERROR y-src/cccp.c 9 +error y-src/cccp.y /^error (msg)$/ +ERROR y-src/parse.y 304 +ErrStrToNmStr pas-src/common.pas /^function ErrStrToNmStr;(*($/ +Esmallexample tex-src/texinfo.tex /^\\def\\Esmallexample{\\Elisp}$/ +Esmallexample tex-src/texinfo.tex /^\\global\\def\\Esmallexample{\\Esmalllisp}$/ +Esmalllisp tex-src/texinfo.tex /^\\def\\Esmalllisp{\\endgroup\\afterenvbreak}%$/ +Etable tex-src/texinfo.tex /^\\def\\Etable{\\endgraf\\endgroup\\afterenvbreak}%$/ +Etable tex-src/texinfo.tex /^\\let\\Etable=\\relax}}$/ +ETAGS12 make-src/Makefile /^ETAGS12: etags12 ${infiles}$/ +ETAGS13 ETAGS14 ETAGS15 make-src/Makefile /^ETAGS13 ETAGS14 ETAGS15: etags% ${infiles}$/ +etags.1.man make-src/Makefile /^etags.1.man: etags.1$/ etags el-src/emacs/lisp/progmodes/etags.el /^(defgroup etags nil "Tags tables."$/ -etags html-src/software.html /^Etags$/ -etags make-src/Makefile /^etags: etags.c ${OBJS}$/ -etags--xref-find-definitions el-src/emacs/lisp/progmodes/etags.el /^(defun etags--xref-find-definitions (pattern &opti/ -etags--xref-limit el-src/emacs/lisp/progmodes/etags.el /^(defconst etags--xref-limit 1000)$/ etags-file-of-tag el-src/emacs/lisp/progmodes/etags.el /^(defun etags-file-of-tag (&optional relative) ; Do/ +etags_getcwd c-src/etags.c /^etags_getcwd (void)$/ etags-goto-tag-location el-src/emacs/lisp/progmodes/etags.el /^(defun etags-goto-tag-location (tag-info)$/ +etags html-src/software.html /^Etags$/ etags-list-tags el-src/emacs/lisp/progmodes/etags.el /^(defun etags-list-tags (file) ; Doc string?$/ +etags make-src/Makefile /^etags: etags.c ${OBJS}$/ +ETAGS make-src/Makefile /^ETAGS: FRC etags ${infiles}$/ +ETAGS% make-src/Makefile /^ETAGS%: FRC etags% ${infiles}$/ etags-recognize-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun etags-recognize-tags-table ()$/ etags-snarf-tag el-src/emacs/lisp/progmodes/etags.el /^(defun etags-snarf-tag (&optional use-explicit) ; / -etags-tags-apropos el-src/emacs/lisp/progmodes/etags.el /^(defun etags-tags-apropos (string) ; Doc string?$/ etags-tags-apropos-additional el-src/emacs/lisp/progmodes/etags.el /^(defun etags-tags-apropos-additional (regexp)$/ +etags-tags-apropos el-src/emacs/lisp/progmodes/etags.el /^(defun etags-tags-apropos (string) ; Doc string?$/ etags-tags-completion-table el-src/emacs/lisp/progmodes/etags.el /^(defun etags-tags-completion-table () ; Doc string/ etags-tags-included-tables el-src/emacs/lisp/progmodes/etags.el /^(defun etags-tags-included-tables () ; Doc string?/ etags-tags-table-files el-src/emacs/lisp/progmodes/etags.el /^(defun etags-tags-table-files () ; Doc string?$/ etags-verify-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun etags-verify-tags-table ()$/ -etags-xref-find el-src/emacs/lisp/progmodes/etags.el /^(defun etags-xref-find (action id)$/ +etags--xref-find-definitions el-src/emacs/lisp/progmodes/etags.el /^(defun etags--xref-find-definitions (pattern &opti/ etags-xref-find-definitions-tag-order el-src/emacs/lisp/progmodes/etags.el /^(defvar etags-xref-find-definitions-tag-order '(ta/ -etags.1.man make-src/Makefile /^etags.1.man: etags.1$/ -etags_getcwd c-src/etags.c /^etags_getcwd (void)$/ +etags-xref-find el-src/emacs/lisp/progmodes/etags.el /^(defun etags-xref-find (action id)$/ +etags--xref-limit el-src/emacs/lisp/progmodes/etags.el /^(defconst etags--xref-limit 1000)$/ +Etex tex-src/texinfo.tex /^\\let\\Etex=\\endgroup}$/ +Etitlepage tex-src/texinfo.tex /^\\def\\Etitlepage{%$/ eval_dyn c-src/emacs/src/keyboard.c /^eval_dyn (Lisp_Object form)$/ evenfooting tex-src/texinfo.tex /^\\def\\evenfooting{\\parsearg\\evenfootingxxx}$/ evenfootingxxx tex-src/texinfo.tex /^\\gdef\\evenfootingxxx #1{\\evenfootingyyy #1@|@|@|@|/ @@ -2514,8 +1218,8 @@ evenheading tex-src/texinfo.tex /^\\def\\evenheading{\\parsearg\\evenheadingxxx} evenheadingxxx tex-src/texinfo.tex /^\\gdef\\evenheadingxxx #1{\\evenheadingyyy #1@|@|@|@|/ evenheadingyyy tex-src/texinfo.tex /^\\gdef\\evenheadingyyy #1@|#2@|#3@|#4\\finish{%$/ event-convert-list c-src/emacs/src/keyboard.c /^DEFUN ("event-convert-list", Fevent_convert_list, / -event-symbol-parse-modifiers c-src/emacs/src/keyboard.c /^DEFUN ("internal-event-symbol-parse-modifiers", Fe/ event_head c-src/emacs/src/keyboard.c 11021 +event-symbol-parse-modifiers c-src/emacs/src/keyboard.c /^DEFUN ("internal-event-symbol-parse-modifiers", Fe/ event_to_kboard c-src/emacs/src/keyboard.c /^event_to_kboard (struct input_event *event)$/ everyfooting tex-src/texinfo.tex /^\\def\\everyfooting{\\parsearg\\everyfootingxxx}$/ everyfootingxxx tex-src/texinfo.tex /^\\gdef\\everyfootingxxx #1{\\everyfootingyyy #1@|@|@|/ @@ -2523,24 +1227,24 @@ everyfootingyyy tex-src/texinfo.tex /^\\gdef\\everyfootingyyy #1@|#2@|#3@|#4\\fi everyheading tex-src/texinfo.tex /^\\def\\everyheading{\\parsearg\\everyheadingxxx}$/ everyheadingxxx tex-src/texinfo.tex /^\\gdef\\everyheadingxxx #1{\\everyheadingyyy #1@|@|@|/ everyheadingyyy tex-src/texinfo.tex /^\\gdef\\everyheadingyyy #1@|#2@|#3@|#4\\finish{%$/ +Evtable tex-src/texinfo.tex /^\\def\\Evtable{\\endgraf\\endgroup\\afterenvbreak}%$/ ewbot tex-src/texinfo.tex /^\\def\\ewbot{\\vrule height0pt depth\\cornerthick widt/ ewtop tex-src/texinfo.tex /^\\def\\ewtop{\\vrule height\\cornerthick depth0pt widt/ exact c-src/emacs/src/gmalloc.c 200 example tex-src/texinfo.tex /^\\let\\example=\\lisp$/ +/exclamdown ps-src/rfc1245.ps /^\/exclamdown \/logicalnot \/.notdef \/florin \/.notdef / exdent tex-src/texinfo.tex /^\\def\\exdent{\\parsearg\\exdentyyy}$/ exdent tex-src/texinfo.tex /^\\let\\exdent=\\nofillexdent$/ exdentyyy tex-src/texinfo.tex /^\\def\\exdentyyy #1{{\\hfil\\break\\hbox{\\kern -\\exdent/ execute cp-src/c.C /^ void execute(CPluginCSCState& p, int w, in/ +EXFUN c-src/emacs/src/lisp.h /^#define EXFUN(fnname, maxargs) \\$/ +exit_critical_to_previous c-src/h.h 117 exit c-src/exit.c /^DEFUN(exit, (status), int status)$/ exit c-src/exit.strange_suffix /^DEFUN(exit, (status), int status)$/ +Exit_LL_Task/p ada-src/2ataspri.adb /^ procedure Exit_LL_Task is$/ +Exit_LL_Task/p ada-src/2ataspri.ads /^ procedure Exit_LL_Task;$/ exit-recursive-edit c-src/emacs/src/keyboard.c /^DEFUN ("exit-recursive-edit", Fexit_recursive_edit/ -exit_critical_to_previous c-src/h.h 117 -exp y-src/atest.y 2 -exp y-src/cccp.y 156 -exp y-src/cccp.y 185 -exp y-src/parse.y 95 exp1 y-src/cccp.y 148 -exp_list y-src/parse.y 263 expand-abbrev c-src/abbrev.c /^DEFUN ("expand-abbrev", Fexpand_abbrev, Sexpand_ab/ expandafter tex-src/texinfo.tex /^\\expandafter\\let\\expandafter\\synindexfoo\\expandaft/ expandmng prol-src/natded.prolog /^expandmng(var(V),var(V)).$/ @@ -2550,24 +1254,18 @@ expandsyn prol-src/natded.prolog /^expandsyn(Syn,Syn):-$/ expansion tex-src/texinfo.tex /^\\def\\expansion{\\leavevmode\\raise.1ex\\hbox to 1em{\\/ expansion tex-src/texinfo.tex /^\\def\\expansion{\\realbackslash expansion}$/ explicitly-quoted-pending-delete-mode el-src/TAGTEST.EL /^(defalias (quote explicitly-quoted-pending-delete-/ +exp_list y-src/parse.y 263 expression_value y-src/cccp.y 68 +exp y-src/atest.y 2 +exp y-src/cccp.y 156 +exp y-src/cccp.y 185 +exp y-src/parse.y 95 +EXTAGS make-src/Makefile /^EXTAGS: extags ${infiles} Makefile$/ +EXTERNALLY_VISIBLE c-src/emacs/src/keyboard.c 3497 +EXTERNALLY_VISIBLE c-src/emacs/src/keyboard.c 4372 +ExtractCommentInfo pas-src/common.pas /^procedure ExtractCommentInfo; (*($/ extras c-src/emacs/src/lisp.h 1603 extvar c-src/h.h 109 -f c-src/c.c /^T f(){if(x){}$/ -f c-src/h.h 89 -f c.c /^int f$/ -f c.c 145 -f c.c 156 -f c.c 168 -f cp-src/c.C /^ void f() {}$/ -f cp-src/c.C /^ int f(){return 0;}; \/\/ first comment$/ -f cp-src/c.C /^A > A,int>::f(A* x) {}$/ -f cp-src/c.C /^A* f() {}$/ -f cp-src/c.C /^class B { void f() {} };$/ -f cp-src/c.C /^int A::f(A* x) {}$/ -f cp-src/c.C /^int f(A x) {}$/ -f cp-src/fail.C /^ int f() { return 5; }$/ -f cp-src/fail.C /^int A::B::f() { return 2; }$/ f1 c.c /^ f1 () { \/* Do something. *\/; }$/ f1 perl-src/kai-test.pl /^sub f1 {$/ f2 c.c /^void f2 () { \/* Do something. *\/; }$/ @@ -2577,39 +1275,92 @@ f4 perl-src/kai-test.pl /^sub Bar::f4 {$/ f5 perl-src/kai-test.pl /^sub f5 {$/ f6 perl-src/kai-test.pl /^sub f6 {$/ f7 perl-src/kai-test.pl /^sub f7 {$/ -fast_string_match_ignore_case c-src/emacs/src/lisp.h /^fast_string_match_ignore_case (Lisp_Object regexp,/ +Fabbrev_expansion c-src/abbrev.c /^DEFUN ("abbrev-expansion", Fabbrev_expansion, Sabb/ +Fabbrev_symbol c-src/abbrev.c /^DEFUN ("abbrev-symbol", Fabbrev_symbol, Sabbrev_sy/ +Fabort_recursive_edit c-src/emacs/src/keyboard.c /^DEFUN ("abort-recursive-edit", Fabort_recursive_ed/ +=/f ada-src/etags-test-for.ada /^ function "=" (L, R : System.Address) return Boo/ +Fails_t c-src/h.h 5 +/fakecolorsetup ps-src/rfc1245.ps /^\/fakecolorsetup {$/ +FASTCFLAGS make-src/Makefile /^FASTCFLAGS=-O3 -finline-functions -ffast-math -fun/ +FASTCFLAGSWARN make-src/Makefile /^FASTCFLAGSWARN=${WARNINGS} -Werror ${FASTCFLAGS}$/ fastctags make-src/Makefile /^fastctags:$/ fastetags make-src/Makefile /^fastetags:$/ -fastmap c-src/emacs/src/regex.h 355 fastmap_accurate c-src/emacs/src/regex.h 383 -fatal c-src/etags.c /^fatal (const char *s1, const char *s2)$/ +fastmap c-src/emacs/src/regex.h 355 +fast_string_match_ignore_case c-src/emacs/src/lisp.h /^fast_string_match_ignore_case (Lisp_Object regexp,/ fatala c.c /^void fatala () __attribute__ ((noreturn));$/ +fatal c-src/etags.c /^fatal (const char *s1, const char *s2)$/ +f c.c 145 +f c.c 156 +f c.c 168 +f c.c /^int f$/ +Fclear_abbrev_table c-src/abbrev.c /^DEFUN ("clear-abbrev-table", Fclear_abbrev_table, / +Fclear_this_command_keys c-src/emacs/src/keyboard.c /^DEFUN ("clear-this-command-keys", Fclear_this_comm/ +Fcommand_error_default_function c-src/emacs/src/keyboard.c /^DEFUN ("command-error-default-function", Fcommand_/ fconst forth-src/test-forth.fth /^3.1415e fconstant fconst$/ -fdHandler objc-src/Subprocess.m /^- fdHandler:(int)theFd$/ -fdHandler objc-src/Subprocess.m /^fdHandler (int theFd, id self)$/ +f cp-src/c.C /^A > A,int>::f(A* x) {}$/ +f cp-src/c.C /^A* f() {}$/ +f cp-src/c.C /^class B { void f() {} };$/ +f cp-src/c.C /^int A::f(A* x) {}$/ +f cp-src/c.C /^int f(A x) {}$/ +f cp-src/c.C /^ int f(){return 0;}; \/\/ first comment$/ +f cp-src/c.C /^ void f() {}$/ +f cp-src/fail.C /^int A::B::f() { return 2; }$/ +f cp-src/fail.C /^ int f() { return 5; }$/ +f c-src/c.c /^T f(){if(x){}$/ +f c-src/h.h 89 +Fcurrent_idle_time c-src/emacs/src/keyboard.c /^DEFUN ("current-idle-time", Fcurrent_idle_time, Sc/ +Fcurrent_input_mode c-src/emacs/src/keyboard.c /^DEFUN ("current-input-mode", Fcurrent_input_mode, / +Fdefine_abbrev c-src/abbrev.c /^DEFUN ("define-abbrev", Fdefine_abbrev, Sdefine_ab/ +Fdefine_abbrev_table c-src/abbrev.c /^DEFUN ("define-abbrev-table", Fdefine_abbrev_table/ +Fdefine_global_abbrev c-src/abbrev.c /^DEFUN ("define-global-abbrev", Fdefine_global_abbr/ +Fdefine_mode_abbrev c-src/abbrev.c /^DEFUN ("define-mode-abbrev", Fdefine_mode_abbrev, / fdefunkey c-src/etags.c 2409 fdefunname c-src/etags.c 2410 fdesc c-src/etags.c 201 fdesc c-src/etags.c 212 +fdHandler objc-src/Subprocess.m /^- fdHandler:(int)theFd$/ +fdHandler objc-src/Subprocess.m /^fdHandler (int theFd, id self)$/ +Fdiscard_input c-src/emacs/src/keyboard.c /^DEFUN ("discard-input", Fdiscard_input, Sdiscard_i/ fdp c-src/etags.c 217 +Fevent_convert_list c-src/emacs/src/keyboard.c /^DEFUN ("event-convert-list", Fevent_convert_list, / +Fevent_symbol_parse_modifiers c-src/emacs/src/keyboard.c /^DEFUN ("internal-event-symbol-parse-modifiers", Fe/ +Fexit_recursive_edit c-src/emacs/src/keyboard.c /^DEFUN ("exit-recursive-edit", Fexit_recursive_edit/ +Fexpand_abbrev c-src/abbrev.c /^DEFUN ("expand-abbrev", Fexpand_abbrev, Sexpand_ab/ ff cp-src/c.C /^ int ff(){return 1;};$/ +F_getit c-src/etags.c /^F_getit (FILE *inf)$/ +>field1 forth-src/test-forth.fth /^ 9 field >field1$/ +>field2 forth-src/test-forth.fth /^ 5 field >field2$/ field_of_play cp-src/conway.cpp 18 fignore c-src/etags.c 2416 -file tex-src/texinfo.tex /^\\def\\file##1{\\realbackslash file {##1}}$/ -file tex-src/texinfo.tex /^\\def\\file##1{\\realbackslash file {##1}}%$/ -file tex-src/texinfo.tex /^\\let\\file=\\indexdummyfont$/ -file tex-src/texinfo.tex /^\\let\\file=\\samp$/ -file-of-tag el-src/emacs/lisp/progmodes/etags.el /^(defun file-of-tag (&optional relative)$/ -file-of-tag-function el-src/emacs/lisp/progmodes/etags.el /^(defvar file-of-tag-function nil$/ -fileJoin php-src/lce_functions.php /^ function fileJoin()$/ file_end perl-src/htlmify-cystic /^sub file_end ()$/ file_index perl-src/htlmify-cystic 33 -file_tocs perl-src/htlmify-cystic 30 +fileJoin php-src/lce_functions.php /^ function fileJoin()$/ filename_is_absolute c-src/etags.c /^filename_is_absolute (char *fn)$/ filenames c-src/etags.c 196 +file-of-tag el-src/emacs/lisp/progmodes/etags.el /^(defun file-of-tag (&optional relative)$/ +file-of-tag-function el-src/emacs/lisp/progmodes/etags.el /^(defvar file-of-tag-function nil$/ +file tex-src/texinfo.tex /^\\def\\file##1{\\realbackslash file {##1}}%$/ +file tex-src/texinfo.tex /^\\def\\file##1{\\realbackslash file {##1}}$/ +file tex-src/texinfo.tex /^\\let\\file=\\indexdummyfont$/ +file tex-src/texinfo.tex /^\\let\\file=\\samp$/ +file_tocs perl-src/htlmify-cystic 30 +/fillprocs ps-src/rfc1245.ps /^\/fillprocs 32 array def$/ +FILTER make-src/Makefile /^FILTER=grep -v '\\.[Cchefy][lor]*,[1-9][0-9]*' || t/ +FINAL_FREE_BLOCKS c-src/emacs/src/gmalloc.c 135 +Finalize_Cond/p ada-src/2ataspri.adb /^ procedure Finalize_Cond (Cond : in out Conditio/ +Finalize_Cond/p ada-src/2ataspri.ads /^ procedure Finalize_Cond (Cond : in out Conditio/ +Finalize_Lock/p ada-src/2ataspri.adb /^ procedure Finalize_Lock (L : in out Lock) is$/ +Finalize_Lock/p ada-src/2ataspri.ads /^ procedure Finalize_Lock (L : in out Lock);$/ +FINALIZERP c-src/emacs/src/lisp.h /^FINALIZERP (Lisp_Object x)$/ +Finalize_TAS_Cell/p ada-src/2ataspri.adb /^ procedure Finalize_TAS_Cell (Cell : in out TAS_/ +Finalize_TAS_Cell/p ada-src/2ataspri.ads /^ procedure Finalize_TAS_Cell (Cell : in out TA/ finalout tex-src/texinfo.tex /^\\def\\finalout{\\overfullrule=0pt}$/ -find-tag el-src/emacs/lisp/progmodes/etags.el /^(defun find-tag (tagname &optional next-p regexp-p/ +findcats prol-src/natded.prolog /^findcats([],Left,Left).$/ +find_entries c-src/etags.c /^find_entries (FILE *inf)$/ +findex tex-src/texinfo.tex /^\\def\\findex {\\fnindex}$/ find-tag-default-function el-src/emacs/lisp/progmodes/etags.el /^(defcustom find-tag-default-function nil$/ +find-tag el-src/emacs/lisp/progmodes/etags.el /^(defun find-tag (tagname &optional next-p regexp-p/ find-tag-history el-src/emacs/lisp/progmodes/etags.el /^(defvar find-tag-history nil) ; Doc string?$/ find-tag-hook el-src/emacs/lisp/progmodes/etags.el /^(defcustom find-tag-hook nil$/ find-tag-in-order el-src/emacs/lisp/progmodes/etags.el /^(defun find-tag-in-order (pattern$/ @@ -2627,26 +1378,44 @@ find-tag-regexp-tag-order el-src/emacs/lisp/progmodes/etags.el /^(defvar find-ta find-tag-search-function el-src/emacs/lisp/progmodes/etags.el /^(defvar find-tag-search-function nil$/ find-tag-tag el-src/emacs/lisp/progmodes/etags.el /^(defun find-tag-tag (string)$/ find-tag-tag-order el-src/emacs/lisp/progmodes/etags.el /^(defvar find-tag-tag-order nil$/ -find_entries c-src/etags.c /^find_entries (FILE *inf)$/ find_user_signal_name c-src/emacs/src/keyboard.c /^find_user_signal_name (int sig)$/ -findcats prol-src/natded.prolog /^findcats([],Left,Left).$/ -findex tex-src/texinfo.tex /^\\def\\findex {\\fnindex}$/ finish_appendices perl-src/htlmify-cystic /^sub finish_appendices ()$/ finish_sections perl-src/htlmify-cystic /^sub finish_sections ()$/ finish_subsections perl-src/htlmify-cystic /^sub finish_subsections ()$/ finish_subsubsections perl-src/htlmify-cystic /^sub finish_subsubsections ()$/ finishtitlepage tex-src/texinfo.tex /^\\def\\finishtitlepage{%$/ finlist c-src/etags.c 2414 +Finput_pending_p c-src/emacs/src/keyboard.c /^DEFUN ("input-pending-p", Finput_pending_p, Sinput/ +Finsert_abbrev_table_description c-src/abbrev.c /^DEFUN ("insert-abbrev-table-description", Finsert_/ +First100Chars pas-src/common.pas /^procedure First100Chars; (*($/ first c-src/emacs/src/gmalloc.c 151 first tex-src/texinfo.tex /^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/ fitchtreelist prol-src/natded.prolog /^fitchtreelist([]).$/ +FIXNUM_BITS c-src/emacs/src/lisp.h 252 +FIXNUM_OVERFLOW_P c-src/emacs/src/lisp.h /^#define FIXNUM_OVERFLOW_P(i) \\$/ +FIXNUM_OVERFLOW_P c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (EQ, bool, (Lisp_Object x, Lisp_O/ fixup_locale c-src/emacs/src/lisp.h /^INLINE void fixup_locale (void) {}$/ -flag c-src/getopt.h 83 flag2str pyt-src/server.py /^def flag2str(value, string):$/ +flag c-src/getopt.h 83 flistseen c-src/etags.c 2415 +FLOATP c-src/emacs/src/lisp.h /^# define FLOATP(x) lisp_h_FLOATP (x)$/ +FLOAT_TO_STRING_BUFSIZE c-src/emacs/src/lisp.h 3927 +/fl ps-src/rfc1245.ps /^\/fl { $/ flushcr tex-src/texinfo.tex /^\\def\\flushcr{\\ifx\\par\\lisppar \\def\\next##1{}\\else / flushleft tex-src/texinfo.tex /^\\def\\flushleft{%$/ flushright tex-src/texinfo.tex /^\\def\\flushright{%$/ +Fmake_abbrev_table c-src/abbrev.c /^DEFUN ("make-abbrev-table", Fmake_abbrev_table, Sm/ +/FMBEGINEPSF ps-src/rfc1245.ps /^\/FMBEGINEPSF { $/ +/FMBEGINPAGE ps-src/rfc1245.ps /^\/FMBEGINPAGE { $/ +/Fmcc ps-src/rfc1245.ps /^\/Fmcc {$/ +/FMDEFINEFONT ps-src/rfc1245.ps /^\/FMDEFINEFONT { $/ +/FMDOCUMENT ps-src/rfc1245.ps /^\/FMDOCUMENT { $/ +/FMENDEPSF ps-src/rfc1245.ps /^\/FMENDEPSF {$/ +/FMENDPAGE ps-src/rfc1245.ps /^\/FMENDPAGE {$/ +/FMLOCAL ps-src/rfc1245.ps /^\/FMLOCAL {$/ +/FMNORMALIZEGRAPHICS ps-src/rfc1245.ps /^\/FMNORMALIZEGRAPHICS { $/ +/FMVERSION ps-src/rfc1245.ps /^\/FMVERSION {$/ +/FMversion ps-src/rfc1245.ps /^\/FMversion (2.0) def $/ fn c-src/exit.c /^ void EXFUN((*fn[1]), (NOARGS));$/ fn c-src/exit.strange_suffix /^ void EXFUN((*fn[1]), (NOARGS));$/ fnheader tex-src/texinfo.tex /^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/ @@ -2655,74 +1424,125 @@ fnitemindex tex-src/texinfo.tex /^\\def\\fnitemindex #1{\\doind {fn}{\\code{#1}} fnx\deffnheader tex-src/texinfo.tex /^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/ focus_set pyt-src/server.py /^ def focus_set(self):$/ folio tex-src/texinfo.tex /^\\def\\dosetq #1#2{{\\let\\folio=0 \\turnoffactive%$/ -folio tex-src/texinfo.tex /^{\\let\\folio=0% Expand all macros now EXCEPT \\folio/ folio tex-src/texinfo.tex /^{\\let\\folio=0%$/ +folio tex-src/texinfo.tex /^{\\let\\folio=0% Expand all macros now EXCEPT \\folio/ follow_key c-src/emacs/src/keyboard.c /^follow_key (Lisp_Object keymap, Lisp_Object key)$/ -fonts tex-src/texinfo.tex /^\\obeyspaces \\obeylines \\ninett \\indexfonts \\rawbac/ fonts\rm tex-src/texinfo.tex /^ \\indexfonts\\rm \\tolerance=9500 \\advance\\baseline/ -foo c-src/h.h 18 +fonts tex-src/texinfo.tex /^\\obeyspaces \\obeylines \\ninett \\indexfonts \\rawbac/ +foo1 ruby-src/test1.ru /^ attr_reader(:foo1, :bar1, # comment$/ +foo2 ruby-src/test1.ru /^ alias_method ( :foo2, #cmmt$/ +foobar2_ c-src/h.h 16 +foobar2 c-src/h.h 20 +foobar c.c /^extern void foobar (void) __attribute__ ((section / +foobar c-src/c.c /^int foobar() {;}$/ +foo==bar el-src/TAGTEST.EL /^(defun foo==bar () (message "hi")) ; Bug#5624$/ +Foo::Bar perl-src/kai-test.pl /^package Foo::Bar;$/ foo c.c 150 foo c.c 166 foo c.c 167 foo c.c 178 foo c.c 189 -foo cp-src/c.C /^ foo() {$/ foo cp-src/c.C 68 foo cp-src/c.C 79 +foo cp-src/c.C /^ foo() {$/ foo cp-src/x.cc /^XX::foo()$/ +foo c-src/h.h 18 +(foo) forth-src/test-forth.fth /^: (foo) 1 ;$/ +foo forth-src/test-forth.fth /^: foo (foo) ;$/ foo f-src/entry.for /^ character*(*) function foo()$/ foo f-src/entry.strange /^ character*(*) function foo()$/ foo f-src/entry.strange_suffix /^ character*(*) function foo()$/ -foo forth-src/test-forth.fth /^: foo (foo) ;$/ +Foo perl-src/kai-test.pl /^package Foo;$/ foo php-src/ptest.php /^foo()$/ foo ruby-src/test1.ru /^ attr_reader :foo$/ foo! ruby-src/test1.ru /^ def foo!$/ -foo1 ruby-src/test1.ru /^ attr_reader(:foo1, :bar1, # comment$/ -foo2 ruby-src/test1.ru /^ alias_method ( :foo2, #cmmt$/ -foo==bar el-src/TAGTEST.EL /^(defun foo==bar () (message "hi")) ; Bug#5624$/ -foobar c-src/c.c /^int foobar() {;}$/ -foobar c.c /^extern void foobar (void) __attribute__ ((section / -foobar2 c-src/h.h 20 -foobar2_ c-src/h.h 16 -footnote tex-src/texinfo.tex /^\\long\\gdef\\footnote #1{\\global\\advance \\footnoteno/ footnotestyle tex-src/texinfo.tex /^\\let\\footnotestyle=\\comment$/ +footnote tex-src/texinfo.tex /^\\long\\gdef\\footnote #1{\\global\\advance \\footnoteno/ footnotezzz tex-src/texinfo.tex /^\\long\\gdef\\footnotezzz #1{\\insert\\footins{$/ +Fopen_dribble_file c-src/emacs/src/keyboard.c /^DEFUN ("open-dribble-file", Fopen_dribble_file, So/ foperator c-src/etags.c 2411 force_auto_save_soon c-src/emacs/src/keyboard.c /^force_auto_save_soon (void)$/ force_explicit_name c-src/etags.c 265 force_quit_count c-src/emacs/src/keyboard.c 10387 +FOR_EACH_ALIST_VALUE c-src/emacs/src/lisp.h /^#define FOR_EACH_ALIST_VALUE(head_var, list_var, v/ +FOR_EACH_TAIL c-src/emacs/src/lisp.h /^#define FOR_EACH_TAIL(hare, list, tortoise, n) \\$/ foreign_export merc-src/accumulator.m /^:- pragma foreign_export("C", unravel_univ(in, out/ -format tex-src/texinfo.tex /^\\def\\format{\\begingroup\\inENV %This group ends at / formatSize objc-src/PackInsp.m /^-(const char *)formatSize:(const char *)size inBuf/ +format tex-src/texinfo.tex /^\\def\\format{\\begingroup\\inENV %This group ends at / +Forth_help c-src/etags.c 573 +FORTHSRC make-src/Makefile /^FORTHSRC=test-forth.fth$/ +Forth_suffixes c-src/etags.c 571 +Forth_words c-src/etags.c /^Forth_words (FILE *inf)$/ +Fortran_functions c-src/etags.c /^Fortran_functions (FILE *inf)$/ +Fortran_help c-src/etags.c 579 +Fortran_suffixes c-src/etags.c 577 found c-src/emacs/src/lisp.h 2344 +Fposn_at_point c-src/emacs/src/keyboard.c /^DEFUN ("posn-at-point", Fposn_at_point, Sposn_at_p/ +Fposn_at_x_y c-src/emacs/src/keyboard.c /^DEFUN ("posn-at-x-y", Fposn_at_x_y, Sposn_at_x_y, / +/F ps-src/rfc1245.ps /^\/F { $/ fracas html-src/software.html /^Fracas$/ +/fraction ps-src/rfc1245.ps /^\/fraction \/currency \/guilsinglleft \/guilsinglright/ frag c-src/emacs/src/gmalloc.c 152 +_fraghead c-src/emacs/src/gmalloc.c 371 +/FrameDict ps-src/rfc1245.ps /^\/FrameDict 190 dict def $/ frame_local c-src/emacs/src/lisp.h 2341 -free c-src/emacs/src/gmalloc.c /^free (void *ptr)$/ +FRAMEP c-src/emacs/src/lisp.h /^FRAMEP (Lisp_Object a)$/ +FRC make-src/Makefile /^FRC:;$/ +Fread_key_sequence c-src/emacs/src/keyboard.c /^DEFUN ("read-key-sequence", Fread_key_sequence, Sr/ +Fread_key_sequence_vector c-src/emacs/src/keyboard.c /^DEFUN ("read-key-sequence-vector", Fread_key_seque/ +Frecent_keys c-src/emacs/src/keyboard.c /^DEFUN ("recent-keys", Frecent_keys, Srecent_keys, / +Frecursion_depth c-src/emacs/src/keyboard.c /^DEFUN ("recursion-depth", Frecursion_depth, Srecur/ +Frecursive_edit c-src/emacs/src/keyboard.c /^DEFUN ("recursive-edit", Frecursive_edit, Srecursi/ free c-src/emacs/src/gmalloc.c 166 free c-src/emacs/src/gmalloc.c 1723 free c-src/emacs/src/gmalloc.c 67 free c-src/emacs/src/gmalloc.c 72 +_free c-src/emacs/src/gmalloc.c /^_free (void *ptr)$/ +free c-src/emacs/src/gmalloc.c /^free (void *ptr)$/ free_fdesc c-src/etags.c /^free_fdesc (register fdesc *fdp)$/ +FREEFLOOD c-src/emacs/src/gmalloc.c 1863 free_for prol-src/natded.prolog /^free_for(var(_),_,_).$/ +freehook c-src/emacs/src/gmalloc.c /^freehook (void *ptr)$/ +_free_internal c-src/emacs/src/gmalloc.c /^_free_internal (void *ptr)$/ +_free_internal_nolock c-src/emacs/src/gmalloc.c /^_free_internal_nolock (void *ptr)$/ free_regexps c-src/etags.c /^free_regexps (void)$/ free_tree c-src/etags.c /^free_tree (register node *np)$/ free_var prol-src/natded.prolog /^free_var(var(V),var(V)).$/ -freehook c-src/emacs/src/gmalloc.c /^freehook (void *ptr)$/ frenchspacing tex-src/texinfo.tex /^\\def\\frenchspacing{\\sfcode46=1000 \\sfcode63=1000 \\/ frenchspacing tex-src/texinfo.tex /^\\let\\frenchspacing=\\relax%$/ +/freq ps-src/rfc1245.ps /^\/freq dpi 18.75 div 8 div round dup 0 eq {pop 1} i/ +Freset_this_command_lengths c-src/emacs/src/keyboard.c /^DEFUN ("reset-this-command-lengths", Freset_this_c/ fresh_vars prol-src/natded.prolog /^fresh_vars(var(V),var(V)).$/ +Fset_input_interrupt_mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-interrupt-mode", Fset_input_inte/ +Fset_input_meta_mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-meta-mode", Fset_input_meta_mode/ +Fset_input_mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-mode", Fset_input_mode, Sset_inp/ +Fset_output_flow_control c-src/emacs/src/keyboard.c /^DEFUN ("set-output-flow-control", Fset_output_flow/ +Fset_quit_char c-src/emacs/src/keyboard.c /^DEFUN ("set-quit-char", Fset_quit_char, Sset_quit_/ +FSRC make-src/Makefile /^FSRC=entry.for entry.strange_suffix entry.strange$/ fstartlist c-src/etags.c 2413 +Fsuspend_emacs c-src/emacs/src/keyboard.c /^DEFUN ("suspend-emacs", Fsuspend_emacs, Ssuspend_e/ ftable tex-src/texinfo.tex /^\\def\\ftable{\\begingroup\\inENV\\obeylines\\obeyspaces/ ftablex tex-src/texinfo.tex /^\\gdef\\ftablex #1^^M{%$/ -func c-src/emacs/src/lisp.h /^ void (*func) (Lisp_Object);$/ +F_takeprec c-src/etags.c /^F_takeprec (void)$/ +Fthis_command_keys c-src/emacs/src/keyboard.c /^DEFUN ("this-command-keys", Fthis_command_keys, St/ +Fthis_command_keys_vector c-src/emacs/src/keyboard.c /^DEFUN ("this-command-keys-vector", Fthis_command_k/ +Fthis_single_command_keys c-src/emacs/src/keyboard.c /^DEFUN ("this-single-command-keys", Fthis_single_co/ +Fthis_single_command_raw_keys c-src/emacs/src/keyboard.c /^DEFUN ("this-single-command-raw-keys", Fthis_singl/ +Ftop_level c-src/emacs/src/keyboard.c /^DEFUN ("top-level", Ftop_level, Stop_level, 0, 0, / +Ftrack_mouse c-src/emacs/src/keyboard.c /^DEFUN ("internal--track-mouse", Ftrack_mouse, Stra/ +FUN0 y-src/parse.y /^yylex FUN0()$/ +FUN1 y-src/parse.y /^str_to_col FUN1(char **,str)$/ +FUN1 y-src/parse.y /^yyerror FUN1(char *, s)$/ +FUN2 y-src/parse.y /^make_list FUN2(YYSTYPE, car, YYSTYPE, cdr)$/ +FUN2 y-src/parse.y /^parse_cell_or_range FUN2(char **,ptr, struct rng */ +func1 c.c /^int func1$/ +func2 c.c /^int func2 (a,b$/ +funcboo c.c /^bool funcboo ()$/ func c-src/emacs/src/lisp.h /^ void (*func) (int);$/ +func c-src/emacs/src/lisp.h /^ void (*func) (Lisp_Object);$/ func c-src/emacs/src/lisp.h /^ void (*func) (void *);$/ func c-src/emacs/src/lisp.h /^ void (*func) (void);$/ -func1 c.c /^int func1$/ -func2 c.c /^int func2 (a,b$/ func_key_syms c-src/emacs/src/keyboard.c 4626 -funcboo c.c /^bool funcboo ()$/ funcpointer c-src/emacs/src/lisp.h 2126 funcptr c-src/h.h /^ fu int (*funcptr) (void *ptr);$/ function c-src/emacs/src/lisp.h 1685 @@ -2730,8 +1550,12 @@ function c-src/emacs/src/lisp.h 2197 function c-src/emacs/src/lisp.h 2985 function c-src/emacs/src/lisp.h 694 function c-src/etags.c 194 -functionp c-src/emacs/src/lisp.h /^functionp (Lisp_Object object)$/ +FUNCTION_KEY_OFFSET c-src/emacs/src/keyboard.c 4766 +FUNCTION_KEY_OFFSET c-src/emacs/src/keyboard.c 5061 functionparens tex-src/texinfo.tex /^\\gdef\\functionparens{\\boldbrax\\let&=\\amprm\\parenco/ +FUNCTIONP c-src/emacs/src/lisp.h /^FUNCTIONP (Lisp_Object obj)$/ +functionp c-src/emacs/src/lisp.h /^functionp (Lisp_Object object)$/ +Funexpand_abbrev c-src/abbrev.c /^DEFUN ("unexpand-abbrev", Funexpand_abbrev, Sunexp/ fval forth-src/test-forth.fth /^fconst fvalue fval$/ fvar forth-src/test-forth.fth /^fvariable fvar$/ fvdef c-src/etags.c 2418 @@ -2740,79 +1564,138 @@ fvnameseen c-src/etags.c 2412 fvnone c-src/etags.c 2408 fwd c-src/emacs/src/lisp.h 2346 fwd c-src/emacs/src/lisp.h 690 -g cp-src/c.C /^ int g(){return 2;};$/ +Fx_get_selection_internal c.c /^DEFUN ("x-get-selection-internal", Fx_get_selectio/ +Fx_get_selection_internal c.c /^ Fx_get_selection_internal, Sx_get_selection/ +Fy_get_selection_internal c.c /^ Fy_get_selection_internal, Sy_get_selection_/ galileo html-src/software.html /^GaliLEO$/ +GatherControls pyt-src/server.py /^ def GatherControls(self):$/ gather pyt-src/server.py /^ def gather(self):$/ +GCALIGNED c-src/emacs/src/lisp.h 288 +GCALIGNED c-src/emacs/src/lisp.h 290 +GCALIGNMENT c-src/emacs/src/lisp.h 243 gc_aset c-src/emacs/src/lisp.h /^gc_aset (Lisp_Object array, ptrdiff_t idx, Lisp_Ob/ +GC_MAKE_GCPROS_NOOPS c-src/emacs/src/lisp.h 3172 gcmarkbit c-src/emacs/src/lisp.h 1974 gcmarkbit c-src/emacs/src/lisp.h 1981 gcmarkbit c-src/emacs/src/lisp.h 2035 gcmarkbit c-src/emacs/src/lisp.h 2113 gcmarkbit c-src/emacs/src/lisp.h 2204 gcmarkbit c-src/emacs/src/lisp.h 656 +GC_MARK_STACK_CHECK_GCPROS c-src/emacs/src/lisp.h 3173 +GC_MARK_STACK c-src/emacs/src/lisp.h 3177 +GCPRO1 c-src/emacs/src/lisp.h /^#define GCPRO1(a) \\$/ +GCPRO1 c-src/emacs/src/lisp.h /^#define GCPRO1(varname) ((void) gcpro1)$/ +GCPRO2 c-src/emacs/src/lisp.h /^#define GCPRO2(a, b) \\$/ +GCPRO2 c-src/emacs/src/lisp.h /^#define GCPRO2(varname1, varname2) ((void) gcpro2,/ +GCPRO3 c-src/emacs/src/lisp.h /^#define GCPRO3(a, b, c) \\$/ +GCPRO3 c-src/emacs/src/lisp.h /^#define GCPRO3(varname1, varname2, varname3) \\$/ +GCPRO4 c-src/emacs/src/lisp.h /^#define GCPRO4(a, b, c, d) \\$/ +GCPRO4 c-src/emacs/src/lisp.h /^#define GCPRO4(varname1, varname2, varname3, varna/ +GCPRO5 c-src/emacs/src/lisp.h /^#define GCPRO5(a, b, c, d, e) \\$/ +GCPRO5 c-src/emacs/src/lisp.h /^#define GCPRO5(varname1, varname2, varname3, varna/ +GCPRO6 c-src/emacs/src/lisp.h /^#define GCPRO6(a, b, c, d, e, f) \\$/ +GCPRO6 c-src/emacs/src/lisp.h /^#define GCPRO6(varname1, varname2, varname3, varna/ +GCPRO7 c-src/emacs/src/lisp.h /^#define GCPRO7(a, b, c, d, e, f, g) \\$/ +GCPRO7 c-src/emacs/src/lisp.h /^#define GCPRO7(a, b, c, d, e, f, g) (GCPRO6 (a, b,/ gcpro c-src/emacs/src/lisp.h 3042 gcpro c-src/emacs/src/lisp.h 3132 -gen_help_event c-src/emacs/src/keyboard.c /^gen_help_event (Lisp_Object help, Lisp_Object fram/ +g cp-src/c.C /^ int g(){return 2;};$/ +GCTYPEBITS c-src/emacs/src/lisp.h 67 +GCTYPEBITS c-src/emacs/src/lisp.h /^DEFINE_GDB_SYMBOL_BEGIN (int, GCTYPEBITS)$/ +GC_USE_GCPROS_AS_BEFORE c-src/emacs/src/lisp.h 3171 +GC_USE_GCPROS_CHECK_ZOMBIES c-src/emacs/src/lisp.h 3174 genalgorithm html-src/algrthms.html /^Generating the Data<\/font><\/i><\/b>$/ generate_warning merc-src/accumulator.m /^:- pred generate_warning(module_info::in, prog_var/ generate_warnings merc-src/accumulator.m /^:- pred generate_warnings(module_info::in, prog_va/ +~generic_object cp-src/clheir.cpp /^generic_object::~generic_object(void)$/ generic_object cp-src/clheir.cpp /^generic_object::generic_object(void)$/ generic_object cp-src/clheir.hpp 13 +GENERIC_PTR y-src/cccp.y 56 +GENERIC_PTR y-src/cccp.y 58 +gen_help_event c-src/emacs/src/keyboard.c /^gen_help_event (Lisp_Object help, Lisp_Object fram/ +GEQ y-src/cccp.c 15 getArchs objc-src/PackInsp.m /^-(void)getArchs$/ -getDomainNames php-src/lce_functions.php /^ function getDomainNames()$/ -getFoo lua-src/test.lua /^function Cube.data.getFoo ()$/ -getPOReader php-src/lce_functions.php /^ function &getPOReader($domain)$/ -getPath objc-src/PackInsp.m /^-(const char *)getPath:(char *)buf forType:(const / -getPos lua-src/test.lua /^function Circle.getPos ()$/ -getPos lua-src/test.lua /^function Rectangle.getPos ()$/ -getTextDomains php-src/lce_functions.php /^ function getTextDomains($lines)$/ +getcjmp c-src/emacs/src/keyboard.c 147 get_compressor_from_suffix c-src/etags.c /^get_compressor_from_suffix (char *file, char **ext/ get_contiguous_space c-src/emacs/src/gmalloc.c /^get_contiguous_space (ptrdiff_t size, void *positi/ get_current_dir_name c-src/emacs/src/gmalloc.c 33 +getDomainNames php-src/lce_functions.php /^ function getDomainNames()$/ +getFoo lua-src/test.lua /^function Cube.data.getFoo ()$/ get_input_pending c-src/emacs/src/keyboard.c /^get_input_pending (int flags)$/ get_language_from_filename c-src/etags.c /^get_language_from_filename (char *file, int case_s/ get_language_from_interpreter c-src/etags.c /^get_language_from_interpreter (char *interpreter)$/ get_language_from_langname c-src/etags.c /^get_language_from_langname (const char *name)$/ +GetLayerByName lua-src/allegro.lua /^function GetLayerByName (name)$/ get_layer_by_name lua-src/allegro.lua /^local function get_layer_by_name (sprite, layer, n/ -get_tag c-src/etags.c /^get_tag (register char *bp, char **namepp)$/ -get_word c-src/tab.c /^static char *get_word(char **str, char delim)$/ -getcjmp c-src/emacs/src/keyboard.c 147 -getopt perl-src/yagrip.pl /^sub getopt {$/ -getopt.o make-src/Makefile /^getopt.o: emacs\/lib-src\/getopt.c$/ +GetNameList pas-src/common.pas /^function GetNameList; (* : BinNodePointer;*)$/ +GetNewNameListNode pas-src/common.pas /^function GetNewNameListNode;(*($/ getopt1.o make-src/Makefile /^getopt1.o: emacs\/lib-src\/getopt1.c$/ +_GETOPT_H c-src/getopt.h 19 +GETOPTOBJS make-src/Makefile /^GETOPTOBJS= #getopt.o getopt1.o$/ +getopt.o make-src/Makefile /^getopt.o: emacs\/lib-src\/getopt.c$/ +getopt perl-src/yagrip.pl /^sub getopt {$/ +Get_Own_Priority/f ada-src/2ataspri.adb /^ function Get_Own_Priority return System.Any_Pri/ +Get_Own_Priority/f ada-src/2ataspri.ads /^ function Get_Own_Priority return System.Any_Pri/ +getPath objc-src/PackInsp.m /^-(const char *)getPath:(char *)buf forType:(const / +getPOReader php-src/lce_functions.php /^ function &getPOReader($domain)$/ +getPos lua-src/test.lua /^function Circle.getPos ()$/ +getPos lua-src/test.lua /^function Rectangle.getPos ()$/ +Get_Priority/f ada-src/2ataspri.adb /^ function Get_Priority (T : TCB_Ptr) return Syst/ +Get_Priority/f ada-src/2ataspri.ads /^ function Get_Priority (T : TCB_Ptr) return Syst/ getptys objc-src/Subprocess.m /^getptys (int *master, int *slave)$/ +get_tag c-src/etags.c /^get_tag (register char *bp, char **namepp)$/ +getTextDomains php-src/lce_functions.php /^ function getTextDomains($lines)$/ gettext php-src/lce_functions.php /^ function gettext($msgid)$/ +GetTextRef pas-src/common.pas /^function GetTextRef;(*($/ +GetUniqueLayerName lua-src/allegro.lua /^function GetUniqueLayerName ()$/ +get_word c-src/tab.c /^static char *get_word(char **str, char delim)$/ +GE y-src/parse.c 8 ggg c-src/h.h 10 ghi1 c-src/h.h 36 ghi2 c-src/h.h 39 giallo cp-src/c.C 40 glider cp-src/conway.cpp /^void glider(int x, int y)$/ gloggingall tex-src/texinfo.tex /^\\def\\gloggingall{\\begingroup \\globaldefs = 1 \\logg/ +/gn ps-src/rfc1245.ps /^\/gn { $/ gnu html-src/software.html /^Free software that I wrote for the GNU project or / +_GNU_SOURCE c-src/etags.c 94 gobble_input c-src/emacs/src/keyboard.c /^gobble_input (void)$/ goto-tag-location-function el-src/emacs/lisp/progmodes/etags.el /^(defvar goto-tag-location-function nil$/ goto_xy cp-src/screen.cpp /^void goto_xy(unsigned char x, unsigned char y)$/ +/G ps-src/rfc1245.ps /^\/G { $/ +/graymode ps-src/rfc1245.ps /^\/graymode true def$/ +/grayness ps-src/rfc1245.ps /^\/grayness {$/ +GREEN cp-src/screen.hpp 14 group tex-src/texinfo.tex /^\\def\\group{\\begingroup$/ -gtr tex-src/texinfo.tex /^\\def\\gtr{\\realbackslash gtr}$/ +GROW_RAW_KEYBUF c-src/emacs/src/keyboard.c 119 gtr tex-src/texinfo.tex /^\\def\\gtr{\\realbackslash gtr}%$/ -handleList pyt-src/server.py /^ def handleList(self, event):$/ -handleNew pyt-src/server.py /^ def handleNew(self, event):$/ +gtr tex-src/texinfo.tex /^\\def\\gtr{\\realbackslash gtr}$/ +/guillemotleft ps-src/rfc1245.ps /^\/guillemotleft \/guillemotright \/ellipsis \/.notdef / handle_async_input c-src/emacs/src/keyboard.c /^handle_async_input (void)$/ handle_input_available_signal c-src/emacs/src/keyboard.c /^handle_input_available_signal (int sig)$/ handle_interrupt c-src/emacs/src/keyboard.c /^handle_interrupt (bool in_signal_handler)$/ handle_interrupt_signal c-src/emacs/src/keyboard.c /^handle_interrupt_signal (int sig)$/ -handle_user_signal c-src/emacs/src/keyboard.c /^handle_user_signal (int sig)$/ +handleList pyt-src/server.py /^ def handleList(self, event):$/ +handleNew pyt-src/server.py /^ def handleNew(self, event):$/ handler c-src/emacs/src/lisp.h 3023 handlertype c-src/emacs/src/lisp.h 3021 +handle_user_signal c-src/emacs/src/keyboard.c /^handle_user_signal (int sig)$/ has_arg c-src/getopt.h 82 hash c-src/emacs/src/lisp.h 1843 hash c-src/etags.c /^hash (const char *str, int len)$/ -hash_table_test c-src/emacs/src/lisp.h 1805 hashfn c-src/emacs/src/lisp.h /^ EMACS_UINT (*hashfn) (struct hash_table_test *t,/ -hat tex-src/texinfo.tex /^\\def\\hat{\\realbackslash hat}$/ +HASH_HASH c-src/emacs/src/lisp.h /^HASH_HASH (struct Lisp_Hash_Table *h, ptrdiff_t id/ +HASH_INDEX c-src/emacs/src/lisp.h /^HASH_INDEX (struct Lisp_Hash_Table *h, ptrdiff_t i/ +HASH_KEY c-src/emacs/src/lisp.h /^HASH_KEY (struct Lisp_Hash_Table *h, ptrdiff_t idx/ +HASH_NEXT c-src/emacs/src/lisp.h /^HASH_NEXT (struct Lisp_Hash_Table *h, ptrdiff_t id/ +HASH_TABLE_P c-src/emacs/src/lisp.h /^HASH_TABLE_P (Lisp_Object a)$/ +HASH_TABLE_SIZE c-src/emacs/src/lisp.h /^HASH_TABLE_SIZE (struct Lisp_Hash_Table *h)$/ +hash_table_test c-src/emacs/src/lisp.h 1805 +HASH_VALUE c-src/emacs/src/lisp.h /^HASH_VALUE (struct Lisp_Hash_Table *h, ptrdiff_t i/ hat tex-src/texinfo.tex /^\\def\\hat{\\realbackslash hat}%$/ +hat tex-src/texinfo.tex /^\\def\\hat{\\realbackslash hat}$/ +HAVE_NTGUI c-src/etags.c 116 hdr c-src/emacs/src/gmalloc.c 1865 -head_table c-src/emacs/src/keyboard.c 11027 header c-src/emacs/src/lisp.h 1371 header c-src/emacs/src/lisp.h 1388 header c-src/emacs/src/lisp.h 1581 @@ -2820,24 +1703,52 @@ header c-src/emacs/src/lisp.h 1610 header c-src/emacs/src/lisp.h 1672 header c-src/emacs/src/lisp.h 1826 header_size c-src/emacs/src/lisp.h 1471 -heading tex-src/texinfo.tex /^\\def\\heading{\\parsearg\\secheadingi}$/ +HEADINGSafter tex-src/texinfo.tex /^\\def\\HEADINGSafter{\\let\\HEADINGShook=\\HEADINGSdoub/ +HEADINGSdoubleafter tex-src/texinfo.tex /^\\let\\HEADINGSdoubleafter=\\HEADINGSafter$/ +HEADINGSdouble tex-src/texinfo.tex /^\\def\\HEADINGSdouble{$/ +HEADINGSdoublex tex-src/texinfo.tex /^\\def\\HEADINGSdoublex{%$/ +HEADINGShook tex-src/texinfo.tex /^\\def\\HEADINGSafter{\\let\\HEADINGShook=\\HEADINGSdoub/ +HEADINGShook tex-src/texinfo.tex /^\\def\\HEADINGSsingleafter{\\let\\HEADINGShook=\\HEADIN/ +HEADINGShook tex-src/texinfo.tex /^\\let\\HEADINGShook=\\relax$/ +HEADINGSoff tex-src/texinfo.tex /^\\def\\HEADINGSoff{$/ +HEADINGSon tex-src/texinfo.tex /^\\def\\HEADINGSon{\\HEADINGSdouble}$/ +HEADINGSon tex-src/texinfo.tex /^\\global\\def\\HEADINGSon{\\HEADINGSdouble}}$/ +HEADINGSon tex-src/texinfo.tex /^\\global\\def\\HEADINGSon{\\HEADINGSsingle}}$/ +HEADINGSsingleafter tex-src/texinfo.tex /^\\def\\HEADINGSsingleafter{\\let\\HEADINGShook=\\HEADIN/ +HEADINGSsingle tex-src/texinfo.tex /^\\def\\HEADINGSsingle{$/ +HEADINGSsinglex tex-src/texinfo.tex /^\\def\\HEADINGSsinglex{%$/ headings tex-src/texinfo.tex /^\\def\\headings #1 {\\csname HEADINGS#1\\endcsname}$/ +heading tex-src/texinfo.tex /^\\def\\heading{\\parsearg\\secheadingi}$/ +head_table c-src/emacs/src/keyboard.c 11027 +_heapbase c-src/emacs/src/gmalloc.c 356 +HEAP c-src/emacs/src/gmalloc.c 131 +_heapindex c-src/emacs/src/gmalloc.c 365 +_heapinfo c-src/emacs/src/gmalloc.c 359 +_heaplimit c-src/emacs/src/gmalloc.c 368 heapsize c-src/emacs/src/gmalloc.c 362 hello scm-src/test.scm /^(define hello "Hello, Emacs!")$/ hello scm-src/test.scm /^(set! hello "Hello, world!")$/ hello-world scm-src/test.scm /^(define (hello-world)$/ -help c-src/etags.c 193 -helpPanel objcpp-src/SimpleCalc.M /^- helpPanel:sender$/ help_char_p c-src/emacs/src/keyboard.c /^help_char_p (Lisp_Object c)$/ +help c-src/etags.c 193 help_form_saved_window_configs c-src/emacs/src/keyboard.c 2156 +helpPanel objcpp-src/SimpleCalc.M /^- helpPanel:sender$/ helpwin pyt-src/server.py /^def helpwin(helpdict):$/ hide_cursor cp-src/screen.cpp /^void hide_cursor(void)$/ hlds merc-src/accumulator.m /^:- import_module hlds.$/ +/home/www/pub/etags.c.gz make-src/Makefile /^\/home\/www\/pub\/etags.c.gz: etags.c$/ +/home/www/pub/software/unix/etags.tar.gz make-src/Makefile /^\/home\/www\/pub\/software\/unix\/etags.tar.gz: Makefile/ +/H ps-src/rfc1245.ps /^\/H { $/ hsize tex-src/texinfo.tex /^ {\\let\\hsize=\\pagewidth \\makefootline}}$/ +hsize tex-src/texinfo.tex /^{\\let\\hsize=\\pagewidth \\makefootline}}}%$/ hsize tex-src/texinfo.tex /^ {\\let\\hsize=\\pagewidth \\makeheadline}$/ hsize tex-src/texinfo.tex /^\\shipout\\vbox{{\\let\\hsize=\\pagewidth \\makeheadline/ -hsize tex-src/texinfo.tex /^{\\let\\hsize=\\pagewidth \\makefootline}}}%$/ +HTML_help c-src/etags.c 584 +HTML_labels c-src/etags.c /^HTML_labels (FILE *inf)$/ +HTMLSRC make-src/Makefile /^HTMLSRC=softwarelibero.html index.shtml algrthms.h/ +HTML_suffixes c-src/etags.c 582 htmltreelist prol-src/natded.prolog /^htmltreelist([]).$/ +/hx ps-src/rfc1245.ps /^\/hx { $/ hybrid_aligned_alloc c-src/emacs/src/gmalloc.c /^hybrid_aligned_alloc (size_t alignment, size_t siz/ hybrid_calloc c-src/emacs/src/gmalloc.c /^hybrid_calloc (size_t nmemb, size_t size)$/ hybrid_free c-src/emacs/src/gmalloc.c /^hybrid_free (void *ptr)$/ @@ -2845,59 +1756,58 @@ hybrid_get_current_dir_name c-src/emacs/src/gmalloc.c /^hybrid_get_current_dir_n hybrid_malloc c-src/emacs/src/gmalloc.c /^hybrid_malloc (size_t size)$/ hybrid_realloc c-src/emacs/src/gmalloc.c /^hybrid_realloc (void *ptr, size_t size)$/ hypothetical_mem prol-src/natded.prolog /^hypothetical_mem(fi(N),Ass,_):-$/ +/iacute ps-src/rfc1245.ps /^\/iacute \/igrave \/icircumflex \/idieresis \/ntilde \/o/ +ialpage tex-src/texinfo.tex /^ \\availdimen@=\\pageheight \\advance\\availdimen@ by/ +ialpage tex-src/texinfo.tex /^\\def\\pagesofar{\\unvbox\\partialpage %$/ +ialpage tex-src/texinfo.tex /^ \\dimen@=\\pageheight \\advance\\dimen@ by-\\ht\\pa/ +ialpage tex-src/texinfo.tex /^ \\dimen@=\\pageheight \\advance\\dimen@ by-\\ht\\parti/ +ialpage tex-src/texinfo.tex /^\\newbox\\partialpage$/ +ialpage tex-src/texinfo.tex /^ \\output={\\global\\setbox\\partialpage=$/ +i c.c 169 +/Icircumflex ps-src/rfc1245.ps /^\/Icircumflex \/Idieresis \/Igrave \/Oacute \/Ocircumfl/ +i cp-src/c.C 132 +/ic ps-src/rfc1245.ps /^\/ic [ $/ i c-src/c.c 2 i c-src/emacs/src/lisp.h 4673 i c-src/emacs/src/lisp.h 4679 i c-src/emacs/src/lisp.h 567 -i c.c 169 -i cp-src/c.C 132 -i tex-src/texinfo.tex /^\\def\\i##1{\\realbackslash i {##1}}$/ -i tex-src/texinfo.tex /^\\def\\i##1{\\realbackslash i {##1}}%$/ -i tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ -i tex-src/texinfo.tex /^\\let\\i=\\indexdummyfont$/ -i tex-src/texinfo.tex /^\\let\\i=\\smartitalic$/ -ialpage tex-src/texinfo.tex /^ \\dimen@=\\pageheight \\advance\\dimen@ by-\\ht\\pa/ -ialpage tex-src/texinfo.tex /^ \\availdimen@=\\pageheight \\advance\\availdimen@ by/ -ialpage tex-src/texinfo.tex /^ \\dimen@=\\pageheight \\advance\\dimen@ by-\\ht\\parti/ -ialpage tex-src/texinfo.tex /^ \\output={\\global\\setbox\\partialpage=$/ -ialpage tex-src/texinfo.tex /^\\def\\pagesofar{\\unvbox\\partialpage %$/ -ialpage tex-src/texinfo.tex /^\\newbox\\partialpage$/ identify_goal_type merc-src/accumulator.m /^:- pred identify_goal_type(pred_id::in, proc_id::i/ identify_out_and_out_prime merc-src/accumulator.m /^:- pred identify_out_and_out_prime(module_info::in/ identify_recursive_calls merc-src/accumulator.m /^:- pred identify_recursive_calls(pred_id::in, proc/ idx c-src/emacs/src/lisp.h 3150 -ifclear tex-src/texinfo.tex /^\\def\\ifclear{\\begingroup\\ignoresections\\parsearg\\i/ +IEEE_FLOATING_POINT c-src/emacs/src/lisp.h 2415 ifclearfail tex-src/texinfo.tex /^\\def\\ifclearfail{\\begingroup\\ignoresections\\ifclea/ ifclearfailxxx tex-src/texinfo.tex /^\\long\\def\\ifclearfailxxx #1\\end ifclear{\\endgroup\\/ +ifclear tex-src/texinfo.tex /^\\def\\ifclear{\\begingroup\\ignoresections\\parsearg\\i/ ifclearxxx tex-src/texinfo.tex /^\\def\\ifclearxxx #1{\\endgroup$/ ifinfo tex-src/texinfo.tex /^\\def\\ifinfo{\\begingroup\\ignoresections\\ifinfoxxx}$/ ifinfoxxx tex-src/texinfo.tex /^\\long\\def\\ifinfoxxx #1\\end ifinfo{\\endgroup\\ignore/ -ifset tex-src/texinfo.tex /^\\def\\ifset{\\begingroup\\ignoresections\\parsearg\\ifs/ ifsetfail tex-src/texinfo.tex /^\\def\\ifsetfail{\\begingroup\\ignoresections\\ifsetfai/ ifsetfailxxx tex-src/texinfo.tex /^\\long\\def\\ifsetfailxxx #1\\end ifset{\\endgroup\\igno/ +ifset tex-src/texinfo.tex /^\\def\\ifset{\\begingroup\\ignoresections\\parsearg\\ifs/ ifsetxxx tex-src/texinfo.tex /^\\def\\ifsetxxx #1{\\endgroup$/ iftex tex-src/texinfo.tex /^\\def\\iftex{}$/ ifusingtt tex-src/texinfo.tex /^\\def\\ifusingtt#1#2{\\ifdim \\fontdimen3\\the\\font=0pt/ -ignore tex-src/texinfo.tex /^\\def\\ignore{\\begingroup\\ignoresections$/ ignore_case c-src/etags.c 266 ignore_mouse_drag_p c-src/emacs/src/keyboard.c 1256 ignoresections tex-src/texinfo.tex /^\\def\\ignoresections{%$/ +ignore tex-src/texinfo.tex /^\\def\\ignore{\\begingroup\\ignoresections$/ ignorexxx tex-src/texinfo.tex /^\\long\\def\\ignorexxx #1\\end ignore{\\endgroup\\ignore/ ii tex-src/texinfo.tex /^\\def\\ii#1{{\\it #1}} % italic font$/ +IMAGEP c-src/emacs/src/lisp.h /^IMAGEP (Lisp_Object x)$/ immediate_quit c-src/emacs/src/keyboard.c 174 impatto html-src/softwarelibero.html /^Impatto pratico del software libero$/ implementation merc-src/accumulator.m /^:- implementation.$/ implicitmath tex-src/texinfo.tex /^\\let\\implicitmath = $$/ -inENV tex-src/texinfo.tex /^\\newif\\ifENV \\ENVfalse \\def\\inENV{\\ifENV\\relax\\els/ -in_word_set c-src/etags.c /^in_word_set (register const char *str, register un/ inattribute c-src/etags.c 2400 inc cp-src/Range.h /^ double inc (void) const { return rng_inc; }$/ +/inch ps-src/rfc1245.ps /^\/inch {72 mul} def$/ include tex-src/texinfo.tex /^\\def\\include{\\parsearg\\includezzz}$/ includezzz tex-src/texinfo.tex /^\\def\\includezzz #1{{\\def\\thisfile{#1}\\input #1$/ indbf tex-src/texinfo.tex /^\\let\\indbf=\\indrm$/ -index c-src/emacs/src/lisp.h 1856 indexbackslash tex-src/texinfo.tex /^ \\def\\indexbackslash{\\rawbackslashxx}$/ indexbackslash tex-src/texinfo.tex /^\\let\\indexbackslash=0 %overridden during \\printin/ +index c-src/emacs/src/lisp.h 1856 indexdotfill tex-src/texinfo.tex /^\\def\\indexdotfill{\\cleaders$/ indexdummies tex-src/texinfo.tex /^\\def\\indexdummies{%$/ indexdummydots tex-src/texinfo.tex /^\\def\\indexdummydots{...}$/ @@ -2911,70 +1821,104 @@ indsc tex-src/texinfo.tex /^\\let\\indsc=\\indrm$/ indsf tex-src/texinfo.tex /^\\let\\indsf=\\indrm$/ indsl tex-src/texinfo.tex /^\\let\\indsl=\\indit$/ indtt tex-src/texinfo.tex /^\\let\\indtt=\\ninett$/ +inENV tex-src/texinfo.tex /^\\newif\\ifENV \\ENVfalse \\def\\inENV{\\ifENV\\relax\\els/ infabsdir c-src/etags.c 206 infabsname c-src/etags.c 205 infiles make-src/Makefile /^infiles = $(filter-out ${NONSRCS},${SRCS}) srclist/ infname c-src/etags.c 204 -info c-src/emacs/src/gmalloc.c 157 -infoPanel objcpp-src/SimpleCalc.M /^- infoPanel:sender$/ -infoappendix tex-src/texinfo.tex /^\\def\\infoappendix{\\parsearg\\appendixzzz}$/ infoappendixsec tex-src/texinfo.tex /^\\def\\infoappendixsec{\\parsearg\\appendixseczzz}$/ infoappendixsubsec tex-src/texinfo.tex /^\\def\\infoappendixsubsec{\\parsearg\\appendixsubseczz/ infoappendixsubsubsec tex-src/texinfo.tex /^\\def\\infoappendixsubsubsec{\\parsearg\\appendixsubsu/ +infoappendix tex-src/texinfo.tex /^\\def\\infoappendix{\\parsearg\\appendixzzz}$/ infochapter tex-src/texinfo.tex /^\\def\\infochapter{\\parsearg\\chapterzzz}$/ +info c-src/emacs/src/gmalloc.c 157 +infoPanel objcpp-src/SimpleCalc.M /^- infoPanel:sender$/ inforef tex-src/texinfo.tex /^\\def\\inforef #1{\\inforefzzz #1,,,,**}$/ inforefzzz tex-src/texinfo.tex /^\\def\\inforefzzz #1,#2,#3,#4**{See Info file \\file{/ infosection tex-src/texinfo.tex /^\\def\\infosection{\\parsearg\\sectionzzz}$/ infosubsection tex-src/texinfo.tex /^\\def\\infosubsection{\\parsearg\\subsectionzzz}$/ infosubsubsection tex-src/texinfo.tex /^\\def\\infosubsubsection{\\parsearg\\subsubsectionzzz}/ infotop tex-src/texinfo.tex /^\\def\\infotop{\\parsearg\\unnumberedzzz}$/ -infounnumbered tex-src/texinfo.tex /^\\def\\infounnumbered{\\parsearg\\unnumberedzzz}$/ infounnumberedsec tex-src/texinfo.tex /^\\def\\infounnumberedsec{\\parsearg\\unnumberedseczzz}/ infounnumberedsubsec tex-src/texinfo.tex /^\\def\\infounnumberedsubsec{\\parsearg\\unnumberedsubs/ infounnumberedsubsubsec tex-src/texinfo.tex /^\\def\\infounnumberedsubsubsec{\\parsearg\\unnumbereds/ -init c-src/etags.c /^init (void)$/ -init objc-src/Subprocess.m /^ andStdErr:(BOOL)wantsStdErr$/ -init objc-src/Subprocess.m /^- init:(const char *)subprocessString$/ -init objcpp-src/SimpleCalc.M /^- init$/ +infounnumbered tex-src/texinfo.tex /^\\def\\infounnumbered{\\parsearg\\unnumberedzzz}$/ +inita c.c /^static void inita () {}$/ +initb c.c /^static void initb () {}$/ init_control c.c 239 +init c-src/etags.c /^init (void)$/ +Initialize_Cond/p ada-src/2ataspri.adb /^ procedure Initialize_Cond (Cond : in out Condit/ +Initialize_Cond/p ada-src/2ataspri.ads /^ procedure Initialize_Cond (Cond : in out Condit/ +initialize_goal_store merc-src/accumulator.m /^:- func initialize_goal_store(list(hlds_goal), ins/ +Initialize_LL_Tasks/p ada-src/2ataspri.adb /^ procedure Initialize_LL_Tasks (T : TCB_Ptr) is$/ +Initialize_LL_Tasks/p ada-src/2ataspri.ads /^ procedure Initialize_LL_Tasks (T : TCB_Ptr);$/ +Initialize_Lock/p ada-src/2ataspri.adb /^ procedure Initialize_Lock$/ +Initialize_Lock/p ada-src/2ataspri.ads /^ procedure Initialize_Lock (Prio : System.Any_Pr/ +initialize-new-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun initialize-new-tags-table ()$/ +initialize_random_junk y-src/cccp.y /^initialize_random_junk ()$/ +InitializeStringPackage pas-src/common.pas /^procedure InitializeStringPackage;$/ +Initialize_TAS_Cell/p ada-src/2ataspri.adb /^ procedure Initialize_TAS_Cell (Cell : out TAS_C/ +Initialize_TAS_Cell/p ada-src/2ataspri.ads /^ procedure Initialize_TAS_Cell (Cell : out TA/ +initial_kboard c-src/emacs/src/keyboard.c 84 +initial tex-src/texinfo.tex /^\\def\\initial #1{%$/ init_kboard c-src/emacs/src/keyboard.c /^init_kboard (KBOARD *kb, Lisp_Object type)$/ init_keyboard c-src/emacs/src/keyboard.c /^init_keyboard (void)$/ +InitNameList pas-src/common.pas /^procedure InitNameList;$/ +InitNameStringPool pas-src/common.pas /^procedure InitNameStringPool;$/ +init objcpp-src/SimpleCalc.M /^- init$/ +init objc-src/Subprocess.m /^ andStdErr:(BOOL)wantsStdErr$/ +init objc-src/Subprocess.m /^- init:(const char *)subprocessString$/ +__init__ pyt-src/server.py /^ def __init__(self):$/ +__init__ pyt-src/server.py /^ def __init__(self, host, sitelist, master=None/ +__init__ pyt-src/server.py /^ def __init__(self, master=None):$/ +__init__ pyt-src/server.py /^ def __init__(self, Master, text, textvar, widt/ +__init__ pyt-src/server.py /^ def __init__(self, newlegend, list, editor, ma/ +__init__ pyt-src/server.py /^ def __init__(self, user, userlist, master=None/ init_registry cp-src/clheir.cpp /^void init_registry(void)$/ init_tool_bar_items c-src/emacs/src/keyboard.c /^init_tool_bar_items (Lisp_Object reuse)$/ -inita c.c /^static void inita () {}$/ -initb c.c /^static void initb () {}$/ -initial tex-src/texinfo.tex /^\\def\\initial #1{%$/ -initial_kboard c-src/emacs/src/keyboard.c 84 -initialize-new-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun initialize-new-tags-table ()$/ -initialize_goal_store merc-src/accumulator.m /^:- func initialize_goal_store(list(hlds_goal), ins/ -initialize_random_junk y-src/cccp.y /^initialize_random_junk ()$/ -input-pending-p c-src/emacs/src/keyboard.c /^DEFUN ("input-pending-p", Finput_pending_p, Sinput/ +Inner1/b ada-src/etags-test-for.ada /^ package body Inner1 is$/ +Inner1/b ada-src/waroquiers.ada /^ package body Inner1 is$/ +Inner1/s ada-src/etags-test-for.ada /^ package Inner1 is$/ +Inner1/s ada-src/waroquiers.ada /^ package Inner1 is$/ +Inner2/b ada-src/etags-test-for.ada /^ package body Inner2 is$/ +Inner2/b ada-src/waroquiers.ada /^ package body Inner2 is$/ +Inner2/s ada-src/etags-test-for.ada /^ package Inner2 is$/ +Inner2/s ada-src/waroquiers.ada /^ package Inner2 is$/ input_available_clear_time c-src/emacs/src/keyboard.c 324 +INPUT_EVENT_POS_MAX c-src/emacs/src/keyboard.c 3698 +INPUT_EVENT_POS_MIN c-src/emacs/src/keyboard.c 3701 input_pending c-src/emacs/src/keyboard.c 239 +input-pending-p c-src/emacs/src/keyboard.c /^DEFUN ("input-pending-p", Finput_pending_p, Sinput/ input_polling_used c-src/emacs/src/keyboard.c /^input_polling_used (void)$/ input_was_pending c-src/emacs/src/keyboard.c 287 insert-abbrev-table-description c-src/abbrev.c /^DEFUN ("insert-abbrev-table-description", Finsert_/ insertion_type c-src/emacs/src/lisp.h 1989 insertname pas-src/common.pas /^function insertname;(*($/ -instance_method ruby-src/test.rb /^ def instance_method$/ +INSERT_TREE_NODE pas-src/common.pas /^procedure INSERT_TREE_NODE;(*( $/ +Install_Abort_Handler/p ada-src/2ataspri.adb /^ procedure Install_Abort_Handler (Handler : Abor/ +Install_Abort_Handler/p ada-src/2ataspri.ads /^ procedure Install_Abort_Handler (Handler : Abor/ +Install_Error_Handler/p ada-src/2ataspri.adb /^ procedure Install_Error_Handler (Handler : Syst/ +Install_Error_Handler/p ada-src/2ataspri.ads /^ procedure Install_Error_Handler (Handler : Syst/ instance_method_equals= ruby-src/test.rb /^ def instance_method_equals=$/ instance_method_exclamation! ruby-src/test.rb /^ def instance_method_exclamation!$/ instance_method_question? ruby-src/test.rb /^ def instance_method_question?$/ -instr y-src/parse.y 81 +instance_method ruby-src/test.rb /^ def instance_method$/ +INSTANTIATE_MDIAGARRAY_FRIENDS cp-src/MDiagArray2.h /^#define INSTANTIATE_MDIAGARRAY_FRIENDS(T) \\$/ instruct c-src/etags.c 2527 -int merc-src/accumulator.m /^:- import_module int.$/ -intNumber go-src/test1.go 13 +instr y-src/parse.y 81 +INT_BIT c-src/emacs/src/gmalloc.c 124 +INT c-src/h.h 32 integer c-src/emacs/src/lisp.h 2127 -integer y-src/cccp.y 112 integer_overflow y-src/cccp.y /^integer_overflow ()$/ +INTEGERP c-src/emacs/src/lisp.h /^# define INTEGERP(x) lisp_h_INTEGERP (x)$/ +INTEGER_TO_CONS c-src/emacs/src/lisp.h /^#define INTEGER_TO_CONS(i) \\$/ integertonmstr pas-src/common.pas /^function integertonmstr; (* (TheInteger : integer)/ +integer y-src/cccp.y 112 intensity1 f-src/entry.for /^ & intensity1(efv,fv,svin,svquad,sfpv,maxp,val/ intensity1 f-src/entry.strange /^ & intensity1(efv,fv,svin,svquad,sfpv,maxp,val/ intensity1 f-src/entry.strange_suffix /^ & intensity1(efv,fv,svin,svquad,sfpv,maxp,val/ -interface merc-src/accumulator.m /^:- interface.$/ interface_locate c-src/c.c /^interface_locate(void)$/ -intern c-src/emacs/src/lisp.h /^intern (const char *str)$/ -intern_c_string c-src/emacs/src/lisp.h /^intern_c_string (const char *str)$/ +interface merc-src/accumulator.m /^:- interface.$/ internalBitem tex-src/texinfo.tex /^\\def\\internalBitem{\\smallbreak \\parsearg\\itemzzz}$/ internalBitemx tex-src/texinfo.tex /^\\def\\internalBitemx{\\par \\parsearg\\itemzzz}$/ internalBkitem tex-src/texinfo.tex /^\\def\\internalBkitem{\\smallbreak \\parsearg\\kitemzzz/ @@ -2983,87 +1927,123 @@ internalBxitem tex-src/texinfo.tex /^\\def\\internalBxitem "#1"{\\def\\xitemsubt internalBxitemx tex-src/texinfo.tex /^\\def\\internalBxitemx "#1"{\\def\\xitemsubtopix{#1} \\/ internal_last_event_frame c-src/emacs/src/keyboard.c 228 internalsetq tex-src/texinfo.tex /^\\def\\internalsetq #1#2{'xrdef {#1}{\\csname #2\\endc/ +intern c-src/emacs/src/lisp.h /^intern (const char *str)$/ +intern_c_string c-src/emacs/src/lisp.h /^intern_c_string (const char *str)$/ interned c-src/emacs/src/lisp.h 672 interpreters c-src/etags.c 197 -interrupt_input c-src/emacs/src/keyboard.c 328 interrupt_input_blocked c-src/emacs/src/keyboard.c 76 interrupt_input_blocked c-src/emacs/src/lisp.h 3048 +interrupt_input c-src/emacs/src/keyboard.c 328 interrupts_deferred c-src/emacs/src/keyboard.c 331 +INTERVAL c-src/emacs/src/lisp.h 1149 +INTMASK c-src/emacs/src/lisp.h 437 +int merc-src/accumulator.m /^:- import_module int.$/ +intNumber go-src/test1.go 13 intoken c-src/etags.c /^#define intoken(c) (_itk[CHAR (c)]) \/* c can be in/ intspec c-src/emacs/src/lisp.h 1688 +INTTYPEBITS c-src/emacs/src/lisp.h 249 +INT_TYPE_SIZE y-src/cccp.y 91 intvar c-src/emacs/src/lisp.h 2277 +INT y-src/cccp.c 6 invalidate_nodes c-src/etags.c /^invalidate_nodes (fdesc *badfdp, node **npp)$/ +Invoking gzip tex-src/gzip.texi /^@node Invoking gzip, Advanced usage, Sample, Top$/ +in_word_set c-src/etags.c /^in_word_set (register const char *str, register un/ io merc-src/accumulator.m /^:- import_module io.$/ -ipc3dCSC19 cp-src/c.C 6 +IpAddrKind rs-src/test.rs 3 ipc3dChannelType cp-src/c.C 1 +ipc3dCSC19 cp-src/c.C 6 ipc3dIslandHierarchy cp-src/c.C 1 ipc3dLinkControl cp-src/c.C 1 -irregular_location cp-src/clheir.hpp /^ irregular_location(double xi, double yi, doubl/ +__ip c.c 159 +/ip ps-src/rfc1245.ps /^\/ip { $/ +/i ps-src/rfc1245.ps /^\/i \/j \/k \/l \/m \/n \/o \/p \/q \/r \/s \/t \/u \/v \/w \/x \/y/ irregular_location cp-src/clheir.hpp 47 -isComment php-src/lce_functions.php /^ function isComment($class)$/ -isHoliday cp-src/functions.cpp /^bool isHoliday ( Date d ){$/ -isLeap cp-src/functions.cpp /^bool isLeap ( int year ){$/ +irregular_location cp-src/clheir.hpp /^ irregular_location(double xi, double yi, doubl/ +ISALNUM c-src/etags.c /^#define ISALNUM(c) isalnum (CHAR (c))$/ +ISALPHA c-src/etags.c /^#define ISALPHA(c) isalpha (CHAR (c))$/ is_associative_construction merc-src/accumulator.m /^:- pred is_associative_construction(module_info::i/ +isComment php-src/lce_functions.php /^ function isComment($class)$/ +IsControlCharName pas-src/common.pas /^function IsControlCharName($/ +IsControlChar pas-src/common.pas /^function IsControlChar; (*($/ is_curly_brace_form c-src/h.h 54 +IS_DAEMON c-src/emacs/src/lisp.h 4257 +IS_DAEMON c-src/emacs/src/lisp.h 4261 +ISDIGIT c-src/etags.c /^#define ISDIGIT(c) isdigit (CHAR (c))$/ is_explicit c-src/h.h 49 is_func c-src/etags.c 221 +isHoliday cp-src/functions.cpp /^bool isHoliday ( Date d ){$/ is_hor_space y-src/cccp.y 953 is_idchar y-src/cccp.y 948 is_idstart y-src/cccp.y 950 +isLeap cp-src/functions.cpp /^bool isLeap ( int year ){$/ +ISLOWER c-src/etags.c /^#define ISLOWER(c) islower (CHAR (c))$/ is_muldiv_operation cp-src/c.C /^is_muldiv_operation(pc)$/ -is_ordset prol-src/ordsets.prolog /^is_ordset(X) :- var(X), !, fail.$/ -is_recursive_case merc-src/accumulator.m /^:- pred is_recursive_case(list(hlds_goal)::in, pre/ +ISO_FUNCTION_KEY_OFFSET c-src/emacs/src/keyboard.c 5149 iso_lispy_function_keys c-src/emacs/src/keyboard.c 5151 isoperator prol-src/natded.prolog /^isoperator(Char):-$/ isoptab prol-src/natded.prolog /^isoptab('%').$/ +is_ordset prol-src/ordsets.prolog /^is_ordset(X) :- var(X), !, fail.$/ +is_recursive_case merc-src/accumulator.m /^:- pred is_recursive_case(list(hlds_goal)::in, pre/ +Is_Set/f ada-src/2ataspri.adb /^ function Is_Set (Cell : in TAS_Cell) return Bo/ +Is_Set/f ada-src/2ataspri.ads /^ function Is_Set (Cell : in TAS_Cell)/ +ISUPPER c-src/etags.c /^# define ISUPPER(c) isupper (CHAR (c))$/ iswhite c-src/etags.c /^#define iswhite(c) (_wht[CHAR (c)]) \/* c is white / -item tex-src/texinfo.tex /^\\def\\item{\\errmessage{@item while not in a table}}/ -item tex-src/texinfo.tex /^\\let\\item = \\internalBitem %$/ -item tex-src/texinfo.tex /^\\let\\item=\\itemizeitem}$/ -item_properties c-src/emacs/src/keyboard.c 7568 itemcontents tex-src/texinfo.tex /^\\def\\itemcontents{#1}%$/ itemfont tex-src/texinfo.tex /^\\def\\itemfont{#2}%$/ itemindex tex-src/texinfo.tex /^\\let\\itemindex=#1%$/ -itemize tex-src/texinfo.tex /^\\def\\itemize{\\parsearg\\itemizezzz}$/ itemizeitem tex-src/texinfo.tex /^\\def\\itemizeitem{%$/ +itemize tex-src/texinfo.tex /^\\def\\itemize{\\parsearg\\itemizezzz}$/ itemizey tex-src/texinfo.tex /^\\def\\itemizey #1#2{%$/ itemizezzz tex-src/texinfo.tex /^\\def\\itemizezzz #1{%$/ +item_properties c-src/emacs/src/keyboard.c 7568 +item tex-src/texinfo.tex /^\\def\\item{\\errmessage{@item while not in a table}}/ +item tex-src/texinfo.tex /^\\let\\item = \\internalBitem %$/ +item tex-src/texinfo.tex /^\\let\\item=\\itemizeitem}$/ itemx tex-src/texinfo.tex /^\\def\\itemx{\\errmessage{@itemx while not in a table/ itemx tex-src/texinfo.tex /^\\let\\itemx = \\internalBitemx %$/ itemzzz tex-src/texinfo.tex /^\\def\\itemzzz #1{\\begingroup %$/ +i tex-src/texinfo.tex /^\\def\\i##1{\\realbackslash i {##1}}%$/ +i tex-src/texinfo.tex /^\\def\\i##1{\\realbackslash i {##1}}$/ +i tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ +i tex-src/texinfo.tex /^\\let\\i=\\indexdummyfont$/ +i tex-src/texinfo.tex /^\\let\\i=\\smartitalic$/ ivarheader tex-src/texinfo.tex /^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/ ivarx\defivarheader tex-src/texinfo.tex /^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/ +JAVASRC make-src/Makefile /^JAVASRC=AWTEMul.java KeyEve.java SMan.java SysCol./ jmp c-src/emacs/src/lisp.h 3044 just_read_file c-src/etags.c /^just_read_file (FILE *inf)$/ -kbd tex-src/texinfo.tex /^\\def\\kbd##1{\\realbackslash kbd {##1}}$/ -kbd tex-src/texinfo.tex /^\\def\\kbd##1{\\realbackslash kbd {##1}}%$/ -kbd tex-src/texinfo.tex /^\\def\\kbd#1{\\def\\look{#1}\\expandafter\\kbdfoo\\look??/ -kbd tex-src/texinfo.tex /^\\let\\kbd=\\indexdummyfont$/ kbd_buffer c-src/emacs/src/keyboard.c 291 kbd_buffer_events_waiting c-src/emacs/src/keyboard.c /^kbd_buffer_events_waiting (void)$/ kbd_buffer_get_event c-src/emacs/src/keyboard.c /^kbd_buffer_get_event (KBOARD **kbp,$/ kbd_buffer_nr_stored c-src/emacs/src/keyboard.c /^kbd_buffer_nr_stored (void)$/ +KBD_BUFFER_SIZE c-src/emacs/src/keyboard.c 82 kbd_buffer_store_event c-src/emacs/src/keyboard.c /^kbd_buffer_store_event (register struct input_even/ kbd_buffer_store_event_hold c-src/emacs/src/keyboard.c /^kbd_buffer_store_event_hold (register struct input/ kbd_buffer_store_help_event c-src/emacs/src/keyboard.c /^kbd_buffer_store_help_event (Lisp_Object frame, Li/ kbd_buffer_unget_event c-src/emacs/src/keyboard.c /^kbd_buffer_unget_event (register struct input_even/ kbd_fetch_ptr c-src/emacs/src/keyboard.c 297 -kbd_store_ptr c-src/emacs/src/keyboard.c 302 kbdfoo tex-src/texinfo.tex /^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/ +kbd_store_ptr c-src/emacs/src/keyboard.c 302 +kbd tex-src/texinfo.tex /^\\def\\kbd#1{\\def\\look{#1}\\expandafter\\kbdfoo\\look??/ +kbd tex-src/texinfo.tex /^\\def\\kbd##1{\\realbackslash kbd {##1}}%$/ +kbd tex-src/texinfo.tex /^\\def\\kbd##1{\\realbackslash kbd {##1}}$/ +kbd tex-src/texinfo.tex /^\\let\\kbd=\\indexdummyfont$/ kboard c-src/emacs/src/keyboard.c 860 kboard_stack c-src/emacs/src/keyboard.c 858 kboard_stack c-src/emacs/src/keyboard.c 864 -key tex-src/texinfo.tex /^\\def\\key #1{{\\tt \\exhyphenpenalty=10000\\uppercase{/ -key tex-src/texinfo.tex /^\\def\\key##1{\\realbackslash key {##1}}$/ -key tex-src/texinfo.tex /^\\def\\key##1{\\realbackslash key {##1}}%$/ -key tex-src/texinfo.tex /^\\let\\key=\\indexdummyfont$/ +KBYTES objc-src/PackInsp.m 58 key_and_value c-src/emacs/src/lisp.h 1868 keyremap c-src/emacs/src/keyboard.c 8742 keyremap c-src/emacs/src/keyboard.c 8754 keyremap_step c-src/emacs/src/keyboard.c /^keyremap_step (Lisp_Object *keybuf, int bufsize, v/ keys_of_keyboard c-src/emacs/src/keyboard.c /^keys_of_keyboard (void)$/ -keyval prol-src/natded.prolog /^keyval(key(Key,Val)) --> [Key,'='], valseq(Val).$/ +key tex-src/texinfo.tex /^\\def\\key##1{\\realbackslash key {##1}}%$/ +key tex-src/texinfo.tex /^\\def\\key##1{\\realbackslash key {##1}}$/ +key tex-src/texinfo.tex /^\\def\\key #1{{\\tt \\exhyphenpenalty=10000\\uppercase{/ +key tex-src/texinfo.tex /^\\let\\key=\\indexdummyfont$/ +KEY_TO_CHAR c-src/emacs/src/keyboard.c /^#define KEY_TO_CHAR(k) (XINT (k) & ((1 << CHARACTE/ keyvalcgi prol-src/natded.prolog /^keyvalcgi(Key,Val):-$/ +keyval prol-src/natded.prolog /^keyval(key(Key,Val)) --> [Key,'='], valseq(Val).$/ keyvalscgi prol-src/natded.prolog /^keyvalscgi(KeyVals),$/ keyvalseq prol-src/natded.prolog /^keyvalseq([KeyVal|KeyVals]) --> $/ keyword_parsing y-src/cccp.y 73 @@ -3086,42 +2066,56 @@ kset_local_function_key_map c-src/emacs/src/keyboard.c /^kset_local_function_key kset_overriding_terminal_local_map c-src/emacs/src/keyboard.c /^kset_overriding_terminal_local_map (struct kboard / kset_real_last_command c-src/emacs/src/keyboard.c /^kset_real_last_command (struct kboard *kb, Lisp_Ob/ kset_system_key_syms c-src/emacs/src/keyboard.c /^kset_system_key_syms (struct kboard *kb, Lisp_Obje/ -l tex-src/texinfo.tex /^\\def\\l#1{{\\li #1}\\null} % $/ -l tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ +LabeledEntry pyt-src/server.py /^class LabeledEntry(Frame):$/ labelspace tex-src/texinfo.tex /^\\def\\labelspace{\\hskip1em \\relax}$/ lang c-src/etags.c 208 lang c-src/etags.c 251 lang c-src/etags.c 259 +Lang_function c-src/etags.c 182 +Lang_function c-src/h.h 6 lang_names c-src/etags.c 718 language c-src/etags.c 199 -last-tag el-src/emacs/lisp/progmodes/etags.el /^(defvar last-tag nil$/ last_abbrev_point c-src/abbrev.c 79 +lasta c.c 272 +lastargmargin tex-src/texinfo.tex /^\\newskip\\deflastargmargin \\deflastargmargin=18pt$/ +lastargmargin tex-src/texinfo.tex /^\\setbox0=\\hbox{\\hskip \\deflastargmargin{\\rm #2}\\hs/ last_auto_save c-src/emacs/src/keyboard.c 214 +lastb c.c 278 last_heapinfo c-src/emacs/src/gmalloc.c 403 last_mouse_button c-src/emacs/src/keyboard.c 5215 last_mouse_x c-src/emacs/src/keyboard.c 5216 last_mouse_y c-src/emacs/src/keyboard.c 5217 +lastnode tex-src/texinfo.tex /^\\def\\nodexxx[#1,#2]{\\gdef\\lastnode{#1}}$/ +lastnode tex-src/texinfo.tex /^\\let\\lastnode=\\relax}$/ +lastnode tex-src/texinfo.tex /^\\let\\lastnode=\\relax$/ last_non_minibuf_size c-src/emacs/src/keyboard.c 207 last_point_position c-src/emacs/src/keyboard.c 217 last_state_size c-src/emacs/src/gmalloc.c 402 +last-tag el-src/emacs/lisp/progmodes/etags.el /^(defvar last-tag nil$/ last_undo_boundary c-src/emacs/src/keyboard.c 1287 -lasta c.c 272 -lastargmargin tex-src/texinfo.tex /^\\newskip\\deflastargmargin \\deflastargmargin=18pt$/ -lastargmargin tex-src/texinfo.tex /^\\setbox0=\\hbox{\\hskip \\deflastargmargin{\\rm #2}\\hs/ -lastb c.c 278 -lastnode tex-src/texinfo.tex /^\\def\\nodexxx[#1,#2]{\\gdef\\lastnode{#1}}$/ -lastnode tex-src/texinfo.tex /^\\let\\lastnode=\\relax$/ -lastnode tex-src/texinfo.tex /^\\let\\lastnode=\\relax}$/ +LATEST make-src/Makefile /^LATEST=17$/ lb c-src/etags.c 2923 lbrb tex-src/texinfo.tex /^\\def\\lbrb{{\\bf\\char`\\[}} \\def\\rbrb{{\\bf\\char`\\]}}$/ lbs c-src/etags.c 2924 -lce php-src/lce_functions.php /^ function lce()$/ lce_bindtextdomain php-src/lce_functions.php /^ function lce_bindtextdomain($d_name, $d_path/ lce_bindtextdomain php-src/lce_functions.php /^ function lce_bindtextdomain($domain, $path)$/ +LCE_COMMENT php-src/lce_functions.php 13 +LCE_COMMENT_TOOL php-src/lce_functions.php 17 +LCE_COMMENT_USER php-src/lce_functions.php 15 lce_dgettext php-src/lce_functions.php /^ function lce_dgettext($domain, $msgid)$/ +LCE_FUNCTIONS php-src/lce_functions.php 4 lce_geteditcode php-src/lce_functions.php /^ function lce_geteditcode($type, $name, $text, $r/ lce_gettext php-src/lce_functions.php /^ function lce_gettext($msgid)$/ +L_CELL y-src/parse.c 10 +LCE_MSGID php-src/lce_functions.php 19 +LCE_MSGSTR php-src/lce_functions.php 21 +lce php-src/lce_functions.php /^ function lce()$/ lce_textdomain php-src/lce_functions.php /^ function lce_textdomain($domain)$/ +LCE_TEXT php-src/lce_functions.php 23 +LCE_UNKNOWN php-src/lce_functions.php 9 +LCE_WS php-src/lce_functions.php 11 +L_CONST y-src/parse.c 13 +LDFLAGS make-src/Makefile /^LDFLAGS=#-static -lc_p$/ leasqr html-src/software.html /^Leasqr$/ left c-src/etags.c 216 left_shift y-src/cccp.y /^left_shift (a, b)$/ @@ -3129,56 +2123,102 @@ len c-src/etags.c 237 length c-src/etags.c 2495 length y-src/cccp.y 113 length y-src/cccp.y 44 -less tex-src/texinfo.tex /^\\def\\less{\\realbackslash less}$/ +LEQ y-src/cccp.c 14 +/less ps-src/rfc1245.ps /^\/less \/equal \/greater \/question \/at \/A \/B \/C \/D \/E/ less tex-src/texinfo.tex /^\\def\\less{\\realbackslash less}%$/ +less tex-src/texinfo.tex /^\\def\\less{\\realbackslash less}$/ let c-src/emacs/src/lisp.h 2981 letter tex-src/texinfo.tex /^ {#1}{Appendix \\appendixletter}{\\noexpand\\folio}}/ +letter tex-src/texinfo.tex /^{#1}{\\appendixletter}{\\the\\secno}{\\noexpand\\folio}/ +letter tex-src/texinfo.tex /^{#1}{\\appendixletter}{\\the\\secno}{\\the\\subsecno}{\\/ letter tex-src/texinfo.tex /^ {\\appendixletter}$/ letter tex-src/texinfo.tex /^ {\\appendixletter}{\\the\\secno}{\\the\\subsecno}{\\th/ letter tex-src/texinfo.tex /^\\chapmacro {#1}{Appendix \\appendixletter}%$/ letter tex-src/texinfo.tex /^\\gdef\\thissection{#1}\\secheading {#1}{\\appendixlet/ letter tex-src/texinfo.tex /^\\global\\advance \\appendixno by 1 \\message{Appendix/ letter tex-src/texinfo.tex /^\\subsecheading {#1}{\\appendixletter}{\\the\\secno}{\\/ -letter tex-src/texinfo.tex /^{#1}{\\appendixletter}{\\the\\secno}{\\noexpand\\folio}/ -letter tex-src/texinfo.tex /^{#1}{\\appendixletter}{\\the\\secno}{\\the\\subsecno}{\\/ letter: tex-src/texinfo.tex /^\\xdef\\thischapter{Appendix \\appendixletter: \\noexp/ level c-src/emacs/src/lisp.h 3153 lex prol-src/natded.prolog /^lex(W,SynOut,Sem):-$/ lexptr y-src/cccp.y 332 -li tex-src/texinfo.tex /^\\let\\li = \\sf % Sometimes we call it \\li, not \\sf./ +LE y-src/parse.c 7 +L_FN0 y-src/parse.c 14 +L_FN1R y-src/parse.c 20 +L_FN1 y-src/parse.c 15 +L_FN2R y-src/parse.c 21 +L_FN2 y-src/parse.c 16 +L_FN3R y-src/parse.c 22 +L_FN3 y-src/parse.c 17 +L_FN4R y-src/parse.c 23 +L_FN4 y-src/parse.c 18 +L_FNNR y-src/parse.c 24 +L_FNN y-src/parse.c 19 +L_getit c-src/etags.c /^L_getit (void)$/ +L_GE y-src/parse.c 27 +__libc_atexit c-src/exit.c 30 +__libc_atexit c-src/exit.strange_suffix 30 libs merc-src/accumulator.m /^:- import_module libs.$/ licenze html-src/softwarelibero.html /^Licenze d'uso di un programma$/ +LIGHTBLUE cp-src/screen.hpp 21 +LIGHTCYAN cp-src/screen.hpp 23 +LIGHTGRAY cp-src/screen.hpp 19 +LIGHTGREEN cp-src/screen.hpp 22 +LIGHTMAGENTA cp-src/screen.hpp 25 +LIGHTRED cp-src/screen.hpp 24 limit cp-src/Range.h /^ double limit (void) const { return rng_limit; }$/ -line c-src/etags.c 2493 -line perl-src/htlmify-cystic 37 -line y-src/parse.y 87 -lineCount php-src/lce_functions.php /^ function lineCount($entry)$/ linebuffer c-src/etags.c 239 linebuffer_init c-src/etags.c /^linebuffer_init (linebuffer *lbp)$/ linebuffer_setlen c-src/etags.c /^linebuffer_setlen (linebuffer *lbp, int toksize)$/ +lineCount php-src/lce_functions.php /^ function lineCount($entry)$/ +line c-src/etags.c 2493 lineno c-src/emacs/src/lisp.h 3147 lineno c-src/etags.c 2506 linenumber tex-src/texinfo.tex /^ \\def\\linenumber{\\the\\inputlineno:\\space}$/ linenumber tex-src/texinfo.tex /^ \\let\\linenumber = \\empty % Non-3.0.$/ +line perl-src/htlmify-cystic 37 linepos c-src/etags.c 2507 linepos c-src/etags.c 2922 +line y-src/parse.y 87 links html-src/software.html /^Links to interesting software$/ -lisp tex-src/texinfo.tex /^\\def\\lisp{\\aboveenvbreak$/ +Lisp_Bits c-src/emacs/src/lisp.h 239 +Lisp_Boolfwd c-src/emacs/src/lisp.h 2284 +Lisp_Bool_Vector c-src/emacs/src/lisp.h 1384 +Lisp_Buffer_Local_Value c-src/emacs/src/lisp.h 2334 +Lisp_Buffer_Objfwd c-src/emacs/src/lisp.h 2302 +Lisp_Char_Table c-src/emacs/src/lisp.h 1575 +Lisp_Compiled c-src/emacs/src/lisp.h 2429 +Lisp_Cons c-src/emacs/src/lisp.h 475 lisp_eval_depth c-src/emacs/src/lisp.h 3045 +Lisp_Finalizer c-src/emacs/src/lisp.h 2186 +Lisp_Float c-src/emacs/src/lisp.h 2391 +Lisp_Float c-src/emacs/src/lisp.h 477 +Lisp_Free c-src/emacs/src/lisp.h 2201 +Lisp_functions c-src/etags.c /^Lisp_functions (FILE *inf)$/ +Lisp_Fwd_Bool c-src/emacs/src/lisp.h 505 +Lisp_Fwd_Buffer_Obj c-src/emacs/src/lisp.h 507 +Lisp_Fwd c-src/emacs/src/lisp.h 2368 +Lisp_Fwd_Int c-src/emacs/src/lisp.h 504 +Lisp_Fwd_Kboard_Obj c-src/emacs/src/lisp.h 508 +Lisp_Fwd_Obj c-src/emacs/src/lisp.h 506 +Lisp_Fwd_Type c-src/emacs/src/lisp.h 502 +Lisp_Hash_Table c-src/emacs/src/lisp.h 1823 +lisp_h_check_cons_list c-src/emacs/src/lisp.h /^# define lisp_h_check_cons_list() ((void) 0)$/ lisp_h_CHECK_LIST_CONS c-src/emacs/src/lisp.h /^#define lisp_h_CHECK_LIST_CONS(x, y) CHECK_TYPE (C/ lisp_h_CHECK_NUMBER c-src/emacs/src/lisp.h /^#define lisp_h_CHECK_NUMBER(x) CHECK_TYPE (INTEGER/ lisp_h_CHECK_SYMBOL c-src/emacs/src/lisp.h /^#define lisp_h_CHECK_SYMBOL(x) CHECK_TYPE (SYMBOLP/ lisp_h_CHECK_TYPE c-src/emacs/src/lisp.h /^#define lisp_h_CHECK_TYPE(ok, predicate, x) \\$/ lisp_h_CONSP c-src/emacs/src/lisp.h /^#define lisp_h_CONSP(x) (XTYPE (x) == Lisp_Cons)$/ +Lisp_help c-src/etags.c 591 lisp_h_EQ c-src/emacs/src/lisp.h /^#define lisp_h_EQ(x, y) (XLI (x) == XLI (y))$/ lisp_h_FLOATP c-src/emacs/src/lisp.h /^#define lisp_h_FLOATP(x) (XTYPE (x) == Lisp_Float)/ lisp_h_INTEGERP c-src/emacs/src/lisp.h /^#define lisp_h_INTEGERP(x) ((XTYPE (x) & (Lisp_Int/ +lisp_h_make_number c-src/emacs/src/lisp.h /^# define lisp_h_make_number(n) \\$/ lisp_h_MARKERP c-src/emacs/src/lisp.h /^#define lisp_h_MARKERP(x) (MISCP (x) && XMISCTYPE / lisp_h_MISCP c-src/emacs/src/lisp.h /^#define lisp_h_MISCP(x) (XTYPE (x) == Lisp_Misc)$/ lisp_h_NILP c-src/emacs/src/lisp.h /^#define lisp_h_NILP(x) EQ (x, Qnil)$/ lisp_h_SET_SYMBOL_VAL c-src/emacs/src/lisp.h /^#define lisp_h_SET_SYMBOL_VAL(sym, v) \\$/ -lisp_h_SYMBOLP c-src/emacs/src/lisp.h /^#define lisp_h_SYMBOLP(x) (XTYPE (x) == Lisp_Symbo/ lisp_h_SYMBOL_CONSTANT_P c-src/emacs/src/lisp.h /^#define lisp_h_SYMBOL_CONSTANT_P(sym) (XSYMBOL (sy/ +lisp_h_SYMBOLP c-src/emacs/src/lisp.h /^#define lisp_h_SYMBOLP(x) (XTYPE (x) == Lisp_Symbo/ lisp_h_SYMBOL_VAL c-src/emacs/src/lisp.h /^#define lisp_h_SYMBOL_VAL(sym) \\$/ lisp_h_VECTORLIKEP c-src/emacs/src/lisp.h /^#define lisp_h_VECTORLIKEP(x) (XTYPE (x) == Lisp_V/ lisp_h_XCAR c-src/emacs/src/lisp.h /^#define lisp_h_XCAR(c) XCONS (c)->car$/ @@ -3186,18 +2226,64 @@ lisp_h_XCDR c-src/emacs/src/lisp.h /^#define lisp_h_XCDR(c) XCONS (c)->u.cdr$/ lisp_h_XCONS c-src/emacs/src/lisp.h /^#define lisp_h_XCONS(a) \\$/ lisp_h_XFASTINT c-src/emacs/src/lisp.h /^# define lisp_h_XFASTINT(a) XINT (a)$/ lisp_h_XHASH c-src/emacs/src/lisp.h /^#define lisp_h_XHASH(a) XUINT (a)$/ -lisp_h_XIL c-src/emacs/src/lisp.h /^# define lisp_h_XIL(i) ((Lisp_Object) { i })$/ lisp_h_XIL c-src/emacs/src/lisp.h /^# define lisp_h_XIL(i) (i)$/ +lisp_h_XIL c-src/emacs/src/lisp.h /^# define lisp_h_XIL(i) ((Lisp_Object) { i })$/ lisp_h_XINT c-src/emacs/src/lisp.h /^# define lisp_h_XINT(a) (XLI (a) >> INTTYPEBITS)$/ -lisp_h_XLI c-src/emacs/src/lisp.h /^# define lisp_h_XLI(o) ((o).i)$/ lisp_h_XLI c-src/emacs/src/lisp.h /^# define lisp_h_XLI(o) (o)$/ +lisp_h_XLI c-src/emacs/src/lisp.h /^# define lisp_h_XLI(o) ((o).i)$/ lisp_h_XPNTR c-src/emacs/src/lisp.h /^#define lisp_h_XPNTR(a) \\$/ lisp_h_XSYMBOL c-src/emacs/src/lisp.h /^# define lisp_h_XSYMBOL(a) \\$/ lisp_h_XTYPE c-src/emacs/src/lisp.h /^# define lisp_h_XTYPE(a) ((enum Lisp_Type) (XLI (a/ lisp_h_XUNTAG c-src/emacs/src/lisp.h /^# define lisp_h_XUNTAG(a, type) ((void *) (intptr_/ -lisp_h_check_cons_list c-src/emacs/src/lisp.h /^# define lisp_h_check_cons_list() ((void) 0)$/ -lisp_h_make_number c-src/emacs/src/lisp.h /^# define lisp_h_make_number(n) \\$/ +LISP_INITIALLY c-src/emacs/src/lisp.h /^#define LISP_INITIALLY(i) (i)$/ +LISP_INITIALLY c-src/emacs/src/lisp.h /^#define LISP_INITIALLY(i) {i}$/ +LISP_INITIALLY_ZERO c-src/emacs/src/lisp.h 582 +Lisp_Int0 c-src/emacs/src/lisp.h 461 +Lisp_Int1 c-src/emacs/src/lisp.h 462 +Lisp_Intfwd c-src/emacs/src/lisp.h 2274 +Lisp_Kboard_Objfwd c-src/emacs/src/lisp.h 2362 +LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^#define LISP_MACRO_DEFUN(name, type, argdecls, arg/ +LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (CONSP, bool, (Lisp_Object x), (x/ +LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (NILP, bool, (Lisp_Object x), (x)/ +LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (SYMBOL_VAL, Lisp_Object, (struct/ +LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (XCAR, Lisp_Object, (Lisp_Object / +LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (XCONS, struct Lisp_Cons *, (Lisp/ +LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (XHASH, EMACS_INT, (Lisp_Object a/ +LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (XLI, EMACS_INT, (Lisp_Object o),/ +LISP_MACRO_DEFUN c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN (XPNTR, void *, (Lisp_Object a), / +LISP_MACRO_DEFUN_VOID c-src/emacs/src/lisp.h /^#define LISP_MACRO_DEFUN_VOID(name, argdecls, args/ +LISP_MACRO_DEFUN_VOID c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN_VOID (CHECK_LIST_CONS, (Lisp_Obje/ +LISP_MACRO_DEFUN_VOID c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN_VOID (CHECK_TYPE,$/ +LISP_MACRO_DEFUN_VOID c-src/emacs/src/lisp.h /^LISP_MACRO_DEFUN_VOID (SET_SYMBOL_VAL,$/ +Lisp_Marker c-src/emacs/src/lisp.h 1978 +Lisp_Misc_Any c-src/emacs/src/lisp.h 1971 +Lisp_Misc c-src/emacs/src/lisp.h 2212 +Lisp_Misc c-src/emacs/src/lisp.h 458 +Lisp_Misc_Finalizer c-src/emacs/src/lisp.h 491 +Lisp_Misc_Float c-src/emacs/src/lisp.h 494 +Lisp_Misc_Free c-src/emacs/src/lisp.h 487 +Lisp_Misc_Limit c-src/emacs/src/lisp.h 496 +Lisp_Misc_Marker c-src/emacs/src/lisp.h 488 +Lisp_Misc_Overlay c-src/emacs/src/lisp.h 489 +Lisp_Misc_Save_Value c-src/emacs/src/lisp.h 490 +Lisp_Misc_Type c-src/emacs/src/lisp.h 485 +Lisp_Object c-src/emacs/src/lisp.h 567 +Lisp_Object c-src/emacs/src/lisp.h 577 +Lisp_Objfwd c-src/emacs/src/lisp.h 2294 +Lisp_Overlay c-src/emacs/src/lisp.h 2021 lisppar tex-src/texinfo.tex /^\\gdef\\lisppar{\\null\\endgraf}}$/ +Lisp_Save_Type c-src/emacs/src/lisp.h 2064 +Lisp_Save_Value c-src/emacs/src/lisp.h 2110 +Lisp_String c-src/emacs/src/lisp.h 466 +Lisp_Sub_Char_Table c-src/emacs/src/lisp.h 1606 +Lisp_Subr c-src/emacs/src/lisp.h 1670 +Lisp_suffixes c-src/etags.c 589 +Lisp_Symbol c-src/emacs/src/lisp.h 454 +Lisp_Symbol c-src/emacs/src/lisp.h 654 +lisp tex-src/texinfo.tex /^\\def\\lisp{\\aboveenvbreak$/ +Lisp_Type c-src/emacs/src/lisp.h 451 +Lisp_Vector c-src/emacs/src/lisp.h 1369 +Lisp_Vectorlike c-src/emacs/src/lisp.h 472 lispy_accent_codes c-src/emacs/src/keyboard.c 4634 lispy_accent_keys c-src/emacs/src/keyboard.c 4741 lispy_drag_n_drop_names c-src/emacs/src/keyboard.c 5181 @@ -3207,50 +2293,110 @@ lispy_kana_keys c-src/emacs/src/keyboard.c 5026 lispy_modifier_list c-src/emacs/src/keyboard.c /^lispy_modifier_list (int modifiers)$/ lispy_multimedia_keys c-src/emacs/src/keyboard.c 4962 lispy_wheel_names c-src/emacs/src/keyboard.c 5174 +list2i c-src/emacs/src/lisp.h /^list2i (EMACS_INT x, EMACS_INT y)$/ +list3i c-src/emacs/src/lisp.h /^list3i (EMACS_INT x, EMACS_INT y, EMACS_INT w)$/ +list4i c-src/emacs/src/lisp.h /^list4i (EMACS_INT x, EMACS_INT y, EMACS_INT w, EMA/ +LISTCONTENTSBUTTON objc-src/PackInsp.m 48 +LISTCONTENTS objc-src/PackInsp.m 39 list c-src/emacs/src/gmalloc.c 186 +LISTDESCRIPTIONBUTTON objc-src/PackInsp.m 49 +ListEdit pyt-src/server.py /^class ListEdit(Frame):$/ list merc-src/accumulator.m /^:- import_module list.$/ list-tags el-src/emacs/lisp/progmodes/etags.el /^(defun list-tags (file &optional _next-match)$/ list-tags-function el-src/emacs/lisp/progmodes/etags.el /^(defvar list-tags-function nil$/ -list2i c-src/emacs/src/lisp.h /^list2i (EMACS_INT x, EMACS_INT y)$/ -list3i c-src/emacs/src/lisp.h /^list3i (EMACS_INT x, EMACS_INT y, EMACS_INT w)$/ -list4i c-src/emacs/src/lisp.h /^list4i (EMACS_INT x, EMACS_INT y, EMACS_INT w, EMA/ list_to_ord_set prol-src/ordsets.prolog /^list_to_ord_set(List, Set) :-$/ +li tex-src/texinfo.tex /^\\let\\li = \\sf % Sometimes we call it \\li, not \\sf./ +LL_Assert/p ada-src/2ataspri.adb /^ procedure LL_Assert (B : Boolean; M : String) i/ +LL_Assert/p ada-src/2ataspri.ads /^ procedure LL_Assert (B : Boolean; M : String);$/ +L_LE y-src/parse.c 25 +LL_Task_Procedure_Access/t ada-src/2ataspri.ads /^ type LL_Task_Procedure_Access is access procedu/ +LL_Task_Procedure_Access/t ada-src/etags-test-for.ada /^ type LL_Task_Procedure_Access is access procedu/ +LL_Wrapper/p ada-src/2ataspri.adb /^ procedure LL_Wrapper (T : TCB_Ptr);$/ +LL_Wrapper/p ada-src/2ataspri.adb /^ procedure LL_Wrapper (T : TCB_Ptr) is$/ +LL_Wrapper/p ada-src/etags-test-for.ada /^ procedure LL_Wrapper (T : TCB_Ptr);$/ +L_NE y-src/parse.c 26 lno c-src/etags.c 223 -load objc-src/PackInsp.m /^-load$/ +/lnormalize ps-src/rfc1245.ps /^\/lnormalize { $/ loadContentsOf objc-src/PackInsp.m /^-loadContentsOf:(const char *)type inTable:(HashTa/ loadImage objc-src/PackInsp.m /^-loadImage$/ loadKeyValuesFrom objc-src/PackInsp.m /^-loadKeyValuesFrom:(const char *)type inTable:(Has/ +load objc-src/PackInsp.m /^-load$/ loadPORManager php-src/lce_functions.php /^ function &loadPORManager()$/ local_if_set c-src/emacs/src/lisp.h 2338 -location cp-src/clheir.hpp /^ location() { }$/ +LOCALIZE_ARCH objc-src/PackInsp.m /^#define LOCALIZE_ARCH(s) NXLoadLocalizedStringFrom/ +LOCALIZE objc-src/PackInsp.m /^#define LOCALIZE(s) NXLoadLocalizedStringFromTabl/ +Locate pas-src/common.pas /^function Locate; (*($/ location cp-src/clheir.hpp 33 +location cp-src/clheir.hpp /^ location() { }$/ +LOCK_ALIGNED_BLOCKS c-src/emacs/src/gmalloc.c /^#define LOCK_ALIGNED_BLOCKS() \\$/ +LOCK_ALIGNED_BLOCKS c-src/emacs/src/gmalloc.c /^#define LOCK_ALIGNED_BLOCKS()$/ +LOCK c-src/emacs/src/gmalloc.c /^#define LOCK() \\$/ +LOCK c-src/emacs/src/gmalloc.c /^#define LOCK()$/ +Lock/t ada-src/2ataspri.ads /^ type Lock is$/ +Lock/t ada-src/2ataspri.ads /^ type Lock is private;$/ loggingall tex-src/texinfo.tex /^\\def\\loggingall{\\tracingcommands2 \\tracingstats2 $/ +LONG_TYPE_SIZE y-src/cccp.y 95 +LOOKING_AT c-src/etags.c /^#define LOOKING_AT(cp, kw) \/* kw is the keyword, / +LOOKING_AT_NOCASE c-src/etags.c /^#define LOOKING_AT_NOCASE(cp, kw) \/* the keyword i/ look tex-src/texinfo.tex /^\\def\\kbd#1{\\def\\look{#1}\\expandafter\\kbdfoo\\look??/ -lookup y-src/cccp.y /^lookup (name, len, hash)$/ lookup_call merc-src/accumulator.m /^:- pred lookup_call(accu_goal_store::in, accu_goal/ +LOOKUP objc-src/PackInsp.m 176 +LOOKUP objc-src/PackInsp.m /^#define LOOKUP(key, notfound) ([table isKey:key] ?/ +lookup y-src/cccp.y /^lookup (name, len, hash)$/ +LOOP_ON_INPUT_LINES c-src/etags.c /^#define LOOP_ON_INPUT_LINES(file_pointer, line_buf/ losespace tex-src/texinfo.tex /^\\def\\losespace #1{#1}$/ lowcase c-src/etags.c /^#define lowcase(c) tolower (CHAR (c))$/ lowercaseenumerate tex-src/texinfo.tex /^\\def\\lowercaseenumerate{%$/ +LowerCaseNmStr pas-src/common.pas /^function LowerCaseNmStr; (*($/ +/L ps-src/rfc1245.ps /^\/L { $/ +/L ps-src/rfc1245.ps /^\/L \/M \/N \/O \/P \/Q \/R \/S \/T \/U \/V \/W \/X \/Y \/Z \/brac/ +L_RANGE y-src/parse.c 11 +LSH y-src/cccp.c 16 +l tex-src/texinfo.tex /^\\def\\l#1{{\\li #1}\\null} % $/ +l tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ +L tex-src/texinfo.tex /^\\let\\L=\\ptexL$/ +LTGT cp-src/MDiagArray2.h 144 +LTGT cp-src/MDiagArray2.h 35 +LTGT cp-src/MDiagArray2.h 39 +LTGT cp-src/MDiagArray2.h 42 +Lua_functions c-src/etags.c /^Lua_functions (FILE *inf)$/ +Lua_help c-src/etags.c 600 +LUASRC make-src/Makefile /^LUASRC=allegro.lua$/ +Lua_suffixes c-src/etags.c 598 lucid_event_type_list_p c-src/emacs/src/keyboard.c /^lucid_event_type_list_p (Lisp_Object object)$/ +L_VAR y-src/parse.c 12 lvvmode tex-src/texinfo.tex /^\\def\\lvvmode{\\vbox to 0pt{}}$/ mabort c-src/emacs/src/gmalloc.c /^mabort (enum mcheck_status status)$/ +macheader tex-src/texinfo.tex /^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/ mach_host_self c-src/machsyscalls.h /^SYSCALL (mach_host_self, -29,$/ +Machine_Exceptions/t ada-src/2ataspri.ads /^ type Machine_Exceptions is new Interfaces.C.POS/ +Machin_T/b ada-src/waroquiers.ada /^ protected body Machin_T is$/ +Machin_T/t ada-src/etags-test-for.ada /^ protected Machin_T is$/ +Machin_T/t ada-src/etags-test-for.ada /^ protected type Machin_T is$/ +Machin_T/t ada-src/waroquiers.ada /^ protected type Machin_T is$/ mach_msg_trap c-src/machsyscalls.h /^SYSCALL (mach_msg_trap, -25,$/ mach_reply_port c-src/machsyscalls.h /^SYSCALL (mach_reply_port, -26,$/ mach_task_self c-src/machsyscalls.h /^SYSCALL (mach_task_self, -28,$/ mach_thread_self c-src/machsyscalls.h /^SYSCALL (mach_thread_self, -27,$/ -macheader tex-src/texinfo.tex /^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/ macx\defmacheader tex-src/texinfo.tex /^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/ +MAGENTA cp-src/screen.hpp 17 +MAGICBYTE c-src/emacs/src/gmalloc.c 1861 magic c-src/emacs/src/gmalloc.c 1868 +MAGICFREE c-src/emacs/src/gmalloc.c 1860 +MAGICWORD c-src/emacs/src/gmalloc.c 1859 mainmagstep tex-src/texinfo.tex /^\\let\\mainmagstep=\\magstep1$/ mainmagstep tex-src/texinfo.tex /^\\let\\mainmagstep=\\magstephalf$/ maintaining.info make-src/Makefile /^maintaining.info: maintaining.texi$/ majorheading tex-src/texinfo.tex /^\\def\\majorheading{\\parsearg\\majorheadingzzz}$/ majorheadingzzz tex-src/texinfo.tex /^\\def\\majorheadingzzz #1{%$/ make-abbrev-table c-src/abbrev.c /^DEFUN ("make-abbrev-table", Fmake_abbrev_table, Sm/ -make_C_tag c-src/etags.c /^make_C_tag (bool isfun)$/ make_coor prol-src/natded.prolog /^make_coor(s(_),Alpha,Sem1,Sem2,Alpha@Sem1@Sem2).$/ +make_C_tag c-src/etags.c /^make_C_tag (bool isfun)$/ make_ctrl_char c-src/emacs/src/keyboard.c /^make_ctrl_char (int c)$/ +MakeDispose pyt-src/server.py /^ def MakeDispose(self):$/ +Makefile_filenames c-src/etags.c 603 +Makefile_help c-src/etags.c 605 +Makefile_targets c-src/etags.c /^Makefile_targets (FILE *inf)$/ make_fixnum_or_float c-src/emacs/src/lisp.h /^#define make_fixnum_or_float(val) \\$/ make_formatted_string c-src/emacs/src/lisp.h /^extern Lisp_Object make_formatted_string (char *, / make_lisp_ptr c-src/emacs/src/lisp.h /^make_lisp_ptr (void *ptr, enum Lisp_Type type)$/ @@ -3261,108 +2407,182 @@ make_lispy_focus_out c-src/emacs/src/keyboard.c /^make_lispy_focus_out (Lisp_Obj make_lispy_movement c-src/emacs/src/keyboard.c /^make_lispy_movement (struct frame *frame, Lisp_Obj/ make_lispy_position c-src/emacs/src/keyboard.c /^make_lispy_position (struct frame *f, Lisp_Object / make_lispy_switch_frame c-src/emacs/src/keyboard.c /^make_lispy_switch_frame (Lisp_Object frame)$/ +MAKE make-src/Makefile /^MAKE:=$(MAKE) --no-print-directory$/ make_number c-src/emacs/src/lisp.h /^# define make_number(n) lisp_h_make_number (n)$/ make_pointer_integer c-src/emacs/src/lisp.h /^make_pointer_integer (void *p)$/ make_scroll_bar_position c-src/emacs/src/keyboard.c /^make_scroll_bar_position (struct input_event *ev, / +MakeSitelist pyt-src/server.py /^ def MakeSitelist(self, master):$/ +MAKESRC make-src/Makefile /^MAKESRC=Makefile$/ make_tag c-src/etags.c /^make_tag (const char *name, \/* tag name, or NULL / make_uninit_sub_char_table c-src/emacs/src/lisp.h /^make_uninit_sub_char_table (int depth, int min_cha/ make_uninit_vector c-src/emacs/src/lisp.h /^make_uninit_vector (ptrdiff_t size)$/ -malloc c-src/emacs/src/gmalloc.c /^extern void *malloc (size_t size) ATTRIBUTE_MALLOC/ -malloc c-src/emacs/src/gmalloc.c /^malloc (size_t size)$/ -malloc c-src/emacs/src/gmalloc.c 1719 -malloc c-src/emacs/src/gmalloc.c 64 -malloc c-src/emacs/src/gmalloc.c 68 malloc_atfork_handler_child c-src/emacs/src/gmalloc.c /^malloc_atfork_handler_child (void)$/ malloc_atfork_handler_parent c-src/emacs/src/gmalloc.c /^malloc_atfork_handler_parent (void)$/ malloc_atfork_handler_prepare c-src/emacs/src/gmalloc.c /^malloc_atfork_handler_prepare (void)$/ +malloc c-src/emacs/src/gmalloc.c 1719 +malloc c-src/emacs/src/gmalloc.c 64 +malloc c-src/emacs/src/gmalloc.c 68 +malloc c-src/emacs/src/gmalloc.c /^extern void *malloc (size_t size) ATTRIBUTE_MALLOC/ +_malloc c-src/emacs/src/gmalloc.c /^_malloc (size_t size)$/ +malloc c-src/emacs/src/gmalloc.c /^malloc (size_t size)$/ malloc_enable_thread c-src/emacs/src/gmalloc.c /^malloc_enable_thread (void)$/ +__malloc_extra_blocks c-src/emacs/src/gmalloc.c 382 +MALLOCFLOOD c-src/emacs/src/gmalloc.c 1862 +mallochook c-src/emacs/src/gmalloc.c /^mallochook (size_t size)$/ malloc_info c-src/emacs/src/gmalloc.c 167 malloc_initialize_1 c-src/emacs/src/gmalloc.c /^malloc_initialize_1 (void)$/ -mallochook c-src/emacs/src/gmalloc.c /^mallochook (size_t size)$/ +__malloc_initialize c-src/emacs/src/gmalloc.c /^__malloc_initialize (void)$/ +__malloc_initialized c-src/emacs/src/gmalloc.c 380 +_malloc_internal c-src/emacs/src/gmalloc.c /^_malloc_internal (size_t size)$/ +_malloc_internal_nolock c-src/emacs/src/gmalloc.c /^_malloc_internal_nolock (size_t size)$/ +_malloc_mutex c-src/emacs/src/gmalloc.c 518 +_malloc_thread_enabled_p c-src/emacs/src/gmalloc.c 520 man manpage make-src/Makefile /^man manpage: etags.1.man$/ +/manualpapersize ps-src/rfc1245.ps /^\/manualpapersize {$/ +MANY c-src/emacs/src/lisp.h 2833 mao c-src/h.h 101 map c-src/emacs/src/keyboard.c 8748 map merc-src/accumulator.m /^:- import_module map.$/ -map_word prol-src/natded.prolog /^map_word([[_]|Ws],Exp):-$/ mapping html-src/algrthms.html /^Mapping the Channel Symbols$/ mapsyn prol-src/natded.prolog /^mapsyn(A\/B,AM\/BM):-$/ +map_word prol-src/natded.prolog /^map_word([[_]|Ws],Exp):-$/ +MARKERP c-src/emacs/src/lisp.h /^# define MARKERP(x) lisp_h_MARKERP (x)$/ mark_kboards c-src/emacs/src/keyboard.c /^mark_kboards (void)$/ math tex-src/texinfo.tex /^\\def\\math#1{\\implicitmath #1\\implicitmath}$/ -max c-src/emacs/src/lisp.h /^#define max(a, b) ((a) > (b) ? (a) : (b))$/ -max c-src/emacs/src/lisp.h 58 +MAX_ALLOCA c-src/emacs/src/lisp.h 4556 +max_args c-src/emacs/src/lisp.h 1686 +maxargs c-src/emacs/src/lisp.h 2831 max c.c /^__attribute__ ((always_inline)) max (int a, int b)/ max c.c /^max (int a, int b)$/ max cp-src/conway.cpp /^#define max(x,y) ((x > y) ? x : y)$/ -max_args c-src/emacs/src/lisp.h 1686 +max c-src/emacs/src/lisp.h 58 +max c-src/emacs/src/lisp.h /^#define max(a, b) ((a) > (b) ? (a) : (b))$/ +MAX_ENCODED_BYTES c-src/emacs/src/keyboard.c 2254 +MAX_HASH_VALUE c-src/etags.c 2329 max_num_directions cp-src/clheir.hpp 31 max_num_generic_objects cp-src/clheir.cpp 9 -maxargs c-src/emacs/src/lisp.h 2831 -maybe merc-src/accumulator.m /^:- import_module maybe.$/ +MAXPATHLEN c-src/etags.c 115 +/max ps-src/rfc1245.ps /^\/max {2 copy lt {exch} if pop} bind def$/ +MAX_WORD_LENGTH c-src/etags.c 2327 maybe_gc c-src/emacs/src/lisp.h /^maybe_gc (void)$/ +maybe merc-src/accumulator.m /^:- import_module maybe.$/ +MAYBEREL y-src/parse.y /^#define MAYBEREL(p) (*(p)=='[' && (isdigit((p)[1])/ +MBYTES objc-src/PackInsp.m 59 +Mcccp y-src/cccp.y /^main ()$/ +Mc cp-src/c.C /^int main (void) { my_function0(0); my_function1(1)/ mcCSC cp-src/c.C 6 mcheck c-src/emacs/src/gmalloc.c /^mcheck (void (*func) (enum mcheck_status))$/ +MCHECK_DISABLED c-src/emacs/src/gmalloc.c 285 +MCHECK_FREE c-src/emacs/src/gmalloc.c 287 +MCHECK_HEAD c-src/emacs/src/gmalloc.c 288 +MCHECK_OK c-src/emacs/src/gmalloc.c 286 mcheck_status c-src/emacs/src/gmalloc.c 283 +MCHECK_TAIL c-src/emacs/src/gmalloc.c 289 mcheck_used c-src/emacs/src/gmalloc.c 2017 +Mconway.cpp cp-src/conway.cpp /^void main(void)$/ mdbcomp merc-src/accumulator.m /^:- import_module mdbcomp.$/ -me22b lua-src/test.lua /^ local function test.me22b (one)$/ +MDiagArray2 cp-src/MDiagArray2.h 78 +MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (const Array& a) : DiagArray2 / +MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (const DiagArray2& a) : DiagArray/ +MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (const MDiagArray2& a) : DiagArra/ +MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (int r, int c, const T& val) : DiagA/ +MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (int r, int c) : DiagArray2 (r, c/ +MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (T *d, int r, int c) : DiagArray2/ +~MDiagArray2 cp-src/MDiagArray2.h /^ ~MDiagArray2 (void) { }$/ +MDiagArray2 cp-src/MDiagArray2.h /^ MDiagArray2 (void) : DiagArray2 () { }$/ me_22a lua-src/test.lua /^ function test.me_22a(one, two)$/ +me22b lua-src/test.lua /^ local function test.me22b (one)$/ memalign c-src/emacs/src/gmalloc.c /^memalign (size_t alignment, size_t size)$/ -member prol-src/natded.prolog /^member(X,[X|_]).$/ member_lessthan_goalid merc-src/accumulator.m /^:- pred member_lessthan_goalid(accu_goal_store::in/ +member prol-src/natded.prolog /^member(X,[X|_]).$/ memclear c-src/emacs/src/lisp.h /^memclear (void *p, ptrdiff_t nbytes)$/ -menu tex-src/texinfo.tex /^\\long\\def\\menu #1\\end menu{}$/ menu_bar_item c-src/emacs/src/keyboard.c /^menu_bar_item (Lisp_Object key, Lisp_Object item, / menu_bar_items c-src/emacs/src/keyboard.c /^menu_bar_items (Lisp_Object old)$/ menu_bar_items_index c-src/emacs/src/keyboard.c 7369 menu_bar_items_vector c-src/emacs/src/keyboard.c 7368 menu_bar_one_keymap_changed_items c-src/emacs/src/keyboard.c 7363 -menu_item_eval_property c-src/emacs/src/keyboard.c /^menu_item_eval_property (Lisp_Object sexpr)$/ menu_item_eval_property_1 c-src/emacs/src/keyboard.c /^menu_item_eval_property_1 (Lisp_Object arg)$/ +menu_item_eval_property c-src/emacs/src/keyboard.c /^menu_item_eval_property (Lisp_Object sexpr)$/ menu_separator_name_p c-src/emacs/src/keyboard.c /^menu_separator_name_p (const char *label)$/ +menu tex-src/texinfo.tex /^\\long\\def\\menu #1\\end menu{}$/ +Metags c-src/etags.c /^main (int argc, char **argv)$/ metasource c-src/etags.c 198 methodheader tex-src/texinfo.tex /^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/ methodx\defmethodheader tex-src/texinfo.tex /^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/ methparsebody\Edeffn tex-src/texinfo.tex /^\\def\\deffn{\\defmethparsebody\\Edeffn\\deffnx\\deffnhe/ methparsebody\Edefmethod tex-src/texinfo.tex /^\\def\\defmethod{\\defmethparsebody\\Edefmethod\\defmet/ methparsebody\Edeftypefn tex-src/texinfo.tex /^\\def\\deftypefn{\\defmethparsebody\\Edeftypefn\\deftyp/ -min c-src/emacs/src/gmalloc.c /^#define min(a, b) ((a) < (b) ? (a) : (b))$/ -min c-src/emacs/src/lisp.h /^#define min(a, b) ((a) < (b) ? (a) : (b))$/ -min c-src/emacs/src/lisp.h 57 -min cp-src/conway.cpp /^#define min(x,y) ((x > y) ? y : x)$/ +Mfail cp-src/fail.C /^main()$/ min_args c-src/emacs/src/lisp.h 1686 min_char c-src/emacs/src/lisp.h 1621 +min cp-src/conway.cpp /^#define min(x,y) ((x > y) ? y : x)$/ +min c-src/emacs/src/gmalloc.c /^#define min(a, b) ((a) < (b) ? (a) : (b))$/ +min c-src/emacs/src/lisp.h 57 +min c-src/emacs/src/lisp.h /^#define min(a, b) ((a) < (b) ? (a) : (b))$/ +MIN_HASH_VALUE c-src/etags.c 2328 +/min ps-src/rfc1245.ps /^\/min {2 copy gt {exch} if pop} bind def$/ minus cp-src/functions.cpp /^void Date::minus ( int days , int month , int year/ minus tex-src/texinfo.tex /^\\def\\minus{$-$}$/ +MIN_WORD_LENGTH c-src/etags.c 2326 +MISCP c-src/emacs/src/lisp.h /^# define MISCP(x) lisp_h_MISCP (x)$/ miti html-src/softwarelibero.html /^Sfatiamo alcuni miti$/ +Mkai-test.pl perl-src/kai-test.pl /^package main;$/ modifier_names c-src/emacs/src/keyboard.c 6319 modifier_symbols c-src/emacs/src/keyboard.c 6327 modify_event_symbol c-src/emacs/src/keyboard.c /^modify_event_symbol (ptrdiff_t symbol_num, int mod/ module_class_method ruby-src/test.rb /^ def ModuleExample.module_class_method$/ +ModuleExample ruby-src/test.rb /^module ModuleExample$/ module_instance_method ruby-src/test.rb /^ def module_instance_method$/ -more= ruby-src/test1.ru /^ :more$/ more_aligned_int c.c 165 morecore_nolock c-src/emacs/src/gmalloc.c /^morecore_nolock (size_t size)$/ morecore_recursing c-src/emacs/src/gmalloc.c 605 +More_Lisp_Bits c-src/emacs/src/lisp.h 801 +more= ruby-src/test1.ru /^ :more$/ +MOST_NEGATIVE_FIXNUM c-src/emacs/src/lisp.h 835 +MOST_POSITIVE_FIXNUM c-src/emacs/src/lisp.h 834 mouse_syms c-src/emacs/src/keyboard.c 4627 move cp-src/clheir.cpp /^void agent::move(int direction)$/ +MOVE c-src/sysdep.h /^#define MOVE(x,y) movl x, y$/ +MoveLayerAfter lua-src/allegro.lua /^function MoveLayerAfter (this_one)$/ +MoveLayerBefore lua-src/allegro.lua /^function MoveLayerBefore (this_one)$/ +MoveLayerBottom lua-src/allegro.lua /^function MoveLayerBottom ()$/ +MoveLayerTop lua-src/allegro.lua /^function MoveLayerTop ()$/ mprobe c-src/emacs/src/gmalloc.c /^mprobe (void *ptr)$/ +/M ps-src/rfc1245.ps /^\/M {newpath moveto} bind def$/ +M ruby-src/test1.ru /^module A::M; end$/ +MSDOS c-src/etags.c 100 +MSDOS c-src/etags.c 106 +MSDOS c-src/etags.c 107 +MSDOS c-src/etags.c 110 msgid php-src/lce_functions.php /^ function msgid($line, $class)$/ +MSGSEL f-src/entry.for /^ ENTRY MSGSEL ( TYPE )$/ +MSGSEL f-src/entry.strange /^ ENTRY MSGSEL ( TYPE )$/ +MSGSEL f-src/entry.strange_suffix /^ ENTRY MSGSEL ( TYPE )$/ msgstr php-src/lce_functions.php /^ function msgstr($line, $class)$/ +/ms ps-src/rfc1245.ps /^\/ms { $/ mstats c-src/emacs/src/gmalloc.c 308 -mt prol-src/natded.prolog /^mt:-$/ +Mtest1.go go-src/test1.go 1 +Mtest1.go go-src/test1.go /^func main() {$/ +Mtest.go go-src/test.go 1 +Mtest.go go-src/test.go /^func main() {$/ +Mtest.rs rs-src/test.rs /^fn main() {$/ mtg html-src/software.html /^MTG$/ -multi_line c-src/etags.c 267 +mt prol-src/natded.prolog /^mt:-$/ multibyte c-src/emacs/src/regex.h 403 -my_printf c.c /^my_printf (void *my_object, const char *my_format,/ -my_struct c-src/h.h 91 -my_struct c.c 226 -my_typedef c-src/h.h 93 -my_typedef c.c 228 +MULTI_LETTER_MOD c-src/emacs/src/keyboard.c 6231 +MULTI_LETTER_MOD c-src/emacs/src/keyboard.c 6764 +MULTI_LETTER_MOD c-src/emacs/src/keyboard.c /^#define MULTI_LETTER_MOD(BIT, NAME, LEN) \\$/ +MULTI_LETTER_MOD c-src/emacs/src/keyboard.c /^#define MULTI_LETTER_MOD(BIT, NAME, LEN) \\$/ +multi_line c-src/etags.c 267 +Mx.cc cp-src/x.cc /^main(int argc, char *argv[])$/ mylbrace tex-src/texinfo.tex /^\\def\\mylbrace {{\\tt \\char '173}}$/ mypi forth-src/test-forth.fth /^synonym mypi fconst$/ +my_printf c.c /^my_printf (void *my_object, const char *my_format,/ myrbrace tex-src/texinfo.tex /^\\def\\myrbrace {{\\tt \\char '175}}$/ -n c-src/exit.c 28 -n c-src/exit.strange_suffix 28 +my_struct c.c 226 +my_struct c-src/h.h 91 +my_typedef c.c 228 +my_typedef c-src/h.h 93 name c-src/emacs/src/keyboard.c 7241 name c-src/emacs/src/lisp.h 1808 name c-src/emacs/src/lisp.h 3144 @@ -3373,7 +2593,11 @@ name c-src/etags.c 2271 name c-src/etags.c 261 name c-src/getopt.h 76 name c-src/getopt.h 78 +named c-src/etags.c 2505 +NameHasChar pas-src/common.pas /^function NameHasChar; (* (TheName : NameString; Th/ name perl-src/htlmify-cystic 357 +namestringequal pas-src/common.pas /^function namestringequal;(*(var Name1,Name2 : Name/ +NameStringLess pas-src/common.pas /^function NameStringLess;(*(var Name1,Name2 : NameS/ name tex-src/texinfo.tex /^\\begingroup\\defname {#1}{Function}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {#1}{Macro}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {#1}{Special Form}%$/ @@ -3382,36 +2606,48 @@ name tex-src/texinfo.tex /^\\begingroup\\defname {#1}{Variable}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{#1}\\deftpargs{#3}\\endgrou/ name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{#1}\\defunargs{#3}\\endgrou/ name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{#1}\\defvarargs{#3}\\endgro/ -name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{Instance Variable of #1}%/ -name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{Method on #1}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{\\defcvtype{} of #1}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{\\defoptype{} on #1}%$/ +name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{Instance Variable of #1}%/ +name tex-src/texinfo.tex /^\\begingroup\\defname {#2}{Method on #1}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {\\code{#1} #2}{Function}%$/ name tex-src/texinfo.tex /^\\begingroup\\defname {\\code{#1} #2}{Variable}%$/ -name tex-src/texinfo.tex /^\\begingroup\\defname {\\code{#2} #3}{#1}$/ name tex-src/texinfo.tex /^\\begingroup\\defname {\\code{#2} #3}{#1}%$/ +name tex-src/texinfo.tex /^\\begingroup\\defname {\\code{#2} #3}{#1}$/ name tex-src/texinfo.tex /^\\def\\singlecodeindexer #1{\\doind{\\indexname}{\\code/ name tex-src/texinfo.tex /^\\def\\singleindexer #1{\\doind{\\indexname}{#1}}$/ +NAME y-src/cccp.c 8 name y-src/cccp.y 113 name y-src/cccp.y 43 -named c-src/etags.c 2505 -namestringequal pas-src/common.pas /^function namestringequal;(*(var Name1,Name2 : Name/ nargs c-src/emacs/src/lisp.h 2987 -need tex-src/texinfo.tex /^\\def\\need{\\parsearg\\needx}$/ +NATNUMP c-src/emacs/src/lisp.h /^NATNUMP (Lisp_Object x)$/ +/nbluet ps-src/rfc1245.ps /^\/nbluet 256 array def$/ +n c-src/exit.c 28 +n c-src/exit.strange_suffix 28 +NDEBUG c-src/etags.c 88 need_adjustment c-src/emacs/src/lisp.h 1986 +need tex-src/texinfo.tex /^\\def\\need{\\parsearg\\needx}$/ needx tex-src/texinfo.tex /^\\def\\needx#1{%$/ +NEG y-src/parse.c 9 neighbors cp-src/clheir.hpp 59 nelem cp-src/Range.h /^ int nelem (void) const { return rng_nelem; }$/ nestlev c-src/etags.c 2525 -new objc-src/PackInsp.m /^+new$/ -new perl-src/htlmify-cystic 163 -new_tag perl-src/htlmify-cystic 18 newcodeindex tex-src/texinfo.tex /^\\def\\newcodeindex #1{$/ newindex tex-src/texinfo.tex /^\\def\\newindex #1{$/ +NewLayer lua-src/allegro.lua /^function NewLayer (name, x, y, w, h)$/ +NewLayerSet lua-src/allegro.lua /^function NewLayerSet (name)$/ newlb c-src/etags.c 2930 newlinepos c-src/etags.c 2932 +NewNameString pas-src/common.pas /^procedure NewNameString; (* (var NSP: NameStringPo/ +new objc-src/PackInsp.m /^+new$/ +new perl-src/htlmify-cystic 163 +new_tag perl-src/htlmify-cystic 18 newtextstring pas-src/common.pas /^function newtextstring; (*: TextString;*)$/ newwrite tex-src/texinfo.tex /^\\gdef\\newwrite{\\alloc@7\\write\\chardef\\sixt@@n}}$/ +next_alive cp-src/conway.hpp 7 +next_almost_prime c-src/emacs/src/lisp.h /^extern EMACS_INT next_almost_prime (EMACS_INT) ATT/ +NEXT_ALMOST_PRIME_LIMIT c-src/emacs/src/lisp.h 3573 +next c.c 174 next c-src/emacs/src/gmalloc.c 164 next c-src/emacs/src/gmalloc.c 188 next c-src/emacs/src/gmalloc.c 198 @@ -3425,51 +2661,52 @@ next c-src/emacs/src/lisp.h 3028 next c-src/emacs/src/lisp.h 3134 next c-src/emacs/src/lisp.h 700 next c-src/etags.c 203 -next c.c 174 +next-file el-src/emacs/lisp/progmodes/etags.el /^(defun next-file (&optional initialize novisit)$/ +next-file-list el-src/emacs/lisp/progmodes/etags.el /^(defvar next-file-list nil$/ +next_free c-src/emacs/src/lisp.h 1851 +nextfree c-src/emacs/src/lisp.h 3029 next tex-src/texinfo.tex /^\\def\\flushcr{\\ifx\\par\\lisppar \\def\\next##1{}\\else / next tex-src/texinfo.tex /^\\def\\next##1{}\\next}$/ next tex-src/texinfo.tex /^\\def\\parsearg #1{\\let\\next=#1\\begingroup\\obeylines/ next tex-src/texinfo.tex /^\\edef\\next{\\write\\auxfile{\\internalsetq {#1}{#2}}}/ -next y-src/cccp.y 42 -next-file el-src/emacs/lisp/progmodes/etags.el /^(defun next-file (&optional initialize novisit)$/ -next-file-list el-src/emacs/lisp/progmodes/etags.el /^(defvar next-file-list nil$/ -next_alive cp-src/conway.hpp 7 -next_almost_prime c-src/emacs/src/lisp.h /^extern EMACS_INT next_almost_prime (EMACS_INT) ATT/ -next_free c-src/emacs/src/lisp.h 1851 next_weak c-src/emacs/src/lisp.h 1875 -nextfree c-src/emacs/src/lisp.h 3029 +next y-src/cccp.y 42 +NE y-src/parse.c 6 nfree c-src/emacs/src/gmalloc.c 150 +/ngrayt ps-src/rfc1245.ps /^\/ngrayt 256 array def$/ +/ngreent ps-src/rfc1245.ps /^\/ngreent 256 array def$/ +NIL_IS_ZERO c-src/emacs/src/lisp.h 1515 +NILP c-src/emacs/src/lisp.h /^# define NILP(x) lisp_h_NILP (x)$/ nl c-src/etags.c 2521 +NmStrToErrStr pas-src/common.pas /^function NmStrToErrStr;(*($/ +NmStrToInteger pas-src/common.pas /^function NmStrToInteger; (* (Str : NameString) : i/ nm tex-src/testenv.tex /^\\newcommand{\\nm}[2]{\\nomenclature{#1}{#2}}$/ -no tex-src/texinfo.tex /^\\def\\appendixletter{\\char\\the\\appendixno}$/ -no tex-src/texinfo.tex /^\\global\\advance \\appendixno by 1 \\message{Appendix/ -no tex-src/texinfo.tex /^\\ifnum\\secno=0 Appendix\\xreftie'char\\the\\appendixn/ -no tex-src/texinfo.tex /^\\newcount \\appendixno \\appendixno = `\\@$/ -no.\the tex-src/texinfo.tex /^Section\\xreftie'char\\the\\appendixno.\\the\\secno.\\th/ -no.\the tex-src/texinfo.tex /^\\else \\ifnum \\subsecno=0 Section\\xreftie'char\\the\\/ no_argument c-src/getopt.h 89 -no_lang_help c-src/etags.c 707 -no_sub c-src/emacs/src/regex.h 387 nocase_tail c-src/etags.c /^nocase_tail (const char *cp)$/ node c-src/etags.c 225 -node tex-src/texinfo.tex /^\\def\\node{\\ENVcheck\\parsearg\\nodezzz}$/ -node_st c-src/etags.c 214 noderef tex-src/texinfo.tex /^\\appendixnoderef %$/ +node_st c-src/etags.c 214 +node tex-src/texinfo.tex /^\\def\\node{\\ENVcheck\\parsearg\\nodezzz}$/ nodexxx tex-src/texinfo.tex /^\\def\\nodexxx[#1,#2]{\\gdef\\lastnode{#1}}$/ nodezzz tex-src/texinfo.tex /^\\def\\nodezzz#1{\\nodexxx [#1,]}$/ nofillexdent tex-src/texinfo.tex /^\\def\\nofillexdent{\\parsearg\\nofillexdentyyy}$/ nofillexdentyyy tex-src/texinfo.tex /^\\def\\nofillexdentyyy #1{{\\advance \\leftskip by -\\e/ nofonts tex-src/texinfo.tex /^{\\chapternofonts%$/ nofonts tex-src/texinfo.tex /^{\\indexnofonts$/ +no_lang_help c-src/etags.c 707 nonarrowing tex-src/texinfo.tex /^ \\let\\nonarrowing=\\comment$/ nonarrowing tex-src/texinfo.tex /^\\let\\nonarrowing=\\relax$/ none_help c-src/etags.c 703 +NONPOINTER_BITS c-src/emacs/src/lisp.h 78 +NONPOINTER_BITS c-src/emacs/src/lisp.h 80 +NONSRCS make-src/Makefile /^NONSRCS=entry.strange lists.erl clheir.hpp.gz$/ normalbackslash tex-src/texinfo.tex /^\\def\\normalbackslash{{\\tt\\rawbackslashxx}}$/ normalcaret tex-src/texinfo.tex /^\\def\\normalcaret{^}$/ normaldoublequote tex-src/texinfo.tex /^\\def\\normaldoublequote{"}$/ normalgreater tex-src/texinfo.tex /^\\def\\normalgreater{>}$/ -normalize prol-src/natded.prolog /^normalize(M,MNorm):-$/ normalize_fresh prol-src/natded.prolog /^normalize_fresh(M,N):-$/ +normalize prol-src/natded.prolog /^normalize(M,MNorm):-$/ +/normalize ps-src/rfc1245.ps /^\/normalize {$/ normalize_tree prol-src/natded.prolog /^normalize_tree(tree(Rule,Syn:Sem,Trees),$/ normalize_trees prol-src/natded.prolog /^normalize_trees([],[]).$/ normalless tex-src/texinfo.tex /^\\def\\normalless{<}$/ @@ -3479,42 +2716,67 @@ normaltilde tex-src/texinfo.tex /^\\def\\normaltilde{~}$/ normalunderscore tex-src/texinfo.tex /^\\def\\normalunderscore{_}$/ normalverticalbar tex-src/texinfo.tex /^\\def\\normalverticalbar{|}$/ nosave pyt-src/server.py /^ def nosave(self):$/ -not_bol c-src/emacs/src/regex.h 391 -not_eol c-src/emacs/src/regex.h 394 -not_single_kboard_state c-src/emacs/src/keyboard.c /^not_single_kboard_state (KBOARD *kboard)$/ +no_sub c-src/emacs/src/regex.h 387 notag2 c-src/dostorture.c 26 notag2 c-src/torture.c 26 notag4 c-src/dostorture.c 45 notag4 c-src/torture.c 45 +not_bol c-src/emacs/src/regex.h 391 +/.notdef ps-src/rfc1245.ps /^\/.notdef \/.notdef \/.notdef \/.notdef \/.notdef \/.not/ +/.notdef ps-src/rfc1245.ps /^\/.notdef \/.notdef \/.notdef \/.notdef \/space \/exclam/ +not_eol c-src/emacs/src/regex.h 394 +NOTEQUAL y-src/cccp.c 13 +no tex-src/texinfo.tex /^\\def\\appendixletter{\\char\\the\\appendixno}$/ +no tex-src/texinfo.tex /^\\global\\advance \\appendixno by 1 \\message{Appendix/ +no tex-src/texinfo.tex /^\\ifnum\\secno=0 Appendix\\xreftie'char\\the\\appendixn/ +no tex-src/texinfo.tex /^\\newcount \\appendixno \\appendixno = `\\@$/ +no.\the tex-src/texinfo.tex /^\\else \\ifnum \\subsecno=0 Section\\xreftie'char\\the\\/ +no.\the tex-src/texinfo.tex /^Section\\xreftie'char\\the\\appendixno.\\the\\secno.\\th/ notinname c-src/etags.c /^#define notinname(c) (_nin[CHAR (c)]) \/* c is not / +not_single_kboard_state c-src/emacs/src/keyboard.c /^not_single_kboard_state (KBOARD *kboard)$/ npending c-src/emacs/src/keyboard.c 7244 +/N ps-src/rfc1245.ps /^\/N { $/ +/nredt ps-src/rfc1245.ps /^\/nredt 256 array def$/ nsbot tex-src/texinfo.tex /^\\def\\nsbot{\\vbox$/ nstop tex-src/texinfo.tex /^\\def\\nstop{\\vbox$/ +/Ntilde ps-src/rfc1245.ps /^\/Ntilde \/Odieresis \/Udieresis \/aacute \/agrave \/aci/ ntool_bar_items c-src/emacs/src/keyboard.c 7974 -numOfChannels cp-src/c.C 1 -num_columns cp-src/conway.cpp 16 -num_input_events c-src/emacs/src/keyboard.c 210 -num_regs c-src/emacs/src/regex.h 430 -num_rows cp-src/conway.cpp 15 -numberKeys objcpp-src/SimpleCalc.M /^- numberKeys:sender$/ -number_len c-src/etags.c /^static int number_len (long) ATTRIBUTE_CONST;$/ +NULL_PTR y-src/cccp.y 63 +NULL y-src/cccp.y 51 numberedsec tex-src/texinfo.tex /^\\outer\\def\\numberedsec{\\parsearg\\seczzz}$/ numberedsubsec tex-src/texinfo.tex /^\\outer\\def\\numberedsubsec{\\parsearg\\numberedsubsec/ numberedsubseczzz tex-src/texinfo.tex /^\\def\\numberedsubseczzz #1{\\seccheck{subsection}%$/ numberedsubsubsec tex-src/texinfo.tex /^\\outer\\def\\numberedsubsubsec{\\parsearg\\numberedsub/ numberedsubsubseczzz tex-src/texinfo.tex /^\\def\\numberedsubsubseczzz #1{\\seccheck{subsubsecti/ +numberKeys objcpp-src/SimpleCalc.M /^- numberKeys:sender$/ +number_len c-src/etags.c /^static int number_len (long) ATTRIBUTE_CONST;$/ +/numbersign ps-src/rfc1245.ps /^\/numbersign \/dollar \/percent \/ampersand \/quotesing/ numbervars prol-src/natded.prolog /^numbervars(X):-$/ +num_columns cp-src/conway.cpp 16 numericenumerate tex-src/texinfo.tex /^\\def\\numericenumerate{%$/ +num_input_events c-src/emacs/src/keyboard.c 210 +NUM_MOD_NAMES c-src/emacs/src/keyboard.c 6325 +numOfChannels cp-src/c.C 1 +NUM_RECENT_KEYS c-src/emacs/src/keyboard.c 91 +num_regs c-src/emacs/src/regex.h 430 +num_rows cp-src/conway.cpp 15 +NUMSTATS objc-src/PackInsp.h 36 nvars c-src/emacs/src/lisp.h 3140 obeyedspace tex-src/texinfo.tex /^\\gdef\\obeyedspace{\\ }$/ +Objc_help c-src/etags.c 613 +OBJCPPSRC make-src/Makefile /^OBJCPPSRC=SimpleCalc.H SimpleCalc.M$/ +OBJCSRC make-src/Makefile /^OBJCSRC=Subprocess.h Subprocess.m PackInsp.h PackI/ +Objc_suffixes c-src/etags.c 609 objdef c-src/etags.c 2484 object c-src/emacs/src/lisp.h 2128 object_registry cp-src/clheir.cpp 10 +OBJS make-src/Makefile /^OBJS=${GETOPTOBJS} ${REGEXOBJS} ${CHECKOBJS}$/ objtag c-src/etags.c 2453 objvar c-src/emacs/src/lisp.h 2297 obstack_chunk_alloc y-src/parse.y 47 obstack_chunk_free y-src/parse.y 48 ocatseen c-src/etags.c 2477 +/ocircumflex ps-src/rfc1245.ps /^\/ocircumflex \/odieresis \/otilde \/uacute \/ugrave \/u/ octave_MDiagArray2_h cp-src/MDiagArray2.h 29 octave_Range_h cp-src/Range.h 24 oddfooting tex-src/texinfo.tex /^\\def\\oddfooting{\\parsearg\\oddfootingxxx}$/ @@ -3532,52 +2794,56 @@ oimplementation c-src/etags.c 2474 oinbody c-src/etags.c 2478 ok objc-src/PackInsp.m /^-ok:sender$/ ok_to_echo_at_next_pause c-src/emacs/src/keyboard.c 159 -old_value c-src/emacs/src/lisp.h 2980 oldpage tex-src/texinfo.tex /^ \\let\\oldpage = \\page$/ +old_value c-src/emacs/src/lisp.h 2980 omethodcolon c-src/etags.c 2481 omethodparm c-src/etags.c 2482 omethodsign c-src/etags.c 2479 omethodtag c-src/etags.c 2480 -one tex-src/texinfo.tex /^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/ onepageout tex-src/texinfo.tex /^\\def\\cropmarks{\\let\\onepageout=\\croppageout }$/ onepageout tex-src/texinfo.tex /^\\def\\onepageout#1{\\hoffset=\\normaloffset$/ +one tex-src/texinfo.tex /^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/ onone c-src/etags.c 2472 oparenseen c-src/etags.c 2476 -open objc-src/PackInsp.m /^-open:sender$/ -open-dribble-file c-src/emacs/src/keyboard.c /^DEFUN ("open-dribble-file", Fopen_dribble_file, So/ -openInWorkspace objc-src/PackInsp.m /^static void openInWorkspace(const char *filename)$/ +OPENBUTTON objc-src/PackInsp.m 47 opencontents tex-src/texinfo.tex /^\\def\\opencontents{\\openout \\contentsfile = \\jobnam/ +open-dribble-file c-src/emacs/src/keyboard.c /^DEFUN ("open-dribble-file", Fopen_dribble_file, So/ openindices tex-src/texinfo.tex /^\\def\\openindices{%$/ +openInWorkspace objc-src/PackInsp.m /^static void openInWorkspace(const char *filename)$/ +open objc-src/PackInsp.m /^-open:sender$/ operationKeys objcpp-src/SimpleCalc.M /^- operationKeys:sender$/ -operator y-src/cccp.y 438 -operator ++ cp-src/functions.cpp /^Date & Date::operator ++ ( void ){$/ -operator += cp-src/functions.cpp /^Date & Date::operator += ( int days ){$/ +operator+ cp-src/c.C /^ A operator+(A& a) {};$/ +operator+ cp-src/c.C /^const A& A::operator+(const A&) { }$/ operator - cp-src/c.C /^void operator -(int, int) {}$/ -operator - cp-src/functions.cpp /^int Date::operator - ( Date d ){$/ -operator -- cp-src/functions.cpp /^Date & Date::operator -- ( void ){$/ +operator+ cp-src/c.C /^void operator+(int, int) {}$/ +operator = cp-src/functions.cpp /^Date & Date::operator = ( Date d ){$/ +operator += cp-src/functions.cpp /^Date & Date::operator += ( int days ){$/ operator -= cp-src/functions.cpp /^Date & Date::operator -= ( int days ){$/ +operator ++ cp-src/functions.cpp /^Date & Date::operator ++ ( void ){$/ +operator -- cp-src/functions.cpp /^Date & Date::operator -- ( void ){$/ +operator - cp-src/functions.cpp /^int Date::operator - ( Date d ){$/ operator < cp-src/functions.cpp /^int Date::operator < ( Date d ) {$/ -operator << cp-src/functions.cpp /^ostream& operator << ( ostream &c, Date d ) {$/ -operator = cp-src/MDiagArray2.h /^ MDiagArray2& operator = (const MDiagArray2/ -operator = cp-src/functions.cpp /^Date & Date::operator = ( Date d ){$/ operator == cp-src/functions.cpp /^int Date::operator == ( Date d ) {$/ operator > cp-src/functions.cpp /^int Date::operator > ( Date d ) {$/ operator >> cp-src/functions.cpp /^istream& operator >> ( istream &i, Date & dd ){$/ -operator MArray2 cp-src/MDiagArray2.h /^ operator MArray2 () const$/ +operator << cp-src/functions.cpp /^ostream& operator << ( ostream &c, Date d ) {$/ +operator = cp-src/MDiagArray2.h /^ MDiagArray2& operator = (const MDiagArray2/ +OperatorFun c-src/h.h 88 operator int cp-src/c.C /^void operator int(int, int) {}$/ operator int cp-src/fail.C /^ operator int() const {return x;}$/ -operator+ cp-src/c.C /^ A operator+(A& a) {};$/ -operator+ cp-src/c.C /^const A& A::operator+(const A&) { }$/ -operator+ cp-src/c.C /^void operator+(int, int) {}$/ +operator MArray2 cp-src/MDiagArray2.h /^ operator MArray2 () const$/ +operator y-src/cccp.y 438 opheader\defoptype tex-src/texinfo.tex /^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/ opnested tex-src/texinfo.tex /^\\gdef\\opnested{\\char`\\(\\global\\advance\\parencount / opnr tex-src/texinfo.tex /^\\def\\opnr{{\\sf\\char`\\(}} \\def\\clnr{{\\sf\\char`\\)}} / opparsebody\Edefop tex-src/texinfo.tex /^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/ oprm tex-src/texinfo.tex /^\\gdef\\oprm#1 {{\\rm\\char`\\(}#1 \\bf \\let(=\\opnested / oprotocol c-src/etags.c 2473 +/O ps-src/rfc1245.ps /^\/O {closepath} bind def$/ optheader tex-src/texinfo.tex /^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/ -option c-src/getopt.h 73 optional_argument c-src/getopt.h 91 +option c-src/getopt.h 73 +OPTIONS make-src/Makefile /^OPTIONS=--members --declarations --regex=@regexfil/ optx\defoptheader tex-src/texinfo.tex /^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/ optype tex-src/texinfo.tex /^\\begingroup\\defname {#2}{\\defoptype{} on #1}%$/ optype tex-src/texinfo.tex /^\\defopparsebody\\Edefop\\defopx\\defopheader\\defoptyp/ @@ -3586,129 +2852,193 @@ opx\defopheader tex-src/texinfo.tex /^\\defopparsebody\\Edefop\\defopx\\defophea ord_add_element prol-src/ordsets.prolog /^ord_add_element([], Element, [Element]).$/ ord_del_element prol-src/ordsets.prolog /^ord_del_element([], _, []).$/ ord_disjoint prol-src/ordsets.prolog /^ord_disjoint(Set1, Set2) :-$/ -ord_intersect prol-src/ordsets.prolog /^ord_intersect([Head1|Tail1], [Head2|Tail2]) :-$/ -ord_intersection prol-src/ordsets.prolog /^ord_intersection(Sets, Intersection) :- $/ -ord_intersection prol-src/ordsets.prolog /^ord_intersection([], Set2, [], Set2).$/ -ord_intersection prol-src/ordsets.prolog /^ord_intersection([], _, []).$/ +/ordfeminine ps-src/rfc1245.ps /^\/ordfeminine \/ordmasculine \/.notdef \/ae \/oslash \/q/ ord_intersection2 prol-src/ordsets.prolog /^ord_intersection2(1, [Set|Sets], Set0, Sets0) :- !/ ord_intersection3 prol-src/ordsets.prolog /^ord_intersection3(<, _, Set1, Head2, Tail2, Inters/ ord_intersection4 prol-src/ordsets.prolog /^ord_intersection4(<, _, Set1, Head2, Tail2, Inters/ +ord_intersection prol-src/ordsets.prolog /^ord_intersection([], _, []).$/ +ord_intersection prol-src/ordsets.prolog /^ord_intersection([], Set2, [], Set2).$/ +ord_intersection prol-src/ordsets.prolog /^ord_intersection(Sets, Intersection) :- $/ +ord_intersect prol-src/ordsets.prolog /^ord_intersect([Head1|Tail1], [Head2|Tail2]) :-$/ ord_member prol-src/ordsets.prolog /^ord_member(X, [E|Es]) :-$/ ord_seteq prol-src/ordsets.prolog /^ord_seteq(Set1, Set2) :-$/ ord_setproduct prol-src/ordsets.prolog /^ord_setproduct([], _, []).$/ ord_subset prol-src/ordsets.prolog /^ord_subset([], _).$/ ord_subtract prol-src/ordsets.prolog /^ord_subtract(Set1, Set2, Union) :-$/ ord_symdiff prol-src/ordsets.prolog /^ord_symdiff([], Set2, Set2).$/ -ord_union prol-src/ordsets.prolog /^ord_union(Set1, Set2, Union) :-$/ -ord_union prol-src/ordsets.prolog /^ord_union([], Union) :- !, Union = [].$/ ord_union4 prol-src/ordsets.prolog /^ord_union4(<, Head, Set1, Head2, Tail2, [Head|Unio/ ord_union_all prol-src/ordsets.prolog /^ord_union_all(1, [Set|Sets], Set, Sets) :- !.$/ +ord_union prol-src/ordsets.prolog /^ord_union(Set1, Set2, Union) :-$/ +ord_union prol-src/ordsets.prolog /^ord_union([], Union) :- !, Union = [].$/ +OR y-src/cccp.c 10 oss html-src/softwarelibero.html /^Il movimento open source$/ otagseen c-src/etags.c 2475 -outputTime cp-src/c.C 9 +OTAGS make-src/Makefile /^OTAGS: oetags ${SRCS} srclist$/ +/Otilde ps-src/rfc1245.ps /^\/Otilde \/OE \/oe \/endash \/emdash \/quotedblleft \/quo/ output_file perl-src/htlmify-cystic 35 output_files perl-src/htlmify-cystic 32 outputtable html-src/algrthms.html /^Output$/ +outputTime cp-src/c.C 9 outsyn prol-src/natded.prolog /^outsyn(['Any'],_).$/ -p c-src/emacs/src/lisp.h 4673 -p c-src/emacs/src/lisp.h 4679 -p.x forth-src/test-forth.fth /^ 1 CELLS +FIELD p.x \\ A single cell filed name/ -p.y forth-src/test-forth.fth /^ 1 CELLS +FIELD p.y \\ A single cell field name/ -p/f ada-src/etags-test-for.ada /^ function p pragma Import (C,$/ -p/f ada-src/etags-test-for.ada /^function p ("p");$/ -pD c-src/emacs/src/lisp.h 165 -pD c-src/emacs/src/lisp.h 167 -pD c-src/emacs/src/lisp.h 169 -pD c-src/emacs/src/lisp.h 171 -pI c-src/emacs/src/lisp.h 106 -pI c-src/emacs/src/lisp.h 94 -pI c-src/emacs/src/lisp.h 99 -pMd c-src/emacs/src/lisp.h 150 -pMd c-src/emacs/src/lisp.h 155 -pMu c-src/emacs/src/lisp.h 151 -pMu c-src/emacs/src/lisp.h 156 -p_next c-src/etags.c 258 -page tex-src/texinfo.tex /^ \\let\\page = \\oldpage$/ -page tex-src/texinfo.tex /^ \\def\\page{%$/ -page tex-src/texinfo.tex /^\\def\\page{\\par\\vfill\\supereject}$/ +OVERLAYP c-src/emacs/src/lisp.h /^OVERLAYP (Lisp_Object x)$/ +Overview tex-src/gzip.texi /^@node Overview, Sample, Copying, Top$/ +PackageInspector objc-src/PackInsp.h /^@interface PackageInspector:WMInspector$/ pagealignmacro tex-src/texinfo.tex /^\\global\\let\\pagealignmacro=\\chapoddpage$/ -pagealignmacro tex-src/texinfo.tex /^\\global\\let\\pagealignmacro=\\chappager$/ pagealignmacro tex-src/texinfo.tex /^\\global\\let\\pagealignmacro=\\chappager}$/ +pagealignmacro tex-src/texinfo.tex /^\\global\\let\\pagealignmacro=\\chappager$/ pagebody tex-src/texinfo.tex /^\\def\\pagebody#1{\\vbox to\\pageheight{\\boxmaxdepth=\\/ pagecontents tex-src/texinfo.tex /^\\gdef\\pagecontents#1{\\ifvoid\\topins\\else\\unvbox\\to/ +/pagedimen ps-src/rfc1245.ps /^\/pagedimen { $/ pagesize c-src/emacs/src/gmalloc.c 1707 pagesofar tex-src/texinfo.tex /^\\def\\pagesofar{\\unvbox\\partialpage %$/ +page tex-src/texinfo.tex /^ \\def\\page{%$/ +page tex-src/texinfo.tex /^\\def\\page{\\par\\vfill\\supereject}$/ +page tex-src/texinfo.tex /^ \\let\\page = \\oldpage$/ pair merc-src/accumulator.m /^:- import_module pair.$/ -par tex-src/texinfo.tex /^\\let\\par=\\lisppar$/ -par tex-src/texinfo.tex /^{\\let\\par=\\endgraf \\smallbreak}%$/ +/papersize ps-src/rfc1245.ps /^\/papersize {$/ paragraphindent tex-src/texinfo.tex /^\\let\\paragraphindent=\\comment$/ +/paragraph ps-src/rfc1245.ps /^\/paragraph \/germandbls \/registered \/copyright \/tra/ +/parenright ps-src/rfc1245.ps /^\/parenright \/asterisk \/plus \/comma \/hyphen \/period/ parent c-src/emacs/src/keyboard.c 8745 parent c-src/emacs/src/lisp.h 1590 -parse prol-src/natded.prolog /^parse(Ws,Cat):-$/ -parseFromVars php-src/lce_functions.php /^ function parseFromVars($prefix)$/ +parseargdiscardspace tex-src/texinfo.tex /^\\gdef\\parseargdiscardspace {\\begingroup\\obeylines\\/ +parseargline tex-src/texinfo.tex /^\\def\\parseargline{\\begingroup \\obeylines \\parsearg/ +parsearglinex tex-src/texinfo.tex /^\\gdef\\parsearglinex #1^^M{\\endgroup \\next {#1}}}$/ +parsearg tex-src/texinfo.tex /^\\def\\parsearg #1{\\let\\next=#1\\begingroup\\obeylines/ +parseargx tex-src/texinfo.tex /^\\def\\parseargx{%$/ +parsebody\Edefmac tex-src/texinfo.tex /^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/ +parsebody\Edefspec tex-src/texinfo.tex /^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/ +parsebody\Edeftypefun tex-src/texinfo.tex /^\\def\\deftypefun{\\defparsebody\\Edeftypefun\\deftypef/ +parsebody\Edefun tex-src/texinfo.tex /^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/ parse_c_expression y-src/cccp.y /^parse_c_expression (string)$/ parse_cgi prol-src/natded.prolog /^parse_cgi(TokenList,KeyVals):-$/ parse_error y-src/parse.y 82 parse_escape y-src/cccp.y /^parse_escape (string_ptr)$/ +parseFromVars php-src/lce_functions.php /^ function parseFromVars($prefix)$/ parse_hash y-src/parse.y 64 parse_menu_item c-src/emacs/src/keyboard.c /^parse_menu_item (Lisp_Object item, int inmenubar)$/ parse_modifiers c-src/emacs/src/keyboard.c /^parse_modifiers (Lisp_Object symbol)$/ parse_modifiers_uncached c-src/emacs/src/keyboard.c /^parse_modifiers_uncached (Lisp_Object symbol, ptrd/ parse_number y-src/cccp.y /^parse_number (olen)$/ -parse_return y-src/parse.y 74 +parse prol-src/natded.prolog /^parse(Ws,Cat):-$/ parse_return_error y-src/cccp.y 70 +parse_return y-src/parse.y 74 parse_solitary_modifier c-src/emacs/src/keyboard.c /^parse_solitary_modifier (Lisp_Object symbol)$/ parse_tool_bar_item c-src/emacs/src/keyboard.c /^parse_tool_bar_item (Lisp_Object key, Lisp_Object / parse_tree merc-src/accumulator.m /^:- import_module parse_tree.$/ -parsearg tex-src/texinfo.tex /^\\def\\parsearg #1{\\let\\next=#1\\begingroup\\obeylines/ -parseargdiscardspace tex-src/texinfo.tex /^\\gdef\\parseargdiscardspace {\\begingroup\\obeylines\\/ -parseargline tex-src/texinfo.tex /^\\def\\parseargline{\\begingroup \\obeylines \\parsearg/ -parsearglinex tex-src/texinfo.tex /^\\gdef\\parsearglinex #1^^M{\\endgroup \\next {#1}}}$/ -parseargx tex-src/texinfo.tex /^\\def\\parseargx{%$/ -parsebody\Edefmac tex-src/texinfo.tex /^\\def\\defmac{\\defparsebody\\Edefmac\\defmacx\\defmache/ -parsebody\Edefspec tex-src/texinfo.tex /^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/ -parsebody\Edeftypefun tex-src/texinfo.tex /^\\def\\deftypefun{\\defparsebody\\Edeftypefun\\deftypef/ -parsebody\Edefun tex-src/texinfo.tex /^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/ +par tex-src/texinfo.tex /^{\\let\\par=\\endgraf \\smallbreak}%$/ +par tex-src/texinfo.tex /^\\let\\par=\\lisppar$/ +Pascal_functions c-src/etags.c /^Pascal_functions (FILE *inf)$/ +Pascal_help c-src/etags.c 621 +Pascal_suffixes c-src/etags.c 619 +PASSRC make-src/Makefile /^PASSRC=common.pas$/ pat c-src/etags.c 262 pattern c-src/etags.c 260 pchapsepmacro tex-src/texinfo.tex /^\\global\\let\\pchapsepmacro=\\chapbreak$/ pchapsepmacro tex-src/texinfo.tex /^\\global\\let\\pchapsepmacro=\\chapoddpage$/ pchapsepmacro tex-src/texinfo.tex /^\\global\\let\\pchapsepmacro=\\chappager$/ +p c-src/emacs/src/lisp.h 4673 +p c-src/emacs/src/lisp.h 4679 +pD c-src/emacs/src/lisp.h 165 +pD c-src/emacs/src/lisp.h 167 +pD c-src/emacs/src/lisp.h 169 +pD c-src/emacs/src/lisp.h 171 pdlcount c-src/emacs/src/lisp.h 3046 +PDT c-src/h.h /^ Date 04 May 87 235311 PDT (Mon)$/ pending-delete-mode el-src/TAGTEST.EL /^(defalias 'pending-delete-mode 'delete-selection-m/ pending_funcalls c-src/emacs/src/keyboard.c 4377 pending_signals c-src/emacs/src/keyboard.c 80 +/periodcentered ps-src/rfc1245.ps /^\/periodcentered \/quotesinglbase \/quotedblbase \/per/ +Perl_functions c-src/etags.c /^Perl_functions (FILE *inf)$/ +Perl_help c-src/etags.c 630 +Perl_interpreters c-src/etags.c 628 +PERLSRC make-src/Makefile /^PERLSRC=htlmify-cystic yagrip.pl kai-test.pl mirro/ +Perl_suffixes c-src/etags.c 626 +p/f ada-src/etags-test-for.ada /^function p ("p");$/ +p/f ada-src/etags-test-for.ada /^ function p pragma Import (C,$/ pfatal c-src/etags.c /^pfatal (const char *s1)$/ pfdset c-src/h.h 57 pfnote c-src/etags.c /^pfnote (char *name, bool is_func, char *linestart,/ +/PF ps-src/rfc1245.ps /^\/PF { $/ +PHP_functions c-src/etags.c /^PHP_functions (FILE *inf)$/ +PHP_help c-src/etags.c 639 +PHPSRC make-src/Makefile /^PHPSRC=lce_functions.php ptest.php sendmail.php$/ +PHP_suffixes c-src/etags.c 637 +pI c-src/emacs/src/lisp.h 106 +pI c-src/emacs/src/lisp.h 94 +pI c-src/emacs/src/lisp.h 99 pindex tex-src/texinfo.tex /^\\def\\pindex {\\pgindex}$/ pinned c-src/emacs/src/lisp.h 679 +Pkg1/b ada-src/etags-test-for.ada /^package body Pkg1 is$/ +Pkg1/b ada-src/waroquiers.ada /^package body Pkg1 is$/ +Pkg1_Func1/f ada-src/etags-test-for.ada /^ function Pkg1_Func1 return Boolean;$/ +Pkg1_Func1/f ada-src/etags-test-for.ada /^function Pkg1_Func1 return Boolean is$/ +Pkg1_Func1/f ada-src/etags-test-for.ada /^ function Pkg1_Func1 return Boolean is separate;$/ +Pkg1_Func1/f ada-src/waroquiers.ada /^ function Pkg1_Func1 return Boolean;$/ +Pkg1_Func1/f ada-src/waroquiers.ada /^function Pkg1_Func1 return Boolean is$/ +Pkg1_Func1/f ada-src/waroquiers.ada /^ function Pkg1_Func1 return Boolean is separate;$/ +Pkg1_Func2/f ada-src/etags-test-for.ada /^ function Pkg1_Func2 (Ijk : Integer; Z : Integer)/ +Pkg1_Func2/f ada-src/waroquiers.ada /^ function Pkg1_Func2 (Ijk : Integer; Z : Integer)/ +Pkg1_Pkg1/b ada-src/etags-test-for.ada /^package body Pkg1_Pkg1 is$/ +Pkg1_Pkg1/b ada-src/etags-test-for.ada /^ package body Pkg1_Pkg1 is separate;$/ +Pkg1_Pkg1/b ada-src/waroquiers.ada /^package body Pkg1_Pkg1 is$/ +Pkg1_Pkg1/b ada-src/waroquiers.ada /^ package body Pkg1_Pkg1 is separate;$/ +Pkg1_Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Pkg1_Proc1;$/ +Pkg1_Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Pkg1_Proc1 is$/ +Pkg1_Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Pkg1_Proc1;$/ +Pkg1_Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Pkg1_Proc1 is$/ +Pkg1_Pkg1/s ada-src/etags-test-for.ada /^ package Pkg1_Pkg1 is$/ +Pkg1_Pkg1/s ada-src/waroquiers.ada /^ package Pkg1_Pkg1 is$/ +Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc1;$/ +Pkg1_Proc1/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc1 is$/ +Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc1;$/ +Pkg1_Proc1/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc1 is$/ +Pkg1_Proc2/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc2 (I : Integer);$/ +Pkg1_Proc2/p ada-src/etags-test-for.ada /^ procedure Pkg1_Proc2 (I : Integer) is$/ +Pkg1_Proc2/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc2 (I : Integer);$/ +Pkg1_Proc2/p ada-src/waroquiers.ada /^ procedure Pkg1_Proc2 (I : Integer) is$/ +Pkg1/s ada-src/etags-test-for.ada /^package Pkg1 is$/ +Pkg1/s ada-src/waroquiers.ada /^package Pkg1 is$/ +plainc c-src/etags.c 2934 plain_C_entries c-src/etags.c /^plain_C_entries (FILE *inf)$/ plain_C_suffixes c-src/etags.c 643 -plainc c-src/etags.c 2934 plainsecheading tex-src/texinfo.tex /^\\def\\plainsecheading #1{\\secheadingi {#1}}$/ plist c-src/emacs/src/lisp.h 2040 plist c-src/emacs/src/lisp.h 697 plus cp-src/functions.cpp /^void Date::plus ( int days , int month , int year / plus go-src/test1.go 5 plusvalseq prol-src/natded.prolog /^plusvalseq([]) --> [].$/ +pMd c-src/emacs/src/lisp.h 150 +pMd c-src/emacs/src/lisp.h 155 +pMu c-src/emacs/src/lisp.h 151 +pMu c-src/emacs/src/lisp.h 156 +p_next c-src/etags.c 258 +POEntryAD php-src/lce_functions.php 29 +POEntry php-src/lce_functions.php 105 +POEntry php-src/lce_functions.php /^ function POEntry()$/ +pointer c-src/emacs/src/lisp.h 2125 point forth-src/test-forth.fth /^BEGIN-STRUCTURE point \\ create the named structure/ point tex-src/texinfo.tex /^\\def\\point{$\\star$}$/ -pointer c-src/emacs/src/lisp.h 2125 -poll_for_input c-src/emacs/src/keyboard.c /^poll_for_input (struct atimer *timer)$/ poll_for_input_1 c-src/emacs/src/keyboard.c /^poll_for_input_1 (void)$/ +poll_for_input c-src/emacs/src/keyboard.c /^poll_for_input (struct atimer *timer)$/ poll_suppress_count c-src/emacs/src/keyboard.c 1908 poll_suppress_count c-src/emacs/src/lisp.h 3047 poll_timer c-src/emacs/src/keyboard.c 1915 -pop-tag-mark el-src/emacs/lisp/progmodes/etags.el /^(defalias 'pop-tag-mark 'xref-pop-marker-stack)$/ -pop_kboard c-src/emacs/src/keyboard.c /^pop_kboard (void)$/ popclass_above c-src/etags.c /^popclass_above (int bracelev)$/ +pop_kboard c-src/emacs/src/keyboard.c /^pop_kboard (void)$/ +pop-tag-mark el-src/emacs/lisp/progmodes/etags.el /^(defalias 'pop-tag-mark 'xref-pop-marker-stack)$/ +POReader php-src/lce_functions.php 163 +POReader php-src/lce_functions.php /^ function POReader($domain, $filename)$/ +PORManager php-src/lce_functions.php 498 +PORManager php-src/lce_functions.php /^ function PORManager()$/ position_to_Time c-src/emacs/src/keyboard.c /^position_to_Time (ptrdiff_t pos)$/ posix_memalign c-src/emacs/src/gmalloc.c /^posix_memalign (void **memptr, size_t alignment, s/ posn-at-point c-src/emacs/src/keyboard.c /^DEFUN ("posn-at-point", Fposn_at_point, Sposn_at_p/ posn-at-x-y c-src/emacs/src/keyboard.c /^DEFUN ("posn-at-x-y", Fposn_at_x_y, Sposn_at_x_y, / possible_sum_sign y-src/cccp.y /^#define possible_sum_sign(a, b, sum) ((((a) ^ (b))/ +PostControls pyt-src/server.py /^ def PostControls(self):$/ post pyt-src/server.py /^ def post(self):$/ +POSTSCRIPTFLAGS make-src/Makefile /^POSTSCRIPTFLAGS=--language=none --regex='#\/[^ \\t{]/ pot_etags_version c-src/etags.c 81 pp1 c-src/dostorture.c /^int pp1($/ pp1 c-src/torture.c /^int pp1($/ @@ -3725,139 +3055,243 @@ pp_html_table_fitch_tree prol-src/natded.prolog /^pp_html_table_fitch_tree(T):-$ pp_html_table_tree prol-src/natded.prolog /^pp_html_table_tree(T):-$/ pp_html_tree prol-src/natded.prolog /^pp_html_tree(ass(Syn,V,'$VAR'(N))):-$/ pp_html_trees prol-src/natded.prolog /^pp_html_trees([T|Ts],N,M):-$/ -pp_lam prol-src/natded.prolog /^pp_lam(Var^Alpha):-$/ pp_lam_bracket prol-src/natded.prolog /^pp_lam_bracket(A^B):-$/ pp_lam_paren prol-src/natded.prolog /^pp_lam_paren(Var^Alpha):-$/ +pp_lam prol-src/natded.prolog /^pp_lam(Var^Alpha):-$/ pp_paren prol-src/natded.prolog /^pp_paren(C):-$/ pp_rule prol-src/natded.prolog /^pp_rule(fe):-write('\/E').$/ -pp_syn prol-src/natded.prolog /^pp_syn(A\/B):-$/ +/P ps-src/rfc1245.ps /^\/P { $/ pp_syn_back prol-src/natded.prolog /^pp_syn_back(A\/B):-$/ pp_syn_paren prol-src/natded.prolog /^pp_syn_paren(A\/B):-$/ +pp_syn prol-src/natded.prolog /^pp_syn(A\/B):-$/ pp_tree prol-src/natded.prolog /^pp_tree(T):-$/ pp_trees prol-src/natded.prolog /^pp_trees([T|Ts],Column):-$/ -pp_word prol-src/natded.prolog /^pp_word(W):-$/ pp_word_list prol-src/natded.prolog /^pp_word_list([]).$/ pp_word_list_rest prol-src/natded.prolog /^pp_word_list_rest([]).$/ +pp_word prol-src/natded.prolog /^pp_word(W):-$/ +Pre_Call_State/t ada-src/2ataspri.ads /^ type Pre_Call_State is new System.Address;$/ +.PRECIOUS make-src/Makefile /^.PRECIOUS: ETAGS CTAGS ETAGS16 CTAGS16 ETAGS17 CTA/ predicate c-src/emacs/src/lisp.h 2307 +prev c.c 175 prev c-src/emacs/src/gmalloc.c 165 prev c-src/emacs/src/gmalloc.c 189 prev c-src/emacs/src/lisp.h 2191 -prev c.c 175 primary tex-src/texinfo.tex /^\\def\\primary #1{\\line{#1\\hfil}}$/ -print tex-src/texinfo.tex /^\\def\\print{\\leavevmode\\lower.1ex\\hbox to 1em{\\hfil/ -print tex-src/texinfo.tex /^\\def\\print{\\realbackslash print}$/ +PrintAdd go-src/test1.go /^func (n intNumber) PrintAdd() {$/ +PrintAdd go-src/test1.go /^func (s str) PrintAdd() {$/ printClassification php-src/lce_functions.php /^ function printClassification()$/ -print_help c-src/etags.c /^print_help (argument *argbuffer)$/ -print_language_names c-src/etags.c /^print_language_names (void)$/ -print_version c-src/etags.c /^print_version (void)$/ printedmanual tex-src/texinfo.tex /^\\def\\printedmanual{\\ignorespaces #5}%$/ printedmanual tex-src/texinfo.tex /^section ``\\printednodename'' in \\cite{\\printedmanu/ printednodename tex-src/texinfo.tex /^\\def\\printednodename{\\ignorespaces #1}%$/ printednodename tex-src/texinfo.tex /^\\def\\printednodename{\\ignorespaces #3}%$/ +print_help c-src/etags.c /^print_help (argument *argbuffer)$/ printindex tex-src/texinfo.tex /^\\def\\printindex{\\parsearg\\doprintindex}$/ +print_language_names c-src/etags.c /^print_language_names (void)$/ printmax_t c-src/emacs/src/lisp.h 148 printmax_t c-src/emacs/src/lisp.h 153 +print tex-src/texinfo.tex /^\\def\\print{\\leavevmode\\lower.1ex\\hbox to 1em{\\hfil/ +print tex-src/texinfo.tex /^\\def\\print{\\realbackslash print}$/ +PRINT_UNDOCUMENTED_OPTIONS_HELP c-src/etags.c 804 +print_version c-src/etags.c /^print_version (void)$/ +Private objc-src/Subprocess.m /^@interface Subprocess(Private)$/ +Private_T/b ada-src/etags-test-for.ada /^ task body Private_T is$/ +Private_T/b ada-src/waroquiers.ada /^ task body Private_T is$/ +Private_T/k ada-src/etags-test-for.ada /^ task Private_T;$/ +Private_T/k ada-src/waroquiers.ada /^ task Private_T;$/ +Private_T/p ada-src/etags-test-for.ada /^ procedure Private_T;$/ +Private_T/p ada-src/etags-test-for.ada /^ procedure Private_T is$/ +Private_T/p ada-src/waroquiers.ada /^ procedure Private_T;$/ +Private_T/p ada-src/waroquiers.ada /^ procedure Private_T is$/ +Private_T/t ada-src/etags-test-for.ada /^ type Private_T is$/ +Private_T/t ada-src/etags-test-for.ada /^ type Private_T is private;$/ +Private_T/t ada-src/waroquiers.ada /^ type Private_T is$/ +Private_T/t ada-src/waroquiers.ada /^ type Private_T is private;$/ +Problems tex-src/gzip.texi /^@node Problems, Concept Index, Tapes, Top$/ proc c-src/h.h 87 process_file c-src/etags.c /^process_file (FILE *fh, char *fn, language *lang)$/ process_file_name c-src/etags.c /^process_file_name (char *file, language *lang)$/ +PROCESSP c-src/emacs/src/lisp.h /^PROCESSP (Lisp_Object a)$/ process_pending_signals c-src/emacs/src/keyboard.c /^process_pending_signals (void)$/ process_special_events c-src/emacs/src/keyboard.c /^process_special_events (void)$/ process_tool_bar_item c-src/emacs/src/keyboard.c /^process_tool_bar_item (Lisp_Object key, Lisp_Objec/ +Proc/t ada-src/2ataspri.ads /^ type Proc is access procedure (Addr : System.Ad/ prof make-src/Makefile /^prof: ETAGS$/ prolog_atom c-src/etags.c /^prolog_atom (char *s, size_t pos)$/ +Prolog_functions c-src/etags.c /^Prolog_functions (FILE *inf)$/ +Prolog_help c-src/etags.c 654 prolog_pr c-src/etags.c /^prolog_pr (char *s, char *last)$/ prolog_skip_comment c-src/etags.c /^prolog_skip_comment (linebuffer *plb, FILE *inf)$/ +Prolog_suffixes c-src/etags.c 652 +PROLSRC make-src/Makefile /^PROLSRC=ordsets.prolog natded.prolog$/ +PROP c-src/emacs/src/keyboard.c 8379 +PROP c-src/emacs/src/keyboard.c /^#define PROP(IDX) AREF (tool_bar_item_properties, / prop c-src/etags.c 209 +PROTECT_MALLOC_STATE c-src/emacs/src/gmalloc.c /^#define PROTECT_MALLOC_STATE(PROT) \/* empty *\/$/ +PROTECT_MALLOC_STATE c-src/emacs/src/gmalloc.c /^#define PROTECT_MALLOC_STATE(PROT) protect_malloc_/ protect_malloc_state c-src/emacs/src/gmalloc.c /^protect_malloc_state (int protect_p)$/ -ptexL tex-src/texinfo.tex /^\\let\\ptexL=\\L$/ +PRTPKG f-src/entry.for /^ LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL,/ +PRTPKG f-src/entry.strange /^ LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL,/ +PRTPKG f-src/entry.strange_suffix /^ LOGICAL FUNCTION PRTPKG ( SHORT, LONG, EXPL,/ +PSEUDO c-src/sysdep.h /^#define PSEUDO(name, syscall_name, args) / +PSEUDOVECSIZE c-src/emacs/src/lisp.h /^#define PSEUDOVECSIZE(type, nonlispfield) \\$/ +PSEUDOVECTOR_AREA_BITS c-src/emacs/src/lisp.h 818 +PSEUDOVECTOR_FLAG c-src/emacs/src/lisp.h 774 +PSEUDOVECTORP c-src/emacs/src/lisp.h /^PSEUDOVECTORP (Lisp_Object a, int code)$/ +PSEUDOVECTOR_REST_BITS c-src/emacs/src/lisp.h 813 +PSEUDOVECTOR_REST_MASK c-src/emacs/src/lisp.h 814 +PSEUDOVECTOR_SIZE_BITS c-src/emacs/src/lisp.h 808 +PSEUDOVECTOR_SIZE_MASK c-src/emacs/src/lisp.h 809 +PSEUDOVECTOR_TYPEP c-src/emacs/src/lisp.h /^PSEUDOVECTOR_TYPEP (struct vectorlike_header *a, i/ +PS_functions c-src/etags.c /^PS_functions (FILE *inf)$/ +PS_help c-src/etags.c 649 +PSSRC make-src/Makefile /^PSSRC=rfc1245.ps$/ +PS_suffixes c-src/etags.c 647 ptexb tex-src/texinfo.tex /^\\let\\ptexb=\\b$/ ptexbullet tex-src/texinfo.tex /^\\let\\ptexbullet=\\bullet$/ ptexc tex-src/texinfo.tex /^\\let\\ptexc=\\c$/ -ptexdot tex-src/texinfo.tex /^\\let\\ptexdot=\\.$/ ptexdots tex-src/texinfo.tex /^\\let\\ptexdots=\\dots$/ +ptexdot tex-src/texinfo.tex /^\\let\\ptexdot=\\.$/ ptexend tex-src/texinfo.tex /^\\let\\ptexend=\\end$/ ptexequiv tex-src/texinfo.tex /^\\let\\ptexequiv = \\equiv$/ ptexfootnote tex-src/texinfo.tex /^\\let\\ptexfootnote=\\footnote$/ ptexi tex-src/texinfo.tex /^\\let\\ptexi=\\i$/ -ptexl tex-src/texinfo.tex /^\\let\\ptexl=\\l$/ ptexlbrace tex-src/texinfo.tex /^\\let\\ptexlbrace=\\{$/ +ptexl tex-src/texinfo.tex /^\\let\\ptexl=\\l$/ +ptexL tex-src/texinfo.tex /^\\let\\ptexL=\\L$/ ptexrbrace tex-src/texinfo.tex /^\\let\\ptexrbrace=\\}$/ ptexstar tex-src/texinfo.tex /^\\let\\ptexstar=\\*$/ ptext tex-src/texinfo.tex /^\\let\\ptext=\\t$/ pthread_mutexattr_setprio_ceiling/f ada-src/2ataspri.adb /^ function pthread_mutexattr_setprio_ceiling$/ pthread_mutexattr_setprotocol/f ada-src/2ataspri.adb /^ function pthread_mutexattr_setprotocol$/ +PTY_LENGTH objc-src/Subprocess.m 21 +PTY_TEMPLATE objc-src/Subprocess.m 20 +Public_T/t ada-src/etags-test-for.ada /^ type Public_T is$/ +Public_T/t ada-src/waroquiers.ada /^ type Public_T is$/ purpose c-src/emacs/src/lisp.h 1594 -push_kboard c-src/emacs/src/keyboard.c /^push_kboard (struct kboard *k)$/ pushclass_above c-src/etags.c /^pushclass_above (int bracelev, char *str, int len)/ +PUSH_C_STR c-src/emacs/src/keyboard.c /^#define PUSH_C_STR(str, listvar) \\$/ +PUSH_HANDLER c-src/emacs/src/lisp.h /^#define PUSH_HANDLER(c, tag_ch_val, handlertype) \\/ +push_kboard c-src/emacs/src/keyboard.c /^push_kboard (struct kboard *k)$/ put_entries c-src/etags.c /^put_entries (register node *np)$/ +PVEC_BOOL_VECTOR c-src/emacs/src/lisp.h 787 +PVEC_BUFFER c-src/emacs/src/lisp.h 788 +PVEC_CHAR_TABLE c-src/emacs/src/lisp.h 796 +PVEC_COMPILED c-src/emacs/src/lisp.h 795 +PVEC_FONT c-src/emacs/src/lisp.h 798 +PVEC_FRAME c-src/emacs/src/lisp.h 785 +PVEC_FREE c-src/emacs/src/lisp.h 783 +PVEC_HASH_TABLE c-src/emacs/src/lisp.h 789 +PVEC_NORMAL_VECTOR c-src/emacs/src/lisp.h 782 +PVEC_OTHER c-src/emacs/src/lisp.h 793 +PVEC_PROCESS c-src/emacs/src/lisp.h 784 +PVEC_SUB_CHAR_TABLE c-src/emacs/src/lisp.h 797 +PVEC_SUBR c-src/emacs/src/lisp.h 792 +PVEC_TERMINAL c-src/emacs/src/lisp.h 790 pvec_type c-src/emacs/src/lisp.h 780 +PVEC_TYPE_MASK c-src/emacs/src/lisp.h 819 +PVEC_WINDOW_CONFIGURATION c-src/emacs/src/lisp.h 791 +PVEC_WINDOW c-src/emacs/src/lisp.h 786 +p.x forth-src/test-forth.fth /^ 1 CELLS +FIELD p.x \\ A single cell filed name/ pxref tex-src/texinfo.tex /^\\def\\pxref#1{see \\xrefX[#1,,,,,,,]}$/ +p.y forth-src/test-forth.fth /^ 1 CELLS +FIELD p.y \\ A single cell field name/ +Python_functions c-src/etags.c /^Python_functions (FILE *inf)$/ +Python_help c-src/etags.c 660 +Python_suffixes c-src/etags.c 658 +PYTSRC make-src/Makefile /^PYTSRC=server.py$/ quantizing html-src/algrthms.html /^Quantizing the Received$/ questo ../c/c.web 34 quiettest make-src/Makefile /^quiettest:$/ quit_char c-src/emacs/src/keyboard.c 192 +QUIT c-src/emacs/src/lisp.h 3101 +QUITP c-src/emacs/src/lisp.h 3112 quit_throw_to_read_char c-src/emacs/src/keyboard.c /^quit_throw_to_read_char (bool from_signal)$/ quotation tex-src/texinfo.tex /^\\def\\quotation{%$/ -qux ruby-src/test1.ru /^ alias_method :qux, :tee, attr_accessor(:bogus)/ +/quoteleft ps-src/rfc1245.ps /^\/quoteleft \/quoteright \/.notdef \/.notdef \/ydieresi/ qux1 ruby-src/test1.ru /^ :qux1)$/ +qux ruby-src/test1.ru /^ alias_method :qux, :tee, attr_accessor(:bogus)/ qux= ruby-src/test1.ru /^ def qux=(tee)$/ -r tex-src/texinfo.tex /^\\def\\r##1{\\realbackslash r {##1}}$/ -r tex-src/texinfo.tex /^\\def\\r##1{\\realbackslash r {##1}}%$/ -r tex-src/texinfo.tex /^\\def\\r#1{{\\rm #1}} % roman font$/ -r tex-src/texinfo.tex /^\\let\\r=\\indexdummyfont$/ r0 c-src/sysdep.h 54 r1 c-src/sysdep.h 55 r_alloc c-src/emacs/src/lisp.h /^extern void *r_alloc (void **, size_t) ATTRIBUTE_A/ -range_exp y-src/parse.y 269 +Range cp-src/Range.h 35 +Range cp-src/Range.h /^ Range (const Range& r)$/ +Range cp-src/Range.h /^ Range (double b, double l)$/ +Range cp-src/Range.h /^ Range (double b, double l, double i)$/ +Range cp-src/Range.h /^ Range (void)$/ +RANGED_INTEGERP c-src/emacs/src/lisp.h /^RANGED_INTEGERP (intmax_t lo, Lisp_Object x, intma/ range_exp_list y-src/parse.y 273 -raw_keybuf c-src/emacs/src/keyboard.c 116 -raw_keybuf_count c-src/emacs/src/keyboard.c 117 +range_exp y-src/parse.y 269 rawbackslash tex-src/texinfo.tex /^\\let\\rawbackslash=\\relax%$/ -rawbackslashxx tex-src/texinfo.tex /^\\def\\rawbackslashxx{\\indexbackslash}% \\indexbacksl/ rawbackslashxx tex-src/texinfo.tex /^\\def\\rawbackslashxx{\\indexbackslash}%$/ +rawbackslashxx tex-src/texinfo.tex /^\\def\\rawbackslashxx{\\indexbackslash}% \\indexbacksl/ +raw_keybuf_count c-src/emacs/src/keyboard.c 117 +raw_keybuf c-src/emacs/src/keyboard.c 116 rbrb tex-src/texinfo.tex /^\\def\\lbrb{{\\bf\\char`\\[}} \\def\\rbrb{{\\bf\\char`\\]}}$/ rbtp c.c 240 -re_iswctype c-src/emacs/src/regex.h 602 -re_nsub c-src/emacs/src/regex.h 364 -re_pattern_buffer c-src/emacs/src/regex.h 335 -re_pattern_buffer c-src/h.h 119 -re_registers c-src/emacs/src/regex.h 428 -re_wchar_t c-src/emacs/src/regex.h 600 -re_wchar_t c-src/emacs/src/regex.h 623 -re_wctype c-src/emacs/src/regex.h 601 -re_wctype_t c-src/emacs/src/regex.h 599 -re_wctype_t c-src/emacs/src/regex.h 618 -re_wctype_to_bit c-src/emacs/src/regex.h /^# define re_wctype_to_bit(cc) 0$/ -read cp-src/conway.hpp /^ char read() { return alive; }$/ -read php-src/lce_functions.php /^ function read()$/ -read-key-sequence c-src/emacs/src/keyboard.c /^DEFUN ("read-key-sequence", Fread_key_sequence, Sr/ -read-key-sequence-vector c-src/emacs/src/keyboard.c /^DEFUN ("read-key-sequence-vector", Fread_key_seque/ +RCSid objc-src/PackInsp.m 30 read1 ruby-src/test1.ru /^ attr_reader :read1 , :read2; attr_writer :writ/ read2 ruby-src/test1.ru /^ attr_reader :read1 , :read2; attr_writer :writ/ +readable_events c-src/emacs/src/keyboard.c /^readable_events (int flags)$/ +READABLE_EVENTS_DO_TIMERS_NOW c-src/emacs/src/keyboard.c 346 +READABLE_EVENTS_FILTER_EVENTS c-src/emacs/src/keyboard.c 347 +READABLE_EVENTS_IGNORE_SQUEEZABLES c-src/emacs/src/keyboard.c 348 +readauxfile tex-src/texinfo.tex /^\\def\\readauxfile{%$/ read_char c-src/emacs/src/keyboard.c /^read_char (int commandflag, Lisp_Object map,$/ read_char_help_form_unwind c-src/emacs/src/keyboard.c /^read_char_help_form_unwind (void)$/ read_char_minibuf_menu_prompt c-src/emacs/src/keyboard.c /^read_char_minibuf_menu_prompt (int commandflag,$/ read_char_x_menu_prompt c-src/emacs/src/keyboard.c /^read_char_x_menu_prompt (Lisp_Object map,$/ +read cp-src/conway.hpp /^ char read() { return alive; }$/ read_decoded_event_from_main_queue c-src/emacs/src/keyboard.c /^read_decoded_event_from_main_queue (struct timespe/ read_event_from_main_queue c-src/emacs/src/keyboard.c /^read_event_from_main_queue (struct timespec *end_t/ -read_key_sequence c-src/emacs/src/keyboard.c /^read_key_sequence (Lisp_Object *keybuf, int bufsiz/ read_key_sequence_cmd c-src/emacs/src/keyboard.c 232 +read-key-sequence c-src/emacs/src/keyboard.c /^DEFUN ("read-key-sequence", Fread_key_sequence, Sr/ +read_key_sequence c-src/emacs/src/keyboard.c /^read_key_sequence (Lisp_Object *keybuf, int bufsiz/ read_key_sequence_remapped c-src/emacs/src/keyboard.c 233 +read-key-sequence-vector c-src/emacs/src/keyboard.c /^DEFUN ("read-key-sequence-vector", Fread_key_seque/ read_key_sequence_vs c-src/emacs/src/keyboard.c /^read_key_sequence_vs (Lisp_Object prompt, Lisp_Obj/ -read_menu_command c-src/emacs/src/keyboard.c /^read_menu_command (void)$/ -read_toc perl-src/htlmify-cystic /^sub read_toc ()$/ -readable_events c-src/emacs/src/keyboard.c /^readable_events (int flags)$/ -readauxfile tex-src/texinfo.tex /^\\def\\readauxfile{%$/ readline c-src/etags.c /^readline (linebuffer *lbp, FILE *stream)$/ readline_internal c-src/etags.c /^readline_internal (linebuffer *lbp, register FILE / -realloc c-src/emacs/src/gmalloc.c /^realloc (void *ptr, size_t size)$/ +Read_Lock/p ada-src/2ataspri.adb /^ procedure Read_Lock (L : in out Lock; Ceiling_V/ +Read_Lock/p ada-src/2ataspri.ads /^ procedure Read_Lock (L : in out Lock; Ceiling_V/ +read_menu_command c-src/emacs/src/keyboard.c /^read_menu_command (void)$/ +read php-src/lce_functions.php /^ function read()$/ +read_toc perl-src/htlmify-cystic /^sub read_toc ()$/ +ReadVacation cp-src/functions.cpp /^void ReadVacation ( char *filename ) {$/ realloc c-src/emacs/src/gmalloc.c 1720 realloc c-src/emacs/src/gmalloc.c 65 realloc c-src/emacs/src/gmalloc.c 69 +_realloc c-src/emacs/src/gmalloc.c /^_realloc (void *ptr, size_t size)$/ +realloc c-src/emacs/src/gmalloc.c /^realloc (void *ptr, size_t size)$/ reallochook c-src/emacs/src/gmalloc.c /^reallochook (void *ptr, size_t size)$/ -recent-keys c-src/emacs/src/keyboard.c /^DEFUN ("recent-keys", Frecent_keys, Srecent_keys, / +_realloc_internal c-src/emacs/src/gmalloc.c /^_realloc_internal (void *ptr, size_t size)$/ +_realloc_internal_nolock c-src/emacs/src/gmalloc.c /^_realloc_internal_nolock (void *ptr, size_t size)$/ +RE_BACKSLASH_ESCAPE_IN_LISTS c-src/emacs/src/regex.h 47 +RE_BK_PLUS_QM c-src/emacs/src/regex.h 52 +RECC_ALNUM c-src/emacs/src/regex.h 610 +RECC_ALPHA c-src/emacs/src/regex.h 610 +RECC_ASCII c-src/emacs/src/regex.h 617 +RECC_BLANK c-src/emacs/src/regex.h 615 +RECC_CNTRL c-src/emacs/src/regex.h 613 +RECC_DIGIT c-src/emacs/src/regex.h 614 +RECC_ERROR c-src/emacs/src/regex.h 609 +RECC_GRAPH c-src/emacs/src/regex.h 611 +RECC_LOWER c-src/emacs/src/regex.h 612 +RECC_MULTIBYTE c-src/emacs/src/regex.h 616 +RECC_NONASCII c-src/emacs/src/regex.h 616 +RECC_PRINT c-src/emacs/src/regex.h 611 +RECC_PUNCT c-src/emacs/src/regex.h 613 +RECC_SPACE c-src/emacs/src/regex.h 615 +RECC_UNIBYTE c-src/emacs/src/regex.h 617 +RECC_UPPER c-src/emacs/src/regex.h 612 +RECC_WORD c-src/emacs/src/regex.h 610 +RECC_XDIGIT c-src/emacs/src/regex.h 614 recent_keys c-src/emacs/src/keyboard.c 100 +recent-keys c-src/emacs/src/keyboard.c /^DEFUN ("recent-keys", Frecent_keys, Srecent_keys, / recent_keys_index c-src/emacs/src/keyboard.c 94 +RE_CHAR_CLASSES c-src/emacs/src/regex.h 58 +RE_CONTEXT_INDEP_ANCHORS c-src/emacs/src/regex.h 72 +RE_CONTEXT_INDEP_OPS c-src/emacs/src/regex.h 80 +RE_CONTEXT_INVALID_OPS c-src/emacs/src/regex.h 84 record_asynch_buffer_change c-src/emacs/src/keyboard.c /^record_asynch_buffer_change (void)$/ record_auto_save c-src/emacs/src/keyboard.c /^record_auto_save (void)$/ record_char c-src/emacs/src/keyboard.c /^record_char (Lisp_Object c)$/ @@ -3865,71 +3299,176 @@ record_menu_key c-src/emacs/src/keyboard.c /^record_menu_key (Lisp_Object c)$/ record_single_kboard_state c-src/emacs/src/keyboard.c /^record_single_kboard_state ()$/ record_xmalloc c-src/emacs/src/lisp.h /^extern void *record_xmalloc (size_t) ATTRIBUTE_ALL/ recover_top_level_message c-src/emacs/src/keyboard.c 138 +Rectangle.getPos lua-src/test.lua /^function Rectangle.getPos ()$/ recursion-depth c-src/emacs/src/keyboard.c /^DEFUN ("recursion-depth", Frecursion_depth, Srecur/ -recursive-edit c-src/emacs/src/keyboard.c /^DEFUN ("recursive-edit", Frecursive_edit, Srecursi/ recursive_edit_1 c-src/emacs/src/keyboard.c /^recursive_edit_1 (void)$/ +recursive-edit c-src/emacs/src/keyboard.c /^DEFUN ("recursive-edit", Frecursive_edit, Srecursi/ recursive_edit_unwind c-src/emacs/src/keyboard.c /^recursive_edit_unwind (Lisp_Object buffer)$/ +RED cp-src/screen.hpp 16 +RE_DEBUG c-src/emacs/src/regex.h 161 redirect c-src/emacs/src/lisp.h 663 +RE_DOT_NEWLINE c-src/emacs/src/regex.h 88 +RE_DOT_NOT_NULL c-src/emacs/src/regex.h 92 reduce prol-src/natded.prolog /^reduce((X^M)@N,L):- % beta reduction$/ reduce_subterm prol-src/natded.prolog /^reduce_subterm(M,M2):-$/ -ref tex-src/texinfo.tex /^\\def\\ref#1{\\xrefX[#1,,,,,,,]}$/ +RE_DUP_MAX c-src/emacs/src/regex.h 253 +RE_DUP_MAX c-src/emacs/src/regex.h 256 +/ReEncode ps-src/rfc1245.ps /^\/ReEncode { $/ refill tex-src/texinfo.tex /^\\let\\refill=\\relax$/ refreshPort pyt-src/server.py /^ def refreshPort(self):$/ +RE_FRUGAL c-src/emacs/src/regex.h 147 +ref tex-src/texinfo.tex /^\\def\\ref#1{\\xrefX[#1,,,,,,,]}$/ refx tex-src/texinfo.tex /^\\def\\refx#1#2{%$/ -reg_errcode_t c-src/emacs/src/regex.h 323 +REG_BADBR c-src/emacs/src/regex.h 313 +REG_BADPAT c-src/emacs/src/regex.h 305 +REG_BADRPT c-src/emacs/src/regex.h 316 +REG_EBRACE c-src/emacs/src/regex.h 312 +REG_EBRACK c-src/emacs/src/regex.h 310 +REG_ECOLLATE c-src/emacs/src/regex.h 306 +REG_ECTYPE c-src/emacs/src/regex.h 307 +REG_EEND c-src/emacs/src/regex.h 319 +REG_EESCAPE c-src/emacs/src/regex.h 308 +REG_ENOSYS c.c 279 +REG_ENOSYS c-src/emacs/src/regex.h 297 +REG_EPAREN c-src/emacs/src/regex.h 311 +REG_ERANGE c-src/emacs/src/regex.h 314 +REG_ERANGEX c-src/emacs/src/regex.h 322 +REG_ERPAREN c-src/emacs/src/regex.h 321 reg_errcode_t c.c 279 -reg_syntax_t c-src/emacs/src/regex.h 43 +reg_errcode_t c-src/emacs/src/regex.h 323 +REG_ESIZE c-src/emacs/src/regex.h 320 +REG_ESPACE c-src/emacs/src/regex.h 315 +REG_ESUBREG c-src/emacs/src/regex.h 309 regex c-src/etags.c 219 -regex.o make-src/Makefile /^regex.o: emacs\/src\/regex.c$/ -regex_t c-src/emacs/src/regex.h 416 -regex_tag_multiline c-src/etags.c /^regex_tag_multiline (void)$/ regexfile make-src/Makefile /^regexfile: Makefile$/ +_REGEX_H c-src/emacs/src/regex.h 21 +REGEX make-src/Makefile /^REGEX=\/[ \\t]*DEFVAR_[A-Z_ \\t\\n(]+"\\([^"]+\\)"\/$/ +REGEXOBJS make-src/Makefile /^REGEXOBJS=regex.o$/ +regex.o make-src/Makefile /^regex.o: emacs\/src\/regex.c$/ regexp c-src/etags.c 256 regexp c-src/etags.c 268 +regex_tag_multiline c-src/etags.c /^regex_tag_multiline (void)$/ +regex_t c-src/emacs/src/regex.h 416 +REG_EXTENDED c-src/emacs/src/regex.h 263 +REG_ICASE c-src/emacs/src/regex.h 267 registerAction objcpp-src/SimpleCalc.M /^- registerAction:(SEL)action$/ register_heapinfo c-src/emacs/src/gmalloc.c /^register_heapinfo (void)$/ regmatch_t c-src/emacs/src/regex.h 451 +REG_NEWLINE c-src/emacs/src/regex.h 272 +REG_NOERROR c-src/emacs/src/regex.h 300 +REG_NOMATCH c-src/emacs/src/regex.h 301 +REG_NOSUB c-src/emacs/src/regex.h 276 +REG_NOTBOL c-src/emacs/src/regex.h 286 +REG_NOTEOL c-src/emacs/src/regex.h 289 regoff_t c-src/emacs/src/regex.h 423 -regs c-src/etags.c 263 -regs cp-src/screen.cpp 16 regs_allocated c-src/emacs/src/regex.h 379 +regs cp-src/screen.cpp 16 +regs c-src/etags.c 263 regset c-src/h.h 31 +REGS_FIXED c-src/emacs/src/regex.h 378 +REGS_REALLOCATE c-src/emacs/src/regex.h 377 +REGS_UNALLOCATED c-src/emacs/src/regex.h 376 +reg_syntax_t c-src/emacs/src/regex.h 43 regular_top_level_message c-src/emacs/src/keyboard.c 143 rehash_size c-src/emacs/src/lisp.h 1835 rehash_threshold c-src/emacs/src/lisp.h 1839 +RE_HAT_LISTS_NOT_NEWLINE c-src/emacs/src/regex.h 96 +RE_INTERVALS c-src/emacs/src/regex.h 101 +re_iswctype c-src/emacs/src/regex.h 602 relative_filename c-src/etags.c /^relative_filename (char *file, char *dir)$/ release distrib make-src/Makefile /^release distrib: web$/ +RELEASELIST make-src/Makefile /^RELEASELIST=pot@gnu.org xemacs-review@xemacs.org j/ +ReleaseNameString pas-src/common.pas /^procedure ReleaseNameString; (* (var NSP: NameStri/ +RE_LIMITED_OPS c-src/emacs/src/regex.h 105 removeexp prol-src/natded.prolog /^removeexp(E,E,'NIL'):-!.$/ +RemoveLayer lua-src/allegro.lua /^function RemoveLayer ()$/ +RemoveUnderlineControl pas-src/common.pas /^function RemoveUnderlineControl; (*($/ +RE_NEWLINE_ALT c-src/emacs/src/regex.h 109 +RE_NO_BK_BRACES c-src/emacs/src/regex.h 114 +RE_NO_BK_PARENS c-src/emacs/src/regex.h 118 +RE_NO_BK_REFS c-src/emacs/src/regex.h 122 +RE_NO_BK_VBAR c-src/emacs/src/regex.h 126 +RE_NO_EMPTY_RANGES c-src/emacs/src/regex.h 132 +RE_NO_GNU_OPS c-src/emacs/src/regex.h 144 +RE_NO_NEWLINE_ANCHOR c-src/emacs/src/regex.h 153 +RE_NO_POSIX_BACKTRACKING c-src/emacs/src/regex.h 140 +RE_NREGS c-src/emacs/src/regex.h 440 +re_nsub c-src/emacs/src/regex.h 364 reorder_modifiers c-src/emacs/src/keyboard.c /^reorder_modifiers (Lisp_Object symbol)$/ +re_pattern_buffer c-src/emacs/src/regex.h 335 +re_pattern_buffer c-src/h.h 119 +ReprOfChar pas-src/common.pas /^function ReprOfChar; (*( ch : char) : NameString;*/ +__repr__ pyt-src/server.py /^ def __repr__(self):$/ request c.c /^request request (a, b)$/ requeued_events_pending_p c-src/emacs/src/keyboard.c /^requeued_events_pending_p (void)$/ -require merc-src/accumulator.m /^:- import_module require.$/ required_argument c-src/getopt.h 90 -reset-this-command-lengths c-src/emacs/src/keyboard.c /^DEFUN ("reset-this-command-lengths", Freset_this_c/ +require merc-src/accumulator.m /^:- import_module require.$/ +re_registers c-src/emacs/src/regex.h 428 resetmathfonts tex-src/texinfo.tex /^\\def\\resetmathfonts{%$/ -rest tex-src/texinfo.tex /^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/ +reset-this-command-lengths c-src/emacs/src/keyboard.c /^DEFUN ("reset-this-command-lengths", Freset_this_c/ +RE_SHY_GROUPS c-src/emacs/src/regex.h 150 restore_getcjmp c-src/emacs/src/keyboard.c /^restore_getcjmp (sys_jmp_buf temp)$/ restore_kboard_configuration c-src/emacs/src/keyboard.c /^restore_kboard_configuration (int was_locked)$/ +/restorematrix ps-src/rfc1245.ps /^\/restorematrix {$/ +_Restrict_arr_ c-src/emacs/src/regex.h 555 +_Restrict_arr_ c-src/emacs/src/regex.h 557 +_Restrict_ c-src/emacs/src/regex.h 540 +_Restrict_ c-src/emacs/src/regex.h 542 +_Restrict_ c-src/emacs/src/regex.h 544 +rest tex-src/texinfo.tex /^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/ result tex-src/texinfo.tex /^\\def\\result{\\leavevmode\\raise.15ex\\hbox to 1em{\\hf/ result tex-src/texinfo.tex /^\\def\\result{\\realbackslash result}$/ +RESUME_POLLING c-src/emacs/src/keyboard.c 2170 +RE_SYNTAX_AWK c-src/emacs/src/regex.h 186 +RE_SYNTAX_ED c-src/emacs/src/regex.h 216 +RE_SYNTAX_EGREP c-src/emacs/src/regex.h 206 +RE_SYNTAX_EMACS c-src/emacs/src/regex.h 183 +RE_SYNTAX_GNU_AWK c-src/emacs/src/regex.h 193 +RE_SYNTAX_GREP c-src/emacs/src/regex.h 201 +RE_SYNTAX_POSIX_AWK c-src/emacs/src/regex.h 197 +RE_SYNTAX_POSIX_BASIC c-src/emacs/src/regex.h 225 +_RE_SYNTAX_POSIX_COMMON c-src/emacs/src/regex.h 221 +RE_SYNTAX_POSIX_EGREP c-src/emacs/src/regex.h 212 +RE_SYNTAX_POSIX_EXTENDED c-src/emacs/src/regex.h 234 +RE_SYNTAX_POSIX_MINIMAL_BASIC c-src/emacs/src/regex.h 231 +RE_SYNTAX_POSIX_MINIMAL_EXTENDED c-src/emacs/src/regex.h 242 +RE_SYNTAX_SED c-src/emacs/src/regex.h 218 +RE_TRANSLATE_TYPE c-src/emacs/src/regex.h 332 return_to_command_loop c-src/emacs/src/keyboard.c 135 +RETURN_UNGCPRO c-src/emacs/src/lisp.h /^#define RETURN_UNGCPRO(expr) \\$/ +RE_UNMATCHED_RIGHT_PAREN_ORD c-src/emacs/src/regex.h 136 reverse prol-src/natded.prolog /^reverse([],Ws,Ws).$/ revert objc-src/PackInsp.m /^-revert:sender$/ +re_wchar_t c-src/emacs/src/regex.h 600 +re_wchar_t c-src/emacs/src/regex.h 623 +re_wctype c-src/emacs/src/regex.h 601 +re_wctype_t c-src/emacs/src/regex.h 599 +re_wctype_t c-src/emacs/src/regex.h 618 +re_wctype_to_bit c-src/emacs/src/regex.h /^# define re_wctype_to_bit(cc) 0$/ +/RF ps-src/rfc1245.ps /^\/RF { $/ right c-src/etags.c 216 right_shift y-src/cccp.y /^right_shift (a, b)$/ ring1 c.c 241 ring2 c.c 242 -rm tex-src/texinfo.tex /^ \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/ -rm tex-src/texinfo.tex /^\\def\\rm{\\realbackslash rm }%$/ rm_eo c-src/emacs/src/regex.h 450 rm_so c-src/emacs/src/regex.h 449 +rm tex-src/texinfo.tex /^\\def\\rm{\\realbackslash rm }%$/ +rm tex-src/texinfo.tex /^ \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/ rng_base cp-src/Range.h 79 rng_inc cp-src/Range.h 81 rng_limit cp-src/Range.h 80 rng_nelem cp-src/Range.h 83 rosso cp-src/c.C 40 +/R ps-src/rfc1245.ps /^\/R { $/ +/RR ps-src/rfc1245.ps /^\/RR { $/ +RSH y-src/cccp.c 17 rsyncfromfly make-src/Makefile /^rsyncfromfly:$/ rsynctofly make-src/Makefile /^rsynctofly:$/ +RTE/s ada-src/2ataspri.adb /^ package RTE renames Interfaces.C.POSIX_RTE;$/ +r tex-src/texinfo.tex /^\\def\\r##1{\\realbackslash r {##1}}%$/ +r tex-src/texinfo.tex /^\\def\\r##1{\\realbackslash r {##1}}$/ +r tex-src/texinfo.tex /^\\def\\r#1{{\\rm #1}} % roman font$/ +r tex-src/texinfo.tex /^\\let\\r=\\indexdummyfont$/ rtint c-src/h.h 60 rtint c-src/h.h 68 rtstr c-src/h.h 61 @@ -3939,140 +3478,222 @@ rtunion_def c-src/h.h 64 rtx c-src/h.h 62 rtxnp c-src/h.h 71 rtxp c-src/h.h 70 -s c-src/emacs/src/lisp.h 4672 -s c-src/emacs/src/lisp.h 4678 +` ruby-src/test.rb /^ def `(command)$/ ++ ruby-src/test.rb /^ def +(y)$/ +<< ruby-src/test.rb /^ def <<(y)$/ +<= ruby-src/test.rb /^ def <=(y)$/ +<=> ruby-src/test.rb /^ def <=>(y)$/ +== ruby-src/test.rb /^ def ==(y)$/ +=== ruby-src/test.rb /^ def ===(y)$/ +[] ruby-src/test.rb /^ def [](y)$/ +[]= ruby-src/test.rb /^ def []=(y, val)$/ +RUN make-src/Makefile /^RUN=$/ +RUN make-src/Makefile /^RUN=time --quiet --format '%U + %S: %E'$/ +RXINCLUDE make-src/Makefile /^RXINCLUDE=-Iemacs\/src$/ s1 cp-src/c.C 32 +/s1 ps-src/rfc1245.ps /^\/s1 1 string def$/ s2 cp-src/c.C 35 +SAFE_ALLOCA c-src/emacs/src/lisp.h /^#define SAFE_ALLOCA(size) ((size) <= sa_avail \\/ +SAFE_ALLOCA_LISP c-src/emacs/src/lisp.h /^#define SAFE_ALLOCA_LISP(buf, nelt) \\$/ +SAFE_ALLOCA_STRING c-src/emacs/src/lisp.h /^#define SAFE_ALLOCA_STRING(ptr, string) \\$/ +SAFE_FREE c-src/emacs/src/lisp.h /^#define SAFE_FREE() \\$/ +SAFE_NALLOCA c-src/emacs/src/lisp.h /^#define SAFE_NALLOCA(buf, multiplier, nitems) \\/ safe_run_hook_funcall c-src/emacs/src/keyboard.c /^safe_run_hook_funcall (ptrdiff_t nargs, Lisp_Objec/ -safe_run_hooks c-src/emacs/src/keyboard.c /^safe_run_hooks (Lisp_Object hook)$/ safe_run_hooks_1 c-src/emacs/src/keyboard.c /^safe_run_hooks_1 (ptrdiff_t nargs, Lisp_Object *ar/ +safe_run_hooks c-src/emacs/src/keyboard.c /^safe_run_hooks (Lisp_Object hook)$/ safe_run_hooks_error c-src/emacs/src/keyboard.c /^safe_run_hooks_error (Lisp_Object error, ptrdiff_t/ -samp tex-src/texinfo.tex /^\\def\\samp #1{`\\tclose{#1}'\\null}$/ -samp tex-src/texinfo.tex /^\\def\\samp##1{\\realbackslash samp {##1}}$/ +Sample tex-src/gzip.texi /^@node Sample, Invoking gzip, Overview, Top$/ samp tex-src/texinfo.tex /^\\def\\samp##1{\\realbackslash samp {##1}}%$/ +samp tex-src/texinfo.tex /^\\def\\samp##1{\\realbackslash samp {##1}}$/ +samp tex-src/texinfo.tex /^\\def\\samp #1{`\\tclose{#1}'\\null}$/ samp tex-src/texinfo.tex /^\\let\\samp=\\indexdummyfont$/ -save pyt-src/server.py /^ def save(self):$/ +/sangle ps-src/rfc1245.ps /^\/sangle 1 0 dmatrix defaultmatrix dtransform exch / +SAVE_FUNCPOINTER c-src/emacs/src/lisp.h 2049 save_getcjmp c-src/emacs/src/keyboard.c /^save_getcjmp (sys_jmp_buf temp)$/ -save_type c-src/emacs/src/lisp.h /^save_type (struct Lisp_Save_Value *v, int n)$/ +SAVE_INTEGER c-src/emacs/src/lisp.h 2048 +/savematrix ps-src/rfc1245.ps /^\/savematrix {$/ savenstr c-src/etags.c /^savenstr (const char *cp, int len)$/ +SAVE_OBJECT c-src/emacs/src/lisp.h 2051 +SAVE_POINTER c-src/emacs/src/lisp.h 2050 +save pyt-src/server.py /^ def save(self):$/ +SAVE_SLOT_BITS c-src/emacs/src/lisp.h 2055 savestr c-src/etags.c /^savestr (const char *cp)$/ +SAVE_TYPE_BITS c-src/emacs/src/lisp.h 2062 +SAVE_TYPE_BITS c-src/emacs/src/lisp.h 2114 +SAVE_TYPE_BITS c-src/emacs/src/lisp.h 2123 +save_type c-src/emacs/src/lisp.h /^save_type (struct Lisp_Save_Value *v, int n)$/ +SAVE_TYPE_FUNCPTR_PTR_OBJ c-src/emacs/src/lisp.h 2076 +SAVE_TYPE_INT_INT c-src/emacs/src/lisp.h 2066 +SAVE_TYPE_INT_INT_INT c-src/emacs/src/lisp.h 2067 +SAVE_TYPE_MEMORY c-src/emacs/src/lisp.h 2080 +SAVE_TYPE_OBJ_OBJ c-src/emacs/src/lisp.h 2069 +SAVE_TYPE_OBJ_OBJ_OBJ c-src/emacs/src/lisp.h 2070 +SAVE_TYPE_OBJ_OBJ_OBJ_OBJ c-src/emacs/src/lisp.h 2071 +SAVE_TYPE_PTR_INT c-src/emacs/src/lisp.h 2073 +SAVE_TYPE_PTR_OBJ c-src/emacs/src/lisp.h 2074 +SAVE_TYPE_PTR_PTR c-src/emacs/src/lisp.h 2075 +SAVE_UNUSED c-src/emacs/src/lisp.h 2047 +SAVE_VALUEP c-src/emacs/src/lisp.h /^SAVE_VALUEP (Lisp_Object x)$/ +SAVE_VALUE_SLOTS c-src/emacs/src/lisp.h 2058 say go-src/test.go /^func say(msg string) {$/ -sc tex-src/texinfo.tex /^\\def\\sc#1{{\\smallcaps#1}} % smallcaps font$/ -sc tex-src/texinfo.tex /^\\let\\sc=\\indexdummyfont$/ +__sbrk c-src/emacs/src/gmalloc.c 1516 +SBYTES c-src/emacs/src/lisp.h /^SBYTES (Lisp_Object string)$/ scan_separators c-src/etags.c /^scan_separators (char *name)$/ +S c.c 156 +SCHARS c-src/emacs/src/lisp.h /^SCHARS (Lisp_Object string)$/ +Scheme_functions c-src/etags.c /^Scheme_functions (FILE *inf)$/ +Scheme_help c-src/etags.c 667 +Scheme_suffixes c-src/etags.c 665 scolonseen c-src/etags.c 2447 scratch c-src/sysdep.h 56 +SCREEN_FP cp-src/screen.hpp /^#define SCREEN_FP(x,y) \\$/ +SCREEN_START cp-src/screen.hpp 33 scroll_bar_parts c-src/emacs/src/keyboard.c 5189 -sec tex-src/texinfo.tex /^\\global\\let\\section = \\appendixsec$/ +s c-src/emacs/src/lisp.h 4672 +s c-src/emacs/src/lisp.h 4678 +sc tex-src/texinfo.tex /^\\def\\sc#1{{\\smallcaps#1}} % smallcaps font$/ +sc tex-src/texinfo.tex /^\\let\\sc=\\indexdummyfont$/ +SDATA c-src/emacs/src/lisp.h /^SDATA (Lisp_Object string)$/ +SDTrefGetInteger pas-src/common.pas /^function SDTrefGetInteger : integer;$/ +SDTrefIsEnd pas-src/common.pas /^function SDTrefIsEnd : Boolean;$/ +SDTrefRecToString pas-src/common.pas /^procedure SDTrefRecToString (* ($/ +SDTrefSkipSpaces pas-src/common.pas /^procedure SDTrefSkipSpaces;$/ +SDTrefStringToRec pas-src/common.pas /^procedure SDTrefStringToRec (* ($/ seccheck tex-src/texinfo.tex /^\\def\\seccheck#1{\\if \\pageno<0 %$/ +secentryfonts tex-src/texinfo.tex /^\\def\\secentryfonts{\\textfonts}$/ secentry tex-src/texinfo.tex /^ \\def\\secentry ##1##2##3##4{}$/ secentry tex-src/texinfo.tex /^\\def\\secentry#1#2#3#4{\\dosecentry{#2.#3\\labelspace/ -secentryfonts tex-src/texinfo.tex /^\\def\\secentryfonts{\\textfonts}$/ secfonts tex-src/texinfo.tex /^\\def\\secfonts{%$/ -secheading tex-src/texinfo.tex /^\\def\\secheading #1#2#3{\\secheadingi {#2.#3\\enspace/ secheadingbreak tex-src/texinfo.tex /^\\def\\secheadingbreak{\\dobreak \\secheadingskip {-10/ secheadingi tex-src/texinfo.tex /^\\def\\secheadingi #1{{\\advance \\secheadingskip by \\/ +secheading tex-src/texinfo.tex /^\\def\\secheading #1#2#3{\\secheadingi {#2.#3\\enspace/ secondary tex-src/texinfo.tex /^\\def\\secondary #1#2{$/ +sec tex-src/texinfo.tex /^\\global\\let\\section = \\appendixsec$/ +section_href perl-src/htlmify-cystic /^sub section_href ($)$/ +section_name perl-src/htlmify-cystic 12 +section_name perl-src/htlmify-cystic /^sub section_name ($)$/ section perl-src/htlmify-cystic 25 section tex-src/texinfo.tex /^\\global\\let\\section = \\appendixsec$/ section tex-src/texinfo.tex /^\\global\\let\\section = \\numberedsec$/ section tex-src/texinfo.tex /^\\global\\let\\section = \\unnumberedsec$/ section tex-src/texinfo.tex /^\\let\\section=\\relax$/ -section_href perl-src/htlmify-cystic /^sub section_href ($)$/ -section_name perl-src/htlmify-cystic /^sub section_name ($)$/ -section_name perl-src/htlmify-cystic 12 section_toc perl-src/htlmify-cystic 15 -section_url perl-src/htlmify-cystic /^sub section_url ()$/ section_url_base perl-src/htlmify-cystic /^sub section_url_base ()$/ section_url_name perl-src/htlmify-cystic /^sub section_url_name ()$/ -sectionzzz tex-src/texinfo.tex /^\\outer\\def\\appendixsection{\\parsearg\\appendixsecti/ +section_url perl-src/htlmify-cystic /^sub section_url ()$/ sectionzzz tex-src/texinfo.tex /^\\outer\\def\\appendixsec{\\parsearg\\appendixsectionzz/ +sectionzzz tex-src/texinfo.tex /^\\outer\\def\\appendixsection{\\parsearg\\appendixsecti/ seczzz tex-src/texinfo.tex /^\\def\\infoappendixsec{\\parsearg\\appendixseczzz}$/ seczzz tex-src/texinfo.tex /^\\def\\seczzz #1{\\seccheck{section}%$/ +select_last prol-src/natded.prolog /^select_last([X],X,[]).$/ +SelectLayer lua-src/allegro.lua /^function SelectLayer (layer)$/ select prol-src/natded.prolog /^select(X,[X|Xs],Xs).$/ select-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun select-tags-table ()$/ select-tags-table-mode el-src/emacs/lisp/progmodes/etags.el /^(define-derived-mode select-tags-table-mode specia/ select-tags-table-mode-map el-src/emacs/lisp/progmodes/etags.el /^(defvar select-tags-table-mode-map ; Doc string?$/ select-tags-table-quit el-src/emacs/lisp/progmodes/etags.el /^(defun select-tags-table-quit ()$/ select-tags-table-select el-src/emacs/lisp/progmodes/etags.el /^(defun select-tags-table-select (button)$/ -select_last prol-src/natded.prolog /^select_last([X],X,[]).$/ -send objc-src/Subprocess.m /^- send:(const char *)string withNewline:(BOOL)want/ +Self/f ada-src/2ataspri.adb /^ function Self return TCB_Ptr is$/ +Self/f ada-src/2ataspri.ads /^ function Self return TCB_Ptr;$/ send objc-src/Subprocess.m /^- send:(const char *)string$/ +send objc-src/Subprocess.m /^- send:(const char *)string withNewline:(BOOL)want/ separator_names c-src/emacs/src/keyboard.c 7372 sepspaces tex-src/texinfo.tex /^\\gdef\\sepspaces{\\def {\\ }}}$/ serializeToVars php-src/lce_functions.php /^ function serializeToVars($prefix)$/ -set cp-src/conway.hpp /^ void set(void) { alive = 1; }$/ -set merc-src/accumulator.m /^:- import_module set.$/ -set tex-src/texinfo.tex /^\\def\\set{\\parsearg\\setxxx}$/ -set-input-interrupt-mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-interrupt-mode", Fset_input_inte/ -set-input-meta-mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-meta-mode", Fset_input_meta_mode/ -set-input-mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-mode", Fset_input_mode, Sset_inp/ -set-output-flow-control c-src/emacs/src/keyboard.c /^DEFUN ("set-output-flow-control", Fset_output_flow/ -set-quit-char c-src/emacs/src/keyboard.c /^DEFUN ("set-quit-char", Fset_quit_char, Sset_quit_/ -setDate cp-src/functions.cpp /^void Date::setDate ( int d , int m , int y ){$/ -setDelegate objc-src/Subprocess.m /^- setDelegate:anObject$/ -setRevertButtonTitle objc-src/PackInsp.m /^-setRevertButtonTitle$/ +ServerEdit pyt-src/server.py /^class ServerEdit(Frame):$/ +Server pyt-src/server.py /^class Server:$/ set_base cp-src/Range.h /^ void set_base (double b) { rng_base = b; }$/ +setchapternewpage tex-src/texinfo.tex /^\\def\\setchapternewpage #1 {\\csname CHAPPAG#1\\endcs/ +setchapterstyle tex-src/texinfo.tex /^\\def\\setchapterstyle #1 {\\csname CHAPF#1\\endcsname/ set_char_table_contents c-src/emacs/src/lisp.h /^set_char_table_contents (Lisp_Object table, ptrdif/ set_char_table_defalt c-src/emacs/src/lisp.h /^set_char_table_defalt (Lisp_Object table, Lisp_Obj/ set_char_table_extras c-src/emacs/src/lisp.h /^set_char_table_extras (Lisp_Object table, ptrdiff_/ set_char_table_purpose c-src/emacs/src/lisp.h /^set_char_table_purpose (Lisp_Object table, Lisp_Ob/ +set cp-src/conway.hpp /^ void set(void) { alive = 1; }$/ +setDate cp-src/functions.cpp /^void Date::setDate ( int d , int m , int y ){$/ +setdeffont tex-src/texinfo.tex /^\\def\\setdeffont #1 {\\csname DEF#1\\endcsname}$/ +setDelegate objc-src/Subprocess.m /^- setDelegate:anObject$/ +setfilename tex-src/texinfo.tex /^\\def\\setfilename{%$/ +setfilename tex-src/texinfo.tex /^ \\global\\let\\setfilename=\\comment % Ignore extra/ set_hash_key_slot c-src/emacs/src/lisp.h /^set_hash_key_slot (struct Lisp_Hash_Table *h, ptrd/ set_hash_value_slot c-src/emacs/src/lisp.h /^set_hash_value_slot (struct Lisp_Hash_Table *h, pt/ set_inc cp-src/Range.h /^ void set_inc (double i) { rng_inc = i; }$/ +set-input-interrupt-mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-interrupt-mode", Fset_input_inte/ +set-input-meta-mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-meta-mode", Fset_input_meta_mode/ +set-input-mode c-src/emacs/src/keyboard.c /^DEFUN ("set-input-mode", Fset_input_mode, Sset_inp/ set_limit cp-src/Range.h /^ void set_limit (double l) { rng_limit = l; }$/ +/setmanualfeed ps-src/rfc1245.ps /^\/setmanualfeed {$/ +set merc-src/accumulator.m /^:- import_module set.$/ +set-output-flow-control c-src/emacs/src/keyboard.c /^DEFUN ("set-output-flow-control", Fset_output_flow/ set_overlay_plist c-src/emacs/src/lisp.h /^set_overlay_plist (Lisp_Object overlay, Lisp_Objec/ +Set_Own_Priority/p ada-src/2ataspri.adb /^ procedure Set_Own_Priority (Prio : System.Any_P/ +Set_Own_Priority/p ada-src/2ataspri.ads /^ procedure Set_Own_Priority (Prio : System.Any_P/ +/setpapername ps-src/rfc1245.ps /^\/setpapername { $/ +/setpattern ps-src/rfc1245.ps /^\/setpattern {$/ set_poll_suppress_count c-src/emacs/src/keyboard.c /^set_poll_suppress_count (int count)$/ +Set_Priority/p ada-src/2ataspri.adb /^ procedure Set_Priority$/ +Set_Priority/p ada-src/2ataspri.ads /^ procedure Set_Priority (T : TCB_Ptr; Prio : Sys/ set_prop c-src/emacs/src/keyboard.c /^set_prop (ptrdiff_t idx, Lisp_Object val)$/ +SETPRT f-src/entry.for /^ ENTRY SETPRT ( SHORT, EXPL, LONG, TRACE, D/ +SETPRT f-src/entry.strange /^ ENTRY SETPRT ( SHORT, EXPL, LONG, TRACE, D/ +SETPRT f-src/entry.strange_suffix /^ ENTRY SETPRT ( SHORT, EXPL, LONG, TRACE, D/ +set-quit-char c-src/emacs/src/keyboard.c /^DEFUN ("set-quit-char", Fset_quit_char, Sset_quit_/ +setref tex-src/texinfo.tex /^\\def\\setref#1{%$/ +setref tex-src/texinfo.tex /^\\expandafter\\expandafter\\expandafter\\appendixsetre/ +setRevertButtonTitle objc-src/PackInsp.m /^-setRevertButtonTitle$/ set_save_integer c-src/emacs/src/lisp.h /^set_save_integer (Lisp_Object obj, int n, ptrdiff_/ set_save_pointer c-src/emacs/src/lisp.h /^set_save_pointer (Lisp_Object obj, int n, void *va/ set_string_intervals c-src/emacs/src/lisp.h /^set_string_intervals (Lisp_Object s, INTERVAL i)$/ set_sub_char_table_contents c-src/emacs/src/lisp.h /^set_sub_char_table_contents (Lisp_Object table, pt/ +SET_SYMBOL_BLV c-src/emacs/src/lisp.h /^SET_SYMBOL_BLV (struct Lisp_Symbol *sym, struct Li/ set_symbol_function c-src/emacs/src/lisp.h /^set_symbol_function (Lisp_Object sym, Lisp_Object / +SET_SYMBOL_FWD c-src/emacs/src/lisp.h /^SET_SYMBOL_FWD (struct Lisp_Symbol *sym, union Lis/ set_symbol_next c-src/emacs/src/lisp.h /^set_symbol_next (Lisp_Object sym, struct Lisp_Symb/ set_symbol_plist c-src/emacs/src/lisp.h /^set_symbol_plist (Lisp_Object sym, Lisp_Object pli/ -set_upto merc-src/accumulator.m /^:- func set_upto(accu_case, int) = set(accu_goal_i/ -set_waiting_for_input c-src/emacs/src/keyboard.c /^set_waiting_for_input (struct timespec *time_to_cl/ -setchapternewpage tex-src/texinfo.tex /^\\def\\setchapternewpage #1 {\\csname CHAPPAG#1\\endcs/ -setchapterstyle tex-src/texinfo.tex /^\\def\\setchapterstyle #1 {\\csname CHAPF#1\\endcsname/ -setdeffont tex-src/texinfo.tex /^\\def\\setdeffont #1 {\\csname DEF#1\\endcsname}$/ -setfilename tex-src/texinfo.tex /^ \\global\\let\\setfilename=\\comment % Ignore extra/ -setfilename tex-src/texinfo.tex /^\\def\\setfilename{%$/ -setref tex-src/texinfo.tex /^\\def\\setref#1{%$/ -setref tex-src/texinfo.tex /^\\expandafter\\expandafter\\expandafter\\appendixsetre/ +SET_SYMBOL_VAL c-src/emacs/src/lisp.h /^# define SET_SYMBOL_VAL(sym, v) lisp_h_SET_SYMBOL_/ +set tex-src/texinfo.tex /^\\def\\set{\\parsearg\\setxxx}$/ settitle tex-src/texinfo.tex /^\\def\\settitle{\\parsearg\\settitlezzz}$/ settitlezzz tex-src/texinfo.tex /^\\def\\settitlezzz #1{\\gdef\\thistitle{#1}}$/ setup cp-src/c.C 5 +set_upto merc-src/accumulator.m /^:- func set_upto(accu_case, int) = set(accu_goal_i/ +set_waiting_for_input c-src/emacs/src/keyboard.c /^set_waiting_for_input (struct timespec *time_to_cl/ setxxx tex-src/texinfo.tex /^\\def\\setxxx #1{$/ +/SF ps-src/rfc1245.ps /^\/SF { $/ sf tex-src/texinfo.tex /^\\def\\sf{\\fam=\\sffam \\tensf}$/ sf tex-src/texinfo.tex /^\\def\\sf{\\realbackslash sf}%$/ +@sf tex-src/texinfo.tex /^\\ifhmode\\edef\\@sf{\\spacefactor\\the\\spacefactor}\\\/\\/ +@sf tex-src/texinfo.tex /^\\let\\@sf\\empty$/ sf tex-src/texinfo.tex /^{\\let\\tentt=\\sectt \\let\\tt=\\sectt \\let\\sf=\\sectt$/ shift cp-src/functions.cpp /^void Date::shift ( void ){\/\/Shift this date to pre/ shortchapentry tex-src/texinfo.tex /^\\def\\shortchapentry#1#2#3{%$/ shortcontents tex-src/texinfo.tex /^\\let\\shortcontents = \\summarycontents$/ shortunnumberedentry tex-src/texinfo.tex /^\\def\\shortunnumberedentry#1#2{%$/ -shouldLoad objc-src/PackInsp.m /^-(BOOL)shouldLoad$/ -should_attempt_accu_transform merc-src/accumulator.m /^:- pred should_attempt_accu_transform(module_info:/ should_attempt_accu_transform_2 merc-src/accumulator.m /^:- pred should_attempt_accu_transform_2(module_inf/ +should_attempt_accu_transform merc-src/accumulator.m /^:- pred should_attempt_accu_transform(module_info:/ +shouldLoad objc-src/PackInsp.m /^-(BOOL)shouldLoad$/ should_see_this_array_type cp-src/c.C 156 should_see_this_function_pointer cp-src/c.C 153 should_see_this_one_enclosed_in_extern_C cp-src/c.C 149 show erl-src/gs_dialog.erl /^show(Module, Title, Message, Args) ->$/ showError objc-src/Subprocess.m /^showError (const char *errorString, id theDelegate/ -showInfo objc-src/PackInsp.m /^-showInfo:sender$/ show_help_echo c-src/emacs/src/keyboard.c /^show_help_echo (Lisp_Object help, Lisp_Object wind/ +showInfo objc-src/PackInsp.m /^-showInfo:sender$/ sig c-src/emacs/src/keyboard.c 7238 -signal_handler c-src/h.h 82 signal_handler1 c-src/h.h 83 +signal_handler c-src/h.h 82 signal_handler_t c-src/h.h 94 +SimpleCalc objcpp-src/SimpleCalc.H /^@interface SimpleCalc:Object$/ simulation html-src/software.html /^Software that I wrote for supporting my research a/ -single_kboard c-src/emacs/src/keyboard.c 89 -single_kboard_state c-src/emacs/src/keyboard.c /^single_kboard_state ()$/ singlecodeindexer tex-src/texinfo.tex /^\\def\\singlecodeindexer #1{\\doind{\\indexname}{\\code/ singleindexer tex-src/texinfo.tex /^\\def\\singleindexer #1{\\doind{\\indexname}{#1}}$/ +single_kboard c-src/emacs/src/keyboard.c 89 +single_kboard_state c-src/emacs/src/keyboard.c /^single_kboard_state ()$/ +SINGLE_LETTER_MOD c-src/emacs/src/keyboard.c 6212 +SINGLE_LETTER_MOD c-src/emacs/src/keyboard.c 6763 +SINGLE_LETTER_MOD c-src/emacs/src/keyboard.c /^#define SINGLE_LETTER_MOD(BIT) \\$/ singlespace tex-src/texinfo.tex /^\\def\\singlespace{%$/ -site cp-src/conway.hpp /^ site(int xi, int yi): x(xi), y(yi), alive(0) {/ site cp-src/conway.hpp 5 +site cp-src/conway.hpp /^ site(int xi, int yi): x(xi), y(yi), alive(0) {/ size c-src/emacs/src/gmalloc.c 156 size c-src/emacs/src/gmalloc.c 163 size c-src/emacs/src/gmalloc.c 1867 @@ -4080,12 +3701,16 @@ size c-src/emacs/src/lisp.h 1364 size c-src/emacs/src/lisp.h 1390 size c-src/etags.c 236 size c-src/etags.c 2522 +SIZEFORMAT objc-src/PackInsp.m 57 skeyseen c-src/etags.c 2445 +SkipBlanks pas-src/common.pas /^function SkipBlanks; (*($/ +SkipChars pas-src/common.pas /^function SkipChars; (*($/ skip_name c-src/etags.c /^skip_name (char *cp)$/ skip_non_spaces c-src/etags.c /^skip_non_spaces (char *cp)$/ skip_spaces c-src/etags.c /^skip_spaces (char *cp)$/ -sl tex-src/texinfo.tex /^ \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/ +SkipSpaces pas-src/common.pas /^procedure SkipSpaces; (* (Str : NameString; var I / sl tex-src/texinfo.tex /^\\def\\sl{\\realbackslash sl }%$/ +sl tex-src/texinfo.tex /^ \\let\\rm=\\shortcontrm \\let\\bf=\\shortcontbf \\l/ smallbook tex-src/texinfo.tex /^\\def\\smallbook{$/ smallbook tex-src/texinfo.tex /^\\let\\smallbook=\\relax$/ smallcaps tex-src/texinfo.tex /^ \\let\\tenbf=\\chapbf \\let\\tentt=\\chaptt \\let\\small/ @@ -4103,31 +3728,72 @@ snarf-tag-function el-src/emacs/lisp/progmodes/etags.el /^(defvar snarf-tag-func snone c-src/etags.c 2443 solutions merc-src/accumulator.m /^:- import_module solutions.$/ some_mouse_moved c-src/emacs/src/keyboard.c /^some_mouse_moved (void)$/ -sp tex-src/texinfo.tex /^\\def\\sp{\\parsearg\\spxxx}$/ -space tex-src/texinfo.tex /^ {#2\\labelspace #1}\\dotfill\\doshortpageno{#3}}%/ -space tex-src/texinfo.tex /^ \\dosubsubsecentry{#2.#3.#4.#5\\labelspace#1}{#6}}/ -space tex-src/texinfo.tex /^\\def\\chapentry#1#2#3{\\dochapentry{#2\\labelspace#1}/ -space tex-src/texinfo.tex /^\\def\\secentry#1#2#3#4{\\dosecentry{#2.#3\\labelspace/ -space tex-src/texinfo.tex /^\\def\\subsecentry#1#2#3#4#5{\\dosubsecentry{#2.#3.#4/ +#some-storage forth-src/test-forth.fth /^2000 buffer: #some-storage$/ spacer c-src/emacs/src/lisp.h 1975 spacer c-src/emacs/src/lisp.h 1982 spacer c-src/emacs/src/lisp.h 2036 spacer c-src/emacs/src/lisp.h 2205 -spacesplit tex-src/texinfo.tex /^\\gdef\\spacesplit#1#2^^M{\\endgroup\\spacesplitfoo{#1/ spacesplitfoo tex-src/texinfo.tex /^\\long\\gdef\\spacesplitfoo#1#2 #3#4\\spacesplitfoo{%$/ -specbind_tag c-src/emacs/src/lisp.h 2943 +spacesplit tex-src/texinfo.tex /^\\gdef\\spacesplit#1#2^^M{\\endgroup\\spacesplitfoo{#1/ +space tex-src/texinfo.tex /^ {#2\\labelspace #1}\\dotfill\\doshortpageno{#3}}%/ +space tex-src/texinfo.tex /^\\def\\chapentry#1#2#3{\\dochapentry{#2\\labelspace#1}/ +space tex-src/texinfo.tex /^\\def\\secentry#1#2#3#4{\\dosecentry{#2.#3\\labelspace/ +space tex-src/texinfo.tex /^\\def\\subsecentry#1#2#3#4#5{\\dosubsecentry{#2.#3.#4/ +space tex-src/texinfo.tex /^ \\dosubsubsecentry{#2.#3.#4.#5\\labelspace#1}{#6}}/ specbinding c-src/emacs/src/lisp.h 2955 +specbind_tag c-src/emacs/src/lisp.h 2943 specheader tex-src/texinfo.tex /^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/ specialsymbol prol-src/natded.prolog /^specialsymbol(C1,C2,S):-$/ +SPECPDL_BACKTRACE c-src/emacs/src/lisp.h 2948 +SPECPDL_INDEX c-src/emacs/src/lisp.h /^SPECPDL_INDEX (void)$/ +SPECPDL_LET c-src/emacs/src/lisp.h 2949 +SPECPDL_LET_DEFAULT c-src/emacs/src/lisp.h 2952 +SPECPDL_LET_LOCAL c-src/emacs/src/lisp.h 2951 +SPECPDL_UNWIND c-src/emacs/src/lisp.h 2944 +SPECPDL_UNWIND_INT c-src/emacs/src/lisp.h 2946 +SPECPDL_UNWIND_PTR c-src/emacs/src/lisp.h 2945 +SPECPDL_UNWIND_VOID c-src/emacs/src/lisp.h 2947 specx\defspecheader tex-src/texinfo.tex /^\\def\\defspec{\\defparsebody\\Edefspec\\defspecx\\defsp/ splitexp prol-src/natded.prolog /^splitexp(E,E,('NIL','NIL')):-!.$/ splitoff tex-src/texinfo.tex /^\\def\\splitoff#1#2\\endmark{\\def\\first{#1}\\def\\rest{/ +/S ps-src/rfc1245.ps /^\/S { $/ +sp tex-src/texinfo.tex /^\\def\\sp{\\parsearg\\spxxx}$/ spxxx tex-src/texinfo.tex /^\\def\\spxxx #1{\\par \\vskip #1\\baselineskip}$/ +Square.something:Bar lua-src/test.lua /^function Square.something:Bar ()$/ srclist make-src/Makefile /^srclist: Makefile$/ +SRCS make-src/Makefile /^SRCS=Makefile ${ADASRC} ${ASRC} ${CSRC} ${CPSRC} $/ +SREF c-src/emacs/src/lisp.h /^SREF (Lisp_Object string, ptrdiff_t index)$/ ss3 c.c 255 +SSDATA c-src/emacs/src/lisp.h /^SSDATA (Lisp_Object string)$/ +SSET c-src/emacs/src/lisp.h /^SSET (Lisp_Object string, ptrdiff_t index, unsigne/ sss1 c.c 252 sss2 c.c 253 sstab prol-src/natded.prolog /^sstab(2,'C',',').$/ +stack c.c 155 +STACK_CONS c-src/emacs/src/lisp.h /^#define STACK_CONS(a, b) \\$/ +stagseen c-src/etags.c 2446 +standalone make-src/Makefile /^standalone:$/ +startcontents tex-src/texinfo.tex /^\\def\\startcontents#1{%$/ +start c-src/emacs/src/keyboard.c 8753 +start c-src/emacs/src/lisp.h 2038 +start c-src/emacs/src/regex.h 431 +StartDay cp-src/functions.cpp /^Date StartDay(Date a,int days){\/\/Function to calcu/ +startenumeration tex-src/texinfo.tex /^\\def\\startenumeration#1{%$/ +start php-src/lce_functions.php /^ function start($line, $class)$/ +start_polling c-src/emacs/src/keyboard.c /^start_polling (void)$/ +=starts-with-equals! scm-src/test.scm /^(define =starts-with-equals! #t)$/ +start_up prol-src/natded.prolog /^start_up:-$/ +start y-src/cccp.y 143 +STATE_ABORT php-src/lce_functions.php 25 +STATE_COMPRESSD objc-src/PackInsp.m 54 +STATE_INSTALLED objc-src/PackInsp.m 53 +STATE_LOOP php-src/lce_functions.php 27 +STATE_OK php-src/lce_functions.php 26 +state_protected_p c-src/emacs/src/gmalloc.c 401 +STAT_EQ objc-src/PackInsp.m /^#define STAT_EQ(s1, s2) ((s1)->st_ino == (s2)->st_/ +statetable html-src/algrthms.html /^Next$/ +STATE_UNINSTALLED objc-src/PackInsp.m 52 +staticetags make-src/Makefile /^staticetags:$/ st_C_attribute c-src/etags.c 2209 st_C_class c-src/etags.c 2212 st_C_define c-src/etags.c 2213 @@ -4143,73 +3809,75 @@ st_C_operator c-src/etags.c 2211 st_C_struct c-src/etags.c 2213 st_C_template c-src/etags.c 2212 st_C_typedef c-src/etags.c 2213 -st_none c-src/etags.c 2206 -stack c.c 155 -stagseen c-src/etags.c 2446 -standalone make-src/Makefile /^standalone:$/ -start c-src/emacs/src/keyboard.c 8753 -start c-src/emacs/src/lisp.h 2038 -start c-src/emacs/src/regex.h 431 -start php-src/lce_functions.php /^ function start($line, $class)$/ -start y-src/cccp.y 143 -start_polling c-src/emacs/src/keyboard.c /^start_polling (void)$/ -start_up prol-src/natded.prolog /^start_up:-$/ -startcontents tex-src/texinfo.tex /^\\def\\startcontents#1{%$/ -startenumeration tex-src/texinfo.tex /^\\def\\startenumeration#1{%$/ -state_protected_p c-src/emacs/src/gmalloc.c 401 -statetable html-src/algrthms.html /^Next$/ -staticetags make-src/Makefile /^staticetags:$/ +STDIN c-src/etags.c 408 +STDIN c-src/etags.c 411 step cp-src/clheir.hpp /^ virtual void step(void) { }$/ step cp-src/conway.hpp /^ void step(void) { alive = next_alive; }$/ step_everybody cp-src/clheir.cpp /^void step_everybody(void)$/ +st_none c-src/etags.c 2206 +STOP_POLLING c-src/emacs/src/keyboard.c 2166 stop_polling c-src/emacs/src/keyboard.c /^stop_polling (void)$/ +stored_goal_plain_call merc-src/accumulator.m /^:- inst stored_goal_plain_call for goal_store.stor/ store_info merc-src/accumulator.m /^:- type store_info$/ store_user_signal_events c-src/emacs/src/keyboard.c /^store_user_signal_events (void)$/ -stored_goal_plain_call merc-src/accumulator.m /^:- inst stored_goal_plain_call for goal_store.stor/ -str go-src/test1.go 9 strcaseeq c-src/etags.c /^#define strcaseeq(s,t) (assert ((s)!=NULL && (t)!=/ streq c-src/etags.c /^#define streq(s,t) (assert ((s)!=NULL || (t)!=NULL/ -string merc-src/accumulator.m /^:- import_module string.$/ +str go-src/test1.go 9 +STRING_BYTES_BOUND c-src/emacs/src/lisp.h 1261 +STRING_BYTES c-src/emacs/src/lisp.h /^STRING_BYTES (struct Lisp_String *s)$/ string_intervals c-src/emacs/src/lisp.h /^string_intervals (Lisp_Object s)$/ +string merc-src/accumulator.m /^:- import_module string.$/ +STRING_MULTIBYTE c-src/emacs/src/lisp.h /^STRING_MULTIBYTE (Lisp_Object str)$/ +STRING_SET_CHARS c-src/emacs/src/lisp.h /^STRING_SET_CHARS (Lisp_Object string, ptrdiff_t ne/ +STRING_SET_MULTIBYTE c-src/emacs/src/lisp.h /^#define STRING_SET_MULTIBYTE(STR) \\$/ +STRING_SET_UNIBYTE c-src/emacs/src/lisp.h /^#define STRING_SET_UNIBYTE(STR) \\$/ stripLine php-src/lce_functions.php /^ function stripLine($line, $class)$/ stripname pas-src/common.pas /^function stripname; (* ($/ +StripPath pas-src/common.pas /^function StripPath; (*($/ strncaseeq c-src/etags.c /^#define strncaseeq(s,t,n) (assert ((s)!=NULL && (t/ strneq c-src/etags.c /^#define strneq(s,t,n) (assert ((s)!=NULL || (t)!=N/ strong tex-src/texinfo.tex /^\\let\\strong=\\b$/ strong tex-src/texinfo.tex /^\\let\\strong=\\indexdummyfont$/ +__str__ pyt-src/server.py /^ def __str__(self):$/ structdef c-src/etags.c 2448 stuff_buffered_input c-src/emacs/src/keyboard.c /^stuff_buffered_input (Lisp_Object stuffstring)$/ +SUB_CHAR_TABLE_OFFSET c-src/emacs/src/lisp.h 1701 +SUB_CHAR_TABLE_P c-src/emacs/src/lisp.h /^SUB_CHAR_TABLE_P (Lisp_Object a)$/ subheading tex-src/texinfo.tex /^\\def\\subheading{\\parsearg\\subsecheadingi}$/ -subprocess objc-src/PackInsp.m /^-subprocess:(Subprocess *)sender output:(char *)bu/ subprocessDone objc-src/PackInsp.m /^-subprocessDone:(Subprocess *)sender$/ -subsec tex-src/texinfo.tex /^\\global\\let\\subsection = \\appendixsubsec$/ -subsec tex-src/texinfo.tex /^\\let\\subsec=\\relax$/ +subprocess objc-src/PackInsp.m /^-subprocess:(Subprocess *)sender output:(char *)bu/ +Subprocess objc-src/Subprocess.h 41 +Subprocess objc-src/Subprocess.h /^@interface Subprocess:Object$/ +SUBRP c-src/emacs/src/lisp.h /^SUBRP (Lisp_Object a)$/ +subsecentryfonts tex-src/texinfo.tex /^\\let\\subsecentryfonts = \\textfonts$/ subsecentry tex-src/texinfo.tex /^ \\def\\subsecentry ##1##2##3##4##5{}$/ subsecentry tex-src/texinfo.tex /^\\def\\subsecentry#1#2#3#4#5{\\dosubsecentry{#2.#3.#4/ -subsecentryfonts tex-src/texinfo.tex /^\\let\\subsecentryfonts = \\textfonts$/ subsecfonts tex-src/texinfo.tex /^\\def\\subsecfonts{%$/ -subsecheading tex-src/texinfo.tex /^\\def\\subsecheading #1#2#3#4{\\subsecheadingi {#2.#3/ subsecheadingbreak tex-src/texinfo.tex /^\\def\\subsecheadingbreak{\\dobreak \\subsecheadingski/ subsecheadingi tex-src/texinfo.tex /^\\def\\subsecheadingi #1{{\\advance \\subsecheadingski/ +subsecheading tex-src/texinfo.tex /^\\def\\subsecheading #1#2#3#4{\\subsecheadingi {#2.#3/ +subsec tex-src/texinfo.tex /^\\global\\let\\subsection = \\appendixsubsec$/ +subsec tex-src/texinfo.tex /^\\let\\subsec=\\relax$/ +subsection_marker perl-src/htlmify-cystic 161 subsection perl-src/htlmify-cystic 26 subsection tex-src/texinfo.tex /^\\global\\let\\subsection = \\appendixsubsec$/ subsection tex-src/texinfo.tex /^\\global\\let\\subsection = \\numberedsubsec$/ subsection tex-src/texinfo.tex /^\\global\\let\\subsection = \\unnumberedsubsec$/ subsection tex-src/texinfo.tex /^\\let\\subsection=\\relax$/ -subsection_marker perl-src/htlmify-cystic 161 subseczzz tex-src/texinfo.tex /^\\def\\infoappendixsubsec{\\parsearg\\appendixsubseczz/ subseczzz tex-src/texinfo.tex /^\\outer\\def\\appendixsubsec{\\parsearg\\appendixsubsec/ -subst prol-src/natded.prolog /^subst(var(Y),var(X),M,N):-$/ substitute c-src/etags.c /^substitute (char *in, char *out, struct re_registe/ +subst prol-src/natded.prolog /^subst(var(Y),var(X),M,N):-$/ +SubString pas-src/common.pas /^function SubString; (*($/ subsubheading tex-src/texinfo.tex /^\\def\\subsubheading{\\parsearg\\subsubsecheadingi}$/ -subsubsec tex-src/texinfo.tex /^\\global\\let\\subsubsection = \\appendixsubsubsec$/ -subsubsec tex-src/texinfo.tex /^\\let\\subsubsec=\\relax$/ +subsubsecentryfonts tex-src/texinfo.tex /^\\let\\subsubsecentryfonts = \\textfonts$/ subsubsecentry tex-src/texinfo.tex /^ \\def\\subsubsecentry ##1##2##3##4##5##6{}$/ subsubsecentry tex-src/texinfo.tex /^\\def\\subsubsecentry#1#2#3#4#5#6{%$/ -subsubsecentryfonts tex-src/texinfo.tex /^\\let\\subsubsecentryfonts = \\textfonts$/ subsubsecfonts tex-src/texinfo.tex /^\\def\\subsubsecfonts{\\subsecfonts} % Maybe this sho/ -subsubsecheading tex-src/texinfo.tex /^\\def\\subsubsecheading #1#2#3#4#5{\\subsubsecheading/ subsubsecheadingi tex-src/texinfo.tex /^\\def\\subsubsecheadingi #1{{\\advance \\subsecheading/ +subsubsecheading tex-src/texinfo.tex /^\\def\\subsubsecheading #1#2#3#4#5{\\subsubsecheading/ +subsubsec tex-src/texinfo.tex /^\\global\\let\\subsubsection = \\appendixsubsubsec$/ +subsubsec tex-src/texinfo.tex /^\\let\\subsubsec=\\relax$/ subsubsection perl-src/htlmify-cystic 27 subsubsection tex-src/texinfo.tex /^\\global\\let\\subsubsection = \\appendixsubsubsec$/ subsubsection tex-src/texinfo.tex /^\\global\\let\\subsubsection = \\numberedsubsubsec$/ @@ -4217,9 +3885,9 @@ subsubsection tex-src/texinfo.tex /^\\global\\let\\subsubsection = \\unnumbereds subsubsection tex-src/texinfo.tex /^\\let\\subsubsection=\\relax$/ subsubseczzz tex-src/texinfo.tex /^\\def\\infoappendixsubsubsec{\\parsearg\\appendixsubsu/ subsubseczzz tex-src/texinfo.tex /^\\outer\\def\\appendixsubsubsec{\\parsearg\\appendixsub/ -subtitle tex-src/texinfo.tex /^ \\def\\subtitle{\\parsearg\\subtitlezzz}%$/ subtitlefont tex-src/texinfo.tex /^ \\def\\subtitlefont{\\subtitlerm \\normalbaselinesk/ subtitlerm tex-src/texinfo.tex /^ \\let\\subtitlerm=\\tenrm$/ +subtitle tex-src/texinfo.tex /^ \\def\\subtitle{\\parsearg\\subtitlezzz}%$/ subtitlezzz tex-src/texinfo.tex /^ \\def\\subtitlezzz##1{{\\subtitlefont \\rightline{#/ subtle ruby-src/test1.ru /^ :tee ; attr_reader :subtle$/ subtree prol-src/natded.prolog /^subtree(T,T).$/ @@ -4233,18 +3901,37 @@ sval y-src/cccp.y 116 swallow_events c-src/emacs/src/keyboard.c /^swallow_events (bool do_display)$/ switch_line_buffers c-src/etags.c /^#define switch_line_buffers() (curndx = 1 - curndx/ sxhash_combine c-src/emacs/src/lisp.h /^sxhash_combine (EMACS_UINT x, EMACS_UINT y)$/ -sym_type c-src/etags.c 2204 +SXHASH_REDUCE c-src/emacs/src/lisp.h /^SXHASH_REDUCE (EMACS_UINT x)$/ +SYMBOL_BLV c-src/emacs/src/lisp.h /^SYMBOL_BLV (struct Lisp_Symbol *sym)$/ +SYMBOL_CONSTANT_P c-src/emacs/src/lisp.h /^# define SYMBOL_CONSTANT_P(sym) lisp_h_SYMBOL_CONS/ symbol c-src/emacs/src/lisp.h 2980 +SYMBOL_FORWARDED c-src/emacs/src/lisp.h 651 +SYMBOL_FWD c-src/emacs/src/lisp.h /^SYMBOL_FWD (struct Lisp_Symbol *sym)$/ +SYMBOL_INDEX c-src/emacs/src/lisp.h /^#define SYMBOL_INDEX(sym) i##sym$/ symbol_interned c-src/emacs/src/lisp.h 639 +SYMBOL_INTERNED c-src/emacs/src/lisp.h 642 +SYMBOL_INTERNED_IN_INITIAL_OBARRAY c-src/emacs/src/lisp.h 643 +SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P c-src/emacs/src/lisp.h /^SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P (Lisp_Object / +SYMBOL_INTERNED_P c-src/emacs/src/lisp.h /^SYMBOL_INTERNED_P (Lisp_Object sym)$/ +SYMBOL_LOCALIZED c-src/emacs/src/lisp.h 650 symbol_name c-src/emacs/src/lisp.h 1687 +SYMBOL_NAME c-src/emacs/src/lisp.h /^SYMBOL_NAME (Lisp_Object sym)$/ +SYMBOLP c-src/emacs/src/lisp.h /^# define SYMBOLP(x) lisp_h_SYMBOLP (x)$/ +SYMBOL_PLAINVAL c-src/emacs/src/lisp.h 648 symbol_redirect c-src/emacs/src/lisp.h 646 +SYMBOL_UNINTERNED c-src/emacs/src/lisp.h 641 +SYMBOL_VAL c-src/emacs/src/lisp.h /^# define SYMBOL_VAL(sym) lisp_h_SYMBOL_VAL (sym)$/ +SYMBOL_VARALIAS c-src/emacs/src/lisp.h 649 syms_of_abbrev c-src/abbrev.c /^syms_of_abbrev ()$/ syms_of_keyboard c-src/emacs/src/keyboard.c /^syms_of_keyboard (void)$/ +sym_type c-src/etags.c 2204 synchronize_system_messages_locale c-src/emacs/src/lisp.h /^INLINE void synchronize_system_messages_locale (vo/ synchronize_system_time_locale c-src/emacs/src/lisp.h /^INLINE void synchronize_system_time_locale (void) / syncodeindex tex-src/texinfo.tex /^\\def\\syncodeindex #1 #2 {%$/ synindex tex-src/texinfo.tex /^\\def\\synindex #1 #2 {%$/ syntax c-src/emacs/src/regex.h 350 +SYSCALL c-src/machsyscalls.c /^#define SYSCALL(name, number, type, args, typed_ar/ +syscall_error c-src/sysdep.h 34 sys_jmp_buf c-src/emacs/src/lisp.h 2906 sys_jmp_buf c-src/emacs/src/lisp.h 2910 sys_jmp_buf c-src/emacs/src/lisp.h 2916 @@ -4254,14 +3941,12 @@ sys_longjmp c-src/emacs/src/lisp.h /^# define sys_longjmp(j, v) siglongjmp (j, v sys_setjmp c-src/emacs/src/lisp.h /^# define sys_setjmp(j) _setjmp (j)$/ sys_setjmp c-src/emacs/src/lisp.h /^# define sys_setjmp(j) setjmp (j)$/ sys_setjmp c-src/emacs/src/lisp.h /^# define sys_setjmp(j) sigsetjmp (j, 0)$/ -syscall_error c-src/sysdep.h 34 -t cp-src/c.C 52 -t tex-src/texinfo.tex /^\\def\\t##1{\\realbackslash r {##1}}%$/ -t tex-src/texinfo.tex /^\\def\\t#1{{\\tt \\exhyphenpenalty=10000\\rawbackslash / -t tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ -t tex-src/texinfo.tex /^\\let\\t=\\indexdummyfont$/ +System.Task_Primitives/b ada-src/2ataspri.adb /^package body System.Task_Primitives is$/ +System.Task_Primitives/s ada-src/2ataspri.ads /^package System.Task_Primitives is$/ t1 cp-src/c.C 34 t2 cp-src/c.C 38 +T2 cp-src/fail.C 16 +T3 c.c 163 tab_count_words c-src/tab.c /^int tab_count_words(char **tab)$/ tab_delete_first c-src/tab.c /^int tab_delete_first(char **tab)$/ tab_fill c-src/tab.c /^char **tab_fill(char *str, char delim)$/ @@ -4270,18 +3955,6 @@ table tex-src/texinfo.tex /^\\def\\table{\\begingroup\\inENV\\obeylines\\obeyspa tablex tex-src/texinfo.tex /^\\gdef\\tablex #1^^M{%$/ tabley tex-src/texinfo.tex /^\\gdef\\tabley#1#2 #3 #4 #5 #6 #7\\endtabley{\\endgrou/ tablez tex-src/texinfo.tex /^\\def\\tablez #1#2#3#4#5#6{%$/ -tag-any-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-any-match-p (_tag)$/ -tag-exact-file-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-exact-file-name-match-p (tag)$/ -tag-exact-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-exact-match-p (tag)$/ -tag-file-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-file-name-match-p (tag)$/ -tag-find-file-of-tag el-src/emacs/lisp/progmodes/etags.el /^(defun tag-find-file-of-tag (file) ; Doc string?$/ -tag-find-file-of-tag-noselect el-src/emacs/lisp/progmodes/etags.el /^(defun tag-find-file-of-tag-noselect (file)$/ -tag-implicit-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-implicit-name-match-p (tag)$/ -tag-lines-already-matched el-src/emacs/lisp/progmodes/etags.el /^(defvar tag-lines-already-matched nil$/ -tag-partial-file-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-partial-file-name-match-p (_tag)$/ -tag-re-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-re-match-p (re)$/ -tag-symbol-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-symbol-match-p (tag)$/ -tag-word-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-word-match-p (tag)$/ tag1 c-src/dostorture.c /^(*tag1 (sig, handler)) ()$/ tag1 c-src/h.h 110 tag1 c-src/torture.c /^(*tag1 (sig, handler)) ()$/ @@ -4295,12 +3968,22 @@ tag5 c-src/dostorture.c /^tag5 (handler, arg)$/ tag5 c-src/torture.c /^tag5 (handler, arg)$/ tag6 c-src/dostorture.c /^tag6 (void (*handler) (void *), void *arg)$/ tag6 c-src/torture.c /^tag6 (void (*handler) (void *), void *arg)$/ -tag_or_ch c-src/emacs/src/lisp.h 3026 +tag-any-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-any-match-p (_tag)$/ +tag-exact-file-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-exact-file-name-match-p (tag)$/ +tag-exact-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-exact-match-p (tag)$/ +tag-file-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-file-name-match-p (tag)$/ +tag-find-file-of-tag el-src/emacs/lisp/progmodes/etags.el /^(defun tag-find-file-of-tag (file) ; Doc string?$/ +tag-find-file-of-tag-noselect el-src/emacs/lisp/progmodes/etags.el /^(defun tag-find-file-of-tag-noselect (file)$/ taggedfname c-src/etags.c 207 -tags make-src/Makefile /^tags: TAGS$/ +tag-implicit-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-implicit-name-match-p (tag)$/ +tag-lines-already-matched el-src/emacs/lisp/progmodes/etags.el /^(defvar tag-lines-already-matched nil$/ +tag_or_ch c-src/emacs/src/lisp.h 3026 +tag-partial-file-name-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-partial-file-name-match-p (_tag)$/ +TAG_PTR c-src/emacs/src/lisp.h /^#define TAG_PTR(tag, ptr) \\$/ +tag-re-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-re-match-p (re)$/ tags-add-tables el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-add-tables 'ask-user$/ -tags-apropos el-src/emacs/lisp/progmodes/etags.el /^(defun tags-apropos (regexp)$/ tags-apropos-additional-actions el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-apropos-additional-actions nil$/ +tags-apropos el-src/emacs/lisp/progmodes/etags.el /^(defun tags-apropos (regexp)$/ tags-apropos-function el-src/emacs/lisp/progmodes/etags.el /^(defvar tags-apropos-function nil$/ tags-apropos-verbose el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-apropos-verbose nil$/ tags-case-fold-search el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-case-fold-search 'default$/ @@ -4322,6 +4005,8 @@ tags-loop-eval el-src/emacs/lisp/progmodes/etags.el /^(defun tags-loop-eval (for tags-loop-operate el-src/emacs/lisp/progmodes/etags.el /^(defvar tags-loop-operate nil$/ tags-loop-revert-buffers el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-loop-revert-buffers nil$/ tags-loop-scan el-src/emacs/lisp/progmodes/etags.el /^(defvar tags-loop-scan$/ +TAGS make-src/Makefile /^TAGS: etags.c$/ +tags make-src/Makefile /^tags: TAGS$/ tags-next-table el-src/emacs/lisp/progmodes/etags.el /^(defun tags-next-table ()$/ tags-query-replace el-src/emacs/lisp/progmodes/etags.el /^(defun tags-query-replace (from to &optional delim/ tags-recognize-empty-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun tags-recognize-empty-tags-table ()$/ @@ -4347,15 +4032,34 @@ tags-table-set-list el-src/emacs/lisp/progmodes/etags.el /^(defvar tags-table-se tags-tag-face el-src/emacs/lisp/progmodes/etags.el /^(defcustom tags-tag-face 'default$/ tags-verify-table el-src/emacs/lisp/progmodes/etags.el /^(defun tags-verify-table (file)$/ tags-with-face el-src/emacs/lisp/progmodes/etags.el /^(defmacro tags-with-face (face &rest body)$/ +tag-symbol-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-symbol-match-p (tag)$/ +TAG_SYMOFFSET c-src/emacs/src/lisp.h /^#define TAG_SYMOFFSET(offset) \\$/ +tag-word-match-p el-src/emacs/lisp/progmodes/etags.el /^(defun tag-word-match-p (tag)$/ +Tapes tex-src/gzip.texi /^@node Tapes, Problems, Environment, Top$/ target_multibyte c-src/emacs/src/regex.h 407 -tclose tex-src/texinfo.tex /^\\def\\tclose##1{\\realbackslash tclose {##1}}$/ +TAS_Cell/t ada-src/2ataspri.ads /^ type TAS_Cell is$/ +TAS_Cell/t ada-src/2ataspri.ads /^ type TAS_Cell is private;$/ +Task_Control_Block/t ada-src/2ataspri.ads /^ type Task_Control_Block is record$/ +Task_Storage_Size/t ada-src/2ataspri.ads /^ type Task_Storage_Size is new Interfaces.C.size/ +Task_Type/b ada-src/etags-test-for.ada /^ task body Task_Type is$/ +Task_Type/b ada-src/waroquiers.ada /^ task body Task_Type is$/ +Task_Type/k ada-src/etags-test-for.ada /^ task type Task_Type is$/ +Task_Type/k ada-src/waroquiers.ada /^ task type Task_Type is$/ +TCB_Ptr/t ada-src/2ataspri.ads /^ type TCB_Ptr is access all Task_Control_Block;$/ +TCLFLAGS make-src/Makefile /^TCLFLAGS=--lang=none --regex='\/proc[ \\t]+\\([^ \\t]+/ tclose tex-src/texinfo.tex /^\\def\\tclose##1{\\realbackslash tclose {##1}}%$/ +tclose tex-src/texinfo.tex /^\\def\\tclose##1{\\realbackslash tclose {##1}}$/ tclose tex-src/texinfo.tex /^\\def\\tclose#1{{\\rm \\tcloserm=\\fontdimen2\\font \\tt / tclose tex-src/texinfo.tex /^\\let\\tclose=\\indexdummyfont$/ tcpdump html-src/software.html /^tcpdump$/ +t cp-src/c.C 52 +T cp-src/fail.C 14 teats cp-src/c.C 127 tee ruby-src/test1.ru /^ attr_accessor :tee$/ tee= ruby-src/test1.ru /^ attr_accessor :tee$/ +temp1 tex-src/texinfo.tex /^\\xdef\\temp1{#2}%$/ +temp1 tex-src/texinfo.tex /^\\xdef\\temp1{#2 #3}%$/ +temporarily_switch_to_single_kboard c-src/emacs/src/keyboard.c /^temporarily_switch_to_single_kboard (struct frame / temp tex-src/texinfo.tex /^\\edef\\temp{%$/ temp tex-src/texinfo.tex /^\\edef\\temp{{\\realbackslash chapentry $/ temp tex-src/texinfo.tex /^\\edef\\temp{{\\realbackslash chapentry {#1}{\\the\\cha/ @@ -4370,15 +4074,12 @@ temp tex-src/texinfo.tex /^\\edef\\temp{{\\realbackslash unnumbsubsubsecentry{#1 temp tex-src/texinfo.tex /^\\else \\let\\temp=\\ifclearfail \\fi$/ temp tex-src/texinfo.tex /^\\else \\let\\temp=\\relax \\fi$/ temp tex-src/texinfo.tex /^\\expandafter\\ifx\\csname IF#1\\endcsname\\relax \\let\\/ -temp1 tex-src/texinfo.tex /^\\xdef\\temp1{#2 #3}%$/ -temp1 tex-src/texinfo.tex /^\\xdef\\temp1{#2}%$/ -temporarily_switch_to_single_kboard c-src/emacs/src/keyboard.c /^temporarily_switch_to_single_kboard (struct frame / +tenbf tex-src/texinfo.tex /^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/ tenbf tex-src/texinfo.tex /^ \\let\\tenbf=\\chapbf \\let\\tentt=\\chaptt \\let\\small/ tenbf tex-src/texinfo.tex /^ \\let\\tenbf=\\indbf \\let\\tentt=\\indtt \\let\\smallca/ tenbf tex-src/texinfo.tex /^ \\let\\tenbf=\\secbf \\let\\tentt=\\sectt \\let\\smallca/ tenbf tex-src/texinfo.tex /^ \\let\\tenbf=\\ssecbf \\let\\tentt=\\ssectt \\let\\small/ tenbf tex-src/texinfo.tex /^ \\let\\tenbf=\\textbf \\let\\tentt=\\texttt \\let\\small/ -tenbf tex-src/texinfo.tex /^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/ tend c-src/etags.c 2432 teni tex-src/texinfo.tex /^ \\let\\tensf=\\chapsf \\let\\teni=\\chapi \\let\\tensy=\\/ teni tex-src/texinfo.tex /^ \\let\\tensf=\\indsf \\let\\teni=\\indi \\let\\tensy=\\in/ @@ -4410,53 +4111,119 @@ tensy tex-src/texinfo.tex /^ \\let\\tensf=\\indsf \\let\\teni=\\indi \\let\\ten tensy tex-src/texinfo.tex /^ \\let\\tensf=\\secsf \\let\\teni=\\seci \\let\\tensy=\\se/ tensy tex-src/texinfo.tex /^ \\let\\tensf=\\ssecsf \\let\\teni=\\sseci \\let\\tensy=\\/ tensy tex-src/texinfo.tex /^ \\let\\tensf=\\textsf \\let\\teni=\\texti \\let\\tensy=\\/ +tentt tex-src/texinfo.tex /^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/ tentt tex-src/texinfo.tex /^ \\let\\tenbf=\\chapbf \\let\\tentt=\\chaptt \\let\\small/ tentt tex-src/texinfo.tex /^ \\let\\tenbf=\\indbf \\let\\tentt=\\indtt \\let\\smallca/ tentt tex-src/texinfo.tex /^ \\let\\tenbf=\\secbf \\let\\tentt=\\sectt \\let\\smallca/ tentt tex-src/texinfo.tex /^ \\let\\tenbf=\\ssecbf \\let\\tentt=\\ssectt \\let\\small/ tentt tex-src/texinfo.tex /^ \\let\\tenbf=\\textbf \\let\\tentt=\\texttt \\let\\small/ -tentt tex-src/texinfo.tex /^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/ tentt tex-src/texinfo.tex /^{\\let\\tentt=\\sectt \\let\\tt=\\sectt \\let\\sf=\\sectt$/ -term merc-src/accumulator.m /^:- import_module term.$/ -terminate objc-src/Subprocess.m /^- terminate:sender$/ +TERMINALP c-src/emacs/src/lisp.h /^TERMINALP (Lisp_Object a)$/ terminateInput objc-src/Subprocess.m /^- terminateInput$/ -test c-src/emacs/src/lisp.h 1871 +terminate objc-src/Subprocess.m /^- terminate:sender$/ +term merc-src/accumulator.m /^:- import_module term.$/ +test1 rs-src/test.rs /^fn test1() {$/ +Test_Abort/p ada-src/2ataspri.adb /^ procedure Test_Abort is$/ +Test_Abort/p ada-src/2ataspri.ads /^ procedure Test_Abort;$/ +Test_And_Set/p ada-src/2ataspri.adb /^ procedure Test_And_Set (Cell : in out TAS_Cell;/ +Test_And_Set/p ada-src/2ataspri.ads /^ procedure Test_And_Set (Cell : in out TAS_Cell;/ +test-begin scm-src/test.scm /^(define-syntax test-begin$/ test cp-src/c.C 86 +test c-src/emacs/src/lisp.h 1871 test erl-src/gs_dialog.erl /^test() ->$/ test go-src/test1.go /^func test(p plus) {$/ test make-src/Makefile /^test:$/ -test php-src/ptest.php /^test $/ -test-begin scm-src/test.scm /^(define-syntax test-begin$/ -test.me22b lua-src/test.lua /^ local function test.me22b (one)$/ test.me_22a lua-src/test.lua /^ function test.me_22a(one, two)$/ -test1 rs-src/test.rs /^fn test1() {$/ +test.me22b lua-src/test.lua /^ local function test.me22b (one)$/ +TEST php-src/ptest.php 1 +test php-src/ptest.php /^test $/ test_undefined c-src/emacs/src/keyboard.c /^test_undefined (Lisp_Object binding)$/ -tex tex-src/texinfo.tex /^\\def\\tex{\\begingroup$/ +TEX_clgrp c-src/etags.c 4922 +TeX_commands c-src/etags.c /^TeX_commands (FILE *inf)$/ +TEX_decode_env c-src/etags.c /^TEX_decode_env (const char *evarname, const char */ +TEX_defenv c-src/etags.c 4912 +TEX_esc c-src/etags.c 4920 +TeX_help c-src/etags.c 674 +Texinfo_help c-src/etags.c 688 +Texinfo_nodes c-src/etags.c /^Texinfo_nodes (FILE *inf)$/ +Texinfo_suffixes c-src/etags.c 686 texinfoversion tex-src/texinfo.tex /^\\def\\texinfoversion{2.73}$/ +TEX_LESC c-src/etags.c 4986 +TEX_mode c-src/etags.c /^TEX_mode (FILE *inf)$/ +TEX_opgrp c-src/etags.c 4921 +TEX_SESC c-src/etags.c 4987 +TEXSRC make-src/Makefile /^TEXSRC=testenv.tex gzip.texi texinfo.tex nonewline/ +~ tex-src/texinfo.tex /^\\catcode `\\^=7 \\catcode `\\_=8 \\catcode `\\~=13 \\let/ +' tex-src/texinfo.tex /^\\def\\'{{'}}$/ +@ tex-src/texinfo.tex /^\\def\\@{@}%$/ +` tex-src/texinfo.tex /^\\def\\`{{`}}$/ +* tex-src/texinfo.tex /^\\def\\*{\\hfil\\break\\hbox{}\\ignorespaces}$/ +_ tex-src/texinfo.tex /^\\def_{\\ifusingtt\\normalunderscore\\_}$/ +_ tex-src/texinfo.tex /^\\def\\_{\\lvvmode \\kern.06em \\vbox{\\hrule width.3em / +_ tex-src/texinfo.tex /^\\def\\_{{\\realbackslash _}}%$/ +: tex-src/texinfo.tex /^\\def\\:{\\spacefactor=1000 }$/ +. tex-src/texinfo.tex /^\\def\\.{.\\spacefactor=3000 }$/ +@ tex-src/texinfo.tex /^\\def\\@{{\\tt \\char '100}}$/ +| tex-src/texinfo.tex /^\\def|{{\\tt \\char '174}}$/ +~ tex-src/texinfo.tex /^\\def~{{\\tt \\char '176}}$/ ++ tex-src/texinfo.tex /^\\def+{{\\tt \\char 43}}$/ +> tex-src/texinfo.tex /^\\def>{{\\tt \\gtr}}$/ +^ tex-src/texinfo.tex /^\\def^{{\\tt \\hat}}$/ +< tex-src/texinfo.tex /^\\def<{{\\tt \\less}}$/ +" tex-src/texinfo.tex /^\\def\\turnoffactive{\\let"=\\normaldoublequote$/ +( tex-src/texinfo.tex /^\\gdef\\amprm#1 {{\\rm\\}\\let(=\\oprm \\let)=\\clrm\\ }/ +) tex-src/texinfo.tex /^\\gdef\\amprm#1 {{\\rm\\}\\let(=\\oprm \\let)=\\clrm\\ }/ +( tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ +) tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ +[ tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ +] tex-src/texinfo.tex /^\\gdef\\boldbrax{\\let(=\\opnr\\let)=\\clnr\\let[=\\lbrb\\l/ +& tex-src/texinfo.tex /^\\gdef\\functionparens{\\boldbrax\\let&=\\amprm\\parenco/ +& tex-src/texinfo.tex /^\\gdef\\normalparens{\\boldbrax\\let&=\\ampnr}$/ +( tex-src/texinfo.tex /^\\gdef\\oprm#1 {{\\rm\\char`\\(}#1 \\bf \\let(=\\opnested / += tex-src/texinfo.tex /^\\global\\def={{\\tt \\char 61}}}$/ +( tex-src/texinfo.tex /^\\ifnum \\parencount=1 {\\rm \\char `\\)}\\sl \\let(=\\opr/ +" tex-src/texinfo.tex /^\\let"=\\activedoublequote$/ +{ tex-src/texinfo.tex /^\\let\\{=\\mylbrace$/ +} tex-src/texinfo.tex /^\\let\\}=\\myrbrace$/ +^ tex-src/texinfo.tex /^\\let^=\\normalcaret$/ +> tex-src/texinfo.tex /^\\let>=\\normalgreater$/ +< tex-src/texinfo.tex /^\\let<=\\normalless$/ ++ tex-src/texinfo.tex /^\\let+=\\normalplus}$/ +~ tex-src/texinfo.tex /^\\let~=\\normaltilde$/ +_ tex-src/texinfo.tex /^\\let_=\\normalunderscore$/ +| tex-src/texinfo.tex /^\\let|=\\normalverticalbar$/ +. tex-src/texinfo.tex /^\\let\\.=\\ptexdot$/ +{ tex-src/texinfo.tex /^\\let\\{=\\ptexlbrace$/ +} tex-src/texinfo.tex /^\\let\\}=\\ptexrbrace$/ +* tex-src/texinfo.tex /^\\let\\*=\\ptexstar$/ +TeX_suffixes c-src/etags.c 672 +tex tex-src/texinfo.tex /^\\def\\tex{\\begingroup$/ +TeX tex-src/texinfo.tex /^\\def\\TeX{\\realbackslash TeX}%$/ +TeX tex-src/texinfo.tex /^\\def\\TeX{\\realbackslash TeX}$/ +TeX tex-src/texinfo.tex /^\\let\\TeX=\\indexdummytex$/ textfonts tex-src/texinfo.tex /^\\def\\textfonts{%$/ +TEX_toktab c-src/etags.c 4908 texttreelist prol-src/natded.prolog /^texttreelist([]).$/ +/TF ps-src/rfc1245.ps /^\/TF { $/ thearg tex-src/texinfo.tex /^ \\def\\thearg{#1}%$/ thearg tex-src/texinfo.tex /^ \\ifx\\thearg\\empty \\def\\thearg{1}\\fi$/ there-is-a-=-in-the-middle! scm-src/test.scm /^(define (there-is-a-=-in-the-middle!) #t)$/ -this c-src/a/b/b.c 1 -this-command-keys c-src/emacs/src/keyboard.c /^DEFUN ("this-command-keys", Fthis_command_keys, St/ -this-command-keys-vector c-src/emacs/src/keyboard.c /^DEFUN ("this-command-keys-vector", Fthis_command_k/ -this-single-command-keys c-src/emacs/src/keyboard.c /^DEFUN ("this-single-command-keys", Fthis_single_co/ -this-single-command-raw-keys c-src/emacs/src/keyboard.c /^DEFUN ("this-single-command-raw-keys", Fthis_singl/ -this_command_key_count c-src/emacs/src/keyboard.c 108 -this_command_key_count_reset c-src/emacs/src/keyboard.c 112 -this_command_keys c-src/emacs/src/keyboard.c 107 -this_file_toc perl-src/htlmify-cystic 29 -this_single_command_key_start c-src/emacs/src/keyboard.c 125 -thischapter tex-src/texinfo.tex /^ \\unnumbchapmacro{#1}\\def\\thischapter{}%$/ +thischaptername tex-src/texinfo.tex /^\\def\\thischaptername{No Chapter Title}$/ +thischaptername tex-src/texinfo.tex /^\\gdef\\thischaptername{#1}%$/ thischapter tex-src/texinfo.tex /^\\def\\thischapter{} \\def\\thissection{}$/ thischapter tex-src/texinfo.tex /^\\gdef\\thischapter{#1}\\gdef\\thissection{#1}%$/ +thischapter tex-src/texinfo.tex /^ \\unnumbchapmacro{#1}\\def\\thischapter{}%$/ thischapter tex-src/texinfo.tex /^\\xdef\\thischapter{Appendix \\appendixletter: \\noexp/ thischapter tex-src/texinfo.tex /^\\xdef\\thischapter{Chapter \\the\\chapno: \\noexpand\\t/ -thischaptername tex-src/texinfo.tex /^\\def\\thischaptername{No Chapter Title}$/ -thischaptername tex-src/texinfo.tex /^\\gdef\\thischaptername{#1}%$/ +this_command_key_count c-src/emacs/src/keyboard.c 108 +this_command_key_count_reset c-src/emacs/src/keyboard.c 112 +this_command_keys c-src/emacs/src/keyboard.c 107 +this-command-keys c-src/emacs/src/keyboard.c /^DEFUN ("this-command-keys", Fthis_command_keys, St/ +this-command-keys-vector c-src/emacs/src/keyboard.c /^DEFUN ("this-command-keys-vector", Fthis_command_k/ +this c-src/a/b/b.c 1 thisfile tex-src/texinfo.tex /^\\def\\includezzz #1{{\\def\\thisfile{#1}\\input #1$/ thisfile tex-src/texinfo.tex /^\\def\\thisfile{}$/ +this_file_toc perl-src/htlmify-cystic 29 thisfootno tex-src/texinfo.tex /^\\edef\\thisfootno{$^{\\the\\footnoteno}$}%$/ thispage tex-src/texinfo.tex /^\\let\\thispage=\\folio$/ thissection tex-src/texinfo.tex /^\\def\\thischapter{} \\def\\thissection{}$/ @@ -4467,26 +4234,30 @@ thissection tex-src/texinfo.tex /^\\gdef\\thissection{#1}\\secheading {#1}{\\app thissection tex-src/texinfo.tex /^\\gdef\\thissection{#1}\\secheading {#1}{\\the\\chapno}/ thissection tex-src/texinfo.tex /^\\gdef\\thissection{#1}\\subsubsecno=0 \\global\\advanc/ thissection tex-src/texinfo.tex /^\\plainsecheading {#1}\\gdef\\thissection{#1}%$/ +this-single-command-keys c-src/emacs/src/keyboard.c /^DEFUN ("this-single-command-keys", Fthis_single_co/ +this_single_command_key_start c-src/emacs/src/keyboard.c 125 +this-single-command-raw-keys c-src/emacs/src/keyboard.c /^DEFUN ("this-single-command-raw-keys", Fthis_singl/ thistitle tex-src/texinfo.tex /^\\def\\settitlezzz #1{\\gdef\\thistitle{#1}}$/ thistitle tex-src/texinfo.tex /^\\def\\thistitle{No Title}$/ three tex-src/texinfo.tex /^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/ threex tex-src/texinfo.tex /^\\def\\kbdfoo#1#2#3\\par{\\def\\one{#1}\\def\\three{#3}\\d/ tie tex-src/texinfo.tex /^\\def\\tie{\\penalty 10000\\ } % Save plain tex de/ tignore c-src/etags.c 2433 -timer_check c-src/emacs/src/keyboard.c /^timer_check (void)$/ timer_check_2 c-src/emacs/src/keyboard.c /^timer_check_2 (Lisp_Object timers, Lisp_Object idl/ +timer_check c-src/emacs/src/keyboard.c /^timer_check (void)$/ timer_idleness_start_time c-src/emacs/src/keyboard.c 335 timer_last_idleness_start_time c-src/emacs/src/keyboard.c 340 timer_resume_idle c-src/emacs/src/keyboard.c /^timer_resume_idle (void)$/ +timers_run c-src/emacs/src/keyboard.c 320 timer_start_idle c-src/emacs/src/keyboard.c /^timer_start_idle (void)$/ timer_stop_idle c-src/emacs/src/keyboard.c /^timer_stop_idle (void)$/ -timers_run c-src/emacs/src/keyboard.c 320 +Time_to_position c-src/emacs/src/keyboard.c /^Time_to_position (Time encoded_pos)$/ tinbody c-src/etags.c 2431 tindex tex-src/texinfo.tex /^\\def\\tindex {\\tpindex}$/ -title tex-src/texinfo.tex /^ \\def\\title{\\parsearg\\titlezzz}%$/ titlefont tex-src/texinfo.tex /^\\def\\titlefont#1{{\\titlerm #1}}$/ titlepage tex-src/texinfo.tex /^\\def\\titlepage{\\begingroup \\parindent=0pt \\textfon/ titlepage tex-src/texinfo.tex /^\\let\\titlepage=\\relax$/ +title tex-src/texinfo.tex /^ \\def\\title{\\parsearg\\titlezzz}%$/ titlezzz tex-src/texinfo.tex /^ \\def\\titlezzz##1{\\leftline{\\titlefont{##1}}$/ tkeyseen c-src/etags.c 2429 tnone c-src/etags.c 2428 @@ -4495,45 +4266,65 @@ today tex-src/texinfo.tex /^\\def\\today{\\number\\day\\space$/ toggleDescription objc-src/PackInsp.m /^-toggleDescription$/ tok c-src/etags.c 2491 token c-src/etags.c 2508 -token y-src/cccp.y 437 -token y-src/cccp.y 439 -tokenize prol-src/natded.prolog /^tokenize([C1,C2,C3|Cs],Xs-Ys,TsResult):- % spe/ tokenizeatom prol-src/natded.prolog /^tokenizeatom(Atom,Ws):-$/ +tokenize prol-src/natded.prolog /^tokenize([C1,C2,C3|Cs],Xs-Ys,TsResult):- % spe/ tokentab2 y-src/cccp.y 442 +token y-src/cccp.y 437 +token y-src/cccp.y 439 +To_Lower pas-src/common.pas /^function To_Lower;(*(ch:char) : char;*)$/ tool_bar_item_properties c-src/emacs/src/keyboard.c 7970 tool_bar_items c-src/emacs/src/keyboard.c /^tool_bar_items (Lisp_Object reuse, int *nitems)$/ tool_bar_items_vector c-src/emacs/src/keyboard.c 7965 toolkit_menubar_in_use c-src/emacs/src/keyboard.c /^toolkit_menubar_in_use (struct frame *f)$/ -top tex-src/texinfo.tex /^\\let\\top=\\relax$/ -top tex-src/texinfo.tex /^\\outer\\def\\top{\\parsearg\\unnumberedzzz}$/ -top-level c-src/emacs/src/keyboard.c /^DEFUN ("top-level", Ftop_level, Stop_level, 0, 0, / -top_level merc-src/accumulator.m /^:- type top_level$/ top_level_1 c-src/emacs/src/keyboard.c /^top_level_1 (Lisp_Object ignore)$/ top_level_2 c-src/emacs/src/keyboard.c /^top_level_2 (void)$/ +top-level c-src/emacs/src/keyboard.c /^DEFUN ("top-level", Ftop_level, Stop_level, 0, 0, / +top_level merc-src/accumulator.m /^:- type top_level$/ +Top tex-src/gzip.texi /^@node Top, , , (dir)$/ +top tex-src/texinfo.tex /^\\let\\top=\\relax$/ +top tex-src/texinfo.tex /^\\outer\\def\\top{\\parsearg\\unnumberedzzz}$/ +To_Start_Addr/f ada-src/2ataspri.adb /^ function To_Start_Addr is new$/ total_keys c-src/emacs/src/keyboard.c 97 +TOTAL_KEYWORDS c-src/etags.c 2325 +totally_unblock_input c-src/emacs/src/keyboard.c /^totally_unblock_input (void)$/ total_size_of_entries c-src/etags.c /^total_size_of_entries (register node *np)$/ total_surrounding cp-src/conway.cpp /^int site::total_surrounding(void)$/ -totally_unblock_input c-src/emacs/src/keyboard.c /^totally_unblock_input (void)$/ +To_TCB_Ptr/f ada-src/2ataspri.adb /^ function To_TCB_Ptr is new$/ +To_Upper pas-src/common.pas /^function To_Upper;(*(ch:char) : char;*)$/ +To_void_ptr/f ada-src/2ataspri.adb /^ function To_void_ptr is new$/ tpargs tex-src/texinfo.tex /^\\begingroup\\defname {#2}{#1}\\deftpargs{#3}\\endgrou/ tpcmd c-src/h.h 15 tpcmd c-src/h.h 8 tpheader tex-src/texinfo.tex /^\\def\\deftp{\\defvrparsebody\\Edeftp\\deftpx\\deftphead/ +/T ps-src/rfc1245.ps /^\/T { $/ tpx\deftpheader tex-src/texinfo.tex /^\\def\\deftp{\\defvrparsebody\\Edeftp\\deftpx\\deftphead/ -track-mouse c-src/emacs/src/keyboard.c /^DEFUN ("internal--track-mouse", Ftrack_mouse, Stra/ tracking_off c-src/emacs/src/keyboard.c /^tracking_off (Lisp_Object old_value)$/ +track-mouse c-src/emacs/src/keyboard.c /^DEFUN ("internal--track-mouse", Ftrack_mouse, Stra/ traffic_light cp-src/conway.cpp /^void traffic_light(int x, int y)$/ translate c-src/emacs/src/regex.h 361 treats cp-src/c.C 131 +Truc.Bidule/b ada-src/etags-test-for.ada /^package body Truc.Bidule is$/ +Truc.Bidule/b ada-src/waroquiers.ada /^package body Truc.Bidule is$/ +Truc.Bidule/s ada-src/etags-test-for.ada /^package Truc.Bidule is$/ +Truc.Bidule/s ada-src/waroquiers.ada /^package Truc.Bidule is$/ +Truc/s ada-src/etags-test-for.ada /^package Truc is$/ +Truc/s ada-src/waroquiers.ada /^package Truc is$/ +TSL/s ada-src/2ataspri.adb /^ package TSL renames System.Tasking_Soft_Links;$/ +t tex-src/texinfo.tex /^\\def\\t##1{\\realbackslash r {##1}}%$/ +t tex-src/texinfo.tex /^\\def\\t#1{{\\tt \\exhyphenpenalty=10000\\rawbackslash / +t tex-src/texinfo.tex /^\\let\\b=\\ptexb \\let\\c=\\ptexc \\let\\i=\\ptexi \\let\\t=\\/ +t tex-src/texinfo.tex /^\\let\\t=\\indexdummyfont$/ +ttfont tex-src/texinfo.tex /^\\let\\ttfont = \\t$/ tt prol-src/natded.prolog /^tt:-$/ tt tex-src/texinfo.tex /^\\def\\df{\\let\\tentt=\\deftt \\let\\tenbf = \\defbf \\bf}/ -tt tex-src/texinfo.tex /^\\def\\tt{\\realbackslash tt}$/ tt tex-src/texinfo.tex /^\\def\\tt{\\realbackslash tt}%$/ +tt tex-src/texinfo.tex /^\\def\\tt{\\realbackslash tt}$/ tt tex-src/texinfo.tex /^\\font\\deftt=cmtt10 scaled \\magstep1$/ tt tex-src/texinfo.tex /^{\\let\\tentt=\\sectt \\let\\tt=\\sectt \\let\\sf=\\sectt$/ -ttfont tex-src/texinfo.tex /^\\let\\ttfont = \\t$/ -tty_read_avail_input c-src/emacs/src/keyboard.c /^tty_read_avail_input (struct terminal *terminal,$/ ttypeseen c-src/etags.c 2430 +tty_read_avail_input c-src/emacs/src/keyboard.c /^tty_read_avail_input (struct terminal *terminal,$/ turnoffactive tex-src/texinfo.tex /^\\def\\turnoffactive{\\let"=\\normaldoublequote$/ +/two ps-src/rfc1245.ps /^\/two \/three \/four \/five \/six \/seven \/eight \/nine \// typdef c-src/etags.c 2434 type c-src/emacs/src/gmalloc.c 145 type c-src/emacs/src/lisp.h 1973 @@ -4559,39 +4350,54 @@ typefunx\deftypefunheader tex-src/texinfo.tex /^\\def\\deftypefun{\\defparsebody typemargin tex-src/texinfo.tex /^\\newskip\\deftypemargin \\deftypemargin=12pt$/ typemargin tex-src/texinfo.tex /^\\rlap{\\rightline{{\\rm #2}\\hskip \\deftypemargin}}}%/ typemargin tex-src/texinfo.tex /^\\setbox0=\\hbox{\\hskip \\deflastargmargin{\\rm #2}\\hs/ +TYPE_RANGED_INTEGERP c-src/emacs/src/lisp.h /^#define TYPE_RANGED_INTEGERP(type, x) \\$/ +Type_Specific_Data/t ada-src/etags-test-for.ada /^ type Type_Specific_Data is record$/ +TYPESTOSTAT objc-src/PackInsp.h 37 typevarheader tex-src/texinfo.tex /^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/ typevarx\deftypevarheader tex-src/texinfo.tex /^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/ typevrheader tex-src/texinfo.tex /^\\def\\deftypevr{\\defvrparsebody\\Edeftypevr\\deftypev/ typevrx\deftypevrheader tex-src/texinfo.tex /^\\def\\deftypevr{\\defvrparsebody\\Edeftypevr\\deftypev/ -u c-src/emacs/src/lisp.h 2397 +/Uacute ps-src/rfc1245.ps /^\/Uacute \/Ucircumflex \/Ugrave \/dotlessi \/circumflex/ u_any c-src/emacs/src/lisp.h 2214 u_boolfwd c-src/emacs/src/lisp.h 2371 u_buffer_objfwd c-src/emacs/src/lisp.h 2373 +UCHAR c-src/emacs/src/lisp.h 2424 +_UCHAR_T c-src/emacs/src/lisp.h 2423 +U_CHAR y-src/cccp.y 38 +u c-src/emacs/src/lisp.h 2397 +/udieresis ps-src/rfc1245.ps /^\/udieresis \/dagger \/.notdef \/cent \/sterling \/secti/ u_finalizer c-src/emacs/src/lisp.h 2219 u_free c-src/emacs/src/lisp.h 2215 u_intfwd c-src/emacs/src/lisp.h 2370 u_kboard_objfwd c-src/emacs/src/lisp.h 2374 u_marker c-src/emacs/src/lisp.h 2216 -u_objfwd c-src/emacs/src/lisp.h 2372 -u_overlay c-src/emacs/src/lisp.h 2217 -u_save_value c-src/emacs/src/lisp.h 2218 unargs tex-src/texinfo.tex /^\\begingroup\\defname {#2}{#1}\\defunargs{#3}\\endgrou/ unargs tex-src/texinfo.tex /^\\defunargs {#2}\\endgroup %$/ unargs tex-src/texinfo.tex /^\\defunargs {#3}\\endgroup %$/ +UNARY y-src/cccp.c 18 unblock_input c-src/emacs/src/keyboard.c /^unblock_input (void)$/ unblock_input_to c-src/emacs/src/keyboard.c /^unblock_input_to (int level)$/ unchar c-src/h.h 99 +UNDEFINED c-src/h.h 118 +UNEVALLED c-src/emacs/src/lisp.h 2834 unexpand-abbrev c-src/abbrev.c /^DEFUN ("unexpand-abbrev", Funexpand_abbrev, Sunexp/ +UNGCPRO c-src/emacs/src/lisp.h 3202 +UNGCPRO c-src/emacs/src/lisp.h 3257 +UNGCPRO c-src/emacs/src/lisp.h 3353 unheader tex-src/texinfo.tex /^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/ univ merc-src/accumulator.m /^:- import_module univ.$/ +UNLOCK_ALIGNED_BLOCKS c-src/emacs/src/gmalloc.c /^#define UNLOCK_ALIGNED_BLOCKS() \\$/ +UNLOCK_ALIGNED_BLOCKS c-src/emacs/src/gmalloc.c /^#define UNLOCK_ALIGNED_BLOCKS()$/ +UNLOCK c-src/emacs/src/gmalloc.c /^#define UNLOCK() \\$/ +UNLOCK c-src/emacs/src/gmalloc.c /^#define UNLOCK()$/ +Unlock/p ada-src/2ataspri.adb /^ procedure Unlock (L : in out Lock) is$/ +Unlock/p ada-src/2ataspri.ads /^ procedure Unlock (L : in out Lock);$/ unnchfopen tex-src/texinfo.tex /^\\def\\unnchfopen #1{%$/ unnchfplain tex-src/texinfo.tex /^\\def\\unnchfplain #1{%$/ -unnumbchapentry tex-src/texinfo.tex /^ \\let\\unnumbchapentry = \\shortunnumberedentry/ unnumbchapentry tex-src/texinfo.tex /^\\def\\unnumbchapentry#1#2{\\dochapentry{#1}{#2}}$/ +unnumbchapentry tex-src/texinfo.tex /^ \\let\\unnumbchapentry = \\shortunnumberedentry/ unnumbchapmacro tex-src/texinfo.tex /^\\global\\let\\unnumbchapmacro=\\unnchfopen}$/ unnumbchapmacro tex-src/texinfo.tex /^\\global\\let\\unnumbchapmacro=\\unnchfplain}$/ -unnumbered tex-src/texinfo.tex /^\\let\\unnumbered=\\relax$/ -unnumbered tex-src/texinfo.tex /^\\outer\\def\\unnumbered{\\parsearg\\unnumberedzzz}$/ unnumberedsec tex-src/texinfo.tex /^\\let\\unnumberedsec=\\relax$/ unnumberedsec tex-src/texinfo.tex /^\\outer\\def\\unnumberedsec{\\parsearg\\unnumberedseczz/ unnumberedsection tex-src/texinfo.tex /^\\let\\unnumberedsection=\\relax$/ @@ -4604,6 +4410,8 @@ unnumberedsubsubsec tex-src/texinfo.tex /^\\let\\unnumberedsubsubsec=\\relax$/ unnumberedsubsubsec tex-src/texinfo.tex /^\\outer\\def\\unnumberedsubsubsec{\\parsearg\\unnumbere/ unnumberedsubsubsection tex-src/texinfo.tex /^\\let\\unnumberedsubsubsection=\\relax$/ unnumberedsubsubseczzz tex-src/texinfo.tex /^\\def\\unnumberedsubsubseczzz #1{\\seccheck{unnumbere/ +unnumbered tex-src/texinfo.tex /^\\let\\unnumbered=\\relax$/ +unnumbered tex-src/texinfo.tex /^\\outer\\def\\unnumbered{\\parsearg\\unnumberedzzz}$/ unnumberedzzz tex-src/texinfo.tex /^\\def\\unnumberedzzz #1{\\seccheck{unnumbered}%$/ unnumbnoderef tex-src/texinfo.tex /^\\def\\unnumbnoderef{\\ifx\\lastnode\\relax\\else$/ unnumbsecentry tex-src/texinfo.tex /^ \\def\\unnumbsecentry ##1##2{}$/ @@ -4615,66 +4423,104 @@ unnumbsubsubsecentry tex-src/texinfo.tex /^ \\def\\unnumbsubsubsecentry ##1 unnumbsubsubsecentry tex-src/texinfo.tex /^\\def\\unnumbsubsubsecentry#1#2{\\dosubsubsecentry{#1/ unravel_univ merc-src/accumulator.m /^:- some [T] pred unravel_univ(univ::in, T::out) is/ unread_switch_frame c-src/emacs/src/keyboard.c 204 +UNSIGNED_CMP c-src/emacs/src/lisp.h /^#define UNSIGNED_CMP(a, op, b) \\$/ unsignedp y-src/cccp.y 112 unwind c-src/emacs/src/lisp.h 2962 unwind_int c-src/emacs/src/lisp.h 2972 unwind_ptr c-src/emacs/src/lisp.h 2967 unwind_void c-src/emacs/src/lisp.h 2976 unx\defunheader tex-src/texinfo.tex /^\\def\\defun{\\defparsebody\\Edefun\\defunx\\defunheader/ +u_objfwd c-src/emacs/src/lisp.h 2372 +u_overlay c-src/emacs/src/lisp.h 2217 +__up c.c 160 update_accumulator_pred merc-src/accumulator.m /^:- pred update_accumulator_pred(pred_id::in, proc_/ uppercaseenumerate tex-src/texinfo.tex /^\\def\\uppercaseenumerate{%$/ uprintmax_t c-src/emacs/src/lisp.h 149 uprintmax_t c-src/emacs/src/lisp.h 154 +/U ps-src/rfc1245.ps /^\/U { $/ usage perl-src/yagrip.pl /^sub usage {$/ +u_save_value c-src/emacs/src/lisp.h 2218 usecharno c-src/etags.c 210 used c-src/emacs/src/regex.h 347 used_syntax c-src/emacs/src/regex.h 398 +USE_LSB_TAG c-src/emacs/src/lisp.h 271 +USE_LSB_TAG c-src/emacs/src/lisp.h /^DEFINE_GDB_SYMBOL_BEGIN (bool, USE_LSB_TAG)$/ +USE_PTHREAD c-src/emacs/src/gmalloc.c 25 user_cmp_function c-src/emacs/src/lisp.h 1814 +UserEdit pyt-src/server.py /^class UserEdit(Frame):$/ user_error c-src/emacs/src/keyboard.c /^user_error (const char *msg)$/ user_hash_function c-src/emacs/src/lisp.h 1811 +User pyt-src/server.py /^class User:$/ user_signal_info c-src/emacs/src/keyboard.c 7235 user_signals c-src/emacs/src/keyboard.c 7250 +USE_SAFE_ALLOCA c-src/emacs/src/lisp.h 4560 +USE_STACK_CONS c-src/emacs/src/lisp.h 4689 +USE_STACK_LISP_OBJECTS c-src/emacs/src/lisp.h 4652 +USE_STACK_LISP_OBJECTS c-src/emacs/src/lisp.h 4658 +USE_STACK_LISP_OBJECTS c-src/emacs/src/lisp.h 4659 +USE_STACK_STRING c-src/emacs/src/lisp.h 4691 usfreelock_ptr/t ada-src/etags-test-for.ada /^ type usfreelock_ptr is access$/ +Vabbrev_start_location_buffer c-src/abbrev.c 66 +Vabbrev_start_location c-src/abbrev.c 63 +Vabbrev_table_name_list c-src/abbrev.c 43 +VALBITS c-src/emacs/src/lisp.h 246 +valcell c-src/emacs/src/lisp.h 2357 val c-src/emacs/src/lisp.h 3027 val c-src/emacs/src/lisp.h 691 val c-src/getopt.h 84 -val prol-src/natded.prolog /^val(X) --> ['['], valseq(X), [']'].$/ -valcell c-src/emacs/src/lisp.h 2357 +validate php-src/lce_functions.php /^ function validate($value)$/ valid c-src/etags.c 220 valid c-src/etags.c 2502 -validate php-src/lce_functions.php /^ function validate($value)$/ valloc c-src/emacs/src/gmalloc.c /^valloc (size_t size)$/ +VALMASK c-src/emacs/src/lisp.h 829 +VALMASK c-src/emacs/src/lisp.h /^DEFINE_GDB_SYMBOL_BEGIN (EMACS_INT, VALMASK)$/ +VAL_MAX c-src/emacs/src/lisp.h 263 +val prol-src/natded.prolog /^val(X) --> ['['], valseq(X), [']'].$/ valseq prol-src/natded.prolog /^valseq([Val|Vals]) --> val(Val), plusvalseq(Vals)./ +ValToNmStr pas-src/common.pas /^function ValToNmStr; (*($/ value c-src/emacs/src/lisp.h 687 value y-src/cccp.y 112 -var c-src/emacs/src/keyboard.c 11023 -var c-src/emacs/src/lisp.h 3137 -var tex-src/texinfo.tex /^\\def\\var##1{\\realbackslash var {##1}}$/ -var tex-src/texinfo.tex /^\\def\\var##1{\\realbackslash var {##1}}%$/ -var tex-src/texinfo.tex /^\\let\\var=\\indexdummyfont$/ -var tex-src/texinfo.tex /^\\let\\var=\\smartitalic$/ varargs tex-src/texinfo.tex /^\\begingroup\\defname {#2}{#1}\\defvarargs{#3}\\endgro/ varargs tex-src/texinfo.tex /^\\def\\deftpargs #1{\\bf \\defvarargs{#1}}$/ varargs tex-src/texinfo.tex /^\\defvarargs {#2}\\endgroup %$/ varargs tex-src/texinfo.tex /^\\defvarargs {#3}\\endgroup %$/ +var c-src/emacs/src/keyboard.c 11023 +var c-src/emacs/src/lisp.h 3137 varheader tex-src/texinfo.tex /^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/ varparsebody\Edefopt tex-src/texinfo.tex /^\\def\\defopt{\\defvarparsebody\\Edefopt\\defoptx\\defop/ varparsebody\Edeftypevar tex-src/texinfo.tex /^\\def\\deftypevar{\\defvarparsebody\\Edeftypevar\\defty/ varparsebody\Edefvar tex-src/texinfo.tex /^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/ varset merc-src/accumulator.m /^:- import_module varset.$/ +var tex-src/texinfo.tex /^\\def\\var##1{\\realbackslash var {##1}}%$/ +var tex-src/texinfo.tex /^\\def\\var##1{\\realbackslash var {##1}}$/ +var tex-src/texinfo.tex /^\\let\\var=\\indexdummyfont$/ +var tex-src/texinfo.tex /^\\let\\var=\\smartitalic$/ varx\defvarheader tex-src/texinfo.tex /^\\def\\defvar{\\defvarparsebody\\Edefvar\\defvarx\\defva/ vcopy c-src/emacs/src/lisp.h /^vcopy (Lisp_Object v, ptrdiff_t offset, Lisp_Objec/ +VECSIZE c-src/emacs/src/lisp.h /^#define VECSIZE(type) \\$/ vectorlike_header c-src/emacs/src/lisp.h 1343 +VECTORLIKEP c-src/emacs/src/lisp.h /^# define VECTORLIKEP(x) lisp_h_VECTORLIKEP (x)$/ +VECTORP c-src/emacs/src/lisp.h /^VECTORP (Lisp_Object x)$/ verde cp-src/c.C 40 -verify-tags-table-function el-src/emacs/lisp/progmodes/etags.el /^(defvar verify-tags-table-function nil$/ verify_ascii c-src/emacs/src/lisp.h /^# define verify_ascii(str) (str)$/ +verify-tags-table-function el-src/emacs/lisp/progmodes/etags.el /^(defvar verify-tags-table-function nil$/ +VERSION c-src/etags.c 789 +VERSION erl-src/gs_dialog.erl /^-define(VERSION, '2001.1101').$/ +VERSION objc-src/PackInsp.m 34 +Vfundamental_mode_abbrev_table c-src/abbrev.c 52 +Vglobal_abbrev_table c-src/abbrev.c 48 +VHDLFLAGS make-src/Makefile /^VHDLFLAGS=--language=none --regex='\/[ \\t]*\\(ARCHIT/ vignore c-src/etags.c 2417 vindex tex-src/texinfo.tex /^\\def\\vindex {\\vrindex}$/ -visit-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun visit-tags-table (file &optional local)$/ visit-tags-table-buffer el-src/emacs/lisp/progmodes/etags.el /^(defun visit-tags-table-buffer (&optional cont)$/ +visit-tags-table el-src/emacs/lisp/progmodes/etags.el /^(defun visit-tags-table (file &optional local)$/ +Vlast_abbrev c-src/abbrev.c 70 +Vlast_abbrev_text c-src/abbrev.c 75 +Vlispy_mouse_stem c-src/emacs/src/keyboard.c 5172 void c-src/emacs/src/lisp.h /^INLINE void (check_cons_list) (void) { lisp_h_chec/ voidfuncptr c-src/emacs/src/lisp.h 2108 voidval y-src/cccp.y 115 +/V ps-src/rfc1245.ps /^\/V { $/ vrheader tex-src/texinfo.tex /^\\def\\defvr{\\defvrparsebody\\Edefvr\\defvrx\\defvrhead/ vritemindex tex-src/texinfo.tex /^\\def\\vritemindex #1{\\doind {vr}{\\code{#1}}}%$/ vrparsebody\Edefivar tex-src/texinfo.tex /^\\def\\defivar{\\defvrparsebody\\Edefivar\\defivarx\\def/ @@ -4684,49 +4530,80 @@ vrparsebody\Edefvr tex-src/texinfo.tex /^\\def\\defvr{\\defvrparsebody\\Edefvr\\ vrx\defvrheader tex-src/texinfo.tex /^\\def\\defvr{\\defvrparsebody\\Edefvr\\defvrx\\defvrhead/ vtable tex-src/texinfo.tex /^\\def\\vtable{\\begingroup\\inENV\\obeylines\\obeyspaces/ vtablex tex-src/texinfo.tex /^\\gdef\\vtablex #1^^M{%$/ -w tex-src/texinfo.tex /^\\def\\w#1{\\leavevmode\\hbox{#1}}$/ -w tex-src/texinfo.tex /^\\def\\w{\\realbackslash w }%$/ -w tex-src/texinfo.tex /^\\def\\w{\\realbackslash w}$/ -w tex-src/texinfo.tex /^\\let\\w=\\indexdummyfont$/ -wait_status_ptr_t c.c 161 waiting_for_input c-src/emacs/src/keyboard.c 150 +WAIT_READING_MAX c-src/emacs/src/lisp.h 4281 +WAIT_READING_MAX c-src/emacs/src/lisp.h 4283 +wait_status_ptr_t c.c 161 +WARNINGS make-src/Makefile /^WARNINGS=-pedantic -Wall -Wpointer-arith -Winline / warning y-src/cccp.y /^warning (msg)$/ -weak c-src/emacs/src/lisp.h 1830 +/wbytes ps-src/rfc1245.ps /^\/wbytes { $/ +WCHAR_TYPE_SIZE y-src/cccp.y 99 weak_alias c-src/emacs/src/gmalloc.c /^weak_alias (free, cfree)$/ +weak c-src/emacs/src/lisp.h 1830 web ftp publish make-src/Makefile /^web ftp publish:$/ what c-src/etags.c 252 wheel_syms c-src/emacs/src/keyboard.c 4628 +where cp-src/clheir.hpp 77 where c-src/emacs/src/lisp.h 2348 where c-src/emacs/src/lisp.h 2980 -where cp-src/clheir.hpp 77 where_in_registry cp-src/clheir.hpp 15 +WHITE cp-src/screen.hpp 27 +/wh ps-src/rfc1245.ps /^\/wh { $/ +WINDOW_CONFIGURATIONP c-src/emacs/src/lisp.h /^WINDOW_CONFIGURATIONP (Lisp_Object a)$/ +WINDOWP c-src/emacs/src/lisp.h /^WINDOWP (Lisp_Object a)$/ +WINDOWSNT c-src/etags.c 101 +WINDOWSNT c-src/etags.c 102 windowWillClose objcpp-src/SimpleCalc.M /^- windowWillClose:sender$/ wipe_kboard c-src/emacs/src/keyboard.c /^wipe_kboard (KBOARD *kb)$/ womboid c-src/h.h 63 womboid c-src/h.h 75 word_size c-src/emacs/src/lisp.h 1473 -write php-src/lce_functions.php /^ function write($save="yes")$/ -write php-src/lce_functions.php /^ function write()$/ +WorkingDays cp-src/functions.cpp /^int WorkingDays(Date a, Date b){$/ +WORKING objc-src/PackInsp.m 368 +/W ps-src/rfc1245.ps /^\/W { $/ write1= ruby-src/test1.ru /^ attr_reader :read1 , :read2; attr_writer :writ/ write2= ruby-src/test1.ru /^ attr_reader :read1 , :read2; attr_writer :writ/ write_abbrev c-src/abbrev.c /^write_abbrev (sym, stream)$/ -write_classname c-src/etags.c /^write_classname (linebuffer *cn, const char *quali/ -write_lex prol-src/natded.prolog /^write_lex(File):-$/ -write_lex_cat prol-src/natded.prolog /^write_lex_cat(File):-$/ -write_xyc cp-src/screen.cpp /^void write_xyc(int x, int y, char c)$/ -writebreak prol-src/natded.prolog /^writebreak([]).$/ writebreaklex prol-src/natded.prolog /^writebreaklex([]).$/ +writebreak prol-src/natded.prolog /^writebreak([]).$/ writecat prol-src/natded.prolog /^writecat(np(ind(sng),nm(_)),np,[],[]):-!.$/ +write_classname c-src/etags.c /^write_classname (linebuffer *cn, const char *quali/ +write_lex_cat prol-src/natded.prolog /^write_lex_cat(File):-$/ +write_lex prol-src/natded.prolog /^write_lex(File):-$/ writelist prol-src/natded.prolog /^writelist([der(Ws)|Ws2]):-$/ writelistsubs prol-src/natded.prolog /^writelistsubs([],X):-$/ +Write_Lock/p ada-src/2ataspri.adb /^ procedure Write_Lock (L : in out Lock; Ceiling_/ +Write_Lock/p ada-src/2ataspri.ads /^ procedure Write_Lock (L : in out Lock; Ceiling_/ writenamestring pas-src/common.pas /^procedure writenamestring;(*($/ +write php-src/lce_functions.php /^ function write()$/ +write php-src/lce_functions.php /^ function write($save="yes")$/ writesubs prol-src/natded.prolog /^writesubs([]).$/ writesups prol-src/natded.prolog /^writesups([]).$/ +write_xyc cp-src/screen.cpp /^void write_xyc(int x, int y, char c)$/ written c-src/etags.c 211 +w tex-src/texinfo.tex /^\\def\\w#1{\\leavevmode\\hbox{#1}}$/ +w tex-src/texinfo.tex /^\\def\\w{\\realbackslash w }%$/ +w tex-src/texinfo.tex /^\\def\\w{\\realbackslash w}$/ +w tex-src/texinfo.tex /^\\let\\w=\\indexdummyfont$/ +XBOOL_VECTOR c-src/emacs/src/lisp.h /^XBOOL_VECTOR (Lisp_Object a)$/ +XBUFFER c-src/emacs/src/lisp.h /^XBUFFER (Lisp_Object a)$/ +XBUFFER_OBJFWD c-src/emacs/src/lisp.h /^XBUFFER_OBJFWD (union Lisp_Fwd *a)$/ +xcar_addr c-src/emacs/src/lisp.h /^xcar_addr (Lisp_Object c)$/ +XCAR c-src/emacs/src/lisp.h /^# define XCAR(c) lisp_h_XCAR (c)$/ x c.c 153 x c.c 179 x c.c 188 x c.c 189 +xcdr_addr c-src/emacs/src/lisp.h /^xcdr_addr (Lisp_Object c)$/ +XCDR c-src/emacs/src/lisp.h /^# define XCDR(c) lisp_h_XCDR (c)$/ +XCHAR_TABLE c-src/emacs/src/lisp.h /^XCHAR_TABLE (Lisp_Object a)$/ +XCHG_0 c-src/sysdep.h 47 +XCHG_1 c-src/sysdep.h 48 +XCHG_2 c-src/sysdep.h 49 +XCHG_3 c-src/sysdep.h 50 +XCHG_4 c-src/sysdep.h 51 +XCHG_5 c-src/sysdep.h 52 +XCONS c-src/emacs/src/lisp.h /^# define XCONS(a) lisp_h_XCONS (a)$/ x cp-src/c.C 53 x cp-src/c.C 80 x cp-src/clheir.hpp 49 @@ -4734,90 +4611,226 @@ x cp-src/clheir.hpp 58 x cp-src/conway.hpp 7 x cp-src/fail.C 10 x cp-src/fail.C 44 -x tex-src/texinfo.tex /^\\refx{#1-snt}{} [\\printednodename], page\\tie\\refx{/ -x-get-selection-internal c.c /^ Fx_get_selection_internal, Sx_get_selection/ -x-get-selection-internal c.c /^DEFUN ("x-get-selection-internal", Fx_get_selectio/ -xcar_addr c-src/emacs/src/lisp.h /^xcar_addr (Lisp_Object c)$/ -xcdr_addr c-src/emacs/src/lisp.h /^xcdr_addr (Lisp_Object c)$/ +X c-src/h.h 100 +XDEFUN c.c /^XDEFUN ("x-get-selection-internal", Fx_get_selecti/ xdiff make-src/Makefile /^xdiff: ETAGS EXTAGS ${infiles}$/ -xitem tex-src/texinfo.tex /^\\def\\xitem{\\errmessage{@xitem while not in a table/ -xitem tex-src/texinfo.tex /^\\let\\xitem = \\internalBxitem %$/ +XFASTINT c-src/emacs/src/lisp.h /^# define XFASTINT(a) lisp_h_XFASTINT (a)$/ +XFASTINT c-src/emacs/src/lisp.h /^XFASTINT (Lisp_Object a)$/ +XFINALIZER c-src/emacs/src/lisp.h /^XFINALIZER (Lisp_Object a)$/ +XFLOAT c-src/emacs/src/lisp.h /^XFLOAT (Lisp_Object a)$/ +XFLOAT_DATA c-src/emacs/src/lisp.h /^XFLOAT_DATA (Lisp_Object f)$/ +XFLOATINT c-src/emacs/src/lisp.h /^XFLOATINT (Lisp_Object n)$/ +XFWDTYPE c-src/emacs/src/lisp.h /^XFWDTYPE (union Lisp_Fwd *a)$/ +x-get-selection-internal c.c /^DEFUN ("x-get-selection-internal", Fx_get_selectio/ +x-get-selection-internal c.c /^ Fx_get_selection_internal, Sx_get_selection/ +XHASH c-src/emacs/src/lisp.h /^# define XHASH(a) lisp_h_XHASH (a)$/ +XHASH_TABLE c-src/emacs/src/lisp.h /^XHASH_TABLE (Lisp_Object a)$/ +XIL c-src/emacs/src/lisp.h /^# define XIL(i) lisp_h_XIL (i)$/ +XINT c-src/emacs/src/lisp.h /^# define XINT(a) lisp_h_XINT (a)$/ +XINT c-src/emacs/src/lisp.h /^XINT (Lisp_Object a)$/ +XINTPTR c-src/emacs/src/lisp.h /^XINTPTR (Lisp_Object a)$/ xitemsubtopix tex-src/texinfo.tex /^\\def\\internalBxitem "#1"{\\def\\xitemsubtopix{#1} \\s/ xitemsubtopix tex-src/texinfo.tex /^\\def\\internalBxitemx "#1"{\\def\\xitemsubtopix{#1} \\/ +xitem tex-src/texinfo.tex /^\\def\\xitem{\\errmessage{@xitem while not in a table/ +xitem tex-src/texinfo.tex /^\\let\\xitem = \\internalBxitem %$/ xitemx tex-src/texinfo.tex /^\\def\\xitemx{\\errmessage{@xitemx while not in a tab/ xitemx tex-src/texinfo.tex /^\\let\\xitemx = \\internalBxitemx %$/ xitemzzz tex-src/texinfo.tex /^\\def\\xitemzzz #1{\\dosubind {kw}{\\code{#1}}{for {\\b/ xkey tex-src/texinfo.tex /^\\def\\xkey{\\key}$/ +XLI_BUILTIN_LISPSYM c-src/emacs/src/lisp.h /^#define XLI_BUILTIN_LISPSYM(iname) TAG_SYMOFFSET (/ +XLI c-src/emacs/src/lisp.h /^# define XLI(o) lisp_h_XLI (o)$/ xmalloc c-src/etags.c /^xmalloc (size_t size)$/ +XMARKER c-src/emacs/src/lisp.h /^XMARKER (Lisp_Object a)$/ +XMISCANY c-src/emacs/src/lisp.h /^XMISCANY (Lisp_Object a)$/ +XMISC c-src/emacs/src/lisp.h /^XMISC (Lisp_Object a)$/ +XMISCTYPE c-src/emacs/src/lisp.h /^XMISCTYPE (Lisp_Object a)$/ xnew c-src/etags.c /^#define xnew(n, Type) ((Type *) xmalloc ((n) / +XOVERLAY c-src/emacs/src/lisp.h /^XOVERLAY (Lisp_Object a)$/ +XPNTR c-src/emacs/src/lisp.h /^# define XPNTR(a) lisp_h_XPNTR (a)$/ +XPROCESS c-src/emacs/src/lisp.h /^XPROCESS (Lisp_Object a)$/ +/X ps-src/rfc1245.ps /^\/X { $/ xrdef tex-src/texinfo.tex /^\\def\\xrdef #1#2{$/ xrealloc c-src/etags.c /^xrealloc (void *ptr, size_t size)$/ -xref tex-src/texinfo.tex /^\\def\\xref#1{See \\xrefX[#1,,,,,,,]}$/ xref-etags-location el-src/emacs/lisp/progmodes/etags.el /^(defclass xref-etags-location (xref-location)$/ xref-location-line el-src/emacs/lisp/progmodes/etags.el /^(cl-defmethod xref-location-line ((l xref-etags-lo/ xref-location-marker el-src/emacs/lisp/progmodes/etags.el /^(cl-defmethod xref-location-marker ((l xref-etags-/ xref-make-etags-location el-src/emacs/lisp/progmodes/etags.el /^(defun xref-make-etags-location (tag-info file)$/ -xrefX tex-src/texinfo.tex /^\\def\\xrefX[#1,#2,#3,#4,#5,#6]{\\begingroup%$/ +xref tex-src/texinfo.tex /^\\def\\xref#1{See \\xrefX[#1,,,,,,,]}$/ xreftie tex-src/texinfo.tex /^\\gdef\\xreftie{'tie}$/ +xrefX tex-src/texinfo.tex /^\\def\\xrefX[#1,#2,#3,#4,#5,#6]{\\begingroup%$/ xrnew c-src/etags.c /^#define xrnew(op, n, Type) ((op) = (Type *) xreall/ +XSAVE_FUNCPOINTER c-src/emacs/src/lisp.h /^XSAVE_FUNCPOINTER (Lisp_Object obj, int n)$/ +XSAVE_INTEGER c-src/emacs/src/lisp.h /^XSAVE_INTEGER (Lisp_Object obj, int n)$/ +XSAVE_OBJECT c-src/emacs/src/lisp.h /^XSAVE_OBJECT (Lisp_Object obj, int n)$/ +XSAVE_POINTER c-src/emacs/src/lisp.h /^XSAVE_POINTER (Lisp_Object obj, int n)$/ +XSAVE_VALUE c-src/emacs/src/lisp.h /^XSAVE_VALUE (Lisp_Object a)$/ +XSETBOOL_VECTOR c-src/emacs/src/lisp.h /^#define XSETBOOL_VECTOR(a, b) (XSETPSEUDOVECTOR (a/ +XSETBUFFER c-src/emacs/src/lisp.h /^#define XSETBUFFER(a, b) (XSETPSEUDOVECTOR (a, b, / +XSETCDR c-src/emacs/src/lisp.h /^XSETCDR (Lisp_Object c, Lisp_Object n)$/ +XSETCHAR_TABLE c-src/emacs/src/lisp.h /^#define XSETCHAR_TABLE(a, b) (XSETPSEUDOVECTOR (a,/ +XSETCOMPILED c-src/emacs/src/lisp.h /^#define XSETCOMPILED(a, b) (XSETPSEUDOVECTOR (a, b/ +XSETCONS c-src/emacs/src/lisp.h /^#define XSETCONS(a, b) ((a) = make_lisp_ptr (b, Li/ +XSETFASTINT c-src/emacs/src/lisp.h /^#define XSETFASTINT(a, b) ((a) = make_natnum (b))$/ +XSETFLOAT c-src/emacs/src/lisp.h /^#define XSETFLOAT(a, b) ((a) = make_lisp_ptr (b, L/ +XSET_HASH_TABLE c-src/emacs/src/lisp.h /^#define XSET_HASH_TABLE(VAR, PTR) \\$/ +XSETINT c-src/emacs/src/lisp.h /^#define XSETINT(a, b) ((a) = make_number (b))$/ +XSETMISC c-src/emacs/src/lisp.h /^#define XSETMISC(a, b) ((a) = make_lisp_ptr (b, Li/ +XSETPROCESS c-src/emacs/src/lisp.h /^#define XSETPROCESS(a, b) (XSETPSEUDOVECTOR (a, b,/ +XSETPSEUDOVECTOR c-src/emacs/src/lisp.h /^#define XSETPSEUDOVECTOR(a, b, code) \\$/ +XSETPVECTYPE c-src/emacs/src/lisp.h /^#define XSETPVECTYPE(v, code) \\$/ +XSETPVECTYPESIZE c-src/emacs/src/lisp.h /^#define XSETPVECTYPESIZE(v, code, lispsize, restsi/ +XSETSTRING c-src/emacs/src/lisp.h /^#define XSETSTRING(a, b) ((a) = make_lisp_ptr (b, / +XSETSUB_CHAR_TABLE c-src/emacs/src/lisp.h /^#define XSETSUB_CHAR_TABLE(a, b) (XSETPSEUDOVECTOR/ +XSETSUBR c-src/emacs/src/lisp.h /^#define XSETSUBR(a, b) (XSETPSEUDOVECTOR (a, b, PV/ +XSETSYMBOL c-src/emacs/src/lisp.h /^#define XSETSYMBOL(a, b) ((a) = make_lisp_symbol (/ +XSETTERMINAL c-src/emacs/src/lisp.h /^#define XSETTERMINAL(a, b) (XSETPSEUDOVECTOR (a, b/ +XSETTYPED_PSEUDOVECTOR c-src/emacs/src/lisp.h /^#define XSETTYPED_PSEUDOVECTOR(a, b, size, code) / +XSETVECTOR c-src/emacs/src/lisp.h /^#define XSETVECTOR(a, b) ((a) = make_lisp_ptr (b, / +XSETWINDOW_CONFIGURATION c-src/emacs/src/lisp.h /^#define XSETWINDOW_CONFIGURATION(a, b) \\$/ +XSETWINDOW c-src/emacs/src/lisp.h /^#define XSETWINDOW(a, b) (XSETPSEUDOVECTOR (a, b, / +XSTRING c-src/emacs/src/lisp.h /^XSTRING (Lisp_Object a)$/ +XSUB_CHAR_TABLE c-src/emacs/src/lisp.h /^XSUB_CHAR_TABLE (Lisp_Object a)$/ +XSUBR c-src/emacs/src/lisp.h /^XSUBR (Lisp_Object a)$/ +XSYMBOL c-src/emacs/src/lisp.h /^# define XSYMBOL(a) lisp_h_XSYMBOL (a)$/ +XSYMBOL c-src/emacs/src/lisp.h /^XSYMBOL (Lisp_Object a)$/ +XTERMINAL c-src/emacs/src/lisp.h /^XTERMINAL (Lisp_Object a)$/ +x tex-src/texinfo.tex /^\\refx{#1-snt}{} [\\printednodename], page\\tie\\refx{/ +XTYPE c-src/emacs/src/lisp.h /^# define XTYPE(a) lisp_h_XTYPE (a)$/ +XTYPE c-src/emacs/src/lisp.h /^XTYPE (Lisp_Object a)$/ +XUNTAG c-src/emacs/src/lisp.h /^# define XUNTAG(a, type) lisp_h_XUNTAG (a, type)$/ +XUNTAG c-src/emacs/src/lisp.h /^XUNTAG (Lisp_Object a, int type)$/ +XWINDOW c-src/emacs/src/lisp.h /^XWINDOW (Lisp_Object a)$/ +XX cp-src/x.cc 1 xx make-src/Makefile /^xx="this line is here because of a fontlock bug$/ xyz ruby-src/test1.ru /^ alias_method :xyz,$/ +Xyzzy ruby-src/test1.ru 13 +YACC c-src/etags.c 2199 +Yacc_entries c-src/etags.c /^Yacc_entries (FILE *inf)$/ +Yacc_help c-src/etags.c 693 +Yacc_suffixes c-src/etags.c 691 +Yappendixletterandtype tex-src/texinfo.tex /^\\def\\Yappendixletterandtype{%$/ y cp-src/clheir.hpp 49 y cp-src/clheir.hpp 58 y cp-src/conway.hpp 7 +Y c-src/h.h 100 +YELLOW cp-src/screen.hpp 26 +/yen ps-src/rfc1245.ps /^\/yen \/.notdef \/.notdef \/.notdef \/.notdef \/.notdef / y-get-selection-internal c.c /^ Fy_get_selection_internal, Sy_get_selection_/ -yyalloc /usr/share/bison/bison.simple 83 +Ynothing tex-src/texinfo.tex /^\\def\\Ynothing{}$/ +Ypagenumber tex-src/texinfo.tex /^\\def\\Ypagenumber{\\folio}$/ +/Y ps-src/rfc1245.ps /^\/Y { $/ +Ysectionnumberandtype tex-src/texinfo.tex /^\\def\\Ysectionnumberandtype{%$/ +YSRC make-src/Makefile /^YSRC=parse.y parse.c atest.y cccp.c cccp.y$/ +Ytitle tex-src/texinfo.tex /^\\def\\Ytitle{\\thischapter}$/ +YYABORT /usr/share/bison/bison.simple 154 +YYACCEPT /usr/share/bison/bison.simple 153 yyalloc /usr/share/bison/bison.simple 84 -yyclearin /usr/share/bison/bison.simple 149 +YYBACKUP /usr/share/bison/bison.simple /^#define YYBACKUP(Token, Value) \\$/ +YYBISON y-src/cccp.c 4 +YYBISON y-src/parse.c 4 yyclearin /usr/share/bison/bison.simple 150 -yydebug /usr/share/bison/bison.simple 237 yydebug /usr/share/bison/bison.simple 238 +YY_DECL_NON_LSP_VARIABLES /usr/share/bison/bison.simple 374 +YY_DECL_VARIABLES /usr/share/bison/bison.simple 385 +YY_DECL_VARIABLES /usr/share/bison/bison.simple 391 +YYDPRINTF /usr/share/bison/bison.simple /^# define YYDPRINTF(Args) \\$/ +YYDPRINTF /usr/share/bison/bison.simple /^# define YYDPRINTF(Args)$/ +YYEMPTY /usr/share/bison/bison.simple 151 +YYEOF /usr/share/bison/bison.simple 152 +YYERRCODE /usr/share/bison/bison.simple 179 yyerrhandle /usr/share/bison/bison.simple 848 yyerrlab1 /usr/share/bison/bison.simple 823 yyerrok /usr/share/bison/bison.simple 148 yyerrok /usr/share/bison/bison.simple 149 +YYERROR /usr/share/bison/bison.simple 155 yyerror y-src/cccp.y /^yyerror (s)$/ yyerrstatus /usr/share/bison/bison.simple 846 +YYFAIL /usr/share/bison/bison.simple 159 +YYFPRINTF /usr/share/bison/bison.simple 226 +YYINITDEPTH /usr/share/bison/bison.simple 245 +YYLEX /usr/share/bison/bison.simple 201 +YYLEX /usr/share/bison/bison.simple 203 +YYLEX /usr/share/bison/bison.simple 207 +YYLEX /usr/share/bison/bison.simple 209 +YYLEX /usr/share/bison/bison.simple 213 yylex y-src/cccp.y /^yylex ()$/ -yyls /usr/share/bison/bison.simple 88 -yyls /usr/share/bison/bison.simple 89 +YYLLOC_DEFAULT /usr/share/bison/bison.simple /^# define YYLLOC_DEFAULT(Current, Rhs, N) \\$/ yylsp /usr/share/bison/bison.simple 748 yylsp /usr/share/bison/bison.simple 921 -yymemcpy /usr/share/bison/bison.simple /^yymemcpy (char *yyto, const char *yyfrom, YYSIZE_T/ +yyls /usr/share/bison/bison.simple 88 +yyls /usr/share/bison/bison.simple 89 +YYMAXDEPTH /usr/share/bison/bison.simple 256 +YYMAXDEPTH /usr/share/bison/bison.simple 260 yymemcpy /usr/share/bison/bison.simple 264 yymemcpy /usr/share/bison/bison.simple 265 +yymemcpy /usr/share/bison/bison.simple /^yymemcpy (char *yyto, const char *yyfrom, YYSIZE_T/ +yynewstate /usr/share/bison/bison.simple 763 +yynewstate /usr/share/bison/bison.simple 925 yyn /usr/share/bison/bison.simple 755 yyn /usr/share/bison/bison.simple 861 yyn /usr/share/bison/bison.simple 895 yyn /usr/share/bison/bison.simple 903 -yynewstate /usr/share/bison/bison.simple 763 -yynewstate /usr/share/bison/bison.simple 925 +YYPARSE_PARAM_ARG /usr/share/bison/bison.simple 351 +YYPARSE_PARAM_ARG /usr/share/bison/bison.simple 354 +YYPARSE_PARAM_ARG /usr/share/bison/bison.simple 358 +YYPARSE_PARAM_DECL /usr/share/bison/bison.simple 352 +YYPARSE_PARAM_DECL /usr/share/bison/bison.simple 355 +YYPARSE_PARAM_DECL /usr/share/bison/bison.simple 359 yyparse /usr/share/bison/bison.simple /^yyparse (YYPARSE_PARAM_ARG)$/ +YYPOPSTACK /usr/share/bison/bison.simple 445 +YYPOPSTACK /usr/share/bison/bison.simple 447 +YYRECOVERING /usr/share/bison/bison.simple /^#define YYRECOVERING() (!!yyerrstatus)$/ yyresult /usr/share/bison/bison.simple 932 yyresult /usr/share/bison/bison.simple 939 yyresult /usr/share/bison/bison.simple 947 yyreturn /usr/share/bison/bison.simple 933 yyreturn /usr/share/bison/bison.simple 940 +YYSIZE_T /usr/share/bison/bison.simple 129 +YYSIZE_T /usr/share/bison/bison.simple 132 +YYSIZE_T /usr/share/bison/bison.simple 137 +YYSIZE_T /usr/share/bison/bison.simple 141 +YYSIZE_T /usr/share/bison/bison.simple 146 +YYSIZE_T /usr/share/bison/bison.simple 52 +YYSIZE_T /usr/share/bison/bison.simple 57 +YYSIZE_T /usr/share/bison/bison.simple 72 +YYSIZE_T /usr/share/bison/bison.simple 76 yyss /usr/share/bison/bison.simple 85 yyss /usr/share/bison/bison.simple 86 +YYSTACK_ALLOC /usr/share/bison/bison.simple 51 +YYSTACK_ALLOC /usr/share/bison/bison.simple 56 +YYSTACK_ALLOC /usr/share/bison/bison.simple 60 +YYSTACK_ALLOC /usr/share/bison/bison.simple 79 +YYSTACK_BYTES /usr/share/bison/bison.simple /^# define YYSTACK_BYTES(N) \\$/ +YYSTACK_FREE /usr/share/bison/bison.simple 80 +YYSTACK_FREE /usr/share/bison/bison.simple /^# define YYSTACK_FREE(Ptr) do { \/* empty *\/; } wh/ +YYSTACK_GAP_MAX /usr/share/bison/bison.simple 94 +YYSTACK_RELOCATE /usr/share/bison/bison.simple 548 +YYSTACK_RELOCATE /usr/share/bison/bison.simple /^# define YYSTACK_RELOCATE(Type, Stack) \\$/ yystate /usr/share/bison/bison.simple 757 yystate /usr/share/bison/bison.simple 761 yystate /usr/share/bison/bison.simple 875 yystate /usr/share/bison/bison.simple 924 -yystpcpy /usr/share/bison/bison.simple /^yystpcpy (char *yydest, const char *yysrc)$/ +YYSTD /usr/share/bison/bison.simple /^# define YYSTD(x) std::x$/ +YYSTD /usr/share/bison/bison.simple /^# define YYSTD(x) x$/ yystpcpy /usr/share/bison/bison.simple 316 yystpcpy /usr/share/bison/bison.simple 317 -yystrlen /usr/share/bison/bison.simple /^yystrlen (const char *yystr)$/ +yystpcpy /usr/share/bison/bison.simple /^yystpcpy (char *yydest, const char *yysrc)$/ yystrlen /usr/share/bison/bison.simple 293 yystrlen /usr/share/bison/bison.simple 294 -yyvs /usr/share/bison/bison.simple 86 -yyvs /usr/share/bison/bison.simple 87 +yystrlen /usr/share/bison/bison.simple /^yystrlen (const char *yystr)$/ +YYSTYPE y-src/parse.y 72 +YYSTYPE y-src/parse.y 73 +YYTERROR /usr/share/bison/bison.simple 178 yyvsp /usr/share/bison/bison.simple 746 yyvsp /usr/share/bison/bison.simple 919 +yyvs /usr/share/bison/bison.simple 86 +yyvs /usr/share/bison/bison.simple 87 z c.c 144 z c.c 164 z cp-src/clheir.hpp 49 z cp-src/clheir.hpp 58 +Z c-src/h.h 100 +/Z ps-src/rfc1245.ps /^\/Z {$/ zzz tex-src/texinfo.tex /^\\def\\infoappendix{\\parsearg\\appendixzzz}$/ zzz tex-src/texinfo.tex /^\\def\\infochapter{\\parsearg\\chapterzzz}$/ zzz tex-src/texinfo.tex /^\\def\\infosection{\\parsearg\\sectionzzz}$/ @@ -4825,16 +4838,3 @@ zzz tex-src/texinfo.tex /^\\def\\infosubsection{\\parsearg\\subsectionzzz}$/ zzz tex-src/texinfo.tex /^\\def\\infosubsubsection{\\parsearg\\subsubsectionzzz}/ zzz tex-src/texinfo.tex /^\\outer\\def\\appendix{\\parsearg\\appendixzzz}$/ zzz tex-src/texinfo.tex /^\\outer\\def\\chapter{\\parsearg\\chapterzzz}$/ -{ tex-src/texinfo.tex /^\\let\\{=\\mylbrace$/ -{ tex-src/texinfo.tex /^\\let\\{=\\ptexlbrace$/ -| tex-src/texinfo.tex /^\\def|{{\\tt \\char '174}}$/ -| tex-src/texinfo.tex /^\\let|=\\normalverticalbar$/ -} tex-src/texinfo.tex /^\\let\\}=\\myrbrace$/ -} tex-src/texinfo.tex /^\\let\\}=\\ptexrbrace$/ -~ tex-src/texinfo.tex /^\\catcode `\\^=7 \\catcode `\\_=8 \\catcode `\\~=13 \\let/ -~ tex-src/texinfo.tex /^\\def~{{\\tt \\char '176}}$/ -~ tex-src/texinfo.tex /^\\let~=\\normaltilde$/ -~A cp-src/c.C /^A::~A() {}$/ -~B cp-src/c.C /^ ~B() {};$/ -~MDiagArray2 cp-src/MDiagArray2.h /^ ~MDiagArray2 (void) { }$/ -~generic_object cp-src/clheir.cpp /^generic_object::~generic_object(void)$/ diff --git a/test/manual/etags/ETAGS.good_1 b/test/manual/etags/ETAGS.good_1 index 1e6550149c4..92eb72523dc 100644 --- a/test/manual/etags/ETAGS.good_1 +++ b/test/manual/etags/ETAGS.good_1 @@ -3103,7 +3103,7 @@ module ModuleExample1,0 def module_instance_method46,1051 def ModuleExample.module_class_methodmodule_class_method49,1131 -ruby-src/test1.ru,935 +ruby-src/test1.ru,998 class A1,0 def a(2,8 def b(5,38 @@ -3133,6 +3133,9 @@ module A9,57 :qux1)qux136,563 alias_method ( :foo2,foo237,586 A::Constant Constant42,655 +class A::C;C47,700 +module A::M;M48,716 +class ::D;D49,733 rs-src/test.rs,52 enum IpAddrKind 3,11 diff --git a/test/manual/etags/ETAGS.good_2 b/test/manual/etags/ETAGS.good_2 index f1613437826..efda990e2eb 100644 --- a/test/manual/etags/ETAGS.good_2 +++ b/test/manual/etags/ETAGS.good_2 @@ -3676,7 +3676,7 @@ module ModuleExample1,0 def module_instance_method46,1051 def ModuleExample.module_class_methodmodule_class_method49,1131 -ruby-src/test1.ru,935 +ruby-src/test1.ru,998 class A1,0 def a(2,8 def b(5,38 @@ -3706,6 +3706,9 @@ module A9,57 :qux1)qux136,563 alias_method ( :foo2,foo237,586 A::Constant Constant42,655 +class A::C;C47,700 +module A::M;M48,716 +class ::D;D49,733 rs-src/test.rs,52 enum IpAddrKind 3,11 diff --git a/test/manual/etags/ETAGS.good_3 b/test/manual/etags/ETAGS.good_3 index 71abe582b7e..34d2fea1765 100644 --- a/test/manual/etags/ETAGS.good_3 +++ b/test/manual/etags/ETAGS.good_3 @@ -3510,7 +3510,7 @@ module ModuleExample1,0 def module_instance_method46,1051 def ModuleExample.module_class_methodmodule_class_method49,1131 -ruby-src/test1.ru,935 +ruby-src/test1.ru,998 class A1,0 def a(2,8 def b(5,38 @@ -3540,6 +3540,9 @@ module A9,57 :qux1)qux136,563 alias_method ( :foo2,foo237,586 A::Constant Constant42,655 +class A::C;C47,700 +module A::M;M48,716 +class ::D;D49,733 rs-src/test.rs,52 enum IpAddrKind 3,11 diff --git a/test/manual/etags/ETAGS.good_4 b/test/manual/etags/ETAGS.good_4 index 56df447fd4b..35417fa5b83 100644 --- a/test/manual/etags/ETAGS.good_4 +++ b/test/manual/etags/ETAGS.good_4 @@ -3265,7 +3265,7 @@ module ModuleExample1,0 def module_instance_method46,1051 def ModuleExample.module_class_methodmodule_class_method49,1131 -ruby-src/test1.ru,935 +ruby-src/test1.ru,998 class A1,0 def a(2,8 def b(5,38 @@ -3295,6 +3295,9 @@ module A9,57 :qux1)qux136,563 alias_method ( :foo2,foo237,586 A::Constant Constant42,655 +class A::C;C47,700 +module A::M;M48,716 +class ::D;D49,733 rs-src/test.rs,52 enum IpAddrKind 3,11 diff --git a/test/manual/etags/ETAGS.good_5 b/test/manual/etags/ETAGS.good_5 index 7375ec3b5b5..405c18abafd 100644 --- a/test/manual/etags/ETAGS.good_5 +++ b/test/manual/etags/ETAGS.good_5 @@ -4245,7 +4245,7 @@ module ModuleExample1,0 def module_instance_method46,1051 def ModuleExample.module_class_methodmodule_class_method49,1131 -ruby-src/test1.ru,935 +ruby-src/test1.ru,998 class A1,0 def a(2,8 def b(5,38 @@ -4275,6 +4275,9 @@ module A9,57 :qux1)qux136,563 alias_method ( :foo2,foo237,586 A::Constant Constant42,655 +class A::C;C47,700 +module A::M;M48,716 +class ::D;D49,733 rs-src/test.rs,52 enum IpAddrKind 3,11 diff --git a/test/manual/etags/ETAGS.good_6 b/test/manual/etags/ETAGS.good_6 index 55f03f4742c..f72b63ded92 100644 --- a/test/manual/etags/ETAGS.good_6 +++ b/test/manual/etags/ETAGS.good_6 @@ -4245,7 +4245,7 @@ module ModuleExample1,0 def module_instance_method46,1051 def ModuleExample.module_class_methodmodule_class_method49,1131 -ruby-src/test1.ru,935 +ruby-src/test1.ru,998 class A1,0 def a(2,8 def b(5,38 @@ -4275,6 +4275,9 @@ module A9,57 :qux1)qux136,563 alias_method ( :foo2,foo237,586 A::Constant Constant42,655 +class A::C;C47,700 +module A::M;M48,716 +class ::D;D49,733 rs-src/test.rs,52 enum IpAddrKind 3,11 diff --git a/test/manual/etags/ETAGS.good_7 b/test/manual/etags/ETAGS.good_7 index 1a6c1455e4c..1e3e4a93bc1 100644 --- a/test/manual/etags/ETAGS.good_7 +++ b/test/manual/etags/ETAGS.good_7 @@ -3085,7 +3085,7 @@ module ModuleExample1,0 def module_instance_method46,1051 def ModuleExample.module_class_methodmodule_class_method49,1131 -ruby-src/test1.ru,935 +ruby-src/test1.ru,998 class A1,0 def a(2,8 def b(5,38 @@ -3115,6 +3115,9 @@ module A9,57 :qux1)qux136,563 alias_method ( :foo2,foo237,586 A::Constant Constant42,655 +class A::C;C47,700 +module A::M;M48,716 +class ::D;D49,733 rs-src/test.rs,52 enum IpAddrKind 3,11 diff --git a/test/manual/etags/README b/test/manual/etags/README index 7bce861030b..f198e584da3 100644 --- a/test/manual/etags/README +++ b/test/manual/etags/README @@ -5,9 +5,9 @@ The input files, which include source files in various languages supported by the programs, are in the *-src/ directories (e.g., c-src for C sources, ada-src for Ada, tex-src for TeX, etc.). -The expected results are slightly different for each of the 7 commands +The expected results are slightly different for each of the 8 commands (see below) run by the test suite, and are on files ETAGS.good_N -(where N is between 1 and 6) and CTAGS.good. +(where N is between 1 and 7) and CTAGS.good. To run the tests, say @@ -48,9 +48,13 @@ corresponding "good" files, one by one. Like this: $ cp ETAGS ETAGS.good_3 ... $ make check - $ cp ETAGS ETAGS.good_6 + $ cp ETAGS ETAGS.good_7 $ make check $ cp CTAGS CTAGS.good + $ make check + $ cp CTAGS CTAGS.good_update + $ make check + $ cp CTAGS CTAGS.good_crlf This uses the fact that "make check" will stop after the first failure, i.e. after the first time 'diff' reports any diffs, and then diff --git a/test/manual/etags/ruby-src/test1.ru b/test/manual/etags/ruby-src/test1.ru index eafaec6248b..27bd84a5902 100644 --- a/test/manual/etags/ruby-src/test1.ru +++ b/test/manual/etags/ruby-src/test1.ru @@ -43,3 +43,7 @@ A::Constant = 5 # def foo_in_comment # end + +class A::C; end +module A::M; end +class ::D; end commit 5039ad24a362d88ac43d79f9fa5a5ba11f0da61b Author: Paul Eggert Date: Wed Apr 2 13:52:30 2025 -0700 Pacify gcc -Wclobbered in Freplace_region_contents * src/editfns.c (Freplace_region_contents): Redo slightly to pacify gcc -Wclobbered, by hoisting the eassume out of SCHARS and into the caller later, where it’ll do more good anyway. diff --git a/src/editfns.c b/src/editfns.c index 25625793c42..ebb308ea796 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -1973,14 +1973,17 @@ a buffer or a string. But this is deprecated. */) Fnarrow_to_region (beg, end); source = calln (source); unbind_to (count, Qnil); - } + } ptrdiff_t min_b, size_b; struct buffer *b; if (STRINGP (source)) { - min_b = BEG; /* Assuming we'll copy it into a buffer. */ - size_b = SCHARS (source); b = NULL; + min_b = BEG; /* Assuming we'll copy it into a buffer. */ + /* Like 'size_b = SCHARS (source);', except inline to pacify -Wclobbered + with gcc 14.2.1 20250110 (Red Hat 14.2.1-7) x86-64 -O2; see + . */ + size_b = XSTRING (source)->u.s.size; } else if (BUFFERP (source)) { @@ -1992,7 +1995,7 @@ a buffer or a string. But this is deprecated. */) { CHECK_TYPE (VECTORP (source), list (Qor, Qstring, Qbuffer, Qvector), source); - /* Let `Faref' signal an error if it's too small. */ + /* Let Faref signal an error if SOURCE is too small. */ Lisp_Object send = Faref (source, make_fixnum (2)); Lisp_Object sbeg = AREF (source, 1); CHECK_BUFFER (AREF (source, 0)); @@ -2005,6 +2008,7 @@ a buffer or a string. But this is deprecated. */) min_b = XFIXNUM (sbeg); size_b = XFIXNUM (send) - min_b; } + eassume (0 <= size_b); bool b_empty = size_b == 0; if (b && !BUFFER_LIVE_P (b)) error ("Selecting deleted buffer"); commit 7cffcbb5137666f1c544e7b0c1a544e2bc660ddd Author: Stefan Monnier Date: Wed Apr 2 15:05:02 2025 -0400 cl-macs.el: Fix minor merge snafu (bug#77348) * lisp/emacs-lisp/cl-macs.el (cl-flet, cl-labels): Recover the changes made in commit 476426168106 and accidentally undone by a later merge of commit 63adf9dcf53a. diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index cc1c6a6a5ad..a966ec5eaf6 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -2072,7 +2072,8 @@ a `let' form, except that the list of symbols can be computed at run-time." Each definition can take the form (FUNC EXP) where FUNC is the function name, and EXP is an expression that returns the function value to which it should be bound, or it can take the more common form (FUNC ARGLIST -BODY...) which is a shorthand for (FUNC (lambda ARGLIST BODY)). +BODY...) which is a shorthand for (FUNC (lambda ARGLIST BODY)) +where BODY is wrapped in a `cl-block' named FUNC. FUNC is defined only within FORM, not BODY, so you can't write recursive function definitions. Use `cl-labels' for that. See Info node @@ -2279,11 +2280,14 @@ Like `cl-flet' but the definitions can refer to previous ones. Each definition can take the form (FUNC EXP) where FUNC is the function name, and EXP is an expression that returns the function value to which it should be bound, or it can take the more common form (FUNC ARGLIST -BODY...) which is a shorthand for (FUNC (lambda ARGLIST BODY)). - -FUNC is defined in any BODY, as well as FORM, so you can write recursive -and mutually recursive function definitions. See Info node -`(cl) Function Bindings' for details. +BODY...) which is a shorthand for (FUNC (lambda ARGLIST BODY)) +where BODY is wrapped in a `cl-block' named FUNC. + +FUNC is in scope in any BODY or EXP, as well as in FORM, so you can write +recursive and mutually recursive function definitions, with the caveat +that EXPs are evaluated in sequence and you cannot call a FUNC before its +EXP has been evaluated. +See Info node `(cl) Function Bindings' for details. \(fn ((FUNC ARGLIST BODY...) ...) FORM...)" (declare (indent 1) (debug cl-flet)) commit df82855aeb0038c810a451272eb34ae88984e8f6 Author: Eli Zaretskii Date: Wed Apr 2 20:25:09 2025 +0300 Fix display of wide characters in display margins on TTY frames * src/xdisp.c (display_line): Remove incomplete glyph sequence of the last multi-column character, if not all of its glyphs fit in the marginal area. (Bug#77452) diff --git a/src/xdisp.c b/src/xdisp.c index 2c676c09827..61c464d0f36 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -25685,7 +25685,7 @@ display_line (struct it *it, int cursor_vpos) /* Now, get the metrics of what we want to display. This also generates glyphs in `row' (which is IT->glyph_row). */ - n_glyphs_before = row->used[TEXT_AREA]; + n_glyphs_before = row->used[it->area]; x = it->current_x; /* Remember the line height so far in case the next element doesn't @@ -25732,6 +25732,7 @@ display_line (struct it *it, int cursor_vpos) the next one. */ if (it->area != TEXT_AREA) { + enum glyph_row_area area = it->area; row->ascent = max (row->ascent, it->max_ascent); row->height = max (row->height, it->max_ascent + it->max_descent); row->phys_ascent = max (row->phys_ascent, it->max_phys_ascent); @@ -25740,6 +25741,17 @@ display_line (struct it *it, int cursor_vpos) row->extra_line_spacing = max (row->extra_line_spacing, it->max_extra_line_spacing); set_iterator_to_next (it, true); + /* TTY frames cannot clip character glyphs that extend past the + end of the marginal areas, so we must do that here "by hand". */ + if (!FRAME_WINDOW_P (it->f) + /* If we exhausted the glyphs of the marginal area... */ + && it->area != area + /* ...and the last character was multi-column... */ + && it->nglyphs > 1 + /* ...and not all of its glyphs fit in the marginal area... */ + && row->used[area] < n_glyphs_before + it->nglyphs) + /* ...then reset back to the previous character. */ + row->used[area] = n_glyphs_before; /* If we didn't handle the line/wrap prefix above, and the call to set_iterator_to_next just switched to TEXT_AREA, process the prefix now. */ commit 1e865a2f2889ecbee06b9eefdd82a4cda04d6eee Author: Michael Albinus Date: Wed Apr 2 18:37:22 2025 +0200 Explain, how to suppress Tramp warnings * doc/misc/tramp.texi (Frequently Asked Questions): Remove double item. (Traces and Profiles): Mention `warning-suppress-types'. (Bug#77422) diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi index 5a2e44456ee..280feb084d1 100644 --- a/doc/misc/tramp.texi +++ b/doc/misc/tramp.texi @@ -6204,17 +6204,6 @@ If these errors can be ignored, set user option non-@code{nil} value. This transforms the error into a warning. -@item -How to ignore errors when changing file attributes? - -@vindex tramp-inhibit-errors-if-setting-file-attributes-fail -Sometimes, for example while saving remote files, errors appear when -changing file attributes like permissions, time stamps, or ownership. -If these errors can be ignored, set user option -@code{tramp-inhibit-errors-if-setting-file-attributes-fail} to a -non-@code{nil} value. This transforms the error into a warning. - - @item How to disable other packages from calling @value{tramp}? @@ -6648,6 +6637,15 @@ the following settings are required: @end group @end lisp +@vindex warning-suppress-types +@value{tramp} warnings are displayed in the @file{*Warnings*} buffer, +which pops up. If you don't want to see this buffer for every +@value{tramp} warning, set @code{warning-suppress-types}: + +@lisp +(setq warning-suppress-types '((tramp))) +@end lisp + If @code{tramp-verbose} is greater than or equal to 10, Lisp backtraces are also added to the @value{tramp} debug buffer in case of errors. commit a9661e643b1235e82b7ba0c9c9c2cd8fa533b5a6 Author: Eli Zaretskii Date: Wed Apr 2 16:12:03 2025 +0300 More thorough fix for image slices on mode/header-line * src/xdisp.c (note_mode_line_or_margin_highlight): Remove correction of DX and DY due to image slices, as this is now done in 'mode_line_string'. * src/dispnew.c (mode_line_string): Make DX and DY account for image slices. (Bug#77429) diff --git a/src/dispnew.c b/src/dispnew.c index 6083a558064..440b1ba83b9 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -6447,7 +6447,11 @@ mode_line_string (struct window *w, enum window_part part, struct image *img; img = IMAGE_OPT_FROM_ID (WINDOW_XFRAME (w), glyph->u.img_id); if (img != NULL) - *object = img->spec; + { + *object = img->spec; + x0 += glyph->slice.img.x; + y0 += glyph->slice.img.y; + } y0 -= row->ascent - glyph->ascent; } #endif diff --git a/src/xdisp.c b/src/xdisp.c index 886f070753f..2c676c09827 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -35864,15 +35864,6 @@ note_mode_line_or_margin_highlight (Lisp_Object window, int x, int y, #ifdef HAVE_WINDOW_SYSTEM if (IMAGEP (object)) { - if (glyph != NULL && glyph->type == IMAGE_GLYPH) - { - struct image *img = IMAGE_OPT_FROM_ID (f, glyph->u.img_id); - if (img != NULL && IMAGEP (img->spec)) - { - dx += glyph->slice.img.x; - dy += glyph->slice.img.y; - } - } Lisp_Object image_map, hotspot; if ((image_map = plist_get (XCDR (object), QCmap), !NILP (image_map)) commit 9cfc01056e1be0fada18b8cfbde6a6a511428edd Author: Mauro Aranda Date: Wed Apr 2 08:10:18 2025 -0300 Fix widget relationship in customize-themes * lisp/cus-theme.el (customize-themes): The theme button should be a sibling of the checkbox widget, not a child. (Bug#77096) diff --git a/lisp/cus-theme.el b/lisp/cus-theme.el index 441270ff63c..41bcc678322 100644 --- a/lisp/cus-theme.el +++ b/lisp/cus-theme.el @@ -654,12 +654,13 @@ Theme files are named *-theme.el in `")) :help-echo help-echo :action #'custom-theme-checkbox-toggle)) (push (cons theme widget) custom--listed-themes) - (widget-create-child-and-convert widget 'push-button - :button-face-get 'ignore - :mouse-face-get 'ignore - :value (format " %s" theme) - :action #'widget-parent-action - :help-echo help-echo) + (widget-create 'push-button + :button-face-get 'ignore + :mouse-face-get 'ignore + :value (format " %s" theme) + :action (lambda (_w &optional event) + (custom-theme-checkbox-toggle widget event)) + :help-echo help-echo) (widget-insert " -- " (propertize (custom-theme-summary theme) 'face 'shadow) commit 71b3298c0e813ba1432e75370c460eea5caf72d5 Author: Stefan Monnier Date: Tue Apr 1 18:06:31 2025 -0400 (custom--standard-value-p): New function * lisp/cus-edit.el (custom-variable-state) (custom-variable-mark-to-reset-standard): Use `custom--standard-value-p`. * lisp/custom.el (custom--standard-value-p): New function. (customize-mark-to-save, custom-push-theme, enable-theme): Use it. * lisp/help-fns.el (describe-variable): Use `custom--standard-value`. Extracted from `customize-mark-to-save` by with `ignore-errors` replaced by `with-demoted-errors`. diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el index ecfce03e490..b260ea5fe95 100644 --- a/lisp/cus-edit.el +++ b/lisp/cus-edit.el @@ -448,11 +448,13 @@ (defvar custom-field-keymap (let ((map (copy-keymap widget-field-keymap))) - (define-key map "\C-c\C-c" 'Custom-set) - (define-key map "\C-x\C-s" 'Custom-save) + (define-key map "\C-c\C-c" #'Custom-set) + (define-key map "\C-x\C-s" #'Custom-save) map) "Keymap used inside editable fields in customization buffers.") +;; FIXME: Doesn't this affect all `editable-field's ever? Why not set +;; the right keymap right away when we (define-widget 'editable-field ...)? (widget-put (get 'editable-field 'widget-type) :keymap custom-field-keymap) ;;; Utilities. @@ -3004,7 +3006,7 @@ Possible return values are `standard', `saved', `set', `themed', (and (equal value (eval (car tmp))) (equal comment temp)) (error nil)) - (if (equal value (eval (car (get symbol 'standard-value)))) + (if (custom--standard-value-p symbol value) 'standard 'set) 'changed)) @@ -3348,8 +3350,8 @@ If `custom-reset-standard-variables-list' is nil, save, reset and redraw the widget immediately." (let* ((symbol (widget-value widget))) (if (get symbol 'standard-value) - (unless (equal (custom-variable-current-value widget) - (eval (car (get symbol 'standard-value)))) + (unless (custom--standard-value-p + symbol (custom-variable-current-value widget)) (custom-variable-backup-value widget)) (user-error "No standard setting known for %S" symbol)) (put symbol 'variable-comment nil) @@ -5176,7 +5178,7 @@ This function does not save the buffer." (defun custom-save-faces () "Save all customized faces in `custom-file'." (save-excursion - (custom-save-delete 'custom-reset-faces) + (custom-save-delete 'custom-reset-faces) ;FIXME: Never written!? (custom-save-delete 'custom-set-faces) (let ((standard-output (current-buffer)) (saved-list (make-list 1 0))) @@ -5336,9 +5338,9 @@ The format is suitable for use with `easy-menu-define'." (defvar tool-bar-map) -;;; `custom-tool-bar-map' used to be set up here. This will fail to -;;; DTRT when `display-graphic-p' returns nil during compilation. Hence -;;; we set this up lazily in `Custom-mode'. +;; `custom-tool-bar-map' used to be set up here. This will fail to +;; DTRT when `display-graphic-p' returns nil during compilation. Hence +;; we set this up lazily in `Custom-mode'. (defvar custom-tool-bar-map nil "Keymap for toolbar in Custom mode.") @@ -5464,7 +5466,7 @@ if that value is non-nil." (make-local-variable 'custom-options) (make-local-variable 'custom-local-buffer) (custom--initialize-widget-variables) - (add-hook 'widget-edit-functions 'custom-state-buffer-message nil t)) + (add-hook 'widget-edit-functions #'custom-state-buffer-message nil t)) (defun custom--revert-buffer (_ignore-auto _noconfirm) (unless custom--invocation-options diff --git a/lisp/custom.el b/lisp/custom.el index d309754ab9b..aa7c9dbc5d5 100644 --- a/lisp/custom.el +++ b/lisp/custom.el @@ -390,9 +390,6 @@ See Info node `(elisp) Customization' in the Emacs Lisp manual for more information." (declare (doc-string 3) (debug (name body)) (indent defun)) - ;; It is better not to use backquote in this file, - ;; because that makes a bootstrapping problem - ;; if you need to recompile all the Lisp files using interpreted code. `(custom-declare-variable ',symbol ,(if lexical-binding @@ -635,7 +632,7 @@ For other custom types, this has no effect." (let ((options (get symbol 'custom-options))) (unless (member option options) (put symbol 'custom-options (cons option options))))) -(defalias 'custom-add-frequent-value 'custom-add-option) +(defalias 'custom-add-frequent-value #'custom-add-option) (defun custom-add-link (symbol widget) "To the custom option SYMBOL add the link WIDGET." @@ -680,6 +677,11 @@ property, or (ii) an alias for another customizable variable." "Return the standard value of VARIABLE." (eval (car (get variable 'standard-value)) t)) +(defun custom--standard-value-p (variable value) + "Return non-nil if VALUE is `equal' to the standard value of VARIABLE." + (let ((sv (get variable 'standard-value))) + (and sv (equal value (eval (with-demoted-errors "%S" (car sv)) t))))) + (defun custom-note-var-changed (variable) "Inform Custom that VARIABLE has been set (changed). VARIABLE is a symbol that names a user option. @@ -777,12 +779,10 @@ Return non-nil if the `saved-value' property actually changed." (let* ((get (or (get symbol 'custom-get) #'default-value)) (value (funcall get symbol)) (saved (get symbol 'saved-value)) - (standard (get symbol 'standard-value)) (comment (get symbol 'customized-variable-comment))) ;; Save default value if different from standard value. (put symbol 'saved-value - (unless (and standard - (equal value (ignore-errors (eval (car standard))))) + (unless (custom--standard-value-p symbol value) (list (custom-quote value)))) ;; Clear customized information (set, but not saved). (put symbol 'customized-value nil) @@ -965,12 +965,11 @@ See `custom-known-themes' for a list of known themes." ;; recompute when the theme is disabled. (when (and (eq prop 'theme-value) (boundp symbol)) - (let ((sv (get symbol 'standard-value)) - (val (symbol-value symbol))) + (let ((val (symbol-value symbol))) (unless (or ;; We only do this trick if the current value ;; is different from the standard value. - (and sv (equal (eval (car sv)) val)) + (custom--standard-value-p symbol val) ;; And we don't do it if we would end up recording ;; the same value for the user theme. This way we avoid ;; having ((user VALUE) (changed VALUE)). That would be @@ -1560,7 +1559,6 @@ After THEME has been enabled, runs `enable-theme-functions'." (let* ((prop (car s)) (symbol (cadr s)) (spec-list (get symbol prop)) - (sv (get symbol 'standard-value)) (val (and (boundp symbol) (symbol-value symbol)))) ;; We can't call `custom-push-theme' when enabling the theme: it's not ;; that the theme settings have changed, it's just that we want to @@ -1575,7 +1573,7 @@ After THEME has been enabled, runs `enable-theme-functions'." (not (or spec-list ;; Only if the current value is different from ;; the standard value. - (and sv (equal (eval (car sv)) val)) + (custom--standard-value-p symbol val) ;; And only if the changed value is different ;; from the new value under the user theme. (and (eq theme 'user) diff --git a/lisp/help-fns.el b/lisp/help-fns.el index dacf1ecbbd4..ee615bfea29 100644 --- a/lisp/help-fns.el +++ b/lisp/help-fns.el @@ -1455,7 +1455,7 @@ it is displayed along with the global value." (let* ((sv (get variable 'standard-value)) (origval (and (consp sv) (condition-case nil - (eval (car sv) t) + (custom--standard-value variable) (error :help-eval-error)))) from) (when (and (consp sv) commit da6da5744b95451bdc3339c3a241892466a08551 Author: Elías Gabriel Pérez Date: Sun Mar 23 21:35:32 2025 -0600 Add 'project-customize-dirlocals' * etc/NEWS: Add command entry. * lisp/menu-bar.el (menu-bar-project-menu): Add command entry to project menu. * lisp/progmodes/project.el (project-customize-dirlocals): New command. (Bug#77229) diff --git a/etc/NEWS b/etc/NEWS index 8c65b195b1a..016b6c590d3 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -362,6 +362,11 @@ docstring for arguments passed to a help-text function. *** New command 'project-root-find-file'. It is equivalent to running ‘project-any-command’ with ‘find-file’. +--- +*** New command 'project-customize-dirlocals'. +It is equivalent to running ‘project-any-command’ with +‘customize-dirlocals’. + --- *** Improved prompt for 'project-switch-project'. The prompt now displays the chosen project on which to invoke a command. diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el index 1685357fab6..6a68ad63a5b 100644 --- a/lisp/menu-bar.el +++ b/lisp/menu-bar.el @@ -1830,6 +1830,7 @@ mail status in mode line")) (define-key menu [project-compile] '(menu-item "Compile..." project-compile :help "Invoke compiler or Make for current project, view errors")) (define-key menu [separator-project-programs] menu-bar-separator) (define-key menu [project-switch-project] '(menu-item "Switch Project..." project-switch-project :help "Switch to another project and then run a command")) + (define-key menu [project-customize-dirlocals] '(menu-item "Customize Directory Local Variables" project-customize-dirlocals :help "Customize current project Directory Local Variables.")) (define-key menu [project-vc-dir] '(menu-item "VC Dir" project-vc-dir :help "Show the VC status of the project repository")) (define-key menu [project-dired] '(menu-item "Open Project Root" project-dired :help "Read the root directory of the current project, to operate on its files")) (define-key menu [project-find-dir] '(menu-item "Open Directory..." project-find-dir :help "Open existing directory that belongs to current project")) diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index e2cd5bfa231..cb0cc038585 100644 --- a/lisp/progmodes/project.el +++ b/lisp/progmodes/project.el @@ -1391,6 +1391,14 @@ The current buffer's `default-directory' is available as part of (interactive) (vc-dir (project-root (project-current t)))) +;;;###autoload +(defun project-customize-dirlocals () + "Run `customize-dirlocals' in current project's root." + (interactive) + (customize-dirlocals + (expand-file-name ".dir-locals.el" + (project-root (project-current t))))) + (declare-function comint-check-proc "comint") ;;;###autoload commit a4ec9ca12969018cdf15b8cc713b3ba054326f99 Author: Stefan Kangas Date: Tue Apr 1 21:25:33 2025 +0200 function-put: signal error with non-symbol * lisp/subr.el (function-get): Signal an error if given a non-symbol for consistency with 'get'. * test/lisp/subr-tests.el (subr-butlast): Test for the above. diff --git a/lisp/subr.el b/lisp/subr.el index 86f5d7698ce..be847aab28a 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -4639,6 +4639,8 @@ If AUTOLOAD is non-nil and F is autoloaded, try to load it in the hope that it will set PROP. If AUTOLOAD is `macro', do it only if it's an autoloaded macro." (declare (important-return-value t)) + (unless (symbolp f) + (signal 'wrong-type-argument (list 'symbolp f))) (let ((val nil)) (while (and (symbolp f) (null (setq val (get f prop))) diff --git a/test/lisp/subr-tests.el b/test/lisp/subr-tests.el index 25f1b3403ca..024cbe85bba 100644 --- a/test/lisp/subr-tests.el +++ b/test/lisp/subr-tests.el @@ -1298,7 +1298,11 @@ final or penultimate step during initialization.")) (should (eq (function-get 'subr-tests--some-fun 'prop) 'value)) ;; With an alias. (should (eq (function-get 'subr-tests--some-alias 'prop) 'value)) - (function-put 'subr-tests--some-alias 'prop 'value)) + (function-put 'subr-tests--some-alias 'prop 'value) + (should-error (function-get "non-symbol" 'prop) + :type 'wrong-type-argument) + (should-error (function-put "non-symbol" 'prop 'val) + :type 'wrong-type-argument)) (function-put 'subr-tests--some-fun 'prop nil))) (defun subr-tests--butlast-ref (list &optional n) commit 87da719b6c4a53a31c67f3a9646b68cb15a1ffe7 Author: Juri Linkov Date: Tue Apr 1 20:17:17 2025 +0300 New treesit generic mode 'liquid-generic-ts-mode' (bug#77255) * lisp/treesit.el (treesit-replace-font-lock-feature-settings): Check the query language in addition to checking the feature. (treesit-font-lock-fontify-region): Use treesit-font-lock-setting-* accessors. * lisp/treesit-x.el (treesit-generic-mode-setup): Append new font-lock rules to an existing treesit-font-lock-settings possibly inherited from the parent. (treesit-generic-mode-setup): Use treesit-merge-font-lock-feature-list to merge with an existing feature list inherited from the parent. (liquid-generic-ts-mode): New treesit generic mode. (alpinejs-generic-ts-setup): New treesit generic setup. diff --git a/lisp/treesit-x.el b/lisp/treesit-x.el index 881e11e4e7a..5989bb89850 100644 --- a/lisp/treesit-x.el +++ b/lisp/treesit-x.el @@ -147,11 +147,15 @@ of `define-treesit-generic-mode'. (when-let* ((query (treesit-generic-mode-font-lock-query lang))) (setq-local treesit-font-lock-settings - (treesit-font-lock-rules - :language lang - :feature 'highlights - query)) - (setq-local treesit-font-lock-feature-list '((highlights)))))) + (append treesit-font-lock-settings + (treesit-font-lock-rules + :language lang + :feature 'highlights + query))) + (setq-local treesit-font-lock-feature-list + (treesit-merge-font-lock-feature-list + treesit-font-lock-feature-list + '((highlights))))))) ;;; Generic font-lock handling @@ -202,6 +206,112 @@ of `define-treesit-generic-mode'. (setq-local comment-start "# ") (setq-local comment-end "")) +(define-treesit-generic-mode liquid-generic-ts-mode + "Tree-sitter generic mode for Liquid templates." + :lang 'liquid + :source "https://github.com/hankthetank27/tree-sitter-liquid" + :auto-mode "\\.liquid\\'" + :name "Liquid" + :parent mhtml-ts-mode + + (setq-local treesit-range-settings + (append treesit-range-settings + (treesit-range-rules + :embed 'html + :host 'liquid + '(((template_content) @cap))))) + + (setq-local treesit-thing-settings + (append treesit-thing-settings + `((liquid (sexp (not ,(rx bos "program" eos))) + (list ,(rx bos (or "range" + "if_statement" + "for_loop_statement" + "case_statement" + "unless_statement" + "capture_statement" + "form_statement" + "tablerow_statement" + "paginate_statement") + eos)))))) + + (setq-local treesit-aggregated-outline-predicate + (append treesit-aggregated-outline-predicate + `((liquid . ,(rx bos (or "if_statement" + "for_loop_statement") + eos))))) + + (when (treesit-ready-p 'yaml t) + (defvar yaml-ts-mode--font-lock-settings) + (require 'yaml-ts-mode) + (setq-local treesit-range-settings + (append treesit-range-settings + (treesit-range-rules + :embed 'yaml + :host 'liquid + :local t + '(((front_matter) @cap))))) + (setq-local treesit-font-lock-settings + (append treesit-font-lock-settings + yaml-ts-mode--font-lock-settings)))) + +(defvar alpinejs-generic-ts-attr-regexp + (rx bos (or "x-" ":" "@")) + "Regexp for HTML attributes handled by Alpine.js") + +(defun alpinejs-generic-ts-attr-not-match (node) + (not (string-match-p alpinejs-generic-ts-attr-regexp + (treesit-node-text node t)))) + +(defun alpinejs-generic-ts-setup () + "Tree-sitter generic setup for Alpine.js framework. +It uses JavaScript highlighting inside a limited set of HTML attributes. +Intended to be used in combination with such major modes as +`mhtml-ts-mode' and `liquid-generic-ts-mode'. For example: + +\(add-hook \\='mhtml-ts-mode-hook \\='alpinejs-generic-ts-setup) +\(add-hook \\='liquid-generic-ts-mode-hook \\='alpinejs-generic-ts-setup)" + + ;; Use JavaScript highlighting for Alpinejs HTML attributes + (setq-local treesit-range-settings + (append treesit-range-settings + (treesit-range-rules + :embed 'javascript + :host 'html + :local t + `((attribute + (attribute_name) @_name + (:match ,alpinejs-generic-ts-attr-regexp @_name) + (quoted_attribute_value + (attribute_value) @cap)))))) + + ;; Highlight only non-Alpinejs HTML attributes + (setq-local treesit-font-lock-settings + (treesit-replace-font-lock-feature-settings + (treesit-font-lock-rules + :language 'html + :override t + :feature 'string + `((attribute + (attribute_name) @_name + (:pred alpinejs-generic-ts-attr-not-match @_name) + (quoted_attribute_value) @font-lock-string-face))) + treesit-font-lock-settings)) + + ;; Highlight only quotes for Alpinejs HTML attributes + (setq-local treesit-font-lock-settings + (append treesit-font-lock-settings + (treesit-font-lock-rules + :language 'html + :override t + :feature 'string + `((attribute + (attribute_name) @_name + (:match ,alpinejs-generic-ts-attr-regexp @_name) + (quoted_attribute_value "\"" @font-lock-string-face)))))) + + (treesit-major-mode-setup)) + (provide 'treesit-x) ;;; treesit-x.el ends here diff --git a/lisp/treesit.el b/lisp/treesit.el index 54c29326df2..07861603244 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -1636,12 +1636,16 @@ Both SETTINGS and NEW-SETTINGS must be a value suitable for Return a value suitable for `treesit-font-lock-settings'" (let ((result nil)) (dolist (new-setting new-settings) - (let ((new-feature (treesit-font-lock-setting-feature new-setting))) - (dolist (setting settings) - (let ((feature (treesit-font-lock-setting-feature setting))) - (if (eq new-feature feature) - (push new-setting result) - (push setting result)))))) + (let ((new-feature (treesit-font-lock-setting-feature new-setting)) + (new-lang (treesit-query-language + (treesit-font-lock-setting-query new-setting)))) + (dolist (setting settings) + (let ((feature (treesit-font-lock-setting-feature setting)) + (lang (treesit-query-language + (treesit-font-lock-setting-query setting)))) + (if (and (eq new-lang lang) (eq new-feature feature)) + (push new-setting result) + (push setting result)))))) (nreverse result))) (defun treesit-add-font-lock-rules (rules &optional how feature) @@ -1881,9 +1885,9 @@ If LOUDLY is non-nil, display some debugging information." ;; 1ms in xdisp.c, and 0.3ms in a small C file (for typing a single ;; character), not worth it. --yuan (dolist (setting treesit-font-lock-settings) - (let* ((query (nth 0 setting)) - (enable (nth 1 setting)) - (override (nth 3 setting)) + (let* ((query (treesit-font-lock-setting-query setting)) + (enable (treesit-font-lock-setting-enable setting)) + (override (treesit-font-lock-setting-override setting)) (language (treesit-query-language query)) (root-nodes (cl-remove-if-not (lambda (node) commit 883355cef7c758067b49f50ab98cc5516da55155 Author: Mauro Aranda Date: Tue Apr 1 14:16:02 2025 -0300 Move a vc option to a preloaded file Since vc-resolve-conflicts is referenced in backend files, which only require vc at runtime, move it to vc-hooks to avoid a void variable error. (Bug#3860) * lisp/vc/vc.el (vc-resolve-conflicts): Move from here... * lisp/vc/vc-hooks.el (vc-resolve-conflicts): ...to here. diff --git a/lisp/vc/vc-hooks.el b/lisp/vc/vc-hooks.el index 401ccb066e0..f9fa3e1bd7e 100644 --- a/lisp/vc/vc-hooks.el +++ b/lisp/vc/vc-hooks.el @@ -168,6 +168,21 @@ revision number and lock status." :type 'boolean :group 'vc) +(defcustom vc-resolve-conflicts t + "Whether to mark conflicted file as resolved upon saving. + +If this is non-nil and there are no more conflict markers in the file, +VC will mark the conflicts in the saved file as resolved. This is +only meaningful for VCS that handle conflicts by inserting conflict +markers in a conflicted file. + +When saving a conflicted file, VC first tries to use the value +of `vc-BACKEND-resolve-conflicts', for handling backend-specific +settings. It defaults to this option if that option has the special +value `default'." + :type 'boolean + :version "31.1") + ;;; This is handled specially now. ;; Tell Emacs about this new kind of minor mode ;; (add-to-list 'minor-mode-alist '(vc-mode vc-mode)) diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index 5c401f0bded..2db2a017525 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -999,21 +999,6 @@ the URL-REGEXP of the association." :value-type ,vc-cloneable-backends-custom-type) :version "31.1") -(defcustom vc-resolve-conflicts t - "Whether to mark conflicted file as resolved upon saving. - -If this is non-nil and there are no more conflict markers in the file, -VC will mark the conflicts in the saved file as resolved. This is -only meaningful for VCS that handle conflicts by inserting conflict -markers in a conflicted file. - -When saving a conflicted file, VC first tries to use the value -of `vc-BACKEND-resolve-conflicts', for handling backend-specific -settings. It defaults to this option if that option has the special -value `default'." - :type 'boolean - :version "31.1") - ;; File property caching commit a0962074743521447b1549f9e0ecd03325debc0d Author: Stephen Gildea Date: Mon Mar 31 22:34:20 2025 -0700 printed manuals: xrefs in and out of "Preparing Patches" Fix two cases of links where the on-line manual is one document but the manual is split into separate documents for printing: * doc/emacs/package.texi (Fetching Package Sources): fix printed link to "Preparing Patches" to point to separate document. * doc/emacs/vc1-xtra.texi (Preparing Patches): fix printed link to "Directory Variables" to point to separate document. diff --git a/doc/emacs/package.texi b/doc/emacs/package.texi index 857584b9933..182efff7afb 100644 --- a/doc/emacs/package.texi +++ b/doc/emacs/package.texi @@ -654,7 +654,13 @@ maintainer, you can use the command @code{package-report-bug} to report a bug via Email. This report will include all the user options that you have customized. If you have made a change you wish to share with the maintainers, first commit your changes then use the command -@code{package-vc-prepare-patch} to share it. @xref{Preparing Patches}. +@code{package-vc-prepare-patch} to share it. +@iftex +@xref{Preparing Patches,,,emacs-xtra, Specialized Emacs Features}. +@end iftex +@ifnottex +@xref{Preparing Patches}. +@end ifnottex @findex package-vc-install-from-checkout @findex package-vc-rebuild diff --git a/doc/emacs/vc1-xtra.texi b/doc/emacs/vc1-xtra.texi index 45bc6d77728..5c448e741f2 100644 --- a/doc/emacs/vc1-xtra.texi +++ b/doc/emacs/vc1-xtra.texi @@ -312,7 +312,14 @@ If you expect to contribute patches on a regular basis, you can set the user option @code{vc-default-patch-addressee} to the address(es) you wish to use. This will be used as the default value when invoking @code{vc-prepare-patch}. Project maintainers may consider setting -this as a directory local variable (@pxref{Directory Variables}). +this as a directory local variable +@iftex +(@pxref{Directory Variables,,Per-Directory Local Variables, +emacs, the Emacs Manual}). +@end iftex +@ifnottex +(@pxref{Directory Variables}). +@end ifnottex @node Customizing VC @subsection Customizing VC commit 975d58c4c8d22555a702c418bb68225e6fc630d0 Author: Eli Zaretskii Date: Tue Apr 1 18:40:59 2025 +0300 Fix :map property on sliced images on mode line and header line * src/xdisp.c (note_mode_line_or_margin_highlight): Fix coordinates for image slices wrt ':map' keyword when the image is on the mode line or header line. (Bug#77429) diff --git a/src/xdisp.c b/src/xdisp.c index 2c676c09827..886f070753f 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -35864,6 +35864,15 @@ note_mode_line_or_margin_highlight (Lisp_Object window, int x, int y, #ifdef HAVE_WINDOW_SYSTEM if (IMAGEP (object)) { + if (glyph != NULL && glyph->type == IMAGE_GLYPH) + { + struct image *img = IMAGE_OPT_FROM_ID (f, glyph->u.img_id); + if (img != NULL && IMAGEP (img->spec)) + { + dx += glyph->slice.img.x; + dy += glyph->slice.img.y; + } + } Lisp_Object image_map, hotspot; if ((image_map = plist_get (XCDR (object), QCmap), !NILP (image_map)) commit 3f9ac99fc7e024678dff1ac3ff38e617ef2606fe Author: Michael Albinus Date: Tue Apr 1 15:24:44 2025 +0200 Fix Tramp's file-attributes cache * lisp/net/tramp-adb.el (tramp-adb-handle-file-executable-p): Check also for sticky bit. (tramp-adb-handle-file-readable-p): Simplify. * lisp/net/tramp-gvfs.el (tramp-gvfs-handle-file-executable-p): Check also for sticky bit. Force `file-attributes' check. * lisp/net/tramp-sh.el (tramp-sh-handle-file-executable-p): Check also for sticky bit. (tramp-sh-handle-file-readable-p) (tramp-sh-handle-file-writable-p): Simplify. * lisp/net/tramp-sudoedit.el (tramp-sudoedit-handle-file-executable-p): Check also for sticky bit. (tramp-sudoedit-handle-file-readable-p) (tramp-sudoedit-handle-file-writable-p): Simplify. * lisp/net/tramp.el (tramp-use-file-attributes): Fix docstring. (tramp-handle-file-readable-p, tramp-handle-file-writable-p): Force `file-attributes' check. Use `file-truename' for symbolic links. (tramp-check-cached-permissions): New optional argument FORCE. Fix symlink check. Check also for sticky bit. (Bug#77402) * test/lisp/net/tramp-tests.el (tramp-test20-file-modes-without-file-attributes) (tramp-test21-file-links-without-file-attributes): New tests. diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el index 1ecabd8165f..dee6b7899e9 100644 --- a/lisp/net/tramp-adb.el +++ b/lisp/net/tramp-adb.el @@ -480,11 +480,11 @@ Emacs dired can't find files." (with-tramp-file-property v localname "file-executable-p" ;; Examine `file-attributes' cache to see if request can be ;; satisfied without remote operation. - (if (tramp-use-file-attributes v) - (or (tramp-check-cached-permissions v ?x) - (tramp-check-cached-permissions v ?s)) - (tramp-adb-send-command-and-check - v (format "test -x %s" (tramp-shell-quote-argument localname))))))) + (or (tramp-check-cached-permissions v ?x) + (tramp-check-cached-permissions v ?s) + (tramp-check-cached-permissions v ?t) + (tramp-adb-send-command-and-check + v (format "test -x %s" (tramp-shell-quote-argument localname))))))) (defun tramp-adb-handle-file-exists-p (filename) "Like `file-exists-p' for Tramp files." @@ -498,10 +498,9 @@ Emacs dired can't find files." (with-tramp-file-property v localname "file-readable-p" ;; Examine `file-attributes' cache to see if request can be ;; satisfied without remote operation. - (if (tramp-use-file-attributes v) - (tramp-handle-file-readable-p filename) - (tramp-adb-send-command-and-check - v (format "test -r %s" (tramp-shell-quote-argument localname))))))) + (or (tramp-handle-file-readable-p filename) + (tramp-adb-send-command-and-check + v (format "test -r %s" (tramp-shell-quote-argument localname))))))) (defun tramp-adb-handle-file-writable-p (filename) "Like `file-writable-p' for Tramp files." diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el index 3df69d79fce..9530aa3733a 100644 --- a/lisp/net/tramp-gvfs.el +++ b/lisp/net/tramp-gvfs.el @@ -1467,8 +1467,9 @@ If FILE-SYSTEM is non-nil, return file system attributes." "Like `file-executable-p' for Tramp files." (with-parsed-tramp-file-name (expand-file-name filename) nil (with-tramp-file-property v localname "file-executable-p" - (or (tramp-check-cached-permissions v ?x) - (tramp-check-cached-permissions v ?s))))) + (or (tramp-check-cached-permissions v ?x 'force) + (tramp-check-cached-permissions v ?s 'force) + (tramp-check-cached-permissions v ?t 'force))))) (defun tramp-gvfs-handle-file-name-all-completions (filename directory) "Like `file-name-all-completions' for Tramp files." diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index ef4ddee8a53..4b770e95038 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -1783,10 +1783,10 @@ ID-FORMAT valid values are `string' and `integer'." (with-tramp-file-property v localname "file-executable-p" ;; Examine `file-attributes' cache to see if request can be ;; satisfied without remote operation. - (if (tramp-use-file-attributes v) - (or (tramp-check-cached-permissions v ?x) - (tramp-check-cached-permissions v ?s)) - (tramp-run-test v "-x" localname))))) + (or (tramp-check-cached-permissions v ?x) + (tramp-check-cached-permissions v ?s) + (tramp-check-cached-permissions v ?t) + (tramp-run-test v "-x" localname))))) (defun tramp-sh-handle-file-readable-p (filename) "Like `file-readable-p' for Tramp files." @@ -1794,9 +1794,8 @@ ID-FORMAT valid values are `string' and `integer'." (with-tramp-file-property v localname "file-readable-p" ;; Examine `file-attributes' cache to see if request can be ;; satisfied without remote operation. - (if (tramp-use-file-attributes v) - (tramp-handle-file-readable-p filename) - (tramp-run-test v "-r" localname))))) + (or (tramp-handle-file-readable-p filename) + (tramp-run-test v "-r" localname))))) ;; Functions implemented using the basic functions above. @@ -1826,13 +1825,11 @@ ID-FORMAT valid values are `string' and `integer'." (if (file-exists-p filename) ;; Examine `file-attributes' cache to see if request can be ;; satisfied without remote operation. - (if (tramp-use-file-attributes v) - (tramp-check-cached-permissions v ?w) - (tramp-run-test v "-w" localname)) + (or (tramp-check-cached-permissions v ?w) + (tramp-run-test v "-w" localname)) ;; If file doesn't exist, check if directory is writable. - (and - (file-directory-p (file-name-directory filename)) - (file-writable-p (file-name-directory filename))))))) + (and (file-directory-p (file-name-directory filename)) + (file-writable-p (file-name-directory filename))))))) (defun tramp-sh-handle-file-ownership-preserved-p (filename &optional group) "Like `file-ownership-preserved-p' for Tramp files." diff --git a/lisp/net/tramp-sudoedit.el b/lisp/net/tramp-sudoedit.el index ff01eac5b93..59b4ea46b8c 100644 --- a/lisp/net/tramp-sudoedit.el +++ b/lisp/net/tramp-sudoedit.el @@ -479,11 +479,11 @@ the result will be a local, non-Tramp, file name." (with-tramp-file-property v localname "file-executable-p" ;; Examine `file-attributes' cache to see if request can be ;; satisfied without remote operation. - (if (tramp-use-file-attributes v) - (or (tramp-check-cached-permissions v ?x) - (tramp-check-cached-permissions v ?s)) - (tramp-sudoedit-send-command - v "test" "-x" (file-name-unquote localname)))))) + (or (tramp-check-cached-permissions v ?x) + (tramp-check-cached-permissions v ?s) + (tramp-check-cached-permissions v ?t) + (tramp-sudoedit-send-command + v "test" "-x" (file-name-unquote localname)))))) (defun tramp-sudoedit-handle-file-exists-p (filename) "Like `file-exists-p' for Tramp files." @@ -519,10 +519,9 @@ the result will be a local, non-Tramp, file name." (with-tramp-file-property v localname "file-readable-p" ;; Examine `file-attributes' cache to see if request can be ;; satisfied without remote operation. - (if (tramp-use-file-attributes v) - (tramp-handle-file-readable-p filename) - (tramp-sudoedit-send-command - v "test" "-r" (file-name-unquote localname)))))) + (or (tramp-handle-file-readable-p filename) + (tramp-sudoedit-send-command + v "test" "-r" (file-name-unquote localname)))))) (defun tramp-sudoedit-handle-set-file-modes (filename mode &optional flag) "Like `set-file-modes' for Tramp files." @@ -604,10 +603,9 @@ the result will be a local, non-Tramp, file name." (if (file-exists-p filename) ;; Examine `file-attributes' cache to see if request can be ;; satisfied without remote operation. - (if (tramp-use-file-attributes v) - (tramp-check-cached-permissions v ?w) - (tramp-sudoedit-send-command - v "test" "-w" (file-name-unquote localname))) + (or (tramp-check-cached-permissions v ?w) + (tramp-sudoedit-send-command + v "test" "-w" (file-name-unquote localname))) ;; If file doesn't exist, check if directory is writable. (and (file-directory-p (file-name-directory filename)) diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index ec8835c13f0..6c1a4ae7127 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -3509,7 +3509,7 @@ BODY is the backend specific code." nil))) (defcustom tramp-use-file-attributes t - "Whether to use \"file-attributes\" file property for check. + "Whether to use \"file-attributes\" connection property for check. This is relevant for read, write, and execute permissions. On some file systems using NFS4_ACL, the permission string as returned from `stat' or `ls', is not sufficient to provide more fine-grained information. @@ -4331,13 +4331,12 @@ Let-bind it when necessary.") "Like `file-readable-p' for Tramp files." (with-parsed-tramp-file-name (expand-file-name filename) nil (with-tramp-file-property v localname "file-readable-p" - (or (tramp-check-cached-permissions v ?r) + (or (tramp-check-cached-permissions v ?r 'force) ;; `tramp-check-cached-permissions' doesn't handle symbolic ;; links. (and-let* ((symlink (file-symlink-p filename)) ((stringp symlink)) - ((file-readable-p - (concat (file-remote-p filename) symlink))))))))) + ((file-readable-p (file-truename filename))))))))) (defun tramp-handle-file-regular-p (filename) "Like `file-regular-p' for Tramp files." @@ -4431,7 +4430,12 @@ existing) are returned." (with-parsed-tramp-file-name (expand-file-name filename) nil (with-tramp-file-property v localname "file-writable-p" (if (file-exists-p filename) - (tramp-check-cached-permissions v ?w) + (or (tramp-check-cached-permissions v ?w 'force) + ;; `tramp-check-cached-permissions' doesn't handle + ;; symbolic links. + (and-let* ((symlink (file-symlink-p filename)) + ((stringp symlink)) + ((file-writable-p (file-truename filename)))))) ;; If file doesn't exist, check if directory is writable. (and (file-directory-p (file-name-directory filename)) (file-writable-p (file-name-directory filename))))))) @@ -6424,22 +6428,23 @@ VEC is used for tracing." (when vec (tramp-message vec 7 "locale %s" (or locale "C"))) (or locale "C")))) -(defun tramp-check-cached-permissions (vec access) +(defun tramp-check-cached-permissions (vec access &optional force) "Check `file-attributes' caches for VEC. -Return t if according to the cache access type ACCESS is known to -be granted." +Return t if according to the cache access type ACCESS is known to be +granted, if `tramp-use-file-attributes' mandates this. If FORCE is +non-nil, use connection property \"file-attributes\" mandatory." (when-let* ((offset (cond ((eq ?r access) 1) ((eq ?w access) 2) ((eq ?x access) 3) - ((eq ?s access) 3))) + ((eq ?s access) 3) + ((eq ?t access) 3))) + ((or force (tramp-use-file-attributes vec))) (file-attr (file-attributes (tramp-make-tramp-file-name vec))) + ;; Not a symlink. + ((not (stringp (file-attribute-type file-attr)))) (remote-uid (tramp-get-remote-uid vec 'integer)) (remote-gid (tramp-get-remote-gid vec 'integer))) - (or - ;; Not a symlink. - (eq t (file-attribute-type file-attr)) - (null (file-attribute-type file-attr))) (or ;; World accessible. (eq access (aref (file-attribute-modes file-attr) (+ offset 6))) diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el index 605b26206c4..e22f1afc18b 100644 --- a/test/lisp/net/tramp-tests.el +++ b/test/lisp/net/tramp-tests.el @@ -4279,6 +4279,8 @@ This tests also `file-executable-p', `file-writable-p' and `set-file-modes'." (ignore-errors (delete-file tmp-name1)) (ignore-errors (delete-file tmp-name2))))))) +(tramp--test-deftest-without-file-attributes tramp-test20-file-modes) + ;; Method "smb" could run into "NT_STATUS_REVISION_MISMATCH" error. (defmacro tramp--test-ignore-add-name-to-file-error (&rest body) "Run BODY, ignoring \"error with add-name-to-file\" file error." @@ -4578,6 +4580,8 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." (should (string-equal (file-truename dir1) (expand-file-name dir1))) (should (string-equal (file-truename dir2) (expand-file-name dir2))))))) +(tramp--test-deftest-without-file-attributes tramp-test21-file-links) + (ert-deftest tramp-test22-file-times () "Check `set-file-times' and `file-newer-than-file-p'." (skip-unless (tramp--test-enabled)) commit 31e744e581bfaf2c75d01204cc07d2da886ae252 Author: Vincenzo Pupillo Date: Mon Mar 31 21:49:36 2025 +0200 Added a check to see if the 'speedbar-buffer' is still alive Fix suggested by Rudi Schlatte . * lisp/speedbar.el (speedbar-frame-or-window): Added an additional check to see if 'speedbar-buffer' is still alive (bug#77405). diff --git a/lisp/speedbar.el b/lisp/speedbar.el index 6ad96c979d6..b1fd141321c 100644 --- a/lisp/speedbar.el +++ b/lisp/speedbar.el @@ -1048,7 +1048,8 @@ Return nil if both are closed." ((speedbar-window--live-p) 'window) ((and (frame-live-p (speedbar-current-frame)) - speedbar-buffer + speedbar-buffer + (buffer-live-p speedbar-buffer) (not (speedbar-window--live-p))) 'frame) (t nil))) commit 6cac92928a99a2cf33aeeeddf295cf981750391c Author: Pip Cet Date: Mon Feb 17 15:21:16 2025 +0000 Fix compilation errors due to insufficient compiler safety (bug#63288) The default safety level is 1. Restoring the default safety level to 1 after it was temporarily 0 should reset byte-compile-delete-errors to nil, its default level. Failing to do that resulted in miscompilation of code in highly-parallel builds. * lisp/emacs-lisp/cl-macs.el (cl--do-proclaim): Change 'byte-compile-delete-errors' to become t only at 'safety' level 0, not levels 1 or 2. (cherry picked from commit 53a5dada413662389a17c551a00d215e51f5049f) diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index 8caf2f1eac0..2a0a9e5c6de 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -2670,7 +2670,7 @@ Example: (let ((speed (assq (nth 1 (assq 'speed (cdr spec))) '((0 nil) (1 t) (2 t) (3 t)))) (safety (assq (nth 1 (assq 'safety (cdr spec))) - '((0 t) (1 t) (2 t) (3 nil))))) + '((0 t) (1 nil) (2 nil) (3 nil))))) (if speed (setq cl--optimize-speed (car speed) byte-optimize (nth 1 speed))) (if safety (setq cl--optimize-safety (car safety) commit 4f6fa90ec5c8fa2d5709a9ba375dbfa8f0029115 Author: Eli Zaretskii Date: Tue Apr 1 14:19:54 2025 +0300 ; * doc/misc/cl.texi (Structures): Fix references and markup. diff --git a/doc/misc/cl.texi b/doc/misc/cl.texi index 7219494391b..4bceddb8196 100644 --- a/doc/misc/cl.texi +++ b/doc/misc/cl.texi @@ -4066,17 +4066,17 @@ A documentation string describing the slot. Other slot options are currently ignored. -@defmac cl-with-accessors name bindings body@dot{} +@defmac cl-with-accessors name bindings body@dots{} You can use @code{cl-with-accessors} to lexically define symbols as expressions calling the given accessor functions on a single instance of a structure or class defined by @code{cl-defstruct} or @code{defclass} -(@pxref{eieio}). This can simplify code that repeatedly accesses slots. -With it, you can use @code{setf} and @code{setq} on the symbols like -normal variables, modifying the values in the structure. Unlike the -macro @code{with-slots} (@pxref{Accessing Slots,,,eieio,EIEIO}), because -the symbol expands to a function call, @code{cl-with-accessors} can be -used with any generalized variable that can take a single argument, such -as @code{cl-first} and @code{cl-rest}. +(@pxref{Building Classes,,,eieio,EIEIO}). This can simplify code that +repeatedly accesses slots. With it, you can use @code{setf} and +@code{setq} on the symbols like normal variables, modifying the values +in the structure. Unlike the macro @code{with-slots} (@pxref{Accessing +Slots,,,eieio,EIEIO}), because the symbol expands to a function call, +@code{cl-with-accessors} can be used with any generalized variable that +can take a single argument, such as @code{cl-first} and @code{cl-rest}. @end defmac @example commit 905712690097addb201b02bd936aa26361316723 Author: Ikumi Keita Date: Fri Mar 28 22:18:42 2025 +0900 Suppress error in non-file buffer * lisp/textmodes/reftex.el (reftex--suppress-nonfile-error): New variable. (reftex-TeX-master-file): Don't signal error in non-file buffer. (AUCTeX bug#76615) diff --git a/lisp/textmodes/reftex.el b/lisp/textmodes/reftex.el index fda506a6d87..2dde5232077 100644 --- a/lisp/textmodes/reftex.el +++ b/lisp/textmodes/reftex.el @@ -62,6 +62,12 @@ (setq reftex-tables-dirty t) (set symbol value))) +(defvar reftex--suppress-nonfile-error nil + "When non-nil, don't signal error in non-file buffer. + +Note that this is just a quick and dirty hack and is _not_ reliable at +all. It only circumvents disastrous error in `reftex-TeX-master-file', +in case that the user turns on RefTeX in latex mode hook.") ;; Configuration variables (require 'reftex-vars) @@ -377,7 +383,8 @@ If the symbols for the current master file do not exist, they are created." (buffer-file-name))))) (cond ((null master) - (error "Need a filename for this buffer, please save it first")) + (or reftex--suppress-nonfile-error + (error "Need a filename for this buffer, please save it first"))) ((or (file-exists-p (concat master ".tex")) (find-buffer-visiting (concat master ".tex"))) ;; Ahh, an extra .tex was missing... @@ -389,7 +396,10 @@ If the symbols for the current master file do not exist, they are created." (t ;; Use buffer file name. (setq master (buffer-file-name)))) - (expand-file-name master))) + (if (and (not master) + reftex--suppress-nonfile-error) + ".tex" + (expand-file-name master)))) (defun reftex-is-multi () ;; Tell if this is a multifile document. When not sure, say yes. commit bdee2481728f57053690f0dd76c943ddd5f343d9 Author: Lin Jian Date: Fri Mar 21 09:35:07 2025 +0800 Fix pkg description file name when pkg name has numbers (Bug#77143) * lisp/subr.el (package--description-file): Match end of string and add `snapshot` among the possible version names. Copyright-paperwork-exempt: yes diff --git a/lisp/subr.el b/lisp/subr.el index 684d511f2f8..86f5d7698ce 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -7270,7 +7270,9 @@ as a list.") "Return package description file name for package DIR." (concat (let ((subdir (file-name-nondirectory (directory-file-name dir)))) - (if (string-match "\\([^.].*?\\)-\\([0-9]+\\(?:[.][0-9]+\\|\\(?:pre\\|beta\\|alpha\\)[0-9]+\\)*\\)" subdir) + ;; This needs to match only the version strings that can be + ;; generated by `package-version-join'. + (if (string-match "\\([^.].*?\\)-\\([0-9]+\\(?:[.][0-9]+\\|\\(?:pre\\|beta\\|alpha\\|snapshot\\)[0-9]+\\)*\\)\\'" subdir) (match-string 1 subdir) subdir)) "-pkg.el")) commit 6f311883d246df87fa3ed9c24dbb39078e3fd69f Author: Earl Hyatt Date: Sat Mar 29 17:30:48 2025 -0400 Fix typo in test of read-only cl-defstruct slot. * test/lisp/emacs-lisp/cl-macs-tests.el (mystruct) (cl-lib-struct-accessors): Use ":read-only" instead of ":readonly". * test/lisp/emacs-lisp/cl-lib-tests.el (cl-lib-struct-accessors): Test using `setf' on read-only accessor to make sure the correct keyword is used. diff --git a/test/lisp/emacs-lisp/cl-macs-tests.el b/test/lisp/emacs-lisp/cl-macs-tests.el index ed6b1c2e4d4..3e3279ee35a 100644 --- a/test/lisp/emacs-lisp/cl-macs-tests.el +++ b/test/lisp/emacs-lisp/cl-macs-tests.el @@ -520,7 +520,7 @@ collection clause." (:constructor cl-lib--con-1 (&aux (abc 1))) (:constructor cl-lib--con-2 (&optional def) "Constructor docstring.")) "General docstring." - (abc 5 :readonly t) (def nil)) + (abc 5 :read-only t) (def nil)) (ert-deftest cl-lib-struct-accessors () (let ((x (make-mystruct :abc 1 :def 2))) @@ -530,8 +530,9 @@ collection clause." (should (eql (cl-struct-slot-value 'mystruct 'def x) -1)) (should (eql (cl-struct-slot-offset 'mystruct 'abc) 1)) (should-error (cl-struct-slot-offset 'mystruct 'marypoppins)) + (should-error (setf (mystruct-abc x) 3)) (should (pcase (cl-struct-slot-info 'mystruct) - (`((cl-tag-slot) (abc 5 :readonly t) + (`((cl-tag-slot) (abc 5 :read-only t) (def . ,(or 'nil '(nil)))) t))))) commit e04d1dafc700813c835ae4e45af4e104c49e8875 Author: Earl Hyatt Date: Wed Mar 12 23:01:49 2025 -0400 Add cl-with-accessors * lisp/emacs-lisp/cl-macs.el (cl-with-accessors): New macro. * doc/misc/cl.texi (Structures): Mention the new macro. * test/lisp/emacs-lisp/cl-macs-tests.el (cl-lib-struct-with-accessors): New Test. * etc/NEWS (New macro 'cl-with-accessors'.): Mention the macro. This macro is useful when making repeated use of a structures accessor functions, such as reading from a slot and then writing to a slot. It is similar to 'with-slots' from EIEIO, but uses accessor functions instead of slot names. diff --git a/doc/misc/cl.texi b/doc/misc/cl.texi index e51e245c736..7219494391b 100644 --- a/doc/misc/cl.texi +++ b/doc/misc/cl.texi @@ -4066,6 +4066,55 @@ A documentation string describing the slot. Other slot options are currently ignored. +@defmac cl-with-accessors name bindings body@dot{} +You can use @code{cl-with-accessors} to lexically define symbols as +expressions calling the given accessor functions on a single instance of +a structure or class defined by @code{cl-defstruct} or @code{defclass} +(@pxref{eieio}). This can simplify code that repeatedly accesses slots. +With it, you can use @code{setf} and @code{setq} on the symbols like +normal variables, modifying the values in the structure. Unlike the +macro @code{with-slots} (@pxref{Accessing Slots,,,eieio,EIEIO}), because +the symbol expands to a function call, @code{cl-with-accessors} can be +used with any generalized variable that can take a single argument, such +as @code{cl-first} and @code{cl-rest}. +@end defmac + +@example +;; Using accessors with long, clear names without the macro: +(defun internal-normalization (person) + "Correct the values of the slots in PERSON to be as expected." + ;; Check the values of the structure: + (when (equal (person-optional-secondary-data person) "") + (setf (person-optional-secondary-data person) nil)) + (when (null (person-access-settings person)) + (setf (person-access-settings person) 'default)) + (when (< (long-accessor-name-that-can-become-unreadable-when-repeated + person) + 9) + (cl-incf (long-accessor-name-that-can-become-unreadable-when-repeated + person) + 100)) + ;; And so on before returning the structure: + person) + +;; Using accessors with long, clear names with the macro: +(defun internal-normalization (person) + "Correct the values of the slots in PERSON to be as expected." + (cl-with-accessors ((secondary-data person-optional-secondary-data) + (access-settings person-access-settings) + (short-name person-much-longer-accessor-name)) + person + ;; Check the values of the structure: + (when (equal secondary-data "") + (setf secondary-data nil)) + (when (null access-settings) + (setf access-settings 'default)) + (when (< short-name 9) + (cl-incf short-name 100)) + ;; And so on before returning the structure: + person)) +@end example + For obscure historical reasons, structure options take a different form than slot options. A structure option is either a keyword symbol, or a list beginning with a keyword symbol possibly followed diff --git a/etc/NEWS b/etc/NEWS index afa45c5ca0d..8c65b195b1a 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1611,6 +1611,16 @@ New faces have been added to 'icomplete-vertical-mode': - 'icomplete-vertical-unselected-prefix-indicator-face' controls the appearance of unselected candidate prefixes. +** CL-Lib + ++++ +*** New macro 'cl-with-accessors'. +This macro is similar to 'with-slots', but uses accessor functions +instead of slot names. It is useful when slots' accessor functions are +used repeatedly, such as reading from a slot and then writing to that +slot. Symbol macros are created for the accessor functions using +'cl-symbol-macrolet', so that they can be used with 'setq' and 'setf'. + ** Miscellaneous --- diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index 960f2e6742b..cc1c6a6a5ad 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -2576,6 +2576,50 @@ See also `macroexp-let2'." collect `(,(car name) ,gensym)) ,@body))))) +;;;###autoload +(defmacro cl-with-accessors (bindings instance &rest body) + "Use BINDINGS as function calls on INSTANCE inside BODY. + +This macro helps when writing code that makes repeated use of the +accessor functions of a structure or object instance, such as those +created by `cl-defstruct' and `defclass'. + +BINDINGS is a list of (NAME ACCESSOR) pairs. Inside BODY, NAME is +treated as the function call (ACCESSOR INSTANCE) using +`cl-symbol-macrolet'. NAME can be used with `setf' and `setq' as a +generalized variable. Because of how the accessor is used, +`cl-with-accessors' can be used with any generalized variable that can +take a single argument, such as `car' and `cdr'. + +See also the macro `with-slots' described in the Info +node `(eieio)Accessing Slots', which is similar, but uses slot names +instead of accessor functions. + +\(fn ((NAME ACCESSOR) ...) INSTANCE &rest BODY)" + (declare (debug [(&rest (symbolp symbolp)) form body]) + (indent 2)) + (cond ((null body) + (macroexp-warn-and-return "`cl-with-accessors' used with empty body" + nil 'empty-body)) + ((null bindings) + (macroexp-warn-and-return "`cl-with-accessors' used without accessors" + (macroexp-progn body) + 'suspicious)) + (t + (cl-once-only (instance) + (let ((symbol-macros)) + (dolist (b bindings) + (pcase b + (`(,(and (pred symbolp) var) + ,(and (pred symbolp) accessor)) + (push `(,var (,accessor ,instance)) + symbol-macros)) + (_ + (error "Malformed `cl-with-accessors' binding: %S" b)))) + `(cl-symbol-macrolet + ,symbol-macros + ,@body)))))) + ;;; Multiple values. ;;;###autoload diff --git a/test/lisp/emacs-lisp/cl-macs-tests.el b/test/lisp/emacs-lisp/cl-macs-tests.el index b4b939d3d31..ed6b1c2e4d4 100644 --- a/test/lisp/emacs-lisp/cl-macs-tests.el +++ b/test/lisp/emacs-lisp/cl-macs-tests.el @@ -541,6 +541,21 @@ collection clause." (should (mystruct-p (cl-lib--con-1))) (should (mystruct-p (cl-lib--con-2)))) +(ert-deftest cl-lib-struct-with-accessors () + (let ((x (make-mystruct :abc 1 :def 2))) + (cl-with-accessors ((abc mystruct-abc) + (def mystruct-def)) + x + (should (= abc 1)) + (should-error (setf abc 99)) + (should (= def 2)) + (setf def 3) + (should (= def 3)) + (setq def 4) + (should (= def 4))) + (should (= 4 (mystruct-def x))) + (should (= 1 (mystruct-abc x))))) + (ert-deftest cl-lib-arglist-performance () ;; An `&aux' should not cause lambda's arglist to be turned into an &rest ;; that's parsed by hand. commit a97a61b630624f5a6ec917db92e2985c56b20aa0 Author: Juri Linkov Date: Mon Mar 31 20:40:17 2025 +0300 Improve logic of tab handling when quitting windows (bug#71386) * lisp/window.el (window-deletable-p): Add tab logic that returns the symbol 'tab' for a set of predefined conditions. (window--delete): Call 'tab-bar-close-tab' when 'window-deletable-p' returns the symbol 'tab'. (quit-restore-window): Remove tab logic and merge it with frame logic. * test/lisp/tab-bar-tests.el (tab-bar-tests-close-other-tabs-default) (tab-bar-tests-close-other-tabs-with-arg): Clean up tabs afterwards. (tab-bar-tests-quit-restore-window): New test. diff --git a/lisp/window.el b/lisp/window.el index 438c998be9e..1b5ad34dc19 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -4187,6 +4187,21 @@ returns nil." (let ((frame (window-frame window))) (cond + ((and tab-bar-mode + ;; Fall back to frame handling in case of less than 2 tabs + (> (length (funcall tab-bar-tabs-function frame)) 1) + ;; Close the tab with the initial window (bug#59862) + (or (eq (nth 1 (window-parameter window 'quit-restore)) 'tab) + ;; or with the dedicated window (bug#71386) + (and (window-dedicated-p window) + (frame-root-window-p window))) + ;; Don't close the tab if more windows were created explicitly + (< (seq-count (lambda (w) + (memq (car (window-parameter w 'quit-restore)) + '(window tab frame same))) + (window-list-1 nil 'nomini)) + 2)) + 'tab) ((frame-root-window-p window) ;; WINDOW's frame can be deleted only if there are other frames ;; on the same terminal, and it does not contain the active @@ -5022,6 +5037,10 @@ if WINDOW gets deleted or its frame is auto-hidden." (unless (and dedicated-only (not (window-dedicated-p window))) (let ((deletable (window-deletable-p window))) (cond + ((eq deletable 'tab) + (tab-bar-close-tab) + (message "Tab closed after deleting the last window") + 'tab) ((eq deletable 'frame) (let ((frame (window-frame window))) (cond @@ -5388,13 +5407,7 @@ elsewhere. This value is used by `quit-windows-on'." ;; If the previously selected window is still alive, select it. (window--quit-restore-select-window quit-restore-2)) ((and (not prev-buffer) - (eq (nth 1 quit-restore) 'tab) - (eq (nth 3 quit-restore) buffer)) - (tab-bar-close-tab) - ;; If the previously selected window is still alive, select it. - (window--quit-restore-select-window quit-restore-2)) - ((and (not prev-buffer) - (or (eq (nth 1 quit-restore) 'frame) + (or (memq (nth 1 quit-restore) '(frame tab)) (and (eq (nth 1 quit-restore) 'window) ;; If the window has been created on an existing ;; frame and ended up as the sole window on that diff --git a/test/lisp/tab-bar-tests.el b/test/lisp/tab-bar-tests.el index a749db1c512..c0e12cf159c 100644 --- a/test/lisp/tab-bar-tests.el +++ b/test/lisp/tab-bar-tests.el @@ -42,10 +42,116 @@ (should (eq (length tab-bar-closed-tabs) 0))) (ert-deftest tab-bar-tests-close-other-tabs-default () - (tab-bar-tests-close-other-tabs nil)) + (tab-bar-tests-close-other-tabs nil) + ;; Clean up tabs afterwards + (tab-bar-tabs-set nil)) (ert-deftest tab-bar-tests-close-other-tabs-with-arg () - (dotimes (i 5) (tab-bar-tests-close-other-tabs i))) + (dotimes (i 5) (tab-bar-tests-close-other-tabs i)) + ;; Clean up tabs afterwards + (tab-bar-tabs-set nil)) + +(ert-deftest tab-bar-tests-quit-restore-window () + (let* ((frame-params (when noninteractive + '((window-system . nil) + (tty-type . "linux")))) + (pop-up-frame-alist frame-params) + (frame-auto-hide-function 'delete-frame)) + + ;; 1.1. 'quit-restore-window' should delete the frame + ;; from initial window (bug#59862) + (progn + (should (eq (length (frame-list)) 1)) + (other-frame-prefix) + (info) + (should (eq (length (frame-list)) 2)) + (should (equal (buffer-name) "*info*")) + (view-echo-area-messages) + (other-window 1) + (should (eq (length (window-list)) 2)) + (should (equal (buffer-name) "*Messages*")) + (quit-window) + (should (eq (length (window-list)) 1)) + (should (equal (buffer-name) "*info*")) + (quit-window) + (should (eq (length (frame-list)) 1))) + + ;; 1.2. 'quit-restore-window' should not delete the frame + ;; from non-initial window (bug#59862) + (progn + (should (eq (length (frame-list)) 1)) + (other-frame-prefix) + (info) + (should (eq (length (frame-list)) 2)) + (should (equal (buffer-name) "*info*")) + (view-echo-area-messages) + (should (eq (length (window-list)) 2)) + (should (equal (buffer-name) "*info*")) + (quit-window) + (should (eq (length (window-list)) 1)) + (should (eq (length (frame-list)) 2)) + ;; FIXME: uncomment (should (equal (buffer-name) "*Messages*")) + (quit-window) + (should (eq (length (frame-list)) 2)) + ;; Clean up the frame afterwards + (delete-frame)) + + ;; 2.1. 'quit-restore-window' should close the tab + ;; from initial window (bug#59862) + (progn + (should (eq (length (tab-bar-tabs)) 1)) + (other-tab-prefix) + (info) + (should (eq (length (tab-bar-tabs)) 2)) + (should (equal (buffer-name) "*info*")) + (view-echo-area-messages) + (other-window 1) + (should (eq (length (window-list)) 2)) + (should (equal (buffer-name) "*Messages*")) + (quit-window) + (should (eq (length (window-list)) 1)) + (should (equal (buffer-name) "*info*")) + (quit-window) + (should (eq (length (tab-bar-tabs)) 1))) + + ;; 2.2. 'quit-restore-window' should not close the tab + ;; from non-initial window (bug#59862) + (progn + (should (eq (length (tab-bar-tabs)) 1)) + (other-tab-prefix) + (info) + (should (eq (length (tab-bar-tabs)) 2)) + (should (equal (buffer-name) "*info*")) + (view-echo-area-messages) + (should (eq (length (window-list)) 2)) + (should (equal (buffer-name) "*info*")) + (quit-window) + (should (eq (length (window-list)) 1)) + (should (eq (length (tab-bar-tabs)) 2)) + (should (equal (buffer-name) "*Messages*")) + (quit-window) + (should (eq (length (tab-bar-tabs)) 2)) + ;; Clean up the tab afterwards + (tab-close)) + + ;; 3. Don't delete the frame with dedicated window + ;; from the second tab (bug#71386) + (with-selected-frame (make-frame frame-params) + (switch-to-buffer (generate-new-buffer "test1")) + (tab-new) + (switch-to-buffer (generate-new-buffer "test2")) + (set-window-dedicated-p (selected-window) t) + (kill-buffer) + (should (eq (length (frame-list)) 2)) + (should (eq (length (tab-bar-tabs)) 1)) + ;; But now should delete the frame with dedicated window + ;; from the last tab + (set-window-dedicated-p (selected-window) t) + (kill-buffer) + (should (eq (length (frame-list)) 1))) + + ;; Clean up tabs afterwards + (tab-bar-tabs-set nil))) (provide 'tab-bar-tests) ;;; tab-bar-tests.el ends here commit 513a05dd8761aebc14ffe4ee0a8a6e96feb10531 Author: Stefan Monnier Date: Mon Mar 31 12:01:18 2025 -0400 (insert-kbd-macro): Polish * lisp/macros.el (insert-kbd-macro): Straighten control flow, use `pp` and `keymap-global-set`. diff --git a/lisp/macros.el b/lisp/macros.el index ae721b44669..fe79fe10f98 100644 --- a/lisp/macros.el +++ b/lisp/macros.el @@ -66,47 +66,30 @@ use this command, and then save the file." #'kmacro-keyboard-macro-p t)) current-prefix-arg)) - (let (definition) - (if (string= (symbol-name macroname) "") - (progn - (setq macroname 'last-kbd-macro definition last-kbd-macro) - (insert "(setq ")) - (setq definition (symbol-function macroname)) + (if (string= (symbol-name macroname) "") + (pp `(setq last-kbd-macro + (key-parse ,(key-description last-kbd-macro))) + (current-buffer)) + (let ((definition (symbol-function macroname))) (when (or (stringp definition) (vectorp definition)) (setq definition (kmacro (kmacro--to-vector definition)))) ;; Prefer `defalias' over `fset' since it additionally keeps ;; track of the file where the users added it, and it interacts ;; better with `advice-add' (and hence things like ELP). - (insert "(defalias '")) - (prin1 macroname (current-buffer)) - (insert "\n ") - (if (kmacro-p definition) - (let ((vecdef (kmacro--keys definition)) - (counter (kmacro--counter definition)) - (format (kmacro--format definition))) - (insert "(kmacro ") - (prin1 (key-description vecdef) (current-buffer)) - ;; FIXME: Do we really want to store the counter? - (unless (and (equal counter 0) (equal format "%d")) - (insert " ") - (prin1 counter (current-buffer)) - (insert " ") - (prin1 format (current-buffer))) - (insert ")")) - (prin1 `(key-parse ,(key-description definition)) (current-buffer))) - (insert ")\n") - (if keys - (let ((keys (or (and (symbol-function macroname) - (where-is-internal (symbol-function macroname) - '(keymap))) + (let ((counter (kmacro--counter definition)) + (format (kmacro--format definition))) + (pp `(defalias ',macroname + (kmacro ,(key-description (kmacro--keys definition)) + ;; FIXME: Do we really want to store the counter? + . ,(unless (and (equal counter 0) (equal format "%d")) + `(,counter ,format)))) + (current-buffer))) + (when keys + (let ((keys (or (where-is-internal definition '(keymap)) (where-is-internal macroname '(keymap))))) - (while keys - (insert "(global-set-key ") - (prin1 (car keys) (current-buffer)) - (insert " '") - (prin1 macroname (current-buffer)) - (insert ")\n") - (setq keys (cdr keys))))))) + (dolist (key keys) + (pp `(keymap-global-set ,(key-description key) #',macroname) + (current-buffer)))))))) ;;;###autoload (defun kbd-macro-query (flag) commit 10eb57169da01f3f96a5954aa42673d10086824f Author: Stefan Monnier Date: Mon Mar 31 11:36:20 2025 -0400 lisp/macros.el (insert-kbd-macro): Fix anonymous case (bug#77317) diff --git a/lisp/macros.el b/lisp/macros.el index 64b78d1cdf4..ae721b44669 100644 --- a/lisp/macros.el +++ b/lisp/macros.el @@ -72,14 +72,14 @@ use this command, and then save the file." (setq macroname 'last-kbd-macro definition last-kbd-macro) (insert "(setq ")) (setq definition (symbol-function macroname)) + (when (or (stringp definition) (vectorp definition)) + (setq definition (kmacro (kmacro--to-vector definition)))) ;; Prefer `defalias' over `fset' since it additionally keeps ;; track of the file where the users added it, and it interacts ;; better with `advice-add' (and hence things like ELP). (insert "(defalias '")) (prin1 macroname (current-buffer)) (insert "\n ") - (when (or (stringp definition) (vectorp definition)) - (setq definition (kmacro (kmacro--to-vector definition)))) (if (kmacro-p definition) (let ((vecdef (kmacro--keys definition)) (counter (kmacro--counter definition)) @@ -93,8 +93,7 @@ use this command, and then save the file." (insert " ") (prin1 format (current-buffer))) (insert ")")) - ;; FIXME: Shouldn't this signal an error? - (prin1 definition (current-buffer))) + (prin1 `(key-parse ,(key-description definition)) (current-buffer))) (insert ")\n") (if keys (let ((keys (or (and (symbol-function macroname) commit b148e98de37e43dd28207b696994e72808683291 Author: Stefan Monnier Date: Mon Mar 31 10:21:58 2025 -0400 japan-util.el: Cosmetic changes * lisp/language/japan-util.el (): Use `pcase-dolist` and `when`. (japanese-string-conversion): Use `point-min`. diff --git a/lisp/language/japan-util.el b/lisp/language/japan-util.el index 0a25c373b7b..d5faf97174f 100644 --- a/lisp/language/japan-util.el +++ b/lisp/language/japan-util.el @@ -64,36 +64,30 @@ HANKAKU-KATAKANA belongs to `japanese-jisx0201-kana'.") ;; Put properties 'katakana, 'hiragana, and 'jix0201 to each Japanese ;; kana characters for conversion among them. -(let ((l japanese-kana-table) - slot hiragana katakana jisx0201) - (while l - (setq slot (car l) - hiragana (car slot) katakana (nth 1 slot) jisx0201 (nth 2 slot) - l (cdr l)) - (if hiragana - (if (stringp hiragana) - (if (> (length hiragana) 1) - (let ((hira (aref hiragana 0))) - (put-char-code-property - hira 'kana-composition - (cons (cons (aref hiragana 1) katakana) - (get-char-code-property hira 'kana-composition))))) - (put-char-code-property hiragana 'katakana katakana) - (put-char-code-property hiragana 'jisx0201 jisx0201))) - (when (integerp katakana) - (put-char-code-property katakana 'hiragana hiragana) - (put-char-code-property katakana 'jisx0201 jisx0201)) - (if jisx0201 - (if (stringp jisx0201) - (if (> (length jisx0201) 1) - (let ((kana (aref jisx0201 0))) - (put-char-code-property - kana 'kana-composition - (cons (cons (aref jisx0201 1) katakana) - (get-char-code-property kana 'kana-composition))))) - (put-char-code-property jisx0201 'hiragana hiragana) - (put-char-code-property jisx0201 'katakana katakana) - (put-char-code-property jisx0201 'jisx0208 katakana))))) +(pcase-dolist (`(,hiragana ,katakana ,jisx0201) japanese-kana-table) + (if hiragana + (if (stringp hiragana) + (if (length> hiragana 1) + (let ((hira (aref hiragana 0))) + (put-char-code-property + hira 'kana-composition + (cons (cons (aref hiragana 1) katakana) + (get-char-code-property hira 'kana-composition))))) + (put-char-code-property hiragana 'katakana katakana) + (put-char-code-property hiragana 'jisx0201 jisx0201))) + (put-char-code-property katakana 'hiragana hiragana) + (put-char-code-property katakana 'jisx0201 jisx0201) + (if jisx0201 + (if (stringp jisx0201) + (if (length> jisx0201 1) + (let ((kana (aref jisx0201 0))) + (put-char-code-property + kana 'kana-composition + (cons (cons (aref jisx0201 1) katakana) + (get-char-code-property kana 'kana-composition))))) + (put-char-code-property jisx0201 'hiragana hiragana) + (put-char-code-property jisx0201 'katakana katakana) + (put-char-code-property jisx0201 'jisx0208 katakana)))) (defconst japanese-symbol-table '((?\  ?\ ) (?, ?,) (?. ?.) (?、 nil ?、) (?。 nil ?。) (?・ nil ?・) @@ -114,22 +108,15 @@ and HANKAKU belongs to `japanese-jisx0201-kana'.") ;; Put properties 'jisx0208, 'jisx0201, and 'ascii to each Japanese ;; symbol and ASCII characters for conversion among them. -(let ((l japanese-symbol-table) - slot jisx0208 ascii jisx0201) - (while l - (setq slot (car l) - jisx0208 (car slot) ascii (nth 1 slot) jisx0201 (nth 2 slot) - l (cdr l)) - (if ascii - (progn - (put-char-code-property jisx0208 'ascii ascii) - (if (encode-char jisx0208 'japanese-jisx0208) - (put-char-code-property ascii 'jisx0208 jisx0208)))) - (if jisx0201 - (progn - (put-char-code-property jisx0208 'jisx0201 jisx0201) - (if (encode-char jisx0208 'japanese-jisx0208) - (put-char-code-property jisx0201 'jisx0208 jisx0208)))))) +(pcase-dolist (`(,jisx0208 ,ascii ,jisx0201) japanese-symbol-table) + (when ascii + (put-char-code-property jisx0208 'ascii ascii) + (if (encode-char jisx0208 'japanese-jisx0208) + (put-char-code-property ascii 'jisx0208 jisx0208))) + (when jisx0201 + (put-char-code-property jisx0208 'jisx0201 jisx0201) + (if (encode-char jisx0208 'japanese-jisx0208) + (put-char-code-property jisx0201 'jisx0208 jisx0208)))) (defconst japanese-alpha-numeric-table '((?0 . ?0) (?1 . ?1) (?2 . ?2) (?3 . ?3) (?4 . ?4) @@ -150,14 +137,9 @@ belongs to `japanese-jisx0208', ASCII belongs to `ascii'.") ;; Put properties 'jisx0208 and 'ascii to each Japanese alpha numeric ;; and ASCII characters for conversion between them. -(let ((l japanese-alpha-numeric-table) - slot jisx0208 ascii) - (while l - (setq slot (car l) - jisx0208 (car slot) ascii (cdr slot) - l (cdr l)) - (put-char-code-property jisx0208 'ascii ascii) - (put-char-code-property ascii 'jisx0208 jisx0208))) +(pcase-dolist (`(,jisx0208 . ,ascii) japanese-alpha-numeric-table) + (put-char-code-property jisx0208 'ascii ascii) + (put-char-code-property ascii 'jisx0208 jisx0208)) ;; Convert string STR by FUNC and return a resulting string. (defun japanese-string-conversion (str func &rest args) @@ -165,7 +147,7 @@ belongs to `japanese-jisx0208', ASCII belongs to `ascii'.") (with-current-buffer buf (erase-buffer) (insert str) - (apply func 1 (point) args) + (apply func (point-min) (point) args) (buffer-string)))) ;;;###autoload @@ -222,7 +204,7 @@ The argument object is not altered--the value is a copy." (if (stringp string) string (string string)) - 0)) + 0)) ;;;###autoload (defun japanese-katakana-region (from to &optional hankaku) commit fa5cd6b4d917ea6468a4950bff5b8b122468c7ec Author: Eli Zaretskii Date: Mon Mar 31 16:55:49 2025 +0300 Fix replace-region in japan-util.el * lisp/language/japan-util.el (japanese-replace-region): Allow STRING to be a character in addition to a string. Un-obsolete it. (japanese-katakana-region, japanese-hiragana-region) (japanese-hankaku-region, japanese-zenkaku-region): Call 'japanese-replace-region' instead of 'replace-region-contents'. (Bug#77397) diff --git a/lisp/language/japan-util.el b/lisp/language/japan-util.el index 6fbb52b627e..0a25c373b7b 100644 --- a/lisp/language/japan-util.el +++ b/lisp/language/japan-util.el @@ -217,9 +217,12 @@ The argument object is not altered--the value is a copy." (defun japanese-replace-region (from to string) "Replace the region specified by FROM and TO to STRING." - (declare (obsolete replace-region-contents "31.1")) (goto-char to) - (replace-region-contents from to string 0)) + (replace-region-contents from to + (if (stringp string) + string + (string string)) + 0)) ;;;###autoload (defun japanese-katakana-region (from to &optional hankaku) @@ -238,15 +241,13 @@ of which charset is `japanese-jisx0201-kana'." (get-char-code-property kana 'kana-composition))) slot) ;; next (if (and composition (setq slot (assq (following-char) composition))) - (progn - (goto-char (1+ (point))) - (replace-region-contents (match-beginning 0) (point) - (cdr slot) 0)) + (japanese-replace-region (match-beginning 0) (1+ (point)) + (cdr slot)) (let ((kata (get-char-code-property kana (if hankaku 'jisx0201 'katakana)))) (if kata - (replace-region-contents (match-beginning 0) (point) - kata 0))))))))) + (japanese-replace-region (match-beginning 0) (point) + kata))))))))) ;;;###autoload @@ -262,16 +263,13 @@ of which charset is `japanese-jisx0201-kana'." (composition (get-char-code-property kata 'kana-composition)) slot) ;; next (if (and composition (setq slot (assq (following-char) composition))) - (progn - (goto-char (1+ (point))) - (replace-region-contents (match-beginning 0) (point) - (get-char-code-property - (cdr slot) 'hiragana) - 0)) + (japanese-replace-region (match-beginning 0) (1+ (point)) + (get-char-code-property + (cdr slot) 'hiragana)) (let ((hira (get-char-code-property kata 'hiragana))) (if hira - (replace-region-contents (match-beginning 0) (point) - hira 0))))))))) + (japanese-replace-region (match-beginning 0) (point) + hira))))))))) ;;;###autoload (defun japanese-hankaku-region (from to &optional ascii-only) @@ -290,8 +288,8 @@ Optional argument ASCII-ONLY non-nil means to convert only to ASCII char." (get-char-code-property zenkaku 'jisx0201)) (get-char-code-property zenkaku 'ascii)))) (if hankaku - (replace-region-contents (match-beginning 0) (match-end 0) - hankaku 0))))))) + (japanese-replace-region (match-beginning 0) (match-end 0) + hankaku))))))) ;;;###autoload (defun japanese-zenkaku-region (from to &optional katakana-only) @@ -312,14 +310,12 @@ Optional argument KATAKANA-ONLY non-nil means to convert only KATAKANA char." (composition (get-char-code-property hankaku 'kana-composition)) slot) ;; next (if (and composition (setq slot (assq (following-char) composition))) - (progn - (goto-char (1+ (point))) - (replace-region-contents (match-beginning 0) (point) - (cdr slot) 0)) + (japanese-replace-region (match-beginning 0) (1+ (point)) + (cdr slot)) (let ((zenkaku (japanese-zenkaku hankaku))) (if zenkaku - (replace-region-contents (match-beginning 0) (match-end 0) - zenkaku 0))))))))) + (japanese-replace-region (match-beginning 0) (match-end 0) + zenkaku))))))))) ;;;###autoload (defun read-hiragana-string (prompt &optional initial-input) commit 1ed1cc83491311517ba46dff73fdc4383ffd4102 Author: Martin Rudalics Date: Mon Mar 31 09:46:17 2025 +0200 ; Twice mention 'tab' value in buffer display doc-strings (Bug#71386) * lisp/window.el (display-buffer-record-window) (window--display-buffer): Mention value 'tab' for TYPE argument (Bug#71386). diff --git a/lisp/window.el b/lisp/window.el index befbc679b23..438c998be9e 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -6927,8 +6927,9 @@ WINDOW's buffer (although WINDOW may show BUFFER already). TYPE specifies the type of the calling operation and must be one of the symbols `reuse' (meaning that WINDOW exists already and will be used for displaying BUFFER), `window' (WINDOW was created -on an already existing frame) or `frame' (WINDOW was created on a -new frame). +on an already existing frame), `frame' (WINDOW was created on a +new frame) or `tab' (WINDOW is the selected window and BUFFER was +created in a new tab). This function installs or updates the `quit-restore' parameter of WINDOW. The `quit-restore' parameter is a list of four elements: @@ -7675,7 +7676,8 @@ as compiled by `display-buffer'. TYPE must be one of the following symbols: `reuse' (which means WINDOW existed before the call of `display-buffer' and may already show BUFFER or not), `window' (WINDOW was created on an -existing frame) or `frame' (WINDOW was created on a new frame). +existing frame), `frame' (WINDOW was created on a new frame), or `tab' +(WINDOW is the selected window and BUFFER was displayed in a new tab). TYPE is passed unaltered to `display-buffer-record-window'. Handle WINDOW's dedicated flag as follows: If WINDOW already commit 43c9eb3df6050f19211e219c7cb03da7a6d9d6dd Author: Stephen Gildea Date: Sun Mar 30 11:39:53 2025 -0700 Backport expansion of Time Stamp documentation * doc/emacs/files.texi (Time Stamps): Add examples of enabling time stamping with add-hook, setting time-stamp-pattern as a file-local variable, and showing a time stamp at the end of a file. Divide into three sections. * doc/emacs/emacs.texi: Add new nodes to menu. * lisp/info.el (Info-file-list-for-emacs): Remove entry that points Info at time-stamp discussion in the Autotype document. * lisp/time-stamp.el (time-stamp-format, time-stamp-active, time-stamp-count, time-stamp-pattern, time-stamp, time-stamp-string): Expand doc strings. Include Info cross-references. Cherry picked from commits on the main branch. Do not merge to master. diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi index a81c7134a70..d8ca41d737e 100644 --- a/doc/emacs/emacs.texi +++ b/doc/emacs/emacs.texi @@ -486,6 +486,11 @@ Backup Files * Backup Deletion:: Emacs deletes excess numbered backups. * Backup Copying:: Backups can be made by copying or renaming. +Updating Time Stamps Automatically + +* Time Stamp Customization:: How to customize with time-stamp-pattern. +* Time Stamps for One File:: Ensure automatic time-stamp of a specific file. + @ifnottex Auto Reverting Non-File Buffers diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi index c04ac685ee0..2a7017779f6 100644 --- a/doc/emacs/files.texi +++ b/doc/emacs/files.texi @@ -411,7 +411,7 @@ that was visited in the buffer. * Interlocking:: How Emacs protects against simultaneous editing of one file by two users. * Shadowing: File Shadowing. Copying files to ``shadows'' automatically. -* Time Stamps:: Emacs can update time stamps on saved files. +* Time Stamps:: Emacs can update time stamps when a file is saved. @end menu @node Save Commands @@ -992,35 +992,152 @@ File Shadowing is not available on MS Windows. @node Time Stamps @subsection Updating Time Stamps Automatically -@cindex time stamps +@cindex time stamps, automatic file timestamps @cindex modification dates -@cindex locale, date format +@cindex last modified time -You can arrange to put a time stamp in a file, so that it is updated -automatically each time you edit and save the file. The time stamp -must be in the first eight lines of the file, and you should insert it -like this: +You can arrange to have a time stamp in a file be updated +automatically each time you save the file. +(A time stamp may also be called a date stamp or a last modified time.) +Having a time stamp in the text of a file ensures that the time the file +was written will be preserved even if the file is copied or transformed +in a way that loses the file system's modification time. + +There are two steps to setting up automatic time stamping. +First, the file needs a time stamp template +somewhere in the first eight lines. +The template looks like this: @example Time-stamp: <> @end example @noindent -or like this: +or (your choice) like this: @example Time-stamp: " " @end example @findex time-stamp - Then add the function @code{time-stamp} to the hook -@code{before-save-hook} (@pxref{Hooks}). When you save the file, this -function then automatically updates the time stamp with the current -date and time. You can also use the command @kbd{M-x time-stamp} to -update the time stamp manually. By default the time stamp is +With that template in place, you can update the current buffer's time +stamp once immediately with the command @kbd{M-x time-stamp}. +Emacs will check for a template; if a template is found, +Emacs will write the current date, time, author, and/or +other info between the brackets or quotes. +(If the buffer has no template, @code{time-stamp} does nothing.) +After the first time stamp, the line might look like this: + +@example +Time-stamp: <1993-07-06 11:05:14 terryg> +@end example + +Second, configure Emacs to run @code{time-stamp} any time it saves a +file, by adding @code{time-stamp} +to @code{before-save-hook} (@pxref{Hooks}). +You can either customize the option @code{before-save-hook} +(with @kbd{M-x customize-option}, @pxref{Specific Customization}), +or you can edit your init file adding this line: + +@example +(add-hook 'before-save-hook 'time-stamp) +@end example + +@menu +* Time Stamp Customization:: How to customize with time-stamp-pattern. +* Time Stamps for One File:: Ensure automatic time-stamp of a specific file. +@end menu + +@node Time Stamp Customization +@subsubsection Customizing the Time Stamp + +@vindex time-stamp-pattern +To customize the time stamp in a particular file, set the +variable @code{time-stamp-pattern} in that file's local variables +list (@pxref{Specifying File Variables}). +You can change what pattern @code{time-stamp} will match against to +identify a template and where in the file to look for the pattern using +@code{time-stamp-pattern}; for details, see the variable's built-in +documentation (with @kbd{C-h v}, @pxref{Name Help}). + +As a simple example, if this line occurs near the top of a file: + +@example +publishing_year_and_city = "Published nnnn in Boston, Mass."; +@end example + +@noindent +then the following comment at the end of the same file tells +@code{time-stamp} how to identify and update that custom template: + +@example +@group +// Local variables: +// time-stamp-pattern: "Published %Y in Boston" +// End: +@end group +@end example + +This pattern says that the text before the start of the time stamp is +``Published '', and the text after the end is `` in Boston''. +If @code{time-stamp} finds both in one of the first eight lines, +what is between will be replaced by the current year, as requested by +the @code{%Y} format. + +After any change to file-local variables, +type @kbd{M-x normal-mode} to re-read them. + +Here is another example, with the time stamp inserted into +the last paragraph of an HTML document. +Since this template is at the end of the document, not in the first +eight lines, @code{time-stamp-format} starts with @code{-10/} to tell +@code{time-stamp} to look at the last 10 lines. +The @code{%%} asks for the default format +(specified by @code{time-stamp-format}). + +@example +@r{@dots{}} +

Last modified:

+ + + +@end example + +@vindex time-stamp-format +By default the time stamp is formatted according to your locale setting (@pxref{Environment}) and time zone (@pxref{Time of Day,,, elisp, The Emacs Lisp Reference -Manual}). For customizations, see the Custom group @code{time-stamp}. +Manual}). +See the built-in documentation for the variable @code{time-stamp-format} +for specifics and other variables that affect the formatting. + +@node Time Stamps for One File +@subsubsection Forcing Time Stamps for One File + +If you are working on a file with multiple authors, and you cannot +be sure the other authors have enabled time-stamping globally in +their Emacs init files, you can force it to be enabled for a +particular file by adding @code{time-stamp} to that buffer's +@code{before-save-hook} in that file's local variables list. +To extend one of the previous examples: + +@example +@group +// Local variables: +// eval: (add-hook 'before-save-hook 'time-stamp nil t) +// time-stamp-pattern: "Published %Y in Boston" +// End: +@end group +@end example + +@noindent +Although this example shows them both set together, +you can use @code{eval} without also setting @code{time-stamp-pattern} +if you like the default pattern. @node Reverting @section Reverting a Buffer diff --git a/lisp/info.el b/lisp/info.el index b484afc08cc..4aafe223549 100644 --- a/lisp/info.el +++ b/lisp/info.el @@ -4666,7 +4666,6 @@ Advanced commands: ("java" . "ccmode") ("idl" . "ccmode") ("pike" . "ccmode") ("skeleton" . "autotype") ("auto-insert" . "autotype") ("copyright" . "autotype") ("executable" . "autotype") - ("time-stamp" . "autotype") ("tempo" . "autotype") ("hippie-expand" . "autotype") ("cvs" . "pcl-cvs") ("ada" . "ada-mode") "calc" ("calcAlg" . "calc") ("calcDigit" . "calc") ("calcVar" . "calc") diff --git a/lisp/time-stamp.el b/lisp/time-stamp.el index 45de5a185e1..eb438ce3e52 100644 --- a/lisp/time-stamp.el +++ b/lisp/time-stamp.el @@ -31,8 +31,8 @@ ;; (add-hook 'before-save-hook 'time-stamp) ;; Now any time-stamp templates in your files will be updated automatically. -;; See the documentation for the functions `time-stamp' -;; and `time-stamp-toggle-active' for details. +;; For details, see the documentation for function `time-stamp' +;; and the Info node `Time Stamps'. ;;; Code: @@ -64,7 +64,7 @@ with %, as follows. %5z time zone offset: `-0500' (since Emacs 27; see note below) Non-date items: -%% a literal percent character: `%' +%% literal percent character: \"%\" %f file name without directory %F absolute file name %l login name %L full name of logged-in user %q unqualified host name %Q fully-qualified host name @@ -74,12 +74,12 @@ Decimal digits between the % and the type character specify the field width. Strings are truncated on the right. A leading zero in the field width zero-fills a number. -For example, to get the format used by the `date' command, +For example, to get a common format used by the \"date\" command, use \"%3a %3b %2d %02H:%02M:%02S %Z %Y\". The values of non-numeric formatted items depend on the locale setting recorded in `system-time-locale' and `locale-coding-system'. -The examples here are for the default (`C') locale. +The examples here are for the default (\"C\") locale. `time-stamp-time-zone' controls the time zone used. The default padding of some formats has changed to be more compatible @@ -95,7 +95,7 @@ edited by older versions of Emacs also, do not use this format yet." (defcustom time-stamp-active t - "Non-nil to enable time-stamping of buffers by \\[time-stamp]. + "Non-nil enables time-stamping of buffers by \\[time-stamp]. Can be toggled by \\[time-stamp-toggle-active]. This option does not affect when `time-stamp' is run, only what it @@ -229,7 +229,11 @@ your init file, you would be incompatible with other people's files.") (defvar time-stamp-count 1 ;Do not change! "How many templates \\[time-stamp] will look for in a buffer. -The same time stamp will be written in each case. + +If the value is greater than 1, the same time stamp will be written in +each case. If you want to insert different text on different lines, +then instead of changing this variable, include a newline (written as +\"\\n\") in `time-stamp-format' or the format part of `time-stamp-pattern'. `time-stamp-count' is best changed with a file-local variable. If you were to change it in your init file, you would be incompatible @@ -240,55 +244,61 @@ with other people's files.") (defvar time-stamp-pattern nil ;Do not change! "Convenience variable setting all `time-stamp' location and format values. This string has four parts, each of which is optional. -These four parts set `time-stamp-line-limit', `time-stamp-start', -`time-stamp-format', and `time-stamp-end'. See the documentation -for each of these variables for details. +These four parts override `time-stamp-line-limit', `time-stamp-start', +`time-stamp-format' and `time-stamp-end', respectively. See the +documentation for each of these variables for details. The first part is a number followed by a slash; the number sets the number of lines at the beginning (negative counts from end) of the file searched for the time stamp. The number and the slash may be omitted to use the -normal value. +value of `time-stamp-line-limit' as the number. The second part is a regexp identifying the pattern preceding the time stamp. -This part may be omitted to use the normal pattern. +This part may be omitted to use the value of `time-stamp-start'. -The third part specifies the format of the time stamp inserted. See -the documentation for `time-stamp-format' for details. Specify this -part as \"%%\" to use the normal format. +The third part specifies the format of the time stamp inserted. Specify +this part as \"%%\" to use the value of `time-stamp-format'. The fourth part is a regexp identifying the pattern following the time stamp. -This part may be omitted to use the normal pattern. +This part may be omitted to use the value of `time-stamp-end'. The pattern does not need to match the entire line of the time stamp. +The pattern will update time stamp information on multiple lines if the +pattern includes newlines, which can be written as \"\\n\". These variables are best changed with file-local variables. If you were to change `time-stamp-pattern', `time-stamp-line-limit', `time-stamp-start', or `time-stamp-end' in your init file, you would be incompatible with other people's files. -See also `time-stamp-count' and `time-stamp-inserts-lines'. - Examples: -\"-10/\" (sets only `time-stamp-line-limit') +;; time-stamp-pattern: \"-10/\" + (sets only `time-stamp-line-limit') + +// time-stamp-pattern: \"-9/^Last modified: %%$\" + (sets `time-stamp-line-limit', `time-stamp-start' and `time-stamp-end') -\"-9/^Last modified: %%$\" (sets `time-stamp-line-limit', -`time-stamp-start' and `time-stamp-end') +@c time-stamp-pattern: \"@set Time-stamp: %:B %1d, %Y$\" + (sets `time-stamp-start', `time-stamp-format' and `time-stamp-end') -\"@set Time-stamp: %:B %1d, %Y$\" (sets `time-stamp-start', -`time-stamp-format' and `time-stamp-end') +%% time-stamp-pattern: \"newcommand{\\\\\\\\timestamp}{%%}\" + (sets `time-stamp-start' and `time-stamp-end') -\"newcommand{\\\\\\\\timestamp}{%%}\" (sets `time-stamp-start' -and `time-stamp-end')") +See Info node `Time Stamp Customization' for more discussion and more +in-depth examples. + + +See also `time-stamp-count' and `time-stamp-inserts-lines'.") ;;;###autoload(put 'time-stamp-pattern 'safe-local-variable 'stringp) ;;;###autoload (defun time-stamp () - "Update any time stamp string(s) in the buffer. -This function looks for a time stamp template and updates it with -the current date, time, and/or other info. + "Update any time stamp strings (timestamps) in the buffer. +Look for a time stamp template and update it with the current +date, time, author, and/or other info. The template, which you manually create on one of the first 8 lines of the file before running this function, by default can look like @@ -311,12 +321,11 @@ To enable automatic time-stamping for only a specific file, add this line to a local variables list near the end of the file: eval: (add-hook \\='before-save-hook \\='time-stamp nil t) -If the file has no time-stamp template, this function does nothing. +If the file has no time stamp template or if `time-stamp-active' is nil, +this function does nothing. You can set `time-stamp-pattern' in a file's local variables list -to customize the information in the time stamp and where it is written. - -The time stamp is updated only if `time-stamp-active' is non-nil." +to customize the information in the time stamp and where it is written." (interactive) (let ((line-limit time-stamp-line-limit) (ts-start time-stamp-start) @@ -466,10 +475,15 @@ Internal helper used by `time-stamp-string-preprocess'." (format-time-string format time time-stamp-time-zone)) (defun time-stamp-string (&optional ts-format time) - "Generate the new string to be inserted by \\[time-stamp]. -Optionally use format TS-FORMAT instead of `time-stamp-format' to -format the string. Optional second argument TIME is only for testing; -normally the current time is used." + "Return the current time and other info formatted for \\[time-stamp]. +Optional first argument TS-FORMAT gives the format to use; it defaults +to the value of `time-stamp-format'. Thus, with no arguments, +this function returns the string `time-stamp' would use to update +its template in the buffer. The format accepted is similar to the +format used by `format-time-string' with some extensions; see the +documentation of `time-stamp-format' for details. +Optional second argument TIME is only for testing; normally the current +time is used. The time zone is determined by `time-stamp-time-zone'." (if (stringp (or ts-format (setq ts-format time-stamp-format))) (time-stamp-string-preprocess ts-format time))) commit 38fec86281efd78af24cc435307d55a00223db49 Author: Eli Zaretskii Date: Sun Mar 30 19:27:22 2025 +0300 ; Improve the documentation of 'slice' display spec (bug#77384). diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index 95b17032a74..3426e764e17 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi @@ -5603,12 +5603,20 @@ instead of the text that has the display specification. @item (slice @var{x} @var{y} @var{width} @var{height}) This specification together with @code{image} specifies a @dfn{slice} -(a partial area) of the image to display. The elements @var{y} and -@var{x} specify the top left corner of the slice, within the image; -@var{width} and @var{height} specify the width and height of the -slice. Integers are numbers of pixels. A floating-point number -in the range 0.0--1.0 stands for that fraction of the width or height -of the entire image. +(a partial area) of the image to display. More precisely, the +specification should have the following form: + +@lisp + ((slice @var{x} @var{y} @var{width} @var{height}) @var{image-desc}) +@end lisp + +@noindent +where @var{image-desc} is an image descriptor described above. The +elements @var{x} and @var{y} specify the top left corner of the slice, +within the image; @var{width} and @var{height} specify the width and +height of the slice. Integers are numbers of pixels. A floating-point +number in the range 0.0--1.0 stands for that fraction of the width or +height of the entire image. @item ((margin nil) @var{string}) A display specification of this form means to display @var{string} commit 3f05b455f7e52e70871f47810fe42f1f36fa783b Author: Eli Zaretskii Date: Sun Mar 30 17:38:25 2025 +0300 ; * src/editfns.c (Fmessage): Mention 'inhibit-message' (bug#77257). diff --git a/src/editfns.c b/src/editfns.c index e02cf14b968..ecc16a62f76 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -3159,6 +3159,9 @@ Return the message. In batch mode, the message is printed to the standard error stream, followed by a newline. +If the variable `inhibit-message' is non-nil, the message is not +displayed, only logged in the `*Messages*' buffer. + The first argument is a format control string, and the rest are data to be formatted under control of the string. Percent sign (%), grave accent (\\=`) and apostrophe (\\=') are special in the format; see commit a72cfc52cc36b8233969dafb202915d36c4c5a9e Merge: faa3fbe0105 10991877c8d Author: Michael Albinus Date: Sun Mar 30 16:18:04 2025 +0200 ; Merge from origin/emacs-30 The following commit was skipped: 10991877c8d Sync with Tramp 2.7.3-pre commit faa3fbe01058be98f9f6cd512d0723b99c9a6cf5 Merge: 4e85df0491b e6b4c0bcebf Author: Michael Albinus Date: Sun Mar 30 16:17:00 2025 +0200 Merge from origin/emacs-30 e6b4c0bcebf lisp/emacs-lisp/cl-macs.el (cl-labels): Fix docstring (bu... 7a976d1aaf7 Fix minor issues in documentation of `use-package' 99ff59bd66c PHP should be in the PATH, either locally or remotely. (b... 26873d5028e Avoid warning when loading 'go-ts-mode' a702f29a00b ; Fix package-version values a1fbc51dc71 ; * lisp/which-key.el (which-key-idle-delay): Fix package... # Conflicts: # lisp/progmodes/php-ts-mode.el # lisp/which-key.el commit 4e85df0491bd9f2f0c0f9a302c0851660a6feda6 Merge: 67e34f0ed8f 816a17a7115 Author: Michael Albinus Date: Sun Mar 30 16:14:21 2025 +0200 ; Merge from origin/emacs-30 The following commits were skipped: 816a17a7115 peg.texi: Fix bug#76555 even a bit more 4d396138b4f peg.texi: Fix bug#76555 even a bit more fb4db5c1a7b PEG: Fix bug#76555 commit 10991877c8d6e47837b8a8d25c44dab7803b9030 Author: Michael Albinus Date: Sun Mar 30 15:53:47 2025 +0200 Sync with Tramp 2.7.3-pre * doc/misc/tramp.texi: Use @dots{} where appropriate. (External methods): Precise remark on rsync speed. (Customizing Methods): Add incus-tramp. (Password handling): Mention expiration of cached passwords when a session timeout happens. (Predefined connection information): Mention also "androidsu" as special case of "tmpdir". (Ad-hoc multi-hops, Frequently Asked Questions): Improve description how ad-hoc multi-hop file names can be made persistent. (Bug#65039, Bug#76457) (Remote processes): Signals are not delivered to remote direct async processes. Say, that there are restrictions for transfer of binary data to remote direct async processes. (Bug Reports): Explain bisecting. (Frequently Asked Questions): Improve index. Speak about fingerprint readers. Recommend `small-temporary-file-directory' for ssh sockets. (External packages): Rename subsection "Timers, process filters, process sentinels, redisplay". (Extension packages): New node. (Top, Files directories and localnames): Add it to @menu. * doc/misc/trampver.texi: * lisp/net/trampver.el (tramp-version): Adapt Tramp versions. (tramp-repository-branch, tramp-repository-version): Remove ;;;###tramp-autoload cookie. * lisp/net/tramp-adb.el: * lisp/net/tramp-androidsu.el: * lisp/net/tramp-cache.el: * lisp/net/tramp-cmds.el: * lisp/net/tramp-compat.el: * lisp/net/tramp-container.el: * lisp/net/tramp-crypt.el: * lisp/net/tramp-ftp.el: * lisp/net/tramp-fuse.el: * lisp/net/tramp-gvfs.el: * lisp/net/tramp-integration.el: * lisp/net/tramp-message.el: * lisp/net/tramp-rclone.el: * lisp/net/tramp-sh.el: * lisp/net/tramp-smb.el: * lisp/net/tramp-sshfs.el: * lisp/net/tramp-sudoedit.el: * lisp/net/tramp.el: Use `when-let*', `if-let*' and `and-let*' consequently. (Bug#73441) * lisp/net/tramp-adb.el (tramp-adb-maybe-open-connection): Move setting of sentinel up. * lisp/net/tramp-archive.el (tramp-archive-file-name-p): Add ;;;###tramp-autoload cookie. (tramp-archive-local-file-name): New defun. * lisp/net/tramp-cache.el (tramp-connection-properties): Add link to the Tramp manual in the docstring. (tramp-get-connection-property, tramp-set-connection-property): Don't raise a debug message for the `tramp-cache-version' key. (with-tramp-saved-connection-property) (with-tramp-saved-connection-properties): Add traces. (tramp-dump-connection-properties): Don't save connection property "pw-spec". * lisp/net/tramp-cmds.el (tramp-repository-branch) (tramp-repository-version): Declare. * lisp/net/tramp-gvfs.el (tramp-gvfs-do-copy-or-rename-file): (tramp-gvfs-do-copy-or-rename-file): Don't use the truename. Handle symlinks. (tramp-gvfs-local-file-name): New defun. * lisp/net/tramp-message.el (tramp-repository-branch) (tramp-repository-version): Declare. (tramp-error-with-buffer, tramp-user-error): Don't redisplay in `sit-for'. (Bug#73718) (tramp-warning): Fix `lwarn' call. * lisp/net/tramp.el (tramp-read-passwd): * lisp/net/tramp-sh.el (tramp-maybe-open-connection): * lisp/net/tramp-sudoedit.el (tramp-sudoedit-send-command): Rename connection property "password-vector" to "pw-vector". * lisp/net/tramp-sh.el (tramp-methods) : Adapt `tramp-copy-args' argument. (tramp-get-remote-pipe-buf, tramp-actions-before-shell): Use `tramp-fingerprint-prompt-regexp'. (tramp-sh-handle-copy-directory): Apply `tramp-do-copy-or-rename-file-directly' if possible. (tramp-do-copy-or-rename-file): Refactor. Handle symlinks. (Bug#76678) (tramp-plink-option-exists-p): New defun. (tramp-ssh-or-plink-options): Rename from `tramp-ssh-controlmaster-options'. Adapt further plink options. (tramp-do-copy-or-rename-file-out-of-band) (tramp-maybe-open-connection): Adapt calls. (tramp-sh-handle-make-process): Don't set connection property "remote-pid", it's unused. (tramp-sh-handle-process-file): Do proper quoting. (tramp-vc-file-name-handler): Add `file-directory-p', which is used in `vc-find-root'. (Bug#74026) (tramp-maybe-open-connection): Use connection property "hop-vector". (tramp-get-remote-pipe-buf): Make it more robust. * lisp/net/tramp-smb.el (tramp-smb-errors): Add string. (tramp-smb-handle-copy-directory): Don't check existence of DIRNAME, this is done in `tramp-skeleton-copy-directory' already. (tramp-smb-handle-copy-file, tramp-smb-handle-rename-file): Refactor. * lisp/net/tramp-sshfs.el (tramp-sshfs-handle-process-file): STDERR is not implemented. * lisp/net/tramp-sudoedit.el (tramp-sudoedit-do-copy-or-rename-file): Don't use the truename. Handle symlinks. * lisp/net/tramp.el (tramp-mode): Set to nil on MS-DOS. (tramp-otp-password-prompt-regexp): Add TACC HPC prompt. (tramp-wrong-passwd-regexp): Add fingerprint messages. (tramp-fingerprint-prompt-regexp, tramp-use-fingerprint): New defcustoms. (tramp-string-empty-or-nil-p): Declare `tramp-suppress-trace' property. (tramp-barf-if-file-missing): Accept also symlinks. (tramp-skeleton-file-exists-p) (tramp-handle-file-directory-p): Protect against cyclic symlinks. (tramp-skeleton-make-symbolic-link): Drop volume letter when flushing. (tramp-skeleton-process-file): Raise a warning if STDERR is not implemented. (tramp-skeleton-set-file-modes-times-uid-gid): Fix typo. (tramp-compute-multi-hops): Check for `tramp-sh-file-name-handler-p', it works only for this. (tramp-handle-shell-command): Respect `async-shell-command-display-buffer'. (tramp-action-password, tramp-process-actions): Use connection property "hop-vector". (tramp-action-fingerprint, tramp-action-show-message): New defuns. (tramp-action-show-and-confirm-message): Start check at (point-min). (tramp-wait-for-regexp): Don't redisplay in `sit-for'. (Bug#73718) (tramp-convert-file-attributes): Don't cache "file-attributes-ID-FORMAT". (tramp-read-passwd, tramp-clear-passwd): Rewrite. (Bug#74105) * test/lisp/net/tramp-tests.el (auth-source-cache-expiry) (ert-batch-backtrace-right-margin): Set them to nil. (vc-handled-backends): Suppress if noninteractive. (tramp--test-enabled): Cleanup also `tramp-compat-temporary-file-directory'. (tramp-test11-copy-file, tramp-test12-rename-file) (tramp-test18-file-attributes, tramp--test-deftest-with-stat) (tramp--test-deftest-with-perl, tramp--test-deftest-with-ls) (tramp--test-deftest-without-file-attributes) (tramp-test21-file-links, tramp-test28-process-file) (tramp-test32-shell-command, tramp-test36-vc-registered) (tramp-test39-make-lock-file-name, tramp--test-check-files) (tramp-test42-utf8, tramp-test43-file-system-info) (tramp-test44-file-user-group-ids, tramp-test47-read-password): Adapt tests. (tramp-test47-read-fingerprint): New test. diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi index ddd624db9c8..5a2e44456ee 100644 --- a/doc/misc/tramp.texi +++ b/doc/misc/tramp.texi @@ -167,6 +167,7 @@ How file names, directories and localnames are mangled and managed * Temporary directory:: Where temporary files are kept. * Localname deconstruction:: Breaking a localname into its components. * External packages:: Integration with external Lisp packages. +* Extension packages:: Adding new methods to @value{tramp}. @end detailmenu @end menu @@ -1112,7 +1113,8 @@ command to transfer is similar to the @option{scp} method. @command{rsync} performs much better than @command{scp} when transferring files that exist on both hosts. However, this advantage -is lost if the file exists only on one side of the connection. +is lost if the file exists only on one side of the connection, during +the first file transfer. This method supports the @samp{-p} argument. @@ -1934,6 +1936,14 @@ They can be installed with Emacs's Package Manager. This includes @c @item ibuffer-tramp.el @c Contact Svend Sorensen +@cindex method @option{incus} +@cindex @option{incus} method +@item incus-tramp +Integration for Incus containers. A container is accessed via +@file{@trampfn{incus,user@@container,/path/to/file}}, @samp{user} and +@samp{container} have the same meaning as with the @option{docker} +method. + @cindex method @option{lxc} @cindex @option{lxc} method @item lxc-tramp @@ -2211,6 +2221,12 @@ this interactively. @vindex auth-source-do-cache Set @code{auth-source-do-cache} to @code{nil} to disable password caching. +For connections which use a session-timeout, like @option{sudo}, +@option{doas} and @option{run0}, the password cache is expired by +@value{tramp} when the session expires (@pxref{Predefined connection +information}). However, this makes only sense if the password cannot +be retrieved from a persistent authentication file or store. + @node Connection caching @section Reusing connection related information @@ -2332,9 +2348,9 @@ to a remote home directory, like @option{adb}, @option{rclone} and @item @t{"tmpdir"} The temporary directory on the remote host. If not specified, the -default value is @t{"/data/local/tmp"} for the @option{adb} method, -@t{"/C$/Temp"} for the @option{smb} method, and @t{"/tmp"} otherwise. -@ref{Temporary directory}. +default value is @t{"/data/local/tmp"} for the @option{adb} and +@option{androidsu} methods, @t{"/C$/Temp"} for the @option{smb} +method, and @t{"/tmp"} otherwise. @ref{Temporary directory}. @item @t{"posix"} @@ -2623,7 +2639,7 @@ will help: @example @group if test "$TERM" = "dumb"; then - ... + @dots{} fi @end group @end example @@ -3312,8 +3328,8 @@ Another option is to create better backup file naming with user and host names prefixed to the file name. For example, transforming @file{/etc/secretfile} to @file{~/.emacs.d/backups/!su:root@@localhost:!etc!secretfile}, set the -@value{tramp} user option @code{tramp-backup-directory-alist} from -the existing user option @code{backup-directory-alist}. +@value{tramp} user option @code{tramp-backup-directory-alist} from the +existing user option @code{backup-directory-alist}. Then @value{tramp} backs up to a file name that is transformed with a prefix consisting of the DIRECTORY name. This file name prefixing @@ -3335,10 +3351,12 @@ Example: The backup file name of @file{@trampfn{su,root@@localhost,/etc/secretfile}} would be @ifset unified -@file{@trampfn{su,root@@localhost,~/.emacs.d/backups/!su:root@@localhost:!etc!secretfile~}}. +@file{@trampfn{su,root@@localhost,~/.emacs.d/backups/@c +!su:root@@localhost:!etc!secretfile~}}. @end ifset @ifset separate -@file{@trampfn{su,root@@localhost,~/.emacs.d/backups/![su!root@@localhost]!etc!secretfile~}}. +@file{@trampfn{su,root@@localhost,~/.emacs.d/backups/@c +![su!root@@localhost]!etc!secretfile~}}. @end ifset @vindex auto-save-file-name-transforms @@ -3783,15 +3801,21 @@ ssh@value{postfixhop}you@@remotehost@value{postfix}/path @key{RET}} Each involved method must be an inline method (@pxref{Inline methods}). -@value{tramp} adds the ad-hoc definitions on the fly to -@code{tramp-default-proxies-alist} and is available for reuse during -that Emacs session. Subsequent @value{tramp} connections to the same -remote host can then use the shortcut form: -@samp{@trampfn{ssh,you@@remotehost,/path}}. +@value{tramp} adds the ad-hoc definitions as an ephemeral record to +@code{tramp-default-proxies-alist}, which are available for reuse +during that Emacs session. Subsequent @value{tramp} connections to +the same remote host can then use the abbreviated form +@file{@trampfn{ssh,you@@remotehost,/path}}. +@anchor{tramp-show-ad-hoc-proxies} @defopt tramp-show-ad-hoc-proxies If this user option is non-@code{nil}, ad-hoc definitions are kept in -remote file names instead of showing the shortcuts. +remote file names instead of showing the abbreviations. This is +useful if the ad-hoc proxy definition shall be used in further Emacs +sessions, kept in configuration files of recentf and other packages. + +A non-@code{nil} setting of this option has effect only if set before +the connection is established. @lisp (customize-set-variable 'tramp-show-ad-hoc-proxies t) @@ -3802,10 +3826,18 @@ Ad-hoc definitions are removed from @code{tramp-default-proxies-alist} via the command @kbd{M-x tramp-cleanup-all-connections @key{RET}} (@pxref{Cleanup remote connections}). +@anchor{tramp-save-ad-hoc-proxies} @defopt tramp-save-ad-hoc-proxies For ad-hoc definitions to be saved automatically in @code{tramp-default-proxies-alist} for future Emacs sessions, set -@code{tramp-save-ad-hoc-proxies} to non-@code{nil}. +@code{tramp-save-ad-hoc-proxies} to non-@code{nil}. The resulting +user option @code{tramp-default-proxies-alist} is saved in your +@file{.emacs} file. + +If you use saved configuration files with abbreviated ad-hoc proxy +definitions on another host, for example by distribution of the +@code{recentf-save-file}, you must distribute your @file{.emacs} file +as well. @lisp (customize-set-variable 'tramp-save-ad-hoc-proxies t) @@ -4600,7 +4632,9 @@ It cannot be killed via @code{interrupt-process}. It does not report the remote terminal name via @code{process-tty-name}. @item -It does not set process property @code{remote-pid}. +It does not set process property @code{remote-pid}. Consequently, +signals cannot be sent to that remote process; they are sent to the +local process instead, which establishes the connection. @item It fails, when the command is too long. This can happen on @@ -4622,6 +4656,15 @@ by the connection property @t{"direct-async-process"}. This is still supported but deprecated, and it will be removed in a future @value{tramp} version. +@strong{Note}: For the @option{ssh} and @option{scp} methods, +@value{tramp} does not faithfully pass binary sequences on to the +process. You can change this by changing the respective connection +argument (@pxref{Predefined connection information}) via + +@lisp +(add-to-list 'tramp-connection-properties (list "/ssh:" "direct-async" t)) +@end lisp + @node Cleanup remote connections @section Cleanup remote connections @@ -5013,8 +5056,8 @@ An archive file name can be a remote file name, as in Since all file operations are mapped internally to @acronym{GVFS} operations, remote file names supported by @code{tramp-gvfs} perform better, because no local copy of the file archive must be downloaded -first. For example, @samp{/sftp:user@@host:...} performs better than -the similar @samp{/scp:user@@host:...}. See the constant +first. For example, @samp{/sftp:user@@host:@dots{}} performs better +than the similar @samp{/scp:user@@host:@dots{}}. See the constant @code{tramp-archive-all-gvfs-methods} for a complete list of @code{tramp-gvfs} supported method names. @@ -5138,6 +5181,17 @@ this stage. Also note that with a verbosity level of 6 or greater, the contents of files and directories will be included in the debug buffer. Passwords typed in @value{tramp} will never be included there. +If you find, that using @value{tramp} with @command{emacs -Q} doesn't +cause any problem, you might check your init file for the suspicious +configuration by bisecting it. That is, comment out about half of the +init file, and check whether the problem still arises when calling +@command{emacs}. If yes, comment out half of the still active code. +Otherwise, comment out the active code, and uncomment the just +commented code. + +Call @command{emacs}, again. Reiterate, until you find the suspicious +configuration. + @node Frequently Asked Questions @chapter Frequently Asked Questions @@ -5463,6 +5517,23 @@ nitrokey, or titankey. (residential) keys by @command{ssh-agent}. As workaround, you might disable @command{ssh-agent} for such keys. + +@item +Does @value{tramp} support fingerprint readers? + +Yes. A fingerprint reader can be used as an additional authentication +method for @option{sudo}-based logins. @value{tramp} supports the +required additional handshaking messages@footnote{It supports +fingerprint readers driven by @command{fprintd}.}. If the fingerprint +isn't recognized by the fingerprint reader in time, authentication +falls back to requesting a password. + +@vindex tramp-use-fingerprint +If the user option @code{tramp-use-fingerprint} is @code{nil}, +@value{tramp} interrupts the fingerprint request, falling back to +password authentication immediately. + + @item @value{tramp} does not connect to Samba or MS Windows hosts running SMB1 connection protocol @@ -5646,6 +5717,7 @@ connection-local value. @end group @end lisp +@vindex XDG_DATA_HOME@r{, environment variable} If Emacs is configured to use the XDG conventions for the trash directory, remote files cannot be restored with the respective tools, because those conventions don't specify remote paths. Such files must @@ -5895,18 +5967,30 @@ Thanks to @value{tramp} users for contributing to these recipes. @item -Why saved multi-hop file names do not work in a new Emacs session? +Why don't saved ad-hoc multi-hop file names work in a new Emacs session? + +By default, ad-hoc multi-hop file names are abbreviated after +completing the initial connection. These abbreviated forms retain +only the final hop, and so only the Emacs session that generated the +abbreviated form can understand it. @xref{Ad-hoc multi-hops}. -When saving ad-hoc multi-hop @value{tramp} file names (@pxref{Ad-hoc -multi-hops}) via bookmarks, recent files, filecache, bbdb, or another -package, use the full ad-hoc file name including all hops, like -@file{@trampfn{ssh,bird@@bastion|ssh@value{postfixhop}@c -news.my.domain,/opt/news/etc}}. +For example, after connecting to @file{@trampfn{ssh,bird@@bastion|@c +ssh@value{postfixhop}news@@news.my.domain,/opt/news/etc}}, the file +name becomes @file{@trampfn{ssh,news@@news.my.domain,/opt/news/etc}}. +If the abbreviated form is saved in a bookmark, the recent files list, +bbdb, or similar, a new Emacs session has no way to know that the +connection must go through @samp{bird@@bastion} first. -Alternatively, when saving abbreviated multi-hop file names -@file{@trampfn{ssh,news@@news.my.domain,/opt/news/etc}}, the user -option @code{tramp-save-ad-hoc-proxies} must be set non-@code{nil} -value. +There are two mechanisms to deal with this. The first is to customize +@code{tramp-show-ad-hoc-proxies} to a non-@code{nil} value, which +disables abbreviation. Then the fully-qualified ad-hoc multi-hop file +name is the one that will be both displayed and saved. +@xref{tramp-show-ad-hoc-proxies}. + +Alternatively, you can customize @code{tramp-save-ad-hoc-proxies} to a +non-@code{nil} value which means to save the information how an +abbreviated multi-hop file name can be expanded. +@xref{tramp-save-ad-hoc-proxies}. @item @@ -5965,6 +6049,8 @@ $ export EDITOR=/path/to/emacsclient.sh @item How to determine whether a buffer is remote? +@findex file-remote-p +@vindex default-directory The buffer-local variable @code{default-directory} tells this. If the form @code{(file-remote-p default-directory)} returns non-@code{nil}, the buffer is remote. See the optional arguments of @@ -6077,6 +6163,36 @@ as above in your @file{~/.emacs}: @end lisp +@item +I get an error @samp{unix_listener: path +"/very/long/path/.cache/emacs/tramp.XXX" too long for Unix domain +socket} when connecting via @option{ssh} to a remote host. + +@vindex small-temporary-file-directory +By default, @value{tramp} uses the directory @file{~/.cache/emacs/} +for creation of OpenSSH Unix domain sockets. On GNU/Linux, domain +sockets have a much lower maximum path length (currently 107 +characters) than normal files. + +You can change this directory by setting the user option +@code{small-temporary-file-directory} to another name, like + +@lisp +@group +(unless small-temporary-file-directory + (customize-set-variable + 'small-temporary-file-directory + (format "/run/user/%d/emacs/" (user-uid))) + (make-directory small-temporary-file-directory t)) +@end group +@end lisp + +@vindex XDG_RUNTIME_DIR@r{, environment variable} +@t{"/run/user/UID"} is the value of the environment variable +@env{XDG_RUNTIME_DIR}, which you can use instead via @code{(getenv +"XDG_RUNTIME_DIR")}. + + @item How to ignore errors when changing file attributes? @@ -6209,6 +6325,7 @@ programs. * Temporary directory:: Where temporary files are kept. * Localname deconstruction:: Splitting a localname into its component parts. * External packages:: Integrating with external Lisp packages. +* Extension packages:: Adding new methods to @value{tramp}. @end menu @@ -6326,7 +6443,7 @@ root directory, it is most likely sufficient to make the @code{default-directory} of the process buffer as the root directory. -@subsection Timers +@subsection Timers, process filters, process sentinels, redisplay @vindex remote-file-error Timers run asynchronously at any time when Emacs is waiting for @@ -6345,6 +6462,133 @@ wrapping the timer function body as follows: @end group @end lisp +A similar problem could happen with process filters, process +sentinels, and redisplay (updating the mode line). + + +@node Extension packages +@section Adding new methods to @value{tramp} + +There are two ways to add new methods to @value{tramp}: writing a new +backend including an own file name handler, or adding the new method, +using the existing @code{tramp-sh-file-name-handler}. The former +shall happen inside the @value{tramp} repository, and it isn't +discussed here. The latter means usually a new ELPA package. +@pxref{Customizing Methods} for some examples. + + +@subsection Writing an own ELPA package + +An external ELPA package @file{foo-tramp.el}, which intends to +provide a new @value{tramp} method, say @option{foo}, must add this +new method to the variable @code{tramp-methods}. This variable is an +alist with elements @code{(@var{name} @var{param1} @var{param2} +@dots{})}. + +@var{name} is the method name, @t{"foo"} in this case. +@var{param}@t{x} is a pair of the form @code{(@var{key} @var{value})}. +See the docstring of variable @code{tramp-methods} for possible +@var{key}s and @var{value}s. An example would be + +@lisp +@group +(add-to-list + 'tramp-methods + `("foo" + (tramp-login-program ,foo-tramp-executable) + (tramp-login-args (("exec") ("%h") ("--") ("su - %u"))) + (tramp-remote-shell "/bin/sh") + (tramp-remote-shell-args ("-i" "-c")))) +@end group +@end lisp + +@code{foo-tramp-executable} in this example would be a Lisp constant, +which is the program name of @command{foo}. + +Another initialization could tell @value{tramp} which are the default +user and host name for method @option{foo}. This is done by calling +@code{tramp-set-completion-function}: + +@lisp +@group +(tramp-set-completion-function + "foo" + '((tramp-foo--completion-function @var{arg}))) +@end group +@end lisp + +@code{tramp-foo--completion-function} is a function, which returns +completion candidates. @var{arg}, a string, is the argument for the +completion function, for example a file name to read from. +@pxref{Customizing Completion} for details. + +Finally, it might also be helpful to define default user or host names +for method @option{foo}, in case a remote file name leaves them empty. +This can be performed by calling + +@lisp +@group +(add-to-list 'tramp-default-user-alist '("foo" nil "root")) +(add-to-list 'tramp-default-host-alist '("foo" nil "localhost")) +@end group +@end lisp + +@pxref{Default User} and @ref{Default Host} explaining the user options +@code{tramp-default-user-alist} and @code{tramp-default-host-alist}. + + +@subsection Making a customized method optional + +The settings of the previous subsection are global in the package +@file{foo-tramp.el}, meaning they are activated when loading +@code{foo-tramp}. Sometimes, it is desired to make these settings +available without loading the whole package @code{foo-tramp}, but +declaring the new method @option{foo} as optional method only. In +this case, declare a function @code{tramp-enable-foo-method} which +collects the initialization. This function must be auto loaded. + +@lisp +@group +;;;###autoload +(defun tramp-enable-foo-method () + (add-to-list 'tramp-methods '("foo" @dots{})) + (tramp-set-completion-function "foo" @dots{}) + (add-to-list 'tramp-default-user-alist '("foo" @dots{})) + (add-to-list 'tramp-default-host-alist '("foo" @dots{}))) +@end group +@end lisp + +Then, you can activate method @option{foo} by calling @kbd{M-x +tramp-enable-method @key{RET} foo @key{RET}}. @pxref{Optional methods}. + + +@subsection Activating a customized method without loading the package + +If you want to make method @option{foo} known after loading +@value{tramp}, without loading the package @file{foo-tramp.el}, you +must autoload the implementation of function +@code{tramp-enable-foo-method}. Add the following code in +@file{foo-tramp.el}: + +@lisp +@group +;;;###autoload +(progn + (defun tramp-enable-foo-method () + (add-to-list 'tramp-methods '("foo" @dots{})) + (tramp-set-completion-function "foo" @dots{}) + (add-to-list 'tramp-default-user-alist '("foo" @dots{})) + (add-to-list 'tramp-default-host-alist '("foo" @dots{})))) + +;;;###autoload +(with-eval-after-load 'tramp (tramp-enable-method "foo")) +@end group +@end lisp + +The trick is to wrap the function definition of +@code{tramp-enable-foo-method} with @code{progn} for the +@code{;;;###autoload} cookie. + @node Traces and Profiles @chapter How to Customize Traces diff --git a/doc/misc/trampver.texi b/doc/misc/trampver.texi index e88239dba1a..ca3300ee684 100644 --- a/doc/misc/trampver.texi +++ b/doc/misc/trampver.texi @@ -7,7 +7,7 @@ @c In the Tramp GIT, the version number and the bug report address @c are auto-frobbed from configure.ac. -@set trampver 2.7.1.30.1 +@set trampver 2.7.3-pre @set trampurl https://www.gnu.org/software/tramp/ @set tramp-bug-report-address tramp-devel@@gnu.org @set emacsver 27.1 diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el index 199c4b7ed7f..1ecabd8165f 100644 --- a/lisp/net/tramp-adb.el +++ b/lisp/net/tramp-adb.el @@ -201,15 +201,15 @@ It is used for TCP/IP devices." ;;;###tramp-autoload (defsubst tramp-adb-file-name-p (vec-or-filename) "Check if it's a VEC-OR-FILENAME for ADB." - (when-let* ((vec (tramp-ensure-dissected-file-name vec-or-filename))) - (string= (tramp-file-name-method vec) tramp-adb-method))) + (and-let* ((vec (tramp-ensure-dissected-file-name vec-or-filename)) + ((string= (tramp-file-name-method vec) tramp-adb-method))))) ;;;###tramp-autoload (defun tramp-adb-file-name-handler (operation &rest args) "Invoke the ADB handler for OPERATION. First arg specifies the OPERATION, second arg is a list of arguments to pass to the OPERATION." - (if-let ((fn (assoc operation tramp-adb-file-name-handler-alist))) + (if-let* ((fn (assoc operation tramp-adb-file-name-handler-alist))) (prog1 (save-match-data (apply (cdr fn) args)) (setq tramp-debug-message-fnh-function (cdr fn))) (prog1 (tramp-run-real-handler operation args) @@ -616,7 +616,7 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored." (tramp-shell-quote-argument l2)) "Error copying %s to %s" filename newname)) - (if-let ((tmpfile (file-local-copy filename))) + (if-let* ((tmpfile (file-local-copy filename))) ;; Remote filename. (condition-case err (rename-file tmpfile newname ok-if-already-exists) @@ -998,7 +998,7 @@ error and non-nil on success." ;; ;; mksh uses UTF-8 internally, but is currently limited to the ;; BMP (basic multilingua plane), which means U+0000 to - ;; U+FFFD. If you want to use SMP codepoints (U-00010000 to + ;; U+FFFD. If you want to use SMP codepoints (U-00010000 to ;; U-0010FFFD) on the input line, you currently have to disable ;; the UTF-8 mode (sorry). (tramp-adb-execute-adb-command vec "shell" command) @@ -1125,6 +1125,11 @@ connection if a previous connection has died for some reason." tramp-adb-program args))) (prompt (md5 (concat (prin1-to-string process-environment) (current-time-string))))) + + ;; Set sentinel. Initialize variables. + (set-process-sentinel p #'tramp-process-sentinel) + (tramp-post-process-creation p vec) + ;; Wait for initial prompt. On some devices, it needs ;; an initial RET, in order to get it. (sleep-for 0.1) @@ -1133,10 +1138,6 @@ connection if a previous connection has died for some reason." (unless (process-live-p p) (tramp-error vec 'file-error "Terminated!")) - ;; Set sentinel. Initialize variables. - (set-process-sentinel p #'tramp-process-sentinel) - (tramp-post-process-creation p vec) - ;; Set connection-local variables. (tramp-set-connection-local-variables vec) diff --git a/lisp/net/tramp-androidsu.el b/lisp/net/tramp-androidsu.el index 6fbd1938c50..4fb45cb16f3 100644 --- a/lisp/net/tramp-androidsu.el +++ b/lisp/net/tramp-androidsu.el @@ -503,15 +503,15 @@ FUNCTION." ;;;###tramp-autoload (defsubst tramp-androidsu-file-name-p (vec-or-filename) "Check whether VEC-OR-FILENAME is for the `androidsu' method." - (when-let* ((vec (tramp-ensure-dissected-file-name vec-or-filename))) - (equal (tramp-file-name-method vec) tramp-androidsu-method))) + (and-let* ((vec (tramp-ensure-dissected-file-name vec-or-filename)) + ((equal (tramp-file-name-method vec) tramp-androidsu-method))))) ;;;###tramp-autoload (defun tramp-androidsu-file-name-handler (operation &rest args) "Invoke the `androidsu' handler for OPERATION. First arg specifies the OPERATION, second arg is a list of arguments to pass to the OPERATION." - (if-let ((fn (assoc operation tramp-androidsu-file-name-handler-alist))) + (if-let* ((fn (assoc operation tramp-androidsu-file-name-handler-alist))) (prog1 (save-match-data (apply (cdr fn) args)) (setq tramp-debug-message-fnh-function (cdr fn))) (prog1 (tramp-run-real-handler operation args) diff --git a/lisp/net/tramp-archive.el b/lisp/net/tramp-archive.el index 07870af5cd2..914499be9e5 100644 --- a/lisp/net/tramp-archive.el +++ b/lisp/net/tramp-archive.el @@ -426,6 +426,7 @@ arguments to pass to the OPERATION." ;; File name conversions. +;;;###tramp-autoload (defun tramp-archive-file-name-p (name) "Return t if NAME is a string with archive file name syntax." (and (stringp name) @@ -581,6 +582,12 @@ offered." "Return NAME in GVFS syntax." (tramp-make-tramp-file-name (tramp-archive-dissect-file-name name))) +;; This is used in GNU ELPA package tramp-locproc.el. +(defun tramp-archive-local-file-name (filename) + "Return local mount name of FILENAME." + (let ((tramp-methods (cons `(,tramp-archive-method) tramp-methods))) + (tramp-gvfs-local-file-name (tramp-archive-gvfs-file-name filename)))) + ;; File name primitives. diff --git a/lisp/net/tramp-cache.el b/lisp/net/tramp-cache.el index a9ca6fa20dd..14ee10416ab 100644 --- a/lisp/net/tramp-cache.el +++ b/lisp/net/tramp-cache.el @@ -68,10 +68,10 @@ ;; Some properties are handled special: ;; -;; - "process-name", "process-buffer" and "first-password-request" are -;; not saved in the file `tramp-persistency-file-name', although -;; being connection properties related to a `tramp-file-name' -;; structure. +;; - "process-name", "process-buffer", "first-password-request" and +;; "pw-spec" are not saved in the file +;; `tramp-persistency-file-name', although being connection +;; properties related to a `tramp-file-name' structure. ;; ;; - Reusable properties, which should not be saved, are kept in the ;; process key retrieved by `tramp-get-process' (the main connection @@ -97,8 +97,11 @@ Every entry has the form (REGEXP PROPERTY VALUE). The regexp matches remote file names. It can be nil. PROPERTY is a string, and VALUE the corresponding value. They are used, if there is no -matching entry for PROPERTY in `tramp-cache-data'. For more -details see the info pages." +matching entry for PROPERTY in `tramp-cache-data'. + +PROPERTY can also be a string representing a parameter in +`tramp-methods'. For more details see the Info node `(tramp) Predefined +connection information'." :group 'tramp :version "24.4" :type '(repeat (list (choice :tag "File Name regexp" regexp (const nil)) @@ -234,8 +237,8 @@ Return VALUE." "Remove some properties of FILE's upper directory." (when (file-name-absolute-p file) ;; `file-name-directory' can return nil, for example for "~". - (when-let ((file (file-name-directory file)) - (file (directory-file-name file))) + (when-let* ((file (file-name-directory file)) + (file (directory-file-name file))) (setq key (tramp-file-name-unify key file)) (unless (eq key tramp-cache-undefined) (dolist (property (hash-table-keys (tramp-get-hash-table key))) @@ -388,7 +391,8 @@ the connection, return DEFAULT." (not (and (processp key) (not (process-live-p key))))) (setq value cached cache-used t)) - (tramp-message key 7 "%s %s; cache used: %s" property value cache-used) + (unless (eq key tramp-cache-version) + (tramp-message key 7 "%s %s; cache used: %s" property value cache-used)) value)) ;;;###tramp-autoload @@ -401,11 +405,12 @@ is `tramp-cache-undefined', nothing is set. PROPERTY is set persistent when KEY is a `tramp-file-name' structure. Return VALUE." (setq key (tramp-file-name-unify key)) - (when-let ((hash (tramp-get-hash-table key))) + (when-let* ((hash (tramp-get-hash-table key))) (puthash property value hash)) (setq tramp-cache-data-changed (or tramp-cache-data-changed (tramp-file-name-p key))) - (tramp-message key 7 "%s %s" property value) + (unless (eq key tramp-cache-version) + (tramp-message key 7 "%s %s" property value)) value) ;;;###tramp-autoload @@ -425,7 +430,7 @@ KEY identifies the connection, it is either a process or a used to cache connection properties of the local machine. PROPERTY is set persistent when KEY is a `tramp-file-name' structure." (setq key (tramp-file-name-unify key)) - (when-let ((hash (tramp-get-hash-table key))) + (when-let* ((hash (tramp-get-hash-table key))) (remhash property hash)) (setq tramp-cache-data-changed (or tramp-cache-data-changed (tramp-file-name-p key))) @@ -440,7 +445,7 @@ used to cache connection properties of the local machine." (setq key (tramp-file-name-unify key)) (tramp-message key 7 "%s %s" key - (when-let ((hash (gethash key tramp-cache-data))) + (when-let* ((hash (gethash key tramp-cache-data))) (hash-table-keys hash))) (setq tramp-cache-data-changed (or tramp-cache-data-changed (tramp-file-name-p key))) @@ -468,8 +473,10 @@ used to cache connection properties of the local machine." (hash (tramp-get-hash-table key)) (cached (and (hash-table-p hash) (gethash ,property hash tramp-cache-undefined)))) + (tramp-message key 7 "Saved %s %s" property cached) (unwind-protect (progn ,@body) ;; Reset PROPERTY. Recompute hash, it could have been flushed. + (tramp-message key 7 "Restored %s %s" property cached) (setq hash (tramp-get-hash-table key)) (if (not (eq cached tramp-cache-undefined)) (puthash ,property cached hash) @@ -486,9 +493,13 @@ PROPERTIES is a list of file properties (strings)." (mapcar (lambda (property) (cons property (gethash property hash tramp-cache-undefined))) - ,properties))) + ,properties)) + ;; Avoid superfluous debug buffers during host name completion. + (tramp-verbose (if minibuffer-completing-file-name 0 tramp-verbose))) + (tramp-message key 7 "Saved %s" values) (unwind-protect (progn ,@body) ;; Reset PROPERTIES. Recompute hash, it could have been flushed. + (tramp-message key 7 "Restored %s" values) (setq hash (tramp-get-hash-table key)) (dolist (value values) (if (not (eq (cdr value) tramp-cache-undefined)) @@ -579,7 +590,8 @@ PROPERTIES is a list of file properties (strings)." (progn (remhash "process-name" value) (remhash "process-buffer" value) - (remhash "first-password-request" value)) + (remhash "first-password-request" value) + (remhash "pw-spec" value)) (remhash key cache))) cache) ;; Dump it. diff --git a/lisp/net/tramp-cmds.el b/lisp/net/tramp-cmds.el index 6bdc940726d..f03fa5cf404 100644 --- a/lisp/net/tramp-cmds.el +++ b/lisp/net/tramp-cmds.el @@ -39,6 +39,8 @@ (defvar mm-7bit-chars) (defvar reporter-eval-buffer) (defvar reporter-prompt-for-summary-p) +(defvar tramp-repository-branch) +(defvar tramp-repository-version) ;;;###tramp-autoload (defun tramp-change-syntax (&optional syntax) @@ -609,7 +611,9 @@ If the buffer runs `dired', the buffer is reverted." (interactive) (cond ((buffer-file-name) - (find-alternate-file (tramp-file-name-with-sudo (buffer-file-name)))) + (let ((pos (point))) + (find-alternate-file (tramp-file-name-with-sudo (buffer-file-name))) + (goto-char pos))) ((tramp-dired-buffer-p) (dired-unadvertise (expand-file-name default-directory)) (setq default-directory (tramp-file-name-with-sudo default-directory) @@ -644,7 +648,7 @@ This is needed if there are compatibility problems." ;; (declare (completion tramp-recompile-elpa-command-completion-p)) (interactive) ;; We expect just one Tramp package is installed. - (when-let + (when-let* ((dir (tramp-compat-funcall 'package-desc-dir (car (alist-get 'tramp (bound-and-true-p package-alist)))))) @@ -741,8 +745,8 @@ buffer in your bug report. (defun tramp-reporter-dump-variable (varsym mailbuf) "Pretty-print the value of the variable in symbol VARSYM." - (when-let ((reporter-eval-buffer reporter-eval-buffer) - (val (buffer-local-value varsym reporter-eval-buffer))) + (when-let* ((reporter-eval-buffer reporter-eval-buffer) + (val (buffer-local-value varsym reporter-eval-buffer))) (if (hash-table-p val) ;; Pretty print the cache. diff --git a/lisp/net/tramp-compat.el b/lisp/net/tramp-compat.el index 6a4cf4a9007..c9629a6f3c9 100644 --- a/lisp/net/tramp-compat.el +++ b/lisp/net/tramp-compat.el @@ -76,11 +76,10 @@ ;; an infloop. We try to follow the XDG specification, for security reasons. (defconst tramp-compat-temporary-file-directory (file-name-as-directory - (if-let ((xdg (xdg-cache-home)) - ((file-directory-p xdg)) - ((file-writable-p xdg))) - ;; We can use `file-name-concat' starting with Emacs 28.1. - (prog1 (setq xdg (concat (file-name-as-directory xdg) "emacs")) + (if-let* ((xdg (xdg-cache-home)) + ((file-directory-p xdg)) + ((file-writable-p xdg))) + (prog1 (setq xdg (expand-file-name "emacs" xdg)) (make-directory xdg t)) (eval (car (get 'temporary-file-directory 'standard-value)) t))) "The default value of `temporary-file-directory' for Tramp.") @@ -368,7 +367,7 @@ value is the default binding of the variable." (if (not criteria) ,variable (hack-connection-local-variables criteria) - (if-let ((result (assq ',variable connection-local-variables-alist))) + (if-let* ((result (assq ',variable connection-local-variables-alist))) (cdr result) ,variable))))) diff --git a/lisp/net/tramp-container.el b/lisp/net/tramp-container.el index afb82537663..8328b5c8684 100644 --- a/lisp/net/tramp-container.el +++ b/lisp/net/tramp-container.el @@ -279,19 +279,19 @@ or `tramp-podmancp-method'. This function is used by `tramp-set-completion-function', please see its function help for a description of the format." (tramp-skeleton-completion-function method - (when-let ((raw-list - (shell-command-to-string - (concat program " ps --format '{{.ID}}\t{{.Names}}'"))) - (lines (split-string raw-list "\n" 'omit)) - (names - (tramp-compat-seq-keep - (lambda (line) - (when (string-match - (rx bol (group (1+ nonl)) - "\t" (? (group (1+ nonl))) eol) - line) - (or (match-string 2 line) (match-string 1 line)))) - lines))) + (when-let* ((raw-list + (shell-command-to-string + (concat program " ps --format '{{.ID}}\t{{.Names}}'"))) + (lines (split-string raw-list "\n" 'omit)) + (names + (tramp-compat-seq-keep + (lambda (line) + (when (string-match + (rx bol (group (1+ nonl)) + "\t" (? (group (1+ nonl))) eol) + line) + (or (match-string 2 line) (match-string 1 line)))) + lines))) (mapcar (lambda (name) (list nil name)) names)))) ;;;###tramp-autoload @@ -301,19 +301,19 @@ see its function help for a description of the format." This function is used by `tramp-set-completion-function', please see its function help for a description of the format." (tramp-skeleton-completion-function method - (when-let ((raw-list - (shell-command-to-string - (concat - program " " - (tramp-kubernetes--context-namespace vec) - " get pods --no-headers" - ;; We separate pods by "|". Inside a pod, its name - ;; is separated from the containers by ":". - ;; Containers are separated by ",". - " -o jsonpath='{range .items[*]}{\"|\"}{.metadata.name}" - "{\":\"}{range .spec.containers[*]}{.name}{\",\"}" - "{end}{end}'"))) - (lines (split-string raw-list "|" 'omit))) + (when-let* ((raw-list + (shell-command-to-string + (concat + program " " + (tramp-kubernetes--context-namespace vec) + " get pods --no-headers" + ;; We separate pods by "|". Inside a pod, its name + ;; is separated from the containers by ":". + ;; Containers are separated by ",". + " -o jsonpath='{range .items[*]}{\"|\"}{.metadata.name}" + "{\":\"}{range .spec.containers[*]}{.name}{\",\"}" + "{end}{end}'"))) + (lines (split-string raw-list "|" 'omit))) (let (names) (dolist (line lines) (setq line (split-string line ":" 'omit)) @@ -382,7 +382,7 @@ Obey `tramp-kubernetes-context'" (defun tramp-kubernetes--current-context-data (vec) "Return Kubernetes current context data as JSON string." - (when-let ((current-context (tramp-kubernetes--current-context vec))) + (when-let* ((current-context (tramp-kubernetes--current-context vec))) (tramp-skeleton-kubernetes-vector vec (with-temp-buffer (when (zerop @@ -398,7 +398,7 @@ Obey `tramp-kubernetes-context'" "The kubectl options for context and namespace as string." (mapconcat #'identity - `(,(when-let ((context (tramp-kubernetes--current-context vec))) + `(,(when-let* ((context (tramp-kubernetes--current-context vec))) (format "--context=%s" context)) ,(when tramp-kubernetes-namespace (format "--namespace=%s" tramp-kubernetes-namespace))) @@ -411,18 +411,18 @@ Obey `tramp-kubernetes-context'" This function is used by `tramp-set-completion-function', please see its function help for a description of the format." (tramp-skeleton-completion-function method - (when-let ((raw-list (shell-command-to-string (concat program " list -c"))) - ;; Ignore header line. - (lines (cdr (split-string raw-list "\n" 'omit))) - ;; We do not show container IDs. - (names (tramp-compat-seq-keep - (lambda (line) - (when (string-match - (rx bol (1+ (not space)) - (1+ space) (group (1+ (not space))) space) - line) - (match-string 1 line))) - lines))) + (when-let* ((raw-list (shell-command-to-string (concat program " list -c"))) + ;; Ignore header line. + (lines (cdr (split-string raw-list "\n" 'omit))) + ;; We do not show container IDs. + (names (tramp-compat-seq-keep + (lambda (line) + (when (string-match + (rx bol (1+ (not space)) + (1+ space) (group (1+ (not space))) space) + line) + (match-string 1 line))) + lines))) (mapcar (lambda (name) (list nil name)) names)))) ;;;###tramp-autoload @@ -432,19 +432,19 @@ see its function help for a description of the format." This function is used by `tramp-set-completion-function', please see its function help for a description of the format." (tramp-skeleton-completion-function method - (when-let ((raw-list (shell-command-to-string (concat program " list"))) - ;; Ignore header line. - (lines (cdr (split-string raw-list "\n" 'omit))) - ;; We do not show container IDs. - (names (tramp-compat-seq-keep - (lambda (line) - (when (string-match - (rx bol (1+ (not space)) - (1+ space) "|" (1+ space) - (group (1+ (not space))) space) - line) - (match-string 1 line))) - lines))) + (when-let* ((raw-list (shell-command-to-string (concat program " list"))) + ;; Ignore header line. + (lines (cdr (split-string raw-list "\n" 'omit))) + ;; We do not show container IDs. + (names (tramp-compat-seq-keep + (lambda (line) + (when (string-match + (rx bol (1+ (not space)) + (1+ space) "|" (1+ space) + (group (1+ (not space))) space) + line) + (match-string 1 line))) + lines))) (mapcar (lambda (name) (list nil name)) names)))) ;;;###tramp-autoload @@ -456,19 +456,19 @@ ID, instance IDs. This function is used by `tramp-set-completion-function', please see its function help for a description of the format." (tramp-skeleton-completion-function method - (when-let ((raw-list - (shell-command-to-string - ;; Ignore header line. - (concat program " ps --columns=instance,application | cat -"))) - (lines (split-string raw-list "\n" 'omit)) - (names (tramp-compat-seq-keep - (lambda (line) - (when (string-match - (rx bol (* space) (group (+ (not space))) - (? (+ space) (group (+ (not space)))) eol) - line) - (or (match-string 2 line) (match-string 1 line)))) - lines))) + (when-let* ((raw-list + (shell-command-to-string + ;; Ignore header line. + (concat program " ps --columns=instance,application | cat -"))) + (lines (split-string raw-list "\n" 'omit)) + (names (tramp-compat-seq-keep + (lambda (line) + (when (string-match + (rx bol (* space) (group (+ (not space))) + (? (+ space) (group (+ (not space)))) eol) + line) + (or (match-string 2 line) (match-string 1 line)))) + lines))) (mapcar (lambda (name) (list nil name)) names)))) ;;;###tramp-autoload @@ -478,19 +478,19 @@ see its function help for a description of the format." This function is used by `tramp-set-completion-function', please see its function help for a description of the format." (tramp-skeleton-completion-function method - (when-let ((raw-list - (shell-command-to-string (concat program " instance list"))) - ;; Ignore header line. - (lines (cdr (split-string raw-list "\n" 'omit))) - (names (tramp-compat-seq-keep - (lambda (line) - (when (string-match - (rx bol (group (1+ (not space))) - (1+ space) (1+ (not space)) - (1+ space) (1+ (not space))) - line) - (match-string 1 line))) - lines))) + (when-let* ((raw-list + (shell-command-to-string (concat program " instance list"))) + ;; Ignore header line. + (lines (cdr (split-string raw-list "\n" 'omit))) + (names (tramp-compat-seq-keep + (lambda (line) + (when (string-match + (rx bol (group (1+ (not space))) + (1+ space) (1+ (not space)) + (1+ space) (1+ (not space))) + line) + (match-string 1 line))) + lines))) (mapcar (lambda (name) (list nil name)) names)))) (defun tramp-nspawn--completion-function (method) @@ -499,13 +499,13 @@ see its function help for a description of the format." This function is used by `tramp-set-completion-function', please see its function help for a description of the format." (tramp-skeleton-completion-function method - (when-let ((raw-list - (shell-command-to-string (concat program " list --all -q"))) - ;; Ignore header line. - (lines (cdr (split-string raw-list "\n"))) - (first-words (mapcar (lambda (line) (car (split-string line))) - lines)) - (machines (seq-take-while (lambda (name) name) first-words))) + (when-let* ((raw-list + (shell-command-to-string (concat program " list --all -q"))) + ;; Ignore header line. + (lines (cdr (split-string raw-list "\n"))) + (first-words + (mapcar (lambda (line) (car (split-string line))) lines)) + (machines (seq-take-while (lambda (name) name) first-words))) (mapcar (lambda (m) (list nil m)) machines)))) ;;;###tramp-autoload diff --git a/lisp/net/tramp-crypt.el b/lisp/net/tramp-crypt.el index 14d104f3563..ab36ffde6ed 100644 --- a/lisp/net/tramp-crypt.el +++ b/lisp/net/tramp-crypt.el @@ -277,10 +277,10 @@ arguments to pass to the OPERATION." "Invoke the encrypted remote file related OPERATION. First arg specifies the OPERATION, second arg is a list of arguments to pass to the OPERATION." - (if-let ((filename - (apply #'tramp-crypt-file-name-for-operation operation args)) - (fn (and (tramp-crypt-file-name-p filename) - (assoc operation tramp-crypt-file-name-handler-alist)))) + (if-let* ((filename + (apply #'tramp-crypt-file-name-for-operation operation args)) + ((tramp-crypt-file-name-p filename)) + (fn (assoc operation tramp-crypt-file-name-handler-alist))) (prog1 (save-match-data (apply (cdr fn) args)) (setq tramp-debug-message-fnh-function (cdr fn))) (prog1 (tramp-crypt-run-real-handler operation args) @@ -425,11 +425,11 @@ ARGS are the arguments. It returns t if ran successful, and nil otherwise." "Return encrypted / decrypted NAME if NAME belongs to an encrypted directory. OP must be `encrypt' or `decrypt'. Raise an error if this fails. Otherwise, return NAME." - (if-let ((tramp-crypt-enabled t) - (dir (tramp-crypt-file-name-p name)) - ;; It must be absolute for the cache. - (localname (substring name (1- (length dir)))) - (crypt-vec (tramp-crypt-dissect-file-name dir))) + (if-let* ((tramp-crypt-enabled t) + (dir (tramp-crypt-file-name-p name)) + ;; It must be absolute for the cache. + (localname (substring name (1- (length dir)))) + (crypt-vec (tramp-crypt-dissect-file-name dir))) ;; Preserve trailing "/". (funcall (if (directory-name-p name) #'file-name-as-directory #'identity) @@ -465,9 +465,9 @@ Otherwise, return NAME." Both files must be local files. OP must be `encrypt' or `decrypt'. If OP is `decrypt', the basename of INFILE must be an encrypted file name. Raise an error if this fails." - (when-let ((tramp-crypt-enabled t) - (dir (tramp-crypt-file-name-p root)) - (crypt-vec (tramp-crypt-dissect-file-name dir))) + (when-let* ((tramp-crypt-enabled t) + (dir (tramp-crypt-file-name-p root)) + (crypt-vec (tramp-crypt-dissect-file-name dir))) (let ((coding-system-for-read (if (eq op 'decrypt) 'binary coding-system-for-read)) (coding-system-for-write @@ -547,7 +547,7 @@ The structure consists of the `tramp-crypt-method' method, the local user name, the hexlified directory NAME as host, and the localname." (save-match-data - (if-let ((dir (tramp-crypt-file-name-p name))) + (if-let* ((dir (tramp-crypt-file-name-p name))) (make-tramp-file-name :method tramp-crypt-method :user (user-login-name) :host (url-hexify-string dir)) diff --git a/lisp/net/tramp-ftp.el b/lisp/net/tramp-ftp.el index beaf818d122..4561518de17 100644 --- a/lisp/net/tramp-ftp.el +++ b/lisp/net/tramp-ftp.el @@ -186,8 +186,8 @@ pass to the OPERATION." ;;;###tramp-autoload (defsubst tramp-ftp-file-name-p (vec-or-filename) "Check if it's a VEC-OR-FILENAME that should be forwarded to Ange-FTP." - (when-let* ((vec (tramp-ensure-dissected-file-name vec-or-filename))) - (string= (tramp-file-name-method vec) tramp-ftp-method))) + (and-let* ((vec (tramp-ensure-dissected-file-name vec-or-filename)) + ((string= (tramp-file-name-method vec) tramp-ftp-method))))) ;;;###tramp-autoload (tramp--with-startup diff --git a/lisp/net/tramp-fuse.el b/lisp/net/tramp-fuse.el index 26cfdbdbe88..663ef8719b0 100644 --- a/lisp/net/tramp-fuse.el +++ b/lisp/net/tramp-fuse.el @@ -129,8 +129,8 @@ (defun tramp-fuse-mount-spec (vec) "Return local mount spec of VEC." - (if-let ((host (tramp-file-name-host vec)) - (user (tramp-file-name-user vec))) + (if-let* ((host (tramp-file-name-host vec)) + (user (tramp-file-name-user vec))) (format "%s@%s:/" user host) (format "%s:/" host))) diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el index 3737a6dd1b9..3df69d79fce 100644 --- a/lisp/net/tramp-gvfs.el +++ b/lisp/net/tramp-gvfs.el @@ -879,9 +879,9 @@ Operations not mentioned here will be handled by the default Emacs primitives.") ;;;###tramp-autoload (defsubst tramp-gvfs-file-name-p (vec-or-filename) "Check if it's a VEC-OR-FILENAME handled by the GVFS daemon." - (when-let* ((vec (tramp-ensure-dissected-file-name vec-or-filename))) - (let ((method (tramp-file-name-method vec))) - (and (stringp method) (member method tramp-gvfs-methods))))) + (and-let* ((vec (tramp-ensure-dissected-file-name vec-or-filename)) + (method (tramp-file-name-method vec)) + ((member method tramp-gvfs-methods))))) ;;;###tramp-autoload (defun tramp-gvfs-file-name-handler (operation &rest args) @@ -891,11 +891,11 @@ arguments to pass to the OPERATION." ;; `file-remote-p' must not return an error. (Bug#68976) (unless (or tramp-gvfs-enabled (eq operation 'file-remote-p)) (tramp-user-error nil "Package `tramp-gvfs' not supported")) - (if-let ((filename (apply #'tramp-file-name-for-operation operation args)) - (tramp-gvfs-dbus-event-vector - (and (tramp-tramp-file-p filename) - (tramp-dissect-file-name filename))) - (fn (assoc operation tramp-gvfs-file-name-handler-alist))) + (if-let* ((filename (apply #'tramp-file-name-for-operation operation args)) + (tramp-gvfs-dbus-event-vector + (and (tramp-tramp-file-p filename) + (tramp-dissect-file-name filename))) + (fn (assoc operation tramp-gvfs-file-name-handler-alist))) (prog1 (save-match-data (apply (cdr fn) args)) (setq tramp-debug-message-fnh-function (cdr fn))) (prog1 (tramp-run-real-handler operation args) @@ -928,9 +928,9 @@ arguments to pass to the OPERATION." "Like `dbus-byte-array-to-string' but remove trailing \\0 if exists. Return nil for null BYTE-ARRAY." ;; The byte array could be a variant. Take care. - (when-let ((byte-array - (if (and (consp byte-array) (atom (car byte-array))) - byte-array (car byte-array)))) + (when-let* ((byte-array + (if (and (consp byte-array) (atom (car byte-array))) + byte-array (car byte-array)))) (dbus-byte-array-to-string (if (and (consp byte-array) (zerop (car (last byte-array)))) (butlast byte-array) byte-array)))) @@ -1042,105 +1042,113 @@ file names." (unless (memq op '(copy rename)) (error "Unknown operation `%s', must be `copy' or `rename'" op)) - (setq filename (file-truename filename)) + ;; We cannot use `file-truename', this would fail for symlinks with + ;; non-existing target. + (setq filename (expand-file-name filename)) (if (file-directory-p filename) (progn (copy-directory filename newname keep-date t) (when (eq op 'rename) (delete-directory filename 'recursive))) + (if (file-symlink-p filename) + (progn + (make-symbolic-link + (file-symlink-p filename) newname ok-if-already-exists) + (when (eq op 'rename) (delete-file filename))) + + (let ((t1 (tramp-tramp-file-p filename)) + (t2 (tramp-tramp-file-p newname)) + (equal-remote (tramp-equal-remote filename newname)) + (volatile + (and (eq op 'rename) (tramp-gvfs-file-name-p filename) + (equal + (cdr + (assoc + "standard::is-volatile" + (tramp-gvfs-get-file-attributes filename))) + "TRUE"))) + ;; "gvfs-rename" is not trustworthy. + (gvfs-operation (if (eq op 'copy) "gvfs-copy" "gvfs-move")) + (msg-operation (if (eq op 'copy) "Copying" "Renaming"))) + + (with-parsed-tramp-file-name (if t1 filename newname) nil + (tramp-barf-if-file-missing v filename + (when (and (not ok-if-already-exists) (file-exists-p newname)) + (tramp-error v 'file-already-exists newname)) + (when (and (file-directory-p newname) + (not (directory-name-p newname))) + (tramp-error v 'file-error "File is a directory %s" newname)) + (when (file-regular-p newname) + (delete-file newname)) - (let ((t1 (tramp-tramp-file-p filename)) - (t2 (tramp-tramp-file-p newname)) - (equal-remote (tramp-equal-remote filename newname)) - (volatile - (and (eq op 'rename) (tramp-gvfs-file-name-p filename) - (equal - (cdr - (assoc - "standard::is-volatile" - (tramp-gvfs-get-file-attributes filename))) - "TRUE"))) - ;; "gvfs-rename" is not trustworthy. - (gvfs-operation (if (eq op 'copy) "gvfs-copy" "gvfs-move")) - (msg-operation (if (eq op 'copy) "Copying" "Renaming"))) - - (with-parsed-tramp-file-name (if t1 filename newname) nil - (tramp-barf-if-file-missing v filename - (when (and (not ok-if-already-exists) (file-exists-p newname)) - (tramp-error v 'file-already-exists newname)) - (when (and (file-directory-p newname) - (not (directory-name-p newname))) - (tramp-error v 'file-error "File is a directory %s" newname)) - (when (file-regular-p newname) - (delete-file newname)) - - (cond - ;; We cannot rename volatile files, as used by Google-drive. - ((and (not equal-remote) volatile) - (prog1 (copy-file - filename newname ok-if-already-exists keep-date - preserve-uid-gid preserve-extended-attributes) - (delete-file filename))) - - ;; We cannot copy or rename directly. - ((or (and equal-remote - (tramp-get-connection-property v "direct-copy-failed")) - (and t1 (not (tramp-gvfs-file-name-p filename))) - (and t2 (not (tramp-gvfs-file-name-p newname)))) - (let ((tmpfile (tramp-compat-make-temp-file filename))) - (if (eq op 'copy) - (copy-file - filename tmpfile t keep-date preserve-uid-gid - preserve-extended-attributes) - (rename-file filename tmpfile t)) - (rename-file tmpfile newname ok-if-already-exists))) - - ;; Direct action. - (t (with-tramp-progress-reporter - v 0 (format "%s %s to %s" msg-operation filename newname) - (unless - (and (apply - #'tramp-gvfs-send-command v gvfs-operation - (append - (and (eq op 'copy) (or keep-date preserve-uid-gid) - '("--preserve")) - (list - (tramp-gvfs-url-file-name filename) - (tramp-gvfs-url-file-name newname)))) - ;; Some backends do not return a proper error - ;; code in case of direct copy/move. Apply - ;; sanity checks. - (or (not equal-remote) - (and - (tramp-gvfs-info newname) - (or (eq op 'copy) - (not (tramp-gvfs-info filename)))))) - - (if (or (not equal-remote) - (and equal-remote - (tramp-get-connection-property - v "direct-copy-failed"))) - ;; Propagate the error. - (with-current-buffer (tramp-get-connection-buffer v) - (goto-char (point-min)) - (tramp-error-with-buffer - nil v 'file-error - "%s failed, see buffer `%s' for details" - msg-operation (buffer-name))) - - ;; Some WebDAV server, like the one from QNAP, do - ;; not support direct copy/move. Try a fallback. - (tramp-set-connection-property v "direct-copy-failed" t) - (tramp-gvfs-do-copy-or-rename-file - op filename newname ok-if-already-exists keep-date - preserve-uid-gid preserve-extended-attributes)))) - - (when (and t1 (eq op 'rename)) - (with-parsed-tramp-file-name filename nil - (tramp-flush-file-properties v localname))) - - (when t2 - (with-parsed-tramp-file-name newname nil - (tramp-flush-file-properties v localname)))))))))) + (cond + ;; We cannot rename volatile files, as used by Google-drive. + ((and (not equal-remote) volatile) + (prog1 (copy-file + filename newname ok-if-already-exists keep-date + preserve-uid-gid preserve-extended-attributes) + (delete-file filename))) + + ;; We cannot copy or rename directly. + ((or (and equal-remote + (tramp-get-connection-property v "direct-copy-failed")) + (and t1 (not (tramp-gvfs-file-name-p filename))) + (and t2 (not (tramp-gvfs-file-name-p newname)))) + (let ((tmpfile (tramp-compat-make-temp-file filename))) + (if (eq op 'copy) + (copy-file + filename tmpfile t keep-date preserve-uid-gid + preserve-extended-attributes) + (rename-file filename tmpfile t)) + (rename-file tmpfile newname ok-if-already-exists))) + + ;; Direct action. + (t (with-tramp-progress-reporter + v 0 (format "%s %s to %s" msg-operation filename newname) + (unless + (and (apply + #'tramp-gvfs-send-command v gvfs-operation + (append + (and (eq op 'copy) (or keep-date preserve-uid-gid) + '("--preserve")) + (list + (tramp-gvfs-url-file-name filename) + (tramp-gvfs-url-file-name newname)))) + ;; Some backends do not return a proper + ;; error code in case of direct copy/move. + ;; Apply sanity checks. + (or (not equal-remote) + (and + (tramp-gvfs-info newname) + (or (eq op 'copy) + (not (tramp-gvfs-info filename)))))) + + (if (or (not equal-remote) + (and equal-remote + (tramp-get-connection-property + v "direct-copy-failed"))) + ;; Propagate the error. + (with-current-buffer (tramp-get-connection-buffer v) + (goto-char (point-min)) + (tramp-error-with-buffer + nil v 'file-error + "%s failed, see buffer `%s' for details" + msg-operation (buffer-name))) + + ;; Some WebDAV server, like the one from QNAP, + ;; do not support direct copy/move. Try a + ;; fallback. + (tramp-set-connection-property v "direct-copy-failed" t) + (tramp-gvfs-do-copy-or-rename-file + op filename newname ok-if-already-exists keep-date + preserve-uid-gid preserve-extended-attributes)))) + + (when (and t1 (eq op 'rename)) + (with-parsed-tramp-file-name filename nil + (tramp-flush-file-properties v localname))) + + (when t2 + (with-parsed-tramp-file-name newname nil + (tramp-flush-file-properties v localname))))))))))) (defun tramp-gvfs-handle-copy-file (filename newname &optional ok-if-already-exists keep-date @@ -1403,7 +1411,7 @@ If FILE-SYSTEM is non-nil, return file system attributes." (or (cdr (assoc "standard::size" attributes)) "0"))) ;; ... file mode flags (setq res-filemodes - (if-let ((n (cdr (assoc "unix::mode" attributes)))) + (if-let* ((n (cdr (assoc "unix::mode" attributes)))) (tramp-file-mode-from-int (string-to-number n)) (format "%s%s%s%s------" @@ -1419,11 +1427,11 @@ If FILE-SYSTEM is non-nil, return file system attributes." "-" "x")))) ;; ... inode and device (setq res-inode - (if-let ((n (cdr (assoc "unix::inode" attributes)))) + (if-let* ((n (cdr (assoc "unix::inode" attributes)))) (string-to-number n) (tramp-get-inode (tramp-dissect-file-name filename)))) (setq res-device - (if-let ((n (cdr (assoc "unix::device" attributes)))) + (if-let* ((n (cdr (assoc "unix::device" attributes)))) (string-to-number n) (tramp-get-device (tramp-dissect-file-name filename)))) @@ -1677,19 +1685,21 @@ ID-FORMAT valid values are `string' and `integer'." ;; The result is cached in `tramp-get-remote-uid'. (if (equal id-format 'string) (tramp-file-name-user vec) - (when-let ((localname - (tramp-get-connection-property (tramp-get-process vec) "share"))) - (file-attribute-user-id - (file-attributes (tramp-make-tramp-file-name vec localname) id-format))))) + (and-let* ((localname + (tramp-get-connection-property (tramp-get-process vec) "share")) + ((file-attribute-user-id + (file-attributes + (tramp-make-tramp-file-name vec localname) id-format))))))) (defun tramp-gvfs-handle-get-remote-gid (vec id-format) "The gid of the remote connection VEC, in ID-FORMAT. ID-FORMAT valid values are `string' and `integer'." ;; The result is cached in `tramp-get-remote-gid'. - (when-let ((localname - (tramp-get-connection-property (tramp-get-process vec) "share"))) - (file-attribute-group-id - (file-attributes (tramp-make-tramp-file-name vec localname) id-format)))) + (and-let* ((localname + (tramp-get-connection-property (tramp-get-process vec) "share")) + ((file-attribute-group-id + (file-attributes + (tramp-make-tramp-file-name vec localname) id-format)))))) (defun tramp-gvfs-handle-set-file-uid-gid (filename &optional uid gid) "Like `tramp-set-file-uid-gid' for Tramp files." @@ -1722,12 +1732,12 @@ ID-FORMAT valid values are `string' and `integer'." (setq method "davs" localname (concat (tramp-gvfs-get-remote-prefix v) localname))) - (when (string-equal "mtp" method) - (when-let - ((media (tramp-get-connection-property v "media-device"))) - (setq method (tramp-media-device-method media) - host (tramp-media-device-host media) - port (tramp-media-device-port media)))) + (when-let* + (((string-equal "mtp" method)) + (media (tramp-get-connection-property v "media-device"))) + (setq method (tramp-media-device-method media) + host (tramp-media-device-host media) + port (tramp-media-device-port media))) (when (and user domain) (setq user (concat domain ";" user))) (url-recreate-url @@ -1772,6 +1782,24 @@ a downcased host name only." (string-match (rx bol (+ alnum) "://" (group (+ (not (any "/:"))))) url) (match-string 1 url))) +;; This is used in GNU ELPA package tramp-locproc.el. +(defun tramp-gvfs-local-file-name (filename) + "Return local mount name of FILENAME." + (setq filename (file-name-unquote (expand-file-name filename))) + (with-parsed-tramp-file-name filename nil + (with-tramp-file-property v localname "local-file-name" + ;; As long as we call `tramp-gvfs-maybe-open-connection' here, + ;; we cache the result. + (tramp-gvfs-maybe-open-connection v) + (let ((quoted (file-name-quoted-p localname)) + (localname (file-name-unquote localname))) + (funcall + (if quoted #'file-name-quote #'identity) + (expand-file-name + (if (file-name-absolute-p localname) + (substring localname 1) localname) + (tramp-get-file-property v "/" "fuse-mountpoint"))))))) + ;; D-Bus GVFS functions. @@ -1924,10 +1952,10 @@ Their full names are \"org.gtk.vfs.MountTracker.mounted\" and (when (member method tramp-media-methods) ;; Ensure that media devices are cached. (tramp-get-media-devices nil) - (when-let ((v (tramp-get-connection-property - (make-tramp-media-device - :method method :host host :port port) - "vector" nil))) + (when-let* ((v (tramp-get-connection-property + (make-tramp-media-device + :method method :host host :port port) + "vector" nil))) (setq method (tramp-file-name-method v) host (tramp-file-name-host v) port (tramp-file-name-port v)))) @@ -2024,10 +2052,10 @@ Their full names are \"org.gtk.vfs.MountTracker.mounted\" and (when (member method tramp-media-methods) ;; Ensure that media devices are cached. (tramp-get-media-devices vec) - (when-let ((v (tramp-get-connection-property - (make-tramp-media-device - :method method :host host :port port) - "vector"))) + (when-let* ((v (tramp-get-connection-property + (make-tramp-media-device + :method method :host host :port port) + "vector"))) (setq method (tramp-file-name-method v) host (tramp-file-name-host v) port (tramp-file-name-port v)))) @@ -2195,7 +2223,7 @@ connection if a previous connection has died for some reason." method '(("smb" . "smb-share") ("davs" . "dav") ("nextcloud" . "dav") - ("afp". "afp-volume") + ("afp" . "afp-volume") ("gdrive" . "google-drive"))) method) tramp-gvfs-mounttypes) @@ -2442,8 +2470,8 @@ It checks for registered GNOME Online Accounts." (defun tramp-get-media-device (vec) "Transform VEC into a `tramp-media-device' structure. Check, that respective cache values do exist." - (if-let ((media (tramp-get-connection-property vec "media-device")) - (prop (tramp-get-connection-property media "vector"))) + (if-let* ((media (tramp-get-connection-property vec "media-device")) + (prop (tramp-get-connection-property media "vector"))) media (tramp-get-media-devices vec) (tramp-get-connection-property vec "media-device"))) diff --git a/lisp/net/tramp-integration.el b/lisp/net/tramp-integration.el index 2e172a9037a..552d52835e9 100644 --- a/lisp/net/tramp-integration.el +++ b/lisp/net/tramp-integration.el @@ -551,11 +551,11 @@ See `tramp-process-attributes-ps-format'.") ;; Preset default "ps" profile for local hosts, based on system type. -(when-let ((local-profile - (cond ((eq system-type 'darwin) - 'tramp-connection-local-darwin-ps-profile) - ;; ... Add other system types here. - ))) +(when-let* ((local-profile + (cond ((eq system-type 'darwin) + 'tramp-connection-local-darwin-ps-profile) + ;; ... Add other system types here. + ))) (connection-local-set-profiles `(:application tramp :machine ,(system-name)) local-profile) diff --git a/lisp/net/tramp-message.el b/lisp/net/tramp-message.el index b2ff1c12556..73a0ea9ce28 100644 --- a/lisp/net/tramp-message.el +++ b/lisp/net/tramp-message.el @@ -53,6 +53,8 @@ (declare-function tramp-file-name-host-port "tramp") (declare-function tramp-file-name-user-domain "tramp") (declare-function tramp-get-default-directory "tramp") +(defvar tramp-repository-branch) +(defvar tramp-repository-version) ;;;###tramp-autoload (defcustom tramp-verbose 3 @@ -422,7 +424,7 @@ an input event arrives. The other arguments are passed to `tramp-error'." ;; Show buffer. (pop-to-buffer buf) (discard-input) - (sit-for tramp-error-show-message-timeout))) + (sit-for tramp-error-show-message-timeout 'nodisp))) ;; Reset timestamp. It would be wrong after waiting for a while. (when (tramp-file-name-equal-p vec (car tramp-current-connection)) (setcdr tramp-current-connection (current-time))))))) @@ -444,7 +446,7 @@ an input event arrives. The other arguments are passed to `tramp-error'." ;; `tramp-error' does not show messages. So we must do it ourselves. (apply #'message fmt-string arguments) (discard-input) - (sit-for tramp-error-show-message-timeout) + (sit-for tramp-error-show-message-timeout 'nodisp) ;; Reset timestamp. It would be wrong after waiting for a while. (when (tramp-file-name-equal-p vec-or-proc (car tramp-current-connection)) @@ -468,7 +470,7 @@ to `tramp-message'." (declare (tramp-suppress-trace t)) (let (signal-hook-function) (apply 'tramp-message vec-or-proc 2 fmt-string arguments) - (lwarn 'tramp :warning fmt-string arguments))) + (apply 'lwarn 'tramp :warning fmt-string arguments))) (defun tramp-test-message (fmt-string &rest arguments) "Emit a Tramp message according `default-directory'." @@ -486,7 +488,7 @@ to `tramp-message'." "Goto the linked message in debug buffer at place." (declare (tramp-suppress-trace t)) (when (mouse-event-p last-input-event) (mouse-set-point last-input-event)) - (when-let ((point (button-get button 'position))) + (when-let* ((point (button-get button 'position))) (goto-char point))) (define-button-type 'tramp-debug-button-type diff --git a/lisp/net/tramp-rclone.el b/lisp/net/tramp-rclone.el index 52863507c0e..07dd80deb9a 100644 --- a/lisp/net/tramp-rclone.el +++ b/lisp/net/tramp-rclone.el @@ -166,15 +166,15 @@ Operations not mentioned here will be handled by the default Emacs primitives.") ;;;###tramp-autoload (defsubst tramp-rclone-file-name-p (vec-or-filename) "Check if it's a VEC-OR-FILENAME for rclone." - (when-let* ((vec (tramp-ensure-dissected-file-name vec-or-filename))) - (string= (tramp-file-name-method vec) tramp-rclone-method))) + (and-let* ((vec (tramp-ensure-dissected-file-name vec-or-filename)) + ((string= (tramp-file-name-method vec) tramp-rclone-method))))) ;;;###tramp-autoload (defun tramp-rclone-file-name-handler (operation &rest args) "Invoke the rclone handler for OPERATION and ARGS. First arg specifies the OPERATION, second arg is a list of arguments to pass to the OPERATION." - (if-let ((fn (assoc operation tramp-rclone-file-name-handler-alist))) + (if-let* ((fn (assoc operation tramp-rclone-file-name-handler-alist))) (prog1 (save-match-data (apply (cdr fn) args)) (setq tramp-debug-message-fnh-function (cdr fn))) (prog1 (tramp-run-real-handler operation args) diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 108d155fd01..ef4ddee8a53 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -354,7 +354,7 @@ The string is used in `tramp-methods'.") (tramp-remote-shell-login ("-l")) (tramp-remote-shell-args ("-c")) (tramp-copy-program "pscp") - (tramp-copy-args (("-l" "%u") ("-P" "%p") ("-scp") + (tramp-copy-args (("-l" "%u") ("-P" "%p") ("-scp") ("%c") ("-p" "%k") ("-q") ("-r"))) (tramp-copy-keep-date t) (tramp-copy-recursive t))) @@ -372,7 +372,7 @@ The string is used in `tramp-methods'.") (tramp-remote-shell-login ("-l")) (tramp-remote-shell-args ("-c")) (tramp-copy-program "pscp") - (tramp-copy-args (("-l" "%u") ("-P" "%p") ("-sftp") + (tramp-copy-args (("-l" "%u") ("-P" "%p") ("-sftp") ("%c") ("-p" "%k"))) (tramp-copy-keep-date t))) @@ -597,6 +597,7 @@ shell from reading its init file." '((tramp-login-prompt-regexp tramp-action-login) (tramp-password-prompt-regexp tramp-action-password) (tramp-otp-password-prompt-regexp tramp-action-otp-password) + (tramp-fingerprint-prompt-regexp tramp-action-fingerprint) (tramp-wrong-passwd-regexp tramp-action-permission-denied) (shell-prompt-pattern tramp-action-succeed) (tramp-shell-prompt-pattern tramp-action-succeed) @@ -1808,7 +1809,7 @@ ID-FORMAT valid values are `string' and `integer'." ;; be expected that this is always a directory. (or (tramp-string-empty-or-nil-p localname) (with-tramp-file-property v localname "file-directory-p" - (if-let + (if-let* ((truename (tramp-get-file-property v localname "file-truename")) ((tramp-file-property-p v (tramp-file-local-name truename) "file-attributes"))) @@ -1852,7 +1853,10 @@ ID-FORMAT valid values are `string' and `integer'." ;; test. (tramp-check-remote-uname v tramp-bsd-unames) (= (file-attribute-group-id attributes) - (tramp-get-remote-gid v 'integer))))))))) + (tramp-get-remote-gid v 'integer)) + ;; FIXME: `file-ownership-preserved-p' tests also the + ;; ownership of the parent directory. We don't. + ))))))) ;; Directory listings. @@ -2023,49 +2027,56 @@ ID-FORMAT valid values are `string' and `integer'." (t2 (tramp-tramp-file-p newname)) target) (with-parsed-tramp-file-name (if t1 dirname newname) nil - (unless (file-exists-p dirname) - (tramp-error v 'file-missing dirname)) - - ;; `copy-directory-create-symlink' exists since Emacs 28.1. - (if (and (bound-and-true-p copy-directory-create-symlink) - (setq target (file-symlink-p dirname)) - (tramp-equal-remote dirname newname)) - (make-symbolic-link - target - (if (directory-name-p newname) - (concat newname (file-name-nondirectory dirname)) newname) - t) - - (if (and (not copy-contents) - (tramp-get-method-parameter v 'tramp-copy-recursive) - ;; When DIRNAME and NEWNAME are remote, they must - ;; have the same method. - (or (null t1) (null t2) - (string-equal - (tramp-file-name-method - (tramp-dissect-file-name dirname)) - (tramp-file-name-method - (tramp-dissect-file-name newname))))) - ;; scp or rsync DTRT. - (progn - (when (and (file-directory-p newname) - (not (directory-name-p newname))) - (tramp-error v 'file-already-exists newname)) - (setq dirname (directory-file-name (expand-file-name dirname)) - newname (directory-file-name (expand-file-name newname))) - (when (and (file-directory-p newname) - (not (string-equal (file-name-nondirectory dirname) - (file-name-nondirectory newname)))) - (setq newname - (expand-file-name - (file-name-nondirectory dirname) newname))) - (unless (file-directory-p (file-name-directory newname)) - (make-directory (file-name-directory newname) parents)) - (tramp-do-copy-or-rename-file-out-of-band - 'copy dirname newname 'ok-if-already-exists keep-date)) - - ;; We must do it file-wise. - (tramp-run-real-handler + (cond + ;; `copy-directory-create-symlink' exists since Emacs 28.1. + ((and (bound-and-true-p copy-directory-create-symlink) + (setq target (file-symlink-p dirname)) + (tramp-equal-remote dirname newname)) + (make-symbolic-link + target + (if (directory-name-p newname) + (concat newname (file-name-nondirectory dirname)) newname) + t)) + + ;; Shortcut: if method, host, user are the same for both + ;; files, we invoke `cp' on the remote host directly. + ((and (not copy-contents) + (tramp-equal-remote dirname newname)) + (when (and (file-directory-p newname) + (not (directory-name-p newname))) + (tramp-error v 'file-already-exists newname)) + (setq dirname (directory-file-name (expand-file-name dirname)) + newname (directory-file-name (expand-file-name newname))) + (tramp-do-copy-or-rename-file-directly + 'copy dirname newname + 'ok-if-already-exists keep-date 'preserve-uid-gid)) + + ;; scp or rsync DTRT. + ((and (not copy-contents) + (tramp-get-method-parameter v 'tramp-copy-recursive) + ;; When DIRNAME and NEWNAME are remote, they must have + ;; the same method. + (or (null t1) (null t2) + (string-equal + (tramp-file-name-method (tramp-dissect-file-name dirname)) + (tramp-file-name-method (tramp-dissect-file-name newname))))) + (when (and (file-directory-p newname) + (not (directory-name-p newname))) + (tramp-error v 'file-already-exists newname)) + (setq dirname (directory-file-name (expand-file-name dirname)) + newname (directory-file-name (expand-file-name newname))) + (when (and (file-directory-p newname) + (not (string-equal (file-name-nondirectory dirname) + (file-name-nondirectory newname)))) + (setq newname + (expand-file-name (file-name-nondirectory dirname) newname))) + (unless (file-directory-p (file-name-directory newname)) + (make-directory (file-name-directory newname) parents)) + (tramp-do-copy-or-rename-file-out-of-band + 'copy dirname newname 'ok-if-already-exists keep-date)) + + ;; We must do it file-wise. + (t (tramp-run-real-handler #'copy-directory (list dirname newname keep-date parents copy-contents)))) @@ -2117,123 +2128,129 @@ file names." (progn (copy-directory filename newname keep-date t) (when (eq op 'rename) (delete-directory filename 'recursive))) + (if (file-symlink-p filename) + (progn + (make-symbolic-link + (file-symlink-p filename) newname ok-if-already-exists) + (when (eq op 'rename) (delete-file filename))) + + ;; FIXME: This should be optimized. Computing `file-attributes' + ;; checks already, whether the file exists. + (let ((t1 (tramp-tramp-file-p filename)) + (t2 (tramp-tramp-file-p newname)) + (length (or (file-attribute-size + (file-attributes (file-truename filename))) + ;; `filename' doesn't exist, for example due + ;; to non-existent symlink target. + 0)) + (file-times (file-attribute-modification-time + (file-attributes filename))) + (file-modes (tramp-default-file-modes filename)) + (msg-operation (if (eq op 'copy) "Copying" "Renaming")) + copy-keep-date) + + (with-parsed-tramp-file-name (if t1 filename newname) nil + (tramp-barf-if-file-missing v filename + (when (and (not ok-if-already-exists) (file-exists-p newname)) + (tramp-error v 'file-already-exists newname)) + (when (and (file-directory-p newname) + (not (directory-name-p newname))) + (tramp-error v 'file-error "File is a directory %s" newname)) - ;; FIXME: This should be optimized. Computing `file-attributes' - ;; checks already, whether the file exists. - (let ((t1 (tramp-tramp-file-p filename)) - (t2 (tramp-tramp-file-p newname)) - (length (file-attribute-size - (file-attributes (file-truename filename)))) - (file-times (file-attribute-modification-time - (file-attributes filename))) - (file-modes (tramp-default-file-modes filename)) - (msg-operation (if (eq op 'copy) "Copying" "Renaming")) - copy-keep-date) - - (with-parsed-tramp-file-name (if t1 filename newname) nil - (unless length - (tramp-error v 'file-missing filename)) - (tramp-barf-if-file-missing v filename - (when (and (not ok-if-already-exists) (file-exists-p newname)) - (tramp-error v 'file-already-exists newname)) - (when (and (file-directory-p newname) - (not (directory-name-p newname))) - (tramp-error v 'file-error "File is a directory %s" newname)) - - (with-tramp-progress-reporter - v 0 (format "%s %s to %s" msg-operation filename newname) + (with-tramp-progress-reporter + v 0 (format "%s %s to %s" msg-operation filename newname) - (cond - ;; Both are Tramp files. - ((and t1 t2) - (with-parsed-tramp-file-name filename v1 - (with-parsed-tramp-file-name newname v2 - (cond - ;; Shortcut: if method, host, user are the same for - ;; both files, we invoke `cp' or `mv' on the remote - ;; host directly. - ((tramp-equal-remote filename newname) - (setq copy-keep-date - (or (eq op 'rename) keep-date preserve-uid-gid)) - (tramp-do-copy-or-rename-file-directly - op filename newname - ok-if-already-exists keep-date preserve-uid-gid)) - - ;; Try out-of-band operation. - ((and - (tramp-method-out-of-band-p v1 length) - (tramp-method-out-of-band-p v2 length)) - (setq copy-keep-date - (tramp-get-method-parameter v 'tramp-copy-keep-date)) - (tramp-do-copy-or-rename-file-out-of-band - op filename newname ok-if-already-exists keep-date)) - - ;; No shortcut was possible. So we copy the file - ;; first. If the operation was `rename', we go - ;; back and delete the original file (if the copy - ;; was successful). The approach is simple-minded: - ;; we create a new buffer, insert the contents of - ;; the source file into it, then write out the - ;; buffer to the target file. The advantage is - ;; that it doesn't matter which file name handlers - ;; are used for the source and target file. - (t - (tramp-do-copy-or-rename-file-via-buffer - op filename newname ok-if-already-exists keep-date)))))) - - ;; One file is a Tramp file, the other one is local. - ((or t1 t2) (cond - ;; Fast track on local machine. - ((tramp-local-host-p v) - (setq copy-keep-date - (or (eq op 'rename) keep-date preserve-uid-gid)) - (tramp-do-copy-or-rename-file-directly - op filename newname - ok-if-already-exists keep-date preserve-uid-gid)) - - ;; If the Tramp file has an out-of-band method, the - ;; corresponding copy-program can be invoked. - ((tramp-method-out-of-band-p v length) - (setq copy-keep-date - (tramp-get-method-parameter v 'tramp-copy-keep-date)) - (tramp-do-copy-or-rename-file-out-of-band - op filename newname ok-if-already-exists keep-date)) + ;; Both are Tramp files. + ((and t1 t2) + (with-parsed-tramp-file-name filename v1 + (with-parsed-tramp-file-name newname v2 + (cond + ;; Shortcut: if method, host, user are the same + ;; for both files, we invoke `cp' or `mv' on the + ;; remote host directly. + ((tramp-equal-remote filename newname) + (setq copy-keep-date + (or (eq op 'rename) keep-date preserve-uid-gid)) + (tramp-do-copy-or-rename-file-directly + op filename newname + ok-if-already-exists keep-date preserve-uid-gid)) + + ;; Try out-of-band operation. + ((and + (tramp-method-out-of-band-p v1 length) + (tramp-method-out-of-band-p v2 length)) + (setq copy-keep-date + (tramp-get-method-parameter v 'tramp-copy-keep-date)) + (tramp-do-copy-or-rename-file-out-of-band + op filename newname ok-if-already-exists keep-date)) + + ;; No shortcut was possible. So we copy the file + ;; first. If the operation was `rename', we go + ;; back and delete the original file (if the copy + ;; was successful). The approach is simple-minded: + ;; we create a new buffer, insert the contents of + ;; the source file into it, then write out the + ;; buffer to the target file. The advantage is + ;; that it doesn't matter which file name handlers + ;; are used for the source and target file. + (t + (tramp-do-copy-or-rename-file-via-buffer + op filename newname ok-if-already-exists keep-date)))))) + + ;; One file is a Tramp file, the other one is local. + ((or t1 t2) + (cond + ;; Fast track on local machine. + ((tramp-local-host-p v) + (setq copy-keep-date + (or (eq op 'rename) keep-date preserve-uid-gid)) + (tramp-do-copy-or-rename-file-directly + op filename newname + ok-if-already-exists keep-date preserve-uid-gid)) + + ;; If the Tramp file has an out-of-band method, the + ;; corresponding copy-program can be invoked. + ((tramp-method-out-of-band-p v length) + (setq copy-keep-date + (tramp-get-method-parameter v 'tramp-copy-keep-date)) + (tramp-do-copy-or-rename-file-out-of-band + op filename newname ok-if-already-exists keep-date)) + + ;; Use the inline method via a Tramp buffer. + (t (tramp-do-copy-or-rename-file-via-buffer + op filename newname ok-if-already-exists keep-date)))) + + (t + ;; One of them must be a Tramp file. + (error "Tramp implementation says this cannot happen"))) + + ;; In case of `rename', we must flush the cache of the source file. + (when (and t1 (eq op 'rename)) + (with-parsed-tramp-file-name filename v1 + (tramp-flush-file-properties v1 v1-localname))) + + ;; NEWNAME has wrong cached values. + (when t2 + (with-parsed-tramp-file-name newname v2 + (tramp-flush-file-properties v2 v2-localname))) - ;; Use the inline method via a Tramp buffer. - (t (tramp-do-copy-or-rename-file-via-buffer - op filename newname ok-if-already-exists keep-date)))) + ;; Handle `preserve-extended-attributes'. We ignore + ;; possible errors, because ACL strings could be + ;; incompatible. + (when-let* ((attributes (and preserve-extended-attributes + (file-extended-attributes filename)))) + (ignore-errors + (set-file-extended-attributes newname attributes))) - (t - ;; One of them must be a Tramp file. - (error "Tramp implementation says this cannot happen"))) - - ;; In case of `rename', we must flush the cache of the source file. - (when (and t1 (eq op 'rename)) - (with-parsed-tramp-file-name filename v1 - (tramp-flush-file-properties v1 v1-localname))) - - ;; NEWNAME has wrong cached values. - (when t2 - (with-parsed-tramp-file-name newname v2 - (tramp-flush-file-properties v2 v2-localname))) - - ;; Handle `preserve-extended-attributes'. We ignore - ;; possible errors, because ACL strings could be - ;; incompatible. - (when-let ((attributes (and preserve-extended-attributes - (file-extended-attributes filename)))) - (ignore-errors - (set-file-extended-attributes newname attributes))) - - ;; KEEP-DATE handling. - (when (and keep-date (not copy-keep-date)) - (tramp-compat-set-file-times - newname file-times (unless ok-if-already-exists 'nofollow))) - - ;; Set the mode. - (unless (and keep-date copy-keep-date) - (set-file-modes newname file-modes)))))))) + ;; KEEP-DATE handling. + (when (and keep-date (not copy-keep-date)) + (tramp-compat-set-file-times + newname file-times (unless ok-if-already-exists 'nofollow))) + + ;; Set the mode. + (unless (and keep-date copy-keep-date) + (set-file-modes newname file-modes))))))))) (defun tramp-do-copy-or-rename-file-via-buffer (op filename newname _ok-if-already-exists _keep-date) @@ -2474,7 +2491,7 @@ The method used must be an out-of-band method." ;; Compose copy command. (setq options (format-spec - (tramp-ssh-controlmaster-options v) + (tramp-ssh-or-plink-options v) (format-spec-make ?t (tramp-get-connection-property (tramp-get-connection-process v) "temp-file" ""))) @@ -2859,7 +2876,7 @@ The method used must be an out-of-band method." (rx bol (group (* blank) "total")) nil t) ;; Emacs 29.1 or later. (not (fboundp 'dired--insert-disk-space))) - (when-let ((available (get-free-disk-space "."))) + (when-let* ((available (get-free-disk-space "."))) ;; Replace "total" with "total used", to avoid confusion. (replace-match "\\1 used in directory") (end-of-line) @@ -3094,8 +3111,7 @@ will be used." ;; needed when sending signals remotely. (let ((pid (tramp-send-command-and-read v "echo $$"))) (setq p (tramp-get-connection-process v)) - (process-put p 'remote-pid pid) - (tramp-set-connection-property p "remote-pid" pid)) + (process-put p 'remote-pid pid)) (when (memq connection-type '(nil pipe)) ;; Disable carriage return to newline ;; translation. This does not work on @@ -3110,7 +3126,7 @@ will be used." ;; character to read. When a process does ;; not read from stdin, like magit, it ;; should set a timeout - ;; instead. See`tramp-pipe-stty-settings'. + ;; instead. See `tramp-pipe-stty-settings'. ;; (Bug#62093) ;; FIXME: Shall we rather use "stty raw"? (tramp-send-command @@ -3269,8 +3285,7 @@ will be used." (setq ret (tramp-send-command-and-check v (format "cd %s && %s" - (tramp-unquote-shell-quote-argument localname) - command) + (tramp-shell-quote-argument localname) command) t t t)) (unless (natnump ret) (setq ret 1)) ;; We should add the output anyway. @@ -3305,7 +3320,7 @@ will be used." (defun tramp-sh-handle-file-local-copy (filename) "Like `file-local-copy' for Tramp files." (tramp-skeleton-file-local-copy filename - (if-let ((size (file-attribute-size (file-attributes filename)))) + (if-let* ((size (file-attribute-size (file-attributes filename)))) (let (rem-enc loc-dec) (condition-case err @@ -3619,14 +3634,14 @@ filled are described in `tramp-bundle-read-file-names'." ;; requires a remote command (the file cache must be invalidated). ;; Therefore, we apply a kind of optimization. We install the file ;; name handler `tramp-vc-file-name-handler', which does nothing but -;; remembers all file names for which `file-exists-p' or -;; `file-readable-p' has been applied. A first run of `vc-registered' -;; is performed. Afterwards, a script is applied for all collected -;; file names, using just one remote command. The result of this -;; script is used to fill the file cache with actual values. Now we -;; can reset the file name handlers, and we make a second run of -;; `vc-registered', which returns the expected result without sending -;; any other remote command. +;; remembers all file names for which `file-exists-p', +;; `file-readable-p' or `file-directory-p' has been applied. A first +;; run of `vc-registered' is performed. Afterwards, a script is +;; applied for all collected file names, using just one remote +;; command. The result of this script is used to fill the file cache +;; with actual values. Now we can reset the file name handlers, and +;; we make a second run of `vc-registered', which returns the expected +;; result without sending any other remote command. ;; When called during `revert-buffer', it shouldn't spam the echo area ;; and the *Messages* buffer. (defun tramp-sh-handle-vc-registered (file) @@ -3658,10 +3673,11 @@ filled are described in `tramp-bundle-read-file-names'." ;; Send just one command, in order to fill the cache. (tramp-bundle-read-file-names v tramp-vc-registered-file-names)) - ;; Second run. Now all `file-exists-p' or `file-readable-p' - ;; calls shall be answered from the file cache. We unset - ;; `process-file-side-effects' and `remote-file-name-inhibit-cache' - ;; in order to keep the cache. + ;; Second run. Now all `file-exists-p', `file-readable-p' + ;; or `file-directory-p' calls shall be answered from the + ;; file cache. We unset `process-file-side-effects' and + ;; `remote-file-name-inhibit-cache' in order to keep the + ;; cache. (let ((vc-handled-backends (copy-sequence vc-handled-backends)) remote-file-name-inhibit-cache process-file-side-effects) ;; Reduce `vc-handled-backends' in order to minimize @@ -3696,7 +3712,7 @@ filled are described in `tramp-bundle-read-file-names'." (defun tramp-sh-file-name-handler (operation &rest args) "Invoke remote-shell Tramp file name handler. Fall back to normal file name handler if no Tramp handler exists." - (if-let ((fn (assoc operation tramp-sh-file-name-handler-alist))) + (if-let* ((fn (assoc operation tramp-sh-file-name-handler-alist))) (prog1 (save-match-data (apply (cdr fn) args)) (setq tramp-debug-message-fnh-function (cdr fn))) (prog1 (tramp-run-real-handler operation args) @@ -3718,33 +3734,35 @@ Fall back to normal file name handler if no Tramp handler exists." (defun tramp-vc-file-name-handler (operation &rest args) "Invoke special file name handler, which collects files to be handled." (save-match-data - (let ((filename - (tramp-replace-environment-variables - (apply #'tramp-file-name-for-operation operation args))) - (fn (assoc operation tramp-sh-file-name-handler-alist))) - (if (tramp-tramp-file-p filename) - (with-parsed-tramp-file-name filename nil - (cond - ;; That's what we want: file names, for which checks are - ;; applied. We assume that VC uses only `file-exists-p' - ;; and `file-readable-p' checks; otherwise we must extend - ;; the list. We do not perform any action, but return - ;; nil, in order to keep `vc-registered' running. - ((and fn (memq operation '(file-exists-p file-readable-p))) - (add-to-list 'tramp-vc-registered-file-names localname 'append) - nil) - ;; `process-file' and `start-file-process' shall be ignored. - ((and fn (eq operation 'process-file) 0)) - ((and fn (eq operation 'start-file-process) nil)) - ;; Tramp file name handlers like `expand-file-name'. They - ;; must still work. - (fn (save-match-data (apply (cdr fn) args))) - ;; Default file name handlers, we don't care. - (t (tramp-run-real-handler operation args)))) - - ;; When `tramp-mode' is not enabled, or the file name is - ;; quoted, we don't do anything. - (tramp-run-real-handler operation args))))) + (if-let* ((filename + (tramp-replace-environment-variables + (apply #'tramp-file-name-for-operation operation args))) + ((tramp-tramp-file-p filename)) + (fn (assoc operation tramp-sh-file-name-handler-alist))) + (with-parsed-tramp-file-name filename nil + (cond + ;; That's what we want: file names, for which checks are + ;; applied. We assume that VC uses only `file-exists-p', + ;; `file-readable-p' and `file-directory-p' checks; + ;; otherwise we must extend the list. The respective cache + ;; value must be set for these functions in + ;; `tramp-bundle-read-file-names'. + ;; We do not perform any action, but return nil, in order + ;; to keep `vc-registered' running. + ((memq operation '(file-exists-p file-readable-p file-directory-p)) + (add-to-list 'tramp-vc-registered-file-names localname 'append) + nil) + ;; `process-file' and `start-file-process' shall be ignored. + ((eq operation 'process-file) 0) + ((eq operation 'start-file-process) nil) + ;; Tramp file name handlers like `expand-file-name'. They + ;; must still work. + (t (save-match-data (apply (cdr fn) args))))) + + ;; When `tramp-mode' is not enabled, or the file name is not a + ;; remote file name, we don't do anything. Same for default + ;; file name handlers. + (tramp-run-real-handler operation args)))) (defun tramp-sh-handle-file-notify-add-watch (file-name flags _callback) "Like `file-notify-add-watch' for Tramp files." @@ -4892,41 +4910,60 @@ Goes through the list `tramp-inline-compress-commands'." (zerop (tramp-call-process vec "ssh" nil nil nil "-G" "-o" option "0.0.0.1")))) -(defun tramp-ssh-controlmaster-options (vec) - "Return the Control* arguments of the local ssh." +(defun tramp-plink-option-exists-p (vec option) + "Check, whether local plink OPTION is applicable." + ;; We don't want to cache it persistently. + (with-tramp-connection-property nil option + ;; "plink" with valid options returns "plink: no valid host name + ;; provided". We xcheck for this error message." + (with-temp-buffer + (tramp-call-process vec "plink" nil t nil option) + (not + (string-match-p + (rx (| (: "plink: unknown option \"" (literal option) "\"" ) + (: "plink: option \"" (literal option) + "\" not available in this tool" ))) + (buffer-string)))))) + +(defun tramp-ssh-or-plink-options (vec) + "Return additional arguments of the local ssh or plink." (cond ;; No options to be computed. - ((or (null tramp-use-connection-share) - (null (assoc "%c" (tramp-get-method-parameter vec 'tramp-login-args)))) - "") + ((null (assoc "%c" (tramp-get-method-parameter vec 'tramp-login-args))) "") - ;; Use plink option. + ;; Use plink options. ((string-match-p (rx "plink" (? ".exe") eol) (tramp-get-method-parameter vec 'tramp-login-program)) - (if (eq tramp-use-connection-share 'suppress) - "-noshare" "-share")) + (concat + (if (eq tramp-use-connection-share 'suppress) + "-noshare" "-share") + ;; Since PuTTY 0.82. + (when (tramp-plink-option-exists-p vec "-legacy-stdio-prompts") + " -legacy-stdio-prompts"))) ;; There is already a value to be used. ((and (eq tramp-use-connection-share t) (stringp tramp-ssh-controlmaster-options)) tramp-ssh-controlmaster-options) - ;; We can't auto-compute the options. - ((ignore-errors - (not (tramp-ssh-option-exists-p vec "ControlMaster=auto"))) - "") - - ;; Determine the options. - (t (ignore-errors - ;; ControlMaster and ControlPath options are introduced in OpenSSH 3.9. - (concat - "-o ControlMaster=" - (if (eq tramp-use-connection-share 'suppress) + ;; Use ssh options. + (tramp-use-connection-share + ;; We can't auto-compute the options. + (if (ignore-errors + (not (tramp-ssh-option-exists-p vec "ControlMaster=auto"))) + "" + + ;; Determine the options. + (ignore-errors + ;; ControlMaster and ControlPath options are introduced in OpenSSH 3.9. + (concat + "-o ControlMaster=" + (if (eq tramp-use-connection-share 'suppress) "no" "auto") - " -o ControlPath=" - (if (eq tramp-use-connection-share 'suppress) + " -o ControlPath=" + (if (eq tramp-use-connection-share 'suppress) "none" ;; Hashed tokens are introduced in OpenSSH 6.7. On macOS ;; we cannot use an absolute file name, it is too long. @@ -4940,10 +4977,13 @@ Goes through the list `tramp-inline-compress-commands'." (or small-temporary-file-directory tramp-compat-temporary-file-directory)))) - ;; ControlPersist option is introduced in OpenSSH 5.6. + ;; ControlPersist option is introduced in OpenSSH 5.6. (when (and (not (eq tramp-use-connection-share 'suppress)) (tramp-ssh-option-exists-p vec "ControlPersist=no")) - " -o ControlPersist=no")))))) + " -o ControlPersist=no"))))) + + ;; Return a string, whatsoever. + (t ""))) (defun tramp-scp-strict-file-name-checking (vec) "Return the strict file name checking argument of the local scp." @@ -5159,9 +5199,9 @@ connection if a previous connection has died for some reason." (let* ((current-host tramp-system-name) (target-alist (tramp-compute-multi-hops vec)) (previous-hop tramp-null-hop) - ;; We will apply `tramp-ssh-controlmaster-options' + ;; We will apply `tramp-ssh-or-plink-options' ;; only for the first hop. - (options (tramp-ssh-controlmaster-options vec)) + (options (tramp-ssh-or-plink-options vec)) (process-connection-type tramp-process-connection-type) (process-adaptive-read-buffering nil) ;; There are unfortunate settings for "cmdproxy" @@ -5240,9 +5280,10 @@ connection if a previous connection has died for some reason." (setq r-shell t))) (setq current-host l-host) - ;; Set password prompt vector. + ;; Set hop and password prompt vector. + (tramp-set-connection-property p "hop-vector" hop) (tramp-set-connection-property - p "password-vector" + p "pw-vector" (if (tramp-get-method-parameter hop 'tramp-password-previous-hop) (let ((pv (copy-tramp-file-name previous-hop))) @@ -5253,9 +5294,9 @@ connection if a previous connection has died for some reason." :host l-host :port l-port))) ;; Set session timeout. - (when-let ((timeout - (tramp-get-method-parameter - hop 'tramp-session-timeout))) + (when-let* ((timeout + (tramp-get-method-parameter + hop 'tramp-session-timeout))) (tramp-set-connection-property p "session-timeout" timeout)) @@ -5298,6 +5339,8 @@ connection if a previous connection has died for some reason." tramp-actions-before-shell connection-timeout)) ;; Next hop. + (tramp-flush-connection-property p "hop-vector") + (tramp-flush-connection-property p "pw-vector") (setq options "" target-alist (cdr target-alist) previous-hop hop))) @@ -5619,7 +5662,7 @@ Nonexistent directories are removed from spec." (lambda (x) (not (tramp-get-file-property vec x "file-directory-p"))) remote-path)))))) -;; The PIPE_BUF in POSIX [1] can be as low as 512 [2]. Here are the values +;; The PIPE_BUF in POSIX [1] can be as low as 512 [2]. Here are the values ;; on various platforms: ;; - 512 on macOS, FreeBSD, NetBSD, OpenBSD, MirBSD, native Windows. ;; - 4 KiB on Linux, OSF/1, Cygwin, Haiku. @@ -5627,6 +5670,7 @@ Nonexistent directories are removed from spec." ;; - 8 KiB on HP-UX, Plan9. ;; - 10 KiB on IRIX. ;; - 32 KiB on AIX, Minix. +;; - `undefined' on QNX. ;; [1] https://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html ;; [2] https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/limits.h.html ;; See Bug#65324. @@ -5634,11 +5678,13 @@ Nonexistent directories are removed from spec." (defun tramp-get-remote-pipe-buf (vec) "Return PIPE_BUF config from the remote side." (with-tramp-connection-property vec "pipe-buf" - (tramp-send-command-and-read - vec - (format "getconf PIPE_BUF / 2>%s || echo 4096" - (tramp-get-remote-null-device vec)) - 'noerror))) + (if-let* ((result + (tramp-send-command-and-read + vec (format "getconf PIPE_BUF / 2>%s" + (tramp-get-remote-null-device vec)) + 'noerror)) + ((natnump result))) + result 4096))) (defun tramp-get-remote-locale (vec) "Determine remote locale, supporting UTF8 if possible." @@ -5666,7 +5712,7 @@ Nonexistent directories are removed from spec." (dolist (cmd ;; Prefer GNU ls on *BSD and macOS. (if (tramp-check-remote-uname vec tramp-bsd-unames) - '( "gls" "ls" "gnuls") '("ls" "gnuls" "gls"))) + '("gls" "ls" "gnuls") '("ls" "gnuls" "gls"))) (let ((dl (tramp-get-remote-path vec)) result) (while (and dl (setq result (tramp-find-executable vec cmd dl t t))) @@ -5903,37 +5949,37 @@ Nonexistent directories are removed from spec." (with-tramp-connection-property vec "awk" (tramp-message vec 5 "Finding a suitable `awk' command") (or (tramp-find-executable vec "awk" (tramp-get-remote-path vec)) - (let* ((busybox (tramp-get-remote-busybox vec)) - (command (format "%s %s" busybox "awk"))) - (and busybox - (tramp-send-command-and-check - vec (concat command " {} <" (tramp-get-remote-null-device vec))) - command))))) + (when-let* + ((busybox (tramp-get-remote-busybox vec)) + (command (format "%s %s" busybox "awk")) + ((tramp-send-command-and-check + vec (concat command " {} <" (tramp-get-remote-null-device vec))))) + command)))) (defun tramp-get-remote-hexdump (vec) "Determine remote `hexdump' command." (with-tramp-connection-property vec "hexdump" (tramp-message vec 5 "Finding a suitable `hexdump' command") (or (tramp-find-executable vec "hexdump" (tramp-get-remote-path vec)) - (let* ((busybox (tramp-get-remote-busybox vec)) - (command (format "%s %s" busybox "hexdump"))) - (and busybox - (tramp-send-command-and-check - vec (concat command " <" (tramp-get-remote-null-device vec))) - command))))) + (when-let* + ((busybox (tramp-get-remote-busybox vec)) + (command (format "%s %s" busybox "hexdump")) + ((tramp-send-command-and-check + vec (concat command " <" (tramp-get-remote-null-device vec))))) + command)))) (defun tramp-get-remote-od (vec) "Determine remote `od' command." (with-tramp-connection-property vec "od" (tramp-message vec 5 "Finding a suitable `od' command") (or (tramp-find-executable vec "od" (tramp-get-remote-path vec)) - (let* ((busybox (tramp-get-remote-busybox vec)) - (command (format "%s %s" busybox "od"))) - (and busybox - (tramp-send-command-and-check - vec - (concat command " -A n <" (tramp-get-remote-null-device vec))) - command))))) + (when-let* + ((busybox (tramp-get-remote-busybox vec)) + (command (format "%s %s" busybox "od")) + ((tramp-send-command-and-check + vec + (concat command " -A n <" (tramp-get-remote-null-device vec))))) + command)))) (defun tramp-get-remote-chmod-h (vec) "Check whether remote `chmod' supports nofollow argument." diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el index 7b16d7f5a81..57fdd61a4c8 100644 --- a/lisp/net/tramp-smb.el +++ b/lisp/net/tramp-smb.el @@ -114,6 +114,7 @@ this variable \"client min protocol=NT1\"." "Read from server failed, maybe it closed the connection" "Call timed out: server did not respond" (: (+ (not blank)) ": command not found") + (: (+ (not blank)) " does not exist") "Server doesn't support UNIX CIFS calls" (| ;; Samba. "ERRDOS" @@ -340,15 +341,15 @@ This can be used to disable echo etc." ;;;###tramp-autoload (defsubst tramp-smb-file-name-p (vec-or-filename) "Check if it's a VEC-OR-FILENAME for SMB servers." - (when-let* ((vec (tramp-ensure-dissected-file-name vec-or-filename))) - (string= (tramp-file-name-method vec) tramp-smb-method))) + (and-let* ((vec (tramp-ensure-dissected-file-name vec-or-filename)) + ((string= (tramp-file-name-method vec) tramp-smb-method))))) ;;;###tramp-autoload (defun tramp-smb-file-name-handler (operation &rest args) "Invoke the SMB related OPERATION and ARGS. First arg specifies the OPERATION, second arg is a list of arguments to pass to the OPERATION." - (if-let ((fn (assoc operation tramp-smb-file-name-handler-alist))) + (if-let* ((fn (assoc operation tramp-smb-file-name-handler-alist))) (prog1 (save-match-data (apply (cdr fn) args)) (setq tramp-debug-message-fnh-function (cdr fn))) (prog1 (tramp-run-real-handler operation args) @@ -428,9 +429,6 @@ arguments to pass to the OPERATION." (t2 (tramp-tramp-file-p newname)) target) (with-parsed-tramp-file-name (if t1 dirname newname) nil - (unless (file-exists-p dirname) - (tramp-error v 'file-missing dirname)) - ;; `copy-directory-create-symlink' exists since Emacs 28.1. (if (and (bound-and-true-p copy-directory-create-symlink) (setq target (file-symlink-p dirname)) @@ -600,66 +598,63 @@ KEEP-DATE has no effect in case NEWNAME resides on an SMB server. PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored." (setq filename (expand-file-name filename) newname (expand-file-name newname)) - (with-tramp-progress-reporter - (tramp-dissect-file-name - (if (tramp-tramp-file-p filename) filename newname)) - 0 (format "Copying %s to %s" filename newname) - (if (file-directory-p filename) - (copy-directory filename newname keep-date 'parents 'copy-contents) + (with-parsed-tramp-file-name + (if (tramp-tramp-file-p filename) filename newname) nil + (with-tramp-progress-reporter + v 0 (format "Copying %s to %s" filename newname) + + (if (file-directory-p filename) + (copy-directory filename newname keep-date 'parents 'copy-contents) + + (tramp-barf-if-file-missing v filename + ;; `file-local-copy' returns a file name also for a local + ;; file with `jka-compr-handler', so we cannot trust its + ;; result as indication for a remote file name. + (if-let* ((tmpfile + (and (tramp-tramp-file-p filename) + (file-local-copy filename)))) + ;; Remote filename. + (condition-case err + (rename-file tmpfile newname ok-if-already-exists) + ((error quit) + (delete-file tmpfile) + (signal (car err) (cdr err)))) + + ;; Remote newname. + (when (and (file-directory-p newname) + (directory-name-p newname)) + (setq newname + (expand-file-name + (file-name-nondirectory filename) newname))) + + (when (and (not ok-if-already-exists) (file-exists-p newname)) + (tramp-error v 'file-already-exists newname)) + (when (and (file-directory-p newname) + (not (directory-name-p newname))) + (tramp-error v 'file-error "File is a directory %s" newname)) + + (unless (tramp-smb-get-share v) + (tramp-error + v 'file-error "Target `%s' must contain a share name" newname)) + (unless (tramp-smb-send-command + v (format "put %s %s" + (tramp-smb-shell-quote-argument filename) + (tramp-smb-shell-quote-localname v))) + (tramp-error + v 'file-error "Cannot copy `%s' to `%s'" filename newname)) + + ;; When newname did exist, we have wrong cached values. + (when (tramp-tramp-file-p newname) + (with-parsed-tramp-file-name newname v2 + (tramp-flush-file-properties v2 v2-localname)))))) - (unless (file-exists-p filename) - (tramp-error - (tramp-dissect-file-name - (if (tramp-tramp-file-p filename) filename newname)) - 'file-missing filename)) - - ;; `file-local-copy' returns a file name also for a local file - ;; with `jka-compr-handler', so we cannot trust its result as - ;; indication for a remote file name. - (if-let ((tmpfile - (and (tramp-tramp-file-p filename) (file-local-copy filename)))) - ;; Remote filename. - (condition-case err - (rename-file tmpfile newname ok-if-already-exists) - ((error quit) - (delete-file tmpfile) - (signal (car err) (cdr err)))) - - ;; Remote newname. - (when (and (file-directory-p newname) - (directory-name-p newname)) - (setq newname - (expand-file-name (file-name-nondirectory filename) newname))) - - (with-parsed-tramp-file-name newname nil - (when (and (not ok-if-already-exists) (file-exists-p newname)) - (tramp-error v 'file-already-exists newname)) - (when (and (file-directory-p newname) - (not (directory-name-p newname))) - (tramp-error v 'file-error "File is a directory %s" newname)) - - (unless (tramp-smb-get-share v) - (tramp-error - v 'file-error "Target `%s' must contain a share name" newname)) - (unless (tramp-smb-send-command - v (format "put %s %s" - (tramp-smb-shell-quote-argument filename) - (tramp-smb-shell-quote-localname v))) - (tramp-error - v 'file-error "Cannot copy `%s' to `%s'" filename newname)) - - ;; When newname did exist, we have wrong cached values. - (when (tramp-tramp-file-p newname) - (with-parsed-tramp-file-name newname v2 - (tramp-flush-file-properties v2 v2-localname)))))) - - ;; KEEP-DATE handling. - (when keep-date - (tramp-compat-set-file-times - newname - (file-attribute-modification-time (file-attributes filename)) - (unless ok-if-already-exists 'nofollow))))) + ;; KEEP-DATE handling. + (when keep-date + (tramp-compat-set-file-times + newname + (file-attribute-modification-time (file-attributes filename)) + (unless ok-if-already-exists 'nofollow)))))) (defun tramp-smb-handle-delete-directory (directory &optional recursive trash) "Like `delete-directory' for Tramp files." @@ -741,7 +736,7 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored." (tramp-error v 'file-error "Cannot expand tilde in file `%s'" name)) (unless (tramp-run-real-handler #'file-name-absolute-p (list localname)) (setq localname (concat "/" localname))) - ;; Do not keep "/..". + ;; Do not keep "/..". (when (string-match-p (rx bos "/" (** 1 2 ".") eos) localname) (setq localname "/")) ;; Do normal `expand-file-name' (this does "/./" and "/../"), @@ -769,7 +764,7 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored." (forward-line) (delete-region (point-min) (point))) (while (and (not (eobp)) (looking-at-p (rx bol (+ nonl) ":" (+ nonl)))) - (forward-line)) + (forward-line)) (delete-region (point) (point-max)) (throw 'tramp-action 'ok)))) @@ -865,7 +860,7 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored." "Implement `file-attributes' for Tramp files using `stat' command." (tramp-message vec 5 "file attributes with stat: %s" (tramp-file-name-localname vec)) - (let* (size id link uid gid atime mtime ctime mode inode) + (let (size id link uid gid atime mtime ctime mode inode) (when (tramp-smb-send-command vec (format "stat %s" (tramp-smb-shell-quote-localname vec))) @@ -1311,46 +1306,45 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored." (with-parsed-tramp-file-name (if (tramp-tramp-file-p filename) filename newname) nil - (unless (file-exists-p filename) - (tramp-error v 'file-missing filename)) - (when (and (not ok-if-already-exists) (file-exists-p newname)) - (tramp-error v 'file-already-exists newname)) - (when (and (file-directory-p newname) - (not (directory-name-p newname))) - (tramp-error v 'file-error "File is a directory %s" newname)) + (tramp-barf-if-file-missing v filename + (when (and (not ok-if-already-exists) (file-exists-p newname)) + (tramp-error v 'file-already-exists newname)) + (when (and (file-directory-p newname) + (not (directory-name-p newname))) + (tramp-error v 'file-error "File is a directory %s" newname)) - (with-tramp-progress-reporter - v 0 (format "Renaming %s to %s" filename newname) - - (if (and (not (file-exists-p newname)) - (tramp-equal-remote filename newname) - (string-equal - (tramp-smb-get-share (tramp-dissect-file-name filename)) - (tramp-smb-get-share (tramp-dissect-file-name newname)))) - ;; We can rename directly. - (with-parsed-tramp-file-name filename v1 - (with-parsed-tramp-file-name newname v2 - - ;; We must also flush the cache of the directory, because - ;; `file-attributes' reads the values from there. - (tramp-flush-file-properties v1 v1-localname) - (tramp-flush-file-properties v2 v2-localname) - (unless (tramp-smb-get-share v2) - (tramp-error - v2 'file-error - "Target `%s' must contain a share name" newname)) - (unless (tramp-smb-send-command - v2 (format "rename %s %s" - (tramp-smb-shell-quote-localname v1) - (tramp-smb-shell-quote-localname v2))) - (tramp-error v2 'file-error "Cannot rename `%s'" filename)))) - - ;; We must rename via copy. - (copy-file - filename newname ok-if-already-exists 'keep-time 'preserve-uid-gid) - (if (file-directory-p filename) - (delete-directory filename 'recursive) - (delete-file filename)))))) + (with-tramp-progress-reporter + v 0 (format "Renaming %s to %s" filename newname) + + (if (and (not (file-exists-p newname)) + (tramp-equal-remote filename newname) + (string-equal + (tramp-smb-get-share (tramp-dissect-file-name filename)) + (tramp-smb-get-share (tramp-dissect-file-name newname)))) + ;; We can rename directly. + (with-parsed-tramp-file-name filename v1 + (with-parsed-tramp-file-name newname v2 + + ;; We must also flush the cache of the directory, because + ;; `file-attributes' reads the values from there. + (tramp-flush-file-properties v1 v1-localname) + (tramp-flush-file-properties v2 v2-localname) + (unless (tramp-smb-get-share v2) + (tramp-error + v2 'file-error + "Target `%s' must contain a share name" newname)) + (unless (tramp-smb-send-command + v2 (format "rename %s %s" + (tramp-smb-shell-quote-localname v1) + (tramp-smb-shell-quote-localname v2))) + (tramp-error v2 'file-error "Cannot rename `%s'" filename)))) + + ;; We must rename via copy. + (copy-file + filename newname ok-if-already-exists 'keep-time 'preserve-uid-gid) + (if (file-directory-p filename) + (delete-directory filename 'recursive) + (delete-file filename))))))) (defun tramp-smb-action-set-acl (proc vec) "Set ACL data." diff --git a/lisp/net/tramp-sshfs.el b/lisp/net/tramp-sshfs.el index 2ad71de4022..0efa7bd53fb 100644 --- a/lisp/net/tramp-sshfs.el +++ b/lisp/net/tramp-sshfs.el @@ -169,15 +169,15 @@ Operations not mentioned here will be handled by the default Emacs primitives.") ;;;###tramp-autoload (defsubst tramp-sshfs-file-name-p (vec-or-filename) "Check if it's a VEC-OR-FILENAME for sshfs." - (when-let* ((vec (tramp-ensure-dissected-file-name vec-or-filename))) - (string= (tramp-file-name-method vec) tramp-sshfs-method))) + (and-let* ((vec (tramp-ensure-dissected-file-name vec-or-filename)) + ((string= (tramp-file-name-method vec) tramp-sshfs-method))))) ;;;###tramp-autoload (defun tramp-sshfs-file-name-handler (operation &rest args) "Invoke the sshfs handler for OPERATION and ARGS. First arg specifies the OPERATION, second arg is a list of arguments to pass to the OPERATION." - (if-let ((fn (assoc operation tramp-sshfs-file-name-handler-alist))) + (if-let* ((fn (assoc operation tramp-sshfs-file-name-handler-alist))) (prog1 (save-match-data (apply (cdr fn) args)) (setq tramp-debug-message-fnh-function (cdr fn))) (prog1 (tramp-run-real-handler operation args) @@ -250,6 +250,9 @@ arguments to pass to the OPERATION." (defun tramp-sshfs-handle-process-file (program &optional infile destination display &rest args) "Like `process-file' for Tramp files." + ;; STDERR is not impelmemted. + (when (consp destination) + (setcdr destination `(,tramp-cache-undefined))) (tramp-skeleton-process-file program infile destination display args (let ((coding-system-for-read 'utf-8-dos)) ; Is this correct? @@ -259,25 +262,18 @@ arguments to pass to the OPERATION." (tramp-unquote-shell-quote-argument localname) (mapconcat #'tramp-shell-quote-argument (cons program args) " "))) (when input (setq command (format "%s <%s" command input))) - (when stderr (setq command (format "%s 2>%s" command stderr))) - - (unwind-protect - (setq ret - (apply - #'tramp-call-process - v (tramp-get-method-parameter v 'tramp-login-program) - nil outbuf display - (tramp-expand-args - v 'tramp-login-args nil - ?h (or (tramp-file-name-host v) "") - ?u (or (tramp-file-name-user v) "") - ?p (or (tramp-file-name-port v) "") - ?a "-t" ?l command))) - - ;; Synchronize stderr. - (when tmpstderr - (tramp-cleanup-connection v 'keep-debug 'keep-password) - (tramp-fuse-unmount v)))))) + + (setq ret + (apply + #'tramp-call-process + v (tramp-get-method-parameter v 'tramp-login-program) + nil outbuf display + (tramp-expand-args + v 'tramp-login-args nil + ?h (or (tramp-file-name-host v) "") + ?u (or (tramp-file-name-user v) "") + ?p (or (tramp-file-name-port v) "") + ?a "-t" ?l command)))))) (defun tramp-sshfs-handle-rename-file (filename newname &optional ok-if-already-exists) diff --git a/lisp/net/tramp-sudoedit.el b/lisp/net/tramp-sudoedit.el index 4cfe2cd0808..ff01eac5b93 100644 --- a/lisp/net/tramp-sudoedit.el +++ b/lisp/net/tramp-sudoedit.el @@ -161,15 +161,15 @@ See `tramp-actions-before-shell' for more info.") ;;;###tramp-autoload (defsubst tramp-sudoedit-file-name-p (vec-or-filename) "Check if it's a VEC-OR-FILENAME for SUDOEDIT." - (when-let* ((vec (tramp-ensure-dissected-file-name vec-or-filename))) - (string= (tramp-file-name-method vec) tramp-sudoedit-method))) + (and-let* ((vec (tramp-ensure-dissected-file-name vec-or-filename)) + ((string= (tramp-file-name-method vec) tramp-sudoedit-method))))) ;;;###tramp-autoload (defun tramp-sudoedit-file-name-handler (operation &rest args) "Invoke the SUDOEDIT handler for OPERATION and ARGS. First arg specifies the OPERATION, second arg is a list of arguments to pass to the OPERATION." - (if-let ((fn (assoc operation tramp-sudoedit-file-name-handler-alist))) + (if-let* ((fn (assoc operation tramp-sudoedit-file-name-handler-alist))) (prog1 (save-match-data (apply (cdr fn) args)) (setq tramp-debug-message-fnh-function (cdr fn))) (prog1 (tramp-run-real-handler operation args) @@ -244,84 +244,88 @@ absolute file names." (unless (memq op '(copy rename)) (error "Unknown operation `%s', must be `copy' or `rename'" op)) - (setq filename (file-truename filename)) (if (file-directory-p filename) (progn (copy-directory filename newname keep-date t) (when (eq op 'rename) (delete-directory filename 'recursive))) - - ;; FIXME: This should be optimized. Computing `file-attributes' - ;; checks already, whether the file exists. - (let ((t1 (tramp-sudoedit-file-name-p filename)) - (t2 (tramp-sudoedit-file-name-p newname)) - (file-times (file-attribute-modification-time - (file-attributes filename))) - (file-modes (tramp-default-file-modes filename)) - (attributes (and preserve-extended-attributes - (file-extended-attributes filename))) - (sudoedit-operation - (cond - ((and (eq op 'copy) preserve-uid-gid) '("cp" "-f" "-p")) - ((eq op 'copy) '("cp" "-f")) - ((eq op 'rename) '("mv" "-f")))) - (msg-operation (if (eq op 'copy) "Copying" "Renaming"))) - - (with-parsed-tramp-file-name (if t1 filename newname) nil - (tramp-barf-if-file-missing v filename - (when (and (not ok-if-already-exists) (file-exists-p newname)) - (tramp-error v 'file-already-exists newname)) - (when (and (file-directory-p newname) - (not (directory-name-p newname))) - (tramp-error v 'file-error "File is a directory %s" newname)) - - (if (or (and (tramp-tramp-file-p filename) (not t1)) - (and (tramp-tramp-file-p newname) (not t2))) - ;; We cannot copy or rename directly. - (let ((tmpfile (tramp-compat-make-temp-file filename))) - (if (eq op 'copy) - (copy-file filename tmpfile t) - (rename-file filename tmpfile t)) - (rename-file tmpfile newname ok-if-already-exists)) - - ;; Direct action. - (with-tramp-progress-reporter - v 0 (format "%s %s to %s" msg-operation filename newname) - (unless (tramp-sudoedit-send-command - v sudoedit-operation - (tramp-unquote-file-local-name filename) - (tramp-unquote-file-local-name newname)) - (tramp-error - v 'file-error - "Error %s `%s' `%s'" msg-operation filename newname)))) - - ;; When `newname' is local, we must change the ownership to - ;; the local user. - (unless (tramp-tramp-file-p newname) - (tramp-set-file-uid-gid - (concat (file-remote-p filename) newname) - (tramp-get-local-uid 'integer) - (tramp-get-local-gid 'integer))) - - ;; Set the time and mode. Mask possible errors. - (when keep-date - (ignore-errors - (tramp-compat-set-file-times - newname file-times (unless ok-if-already-exists 'nofollow)) - (set-file-modes newname file-modes))) - - ;; Handle `preserve-extended-attributes'. We ignore possible - ;; errors, because ACL strings could be incompatible. - (when attributes - (ignore-errors - (set-file-extended-attributes newname attributes))) - - (when (and t1 (eq op 'rename)) - (with-parsed-tramp-file-name filename v1 - (tramp-flush-file-properties v1 v1-localname))) - - (when t2 - (with-parsed-tramp-file-name newname v2 - (tramp-flush-file-properties v2 v2-localname)))))))) + (if (file-symlink-p filename) + (progn + (make-symbolic-link + (file-symlink-p filename) newname ok-if-already-exists) + (when (eq op 'rename) (delete-file filename))) + + ;; FIXME: This should be optimized. Computing `file-attributes' + ;; checks already, whether the file exists. + (let ((t1 (tramp-sudoedit-file-name-p filename)) + (t2 (tramp-sudoedit-file-name-p newname)) + (file-times (file-attribute-modification-time + (file-attributes filename))) + (file-modes (tramp-default-file-modes filename)) + (attributes (and preserve-extended-attributes + (file-extended-attributes filename))) + (sudoedit-operation + (cond + ((and (eq op 'copy) preserve-uid-gid) '("cp" "-f" "-p")) + ((eq op 'copy) '("cp" "-f")) + ((eq op 'rename) '("mv" "-f")))) + (msg-operation (if (eq op 'copy) "Copying" "Renaming"))) + + (with-parsed-tramp-file-name (if t1 filename newname) nil + (tramp-barf-if-file-missing v filename + (when (and (not ok-if-already-exists) (file-exists-p newname)) + (tramp-error v 'file-already-exists newname)) + (when (and (file-directory-p newname) + (not (directory-name-p newname))) + (tramp-error v 'file-error "File is a directory %s" newname)) + + (if (or (and (tramp-tramp-file-p filename) (not t1)) + (and (tramp-tramp-file-p newname) (not t2))) + ;; We cannot copy or rename directly. + (let ((tmpfile (tramp-compat-make-temp-file filename))) + (if (eq op 'copy) + (copy-file filename tmpfile t) + (rename-file filename tmpfile t)) + (rename-file tmpfile newname ok-if-already-exists)) + + ;; Direct action. + (with-tramp-progress-reporter + v 0 (format "%s %s to %s" msg-operation filename newname) + (unless (tramp-sudoedit-send-command + v sudoedit-operation + (tramp-unquote-file-local-name filename) + (tramp-unquote-file-local-name newname)) + (tramp-error + v 'file-error + "Error %s `%s' `%s'" msg-operation filename newname)))) + + ;; When `newname' is local, we must change the ownership + ;; to the local user. + (unless (tramp-tramp-file-p newname) + (tramp-set-file-uid-gid + (concat (file-remote-p filename) newname) + (tramp-get-local-uid 'integer) + (tramp-get-local-gid 'integer))) + + ;; Set the time and mode. Mask possible errors. + (when keep-date + (ignore-errors + (tramp-compat-set-file-times + newname file-times (unless ok-if-already-exists 'nofollow)) + (set-file-modes newname file-modes))) + + ;; Handle `preserve-extended-attributes'. We ignore possible + ;; errors, because ACL strings could be incompatible. + (when attributes + (ignore-errors + (set-file-extended-attributes newname attributes))) + + (when (and t1 (eq op 'rename)) + (with-parsed-tramp-file-name filename v1 + (tramp-flush-file-properties v1 v1-localname))) + + (when t2 + (with-parsed-tramp-file-name newname v2 + (tramp-flush-file-properties v2 v2-localname))))))))) (defun tramp-sudoedit-handle-copy-file (filename newname &optional ok-if-already-exists keep-date @@ -785,7 +789,7 @@ in case of error, t otherwise." ;; Avoid process status message in output buffer. (set-process-sentinel p #'ignore) (tramp-post-process-creation p vec) - (tramp-set-connection-property p "password-vector" tramp-sudoedit-null-hop) + (tramp-set-connection-property p "pw-vector" tramp-sudoedit-null-hop) (tramp-process-actions p vec nil tramp-sudoedit-sudo-actions) (tramp-message vec 6 "%s\n%s" (process-exit-status p) (buffer-string)) (prog1 diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 91d0865f53e..ec8835c13f0 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -126,9 +126,8 @@ :version "22.1" :link '(custom-manual "(tramp)Top")) -;; Maybe we need once a real Tramp mode, with key bindings etc. ;;;###autoload -(defcustom tramp-mode t +(defcustom tramp-mode (fboundp 'make-process) ; Disable on MS-DOS. "Whether Tramp is enabled. If it is set to nil, all remote file names are used literally." :type 'boolean) @@ -687,12 +686,15 @@ The `sudo' program appears to insert a `^@' character into the prompt." (defcustom tramp-otp-password-prompt-regexp (rx-to-string `(: bol (* nonl) - ;; JumpCloud. - (group (| "Verification code")) + (group (| + ;; JumpCloud. + "Verification code" + ;; TACC HPC. + "TACC Token Code")) (* nonl) (any . ,tramp-compat-password-colon-equivalents) (* blank))) "Regexp matching one-time password prompts. The regexp should match at end of buffer." - :version "29.2" + :version "30.2" :type 'regexp) (defcustom tramp-wrong-passwd-regexp @@ -706,12 +708,51 @@ The regexp should match at end of buffer." "No supported authentication methods left to try!" (: "Login " (| "Incorrect" "incorrect")) (: "Connection " (| "refused" "closed")) - (: "Received signal " (+ digit))) + (: "Received signal " (+ digit)) + ;; Fingerprint. + "Verification timed out" + "Failed to match fingerprint" + "An unknown error occurred") (* nonl)) "Regexp matching a `login failed' message. The regexp should match at end of buffer." :type 'regexp) +;; +(defcustom tramp-fingerprint-prompt-regexp + (rx (| "Place your finger on" + "Swipe your finger across" + "Place your left thumb on" + "Swipe your left thumb across" + "Place your left index finger on" + "Swipe your left index finger across" + "Place your left middle finger on" + "Swipe your left middle finger across" + "Place your left ring finger on" + "Swipe your left ring finger across" + "Place your left little finger on" + "Swipe your left little finger across" + "Place your right thumb on" + "Swipe your right thumb across" + "Place your right index finger on" + "Swipe your right index finger across" + "Place your right middle finger on" + "Swipe your right middle finger across" + "Place your right ring finger on" + "Swipe your right ring finger across" + "Place your right little finger on" + "Swipe your right little finger across" + "Place your finger on the reader again" + "Swipe your finger again" + "Swipe was too short, try again" + "Your finger was not centred, try swiping your finger again" + "Remove your finger, and try swiping your finger again") + (* nonl) (* (any "\r\n"))) + "Regexp matching fingerprint prompts. +The regexp should match at end of buffer." + :version "30.2" + :type 'regexp) + (defcustom tramp-yesno-prompt-regexp (rx "Are you sure you want to continue connecting (yes/no" (? "/[fingerprint]") ")?" @@ -1488,24 +1529,24 @@ calling HANDLER.") "method: " (tramp-compat-seq-keep (lambda (x) - (when-let ((name (symbol-name x)) - ;; It must match `tramp-enable-METHOD-method'. - ((string-match - (rx "tramp-enable-" - (group (regexp tramp-method-regexp)) - "-method") - name)) - (method (match-string 1 name)) - ;; It must not be enabled yet. - ((not (assoc method tramp-methods)))) + (when-let* ((name (symbol-name x)) + ;; It must match `tramp-enable-METHOD-method'. + ((string-match + (rx "tramp-enable-" + (group (regexp tramp-method-regexp)) + "-method") + name)) + (method (match-string 1 name)) + ;; It must not be enabled yet. + ((not (assoc method tramp-methods)))) method)) ;; All method enabling functions. (mapcar #'intern (all-completions "tramp-enable-" obarray #'functionp)))))) - (when-let (((not (assoc method tramp-methods))) - (fn (intern (format "tramp-enable-%s-method" method))) - ((functionp fn))) + (when-let* (((not (assoc method tramp-methods))) + (fn (intern (format "tramp-enable-%s-method" method))) + ((functionp fn))) (funcall fn) (message "Tramp method \"%s\" enabled" method))) @@ -1614,9 +1655,9 @@ entry does not exist, return DEFAULT." ;; We use the cached property. (tramp-get-connection-property vec hash-entry) ;; Use the static value from `tramp-methods'. - (if-let ((methods-entry - (assoc - param (assoc (tramp-file-name-method vec) tramp-methods)))) + (if-let* ((methods-entry + (assoc + param (assoc (tramp-file-name-method vec) tramp-methods)))) (cadr methods-entry) ;; Return the default value. default)))) @@ -1847,8 +1888,14 @@ See `tramp-dissect-file-name' for details." ;;;###tramp-autoload (defsubst tramp-string-empty-or-nil-p (string) "Check whether STRING is empty or nil." + ;; (declare (tramp-suppress-trace t)) (or (null string) (string= string ""))) +;; We cannot use the `declare' form for `tramp-suppress-trace' in +;; autoloaded functions, because the tramp-loaddefs.el generation +;; would fail. +(function-put #'tramp-string-empty-or-nil-p 'tramp-suppress-trace t) + (defun tramp-buffer-name (vec) "A name for the connection buffer VEC." (declare (tramp-suppress-trace t)) @@ -2053,7 +2100,7 @@ does not exist, otherwise propagate the error." `(condition-case ,err (progn ,@body) (error - (if (not (file-exists-p ,filename)) + (if (not (or (file-exists-p ,filename) (file-symlink-p ,filename))) (tramp-error ,vec 'file-missing ,filename) (signal (car ,err) (cdr ,err))))))) @@ -2127,9 +2174,9 @@ without a visible progress reporter." ;; We start a pulsing progress reporter after 3 seconds. ;; Start only when there is no other progress reporter ;; running, and when there is a minimum level. - (when-let ((pr (and (null tramp-inhibit-progress-reporter) - (<= ,level (min tramp-verbose 3)) - (make-progress-reporter ,message)))) + (when-let* ((pr (and (null tramp-inhibit-progress-reporter) + (<= ,level (min tramp-verbose 3)) + (make-progress-reporter ,message)))) (run-at-time 3 0.1 #'tramp-progress-reporter-update pr)))) (unwind-protect ;; Execute the body. @@ -2151,8 +2198,8 @@ without a visible progress reporter." (let ((seconds (car list)) (timeout-forms (cdr list))) ;; If non-nil, `seconds' must be a positive number. - `(if-let (((natnump ,seconds)) - ((not (zerop timeout)))) + `(if-let* (((natnump ,seconds)) + ((not (zerop timeout)))) (with-timeout (,seconds ,@timeout-forms) ,@body) ,@body))) @@ -2527,7 +2574,7 @@ Fall back to normal file name handler if no Tramp file name handler exists." (defun tramp-completion-file-name-handler (operation &rest args) "Invoke Tramp file name completion handler for OPERATION and ARGS. Falls back to normal file name handler if no Tramp file name handler exists." - (if-let + (if-let* ((fn (and tramp-mode minibuffer-completing-file-name (assoc operation tramp-completion-file-name-handler-alist)))) (save-match-data (apply (cdr fn) args)) @@ -2623,7 +2670,7 @@ remote file names." ;; If jka-compr or epa-file are already loaded, move them to the ;; front of `file-name-handler-alist'. (dolist (fnh '(epa-file-handler jka-compr-handler)) - (when-let ((entry (rassoc fnh file-name-handler-alist))) + (when-let* ((entry (rassoc fnh file-name-handler-alist))) (setq file-name-handler-alist (cons entry (delete entry file-name-handler-alist)))))) @@ -3492,12 +3539,19 @@ BODY is the backend specific code." (when (tramp-connectable-p ,filename) (with-parsed-tramp-file-name (expand-file-name ,filename) nil (with-tramp-file-property v localname "file-exists-p" - ;; Examine `file-attributes' cache to see if request can - ;; be satisfied without remote operation. - (if (tramp-file-property-p v localname "file-attributes") - (not - (null (tramp-get-file-property v localname "file-attributes"))) - ,@body)))))) + (cond + ;; Examine `file-attributes' cache to see if request can + ;; be satisfied without remote operation. + ((and-let* + (((tramp-file-property-p v localname "file-attributes")) + (fa (tramp-get-file-property v localname "file-attributes")) + ((not (stringp (car fa))))))) + ;; Symlink to a non-existing target counts as nil. + ;; Protect against cyclic symbolic links. + ((file-symlink-p ,filename) + (ignore-errors + (file-exists-p (file-truename ,filename)))) + (t ,@body))))))) (defmacro tramp-skeleton-file-local-copy (filename &rest body) "Skeleton for `tramp-*-handle-file-local-copy'. @@ -3639,7 +3693,9 @@ on the same host. Otherwise, TARGET is quoted." (setf ,target (tramp-file-local-name (expand-file-name ,target)))) ;; There could be a cyclic link. (tramp-flush-file-properties - v (expand-file-name ,target (tramp-file-local-name default-directory)))) + v (tramp-drop-volume-letter + (expand-file-name + ,target (tramp-file-local-name default-directory))))) ;; If TARGET is still remote, quote it. (if (tramp-tramp-file-p ,target) @@ -3719,10 +3775,13 @@ BODY is the backend specific code." tmpstderr (tramp-make-tramp-file-name v stderr)))) ;; stderr to be discarded. ((null (cadr ,destination)) - (setq stderr (tramp-get-remote-null-device v))))) + (setq stderr (tramp-get-remote-null-device v))) + ((eq (cadr ,destination) tramp-cache-undefined) + ;; stderr is not impelmemted. + (tramp-warning v "%s" "STDERR not supported")))) ;; t (,destination - (setq outbuf (current-buffer)))) + (setq outbuf (current-buffer)))) ,@body @@ -3758,7 +3817,7 @@ BODY is the backend specific code." ;; We cannot add "file-attributes", "file-executable-p", ;; "file-ownership-preserved-p", "file-readable-p", ;; "file-writable-p". - '("file-directory-p" "file-exists-p" "file-symlinkp" "file-truename") + '("file-directory-p" "file-exists-p" "file-symlink-p" "file-truename") (tramp-flush-file-properties v localname)) (condition-case err (progn ,@body) @@ -3840,7 +3899,7 @@ BODY is the backend specific code." (let (last-coding-system-used (need-chown t)) ;; Set file modification time. (when (or (eq ,visit t) (stringp ,visit)) - (when-let ((file-attr (file-attributes filename 'integer))) + (when-let* ((file-attr (file-attributes filename 'integer))) (set-visited-file-modtime ;; We must pass modtime explicitly, because FILENAME ;; can be different from (buffer-file-name), f.e. if @@ -3954,9 +4013,9 @@ Let-bind it when necessary.") (tramp-dont-suspend-timers t)) (with-tramp-timeout (timeout - (unless (when-let ((p (tramp-get-connection-process v))) - (and (process-live-p p) - (tramp-get-connection-property p "connected"))) + (unless (and-let* ((p (tramp-get-connection-process v)) + ((process-live-p p)) + ((tramp-get-connection-property p "connected")))) (tramp-cleanup-connection v 'keep-debug 'keep-password)) (tramp-error v 'file-error @@ -4100,10 +4159,9 @@ Let-bind it when necessary.") (defun tramp-handle-file-directory-p (filename) "Like `file-directory-p' for Tramp files." ;; `file-truename' could raise an error, for example due to a cyclic - ;; symlink. We don't protect this despite it, because other errors - ;; might be worth to be visible, for example impossibility to mount - ;; in tramp-gvfs.el. - (eq (file-attribute-type (file-attributes (file-truename filename))) t)) + ;; symlink. + (ignore-errors + (eq (file-attribute-type (file-attributes (file-truename filename))) t))) (defun tramp-handle-file-equal-p (filename1 filename2) "Like `file-equalp-p' for Tramp files." @@ -4135,8 +4193,8 @@ Let-bind it when necessary.") (defun tramp-handle-file-modes (filename &optional flag) "Like `file-modes' for Tramp files." - (when-let ((attrs (file-attributes filename)) - (mode-string (file-attribute-modes attrs))) + (when-let* ((attrs (file-attributes filename)) + (mode-string (file-attribute-modes attrs))) (if (and (not (eq flag 'nofollow)) (eq ?l (aref mode-string 0))) (file-modes (file-truename filename)) (tramp-mode-string-to-int mode-string)))) @@ -4276,10 +4334,10 @@ Let-bind it when necessary.") (or (tramp-check-cached-permissions v ?r) ;; `tramp-check-cached-permissions' doesn't handle symbolic ;; links. - (when-let ((symlink (file-symlink-p filename))) - (and (stringp symlink) - (file-readable-p - (concat (file-remote-p filename) symlink)))))))) + (and-let* ((symlink (file-symlink-p filename)) + ((stringp symlink)) + ((file-readable-p + (concat (file-remote-p filename) symlink))))))))) (defun tramp-handle-file-regular-p (filename) "Like `file-regular-p' for Tramp files." @@ -4289,7 +4347,7 @@ Let-bind it when necessary.") ;; because `file-truename' could raise an error for cyclic ;; symlinks. (ignore-errors - (when-let ((attr (file-attributes filename))) + (when-let* ((attr (file-attributes filename))) (cond ((eq ?- (aref (file-attribute-modes attr) 0))) ((eq ?l (aref (file-attribute-modes attr) 0)) @@ -4729,7 +4787,7 @@ It is not guaranteed, that all process attributes as described in (defun tramp-get-lock-file (file) "Read lockfile info of FILE. Return nil when there is no lockfile." - (when-let ((lockname (tramp-compat-make-lock-file-name file))) + (when-let* ((lockname (tramp-compat-make-lock-file-name file))) (or (file-symlink-p lockname) (and (file-readable-p lockname) (with-temp-buffer @@ -4760,8 +4818,8 @@ Do not set it manually, it is used buffer-local in `tramp-get-lock-pid'.") (defun tramp-handle-file-locked-p (file) "Like `file-locked-p' for Tramp files." - (when-let ((info (tramp-get-lock-file file)) - (match (string-match tramp-lock-file-info-regexp info))) + (when-let* ((info (tramp-get-lock-file file)) + (match (string-match tramp-lock-file-info-regexp info))) (or ; Locked by me. (and (string-equal (match-string 1 info) (user-login-name)) (string-equal (match-string 2 info) tramp-system-name) @@ -4783,20 +4841,20 @@ Do not set it manually, it is used buffer-local in `tramp-get-lock-pid'.") ;; for remote files. (ask-user-about-supersession-threat file)) - (when-let ((info (tramp-get-lock-file file)) - (match (string-match tramp-lock-file-info-regexp info))) + (when-let* ((info (tramp-get-lock-file file)) + (match (string-match tramp-lock-file-info-regexp info))) (unless (ask-user-about-lock file (format "%s@%s (pid %s)" (match-string 1 info) (match-string 2 info) (match-string 3 info))) (throw 'dont-lock nil))) - (when-let ((lockname (tramp-compat-make-lock-file-name file)) - ;; USER@HOST.PID[:BOOT_TIME] - (info - (format - "%s@%s.%s" (user-login-name) tramp-system-name - (tramp-get-lock-pid file)))) + (when-let* ((lockname (tramp-compat-make-lock-file-name file)) + ;; USER@HOST.PID[:BOOT_TIME] + (info + (format + "%s@%s.%s" (user-login-name) tramp-system-name + (tramp-get-lock-pid file)))) ;; Protect against security hole. (with-parsed-tramp-file-name file nil @@ -4837,9 +4895,9 @@ Do not set it manually, it is used buffer-local in `tramp-get-lock-pid'.") ;; When there is no connection, we don't do it. Otherwise, ;; functions like `kill-buffer' would try to reestablish the ;; connection. See Bug#61663. - (if-let ((v (tramp-dissect-file-name file)) - ((process-live-p (tramp-get-process v))) - (lockname (tramp-compat-make-lock-file-name file))) + (if-let* ((v (tramp-dissect-file-name file)) + ((process-live-p (tramp-get-process v))) + (lockname (tramp-compat-make-lock-file-name file))) (delete-file lockname) ;; Trigger the unlock error. Be quiet if user isn't ;; interested in lock files. See Bug#70900. @@ -4885,8 +4943,8 @@ Do not set it manually, it is used buffer-local in `tramp-get-lock-pid'.") (defun tramp-add-hops (vec) "Add ad-hoc proxy definitions to `tramp-default-proxies-alist'." - (when-let ((hops (tramp-file-name-hop vec)) - (item vec)) + (when-let* ((hops (tramp-file-name-hop vec)) + (item vec)) (let (signal-hook-function changed) (dolist (proxy (reverse (split-string hops tramp-postfix-hop-regexp 'omit))) @@ -4918,69 +4976,74 @@ Do not set it manually, it is used buffer-local in `tramp-get-lock-pid'.") (item vec) choices proxy) - ;; Ad-hoc proxy definitions. - (tramp-add-hops vec) - - ;; Look for proxy hosts to be passed. - (setq choices tramp-default-proxies-alist) - (while choices - (setq item (pop choices) - proxy (eval (nth 2 item) t)) - (when (and - ;; Host. - (string-match-p - (or (eval (nth 0 item) t) "") - (or (tramp-file-name-host-port (car target-alist)) "")) - ;; User. - (string-match-p - (or (eval (nth 1 item) t) "") - (or (tramp-file-name-user-domain (car target-alist)) ""))) - (if (null proxy) - ;; No more hops needed. - (setq choices nil) - ;; Replace placeholders. - (setq proxy - (format-spec - proxy - (format-spec-make - ?u (or (tramp-file-name-user (car target-alist)) "") - ?h (or (tramp-file-name-host (car target-alist)) "")))) - (with-parsed-tramp-file-name proxy l - ;; Add the hop. - (push l target-alist) - ;; Start next search. - (setq choices tramp-default-proxies-alist))))) - - ;; Foreign and out-of-band methods are not supported for multi-hops. - (when (cdr target-alist) - (setq choices target-alist) - (while (setq item (pop choices)) - (unless (tramp-multi-hop-p item) - (setq tramp-default-proxies-alist saved-tdpa) - (tramp-user-error - vec "Method `%s' is not supported for multi-hops" - (tramp-file-name-method item))))) - - ;; Some methods ("su", "sg", "sudo", "doas", "run0", "ksu") do not - ;; use the host name in their command template. In this case, the - ;; remote file name must use either a local host name (first hop), - ;; or a host name matching the previous hop. - (let ((previous-host (or tramp-local-host-regexp ""))) - (setq choices target-alist) - (while (setq item (pop choices)) - (let ((host (tramp-file-name-host item))) - (unless - (or - ;; The host name is used for the remote shell command. - (member - "%h" (flatten-tree - (tramp-get-method-parameter item 'tramp-login-args))) - ;; The host name must match previous hop. - (string-match-p previous-host host)) + ;; `tramp-compute-multi-hops' could be called also for other file + ;; name handlers, for example in `tramp-clear-passwd'. + (when (tramp-sh-file-name-handler-p vec) + + ;; Ad-hoc proxy definitions. + (tramp-add-hops vec) + + ;; Look for proxy hosts to be passed. + (setq choices tramp-default-proxies-alist) + (while choices + (setq item (pop choices) + proxy (eval (nth 2 item) t)) + (when (and + ;; Host. + (string-match-p + (or (eval (nth 0 item) t) "") + (or (tramp-file-name-host-port (car target-alist)) "")) + ;; User. + (string-match-p + (or (eval (nth 1 item) t) "") + (or (tramp-file-name-user-domain (car target-alist)) ""))) + (if (null proxy) + ;; No more hops needed. + (setq choices nil) + ;; Replace placeholders. + (setq proxy + (format-spec + proxy + (format-spec-make + ?u (or (tramp-file-name-user (car target-alist)) "") + ?h (or (tramp-file-name-host (car target-alist)) "")))) + (with-parsed-tramp-file-name proxy l + ;; Add the hop. + (push l target-alist) + ;; Start next search. + (setq choices tramp-default-proxies-alist))))) + + ;; Foreign and out-of-band methods are not supported for + ;; multi-hops. + (when (cdr target-alist) + (setq choices target-alist) + (while (setq item (pop choices)) + (unless (tramp-multi-hop-p item) (setq tramp-default-proxies-alist saved-tdpa) (tramp-user-error - vec "Host name `%s' does not match `%s'" host previous-host)) - (setq previous-host (rx bol (literal host) eol))))) + vec "Method `%s' is not supported for multi-hops" + (tramp-file-name-method item))))) + + ;; Some methods ("su", "sg", "sudo", "doas", "run0", "ksu") do + ;; not use the host name in their command template. In this + ;; case, the remote file name must use either a local host name + ;; (first hop), or a host name matching the previous hop. + (let ((previous-host (or tramp-local-host-regexp ""))) + (setq choices target-alist) + (while (setq item (pop choices)) + (let ((host (tramp-file-name-host item))) + (unless + (or + ;; The host name is used for the remote shell command. + (member + "%h" (flatten-tree + (tramp-get-method-parameter item 'tramp-login-args))) + ;; The host name must match previous hop. + (string-match-p previous-host host)) + (setq tramp-default-proxies-alist saved-tdpa) + (tramp-user-error + vec "Host name `%s' does not match `%s'" host previous-host)) + (setq previous-host (rx bol (literal host) eol)))))) ;; Result. target-alist)) @@ -5094,13 +5157,13 @@ should be set connection-local.") elt (default-toplevel-value 'process-environment)))) (setq env (cons elt env))))) ;; Add remote path if exists. - (env (if-let ((sh-file-name-handler-p) - (remote-path - (string-join (tramp-get-remote-path v) ":"))) + (env (if-let* ((sh-file-name-handler-p) + (remote-path + (string-join (tramp-get-remote-path v) ":"))) (setenv-internal env "PATH" remote-path 'keep) env)) ;; Add HISTFILE if indicated. - (env (if-let ((sh-file-name-handler-p)) + (env (if sh-file-name-handler-p (cond ((stringp tramp-histfile-override) (setenv-internal @@ -5409,8 +5472,22 @@ support symbolic links." (insert-file-contents-literally error-file nil nil nil 'replace)) (delete-file error-file))))) - (display-buffer output-buffer '(nil (allow-no-window . t))))) - + (if async-shell-command-display-buffer + ;; Display buffer immediately. + (display-buffer output-buffer '(nil (allow-no-window . t))) + ;; Defer displaying buffer until first process output. + ;; Use disposable named advice so that the buffer is + ;; displayed at most once per process lifetime. + (let ((nonce (make-symbol "nonce"))) + (add-function + :before (process-filter p) + (lambda (proc _string) + (let ((buf (process-buffer proc))) + (when (buffer-live-p buf) + (remove-function (process-filter proc) + nonce) + (display-buffer buf '(nil (allow-no-window . t)))))) + `((name . ,nonce))))))) ;; Insert error messages if they were separated. (when (and error-file (not (process-live-p p))) (ignore-errors @@ -5649,7 +5726,11 @@ of." ;; Sometimes, the process returns a new password request ;; immediately after rejecting the previous (wrong) one. (unless (or tramp-password-prompt-not-unique - (tramp-get-connection-property vec "first-password-request")) + (tramp-get-connection-property + (tramp-get-connection-property + proc "hop-vector" + (process-get proc 'tramp-vector)) + "first-password-request")) (tramp-clear-passwd vec)) (goto-char (point-min)) (tramp-check-for-regexp proc tramp-process-action-regexp) @@ -5687,6 +5768,22 @@ of." (narrow-to-region (point-max) (point-max)))) t) +(defcustom tramp-use-fingerprint t + "Whether fingerprint prompts shall be used for authentication." + :version "30.2" + :type 'boolean) + +(defun tramp-action-fingerprint (proc vec) + "Query the user for a fingerprint verification. +Interrupt the query if `tramp-use-fingerprint' is nil." + (with-current-buffer (process-buffer proc) + (if tramp-use-fingerprint + (tramp-action-show-message proc vec) + (interrupt-process proc) + ;; Hide message. + (narrow-to-region (point-max) (point-max)))) + t) + (defun tramp-action-succeed (_proc _vec) "Signal success in finding shell prompt." (throw 'tramp-action 'ok)) @@ -5733,6 +5830,26 @@ The terminal type can be configured with `tramp-terminal-type'." (tramp-send-string vec (concat tramp-terminal-type tramp-local-end-of-line)) t) +(defun tramp-action-show-message (proc vec) + "Show the user a message for confirmation. +Wait, until the connection buffer changes." + (with-current-buffer (process-buffer proc) + (let ((cursor-in-echo-area t) + set-message-function clear-message-function tramp-dont-suspend-timers) + (with-tramp-suspended-timers + ;; Silence byte compiler. + (ignore set-message-function clear-message-function) + (tramp-message vec 6 "\n%s" (buffer-string)) + (goto-char (point-min)) + (tramp-check-for-regexp proc tramp-process-action-regexp) + (with-temp-message (concat (string-trim (match-string 0)) " ") + ;; Hide message in buffer. + (narrow-to-region (point-max) (point-max)) + ;; Wait for new output. + (while (tramp-compat-length= (buffer-string) 0) + (tramp-accept-process-output proc)))))) + t) + (defun tramp-action-confirm-message (_proc vec) "Return RET in order to confirm the message." (tramp-message @@ -5750,6 +5867,7 @@ Wait, until the connection buffer changes." ;; Silence byte compiler. (ignore set-message-function clear-message-function) (tramp-message vec 6 "\n%s" (buffer-string)) + (goto-char (point-min)) (tramp-check-for-regexp proc tramp-process-action-regexp) (with-temp-message (concat (string-trim (match-string 0)) " ") ;; Hide message in buffer. @@ -5852,10 +5970,10 @@ because the shell prompt has been detected), it shall throw a result. The symbol `ok' means that all ACTIONs have been performed successfully. Any other value means an error." ;; Enable `auth-source', unless "emacs -Q" has been called. We must - ;; use the "password-vector" property in case we have several hops. + ;; use the "hop-vector" property in case we have several hops. (tramp-set-connection-property (tramp-get-connection-property - proc "password-vector" (process-get proc 'tramp-vector)) + proc "hop-vector" (process-get proc 'tramp-vector)) "first-password-request" tramp-cache-read-persistent-data) (save-restriction (with-tramp-progress-reporter @@ -5936,8 +6054,8 @@ If the user quits via `C-g', it is propagated up to `tramp-file-name-handler'." ;; communication. This could block the output for the current ;; process. Read such output first. (Bug#61350) ;; The process property isn't set anymore due to Bug#62194. - (when-let (((process-get proc 'tramp-shared-socket)) - (v (process-get proc 'tramp-vector))) + (when-let* (((process-get proc 'tramp-shared-socket)) + (v (process-get proc 'tramp-vector))) (dolist (p (delq proc (process-list))) (when (tramp-file-name-equal-p v (process-get p 'tramp-vector)) (with-tramp-suspended-timers @@ -6020,6 +6138,8 @@ nil." (let ((found (tramp-check-for-regexp proc regexp))) (with-tramp-timeout (timeout) (while (not found) + ;; This is needed to yield the CPU, otherwise we'll see 100% CPU load. + (sit-for 0 'nodisp) (tramp-accept-process-output proc) (unless (process-live-p proc) (tramp-error-with-buffer @@ -6247,10 +6367,10 @@ depending whether FILENAME is remote or local. Both parameters must be non-negative integers. The setgid bit of the upper directory is respected. If FILENAME is remote, a file name handler is called." - (let* ((dir (file-name-directory filename)) - (modes (file-modes dir))) - (when (and modes (not (zerop (logand modes #o2000)))) - (setq gid (file-attribute-group-id (file-attributes dir))))) + (when-let* ((dir (file-name-directory filename)) + (modes (file-modes dir)) + ((not (zerop (logand modes #o2000))))) + (setq gid (file-attribute-group-id (file-attributes dir)))) (if (tramp-tramp-file-p filename) (funcall (if (tramp-crypt-file-name-p filename) @@ -6308,14 +6428,14 @@ VEC is used for tracing." "Check `file-attributes' caches for VEC. Return t if according to the cache access type ACCESS is known to be granted." - (when-let ((offset (cond - ((eq ?r access) 1) - ((eq ?w access) 2) - ((eq ?x access) 3) - ((eq ?s access) 3))) - (file-attr (file-attributes (tramp-make-tramp-file-name vec))) - (remote-uid (tramp-get-remote-uid vec 'integer)) - (remote-gid (tramp-get-remote-gid vec 'integer))) + (when-let* ((offset (cond + ((eq ?r access) 1) + ((eq ?w access) 2) + ((eq ?x access) 3) + ((eq ?s access) 3))) + (file-attr (file-attributes (tramp-make-tramp-file-name vec))) + (remote-uid (tramp-get-remote-uid vec 'integer)) + (remote-gid (tramp-get-remote-gid vec 'integer))) (or ;; Not a symlink. (eq t (file-attribute-type file-attr)) @@ -6352,112 +6472,110 @@ Convert file mode bits to string and set virtual device number. Set file uid and gid according to ID-FORMAT. LOCALNAME is used to cache the result. Return the modified ATTR." (declare (indent 3) (debug t)) - `(with-tramp-file-property - ,vec ,localname (format "file-attributes-%s" (or ,id-format 'integer)) - (when-let - ((result - (with-tramp-file-property ,vec ,localname "file-attributes" - (when-let ((attr ,attr)) - (save-match-data - ;; Remove ANSI control escape sequences from symlink. + `(when-let* + ((result + (with-tramp-file-property ,vec ,localname "file-attributes" + (when-let* ((attr ,attr)) + (save-match-data + ;; Remove ANSI control escape sequences from symlink. + (when (stringp (car attr)) + (while (string-match ansi-color-control-seq-regexp (car attr)) + (setcar attr (replace-match "" nil nil (car attr))))) + ;; Convert uid and gid. Use `tramp-unknown-id-integer' + ;; as indication of unusable value. + (when (consp (nth 2 attr)) + (when (and (numberp (cdr (nth 2 attr))) + (< (cdr (nth 2 attr)) 0)) + (setcdr (car (nthcdr 2 attr)) tramp-unknown-id-integer)) + (when (and (floatp (cdr (nth 2 attr))) + (<= (cdr (nth 2 attr)) most-positive-fixnum)) + (setcdr (car (nthcdr 2 attr)) (round (cdr (nth 2 attr)))))) + (when (consp (nth 3 attr)) + (when (and (numberp (cdr (nth 3 attr))) + (< (cdr (nth 3 attr)) 0)) + (setcdr (car (nthcdr 3 attr)) tramp-unknown-id-integer)) + (when (and (floatp (cdr (nth 3 attr))) + (<= (cdr (nth 3 attr)) most-positive-fixnum)) + (setcdr (car (nthcdr 3 attr)) (round (cdr (nth 3 attr)))))) + ;; Convert last access time. + (unless (listp (nth 4 attr)) + (setcar (nthcdr 4 attr) (seconds-to-time (nth 4 attr)))) + ;; Convert last modification time. + (unless (listp (nth 5 attr)) + (setcar (nthcdr 5 attr) (seconds-to-time (nth 5 attr)))) + ;; Convert last status change time. + (unless (listp (nth 6 attr)) + (setcar (nthcdr 6 attr) (seconds-to-time (nth 6 attr)))) + ;; Convert file size. + (when (< (nth 7 attr) 0) + (setcar (nthcdr 7 attr) -1)) + (when (and (floatp (nth 7 attr)) + (<= (nth 7 attr) most-positive-fixnum)) + (setcar (nthcdr 7 attr) (round (nth 7 attr)))) + ;; Convert file mode bits to string. + (unless (stringp (nth 8 attr)) + (setcar (nthcdr 8 attr) + (tramp-file-mode-from-int (nth 8 attr))) (when (stringp (car attr)) - (while (string-match ansi-color-control-seq-regexp (car attr)) - (setcar attr (replace-match "" nil nil (car attr))))) - ;; Convert uid and gid. Use `tramp-unknown-id-integer' - ;; as indication of unusable value. - (when (consp (nth 2 attr)) - (when (and (numberp (cdr (nth 2 attr))) - (< (cdr (nth 2 attr)) 0)) - (setcdr (car (nthcdr 2 attr)) tramp-unknown-id-integer)) - (when (and (floatp (cdr (nth 2 attr))) - (<= (cdr (nth 2 attr)) most-positive-fixnum)) - (setcdr (car (nthcdr 2 attr)) (round (cdr (nth 2 attr)))))) - (when (consp (nth 3 attr)) - (when (and (numberp (cdr (nth 3 attr))) - (< (cdr (nth 3 attr)) 0)) - (setcdr (car (nthcdr 3 attr)) tramp-unknown-id-integer)) - (when (and (floatp (cdr (nth 3 attr))) - (<= (cdr (nth 3 attr)) most-positive-fixnum)) - (setcdr (car (nthcdr 3 attr)) (round (cdr (nth 3 attr)))))) - ;; Convert last access time. - (unless (listp (nth 4 attr)) - (setcar (nthcdr 4 attr) (seconds-to-time (nth 4 attr)))) - ;; Convert last modification time. - (unless (listp (nth 5 attr)) - (setcar (nthcdr 5 attr) (seconds-to-time (nth 5 attr)))) - ;; Convert last status change time. - (unless (listp (nth 6 attr)) - (setcar (nthcdr 6 attr) (seconds-to-time (nth 6 attr)))) - ;; Convert file size. - (when (< (nth 7 attr) 0) - (setcar (nthcdr 7 attr) -1)) - (when (and (floatp (nth 7 attr)) - (<= (nth 7 attr) most-positive-fixnum)) - (setcar (nthcdr 7 attr) (round (nth 7 attr)))) - ;; Convert file mode bits to string. - (unless (stringp (nth 8 attr)) - (setcar (nthcdr 8 attr) - (tramp-file-mode-from-int (nth 8 attr))) - (when (stringp (car attr)) - (aset (nth 8 attr) 0 ?l))) - ;; Convert directory indication bit. - (when (string-prefix-p "d" (nth 8 attr)) - (setcar attr t)) - ;; Convert symlink from `tramp-do-file-attributes-with-stat'. - ;; Decode also multibyte string. - (when (consp (car attr)) - (setcar attr - (and (stringp (caar attr)) - (string-match - (rx (+ nonl) " -> " nonl (group (+ nonl)) nonl) - (caar attr)) - (decode-coding-string - (match-string 1 (caar attr)) 'utf-8)))) - ;; Set file's gid change bit. - (setcar - (nthcdr 9 attr) - (not (= (cdr (nth 3 attr)) - (or (tramp-get-remote-gid ,vec 'integer) - tramp-unknown-id-integer)))) - ;; Convert inode. - (when (floatp (nth 10 attr)) - (setcar (nthcdr 10 attr) - (condition-case nil - (let ((high (nth 10 attr)) - middle low) + (aset (nth 8 attr) 0 ?l))) + ;; Convert directory indication bit. + (when (string-prefix-p "d" (nth 8 attr)) + (setcar attr t)) + ;; Convert symlink from `tramp-do-file-attributes-with-stat'. + ;; Decode also multibyte string. + (when (consp (car attr)) + (setcar attr + (and (stringp (caar attr)) + (string-match + (rx (+ nonl) " -> " nonl (group (+ nonl)) nonl) + (caar attr)) + (decode-coding-string + (match-string 1 (caar attr)) 'utf-8)))) + ;; Set file's gid change bit. + (setcar + (nthcdr 9 attr) + (not (= (cdr (nth 3 attr)) + (or (tramp-get-remote-gid ,vec 'integer) + tramp-unknown-id-integer)))) + ;; Convert inode. + (when (floatp (nth 10 attr)) + (setcar (nthcdr 10 attr) + (condition-case nil + (let ((high (nth 10 attr)) + middle low) + (if (<= high most-positive-fixnum) + (floor high) + ;; The low 16 bits. + (setq low (mod high #x10000) + high (/ high #x10000)) (if (<= high most-positive-fixnum) - (floor high) - ;; The low 16 bits. - (setq low (mod high #x10000) - high (/ high #x10000)) - (if (<= high most-positive-fixnum) - (cons (floor high) (floor low)) - ;; The middle 24 bits. - (setq middle (mod high #x1000000) - high (/ high #x1000000)) - (cons (floor high) - (cons (floor middle) (floor low)))))) - ;; Inodes can be incredible huge. We - ;; must hide this. - (error (tramp-get-inode ,vec))))) - ;; Set virtual device number. - (setcar (nthcdr 11 attr) - (tramp-get-device ,vec)) - ;; Set SELinux context. - (when (stringp (nth 12 attr)) - (tramp-set-file-property - ,vec ,localname "file-selinux-context" - (split-string (nth 12 attr) ":" 'omit))) - ;; Remove optional entries. - (setcdr (nthcdr 11 attr) nil) - attr))))) - - ;; Return normalized result. - (append (tramp-compat-take 2 result) - (if (eq ,id-format 'string) - (list (car (nth 2 result)) (car (nth 3 result))) - (list (cdr (nth 2 result)) (cdr (nth 3 result)))) - (nthcdr 4 result))))) + (cons (floor high) (floor low)) + ;; The middle 24 bits. + (setq middle (mod high #x1000000) + high (/ high #x1000000)) + (cons (floor high) + (cons (floor middle) (floor low)))))) + ;; Inodes can be incredible huge. We must + ;; hide this. + (error (tramp-get-inode ,vec))))) + ;; Set virtual device number. + (setcar (nthcdr 11 attr) + (tramp-get-device ,vec)) + ;; Set SELinux context. + (when (stringp (nth 12 attr)) + (tramp-set-file-property + ,vec ,localname "file-selinux-context" + (split-string (nth 12 attr) ":" 'omit))) + ;; Remove optional entries. + (setcdr (nthcdr 11 attr) nil) + attr))))) + + ;; Return normalized result. + (append (tramp-compat-take 2 result) + (if (eq ,id-format 'string) + (list (car (nth 2 result)) (car (nth 3 result))) + (list (cdr (nth 2 result)) (cdr (nth 3 result)))) + (nthcdr 4 result)))) (defun tramp-get-home-directory (vec &optional user) "The remote home directory for connection VEC as local file name. @@ -6775,13 +6893,15 @@ verbosity of 6." (catch 'result (let ((default-directory temporary-file-directory)) (dolist (pid (list-system-processes)) - (when-let ((attributes (process-attributes pid)) - (comm (cdr (assoc 'comm attributes)))) - (and (string-equal (cdr (assoc 'user attributes)) (user-login-name)) - ;; The returned command name could be truncated to 15 - ;; characters. Therefore, we cannot check for `string-equal'. - (string-prefix-p comm process-name) - (throw 'result t)))))))) + (and-let* ((attributes (process-attributes pid)) + (comm (cdr (assoc 'comm attributes))) + ((string-equal + (cdr (assoc 'user attributes)) (user-login-name))) + ;; The returned command name could be truncated + ;; to 15 characters. Therefore, we cannot check + ;; for `string-equal'. + ((string-prefix-p comm process-name)) + ((throw 'result t))))))))) ;; When calling "emacs -Q", `auth-source-search' won't be called. If ;; you want to debug exactly this case, call "emacs -Q --eval '(setq @@ -6796,15 +6916,16 @@ Consults the auth-source package." ;; adapt `default-directory'. (Bug#39389, Bug#39489) (default-directory tramp-compat-temporary-file-directory) (case-fold-search t) - ;; In tramp-sh.el, we must use "password-vector" due to - ;; multi-hop. - (vec (tramp-get-connection-property - proc "password-vector" (process-get proc 'tramp-vector))) - (key (tramp-make-tramp-file-name vec 'noloc)) - (method (tramp-file-name-method vec)) - (user-domain (or (tramp-file-name-user-domain vec) - (tramp-get-connection-property key "login-as"))) - (host-port (tramp-file-name-host-port vec)) + ;; In tramp-sh.el, we must use "hop-vector" and "pw-vector" + ;; due to multi-hop. + (vec (process-get proc 'tramp-vector)) + (hop-vec (tramp-get-connection-property proc "hop-vector" vec)) + (pw-vec (tramp-get-connection-property proc "pw-vector" hop-vec)) + (key (tramp-make-tramp-file-name pw-vec 'noloc)) + (method (tramp-file-name-method pw-vec)) + (user-domain (or (tramp-file-name-user-domain pw-vec) + (tramp-get-connection-property pw-vec "login-as"))) + (host-port (tramp-file-name-host-port pw-vec)) (pw-prompt (string-trim-left (or prompt @@ -6813,29 +6934,23 @@ Consults the auth-source package." (if (string-match-p "passphrase" (match-string 1)) (match-string 0) (format "%s for %s " (capitalize (match-string 1)) key)))))) + ;; If there is no user name, `:create' triggers to ask for. + ;; We suppress it. + (pw-spec (list :max 1 :user user-domain :host host-port :port method + :require (cons :secret (and user-domain '(:user))) + :create (and user-domain t))) (auth-source-creation-prompts `((secret . ,pw-prompt))) ;; Use connection-local value. (auth-sources (buffer-local-value 'auth-sources (process-buffer proc))) auth-info auth-passwd tramp-dont-suspend-timers) (unwind-protect - ;; We cannot use `with-parsed-tramp-file-name', because it - ;; expands the file name. (or (setq tramp-password-save-function nil) - ;; See if auth-sources contains something useful. + ;; See if `auth-sources' contains something useful. (ignore-errors - (and auth-sources - (tramp-get-connection-property vec "first-password-request") - ;; Try with Tramp's current method. If there is no - ;; user name, `:create' triggers to ask for. We - ;; suppress it. - (setq auth-info - (car - (auth-source-search - :max 1 :user user-domain :host host-port :port method - :require (cons :secret (and user-domain '(:user))) - :create (and user-domain t))) + (and (tramp-get-connection-property hop-vec "first-password-request") + (setq auth-info (car (apply #'auth-source-search pw-spec)) tramp-password-save-function (plist-get auth-info :save-function) auth-passwd @@ -6843,16 +6958,23 @@ Consults the auth-source package." ;; Try the password cache. (with-tramp-suspended-timers - (setq auth-passwd (password-read pw-prompt key) + (setq auth-passwd + (password-read + pw-prompt (auth-source-format-cache-entry pw-spec)) tramp-password-save-function - (lambda () (password-cache-add key auth-passwd))) + (when auth-source-do-cache + (lambda () + (password-cache-add + (auth-source-format-cache-entry pw-spec) auth-passwd)))) auth-passwd)) ;; Workaround. Prior Emacs 28.1, auth-source has saved empty ;; passwords. See discussion in Bug#50399. (when (tramp-string-empty-or-nil-p auth-passwd) (setq tramp-password-save-function nil)) - (tramp-set-connection-property vec "first-password-request" nil)))) + ;; Remember the values. + (tramp-set-connection-property hop-vec "pw-spec" pw-spec) + (tramp-set-connection-property hop-vec "first-password-request" nil)))) (defun tramp-read-passwd-without-cache (proc &optional prompt) "Read a password from user (compat function)." @@ -6869,17 +6991,11 @@ Consults the auth-source package." (defun tramp-clear-passwd (vec) "Clear password cache for connection related to VEC." (declare (tramp-suppress-trace t)) - (let ((method (tramp-file-name-method vec)) - (user-domain (tramp-file-name-user-domain vec)) - (host-port (tramp-file-name-host-port vec)) - (hop (tramp-file-name-hop vec))) - (when hop - ;; Clear also the passwords of the hops. - (tramp-clear-passwd (tramp-dissect-hop-name hop))) - (auth-source-forget - `(:max 1 ,(and user-domain :user) ,user-domain - :host ,host-port :port ,method)) - (password-cache-remove (tramp-make-tramp-file-name vec 'noloc)))) + (when-let* ((hop (cadr (reverse (tramp-compute-multi-hops vec))))) + ;; Clear also the passwords of the hops. + (tramp-clear-passwd hop)) + (when-let* ((pw-spec (tramp-get-connection-property vec "pw-spec"))) + (auth-source-forget pw-spec))) (defun tramp-time-diff (t1 t2) "Return the difference between the two times, in seconds. @@ -7071,5 +7187,11 @@ If VEC is `tramp-null-hop', return local null device." ;; ;; * Implement user and host name completion for multi-hops. Some ;; methods in tramp-container.el have it already. +;; +;; * Make it configurable, which environment variables are set in +;; direct async processes. +;; +;; * Pass working dir for direct async processes, for example for +;; container methods. ;;; tramp.el ends here diff --git a/lisp/net/trampver.el b/lisp/net/trampver.el index 9f990f3e9fb..38f824d876b 100644 --- a/lisp/net/trampver.el +++ b/lisp/net/trampver.el @@ -7,7 +7,7 @@ ;; Maintainer: Michael Albinus ;; Keywords: comm, processes ;; Package: tramp -;; Version: 2.7.1.30.1 +;; Version: 2.7.3-pre ;; Package-Requires: ((emacs "27.1")) ;; Package-Type: multi ;; URL: https://www.gnu.org/software/tramp/ @@ -40,14 +40,13 @@ ;; ./configure" to change them. ;;;###tramp-autoload -(defconst tramp-version "2.7.1.30.1" +(defconst tramp-version "2.7.3-pre" "This version of Tramp.") ;;;###tramp-autoload (defconst tramp-bug-report-address "tramp-devel@gnu.org" "Email address to send bug reports to.") -;;;###tramp-autoload (defconst tramp-repository-branch (ignore-errors ;; Suppress message from `emacs-repository-get-branch'. We must @@ -61,7 +60,6 @@ (emacs-repository-get-branch dir)))) "The repository branch of the Tramp sources.") -;;;###tramp-autoload (defconst tramp-repository-version (ignore-errors ;; Suppress message from `emacs-repository-get-version'. We must @@ -78,7 +76,7 @@ ;; Check for Emacs version. (let ((x (if (not (string-version-lessp emacs-version "27.1")) "ok" - (format "Tramp 2.7.1.30.1 is not fit for %s" + (format "Tramp 2.7.3-pre is not fit for %s" (replace-regexp-in-string "\n" "" (emacs-version)))))) (unless (string-equal "ok" x) (error "%s" x))) diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el index 3cff9c1b837..605b26206c4 100644 --- a/test/lisp/net/tramp-tests.el +++ b/test/lisp/net/tramp-tests.el @@ -179,7 +179,9 @@ A resource file is in the resource directory as per (tramp-dissect-file-name ert-remote-temporary-file-directory)) "The used `tramp-file-name' structure.") -(setq auth-source-save-behavior nil +(setq auth-source-cache-expiry nil + auth-source-save-behavior nil + ert-batch-backtrace-right-margin nil password-cache-expiry nil remote-file-name-inhibit-cache nil tramp-allow-unsafe-temporary-files t @@ -187,7 +189,8 @@ A resource file is in the resource directory as per tramp-copy-size-limit nil tramp-error-show-message-timeout nil tramp-persistency-file-name nil - tramp-verbose 0) + tramp-verbose 0 + vc-handled-backends (unless noninteractive vc-handled-backends)) (defvar tramp--test-enabled-checked nil "Cached result of `tramp--test-enabled'. @@ -209,6 +212,7 @@ being the result.") (when (cdr tramp--test-enabled-checked) ;; Remove old test files. (dolist (dir `(,temporary-file-directory + ,tramp-compat-temporary-file-directory ,ert-remote-temporary-file-directory)) (dolist (file (directory-files dir 'full (rx bos (? ".#") "tramp-test"))) (ignore-errors @@ -217,7 +221,7 @@ being the result.") (delete-file file))))) ;; Cleanup connection. (ignore-errors - (tramp-cleanup-connection tramp-test-vec nil 'keep-password))) + (tramp-cleanup-connection tramp-test-vec 'keep-debug 'keep-password))) ;; Return result. (cdr tramp--test-enabled-checked)) @@ -2176,7 +2180,7 @@ is greater than 10. (when (assoc m tramp-methods) (let (tramp-connection-properties tramp-default-proxies-alist) (ignore-errors - (tramp-cleanup-connection tramp-test-vec nil 'keep-password)) + (tramp-cleanup-connection tramp-test-vec 'keep-debug 'keep-password)) ;; Single hop. The host name must match `tramp-local-host-regexp'. (should-error (find-file (format "/%s:foo:" m)) @@ -2882,7 +2886,9 @@ This checks also `file-name-as-directory', `file-name-directory', (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil))) (let ((tmp-name1 (tramp--test-make-temp-name nil quoted)) (tmp-name2 (tramp--test-make-temp-name nil quoted)) - (tmp-name3 (tramp--test-make-temp-name 'local quoted))) + (tmp-name3 (tramp--test-make-temp-name 'local quoted)) + (tmp-name4 + (file-name-nondirectory (tramp--test-make-temp-name 'local quoted)))) (dolist (source-target `(;; Copy on remote side. (,tmp-name1 . ,tmp-name2) @@ -2890,8 +2896,12 @@ This checks also `file-name-as-directory', `file-name-directory', (,tmp-name1 . ,tmp-name3) ;; Copy from local side to remote side. (,tmp-name3 . ,tmp-name1))) - (let ((source (car source-target)) - (target (cdr source-target))) + (let* ((source (car source-target)) + (source-link + (expand-file-name tmp-name4 (file-name-directory source))) + (target (cdr source-target)) + (target-link + (expand-file-name tmp-name4 (file-name-directory target)))) ;; Copy simple file. (unwind-protect @@ -2916,6 +2926,26 @@ This checks also `file-name-as-directory', `file-name-directory', (ignore-errors (delete-file source)) (ignore-errors (delete-file target))) + ;; Copy symlinked file. + (unwind-protect + (tramp--test-ignore-make-symbolic-link-error + (write-region "foo" nil source-link) + (should (file-exists-p source-link)) + (make-symbolic-link tmp-name4 source) + (should (file-exists-p source)) + (should (string-equal (file-symlink-p source) tmp-name4)) + (copy-file source target) + ;; Some backends like tramp-gvfs.el do not create the + ;; link on the target. + (when (file-symlink-p target) + (should (string-equal (file-symlink-p target) tmp-name4)))) + + ;; Cleanup. + (ignore-errors (delete-file source)) + (ignore-errors (delete-file source-link)) + (ignore-errors (delete-file target)) + (ignore-errors (delete-file target-link))) + ;; Copy file to directory. (unwind-protect ;; This doesn't work on FTP. @@ -2991,7 +3021,9 @@ This checks also `file-name-as-directory', `file-name-directory', (dolist (quoted (if (tramp--test-expensive-test-p) '(nil t) '(nil))) (let ((tmp-name1 (tramp--test-make-temp-name nil quoted)) (tmp-name2 (tramp--test-make-temp-name nil quoted)) - (tmp-name3 (tramp--test-make-temp-name 'local quoted))) + (tmp-name3 (tramp--test-make-temp-name 'local quoted)) + (tmp-name4 + (file-name-nondirectory (tramp--test-make-temp-name 'local quoted)))) (dolist (source-target `(;; Rename on remote side. (,tmp-name1 . ,tmp-name2) @@ -2999,8 +3031,12 @@ This checks also `file-name-as-directory', `file-name-directory', (,tmp-name1 . ,tmp-name3) ;; Rename from local side to remote side. (,tmp-name3 . ,tmp-name1))) - (let ((source (car source-target)) - (target (cdr source-target))) + (let* ((source (car source-target)) + (source-link + (expand-file-name tmp-name4 (file-name-directory source))) + (target (cdr source-target)) + (target-link + (expand-file-name tmp-name4 (file-name-directory target)))) ;; Rename simple file. (unwind-protect @@ -3029,6 +3065,27 @@ This checks also `file-name-as-directory', `file-name-directory', (ignore-errors (delete-file source)) (ignore-errors (delete-file target))) + ;; Rename symlinked file. + (unwind-protect + (tramp--test-ignore-make-symbolic-link-error + (write-region "foo" nil source-link) + (should (file-exists-p source-link)) + (make-symbolic-link tmp-name4 source) + (should (file-exists-p source)) + (should (string-equal (file-symlink-p source) tmp-name4)) + (rename-file source target) + (should-not (file-exists-p source)) + ;; Some backends like tramp-gvfs.el do not create the + ;; link on the target. + (when (file-symlink-p target) + (should (string-equal (file-symlink-p target) tmp-name4)))) + + ;; Cleanup. + (ignore-errors (delete-file source)) + (ignore-errors (delete-file source-link)) + (ignore-errors (delete-file target)) + (ignore-errors (delete-file target-link))) + ;; Rename file to directory. (unwind-protect (progn @@ -3809,6 +3866,7 @@ This tests also `access-file', `file-readable-p', (should (stringp (file-attribute-user-id attr))) (should (stringp (file-attribute-group-id attr))) + ;; Symbolic links. (tramp--test-ignore-make-symbolic-link-error (should-error (access-file tmp-name2 "error") @@ -3828,7 +3886,26 @@ This tests also `access-file', `file-readable-p', (if quoted #'file-name-quote #'identity) (file-attribute-type attr)) (file-remote-p (file-truename tmp-name1) 'localname))) - (delete-file tmp-name2)) + (delete-file tmp-name2) + + ;; A non-existent or cyclic link target makes the file + ;; unaccessible. + (dolist (target + `("does-not-exist" ,(file-name-nondirectory tmp-name2))) + (make-symbolic-link target tmp-name2) + (should (file-symlink-p tmp-name2)) + (should-not (file-exists-p tmp-name2)) + (should-not (file-directory-p tmp-name2)) + (should-error + (access-file tmp-name2 "error") + :type + (if (string-equal target "does-not-exist") + 'file-missing 'file-error)) + ;; `file-ownership-preserved-p' should return t for + ;; symlinked files to a non-existing or cyclic target. + (when test-file-ownership-preserved-p + (should (file-ownership-preserved-p tmp-name2 'group))) + (delete-file tmp-name2))) ;; Check, that "//" in symlinks are handled properly. (with-temp-buffer @@ -3891,12 +3968,12 @@ The test is derived from TEST and COMMAND." (skip-unless (tramp--test-enabled)) (skip-unless (tramp--test-sh-p)) (skip-unless (tramp-get-remote-stat tramp-test-vec)) - (if-let ((default-directory ert-remote-temporary-file-directory) - (ert-test (ert-get-test ',test)) - (result (ert-test-most-recent-result ert-test)) - (tramp-connection-properties - (cons '(nil "perl" nil) - tramp-connection-properties))) + (if-let* ((default-directory ert-remote-temporary-file-directory) + (ert-test (ert-get-test ',test)) + (result (ert-test-most-recent-result ert-test)) + (tramp-connection-properties + (cons '(nil "perl" nil) + tramp-connection-properties))) (progn (skip-unless (< (ert-test-result-duration result) 300)) (funcall (ert-test-body ert-test))) @@ -3911,17 +3988,17 @@ The test is derived from TEST and COMMAND." (skip-unless (tramp--test-enabled)) (skip-unless (tramp--test-sh-p)) (skip-unless (tramp-get-remote-perl tramp-test-vec)) - (if-let ((default-directory ert-remote-temporary-file-directory) - (ert-test (ert-get-test ',test)) - (result (ert-test-most-recent-result ert-test)) - (tramp-connection-properties - (append - '((nil "stat" nil) - ;; See `tramp-sh-handle-file-truename'. - (nil "readlink" nil) - ;; See `tramp-sh-handle-get-remote-*'. - (nil "id" nil)) - tramp-connection-properties))) + (if-let* ((default-directory ert-remote-temporary-file-directory) + (ert-test (ert-get-test ',test)) + (result (ert-test-most-recent-result ert-test)) + (tramp-connection-properties + (append + '((nil "stat" nil) + ;; See `tramp-sh-handle-file-truename'. + (nil "readlink" nil) + ;; See `tramp-sh-handle-get-remote-*'. + (nil "id" nil)) + tramp-connection-properties))) (progn (skip-unless (< (ert-test-result-duration result) 300)) (funcall (ert-test-body ert-test))) @@ -3935,16 +4012,16 @@ The test is derived from TEST and COMMAND." (tramp--test-set-ert-test-documentation ',test "ls") (skip-unless (tramp--test-enabled)) (skip-unless (tramp--test-sh-p)) - (if-let ((default-directory ert-remote-temporary-file-directory) - (ert-test (ert-get-test ',test)) - (result (ert-test-most-recent-result ert-test)) - (tramp-connection-properties - (append - '((nil "perl" nil) - (nil "stat" nil) - ;; See `tramp-sh-handle-file-truename'. - (nil "readlink" nil)) - tramp-connection-properties))) + (if-let* ((default-directory ert-remote-temporary-file-directory) + (ert-test (ert-get-test ',test)) + (result (ert-test-most-recent-result ert-test)) + (tramp-connection-properties + (append + '((nil "perl" nil) + (nil "stat" nil) + ;; See `tramp-sh-handle-file-truename'. + (nil "readlink" nil)) + tramp-connection-properties))) (progn (skip-unless (< (ert-test-result-duration result) 300)) (funcall (ert-test-body ert-test))) @@ -3971,9 +4048,9 @@ The test is derived from TEST and COMMAND." (skip-unless (tramp--test-enabled)) (skip-unless (or (tramp--test-adb-p) (tramp--test-sh-p) (tramp--test-sudoedit-p))) - (if-let ((default-directory ert-remote-temporary-file-directory) - (ert-test (ert-get-test ',test)) - (result (ert-test-most-recent-result ert-test))) + (if-let* ((default-directory ert-remote-temporary-file-directory) + (ert-test (ert-get-test ',test)) + (result (ert-test-most-recent-result ert-test))) (progn (skip-unless (< (ert-test-result-duration result) 300)) (let (tramp-use-file-attributes) @@ -4484,13 +4561,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." (should (file-symlink-p tmp-name1)) (should (file-symlink-p tmp-name2)) (should-not (file-regular-p tmp-name1)) - (should-not (file-regular-p tmp-name2)) - (should-error - (file-truename tmp-name1) - :type 'file-error) - (should-error - (file-truename tmp-name2) - :type 'file-error)))) + (should-not (file-regular-p tmp-name2))))) ;; Cleanup. (ignore-errors @@ -4946,7 +5017,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." (ert-deftest tramp-test26-interactive-file-name-completion () "Check interactive completion with different `completion-styles'." ;; Method, user and host name in completion mode. - (tramp-cleanup-connection tramp-test-vec nil 'keep-password) + (tramp-cleanup-connection tramp-test-vec 'keep-debug 'keep-password) (let ((method (file-remote-p ert-remote-temporary-file-directory 'method)) (user (file-remote-p ert-remote-temporary-file-directory 'user)) @@ -5270,19 +5341,20 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." ;; (delete-file tmp-name))) ;; Check remote and local STDERR. - (dolist (local '(nil t)) - (setq tmp-name (tramp--test-make-temp-name local quoted)) - (should-not - (zerop - (process-file "cat" nil `(t ,tmp-name) nil "/does-not-exist"))) - (with-temp-buffer - (insert-file-contents tmp-name) - (should - (string-match-p - (rx "cat:" (* nonl) " No such file or directory") - (buffer-string))) - (should-not (get-buffer-window (current-buffer) t)) - (delete-file tmp-name)))) + (unless (tramp--test-sshfs-p) + (dolist (local '(nil t)) + (setq tmp-name (tramp--test-make-temp-name local quoted)) + (should-not + (zerop + (process-file "cat" nil `(t ,tmp-name) nil "/does-not-exist"))) + (with-temp-buffer + (insert-file-contents tmp-name) + (should + (string-match-p + (rx "cat:" (* nonl) " No such file or directory") + (buffer-string))) + (should-not (get-buffer-window (current-buffer) t)) + (delete-file tmp-name))))) ;; Cleanup. (ignore-errors (kill-buffer buffer)) @@ -5293,8 +5365,8 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." "Timeout handler, reporting a failed test." (interactive) (tramp--test-message "proc: %s" (get-buffer-process (current-buffer))) - (when-let ((proc (get-buffer-process (current-buffer))) - ((processp proc))) + (when-let* ((proc (get-buffer-process (current-buffer))) + ((processp proc))) (tramp--test-message "cmd: %s" (process-command proc))) (tramp--test-message "buf: %s\n%s\n---" (current-buffer) (buffer-string)) (ert-fail (format "`%s' timed out" (ert-test-name (ert-running-test))))) @@ -5477,6 +5549,8 @@ If UNSTABLE is non-nil, the test is tagged as `:unstable'." direct-async-process-profile) connection-local-criteria-alist))) (skip-unless (tramp-direct-async-process-p)) + (when-let* ((result (ert-test-most-recent-result ert-test))) + (skip-unless (< (ert-test-result-duration result) 300))) ;; We do expect an established connection already, ;; `file-truename' does it by side-effect. Suppress ;; `tramp--test-enabled', in order to keep the connection. @@ -5885,8 +5959,8 @@ If UNSTABLE is non-nil, the test is tagged as `:unstable'." (setq command '("sleep" "100") proc (apply #'start-file-process "test" nil command)) (while (accept-process-output proc 0)) - (when-let ((pid (process-get proc 'remote-pid)) - (attributes (process-attributes pid))) + (when-let* ((pid (process-get proc 'remote-pid)) + (attributes (process-attributes pid))) ;; (tramp--test-message "%s" attributes) (should (equal (cdr (assq 'comm attributes)) (car command))) (should (equal (cdr (assq 'args attributes)) @@ -5903,8 +5977,8 @@ If UNSTABLE is non-nil, the test is tagged as `:unstable'." ;; `memory-info' is supported since Emacs 29.1. (skip-unless (tramp--test-emacs29-p)) - (when-let ((default-directory ert-remote-temporary-file-directory) - (mi (memory-info))) + (when-let* ((default-directory ert-remote-temporary-file-directory) + (mi (memory-info))) (should (consp mi)) (should (tramp-compat-length= mi 4)) (dotimes (i (length mi)) @@ -6015,7 +6089,9 @@ INPUT, if non-nil, is a string sent to the process." ;; Test `async-shell-command-width'. (when (and (tramp--test-asynchronous-processes-p) (tramp--test-sh-p)) - (let* ((async-shell-command-width 1024) + (let* (;; Since Fedora 41, this seems to be the upper limit. Used + ;; to be 1024 before. + (async-shell-command-width 512) (default-directory ert-remote-temporary-file-directory) (cols (ignore-errors (read (tramp--test-shell-command-to-string-asynchronously @@ -6536,6 +6612,7 @@ INPUT, if non-nil, is a string sent to the process." (tmp-name1 (tramp--test-make-temp-name nil quoted)) (tmp-name2 (expand-file-name "foo" tmp-name1)) (tramp-remote-process-environment tramp-remote-process-environment) + ;; Suppress nasty messages. (inhibit-message t) (vc-handled-backends (cond @@ -6558,9 +6635,7 @@ INPUT, if non-nil, is a string sent to the process." (tramp-cleanup-connection tramp-test-vec 'keep-debug 'keep-password) '(Bzr)) - (t nil))) - ;; Suppress nasty messages. - (inhibit-message t)) + (t nil)))) (skip-unless vc-handled-backends) (unless quoted (tramp--test-message "%s" vc-handled-backends)) @@ -6907,34 +6982,40 @@ INPUT, if non-nil, is a string sent to the process." (should-not (with-no-warnings (file-locked-p tmp-name1))) ;; `kill-buffer' removes the lock. - (with-no-warnings (lock-file tmp-name1)) - (should (eq (with-no-warnings (file-locked-p tmp-name1)) t)) - (with-temp-buffer - (set-visited-file-name tmp-name1) - (insert "foo") - (should (buffer-modified-p)) - (cl-letf (((symbol-function #'read-from-minibuffer) - (lambda (&rest _args) "yes"))) - (kill-buffer))) - (should-not (with-no-warnings (file-locked-p tmp-name1))) + ;; `kill-buffer--possibly-save' exists since Emacs 29.1. + (when (fboundp 'kill-buffer--possibly-save) + (with-no-warnings (lock-file tmp-name1)) + (should (eq (with-no-warnings (file-locked-p tmp-name1)) t)) + (with-temp-buffer + (set-visited-file-name tmp-name1) + (insert "foo") + (should (buffer-modified-p)) + ;; Modifying `read-from-minibuffer' doesn't work on MS Windows. + (cl-letf (((symbol-function #'kill-buffer--possibly-save) + #'tramp-compat-always)) + (kill-buffer))) + (should-not (with-no-warnings (file-locked-p tmp-name1)))) ;; `kill-buffer' should not remove the lock when the ;; connection is broken. See Bug#61663. - (with-no-warnings (lock-file tmp-name1)) - (should (eq (with-no-warnings (file-locked-p tmp-name1)) t)) - (with-temp-buffer - (set-visited-file-name tmp-name1) - (insert "foo") - (should (buffer-modified-p)) - (tramp-cleanup-connection - tramp-test-vec 'keep-debug 'keep-password) - (cl-letf (((symbol-function #'read-from-minibuffer) - (lambda (&rest _args) "yes"))) - (kill-buffer))) - ;; A new connection changes process id, and also the - ;; lock file contents. But it still exists. - (tramp-cleanup-connection tramp-test-vec 'keep-debug 'keep-password) - (should (stringp (with-no-warnings (file-locked-p tmp-name1)))) + ;; `kill-buffer--possibly-save' exists since Emacs 29.1. + (when (fboundp 'kill-buffer--possibly-save) + (with-no-warnings (lock-file tmp-name1)) + (should (eq (with-no-warnings (file-locked-p tmp-name1)) t)) + (with-temp-buffer + (set-visited-file-name tmp-name1) + (insert "foo") + (should (buffer-modified-p)) + (tramp-cleanup-connection + tramp-test-vec 'keep-debug 'keep-password) + ;; Modifying `read-from-minibuffer' doesn't work on MS Windows. + (cl-letf (((symbol-function #'kill-buffer--possibly-save) + #'tramp-compat-always)) + (kill-buffer))) + ;; A new connection changes process id, and also the + ;; lock file contents. But it still exists. + (tramp-cleanup-connection tramp-test-vec 'keep-debug 'keep-password) + (should (stringp (with-no-warnings (file-locked-p tmp-name1))))) ;; When `remote-file-name-inhibit-locks' is set, nothing happens. (tramp-cleanup-connection tramp-test-vec 'keep-debug 'keep-password) @@ -6957,35 +7038,43 @@ INPUT, if non-nil, is a string sent to the process." ;; Steal the file lock. (tramp-cleanup-connection tramp-test-vec 'keep-debug 'keep-password) - (cl-letf (((symbol-function #'read-char) (lambda (&rest _args) ?s))) + ;; Modifying `read-char' doesn't work on MS Windows. + (cl-letf (((symbol-function #'ask-user-about-lock) + #'tramp-compat-always)) (with-no-warnings (lock-file tmp-name1))) (should (eq (with-no-warnings (file-locked-p tmp-name1)) t)) ;; Ignore the file lock. (tramp-cleanup-connection tramp-test-vec 'keep-debug 'keep-password) - (cl-letf (((symbol-function #'read-char) (lambda (&rest _args) ?p))) + ;; Modifying `read-char' doesn't work on MS Windows. + (cl-letf (((symbol-function #'ask-user-about-lock) #'ignore)) (with-no-warnings (lock-file tmp-name1))) (should (stringp (with-no-warnings (file-locked-p tmp-name1)))) - ;; Quit the file lock machinery. - (tramp-cleanup-connection tramp-test-vec 'keep-debug 'keep-password) - (cl-letf (((symbol-function #'read-char) (lambda (&rest _args) ?q))) - (with-no-warnings + ;; Quit the file lock machinery. There are problems with + ;; "sftp" and "podman", so we test on Emacs 29.1 only. + (when (tramp--test-emacs29-p ) + (tramp-cleanup-connection tramp-test-vec 'keep-debug 'keep-password) + ;; Modifying `read-char' doesn't work on MS Windows. + (cl-letf (((symbol-function #'ask-user-about-lock) + (lambda (&rest args) + (signal 'file-locked args)))) + (with-no-warnings + (should-error + (lock-file tmp-name1) + :type 'file-locked)) + ;; The same for `write-region'. (should-error - (lock-file tmp-name1) - :type 'file-locked)) - ;; The same for `write-region'. - (should-error - (write-region "foo" nil tmp-name1) - :type 'file-locked) - (should-error - (write-region "foo" nil tmp-name1 nil nil tmp-name1) - :type 'file-locked) - ;; The same for `set-visited-file-name'. - (with-temp-buffer - (should-error - (set-visited-file-name tmp-name1) - :type 'file-locked))) + (write-region "foo" nil tmp-name1) + :type 'file-locked) + (should-error + (write-region "foo" nil tmp-name1 nil nil tmp-name1) + :type 'file-locked) + ;; The same for `set-visited-file-name'. + (with-temp-buffer + (should-error + (set-visited-file-name tmp-name1) + :type 'file-locked)))) (should (stringp (with-no-warnings (file-locked-p tmp-name1))))) ;; Cleanup. @@ -7418,10 +7507,6 @@ This requires restrictions of file name syntax." (if quoted #'file-name-quote #'identity) (file-attribute-type (file-attributes file3))) (file-remote-p (file-truename file1) 'localname))) - ;; Check file contents. - (with-temp-buffer - (insert-file-contents file3) - (should (string-equal (buffer-string) elt))) (delete-file file3)))) ;; Check file names. @@ -7447,7 +7532,7 @@ This requires restrictions of file name syntax." (setq buffer (dired-noselect tmp-name1 "--dired -al")) (goto-char (point-min)) (while (not (eobp)) - (when-let ((name (dired-get-filename 'no-dir 'no-error))) + (when-let* ((name (dired-get-filename 'no-dir 'no-error))) (unless (string-match-p name directory-files-no-dot-files-regexp) (should (member name files)))) @@ -7687,7 +7772,7 @@ This requires restrictions of file name syntax." ;; to U+1FFFF). "🌈🍒👋") - (when (tramp--test-expensive-test-p) + (when (and (tramp--test-expensive-test-p) (not (tramp--test-windows-nt-p))) (delete-dups (mapcar ;; Use all available language specific snippets. @@ -7727,7 +7812,7 @@ This requires restrictions of file name syntax." "Check that `file-system-info' returns proper values." (skip-unless (tramp--test-enabled)) - (when-let ((fsi (file-system-info ert-remote-temporary-file-directory))) + (when-let* ((fsi (file-system-info ert-remote-temporary-file-directory))) (should (consp fsi)) (should (tramp-compat-length= fsi 3)) (dotimes (i (length fsi)) @@ -7759,10 +7844,10 @@ should all return proper values." (should (or (stringp (tramp-get-remote-gid v 'string)) (null (tramp-get-remote-gid v 'string)))) - (when-let ((groups (tramp-get-remote-groups v 'integer))) + (when-let* ((groups (tramp-get-remote-groups v 'integer))) (should (consp groups)) (dolist (group groups) (should (integerp group)))) - (when-let ((groups (tramp-get-remote-groups v 'string))) + (when-let* ((groups (tramp-get-remote-groups v 'string))) (should (consp groups)) (dolist (group groups) (should (stringp group))))))) @@ -7948,9 +8033,9 @@ process sentinels. They shall not disturb each other." buf) (while buffers (setq buf (seq-random-elt buffers)) - (if-let ((proc (get-buffer-process buf)) - (file (process-get proc 'foo)) - (count (process-get proc 'bar))) + (if-let* ((proc (get-buffer-process buf)) + (file (process-get proc 'foo)) + (count (process-get proc 'bar))) (progn (tramp--test-message "Start action %d %s %s" count buf (current-time-string)) @@ -8063,7 +8148,7 @@ process sentinels. They shall not disturb each other." (let ((pass "secret") (mock-entry (copy-tree (assoc "mock" tramp-methods))) - mocked-input tramp-methods) + mocked-input tramp-methods auth-sources) ;; We must mock `read-string', in order to avoid interactive ;; arguments. (cl-letf* (((symbol-function #'read-string) @@ -8107,7 +8192,37 @@ process sentinels. They shall not disturb each other." "machine %s port mock password %s" (file-remote-p ert-remote-temporary-file-directory 'host) pass) (let ((auth-sources `(,netrc-file))) - (should (file-exists-p ert-remote-temporary-file-directory))))))))) + (should (file-exists-p ert-remote-temporary-file-directory)))))) + + ;; Checking session-timeout. + (with-no-warnings (when (symbol-plist 'ert-with-temp-file) + (tramp-cleanup-connection tramp-test-vec 'keep-debug) + (let ((tramp-connection-properties + (cons '(nil "session-timeout" 1) + tramp-connection-properties))) + (setq mocked-input nil) + (auth-source-forget-all-cached) + (ert-with-temp-file netrc-file + :prefix "tramp-test" :suffix "" + :text (format + "machine %s port mock password %s" + (file-remote-p ert-remote-temporary-file-directory 'host) + pass) + (let ((auth-sources `(,netrc-file))) + (should (file-exists-p ert-remote-temporary-file-directory)))) + ;; Session established, password cached. + (should + (password-in-cache-p + (auth-source-format-cache-entry + (tramp-get-connection-property tramp-test-vec "pw-spec")))) + ;; We want to see the timeout message. + (tramp--test-instrument-test-case 3 + (sleep-for 2)) + ;; Session canceled, no password in cache. + (should-not + (password-in-cache-p + (auth-source-format-cache-entry + (tramp-get-connection-property tramp-test-vec "pw-spec")))))))))) (ert-deftest tramp-test47-read-otp-password () "Check Tramp one-time password handling." @@ -8168,6 +8283,49 @@ process sentinels. They shall not disturb each other." (should-error (file-exists-p ert-remote-temporary-file-directory))))))))) +(ert-deftest tramp-test47-read-fingerprint () + "Check Tramp fingerprint handling." + :tags '(:expensive-test) + (skip-unless (tramp--test-mock-p)) + + (let (;; Suppress "exec". + (tramp-restricted-shell-hosts-alist `(,tramp-system-name))) + + ;; Reading fingerprint works. + (tramp-cleanup-connection tramp-test-vec 'keep-debug) + (let ((tramp-connection-properties + `((nil "login-args" + (("-c") + (,(tramp-shell-quote-argument + "echo Place your finger on the fingerprint reader")) + (";") ("sleep" "1") + (";") ("sh" "-i")))))) + (should (file-exists-p ert-remote-temporary-file-directory))) + + ;; Falling back after a timeout works. + (tramp-cleanup-connection tramp-test-vec 'keep-debug) + (let ((tramp-connection-properties + `((nil "login-args" + (("-c") + (,(tramp-shell-quote-argument + "echo Place your finger on the fingerprint reader")) + (";") ("sleep" "1") + (";") ("echo" "Failed to match fingerprint") + (";") ("sh" "-i")))))) + (should (file-exists-p ert-remote-temporary-file-directory))) + + ;; Interrupting the fingerprint handshaking works. + (tramp-cleanup-connection tramp-test-vec 'keep-debug) + (let ((tramp-connection-properties + `((nil "login-args" + (("-c") + (,(tramp-shell-quote-argument + "echo Place your finger on the fingerprint reader")) + (";") ("sleep" "1") + (";") ("sh" "-i"))))) + tramp-use-fingerprint) + (should (file-exists-p ert-remote-temporary-file-directory))))) + ;; This test is inspired by Bug#29163. (ert-deftest tramp-test48-auto-load () "Check that Tramp autoloads properly." @@ -8388,7 +8546,6 @@ If INTERACTIVE is non-nil, the tests are run interactively." ;; * file-equal-p (partly done in `tramp-test21-file-links') ;; * file-in-directory-p ;; * file-name-case-insensitive-p -;; * memory-info ;; * tramp-get-home-directory ;; * tramp-set-file-uid-gid commit 67e34f0ed8f6d3bbc78187a18f71010c70e10426 Author: Pip Cet Date: Fri Mar 28 02:33:19 2025 +0000 Respect narrowed buffers when parsing JSON (bug#77325) * src/json.c (Fjson_insert): Simplify 'memcpy' argument. (Fjson_parse_buffer): Only read to ZV, not all the way to Z. * test/src/json-tests.el (with-all-gap-positions-in-temp-buffer): New macro. (json-parse-buffer/restricted): New test. diff --git a/src/json.c b/src/json.c index f438d191bde..5795c582ce0 100644 --- a/src/json.c +++ b/src/json.c @@ -641,7 +641,7 @@ usage: (json-insert OBJECT &rest ARGS) */) move_gap_both (PT, PT_BYTE); if (GAP_SIZE < jo.size) make_gap (jo.size - GAP_SIZE); - memcpy ((char *) BEG_ADDR + PT_BYTE - BEG_BYTE, jo.buf, jo.size); + memcpy (GPT_ADDR, jo.buf, jo.size); /* No need to keep allocation beyond this point. */ unbind_to (count, Qnil); @@ -1754,15 +1754,16 @@ usage: (json-parse-buffer &rest args) */) struct json_parser p; unsigned char *begin = PT_ADDR; - unsigned char *end = GPT_ADDR; + unsigned char *end = (GPT == ZV) ? GPT_ADDR : ZV_ADDR; unsigned char *secondary_begin = NULL; unsigned char *secondary_end = NULL; - if (GPT_ADDR < Z_ADDR) + if (PT == ZV) + begin = end = NULL; + else if (GPT > PT && GPT < ZV && GAP_SIZE > 0) { + end = GPT_ADDR; secondary_begin = GAP_END_ADDR; - if (secondary_begin < PT_ADDR) - secondary_begin = PT_ADDR; - secondary_end = Z_ADDR; + secondary_end = ZV_ADDR; } json_parser_init (&p, conf, begin, end, secondary_begin, diff --git a/test/src/json-tests.el b/test/src/json-tests.el index 94b6cfcffca..1cb667ddeac 100644 --- a/test/src/json-tests.el +++ b/test/src/json-tests.el @@ -315,6 +315,32 @@ Test with both unibyte and multibyte strings." (should-not (bobp)) (should (looking-at-p (rx " [456]" eos))))) +(defmacro with-all-gap-positions-in-temp-buffer (string &rest body) + "Create a temporary buffer containing STRING, and evaluate BODY +with each possible gap position. +See also `with-temp-buffer'." + `(with-temp-buffer + (insert ,string) + (dotimes (i (- (point-max) (point-min))) + (goto-char (- (point-max) i)) + (insert "X") + (delete-region (1- (point)) (point)) + ,@body))) + +(ert-deftest json-parse-buffer/restricted () + (with-all-gap-positions-in-temp-buffer + "[123] [456] [789]" + (pcase-dolist (`((,beg . ,end) ,result) + '(((7 . 12) [456]) + ((1 . 6) [123]) + ((13 . 18) [789]))) + (goto-char beg) + (narrow-to-region beg end) + (should (equal (json-parse-buffer) result)) + (should (= (point) end)) + (should-error (json-parse-buffer) :type 'json-end-of-file) + (widen)))) + (ert-deftest json-parse-with-custom-null-and-false-objects () (let* ((input "{ \"abc\" : [9, false] , \"def\" : null }") commit 209b7e7444df5cb164679c0e55f46cba424ad13c Author: Eli Zaretskii Date: Sun Mar 30 10:29:57 2025 +0300 Fix display of overlay arrow immediately after invisible text * src/xdisp.c (overlay_arrow_at_row): Allow the overlay arrow's marker position to be anywhere between the row's start and end charpos. This keeps the overlay arrow on display even when the preceding text is invisible. (Bug#54843) diff --git a/src/xdisp.c b/src/xdisp.c index f2b158f00e3..2c676c09827 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -16939,9 +16939,18 @@ overlay_arrow_at_row (struct it *it, struct glyph_row *row) val = find_symbol_value (var); + ptrdiff_t arrow_marker_pos; if (MARKERP (val) && current_buffer == XMARKER (val)->buffer - && (MATRIX_ROW_START_CHARPOS (row) == marker_position (val))) + && (arrow_marker_pos = marker_position (val), + /* Normally, the marker position will be at the row's + start charpos. But if the previous text lines are + invisible, the row's start charpos includes those + invisible lines, so we make a more general test that + the marker position is anywhere between the start and + the end character positions of this row. */ + (MATRIX_ROW_START_CHARPOS (row) <= arrow_marker_pos + && arrow_marker_pos < MATRIX_ROW_END_CHARPOS (row)))) { if (FRAME_WINDOW_P (it->f) /* FIXME: if ROW->reversed_p is set, this should test commit e6b4c0bcebf4376f60e7801be5f998b42c1e6b06 Author: Stefan Monnier Date: Sun Mar 30 00:44:50 2025 -0400 lisp/emacs-lisp/cl-macs.el (cl-labels): Fix docstring (bug#77348) diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index 99c105c7559..8caf2f1eac0 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -2251,9 +2251,10 @@ Like `cl-flet' but the definitions can refer to previous ones. (defmacro cl-labels (bindings &rest body) "Make local (recursive) function definitions. -BINDINGS is a list of definitions of the form (FUNC ARGLIST BODY...) -where FUNC is the function name, ARGLIST its arguments, and BODY the -forms of the function body. +Each definition can take the form (FUNC EXP) where FUNC is the function +name, and EXP is an expression that returns the function value to which +it should be bound, or it can take the more common form (FUNC ARGLIST +BODY...) which is a shorthand for (FUNC (lambda ARGLIST BODY)). FUNC is defined in any BODY, as well as FORM, so you can write recursive and mutually recursive function definitions. See Info node commit 651418895d507001f161e2e22ca9b85647bca19b Author: Yuan Fu Date: Sat Mar 29 21:15:02 2025 -0700 Tighten the criteria for a defun in typescript-ts-mode (bug#77369) * lisp/progmodes/typescript-ts-mode.el: (typescript-ts-mode--defun-predicate): New function. (typescript-ts-base-mode): Use new predicate. diff --git a/lisp/progmodes/typescript-ts-mode.el b/lisp/progmodes/typescript-ts-mode.el index 9051a841887..bc4b635735f 100644 --- a/lisp/progmodes/typescript-ts-mode.el +++ b/lisp/progmodes/typescript-ts-mode.el @@ -523,6 +523,17 @@ See `treesit-thing-settings' for more information.") eos) "Settings for `treesit-defun-type-regexp'.") +(defun typescript-ts-mode--defun-predicate (node) + "Check if NODE is a defun." + (pcase (treesit-node-type node) + ("lexical_declaration" + (treesit-node-match-p + (treesit-node-child-by-field-name + (treesit-node-child node 0 'named) + "value") + "arrow_function")) + (_ t))) + (defun typescript-ts-mode--defun-name (node) "Return the defun name of NODE. Return nil if there is no name or if NODE is not a defun node." @@ -573,7 +584,9 @@ This mode is intended to be inherited by concrete major modes." (setq-local electric-layout-rules '((?\; . after) (?\{ . after) (?\} . before))) ;; Navigation. - (setq-local treesit-defun-type-regexp typescript-ts-mode--defun-type-regexp) + (setq-local treesit-defun-type-regexp + (cons typescript-ts-mode--defun-type-regexp + #'typescript-ts-mode--defun-predicate)) (setq-local treesit-defun-name-function #'typescript-ts-mode--defun-name) (setq-local treesit-thing-settings commit e1b15d58b508da279162c585b6b3783f9e267427 Author: Stefan Monnier Date: Sun Mar 30 00:10:12 2025 -0400 src/insdel.c (replace_range): Remove comment It should have been removed in commit b16afa45bb6a. diff --git a/src/insdel.c b/src/insdel.c index 053b2d46380..6656221faa1 100644 --- a/src/insdel.c +++ b/src/insdel.c @@ -1553,9 +1553,6 @@ replace_range (ptrdiff_t from, ptrdiff_t to, Lisp_Object new, if (to < GPT) gap_left (to, to_byte, 0); - /* Even if we don't record for undo, we must keep the original text - because we may have to recover it because of inappropriate byte - combining. */ if (! EQ (BVAR (current_buffer, undo_list), Qt)) deletion = make_buffer_string_both (from, from_byte, to, to_byte, 1); commit 468778f390fa521773634094845749ab766fdcfd Author: Po Lu Date: Sun Mar 30 10:24:45 2025 +0800 Don't obsolete the _command_ replace-buffer-contents * lisp/subr.el (replace-buffer-contents): Don't obsolete function. Its purpose is to serve as a command and such obsoletion was unnecessary to begin with. diff --git a/etc/NEWS b/etc/NEWS index b67743960b3..afa45c5ca0d 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1757,7 +1757,6 @@ Previously, its argument was always evaluated using dynamic binding. It has been promoted from 'subr-x' to the C code. You can now directly pass it a string or a buffer rather than a function. Actually passing it a function is now deprecated. -'replace-buffer-contents' is also marked as obsolete. +++ ** New macros 'static-when' and 'static-unless'. diff --git a/lisp/subr.el b/lisp/subr.el index 017ab3e16bb..684d511f2f8 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -4770,7 +4770,6 @@ Interactively, prompt for SOURCE. The replacement is performed using `replace-region-contents' which also describes the MAX-SECS and MAX-COSTS arguments and the return value." - (declare (obsolete replace-region-contents "31.1")) (interactive "bSource buffer: ") (replace-region-contents (point-min) (point-max) (get-buffer source) max-secs max-costs)) commit 5d620aefae267a12b4046606f85e6f2865d729da Author: Stephen Gildea Date: Sat Mar 29 16:48:58 2025 -0700 time-stamp source commentary: point to manual section * lisp/time-stamp.el: Add an Info link in the commentary, now that the manual has more to say. * doc/emacs/files.texi (Time Stamps for One File): Expand one consistent example. diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi index 0a63da4217d..6128be8f128 100644 --- a/doc/emacs/files.texi +++ b/doc/emacs/files.texi @@ -1132,7 +1132,7 @@ To extend one of the previous examples: @group // Local variables: // eval: (add-hook 'before-save-hook 'time-stamp nil t) -// time-stamp-pattern: "year_published = \"%Y\"" +// time-stamp-pattern: "Published %Y in Boston" // End: @end group @end example diff --git a/lisp/time-stamp.el b/lisp/time-stamp.el index ffe5c072286..faf5d51d441 100644 --- a/lisp/time-stamp.el +++ b/lisp/time-stamp.el @@ -25,13 +25,14 @@ ;; A template in a file can be updated with a new time stamp when ;; you save the file. For example: -;; static char *ts = "sdmain.c Time-stamp: <2024-04-18 14:10:21 gildea>"; +;; static char *ts = "sdmain.c Time-stamp: <2025-03-28 21:31:56 gildea>"; ;; To use time-stamping, add this line to your init file: ;; (add-hook 'before-save-hook 'time-stamp) ;; Now any time-stamp templates in your files will be updated automatically. -;; See the documentation for the function `time-stamp' for details. +;; For details, see the documentation for function `time-stamp' +;; and the Info node `Time Stamps'. ;;; Code: commit a5126f79a163192947acb18a32e199c588be7c4a Merge: b98fe25c2ee 6bcf41c311b Author: Stefan Monnier Date: Sat Mar 29 17:53:55 2025 -0400 Merge remote-tracking branch 'origin/scratch/replace-region-contents' commit 6bcf41c311b220e84f4eb423700f36ac1ddfffa7 Author: Stefan Monnier Date: Fri Mar 28 00:49:33 2025 -0400 Org: Use new `replace-region-contents` * lisp/org/org-compat.el (org-replace-buffer-contents): Delete function. (org-replace-region-contents): New function. * lisp/org/org-src.el (org-edit-src-save, org-edit-src-exit): Use it. diff --git a/lisp/org/org-compat.el b/lisp/org/org-compat.el index 59d34b661c6..297e8f06045 100644 --- a/lisp/org/org-compat.el +++ b/lisp/org/org-compat.el @@ -292,10 +292,20 @@ older than 27.1" (if tree (push tree elems)) (nreverse elems)))) -(if (version< emacs-version "27.1") - (defsubst org-replace-buffer-contents (source &optional _max-secs _max-costs) - (replace-buffer-contents source)) - (defalias 'org-replace-buffer-contents #'replace-buffer-contents)) +(defalias 'org-replace-region-contents + (if (> emacs-major-version 30) + #'replace-region-contents + ;; The `replace-region-contents' in Emacs<31 does not accept a buffer + ;; as SOURCE argument and does not preserve the position well enough. + (lambda (beg end source &optional max-secs max-costs) + (save-restriction + (narrow-to-region beg end) + (let ((eobp (eobp))) + (with-no-warnings + (if (< emacs-major-version 27) + (replace-buffer-contents source) + (replace-buffer-contents source max-secs max-costs))) + (if eobp (goto-char (point-max)))))))) (unless (fboundp 'proper-list-p) ;; `proper-list-p' was added in Emacs 27.1. The function below is diff --git a/lisp/org/org-src.el b/lisp/org/org-src.el index 302c27ac866..d8a928b1f9f 100644 --- a/lisp/org/org-src.el +++ b/lisp/org/org-src.el @@ -1414,13 +1414,9 @@ EVENT is passed to `mouse-set-point'." ;; insert new contents. (delete-overlay overlay) (let ((expecting-bol (bolp))) - (if (version< emacs-version "27.1") - (progn (delete-region beg end) - (insert (with-current-buffer write-back-buf (buffer-string)))) - (save-restriction - (narrow-to-region beg end) - (org-replace-buffer-contents write-back-buf 0.1 nil) - (goto-char (point-max)))) + (goto-char end) + (org-replace-region-contents beg end write-back-buf 0.1 nil) + (cl-assert (= (point) (+ beg (buffer-size write-back-buf)))) (when (and expecting-bol (not (bolp))) (insert "\n"))) (kill-buffer write-back-buf) (save-buffer) @@ -1461,14 +1457,9 @@ EVENT is passed to `mouse-set-point'." (undo-boundary) (goto-char beg) (let ((expecting-bol (bolp))) - (if (version< emacs-version "27.1") - (progn (delete-region beg end) - (insert (with-current-buffer write-back-buf - (buffer-string)))) - (save-restriction - (narrow-to-region beg end) - (org-replace-buffer-contents write-back-buf 0.1 nil) - (goto-char (point-max)))) + (goto-char end) + (org-replace-region-contents beg end write-back-buf 0.1 nil) + (cl-assert (= (point) (+ beg (buffer-size write-back-buf)))) (when (and expecting-bol (not (bolp))) (insert "\n"))))) (when write-back-buf (kill-buffer write-back-buf)) ;; If we are to return to source buffer, put point at an commit 1d07a6d7e34677be1653b1d4d464ff00cabfa102 Author: Stefan Monnier Date: Fri Mar 28 01:01:17 2025 -0400 Use `replace-region-contents` to replace insert+delete * lisp/minibuffer.el (completion--replace): * lisp/emacs-lisp/cl-lib.el (cl--set-buffer-substring): * lisp/subr.el (replace-string-in-region): Use `replace-region-contents` instead of insert+delete. * lisp/help-fns.el (help-fns--signature): Use `replace-region-contents` instead of `cl--set-buffer-substring`. * lisp/language/japan-util.el (japanese-replace-region): Rewrite using `replace-region-contents` and mark obsolete. (japanese-katakana-region, japanese-hankaku-region): Use `replace-region-contents` instead. * lisp/progmodes/flymake-proc.el (flymake-proc--replace-region): Rewrite using `replace-region-contents` and mark obsolete. (flymake-proc--check-patch-master-file-buffer): Use `replace-region-contents` instead. diff --git a/lisp/emacs-lisp/cl-lib.el b/lisp/emacs-lisp/cl-lib.el index 4208160bd12..4645b4dffb1 100644 --- a/lisp/emacs-lisp/cl-lib.el +++ b/lisp/emacs-lisp/cl-lib.el @@ -154,12 +154,10 @@ to an element already in the list stored in PLACE. `(setq ,place (cl-adjoin ,x ,place ,@keys))) `(cl-callf2 cl-adjoin ,x ,place ,@keys))) -(defun cl--set-buffer-substring (start end val) +(defun cl--set-buffer-substring (start end val &optional inherit) "Delete region from START to END and insert VAL." - (save-excursion (delete-region start end) - (goto-char start) - (insert val) - val)) + (replace-region-contents start end val 0 nil inherit) + val) (defun cl--set-substring (str start end val) (if end (if (< end 0) (incf end (length str))) diff --git a/lisp/emacs-lisp/gv.el b/lisp/emacs-lisp/gv.el index b44f7dc87f3..6c949f1016b 100644 --- a/lisp/emacs-lisp/gv.el +++ b/lisp/emacs-lisp/gv.el @@ -684,6 +684,8 @@ REF must have been previously obtained with `gv-ref'." `(insert (prog1 ,store (erase-buffer)))) (make-obsolete-generalized-variable 'buffer-string nil "29.1") +;; FIXME: Can't use `replace-region-contents' because it's not +;; expected to be costly, so we need to pass MAX-SECS==0. (gv-define-simple-setter buffer-substring cl--set-buffer-substring) (make-obsolete-generalized-variable 'buffer-substring nil "29.1") diff --git a/lisp/help-fns.el b/lisp/help-fns.el index cd5a0a6883f..dacf1ecbbd4 100644 --- a/lisp/help-fns.el +++ b/lisp/help-fns.el @@ -777,7 +777,7 @@ the C sources, too." (save-excursion (forward-char -1) (<= (current-column) (- fill-column 12))) - (cl--set-buffer-substring (- beg 3) beg " "))))) + (replace-region-contents (- beg 3) beg " " 0))))) high-doc))))) (defun help-fns--parent-mode (function) diff --git a/lisp/language/japan-util.el b/lisp/language/japan-util.el index 718c469d562..6fbb52b627e 100644 --- a/lisp/language/japan-util.el +++ b/lisp/language/japan-util.el @@ -217,9 +217,9 @@ The argument object is not altered--the value is a copy." (defun japanese-replace-region (from to string) "Replace the region specified by FROM and TO to STRING." - (goto-char from) - (insert string) - (delete-char (- to from))) + (declare (obsolete replace-region-contents "31.1")) + (goto-char to) + (replace-region-contents from to string 0)) ;;;###autoload (defun japanese-katakana-region (from to &optional hankaku) @@ -238,13 +238,15 @@ of which charset is `japanese-jisx0201-kana'." (get-char-code-property kana 'kana-composition))) slot) ;; next (if (and composition (setq slot (assq (following-char) composition))) - (japanese-replace-region (match-beginning 0) (1+ (point)) - (cdr slot)) + (progn + (goto-char (1+ (point))) + (replace-region-contents (match-beginning 0) (point) + (cdr slot) 0)) (let ((kata (get-char-code-property kana (if hankaku 'jisx0201 'katakana)))) (if kata - (japanese-replace-region (match-beginning 0) (point) - kata))))))))) + (replace-region-contents (match-beginning 0) (point) + kata 0))))))))) ;;;###autoload @@ -260,13 +262,16 @@ of which charset is `japanese-jisx0201-kana'." (composition (get-char-code-property kata 'kana-composition)) slot) ;; next (if (and composition (setq slot (assq (following-char) composition))) - (japanese-replace-region (match-beginning 0) (1+ (point)) - (get-char-code-property - (cdr slot) 'hiragana)) + (progn + (goto-char (1+ (point))) + (replace-region-contents (match-beginning 0) (point) + (get-char-code-property + (cdr slot) 'hiragana) + 0)) (let ((hira (get-char-code-property kata 'hiragana))) (if hira - (japanese-replace-region (match-beginning 0) (point) - hira))))))))) + (replace-region-contents (match-beginning 0) (point) + hira 0))))))))) ;;;###autoload (defun japanese-hankaku-region (from to &optional ascii-only) @@ -285,8 +290,8 @@ Optional argument ASCII-ONLY non-nil means to convert only to ASCII char." (get-char-code-property zenkaku 'jisx0201)) (get-char-code-property zenkaku 'ascii)))) (if hankaku - (japanese-replace-region (match-beginning 0) (match-end 0) - hankaku))))))) + (replace-region-contents (match-beginning 0) (match-end 0) + hankaku 0))))))) ;;;###autoload (defun japanese-zenkaku-region (from to &optional katakana-only) @@ -307,12 +312,14 @@ Optional argument KATAKANA-ONLY non-nil means to convert only KATAKANA char." (composition (get-char-code-property hankaku 'kana-composition)) slot) ;; next (if (and composition (setq slot (assq (following-char) composition))) - (japanese-replace-region (match-beginning 0) (1+ (point)) - (cdr slot)) + (progn + (goto-char (1+ (point))) + (replace-region-contents (match-beginning 0) (point) + (cdr slot) 0)) (let ((zenkaku (japanese-zenkaku hankaku))) (if zenkaku - (japanese-replace-region (match-beginning 0) (match-end 0) - zenkaku))))))))) + (replace-region-contents (match-beginning 0) (match-end 0) + zenkaku 0))))))))) ;;;###autoload (defun read-hiragana-string (prompt &optional initial-input) diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index becb2a7faba..e9c064b89e8 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -1398,35 +1398,8 @@ Moves point to the end of the new text." newtext) ;; Remove all text properties. (set-text-properties 0 (length newtext) nil newtext)) - ;; Maybe this should be in subr.el. - ;; You'd think this is trivial to do, but details matter if you want - ;; to keep markers "at the right place" and be robust in the face of - ;; after-change-functions that may themselves modify the buffer. - (let ((prefix-len 0)) - ;; Don't touch markers in the shared prefix (if any). - (while (and (< prefix-len (length newtext)) - (< (+ beg prefix-len) end) - (eq (char-after (+ beg prefix-len)) - (aref newtext prefix-len))) - (setq prefix-len (1+ prefix-len))) - (unless (zerop prefix-len) - (setq beg (+ beg prefix-len)) - (setq newtext (substring newtext prefix-len)))) - (let ((suffix-len 0)) - ;; Don't touch markers in the shared suffix (if any). - (while (and (< suffix-len (length newtext)) - (< beg (- end suffix-len)) - (eq (char-before (- end suffix-len)) - (aref newtext (- (length newtext) suffix-len 1)))) - (setq suffix-len (1+ suffix-len))) - (unless (zerop suffix-len) - (setq end (- end suffix-len)) - (setq newtext (substring newtext 0 (- suffix-len)))) - (goto-char beg) - (let ((length (- end beg))) ;Read `end' before we insert the text. - (insert-and-inherit newtext) - (delete-region (point) (+ (point) length))) - (forward-char suffix-len))) + (replace-region-contents beg end newtext 0.1 nil 'inherit) + (goto-char (+ beg (length newtext)))) (defcustom completion-cycle-threshold nil "Number of completion candidates below which cycling is used. @@ -2951,7 +2924,7 @@ This calls the function that `completion-in-region-function' specifies \(passing the same four arguments that it received) to do the work, and returns whatever it does. The return value should be nil if there was no valid completion, else t." - (cl-assert (<= start (point)) (<= (point) end)) + (cl-assert (<= start (point) end) t) (funcall completion-in-region-function start end collection predicate)) (defcustom read-file-name-completion-ignore-case diff --git a/lisp/progmodes/flymake-proc.el b/lisp/progmodes/flymake-proc.el index df6571311e4..0418d9fd07c 100644 --- a/lisp/progmodes/flymake-proc.el +++ b/lisp/progmodes/flymake-proc.el @@ -331,7 +331,7 @@ max-level parent dirs. File contents are not checked." (setq dirs (cdr dirs))) (when files (let ((flymake-proc--included-file-name (file-name-nondirectory file-name))) - (setq files (sort files 'flymake-proc--master-file-compare)))) + (setq files (sort files #'flymake-proc--master-file-compare)))) (flymake-log 3 "found %d possible master file(s)" (length files)) files)) @@ -407,9 +407,10 @@ instead of reading master file from disk." ;; replace-match is not used here as it fails in ;; XEmacs with 'last match not a buffer' error as ;; check-includes calls replace-in-string - (flymake-proc--replace-region + (replace-region-contents match-beg match-end - (file-name-nondirectory patched-source-file-name)))) + (file-name-nondirectory patched-source-file-name) + 0))) (forward-line 1))) (when found (flymake-proc--save-buffer-in-file patched-master-file-name))) @@ -424,11 +425,8 @@ instead of reading master file from disk." ;;; XXX: remove (defun flymake-proc--replace-region (beg end rep) "Replace text in BUFFER in region (BEG END) with REP." - (save-excursion - (goto-char end) - ;; Insert before deleting, so as to better preserve markers's positions. - (insert rep) - (delete-region beg end))) + (declare (obsolete replace-region-contents "31")) + (replace-region-contents beg end rep 0)) (defun flymake-proc--read-file-to-temp-buffer (file-name) "Insert contents of FILE-NAME into newly created temp buffer." diff --git a/lisp/subr.el b/lisp/subr.el index 66b73cbf6cc..017ab3e16bb 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -4798,8 +4798,8 @@ Comparisons and replacements are done with fixed case." (let ((matches 0) (case-fold-search nil)) (while (search-forward string nil t) - (delete-region (match-beginning 0) (match-end 0)) - (insert replacement) + (replace-region-contents (match-beginning 0) (match-end 0) + replacement 0) (setq matches (1+ matches))) (and (not (zerop matches)) matches))))) commit 468c2aebae0ee13273f4b06e92f4188c4c46d2b3 Author: Stefan Monnier Date: Fri Mar 28 00:48:28 2025 -0400 Replace uses of `replace-buffer-contents` * lisp/vc/vc.el (vc-diff-restore-buffer): * lisp/progmodes/python.el (python--do-isort): * lisp/progmodes/eglot.el (eglot--apply-text-edits): * lisp/files.el (revert-buffer-insert-file-contents-delicately): * lisp/json.el (json-pretty-print): Use `replace-region-contents`. diff --git a/lisp/files.el b/lisp/files.el index 3ce5d6264dc..eb49f25ee27 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -7264,9 +7264,9 @@ an auto-save file." The command tries to preserve markers, properties and overlays. If the operation takes more than this time, a single delete+insert is performed. Actually, this value is passed as -the MAX-SECS argument to the function `replace-buffer-contents', +the MAX-SECS argument to the function `replace-region-contents', so it is not ensured that the whole execution won't take longer. -See `replace-buffer-contents' for more details.") +See `replace-region-contents' for more details.") (defun revert-buffer-insert-file-contents-delicately (file-name _auto-save-p) "Optional function for `revert-buffer-insert-file-contents-function'. @@ -7275,11 +7275,11 @@ The function `revert-buffer-with-fine-grain' uses this function by binding As with `revert-buffer-insert-file-contents--default-function', FILE-NAME is the name of the file and AUTO-SAVE-P is non-nil if this is an auto-save file. -Since calling `replace-buffer-contents' can take a long time, depending of +Since calling `replace-region-contents' can take a long time, depending of the number of changes made to the buffer, it uses the value of the variable `revert-buffer-with-fine-grain-max-seconds' as a maximum time to try delicately reverting the buffer. If it fails, it does a delete+insert. For more details, -see `replace-buffer-contents'." +see `replace-region-contents'." (cond ((not (file-exists-p file-name)) (error (if buffer-file-number @@ -7302,7 +7302,8 @@ see `replace-buffer-contents'." (let ((temp-buf (current-buffer))) (set-buffer buf) (let ((buffer-file-name nil)) - (replace-buffer-contents + (replace-region-contents + (point-min) (point-max) temp-buf revert-buffer-with-fine-grain-max-seconds)))))))) ;; See comments in revert-buffer-with-fine-grain for an explanation. diff --git a/lisp/json.el b/lisp/json.el index 6e62e594910..098bf43cd99 100644 --- a/lisp/json.el +++ b/lisp/json.el @@ -803,7 +803,7 @@ With prefix argument MINIMIZE, minimize it instead." (orig-buf (current-buffer))) ;; Strategy: Repeatedly `json-read' from the original buffer and ;; write the pretty-printed snippet to a temporary buffer. - ;; Use `replace-buffer-contents' to swap the original + ;; Use `replace-region-contents' to swap the original ;; region with the contents of the temporary buffer so that point, ;; marks, etc. are kept. ;; Stop as soon as we get an error from `json-read'. @@ -825,16 +825,14 @@ With prefix argument MINIMIZE, minimize it instead." (standard-output tmp-buf)) (with-current-buffer tmp-buf (erase-buffer) (json--print json)) - (save-restriction - (narrow-to-region beg (point)) - (replace-buffer-contents - tmp-buf - json-pretty-print-max-secs - ;; FIXME: What's a good value here? Can we use - ;; something better, e.g., by deriving a value - ;; from the size of the region? - 64) - 'keep-going)) + (replace-region-contents + beg (point) tmp-buf + json-pretty-print-max-secs + ;; FIXME: What's a good value here? Can we use + ;; something better, e.g., by deriving a value + ;; from the size of the region? + 64) + 'keep-going) ;; EOF is expected because we json-read until we hit ;; the end of the narrow region. (json-end-of-file nil)))))))))) diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index 4c1c7536b0d..c937283122e 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -3839,17 +3839,20 @@ If SILENT, don't echo progress in mode-line." 0 howmany))) (done 0)) (mapc (pcase-lambda (`(,newText ,beg . ,end)) - (let ((source (current-buffer))) - (with-temp-buffer - (insert newText) - (let ((temp (current-buffer))) - (with-current-buffer source - (save-excursion - (save-restriction - (narrow-to-region beg end) - (replace-buffer-contents temp))) - (when reporter - (eglot--reporter-update reporter (cl-incf done)))))))) + (if (> emacs-major-version 30) + (replace-region-contents beg end newText) + (let ((source (current-buffer))) + (with-temp-buffer + (insert newText) + (let ((temp (current-buffer))) + (with-current-buffer source + (save-excursion + (save-restriction + (narrow-to-region beg end) + (with-no-warnings + (replace-buffer-contents temp))))))))) + (when reporter + (eglot--reporter-update reporter (cl-incf done)))) (mapcar (lambda (edit) (eglot--dcase edit (((TextEdit) range newText) diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index b6db6097d9f..de3745a036c 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -6931,7 +6931,7 @@ Return non-nil if the buffer was actually modified." (unless (eq 0 status) (error "%s exited with status %s (maybe isort is missing?)" python-interpreter status)) - (replace-buffer-contents temp) + (replace-region-contents (point-min) (point-max) temp) (not (eq tick (buffer-chars-modified-tick))))))))) ;;;###autoload diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index 565eaabff0b..5c401f0bded 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -1970,7 +1970,7 @@ of NEW (without destroying existing markers), swapping their text objects, and finally killing buffer ORIGINAL." (with-current-buffer original (let ((inhibit-read-only t)) - (replace-buffer-contents new))) + (replace-region-contents (point-min) (point-max) new))) (with-current-buffer new (buffer-swap-text original)) (kill-buffer original)) commit 57da44fa702782e19cd9d60ea63ec2fd9ca48521 Author: Stefan Monnier Date: Sat Mar 29 16:40:19 2025 -0400 src/insdel.c (adjust_markers_for_replace): Fix insertion case test/src/editfns-tests.el (editfns-tests--insert-via-replace): New test diff --git a/src/insdel.c b/src/insdel.c index 20267265ab8..053b2d46380 100644 --- a/src/insdel.c +++ b/src/insdel.c @@ -348,12 +348,20 @@ adjust_markers_for_replace (ptrdiff_t from, ptrdiff_t from_byte, ptrdiff_t diff_chars = new_chars - old_chars; ptrdiff_t diff_bytes = new_bytes - old_bytes; + if (old_chars == 0) + { + /* Just an insertion: markers at FROM may need to move or not depending + on their marker type. Delegate this special case to + 'adjust_markers_for_insert' so the loop below can remain oblivious + to marker types. */ + adjust_markers_for_insert (from, from_byte, + from + new_chars, from_byte + new_bytes, + false); + return; + } + adjust_suspend_auto_hscroll (from, from + old_chars); - /* FIXME: When OLD_CHARS is 0, this "replacement" is really just an - insertion, but the behavior we provide here in that case is that of - `insert-before-markers` rather than that of `insert`. - Maybe not a bug, but not a feature either. */ for (m = BUF_MARKERS (current_buffer); m; m = m->next) { if (m->bytepos >= prev_to_byte) @@ -371,8 +379,7 @@ adjust_markers_for_replace (ptrdiff_t from, ptrdiff_t from_byte, check_markers (); adjust_overlays_for_insert (from + old_chars, new_chars, true); - if (old_chars) - adjust_overlays_for_delete (from, old_chars); + adjust_overlays_for_delete (from, old_chars); } /* Starting at POS (BYTEPOS), find the byte position corresponding to diff --git a/test/src/editfns-tests.el b/test/src/editfns-tests.el index 3da9d4e8acd..2553ad3ec2c 100644 --- a/test/src/editfns-tests.el +++ b/test/src/editfns-tests.el @@ -357,6 +357,20 @@ (should (= m7a (+ (point-min) 7))))) (widen))))) +(ert-deftest editfns-tests--insert-via-replace () + (with-temp-buffer + (insert "bar") + (goto-char (point-min)) + ;; Check that markers insertion type is respected when an insertion + ;; happens via a "replace" operation. + (let ((m1 (copy-marker (point) nil)) + (m2 (copy-marker (point) t))) + (looking-at "\\(\\)") + (replace-match "foo") + (should (equal "foobar" (buffer-string))) + (should (= (point-min) m1)) + (should (= (+ (point-min) 3) m2))))) + (ert-deftest delete-region-undo-markers-1 () "Make sure we don't end up with freed markers reachable from Lisp." ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=30931#40 commit 7c82cc8b975175aebbad1c43ec1cd98b3232f482 Author: Stefan Monnier Date: Fri Mar 28 00:46:53 2025 -0400 (replace-region-contents): Improve and promote (bug#76313) Swap the role of `replace-region-contents` and `replace-buffer-contents`, so `replace-region-contents` is the main function, implemented in C, and `replace-buffer-contents` is a mere wrapper (marked as obsolete). Also remove the need to rely on narrowing and on describing the new text as a function. Finally, allow MAX-SECS==0 to require a cheap replacement, and add an INHERIT argument. * src/editfns.c: Include `coding.h`. (Freplace_region_contents): Rename from `Freplace_buffer_contents`. Change calling convention to that of `replace-region-contents`. Add more options for the SOURCE argument. Add INHERIT argument. Skip the costly algorithm if MAX-SECS is 0. * src/insdel.c (replace_range): Allow NEW to be a buffer. * lisp/subr.el (replace-buffer-contents): New implementation. * lisp/emacs-lisp/subr-x.el (replace-region-contents): Delete. * doc/lispref/text.texi (Replacing): Document new API for `replace-region-contents`. Remove documentation of `replace-buffer-contents`. * test/src/editfns-tests.el (replace-buffer-contents-1) (replace-buffer-contents-2, replace-buffer-contents-bug31837): Use `replace-region-contents`. (editfns--replace-region): Delete. (editfns-tests--replace-region): Use `replace-region-contents`. Adds tests for new types of SOURCE args. diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi index 18ed71fd1f5..954979a00e6 100644 --- a/doc/lispref/text.texi +++ b/doc/lispref/text.texi @@ -4776,30 +4776,42 @@ all markers unrelocated. @node Replacing @section Replacing Buffer Text - You can use the following function to replace the text of one buffer -with the text of another buffer: + You can use the following function to replace some the text of the +current buffer: -@deffn Command replace-buffer-contents source &optional max-secs max-costs -This function replaces the accessible portion of the current buffer -with the accessible portion of the buffer @var{source}. @var{source} -may either be a buffer object or the name of a buffer. When -@code{replace-buffer-contents} succeeds, the text of the accessible -portion of the current buffer will be equal to the text of the -accessible portion of the @var{source} buffer. +@defun replace-region-contents beg end source &optional max-secs max-costs inherit +This function replaces the region between @var{beg} and @var{end} +of the current buffer with the text found in @var{source} which +is usually a string or a buffer, in which case it will use the +accessible portion of that buffer. This function attempts to keep point, markers, text properties, and overlays in the current buffer intact. One potential case where this -behavior is useful is external code formatting programs: they -typically write the reformatted text into a temporary buffer or file, -and using @code{delete-region} and @code{insert-buffer-substring} -would destroy these properties. However, the latter combination is -typically faster (@xref{Deletion}, and @ref{Insertion}). - -For its working, @code{replace-buffer-contents} needs to compare the -contents of the original buffer with that of @var{source} which is a -costly operation if the buffers are huge and there is a high number of -differences between them. In order to keep -@code{replace-buffer-contents}'s runtime in bounds, it has two +behavior is useful is external code formatting programs: they typically +write the reformatted text into a temporary buffer or file, and using +@code{insert} and @code{delete-region} would destroy these properties. + +However, in order to do that, @code{replace-region-contents} needs to +compare the contents of the original buffer with that of @var{source}, +using a costly algorithm which makes the operation much slower than +a simple @code{insert} and @code{delete-region}. In many cases, you may +not need that refinement, and you will then want to pass 0 as +@var{max-secs} argument, so as to short-circuit that costly algorithm: +It will then be just as fast as @code{insert} and @code{delete-region} +while still preserving point and markers marginally better. + +Beyond that basic usage, if you need to use as source a subset of the +accessible portion of a buffer, @var{source} can also be a vector +@code{[@var{sbuf} @var{sbeg} @var{send}]} where the region between +@var{sbeg} and @var{send} in buffer @var{sbuf} is the text +you want to use as source. + +If you need the inserted text to inherit text-properties +from the adjoining text, you can pass a non-@code{nil} value as +@var{inherit} argument. + +When you do want the costly refined replacement, in order to keep +@code{replace-region-contents}'s runtime in bounds, it has two optional arguments. @var{max-secs} defines a hard boundary in terms of seconds. If given @@ -4810,26 +4822,14 @@ and exceeded, it will fall back to @code{delete-region} and the actual costs exceed this limit, heuristics are used to provide a faster but suboptimal solution. The default value is 1000000. -@code{replace-buffer-contents} returns @code{t} if a non-destructive +@code{replace-region-contents} returns @code{t} if a non-destructive replacement could be performed. Otherwise, i.e., if @var{max-secs} was exceeded, it returns @code{nil}. -@end deffn -@defun replace-region-contents beg end replace-fn &optional max-secs max-costs -This function replaces the region between @var{beg} and @var{end} -using the given @var{replace-fn}. The function @var{replace-fn} is -run in the current buffer narrowed to the specified region and it -should return either a string or a buffer replacing the region. - -The replacement is performed using @code{replace-buffer-contents} (see -above) which also describes the @var{max-secs} and @var{max-costs} -arguments and the return value. - -Note: If the replacement is a string, it will be placed in a temporary -buffer so that @code{replace-buffer-contents} can operate on it. -Therefore, if you already have the replacement in a buffer, it makes -no sense to convert it to a string using @code{buffer-substring} or -similar. +Note: When using the refined replacement algorithm, if the replacement +is a string, it will be internally copied to a temporary buffer. +Therefore, all else being equal, it is preferable to pass a buffer than +a string as @var{source} argument. @end defun @node Decompression diff --git a/etc/NEWS b/etc/NEWS index 33a2b3fd07a..f0b84385510 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1732,6 +1732,13 @@ Previously, its argument was always evaluated using dynamic binding. * Lisp Changes in Emacs 31.1 ++++ +** Improve 'replace-region-contents' to accept more forms of sources. +It has been promoted from 'subr-x' to the C code. +You can now directly pass it a string or a buffer rather than a function. +Actually passing it a function is now deprecated. +'replace-buffer-contents' is also marked as obsolete. + +++ ** New macros 'static-when' and 'static-unless'. Like 'static-if', these macros evaluate their condition at diff --git a/lisp/emacs-lisp/subr-x.el b/lisp/emacs-lisp/subr-x.el index 6414ecab394..eaa8119ead7 100644 --- a/lisp/emacs-lisp/subr-x.el +++ b/lisp/emacs-lisp/subr-x.el @@ -281,35 +281,6 @@ the string." (declare (pure t) (side-effect-free t)) (string-remove-suffix "\n" string)) -(defun replace-region-contents (beg end replace-fn - &optional max-secs max-costs) - "Replace the region between BEG and END using REPLACE-FN. -REPLACE-FN runs on the current buffer narrowed to the region. It -should return either a string or a buffer replacing the region. - -The replacement is performed using `replace-buffer-contents' -which also describes the MAX-SECS and MAX-COSTS arguments and the -return value. - -Note: If the replacement is a string, it'll be placed in a -temporary buffer so that `replace-buffer-contents' can operate on -it. Therefore, if you already have the replacement in a buffer, -it makes no sense to convert it to a string using -`buffer-substring' or similar." - (save-excursion - (save-restriction - (narrow-to-region beg end) - (goto-char (point-min)) - (let ((repl (funcall replace-fn))) - (if (bufferp repl) - (replace-buffer-contents repl max-secs max-costs) - (let ((source-buffer (current-buffer))) - (with-temp-buffer - (insert repl) - (let ((tmp-buffer (current-buffer))) - (set-buffer source-buffer) - (replace-buffer-contents tmp-buffer max-secs max-costs))))))))) - ;;;###autoload (defmacro named-let (name bindings &rest body) "Looping construct taken from Scheme. diff --git a/lisp/subr.el b/lisp/subr.el index 8c1e6f657a6..66b73cbf6cc 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -4762,6 +4762,19 @@ Point in BUFFER will be placed after the inserted text." (with-current-buffer buffer (insert-buffer-substring current start end)))) +(defun replace-buffer-contents (source &optional max-secs max-costs) + "Replace accessible portion of current buffer with that of SOURCE. +SOURCE can be a buffer or a string that names a buffer. +Interactively, prompt for SOURCE. + +The replacement is performed using `replace-region-contents' +which also describes the MAX-SECS and MAX-COSTS arguments and the +return value." + (declare (obsolete replace-region-contents "31.1")) + (interactive "bSource buffer: ") + (replace-region-contents (point-min) (point-max) (get-buffer source) + max-secs max-costs)) + (defun replace-string-in-region (string replacement &optional start end) "Replace STRING with REPLACEMENT in the region from START to END. The number of replaced occurrences are returned, or nil if STRING diff --git a/src/coding.c b/src/coding.c index b0bd5d3a9ab..63b0dbeb18b 100644 --- a/src/coding.c +++ b/src/coding.c @@ -7898,6 +7898,8 @@ code_conversion_save (bool with_work_buf, bool multibyte) bset_enable_multibyte_characters (current_buffer, multibyte ? Qt : Qnil); if (EQ (workbuf, Vcode_conversion_reused_workbuf)) reused_workbuf_in_use = true; + /* FIXME: Maybe we should stay in the new workbuf, because we often + switch right back to it anyway in order to initialize it further. */ set_buffer_internal (current); } diff --git a/src/editfns.c b/src/editfns.c index 53d6cce7c82..25625793c42 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -54,6 +54,7 @@ along with GNU Emacs. If not, see . */ #include "buffer.h" #include "window.h" #include "blockinput.h" +#include "coding.h" #ifdef WINDOWSNT # include "w32common.h" @@ -1914,11 +1915,14 @@ static bool compareseq_early_abort (struct context *); #include "minmax.h" #include "diffseq.h" -DEFUN ("replace-buffer-contents", Freplace_buffer_contents, - Sreplace_buffer_contents, 1, 3, "bSource buffer: ", - doc: /* Replace accessible portion of current buffer with that of SOURCE. -SOURCE can be a buffer or a string that names a buffer. -Interactively, prompt for SOURCE. +DEFUN ("replace-region-contents", Freplace_region_contents, + Sreplace_region_contents, 3, 6, 0, + doc: /* Replace the region between BEG and END with that of SOURCE. +SOURCE can be a buffer, a string, or a vector [SBUF SBEG SEND] +denoting the subtring SBEG..SEND of buffer SBUF. + +If optional argument INHERIT is non-nil, the inserted text will inherit +properties from adjoining text. As far as possible the replacement is non-destructive, i.e. existing buffer contents, markers, properties, and overlays in the current @@ -1940,18 +1944,85 @@ computation. If the actual costs exceed this limit, heuristics are used to provide a faster but suboptimal solution. The default value is 1000000. +Note: If the replacement is a string, it’ll usually be placed internally +in a temporary buffer. Therefore, all else being equal, it is preferable +to pass a buffer rather than a string as SOURCE argument. + This function returns t if a non-destructive replacement could be performed. Otherwise, i.e., if MAX-SECS was exceeded, it returns -nil. */) - (Lisp_Object source, Lisp_Object max_secs, Lisp_Object max_costs) +nil. + +SOURCE can also be a function that will be called with no arguments +and with current buffer narrowed to BEG..END, and should return +a buffer or a string. But this is deprecated. */) + (Lisp_Object beg, Lisp_Object end, Lisp_Object source, + Lisp_Object max_secs, Lisp_Object max_costs, Lisp_Object inherit) { - struct buffer *a = current_buffer; - Lisp_Object source_buffer = Fget_buffer (source); - if (NILP (source_buffer)) - nsberror (source); - struct buffer *b = XBUFFER (source_buffer); - if (! BUFFER_LIVE_P (b)) + validate_region (&beg, &end); + ptrdiff_t min_a = XFIXNUM (beg); + ptrdiff_t size_a = XFIXNUM (end) - min_a; + eassume (size_a >= 0); + bool a_empty = size_a == 0; + bool inh = !NILP (inherit); + + if (FUNCTIONP (source)) + { + specpdl_ref count = SPECPDL_INDEX (); + record_unwind_protect (save_restriction_restore, + save_restriction_save ()); + Fnarrow_to_region (beg, end); + source = calln (source); + unbind_to (count, Qnil); + } + ptrdiff_t min_b, size_b; + struct buffer *b; + if (STRINGP (source)) + { + min_b = BEG; /* Assuming we'll copy it into a buffer. */ + size_b = SCHARS (source); + b = NULL; + } + else if (BUFFERP (source)) + { + b = XBUFFER (source); + min_b = BUF_BEGV (b); + size_b = BUF_ZV (b) - min_b; + } + else + { + CHECK_TYPE (VECTORP (source), + list (Qor, Qstring, Qbuffer, Qvector), source); + /* Let `Faref' signal an error if it's too small. */ + Lisp_Object send = Faref (source, make_fixnum (2)); + Lisp_Object sbeg = AREF (source, 1); + CHECK_BUFFER (AREF (source, 0)); + b = XBUFFER (AREF (source, 0)); + specpdl_ref count = SPECPDL_INDEX (); + record_unwind_current_buffer (); + set_buffer_internal (b); + validate_region (&sbeg, &send); + unbind_to (count, Qnil); + min_b = XFIXNUM (sbeg); + size_b = XFIXNUM (send) - min_b; + } + bool b_empty = size_b == 0; + if (b && !BUFFER_LIVE_P (b)) error ("Selecting deleted buffer"); + + /* Handle trivial cases where at least one accessible portion is + empty. */ + + if (a_empty && b_empty) + return Qt; + else if (a_empty || b_empty + || EQ (max_secs, make_fixnum (0)) + || EQ (max_costs, make_fixnum (0))) + { + replace_range (min_a, min_a + size_a, source, true, false, inh); + return Qt; + } + + struct buffer *a = current_buffer; if (a == b) error ("Cannot replace a buffer with itself"); @@ -1977,36 +2048,8 @@ nil. */) time_limit = tlim; } - ptrdiff_t min_a = BEGV; - ptrdiff_t min_b = BUF_BEGV (b); - ptrdiff_t size_a = ZV - min_a; - ptrdiff_t size_b = BUF_ZV (b) - min_b; - eassume (size_a >= 0); - eassume (size_b >= 0); - bool a_empty = size_a == 0; - bool b_empty = size_b == 0; - - /* Handle trivial cases where at least one accessible portion is - empty. */ - - if (a_empty && b_empty) - return Qt; - - if (a_empty) - { - Finsert_buffer_substring (source, Qnil, Qnil); - return Qt; - } - - if (b_empty) - { - del_range_both (BEGV, BEGV_BYTE, ZV, ZV_BYTE, true); - return Qt; - } - specpdl_ref count = SPECPDL_INDEX (); - ptrdiff_t diags = size_a + size_b + 3; ptrdiff_t del_bytes = size_a / CHAR_BIT + 1; ptrdiff_t ins_bytes = size_b / CHAR_BIT + 1; @@ -2020,6 +2063,18 @@ nil. */) unsigned char *deletions_insertions = memset (buffer + 2 * diags, 0, del_bytes + ins_bytes); + /* The rest of the code is not prepared to handle a string SOURCE. */ + if (!b) + { + Lisp_Object workbuf + = code_conversion_save (true, STRING_MULTIBYTE (source)); + b = XBUFFER (workbuf); + set_buffer_internal (b); + CALLN (Finsert, source); + set_buffer_internal (a); + } + Lisp_Object source_buffer = make_lisp_ptr (b, Lisp_Vectorlike); + /* FIXME: It is not documented how to initialize the contents of the context structure. This code cargo-cults from the existing caller in src/analyze.c of GNU Diffutils, which appears to @@ -2053,7 +2108,7 @@ nil. */) Lisp_Object src = CALLN (Fvector, source_buffer, make_fixnum (BUF_BEGV (b)), make_fixnum (BUF_ZV (b))); - replace_range (BEGV, ZV, src, true, false, false); + replace_range (min_a, min_a + size_a, src, true, false, inh); SAFE_FREE_UNBIND_TO (count, Qnil); return Qnil; } @@ -2069,7 +2124,7 @@ nil. */) modification hooks, because then they don't want that. */ if (!inhibit_modification_hooks) { - prepare_to_modify_buffer (BEGV, ZV, NULL); + prepare_to_modify_buffer (min_a, min_a + size_a, NULL); specbind (Qinhibit_modification_hooks, Qt); modification_hooks_inhibited = true; } @@ -2102,10 +2157,9 @@ nil. */) eassert (beg_a <= end_a); eassert (beg_b <= end_b); eassert (beg_a < end_a || beg_b < end_b); - /* FIXME: Use 'replace_range'! */ ASET (src, 1, make_fixed_natnum (beg_b)); ASET (src, 2, make_fixed_natnum (end_b)); - replace_range (beg_a, end_a, src, true, false, false); + replace_range (beg_a, end_a, src, true, false, inh); } --i; --j; @@ -2115,8 +2169,8 @@ nil. */) if (modification_hooks_inhibited) { - signal_after_change (BEGV, size_a, ZV - BEGV); - update_compositions (BEGV, ZV, CHECK_INSIDE); + signal_after_change (min_a, size_a, size_b); + update_compositions (min_a, min_a + size_b, CHECK_INSIDE); /* We've locked the buffer's file above in prepare_to_modify_buffer; if the buffer is unchanged at this point, i.e. no insertions or deletions have been made, unlock @@ -4787,7 +4841,7 @@ it to be non-nil. */); defsubr (&Sinsert_buffer_substring); defsubr (&Scompare_buffer_substrings); - defsubr (&Sreplace_buffer_contents); + defsubr (&Sreplace_region_contents); defsubr (&Ssubst_char_in_region); defsubr (&Stranslate_region_internal); defsubr (&Sdelete_region); diff --git a/src/insdel.c b/src/insdel.c index 9b770725971..20267265ab8 100644 --- a/src/insdel.c +++ b/src/insdel.c @@ -1409,9 +1409,9 @@ adjust_after_insert (ptrdiff_t from, ptrdiff_t from_byte, adjust_after_replace (from, from_byte, Qnil, newlen, len_byte); } -/* Replace the text from character positions FROM to TO with NEW. - NEW could either be a string, the replacement text, or a vector - [BUFFER BEG END], where BUFFER is the buffer with the replacement +/* Replace the text from character positions FROM to TO with the + replacement text NEW. NEW could either be a string, a buffer, or + a vector [BUFFER BEG END], where BUFFER is the buffer with the replacement text and BEG and END are buffer positions in BUFFER that give the replacement text beginning and end. If PREPARE, call prepare_to_modify_buffer. @@ -1439,6 +1439,12 @@ replace_range (ptrdiff_t from, ptrdiff_t to, Lisp_Object new, insbeg = 0; inschars = SCHARS (new); } + else if (BUFFERP (new)) + { + insbuf = XBUFFER (new); + insbeg = BUF_BEGV (insbuf); + inschars = BUF_ZV (insbuf) - insbeg; + } else { CHECK_VECTOR (new); diff --git a/test/src/editfns-tests.el b/test/src/editfns-tests.el index c3f825c6149..3da9d4e8acd 100644 --- a/test/src/editfns-tests.el +++ b/test/src/editfns-tests.el @@ -289,7 +289,7 @@ (narrow-to-region 8 13) (goto-char 12) (should (looking-at " \\'")) - (replace-buffer-contents source) + (replace-region-contents (point-min) (point-max) source) (should (looking-at " \\'"))) (should (equal (marker-buffer marker) (current-buffer))) (should (equal (marker-position marker) 16))) @@ -306,7 +306,7 @@ (let ((source (current-buffer))) (with-temp-buffer (insert "foo BAR baz qux") - (replace-buffer-contents source) + (replace-region-contents (point-min) (point-max) source) (should (equal-including-properties (buffer-string) "foo bar baz qux")))))) @@ -318,44 +318,44 @@ (switch-to-buffer "b") (insert-char (char-from-name "SMILE")) (insert "5678") - (replace-buffer-contents "a") + (replace-region-contents (point-min) (point-max) (get-buffer "a")) (should (equal (buffer-substring-no-properties (point-min) (point-max)) (concat (string (char-from-name "SMILE")) "1234")))) -(defun editfns--replace-region (from to string) - (save-excursion - (save-restriction - (narrow-to-region from to) - (let ((buf (current-buffer))) - (with-temp-buffer - (let ((str-buf (current-buffer))) - (insert string) - (with-current-buffer buf - (replace-buffer-contents str-buf)))))))) - (ert-deftest editfns-tests--replace-region () ;; :expected-result :failed (with-temp-buffer - (insert "here is some text") - (let ((m5n (copy-marker (+ (point-min) 5))) - (m5a (copy-marker (+ (point-min) 5) t)) - (m6n (copy-marker (+ (point-min) 6))) - (m6a (copy-marker (+ (point-min) 6) t)) - (m7n (copy-marker (+ (point-min) 7))) - (m7a (copy-marker (+ (point-min) 7) t))) - (editfns--replace-region (+ (point-min) 5) (+ (point-min) 7) "be") - (should (equal (buffer-string) "here be some text")) - (should (equal (point) (point-max))) - ;; Markers before the replaced text stay before. - (should (= m5n (+ (point-min) 5))) - (should (= m5a (+ (point-min) 5))) - ;; Markers in the replaced text can end up at either end, depending - ;; on whether they're advance-after-insert or not. - (should (= m6n (+ (point-min) 5))) - (should (<= (+ (point-min) 5) m6a (+ (point-min) 7))) - ;; Markers after the replaced text stay after. - (should (= m7n (+ (point-min) 7))) - (should (= m7a (+ (point-min) 7)))))) + (let ((tmpbuf (current-buffer))) + (insert " be ") + (narrow-to-region (+ (point-min) 2) (- (point-max) 2)) + (dolist (args `((,tmpbuf) + (,(vector tmpbuf (point-min) (point-max))) + (,"be") + (,(vector tmpbuf (point-min) (point-max)) 0) + (,"be" 0))) + (with-temp-buffer + (insert "here is some text") + (let ((m5n (copy-marker (+ (point-min) 5))) + (m5a (copy-marker (+ (point-min) 5) t)) + (m6n (copy-marker (+ (point-min) 6))) + (m6a (copy-marker (+ (point-min) 6) t)) + (m7n (copy-marker (+ (point-min) 7))) + (m7a (copy-marker (+ (point-min) 7) t))) + (apply #'replace-region-contents + (+ (point-min) 5) (+ (point-min) 7) args) + (should (equal (buffer-string) "here be some text")) + (should (equal (point) (point-max))) + ;; Markers before the replaced text stay before. + (should (= m5n (+ (point-min) 5))) + (should (= m5a (+ (point-min) 5))) + ;; Markers in the replaced text can end up at either end, depending + ;; on whether they're advance-after-insert or not. + (should (= m6n (+ (point-min) 5))) + (should (<= (+ (point-min) 5) m6a (+ (point-min) 7))) + ;; Markers after the replaced text stay after. + (should (= m7n (+ (point-min) 7))) + (should (= m7a (+ (point-min) 7))))) + (widen))))) (ert-deftest delete-region-undo-markers-1 () "Make sure we don't end up with freed markers reachable from Lisp." commit b98fe25c2ee2ac2d82b337c49d1aa1dfed2417eb Author: Rahul Martim Juliato Date: Sat Mar 29 12:55:59 2025 -0300 Enhance 'icomplete-vertical-mode' customization options. * lisp/icomplete.el (icomplete-vertical-in-buffer-adjust-list): Align in-buffer completion to the original cursor column. (icomplete-vertical-render-prefix-indicator): Add a prefix indicator to completion candidates when enabled. (icomplete-vertical-selected-prefix-indicator): Specify the prefix string for the selected candidate. (icomplete-vertical-unselected-prefix-indicator): Specify the prefix string for unselected candidates. (icomplete-vertical-selected-prefix-indicator-face): Control the appearance of the selected candidate prefix. (icomplete-vertical-unselected-prefix-indicator-face): Control the appearance of unselected candidate prefixes. (Bug#75794) * etc/NEWS: Document the new user options and faces. diff --git a/etc/NEWS b/etc/NEWS index 33a2b3fd07a..efd03313f17 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1591,6 +1591,26 @@ width of the 'speedbar-window' when it is closed and then restored. --- *** 'speedbar-easymenu-definition-trailer' is now a function. +** Icomplete + +*** New user options for 'icomplete-vertical-mode'. +New user options have been added to enhance 'icomplete-vertical-mode': +- 'icomplete-vertical-in-buffer-adjust-list' aligns in-buffer + completion to the original cursor column. +- 'icomplete-vertical-render-prefix-indicator' adds a prefix indicator + to completion candidates. +- 'icomplete-vertical-selected-prefix-indicator' specifies the prefix + string for the selected candidate. +- 'icomplete-vertical-unselected-prefix-indicator' specifies the prefix + string for unselected candidates. + +*** New faces for 'icomplete-vertical-mode'. +New faces have been added to 'icomplete-vertical-mode': +- 'icomplete-vertical-selected-prefix-indicator-face' controls the + appearance of the selected candidate prefix. +- 'icomplete-vertical-unselected-prefix-indicator-face' controls the + appearance of unselected candidate prefixes. + ** Miscellaneous --- diff --git a/lisp/icomplete.el b/lisp/icomplete.el index c58bffbb36b..d0cc5674ba7 100644 --- a/lisp/icomplete.el +++ b/lisp/icomplete.el @@ -115,6 +115,18 @@ Otherwise this should be a list of the completion tables (e.g., "Face used by `icomplete-vertical-mode' for the section title." :version "28.1") +(defface icomplete-vertical-selected-prefix-indicator-face + '((t :inherit font-lock-keyword-face :weight bold :foreground "slate blue")) + "Face used by `icomplete-vertical-selected-prefix-indicator'." + :group 'icomplete + :version "31.1") + +(defface icomplete-vertical-unselected-prefix-indicator-face + '((t :inherit font-lock-keyword-face :weight normal :foreground "gray")) + "Face used by `icomplete-vertical-unselected-prefix-indicator'." + :group 'icomplete + :version "31.1") + ;;;_* User Customization variables (defcustom icomplete-prospects-height 2 ;; We used to compute how many lines 100 characters would take in @@ -166,6 +178,50 @@ will constrain Emacs to a maximum minibuffer height of 3 lines when icompletion is occurring." :type 'hook) +(defcustom icomplete-vertical-in-buffer-adjust-list nil + "Control whether in-buffer completion should align the cursor position. +If this is t and `icomplete-in-buffer' is t, and `icomplete-vertical-mode' +is activated, the in-buffer vertical completions are shown aligned to the +cursor position when the completion started, not on the first column, as +the default behavior." + :type 'boolean + :group 'icomplete + :version "31.1") + +(defcustom icomplete-vertical-render-prefix-indicator nil + "Control whether an indicator is added as a prefix to each candidate. +If this is t and `icomplete-vertical-mode' is activated, an indicator, +controlled by `icomplete-vertical-selected-prefix-indicator' is shown +as a prefix to the current under selection candidate, while the +remaining of the candidates will receive the indicator controlled +by `icomplete-vertical-unselected-prefix-indicator'." + :type 'boolean + :group 'icomplete + :version "31.1") + +(defcustom icomplete-vertical-selected-prefix-indicator + (if (char-displayable-p ?») "» " "> ") + "Prefix string used to mark the selected completion candidate. +If `icomplete-vertical-render-prefix-indicator' is t, this string +is used as a prefix of the currently selected entry in the list. +It can be further customized by the face +`icomplete-vertical-selected-prefix-indicator-face'. + +By default, this is set to \"» \" if the character is displayable, +otherwise, it falls back to \"> \"." + :type 'string + :group 'icomplete + :version "31.1") + +(defcustom icomplete-vertical-unselected-prefix-indicator " " + "Prefix string used on the unselected completion candidates. +If `icomplete-vertical-render-prefix-indicator' is t, the string +defined here is used as a prefix for all unselected entries in the list. +list. It can be further customized by the face +`icomplete-vertical-unselected-prefix-indicator-face'." + :type 'string + :group 'icomplete + :version "31.1") ;;;_* Initialization @@ -828,6 +884,58 @@ by `group-function''s second \"transformation\" protocol." else collect (list tr prefix suffix )) annotated))) +(defun icomplete-vertical--adjust-lines-for-column (lines buffer data) + "Adjust the LINES to align with the column in BUFFER based on DATA." + (if icomplete-vertical-in-buffer-adjust-list + (let* ((column (current-column)) + (prefix-indicator-width + (if icomplete-vertical-render-prefix-indicator + (max (length icomplete-vertical-selected-prefix-indicator) + (length icomplete-vertical-unselected-prefix-indicator)) + 0)) + (wrapped-line (with-current-buffer buffer + (save-excursion + (goto-char (car data)) + (beginning-of-line) + (count-screen-lines (point) (car data))))) + (window-width (+ (window-hscroll) (window-body-width))) + (longest-line-width (apply #'max (mapcar #'length lines))) + (spaces-to-add + (if (> wrapped-line 1) + (- column (* (- wrapped-line 1) (- window-width 5))) + column)) + (spaces-to-add-avoiding-scrolling + (if (>= (+ spaces-to-add longest-line-width prefix-indicator-width) window-width) + (- spaces-to-add longest-line-width) + spaces-to-add))) + + (mapcar (lambda (line) + (concat (make-string spaces-to-add-avoiding-scrolling ?\s) line)) + lines)) + lines)) + +(defun icomplete-vertical--ensure-visible-lines-inside-buffer () + "Ensure the completion list is visible in regular buffers only. +Scrolls the screen to be at least `icomplete-prospects-height' real lines +away from the bottom. Counts wrapped lines as real lines." + (unless (minibufferp) + (let* ((window-height (window-body-height)) + (current-line (count-screen-lines (window-start) (point))) + (lines-to-bottom (- window-height current-line))) + (when (< lines-to-bottom icomplete-prospects-height) + (scroll-up (- icomplete-prospects-height lines-to-bottom)))))) + +(defun icomplete-vertical--add-indicator-to-selected (comp) + "Add indicators to the selected/unselected COMP completions." + (if (and icomplete-vertical-render-prefix-indicator + (get-text-property 0 'icomplete-selected comp)) + (concat (propertize icomplete-vertical-selected-prefix-indicator + 'face 'icomplete-vertical-selected-prefix-indicator-face) + comp) + (concat (propertize icomplete-vertical-unselected-prefix-indicator + 'face 'icomplete-vertical-unselected-prefix-indicator-face) + comp))) + (cl-defun icomplete--render-vertical (comps md &aux scroll-above scroll-below (total-space ; number of mini-window lines available @@ -843,12 +951,17 @@ by `group-function''s second \"transformation\" protocol." ;; - both nil, there is no manual scroll; ;; - both non-nil, there is a healthy manual scroll that doesn't need ;; to be readjusted (user just moved around the minibuffer, for - ;; example)l + ;; example); ;; - non-nil and nil, respectively, a refiltering took place and we ;; may need to readjust them to the new filtered `comps'. + (when (and icomplete-scroll + (not icomplete--scrolled-completions) + (not icomplete--scrolled-past)) + (icomplete-vertical--ensure-visible-lines-inside-buffer)) (when (and icomplete-scroll icomplete--scrolled-completions (null icomplete--scrolled-past)) + (icomplete-vertical--ensure-visible-lines-inside-buffer) (cl-loop with preds for (comp . rest) on comps when (equal comp (car icomplete--scrolled-completions)) @@ -900,6 +1013,7 @@ by `group-function''s second \"transformation\" protocol." ;; of lines to render (cl-loop for (comp prefix suffix section) in tuples + do (setq comp (icomplete-vertical--add-indicator-to-selected comp)) when section collect (propertize section 'face 'icomplete-section) into lines-aux and count 1 into nsections-aux @@ -907,9 +1021,9 @@ by `group-function''s second \"transformation\" protocol." do (add-face-text-property 0 (length comp) 'icomplete-selected-match 'append comp) collect (concat prefix - (make-string (- max-prefix-len (length prefix)) ? ) + (make-string (max 0 (- max-prefix-len (length prefix))) ? ) (completion-lazy-hilit comp) - (make-string (- max-comp-len (length comp)) ? ) + (make-string (max 0 (- max-comp-len (length comp))) ? ) suffix) into lines-aux finally (setq lines lines-aux @@ -924,6 +1038,9 @@ by `group-function''s second \"transformation\" protocol." ((> (length scroll-above) (length scroll-below)) nsections) (t (min (ceiling nsections 2) (length scroll-above)))) lines)) + (when icomplete--in-region-buffer + (setq lines (icomplete-vertical--adjust-lines-for-column + lines icomplete--in-region-buffer completion-in-region--data))) ;; At long last, render final string return value. This may still ;; kick out lines at the end. (concat " \n" commit 04bd6497300789cd90b365299885517d92292648 Author: Po Lu Date: Sat Mar 29 22:37:39 2025 +0800 ; * admin/notes/java: Document substitutes for `goto' in Java. diff --git a/admin/notes/java b/admin/notes/java index 0bfdff339cb..9a7c925e123 100644 --- a/admin/notes/java +++ b/admin/notes/java @@ -452,6 +452,20 @@ on systems where shared object constructors are supported. See http://docs.oracle.com/en/java/javase/19/docs/specs/jni/intro.html for more details. +Java does not support `goto' statements, which it defines as reserved +identifiers but does not assign any syntatic role. If you are in a +position where you must exercise `goto' to exit a block prematurely, you +may define the block and exit it with a named `break' statement, thus: + + label: + { + int x, y = foo (); + + if (y) + break label; + x = something (); + } + OVERVIEW OF ANDROID commit 7a976d1aaf7f555146ea890cc086edefe3f8ef58 Author: Dominik Schrempf Date: Thu Mar 27 15:54:52 2025 +0100 Fix minor issues in documentation of `use-package' (Bug#77311) Copyright-paperwork-exempt: yes diff --git a/lisp/use-package/use-package-core.el b/lisp/use-package/use-package-core.el index 2f0d14255b2..c04053c22ac 100644 --- a/lisp/use-package/use-package-core.el +++ b/lisp/use-package/use-package-core.el @@ -1810,11 +1810,11 @@ Usage: :magic-fallback Form to be added to `magic-fallback-mode-alist'. :interpreter Form to be added to `interpreter-mode-alist'. -:commands Define autoloads for commands that will be defined by the - package. This is useful if the package is being lazily - loaded, and you wish to conditionally call functions in your +:commands Define autoloads for commands defined by the package. + This is useful if the package is being lazily loaded, + and you wish to conditionally call functions in your `:init' block that are defined in the package. -:autoload Similar to :commands, but it for no-interactive one. +:autoload Similar to `:commands', but used for non-interactive functions. :hook Specify hook(s) to attach this package to. :bind Bind keys, and define autoloads for the bound commands. commit f60fc1287d499e8c93857b1b96e8bd2467b22c8d Author: Stefan Kangas Date: Sat Mar 29 13:50:21 2025 +0100 Use 'hash-table-contains-p' in a few places This replaces open coded versions of the common idiom (not (eq (gethash key table 'missing) 'missing)) with (hash-table-contains-p key table) in files where we can rely on features in Emacs 31. * lisp/emacs-lisp/map.el (map-contains-key): * lisp/external-completion.el (external-completion-table): * lisp/mh-e/mh-utils.el (mh-sub-folders) (mh-remove-from-sub-folders-cache): * lisp/net/ange-ftp.el (ange-ftp-hash-entry-exists-p): * lisp/password-cache.el (password-in-cache-p, password-cache-add): * lisp/pcmpl-x.el (pcmpl-x-tlmgr-action-options): * lisp/xdg.el (xdg-mime-apps): Use 'hash-table-contains-p'. diff --git a/lisp/emacs-lisp/map.el b/lisp/emacs-lisp/map.el index 72ff5e2221d..deeeec132cf 100644 --- a/lisp/emacs-lisp/map.el +++ b/lisp/emacs-lisp/map.el @@ -403,8 +403,7 @@ If MAP is a plist, TESTFN defaults to `eq'." (cl-defmethod map-contains-key ((map hash-table) key &optional _testfn) "Return non-nil if MAP contains KEY, ignoring TESTFN." - (let ((v '(nil))) - (not (eq v (gethash key map v))))) + (hash-table-contains-p key map)) (cl-defgeneric map-some (pred map) "Return the first non-nil value from applying PRED to elements of MAP. diff --git a/lisp/external-completion.el b/lisp/external-completion.el index be978f8f605..a1aa7ec9cb6 100644 --- a/lisp/external-completion.el +++ b/lisp/external-completion.el @@ -117,11 +117,10 @@ EXPANDED-PATTERN." completion-category-defaults))) (let ((cache (make-hash-table :test #'equal))) (cl-flet ((lookup-internal (string point) - (let* ((key (cons string point)) - (probe (gethash key cache 'external--notfound))) - (if (eq probe 'external--notfound) - (puthash key (funcall lookup string point) cache) - probe)))) + (let ((key (cons string point))) + (if (hash-table-contains-p key cache) + (gethash key cache) + (puthash key (funcall lookup string point) cache))))) (lambda (string pred action) (pcase action (`metadata diff --git a/lisp/mh-e/mh-utils.el b/lisp/mh-e/mh-utils.el index 5b8c48308ae..b330f73f7d2 100644 --- a/lisp/mh-e/mh-utils.el +++ b/lisp/mh-e/mh-utils.el @@ -528,11 +528,10 @@ nested folders within them." (let* ((folder (mh-normalize-folder-name folder nil (string= folder "+/") t)) - (match (gethash folder mh-sub-folders-cache 'no-result)) - (sub-folders (cond ((eq match 'no-result) - (setf (gethash folder mh-sub-folders-cache) - (mh-sub-folders-actual folder))) - (t match)))) + (sub-folders (if (hash-table-contains-p folder mh-sub-folders-cache) + (gethash folder mh-sub-folders-cache) + (setf (gethash folder mh-sub-folders-cache) + (mh-sub-folders-actual folder))))) (if add-trailing-slash-flag (mapcar (lambda (x) (if (cdr x) (cons (concat (car x) "/") (cdr x)) x)) @@ -629,7 +628,7 @@ otherwise completion on +foo won't tell us about the option last-slash) (while (setq last-slash (mh-search-from-end ?/ parent)) (setq parent (substring parent 0 last-slash)) - (unless (eq (gethash parent mh-sub-folders-cache 'none) 'none) + (when (hash-table-contains-p parent mh-sub-folders-cache) (remhash parent mh-sub-folders-cache) (if one-ancestor-found (cl-return-from ancestor-found) diff --git a/lisp/net/ange-ftp.el b/lisp/net/ange-ftp.el index 84e170987ef..3d7ce0add48 100644 --- a/lisp/net/ange-ftp.el +++ b/lisp/net/ange-ftp.el @@ -1004,7 +1004,7 @@ or nil meaning don't change it." (defun ange-ftp-hash-entry-exists-p (key tbl) "Return whether there is an association for KEY in table TBL." - (and tbl (not (eq (gethash key tbl 'unknown) 'unknown)))) + (and tbl (hash-table-contains-p key tbl))) (defun ange-ftp-hash-table-keys (tbl) "Return a sorted list of all the active keys in table TBL, as strings." diff --git a/lisp/password-cache.el b/lisp/password-cache.el index 46c04789c00..5701ac7df66 100644 --- a/lisp/password-cache.el +++ b/lisp/password-cache.el @@ -82,8 +82,7 @@ regulate cache behavior." "Check if KEY is in the cache." (and password-cache key - (not (eq (gethash key password-data 'password-cache-no-data) - 'password-cache-no-data)))) + (hash-table-contains-p key password-data))) (defun password-read (prompt &optional key) "Read password, for use with KEY, from user, or from cache if wanted. @@ -110,8 +109,7 @@ user again." "Add password to cache. The password is removed by a timer after `password-cache-expiry' seconds." (when (and password-cache-expiry - (eq (gethash key password-data 'password-cache-no-data) - 'password-cache-no-data)) + (not (hash-table-contains-p key password-data))) (run-at-time password-cache-expiry nil #'password-cache-remove key)) diff --git a/lisp/pcmpl-x.el b/lisp/pcmpl-x.el index 578e8a362a3..dbd8600a2e7 100644 --- a/lisp/pcmpl-x.el +++ b/lisp/pcmpl-x.el @@ -121,7 +121,7 @@ (defun pcmpl-x-tlmgr-action-options (action) "Get the list of long options for ACTION." - (if (eq (gethash action pcmpl-x-tlmgr-options-cache 'missing) 'missing) + (if (not (hash-table-contains-p action pcmpl-x-tlmgr-options-cache)) (with-temp-buffer (when (zerop (call-process pcmpl-x-tlmgr-program nil t nil action "-h")) diff --git a/lisp/xdg.el b/lisp/xdg.el index 8bb5ee71457..a9f443c3d73 100644 --- a/lisp/xdg.el +++ b/lisp/xdg.el @@ -384,9 +384,8 @@ Results are cached in `xdg-mime-table'." (setq xdg-mime-table nil))) (when (null (assoc type xdg-mime-table)) (push (cons type (make-hash-table :test #'equal)) xdg-mime-table)) - (if (let ((def (make-symbol "def")) - (table (cdr (assoc type xdg-mime-table)))) - (not (eq (setq files (gethash subtype table def)) def))) + (if (let ((table (cdr (assoc type xdg-mime-table)))) + (hash-table-contains-p subtype table)) files (and files (setq files nil)) (let ((dirs (mapcar (lambda (dir) (expand-file-name "applications" dir)) commit dd0dd87e3aaf3116c400fba858cbe35ced15f04e Author: Stefan Kangas Date: Sat Mar 29 14:59:26 2025 +0100 New function 'hash-table-contains-p' This function tests whether a given key is present in a hash table. Emacs Lisp has long lacked a standard way to do this, leading users to write one of: (not (eq (gethash key table 'missing) 'missing)) or (gethash key table) This idiom is error-prone (when 'missing' or 'nil' are valid values), and it obscures intent. The new function avoids such pitfalls, improves readability, and makes the intent explicit: (hash-table-contains-p key table) The name 'hash-table-contains-p' exists in other Lisp dialects (e.g., SRFI-125), and follows the precedent of 'seq-contains-p'. Other alternatives considered include `hash-table-has-key-p` and `hash-table-key-exists-p`, but none were clearly better. This was previously discussed in 2018, and all comments were positive, but the proposed patch (implementing it in C) was never pushed: https://lists.gnu.org/r/emacs-devel/2018-02/msg00424.html * lisp/subr.el (hash-table-contains-p): New function. * lisp/emacs-lisp/shortdoc.el (hash-table): * doc/lispref/hash.texi (Other Hash): Document the new function. * test/lisp/subr-tests.el (hash-table-contains-p): New test. diff --git a/doc/lispref/hash.texi b/doc/lispref/hash.texi index f429d1512fd..56862a9d934 100644 --- a/doc/lispref/hash.texi +++ b/doc/lispref/hash.texi @@ -347,6 +347,11 @@ itself is copied---the keys and values are shared. This function returns the actual number of entries in @var{table}. @end defun +@defun hash-table-contains-p key table +This returns non-@code{nil} if there is an association for @var{key} in +@var{table}. +@end defun + @defun hash-table-test table This returns the @var{test} value that was given when @var{table} was created, to specify how to hash and compare keys. See diff --git a/etc/NEWS b/etc/NEWS index 8149e5d8c5b..33a2b3fd07a 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1786,6 +1786,10 @@ Optional arguments are provided to produce human-readable time-duration strings in a variety of formats, for example "6 months 3 weeks" or "5m 52.5s". ++++ +** New function 'hash-table-contains-p'. +This function returns non-nil if a given key is present in a hash table. + +++ ** The function 'purecopy' is now an obsolete alias for 'identity'. diff --git a/lisp/emacs-lisp/shortdoc.el b/lisp/emacs-lisp/shortdoc.el index 15898ac9687..2e826399261 100644 --- a/lisp/emacs-lisp/shortdoc.el +++ b/lisp/emacs-lisp/shortdoc.el @@ -710,6 +710,8 @@ A FUNC form can have any number of `:no-eval' (or `:no-value'), "Other Hash Table Functions" (hash-table-p :eval (hash-table-p 123)) + (hash-table-contains-p + :no-eval (hash-table-contains-p 'key table)) (copy-hash-table :no-eval (copy-hash-table table) :result-string "#s(hash-table ...)") diff --git a/lisp/subr.el b/lisp/subr.el index af9289c0216..8c1e6f657a6 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -7392,6 +7392,13 @@ TRIM-LEFT and TRIM-RIGHT default to \"[ \\t\\n\\r]+\"." (declare (important-return-value t)) (string-trim-left (string-trim-right string trim-right) trim-left)) +(defsubst hash-table-contains-p (key table) + "Return non-nil if TABLE has an element with KEY." + (declare (side-effect-free t) + (important-return-value t)) + (let ((missing (make-symbol "missing"))) + (not (eq (gethash key table missing) missing)))) + ;; The initial anchoring is for better performance in searching matches. (defconst regexp-unmatchable "\\`a\\`" "Standard regexp guaranteed not to match any string at all.") diff --git a/test/lisp/subr-tests.el b/test/lisp/subr-tests.el index 3459a653283..25f1b3403ca 100644 --- a/test/lisp/subr-tests.el +++ b/test/lisp/subr-tests.el @@ -1489,5 +1489,17 @@ final or penultimate step during initialization.")) (props-out (object-intervals out))) (should (equal props-out props-in)))))))) +(ert-deftest hash-table-contains-p () + (let ((h (make-hash-table))) + (should-not (hash-table-contains-p 'problems h)) + (should-not (hash-table-contains-p 'cookie h)) + (should-not (hash-table-contains-p 'milk h)) + (puthash 'problems 99 h) + (puthash 'cookie nil h) + (puthash 'milk 'missing h) + (should (hash-table-contains-p 'problems h)) + (should (hash-table-contains-p 'cookie h)) + (should (hash-table-contains-p 'milk h)))) + (provide 'subr-tests) ;;; subr-tests.el ends here commit 14cf4d538350fd2b1eda35101f5bb585f55e4659 Author: Stefan Kangas Date: Sat Mar 29 12:34:37 2025 +0100 Remove redundant constant nil argument to gethash * lisp/cedet/ede/files.el (ede--directory-project-from-hash): * lisp/emacs-lisp/edebug.el (edebug-unwrap*): * lisp/emacs-lisp/testcover.el (testcover--copy-object1): * lisp/net/zeroconf.el (zeroconf-get-service, zeroconf-resolve-service) (zeroconf-register-service-browser, zeroconf-service-browser-handler) (zeroconf-register-service-resolver): * lisp/url/url-history.el (url-have-visited-url): Remove redundant constant nil argument to gethash. diff --git a/lisp/cedet/ede/files.el b/lisp/cedet/ede/files.el index 63ba30ebcdd..046acbb147e 100644 --- a/lisp/cedet/ede/files.el +++ b/lisp/cedet/ede/files.el @@ -282,7 +282,7 @@ Do this whenever a new project is created, as opposed to loaded." (defun ede--directory-project-from-hash (dir) "If there is an already loaded project for DIR, return it from the hash." (setq dir (expand-file-name dir)) - (gethash dir ede-project-directory-hash nil)) + (gethash dir ede-project-directory-hash)) (defun ede--directory-project-add-description-to-hash (dir desc) "Add to the EDE project hash DIR associated with DESC." diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el index 8a10f26a7b4..284e3acd959 100644 --- a/lisp/emacs-lisp/edebug.el +++ b/lisp/emacs-lisp/edebug.el @@ -1288,7 +1288,7 @@ infinite loops when the code/environment contains a circular object.") (while (not (eq sexp (setq sexp (edebug-unwrap sexp))))) (cond ((consp sexp) - (or (gethash sexp edebug--unwrap-cache nil) + (or (gethash sexp edebug--unwrap-cache) (let ((remainder sexp) (current (cons nil nil))) (prog1 current @@ -1303,8 +1303,8 @@ infinite loops when the code/environment contains a circular object.") (setf (cdr current) (edebug-unwrap* remainder)) nil) - ((gethash remainder edebug--unwrap-cache nil) - (setf (cdr current) (gethash remainder edebug--unwrap-cache nil)) + ((gethash remainder edebug--unwrap-cache) + (setf (cdr current) (gethash remainder edebug--unwrap-cache)) nil) (t (setq current (setf (cdr current) (cons nil nil))))))))))) diff --git a/lisp/emacs-lisp/testcover.el b/lisp/emacs-lisp/testcover.el index b007e3c9091..eb78768f0e6 100644 --- a/lisp/emacs-lisp/testcover.el +++ b/lisp/emacs-lisp/testcover.el @@ -296,7 +296,7 @@ iteratively copies its cdr. When VECP is non-nil, copy vectors as well as conses." (if (and (atom obj) (or (not vecp) (not (vectorp obj)))) obj - (let ((copy (gethash obj hash-table nil))) + (let ((copy (gethash obj hash-table))) (unless copy (cond ((consp obj) @@ -315,7 +315,7 @@ vectors as well as conses." (testcover--copy-object1 rest vecp hash-table)) nil) ((gethash rest hash-table nil) - (setf (cdr current) (gethash rest hash-table nil)) + (setf (cdr current) (gethash rest hash-table)) nil) (t (setq current (setf (cdr current) (cons nil nil))))))))) diff --git a/lisp/net/zeroconf.el b/lisp/net/zeroconf.el index faa547ddd40..0734e9b94fb 100644 --- a/lisp/net/zeroconf.el +++ b/lisp/net/zeroconf.el @@ -380,7 +380,7 @@ TYPE. The resulting list has the format (INTERFACE PROTOCOL NAME TYPE DOMAIN FLAGS)." ;; Due to the service browser, all known services are kept in ;; `zeroconf-services-hash'. - (gethash (concat name "/" type) zeroconf-services-hash nil)) + (gethash (concat name "/" type) zeroconf-services-hash)) (defvar dbus-debug) @@ -396,7 +396,7 @@ TYPE. The resulting list has the format (or ;; Check whether we know this service already. - (gethash key zeroconf-resolved-services-hash nil) + (gethash key zeroconf-resolved-services-hash) ;; Resolve the service. We don't propagate D-Bus errors. (dbus-ignore-errors @@ -552,7 +552,7 @@ DOMAIN is nil, the local domain is used." (defun zeroconf-register-service-browser (type) "Register a service browser at the Avahi daemon." - (or (gethash type zeroconf-path-avahi-service-browser-hash nil) + (or (gethash type zeroconf-path-avahi-service-browser-hash) (puthash type (dbus-call-method :system zeroconf-service-avahi zeroconf-path-avahi @@ -573,8 +573,8 @@ DOMAIN is nil, the local domain is used." (let* ((name (zeroconf-service-name val)) (type (zeroconf-service-type val)) (key (concat name "/" type)) - (ahook (gethash type zeroconf-service-added-hooks-hash nil)) - (rhook (gethash type zeroconf-service-removed-hooks-hash nil))) + (ahook (gethash type zeroconf-service-added-hooks-hash)) + (rhook (gethash type zeroconf-service-removed-hooks-hash))) (cond ((string-equal (dbus-event-member-name last-input-event) "ItemNew") ;; Add new service. @@ -590,7 +590,7 @@ DOMAIN is nil, the local domain is used." (defun zeroconf-register-service-resolver (name type) "Register a service resolver at the Avahi daemon." (let ((key (concat name "/" type))) - (or (gethash key zeroconf-path-avahi-service-resolver-hash nil) + (or (gethash key zeroconf-path-avahi-service-resolver-hash) (puthash key (dbus-call-method :system zeroconf-service-avahi zeroconf-path-avahi diff --git a/lisp/url/url-history.el b/lisp/url/url-history.el index d0506295f9c..825e259d330 100644 --- a/lisp/url/url-history.el +++ b/lisp/url/url-history.el @@ -154,7 +154,7 @@ user for what type to save as." (defun url-have-visited-url (url) (url-do-setup) - (gethash url url-history-hash-table nil)) + (gethash url url-history-hash-table)) (defun url-completion-function (string predicate function) (declare (obsolete url-history-hash-table "26.1")) commit bfabae993113aa0a35298950355333497bc0d485 Author: Eli Zaretskii Date: Sat Mar 29 09:16:51 2025 -0400 ; * lisp/treesit-x.el : Call 'treesit-declare-unavailable-functions'. diff --git a/lisp/treesit-x.el b/lisp/treesit-x.el index cd2a1f8845b..881e11e4e7a 100644 --- a/lisp/treesit-x.el +++ b/lisp/treesit-x.el @@ -39,6 +39,8 @@ (require 'treesit) +(treesit-declare-unavailable-functions) + ;;; Define treesit generic mode ;;;###autoload commit 988111937b44433490d20593c2a1e543575ae940 Author: Eli Zaretskii Date: Sat Mar 29 08:54:30 2025 -0400 ; Fix a merge snafu. diff --git a/doc/emacs/ack.texi b/doc/emacs/ack.texi index a3036d52990..dd783da35a6 100644 --- a/doc/emacs/ack.texi +++ b/doc/emacs/ack.texi @@ -1301,14 +1301,9 @@ Tibor @v{S}imko and Milan Zamazal wrote @file{slovak.el}, support for editing text in Slovak language. @item -<<<<<<< HEAD -Jo@~ao T@'avora wrote many improvements for @file{flymake.el}, an -on-the-fly syntax-checking package. -======= João Távora wrote many improvements for @file{flymake.el}, an on-the-fly syntax-checking package. He also wrote @file{eglot.el}, a language server protocol (LSP) client that was added in Emacs 29. ->>>>>>> 9a07d64f5c734f08baa741d763640943a7b407e7 @item Luc Teirlinck wrote @file{help-at-pt.el}, providing local help through diff --git a/doc/lispref/functions.texi b/doc/lispref/functions.texi index 7aa758ae613..7fb3678fa49 100644 --- a/doc/lispref/functions.texi +++ b/doc/lispref/functions.texi @@ -2894,22 +2894,12 @@ argument of type @var{string}, and returns one of the symbols For description of additional types, see @ref{Lisp Data Types}). -<<<<<<< HEAD -Declaring a function with an incorrect type produces undefined behavior -and could lead to unexpected results or might even crash Emacs when -native-compiled code is loaded, if it was compiled with -@code{compilation-safety} level of zero (@pxref{compilation-safety}). -Note also that when redefining (or advising) a type-declared function, -the replacement should respect the original signature to avoid such -undefined behavior. -======= Declaring a function with an incorrect type causes undefined behavior. If such a function is natively compiled with @code{compilation-safety} set to zero (@pxref{compilation-safety}), this may result in incorrect execution or even Emacs crashing when the compiled code is loaded. Redefining or advising a type-declared function must preserve the original signature to avoid these issues. ->>>>>>> 9a07d64f5c734f08baa741d763640943a7b407e7 @item no-font-lock-keyword This is valid for macros only. Macros with this declaration are diff --git a/doc/misc/cc-mode.texi b/doc/misc/cc-mode.texi index 4528ea42151..c4fabf30235 100644 --- a/doc/misc/cc-mode.texi +++ b/doc/misc/cc-mode.texi @@ -4690,7 +4690,7 @@ the positions of the type and the enclosing class's brace. 5. c; 6. @}; @end example - + @ssindex template-args-cont Template definitions introduce yet another syntactic symbol: commit 7870a9f9b61b28be2c3307886599aefe0ba66645 Merge: 3e228c9eea5 9a07d64f5c7 Author: Eli Zaretskii Date: Sat Mar 29 08:53:31 2025 -0400 Merge from origin/emacs-30 9a07d64f5c7 ; Minor update in ack.texi b3881ac443f ; Improve type specifier documentation 6a3e2b88d26 ; Improve documentation of "function types" commit 3e228c9eea56cf25234b99e1411114baa732f53f Author: shipmints Date: Fri Mar 21 13:59:03 2025 -0400 'uniquify' user option setters and automatic buffer refresh (bug#77157) Use 'customize', 'setopt', or 'uniquify--set-option' instead of 'setq' to benefit. * lisp/uniquify.el (uniquify--buffer-refresh): New function. (uniquify--set-option): New function. (uniquify-buffer-name-style): Add :initialize and :set forms. (uniquify-ignore-buffers-re): Add :initialize and :set forms. (uniquify-min-dir-content): Add :initialize and :set forms. (uniquify-separator): Add :initialize and :set forms. (uniquify-strip-common-suffix): Add :initialize and :set forms. (uniquify-dirname-transform): Add :initialize and :set forms. diff --git a/lisp/uniquify.el b/lisp/uniquify.el index 358ae6af651..1f5bdcd6224 100644 --- a/lisp/uniquify.el +++ b/lisp/uniquify.el @@ -89,6 +89,21 @@ "Unique buffer names dependent on file name." :group 'files) +(defun uniquify--buffer-refresh () + "Refreshes all `uniquify'-managed buffers with current options." + (when uniquify-buffer-name-style + (save-current-buffer + (dolist (buffer (buffer-list)) + (set-buffer buffer) + (when uniquify-managed + (rename-buffer (uniquify-buffer-base-name) 'unique)))))) + +(defun uniquify--set-option (variable value) + "Call in `defcustom' :set keyword when `uniquify--buffer-refresh' is needed. +VARIABLE is set to VALUE if `uniquify' is loaded." + (when (featurep 'uniquify) ; in case `uniquify' was unloaded + (set-default variable value) + (uniquify--buffer-refresh))) (defcustom uniquify-buffer-name-style 'post-forward-angle-brackets "How to construct unique buffer names for files with the same base name. @@ -113,14 +128,21 @@ post-forward-angle-brackets could be: (concat base \"<\" (mapconcat #\\='identity extra-string \"/\") \">\")) The \"mumble\" part may be stripped as well, depending on the -setting of `uniquify-strip-common-suffix'. For more options that -you can set, browse the `uniquify' custom group." +setting of `uniquify-strip-common-suffix'. + +Setting this variable directly will not usually take effect; use either +\\[customize] or `setopt', or call `uniquify--set-option'; otherwise +reload your buffers. + +For more options that you can set, browse the `uniquify' custom group." :type '(radio (const forward) (const reverse) (const post-forward) (const post-forward-angle-brackets) (function :tag "Other") (const :tag "numeric suffixes" nil)) + :initialize #'custom-initialize-default + :set #'uniquify--set-option :version "24.4" :require 'uniquify) @@ -135,20 +157,37 @@ you can set, browse the `uniquify' custom group." "Regular expression matching buffer names that should not be uniquified. For instance, set this to \"^draft-[0-9]+$\" to avoid having uniquify rename draft buffers even if `uniquify-after-kill-buffer-flag' is -non-nil and the visited file name isn't the same as that of the buffer." - :type '(choice (const :tag "Uniquify all buffers" nil) regexp)) +non-nil and the visited file name isn't the same as that of the buffer. + +Setting this variable directly will not usually take effect; use either +\\[customize] or `setopt', or call `uniquify--set-option'; otherwise +reload your buffers." + :type '(choice (const :tag "Uniquify all buffers" nil) regexp) + :initialize #'custom-initialize-default + :set #'uniquify--set-option) (defcustom uniquify-min-dir-content 0 - "Minimum number of directory name components included in buffer name." - :type 'integer) + "Minimum number of directory name components included in buffer name. +Setting this variable directly will not usually take effect; use either +\\[customize] or `setopt', or call `uniquify--set-option'; otherwise +reload your buffers." + :type 'integer + :initialize #'custom-initialize-default + :set #'uniquify--set-option) (defcustom uniquify-separator nil "String separator for buffer name components. When `uniquify-buffer-name-style' is `post-forward', separates base file name from directory part in buffer names (default \"|\"). When `uniquify-buffer-name-style' is `reverse', separates all -file name components (default \"\\\")." - :type '(choice (const nil) string)) +file name components (default \"\\\"). + +Setting this variable directly will not usually take effect; use either +\\[customize] or `setopt', or call `uniquify--set-option'; otherwise +reload your buffers." + :type '(choice (const nil) string) + :initialize #'custom-initialize-default + :set #'uniquify--set-option) (define-obsolete-variable-alias 'uniquify-trailing-separator-p 'uniquify-trailing-separator-flag "31.1") @@ -166,8 +205,14 @@ variable is ignored." "If non-nil, strip common directory suffixes of conflicting files. E.g. if you open /a1/b/c/d and /a2/b/c/d, the buffer names will say \"d|a1\" and \"d|a2\" instead of \"d|a1/b/c\" and \"d|a2/b/c\". -This can be handy when you have deep parallel hierarchies." - :type 'boolean) +This can be handy when you have deep parallel hierarchies. + +Setting this variable directly will not usually take effect; use either +\\[customize] or `setopt', or call `uniquify--set-option'; otherwise +reload your buffers." + :type 'boolean + :initialize #'custom-initialize-default + :set #'uniquify--set-option) (defvar uniquify-list-buffers-directory-modes '(dired-mode cvs-mode vc-dir-mode) "List of modes for which uniquify should obey `list-buffers-directory'. @@ -192,11 +237,17 @@ actually exist in the filesystem); the components of this file name will then be used to uniquify the buffer's name. To include components from the `project-name' of the buffer, set -this variable to `project-uniquify-dirname-transform'." +this variable to `project-uniquify-dirname-transform'. + +Setting this variable directly will not usually take effect; use either +\\[customize] or `setopt', or call `uniquify--set-option'; otherwise +reload your buffers." :type `(choice (function-item :tag "Use directory name as-is" identity) (function-item :tag "Include project name in directory name" ,#'project-uniquify-dirname-transform) function) + :initialize #'custom-initialize-default + :set #'uniquify--set-option :version "30.1" :group 'uniquify) commit 7a8e2e572902094ec7f7e3839d0224a3408e196a Author: Vincenzo Pupillo Date: Sat Mar 22 12:30:30 2025 +0100 Fix compiler warnings in mhtml-ts-mode.el (bug#77017). * lisp/textmodes/mhtml-ts-mode.el: Added variable and function declarations to prevent compiler warnings. (mhtml-ts-mode): Require 'html-ts-mode' after checking that the html parser is available. diff --git a/lisp/textmodes/mhtml-ts-mode.el b/lisp/textmodes/mhtml-ts-mode.el index 5c4f90cd193..22c0455a4ee 100644 --- a/lisp/textmodes/mhtml-ts-mode.el +++ b/lisp/textmodes/mhtml-ts-mode.el @@ -50,13 +50,23 @@ ;;; Code: (require 'treesit) -(require 'html-ts-mode) (require 'css-mode) ;; for embed css into html (require 'js) ;; for embed javascript into html (eval-when-compile (require 'rx)) +;; Prevent compile warnings. +(defvar html-ts-mode-indent-offset) +(defvar html-ts-mode--treesit-font-lock-feature-list) +(defvar html-ts-mode--font-lock-settings) +(defvar html-ts-mode--treesit-things-settings) +(defvar html-ts-mode--treesit-defun-type-regexp) +(defvar html-ts-mode--indent-rules) +(defvar html-ts-mode--treesit-simple-imenu-settings) +(declare-function html-ts-mode--outline-predicate "html-ts-mode.el") +(declare-function html-ts-mode--defun-name "html-ts-mode.el") + ;; This tells the byte-compiler where the functions are defined. ;; Is only needed when a file needs to be able to byte-compile ;; in a Emacs not built with tree-sitter library. @@ -447,12 +457,14 @@ Calls REPORT-FN directly. Requires tidy." "Major mode for editing HTML with embedded JavaScript and CSS. Powered by tree-sitter." (if (not (and - (treesit-ready-p 'html) - (treesit-ready-p 'javascript) - (treesit-ready-p 'css))) + (treesit-ready-p 'html t) + (treesit-ready-p 'javascript t) + (treesit-ready-p 'css t))) (error "Tree-sitter parsers for HTML isn't available. You can install the parsers with M-x `mhtml-ts-mode-install-parsers'") + (require 'html-ts-mode) + ;; When an language is embedded, you should initialize some variable ;; just like it's done in the original mode. commit 99ff59bd66cc07df40b14cb0a8acf22d440581e5 Author: Vincenzo Pupillo Date: Fri Mar 14 21:11:22 2025 +0100 PHP should be in the PATH, either locally or remotely. (bug#76242). * lisp/progmodes/php-ts-mode.el (php-ts-mode-php-default-executable): Renamed from 'php-ts-mode-php-executable'. (php-ts-mode--executable): New function that returns the absolute filename of the PHP executable, local or remote, based on 'default-directory'. (php-ts-mode--anchor-prev-sibling): Replaced 'when-let' with “when-let*.” (php-ts-mode--indent-defun): Replaced 'when-let' with 'when-let*'. (php-ts-mode-run-php-webserver): Use the new function (php-ts-mode-php-default-executable). (run-php): Use the new function (php-ts-mode-php-default-executable). diff --git a/lisp/progmodes/php-ts-mode.el b/lisp/progmodes/php-ts-mode.el index 56c15dad36f..b626a19a0de 100644 --- a/lisp/progmodes/php-ts-mode.el +++ b/lisp/progmodes/php-ts-mode.el @@ -134,12 +134,16 @@ Works like `css--fontify-region'." :type 'boolean :safe 'booleanp) -(defcustom php-ts-mode-php-executable (or (executable-find "php") "/usr/bin/php") - "The location of PHP executable." +(defcustom php-ts-mode-php-default-executable (or (executable-find "php") "/usr/bin/php") + "The default PHP executable." :tag "PHP Executable" :version "30.1" :type 'file) +(defvar-local php-ts-mode-alternative-php-program-name nil + "An alternative to the usual `php' program name. +In non-nil, `php-ts-mode--executable' try to find this executable.") + (defcustom php-ts-mode-php-config nil "The location of php.ini file. If nil the default one is used to run the embedded webserver or @@ -270,7 +274,7 @@ Calls REPORT-FN directly." :noquery t :connection-type 'pipe :buffer (generate-new-buffer " *php-ts-mode-flymake*") - :command `(,php-ts-mode-php-executable + :command `(,(php-ts-mode--executable) "-l" "-d" "display_errors=0") :sentinel (lambda (proc _event) @@ -306,6 +310,16 @@ Calls REPORT-FN directly." ;;; Utils +(defun php-ts-mode--executable () + "Return the absolute filename of the php executable. +If the `default-directory' is remote, search on a remote host, otherwise +it searches locally. If `php-ts-mode-alternative-php-program-name' is +non-zero, it searches for this program instead of the usual `php'. +If the search fails, it returns `php-ts-mode-php-default-executable'." + (or (executable-find + (or php-ts-mode-alternative-php-program-name "php") t) + php-ts-mode-php-default-executable)) + (defun php-ts-mode--get-indent-style () "Helper function to set indentation style. MODE can be `psr2', `pear', `drupal', `wordpress', `symfony', `zend'." @@ -595,7 +609,7 @@ doesn't have a child. PARENT is NODE's parent, BOL is the beginning of non-whitespace characters of the current line." - (when-let ((prev-sibling + (when-let* ((prev-sibling (or (treesit-node-prev-sibling node t) (treesit-node-prev-sibling (treesit-node-first-child-for-pos parent bol) t) @@ -1236,7 +1250,7 @@ Return nil if the NODE has no field “name” or if NODE is not a defun node." "Indent the current top-level declaration syntactically. `treesit-defun-type-regexp' defines what constructs to indent." (interactive "*") - (when-let ((orig-point (point-marker)) + (when-let* ((orig-point (point-marker)) (node (treesit-defun-at-point))) (indent-region (treesit-node-start node) (treesit-node-end node)) @@ -1613,7 +1627,7 @@ for PORT, HOSTNAME, DOCUMENT-ROOT and ROUTER-SCRIPT." (message "Run PHP built-in web server with args %s into buffer %s" (string-join args " ") buf-name) - (apply #'make-comint name php-ts-mode-php-executable nil args)) + (apply #'make-comint name (php-ts-mode--executable) nil args)) (funcall (if (called-interactively-p 'interactive) #'display-buffer #'get-buffer) buf-name))) @@ -1677,18 +1691,19 @@ Prompt for CMD if `php-ts-mode-php-executable' is nil. Optional CONFIG, if supplied, is the php.ini file to use." (interactive (when current-prefix-arg (list - (read-string "Run PHP: " php-ts-mode-php-executable) + (read-string "Run PHP: " (php-ts-mode--executable)) (expand-file-name (read-file-name "With config: " php-ts-mode-php-config))))) - (let ((buffer (get-buffer-create php-ts-mode-inferior-php-buffer)) - (cmd (or - cmd - php-ts-mode-php-executable - (read-string "Run PHP: " php-ts-mode-php-executable))) - (config (or - config - (and php-ts-mode-php-config - (expand-file-name php-ts-mode-php-config))))) + (let* ((php-prog (php-ts-mode--executable)) + (buffer (get-buffer-create php-ts-mode-inferior-php-buffer)) + (cmd (or + cmd + php-prog + (read-string "Run PHP: " php-prog))) + (config (or + config + (and php-ts-mode-php-config + (expand-file-name php-ts-mode-php-config))))) (unless (comint-check-proc buffer) (with-current-buffer buffer (inferior-php-ts-mode-startup cmd config) commit d94d6c0f02f90ad099b926ecccfea2fe1d23659e Author: Eli Zaretskii Date: Sat Mar 29 14:02:45 2025 +0300 ; * etc/NEWS: Remove stray characters. diff --git a/etc/NEWS b/etc/NEWS index 605d4049ada..8149e5d8c5b 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1672,7 +1672,7 @@ according to syntax defined by the grammar. This mode automatically close block comment, typing `block-comment-start' closes it inserting their corresponding `block-comment-end'. Thus, allows closing block comments for major -modes ​​that support it, such as: c-mode, c++-mode, java-mode, js-mode, +modes that support it, such as: c-mode, c++-mode, java-mode, js-mode, css-mode, and derived: html-mode, mhtml-mode, xml-mode and nxml-mode, pascal-mode, lua-ts-mode, lisp-mode and common-lisp-mode commit e9a07417ab280ea627594fa4328c5a0b2de6fd7c Author: Eli Zaretskii Date: Sat Mar 29 14:01:35 2025 +0300 ; Fix last change (bug#77081) * lisp/electric.el (electric-block-comment-mode): Fix whitespace. * etc/NEWS: Move entry to its proper place; fix punctuation. diff --git a/etc/NEWS b/etc/NEWS index 687beda0f21..605d4049ada 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -113,17 +113,6 @@ If you have been using these variables in Lisp code (for example, in font-lock rules), simply quote the symbol, to use the face directly instead of its now-obsolete variable. -** New minor mode 'electric-block-comment-mode' -This mode automatically close block comment, typing `block-comment-start' -closes it inserting their corresponding `block-comment-end'. -Thus, allows closing block comments for major modes ​​that support it, -such as: -- c-mode, c++-mode, java-mode, js-mode, css-mode, and derived -- html-mode, mhtml-mode, xml-mode and nxml-mode -- pascal-mode -- lua-ts-mode -- lisp-mode and common-lisp-mode - ** Network Security Manager (NSM) is now more strict. *** NSM warns about TLS 1.1 by default. @@ -1679,6 +1668,14 @@ Visiting a file in such mode ask for confirmation before installing its tree-sitter grammar. Then it highlights the visited file according to syntax defined by the grammar. +** New minor mode 'electric-block-comment-mode'. +This mode automatically close block comment, typing +`block-comment-start' closes it inserting their corresponding +`block-comment-end'. Thus, allows closing block comments for major +modes ​​that support it, such as: c-mode, c++-mode, java-mode, js-mode, +css-mode, and derived: html-mode, mhtml-mode, xml-mode and nxml-mode, +pascal-mode, lua-ts-mode, lisp-mode and common-lisp-mode + * Incompatible Lisp Changes in Emacs 31.1 diff --git a/lisp/electric.el b/lisp/electric.el index 86c01438e9a..da5fa973757 100644 --- a/lisp/electric.el +++ b/lisp/electric.el @@ -758,8 +758,10 @@ corresponding `block-comment-end'." :group 'electricity :version "31.1" (if electric-block-comment-mode - (add-hook 'post-self-insert-hook #'electric-block-comment-post-self-insert-function 10 t) - (remove-hook 'post-self-insert-hook #'electric-block-comment-post-self-insert-function t))) + (add-hook 'post-self-insert-hook + #'electric-block-comment-post-self-insert-function 10 t) + (remove-hook 'post-self-insert-hook + #'electric-block-comment-post-self-insert-function t))) (provide 'electric) commit 989f9f01f731c0dd0382bad50f1c45894d69c3ea Author: Elías Gabriel Pérez Date: Mon Mar 17 12:56:52 2025 -0600 New minor mode: `electric-block-comment-mode' This minor lets you automatically closing block comments after typing `block-comment-start'. Thus, typing "/*" in c-mode and its derivatives automatically inserts "*/". (Bug#77081) * etc/NEWS: Add minor-mode item. * lisp/electric.el (electric-block-comment-post-self-insert-function): New function. (electric-block-comment-mode): New minor mode definition. diff --git a/etc/NEWS b/etc/NEWS index f9ee001294f..687beda0f21 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -113,6 +113,17 @@ If you have been using these variables in Lisp code (for example, in font-lock rules), simply quote the symbol, to use the face directly instead of its now-obsolete variable. +** New minor mode 'electric-block-comment-mode' +This mode automatically close block comment, typing `block-comment-start' +closes it inserting their corresponding `block-comment-end'. +Thus, allows closing block comments for major modes ​​that support it, +such as: +- c-mode, c++-mode, java-mode, js-mode, css-mode, and derived +- html-mode, mhtml-mode, xml-mode and nxml-mode +- pascal-mode +- lua-ts-mode +- lisp-mode and common-lisp-mode + ** Network Security Manager (NSM) is now more strict. *** NSM warns about TLS 1.1 by default. diff --git a/lisp/electric.el b/lisp/electric.el index 39e13e1ca0c..86c01438e9a 100644 --- a/lisp/electric.el +++ b/lisp/electric.el @@ -731,6 +731,36 @@ use `electric-quote-local-mode'." (setq-default electric-quote-mode nil) ; But keep it globally disabled. ))) +;;; Electric comment block + +(defun electric-block-comment-post-self-insert-function () + "Function that `electric-block-comment' adds to `post-self-insert-hook'. +This closes block comment with `block-comment-end' when `block-comment-start' +is typed." + (when (and block-comment-start block-comment-end + ;; Check if we are exactly behind a `block-comment-start' + (save-excursion + (save-match-data + (re-search-backward (regexp-quote block-comment-start) + (- (point) (length block-comment-start)) + t))) + ;; And if there is not anything front us + (looking-at-p (concat "[^[:space:]]"))) + (insert " ") + (save-excursion + (insert (concat " " block-comment-end))))) + +(define-minor-mode electric-block-comment-mode + "Toggle automatic closing of block comments (Electric Block Comment mode). + +When enabled, typing `block-comment-start' closes it inserting their +corresponding `block-comment-end'." + :group 'electricity + :version "31.1" + (if electric-block-comment-mode + (add-hook 'post-self-insert-hook #'electric-block-comment-post-self-insert-function 10 t) + (remove-hook 'post-self-insert-hook #'electric-block-comment-post-self-insert-function t))) + (provide 'electric) ;;; electric.el ends here commit 2dd871a358e5aeea7ea343e06497760ac36464cc Author: Eli Zaretskii Date: Sat Mar 29 13:52:31 2025 +0300 ; * lisp/emacs-lisp/eldoc.el (eldoc-help-at-pt): Add :version tag (bug#77227). diff --git a/lisp/emacs-lisp/eldoc.el b/lisp/emacs-lisp/eldoc.el index 2b5d5cc0c8d..9e193580106 100644 --- a/lisp/emacs-lisp/eldoc.el +++ b/lisp/emacs-lisp/eldoc.el @@ -143,7 +143,8 @@ is only skipped if the documentation needs to be truncated there." This setting is an alternative to `help-at-pt-display-when-idle'. If the value is non-nil, `eldoc-show-help-at-pt' will show help-at-point via Eldoc." - :type 'boolean) + :type 'boolean + :version "31.1") (defface eldoc-highlight-function-argument '((t (:inherit bold))) commit ab71699e5f2502aff6c65dd195611cfbbe2f2255 Author: Daniel Mendler Date: Sat Mar 22 10:29:45 2025 +0100 New Eldoc function `eldoc-show-help-at-pt' Show `help-at-pt' string via Eldoc as an alternative to the `help-at-pt-display-when-idle' timer. The help-at-pt timer competes with Eldoc for the echo area, such that the two mechanisms do not work well together. Therefore when using Eldoc, the setting `eldoc-help-at-pt' may be preferable. * lisp/emacs-lisp/eldoc.el (eldoc-help-at-pt): New customization option. (eldoc-show-help-at-pt): New Eldoc function. (eldoc-documentation-functions): Register the new function. * lisp/help-at-pt.el (help-at-pt-display-when-idle): Mention `eldoc-help-at-pt' in the docstring. * doc/emacs/help.texi: Document `eldoc-help-at-pt'. * etc/NEWS: Announce the change. (Bug#77169) diff --git a/doc/emacs/help.texi b/doc/emacs/help.texi index 5c2eabb02d6..6ea7b5783c2 100644 --- a/doc/emacs/help.texi +++ b/doc/emacs/help.texi @@ -857,9 +857,11 @@ over the active text displays the help text as a @dfn{tooltip}. @kindex C-h . @findex display-local-help @vindex help-at-pt-display-when-idle +@vindex eldoc-help-at-pt On terminals that don't support mouse-tracking, you can display the help text for active buffer text at point by typing @kbd{C-h .} (@code{display-local-help}). This shows the help text in the echo area. To display help text automatically whenever it is available at point, set the variable @code{help-at-pt-display-when-idle} to -@code{t}. +@code{t}. If you use Eldoc, set the variable @code{eldoc-help-at-pt} +to @code{t} instead. diff --git a/etc/NEWS b/etc/NEWS index fea533d0d20..f9ee001294f 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -429,6 +429,11 @@ need to set it with 'setopt' for it to take an effect. If the docstring doesn't already mention 'setopt', the 'describe-variable' command will now add a note about this automatically. ++++ +** New user option 'eldoc-help-at-pt' to show help at point via Eldoc. +When enabled, display the 'help-at-pt-kbd-string' via Eldoc. This +setting is an alternative to 'help-at-pt-display-when-idle'. + * Editing Changes in Emacs 31.1 diff --git a/lisp/emacs-lisp/eldoc.el b/lisp/emacs-lisp/eldoc.el index 85fb6c780e2..2b5d5cc0c8d 100644 --- a/lisp/emacs-lisp/eldoc.el +++ b/lisp/emacs-lisp/eldoc.el @@ -138,6 +138,13 @@ is only skipped if the documentation needs to be truncated there." (const :tag "Skip echo area if truncating" maybe)) :version "28.1") +(defcustom eldoc-help-at-pt nil + "If non-nil, show `help-at-pt-kbd-string' at point via Eldoc. +This setting is an alternative to `help-at-pt-display-when-idle'. If +the value is non-nil, `eldoc-show-help-at-pt' will show help-at-point +via Eldoc." + :type 'boolean) + (defface eldoc-highlight-function-argument '((t (:inherit bold))) "Face used for the argument at point in a function's argument list. @@ -410,7 +417,7 @@ Also store it in `eldoc-last-message' and return that value." (overlay-end show-paren--overlay))))))) -(defvar eldoc-documentation-functions nil +(defvar eldoc-documentation-functions (list #'eldoc-show-help-at-pt) "Hook of functions that produce doc strings. A doc string is typically relevant if point is on a function-like @@ -957,6 +964,12 @@ the docstrings eventually produced, using (setq eldoc--last-request-state token) (eldoc--invoke-strategy nil)))))) +(defun eldoc-show-help-at-pt (&rest _) + "Show help at point via Eldoc if `eldoc-help-at-pt' is non-nil. +Intended for `eldoc-documentation-functions' (which see)." + (when-let* ((help (and eldoc-help-at-pt (help-at-pt-kbd-string)))) + (format "Help: %s" (substitute-command-keys help)))) + ;; This section only affects ElDoc output to the echo area, as in ;; `eldoc-display-in-echo-area'. diff --git a/lisp/help-at-pt.el b/lisp/help-at-pt.el index 68054016dc5..094f2b788fe 100644 --- a/lisp/help-at-pt.el +++ b/lisp/help-at-pt.el @@ -191,7 +191,12 @@ list of properties through Custom will set the timer, thus enabling buffer local values. It sets the actual value to nil. Thus, Custom distinguishes between a nil value and other values that disable the feature, which Custom identifies with `never'. -The default is `never'." +The default is `never'. + +Eldoc uses the echo area to display documentation. As such it +conflicts with `help-at-pt-display-when-idle' due to the use of +the echo area. If you use Eldoc, consider setting +`eldoc-help-at-pt' instead." :group 'help-at-pt :type '(choice (const :tag "Always" :format "%t\n%h" commit b832d37410c955b30adfb89e17339e406eeefa01 Author: Jens Schmidt Date: Sat Mar 8 18:13:54 2025 +0100 Improve message handling on server stop * lisp/server.el (server-stop): Use a clearer signal message if there is an existing, external Emacs server. (server-start): Use a different warning if one attempts to only stop (and not restart) an external server. (server-unload-function): Silently stop the server if unloading its library. (Bug#76870) diff --git a/lisp/server.el b/lisp/server.el index a49787e3498..4415c45971e 100644 --- a/lisp/server.el +++ b/lisp/server.el @@ -673,7 +673,7 @@ anyway." (ignore-errors (delete-directory (file-name-directory server-file)))))) (signal 'server-running-external - (list (format "There is an existing Emacs server, named %S" + (list (format "The existing Emacs server, called \"%s\", could not be stopped." server-name)))) ;; If this Emacs already had a server, clear out associated status. (while server-clients @@ -725,16 +725,27 @@ the `server-process' variable." (when (server-stop) (message (if leave-dead "Stopped server" "Restarting server")))) (server-running-external - (display-warning - 'server - (concat "Unable to start the Emacs server.\n" - (cadr err) - (substitute-command-keys - (concat "\nTo start the server in this Emacs process, stop " - "the existing server or call \\[server-force-delete] " - "to forcibly disconnect it."))) - :warning) - (setq leave-dead t))) + (cond + ((not leave-dead) + (display-warning + 'server + (concat "Unable to start the Emacs server.\n" + (cadr err) + (substitute-command-keys + (concat "\nTo start the server in this Emacs session, stop " + "the existing server or call \\[server-force-delete] " + "to forcibly disconnect it."))) + :warning) + (setq leave-dead t)) + (t + (display-warning + 'server + (concat "Unable to stop the Emacs server.\n" + (cadr err) + (substitute-command-keys + (concat "\n(Perhaps it was run from a different Emacs session?)\n" + "You can try stopping the server forcibly by calling \\[server-force-delete]."))) + :warning))))) ;; Now any previous server is properly stopped. (unless leave-dead (let ((server-file (server--file-name))) @@ -2016,7 +2027,7 @@ This sets the variable `server-stop-automatically' (which see)." (defun server-unload-function () "Unload the Server library." - (server-mode -1) + (ignore-errors (server-stop 'noframe)) (substitute-key-definition 'server-edit nil ctl-x-map) (save-current-buffer (dolist (buffer (buffer-list)) commit 26873d5028ed8aa0e2fc56c7d6ed3b43ff976d3c Author: Eli Zaretskii Date: Sat Mar 29 13:36:02 2025 +0300 Avoid warning when loading 'go-ts-mode' * lisp/progmodes/go-ts-mode.el (treesit-ready-p): Silence the warning if the gomod language library is not installed. (Bug#77213) diff --git a/lisp/progmodes/go-ts-mode.el b/lisp/progmodes/go-ts-mode.el index eb5b93008eb..c233a7222fc 100644 --- a/lisp/progmodes/go-ts-mode.el +++ b/lisp/progmodes/go-ts-mode.el @@ -476,7 +476,7 @@ what the parent of the node would be if it were a node." (derived-mode-add-parents 'go-mod-ts-mode '(go-mod-mode)) -(if (treesit-ready-p 'gomod) +(if (treesit-ready-p 'gomod t) (add-to-list 'auto-mode-alist '("/go\\.mod\\'" . go-mod-ts-mode))) (provide 'go-ts-mode) commit 0b2e3db910987f31175698b1728f41988d83e5ec Author: Andrés Ramírez Date: Mon Mar 24 02:54:02 2025 +0000 Add a key binding to Semantic's complete.el * lisp/cedet/semantic/complete.el (semantic-complete-key-map): Add a binding for 'switch-to-completions'. (Bug#77227) Copyright-paperwork-exempt: yes diff --git a/lisp/cedet/semantic/complete.el b/lisp/cedet/semantic/complete.el index dde2efe1fed..736025e1d54 100644 --- a/lisp/cedet/semantic/complete.el +++ b/lisp/cedet/semantic/complete.el @@ -177,6 +177,7 @@ Value should be a ... what?") (define-key km "\C-g" #'abort-recursive-edit) (define-key km "\M-n" #'next-history-element) (define-key km "\M-p" #'previous-history-element) + (define-key km "\M-v" #'switch-to-completions) (define-key km "\C-n" #'next-history-element) (define-key km "\C-p" #'previous-history-element) ;; Add history navigation commit cedefabfcfbe283fd539d8d290db550069807126 Author: Eli Zaretskii Date: Sat Mar 29 13:22:11 2025 +0300 ; Fix last change * lisp/files.el (auto-mode-alist): * etc/NEWS: Fix last change. (Bug#77138) diff --git a/etc/NEWS b/etc/NEWS index 89e8eb1645d..fea533d0d20 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1638,7 +1638,7 @@ highlight the fill-column indicators. By default this is disabled. * New Modes and Packages in Emacs 31.1 ** New major mode 'conf-npmrc-mode'. -A major mode based on conf-mode purposed for editing ".npmrc" files. +A major mode based on 'conf-mode' for editing ".npmrc" files. ** New major modes based on the tree-sitter library diff --git a/lisp/files.el b/lisp/files.el index 9c98adf84c2..3ce5d6264dc 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -3207,7 +3207,8 @@ ARC\\|ZIP\\|LZH\\|LHA\\|ZOO\\|[JEW]AR\\|XPI\\|RAR\\|CBR\\|7Z\\|SQUASHFS\\)\\'" . ("\\.properties\\(?:\\.[a-zA-Z0-9._-]+\\)?\\'" . conf-javaprop-mode) ("\\.toml\\'" . conf-toml-mode) ("\\.desktop\\'" . conf-desktop-mode) - ;; Dot is excluded from npmrc, because global configs may lack it. + ;; Dot is excluded from npmrc, because global configs may lack it, + ;; e.g. in /etc/npmrc files. ("npmrc\\'" . conf-npmrc-mode) ("/\\.redshift\\.conf\\'" . conf-windows-mode) ("\\`/etc/\\(?:DIR_COLORS\\|ethers\\|.?fstab\\|.*hosts\\|lesskey\\|login\\.?de\\(?:fs\\|vperm\\)\\|magic\\|mtab\\|pam\\.d/.*\\|permissions\\(?:\\.d/.+\\)?\\|protocols\\|rpc\\|services\\)\\'" . conf-space-mode) commit 891f51fe118597ffe58d5d817fff693db3188639 Author: Konstantin Kharlamov Date: Thu Mar 20 19:17:32 2025 +0300 Add major mode for highlighting npmrc files (Bug#77138) * etc/NEWS: mention the new mode. * lisp/textmodes/conf-mode.el (conf-npmrc-mode-syntax-table): New variable. * lisp/textmodes/conf-mode.el (conf-npmrc-mode): New major mode derived from conf-mode for highlighting .npmrc files. * lisp/files.el (auto-mode-alist): Associate the new mode with .npmrc files. diff --git a/etc/NEWS b/etc/NEWS index 1e184155723..89e8eb1645d 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1637,6 +1637,9 @@ highlight the fill-column indicators. By default this is disabled. * New Modes and Packages in Emacs 31.1 +** New major mode 'conf-npmrc-mode'. +A major mode based on conf-mode purposed for editing ".npmrc" files. + ** New major modes based on the tree-sitter library *** New major mode 'markdown-ts-mode'. diff --git a/lisp/files.el b/lisp/files.el index 4e3aeeb9246..9c98adf84c2 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -3207,6 +3207,8 @@ ARC\\|ZIP\\|LZH\\|LHA\\|ZOO\\|[JEW]AR\\|XPI\\|RAR\\|CBR\\|7Z\\|SQUASHFS\\)\\'" . ("\\.properties\\(?:\\.[a-zA-Z0-9._-]+\\)?\\'" . conf-javaprop-mode) ("\\.toml\\'" . conf-toml-mode) ("\\.desktop\\'" . conf-desktop-mode) + ;; Dot is excluded from npmrc, because global configs may lack it. + ("npmrc\\'" . conf-npmrc-mode) ("/\\.redshift\\.conf\\'" . conf-windows-mode) ("\\`/etc/\\(?:DIR_COLORS\\|ethers\\|.?fstab\\|.*hosts\\|lesskey\\|login\\.?de\\(?:fs\\|vperm\\)\\|magic\\|mtab\\|pam\\.d/.*\\|permissions\\(?:\\.d/.+\\)?\\|protocols\\|rpc\\|services\\)\\'" . conf-space-mode) ("\\`/etc/\\(?:acpid?/.+\\|aliases\\(?:\\.d/.+\\)?\\|default/.+\\|group-?\\|hosts\\..+\\|inittab\\|ksysguarddrc\\|opera6rc\\|passwd-?\\|shadow-?\\|sysconfig/.+\\)\\'" . conf-mode) diff --git a/lisp/textmodes/conf-mode.el b/lisp/textmodes/conf-mode.el index 6540cb0813c..246761c332e 100644 --- a/lisp/textmodes/conf-mode.el +++ b/lisp/textmodes/conf-mode.el @@ -136,6 +136,13 @@ not align (only setting space according to `conf-assignment-space')." table) "Syntax table in use in Unix style `conf-mode' buffers.") +(defvar conf-npmrc-mode-syntax-table + (let ((table (make-syntax-table conf-mode-syntax-table))) + (modify-syntax-entry ?\; "<" table) + (modify-syntax-entry ?# "<" table) + table) + "Syntax table in use in npmrc `conf-mode' buffers.") + (defvar conf-javaprop-mode-syntax-table (make-syntax-table conf-unix-mode-syntax-table) "Syntax table in use in Java properties buffers.") @@ -664,6 +671,13 @@ For details see `conf-mode'. (conf-mode-initialize "#" 'conf-desktop-font-lock-keywords) (conf-quote-normal nil)) +;;;###autoload +(define-derived-mode conf-npmrc-mode conf-mode "Conf[npmrc]" + :syntax-table conf-npmrc-mode-syntax-table + "Conf Mode starter for .npmrc files. +Comments start with `#' and `;'. For details see `conf-mode'." + (conf-mode-initialize "#")) + (provide 'conf-mode) ;;; conf-mode.el ends here commit 2b7a72b1177a057813f40aacc24fd0cd71f5903a Author: Po Lu Date: Sat Mar 29 14:45:38 2025 +0800 Do not redundantly dump constant forwarding objects * src/pdumper.c (dump_fwd_int, dump_fwd_bool, dump_fwd_obj): Do not redundantly dump constant forwarding descriptors; restrict to dumping the objects being forwarded to. (dump_fwd_buffer_obj): Copy from the dump file into bss rather than load buffer forwarding descriptors from the dump file itself. (dump_fwd_kboard_obj): Delete function. (dump_fwd): Don't return offset of dumped objects. (dump_blv): Adjust correspondingly. (dump_pre_dump_symbol): Improve documentation. Record offset of forwarding objects in relation to `emacs_basis' rather than the dump file. (dump_symbol): Restore forwarding descriptors to their original values as static variables in Emacs. This reduces the size of dump files by an insignificant 2kb but facilitates certain kinds of watchpoints on platforms where ASLR cannot be disabled, e.g., Android. diff --git a/src/pdumper.c b/src/pdumper.c index de213130756..1deb8473956 100644 --- a/src/pdumper.c +++ b/src/pdumper.c @@ -2293,35 +2293,25 @@ dump_float (struct dump_context *ctx, const struct Lisp_Float *lfloat) return dump_object_finish (ctx, &out, sizeof (out)); } -static dump_off +static void dump_fwd_int (struct dump_context *ctx, const struct Lisp_Intfwd *intfwd) { #if CHECK_STRUCTS && !defined HASH_Lisp_Intfwd_4D887A7387 # error "Lisp_Intfwd changed. See CHECK_STRUCTS comment in config.h." #endif dump_emacs_reloc_immediate_intmax_t (ctx, intfwd->intvar, *intfwd->intvar); - struct Lisp_Intfwd out; - dump_object_start (ctx, &out, sizeof (out)); - DUMP_FIELD_COPY (&out, intfwd, type); - dump_field_emacs_ptr (ctx, &out, intfwd, &intfwd->intvar); - return dump_object_finish (ctx, &out, sizeof (out)); } -static dump_off +static void dump_fwd_bool (struct dump_context *ctx, const struct Lisp_Boolfwd *boolfwd) { #if CHECK_STRUCTS && !defined (HASH_Lisp_Boolfwd_0EA1C7ADCC) # error "Lisp_Boolfwd changed. See CHECK_STRUCTS comment in config.h." #endif dump_emacs_reloc_immediate_bool (ctx, boolfwd->boolvar, *boolfwd->boolvar); - struct Lisp_Boolfwd out; - dump_object_start (ctx, &out, sizeof (out)); - DUMP_FIELD_COPY (&out, boolfwd, type); - dump_field_emacs_ptr (ctx, &out, boolfwd, &boolfwd->boolvar); - return dump_object_finish (ctx, &out, sizeof (out)); } -static dump_off +static void dump_fwd_obj (struct dump_context *ctx, const struct Lisp_Objfwd *objfwd) { #if CHECK_STRUCTS && !defined (HASH_Lisp_Objfwd_45D3E513DC) @@ -2331,14 +2321,9 @@ dump_fwd_obj (struct dump_context *ctx, const struct Lisp_Objfwd *objfwd) ctx->staticpro_table, Qnil))) dump_emacs_reloc_to_lv (ctx, objfwd->objvar, *objfwd->objvar); - struct Lisp_Objfwd out; - dump_object_start (ctx, &out, sizeof (out)); - DUMP_FIELD_COPY (&out, objfwd, type); - dump_field_emacs_ptr (ctx, &out, objfwd, &objfwd->objvar); - return dump_object_finish (ctx, &out, sizeof (out)); } -static dump_off +static void dump_fwd_buffer_obj (struct dump_context *ctx, const struct Lisp_Buffer_Objfwd *buffer_objfwd) { @@ -2346,59 +2331,49 @@ dump_fwd_buffer_obj (struct dump_context *ctx, # error "Lisp_Buffer_Objfwd changed. See CHECK_STRUCTS comment in config.h." #endif struct Lisp_Buffer_Objfwd out; + dump_off off; + dump_object_start (ctx, &out, sizeof (out)); DUMP_FIELD_COPY (&out, buffer_objfwd, type); DUMP_FIELD_COPY (&out, buffer_objfwd, offset); dump_field_lv (ctx, &out, buffer_objfwd, &buffer_objfwd->predicate, WEIGHT_NORMAL); - return dump_object_finish (ctx, &out, sizeof (out)); -} + off = dump_object_finish (ctx, &out, sizeof out); -static dump_off -dump_fwd_kboard_obj (struct dump_context *ctx, - const struct Lisp_Kboard_Objfwd *kboard_objfwd) -{ -#if CHECK_STRUCTS && !defined (HASH_Lisp_Kboard_Objfwd_CAA7E71069) -# error "Lisp_Intfwd changed. See CHECK_STRUCTS comment in config.h." -#endif - struct Lisp_Kboard_Objfwd out; - dump_object_start (ctx, &out, sizeof (out)); - DUMP_FIELD_COPY (&out, kboard_objfwd, type); - DUMP_FIELD_COPY (&out, kboard_objfwd, offset); - return dump_object_finish (ctx, &out, sizeof (out)); + /* Copy this fwd from the dump to the buffer fwd in Emacs. */ + dump_emacs_reloc_copy_from_dump (ctx, off, (void *) buffer_objfwd, + sizeof out); } -static dump_off +static void dump_fwd (struct dump_context *ctx, lispfwd fwd) { #if CHECK_STRUCTS && !defined (HASH_Lisp_Fwd_Type_9CBA6EE55E) # error "Lisp_Fwd_Type changed. See CHECK_STRUCTS comment in config.h." #endif void const *p = fwd.fwdptr; - dump_off offset; switch (XFWDTYPE (fwd)) { case Lisp_Fwd_Int: - offset = dump_fwd_int (ctx, p); + dump_fwd_int (ctx, p); break; case Lisp_Fwd_Bool: - offset = dump_fwd_bool (ctx, p); + dump_fwd_bool (ctx, p); break; case Lisp_Fwd_Obj: - offset = dump_fwd_obj (ctx, p); + dump_fwd_obj (ctx, p); break; case Lisp_Fwd_Buffer_Obj: - offset = dump_fwd_buffer_obj (ctx, p); + dump_fwd_buffer_obj (ctx, p); break; + /* The default kboard's contents are not meant to appear in the + dump file. */ case Lisp_Fwd_Kboard_Obj: - offset = dump_fwd_kboard_obj (ctx, p); break; default: emacs_abort (); } - - return offset; } static dump_off @@ -2413,16 +2388,16 @@ dump_blv (struct dump_context *ctx, DUMP_FIELD_COPY (&out, blv, local_if_set); DUMP_FIELD_COPY (&out, blv, found); if (blv->fwd.fwdptr) - dump_field_fixup_later (ctx, &out, blv, &blv->fwd.fwdptr); + { + eassert (XFWDTYPE (blv->fwd) != Lisp_Fwd_Buffer_Obj); + dump_field_emacs_ptr (ctx, &out, blv, &blv->fwd.fwdptr); + } dump_field_lv (ctx, &out, blv, &blv->where, WEIGHT_NORMAL); dump_field_lv (ctx, &out, blv, &blv->defcell, WEIGHT_STRONG); dump_field_lv (ctx, &out, blv, &blv->valcell, WEIGHT_STRONG); dump_off offset = dump_object_finish (ctx, &out, sizeof (out)); if (blv->fwd.fwdptr) - dump_remember_fixup_ptr_raw - (ctx, - offset + dump_offsetof (struct Lisp_Buffer_Local_Value, fwd), - dump_fwd (ctx, blv->fwd)); + dump_fwd (ctx, blv->fwd); return offset; } @@ -2443,6 +2418,14 @@ dump_remember_symbol_aux (struct dump_context *ctx, Fputhash (symbol, dump_off_to_lisp (offset), ctx->symbol_aux); } +/* Dump auxiliary information attached to SYMBOL, a symbol that will be + copied into Emacs's core from the dump file. If SYMBOL is localized, + generate a copy of its buffer local storage and arrange that the + symbol redirect to the same. Otherwise, if SYMBOL is forwarded, + arrange to restore the contents of the forwarding structure and/or + dump its references as the case may be; the former is only necessary + in the case of buffer objfwds, which are initialized at runtime. */ + static void dump_pre_dump_symbol (struct dump_context *ctx, struct Lisp_Symbol *symbol) { @@ -2457,8 +2440,9 @@ dump_pre_dump_symbol (struct dump_context *ctx, struct Lisp_Symbol *symbol) dump_blv (ctx, symbol->u.s.val.blv)); break; case SYMBOL_FORWARDED: + dump_fwd (ctx, symbol->u.s.val.fwd); dump_remember_symbol_aux (ctx, symbol_lv, - dump_fwd (ctx, symbol->u.s.val.fwd)); + emacs_offset (symbol->u.s.val.fwd.fwdptr)); break; default: break; @@ -2467,9 +2451,8 @@ dump_pre_dump_symbol (struct dump_context *ctx, struct Lisp_Symbol *symbol) } static dump_off -dump_symbol (struct dump_context *ctx, - Lisp_Object object, - dump_off offset) +dump_symbol (struct dump_context *ctx, Lisp_Object object, + dump_off offset) { #if CHECK_STRUCTS && !defined HASH_Lisp_Symbol_E0ADAF2F24 # error "Lisp_Symbol changed. See CHECK_STRUCTS comment in config.h." @@ -2477,6 +2460,7 @@ dump_symbol (struct dump_context *ctx, #if CHECK_STRUCTS && !defined (HASH_symbol_redirect_EA72E4BFF5) # error "symbol_redirect changed. See CHECK_STRUCTS comment in config.h." #endif + dump_off aux_offset; if (ctx->flags.defer_symbols) { @@ -2524,8 +2508,13 @@ dump_symbol (struct dump_context *ctx, dump_field_fixup_later (ctx, &out, symbol, &symbol->u.s.val.blv); break; case SYMBOL_FORWARDED: - dump_field_fixup_later (ctx, &out, symbol, &symbol->u.s.val.fwd); + /* This forwarding descriptor is in Emacs's core, but the symbol + is initialized at runtime. The next switch statement might + dump this value if it hasn't already been dumped by + dump_pre_dump_symbol. */ + dump_field_emacs_ptr (ctx, &out, symbol, &symbol->u.s.val.fwd.fwdptr); break; + default: emacs_abort (); } @@ -2535,27 +2524,24 @@ dump_symbol (struct dump_context *ctx, WEIGHT_STRONG); offset = dump_object_finish (ctx, &out, sizeof (out)); - dump_off aux_offset; - switch (symbol->u.s.redirect) { case SYMBOL_LOCALIZED: aux_offset = dump_recall_symbol_aux (ctx, make_lisp_symbol (symbol)); - dump_remember_fixup_ptr_raw - (ctx, - offset + dump_offsetof (struct Lisp_Symbol, u.s.val.blv), - (aux_offset - ? aux_offset - : dump_blv (ctx, symbol->u.s.val.blv))); + dump_remember_fixup_ptr_raw (ctx, offset + dump_offsetof (struct Lisp_Symbol, + u.s.val.blv), + (aux_offset + ? aux_offset + : dump_blv (ctx, symbol->u.s.val.blv))); break; case SYMBOL_FORWARDED: aux_offset = dump_recall_symbol_aux (ctx, make_lisp_symbol (symbol)); - dump_remember_fixup_ptr_raw - (ctx, - offset + dump_offsetof (struct Lisp_Symbol, u.s.val.fwd), - (aux_offset - ? aux_offset - : dump_fwd (ctx, symbol->u.s.val.fwd))); + /* Symbols interned by a defvar are not copied objects. */ + if (!aux_offset) + dump_fwd (ctx, symbol->u.s.val.fwd); + if (aux_offset && (aux_offset + != emacs_offset (symbol->u.s.val.fwd.fwdptr))) + emacs_abort (); break; default: break; commit 8a986e7075dc83c0b87f0928ba767215c3c6a377 Author: Michael Albinus Date: Fri Mar 28 19:26:23 2025 +0100 tramp-tests cleanup * test/lisp/net/tramp-tests.el (tramp-test26-file-name-completion) (tramp-test26-interactive-file-name-completion): Adapt tests. diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el index 55461819f66..5c5b8c0b157 100644 --- a/test/lisp/net/tramp-tests.el +++ b/test/lisp/net/tramp-tests.el @@ -4874,7 +4874,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." (tramp-change-syntax syntax) ;; This has cleaned up all connection data, which are used ;; for completion. We must refill the cache. - (tramp-set-connection-property tramp-test-vec "property" nil) + (tramp-set-connection-property tramp-test-vec "completion-use-cache" t) (let (;; This is needed for the `separate' syntax. (prefix-format (substring tramp-prefix-format 1)) @@ -4988,9 +4988,8 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." ;; and Bug#60505. (ert-deftest tramp-test26-interactive-file-name-completion () "Check interactive completion with different `completion-styles'." - ;; Method, user and host name in completion mode. - (tramp-cleanup-connection tramp-test-vec 'keep-debug 'keep-password) + ;; Method, user and host name in completion mode. (let ((method (file-remote-p ert-remote-temporary-file-directory 'method)) (user (file-remote-p ert-remote-temporary-file-directory 'user)) (host (file-remote-p ert-remote-temporary-file-directory 'host)) @@ -5012,7 +5011,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." (tramp-change-syntax syntax) ;; This has cleaned up all connection data, which are used ;; for completion. We must refill the cache. - (tramp-set-connection-property tramp-test-vec "property" nil) + (tramp-set-connection-property tramp-test-vec "completion-use-cache" t) (dolist (style commit 8acbde02a03b4cdf8dcfba0472e9eb4a440028f6 Author: Eshel Yaron Date: Fri Mar 28 18:33:52 2025 +0100 ; * lisp/emacs-lisp/cl-generic.el: Add missing comma. diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el index 1086bf67614..d1d57fe40bd 100644 --- a/lisp/emacs-lisp/cl-generic.el +++ b/lisp/emacs-lisp/cl-generic.el @@ -1111,7 +1111,7 @@ MET-NAME is as returned by `cl--generic-load-hist-format'." (add-to-list 'find-function-regexp-alist `(cl-defmethod . (,#'cl--generic-search-method - . #'cl--generic-search-method-make-form-matcher))) + . ,#'cl--generic-search-method-make-form-matcher))) (add-to-list 'find-function-regexp-alist '(cl-defgeneric . cl--generic-find-defgeneric-regexp))) commit 7527e395499e7ef24249b286dda87d7feb04fb8e Author: Stephen Gildea Date: Fri Mar 28 07:04:03 2025 -0700 ; Time Stamps doc: expand the explanation of the examples * doc/emacs/files.texi (Time Stamps): Divide into three sections. * doc/emacs/emacs.texi: Add new nodes to menu. * lisp/time-stamp.el: Change reference to new node. diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi index 1a096e5d814..2e9f24314eb 100644 --- a/doc/emacs/emacs.texi +++ b/doc/emacs/emacs.texi @@ -486,6 +486,11 @@ Backup Files * Backup Deletion:: Emacs deletes excess numbered backups. * Backup Copying:: Backups can be made by copying or renaming. +Updating Time Stamps Automatically + +* Time Stamp Customization:: How to customize with time-stamp-pattern. +* Time Stamps for One File:: Ensure automatic time-stamp of a specific file. + @ifnottex Auto Reverting Non-File Buffers diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi index 6f4f47d6d84..0a63da4217d 100644 --- a/doc/emacs/files.texi +++ b/doc/emacs/files.texi @@ -1007,8 +1007,8 @@ was written will be preserved even if the file is copied or transformed in a way that loses the file system's modification time. There are two steps to setting up automatic time stamping. -First, you need to have a time stamp template -somewhere in the first eight lines of the file. +First, the file needs a time stamp template +somewhere in the first eight lines. The template looks like this: @example @@ -1022,59 +1022,81 @@ or (your choice) like this: Time-stamp: " " @end example -@noindent -When time-stamping, Emacs will write the current time, date, and/or -other info between the brackets or quotes. - @findex time-stamp -Second, add the function @code{time-stamp} -to @code{before-save-hook} (@pxref{Hooks}). -To do this, either customize the option @code{before-save-hook} -(with @kbd{M-x customize-option}, @pxref{Specific Customization}) -or edit your init file adding this line: +With that template in place, you can update the current buffer's time +stamp once immediately with the command @kbd{M-x time-stamp}. +Emacs will check for a template; if a template is found, +Emacs will write the current date, time, author, and/or +other info between the brackets or quotes. +(If the buffer has no template, @code{time-stamp} does nothing.) +After the first time stamp, the line might look like this: @example -(add-hook 'before-save-hook 'time-stamp) +Time-stamp: <1993-07-06 11:05:14 terryg> @end example -To enable automatic time-stamping for only a specific file, add the -following line to a local variables list -(@pxref{Specifying File Variables}) near the end of the file: +Second, configure Emacs to run @code{time-stamp} any time it saves a +file, by adding @code{time-stamp} +to @code{before-save-hook} (@pxref{Hooks}). +You can either customize the option @code{before-save-hook} +(with @kbd{M-x customize-option}, @pxref{Specific Customization}), +or you can edit your init file adding this line: @example -eval: (add-hook 'before-save-hook 'time-stamp nil t) +(add-hook 'before-save-hook 'time-stamp) @end example -To update the current buffer's time stamp once -immediately, use the command @kbd{M-x time-stamp}. +@menu +* Time Stamp Customization:: How to customize with time-stamp-pattern. +* Time Stamps for One File:: Ensure automatic time-stamp of a specific file. +@end menu + +@node Time Stamp Customization +@subsubsection Customizing the Time Stamp @vindex time-stamp-pattern To customize the time stamp in a particular file, set the -variable @code{time-stamp-pattern} in that file's local variables list. -You can change where the time stamp starts and ends and how the dynamic -information is to be formatted; see the variable's built-in -documentation for details. +variable @code{time-stamp-pattern} in that file's local variables +list (@pxref{Specifying File Variables}). +You can change what pattern @code{time-stamp} will match against to +identify a template and where in the file to look for the pattern using +@code{time-stamp-pattern}; for details, see the variable's built-in +documentation (with @kbd{C-h v}, @pxref{Name Help}). + As a simple example, if this line occurs near the top of a file: @example -\newcommand@{\yearpublished@}@{@} +publishing_year_and_city = "Published nnnn in Boston, Mass."; @end example @noindent -then the following at the end of the file tells @code{time-stamp} how to -identify and update that custom template: +then the following comment at the end of the same file tells +@code{time-stamp} how to identify and update that custom template: @example @group -%% Local variables: -%% time-stamp-pattern: "@{.yearpublished@}@{%Y@}" -%% End: +// Local variables: +// time-stamp-pattern: "Published %Y in Boston" +// End: @end group @end example -Here is another example, with the time stamp inserted into the last -paragraph of an HTML document. The @code{%%} in the pattern asks for -the default format. +This pattern says that the text before the start of the time stamp is +``Published '', and the text after the end is `` in Boston''. +If @code{time-stamp} finds both in one of the first eight lines, +what is between will be replaced by the current year, as requested by +the @code{%Y} format. + +After any change to file-local variables, +type @kbd{M-x normal-mode} to re-read them. + +Here is another example, with the time stamp inserted into +the last paragraph of an HTML document. +Since this template is at the end of the document, not in the first +eight lines, @code{time-stamp-format} starts with @code{-10/} to tell +@code{time-stamp} to look at the last 10 lines. +The @code{%%} asks for the default format +(specified by @code{time-stamp-format}). @example @r{@dots{}} @@ -1096,7 +1118,29 @@ Manual}). See the built-in documentation for the variable @code{time-stamp-format} for specifics and other variables that affect the formatting. -For customizations, see the Custom group @code{time-stamp}. +@node Time Stamps for One File +@subsubsection Forcing Time Stamps for One File + +If you are working on a file with multiple authors, and you cannot +be sure the other authors have enabled time-stamping globally in +their Emacs init files, you can force it to be enabled for a +particular file by adding @code{time-stamp} to that buffer's +@code{before-save-hook} in that file's local variables list. +To extend one of the previous examples: + +@example +@group +// Local variables: +// eval: (add-hook 'before-save-hook 'time-stamp nil t) +// time-stamp-pattern: "year_published = \"%Y\"" +// End: +@end group +@end example + +@noindent +Although this example shows them both set together, +you can use @code{eval} without also setting @code{time-stamp-pattern} +if you like the default pattern. @node Reverting @section Reverting a Buffer diff --git a/lisp/time-stamp.el b/lisp/time-stamp.el index 0725908f106..ffe5c072286 100644 --- a/lisp/time-stamp.el +++ b/lisp/time-stamp.el @@ -283,7 +283,7 @@ This part may be omitted to use the value of `time-stamp-end'. The pattern does not need to match the entire line of the time stamp. The pattern will update time stamp information on multiple lines if the -pattern includes newlines, written as \"\\n\". +pattern includes newlines, which can be written as \"\\n\". These variables are best changed with file-local variables. If you were to change `time-stamp-pattern', `time-stamp-line-limit', @@ -307,7 +307,8 @@ Examples: // time-stamp-pattern: \"10/Author %L\\nRevised %-d %b %Y$\" (sets all four variables and updates text on two lines) -See Info node `Time Stamps' for more examples. +See Info node `Time Stamp Customization' for more discussion and more +in-depth examples. See also `time-stamp-count' and `time-stamp-inserts-lines'.") @@ -318,8 +319,8 @@ See also `time-stamp-count' and `time-stamp-inserts-lines'.") ;;;###autoload (defun time-stamp () "Update any time stamp strings (timestamps) in the buffer. -Look for a time stamp template and update it with the current date, -time, and/or other info. +Look for a time stamp template and update it with the current +date, time, author, and/or other info. The template, which you manually create on one of the first 8 lines of the file before running this function, by default can look like @@ -526,6 +527,7 @@ time is used. The time zone is determined by `time-stamp-time-zone'." ;;; five years. ;;; The : modifier is a temporary conversion feature used to resolve ;;; ambiguous formats--formats that are changing (over time) incompatibly. + (defun time-stamp-string-preprocess (format &optional time) "Use a FORMAT to format date, time, file, and user information. Optional second argument TIME is only for testing. commit 638ec3cd66e51f9287dbea8e8c9d037bfa28ad0e Author: Gerd Möllmann Date: Fri Mar 28 14:44:35 2025 +0100 Remove a use of a PUA Unicode character (bug#77328) * lisp/progmodes/eglot.el (eglot-code-action-indicator): Use U+1F4A1 ELECTRIC LIGHT BULB instead of a PUA character. diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index bc70db34fb5..4c1c7536b0d 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -612,12 +612,12 @@ Note additionally: :package-version '(Eglot . "1.19")) (defcustom eglot-code-action-indicator - (cl-loop for c in '(? ?⚡?✓ ?α ??) + (cl-loop for c in '(?💡 ?⚡?✓ ?α ??) when (char-displayable-p c) return (make-string 1 c)) "Indicator string for code action suggestions." :type (let ((basic-choices - (cl-loop for c in '(? ?⚡?✓ ?α ??) + (cl-loop for c in '(?💡 ?⚡?✓ ?α ??) when (char-displayable-p c) collect `(const :tag ,(format "Use `%c'" c) ,(make-string 1 c))))) commit da9a3f558d1f9cbe44e5e791028234c5a593d945 Author: Eli Zaretskii Date: Fri Mar 28 13:51:39 2025 +0300 ; * doc/lispref/functions.texi (Finding Definitions): Fix wording. diff --git a/doc/lispref/functions.texi b/doc/lispref/functions.texi index d812c1a1bf4..2ea462b5078 100644 --- a/doc/lispref/functions.texi +++ b/doc/lispref/functions.texi @@ -846,10 +846,10 @@ variable @code{find-function-regexp-alist}. @vindex @code{find-function-regexp-alist} The alist @code{find-function-regexp-alist} associates object types with -a regexp or function that finds the definition of that object in its -source file. Each element's car is a symbol the describes the type of -object, or @code{nil} to identify functions defined with @code{defun}. -Each element's cdr can be one of the following: +a regexp or a function that finds the definition of that object in its +source file. Each element's @code{car} is a symbol that describes the +type of object, or @code{nil}, which means a function defined with +@code{defun}. Each element's @code{cdr} can be one of the following: @itemize @item commit ed3d8bb298bf4c7ef39a08392ace3271686cd5c0 Author: Po Lu Date: Fri Mar 28 16:10:12 2025 +0800 Miscellaneous corrections * src/buffer.h (BUF_PTR_BYTE_POS): Fix comment. * src/profiler.c (add_sample): Use BASE_EQ. diff --git a/src/buffer.h b/src/buffer.h index 5c0a6ab3118..d19ff22babd 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -1351,8 +1351,8 @@ BUF_CHAR_ADDRESS (struct buffer *buf, ptrdiff_t pos) + (pos < buf->text->gpt ? 0 : buf->text->gap_size)); } -/* Convert PTR, the address of a char in buffer BUF, - into a character position. */ +/* Convert PTR, the address of a char in buffer BUF, into a byte + position. */ INLINE ptrdiff_t BUF_PTR_BYTE_POS (struct buffer *buf, unsigned char *ptr) diff --git a/src/profiler.c b/src/profiler.c index 43409688a93..12d75012c79 100644 --- a/src/profiler.c +++ b/src/profiler.c @@ -325,7 +325,7 @@ record_backtrace (struct profiler_log *plog, EMACS_INT count) static void add_sample (struct profiler_log *plog, EMACS_INT count) { - if (EQ (backtrace_top_function (), QAutomatic_GC)) /* bug#60237 */ + if (BASE_EQ (backtrace_top_function (), QAutomatic_GC)) /* bug#60237 */ /* Special case the time-count inside GC because the hash-table code is not prepared to be used while the GC is running. More specifically it uses ASIZE at many places where it does commit 9720e1a96ed78fb86b24787f9986f14bad108c96 Author: Eli Zaretskii Date: Fri Mar 28 09:32:29 2025 +0300 ; Fix documentation of a recently-installed change * lisp/emacs-lisp/find-func.el (find-function-regexp-alist): Doc fix. * doc/lispref/functions.texi (Finding Definitions): Fix wording and markup. * etc/NEWS: Move the new item where it belongs. diff --git a/doc/lispref/functions.texi b/doc/lispref/functions.texi index 83acbff0885..d812c1a1bf4 100644 --- a/doc/lispref/functions.texi +++ b/doc/lispref/functions.texi @@ -849,15 +849,17 @@ The alist @code{find-function-regexp-alist} associates object types with a regexp or function that finds the definition of that object in its source file. Each element's car is a symbol the describes the type of object, or @code{nil} to identify functions defined with @code{defun}. -Each element's cdr can be: +Each element's cdr can be one of the following: @itemize @item -A symbol whose value is a string interpreted as a regexp +A symbol whose value is a string interpreted as a regexp. @item -A symbol naming a function that can find the definition +A symbol naming a function that can find the definition. @item -A cons cell where the car is a regexp (or function that returns one) and the cdr is a function that creates a matcher for macroexpanded forms +A cons cell where the @code{car} is a regexp (or function that returns +one) and the @code{cdr} is @dfn{form-matcher}: a function that creates a +matcher for macro-expanded forms. @end itemize A regexp string is actually a format string, and @code{%s} will be @@ -866,10 +868,11 @@ substituted with the name of the symbol we are looking for. A function will be called with one argument, the (symbol for) the object we are searching for. -The form-matcher function in a cons cell value is called with one argument (the -symbol being sought) and should return a function that takes a form and returns -non-nil if the form defines the sought symbol. This is useful for finding -definitions that are created by macro expansion. +The form-matcher function in a cons cell value is called with one +argument (the symbol being sought) and should return a function; that +function should take a form and return non-@code{nil} if the form +defines the sought symbol. This is useful for finding definitions that +are created by expansion of macros. @cindex @code{definition-name} (symbol property) If the function to be found is defined by a macro, it may be hard for diff --git a/etc/NEWS b/etc/NEWS index 823e4c0cde3..1e184155723 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -75,8 +75,7 @@ the 'standard-display-table's extra slots with Unicode characters. Please see the documentation of that function to see which slots of the display table it changes. ---- -** 'find-function' can now find cl-defmethod invocations hidden inside macros. ++++ ** Child frames are now supported on TTY frames. This supports use-cases like Posframe, Corfu, and child frames acting like tooltips. @@ -147,6 +146,9 @@ The new minor mode defines the keys at a higher precedence level than the old function, one more usual for a minor mode. To restore the old behavior, customize 'find-function-mode-lower-precedence' to non-nil. +--- +** 'find-function' can now find 'cl-defmethod' invocations inside macros. + ** Minibuffer and Completions +++ diff --git a/lisp/emacs-lisp/find-func.el b/lisp/emacs-lisp/find-func.el index c2101617ac3..8f488a9c00a 100644 --- a/lisp/emacs-lisp/find-func.el +++ b/lisp/emacs-lisp/find-func.el @@ -146,13 +146,13 @@ we're looking for) and it should search for it. A value can also be a cons (REGEX . EXPANDED-FORM-MATCHER-FACTORY). REGEX is as above; EXPANDED-FORM-MATCHER-FACTORY is a function of one -argument, the same as we'd pass to a REGEX function, that returns -another function of one argument that returns true if we're looking at a -macroexpanded form that defines what we're looking for. If you want to -use EXPANDED-FORM-MATCHER-FACTORY exclusively, you can set REGEX to a -never-match regex and force the fallback to -EXPANDED-FORM-MATCHER-FACTORY. The buffer to search is current during -the call to EXPANDED-FORM-MATCHER-FACTORY. +argument, the same object we'd pass to a REGEX function; it should return +another function of one argument that returns non-nil if we're looking at +a macroexpanded form that defines the object we're looking for. +If you want to use EXPANDED-FORM-MATCHER-FACTORY exclusively, you can +set REGEX to a never-match regexp, and force the fallback to +EXPANDED-FORM-MATCHER-FACTORY. EXPANDED-FORM-MATCHER-FACTORY is +called with the buffer to search the current one. Symbols can have their own version of this alist on the property `find-function-type-alist'. commit 01f4a0cb6cb15fbbc28e64abd94cb38604a24672 Author: Stephen Gildea Date: Thu Mar 27 14:54:47 2025 -0700 MH-E: set default-directory to HOME on entry * lisp/mh-e/mh-e.el (mh-default-directory, mh-set-default-directory): New variable (defaults to "~/"), new function to use it. * lisp/mh-e/mh-folder.el (mh-rmail, mh-nmail): Call mh-set-default-directory on entry to MH-E (closes: bug#77263). diff --git a/lisp/mh-e/mh-e.el b/lisp/mh-e/mh-e.el index e507996c581..f64b02c7bca 100644 --- a/lisp/mh-e/mh-e.el +++ b/lisp/mh-e/mh-e.el @@ -144,6 +144,10 @@ This directory contains, among other things, the mhl program.") ;;;###autoload (put 'mh-lib-progs 'risky-local-variable t) +(defvar mh-default-directory "~/" + "Default directory for MH-E folder buffers. +Set to nil to have MH-E buffers inherit default-directory.") + ;; Profile Components (defvar mh-draft-folder nil @@ -438,6 +442,12 @@ gnus-version) (error "Bad element: %s" element)))) new-list)) +(defun mh-set-default-directory () + "Set `default-directory' to `mh-default-directory' unless it is nil." + (when (stringp mh-default-directory) + (setq default-directory (file-name-as-directory + (expand-file-name mh-default-directory))))) + ;;; MH-E Process Support diff --git a/lisp/mh-e/mh-folder.el b/lisp/mh-e/mh-folder.el index 5009c2c4f98..e0c53724f9c 100644 --- a/lisp/mh-e/mh-folder.el +++ b/lisp/mh-e/mh-folder.el @@ -51,9 +51,12 @@ the MH mail system." (interactive "P") (mh-find-path) (if arg - (call-interactively 'mh-visit-folder) + (progn + (call-interactively 'mh-visit-folder) + (mh-set-default-directory)) (unless (get-buffer mh-inbox) - (mh-visit-folder mh-inbox (symbol-name mh-unseen-seq))) + (mh-visit-folder mh-inbox (symbol-name mh-unseen-seq)) + (mh-set-default-directory)) (mh-inc-folder))) ;;;###autoload @@ -67,7 +70,8 @@ the MH mail system." (mh-find-path) ; init mh-inbox (if arg (call-interactively 'mh-visit-folder) - (mh-visit-folder mh-inbox))) + (mh-visit-folder mh-inbox)) + (mh-set-default-directory)) ;;; Desktop Integration commit 364c3dbc12e7b6d41ab449dd495c96d08874310e Author: Daniel Colascione Date: Thu Mar 27 16:04:51 2025 -0400 Help find-function find methods defined inside macros * doc/lispref/functions.texi (Finding Definitions): Document the expanded definition-finding extension mechanism. * etc/NEWS: Briefly describe the new feature. * lisp/emacs-lisp/cl-generic.el (cl--generic-find-defgeneric-regexp): Use defconst now that we no longer have purespace. (cl--generic-search-method-make-form-matcher): New function. * lisp/emacs-lisp/find-func.el (find-function-regexp-alist) (find-function-search-for-symbol): Parse out the new factory function. (find-function--search-by-expanding-macros): Try using it when searching for definitions by expanding macros. diff --git a/doc/lispref/functions.texi b/doc/lispref/functions.texi index 1279b15b819..83acbff0885 100644 --- a/doc/lispref/functions.texi +++ b/doc/lispref/functions.texi @@ -849,9 +849,16 @@ The alist @code{find-function-regexp-alist} associates object types with a regexp or function that finds the definition of that object in its source file. Each element's car is a symbol the describes the type of object, or @code{nil} to identify functions defined with @code{defun}. -Each element's cdr is a symbol: either the value of that symbol is a -string interpreted as a regexp, or that symbol names a function that can -find the definition. +Each element's cdr can be: + +@itemize +@item +A symbol whose value is a string interpreted as a regexp +@item +A symbol naming a function that can find the definition +@item +A cons cell where the car is a regexp (or function that returns one) and the cdr is a function that creates a matcher for macroexpanded forms +@end itemize A regexp string is actually a format string, and @code{%s} will be substituted with the name of the symbol we are looking for. @@ -859,6 +866,11 @@ substituted with the name of the symbol we are looking for. A function will be called with one argument, the (symbol for) the object we are searching for. +The form-matcher function in a cons cell value is called with one argument (the +symbol being sought) and should return a function that takes a form and returns +non-nil if the form defines the sought symbol. This is useful for finding +definitions that are created by macro expansion. + @cindex @code{definition-name} (symbol property) If the function to be found is defined by a macro, it may be hard for Emacs to find the definition site in the source code. A macro call may diff --git a/etc/NEWS b/etc/NEWS index 1bd2fd6d486..823e4c0cde3 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -75,7 +75,8 @@ the 'standard-display-table's extra slots with Unicode characters. Please see the documentation of that function to see which slots of the display table it changes. -+++ +--- +** 'find-function' can now find cl-defmethod invocations hidden inside macros. ** Child frames are now supported on TTY frames. This supports use-cases like Posframe, Corfu, and child frames acting like tooltips. diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el index 9a7fe26eaf3..1086bf67614 100644 --- a/lisp/emacs-lisp/cl-generic.el +++ b/lisp/emacs-lisp/cl-generic.el @@ -1082,13 +1082,36 @@ MET-NAME is as returned by `cl--generic-load-hist-format'." nil t) (re-search-forward base-re nil t)))) -;; WORKAROUND: This can't be a defconst due to bug#21237. -(defvar cl--generic-find-defgeneric-regexp "(\\(?:cl-\\)?defgeneric[ \t]+%s\\_>") +(defun cl--generic-search-method-make-form-matcher (met-name) + (let ((name (car met-name)) + (qualifiers (cadr met-name)) + (specializers (cddr met-name))) + (lambda (form) + (pcase form + (`(cl-generic-define-method + (function ,(pred (eq name))) + (quote ,(and (pred listp) m-qualifiers)) + (quote ,(and (pred listp) m-args)) + ,_call-con + ,_function) + (ignore-errors + (let* ((m-spec-args (car (cl--generic-split-args m-args))) + (m-specializers + (mapcar (lambda (spec-arg) + (if (eq '&context (car-safe (car spec-arg))) + spec-arg (cdr spec-arg))) + m-spec-args))) + (and (equal qualifiers m-qualifiers) + (equal specializers m-specializers))))))))) + +(defconst cl--generic-find-defgeneric-regexp "(\\(?:cl-\\)?defgeneric[ \t]+%s\\_>") (with-eval-after-load 'find-func (defvar find-function-regexp-alist) (add-to-list 'find-function-regexp-alist - `(cl-defmethod . ,#'cl--generic-search-method)) + `(cl-defmethod + . (,#'cl--generic-search-method + . #'cl--generic-search-method-make-form-matcher))) (add-to-list 'find-function-regexp-alist '(cl-defgeneric . cl--generic-find-defgeneric-regexp))) diff --git a/lisp/emacs-lisp/find-func.el b/lisp/emacs-lisp/find-func.el index 455095c9be6..c2101617ac3 100644 --- a/lisp/emacs-lisp/find-func.el +++ b/lisp/emacs-lisp/find-func.el @@ -144,6 +144,16 @@ Instead of regexp variable, types can be mapped to functions as well, in which case the function is called with one argument (the object we're looking for) and it should search for it. +A value can also be a cons (REGEX . EXPANDED-FORM-MATCHER-FACTORY). +REGEX is as above; EXPANDED-FORM-MATCHER-FACTORY is a function of one +argument, the same as we'd pass to a REGEX function, that returns +another function of one argument that returns true if we're looking at a +macroexpanded form that defines what we're looking for. If you want to +use EXPANDED-FORM-MATCHER-FACTORY exclusively, you can set REGEX to a +never-match regex and force the fallback to +EXPANDED-FORM-MATCHER-FACTORY. The buffer to search is current during +the call to EXPANDED-FORM-MATCHER-FACTORY. + Symbols can have their own version of this alist on the property `find-function-type-alist'. See the function `find-function-update-type-alist'.") @@ -434,7 +444,13 @@ The search is done in the source for library LIBRARY." (regexp-symbol (or (and (symbolp symbol) (alist-get type (get symbol 'find-function-type-alist))) - (alist-get type find-function-regexp-alist)))) + (alist-get type find-function-regexp-alist))) + (form-matcher-factory + (and (functionp (cdr-safe regexp-symbol)) + (cdr regexp-symbol))) + (regexp-symbol (if form-matcher-factory + (car regexp-symbol) + regexp-symbol))) (with-current-buffer (find-file-noselect filename) (let ((regexp (if (functionp regexp-symbol) regexp-symbol (format (symbol-value regexp-symbol) @@ -474,7 +490,8 @@ The search is done in the source for library LIBRARY." ;; expands macros until it finds the symbol. (cons (current-buffer) (find-function--search-by-expanding-macros - (current-buffer) symbol type)))))))))) + (current-buffer) symbol type + form-matcher-factory)))))))))) ;;;###autoload (defun find-function-update-type-alist (symbol type variable) @@ -506,19 +523,13 @@ Return t if any PRED returns t." (find-function--any-subform-p left-child pred) (find-function--any-subform-p right-child pred)))))) -(defun find-function--search-by-expanding-macros (buf symbol type) +(defun find-function--search-by-expanding-macros + (buf symbol type matcher-factory) "Expand macros in BUF to search for the definition of SYMBOL of TYPE." - (catch 'found - (with-current-buffer buf - (save-excursion - (goto-char (point-min)) - (condition-case nil - (while t - (let ((form (read (current-buffer))) - (expected-symbol-p - (lambda (form) - (cond - ((null type) + (with-current-buffer buf + (when-let* ((expected-symbol-p + (cond ((null type) + (lambda (form) ;; Check if a given form is a `defalias' to ;; SYM, the function name we are searching ;; for. All functions in Emacs Lisp @@ -526,20 +537,28 @@ Return t if any PRED returns t." ;; after several steps of macroexpansion. (and (eq (car-safe form) 'defalias) (equal (car-safe (cdr form)) - `(quote ,symbol)))) - ((eq type 'defvar) + `(quote ,symbol))))) + ((eq type 'defvar) + (lambda (form) ;; Variables generated by macros ultimately ;; expand to `defvar'. (and (eq (car-safe form) 'defvar) - (eq (car-safe (cdr form)) symbol))) - (t nil))))) + (eq (car-safe (cdr form)) symbol)))) + (matcher-factory + (funcall matcher-factory symbol))))) + (catch 'found + (save-excursion + (goto-char (point-min)) + (condition-case nil + (while t (when (find-function--any-subform-p - (find-function--try-macroexpand form) + (find-function--try-macroexpand + (read (current-buffer))) expected-symbol-p) ;; We want to return the location at the beginning ;; of the macro, so move back one sexp. - (throw 'found (progn (backward-sexp) (point)))))) - (end-of-file nil)))))) + (throw 'found (progn (backward-sexp) (point))))) + (end-of-file nil))))))) (defun find-function-library (function &optional lisp-only verbose) "Return the pair (ORIG-FUNCTION . LIBRARY) for FUNCTION. commit 59fd8c26be2f7724a5c8cb583383f2025171c660 Author: Jimmy Aguilar Mena Date: Tue Feb 25 01:32:16 2025 +0100 Add jump action to margin indicators in flymake (flymake--indicator-overlay-spec): Receive type instead of prepossessed indicator. (flymake--resize-margins): Update reference call to flymake--indicator-overlay-spec. (flymake-show-buffer-diagnostics-at-event-line): (flymake-diagnostics-at-mouse-event): (flymake-show-buffer-diagnostics-at-event-position): New functions. (flymake-after-show-buffer-diagnostics-hook): New custom with actions when jumping to an error line. (flymake-pulse-momentary-highlight-region): (flymake-show-buffer-diagnostics): Receive new optional argument with current diagnostic information. Add code to jump and execute the new hook after jumping (bug#75841). diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index 75ba3efeb65..6cc7e1f7a79 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -748,34 +748,41 @@ associated `flymake-category' return DEFAULT." (flymake--lookup-type-property type 'severity (warning-numeric-level :error))) -(defun flymake--indicator-overlay-spec (indicator) +(defun flymake--indicator-overlay-spec (type) "Return INDICATOR as propertized string to use in error indicators." - (let* ((value (if (symbolp indicator) + (let* ((indicator (flymake--lookup-type-property + type + (cond ((eq flymake-indicator-type 'fringes) + 'flymake-bitmap) + ((eq flymake-indicator-type 'margins) + 'flymake-margin-string)) + (alist-get 'bitmap (alist-get type ; backward compat + flymake-diagnostic-types-alist)))) + (value (if (symbolp indicator) (symbol-value indicator) indicator)) - (indicator-car (if (listp value) - (car value) - value)) - (indicator-cdr (if (listp value) - (cdr value)))) + (valuelist (if (listp value) + value + (list value))) + (indicator-car (car valuelist))) + (cond ((and (symbolp indicator-car) flymake-fringe-indicator-position) (propertize "!" 'display - (cons flymake-fringe-indicator-position - (if (listp value) - value - (list value))))) + (cons flymake-fringe-indicator-position valuelist))) ((and (stringp indicator-car) flymake-margin-indicator-position) (propertize "!" 'display `((margin ,flymake-margin-indicator-position) - ,(propertize - indicator-car - 'face - `(:inherit (,indicator-cdr - default))))))))) + ,(propertize indicator-car + 'face `(:inherit (,(cdr valuelist) default)) + 'mouse-face 'highlight + 'help-echo "Open Flymake diagnostics" + 'keymap `,(define-keymap + (format "<%s> " flymake-margin-indicator-position) + #'flymake-show-buffer-diagnostics-at-event-line)))))))) (defun flymake--resize-margins (&optional orig-width) "Resize current window margins according to `flymake-margin-indicator-position'. @@ -941,16 +948,7 @@ Return nil or the overlay created." (overlay-put ov prop (flymake--lookup-type-property type prop value))))) (default-maybe 'face 'flymake-error) - (default-maybe 'before-string - (flymake--indicator-overlay-spec - (flymake--lookup-type-property - type - (cond ((eq flymake-indicator-type 'fringes) - 'flymake-bitmap) - ((eq flymake-indicator-type 'margins) - 'flymake-margin-string)) - (alist-get 'bitmap (alist-get type ; backward compat - flymake-diagnostic-types-alist))))) + (default-maybe 'before-string (flymake--indicator-overlay-spec type)) ;; (default-maybe 'after-string ;; (flymake--diag-text diagnostic)) (default-maybe 'help-echo @@ -1369,12 +1367,28 @@ Interactively, with a prefix arg, FORCE is t." nil))) (flymake--import-foreign-diagnostics)))))) -(defvar flymake-mode-map - (let ((map (make-sparse-keymap))) - (define-key map `[,flymake-fringe-indicator-position mouse-1] - #'flymake-show-buffer-diagnostics) - map) - "Keymap for `flymake-mode'.") +(defun flymake-show-buffer-diagnostics-at-event-line (event) + "Show diagnostics buffer on mouse click in the margin or fringe. +This uses two different approaches to work. +For margin it is set as a char property of the margin character directly. +While in the fringe it is set as part of the `flymake-mode-map'." + (interactive "e") + (when-let* ((diagnostics (flymake-diagnostics-at-mouse-event event t)) + (first-diag (car diagnostics))) + (with-selected-window (posn-window (event-end event)) + (with-current-buffer (window-buffer) + (when (or (< (point) (flymake-diagnostic-beg first-diag)) + (> (point) (flymake-diagnostic-end first-diag))) + (goto-char (flymake-diagnostic-beg first-diag))) + + (flymake-show-buffer-diagnostics first-diag))))) + +;; Set the fringe mouse-1 action directly and perform the filtering +;; latter iterating over the overlays. +(defvar-keymap flymake-mode-map + :doc "Keymap for `flymake-mode'." + (format "<%s> " flymake-fringe-indicator-position) + #'flymake-show-buffer-diagnostics-at-event-line) ;;;###autoload (define-minor-mode flymake-mode @@ -1616,6 +1630,28 @@ default) no filter is applied." t)) (flymake-goto-next-error (- (or n 1)) filter interactive)) +(defun flymake-diagnostics-at-mouse-event (event full-line) + "Get the flymake diagnostics for a position given by a mouse EVENT. +When FULL-LINE is not nil it gives all the diagnostics in the EVENT's +line. The function does not move the cursor position." + (mouse-minibuffer-check event) + (let* ((posn (event-end event)) + (pos (posn-point posn))) + (when (and (numberp pos) + (< pos (point-max))) ;; pos is == (point-max) when the click is after the buffer end. + (with-selected-window (posn-window posn) + (with-current-buffer (window-buffer) + (save-excursion + (goto-char pos) + (if full-line + (flymake-diagnostics (line-beginning-position) (line-end-position)) + (flymake-diagnostics pos (1+ pos))))))))) + +(defun flymake-show-buffer-diagnostics-at-event-position (event) + (interactive "e") + (flymake-show-buffer-diagnostics + (car (flymake-diagnostics-at-mouse-event event nil)))) + ;;; Mode-line and menu ;;; @@ -1624,7 +1660,7 @@ default) no filter is applied." [ "Go to next problem" flymake-goto-next-error t ] [ "Go to previous problem" flymake-goto-prev-error t ] [ "Check now" flymake-start t ] - [ "List all problems" flymake-show-buffer-diagnostics t ] + [ "List all problems" flymake-show-buffer-diagnostics-at-event-position t ] "--" [ "Go to log buffer" flymake-switch-to-log-buffer t ] [ "Turn off Flymake" flymake-mode t ])) @@ -1652,6 +1688,15 @@ Separating each of these with space is not necessary." :type 'string :version "29.1") +(defcustom flymake-after-show-buffer-diagnostics-hook '(flymake-pulse-momentary-highlight-region) + "Hook called after jumping to a diagnostic line. + +This hooks are called when `flymake-show-buffer-diagnostics' receives +the optional `diagnostic' argument and it matches an entry in the +diagnostic's buffer." + :type 'hook + :version "31.0") + (defvar flymake-mode-line-title '(:eval (flymake--mode-line-title)) "Mode-line construct to show Flymake's mode name and menu.") @@ -1822,6 +1867,17 @@ TYPE is usually keyword `:error', `:warning' or `:note'." (define-key map (kbd "SPC") 'flymake-show-diagnostic) map)) + +(defun flymake-pulse-momentary-highlight-region (&optional start end) + "Helper function to highlight region. +This uses the point `line-beginning-position' and `line-end-position' to +determine the optional START and END when the optional values are not +specified." + (pulse-momentary-highlight-region (or start (line-beginning-position)) + (or end (line-end-position)) + 'highlight)) + + (defun flymake-show-diagnostic (pos &optional other-window) "Show location of diagnostic at POS." (interactive (list (point) t)) @@ -1833,9 +1889,7 @@ TYPE is usually keyword `:error', `:warning' or `:note'." (end (flymake--diag-end diag)) (visit (lambda (b e) (goto-char b) - (pulse-momentary-highlight-region (point) - (or e (line-end-position)) - 'highlight)))) + (flymake-pulse-momentary-highlight-region b e)))) (with-current-buffer (cond ((bufferp locus) locus) (t (find-file-noselect locus))) (with-selected-window @@ -1969,7 +2023,7 @@ buffer." (define-obsolete-function-alias 'flymake-show-diagnostics-buffer 'flymake-show-buffer-diagnostics "1.2.1") -(defun flymake-show-buffer-diagnostics () +(defun flymake-show-buffer-diagnostics (&optional diagnostic) "Show a list of Flymake diagnostics for current buffer." (interactive) (unless flymake-mode @@ -1987,7 +2041,15 @@ buffer." `((display-buffer-reuse-window display-buffer-below-selected) (window-height . (lambda (window) - (fit-window-to-buffer window 10)))))))) + (fit-window-to-buffer window 10))))) + (when (and diagnostic flymake-after-show-buffer-diagnostics-hook) + (goto-char (point-min)) + (catch 'done + (while-let ((id (tabulated-list-get-id (point)))) + (if (eq (plist-get id :diagnostic) diagnostic) + (progn (run-hooks 'flymake-after-show-buffer-diagnostics-hook) + (throw 'done nil)) + (forward-line)))))))) ;;; Per-project diagnostic listing commit 37b8acf3781a65d397a946f621893b07a0960de0 Author: Michael Albinus Date: Thu Mar 27 17:48:20 2025 +0100 Handle better changed default-directory in shell-command * lisp/simple.el (shell-command): Kill buffer-local values of `shell-file-name' and `shell-command-switch', there could be left connection-local values. (Bug#76888) diff --git a/lisp/simple.el b/lisp/simple.el index e6577ffd646..7037158df8d 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -4715,6 +4715,9 @@ impose the use of a shell (with its need to quote arguments)." (with-current-buffer buffer (shell-command-save-pos-or-erase) (setq default-directory directory) + ;; There could be left connection-local values. (Bug#76888) + (kill-local-variable 'shell-file-name) + (kill-local-variable 'shell-command-switch) (require 'shell) (let ((process-environment (append commit f22af15aef96c95de35a37ee72d2055579d5b297 Author: Philipp Stephani Date: Thu Mar 27 14:07:39 2025 +0100 ; Reorder initialization of module environment functions. * src/emacs-module.c (initialize_environment): Reorder assignments to match declaration order in emacs-module.h. diff --git a/src/emacs-module.c b/src/emacs-module.c index 22590a23cb2..7797b04e026 100644 --- a/src/emacs-module.c +++ b/src/emacs-module.c @@ -1596,14 +1596,13 @@ initialize_environment (emacs_env *env, struct emacs_env_private *priv) env->make_float = module_make_float; env->copy_string_contents = module_copy_string_contents; env->make_string = module_make_string; - env->make_unibyte_string = module_make_unibyte_string; env->make_user_ptr = module_make_user_ptr; env->get_user_ptr = module_get_user_ptr; env->set_user_ptr = module_set_user_ptr; env->get_user_finalizer = module_get_user_finalizer; env->set_user_finalizer = module_set_user_finalizer; - env->vec_set = module_vec_set; env->vec_get = module_vec_get; + env->vec_set = module_vec_set; env->vec_size = module_vec_size; env->should_quit = module_should_quit; env->process_input = module_process_input; @@ -1615,6 +1614,7 @@ initialize_environment (emacs_env *env, struct emacs_env_private *priv) env->set_function_finalizer = module_set_function_finalizer; env->open_channel = module_open_channel; env->make_interactive = module_make_interactive; + env->make_unibyte_string = module_make_unibyte_string; return env; } commit 97fc54c693982d3dddf46cd2a79744375fe28470 Merge: 33a46ff5652 0cbe17cdb6b Author: Eli Zaretskii Date: Thu Mar 27 15:03:09 2025 +0200 Merge branch 'master' of git.savannah.gnu.org:/srv/git/emacs commit 33a46ff565296b491e808aa63d1dbaa2d994bbb5 Author: Cecilio Pardo Date: Thu Mar 27 13:26:00 2025 +0100 w32: fail gracefully when using invalid glyphs on DWrite * src/w32dwrite.c (text_extents_internal): Return false instead of crashing with bad glyph indexes. (Bug#77196) diff --git a/src/w32dwrite.c b/src/w32dwrite.c index 4dc65b15db7..10af8545a11 100644 --- a/src/w32dwrite.c +++ b/src/w32dwrite.c @@ -610,6 +610,14 @@ text_extents_internal (IDWriteFontFace *dwrite_font_face, nglyphs, gmetrics, false); + + /* E_INVALIDARG means some of the glyphs index is out of bounds for the font. */ + if (hr == E_INVALIDARG) + { + SAFE_FREE (); + return false; + } + if (!verify_hr (hr, "Failed to GetGdiCompatibleGlyphMetrics")) { SAFE_FREE (); commit 0cbe17cdb6b44606cfb831358ed83cdbf22a01e3 Author: Stefan Monnier Date: Thu Mar 27 08:59:06 2025 -0400 lisp/help-fns.el (help-fns--signature): Pretty print type diff --git a/lisp/help-fns.el b/lisp/help-fns.el index fd873759d02..cd5a0a6883f 100644 --- a/lisp/help-fns.el +++ b/lisp/help-fns.el @@ -760,17 +760,24 @@ the C sources, too." (high-doc (cdr high))) (unless (and (symbolp function) (get function 'reader-construct)) - (insert high-usage "\n") - (when-let* ((gate help-display-function-type) - (res (comp-function-type-spec function)) - (type-spec (car res)) - (kind (cdr res))) - (insert (format - (if (eq kind 'inferred) - "\nInferred type: %s\n" - "\nDeclared type: %s\n") - type-spec)))) + (insert high-usage "\n")) (fill-region fill-begin (point)) + (when-let* (help-display-function-type + (res (comp-function-type-spec function)) + (type-spec (car res)) + (kind (cdr res))) + (insert (if (eq kind 'inferred) + "\nInferred type:\n " + "\nDeclared type:\n ")) + (with-demoted-errors "%S" + (let ((beg (point))) + (pp type-spec (current-buffer)) + ;; Put it on a single line if it fits. + (and (eql beg (+ 2 (line-beginning-position 0))) + (save-excursion + (forward-char -1) + (<= (current-column) (- fill-column 12))) + (cl--set-buffer-substring (- beg 3) beg " "))))) high-doc))))) (defun help-fns--parent-mode (function) commit ba409f37125a4cf8b99718f9252f7804229663a2 Author: Yue Yi Date: Tue Mar 25 22:22:08 2025 -0400 peg.texi: Fix bug#76555 even a bit more * doc/lispref/peg.texi (Parsing Expression Grammars): Fix other part of the grammar of `define-peg-ruleset` example. diff --git a/doc/lispref/peg.texi b/doc/lispref/peg.texi index 193a7ca957e..d93b1f6df29 100644 --- a/doc/lispref/peg.texi +++ b/doc/lispref/peg.texi @@ -142,8 +142,8 @@ Define @var{name} as an identifier for @var{rules}. @group (define-peg-ruleset number-grammar ;; `digit' here references the definition above. - (number sign digit (* digit)) - (sign (or "+" "-" ""))) + (number () sign digit (* digit)) + (sign () (or "+" "-" ""))) @end group @end example commit 1d7fe589fad13595a0923bbd23939166f0ad639c Author: Yue Yi Date: Tue Mar 25 22:20:50 2025 -0400 peg.texi: Fix bug#76555 even a bit more * doc/lispref/peg.texi (Parsing Expression Grammars): Fix grammar of `define-peg-ruleset` example. diff --git a/doc/lispref/peg.texi b/doc/lispref/peg.texi index e03ec57a457..193a7ca957e 100644 --- a/doc/lispref/peg.texi +++ b/doc/lispref/peg.texi @@ -141,9 +141,9 @@ Define @var{name} as an identifier for @var{rules}. @example @group (define-peg-ruleset number-grammar - ;; `digit' here references the definition above. - '((number sign digit (* digit)) - (sign (or "+" "-" "")))) + ;; `digit' here references the definition above. + (number sign digit (* digit)) + (sign (or "+" "-" ""))) @end group @end example commit 1db7aaceb9fe9b78838ad06199e3fbba830737e9 Author: Stefan Monnier Date: Tue Mar 25 22:17:05 2025 -0400 PEG: Fix bug#76555 * doc/lispref/peg.texi (Parsing Expression Grammars): Fix `define-peg-ruleset` example. * lisp/progmodes/peg.el (define-peg-rule): Fix indent rule. diff --git a/doc/lispref/peg.texi b/doc/lispref/peg.texi index 80e2581e7bb..e03ec57a457 100644 --- a/doc/lispref/peg.texi +++ b/doc/lispref/peg.texi @@ -141,8 +141,8 @@ Define @var{name} as an identifier for @var{rules}. @example @group (define-peg-ruleset number-grammar + ;; `digit' here references the definition above. '((number sign digit (* digit)) - digit ;; A reference to the definition above. (sign (or "+" "-" "")))) @end group @end example diff --git a/lisp/progmodes/peg.el b/lisp/progmodes/peg.el index f8fc7acc436..e72c25acafc 100644 --- a/lisp/progmodes/peg.el +++ b/lisp/progmodes/peg.el @@ -369,7 +369,7 @@ defaults to `ignore'." "Define PEG rule NAME as equivalent to PEXS. The PEG expressions in PEXS are implicitly combined with the sequencing `and' operator of PEG grammars." - (declare (indent 1)) + (declare (indent 2)) (let ((inline nil)) (while (keywordp (car pexs)) (pcase (pop pexs) commit a702f29a00b0362b6060bbf4c83edcdc61b5fe32 Author: Eli Zaretskii Date: Thu Mar 27 13:52:22 2025 +0200 ; Fix package-version values * lisp/textmodes/rst.el (rst-compile-toolsets): * lisp/which-key.el (which-key-idle-delay): Fix package-version. diff --git a/lisp/textmodes/rst.el b/lisp/textmodes/rst.el index c06b50e10bf..be8b013863f 100644 --- a/lisp/textmodes/rst.el +++ b/lisp/textmodes/rst.el @@ -4181,7 +4181,7 @@ string)) to be used for converting the document." (const :tag "No options" nil) (string :tag "Options")))) :group 'rst-compile - :package-version "1.2.0") + :package-version '(rst . "1.2.0")) ;; FIXME: Must be defcustom. (defvar rst-compile-primary-toolset 'html diff --git a/lisp/which-key.el b/lisp/which-key.el index 25349ca91be..0ccae701689 100644 --- a/lisp/which-key.el +++ b/lisp/which-key.el @@ -62,7 +62,7 @@ A value of zero might lead to issues, so a non-zero value is recommended (see https://github.com/justbur/emacs-which-key/issues/134)." :type 'float - :package-version '(which-key "1.0") :version "30.1") + :package-version '(which-key . "1.0") :version "30.1") (defcustom which-key-idle-secondary-delay nil "Seconds to wait for which-key to pop up after initial display. commit a1fbc51dc715bf9eaa89b165f902eef9dd819077 Author: Eli Zaretskii Date: Thu Mar 27 13:49:10 2025 +0200 ; * lisp/which-key.el (which-key-idle-delay): Fix package-version. diff --git a/lisp/which-key.el b/lisp/which-key.el index 6ae8dcbb1f0..25349ca91be 100644 --- a/lisp/which-key.el +++ b/lisp/which-key.el @@ -62,7 +62,7 @@ A value of zero might lead to issues, so a non-zero value is recommended (see https://github.com/justbur/emacs-which-key/issues/134)." :type 'float - :package-version "1.0" :version "30.1") + :package-version '(which-key "1.0") :version "30.1") (defcustom which-key-idle-secondary-delay nil "Seconds to wait for which-key to pop up after initial display. commit 555ec43a32ea8f3675c5a9d73ca30609eeaa9013 Author: Alan Mackenzie Date: Thu Mar 27 10:24:48 2025 +0000 C++ Mode: Fix some indentation bugs. FIxes bug#19867 1. Fix closing paren aligning with trailing comment on line with matching open paren. 2. Fix indentation of first identifier inside a comma separated list aligning with the type rather than the subsequent identifiers. 3. Fix lambda expressions inside a brace list aligning like a single statement. * lisp/progmodes/cc-align.el (c-lineup-arglist): Take into account any preceding comments when lining up the arguments in the arglist. (c-lineup-arglist-intro-after-paren): Handle comments properly, and don't line up the closing parenthesis with a trailing comment on the first line. (c-lineup-item-after-paren-at-boi): Also allow a paren to count as being at BOI when it is preceded only by open parens on that line. (c-lineup-runin-statements, c-lineup-ObjC-method-call): Hanle comments better. * lisp/progmodes/cc-engine.el (c-forward-comments) Introduce an optional limit parameter. Use this limit in calls from cc-align.el and cc-mode.el. (c-just-after-func-arglist-p): Handle the presence of a protection keyword such as "public". (c-at-bracelist-p): Renamed from c-inside-bracelist-p, after dropping the accept-in-paren parameter, having removed its functionality. (c-looking-at-statement-block-1): New function, based on the old c-looking-at-statement-block. Enhanced to handle C++ lambda expressions, and to return the symbol `maybe' when the contents of a brace delimited block fail to determine whether it is a statement block. (c-looking-at-statement-block): Enhanced to examine the context of a brace delimited block when the contents are ambiguous. (c-looking-at-c++-lambda-expression): Check the character after point is a < before calling c-forward-<>-arglist. (c-add-stmt-syntax): Make the context more accurate by calling c-looking-at-statement-block. (c-guess-basic-syntax, CASE 5D.5): Replace the syntactic symbol topmost-intro-cont with the new symbol class-field-cont, additionally determining the position of the enclosing brace as an extra anchor point. (c-guess-basic-syntax, CASE 5V): New case for an identifier following a type inside class braces. (c-guess-basic-syntax, CASE 9): Use c-looking-at-statement-block to detect a brace list more accurately. * lisp/progmodes/cc-fonts.el (c-get-fontification-context): Rename the call to c-inside-bracelist-p to c-at-bracelist-p. * lisp/progmodes/cc-langs.el (c-protection-kwds): Add an entry for java-mode. (c-stmt-block-only-keywords-regexp): Prevent this regexp also matching a character preceding the keyword. * /lisp/progmodes/cc-mode.el (c-before-change-include-<>) (c-after-change-include-<>): Use the new limit argument to c-forward-comments. * lisp/progmodes/cc-styles.el (c-style-alist, "gnu" and "java" styles): Change the offset for arglist-close to c-lineup-arglist-close-under-paren. * lisp/progmodes/cc-vars.el (c-offsets-alist): Introduce the new syntactic symbol class-field-cont, giving it default offset +. * doc/misc/cc-mode.texi (Syntactic Symbols, Class Symbols): Document the new syntactic symbol class-field-cont. diff --git a/doc/misc/cc-mode.texi b/doc/misc/cc-mode.texi index 566da9dad3d..4528ea42151 100644 --- a/doc/misc/cc-mode.texi +++ b/doc/misc/cc-mode.texi @@ -4316,6 +4316,9 @@ annotations. @ref{Java Symbols}. First line in a member initialization list. @ref{Class Symbols}. @item member-init-cont Subsequent member initialization list lines. @ref{Class Symbols}. +@item class-field-cont +Lines continuing the first line inside a class/struct etc. definition. +@ref{Class Symbols}. @item inher-intro First line of a multiple inheritance list. @ref{Class Symbols}. @item inher-cont @@ -4669,6 +4672,25 @@ elements: The @code{friend} and @code{inline-open} syntactic symbols are modifiers that do not have anchor positions. +@ssindex class-field-cont +In the following example, line 1 gets the syntax @code{topmost-intro}, +and line 2 @code{((inclass 1) (topmost-intro 1))} as expected. Lines +3, 4, and 5 are given the syntax @code{(class-field-cont 18 12)} +rather than @code{topmost-intro-cont}. This makes it easier to indent +several comma separated fields with respect to their defining type, +when @code{topmost-intro-cont} would tend to leave elements directly +underneath their type. @xref{Function Symbols}. The anchor points are +the positions of the type and the enclosing class's brace. + +@example + 1. struct foo @{ + 2. long + 3. a, + 4. b, + 5. c; + 6. @}; +@end example + @ssindex template-args-cont Template definitions introduce yet another syntactic symbol: diff --git a/lisp/progmodes/cc-align.el b/lisp/progmodes/cc-align.el index f592581643c..da276f29603 100644 --- a/lisp/progmodes/cc-align.el +++ b/lisp/progmodes/cc-align.el @@ -131,7 +131,7 @@ Works with: topmost-intro-cont." ;; in-expression constructs. This can both save the work that we ;; have to do below, and it also detect the brace list constructs ;; that `c-looking-at-inexpr-block' currently misses (they are - ;; recognized by `c-inside-bracelist-p' instead). + ;; recognized by `c-at-bracelist-p' instead). (assq 'inexpr-class c-syntactic-context) (assq 'inexpr-statement c-syntactic-context) (assq 'inlambda c-syntactic-context) @@ -188,7 +188,12 @@ indent such cases this way. Works with: arglist-cont-nonempty, arglist-close." (save-excursion - (let ((indent-pos (point))) + (let ((indent-pos (point)) + (ws-length (save-excursion + (back-to-indentation) + (let ((ind-col (current-column))) + (c-forward-comments (c-point 'eol)) + (- (current-column) ind-col))))) (if (c-block-in-arglist-dwim (c-langelem-2nd-pos c-syntactic-element)) c-basic-offset ; DWIM case. @@ -205,8 +210,10 @@ Works with: arglist-cont-nonempty, arglist-close." (c-forward-syntactic-ws) (when (< (point) indent-pos) (goto-char arglist-content-start) - (skip-chars-forward " \t")) - (vector (current-column))))))) + (c-forward-comments (c-point 'eol)) + (if (eolp) + (goto-char arglist-content-start))) + (vector (- (current-column) ws-length))))))) (defun c-lineup-argcont-1 (elem) ;; Move to the start of the current arg and return non-nil, otherwise @@ -307,19 +314,27 @@ or brace block. Works with: defun-block-intro, brace-list-intro, enum-intro statement-block-intro, statement-case-intro, arglist-intro." (save-excursion + (let ((ws-length (save-excursion + (back-to-indentation) + (let ((ind-col (current-column))) + (c-forward-comments (c-point 'eol)) + (- (current-column) ind-col))))) (beginning-of-line) (backward-up-list 1) (forward-char) - (skip-chars-forward " \t" (c-point 'eol)) - (if (eolp) (skip-chars-backward " \t")) - (vector (current-column)))) + (let ((after-paren-pos (point))) + (c-forward-comments (c-point 'eol)) + (if (eolp) + (goto-char after-paren-pos))) + (vector (- (current-column) ws-length))))) (defun c-lineup-item-after-paren-at-boi (_langelem) - "Line up a *-cont line to just after the surrounding open paren at boi. -\"paren\" here can also mean \"brace\", etc. We line up under the first -non-whitespace text after the paren. If there is no such paren, or no -such text, return nil, allowing another function to handle the -construct. + "Line up to just after the surrounding open paren at boi. +This also works when there are only open parens between the surrounding +paren and boi. \"paren\" here can also mean \"brace\", etc. We line up +under the first non-whitespace text after the paren. If there is no +such paren, or no such text, return nil, allowing another function to +handle the construct. Works with: brace-list-intro, enum-intro, constraint-cont." (save-excursion @@ -331,8 +346,10 @@ Works with: brace-list-intro, enum-intro, constraint-cont." t) ;; constraint-cont. (c-go-up-list-backward nil (c-langelem-pos c-syntactic-element))) - (eq (point) (c-point 'boi)) (looking-at "\\s(") + (save-excursion + (skip-syntax-backward " \t([{" (c-point 'boi)) + (eq (point) (c-point 'boi))) (progn (forward-char) (c-forward-syntactic-ws (c-point 'eol)) (unless (eolp) @@ -487,11 +504,12 @@ Works with: inher-cont, member-init-cont." (c-backward-syntactic-ws)) (c-syntactic-re-search-forward ":" eol 'move) - (if (looking-at c-syntactic-eol) - (c-forward-syntactic-ws here) - (if (eq char-after-ip ?,) - (backward-char) - (skip-chars-forward " \t" eol))) + (cond + ((looking-at c-syntactic-eol) + (c-forward-syntactic-ws here)) + ((eq char-after-ip ?,) + (backward-char)) + (t (c-forward-comments eol))) (if (< (point) here) (vector (current-column))) ))) @@ -771,7 +789,7 @@ Works with: The `statement' syntactic symbol." (if (c-langelem-pos langelem) (goto-char (c-langelem-pos langelem))) (forward-char 1) - (skip-chars-forward " \t") + (c-forward-comments (c-point 'eol)) (unless (eolp) (vector (current-column)))))) @@ -1001,11 +1019,10 @@ Works with: objc-method-call-cont." (target-col (progn (forward-char) (c-forward-sexp) - (skip-chars-forward " \t") + (c-forward-comments (c-point 'eol)) (if (eolp) (+ open-bracket-col c-basic-offset) - (current-column)))) - ) + (current-column))))) (- target-col open-bracket-col extra)))) (defun c-lineup-ObjC-method-call-colons (langelem) diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index 5603d238b4f..11652c5223d 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -1651,26 +1651,30 @@ This function does not do any hidden buffer changes." t)))) -(defsubst c-forward-comments () +(defsubst c-forward-comments (&optional lim) "Move forward past all following whitespace and comments. -Line continuations, i.e. a backslashes followed by line breaks, are -treated as whitespace. +Line continuations, i.e. backslashes followed by line breaks, are +treated as whitespace. LIM, if non-nil, is a forward search limit. +If LIM is inside a comment, point may be left at LIM. Note that this function might do hidden buffer changes. See the comment at the start of cc-engine.el for more info." - (while (or - ;; If forward-comment in at least XEmacs 21 is given a large - ;; positive value, it'll loop all the way through if it hits - ;; eob. - (and (forward-comment 5) - ;; Some emacsen (e.g. XEmacs 21) return t when moving - ;; forwards at eob. - (not (eobp))) - - (when (looking-at "\\\\[\n\r]") - (forward-char 2) - t)))) + (save-restriction + (if lim + (narrow-to-region (point-min) lim)) + (while (or + ;; If forward-comment in at least XEmacs 21 is given a large + ;; positive value, it'll loop all the way through if it hits + ;; eob. + (and (forward-comment 5) + ;; Some emacsen (e.g. XEmacs 21) return t when moving + ;; forwards at eob. + (not (eobp))) + + (when (looking-at "\\\\[\n\r]") + (forward-char 2) + t))))) (defmacro c-forward-comment-minus-1 () "Call (forward-comment -1), taking care of escaped newlines. @@ -12139,6 +12143,9 @@ comment at the start of cc-engine.el for more info." (save-restriction (widen) (c-beginning-of-macro lim))))) + (progn (if (looking-at c-protection-key) + (c-forward-token-2)) + t) (setq id-start (car-safe (c-forward-decl-or-cast-1 (c-point 'bosws) 'top nil))) (numberp id-start) @@ -13380,18 +13387,18 @@ comment at the start of cc-engine.el for more info." (setq ptr (cdr ptr))) (nreverse new))) -(defun c-inside-bracelist-p (containing-sexp paren-state accept-in-paren) - ;; Return the buffer position of the beginning of the brace list statement - ;; if CONTAINING-SEXP is inside a brace list, otherwise return nil. +(defun c-at-bracelist-p (containing-sexp paren-state) + ;; Try to return the buffer position of the beginning of the brace list + ;; statement whose brace block begins at CONTAINING-SEXP, otherwise return + ;; nil. If the code cannot determine whether we're at a brace block, return + ;; nil. ;; - ;; CONTAINING-SEXP must be at an open brace, and is the buffer pos of the - ;; innermost containing brace. NO IT ISN'T!!! [This function is badly + ;; CONTAINING-SEXP must be at an open brace. [This function is badly ;; designed, and probably needs reformulating without its first argument, ;; and the critical position being at point.] ;; - ;; PAREN-STATE is the remainder of the state of enclosing braces. - ;; ACCEPT-IN-PAREN is non-nil iff we will accept as a brace list a brace - ;; directly enclosed in a parenthesis. + ;; PAREN-STATE is the state of enclosing braces at CONTAINING-SEXP (see + ;; `c-parse-state'). ;; ;; The "brace list" here is recognized solely by its context, not by ;; its contents. @@ -13429,7 +13436,7 @@ comment at the start of cc-engine.el for more info." (setq current-brace next-containing)))) (cond ((consp bufpos) - (and (or accept-in-paren (not (eq (cdr bufpos) 'in-paren))) + (and (not (eq (cdr bufpos) 'in-paren)) (car bufpos))) (non-brace-pos ;; We've encountered a ( or a [. Remove the "middle part" of @@ -13514,11 +13521,17 @@ comment at the start of cc-engine.el for more info." (cons (list beg) type))))) (error nil)))) -(defun c-looking-at-statement-block () - ;; Point is at an opening brace. If this is a statement block (i.e. the - ;; elements in the block are terminated by semicolons, or the block is - ;; empty, or the block contains a characteristic keyword, or there is a - ;; nested statement block) return non-nil. Otherwise, return nil. +(defun c-looking-at-statement-block-1 () + ;; Point is at an opening brace. Try to determine whether it starts a + ;; statement block. For example, if there are elements in the block + ;; terminated by semicolons, or the block contains a characteristic keyword, + ;; or a nested brace block is a statement block, return t. If we determine + ;; the block cannot be a statement block, return nil. Otherwise return the + ;; symbol `maybe'. + ;; + ;; The calculations are based solely on the contents of the block, not on + ;; its context. There is special handling for C++ lambda expressions, which + ;; sometimes occur in brace blocks. (let ((here (point))) (prog1 (if (c-go-list-forward) @@ -13528,26 +13541,142 @@ comment at the start of cc-engine.el for more info." (cond ((eq (char-before) ?\;)) ((progn (c-forward-syntactic-ws) - (eq (point) (1- there)))) + (eq (point) (1- there))) + 'maybe) ((c-syntactic-re-search-forward - c-stmt-block-only-keywords-regexp there t)) - ((c-syntactic-re-search-forward "{" there t t) - (backward-char) - (c-looking-at-statement-block)) - (t nil))) + c-stmt-block-only-keywords-regexp there t t) + t) + ((c-major-mode-is 'c++-mode) + (catch 'statement + (while + (and (c-syntactic-re-search-forward "[[{]" there 'bound t) + (progn + (backward-char) + (cond + ((eq (char-after) ?\[) + (let ((bb (c-looking-at-c++-lambda-expression))) + (if bb + (c-go-list-forward bb there) + (forward-char) + t))) + ((eq (c-looking-at-statement-block-1) t) + (throw 'statement t)) + (t (c-go-list-forward) + t))))) + 'maybe)) + (t (catch 'statement2 + (while + (and (c-syntactic-re-search-forward "{" there t t) + (progn + (backward-char) + (if (eq (c-looking-at-statement-block-1) t) + (throw 'statement2 t) + (c-go-list-forward))))) + 'maybe)))) (forward-char) (cond ((c-syntactic-re-search-forward ";" nil t t)) ((progn (c-forward-syntactic-ws) - (eobp))) + (eobp)) + 'maybe) ((c-syntactic-re-search-forward c-stmt-block-only-keywords-regexp - nil t t)) - ((c-syntactic-re-search-forward "{" nil t t) - (backward-char) - (c-looking-at-statement-block)) - (t nil))) + nil t t) + t) + ((c-major-mode-is 'c++-mode) + (catch 'statement1 + (while + (and (c-syntactic-re-search-forward "[[}]" nil 'bound t) + (progn + (backward-char) + (cond + ((eq (char-after) ?\[) + (let ((bb (c-looking-at-c++-lambda-expression))) + (cond ((and bb (c-go-list-forward bb))) + (bb (throw 'statement1 'maybe)) + (t (forward-char) t)))) + ((eq (c-looking-at-statement-block-1) t) + (throw 'statement1 t)) + ((c-go-list-forward)) + (t (throw 'statement1 'maybe)))))) + nil)) + (t (catch 'statement3 + (while + (and (c-syntactic-re-search-forward "{" nil t t) + (progn + (backward-char) + (if (eq (c-looking-at-statement-block-1) t) + (throw 'statement3 t) + (c-go-list-forward))))) + 'maybe)))) (goto-char here)))) +(defun c-looking-at-statement-block () + ;; Point is at an opening brace. If this brace starts a statement block, + ;; return t. Otherwise return nil. + ;; + ;; This function first examines the contents of the block beginning at the + ;; brace, and if this fails to give a definite result, it examines the + ;; context of the block. + (save-excursion + (let ((res (c-looking-at-statement-block-1)) + prev-tok) + (cond + ((memq res '(nil t)) + res) + ((zerop (c-backward-token-2)) + (setq prev-tok (point)) + (cond + ((looking-at "={]") + nil) + ((progn + (if (looking-at c-type-decl-suffix-ws-ids-key) ; e.g. C++'s "final". + (c-backward-token-2)) + (if (and c-recognize-<>-arglists ; Skip back over template parens. + (eq (char-after) ?>) + (c-go-up-list-backward)) + (c-backward-token-2)) + (and c-opt-block-decls-with-vars-key ; E.g. "enum", "class". + (or (looking-at c-opt-block-decls-with-vars-key) + (save-excursion + (and (c-on-identifier) + (zerop (c-backward-token-2)) + (looking-at c-opt-block-decls-with-vars-key))))))) + ((eq (char-after) ?})) ; Statement block following another one. + ((eq (char-after) ?:) ; Case label or ordinary label. + (save-excursion + (forward-char) + (eq (c-beginning-of-statement-1 nil nil t) 'label))) + ((save-excursion ; Between function arglist and block. + (c-just-after-func-arglist-p)) + t) + ((save-excursion ; Just after C++ class member initializations. + (and (eq (char-after) ?\)) + (progn (forward-char) + (c-back-over-member-initializer-braces))))) + ((and (eq (char-after) ?\)) + (c-go-up-list-backward)) + (prog1 + (cond + ((save-excursion + (and (zerop (c-backward-token-2)) ; Parens of an `if', etc.? + (looking-at c-block-stmt-2-key)))) + ((save-excursion ; Between function arglist and block. + (c-just-after-func-arglist-p)) + t) + ((progn ; A function call or declaration. + (c-backward-syntactic-ws) + (c-on-identifier)) + t)) + (goto-char prev-tok))) + ((eq (char-after) ?\;)) ; Bare statement block. + ((looking-at c-block-stmt-1-key)) ; E.g. "do", "else". + ((eq (char-after) ?\() + (and (zerop (c-backward-token-2)) + (or (looking-at c-operator-re) ; Statement expression. + (looking-at c-block-stmt-2-key)))) ; E.g. "if", "catch". + (t nil))) + (t nil))))) + (defun c-forward-concept-fragment (&optional limit stop-at-end) ;; Are we currently at the "concept" keyword in a concept construct? If so ;; we return the position of the first constraint expression following the @@ -13869,7 +13998,8 @@ comment at the start of cc-engine.el for more info." (when (and (c-looking-at-c++-lambda-capture-list) (c-go-list-forward nil lim)) (c-forward-syntactic-ws lim) - (when (c-forward-<>-arglist t) + (when (and (eq (char-after) ?<) + (c-forward-<>-arglist t)) (c-forward-syntactic-ws lim) (when (looking-at c-requires-clause-key) (c-forward-c++-requires-clause lim nil))) @@ -14240,7 +14370,9 @@ comment at the start of cc-engine.el for more info." ((or (not (eq step-type 'same)) (eq paren-pos (point))) (if (and (eq paren-pos (point)) - (c-inside-bracelist-p paren-pos paren-state nil)) + (or + (c-at-bracelist-p paren-pos paren-state) + (not (c-looking-at-statement-block)))) (c-add-syntax 'brace-list-intro nil anchor-point-2) (c-add-syntax 'statement-block-intro nil))) ((save-excursion @@ -14259,7 +14391,7 @@ comment at the start of cc-engine.el for more info." (max (c-point 'boi paren-pos) (point)))) ((c-at-enum-brace paren-pos) (c-add-syntax 'enum-intro nil anchor-point-2)) - ((c-inside-bracelist-p paren-pos paren-state nil) + ((c-at-bracelist-p paren-pos paren-state) (if (save-excursion (goto-char paren-pos) (c-looking-at-statement-block)) @@ -14269,9 +14401,11 @@ comment at the start of cc-engine.el for more info." (goto-char paren-pos) (setq bspec (c-looking-at-or-maybe-in-bracelist containing-sexp containing-sexp)) - (and (consp bspec) - (eq (cdr bspec) 'in-paren))) - (c-add-syntax 'brace-list-intro (car bspec) + (or (and (eq bspec t) + (not (c-looking-at-statement-block))) + (and (consp bspec) + (eq (cdr bspec) 'in-paren)))) + (c-add-syntax 'brace-list-intro (car-safe bspec) anchor-point-2)) (t (c-add-syntax 'defun-block-intro nil)))) @@ -14364,9 +14498,8 @@ comment at the start of cc-engine.el for more info." ;; CASE B.2: brace-list-open ((or (consp special-brace-list) - (c-inside-bracelist-p (point) - (cons containing-sexp paren-state) - nil)) + (c-at-bracelist-p (point) + (cons containing-sexp paren-state))) ;; The most semantically accurate symbol here is ;; brace-list-open, but we normally report it simply as a ;; statement-cont. The reason is that one normally adjusts @@ -15287,15 +15420,33 @@ comment at the start of cc-engine.el for more info." (< (point) placeholder))) (c-add-stmt-syntax (cond - ((eq (point) placeholder) 'statement) ; unrecognized construct + ((eq (point) placeholder) + (setq placeholder nil) + 'statement) ; unrecognized construct ;; A preceding comma at the top level means that a ;; new variable declaration starts here. Use ;; topmost-intro-cont for it, for consistency with ;; the first variable declaration. C.f. case 5N. - ((eq char-before-ip ?,) 'topmost-intro-cont) - (t 'statement-cont)) - nil nil containing-sexp paren-state)) - )) + ((eq char-before-ip ?,) + (if (save-excursion + (and + containing-sexp + (progn (goto-char containing-sexp) t) + (eq (char-after) ?{) + (setq placeholder (point)) + (eq (c-beginning-of-statement-1 + (or (c-most-enclosing-brace paren-state) + (c-determine-limit 500))) + 'same) + (looking-at c-class-key))) + 'class-field-cont + (setq placeholder nil) + 'topmost-intro-cont)) + (t + (setq placeholder nil) + 'statement-cont)) + (and placeholder (list placeholder)) + nil containing-sexp paren-state)))) ;; CASE 5G: we are looking at the brace which closes the ;; enclosing nested class decl @@ -15507,6 +15658,23 @@ comment at the start of cc-engine.el for more info." (goto-char placeholder))) (c-add-syntax 'annotation-top-cont (c-point 'boi tmp-pos2))) + ;; CASE 5V: Identifier following type inside class braces. + ((save-excursion + (and + containing-sexp + (eq (c-beginning-of-statement-1 containing-sexp nil nil t) 'same) + (setq placeholder (point)) + (progn (goto-char containing-sexp) t) + (eq (c-beginning-of-statement-1 + (or (c-most-enclosing-brace paren-state) + (c-determine-limit 500))) + 'same) + (looking-at c-class-key) + (progn (goto-char placeholder) t) + (eq (car (c-forward-decl-or-cast-1 (1+ containing-sexp) 'top nil)) + (c-point 'boi indent-point)))) + (c-add-syntax 'class-field-cont placeholder containing-sexp)) + ;; CASE 5M: we are at a topmost continuation line (t (c-beginning-of-statement-1 @@ -15617,9 +15785,8 @@ comment at the start of cc-engine.el for more info." (progn (setq placeholder (or (setq enum-pos (c-at-enum-brace)) - (c-inside-bracelist-p (point) - paren-state - nil))) + (c-at-bracelist-p (point) + paren-state))) (if placeholder (setq tmpsymbol `(,(if enum-pos 'enum-open 'brace-list-open) @@ -15747,7 +15914,10 @@ comment at the start of cc-engine.el for more info." (goto-char containing-sexp) (c-looking-at-special-brace-list))) (setq enum-pos (c-at-enum-brace containing-sexp)) - (c-inside-bracelist-p containing-sexp paren-state t)))) + (c-at-bracelist-p containing-sexp paren-state) + (save-excursion + (goto-char containing-sexp) + (not (c-looking-at-statement-block)))))) (cond ;; CASE 9A: In the middle of a special brace list opener. ((and (consp special-brace-list) diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el index 493f6dcebb2..ac5a32f704f 100644 --- a/lisp/progmodes/cc-fonts.el +++ b/lisp/progmodes/cc-fonts.el @@ -1273,9 +1273,8 @@ casts and declarations are fontified. Used on level 2 and higher." ;; We're inside a brace list/enum list. ((and (eq (char-before match-pos) ?{) (or (c-at-enum-brace (1- match-pos)) - (c-inside-bracelist-p (1- match-pos) - (cdr (c-parse-state)) - nil))) + (c-at-bracelist-p (1- match-pos) + (cdr (c-parse-state))))) (c-put-char-property (1- match-pos) 'c-type 'c-not-decl) (cons 'not-decl nil)) diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el index 8fee8af2fcf..17fb51aaeac 100644 --- a/lisp/progmodes/cc-langs.el +++ b/lisp/progmodes/cc-langs.el @@ -2907,12 +2907,12 @@ one of `c-type-list-kwds', `c-ref-list-kwds', (c-lang-defconst c-protection-kwds "Access protection label keywords in classes." t nil - c++ '("private" "protected" "public") + (c++ java) '("private" "protected" "public") objc '("@private" "@protected" "@package" "@public" "@required" "@optional")) (c-lang-defconst c-protection-key - ;; A regexp match an element of `c-protection-kwds' cleanly. + ;; A regexp matching an element of `c-protection-kwds' cleanly. t (c-make-keywords-re t (c-lang-const c-protection-kwds))) (c-lang-defvar c-protection-key (c-lang-const c-protection-key)) @@ -3547,7 +3547,7 @@ Note that Java specific rules are currently applied to tell this from (c-lang-defconst c-stmt-block-only-keywords-regexp ;; A regexp matching a keyword in `c-stmt-block-only-keywords'. Such a ;; match can start and end only at token boundaries. - t (concat "\\(^\\|\\=\\|[^" (c-lang-const c-symbol-chars) "]\\)" + t (concat "\\(\\<\\|\\=\\)" (c-make-keywords-re t (c-lang-const c-stmt-block-only-keywords)))) (c-lang-defvar c-stmt-block-only-keywords-regexp (c-lang-const c-stmt-block-only-keywords-regexp)) diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el index a92be508a65..efeb6c1005a 100644 --- a/lisp/progmodes/cc-mode.el +++ b/lisp/progmodes/cc-mode.el @@ -2047,9 +2047,7 @@ This function is used solely as a member of (while (and (< (point) search-end) (search-forward-regexp c-cpp-include-key search-end 'bound) (setq hash-pos (match-beginning 0))) - (save-restriction - (narrow-to-region (point-min) (c-point 'eoll)) - (c-forward-comments)) + (c-forward-comments (c-point 'eoll)) (when (and (< (point) search-end) (looking-at "\\s(") (looking-at "\\(<\\)[^>\n\r]*\\(>\\)?") @@ -2081,9 +2079,7 @@ This function is used solely as a member of (while (and (< (point) search-end) (search-forward-regexp c-cpp-include-key search-end 'bound) (setq hash-pos (match-beginning 0))) - (save-restriction - (narrow-to-region (point-min) (c-point 'eoll)) - (c-forward-comments)) + (c-forward-comments (c-point 'eoll)) (when (and (< (point) search-end) (looking-at "\\(<\\)[^>\n\r]*\\(>\\)") (not (cdr (c-semi-pp-to-literal (match-beginning 0))))) diff --git a/lisp/progmodes/cc-styles.el b/lisp/progmodes/cc-styles.el index bbb540da3f3..275d28a1209 100644 --- a/lisp/progmodes/cc-styles.el +++ b/lisp/progmodes/cc-styles.el @@ -65,7 +65,7 @@ (statement-case-open . +) (statement-cont . +) (arglist-intro . c-lineup-arglist-intro-after-paren) - (arglist-close . c-lineup-arglist) + (arglist-close . c-lineup-arglist-close-under-paren) (inline-open . 0) (brace-list-open . +) (brace-list-intro . (first @@ -230,7 +230,7 @@ (statement-case-open . +) (statement-cont . +) (arglist-intro . c-lineup-arglist-intro-after-paren) - (arglist-close . c-lineup-arglist) + (arglist-close . c-lineup-arglist-close-under-paren) (brace-list-intro . (first c-lineup-2nd-brace-entry-in-arglist c-lineup-class-decl-init-+ +)) diff --git a/lisp/progmodes/cc-vars.el b/lisp/progmodes/cc-vars.el index 0687801d69f..2b62ace76bf 100644 --- a/lisp/progmodes/cc-vars.el +++ b/lisp/progmodes/cc-vars.el @@ -292,6 +292,7 @@ Here is the current list of valid syntactic element symbols: defun-block-intro -- The first line in a top-level defun. class-open -- Brace that opens a class definition. class-close -- Brace that closes a class definition. + class-field-cont -- Continuation of first line inside a class. inline-open -- Brace that opens an in-class inline method. inline-close -- Brace that closes an in-class inline method. func-decl-cont -- The region between a function definition's @@ -1301,6 +1302,9 @@ can always override the use of `c-default-style' by making calls to ;; Anchor pos: Boi at the func decl arglist open. (member-init-cont . c-lineup-multi-inher) ;; Anchor pos: Beg of the first member init. + (class-field-cont . +) + ;; Anchor pos: BOI of the line containing the class keyword. + ;; 2nd pos: At the open brace. (inher-intro . +) ;; Anchor pos: Boi at the class decl start. (inher-cont . c-lineup-multi-inher) commit 27c41d026f79ebc46fc8fe202836be0fd375bc1b Author: Juri Linkov Date: Thu Mar 27 09:33:45 2025 +0200 * lisp/treesit-x.el: Remove unnecessary treesit-generic-mode. (treesit-generic-mode-list): Remove variable. (define-treesit-generic-mode): Remove docstring text about hook that is already added by 'define-derived-mode'. (treesit-generic-mode): Remove command. diff --git a/lisp/treesit-x.el b/lisp/treesit-x.el index 538f9df5b8e..cd2a1f8845b 100644 --- a/lisp/treesit-x.el +++ b/lisp/treesit-x.el @@ -41,12 +41,6 @@ ;;; Define treesit generic mode -;;;###autoload -(defvar treesit-generic-mode-list nil - "A list of mode names for `treesit-generic-mode'. -Do not add entries to this list directly; use `define-treesit-generic-mode' -instead (which see).") - ;;;###autoload (defmacro define-treesit-generic-mode (mode &optional docstring &rest body) "Create a new treesit generic mode MODE. @@ -122,9 +116,6 @@ of `define-treesit-generic-mode'. ;; Add lang and source to source-alist. (add-to-list 'treesit-language-source-alist (cons ,lang ,source)) - ;; Add a new entry. - (add-to-list 'treesit-generic-mode-list ,mode-name) - ;; Add it to auto-mode-alist (dolist (re ,auto-mode) (add-to-list 'auto-mode-alist (cons re ',mode))) @@ -134,8 +125,7 @@ of `define-treesit-generic-mode'. ,(or name pretty-name) ,(or docstring (concat (or name pretty-name) " mode.\n" - "This a tree-sitter mode defined with `define-treesit-generic-mode'.\n" - "It runs `" mode-name "-hook' as the last thing it does.")) + "This a tree-sitter mode defined with `define-treesit-generic-mode'.")) (treesit-generic-mode-setup ,lang ,source) ,@body (treesit-major-mode-setup))))) @@ -161,20 +151,6 @@ of `define-treesit-generic-mode'. query)) (setq-local treesit-font-lock-feature-list '((highlights)))))) -;;;###autoload -(defun treesit-generic-mode (mode) - "Enter treesit generic mode MODE. - -Treesit generic modes provide basic font-lock functionality for -tree-sitter grammars. (Files which are too small to warrant their -own mode, but have comments, keywords, and the like.) - -To define a generic mode, use the function `define-treesit-generic-mode'. -Some treesit generic modes are defined in `treesit-x.el'." - (interactive - (list (completing-read "Treesit generic mode: " treesit-generic-mode-list nil t))) - (funcall (intern mode))) - ;;; Generic font-lock handling (defvar treesit-generic-mode-font-lock-map commit 1883a5c7174eeede8fe307e73014628edca6b614 Author: Gerd Möllmann Date: Thu Mar 27 06:10:46 2025 +0100 Don't write to bottom-right cell on ttys with AutoWrap (bug#77233) * src/term.c (tty_write_glyphs): Handle case of writing only one character in the last column. diff --git a/src/term.c b/src/term.c index 864f86aa730..8aa47322d19 100644 --- a/src/term.c +++ b/src/term.c @@ -977,10 +977,20 @@ tty_write_glyphs (struct frame *f, struct glyph *string, int len) if (AutoWrap (tty) && curY (tty) + 1 == FRAME_TOTAL_LINES (f) && curX (tty) + len == FRAME_COLS (f) - && curX (tty) < FRAME_COLS (f) - 1 && len > 0) { - /* Write glyphs except the first. */ + /* If writing only one glyph in the last column, make that two so + that we can shift that one glyph into the last column. FIXME: + Assuming a display width of 1 looks questionable, but that's + done everywhere else involving auto-wrap. */ + if (len == 1) + { + cmgoto (tty, curY (tty), curX (tty) - 1); + --string; + ++len; + } + + /* Write glyphs except the first. */ int old_x = curX (tty), old_y = curY (tty); tty_write_glyphs_1 (f, string + 1, len - 1); commit c00170e92c5c3f68734e0e2d632d6efdcbb9c969 Author: Stefan Kangas Date: Wed Mar 26 21:39:18 2025 +0100 Signal user-error in info--ensure-not-in-directory-node * lisp/info.el (info--ensure-not-in-directory-node): Change from 'error' to 'user-error' to reduce 'debug-on-error' frustration. diff --git a/lisp/info.el b/lisp/info.el index 82786bb24df..b314a7d77a7 100644 --- a/lisp/info.el +++ b/lisp/info.el @@ -3475,9 +3475,9 @@ If FILE is nil, check the current Info file." (defun info--ensure-not-in-directory-node () (if (equal (downcase (file-name-nondirectory Info-current-file)) "dir") - (error (substitute-command-keys - (concat "The Info directory node has no index; " - "type \\[Info-menu] to select a manual"))))) + (user-error (substitute-command-keys + (concat "The Info directory node has no index; " + "type `\\[Info-menu]' to select a manual"))))) ;;;###autoload (defun Info-index (topic) commit 1e68351d56918cd4d7883bcff629f794660a3134 Author: Eli Zaretskii Date: Wed Mar 26 19:04:16 2025 +0200 Fix vertical cursor motion with wide images and line numbers * src/xdisp.c (produce_image_glyph): When cropping an image that exceeds the window's right edge, account for the screen estate taken by line-number display. (Bug#77217) diff --git a/src/xdisp.c b/src/xdisp.c index 4e8bb7d9b97..f2b158f00e3 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -31956,12 +31956,14 @@ produce_image_glyph (struct it *it) word-wrap, unless the image starts at column zero, because wrapping correctly needs the real pixel width of the image. */ if ((it->line_wrap != WORD_WRAP - || it->hpos == 0 + || it->hpos == (0 + (it->lnum_width ? it->lnum_width + 2 : 0)) /* Always crop images larger than the window-width, minus 1 space. */ - || it->pixel_width > it->last_visible_x - FRAME_COLUMN_WIDTH (it->f)) + || it->pixel_width > (it->last_visible_x - it->lnum_pixel_width + - FRAME_COLUMN_WIDTH (it->f))) && (crop = it->pixel_width - (it->last_visible_x - it->current_x), crop > 0) - && (it->hpos == 0 || it->pixel_width > it->last_visible_x / 4)) + && (it->hpos == (0 + (it->lnum_width ? it->lnum_width + 2 : 0)) + || it->pixel_width > it->last_visible_x / 4)) { it->pixel_width -= crop; slice.width -= crop; commit 8f7790a95ecd88efec97417f1a3b51ba9da5e287 Author: Po Lu Date: Wed Mar 26 20:46:54 2025 +0800 ; Remove obsolete file `java/incrementing-version-code'. diff --git a/java/incrementing-version-code b/java/incrementing-version-code deleted file mode 100644 index e69de29bb2d..00000000000 commit 3d5def2677c62aa017b675ced18c9bac2697c439 Author: Eli Zaretskii Date: Wed Mar 26 14:31:41 2025 +0200 ; Fix OOM kill in ert-tests * test/lisp/emacs-lisp/ert-tests.el (ert-test-run-tests-batch-expensive): Mark it 'unstable', as it might run out of memory on GNU/Linux and on Windows. diff --git a/test/lisp/emacs-lisp/ert-tests.el b/test/lisp/emacs-lisp/ert-tests.el index e355fe2f18a..d138240b0f8 100644 --- a/test/lisp/emacs-lisp/ert-tests.el +++ b/test/lisp/emacs-lisp/ert-tests.el @@ -587,9 +587,7 @@ This macro is used to test if macroexpansion in `should' works." (should found-complex))))) (ert-deftest ert-test-run-tests-batch-expensive () - :tags (if (getenv "EMACS_EMBA_CI") '(:unstable)) - ;; This test runs out of memory on MS-Windows, so skip it. - (skip-unless (not (eq system-type 'windows-nt))) + :tags '(:unstable) (let* ((complex-list '((:1 (:2 (:3 (:4 (:5 (:6 "abc")))))))) (failing-test-1 (make-ert-test :name 'failing-test-1 commit f1715f6411d665442397835ab792ef39051f859a Author: Eli Zaretskii Date: Wed Mar 26 14:22:30 2025 +0200 ; Fix 'ert-tests' on MS-Windows * test/lisp/emacs-lisp/ert-tests.el (ert-test-run-tests-batch-expensive): Skip the test on MS-Windows. diff --git a/test/lisp/emacs-lisp/ert-tests.el b/test/lisp/emacs-lisp/ert-tests.el index 0ce531386c8..e355fe2f18a 100644 --- a/test/lisp/emacs-lisp/ert-tests.el +++ b/test/lisp/emacs-lisp/ert-tests.el @@ -588,6 +588,8 @@ This macro is used to test if macroexpansion in `should' works." (ert-deftest ert-test-run-tests-batch-expensive () :tags (if (getenv "EMACS_EMBA_CI") '(:unstable)) + ;; This test runs out of memory on MS-Windows, so skip it. + (skip-unless (not (eq system-type 'windows-nt))) (let* ((complex-list '((:1 (:2 (:3 (:4 (:5 (:6 "abc")))))))) (failing-test-1 (make-ert-test :name 'failing-test-1 commit 001359ce7650c1ec110b4c38b6f67274d2d29ad1 Author: Martin Rudalics Date: Wed Mar 26 09:04:49 2025 +0100 Further amendments of child frame handling and documentation * src/frame.c (frame_subsumes_p): New static function (delete_frame): On ttys refuse to delete a frame that could be used as surrogate minibuffer frame by surviving frames. (store_frame_param): Make sure 'minibuffer' parameter does not reference a deleted window. If on a tty it references a live window, make sure its frame has the same root frame as the frame where the parameter shall be installed. Also on ttys make sure that storing the 'parent-frame' parameter does not assign a surrogate minibuffer frame a different root frame than that of any of its client frames. Further on ttys assert that making a child a new root frame gives it the dimensions of the terminal. (Fmouse_position_in_root_frame): Don't use XFRAME before it's clear that FRAME is a frame. * doc/lispref/elisp.texi (Top): Add menu for Child Frames section. * doc/lispref/frames.texi (Buffer Parameters): Mention that value 'child-frame' is not special for 'minibuffer' parameter on text terminals. (Visibility of Frames): Fix description of 'iconify-frame'. (Raising and Lowering): 'minibuffer-auto-raise' is an option. (Child Frames): Major rewrite using subsections. Explain new and deviant features on text terminals - menu bar access, reparenting, deleting, visibility and minibuffer-only child frames. * etc/NEWS: Remove remark that child frames cannot be arbitrarily reparented on ttys. diff --git a/doc/lispref/elisp.texi b/doc/lispref/elisp.texi index def50ef7c64..f6f8afcd326 100644 --- a/doc/lispref/elisp.texi +++ b/doc/lispref/elisp.texi @@ -1187,6 +1187,12 @@ Window Frame Parameters * Cursor Parameters:: Controlling the cursor appearance. * Font and Color Parameters:: Fonts and colors for the frame text. +Child Frames + +* Child Frame Operations:: Making and investigating child frames. +* Child Frame Properties:: Special properties of child frames. +* Child Frame Peculiarities:: Deviant behaviors of child frames. + Positions * Point:: The special position where editing takes place. diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi index 425baacd1c8..197f4c17b46 100644 --- a/doc/lispref/frames.texi +++ b/doc/lispref/frames.texi @@ -2071,7 +2071,9 @@ The special value @code{child-frame} means to make a minibuffer-only child frame (@pxref{Child Frames}) whose parent becomes the frame created. As if specified as @code{nil}, Emacs will set this parameter to the minibuffer window of the child frame but will not select the -child frame after its creation. +child frame after its creation. The value @code{child-frame} has no +effect on text terminals where you have to create a minibuffer-only +frame manually (@pxref{Child Frame Peculiarities}). @vindex buffer-predicate@r{, a frame parameter} @item buffer-predicate @@ -3311,11 +3313,12 @@ be seen even if they are considered visible by this function. @deffn Command iconify-frame &optional frame This function iconifies frame @var{frame}. If you omit @var{frame}, it -iconifies the selected frame. This will also remove any child frames -(@pxref{Child Frames}) of @var{frame} from display. On the top frame of -a text terminal this function has no effect. visible. If @var{frame} is -a child frame, the behavior depends on the value of the variable -@code{iconify-child-frame} (@pxref{Child Frames}). +iconifies the selected frame. This function also removes any child +frames (@pxref{Child Frames}) of @var{frame} and their descendants from +display. If @var{frame} is a child frame itself, the behavior depends +on the value of the variable @code{iconify-child-frame}. If @var{frame} +is the top frame of a text terminal (@pxref{Frames}), this function has +no effect. @end deffn @deffn Command make-frame-visible &optional frame @@ -3438,7 +3441,7 @@ function @code{frame-list-z-order} (@pxref{Finding All Frames}). @defopt minibuffer-auto-raise If this is non-@code{nil}, activation of the minibuffer raises the frame -that the minibuffer window is in. This function has no effect on text +that the minibuffer window is in. This variable has no effect on text terminals. @end defopt @@ -3474,7 +3477,6 @@ unwanted frames are iconified instead. @node Child Frames @section Child Frames @cindex child frames -@cindex parent frames Child frames are objects halfway between windows (@pxref{Windows}) and ``normal'' frames. Like windows, they are attached to an owning frame. @@ -3487,26 +3489,39 @@ with the help of frame parameters (@pxref{Frame Parameters}) without any specialized functions or customizable variables. Child frames are meaningful on graphical and text terminals. - To create a new child frame or to convert a normal frame into a child +@menu +* Child Frame Operations:: Making and investigating child frames. +* Child Frame Properties:: Special properties of child frames. +* Child Frame Peculiarities:: Deviant behaviors of child frames. +@end menu + +@node Child Frame Operations +@subsection Child Frame Operations + +To create a new child frame or to convert a normal frame into a child frame, set that frame's @code{parent-frame} parameter (@pxref{Frame Interaction Parameters}) to that of an already existing frame. The frame specified by that parameter will then be the frame's parent frame -as long as the parameter is not changed or reset. Technically, this -makes the child frame's window-system window a child window of the -parent frame's window-system window. - -@cindex reparent frame -@cindex nest frame - The @code{parent-frame} parameter can be changed at any time. -Setting it to another frame @dfn{reparents} the child frame. Setting -it to another child frame makes the frame a @dfn{nested} child frame. -Setting it to @code{nil} restores the frame's status as a top-level -frame---a frame whose window-system window is a child of its display's -root window.@footnote{On Haiku, child frames are only visible when a -parent frame is active, owing to a limitation of the Haiku windowing -system. Owing to the same limitation, child frames are only -guaranteed to appear above their top-level parent; that is to say, the -top-most frame in the hierarchy, which does not have a parent frame.} +as long as the parameter is not changed or reset. Technically, on a GUI +this makes the child frame's window-system window a child window of the +parent frame's window-system window. On a text terminal, this makes the +frame usually appear on the same terminal as its parent frame, obscuring +some part of it. + +@cindex reparenting frames +@cindex nesting frames +@cindex top-level frame + The @code{parent-frame} parameter can be changed at any time. Setting +it to another frame @dfn{reparents} the child frame. Setting it to +another child frame makes the frame a @dfn{nested} child frame. Setting +it to @code{nil} restores the frame's status as a top-level frame---a +frame whose window-system window is a child of its display's root +window.@footnote{On Haiku, child frames are only visible when a parent +frame is active, owing to a limitation of the Haiku windowing system. +Owing to the same limitation, child frames are only guaranteed to appear +above their top-level parent; that is to say, the top-most frame in the +hierarchy, which does not have a parent frame.} On text terminals, +top-level frames are called root frames (see below). Since child frames can be arbitrarily nested, a frame can be both a child and a parent frame. Also, the relative roles of child and parent @@ -3515,16 +3530,69 @@ keep the size of a child frame sufficiently smaller than that of its parent). An error will be signaled for the attempt to make a frame an ancestor of itself. - Most window-systems clip a child frame at the native edges -(@pxref{Frame Geometry}) of its parent frame---everything outside these -edges is usually invisible. A child frame's @code{left} and @code{top} + When a parent frame is about to be deleted (@pxref{Deleting Frames}), +its child frames are recursively deleted before it. There is one +exception to this rule: When the child frame serves as a surrogate +minibuffer frame (@pxref{Minibuffers and Frames}) for another frame, it +is retained until the parent frame has been deleted. If, at this time, +no remaining frame uses the child frame as its minibuffer frame, Emacs +will try to delete the child frame too. If that deletion fails for +whatever reason, the child frame is made a top-level frame. Since on +text terminals no such conversion is possible, deleting a frame may +throw an error if a surrogate minibuffer frame to be deleted is used by +a frame that will not be deleted too. + + The following three functions help to understand how parent and child +frames related to each other. + +@defun frame-parent &optional frame +This function returns the parent frame of @var{frame}. It returns +@code{nil} if @var{frame} has no parent frame. +@end defun + +@cindex ancestor frame +@cindex descendant frame +@defun frame-ancestor-p ancestor descendant +This functions returns non-@code{nil} if @var{ancestor} is an ancestor +of @var{descendant}. @var{ancestor} is an ancestor of @var{descendant} +when it is either @var{descendant}'s parent frame or it is an ancestor +of @var{descendant}'s parent frame. Both, @var{ancestor} and +@var{descendant} must specify live frames. +@end defun + +@cindex root frame +@defun frame-root-frame &optional frame +This function returns the root frame of the specified @var{frame}. +@var{frame} must be a live frame and defaults to the selected one. The +root frame of @var{frame} is the frame obtained by following the chain +of parent frames starting with @var{frame} until a frame is reached that +has no parent. If @var{frame} has no parent, its root frame is +@var{frame} itself. +@end defun + +On a text terminal, a root frame is always positioned at the top left +edge of its terminal and always occupies the full size of its terminal. + + +@node Child Frame Properties +@subsection Child Frame Properties + +Most window-systems clip child frames at the native edges (@pxref{Frame +Geometry}) of their parent frame---everything outside these edges is +usually invisible. A child frame's @code{left} and @code{top} parameters specify a position relative to the top-left corner of its parent's native frame. When the parent frame is resized, this position remains conceptually unaltered. - NS builds do not clip child frames at the parent frame's edges, -allowing them to be positioned so they do not obscure the parent frame -while still being visible themselves. + NS builds and text terminals do not clip child frames at the parent +frame's edges, allowing them to be positioned so they do not obscure the +parent frame while still being visible themselves. + + Note also the function @code{window-largest-empty-rectangle} +(@pxref{Coordinates and Windows}) which can be used to inscribe a child +frame in the largest empty area of an existing window. This can be +useful to avoid that a child frame obscures any text shown in that +window. Usually, moving a parent frame moves along all its child frames and their descendants as well, keeping their relative positions unaltered. @@ -3546,24 +3614,21 @@ obscuring parts of it, except on NS builds where it may be positioned beneath the parent. This is comparable to the window-system window of a top-level frame which also always appears on top of its parent window---the desktop's root window. When a parent frame is iconified or -made invisible (@pxref{Visibility of Frames}), its child frames are made -invisible. When a parent frame is deiconified or made visible, its -child frames are made visible. - - When a parent frame is about to be deleted (@pxref{Deleting -Frames}), its child frames are recursively deleted before it. There -is one exception to this rule: When the child frame serves as a -surrogate minibuffer frame (@pxref{Minibuffers and Frames}) for -another frame, it is retained until the parent frame has been deleted. -If, at this time, no remaining frame uses the child frame as its -minibuffer frame, Emacs will try to delete the child frame too. If -that deletion fails for whatever reason, the child frame is made a -top-level frame. +made invisible (@pxref{Visibility of Frames}), any child frames +descending from it will not be shown either even if +@code{frame-visible-p} returns @code{t} for them. When a parent frame +is deiconified or made visible, any child frames descending from it will +be shown again (provided they and all their ancestor frames are visible +too). If a child frame is used as surrogate minibuffer frame +(@pxref{Minibuffers and Frames}), it's up to the application to +guarantee the frame's visibility whenever the minibuffer is activated. Whether a child frame can have a menu or tool bar is window-system or window manager dependent. Most window-systems explicitly disallow menu bars for child frames. It seems advisable to disable both, menu and -tool bars, via the frame's initial parameters settings. +tool bars, via the frame's initial parameters settings. On a text +terminal, child frames use the menu bar of their root frame (provided it +has one). Usually, child frames do not exhibit window manager decorations like a title bar or external borders (@pxref{Frame Geometry}). When the child @@ -3575,15 +3640,18 @@ outer border can be used. On MS-Windows, specifying a non-zero outer border width will show a one-pixel wide external border. Under all window-systems, the internal border can be used. In either case, it's advisable to disable a child frame's window manager decorations with the -@code{undecorated} frame parameter (@pxref{Management Parameters}). +@code{undecorated} frame parameter (@pxref{Management Parameters}). On +a text terminal, on the other hand, it's better to leave that parameter +alone so your child frame will be drawn with an outer border. - To resize or move an undecorated child frame with the mouse, special + To resize or move a border-less child frame with the mouse, special frame parameters (@pxref{Mouse Dragging Parameters}) have to be used. The internal border of a child frame, if present, can be used to resize the frame with the mouse, provided that frame has a non-@code{nil} @code{drag-internal-border} parameter. If set, the @code{snap-width} parameter indicates the number of pixels where the frame @dfn{snaps} at -the respective edge or corner of its parent frame. +the respective edge or corner of its parent frame. On a text terminal, +the outer border can used for resizing. There are two ways to drag an entire child frame with the mouse: The @code{drag-with-mode-line} parameter, if non-@code{nil}, enables @@ -3627,8 +3695,12 @@ to display completions in a separate window, the @code{minibuffer-exit} parameter (@pxref{Frame Interaction Parameters}) is useful in order to deal with the frame when the minibuffer is exited. - The behavior of child frames deviates from that of top-level frames in -a number of other ways as well. Here we sketch a few of them: + +@node Child Frame Peculiarities +@subsection Child Frame Peculiarities + +The behavior of child frames deviates from that of normal frames in a +number of peculiar ways. Here we sketch a few of them: @itemize @bullet @item @@ -3644,7 +3716,7 @@ described below. Raising, lowering and restacking child frames (@pxref{Raising and Lowering}) or changing the @code{z-group} (@pxref{Position Parameters}) of a child frame changes only the stacking order of child frames with -the same parent. +the same parent. Restacking has not been implemented on text terminals. @item Many window-systems are not able to change the opacity (@pxref{Font and @@ -3667,43 +3739,6 @@ work on all window-systems. Some will drop the object on the parent frame or on some ancestor instead. @end itemize - The following three functions can be useful when working with child and -parent frames: - -@defun frame-parent &optional frame -This function returns the parent frame of @var{frame}. The parent frame -of @var{frame} is the Emacs frame whose window-system window is the -parent window of @var{frame}'s window-system window. If such a frame -exists, @var{frame} is considered a child frame of that frame. - -This function returns @code{nil} if @var{frame} has no parent frame. -@end defun - -@cindex ancestor frame -@defun frame-ancestor-p ancestor descendant -This functions returns non-@code{nil} if @var{ancestor} is an ancestor -of @var{descendant}. @var{ancestor} is an ancestor of @var{descendant} -when it is either @var{descendant}'s parent frame or it is an ancestor -of @var{descendant}'s parent frame. Both, @var{ancestor} and -@var{descendant} must specify live frames. -@end defun - -@cindex root frame -@defun frame-root-frame &optional frame -This function returns the root frame of the specified @var{frame}. -@var{frame} must be a live frame and defaults to the selected one. The -root frame of @var{frame} is the frame obtained by following the chain -of parent frames starting with @var{frame} until a frame is reached that -has no parent. If @var{frame} has no parent, its root frame is -@var{frame} itself. -@end defun - -Note also the function @code{window-largest-empty-rectangle} -(@pxref{Coordinates and Windows}) which can be used to inscribe a child -frame in the largest empty area of an existing window. This can be -useful to avoid that a child frame obscures any text shown in that -window. - Customizing the following option can be useful to tweak the behavior of @code{iconify-frame} for child frames. @@ -3724,6 +3759,68 @@ On a text terminal the only feasible values are @code{nil} and @code{make-invisible}. @end defopt +On text terminals exist a few restrictions with respect to reparenting: +One is that a top frame (@pxref{Frames}) cannot be directly made a child +frame---you first have to make another root frame the new top frame of +its terminal. If, on the other hand, you want a child frame to become +the new top frame of its terminal, you have to make it a root frame +first. + + Also, the surrogate minibuffer window of any frame on a text terminal +must reside on a frame with the same root frame. Reparenting will throw +an error whenever it violates this restriction. It also means that it's +more tricky to make a minibuffer-less frame whose minibuffer window +resides on a minibuffer-only child frame. On a GUI, Emacs proceeds as +follows when a user has specified the value @code{child-frame} for the +@code{minibuffer} parameter in @code{initial-frame-alist} +(@pxref{Initial Parameters}): + +@enumerate +@item +Create a minibuffer-only frame. + +@item +Create a minibuffer-less frame with its @code{minibuffer} parameter set +to the window of the minibuffer-only frame. + +@item +Make the minibuffer-less frame the parent frame of the minibuffer-only +frame. + +@item +Delete the originally selected frame. +@end enumerate + + On a text terminal you have to perform these operations manually as +sketched in the following snippet: + +@example +@group +(let* ((selected (selected-frame)) + (mini-only + (make-frame + `((parent-frame . ,selected) + (minibuffer . only) + (left . 1) (top . -1) (width . 20) (height . 1)))) + (mini-less + (make-frame + (append `((parent-frame . ,selected) + (minibuffer . ,(minibuffer-window mini-only))))))) + (set-frame-parameter mini-only 'parent-frame mini-less) + (set-frame-parameter mini-less 'parent-frame nil) + (select-frame mini-less) + (delete-frame selected)) +@end group +@end example + + This means that you first have to install the minibuffer-less and the +minibuffer-only frames both as child frames of the selected frame with +the @code{minibuffer} parameter of the minibuffer-less frame set to the +minibuffer window of the minibuffer-only frame. Then make the +minibuffer-only frame a child frame of the minibuffer-less frame and +make the minibuffer-less frame a new root frame. Finally, select the +minibuffer-less frame and delete the originally selected frame. + @node Mouse Tracking @section Mouse Tracking diff --git a/etc/NEWS b/etc/NEWS index 27d799d3d26..1bd2fd6d486 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -75,11 +75,10 @@ the 'standard-display-table's extra slots with Unicode characters. Please see the documentation of that function to see which slots of the display table it changes. ++++ ** Child frames are now supported on TTY frames. This supports use-cases like Posframe, Corfu, and child frames acting -like tooltips. Other use-cases of child frames are not supported yet. -In particular, a TTY child frame cannot be converted to a root frame or -vice-versa. +like tooltips. To enable tooltips on TTY frames, call 'tty-tip-mode'. diff --git a/src/frame.c b/src/frame.c index 550fd336ff9..7dc9202d6f6 100644 --- a/src/frame.c +++ b/src/frame.c @@ -2070,6 +2070,7 @@ parent window is the window-system's root window) or an embedded window return Qnil; } +/* Return true if frame AF is an ancestor of frame DF. */ bool frame_ancestor_p (struct frame *af, struct frame *df) { @@ -2086,6 +2087,22 @@ frame_ancestor_p (struct frame *af, struct frame *df) return false; } +/* A frame AF subsumes a frame DF if AF and DF are the same or AF is an + ancestor of DF. */ +static bool +frame_subsumes_p (struct frame *af, struct frame *df) +{ + while (df) + { + if (df == af) + return true; + else + df = FRAME_PARENT_FRAME (df); + } + + return false; +} + DEFUN ("frame-ancestor-p", Fframe_ancestor_p, Sframe_ancestor_p, 2, 2, 0, doc: /* Return non-nil if ANCESTOR is an ancestor of DESCENDANT. @@ -2100,7 +2117,6 @@ frame. */) return frame_ancestor_p (af, df) ? Qt : Qnil; } - /* Return the root frame of frame F. Follow the parent_frame chain until we reach a frame that has no parent. That is the root frame. Note that the root of a root frame is itself. */ @@ -2448,6 +2464,18 @@ delete_frame (Lisp_Object frame, Lisp_Object force) XSETFRAME (frame, f); + if (is_tty_frame (f) && NILP (force)) + /* If F is a tty frame, check for surrogate minibuffer frames F + subsumes used by a frame that is not subsumed by F. */ + FOR_EACH_FRAME (frames, frame1) + { + struct frame *f1 = XFRAME (frame1); + + if (frame_subsumes_p (f, WINDOW_XFRAME (XWINDOW (f1->minibuffer_window))) + && !frame_subsumes_p (f, f1)) + error ("Cannot delete surrogate minibuffer frame"); + } + /* Softly delete all frames with this frame as their parent frame or as their `delete-before' frame parameter value. */ FOR_EACH_FRAME (frames, frame1) @@ -3625,7 +3653,7 @@ store_frame_param (struct frame *f, Lisp_Object prop, Lisp_Object val) { if (WINDOWP (val)) { - if (!MINI_WINDOW_P (XWINDOW (val))) + if (!WINDOW_LIVE_P (val) || !MINI_WINDOW_P (XWINDOW (val))) error ("The `minibuffer' parameter does not specify a valid minibuffer window"); else if (FRAME_MINIBUF_ONLY_P (f)) { @@ -3641,6 +3669,10 @@ store_frame_param (struct frame *f, Lisp_Object prop, Lisp_Object val) else error ("Can't change the minibuffer window of a frame with its own minibuffer"); } + else if (is_tty_frame (f) + && (root_frame (WINDOW_XFRAME (XWINDOW (val))) + != root_frame (f))) + error ("A frame and its surrogate minibuffer frame must have the same roots"); else /* Store the chosen minibuffer window. */ fset_minibuffer_window (f, val); @@ -3719,12 +3751,51 @@ store_frame_param (struct frame *f, Lisp_Object prop, Lisp_Object val) val = old_val; } - /* Re-parenting is currently not implemented when changing a root - frame to a child frame or vice versa. */ + /* The parent frame parameter for ttys must be handled specially. */ if (is_tty_frame (f) && EQ (prop, Qparent_frame)) { - if (NILP (f->parent_frame) != NILP (val)) - error ("Making a root frame a child or vice versa is not supported"); + /* Invariant: When a frame F1 uses a surrogate minibuffer frame M1 + on a tty, both F1 and M1 must have the same root frame. */ + Lisp_Object frames, frame1, old_val = f->parent_frame; + + FOR_EACH_FRAME (frames, frame1) + { + struct frame *f1 = XFRAME (frame1); + struct frame *m1 = WINDOW_XFRAME (XWINDOW (f1->minibuffer_window)); + bool mismatch = false; + + /* Temporarily install VAL and check whether our invariant + above gets violated. */ + f->parent_frame = val; + mismatch = root_frame (f1) != root_frame (m1); + f->parent_frame = old_val; + + if (mismatch) + error ("Cannot re-root surrogate minibuffer frame"); + } + + if (f == XFRAME (FRAME_TERMINAL (f)->display_info.tty->top_frame) + && !NILP (val)) + error ("Cannot make tty top frame a child frame"); + else if (NILP (val)) + { + if (!FRAME_HAS_MINIBUF_P (f) + && (!frame_ancestor_p + (f, WINDOW_XFRAME (XWINDOW (f->minibuffer_window))))) + error ("Cannot make tty root frame without valid minibuffer window"); + else + { + /* When making a frame a root frame, expand it to full size, + if necessary, and position it at top left corner. */ + int width, height; + + get_tty_size (fileno (FRAME_TTY (f)->input), &width, &height); + adjust_frame_size (f, width, height - FRAME_TOP_MARGIN (f), 5, 0, + Qterminal_frame); + f->left_pos = 0; + f->top_pos = 0; + } + } SET_FRAME_GARBAGED (root_frame (f)); f->parent_frame = val; @@ -6593,14 +6664,15 @@ of the frame returned by 'mouse-position'. */) { Lisp_Object pos = mouse_position (true); Lisp_Object frame = XCAR (pos); - struct frame *f = XFRAME (frame); - int x = XFIXNUM (XCAR (XCDR (pos))) + f->left_pos; - int y = XFIXNUM (XCDR (XCDR (pos))) + f->top_pos; if (!FRAMEP (frame)) return Qnil; else { + struct frame *f = XFRAME (frame); + int x = XFIXNUM (XCAR (XCDR (pos))) + f->left_pos; + int y = XFIXNUM (XCDR (XCDR (pos))) + f->top_pos; + f = FRAME_PARENT_FRAME (f); while (f) commit 2d278a0f2e945eef30752550f900c1c88367fb6b Author: Philipp Stephani Date: Wed Mar 26 03:32:46 2025 +0100 Use numeric time zone suffix in ERT explainer. This is more robust since the time zone name is system-dependent. * lisp/emacs-lisp/ert.el (ert--explain-time-equal-p): Use numeric time zone suffix. * test/lisp/emacs-lisp/ert-tests.el (ert-test-explain-time-equal-p): Adapt test. diff --git a/lisp/emacs-lisp/ert.el b/lisp/emacs-lisp/ert.el index ef00dc73f91..b021c4d704c 100644 --- a/lisp/emacs-lisp/ert.el +++ b/lisp/emacs-lisp/ert.el @@ -676,8 +676,8 @@ A and B are the time values to compare." (side-effect-free t)) (unless (time-equal-p a b) `(different-time-values - ,(format-time-string "%F %T.%N %Z" a t) - ,(format-time-string "%F %T.%N %Z" b t) + ,(format-time-string "%F %T.%N%z" a t) + ,(format-time-string "%F %T.%N%z" b t) difference ,(format-time-string "%s.%N" (time-subtract a b) t)))) (function-put #'time-equal-p 'ert-explainer #'ert--explain-time-equal-p) diff --git a/test/lisp/emacs-lisp/ert-tests.el b/test/lisp/emacs-lisp/ert-tests.el index 7a08cb47d82..0ce531386c8 100644 --- a/test/lisp/emacs-lisp/ert-tests.el +++ b/test/lisp/emacs-lisp/ert-tests.el @@ -796,8 +796,8 @@ This macro is used to test if macroexpansion in `should' works." (should-not (ert--explain-time-equal-p 123 '(0 123 0 0))) (should (equal (ert--explain-time-equal-p 123 '(0 120 0 0)) '(different-time-values - "1970-01-01 00:02:03.000000000 UTC" - "1970-01-01 00:02:00.000000000 UTC" + "1970-01-01 00:02:03.000000000+0000" + "1970-01-01 00:02:00.000000000+0000" difference "3.000000000")))) (ert-deftest ert-test-stats-set-test-and-result () commit 816a17a7115e113211d282c64cc05a6353ab5198 Author: Yue Yi Date: Tue Mar 25 22:22:08 2025 -0400 peg.texi: Fix bug#76555 even a bit more * doc/lispref/peg.texi (Parsing Expression Grammars): Fix other part of the grammar of `define-peg-ruleset` example. diff --git a/doc/lispref/peg.texi b/doc/lispref/peg.texi index 193a7ca957e..d93b1f6df29 100644 --- a/doc/lispref/peg.texi +++ b/doc/lispref/peg.texi @@ -142,8 +142,8 @@ Define @var{name} as an identifier for @var{rules}. @group (define-peg-ruleset number-grammar ;; `digit' here references the definition above. - (number sign digit (* digit)) - (sign (or "+" "-" ""))) + (number () sign digit (* digit)) + (sign () (or "+" "-" ""))) @end group @end example commit 4d396138b4f6ed87720937201ba58f82cdcb9765 Author: Yue Yi Date: Tue Mar 25 22:20:50 2025 -0400 peg.texi: Fix bug#76555 even a bit more * doc/lispref/peg.texi (Parsing Expression Grammars): Fix grammar of `define-peg-ruleset` example. diff --git a/doc/lispref/peg.texi b/doc/lispref/peg.texi index e03ec57a457..193a7ca957e 100644 --- a/doc/lispref/peg.texi +++ b/doc/lispref/peg.texi @@ -141,9 +141,9 @@ Define @var{name} as an identifier for @var{rules}. @example @group (define-peg-ruleset number-grammar - ;; `digit' here references the definition above. - '((number sign digit (* digit)) - (sign (or "+" "-" "")))) + ;; `digit' here references the definition above. + (number sign digit (* digit)) + (sign (or "+" "-" ""))) @end group @end example commit fb4db5c1a7b9dcb24e6cfed064b252a9f8fe97ef Author: Stefan Monnier Date: Tue Mar 25 22:17:05 2025 -0400 PEG: Fix bug#76555 * doc/lispref/peg.texi (Parsing Expression Grammars): Fix `define-peg-ruleset` example. * lisp/progmodes/peg.el (define-peg-rule): Fix indent rule. diff --git a/doc/lispref/peg.texi b/doc/lispref/peg.texi index 80e2581e7bb..e03ec57a457 100644 --- a/doc/lispref/peg.texi +++ b/doc/lispref/peg.texi @@ -141,8 +141,8 @@ Define @var{name} as an identifier for @var{rules}. @example @group (define-peg-ruleset number-grammar + ;; `digit' here references the definition above. '((number sign digit (* digit)) - digit ;; A reference to the definition above. (sign (or "+" "-" "")))) @end group @end example diff --git a/lisp/progmodes/peg.el b/lisp/progmodes/peg.el index ebcf7f7455b..41e052b505f 100644 --- a/lisp/progmodes/peg.el +++ b/lisp/progmodes/peg.el @@ -369,7 +369,7 @@ defaults to `ignore'." "Define PEG rule NAME as equivalent to PEXS. The PEG expressions in PEXS are implicitly combined with the sequencing `and' operator of PEG grammars." - (declare (indent 1)) + (declare (indent 2)) (let ((inline nil)) (while (keywordp (car pexs)) (pcase (pop pexs) commit 9a07d64f5c734f08baa741d763640943a7b407e7 Author: Stefan Kangas Date: Wed Mar 26 01:03:06 2025 +0100 ; Minor update in ack.texi * doc/emacs/ack.texi (Acknowledgments): Mention eglot in entry for João Távora. diff --git a/doc/emacs/ack.texi b/doc/emacs/ack.texi index 542d54fe717..81784d4989b 100644 --- a/doc/emacs/ack.texi +++ b/doc/emacs/ack.texi @@ -1302,8 +1302,9 @@ Tibor Šimko and Milan Zamazal wrote @file{slovak.el}, support for editing text in Slovak language. @item -João Távora wrote many improvements for @file{flymake.el}, an -on-the-fly syntax-checking package. +João Távora wrote many improvements for @file{flymake.el}, an on-the-fly +syntax-checking package. He also wrote @file{eglot.el}, a language +server protocol (LSP) client that was added in Emacs 29. @item Luc Teirlinck wrote @file{help-at-pt.el}, providing local help through commit b3881ac443f2ab279aba3d9687792c71d97554d0 Author: Stefan Kangas Date: Tue Mar 25 23:16:11 2025 +0100 ; Improve type specifier documentation * doc/lispref/functions.texi (Declare Form): Clarify wording for precision and consistency; note consequences of incorrect declarations. * doc/lispref/objects.texi (Type Specifiers): Mention use by the native compiler; tighten wording. diff --git a/doc/lispref/functions.texi b/doc/lispref/functions.texi index 824db5a0ec8..180d6a41698 100644 --- a/doc/lispref/functions.texi +++ b/doc/lispref/functions.texi @@ -2729,25 +2729,25 @@ Variables}). @cindex function type declaration @cindex inferred type of function @item (ftype @var{type} &optional @var{function}) -Declare @var{type} to be the type of this function. This is used for -documentation by @code{describe-function}. Also it can be used by the -native compiler (@pxref{Native Compilation}) for improving code -generation and for deriving more precisely the type of other functions -without type declaration. Functions that have such type declarations -will be shown by @kbd{C-h C-f} as having a @dfn{declared type} (as -opposed to @dfn{inferred type} of functions without declaration). - -@var{type} is a @dfn{type specifier} (@pxref{Type Specifiers}) in the +Declare @var{type} to be the type of this function. This type is used +by @code{describe-function} for documentation, and by the native +compiler (@pxref{Native Compilation}) for optimizing code generation and +inferring types. Incorrect type declarations may cause crashes in +natively compiled code (see below). Functions with type declarations +are shown by @kbd{C-h C-f} as having a @dfn{declared type}, as opposed +to an @dfn{inferred type} for functions without them. + +@var{type} is a @dfn{type specifier} (@pxref{Type Specifiers}) of the form @w{@code{(function (@var{arg-1-type} @dots{} @var{arg-n-type}) -RETURN-TYPE)}}. Argument types can be interleaved with symbols -@code{&optional} and @code{&rest} to match the function's arguments +RETURN-TYPE)}}. Argument types can be interleaved with @code{&optional} +and @code{&rest} to reflect the function's calling convention (@pxref{Argument List}). @var{function} if present should be the name of function being defined. -Here's an example of using @code{ftype} inside @code{declare} to declare -a function @code{positive-p} that takes an argument of type @var{number} -and return a @var{boolean}: +Here's an example of using @code{ftype} inside @code{declare} to define +a function @code{positive-p}, which takes an argument of type +@var{number} and returns a @var{boolean}: @lisp @group @@ -2758,9 +2758,9 @@ and return a @var{boolean}: @end group @end lisp -Similarly this declares a function @code{cons-or-number} that: expects a -first argument being a @var{cons} or a @var{number}, a second optional -argument of type @var{string} and return one of the symbols +Similarly, this defines a function @code{cons-or-number} that takes a +first argument of type @var{cons} or a @var{number}, a second optional +argument of type @var{string}, and returns one of the symbols @code{is-cons} or @code{is-number}: @lisp @@ -2778,13 +2778,12 @@ argument of type @var{string} and return one of the symbols For description of additional types, see @ref{Lisp Data Types}). -Declaring a function with an incorrect type produces undefined behavior -and could lead to unexpected results or might even crash Emacs when -natively-compiled code is loaded, if it was compiled with -@code{compilation-safety} level of zero (@pxref{compilation-safety}). -Note also that when redefining (or advising) a type-declared function, -the replacement should respect the original signature to avoid such -undefined behavior. +Declaring a function with an incorrect type causes undefined behavior. +If such a function is natively compiled with @code{compilation-safety} +set to zero (@pxref{compilation-safety}), this may result in incorrect +execution or even Emacs crashing when the compiled code is loaded. +Redefining or advising a type-declared function must preserve the +original signature to avoid these issues. @item no-font-lock-keyword This is valid for macros only. Macros with this declaration are diff --git a/doc/lispref/objects.texi b/doc/lispref/objects.texi index 264a780f93d..a752a2125b4 100644 --- a/doc/lispref/objects.texi +++ b/doc/lispref/objects.texi @@ -1508,12 +1508,14 @@ A type specifier is an expression that denotes a type. A type represents a set of possible values. Type specifiers can be classified into primitive types and compound types. -Type specifiers are in use for several purposes, including: documenting -function interfaces through declaration (@pxref{Declare Form}), -specifying structure slot values (@pxref{Structures,,, cl, Common Lisp -Extensions for GNU Emacs Lisp}), type-checking through @code{cl-the} -(@pxref{Declarations,,, cl, Common Lisp Extensions for GNU Emacs Lisp}), -and others. +Type specifiers are used for several purposes, including: documenting +function interfaces through declarations (@pxref{Declare Form}), +specifying structure slot types (@pxref{Structures,,, cl, Common Lisp +Extensions for GNU Emacs Lisp}), performing type checks with +@code{cl-the} (@pxref{Declarations,,, cl, Common Lisp Extensions for GNU +Emacs Lisp}), and aiding the native compiler (@pxref{Native +Compilation}) in optimizing code generation and inferring function +signatures. @table @asis @item Primitive type specifiers commit 56248fad53cb1476b9f460044c0c73f986a0bbac Author: Michael Albinus Date: Tue Mar 25 19:48:06 2025 +0100 * test/lisp/gnus/message-tests.el (message-default-buffer-type): New test. diff --git a/test/lisp/gnus/message-tests.el b/test/lisp/gnus/message-tests.el index a3bbf4c025c..7c290486f26 100644 --- a/test/lisp/gnus/message-tests.el +++ b/test/lisp/gnus/message-tests.el @@ -179,6 +179,31 @@ Hello. ;; (should-error (re-search-forward "Cc:")) ))) +(ert-deftest message-default-buffer-type () + (let ((buf (get-buffer-create (md5 (current-time-string)) 'inhibit))) + (unwind-protect + (ert-with-test-buffer (:name "message") + (insert "From: dang@gnus.org +To: user1 +--text follows this line-- +") + ;; Any mode. + (save-excursion + (ert-simulate-keys (concat (buffer-name buf) "\r\r\r\r") + (call-interactively 'mml-attach-buffer))) + (save-excursion + (should (re-search-forward "type=\"text/plain\"" nil 'noerror))) + ;; Diff mode. + (with-current-buffer buf (diff-mode)) + (save-excursion + (ert-simulate-keys (concat (buffer-name buf) "\r\r\r\r") + (call-interactively 'mml-attach-buffer))) + (save-excursion + (should (re-search-forward "type=\"text/x-patch\"" nil 'noerror)))) + ;; Cleanup. + (kill-buffer buf) + (ert-kill-all-test-buffers)))) + (provide 'message-mode-tests) ;;; message-tests.el ends here commit ce0c1f44429bc7e9757f6e81019d8c8c12ba5e55 Author: Stefan Monnier Date: Tue Mar 25 14:16:03 2025 -0400 backtrace.el: Remove redundant `put` and `:group` * lisp/emacs-lisp/backtrace.el: Remove redundant `:group` args. Prefer # to quote function arguments. (backtrace-mode): Remove redundant `put`. diff --git a/lisp/emacs-lisp/backtrace.el b/lisp/emacs-lisp/backtrace.el index b395a13b0dd..468c743ff0e 100644 --- a/lisp/emacs-lisp/backtrace.el +++ b/lisp/emacs-lisp/backtrace.el @@ -48,7 +48,6 @@ Set to nil to disable fontification, which may be necessary in order to debug the code that does fontification." :type 'boolean - :group 'backtrace :version "27.1") (defcustom backtrace-line-length 5000 @@ -59,7 +58,6 @@ shorter than this, but success is not guaranteed. If set to nil or zero, backtrace mode will not abbreviate the forms it prints." :type '(choice natnum (const :value nil :tag "Don't abbreviate")) - :group 'backtrace :version "27.1") ;;; Backtrace frame data structure @@ -877,14 +875,12 @@ followed by `backtrace-print-frame', once for each stack frame." ;; (set-buffer-multibyte t) (setq-local revert-buffer-function #'backtrace-revert) (setq-local filter-buffer-substring-function #'backtrace--filter-visible) - (setq-local indent-line-function 'lisp-indent-line) - (setq-local indent-region-function 'lisp-indent-region) + (setq-local indent-line-function #'lisp-indent-line) + (setq-local indent-region-function #'lisp-indent-region) (add-function :around (local 'cl-print-expand-ellipsis-function) #'backtrace--expand-ellipsis) (add-hook 'xref-backend-functions #'backtrace--xref-backend nil t)) -(put 'backtrace-mode 'mode-class 'special) - ;;; Backtrace printing ;;;###autoload commit bb62e435637c7422741189384fa89e2272caec5b Author: Stefan Monnier Date: Tue Mar 25 14:06:32 2025 -0400 bs.el: Janitorial work; most importantly use `special-mode` * lisp/bs.el: Prefer # to quote function arguments. (bs-mode-font-lock-keywords): Use backquote; quote face names; and use a list of faces instead of two applications at the same spot. (bs-sort-buffer-interns-are-last, bs-config--files-and-scratch) (bs-configurations, bs--intern-show-never): Fix ^$-vs-\`\' confusion. (bs-mode-map): Remove bindings made redundant by inheritance. (bs--redisplay): Use `line-number-at-pos`. (bs--goto-current-buffer): Use `regexp-opt`. (bs-mode): Inherit from `special-mode`. (bs--current-buffer, bs--up): Use `point-min`. (bs--create-header-line): Remove redundant arg. diff --git a/lisp/bs.el b/lisp/bs.el index 29af72f762b..ac4da0b5c05 100644 --- a/lisp/bs.el +++ b/lisp/bs.el @@ -180,15 +180,14 @@ must return a string representing the column's value." ;; Font-Lock-Settings (defvar bs-mode-font-lock-keywords - (list ;; header in font-lock-type-face - (list (bs--make-header-match-string) - '(1 font-lock-type-face append) '(1 'bold append)) - ;; Buffername embedded by * - (list "^\\(.*\\*.*\\*.*\\)$" 1 'font-lock-constant-face) - ;; Dired-Buffers - '("^..\\(.*Dired .*\\)$" 1 font-lock-function-name-face) - ;; the star for modified buffers - '("^.\\(\\*\\) +[^\\*]" 1 font-lock-comment-face)) + `(;; header in bold font-lock-type-face + (,(bs--make-header-match-string) (1 '(font-lock-type-face bold))) + ;; Buffername embedded by * + ("^\\(.*\\*.*\\*.*\\)$" (1 'font-lock-constant-face)) + ;; Dired-Buffers + ("^..\\(.*Dired .*\\)$" (1 'font-lock-function-name-face)) + ;; the star for modified buffers + ("^.\\(\\*\\) +[^\\*]" (1 'font-lock-comment-face))) "Default font lock expressions for Buffer Selection Menu.") (defcustom bs-max-window-height 20 @@ -255,7 +254,7 @@ See also `bs-maximal-buffer-name-column'." (defcustom bs-configurations '(("all" nil nil nil nil nil) ("files" nil nil nil bs-visits-non-file bs-sort-buffer-interns-are-last) - ("files-and-scratch" "^\\*scratch\\*$" nil nil bs-visits-non-file + ("files-and-scratch" "\\`\\*scratch\\*\\'" nil nil bs-visits-non-file bs-sort-buffer-interns-are-last) ("all-intern-last" nil nil nil nil bs-sort-buffer-interns-are-last)) "List of all configurations you can use in the Buffer Selection Menu. @@ -420,7 +419,7 @@ naming a sort behavior. Default is \"by nothing\" which means no sorting." Non-nil means to show all buffers. Otherwise show buffers defined by current configuration `bs-current-configuration'.") -(defvar bs--intern-show-never "^ \\|\\*buffer-selection\\*" +(defvar bs--intern-show-never "\\` \\|\\*buffer-selection\\*" "Regular expression specifying which buffers never to show. A buffer whose name matches this regular expression will never be included in the buffer list.") @@ -439,17 +438,6 @@ Used internally, only.") "v" #'bs-view "!" #'bs-select-in-one-window "F" #'bs-select-other-frame - "1" #'digit-argument - "2" #'digit-argument - "3" #'digit-argument - "4" #'digit-argument - "5" #'digit-argument - "6" #'digit-argument - "7" #'digit-argument - "8" #'digit-argument - "9" #'digit-argument - "-" #'negative-argument - "ESC -" #'negative-argument "o" #'bs-select-other-window "C-o" #'bs-tmp-select-other-window "" #'bs-up @@ -464,7 +452,6 @@ Used internally, only.") "d" #'bs-delete "C-d" #'bs-delete-backward "k" #'bs-delete - "g" #'bs-refresh "C" #'bs-set-configuration-and-refresh "c" #'bs-select-next-configuration "q" #'bs-kill @@ -574,21 +561,20 @@ function. SORT-DESCRIPTION is an element of `bs-sort-functions'." "Redisplay whole Buffer Selection Menu. If KEEP-LINE-P is non-nil the point will stay on current line. SORT-DESCRIPTION is an element of `bs-sort-functions'." - (let ((line (count-lines 1 (point)))) + (let ((line (line-number-at-pos))) (bs-show-in-buffer (bs-buffer-list nil sort-description)) (when keep-line-p (goto-char (point-min)) - (forward-line line)) + (forward-line (1- line))) (beginning-of-line))) (defun bs--goto-current-buffer () "Go to line which represents the current buffer. Actually, it goes to the line which begins with the character in `bs-string-current' or `bs-string-current-marked'." - (let ((regexp (concat "^" - (regexp-quote bs-string-current) - "\\|^" - (regexp-quote bs-string-current-marked))) + (let ((regexp (concat "\\`" + (regexp-opt (list bs-string-current + bs-string-current-marked)))) point) (save-excursion (goto-char (point-min)) @@ -604,9 +590,7 @@ in `bs-string-current' or `bs-string-current-marked'." (format "Show buffer by configuration %S" bs-current-configuration))) -(put 'bs-mode 'mode-class 'special) - -(define-derived-mode bs-mode nil "Buffer-Selection-Menu" +(define-derived-mode bs-mode special-mode "Buffer-Selection-Menu" "Major mode for editing a subset of Emacs's buffers. \\ Aside from two header lines each line describes one buffer. @@ -653,16 +637,15 @@ apply it. \\[bs-show-sorted] -- display buffer list sorted by next sort aspect. \\[bs-kill] -- leave Buffer Selection Menu without a selection. -\\[bs-refresh] -- refresh Buffer Selection Menu. +\\[revert-buffer] -- refresh Buffer Selection Menu. \\[describe-mode] -- display this help text." (buffer-disable-undo) - (setq buffer-read-only t - truncate-lines t + (setq truncate-lines t show-trailing-whitespace nil) (setq-local font-lock-defaults '(bs-mode-font-lock-keywords t)) (setq-local font-lock-verbose nil) (setq-local font-lock-global-modes '(not bs-mode)) - (setq-local revert-buffer-function 'bs-refresh)) + (setq-local revert-buffer-function #'bs-refresh)) (defun bs-kill () "Let buffer disappear and reset window configuration." @@ -701,7 +684,7 @@ Arguments are IGNORED (for `revert-buffer')." Raise an error if not on a buffer line." (beginning-of-line) (let ((line (+ (- bs-header-lines-length) - (count-lines 1 (point))))) + (count-lines (point-min) (point))))) (when (< line 0) (error "You are on a header row")) (nth line bs-current-list))) @@ -1011,7 +994,7 @@ Uses function `read-only-mode'." (defun bs--up () "Move point vertically up one line. If on top of buffer list go to last line." - (if (> (count-lines 1 (point)) bs-header-lines-length) + (if (> (count-lines (point-min) (point)) bs-header-lines-length) (forward-line -1) (goto-char (point-max)) (beginning-of-line) @@ -1041,7 +1024,7 @@ A value of nil means BUFFER belongs to a file." (defun bs-sort-buffer-interns-are-last (_b1 b2) "Function for sorting internal buffers at the end of all buffers." - (string-match-p "^\\*" (buffer-name b2))) + (string-match-p "\\`\\*" (buffer-name b2))) ;; ---------------------------------------------------------------------- ;; Configurations: @@ -1062,19 +1045,19 @@ These variables are `bs-dont-show-regexp', `bs-must-show-regexp', "Define a configuration for showing only buffers visiting a file." (bs-config-clear) (setq ;; I want to see *-buffers at the end - bs-buffer-sort-function 'bs-sort-buffer-interns-are-last + bs-buffer-sort-function #'bs-sort-buffer-interns-are-last ;; Don't show files who don't belong to a file - bs-dont-show-function 'bs-visits-non-file)) + bs-dont-show-function #'bs-visits-non-file)) (defun bs-config--files-and-scratch () "Define a configuration for showing buffer *scratch* and file buffers." (bs-config-clear) (setq ;; I want to see *-buffers at the end - bs-buffer-sort-function 'bs-sort-buffer-interns-are-last + bs-buffer-sort-function #'bs-sort-buffer-interns-are-last ;; Don't show files who don't belong to a file - bs-dont-show-function 'bs-visits-non-file + bs-dont-show-function #'bs-visits-non-file ;; Show *scratch* buffer. - bs-must-show-regexp "^\\*scratch\\*$")) + bs-must-show-regexp "\\`\\*scratch\\*\\'")) (defun bs-config--all () "Define a configuration for showing all buffers. @@ -1086,7 +1069,7 @@ Reset all according variables by `bs-config-clear'." Internal buffers appear at end of all buffers." (bs-config-clear) ;; I want to see *-buffers at the end - (setq bs-buffer-sort-function 'bs-sort-buffer-interns-are-last)) + (setq bs-buffer-sort-function #'bs-sort-buffer-interns-are-last)) (defun bs-set-configuration (name) "Set configuration to the one saved under string NAME in `bs-configurations'. @@ -1170,7 +1153,7 @@ and move point to current buffer." (let* ((inhibit-read-only t) (map-fun (lambda (entry) (string-width (buffer-name entry)))) - (max-length-of-names (apply 'max + (max-length-of-names (apply #'max (cons 0 (mapcar map-fun list)))) (name-entry-length (min bs-maximal-buffer-name-column (max bs-minimal-buffer-name-column @@ -1219,7 +1202,7 @@ buffer list used for buffer cycling." "Like `message' but don't log it on the message log. All arguments ARGS are transferred to function `message'." (let ((message-log-max nil)) - (apply 'message args))) + (apply #'message args))) (defvar bs--cycle-list nil "Current buffer list used for cycling.") @@ -1415,8 +1398,7 @@ function of one argument, the string heading for the column." (bs--format-aux (funcall col (bs--get-value (car column))) (nth 3 column) ; align (bs--get-value (nth 1 column)))) - bs-attributes-list - "")) + bs-attributes-list)) (defun bs--show-with-configuration (name &optional arg) "Display buffer list of configuration with name NAME. commit bc2b815f098751be700243cd0c47806a0d08dc68 Author: Stefan Monnier Date: Tue Mar 25 13:43:53 2025 -0400 bookmark.el: Cosmetic changes * lisp/bookmark.el: Prefer # to quote function arguments. (bookmark-watch-bookmark-file): Remove redundant `:group`. (bookmark-bmenu-mode): Let `define-derived-mode` take care of `mode-class` property. diff --git a/lisp/bookmark.el b/lisp/bookmark.el index 0de42bcea51..344ad4ec7d0 100644 --- a/lisp/bookmark.el +++ b/lisp/bookmark.el @@ -98,8 +98,7 @@ This file defaults to `bookmark-default-file'. But during an Emacs session, :version "27.1" :type '(choice (const :tag "Suggest to reload bookmark file if changed" t) (const :tag "Silently reload bookmark file if changed" silent) - (const :tag "Ignore changes of bookmark file" nil)) - :group 'bookmark) + (const :tag "Ignore changes of bookmark file" nil))) (defcustom bookmark-version-control 'nospecial "Whether or not to make numbered backups of the bookmark file. @@ -386,7 +385,7 @@ type is read from the symbol property named (defun bookmark-all-names () "Return a list of all current bookmark names." (bookmark-maybe-load-default-file) - (mapcar 'bookmark-name-from-full-record bookmark-alist)) + (mapcar #'bookmark-name-from-full-record bookmark-alist)) (defun bookmark-get-bookmark (bookmark-name-or-record &optional noerror) @@ -587,7 +586,7 @@ If DEFAULT is nil then return empty string for empty input." (bookmark-maybe-load-default-file) ; paranoia (if (listp last-nonmenu-event) (bookmark-menu-popup-paned-menu t prompt - (mapcar 'bookmark-name-from-full-record + (mapcar #'bookmark-name-from-full-record (bookmark-maybe-sort-alist))) (let* ((completion-ignore-case bookmark-completion-ignore-case) (default (unless (equal "" default) default))) @@ -606,7 +605,7 @@ from other commands that pass in the bookmark name, so (called-interactively-p 'interactive) (add-to-history 'bookmark-history ,string))) -(defvar bookmark-make-record-function 'bookmark-make-record-default +(defvar bookmark-make-record-function #'bookmark-make-record-default "A function that should be called to create a bookmark record. Modes may set this variable buffer-locally to enable bookmarking of locations that should be treated specially, such as Info nodes, @@ -916,7 +915,7 @@ CODING is the symbol of the coding-system in which the file is encoded." ;;; Core code: -(define-obsolete-function-alias 'bookmark-maybe-message 'message "27.1") +(define-obsolete-function-alias 'bookmark-maybe-message #'message "27.1") (defvar-keymap bookmark-minibuffer-read-name-map :parent minibuffer-local-map @@ -1319,7 +1318,7 @@ DISPLAY-FUNC would be `switch-to-buffer-other-window'." ;; Don't use `switch-to-buffer' because it would let the ;; window-point override the bookmark's point when ;; `switch-to-buffer-preserve-window-point' is non-nil. - (bookmark--jump-via bookmark (or display-func 'pop-to-buffer-same-window))) + (bookmark--jump-via bookmark (or display-func #'pop-to-buffer-same-window))) ;;;###autoload @@ -1349,7 +1348,7 @@ BOOKMARK-NAME-OR-RECORD has a file, but that file no longer exists, then offer interactively to relocate BOOKMARK-NAME-OR-RECORD." (condition-case err (funcall (or (bookmark-get-handler bookmark-name-or-record) - 'bookmark-default-handler) + #'bookmark-default-handler) (bookmark-get-bookmark bookmark-name-or-record)) (bookmark-error-no-filename ;file-error ;; We were unable to find the marked file, so ask if user wants to @@ -1377,7 +1376,7 @@ then offer interactively to relocate BOOKMARK-NAME-OR-RECORD." (bookmark-relocate bookmark-name-or-record) ;; Try again. (funcall (or (bookmark-get-handler bookmark-name-or-record) - 'bookmark-default-handler) + #'bookmark-default-handler) (bookmark-get-bookmark bookmark-name-or-record))) (message "Bookmark not relocated; consider removing it (%s)." @@ -1466,7 +1465,7 @@ minibuffer history list `bookmark-history'." (insert (bookmark-location bookmark-name))) ;;;###autoload -(defalias 'bookmark-locate 'bookmark-insert-location) +(defalias 'bookmark-locate #'bookmark-insert-location) (defun bookmark-location (bookmark-name-or-record) "Return a description of the location of BOOKMARK-NAME-OR-RECORD." @@ -1904,11 +1903,6 @@ unique numeric suffixes \"<2>\", \"<3>\", etc." ["Save Bookmarks" bookmark-bmenu-save t] ["Load Bookmarks" bookmark-bmenu-load t])) -;; Bookmark Buffer Menu mode is suitable only for specially formatted -;; data. -(put 'bookmark-bmenu-mode 'mode-class 'special) - - ;; todo: need to display whether or not bookmark exists as a buffer in ;; flag column. @@ -2007,9 +2001,9 @@ deletion, or > if it is flagged for displaying." (bookmark-bmenu--revert)) ;;;###autoload -(defalias 'list-bookmarks 'bookmark-bmenu-list) +(defalias 'list-bookmarks #'bookmark-bmenu-list) ;;;###autoload -(defalias 'edit-bookmarks 'bookmark-bmenu-list) +(defalias 'edit-bookmarks #'bookmark-bmenu-list) (define-obsolete-function-alias 'bookmark-bmenu-set-header #'tabulated-list-init-header "28.1") @@ -2303,7 +2297,7 @@ the related behaviors of `bookmark-save' and `bookmark-bmenu-save'." (pop-up-windows t)) (delete-other-windows) (switch-to-buffer (other-buffer) nil t) - (bookmark--jump-via bmrk 'pop-to-buffer) + (bookmark--jump-via bmrk #'pop-to-buffer) (bury-buffer menu))) @@ -2317,7 +2311,7 @@ the related behaviors of `bookmark-save' and `bookmark-bmenu-save'." "Select this line's bookmark in other window, leaving bookmark menu visible." (interactive nil bookmark-bmenu-mode) (let ((bookmark (bookmark-bmenu-bookmark))) - (bookmark--jump-via bookmark 'switch-to-buffer-other-window))) + (bookmark--jump-via bookmark #'switch-to-buffer-other-window))) (defun bookmark-bmenu-other-frame () @@ -2638,7 +2632,7 @@ This also runs `bookmark-exit-hook'." (bookmark-save))) (unless noninteractive - (add-hook 'kill-emacs-hook 'bookmark-exit-hook-internal)) + (add-hook 'kill-emacs-hook #'bookmark-exit-hook-internal)) (defun bookmark-unload-function () "Unload the Bookmark library." commit 050325da303996cf5be7bd13d0a13e0bd12fa25e Author: Juri Linkov Date: Tue Mar 25 19:41:33 2025 +0200 * lisp/treesit-x.el: New file. * lisp/treesit.el (treesit--copy-queries): New function. (treesit--install-language-grammar-1): Use it. https://lists.gnu.org/archive/html/emacs-devel/2025-03/msg01312.html diff --git a/etc/NEWS b/etc/NEWS index d90836b8c6d..27d799d3d26 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1651,6 +1651,13 @@ A major mode based on the tree-sitter library for editing "go.work" files. If tree-sitter is properly set-up by the user, it can be enabled for files named "go.work". +** The file treesit-x.el defines a number of simple treesit modes. +Using the new macro 'define-treesit-generic-mode' generic modes are +defined including, but not limited to, 'gitattributes-generic-ts-mode'. +Visiting a file in such mode ask for confirmation before installing +its tree-sitter grammar. Then it highlights the visited file +according to syntax defined by the grammar. + * Incompatible Lisp Changes in Emacs 31.1 diff --git a/lisp/treesit-x.el b/lisp/treesit-x.el new file mode 100644 index 00000000000..538f9df5b8e --- /dev/null +++ b/lisp/treesit-x.el @@ -0,0 +1,229 @@ +;;; treesit-x.el --- tree-sitter extensions -*- lexical-binding: t; -*- + +;; Copyright (C) 2025 Free Software Foundation, Inc. + +;; Maintainer: emacs-devel@gnu.org +;; Keywords: treesit, tree-sitter, languages, generic, font-lock +;; Package: emacs + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . + +;;; Commentary: + +;; This file contains a collection of treesit generic modes. +;; +;; INSTALLATION: +;; +;; Add this line to your init file: +;; +;; (require 'treesit-x) +;; +;; Then visiting a file that has a tree-sitter grammar will ask you +;; for confirmation before installing that grammar. Afterwards it +;; will highlight text according to syntax defined by the grammar. + +;;; Code: + +(require 'treesit) + +;;; Define treesit generic mode + +;;;###autoload +(defvar treesit-generic-mode-list nil + "A list of mode names for `treesit-generic-mode'. +Do not add entries to this list directly; use `define-treesit-generic-mode' +instead (which see).") + +;;;###autoload +(defmacro define-treesit-generic-mode (mode &optional docstring &rest body) + "Create a new treesit generic mode MODE. + +A \"treesit\" mode is a simple major mode with basic support for +Font Lock mode, but otherwise does not have any special keystrokes +or functionality available. + +MODE is the name of the command for the treesit generic mode; don't +quote it. The optional DOCSTRING is the documentation for the mode +command. If you do not supply it, `define-treesit-generic-mode' +uses a default documentation string instead. + +KEYWORD-ARGS are optional arguments in the form of pairs of keyword +and value. The following keyword arguments are currently supported: + + :lang is a language symbol of the corresponding tree-sitter grammar. + + :source is either a string for the URL or a list in the same format + as for elements in `treesit-language-source-alist', i.e. + (URL REVISION SOURCE-DIR CC C++ COMMIT). + + :auto-mode is a regular expression or a list of regular expressions + to add to `auto-mode-alist'. These regular expressions are added + when Emacs runs the macro expansion. + + :parent is the name of the command for the parent mode. + + :name is a string that will appear in the mode line. + +BODY are forms to execute just before running the +hooks for the new mode. Do not use `interactive' here. +These forms do some additional setup. The mode command calls +these functions just before it runs `treesit-major-mode-setup' +and the mode hook `MODE-hook'. + +See at the bottom of the file treesit-x.el for some examples +of `define-treesit-generic-mode'. + +\(fn MODE [DOCSTRING] [KEYWORD-ARGS...] &rest BODY)" + (declare (debug (&define name [&optional stringp] + [&rest keywordp sexp] def-body)) + (doc-string 2) + (indent defun)) + + (when (and docstring (not (stringp docstring))) + ;; Some trickiness, since what appears to be the docstring may really be + ;; the first element of the body. + (push docstring body) + (setq docstring nil)) + + (let* ((mode-name (symbol-name mode)) + (pretty-name (capitalize (replace-regexp-in-string + "-mode\\'" "" mode-name))) + lang source auto-mode parent name) + + ;; Process the keyword args. + (while (keywordp (car body)) + (pcase (pop body) + (:lang (setq lang (pop body))) + (:source (setq source (pop body))) + (:auto-mode (setq auto-mode (pop body))) + (:parent (setq parent (pop body))) + (:name (setq name (pop body))) + (_ (pop body)))) + + (when (stringp source) + (setq source (list 'quote (ensure-list source)))) + (when (stringp auto-mode) + (setq auto-mode (list 'quote (ensure-list auto-mode)))) + + `(progn + ;; Add lang and source to source-alist. + (add-to-list 'treesit-language-source-alist (cons ,lang ,source)) + + ;; Add a new entry. + (add-to-list 'treesit-generic-mode-list ,mode-name) + + ;; Add it to auto-mode-alist + (dolist (re ,auto-mode) + (add-to-list 'auto-mode-alist (cons re ',mode))) + + (define-derived-mode ,mode + ,(or parent 'fundamental-mode) + ,(or name pretty-name) + ,(or docstring + (concat (or name pretty-name) " mode.\n" + "This a tree-sitter mode defined with `define-treesit-generic-mode'.\n" + "It runs `" mode-name "-hook' as the last thing it does.")) + (treesit-generic-mode-setup ,lang ,source) + ,@body + (treesit-major-mode-setup))))) + +;;;###autoload +(defun treesit-generic-mode-setup (lang source) + "Go into the treesit generic mode MODE." + (unless (treesit-ready-p lang t) + (when (y-or-n-p (format "Install grammar for %s?" lang)) + (apply + #'treesit--install-language-grammar-1 + (locate-user-emacs-file "tree-sitter") + lang source))) + + (when (treesit-ready-p lang) + (setq treesit-primary-parser (treesit-parser-create lang)) + + (when-let* ((query (treesit-generic-mode-font-lock-query lang))) + (setq-local treesit-font-lock-settings + (treesit-font-lock-rules + :language lang + :feature 'highlights + query)) + (setq-local treesit-font-lock-feature-list '((highlights)))))) + +;;;###autoload +(defun treesit-generic-mode (mode) + "Enter treesit generic mode MODE. + +Treesit generic modes provide basic font-lock functionality for +tree-sitter grammars. (Files which are too small to warrant their +own mode, but have comments, keywords, and the like.) + +To define a generic mode, use the function `define-treesit-generic-mode'. +Some treesit generic modes are defined in `treesit-x.el'." + (interactive + (list (completing-read "Treesit generic mode: " treesit-generic-mode-list nil t))) + (funcall (intern mode))) + +;;; Generic font-lock handling + +(defvar treesit-generic-mode-font-lock-map + '( + ("@boolean" . "@font-lock-constant-face") + ("@comment" . "@font-lock-comment-face") + ("@constant" . "@font-lock-constant-face") + ("@error" . "@font-lock-warning-face") + ("@escape" . "@font-lock-escape-face") + ("@keyword" . "@font-lock-keyword-face") + ("@operator" . "@font-lock-operator-face") + ("@property" . "@font-lock-property-use-face") + ("@punctuation.bracket" . "@font-lock-bracket-face") + ("@punctuation.delimiter" . "@font-lock-delimiter-face") + ("@punctuation.special" . "@font-lock-misc-punctuation-face") + ("@string.regexp" . "@font-lock-regexp-face") + ("@string.special" . "@font-lock-string-face") + ("@string" . "@font-lock-string-face") + ("@variable.builtin" . "@font-lock-builtin-face") + ("@variable.parameter" . "@font-lock-variable-name-face") + ) + "A mapping from default capture names to font-lock faces.") + +(defun treesit-generic-mode-font-lock-query (lang) + "Find the file highlights.scm and return its queries as a string." + (let* ((file (expand-file-name + (format "queries/%s/highlights.scm" lang) + (locate-user-emacs-file "tree-sitter"))) + (query (when (file-exists-p file) + (with-temp-buffer + (insert-file-contents file) + (buffer-substring-no-properties (point-min) (point-max)))))) + (when query + (setq query (replace-regexp-in-string "(#set! [^)]+)" "" query nil nil)) + (pcase-dolist (`(,from . ,to) treesit-generic-mode-font-lock-map) + (setq query (replace-regexp-in-string from to query nil t))) + query))) + +;;; Default treesit generic modes + +(define-treesit-generic-mode gitattributes-generic-ts-mode + "Tree-sitter generic mode for .gitattributes files." + :lang 'gitattributes + :source "https://github.com/tree-sitter-grammars/tree-sitter-gitattributes" + :auto-mode "gitattributes\\'" + :name "Git-Attributes" + (setq-local comment-start "# ") + (setq-local comment-end "")) + +(provide 'treesit-x) + +;;; treesit-x.el ends here diff --git a/lisp/treesit.el b/lisp/treesit.el index 40588999192..54c29326df2 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -5100,7 +5100,8 @@ If anything goes wrong, this function signals an `treesit-error'." (when commit (treesit--git-checkout-branch workdir commit)) (setq version (treesit--language-git-revision workdir)) - (treesit--build-grammar workdir out-dir lang source-dir cc c++)) + (treesit--build-grammar workdir out-dir lang source-dir cc c++) + (treesit--copy-queries workdir out-dir lang)) ;; Remove workdir if it's not a repo owned by user and we ;; managed to create it in the first place. (when (and (not url-is-dir) (file-exists-p workdir)) @@ -5179,6 +5180,16 @@ If anything goes wrong, this function signals an `treesit-error'." (ignore-errors (delete-file old-fname))) (message "Library installed to %s/%s" out-dir lib-name)))) +(defun treesit--copy-queries (workdir out-dir lang) + "Copy the LANG \"queries\" directory from WORKDIR to OUT-DIR." + (let* ((query-dir (expand-file-name "queries" workdir)) + (dest-dir (expand-file-name (format "queries/%s" lang) out-dir))) + (when (file-directory-p query-dir) + (unless (file-directory-p dest-dir) + (make-directory dest-dir t)) + (dolist (file (directory-files query-dir t "\\.scm\\'" t)) + (copy-file file (expand-file-name (file-name-nondirectory file) dest-dir) t))))) + ;;; Shortdocs (defun treesit--generate-shortdoc-examples () commit e67f03bf35b97d2898b64281215be6717b659839 Author: Stefan Monnier Date: Tue Mar 25 11:23:48 2025 -0400 lisp/gnus/mm-encode.el (mm-default-buffer-type): Obey the mode hierarchy diff --git a/lisp/gnus/mm-encode.el b/lisp/gnus/mm-encode.el index 021c56e26ef..ef75b6da6e1 100644 --- a/lisp/gnus/mm-encode.el +++ b/lisp/gnus/mm-encode.el @@ -110,7 +110,8 @@ This variable should never be set directly, but bound before a call to (defun mm-default-buffer-type (buffer) "Return a default content type for BUFFER, a buffer name." (if-let* ((buf (get-buffer buffer)) - ((eq (buffer-local-value 'major-mode buf) 'diff-mode))) + ((provided-mode-derived-p (buffer-local-value 'major-mode buf) + 'diff-mode))) "text/x-patch" "text/plain")) (defun mm-safer-encoding (encoding &optional type) commit a15534f32e1a978dee6ec96d6b60b5e755666e70 Author: Michael Albinus Date: Tue Mar 25 15:13:16 2025 +0100 * lisp/gnus/mm-encode.el (mm-default-buffer-type): Check `major-mode'. diff --git a/lisp/gnus/mm-encode.el b/lisp/gnus/mm-encode.el index 262b1c4d21c..021c56e26ef 100644 --- a/lisp/gnus/mm-encode.el +++ b/lisp/gnus/mm-encode.el @@ -109,10 +109,8 @@ This variable should never be set directly, but bound before a call to (defun mm-default-buffer-type (buffer) "Return a default content type for BUFFER, a buffer name." - (if (and (stringp buffer) - (string-match-p - (rx (| "*Diff*" "*vc-diff*" "*ediff-diff*" "*ediff-custom-diff*")) - buffer)) + (if-let* ((buf (get-buffer buffer)) + ((eq (buffer-local-value 'major-mode buf) 'diff-mode))) "text/x-patch" "text/plain")) (defun mm-safer-encoding (encoding &optional type) commit 0b1102a70413dabba082d822c200b014464de667 Author: Philipp Stephani Date: Tue Mar 25 14:24:04 2025 +0100 Rename 'buffer-too-small' to 'memory-buffer-too-small'. This clarifies that the error isn't talking about an editing buffer. * src/emacs-module.c (module_memory_buffer_too_small): Rename from 'module_buffer_too_small'. (module_copy_string_contents, module_extract_big_integer): Adapt callers. (syms_of_module): Rename symbol 'buffer-too-small' to 'memory-buffer-too-small'. diff --git a/src/emacs-module.c b/src/emacs-module.c index 32b78b0d978..22590a23cb2 100644 --- a/src/emacs-module.c +++ b/src/emacs-module.c @@ -224,11 +224,11 @@ module_decode_utf_8 (const char *str, ptrdiff_t len) return s; } -/* Signal an error of type `buffer-too-small'. */ +/* Signal an error of type `memory-buffer-too-small'. */ static void -module_buffer_too_small (ptrdiff_t actual, ptrdiff_t required) +module_memory_buffer_too_small (ptrdiff_t actual, ptrdiff_t required) { - xsignal2 (Qbuffer_too_small, INT_TO_INTEGER (actual), + xsignal2 (Qmemory_buffer_too_small, INT_TO_INTEGER (actual), INT_TO_INTEGER (required)); } @@ -825,7 +825,7 @@ module_copy_string_contents (emacs_env *env, emacs_value value, char *buf, { ptrdiff_t actual = *len; *len = required_buf_size; - module_buffer_too_small (actual, required_buf_size); + module_memory_buffer_too_small (actual, required_buf_size); } *len = required_buf_size; @@ -1113,7 +1113,7 @@ module_extract_big_integer (emacs_env *env, emacs_value arg, int *sign, { ptrdiff_t actual = *count; *count = required; - module_buffer_too_small (actual, required); + module_memory_buffer_too_small (actual, required); } /* Set u = abs(x). See https://stackoverflow.com/a/17313717. */ if (0 < x) @@ -1147,7 +1147,7 @@ module_extract_big_integer (emacs_env *env, emacs_value arg, int *sign, { ptrdiff_t actual = *count; *count = required; - module_buffer_too_small (actual, required); + module_memory_buffer_too_small (actual, required); } size_t written; mpz_export (magnitude, &written, order, size, endian, nails, *x); @@ -1773,10 +1773,10 @@ syms_of_module (void) Fput (Qinvalid_arity, Qerror_message, build_string ("Invalid function arity")); - DEFSYM (Qbuffer_too_small, "buffer-too-small"); - Fput (Qbuffer_too_small, Qerror_conditions, - list2 (Qbuffer_too_small, Qerror)); - Fput (Qbuffer_too_small, Qerror_message, + DEFSYM (Qmemory_buffer_too_small, "memory-buffer-too-small"); + Fput (Qmemory_buffer_too_small, Qerror_conditions, + list2 (Qmemory_buffer_too_small, Qerror)); + Fput (Qmemory_buffer_too_small, Qerror_message, build_unibyte_string ("Memory buffer too small")); DEFSYM (Qmodule_function_p, "module-function-p"); commit 6a3e2b88d26db4f703c566cf9b508f8c83ea8850 Author: Eli Zaretskii Date: Tue Mar 25 14:37:17 2025 +0200 ; Improve documentation of "function types" * doc/lispref/functions.texi (Declare Form): * doc/lispref/objects.texi (Type Specifiers): Improve wording and indexing. diff --git a/doc/lispref/functions.texi b/doc/lispref/functions.texi index 1da5208065e..824db5a0ec8 100644 --- a/doc/lispref/functions.texi +++ b/doc/lispref/functions.texi @@ -2727,12 +2727,15 @@ for the code emitted for the function (@pxref{Native-Compilation Variables}). @cindex function type declaration +@cindex inferred type of function @item (ftype @var{type} &optional @var{function}) Declare @var{type} to be the type of this function. This is used for documentation by @code{describe-function}. Also it can be used by the native compiler (@pxref{Native Compilation}) for improving code generation and for deriving more precisely the type of other functions -without type declaration. +without type declaration. Functions that have such type declarations +will be shown by @kbd{C-h C-f} as having a @dfn{declared type} (as +opposed to @dfn{inferred type} of functions without declaration). @var{type} is a @dfn{type specifier} (@pxref{Type Specifiers}) in the form @w{@code{(function (@var{arg-1-type} @dots{} @var{arg-n-type}) diff --git a/doc/lispref/objects.texi b/doc/lispref/objects.texi index 630765213a2..264a780f93d 100644 --- a/doc/lispref/objects.texi +++ b/doc/lispref/objects.texi @@ -1552,9 +1552,9 @@ types and the return type of a function. Argument types can be interleaved with symbols @code{&optional} and @code{&rest} to match the function's arguments (@pxref{Argument List}). -The type specifier represent a function whose first parameter is of type -@code{symbol}, the second optional parameter is of type @code{float}, -and which returns an @code{integer}: +The following type specifier represents a function whose first parameter +is of type @code{symbol}, the second optional parameter is of type +@code{float}, and which returns an @code{integer}: @example (function (symbol &optional float) integer) commit 2adc912d0ec277d9ffe6485e7d81849fab98a2ea Author: Michael Albinus Date: Tue Mar 25 11:45:29 2025 +0100 Use better attachment defaults for *diff* buffers * lisp/gnus/mm-encode.el (mm-default-buffer-type): New defun. * lisp/gnus/mml.el (mml-attach-buffer): Use it. diff --git a/lisp/gnus/mm-encode.el b/lisp/gnus/mm-encode.el index 2ac336e800f..262b1c4d21c 100644 --- a/lisp/gnus/mm-encode.el +++ b/lisp/gnus/mm-encode.el @@ -107,6 +107,14 @@ This variable should never be set directly, but bound before a call to "application/octet-stream" (mailcap-extension-to-mime (match-string 0 file)))) +(defun mm-default-buffer-type (buffer) + "Return a default content type for BUFFER, a buffer name." + (if (and (stringp buffer) + (string-match-p + (rx (| "*Diff*" "*vc-diff*" "*ediff-diff*" "*ediff-custom-diff*")) + buffer)) + "text/x-patch" "text/plain")) + (defun mm-safer-encoding (encoding &optional type) "Return an encoding similar to ENCODING but safer than it." (cond diff --git a/lisp/gnus/mml.el b/lisp/gnus/mml.el index 201f64eb654..e53d35146e8 100644 --- a/lisp/gnus/mml.el +++ b/lisp/gnus/mml.el @@ -1508,7 +1508,8 @@ FILENAME is a suggested file name for the attachment should a recipient wish to save a copy separate from the message." (interactive (let* ((buffer (read-buffer "Attach buffer: ")) - (type (mml-minibuffer-read-type buffer "text/plain")) + (type (mml-minibuffer-read-type + buffer (mm-default-buffer-type buffer))) (description (mml-minibuffer-read-description)) (disposition (mml-minibuffer-read-disposition type nil))) (list buffer type description disposition))) commit d6c7a77465203bfc277ff489be0f4f4d476615c7 Author: Michael Albinus Date: Tue Mar 25 09:28:43 2025 +0100 * test/infra/Dockerfile.emba (emacs-tree-sitter): Add gowork grammar. diff --git a/test/infra/Dockerfile.emba b/test/infra/Dockerfile.emba index dfa0fe4b61a..201d48056e7 100644 --- a/test/infra/Dockerfile.emba +++ b/test/infra/Dockerfile.emba @@ -133,6 +133,7 @@ RUN src/emacs -Q --batch \ (elixir "https://github.com/elixir-lang/tree-sitter-elixir") \ (go "https://github.com/tree-sitter/tree-sitter-go") \ (gomod "https://github.com/camdencheek/tree-sitter-go-mod") \ + (gowork "https://github.com/omertuc/tree-sitter-go-work") \ (heex "https://github.com/phoenixframework/tree-sitter-heex") \ (html "https://github.com/tree-sitter/tree-sitter-html") \ (java "https://github.com/tree-sitter/tree-sitter-java") \ commit 40bf281c644e3323f010b007c9bfc730e92896aa Author: James Cherti Date: Thu Mar 20 09:01:36 2025 -0400 outline-move-subtree-down/up: Fix for non-nil outline-blank-line * lisp/outline.el (outline-move-subtree-down): Include blank line when outline-blank-line is t (bug#77238). Copyright-paperwork-exempt: yes diff --git a/lisp/outline.el b/lisp/outline.el index 1a1c8705ee2..1209b1ce766 100644 --- a/lisp/outline.el +++ b/lisp/outline.el @@ -915,7 +915,8 @@ the match data is set appropriately." ;; move it to, adding a newline if necessary, to ensure these points ;; are at bol on the line below the subtree. (end-point-func (lambda () - (outline-end-of-subtree) + (let ((outline-blank-line nil)) + (outline-end-of-subtree)) (if (eq (char-after) ?\n) (forward-char 1) (if (and (eobp) (not (bolp))) (insert "\n"))) (point))) commit 7ec0ee742da17864b554e2cf4384d2a12baaf1e8 Author: Stefan Monnier Date: Tue Mar 25 02:09:48 2025 -0400 (built-in-class--make): Take list of types rather than classes Consolidate the conversion from types to classes into `built-in-class--make` instead of duplicating it in ever caller. * lisp/emacs-lisp/cl-preloaded.el (built-in-class--make): Take list of types rather than classes. (cl--define-built-in-type): Simplify accordingly. diff --git a/lisp/emacs-lisp/cl-preloaded.el b/lisp/emacs-lisp/cl-preloaded.el index 7017fcd5b83..dfea8d6c8e3 100644 --- a/lisp/emacs-lisp/cl-preloaded.el +++ b/lisp/emacs-lisp/cl-preloaded.el @@ -292,7 +292,13 @@ (:include cl--class) (:noinline t) (:constructor nil) - (:constructor built-in-class--make (name docstring parents)) + (:constructor built-in-class--make + (name docstring parent-types + &aux (parents + (mapcar (lambda (type) + (or (get type 'cl--class) + (error "Unknown type: %S" type))) + parent-types)))) (:copier nil)) "Type descriptors for built-in types. The `slots' (and hence `index-table') are currently unused." @@ -322,13 +328,7 @@ The `slots' (and hence `index-table') are currently unused." ;; (message "Missing predicate for: %S" name) nil) (put ',name 'cl--class - (built-in-class--make ',name ,docstring - (mapcar (lambda (type) - (let ((class (get type 'cl--class))) - (unless class - (error "Unknown type: %S" type)) - class)) - ',parents)))))) + (built-in-class--make ',name ,docstring ',parents))))) ;; FIXME: Our type DAG has various quirks: ;; - Some `keyword's are also `symbol-with-pos' but that's not reflected commit c3492b969da3b117904a070a2617b31dd965f109 Author: Po Lu Date: Tue Mar 25 10:37:09 2025 +0800 ; * msdos/emacs.djl: Don't interfere with the order of other symbols. diff --git a/msdos/emacs.djl b/msdos/emacs.djl index 65b2401667e..e8791cd6831 100644 --- a/msdos/emacs.djl +++ b/msdos/emacs.djl @@ -56,8 +56,7 @@ SECTIONS the result that lread.o (which defines lispsym) must be aligned to a multiple of 8 by hand. */ lread.o(.bss) - EXCLUDE_FILE(lread.o) *(.bss) - *(.gnu.linkonce.b.*) + *(EXCLUDE_FILE(lread.o) .bss .gnu.linkonce.b.*) *(COMMON) end = . ; PROVIDE(_end = .) ; . = ALIGN(0x200); commit 49eab999f13fede351ab7700c1469ba6cbf3d6b8 Author: Po Lu Date: Tue Mar 25 10:34:40 2025 +0800 Fix the DJGPP build * msdos/emacs.djl (.bss): Guarantee that lread.o is 8-byte aligned. * msdos/sed2v2.inp (ALIGNOF_INT, ALIGNOF_LONG) (ALIGNOF_LONG_LONG): Correct typos. * src/term.c (tty_free_frame_resources): Synchronize with non-DOS variant. diff --git a/msdos/emacs.djl b/msdos/emacs.djl index 3f6e0852b32..65b2401667e 100644 --- a/msdos/emacs.djl +++ b/msdos/emacs.djl @@ -52,7 +52,12 @@ SECTIONS } .bss SIZEOF(.data) + ADDR(.data) : { - *(.bss .gnu.linkonce.b.*) + /* Binutils always assumes an alignment of 2 for this section, with + the result that lread.o (which defines lispsym) must be aligned + to a multiple of 8 by hand. */ + lread.o(.bss) + EXCLUDE_FILE(lread.o) *(.bss) + *(.gnu.linkonce.b.*) *(COMMON) end = . ; PROVIDE(_end = .) ; . = ALIGN(0x200); diff --git a/msdos/sed2v2.inp b/msdos/sed2v2.inp index 6a6a3c2d9a8..cb44aea4634 100644 --- a/msdos/sed2v2.inp +++ b/msdos/sed2v2.inp @@ -140,9 +140,9 @@ s/^#undef HAVE_DECL_STRTOIMAX *$/#define HAVE_DECL_STRTOIMAX 1/ s/^#undef HAVE_PDUMPER *$/#define HAVE_PDUMPER 1/ s/^#undef HAVE_STRTOLL *$/#define HAVE_STRTOLL 1/ s/^#undef HAVE_STRTOULL *$/#define HAVE_STRTOULL 1/ -s/^#undef ALIGNOF_INT *$/s/^.*$/#define ALIGNOF_INT 4/ -s/^#undef ALIGNOF_LONG *$/s/^.*$/#define ALIGNOF_LONG 4/ -s/^#undef ALIGNOF_LONG_LONG *$/s/^.*$/#define ALIGNOF_LONG_LONG 4/ +/^#undef ALIGNOF_INT *$/s/^.*$/#define ALIGNOF_INT 4/ +/^#undef ALIGNOF_LONG *$/s/^.*$/#define ALIGNOF_LONG 4/ +/^#undef ALIGNOF_LONG_LONG *$/s/^.*$/#define ALIGNOF_LONG_LONG 4/ /^#undef HAVE_STRUCT_DIRENT_D_TYPE *$/c\ #if __DJGPP__ + (__DJGPP_MINOR__ >= 5) >= 3\ #define HAVE_STRUCT_DIRENT_D_TYPE 1/\ diff --git a/src/term.c b/src/term.c index 32f3c8c48d6..864f86aa730 100644 --- a/src/term.c +++ b/src/term.c @@ -4183,6 +4183,10 @@ tty_free_frame_resources (struct frame *f) { eassert (FRAME_TERMCAP_P (f) || FRAME_MSDOS_P (f)); free_frame_faces (f); + /* Deleting a child frame means we have to thoroughly redisplay its + root frame to make sure the child disappears from the display. */ + if (FRAME_PARENT_FRAME (f)) + SET_FRAME_GARBAGED (root_frame (f)); } #endif commit 8efcdcab8658ff9537fe483e0a12875cca90a527 Author: Philipp Stephani Date: Tue Mar 25 02:56:01 2025 +0100 Mimic behavior of 'aref' when signalling out-of-range errors. The convention used by 'aref' and friends is that for 'args-out-of-range', the error data is a list (SEQ INDEX). Use the same convention for the vector-related module functions. * src/emacs-module.c (check_vec_index): Use vector and index as error data. diff --git a/src/emacs-module.c b/src/emacs-module.c index a8386856da7..32b78b0d978 100644 --- a/src/emacs-module.c +++ b/src/emacs-module.c @@ -925,8 +925,7 @@ check_vec_index (Lisp_Object lvec, ptrdiff_t i) { CHECK_VECTOR (lvec); if (! (0 <= i && i < ASIZE (lvec))) - args_out_of_range_3 (INT_TO_INTEGER (i), - make_fixnum (0), make_fixnum (ASIZE (lvec) - 1)); + args_out_of_range (lvec, INT_TO_INTEGER (i)); } static void commit 96a1a07fb1f9d8f3f41f3893ed1b624246a76c43 Author: Philipp Stephani Date: Tue Mar 25 02:50:37 2025 +0100 Don't use 'args-out-of-range' error for too-small buffers. 'args-out-of-range' means that some index argument isn't valid for a given sequence/range, which isn't the case here. Instead, define a new error symbol to mean "user-supplied buffer is too small." Since we never specified nor tested which error symbol was signalled in this case, changing it shouldn't cause severe breakages. * src/emacs-module.c (module_buffer_too_small): New helper function. (module_copy_string_contents, module_extract_big_integer): Use it. (syms_of_module): Define 'buffer-too-small' error symbol. diff --git a/src/emacs-module.c b/src/emacs-module.c index ab6b900df8d..a8386856da7 100644 --- a/src/emacs-module.c +++ b/src/emacs-module.c @@ -224,6 +224,14 @@ module_decode_utf_8 (const char *str, ptrdiff_t len) return s; } +/* Signal an error of type `buffer-too-small'. */ +static void +module_buffer_too_small (ptrdiff_t actual, ptrdiff_t required) +{ + xsignal2 (Qbuffer_too_small, INT_TO_INTEGER (actual), + INT_TO_INTEGER (required)); +} + /* Convenience macros for non-local exit handling. */ @@ -817,9 +825,7 @@ module_copy_string_contents (emacs_env *env, emacs_value value, char *buf, { ptrdiff_t actual = *len; *len = required_buf_size; - args_out_of_range_3 (INT_TO_INTEGER (actual), - INT_TO_INTEGER (required_buf_size), - INT_TO_INTEGER (PTRDIFF_MAX)); + module_buffer_too_small (actual, required_buf_size); } *len = required_buf_size; @@ -1108,10 +1114,8 @@ module_extract_big_integer (emacs_env *env, emacs_value arg, int *sign, { ptrdiff_t actual = *count; *count = required; - args_out_of_range_3 (INT_TO_INTEGER (actual), - INT_TO_INTEGER (required), - INT_TO_INTEGER (module_bignum_count_max)); - } + module_buffer_too_small (actual, required); + } /* Set u = abs(x). See https://stackoverflow.com/a/17313717. */ if (0 < x) u = (EMACS_UINT) x; @@ -1144,8 +1148,7 @@ module_extract_big_integer (emacs_env *env, emacs_value arg, int *sign, { ptrdiff_t actual = *count; *count = required; - args_out_of_range_3 (INT_TO_INTEGER (actual), INT_TO_INTEGER (required), - INT_TO_INTEGER (module_bignum_count_max)); + module_buffer_too_small (actual, required); } size_t written; mpz_export (magnitude, &written, order, size, endian, nails, *x); @@ -1771,6 +1774,12 @@ syms_of_module (void) Fput (Qinvalid_arity, Qerror_message, build_string ("Invalid function arity")); + DEFSYM (Qbuffer_too_small, "buffer-too-small"); + Fput (Qbuffer_too_small, Qerror_conditions, + list2 (Qbuffer_too_small, Qerror)); + Fput (Qbuffer_too_small, Qerror_message, + build_unibyte_string ("Memory buffer too small")); + DEFSYM (Qmodule_function_p, "module-function-p"); DEFSYM (Qunicode_string_p, "unicode-string-p"); commit 8be7e98557df8ba708b3f7e285a29f279b609e46 Author: Philipp Stephani Date: Tue Mar 25 00:12:20 2025 +0100 Add an ERT explainer for 'time-equal-p'. * lisp/emacs-lisp/ert.el (ert--explain-time-equal-p): New explainer function. * test/lisp/emacs-lisp/ert-tests.el (ert-test-explain-time-equal-p): New test. diff --git a/lisp/emacs-lisp/ert.el b/lisp/emacs-lisp/ert.el index c8cee72025f..ef00dc73f91 100644 --- a/lisp/emacs-lisp/ert.el +++ b/lisp/emacs-lisp/ert.el @@ -669,6 +669,19 @@ Return nil if they are." (put 'equal-including-properties 'ert-explainer 'ert--explain-equal-including-properties) +(defun ert--explain-time-equal-p (a b) + "Explainer function for `time-equal-p'. +A and B are the time values to compare." + (declare (ftype (function (t t) list)) + (side-effect-free t)) + (unless (time-equal-p a b) + `(different-time-values + ,(format-time-string "%F %T.%N %Z" a t) + ,(format-time-string "%F %T.%N %Z" b t) + difference + ,(format-time-string "%s.%N" (time-subtract a b) t)))) +(function-put #'time-equal-p 'ert-explainer #'ert--explain-time-equal-p) + ;;; Implementation of `ert-info'. ;; TODO(ohler): The name `info' clashes with diff --git a/test/lisp/emacs-lisp/ert-tests.el b/test/lisp/emacs-lisp/ert-tests.el index aec2c92ba81..7a08cb47d82 100644 --- a/test/lisp/emacs-lisp/ert-tests.el +++ b/test/lisp/emacs-lisp/ert-tests.el @@ -792,6 +792,14 @@ This macro is used to test if macroexpansion in `should' works." '(char 1 "o" (different-properties-for-key a (different-atoms b foo)) context-before "f" context-after "o")))) +(ert-deftest ert-test-explain-time-equal-p () + (should-not (ert--explain-time-equal-p 123 '(0 123 0 0))) + (should (equal (ert--explain-time-equal-p 123 '(0 120 0 0)) + '(different-time-values + "1970-01-01 00:02:03.000000000 UTC" + "1970-01-01 00:02:00.000000000 UTC" + difference "3.000000000")))) + (ert-deftest ert-test-stats-set-test-and-result () (let* ((test-1 (make-ert-test :name 'test-1 :body (lambda () nil))) commit cf6d0b48d83ce93e792ef60f6f55f61ebb6f30cf Author: Stefan Monnier Date: Mon Mar 24 17:31:35 2025 -0400 lisp/loadup.el (max-lisp-eval-depth): Bump up a bit This is to accommodate the deep backquoted thingy in `cus-start.el`. diff --git a/lisp/loadup.el b/lisp/loadup.el index 3e87f4811df..6748c0a0750 100644 --- a/lisp/loadup.el +++ b/lisp/loadup.el @@ -103,7 +103,7 @@ ;; During bootstrapping the byte-compiler is run interpreted ;; when compiling itself, which uses a lot more stack ;; than usual. - (setq max-lisp-eval-depth (max max-lisp-eval-depth 3400)))) + (setq max-lisp-eval-depth (max max-lisp-eval-depth 4000)))) (message "Using load-path %s" load-path) commit f66c92a793557f6ac14f6dd07ad97f3a6057b3c9 Author: Stefan Monnier Date: Mon Mar 24 17:14:26 2025 -0400 Expose some lambdas currently hidden in quoted data * lisp/language/chinese.el ("Chinese-GB", "Chinese-BIG5") ("Chinese-CNS", "Chinese-EUC-TW", "Chinese-GBK"): * lisp/isearch.el (isearch-menu-bar-map): * lisp/international/mule-cmds.el (language-info-custom-alist): * lisp/font-lock.el (cpp-font-lock-keywords): * lisp/cus-start.el (): Expose lambda-expressions to the compiler. diff --git a/lisp/cus-start.el b/lisp/cus-start.el index 7d17249f78d..09364b68e11 100644 --- a/lisp/cus-start.el +++ b/lisp/cus-start.el @@ -102,9 +102,9 @@ (word-wrap display boolean) (word-wrap-by-category display boolean "28.1" - :set (lambda (symbol value) - (set-default symbol value) - (when value (require 'kinsoku)))) + :set ,(lambda (symbol value) + (set-default symbol value) + (when value (require 'kinsoku)))) (selective-display-ellipses display boolean) (indicate-empty-lines fringe boolean) (indicate-buffer-boundaries @@ -157,9 +157,9 @@ Leaving \"Default\" unchecked is equivalent with specifying a default of (cursor-in-non-selected-windows cursor ,cursor-type-types nil :tag "Cursor In Non-selected Windows" - :set (lambda (symbol value) - (set-default symbol value) - (force-mode-line-update t))) + :set ,(lambda (symbol value) + (set-default symbol value) + (force-mode-line-update t))) (transient-mark-mode editing-basics boolean nil :standard (not noninteractive) :initialize custom-initialize-delay @@ -220,8 +220,8 @@ Leaving \"Default\" unchecked is equivalent with specifying a default of (coding-system :tag "Single coding system" :value undecided - :match (lambda (widget value) - (and value (not (functionp value))))) + :match ,(lambda (_widget value) + (and value (not (functionp value))))) (function :value ignore)))) ;; dired.c (completion-ignored-extensions dired @@ -310,7 +310,8 @@ Leaving \"Default\" unchecked is equivalent with specifying a default of frames (choice (const :tag "Off" :value nil) (const :tag "On" :value t) - (const :tag "Auto-raise" :value auto-raise)) "26.1") + (const :tag "Auto-raise" :value auto-raise)) + "26.1") (yes-or-no-prompt menu string "30.1") ;; fontset.c ;; FIXME nil is the initial value, fontset.el setqs it. @@ -703,7 +704,8 @@ since it could result in memory overflow and make Emacs crash." display (choice (const :tag "Off" :value nil) (const :tag "Immediate" :value t) - (number :tag "Delay by secs" :value 0.5)) "22.1") + (number :tag "Delay by secs" :value 0.5)) + "22.1") (tool-bar-style frames (choice (const :tag "Images" :value image) @@ -711,18 +713,19 @@ since it could result in memory overflow and make Emacs crash." (const :tag "Both, text below image" :value both) (const :tag "Both, text to right of image" :value both-horiz) (const :tag "Both, text to left of image" :value text-image-horiz) - (const :tag "System default" :value nil)) "24.1") + (const :tag "System default" :value nil)) + "24.1") (tool-bar-max-label-size frames integer "24.1") (tab-bar-position tab-bar (choice (const :tag "Tab bar above tool bar" nil) (const :tag "Tab bar below tool bar" t)) "27.1" - :set (lambda (sym val) - (set-default sym val) - ;; Redraw the bars: - (tab-bar-mode -1) - (tab-bar-mode 1))) + :set ,(lambda (sym val) + (set-default sym val) + ;; Redraw the bars: + (tab-bar-mode -1) + (tab-bar-mode 1))) (auto-hscroll-mode scrolling (choice (const :tag "Don't scroll automatically" @@ -817,7 +820,7 @@ since it could result in memory overflow and make Emacs crash." :format "%v") integer) "27.1" - :safe (lambda (value) (or (booleanp value) (integerp value)))) + :safe ,(lambda (value) (or (booleanp value) (integerp value)))) (display-fill-column-indicator-character display-fill-column-indicator (choice @@ -829,7 +832,7 @@ since it could result in memory overflow and make Emacs crash." :value nil) character) "27.1" - :safe (lambda (value) (or (characterp value) (null value)))) + :safe ,(lambda (value) (or (characterp value) (null value)))) (composition-break-at-point display boolean "29.1") ;; xfaces.c (scalable-fonts-allowed diff --git a/lisp/font-lock.el b/lisp/font-lock.el index c846ed63c4d..188f03cbb9c 100644 --- a/lisp/font-lock.el +++ b/lisp/font-lock.el @@ -2402,16 +2402,16 @@ This should be an integer. Used in `cpp-font-lock-keywords'.") 1 font-lock-string-face prepend) ;; ;; Fontify function macro names. - '("^#[ \t]*define[ \t]+\\([[:alpha:]_][[:alnum:]_$]*\\)(" + `("^#[ \t]*define[ \t]+\\([[:alpha:]_][[:alnum:]_$]*\\)(" (1 font-lock-function-name-face prepend) ;; ;; Macro arguments. - ((lambda (limit) - (re-search-forward - "\\(?:\\([[:alpha:]_][[:alnum:]_]*\\)[,]?\\)" - (or (save-excursion (re-search-forward ")" limit t)) - limit) - t)) + (,(lambda (limit) + (re-search-forward + "\\(?:\\([[:alpha:]_][[:alnum:]_]*\\)[,]?\\)" + (or (save-excursion (re-search-forward ")" limit t)) + limit) + t)) nil nil (1 font-lock-variable-name-face prepend))) ;; ;; Fontify symbol names in #elif or #if ... defined preprocessor directives. diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el index f23ea4c5ed7..91822d1be04 100644 --- a/lisp/international/mule-cmds.el +++ b/lisp/international/mule-cmds.el @@ -2022,13 +2022,13 @@ See `set-language-info-alist' for use in programs." (set-language-info-alist (car elt) (cdr elt))) ;; re-set the environment in case its parameters changed (set-language-environment current-language-environment))) - :type '(alist + :type `(alist :key-type (string :tag "Language environment" :completions - (lambda (string pred action) - (let ((completion-ignore-case t)) - (complete-with-action - action language-info-alist string pred)))) + ,(lambda (string pred action) + (let ((completion-ignore-case t)) + (complete-with-action + action language-info-alist string pred)))) :value-type (alist :key-type symbol :options ((documentation string) diff --git a/lisp/isearch.el b/lisp/isearch.el index fa678740810..e37d1814eb7 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -685,10 +685,10 @@ This is like `describe-bindings', but displays only Isearch keys." (easy-menu-define isearch-menu-bar-map isearch-mode-map "Menu for `isearch-mode'." - '("Isearch" + `("Isearch" ["Cancel search" isearch-cancel :help "Cancel current search and return to starting point" - :filter (lambda (binding) + :filter ,(lambda (binding) (if isearch-success 'isearch-abort binding))] ["Remove characters not found" isearch-abort :help "Quit current search" diff --git a/lisp/language/chinese.el b/lisp/language/chinese.el index d8bd6bea506..cacafc2d884 100644 --- a/lisp/language/chinese.el +++ b/lisp/language/chinese.el @@ -109,11 +109,11 @@ (coding-system-put 'chinese-hz :ascii-compatible-p nil) (set-language-info-alist - "Chinese-GB" '((charset chinese-gb2312 chinese-sisheng) + "Chinese-GB" `((charset chinese-gb2312 chinese-sisheng) (iso639-language . zh) (cjk-locale-symbol . zh_CN) - (setup-function . (lambda () - (use-cjk-char-width-table 'zh_CN))) + (setup-function . ,(lambda () + (use-cjk-char-width-table 'zh_CN))) (exit-function . use-default-char-width-table) (coding-system chinese-iso-8bit iso-2022-cn chinese-hz) (coding-priority chinese-iso-8bit chinese-gbk chinese-big5 @@ -141,11 +141,11 @@ (define-coding-system-alias 'cp950 'chinese-big5) (set-language-info-alist - "Chinese-BIG5" '((charset chinese-big5-1 chinese-big5-2) + "Chinese-BIG5" `((charset chinese-big5-1 chinese-big5-2) (iso639-language . zh) (cjk-locale-symbol . zh_HK) - (setup-function . (lambda () - (use-cjk-char-width-table 'zh_HK))) + (setup-function . ,(lambda () + (use-cjk-char-width-table 'zh_HK))) (exit-function . use-default-char-width-table) (coding-system chinese-big5 chinese-iso-7bit) (coding-priority chinese-big5 iso-2022-cn chinese-iso-8bit @@ -195,14 +195,14 @@ (define-coding-system-alias 'euc-taiwan 'euc-tw) (set-language-info-alist - "Chinese-CNS" '((charset chinese-cns11643-1 chinese-cns11643-2 + "Chinese-CNS" `((charset chinese-cns11643-1 chinese-cns11643-2 chinese-cns11643-3 chinese-cns11643-4 chinese-cns11643-5 chinese-cns11643-6 chinese-cns11643-7) (iso639-language . zh) (cjk-locale-symbol . zh_TW) - (setup-function . (lambda () - (use-cjk-char-width-table 'zh_TW))) + (setup-function . ,(lambda () + (use-cjk-char-width-table 'zh_TW))) (exit-function . use-default-char-width-table) (coding-system iso-2022-cn euc-tw) (coding-priority iso-2022-cn euc-tw chinese-big5 @@ -216,14 +216,14 @@ accepts Big5 for input also (which is then converted to CNS).")) '("Chinese")) (set-language-info-alist - "Chinese-EUC-TW" '((charset chinese-cns11643-1 chinese-cns11643-2 + "Chinese-EUC-TW" `((charset chinese-cns11643-1 chinese-cns11643-2 chinese-cns11643-3 chinese-cns11643-4 chinese-cns11643-5 chinese-cns11643-6 chinese-cns11643-7 chinese-big5-1 chinese-big5-2) (iso639-language . zh) (cjk-locale-symbol . zh_TW) - (setup-function . (lambda () - (use-cjk-char-width-table 'zh_TW))) + (setup-function . ,(lambda () + (use-cjk-char-width-table 'zh_TW))) (exit-function . use-default-char-width-table) (coding-system euc-tw iso-2022-cn) (coding-priority euc-tw chinese-big5 iso-2022-cn @@ -250,11 +250,11 @@ converted to CNS).")) (define-coding-system-alias 'windows-936 'chinese-gbk) (set-language-info-alist - "Chinese-GBK" '((charset chinese-gbk) + "Chinese-GBK" `((charset chinese-gbk) (iso639-language . zh) (cjk-locale-symbol . zh_CN) - (setup-function . (lambda () - (use-cjk-char-width-table 'zh_CN))) + (setup-function . ,(lambda () + (use-cjk-char-width-table 'zh_CN))) (exit-function . use-default-char-width-table) (coding-system chinese-gbk) (coding-priority gbk iso-2022-cn chinese-big5 commit c26862a6c9f2d46f41b4f91972d139a138cb2edf Author: Stefan Monnier Date: Mon Mar 24 17:12:16 2025 -0400 (byte-compile-maybe-guarded): Make its code edebuggable * lisp/emacs-lisp/bytecomp.el (byte-compile--reify-function): Hoist subexpression out of `if`. (byte-compile-variadic-numeric, byte-compile--cond-vars) (byte-compile--cond-switch-prefix, byte-compile-file-form-defalias): Obey `lexical-binding` when evaluating the code we're compiling. (byte-compile--maybe-guarded): New function, extracted from `byte-compile-maybe-guarded`. (byte-compile-maybe-guarded): Use it so we can edebug the code. diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index 1807f8674fb..0ec8db214bc 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el @@ -2946,9 +2946,8 @@ FUN should be an interpreted closure." (push `(,(car binding) ',(cdr binding)) renv)) ((eq binding t)) (t (push `(defvar ,binding) body)))) - (if (null renv) - `(lambda ,args ,@preamble ,@body) - `(let ,renv (lambda ,args ,@preamble ,@body))))) + (let ((fun `(lambda ,args ,@preamble ,@body))) + (if renv `(let ,renv ,fun) fun)))) ;;;###autoload (defun byte-compile (form) @@ -4229,7 +4228,7 @@ This function is never called when `lexical-binding' is nil." (pcase (length form) (1 ;; No args: use the identity value for the operation. - (byte-compile-constant (eval form))) + (byte-compile-constant (eval form lexical-binding))) (2 ;; One arg: compile (OP x) as (* x 1). This is identity for ;; all numerical values including -0.0, infinities and NaNs. @@ -4487,39 +4486,42 @@ being undefined (or obsolete) will be suppressed. If CONDITION's value is (not (featurep \\='emacs)) or (featurep \\='xemacs), that suppresses all warnings during execution of BODY." (declare (indent 1) (debug t)) - `(let* ((fbound-list (byte-compile-find-bound-condition - ,condition '(fboundp functionp) - byte-compile-unresolved-functions)) - (bound-list (byte-compile-find-bound-condition - ,condition '(boundp default-boundp local-variable-p))) - (new-bound-list - ;; (seq-difference byte-compile-bound-variables)) - (delq nil (mapcar (lambda (s) - (if (memq s byte-compile-bound-variables) nil s)) - bound-list))) - ;; Maybe add to the bound list. - (byte-compile-bound-variables - (append new-bound-list byte-compile-bound-variables))) - (mapc #'byte-compile--check-prefixed-var new-bound-list) - (unwind-protect - ;; If things not being bound at all is ok, so must them being - ;; obsolete. Note that we add to the existing lists since Tramp - ;; (ab)uses this feature. - ;; FIXME: If `foo' is obsoleted by `bar', the code below - ;; correctly arranges to silence the warnings after testing - ;; existence of `foo', but the warning should also be - ;; silenced after testing the existence of `bar'. - (let ((byte-compile-not-obsolete-vars - (append byte-compile-not-obsolete-vars bound-list)) - (byte-compile-not-obsolete-funcs - (append byte-compile-not-obsolete-funcs fbound-list))) - ,@body) - ;; Maybe remove the function symbol from the unresolved list. - (dolist (fbound fbound-list) - (when fbound - (setq byte-compile-unresolved-functions - (delq (assq fbound byte-compile-unresolved-functions) - byte-compile-unresolved-functions))))))) + `(byte-compile--maybe-guarded ,condition (lambda () ,@body))) + +(defun byte-compile--maybe-guarded (condition body-fun) + (let* ((fbound-list (byte-compile-find-bound-condition + condition '(fboundp functionp) + byte-compile-unresolved-functions)) + (bound-list (byte-compile-find-bound-condition + condition '(boundp default-boundp local-variable-p))) + (new-bound-list + ;; (seq-difference byte-compile-bound-variables)) + (delq nil (mapcar (lambda (s) + (if (memq s byte-compile-bound-variables) nil s)) + bound-list))) + ;; Maybe add to the bound list. + (byte-compile-bound-variables + (append new-bound-list byte-compile-bound-variables))) + (mapc #'byte-compile--check-prefixed-var new-bound-list) + (unwind-protect + ;; If things not being bound at all is ok, so must them being + ;; obsolete. Note that we add to the existing lists since Tramp + ;; (ab)uses this feature. + ;; FIXME: If `foo' is obsoleted by `bar', the code below + ;; correctly arranges to silence the warnings after testing + ;; existence of `foo', but the warning should also be + ;; silenced after testing the existence of `bar'. + (let ((byte-compile-not-obsolete-vars + (append byte-compile-not-obsolete-vars bound-list)) + (byte-compile-not-obsolete-funcs + (append byte-compile-not-obsolete-funcs fbound-list))) + (funcall body-fun)) + ;; Maybe remove the function symbol from the unresolved list. + (dolist (fbound fbound-list) + (when fbound + (setq byte-compile-unresolved-functions + (delq (assq fbound byte-compile-unresolved-functions) + byte-compile-unresolved-functions))))))) (defun byte-compile-if (form) (byte-compile-form (car (cdr form))) @@ -4550,8 +4552,10 @@ that suppresses all warnings during execution of BODY." ;; and the other is a constant expression whose value can be ;; compared with `eq' (with `macroexp-const-p'). (or - (and (symbolp obj1) (macroexp-const-p obj2) (cons obj1 (eval obj2))) - (and (symbolp obj2) (macroexp-const-p obj1) (cons obj2 (eval obj1))))) + (and (symbolp obj1) (macroexp-const-p obj2) + (cons obj1 (eval obj2 lexical-binding))) + (and (symbolp obj2) (macroexp-const-p obj1) + (cons obj2 (eval obj1 lexical-binding))))) (defun byte-compile--common-test (test-1 test-2) "Most specific common test of `eq', `eql' and `equal'." @@ -4604,7 +4608,7 @@ Return (TAIL VAR TEST CASES), where: ;; Require a non-empty body, since the member ;; function value depends on the switch argument. body - (let ((value (eval expr))) + (let ((value (eval expr lexical-binding))) (and (proper-list-p value) (progn (setq switch-var var) @@ -5174,7 +5178,7 @@ binding slots have been popped." (if (null fun) (message "Macro %s unrecognized, won't work in file" name) (message "Macro %s partly recognized, trying our luck" name) - (push (cons name (eval fun)) + (push (cons name (eval fun lexical-binding)) byte-compile-macro-environment))) (byte-compile-keep-pending form)))) commit e343055f63b7329292641d0bca7d03183f35d871 Author: Stefan Monnier Date: Mon Mar 24 17:08:26 2025 -0400 (buffer-local-set-state): Optimize away unused data * lisp/subr.el (buffer-local-set-state--get): Simplify by making it take only the vars rather than the pairs. (buffer-local-set-state): Adjust accordingly so we don't needlessly keep part of the source code in the compiled code. diff --git a/lisp/subr.el b/lisp/subr.el index cb4d3b7c938..af9289c0216 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -225,20 +225,23 @@ in order to restore the state of the local variables set via this macro. (declare (debug setq)) (unless (evenp (length pairs)) (error "PAIRS must have an even number of variable/value members")) - `(prog1 - (buffer-local-set-state--get ',pairs) - (setq-local ,@pairs))) - -(defun buffer-local-set-state--get (pairs) + (let ((vars nil) + (tmp pairs)) + (while tmp (push (car tmp) vars) (setq tmp (cddr tmp))) + (setq vars (nreverse vars)) + `(prog1 + (buffer-local-set-state--get ',vars) + (setq-local ,@pairs)))) + +(defun buffer-local-set-state--get (vars) (let ((states nil)) - (while pairs - (push (list (car pairs) - (and (boundp (car pairs)) - (local-variable-p (car pairs))) - (and (boundp (car pairs)) - (symbol-value (car pairs)))) - states) - (setq pairs (cddr pairs))) + (dolist (var vars) + (push (list var + (and (boundp var) + (local-variable-p var)) + (and (boundp var) + (symbol-value var))) + states)) (nreverse states))) (defun buffer-local-restore-state (states) commit 4194d5af4585fedfc7f148da72431a67a9c26045 Author: Stefan Kangas Date: Mon Mar 24 21:20:11 2025 +0100 New test for function-get * test/lisp/subr-tests.el (subr-tests-function-get): New test. diff --git a/test/lisp/subr-tests.el b/test/lisp/subr-tests.el index df330bf60fc..3459a653283 100644 --- a/test/lisp/subr-tests.el +++ b/test/lisp/subr-tests.el @@ -1285,6 +1285,22 @@ final or penultimate step during initialization.")) (nconc cycle cycle) (should-not (plistp cycle)))) +(defun subr-tests--some-fun ()) +(defalias 'subr-tests--some-alias #'subr-tests--some-fun) + +(ert-deftest subr-tests-function-get () + (unwind-protect + (progn + (should (eq (function-get 'subr-tests--some-fun 'prop) nil)) + (should (eq (function-get 'subr-tests--some-alias 'prop) nil)) + ;; With the function symbol directly. + (function-put 'subr-tests--some-fun 'prop 'value) + (should (eq (function-get 'subr-tests--some-fun 'prop) 'value)) + ;; With an alias. + (should (eq (function-get 'subr-tests--some-alias 'prop) 'value)) + (function-put 'subr-tests--some-alias 'prop 'value)) + (function-put 'subr-tests--some-fun 'prop nil))) + (defun subr-tests--butlast-ref (list &optional n) "Reference implementation of `butlast'." (let ((m (or n 1)) commit 119931a9cee4c25e7c5536c9bb75c038a1cd7cd3 Author: Eshel Yaron Date: Mon Mar 24 16:17:52 2025 +0100 ; Populate completions list before scrolling it This fixes a regression introduced in b12a3a03ae1, where repeating a completion command (e.g. TAB in the minibuffer) would no longer scroll through all available completions. * lisp/minibuffer.el (completion--in-region-1): Call 'completion--lazy-insert-strings' before scrolling the completions list. diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index 8fba0b88b20..becb2a7faba 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -1690,6 +1690,7 @@ scroll the window of possible completions." ((eq completion-auto-select 'second-tab)) ;; Reverse tab ((equal (this-command-keys) [backtab]) + (completion--lazy-insert-strings) (if (pos-visible-in-window-p (point-min) window) ;; If beginning is in view, scroll up to the end. (set-window-point window (point-max)) @@ -1697,6 +1698,7 @@ scroll the window of possible completions." (with-selected-window window (scroll-down)))) ;; Normal tab (t + (completion--lazy-insert-strings) (if (pos-visible-in-window-p (point-max) window) ;; If end is in view, scroll up to the end. (set-window-start window (point-min) nil) commit 0cfe700e336da3cc5a2a766840d375921dcd5ee9 Merge: a0864880d85 0c32f7521b1 Author: Sean Whitton Date: Mon Mar 24 10:41:45 2025 +0800 Merge from origin/emacs-30 0c32f7521b1 ; * admin/notes/spelling: More precisely qualify saying j... bc51fabc108 Add a choice to 'dired-movement-style' to restore the pre... 10d534023a9 ; Fix some markup in doc/lispref/commands.texi. c2c287b3252 Improve docstring of should-error commit a0864880d85e048ed7b1fddec9fc34298287a7e1 Merge: 3b38aa2cb5c c6a11128d58 Author: Sean Whitton Date: Mon Mar 24 10:41:44 2025 +0800 ; Merge from origin/emacs-30 The following commit was skipped: c6a11128d58 Use debian:bookworm for emba tests (don't merge) commit 3b38aa2cb5c7be7013fc640b349c1276b4fd5c0b Merge: 0503766495c 84abd43f42f Author: Sean Whitton Date: Mon Mar 24 10:41:43 2025 +0800 Merge from origin/emacs-30 84abd43f42f * lisp/treesit.el (treesit-indent-region): Handle markers... commit 0c32f7521b12c13ac0c7fff09981054e106989c6 Author: Sean Whitton Date: Mon Mar 24 10:40:09 2025 +0800 ; * admin/notes/spelling: More precisely qualify saying just "Lisp" diff --git a/admin/notes/spelling b/admin/notes/spelling index 37a0ada9923..5b09a19b0f0 100644 --- a/admin/notes/spelling +++ b/admin/notes/spelling @@ -18,5 +18,6 @@ Re "behavior" vs "behaviour", etc. - In comments, docstrings and other documentation that forms part of Emacs itself, prefer not to abbreviate "Emacs Lisp". - Say just "Lisp" whenever the context allows. + In docstrings and the Texinfo manuals, say just "Lisp" whenever the + context renders it unambiguous that you mean "Emacs Lisp". If you must abbreviate "Emacs Lisp", capitalize it thus: "Elisp". commit 0503766495cabcf6e891094e723026d663e1c580 Author: Sean Whitton Date: Mon Mar 24 10:29:17 2025 +0800 log-edit: Don't add rear-nonsticky to font-lock-extra-managed-props * lisp/vc/log-edit.el (log-edit-mode): Don't add rear-nonsticky to font-lock-extra-managed-props (bug#77197). Investigated by Paul D. Nelson . Fix due to Stefan Monnier. diff --git a/lisp/vc/log-edit.el b/lisp/vc/log-edit.el index 19994508ca7..0da0b90975c 100644 --- a/lisp/vc/log-edit.el +++ b/lisp/vc/log-edit.el @@ -572,7 +572,6 @@ the \\[vc-prefix-map] prefix for VC commands, for example). \\{log-edit-mode-map}" (setq-local font-lock-defaults '(log-edit-font-lock-keywords t)) (make-local-variable 'font-lock-extra-managed-props) - (cl-pushnew 'rear-nonsticky font-lock-extra-managed-props) (cl-pushnew 'display-line-numbers-disable font-lock-extra-managed-props) (setq-local jit-lock-contextually t) ;For the "first line is summary". (setq-local fill-paragraph-function #'log-edit-fill-entry) commit 5830d1fa6552ad584daa574135e704d1f1e0220a Author: Stefan Kangas Date: Mon Mar 24 00:56:14 2025 +0100 Add basic and low-level tests for hash tables * test/src/fns-tests.el (test-hash-table) (test-hash-table-wrong-keywords, test-remhash, test-clrhash) (test-hash-table-p, test-hash-table-count, test-maphash) (test-copy-hash-table): New tests. diff --git a/test/src/fns-tests.el b/test/src/fns-tests.el index e97ae275da6..e6abcdc34e7 100644 --- a/test/src/fns-tests.el +++ b/test/src/fns-tests.el @@ -1133,6 +1133,77 @@ (should (not (proper-list-p (make-bool-vector 0 nil)))) (should (not (proper-list-p (make-symbol "a"))))) +(ert-deftest test-hash-table () + (let ((h (make-hash-table)) + (val "anything")) + (puthash 123 val h) + (should (eq (gethash 123 h) val))) + (let ((h (make-hash-table :test 'equal)) + (val "anything")) + (puthash '("hello" 123) val h) + (should (eq (gethash '("hello" 123) h) val)))) + +(ert-deftest test-hash-table-wrong-keywords () + (should (make-hash-table :purecopy t)) ; obsolete and ignored + (should (make-hash-table :rehash-size 123)) ; obsolete and ignored + (should (make-hash-table :rehash-threshold 123)) ; obsolete and ignored + (should-error (make-hash-table :some-random-keyword 123))) + +(ert-deftest test-remhash () + (let ((h (make-hash-table)) + (val "anything")) + (puthash 'foo val h) + (remhash 'foo h) + (should-not (gethash 'foo h)))) + +(ert-deftest test-clrhash () + (let ((h (make-hash-table))) + (puthash 'foo1 'bar1 h) + (puthash 'foo2 'bar2 h) + (puthash 'foo3 'bar3 h) + (puthash 'foo4 'bar4 h) + (clrhash h) + (should-not (gethash 'foo h)))) + +(ert-deftest test-hash-table-p () + (let ((h (make-hash-table))) + (should (hash-table-p h))) + (should-not (hash-table-p 123)) + (should-not (hash-table-p "foo")) + (should-not (hash-table-p [foo])) + (should-not (hash-table-p (list 'foo)))) + +(ert-deftest test-hash-table-count () + (let ((h (make-hash-table))) + (puthash 'foo1 'bar1 h) + (should (= (hash-table-count h) 1)) + (puthash 'foo2 'bar2 h) + (should (= (hash-table-count h) 2)) + (puthash 'foo3 'bar3 h) + (should (= (hash-table-count h) 3)) + (puthash 'foo4 'bar4 h) + (should (= (hash-table-count h) 4)) + (clrhash h) + (should (= (hash-table-count h) 0)))) + +(ert-deftest test-maphash () + (let ((h (make-hash-table)) + (sum 0)) + (puthash 'foo1 1 h) + (puthash 'foo2 22 h) + (puthash 'foo3 333 h) + (puthash 'foo4 4444 h) + (maphash (lambda (_key value) (incf sum value)) h) + (should (= sum 4800)))) + +(ert-deftest test-copy-hash-table () + (let* ((h1 (make-hash-table)) + h2) + (puthash 'foo '(bar baz) h1) + (setq h2 (copy-hash-table h1)) + (should-not (eq h1 h2)) + (should (equal (gethash 'foo h2) '(bar baz))))) + (ert-deftest test-hash-function-that-mutates-hash-table () (define-hash-table-test 'badeq 'eq 'bad-hash) (let ((h (make-hash-table :test 'badeq :size 1 :rehash-size 1))) commit 1b56e0f1694650c3c567b90e1ae3caa0bfea209e Author: Stefan Kangas Date: Mon Mar 24 00:33:37 2025 +0100 Improve docstring of cl-defstruct accessors * lisp/emacs-lisp/cl-macs.el (cl-defstruct): Improve generated docstring by not leaking the internal CL-X argument name, preferring X instead. Set property 'document-generalized-variable', used below. * lisp/help-fns.el (help-fns--generalized-variable): When function has non-nil property 'document-generalized-variable', document it as a generalized variable. diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index 89319a05b27..fd5cdae3796 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -3229,7 +3229,8 @@ To see the documentation for a defined struct type, use ;; and pred-check, so changing it is not straightforward. (push `(,defsym ,accessor (cl-x) ,(let ((long-docstring - (format "Access slot \"%s\" of `%s' struct CL-X." slot name))) + (format "Access slot \"%s\" of `%s' struct X." + slot name))) (concat ;; NB. This will produce incorrect results ;; in some cases, as our coding conventions @@ -3246,15 +3247,22 @@ To see the documentation for a defined struct type, use 80)) (concat (internal--format-docstring-line - "Access slot \"%s\" of CL-X." slot) + "Access slot \"%s\" of X." slot) "\n" (internal--format-docstring-line - "Struct CL-X is a `%s'." name)) + "Struct X is a `%s'." name)) (internal--format-docstring-line long-docstring)) - (if doc (concat "\n" doc) ""))) + (if doc (concat "\n" doc) "") + "\n" + (format "\n\n(fn %s X)" accessor))) (declare (side-effect-free t)) ,access-body) forms) + ;; FIXME: This hack is to document this as a generalized + ;; variable, despite it not having the `gv-expander' + ;; property. See `help-fns--generalized-variable'. + (push `(function-put ',accessor 'document-generalized-variable t) + forms) (when (oddp (length desc)) (push (macroexp-warn-and-return diff --git a/lisp/help-fns.el b/lisp/help-fns.el index fabdda521dc..fd873759d02 100644 --- a/lisp/help-fns.el +++ b/lisp/help-fns.el @@ -1262,7 +1262,9 @@ Returns a list of the form (REAL-FUNCTION DEF ALIASED REAL-DEF)." (defun help-fns--generalized-variable (function) (when (and (symbolp function) - (get function 'gv-expander) + (or (get function 'gv-expander) + ;; This is a hack, see cl-macs.el: + (get function 'document-generalized-variable)) ;; Don't mention obsolete generalized variables. (not (get function 'byte-obsolete-generalized-variable))) (insert (format-message " `%s' is also a " function) commit bc51fabc108ceccd4824ba6c6f0c29f143ebf47a Author: Juri Linkov Date: Sun Mar 23 19:48:28 2025 +0200 Add a choice to 'dired-movement-style' to restore the previous behavior * lisp/dired.el (dired-movement-style): Add new values 'bounded-files' and 'cycle-files' (bug#76596). (dired--move-to-next-line): Use new values for users who prefer the default behavior of Emacs 30.1. diff --git a/lisp/dired.el b/lisp/dired.el index 17c8ba5f123..cbccc7537da 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -512,10 +512,14 @@ Possible non-nil values: to the first/last visible line. * `bounded': don't move up/down if the current line is the first/last visible line. + * `cycle-files': like `cycle' but moves only over file lines. + * `bounded-files': like `bounded' but moves only over file lines. Any other non-nil value is treated as `bounded'." :type '(choice (const :tag "Move to any line" nil) (const :tag "Cycle through non-empty lines" cycle) - (const :tag "Stop on last/first non-empty line" bounded)) + (const :tag "Cycle through file lines" cycle-files) + (const :tag "Stop on last/first non-empty line" bounded) + (const :tag "Stop on last/first file line" bounded-files)) :group 'dired :version "30.1") @@ -2877,7 +2881,7 @@ is controlled by `dired-movement-style'." ;; but it still wants to move farther. (cond ;; `cycle': go to the other end. - ((eq dired-movement-style 'cycle) + ((memq dired-movement-style '(cycle cycle-files)) ;; Argument not changing on the second wrap ;; means infinite loop with no files found. (if (and wrapped (eq old-arg arg)) @@ -2889,7 +2893,8 @@ is controlled by `dired-movement-style'." ;; `bounded': go back to the last non-empty line. (dired-movement-style ; Either 'bounded or anything else non-nil. (while (and (dired-between-files) - (not (dired-get-subdir)) + (or (eq dired-movement-style 'bounded-files) + (not (dired-get-subdir))) (not (zerop arg))) (funcall jumpfun (- moving-down)) ;; Point not moving means infinite loop. @@ -2898,9 +2903,12 @@ is controlled by `dired-movement-style'." (setq old-position (point)))) ;; Encountered a boundary, so let's stop movement. (setq arg (if (and (dired-between-files) - (not (dired-get-subdir))) + (or (eq dired-movement-style 'bounded-files) + (not (dired-get-subdir)))) 0 moving-down))))) - (unless (and (dired-between-files) (not (dired-get-subdir))) + (unless (and (dired-between-files) + (or (memq dired-movement-style '(cycle-files bounded-files)) + (not (dired-get-subdir)))) ;; Has moved to a non-empty line. This movement does ;; make sense. (cl-decf arg moving-down)) commit 9e005e9da06f71441e643f7ecbe309e35f68680a Author: Stephen Gildea Date: Sun Mar 23 10:37:21 2025 -0700 ; Move time-stamp release info from symbol-releases.eld to NEWS Update the appropriate historical NEWS files with time-stamp feature releases. Suggested by Stefan Monnier. All dates are from my notes. * etc/symbol-releases.eld: Remove time-stamp, reverting commit 69210eb84e of 17 March. * etc/NEWS.19: * etc/NEWS.20: Add 'time-stamp' feature paragraphs that should have been written then. * etc/NEWS.21: Add missing quotes, so symbol names can be identified. diff --git a/etc/NEWS.19 b/etc/NEWS.19 index 2ee6f95c820..1cd69144dc5 100644 --- a/etc/NEWS.19 +++ b/etc/NEWS.19 @@ -2108,6 +2108,11 @@ mailabbrev.el used to have its own variable for this purpose ** In Buffer-Menu mode, the d and C-d commands (which mark buffers for deletion) now accept a prefix argument which serves as a repeat count. +** 'time-stamp' can be disabled interactively with 'time-stamp-toggle-active' +This new function works by toggling existing variable 'time-stamp-active'. +When inactive, 'time-stamp' generates a warning message unless +new variable 'time-stamp-warn-inactive' is nil. + ** Changes in BibTeX mode. *** Reference keys can now be entered with TAB completion. All @@ -4982,6 +4987,12 @@ in a singleton list when it first inserts the prefix, but doesn't insert the prefix when processing events whose PLACE-SYMBOLs are already thus enclosed. +** New function 'time-stamp' updates a template with the current time. +This is intended to be used on 'write-file-hooks'. The template details +are controlled by file-local variables 'time-stamp-start', 'time-stamp-end', +'time-stamp-line-limit', and 'time-stamp-format'. +Disabled by turning off 'time-stamp-active'. + * Changes in Emacs 19.15 diff --git a/etc/NEWS.20 b/etc/NEWS.20 index 35f36bc7d84..1aa093f0957 100644 --- a/etc/NEWS.20 +++ b/etc/NEWS.20 @@ -925,6 +925,10 @@ reminder about upcoming diary entries. See the documentation string for a sample shell script for calling this function automatically every night. +** New convenience variable 'time-stamp-pattern' +Using 'time-stamp-pattern', a file can specify several 'time-stamp' +parameters with just one variable. + ** Desktop changes *** All you need to do to enable use of the Desktop package, is to set diff --git a/etc/NEWS.21 b/etc/NEWS.21 index ab731708b36..ed7b69f18e6 100644 --- a/etc/NEWS.21 +++ b/etc/NEWS.21 @@ -1488,13 +1488,13 @@ has the following new features: *** The patterns for finding the time stamp and for updating a pattern may match text spanning multiple lines. For example, some people like to have the filename and date on separate lines. The new variable -time-stamp-inserts-lines controls the matching for multi-line patterns. +'time-stamp-inserts-lines' controls the matching for multi-line patterns. -*** More than one time stamp can be updated in the same file. This -feature is useful if you need separate time stamps in a program source -file to both include in formatted documentation and insert in the +*** More than one time stamp can be updated in the same file. +This feature is useful if you need separate time stamps in a program +source file to both include in formatted documentation and insert in the compiled binary. The same time-stamp will be written at each matching -pattern. The variable time-stamp-count enables this new feature; it +pattern. The variable 'time-stamp-count' enables this new feature; it defaults to 1. ** Partial Completion mode now completes environment variables in diff --git a/etc/symbol-releases.eld b/etc/symbol-releases.eld index ca0f98b86f7..9732f60fc16 100644 --- a/etc/symbol-releases.eld +++ b/etc/symbol-releases.eld @@ -50,8 +50,6 @@ ("22.1" fun version<=) ("22.1" fun read-number) ("21.1" var text-property-default-nonsticky) - ("20.3" var time-stamp-pattern) - ("19.16" fun time-stamp) ;; Since much of early Emacs source history is lost, these versions are ;; conservative estimates: the actual version of first appearance may very commit 10d534023a9aa1ffdfa0109f114630ff2eb9cf65 Author: Basil L. Contovounesios Date: Sun Mar 23 18:13:52 2025 +0100 ; Fix some markup in doc/lispref/commands.texi. diff --git a/doc/lispref/commands.texi b/doc/lispref/commands.texi index 506788340c8..fcd6dce3277 100644 --- a/doc/lispref/commands.texi +++ b/doc/lispref/commands.texi @@ -1209,7 +1209,7 @@ If the last event came from a keyboard macro, the value is @code{macro}. @cindex input devices @cindex device names Input events must come from somewhere; sometimes, that is a keyboard -macro, a signal, or `unread-command-events', but it is usually a +macro, a signal, or @code{unread-command-events}, but it is usually a physical input device connected to a computer that is controlled by the user. Those devices are referred to as @dfn{input devices}, and Emacs associates each input event with the input device from which it commit c2c287b3252e2cd3223f2e2d0ef96f29e024b47b Author: Stefan Kangas Date: Sun Mar 23 17:40:22 2025 +0100 Improve docstring of should-error * lisp/emacs-lisp/ert.el (should-error): Improve docstring. diff --git a/lisp/emacs-lisp/ert.el b/lisp/emacs-lisp/ert.el index 02551bad31f..731e8d1a40a 100644 --- a/lisp/emacs-lisp/ert.el +++ b/lisp/emacs-lisp/ert.el @@ -422,16 +422,23 @@ and aborts the current test as failed if it doesn't." (cl-defmacro should-error (form &rest keys &key type exclude-subtypes) "Evaluate FORM and check that it signals an error. -The error signaled needs to match TYPE. TYPE should be a list -of condition names. (It can also be a non-nil symbol, which is -equivalent to a singleton list containing that symbol.) If -EXCLUDE-SUBTYPES is nil, the error matches TYPE if one of its -condition names is an element of TYPE. If EXCLUDE-SUBTYPES is -non-nil, the error matches TYPE if it is an element of TYPE. - -If the error matches, returns (ERROR-SYMBOL . DATA) from the -error. If not, or if no error was signaled, abort the test as -failed." +If no error was signaled, abort the test as failed and +return (ERROR-SYMBOL . DATA) from the error. + +You can also match specific errors using the KEYWORD-ARGS arguments, +which is specified as keyword/argument pairs. The following arguments +are defined: + +:type TYPE -- If TYPE is non-nil, the error signaled needs to match +TYPE. TYPE should be a list of condition names. It can also be a +symbol, which is equivalent to a one-element list containing that +symbol. + +:exclude-subtypes EXCLUDED -- If EXCLUDED is non-nil, the error matches +TYPE only if it is an element of TYPE. If nil (the default), the error +matches TYPE if one of its condition names is an element of TYPE. + +\(fn FORM &rest KEYWORD-ARGS)" (declare (debug t)) (unless type (setq type ''error)) (ert--expand-should commit d565a6747a2bb3c6699a95e60e5f522f80a1ca0a Author: Andrea Corallo Date: Thu Dec 12 00:06:43 2024 +0100 Fix a nativecomp type propagation bug (bug#74771) * lisp/emacs-lisp/comp.el (comp--add-cond-cstrs): Don't emit negated cstr. * test/src/comp-tests.el (comp-tests-type-spec-tests): Add a test. diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el index 6ad00f63971..8b1689e5668 100644 --- a/lisp/emacs-lisp/comp.el +++ b/lisp/emacs-lisp/comp.el @@ -2027,15 +2027,11 @@ TARGET-BB-SYM is the symbol name of the target block." (call symbol-value ,(and (pred comp-cstr-cl-tag-p) mvar-tag))) (set ,(and (pred comp-mvar-p) mvar-3) (call memq ,(and (pred comp-mvar-p) mvar-1) ,(and (pred comp-mvar-p) mvar-2))) - (cond-jump ,(and (pred comp-mvar-p) mvar-3) ,(pred comp-mvar-p) ,bb1 ,bb2)) + (cond-jump ,(and (pred comp-mvar-p) mvar-3) ,(pred comp-mvar-p) ,_bb1 ,bb2)) (comp--emit-assume 'and mvar-tested - (make--comp-mvar :type (comp-cstr-cl-tag mvar-tag)) - (comp--add-cond-cstrs-target-block b bb2) - nil) - (comp--emit-assume 'and mvar-tested - (make--comp-mvar :type (comp-cstr-cl-tag mvar-tag)) - (comp--add-cond-cstrs-target-block b bb1) - t)) + (make--comp-mvar :type (comp-cstr-cl-tag mvar-tag)) + (comp--add-cond-cstrs-target-block b bb2) + nil)) (`((set ,(and (pred comp-mvar-p) cmp-res) (,(pred comp--call-op-p) ,(and (or (pred comp--equality-fun-p) diff --git a/test/src/comp-tests.el b/test/src/comp-tests.el index 2991a05d771..6b608d73540 100644 --- a/test/src/comp-tests.el +++ b/test/src/comp-tests.el @@ -1512,7 +1512,12 @@ Return a list of results." (if (functionp x) (error "") x)) - '(not function)))) + '(not function)) + ;; 81 + ((defun comp-tests-ret-type-spec-f (x) + (print (comp-foo-p x)) + (comp-foo-p x)) + 'boolean))) (defun comp-tests-define-type-spec-test (number x) `(comp-deftest ,(intern (format "ret-type-spec-%d" number)) () commit 408ad273eeadf72dea11b89ea2a44f36ea0e2295 Author: Stefan Kangas Date: Sun Mar 23 17:22:51 2025 +0100 checkdoc: Delete redundant check for wide docstrings With Emacs 28.1, wide docstrings are now flagged by the byte-compiler. The logic in the byte-compiler for catching these issues is complex and continuously evolving, particularly to avoid incorrectly flagging `substitute-command-keys` substitutions. Unfortunately, the checkdoc implementation incorrectly flags correct docstrings as overly wide. Rather than duplicating the byte-compiler logic in checkdoc, which would introduce unnecessary maintenance overhead, we acknowledge that this check is now redundant and remove it. Users utilizing the byte-compiler, whether manually or through `flymake`, will continue to be warned about this issue. * lisp/emacs-lisp/checkdoc.el (checkdoc-this-string-valid-engine): Remove check for overly wide docstrings; duplicates byte-compiler logic. diff --git a/etc/NEWS b/etc/NEWS index c8797cf74ec..d90836b8c6d 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1024,6 +1024,11 @@ those versions can't install packages where that line is missing. This change affects both 'M-x checkdoc' and the corresponding flymake backend. +--- +*** Checkdoc no longer warns about wide docstrings. +The Checkdoc warning for wide docstrings duplicates the byte-compiler +warning added in Emacs 28.1. This redundancy is now removed. + --- *** New user option 'checkdoc-arguments-missing-flag'. Set this to nil to disable warnings for function arguments that are not diff --git a/lisp/emacs-lisp/checkdoc.el b/lisp/emacs-lisp/checkdoc.el index c5f1e9a6ed5..355a0c5e98a 100644 --- a/lisp/emacs-lisp/checkdoc.el +++ b/lisp/emacs-lisp/checkdoc.el @@ -1694,35 +1694,6 @@ function,command,variable,option or symbol." ms1)))))) (if ret (checkdoc-create-error ret mb me) nil))) - ;; * Format the documentation string so that it fits in an - ;; Emacs window on an 80-column screen. It is a good idea - ;; for most lines to be no wider than 60 characters. The - ;; first line can be wider if necessary to fit the - ;; information that ought to be there. - (save-excursion - (let* ((start (point)) - (eol nil) - ;; Respect this file local variable. - (max-column (max 80 byte-compile-docstring-max-column)) - ;; Allow the first line to be three characters longer, to - ;; fit the leading ` "' while still having a docstring - ;; shorter than e.g. 80 characters. - (first t) - (get-max-column (lambda () (+ max-column (if first 3 0))))) - (while (and (< (point) e) - (or (progn (end-of-line) (setq eol (point)) - (< (current-column) (funcall get-max-column))) - (progn (beginning-of-line) - (re-search-forward "\\\\\\\\[[<{]" - eol t)) - (checkdoc-in-sample-code-p start e))) - (setq first nil) - (forward-line 1)) - (end-of-line) - (if (and (< (point) e) (> (current-column) (funcall get-max-column))) - (checkdoc-create-error - (format "Some lines are over %d columns wide" max-column) - s (save-excursion (goto-char s) (line-end-position)))))) ;; Here we deviate to tests based on a variable or function. ;; We must do this before checking for symbols in quotes because there ;; is a chance that just such a symbol might really be an argument. commit 7d14e35498209e45290f5c1297ded6d7175bf1ea Author: Po Lu Date: Sun Mar 23 19:43:13 2025 +0800 Patch bug#77128 * src/pgtkterm.c (pgtk_flash): Destroy `cr_surface_visible_bell' if still present. (bug#77128) diff --git a/src/pgtkterm.c b/src/pgtkterm.c index 00377ff73a0..a2e23a5616b 100644 --- a/src/pgtkterm.c +++ b/src/pgtkterm.c @@ -3836,6 +3836,11 @@ pgtk_flash (struct frame *f) cairo_fill (cr); } + /* This surface may be leaked if XTflash is invoked again after a + visible bell but before the atimer has had an opportunity to undo + the first invocation. (bug#77128) */ + if (FRAME_X_OUTPUT (f)->cr_surface_visible_bell) + cairo_surface_destroy (FRAME_X_OUTPUT (f)->cr_surface_visible_bell); FRAME_X_OUTPUT (f)->cr_surface_visible_bell = surface; delay = make_timespec (0, 50 * 1000 * 1000); commit 81404bf3c2695dbd5a78e40ea8dd0547c1cca30c Author: Stefan Kangas Date: Sun Mar 23 01:30:37 2025 +0100 Improve documentation of cl-defstruct * doc/misc/cl.texi (Structures): Organize more logically, slightly expand, and add more examples. diff --git a/doc/misc/cl.texi b/doc/misc/cl.texi index 9a69168a452..e51e245c736 100644 --- a/doc/misc/cl.texi +++ b/doc/misc/cl.texi @@ -3928,45 +3928,74 @@ This is equivalent to @code{(nconc (cl-mapcar 'cons @var{keys} @var{values}) The Common Lisp @dfn{structure} mechanism provides a general way to define data types similar to C's @code{struct} types. A structure is a Lisp object containing some number of @dfn{slots}, -each of which can hold any Lisp data object. Functions are -provided for accessing and setting the slots, creating or copying -structure objects, and recognizing objects of a particular structure -type. +each of which can hold any Lisp data object. -In true Common Lisp, each structure type is a new type distinct -from all existing Lisp types. Since the underlying Emacs Lisp -system provides no way to create new distinct types, this package -implements structures as vectors (or lists upon request) with a -special ``tag'' symbol to identify them. +You can create a new structure with the @code{cl-defstruct} macro. This +macro automatically generates functions to access and modify its slots, +create or copy structure objects, and to test whether an object belongs +to the defined structure type. + +In standard Common Lisp, each structure type is a new type distinct from +all existing Lisp types. However, because Emacs Lisp lacks native +support for defining new distinct types, this package implements +structures using vectors (or lists upon request) with a special ``tag'' +symbol that to identify them. @defmac cl-defstruct name slots@dots{} The @code{cl-defstruct} form defines a new structure type called @var{name}, with the specified @var{slots}. (The @var{slots} may begin with a string which documents the structure type.) In the simplest case, @var{name} and each of the @var{slots} -are symbols. For example, +are symbols. For example, this is how you define a struct type called +@code{person} that contains three slots: -@example +@lisp (cl-defstruct person first-name age sex) -@end example +@end lisp + +The @code{cl-defstruct} macro creates a new constructor function, such +as @code{make-person} in this example, which returns a new struct +instance. This constructor accepts keyword arguments that correspond to +the specified slots, such as @code{:first-name}, @code{:age}, and +@code{:sex}. These keyword arguments specify the initial values for the +respective slots in the new object. If a keyword argument is not +provided, the slot is initialized to @code{nil}.@footnote{This behavior +differs from Common Lisp, where an unitialized slot would be left as +``undefined''.} + +In the example below, we create a new instance of the @code{person} +struct, and store it in the variable @code{birthday-boy} for later use: + +@lisp +(setq birthday-boy + (make-person :first-name "Peter" :age 23 :sex "male")) + @result{} #s(person "Peter" 23 "male") +@end lisp -@noindent -defines a struct type called @code{person} that contains three slots. Given a @code{person} object @var{p}, you can access those slots by -calling @code{(person-first-name @var{p})}, @code{(person-age -@var{p})}, and @code{(person-sex @var{p})}. You can also change these -slots by using @code{setf} on any of these place forms, for example: +calling @code{(person-first-name @var{p})}, @code{(person-age @var{p})}, +and @code{(person-sex @var{p})}. -@example -(incf (person-age birthday-boy)) -@end example +You can also update the values of these slots using @code{setf} on any +of these place forms, for example: + +@lisp +(setf (person-first-name birthday-boy) "Old Peter") + @result{} "Old Peter" +birthday-boy + @result{} #s(person "Old Peter" 23 "male") +@end lisp -You can create a new @code{person} by calling @code{make-person}, -which takes keyword arguments @code{:first-name}, @code{:age}, and -@code{:sex} to specify the initial values of these slots in the -new object. (Omitting any of these arguments leaves the corresponding -slot ``undefined'', according to the Common Lisp standard; in Emacs -Lisp, such uninitialized slots are filled with @code{nil}.) +Any macro that accepts a generalized variable can be used to modify +struct fields (@pxref{Generalized Variables,,,elisp,GNU Emacs Lisp +Reference Manual}). Here is an example using @code{incf}: + +@lisp +(incf (person-age birthday-boy)) + @result{} 24 +birthday-boy + @result{} #s(person "Old Peter" 24 "male") +@end lisp Given a @code{person}, @code{(copy-person @var{p})} makes a new object of the same type whose slots are @code{eq} to those of @var{p}. commit 939a2a3c2dd60503c6ebef839b5f05f962d405ce Author: Eli Zaretskii Date: Sun Mar 23 13:17:06 2025 +0200 Avoid rare crashes due to "C-g C-g" on TTY frames * src/term.c (tty_send_additional_strings): Don't use SBYTES, as this function could be called in the middle of GC. (Bug#77205) diff --git a/src/term.c b/src/term.c index e15b7a0887e..32f3c8c48d6 100644 --- a/src/term.c +++ b/src/term.c @@ -184,9 +184,15 @@ tty_send_additional_strings (struct terminal *terminal, Lisp_Object sym) Lisp_Object string = XCAR (extra_codes); if (STRINGP (string)) { - fwrite (SDATA (string), 1, SBYTES (string), tty->output); + struct Lisp_String *str = XSTRING (string); + /* Don't use SBYTES, as that is not protected from GC. */ + ptrdiff_t sbytes + = (str->u.s.size_byte < 0 + ? str->u.s.size & ~ARRAY_MARK_FLAG + : str->u.s.size_byte); + fwrite (SDATA (string), 1, sbytes, tty->output); if (tty->termscript) - fwrite (SDATA (string), 1, SBYTES (string), tty->termscript); + fwrite (SDATA (string), 1, sbytes, tty->termscript); } } } commit 467aba67db407e930fc5de6d4a4ae0cd6fc106df Author: Eli Zaretskii Date: Sun Mar 23 11:35:25 2025 +0200 ; * src/dispnew.c (check_window_matrix_pointers): Fix last change. diff --git a/src/dispnew.c b/src/dispnew.c index 6cd41620b57..6083a558064 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -3115,6 +3115,8 @@ check_window_matrix_pointers (struct window *w) { struct frame *f = XFRAME (w->frame); + eassert (is_tty_frame (f)); + if (f->after_make_frame) { while (w) commit e20e8538610ed8b78e0b9f9cc3121c1102a8aaf0 Author: Eli Zaretskii Date: Sun Mar 23 11:30:17 2025 +0200 Avoid rare segfaults in 'check_matrix_pointers' * src/dispnew.c (check_window_matrix_pointers): No-op if the window's frame not ready yet. (Bug#77200) diff --git a/src/dispnew.c b/src/dispnew.c index 6365dcb9c4d..6cd41620b57 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -3113,18 +3113,22 @@ mirror_line_dance (struct window *w, int unchanged_at_top, int nlines, int *copy static void check_window_matrix_pointers (struct window *w) { - while (w) + struct frame *f = XFRAME (w->frame); + + if (f->after_make_frame) { - if (WINDOWP (w->contents)) - check_window_matrix_pointers (XWINDOW (w->contents)); - else + while (w) { - struct frame *f = XFRAME (w->frame); - check_matrix_pointers (w->desired_matrix, f->desired_matrix); - check_matrix_pointers (w->current_matrix, f->current_matrix); - } + if (WINDOWP (w->contents)) + check_window_matrix_pointers (XWINDOW (w->contents)); + else + { + check_matrix_pointers (w->desired_matrix, f->desired_matrix); + check_matrix_pointers (w->current_matrix, f->current_matrix); + } - w = NILP (w->next) ? 0 : XWINDOW (w->next); + w = NILP (w->next) ? 0 : XWINDOW (w->next); + } } } commit c6a11128d58e8ee4c21741c439d79da420378818 Author: Michael Albinus Date: Sun Mar 23 09:33:57 2025 +0100 Use debian:bookworm for emba tests (don't merge) There are problems with treesitter installation from debian:sid. * test/infra/Dockerfile.emba (emacs-base): Use debian:bookworm. (emacs-eglot, emacs-tree-sitter): Use emacs-base. (emacs-native-comp): Install libgccjit-12-dev. diff --git a/test/infra/Dockerfile.emba b/test/infra/Dockerfile.emba index 885b36f7732..201b369513d 100644 --- a/test/infra/Dockerfile.emba +++ b/test/infra/Dockerfile.emba @@ -24,7 +24,7 @@ # Maintainer: Ted Zlatanov # URL: https://emba.gnu.org/emacs/emacs -FROM debian:bullseye as emacs-base +FROM debian:bookworm as emacs-base RUN apt-get update && \ apt-get install -y --no-install-recommends -o=Dpkg::Use-Pty=0 \ @@ -60,16 +60,7 @@ RUN ./autogen.sh autoconf RUN ./configure --with-file-notification=gfile RUN make -j `nproc` bootstrap -# Debian bullseye doesn't provide proper packages. So we use Debian -# sid for this. -FROM debian:sid as emacs-eglot - -# This corresponds to emacs-base. -RUN apt-get update && \ - apt-get install -y --no-install-recommends -o=Dpkg::Use-Pty=0 \ - libc-dev gcc g++ make autoconf automake libncurses-dev gnutls-dev \ - libxml2-dev libdbus-1-dev libacl1-dev acl git texinfo gdb \ - && rm -rf /var/lib/apt/lists/* +FROM emacs-base as emacs-eglot # Install clangd, tsserver. RUN apt-get update && \ @@ -112,16 +103,7 @@ RUN make -j `nproc` bootstrap # --eval '(package-install (quote company))' \ # --eval '(package-install (quote yasnippet))' -# Debian bullseye doesn't provide proper packages. So we use Debian -# sid for this. -FROM debian:sid as emacs-tree-sitter - -# This corresponds to emacs-base. -RUN apt-get update && \ - apt-get install -y --no-install-recommends -o=Dpkg::Use-Pty=0 \ - libc-dev gcc g++ make autoconf automake libncurses-dev gnutls-dev \ - libxml2-dev libdbus-1-dev libacl1-dev acl git texinfo gdb \ - && rm -rf /var/lib/apt/lists/* +FROM emacs-base as emacs-tree-sitter # Install tree-sitter library. RUN apt-get update && \ @@ -183,7 +165,7 @@ FROM emacs-base as emacs-native-comp # The libgccjit version must correspond to the gcc version. RUN apt-get update && \ apt-get install -y --no-install-recommends -o=Dpkg::Use-Pty=0 \ - libgccjit-10-dev zlib1g-dev \ + libgccjit-12-dev zlib1g-dev \ && rm -rf /var/lib/apt/lists/* FROM emacs-native-comp as emacs-native-comp-speed0 commit ab25b4fca9a20ccc03a90ec9c2281a2f88872d93 Merge: 62368f93a5d aa12cebaa68 Author: Eli Zaretskii Date: Sun Mar 23 07:45:16 2025 +0200 Merge branch 'master' of git.savannah.gnu.org:/srv/git/emacs commit aa12cebaa684d7b3ea7e131666d33bcc71b45625 Author: Stephen Gildea Date: Sat Mar 22 17:07:05 2025 -0700 Consistent wording in top-level headers in NEWS.19 * etc/NEWS.19: Put the word "Emacs" in front of each version number. This change lets 'help-fns--first-release' parse the headers, which produces more accurate "probably introduced at" versions from 'describe-function' and 'describe-variable'. diff --git a/etc/NEWS.19 b/etc/NEWS.19 index 0a1ef56c0fb..2ee6f95c820 100644 --- a/etc/NEWS.19 +++ b/etc/NEWS.19 @@ -3149,7 +3149,7 @@ tempo.el Template insertion with hotspots. -* User Editing Changes in 19.23. +* User Editing Changes in Emacs 19.23 ** Emacs 19.23 uses Ispell version 3. @@ -4021,7 +4021,7 @@ by building Emacs. ** New macro 'easy-menu-define' -* Changes in 19.22. +* Changes in Emacs 19.22 ** The mouse click M-mouse-2 now inserts the current secondary selection (from Emacs or any other X client) where you click. @@ -4085,7 +4085,7 @@ different properties. -* User editing changes in version 19.21. +* User editing changes in Emacs 19.21 ** ISO Accents mode supports four additional characters: A-with-ring (entered as /A), AE ligature (entered as /E), @@ -4093,7 +4093,7 @@ and their lower-case equivalents. -* User editing changes in version 19.20. +* User editing changes in Emacs 19.20 (See following page for Lisp programming changes.) Note that some of these changes were made subsequent to the Emacs 19.20 @@ -4493,7 +4493,7 @@ Emacs command history. -* Changes in version 19.19. +* Changes in Emacs 19.19 ** The new package bookmark.el records named bookmarks: positions that you can jump to. Bookmarks are saved automatically between Emacs @@ -4527,7 +4527,7 @@ inconsistent with integer `%'. -* Changes in version 19.18. +* Changes in Emacs 19.18 ** Typing C-z in an iconified Emacs frame now deiconifies it. @@ -4669,7 +4669,7 @@ minibuffer window, and returns t if the window is currently active. -* Changes in version 19.17. +* Changes in Emacs 19.17 ** When Emacs displays a list of completions in a buffer, you can select a completion by clicking mouse button 2 @@ -4857,7 +4857,7 @@ argument FRAME, which specifies which frames it should affect. -* Changes in version 19.16. +* Changes in Emacs 19.16 ** When dragging the mouse to select a region, Emacs now highlights the region as you drag (if Transient Mark mode is enabled). If you @@ -4984,7 +4984,7 @@ already thus enclosed. -* Changes in version 19.15. +* Changes in Emacs 19.15 ** 'make-frame-visible', which uniconified frames, is now a command, and thus may be bound to a key. This makes sense because frames @@ -5032,7 +5032,7 @@ and thus didn't document it.) -* Changes in version 19.14. +* Changes in Emacs 19.14 ** To modify read-only text, bind the variable 'inhibit-read-only' to a non-nil value. If the value is t, then all reasons that might @@ -5078,7 +5078,7 @@ If you specify BEG or END, then the argument VISIT must be nil. -* Changes in version 19.13. +* Changes in Emacs 19.13 ** Magic file names can now handle the 'load' operation. @@ -5098,14 +5098,14 @@ We may move them again for greater consistency with other modes. -* Changes in version 19.12. +* Changes in Emacs 19.12 ** You can now make many of the sort commands ignore case by setting 'sort-fold-case' to a non-nil value. -* Changes in version 19.11. +* Changes in Emacs 19.11 ** Supercite is installed. @@ -5124,7 +5124,7 @@ it writes a file in the usual way. -* Changes in version 19.10. +* Changes in Emacs 19.10 ** The command 'repeat-complex-command' is now on C-x ESC ESC. It used to be bound to C-x ESC. @@ -5138,7 +5138,7 @@ using X). -* Changes in version 19.8. +* Changes in Emacs 19.8 ** It is now simpler to tell Emacs to display accented characters under X windows. M-x standard-display-european toggles the display of @@ -5184,7 +5184,7 @@ If the optional arguments FACE and FRAME are specified, then -* Changes in version 19. +* Changes in Emacs 19.1 ** When you kill buffers, Emacs now returns memory to the operating system, thus reducing the size of the Emacs process. All the space that you free commit 92b373318d2401f98f0ad5590ef799904c96506f Author: Stefan Kangas Date: Sat Mar 22 22:41:53 2025 +0100 Reduce code duplication in ns_set_appearance * src/nsterm.h (ns_set_appearance_1): Declare. * src/nsterm.m (ns_set_appearance_1): Break out new function... (ns_set_appearance): ...here. * src/nsfns.m (Fx_create_frame): Use above new function. diff --git a/src/nsfns.m b/src/nsfns.m index 9f52777879c..b1ed0eff58a 100644 --- a/src/nsfns.m +++ b/src/nsfns.m @@ -1404,12 +1404,7 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side. #ifdef NS_IMPL_COCOA tem = gui_display_get_arg (dpyinfo, parms, Qns_appearance, NULL, NULL, RES_TYPE_SYMBOL); - if (EQ (tem, Qdark)) - FRAME_NS_APPEARANCE (f) = ns_appearance_vibrant_dark; - else if (EQ (tem, Qlight)) - FRAME_NS_APPEARANCE (f) = ns_appearance_aqua; - else - FRAME_NS_APPEARANCE (f) = ns_appearance_system_default; + ns_set_appearance_1 (f, tem); store_frame_param (f, Qns_appearance, (!NILP (tem) && !EQ (tem, Qunbound)) ? tem : Qnil); diff --git a/src/nsterm.h b/src/nsterm.h index 2616dacc3e2..2abf402f8bc 100644 --- a/src/nsterm.h +++ b/src/nsterm.h @@ -1236,6 +1236,7 @@ extern void ns_set_no_accept_focus (struct frame *f, Lisp_Object new_value, extern void ns_set_z_group (struct frame *f, Lisp_Object new_value, Lisp_Object old_value); #ifdef NS_IMPL_COCOA +extern void ns_set_appearance_1 (struct frame *f, Lisp_Object value); extern void ns_set_appearance (struct frame *f, Lisp_Object new_value, Lisp_Object old_value); extern void ns_set_transparent_titlebar (struct frame *f, diff --git a/src/nsterm.m b/src/nsterm.m index 46bb3f5dd7a..5514a693c86 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -1931,6 +1931,17 @@ Hide the window (X11 semantics) } #ifdef NS_IMPL_COCOA +void +ns_set_appearance_1 (struct frame *f, Lisp_Object new_value) +{ + if (EQ (new_value, Qdark)) + FRAME_NS_APPEARANCE (f) = ns_appearance_vibrant_dark; + else if (EQ (new_value, Qlight)) + FRAME_NS_APPEARANCE (f) = ns_appearance_aqua; + else + FRAME_NS_APPEARANCE (f) = ns_appearance_system_default; +} + void ns_set_appearance (struct frame *f, Lisp_Object new_value, Lisp_Object old_value) { @@ -1943,12 +1954,7 @@ Hide the window (X11 semantics) if (NSAppKitVersionNumber < NSAppKitVersionNumber10_10) return; - if (EQ (new_value, Qdark)) - FRAME_NS_APPEARANCE (f) = ns_appearance_vibrant_dark; - else if (EQ (new_value, Qlight)) - FRAME_NS_APPEARANCE (f) = ns_appearance_aqua; - else - FRAME_NS_APPEARANCE (f) = ns_appearance_system_default; + ns_set_appearance_1 (f, new_value); [window setAppearance]; #endif /* MAC_OS_X_VERSION_MAX_ALLOWED >= 101000 */ commit 81c21d89ede8dfa664b7a3700acd7bf4c9fa54aa Author: shipmints Date: Sun Feb 16 14:30:45 2025 -0500 Ensure .dir-locals-2.el behavior as documented (bug#75890) * lisp/files.el (dir-locals--all-files): New &optional 'base-el-only' argument. (dir-locals--base-file): New function. (dir-locals-find-file): 'locate-dominating-file' only for the base .dir-locals.el. * test/lisp/files-tests.el (files-test-dir-locals-2-solo): New test. * test/lisp/files-resources/dir-locals-2-solo: New test support. (files-test-dir-locals-2-paired): New test. * test/lisp/files-resources/dir-locals-and-2: New test support. diff --git a/lisp/files.el b/lisp/files.el index 461960d6f2b..4e3aeeb9246 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -4713,21 +4713,22 @@ the \".dir-locals.el\". See Info node `(elisp)Directory Local Variables' for details.") -(defun dir-locals--all-files (directory) +(defun dir-locals--all-files (directory &optional base-el-only) "Return a list of all readable dir-locals files in DIRECTORY. The returned list is sorted by increasing priority. That is, values specified in the last file should take precedence over those in the first." (when (file-readable-p directory) (let* ((file-1 (expand-file-name (if (eq system-type 'ms-dos) - (dosified-file-name dir-locals-file) - dir-locals-file) - directory)) + (dosified-file-name dir-locals-file) + dir-locals-file) + directory)) (file-2 (when (string-match "\\.el\\'" file-1) (replace-match "-2.el" t nil file-1))) - (out nil)) - ;; The order here is important. - (dolist (f (list file-2 file-1)) + out) + (dolist (f (or (and base-el-only (list file-1)) + ;; The order here is important. + (list file-2 file-1))) (when (and f (file-readable-p f) ;; FIXME: Aren't file-regular-p and @@ -4737,6 +4738,10 @@ those in the first." (push f out))) out))) +(defun dir-locals--base-file (directory) + "Return readable `dir-locals-file' in DIRECTORY, or nil." + (dir-locals--all-files directory 'base-el-only)) + (defun dir-locals-find-file (file) "Find the directory-local variables for FILE. This searches upward in the directory tree from FILE. @@ -4758,7 +4763,7 @@ This function returns either: entry." (setq file (expand-file-name file)) (let* ((locals-dir (locate-dominating-file (file-name-directory file) - #'dir-locals--all-files)) + #'dir-locals--base-file)) dir-elt) ;; `locate-dominating-file' may have abbreviated the name. (when locals-dir diff --git a/test/lisp/files-resources/dir-locals-2-solo/.dir-locals-2.el b/test/lisp/files-resources/dir-locals-2-solo/.dir-locals-2.el new file mode 100644 index 00000000000..08584933c41 --- /dev/null +++ b/test/lisp/files-resources/dir-locals-2-solo/.dir-locals-2.el @@ -0,0 +1 @@ +((nil . ((dir-locals-2-loaded . t)))) diff --git a/test/lisp/files-resources/dir-locals-2-solo/dir-locals-2-solo.txt b/test/lisp/files-resources/dir-locals-2-solo/dir-locals-2-solo.txt new file mode 100644 index 00000000000..83ed6482e06 --- /dev/null +++ b/test/lisp/files-resources/dir-locals-2-solo/dir-locals-2-solo.txt @@ -0,0 +1,3 @@ +# Used by files-test.el. +# Due to solo .dir-locals-2.el, the local variable `dir-locals-2-loaded' +# should be undefined. diff --git a/test/lisp/files-resources/dir-locals-and-2/.dir-locals-2.el b/test/lisp/files-resources/dir-locals-and-2/.dir-locals-2.el new file mode 100644 index 00000000000..08584933c41 --- /dev/null +++ b/test/lisp/files-resources/dir-locals-and-2/.dir-locals-2.el @@ -0,0 +1 @@ +((nil . ((dir-locals-2-loaded . t)))) diff --git a/test/lisp/files-resources/dir-locals-and-2/.dir-locals.el b/test/lisp/files-resources/dir-locals-and-2/.dir-locals.el new file mode 100644 index 00000000000..2b57bf9e7c0 --- /dev/null +++ b/test/lisp/files-resources/dir-locals-and-2/.dir-locals.el @@ -0,0 +1 @@ +((nil . ((dir-locals-loaded . t)))) diff --git a/test/lisp/files-resources/dir-locals-and-2/dir-locals-and-2.txt b/test/lisp/files-resources/dir-locals-and-2/dir-locals-and-2.txt new file mode 100644 index 00000000000..bb8a31ca147 --- /dev/null +++ b/test/lisp/files-resources/dir-locals-and-2/dir-locals-and-2.txt @@ -0,0 +1,4 @@ +# Used by files-test.el. +# .dir-locals.el and .dir-locals-2.el should define: +# local variable `dir-locals-loaded' +# local variable `dir-locals-2-loaded' diff --git a/test/lisp/files-tests.el b/test/lisp/files-tests.el index 9f17747da1f..91ca557204e 100644 --- a/test/lisp/files-tests.el +++ b/test/lisp/files-tests.el @@ -1782,6 +1782,21 @@ set to." ;; Invocation through env, with modified environment. (files-tests--check-shebang "#!/usr/bin/env -S PYTHONPATH=/...:${PYTHONPATH} python" 'python-base-mode)) +(ert-deftest files-test-dir-locals-2-solo () + "Ensure that solo `.dir-locals-2.el' is ignored." + (with-current-buffer + (find-file-noselect (ert-resource-file + (concat "dir-locals-2-solo/dir-locals-2-solo.txt"))) + (should-not (local-variable-p 'dir-locals-2-loaded)))) + +(ert-deftest files-test-dir-locals-2-paired () + "Ensure that `.dir-locals-2.el' is loaded, if paired." + (let ((enable-local-variables :all)) + (with-current-buffer (find-file-noselect + (ert-resource-file (concat "dir-locals-and-2/dir-locals-and-2.txt"))) + (should (local-variable-p 'dir-locals-loaded)) + (should (local-variable-p 'dir-locals-2-loaded))))) + (ert-deftest files-test-dir-locals-auto-mode-alist () "Test an `auto-mode-alist' entry in `.dir-locals.el'" (find-file (ert-resource-file "whatever.quux")) commit 62368f93a5d2cf1b961626c705c032e15b1d5f43 Author: Eli Zaretskii Date: Sat Mar 22 21:32:16 2025 +0200 Avoid rare segfaults due to crazy creation of new child frames * src/dispnew.c (combine_updates, combine_updates_for_frame): Skip frames and child frames that were not yet completely made. (Bug#77046) diff --git a/src/dispnew.c b/src/dispnew.c index d97dbfa6d1e..6365dcb9c4d 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -4018,6 +4018,9 @@ combine_updates_for_frame (struct frame *f, bool inhibit_scrolling) { struct frame *root = root_frame (f); + if (!root->after_make_frame) + return; + /* Determine visible frames on the root frame, including the root frame itself. Note that there are cases, see bug#75056, where we can be called for invisible frames. This looks like a bug with @@ -4036,7 +4039,8 @@ combine_updates_for_frame (struct frame *f, bool inhibit_scrolling) for (Lisp_Object tail = XCDR (z_order); CONSP (tail); tail = XCDR (tail)) { topmost_child = XFRAME (XCAR (tail)); - copy_child_glyphs (root, topmost_child); + if (topmost_child->after_make_frame) + copy_child_glyphs (root, topmost_child); } update_begin (root); @@ -4089,7 +4093,8 @@ combine_updates (Lisp_Object roots) for (; CONSP (roots); roots = XCDR (roots)) { struct frame *root = XFRAME (XCAR (roots)); - combine_updates_for_frame (root, false); + if (root->after_make_frame) + combine_updates_for_frame (root, false); } } commit 893c40c63e8e30eae6be577670612aa21768d312 Author: Sora Takai Date: Wed Mar 19 23:50:38 2025 +0900 Make isearch lazy-highlights non-sticky at both ends (bug#77121) Copyright-paperwork-exempt: yes diff --git a/lisp/isearch.el b/lisp/isearch.el index 31ad96d4a78..fa678740810 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -4265,7 +4265,7 @@ Attempt to do the search exactly the way the pending Isearch would." (and (eq isearch-lazy-highlight-invisible 'open) 'can-be-opened))) (funcall isearch-filter-predicate mb me))) - (let ((ov (make-overlay mb me))) + (let ((ov (make-overlay mb me nil t nil))) (push ov isearch-lazy-highlight-overlays) ;; 1000 is higher than ediff's 100+, ;; but lower than isearch main overlay's 1001 commit 25d757535884da71ace29fd80b8b24dd3a8f9017 Author: Paul Eggert Date: Sat Mar 22 11:19:41 2025 -0700 Remove ctags program Remove our old ctags and suggest Universal Ctags instead. This fixes a FIXME in lib-src/Makefile.in and speeds up compilation quite a bit on my older CPU when I compile with --enable-gcc-warnings. It also lessens installation and runtime footprint. (Bug#76322) * .gitignore: Remove lib-src/ctags. * admin/authors.el (authors-renamed-files-alist): Remove ctags.1. * admin/check-man-pages: ctags.1 is no longer a special case. * admin/quick-install-emacs (PUBLIC_LIBSRC_BINARIES): Remove ctags. * cross/Makefile.in (LIBSRC_BINARIES): Remove lib-src/ctags. * doc/man/ctags.1, lib-src/ctags.c: Remove. * java/Makefile.in (CROSS_LIBSRC_BINS): Remove ctags. * lib-src/Makefile.in (INSTALLABLES): Remove ctags${EXEEXT}. (ctags${EXEEXT}): Remove. * lib-src/etags.c (CTAGS): Remove. All uses replaced by ... (ctags): ... this new static var. (STDIN): Remove macro. All uses replaced by new STDIN_OPTION constant. (CTAGS_OPTION, STDIN_OPTION): New contants. (longopts): New --ctags option. (ctags_default_C_help): New constant, to override default_C_help at runtime. (default_C_help): Now always the etags version. (C_LANG_NAMES_INDEX): New macro. (print_language_names): Do not assume etags. (PROGRAM_NAME): Remove. All uses removed. (print_help): Document --ctags if PRINT_UNDOCUMENTED_OPTIONS_HELP. (main): Support new --ctags option, and support all [ce]tags options. * test/manual/etags/Makefile (CTAGS_PROG): Now etags --ctags, since there is no longer a ctags. diff --git a/.gitignore b/.gitignore index ea942b86f80..6e700e0d391 100644 --- a/.gitignore +++ b/.gitignore @@ -209,7 +209,7 @@ test/infra/android/**/*.zip test/infra/android/**/*.jar test/infra/android/bin/build.sh -# ctags, etags. +# etags. TAGS !admin/notes/tags @@ -234,7 +234,6 @@ a.out lib-src/asset-directory-tool lib-src/be-resources lib-src/blessmail -lib-src/ctags lib-src/ebrowse lib-src/emacsclient lib-src/etags diff --git a/INSTALL b/INSTALL index d38fff7b2e6..40cb674d48f 100644 --- a/INSTALL +++ b/INSTALL @@ -612,7 +612,7 @@ installed locations, with 'make install'. By default, Emacs's files are installed in the following directories: '/usr/local/bin' holds the executable programs users normally run - - 'emacs', 'etags', 'ctags', 'emacsclient'. + 'emacs', 'etags', 'emacsclient'. '/usr/local/share/emacs/VERSION/lisp' holds the Emacs Lisp library; 'VERSION' stands for the number of the Emacs version diff --git a/Makefile.in b/Makefile.in index 505eddd1abb..ea05fe6ac99 100644 --- a/Makefile.in +++ b/Makefile.in @@ -812,9 +812,7 @@ install-info: info ## "gzip || true" is because some gzips exit with non-zero status ## if compression would not reduce the file size. Eg, the gzip in -## OpenBSD 4.9 seems to do this (2013/03). In Emacs, this can -## only happen with the tiny ctags.1 manpage. We don't really care if -## ctags.1 is compressed or not. "gzip -f" is another option here, +## OpenBSD 4.9 seems to do this (2013/03). "gzip -f" is another option here, ## but not sure if portable. install-man: umask 022; ${MKDIR_P} "$(DESTDIR)${man1dir}" diff --git a/admin/authors.el b/admin/authors.el index 598deb681e5..b9f5f170fc0 100644 --- a/admin/authors.el +++ b/admin/authors.el @@ -1471,7 +1471,6 @@ in the repository.") ("org/COPYRIGHT-AND-LICENSE" . "org/README") ("lisp/net/idna.el" . "puny.el") ;; Moved to different directories. - ("ctags.1" . "ctags.1") ("etags.1" . "etags.1") ("emacs.1" . "emacs.1") ("emacsclient.1" . "emacsclient.1") diff --git a/admin/check-man-pages b/admin/check-man-pages index 409003e0462..84ca56bf084 100755 --- a/admin/check-man-pages +++ b/admin/check-man-pages @@ -32,13 +32,6 @@ exit_status=0 cd "$PD"/../doc/man for page in *.1; do - # ctags.1 just includes the man page etags.1, which AFAICT will - # default to the one installed on the system (!), instead of the - # one in the repository. So checking it is pointless, and we will - # in any case already check etags.1 separately. - if [ "$page" == "ctags.1" ]; then - continue - fi log=$(emacs_mktemp) LC_ALL=C.UTF-8 MANROFFSEQ='' MANWIDTH=80 \ man --warnings=all,mac -E UTF-8 -l -Tutf8 -Z "$page" >/dev/null 2> "$log" diff --git a/admin/quick-install-emacs b/admin/quick-install-emacs index ceabe80024e..5453456d09c 100755 --- a/admin/quick-install-emacs +++ b/admin/quick-install-emacs @@ -27,7 +27,7 @@ ## install emacs very often. See the --help output for more details. -PUBLIC_LIBSRC_BINARIES='emacsclient etags ctags ebrowse' +PUBLIC_LIBSRC_BINARIES='emacsclient etags ebrowse' AVOID="CVS -DIC README COPYING ChangeLog ~ [.]orig$ [.]rej$ Makefile$ Makefile.in$ makefile$ makefile.w32-in$ stamp-subdir [.]cvsignore [.]arch-ids [{]arch[}] [.][cho]$ make-docfile" diff --git a/cross/Makefile.in b/cross/Makefile.in index 94a28a755bc..b1322ea4c5b 100644 --- a/cross/Makefile.in +++ b/cross/Makefile.in @@ -50,7 +50,7 @@ LIB_SRC_TOP_SRCDIR = $(realpath $(top_src)) # This is a list of binaries to build and install in lib-src. -LIBSRC_BINARIES = lib-src/etags lib-src/ctags lib-src/emacsclient \ +LIBSRC_BINARIES = lib-src/etags lib-src/emacsclient \ lib-src/ebrowse lib-src/hexl lib-src/movemail CLEAN_SUBDIRS = $(wildcard src lib-src lib etc) diff --git a/doc/emacs/android.texi b/doc/emacs/android.texi index c318373536a..8b00ea94cb3 100644 --- a/doc/emacs/android.texi +++ b/doc/emacs/android.texi @@ -353,11 +353,11 @@ directories and the app data directories of other applications. The Emacs distribution also incorporates several binaries. While being executable files, they are packaged as libraries in the library directory, because otherwise the system will not unpack them while -Emacs is being installed. This means that instead of @code{ctags} or -@code{emacsclient}, Lisp code must specify @code{libctags.so} or +Emacs is being installed. This means that instead of +@code{emacsclient}, Lisp code must specify @code{libemacsclient.so} on the command line when starting either of those programs in a subprocess; to determine which names to use, -consult the values of the variables @code{ctags-program-name}, +consult the values of the variables @code{etags-program-name}, @code{hexl-program-name}, @code{emacsclient-program-name}, @code{movemail-program-name}, @code{ebrowse-program-name}, and @code{rcs2log-program-name}. diff --git a/doc/lispref/processes.texi b/doc/lispref/processes.texi index 804efb50162..56e78eac900 100644 --- a/doc/lispref/processes.texi +++ b/doc/lispref/processes.texi @@ -186,7 +186,6 @@ the function returns just the value of the variable @code{exec-path}. @end defun @cindex programs distributed with Emacs, starting -@vindex ctags-program-name @vindex etags-program-name @vindex hexl-program-name @vindex emacsclient-program-name @@ -197,11 +196,11 @@ the function returns just the value of the variable @code{exec-path}. must take into account that the program may have been renamed in order to comply with executable naming restrictions present on the system. - Instead of starting @command{ctags}, for example, you should specify -the value of @code{ctags-program-name} instead. Likewise, instead of + Instead of starting @command{emacsclient}, for example, you should specify +the value of @code{emacsclient-program-name} instead. Likewise, instead of starting @command{movemail}, you must start @code{movemail-program-name}, and the same goes for @command{etags}, -@command{hexl}, @command{emacsclient}, @code{rcs2log}, and +@command{hexl}, @code{rcs2log}, and @command{ebrowse}. @node Shell Arguments diff --git a/doc/man/ctags.1 b/doc/man/ctags.1 deleted file mode 100644 index 1eab02f2145..00000000000 --- a/doc/man/ctags.1 +++ /dev/null @@ -1 +0,0 @@ -.so man1/etags.1 diff --git a/doc/man/etags.1 b/doc/man/etags.1 index a87ad22d48e..5c416a17f43 100644 --- a/doc/man/etags.1 +++ b/doc/man/etags.1 @@ -1,5 +1,5 @@ .\" See section COPYING for copyright and redistribution information. -.TH ETAGS 1 "2024-12-21" "GNU Tools" "GNU" +.TH ETAGS 1 "2025-03-22" "GNU Tools" "GNU" .de BP .sp .ti -.2i @@ -7,7 +7,7 @@ .. .SH NAME -etags, ctags \- generate tag file for Emacs, vi +etags \- generate tag file for Emacs, vi .SH SYNOPSIS .hy 0 .na @@ -27,7 +27,7 @@ etags, ctags \- generate tag file for Emacs, vi [\|\-\-help\|] [\|\-\-version\|] \fIfile\fP .\|.\|. -\fBctags\fP [\|\-aCdgIQRVh\|] [\|\-BtTuvwx\|] [\|\-l \fIlanguage\fP\|] +\fBetags \-\-ctags\fP [\|\-aCdgIQRVh\|] [\|\-BtTuvwx\|] [\|\-l \fIlanguage\fP\|] .if n .br [\|\-o \fItagfile\fP\|] [\|\-r \fIregexp\fP\|] [\|\-\-parse\-stdin=\fIfile\fP\|] @@ -47,17 +47,18 @@ etags, ctags \- generate tag file for Emacs, vi The \|\fBetags\fP\| program is used to create a tag table file, in a format understood by .BR emacs ( 1 )\c -\&; the \|\fBctags\fP\| program is used to create a similar table in a +\&; if the first argument is the obsolescent option \|\fB\-\-ctags\fP\| +the program instead creates a similar table in a format understood by .BR vi ( 1 )\c -\&. Both forms of the program understand +\&. The program understands the syntax of C, Objective C, C++, Java, Fortran, Ada, Cobol, Erlang, Forth, Go, HTML, LaTeX, Emacs Lisp/Common Lisp, Lua, Makefile, Mercury, Pascal, Perl, Ruby, Rust, PHP, PostScript, Python, Prolog, Scheme and most assembler\-like syntaxes. -Both forms read the files specified on the command line, and write a tag -table (defaults: \fBTAGS\fP for \fBetags\fP, \fBtags\fP for -\fBctags\fP) in the current working directory. +It reads the files specified on the command line, and write a tag +table (default: \fBTAGS\fP, or \fBtags\fP if +\fB\-\-ctags\fP is used) in the current working directory. Files specified with relative file names will be recorded in the tag table with file names relative to the directory where the tag table resides. If the tag table is in /dev or is the standard output, @@ -73,8 +74,7 @@ parsing of the file names following the switch according to the given language, overriding guesses based on filename extensions. .SH OPTIONS Some options make sense only for the \fBvi\fP style tag files produced -by ctags; -\fBetags\fP does not recognize them. +with the \fB\-\-ctags\fP option; they are ignored otherwise. The programs accept unambiguous abbreviations for long option names. .TP .B \-a, \-\-append @@ -87,7 +87,7 @@ expression search instructions; the \fB\-B\fP option writes them using the delimiter "\|\fB?\fP\|", to search \fIbackwards\fP through files. The default is to use the delimiter "\|\fB/\fP\|", to search \fIforwards\fP through files. -Only \fBctags\fP accepts this option. +This option makes sense only if \fB\-\-ctags\fP is used. .TP .B \-\-declarations In C and derived languages, create tags for function declarations, @@ -185,7 +185,7 @@ the previous ones. The regexps are of one of the forms: where \fItagregexp\fP is used to match the tag. It should not match useless characters. If the match is such that more characters than needed are unavoidably matched by \fItagregexp\fP, it may be useful to -add a \fInameregexp\fP, to narrow down the tag scope. \fBctags\fP +add a \fInameregexp\fP, to narrow down the tag scope. \fB\-\-ctags\fP ignores regexps without a \fInameregexp\fP. The syntax of regexps is the same as in Emacs, except that backslash escapes are the same as GNU grep (which means, for example, that shy groups are not supported), @@ -281,15 +281,17 @@ tag entries for other files in place. Currently, this is implemented by deleting the existing entries for the given files and then rewriting the new entries at the end of the tags file. It is often faster to simply rebuild the entire tag file than to use this. -Only \fBctags\fP accepts this option. +This option makes sense only if \fB\-\-ctags\fP is used. .TP .B \-v, \-\-vgrind Instead of generating a tag file, write index (in \fBvgrind\fP format) -to standard output. Only \fBctags\fP accepts this option. +to standard output. +This option makes sense only if \fB\-\-ctags\fP is used. .TP .B \-x, \-\-cxref Instead of generating a tag file, write a cross reference (in -\fBcxref\fP format) to standard output. Only \fBctags\fP accepts this option. +\fBcxref\fP format) to standard output. +This option makes sense only if \fB\-\-ctags\fP is used. .TP .B \-h, \-H, \-\-help Print usage information. Followed by one or more \-\-language=LANG diff --git a/etc/NEWS b/etc/NEWS index c4a55786cf8..c8797cf74ec 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -29,6 +29,12 @@ applies, and please also update docstrings as needed. The traditional unexec dumper, deprecated since Emacs 27, has been removed. +--- +** Emacs's old ctags program is no longer built or installed. +You are encouraged to use Universal Ctags instead. +For now, to get the old ctags behavior you can can run 'etags --ctags' +or use a shell script named 'ctags' that runs 'etags --ctags "$@"'. + --- ** Changed GCC default options on 32-bit x86 systems. When using GCC 4 or later to build Emacs on 32-bit x86 systems, diff --git a/etc/PROBLEMS b/etc/PROBLEMS index 0d61a3bc76e..952813f0c5b 100644 --- a/etc/PROBLEMS +++ b/etc/PROBLEMS @@ -3973,7 +3973,7 @@ There are several known workarounds: The linker error messages look like this: - oo-spd/i386/ctags.o:ctags.c:(.text+0x156e): undefined reference to `_imp__re_set_syntax' + oo-spd/i386/etags.o:etags.c:(.text+0x156e): undefined reference to `_imp__re_set_syntax' collect2: ld returned 1 exit status This happens because GCC finds an incompatible regex.h header @@ -4004,7 +4004,7 @@ Some versions of mingw32 make on some versions of Windows do not seem to detect the shell correctly. Try "make SHELL=cmd.exe", or if that fails, try running make from Cygwin bash instead. -*** Building 'ctags' for MS-Windows with the MinGW port of GCC fails. +*** Building 'etags' for MS-Windows with the MinGW port of GCC fails. This might happen due to a bug in the MinGW header assert.h, which defines the 'assert' macro with a trailing semi-colon. The following diff --git a/java/Makefile.in b/java/Makefile.in index 39d6e85c7a7..4988290a207 100644 --- a/java/Makefile.in +++ b/java/Makefile.in @@ -128,7 +128,6 @@ IS_D8_R8 := @IS_D8_R8@ # containing the following files: # lib/$(ANDROID_ABI)/libemacs.so # lib/$(ANDROID_ABI)/libandroid-emacs.so -# lib/$(ANDROID_ABI)/libctags.so # lib/$(ANDROID_ABI)/libetags.so # lib/$(ANDROID_ABI)/libhexl.so # lib/$(ANDROID_ABI)/libmovemail.so @@ -143,8 +142,7 @@ all: $(APK_NAME) # Binaries to cross-compile. CROSS_SRC_BINS := $(top_builddir)/cross/src/android-emacs -CROSS_LIBSRC_BINS := $(top_builddir)/cross/lib-src/ctags \ - $(top_builddir)/cross/lib-src/hexl \ +CROSS_LIBSRC_BINS := $(top_builddir)/cross/lib-src/hexl \ $(top_builddir)/cross/lib-src/ebrowse \ $(top_builddir)/cross/lib-src/emacsclient \ $(top_builddir)/cross/lib-src/etags diff --git a/lib-src/Makefile.in b/lib-src/Makefile.in index 439d9a1a52d..49a243e4795 100644 --- a/lib-src/Makefile.in +++ b/lib-src/Makefile.in @@ -155,7 +155,7 @@ ANDROID=@ANDROID@ CLIENTW = @CLIENTW@ # Things that a user might actually run, which should be installed in bindir. -INSTALLABLES = etags${EXEEXT} ctags${EXEEXT} emacsclient${EXEEXT} $(CLIENTW) \ +INSTALLABLES = etags${EXEEXT} emacsclient${EXEEXT} $(CLIENTW) \ ebrowse${EXEEXT} # Things that Emacs runs internally, or during the build process, @@ -415,13 +415,6 @@ etags_libs = $(NTLIB) $(LOADLIBES) $(LIBS_ETAGS) etags${EXEEXT}: ${etags_deps} $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} -o $@ $< $(etags_libs) -## ctags.c is distinct from etags.c so that parallel makes do not write two -## etags.o files on top of each other. -## FIXME? -## Can't we use a wrapper that calls 'etags --ctags'? -ctags${EXEEXT}: ${srcdir}/ctags.c ${etags_deps} - $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} -o $@ $< $(etags_libs) - asset-directory-tool${EXEEXT}: ${srcdir}/asset-directory-tool.c $(config_h) $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $< $(LOADLIBES) -o $@ diff --git a/lib-src/ctags.c b/lib-src/ctags.c deleted file mode 100644 index 0a6838a9dbb..00000000000 --- a/lib-src/ctags.c +++ /dev/null @@ -1,2 +0,0 @@ -#define CTAGS 1 -#include "etags.c" diff --git a/lib-src/etags.c b/lib-src/etags.c index b59b70c9ec7..d511bc39588 100644 --- a/lib-src/etags.c +++ b/lib-src/etags.c @@ -126,16 +126,6 @@ University of California, as described above. */ #include #include -/* Define CTAGS to make the program "ctags" compatible with the usual one. - Leave it undefined to make the program "etags", which makes emacs-style - tag tables and tags typedefs, #defines and struct/union/enum by default. */ -#ifdef CTAGS -# undef CTAGS -# define CTAGS true -#else -# define CTAGS false -#endif - /* Define MERCURY_HEURISTICS_RATIO as it was necessary to disambiguate Mercury from Objective C, which have same file extensions .m See comments before function test_objc_is_mercury for details. */ @@ -465,12 +455,12 @@ static bool typedefs_or_cplusplus; /* -T: create tags for C typedefs, level */ /* member functions. */ static bool constantypedefs; /* -d: create tags for C #define, enum */ /* constants and variables. */ - /* -D: opposite of -d. Default under ctags. */ + /* -D: opposite of -d. Default if ctags. */ static int globals; /* create tags for global variables */ static int members; /* create tags for C member variables */ static int declarations; /* --declarations: tag them and extern in C&Co*/ static int no_line_directive; /* ignore #line directives (undocumented) */ -static int no_duplicates; /* no duplicate tags for ctags (undocumented) */ +static int no_duplicates; /* no duplicate tags if ctags (undocumented) */ static bool update; /* -u: update tags */ static bool vgrind_style; /* -v: create vgrind style index output */ static bool no_warnings; /* -w: suppress warnings (undocumented) */ @@ -479,18 +469,20 @@ static bool cplusplus; /* .[hc] means C++, not C (undocumented) */ static bool ignoreindent; /* -I: ignore indentation in C */ static int packages_only; /* --packages-only: in Ada, only tag packages*/ static int class_qualify; /* -Q: produce class-qualified tags in C++/Java */ +static bool ctags; /* --ctags */ static int debug; /* --debug */ static int fallback_lang; /* --(no-)fallback-lang: Fortran/C fallbacks */ static int empty_files; /* --(no-)empty-file-entries */ - -/* STDIN is defined in LynxOS system headers */ -#ifdef STDIN -# undef STDIN -#endif - -#define STDIN 0x1001 /* returned by getopt_long on --parse-stdin */ static bool parsing_stdin; /* --parse-stdin used */ +/* For long options that have no equivalent short option, use a + non-character as a pseudo short option, starting with CHAR_MAX + 1. */ +enum + { + CTAGS_OPTION = CHAR_MAX + 1, + STDIN_OPTION + }; + static regexp *p_head; /* list of all regexps */ static bool need_filebuf; /* some regexes are multi-line */ @@ -499,6 +491,7 @@ static struct option longopts[] = { "append", no_argument, NULL, 'a' }, { "packages-only", no_argument, &packages_only, 1 }, { "c++", no_argument, NULL, 'C' }, + { "ctags", no_argument, NULL, CTAGS_OPTION }, { "debug", no_argument, &debug, 1 }, { "declarations", no_argument, &declarations, 1 }, { "no-line-directive", no_argument, &no_line_directive, 1 }, @@ -514,10 +507,10 @@ static struct option longopts[] = { "regex", required_argument, NULL, 'r' }, { "no-regex", no_argument, NULL, 'R' }, { "ignore-case-regex", required_argument, NULL, 'c' }, - { "parse-stdin", required_argument, NULL, STDIN }, + { "parse-stdin", required_argument, NULL, STDIN_OPTION }, { "version", no_argument, NULL, 'V' }, -#if CTAGS /* Ctags options */ + /* ctags options */ { "backward-search", no_argument, NULL, 'B' }, { "cxref", no_argument, NULL, 'x' }, { "defines", no_argument, NULL, 'd' }, @@ -528,7 +521,7 @@ static struct option longopts[] = { "vgrind", no_argument, NULL, 'v' }, { "no-warn", no_argument, NULL, 'w' }, -#else /* Etags options */ + /* etags options */ { "no-defines", no_argument, NULL, 'D' }, { "no-globals", no_argument, &globals, 0 }, { "include", required_argument, NULL, 'i' }, @@ -536,7 +529,7 @@ static struct option longopts[] = { "fallback-lang", no_argument, &fallback_lang, 1 }, { "no-empty-file-entries", no_argument, &empty_files, 0 }, { "empty-file-entries", no_argument, &empty_files, 1 }, -#endif + { NULL } }; @@ -598,15 +591,17 @@ followed by a colon, are tags."; That is why default_C_entries is called for these. */ static const char *default_C_suffixes [] = { "c", "h", NULL }; -#if CTAGS /* C help for Ctags */ -static const char default_C_help [] = + +/* C help for ctags */ +static const char ctags_default_C_help[] = "In C code, any C function is a tag. Use -t to tag typedefs.\n\ Use -T to tag definitions of 'struct', 'union' and 'enum'.\n\ Use -d to tag '#define' macro definitions and 'enum' constants.\n\ Use --globals to tag global variables.\n\ You can tag function declarations and external variables by\n\ using '--declarations', and struct members by using '--members'."; -#else /* C help for Etags */ + +/* C help for etags */ static const char default_C_help [] = "In C code, any C function or typedef is a tag, and so are\n\ definitions of 'struct', 'union' and 'enum'. '#define' macro\n\ @@ -617,7 +612,6 @@ definitions and 'enum' constants are tags unless you specify\n\ '--no-members' can make the tags table file much smaller.\n\ You can tag function declarations and external variables by\n\ using '--declarations'."; -#endif /* C help for Ctags and Etags */ static const char *Cplusplus_suffixes [] = { "C", "c++", "cc", "cpp", "cxx", "H", "h++", "hh", "hpp", "hxx", @@ -862,6 +856,7 @@ static language lang_names [] = { { "ada", Ada_help, Ada_funcs, Ada_suffixes }, { "asm", Asm_help, Asm_labels, Asm_suffixes }, +#define C_LANG_NAMES_INDEX 2 { "c", default_C_help, default_C_entries, default_C_suffixes }, { "c++", Cplusplus_help, Cplusplus_entries, Cplusplus_suffixes }, { "c*", no_lang_help, Cstar_entries, Cstar_suffixes }, @@ -934,15 +929,10 @@ For detailed help on a given language use, for example,\n\ etags --help --lang=ada."); } -#if CTAGS -# define PROGRAM_NAME "ctags" -#else -# define PROGRAM_NAME "etags" -#endif static _Noreturn void print_version (void) { - fputs ((PROGRAM_NAME " (" PACKAGE_NAME " " PACKAGE_VERSION ")\n" + fputs (("etags (" PACKAGE_NAME " " PACKAGE_VERSION ")\n" COPYRIGHT "\n" "This program is distributed under the terms in ETAGS.README\n"), stdout); @@ -984,7 +974,7 @@ Relative ones are stored relative to the output file's directory.\n"); puts ("--packages-only\n\ For Ada files, only generate tags for packages."); - if (CTAGS) + if (ctags) puts ("-B, --backward-search\n\ Write the search commands for the tag entries using '?', the\n\ backward-search command instead of '/', the forward-search command."); @@ -997,9 +987,13 @@ Relative ones are stored relative to the output file's directory.\n"); Treat files whose name suffix defaults to C language as C++ files."); */ + if (PRINT_UNDOCUMENTED_OPTIONS_HELP && !ctags) + puts ("--ctags\n\ + Implement ctags behavior."); + puts ("--declarations\n\ In C and derived languages, create tags for function declarations,"); - if (CTAGS) + if (ctags) puts ("\tand create tags for extern variables if --globals is used."); else puts @@ -1008,7 +1002,7 @@ Relative ones are stored relative to the output file's directory.\n"); puts ("\tIn Mercury, tag both declarations starting a line with ':-' and\n\ first predicates or functions in clauses."); - if (CTAGS) + if (ctags) puts ("-d, --defines\n\ Create tag entries for C #define constants and enum constants, too."); else @@ -1016,7 +1010,7 @@ Relative ones are stored relative to the output file's directory.\n"); Don't create tag entries for C #define constants and enum constants.\n\ This makes the tags file smaller."); - if (!CTAGS) + if (!ctags) puts ("-i FILE, --include=FILE\n\ Include a note in tag file indicating that, when searching for\n\ a tag, one should also consult the tags file FILE after\n\ @@ -1026,7 +1020,7 @@ Relative ones are stored relative to the output file's directory.\n"); Force the following files to be considered as written in the\n\ named language up to the next --language=LANG option."); - if (CTAGS) + if (ctags) puts ("--globals\n\ Create tag entries for global variables in some languages."); else @@ -1037,7 +1031,7 @@ Relative ones are stored relative to the output file's directory.\n"); puts ("--no-line-directive\n\ Ignore #line preprocessor directives in C and derived languages."); - if (CTAGS) + if (ctags) puts ("--members\n\ Create tag entries for members of structures in some languages."); else @@ -1045,7 +1039,7 @@ Relative ones are stored relative to the output file's directory.\n"); Do not create tag entries for members of structures\n\ in some languages."); - if (!CTAGS) + if (!ctags) { puts ("--fallback-lang\n\ If a file's language could not be determined, try to parse\n\ @@ -1092,7 +1086,7 @@ Relative ones are stored relative to the output file's directory.\n"); puts ("--parse-stdin=NAME\n\ Read from standard input and record tags as belonging to file NAME."); - if (CTAGS) + if (ctags) { puts ("-t, --typedefs\n\ Generate tag entries for C and Ada typedefs."); @@ -1101,7 +1095,7 @@ Relative ones are stored relative to the output file's directory.\n"); and C++ member functions."); } - if (CTAGS) + if (ctags) puts ("-u, --update\n\ Update the tag entries for the given files, leaving tag\n\ entries for other files in place. Currently, this is\n\ @@ -1110,7 +1104,7 @@ Relative ones are stored relative to the output file's directory.\n"); tags file. It is often faster to simply rebuild the entire\n\ tag file than to use this."); - if (CTAGS) + if (ctags) { puts ("-v, --vgrind\n\ Print on the standard output an index of items intended for\n\ @@ -1160,7 +1154,6 @@ main (int argc, char **argv) linebuffer filename_lb; bool help_asked = false; ptrdiff_t len; - char *optstring; int opt; progname = argv[0]; @@ -1192,9 +1185,7 @@ main (int argc, char **argv) /* When the optstring begins with a '-' getopt_long does not rearrange the non-options arguments to be at the end, but leaves them alone. */ - optstring = concat ("-ac:Cf:Il:o:Qr:RSVhH", - (CTAGS) ? "BxdtTuvw" : "Di:", - ""); + static char const optstring[] = "-aBc:CdDf:hHi:Il:o:Qr:RStTuvVwx"; while ((opt = getopt_long (argc, argv, optstring, longopts, NULL)) != EOF) switch (opt) @@ -1215,7 +1206,13 @@ main (int argc, char **argv) ++file_count; break; - case STDIN: + case CTAGS_OPTION: + /* Operate as ctags, not etags. */ + ctags = true; + lang_names[C_LANG_NAMES_INDEX].help = ctags_default_C_help; + break; + + case STDIN_OPTION: /* Parse standard input. Idea by Vivek . */ argbuffer[current_arg].arg_type = at_stdin; argbuffer[current_arg].what = optarg; @@ -1325,7 +1322,7 @@ main (int argc, char **argv) } if (tagfile == NULL) - tagfile = savestr (CTAGS ? "tags" : "TAGS"); + tagfile = savestr (ctags ? "tags" : "TAGS"); cwd = etags_getcwd (); /* the current working directory */ if (cwd[strlen (cwd) - 1] != '/') { @@ -1349,7 +1346,7 @@ main (int argc, char **argv) linebuffer_init (&filebuf); linebuffer_init (&token_name); - if (!CTAGS) + if (!ctags) { if (streq (tagfile, "-")) { @@ -1407,13 +1404,13 @@ main (int argc, char **argv) free (filebuf.buffer); free (token_name.buffer); - if (!CTAGS || cxref_style) + if (!ctags || cxref_style) { /* Write the remaining tags to tagf (ETAGS) or stdout (CXREF). */ put_entries (nodehead); free_tree (nodehead); nodehead = NULL; - if (!CTAGS) + if (!ctags) { fdesc *fdp; @@ -1462,7 +1459,7 @@ main (int argc, char **argv) if (fclose (tagf) == EOF) pfatal (tagfile); - if (CTAGS) + if (ctags) if (append_to_tagfile || update) { /* Maybe these should be used: @@ -1860,7 +1857,7 @@ process_file (FILE *fh, char *fn, language *lang) /* If not Ctags, and if this is not metasource and if it contained no #line directives, we can write the tags and free all nodes pointing to curfdp. */ - if (!CTAGS + if (!ctags && curfdp->usecharno /* no #line directives in this file */ && !curfdp->lang->metasource) { @@ -2092,7 +2089,7 @@ make_tag (const char *name, /* tag name, or NULL if unnamed */ fprintf (stderr, "%s on %s:%"PRIdMAX": %s\n", named ? name : "(unnamed)", curfdp->taggedfname, lno, linestart); - if (!CTAGS && named) /* maybe set named to false */ + if (!ctags && named) /* maybe set named to false */ /* Let's try to make an implicit tag name, that is, create an unnamed tag such that etags.el can guess a name from it. */ { @@ -2133,17 +2130,17 @@ pfnote (char *name, /* tag name, or NULL if unnamed */ { register node *np; - if ((CTAGS && name == NULL) + if ((ctags && name == NULL) /* We used to have an assertion here for the case below, but if we hit that case, it just means our parser got confused, and there's nothing to do about such empty "tags". */ - || (!CTAGS && name && name[0] == '\0')) + || (!ctags && name && name[0] == '\0')) return; np = xmalloc (sizeof *np); /* If ctags mode, change name "main" to M. */ - if (CTAGS && !cxref_style && streq (name, "main")) + if (ctags && !cxref_style && streq (name, "main")) { char *fp = strrchr (curfdp->taggedfname, '/'); np->name = concat ("M", fp == NULL ? curfdp->taggedfname : fp + 1, ""); @@ -2168,7 +2165,7 @@ pfnote (char *name, /* tag name, or NULL if unnamed */ else np->cno = invalidcharno; np->left = np->right = NULL; - if (CTAGS && !cxref_style) + if (ctags && !cxref_style) { if (strnlen (linestart, 50) < 50) np->regex = concat (linestart, "$", ""); @@ -2295,7 +2292,7 @@ add_node (node *np, node **cur_node_p) return; } - if (!CTAGS) + if (!ctags) /* Etags Mode */ { /* For each file name, tags are in a linked sublist on the right @@ -2394,7 +2391,7 @@ invalidate_nodes (fdesc *badfdp, node **npp) node *np = *npp; stkentry *stack = NULL; - if (CTAGS) + if (ctags) { while (np) { @@ -2504,7 +2501,7 @@ put_entry (node *np) /* Output this entry */ if (np->valid) { - if (!CTAGS) + if (!ctags) { /* Etags mode */ if (fdp != np->fdp) @@ -2576,7 +2573,7 @@ put_entries (node *np) if (np == NULL) return; - if (CTAGS) + if (ctags) { while (np) { diff --git a/nt/README b/nt/README index a909ada1c87..14ff59de87c 100644 --- a/nt/README +++ b/nt/README @@ -44,7 +44,7 @@ + addpm.exe - A basic installer that creates Start Menu icons for Emacs. Running this is optional. - + ctags.exe, etags.exe - Tools for generating tag files. See the + + etags.exe - Tool for generating tag files. See the `Tags' node of the Emacs manual. + ebrowse.exe - A tool for generating C++ browse information. See the diff --git a/nt/README.W32 b/nt/README.W32 index 25ca20bc7bf..fc415d67769 100644 --- a/nt/README.W32 +++ b/nt/README.W32 @@ -104,7 +104,7 @@ See the end of the file for license conditions. + addpm.exe - A basic installer that adds Emacs to "Start" menus and adds Emacs-related entries to the Windows Registry. - + ctags.exe, etags.exe - Tools for generating tag files. See the + + etags.exe - Tool for generating tag files. See the `Tags' node of the Emacs manual. + ebrowse.exe - A tool for generating C++ browse information. See the diff --git a/src/callproc.c b/src/callproc.c index 33b0feaf266..7059a2bac6f 100644 --- a/src/callproc.c +++ b/src/callproc.c @@ -2167,14 +2167,10 @@ See `setenv' and `getenv'. */); Vprocess_environment = Qnil; DEFVAR_LISP ("ctags-program-name", Vctags_program_name, - doc: /* Name of the `ctags' program distributed with Emacs. + doc: /* Name of the `ctags' program. Use this instead of calling `ctags' directly, as `ctags' may have been renamed to comply with executable naming restrictions on the system. */); -#if !defined HAVE_ANDROID || defined ANDROID_STUBIFY Vctags_program_name = build_string ("ctags"); -#else - Vctags_program_name = build_string ("libctags.so"); -#endif DEFVAR_LISP ("etags-program-name", Vetags_program_name, doc: /* Name of the `etags' program distributed with Emacs. diff --git a/test/manual/etags/Makefile b/test/manual/etags/Makefile index 7480356d2d3..5e3822d9f7d 100644 --- a/test/manual/etags/Makefile +++ b/test/manual/etags/Makefile @@ -37,7 +37,7 @@ SRCS=${ADASRC} ${ASRC} ${CSRC} ${CPSRC} ${ELSRC} ${ERLSRC} ${FSRC}\ NONSRCS=./f-src/entry.strange ./erl-src/lists.erl ./cp-src/clheir.hpp.gz ETAGS_PROG=../../../lib-src/etags -CTAGS_PROG=../../../lib-src/ctags +CTAGS_PROG=../../../lib-src/etags --ctags REGEX=/[ \t]*DEFVAR_[A-Z_ \t\n(]+"\([^"]+\)"/ xx="this line is here because of a fontlock bug commit 84abd43f42fec623d4939e3557a1da2b83e08562 Author: Juri Linkov Date: Sat Mar 22 20:37:35 2025 +0200 * lisp/treesit.el (treesit-indent-region): Handle markers (bug#77077). Ensure that markers are converted to integers for 'beg' and 'end'. diff --git a/lisp/treesit.el b/lisp/treesit.el index 2aa49a596d8..d40088178fc 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -2010,6 +2010,8 @@ reparse after indenting every single line.") (defun treesit-indent-region (beg end) "Indent the region between BEG and END. Similar to `treesit-indent', but indent a region instead." + (when (markerp beg) (setq beg (marker-position beg))) + (when (markerp end) (setq end (marker-position end))) (treesit-update-ranges beg end) ;; We indent `treesit--indent-region-batch-size' lines at a time, to ;; reduce the number of times the parser needs to re-parse. In each commit 2658f4eab96aaad7f52245c2422bbfa51db9b207 Author: Michael Albinus Date: Sat Mar 22 17:49:53 2025 +0100 ; Another Tramp fix * lisp/net/tramp.el (tramp-skeleton-file-truename): Remove possible trailing slash. diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index d8b58bf13e9..91ba71510e1 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -3632,7 +3632,8 @@ BODY is the backend specific code." ;; it for security reasons. (when (tramp-tramp-file-p result) (setq result (file-name-quote result 'top))) - result))))))) + ;; Remove possible trailing slash. + (directory-file-name result)))))))) (defmacro tramp-skeleton-make-directory (dir &optional parents &rest body) "Skeleton for `tramp-*-handle-make-directory'. commit 9816c61c4876ac2acdc6d9efb73c4270846b5555 Author: Eli Zaretskii Date: Sat Mar 22 18:45:38 2025 +0200 Fix usage of string data pointers in xfaces.c * src/xfaces.c (tty_defined_color): Don't use SSDATA pointers across calls to Lisp. (Bug#77046) diff --git a/src/xfaces.c b/src/xfaces.c index fbbaffb8889..7a4571c00c4 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -1150,14 +1150,18 @@ tty_defined_color (struct frame *f, const char *color_name, color_def->green = 0; if (*color_name) - status = tty_lookup_color (f, build_string (color_name), color_def, NULL); - - if (color_def->pixel == FACE_TTY_DEFAULT_COLOR && *color_name) { - if (strcmp (color_name, "unspecified-fg") == 0) - color_def->pixel = FACE_TTY_DEFAULT_FG_COLOR; - else if (strcmp (color_name, "unspecified-bg") == 0) - color_def->pixel = FACE_TTY_DEFAULT_BG_COLOR; + Lisp_Object lcolor = build_string (color_name); + status = tty_lookup_color (f, lcolor, color_def, NULL); + + if (color_def->pixel == FACE_TTY_DEFAULT_COLOR) + { + color_name = SSDATA (lcolor); + if (strcmp (color_name, "unspecified-fg") == 0) + color_def->pixel = FACE_TTY_DEFAULT_FG_COLOR; + else if (strcmp (color_name, "unspecified-bg") == 0) + color_def->pixel = FACE_TTY_DEFAULT_BG_COLOR; + } } if (color_def->pixel != FACE_TTY_DEFAULT_COLOR) commit 764f23ef4365e91fcaa1d343866e10c3e1acb53c Merge: 42e116bb109 1364bbc6a5c Author: Sean Whitton Date: Sat Mar 22 21:09:37 2025 +0800 Merge from origin/emacs-30 1364bbc6a5c ; * admin/notes/spelling: Grammar fix dc80a8f0509 ; Add index entry "code completion" to user manual 0d9b14ed057 ; * doc/emacs/programs.texi (Program Modes): Add info abo... f224475f578 ; admin/notes/spelling: Notes on abbreviation of "Emacs L... 86c354dd0d8 Fix OSX build without pdumper 2d12754ee20 ; Add indexing for Eglot in user manual a30b9b640b4 ; Change some instances of cl to cl-lib in docs b681d62436f ; Improve introduction to use-package manual f1acefd86f8 ; Add cross-references to push and pop docstrings commit 1364bbc6a5cb8fd7816674c685bba8db7de8ada7 Author: Sean Whitton Date: Sat Mar 22 21:07:28 2025 +0800 ; * admin/notes/spelling: Grammar fix diff --git a/admin/notes/spelling b/admin/notes/spelling index a6441c181f6..37a0ada9923 100644 --- a/admin/notes/spelling +++ b/admin/notes/spelling @@ -16,7 +16,7 @@ Re "behavior" vs "behaviour", etc. - https://lists.gnu.org/r/emacs-devel/2005-06/msg00489.html -- In comments, docstrings and other documentation that forms parts of +- In comments, docstrings and other documentation that forms part of Emacs itself, prefer not to abbreviate "Emacs Lisp". Say just "Lisp" whenever the context allows. If you must abbreviate "Emacs Lisp", capitalize it thus: "Elisp". commit 42e116bb1095f47cd0d57bbb6ee7b73d2d9f506e Author: Eli Zaretskii Date: Sat Mar 22 14:14:22 2025 +0200 ; Fix last change (bug#76980) * lisp/window.el (window--state-normalize-buffer-name): Doc fix. * doc/lispref/windows.texi (Window Configurations): Add indexing. diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi index 1ebf84c3261..417c323be6b 100644 --- a/doc/lispref/windows.texi +++ b/doc/lispref/windows.texi @@ -7001,6 +7001,7 @@ Together, the argument @var{writable} and the variable @code{window-persistent-parameters} specify which window parameters are saved by this function. @xref{Window Parameters}. +@vindex window-state-normalize-buffer-name Bind @code{window-state-normalize-buffer-name} to non-@code{nil} to normalize buffer names under @file{uniquify} management by removing its prefixes and suffixes. This helps restore window buffers across Emacs diff --git a/lisp/window.el b/lisp/window.el index 0e6090a6ec1..befbc679b23 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -6308,7 +6308,7 @@ specific buffers." (defun window--state-normalize-buffer-name (buffer) "Normalize BUFFER name, accommodating `uniquify'. If BUFFER is under `uniquify' management, return its `buffer-name' with -its prefixes and suffixes removed; otherwise return BUFFER +its prefixes and suffixes removed; otherwise return BUFFER's `buffer-name'." (or (and window-state-normalize-buffer-name (fboundp 'uniquify-buffer-base-name) commit 4266514dc88345d5c1bc1ab6dd8576dd47caf57f Author: shipmints Date: Wed Mar 12 12:14:50 2025 -0400 'window-state-normalize-buffer-name' option for `uniquify' buffers If 'window-state-normalize-buffer-name' is non-nil, 'window-state-get' will normalize stored buffer names, making them easier to restore for users that use 'uniquify' buffer naming. * doc/lispref/windows.texi (Window Configurations): Document 'window-state-normalize-buffer-name'. * lisp/window.el (window-state-normalize-buffer-name): New defvar. (window--state-normalize-buffer-name): New function. (window--state-get-1): Call 'window--state-normalize-buffer-name' rather than 'buffer-name'. * etc/NEWS: Announce 'window-state-normalize-buffer-name'. (Bug#76980) diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi index 5c0db6d4877..1ebf84c3261 100644 --- a/doc/lispref/windows.texi +++ b/doc/lispref/windows.texi @@ -7000,6 +7000,11 @@ state will be written to disk and read back in another session. Together, the argument @var{writable} and the variable @code{window-persistent-parameters} specify which window parameters are saved by this function. @xref{Window Parameters}. + +Bind @code{window-state-normalize-buffer-name} to non-@code{nil} to +normalize buffer names under @file{uniquify} management by removing its +prefixes and suffixes. This helps restore window buffers across Emacs +sessions. @xref{Uniquify,,, emacs, The GNU Emacs Manual}. @end defun The value returned by @code{window-state-get} can be used in the same diff --git a/etc/NEWS b/etc/NEWS index 19899349ec1..c4a55786cf8 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -292,6 +292,12 @@ return value windows whose buffers share their text with BUFFER-OR-NAME. With such an entry, 'display-buffer-reuse-window' may also choose a window whose buffer shares text with the buffer to display. ++++ +*** New variable 'window-state-normalize-buffer-name'. +When bound to non-nil, 'window-state-get' will normalize 'uniquify' +managed buffer names by removing 'uniquify' prefixes and suffixes. This +helps restore window buffers across Emacs sessions. + ** Frames +++ diff --git a/lisp/window.el b/lisp/window.el index 1e8f4e323bc..0e6090a6ec1 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -6300,6 +6300,22 @@ specific buffers." )) ;;; Window states, how to get them and how to put them in a window. + +(defvar window-state-normalize-buffer-name nil + "Non-nil means accommodate buffer names under `uniquify' management. +`uniquify' prefixes and suffixes will be removed.") + +(defun window--state-normalize-buffer-name (buffer) + "Normalize BUFFER name, accommodating `uniquify'. +If BUFFER is under `uniquify' management, return its `buffer-name' with +its prefixes and suffixes removed; otherwise return BUFFER +`buffer-name'." + (or (and window-state-normalize-buffer-name + (fboundp 'uniquify-buffer-base-name) + (with-current-buffer buffer + (uniquify-buffer-base-name))) + (buffer-name buffer))) + (defun window--state-get-1 (window &optional writable) "Helper function for `window-state-get'." (let* ((type @@ -6352,7 +6368,8 @@ specific buffers." (let ((point (window-point window)) (start (window-start window))) `((buffer - ,(if writable (buffer-name buffer) buffer) + ,(if writable (window--state-normalize-buffer-name + buffer) buffer) (selected . ,selected) (hscroll . ,(window-hscroll window)) (fringes . ,(window-fringes window)) @@ -6374,13 +6391,15 @@ specific buffers." ,@(when next-buffers `((next-buffers . ,(if writable - (mapcar #'buffer-name next-buffers) + (mapcar #'window--state-normalize-buffer-name + next-buffers) next-buffers)))) ,@(when prev-buffers `((prev-buffers . ,(if writable (mapcar (lambda (entry) - (list (buffer-name (nth 0 entry)) + (list (window--state-normalize-buffer-name + (nth 0 entry)) (marker-position (nth 1 entry)) (marker-position (nth 2 entry)))) prev-buffers) commit 1aebb026112016fb38ff458bd50c80be0f139538 Author: James Cherti Date: Wed Mar 19 11:56:11 2025 -0400 ElDoc: Add more commands using 'eldoc-add-command-completions' Add more commands to 'eldoc-add-command-completions' to fix disappearing ElDoc help in the minibuffer for the following cases: - All modes: Added "comment-indent-new-line". - All modes: Added "delete-char" for handling when the user presses delete. - Python mode: Added "python-indent-dedent-line-backspace" for handling when the user presses backspace. * lisp/emacs-lisp/eldoc.el (eldoc-remove-command-completions): * lisp/progmodes/python.el (python-base-mode): Add more commands to 'eldoc-add-command-completions'. Copyright-paperwork-exempt: yes diff --git a/lisp/emacs-lisp/eldoc.el b/lisp/emacs-lisp/eldoc.el index 966158024dd..85fb6c780e2 100644 --- a/lisp/emacs-lisp/eldoc.el +++ b/lisp/emacs-lisp/eldoc.el @@ -994,7 +994,7 @@ the docstrings eventually produced, using ;; Prime the command list. (eldoc-add-command-completions - "back-to-indentation" + "comment-indent-new-line" "delete-char" "back-to-indentation" "backward-" "beginning-of-" "delete-other-windows" "delete-window" "down-list" "end-of-" "exchange-point-and-mark" "forward-" "goto-" "handle-select-window" "indent-for-tab-command" "left-" "mark-page" diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 741b94e187b..b6db6097d9f 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -7147,6 +7147,7 @@ implementations: `python-mode' and `python-ts-mode'." (add-hook 'eldoc-documentation-functions #'python-eldoc-function nil t) (add-function :before-until (local 'eldoc-documentation-function) #'python-eldoc-function)))) + (eldoc-add-command-completions "python-indent-dedent-line-backspace") ;; TODO: Use tree-sitter to figure out the block in `python-ts-mode'. (dolist (mode '(python-mode python-ts-mode)) commit 20687ab61715889cb0670c9351983154e6620c1b Author: Stefan Kangas Date: Sat Mar 22 12:47:06 2025 +0100 Delete now unused constants in nsterm.h * src/nsterm.h (NS_DUMPGLYPH_NORMAL, NS_DUMPGLYPH_CURSOR) (NS_DUMPGLYPH_FOREGROUND, NS_DUMPGLYPH_MOUSEFACE): Delete now unused constants. diff --git a/src/nsterm.h b/src/nsterm.h index 04e9ffab131..2616dacc3e2 100644 --- a/src/nsterm.h +++ b/src/nsterm.h @@ -1108,13 +1108,6 @@ struct x_output extern struct ns_display_info *ns_term_init (Lisp_Object display_name); extern void ns_term_shutdown (int sig); -/* Constants for text rendering. */ -#define NS_DUMPGLYPH_NORMAL 0 -#define NS_DUMPGLYPH_CURSOR 1 -#define NS_DUMPGLYPH_FOREGROUND 2 -#define NS_DUMPGLYPH_MOUSEFACE 3 - - #ifdef NS_IMPL_GNUSTEP /* In nsfont.m, called from fontset.c. */ extern void nsfont_make_fontset_for_font (Lisp_Object name, commit 69013ed73d8fd5e8827335c3e1be47dc652905a6 Author: Stefan Kangas Date: Sat Mar 22 12:33:47 2025 +0100 ; Clean up comments in nsterm.h diff --git a/src/nsterm.h b/src/nsterm.h index 0009f1ab2bf..04e9ffab131 100644 --- a/src/nsterm.h +++ b/src/nsterm.h @@ -42,7 +42,7 @@ typedef float EmacsCGFloat; /* NSFilenamesPboardType is deprecated in macOS 10.14, but NSPasteboardTypeFileURL is only available in 10.13 (and GNUstep - probably lacks it too). */ + probably lacks it too). */ #if defined NS_IMPL_COCOA && MAC_OS_X_VERSION_MIN_REQUIRED >= 101300 #define NS_USE_NSPasteboardTypeFileURL 1 #else @@ -60,16 +60,16 @@ typedef float EmacsCGFloat; Uncomment suitable NSTRACE_GROUP_xxx lines to trace more. Hint: keep the trailing whitespace -- the version control system - will reject accidental commits. */ + will reject accidental commits. */ /* #define NSTRACE_ENABLED 1 */ /* When non-zero, trace output is enabled for all parts, except those - explicitly disabled. */ + explicitly disabled. */ /* #define NSTRACE_ALL_GROUPS 1 */ -/* When non-zero, trace output is enabled in the corresponding part. */ +/* When non-zero, trace output is enabled in the corresponding part. */ /* #define NSTRACE_GROUP_EVENTS 1 */ /* #define NSTRACE_GROUP_UPDATES 1 */ /* #define NSTRACE_GROUP_FRINGE 1 */ @@ -97,7 +97,7 @@ typedef float EmacsCGFloat; This is post prominent when the EVENTS part is enabled. Note that the trace system, when enabled, uses the GCC/Clang - "cleanup" extension. */ + "cleanup" extension. */ /* For example, the following is the output of `M-x toggle-frame-maximized RET'. @@ -487,7 +487,7 @@ enum ns_return_frame_mode NSRect ns_userRect; } -/* AppKit-side interface */ +/* AppKit-side interface. */ - (instancetype)menuDown: (id)sender; - (instancetype)toolbarClicked: (id)item; - (instancetype)toggleToolbar: (id)sender; @@ -496,7 +496,7 @@ enum ns_return_frame_mode - (void)mouseUp: (NSEvent *)theEvent; - (instancetype)setMiniwindowImage: (BOOL)setMini; -/* Emacs-side interface */ +/* Emacs-side interface. */ - (instancetype) initFrameFromEmacs: (struct frame *) f; - (void) setWindowClosing: (BOOL)closing; - (void) deleteWorkingText; @@ -521,7 +521,7 @@ enum ns_return_frame_mode #endif - (void)copyRect:(NSRect)srcRect to:(NSPoint)dest; -/* Non-notification versions of NSView methods. Used for direct calls. */ +/* Non-notification versions of NSView methods. Used for direct calls. */ - (void)adjustEmacsFrameRect; - (void)windowWillEnterFullScreen; - (void)windowDidEnterFullScreen; @@ -717,7 +717,7 @@ enum ns_return_frame_mode struct frame *frame; NSResponder *prevResponder; - /* offset to the bottom of knob of last mouse down */ + /* Offset to the bottom of knob of last mouse down. */ CGFloat last_mouse_offset; float min_portion; int pixel_length; @@ -727,7 +727,7 @@ enum ns_return_frame_mode BOOL horizontal; - /* optimize against excessive positioning calls generated by emacs */ + /* Optimize against excessive positioning calls generated by Emacs. */ int em_position; int em_portion; int em_whole; @@ -792,7 +792,7 @@ extern EmacsMenu *svcsMenu; ========================================================================== */ -/* Special keycodes that we pass down the event chain */ +/* Special keycodes that we pass down the event chain. */ #define KEY_NS_POWER_OFF ((1<<28)|(0<<16)|1) #define KEY_NS_OPEN_FILE ((1<<28)|(0<<16)|2) #define KEY_NS_OPEN_TEMP_FILE ((1<<28)|(0<<16)|3) @@ -825,7 +825,7 @@ struct nsfont_info { struct font font; - char *name; /* PostScript name, uniquely identifies on NS systems */ + char *name; /* PostScript name, uniquely identifies on NS systems. */ /* The following metrics are stored as float rather than int. */ @@ -874,10 +874,10 @@ struct ns_display_info ptrdiff_t bitmaps_size; ptrdiff_t bitmaps_last; - /* DPI resolution of this screen */ + /* DPI resolution of this screen. */ double resx, resy; - /* Mask of things that cause the mouse to be grabbed */ + /* Mask of things that cause the mouse to be grabbed. */ int grabbed; int n_planes; @@ -973,10 +973,10 @@ struct ns_output Emacs_Cursor bottom_edge_cursor; Emacs_Cursor bottom_left_corner_cursor; - /* NS-specific */ + /* NS-specific. */ Emacs_Cursor current_pointer; - /* lord knows why Emacs needs to know about our Window ids.. */ + /* Lord knows why Emacs needs to know about our Window ids.. */ Window window_desc, parent_desc; char explicit_parent; @@ -1016,7 +1016,7 @@ struct ns_output #ifdef NS_IMPL_GNUSTEP /* Zero if this is the first time a toolbar has been updated on this - frame. */ + frame. */ int tool_bar_adjusted; #endif }; @@ -1108,7 +1108,7 @@ struct x_output extern struct ns_display_info *ns_term_init (Lisp_Object display_name); extern void ns_term_shutdown (int sig); -/* constants for text rendering */ +/* Constants for text rendering. */ #define NS_DUMPGLYPH_NORMAL 0 #define NS_DUMPGLYPH_CURSOR 1 #define NS_DUMPGLYPH_FOREGROUND 2 @@ -1116,16 +1116,16 @@ extern void ns_term_shutdown (int sig); #ifdef NS_IMPL_GNUSTEP -/* In nsfont, called from fontset.c */ +/* In nsfont.m, called from fontset.c. */ extern void nsfont_make_fontset_for_font (Lisp_Object name, Lisp_Object font_object); -/* In nsfont, for debugging */ +/* In nsfont.m, for debugging. */ struct glyph_string; void ns_dump_glyphstring (struct glyph_string *s) EXTERNALLY_VISIBLE; #endif -/* Implemented in nsterm, published in or needed from nsfns. */ +/* Implemented in nsterm.m, published in or needed from nsfns.m. */ extern Lisp_Object ns_list_fonts (struct frame *f, Lisp_Object pattern, int size, int maxnames); extern void ns_clear_frame (struct frame *f); @@ -1156,7 +1156,7 @@ extern int ns_lisp_to_color (Lisp_Object color, NSColor **col); extern const char *ns_get_pending_menu_title (void); #endif -/* Implemented in nsfns, published in nsterm. */ +/* Implemented in nsfns.m, published in nsterm.m. */ #ifdef __OBJC__ extern void ns_move_tooltip_to_mouse_location (NSPoint); #endif @@ -1169,7 +1169,7 @@ extern const char *ns_get_string_resource (void *_rdb, const char *name, const char *class); -/* C access to ObjC functionality */ +/* C access to ObjC functionality. */ extern void ns_release_object (void *obj); extern void ns_retain_object (void *obj); extern void *ns_alloc_autorelease_pool (void); @@ -1178,7 +1178,7 @@ extern const char *ns_get_defaults_value (const char *key); extern void ns_init_pool (void); extern void ns_init_locale (void); -/* in nsmenu */ +/* Defined in nsmenu.m. */ extern void update_frame_tool_bar (struct frame *f); #ifdef __OBJC__ extern void update_frame_tool_bar_1 (struct frame *f, EmacsToolbar *toolbar); @@ -1205,7 +1205,7 @@ extern void syms_of_nsfns (void); extern void syms_of_nsmenu (void); extern void syms_of_nsselect (void); -/* From nsimage.m, needed in image.c */ +/* From nsimage.m, needed in image.c. */ struct image; extern bool ns_can_use_native_image_api (Lisp_Object type); extern void *ns_image_from_XBM (char *bits, int width, int height, @@ -1227,7 +1227,7 @@ extern int ns_display_pixel_height (struct ns_display_info *); extern int ns_display_pixel_width (struct ns_display_info *); extern size_t ns_image_size_in_bytes (void *img); -/* This in nsterm.m */ +/* Defined in nsterm.m. */ extern float ns_antialias_threshold; extern void ns_make_frame_visible (struct frame *f); extern void ns_make_frame_invisible (struct frame *f); @@ -1284,7 +1284,7 @@ extern char gnustep_base_version[]; /* version tracking */ #define NS_SELECTION_FG_COLOR_DEFAULT @"Black"; #define RESIZE_HANDLE_SIZE 12 -/* Little utility macros */ +/* Little utility macros. */ #define IN_BOUND(min, x, max) (((x) < (min)) \ ? (min) : (((x)>(max)) ? (max) : (x))) #define SCREENMAXBOUND(x) IN_BOUND (-SCREENMAX, x, SCREENMAX) commit d9386cb546571121899a6604badba651c2fa46da Author: Eli Zaretskii Date: Sat Mar 22 12:55:43 2025 +0200 ; Fix recent documentation changes * doc/lispref/frames.texi (Frames, Visibility of Frames): * etc/NEWS: Fix wording, punctuation, and markup. diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi index 7eacb790ce7..425baacd1c8 100644 --- a/doc/lispref/frames.texi +++ b/doc/lispref/frames.texi @@ -35,8 +35,8 @@ although you can create additional frames and switch between them, the terminal only shows one non-child frame at a time. This frame is referred to as the @dfn{top frame} of that terminal and can be retrieved with the function @code{tty-top-frame} described below. A top frame may -have child frames (@pxref{Child Frames}) which will be shown together -with it but cannot be a child frame itself. +have child frames (@pxref{Child Frames}), which will be shown together +with it, but it cannot be a child frame itself. Graphical terminals, on the other hand, are managed by graphical display systems such as the X Window System, which allow Emacs to show multiple @@ -3292,7 +3292,7 @@ value is @code{t} if @var{frame} is visible, @code{nil} if it is invisible, and @code{icon} if it is iconified. Note that the visibility status of a frame as reported by this function -(and by the @code{visibility} frame parameter, @ref{Frame Interaction +(and by the @code{visibility} frame parameter, @pxref{Frame Interaction Parameters}) does not necessarily tell whether the frame is actually seen on display. Any such frame can be partially or completely obscured by other window manager windows on the same graphical terminal. Whether @@ -3313,7 +3313,7 @@ be seen even if they are considered visible by this function. This function iconifies frame @var{frame}. If you omit @var{frame}, it iconifies the selected frame. This will also remove any child frames (@pxref{Child Frames}) of @var{frame} from display. On the top frame of -a text terminal this function has no effect. visible. If @var{frame} is +a text terminal this function has no effect. visible. If @var{frame} is a child frame, the behavior depends on the value of the variable @code{iconify-child-frame} (@pxref{Child Frames}). @end deffn diff --git a/etc/NEWS b/etc/NEWS index 3b14a87dd42..19899349ec1 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -72,7 +72,7 @@ display table it changes. ** Child frames are now supported on TTY frames. This supports use-cases like Posframe, Corfu, and child frames acting like tooltips. Other use-cases of child frames are not supported yet. -In particular a TTY child frame cannot be converted to a root frame or +In particular, a TTY child frame cannot be converted to a root frame or vice-versa. To enable tooltips on TTY frames, call 'tty-tip-mode'. commit 098fe4b73b62033b8930760e7fff0a23c271a1bb Author: Eli Zaretskii Date: Sat Mar 22 12:39:46 2025 +0200 Improve 'C-u C-x =' for ligatures of ASCII characters * lisp/composite.el (composition-find-pos-glyph): New function. * lisp/descr-text.el (describe-char): Use it to get the font glyph code of "trivial" compositions. (describe-char-display): Accept an additional optional argument and use it as the font glyph code for the character. diff --git a/lisp/composite.el b/lisp/composite.el index 89136ba5f39..2301dede2bd 100644 --- a/lisp/composite.el +++ b/lisp/composite.el @@ -493,6 +493,24 @@ by `find-composition'." (setq idx (1+ idx))))) (or found endpos))) +(defun composition-find-pos-glyph (composition pos) + "Find in COMPOSITION a glyph that corresponds to character at position POS. +COMPOSITION is as returned by `find-composition'." + (let* ((from-pos (car composition)) + (to-pos (nth 1 composition)) + (gstring (nth 2 composition)) + (nglyphs (lgstring-glyph-len gstring)) + (idx 0) + glyph found) + (if (and (>= pos from-pos) (< pos to-pos)) + (while (and (not found) (< idx nglyphs)) + (setq glyph (lgstring-glyph gstring idx)) + (if (and (>= pos (+ from-pos (lglyph-from glyph))) + (<= pos (+ from-pos (lglyph-to glyph)))) + (setq found (lglyph-code glyph))) + (setq idx (1+ idx)))) + found)) + (defun compose-glyph-string (gstring from to) (let ((glyph (lgstring-glyph gstring from)) from-pos to-pos) diff --git a/lisp/descr-text.el b/lisp/descr-text.el index 3fb21309f7b..2cdb47acf40 100644 --- a/lisp/descr-text.el +++ b/lisp/descr-text.el @@ -318,13 +318,13 @@ This function is semi-obsolete. Use `get-char-code-property'." ;; GLYPH-CODE is a hexadigit string representing the glyph-ID. ;; Otherwise, return a string describing the terminal codes for the ;; character. -(defun describe-char-display (pos char) +(defun describe-char-display (pos char &optional glyph-code) (if (display-graphic-p (selected-frame)) (let ((char-font-info (internal-char-font pos char))) (if char-font-info (let ((type (font-get (car char-font-info) :type)) (name (font-xlfd-name (car char-font-info))) - (code (cdr char-font-info))) + (code (or glyph-code (cdr char-font-info)))) (if (integerp code) (format "%s:%s (#x%02X)" type name code) (format "%s:%s (#x%04X%04X)" @@ -420,7 +420,7 @@ The character information includes: (describe-text-properties pos tmp-buf) (with-current-buffer tmp-buf (buffer-string))) (kill-buffer tmp-buf)))) - item-list max-width code) + item-list max-width code glyph-code trivial-p) (if multibyte-p (or (setq code (encode-char char charset)) @@ -489,7 +489,8 @@ The character information includes: (if (and (= to (1+ from)) (= i (1- j)) (setq glyph (lgstring-glyph components i)) - (= char (lglyph-char glyph))) + (= char (lglyph-char glyph)) + (setq trivial-p t)) ;; The composition is trivial. (throw 'tag nil)) (nconc composition (list i (1- j)))) @@ -527,7 +528,13 @@ The character information includes: (format "composed to form \"%s\" (see below)" (setq composition-string (buffer-substring from to)))))) - (setq composition nil))) + ;; For "trivial" compositions, such as ligatures of ASCII + ;; characters, at least show the correct font glyph number. + (setq glyph-code (if (and composition + trivial-p + (display-graphic-p (selected-frame))) + (composition-find-pos-glyph composition pos)) + composition nil))) (setq item-list `(("position" @@ -664,7 +671,7 @@ The character information includes: (composition (cadr composition)) (t - (let ((display (describe-char-display pos char))) + (let ((display (describe-char-display pos char glyph-code))) (if (display-graphic-p (selected-frame)) (if display (concat "by this font (glyph code):\n " display) commit 172e35afce430594fdf2eb9c404efc398098d621 Author: Michael Albinus Date: Sat Mar 22 09:52:22 2025 +0100 Tramp: Improve handling of cyclic symlinks * lisp/net/tramp-sh.el (tramp-sh-handle-file-ownership-preserved-p): Add FIXME. * lisp/net/tramp.el (tramp-skeleton-file-exists-p) (tramp-handle-file-directory-p): Protect against cyclic symlinks. * test/lisp/net/tramp-tests.el (tramp-test18-file-attributes) (tramp-test21-file-links): Adapt tests. diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 2b113ba1acf..5e79d4be41e 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -1857,7 +1857,10 @@ ID-FORMAT valid values are `string' and `integer'." ;; test. (tramp-check-remote-uname v tramp-bsd-unames) (= (file-attribute-group-id attributes) - (tramp-get-remote-gid v 'integer))))))))) + (tramp-get-remote-gid v 'integer)) + ;; FIXME: `file-ownership-preserved-p' tests also the + ;; ownership of the parent directory. We don't. + ))))))) ;; Directory listings. diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 366847e4e00..d8b58bf13e9 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -3584,8 +3584,10 @@ BODY is the backend specific code." (fa (tramp-get-file-property v localname "file-attributes")) ((not (stringp (car fa))))))) ;; Symlink to a non-existing target counts as nil. + ;; Protect against cyclic symbolic links. ((file-symlink-p ,filename) - (file-exists-p (file-truename ,filename))) + (ignore-errors + (file-exists-p (file-truename ,filename)))) (t ,@body))))))) (defmacro tramp-skeleton-file-local-copy (filename &rest body) @@ -4194,10 +4196,9 @@ Let-bind it when necessary.") (defun tramp-handle-file-directory-p (filename) "Like `file-directory-p' for Tramp files." ;; `file-truename' could raise an error, for example due to a cyclic - ;; symlink. We don't protect this despite it, because other errors - ;; might be worth to be visible, for example impossibility to mount - ;; in tramp-gvfs.el. - (eq (file-attribute-type (file-attributes (file-truename filename))) t)) + ;; symlink. + (ignore-errors + (eq (file-attribute-type (file-attributes (file-truename filename))) t))) (defun tramp-handle-file-equal-p (filename1 filename2) "Like `file-equalp-p' for Tramp files." diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el index 0d853f1eab6..55461819f66 100644 --- a/test/lisp/net/tramp-tests.el +++ b/test/lisp/net/tramp-tests.el @@ -3848,6 +3848,7 @@ This tests also `access-file', `file-readable-p', (should (stringp (file-attribute-user-id attr))) (should (stringp (file-attribute-group-id attr))) + ;; Symbolic links. (tramp--test-ignore-make-symbolic-link-error (should-error (access-file tmp-name2 "error") @@ -3869,17 +3870,24 @@ This tests also `access-file', `file-readable-p', (file-remote-p (file-truename tmp-name1) 'localname))) (delete-file tmp-name2) - ;; A non-existent link target makes the file unaccessible. - (make-symbolic-link "error" tmp-name2) - (should (file-symlink-p tmp-name2)) - (should-error - (access-file tmp-name2 "error") - :type 'file-missing) - ;; `file-ownership-preserved-p' should return t for - ;; symlinked files to a non-existing target. - (when test-file-ownership-preserved-p - (should (file-ownership-preserved-p tmp-name2 'group))) - (delete-file tmp-name2)) + ;; A non-existent or cyclic link target makes the file + ;; unaccessible. + (dolist (target + `("does-not-exist" ,(file-name-nondirectory tmp-name2))) + (make-symbolic-link target tmp-name2) + (should (file-symlink-p tmp-name2)) + (should-not (file-exists-p tmp-name2)) + (should-not (file-directory-p tmp-name2)) + (should-error + (access-file tmp-name2 "error") + :type + (if (string-equal target "does-not-exist") + 'file-missing 'file-error)) + ;; `file-ownership-preserved-p' should return t for + ;; symlinked files to a non-existing or cyclic target. + (when test-file-ownership-preserved-p + (should (file-ownership-preserved-p tmp-name2 'group))) + (delete-file tmp-name2))) ;; Check, that "//" in symlinks are handled properly. (with-temp-buffer @@ -4528,12 +4536,8 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." (make-symbolic-link tmp-name1 tmp-name2) (should (file-symlink-p tmp-name1)) (should (file-symlink-p tmp-name2)) - (should-error - (file-regular-p tmp-name1) - :type 'file-error) - (should-error - (file-regular-p tmp-name2) - :type 'file-error)))) + (should-not (file-regular-p tmp-name1)) + (should-not (file-regular-p tmp-name2))))) ;; Cleanup. (ignore-errors commit 049d7202f3f7f00f1536d2ed4de812636ec10640 Author: Martin Rudalics Date: Sat Mar 22 09:40:03 2025 +0100 ; * etc/NEWS: Fix entry on TTY child frames diff --git a/etc/NEWS b/etc/NEWS index cd2f974c892..3b14a87dd42 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -72,11 +72,8 @@ display table it changes. ** Child frames are now supported on TTY frames. This supports use-cases like Posframe, Corfu, and child frames acting like tooltips. Other use-cases of child frames are not supported yet. -In particular: - -- trying to create minibuffer-only child frames on a TTY frame will - signal an error; and -- a TTY child frame cannot be converted to a root frame or vice-versa. +In particular a TTY child frame cannot be converted to a root frame or +vice-versa. To enable tooltips on TTY frames, call 'tty-tip-mode'. commit 1ee2a921ad528e18cc68c594f4f2ffcb0599cfe7 Author: Martin Rudalics Date: Sat Mar 22 09:34:53 2025 +0100 Fix and document frame parameters for text terminals and child frames * src/frame.c (Fmake_frame_invisible): In doc-string describe effect on text terminals. Set FRAME correctly when called with nil value. Make frame invisible before calling mru_rooted_frame or next_frame. (Ficonify_frame): Make it work for child frames on text terminals (Fmodify_frame_parameters): Make value 'icon' for 'visibility' work for child frames. * src/dispnew.c (frame_ancestors_visible_p): New function. (frames_with_root): If VISIBLE_ONLY is non-nil, return only frames whose ancestors are all visible to avoid that redisplay draws visibly orphaned child frames. * doc/lispref/frames.texi (Frames): Move descriptions of top frame and 'tty-top-frame' here. (Frame Layout): Mention that on text terminals the outer border can be emulated by setting the 'undecorated' frame parameter. (Frame Position, Frame Parameters, Window Frame Parameters) (Position Parameters, Size Parameters): Rewrite sections dealing with the handling of frame parameters in text terminals. (Layout Parameters): Move description of 'undecorated' parameter here. Clarify semantics of 'menu-bar-lines' parameter. (Frame Interaction Parameters): Move description of 'visibility' parameter here. Mention which parameters are not implemented on text terminals. (Mouse Dragging Parameters): Describe how these work on text terminals. (Visibility of Frames): Rewrite section. (Raising and Lowering): Describe for text terminals. (Child Frames): Fix description of 'iconify-child-frame' option. diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi index 8c843952c29..7eacb790ce7 100644 --- a/doc/lispref/frames.texi +++ b/doc/lispref/frames.texi @@ -26,22 +26,28 @@ object that represents a terminal. @xref{Terminal Type}. @cindex text terminal @cindex graphical terminal @cindex graphical display +@cindex top frame There are two classes of terminals: @dfn{text terminals} and @dfn{graphical terminals}. Text terminals are non-graphics-capable -displays, including @command{xterm} and other terminal emulators. On -a text terminal, each Emacs frame occupies the terminal's entire -screen; although you can create additional frames and switch between -them, the terminal only shows one frame at a time. Graphical -terminals, on the other hand, are managed by graphical display systems -such as the X Window System, which allow Emacs to show multiple frames -simultaneously on the same display. +displays, including @command{xterm} and other terminal emulators. On a +text terminal, each Emacs frame occupies the terminal's entire screen; +although you can create additional frames and switch between them, the +terminal only shows one non-child frame at a time. This frame is +referred to as the @dfn{top frame} of that terminal and can be retrieved +with the function @code{tty-top-frame} described below. A top frame may +have child frames (@pxref{Child Frames}) which will be shown together +with it but cannot be a child frame itself. + +Graphical terminals, on the other hand, are managed by graphical display +systems such as the X Window System, which allow Emacs to show multiple +frames simultaneously on the same display. On GNU and Unix systems, you can create additional frames on any -available terminal, within a single Emacs session, regardless of -whether Emacs was started on a text or graphical terminal. Emacs can -display on both graphical and text terminals simultaneously. This -comes in handy, for instance, when you connect to the same session -from several remote locations. @xref{Multiple Terminals}. +available terminal, within a single Emacs session, regardless of whether +Emacs was started on a text or graphical terminal. Emacs can display on +both, graphical and text terminals, simultaneously. This comes in +handy, for instance, when you connect to the same session from several +remote locations. @xref{Multiple Terminals}. @defun framep object This predicate returns a non-@code{nil} value if @var{object} is a @@ -70,9 +76,9 @@ The frame is displayed on an Android device. @end defun @defun frame-terminal &optional frame -This function returns the terminal object that displays @var{frame}. -If @var{frame} is @code{nil} or unspecified, it defaults to the -selected frame. +This function returns the terminal object that displays @var{frame}. If +@var{frame} is @code{nil} or unspecified, it defaults to the selected +frame (@pxref{Input Focus}). @end defun @defun terminal-live-p object @@ -90,6 +96,19 @@ of the window-system's root window for that terminal. A child frame is a frame whose window-system window is the child of the window-system window of another Emacs frame. @xref{Child Frames}. +On a text terminal you can get its top frame with the following +function: + +@defun tty-top-frame &optional terminal +This function returns the top frame on @var{terminal}. @var{terminal} +should be a terminal object, a frame (meaning that frame's terminal), or +@code{nil} (meaning the selected frame's terminal). If it does not +refer to a text terminal, the return value is @code{nil}. A top frame +must be a root frame, which means it cannot be a child frame itself +(@pxref{Child Frames}), but may have an arbitrary number of child frames +descending from it. +@end defun + @menu * Creating Frames:: Creating additional frames. * Multiple Terminals:: Displaying on several different devices. @@ -595,8 +614,8 @@ normal, top-level frame these parameters usually represent its absolute position (see below) with respect to its display's origin. For a child frame (@pxref{Child Frames}) these parameters represent its position relative to the native position (see below) of its parent frame. For -frames on text terminals the values of these parameters are meaningless -and always zero. +root frames (@pxref{Child Frames}) on text terminals the values of these +parameters are meaningless and always zero. @item External Border @cindex external border @@ -622,11 +641,14 @@ by the window manager like tooltip frames (@pxref{Tooltips}), child frames (@pxref{Child Frames}) and @code{undecorated} or @code{override-redirect} frames (@pxref{Management Parameters}). -Outer borders are never shown on text terminal frames and on frames -generated by GTK+ routines. On MS-Windows, the outer border is emulated -with the help of a one pixel wide external border. Non-toolkit builds -on X allow changing the color of the outer border by setting the -@code{border-color} frame parameter (@pxref{Layout Parameters}). +As a rule, outer borders are never shown on text terminal frames and on +frames generated by GTK+ routines. For a child frame on a text terminal +you can emulate the outer border by setting the @code{undecorated} +parameter of that frame to @code{nil} (@pxref{Layout Parameters}). On +MS-Windows, the outer border is emulated with the help of a one pixel +wide external border. Non-toolkit builds on X allow changing the color +of the outer border by setting the @code{border-color} frame parameter +(@pxref{Layout Parameters}). @item Title Bar @cindex title bar @@ -1003,7 +1025,8 @@ invisible). However, on systems where the display's origin does not coincide with its top-left corner, the frame may be visible on a secondary monitor. -On a text terminal frame both values are zero. +On a text terminal frame both values are zero for root frames +(@pxref{Child Frames}). @end defun @defun set-frame-position frame x y @@ -1325,18 +1348,10 @@ unaffected by the setting of this option. @cindex frame parameters A frame has many parameters that control its appearance and behavior. -Just what parameters a frame has depends on what display mechanism it -uses. - - Frame parameters exist mostly for the sake of graphical displays. -Most frame parameters have no effect when applied to a frame on a text -terminal; only the @code{height}, @code{width}, @code{name}, -@code{title}, @code{menu-bar-lines}, @code{buffer-list} and -@code{buffer-predicate} parameters do something special. If the -terminal supports colors, the parameters @code{foreground-color}, -@code{background-color}, @code{background-mode} and -@code{display-type} are also meaningful. If the terminal supports -frame transparency, the parameter @code{alpha} is also meaningful. +Just what parameters are meaningful for a frame depends on what display +mechanism it uses. Many frame parameters exist mostly for the sake of +graphical displays and have no effect when applied to the top frame +(@pxref{Frames}) of a text terminal. By default, frame parameters are saved and restored by the desktop library functions (@pxref{Desktop Save Mode}) when the variable @@ -1490,11 +1505,7 @@ Arguments for Emacs Invocation, emacs, The GNU Emacs Manual}. Just what parameters a frame has depends on what display mechanism it uses. This section describes the parameters that have special -meanings on some or all kinds of terminals. Of these, @code{name}, -@code{title}, @code{height}, @code{width}, @code{buffer-list} and -@code{buffer-predicate} provide meaningful information in terminal -frames, and @code{tty-color-mode} is meaningful only for frames on -text terminals. +meanings on some or all kinds of terminals. @menu * Basic Parameters:: Parameters that are fundamental. @@ -1575,8 +1586,8 @@ measured in pixels. For a normal, non-child frame they specify the frame's outer position (@pxref{Frame Geometry}) relative to its display's origin. For a child frame (@pxref{Child Frames}) they specify the frame's outer position relative to the native position of the -frame's parent frame. (Note that none of these parameters is meaningful -on TTY frames.) +frame's parent frame. On a text terminal these parameters are +meaningful for child frames only. @table @code @vindex left@r{, a frame parameter} @@ -1628,6 +1639,8 @@ unavailable before a frame has been made visible, it is generally not advisable to use floating-point values when creating decorated frames. Floating-point values are more suited for ensuring that an (undecorated) child frame is positioned nicely within the area of its parent frame. + +Floating-point values are currently not handled on text terminal frames. @end table Some window managers ignore program-specified positions. If you want to @@ -1664,15 +1677,17 @@ just like @code{left}, except vertically instead of horizontally. @item icon-left The screen position of the left edge of the frame's icon, in pixels, counting from the left edge of the screen. This takes effect when the -frame is iconified, if the window manager supports this feature. If -you specify a value for this parameter, then you must also specify a -value for @code{icon-top} and vice versa. +frame is iconified, if the window manager supports this feature. If you +specify a value for this parameter, then you must also specify a value +for @code{icon-top} and vice versa. This parameter has no meaning on a +text terminal. @vindex icon-top@r{, a frame parameter} @item icon-top The screen position of the top edge of the frame's icon, in pixels, counting from the top edge of the screen. This takes effect when the -frame is iconified, if the window manager supports this feature. +frame is iconified, if the window manager supports this feature. This +parameter has no meaning on a text terminal. @vindex user-position@r{, a frame parameter} @item user-position @@ -1680,7 +1695,8 @@ When you create a frame and specify its screen position with the @code{left} and @code{top} parameters, use this parameter to say whether the specified position was user-specified (explicitly requested in some way by a human user) or merely program-specified (chosen by a program). -A non-@code{nil} value says the position was user-specified. +A non-@code{nil} value says the position was user-specified. This +parameter has no meaning on a text terminal. @cindex window positions and window managers Window managers generally heed user-specified positions, and some heed @@ -1699,6 +1715,7 @@ parameters represent the user's stated preference; otherwise, use @item z-group This parameter specifies a relative position of the frame's window-system window in the stacking (Z-) order of the frame's display. +It has not been implemented yet on text terminals. If this is @code{above}, the window-system will display the window that corresponds to the frame above all other window-system windows @@ -1720,7 +1737,8 @@ function @code{frame-restack} (@pxref{Raising and Lowering}). Frame parameters usually specify frame sizes in character units. On graphical displays, the @code{default} face determines the actual pixel -sizes of these character units (@pxref{Face Attributes}). +sizes of these character units (@pxref{Face Attributes}). On text +terminals size parameters affect child frames only. @table @code @vindex width@r{, a frame parameter} @@ -1779,7 +1797,7 @@ This parameter specifies the height of the frame. It works just like This does for the size parameters @code{height} and @code{width} what the @code{user-position} parameter (@pxref{Position Parameters, user-position}) does for the position parameters @code{top} and -@code{left}. +@code{left}. This parameter has no meaning on a text terminal. @vindex min-width@r{, a frame parameter} @item min-width @@ -1810,17 +1828,18 @@ fit will be clipped by the window manager. @vindex fullscreen@r{, a frame parameter} @item fullscreen This parameter specifies whether to maximize the frame's width, height -or both. Its value can be @code{fullwidth}, @code{fullheight}, -@code{fullboth}, or @code{maximized}.@footnote{On PGTK frames, setting -the values @code{fullheight} and @code{fullwidth} has no effect.} A +or both. It has no meaning on a text terminal. Its value can be +@code{fullwidth}, @code{fullheight}, @code{fullboth}, or +@code{maximized}.@footnote{On PGTK frames, setting the values +@code{fullheight} and @code{fullwidth} has no effect.} A @dfn{fullwidth} frame is as wide as possible, a @dfn{fullheight} frame is as tall as possible, and a @dfn{fullboth} frame is both as wide and as tall as possible. A @dfn{maximized} frame is like a ``fullboth'' frame, except that it usually keeps its title bar and the buttons for -resizing and closing the frame. Also, maximized frames typically -avoid hiding any task bar or panels displayed on the desktop. A -``fullboth'' frame, on the other hand, usually omits the title bar and -occupies the entire available screen space. +resizing and closing the frame. Also, maximized frames typically avoid +hiding any task bar or panels displayed on the desktop. A ``fullboth'' +frame, on the other hand, usually omits the title bar and occupies the +entire available screen space. Full-height and full-width frames are more similar to maximized frames in this regard. However, these typically display an external @@ -1856,7 +1875,7 @@ file as, for example @end example This will give a new frame full height after typing in it @key{F11} for -the first time. +the first time. This parameter has no meaning on a text terminal. @vindex fit-frame-to-buffer-margins@r{, a frame parameter} @item fit-frame-to-buffer-margins @@ -1879,10 +1898,31 @@ Windows}). @cindex layout parameters of frames @cindex frame layout parameters - These frame parameters enable or disable various parts of the -frame, or control their sizes. + These frame parameters enable or disable various parts of the frame, +or control their sizes. Unless stated otherwise, these parameters have +no meaning on text terminals. @table @code +@vindex undecorated@r{, a frame parameter} +@item undecorated +If non-@code{nil}, then on a graphical system this frame's window-system +window is drawn without decorations, like the title, minimize/maximize +boxes and external borders. This usually means that the window cannot +be dragged, resized, iconified, maximized or deleted with the mouse. If +@code{nil}, the frame's window is usually drawn with all the elements +listed above unless their display has been suspended via window manager +settings. + +Under X, Emacs uses the Motif window manager hints to turn off +decorations. Some window managers may not honor these hints. + +NS builds consider the tool bar to be a decoration, and therefore hide +it on an undecorated frame. + +On a text terminal, this parameter, if non-@code{nil}, will make a child +frame show an outer border, which allows to resize that frame via mouse +dragging (@pxref{Mouse Dragging Parameters}). + @vindex border-width@r{, a frame parameter} @item border-width The width in pixels of the frame's outer border (@pxref{Frame Geometry}). @@ -1948,13 +1988,15 @@ to not draw bottom dividers. @vindex menu-bar-lines@r{, a frame parameter} @item menu-bar-lines The number of lines to allocate at the top of the frame for a menu bar -(@pxref{Menu Bar}). The default is one if Menu Bar mode is enabled -and zero otherwise. @xref{Menu Bars,,,emacs, The GNU Emacs Manual}. -For an external menu bar (@pxref{Frame Layout}), this value remains -unchanged even when the menu bar wraps to two or more lines. In that -case, the @code{menu-bar-size} value returned by @code{frame-geometry} -(@pxref{Frame Geometry}) enables you to establish whether the menu bar -actually occupies one or more lines. +(@pxref{Menu Bar}). The default is 1 if Menu Bar mode is enabled and 0 +otherwise. @xref{Menu Bars,,,emacs, The GNU Emacs Manual}. For an +external menu bar (@pxref{Frame Layout}), this value remains unchanged +even when the menu bar wraps to two or more lines. In that case, the +@code{menu-bar-size} value returned by @code{frame-geometry} +(@pxref{Frame Geometry}) can be used to establish whether the menu bar +actually occupies one or more lines. This parameter affects the +presence of a menu bar on the root frame (@pxref{Child Frames}) of a +text terminal too. On a text terminal the value may be only 0 or 1. @vindex tool-bar-lines@r{, a frame parameter} @item tool-bar-lines @@ -1976,7 +2018,8 @@ than Nextstep, and @code{left} or @code{right} on builds using GTK+. The number of lines to use for the tab bar (@pxref{Tab Bars,,,emacs, The GNU Emacs Manual}). The default is one if Tab Bar mode is enabled and zero otherwise. This value may change whenever the tab bar wraps -(@pxref{Frame Layout}). +(@pxref{Frame Layout}). This parameter affects the presence of a tab +bar on the root frame (@pxref{Child Frames}) of a text terminal too. @vindex line-spacing@r{, a frame parameter} @item line-spacing @@ -1991,11 +2034,11 @@ displayed by this frame. This is useful to eliminate such glyphs when fitting a frame to its buffer via @code{fit-frame-to-buffer} (@pxref{Resizing Windows}). This frame parameter has effect only for GUI frames shown on graphical displays, and only if the fringes are -disabled. This parameter is intended as a purely-presentation -feature, and in particular should not be used for frames where the -user can interactively insert text, or more generally where the cursor -is shown. A notable example of frames where this is used is tooltip -frames (@pxref{Tooltips}). +disabled. This parameter is intended as a purely-presentation feature, +and in particular should not be used for frames where the user can +interactively insert text, or more generally where the cursor is shown. +A notable example of frames where this is used is tooltip frames +(@pxref{Tooltips}). This parameter affects text terminals as well. @end table @@ -2058,6 +2101,12 @@ If non-@code{nil}, this frame's window is never split automatically. These parameters supply forms of interactions between different frames. @table @code +@vindex visibility@r{, a frame parameter} +@item visibility +The state of visibility of the frame. There are three possibilities: +@code{nil} for invisible, @code{t} for visible, and @code{icon} for +iconified. @xref{Visibility of Frames}. + @vindex parent-frame@r{, a frame parameter} @item parent-frame If non-@code{nil}, this means that this frame is a child frame @@ -2075,7 +2124,7 @@ Frames}. If non-@code{nil}, this parameter specifies the frame whose windows will be scrolled whenever the mouse wheel is scrolled with the mouse pointer hovering over this frame, see @ref{Mouse Commands,,, emacs, The GNU -Emacs Manual}. +Emacs Manual}. This parameter has no meaning on a text terminal. @vindex no-other-frame@r{, a frame parameter} @item no-other-frame @@ -2089,7 +2138,8 @@ Commands,,, emacs, The GNU Emacs Manual}. When this parameter specifies a function, that function will be called instead of the function specified by the variable @code{frame-auto-hide-function} when quitting the frame's only window -(@pxref{Quitting Windows}) and there are other frames left. +(@pxref{Quitting Windows}) and there are other frames left. This +parameter has not been yet implemented on text terminals. @vindex minibuffer-exit@r{, a frame parameter} @item minibuffer-exit @@ -2098,7 +2148,8 @@ frame invisible whenever the minibuffer (@pxref{Minibuffers}) is exited. Alternatively, it can specify the functions @code{iconify-frame} and @code{delete-frame}. This parameter is useful to make a child frame disappear automatically (similar to how Emacs deals with a window) when -exiting the minibuffer. +exiting the minibuffer. This parameter has not been yet implemented on +text terminals. @vindex keep-ratio@r{, a frame parameter} @item keep-ratio @@ -2120,7 +2171,8 @@ either @code{t} or @code{width-only}. The height ratio is preserved if the @sc{car} of the cell is either @code{t} or @code{height-only}. The left position ratio is preserved if the @sc{cdr} of the cell is either @code{t} or @code{left-only}. The top position ratio is preserved if -the @sc{cdr} of the cell is either @code{t} or @code{top-only}. +the @sc{cdr} of the cell is either @code{t} or @code{top-only}. This +parameter has not been yet implemented on text terminals. @end table @@ -2137,13 +2189,15 @@ or the mode line of its bottommost window. These parameters are mostly useful for child frames (@pxref{Child Frames}) that come without window manager decorations. If necessary, -they can be used for undecorated top-level frames as well. +they can be used for undecorated top-level frames as well. On text +terminals these parameters affect child frames only. @table @code @vindex drag-internal-border@r{, a frame parameter} @item drag-internal-border If non-@code{nil}, the frame can be resized by dragging its internal -borders, if present, with the mouse. +borders, if present, with the mouse. On text terminals, the decoration +of a child frame must be dragged instead. @vindex drag-with-header-line@r{, a frame parameter} @item drag-with-header-line @@ -2200,12 +2254,6 @@ interaction with the window manager or window system. They have no effect on text terminals. @table @code -@vindex visibility@r{, a frame parameter} -@item visibility -The state of visibility of the frame. There are three possibilities: -@code{nil} for invisible, @code{t} for visible, and @code{icon} for -iconified. @xref{Visibility of Frames}. - @vindex auto-raise@r{, a frame parameter} @item auto-raise If non-@code{nil}, Emacs automatically raises the frame when it is @@ -2304,21 +2352,6 @@ will not be able to receive any keyboard input from the user, not even if the user switches to the frame using the key combination @kbd{Alt-@key{TAB}}. -@vindex undecorated@r{, a frame parameter} -@item undecorated -If non-@code{nil}, this frame's window-system window is drawn without -decorations, like the title, minimize/maximize boxes and external -borders. This usually means that the window cannot be dragged, resized, -iconified, maximized or deleted with the mouse. If @code{nil}, the frame's -window is usually drawn with all the elements listed above unless their -display has been suspended via window manager settings. - -Under X, Emacs uses the Motif window manager hints to turn off -decorations. Some window managers may not honor these hints. - -NS builds consider the tool bar to be a decoration, and therefore hide -it on an undecorated frame. - @vindex override-redirect@r{, a frame parameter} @item override-redirect @cindex override redirect frames @@ -3240,33 +3273,49 @@ window managers refer to this state as @dfn{minimized} rather than @dfn{iconified}, but from Emacs's point of view they are the same thing). If a frame is invisible, it is not displayed at all. +On a text terminal a frame may be only visible or invisible. The top +frame (@pxref{Frames}) of a terminal cannot be invisible. + @cindex mapped frame @cindex unmapped frame - The concept of visibility is strongly related to that of (un-)mapped -frames. A frame (or, more precisely, its window-system window) is and -becomes @dfn{mapped} when it is displayed for the first time and -whenever it changes its state of visibility from @code{iconified} or -@code{invisible} to @code{visible}. Conversely, a frame is and becomes -@dfn{unmapped} whenever it changes its status from @code{visible} to -@code{iconified} or @code{invisible}. - - Visibility is meaningless on text terminals, since only the selected -frame is actually displayed in any case. + On graphical displays the concept of visibility is strongly related to +that of (un-)mapped frames. A frame (or, more precisely, its +window-system window) is and becomes @dfn{mapped} when it is displayed +for the first time and whenever it changes its state of visibility from +@code{iconified} or @code{invisible} to @code{visible}. Conversely, a +frame is and becomes @dfn{unmapped} whenever it changes its status from +@code{visible} to @code{iconified} or @code{invisible}. @defun frame-visible-p frame This function returns the visibility status of frame @var{frame}. The value is @code{t} if @var{frame} is visible, @code{nil} if it is invisible, and @code{icon} if it is iconified. -On a text terminal, all frames are considered visible for the -purposes of this function, even though only one frame is displayed. -@xref{Raising and Lowering}. +Note that the visibility status of a frame as reported by this function +(and by the @code{visibility} frame parameter, @ref{Frame Interaction +Parameters}) does not necessarily tell whether the frame is actually +seen on display. Any such frame can be partially or completely obscured +by other window manager windows on the same graphical terminal. Whether +that completely hides the frame may then depend on the transparency of +the obscuring window. A frame may also reside on a virtual desktop +different from the current one and can be seen only when making that +desktop the current one. One notable restriction holds for child frames +(@pxref{Child Frames}): A child frame can be seen if and only if this +function returns true for all its ancestors including the frame itself +and its root frame. + + On a text terminal only that terminal's top frame and its child frames +can be actually seen. Other root frames and their child frames cannot +be seen even if they are considered visible by this function. @end defun @deffn Command iconify-frame &optional frame This function iconifies frame @var{frame}. If you omit @var{frame}, it -iconifies the selected frame. This usually makes all child frames of -@var{frame} (and their descendants) invisible (@pxref{Child Frames}). +iconifies the selected frame. This will also remove any child frames +(@pxref{Child Frames}) of @var{frame} from display. On the top frame of +a text terminal this function has no effect. visible. If @var{frame} is +a child frame, the behavior depends on the value of the variable +@code{iconify-child-frame} (@pxref{Child Frames}). @end deffn @deffn Command make-frame-visible &optional frame @@ -3275,8 +3324,8 @@ it makes the selected frame visible. This does not raise the frame, but you can do that with @code{raise-frame} if you wish (@pxref{Raising and Lowering}). -Making a frame visible usually makes all its child frames (and their -descendants) visible as well (@pxref{Child Frames}). +Making a frame visible makes all its child frames with visible ancestors +appear on display again (@pxref{Child Frames}). @end deffn @deffn Command make-frame-invisible &optional frame force @@ -3286,11 +3335,19 @@ all child frames of @var{frame} (and their descendants) invisible too (@pxref{Child Frames}). Unless @var{force} is non-@code{nil}, this function refuses to make -@var{frame} invisible if all other frames are invisible. +@var{frame} invisible if all other frames are invisible. On a text +terminal this will make @var{frame} invisible if and only if it is a +child frame or at least one other non-child frame (@pxref{Child Frames}) +on that terminal exists. In the former case, if @var{frame} is +selected, it will select the first visible ancestor of @var{frame} +instead. In the latter case it will make another non-child frame on +that terminal visible and the new top frame (@pxref{Frames}) of that +terminal. In either case, it will remove all child frames with +@var{frame} as their ancestor from display. @end deffn The visibility status of a frame is also available as a frame -parameter. You can read or change it as such. @xref{Management +parameter. You can read or change it as such. @xref{Frame Interaction Parameters}. The user can also iconify and deiconify frames with the window manager. This happens below the level at which Emacs can exert any control, but Emacs does provide events that you can use to keep @@ -3336,14 +3393,16 @@ This function raises frame @var{frame} (default, the selected frame) above all other frames belonging to the same or a lower z-group as @var{frame}. If @var{frame} is invisible or iconified, this makes it visible. If @var{frame} is a child frame (@pxref{Child Frames}), this -raises @var{frame} above all other child frames of its parent. +raises @var{frame} above all other child frames of its parent. For +non-child frames on a text terminal this function has no effect. @end deffn @deffn Command lower-frame &optional frame This function lowers frame @var{frame} (default, the selected frame) below all other frames belonging to the same or a higher z-group as @var{frame}. If @var{frame} is a child frame (@pxref{Child Frames}), -this lowers @var{frame} below all other child frames of its parent. +this lowers @var{frame} below all other child frames of its parent. For +non-child frames on a text terminal this function has no effect. @end deffn @defun frame-restack frame1 frame2 &optional above @@ -3363,7 +3422,8 @@ true) that of @var{frame2}. Hence the position of @var{frame2} in its display's Z (stacking) order relative to all other frames excluding @var{frame1} remains unaltered. -Some window managers may refuse to restack windows. +Some window managers may refuse to restack windows. This function has +not been implemented on text terminals yet. @end defun Note that the effect of restacking will only hold as long as neither of @@ -3378,25 +3438,14 @@ function @code{frame-list-z-order} (@pxref{Finding All Frames}). @defopt minibuffer-auto-raise If this is non-@code{nil}, activation of the minibuffer raises the frame -that the minibuffer window is in. +that the minibuffer window is in. This function has no effect on text +terminals. @end defopt On window systems, you can also enable auto-raising (on frame selection) or auto-lowering (on frame deselection) using frame parameters. @xref{Management Parameters}. -@cindex top frame - The concept of raising and lowering frames also applies to text -terminal frames. On each text terminal, only the top frame is -displayed at any one time. - -@defun tty-top-frame &optional terminal -This function returns the top frame on @var{terminal}. @var{terminal} -should be a terminal object, a frame (meaning that frame's terminal), -or @code{nil} (meaning the selected frame's terminal). If it does not -refer to a text terminal, the return value is @code{nil}. -@end defun - @node Frame Configurations @section Frame Configurations @@ -3662,14 +3711,17 @@ Customizing the following option can be useful to tweak the behavior of This option tells Emacs how to proceed when it is asked to iconify a child frame. If it is @code{nil}, @code{iconify-frame} will do nothing when invoked on a child frame. If it is @code{iconify-top-level}, Emacs -will try to iconify the top-level frame that is the ancestor of this -child frame instead. If it is @code{make-invisible}, Emacs will try to -make this child frame invisible instead of iconifying it. +will try to iconify the root frame of this child frame instead. If it +is @code{make-invisible}, Emacs will try to make this child frame +invisible instead of iconifying it. Any other value means to try iconifying the child frame. Since such an attempt may not be honored by all window managers and can even lead to making the child frame unresponsive to user actions, the default is to -iconify the top level frame instead. +iconify the root frame instead. + +On a text terminal the only feasible values are @code{nil} and +@code{make-invisible}. @end defopt diff --git a/src/dispnew.c b/src/dispnew.c index 595f27e255a..d97dbfa6d1e 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -3358,8 +3358,26 @@ max_child_z_order (struct frame *parent) return z_order; } +/* Return true if and only if F and all its ancestors are visible. */ + +static bool +frame_ancestors_visible_p (struct frame *f) +{ + while (f) + { + if (!FRAME_VISIBLE_P (f)) + return false; + else + f = FRAME_PARENT_FRAME (f); + } + + return true; +} + /* Return a list of all frames having root frame ROOT. - If VISIBLE_ONLY is true, return only visible frames. */ + + If VISIBLE_ONLY is true, return only frames that are visible and have + visible ancestors only. */ static Lisp_Object frames_with_root (struct frame *root, bool visible_only) @@ -3369,8 +3387,9 @@ frames_with_root (struct frame *root, bool visible_only) FOR_EACH_FRAME (tail, frame) { struct frame *f = XFRAME (frame); + if (root_frame (f) == root - && (!visible_only || FRAME_VISIBLE_P (f))) + && (!visible_only || frame_ancestors_visible_p (f))) list = Fcons (frame, list); } return list; @@ -3431,7 +3450,7 @@ frames_in_reverse_z_order (struct frame *f, bool visible_only) return frames; } -/* Raise of lower frame F in z-order. If RAISE is true, raise F, else +/* Raise or lower frame F in z-order. If RAISE is true, raise F, else lower f. */ void diff --git a/src/frame.c b/src/frame.c index 3d181312c10..550fd336ff9 100644 --- a/src/frame.c +++ b/src/frame.c @@ -3294,22 +3294,29 @@ If omitted, FRAME defaults to the currently selected frame. On graphical displays, invisible frames are not updated and are usually not displayed at all, even in a window system's \"taskbar\". -Normally you may not make FRAME invisible if all other frames are invisible, -but if the second optional argument FORCE is non-nil, you may do so. - -This function has no effect on text terminal frames. Such frames are -always considered visible, whether or not they are currently being -displayed in the terminal. */) +Normally you may not make FRAME invisible if all other frames are +invisible, but if the second optional argument FORCE is non-nil, you may +do so. + +On a text terminal make FRAME invisible if and only FRAME is either a +child frame or another non-child frame can be found. In the former +case, if FRAME is the selected frame, select the first visible ancestor +of FRAME instead. In the latter case, if FRAME is the top frame of its +terminal, make another frame that terminal's top frame. */) (Lisp_Object frame, Lisp_Object force) { struct frame *f = decode_live_frame (frame); + XSETFRAME (frame, f); + if (NILP (force) && !other_frames (f, true, false)) error ("Attempt to make invisible the sole visible or iconified frame"); if (FRAME_WINDOW_P (f) && FRAME_TERMINAL (f)->frame_visible_invisible_hook) FRAME_TERMINAL (f)->frame_visible_invisible_hook (f, false); + SET_FRAME_VISIBLE (f, false); + if (is_tty_frame (f) && EQ (frame, selected_frame)) /* On a tty if FRAME is the selected frame, we have to select another frame instead. If FRAME is a child frame, use the first visible @@ -3321,8 +3328,6 @@ displayed in the terminal. */) : next_frame (frame, make_fixnum (0)), Qnil); - SET_FRAME_VISIBLE (f, false); - /* Make menu bar update for the Buffers and Frames menus. */ windows_or_buffers_changed = 16; @@ -3339,28 +3344,31 @@ for how to proceed. */) (Lisp_Object frame) { struct frame *f = decode_live_frame (frame); -#ifdef HAVE_WINDOW_SYSTEM - Lisp_Object parent = f->parent_frame; - if (!NILP (parent)) + if (FRAME_PARENT_FRAME (f)) { if (NILP (iconify_child_frame)) /* Do nothing. */ return Qnil; - else if (EQ (iconify_child_frame, Qiconify_top_level)) + else if (FRAME_WINDOW_P (f) + && EQ (iconify_child_frame, Qiconify_top_level)) { - /* Iconify top level frame instead (the default). */ - Ficonify_frame (parent); + /* Iconify root frame (the default). */ + Lisp_Object root; + + XSETFRAME (root, root_frame (f)); + Ficonify_frame (root); + return Qnil; } else if (EQ (iconify_child_frame, Qmake_invisible)) { - /* Make frame invisible instead. */ + /* Make frame invisible. */ Fmake_frame_invisible (frame, Qnil); + return Qnil; } } -#endif /* HAVE_WINDOW_SYSTEM */ if (FRAME_WINDOW_P (f) && FRAME_TERMINAL (f)->iconify_frame_hook) FRAME_TERMINAL (f)->iconify_frame_hook (f); @@ -4008,10 +4016,18 @@ list, but are otherwise ignored. */) change_frame_size (f, w, h, false, false, false); Lisp_Object visible = Fassq (Qvisibility, params); + if (CONSP (visible)) - SET_FRAME_VISIBLE (f, !NILP (Fcdr (visible))); + { + if (EQ (Fcdr (visible), Qicon) + && EQ (iconify_child_frame, Qmake_invisible)) + SET_FRAME_VISIBLE (f, false); + else + SET_FRAME_VISIBLE (f, !NILP (Fcdr (visible))); + } Lisp_Object no_special = Fassq (Qno_special_glyphs, params); + if (CONSP (no_special)) FRAME_NO_SPECIAL_GLYPHS (f) = !NILP (Fcdr (no_special)); } @@ -7287,15 +7303,15 @@ but will not be able to display text properties inside tooltip text. */); doc: /* How to handle iconification of child frames. This variable tells Emacs how to proceed when it is asked to iconify a child frame. If it is nil, `iconify-frame' will do nothing when invoked -on a child frame. If it is `iconify-top-level', Emacs will try to -iconify the top level frame associated with this child frame instead. -If it is `make-invisible', Emacs will try to make this child frame -invisible instead. - -Any other value means to try iconifying the child frame. Since such an -attempt is not honored by all window managers and may even lead to -making the child frame unresponsive to user actions, the default is to -iconify the top level frame instead. */); +on a child frame. If it is `iconify-top-level' and the child frame is +on a graphical terminal, Emacs will try to iconify the root frame of +this child frame. If it is `make-invisible', Emacs will try to make +this child frame invisible instead. + +Any other value means to try iconifying the child frame on a graphical +terminal. Since such an attempt is not honored by all window managers +and may even lead to making the child frame unresponsive to user +actions, the default is to iconify the root frame instead. */); iconify_child_frame = Qiconify_top_level; DEFVAR_LISP ("expose-hidden-buffer", expose_hidden_buffer, commit dc80a8f0509e37cc92f4f2f3a18c6732b163ffd4 Author: Stefan Kangas Date: Sat Mar 22 09:05:08 2025 +0100 ; Add index entry "code completion" to user manual * doc/emacs/programs.texi (Symbol Completion): Improve indexing by adding "code completion". This is the name that this feature goes by elsewhere, so users are likely to look for it. diff --git a/doc/emacs/programs.texi b/doc/emacs/programs.texi index 716bffc0ec6..e155092676b 100644 --- a/doc/emacs/programs.texi +++ b/doc/emacs/programs.texi @@ -1698,6 +1698,7 @@ but you can also complete symbol names in ordinary Emacs buffers. @findex completion-at-point@r{, in programming language modes} @cindex Lisp symbol completion @cindex completion (Lisp symbols) +@cindex code completion In most programming language modes, @kbd{C-M-i} (or @kbd{M-@key{TAB}}@footnote{ On graphical displays, the @kbd{M-@key{TAB}} key is usually reserved commit cf7fdd374ac96ddd53a026bda2aa2b7211e5ee70 Author: john muhl Date: Fri Mar 21 14:10:36 2025 -0500 ; Update version comment in 'lua-ts-mode' * lisp/progmodes/lua-ts-mode.el: Update comment for version 0.3.0 of tree-sitter-lua grammar. (Bug#77158) diff --git a/lisp/progmodes/lua-ts-mode.el b/lisp/progmodes/lua-ts-mode.el index 31a1a2b8aea..cec7eae879f 100644 --- a/lisp/progmodes/lua-ts-mode.el +++ b/lisp/progmodes/lua-ts-mode.el @@ -23,11 +23,11 @@ ;;; Tree-sitter language versions ;; -;; lua-ts-mode is known to work with the following languages and version: -;; - tree-sitter-lua: v0.2.0-2-g34e60e7 +;; lua-ts-mode has been tested with the following grammars and version: +;; - tree-sitter-lua: v0.3.0-1-gdb16e76 ;; ;; We try our best to make builtin modes work with latest grammar -;; versions, so a more recent grammar version has a good chance to work. +;; versions, so a more recent grammar has a good chance to work too. ;; Send us a bug report if it doesn't. ;;; Commentary: commit 0d9b14ed05701104d251495cf80fe47627a3b0ee Author: Eli Zaretskii Date: Sat Mar 22 09:04:48 2025 +0200 ; * doc/emacs/programs.texi (Program Modes): Add info about Eglot. diff --git a/doc/emacs/programs.texi b/doc/emacs/programs.texi index 85d3bb01012..716bffc0ec6 100644 --- a/doc/emacs/programs.texi +++ b/doc/emacs/programs.texi @@ -116,6 +116,16 @@ utilize the incremental parsing capabilities provided by @samp{tree-sitter}. These modes have @samp{-ts-} in their names; for example @code{c-ts-mode}, @code{python-ts-mode}, etc. +@cindex LSP +@cindex language server +@cindex Eglot + Major modes for programming languages can use services of +@dfn{language servers} via the facilities provided by the Eglot package. +Eglot implements LSP, the @dfn{language server protocol}, which allows +Emacs to receive language-specific information and services that enrich +and extend source code editing capabilities. @xref{Eglot Features,,, +eglot, Eglot: The Emacs LSP Client}. + @kindex DEL @r{(programming modes)} @findex backward-delete-char-untabify In most programming languages, indentation should vary from line to commit 0d654a10c90e8c2345a22384d503fbf340879ce7 Author: Eli Zaretskii Date: Sat Mar 22 08:39:20 2025 +0200 ; * etc/NEWS: Improve wording of a recent addition. diff --git a/etc/NEWS b/etc/NEWS index ed31222b1ae..cd2f974c892 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -186,8 +186,8 @@ new list of completions. The candidate is automatically deselected when the "*Completions*" buffer is hidden. --- -*** "*Completions*" is displayed faster with many completion candidates. -As always, if there are more completion candidates than can be displayed +*** "*Completions*" is now displayed faster when there are many candidates. +As before, if there are more completion candidates than can be displayed in the current frame, only a subset of the candidates is displayed. This process is now faster: only that subset of the candidates is actually inserted into "*Completions*" until you run a command which commit 580c050f6dd41eea718f9414efeabcae43cdb625 Author: Stefan Kangas Date: Sat Mar 22 07:01:14 2025 +0100 Make 'eieio-version' obsolete EIEIO used to be developed externally as part of CEDET, but that is no longer the case. It now has the same version as Emacs itself. https://sourceforge.net/p/cedet/git/ci/8aa920380f8178ed2514f06f13c403d80db16752/ * lisp/emacs-lisp/eieio.el: Change "Version" header to "Old-Version". (eieio-version): Make both the variable and the function obsolete in favor of 'emacs-version'. diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el index 0f029813f80..3d8a025644a 100644 --- a/lisp/emacs-lisp/eieio.el +++ b/lisp/emacs-lisp/eieio.el @@ -1,10 +1,10 @@ ;;; eieio.el --- Enhanced Implementation of Emacs Interpreted Objects -*- lexical-binding:t -*- ;;; or maybe Eric's Implementation of Emacs Interpreted Objects -;; Copyright (C) 1995-1996, 1998-2025 Free Software Foundation, Inc. +;; Copyright (C) 1995-2025 Free Software Foundation, Inc. ;; Author: Eric M. Ludlam -;; Version: 1.4 +;; Old-Version: 1.4 ;; Keywords: OO, lisp ;; This file is part of GNU Emacs. @@ -44,14 +44,6 @@ ;;; Code: -(defvar eieio-version "1.4" - "Current version of EIEIO.") - -(defun eieio-version () - "Display the current version of EIEIO." - (interactive) - (message eieio-version)) - (require 'eieio-core) (eval-when-compile (require 'subr-x)) @@ -1004,6 +996,19 @@ of `eq'." (error "EIEIO: `change-class' is unimplemented")) (define-obsolete-function-alias 'change-class #'eieio-change-class "26.1") + +;;; Obsolete +;; +(make-obsolete-variable 'eieio-version 'emacs-version "31.1") +(defvar eieio-version "1.4" + "Current version of EIEIO.") + +(defun eieio-version () + "Display the current version of EIEIO." + (declare (obsolete emacs-version "31.1")) + (interactive) + (message eieio-version)) + (provide 'eieio) ;;; eieio.el ends here commit f224475f5784fe40521f066214913212c79dc429 Author: Sean Whitton Date: Fri Mar 14 15:54:13 2025 +0800 ; admin/notes/spelling: Notes on abbreviation of "Emacs Lisp" diff --git a/admin/notes/spelling b/admin/notes/spelling index e0cf3998ace..a6441c181f6 100644 --- a/admin/notes/spelling +++ b/admin/notes/spelling @@ -15,3 +15,8 @@ Re "behavior" vs "behaviour", etc. consistency. Leave obsolete aliases, as always. - https://lists.gnu.org/r/emacs-devel/2005-06/msg00489.html + +- In comments, docstrings and other documentation that forms parts of + Emacs itself, prefer not to abbreviate "Emacs Lisp". + Say just "Lisp" whenever the context allows. + If you must abbreviate "Emacs Lisp", capitalize it thus: "Elisp". commit 2fcf6b40869f085b32876206179bf1dfe2dc2c93 Author: Daniel Colascione Date: Fri Mar 21 21:09:19 2025 -0400 xref: error -> user-error: reduce debug-on-error annoyance * lisp/progmodes/xref.el (xref--next-error-function): Use user-error instead of error. diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el index f37053a6327..addd647d99a 100644 --- a/lisp/progmodes/xref.el +++ b/lisp/progmodes/xref.el @@ -1080,7 +1080,7 @@ This function is used as a value for `add-log-current-defun-function'." (let ((xref-current-item xref)) (xref--show-location (xref-item-location xref) t))) (t - (error "No %s xref" (if backward "previous" "next")))))) + (user-error "No %s xref" (if backward "previous" "next")))))) (defvar xref--button-map (let ((map (make-sparse-keymap))) commit e5ee1d2a74c6a0989c863c3c6c06eba31efaecb3 Author: Daniel Colascione Date: Fri Mar 21 19:46:08 2025 -0400 Adapt ediff to nonstandard layouts Make ediff cope with having some of its windows (especially the control window) not shown by a custom ediff-window-setup-function. Modernize relevant adjacent code. After this change, one can write a custom ediff-window-setup-function that doesn't show the control window. * doc/misc/ediff.texi (Notes on Heavy-duty Customization): Refine language to explain that the window setup function doesn't have to show all windows. * lisp/vc/ediff-util.el (ediff-select-control-window-on-setup): New variable. (ediff-setup, ediff-recenter, ediff-recenter-one-window) (ediff-recenter-ancestor, ediff-toggle-read-only) (ediff-operate-on-windows, ediff-jump-to-difference-at-point) (ediff-default-suspend-function) (ediff-clone-buffer-for-region-comparison) (ediff-clone-buffer-for-window-comparison): Modernize control flow; select only windows that exist. * lisp/vc/ediff-wind.el (ediff-with-live-window): New convenience macro. (ediff-window-setup-function): Explain relaxed contract. diff --git a/doc/misc/ediff.texi b/doc/misc/ediff.texi index 26a0ee433d0..73f751f3a4b 100644 --- a/doc/misc/ediff.texi +++ b/doc/misc/ediff.texi @@ -2399,10 +2399,12 @@ The window displaying buffer A@. If buffer A is not visible, this variable is @code{nil} or it may be a dead window. @item ediff-window-B -The window displaying buffer B. +The window displaying buffer B. If buffer B is not visible, this variable +is @code{nil} or it may be a dead window. @item ediff-window-C -The window displaying buffer C, if any. +The window displaying buffer C, if any. If buffer C is not visible, +this variable is @code{nil} or it may be a dead window. @item ediff-control-frame A dedicated frame displaying the control buffer, if it exists. It is diff --git a/etc/NEWS b/etc/NEWS index 010b7cbee85..ed31222b1ae 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1202,6 +1202,14 @@ changes when supplied with a universal prefix argument via 'C-u': - 'C-u c a' copies all changes from buffer C to buffer A. - 'C-u c b' copies all changes from buffer C to buffer B. ++++ +*** Ediff now supports more flexible custom window layouts +Custom implementations of 'ediff-window-setup-function' no +longer need to display *all* ediff windows. Any of the A, B, C, +and control windows can be left undisplayed and the corresponding +variable set to nil. This change enables custom layouts without +a control panel window. + ** Dired +++ diff --git a/lisp/vc/ediff-util.el b/lisp/vc/ediff-util.el index e07f2c0b2f6..6446e0a945b 100644 --- a/lisp/vc/ediff-util.el +++ b/lisp/vc/ediff-util.el @@ -36,6 +36,15 @@ (require 'ediff-diff) (require 'ediff-merg) +(eval-when-compile + (require 'cl-lib)) + +(ediff-defvar-local ediff-select-control-window-on-setup t + "Select the control window after window setup. +`t' for compatibility. Custom `ediff-window-setup-function' +implementations may want to set it to `nil' to fully control +window setup.") + ;;; Functions @@ -472,20 +481,20 @@ to invocation.") (ediff-get-value-according-to-buffer-type 'C ediff-narrow-bounds)))) ;; position point in buf A - (save-excursion - (select-window ediff-window-A) - (goto-char shift-A)) + (when (window-live-p ediff-window-A) + (with-selected-window ediff-window-A + (goto-char shift-A))) ;; position point in buf B - (save-excursion - (select-window ediff-window-B) - (goto-char shift-B)) - (if ediff-3way-job - (save-excursion - (select-window ediff-window-C) - (goto-char shift-C))) - ) - - (select-window ediff-control-window) + (when (window-live-p ediff-window-B) + (with-selected-window ediff-window-B + (goto-char shift-B))) + (if (and ediff-3way-job (window-live-p ediff-window-C)) + (with-selected-window ediff-window-C + (goto-char shift-C)))) + + (when (and ediff-select-control-window-on-setup + (window-live-p ediff-control-window)) + (select-window ediff-control-window)) (ediff-visible-region) (mapc #'funcall startup-hooks) @@ -776,16 +785,19 @@ buffers." (or (not ediff-3way-job) (ediff-buffer-live-p ediff-buffer-C))) (progn - (or no-rehighlight + (or no-rehighlight (ediff-select-difference ediff-current-difference)) - (ediff-recenter-one-window 'A) - (ediff-recenter-one-window 'B) - (if ediff-3way-job - (ediff-recenter-one-window 'C)) + (save-current-buffer + (ediff-recenter-one-window 'A)) + (save-current-buffer + (ediff-recenter-one-window 'B)) + (if ediff-3way-job + (save-current-buffer + (ediff-recenter-one-window 'C))) - (ediff-with-current-buffer control-buf - (ediff-recenter-ancestor) ; check if ancestor is alive + (ediff-with-current-buffer control-buf + (ediff-recenter-ancestor) ; check if ancestor is alive (if (and (ediff-multiframe-setup-p) (not ediff-use-long-help-message) @@ -801,13 +813,11 @@ buffers." (ediff-with-current-buffer control-buf (ediff-refresh-mode-lines)) )) -;; this function returns to the window it was called from -;; (which was the control window) +;; this function does not change current window (defun ediff-recenter-one-window (buf-type) (if (ediff-valid-difference-p) ;; context must be saved before switching to windows A/B/C - (let* ((ctl-wind (selected-window)) - (shift (ediff-overlay-start + (let* ((shift (ediff-overlay-start (ediff-get-value-according-to-buffer-type buf-type ediff-narrow-bounds))) (job-name ediff-job-name) @@ -817,20 +827,16 @@ buffers." (window (if (window-live-p (symbol-value window-name)) (symbol-value window-name)))) - (if (and window ediff-windows-job) + (when (and window ediff-windows-job) (set-window-start window shift)) - (if window - (progn - (select-window window) - (deactivate-mark) - (ediff-position-region + (when window + (with-selected-window window + (deactivate-mark) + (ediff-position-region (ediff-get-diff-posn buf-type 'beg nil control-buf) (ediff-get-diff-posn buf-type 'end nil control-buf) (ediff-get-diff-posn buf-type 'beg nil control-buf) - job-name - ))) - (select-window ctl-wind) - ))) + job-name)))))) (defun ediff-recenter-ancestor () ;; do half-hearted job by recentering the ancestor buffer, if it is alive and @@ -838,21 +844,17 @@ buffers." (if (and (ediff-buffer-live-p ediff-ancestor-buffer) (ediff-valid-difference-p)) (let ((window (ediff-get-visible-buffer-window ediff-ancestor-buffer)) - (ctl-wind (selected-window)) (job-name ediff-job-name) (ctl-buf ediff-control-buffer)) (ediff-with-current-buffer ediff-ancestor-buffer (goto-char (ediff-get-diff-posn 'Ancestor 'beg nil ctl-buf)) - (if window - (progn - (select-window window) - (ediff-position-region + (when (window-live-p window) + (with-selected-window window + (ediff-position-region (ediff-get-diff-posn 'Ancestor 'beg nil ctl-buf) (ediff-get-diff-posn 'Ancestor 'end nil ctl-buf) (ediff-get-diff-posn 'Ancestor 'beg nil ctl-buf) - job-name)))) - (select-window ctl-wind) - ))) + job-name))))))) ;; This will have to be refined for 3way jobs @@ -1064,10 +1066,9 @@ of the current buffer." (sit-for 3)))) ; let the user see the warning (if (and toggle-ro-cmd (string-match "read-only-mode" (symbol-name toggle-ro-cmd))) - (save-excursion - (save-window-excursion - (select-window (ediff-get-visible-buffer-window buf)) - (command-execute toggle-ro-cmd))) + (save-window-excursion + (ediff-with-live-window (ediff-get-visible-buffer-window buf) + (command-execute toggle-ro-cmd))) (user-error "Don't know how to toggle read-only in buffer %S" buf)) ;; Check if we made the current buffer updatable, but its file is RO. @@ -1413,8 +1414,8 @@ Used in ediff-windows/regions only." (defun ediff-operate-on-windows (operation arg) ;; make sure windows aren't dead - (if (not (and (window-live-p ediff-window-A) (window-live-p ediff-window-B))) - (ediff-recenter 'no-rehighlight)) + (unless (and (window-live-p ediff-window-A) (window-live-p ediff-window-B)) + (ediff-recenter 'no-rehighlight)) (if (not (and (ediff-buffer-live-p ediff-buffer-A) (ediff-buffer-live-p ediff-buffer-B) (or (not ediff-3way-job) (ediff-buffer-live-p ediff-buffer-C)) @@ -1424,8 +1425,7 @@ Used in ediff-windows/regions only." )) (error ediff-KILLED-VITAL-BUFFER)) - (let* ((wind (selected-window)) - (wind-A ediff-window-A) + (let* ((wind-A ediff-window-A) (wind-B ediff-window-B) (wind-C ediff-window-C) (wind-Anc ediff-window-Ancestor) @@ -1438,26 +1438,16 @@ Used in ediff-windows/regions only." (coefAnc (if with-Ancestor (ediff-get-region-size-coefficient 'Ancestor operation)))) - (select-window wind-A) - (condition-case nil - (funcall operation (round (* coefA arg))) - (error)) - (select-window wind-B) - (condition-case nil - (funcall operation (round (* coefB arg))) - (error)) - (if three-way - (progn - (select-window wind-C) - (condition-case nil - (funcall operation (round (* coefC arg))) - (error)))) + (ediff-with-live-window wind-A + (ignore-errors (funcall operation (round (* coefA arg))))) + (ediff-with-live-window wind-B + (ignore-errors (funcall operation (round (* coefB arg))))) + (when three-way + (ediff-with-live-window wind-C + (ignore-errors (funcall operation (round (* coefC arg)))))) (when with-Ancestor - (select-window wind-Anc) - (condition-case nil - (funcall operation (round (* coefAnc arg))) - (error))) - (select-window wind))) + (ediff-with-live-window wind-Anc + (ignore-errors (funcall operation (round (* coefAnc arg)))))))) (defun ediff-scroll-vertically (&optional arg) "Vertically scroll buffers A, B (and C if appropriate). @@ -1817,44 +1807,29 @@ current point position in the specified buffer." (beg (if past-last-diff (ediff-with-current-buffer buffer (point-max)) (ediff-get-diff-posn buf-type 'beg (1- diff-no)))) - ctl-wind wind-A wind-B wind-C + wind-A wind-B wind-C shift) (if past-last-diff (ediff-jump-to-difference -1) (ediff-jump-to-difference diff-no)) - (setq ctl-wind (selected-window) - wind-A ediff-window-A + (setq wind-A ediff-window-A wind-B ediff-window-B wind-C ediff-window-C) (if arg - (progn - (ediff-with-current-buffer buffer - (setq shift (- beg pt))) - (select-window wind-A) - (if past-last-diff (goto-char (point-max))) - (condition-case nil - (backward-char shift) ; noerror, if beginning of buffer - (error)) - (recenter) - (select-window wind-B) - (if past-last-diff (goto-char (point-max))) - (condition-case nil - (backward-char shift) ; noerror, if beginning of buffer - (error)) - (recenter) - (if (window-live-p wind-C) - (progn - (select-window wind-C) - (if past-last-diff (goto-char (point-max))) - (condition-case nil - (backward-char shift) ; noerror, if beginning of buffer - (error)) - (recenter) - )) - (select-window ctl-wind) - )) - )) - + (save-selected-window + (setq shift (- beg pt)) + (ediff-with-live-window wind-A + (when past-last-diff (goto-char (point-max))) + (ignore-errors (backward-char shift)) + (recenter)) + (ediff-with-live-window wind-B + (when past-last-diff (goto-char (point-max))) + (ignore-errors (backward-char shift)) + (recenter)) + (ediff-with-live-window wind-C + (when past-last-diff (goto-char (point-max))) + (ignore-errors (backward-char shift)) + (recenter)))))) ;; find region most related to the current point position (or POS, if given) ;; returns diff number as seen by the user (i.e., 1+ the internal @@ -2725,10 +2700,7 @@ only if this merge job is part of a group, i.e., was invoked from within (let* ((buf-A ediff-buffer-A) (buf-B ediff-buffer-B) (buf-C ediff-buffer-C) - (buf-A-wind (ediff-get-visible-buffer-window buf-A)) - (buf-B-wind (ediff-get-visible-buffer-window buf-B)) - (buf-C-wind (ediff-get-visible-buffer-window buf-C)) - (buf-patch (if (boundp 'ediff-patchbufer) ediff-patchbufer nil)) + (buf-patch (if (boundp 'ediff-patchbufer) ediff-patchbufer nil)) (buf-patch-diag (if (boundp 'ediff-patch-diagnostics) ediff-patch-diagnostics nil)) (buf-err ediff-error-buffer) @@ -2746,35 +2718,18 @@ only if this merge job is part of a group, i.e., was invoked from within (if buf-fine-diff (bury-buffer buf-fine-diff)) (if buf-patch (bury-buffer buf-patch)) (if buf-patch-diag (bury-buffer buf-patch-diag)) - (if (window-live-p buf-A-wind) - (progn - (select-window buf-A-wind) - (delete-other-windows) - (bury-buffer)) - (if (ediff-buffer-live-p buf-A) - (progn - (set-buffer buf-A) - (bury-buffer)))) - (if (window-live-p buf-B-wind) - (progn - (select-window buf-B-wind) - (delete-other-windows) - (bury-buffer)) - (if (ediff-buffer-live-p buf-B) - (progn - (set-buffer buf-B) - (bury-buffer)))) - (if (window-live-p buf-C-wind) - (progn - (select-window buf-C-wind) - (delete-other-windows) - (bury-buffer)) - (if (ediff-buffer-live-p buf-C) - (progn - (set-buffer buf-C) - (bury-buffer)))) - )) - + (cl-loop + with buffers = (list buf-A buf-B buf-C) + with windows = (mapcar #'ediff-get-visible-buffer-window buffers) + for buffer in buffers + for window in windows + do (cond ((window-live-p window) + (select-window window) + (delete-other-windows) + (bury-buffer)) + (buffer + (set-buffer buffer) + (bury-buffer)))))) (defun ediff-suspend () "Suspend Ediff. @@ -3274,8 +3229,9 @@ Without an argument, it saves customized diff argument, if available (setq ediff-temp-indirect-buffer t)) (pop-to-buffer cloned-buff) (setq wind (ediff-get-visible-buffer-window cloned-buff)) - (select-window wind) - (delete-other-windows) + (when (window-live-p wind) + (select-window wind) + (delete-other-windows)) (or (mark) (push-mark)) (setq mark-active 'ediff-util) (setq-local transient-mark-mode t) @@ -3310,7 +3266,8 @@ Without an argument, it saves customized diff argument, if available (let ((cloned-buff (ediff-make-cloned-buffer buff region-name))) (ediff-with-current-buffer cloned-buff (setq ediff-temp-indirect-buffer t)) - (set-window-buffer wind cloned-buff) + (when (window-live-p wind) + (set-window-buffer wind cloned-buff)) cloned-buff)) (defun ediff-buffer-type (buffer) diff --git a/lisp/vc/ediff-wind.el b/lisp/vc/ediff-wind.el index 4ac21cb4136..aefa17de2c6 100644 --- a/lisp/vc/ediff-wind.el +++ b/lisp/vc/ediff-wind.el @@ -53,16 +53,21 @@ frame. If you don't like any of the two provided functions, write your own one. The basic guidelines: - 1. It should leave the control buffer current and the control window - selected. + 1. It should leave the control buffer current and, if showing, + the control window selected if showing these windows. 2. It should set `ediff-window-A', `ediff-window-B', `ediff-window-C', and `ediff-control-window' to contain window objects that display - the corresponding buffers. + the corresponding buffers or `nil' if the corresponding window + is not shown. 3. It should accept the following arguments: buffer-A, buffer-B, buffer-C, control-buffer Buffer C may not be used in jobs that compare only two buffers. If you plan to do something fancy, take a close look at how the two -provided functions are written." +provided functions are written. + +Set `ediff-select-control-window-on-setup' to nil to prevent the window +`ediff-control-window' being selected by ediff after this +function returns. " :type '(choice (const :tag "Choose Automatically" ediff-setup-windows-default) (const :tag "Multi Frame" ediff-setup-windows-multiframe) (const :tag "Single Frame" ediff-setup-windows-plain) @@ -247,6 +252,17 @@ keyboard input to go into icons." ;;; Functions +(defmacro ediff-with-live-window (window &rest body) + "Like `with-selected-window' but only if WINDOW is live. +If WINDOW is not live (or not a window) do nothing and don't evaluate +BODY, instead returning nil." + (declare (indent 1) (debug (form body))) + (let ((w (gensym "window"))) + `(let ((,w ,window)) + (when (window-live-p ,w) + (with-selected-window ,w + ,@body))))) + (defun ediff-get-window-by-clicking (_wind _prev-wind wind-number) (let (event) (message commit b21636580bed822bd9fb8bb84014311fa9b4c071 Author: Spencer Baugh Date: Fri Mar 21 17:24:50 2025 -0400 minibuffer.el: Fix warnings and coding style in last change * lisp/minibuffer.el: Cut lines to fit into 80 columns. (completion--insert-strings): Simplify `if` to `or`. (completion--insert-horizontal, completion--insert-one-column): Fix warning about used var starting with `_`. Avoid `apply-partially`. diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index 47b152ed35d..8fba0b88b20 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -2256,7 +2256,7 @@ Runs of equal candidate strings are eliminated. GROUP-FUN is a ;; Windows can't show less than 3 lines anyway. (max 1 (/ (length strings) 2)))) (colwidth (/ wwidth columns)) - (lines (if completions-max-height completions-max-height (frame-height)))) + (lines (or completions-max-height (frame-height)))) (unless (or tab-stop-list (null completion-tab-width) (zerop (mod colwidth completion-tab-width))) ;; Align to tab positions for the case @@ -2264,15 +2264,17 @@ Runs of equal candidate strings are eliminated. GROUP-FUN is a (setq colwidth (- colwidth (mod colwidth completion-tab-width)))) (let ((completions-continuation (catch 'completions-truncated - (funcall (intern (format "completion--insert-%s" completions-format)) + (funcall (intern (format "completion--insert-%s" + completions-format)) strings group-fun length wwidth colwidth columns lines) nil))) (when completions-continuation ;; If there's a bug which causes us to not insert the remaining ;; completions automatically, the user can at least press this button. (setq-local completions--lazy-insert-button - (insert-button "[Completions truncated, click here to insert the rest.]" - 'action #'completion--lazy-insert-strings)) + (insert-button + "[Completions truncated, click here to insert the rest.]" + 'action #'completion--lazy-insert-strings)) (button-put completions--lazy-insert-button 'completions-continuation completions-continuation)))))) @@ -2282,7 +2284,8 @@ Runs of equal candidate strings are eliminated. GROUP-FUN is a (let ((completion-lazy-hilit t) (standard-output (current-buffer)) (inhibit-read-only t) - (completions-continuation (button-get button 'completions-continuation))) + (completions-continuation + (button-get button 'completions-continuation))) (save-excursion (goto-char (button-start button)) (delete-region (point) (button-end button)) @@ -2291,7 +2294,7 @@ Runs of equal candidate strings are eliminated. GROUP-FUN is a (defun completion--insert-horizontal (strings group-fun length wwidth - colwidth _columns lines + colwidth columns lines &optional last-title) (let ((column 0) (first t) @@ -2306,26 +2309,28 @@ Runs of equal candidate strings are eliminated. GROUP-FUN is a (unless (equal title last-title) (setq last-title title) (when title - (insert (if first "" "\n") (format completions-group-format title) "\n") + (insert (if first "" "\n") + (format completions-group-format title) "\n") (setq column 0 first t))))) (unless first ;; FIXME: `string-width' doesn't pay attention to ;; `display' properties. - (if (< wwidth (+ column (max colwidth - (if (consp str) - (apply #'+ (mapcar #'string-width str)) - (string-width str))))) + (if (< wwidth (+ column + (max colwidth + (if (consp str) + (apply #'+ (mapcar #'string-width str)) + (string-width str))))) ;; No space for `str' at point, move to next line. (progn (insert "\n") (when (and lines (> (line-number-at-pos) lines)) (throw 'completions-truncated - (apply-partially - #'completion--insert-horizontal - ;; Add str back, since we haven't inserted it yet. - (cons str strings) group-fun length wwidth colwidth _columns nil - last-title))) + (lambda () + (completion--insert-horizontal + ;; Add str back, since we haven't inserted it yet. + (cons str strings) group-fun length wwidth colwidth + columns nil last-title)))) (setq column 0)) (insert " \t") ;; Leave the space unpropertized so that in the case we're @@ -2397,8 +2402,8 @@ Runs of equal candidate strings are eliminated. GROUP-FUN is a (insert "\n")) (setq row (1+ row))))))) -(defun completion--insert-one-column (strings group-fun _length _wwidth _colwidth _columns lines - &optional last-title) +(defun completion--insert-one-column ( strings group-fun length wwidth colwidth + columns lines &optional last-title) (let ((last-string nil) str) (while strings @@ -2415,10 +2420,10 @@ Runs of equal candidate strings are eliminated. GROUP-FUN is a (insert "\n") (when (and lines (> (line-number-at-pos) lines)) (throw 'completions-truncated - (apply-partially - #'completion--insert-one-column - strings group-fun _length _wwidth _colwidth _columns nil - last-title))))) + (lambda () + (completion--insert-one-column + strings group-fun length wwidth colwidth columns nil + last-title)))))) (delete-char -1))) (defun completion--insert (str group-fun) commit b12a3a03ae134ab710170b43262fe8db13364727 Author: Spencer Baugh Date: Sun Feb 16 20:16:19 2025 -0500 Lazily highlight and insert candidates in *Completions* From profiling, the main bottleneck in completion over large completion sets is display-completion-list, when there are many available candidates. For example, in my large monorepo, when completing over the 589196 files or the 73897 branches, even with the candidates narrowed down by typing some prefix to complete, TAB (when it shows *Completions*) or ? is slow, mostly in display-completion-list. However, rendering all the completion candidates is unnecessary if the *Completions* window is never scrolled to see those candiates. By eagerly inserting only some candidates and lazily highlighting and inserting the remaining candidates only when necessary, performance is much improved. * lisp/minibuffer.el (completion--insert-strings): Insert completions lazily. (bug#74561) (completions--lazy-insert-button): Add. (completion--insert-horizontal, completion--insert-one-column): Throw a continuation when enough lines of completions are inserted. (completion--insert-vertical): Add ignored lines argument. (minibuffer-completion-help): Set completion-lazy-hilit. (with-minibuffer-completions-window): Call completion--lazy-insert-strings. (with-minibuffer-completions-window): * lisp/simple.el (completion-setup-function): Preserve buffer-locals required for lazy completion insertion. (switch-to-completions): Call completion--lazy-insert-strings. * etc/NEWS: Announce. diff --git a/etc/NEWS b/etc/NEWS index cc63d03eafe..010b7cbee85 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -185,6 +185,16 @@ will still be on that candidate after "*Completions*" is updated with a new list of completions. The candidate is automatically deselected when the "*Completions*" buffer is hidden. +--- +*** "*Completions*" is displayed faster with many completion candidates. +As always, if there are more completion candidates than can be displayed +in the current frame, only a subset of the candidates is displayed. +This process is now faster: only that subset of the candidates is +actually inserted into "*Completions*" until you run a command which +interacts with the text of the "*Completions*" buffer. This +optimization only applies when 'completions-format' is 'horizontal' or +'one-column'. + --- *** New user option 'crm-prompt' for 'completing-read-multiple'. This option configures the prompt format of 'completing-read-multiple'. diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index 66b5e6b4d19..47b152ed35d 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -2232,6 +2232,8 @@ If this is nil, no heading line will be shown." (string :tag "Format string for heading line")) :version "29.1") +(defvar-local completions--lazy-insert-button nil) + (defun completion--insert-strings (strings &optional group-fun) "Insert a list of STRINGS into the current buffer. The candidate strings are inserted into the buffer depending on the @@ -2253,23 +2255,50 @@ Runs of equal candidate strings are eliminated. GROUP-FUN is a ;; Don't allocate more columns than we can fill. ;; Windows can't show less than 3 lines anyway. (max 1 (/ (length strings) 2)))) - (colwidth (/ wwidth columns))) + (colwidth (/ wwidth columns)) + (lines (if completions-max-height completions-max-height (frame-height)))) (unless (or tab-stop-list (null completion-tab-width) (zerop (mod colwidth completion-tab-width))) ;; Align to tab positions for the case ;; when the caller uses tabs inside prefix. (setq colwidth (- colwidth (mod colwidth completion-tab-width)))) - (funcall (intern (format "completion--insert-%s" completions-format)) - strings group-fun length wwidth colwidth columns)))) + (let ((completions-continuation + (catch 'completions-truncated + (funcall (intern (format "completion--insert-%s" completions-format)) + strings group-fun length wwidth colwidth columns lines) + nil))) + (when completions-continuation + ;; If there's a bug which causes us to not insert the remaining + ;; completions automatically, the user can at least press this button. + (setq-local completions--lazy-insert-button + (insert-button "[Completions truncated, click here to insert the rest.]" + 'action #'completion--lazy-insert-strings)) + (button-put completions--lazy-insert-button + 'completions-continuation completions-continuation)))))) + +(defun completion--lazy-insert-strings (&optional button) + (setq button (or button completions--lazy-insert-button)) + (when button + (let ((completion-lazy-hilit t) + (standard-output (current-buffer)) + (inhibit-read-only t) + (completions-continuation (button-get button 'completions-continuation))) + (save-excursion + (goto-char (button-start button)) + (delete-region (point) (button-end button)) + (setq-local completions--lazy-insert-button nil) + (funcall completions-continuation))))) (defun completion--insert-horizontal (strings group-fun length wwidth - colwidth _columns) + colwidth _columns lines + &optional last-title) (let ((column 0) (first t) - (last-title nil) - (last-string nil)) - (dolist (str strings) + (last-string nil) + str) + (while strings + (setq str (pop strings)) (unless (equal last-string str) ; Remove (consecutive) duplicates. (setq last-string str) (when group-fun @@ -2288,7 +2317,16 @@ Runs of equal candidate strings are eliminated. GROUP-FUN is a (apply #'+ (mapcar #'string-width str)) (string-width str))))) ;; No space for `str' at point, move to next line. - (progn (insert "\n") (setq column 0)) + (progn + (insert "\n") + (when (and lines (> (line-number-at-pos) lines)) + (throw 'completions-truncated + (apply-partially + #'completion--insert-horizontal + ;; Add str back, since we haven't inserted it yet. + (cons str strings) group-fun length wwidth colwidth _columns nil + last-title))) + (setq column 0)) (insert " \t") ;; Leave the space unpropertized so that in the case we're ;; already past the goal column, there is still @@ -2309,7 +2347,7 @@ Runs of equal candidate strings are eliminated. GROUP-FUN is a (defun completion--insert-vertical (strings group-fun _length _wwidth - colwidth columns) + colwidth columns _lines) (while strings (let ((group nil) (column 0) @@ -2359,9 +2397,12 @@ Runs of equal candidate strings are eliminated. GROUP-FUN is a (insert "\n")) (setq row (1+ row))))))) -(defun completion--insert-one-column (strings group-fun &rest _) - (let ((last-title nil) (last-string nil)) - (dolist (str strings) +(defun completion--insert-one-column (strings group-fun _length _wwidth _colwidth _columns lines + &optional last-title) + (let ((last-string nil) + str) + (while strings + (setq str (pop strings)) (unless (equal last-string str) ; Remove (consecutive) duplicates. (setq last-string str) (when group-fun @@ -2371,14 +2412,20 @@ Runs of equal candidate strings are eliminated. GROUP-FUN is a (when title (insert (format completions-group-format title) "\n"))))) (completion--insert str group-fun) - (insert "\n"))) + (insert "\n") + (when (and lines (> (line-number-at-pos) lines)) + (throw 'completions-truncated + (apply-partially + #'completion--insert-one-column + strings group-fun _length _wwidth _colwidth _columns nil + last-title))))) (delete-char -1))) (defun completion--insert (str group-fun) (if (not (consp str)) (add-text-properties (point) - (progn + (let ((str (completion-lazy-hilit str))) (insert (if group-fun (funcall group-fun str 'transform) @@ -2622,6 +2669,7 @@ The candidate will still be chosen by `choose-completion' unless (end (or end (point-max))) (string (buffer-substring start end)) (md (completion--field-metadata start)) + (completion-lazy-hilit t) (completions (completion-all-completions string minibuffer-completion-table @@ -4966,6 +5014,7 @@ and execute the forms." (get-buffer-window "*Completions*" 0))))) (when window (with-selected-window window + (completion--lazy-insert-strings) ,@body)))) (defcustom minibuffer-completion-auto-choose t diff --git a/lisp/simple.el b/lisp/simple.el index 579b9ee9118..e6577ffd646 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -10473,10 +10473,12 @@ Called from `temp-buffer-show-hook'." (buffer-substring (minibuffer-prompt-end) (point))))))) (with-current-buffer standard-output (let ((base-position completion-base-position) - (insert-fun completion-list-insert-choice-function)) + (insert-fun completion-list-insert-choice-function) + (lazy-button completions--lazy-insert-button)) (completion-list-mode) (when completions-highlight-face (setq-local cursor-face-highlight-nonselected-window t)) + (setq-local completions--lazy-insert-button lazy-button) (setq-local completion-base-position base-position) (setq-local completion-list-insert-choice-function insert-fun)) (setq-local completion-reference-buffer mainbuf) @@ -10522,6 +10524,7 @@ to move point between completions.\n\n"))))))) (progn (minibuffer-completion-help) (get-buffer-window "*Completions*" 0))))) (select-window window) + (completion--lazy-insert-strings) (when (bobp) (cond ((and (memq this-command '(completion-at-point minibuffer-complete)) commit df6669578001e49f44714301df71870654a2de33 Author: Eli Zaretskii Date: Fri Mar 21 18:20:21 2025 +0200 Avoid infinite loop with images under 'display-line-numbers-mode' * src/xdisp.c (move_it_in_display_line_to, display_line): When considering the first glyph on a glyph row, take into consideration the glyphs produced for line-number display. (Bug#77065) diff --git a/src/xdisp.c b/src/xdisp.c index c396b213b92..4e8bb7d9b97 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -10295,10 +10295,10 @@ move_it_in_display_line_to (struct it *it, { bool moved_forward = false; - if (/* IT->hpos == 0 means the very first glyph - doesn't fit on the line, e.g. a wide - image. */ - it->hpos == 0 + if (/* IT->hpos == 0 (modulo line-number width) means + the very first glyph doesn't fit on the line, + e.g., a wide image. */ + it->hpos == 0 + (it->lnum_width ? it->lnum_width + 2 : 0) || (new_x == it->last_visible_x && FRAME_WINDOW_P (it->f))) { @@ -25842,7 +25842,7 @@ display_line (struct it *it, int cursor_vpos) { /* End of a continued line. */ - if (it->hpos == 0 + if (it->hpos == 0 + (it->lnum_width ? it->lnum_width + 2 : 0) || (new_x == it->last_visible_x && FRAME_WINDOW_P (it->f) && (row->reversed_p commit bbad5be9f05aee3eb38b81c65c4a3a286271ce55 Author: Eli Zaretskii Date: Thu Mar 20 22:33:32 2025 +0200 Leave buffer with input-method help unmodified * lisp/international/quail.el (quail-help): Leave "*Help*" unmodified. (Bug#77139) diff --git a/lisp/international/quail.el b/lisp/international/quail.el index 2874d6cbe60..2b66a0bc0f7 100644 --- a/lisp/international/quail.el +++ b/lisp/international/quail.el @@ -2614,6 +2614,7 @@ KEY BINDINGS FOR TRANSLATION KEY BINDINGS FOR CONVERSION ---------------------------\n")) (setq quail-current-package nil) + (set-buffer-modified-p nil) ;; Resize the help window again, now that it has all its contents. (save-selected-window (select-window (get-buffer-window (current-buffer) t)) commit 40a17ce3b238ea0223d1b3e1c72f48352e1ca63d Author: Stefan Kangas Date: Thu Mar 20 19:21:08 2025 +0100 Make compilation-filter-hook into a defcustom * lisp/progmodes/compile.el (compilation-filter-hook): Make variable into a defcustom. diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el index a1264d8d7b0..1ca58b3ac7d 100644 --- a/lisp/progmodes/compile.el +++ b/lisp/progmodes/compile.el @@ -85,14 +85,18 @@ Similarly, to remove a prefix \"bar/\", use: (string :tag "Replace matched filename with")))) :version "27.1") -(defvar compilation-filter-hook nil +(defcustom compilation-filter-hook nil "Hook run after `compilation-filter' has inserted a string into the buffer. It is called with the variable `compilation-filter-start' bound to the position of the start of the inserted text, and point at its end. If Emacs lacks asynchronous process support, this hook is run -after `call-process' inserts the grep output into the buffer.") +after `call-process' inserts the grep output into the buffer." + :type 'hook + :options '(ansi-color-compilation-filter + ansi-osc-compilation-filter) + :version "31.1") (defvar compilation-filter-start nil "Position of the start of the text inserted by `compilation-filter'. commit f0800612e5c5835bd74459eab9dd8843ed9cdfd3 Author: Stefan Kangas Date: Thu Mar 20 19:04:45 2025 +0100 ; Fix global-hl-line-highlight after recent commit diff --git a/lisp/hl-line.el b/lisp/hl-line.el index 0f36b2458ab..2c80ce0c1ca 100644 --- a/lisp/hl-line.el +++ b/lisp/hl-line.el @@ -263,7 +263,8 @@ on `post-command-hook'." (defun global-hl-line-highlight () "Highlight the current line in the current window." - (when (and global-hl-line-mode ; Might be changed outside the mode function. + (require 'easy-mmode) + (when (and global-hl-line-mode ; Might be changed outside the mode function. (easy-mmode--globalized-predicate-p global-hl-line-modes)) (unless (window-minibuffer-p) (unless (overlayp global-hl-line-overlay) commit 60e9195984d746cbbb5939918ed5ddc27377c0e6 Author: john muhl Date: Tue Mar 18 09:12:39 2025 -0500 ; Fix 'lua-ts-mode' tests (Bug#77102) * test/lisp/progmodes/lua-ts-mode-resources/indent.erts: Remove unintended use of tabs and make indentation settings buffer local. diff --git a/test/lisp/progmodes/lua-ts-mode-resources/indent.erts b/test/lisp/progmodes/lua-ts-mode-resources/indent.erts index 575e0e2cbf0..408cd5d115c 100644 --- a/test/lisp/progmodes/lua-ts-mode-resources/indent.erts +++ b/test/lisp/progmodes/lua-ts-mode-resources/indent.erts @@ -1,8 +1,8 @@ Code: (lambda () - (setq lua-ts-indent-offset 2) - (setq indent-tabs-mode nil) (lua-ts-mode) + (setq-local indent-tabs-mode nil) + (setq-local lua-ts-indent-offset 2) (indent-region (point-min) (point-max))) Name: Chunk Indent @@ -479,8 +479,8 @@ local tb9 = { one = 1, two = 2 } =-= local tb9 = { one = 1, - -- comment - two = 2 } + -- comment + two = 2 } =-=-= Name: Argument Indent 1 @@ -805,9 +805,9 @@ end Code: (lambda () - (setq lua-ts-indent-offset 4) (lua-ts-mode) - (setq indent-tabs-mode nil) + (setq-local lua-ts-indent-offset 4) + (setq-local indent-tabs-mode nil) (indent-region (point-min) (point-max))) Name: End Indent 1 @@ -1072,10 +1072,10 @@ end end end Code: (lambda () - (setq lua-ts-indent-continuation-lines nil) - (setq lua-ts-indent-offset 2) (lua-ts-mode) - (setq indent-tabs-mode nil) + (setq-local lua-ts-indent-continuation-lines nil) + (setq-local lua-ts-indent-offset 2) + (setq-local indent-tabs-mode nil) (indent-region (point-min) (point-max))) Name: Unaligned Continuation Indent commit 22602f9c2ca2088fe42d2622eebdd9cd7a0d6b42 Author: Eli Zaretskii Date: Thu Mar 20 15:05:00 2025 +0200 ; * etc/NEWS: Fix last change (bug#77022). diff --git a/etc/NEWS b/etc/NEWS index ccef1367a09..cc63d03eafe 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1587,9 +1587,11 @@ commands. When nil, clicking on an inactive Emacs frame will only activate it. When t (the default), the click will both activate the frame and be interpreted as a command. -*** New variable 'global-hl-line-modes'. +--- +*** New user option 'global-hl-line-modes'. This specifies in which major modes should the 'global-hl-line-mode' be -switched on. +switched on. The default is t, which means enable it in all major +modes. --- *** New user option 'display-fill-column-indicator-warning'. commit 77ad6518bb51410d0bb0199f55e9696265e3cf1d Author: Elías Gabriel Pérez Date: Fri Mar 14 19:02:51 2025 -0600 Allow specifying in which major modes to enable 'global-hl-line-mode' * lisp/hl-line.el (global-hl-line-modes): New user option. (global-hl-line-highlight): Obey the new variable. (Bug#77022) * etc/NEWS: Document new variable. diff --git a/etc/NEWS b/etc/NEWS index 0797fc03217..ccef1367a09 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1587,6 +1587,10 @@ commands. When nil, clicking on an inactive Emacs frame will only activate it. When t (the default), the click will both activate the frame and be interpreted as a command. +*** New variable 'global-hl-line-modes'. +This specifies in which major modes should the 'global-hl-line-mode' be +switched on. + --- *** New user option 'display-fill-column-indicator-warning'. Customize it to a non-nil value to have the fill-column indicators diff --git a/lisp/hl-line.el b/lisp/hl-line.el index 61bdf40222c..0f36b2458ab 100644 --- a/lisp/hl-line.el +++ b/lisp/hl-line.el @@ -122,6 +122,33 @@ the command `global-hl-line-mode' to turn Global Hl-Line mode on." :version "24.1" :group 'hl-line) +(defcustom global-hl-line-modes t + "Which major modes `hl-line-mode' is switched on in. +This variable can be either t (all major modes), nil (no major modes), +or a list of modes and (not modes) to switch use this minor mode or +not. For instance + + (c-mode (not message-mode mail-mode) text-mode) + +means \"use this mode in all modes derived from `c-mode', don't use in +modes derived from `message-mode' or `mail-mode', but do use in other +modes derived from `text-mode'\". An element with value t means \"use\" +and nil means \"don't use\". There's an implicit nil at the end of the +list." + :type + '(choice (const :tag "Enable in all major modes" t) + (repeat :tag "Rules (earlier takes precedence)..." + (choice + (const :tag "Enable in all (other) modes" t) + (symbol :value fundamental-mode :tag + "Enable in major mode") + (cons :tag "Don't enable in major modes" + (const :tag "Don't enable in..." not) + (repeat + (symbol :value fundamental-mode :tag + "Major mode")))))) + :version "31.1") + (defvar hl-line-range-function nil "If non-nil, function to call to return highlight range. The function of no args should return a cons cell; its car value @@ -236,7 +263,8 @@ on `post-command-hook'." (defun global-hl-line-highlight () "Highlight the current line in the current window." - (when global-hl-line-mode ; Might be changed outside the mode function. + (when (and global-hl-line-mode ; Might be changed outside the mode function. + (easy-mmode--globalized-predicate-p global-hl-line-modes)) (unless (window-minibuffer-p) (unless (overlayp global-hl-line-overlay) (setq global-hl-line-overlay (hl-line-make-overlay))) ; To be moved. commit b1db48c0fcd438c903826fe0dba3bc28ffa73cc4 Author: David Ponce Date: Sun Mar 16 11:31:21 2025 +0100 Fix `string-pixel-width' with alternate text properties Fix possible wrong result of `string-pixel-width' with alternate and default properties. Create new regression tests. * lisp/emacs-lisp/subr-x.el (string-pixel-width): Like for `face-remapping-alist', use in work buffer the value of `char-property-alias-alist' and `default-text-properties' local to the passed buffer, to correctly compute pixel width. (Bug#77042) * test/lisp/misc-tests.el: Add tests for `string-pixel-width'. diff --git a/lisp/emacs-lisp/subr-x.el b/lisp/emacs-lisp/subr-x.el index 4ce7bd00f31..6414ecab394 100644 --- a/lisp/emacs-lisp/subr-x.el +++ b/lisp/emacs-lisp/subr-x.el @@ -389,8 +389,8 @@ buffer when possible, instead of creating a new one on each call." ;;;###autoload (defun string-pixel-width (string &optional buffer) "Return the width of STRING in pixels. -If BUFFER is non-nil, use the face remappings from that buffer when -determining the width. +If BUFFER is non-nil, use the face remappings, alternative and default +properties from that buffer when determining the width. If you call this function to measure pixel width of a string with embedded newlines, it returns the width of the widest substring that does not include newlines." @@ -400,11 +400,14 @@ substring that does not include newlines." ;; Keeping a work buffer around is more efficient than creating a ;; new temporary buffer. (with-work-buffer - (if buffer - (setq-local face-remapping-alist - (with-current-buffer buffer - face-remapping-alist)) - (kill-local-variable 'face-remapping-alist)) + ;; Setup current buffer to correctly compute pixel width. + (when buffer + (dolist (v '(face-remapping-alist + char-property-alias-alist + default-text-properties)) + (if (local-variable-p v buffer) + (set (make-local-variable v) + (buffer-local-value v buffer))))) ;; Avoid deactivating the region as side effect. (let (deactivate-mark) (insert string)) @@ -413,12 +416,8 @@ substring that does not include newlines." ;; (bug#59311). Disable `line-prefix' and `wrap-prefix', ;; for the same reason. (add-text-properties - (point-min) (point-max) '(display-line-numbers-disable t)) - ;; Prefer `remove-text-properties' to `propertize' to avoid - ;; creating a new string on each call. - (remove-text-properties - (point-min) (point-max) '(line-prefix nil wrap-prefix nil)) - (setq line-prefix nil wrap-prefix nil) + (point-min) (point-max) + '(display-line-numbers-disable t line-prefix "" wrap-prefix "")) (car (buffer-text-pixel-size nil nil t))))) ;;;###autoload diff --git a/test/lisp/misc-tests.el b/test/lisp/misc-tests.el index 29bf2f02d0c..5b1343148af 100644 --- a/test/lisp/misc-tests.el +++ b/test/lisp/misc-tests.el @@ -178,6 +178,70 @@ (should (equal (point) (+ 14 vdelta hdelta))) (should (equal (mark) (+ 2 hdelta))))))))) +;; Check that `string-pixel-width' returns a consistent result in the +;; various situations that can lead to erroneous results. +(ert-deftest misc-test-string-pixel-width-char-property-alias-alist () + "Test `string-pixel-width' with `char-property-alias-alist'." + (with-temp-buffer + (let ((text0 (propertize "This text" + 'display "xxxx" + 'face 'variable-pitch)) + (text1 (propertize "This text" + 'my-display "xxxx" + 'my-face 'variable-pitch))) + (setq-local char-property-alias-alist '((display my-display) + (face my-face))) + (should (= (string-pixel-width text0 (current-buffer)) + (string-pixel-width text1 (current-buffer))))))) + +;; This test never fails in batch mode. +(ert-deftest misc-test-string-pixel-width-face-remapping-alist () + "Test `string-pixel-width' with `face-remapping-alist'." + (with-temp-buffer + (setq-local face-remapping-alist '((variable-pitch . default))) + (let ((text0 (propertize "This text" 'face 'default)) + (text1 (propertize "This text" 'face 'variable-pitch))) + (should (= (string-pixel-width text0 (current-buffer)) + (string-pixel-width text1 (current-buffer))))))) + +(ert-deftest misc-test-string-pixel-width-default-text-properties () + "Test `string-pixel-width' with `default-text-properties'." + (with-temp-buffer + (setq-local default-text-properties '(display "XXXX")) + (let ((text0 (propertize "This text" 'display "XXXX")) + (text1 "This text")) + (should (= (string-pixel-width text0 (current-buffer)) + (string-pixel-width text1 (current-buffer))))))) + +(ert-deftest misc-test-string-pixel-width-line-and-wrap-prefix () + "Test `string-pixel-width' with `line-prefix' and `wrap-prefix'." + (let ((lp (default-value 'line-prefix)) + (wp (default-value 'line-prefix)) + (text (make-string 2000 ?X)) + w0 w1) + (unwind-protect + (progn + (setq-default line-prefix nil wrap-prefix nil) + (setq w0 (string-pixel-width text)) + (setq-default line-prefix "PPPP" wrap-prefix "WWWW") + (setq w1 (string-pixel-width text))) + (setq-default line-prefix lp wrap-prefix wp)) + (should (= w0 w1)))) + +;; This test never fails in batch mode. +(ert-deftest misc-test-string-pixel-width-display-line-numbers () + "Test `string-pixel-width' with `display-line-numbers'." + (let ((dln (default-value 'display-line-numbers)) + (text "This text") + w0 w1) + (unwind-protect + (progn + (setq-default display-line-numbers nil) + (setq w0 (string-pixel-width text)) + (setq-default display-line-numbers t) + (setq w1 (string-pixel-width text))) + (setq-default display-line-numbers dln)) + (should (= w0 w1)))) (provide 'misc-tests) ;;; misc-tests.el ends here commit cace07f27dc31091a606a70ae8b957cd5dd7da43 Author: Vincenzo Pupillo Date: Mon Mar 17 22:35:23 2025 +0100 MariaDB and Mysql handle escaped aphostrophes in the same way * lisp/progmodes/sql.el (sql-mode): MariaDB and Mysql both handle escaped apostrophes in the same way. (Bug#77088) diff --git a/lisp/progmodes/sql.el b/lisp/progmodes/sql.el index a1c50a06990..58fbf3c51e7 100644 --- a/lisp/progmodes/sql.el +++ b/lisp/progmodes/sql.el @@ -4164,7 +4164,7 @@ must tell Emacs. Here's how to do that in your init file: (eval '(syntax-propertize-rules ;; Handle escaped apostrophes within strings. - ((if (eq sql-product 'mysql) + ((if (member sql-product '(mysql mariadb)) "\\\\'" "''") (0 commit 86c354dd0d891144bf5a6821949de7be3df0ffa2 Author: Jindrich Makovicka Date: Wed Mar 19 10:03:09 2025 +0100 Fix OSX build without pdumper * Makefile.in (install-arch-dep) [ns_self_contained]: Add missing DUMPING = pdumper check. Copyright-paperwork-exempt: yes diff --git a/Makefile.in b/Makefile.in index a89836dca2c..ec6239571a8 100644 --- a/Makefile.in +++ b/Makefile.in @@ -643,7 +643,9 @@ ifndef NO_BIN_LINK cd "$(DESTDIR)${bindir}" && $(LN_S_FILEONLY) "$(EMACSFULL)" "$(EMACS)" endif else +ifeq (${DUMPING},pdumper) ${INSTALL_DATA} src/emacs.pdmp "$(DESTDIR)${libexecdir}/Emacs.pdmp" +endif subdir=${ns_appresdir}/site-lisp && ${write_subdir} rm -rf ${ns_appresdir}/share endif commit e53b90a5ce21feeb0290fbe035e9a2d6aae34bc3 Author: Eli Zaretskii Date: Thu Mar 20 11:03:32 2025 +0200 Improve 'gui-get-selection' on MS-Windows * lisp/term/w32-win.el (w32--get-selection): Allow UTF8_STRING and TEXT data types as well, since w32select.c handles that correctly. diff --git a/lisp/term/w32-win.el b/lisp/term/w32-win.el index fa7862d9bff..a1959cd11be 100644 --- a/lisp/term/w32-win.el +++ b/lisp/term/w32-win.el @@ -416,7 +416,7 @@ also be textual." (defun w32--get-selection (&optional type data-type) (cond ((and (eq type 'CLIPBOARD) - (eq data-type 'STRING)) + (memq data-type '(STRING UTF8_STRING TEXT))) (with-demoted-errors "w32-get-clipboard-data:%S" (w32-get-clipboard-data))) ((eq data-type 'TARGETS) commit 2d12754ee20deb789bd5444f604acda6bb05bbf9 Author: Eli Zaretskii Date: Thu Mar 20 10:41:26 2025 +0200 ; Add indexing for Eglot in user manual * doc/emacs/programs.texi (Imenu, Programming Language Doc) (Symbol Completion): * doc/emacs/maintaining.texi (Xref): Index Eglot-related functionalities. diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi index b433039eec2..d5e42db00e6 100644 --- a/doc/emacs/maintaining.texi +++ b/doc/emacs/maintaining.texi @@ -2239,6 +2239,7 @@ definitions of symbols. (One disadvantage of this kind of backend is that it only knows about subunits that were loaded into the interpreter.) +@cindex eglot, for finding definitions of identifiers @item If Eglot is activated for the current buffer's project (@pxref{Projects}) and the current buffer's major mode, Eglot consults diff --git a/doc/emacs/programs.texi b/doc/emacs/programs.texi index 6bfb9b7e279..85d3bb01012 100644 --- a/doc/emacs/programs.texi +++ b/doc/emacs/programs.texi @@ -406,6 +406,7 @@ define your own comparison function by writing Lisp code. the variable @code{completion-category-overrides} and setting its @code{display-sort-function} for the category @code{imenu}. +@cindex eglot, for producing Imenu index If Eglot is activated for the current buffer's project (@pxref{Projects}) and the current buffer's major mode, Eglot provides its own facility for producing the buffer's index based on the @@ -1501,6 +1502,7 @@ Global ElDoc mode, which is turned on by default, and turns on the ElDoc mode in buffers whose major mode sets the variables described below. Use @w{@kbd{M-x global-eldoc-mode}} to turn it off globally. +@cindex eglot, using with ElDoc Various major modes configure the Global ElDoc mode to use their documentation functions. Examples include Emacs Lisp mode, Python mode, and Cfengine mode. In addition, Emacs features that provide @@ -1697,6 +1699,7 @@ uses the available support facilities to come up with the completion candidates: @itemize @bullet +@cindex eglot, using to complete symbol at point @item If Eglot is activated for the current buffer's project (@pxref{Projects}) and the current buffer's major mode, the command commit a30b9b640b46c23f0a6db7b8fbe329d93e035db6 Author: Stefan Kangas Date: Thu Mar 20 02:05:55 2025 +0100 ; Change some instances of cl to cl-lib in docs * doc/misc/cl.texi (Overview): * doc/misc/eieio.texi (CLOS compatibility, Wish List): Change 'cl' to 'cl-lib' where appropriate. diff --git a/doc/misc/cl.texi b/doc/misc/cl.texi index 91ebf2b3862..75988cf825f 100644 --- a/doc/misc/cl.texi +++ b/doc/misc/cl.texi @@ -97,7 +97,7 @@ As Emacs Lisp programmers have grown in number, and the applications they write have grown more ambitious, it has become clear that Emacs Lisp could benefit from many of the conveniences of Common Lisp. -The @dfn{CL} package adds a number of Common Lisp functions and +The @dfn{CL-Lib} package adds a number of Common Lisp functions and control structures to Emacs Lisp. While not a 100% complete implementation of Common Lisp, it adds enough functionality to make Emacs Lisp programming significantly more convenient. diff --git a/doc/misc/eieio.texi b/doc/misc/eieio.texi index 9182af41333..39225535089 100644 --- a/doc/misc/eieio.texi +++ b/doc/misc/eieio.texi @@ -1653,7 +1653,7 @@ This should create an unqualified method to access a slot, but instead pre-builds a method that gets the slot's value. @item :type -Specifier uses the @code{typep} function from the @file{cl} +Specifier uses the @code{cl-typep} function from the @file{cl-lib} package. @xref{Type Predicates,,,cl,Common Lisp Extensions}. It therefore has the same issues as that package. Extensions include the ability to provide object names. @@ -1702,7 +1702,7 @@ Some important compatibility features that would be good to add are: @item Support for metaclasses. @item -Improve integration with the @file{cl} package. +Improve integration with the @file{cl-lib} package. @end enumerate There are also improvements to be made to allow @eieio{} to operate commit b681d62436f577ddfbfbac50885d48cde320632e Author: Stefan Kangas Date: Wed Mar 19 21:27:29 2025 +0100 ; Improve introduction to use-package manual * doc/misc/use-package.texi (Top): Improve introduction. diff --git a/doc/misc/use-package.texi b/doc/misc/use-package.texi index bcb068e6654..c14e7b77d23 100644 --- a/doc/misc/use-package.texi +++ b/doc/misc/use-package.texi @@ -49,19 +49,18 @@ modify this GNU manual.'' @node Top @top use-package User Manual -The @code{use-package} macro allows you to set up package -customization in your init file in a declarative way. It takes care -of many things for you that would otherwise require a lot of -repetitive boilerplate code. It can help with common customization, -such as binding keys, setting up hooks, customizing user options and -faces, autoloading, and more. It also helps you keep Emacs startup -fast, even when you use many (even hundreds) of packages. - -Note that use-package is not a package manager. Although use-package -does have the useful capability to interface with the Emacs package -manager, its primary purpose is help with the configuration and -loading of packages, not with managing their download, upgrades, and -installation. +The @code{use-package} macro allows you to set up package customization +in your init file in a declarative way. It reduces the need for +repetitive boilerplate code by handling many common customization tasks +for you. These include binding keys, setting hooks, customizing user +options and faces, setting up autoloading, and more. It also helps you +keep Emacs startup fast, even when you use many (even hundreds) of +packages. + +Note that use-package is not a package manager. While it provides +convenient integration with Emacs's built-in package manager, its +primary purpose is to help with configuring and loading packages, not +with downloading, upgrading, or installing them. @insertcopying commit f1acefd86f8d88d26455fec43961d3060451b6f0 Author: Stefan Kangas Date: Wed Mar 19 21:27:38 2025 +0100 ; Add cross-references to push and pop docstrings * lisp/subr.el (push, pop): Add cross-references to Info manual. diff --git a/lisp/subr.el b/lisp/subr.el index 87a06575de7..99981848db4 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -245,8 +245,12 @@ STATES should be an object returned by `buffer-local-set-state'." (defmacro push (newelt place) "Add NEWELT to the list stored in the generalized variable PLACE. + This is morally equivalent to (setf PLACE (cons NEWELT PLACE)), -except that PLACE is evaluated only once (after NEWELT)." +except that PLACE is evaluated only once (after NEWELT). + +For more information about generalized variables, see Info node +`(elisp) Generalized Variables'." (declare (debug (form gv-place))) (if (symbolp place) ;; Important special case, to avoid triggering GV too early in @@ -260,9 +264,13 @@ except that PLACE is evaluated only once (after NEWELT)." (defmacro pop (place) "Return the first element of PLACE's value, and remove it from the list. + PLACE must be a generalized variable whose value is a list. If the value is nil, `pop' returns nil but does not actually -change the list." +change the list. + +For more information about generalized variables, see Info node +`(elisp) Generalized Variables'." (declare (debug (gv-place))) ;; We use `car-safe' here instead of `car' because the behavior is the same ;; (if it's not a cons cell, the `cdr' would have signaled an error already),