Skip to content

Commit

Permalink
EditWrap. v1.10
Browse files Browse the repository at this point in the history
+ Editor's scrollbar existence is checked with macro.
+ User may specify right border padding with 3-d arg, ex. 2 cells:
  Plugin.Call("580F7F4F-7E64-4367-84C1-5A6EB66DAB1F",1,2)
  • Loading branch information
Maximus5 committed Oct 10, 2014
1 parent 665e60a commit c6138bb
Show file tree
Hide file tree
Showing 6 changed files with 95 additions and 21 deletions.
8 changes: 6 additions & 2 deletions EditWrap/Release/EditWrap.lua
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@

-- Here is an example how to use macro to call plugin EditWrap

Macro
{
area="Editor";
key="ShiftF3";
description="Wrap/unwrap lines virtually";
action=function()
-- Toggle word wrap.
-- Command ID (2) is the same as hotkey in the plugin menu
-- Toggle (word) wrap with Plugin.Call
-- Arg#1: Plugin GUID
-- Arg#2: Command ID, `2` is the same as hotkey in the plugin menu
-- Arg#3: (Optional) cell count of the right border padding
Plugin.Call("580F7F4F-7E64-4367-84C1-5A6EB66DAB1F",2)
end
}
5 changes: 5 additions & 0 deletions EditWrap/Release/changelog
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
1.10
+ Editor's scrollbar existence is checked with macro.
+ User may specify right border padding with 3-d arg, ex. 2 cells:
Plugin.Call("580F7F4F-7E64-4367-84C1-5A6EB66DAB1F",1,2)

1.9
+ Hack for checking if the scroll bar is visible at the moment of wrap.

Expand Down
97 changes: 79 additions & 18 deletions EditWrap/src/EditWrap.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@

#undef FAR_UNICODE
#define FAR_UNICODE FARMANAGERVERSION_BUILD


// String GUID is used in code
const wchar_t guid_PluginGuidS[] = L"580F7F4F-7E64-4367-84C1-5A6EB66DAB1F";
GUID guid_PluginGuid = { /* 580f7f4f-7e64-4367-84c1-5a6eb66dab1f */
0x580f7f4f,
0x7e64,
Expand Down Expand Up @@ -581,6 +583,39 @@ void DoUnwrap(EditorInfo &ei)
#endif
}

#if !defined(FAR_UNICODE) || (FAR_UNICODE<3000)
bool CheckScrollEnabled(const SMALL_RECT& rcFar)
{
bool bScrollExists = false;

#if 0
GUID FarGuid = {};
PluginSettings fs(FarGuid, psi.SettingsControl);
bScrollExists = fs.Get(FSSF_EDITOR, L"ShowScrollBar", false);
if (bScrollExists)
return true;
#endif

// Нет способа проверить через API, включена ли прокрутка в конкретном экземпляре редактора
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO csbi = {};
GetConsoleScreenBufferInfo(hOut, &csbi);
CHAR_INFO ch[2]; COORD crSize = {1,2}; COORD crRead = {0,0};
int iTop = 1; // csbi.dwSize.Y - rcFar.Bottom;
SMALL_RECT srRegion = {rcFar.Right, rcFar.Top+iTop, rcFar.Right, rcFar.Top+1+iTop};
if (ReadConsoleOutput(hOut, ch, crSize, crRead, &srRegion))
{
if ((ch[0].Char.UnicodeChar == L'')
&& ((ch[1].Char.UnicodeChar == L'') || (ch[1].Char.UnicodeChar == L'')))
{
bScrollExists = true;
}
}

return bScrollExists;
}
#endif

