declare smobs in alloc.c
[bpt/emacs.git] / lisp / help-at-pt.el
index ae32af8..7f424f7 100644 (file)
@@ -1,6 +1,6 @@
 ;;; help-at-pt.el --- local help through the keyboard
 
-;; Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;; Copyright (C) 2003-2014 Free Software Foundation, Inc.
 
 ;; Author: Luc Teirlinck <teirllm@auburn.edu>
 ;; Keywords: help
@@ -61,20 +61,25 @@ property, or nil, is returned.
 If KBD is non-nil, `kbd-help' is used instead, and any
 `help-echo' property is ignored.  In this case, the return value
 can also be t, if that is the value of the `kbd-help' property."
-  (let* ((prop (if kbd 'kbd-help 'help-echo))
-        (pair (get-char-property-and-overlay (point) prop))
-        (val (car pair))
-        (ov (cdr pair)))
-    (if (functionp val)
-       (funcall val (selected-window) (if ov ov (current-buffer)) (point))
-      (eval val))))
+  (save-excursion
+    (let* ((prop (if kbd 'kbd-help 'help-echo))
+           (pair (get-char-property-and-overlay (point) prop))
+           (pair (if (car pair) pair
+                     (unless (bobp)
+                       (backward-char)
+                       (get-char-property-and-overlay (point) prop))))
+           (val (car pair))
+           (ov (cdr pair)))
+      (if (functionp val)
+          (funcall val (selected-window) (if ov ov (current-buffer)) (point))
+          (eval val)))))
 
 ;;;###autoload
 (defun help-at-pt-kbd-string ()
   "Return the keyboard help string at point.
 If the `kbd-help' text or overlay property at point produces a
-string, return it.  Otherwise, use the `help-echo' property.  If
-this produces no string either, return nil."
+string, return it.  Otherwise, use the `help-echo' property.
+If this produces no string either, return nil."
   (let ((kbd (help-at-pt-string t))
        (echo (help-at-pt-string)))
     (if (and kbd (not (eq kbd t))) kbd echo)))
@@ -104,7 +109,7 @@ internally to enable `help-at-pt-display-when-idle'.  Do not set it
 yourself.")
 
 (defcustom help-at-pt-timer-delay 1
-  "*Delay before displaying local help.
+  "Delay before displaying local help.
 This is used if `help-at-pt-display-when-idle' is enabled.
 The value may be an integer or floating point number.
 
@@ -146,7 +151,7 @@ This is done by setting a timer, if none is currently active."
 
 ;;;###autoload
 (defcustom help-at-pt-display-when-idle 'never
-  "*Automatically show local help on point-over.
+  "Automatically show local help on point-over.
 If the value is t, the string obtained from any `kbd-help' or
 `help-echo' property at point is automatically printed in the
 echo area, if nothing else is already displayed there, or after a
@@ -235,7 +240,13 @@ properties, to enable buffer local values."
                (catch 'found
                  (dolist (prop help-at-pt-display-when-idle)
                    (if (get-char-property (point) prop)
-                       (throw 'found t))))))
+                       (throw 'found t)))
+                  (unless (bobp)
+                    (save-excursion
+                      (backward-char)
+                      (dolist (prop help-at-pt-display-when-idle)
+                        (if (get-char-property (point) prop)
+                            (throw 'found t))))))))
        (or (not (current-message))
           (string= (current-message) "Quit"))
        (display-local-help t)))
@@ -344,11 +355,10 @@ rarely happens in practice."
 Print the help found there using `display-local-help'.  Adjacent
 areas with different non-nil help-echo properties are considered
 different regions.  With numeric argument ARG, behaves like
-`scan-buf-next-region' with argument -ARG.."
+`scan-buf-next-region' with argument -ARG."
   (interactive "p")
   (scan-buf-move-to-region 'help-echo (- arg) 'scan-buf-move-hook))
 
 (provide 'help-at-pt)
 
-;; arch-tag: d0b8b86d-d23f-45d0-a82d-208d6205a583
 ;;; help-at-pt.el ends here