[patch] added SCI_SETTABDRAWMODE(SCTD_CONTROLCHAR)

"'Robin Haberkorn' via scintilla-interest" <[email protected]> Mon, 09 Feb 2026 16:31:47 +0000
Newsgroups gmane.comp.lib.scintilla.devel
Message-ID <[email protected]>
--94e96dd60321c4735c84e832041230e1170c9b25a2e2205a93be93a35f79
Content-Type: multipart/mixed;
 boundary=4fa9a1f0b753251a47ed7c2cc6c678de84736e182237651b6625f36cac2e

--4fa9a1f0b753251a47ed7c2cc6c678de84736e182237651b6625f36cac2e
Content-Type: multipart/alternative;
 boundary=10a75ca88942446e36dbc896e9d45c0b1bc1813201d65c0265f12efddfb5

--10a75ca88942446e36dbc896e9d45c0b1bc1813201d65c0265f12efddfb5
Content-Disposition: inline
Content-Type: text/plain; charset="UTF-8"

Dear hackers,

here's yet another patch which adds SCI_SETTABDRAWMODE(SCTD_CONTROLCHAR).
In this tab draw mode, tabs are handled like other control characters
and are rendered by their chracter representation.

It's again motivated by SciTECO's command line and syntax highlighting
needs where ASCII 9 is an actual insertion command instead of an
identation no-op.
Perhaps this is potentially useful for other languages as well where
tabs have special meaning beyond identation.

(And yes, it would also be useful for the "Scintilla - the hex editor"
use case, but that's not really doable due to the slow layout algorithm
on excessively long lines.)

Best regards,
Robin

-- 
You received this message because you are subscribed to the Google Groups "scintilla-interest" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To view this discussion visit https://groups.google.com/d/msgid/scintilla-interest/DGAKPIZK38MU.1423UEGJ7AR5V%40googlemail.com.

--10a75ca88942446e36dbc896e9d45c0b1bc1813201d65c0265f12efddfb5--

--4fa9a1f0b753251a47ed7c2cc6c678de84736e182237651b6625f36cac2e
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename=0002-added-SCI_SETTABDRAWMODE-SCTD_CONTROLCHAR.patch
Content-Type: text/x-patch; charset=utf-8;
 name=0002-added-SCI_SETTABDRAWMODE-SCTD_CONTROLCHAR.patch

