From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Eshel Yaron Newsgroups: gmane.emacs.devel Subject: Re: master 6b7ff60a5e7: Highlight the suffix in *Completions* buffer in 'basic' style too Date: Fri, 14 Jun 2024 09:35:32 +0200 Message-ID: References: <171823002031.28307.18221225159709452537@vcs2.savannah.gnu.org> <20240612220700.A0F4DC1FB4C@vcs2.savannah.gnu.org> <86h6dwf40q.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="34980"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Cc: emacs-devel@gnu.org, Dmitry Gutov To: Juri Linkov Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Fri Jun 14 09:36:24 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 1sI1Tz-0008pB-N0 for ged-emacs-devel@m.gmane-mx.org; Fri, 14 Jun 2024 09:36:23 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sI1TG-0002ji-RO; Fri, 14 Jun 2024 03:35:38 -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 1sI1TF-0002jP-DR for emacs-devel@gnu.org; Fri, 14 Jun 2024 03:35:37 -0400 Original-Received: from mail.eshelyaron.com ([107.175.124.16] helo=eshelyaron.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sI1TD-0002Ds-TM for emacs-devel@gnu.org; Fri, 14 Jun 2024 03:35:37 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=eshelyaron.com; s=mail; t=1718350535; bh=ViN/xftmkH410g7s8Gl2ngAXEx11sDgQmViLzcZthp8=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=jRa97qFbmigQOAB3UdHUqtoCHfYqzaWXDhIs0E0Of3Sn6eEhsC1INYe9Sc9P2I/H/ WImoPWhbwI08uNmGZZWSq2B+Z8LKO8+Hslv6bVXVbjQb8UjNenYtNG5KJfnqgwQOgt siDBXtgyO0kid2UXd0PnfzxB0q6nYI+iF/EVZPjqKaTu4er6KtGU0R4WGQkosA6jjP N/miLRtVubRTkeoQVAQMEooXEQK2NgRzdiUsJ54t6kCowJ0NAxd2JDiXDZ2IDCJ9cd 7Spkm6UizjyxxDzL7RsCf0Feg3MZeVCGF8x4iV0g0kjNkn0T3npSsjaxxSCxq+lEjm SevvMzfVL2T1w== In-Reply-To: <86h6dwf40q.fsf@mail.linkov.net> (Juri Linkov's message of "Fri, 14 Jun 2024 09:10:40 +0300") Received-SPF: pass client-ip=107.175.124.16; envelope-from=me@eshelyaron.com; helo=eshelyaron.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, 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:320052 Archived-At: Hi Juri, Juri Linkov writes: >> Something like the following should fix this issue: >> [...] >> @@ -3816,7 +3816,9 @@ completion-basic-all-completions >> 'point >> (substring afterpoint 0 (cdr bounds))))) >> (all (completion-pcm--all-completions prefix pattern table pred))) >> - (completion-pcm--hilit-commonality pattern all))) >> + (when all >> + (nconc (completion-pcm--hilit-commonality pattern all) >> + (car bounds))))) > > This fixes file name completion, but at the cost of breaking icomplete-mode: > > Debugger entered--Lisp error: (wrong-type-argument number-or-marker-p nil) > >(19 nil) > (if (> (length string) pos) (add-face-text-property pos (1+ pos) 'completions-first-difference nil string)) > (let* ((md (and regexp (string-match regexp string) (cdr (cdr (match-data t))))) ...) > completion--hilit-from-re("it-window-to-buffer" "\\`f\\(.*?\\)" 1) > completion-lazy-hilit("it-window-to-buffer") > icomplete-completions("f" ...) > icomplete-exhibit() > completing-read-default("M-x " ...) > read-extended-command-1("M-x " nil) > read-extended-command() > command-execute(execute-extended-command) Hmm that's quite curious... I can reproduce it also without my change in 56537ab0228, FWIW. AFAICT the issue is that icomplete trims the prefix from completion candidates before passing them to completion-lazy-hilit, while completion--hilit-from-re expects the full candidate (prefix included). I'm not deeply familiar with icomplete, but maybe calling completion-lazy-hilit before trimming the candidates as in the diff below should do the trick? diff --git a/lisp/icomplete.el b/lisp/icomplete.el index 44bbe9772e4..d03e315fdc8 100644 --- a/lisp/icomplete.el +++ b/lisp/icomplete.el @@ -1043,7 +1043,8 @@ icomplete-completions (setq determ (concat open-bracket "" close-bracket))) (while (and comps (not limit)) (setq comp - (if prefix-len (substring (car comps) prefix-len) (car comps)) + (let ((cur (completion-lazy-hilit (car comps)))) + (if prefix-len (substring cur prefix-len) cur)) comps (cdr comps)) (setq prospects-len (+ (string-width comp) @@ -1052,8 +1053,7 @@ icomplete-completions (if (< prospects-len prospects-max) (push comp prospects) (setq limit t))) - (setq prospects - (nreverse (mapcar #'completion-lazy-hilit prospects))) + (setq prospects (nreverse prospects)) ;; Decorate first of the prospects. (when prospects (let ((first (copy-sequence (pop prospects))))