From: drh <> Date: Thu, 2 Apr 2026 11:43:04 +0000 (+0000) Subject: Improvements to the syntax hints in the continuation prompt of the CLI X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=939930db1e6ae3d942571688867236d44b897980;p=thirdparty%2Fsqlite.git Improvements to the syntax hints in the continuation prompt of the CLI FossilOrigin-Name: 5c544f169680804c9652b8f9fc843a4bac052706be6bac205baf13a8c83fc840 --- diff --git a/manifest b/manifest index dee8022439..2344aa0734 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Always\suse\ssqlite3_malloc64()\sin\sextensions,\swhere\spossible. -D 2026-04-01T16:56:48.155 +C Improvements\sto\sthe\ssyntax\shints\sin\sthe\scontinuation\sprompt\sof\sthe\sCLI +D 2026-04-02T11:43:04.587 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 928ff887f2a7c64275182060d94d06fdddbe32226c569781cf7e7edc6f58d7fd F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c ffe199f025a0dd74670d2a77232bdea364a4d7b36f32c64a6572d39ba6a11576 -F src/shell.c.in 91ee40ec3f75192362cbaa0ad85316140b8dde00a184113d73a837fb6173dbcc +F src/shell.c.in fd7a7e7ddeaeec5ecda9ddcba5fa336bbc60f4024c54542dc1e85e00c1d67ef2 F src/sqlite.h.in 9cc1df08742989eb67ed2065f73a582195c48fee2eec5df9df122b33d4872885 F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479 F src/sqlite3ext.h 1b7a0ee438bb5c2896d0609c537e917d8057b3340f6ad004d2de44f03e3d3cca @@ -2197,8 +2197,11 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c -P 91ead3c62dd7b1db3fdfd318e3c35a42fb33e8fa2e347b682eecbff2f4e8677b -R 6ba98470db6b05f2faea33c928a02358 +P 6194f3b5314ef98b5d73060450de8e3497272494b47e6f96992453418894ded1 +R ad9575498347584523c956e285476300 +T *branch * cli-prompt +T *sym-cli-prompt * +T -sym-trunk * U drh -Z 794fc55ed4b29b8614c8a579512409b7 +Z 39d54ce0e0b0fb1346202fa0ae4a8eab # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.tags b/manifest.tags index bec971799f..dd3d6d7cb3 100644 --- a/manifest.tags +++ b/manifest.tags @@ -1,2 +1,2 @@ -branch trunk -tag trunk +branch cli-prompt +tag cli-prompt diff --git a/manifest.uuid b/manifest.uuid index 7761c3627b..0046bf2858 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -6194f3b5314ef98b5d73060450de8e3497272494b47e6f96992453418894ded1 +5c544f169680804c9652b8f9fc843a4bac052706be6bac205baf13a8c83fc840 diff --git a/src/shell.c.in b/src/shell.c.in index c931055ca2..3b170d7c66 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -811,14 +811,6 @@ static char *shell_strncpy(char *dest, const char *src, size_t n){ return dest; } -/* -** strcpy() workalike to squelch an unwarranted link-time warning -** from OpenBSD. -*/ -static void shell_strcpy(char *dest, const char *src){ - while( (*(dest++) = *(src++))!=0 ){} -} - /* ** Optionally disable dynamic continuation prompt. ** Unless disabled, the continuation prompt shows open SQL lexemes if any, @@ -876,31 +868,41 @@ static void setLexemeOpen(struct DynaPrompt *p, char *s, char c){ /* Upon demand, derive the continuation prompt to display. */ static char *dynamicContinuePrompt(void){ - if( continuePrompt[0]==0 - || (dynPrompt.zScannerAwaits==0 && dynPrompt.inParenLevel == 0) ){ + int k; /* Number of context hint characters */ + int nSpace; /* Spaces at the start of continuePrompt */ + int nDot; /* Dots following spaces */ + int nOrig; /* Total size of continuePrompt in bytes */ + int nCore; /* nOrig + 1 - nSpace */ + + nOrig = (int)strlen(continuePrompt); + if( nOrig<=1 + || (dynPrompt.zScannerAwaits==0 && dynPrompt.inParenLevel == 0) + ){ return continuePrompt; - }else{ - if( dynPrompt.zScannerAwaits ){ - size_t ncp = strlen(continuePrompt); - size_t ndp = strlen(dynPrompt.zScannerAwaits); - if( ndp > ncp-3 ) return continuePrompt; - shell_strcpy(dynPrompt.dynamicPrompt, dynPrompt.zScannerAwaits); - while( ndp<3 ) dynPrompt.dynamicPrompt[ndp++] = ' '; - shell_strncpy(dynPrompt.dynamicPrompt+3, continuePrompt+3, - PROMPT_LEN_MAX-4); - }else{ - if( dynPrompt.inParenLevel>9 ){ - shell_strncpy(dynPrompt.dynamicPrompt, "(..", 4); - }else if( dynPrompt.inParenLevel<0 ){ - shell_strncpy(dynPrompt.dynamicPrompt, ")x!", 4); - }else{ - shell_strncpy(dynPrompt.dynamicPrompt, "(x.", 4); - dynPrompt.dynamicPrompt[2] = (char)('0'+dynPrompt.inParenLevel); - } - shell_strncpy(dynPrompt.dynamicPrompt+3, continuePrompt+3, - PROMPT_LEN_MAX-4); + } + for(nSpace=0; continuePrompt[nSpace]==' '; nSpace++){} + for(nDot=0; continuePrompt[nSpace+nDot]=='.'; nDot++){} + nCore = nOrig + 1 - nSpace; + for(k=0; knSpace && nDot ){ + nSpace++; + nDot--; + } + memcpy(&dynPrompt.dynamicPrompt[k], + &continuePrompt[nSpace], + nCore); return dynPrompt.dynamicPrompt; } #endif /* !defined(SQLITE_OMIT_DYNAPROMPT) */ @@ -12125,8 +12127,10 @@ static QuickScanState quickscan(char *zLine, QuickScanState qss, } break; case '[': - cin = ']'; - deliberate_fall_through; /* FALLTHRU */ + cWait = ']'; + qss = QSS_HasDark | cWait; + CONTINUE_PROMPT_AWAITC(pst, cin); + goto TermScan; case '`': case '\'': case '"': cWait = cin; qss = QSS_HasDark | cWait;