Latest post of the previous page:
Соответствующего API в фаре пока нету, а вот в "far /w" как оказалось вывод символов (табы, переводы строк) и номеров строк не работал.Code: Select all
Index: Visualizer.cpp
===================================================================
--- Visualizer.cpp (revision 309)
+++ Visualizer.cpp (working copy)
@@ -774,8 +774,16 @@
}
else
ecp.DestPos = 0;
- c.Y = Line;
- c.X = ecp.DestPos - LeftPos;
+ int nXShift = 0, nYShift = 0;
+#ifdef _UNICODE
+ SMALL_RECT rcFar = {0};
+ if (Info.AdvControl(Info.ModuleNumber, 32/*ACTL_GETFARRECT*/, &rcFar))
+ {
+ nXShift = rcFar.Left; nYShift = rcFar.Top;
+ }
+#endif
+ c.Y = Line + nYShift;
+ c.X = ecp.DestPos - LeftPos + nXShift;
if (ShowEOL==EOL_ON || ShowEOL==EOL_MARKWITHSYMBOL)
{
ec.Color = Opt.ColorOfEOLNormal;
@@ -849,6 +857,14 @@
if (ShowTabs!=TAB_WHOLE && ShowTabs!=TAB_TWOCOLORS)
ec.Color|=ECF_TAB1;
ec2.Color = Opt.ColorOfTabs2|ECF_TAB1;
+ int nXShift = 0, nYShift = 0;
+#ifdef _UNICODE
+ SMALL_RECT rcFar = {0};
+ if (Info.AdvControl(Info.ModuleNumber, 32/*ACTL_GETFARRECT*/, &rcFar))
+ {
+ nXShift = rcFar.Left; nYShift = rcFar.Top;
+ }
+#endif
for (int i=0; i<StringLength; i++)
{
if (StringText[i] == _T('\t'))
@@ -861,8 +877,8 @@
{
ecp.SrcPos = i;
Info.EditorControl(ECTL_REALTOTAB,(void *)&ecp);
- c.X = ecp.DestPos - LeftPos;
- c.Y = Line;
+ c.X = ecp.DestPos - LeftPos + nXShift;
+ c.Y = Line + nYShift;
WriteConsoleOutputCharacterW(GetStdHandle(STD_OUTPUT_HANDLE),&TabSymbol,1,c,&w);
}
}
@@ -1077,6 +1093,14 @@
else
*/
{
+ int nXShift = 0, nYShift = 0;
+#ifdef _UNICODE
+ SMALL_RECT rcFar = {0};
+ if (Info.AdvControl(Info.ModuleNumber, 32/*ACTL_GETFARRECT*/, &rcFar))
+ {
+ nXShift = rcFar.Left; nYShift = rcFar.Top;
+ }
+#endif
int limit = min(ei.TopScreenLine+ei.WindowSizeY,ei.TotalLines);
for (int i=ei.TopScreenLine; i<limit; i++)
{
@@ -1121,8 +1145,8 @@
TCHAR tmp[50];
FSF.sprintf(tmp,_T("%d"),ei.TotalLines);
FSF.sprintf(tmp,_T(":%*.*d"),lstrlen(tmp),lstrlen(tmp),i+1);
- c.X = ei.WindowSizeX-lstrlen(tmp);
- c.Y = i-ei.TopScreenLine+1;
+ c.X = ei.WindowSizeX-lstrlen(tmp)+nXShift;
+ c.Y = i-ei.TopScreenLine+1+nYShift;
WriteConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE),tmp,lstrlen(tmp),c,&w);
}