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 04:38:18 +0200 Message-ID: References: <83zhiczg1m.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="000000000000b52d9705945d1180" Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="216200"; 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 04:40:13 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 1iHfQ4-000u85-LJ for geb-bug-gnu-emacs@m.gmane.org; Tue, 08 Oct 2019 04:40:12 +0200 Original-Received: from localhost ([::1]:50738 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iHfQ3-0001OM-BK for geb-bug-gnu-emacs@m.gmane.org; Mon, 07 Oct 2019 22:40:11 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:52445) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iHfPv-0001OC-Gz for bug-gnu-emacs@gnu.org; Mon, 07 Oct 2019 22:40:04 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iHfPu-000855-0F for bug-gnu-emacs@gnu.org; Mon, 07 Oct 2019 22:40:03 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:40497) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iHfPt-00084v-Rs for bug-gnu-emacs@gnu.org; Mon, 07 Oct 2019 22:40:01 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1iHfPt-00016u-Mv for bug-gnu-emacs@gnu.org; Mon, 07 Oct 2019 22:40:01 -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 02:40:01 +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.15705023424183 (code B ref 37641); Tue, 08 Oct 2019 02:40:01 +0000 Original-Received: (at 37641) by debbugs.gnu.org; 8 Oct 2019 02:39:02 +0000 Original-Received: from localhost ([127.0.0.1]:49318 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iHfOv-00015L-Ls for submit@debbugs.gnu.org; Mon, 07 Oct 2019 22:39:02 -0400 Original-Received: from mail-qk1-f174.google.com ([209.85.222.174]:44939) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iHfOt-000158-GZ for 37641@debbugs.gnu.org; Mon, 07 Oct 2019 22:39:00 -0400 Original-Received: by mail-qk1-f174.google.com with SMTP id u22so14981442qkk.11 for <37641@debbugs.gnu.org>; Mon, 07 Oct 2019 19:38:59 -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=VUgjp8bLca/mkAAOSNngpqkWyabFNA/Qa6jN7Z3O9ZA=; b=UjxjPXHWfoXcrq/weT6oNKOo3ODfubX4PjWyuW8aX6myBXLYxLf7L/T1lbANlVOpbC zztCL5AVM5MJXs13MntxOmk6giErI+TUkHbouEgKLmR+neAWHwFdXY8NpafcS6NASuc+ S3GjbAG9eY531JlsPF44KmRwd3XY8ds2RSHN+SuAd9GBeIcSqnRpj5SAtc9gv6z2DNjE Hu5jPICEh9L2Rk28wGB0XRZkXR3dMljkRYCHSjA0XaMEzBFEZQwoJNJ3Nwssu0lk7sJ3 BXsbwfQ7kzRyND4epRULxSBX6xFjikpazl3Z+t1LW7QvSUpwaNhNKreK48Zk3isx11zG 1ebg== 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=VUgjp8bLca/mkAAOSNngpqkWyabFNA/Qa6jN7Z3O9ZA=; b=F6RRTlv8Vs//+CdzUDScA2DhiVBuAef5Pdw4dLb7xdw3rfkYdli+W+NAr2gD5dFW7R kzM93S3Io/WEuMxG1Ni+McWXq+HIFFTVU3CbX5cTHsvvLNZE89IodbPm6lzZhkJTdgsG fCHXa0Rr96fTg/blELNh8RjfyPfhp0IXwWge+xRI8JOz+C1RgPhqs+Q1aPfJCFe3p27w 5TMRt4TdrnwCfFbFCDRc9k2QLJyUTcG3/MaxvC2RinXrKqokF39lIVKJQxGmGM1sWE8n VzFOaJmXJFigA47nN1ph9xRtgbfjpxBiKnaAAVaaqfOKx1jTqH97XA2Lv2y+ztlHp9X6 ofOw== X-Gm-Message-State: APjAAAWbtbvCAvuYW+RgaByRT/DtJqefKvm5XXP/PC/tv34q+vCa9Eco CZFIZglt1BRFSJVYtm6m1QL2dpCDkjn5dzFdyZw= X-Google-Smtp-Source: APXvYqy8XSsFJr7NqKO5HCTZDeno6+IeoRE2NGZYbMXy8p+3OaNyHGxMpzPBOIgoiPV//sHAS6/4+Kch/LyvFEivOd0= X-Received: by 2002:a05:620a:6db:: with SMTP id 27mr26402222qky.281.1570502333405; Mon, 07 Oct 2019 19:38:53 -0700 (PDT) In-Reply-To: <83zhiczg1m.fsf@gnu.org> 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:168598 Archived-At: --000000000000b52d9705945d1180 Content-Type: multipart/alternative; boundary="000000000000b52d9505945d117e" --000000000000b52d9505945d117e Content-Type: text/plain; charset="UTF-8" On Mon, Oct 7, 2019 at 6:17 PM Eli Zaretskii wrote: > Looks good, but please simplify by having 2-level if, the outer one > checking when to display a number, the inner which face to use for > that. There's no need to test beyond_zv more than once, and AFAIR > beyond_zv and it->what == IT_EOB are equivalent. beyond_zv and it->what == IT_EOB are similar, but not equivalent. I see the difference when deleting empty lines at the end of the buffer (specifically, when deleting from the last line, and not past the last line). With the `what' check, the face still bleed info the first post-EOB line. Checking beyond_zv it works (see attached images). As for simplifying the check, it is possible to check beyond_zv only once, with the minor downside of having two paths to set lnum_face (which works as the default face, and the face post-EOB). if (check for current line) // checks also it->what != IT_EOB set face to current_lnum_face; else if (beyond_zv) set face to lnum_face; // 1 else if (check for major tick) set face to major_tick; else if (check for minor tick) set face to minor_tick; else set face to lnum_face; // 2 BTW, if the "it->what != IT_EOB" comparison in the current line check can indeed be changed to !beyond_zv (which seems to work, at least on my tests), then you can go to if (beyond_zv) set face to lnum_face; // 1 else if (check for current line) // does not check it->what != IT_EOB set face to current_lnum_face; else if (check for major tick) set face to major_tick; else if (check for minor tick) set face to minor_tick; else set face to lnum_face; // 2 which is equally clean and saves another comparison. And the nicest thing is that the patch is very clean (attached also because Gmail as usual is screwing with it). diff --git a/src/xdisp.c b/src/xdisp.c index 29d49d57df..ad73981c1d 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -22662,13 +22662,14 @@ maybe_produce_line_number (struct it *it) { /* For continuation lines and lines after ZV, instead of a line number, produce a blank prefix of the same width. */ - if (lnum_face_id != current_lnum_face_id - && (EQ (Vdisplay_line_numbers, Qvisual) - ? this_line == 0 - : this_line == it->pt_lnum) - /* Avoid displaying the line-number-current-line face on - empty lines beyond EOB. */ - && it->what != IT_EOB) + if (beyond_zv) + /* Avoid displaying any face other than line-number on + empty lines beyond EOB. */ + tem_it.face_id = lnum_face_id; + else if (lnum_face_id != current_lnum_face_id + && (EQ (Vdisplay_line_numbers, Qvisual) + ? 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)) --000000000000b52d9505945d117e Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Mon, Oct 7, 2019 at 6:17 PM Eli Zaretskii <eliz@gnu.org> wrote:

> Looks= good, but please simplify by having 2-level if, the outer one
> chec= king when to display a number, the inner which face to use for
> that= .=C2=A0 There's no need to test beyond_zv more than once, and AFAIR
= > beyond_zv and it->what =3D=3D IT_EOB are equivalent.

<= div>beyond_zv and it->what =3D=3D IT_EOB are similar, but not equivalent= . I see the difference when deleting empty lines at the end of the buffer (= specifically, when deleting from the last line, and not past the last line)= .

With the `what' check, the face still bleed = info the first post-EOB line. Checking beyond_zv it works (see attached ima= ges).

As for simplifying=C2=A0the check, it is possible t= o check beyond_zv only once, with the minor downside of having two paths to= set lnum_face (which works as the default face, and the face post-EOB).

if (check for current line)=C2=A0 // checks also it-= >what !=3D IT_EOB
=C2=A0 =C2=A0set face to current_lnum_face;else if (beyond_zv)
=C2=A0 =C2=A0set face to lnum_face;=C2=A0 // 1
= else if (check for major tick)
=C2=A0 =C2=A0set face to major_tick;
e= lse if (check for minor tick)
=C2=A0 =C2=A0set face to minor_tick;
el= se
=C2=A0 =C2=A0set face to lnum_face;=C2=A0 // 2

BTW,=C2=A0if the "it->what !=3D IT_EOB" comparison in the cur= rent line check can indeed be changed to !beyond_zv (which seems to work, a= t least on my tests), then you can go to

if (beyon= d_zv)
=C2=A0 =C2=A0set face to lnum_face;=C2=A0 // 1
else if (check f= or current line)=C2=A0 // does not check it->what !=3D IT_EOB
=C2=A0 = =C2=A0set face to current_lnum_face;
else if (check for major tick)
= =C2=A0 =C2=A0set face to major_tick;
else if (check for minor tick)
= =C2=A0 =C2=A0set face to minor_tick;
else
=C2=A0 =C2=A0set face to ln= um_face; // 2

which is equally clean and saves= another comparison.

And the nicest thing is that = the patch is very clean (attached also because Gmail as usual is screwing w= ith it).

diff --git a/src/xdisp.c b/src/xdisp.cindex 29d49d57df..ad73981c1d 100644
--- a/src/xdisp.c
+++ b/src/xdis= p.c
@@ -22662,13 +22662,14 @@ maybe_produce_line_number (struct it *it)<= br>=C2=A0 =C2=A0 =C2=A0{
=C2=A0 =C2=A0 =C2=A0 =C2=A0/* For continuation = lines and lines after ZV, instead of a line
=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0number, produce a blank prefix of the same width. =C2=A0*/
- =C2= =A0 =C2=A0 =C2=A0if (lnum_face_id !=3D current_lnum_face_id
- =C2=A0 =C2= =A0 =C2=A0 =C2=A0 && (EQ (Vdisplay_line_numbers, Qvisual)
- =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 =C2=A0 =C2=A0 /* Avoid displaying the line-number-current-line f= ace on
- =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0empty lines beyond EOB= . =C2=A0*/
- =C2=A0 =C2=A0 =C2=A0 =C2=A0 && it->what !=3D IT_= EOB)
+ =C2=A0 =C2=A0 =C2=A0if (beyond_zv)
+ =C2=A0 =C2=A0 =C2=A0 /* A= void displaying any face other than line-number on
+ =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0empty lines beyond EOB. =C2=A0*/
+ =C2=A0 =C2=A0 =C2=A0= tem_it.face_id =3D lnum_face_id;
+ =C2=A0 =C2=A0 =C2=A0else if (lnum_fa= ce_id !=3D current_lnum_face_id
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0&& (EQ (Vdisplay_line_numbers, Qvisual)
+ =C2=A0 =C2= =A0 =C2=A0 =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 =C2=A0 =C2=A0 =C2=A0: this_lin= e =3D=3D it->pt_lnum))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 tem_it.face_id =3D= current_lnum_face_id;
=C2=A0 =C2=A0 =C2=A0 =C2=A0else if (display_line_= numbers_major_tick > 0
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0&& (lnum_to_display % display_line_numbers_major_tick =3D= =3D 0))

--000000000000b52d9505945d117e-- --000000000000b52d9705945d1180 Content-Type: image/png; name="it_eob.png" Content-Disposition: attachment; filename="it_eob.png" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k1h7df1e0 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 SUVORK5CYII= --000000000000b52d9705945d1180 Content-Type: image/png; name="beyond_zv.png" Content-Disposition: attachment; filename="beyond_zv.png" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k1h7evyb1 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 QxIRAPw/OMMFj3M0oWMAAAAASUVORK5CYII= --000000000000b52d9705945d1180 Content-Type: application/octet-stream; name="beyond.patch" Content-Disposition: attachment; filename="beyond.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k1h7zrdv2 ZGlmZiAtLWdpdCBhL3NyYy94ZGlzcC5jIGIvc3JjL3hkaXNwLmMKaW5kZXggMjlkNDlkNTdkZi4u YWQ3Mzk4MWMxZCAxMDA2NDQKLS0tIGEvc3JjL3hkaXNwLmMKKysrIGIvc3JjL3hkaXNwLmMKQEAg LTIyNjYyLDEzICsyMjY2MiwxNCBAQCBtYXliZV9wcm9kdWNlX2xpbmVfbnVtYmVyIChzdHJ1Y3Qg aXQgKml0KQogICAgIHsKICAgICAgIC8qIEZvciBjb250aW51YXRpb24gbGluZXMgYW5kIGxpbmVz IGFmdGVyIFpWLCBpbnN0ZWFkIG9mIGEgbGluZQogCSBudW1iZXIsIHByb2R1Y2UgYSBibGFuayBw cmVmaXggb2YgdGhlIHNhbWUgd2lkdGguICAqLwotICAgICAgaWYgKGxudW1fZmFjZV9pZCAhPSBj dXJyZW50X2xudW1fZmFjZV9pZAotCSAgJiYgKEVRIChWZGlzcGxheV9saW5lX251bWJlcnMsIFF2 aXN1YWwpCi0JICAgICAgPyB0aGlzX2xpbmUgPT0gMAotCSAgICAgIDogdGhpc19saW5lID09IGl0 LT5wdF9sbnVtKQotCSAgLyogQXZvaWQgZGlzcGxheWluZyB0aGUgbGluZS1udW1iZXItY3VycmVu dC1saW5lIGZhY2Ugb24KLQkgICAgIGVtcHR5IGxpbmVzIGJleW9uZCBFT0IuICAqLwotCSAgJiYg aXQtPndoYXQgIT0gSVRfRU9CKQorICAgICAgaWYgKGJleW9uZF96dikKKwkvKiBBdm9pZCBkaXNw bGF5aW5nIGFueSBmYWNlIG90aGVyIHRoYW4gbGluZS1udW1iZXIgb24KKwkgICBlbXB0eSBsaW5l cyBiZXlvbmQgRU9CLiAgKi8KKwl0ZW1faXQuZmFjZV9pZCA9IGxudW1fZmFjZV9pZDsKKyAgICAg IGVsc2UgaWYgKGxudW1fZmFjZV9pZCAhPSBjdXJyZW50X2xudW1fZmFjZV9pZAorCSAgICAgICAm JiAoRVEgKFZkaXNwbGF5X2xpbmVfbnVtYmVycywgUXZpc3VhbCkKKwkJICAgPyB0aGlzX2xpbmUg PT0gMAorCQkgICA6IHRoaXNfbGluZSA9PSBpdC0+cHRfbG51bSkpCiAJdGVtX2l0LmZhY2VfaWQg PSBjdXJyZW50X2xudW1fZmFjZV9pZDsKICAgICAgIGVsc2UgaWYgKGRpc3BsYXlfbGluZV9udW1i ZXJzX21ham9yX3RpY2sgPiAwCiAJICAgICAgICYmIChsbnVtX3RvX2Rpc3BsYXkgJSBkaXNwbGF5 X2xpbmVfbnVtYmVyc19tYWpvcl90aWNrID09IDApKQo= --000000000000b52d9705945d1180--