HANDLE WINAPI OpenPluginW(
#if FAR_UNICODE>=2000
OpenInfo *Info
Expand All @@ -599,6 +634,7 @@ HANDLE WINAPI OpenPluginW(
INT_PTR cchMax = 0;
SMALL_RECT rcFar = {};
int iMaxWidth = 79;
int iRightPad = 0; bool bRightPadSpecified = false;
EditorUndoRedo ur = {FARSTRUCTSIZE(ur)};
FoldWorkMode WorkMode = fwm_None;
int *pWrappedEditor = NULL;
Expand All @@ -613,21 +649,13 @@ HANDLE WINAPI OpenPluginW(
if (psi.AdvControl(PluginNumber, ACTL_GETFARRECT, FADV1988 &rcFar))
{
iMaxWidth = rcFar.Right - rcFar.Left;
// Нет способа проверить через API, включена ли прокрутка
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO csbi = {};
GetConsoleScreenBufferInfo(hOut, &csbi);
CHAR_INFO ch[2]; COORD crSize = {1,2}; COORD crRead = {0,0};
int iTop = 1; // csbi.dwSize.Y - rcFar.Bottom;
SMALL_RECT srRegion = {rcFar.Right, rcFar.Top+iTop, rcFar.Right, rcFar.Top+1+iTop};
if (ReadConsoleOutput(hOut, ch, crSize, crRead, &srRegion))
#if !defined(FAR_UNICODE) || (FAR_UNICODE<3000)
// Будет ниже, через макрос
if (CheckScrollEnabled(rcFar))
{
if ((ch[0].Char.UnicodeChar == L'')
&& ((ch[1].Char.UnicodeChar == L'') || (ch[1].Char.UnicodeChar == L'')))
{
iMaxWidth--;
}
iRightPad = 1; bRightPadSpecified = true;
}
#endif
}
#endif

Expand Down Expand Up @@ -713,6 +741,16 @@ HANDLE WINAPI OpenPluginW(
else if (p->Values[0].Type == FMVT_DOUBLE)
fw = (FoldWorkMode)(int)p->Values[0].Double;
#endif
if (p->Count > 1)
{
if (p->Values[1].Type == FMVT_INTEGER)
iRightPad = (int)p->Values[1].Integer;
#if FAR_UNICODE>=3000
else if (p->Values[1].Type == FMVT_DOUBLE)
iRightPad = (int)p->Values[1].Double;
#endif
bRightPadSpecified = true;
}
}
Item = fw;
#endif
Expand All @@ -732,14 +770,37 @@ HANDLE WINAPI OpenPluginW(
goto wrap;
}

ur.Command = EUR_BEGIN;
EditCtrl(ECTL_UNDOREDO, &ur);

if (WorkMode == fwm_ToggleWrap)
WorkMode = gbLastWrap ? fwm_Unwrap : fwm_Wrap;
else if (WorkMode == fwm_ToggleWordWrap)
WorkMode = gbLastWrap ? fwm_Unwrap : fwm_WordWrap;


// Подготовка места под скролл и отступ
if (WorkMode == fwm_Wrap || WorkMode == fwm_WordWrap)
{
#if FAR_UNICODE>3000
if (!bRightPadSpecified)
{
// Нет способа проверить через API, включена ли прокрутка в конкретном экземпляре редактора
wchar_t szMacroRepost[100];
wsprintf(szMacroRepost, L"Plugin.Call(\"%s\",%i,Editor.Set(15,-1))", guid_PluginGuidS, (int)WorkMode);
MacroSendMacroText mcr = {sizeof(MacroSendMacroText)};
mcr.SequenceText = szMacroRepost;
psi.MacroControl(&guid_PluginGuid, MCTL_SENDSTRING, 0, &mcr);
goto wrap;
}
#endif

// Откусывание места по скролл или отступ от правого края
if ((iRightPad > 0) && (iRightPad <= 10) && (iRightPad < iMaxWidth))
{
iMaxWidth -= iRightPad;
}
}

ur.Command = EUR_BEGIN;
EditCtrl(ECTL_UNDOREDO, &ur);

if (WorkMode == fwm_Wrap || WorkMode == fwm_WordWrap)
{
DoWrap((WorkMode == fwm_WordWrap), ei, iMaxWidth);
Expand Down
1 change: 1 addition & 0 deletions EditWrap/src/EditWrap.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -354,6 +354,7 @@
<ClCompile Include="EditWrap.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\common\far3l\PluginSettings.hpp" />
<ClInclude Include="..\..\common\FarHelper.h" />
<ClInclude Include="..\..\common\plugin.h" />
<ClInclude Include="version.h" />
Expand Down
3 changes: 3 additions & 0 deletions EditWrap/src/EditWrap.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@
<Filter>FarApi</Filter>
</ClInclude>
<ClInclude Include="version.h" />
<ClInclude Include="..\..\common\far3l\PluginSettings.hpp">
<Filter>FarApi</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="resource.rc">
Expand Down
2 changes: 1 addition & 1 deletion EditWrap/src/version.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@

#define MVV_1 1
#define MVV_2 9
#define MVV_2 10
#define MVV_3 0
#define MVV_4 FARMANAGERVERSION_BUILD
#define MVV_4a ""
Expand Down

0 comments on commit c6138bb

Please sign in to comment.