view lisp/hl-line.el @ 26059:2a7f35e0072b

(Fminibuffer_complete_and_exit): Supply value for new ESCAPE_FROM_EDGE parameter to Ffield_beginning. (Fminibuffer_complete_word): Use Ffield_beginning to find the prompt end. (Fminibuffer_complete_and_exit): Test for an empty input string by seeing where the field begins, instead of looking at text-properties. (read_minibuf): Don't save minibuffer prompt length on minibuf_save_list. Don't initialize minibuffer prompt length. Wrap prompt text-properties around the entire prompt. Add 'prompt text-property to prompt. Get final value with Ffield_string instead of make_buffer_string. (read_minibuf_unwind): Don't restore minibuffer prompt length from minibuf_save_list. (do_completion): Get minibuffer input with Ffield_string instead of Fbuffer_string. Erase minibuffer input with Ferase_field instead of erase_buffer. (Fminibuffer_complete_and_exit): Likewise. Test whether buffer is empty by looking for the 'prompt text property at the end. Set prompt length by looking for the end of the prompt text property, and save prompt length for later use (since there is no longer a buffer variable to get it from). (Fminibuffer_prompt_width, Fminibuffer_prompt_end): Functions removed. (syms_of_minibuf): Remove initializations of Sminibuffer_prompt_width and Sminibuffer_prompt_end.
author Gerd Moellmann <gerd@gnu.org>
date Sun, 17 Oct 1999 12:55:49 +0000
parents caaa177b2390
children b4676dda4b53
line wrap: on
line source

;;; hl-line.el --- highlight the current line

;; Copyright (C) 1998 Free Software Foundation, Inc.

;; Author:  Dave Love <fx@gnu.org>
;; Created: 1998-09-13
;; Keywords: faces, frames

;; Hl-Line mode is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.

;; Hl-Line mode is distributed in the hope that it will be useful,
;; 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
;; along with GNU Emacs; see the file COPYING.  If not, write to the
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.

;;; Commentary:

;; Provides a global minor mode (toggled by M-x hl-line-mode) to
;; highlight, in a windowing system, the line on which point is
;; (except in a minibuffer window) to satisfy a request for a feature
;; of Lesser Editors.

;; You probably don't really want this; if the cursor is difficult to
;; spot, try changing its colour or using a cursor blinking
;; <URL:http://www.wonderworks.com/download/blinking-cursor.el.gz> or
;; jiggling <URL:http://www.eskimo.com/%7Eseldon> package.  (Cursor
;; blinking will be built in to Emacs 21.)  The hookery involved here
;; might slow Emacs noticeably on a slow machine.

;; An overlay is used, active only on the selected window.  Hooks are
;; added to `pre-command-hook' and `post-command-hook' to activate and
;; deactivate (by deleting) the overlay.  `hl-line-unhighlight', on
;; `pre-command-hook', deactivates it unconditionally in case the
;; command changes the selected window.  (It does so rather than
;; keeping track of changes in the selected window).
;; `hl-line-highlight', on `post-command-hook', activates it again
;; across the window width.

;;; Code:

(defgroup hl-line nil
  "Highliight the current line."
  :version "21.1"
  :group 'editing)

;;;###autoload
(defcustom hl-line-mode nil
  "Non-nil if Hl-Line mode is enabled."
  :set (lambda (symbol value)
	 (hl-line-mode (or value 0)))
  :initialize 'custom-initialize-default
  :type 'boolean
  :group 'hl-line
  :require 'hl-line)

(defcustom hl-line-face 'highlight
  "Face with which to highlight the current line."
  :type 'face
  :group 'hl-line)

(defvar hl-line-overlay nil)
(make-variable-buffer-local 'hl-line-overlay)

(defun hl-line-highlight ()
  "Active the Hl-Line overlay on the current line in the current window.
\(Unless it's a minibuffer window.)"
  (unless (window-minibuffer-p (selected-window)) ; silly in minibuffer
    (unless hl-line-overlay		; new overlay for this buffer
      (setq hl-line-overlay (make-overlay 1 1))	; to be moved
      (overlay-put hl-line-overlay 'face hl-line-face))
    (overlay-put hl-line-overlay 'window (selected-window))
    (move-overlay hl-line-overlay
		  (line-beginning-position) (1+ (line-end-position)))))

(defun hl-line-unhighlight ()
  "Deactivate the Hl-Line overlay on the current line in the current window."
  (if hl-line-overlay
      (delete-overlay hl-line-overlay)))

;;;###autoload
(defun hl-line-mode (&optional arg)
  "Global minor mode to highlight the line about point.

With ARG, turn Hl-Line mode on if ARG is positive, off otherwise.
Only useful with a windowing system.
Uses functions `hl-line-unhighlight' and `hl-line-highlight' on
`pre-command-hook' and `post-command-hook'."
  (interactive "P")
  (setq hl-line-mode (if (null arg)
			 (not hl-line-mode)
		       (> (prefix-numeric-value arg) 0)))
  (cond (hl-line-mode
	 (add-hook 'pre-command-hook #'hl-line-unhighlight)
	 (add-hook 'post-command-hook #'hl-line-highlight))
	(t
	 (hl-line-unhighlight)
	 (remove-hook 'pre-command-hook #'hl-line-unhighlight)
	 (remove-hook 'post-command-hook #'hl-line-highlight)))
  (if (interactive-p)
      (message "Hl-Line mode %sabled" (if hl-line-mode "en" "dis"))))

(provide 'hl-line)

;;; hl-line.el ends here