View Issue Details

IDProjectCategoryView StatusLast Update
0002059WishesMacropublic2018-01-27 13:17
ReporterDAtaMan Assigned Tovskirdin  
PrioritynormalSeverityfeatureReproducibilityN/A
Status closedResolutionno change required 
Product Version3.0 
Fixed in Version3.0 
Summary0002059: Макрофункции для обращения к строкам редактора по индексу
DescriptionВ патче реализованы 2 макрокоманды:
S=Editor.GetString([N]) - получение строки с индексом N
N=Editor.SetString(S[,N]) - запись строки S с индексом N
N == 0 в случае ошибки (например, редактор залочен)

Если индекс строки == 0, то функции работают с текущей строкой.
TagsNo tags attached.
Build0

Relationships

related to 0003577 closedzg Far Manager Неправильная работа UNDO после Editor.InsStr 

Activities

DAtaMan

2012-03-31 13:14

reporter  

macro.patch (42,059 bytes)   
Index: C++/FAR/unicode_far/syslog.cpp
===================================================================
--- C++/FAR/unicode_far/syslog.cpp	(revision 7805)
+++ C++/FAR/unicode_far/syslog.cpp	(working copy)
@@ -1207,8 +1207,10 @@
 		DEF_MCODE_(F_CHR),                      // S=chr(N)
 		DEF_MCODE_(F_DATE),                     // S=date([S])
 		DEF_MCODE_(F_DLG_GETVALUE),             // V=Dlg.GetValue([Pos[,InfoID]])
+		DEF_MCODE_(F_EDITOR_GET_STRING),        // S=Editor.GetString([N])
 		DEF_MCODE_(F_EDITOR_SEL),               // V=Editor.Sel(Action[,Opt])
 		DEF_MCODE_(F_EDITOR_SET),               // N=Editor.Set(N,Var)
+		DEF_MCODE_(F_EDITOR_SET_STRING),        // N=Editor.SetString(S[,N)]
 		DEF_MCODE_(F_EDITOR_UNDO),              // V=Editor.Undo(N)
 		DEF_MCODE_(F_EDITOR_POS),               // N=Editor.Pos(Op,What[,Where])
 		DEF_MCODE_(F_ENVIRON),                  // S=Env(S[,Mode[,Value]])
Index: C++/FAR/unicode_far/macro.cpp
===================================================================
--- C++/FAR/unicode_far/macro.cpp	(revision 7805)
+++ C++/FAR/unicode_far/macro.cpp	(working copy)
@@ -336,9 +336,11 @@
 static bool dateFunc(const TMacroFunction*);
 static bool dlggetvalueFunc(const TMacroFunction*);
 static bool dlgsetfocusFunc(const TMacroFunction*);
+static bool editorgetstringFunc(const TMacroFunction*);
 static bool editorposFunc(const TMacroFunction*);
 static bool editorselFunc(const TMacroFunction*);
 static bool editorsetFunc(const TMacroFunction*);
+static bool editorsetstringFunc(const TMacroFunction*);
 static bool editorsettitleFunc(const TMacroFunction*);
 static bool editorundoFunc(const TMacroFunction*);
 static bool environFunc(const TMacroFunction*);
