From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Daniel Mendler Newsgroups: gmane.emacs.bugs Subject: bug#47712: 27.1; Provide `string-display-width` function, which takes properties into account, `substring-width` Date: Mon, 12 Apr 2021 16:36:05 +0200 Message-ID: References: <642c8a37-31c7-2723-12af-06cd7f120c2f@daniel-mendler.de> <83r1jg2q72.fsf@gnu.org> <83lf9n3d7x.fsf@gnu.org> <1c8f7066-3da2-d960-11e7-a42f567432bd@daniel-mendler.de> <83im4r3agk.fsf@gnu.org> <83czuz39jw.fsf@gnu.org> <83blaj37yi.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="8920"; mail-complaints-to="usenet@ciao.gmane.io" Cc: 47712@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Apr 12 16:38:02 2021 Return-path: Envelope-to: geb-bug-gnu-emacs@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 1lVxhS-0002Dx-JZ for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 12 Apr 2021 16:38:02 +0200 Original-Received: from localhost ([::1]:40452 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lVxhR-00005Y-JA for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 12 Apr 2021 10:38:01 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:46094) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lVxgU-0007ol-3x for bug-gnu-emacs@gnu.org; Mon, 12 Apr 2021 10:37:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:46125) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lVxgT-0000wz-RW for bug-gnu-emacs@gnu.org; Mon, 12 Apr 2021 10:37:01 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1lVxgT-0000rO-PM for bug-gnu-emacs@gnu.org; Mon, 12 Apr 2021 10:37:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Daniel Mendler Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 12 Apr 2021 14:37:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 47712 X-GNU-PR-Package: emacs Original-Received: via spool by 47712-submit@debbugs.gnu.org id=B47712.16182381753236 (code B ref 47712); Mon, 12 Apr 2021 14:37:01 +0000 Original-Received: (at 47712) by debbugs.gnu.org; 12 Apr 2021 14:36:15 +0000 Original-Received: from localhost ([127.0.0.1]:57671 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lVxfj-0000q8-Fp for submit@debbugs.gnu.org; Mon, 12 Apr 2021 10:36:15 -0400 Original-Received: from server.qxqx.de ([178.63.65.180]:41767 helo=mail.qxqx.de) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lVxfi-0000pt-3f for 47712@debbugs.gnu.org; Mon, 12 Apr 2021 10:36:14 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=qxqx.de; s=mail1392553390; h=Content-Transfer-Encoding:Content-Type:In-Reply-To: MIME-Version:Date:Message-ID:From:References:Cc:To:Subject:Sender:Reply-To: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=YMfuFSGXQv0WAumb7pPyVZQ5orKoIourlPqGVyUfxwQ=; b=bRELxWVUO/paq1XENaAqYJGuoN oSchXGUtzBZnfUtNGet6EJdVXFsZgbjpilSM5emE+FlXp7roq4L8hrnRL13hV0vv4oDhte9ECCRxa WZ8XUar0ehcgfuU3c3d6t8bXpdIM6nImhSdispGKeR4FQyGzGyxjS6wkOFedb5vIVuWU=; In-Reply-To: <83blaj37yi.fsf@gnu.org> Content-Language: en-US X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:203907 Archived-At: On 4/12/21 4:15 PM, Eli Zaretskii wrote: > If these properties are ignored, they will also be ignored on display. No, something is wrong. 'display should not be ignored. >> But for we can still look at the micro benchmark. The `string-width` >> function is 200 times faster than the `string-pixel-width` function. > > And if you reuse the same temp buffer? Sorry, I should have said that I tried reusing the same buffer. But it was not faster when I tried that. The buffer switching has a significant overhead. In order to get a fair benchmark one should measure the following: ;; 1.4s (with-temp-buffer (bench (dotimes (_ 10000) (erase-buffer) (insert test-string) (car (window-text-pixel-size nil (point-min) (point-max)))))) Given that benchmark the `window-text-pixel-size` function is still over 50 times slower. > With 0.5 millisecond per call, I don't see a problem. And I expect > that to go down if the buffer is reused. No, 0.5ms per call is not acceptable. When processing 2000 strings takes a second, it is not viable to use this to preprocess and format many strings. It may be okay for computing a handful strings which are being displayed right away. Given the benchmark I think it makes sense to continue to use `string-width` for certain use cases which can live with the limitations of only working correctly in text mode. But I understand that you don't want to add a half-broken `string-display-width` API on top of the already half-broken `string-width` API. One may still discuss the implementation of a `substring-width` API which generalizes `string-width`. (defun string-width (s) (substring-width s 0 (length s))) (defun substring-width (s a b) (string-width (substring s a b)))