diff options
Diffstat (limited to 'lisp')
41 files changed, 316 insertions, 143 deletions
diff --git a/lisp/button.el b/lisp/button.el index a6090477c55..32cd995f5e4 100644 --- a/lisp/button.el +++ b/lisp/button.el @@ -232,7 +232,7 @@ property instead of `action'; if the button has no `mouse-action', the value of `action' is used instead. The action can either be a marker or a function. If it's a -marker then goto it. Otherwise it it is a function then it is +marker then goto it. Otherwise if it is a function then it is called with BUTTON as only argument. BUTTON is either an overlay, a buffer position, or (for buttons in the mode-line or header-line) a string." diff --git a/lisp/calendar/todo-mode.el b/lisp/calendar/todo-mode.el index 79fda462847..3e568213a63 100644 --- a/lisp/calendar/todo-mode.el +++ b/lisp/calendar/todo-mode.el @@ -956,7 +956,7 @@ called with a prefix argument only moves point to a lower item, e.g., with point on the last todo item and called with prefix 1, it moves point to the first done item; but if called with point on the last todo item without a prefix argument, it moves point -the the empty line above the done items separator." +to the empty line above the done items separator." (interactive "p") ;; It's not worth the trouble to allow prefix arg value < 1, since ;; we have the corresponding command. @@ -976,7 +976,7 @@ If the category's done items are visible, this command called with a prefix argument only moves point to a higher item, e.g., with point on the first done item and called with prefix 1, it moves to the last todo item; but if called with point on the -first done item without a prefix argument, it moves point the the +first done item without a prefix argument, it moves point to the empty line above the done items separator." (interactive "p") ;; Avoid moving to bob if on the first item but not at bob. @@ -1052,7 +1052,7 @@ empty line above the done items separator." (defun todo-toggle-item-header () "Hide or show item date-time headers in the current file. With done items, this hides only the done date-time string, not -the the original date-time string." +the original date-time string." (interactive) (unless (catch 'nonempty (dolist (type '(todo done)) @@ -1756,7 +1756,7 @@ means prompt user and omit comment only on confirmation." With positive numerical prefix argument N, change the marking of the next N items in the current category. If both the todo and done items sections are visible, the sequence of N items can -consist of the the last todo items and the first done items." +consist of the last todo items and the first done items." (interactive "p") (when (todo-item-string) (let ((cat (todo-current-category))) diff --git a/lisp/cedet/ede.el b/lisp/cedet/ede.el index a78af1b264a..1dcafc453f4 100644 --- a/lisp/cedet/ede.el +++ b/lisp/cedet/ede.el @@ -998,7 +998,7 @@ Argument PROMPT is the prompt to use when querying the user for a target." (project-add-file this file)) (cl-defmethod project-add-file ((ot ede-target) _file) - "Add the current buffer into project project target OT. + "Add the current buffer into project target OT. Argument FILE is the file to add." (error "add-file not supported by %s" (eieio-object-name ot))) diff --git a/lisp/cedet/semantic/imenu.el b/lisp/cedet/semantic/imenu.el index 28d624908e2..5018e039d03 100644 --- a/lisp/cedet/semantic/imenu.el +++ b/lisp/cedet/semantic/imenu.el @@ -488,7 +488,7 @@ Clears all imenu menus that may be depending on the database." ;;; Which function support ;; ;; The which-function library will display the current function in the -;; mode line. It tries do do this through imenu. With a semantic parsed +;; mode line. It tries to do this through imenu. With a semantic parsed ;; buffer, there is a much more efficient way of doing this. ;; Advise `which-function' so that we optionally use semantic tags ;; instead, and get better stuff. diff --git a/lisp/desktop.el b/lisp/desktop.el index 0aa5dcfe8a3..2a5ec612ddf 100644 --- a/lisp/desktop.el +++ b/lisp/desktop.el @@ -216,8 +216,9 @@ determine where the desktop is saved." :version "22.1") (defcustom desktop-auto-save-timeout auto-save-timeout - "Number of seconds idle time before auto-save of the desktop. -The idle timer activates auto-saving only when window configuration changes. + "Number of seconds of idle time before auto-saving the desktop. +The desktop will be auto-saved when this amount of idle time have +passed after some change in the window configuration. This applies to an existing desktop file when `desktop-save-mode' is enabled. Zero or nil means disable auto-saving due to idleness." :type '(choice (const :tag "Off" nil) @@ -1362,10 +1363,11 @@ Called by the timer created in `desktop-auto-save-set-timer'." (desktop-save desktop-dirname nil t))) (defun desktop-auto-save-set-timer () - "Set the auto-save timer. + "Set the desktop auto-save timer. Cancel any previous timer. When `desktop-auto-save-timeout' is a positive -integer, start a new idle timer to call `desktop-auto-save' repeatedly -after that many seconds of idle time." +integer, start a new idle timer to call `desktop-auto-save' after that many +seconds of idle time. +This function is called from `window-configuration-change-hook'." (desktop-auto-save-cancel-timer) (when (and (integerp desktop-auto-save-timeout) (> desktop-auto-save-timeout 0)) diff --git a/lisp/dired.el b/lisp/dired.el index 1ec3ac4f99c..46918180f12 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -1048,7 +1048,7 @@ wildcards, erases the buffer, and builds the subdir-alist anew ;; default-directory and dired-actual-switches must be buffer-local ;; and initialized by now. (let (dirname - ;; This makes readin much much faster. + ;; This makes read-in much faster. ;; In particular, it prevents the font lock hook from running ;; until the directory is all read in. (inhibit-modification-hooks t)) @@ -2228,7 +2228,8 @@ directory in another window." (find-file (dired-get-file-for-visit)))) (defun dired-find-alternate-file () - "In Dired, visit this file or directory instead of the Dired buffer." + "In Dired, visit file or directory on current line via `find-alternate-file'. +This kills the Dired buffer, then visits the current line's file or directory." (interactive) (set-buffer-modified-p nil) (find-alternate-file (dired-get-file-for-visit))) diff --git a/lisp/doc-view.el b/lisp/doc-view.el index a222076edb8..7213ea2ff6b 100644 --- a/lisp/doc-view.el +++ b/lisp/doc-view.el @@ -451,7 +451,7 @@ Typically \"page-%s.png\".") (if (and (eq 'pdf doc-view-doc-type) (executable-find "pdfinfo")) ;; We don't want to revert if the PDF file is corrupted which - ;; might happen when it it currently recompiled from a tex + ;; might happen when it is currently recompiled from a tex ;; file. (TODO: We'd like to have something like that also ;; for other types, at least PS, but I don't know a good way ;; to test if a PS file is complete.) diff --git a/lisp/emacs-lisp/derived.el b/lisp/emacs-lisp/derived.el index 3fa3818526c..751291afa88 100644 --- a/lisp/emacs-lisp/derived.el +++ b/lisp/emacs-lisp/derived.el @@ -203,11 +203,13 @@ See Info node `(elisp)Derived Modes' for more details." parent child docstring syntax abbrev)) `(progn - (defvar ,hook nil - ,(format "Hook run after entering %s mode. + (defvar ,hook nil) + (unless (get ',hook 'variable-documentation) + (put ',hook 'variable-documentation + ,(format "Hook run after entering %s mode. No problems result if this variable is not bound. `add-hook' automatically binds it. (This is true for all hook variables.)" - name)) + name))) (unless (boundp ',map) (put ',map 'definition-name ',child)) (with-no-warnings (defvar ,map (make-sparse-keymap))) diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el index 643a65f48d9..6293d71470d 100644 --- a/lisp/emacs-lisp/easy-mmode.el +++ b/lisp/emacs-lisp/easy-mmode.el @@ -309,11 +309,13 @@ the mode if ARG is omitted or nil, and toggle it if ARG is `toggle'. ;; up-to-here. :autoload-end - (defvar ,hook nil - ,(format "Hook run after entering or leaving `%s'. + (defvar ,hook nil) + (unless (get ',hook 'variable-documentation) + (put ',hook 'variable-documentation + ,(format "Hook run after entering or leaving `%s'. No problems result if this variable is not bound. `add-hook' automatically binds it. (This is true for all hook variables.)" - modefun)) + modefun))) ;; Define the minor-mode keymap. ,(unless (symbolp keymap) ;nil is also a symbol. diff --git a/lisp/emacs-lisp/inline.el b/lisp/emacs-lisp/inline.el index 00e5e6eb48d..ff27158f836 100644 --- a/lisp/emacs-lisp/inline.el +++ b/lisp/emacs-lisp/inline.el @@ -59,7 +59,7 @@ ;; and then M-: (macroexpand-all '(my-test1 y)) RET) ;; There is still one downside shared with the defmacro and cl-defsubst ;; approach: when the function is inlined, the scoping rules (dynamic or -;; lexical) will be inherited from the the call site. +;; lexical) will be inherited from the call site. ;; Of course, since define-inline defines a compiler macro, you can also do ;; call-site optimizations, just like you can with `defmacro', but not with diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el index fdc4a647777..76f4c8b35ab 100644 --- a/lisp/erc/erc.el +++ b/lisp/erc/erc.el @@ -2648,9 +2648,9 @@ otherwise `erc-server-announced-name'. SERVER is matched against "Predicate indicating whether the parsed ERC response PARSED should be hidden. Messages are always hidden if the message type of PARSED appears in -`erc-hide-list'. Message types that appear in `erc-network-hide-list' -or `erc-channel-hide-list' are are only hidden if the target matches -the network or channel in the list. In addition, messages whose type +`erc-hide-list'. Message types that appear in `erc-network-hide-list' +or `erc-channel-hide-list' are only hidden if the target matches +the network or channel in the list. In addition, messages whose type is a member of `erc-lurker-hide-list' are hidden if `erc-lurker-p' returns non-nil." (let* ((command (erc-response.command parsed)) diff --git a/lisp/follow.el b/lisp/follow.el index 761513bae36..4893cad3fdc 100644 --- a/lisp/follow.el +++ b/lisp/follow.el @@ -1117,7 +1117,7 @@ Otherwise, return nil." ;;; Redisplay ;; Redraw all the windows on the screen, starting with the top window. -;; The window used as as marker is WIN, or the selected window if WIN +;; The window used as marker is WIN, or the selected window if WIN ;; is nil. Start every window directly after the end of the previous ;; window, to make sure long lines are displayed correctly. diff --git a/lisp/gnus/gnus-notifications.el b/lisp/gnus/gnus-notifications.el index e97e6a64334..6e8dbb5c35e 100644 --- a/lisp/gnus/gnus-notifications.el +++ b/lisp/gnus/gnus-notifications.el @@ -154,7 +154,7 @@ This is typically a function to add in (dolist (entry gnus-newsrc-alist) (let ((group (car entry))) ;; Check that the group level is less than - ;; `gnus-notifications-minimum-level' and the the group has unread + ;; `gnus-notifications-minimum-level' and the group has unread ;; messages. (when (and (<= (gnus-group-level group) gnus-notifications-minimum-level) (let ((unread (gnus-group-unread group))) diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el index acb55463f7f..f6777c5e884 100644 --- a/lisp/gnus/message.el +++ b/lisp/gnus/message.el @@ -4346,7 +4346,7 @@ conformance." RECIPIENTS is a mail header. Return a list of potentially bogus addresses. If none is found, return nil. -An address might be bogus if if there's a matching entry in +An address might be bogus if there's a matching entry in `message-bogus-addresses'." ;; FIXME: How about "foo@subdomain", when the MTA adds ".domain.tld"? (let (found) diff --git a/lisp/gnus/nnir.el b/lisp/gnus/nnir.el index 51147ed4330..be42ab74e4a 100644 --- a/lisp/gnus/nnir.el +++ b/lisp/gnus/nnir.el @@ -64,7 +64,7 @@ ;; also be correct, see the documentation for `nnir-namazu-remove-prefix' ;; above. ;; -;; It is particularly important not to pass any any switches to namazu +;; It is particularly important not to pass any switches to namazu ;; that will change the output format. Good switches to use include ;; `--sort', `--ascending', `--early' and `--late'. Refer to the Namazu ;; documentation for further information on valid switches. diff --git a/lisp/international/mule.el b/lisp/international/mule.el index 5f1ef5e7d02..857fa800eb4 100644 --- a/lisp/international/mule.el +++ b/lisp/international/mule.el @@ -773,7 +773,7 @@ never used by the other charsets. If it is a list, the elements must be charsets, nil, 94, or 96. GN can be used by all the listed charsets. If the list contains 94, any iso-2022 charset whose code-space ranges are 94 long can be designated -to GN. If the list contains 96, any charsets whose whose ranges are +to GN. If the list contains 96, any charsets whose ranges are 96 long can be designated to GN. If the first element is a charset, that charset is initially designated to GN. diff --git a/lisp/net/shr.el b/lisp/net/shr.el index 260ada54222..4ba452e4b94 100644 --- a/lisp/net/shr.el +++ b/lisp/net/shr.el @@ -635,7 +635,7 @@ size, and full-buffer size." (replace-match " " t t)) (shr--translate-insertion-chars) (goto-char (point-max))) - ;; We may have removed everything we inserted if if was just + ;; We may have removed everything we inserted if it was just ;; spaces. (unless (= font-start (point)) ;; Mark all lines that should possibly be folded afterwards. @@ -700,12 +700,16 @@ size, and full-buffer size." ;; Success; continue. (when (= (preceding-char) ?\s) (delete-char -1)) - (let ((props (text-properties-at (point))) + (let ((props `(face ,(get-text-property (point) 'face) + ;; Don't break the image-displayer property + ;; as it will cause `gnus-article-show-images' + ;; to show the two or more same images. + image-displayer + ,(get-text-property (point) 'image-displayer))) (gap-start (point))) (insert "\n") (shr-indent) - (when props - (add-text-properties gap-start (point) props))) + (add-text-properties gap-start (point) props)) (setq start (point)) (shr-vertical-motion shr-internal-width) (when (looking-at " $") diff --git a/lisp/pixel-scroll.el b/lisp/pixel-scroll.el index 4f183addaa0..2213a0239db 100644 --- a/lisp/pixel-scroll.el +++ b/lisp/pixel-scroll.el @@ -74,10 +74,13 @@ More wait will result in slow and gentle scroll.") (defvar pixel-resolution-fine-flag nil - "Set scrolling resolution to a pixel instead of a line. -After a pixel scroll, typing C-n or C-p scrolls the window to -make it fully visible, and undoes the effect of the pixel-level -scroll.") + "Set scrolling resolution to pixels instead of a line. +When it is t, scrolling resolution is number of pixels obtained +by `frame-char-height' instead of a line. When it is number, +scrolling resolution is set to number of pixels specified. In +case you need scrolling resolution of a pixel, set to 1. After a +pixel scroll, typing \\[next-line] or \\[previous-line] scrolls the window to make it +fully visible, and undoes the effect of the pixel-level scroll.") ;;;###autoload (define-minor-mode pixel-scroll-mode @@ -102,13 +105,16 @@ This is an alternative of `scroll-up'. Scope moves downward." (interactive) (or arg (setq arg 1)) (dotimes (ii arg) ; move scope downward - (if (pixel-eob-at-top-p) ; when end-of-the-buffer is close - (scroll-up 1) ; relay on robust method - (when (pixel-point-at-top-p) ; prevent too late - (vertical-motion 1)) ; move point downward - (pixel-scroll-pixel-up (if pixel-resolution-fine-flag - 1 - (pixel-line-height)))))) ; move scope downward + (let ((amt (if pixel-resolution-fine-flag + (if (integerp pixel-resolution-fine-flag) + pixel-resolution-fine-flag + (frame-char-height)) + (pixel-line-height)))) + (if (pixel-eob-at-top-p) ; when end-of-the-buffer is close + (scroll-up 1) ; relay on robust method + (while (pixel-point-at-top-p amt) ; prevent too late (multi tries) + (vertical-motion 1)) ; move point downward + (pixel-scroll-pixel-up amt))))) ; move scope downward (defun pixel-scroll-down (&optional arg) "Scroll text of selected window down ARG lines. @@ -116,48 +122,63 @@ This is and alternative of `scroll-down'. Scope moves upward." (interactive) (or arg (setq arg 1)) (dotimes (ii arg) - (if (or (pixel-bob-at-top-p) ; when beginning-of-the-buffer is seen - (pixel-eob-at-top-p)) ; for file with a long line - (scroll-down 1) ; relay on robust method - (while (pixel-point-at-bottom-p) ; prevent too late (multi tries) - (vertical-motion -1)) - (pixel-scroll-pixel-down (if pixel-resolution-fine-flag - 1 - (pixel-line-height -1)))))) - -(defun pixel-bob-at-top-p () - "Return non-nil if beginning of buffer is at top of window." - (equal (window-start) (point-min))) + (let ((amt (if pixel-resolution-fine-flag + (if (integerp pixel-resolution-fine-flag) + pixel-resolution-fine-flag + (frame-char-height)) + (pixel-line-height -1)))) + (if (or (pixel-bob-at-top-p amt) ; when beginning-of-the-buffer is seen + (pixel-eob-at-top-p)) ; for file with a long line + (scroll-down 1) ; relay on robust method + (while (pixel-point-at-bottom-p amt) ; prevent too late (multi tries) + (vertical-motion -1)) + (pixel-scroll-pixel-down amt))))) + +(defun pixel-bob-at-top-p (amt) + "Return non-nil if window-start is at beginning of the current buffer. +Window must be vertically scrolled by not more than AMT pixels." + (and (equal (window-start) (point-min)) + (< (window-vscroll nil t) amt))) (defun pixel-eob-at-top-p () "Return non-nil if end of buffer is at top of window." (<= (count-lines (window-start) (window-end)) 2)) ; count-screen-lines (defun pixel-posn-y-at-point () - "Return y coordinates of point in pixels of current window." - (let ((hscroll0 (window-hscroll)) - (y (cdr (posn-x-y (posn-at-point))))) - ;; when point is out of scope by hscroll - (unless y - (save-excursion - (set-window-hscroll nil (current-column)) - (setq y (cdr (posn-x-y (posn-at-point)))) - (set-window-hscroll nil hscroll0))) - y)) - -(defun pixel-point-at-top-p () - "Return if point is located at top of a window." - (let* ((y (pixel-posn-y-at-point)) - (top-margin y)) - (< top-margin (pixel-line-height)))) - -(defun pixel-point-at-bottom-p () - "Return if point is located at bottom of a window." - (let* ((y (pixel-posn-y-at-point)) - (edges (window-inside-pixel-edges)) + "Return y coordinates of point in pixels of current window. +This returns nil when horizontally scrolled." + (when (equal (window-hscroll) 0) + (save-excursion + ;; When there's an overlay string on a line, move + ;; point by (beginning-of-visual-line). + (beginning-of-visual-line) + ;; (- (cadr (pos-visible-in-window-p (point) nil t)) + ;; (line-pixel-height)) + (cdr (posn-x-y (posn-at-point)))))) + +(defun pixel-point-at-top-p (amt) + "Return if point is located at top of a window on coming scroll of AMT pixels. +When location of point was not obtained, this returns if point is at top +of window." + (let ((y (pixel-posn-y-at-point)) + top-margin) + (cond + (y + (setq top-margin y) + (< top-margin amt)) + (t + (<= (count-lines (window-start) (point)) 1))))) + +(defun pixel-point-at-bottom-p (amt) + "Return if point is located at bottom of window on coming scroll of AMT pixels. +When location of point was not obtained, this returns nil." + (let* ((edges (window-inside-pixel-edges)) (height (- (nth 3 edges) (nth 1 edges))) ; (- bottom top) - (bottom-margin (- height (+ y (line-pixel-height))))) ; bottom margin - (< bottom-margin (pixel-line-height -1)))) ; coming unseen line + (y (pixel-posn-y-at-point)) + bottom-margin) + (when y + (setq bottom-margin (- height (+ y (pixel-visual-line-height)))) + (< bottom-margin amt)))) ; coming unseen line (defun pixel-scroll-pixel-up (amt) "Scroll text of selected windows up AMT pixels. @@ -173,8 +194,12 @@ Scope moves upward." (while (> amt 0) (let ((vs (window-vscroll nil t))) (if (equal vs 0) - (pixel-scroll-down-and-set-window-vscroll - (1- (pixel-line-height -1))) + (progn + ;; On horizontal scrolling, move cursor. + (when (> (window-hscroll) 0) + (vertical-motion -1)) + (pixel-scroll-down-and-set-window-vscroll + (1- (pixel-line-height -1)))) (set-window-vscroll nil (1- vs) t)) (setq amt (1- amt)) (sit-for pixel-wait)))) @@ -189,11 +214,16 @@ Scope moves downward. This function returns number of pixels that was scrolled." (let* ((src (window-vscroll nil t)) ; EXAMPLE (initial) @0 @8 @88 (height (pixel-line-height)) ; 25 25 23 - (line (1+ (/ src height))) ; catch up + one line Ä1 Ä1 Ä4 + (line (1+ (/ src height))) ; catch up + one line 1 1 4 (dst (* line height)) ; goal @25 @25 @92 (delta (- dst src))) ; pixels to be scrolled 25 17 4 (pixel--whistlestop-pixel-up (1- delta)) ; until one less @24 @24 @91 - (scroll-up line) (sit-for pixel-wait) ; scroll 1 pixel @0 @0 @0 + (dotimes (ii line) + ;; On horizontal scrolling, move cursor. + (when (> (window-hscroll) 0) + (vertical-motion 1)) + (scroll-up 1)) + (sit-for pixel-wait) ; scroll 1 pixel @0 @0 @0 delta)) (defun pixel--whistlestop-pixel-up (n) @@ -211,9 +241,61 @@ unseen line above the first line, respectively, is provided." (or pos (setq pos (window-start))) (when (< pos 0) (setq pos (pixel-point-at-unseen-line))) - (save-excursion - (goto-char pos) - (line-pixel-height))) ; frame-char-height + (let ((vs1 (window-vscroll nil t)) + height) + (set-window-vscroll nil 0 t) + (save-excursion + (goto-char pos) + (setq height (pixel-visual-line-height))) ; line-pixel-height, frame-char-height + (set-window-vscroll nil vs1 t) + height)) + +(defun pixel-visual-line-height () + "Return height in pixels of text line where cursor is in the selected window." + (let ((pos (pixel-visible-pos-in-window))) + (cond + ;; When a char of line is shown, obtain height by + ;; (line-pixel-height). + (pos (save-excursion (goto-char pos) (line-pixel-height))) + ;; When no char of line is shown but the line is at the top, + ;; obtain height by (line-pixel-height). This is based on + ;; expected response from display engine. See following + ;; discussion. + ;; https://lists.gnu.org/archive/html/emacs-devel/2017-10/msg00621.html + ((equal (count-lines (window-start) (point)) 1) + (line-pixel-height)) + ;; No char of line is shown and the line is not at the top, + ;; obtain height by (frame-char-height). + (t (frame-char-height))))) + +(defun pixel-visible-pos-in-window () + "Return position shown on text line where cursor is in the selected window. +This will look for positions of point and end-of-visual-line, +then positions from beginning-of-visual-line to +end-of-visual-line. When no char in a line is shown, this +returns nil." + (let* ((beginning-of-visual-line-pos (save-excursion (beginning-of-visual-line) (point))) + (end-of-visual-line-pos (save-excursion (end-of-visual-line) (point))) + (pos-list (number-sequence beginning-of-visual-line-pos end-of-visual-line-pos)) + (edges (window-inside-pixel-edges)) + (width (- (nth 2 edges) (nth 0 edges))) + posn-x + visible-pos) + ;; Optimize list of position to be surveyed. + (push end-of-visual-line-pos pos-list) + (push (point) pos-list) + (delete-dups pos-list) + ;; Find out a char with position X that is more than zero and less + ;; than width of screen. + (while (and (not visible-pos) + pos-list) + (setq posn-x (car (pos-visible-in-window-p (car pos-list) nil t))) + (if (and posn-x + (<= 0 posn-x) + (< posn-x width)) + (setq visible-pos (car pos-list)) + (setq pos-list (cdr pos-list)))) + visible-pos)) (defun pixel-point-at-unseen-line () "Return the character position of line above the selected window. diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index 457f95f2ca3..6f39cc64338 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -1720,7 +1720,7 @@ comment at the start of cc-engine.el for more info." `((c-debug-remove-face beg end 'c-debug-is-sws-face) (c-debug-remove-face beg end 'c-debug-in-sws-face))))) -;; The type of literal position `end' is in in a `before-change-functions' +;; The type of literal position `end' is in a `before-change-functions' ;; function - one of `c', `c++', `pound', or nil (but NOT `string'). (defvar c-sws-lit-type nil) ;; A cons (START . STOP) of the bounds of the comment or CPP construct @@ -2784,7 +2784,7 @@ comment at the start of cc-engine.el for more info." (setq pos npos) (setq c-state-nonlit-pos-cache (cons pos c-state-nonlit-pos-cache))) - ;; Add one extra element above HERE so as to to avoid the previous + ;; Add one extra element above HERE so as to avoid the previous ;; expensive calculation when the next call is close to the current ;; one. This is especially useful when inside a large macro. (when npos @@ -5189,16 +5189,25 @@ comment at the start of cc-engine.el for more info." ;; Get a "safe place" approximately TRY-SIZE characters before START. ;; This defsubst doesn't preserve point. (let* ((pos (max (- start try-size) (point-min))) - (s (c-state-semi-pp-to-literal pos))) - (or (car (cddr s)) pos))) + (s (c-state-semi-pp-to-literal pos)) + (cand (or (car (cddr s)) pos))) + (if (>= cand (point-min)) + cand + (parse-partial-sexp pos start nil nil (car s) 'syntax-table) + (point)))) (defun c-determine-limit (how-far-back &optional start try-size) - ;; Return a buffer position HOW-FAR-BACK non-literal characters from START - ;; (default point). This is done by going back further in the buffer then - ;; searching forward for literals. The position found won't be in a - ;; literal. We start searching for the sought position TRY-SIZE (default - ;; twice HOW-FAR-BACK) bytes back from START. This function must be fast. - ;; :-) + ;; Return a buffer position HOW-FAR-BACK non-literal characters from + ;; START (default point). The starting position, either point or + ;; START may not be in a comment or string. + ;; + ;; The position found will not be before POINT-MIN and won't be in a + ;; literal. + ;; + ;; We start searching for the sought position TRY-SIZE (default + ;; twice HOW-FAR-BACK) bytes back from START. + ;; + ;; This function must be fast. :-) (save-excursion (let* ((start (or start (point))) (try-size (or try-size (* 2 how-far-back))) @@ -5254,6 +5263,8 @@ comment at the start of cc-engine.el for more info." (+ (car elt) (- count how-far-back))) ((eq base (point-min)) (point-min)) + ((> base (- start try-size)) ; Can only happen if we hit point-min. + (car elt)) (t (c-determine-limit (- how-far-back count) base try-size)))))) diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el index e4b77ab0504..0794830fcb8 100644 --- a/lisp/progmodes/compile.el +++ b/lisp/progmodes/compile.el @@ -2328,7 +2328,7 @@ and runs `compilation-filter-hook'." (while (,< n 0) (setq opt pt) (or (setq pt (,property-change pt 'compilation-message)) - ;; Handle the case where where the first error message is + ;; Handle the case where the first error message is ;; at the start of the buffer, and n < 0. (if (or (eq (get-text-property ,limit 'compilation-message) (get-text-property opt 'compilation-message)) diff --git a/lisp/progmodes/ebrowse.el b/lisp/progmodes/ebrowse.el index 661c55dc184..6ea939de661 100644 --- a/lisp/progmodes/ebrowse.el +++ b/lisp/progmodes/ebrowse.el @@ -3034,7 +3034,7 @@ the first derived class." :help "Show the base class of this class" :active t] ["Down" ebrowse-switch-member-buffer-to-derived-class - :help "Show a derived class class of this class" + :help "Show a derived class of this class" :active t] ["Next Sibling" ebrowse-switch-member-buffer-to-next-sibling-class :help "Show the next sibling class" diff --git a/lisp/progmodes/flymake-proc.el b/lisp/progmodes/flymake-proc.el index 359cffd797e..f504a1c21a8 100644 --- a/lisp/progmodes/flymake-proc.el +++ b/lisp/progmodes/flymake-proc.el @@ -179,13 +179,13 @@ from compile.el") "Predicate matching against diagnostic text to detect its type. Takes a single argument, the diagnostic's text and should return a value suitable for indexing -`flymake-diagnostic-types-alist' (which see). If the returned -value is nil, a type of `:error' is assumed. For some backward -compatibility, if a non-nil value is returned that that doesn't +`flymake-diagnostic-types-alist' (which see). If the returned +value is nil, a type of `:error' is assumed. For some backward +compatibility, if a non-nil value is returned that doesn't index that alist, a type of `:warning' is assumed. Instead of a function, it can also be a string, a regular -expression. A match indicates `:warning' type, otherwise +expression. A match indicates `:warning' type, otherwise `:error'") (defun flymake-proc-default-guess (text) diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el index 7723f700925..28d1974893d 100644 --- a/lisp/progmodes/gdb-mi.el +++ b/lisp/progmodes/gdb-mi.el @@ -2374,7 +2374,7 @@ file names include non-ASCII characters." ;; sequences are not split between chunks of output of the GDB process ;; due to buffering, and arrive together. Finally, if some string ;; included literal \nnn strings (as opposed to non-ASCII characters -;; converted by by GDB/MI to octal escapes), this decoding will mangle +;; converted by GDB/MI to octal escapes), this decoding will mangle ;; those strings. When/if GDB acquires the ability to not ;; escape-protect non-ASCII characters in its MI output, this kludge ;; should be removed. diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el index 3ef1d90ab58..7d044b294da 100644 --- a/lisp/progmodes/gud.el +++ b/lisp/progmodes/gud.el @@ -1830,7 +1830,7 @@ and source-file directory for your debugger." ;; ;; Type M-n to step over the current line and M-s to step into it. That, ;; along with the JDB 'help' command should get you started. The 'quit' -;; JDB command will get out out of the debugger. There is some truly +;; JDB command will get out of the debugger. There is some truly ;; pathetic JDB documentation available at: ;; ;; http://java.sun.com/products/jdk/1.1/debugging/ diff --git a/lisp/progmodes/hideif.el b/lisp/progmodes/hideif.el index 39744833255..b1a2a35d55f 100644 --- a/lisp/progmodes/hideif.el +++ b/lisp/progmodes/hideif.el @@ -1657,8 +1657,8 @@ first arg will be `hif-etc'." ;; The original version of hideif evaluates the macro early and store the ;; final values for the defined macro into the symbol database (aka -;; `hide-ifdef-env'). The evaluation process is "strings -> tokens -> parsed -;; tree -> [value]". (The square bracket refers to what's stored in in our +;; `hide-ifdef-env'). The evaluation process is "strings -> tokens -> parsed +;; tree -> [value]". (The square bracket refers to what's stored in our ;; `hide-ifdef-env'.) ;; ;; This forbids the evaluation of an argumented macro since the parameters diff --git a/lisp/progmodes/perl-mode.el b/lisp/progmodes/perl-mode.el index 2f9a4c3db55..24b934ce6c2 100644 --- a/lisp/progmodes/perl-mode.el +++ b/lisp/progmodes/perl-mode.el @@ -678,7 +678,9 @@ Turning on Perl mode runs the normal hook `perl-mode-hook'." (define-obsolete-function-alias 'electric-perl-terminator 'perl-electric-terminator "22.1") (defun perl-electric-noindent-p (_char) - (unless (eolp) 'no-indent)) + ;; To reproduce the old behavior, ;, {, }, and : are made electric, but + ;; we only want them to be electric at EOL. + (unless (or (bolp) (eolp)) 'no-indent)) (defun perl-electric-terminator (arg) "Insert character and maybe adjust indentation. diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el index 80cdcb3f18b..3dbf65ef6f5 100644 --- a/lisp/progmodes/xref.el +++ b/lisp/progmodes/xref.el @@ -102,7 +102,7 @@ This is typically the filename.") ;;;; Commonly needed location classes are defined here: ;; FIXME: might be useful to have an optional "hint" i.e. a string to -;; search for in case the line number is sightly out of date. +;; search for in case the line number is slightly out of date. (defclass xref-file-location (xref-location) ((file :type string :initarg :file) (line :type fixnum :initarg :line :reader xref-location-line) @@ -254,8 +254,7 @@ find a search tool; by default, this uses \"find | grep\" in the (project-external-roots pr))))) (cl-defgeneric xref-backend-apropos (backend pattern) - "Find all symbols that match PATTERN. -PATTERN is a regexp") + "Find all symbols that match regexp PATTERN.") (cl-defgeneric xref-backend-identifier-at-point (_backend) "Return the relevant identifier at point. diff --git a/lisp/progmodes/xscheme.el b/lisp/progmodes/xscheme.el index 4939649b999..16bf01eeaa8 100644 --- a/lisp/progmodes/xscheme.el +++ b/lisp/progmodes/xscheme.el @@ -85,8 +85,7 @@ reading-type received an altmode but nothing else reading-string reading prompt string") (defvar-local xscheme-allow-output-p t - "This variable, if nil, prevents output from the scheme process -from being inserted into the process-buffer.") + "Non-nil stops scheme process output being inserted in the process buffer.") (defvar-local xscheme-prompt "" "The current scheme prompt string.") @@ -300,7 +299,7 @@ With argument, asks for a command line." (defun scheme-interaction-mode (&optional preserve) "Major mode for interacting with an inferior MIT Scheme process. -Like scheme-mode except that: +Like `scheme-mode' except that: \\[xscheme-send-previous-expression] sends the expression before point to the Scheme process as input \\[xscheme-yank-pop] yanks an expression previously sent to Scheme @@ -315,7 +314,7 @@ in the minibuffer. If an error occurs, the process buffer will automatically pop up to show you the error message. While the Scheme process is running, the mode lines of all buffers in -scheme-mode are modified to show the state of the process. The +`scheme-mode' are modified to show the state of the process. The possible states and their meanings are: input waiting for input @@ -353,13 +352,13 @@ Some possible command interpreter types and their meanings are: Starting with release 6.2 of Scheme, the latter two types of command interpreters will change the major mode of the Scheme process buffer -to scheme-debugger-mode , in which the evaluation commands are +to `scheme-debugger-mode', in which the evaluation commands are disabled, and the keys which normally self insert instead send themselves to the Scheme process. The command character ? will list the available commands. -For older releases of Scheme, the major mode will be be -scheme-interaction-mode , and the command characters must be sent as +For older releases of Scheme, the major mode will be +`scheme-interaction-mode', and the command characters must be sent as if they were expressions. Commands: @@ -367,10 +366,8 @@ Delete converts tabs to spaces as it moves back. Blank lines separate paragraphs. Semicolons start comments. \\{scheme-interaction-mode-map} -Entry to this mode calls the value of scheme-interaction-mode-hook -with no args, if that value is non-nil. - Likewise with the value of scheme-mode-hook. - scheme-interaction-mode-hook is called after scheme-mode-hook." +Entry to this mode runs `scheme-mode-hook' and then +`scheme-interaction-mode-hook'." ;; FIXME: Use define-derived-mode. (interactive "P") (if (not preserve) @@ -456,7 +453,7 @@ with no args, if that value is non-nil. (defun scheme-debugger-mode () "Major mode for executing the Scheme debugger. -Like scheme-mode except that the evaluation commands +Like `scheme-mode' except that the evaluation commands are disabled, and characters that would normally be self inserting are sent to the Scheme process instead. Typing ? will show you which characters perform useful functions. @@ -593,7 +590,7 @@ See also the commands \\[xscheme-yank-pop] and \\[xscheme-yank-push]." "Insert or replace a just-yanked expression with an older expression. If the previous command was not a yank, it yanks. Otherwise, the region contains a stretch of reinserted -expression. yank-pop deletes that text and inserts in its +expression. `yank-pop' deletes that text and inserts in its place a different expression. With no argument, the next older expression is inserted. @@ -620,7 +617,7 @@ comes the newest one." "Insert or replace a just-yanked expression with a more recent expression. If the previous command was not a yank, it yanks. Otherwise, the region contains a stretch of reinserted -expression. yank-pop deletes that text and inserts in its +expression. `yank-pop' deletes that text and inserts in its place a different expression. With no argument, the next more recent expression is inserted. diff --git a/lisp/select.el b/lisp/select.el index d950d705934..54acb5292e6 100644 --- a/lisp/select.el +++ b/lisp/select.el @@ -98,7 +98,7 @@ if applicable (i.e. under X11)." 'select-enable-clipboard "25.1") (defcustom select-enable-primary nil - "Non-nil means cutting and pasting uses the primary selection + "Non-nil means cutting and pasting uses the primary selection. The existence of a primary selection depends on the underlying GUI you use. E.g. it doesn't exist under MS-Windows." :type 'boolean diff --git a/lisp/simple.el b/lisp/simple.el index 12d65e50c34..372e153d626 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -5965,7 +5965,7 @@ Used internally by `line-move-visual'.") "Non-nil means commands that move by lines ignore invisible newlines. When this option is non-nil, \\[next-line], \\[previous-line], \\[move-end-of-line], and \\[move-beginning-of-line] behave as if newlines that are invisible didn't exist, and count -only visible newlines. Thus, moving across across 2 newlines +only visible newlines. Thus, moving across 2 newlines one of which is invisible will be counted as a one-line move. Also, a non-nil value causes invisible text to be ignored when counting columns for the purposes of keeping point in the same @@ -6125,7 +6125,7 @@ The value is a floating-point number." (or (null rbot) (= rbot 0))) nil) ;; If cursor is not in the bottom scroll margin, and the - ;; current line is is not too tall, move forward. + ;; current line is not too tall, move forward. ((and (or (null this-height) (<= this-height winh)) vpos (> vpos 0) diff --git a/lisp/sort.el b/lisp/sort.el index 17f2cb0167e..1dee6ef6c56 100644 --- a/lisp/sort.el +++ b/lisp/sort.el @@ -406,7 +406,7 @@ the sort order." ;;;###autoload (defun sort-regexp-fields (reverse record-regexp key-regexp beg end) - "Sort the text in the region region lexicographically. + "Sort the text in the region lexicographically. If called interactively, prompt for two regular expressions, RECORD-REGEXP and KEY-REGEXP. diff --git a/lisp/subr.el b/lisp/subr.el index b6b55b53def..1f68c25c888 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -2445,7 +2445,7 @@ floating point support." nil) ((or (<= seconds 0) ;; We are going to call read-event below, which will record - ;; the the next key as part of the macro, even if that key + ;; the next key as part of the macro, even if that key ;; invokes kmacro-end-macro, so if we are recording a macro, ;; the macro will recursively call itself. In addition, when ;; that key is removed from unread-command-events, it will be diff --git a/lisp/textmodes/dns-mode.el b/lisp/textmodes/dns-mode.el index df03beaa9a3..6b668a62674 100644 --- a/lisp/textmodes/dns-mode.el +++ b/lisp/textmodes/dns-mode.el @@ -35,6 +35,7 @@ ;; RFC 5155, "DNS Security (DNSSEC) Hashed Authenticated Denial of Existence" ;; RFC 6698, "The DNS-Based Authentication of Named Entities (DANE) ;; Transport Layer Security (TLS) Protocol: TLSA" +;; RFC 6844, "DNS Certification Authority Authorization (CAA) Resource Record" ;;; Release history: @@ -62,7 +63,7 @@ "A6" "DNAME" "SINK" "OPT" "APL" "DS" "SSHFP" "RRSIG" "NSEC" "DNSKEY" "UINFO" "UID" "GID" "UNSPEC" "TKEY" "TSIG" "IXFR" "AXFR" "MAILB" - "MAILA" "TLSA" "NSEC3") + "MAILA" "TLSA" "NSEC3" "CAA") "List of strings with known DNS types.") (defface dns-mode-control-entity '((t :inherit font-lock-keyword-face)) diff --git a/lisp/textmodes/mhtml-mode.el b/lisp/textmodes/mhtml-mode.el index b6cd1572fb7..58541677509 100644 --- a/lisp/textmodes/mhtml-mode.el +++ b/lisp/textmodes/mhtml-mode.el @@ -75,11 +75,11 @@ code(); (defconst mhtml--crucial-variable-prefix (regexp-opt '("comment-" "uncomment-" "electric-indent-" - "smie-" "forward-sexp-function")) + "smie-" "forward-sexp-function" "completion-" "major-mode")) "Regexp matching the prefix of \"crucial\" buffer-locals we want to capture.") (defconst mhtml--variable-prefix - (regexp-opt '("font-lock-" "indent-line-function" "major-mode")) + (regexp-opt '("font-lock-" "indent-line-function")) "Regexp matching the prefix of buffer-locals we want to capture.") (defun mhtml--construct-submode (mode &rest args) @@ -149,7 +149,12 @@ code(); (defun mhtml--submode-lighter () "Mode-line lighter indicating the current submode." - (let ((submode (get-text-property (point) 'mhtml-submode))) + ;; The end of the buffer has no text properties, so in this case + ;; back up one character, if possible. + (let* ((where (if (and (eobp) (not (bobp))) + (1- (point)) + (point))) + (submode (get-text-property where 'mhtml-submode))) (if submode (mhtml--submode-name submode) ""))) @@ -288,9 +293,7 @@ can function properly.") (unless (bobp) (let ((submode (get-text-property (1- (point)) 'mhtml-submode))) (if submode - ;; Don't search in a comment or string - (unless (syntax-ppss-context (syntax-ppss)) - (mhtml--syntax-propertize-submode submode end)) + (mhtml--syntax-propertize-submode submode end) ;; No submode, so do what sgml-mode does. (sgml-syntax-propertize-inside end)))) (funcall diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el index 948743e8e5b..3da6e4e1124 100644 --- a/lisp/textmodes/tex-mode.el +++ b/lisp/textmodes/tex-mode.el @@ -55,6 +55,11 @@ :prefix "tex-" :group 'tex) +(defgroup tex-flymake nil + "Flymake backend for linting TeX files." + :prefix "tex-" + :group 'tex) + ;;;###autoload (defcustom tex-shell-file-name nil "If non-nil, the shell file name to run in the subshell used to run TeX." @@ -259,6 +264,17 @@ measured relative to that of the normal text." (float :tag "Superscript")) :version "23.1") +(defcustom tex-chktex-program "chktex" + "ChkTeX executable to use for linting TeX files." + :type 'string + :link '(url-link "man:chktex(1)") + :group 'tex-flymake) + +(defcustom tex-chktex-extra-flags nil + "Extra command line flags for `tex-chktex-program'." + :type '(repeat string) + :group 'tex-flymake) + (defvar tex-last-temp-file nil "Latest temporary file generated by \\[tex-region] and \\[tex-buffer]. Deleted when the \\[tex-region] or \\[tex-buffer] is next run, or when the @@ -1154,6 +1170,7 @@ subshell is initiated, `tex-shell-hook' is run." (setq-local fill-indent-according-to-mode t) (add-hook 'completion-at-point-functions #'latex-complete-data nil 'local) + (add-hook 'flymake-diagnostic-functions 'tex-chktex nil t) (setq-local outline-regexp latex-outline-regexp) (setq-local outline-level #'latex-outline-level) (setq-local forward-sexp-function #'latex-forward-sexp) @@ -3465,6 +3482,52 @@ There might be text before point." ;; Don't compose inside verbatim blocks. (eq 2 (nth 7 (syntax-ppss)))))))) + +;;; Flymake support + +(defvar-local tex-chktex--process nil) + +(defun tex-chktex-command () + "Return a list of command arguments for invoking ChkTeX." + `(,tex-chktex-program ,@tex-chktex-extra-flags + "--quiet" "--verbosity=0" "--inputfiles")) + +(defun tex-chktex (report-fn &rest _args) + "Flymake backend for linting TeX buffers with ChkTeX." + (unless (executable-find tex-chktex-program) + (error "Cannot find a suitable TeX checker")) + (when (process-live-p tex-chktex--process) + (kill-process tex-chktex--process)) + (let ((source (current-buffer)) + (re "^stdin:\\([0-9]+\\):\\([0-9]+\\):\\([0-9]+\\):\\(.*\\)$")) + (save-restriction + (widen) + (setq tex-chktex--process + (make-process + :name "tex-chktex" + :buffer (generate-new-buffer "*tex-chktex*") + :command (tex-chktex-command) + :noquery t :connection-type 'pipe + :sentinel + (lambda (process _event) + (when (eq (process-status process) 'exit) + (unwind-protect + (when (eq process tex-chktex--process) + (with-current-buffer (process-buffer process) + (goto-char (point-min)) + (cl-loop + while (search-forward-regexp re nil t) + for msg = (match-string 4) + for line = (string-to-number (match-string 1)) + for col = (string-to-number (match-string 2)) + for (beg . end) = (flymake-diag-region source line col) + collect (flymake-make-diagnostic source beg end :warning msg) + into diags + finally (funcall report-fn diags)))) + (kill-buffer (process-buffer process))))))) + (process-send-region tex-chktex--process (point-min) (point-max)) + (process-send-eof tex-chktex--process)))) + (run-hooks 'tex-mode-load-hook) (provide 'tex-mode) diff --git a/lisp/textmodes/texinfmt.el b/lisp/textmodes/texinfmt.el index 647ae1b4300..51f0659bf31 100644 --- a/lisp/textmodes/texinfmt.el +++ b/lisp/textmodes/texinfmt.el @@ -2022,7 +2022,7 @@ commands that are defined in texinfo.tex for printed output. (push (- end-of-template start-of-template) texinfo-multitable-width-list) ;; Remove carriage return from within a template, if any. - ;; This helps those those who want to use more than + ;; This helps those who want to use more than ;; one line's worth of words in @multitable line. (narrow-to-region start-of-template end-of-template) (goto-char (point-min)) diff --git a/lisp/url/url-queue.el b/lisp/url/url-queue.el index 06a77404b58..84da6f60260 100644 --- a/lisp/url/url-queue.el +++ b/lisp/url/url-queue.el @@ -177,7 +177,7 @@ The variable `url-queue-timeout' sets a timeout." (with-current-buffer (if (and (bufferp (url-queue-buffer job)) (buffer-live-p (url-queue-buffer job))) - ;; Use the (partially filled) process buffer it it exists. + ;; Use the (partially filled) process buffer if it exists. (url-queue-buffer job) ;; If not, just create a new buffer, which will probably be ;; killed again by the caller. diff --git a/lisp/vc/ediff-wind.el b/lisp/vc/ediff-wind.el index 45497688487..79ccc6d32db 100644 --- a/lisp/vc/ediff-wind.el +++ b/lisp/vc/ediff-wind.el @@ -181,6 +181,8 @@ In this case, Ediff will use those frames to display these buffers." '(visibility . nil) ;; make initial frame small to avoid distraction '(width . 1) '(height . 1) + ;; Fullscreen control frames don't make sense (Bug#29026). + '(fullscreen . nil) ;; this blocks queries from window manager as to where to put ;; ediff's control frame. we put the frame outside the display, ;; so the initial frame won't jump all over the screen diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index b80f0e69491..211feddc55d 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -2377,6 +2377,7 @@ When called interactively with a prefix argument, prompt for LIMIT." ;;;###autoload (defun vc-print-branch-log (branch) + "Show the change log for BRANCH in a window." (interactive (list (vc-read-revision "Branch to log: "))) diff --git a/lisp/whitespace.el b/lisp/whitespace.el index 629c1063d0b..32a90ba485b 100644 --- a/lisp/whitespace.el +++ b/lisp/whitespace.el @@ -495,7 +495,8 @@ Used when `whitespace-style' includes the value `spaces'.") (defvar whitespace-tab 'whitespace-tab "Symbol face used to visualize TAB. Used when `whitespace-style' includes the value `tabs'.") -(make-obsolete-variable 'whitespace-tab "use the face instead." "24.4") +(make-obsolete-variable 'whitespace-tab + "customize the face `whitespace-tab' instead." "24.4") (defface whitespace-tab '((((class color) (background dark)) diff --git a/lisp/window.el b/lisp/window.el index c0a9ecd093c..f87294ceb15 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -2583,7 +2583,7 @@ and no others." (defun minibuffer-window-active-p (window) "Return t if WINDOW is the currently active minibuffer window." - (eq window (active-minibuffer-window))) + (and (window-live-p window) (eq window (active-minibuffer-window)))) (defun count-windows (&optional minibuf) "Return the number of live windows on the selected frame. @@ -8021,7 +8021,7 @@ parameters of FRAME." (- (nth 3 outer-edges) (nth 1 outer-edges)) ;; Another poor guess. (frame-pixel-height frame))) - ;; The text size of of FRAME. Needed to specify FRAME's + ;; The text size of FRAME. Needed to specify FRAME's ;; text size after the root window's body's new sizes have ;; been calculated. (text-width (frame-text-width frame)) @@ -8678,7 +8678,7 @@ result is a list containing only the selected window." (make-variable-buffer-local 'move-to-window-group-line-function) (put 'move-to-window-group-line-function 'permanent-local t) (defun move-to-window-group-line (arg) - "Position point relative to the the current group of windows. + "Position point relative to the current group of windows. When a grouping mode (such as Follow Mode) is not active, this function is identical to `move-to-window-line'. |