@@ -399,101 +401,103 @@
 static TMacroFunction intMacroFunction[]=
 {
 	//Name                fnGUID   Syntax                                                        Func                Buffer BufferSize IntFlags                          Code
-	{L"Abs",              nullptr, L"N=Abs(N)",                                                  absFunc,            nullptr, 0, 0,                                      MCODE_F_ABS,             },
-	{L"Akey",             nullptr, L"V=Akey(Mode[,Type])",                                       usersFunc,          nullptr, 0, 0,                                      MCODE_F_AKEY,            },
-	{L"Asc",              nullptr, L"N=Asc(N)",                                                  ascFunc,            nullptr, 0, 0,                                      MCODE_F_ASC,             },
-	{L"Atoi",             nullptr, L"N=Atoi(S[,Radix])",                                         atoiFunc,           nullptr, 0, 0,                                      MCODE_F_ATOI,            },
-	{L"Beep",             nullptr, L"N=Beep([N])",                                               beepFunc,           nullptr, 0, 0,                                      MCODE_F_BEEP,            },
-	{L"BM.Add",           nullptr, L"N=BM.Add()",                                                usersFunc,          nullptr, 0, 0,                                      MCODE_F_BM_ADD,          },
-	{L"BM.Clear",         nullptr, L"N=BM.Clear()",                                              usersFunc,          nullptr, 0, 0,                                      MCODE_F_BM_CLEAR,        },
-	{L"BM.Del",           nullptr, L"N=BM.Del([Idx])",                                           usersFunc,          nullptr, 0, 0,                                      MCODE_F_BM_DEL,          },
-	{L"BM.Get",           nullptr, L"N=BM.Get(Idx,M)",                                           usersFunc,          nullptr, 0, 0,                                      MCODE_F_BM_GET,          },
-	{L"BM.Goto",          nullptr, L"N=BM.Goto([N])",                                            usersFunc,          nullptr, 0, 0,                                      MCODE_F_BM_GOTO,         },
-	{L"BM.Next",          nullptr, L"N=BM.Next()",                                               usersFunc,          nullptr, 0, 0,                                      MCODE_F_BM_NEXT,         },
-	{L"BM.Pop",           nullptr, L"N=BM.Pop()",                                                usersFunc,          nullptr, 0, 0,                                      MCODE_F_BM_POP,          },
-	{L"BM.Prev",          nullptr, L"N=BM.Prev()",                                               usersFunc,          nullptr, 0, 0,                                      MCODE_F_BM_PREV,         },
-	{L"BM.Back",          nullptr, L"N=BM.Back()",                                               usersFunc,          nullptr, 0, 0,                                      MCODE_F_BM_BACK,         },
-	{L"BM.Push",          nullptr, L"N=BM.Push()",                                               usersFunc,          nullptr, 0, 0,                                      MCODE_F_BM_PUSH,         },
-	{L"BM.Stat",          nullptr, L"N=BM.Stat([N])",                                            usersFunc,          nullptr, 0, 0,                                      MCODE_F_BM_STAT,         },
-	{L"CallPlugin",       nullptr, L"V=CallPlugin(SysID[,param])",                               usersFunc,          nullptr, 0, 0,                                      MCODE_F_CALLPLUGIN,      },
-	{L"CheckHotkey",      nullptr, L"N=CheckHotkey(S[,N])",                                      usersFunc,          nullptr, 0, 0,                                      MCODE_F_MENU_CHECKHOTKEY,},
-	{L"Chr",              nullptr, L"S=Chr(N)",                                                  chrFunc,            nullptr, 0, 0,                                      MCODE_F_CHR,             },
-	{L"Clip",             nullptr, L"V=Clip(N[,V])",                                             clipFunc,           nullptr, 0, 0,                                      MCODE_F_CLIP,            },
-	{L"Date",             nullptr, L"S=Date([S])",                                               dateFunc,           nullptr, 0, 0,                                      MCODE_F_DATE,            },
-	{L"Dlg.GetValue",     nullptr, L"V=Dlg.GetValue([Pos[,InfoID]])",                            dlggetvalueFunc,    nullptr, 0, 0,                                      MCODE_F_DLG_GETVALUE,    },
-	{L"Dlg.SetFocus",     nullptr, L"N=Dlg.SetFocus([ID])",                                      dlgsetfocusFunc,    nullptr, 0, 0,                                      MCODE_F_DLG_SETFOCUS,    },
-	{L"Editor.Pos",       nullptr, L"N=Editor.Pos(Op,What[,Where])",                             editorposFunc,      nullptr, 0, 0,                                      MCODE_F_EDITOR_POS,      },
-	{L"Editor.Sel",       nullptr, L"V=Editor.Sel(Action[,Opt])",                                editorselFunc,      nullptr, 0, 0,                                      MCODE_F_EDITOR_SEL,      },
-	{L"Editor.Set",       nullptr, L"N=Editor.Set(N,Var)",                                       editorsetFunc,      nullptr, 0, 0,                                      MCODE_F_EDITOR_SET,      },
-	{L"Editor.Settitle",  nullptr, L"N=Editor.SetTitle([Title])",                                editorsettitleFunc, nullptr, 0, 0,                                      MCODE_F_EDITOR_SETTITLE, },
-	{L"Editor.Undo",      nullptr, L"V=Editor.Undo(N)",                                          editorundoFunc,     nullptr, 0, 0,                                      MCODE_F_EDITOR_UNDO,     },
-	{L"Env",              nullptr, L"S=Env(S[,Mode[,Value]])",                                   environFunc,        nullptr, 0, 0,                                      MCODE_F_ENVIRON,         },
-	{L"Eval",             nullptr, L"N=Eval(S[,N])",                                             usersFunc,          nullptr, 0, 0,                                      MCODE_F_EVAL,            },
-	{L"Far.Cfg.Get",      nullptr, L"V=Far.Cfg.Get(Key,Name)",                                   farcfggetFunc,      nullptr, 0, 0,                                      MCODE_F_FAR_CFG_GET,     },
-	{L"FAttr",            nullptr, L"N=FAttr(S)",                                                fattrFunc,          nullptr, 0, 0,                                      MCODE_F_FATTR,           },
-	{L"FExist",           nullptr, L"N=FExist(S)",                                               fexistFunc,         nullptr, 0, 0,                                      MCODE_F_FEXIST,          },
-	{L"Float",            nullptr, L"N=Float(V)",                                                floatFunc,          nullptr, 0, 0,                                      MCODE_F_FLOAT,           },
-	{L"FLock",            nullptr, L"N=FLock(N,N)",                                              flockFunc,          nullptr, 0, 0,                                      MCODE_F_FLOCK,           },
-	{L"FMatch",           nullptr, L"N=FMatch(S,Mask)",                                          fmatchFunc,         nullptr, 0, 0,                                      MCODE_F_FMATCH,          },
-	{L"FSplit",           nullptr, L"S=FSplit(S,N)",                                             fsplitFunc,         nullptr, 0, 0,                                      MCODE_F_FSPLIT,          },
-	{L"GetHotkey",        nullptr, L"S=GetHotkey([N])",                                          usersFunc,          nullptr, 0, 0,                                      MCODE_F_MENU_GETHOTKEY,  },
-	{L"History.Disable",  nullptr, L"N=History.Disable([State])",                                usersFunc,          nullptr, 0, 0,                                      MCODE_F_HISTIORY_DISABLE,},
-	{L"Iif",              nullptr, L"V=Iif(Condition,V1,V2)",                                    iifFunc,            nullptr, 0, 0,                                      MCODE_F_IIF,             },
-	{L"Index",            nullptr, L"S=Index(S1,S2[,Mode])",                                     indexFunc,          nullptr, 0, 0,                                      MCODE_F_INDEX,           },
-	{L"Int",              nullptr, L"N=Int(V)",                                                  intFunc,            nullptr, 0, 0,                                      MCODE_F_INT,             },
-	{L"Itoa",             nullptr, L"S=Itoa(N[,radix])",                                         itowFunc,           nullptr, 0, 0,                                      MCODE_F_ITOA,            },
-	{L"KbdLayout",        nullptr, L"N=kbdLayout([N])",                                          kbdLayoutFunc,      nullptr, 0, 0,                                      MCODE_F_KBDLAYOUT,       },
-	{L"Key",              nullptr, L"S=Key(V)",                                                  keyFunc,            nullptr, 0, 0,                                      MCODE_F_KEY,             },
-	{L"KeyBar.Show",      nullptr, L"N=KeyBar.Show([N])",                                        keybarshowFunc,     nullptr, 0, 0,                                      MCODE_F_KEYBAR_SHOW,     },
-	{L"LCase",            nullptr, L"S=LCase(S1)",                                               lcaseFunc,          nullptr, 0, 0,                                      MCODE_F_LCASE,           },
-	{L"Len",              nullptr, L"N=Len(S)",                                                  lenFunc,            nullptr, 0, 0,                                      MCODE_F_LEN,             },
-	{L"Macro.Const",      nullptr, L"S=Macro.Const(Index[,Type])",                               macroenumConstFunc, nullptr, 0, 0,                                      MCODE_F_MACRO_CONST,     },
-	{L"Macro.Func",       nullptr, L"S=Macro.Func(Index[,Type])",                                macroenumfuncFunc,  nullptr, 0, 0,                                      MCODE_F_MACRO_FUNC,      },
-	{L"Macro.Keyword",    nullptr, L"S=Macro.Keyword(Index[,Type])",                             macroenumkwdFunc,   nullptr, 0, 0,                                      MCODE_F_MACRO_KEYWORD,   },
-	{L"Macro.Var",        nullptr, L"S=Macro.Var(Index[,Type])",                                 macroenumvarFunc,   nullptr, 0, 0,                                      MCODE_F_MACRO_VAR,       },
-	{L"Max",              nullptr, L"N=Max(N1,N2)",                                              maxFunc,            nullptr, 0, 0,                                      MCODE_F_MAX,             },
-	{L"Menu.Filter",      nullptr, L"N=Menu.Filter([Action[,Mode]])",                            usersFunc,          nullptr, 0, 0,                                      MCODE_F_MENU_FILTER,     },
-	{L"Menu.FilterStr",   nullptr, L"N=Menu.FilterStr([Action[,S]])",                            usersFunc,          nullptr, 0, 0,                                      MCODE_F_MENU_FILTERSTR,  },
-	{L"Menu.GetValue",    nullptr, L"S=Menu.GetValue([N])",                                      usersFunc,          nullptr, 0, 0,                                      MCODE_F_MENU_GETVALUE,   },
-	{L"Menu.ItemStatus",  nullptr, L"N=Menu.ItemStatus([N])",                                    usersFunc,          nullptr, 0, 0,                                      MCODE_F_MENU_ITEMSTATUS, },
-	{L"Menu.Select",      nullptr, L"N=Menu.Select(S[,N[,Dir]])",                                usersFunc,          nullptr, 0, 0,                                      MCODE_F_MENU_SELECT,     },
-	{L"Menu.Show",        nullptr, L"S=Menu.Show(Items[,Title[,Flags[,FindOrFilter[,X[,Y]]]]])", menushowFunc,       nullptr, 0, IMFF_UNLOCKSCREEN|IMFF_DISABLEINTINPUT, MCODE_F_MENU_SHOW,       },
-	{L"Min",              nullptr, L"N=Min(N1,N2)",                                              minFunc,            nullptr, 0, 0,                                      MCODE_F_MIN,             },
-	{L"MLoad",            nullptr, L"N=MLoad(S)",                                                mloadFunc,          nullptr, 0, 0,                                      MCODE_F_MLOAD,           },
-	{L"MMode",            nullptr, L"N=MMode(Action[,Value])",                                   usersFunc,          nullptr, 0, 0,                                      MCODE_F_MMODE,           },
-	{L"Mod",              nullptr, L"N=Mod(a,b)",                                                modFunc,            nullptr, 0, 0,                                      MCODE_F_MOD,             },
-	{L"MSave",            nullptr, L"N=MSave(S)",                                                msaveFunc,          nullptr, 0, 0,                                      MCODE_F_MSAVE,           },
-	{L"MsgBox",           nullptr, L"N=MsgBox([Title[,Text[,flags]]])",                          msgBoxFunc,         nullptr, 0, IMFF_UNLOCKSCREEN|IMFF_DISABLEINTINPUT, MCODE_F_MSGBOX,          },
-	{L"Panel.FAttr",      nullptr, L"N=Panel.FAttr(panelType,fileMask)",                         panelfattrFunc,     nullptr, 0, 0,                                      MCODE_F_PANEL_FATTR,     },
-	{L"Panel.FExist",     nullptr, L"N=Panel.FExist(panelType,fileMask)",                        panelfexistFunc,    nullptr, 0, 0,                                      MCODE_F_PANEL_FEXIST,    },
-	{L"Panel.Item",       nullptr, L"V=Panel.Item(Panel,Index,TypeInfo)",                        panelitemFunc,      nullptr, 0, 0,                                      MCODE_F_PANELITEM,       },
-	{L"Panel.Select",     nullptr, L"V=Panel.Select(panelType,Action[,Mode[,Items]])",           panelselectFunc,    nullptr, 0, 0,                                      MCODE_F_PANEL_SELECT,    },
-	{L"Panel.SetPath",    nullptr, L"N=panel.SetPath(panelType,pathName[,fileName])",            panelsetpathFunc,   nullptr, 0, IMFF_UNLOCKSCREEN|IMFF_DISABLEINTINPUT, MCODE_F_PANEL_SETPATH,   },
-	{L"Panel.SetPos",     nullptr, L"N=panel.SetPos(panelType,fileName)",                        panelsetposFunc,    nullptr, 0, IMFF_UNLOCKSCREEN|IMFF_DISABLEINTINPUT, MCODE_F_PANEL_SETPOS,    },
-	{L"Panel.SetPosIdx",  nullptr, L"N=Panel.SetPosIdx(panelType,Idx[,InSelection])",            panelsetposidxFunc, nullptr, 0, IMFF_UNLOCKSCREEN|IMFF_DISABLEINTINPUT, MCODE_F_PANEL_SETPOSIDX, },
-	{L"PanelItem",        nullptr, L"V=PanelItem(Panel,Index,TypeInfo)",                         panelitemFunc,      nullptr, 0, 0,                                      MCODE_F_PANELITEM,       },
-	{L"Plugin.Call",      nullptr, L"N=Plugin.Call(Guid[,Item])",                                usersFunc,          nullptr, 0, 0,                                      MCODE_F_PLUGIN_CALL,     },
-	{L"Plugin.Command",   nullptr, L"N=Plugin.Command(Guid[,Command])",                          usersFunc,          nullptr, 0, 0,                                      MCODE_F_PLUGIN_COMMAND,  },
-	{L"Plugin.Config",    nullptr, L"N=Plugin.Config(Guid[,MenuGuid])",                          usersFunc,          nullptr, 0, 0,                                      MCODE_F_PLUGIN_CONFIG,   },
-	{L"Plugin.Exist",     nullptr, L"N=Plugin.Exist(Guid)",                                      pluginexistFunc,    nullptr, 0, 0,                                      MCODE_F_PLUGIN_EXIST,    },
-	{L"Plugin.Load",      nullptr, L"N=Plugin.Load(DllPath[,ForceLoad])",                        pluginloadFunc,     nullptr, 0, 0,                                      MCODE_F_PLUGIN_LOAD,     },
-	{L"Plugin.Menu",      nullptr, L"N=Plugin.Menu(Guid[,MenuGuid])",                            usersFunc,          nullptr, 0, 0,                                      MCODE_F_PLUGIN_MENU,     },
-	{L"Plugin.UnLoad",    nullptr, L"N=Plugin.UnLoad(DllPath)",                                  pluginunloadFunc,   nullptr, 0, 0,                                      MCODE_F_PLUGIN_UNLOAD,   },
-	{L"Print",            nullptr, L"N=Print(Str)",                                              usersFunc,          nullptr, 0, 0,                                      MCODE_F_PRINT,           },
-	{L"Prompt",           nullptr, L"S=Prompt([Title[,Prompt[,flags[,Src[,History]]]]])",        promptFunc,         nullptr, 0, IMFF_UNLOCKSCREEN|IMFF_DISABLEINTINPUT, MCODE_F_PROMPT,          },
-	{L"Replace",          nullptr, L"S=Replace(Str,Find,Replace[,Cnt[,Mode]])",                  replaceFunc,        nullptr, 0, 0,                                      MCODE_F_REPLACE,         },
-	{L"Rindex",           nullptr, L"S=RIndex(S1,S2[,Mode])",                                    rindexFunc,         nullptr, 0, 0,                                      MCODE_F_RINDEX,          },
- 	{L"Size2Str",         nullptr, L"S=Size2Str(N,Flags[,Width])",                               size2strFunc,       nullptr, 0, 0,                                      MCODE_F_SIZE2STR,        },
-	{L"Sleep",            nullptr, L"N=Sleep(N)",                                                sleepFunc,          nullptr, 0, 0,                                      MCODE_F_SLEEP,           },
-	{L"String",           nullptr, L"S=String(V)",                                               stringFunc,         nullptr, 0, 0,                                      MCODE_F_STRING,          },
-	{L"StrWrap",          nullptr, L"S=StrWrap(Text,Width[,Break[,Flags]])",                     strwrapFunc,        nullptr, 0, 0,                                      MCODE_F_STRWRAP,         },
-	{L"SubStr",           nullptr, L"S=SubStr(S,start[,length])",                                substrFunc,         nullptr, 0, 0,                                      MCODE_F_SUBSTR,          },
-	{L"TestFolder",       nullptr, L"N=TestFolder(S)",                                           testfolderFunc,     nullptr, 0, 0,                                      MCODE_F_TESTFOLDER,      },
-	{L"Trim",             nullptr, L"S=Trim(S[,N])",                                             trimFunc,           nullptr, 0, 0,                                      MCODE_F_TRIM,            },
-	{L"UCase",            nullptr, L"S=UCase(S1)",                                               ucaseFunc,          nullptr, 0, 0,                                      MCODE_F_UCASE,           },
-	{L"WaitKey",          nullptr, L"V=Waitkey([N,[T]])",                                        waitkeyFunc,        nullptr, 0, 0,                                      MCODE_F_WAITKEY,         },
-	{L"Window.Scroll",    nullptr, L"N=Window.Scroll(Lines[,Axis])",                             windowscrollFunc,   nullptr, 0, 0,                                      MCODE_F_WINDOW_SCROLL,   },
-	{L"Xlat",             nullptr, L"S=Xlat(S[,Flags])",                                         xlatFunc,           nullptr, 0, 0,                                      MCODE_F_XLAT,            },
+	{L"Abs",              nullptr, L"N=Abs(N)",                                                  absFunc,             nullptr, 0, 0,                                      MCODE_F_ABS,               },
+	{L"Akey",             nullptr, L"V=Akey(Mode[,Type])",                                       usersFunc,           nullptr, 0, 0,                                      MCODE_F_AKEY,              },
+	{L"Asc",              nullptr, L"N=Asc(N)",                                                  ascFunc,             nullptr, 0, 0,                                      MCODE_F_ASC,               },
+	{L"Atoi",             nullptr, L"N=Atoi(S[,Radix])",                                         atoiFunc,            nullptr, 0, 0,                                      MCODE_F_ATOI,              },
+	{L"Beep",             nullptr, L"N=Beep([N])",                                               beepFunc,            nullptr, 0, 0,                                      MCODE_F_BEEP,              },
+	{L"BM.Add",           nullptr, L"N=BM.Add()",                                                usersFunc,           nullptr, 0, 0,                                      MCODE_F_BM_ADD,            },
+	{L"BM.Clear",         nullptr, L"N=BM.Clear()",                                              usersFunc,           nullptr, 0, 0,                                      MCODE_F_BM_CLEAR,          },
+	{L"BM.Del",           nullptr, L"N=BM.Del([Idx])",                                           usersFunc,           nullptr, 0, 0,                                      MCODE_F_BM_DEL,            },
+	{L"BM.Get",           nullptr, L"N=BM.Get(Idx,M)",                                           usersFunc,           nullptr, 0, 0,                                      MCODE_F_BM_GET,            },
+	{L"BM.Goto",          nullptr, L"N=BM.Goto([N])",                                            usersFunc,           nullptr, 0, 0,                                      MCODE_F_BM_GOTO,           },
+	{L"BM.Next",          nullptr, L"N=BM.Next()",                                               usersFunc,           nullptr, 0, 0,                                      MCODE_F_BM_NEXT,           },
+	{L"BM.Pop",           nullptr, L"N=BM.Pop()",                                                usersFunc,           nullptr, 0, 0,                                      MCODE_F_BM_POP,            },
+	{L"BM.Prev",          nullptr, L"N=BM.Prev()",                                               usersFunc,           nullptr, 0, 0,                                      MCODE_F_BM_PREV,           },
+	{L"BM.Back",          nullptr, L"N=BM.Back()",                                               usersFunc,           nullptr, 0, 0,                                      MCODE_F_BM_BACK,           },
+	{L"BM.Push",          nullptr, L"N=BM.Push()",                                               usersFunc,           nullptr, 0, 0,                                      MCODE_F_BM_PUSH,           },
+	{L"BM.Stat",          nullptr, L"N=BM.Stat([N])",                                            usersFunc,           nullptr, 0, 0,                                      MCODE_F_BM_STAT,           },
+	{L"CallPlugin",       nullptr, L"V=CallPlugin(SysID[,param])",                               usersFunc,           nullptr, 0, 0,                                      MCODE_F_CALLPLUGIN,        },
+	{L"CheckHotkey",      nullptr, L"N=CheckHotkey(S[,N])",                                      usersFunc,           nullptr, 0, 0,                                      MCODE_F_MENU_CHECKHOTKEY,  },
+	{L"Chr",              nullptr, L"S=Chr(N)",                                                  chrFunc,             nullptr, 0, 0,                                      MCODE_F_CHR,               },
+	{L"Clip",             nullptr, L"V=Clip(N[,V])",                                             clipFunc,            nullptr, 0, 0,                                      MCODE_F_CLIP,              },
+	{L"Date",             nullptr, L"S=Date([S])",                                               dateFunc,            nullptr, 0, 0,                                      MCODE_F_DATE,              },
+	{L"Dlg.GetValue",     nullptr, L"V=Dlg.GetValue([Pos[,InfoID]])",                            dlggetvalueFunc,     nullptr, 0, 0,                                      MCODE_F_DLG_GETVALUE,      },
+	{L"Dlg.SetFocus",     nullptr, L"N=Dlg.SetFocus([ID])",                                      dlgsetfocusFunc,     nullptr, 0, 0,                                      MCODE_F_DLG_SETFOCUS,      },
+	{L"Editor.GetString", nullptr, L"S=Editor.GetString([N)]",                                   editorgetstringFunc, nullptr, 0, 0,                                      MCODE_F_EDITOR_GET_STRING, },
+	{L"Editor.Pos",       nullptr, L"N=Editor.Pos(Op,What[,Where])",                             editorposFunc,       nullptr, 0, 0,                                      MCODE_F_EDITOR_POS,        },
+	{L"Editor.Sel",       nullptr, L"V=Editor.Sel(Action[,Opt])",                                editorselFunc,       nullptr, 0, 0,                                      MCODE_F_EDITOR_SEL,        },
+	{L"Editor.Set",       nullptr, L"N=Editor.Set(N,Var)",                                       editorsetFunc,       nullptr, 0, 0,                                      MCODE_F_EDITOR_SET,        },
+	{L"Editor.SetString", nullptr, L"N=Editor.SetString(S[,N)]",                                 editorsetstringFunc, nullptr, 0, 0,                                      MCODE_F_EDITOR_SET_STRING, },
+	{L"Editor.Settitle",  nullptr, L"N=Editor.SetTitle([Title])",                                editorsettitleFunc,  nullptr, 0, 0,                                      MCODE_F_EDITOR_SETTITLE,   },
+	{L"Editor.Undo",      nullptr, L"V=Editor.Undo(N)",                                          editorundoFunc,      nullptr, 0, 0,                                      MCODE_F_EDITOR_UNDO,       },
+	{L"Env",              nullptr, L"S=Env(S[,Mode[,Value]])",                                   environFunc,         nullptr, 0, 0,                                      MCODE_F_ENVIRON,           },
+	{L"Eval",             nullptr, L"N=Eval(S[,N])",                                             usersFunc,           nullptr, 0, 0,                                      MCODE_F_EVAL,              },
+	{L"Far.Cfg.Get",      nullptr, L"V=Far.Cfg.Get(Key,Name)",                                   farcfggetFunc,       nullptr, 0, 0,                                      MCODE_F_FAR_CFG_GET,       },
+	{L"FAttr",            nullptr, L"N=FAttr(S)",                                                fattrFunc,           nullptr, 0, 0,                                      MCODE_F_FATTR,             },
+	{L"FExist",           nullptr, L"N=FExist(S)",                                               fexistFunc,          nullptr, 0, 0,                                      MCODE_F_FEXIST,            },
+	{L"Float",            nullptr, L"N=Float(V)",                                                floatFunc,           nullptr, 0, 0,                                      MCODE_F_FLOAT,             },
+	{L"FLock",            nullptr, L"N=FLock(N,N)",                                              flockFunc,           nullptr, 0, 0,                                      MCODE_F_FLOCK,             },
+	{L"FMatch",           nullptr, L"N=FMatch(S,Mask)",                                          fmatchFunc,          nullptr, 0, 0,                                      MCODE_F_FMATCH,            },
+	{L"FSplit",           nullptr, L"S=FSplit(S,N)",                                             fsplitFunc,          nullptr, 0, 0,                                      MCODE_F_FSPLIT,            },
+	{L"GetHotkey",        nullptr, L"S=GetHotkey([N])",                                          usersFunc,           nullptr, 0, 0,                                      MCODE_F_MENU_GETHOTKEY,    },
+	{L"History.Disable",  nullptr, L"N=History.Disable([State])",                                usersFunc,           nullptr, 0, 0,                                      MCODE_F_HISTIORY_DISABLE,  },
+	{L"Iif",              nullptr, L"V=Iif(Condition,V1,V2)",                                    iifFunc,             nullptr, 0, 0,                                      MCODE_F_IIF,               },
+	{L"Index",            nullptr, L"S=Index(S1,S2[,Mode])",                                     indexFunc,           nullptr, 0, 0,                                      MCODE_F_INDEX,             },
+	{L"Int",              nullptr, L"N=Int(V)",                                                  intFunc,             nullptr, 0, 0,                                      MCODE_F_INT,               },
+	{L"Itoa",             nullptr, L"S=Itoa(N[,radix])",                                         itowFunc,            nullptr, 0, 0,                                      MCODE_F_ITOA,              },
+	{L"KbdLayout",        nullptr, L"N=kbdLayout([N])",                                          kbdLayoutFunc,       nullptr, 0, 0,                                      MCODE_F_KBDLAYOUT,         },
+	{L"Key",              nullptr, L"S=Key(V)",                                                  keyFunc,             nullptr, 0, 0,                                      MCODE_F_KEY,               },
+	{L"KeyBar.Show",      nullptr, L"N=KeyBar.Show([N])",                                        keybarshowFunc,      nullptr, 0, 0,                                      MCODE_F_KEYBAR_SHOW,       },
+	{L"LCase",            nullptr, L"S=LCase(S1)",                                               lcaseFunc,           nullptr, 0, 0,                                      MCODE_F_LCASE,             },
+	{L"Len",              nullptr, L"N=Len(S)",                                                  lenFunc,             nullptr, 0, 0,                                      MCODE_F_LEN,               },
+	{L"Macro.Const",      nullptr, L"S=Macro.Const(Index[,Type])",                               macroenumConstFunc,  nullptr, 0, 0,                                      MCODE_F_MACRO_CONST,       },
+	{L"Macro.Func",       nullptr, L"S=Macro.Func(Index[,Type])",                                macroenumfuncFunc,   nullptr, 0, 0,                                      MCODE_F_MACRO_FUNC,        },
+	{L"Macro.Keyword",    nullptr, L"S=Macro.Keyword(Index[,Type])",                             macroenumkwdFunc,    nullptr, 0, 0,                                      MCODE_F_MACRO_KEYWORD,     },
+	{L"Macro.Var",        nullptr, L"S=Macro.Var(Index[,Type])",                                 macroenumvarFunc,    nullptr, 0, 0,                                      MCODE_F_MACRO_VAR,         },
+	{L"Max",              nullptr, L"N=Max(N1,N2)",                                              maxFunc,             nullptr, 0, 0,                                      MCODE_F_MAX,               },
+	{L"Menu.Filter",      nullptr, L"N=Menu.Filter([Action[,Mode]])",                            usersFunc,           nullptr, 0, 0,                                      MCODE_F_MENU_FILTER,       },
+	{L"Menu.FilterStr",   nullptr, L"N=Menu.FilterStr([Action[,S]])",                            usersFunc,           nullptr, 0, 0,                                      MCODE_F_MENU_FILTERSTR,    },
+	{L"Menu.GetValue",    nullptr, L"S=Menu.GetValue([N])",                                      usersFunc,           nullptr, 0, 0,                                      MCODE_F_MENU_GETVALUE,     },
+	{L"Menu.ItemStatus",  nullptr, L"N=Menu.ItemStatus([N])",                                    usersFunc,           nullptr, 0, 0,                                      MCODE_F_MENU_ITEMSTATUS,   },
+	{L"Menu.Select",      nullptr, L"N=Menu.Select(S[,N[,Dir]])",                                usersFunc,           nullptr, 0, 0,                                      MCODE_F_MENU_SELECT,       },
+	{L"Menu.Show",        nullptr, L"S=Menu.Show(Items[,Title[,Flags[,FindOrFilter[,X[,Y]]]]])", menushowFunc,        nullptr, 0, IMFF_UNLOCKSCREEN|IMFF_DISABLEINTINPUT, MCODE_F_MENU_SHOW,         },
+	{L"Min",              nullptr, L"N=Min(N1,N2)",                                              minFunc,             nullptr, 0, 0,                                      MCODE_F_MIN,               },
+	{L"MLoad",            nullptr, L"N=MLoad(S)",                                                mloadFunc,           nullptr, 0, 0,                                      MCODE_F_MLOAD,             },
+	{L"MMode",            nullptr, L"N=MMode(Action[,Value])",                                   usersFunc,           nullptr, 0, 0,                                      MCODE_F_MMODE,             },
+	{L"Mod",              nullptr, L"N=Mod(a,b)",                                                modFunc,             nullptr, 0, 0,                                      MCODE_F_MOD,               },
+	{L"MSave",            nullptr, L"N=MSave(S)",                                                msaveFunc,           nullptr, 0, 0,                                      MCODE_F_MSAVE,             },
+	{L"MsgBox",           nullptr, L"N=MsgBox([Title[,Text[,flags]]])",                          msgBoxFunc,          nullptr, 0, IMFF_UNLOCKSCREEN|IMFF_DISABLEINTINPUT, MCODE_F_MSGBOX,            },
+	{L"Panel.FAttr",      nullptr, L"N=Panel.FAttr(panelType,fileMask)",                         panelfattrFunc,      nullptr, 0, 0,                                      MCODE_F_PANEL_FATTR,       },
+	{L"Panel.FExist",     nullptr, L"N=Panel.FExist(panelType,fileMask)",                        panelfexistFunc,     nullptr, 0, 0,                                      MCODE_F_PANEL_FEXIST,      },
+	{L"Panel.Item",       nullptr, L"V=Panel.Item(Panel,Index,TypeInfo)",                        panelitemFunc,       nullptr, 0, 0,                                      MCODE_F_PANELITEM,         },
+	{L"Panel.Select",     nullptr, L"V=Panel.Select(panelType,Action[,Mode[,Items]])",           panelselectFunc,     nullptr, 0, 0,                                      MCODE_F_PANEL_SELECT,      },
+	{L"Panel.SetPath",    nullptr, L"N=panel.SetPath(panelType,pathName[,fileName])",            panelsetpathFunc,    nullptr, 0, IMFF_UNLOCKSCREEN|IMFF_DISABLEINTINPUT, MCODE_F_PANEL_SETPATH,     },
+	{L"Panel.SetPos",     nullptr, L"N=panel.SetPos(panelType,fileName)",                        panelsetposFunc,     nullptr, 0, IMFF_UNLOCKSCREEN|IMFF_DISABLEINTINPUT, MCODE_F_PANEL_SETPOS,      },
+	{L"Panel.SetPosIdx",  nullptr, L"N=Panel.SetPosIdx(panelType,Idx[,InSelection])",            panelsetposidxFunc,  nullptr, 0, IMFF_UNLOCKSCREEN|IMFF_DISABLEINTINPUT, MCODE_F_PANEL_SETPOSIDX,   },
+	{L"PanelItem",        nullptr, L"V=PanelItem(Panel,Index,TypeInfo)",                         panelitemFunc,       nullptr, 0, 0,                                      MCODE_F_PANELITEM,         },
+	{L"Plugin.Call",      nullptr, L"N=Plugin.Call(Guid[,Item])",                                usersFunc,           nullptr, 0, 0,                                      MCODE_F_PLUGIN_CALL,       },
+	{L"Plugin.Command",   nullptr, L"N=Plugin.Command(Guid[,Command])",                          usersFunc,           nullptr, 0, 0,                                      MCODE_F_PLUGIN_COMMAND,    },
+	{L"Plugin.Config",    nullptr, L"N=Plugin.Config(Guid[,MenuGuid])",                          usersFunc,           nullptr, 0, 0,                                      MCODE_F_PLUGIN_CONFIG,     },
+	{L"Plugin.Exist",     nullptr, L"N=Plugin.Exist(Guid)",                                      pluginexistFunc,     nullptr, 0, 0,                                      MCODE_F_PLUGIN_EXIST,      },
+	{L"Plugin.Load",      nullptr, L"N=Plugin.Load(DllPath[,ForceLoad])",                        pluginloadFunc,      nullptr, 0, 0,                                      MCODE_F_PLUGIN_LOAD,       },
+	{L"Plugin.Menu",      nullptr, L"N=Plugin.Menu(Guid[,MenuGuid])",                            usersFunc,           nullptr, 0, 0,                                      MCODE_F_PLUGIN_MENU,       },
+	{L"Plugin.UnLoad",    nullptr, L"N=Plugin.UnLoad(DllPath)",                                  pluginunloadFunc,    nullptr, 0, 0,                                      MCODE_F_PLUGIN_UNLOAD,     },
+	{L"Print",            nullptr, L"N=Print(Str)",                                              usersFunc,           nullptr, 0, 0,                                      MCODE_F_PRINT,             },
+	{L"Prompt",           nullptr, L"S=Prompt([Title[,Prompt[,flags[,Src[,History]]]]])",        promptFunc,          nullptr, 0, IMFF_UNLOCKSCREEN|IMFF_DISABLEINTINPUT, MCODE_F_PROMPT,            },
+	{L"Replace",          nullptr, L"S=Replace(Str,Find,Replace[,Cnt[,Mode]])",                  replaceFunc,         nullptr, 0, 0,                                      MCODE_F_REPLACE,           },
+	{L"Rindex",           nullptr, L"S=RIndex(S1,S2[,Mode])",                                    rindexFunc,          nullptr, 0, 0,                                      MCODE_F_RINDEX,            },
+ 	{L"Size2Str",         nullptr, L"S=Size2Str(N,Flags[,Width])",                               size2strFunc,        nullptr, 0, 0,                                      MCODE_F_SIZE2STR,          },
+	{L"Sleep",            nullptr, L"N=Sleep(N)",                                                sleepFunc,           nullptr, 0, 0,                                      MCODE_F_SLEEP,             },
+	{L"String",           nullptr, L"S=String(V)",                                               stringFunc,          nullptr, 0, 0,                                      MCODE_F_STRING,            },
+	{L"StrWrap",          nullptr, L"S=StrWrap(Text,Width[,Break[,Flags]])",                     strwrapFunc,         nullptr, 0, 0,                                      MCODE_F_STRWRAP,           },
+	{L"SubStr",           nullptr, L"S=SubStr(S,start[,length])",                                substrFunc,          nullptr, 0, 0,                                      MCODE_F_SUBSTR,            },
+	{L"TestFolder",       nullptr, L"N=TestFolder(S)",                                           testfolderFunc,      nullptr, 0, 0,                                      MCODE_F_TESTFOLDER,        },
+	{L"Trim",             nullptr, L"S=Trim(S[,N])",                                             trimFunc,            nullptr, 0, 0,                                      MCODE_F_TRIM,              },
+	{L"UCase",            nullptr, L"S=UCase(S1)",                                               ucaseFunc,           nullptr, 0, 0,                                      MCODE_F_UCASE,             },
+	{L"WaitKey",          nullptr, L"V=Waitkey([N,[T]])",                                        waitkeyFunc,         nullptr, 0, 0,                                      MCODE_F_WAITKEY,           },
+	{L"Window.Scroll",    nullptr, L"N=Window.Scroll(Lines[,Axis])",                             windowscrollFunc,    nullptr, 0, 0,                                      MCODE_F_WINDOW_SCROLL,     },
+	{L"Xlat",             nullptr, L"S=Xlat(S[,Flags])",                                         xlatFunc,            nullptr, 0, 0,                                      MCODE_F_XLAT,              },
 	{}
 };
 
