From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.devel Subject: Re: Variable-width font indentation Date: Thu, 08 Mar 2018 15:21:55 +0200 Message-ID: <83h8pqpurw.fsf@gnu.org> References: <87inaiss6l.fsf@web.de> <6FCF6ACA-4F29-4B6B-BE9D-D7130C6E9495@gnu.org> <87fu5moe4c.fsf@web.de> <877eqyocro.fsf@web.de> <83zi3uz4nb.fsf@gnu.org> <0b1dd3fa-e0b0-ed20-a256-dd92d1c1826f@dancol.org> <8bc3c4c7-dfc7-987a-95e7-bd309e2326c6@cs.ucla.edu> <03118DC0-39DA-4AB5-980E-A33809B9A5EE@raeburn.org> <83vaeas8uz.fsf@gnu.org> <83lgf6s3aa.fsf@gnu.org> <8b94336f-1bb4-84ab-263b-af5ba40bfca4@cs.ucla.edu> <673d6612-f0d4-5d34-c6ee-a276dbba3068@cs.ucla.edu> <087fdedd-a7c5-f7f6-f3a5-b1700fb6e516@gmail.com> <50a23cc7-9404-0fdb-32fa-08d77782cbc9@gmail.com> Reply-To: Eli Zaretskii NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: blaine.gmane.org 1520515870 31361 195.159.176.226 (8 Mar 2018 13:31:10 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Thu, 8 Mar 2018 13:31:10 +0000 (UTC) Cc: eggert@cs.ucla.edu, emacs-devel@gnu.org To: =?utf-8?Q?Cl=C3=A9ment?= Pit-Claudel Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Mar 08 14:31:06 2018 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1etvdN-0007w3-KK for ged-emacs-devel@m.gmane.org; Thu, 08 Mar 2018 14:31:01 +0100 Original-Received: from localhost ([::1]:38996 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1etvfQ-0007xT-BJ for ged-emacs-devel@m.gmane.org; Thu, 08 Mar 2018 08:33:08 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:39706) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1etvUe-00086M-Pa for emacs-devel@gnu.org; Thu, 08 Mar 2018 08:22:01 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1etvUd-0007PR-V3 for emacs-devel@gnu.org; Thu, 08 Mar 2018 08:22:00 -0500 Original-Received: from fencepost.gnu.org ([2001:4830:134:3::e]:59039) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1etvUd-0007PK-Rp; Thu, 08 Mar 2018 08:21:59 -0500 Original-Received: from [176.228.60.248] (port=3651 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1etvUd-0004ju-3n; Thu, 08 Mar 2018 08:21:59 -0500 In-reply-to: <50a23cc7-9404-0fdb-32fa-08d77782cbc9@gmail.com> (message from =?utf-8?Q?Cl=C3=A9ment?= Pit-Claudel on Wed, 7 Mar 2018 17:13:09 -0500) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2001:4830:134:3::e X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 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.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:223492 Archived-At: > From: Clément Pit-Claudel > Date: Wed, 7 Mar 2018 17:13:09 -0500 > > This version is a bit faster, and it uses 'display (space …) instead of ghost strings: > > (defun ~/variable-pitch-indent () > (interactive) > (save-excursion > (let ((spine []) > (prev-bol nil) > (prev-eol nil)) > (goto-char (point-min)) > (while (not (eobp)) > (let ((bol (point))) > (back-to-indentation) > (unless (eolp) > (let* ((indentation-amount (current-column)) > (trunc-spine-to (min (length spine) indentation-amount))) > (setq spine (seq-subseq spine 0 trunc-spine-to)) > ;; Extend spine based on previous line > (when (and prev-bol (< (length spine) indentation-amount)) > (let ((beg (+ prev-bol (length spine))) > (end (min prev-eol (+ prev-bol indentation-amount)))) > (setq spine (vconcat spine (~/measure-px-widths beg end))))) > (setq prev-bol bol prev-eol (point-at-eol)))) > (dotimes (idx (min (length spine) (- (point) bol))) > (let ((w (aref spine idx))) > (put-text-property (+ bol idx) (+ bol idx 1) > 'display `(space :width (,w))))) > (forward-line 1)))))) It seems you forgot to post ~/measure-px-widths.