annotate lisp/tooltip.el @ 106768:21fd634f447a

Make line<->pixel_y conversion macros aware of native menu/tool bars. They are placed above the internal border. This supersedes special treatment of native tool bars in the display code. This fixes wrong display position of native menu bars and bogus mouse highlighting of native tool bars, both of which can be found when internal border width is large. Also it fixes wrong flashed part on visible bell with native menu bars. * frame.h (FRAME_TOP_MARGIN_HEIGHT): New macro. (FRAME_LINE_TO_PIXEL_Y, FRAME_PIXEL_Y_TO_LINE): Take account of pseudo windows above internal border. * window.h (WINDOW_MENU_BAR_P, WINDOW_TOOL_BAR_P): New macros. (WINDOW_TOP_EDGE_Y, WINDOW_BOTTOM_EDGE_Y): Take account of pseudo windows above internal border. * xdisp.c (get_glyph_string_clip_rects, init_glyph_string): Don't treat tool bar windows specially. * xfns.c (x_set_tool_bar_lines): Take account of menu bar height. * xterm.c (x_after_update_window_line): Don't treat tool bar windows specially. (XTflash): Take account of menu bar height. * w32term.c (x_after_update_window_line): Don't treat tool bar windows specially.
author YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
date Sat, 09 Jan 2010 13:16:32 +0900
parents e28c9547f91d
children 1d1d5d9bd884
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
45236
ebc4fa4ef475 Fix typo.
Pavel Janík <Pavel@Janik.cz>
parents: 42706
diff changeset
1 ;;; tooltip.el --- show tooltip windows
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
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,
100908
a9dc0e7c3f2b Add 2009 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 99283
diff changeset
4 ;; 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
5
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
6 ;; Author: Gerd Moellmann <gerd@acm.org>
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
7 ;; Keywords: help c mouse tools
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
8
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
10
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94186
diff changeset
11 ;; GNU Emacs is free software: you can redistribute it and/or modify
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94186
diff changeset
13 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94186
diff changeset
14 ;; (at your option) any later version.
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
15
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
20
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94186
diff changeset
22 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
23
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
24 ;;; Commentary:
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
25
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
26 ;;; Code:
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
27
65297
1cb15495a842 (comint-prompt-regexp): Add defvar.
Juanma Barranquero <lekktu@gmail.com>
parents: 64762
diff changeset
28 (defvar comint-prompt-regexp)
1cb15495a842 (comint-prompt-regexp): Add defvar.
Juanma Barranquero <lekktu@gmail.com>
parents: 64762
diff changeset
29
67706
05fd43fc72e9 (tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents: 67597
diff changeset
30 (defgroup tooltip nil
05fd43fc72e9 (tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents: 67597
diff changeset
31 "Customization group for the `tooltip' package."
05fd43fc72e9 (tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents: 67597
diff changeset
32 :group 'help
05fd43fc72e9 (tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents: 67597
diff changeset
33 :group 'gud
05fd43fc72e9 (tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents: 67597
diff changeset
34 :group 'mouse
05fd43fc72e9 (tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents: 67597
diff changeset
35 :group 'tools
05fd43fc72e9 (tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents: 67597
diff changeset
36 :version "21.1"
05fd43fc72e9 (tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents: 67597
diff changeset
37 :tag "Tool Tips")
05fd43fc72e9 (tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents: 67597
diff changeset
38
67485
2865d1195586 (tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents: 66348
diff changeset
39 ;;; 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
40
2865d1195586 (tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents: 66348
diff changeset
41 (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
42 "Toggle Tooltip mode.
7ab0f5013dfb (tooltip-mode, tooltip-use-echo-area): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 68651
diff changeset
43 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
44 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
45 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
46 \(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
47 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
48
7ab0f5013dfb (tooltip-mode, tooltip-use-echo-area): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 68651
diff changeset
49 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
50 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
51 :global t
98061
68a220b546b7 (tooltip-mode): Initialize unconditionally to t.
Chong Yidong <cyd@stupidchicken.com>
parents: 95841
diff changeset
52 ;; Even if we start on a text-only terminal, make this non-nil by
68a220b546b7 (tooltip-mode): Initialize unconditionally to t.
Chong Yidong <cyd@stupidchicken.com>
parents: 95841
diff changeset
53 ;; default because we can open a graphical frame later (multi-tty).
68a220b546b7 (tooltip-mode): Initialize unconditionally to t.
Chong Yidong <cyd@stupidchicken.com>
parents: 95841
diff changeset
54 :init-value t
104990
f0794252d960 * mail/sendmail.el (send-mail-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103086
diff changeset
55 :initialize 'custom-initialize-delay
67485
2865d1195586 (tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents: 66348
diff changeset
56 :group 'tooltip
2865d1195586 (tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents: 66348
diff changeset
57 (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
58 (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
59 (if tooltip-mode
2865d1195586 (tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents: 66348
diff changeset
60 (progn
2865d1195586 (tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents: 66348
diff changeset
61 (add-hook 'pre-command-hook 'tooltip-hide)
99213
33f78208d5f0 Rename `tooltip-hook' to `tooltip-functions'.
Juanma Barranquero <lekktu@gmail.com>
parents: 98061
diff changeset
62 (add-hook 'tooltip-functions 'tooltip-help-tips))
67485
2865d1195586 (tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents: 66348
diff changeset
63 (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
64 (remove-hook 'pre-command-hook 'tooltip-hide))
99213
33f78208d5f0 Rename `tooltip-hook' to `tooltip-functions'.
Juanma Barranquero <lekktu@gmail.com>
parents: 98061
diff changeset
65 (remove-hook 'tooltip-functions 'tooltip-help-tips))
67485
2865d1195586 (tooltip-mode): Move to start of file so that it
Nick Roberts <nickrob@snap.net.nz>
parents: 66348
diff changeset
66 (setq show-help-function
93905
529aa606e975 (tooltip-mode): Set tooltip-show-help-non-mode as
Jan Djärv <jan.h.d@swipnet.se>
parents: 87649
diff changeset
67 (if tooltip-mode 'tooltip-show-help 'tooltip-show-help-non-mode)))
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
68
67706
05fd43fc72e9 (tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents: 67597
diff changeset
69
05fd43fc72e9 (tooltip): Move defgroup before define-minor-mode.
Juri Linkov <juri@jurta.org>
parents: 67597
diff changeset
70 ;;; Customizable settings
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
71
40679
3c4df1ce9e4c (tooltip-delay): Decrease to 0.7.
Eli Zaretskii <eliz@gnu.org>
parents: 40376
diff changeset
72 (defcustom tooltip-delay 0.7
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
73 "Seconds to wait before displaying a tooltip the first time."
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
74 :type 'number
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
75 :group 'tooltip)
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
76
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
77 (defcustom tooltip-short-delay 0.1
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
78 "Seconds to wait between subsequent tooltips on different items."
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
79 :type 'number
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
80 :group 'tooltip)
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
81
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
82 (defcustom tooltip-recent-seconds 1
25332
c09e05be2f4b (tooltip-mode): Customize this, per convention.
Dave Love <fx@gnu.org>
parents: 25003
diff changeset
83 "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
84 Do so after `tooltip-short-delay'."
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
85 :type 'number
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
86 :group 'tooltip)
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
87
40679
3c4df1ce9e4c (tooltip-delay): Decrease to 0.7.
Eli Zaretskii <eliz@gnu.org>
parents: 40376
diff changeset
88 (defcustom tooltip-hide-delay 10
35401
c00e94a506a2 (tooltip-hide-delay): New user-option.
Gerd Moellmann <gerd@gnu.org>
parents: 35069
diff changeset
89 "Hide tooltips automatically after this many seconds."
c00e94a506a2 (tooltip-hide-delay): New user-option.
Gerd Moellmann <gerd@gnu.org>
parents: 35069
diff changeset
90 :type 'number
c00e94a506a2 (tooltip-hide-delay): New user-option.
Gerd Moellmann <gerd@gnu.org>
parents: 35069
diff changeset
91 :group 'tooltip)
c00e94a506a2 (tooltip-hide-delay): New user-option.
Gerd Moellmann <gerd@gnu.org>
parents: 35069
diff changeset
92
66348
834a001192cb (tooltip-x-offset, tooltip-y-offset): Change defaults.
Richard M. Stallman <rms@gnu.org>
parents: 65732
diff changeset
93 (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
94 "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
95 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
96 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
97 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
98 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
99
c4955867228d (tooltip-x-offset, tooltip-y-offset): Mention in the
Eli Zaretskii <eliz@gnu.org>
parents: 37755
diff changeset
100 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
101 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
102 :type 'integer
33587
7d4c3fcd3421 (tooltip-x-offset, tooltip-y-offset): New user-options.
Gerd Moellmann <gerd@gnu.org>
parents: 33356
diff changeset
103 :group 'tooltip)
7d4c3fcd3421 (tooltip-x-offset, tooltip-y-offset): New user-options.
Gerd Moellmann <gerd@gnu.org>
parents: 33356
diff changeset
104
67531
525cba59adb2 Changed default to 20 for tooltip-y-offset.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67485
diff changeset
105 (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
106 "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
107 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
108 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
109 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
110 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
111
c4955867228d (tooltip-x-offset, tooltip-y-offset): Mention in the
Eli Zaretskii <eliz@gnu.org>
parents: 37755
diff changeset
112 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
113 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
114 :type 'integer
33587
7d4c3fcd3421 (tooltip-x-offset, tooltip-y-offset): New user-options.
Gerd Moellmann <gerd@gnu.org>
parents: 33356
diff changeset
115 :group 'tooltip)
7d4c3fcd3421 (tooltip-x-offset, tooltip-y-offset): New user-options.
Gerd Moellmann <gerd@gnu.org>
parents: 33356
diff changeset
116
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
117 (defcustom tooltip-frame-parameters
105967
e28c9547f91d (tooltip-frame-parameters): Undo previous change.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105957
diff changeset
118 '((name . "tooltip")
66348
834a001192cb (tooltip-x-offset, tooltip-y-offset): Change defaults.
Richard M. Stallman <rms@gnu.org>
parents: 65732
diff changeset
119 (internal-border-width . 2)
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
120 (border-width . 1))
40173
c4955867228d (tooltip-x-offset, tooltip-y-offset): Mention in the
Eli Zaretskii <eliz@gnu.org>
parents: 37755
diff changeset
121 "Frame parameters used for tooltips.
c4955867228d (tooltip-x-offset, tooltip-y-offset): Mention in the
Eli Zaretskii <eliz@gnu.org>
parents: 37755
diff changeset
122
c4955867228d (tooltip-x-offset, tooltip-y-offset): Mention in the
Eli Zaretskii <eliz@gnu.org>
parents: 37755
diff changeset
123 If `left' or `top' parameters are included, they specify the absolute
99283
563e71d339f2 * tooltip.el (tooltip-frame-parameters): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 99213
diff changeset
124 position to pop up the tooltip.
563e71d339f2 * tooltip.el (tooltip-frame-parameters): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 99213
diff changeset
125
563e71d339f2 * tooltip.el (tooltip-frame-parameters): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 99213
diff changeset
126 Note that font and color parameters are ignored, and the attributes
563e71d339f2 * tooltip.el (tooltip-frame-parameters): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 99213
diff changeset
127 of the `tooltip' face are used instead."
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
128 :type 'sexp
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
129 :group 'tooltip)
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
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
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
149
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
150 ;;; Variables that are not customizable.
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
151
99213
33f78208d5f0 Rename `tooltip-hook' to `tooltip-functions'.
Juanma Barranquero <lekktu@gmail.com>
parents: 98061
diff changeset
152 (defvar tooltip-functions nil
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
153 "Functions to call to display tooltips.
99213
33f78208d5f0 Rename `tooltip-hook' to `tooltip-functions'.
Juanma Barranquero <lekktu@gmail.com>
parents: 98061
diff changeset
154 Each function is called with one argument EVENT which is a copy
33f78208d5f0 Rename `tooltip-hook' to `tooltip-functions'.
Juanma Barranquero <lekktu@gmail.com>
parents: 98061
diff changeset
155 of the last mouse movement event that occurred. If one of these
33f78208d5f0 Rename `tooltip-hook' to `tooltip-functions'.
Juanma Barranquero <lekktu@gmail.com>
parents: 98061
diff changeset
156 functions displays the tooltip, it should return non-nil and the
33f78208d5f0 Rename `tooltip-hook' to `tooltip-functions'.
Juanma Barranquero <lekktu@gmail.com>
parents: 98061
diff changeset
157 rest are not called.")
33f78208d5f0 Rename `tooltip-hook' to `tooltip-functions'.
Juanma Barranquero <lekktu@gmail.com>
parents: 98061
diff changeset
158
33f78208d5f0 Rename `tooltip-hook' to `tooltip-functions'.
Juanma Barranquero <lekktu@gmail.com>
parents: 98061
diff changeset
159 (define-obsolete-variable-alias 'tooltip-hook 'tooltip-functions "23.1")
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
160
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
161 (defvar tooltip-timeout-id nil
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
162 "The id of the timeout started when Emacs becomes idle.")
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
163
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
164 (defvar tooltip-last-mouse-motion-event nil
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
165 "A copy of the last mouse motion event seen.")
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
166
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
167 (defvar tooltip-hide-time nil
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
168 "Time when the last tooltip was hidden.")
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
169
63938
cd982981d99a (gud-tooltip-mode): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 63587
diff changeset
170 (defvar gud-tooltip-mode) ;; Prevent warning.
cd982981d99a (gud-tooltip-mode): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 63587
diff changeset
171
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
172 ;;; Event accessors
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
173
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
174 (defun tooltip-event-buffer (event)
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
175 "Return the buffer over which event EVENT occurred.
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
176 This might return nil if the event did not occur over a buffer."
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
177 (let ((window (posn-window (event-end event))))
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
178 (and window (window-buffer window))))
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
179
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
180
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
181 ;;; Timeout for tooltip display
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
182
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
183 (defun tooltip-delay ()
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
184 "Return the delay in seconds for the next tooltip."
94186
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
185 (if (and tooltip-hide-time
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
186 (< (- (float-time) tooltip-hide-time) tooltip-recent-seconds))
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
187 tooltip-short-delay
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
188 tooltip-delay))
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
189
35069
d19eadb47c76 (tooltip-cancel-delayed-tip)
Gerd Moellmann <gerd@gnu.org>
parents: 35044
diff changeset
190 (defun tooltip-cancel-delayed-tip ()
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
191 "Disable the tooltip timeout."
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
192 (when tooltip-timeout-id
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
193 (disable-timeout tooltip-timeout-id)
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
194 (setq tooltip-timeout-id nil)))
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
195
35069
d19eadb47c76 (tooltip-cancel-delayed-tip)
Gerd Moellmann <gerd@gnu.org>
parents: 35044
diff changeset
196 (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
197 "Add a one-shot timeout to call function `tooltip-timeout'."
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
198 (setq tooltip-timeout-id
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
199 (add-timeout (tooltip-delay) 'tooltip-timeout nil)))
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
200
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
201 (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
202 "Function called when timer with id `tooltip-timeout-id' fires."
99213
33f78208d5f0 Rename `tooltip-hook' to `tooltip-functions'.
Juanma Barranquero <lekktu@gmail.com>
parents: 98061
diff changeset
203 (run-hook-with-args-until-success 'tooltip-functions
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
204 tooltip-last-mouse-motion-event))
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
205
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
206
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
207 ;;; Displaying tips
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
208
35043
f7ca93e40e16 (tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents: 34689
diff changeset
209 (defun tooltip-set-param (alist key value)
40178
1dab42ecd751 (tooltip-set-param): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 40173
diff changeset
210 "Change the value of KEY in alist ALIST to VALUE.
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48925
diff changeset
211 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
212 change the existing association. Value is the resulting alist."
f7ca93e40e16 (tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents: 34689
diff changeset
213 (let ((param (assq key alist)))
f7ca93e40e16 (tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents: 34689
diff changeset
214 (if (consp param)
f7ca93e40e16 (tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents: 34689
diff changeset
215 (setcdr param value)
f7ca93e40e16 (tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents: 34689
diff changeset
216 (push (cons key value) alist))
f7ca93e40e16 (tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents: 34689
diff changeset
217 alist))
f7ca93e40e16 (tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents: 34689
diff changeset
218
95841
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 94678
diff changeset
219 (declare-function x-show-tip "xfns.c"
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 94678
diff changeset
220 (string &optional frame parms timeout dx dy))
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 94678
diff changeset
221
61626
058da2e83614 (tooltip-show): Change second arg to USE-ECHO-AREA
Kim F. Storm <storm@cua.dk>
parents: 61614
diff changeset
222 (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
223 "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
224
61608
6a8ebeaf5f56 (tooltip-gud-echo-area): Rename from
Nick Roberts <nickrob@snap.net.nz>
parents: 61565
diff changeset
225 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
226
c4955867228d (tooltip-x-offset, tooltip-y-offset): Mention in the
Eli Zaretskii <eliz@gnu.org>
parents: 37755
diff changeset
227 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
228 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
229 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
230 `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
231 position.
6a8ebeaf5f56 (tooltip-gud-echo-area): Rename from
Nick Roberts <nickrob@snap.net.nz>
parents: 61565
diff changeset
232
61626
058da2e83614 (tooltip-show): Change second arg to USE-ECHO-AREA
Kim F. Storm <storm@cua.dk>
parents: 61614
diff changeset
233 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
234 in echo area."
058da2e83614 (tooltip-show): Change second arg to USE-ECHO-AREA
Kim F. Storm <storm@cua.dk>
parents: 61614
diff changeset
235 (if use-echo-area
93905
529aa606e975 (tooltip-mode): Set tooltip-show-help-non-mode as
Jan Djärv <jan.h.d@swipnet.se>
parents: 87649
diff changeset
236 (tooltip-show-help-non-mode text)
34540
e1e4704de6ed (tooltip-show): If an error is signaled in
Gerd Moellmann <gerd@gnu.org>
parents: 33925
diff changeset
237 (condition-case error
35043
f7ca93e40e16 (tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents: 34689
diff changeset
238 (let ((params (copy-sequence tooltip-frame-parameters))
f7ca93e40e16 (tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents: 34689
diff changeset
239 (fg (face-attribute 'tooltip :foreground))
f7ca93e40e16 (tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents: 34689
diff changeset
240 (bg (face-attribute 'tooltip :background)))
35069
d19eadb47c76 (tooltip-cancel-delayed-tip)
Gerd Moellmann <gerd@gnu.org>
parents: 35044
diff changeset
241 (when (stringp fg)
d19eadb47c76 (tooltip-cancel-delayed-tip)
Gerd Moellmann <gerd@gnu.org>
parents: 35044
diff changeset
242 (setq params (tooltip-set-param params 'foreground-color fg))
d19eadb47c76 (tooltip-cancel-delayed-tip)
Gerd Moellmann <gerd@gnu.org>
parents: 35044
diff changeset
243 (setq params (tooltip-set-param params 'border-color fg)))
d19eadb47c76 (tooltip-cancel-delayed-tip)
Gerd Moellmann <gerd@gnu.org>
parents: 35044
diff changeset
244 (when (stringp bg)
d19eadb47c76 (tooltip-cancel-delayed-tip)
Gerd Moellmann <gerd@gnu.org>
parents: 35044
diff changeset
245 (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
246 (x-show-tip (propertize text 'face 'tooltip)
f7ca93e40e16 (tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents: 34689
diff changeset
247 (selected-frame)
35044
bb5e7a8b6f4c Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents: 35043
diff changeset
248 params
35401
c00e94a506a2 (tooltip-hide-delay): New user-option.
Gerd Moellmann <gerd@gnu.org>
parents: 35069
diff changeset
249 tooltip-hide-delay
35043
f7ca93e40e16 (tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents: 34689
diff changeset
250 tooltip-x-offset
f7ca93e40e16 (tooltip-frame-parameters): Remove colors.
Gerd Moellmann <gerd@gnu.org>
parents: 34689
diff changeset
251 tooltip-y-offset))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48925
diff changeset
252 (error
34540
e1e4704de6ed (tooltip-show): If an error is signaled in
Gerd Moellmann <gerd@gnu.org>
parents: 33925
diff changeset
253 (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
254 (sit-for 1)
e1e4704de6ed (tooltip-show): If an error is signaled in
Gerd Moellmann <gerd@gnu.org>
parents: 33925
diff changeset
255 (message "%s" text)))))
e1e4704de6ed (tooltip-show): If an error is signaled in
Gerd Moellmann <gerd@gnu.org>
parents: 33925
diff changeset
256
95841
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 94678
diff changeset
257 (declare-function x-hide-tip "xfns.c" ())
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 94678
diff changeset
258
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
259 (defun tooltip-hide (&optional ignored-arg)
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
260 "Hide a tooltip, if one is displayed.
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
261 Value is non-nil if tooltip was open."
35069
d19eadb47c76 (tooltip-cancel-delayed-tip)
Gerd Moellmann <gerd@gnu.org>
parents: 35044
diff changeset
262 (tooltip-cancel-delayed-tip)
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
263 (when (x-hide-tip)
30481
b603c68fff56 use float-time
Sam Steingold <sds@gnu.org>
parents: 27582
diff changeset
264 (setq tooltip-hide-time (float-time))))
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
265
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
266
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
267 ;;; Debugger-related functions
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
268
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
269 (defun tooltip-identifier-from-point (point)
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
270 "Extract the identifier at POINT, if any.
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
271 Value is nil if no identifier exists at point. Identifier extraction
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
272 is based on the current syntax table."
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
273 (save-excursion
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
274 (goto-char point)
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
275 (let ((start (progn (skip-syntax-backward "w_") (point))))
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
276 (unless (looking-at "[0-9]")
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
277 (skip-syntax-forward "w_")
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
278 (when (> (point) start)
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
279 (buffer-substring start (point)))))))
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
280
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
281 (defmacro tooltip-region-active-p ()
87404
5d4b7a894119 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 87403
diff changeset
282 "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
283 `(use-region-p))
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
284
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
285 (defun tooltip-expr-to-print (event)
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
286 "Return an expression that should be printed for EVENT.
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
287 If a region is active and the mouse is inside the region, print
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
288 the region. Otherwise, figure out the identifier around the point
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
289 where the mouse is."
94186
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
290 (with-current-buffer (tooltip-event-buffer event)
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
291 (let ((point (posn-point (event-end event))))
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
292 (if (tooltip-region-active-p)
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
293 (when (and (<= (region-beginning) point) (<= point (region-end)))
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
294 (buffer-substring (region-beginning) (region-end)))
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
295 (tooltip-identifier-from-point point)))))
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
296
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
297 (defun tooltip-process-prompt-regexp (process)
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
298 "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
299 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
300 the buffer of PROCESS."
94186
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
301 (let ((prompt-regexp (with-current-buffer (process-buffer process)
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
302 comint-prompt-regexp)))
94186
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
303 (concat "\n*"
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
304 ;; Most start with `^' but the one for `sdb' cannot be easily
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
305 ;; stripped. Code the prompt for `sdb' fixed here.
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
306 (if (= (aref prompt-regexp 0) ?^)
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
307 (substring prompt-regexp 1)
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
308 "\\*")
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
309 "$")))
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
310
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
311 (defun tooltip-strip-prompt (process output)
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
312 "Return OUTPUT with any prompt of PROCESS stripped from its end."
94186
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
313 (save-match-data
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
314 (if (string-match (tooltip-process-prompt-regexp process) output)
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
315 (substring output 0 (match-beginning 0))
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
316 output)))
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
317
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
318
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
319 ;;; Tooltip help.
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
320
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
321 (defvar tooltip-help-message nil
102871
c1df06373080 * tooltip.el (tooltip-show-help-non-mode): Don't save the last
Chong Yidong <cyd@stupidchicken.com>
parents: 102598
diff changeset
322 "The last help message received via `show-help-function'.
c1df06373080 * tooltip.el (tooltip-show-help-non-mode): Don't save the last
Chong Yidong <cyd@stupidchicken.com>
parents: 102598
diff changeset
323 This is used by `tooltip-show-help' and
c1df06373080 * tooltip.el (tooltip-show-help-non-mode): Don't save the last
Chong Yidong <cyd@stupidchicken.com>
parents: 102598
diff changeset
324 `tooltip-show-help-non-mode'.")
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
325
94186
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
326 (defvar tooltip-previous-message nil
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
327 "The previous content of the echo area.")
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
328
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
329 (defun tooltip-show-help-non-mode (help)
103086
c3181c5efa5a * tooltip.el (tooltip-show-help): Fall back on
Chong Yidong <cyd@stupidchicken.com>
parents: 102871
diff changeset
330 "Function installed as `show-help-function' when Tooltip mode is off.
c3181c5efa5a * tooltip.el (tooltip-show-help): Fall back on
Chong Yidong <cyd@stupidchicken.com>
parents: 102871
diff changeset
331 It is also called if Tooltip mode is on, for text-only displays."
94186
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
332 (when (and (not (window-minibuffer-p)) ;Don't overwrite minibuffer contents.
102871
c1df06373080 * tooltip.el (tooltip-show-help-non-mode): Don't save the last
Chong Yidong <cyd@stupidchicken.com>
parents: 102598
diff changeset
333 (not cursor-in-echo-area)) ;Don't overwrite a prompt.
94186
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
334 (cond
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
335 ((stringp help)
102598
38cce541a3bd (tooltip-show-help-non-mode): Don't set tooltip-previous-message if
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
336 (setq help (replace-regexp-in-string "\n" ", " help))
38cce541a3bd (tooltip-show-help-non-mode): Don't set tooltip-previous-message if
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
337 (unless (or tooltip-previous-message
102871
c1df06373080 * tooltip.el (tooltip-show-help-non-mode): Don't save the last
Chong Yidong <cyd@stupidchicken.com>
parents: 102598
diff changeset
338 (string-equal help (current-message))
c1df06373080 * tooltip.el (tooltip-show-help-non-mode): Don't save the last
Chong Yidong <cyd@stupidchicken.com>
parents: 102598
diff changeset
339 (and (stringp tooltip-help-message)
c1df06373080 * tooltip.el (tooltip-show-help-non-mode): Don't save the last
Chong Yidong <cyd@stupidchicken.com>
parents: 102598
diff changeset
340 (string-equal tooltip-help-message
c1df06373080 * tooltip.el (tooltip-show-help-non-mode): Don't save the last
Chong Yidong <cyd@stupidchicken.com>
parents: 102598
diff changeset
341 (current-message))))
94186
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
342 (setq tooltip-previous-message (current-message)))
102871
c1df06373080 * tooltip.el (tooltip-show-help-non-mode): Don't save the last
Chong Yidong <cyd@stupidchicken.com>
parents: 102598
diff changeset
343 (setq tooltip-help-message help)
94186
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
344 (let ((message-truncate-lines t)
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
345 (message-log-max nil))
102598
38cce541a3bd (tooltip-show-help-non-mode): Don't set tooltip-previous-message if
Chong Yidong <cyd@stupidchicken.com>
parents: 100908
diff changeset
346 (message "%s" help)))
94186
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
347 ((stringp tooltip-previous-message)
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
348 (let ((message-log-max nil))
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
349 (message "%s" tooltip-previous-message)
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
350 (setq tooltip-previous-message nil)))
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
351 (t
7870d07a291c * tooltip.el (tooltip-previous-message): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93998
diff changeset
352 (message nil)))))
93905
529aa606e975 (tooltip-mode): Set tooltip-show-help-non-mode as
Jan Djärv <jan.h.d@swipnet.se>
parents: 87649
diff changeset
353
63441
ebbf98a044ac * tooltip.el (tooltip-use-echo-area): Restore from gud.el for
Nick Roberts <nickrob@snap.net.nz>
parents: 62135
diff changeset
354 (defun tooltip-show-help (msg)
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
355 "Function installed as `show-help-function'.
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
356 MSG is either a help string to display, or nil to cancel the display."
103086
c3181c5efa5a * tooltip.el (tooltip-show-help): Fall back on
Chong Yidong <cyd@stupidchicken.com>
parents: 102871
diff changeset
357 (if (display-graphic-p)
c3181c5efa5a * tooltip.el (tooltip-show-help): Fall back on
Chong Yidong <cyd@stupidchicken.com>
parents: 102871
diff changeset
358 (let ((previous-help tooltip-help-message))
c3181c5efa5a * tooltip.el (tooltip-show-help): Fall back on
Chong Yidong <cyd@stupidchicken.com>
parents: 102871
diff changeset
359 (setq tooltip-help-message msg)
c3181c5efa5a * tooltip.el (tooltip-show-help): Fall back on
Chong Yidong <cyd@stupidchicken.com>
parents: 102871
diff changeset
360 (cond ((null msg)
c3181c5efa5a * tooltip.el (tooltip-show-help): Fall back on
Chong Yidong <cyd@stupidchicken.com>
parents: 102871
diff changeset
361 ;; Cancel display. This also cancels a delayed tip, if
c3181c5efa5a * tooltip.el (tooltip-show-help): Fall back on
Chong Yidong <cyd@stupidchicken.com>
parents: 102871
diff changeset
362 ;; there is one.
c3181c5efa5a * tooltip.el (tooltip-show-help): Fall back on
Chong Yidong <cyd@stupidchicken.com>
parents: 102871
diff changeset
363 (tooltip-hide))
c3181c5efa5a * tooltip.el (tooltip-show-help): Fall back on
Chong Yidong <cyd@stupidchicken.com>
parents: 102871
diff changeset
364 ((equal previous-help msg)
c3181c5efa5a * tooltip.el (tooltip-show-help): Fall back on
Chong Yidong <cyd@stupidchicken.com>
parents: 102871
diff changeset
365 ;; Same help as before (but possibly the mouse has moved).
c3181c5efa5a * tooltip.el (tooltip-show-help): Fall back on
Chong Yidong <cyd@stupidchicken.com>
parents: 102871
diff changeset
366 ;; Keep what we have.
c3181c5efa5a * tooltip.el (tooltip-show-help): Fall back on
Chong Yidong <cyd@stupidchicken.com>
parents: 102871
diff changeset
367 )
c3181c5efa5a * tooltip.el (tooltip-show-help): Fall back on
Chong Yidong <cyd@stupidchicken.com>
parents: 102871
diff changeset
368 (t
c3181c5efa5a * tooltip.el (tooltip-show-help): Fall back on
Chong Yidong <cyd@stupidchicken.com>
parents: 102871
diff changeset
369 ;; A different help. Remove a previous tooltip, and
c3181c5efa5a * tooltip.el (tooltip-show-help): Fall back on
Chong Yidong <cyd@stupidchicken.com>
parents: 102871
diff changeset
370 ;; display a new one, with some delay.
c3181c5efa5a * tooltip.el (tooltip-show-help): Fall back on
Chong Yidong <cyd@stupidchicken.com>
parents: 102871
diff changeset
371 (tooltip-hide)
c3181c5efa5a * tooltip.el (tooltip-show-help): Fall back on
Chong Yidong <cyd@stupidchicken.com>
parents: 102871
diff changeset
372 (tooltip-start-delayed-tip))))
c3181c5efa5a * tooltip.el (tooltip-show-help): Fall back on
Chong Yidong <cyd@stupidchicken.com>
parents: 102871
diff changeset
373 ;; On text-only displays, try `tooltip-show-help-non-mode'.
c3181c5efa5a * tooltip.el (tooltip-show-help): Fall back on
Chong Yidong <cyd@stupidchicken.com>
parents: 102871
diff changeset
374 (tooltip-show-help-non-mode msg)))
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
375
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
376 (defun tooltip-help-tips (event)
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
377 "Hook function to display a help tooltip.
99213
33f78208d5f0 Rename `tooltip-hook' to `tooltip-functions'.
Juanma Barranquero <lekktu@gmail.com>
parents: 98061
diff changeset
378 This is installed on the hook `tooltip-functions', which
33f78208d5f0 Rename `tooltip-hook' to `tooltip-functions'.
Juanma Barranquero <lekktu@gmail.com>
parents: 98061
diff changeset
379 is run when the timer with id `tooltip-timeout-id' fires.
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
380 Value is non-nil if this function handled the tip."
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
381 (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
382 (tooltip-show tooltip-help-message tooltip-use-echo-area)
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
383 t))
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
384
48601
ac47e19224b0 (tooltip-gud-process-output): Handle annotations that
Nick Roberts <nickrob@snap.net.nz>
parents: 48580
diff changeset
385 (provide 'tooltip)
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
386
58155
2f1734bcecca Require CL.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58118
diff changeset
387 ;; arch-tag: 3d61135e-4618-4a78-af28-183f6df5636f
25003
bb68fe3c72f8 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
388 ;;; tooltip.el ends here