Clara
Clara copied to clipboard
Respect COLUMNS environment variable
Determining the real terminal width is hard to do portably, but it's pretty simple to see if the COLUMNS env var is defined and use it instead of the hard coded 80 if it is.
I could make a PR if this is considered to be a good idea.
Sounds like a useful tweak - yes please :-)
:+1:
As COLUMNS isn't always an environment variable (for example on mksh, you can access it as $COLUMNS, but it isn't stored in the environment); it would be best to fall back on more native approaches.
order of precedence: COLUMNS, native, 80
for example if a native solution isn't detected.
For linux (tested):
#include <sys/ioctl.h>
#include <unistd.h>
// ...
winsize w;
ioctl(STDOUT_FILENO, TIOCGWINSZ, &w);
CLARA_CONFIG_CONSOLE_WIDTH = w.ws.col;
For windows (untested)
#include <windows.h>
// ...
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
CLARA_CONFIG_CONSOLE_WIDTH = csbi.srWindow.Right - csbi.srWindow.Left + 1;
of course this requires CLARA_CONFIG_CONSOLE_WIDTH to not be a #define but a variable. This code will likely have to be wrapped up in some function. Hell; it would be best if a variable wasn't used at all, and just a function was used, as terminal size can change. Though it's unlikely to effect the output of help, as it is usually only done once.
Might wish to fold this into #14