From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Juri Linkov Newsgroups: gmane.emacs.devel Subject: Re: master 431f8ff1e38: * lisp/imenu.el: Support more values for imenu-flatten (bug#70846) Date: Tue, 20 Aug 2024 20:51:23 +0300 Organization: LINKOV.NET Message-ID: <86seuzhylg.fsf@mail.linkov.net> References: <171558357066.26019.9766615061719600757@vcs2.savannah.gnu.org> <20240513065931.0D83AC12C31@vcs2.savannah.gnu.org> <86v83hwxjs.fsf@mail.linkov.net> <86ikzhq6ja.fsf@mail.linkov.net> <86o798x5hz.fsf@gnu.org> <86bk572e6a.fsf@mail.linkov.net> <861q62pb8y.fsf@mail.linkov.net> <864jayjd8u.fsf@gnu.org> <86le49ymsl.fsf@mail.linkov.net> <86msoo4cf3.fsf@mail.linkov.net> <865xv9ugjx.fsf@mail.linkov.net> <867cffdsp8.fsf@mail.linkov.net> <86ttgs78eu.fsf@mail.linkov.net> <86msmj9adm.fsf@mail.linkov.net> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="4207"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/31.0.50 (x86_64-pc-linux-gnu) Cc: Eshel Yaron , Eli Zaretskii , emacs-devel@gnu.org To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Tue Aug 20 19:55:15 2024 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 1sgT4d-0000yt-83 for ged-emacs-devel@m.gmane-mx.org; Tue, 20 Aug 2024 19:55:15 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sgT3q-0005zr-Sl; Tue, 20 Aug 2024 13:54:26 -0400 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 1sgT3j-0005zY-5Y for emacs-devel@gnu.org; Tue, 20 Aug 2024 13:54:19 -0400 Original-Received: from relay2-d.mail.gandi.net ([2001:4b98:dc4:8::222]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sgT3g-0005PG-GU; Tue, 20 Aug 2024 13:54:18 -0400 Original-Received: by mail.gandi.net (Postfix) with ESMTPSA id DCC2040003; Tue, 20 Aug 2024 17:54:08 +0000 (UTC) In-Reply-To: (Stefan Monnier's message of "Tue, 13 Aug 2024 21:41:14 -0400") X-GND-Sasl: juri@linkov.net Received-SPF: pass client-ip=2001:4b98:dc4:8::222; envelope-from=juri@linkov.net; helo=relay2-d.mail.gandi.net X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-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:322974 Archived-At: >>> What I would suggest is to ensure completion candidates are unambiguous >>> as strings rather than relying on text properties. Namely: >> Unfortunately, that'd be a step back. Maybe at least we could document >> limitations that annotations work only by selection. > > How about we make them unambiguous by adding text *at the end* (and > only if there's ambiguity)? > > The completion code assumes in all kinds of places that the same text > means the same thing, so using the same text to mean different > completion choices will get you in trouble in all kinds of corner (and > not so corner) cases. Ok, this patch adds the suffix only to ambiguous items. At least it helps to get the right item for the case when not selecting candidates from the completions list. OTOH, it still doesn't solve the original issue of using `M- M- M-RET` where `completion--replace` keeps properties of previous completion strings by using `insert-and-inherit`. ``` diff --git a/lisp/imenu.el b/lisp/imenu.el index 8f1b1f22a67..e151a685ce5 100644 --- a/lisp/imenu.el +++ b/lisp/imenu.el @@ -740,6 +740,24 @@ imenu--completion-buffer Return one of the entries in index-alist or nil." ;; Create a list for this buffer only when needed. + (when (eq imenu-flatten 'annotation) + (let ((hash (make-hash-table :test 'equal))) + (dolist (item index-alist) + (puthash (car item) (1+ (gethash (car item) hash 0)) hash)) + (setq index-alist + (mapcar (lambda (item) + (if (> (gethash (car item) hash) 1) + (cons (let ((ann (get-text-property + 0 'imenu-section (car item)))) + (if ann + (concat (propertize (car item) + 'imenu-section nil) + imenu-level-separator + (substring ann 1)) + (car item))) + (cdr item)) + item)) + index-alist)))) (let ((name (thing-at-point 'symbol)) choice (prepared-index-alist ```