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: [PATCH] User-defined fringe tooltips (a request for review) Date: Tue, 19 Dec 2023 19:38:09 +0000 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="000000000000474c73060ce2022d" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="9711"; mail-complaints-to="usenet@ciao.gmane.io" To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Tue Dec 19 20:39:27 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 1rFfw6-0002Je-O8 for ged-emacs-devel@m.gmane-mx.org; Tue, 19 Dec 2023 20:39:26 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rFfv8-0001D8-Mg; Tue, 19 Dec 2023 14:38:26 -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 1rFfv7-0001Cm-6C for emacs-devel@gnu.org; Tue, 19 Dec 2023 14:38:25 -0500 Original-Received: from mail-lf1-x135.google.com ([2a00:1450:4864:20::135]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rFfv5-0007I3-93 for emacs-devel@gnu.org; Tue, 19 Dec 2023 14:38:24 -0500 Original-Received: by mail-lf1-x135.google.com with SMTP id 2adb3069b0e04-50e2bd8c396so4150430e87.0 for ; Tue, 19 Dec 2023 11:38:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1703014701; x=1703619501; darn=gnu.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=0CKal03Yaz+6vTeB8tRmU14K2qFYPOruloZjrM8boSs=; b=U05uIZ+dmpfG6dqsdDlwKeq+k+X7J4ZX0hd03l4XxBivARyi6Luwxc1BSZhesfoD41 KtkI96EMN/2L3oVfnh4QUwq/Kvp47dlwknyybz72gTfdAktqjcKs2PS/Vc7+n1TqsUJd 3zXlUE1vFb3QHWICZ/joKOVZ+6xGNEqaHCdJwMoMhjRNNmvF1dnZni38WPnoUssYzeUt pTcQB9OOIydTsAM1RL0RumY8/EaRL8D/DG/Xm5Dyfq/sBeg9j5SfCcFDHhs/JQdoE7pr 0xwdiaZZWCU5rbV1c+gbjrdpR7VXT7S675ATNqD2KZhd+UuaXg8RL+EhwxZeROzIN3Pi 6V/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703014701; x=1703619501; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=0CKal03Yaz+6vTeB8tRmU14K2qFYPOruloZjrM8boSs=; b=fo0YttQeNpBd4HFjfsefk0hXM3LhuPWZhbRgPM3oU0QYuglJ37K8N9zhtSC+3SZDSS kZW1vJ5smdh5o5IMaWAW2fbLOO9HUleo8v5Lq9zOZAf8QWGZ23QcmFIzyTpKDTjTb7c0 OdkIE8xqKC5FPYf4il82wXgxys+AD4dDHcvQtuH5X1fodAwqzePAto9ZVfDHaUGFqfvN XTM21HjSdJ3hIK0B0EQOLxlkME84RNfkH/kw1NdjZa6wx4b0FFECdC+gAhHpZoKvcsDP NDq0eyJcRcJCbLOcVuRybqxEsxfKdwPS5eNy+zlLpyqns8wniBsh6XpH2lUVWjrNnIZe DviQ== X-Gm-Message-State: AOJu0Yx5pJMOkL7tgexvOKKY/DPuUzxDkYgCchJ7g5jxcuDMGDYdVP8T GmI7FFMh0/UKlbuCvcTMG8GcjW2VYUnuLmp7OW7QQvz2nA== X-Google-Smtp-Source: AGHT+IEejnBVW2aPfIEZ3nIEN5l+zXNtxKat2C66U7TgIxXCwqinvxIBouEt4G1qPcx8BwopUuNY/fbDGLiftYL4gU8= X-Received: by 2002:a05:6512:10c4:b0:50c:cdc4:5e03 with SMTP id k4-20020a05651210c400b0050ccdc45e03mr11878083lfg.22.1703014700609; Tue, 19 Dec 2023 11:38:20 -0800 (PST) Received-SPF: pass client-ip=2a00:1450:4864:20::135; envelope-from=vekazanov@gmail.com; helo=mail-lf1-x135.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:314013 Archived-At: --000000000000474c73060ce2022d Content-Type: text/plain; charset="UTF-8" Hi all, 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. 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! Thank you -- Regards, Vladimir Kazanov --000000000000474c73060ce2022d Content-Type: text/x-patch; charset="US-ASCII"; name="0001-first-draft-version-of-user-fringe-tooltips.patch" Content-Disposition: attachment; filename="0001-first-draft-version-of-user-fringe-tooltips.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lqcqlzpq0 RnJvbSAwOTU1MWMzYTE5MTIwMWViZTQ1ZTEzNDVlNWM1MTViNTlhZDNkNzI4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWbGFkaW1pciBLYXphbm92IDx2ZWthemFub3ZAZ21haWwuY29t PgpEYXRlOiBUdWUsIDE5IERlYyAyMDIzIDE5OjExOjI2ICswMDAwClN1YmplY3Q6IFtQQVRDSF0g Zmlyc3QgZHJhZnQgdmVyc2lvbiBvZiB1c2VyIGZyaW5nZSB0b29sdGlwcwoKLS0tCiBzcmMvZGlz cGV4dGVybi5oIHwgMTIgKysrKysrKysrKysrCiBzcmMveGRpc3AuYyAgICAgIHwgMzkgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCiAyIGZpbGVzIGNoYW5nZWQsIDQ5IGlu c2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Rpc3BleHRlcm4u aCBiL3NyYy9kaXNwZXh0ZXJuLmgKaW5kZXggZWNlMTI4OTQ5ZjUuLjUzZGVlOTlhYjA1IDEwMDY0 NAotLS0gYS9zcmMvZGlzcGV4dGVybi5oCisrKyBiL3NyYy9kaXNwZXh0ZXJuLmgKQEAgLTk0MCw2 ICs5NDAsMTIgQEAgI2RlZmluZSBDSEVDS19NQVRSSVgoTUFUUklYKSAoKHZvaWQpIDApCiAgICAg IGl0IHNwZWNpZmllcyBhY3R1YWwgZnJpbmdlIGJpdG1hcCBudW1iZXIuICAqLwogICBpbnQgb3Zl cmxheV9hcnJvd19iaXRtYXA7CgorICAvKiBMZWZ0IGZyaW5nZSBjYXB0aW9uIChRbmlsIG9yIGEg c3RyaW5ncCkqLworICBMaXNwX09iamVjdCBsZWZ0X3VzZXJfZnJpbmdlX2NhcHRpb247CisKKyAg LyogUmlnaHQgZnJpbmdlIGNhcHRpb24gKFFuaWwgb3IgYSBzdHJpbmdwKSovCisgIExpc3BfT2Jq ZWN0IHJpZ2h0X3VzZXJfZnJpbmdlX2NhcHRpb247CisKICAgLyogTGVmdCBmcmluZ2UgYml0bWFw IG51bWJlciAoZW51bSBmcmluZ2VfYml0bWFwX3R5cGUpLiAgKi8KICAgdW5zaWduZWQgbGVmdF91 c2VyX2ZyaW5nZV9iaXRtYXAgOiBGUklOR0VfSURfQklUUzsKCkBAIC0yNzYyLDYgKzI3NjgsMTIg QEAgI2RlZmluZSBPVkVSTEFZX1NUUklOR19DSFVOS19TSVpFIDE2CiAgICAgIGlzIGluIGVmZmVj dCwgYW5kIG9ubHkgaW4gaHNjcm9sbGVkIHdpbmRvd3MuICAqLwogICBpbnQgc3RyZXRjaF9hZGp1 c3Q7CgorICAvKiBMZWZ0IGZyaW5nZSBjYXB0aW9uIChRbmlsIG9yIGEgc3RyaW5ncCkgKi8KKyAg TGlzcF9PYmplY3QgbGVmdF91c2VyX2ZyaW5nZV9jYXB0aW9uOworCisgIC8qIFJpZ2h0IGZyaW5n ZSBjYXB0aW9uICAoUW5pbCBvciBhIHN0cmluZ3ApKi8KKyAgTGlzcF9PYmplY3QgcmlnaHRfdXNl cl9mcmluZ2VfY2FwdGlvbjsKKwogICAvKiBMZWZ0IGZyaW5nZSBiaXRtYXAgbnVtYmVyIChlbnVt IGZyaW5nZV9iaXRtYXBfdHlwZSkuICAqLwogICB1bnNpZ25lZCBsZWZ0X3VzZXJfZnJpbmdlX2Jp dG1hcCA6IEZSSU5HRV9JRF9CSVRTOwoKZGlmZiAtLWdpdCBhL3NyYy94ZGlzcC5jIGIvc3JjL3hk aXNwLmMKaW5kZXggZmRiNGFjZDcxYmYuLjBlOGExOGRhMzU4IDEwMDY0NAotLS0gYS9zcmMveGRp c3AuYworKysgYi9zcmMveGRpc3AuYwpAQCAtMzI1Miw2ICszMjUyLDEwIEBAIGluaXRfaXRlcmF0 b3IgKHN0cnVjdCBpdCAqaXQsIHN0cnVjdCB3aW5kb3cgKncsCiAgIC8qIENsZWFyIElULCBhbmQg c2V0IGl0LT5vYmplY3QgYW5kIG90aGVyIElUJ3MgTGlzcCBvYmplY3RzIHRvIFFuaWwuCiAgICAg IE90aGVyIHBhcnRzIG9mIHJlZGlzcGxheSByZWx5IG9uIHRoYXQuICAqLwogICBtZW1jbGVhciAo aXQsIHNpemVvZiAqaXQpOworCisgIGl0LT5sZWZ0X3VzZXJfZnJpbmdlX2NhcHRpb24gPSBRbmls OworICBpdC0+cmlnaHRfdXNlcl9mcmluZ2VfY2FwdGlvbiA9IFFuaWw7CisKICAgaXQtPmN1cnJl bnQub3ZlcmxheV9zdHJpbmdfaW5kZXggPSAtMTsKICAgaXQtPmN1cnJlbnQuZHB2ZWNfaW5kZXgg PSAtMTsKICAgaXQtPmJhc2VfZmFjZV9pZCA9IHJlbWFwcGVkX2Jhc2VfZmFjZV9pZDsKQEAgLTYw ODIsNiArNjA4NiwxMyBAQCBoYW5kbGVfc2luZ2xlX2Rpc3BsYXlfc3BlYyAoc3RydWN0IGl0ICpp dCwgTGlzcF9PYmplY3Qgc3BlYywgTGlzcF9PYmplY3Qgb2JqZWN0LAogCQlmYWNlX2lkID0gZmFj ZV9pZDI7CiAJICAgIH0KCisJICBMaXNwX09iamVjdCBjYXB0aW9uID0gUW5pbDsKKwkgIGlmIChD T05TUCAoWENEUiAoWENEUiAoWENEUiAoc3BlYykpKSkpCisJICAgIHsKKwkgICAgICBjYXB0aW9u ID0gWENBUiAoWENEUiAoWENEUiAoWENEUiAoc3BlYykpKSk7CisJICAgIH0KKworCiAJICAvKiBT YXZlIGN1cnJlbnQgc2V0dGluZ3Mgb2YgSVQgc28gdGhhdCB3ZSBjYW4gcmVzdG9yZSB0aGVtCiAJ ICAgICB3aGVuIHdlIGFyZSBmaW5pc2hlZCB3aXRoIHRoZSBnbHlwaCBwcm9wZXJ0eSB2YWx1ZS4g ICovCiAJICBwdXNoX2l0IChpdCwgcG9zaXRpb24pOwpAQCAtNjEwNSwxMSArNjExNiwxMyBAQCBo YW5kbGVfc2luZ2xlX2Rpc3BsYXlfc3BlYyAoc3RydWN0IGl0ICppdCwgTGlzcF9PYmplY3Qgc3Bl YywgTGlzcF9PYmplY3Qgb2JqZWN0LAogCSAgICB7CiAJICAgICAgaXQtPmxlZnRfdXNlcl9mcmlu Z2VfYml0bWFwID0gZnJpbmdlX2JpdG1hcDsKIAkgICAgICBpdC0+bGVmdF91c2VyX2ZyaW5nZV9m YWNlX2lkID0gZmFjZV9pZDsKKwkgICAgICBpdC0+bGVmdF91c2VyX2ZyaW5nZV9jYXB0aW9uID0g Y2FwdGlvbjsKIAkgICAgfQogCSAgZWxzZQogCSAgICB7CiAJICAgICAgaXQtPnJpZ2h0X3VzZXJf ZnJpbmdlX2JpdG1hcCA9IGZyaW5nZV9iaXRtYXA7CiAJICAgICAgaXQtPnJpZ2h0X3VzZXJfZnJp bmdlX2ZhY2VfaWQgPSBmYWNlX2lkOworCSAgICAgIGl0LT5yaWdodF91c2VyX2ZyaW5nZV9jYXB0 aW9uID0gY2FwdGlvbjsKIAkgICAgfQogCX0KICNlbmRpZiAvKiBIQVZFX1dJTkRPV19TWVNURU0g Ki8KQEAgLTI1NTkzLDEzICsyNTYwNiwxOSBAQCAjZGVmaW5lIFJFQ09SRF9NQVhfTUlOX1BPUyhJ VCkJCQkJCVwKICAgLyogU2F2ZSBmcmluZ2UgYml0bWFwcyBpbiB0aGlzIHJvdy4gICovCiAgIHJv dy0+bGVmdF91c2VyX2ZyaW5nZV9iaXRtYXAgPSBpdC0+bGVmdF91c2VyX2ZyaW5nZV9iaXRtYXA7 CiAgIHJvdy0+bGVmdF91c2VyX2ZyaW5nZV9mYWNlX2lkID0gaXQtPmxlZnRfdXNlcl9mcmluZ2Vf ZmFjZV9pZDsKKyAgcm93LT5sZWZ0X3VzZXJfZnJpbmdlX2NhcHRpb24gPSBpdC0+bGVmdF91c2Vy X2ZyaW5nZV9jYXB0aW9uOworCiAgIHJvdy0+cmlnaHRfdXNlcl9mcmluZ2VfYml0bWFwID0gaXQt PnJpZ2h0X3VzZXJfZnJpbmdlX2JpdG1hcDsKICAgcm93LT5yaWdodF91c2VyX2ZyaW5nZV9mYWNl X2lkID0gaXQtPnJpZ2h0X3VzZXJfZnJpbmdlX2ZhY2VfaWQ7CisgIHJvdy0+cmlnaHRfdXNlcl9m cmluZ2VfY2FwdGlvbiA9IGl0LT5yaWdodF91c2VyX2ZyaW5nZV9jYXB0aW9uOwoKICAgaXQtPmxl ZnRfdXNlcl9mcmluZ2VfYml0bWFwID0gMDsKICAgaXQtPmxlZnRfdXNlcl9mcmluZ2VfZmFjZV9p ZCA9IDA7CisgIGl0LT5sZWZ0X3VzZXJfZnJpbmdlX2NhcHRpb24gPSBRbmlsOworCiAgIGl0LT5y aWdodF91c2VyX2ZyaW5nZV9iaXRtYXAgPSAwOwogICBpdC0+cmlnaHRfdXNlcl9mcmluZ2VfZmFj ZV9pZCA9IDA7CisgIGl0LT5yaWdodF91c2VyX2ZyaW5nZV9jYXB0aW9uID0gUW5pbDsKCiAgIC8q IFdoZW4gdGhleSB0dXJuIG9mZiB0b29sdGlwLW1vZGUgb24gYSBHVUkgZnJhbWUsIHdlIGNhbGwg J21lc3NhZ2UnCiAgICAgIHdpdGggbWVzc2FnZS10cnVuY2F0ZS1saW5lcyBib3VuZCB0byBub24t bmlsLCB3aGljaCBwcm9kdWNlcwpAQCAtMzUyNzMsOCArMzUyOTIsMjQgQEAgbm90ZV9tb3VzZV9o aWdobGlnaHQgKHN0cnVjdCBmcmFtZSAqZiwgaW50IHgsIGludCB5KQogICAgICAgfQogICAgIGVs c2UKICAgICAgIGN1cnNvciA9IEZSQU1FX09VVFBVVF9EQVRBIChmKS0+bm9udGV4dF9jdXJzb3I7 Ci0gIGVsc2UgaWYgKHBhcnQgPT0gT05fTEVGVF9GUklOR0UgfHwgcGFydCA9PSBPTl9SSUdIVF9G UklOR0UKLQkgICB8fCBwYXJ0ID09IE9OX1ZFUlRJQ0FMX1NDUk9MTF9CQVIKKyAgZWxzZSBpZiAo cGFydCA9PSBPTl9MRUZUX0ZSSU5HRSB8fCBwYXJ0ID09IE9OX1JJR0hUX0ZSSU5HRSkKKyAgICAg IHsKKyAgICAgICAgICBjdXJzb3IgPSBGUkFNRV9PVVRQVVRfREFUQSAoZiktPm5vbnRleHRfY3Vy c29yOworCisJICBpZiAoTklMUCAoaGVscF9lY2hvX3N0cmluZykpIHsKKwkgICAgICBpbnQgaHBv cywgdnBvcywgYXJlYTsKKwkgICAgICB4X3lfdG9faHBvc192cG9zICh3LCB4LCB5LCAmaHBvcywg JnZwb3MsIDAsIDAsICZhcmVhKTsKKwkgICAgICBzdHJ1Y3QgZ2x5cGhfcm93ICpyID0gTUFUUklY X1JPVyAody0+Y3VycmVudF9tYXRyaXgsIHZwb3MpOworCSAgICAgIGlmIChwYXJ0ID09IE9OX0xF RlRfRlJJTkdFCisJCSAgJiYgIU5JTFAoci0+bGVmdF91c2VyX2ZyaW5nZV9jYXB0aW9uKSkKKwkJ ICBoZWxwX2VjaG9fc3RyaW5nID0gci0+bGVmdF91c2VyX2ZyaW5nZV9jYXB0aW9uOworCSAgICAg IGVsc2UgaWYgKHBhcnQgPT0gT05fUklHSFRfRlJJTkdFCisJCSAgICAgICAmJiAhTklMUChyLT5y aWdodF91c2VyX2ZyaW5nZV9jYXB0aW9uKSkKKwkgICAgICAgICAgaGVscF9lY2hvX3N0cmluZyA9 IHItPnJpZ2h0X3VzZXJfZnJpbmdlX2NhcHRpb247CisJICB9CisKKyAgICAgIH0KKyAgZWxzZSBp ZiAocGFydCA9PSBPTl9WRVJUSUNBTF9TQ1JPTExfQkFSCiAJICAgfHwgcGFydCA9PSBPTl9IT1JJ Wk9OVEFMX1NDUk9MTF9CQVIpCiAgICAgY3Vyc29yID0gRlJBTUVfT1VUUFVUX0RBVEEgKGYpLT5u b250ZXh0X2N1cnNvcjsKICAgZWxzZQotLQoyLjM0LjEK --000000000000474c73060ce2022d--