@@ -3516,6 +3520,46 @@
 	return Ret.i() != -1;
 }
 
+// S=Editor.GetString([N])
+static bool editorgetstringFunc(const TMacroFunction*)
+{
+	parseParams(1,Params);
+	TVar Ret(L"");
+	int Line=(int)Params[0].getInteger()-1;
+
+	if (CtrlObject->Macro.GetMode()==MACRO_EDITOR && CtrlObject->Plugins->CurEditor && CtrlObject->Plugins->CurEditor->IsVisible())
+	{
+		EditorGetString egs;
+		egs.StringNumber=Line;
+		CtrlObject->Plugins->CurEditor->EditorControl(ECTL_GETSTRING,&egs);
+		Ret=egs.StringText;
+	}
+
+	VMStack.Push(Ret);
+	return true;
+}
+
+// N=Editor.SetString(S[,N])
+static bool editorsetstringFunc(const TMacroFunction*)
+{
+	parseParams(2,Params);
+	TVar Ret;
+	int Line=(int)Params[1].getInteger()-1;
+
+	if (CtrlObject->Macro.GetMode()==MACRO_EDITOR && CtrlObject->Plugins->CurEditor && CtrlObject->Plugins->CurEditor->IsVisible())
+	{
+		EditorSetString ess;
+		ess.StringNumber=Line;
+		ess.StringEOL=NULL;
+		ess.StringText=Params[0].s();
+		ess.StringLength=StrLength(Params[0].s());
+		Ret=CtrlObject->Plugins->CurEditor->EditorControl(ECTL_SETSTRING,&ess);
+	}
+
+	VMStack.Push(Ret);
+	return Ret.i();
+}
+
 // OldVar=Editor.Set(Idx,Value)
 static bool editorsetFunc(const TMacroFunction*)
 {
Index: C++/FAR/unicode_far/macroopcode.hpp
===================================================================
--- C++/FAR/unicode_far/macroopcode.hpp	(revision 7805)
+++ C++/FAR/unicode_far/macroopcode.hpp	(working copy)
@@ -153,8 +153,10 @@
 	MCODE_F_CHR,                      // S=chr(N)
 	MCODE_F_DATE,                     // S=date([S])
 	MCODE_F_DLG_GETVALUE,             // V=Dlg.GetValue([Pos[,InfoID]])
+	MCODE_F_EDITOR_GET_STRING,        // S=Editor.GetString([N])
 	MCODE_F_EDITOR_SEL,               // V=Editor.Sel(Action[,Opt])
 	MCODE_F_EDITOR_SET,               // N=Editor.Set(N,Var)
+	MCODE_F_EDITOR_SET_STRING,        // N=Editor.SetString(S[,N)]
 	MCODE_F_EDITOR_UNDO,              // V=Editor.Undo(N)
 	MCODE_F_EDITOR_POS,               // N=Editor.Pos(Op,What[,Where])
 	MCODE_F_ENVIRON,                  // S=Env(S[,Mode[,Value]])
macro.patch (42,059 bytes)   

SUSim

2012-03-31 14:32

reporter   bugnote:0008836

Last edited: 2012-03-31 14:34

а запись с заменой? то есть строка заменится?
Полезно! Для полного удовлетворения не хватает:
N=Editor.DelString([N])
N=Editor.AddString(S[,N])или лучше N=Editor.InsString(S[,N])

DAtaMan

2012-03-31 14:53

reporter   bugnote:0008837

>то есть строка заменится?

Да, целиком.

>Для полного удовлетворения не хватает

Тоже можно. Или заменить на что-то типа Editor.String(S[, Action[, N]])
Action =
0 - получить
1 - записать
2 - вставить
3 - удалить

?

SUSim

2012-04-01 04:32

reporter   bugnote:0008838

S не требуется для актион 0, тогда уж лучше:
Editor.String(Index[, Action[, Value]])или
Editor.String([Action[, Index[, Value]])- тогда без параметров будет аналогично Editor.Value

DiRTy_GaRRy

2012-04-01 14:06

developer   bugnote:0008841

В данном случае, наверное, более общеупотребимым будет не String, а Row… или Line…

max rusov

2012-04-01 18:06

reporter   bugnote:0008842

Зачем это усложнение с Action? Гораздо приятнее исходный вариант.

DAtaMan

2012-04-02 06:28

reporter   bugnote:0008843

>Гораздо приятнее исходный вариант.

Да, мне тоже. :) Тем более, что мне его достаточно (то есть, без вставки/удаления строк).


P.S. Долго буду вдали от интернетов, так что...

max rusov

2012-04-02 07:49

reporter   bugnote:0008844

Вставку и удаление, конечно, тоже стоит добавить. Будут 4 функции - замечательно.

DAtaMan

2012-04-06 08:26

reporter   bugnote:0008846

> Вставку и удаление, конечно, тоже стоит добавить.

Тогда может они и плагинам будут полезны?
что-то типа ECTL_INSERTROW (Param2 - EditorSetString) и ECTL_DELETEROW (Param1 - номер строки)

???

vskirdin

2012-04-19 13:06

administrator   bugnote:0008963

Ждем автора?

DAtaMan

2012-04-19 13:38

reporter   bugnote:0008966

Да просто не знаю, как сделать лучше.

По поводу удаления строки - можно добавить к ECTL_DELETESTRING параметром номер строки. То есть, если null, то как сейчас - удаляется текущая строка. Вроде, плагины это не сломает. И тогда им не нужно будет сохранять/восстанавливать позицию. Кому-нибудь нужно?

А вот что делать со вставкой, новую команду в API? Кому-нибудь нужно? (c)
Ну или некоторые методы из Editor вытаскивать из приватных для доступа к ним из Macro.

DAtaMan

2012-05-10 06:45

reporter   bugnote:0009114

1. Небольшая оптимизация Editor::GetStringByNumber
2. Добавлены макрокоманды:
N=Editor.DelLine([Line])
S=Editor.GetStr([Line])
S=Editor.InsStr([S[,Line]])
S=Editor.SetStr([S[,Line]])

если Line не задана, то функции работают с текущей строкой.

P.S. В архиве изменённые файлы.
Если diff нужен, то только вечером дома сделаю, :)

