]> git.eshelyaron.com Git - emacs.git/commitdiff
* tooltip.el (tooltip-previous-message): New var.
authorStefan Monnier <monnier@iro.umontreal.ca>
Sat, 19 Apr 2008 19:30:53 +0000 (19:30 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Sat, 19 Apr 2008 19:30:53 +0000 (19:30 +0000)
(tooltip-show-help-non-mode): Rewrite to better follow the behavior of the
C code (avoid overwriting a minibuffer, restore previous echo message, ...).
(tooltip-delay, tooltip-process-prompt-regexp, tooltip-strip-prompt): Simplify.
* keyboard.c (Vpre_help_message): Remove.
(show_help_echo): Remove default C code.

lisp/ChangeLog
lisp/tooltip.el
src/ChangeLog
src/keyboard.c

index c100c0b52c5ffe42f5d99586cfa2ce2d289f2d30..0cf25aca21304a5d9734fbbd040b6b57a24b2265 100644 (file)
@@ -1,3 +1,12 @@
+2008-04-19  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * tooltip.el (tooltip-previous-message): New var.
+       (tooltip-show-help-non-mode): Rewrite to better follow the behavior of
+       the C code (avoid overwriting a minibuffer, restore previous echo
+       message, ...).
+       (tooltip-delay, tooltip-process-prompt-regexp, tooltip-strip-prompt):
+       Simplify.
+
 2008-04-19  Nick Roberts  <nickrob@snap.net.nz>
 
        * progmodes/gdb-ui.el (gdb-thread-indicator): New variable.
index 469a1584221ea2dd44a1b955e0417ca0a35d9d4d..a9ac027e1b3d18edb7eea153b83961189008e628 100644 (file)
@@ -178,12 +178,10 @@ This might return nil if the event did not occur over a buffer."
 
 (defun tooltip-delay ()
   "Return the delay in seconds for the next tooltip."
-  (let ((delay tooltip-delay)
-       (now (float-time)))
-    (when (and tooltip-hide-time
-              (< (- now tooltip-hide-time) tooltip-recent-seconds))
-      (setq delay tooltip-short-delay))
-    delay))
+  (if (and tooltip-hide-time
+           (< (- (float-time) tooltip-hide-time) tooltip-recent-seconds))
+      tooltip-short-delay
+    tooltip-delay))
 
 (defun tooltip-cancel-delayed-tip ()
   "Disable the tooltip timeout."
@@ -280,8 +278,7 @@ is based on the current syntax table."
 If a region is active and the mouse is inside the region, print
 the region.  Otherwise, figure out the identifier around the point
 where the mouse is."
-  (save-excursion
-    (set-buffer (tooltip-event-buffer event))
+  (with-current-buffer (tooltip-event-buffer event)
     (let ((point (posn-point (event-end event))))
       (if (tooltip-region-active-p)
          (when (and (<= (region-beginning) point) (<= point (region-end)))
@@ -292,23 +289,22 @@ where the mouse is."
   "Return regexp matching the prompt of PROCESS at the end of a string.
 The prompt is taken from the value of `comint-prompt-regexp' in
 the buffer of PROCESS."
-  (let ((prompt-regexp (save-excursion
-                        (set-buffer (process-buffer process))
+  (let ((prompt-regexp (with-current-buffer (process-buffer process)
                         comint-prompt-regexp)))
-    ;; Most start with `^' but the one for `sdb' cannot be easily
-    ;; stripped.  Code the prompt for `sdb' fixed here.
-    (if (= (aref prompt-regexp 0) ?^)
-       (setq prompt-regexp (substring prompt-regexp 1))
-      (setq prompt-regexp "\\*"))
-    (concat "\n*" prompt-regexp "$")))
+    (concat "\n*"
+            ;; Most start with `^' but the one for `sdb' cannot be easily
+            ;; stripped.  Code the prompt for `sdb' fixed here.
+            (if (= (aref prompt-regexp 0) ?^)
+                (substring prompt-regexp 1)
+              "\\*")
+            "$")))
 
 (defun tooltip-strip-prompt (process output)
   "Return OUTPUT with any prompt of PROCESS stripped from its end."
-  (let ((prompt-regexp (tooltip-process-prompt-regexp process)))
-    (save-match-data
-      (when (string-match prompt-regexp output)
-       (setq output (substring output 0 (match-beginning 0)))))
-    output))
+  (save-match-data
+    (if (string-match (tooltip-process-prompt-regexp process) output)
+        (substring output 0 (match-beginning 0))
+      output)))
 
 \f
 ;;; Tooltip help.
@@ -316,12 +312,30 @@ the buffer of PROCESS."
 (defvar tooltip-help-message nil
   "The last help message received via `tooltip-show-help'.")
 
-(defun tooltip-show-help-non-mode (msg)
+(defvar tooltip-previous-message nil
+  "The previous content of the echo area.")
+
+(defun tooltip-show-help-non-mode (help)
   "Function installed as `show-help-function' when tooltip is off."
-  (let ((message-truncate-lines t))
-    (message "%s" (if msg
-                     (replace-regexp-in-string "\n" ", " msg)
-                   ""))))
+  (when (and (not (window-minibuffer-p)) ;Don't overwrite minibuffer contents.
+             ;; Don't know how to reproduce it in Elisp:
+             ;; Don't overwrite a keystroke echo.
+             ;; (NILP (echo_message_buffer) || ok_to_overwrite_keystroke_echo)
+             (not cursor-in-echo-area)) ;Don't overwrite a prompt.
+    (cond
+     ((stringp help)
+      (unless tooltip-previous-message
+        (setq tooltip-previous-message (current-message)))
+      (let ((message-truncate-lines t)
+            (message-log-max nil))
+        (message "%s" (replace-regexp-in-string "\n" ", " help))))
+     ((stringp tooltip-previous-message)
+      (let ((message-log-max nil))
+        (message "%s" tooltip-previous-message)
+        (setq tooltip-previous-message nil)))
+     (t
+      (message nil)))))
+      
 
 (defun tooltip-show-help (msg)
   "Function installed as `show-help-function'.
index 2afb3a412b3afdc653d02f2717ad36a4f247e2d7..b23dd2ecea284f254d3b2871a3bfa006bb5978d2 100644 (file)
@@ -1,5 +1,8 @@
 2008-04-19  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+       * keyboard.c (Vpre_help_message): Remove.
+       (show_help_echo): Remove default C code.
+
        * dired.c (directory_files_internal, file_name_completion):
        Only call ENCODE_FILE if the string is indeed decoded.
 
index 64427992a8307590c416fa67b08e8ad99a5db0f4..6e7bcca3ca3f013e5415ac19b599305f2f81d24e 100644 (file)
@@ -157,11 +157,6 @@ extern int message_enable_multibyte;
 
 Lisp_Object Vshow_help_function;
 
-/* If a string, the message displayed before displaying a help-echo
-   in the echo area.  */
-
-Lisp_Object Vpre_help_message;
-
 /* Nonzero means do menu prompting.  */
 
 static int menu_prompting;
@@ -2458,37 +2453,6 @@ show_help_echo (help, window, object, pos, ok_to_overwrite_keystroke_echo)
     {
       if (!NILP (Vshow_help_function))
        call1 (Vshow_help_function, help);
-      else if (/* Don't overwrite minibuffer contents.  */
-              !MINI_WINDOW_P (XWINDOW (selected_window))
-              /* Don't overwrite a keystroke echo.  */
-              && (NILP (echo_message_buffer)
-                  || ok_to_overwrite_keystroke_echo)
-              /* Don't overwrite a prompt.  */
-              && !cursor_in_echo_area)
-       {
-         if (STRINGP (help))
-           {
-             int count = SPECPDL_INDEX ();
-
-             if (!help_echo_showing_p)
-               Vpre_help_message = current_message ();
-
-             specbind (Qmessage_truncate_lines, Qt);
-             message3_nolog (help, SBYTES (help),
-                             STRING_MULTIBYTE (help));
-             unbind_to (count, Qnil);
-           }
-         else if (STRINGP (Vpre_help_message))
-           {
-             message3_nolog (Vpre_help_message,
-                             SBYTES (Vpre_help_message),
-                             STRING_MULTIBYTE (Vpre_help_message));
-             Vpre_help_message = Qnil;
-           }
-         else
-           message (0);
-       }
-
       help_echo_showing_p = STRINGP (help);
     }
 }
@@ -11753,9 +11717,6 @@ syms_of_keyboard ()
 {
   pending_funcalls = Qnil;
 
-  Vpre_help_message = Qnil;
-  staticpro (&Vpre_help_message);
-
   Vlispy_mouse_stem = build_string ("mouse");
   staticpro (&Vlispy_mouse_stem);