RnJvbSA1YzE5YTQwMDUyZTA2NzAzMGU3YjUzZjcwN2NlZmYwMmI0OTExMTE0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JpbiBIYWJlcmtvcm4gPHJoYWJlcmtvcm5AZm1zYncuZGU+
CkRhdGU6IFN1biwgMiBOb3YgMjAyNSAyMzo1MDowOCArMDEwMApTdWJqZWN0OiBbUEFUQ0ggMi8y
XSBhZGRlZCBTQ0lfU0VUVEFCRFJBV01PREUoU0NURF9DT05UUk9MQ0hBUikKCkFsbG93cyByZW5k
ZXJpbmcgdGFicyAoQVNDSUkgOSkgd2l0aCBjaGFyYWN0ZXIgcmVwcmVzZW50YXRpb25zIGxpa2Ug
YW55IG90aGVyCmNvbnRyb2wgY2hhcmFjdGVyLgotLS0KIGRvYy9TY2ludGlsbGFEb2MuaHRtbCAg
ICB8IDEwICsrKysrKysrKysKIGluY2x1ZGUvU2NpbnRpbGxhLmggICAgICB8ICAxICsKIGluY2x1
ZGUvU2NpbnRpbGxhLmlmYWNlICB8ICAyICsrCiBpbmNsdWRlL1NjaW50aWxsYVR5cGVzLmggfCAg
MSArCiBzcmMvRWRpdFZpZXcuY3h4ICAgICAgICAgfCAxMCArKysrKy0tLS0tCiA1IGZpbGVzIGNo
YW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9j
L1NjaW50aWxsYURvYy5odG1sIGIvZG9jL1NjaW50aWxsYURvYy5odG1sCmluZGV4IGRkZDJhNWE1
Yi4uNWNhN2UyYjU0IDEwMDY0NAotLS0gYS9kb2MvU2NpbnRpbGxhRG9jLmh0bWwKKysrIGIvZG9j
L1NjaW50aWxsYURvYy5odG1sCkBAIC0yODkwLDYgKzI4OTAsMTYgQEAgc3RydWN0IFNjaV9UZXh0
VG9GaW5kRnVsbCB7CiAKICAgICAgICAgICA8dGQ+QSBob3Jpem9udGFsIGxpbmUgc3RyZXRjaGlu
ZyB1bnRpbCB0aGUgdGFic3RvcC48L3RkPgogICAgICAgICA8L3RyPgorCisgICAgICAgIDx0cj4K
KyAgICAgICAgICA8dGggYWxpZ249ImxlZnQiPjxjb2RlPlNDVERfQ09OVFJPTENIQVI8L2NvZGU+
PC90aD4KKworICAgICAgICAgIDx0ZD4yPC90ZD4KKworICAgICAgICAgIDx0ZD5XaWxsIGJlIGRy
YXduIGFzIGEgY29udHJvbCBjb2RlIGFjY29yZGluZyB0byB0aGUgY29uZmlndXJlZAorICAgICAg
ICAgIDxhIGhyZWY9IiNDaGFyYWN0ZXJSZXByZXNlbnRhdGlvbnMiPmNoYXJhY3RlciByZXByZXNl
bnRhdGlvbjwvYT4KKyAgICAgICAgICB3aXRob3V0IGFueSBpbmRlbnRhdGlvbi48L3RkPgorICAg
ICAgICA8L3RyPgogICAgICAgPC90Ym9keT4KICAgICA8L3RhYmxlPgogCmRpZmYgLS1naXQgYS9p
bmNsdWRlL1NjaW50aWxsYS5oIGIvaW5jbHVkZS9TY2ludGlsbGEuaAppbmRleCBjZTYyYzQ2MjAu
LmIyZTQ5OGY2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9TY2ludGlsbGEuaAorKysgYi9pbmNsdWRl
L1NjaW50aWxsYS5oCkBAIC03OCw2ICs3OCw3IEBAIHR5cGVkZWYgc3B0cl90ICgqU2NpRm5EaXJl
Y3RTdGF0dXMpKHNwdHJfdCBwdHIsIHVuc2lnbmVkIGludCBpTWVzc2FnZSwgdXB0cl90IHdQCiAj
ZGVmaW5lIFNDSV9TRVRWSUVXV1MgMjAyMQogI2RlZmluZSBTQ1REX0xPTkdBUlJPVyAwCiAjZGVm
aW5lIFNDVERfU1RSSUtFT1VUIDEKKyNkZWZpbmUgU0NURF9DT05UUk9MQ0hBUiAyCiAjZGVmaW5l
IFNDSV9HRVRUQUJEUkFXTU9ERSAyNjk4CiAjZGVmaW5lIFNDSV9TRVRUQUJEUkFXTU9ERSAyNjk5
CiAjZGVmaW5lIFNDSV9QT1NJVElPTkZST01QT0lOVCAyMDIyCmRpZmYgLS1naXQgYS9pbmNsdWRl
L1NjaW50aWxsYS5pZmFjZSBiL2luY2x1ZGUvU2NpbnRpbGxhLmlmYWNlCmluZGV4IDViYjgwZmI0
NC4uNzRmODEzMzg2IDEwMDY0NAotLS0gYS9pbmNsdWRlL1NjaW50aWxsYS5pZmFjZQorKysgYi9p
bmNsdWRlL1NjaW50aWxsYS5pZmFjZQpAQCAtMTk2LDkgKzE5NiwxMSBAQCBzZXQgdm9pZCBTZXRW
aWV3V1M9MjAyMShXaGl0ZVNwYWNlIHZpZXdXUywpCiBlbnUgVGFiRHJhd01vZGU9U0NURF8KIHZh
bCBTQ1REX0xPTkdBUlJPVz0wCiB2YWwgU0NURF9TVFJJS0VPVVQ9MQordmFsIFNDVERfQ09OVFJP
TENIQVI9MgogCiBhbGkgU0NURF9MT05HQVJST1c9TE9OR19BUlJPVwogYWxpIFNDVERfU1RSSUtF
T1VUPVNUUklLRV9PVVQKK2FsaSBTQ1REX0NPTlRST0xDSEFSPUNPTlRST0xfQ0hBUgogCiAjIFJl
dHJpZXZlIHRoZSBjdXJyZW50IHRhYiBkcmF3IG1vZGUuCiAjIFJldHVybnMgb25lIG9mIFNDVERf
KiBjb25zdGFudHMuCmRpZmYgLS1naXQgYS9pbmNsdWRlL1NjaW50aWxsYVR5cGVzLmggYi9pbmNs
dWRlL1NjaW50aWxsYVR5cGVzLmgKaW5kZXggNDExODc2Zjk3Li42ZTU5ODNhYTIgMTAwNjQ0Ci0t
LSBhL2luY2x1ZGUvU2NpbnRpbGxhVHlwZXMuaAorKysgYi9pbmNsdWRlL1NjaW50aWxsYVR5cGVz
LmgKQEAgLTI2LDYgKzI2LDcgQEAgZW51bSBjbGFzcyBXaGl0ZVNwYWNlIHsKIGVudW0gY2xhc3Mg
VGFiRHJhd01vZGUgewogCUxvbmdBcnJvdyA9IDAsCiAJU3RyaWtlT3V0ID0gMSwKKwlDb250cm9s
Q2hhciA9IDIsCiB9OwogCiBlbnVtIGNsYXNzIEVuZE9mTGluZSB7CmRpZmYgLS1naXQgYS9zcmMv
RWRpdFZpZXcuY3h4IGIvc3JjL0VkaXRWaWV3LmN4eAppbmRleCAzYmYwYTFmYmIuLjBkZmMwY2M5
NyAxMDA2NDQKLS0tIGEvc3JjL0VkaXRWaWV3LmN4eAorKysgYi9zcmMvRWRpdFZpZXcuY3h4CkBA
IC0zNTMsNyArMzUzLDcgQEAgdm9pZCBMYXlvdXRTZWdtZW50cyhJUG9zaXRpb25DYWNoZSAqcENh
Y2hlLAogCQkJCVhZUE9TSVRJT04gcmVwcmVzZW50YXRpb25XaWR0aCA9IDAuMDsKIAkJCQkvLyBU
YWIgaXMgYSBzcGVjaWFsIGNhc2Ugb2YgcmVwcmVzZW50YXRpb24sIHRha2luZyBhIHZhcmlhYmxl
IGFtb3VudCBvZiBzcGFjZQogCQkJCS8vIHdoaWNoIHdpbGwgYmUgZmlsbGVkIGluIGxhdGVyLgot
CQkJCWlmIChsbC0+Y2hhcnNbdHMuc3RhcnRdICE9ICdcdCcpIHsKKwkJCQlpZiAobGwtPmNoYXJz
W3RzLnN0YXJ0XSAhPSAnXHQnIHx8IHZzdHlsZS50YWJEcmF3TW9kZSA9PSBUYWJEcmF3TW9kZTo6
Q29udHJvbENoYXIpIHsKIAkJCQkJcmVwcmVzZW50YXRpb25XaWR0aCA9IHZzdHlsZS5jb250cm9s
Q2hhcldpZHRoOwogCQkJCQlpZiAocmVwcmVzZW50YXRpb25XaWR0aCA8PSAwLjApIHsKIAkJCQkJ
CWFzc2VydCh0cy5yZXByZXNlbnRhdGlvbi0+c3RyaW5nUmVwLmxlbmd0aCgpIDw9IFJlcHJlc2Vu
dGF0aW9uOjptYXhMZW5ndGgpOwpAQCAtNTI2LDcgKzUyNiw3IEBAIHZvaWQgRWRpdFZpZXc6Okxh
eW91dExpbmUoY29uc3QgRWRpdE1vZGVsICZtb2RlbCwgU3VyZmFjZSAqc3VyZmFjZSwgY29uc3Qg
Vmlld1N0CiAJCWZvciAoY29uc3QgVGV4dFNlZ21lbnQgJnRzIDogc2VnbWVudHMpIHsKIAkJCWlm
ICh2c3R5bGUuc3R5bGVzW2xsLT5zdHlsZXNbdHMuc3RhcnRdXS52aXNpYmxlICYmCiAJCQkJdHMu
cmVwcmVzZW50YXRpb24gJiYKLQkJCQkobGwtPmNoYXJzW3RzLnN0YXJ0XSA9PSAnXHQnKSkgewor
CQkJCWxsLT5jaGFyc1t0cy5zdGFydF0gPT0gJ1x0JyAmJiB2c3R5bGUudGFiRHJhd01vZGUgIT0g
VGFiRHJhd01vZGU6OkNvbnRyb2xDaGFyKSB7CiAJCQkJLy8gU2ltcGxlIHZpc2libGUgdGFiLCBn
byB0byBuZXh0IHRhYiBzdG9wCiAJCQkJY29uc3QgWFlQT1NJVElPTiBzdGFydFRhYiA9IGxsLT5w
b3NpdGlvbnNbdHMuc3RhcnRdOwogCQkJCWNvbnN0IFhZUE9TSVRJT04gbmV4dFRhYiA9IE5leHRU
YWJzdG9wUG9zKGxpbmUsIHN0YXJ0VGFiLCB2c3R5bGUudGFiV2lkdGgpOwpAQCAtNjE0LDcgKzYx
NCw3IEBAIHZvaWQgRWRpdFZpZXc6OlVwZGF0ZUJpZGlEYXRhKGNvbnN0IEVkaXRNb2RlbCAmbW9k
ZWwsIGNvbnN0IFZpZXdTdHlsZSAmdnN0eWxlLCBMCiAJCQljb25zdCBSZXByZXNlbnRhdGlvbiAq
cmVwciA9IG1vZGVsLnJlcHJzLT5SZXByZXNlbnRhdGlvbkZyb21DaGFyYWN0ZXIoc3RkOjpzdHJp
bmdfdmlldygmbGwtPmNoYXJzW2NoYXJzSW5MaW5lXSwgY2hhcldpZHRoKSk7CiAKIAkJCWxsLT5i
aWRpRGF0YS0+d2lkdGhSZXByc1tjaGFyc0luTGluZV0gPSAwLjBmOwotCQkJaWYgKHJlcHIgJiYg
bGwtPmNoYXJzW2NoYXJzSW5MaW5lXSAhPSAnXHQnKSB7CisJCQlpZiAocmVwciAmJiAobGwtPmNo
YXJzW2NoYXJzSW5MaW5lXSAhPSAnXHQnIHx8IHZzdHlsZS50YWJEcmF3TW9kZSA9PSBUYWJEcmF3
TW9kZTo6Q29udHJvbENoYXIpKSB7CiAJCQkJbGwtPmJpZGlEYXRhLT53aWR0aFJlcHJzW2NoYXJz
SW5MaW5lXSA9IGxsLT5wb3NpdGlvbnNbY2hhcnNJbkxpbmUgKyBjaGFyV2lkdGhdIC0gbGwtPnBv
c2l0aW9uc1tjaGFyc0luTGluZV07CiAJCQl9CiAJCQlpZiAoY2hhcldpZHRoID4gMSkgewpAQCAt
MTY5MCw3ICsxNjkwLDcgQEAgdm9pZCBEcmF3QmFja2dyb3VuZChTdXJmYWNlICpzdXJmYWNlLCBj
b25zdCBFZGl0TW9kZWwgJm1vZGVsLCBjb25zdCBWaWV3U3R5bGUgJnYKIAkJCUNvbG91clJHQkEg
dGV4dEJhY2sgPSBUZXh0QmFja2dyb3VuZChtb2RlbCwgdnNEcmF3LCBsbCwgYmFja2dyb3VuZCwg
aW5TZWxlY3Rpb24sCiAJCQkJaW5Ib3RzcG90LCBsbC0+c3R5bGVzW2ldLCBpKTsKIAkJCWlmICh0
cy5yZXByZXNlbnRhdGlvbikgewotCQkJCWlmIChsbC0+Y2hhcnNbaV0gPT0gJ1x0JykgeworCQkJ
CWlmIChsbC0+Y2hhcnNbaV0gPT0gJ1x0JyAmJiB2c0RyYXcudGFiRHJhd01vZGUgIT0gVGFiRHJh
d01vZGU6OkNvbnRyb2xDaGFyKSB7CiAJCQkJCS8vIFRhYiBkaXNwbGF5CiAJCQkJCWlmIChkcmF3
V2hpdGVzcGFjZUJhY2tncm91bmQgJiYgdnNEcmF3LldoaXRlU3BhY2VWaXNpYmxlKGluSW5kZW50
YXRpb24pKSB7CiAJCQkJCQl0ZXh0QmFjayA9IHZzRHJhdy5FbGVtZW50Q29sb3VyRm9yY2VkKEVs
ZW1lbnQ6OldoaXRlU3BhY2VCYWNrKS5PcGFxdWUoKTsKQEAgLTIxOTcsNyArMjE5Nyw3IEBAIHZv
aWQgRWRpdFZpZXc6OkRyYXdGb3JlZ3JvdW5kKFN1cmZhY2UgKnN1cmZhY2UsIGNvbnN0IEVkaXRN
b2RlbCAmbW9kZWwsIGNvbnN0IFZpCiAJCQl9CiAJCQlDb2xvdXJSR0JBIHRleHRCYWNrID0gVGV4
dEJhY2tncm91bmQobW9kZWwsIHZzRHJhdywgbGwsIGJhY2tncm91bmQsIGluU2VsZWN0aW9uLCBp
bkhvdHNwb3QsIHN0eWxlTWFpbiwgaSk7CiAJCQlpZiAodHMucmVwcmVzZW50YXRpb24pIHsKLQkJ
CQlpZiAobGwtPmNoYXJzW2ldID09ICdcdCcpIHsKKwkJCQlpZiAobGwtPmNoYXJzW2ldID09ICdc
dCcgJiYgdnNEcmF3LnRhYkRyYXdNb2RlICE9IFRhYkRyYXdNb2RlOjpDb250cm9sQ2hhcikgewog
CQkJCQkvLyBUYWIgZGlzcGxheQogCQkJCQlpZiAocGhhc2VzRHJhdyA9PSBQaGFzZXNEcmF3OjpP
bmUpIHsKIAkJCQkJCWlmIChkcmF3V2hpdGVzcGFjZUJhY2tncm91bmQgJiYgdnNEcmF3LldoaXRl
U3BhY2VWaXNpYmxlKGluSW5kZW50YXRpb24pKQotLSAKMi41Mi4wCgo=
--4fa9a1f0b753251a47ed7c2cc6c678de84736e182237651b6625f36cac2e--

--94e96dd60321c4735c84e832041230e1170c9b25a2e2205a93be93a35f79
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQEzBAABCAAdFiEEB/6AD3js1eGB4raKarMDYY4q6voFAmmKC/QACgkQarMDYY4q
6vo2MQf/U+jZvYmjyAmWoc//yOf+xCMczV7tKKwhZ+CFr8tUoRVo46gvKmTFSXGf
SQZGE16mHyBDZi0vh90ZPR4FTWL84XBf4Z4/esInZZSu6z+D/tsNTJcDXRMTn5xq
lERQcQGDgQKJmfkdHX0oO1RDyOSu/tNdSBZ054UG2X1/Hxk3duZ+Z58Nna+GjiOo
BDx+38HRwhlWpL3Orzqc175gsWfqKyPecYRApNoVimtIAJ5fCfOuKX6W/iiI6x/v
mhNMIKyqApdwRbr0hgnlaxLwKVu/yRByTrwaFzkzTsZldT18v7WjmOPHdk1GcBQ+
GQ/FIhGLjiWfr19wCZtMF8f8WQX7ug==
=sE4R
-----END PGP SIGNATURE-----

--94e96dd60321c4735c84e832041230e1170c9b25a2e2205a93be93a35f79--