DAtaMan

2012-05-10 06:46

reporter  

EditorLinesV1.7z (83,011 bytes)

DAtaMan

2012-05-10 06:49

reporter   bugnote:0009115

Тестовый макрос - удаление пустых строк:

$If(Selected)
  %StartLine=Editor.Sel(0, 0);
  %EndLine=Editor.Sel(0, 2);
$Else
  %StartLine=1;
  %EndLine=Editor.Lines;
$End

%Count=%EndLine-%StartLine+1;
%i=%StartLine;
Editor.Undo(0);
$Rep(%Count)
  $If(Len(Trim(Editor.GetStr(%i)))==0)
    Editor.DelLine(%i);
  $Else
    %i=%i+1;
  $End
$End
Editor.Undo(1);

vskirdin

2012-05-10 08:14

administrator   bugnote:0009116

build 2663

vskirdin

2012-05-10 08:23

administrator   bugnote:0009117

Я так думаю, что "if (Flags.Check(FEDITOR_LOCKMODE))" для MCODE_F_EDITOR_GETSTR как то не совсем верно :-)
Мы же только берем строку, а не модифицируем.

vskirdin

2012-05-10 08:25

administrator   bugnote:0009118

...да и для Ins/Set нужно учитывать то, что описано в 0001879, а не просто GlobalEOL.

