Commit daccca97 authored by Bastien Guerry's avatar Bastien Guerry

Fix Bug#16183 about `global-hl-line-sticky-flag'.

* hl-line.el (global-hl-line-overlay): Make a local variable.
(global-hl-line-overlays): New variable to store all overlays.
(global-hl-line-mode): Don't delete overlays from the current
buffer when `global-hl-line-sticky-flag' is non-nil.
(global-hl-line-highlight): Add new overlays to
`global-hl-line-overlays'.
(global-hl-line-unhighlight-all): New function to delete all
overlays when turning off `global-hl-line-mode'.
parent ec00f20f
2014-01-06 Bastien Guerry <bzg@gnu.org>
* hl-line.el (global-hl-line-overlay): Make a local variable.
(global-hl-line-overlays): New variable to store all overlays.
(global-hl-line-mode): Don't delete overlays from the current
buffer when `global-hl-line-sticky-flag' is non-nil.
(global-hl-line-highlight): Add new overlays to
`global-hl-line-overlays'.
(global-hl-line-unhighlight-all): New function to delete all
overlays when turning off `global-hl-line-mode'.
This fixes Bug#16183.
2014-01-06 Stefan Monnier <monnier@iro.umontreal.ca>
* subr.el (set-transient-map): Fix nested case and docstring.
......
......@@ -64,9 +64,14 @@
(defvar-local hl-line-overlay nil
"Overlay used by Hl-Line mode to highlight the current line.")
(defvar global-hl-line-overlay nil
(defvar-local global-hl-line-overlay nil
"Overlay used by Global-Hl-Line mode to highlight the current line.")
(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.")
(defgroup hl-line nil
"Highlight the current line."
:version "21.1"
......@@ -193,9 +198,14 @@ Global-Hl-Line mode uses the functions `global-hl-line-unhighlight' and
:group 'hl-line
(if global-hl-line-mode
(progn
(add-hook 'pre-command-hook #'global-hl-line-unhighlight)
;; In case `kill-all-local-variables' is called.
(add-hook 'change-major-mode-hook #'global-hl-line-unhighlight)
(if global-hl-line-sticky-flag
(remove-hook 'pre-command-hook #'global-hl-line-unhighlight)
(add-hook 'pre-command-hook #'global-hl-line-unhighlight))
(global-hl-line-highlight)
(add-hook 'post-command-hook #'global-hl-line-highlight))
(global-hl-line-unhighlight)
(global-hl-line-unhighlight-all)
(remove-hook 'pre-command-hook #'global-hl-line-unhighlight)
(remove-hook 'post-command-hook #'global-hl-line-highlight)))
......@@ -205,6 +215,8 @@ Global-Hl-Line mode uses the functions `global-hl-line-unhighlight' and
(unless (window-minibuffer-p)
(unless global-hl-line-overlay
(setq global-hl-line-overlay (hl-line-make-overlay))) ; To be moved.
(unless (member global-hl-line-overlay global-hl-line-overlays)
(push global-hl-line-overlay global-hl-line-overlays))
(overlay-put global-hl-line-overlay 'window
(unless global-hl-line-sticky-flag
(selected-window)))
......@@ -215,6 +227,16 @@ Global-Hl-Line mode uses the functions `global-hl-line-unhighlight' and
(when global-hl-line-overlay
(delete-overlay global-hl-line-overlay)))
(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))
(defun hl-line-move (overlay)
"Move the Hl-Line overlay.
If `hl-line-range-function' is non-nil, move the OVERLAY to the position
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment