From: drh <> Date: Thu, 9 Apr 2026 18:51:09 +0000 (+0000) Subject: Clean-ups in prompt generation in the CLI. X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3944e7067771b4f62f5f6e8e60b675d47ce20feb;p=thirdparty%2Fsqlite.git Clean-ups in prompt generation in the CLI. FossilOrigin-Name: e2c9d4c6b731ea9afbb9cb22f86a3db3670ca67968f15891dc46ae1fc9ba34dc --- diff --git a/manifest b/manifest index 14b4572856..96d0083569 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Merge\sthe\s3.53.0\srelease\schanges\sinto\sthe\scli-prompt\sbranch -D 2026-04-09T13:21:09.840 +C Clean-ups\sin\sprompt\sgeneration\sin\sthe\sCLI. +D 2026-04-09T18:51:09.198 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 a81e410148dbe766675291436cd0e8d5eed3d201c84325c650214f7005957825 +F src/shell.c.in 1dcccee78238e27dfa90df67e15fb194c087f552608248fd900b7a5ee730782a F src/sqlite.h.in e2915e4a86d5e0783afb5cb72411df38d987c7f3c5aa2d5441b8e74d30b649d8 F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479 F src/sqlite3ext.h 1b7a0ee438bb5c2896d0609c537e917d8057b3340f6ad004d2de44f03e3d3cca @@ -2197,8 +2197,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c -P 5c544f169680804c9652b8f9fc843a4bac052706be6bac205baf13a8c83fc840 4525003a53a7fc63ca75c59b22c79608659ca12f0131f52c18637f829977f20b -R 23f77bc70e281ba78bda728ec5fa2cf0 +P 8fd48b9fe47d47b3eca31d187f1d98174c257daea220ae7be18e4c82764d9d5c +R 7ffb65d89e42eb90bf23dccbc7a1df3f U drh -Z 6d085a4adab77824df1df33b9c2cf0d2 +Z ee302bdc160a37743cf8ada2bf8fc7e4 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 60a6fac2ae..8a875c645a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -8fd48b9fe47d47b3eca31d187f1d98174c257daea220ae7be18e4c82764d9d5c +e2c9d4c6b731ea9afbb9cb22f86a3db3670ca67968f15891dc46ae1fc9ba34dc diff --git a/src/shell.c.in b/src/shell.c.in index c1f1e648de..1df77e475a 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -828,16 +828,16 @@ static char *shell_strncpy(char *dest, const char *src, size_t n){ typedef void *t_NoDynaPrompt; # define SCAN_TRACKER_REFTYPE t_NoDynaPrompt #else -# define CONTINUATION_PROMPT dynamicContinuePrompt() -# define CONTINUE_PROMPT_RESET \ +# define CONTINUATION_PROMPT(X) dynamicContinuePrompt() +# define CONTINUE_PROMPT_RESET(X) \ do {setLexemeOpen(&dynPrompt,0,0); trackParenLevel(&dynPrompt,0);} while(0) -# define CONTINUE_PROMPT_AWAITS(p,s) \ +# define CONTINUE_PROMPT_AWAITS(X,p,s) \ if(p && stdin_is_interactive) setLexemeOpen(p, s, 0) -# define CONTINUE_PROMPT_AWAITC(p,c) \ +# define CONTINUE_PROMPT_AWAITC(X,p,c) \ if(p && stdin_is_interactive) setLexemeOpen(p, 0, c) -# define CONTINUE_PAREN_INCR(p,n) \ +# define CONTINUE_PAREN_INCR(X,p,n) \ if(p && stdin_is_interactive) (trackParenLevel(p,n)) -# define CONTINUE_PROMPT_PSTATE (&dynPrompt) +# define CONTINUE_PROMPT_PSTATE(X) (&dynPrompt) typedef struct DynaPrompt *t_DynaPromptRef; # define SCAN_TRACKER_REFTYPE t_DynaPromptRef @@ -1048,7 +1048,7 @@ static char *one_input_line(ShellState *p, char *zPrior, int isContinuation){ if( in!=0 ){ zResult = local_getline(zPrior, in); }else{ - zPrompt = isContinuation ? CONTINUATION_PROMPT : mainPrompt; + zPrompt = isContinuation ? CONTINUATION_PROMPT(p) : mainPrompt; #if SHELL_USE_LOCAL_GETLINE sputz(stdout, zPrompt); fflush(stdout); @@ -12082,8 +12082,10 @@ meta_command_exit: # define CHAR_BIT 8 #endif typedef enum { - QSS_HasDark = 1<zInFile = zSrc; saved_lineno = p->lineno; p->lineno = 0; - CONTINUE_PROMPT_RESET; + CONTINUE_PROMPT_RESET(p); while( errCnt==0 || !bail_on_error || (p->in==0 && stdin_is_interactive) ){ fflush(p->out); zLine = one_input_line(p, zLine, nSql>0); @@ -12455,11 +12461,11 @@ static int process_input(ShellState *p, const char *zSrc){ } p->lineno++; if( QSS_INPLAIN(qss) - && line_is_command_terminator(zLine) + && line_is_command_terminator(p, zLine) && line_is_complete(zSql, nSql) ){ memcpy(zLine,";",2); } - qss = quickscan(zLine, qss, CONTINUE_PROMPT_PSTATE); + qss = quickscan(p, zLine, qss, CONTINUE_PROMPT_PSTATE(p)); if( QSS_PLAINWHITE(qss) && nSql==0 ){ /* Just swallow single-line whitespace */ echo_group_input(p, zLine); @@ -12467,7 +12473,7 @@ static int process_input(ShellState *p, const char *zSrc){ continue; } if( zLine && (zLine[0]=='.' || zLine[0]=='#') && nSql==0 ){ - CONTINUE_PROMPT_RESET; + CONTINUE_PROMPT_RESET(p); echo_group_input(p, zLine); if( zLine[0]=='.' ){ rc = do_meta_command(zLine, p); @@ -12511,7 +12517,7 @@ static int process_input(ShellState *p, const char *zSrc){ }else if( nSql && QSS_SEMITERM(qss) && sqlite3_complete(zSql) ){ echo_group_input(p, zSql); errCnt += runOneSqlLine(p, zSql, p->zInFile, startline); - CONTINUE_PROMPT_RESET; + CONTINUE_PROMPT_RESET(p); nSql = 0; if( p->nPopOutput ){ output_reset(p); @@ -12535,7 +12541,7 @@ static int process_input(ShellState *p, const char *zSrc){ /* This may be incomplete. Let the SQL parser deal with that. */ echo_group_input(p, zSql); errCnt += runOneSqlLine(p, zSql, p->zInFile, startline); - CONTINUE_PROMPT_RESET; + CONTINUE_PROMPT_RESET(p); } free(zSql); free(zLine);