]> git.bundesbrandschatzamt.de Git - emacsconfig.git/commitdiff
Adding highlight-symbol
authorAndreas Gerler <baronNOSPAMbundesbrandschatzamt.de>
Tue, 28 Aug 2018 17:55:41 +0000 (19:55 +0200)
committerAndreas Gerler <baronNOSPAMbundesbrandschatzamt.de>
Tue, 28 Aug 2018 17:55:41 +0000 (19:55 +0200)
Signed-off-by: Andreas Gerler <baronNOSPAMbundesbrandschatzamt.de>
elpa/highlight-symbol-20160102.2009/highlight-symbol-autoloads.el [new file with mode: 0644]
elpa/highlight-symbol-20160102.2009/highlight-symbol-pkg.el [new file with mode: 0644]
elpa/highlight-symbol-20160102.2009/highlight-symbol.el [new file with mode: 0644]
elpa/highlight-symbol-readme.txt [new file with mode: 0644]

diff --git a/elpa/highlight-symbol-20160102.2009/highlight-symbol-autoloads.el b/elpa/highlight-symbol-20160102.2009/highlight-symbol-autoloads.el
new file mode 100644 (file)
index 0000000..5e0f2f8
--- /dev/null
@@ -0,0 +1,105 @@
+;;; highlight-symbol-autoloads.el --- automatically extracted autoloads
+;;
+;;; Code:
+
+(add-to-list 'load-path (directory-file-name
+                         (or (file-name-directory #$) (car load-path))))
+
+\f
+;;;### (autoloads nil "highlight-symbol" "highlight-symbol.el" (0
+;;;;;;  0 0 0))
+;;; Generated autoloads from highlight-symbol.el
+
+(autoload 'highlight-symbol-mode "highlight-symbol" "\
+Minor mode that highlights the symbol under point throughout the buffer.
+Highlighting takes place after `highlight-symbol-idle-delay'.
+
+\(fn &optional ARG)" t nil)
+
+(defalias 'highlight-symbol-at-point 'highlight-symbol)
+
+(autoload 'highlight-symbol "highlight-symbol" "\
+Toggle highlighting of the symbol at point.
+This highlights or unhighlights the symbol at point using the first
+element in of `highlight-symbol-faces'.
+
+\(fn &optional SYMBOL)" t nil)
+
+(autoload 'highlight-symbol-remove-all "highlight-symbol" "\
+Remove symbol highlighting in buffer.
+
+\(fn)" t nil)
+
+(autoload 'highlight-symbol-list-all "highlight-symbol" "\
+List all symbols highlighted in the buffer.
+
+\(fn)" t nil)
+
+(autoload 'highlight-symbol-count "highlight-symbol" "\
+Print the number of occurrences of symbol at point.
+
+\(fn &optional SYMBOL MESSAGE-P)" t nil)
+
+(autoload 'highlight-symbol-next "highlight-symbol" "\
+Jump to the next location of the symbol at point within the buffer.
+
+\(fn)" t nil)
+
+(autoload 'highlight-symbol-prev "highlight-symbol" "\
+Jump to the previous location of the symbol at point within the buffer.
+
+\(fn)" t nil)
+
+(autoload 'highlight-symbol-next-in-defun "highlight-symbol" "\
+Jump to the next location of the symbol at point within the defun.
+
+\(fn)" t nil)
+
+(autoload 'highlight-symbol-prev-in-defun "highlight-symbol" "\
+Jump to the previous location of the symbol at point within the defun.
+
+\(fn)" t nil)
+
+(autoload 'highlight-symbol-nav-mode "highlight-symbol" "\
+Navigate occurrences of the symbol at point.
+
+When called interactively, toggle `highlight-symbol-nav-mode'.
+With prefix ARG, enable `highlight-symbol-nav-mode' if ARG is
+positive, otherwise disable it.
+
+When called from Lisp, enable `highlight-symbol-nav-mode' if ARG
+is omitted, nil or positive.  If ARG is `toggle', toggle
+`highlight-symbol-nav-mode'.  Otherwise behave as if called
+interactively.
+
+In `highlight-symbol-nav-mode' provide the following key bindings
+to navigate between occurrences of the symbol at point in the
+current buffer.
+
+\\{highlight-symbol-nav-mode-map}
+
+\(fn &optional ARG)" t nil)
+
+(autoload 'highlight-symbol-query-replace "highlight-symbol" "\
+Replace the symbol at point with REPLACEMENT.
+
+\(fn REPLACEMENT)" t nil)
+
+(autoload 'highlight-symbol-occur "highlight-symbol" "\
+Call `occur' with the symbol at point.
+Each line is displayed with NLINES lines before and after, or -NLINES
+before if NLINES is negative.
+
+\(fn &optional NLINES)" t nil)
+
+(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "highlight-symbol" '("highlight-symbol")))
+
+;;;***
+\f
+;; Local Variables:
+;; version-control: never
+;; no-byte-compile: t
+;; no-update-autoloads: t
+;; coding: utf-8
+;; End:
+;;; highlight-symbol-autoloads.el ends here
diff --git a/elpa/highlight-symbol-20160102.2009/highlight-symbol-pkg.el b/elpa/highlight-symbol-20160102.2009/highlight-symbol-pkg.el
new file mode 100644 (file)
index 0000000..54c95e5
--- /dev/null
@@ -0,0 +1,2 @@
+;;; -*- no-byte-compile: t -*-
+(define-package "highlight-symbol" "20160102.2009" "automatic and manual symbol highlighting" 'nil :commit "7a789c779648c55b16e43278e51be5898c121b3a" :keywords '("faces" "matching") :authors '(("Nikolaj Schumacher <bugs * nschum de>")) :maintainer '("Nikolaj Schumacher <bugs * nschum de>") :url "http://nschum.de/src/emacs/highlight-symbol/")
diff --git a/elpa/highlight-symbol-20160102.2009/highlight-symbol.el b/elpa/highlight-symbol-20160102.2009/highlight-symbol.el
new file mode 100644 (file)
index 0000000..249cc93
--- /dev/null
@@ -0,0 +1,474 @@
+;;; highlight-symbol.el --- automatic and manual symbol highlighting
+;;
+;; Copyright (C) 2007-2009, 2013-2016 Nikolaj Schumacher
+;;
+;; Author: Nikolaj Schumacher <bugs * nschum de>
+;; Version: 1.3
+;; Package-Version: 20160102.2009
+;; Keywords: faces, matching
+;; URL: http://nschum.de/src/emacs/highlight-symbol/
+;; Compatibility: GNU Emacs 23.x, GNU Emacs 24.x, GNU Emacs 25.x
+;;
+;; This file is NOT part of GNU Emacs.
+;;
+;; This program 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
+;; of the License, or (at your option) any later version.
+;;
+;; This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+;;
+;;; Commentary:
+;;
+;; Add the following to your .emacs file:
+;; (require 'highlight-symbol)
+;; (global-set-key [(control f3)] 'highlight-symbol)
+;; (global-set-key [f3] 'highlight-symbol-next)
+;; (global-set-key [(shift f3)] 'highlight-symbol-prev)
+;; (global-set-key [(meta f3)] 'highlight-symbol-query-replace)
+;;
+;; Use `highlight-symbol' to toggle highlighting of the symbol at
+;; point throughout the current buffer.  Use `highlight-symbol-mode' to keep the
+;; symbol at point highlighted.
+;;
+;; The functions `highlight-symbol-next', `highlight-symbol-prev',
+;; `highlight-symbol-next-in-defun' and `highlight-symbol-prev-in-defun' allow
+;; for cycling through the locations of any symbol at point.  Use
+;; `highlight-symbol-nav-mode' to enable key bindings (M-p and M-p) for
+;; navigation. When `highlight-symbol-on-navigation-p' is set, highlighting is
+;; triggered regardless of `highlight-symbol-idle-delay'.
+;;
+;; `highlight-symbol-query-replace' can be used to replace the symbol.
+;;
+;;; Change Log:
+;;
+;;    Added `highlight-symbol-highlight-single-occurrence'.
+;;    Added `highlight-symbol-ignore-list'.
+;;    Added `highlight-symbol-occurrence-message'.
+;;
+;; 2015-04-22 (1.3)
+;;    Added `highlight-symbol-count'.
+;;    Renamed `highlight-symbol-at-point' to `highlight-symbol' because
+;;      hi-lock took that name.
+;;    Added `highlight-symbol-nav-mode'.  (thanks to Sebastian Wiesner)
+;;    Added `highlight-symbol-foreground-color'.  (thanks to rubikitch)
+;;
+;; 2013-01-10 (1.2)
+;;    `highlight-symbol-colors' may now contain faces in addition to colors.
+;;    No longer depend on hi-lock (to support the latest Emacs 24).
+;;    Added `highlight-symbol-list-all'.  (thanks to lewang)
+;;    Added `highlight-symbol-occur'.  (thanks to Jim Turner)
+;;
+;; 2009-04-13 (1.1)
+;;    Added `highlight-symbol-query-replace'.
+;;
+;; 2009-03-19 (1.0.5)
+;;    Fixed `highlight-symbol-idle-delay' void variable message.
+;;    Fixed color repetition bug.  (thanks to Hugo Schmitt)
+;;
+;; 2008-05-02 (1.0.4)
+;;    Added `highlight-symbol-on-navigation-p' option.
+;;
+;; 2008-02-26 (1.0.3)
+;;    Added `highlight-symbol-remove-all'.
+;;
+;; 2007-09-06 (1.0.2)
+;;    Fixed highlighting with delay set to 0.  (thanks to Stefan Persson)
+;;
+;; 2007-09-05 (1.0.1)
+;;    Fixed completely broken temporary highlighting.
+;;
+;; 2007-07-30 (1.0)
+;;    Keep temp highlight while jumping.
+;;    Replaced `highlight-symbol-faces' with `highlight-symbol-colors'.
+;;    Fixed dependency and Emacs 21 bug.  (thanks to Gregor Gorjanc)
+;;    Prevent calling `highlight-symbol-at-point' on nil.
+;;
+;; 2007-04-20 (0.9.1)
+;;    Fixed bug in `highlight-symbol-jump'.  (thanks to Per Nordlöw)
+;;
+;; 2007-04-06 (0.9)
+;;    Initial release.
+;;
+;;; Code:
+
+(require 'thingatpt)
+(eval-when-compile (require 'cl))
+
+(push "^No symbol at point$" debug-ignored-errors)
+
+(defgroup highlight-symbol nil
+  "Automatic and manual symbols highlighting"
+  :group 'faces
+  :group 'matching)
+
+(defface highlight-symbol-face
+  '((((class color) (background dark))
+     (:background "gray30"))
+    (((class color) (background light))
+     (:background "gray90")))
+  "Face used by `highlight-symbol-mode'."
+  :group 'highlight-symbol)
+
+(defvar highlight-symbol-timer nil)
+
+(defun highlight-symbol-update-timer (value)
+  (when highlight-symbol-timer
+    (cancel-timer highlight-symbol-timer))
+  (setq highlight-symbol-timer
+        (and value (/= value 0)
+             (run-with-idle-timer value t 'highlight-symbol-temp-highlight))))
+
+(defvar highlight-symbol-mode nil)
+
+(defun highlight-symbol-set (symbol value)
+  (when symbol (set symbol value))
+  (when highlight-symbol-mode
+    (highlight-symbol-update-timer value)))
+
+(defcustom highlight-symbol-idle-delay 1.5
+  "Number of seconds of idle time before highlighting the current symbol.
+If this variable is set to 0, no idle time is required.
+Changing this does not take effect until `highlight-symbol-mode' has been
+disabled for all buffers."
+  :type 'number
+  :set 'highlight-symbol-set
+  :group 'highlight-symbol)
+
+(defcustom highlight-symbol-highlight-single-occurrence t
+  "Determines if `highlight-symbol-mode' highlights single occurrences.
+If nil, `highlight-symbol-mode' will only highlight a symbol if there are
+more occurrences in this buffer."
+  :type 'boolean
+  :group 'highlight-symbol)
+
+(defcustom highlight-symbol-colors
+  '("yellow" "DeepPink" "cyan" "MediumPurple1" "SpringGreen1"
+    "DarkOrange" "HotPink1" "RoyalBlue1" "OliveDrab")
+  "Colors and/or faces used by `highlight-symbol'.
+highlighting the symbols will use these colors/faces in order."
+  :type '(repeat (choice color face))
+  :group 'highlight-symbol)
+
+(defcustom highlight-symbol-on-navigation-p nil
+  "Whether or not to temporarily highlight the symbol when using
+`highlight-symbol-jump' family of functions."
+  :type 'boolean
+  :group 'highlight-symbol)
+
+(defcustom highlight-symbol-ignore-list '()
+  "List of regexp rules that specifies what symbols should not be highlighted."
+  :type '(repeat string)
+  :group 'highlight-symbol)
+
+(defvar highlight-symbol-color-index 0)
+(make-variable-buffer-local 'highlight-symbol-color-index)
+
+(defvar highlight-symbol nil)
+(make-variable-buffer-local 'highlight-symbol)
+
+(defvar highlight-symbol-keyword-alist nil)
+(make-variable-buffer-local 'highlight-symbol-keyword-alist)
+
+(defconst highlight-symbol-border-pattern
+  (if (>= emacs-major-version 22) '("\\_<" . "\\_>") '("\\<" . "\\>")))
+
+(defcustom highlight-symbol-foreground-color "black"
+  "*Foreground color of highlighted symbols."
+  :type '(choice color
+                 (const :tag "Keep original text color" nil))
+  :group 'highlight-symbol)
+
+(defcustom highlight-symbol-occurrence-message '(explicit navigation)
+  "*When to print the occurrence count of the current symbol.
+A list.
+If containing `explicit',
+message after `highlight-symbol' is called explicitly.
+If containing `temporary',
+message after the symbol under point is temporarily highlighted by
+`highlight-symbol-mode'.
+If containing `navigation',
+message after navigation commands."
+  :type '(set
+          (const :tag "Message after explicit highlighting" explicit)
+          (const :tag "Message after temporary highlighting" temporary)
+          (const :tag "Message after navigation commands" navigation))
+  :group 'highlight-symbol)
+
+;;;###autoload
+(define-minor-mode highlight-symbol-mode
+  "Minor mode that highlights the symbol under point throughout the buffer.
+Highlighting takes place after `highlight-symbol-idle-delay'."
+  nil " hl-s" nil
+  (if highlight-symbol-mode
+      ;; on
+      (progn
+        (highlight-symbol-update-timer highlight-symbol-idle-delay)
+        (add-hook 'post-command-hook 'highlight-symbol-mode-post-command nil t))
+    ;; off
+    (remove-hook 'post-command-hook 'highlight-symbol-mode-post-command t)
+    (highlight-symbol-mode-remove-temp)
+    (kill-local-variable 'highlight-symbol)))
+
+;;;###autoload
+(defalias 'highlight-symbol-at-point 'highlight-symbol)
+
+;;;###autoload
+(defun highlight-symbol (&optional symbol)
+  "Toggle highlighting of the symbol at point.
+This highlights or unhighlights the symbol at point using the first
+element in of `highlight-symbol-faces'."
+  (interactive)
+  (let ((symbol (or symbol
+                    (highlight-symbol-get-symbol)
+                    (error "No symbol at point"))))
+    (if (highlight-symbol-symbol-highlighted-p symbol)
+        (highlight-symbol-remove-symbol symbol)
+      (highlight-symbol-add-symbol symbol)
+      (when (member 'explicit highlight-symbol-occurrence-message)
+        (highlight-symbol-count symbol t)))))
+
+(defun highlight-symbol-symbol-highlighted-p (symbol)
+  "Test if the a symbol regexp is currently highlighted."
+  (assoc symbol highlight-symbol-keyword-alist))
+
+(defun highlight-symbol-should-auto-highlight-p (symbol)
+  "Test if SYMBOL should be highlighted automatically."
+  (or highlight-symbol-highlight-single-occurrence
+      (> (highlight-symbol-count symbol) 1)))
+
+(defun highlight-symbol-next-color ()
+  "Step to and return next color from the color ring."
+  (let ((color (nth highlight-symbol-color-index
+                    highlight-symbol-colors)))
+    (if color ;; wrap
+        (incf highlight-symbol-color-index)
+      (setq highlight-symbol-color-index 1
+            color (car highlight-symbol-colors)))
+    color))
+
+(defun highlight-symbol-add-symbol (symbol &optional color)
+  (unless (highlight-symbol-symbol-highlighted-p symbol)
+    (when (equal symbol highlight-symbol)
+      (highlight-symbol-mode-remove-temp))
+    (let ((color (or color (highlight-symbol-next-color))))
+      (unless (facep color)
+        (setq color `((background-color . ,color)
+                      (foreground-color . ,highlight-symbol-foreground-color))))
+      ;; highlight
+      (highlight-symbol-add-symbol-with-face symbol color))))
+
+(defun highlight-symbol-flush ()
+  (if (fboundp 'font-lock-flush)
+      (font-lock-flush)
+    ;; Emacs < 25
+    (with-no-warnings
+      (font-lock-fontify-buffer))))
+
+(defun highlight-symbol-add-symbol-with-face (symbol face)
+  (let ((keywords `(,symbol 0 ',face prepend)))
+    (push keywords highlight-symbol-keyword-alist)
+    (font-lock-add-keywords nil (list keywords) 'append)
+    (highlight-symbol-flush)))
+
+(defun highlight-symbol-remove-symbol (symbol)
+  (let ((keywords (assoc symbol highlight-symbol-keyword-alist)))
+    (setq highlight-symbol-keyword-alist
+          (delq keywords highlight-symbol-keyword-alist))
+    (font-lock-remove-keywords nil (list keywords))
+    (highlight-symbol-flush)))
+
+;;;###autoload
+(defun highlight-symbol-remove-all ()
+  "Remove symbol highlighting in buffer."
+  (interactive)
+  (mapc 'highlight-symbol-remove-symbol
+        (mapcar 'car highlight-symbol-keyword-alist)))
+
+;;;###autoload
+(defun highlight-symbol-list-all ()
+  "List all symbols highlighted in the buffer."
+  (interactive)
+  (message "%s" (mapconcat 'highlight-symbol-fontify-symbol
+                           (mapcar 'car highlight-symbol-keyword-alist) ", ")))
+
+(defun highlight-symbol-fontify-symbol (symbol)
+  (let ((prefix-length (length (car highlight-symbol-border-pattern)))
+        (suffix-length (length (cdr highlight-symbol-border-pattern))))
+    (propertize (substring symbol prefix-length
+                           (- (length symbol) suffix-length))
+                'face (assoc symbol highlight-symbol-keyword-alist))))
+
+;;;###autoload
+(defun highlight-symbol-count (&optional symbol message-p)
+  "Print the number of occurrences of symbol at point."
+  (interactive '(nil t))
+  (let* ((symbol (or symbol
+                     (highlight-symbol-get-symbol)
+                     (error "No symbol at point")))
+         (case-fold-search nil)
+         (count (how-many symbol (point-min) (point-max))))
+    (when message-p
+      (if (= count 0)
+          (message "Only occurrence in buffer")
+        (message "Occurrence %d/%d in buffer"
+                 (1+ (how-many symbol (point-min) (1- (point))))
+                 count)))
+    count))
+
+;;;###autoload
+(defun highlight-symbol-next ()
+  "Jump to the next location of the symbol at point within the buffer."
+  (interactive)
+  (highlight-symbol-jump 1))
+
+;;;###autoload
+(defun highlight-symbol-prev ()
+  "Jump to the previous location of the symbol at point within the buffer."
+  (interactive)
+  (highlight-symbol-jump -1))
+
+;;;###autoload
+(defun highlight-symbol-next-in-defun ()
+  "Jump to the next location of the symbol at point within the defun."
+  (interactive)
+  (save-restriction
+    (narrow-to-defun)
+    (highlight-symbol-jump 1)))
+
+;;;###autoload
+(defun highlight-symbol-prev-in-defun ()
+  "Jump to the previous location of the symbol at point within the defun."
+  (interactive)
+  (save-restriction
+    (narrow-to-defun)
+    (highlight-symbol-jump -1)))
+
+(defvar highlight-symbol-nav-mode-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map "\M-n" 'highlight-symbol-next)
+    (define-key map "\M-p" 'highlight-symbol-prev)
+    map)
+  "Keymap for `highlight-symbol-nav-mode'.")
+
+;;;###autoload
+(define-minor-mode highlight-symbol-nav-mode
+  "Navigate occurrences of the symbol at point.
+
+When called interactively, toggle `highlight-symbol-nav-mode'.
+With prefix ARG, enable `highlight-symbol-nav-mode' if ARG is
+positive, otherwise disable it.
+
+When called from Lisp, enable `highlight-symbol-nav-mode' if ARG
+is omitted, nil or positive.  If ARG is `toggle', toggle
+`highlight-symbol-nav-mode'.  Otherwise behave as if called
+interactively.
+
+In `highlight-symbol-nav-mode' provide the following key bindings
+to navigate between occurrences of the symbol at point in the
+current buffer.
+
+\\{highlight-symbol-nav-mode-map}")
+
+;;;###autoload
+(defun highlight-symbol-query-replace (replacement)
+  "Replace the symbol at point with REPLACEMENT."
+  (interactive (let ((symbol (or (thing-at-point 'symbol)
+                                 (error "No symbol at point"))))
+                 (highlight-symbol-temp-highlight)
+                 (set query-replace-to-history-variable
+                      (cons (substring-no-properties symbol)
+                            (eval query-replace-to-history-variable)))
+                 (list
+                  (read-from-minibuffer "Replacement: " nil nil nil
+                                        query-replace-to-history-variable))))
+  (goto-char (beginning-of-thing 'symbol))
+  (query-replace-regexp (highlight-symbol-get-symbol) replacement))
+
+;;;###autoload
+(defun highlight-symbol-occur (&optional nlines)
+  "Call `occur' with the symbol at point.
+Each line is displayed with NLINES lines before and after, or -NLINES
+before if NLINES is negative."
+  (interactive "P")
+  (if (thing-at-point 'symbol)
+      (occur (highlight-symbol-get-symbol) nlines)
+    (error "No symbol at point")))
+
+(defun highlight-symbol-get-symbol ()
+  "Return a regular expression identifying the symbol at point."
+  (let ((symbol (thing-at-point 'symbol)))
+    (when (and symbol
+               (not (member 0 (mapcar
+                               (lambda (e) (string-match e symbol))
+                               highlight-symbol-ignore-list))))
+      (concat (car highlight-symbol-border-pattern)
+              (regexp-quote symbol)
+              (cdr highlight-symbol-border-pattern)))))
+
+(defun highlight-symbol-temp-highlight ()
+  "Highlight the current symbol until a command is executed."
+  (when highlight-symbol-mode
+    (let ((symbol (highlight-symbol-get-symbol)))
+      (unless (or (equal symbol highlight-symbol)
+                  (highlight-symbol-symbol-highlighted-p symbol))
+        (highlight-symbol-mode-remove-temp)
+        (when (and symbol (highlight-symbol-should-auto-highlight-p symbol))
+          (setq highlight-symbol symbol)
+          (highlight-symbol-add-symbol-with-face symbol 'highlight-symbol-face)
+          (highlight-symbol-flush)
+          (when (member 'temporary highlight-symbol-occurrence-message)
+            (highlight-symbol-count symbol t)))))))
+
+(defun highlight-symbol-mode-remove-temp ()
+  "Remove the temporary symbol highlighting."
+  (when highlight-symbol
+    (highlight-symbol-remove-symbol highlight-symbol)
+    (setq highlight-symbol nil)))
+
+(defun highlight-symbol-mode-post-command ()
+  "After a command, change the temporary highlighting.
+Remove the temporary symbol highlighting and, unless a timeout is specified,
+create the new one."
+  (if (eq this-command 'highlight-symbol-jump)
+      (when highlight-symbol-on-navigation-p
+        (highlight-symbol-temp-highlight))
+    (if (eql highlight-symbol-idle-delay 0)
+        (highlight-symbol-temp-highlight)
+      (unless (equal highlight-symbol (highlight-symbol-get-symbol))
+        (highlight-symbol-mode-remove-temp)))))
+
+(defun highlight-symbol-jump (dir)
+  "Jump to the next or previous occurence of the symbol at point.
+DIR has to be 1 or -1."
+  (let ((symbol (highlight-symbol-get-symbol)))
+    (if symbol
+        (let* ((case-fold-search nil)
+               (msg (member 'navigation highlight-symbol-occurrence-message))
+               (bounds (bounds-of-thing-at-point 'symbol))
+               (offset (- (point) (if (< 0 dir) (cdr bounds) (car bounds)))))
+          (unless (eq last-command 'highlight-symbol-jump)
+            (push-mark))
+          ;; move a little, so we don't find the same instance again
+          (goto-char (- (point) offset))
+          (let ((target (re-search-forward symbol nil t dir)))
+            (unless target
+              (goto-char (if (< 0 dir) (point-min) (point-max)))
+              (unless msg
+                (message "Continued from beginning of buffer"))
+              (setq target (re-search-forward symbol nil nil dir)))
+            (goto-char (+ target offset)))
+          (when msg
+            (highlight-symbol-count symbol t))
+          (setq this-command 'highlight-symbol-jump))
+      (error "No symbol at point"))))
+
+(provide 'highlight-symbol)
+
+;;; highlight-symbol.el ends here
diff --git a/elpa/highlight-symbol-readme.txt b/elpa/highlight-symbol-readme.txt
new file mode 100644 (file)
index 0000000..ef29efc
--- /dev/null
@@ -0,0 +1,19 @@
+Add the following to your .emacs file:
+(require 'highlight-symbol)
+(global-set-key [(control f3)] 'highlight-symbol)
+(global-set-key [f3] 'highlight-symbol-next)
+(global-set-key [(shift f3)] 'highlight-symbol-prev)
+(global-set-key [(meta f3)] 'highlight-symbol-query-replace)
+
+Use `highlight-symbol' to toggle highlighting of the symbol at
+point throughout the current buffer.  Use `highlight-symbol-mode' to keep the
+symbol at point highlighted.
+
+The functions `highlight-symbol-next', `highlight-symbol-prev',
+`highlight-symbol-next-in-defun' and `highlight-symbol-prev-in-defun' allow
+for cycling through the locations of any symbol at point.  Use
+`highlight-symbol-nav-mode' to enable key bindings (M-p and M-p) for
+navigation. When `highlight-symbol-on-navigation-p' is set, highlighting is
+triggered regardless of `highlight-symbol-idle-delay'.
+
+`highlight-symbol-query-replace' can be used to replace the symbol.