From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22003 invoked by alias); 25 Jan 2011 13:45:58 -0000 Mailing-List: contact zsh-users-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Users List List-Post: List-Help: X-Seq: 15729 Received: (qmail 22908 invoked from network); 25 Jan 2011 13:45:46 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_LOW autolearn=ham version=3.3.1 Received-SPF: pass (ns1.primenet.com.au: SPF record at _spf.google.com designates 209.85.216.178 as permitted sender) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; bh=p90XKHHFoz3MKnuipnki/Z0N0px2DrU+bAj5zP8CVKs=; b=GcvJzLkd/1bqTX9cOPHKWEUu5ktQ+nb1yKGEPmOitf2k+9A42obPKLkcYjqZ/ZqA5p 5hq+aVdeMxRVe8Lty6zb5CE3pIFvjwtdRp9FtL0iqITEcx/kt8/2ghWgKsi7+5hRbcH+ iQ8iN2mT4Eef9b+WwxKaQCiOMIMh7GbP5pYQg= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; b=n8/Wvsj6UTPv65cmUsp+lau4Lh/UStZEZvW3znGLj/44qrslKGxjk9DC9nebJLi2s7 NmepDMZBFX842Qmjobli6Z0b2NMC8x3I5M6Secu0ZcDYwBqZC0+VG8OQUKmWrNaP/0jm zBpK2HqtjKiMOaCcMvhUUDAGhQSlswb8YfKn0= MIME-Version: 1.0 Sender: nikolai.weibull@gmail.com In-Reply-To: <101210235748.ZM11748@torch.brasslantern.com> References: <101210235748.ZM11748@torch.brasslantern.com> Date: Tue, 25 Jan 2011 14:23:47 +0100 X-Google-Sender-Auth: AM3Lb2qGdmgsdnt9hCBBO2qrxPI Message-ID: Subject: Re: zle reset-prompt with prompt that is COLUMNS wide eats line above prompt's first line From: Nikolai Weibull To: Bart Schaefer Cc: Zsh Users Content-Type: multipart/mixed; boundary=0015175cd02a590a4a049aaba097 --0015175cd02a590a4a049aaba097 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On Sat, Dec 11, 2010 at 08:57, Bart Schaefer wr= ote: > On Dec 10, 11:40am, Nikolai Weibull wrote: > } > } Running zle reset-prompt with a prompt that is COLUMNS wide eats the > } line above prompt's first line. =C2=A0Here's a set-up to try it with: > } > } PS1=3D${(l:COLUMNS:)}$'\n' > } bindkey '^^' reset-prompt > > The problem here isn't the width of the prompt, it's the newline. > (OK, it's sort of the combination of the two, but more the latter.) > > } Each time you press CTRL-^ you'll be eating the line above the first > } line of the prompt. =C2=A0If you change PS1 to ${(l:COLUMNS-1)}$'\n' th= is > } doesn't happen. > } > } Would it be possible to have prompt that is COLUMNS wide and have this > } not happen? > > This is a problem with terminals and terminfo or termcap descriptions. > Some terminals silently discard a newline when one is output at the > right margin, others don't, and still others discard it only when it > is output at the right margin of the very last line of the screen. > Some terminals cause the cursor to wrap onto the next line right > away when the right margin is reached, others leave the cursor on > top of the last character that was output until at least one more > character appears. > > Terminal description databases aren't very good at differentiating > these cases. =C2=A0ZLE decides in this case that the terminal both wraps > the line and does not discard the newline, so it believes it needs > to move up one line before redrawing the prompt. =C2=A0Your terminal > wraps at the margin but does discard the newline, so ZLE's internal > idea of what the screen looks like does not match reality. > > You can get around this by replacing $'\n' with $'%1(l.\n.)' which > means to emit the newline only if ZLE believes that at least one > character has been output since the last (implicit) newline. =C2=A0If > the line is exactly $COLUMNS wide, ZLE will think that the terminal > has wrapped and that zero characters have been output since, so it > won't fool itself by emitting a newline that the terminal discards. > > On a different terminal, though, you might need to go back to $'\n' > unconditionally. It seems that there is some other complication. I=E2=80=99ve attached my prompt definition, if anyone wants to take a look. I=E2=80=99m currently running through screen inside PuTTY and iTerm, in which this trick didn=E2=80=99t work. --0015175cd02a590a4a049aaba097 Content-Type: application/octet-stream; name=prompt_now_setup Content-Disposition: attachment; filename=prompt_now_setup Content-Transfer-Encoding: base64 X-Attachment-Id: f_gjcu5lhe0 cHJvbXB0X25vd19oZWxwICgpIHsKICBlbXVsYXRlIC1MIHpzaAoKICBjYXQgPDxFT0gKTm90aGlu ZyB0byBzZWUgaGVyZS4KRU9ICn0KCmludGVnZXIgUFNDT0w9LTEKUFNaRVJPPSclKFtCU1ViZmtz dV18WzAtOV0jW0ZLXSh7W159XSMjfXwpKScKCnByb21wdF9ub3dfcHJlY21kICgpIHsKICBlbXVs YXRlIC1MIHpzaAogIHNldG9wdCBleHRlbmRlZGdsb2IKCiAgcHN2YXJbOF09JD8KICAoKCBwc3Zh cls4XSApKSB8fCBwc3Zhcls4XT0KCiAgKCggJHsrZnVuY3Rpb25zW3Zjc19pbmZvXX0gKSkgJiYg dmNzX2luZm8KCiAgcHJvbXB0X25vd19hZGp1c3Rfd2lkdGggfHwgcmV0dXJuCgogIGxvY2FsIC1B IGNzCiAgcHJvbXB0X25vd19jaGFycwoKICBsb2NhbCBob3N0PQogIFtbIC1uICRTU0hfQ09OTkVD VElPTiBdXSAmJiBob3N0PScgJW0nCiAgbG9jYWwgLWFoIHBzMQogIHBzMT0oCiAgICAnJTI0OUsn CiAgICAiJSRDT0xVTU5TPCRjc1vigKZdPCIKICAgICclficKICAgICclOChWLiBbJTlGJTh2JWZd LiknCiAgICBcJHZjc19pbmZvX21zZ18wXwogICAgJyU5dicKICAgICRob3N0CiAgICAnJTw8Jwog ICAgJyVrJwogICAgJCdcbicKICApCiAgUFMxPSR7KGo6OilwczF9CgogIGxvY2FsIGxpc3Rwcm9t cHQ9J01vcmUlUiBwYWdlOiAlcCcKICBpbnRlZ2VyIGZpbGwKICAoKCBmaWxsID0gQ09MVU1OUyAt ICR7IyR7JHtsaXN0cHJvbXB0Ly9cJVJ9Ly9cJXAvVG9wfX0gLSAyICkpCiAgenN0eWxlICc6Y29t cGxldGlvbjoqOmRlZmF1bHQnIGxpc3QtcHJvbXB0IFwKICAgICIlS3t3aGl0ZX0ke2xpc3Rwcm9t cHQlXCVSKn0keyhsOmZpbGw6KX0ke2xpc3Rwcm9tcHQjIyolUn0layIKfQoKcHJvbXB0X25vd193 aW5jaCAoKSB7CiAgcHJvbXB0X25vd19hZGp1c3Rfd2lkdGggJiYgemxlICYmIHpsZSByZXNldC1w cm9tcHQKfQoKcHJvbXB0X25vd19hZGp1c3Rfd2lkdGggKCkgewogIGVtdWxhdGUgLUwgenNoCiAg c2V0b3B0IGV4dGVuZGVkZ2xvYgoKICBsb2NhbCBzYXZlZF92Y3NfaW5mb19tc2dfMF89JHZjc19p bmZvX21zZ18wXwogIGludGVnZXIgd2lkdGgKCiAgcHN2YXJbOV09IiIKICB2Y3NfaW5mb19tc2df MF89JHt2Y3NfaW5mb19tc2dfMF8vLyR+UFNaRVJPfQogICgoIHdpZHRoID0gQ09MVU1OUyAtICR7 IyR7KGYpJHsoJSUpJHtQUzEvLyR+UFNaRVJPfX19WzFdfSApKQogIHZjc19pbmZvX21zZ18wXz0k c2F2ZWRfdmNzX2luZm9fbXNnXzBfCiAgcHN2YXJbOV09JHsobDp3aWR0aDopfQoKICAoKCBDT0xV TU5TID09IFBTQ09MICkpICYmIHJldHVybiAxCiAgKCggUFNDT0wgPSBDT0xVTU5TICkpCn0KCnBy b21wdF9ub3dfY2hhcnMgKCkgewogIGNhc2UgJFRFUk0gaW4KICAgICh4dGVybS0yNTZjb2xvcnxz Y3JlZW4tMjU2Y29sb3IpIGNzPSgn4oCmJyAn4oCmJyAn4oCcJyAn4oCcJyAn4oCdJyAn4oCdJykg OzsKICAgICgqKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzPSgn4oCmJyAnLi4uJyAn 4oCcJyAnIicgJ+KAnScgJyInKSA7OwogIGVzYWMKfQoKcHJvbXB0X25vd19zZXR1cCAoKSB7CiAg ZW11bGF0ZSAtTCB6c2gKICBzZXRvcHQgZXh0ZW5kZWRnbG9iIG5vbG9jYWx0cmFwcwogIHByb21w dF9vcHRzPShjciBwZXJjZW50IHN1YnN0KQoKICB6c3R5bGUgJzp2Y3NfaW5mbzoqJyBzdGFnZWRz dHIgJyVGe2dyZWVufSsnCiAgenN0eWxlICc6dmNzX2luZm86KicgdW5zdGFnZWRzdHIgJyVGe3Jl ZH0hJwogIHpzdHlsZSAnOnZjc19pbmZvOionIGZvcm1hdHMgJyBbJWIlYyV1JWZdJwogIHpzdHls ZSAnOnZjc19pbmZvOionIGFjdGlvbmZvcm1hdHMgJyBbJWE6ICViJWMldSVmXScKCiAgcHJvbXB0 X25vd190ZWFyZG93bgogIHByb21wdF9ub3dfcHJlY21kCgogIGxvY2FsIC1BIGNzCiAgcHJvbXB0 X25vd19jaGFycwoKICBQUzI9JyR7KGx8JCgoMiAqICR7KHcpIyR7KCUlKTotJV99fSkpfCl9Jwog IFBTMz0nWW91ciBzZWxlY3Rpb246ICcKICBQUzQ9JyVGe3llbGxvd30rJUZ7Ymx1ZX0lTiVmOiVp OiAnCgogIFNQUk9NUFQ9InpzaDogY29ycmVjdCAkY3Nb4oCcXSU5RiVSJWYkY3Nb4oCdXSB0byAk Y3Nb4oCcXSUxMEYlciVmJGNzW+KAnV0/ICIKCiAgVElNRUZNVD0lSiQnXG4nJ3JlYWw6ICUqRSB1 c2VyOiAlKlUgc3lzdGVtOiAlKlMgKCVQKScKCiAgV0FUQ0hGTVQ9JyUoYS5sb2dvbi5sb2dvZmYp OiAlbiAoJU0pIHR0eTogJWwgdGltZTogJVQgKCVEKScKCiAgKCggJCNtYWlscGF0aCA+IDAgKSkg JiYgbWFpbHBhdGg9KCR7Xm1haWxwYXRoJVw/Kn0nP25ldzogJF8nKQoKICB6c3R5bGUgJzpjb21w bGV0aW9uOio6ZGVzY3JpcHRpb25zJyBmb3JtYXQgJyVLe3doaXRlfSVkJWsnCiAgenN0eWxlICc6 Y29tcGxldGlvbjoqOm1lc3NhZ2VzJyBmb3JtYXQgJyVGe2dyZWVufSVkJWYnCiAgenN0eWxlICc6 Y29tcGxldGlvbjoqOndhcm5pbmdzJyBmb3JtYXQgJyVGe3JlZH1ubyBtYXRjaGVzIGZvciAlZCVm JwogIHpzdHlsZSAnOmNvbXBsZXRpb246Kjpjb3JyZWN0aW9ucycgZm9ybWF0ICclS3t3aGl0ZX0l ZCAoZXJyb3JzOiAlOUYlZSVmKSVrJwogIHpzdHlsZSAnOmNvbXBsZXRpb246KjpvcHRpb25zJyBh dXRvLWRlc2NyaXB0aW9uICJzcGVjaWZ5ICRjc1vigJxdJWQkY3Nb4oCdXSIKCiAgYWRkLXpzaC1o b29rIHByZWNtZCBwcm9tcHRfbm93X3ByZWNtZAogIGFkZC16c2gtaG9vayBjaHB3ZCBwcm9tcHRf bm93X2FkanVzdF93aWR0aAogIGZ1bmN0aW9uc1tUUkFQV0lOQ0hdPSIke2Z1bmN0aW9uc1tUUkFQ V0lOQ0hdLy8kJ1xuJyAgICBwcm9tcHRfbm93X3dpbmNofQogICAgcHJvbXB0X25vd193aW5jaCIK fQoKcHJvbXB0X25vd190ZWFyZG93biAoKSB7CiAgZW11bGF0ZSAtTCB6c2gKCiAgYWRkLXpzaC1o b29rIC1EIHByZWNtZCBwcm9tcHRfbm93X3ByZWNtZAogIGZ1bmN0aW9uc1tUUkFQV0lOQ0hdPSIk e2Z1bmN0aW9uc1tUUkFQV0lOQ0hdLy8kJ1xuJyAgICBwcm9tcHRfbm93X3dpbmNofSIKfQoKcHJv bXB0X25vd19wcmV2aWV3ICgpIHsKICBsb2NhbCAraCBQUzE9JyUjICcKICBwcm9tcHRfcHJldmll d190aGVtZSBub3cgIiRAIgp9CgpbWyAtbyBrc2hhdXRvbG9hZCBdXSB8fCBwcm9tcHRfbm93X3Nl dHVwICIkQCIK --0015175cd02a590a4a049aaba097--