From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Juanma Barranquero Newsgroups: gmane.emacs.bugs Subject: bug#37641: major/minor tick faces bleed into empty lines at the end of buffer Date: Tue, 8 Oct 2019 06:23:36 +0200 Message-ID: References: <83zhiczg1m.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="000000000000470dfb05945e8ae0" Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="124505"; mail-complaints-to="usenet@blaine.gmane.org" Cc: 37641@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Oct 08 06:25:19 2019 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1iHh3n-000W6H-0V for geb-bug-gnu-emacs@m.gmane.org; Tue, 08 Oct 2019 06:25:19 +0200 Original-Received: from localhost ([::1]:51128 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iHh3e-0001z9-Pp for geb-bug-gnu-emacs@m.gmane.org; Tue, 08 Oct 2019 00:25:10 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:33610) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iHh3Y-0001z2-5j for bug-gnu-emacs@gnu.org; Tue, 08 Oct 2019 00:25:05 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iHh3W-0001no-QD for bug-gnu-emacs@gnu.org; Tue, 08 Oct 2019 00:25:04 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:40522) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iHh3W-0001ng-NN for bug-gnu-emacs@gnu.org; Tue, 08 Oct 2019 00:25:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1iHh3W-0003lA-FZ for bug-gnu-emacs@gnu.org; Tue, 08 Oct 2019 00:25:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Juanma Barranquero Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 08 Oct 2019 04:25:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 37641 X-GNU-PR-Package: emacs Original-Received: via spool by 37641-submit@debbugs.gnu.org id=B37641.157050865814393 (code B ref 37641); Tue, 08 Oct 2019 04:25:02 +0000 Original-Received: (at 37641) by debbugs.gnu.org; 8 Oct 2019 04:24:18 +0000 Original-Received: from localhost ([127.0.0.1]:49343 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iHh2o-0003k5-0x for submit@debbugs.gnu.org; Tue, 08 Oct 2019 00:24:18 -0400 Original-Received: from mail-qt1-f173.google.com ([209.85.160.173]:39037) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iHh2n-0003jt-18 for 37641@debbugs.gnu.org; Tue, 08 Oct 2019 00:24:17 -0400 Original-Received: by mail-qt1-f173.google.com with SMTP id n7so23091270qtb.6 for <37641@debbugs.gnu.org>; Mon, 07 Oct 2019 21:24:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=jIlWnKro88cMcm2I6GDmV64tVNtDqERHdMINAv12Bjg=; b=vOgsQOSC2bIYxt5ZX9jHw9ibZo/79wKMRbsRkB7tFl5rT0y+bHxm9CBbCyN7cjiCE1 m5FbcXT7Vx+9vpbtONyyqxFZoEsIQKToFty5GvOoGF66nctjT2KPlNa8+bnHD+v3DINA 9a0wBATaqkNROi4fJhvFTlZTLWmukrPbGKtOrGP1s/AQi2n4oSpSbgRhTbBRLmtPD/I+ PGXQqnD+OB4EGsTv9YUvj+W4oPrn+K/yHJveFGUNtqSPPkMZbWdHxgXt278vLZJj+0NA QNriQWtcZwldvFH/V0OHhdHrSJSLMtonmzpKFybBA/jfRhPAOP0Rmv9pbYki21VABOhB 3fsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=jIlWnKro88cMcm2I6GDmV64tVNtDqERHdMINAv12Bjg=; b=Ldz8C2czilkD/GkJRIZUQgLR4OlHKKJ2w8BYpmM+oAvGCbKXhtR79xeDsfHDgGe/Zt blb2rpwTKKAiy5IYUZPARItkLzgXvKzAJQH3O9CstV7dDnIxRvUnKz2YVE6ifNI2EtIe ldWtz7rkCqEdY/xG8tmxdNA9zkLet3u8utYViP+nBTH3X2Br4Sxp2G61fuBPSAolmMx5 Cl5/DisYe+9oNmyJGWfcfAFnR9pRqboMpCR91JxEoYihVqYTjLLfE1xLhbcYmZva6/Ay ow1HDMkp1CbGuu9fy5hVjTYN2PHuGf/mJPxZEChkTfNTCowCQ6yu5zjMFzvmmLRG0uK5 qo4g== X-Gm-Message-State: APjAAAVeyYcc0ENMtwUSw+lc+vZ2ZpSz/JAFMgUFuDjSxlNkmX5ik5eG 3uOwsa1TZ8lwLxM/h6bTR8QUmp7dd1ynPMItlWACHgUv X-Google-Smtp-Source: APXvYqxJ5LcKygS1ATDh3UtQa4IlvdVvP5p0Q2IFDIQrAHENgBjALDmZ0QzUSkjUEdLSjvx24aQiwEO//M09W56lCBY= X-Received: by 2002:aed:21d1:: with SMTP id m17mr34646852qtc.17.1570508651301; Mon, 07 Oct 2019 21:24:11 -0700 (PDT) In-Reply-To: X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 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.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:168599 Archived-At: --000000000000470dfb05945e8ae0 Content-Type: text/plain; charset="UTF-8" As an aside, if it is safe to assume that the faces are not going to change between digits of the line number, perhaps this change would be a gain. It moves merging the tick faces outside the lnum_buf loop, and it is done only for the right line numbers and when not beyond_zv. diff --git i/src/xdisp.c w/src/xdisp.c index ad73981c1d..2d79a42270 100644 --- i/src/xdisp.c +++ w/src/xdisp.c @@ -22657,6 +22657,21 @@ maybe_produce_line_number (struct it *it) int width_limit = tem_it.last_visible_x - tem_it.first_visible_x - 3 * FRAME_COLUMN_WIDTH (it->f); + + /* Select face for tick line numbers, if needed */ + int tick_face_id = -1; + if (!beyond_zv) + { + if (display_line_numbers_major_tick > 0 + && (lnum_to_display % display_line_numbers_major_tick == 0)) + tick_face_id = merge_faces (it->w, Qline_number_major_tick, + 0, DEFAULT_FACE_ID); + else if (display_line_numbers_minor_tick > 0 + && (lnum_to_display % display_line_numbers_minor_tick == 0)) + tick_face_id = merge_faces (it->w, Qline_number_minor_tick, + 0, DEFAULT_FACE_ID); + } + /* Produce glyphs for the line number in a scratch glyph_row. */ for (const char *p = lnum_buf; *p; p++) { @@ -22671,14 +22686,8 @@ maybe_produce_line_number (struct it *it) ? this_line == 0 : this_line == it->pt_lnum)) tem_it.face_id = current_lnum_face_id; - else if (display_line_numbers_major_tick > 0 - && (lnum_to_display % display_line_numbers_major_tick == 0)) - tem_it.face_id = merge_faces (it->w, Qline_number_major_tick, - 0, DEFAULT_FACE_ID); - else if (display_line_numbers_minor_tick > 0 - && (lnum_to_display % display_line_numbers_minor_tick == 0)) - tem_it.face_id = merge_faces (it->w, Qline_number_minor_tick, - 0, DEFAULT_FACE_ID); + else if (tick_face_id >= 0) + tem_it.face_id = tick_face_id; else tem_it.face_id = lnum_face_id; if (beyond_zv --000000000000470dfb05945e8ae0 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
As an aside, if it is safe to assume that the faces are no= t going to change between digits of the line number, perhaps=C2=A0this chan= ge would be a gain.

