-C New\smakefile\starget\s"xdevtest"\sworks\slike\s"releasetest"\sexcept\sthat\sit\nomits\sthe\s"verify-source"\sdependency\sso\sthat\sit\scan\sbe\srun\swith\suncommitted\nchanges\sin\sthe\ssource\stree.
-D 2025-05-31T18:26:37.671
+C Enhance\s"box"\sand\s"column"\smode\sformatting\sin\sthe\sCLI\sto\sbetter\sdeal\swith\ndouble-wide\scharacters.
+D 2025-05-31T20:51:42.476
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F src/resolve.c d40fe18d7c2fd0339f5846ffcf7d6809866e380acdf14c76fb2af87e9fe13f64
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
F src/select.c 9929e56e78f958657bfbb8234916473468243f90af359cc646d97c3ee809c79c
-F src/shell.c.in ba53a52dafb167ac6320703da741386c34fbcabe8c078a188bb9f89808e3ef8f
+F src/shell.c.in 1da613953db4c8d50e3a4a66fa7d69b4c95edb3628941d732637d3c35ea0dce6
F src/sqlite.h.in 22882ddd3a70751aa8864c81993ee4562ed54c2c508b6270f75e223ffee38e1b
F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
F src/sqlite3ext.h 0bfd049bb2088cc44c2ad54f2079d1c6e43091a4e1ce8868779b75f6c1484f1e
F test/dbfuzz001.test 6c9a4622029d69dc38926f115864b055cb2f39badd25ec22cbfb130c8ba8e9c3
F test/dbfuzz2-seed1.db e6225c6f3d7b63f9c5b6867146a5f329d997ab105bee64644dc2b3a2f2aebaee
F test/dbfuzz2.c 4b3c12de4d98b1b2d908ab03d217d4619e47c8b23d5e67f8a6f2b1bdee7cae23
+F test/dblwidth-a.sql eb4141518610e52f931a55a984310075e98dc31eee5a28ae806b1e35377be85a
F test/dbpage.test 63fab1eb026bada121107e53436fa749bbf83281dc9dea17af422f7a5c0f289f
F test/dbpagefault.test ea39de2ca86041a9c6df1135645180a76d0a8da93ac159e2fafe38e39636530b
F test/dbstatus.test 4a4221a883025ffd39696b3d1b3910b928fb097d77e671351acb35f3aed42759
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 1ad0169b022b280bcaaf94a7fa231591be96b514230ab5c98fbf15cd7df842dd
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 8d393ca07fe09f48d77adb517e2e4baaa58a9251422de62a0504999205d3ea1d
-R 9b94db4e5d892a93cf1670d233c18f80
+P 1afb1ac3e9f0a122f1374799c09b60a0dd5443434d4567d94385096ada91bf12
+R 241d4fe28f71a66e02a0774aedd929d3
U drh
-Z 1c2aee3d74e96a6684f9847b4822e599
+Z 36464e257b6f6b054003c79b6284e296
# Remove this line to create a well-formed Fossil manifest.
/*
** Return the length of a string in characters. Multibyte UTF8 characters
-** count as a single character.
+** count as a single character for single-width characters, or as two
+** characters for double-width characters.
*/
static int strlenChar(const char *z){
int n = 0;
while( *z ){
- if( (0xc0&*(z++))!=0x80 ) n++;
+ if( (0x80&z[0])==0 ){
+ n++;
+ z++;
+ }else{
+ int u = 0;
+ int len = decodeUtf8((const u8*)z, &u);
+ z += len;
+ n += cli_wcwidth(u);
+ }
}
return n;
}
--- /dev/null
+/*
+** Run this script using "sqlite3" to confirm that the command-line
+** shell properly handles the output of double-width characters.
+**
+** https://sqlite.org/forum/forumpost/008ac80276
+*/
+.mode box
+CREATE TABLE data(word TEXT, description TEXT);
+INSERT INTO data VALUES('〈οὐκέτι〉','Greek without dblwidth <...>');
+.print .mode box
+SELECT * FROM data;
+.mode table
+.print .mode table
+SELECT * FROM data;
+.mode qbox
+.print .mode qbox
+SELECT * FROM data;
+.mode column
+.print .mode column
+SELECT * FROM data;