From debbugs-submit-bounces@debbugs.gnu.org Tue Nov 06 12:04:28 2012 Received: (at submit) by debbugs.gnu.org; 6 Nov 2012 17:04:28 +0000 Received: from localhost ([127.0.0.1]:52722 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TVmZS-0008BS-Fk for submit@debbugs.gnu.org; Tue, 06 Nov 2012 12:04:27 -0500 Received: from eggs.gnu.org ([208.118.235.92]:51668) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TVmZP-0008BJ-SO for submit@debbugs.gnu.org; Tue, 06 Nov 2012 12:04:13 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TVmWC-0001hM-Jc for submit@debbugs.gnu.org; Tue, 06 Nov 2012 12:00:59 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=unavailable version=3.3.2 Received: from lists.gnu.org ([208.118.235.17]:36142) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TVmWC-0001ga-4k for submit@debbugs.gnu.org; Tue, 06 Nov 2012 12:00:52 -0500 Received: from eggs.gnu.org ([208.118.235.92]:36500) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TVmW3-0006kJ-Rs for bug-gnu-emacs@gnu.org; Tue, 06 Nov 2012 12:00:51 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TVmVi-0001Rj-Pz for bug-gnu-emacs@gnu.org; Tue, 06 Nov 2012 12:00:39 -0500 Received: from mail-wi0-f177.google.com ([209.85.212.177]:63300) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TVmVh-00018h-9h for bug-gnu-emacs@gnu.org; Tue, 06 Nov 2012 12:00:22 -0500 Received: by mail-wi0-f177.google.com with SMTP id hj13so456672wib.12 for ; Tue, 06 Nov 2012 09:00:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:date:message-id:mime-version:content-type; bh=trtFMOzHLyq3nNkx+iwe+bBGX2Wx0Eq1O4FuzOrismo=; b=h6ivz7TkcKDqPoM4eM2kQ+06JBgonfxbU68KCu72vccMdXZ1xW6bJNAgiMxx/rPAob SqTXTzfALs/p1JIsWGbuvj2l216D/echXbDdhPmlZxG66eJtJur9y9N+QOE/R/2vi6N3 XezGMzV6YiOHG57yVc6441wAouY13ftwCVojZ946fg45EBRJIcWjLYrK0rZ/NgtWTzUF VzxL1jDH5Zbixldtde2gzX+fXKbjnoOTuafbwQ9TgJRN8ozJjH4SqtE3y/CivxC8zHl8 iHmaoxBqL3edM1ZAxxYxKRQvgvzT370fOy+cg2Wz3A4DN2lgiZNyHzus/qHq8jLtiDZ8 dTvQ== Received: by 10.180.99.97 with SMTP id ep1mr20272277wib.9.1352221202025; Tue, 06 Nov 2012 09:00:02 -0800 (PST) Received: from luz3 ([193.51.236.232]) by mx.google.com with ESMTPS id bn7sm17450360wib.8.2012.11.06.09.00.00 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 06 Nov 2012 09:00:01 -0800 (PST) From: Damien Cassou To: bug-gnu-emacs@gnu.org Subject: 24.2; The button library does not work on the header line Date: Tue, 06 Nov 2012 17:59:35 +0100 Message-ID: <877gpyllag.fsf@luz3.i-did-not-set--mail-host-address--so-tickle-me> MIME-Version: 1.0 Content-Type: text/plain X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 208.118.235.17 X-Spam-Score: -6.1 (------) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -6.1 (------) Hi, the button library does not work if a button is created on the header-line: (require 'button) (defun my-button-action (button) (message "HERE I AM")) (define-button-type 'my-button-type 'action #'my-button-action 'follow-link t) (setq test-button (copy-sequence "CLICK ME")) (make-text-button test-button nil 'type 'my-button-type) (setq header-line-format test-button) After evaluating these lines, a button appear with the text "CLICK ME" in blue and underlined. But clicking this button does nothing. I was expecting that clicking the button would trigger 'my-button-action and display the message "HERE I AM". There is a library that makes 'button work on header-line: https://raw.github.com/tarsius/header-button/master/header-button.el Thank you In GNU Emacs 24.2.1 (i686-pc-linux-gnu, GTK+ Version 2.24.13) of 2012-11-06 on dubnium, modified by Debian Windowing system distributor `The X.Org Foundation', version 11.0.11300000 Configured using: `configure '--build' 'i686-linux-gnu' '--build' 'i686-linux-gnu' '--prefix=/usr' '--sharedstatedir=/var/lib' '--libexecdir=/usr/lib' '--localstatedir=/var/lib' '--infodir=/usr/share/info' '--mandir=/usr/share/man' '--with-pop=yes' '--enable-locallisppath=/etc/emacs24:/etc/emacs:/usr/local/share/emacs/24.2/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/24.2/site-lisp:/usr/share/emacs/site-lisp' '--with-crt-dir=/usr/lib/i386-linux-gnu' '--with-x=yes' '--with-x-toolkit=gtk' '--with-toolkit-scroll-bars' 'build_alias=i686-linux-gnu' 'CFLAGS=-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall' 'LDFLAGS=-Wl,-Bsymbolic-functions -Wl,-z,relro' 'CPPFLAGS=-D_FORTIFY_SOURCE=2'' Important settings: value of $LC_ALL: nil value of $LC_COLLATE: nil value of $LC_CTYPE: nil value of $LC_MESSAGES: nil value of $LC_MONETARY: nil value of $LC_NUMERIC: nil value of $LC_TIME: nil value of $LANG: en_US.UTF-8 value of $XMODIFIERS: nil locale-coding-system: utf-8-unix default enable-multibyte-characters: t Major mode: Lisp Interaction Minor modes in effect: tooltip-mode: t mouse-wheel-mode: t tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t line-number-mode: t transient-mark-mode: t Recent input: C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-M-x C-l C-l C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-M-x C-n C-n C-n C-n C-n C-n C-n C-n C-M-x C-n C-l C-l C-n C-n C-n C-n C-n C-a C-SPC M-> C-w C-y M-y C-p C-k C-M-x C-y C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-l C-a C-SPC C-n C-n C-f C-f C-x r k C-p C-p C-n C-n M-v M-v C-v C-v C-l C-p C-p C-p C-e C-n C-a C-k C-n C-SPC C-n C-n C-f C-f C-f C-x r k C-p C-n C-e C-x C-e q C-p C-p C-p C-p C-x C-e C-n C-n C-n C-n C-e C-x C-e C-n C-n C-n C-n C-a C-SPC C-n C-n C-n C-f C-f C-f C-x r k C-e C-x C-e C-x 1 C-p C-p C-SPC C-p C-p C-p C-p C-a C-w C-x C-o C-n C-SPC M-> C-x 1 C-x 1 C-p C-p C-p C-n C-n C-h k C-x 1 C-l M-x r e p o r t - e m a Recent messages: This button labeled `No me!' belongs to category `my-header-button' byte-code: Beginning of buffer Mark set This button labeled `Click me!' belongs to category `header-button' [2 times] This button labeled `No me!' belongs to category `my-header-button' Mark set [2 times] Autoscrolling is on. Type C-x 1 to delete the help window. Mark set Making completion list... Load-path shadows: /usr/share/emacs/24.2/site-lisp/cmake-data/cmake-mode hides /usr/share/emacs/site-lisp/cmake-mode /usr/share/emacs/24.2/site-lisp/dictionaries-common/flyspell hides /usr/share/emacs/24.2/lisp/textmodes/flyspell /usr/share/emacs/24.2/site-lisp/dictionaries-common/ispell hides /usr/share/emacs/24.2/lisp/textmodes/ispell Features: (shadow sort gnus-util mail-extr emacsbug message format-spec rfc822 mml mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail regexp-opt rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils two-column debug rect help-mode view help-fns find-func jka-compr info easymenu edmacro kmacro cl time-date tooltip ediff-hook vc-hooks lisp-float-type mwheel x-win x-dnd tool-bar dnd fontset image fringe lisp-mode register page menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock font-lock syntax facemenu font-core frame cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese case-table epa-hook jka-cmpr-hook help simple abbrev minibuffer loaddefs button faces cus-face files text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote make-network-process dbusbind dynamic-setting system-font-setting font-render-setting move-toolbar gtk x-toolkit x multi-tty emacs) From debbugs-submit-bounces@debbugs.gnu.org Tue Dec 04 15:19:53 2012 Received: (at 12817) by debbugs.gnu.org; 4 Dec 2012 20:19:53 +0000 Received: from localhost ([127.0.0.1]:53657 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Tfyy9-0003XI-BS for submit@debbugs.gnu.org; Tue, 04 Dec 2012 15:19:53 -0500 Received: from ironport2-out.teksavvy.com ([206.248.154.182]:26891) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Tfyy7-0003X9-BZ for 12817@debbugs.gnu.org; Tue, 04 Dec 2012 15:19:51 -0500 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Av0EAG6Zu09soXOY/2dsb2JhbABEtBGBCIIVAQEEAVYjBQsLNBIUGA0kiBwFC7l6BJBEA4hCmnGBWIMH X-IronPort-AV: E=Sophos;i="4.75,637,1330923600"; d="scan'208";a="209078666" Received: from 108-161-115-152.dsl.teksavvy.com (HELO pastel.home) ([108.161.115.152]) by ironport2-out.teksavvy.com with ESMTP/TLS/ADH-AES256-SHA; 04 Dec 2012 15:19:47 -0500 Received: by pastel.home (Postfix, from userid 20848) id 2BE6E58C73; Tue, 4 Dec 2012 15:19:46 -0500 (EST) From: Stefan Monnier To: Damien Cassou Subject: Re: bug#12817: 24.2; The button library does not work on the header line Message-ID: References: <877gpyllag.fsf@luz3.i-did-not-set--mail-host-address--so-tickle-me> Date: Tue, 04 Dec 2012 15:19:46 -0500 In-Reply-To: <877gpyllag.fsf@luz3.i-did-not-set--mail-host-address--so-tickle-me> (Damien Cassou's message of "Tue, 06 Nov 2012 17:59:35 +0100") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.8 (/) X-Debbugs-Envelope-To: 12817 Cc: 12817@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: 0.8 (/) > the button library does not work if a button is created on the header-line: > (require 'button) > (defun my-button-action (button) > (message "HERE I AM")) > (define-button-type 'my-button-type > 'action #'my-button-action > 'follow-link t) > (setq test-button (copy-sequence "CLICK ME")) > (make-text-button test-button nil > 'type 'my-button-type) > (setq header-line-format test-button) > After evaluating these lines, a button appear with the text "CLICK ME" > in blue and underlined. But clicking this button does nothing. I was > expecting that clicking the button would trigger 'my-button-action and > display the message "HERE I AM". Sounds like a reasonable expectation. > There is a library that makes 'button work on header-line: > https://raw.github.com/tarsius/header-button/master/header-button.el Would someone be able to turn the above code into a patch to button.el that makes your sample code work (i.e. make `make-text-button' work in a header, instead of introducing an ad-hoc `header-button-format')? Stefan PS: BTW, the "follow-link does not work here" comment points at a misfeature of follow-link, indeed. I think `follow-link' should be implemented in function-key-map rather than in mouse-drag-region. From debbugs-submit-bounces@debbugs.gnu.org Wed Dec 05 15:39:31 2012 Received: (at 12817) by debbugs.gnu.org; 5 Dec 2012 20:39:31 +0000 Received: from localhost ([127.0.0.1]:55302 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TgLkg-0001HK-Te for submit@debbugs.gnu.org; Wed, 05 Dec 2012 15:39:31 -0500 Received: from mail-ee0-f44.google.com ([74.125.83.44]:54262) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TgLkd-0001HC-Jp for 12817@debbugs.gnu.org; Wed, 05 Dec 2012 15:39:29 -0500 Received: by mail-ee0-f44.google.com with SMTP id b47so3443112eek.3 for <12817@debbugs.gnu.org>; Wed, 05 Dec 2012 12:39:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:user-agent:date:message-id:mime-version :content-type; bh=0VjvrPCGiru3mAOaOFefyrRW1zTNmcli362DNLxrZpY=; b=XqegsFmwAQSbteDfhUrYMqJg/n1csTpQX2z/ifm97DeAHWBig8v2KmGZUOxZmT4DMu K90S1L/afd2Zpb/m5OIggqFJ1X0kyrU22eJks9PG2KGRkdiuXByJ4krMwz085bnEqgms HkBheL0mhTvjdSjCyezgUKuJtQzcvAHgWbJ3xuRNrj+LoWUHdLp+1XV+93l/91MTYaY1 CmDJ0/NP9y1ApNcwR31nii4GWBL8BBD7sbD4COlY4tn30rWxumdD4jIY1jNliyXjcFap q40sa9rUkFbKifi4Boeb+DWZcPoDgViuuOcdZGoGwmSQy/k19kANNDG2yavV+CAL34Dp SvVw== Received: by 10.14.194.199 with SMTP id m47mr46129592een.11.1354739957576; Wed, 05 Dec 2012 12:39:17 -0800 (PST) Received: from lem (178-83-201-90.dynamic.hispeed.ch. [178.83.201.90]) by mx.google.com with ESMTPS id w3sm11338960eel.17.2012.12.05.12.39.16 (version=TLSv1/SSLv3 cipher=OTHER); Wed, 05 Dec 2012 12:39:17 -0800 (PST) From: Jonas Bernoulli To: 12817@debbugs.gnu.org Subject: Re: bug#12817: 24.2; The button library does not work on the header line User-agent: mu4e 0.9.9.5-dev4; emacs 24.3.50.1 Date: Wed, 05 Dec 2012 21:39:15 +0100 Message-ID: <87ehj4mdxo.fsf@bernoul.li> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: 0.1 (/) X-Debbugs-Envelope-To: 12817 Cc: Damien Cassou X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: 0.1 (/) --=-=-= Content-Type: text/plain The attached patch allows inserting buttons into the header-line as well as the mode-line. I haven't tested it much but it appears to work. As you suggested it doesn't use a function such as `header-button-format'. Instead `make-text-button' was changed to return a useful value when BEG is a string: the propertized string. ,---- | (setq header-line-format | (make-text-button "test" nil | 'action (lambda (button) | (message "Button: %s" button)))) `---- The above is enough now to insert a button in the header-line or mode-line. No need for an intermediate variable to hold the string. Additionally the following changes are needed so that clicking the button actually does something. Add an additional kind of "button object" that is used internally and passed to the button action function: "area buttons" (analogously to `posn-area'). Normally these have the form (STRING . STRING-POS), where STRING is the propertized string and STRING-POS is list of the form returned by `event-start'. STRING-POS might be useful in actions but isn't used internally. Area button objects can also be just a string. [mode-line mouse-2] and [header-line mouse-2] are bound to push-button just like [mouse-2]. [follow-link] is not actually used at all. (I think it was used instead of [mouse-2] in the past, but I might be wrong). I don't know whether binding these events might cause problems for regular buttons, but it does not appear to be the case. (Maybe using follow-link instead and extending it to work in the header-line and mode-line would be better; but I know to little about that. The little I do know tells me doing so would probably not be worth the effort.) `push-button', `button-get', `button-put', `button-label' are taught to deal with area buttons. Using `button-start', `button-end' and `button-at' with an area button causes an error. Of the "button creating functions" only `make-text-button' is useful for area buttons. `[next|previous|forward|backward]-button' also cannot be used. The patch is against 24.3.50 from a few days ago but if necessary I can redo it against a different version. --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0001-area-buttons.patch >From e6f0ba57a65badba9cb37443efff5dbcb24f8fb8 Mon Sep 17 00:00:00 2001 From: Jonas Bernoulli Date: Wed, 5 Dec 2012 21:00:30 +0100 Subject: [PATCH] lisp/button.el: allow inserting buttons into mode-line and header-line * lisp/button.el (make-text-button): if BEG is a string return it; previously 0 was returned in that case (bugfix) * lisp/button.el (button-map): bind [mode-line mouse-2] and [header-line mouse-2] to push-button * lisp/button.el (button-activate): mention area (mode-line and header-line) buttons, also add general documentation about action invocation * lisp/button.el (push-button): mention button-activate in doc-string * lisp/button.el (button-get, button-put, button-label): support area buttons * lisp/button.el: add functions button-area-button-p and button-area-button-string --- button.el | 87 ++++++++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 64 insertions(+), 23 deletions(-) diff --git a/button.el b/button.el index 3cf38fa..7c76587 100644 --- a/button.el +++ b/button.el @@ -64,6 +64,8 @@ ;; might get converted to ^M when building loaddefs.el (define-key map [(control ?m)] 'push-button) (define-key map [mouse-2] 'push-button) + (define-key map [mode-line mouse-2] 'push-button) + (define-key map [header-line mouse-2] 'push-button) map) "Keymap used by buttons.") @@ -184,10 +186,12 @@ changes to a supertype are not reflected in its subtypes)." (defun button-get (button prop) "Get the property of button BUTTON named PROP." - (if (overlayp button) - (overlay-get button prop) - ;; Must be a text-property button. - (get-text-property button prop))) + (cond ((overlayp button) + (overlay-get button prop)) + ((button-area-button-p button) + (get-text-property 0 prop (button-area-button-string button))) + (t ; Must be a text-property button. + (get-text-property button prop)))) (defun button-put (button prop val) "Set BUTTON's PROP property to VAL." @@ -202,21 +206,32 @@ changes to a supertype are not reflected in its subtypes)." ;; Disallow updating the `category' property directly. (error "Button `category' property may not be set directly"))) ;; Add the property. - (if (overlayp button) - (overlay-put button prop val) - ;; Must be a text-property button. - (put-text-property - (or (previous-single-property-change (1+ button) 'button) - (point-min)) - (or (next-single-property-change button 'button) - (point-max)) - prop val))) + (cond ((overlayp button) + (overlay-put button prop val)) + ((button-area-button-p button) + (setq button (button-area-button-string button)) + (put-text-property 0 (length button) prop val button)) + (t ; Must be a text-property button. + (put-text-property + (or (previous-single-property-change (1+ button) 'button) + (point-min)) + (or (next-single-property-change button 'button) + (point-max)) + prop val)))) (defsubst button-activate (button &optional use-mouse-action) "Call BUTTON's action property. If USE-MOUSE-ACTION is non-nil, invoke the button's mouse-action instead of its normal action; if the button has no mouse-action, -the normal action is used instead." +the normal action is used instead. + +The action can either be a marker or a function. If it's a +marker then goto it. Otherwise it it is a function then it is +called with BUTTON as only argument. BUTTON is either an +overlay, a buffer position, or for buttons in the mode-line or +header-line a cons (STRING . STRING-POS); where STRING-POS is a +list of the form returned by the `event-start' and `event-end' +functions." (let ((action (or (and use-mouse-action (button-get button 'mouse-action)) (button-get button 'action)))) (if (markerp action) @@ -228,7 +243,10 @@ the normal action is used instead." (defun button-label (button) "Return BUTTON's text label." - (buffer-substring-no-properties (button-start button) (button-end button))) + (if (button-area-button-p button) + (substring-no-properties (button-area-button-string button)) + (buffer-substring-no-properties (button-start button) + (button-end button)))) (defsubst button-type (button) "Return BUTTON's button-type." @@ -238,6 +256,26 @@ the normal action is used instead." "Return t if BUTTON has button-type TYPE, or one of TYPE's subtypes." (button-type-subtype-p (button-get button 'type) type)) +(defun button-area-button-p (button) + "Return t if BUTTON is an area button. +An area button is a cons (STRING . STRING-POS) or a string. +STRING-POS is a list of the form returned by the `event-start' +and `event-end' functions. Such area buttons are used for +buttons in the mode-line and header-line." + (or (stringp button) + (and (stringp (car-safe button)) + (posnp (cdr-safe button))))) + +(defun button-area-button-string (button) + "Return area button BUTTON's button-string. +That is either BUTTON itself or it's car if +it is a cons (STRING . STRING-POS)." + (cond ((stringp button) button) + ((button-area-button-p button) (car button)) + (t + (signal 'wrong-type-argument + (list 'button-area-button-p button))))) + ;; Creating overlay buttons @@ -324,7 +362,7 @@ Also see `insert-text-button'." (cons 'button (cons (list t) properties)) object) ;; Return something that can be used to get at the button. - beg)) + (or object beg))) (defun insert-text-button (label &rest properties) "Insert a button with the label LABEL. @@ -405,23 +443,26 @@ POS may be either a buffer position or a mouse-event. If USE-MOUSE-ACTION is non-nil, invoke the button's mouse-action instead of its normal action; if the button has no mouse-action, the normal action is used instead. The action may be either a -function to call or a marker to display. +function to call or a marker to display and is invoked using +`button-activate' (which see). + POS defaults to point, except when `push-button' is invoked interactively as the result of a mouse-event, in which case, the -mouse event is used. -If there's no button at POS, do nothing and return nil, otherwise -return t." +mouse event is used. If there's no button at POS, do nothing and +return nil, otherwise return t." (interactive (list (if (integerp last-command-event) (point) last-command-event))) (if (and (not (integerp pos)) (eventp pos)) ;; POS is a mouse event; switch to the proper window/buffer (let ((posn (event-start pos))) (with-current-buffer (window-buffer (posn-window posn)) - (push-button (posn-point posn) t))) + (if (posn-area posn) + ;; mode-line or header-line event + (button-activate (cons (car (posn-string posn)) posn) t) + (push-button (posn-point posn)) t))) ;; POS is just normal position (let ((button (button-at (or pos (point))))) - (if (not button) - nil + (when button (button-activate button use-mouse-action) t)))) -- 1.8.0.1 --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Thu Dec 06 02:38:34 2012 Received: (at 12817) by debbugs.gnu.org; 6 Dec 2012 07:38:34 +0000 Received: from localhost ([127.0.0.1]:55790 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TgW2R-0005R6-GL for submit@debbugs.gnu.org; Thu, 06 Dec 2012 02:38:33 -0500 Received: from mail-vc0-f172.google.com ([209.85.220.172]:59334) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TgW2A-0005QQ-8l for 12817@debbugs.gnu.org; Thu, 06 Dec 2012 02:38:26 -0500 Received: by mail-vc0-f172.google.com with SMTP id fw7so7184955vcb.3 for <12817@debbugs.gnu.org>; Wed, 05 Dec 2012 23:38:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=AvkP4DFogOOHcFqEEkVVLU+UPbkYGCl87AjpUNkzyiE=; b=D53m6Iyd3k7dNXqIQ8NZlb1gf8/yuLPzBqj6Ee8+Mrj0rt4vYVIHeastXX5AlCwp4A TL+o+pATRD5+jzjfYTwOLMLh3vijdyL/3TbTOjjvLJ8VmJzwi3MssPtaB5PpTxR2YWFj NLkT5SfhGh/OTaSjKW//PTs7POx6pOJlPIRgyftTvA12i3ubGWECTp2tK+aHd95Ru5TX pWCSpU9/rlA8dAbWOVANKwU3eLHqXOKkbHFm69/gWlcoE+Rd4h8fEDU3LxJq2Y+FRfQM kKvT4NqLRmipmr85BR1G2d6fdgSTQmlnELwqStmR8KdxlbrUFXCMwMDdZ9mWIS+H7Uho 3pEA== MIME-Version: 1.0 Received: by 10.52.28.129 with SMTP id b1mr304509vdh.79.1354779482242; Wed, 05 Dec 2012 23:38:02 -0800 (PST) Received: by 10.58.143.51 with HTTP; Wed, 5 Dec 2012 23:38:01 -0800 (PST) Received: by 10.58.143.51 with HTTP; Wed, 5 Dec 2012 23:38:01 -0800 (PST) In-Reply-To: <87ehj4mdxo.fsf@bernoul.li> References: <87ehj4mdxo.fsf@bernoul.li> Date: Thu, 6 Dec 2012 08:38:01 +0100 Message-ID: Subject: Re: bug#12817: 24.2; The button library does not work on the header line From: Damien Cassou To: Jonas Bernoulli Content-Type: multipart/alternative; boundary=20cf3079b744c9bf8104d02a2d86 X-Spam-Score: 0.1 (/) X-Debbugs-Envelope-To: 12817 Cc: 12817@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -0.7 (/) --20cf3079b744c9bf8104d02a2d86 Content-Type: text/plain; charset=ISO-8859-1 Thank you very much Jonas Damien Cassou http://damiencassou.seasidehosting.st On Dec 5, 2012 9:39 PM, "Jonas Bernoulli" wrote: > The attached patch allows inserting buttons into the header-line as well > as the mode-line. I haven't tested it much but it appears to work. > > As you suggested it doesn't use a function such as > `header-button-format'. Instead `make-text-button' was changed to > return a useful value when BEG is a string: the propertized string. > > ,---- > | (setq header-line-format > | (make-text-button "test" nil > | 'action (lambda (button) > | (message "Button: %s" button)))) > `---- > > The above is enough now to insert a button in the header-line or > mode-line. No need for an intermediate variable to hold the string. > Additionally the following changes are needed so that clicking the > button actually does something. > > Add an additional kind of "button object" that is used internally and > passed to the button action function: "area buttons" (analogously to > `posn-area'). Normally these have the form (STRING . STRING-POS), where > STRING is the propertized string and STRING-POS is list of the form > returned by `event-start'. STRING-POS might be useful in actions but > isn't used internally. Area button objects can also be just a string. > > [mode-line mouse-2] and [header-line mouse-2] are bound to push-button > just like [mouse-2]. [follow-link] is not actually used at all. (I > think it was used instead of [mouse-2] in the past, but I might be > wrong). > > I don't know whether binding these events might cause problems for > regular buttons, but it does not appear to be the case. > > (Maybe using follow-link instead and extending it to work in the > header-line and mode-line would be better; but I know to little about > that. The little I do know tells me doing so would probably not be > worth the effort.) > > `push-button', `button-get', `button-put', `button-label' are taught to > deal with area buttons. Using `button-start', `button-end' and > `button-at' with an area button causes an error. Of the "button > creating functions" only `make-text-button' is useful for area buttons. > `[next|previous|forward|backward]-button' also cannot be used. > > The patch is against 24.3.50 from a few days ago but if necessary I can > redo it against a different version. > > --20cf3079b744c9bf8104d02a2d86 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable

Thank you very much Jonas

Damien Cassou
http://damiencassou.seasi= dehosting.st

On Dec 5, 2012 9:39 PM, "Jonas Bernoulli&qu= ot; <jonas@bernoul.li> wrote:=
The attached patch allows inserting buttons into the header-line as well as the mode-line. =A0I haven't tested it much but it appears to work.
As you suggested it doesn't use a function such as
`header-button-format'. =A0Instead `make-text-button' was changed t= o
return a useful value when BEG is a string: the propertized string.

,----
| (setq header-line-format
| =A0 =A0 =A0 (make-text-button "test" nil
| =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 'action (lambda (butt= on)
| =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 (mess= age "Button: %s" button))))
`----

The above is enough now to insert a button in the header-line or
mode-line. =A0No need for an intermediate variable to hold the string.
Additionally the following changes are needed so that clicking the
button actually does something.

Add an additional kind of "button object" that is used internally= and
passed to the button action function: "area buttons" (analogously= to
`posn-area'). =A0Normally these have the form (STRING . STRING-POS), wh= ere
STRING is the propertized string and STRING-POS is list of the form
returned by `event-start'. =A0STRING-POS might be useful in actions but=
isn't used internally. =A0Area button objects can also be just a string= .

[mode-line mouse-2] and [header-line mouse-2] are bound to push-button
just like [mouse-2]. =A0[follow-link] is not actually used at all. =A0(I think it was used instead of [mouse-2] in the past, but I might be
wrong).

I don't know whether binding these events might cause problems for
regular buttons, but it does not appear to be the case.

(Maybe using follow-link instead and extending it to work in the
header-line and mode-line would be better; but I know to little about
that. =A0The little I do know tells me doing so would probably not be
worth the effort.)

`push-button', `button-get', `button-put', `button-label' a= re taught to
deal with area buttons. =A0Using `button-start', `button-end' and `button-at' with an area button causes an error. =A0Of the "button=
creating functions" only `make-text-button' is useful for area but= tons.
`[next|previous|forward|backward]-button' also cannot be used.

The patch is against 24.3.50 from a few days ago but if necessary I can
redo it against a different version.

--20cf3079b744c9bf8104d02a2d86-- From debbugs-submit-bounces@debbugs.gnu.org Thu Dec 06 15:11:48 2012 Received: (at 12817-done) by debbugs.gnu.org; 6 Dec 2012 20:11:48 +0000 Received: from localhost ([127.0.0.1]:57233 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TghnQ-0008UY-3L for submit@debbugs.gnu.org; Thu, 06 Dec 2012 15:11:48 -0500 Received: from ironport2-out.teksavvy.com ([206.248.154.182]:43956) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TghnO-0008UR-GC for 12817-done@debbugs.gnu.org; Thu, 06 Dec 2012 15:11:46 -0500 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Av0EAG6Zu09soXOY/2dsb2JhbABEtBGBCIIVAQEEAVYjBQsLNBIUGA0kiBwFugmQRAOIQppxgViDBw X-IronPort-AV: E=Sophos;i="4.75,637,1330923600"; d="scan'208";a="209242190" Received: from 108-161-115-152.dsl.teksavvy.com (HELO pastel.home) ([108.161.115.152]) by ironport2-out.teksavvy.com with ESMTP/TLS/ADH-AES256-SHA; 06 Dec 2012 15:11:30 -0500 Received: by pastel.home (Postfix, from userid 20848) id 5833758F5C; Thu, 6 Dec 2012 15:11:30 -0500 (EST) From: Stefan Monnier To: Jonas Bernoulli Subject: Re: bug#12817: 24.2; The button library does not work on the header line Message-ID: References: <877gpyllag.fsf@luz3.i-did-not-set--mail-host-address--so-tickle-me> <87ehj4mdxo.fsf@bernoul.li> Date: Thu, 06 Dec 2012 15:11:30 -0500 In-Reply-To: <87ehj4mdxo.fsf@bernoul.li> (Jonas Bernoulli's message of "Wed, 05 Dec 2012 21:39:15 +0100") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.8 (/) X-Debbugs-Envelope-To: 12817-done Cc: 12817-done@debbugs.gnu.org, Damien Cassou X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -0.0 (/) > The attached patch allows inserting buttons into the header-line as well > as the mode-line. I haven't tested it much but it appears to work. > As you suggested it doesn't use a function such as > `header-button-format'. Instead `make-text-button' was changed to > return a useful value when BEG is a string: the propertized string. Thanks, installed, after simplifying it a bit to just use STRING rather than (STRING . STRING-POS). Stefan From unknown Tue Aug 19 10:08:27 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Fri, 04 Jan 2013 12:24:02 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator