Mercurial > emacs
annotate lisp/tooltip.el @ 93762:46d39c0f7bf9
(uniscribe_shape): Increase items buffer size.
Give up if glyph indices not supported. Use uniscribe obtained
ABC widths for individual metrics. Map glyph clusters back to
characters using fClusterStart flag. Return number of glyphs
produced, not chars processed.
author | Jason Rumney <jasonr@gnu.org> |
---|---|
date | Sun, 06 Apr 2008 01:04:45 +0000 |
parents | 107ccd98fa12 |
children | 606f2d163a64 529aa606e975 |
rev | line source |
---|---|
45236 | 1 ;;; tooltip.el --- show tooltip windows |
25003 | 2 |
64762
41bb365f41c4
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64626
diff
changeset
|
3 ;; Copyright (C) 1997, 1999, 2000, 2001, 2002, 2003, 2004, |
79721 | 4 ;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc. |
25003 | 5 |
6 ;; Author: Gerd Moellmann <gerd@acm.org> | |
7 ;; Keywords: help c mouse tools | |
8 | |
9 ;; This file is part of GNU Emacs. | |
10 | |
11 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
12 ;; it under the terms of the GNU General Public License as published by | |
78236
9355f9b7bbff
Switch license to GPLv3 or later.
Glenn Morris <rgm@gnu.org>
parents:
75347
diff
changeset
|
13 ;; the Free Software Foundation; either version 3, or (at your option) |
25003 | 14 ;; any later version. |
15 | |
16 ;; GNU Emacs is distributed in the hope that it will be useful, | |
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 ;; GNU General Public License for more details. | |
20 | |
21 ;; You should have received a copy of the GNU General Public License | |
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the | |
64091 | 23 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
24 ;; Boston, MA 02110-1301, USA. | |
25003 | 25 |
26 ;;; Commentary: | |
27 | |
28 ;;; Code: | |
29 | |
65297
1cb15495a842
(comint-prompt-regexp): Add defvar.
Juanma Barranquero <lekktu@gmail.com>
parents:
64762
diff
changeset
|
30 (defvar comint-prompt-regexp) |
1cb15495a842
(comint-prompt-regexp): Add defvar.
Juanma Barranquero <lekktu@gmail.com>
parents:
64762
diff
changeset
|
31 |
67706
05fd43fc72e9
(tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents:
67597
diff
changeset
|
32 (defgroup tooltip nil |
05fd43fc72e9
(tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents:
67597
diff
changeset
|
33 "Customization group for the `tooltip' package." |
05fd43fc72e9
(tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents:
67597
diff
changeset
|
34 :group 'help |
05fd43fc72e9
(tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents:
67597
diff
changeset
|
35 :group 'gud |
05fd43fc72e9
(tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents:
67597
diff
changeset
|
36 :group 'mouse |
05fd43fc72e9
(tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents:
67597
diff
changeset
|
37 :group 'tools |
05fd43fc72e9
(tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents:
67597
diff
changeset
|
38 :version "21.1" |
05fd43fc72e9
(tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents:
67597
diff
changeset
|
39 :tag "Tool Tips") |
05fd43fc72e9
(tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents:
67597
diff
changeset
|
40 |
67485
2865d1195586
(tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents:
66348
diff
changeset
|
41 ;;; Switching tooltips on/off |
2865d1195586
(tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents:
66348
diff
changeset
|
42 |
2865d1195586
(tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents:
66348
diff
changeset
|
43 (define-minor-mode tooltip-mode |
70099
7ab0f5013dfb
(tooltip-mode, tooltip-use-echo-area): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
68651
diff
changeset
|
44 "Toggle Tooltip mode. |
7ab0f5013dfb
(tooltip-mode, tooltip-use-echo-area): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
68651
diff
changeset
|
45 With ARG, turn Tooltip mode on if and only if ARG is positive. |
68141
e97b6ce08cb9
(tooltip-mode): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents:
67706
diff
changeset
|
46 When this minor mode is enabled, Emacs displays help text |
70099
7ab0f5013dfb
(tooltip-mode, tooltip-use-echo-area): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
68651
diff
changeset
|
47 in a pop-up window for buttons and menu items that you put the mouse on. |
7ab0f5013dfb
(tooltip-mode, tooltip-use-echo-area): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
68651
diff
changeset
|
48 \(However, if `tooltip-use-echo-area' is non-nil, this and |
7ab0f5013dfb
(tooltip-mode, tooltip-use-echo-area): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
68651
diff
changeset
|
49 all pop-up help appears in the echo area.) |
7ab0f5013dfb
(tooltip-mode, tooltip-use-echo-area): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
68651
diff
changeset
|
50 |
7ab0f5013dfb
(tooltip-mode, tooltip-use-echo-area): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
68651
diff
changeset
|
51 When Tooltip mode is disabled, Emacs displays one line of |
7ab0f5013dfb
(tooltip-mode, tooltip-use-echo-area): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
68651
diff
changeset
|
52 the help text in the echo area, and does not make a pop-up window." |
67485
2865d1195586
(tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents:
66348
diff
changeset
|
53 :global t |
2865d1195586
(tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents:
66348
diff
changeset
|
54 :init-value (not (or noninteractive |
2865d1195586
(tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents:
66348
diff
changeset
|
55 emacs-basic-display |
2865d1195586
(tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents:
66348
diff
changeset
|
56 (not (display-graphic-p)) |
2865d1195586
(tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents:
66348
diff
changeset
|
57 (not (fboundp 'x-show-tip)))) |
2865d1195586
(tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents:
66348
diff
changeset
|
58 :initialize 'custom-initialize-safe-default |
2865d1195586
(tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents:
66348
diff
changeset
|
59 :group 'tooltip |
2865d1195586
(tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents:
66348
diff
changeset
|
60 (unless (or (null tooltip-mode) (fboundp 'x-show-tip)) |
2865d1195586
(tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents:
66348
diff
changeset
|
61 (error "Sorry, tooltips are not yet available on this system")) |
2865d1195586
(tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents:
66348
diff
changeset
|
62 (if tooltip-mode |
2865d1195586
(tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents:
66348
diff
changeset
|
63 (progn |
2865d1195586
(tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents:
66348
diff
changeset
|
64 (add-hook 'pre-command-hook 'tooltip-hide) |
2865d1195586
(tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents:
66348
diff
changeset
|
65 (add-hook 'tooltip-hook 'tooltip-help-tips)) |
2865d1195586
(tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents:
66348
diff
changeset
|
66 (unless (and (boundp 'gud-tooltip-mode) gud-tooltip-mode) |
2865d1195586
(tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents:
66348
diff
changeset
|
67 (remove-hook 'pre-command-hook 'tooltip-hide)) |
2865d1195586
(tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents:
66348
diff
changeset
|
68 (remove-hook 'tooltip-hook 'tooltip-help-tips)) |
2865d1195586
(tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents:
66348
diff
changeset
|
69 (setq show-help-function |
2865d1195586
(tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents:
66348
diff
changeset
|
70 (if tooltip-mode 'tooltip-show-help nil))) |
25003 | 71 |
67706
05fd43fc72e9
(tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents:
67597
diff
changeset
|
72 |
05fd43fc72e9
(tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents:
67597
diff
changeset
|
73 ;;; Customizable settings |
25003 | 74 |
40679
3c4df1ce9e4c
(tooltip-delay): Decrease to 0.7.
Eli Zaretskii <eliz@gnu.org>
parents:
40376
diff
changeset
|
75 (defcustom tooltip-delay 0.7 |
25003 | 76 "Seconds to wait before displaying a tooltip the first time." |
77 :type 'number | |
78 :group 'tooltip) | |
79 | |
80 (defcustom tooltip-short-delay 0.1 | |
81 "Seconds to wait between subsequent tooltips on different items." | |
82 :type 'number | |
83 :group 'tooltip) | |
84 | |
85 (defcustom tooltip-recent-seconds 1 | |
25332
c09e05be2f4b
(tooltip-mode): Customize this, per convention.
Dave Love <fx@gnu.org>
parents:
25003
diff
changeset
|
86 "Display tooltips if changing tip items within this many seconds. |
c09e05be2f4b
(tooltip-mode): Customize this, per convention.
Dave Love <fx@gnu.org>
parents:
25003
diff
changeset
|
87 Do so after `tooltip-short-delay'." |
25003 | 88 :type 'number |
89 :group 'tooltip) | |
90 | |
40679
3c4df1ce9e4c
(tooltip-delay): Decrease to 0.7.
Eli Zaretskii <eliz@gnu.org>
parents:
40376
diff
changeset
|
91 (defcustom tooltip-hide-delay 10 |
35401
c00e94a506a2
(tooltip-hide-delay): New user-option.
Gerd Moellmann <gerd@gnu.org>
parents:
35069
diff
changeset
|
92 "Hide tooltips automatically after this many seconds." |
c00e94a506a2
(tooltip-hide-delay): New user-option.
Gerd Moellmann <gerd@gnu.org>
parents:
35069
diff
changeset
|
93 :type 'number |
c00e94a506a2
(tooltip-hide-delay): New user-option.
Gerd Moellmann <gerd@gnu.org>
parents:
35069
diff
changeset
|
94 :group 'tooltip) |
c00e94a506a2
(tooltip-hide-delay): New user-option.
Gerd Moellmann <gerd@gnu.org>
parents:
35069
diff
changeset
|
95 |
66348
834a001192cb
(tooltip-x-offset, tooltip-y-offset): Change defaults.
Richard M. Stallman <rms@gnu.org>
parents:
65732
diff
changeset
|
96 (defcustom tooltip-x-offset 5 |
46025
ce0d438fe05e
(tooltip-x-offset, tooltip-y-offset): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
45571
diff
changeset
|
97 "X offset, in pixels, for the display of tooltips. |
67706
05fd43fc72e9
(tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents:
67597
diff
changeset
|
98 The offset is the distance between the X position of the mouse and |
05fd43fc72e9
(tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents:
67597
diff
changeset
|
99 the left border of the tooltip window. It must be chosen so that the |
05fd43fc72e9
(tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents:
67597
diff
changeset
|
100 tooltip window doesn't contain the mouse when it pops up, or it may |
05fd43fc72e9
(tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents:
67597
diff
changeset
|
101 interfere with clicking where you wish. |
40173
c4955867228d
(tooltip-x-offset, tooltip-y-offset): Mention in the
Eli Zaretskii <eliz@gnu.org>
parents:
37755
diff
changeset
|
102 |
c4955867228d
(tooltip-x-offset, tooltip-y-offset): Mention in the
Eli Zaretskii <eliz@gnu.org>
parents:
37755
diff
changeset
|
103 If `tooltip-frame-parameters' includes the `left' parameter, |
c4955867228d
(tooltip-x-offset, tooltip-y-offset): Mention in the
Eli Zaretskii <eliz@gnu.org>
parents:
37755
diff
changeset
|
104 the value of `tooltip-x-offset' is ignored." |
66348
834a001192cb
(tooltip-x-offset, tooltip-y-offset): Change defaults.
Richard M. Stallman <rms@gnu.org>
parents:
65732
diff
changeset
|
105 :type 'integer |
33587
7d4c3fcd3421
(tooltip-x-offset, tooltip-y-offset): New user-options.
Gerd Moellmann <gerd@gnu.org>
parents:
33356
diff
changeset
|
106 :group 'tooltip) |
7d4c3fcd3421
(tooltip-x-offset, tooltip-y-offset): New user-options.
Gerd Moellmann <gerd@gnu.org>
parents:
33356
diff
changeset
|
107 |
67531
525cba59adb2
Changed default to 20 for tooltip-y-offset.
Jan Djärv <jan.h.d@swipnet.se>
parents:
67485
diff
changeset
|
108 (defcustom tooltip-y-offset +20 |
46025
ce0d438fe05e
(tooltip-x-offset, tooltip-y-offset): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
45571
diff
changeset
|
109 "Y offset, in pixels, for the display of tooltips. |
67706
05fd43fc72e9
(tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents:
67597
diff
changeset
|
110 The offset is the distance between the Y position of the mouse and |
05fd43fc72e9
(tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents:
67597
diff
changeset
|
111 the top border of the tooltip window. It must be chosen so that the |
05fd43fc72e9
(tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents:
67597
diff
changeset
|
112 tooltip window doesn't contain the mouse when it pops up, or it may |
05fd43fc72e9
(tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents:
67597
diff
changeset
|
113 interfere with clicking where you wish. |
40173
c4955867228d
(tooltip-x-offset, tooltip-y-offset): Mention in the
Eli Zaretskii <eliz@gnu.org>
parents:
37755
diff
changeset
|
114 |
c4955867228d
(tooltip-x-offset, tooltip-y-offset): Mention in the
Eli Zaretskii <eliz@gnu.org>
parents:
37755
diff
changeset
|
115 If `tooltip-frame-parameters' includes the `top' parameter, |
c4955867228d
(tooltip-x-offset, tooltip-y-offset): Mention in the
Eli Zaretskii <eliz@gnu.org>
parents:
37755
diff
changeset
|
116 the value of `tooltip-y-offset' is ignored." |
66348
834a001192cb
(tooltip-x-offset, tooltip-y-offset): Change defaults.
Richard M. Stallman <rms@gnu.org>
parents:
65732
diff
changeset
|
117 :type 'integer |
33587
7d4c3fcd3421
(tooltip-x-offset, tooltip-y-offset): New user-options.
Gerd Moellmann <gerd@gnu.org>
parents:
33356
diff
changeset
|
118 :group 'tooltip) |
7d4c3fcd3421
(tooltip-x-offset, tooltip-y-offset): New user-options.
Gerd Moellmann <gerd@gnu.org>
parents:
33356
diff
changeset
|
119 |
25003 | 120 (defcustom tooltip-frame-parameters |
121 '((name . "tooltip") | |
66348
834a001192cb
(tooltip-x-offset, tooltip-y-offset): Change defaults.
Richard M. Stallman <rms@gnu.org>
parents:
65732
diff
changeset
|
122 (internal-border-width . 2) |
25003 | 123 (border-width . 1)) |
40173
c4955867228d
(tooltip-x-offset, tooltip-y-offset): Mention in the
Eli Zaretskii <eliz@gnu.org>
parents:
37755
diff
changeset
|
124 "Frame parameters used for tooltips. |
c4955867228d
(tooltip-x-offset, tooltip-y-offset): Mention in the
Eli Zaretskii <eliz@gnu.org>
parents:
37755
diff
changeset
|
125 |
c4955867228d
(tooltip-x-offset, tooltip-y-offset): Mention in the
Eli Zaretskii <eliz@gnu.org>
parents:
37755
diff
changeset
|
126 If `left' or `top' parameters are included, they specify the absolute |
c4955867228d
(tooltip-x-offset, tooltip-y-offset): Mention in the
Eli Zaretskii <eliz@gnu.org>
parents:
37755
diff
changeset
|
127 position to pop up the tooltip." |
25003 | 128 :type 'sexp |
129 :group 'tooltip) | |
130 | |
35043
f7ca93e40e16
(tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents:
34689
diff
changeset
|
131 (defface tooltip |
f7ca93e40e16
(tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents:
34689
diff
changeset
|
132 '((((class color)) |
52031
5163fa137977
(defface tooltip): Inherit from variable-pitch.
John Paul Wallington <jpw@pobox.com>
parents:
49597
diff
changeset
|
133 :background "lightyellow" |
5163fa137977
(defface tooltip): Inherit from variable-pitch.
John Paul Wallington <jpw@pobox.com>
parents:
49597
diff
changeset
|
134 :foreground "black" |
5163fa137977
(defface tooltip): Inherit from variable-pitch.
John Paul Wallington <jpw@pobox.com>
parents:
49597
diff
changeset
|
135 :inherit variable-pitch) |
5163fa137977
(defface tooltip): Inherit from variable-pitch.
John Paul Wallington <jpw@pobox.com>
parents:
49597
diff
changeset
|
136 (t |
5163fa137977
(defface tooltip): Inherit from variable-pitch.
John Paul Wallington <jpw@pobox.com>
parents:
49597
diff
changeset
|
137 :inherit variable-pitch)) |
35043
f7ca93e40e16
(tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents:
34689
diff
changeset
|
138 "Face for tooltips." |
65732
cd8e6d86c531
(tooltip): Add group `basic-faces'.
Juri Linkov <juri@jurta.org>
parents:
65297
diff
changeset
|
139 :group 'tooltip |
cd8e6d86c531
(tooltip): Add group `basic-faces'.
Juri Linkov <juri@jurta.org>
parents:
65297
diff
changeset
|
140 :group 'basic-faces) |
35043
f7ca93e40e16
(tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents:
34689
diff
changeset
|
141 |
63441
ebbf98a044ac
* tooltip.el (tooltip-use-echo-area): Restore from gud.el for
Nick Roberts <nickrob@snap.net.nz>
parents:
62135
diff
changeset
|
142 (defcustom tooltip-use-echo-area nil |
70099
7ab0f5013dfb
(tooltip-mode, tooltip-use-echo-area): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
68651
diff
changeset
|
143 "Use the echo area instead of tooltip frames for help and GUD tooltips. |
7ab0f5013dfb
(tooltip-mode, tooltip-use-echo-area): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
68651
diff
changeset
|
144 To display multi-line help text in the echo area, set this to t |
7ab0f5013dfb
(tooltip-mode, tooltip-use-echo-area): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
68651
diff
changeset
|
145 and enable `tooltip-mode'." |
63441
ebbf98a044ac
* tooltip.el (tooltip-use-echo-area): Restore from gud.el for
Nick Roberts <nickrob@snap.net.nz>
parents:
62135
diff
changeset
|
146 :type 'boolean |
ebbf98a044ac
* tooltip.el (tooltip-use-echo-area): Restore from gud.el for
Nick Roberts <nickrob@snap.net.nz>
parents:
62135
diff
changeset
|
147 :group 'tooltip) |
ebbf98a044ac
* tooltip.el (tooltip-use-echo-area): Restore from gud.el for
Nick Roberts <nickrob@snap.net.nz>
parents:
62135
diff
changeset
|
148 |
25003 | 149 |
150 ;;; Variables that are not customizable. | |
151 | |
152 (defvar tooltip-hook nil | |
153 "Functions to call to display tooltips. | |
154 Each function is called with one argument EVENT which is a copy of | |
155 the last mouse movement event that occurred.") | |
156 | |
157 (defvar tooltip-timeout-id nil | |
158 "The id of the timeout started when Emacs becomes idle.") | |
159 | |
160 (defvar tooltip-last-mouse-motion-event nil | |
161 "A copy of the last mouse motion event seen.") | |
162 | |
163 (defvar tooltip-hide-time nil | |
164 "Time when the last tooltip was hidden.") | |
165 | |
63938
cd982981d99a
(gud-tooltip-mode): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents:
63587
diff
changeset
|
166 (defvar gud-tooltip-mode) ;; Prevent warning. |
cd982981d99a
(gud-tooltip-mode): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents:
63587
diff
changeset
|
167 |
25003 | 168 ;;; Event accessors |
169 | |
170 (defun tooltip-event-buffer (event) | |
171 "Return the buffer over which event EVENT occurred. | |
172 This might return nil if the event did not occur over a buffer." | |
173 (let ((window (posn-window (event-end event)))) | |
174 (and window (window-buffer window)))) | |
175 | |
176 | |
177 ;;; Timeout for tooltip display | |
178 | |
179 (defun tooltip-delay () | |
180 "Return the delay in seconds for the next tooltip." | |
181 (let ((delay tooltip-delay) | |
30481 | 182 (now (float-time))) |
25003 | 183 (when (and tooltip-hide-time |
184 (< (- now tooltip-hide-time) tooltip-recent-seconds)) | |
185 (setq delay tooltip-short-delay)) | |
186 delay)) | |
187 | |
35069
d19eadb47c76
(tooltip-cancel-delayed-tip)
Gerd Moellmann <gerd@gnu.org>
parents:
35044
diff
changeset
|
188 (defun tooltip-cancel-delayed-tip () |
25003 | 189 "Disable the tooltip timeout." |
190 (when tooltip-timeout-id | |
191 (disable-timeout tooltip-timeout-id) | |
192 (setq tooltip-timeout-id nil))) | |
193 | |
35069
d19eadb47c76
(tooltip-cancel-delayed-tip)
Gerd Moellmann <gerd@gnu.org>
parents:
35044
diff
changeset
|
194 (defun tooltip-start-delayed-tip () |
63483
8e09dea7559c
(tooltip-start-delayed-tip, tooltip-timeout, tooltip-use-echo-area,
Juanma Barranquero <lekktu@gmail.com>
parents:
63441
diff
changeset
|
195 "Add a one-shot timeout to call function `tooltip-timeout'." |
25003 | 196 (setq tooltip-timeout-id |
197 (add-timeout (tooltip-delay) 'tooltip-timeout nil))) | |
198 | |
199 (defun tooltip-timeout (object) | |
63483
8e09dea7559c
(tooltip-start-delayed-tip, tooltip-timeout, tooltip-use-echo-area,
Juanma Barranquero <lekktu@gmail.com>
parents:
63441
diff
changeset
|
200 "Function called when timer with id `tooltip-timeout-id' fires." |
25003 | 201 (run-hook-with-args-until-success 'tooltip-hook |
202 tooltip-last-mouse-motion-event)) | |
203 | |
204 | |
205 ;;; Displaying tips | |
206 | |
35043
f7ca93e40e16
(tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents:
34689
diff
changeset
|
207 (defun tooltip-set-param (alist key value) |
40178
1dab42ecd751
(tooltip-set-param): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents:
40173
diff
changeset
|
208 "Change the value of KEY in alist ALIST to VALUE. |
49597
e88404e8f2cf
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48925
diff
changeset
|
209 If there's no association for KEY in ALIST, add one, otherwise |
35043
f7ca93e40e16
(tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents:
34689
diff
changeset
|
210 change the existing association. Value is the resulting alist." |
f7ca93e40e16
(tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents:
34689
diff
changeset
|
211 (let ((param (assq key alist))) |
f7ca93e40e16
(tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents:
34689
diff
changeset
|
212 (if (consp param) |
f7ca93e40e16
(tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents:
34689
diff
changeset
|
213 (setcdr param value) |
f7ca93e40e16
(tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents:
34689
diff
changeset
|
214 (push (cons key value) alist)) |
f7ca93e40e16
(tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents:
34689
diff
changeset
|
215 alist)) |
f7ca93e40e16
(tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents:
34689
diff
changeset
|
216 |
61626
058da2e83614
(tooltip-show): Change second arg to USE-ECHO-AREA
Kim F. Storm <storm@cua.dk>
parents:
61614
diff
changeset
|
217 (defun tooltip-show (text &optional use-echo-area) |
40173
c4955867228d
(tooltip-x-offset, tooltip-y-offset): Mention in the
Eli Zaretskii <eliz@gnu.org>
parents:
37755
diff
changeset
|
218 "Show a tooltip window displaying TEXT. |
c4955867228d
(tooltip-x-offset, tooltip-y-offset): Mention in the
Eli Zaretskii <eliz@gnu.org>
parents:
37755
diff
changeset
|
219 |
61608
6a8ebeaf5f56
(tooltip-gud-echo-area): Rename from
Nick Roberts <nickrob@snap.net.nz>
parents:
61565
diff
changeset
|
220 Text larger than `x-max-tooltip-size' is clipped. |
40173
c4955867228d
(tooltip-x-offset, tooltip-y-offset): Mention in the
Eli Zaretskii <eliz@gnu.org>
parents:
37755
diff
changeset
|
221 |
c4955867228d
(tooltip-x-offset, tooltip-y-offset): Mention in the
Eli Zaretskii <eliz@gnu.org>
parents:
37755
diff
changeset
|
222 If the alist in `tooltip-frame-parameters' includes `left' and `top' |
c4955867228d
(tooltip-x-offset, tooltip-y-offset): Mention in the
Eli Zaretskii <eliz@gnu.org>
parents:
37755
diff
changeset
|
223 parameters, they determine the x and y position where the tooltip |
c4955867228d
(tooltip-x-offset, tooltip-y-offset): Mention in the
Eli Zaretskii <eliz@gnu.org>
parents:
37755
diff
changeset
|
224 is displayed. Otherwise, the tooltip pops at offsets specified by |
c4955867228d
(tooltip-x-offset, tooltip-y-offset): Mention in the
Eli Zaretskii <eliz@gnu.org>
parents:
37755
diff
changeset
|
225 `tooltip-x-offset' and `tooltip-y-offset' from the current mouse |
61608
6a8ebeaf5f56
(tooltip-gud-echo-area): Rename from
Nick Roberts <nickrob@snap.net.nz>
parents:
61565
diff
changeset
|
226 position. |
6a8ebeaf5f56
(tooltip-gud-echo-area): Rename from
Nick Roberts <nickrob@snap.net.nz>
parents:
61565
diff
changeset
|
227 |
61626
058da2e83614
(tooltip-show): Change second arg to USE-ECHO-AREA
Kim F. Storm <storm@cua.dk>
parents:
61614
diff
changeset
|
228 Optional second arg USE-ECHO-AREA non-nil means to show tooltip |
058da2e83614
(tooltip-show): Change second arg to USE-ECHO-AREA
Kim F. Storm <storm@cua.dk>
parents:
61614
diff
changeset
|
229 in echo area." |
058da2e83614
(tooltip-show): Change second arg to USE-ECHO-AREA
Kim F. Storm <storm@cua.dk>
parents:
61614
diff
changeset
|
230 (if use-echo-area |
32431
a35cc9700ff7
* tooltip.el (tooltip-use-echo-area): New user variable.
Sam Steingold <sds@gnu.org>
parents:
30481
diff
changeset
|
231 (message "%s" text) |
34540
e1e4704de6ed
(tooltip-show): If an error is signaled in
Gerd Moellmann <gerd@gnu.org>
parents:
33925
diff
changeset
|
232 (condition-case error |
35043
f7ca93e40e16
(tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents:
34689
diff
changeset
|
233 (let ((params (copy-sequence tooltip-frame-parameters)) |
f7ca93e40e16
(tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents:
34689
diff
changeset
|
234 (fg (face-attribute 'tooltip :foreground)) |
f7ca93e40e16
(tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents:
34689
diff
changeset
|
235 (bg (face-attribute 'tooltip :background))) |
35069
d19eadb47c76
(tooltip-cancel-delayed-tip)
Gerd Moellmann <gerd@gnu.org>
parents:
35044
diff
changeset
|
236 (when (stringp fg) |
d19eadb47c76
(tooltip-cancel-delayed-tip)
Gerd Moellmann <gerd@gnu.org>
parents:
35044
diff
changeset
|
237 (setq params (tooltip-set-param params 'foreground-color fg)) |
d19eadb47c76
(tooltip-cancel-delayed-tip)
Gerd Moellmann <gerd@gnu.org>
parents:
35044
diff
changeset
|
238 (setq params (tooltip-set-param params 'border-color fg))) |
d19eadb47c76
(tooltip-cancel-delayed-tip)
Gerd Moellmann <gerd@gnu.org>
parents:
35044
diff
changeset
|
239 (when (stringp bg) |
d19eadb47c76
(tooltip-cancel-delayed-tip)
Gerd Moellmann <gerd@gnu.org>
parents:
35044
diff
changeset
|
240 (setq params (tooltip-set-param params 'background-color bg))) |
35043
f7ca93e40e16
(tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents:
34689
diff
changeset
|
241 (x-show-tip (propertize text 'face 'tooltip) |
f7ca93e40e16
(tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents:
34689
diff
changeset
|
242 (selected-frame) |
35044 | 243 params |
35401
c00e94a506a2
(tooltip-hide-delay): New user-option.
Gerd Moellmann <gerd@gnu.org>
parents:
35069
diff
changeset
|
244 tooltip-hide-delay |
35043
f7ca93e40e16
(tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents:
34689
diff
changeset
|
245 tooltip-x-offset |
f7ca93e40e16
(tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents:
34689
diff
changeset
|
246 tooltip-y-offset)) |
49597
e88404e8f2cf
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48925
diff
changeset
|
247 (error |
34540
e1e4704de6ed
(tooltip-show): If an error is signaled in
Gerd Moellmann <gerd@gnu.org>
parents:
33925
diff
changeset
|
248 (message "Error while displaying tooltip: %s" error) |
e1e4704de6ed
(tooltip-show): If an error is signaled in
Gerd Moellmann <gerd@gnu.org>
parents:
33925
diff
changeset
|
249 (sit-for 1) |
e1e4704de6ed
(tooltip-show): If an error is signaled in
Gerd Moellmann <gerd@gnu.org>
parents:
33925
diff
changeset
|
250 (message "%s" text))))) |
e1e4704de6ed
(tooltip-show): If an error is signaled in
Gerd Moellmann <gerd@gnu.org>
parents:
33925
diff
changeset
|
251 |
25003 | 252 (defun tooltip-hide (&optional ignored-arg) |
253 "Hide a tooltip, if one is displayed. | |
254 Value is non-nil if tooltip was open." | |
35069
d19eadb47c76
(tooltip-cancel-delayed-tip)
Gerd Moellmann <gerd@gnu.org>
parents:
35044
diff
changeset
|
255 (tooltip-cancel-delayed-tip) |
25003 | 256 (when (x-hide-tip) |
30481 | 257 (setq tooltip-hide-time (float-time)))) |
25003 | 258 |
259 | |
260 ;;; Debugger-related functions | |
261 | |
262 (defun tooltip-identifier-from-point (point) | |
263 "Extract the identifier at POINT, if any. | |
264 Value is nil if no identifier exists at point. Identifier extraction | |
265 is based on the current syntax table." | |
266 (save-excursion | |
267 (goto-char point) | |
268 (let ((start (progn (skip-syntax-backward "w_") (point)))) | |
269 (unless (looking-at "[0-9]") | |
270 (skip-syntax-forward "w_") | |
271 (when (> (point) start) | |
272 (buffer-substring start (point))))))) | |
273 | |
274 (defmacro tooltip-region-active-p () | |
87404 | 275 "Value is non-nil if the region should override command actions." |
87403
f6740b43efae
(tooltip-region-active-p): Use `use-region-p'.
Richard M. Stallman <rms@gnu.org>
parents:
85529
diff
changeset
|
276 `(use-region-p)) |
25003 | 277 |
278 (defun tooltip-expr-to-print (event) | |
279 "Return an expression that should be printed for EVENT. | |
280 If a region is active and the mouse is inside the region, print | |
281 the region. Otherwise, figure out the identifier around the point | |
282 where the mouse is." | |
283 (save-excursion | |
284 (set-buffer (tooltip-event-buffer event)) | |
285 (let ((point (posn-point (event-end event)))) | |
286 (if (tooltip-region-active-p) | |
287 (when (and (<= (region-beginning) point) (<= point (region-end))) | |
288 (buffer-substring (region-beginning) (region-end))) | |
289 (tooltip-identifier-from-point point))))) | |
290 | |
291 (defun tooltip-process-prompt-regexp (process) | |
292 "Return regexp matching the prompt of PROCESS at the end of a string. | |
63483
8e09dea7559c
(tooltip-start-delayed-tip, tooltip-timeout, tooltip-use-echo-area,
Juanma Barranquero <lekktu@gmail.com>
parents:
63441
diff
changeset
|
293 The prompt is taken from the value of `comint-prompt-regexp' in |
8e09dea7559c
(tooltip-start-delayed-tip, tooltip-timeout, tooltip-use-echo-area,
Juanma Barranquero <lekktu@gmail.com>
parents:
63441
diff
changeset
|
294 the buffer of PROCESS." |
25003 | 295 (let ((prompt-regexp (save-excursion |
296 (set-buffer (process-buffer process)) | |
297 comint-prompt-regexp))) | |
298 ;; Most start with `^' but the one for `sdb' cannot be easily | |
299 ;; stripped. Code the prompt for `sdb' fixed here. | |
300 (if (= (aref prompt-regexp 0) ?^) | |
301 (setq prompt-regexp (substring prompt-regexp 1)) | |
302 (setq prompt-regexp "\\*")) | |
303 (concat "\n*" prompt-regexp "$"))) | |
304 | |
305 (defun tooltip-strip-prompt (process output) | |
306 "Return OUTPUT with any prompt of PROCESS stripped from its end." | |
307 (let ((prompt-regexp (tooltip-process-prompt-regexp process))) | |
308 (save-match-data | |
309 (when (string-match prompt-regexp output) | |
310 (setq output (substring output 0 (match-beginning 0))))) | |
311 output)) | |
312 | |
313 | |
314 ;;; Tooltip help. | |
315 | |
316 (defvar tooltip-help-message nil | |
63441
ebbf98a044ac
* tooltip.el (tooltip-use-echo-area): Restore from gud.el for
Nick Roberts <nickrob@snap.net.nz>
parents:
62135
diff
changeset
|
317 "The last help message received via `tooltip-show-help'.") |
25003 | 318 |
63441
ebbf98a044ac
* tooltip.el (tooltip-use-echo-area): Restore from gud.el for
Nick Roberts <nickrob@snap.net.nz>
parents:
62135
diff
changeset
|
319 (defun tooltip-show-help (msg) |
25003 | 320 "Function installed as `show-help-function'. |
321 MSG is either a help string to display, or nil to cancel the display." | |
61161
22abf0130979
(tooltip-show-help-function): Don't fixup message here.
Kim F. Storm <storm@cua.dk>
parents:
61128
diff
changeset
|
322 (let ((previous-help tooltip-help-message)) |
25003 | 323 (setq tooltip-help-message msg) |
324 (cond ((null msg) | |
35069
d19eadb47c76
(tooltip-cancel-delayed-tip)
Gerd Moellmann <gerd@gnu.org>
parents:
35044
diff
changeset
|
325 ;; Cancel display. This also cancels a delayed tip, if |
d19eadb47c76
(tooltip-cancel-delayed-tip)
Gerd Moellmann <gerd@gnu.org>
parents:
35044
diff
changeset
|
326 ;; there is one. |
25003 | 327 (tooltip-hide)) |
35069
d19eadb47c76
(tooltip-cancel-delayed-tip)
Gerd Moellmann <gerd@gnu.org>
parents:
35044
diff
changeset
|
328 ((equal previous-help msg) |
d19eadb47c76
(tooltip-cancel-delayed-tip)
Gerd Moellmann <gerd@gnu.org>
parents:
35044
diff
changeset
|
329 ;; Same help as before (but possibly the mouse has moved). |
d19eadb47c76
(tooltip-cancel-delayed-tip)
Gerd Moellmann <gerd@gnu.org>
parents:
35044
diff
changeset
|
330 ;; Keep what we have. |
d19eadb47c76
(tooltip-cancel-delayed-tip)
Gerd Moellmann <gerd@gnu.org>
parents:
35044
diff
changeset
|
331 ) |
d19eadb47c76
(tooltip-cancel-delayed-tip)
Gerd Moellmann <gerd@gnu.org>
parents:
35044
diff
changeset
|
332 (t |
49597
e88404e8f2cf
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48925
diff
changeset
|
333 ;; A different help. Remove a previous tooltip, and |
35069
d19eadb47c76
(tooltip-cancel-delayed-tip)
Gerd Moellmann <gerd@gnu.org>
parents:
35044
diff
changeset
|
334 ;; display a new one, with some delay. |
25003 | 335 (tooltip-hide) |
35069
d19eadb47c76
(tooltip-cancel-delayed-tip)
Gerd Moellmann <gerd@gnu.org>
parents:
35044
diff
changeset
|
336 (tooltip-start-delayed-tip))))) |
25003 | 337 |
338 (defun tooltip-help-tips (event) | |
339 "Hook function to display a help tooltip. | |
35069
d19eadb47c76
(tooltip-cancel-delayed-tip)
Gerd Moellmann <gerd@gnu.org>
parents:
35044
diff
changeset
|
340 This is installed on the hook `tooltip-hook', which is run when |
63483
8e09dea7559c
(tooltip-start-delayed-tip, tooltip-timeout, tooltip-use-echo-area,
Juanma Barranquero <lekktu@gmail.com>
parents:
63441
diff
changeset
|
341 the timer with id `tooltip-timeout-id' fires. |
25003 | 342 Value is non-nil if this function handled the tip." |
343 (when (stringp tooltip-help-message) | |
63441
ebbf98a044ac
* tooltip.el (tooltip-use-echo-area): Restore from gud.el for
Nick Roberts <nickrob@snap.net.nz>
parents:
62135
diff
changeset
|
344 (tooltip-show tooltip-help-message tooltip-use-echo-area) |
25003 | 345 t)) |
346 | |
48601
ac47e19224b0
(tooltip-gud-process-output): Handle annotations that
Nick Roberts <nickrob@snap.net.nz>
parents:
48580
diff
changeset
|
347 (provide 'tooltip) |
25003 | 348 |
58155 | 349 ;; arch-tag: 3d61135e-4618-4a78-af28-183f6df5636f |
25003 | 350 ;;; tooltip.el ends here |