From: Dave Love Date: Mon, 21 Feb 2000 13:50:14 +0000 (+0000) Subject: (Vmouse_position_function): New variable. X-Git-Tag: emacs-pretest-21.0.90~4942 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=beb0bc361fde072503ffaee5af4165dee10ce426;p=emacs.git (Vmouse_position_function): New variable. (Fmouse_position): Use it. (syms_of_frame): Install it. --- diff --git a/src/ChangeLog b/src/ChangeLog index 01a86c89df1..4a2c8d946b2 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2000-02-21 Dave Love + + * 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 * fileio.c (Finsert_file_contents): Unbind the binding of diff --git a/src/frame.c b/src/frame.c index d356e6fcba0..7e74113af44 100644 --- a/src/frame.c +++ b/src/frame.c @@ -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\