From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.devel Subject: Re: Where the menu should be appeared when C-mouse-3 is triggered Date: Fri, 10 Aug 2012 08:44:42 -0400 Message-ID: References: <20120720.205626.241222894708490981.yamato@redhat.com> <20120728.183150.270114999187506774.yamato@redhat.com> <20120809.201312.1329961304666767845.yamato@redhat.com> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable X-Trace: dough.gmane.org 1344602693 29115 80.91.229.3 (10 Aug 2012 12:44:53 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Fri, 10 Aug 2012 12:44:53 +0000 (UTC) Cc: emacs-devel@gnu.org To: Masatake YAMATO Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Fri Aug 10 14:44:52 2012 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1SzoaB-0000zv-HQ for ged-emacs-devel@m.gmane.org; Fri, 10 Aug 2012 14:44:51 +0200 Original-Received: from localhost ([::1]:34817 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SzoaA-0003lH-PJ for ged-emacs-devel@m.gmane.org; Fri, 10 Aug 2012 08:44:50 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:41330) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Szoa7-0003iE-4T for emacs-devel@gnu.org; Fri, 10 Aug 2012 08:44:49 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Szoa5-0005Pv-40 for emacs-devel@gnu.org; Fri, 10 Aug 2012 08:44:47 -0400 Original-Received: from ironport2-out.teksavvy.com ([206.248.154.182]:25119) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Szoa4-0005Pp-UZ for emacs-devel@gnu.org; Fri, 10 Aug 2012 08:44:45 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Av4EAG6Zu0+4rw0x/2dsb2JhbABEtBGBCIIVAQEBAQIBAQIkLyMFCws0EhQUBA0eBhMeh2sFC7l+kEQDknaDNI0JgViDBQ X-IronPort-AV: E=Sophos;i="4.75,637,1330923600"; d="scan'208";a="195416935" Original-Received: from 184-175-13-49.dsl.teksavvy.com (HELO pastel.home) ([184.175.13.49]) by ironport2-out.teksavvy.com with ESMTP/TLS/ADH-AES256-SHA; 10 Aug 2012 08:44:43 -0400 Original-Received: by pastel.home (Postfix, from userid 20848) id 1203558AA6; Fri, 10 Aug 2012 08:44:42 -0400 (EDT) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1.50 (gnu/linux) X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 206.248.154.182 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:152402 Archived-At: > Hi, could you review this patch? Yes, sorry for the delay. Installed, Stefan > http://lists.gnu.org/archive/html/emacs-devel/2012-07/msg00602.html > ------------------------------------------------------------------------- > Hi, > About POSITION argument of popup-menu you suggested: >> Maybe a better direction is to make popup-menu (and x-popup-menu, ...) >> accept posn arguments, so you can just use things like (event-end >> ) or (posn-at-point) to specify where to display it. The >> docstring of popup-menu seems to indicate that an `event' can be used, >> but at least in my tests it doesn't seem to work. >>=20 >> Could you look at making a patch to do that (i.e. accept a posn, >> or maybe an event)? > I've revised the POSITION argument handling. > Now `popup-menu-normalize-position' handles all POSITION variants. > I have not touch `x-popup-menu' yet. > Masatake YAMATO > =3D=3D=3D modified file 'lisp/ChangeLog' > --- lisp/ChangeLog 2012-07-27 16:42:19 +0000 > +++ lisp/ChangeLog 2012-07-28 09:16:29 +0000 > @@ -1,3 +1,13 @@ > +2012-07-28 Masatake YAMATO > + > + * mouse.el (popup-menu-normalize-position): New function. > + (popup-menu): Use `popup-menu-normalize-position' to normalize > + the form for POSITION argument. > + > + * term/x-win.el (x-menu-bar-open): Use > + the value returend from (posn-at-point) as position > + passed to `popup-menu'. > + > 2012-07-27 Fabi=E1n Ezequiel Gallina =20 > Consistent completion in inferior python with emacs -nw. > =3D=3D=3D modified file 'lisp/mouse.el' > --- lisp/mouse.el 2012-07-26 08:32:25 +0000 > +++ lisp/mouse.el 2012-07-28 09:18:46 +0000 > @@ -101,11 +101,8 @@ > "Popup the given menu and call the selected option. > MENU can be a keymap, an easymenu-style menu or a list of keymaps as for > `x-popup-menu'. > - > -POSITION can be a click event or ((XOFFSET YOFFSET) WINDOW) and > -defaults to the current mouse position. If POSITION is the > -symbol `point', the current point position is used. > - > +The menu is shown at the place where POSITION specifies. About > +the form of POSITION, see `popup-menu-normalize-position'. > PREFIX is the prefix argument (if any) to pass to the command." > (let* ((map (cond > ((keymapp menu) menu) > @@ -114,18 +111,8 @@ > (filter (when (symbolp map) > (plist-get (get map 'menu-prop) :filter)))) > (if filter (funcall filter (symbol-function map)) map))))) > - event cmd) > - (setq position > - (cond > - ((eq position 'point) > - (let* ((pp (posn-at-point)) > - (xy (posn-x-y pp))) > - (list (list (car xy) (cdr xy)) (posn-window pp)))) > - ((not position) > - (let ((mp (mouse-pixel-position))) > - (list (list (cadr mp) (cddr mp)) (car mp)))) > - (t > - position))) > + event cmd > + (position (popup-menu-normalize-position position))) > ;; The looping behavior was taken from lmenu's popup-menu-popup > (while (and map (setq event > ;; map could be a prefix key, in which case > @@ -163,6 +150,37 @@ > ;; mouse-major-mode-menu was using `command-execute' instead. > (call-interactively cmd)))) =20 > +(defun popup-menu-normalize-position (position) > + "Converts the POSITION to the form which `popup-menu' expects internal= ly. > +POSITION can be nil, an click event, a posn- value, or a value having > +form ((XOFFSET YOFFSET) WINDOW). > +If nil, the current mouse position is used. > +If an click event, the value returend from `event-end' is used." > + (pcase position > + ;; nil -> mouse cursor position > + ;; this pattern must be before `eventp' because > + ;; nil is an event. > + (`nil > + (let ((mp (mouse-pixel-position))) > + (list (list (cadr mp) (cddr mp)) (car mp)))) > + ;; value returned from (event-end (read-event)) or (posn-at-point) > + ((or `(,window ,area-or-pos (,x . ,y) > + ,timestamp ,object ,pos (,col . ,row) > + ,image (,dx . ,dy) (,width . ,height)) > + `(,window ,pos (0 . 0) 0)) > + (let ((xy (posn-x-y position))) > + (list (list (car xy) (cdr xy)) > + (posn-window position)))) > + ;; pattern expected by popup-menu > + (`((,xoffset ,yoffset) ,window) > + position) > + ;; event > + ((pred eventp) > + (popup-menu-normalize-position (event-end position))) > + ;; rejects > + (t > + (error "Unexpected position form")))) > + > (defun minor-mode-menu-from-indicator (indicator) > "Show menu for minor mode specified by INDICATOR. > Interactively, INDICATOR is read using completion. > =3D=3D=3D modified file 'lisp/term/x-win.el' > --- lisp/term/x-win.el 2012-07-20 11:32:30 +0000 > +++ lisp/term/x-win.el 2012-07-28 05:08:48 +0000 > @@ -1316,7 +1316,7 @@ > (popup-menu (mouse-menu-bar-map) > (if (listp last-nonmenu-event) > nil > - 'point))))) > + (posn-at-point)))))) =20 > > ;;; Window system initialization.