Mercurial > emacs
view lisp/hl-line.el @ 54336:18d3533d8911
Image consolidation:
(Vx_bitmap_file_path, Vimage_cache_eviction_delay)
(x_bitmap_height, x_bitmap_width, x_bitmap_pixmap)
(x_reference_bitmap, x_create_bitmap_from_data)
(x_create_bitmap_from_file, x_destroy_bitmap)
(x_destroy_all_bitmaps, x_create_bitmap_mask)
(QCascent, QCmargin, QCrelief, QCconversion, QCcolor_symbols)
(QCheuristic_mask, QCindex, QCmatrix, QCcolor_adjustment, QCmask)
(Qlaplace, Qemboss, Qedge_detection, Qheuristic, Qcenter)
(define_image_type, lookup_image_type, valid_image_p)
(image_error, enum image_value_type, struct image_keyword)
(parse_image_spec, image_spec_value, Fimage_size, Fimage_mask_p)
(make_image, free_image, prepare_image_for_display, image_ascent)
(four_corners_best, image_background, image_background_transparent)
(x_clear_image_1, x_clear_image, x_alloc_image_color)
(make_image_cache, free_image_cache, clear_image_cache)
(Fclear_image_cache, postprocess_image, lookup_image, cache_image)
(forall_images_in_image_cache, x_create_x_image_and_pixmap)
(x_destroy_x_image, x_put_x_image, x_find_image_file, slurp_file)
(struct ct_color, init_color_table, free_color_table)
(lookup_rgb_color, lookup_pixel_color, colors_in_color_table)
(cross_disabled_images, x_to_xcolors, x_from_xcolors)
(x_detect_edges, x_emboss, x_laplace, x_edge_detection)
(x_disable_image, x_build_heuristic_mask)
(XBM support, XPM support, PBM support, PNG support, JPEG support)
(TIFF support, GIF support, Ghostscript support): Merge with image
code from xfns.c and macfns.c into image.c.
(syms_of_xfns): Move image related symbols to image.c.
(init_external_image_libraries, init_xfns): Remove; initialization
moved to init_image in image.c.
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Thu, 11 Mar 2004 00:26:21 +0000 |
parents | 7d40f75d6c53 |
children | ad02f6299e9a |
line wrap: on
line source
;;; hl-line.el --- highlight the current line ;; Copyright (C) 1998, 2000, 2001, 2003 Free Software Foundation, Inc. ;; Author: Dave Love <fx@gnu.org> ;; Maintainer: FSF ;; Created: 1998-09-13 ;; Keywords: faces, frames, emulation ;; This file is part of GNU Emacs. ;; GNU Emacs 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. ;; GNU Emacs 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 local minor mode (toggled by M-x hl-line-mode) and ;; a global minor mode (toggled by M-x global-hl-line-mode) to ;; 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 ;; cursor is difficult to spot, try changing its colour, relying on ;; `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 ;; about point. To get the non-sticky behavior, `hl-line-unhighlight' ;; is added to `pre-command-hook' as well. This function deactivates ;; the overlay unconditionally in case the command changes the ;; selected window. (It does so rather than keeping track of changes ;; in the selected window). ;; 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. ;;; Code: (defgroup hl-line nil "Highlight the current line." :version "21.1" :group 'editing) (defcustom hl-line-face 'highlight "Face with which to highlight the current line." :type 'face :group 'hl-line) (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 "21.4" :group 'hl-line) (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'." nil nil nil (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))) (defun hl-line-highlight () "Active the Hl-Line overlay on the current line." (if hl-line-mode ; Might be changed outside the mode function. (progn (unless hl-line-overlay (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 (unless hl-line-sticky-flag (selected-window))) (move-overlay hl-line-overlay (line-beginning-position) (line-beginning-position 2))) (hl-line-unhighlight))) (defun hl-line-unhighlight () "Deactivate the Hl-Line overlay on the current line." (if hl-line-overlay (delete-overlay hl-line-overlay))) ;;;###autoload (define-minor-mode global-hl-line-mode "Global minor mode to highlight the line about point in the current window. With ARG, turn Global-Hl-Line mode on if ARG is positive, off otherwise. Global-Hl-Line mode uses the functions `global-hl-line-unhighlight' and `global-hl-line-highlight' on `pre-command-hook' and `post-command-hook'." :global t :group 'hl-line (if global-hl-line-mode (progn (add-hook 'pre-command-hook #'global-hl-line-unhighlight) (add-hook 'post-command-hook #'global-hl-line-highlight)) (global-hl-line-unhighlight) (remove-hook 'pre-command-hook #'global-hl-line-unhighlight) (remove-hook 'post-command-hook #'global-hl-line-highlight))) (defun global-hl-line-highlight () "Active the Global-Hl-Line overlay on the current line in the current window." (when global-hl-line-mode ; Might be changed outside the mode function. (unless (window-minibuffer-p (selected-window)) (unless global-hl-line-overlay (setq global-hl-line-overlay (make-overlay 1 1)) ; to be moved (overlay-put global-hl-line-overlay 'face hl-line-face)) (overlay-put global-hl-line-overlay 'window (selected-window)) (move-overlay global-hl-line-overlay (line-beginning-position) (line-beginning-position 2))))) (defun global-hl-line-unhighlight () "Deactivate the Global-Hl-Line overlay on the current line." (if global-hl-line-overlay (delete-overlay global-hl-line-overlay))) (provide 'hl-line) ;;; arch-tag: ac806940-0876-4959-8c89-947563ee2833 ;;; hl-line.el ends here