bashsimplecurses
bashsimplecurses copied to clipboard
100% width doesn't work on MacOS, always 80 chars wide
Intro
Hi there! I'm really pleased with bashsimplecurses - thank you!! I've just launched a tool that uses it and we're seeing that MacOS users do not get a full width window when running a script that declares window "100% wide window" "red" "100%"
Instead an 80 char wide window is shown. Since our script displays information that some times is wider than 80 chars, it'd be great if bashsimplecurses supported full width on MacOS.
Steps to reproduce
- Be on MacOS - tested on 10.13.6 and 11.x & in
ohmyzsh
,bash
andsh
- Clone this repo (as of 054a04a)
-
cd
into./bashsimplecurses/examples
- Create a file called
macos.sh
with this contents:#!/bin/bash . `dirname $0`/../simple_curses.sh main (){ window "100% wide window" "red" "100%" append "`date`" endwin } main_loop -t 0.5 "$@"
- Run
chmod +x macos.sh&& ./macos.sh
Expected: Window is shown full width of current terminal Actual: Window is always shown at 80 chars wide, no bigger, no smaller
Related - setting it to 50%
in the script seems to show it at 40 chars wide ( i guess half of the 80 chars it thinks the terminal always is)
Screenshots
Here's a local shell on Ubuntu 20.04/ohmyzsh on the top and and SSH shell on macos/ohmyzsh on the bottom. The first shows a screen ~107 chars wide, the second shows one ~40 chars wide:
Here's the same script running on in a local shell on MacOS:
Doing a little poking around, the problem seems to stem from the tput cols
call in the window()
function. When I call it on the bare command line on MacOS I get the accurate answer. When it's called in the subshell in window()
, it ALWAYS returns 80.
I wonder if it has to do with an old version of ncurses? On my Ubuntu 18 box i get ncurses 6.1.20180127
but on the two MacOS boxes I just tested on (one High Sierra 10.13.6 and one Big Sur 11.4) they both have the exact same version: ncurses 5.7.20081102
ah - confirmed! I used Homebrew and to upgrade ncurses
on my MacOS box:
/usr/local/Cellar/ncurses/6.2/bin/tput -V
ncurses 6.2.20200212
I then forced Bash simple curses to use this version and the problem went away. I'll do a little more testing to see if there's a way to be backwards compatible with out any regressions.
So, my work around is to:
- install Homebew
- install
ncurses
:brew install ncurses
- add a symlink for
tput
where it should be (caution, version specific!):ln -s /usr/local/Cellar/ncurses/6.2/bin/tput /usr/local/bin/
- inside my
main()
function, redefine thePATH
so that it prioritizes the Homebrew version over the native one:main () # check for brew installed tput for MacOS, backwards compatible with linux/WSL2 PATH=/usr/local/opt/ncurses/bin/:$PATH ...
While a hassle for MacOS users, it's an OK enough work around for now.
Leaving this ticket open for maintainers to do with as they please!
Right, we should add a requirement check in the script.
So, my work around is to:
- install Homebew
- install
ncurses
:brew install ncurses
- add a symlink for
tput
where it should be (caution, version specific!):ln -s /usr/local/Cellar/ncurses/6.2/bin/tput /usr/local/bin/
- inside my
main()
function, redefine thePATH
so that it prioritizes the Homebrew version over the native one:main () # check for brew installed tput for MacOS, backwards compatible with linux/WSL2 PATH=/usr/local/opt/ncurses/bin/:$PATH ...
While a hassle for MacOS users, it's an OK enough work around for now.
Leaving this ticket open for maintainers to do with as they please!
I tried but it does not work for me.
I tried this:
# error
$ cd /usr/local/Cellar
no such file or directory: /usr/local/Cellar
# but instead
$ brew --prefix ncurses
/opt/homebrew/opt/ncurses
# I feel this should work
$ sudo ln -s /opt/homebrew/opt/ncurses/bin/tput /usr/local/bin/
```
But same result :-/
@pascalandy - sorry my work around didn't work for you! That said, if you did indeed get it installed with brew
at the path you specified, then step 4 should still work. Maybe edit your main()
function to redefine PATH
like so?
PATH=/opt/homebrew/opt/ncurses/bin/:$PATH