vskirdin

2012-05-10 08:28

administrator   bugnote:0009119

...кстати, а почему возврат для Ins/Set обозначен как S (срока)?
по коду вижу, что возвращается "1" или "не 1".
Где неправда?

DAtaMan

2012-05-10 08:38

reporter   bugnote:0009120

>if (Flags.Check(FEDITOR_LOCKMODE))" для MCODE_F_EDITOR_GETSTR как то не совсем верно
Угу, сначала было 4 case, потом упростил - и вот результат. :(

>...да и для Ins/Set нужно учитывать то, что описано в 0001879, а не просто GlobalEOL.

Да, оказывается я не обновился. :)

>...кстати, а почему возврат для Ins/Set обозначен как S (срока)?
Копипаст, будь он неладен. Конечно же N=...

vskirdin

2012-05-10 08:47

administrator   bugnote:0009121

ждем доп.патч :-)
(в Писании "S" заменен на "N")

DAtaMan

2012-05-10 10:51

reporter   bugnote:0009122

Вроде так.

Доп. изменения:
- Editor.GetStr работает и при залоченном редакторе
+ после Editor.SetStr позиция курсора не меняется

DAtaMan

2012-05-10 10:51

reporter  

EditorLinesV2.7z (71,858 bytes)

vskirdin

