Get --screenwidth auto working on linux and windows.
FossilOrigin-Name: 48a91f2067005f7f186484354be07384dd76bcfff8427c17579f6e32201e3742
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
C Implement\sthe\s--titles\soption\sto\sthe\s.mode\scommand.
|
||||
D 2025-11-12T20:50:08.766
|
||||
C Get\s--screenwidth\sauto\sworking\son\slinux\sand\swindows.
|
||||
D 2025-11-13T11:52:34.054
|
||||
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
|
||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||
@@ -735,7 +735,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
|
||||
F src/resolve.c 5616fbcf3b833c7c705b24371828215ad0925d0c0073216c4f153348d5753f0a
|
||||
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
|
||||
F src/select.c ba9cd07ffa3277883c1986085f6ddc4320f4d35d5f212ab58df79a7ecc1a576a
|
||||
F src/shell.c.in 38d89f01de5bc91c7434f78fcf4b94d3e66e277ceffb142dc5b5d23711f629f7
|
||||
F src/shell.c.in a583ee672e169092f74dd5b5a0162c048b2399fa668831b6fc14cd56b4a1d28d
|
||||
F src/sqlite.h.in 7403a952a8f1239de7525b73c4e3a0f9540ec0607ed24fec887f5832642d44b8
|
||||
F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
|
||||
F src/sqlite3ext.h 7f236ca1b175ffe03316d974ef57df79b3938466c28d2f95caef5e08c57f3a52
|
||||
@@ -2175,8 +2175,8 @@ F tool/version-info.c 33d0390ef484b3b1cb685d59362be891ea162123cea181cb8e6d2cf6dd
|
||||
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
|
||||
F tool/warnings.sh d924598cf2f55a4ecbc2aeb055c10bd5f48114793e7ba25f9585435da29e7e98
|
||||
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
||||
P 2b22321df9c2f51e4b0ab9e4da859c58bb3f194ad69c22b9d32b35831740f9dd
|
||||
R c068c55668f3795ef991708cb18d63fc
|
||||
P cc25643ebc516db0799406797e9961a2af574875ae9639178b722dbc280c96ad
|
||||
R 31066a85466510dad4651e3d0c66a67b
|
||||
U drh
|
||||
Z 7b64d6843e01c08dbcd5d8f2aef211b0
|
||||
Z 45c94c43aea0848aa5e0a4f6660d06e7
|
||||
# Remove this line to create a well-formed Fossil manifest.
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
cc25643ebc516db0799406797e9961a2af574875ae9639178b722dbc280c96ad
|
||||
48a91f2067005f7f186484354be07384dd76bcfff8427c17579f6e32201e3742
|
||||
|
||||
+59
-20
@@ -108,6 +108,7 @@ typedef unsigned char u8;
|
||||
#include <stdarg.h>
|
||||
#ifndef _WIN32
|
||||
# include <sys/time.h>
|
||||
# include <sys/ioctl.h>
|
||||
#endif
|
||||
|
||||
#if !defined(_WIN32) && !defined(WIN32)
|
||||
@@ -1502,6 +1503,7 @@ static void modeFree(Mode *p){
|
||||
free(p->spec.zTableName);
|
||||
free(p->spec.zNull);
|
||||
memset(p, 0, sizeof(*p));
|
||||
p->spec.iVersion = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2030,6 +2032,37 @@ static void interrupt_handler(int NotUsed){
|
||||
if( globalDb ) sqlite3_interrupt(globalDb);
|
||||
}
|
||||
|
||||
/* Try to determine the screen width. Use the default if unable.
|
||||
*/
|
||||
int shellScreenWidth(int dfltWidth){
|
||||
#if defined(TIOCGSIZE)
|
||||
struct ttysize ts;
|
||||
if( ioctl(STDIN_FILENO, TIOCGSIZE, &ts)>=0
|
||||
|| ioctl(STDOUT_FILENO, TIOCGSIZE, &ts)>=0
|
||||
|| ioctl(STDERR_FILENO, TIOCGSIZE, &ts)>=0
|
||||
){
|
||||
return ts.ts_cols;
|
||||
}
|
||||
#elif defined(TIOCGWINSZ)
|
||||
struct winsize ws;
|
||||
if( ioctl(STDIN_FILENO, TIOCGWINSZ, &ws)>=0
|
||||
|| ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws)>=0
|
||||
|| ioctl(STDERR_FILENO, TIOCGWINSZ, &ws)>=0
|
||||
){
|
||||
return ws.ws_col;
|
||||
}
|
||||
#elif defined(_WIN32)
|
||||
CONSOLE_SCREEN_BUFFER_INFO csbi;
|
||||
if( GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi)
|
||||
|| GetConsoleScreenBufferInfo(GetStdHandle(STD_ERROR_HANDLE), &csbi)
|
||||
|| GetConsoleScreenBufferInfo(GetStdHandle(STD_INPUT_HANDLE), &csbi)
|
||||
){
|
||||
return csbi.srWindow.Right - csbi.srWindow.Left + 1;
|
||||
}
|
||||
#endif
|
||||
return dfltWidth;
|
||||
}
|
||||
|
||||
#if (defined(_WIN32) || defined(WIN32)) && !defined(_WIN32_WCE)
|
||||
/*
|
||||
** This routine runs for console events (e.g. Ctrl-C) on Win32
|
||||
@@ -3072,28 +3105,14 @@ static int shell_exec(
|
||||
memcpy(&spec, &pArg->mode.spec, sizeof(spec));
|
||||
spec.xWrite = shellWriteQR;
|
||||
spec.pWriteArg = (void*)pArg;
|
||||
switch( pArg->mode.eMode ){
|
||||
case MODE_Insert: {
|
||||
if( ShellHasFlag(pArg, SHFLG_PreserveRowid) ){
|
||||
spec.bTitles = QRF_SW_On;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MODE_Tcl: {
|
||||
spec.eText = QRF_TEXT_Tcl;
|
||||
spec.eTitle = QRF_TEXT_Tcl;
|
||||
spec.bTextNull = QRF_Yes;
|
||||
break;
|
||||
}
|
||||
case MODE_Box:
|
||||
case MODE_Table:
|
||||
case MODE_Markdown: {
|
||||
spec.bTitles = QRF_Yes;
|
||||
break;
|
||||
}
|
||||
if( pArg->mode.eMode==MODE_Insert && ShellHasFlag(pArg, SHFLG_PreserveRowid) ){
|
||||
spec.bTitles = QRF_SW_On;
|
||||
}
|
||||
assert( pArg->mode.eMode>=0 && pArg->mode.eMode<ArraySize(aModeInfo) );
|
||||
eStyle = aModeInfo[pArg->mode.eMode].eStyle;
|
||||
if( pArg->mode.bAutoScreenWidth ){
|
||||
spec.nScreenWidth = shellScreenWidth(80);
|
||||
}
|
||||
|
||||
#if !defined(SQLITE_OMIT_VIRTUALTABLE) && !defined(SQLITE_OMIT_AUTHORIZATION)
|
||||
if( pArg->expert.pExpert ){
|
||||
@@ -7421,6 +7440,26 @@ static int dotCmdMode(ShellState *p){
|
||||
int eMode = p->mode.eMode;
|
||||
modeFree(&p->mode);
|
||||
modeChange(&p->mode, eMode);
|
||||
}else if( optionMatch(z,"screenwidth") ){
|
||||
if( i+1>=nArg ){
|
||||
dotCmdError(p, i, "missing argument", 0);
|
||||
return 1;
|
||||
}
|
||||
k = pickStr(azArg[i+1],0,"off","auto","");
|
||||
if( k==0 ){
|
||||
p->mode.bAutoScreenWidth = 0;
|
||||
p->mode.spec.nScreenWidth = 0;
|
||||
}else if( k==1 ){
|
||||
p->mode.bAutoScreenWidth = 1;
|
||||
}else{
|
||||
i64 w = integerValue(azArg[i+1]);
|
||||
p->mode.bAutoScreenWidth = 0;
|
||||
if( w<0 ) w = 0;
|
||||
if( w>QRF_MAX_WIDTH ) w = QRF_MAX_WIDTH;
|
||||
p->mode.spec.nScreenWidth = w;
|
||||
}
|
||||
i++;
|
||||
chng = 1;
|
||||
}else if( optionMatch(z,"textjsonb") ){
|
||||
if( i+1>=nArg ){
|
||||
dotCmdError(p, i, "missing argument", 0);
|
||||
@@ -7560,7 +7599,7 @@ static int dotCmdMode(ShellState *p){
|
||||
append_c_string(pDesc, p->mode.spec.zRowSep);
|
||||
}
|
||||
if( bAll
|
||||
|| (pI->eCx && (p->mode.spec.nLineLimit>0 || p->mode.bAutoScreenWidth))
|
||||
|| (pI->eCx && (p->mode.spec.nScreenWidth>0 || p->mode.bAutoScreenWidth))
|
||||
){
|
||||
if( p->mode.bAutoScreenWidth ){
|
||||
sqlite3_str_appendall(pDesc, " --screenwidth auto");
|
||||
|
||||
Reference in New Issue
Block a user