mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-29 07:58:28 +00:00
Merge from origin/emacs-29
0754173c92
; Fix docstring014232d384
Eglot: eglot--servers-by-xrefed-file doesn't need to be v...bbe35c280c
Prevent stale servers when using eglot-extend-to-xref9bf13a3fb9
; * src/alloc.c (Fmemory_info): Doc fix.baa33a5c05
* etc/tutorials/TUTORIAL.cn: Fix typos. (Bug#60221)98d7f76b45
Merge branch 'emacs-29' of git.savannah.gnu.org:/srv/git/...a488a6870a
Add alias for removed font-lock function02e046566e
Set beginning/end-of-defun-function in treesit-major-mode...7dea58b88d
Add treesit-defun-at-point and fix c-ts-mode-indent-defun69123d4aa4
; Fix treesit--defuns-around05d8310fb5
Use the new keyword ':repeat' in repeatable keymaps.
This commit is contained in:
commit
99feed933a
@ -299,7 +299,7 @@ Emacs 可以有多个“窗格”,每个窗格显示不同的文字。后面
|
||||
|
||||
>> 试试 C-u 8 *,这将会插入 ********。
|
||||
|
||||
好,现在你应该已经掌握了最基本的的文本插入和修改功能,其实删除还可以
|
||||
好,现在你应该已经掌握了最基本的文本插入和修改功能,其实删除还可以
|
||||
“以词为单位”进行,下面是一个关于“删除”操作的小结:
|
||||
|
||||
<DEL> 删除光标前的一个字符
|
||||
@ -316,7 +316,7 @@ Emacs 可以有多个“窗格”,每个窗格显示不同的文字。后面
|
||||
|
||||
注意“<DEL> 和 C-d”还有“M-<DEL> 和 M-d”是根据前述惯例从 C-f和 M-f 衍生
|
||||
出来的(其实<DEL>不是控制字符,我们先忽略这一点)。C-k和 M-k 的关系在
|
||||
某种程度上与 C-e 和 M-e 一样――如果把“一行”和“一句”作一个类比的话。
|
||||
某种程度上与 C-e 和 M-e 一样――如果把“一行”和“一句”做一个类比的话。
|
||||
|
||||
你也可以用一种通用的办法来移除缓冲区里的任何一部分:首先把光标移动到你
|
||||
想要移除的区域的一端,然后按 C-<SPC>(<SPC>指空格)【注意,C-<SPC> 往
|
||||
|
@ -1012,8 +1012,8 @@ if `inhibit-field-text-motion' is non-nil."
|
||||
;; (define-key ctl-x-map "U" 'undo-only)
|
||||
(defvar-keymap undo-repeat-map
|
||||
:doc "Keymap to repeat undo key sequences \\`C-x u u'. Used in `repeat-mode'."
|
||||
:repeat t
|
||||
"u" #'undo)
|
||||
(put 'undo 'repeat-map 'undo-repeat-map)
|
||||
|
||||
(define-key global-map '[(control ??)] 'undo-redo)
|
||||
(define-key global-map [?\C-\M-_] 'undo-redo)
|
||||
@ -1033,12 +1033,10 @@ if `inhibit-field-text-motion' is non-nil."
|
||||
|
||||
(defvar-keymap buffer-navigation-repeat-map
|
||||
:doc "Keymap to repeat `next-buffer' and `previous-buffer'. Used in `repeat-mode'."
|
||||
:repeat t
|
||||
"<right>" #'next-buffer
|
||||
"<left>" #'previous-buffer)
|
||||
|
||||
(put 'next-buffer 'repeat-map 'buffer-navigation-repeat-map)
|
||||
(put 'previous-buffer 'repeat-map 'buffer-navigation-repeat-map)
|
||||
|
||||
(let ((map minibuffer-local-map))
|
||||
(define-key map "\en" 'next-history-element)
|
||||
(define-key map [next] 'next-history-element)
|
||||
@ -1111,12 +1109,11 @@ if `inhibit-field-text-motion' is non-nil."
|
||||
|
||||
(defvar-keymap next-error-repeat-map
|
||||
:doc "Keymap to repeat `next-error' key sequences. Used in `repeat-mode'."
|
||||
:repeat t
|
||||
"n" #'next-error
|
||||
"M-n" #'next-error
|
||||
"p" #'previous-error
|
||||
"M-p" #'previous-error)
|
||||
(put 'next-error 'repeat-map 'next-error-repeat-map)
|
||||
(put 'previous-error 'repeat-map 'next-error-repeat-map)
|
||||
|
||||
(defvar-keymap goto-map
|
||||
:doc "Keymap for navigation commands."
|
||||
@ -1474,12 +1471,10 @@ if `inhibit-field-text-motion' is non-nil."
|
||||
|
||||
(defvar-keymap page-navigation-repeat-map
|
||||
:doc "Keymap to repeat page navigation key sequences. Used in `repeat-mode'."
|
||||
:repeat t
|
||||
"]" #'forward-page
|
||||
"[" #'backward-page)
|
||||
|
||||
(put 'forward-page 'repeat-map 'page-navigation-repeat-map)
|
||||
(put 'backward-page 'repeat-map 'page-navigation-repeat-map)
|
||||
|
||||
(define-key ctl-x-map "\C-p" 'mark-page)
|
||||
(define-key ctl-x-map "l" 'count-lines-page)
|
||||
(define-key ctl-x-map "np" 'narrow-to-page)
|
||||
|
@ -606,12 +606,10 @@ via PTYs.")
|
||||
|
||||
(defvar-keymap comint-repeat-map
|
||||
:doc "Keymap to repeat comint key sequences. Used in `repeat-mode'."
|
||||
:repeat t
|
||||
"C-n" #'comint-next-prompt
|
||||
"C-p" #'comint-previous-prompt)
|
||||
|
||||
(put #'comint-next-prompt 'repeat-map 'comint-repeat-map)
|
||||
(put #'comint-previous-prompt 'repeat-map 'comint-repeat-map)
|
||||
|
||||
;; Fixme: Is this still relevant?
|
||||
(defvar comint-ptyp t
|
||||
"Non-nil if communications via pty; false if by pipe. Buffer local.
|
||||
|
@ -4882,9 +4882,9 @@ Interactively with prefix argument, read FILE-NAME."
|
||||
|
||||
(defvar-keymap dired-jump-map
|
||||
:doc "Keymap to repeat `dired-jump'. Used in `repeat-mode'."
|
||||
:repeat t
|
||||
"j" #'dired-jump
|
||||
"C-j" #'dired-jump)
|
||||
(put 'dired-jump 'repeat-map 'dired-jump-map)
|
||||
|
||||
|
||||
;;; Miscellaneous commands
|
||||
|
@ -102,12 +102,10 @@ arriving, or after."
|
||||
|
||||
(defvar-keymap eshell-prompt-repeat-map
|
||||
:doc "Keymap to repeat eshell-prompt key sequences. Used in `repeat-mode'."
|
||||
:repeat t
|
||||
"C-n" #'eshell-next-prompt
|
||||
"C-p" #'eshell-previous-prompt)
|
||||
|
||||
(put #'eshell-next-prompt 'repeat-map 'eshell-prompt-repeat-map)
|
||||
(put #'eshell-previous-prompt 'repeat-map 'eshell-prompt-repeat-map)
|
||||
|
||||
;;; Functions:
|
||||
|
||||
(define-minor-mode eshell-prompt-mode
|
||||
|
@ -282,12 +282,10 @@ This is used by `eshell-watch-for-password-prompt'."
|
||||
|
||||
(defvar-keymap eshell-command-repeat-map
|
||||
:doc "Keymap to repeat eshell-command key sequences. Used in `repeat-mode'."
|
||||
:repeat t
|
||||
"C-f" #'eshell-forward-argument
|
||||
"C-b" #'eshell-backward-argument)
|
||||
|
||||
(put #'eshell-forward-argument 'repeat-map 'eshell-command-repeat-map)
|
||||
(put #'eshell-backward-argument 'repeat-map 'eshell-command-repeat-map)
|
||||
|
||||
;;; User Functions:
|
||||
|
||||
(defun eshell-kill-buffer-function ()
|
||||
|
@ -2361,6 +2361,7 @@ in which C preprocessor directives are used, e.g. `asm-mode' and
|
||||
|
||||
(define-obsolete-function-alias 'font-lock-after-fontify-buffer #'ignore "29.1")
|
||||
(define-obsolete-function-alias 'font-lock-after-unfontify-buffer #'ignore "29.1")
|
||||
(define-obsolete-function-alias 'font-lock-fontify-syntactically-region #'font-lock-default-fontify-syntactically "29.1")
|
||||
|
||||
|
||||
(provide 'font-lock)
|
||||
|
@ -625,7 +625,7 @@ command exists in this specific map, but it doesn't have the
|
||||
`(defvar ,variable-name
|
||||
(define-keymap ,@(nreverse opts) ,@defs)
|
||||
,@(and doc (list doc)))))
|
||||
(if repeat
|
||||
(if props
|
||||
`(progn
|
||||
,defvar-form
|
||||
,@(nreverse props))
|
||||
|
@ -1868,6 +1868,7 @@ With a prefix argument, show headings up to that LEVEL."
|
||||
|
||||
|
||||
(defvar-keymap outline-navigation-repeat-map
|
||||
:repeat t
|
||||
"C-b" #'outline-backward-same-level
|
||||
"b" #'outline-backward-same-level
|
||||
"C-f" #'outline-forward-same-level
|
||||
@ -1879,14 +1880,8 @@ With a prefix argument, show headings up to that LEVEL."
|
||||
"C-u" #'outline-up-heading
|
||||
"u" #'outline-up-heading)
|
||||
|
||||
(dolist (command '(outline-backward-same-level
|
||||
outline-forward-same-level
|
||||
outline-next-visible-heading
|
||||
outline-previous-visible-heading
|
||||
outline-up-heading))
|
||||
(put command 'repeat-map 'outline-navigation-repeat-map))
|
||||
|
||||
(defvar-keymap outline-editing-repeat-map
|
||||
:repeat t
|
||||
"C-v" #'outline-move-subtree-down
|
||||
"v" #'outline-move-subtree-down
|
||||
"C-^" #'outline-move-subtree-up
|
||||
@ -1896,12 +1891,6 @@ With a prefix argument, show headings up to that LEVEL."
|
||||
"C-<" #'outline-promote
|
||||
"<" #'outline-promote)
|
||||
|
||||
(dolist (command '(outline-move-subtree-down
|
||||
outline-move-subtree-up
|
||||
outline-demote
|
||||
outline-promote))
|
||||
(put command 'repeat-map 'outline-editing-repeat-map))
|
||||
|
||||
|
||||
(provide 'outline)
|
||||
(provide 'noutline)
|
||||
|
@ -556,13 +556,10 @@ the semicolon. This function skips the semicolon."
|
||||
|
||||
`treesit-defun-type-regexp' defines what constructs to indent."
|
||||
(interactive "*")
|
||||
(let ((orig-point (point-marker)))
|
||||
;; If `treesit-beginning-of-defun' returns nil, we are not in a
|
||||
;; defun, so don't indent anything.
|
||||
(when (treesit-beginning-of-defun)
|
||||
(let ((start (point)))
|
||||
(treesit-end-of-defun)
|
||||
(indent-region start (point))))
|
||||
(when-let ((orig-point (point-marker))
|
||||
(node (treesit-defun-at-point)))
|
||||
(indent-region (treesit-node-start node)
|
||||
(treesit-node-end node))
|
||||
(goto-char orig-point)))
|
||||
|
||||
(defvar-keymap c-ts-mode-map
|
||||
|
@ -908,6 +908,8 @@ PRESERVE-BUFFERS as in `eglot-shutdown', which see."
|
||||
do (with-demoted-errors "[eglot] shutdown all: %s"
|
||||
(cl-loop for s in ss do (eglot-shutdown s nil nil preserve-buffers)))))
|
||||
|
||||
(defvar eglot--servers-by-xrefed-file (make-hash-table :test 'equal))
|
||||
|
||||
(defun eglot--on-shutdown (server)
|
||||
"Called by jsonrpc.el when SERVER is already dead."
|
||||
;; Turn off `eglot--managed-mode' where appropriate.
|
||||
@ -926,6 +928,9 @@ PRESERVE-BUFFERS as in `eglot-shutdown', which see."
|
||||
(setf (gethash (eglot--project server) eglot--servers-by-project)
|
||||
(delq server
|
||||
(gethash (eglot--project server) eglot--servers-by-project)))
|
||||
(maphash (lambda (f s)
|
||||
(when (eq s server) (remhash f eglot--servers-by-xrefed-file)))
|
||||
eglot--servers-by-xrefed-file)
|
||||
(cond ((eglot--shutdown-requested server)
|
||||
t)
|
||||
((not (eglot--inhibit-autoreconnect server))
|
||||
@ -1057,9 +1062,6 @@ be guessed."
|
||||
(put 'eglot-lsp-context 'variable-documentation
|
||||
"Dynamically non-nil when searching for projects in LSP context.")
|
||||
|
||||
(defvar eglot--servers-by-xrefed-file
|
||||
(make-hash-table :test 'equal :weakness 'value))
|
||||
|
||||
(defun eglot--current-project ()
|
||||
"Return a project object for Eglot's LSP purposes.
|
||||
This relies on `project-current' and thus on
|
||||
|
@ -395,12 +395,10 @@ Useful for shells like zsh that has this feature."
|
||||
|
||||
(defvar-keymap shell-repeat-map
|
||||
:doc "Keymap to repeat shell key sequences. Used in `repeat-mode'."
|
||||
:repeat t
|
||||
"C-f" #'shell-forward-command
|
||||
"C-b" #'shell-backward-command)
|
||||
|
||||
(put #'shell-forward-command 'repeat-map 'shell-repeat-map)
|
||||
(put #'shell-backward-command 'repeat-map 'shell-repeat-map)
|
||||
|
||||
(defcustom shell-mode-hook '()
|
||||
"Hook for customizing Shell mode."
|
||||
:type 'hook
|
||||
|
@ -2654,18 +2654,16 @@ When `switch-to-buffer-obey-display-actions' is non-nil,
|
||||
(defvar-keymap tab-bar-switch-repeat-map
|
||||
:doc "Keymap to repeat tab switch key sequences \\`C-x t o o O'.
|
||||
Used in `repeat-mode'."
|
||||
:repeat t
|
||||
"o" #'tab-next
|
||||
"O" #'tab-previous)
|
||||
(put 'tab-next 'repeat-map 'tab-bar-switch-repeat-map)
|
||||
(put 'tab-previous 'repeat-map 'tab-bar-switch-repeat-map)
|
||||
|
||||
(defvar-keymap tab-bar-move-repeat-map
|
||||
:doc "Keymap to repeat tab move key sequences \\`C-x t m m M'.
|
||||
Used in `repeat-mode'."
|
||||
:repeat t
|
||||
"m" #'tab-move
|
||||
"M" #'tab-bar-move-tab-backward)
|
||||
(put 'tab-move 'repeat-map 'tab-bar-move-repeat-map)
|
||||
(put 'tab-bar-move-tab-backward 'repeat-map 'tab-bar-move-repeat-map)
|
||||
|
||||
|
||||
(provide 'tab-bar)
|
||||
|
@ -2096,8 +2096,8 @@ may require a restart of Emacs in order to become effective."
|
||||
|
||||
(defcustom reftex-allow-detached-macro-args nil
|
||||
"Non-nil means, allow arguments of macros to be detached by whitespace.
|
||||
When this is t, `aaa' will be considered as argument of \\bb in the following
|
||||
construct: \\bbb [xxx] {aaa}."
|
||||
When this is t, `aaa' will be considered as argument of \\bbb in
|
||||
the following construct: \\bbb [xxx] {aaa}."
|
||||
:group 'reftex-miscellaneous-configurations
|
||||
:type 'boolean)
|
||||
|
||||
|
@ -1666,10 +1666,13 @@ REGEXP and PRED are the same as in `treesit-defun-type-regexp'."
|
||||
;; defun, in that case we want to use a node that's actually
|
||||
;; before/after point.
|
||||
(node-before (if (>= (treesit-node-start node) pos)
|
||||
(treesit-search-forward-goto node "" t t t)
|
||||
(save-excursion
|
||||
(treesit-search-forward-goto node "" t t t))
|
||||
node))
|
||||
(node-after (if (<= (treesit-node-end node) pos)
|
||||
(treesit-search-forward-goto node "" nil nil t)
|
||||
(save-excursion
|
||||
(treesit-search-forward-goto
|
||||
node "" nil nil t))
|
||||
node))
|
||||
(result (list nil nil nil))
|
||||
(pred (or pred (lambda (_) t))))
|
||||
@ -1840,6 +1843,29 @@ function is called recursively."
|
||||
;; Counter equal to 0 means we successfully stepped ARG steps.
|
||||
(if (eq counter 0) pos nil)))
|
||||
|
||||
;; TODO: In corporate into thing-at-point.
|
||||
(defun treesit-defun-at-point ()
|
||||
"Return the defun at point or nil if none is found.
|
||||
|
||||
Respects `treesit-defun-tactic': return the top-level defun if it
|
||||
is `top-level', return the immediate parent defun if it is
|
||||
`nested'."
|
||||
(pcase-let* ((`(,regexp . ,pred)
|
||||
(if (consp treesit-defun-type-regexp)
|
||||
treesit-defun-type-regexp
|
||||
(cons treesit-defun-type-regexp nil)))
|
||||
(`(,_ ,next ,parent)
|
||||
(treesit--defuns-around (point) regexp pred))
|
||||
;; If point is at the beginning of a defun, we
|
||||
;; prioritize that defun over the parent in nested
|
||||
;; mode.
|
||||
(node (or (and (eq (treesit-node-start next) (point))
|
||||
next)
|
||||
parent)))
|
||||
(if (eq treesit-defun-tactic 'top-level)
|
||||
(treesit--top-level-defun node regexp pred)
|
||||
node)))
|
||||
|
||||
;;; Activating tree-sitter
|
||||
|
||||
(defun treesit-ready-p (language &optional quiet)
|
||||
@ -1924,7 +1950,16 @@ before calling this function."
|
||||
(keymap-set (current-local-map) "<remap> <beginning-of-defun>"
|
||||
#'treesit-beginning-of-defun)
|
||||
(keymap-set (current-local-map) "<remap> <end-of-defun>"
|
||||
#'treesit-end-of-defun)))
|
||||
#'treesit-end-of-defun)
|
||||
;; `end-of-defun' will not work completely correctly in nested
|
||||
;; defuns due to its implementation. However, many lisp programs
|
||||
;; use `beginning/end-of-defun', so we should still set
|
||||
;; `beginning/end-of-defun-function' so they still mostly work.
|
||||
;; This is also what `cc-mode' does: rebind user commands and set
|
||||
;; the variables. In future we should update `end-of-defun' to
|
||||
;; work with nested defuns.
|
||||
(setq-local beginning-of-defun-function #'treesit-beginning-of-defun)
|
||||
(setq-local end-of-defun-function #'treesit-end-of-defun)))
|
||||
|
||||
;;; Debugging
|
||||
|
||||
|
@ -10561,26 +10561,23 @@ displaying that processes's buffer."
|
||||
(defvar-keymap other-window-repeat-map
|
||||
:doc "Keymap to repeat `other-window' key sequences.
|
||||
Used in `repeat-mode'."
|
||||
:repeat t
|
||||
"o" #'other-window
|
||||
"O" (lambda ()
|
||||
(interactive)
|
||||
(setq repeat-map 'other-window-repeat-map)
|
||||
(other-window -1)))
|
||||
(put 'other-window 'repeat-map 'other-window-repeat-map)
|
||||
|
||||
(defvar-keymap resize-window-repeat-map
|
||||
:doc "Keymap to repeat window resizing commands.
|
||||
Used in `repeat-mode'."
|
||||
:repeat t
|
||||
;; Standard keys:
|
||||
"^" #'enlarge-window
|
||||
"}" #'enlarge-window-horizontally
|
||||
"{" #'shrink-window-horizontally
|
||||
;; Additional keys:
|
||||
"v" #'shrink-window)
|
||||
(put 'enlarge-window 'repeat-map 'resize-window-repeat-map)
|
||||
(put 'enlarge-window-horizontally 'repeat-map 'resize-window-repeat-map)
|
||||
(put 'shrink-window-horizontally 'repeat-map 'resize-window-repeat-map)
|
||||
(put 'shrink-window 'repeat-map 'resize-window-repeat-map)
|
||||
|
||||
(defvar-keymap window-prefix-map
|
||||
:doc "Keymap for subcommands of \\`C-x w'."
|
||||
|
@ -330,12 +330,10 @@ You may want to include buffer names such as *Help*, *Apropos*,
|
||||
|
||||
(defvar-keymap winner-repeat-map
|
||||
:doc "Keymap to repeat winner key sequences. Used in `repeat-mode'."
|
||||
:repeat t
|
||||
"<left>" #'winner-undo
|
||||
"<right>" #'winner-redo)
|
||||
|
||||
(put #'winner-undo 'repeat-map 'winner-repeat-map)
|
||||
(put #'winner-redo 'repeat-map 'winner-repeat-map)
|
||||
|
||||
|
||||
;;;###autoload
|
||||
(define-minor-mode winner-mode
|
||||
|
@ -7693,7 +7693,7 @@ DEFUN ("memory-info", Fmemory_info, Smemory_info, 0, 0, 0,
|
||||
All values are in Kbytes. If there is no swap space,
|
||||
last two values are zero. If the system is not supported
|
||||
or memory information can't be obtained, return nil.
|
||||
If `default-directory’ is remote, return memory information of the
|
||||
If `default-directory' is remote, return memory information of the
|
||||
respective remote host. */)
|
||||
(void)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user