-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
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
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.
#include <stdarg.h>
#ifndef _WIN32
# include <sys/time.h>
+# include <sys/ioctl.h>
#endif
#if !defined(_WIN32) && !defined(WIN32)
free(p->spec.zTableName);
free(p->spec.zNull);
memset(p, 0, sizeof(*p));
+ p->spec.iVersion = 1;
}
/*
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
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 ){
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);
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");