It moves merging the tick faces outs= ide the lnum_buf loop, and it is done only for the right line numbers and w= hen not beyond_zv.

diff --git i/src/xdisp.c w/src/xdisp.= c
index ad73981c1d..2d79a42270 100644
--- i/src/xdisp.c
+++ w/src/= xdisp.c
@@ -22657,6 +22657,21 @@ maybe_produce_line_number (struct it *i= t)
=C2=A0 =C2=A0int width_limit =3D
=C2=A0 =C2=A0 =C2=A0tem_it.last_v= isible_x - tem_it.first_visible_x
=C2=A0 =C2=A0 =C2=A0- 3 * FRAME_COLUMN= _WIDTH (it->f);
+
+ =C2=A0/* Select face for tick line numbers, if= needed */
+ =C2=A0int tick_face_id =3D -1;
+ =C2=A0if (!beyond_zv)+ =C2=A0 =C2=A0{
+ =C2=A0 =C2=A0 =C2=A0if (display_line_numbers_major_= tick > 0
+ =C2=A0 =C2=A0 && (lnum_to_display % display_line_n= umbers_major_tick =3D=3D 0))
+ =C2=A0 tick_face_id =3D merge_faces (it-&= gt;w, Qline_number_major_tick,
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 0, DEFAULT_FACE_ID);
+ =C2=A0 =C2=A0 =C2=A0else= if (display_line_numbers_minor_tick > 0
+ =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0&& (lnum_to_display % display_line_numbers_minor_tick =3D= =3D 0))
+ =C2=A0 tick_face_id =3D merge_faces (it->w, Qline_number_mi= nor_tick,
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 0, DEFAULT_FACE_ID);
+ =C2=A0 =C2=A0}
+
=C2=A0 =C2=A0/* Produc= e glyphs for the line number in a scratch glyph_row. =C2=A0*/
=C2=A0 =C2= =A0for (const char *p =3D lnum_buf; *p; p++)
=C2=A0 =C2=A0 =C2=A0{
@@= -22671,14 +22686,8 @@ maybe_produce_line_number (struct it *it)
=C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0? this_line =3D=3D 0
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0: this_line =3D=3D it->pt_lnum))
=C2=A0 =C2= =A0 tem_it.face_id =3D current_lnum_face_id;
- =C2=A0 =C2=A0 =C2=A0else = if (display_line_numbers_major_tick > 0
- =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0&& (lnum_to_display % display_line_numbers_major_tick =3D=3D= 0))
- =C2=A0 tem_it.face_id =3D merge_faces (it->w, Qline_number_maj= or_tick,
- =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 0, DEFAULT_FACE_ID);
- =C2=A0 =C2=A0 =C2=A0else if (display_l= ine_numbers_minor_tick > 0
- =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&&= amp; (lnum_to_display % display_line_numbers_minor_tick =3D=3D 0))
- =C2= =A0 tem_it.face_id =3D merge_faces (it->w, Qline_number_minor_tick,
-= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 0, D= EFAULT_FACE_ID);
+ =C2=A0 =C2=A0 =C2=A0else if (tick_face_id >=3D 0)<= br>+ =C2=A0 tem_it.face_id =3D tick_face_id;
=C2=A0 =C2=A0 =C2=A0 =C2=A0= else
=C2=A0 =C2=A0 tem_it.face_id =3D lnum_face_id;
=C2=A0 =C2=A0 =C2= =A0 =C2=A0if (beyond_zv
--000000000000470dfb05945e8ae0--