From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham autolearn_force=no version=3.4.2 Received: from primenet.com.au (ns1.primenet.com.au [203.24.36.2]) by inbox.vuxu.org (OpenSMTPD) with ESMTP id 98fff23c for ; Mon, 15 Jul 2019 17:21:05 +0000 (UTC) Received: (qmail 23364 invoked by alias); 15 Jul 2019 17:20:57 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: List-Unsubscribe: X-Seq: 44525 Received: (qmail 29820 invoked by uid 1010); 15 Jul 2019 17:20:57 -0000 X-Qmail-Scanner-Diagnostics: from mail-io1-f45.google.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.101.2/25510. spamassassin: 3.4.2. Clear:RC:0(209.85.166.45):SA:0(-2.0/5.0):. Processed in 3.491973 secs); 15 Jul 2019 17:20:57 -0000 X-Envelope-From: roman.perepelitsa@gmail.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: pass (ns1.primenet.com.au: SPF record at _netblocks.google.com designates 209.85.166.45 as permitted sender) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=FX0aDxDq8t6UoAqfr6Yvz8QWiJGsK77+Fxz/YN8qNfw=; b=IYSaeIRN06bz4z0u5mRNyhyu4NkR/iKCHN2d+WKDDu0oFBWLpXEqcQDWYbAwwB6F5C /oVn1Z2IUTh9eNJozKsHPOp1IDDOmZUCmvTTotIRBRVlQ/FSM/o2EwrQpepjwVQBefUB wzpUheQQaD4t/gg2FZxEn1+7YaKKSFIyW/yGUfMqyhPQ3pjXxCINQhcRSahQ2UFDXtVd Wl/uc5LExE6XAbo24yoXrCbFovio5s6dNk9olh1Bj3jLnYDWzJHlrIN0pimDoAJnGQ0s UqwxWD5O8/iPDcdEeXwjUYc/r6QpiRLgErIkM1c0+Oq/iWzC7K+gB/FWVj1DHYSivgp9 rhKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=FX0aDxDq8t6UoAqfr6Yvz8QWiJGsK77+Fxz/YN8qNfw=; b=aGso8fqRdFRvKGVwAnYZY3voCp77PmUhZ0iQBPVn1ZSB6f/L3R99D8yBvZgHzCj5MF IA3GvqdY9qjYabMLqWCugXZBGSsxt9Kn/dnxiBFExP+iECO5Z7fiwGuEfAKZqDixULQB /LKXMEK2Z7T3Wkd34HcdpWNbq/f5UTc2KzPheTcxO9APdo7N/yTXLchQ0FvyzjswY7L0 KxE7MyOVGblkLqZjH+c63ROw45X44habEfoeK5zBqxe5hzT4SIO1qV3br7WIU4vxh9A5 +HiSXmc+opyZkkMc459k71tJumTDd0nItPCiVtyFioHkBeFyxdLfj9VU7JBUZA1yr0qe jIiQ== X-Gm-Message-State: APjAAAXRzpptOgjB5LlYdmlsMbxqKluz2JNMa6XJVa0XrBcvLeyBo3ut JzfPsslFZibTIknQTFdSWOq6QuX3zIt2Z1TkhLzBu6aZyQc= X-Google-Smtp-Source: APXvYqwqwmseUPtueKJzwRy3aGHPaeR3NFrGbCcFrIZDAHI8Bx4xq6B1wTaYRJqQZiFsC6dRPrCoGEBl3Wt4nnvGyPk= X-Received: by 2002:a6b:7208:: with SMTP id n8mr15849040ioc.151.1563211219727; Mon, 15 Jul 2019 10:20:19 -0700 (PDT) MIME-Version: 1.0 From: Roman Perepelitsa Date: Mon, 15 Jul 2019 19:20:08 +0200 Message-ID: Subject: PATCH: draw prompt on the correct line after window change To: Zsh hackers list Content-Type: multipart/mixed; boundary="000000000000761e58058dbb795b" --000000000000761e58058dbb795b Content-Type: text/plain; charset="UTF-8" Many terminals reflow text when the window is resized. When the height of the prompt changes as a result of this reflowing, ZSH draws the updated prompt on the wrong line. This can lead to some parts of the prompt not being erased, or to the disappearance of lines prior to the prompt. There are many ways to reproduce this issue. Here are a couple. Both require terminals that reflow text when the window is resized. 1. Run `zsh -df`, hit a few times, then type `xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` (don't hit ). OR 2. Run `PROMPT="${(pl.$COLUMNS..-.)}%f"$'\n> ' zsh -df` and hit a few times. Now try resizing the terminal window back and forth causing lines to wrap and unwrap. Terminal content before the last prompt will be erased one line at a time. This patch cannot handle the case when the terminal window is being resized while the first prompt line is outside the terminal window. The content of the viewport will be correct but scrolling the terminal window up will reveal some mess up there. ZSH before this patch also fails in this case although it creates a different mess. The change is conservative. The new code triggers only on window resize and not, for example, on redisplay. This reduces the chance that it'll break something that isn't currently broken. I've tested this code only on GNOME Terminal. Before I go testing on a dozen different terminals I'd like to get some feedback. Anything I'm missing? Anything tricky to look out for? The patch is attached to the email. You can also see it in https://github.com/zsh-users/zsh/compare/master...romkatv:fix-winchanged. Roman. --000000000000761e58058dbb795b Content-Type: text/x-patch; charset="US-ASCII"; name="window-resize-fix.patch" Content-Disposition: attachment; filename="window-resize-fix.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jy4niis20 ZGlmZiAtLWdpdCBhL1NyYy9abGUvemxlX3JlZnJlc2guYyBiL1NyYy9abGUvemxlX3JlZnJlc2gu YwppbmRleCA4NWU1NWUwZDQuLjI0OWQ3NWQ3MSAxMDA2NDQKLS0tIGEvU3JjL1psZS96bGVfcmVm cmVzaC5jCisrKyBiL1NyYy9abGUvemxlX3JlZnJlc2guYwpAQCAtNjYwLDYgKzY2MCw3IEBAIHN0 YXRpYyBpbnQgbW9yZV9zdGFydCwJCS8qIG1vcmUgdGV4dCBiZWZvcmUgc3RhcnQgb2Ygc2NyZWVu PwkgICAgKi8KICAgICBscHJvbXB0dywgcnByb21wdHcsCQkvKiBwcm9tcHQgd2lkdGhzIG9uIHNj cmVlbiAgICAgICAgICAgICAgICAgICovCiAgICAgbHByb21wdHdvZiwJCQkvKiBsZWZ0IHByb21w dCB3aWR0aCB3aXRoIHJlYWwgZW5kIHBvc2l0aW9uICovCiAgICAgbHByb21wdGgsCQkJLyogbGlu ZXMgdGFrZW4gdXAgYnkgdGhlIHByb21wdAkJICAgICovCisgICAgY3Vyc29yc2F2ZWQsICAgICAg ICAgICAgICAgIC8qIHdoZXRoZXIgcHJvbXB0IHN0YXJ0IHBvc2l0aW9uIHdhcyBzYXZlZCAgKi8K ICAgICBycHJvbXB0aCwJCQkvKiByaWdodCBwcm9tcHQgaGVpZ2h0ICAgICAgICAgICAgICAgICAg ICAgICovCiAgICAgdmNzLCB2bG4sCQkJLyogdmlkZW8gY3Vyc29yIHBvc2l0aW9uIGNvbHVtbiAm IGxpbmUJICAgICovCiAgICAgdm1heGxuLAkJCS8qIHZpZGVvIG1heGltdW0gbnVtYmVyIG9mIGxp bmVzCSAgICAqLwpAQCAtOTk0LDYgKzk5NSw3IEBAIHpyZWZyZXNoKHZvaWQpCiAgICAgaW50IHJl bWV0YWZ5OwkJLyogZmxhZyB0aGF0IHpsZSBsaW5lIGlzIG1ldGFmaWVkCSAgICAgKi8KICAgICB6 YXR0ciB0eHRjaGFuZ2U7CQkvKiBhdHRyaWJ1dGVzIHNldCBhZnRlciBwcm9tcHRzICAgICAgICAg ICAgICAqLwogICAgIGludCBycHJvbXB0X29mZiA9IDE7CS8qIE9mZnNldCBvZiBycHJvbXB0IGZy b20gcmlnaHQgb2Ygc2NyZWVuICAgICovCisgICAgaW50IHNhdmVjdXJzb3JuZWVkZWQgPSAwOwkv KiBwcm9tcHQgc3RhcnQgcG9zaXRpb24gbmVlZHMgdG8gYmUgc2F2ZWQgICAqLwogICAgIHN0cnVj dCBycGFyYW1zIHJwbXM7CiAjaWZkZWYgTVVMVElCWVRFX1NVUFBPUlQKICAgICBpbnQgd2lkdGg7 CQkJLyogd2lkdGggb2Ygd2lkZSBjaGFyYWN0ZXIJCSAgICAgKi8KQEAgLTExMzMsNyArMTEzNSwx MyBAQCB6cmVmcmVzaCh2b2lkKQogCXpzZXR0ZXJtKCk7CiAjaWZkZWYgVElPQ0dXSU5TWgogCWlm ICh3aW5jaGFuZ2VkKSB7Ci0JICAgIG1vdmV0bygwLCAwKTsKKwkgICAgaWYgKGN1cnNvcnNhdmVk KSB7CisJCXRjb3V0KFRDUkVTVFJDVVJTT1IpOworCQl6cHV0YygmenJfY3IpOworCQl2bG4gPSB2 Y3MgPSAwOworCSAgICB9IGVsc2UgeworCQltb3ZldG8oMCwgMCk7CisJICAgIH0KIAkgICAgdDAg PSBvbG5jdDsJCS8qIHRoaXMgaXMgdG8gY2xlYXIgZXh0cmEgbGluZXMgZXZlbiB3aGVuICovCiAJ ICAgIHdpbmNoYW5nZWQgPSAwOwkvKiB0aGUgdGVybWluYWwgY2Fubm90IFRDQ0xFQVJFT0QJICAq LwogCSAgICBsaXN0c2hvd24gPSAwOwpAQCAtMTE2NCw3ICsxMTcyLDE2IEBAIHpyZWZyZXNoKHZv aWQpCiAgICAgICAgIGlmICh0ZXJtZmxhZ3MgJiBURVJNX1NIT1JUKQogICAgICAgICAgICAgdmNz ID0gMDsKIAllbHNlIGlmICghY2xlYXJmbGFnICYmIGxwcm9tcHRidWZbMF0pIHsKLSAgICAgICAg ICAgIHpwdXRzKGxwcm9tcHRidWYsIHNob3V0KTsKKwkgICAgY3Vyc29yc2F2ZWQgPSAwOworCSAg ICBpZiAodGNjYW4oVENTQVZFQ1VSU09SKSAmJiB0Y2NhbihUQ1JFU1RSQ1VSU09SKSkgeworCQlp ZiAoISh0ZXJtZmxhZ3MgJiBURVJNX1NIT1JUKSkgeworCQkgICAgc2F2ZWN1cnNvcm5lZWRlZCA9 IDE7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChscHJvbXB0aCA8PSByd2luaCkgeworCQkg ICAgdGNvdXQoVENTQVZFQ1VSU09SKTsKKwkJICAgIGN1cnNvcnNhdmVkID0gMTsKKyAgICAgICAg ICAgICAgICB9CisJICAgIH0KKwkgICAgenB1dHMobHByb21wdGJ1Ziwgc2hvdXQpOwogCSAgICBp ZiAobHByb21wdHdvZiA9PSB3aW53KQogCQl6cHV0cygiXG4iLCBzaG91dCk7CS8qIHdvcmtzIHdp dGggYm90aCBoYXNhbSBhbmQgIWhhc2FtICovCiAJfSBlbHNlIHsKQEAgLTE3MzcsNiArMTc1NCwx MiBAQCBpbmRpdmlkdWFsbHkgKi8KICAgICBjbGVhcmYgPSAwOwogICAgIG9wdXRfcnBtcHQgPSBw dXRfcnBtcHQ7CiAKKyAgICBpZiAoc2F2ZWN1cnNvcm5lZWRlZCAmJiBscHJvbXB0aCArIG5sbmN0 IDw9IHJ3aW5oKSB7CisJbW92ZXRvKDEgLSBscHJvbXB0aCwgMCk7CisJdGNvdXQoVENTQVZFQ1VS U09SKTsKKwljdXJzb3JzYXZlZCA9IDE7CisgICAgfQorCiAvKiBtb3ZlIHRvIHRoZSBuZXcgY3Vy c29yIHBvc2l0aW9uICovCiAgICAgbW92ZXRvKHJwbXMubnZsbiwgcnBtcy5udmNzKTsKIAo= --000000000000761e58058dbb795b--