]> git.eshelyaron.com Git - emacs.git/commitdiff
(Vmouse_position_function): New variable.
authorDave Love <fx@gnu.org>
Mon, 21 Feb 2000 13:50:14 +0000 (13:50 +0000)
committerDave Love <fx@gnu.org>
Mon, 21 Feb 2000 13:50:14 +0000 (13:50 +0000)
(Fmouse_position): Use it.
(syms_of_frame): Install it.

src/ChangeLog
src/frame.c

index 01a86c89df1a3a9989dd8afce0eb677f69b810bf..4a2c8d946b2928f8e9df686e2a3bbdd53440c2ab 100644 (file)
@@ -1,3 +1,11 @@
+2000-02-21  Dave Love  <fx@gnu.org>
+
+       * frame.c (Vmouse_position_function): New variable.
+       (Fmouse_position): Use it.
+       (syms_of_frame): Install it.
+
+       * charset.c (find_charset_in_str): Fix use of `c' instead of `c1'.
+
 2000-02-20  Gerd Moellmann  <gerd@gnu.org>
 
        * fileio.c (Finsert_file_contents): Unbind the binding of
index d356e6fcba019cdad5649f8c823d9c23687ee94c..7e74113af446ae36459568b443108c46e59d632e 100644 (file)
@@ -1,5 +1,5 @@
 /* Generic frame functions.
-   Copyright (C) 1993, 1994, 1995, 1997, 1999 Free Software Foundation.
+   Copyright (C) 1993, 1994, 1995, 1997, 1999, 2000 Free Software Foundation.
 
 This file is part of GNU Emacs.
 
@@ -103,6 +103,7 @@ Lisp_Object Qtitle;
 
 Lisp_Object Vterminal_frame;
 Lisp_Object Vdefault_frame_alist;
+Lisp_Object Vmouse_position_function;
 
 static void
 syms_of_frame_1 ()
@@ -1375,13 +1376,15 @@ The position is given in character cells, where (0, 0) is the\n\
 upper-left corner.\n\
 If Emacs is running on a mouseless terminal or hasn't been programmed\n\
 to read the mouse position, it returns the selected frame for FRAME\n\
-and nil for X and Y.")
+and nil for X and Y.\n\
+Runs the abnormal hook `mouse-position-function' with the normal return\n\
+value as argument.")
   ()
 {
   FRAME_PTR f;
   Lisp_Object lispy_dummy;
   enum scroll_bar_part party_dummy;
-  Lisp_Object x, y;
+  Lisp_Object x, y, retval;
   int col, row;
   unsigned long long_dummy;
 
@@ -1405,7 +1408,14 @@ and nil for X and Y.")
     }
 #endif
   XSETFRAME (lispy_dummy, f);
-  return Fcons (lispy_dummy, Fcons (x, y));
+  retval = Fcons (lispy_dummy, Fcons (x, y));
+  if (!NILP (Vmouse_position_function))
+    {
+      struct gcpro gcpro1, gcpro2;
+      GCPRO2 (x, y);
+      RETURN_UNGCPRO (call1 (Vmouse_position_function, retval));
+    }
+  return retval;
 }
 
 DEFUN ("mouse-pixel-position", Fmouse_pixel_position,
@@ -2344,6 +2354,12 @@ syms_of_frame ()
     "Non-nil if all of emacs is iconified and frame updates are not needed.");
   Vemacs_iconified = Qnil;
 
+  DEFVAR_LISP ("mouse-position-function", &Vmouse_position_function,
+    "If non-nil, function applied to the normal result of `mouse-position'.\n\
+This abnormal hook exists for the benefit of packages like XTerm-mouse\n\
+which need to do mouse handling at the Lisp level.");
+  Vmouse_position_function = Qnil;
+
   DEFVAR_KBOARD ("default-minibuffer-frame", Vdefault_minibuffer_frame,
     "Minibufferless frames use this frame's minibuffer.\n\
 \n\