2012-05-10 11:14

administrator   bugnote:0009123

build 2664

DAtaMan

2012-05-10 11:40

reporter   bugnote:0009124

В Писании:
>Вставить значение S в строку с номером Line.

Наверное, правильнее написать "_после_ строки с номером Line".

vskirdin

2012-05-10 11:55

administrator   bugnote:0009125

Писание fixed.

DAtaMan

2012-05-10 12:44

reporter  

EditorLinesV3.7z (45,621 bytes)

DAtaMan

2012-05-10 12:46

reporter   bugnote:0009126

И ещё раз.

fixed: если строка не была указана, то она принимала значение "0"

vskirdin

2012-05-10 13:49

administrator   bugnote:0009127

может все же сделать... эээ
вместо
if (Line.isInteger())
сделать:
int nLine=Line.i()

тогда будут допустимы "числовые строки", например.

%a="12"
Editor.InsStr("foo",%a)

после 12 строки вставится строка "foo" (это к тому, что TVar "умеет" подобные "трюки").
Хотя, с другой стороны, если %a="foo", то вставка пройдет после текущей строки, хотя Editor.InsStr в этом случае должен был закончится с ошибкой...
Наверное в TVar надо вынести checkTypeString()...
В этом случае получим:

if (!Line.isInteger() && Line.checkTypeString() == tsInt)
    Line.toInteger();

