From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Vladimir Kazanov Newsgroups: gmane.emacs.devel Subject: Re: [PATCH] User-defined fringe tooltips (a request for review) Date: Thu, 21 Dec 2023 16:51:15 +0000 Message-ID: References: <83sf3xgimq.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="000000000000151faf060d07e9c7" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="14420"; mail-complaints-to="usenet@ciao.gmane.io" Cc: emacs-devel@gnu.org To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Thu Dec 21 17:52:22 2023 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1rGMHV-0003VV-1J for ged-emacs-devel@m.gmane-mx.org; Thu, 21 Dec 2023 17:52:21 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rGMGj-0006DX-OQ; Thu, 21 Dec 2023 11:51:33 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rGMGi-0006DI-7H for emacs-devel@gnu.org; Thu, 21 Dec 2023 11:51:32 -0500 Original-Received: from mail-lf1-x12d.google.com ([2a00:1450:4864:20::12d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rGMGg-0003x0-2n; Thu, 21 Dec 2023 11:51:31 -0500 Original-Received: by mail-lf1-x12d.google.com with SMTP id 2adb3069b0e04-50e3cdcf010so1193042e87.2; Thu, 21 Dec 2023 08:51:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1703177487; x=1703782287; darn=gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=7g6+SIJzWuva2oojMJg0EXWv2FMexJUCEIkWBmD49eg=; b=W0zA55Q09rLVbI5YHCG9dA1mT/bZuL0uYEiKz8qgbJp9M9XXvWNRaPZWBPUx8jdSPf T+Bph8nMmKUrDzYIMgKYg584XdSnxp7K8SwBdGEG/E8ntCWtZuwV9UsOEMKCXdNKkuVk F3Jx63M91J2jlZp/RlZFu6JIw9jljZ9fwBm7BEpzxm/MkXitDyJdIuWx4gYWkvZYLfjS uNea57EJm94UVkP6My3Xr5LJeSm3ThfZiiTZ+5z0gxwbcDvjsUJMmBsfuvKQSltYInAn dD27dtd8c9PluMQX5OL4qoRWtXia4H0Zs1THKLLNhigwUySM/O77pLMaKf0mnfV/Dpwb byHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703177487; x=1703782287; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=7g6+SIJzWuva2oojMJg0EXWv2FMexJUCEIkWBmD49eg=; b=PIlG0Hwdab2/KS1MHdea/2bSLUB53iywtMHH/1OO5lHMjm6m4pXm4AU5KfCp/KqVct sTkpiWzypCST49f2IlOungX7hP6BUyHTCQJ/dwi1d0ogdBVo/tJxDtf7ysBaJ1rol9Uq coZP1m++wuwIqrafbwA4n2VyIzzMB1l9w/24LWXfmx/VXPhqbMbrH7qYpv73PL4LUf6g Zmqs3Bzq+wbJGPf1MqJHW91D9h4RyroinrPUmkNa95X1IBlEGusIDAJgn9PqpeVrrjxJ dRZZyc9vcnMDidSyQ1p6BxzsiNvaTumKNUF0aIo8WjJFon531A9l50iRb8AKciq+neZP f0gQ== X-Gm-Message-State: AOJu0YxrVlK4TMRLeeG/ZCFXe5Zdc45VbHKVaXYVTK19uzZQYKn7hc84 9iBTg4YFGSaKDDeSQ6sEPDFEKXFf9Kd1LnCGhn0JPJ+hzA== X-Google-Smtp-Source: AGHT+IGekZnud4Y1wFvJz0rlmf8GenaV4RePlVuFxoKGlW3diSKjQfsEEFiQtDSK/U0/b/UconkeRHHqZ2rnv32XBEk= X-Received: by 2002:a05:6512:78:b0:50e:3d69:6522 with SMTP id i24-20020a056512007800b0050e3d696522mr2157694lfo.175.1703177486628; Thu, 21 Dec 2023 08:51:26 -0800 (PST) In-Reply-To: <83sf3xgimq.fsf@gnu.org> Received-SPF: pass client-ip=2a00:1450:4864:20::12d; envelope-from=vekazanov@gmail.com; helo=mail-lf1-x12d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 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-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:314044 Archived-At: --000000000000151faf060d07e9c7 Content-Type: text/plain; charset="UTF-8" Thanks for looking into this! > The code in note_mouse_highlight examines > the buffer text and overlays for text properties whose meaning is to > display a help-echo string, so why cannot you do the same to look for > a 'display' property of this specific structure, and extract the > help-echo directly from there at mouse-highlight time instead of at > glyph-generation time? Yes, having Lispy stuff in the glyph_row struct doesn't make sense, and this is why I was in doubt. Anyway, a new patch is attached with the approach you suggested (the way I understood it). I use "struct it" to iterate over the line for which the fringe indicator is defined, in note_mouse_highlight. The iterator then pulls out the display spec and saves the last left/right fringe captions it walked over. Does that feel right? Thank you, Vlad On Wed, 20 Dec 2023 at 12:32, Eli Zaretskii wrote: > > > From: Vladimir Kazanov > > Date: Tue, 19 Dec 2023 19:38:09 +0000 > > > > Recently I've been looking into implementing a suggestion from > > etc/TODO related to fringe indicator tooltips: > > > > > ** Allow fringe indicators to display a tooltip > > > Provide a help-echo property? > > > > Attached is a quick and dirty proof-of-concept. The patch extends the > > display specification with an optional string that would be displayed > > through either tooltips or the echo area: > > > > (overlay-put (make-overlay (point) (point)) > > 'before-string (propertize "x" 'display `(left-fringe right-arrow > > nil "left fringe test tooltip"))) > > > > Moving a mouse pointer to the fringe would then display the string in > > a tooltip on a relevant line. > > Thanks. > > > To make this work I've extended "struct it" and "struct glyphs_row" > > with pointers to strings, and added some mouse hover handling in the > > "note_mouse_highlight function". Obviously, the code needs more checks > > but I want to confirm the approach with emacs-devel@ first. > > > > Happy to hear comments and suggestions about the path taken! > > I'm not sure I like to have Lisp_Object members in 'struct glyph_row'. > I also don't think I understand why you needed to copy the hel-echo > string to the glyph row. The code in note_mouse_highlight examines > the buffer text and overlays for text properties whose meaning is to > display a help-echo string, so why cannot you do the same to look for > a 'display' property of this specific structure, and extract the > help-echo directly from there at mouse-highlight time instead of at > glyph-generation time? -- Regards, Vladimir Kazanov --000000000000151faf060d07e9c7 Content-Type: text/x-patch; charset="US-ASCII"; name="add-user-fringe-indicator-tooltips.patch" Content-Disposition: attachment; filename="add-user-fringe-indicator-tooltips.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqffrmyb0 ZGlmZiAtLWdpdCBhL3NyYy9kaXNwZXh0ZXJuLmggYi9zcmMvZGlzcGV4dGVybi5oCmluZGV4IDNh NGQ2MDk1ZjczLi5lOGY5ODRlMWE3MSAxMDA2NDQKLS0tIGEvc3JjL2Rpc3BleHRlcm4uaAorKysg Yi9zcmMvZGlzcGV4dGVybi5oCkBAIC0yODAxLDYgKzI4MDEsMTIgQEAgI2RlZmluZSBPVkVSTEFZ X1NUUklOR19DSFVOS19TSVpFIDE2CiAgICAgIGlzIGluIGVmZmVjdCwgYW5kIG9ubHkgaW4gaHNj cm9sbGVkIHdpbmRvd3MuICAqLwogICBpbnQgc3RyZXRjaF9hZGp1c3Q7CiAKKyAgLyogTGVmdCBm cmluZ2UgY2FwdGlvbiAoUW5pbCBvciBhIHN0cmluZ3ApICovCisgIExpc3BfT2JqZWN0IGxlZnRf dXNlcl9mcmluZ2VfY2FwdGlvbjsKKworICAvKiBSaWdodCBmcmluZ2UgY2FwdGlvbiAgKFFuaWwg b3IgYSBzdHJpbmdwKSovCisgIExpc3BfT2JqZWN0IHJpZ2h0X3VzZXJfZnJpbmdlX2NhcHRpb247 CisKICAgLyogTGVmdCBmcmluZ2UgYml0bWFwIG51bWJlciAoZW51bSBmcmluZ2VfYml0bWFwX3R5 cGUpLiAgKi8KICAgdW5zaWduZWQgbGVmdF91c2VyX2ZyaW5nZV9iaXRtYXAgOiBGUklOR0VfSURf QklUUzsKIApkaWZmIC0tZ2l0IGEvc3JjL3hkaXNwLmMgYi9zcmMveGRpc3AuYwppbmRleCA3NWQ3 Njk2MDBjNC4uNWM1ZDM5YWNkZTEgMTAwNjQ0Ci0tLSBhL3NyYy94ZGlzcC5jCisrKyBiL3NyYy94 ZGlzcC5jCkBAIC0zMjY1LDYgKzMyNjUsMTAgQEAgaW5pdF9pdGVyYXRvciAoc3RydWN0IGl0ICpp dCwgc3RydWN0IHdpbmRvdyAqdywKICAgLyogQ2xlYXIgSVQsIGFuZCBzZXQgaXQtPm9iamVjdCBh bmQgb3RoZXIgSVQncyBMaXNwIG9iamVjdHMgdG8gUW5pbC4KICAgICAgT3RoZXIgcGFydHMgb2Yg cmVkaXNwbGF5IHJlbHkgb24gdGhhdC4gICovCiAgIG1lbWNsZWFyIChpdCwgc2l6ZW9mICppdCk7 CisKKyAgaXQtPmxlZnRfdXNlcl9mcmluZ2VfY2FwdGlvbiA9IFFuaWw7CisgIGl0LT5yaWdodF91 c2VyX2ZyaW5nZV9jYXB0aW9uID0gUW5pbDsKKwogICBpdC0+Y3VycmVudC5vdmVybGF5X3N0cmlu Z19pbmRleCA9IC0xOwogICBpdC0+Y3VycmVudC5kcHZlY19pbmRleCA9IC0xOwogICBpdC0+YmFz ZV9mYWNlX2lkID0gcmVtYXBwZWRfYmFzZV9mYWNlX2lkOwpAQCAtNjEyNyw2ICs2MTMxLDEzIEBA IGhhbmRsZV9zaW5nbGVfZGlzcGxheV9zcGVjIChzdHJ1Y3QgaXQgKml0LCBMaXNwX09iamVjdCBz cGVjLCBMaXNwX09iamVjdCBvYmplY3QsCiAJCWZhY2VfaWQgPSBmYWNlX2lkMjsKIAkgICAgfQog CisJICBMaXNwX09iamVjdCBjYXB0aW9uID0gUW5pbDsKKyAgICAgICAgICBpZiAoQ09OU1AgKFhD RFIgKFhDRFIgKFhDRFIgKHNwZWMpKSkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBj YXB0aW9uID0gWENBUiAoWENEUiAoWENEUiAoWENEUiAoc3BlYykpKSk7CisgICAgICAgICAgICB9 CisKKwogCSAgLyogU2F2ZSBjdXJyZW50IHNldHRpbmdzIG9mIElUIHNvIHRoYXQgd2UgY2FuIHJl c3RvcmUgdGhlbQogCSAgICAgd2hlbiB3ZSBhcmUgZmluaXNoZWQgd2l0aCB0aGUgZ2x5cGggcHJv cGVydHkgdmFsdWUuICAqLwogCSAgcHVzaF9pdCAoaXQsIHBvc2l0aW9uKTsKQEAgLTYxNTAsMTEg KzYxNjEsMTMgQEAgaGFuZGxlX3NpbmdsZV9kaXNwbGF5X3NwZWMgKHN0cnVjdCBpdCAqaXQsIExp c3BfT2JqZWN0IHNwZWMsIExpc3BfT2JqZWN0IG9iamVjdCwKIAkgICAgewogCSAgICAgIGl0LT5s ZWZ0X3VzZXJfZnJpbmdlX2JpdG1hcCA9IGZyaW5nZV9iaXRtYXA7CiAJICAgICAgaXQtPmxlZnRf dXNlcl9mcmluZ2VfZmFjZV9pZCA9IGZhY2VfaWQ7CisgICAgICAgICAgICAgIGl0LT5sZWZ0X3Vz ZXJfZnJpbmdlX2NhcHRpb24gPSBjYXB0aW9uOwogCSAgICB9CiAJICBlbHNlCiAJICAgIHsKIAkg ICAgICBpdC0+cmlnaHRfdXNlcl9mcmluZ2VfYml0bWFwID0gZnJpbmdlX2JpdG1hcDsKIAkgICAg ICBpdC0+cmlnaHRfdXNlcl9mcmluZ2VfZmFjZV9pZCA9IGZhY2VfaWQ7CisgICAgICAgICAgICAg IGl0LT5yaWdodF91c2VyX2ZyaW5nZV9jYXB0aW9uID0gY2FwdGlvbjsKIAkgICAgfQogCX0KICNl bmRpZiAvKiBIQVZFX1dJTkRPV19TWVNURU0gKi8KQEAgLTM1NzIwLDEwICszNTczMyw1MCBAQCBu b3RlX21vdXNlX2hpZ2hsaWdodCAoc3RydWN0IGZyYW1lICpmLCBpbnQgeCwgaW50IHkpCiAgICAg ICB9CiAgICAgZWxzZQogICAgICAgY3Vyc29yID0gRlJBTUVfT1VUUFVUX0RBVEEgKGYpLT5ub250 ZXh0X2N1cnNvcjsKLSAgZWxzZSBpZiAocGFydCA9PSBPTl9MRUZUX0ZSSU5HRSB8fCBwYXJ0ID09 IE9OX1JJR0hUX0ZSSU5HRQotCSAgIHx8IHBhcnQgPT0gT05fVkVSVElDQUxfU0NST0xMX0JBUgor ICBlbHNlIGlmIChwYXJ0ID09IE9OX0xFRlRfRlJJTkdFIHx8IHBhcnQgPT0gT05fUklHSFRfRlJJ TkdFKSB7CisgICAgICBjdXJzb3IgPSBGUkFNRV9PVVRQVVRfREFUQSAoZiktPm5vbnRleHRfY3Vy c29yOworCisgICAgICBpZiAoTklMUCAoaGVscF9lY2hvX3N0cmluZykpIHsKKwkgIC8qIFRyYW5z bGF0ZSB3aW5kb3dzIGNvb3JkaW5hdGVzIGludG8gdmVydGljYWwgd2luZG93CisgICAgICAgICAg ICAgcG9zaXRpb24uICovCisJICBpbnQgaHBvcywgdnBvcywgYXJlYTsKKwkgIHhfeV90b19ocG9z X3Zwb3MgKHcsIHgsIHksICZocG9zLCAmdnBvcywgMCwgMCwgJmFyZWEpOworCisJICAvKiBGaWd1 cmUgb3V0IHdoZXJlIHRoZSB3aW5kb3cgc3RhcnRzIC0gd2lsbCBuZWVkIHRvIGdldCB0bworICAg ICAgICAgICAgIHRoZSBmcmluZ2UgbGluZSAqLworCSAgc3RydWN0IHRleHRfcG9zIHN0YXJ0X3Bv czsKKwkgIFNFVF9URVhUX1BPU19GUk9NX01BUktFUiAoc3RhcnRfcG9zLCB3LT5zdGFydCk7CisK KwkgIC8qIE5lZWQgYW4gaXRlcmF0b3IgdG8gd2FsayB0aHJvdWdoIGFsbCB0aGUgcHJvcGVydGll cyBvbgorICAgICAgICAgICAgIHRoZSBsaW5lLiBGaW5kIHRoZSBsaW5lIGZpcnN0LCByZXNldCB0 ZXh0IGZyb20gcHJldmlvdXMKKyAgICAgICAgICAgICBsaW5lcyBhbmQgdGhlbiBjb2xsZWN0IHRo ZSBwcm9wZXJ0aWVzIG9uIGl0LiAqLworCSAgc3RydWN0IGl0IGl0OworCSAgaW5pdF9pdGVyYXRv ciAoJml0LCB3LCBDSEFSUE9TKHN0YXJ0X3BvcyksIEJZVEVQT1MgKHN0YXJ0X3BvcyksCisJCQkg TlVMTCwgREVGQVVMVF9GQUNFX0lEKTsKKworCSAgLyogV2FsayB0byB0aGUgZnJpbmdlIGxpbmUg YW5kIHJlc2V0IGNhcHRpb25zIGZvdW5kIG9uIHRoZQorICAgICAgICAgICAgIHdheSovCisJICBt b3ZlX2l0X2J5X2xpbmVzKCZpdCwgdnBvcyk7CisJICBpdC5sZWZ0X3VzZXJfZnJpbmdlX2NhcHRp b24gPSBRbmlsOworCSAgaXQucmlnaHRfdXNlcl9mcmluZ2VfY2FwdGlvbiA9IFFuaWw7CisKKwkg IC8qIFJlc2V0IGFuZCBnbyB0aHJvdWdoIHRoZSBsaW5lLiAqLworCSAgbW92ZV9pdF9ieV9saW5l cyAoJml0LCAxKTsKKworCSAgLyogT3V0cHV0IHRocm91Z2ggd2hhdGV2ZXIgdGhlIHVzZXIgcHJl ZmVycywgbW9zdCBsaWtlbHkgYQorICAgICAgICAgICAgIHRvb2x0aXAgKi8KKwkgIGlmIChwYXJ0 ID09IE9OX0xFRlRfRlJJTkdFCisJICAgICAgJiYgIU5JTFAoaXQubGVmdF91c2VyX2ZyaW5nZV9j YXB0aW9uKSkKKwkgICAgICBoZWxwX2VjaG9fc3RyaW5nID0gaXQubGVmdF91c2VyX2ZyaW5nZV9j YXB0aW9uOworCSAgZWxzZSBpZiAocGFydCA9PSBPTl9SSUdIVF9GUklOR0UKKwkJICAgJiYgIU5J TFAoaXQucmlnaHRfdXNlcl9mcmluZ2VfY2FwdGlvbikpCisgICAgICAgICAgICAgIGhlbHBfZWNo b19zdHJpbmcgPSBpdC5yaWdodF91c2VyX2ZyaW5nZV9jYXB0aW9uOworICAgICAgfQorCisgIH0K KyAgZWxzZSBpZiAocGFydCA9PSBPTl9WRVJUSUNBTF9TQ1JPTExfQkFSCiAJICAgfHwgcGFydCA9 PSBPTl9IT1JJWk9OVEFMX1NDUk9MTF9CQVIpCi0gICAgY3Vyc29yID0gRlJBTUVfT1VUUFVUX0RB VEEgKGYpLT5ub250ZXh0X2N1cnNvcjsKKyAgICAgIGN1cnNvciA9IEZSQU1FX09VVFBVVF9EQVRB IChmKS0+bm9udGV4dF9jdXJzb3I7CiAgIGVsc2UKICAgICBjdXJzb3IgPSBGUkFNRV9PVVRQVVRf REFUQSAoZiktPnRleHRfY3Vyc29yOwogI2VuZGlmCg== --000000000000151faf060d07e9c7--