Visible tab stops (tab/space character screen representation)
Brought to you by:
tringali
I have created a patch for Nedit 5.7 that supports user change of the screen representation of the tab (\t) and space ( ) white space characters to arbitrary ANSI characters (for example char 187 » and char 183 · respectively).
See https://sourceforge.net/p/nedit/feature-requests/81 for development rationale.
Limitations:
Usage:
.Xresources with visibleTabStopsAndSpacesEnabled:
nedit.visibleTabStopsTab: True
nedit.visibleTabStopsTabReplaceFirstCharacterOnly: True
nedit.visibleTabStopsTabReplacementChar: 187
nedit.visibleTabStopsSpace: True
nedit.visibleTabStopsSpaceReplacementChar: 183
.Xresources with visibleTabStopsEnabled:
nedit.visibleTabStopsTab: True
nedit.visibleTabStopsTabReplaceFirstCharacterOnly: True
nedit.visibleTabStopsTabReplacementChar: 183
nedit.visibleTabStopsSpace: False
nedit.visibleTabStopsSpaceReplacementChar: 183
Here is a summary of the changes;
preferences.c;
static struct prefData {
...
~l327:
int visibleTabStopsTab;
int visibleTabStopsTabReplaceFirstCharacterOnly;
int visibleTabStopsTabReplacementChar;
int visibleTabStopsSpace;
int visibleTabStopsSpaceReplacementChar;
static PrefDescripRec PrefDescrip[] = {
...
~l1081:
{"visibleTabStopsTab", "visibleTabStopsTab", PREF_BOOLEAN, "False",
&PrefData.visibleTabStopsTab, NULL, False},
{"visibleTabStopsTabReplaceFirstCharacterOnly", "visibleTabStopsTabReplaceFirstCharacterOnly", PREF_BOOLEAN, "True",
&PrefData.visibleTabStopsTabReplaceFirstCharacterOnly, NULL, False},
{"visibleTabStopsTabReplacementChar", "visibleTabStopsTabReplacementChar", PREF_INT, "187",
&PrefData.visibleTabStopsTabReplacementChar, NULL, False},
{"visibleTabStopsSpace", "visibleTabStopsSpace", PREF_BOOLEAN, "False",
&PrefData.visibleTabStopsSpace, NULL, False},
{"visibleTabStopsSpaceReplacementChar", "MaxPrevOpenFiles", PREF_INT, "183",
&PrefData.visibleTabStopsSpaceReplacementChar, NULL, False},
void RestoreNEditPrefs(XrmDatabase prefDB, XrmDatabase appDB)
...
~l1352:
BufSetVisibleSpaceCharacters(PrefData.visibleTabStopsTab, PrefData.visibleTabStopsTabReplaceFirstCharacterOnly, PrefData.visibleTabStopsTabReplacementChar, PrefData.visibleTabStopsSpace, PrefData.visibleTabStopsSpaceReplacementChar);
textBuf.h;
~l171:
void BufSetVisibleSpaceCharacters(int visibleTabStopsTabNew, int visibleTabStopsTabReplaceFirstCharacterOnlyNew, int visibleTabStopsTabReplacementCharNew, int visibleTabStopsSpaceNew, int visibleTabStopsSpaceReplacementCharNew);
textBuf.c;
~l50:
int visibleTabStopsTab = 0;
int visibleTabStopsTabReplaceFirstCharacterOnly = 0;
char visibleTabStopsTabReplacementChar = '»'; /*(char)187*/
int visibleTabStopsSpace = 0;
char visibleTabStopsSpaceReplacementChar = '·'; /*(char)183*/
~l1050:
int BufExpandCharacter(char c, int indent, char *outStr,
int tabDist, char nullSubsChar)
{
int i, nSpaces;
if(visibleTabStopsSpace) {
/* show space characters */
if (c == ' ') {
*outStr = visibleTabStopsSpaceReplacementChar;
return 1;
}
}
/* Convert tabs to spaces */
if (c == '\t') {
nSpaces = tabDist - (indent % tabDist);
for (i=0; i<nSpaces; i++) {
if(visibleTabStopsTab) {
/* show tab characters */
if(visibleTabStopsTabReplaceFirstCharacterOnly) {
if(i == 0) {
outStr[i] = visibleTabStopsTabReplacementChar;
}
else {
outStr[i] = ' ';
}
}
else {
outStr[i] = visibleTabStopsTabReplacementChar;
}
}
else {
outStr[i] = ' ';
}
}
return nSpaces;
}
~l2613:
void BufSetVisibleSpaceCharacters(int visibleTabStopsTabNew, int visibleTabStopsTabReplaceFirstCharacterOnlyNew, int visibleTabStopsTabReplacementCharNew, int visibleTabStopsSpaceNew, int visibleTabStopsSpaceReplacementCharNew)
{
visibleTabStopsTab = visibleTabStopsTabNew;
visibleTabStopsTabReplaceFirstCharacterOnly = visibleTabStopsTabReplaceFirstCharacterOnlyNew;
visibleTabStopsTabReplacementChar = visibleTabStopsTabReplacementCharNew;
visibleTabStopsSpace = visibleTabStopsSpaceNew;
visibleTabStopsSpaceReplacementChar = visibleTabStopsSpaceReplacementCharNew;
}
Patch against 5.7 Master 2020-11-05.