if (S.isUnknown())
    S=L"";

Делаем?

vskirdin

2012-05-10 13:51

administrator   bugnote:0009128

точнее вот так:
        if (!Line.isInteger() && Line.checkTypeString() == tsInt)
            Line.toInteger();

        if (Line.isInteger())
        {
            if (S.isUnknown())
                S=L"";

            Ret=(__int64)CtrlObject->Plugins->CurEditor->VMProcess(MCODE_F_EDITOR_INSSTR, (wchar_t *)S.s(), Line.getInteger()-1);
        }

DAtaMan

2012-05-10 14:05

reporter   bugnote:0009129

>Делаем?

И для единообразия вообще во всех функциях, да? :-)

vskirdin

2012-05-10 15:58

administrator   bugnote:0009130

Угу

vskirdin

2012-05-10 17:16

administrator   bugnote:0009132

build 2669

DAtaMan

2012-05-10 17:25

reporter   bugnote:0009134

Не знаю, есть же int(...) и atoi(...), если так уж нужно.

Тут ещё такая проблема - если в строке есть табы, то Editor.SetStr глючит с позиционированием курсора.
Доделать-то можно, но не хотелось бы замедлять её работу.
Может совсем откатить позиционирование?

vskirdin

2012-05-10 17:31

administrator   bugnote:0009135

в принципе да, надо откатить - для позиционирования есть свои функции.

vskirdin

2012-05-14 10:01

administrator   bugnote:0009184

Last edited: 2012-05-14 10:33

build 2675
Для Editor.SetStr() удален функционал позиционирования курсора. Для этого есть соответствующие функции.

DAtaMan

2012-05-14 11:33

reporter   bugnote:0009186

editor.cpp, line 820: int CurPos=EditPtr->GetCurPos(); тоже можно убрать

Обнаружил баг на таком файле:
пустая строка
непустая строка
непустая строка
пустая строка
на _последней строке_ выполняем вышеприведённый макрос удаления пустых строк.
И после нажатия CtrlZ строки располагаются по-другому.

Где-то баг...
На всякий случай: с прежним вариантом GetStringByNumber точно так же. :-)

DAtaMan

2012-05-14 11:53

reporter   bugnote:0009188

С таким макросом так же:
Editor.Undo(0);
CtrlHome
$While(Editor.CurLine<Editor.Lines)
  $If(Len(Trim(Editor.Value))==0)
    CtrlY
  $Else
    Down
  $End
$End
Editor.Undo(1);

vskirdin

2012-05-14 12:33

administrator   bugnote:0009190

с последним макросом все ок, а с первым добавляются какие-то пустые строки

DAtaMan

2012-05-14 12:39

reporter   bugnote:0009191

Потому что на CtrlY
DeleteString(CurLine,NumLine,FALSE,NumLine);
  а в DelLine
DeleteString(CurLine,NumLine,TRUE,NumLine);

vskirdin

2012-05-14 12:42

administrator   bugnote:0009193

DeleteString(EditPtr,DestLine,___FALSE___,DestLine);

vskirdin

2012-05-14 12:43

administrator   bugnote:0009194

я так понимаю, с FALSE все ок?

DAtaMan

2012-05-14 12:47

reporter   bugnote:0009195

Да, но тогда нельзя удалить последнюю строку.
Лучше, если бы было можно.

vskirdin

2012-05-14 12:51

administrator   bugnote:0009196

Не, с FALSE тоже фигня. На последней строке пару пробелов давани и попробуй первый макрос :-)

vskirdin

2012-05-14 12:52

administrator   bugnote:0009197

походу что-то с Unod/Redo не так.

DAtaMan

2012-05-14 13:06

reporter   bugnote:0009198

Либо GetStringByNumber не ту строку выдаёт.

SUSim

2012-05-14 15:17

reporter   bugnote:0009199

Last edited: 2012-05-14 15:27

а ещё с выделением непонятки...
macro:post ShiftF4 Enter 1 Enter 2 Enter 3 Enter CtrlA editor.setstr("замена",2)

