+(defcustom hl-line-sticky-flag t
+ "*Non-nil means highlight the current line in all windows.
+Otherwise Hl-Line mode will highlight only in the selected
+window. Setting this variable takes effect the next time you use
+the command `hl-line-mode' to turn Hl-Line mode on."
+ :type 'boolean
+ :version "22.1"
+ :group 'hl-line)
+
+(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
+is the beginning position of highlight and its cdr value is the
+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.")
+
+(defvar hl-line-overlay nil
+ "Overlay used by Hl-Line mode to highlight the current line.")
+(make-variable-buffer-local 'hl-line-overlay)
+
+(defvar global-hl-line-overlay nil
+ "Overlay used by Global-Hl-Line mode to highlight the current line.")
+
+;;;###autoload
+(define-minor-mode hl-line-mode
+ "Buffer-local minor mode to highlight the line about point.
+With ARG, turn Hl-Line mode on if ARG is positive, off otherwise.
+
+If `hl-line-sticky-flag' is non-nil, Hl-Line mode highlights the
+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
+line about point in the selected window only. In this case, it
+uses the function `hl-line-unhighlight' on `pre-command-hook' in
+addition to `hl-line-highlight' on `post-command-hook'."
+ :group 'hl-line
+ (if hl-line-mode
+ (progn
+ ;; In case `kill-all-local-variables' is called.
+ (add-hook 'change-major-mode-hook #'hl-line-unhighlight nil t)
+ (if hl-line-sticky-flag
+ (remove-hook 'pre-command-hook #'hl-line-unhighlight t)
+ (add-hook 'pre-command-hook #'hl-line-unhighlight nil t))
+ (hl-line-highlight)
+ (add-hook 'post-command-hook #'hl-line-highlight nil t))
+ (remove-hook 'post-command-hook #'hl-line-highlight t)
+ (hl-line-unhighlight)
+ (remove-hook 'change-major-mode-hook #'hl-line-unhighlight t)
+ (remove-hook 'pre-command-hook #'hl-line-unhighlight t)))