2013-12-19 14:00:55 +00:00
|
|
|
;;; hl-line.el --- highlight the current line -*- lexical-binding:t -*-
|
1999-07-19 22:03:26 +00:00
|
|
|
|
2021-01-01 09:13:56 +00:00
|
|
|
;; Copyright (C) 1998, 2000-2021 Free Software Foundation, Inc.
|
1999-07-19 22:03:26 +00:00
|
|
|
|
2019-05-26 07:58:28 +00:00
|
|
|
;; Author: Dave Love <fx@gnu.org>
|
2019-05-25 20:43:06 +00:00
|
|
|
;; Maintainer: emacs-devel@gnu.org
|
1999-07-19 22:03:26 +00:00
|
|
|
;; Created: 1998-09-13
|
2010-06-26 21:01:38 +00:00
|
|
|
;; Keywords: faces, frames, emulations
|
1999-07-19 22:03:26 +00:00
|
|
|
|
2000-05-22 19:00:13 +00:00
|
|
|
;; This file is part of GNU Emacs.
|
|
|
|
|
2008-05-06 08:06:51 +00:00
|
|
|
;; GNU Emacs is free software: you can redistribute it and/or modify
|
1999-07-19 22:03:26 +00:00
|
|
|
;; it under the terms of the GNU General Public License as published by
|
2008-05-06 08:06:51 +00:00
|
|
|
;; the Free Software Foundation, either version 3 of the License, or
|
|
|
|
;; (at your option) any later version.
|
1999-07-19 22:03:26 +00:00
|
|
|
|
2000-05-22 19:00:13 +00:00
|
|
|
;; GNU Emacs is distributed in the hope that it will be useful,
|
1999-07-19 22:03:26 +00:00
|
|
|
;; 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
|
2017-09-13 22:52:52 +00:00
|
|
|
;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
|
1999-07-19 22:03:26 +00:00
|
|
|
|
|
|
|
;;; Commentary:
|
|
|
|
|
2003-09-13 09:49:46 +00:00
|
|
|
;; Provides a local minor mode (toggled by M-x hl-line-mode) and
|
|
|
|
;; a global minor mode (toggled by M-x global-hl-line-mode) to
|
2003-05-15 13:22:15 +00:00
|
|
|
;; highlight, on a suitable terminal, the line on which point is. The
|
|
|
|
;; global mode highlights the current line in the selected window only
|
|
|
|
;; (except when the minibuffer window is selected). This was
|
|
|
|
;; implemented to satisfy a request for a feature of Lesser Editors.
|
|
|
|
;; The local mode is sticky: it highlights the line about the buffer's
|
|
|
|
;; point even if the buffer's window is not selected. Caveat: the
|
|
|
|
;; buffer's point might be different from the point of a non-selected
|
|
|
|
;; window. Set the variable `hl-line-sticky-flag' to nil to make the
|
|
|
|
;; local mode behave like the global mode.
|
|
|
|
|
|
|
|
;; You probably don't really want to use the global mode; if the
|
2008-06-27 02:41:14 +00:00
|
|
|
;; cursor is difficult to spot, try changing its color, relying on
|
2003-05-15 13:22:15 +00:00
|
|
|
;; `blink-cursor-mode' or both. The hookery used might affect
|
|
|
|
;; response noticeably on a slow machine. The local mode may be
|
|
|
|
;; useful in non-editing buffers such as Gnus or PCL-CVS though.
|
|
|
|
|
|
|
|
;; An overlay is used. In the non-sticky cases, this overlay is
|
|
|
|
;; active only on the selected window. A hook is added to
|
|
|
|
;; `post-command-hook' to activate the overlay and move it to the line
|
2021-01-23 18:38:42 +00:00
|
|
|
;; about point.
|
2003-05-15 13:22:15 +00:00
|
|
|
|
2003-10-13 16:29:53 +00:00
|
|
|
;; You could make variable `global-hl-line-mode' buffer-local and set
|
|
|
|
;; it to nil to avoid highlighting specific buffers, when the global
|
|
|
|
;; mode is used.
|
|
|
|
|
2006-01-22 08:56:43 +00:00
|
|
|
;; By default the whole line is highlighted. The range of highlighting
|
2005-02-09 15:50:47 +00:00
|
|
|
;; can be changed by defining an appropriate function as the
|
2004-03-15 07:27:02 +00:00
|
|
|
;; buffer-local value of `hl-line-range-function'.
|
|
|
|
|
1999-07-19 22:03:26 +00:00
|
|
|
;;; Code:
|
|
|
|
|
2013-12-19 14:00:55 +00:00
|
|
|
(defvar-local hl-line-overlay nil
|
2006-08-29 13:28:00 +00:00
|
|
|
"Overlay used by Hl-Line mode to highlight the current line.")
|
|
|
|
|
2014-01-06 20:54:37 +00:00
|
|
|
(defvar-local global-hl-line-overlay nil
|
2006-08-29 13:28:00 +00:00
|
|
|
"Overlay used by Global-Hl-Line mode to highlight the current line.")
|
|
|
|
|
2014-01-06 20:54:37 +00:00
|
|
|
(defvar global-hl-line-overlays nil
|
|
|
|
"Overlays used by Global-Hl-Line mode in various buffers.
|
|
|
|
Global-Hl-Line keeps displaying one overlay in each buffer
|
|
|
|
when `global-hl-line-sticky-flag' is non-nil.")
|
|
|
|
|
1999-07-19 22:03:26 +00:00
|
|
|
(defgroup hl-line nil
|
2001-01-03 20:18:33 +00:00
|
|
|
"Highlight the current line."
|
1999-08-04 19:07:31 +00:00
|
|
|
:version "21.1"
|
2010-03-12 17:47:22 +00:00
|
|
|
:group 'convenience)
|
1999-07-19 22:03:26 +00:00
|
|
|
|
2006-08-29 13:28:00 +00:00
|
|
|
(defface hl-line
|
2019-09-14 21:46:10 +00:00
|
|
|
'((t :inherit highlight :extend t))
|
2006-08-29 13:28:00 +00:00
|
|
|
"Default face for highlighting the current line in Hl-Line mode."
|
|
|
|
:version "22.1"
|
1999-07-19 22:03:26 +00:00
|
|
|
:group 'hl-line)
|
|
|
|
|
2006-08-29 13:28:00 +00:00
|
|
|
(defcustom hl-line-face 'hl-line
|
|
|
|
"Face with which to highlight the current line in Hl-Line mode."
|
|
|
|
:type 'face
|
|
|
|
:group 'hl-line
|
|
|
|
:set (lambda (symbol value)
|
|
|
|
(set symbol value)
|
|
|
|
(dolist (buffer (buffer-list))
|
|
|
|
(with-current-buffer buffer
|
2021-01-23 18:38:42 +00:00
|
|
|
(when (overlayp hl-line-overlay)
|
2006-08-29 13:28:00 +00:00
|
|
|
(overlay-put hl-line-overlay 'face hl-line-face))))
|
2021-01-23 18:38:42 +00:00
|
|
|
(when (overlayp global-hl-line-overlay)
|
2006-08-29 13:28:00 +00:00
|
|
|
(overlay-put global-hl-line-overlay 'face hl-line-face))))
|
|
|
|
|
2003-05-15 13:22:15 +00:00
|
|
|
(defcustom hl-line-sticky-flag t
|
2011-06-26 20:25:53 +00:00
|
|
|
"Non-nil means the HL-Line mode highlight appears in all windows.
|
2003-05-15 13:22:15 +00:00
|
|
|
Otherwise Hl-Line mode will highlight only in the selected
|
|
|
|
window. Setting this variable takes effect the next time you use
|
2011-06-26 20:25:53 +00:00
|
|
|
the command `hl-line-mode' to turn Hl-Line mode on.
|
|
|
|
|
|
|
|
This variable has no effect in Global Highlight Line mode.
|
|
|
|
For that, use `global-hl-line-sticky-flag'."
|
2003-05-15 13:22:15 +00:00
|
|
|
:type 'boolean
|
2005-02-09 15:50:47 +00:00
|
|
|
:version "22.1"
|
2003-05-15 13:22:15 +00:00
|
|
|
:group 'hl-line)
|
|
|
|
|
2011-06-26 20:25:53 +00:00
|
|
|
(defcustom global-hl-line-sticky-flag nil
|
|
|
|
"Non-nil means the Global HL-Line mode highlight appears in all windows.
|
|
|
|
Otherwise Global Hl-Line mode will highlight only in the selected
|
|
|
|
window. Setting this variable takes effect the next time you use
|
|
|
|
the command `global-hl-line-mode' to turn Global Hl-Line mode on."
|
|
|
|
:type 'boolean
|
|
|
|
:version "24.1"
|
|
|
|
:group 'hl-line)
|
|
|
|
|
2004-03-15 07:27:02 +00:00
|
|
|
(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
|
2005-02-09 15:50:47 +00:00
|
|
|
is the beginning position of highlight and its cdr value is the
|
2004-03-15 07:27:02 +00:00
|
|
|
end position of highlight in the buffer.
|
|
|
|
It should return nil if there's no region to be highlighted.
|
|
|
|
|
|
|
|
This variable is expected to be made buffer-local by modes.")
|
|
|
|
|
2016-05-26 09:30:29 +00:00
|
|
|
(defvar hl-line-overlay-buffer nil
|
|
|
|
"Most recently visited buffer in which Hl-Line mode is enabled.")
|
|
|
|
|
2021-06-01 08:29:33 +00:00
|
|
|
(defvar hl-line-overlay-priority -50
|
|
|
|
"Priority used on the overlay used by hl-line.")
|
|
|
|
|
1999-07-23 23:01:06 +00:00
|
|
|
;;;###autoload
|
2000-06-01 18:26:34 +00:00
|
|
|
(define-minor-mode hl-line-mode
|
Fix minor mode docstrings for the new meaning of a nil ARG.
* abbrev.el (abbrev-mode):
* allout.el (allout-mode):
* autoinsert.el (auto-insert-mode):
* autoarg.el (autoarg-mode, autoarg-kp-mode):
* autorevert.el (auto-revert-mode, auto-revert-tail-mode)
(global-auto-revert-mode):
* battery.el (display-battery-mode):
* composite.el (global-auto-composition-mode)
(auto-composition-mode):
* delsel.el (delete-selection-mode):
* desktop.el (desktop-save-mode):
* dired-x.el (dired-omit-mode):
* dirtrack.el (dirtrack-mode):
* doc-view.el (doc-view-minor-mode):
* double.el (double-mode):
* electric.el (electric-indent-mode, electric-pair-mode):
* emacs-lock.el (emacs-lock-mode):
* epa-hook.el (auto-encryption-mode):
* follow.el (follow-mode):
* font-core.el (font-lock-mode):
* frame.el (auto-raise-mode, auto-lower-mode, blink-cursor-mode):
* help.el (temp-buffer-resize-mode):
* hilit-chg.el (highlight-changes-mode)
(highlight-changes-visible-mode):
* hi-lock.el (hi-lock-mode):
* hl-line.el (hl-line-mode, global-hl-line-mode):
* icomplete.el (icomplete-mode):
* ido.el (ido-everywhere):
* image-file.el (auto-image-file-mode):
* image-mode.el (image-minor-mode):
* iswitchb.el (iswitchb-mode):
* jka-cmpr-hook.el (auto-compression-mode):
* linum.el (linum-mode):
* longlines.el (longlines-mode):
* master.el (master-mode):
* mb-depth.el (minibuffer-depth-indicate-mode):
* menu-bar.el (menu-bar-mode):
* minibuf-eldef.el (minibuffer-electric-default-mode):
* mouse-sel.el (mouse-sel-mode):
* msb.el (msb-mode):
* mwheel.el (mouse-wheel-mode):
* outline.el (outline-minor-mode):
* paren.el (show-paren-mode):
* recentf.el (recentf-mode):
* reveal.el (reveal-mode, global-reveal-mode):
* rfn-eshadow.el (file-name-shadow-mode):
* ruler-mode.el (ruler-mode):
* savehist.el (savehist-mode):
* scroll-all.el (scroll-all-mode):
* scroll-bar.el (scroll-bar-mode):
* server.el (server-mode):
* shell.el (shell-dirtrack-mode):
* simple.el (auto-fill-mode, transient-mark-mode)
(visual-line-mode, overwrite-mode, binary-overwrite-mode)
(line-number-mode, column-number-mode, size-indication-mode)
(auto-save-mode, normal-erase-is-backspace-mode, visible-mode):
* strokes.el (strokes-mode):
* time.el (display-time-mode):
* t-mouse.el (gpm-mouse-mode):
* tool-bar.el (tool-bar-mode):
* tooltip.el (tooltip-mode):
* type-break.el (type-break-mode-line-message-mode)
(type-break-query-mode):
* view.el (view-mode):
* whitespace.el (whitespace-mode, whitespace-newline-mode)
(global-whitespace-mode, global-whitespace-newline-mode):
* xt-mouse.el (xterm-mouse-mode): Doc fix.
* emacs-lisp/easy-mmode.el (define-globalized-minor-mode): Fix
autogenerated docstring.
2011-10-19 12:54:24 +00:00
|
|
|
"Toggle highlighting of the current line (Hl-Line mode).
|
2003-05-15 13:22:15 +00:00
|
|
|
|
Fix minor mode docstrings for the new meaning of a nil ARG.
* abbrev.el (abbrev-mode):
* allout.el (allout-mode):
* autoinsert.el (auto-insert-mode):
* autoarg.el (autoarg-mode, autoarg-kp-mode):
* autorevert.el (auto-revert-mode, auto-revert-tail-mode)
(global-auto-revert-mode):
* battery.el (display-battery-mode):
* composite.el (global-auto-composition-mode)
(auto-composition-mode):
* delsel.el (delete-selection-mode):
* desktop.el (desktop-save-mode):
* dired-x.el (dired-omit-mode):
* dirtrack.el (dirtrack-mode):
* doc-view.el (doc-view-minor-mode):
* double.el (double-mode):
* electric.el (electric-indent-mode, electric-pair-mode):
* emacs-lock.el (emacs-lock-mode):
* epa-hook.el (auto-encryption-mode):
* follow.el (follow-mode):
* font-core.el (font-lock-mode):
* frame.el (auto-raise-mode, auto-lower-mode, blink-cursor-mode):
* help.el (temp-buffer-resize-mode):
* hilit-chg.el (highlight-changes-mode)
(highlight-changes-visible-mode):
* hi-lock.el (hi-lock-mode):
* hl-line.el (hl-line-mode, global-hl-line-mode):
* icomplete.el (icomplete-mode):
* ido.el (ido-everywhere):
* image-file.el (auto-image-file-mode):
* image-mode.el (image-minor-mode):
* iswitchb.el (iswitchb-mode):
* jka-cmpr-hook.el (auto-compression-mode):
* linum.el (linum-mode):
* longlines.el (longlines-mode):
* master.el (master-mode):
* mb-depth.el (minibuffer-depth-indicate-mode):
* menu-bar.el (menu-bar-mode):
* minibuf-eldef.el (minibuffer-electric-default-mode):
* mouse-sel.el (mouse-sel-mode):
* msb.el (msb-mode):
* mwheel.el (mouse-wheel-mode):
* outline.el (outline-minor-mode):
* paren.el (show-paren-mode):
* recentf.el (recentf-mode):
* reveal.el (reveal-mode, global-reveal-mode):
* rfn-eshadow.el (file-name-shadow-mode):
* ruler-mode.el (ruler-mode):
* savehist.el (savehist-mode):
* scroll-all.el (scroll-all-mode):
* scroll-bar.el (scroll-bar-mode):
* server.el (server-mode):
* shell.el (shell-dirtrack-mode):
* simple.el (auto-fill-mode, transient-mark-mode)
(visual-line-mode, overwrite-mode, binary-overwrite-mode)
(line-number-mode, column-number-mode, size-indication-mode)
(auto-save-mode, normal-erase-is-backspace-mode, visible-mode):
* strokes.el (strokes-mode):
* time.el (display-time-mode):
* t-mouse.el (gpm-mouse-mode):
* tool-bar.el (tool-bar-mode):
* tooltip.el (tooltip-mode):
* type-break.el (type-break-mode-line-message-mode)
(type-break-query-mode):
* view.el (view-mode):
* whitespace.el (whitespace-mode, whitespace-newline-mode)
(global-whitespace-mode, global-whitespace-newline-mode):
* xt-mouse.el (xterm-mouse-mode): Doc fix.
* emacs-lisp/easy-mmode.el (define-globalized-minor-mode): Fix
autogenerated docstring.
2011-10-19 12:54:24 +00:00
|
|
|
Hl-Line mode is a buffer-local minor mode. If
|
|
|
|
`hl-line-sticky-flag' is non-nil, Hl-Line mode highlights the
|
2003-05-15 13:22:15 +00:00
|
|
|
line about the buffer's point in all windows. Caveat: the
|
|
|
|
buffer's point might be different from the point of a
|
|
|
|
non-selected window. Hl-Line mode uses the function
|
|
|
|
`hl-line-highlight' on `post-command-hook' in this case.
|
|
|
|
|
|
|
|
When `hl-line-sticky-flag' is nil, Hl-Line mode highlights the
|
2021-01-23 18:38:42 +00:00
|
|
|
line about point in the selected window only."
|
2005-04-04 08:57:54 +00:00
|
|
|
:group 'hl-line
|
2000-06-01 18:26:34 +00:00
|
|
|
(if hl-line-mode
|
|
|
|
(progn
|
2003-05-15 13:22:15 +00:00
|
|
|
;; In case `kill-all-local-variables' is called.
|
|
|
|
(add-hook 'change-major-mode-hook #'hl-line-unhighlight nil t)
|
|
|
|
(hl-line-highlight)
|
2016-05-26 09:30:29 +00:00
|
|
|
(setq hl-line-overlay-buffer (current-buffer))
|
2021-01-23 18:38:42 +00:00
|
|
|
(add-hook 'post-command-hook #'hl-line-highlight nil t))
|
2003-05-15 13:22:15 +00:00
|
|
|
(remove-hook 'post-command-hook #'hl-line-highlight t)
|
2000-06-01 18:26:34 +00:00
|
|
|
(hl-line-unhighlight)
|
2021-01-23 18:38:42 +00:00
|
|
|
(remove-hook 'change-major-mode-hook #'hl-line-unhighlight t)))
|
2001-08-24 11:19:44 +00:00
|
|
|
|
2013-12-19 14:00:55 +00:00
|
|
|
(defun hl-line-make-overlay ()
|
|
|
|
(let ((ol (make-overlay (point) (point))))
|
2021-06-01 08:29:33 +00:00
|
|
|
(overlay-put ol 'priority hl-line-overlay-priority) ;(bug#16192)
|
2013-12-19 14:00:55 +00:00
|
|
|
(overlay-put ol 'face hl-line-face)
|
|
|
|
ol))
|
|
|
|
|
2002-02-01 04:18:46 +00:00
|
|
|
(defun hl-line-highlight ()
|
2006-01-22 08:56:43 +00:00
|
|
|
"Activate the Hl-Line overlay on the current line."
|
2003-05-15 13:22:15 +00:00
|
|
|
(if hl-line-mode ; Might be changed outside the mode function.
|
|
|
|
(progn
|
2021-01-23 18:38:42 +00:00
|
|
|
(unless (overlayp hl-line-overlay)
|
2013-12-19 14:00:55 +00:00
|
|
|
(setq hl-line-overlay (hl-line-make-overlay))) ; To be moved.
|
2003-05-15 13:22:15 +00:00
|
|
|
(overlay-put hl-line-overlay
|
|
|
|
'window (unless hl-line-sticky-flag (selected-window)))
|
2021-01-23 18:38:42 +00:00
|
|
|
(hl-line-move hl-line-overlay)
|
|
|
|
(hl-line-maybe-unhighlight))
|
2003-05-15 13:22:15 +00:00
|
|
|
(hl-line-unhighlight)))
|
2002-02-01 04:18:46 +00:00
|
|
|
|
|
|
|
(defun hl-line-unhighlight ()
|
2003-05-15 13:22:15 +00:00
|
|
|
"Deactivate the Hl-Line overlay on the current line."
|
2021-01-23 18:38:42 +00:00
|
|
|
(when (overlayp hl-line-overlay)
|
|
|
|
(delete-overlay hl-line-overlay)
|
|
|
|
(setq hl-line-overlay nil)))
|
2002-02-01 04:18:46 +00:00
|
|
|
|
2016-05-26 09:30:29 +00:00
|
|
|
(defun hl-line-maybe-unhighlight ()
|
|
|
|
"Maybe deactivate the Hl-Line overlay on the current line.
|
|
|
|
Specifically, when `hl-line-sticky-flag' is nil deactivate all
|
|
|
|
such overlays in all buffers except the current one."
|
|
|
|
(let ((hlob hl-line-overlay-buffer)
|
|
|
|
(curbuf (current-buffer)))
|
2017-01-28 19:49:19 +00:00
|
|
|
(when (and (buffer-live-p hlob)
|
|
|
|
(not hl-line-sticky-flag)
|
2016-05-26 09:30:29 +00:00
|
|
|
(not (eq curbuf hlob))
|
|
|
|
(not (minibufferp)))
|
|
|
|
(with-current-buffer hlob
|
2021-01-23 18:38:42 +00:00
|
|
|
(hl-line-unhighlight)))
|
2016-05-26 09:30:29 +00:00
|
|
|
(when (and (overlayp hl-line-overlay)
|
|
|
|
(eq (overlay-buffer hl-line-overlay) curbuf))
|
|
|
|
(setq hl-line-overlay-buffer curbuf))))
|
|
|
|
|
2003-05-15 13:22:15 +00:00
|
|
|
;;;###autoload
|
|
|
|
(define-minor-mode global-hl-line-mode
|
Fix minor mode docstrings for the new meaning of a nil ARG.
* abbrev.el (abbrev-mode):
* allout.el (allout-mode):
* autoinsert.el (auto-insert-mode):
* autoarg.el (autoarg-mode, autoarg-kp-mode):
* autorevert.el (auto-revert-mode, auto-revert-tail-mode)
(global-auto-revert-mode):
* battery.el (display-battery-mode):
* composite.el (global-auto-composition-mode)
(auto-composition-mode):
* delsel.el (delete-selection-mode):
* desktop.el (desktop-save-mode):
* dired-x.el (dired-omit-mode):
* dirtrack.el (dirtrack-mode):
* doc-view.el (doc-view-minor-mode):
* double.el (double-mode):
* electric.el (electric-indent-mode, electric-pair-mode):
* emacs-lock.el (emacs-lock-mode):
* epa-hook.el (auto-encryption-mode):
* follow.el (follow-mode):
* font-core.el (font-lock-mode):
* frame.el (auto-raise-mode, auto-lower-mode, blink-cursor-mode):
* help.el (temp-buffer-resize-mode):
* hilit-chg.el (highlight-changes-mode)
(highlight-changes-visible-mode):
* hi-lock.el (hi-lock-mode):
* hl-line.el (hl-line-mode, global-hl-line-mode):
* icomplete.el (icomplete-mode):
* ido.el (ido-everywhere):
* image-file.el (auto-image-file-mode):
* image-mode.el (image-minor-mode):
* iswitchb.el (iswitchb-mode):
* jka-cmpr-hook.el (auto-compression-mode):
* linum.el (linum-mode):
* longlines.el (longlines-mode):
* master.el (master-mode):
* mb-depth.el (minibuffer-depth-indicate-mode):
* menu-bar.el (menu-bar-mode):
* minibuf-eldef.el (minibuffer-electric-default-mode):
* mouse-sel.el (mouse-sel-mode):
* msb.el (msb-mode):
* mwheel.el (mouse-wheel-mode):
* outline.el (outline-minor-mode):
* paren.el (show-paren-mode):
* recentf.el (recentf-mode):
* reveal.el (reveal-mode, global-reveal-mode):
* rfn-eshadow.el (file-name-shadow-mode):
* ruler-mode.el (ruler-mode):
* savehist.el (savehist-mode):
* scroll-all.el (scroll-all-mode):
* scroll-bar.el (scroll-bar-mode):
* server.el (server-mode):
* shell.el (shell-dirtrack-mode):
* simple.el (auto-fill-mode, transient-mark-mode)
(visual-line-mode, overwrite-mode, binary-overwrite-mode)
(line-number-mode, column-number-mode, size-indication-mode)
(auto-save-mode, normal-erase-is-backspace-mode, visible-mode):
* strokes.el (strokes-mode):
* time.el (display-time-mode):
* t-mouse.el (gpm-mouse-mode):
* tool-bar.el (tool-bar-mode):
* tooltip.el (tooltip-mode):
* type-break.el (type-break-mode-line-message-mode)
(type-break-query-mode):
* view.el (view-mode):
* whitespace.el (whitespace-mode, whitespace-newline-mode)
(global-whitespace-mode, global-whitespace-newline-mode):
* xt-mouse.el (xterm-mouse-mode): Doc fix.
* emacs-lisp/easy-mmode.el (define-globalized-minor-mode): Fix
autogenerated docstring.
2011-10-19 12:54:24 +00:00
|
|
|
"Toggle line highlighting in all buffers (Global Hl-Line mode).
|
2003-05-15 13:22:15 +00:00
|
|
|
|
2011-06-26 20:25:53 +00:00
|
|
|
If `global-hl-line-sticky-flag' is non-nil, Global Hl-Line mode
|
2016-05-26 09:30:29 +00:00
|
|
|
highlights the line about the current buffer's point in all live
|
2011-06-26 20:25:53 +00:00
|
|
|
windows.
|
|
|
|
|
2021-01-23 18:38:42 +00:00
|
|
|
Global-Hl-Line mode uses the function `global-hl-line-highlight'
|
|
|
|
on `post-command-hook'."
|
2003-05-15 13:22:15 +00:00
|
|
|
:global t
|
|
|
|
:group 'hl-line
|
|
|
|
(if global-hl-line-mode
|
|
|
|
(progn
|
2014-01-06 20:54:37 +00:00
|
|
|
;; In case `kill-all-local-variables' is called.
|
|
|
|
(add-hook 'change-major-mode-hook #'global-hl-line-unhighlight)
|
2016-05-26 09:30:29 +00:00
|
|
|
(global-hl-line-highlight-all)
|
2021-01-23 18:38:42 +00:00
|
|
|
(add-hook 'post-command-hook #'global-hl-line-highlight))
|
2014-01-06 20:54:37 +00:00
|
|
|
(global-hl-line-unhighlight-all)
|
2016-05-26 09:30:29 +00:00
|
|
|
(remove-hook 'post-command-hook #'global-hl-line-highlight)
|
2021-01-23 18:38:42 +00:00
|
|
|
(remove-hook 'change-major-mode-hook #'global-hl-line-unhighlight)))
|
2003-05-15 13:22:15 +00:00
|
|
|
|
|
|
|
(defun global-hl-line-highlight ()
|
2009-12-05 20:56:42 +00:00
|
|
|
"Highlight the current line in the current window."
|
2003-05-15 13:22:15 +00:00
|
|
|
(when global-hl-line-mode ; Might be changed outside the mode function.
|
Do not call to `selected-window' where it is assumed by default.
Affected functions are `window-minibuffer-p', `window-dedicated-p',
`window-hscroll', `window-width', `window-height', `window-buffer',
`window-frame', `window-start', `window-point', `next-window'
and `window-display-table'.
* abbrev.el (abbrev--default-expand):
* bs.el (bs--show-with-configuration):
* buff-menu.el (Buffer-menu-mouse-select):
* calc/calc.el (calc):
* calendar/calendar.el (calendar-generate-window):
* calendar/diary-lib.el (diary-simple-display, diary-show-all-entries)
(diary-make-entry):
* comint.el (send-invisible, comint-dynamic-complete-filename)
(comint-dynamic-simple-complete, comint-dynamic-list-completions):
* completion.el (complete):
* dabbrev.el (dabbrev-expand, dabbrev--make-friend-buffer-list):
* disp-table.el (describe-current-display-table):
* doc-view.el (doc-view-insert-image):
* ebuff-menu.el (Electric-buffer-menu-mouse-select):
* ehelp.el (with-electric-help):
* emacs-lisp/easy-mmode.el (easy-mmode-define-navigation):
* emacs-lisp/edebug.el (edebug-two-window-p, edebug-pop-to-buffer):
* emacs-lisp/helper.el (Helper-help-scroller):
* emulation/cua-base.el (cua--post-command-handler-1):
* eshell/esh-mode.el (eshell-output-filter):
* ffap.el (ffap-gnus-wrapper):
* help-macro.el (make-help-screen):
* hilit-chg.el (highlight-compare-buffers):
* hippie-exp.el (hippie-expand, try-expand-dabbrev-visible):
* hl-line.el (global-hl-line-highlight):
* icomplete.el (icomplete-simple-completing-p):
* isearch.el (isearch-done):
* jit-lock.el (jit-lock-stealth-fontify):
* mail/rmailsum.el (rmail-summary-scroll-msg-up):
* lisp/mouse-drag.el (mouse-drag-should-do-col-scrolling):
* mpc.el (mpc-tagbrowser, mpc):
* net/rcirc.el (rcirc-any-buffer):
* play/gomoku.el (gomoku-max-width, gomoku-max-height):
* play/landmark.el (landmark-max-width, landmark-max-height):
* play/zone.el (zone):
* progmodes/compile.el (compilation-goto-locus):
* progmodes/ebrowse.el (ebrowse-view/find-file-and-search-pattern):
* progmodes/etags.el (find-tag-other-window):
* progmodes/fortran.el (fortran-column-ruler):
* progmodes/gdb-mi.el (gdb-mouse-toggle-breakpoint-fringe):
* progmodes/verilog-mode.el (verilog-point-text):
* reposition.el (reposition-window):
* rot13.el (toggle-rot13-mode):
* server.el (server-switch-buffer):
* shell.el (shell-dynamic-complete-command)
(shell-dynamic-complete-environment-variable):
* simple.el (insert-buffer, set-selective-display)
(delete-completion-window):
* speedbar.el (speedbar-timer-fn, speedbar-center-buffer-smartly)
(speedbar-recenter):
* startup.el (fancy-splash-head):
* textmodes/ispell.el (ispell-command-loop):
* textmodes/makeinfo.el (makeinfo-compilation-sentinel-region):
* tutorial.el (help-with-tutorial):
* vc/add-log.el (add-change-log-entry):
* vc/compare-w.el (compare-windows):
* vc/ediff-help.el (ediff-indent-help-message):
* vc/ediff-util.el (ediff-setup-control-buffer, ediff-position-region):
* vc/ediff-wind.el (ediff-skip-unsuitable-frames)
(ediff-setup-control-frame):
* vc/emerge.el (emerge-position-region):
* vc/pcvs-util.el (cvs-bury-buffer):
* window.el (walk-windows, mouse-autoselect-window-select):
* winner.el (winner-set-conf, winner-undo): Related users changed.
2013-08-05 14:26:57 +00:00
|
|
|
(unless (window-minibuffer-p)
|
2021-01-23 18:38:42 +00:00
|
|
|
(unless (overlayp global-hl-line-overlay)
|
2013-12-19 14:00:55 +00:00
|
|
|
(setq global-hl-line-overlay (hl-line-make-overlay))) ; To be moved.
|
2014-01-06 20:54:37 +00:00
|
|
|
(unless (member global-hl-line-overlay global-hl-line-overlays)
|
|
|
|
(push global-hl-line-overlay global-hl-line-overlays))
|
2011-06-26 20:25:53 +00:00
|
|
|
(overlay-put global-hl-line-overlay 'window
|
|
|
|
(unless global-hl-line-sticky-flag
|
|
|
|
(selected-window)))
|
2021-01-23 18:38:42 +00:00
|
|
|
(hl-line-move global-hl-line-overlay)
|
|
|
|
(global-hl-line-maybe-unhighlight))))
|
2003-05-15 13:22:15 +00:00
|
|
|
|
2016-05-26 09:30:29 +00:00
|
|
|
(defun global-hl-line-highlight-all ()
|
|
|
|
"Highlight the current line in all live windows."
|
|
|
|
(walk-windows (lambda (w)
|
|
|
|
(with-current-buffer (window-buffer w)
|
|
|
|
(global-hl-line-highlight)))
|
|
|
|
nil t))
|
|
|
|
|
2003-05-15 13:22:15 +00:00
|
|
|
(defun global-hl-line-unhighlight ()
|
|
|
|
"Deactivate the Global-Hl-Line overlay on the current line."
|
2021-01-23 18:38:42 +00:00
|
|
|
(when (overlayp global-hl-line-overlay)
|
|
|
|
(delete-overlay global-hl-line-overlay)
|
|
|
|
(setq global-hl-line-overlay nil)))
|
2003-05-15 13:22:15 +00:00
|
|
|
|
2016-05-26 09:30:29 +00:00
|
|
|
(defun global-hl-line-maybe-unhighlight ()
|
|
|
|
"Maybe deactivate the Global-Hl-Line overlay on the current line.
|
|
|
|
Specifically, when `global-hl-line-sticky-flag' is nil deactivate
|
|
|
|
all such overlays in all buffers except the current one."
|
|
|
|
(mapc (lambda (ov)
|
|
|
|
(let ((ovb (overlay-buffer ov)))
|
|
|
|
(when (and (not global-hl-line-sticky-flag)
|
|
|
|
(bufferp ovb)
|
|
|
|
(not (eq ovb (current-buffer)))
|
|
|
|
(not (minibufferp)))
|
2021-01-23 18:38:42 +00:00
|
|
|
(with-current-buffer ovb
|
|
|
|
(global-hl-line-unhighlight)))))
|
2016-05-26 09:30:29 +00:00
|
|
|
global-hl-line-overlays))
|
|
|
|
|
2014-01-06 20:54:37 +00:00
|
|
|
(defun global-hl-line-unhighlight-all ()
|
|
|
|
"Deactivate all Global-Hl-Line overlays."
|
|
|
|
(mapc (lambda (ov)
|
|
|
|
(let ((ovb (overlay-buffer ov)))
|
|
|
|
(when (bufferp ovb)
|
|
|
|
(with-current-buffer ovb
|
|
|
|
(global-hl-line-unhighlight)))))
|
|
|
|
global-hl-line-overlays)
|
|
|
|
(setq global-hl-line-overlays nil))
|
|
|
|
|
2004-03-15 07:27:02 +00:00
|
|
|
(defun hl-line-move (overlay)
|
2006-01-22 08:56:43 +00:00
|
|
|
"Move the Hl-Line overlay.
|
2004-03-15 07:27:02 +00:00
|
|
|
If `hl-line-range-function' is non-nil, move the OVERLAY to the position
|
2006-01-22 08:56:43 +00:00
|
|
|
where the function returns. If `hl-line-range-function' is nil, fill
|
2004-03-15 07:27:02 +00:00
|
|
|
the line including the point by OVERLAY."
|
|
|
|
(let (tmp b e)
|
|
|
|
(if hl-line-range-function
|
|
|
|
(setq tmp (funcall hl-line-range-function)
|
|
|
|
b (car tmp)
|
|
|
|
e (cdr tmp))
|
|
|
|
(setq tmp t
|
|
|
|
b (line-beginning-position)
|
|
|
|
e (line-beginning-position 2)))
|
|
|
|
(if tmp
|
|
|
|
(move-overlay overlay b e)
|
|
|
|
(move-overlay overlay 1 1))))
|
|
|
|
|
2008-10-14 15:02:05 +00:00
|
|
|
(defun hl-line-unload-function ()
|
|
|
|
"Unload the Hl-Line library."
|
|
|
|
(global-hl-line-mode -1)
|
|
|
|
(save-current-buffer
|
|
|
|
(dolist (buffer (buffer-list))
|
|
|
|
(set-buffer buffer)
|
|
|
|
(when hl-line-mode (hl-line-mode -1))))
|
|
|
|
;; continue standard unloading
|
|
|
|
nil)
|
|
|
|
|
1999-07-19 22:03:26 +00:00
|
|
|
(provide 'hl-line)
|
|
|
|
|
|
|
|
;;; hl-line.el ends here
|