Хочется чтобы выделение оставалось на месте! также как и курсор.

SUSim

2012-05-14 15:25

reporter   bugnote:0009200

и в писании копипаст неправильный про editor.getstr:
"Возвращает 1 для успешно выполненной операции..." команда возвращает строку при успехе...

vskirdin

2012-05-14 16:30

administrator   bugnote:0009201

В 2675 удален функционал курсора.
Писание поправил

DAtaMan

2012-05-14 16:34

reporter   bugnote:0009202

>Хочется чтобы выделение оставалось на месте! также как и курсор.

Есть же спецфункции для этого. А текущая реализация работает быстро. Зачем замедлять?

SUSim

2012-05-14 16:47

reporter   bugnote:0009203

Какая спец функция для сохранения выделения?
Тогда уж надо однозначно выделение сбрасывать!!! а то части выделения остаются видимыми - макрос запустите, что очень смахивает на глюк... (иногда визуально выделения нет а Selection == 1)

Отличный функционал на порядок быстрее чем работа с редактором и в разы быстрее чем работа с поиск-замена.

DAtaMan

2012-05-14 17:33

reporter   bugnote:0009204

>Какая спец функция для сохранения выделения?
editor.sel(0, ...), editor.sel(2, ...) и т.д. Громоздко, да, но можно.

>Тогда уж надо однозначно выделение сбрасывать!!!
editor.sel(4) чем не вариант?

В идеале можно бы добавить:
editor.undo(4) - запомнить позицию курсора и координаты блока
editor.undo(5) - восстановить их

SUSim

2012-05-14 18:43

reporter   bugnote:0009205

>editor.sel(4) чем не вариант?
Пока поймёшь, что выделение НЕОБХОДИМО САМОМУ сбрасывать/восстанавливать, глюки ловить, но метод тыка - наш обычный макро-метод :)
Посмотрите на поведение редактора:
macro:post ShiftF4 Enter 1 Enter 2 Enter 3 Enter CtrlA editor.setstr("замена",2)

>В идеале можно бы добавить:
Я и за это, но тут лучше было бы стандартно сохранять выделение как при editor.pos например.

а сохранение курсора зря убрали, ладно bm.push bm.pop не сложно по сравнению с editor.sel editor.sel editor.sel editor.sel editor.pos и т.д....

JohnDoe

2013-04-11 18:37

updater   bugnote:0010750

А что в этом тикете не доделано?

И есть ли отличия в поведении от функций LuaFAR API
editor.GetString
editor.SetString
editor.InsertString
editor.DeleteString

?

shmuel

2014-02-09 15:40

developer   bugnote:0011828

> А что в этом тикете не доделано?

Вся требуемая функциональность вроде бы имеется, тикет можно закрывать.

shmuel

2014-02-13 19:50

developer   bugnote:0011829

Закрываю ввиду отсутствия возражений.

Issue History

Date Modified Username Field Change
2012-03-31 13:14 DAtaMan New Issue
2012-03-31 13:14 DAtaMan File Added: macro.patch
2012-03-31 14:32 SUSim Note Added: 0008836
2012-03-31 14:34 SUSim Note Edited: 0008836
2012-03-31 14:53 DAtaMan Note Added: 0008837
2012-04-01 04:32 SUSim Note Added: 0008838
2012-04-01 14:06 DiRTy_GaRRy Note Added: 0008841
2012-04-01 18:06 max rusov Note Added: 0008842
2012-04-02 06:28 DAtaMan Note Added: 0008843
2012-04-02 07:49 max rusov Note Added: 0008844
2012-04-06 08:26 DAtaMan Note Added: 0008846
2012-04-19 13:06 vskirdin Note Added: 0008963
2012-04-19 13:38 DAtaMan Note Added: 0008966
2012-05-10 06:45 DAtaMan Note Added: 0009114
2012-05-10 06:46 DAtaMan File Added: EditorLinesV1.7z
2012-05-10 06:49 DAtaMan Note Added: 0009115
2012-05-10 08:14 vskirdin Note Added: 0009116
2012-05-10 08:14 vskirdin Assigned To => vskirdin
2012-05-10 08:14 vskirdin Status new => feedback
2012-05-10 08:23 vskirdin Note Added: 0009117
2012-05-10 08:25 vskirdin Note Added: 0009118
2012-05-10 08:28 vskirdin Note Added: 0009119
2012-05-10 08:38 DAtaMan Note Added: 0009120
2012-05-10 08:38 DAtaMan Status feedback => assigned
2012-05-10 08:47 vskirdin Note Added: 0009121
2012-05-10 10:51 DAtaMan Note Added: 0009122
2012-05-10 10:51 DAtaMan File Added: EditorLinesV2.7z
2012-05-10 11:14 vskirdin Note Added: 0009123
2012-05-10 11:14 vskirdin Status assigned => feedback
2012-05-10 11:40 DAtaMan Note Added: 0009124
2012-05-10 11:40 DAtaMan Status feedback => assigned
2012-05-10 11:55 vskirdin Note Added: 0009125
2012-05-10 11:55 vskirdin Status assigned => feedback
2012-05-10 12:44 DAtaMan File Added: EditorLinesV3.7z
2012-05-10 12:46 DAtaMan Note Added: 0009126
2012-05-10 12:46 DAtaMan Status feedback => assigned
2012-05-10 13:49 vskirdin Note Added: 0009127
2012-05-10 13:51 vskirdin Note Added: 0009128
2012-05-10 14:05 DAtaMan Note Added: 0009129
2012-05-10 15:58 vskirdin Note Added: 0009130
2012-05-10 17:16 vskirdin Note Added: 0009132
2012-05-10 17:16 vskirdin Status assigned => feedback
2012-05-10 17:25 DAtaMan Note Added: 0009134
2012-05-10 17:25 DAtaMan Status feedback => assigned
2012-05-10 17:31 vskirdin Note Added: 0009135
2012-05-14 10:01 vskirdin Note Added: 0009184
2012-05-14 10:01 vskirdin Status assigned => feedback
2012-05-14 10:33 2useven10 Note Edited: 0009184
2012-05-14 11:33 DAtaMan Note Added: 0009186
2012-05-14 11:33 DAtaMan Status feedback => assigned
2012-05-14 11:53 DAtaMan Note Added: 0009188
2012-05-14 12:33 vskirdin Note Added: 0009190
2012-05-14 12:39 DAtaMan Note Added: 0009191
2012-05-14 12:42 vskirdin Note Added: 0009193
2012-05-14 12:43 vskirdin Note Added: 0009194
2012-05-14 12:47 DAtaMan Note Added: 0009195
2012-05-14 12:51 vskirdin Note Added: 0009196
2012-05-14 12:52 vskirdin Note Added: 0009197
2012-05-14 13:06 DAtaMan Note Added: 0009198
2012-05-14 15:17 SUSim Note Added: 0009199
2012-05-14 15:25 SUSim Note Added: 0009200
2012-05-14 15:26 SUSim Note Edited: 0009199
2012-05-14 15:27 SUSim Note Edited: 0009199
2012-05-14 16:30 vskirdin Note Added: 0009201
2012-05-14 16:34 DAtaMan Note Added: 0009202
2012-05-14 16:47 SUSim Note Added: 0009203
2012-05-14 17:33 DAtaMan Note Added: 0009204
2012-05-14 18:43 SUSim Note Added: 0009205
2013-02-03 00:33 alexy Severity minor => feature
2013-04-11 18:37 JohnDoe Note Added: 0010750
2014-02-09 15:40 shmuel Note Added: 0011828
2014-02-13 19:50 shmuel Build => 0
2014-02-13 19:50 shmuel Note Added: 0011829
2014-02-13 19:50 shmuel Status assigned => closed
2014-02-13 19:50 shmuel Resolution open => no change required
2014-02-13 19:50 shmuel Fixed in Version => 3.0
2018-01-27 13:17 zg Relationship added related to 0003577