From: "Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Johannes Schindelin <johannes.schindelin@gmx.de>,
Johannes Schindelin <johannes.schindelin@gmx.de>
Subject: [PATCH v2] pager: do not unnecessarily set COLUMNS on Windows
Date: Wed, 16 Jun 2021 12:38:11 +0000 [thread overview]
Message-ID: <pull.982.v2.git.1623847092299.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.982.git.1623701952823.gitgitgadget@gmail.com>
From: Johannes Schindelin <johannes.schindelin@gmx.de>
Since https://github.com/gwsw/less/commit/bb0ee4e76c2, `less` prefers
the `COLUMNS` variable over asking ncurses itself.
This is typically not a problem because we ask `TIOCGWINSZ` in Git, to
determine the correct value for `COLUMNS`, and then set that environment
variable.
However, on Windows it _is_ a problem. The reason is that Git for
Windows uses a version of `less` that relies on the MSYS2 runtime to
interact with the pseudo terminal (typically inside a MinTTY window,
which is also aware of the MSYS2 runtime). Both MinTTY and `less.exe`
interact with that pseudo terminal via `ioctl()` calls (which the MSYS2
runtime emulates even if there is no such thing on Windows).
But `git.exe` itself is _not_ aware of the MSYS2 runtime, or for that
matter of that pseudo terminal, and has no way to call `ioctl()` or
`TIOCGWINSZ`.
Therefore, `git.exe` will fall back to hard-coding 80 columns, no matter
what the actual terminal size is.
But `less.exe` is totally able to interact with the MSYS2 runtime and
would not actually require Git's help (which actually makes things
worse here). So let's not override `COLUMNS` on Windows.
Note: we do this _only_ on Windows, and _only_ if `TIOCGWINSZ` is not
defined, to reduce any potential undesired fall-out from this patch.
This fixes https://github.com/git-for-windows/git/issues/3235
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
pager: do not unnecessarily set COLUMNS on Windows
A recent upgrade of the "less" package in Git for Windows causes
problems. Here is a work-around.
Changes since v1:
* The commit message was reworded to clarify the underlying issue
better.
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-982%2Fdscho%2Ffix-duplicated-lines-when-moving-in-pager-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-982/dscho/fix-duplicated-lines-when-moving-in-pager-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/982
Range-diff vs v1:
1: 22d3a9a2c9a2 ! 1: 82099e53bbc9 pager: do not unnecessarily set COLUMNS on Windows
@@ Commit message
the `COLUMNS` variable over asking ncurses itself.
This is typically not a problem because we ask `TIOCGWINSZ` in Git, to
- determine the correct value for `COLUMNS`.
+ determine the correct value for `COLUMNS`, and then set that environment
+ variable.
- However, on Windows it _is_ a problem because Git for Windows' Bash (and
- `less.exe`) uses the MSYS2 runtime while `git.exe` does _not_, and
- therefore we never get the correct value in Git, but `less.exe` has no
- problem obtaining it.
+ However, on Windows it _is_ a problem. The reason is that Git for
+ Windows uses a version of `less` that relies on the MSYS2 runtime to
+ interact with the pseudo terminal (typically inside a MinTTY window,
+ which is also aware of the MSYS2 runtime). Both MinTTY and `less.exe`
+ interact with that pseudo terminal via `ioctl()` calls (which the MSYS2
+ runtime emulates even if there is no such thing on Windows).
- Let's not override `COLUMNS` in that case.
+ But `git.exe` itself is _not_ aware of the MSYS2 runtime, or for that
+ matter of that pseudo terminal, and has no way to call `ioctl()` or
+ `TIOCGWINSZ`.
+
+ Therefore, `git.exe` will fall back to hard-coding 80 columns, no matter
+ what the actual terminal size is.
+
+ But `less.exe` is totally able to interact with the MSYS2 runtime and
+ would not actually require Git's help (which actually makes things
+ worse here). So let's not override `COLUMNS` on Windows.
+
+ Note: we do this _only_ on Windows, and _only_ if `TIOCGWINSZ` is not
+ defined, to reduce any potential undesired fall-out from this patch.
This fixes https://github.com/git-for-windows/git/issues/3235
| 2 ++
1 file changed, 2 insertions(+)
--git a/pager.c b/pager.c
index 3d37dd7adaa2..b84668eddca2 100644
--- a/pager.c
+++ b/pager.c
@@ -111,11 +111,13 @@ void setup_pager(void)
* to get the terminal size. Let's grab it now, and then set $COLUMNS
* to communicate it to any sub-processes.
*/
+#if !defined(WIN32) || defined(TIOCGWINSZ)
{
char buf[64];
xsnprintf(buf, sizeof(buf), "%d", term_columns());
setenv("COLUMNS", buf, 0);
}
+#endif
setenv("GIT_PAGER_IN_USE", "true", 1);
base-commit: ebf3c04b262aa27fbb97f8a0156c2347fecafafb
--
gitgitgadget
next prev parent reply other threads:[~2021-06-16 12:38 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-14 20:19 [PATCH] pager: do not unnecessarily set COLUMNS on Windows Johannes Schindelin via GitGitGadget
2021-06-15 3:02 ` Junio C Hamano
2021-06-16 12:38 ` Johannes Schindelin via GitGitGadget [this message]
2021-06-17 2:20 ` [PATCH v2] " Junio C Hamano
2021-06-17 11:43 ` Johannes Schindelin
2021-06-29 0:12 ` Junio C Hamano
2021-06-21 16:57 ` [PATCH v3] pager: avoid setting COLUMNS when we're guessing its value Johannes Schindelin via GitGitGadget
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.982.v2.git.1623847092299.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=git@vger.kernel.org \
--cc=johannes.schindelin@gmx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).