ل مزيد من المعلومات حول لغة البرمجة البرمجة البرمجية لوا ، يرجى زيارةموقع Lua الإلكتروني.
يمكن لـ Double Commander تنفيذ برنامج لوا النصي ب واسطة الأمرcm ExecuteScript.
يجب تمرير المعلمات النصية ك ما هي دون حاجة إلى الهروب (ب دون اقتباس أو "\") ، ل ذلك نحتاج إلى استخدام٪ "0 المتغير: على سبيل المثال ، ل استخدام الملفات تحت المؤشر%"0%p0 و ليس%p0من أجل استخدام القائمة الحالية%"0%D و ليس%D。خلاف ذلك ، إذا قام Double Commander ب إضافة علامات اقتباس تلقائيًا ، ف س يتم تمرير ها ك جزء من المعلمة ، و س يتعين علي ك التفكير في ذلك.
ل لحصول على قائمة ب جميع الملفات المحددة ، يمكن نا استخدامالمتغيرات (%LU、%FU أو%RUأو الأوامر الداخلية (cm SaveSelectionToFileأوcm SaveFileDetailsToFile أوcm CopyFullNamesToClip أوcm CopyFileDetailsToClip).
على سبيل المثال ، يمكن نا استخدام%pفي هذه الحالة ، يقوم Double Commander ب تمرير أسماء جميع الملفات المحددة في سطر واحد ، مع فصل الأسماء ب مسافة.
يمكن ك أيضًا كتابة المكونات الإضافية ل ل محتوى ب استخدام البرنامج النصي لوا ، و يمكن العثور على أمثلة في مجلد البرنامج(plugins/wdx/sccripts). هناك صفحة على Wiki مخصصة ل كتابة المكونات الإضافية. القيود: يدعم فقط أنواع البيانات التالية
تحتوي القائمة أعلا ه على الأسماء الموجودة في ملف الرأس ، و في نص لوا يجب علي نا استخدام القيم المحددة بين قوسين.
فيما يتعلق ب رموز النصوص
تقبل جميع الدالات الإضافية الموضحة أدنا ه و س يطات السلسلة المشفرة UTF-8 و تُرجع السلسلة المشفرة (ب استثناء الدالةLazUtf8. ConvertEncoding).
تم استبدال بعض الدالات الموجودة في مكتبة Lua القياسية (أو تم كتابة وظائف جديدة) بدالة مزدوج Commander أو Free Pascal/Lazarus ، و التي توفر دعم UTF-8.
عند كتابة المكون الإضافي ، يجب أن نستخدم UTF-8(ft multiplechoice وftstring وftfulltext) ل ل بيانات النصية.
عند حفظ البرنامج النصي ، استخدم ترميز UTF-8 ب دون BOM.
ملاحظات
هناك إمكانية كبيرة ل لتشغيل الآلي ب استخدام Lua ، و لكن في بعض الحالات قد تحتاج إلى الانتباه إلى بعض التفاصيل.دعو نا نحاول جمع هذه الأشياء في هذا القسم الفرعي.
1.إذا تم تمكين خيارالتحديث التلقائي وتحميل قائمة الملفات في خيوط منفصلة ، س تعمل وظيفة التحديث ب شكل غير متزامن.في الوقت نفس ه ، يتم تنفيذ البرنامج النصي في الخيط الرئيسي لـ Double Commander ، ل ذلك في بعض الحالات ، قد يؤثر كل هذا على تشغيل البرنامج النصي الخاص بك.على سبيل المثال ، قد لا يعمل التنفيذ المستمر لأوامر التنقل في بعض الأحيان(على سبيل المثال ، دليل كبير ، قرص بطيئ) ، و في هذه الحالة ، حاول تعطيلتحميل قائمة الملفات في موضوع منفصل أو البحث عن حل بديل.
إذا قام البرنامج النصي الخاص بك ب إنشاء ملف جديد أو إعادة تسمية ملف موجود في اللوحة الحالية ، و لكن لم يتم إكمال و تنفيذ بعض الإجراءات الإضافية (على سبيل المثال ، تحديد ملف أو مؤشر تحريك) ، ف لن تعمل هذه الإجراءات في بعض الحالات: قد لا تكون جميع الملفات موجودة ب الفعل في اللوحة ، و س تحتاج إلى استدعاء الأمرcm Refreshأولاً.في ظل الشروط المذكورة ، س يتم تشغيلcm Refresh ب شكلغير متزامن ، و قد لا يكون لدى Double Commander وقت ل تحديث قائمة الملفات ب الكامل بعد التغييرات التي أجريت.
يعد التحديث التلقائي و تحميل قائمة الملفات في موضوع منفصل ميزة مريحة ل مدير الملفات ، ل ذلك تم العثور على طريقة عمل مستقرة من خلال التجربة ، أي إعادة التحكم إلى البرنامج مؤقتًا و السماح بقائمة الملفات ب تحديث ها ب الكامل:
DC.ExecuteCommand("cm_Refresh") i = 10 while i > 0 do SysUtils.Sleep(10) DC.ExecuteCommand("") i = i - 1 end
2.دالة Luaio.open استخدام الدالة C القياسيةfopenفي وضع النص ، يمكن ل هذه الدالة تحويل نوع ذيل السطر (CRLF أو LF أو CR) أثناء القراءة و الكتابة ، م ما قد يؤدي إلى نتائج غير مقصودة.إذا واجهت ملفات ذات أنواع مختلفة من النهاية أو كنت تكتب نصاً نصياً عبر منصات ، ف يجب أن تأخذ ذلك في الاعتبار ، أو أن النهج العملي الأكثر تفضيلًا ل لوضع الثنائي.
3.في Linux و أنظمة التشغيل Unix الأخرى ، استدعاء مربع حوارخصائص الملفاتContentGetValue مع الوظيفةCONTENT_DELAYIFSLOW علامة (المعلمة الرابعة ، القيمة 1) ، و التي تتجنب التأخير عند فتح النافذة: إذا كان استرجاع البيانات بطيئاً ، يمكن نا التحقق من خلال إضافة قيمة رمز و إرجاع هذه الحقول أو المكونات الإضافية ب بساطةnil استبعاد هذه البيانات.
4.إذا كان يجب على المكون الإضافي إرجاع سلسلة فارغة ، يتم تمرير هاnil أكثر من نقل"" أسرع.
ل تكون قادرة على تفسير ملفات لوا النصية ، نحتاج إلى ملف DLL لوا ، مع دعم Double Commander الإصدار 5.1-5.4.
يمكن نا استخدام ملفات DLL منمشروع LuaJIT.يجمع LuaJIT بين مترجم عالي السرعة مكتوب مع تجميع و مترجم JIT متقدم.ب الإضافة إلى ذلك ، حصلنا على مكتبة FFI ، و التي تسمح ب استدعاء وظائف C الخارجية من رمز Lua النقي و استخدام بنية بيانات C.
يحتوي DC ل إصدار Windows ب شكل افتراضي على DLL لوا (من مشروع LuaJIT في DC 0.9.7 و الإصدارات الأحدث) و في حالات أخرى ، يمكن نا العثور علي ه و تثبيت ه من خلال مدير الحزمة أو تجميع ها ب نفس ك.إذا كنا نستخدم إصدار 64 بت من DC ، ف يجب أن يكون DLL أيضًا إصدار 64 بت.
ب شكل افتراضي ، تبحث DC عن ملفات تحتاسمlua5. 1. dll (Windows) ، أوliblua5. 1. so. 0 (Unix أو GNU/Linux) أوliblua5. 1. dylib (macOS) في دليل ها و كتالوج النظام.يمكن نا تغيير اسم الملف (و المسار) في معلماتملف مكتبة Lua التي نريد استخدام ها.
يوفر Double Commander بعض مكتبات الوظائف ل برنامج Lua الخاص ب نا.
و فيما يلي قائمة ب هذه المكتبات.
| قائمة المكتبة | ||
|---|---|---|
| اسم | المكتبة | وصف موجز |
| DC | Double Commander | |
| SysUils | مختلف وظائف النظام | |
| Clipbrd | توفر وظيفة الحافظة الخارجية | |
| Dialogs | تفاعلات مع المستخدمين | |
| دالة سلسلة | LazUtf8 | UTF-8|
| Char ل | لحصول على معلومات الحرف | |
| OS | الدالات المتعلقة ب نظام التشغيل | |
تحتوي المكتبة على وظائف مزدوجة Commander.
إن ها فيDC يتم تقديم جميع الوظائف في الجدول.
| DC مكتبة | |
|---|---|
| اسم | الوصف |
|
DC.LogWrite(sMessage, iMsgType, bForce, blogFile) اكتب رسالة إلى نافذة السجل:
|
|
|
iPanel = DC.CurrentPanel () احصل على لوحة نشاط: قم ب إرجاع 0 إذا كانت اللوحة اليسرى نشطة ، و إلا قم ب إرجاع 1. DC. Current Panel (iPanel) إعداد لوحة النشاط: iPadel يساوي اللوحة اليسرى عند 0 و اللوحة اليمنى عند 1. |
|
|
DC.ExecuteCommand(sCommand, Param1, Param2,..., ParamX) هذا يسمح ل لبرنامج النصي ب استدعاءالأوامر الداخليةل لضابط Double Commander. sCommandهو اسم الأوامر الداخلية الفعلي. يمكن نا توفير أي عدد من البارام المدعومة ب الأوامر... (ج) البارامترات. |
|
ب الإضافة إلى الأوامر الداخلية ، يمكن نا أيضًا استخدام الأمر الخاصcm ExecuteToolBarItemفي البرنامج النصي ، و الذي يسمح ب استدعاء زر شريط الأدوات من خلال المعرف (في البرنامج ، توفر هذه الميزة وظيفة استخدام اختصارات ل أزرار شريط الأدوات).يستخدم هذا الأمر ب طريقة مماثلة ل ل أوامر الداخلية العادية (انظر المثال أدنا ه) و يحتوي على المعلمات التالية:
| البارامترات | القيمة | الوصف |
|---|---|---|
| ToolBarID | TfrmOptionsToolbar | زر شريط الأدوات الرئيسي |
| TfrmOptionsToolbarMiddle | زر شريط الأدوات الوسطى | |
| (غير موجودة) | زر شريط الأدوات الرئيسية | |
| ToolIemID | الهوية | معرف الزر الوحيد |
المعرّف الوحيد المخزّن فيID في علامة التبويب ، لدي نا عدة طرق ل لحصول علي ها: يمكن ك العثور على زر في ملفdoublecmd. xmlأو ملف النسخ الاحتياطي ل شريط الأدوات ، أو ب بساطة نسخ الزر إلى الحافظة و لصق رمز ها في محرر النص.
ملاحظة: يتم إنشاء المعرفات تلقائيًا و لا يجب مطابقت ها مع معرفات زر مماثل في نسخة أخرى من البرنامج ، و لكن يمكن نا تعيين قيم نا يدويًا إذا لزم الأمر.
في هذا المثال ، قمنا ب كتابة نص بسيط من شأن ه أن يقوم ب ما يلي:
-- 1. 聚焦到右侧面板。 DC.ExecuteCommand("cm_FocusSwap", "side=right") -- 2. 关闭所有标签页。 DC.ExecuteCommand("cm_CloseAllTabs") -- 3. 切换到特定目录。 DC.ExecuteCommand("cm_ChangeDir", "E:\\FakeKey\\Documents\\Music") -- 4. 聚焦到左侧面板。 DC.ExecuteCommand("cm_FocusSwap", "side=left") -- 5. 关闭所有标签页。 DC.ExecuteCommand("cm_CloseAllTabs") -- 6. 切换到特定目录。 DC.ExecuteCommand("cm_ChangeDir", "C:\\Users\\Public\\Music") -- 7. 打开新标签页。 DC.ExecuteCommand("cm_NewTab") -- 8. 切换到特定目录。 DC.ExecuteCommand("cm_ChangeDir", "E:\\VirtualMachines\\ShareFolder")
ب استخدام الأمر الداخليcm ExecuteScript ، يمكن نا تكوين زر شريط الأدوات ل تنفيذ البرامج النصية لدي نا.
ل نفترض أن هذا الملف النصي هوE:\scripts\lua\music.luaيمكن نا تكوين الزر على هذا النحو:

ب الإضافة إلى ذلك ، يمكن نا استخدام محرر Double Commander الداخلي ل تحرير النصوص.إذا كان اسم الملف موجوداً.lua الملحق ، الذي س يتعرف علي ه المحرر الداخلي و يوفر تمييزًا قواعد اللغة لغة Lua:

تحتوي المكتبة على وظائف نظام مختلفة.
إن ها فيSysUtils يتم توفير جميع الوظائف في الجدول.
| مستودع النظم | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| اسم | الوصف | ||||||||||
|
SysUils.Sleep(iMilliseconds) إيقاف البرنامج النصي ل تنفيذ عدد مللي ثانية محددةمن iMilliseconds. |
|||||||||||
|
SysUils.GetTickCount () إرجاع عدد الساعات المتزايدة.يمكن استخدام ه ل قياس الوقت ، و لكن لا ينبغي افتراض الفترات الفاصلة بين الدقائق. |
|||||||||||
|
bExists = SysUils.FileExists(sFame) تحقق من وجود ملفات محددة في نظام الملفات. إذا كان هناك ملفيسمىsFNameعلى القرص ، يتم إرجاع القيمة فيbExists |
|||||||||||
|
bExists = SysUils.DirectoryExists(sDirectory) تحقق م ما إذاكان sDirectoryموجودًا في نظام الملفات و أن ه دليل. إذا كان الأمر ك ذلك ، ف س ترجع الدالة قيمة فيbExists |
|||||||||||
|
iATr = SysUils.FileGetAttr(sFileFile) إرجاع إعدادات خصائص الملفsNameفيiAtr. ل لحصول على وصف مفصل ل قيمة الإرجاع ، يرجى الرجوعهنا. |
|||||||||||
|
Handle, FindData = SysUils.FindFirst(sPath) ابحث عن الملفات التي تتطابقمعsPath ، وعادةً ما تستخدم أحرف البدل. إذا لم يتم العثور على ملف ، ف س يقومHandle عند العثور على عنصر واحد على الأقل ، يمكن استخدامHandleالعائد ل لمتابعة يحتوي جدولFindDataعلى معلومات عن ملف أو دليل تم العثور علي ه. فيما يلي الحقول في جدولFindData:
|
|||||||||||
|
Result, FindData = SysUils.FindNext(Handle) عن طريق إعادة استخدامHandleالتي سبق إرجاع ها ، ابحث عن إذا تم العثور على وثيقة أو فهرس ،ف إن النتيجةالتي يتم إرجاع ها لن تكون فارغة ، و إلا ف إن مع ملاحظة: آخر مرة |
|||||||||||
|
SysUils. FindCose (Handle) إنهاء سلسلة الإفراج عن أي ذاكرة تستخدم ها هذه المكالمات. من الضروري تماما إجراء هذه المكالمة ، و إلا ف قد يؤدي ذلك إلى تسرب الذاكرة. |
|||||||||||
|
bult = SysUils.CreateDirectory(sDirectory) قم ب إنشاء سلسلة من الكتالوجات ، وsDirectory هو المسار الكامل ل لدليل. إذاكان sDirectory موجودًا ب الفعل أو تم إنشاؤ ه ب نجاح ، ف سوف يتم إرجاع ها |
|||||||||||
|
bult = SysUils.CreateHardLink(sFile, sLinkName) إنشاء رابط صلبsLinkName ل ملفsName. إذا نجحوا في العودة |
|||||||||||
|
bult = SysUils.CreateSymbolicLink(sFile, sLinkName) إنشاء رابط رمزيsLinkName ل لملف أو الدليلsFile. إذا نجحوا في العودة |
|||||||||||
|
sTarget = SysUils.ReadSymbolicLink(sLinkName, bRecursive) قراءة الرمز الرابط إلىsLinkName الهدف. إذاكان bRecursive إرجاع المسار الذي يشير إلي هالرابط الرمزي sLinkName، أو إذا كان الارتباط غير صحيح أو الملف الذي يشير إلي ه غير موجود وbRecursive |
|||||||||||
|
sName = SysUils. ExtracFile (sFileMile) استخراج قسم اسم الملف من اسم الملف في المسار الكامل. يتكون اسم الملف من آخر حرف فاصل الدليل ("/"أو "\") أو جميع الأحرف بعد حرف محرك الأقراص. |
|||||||||||
|
sExt = SysUils. ExtctFileExt (sFileFileFile) إرجاع امتداد اسم الملف (الآخر "..."بعد (نقطة) جميع الأحرف ، ب ما في ذلك "..."حرف). |
|||||||||||
|
sPath = SysUils. ExtracFilePath (sFileFile) استخراج المسار من اسم الملف (ب ما في ذلك حرف محرك الأقراص). يتكون المسار من جميع الأحرف التي تسبق آخر حرف فاصل الدليل ("/"أو "\") ، ب ما في ذلك الفاصل الدليل نفس ه. |
|||||||||||
|
sDir = SysUils.ExtracTFileDir(sFileFile) استخراج أجزاء الدليل منsFileFileفقط ، ب ما في ذلك حرف محرك الأقراص. اسم الدليل ليس ل ه نهاية الفصل ، و هذا مع |
|||||||||||
|
sDrive = SysUils. ExtracFileDrive (sFileFile) استخراج جزء محرك الأقراص من اسم الملف. لاحظ أن بعض أنظمة التشغيل لا تدعم أحرف محرك الأقراص. |
|||||||||||
|
sName = SysUils. GetAsolutePath (sFame, sBaseDirectory) إرجاع المسار المطلق (الكامل) ل ل ملف:
إذا تعذر الحصول على المسار المطلق ، ف س ترجع الدالة قيمةsName. |
|||||||||||
|
sName = SysUils.GetRelativePath(sFile, sBaseDirectory) إرجاع اسم الملف ب النسبة إلى الدليل المحدد:
إذا كانsFile وsBaseDirectory يحتويان على نفس القيمة ، ف س تُرجع الدالة سلسلة فارغة ("").إذا تعذر الحصول على اسم الملف مع مسار نسبي ، ف س تُرجع الدالة قيمةsName. |
|||||||||||
|
bult = SysUils.MatchesMask(sFile, sMask, iMask Options) إذا تطابقsName مع القناعsMaskالممر ، يتم إرجاع ها يتم تعيين iMaskOptions(المعلمات الاختيارية ، افتراضيا 0) إلى مجموع القيم التالية:
|
|||||||||||
|
bult = SysUils.MatchesMaskList(sFile, smaskList, sSeparator, iMaskOptions) إذاتطابق sFile مع واحد على الأقل من قناع التمريدsMaskList الذي يتمتفصيل ه ب و اسطةsSeparator (التي هي افتراضية"؛") ، يتم إرجاع sSeparatorوiMaskOptions (انظر أعلا ه) هي المعلمات الاختيارية. |
|||||||||||
|
sTempName = SysUils.GetTempName () س يتم إرجاع اسم ملف يستخدم كاسم ملف مؤقت (في دليل الملفات المؤقتة ل ل نظام) على غرار الدالةos.tmpname، و لكن س يتم إنشاء الملف في دليل فرعي يتم حذف ه تلقائيًا عند إيقاف تشغيل Double Commander. |
|||||||||||
|
SysUtils.PathDelim يستخدم نظام التشغيل الحالي ل فصل أحرف اسم الدليل في اسم الملف الكامل. في نظام Unix/Linux ، س يكون الفاصل الدليل "/"و في Windows س يكون "\". |
|||||||||||
FileGetAttr إرجاع إعدادات خصائص الملفsName.
الخصائص هي مزيجORمن الثوابت التالية:
| SysUils.FileGetAttr إرجاع الثوابت المستخدمة في القيم | |
|---|---|
| معنى | القيمة |
0x00000001 fa ReadOnly |
الوثائق متاحة ل لقراءة فقط |
0x0000002 faHidden |
الوثائق مخفية. في Unix/Linux ، يعني هذا أن اسم الملف يبدأ ب نقطة. |
0x0000004 faSysFile |
الوثائق هي وثائق نظام. في Unix/Linux ، و هذا يعني أن الملف هو حرف أو جهاز كتلة تسمية خط الأنابيب (FIFO). |
0x0000008 faVolumeId |
الشمس. يعمل فقط على أنظمة الملفات FAT العادية (غير VFAT أو FAT32) على DOS/Windows. |
0x00000010 faDirectory |
الوثيقة هي قائمة. |
0x00000020 faArchive |
و حُفظت الوثائق. مستحيل في Unix/Linux. |
0x0000400 faSymLink |
الملف عبارة عن رابط رمزي. |
| ملاحظة: في حالة حدوث خطأ ، س يتم إرجاع-1. | |
يرجى الاطلاع على أمثلة فيالقسم التالي.
السيناريو التالي هوSysUtils.FileGetAttr مثال على الاستخدام.
عند ما يتم اكتشاف المعلمة ك دليل ، ف إن ه يفتح علامة تبويب جديدة في لوحة النشاط و يتحول إلى الدليل.
local params = {...} local iAttr if #params == 1 then -- 我们至少得到了一个参数? iAttr = SysUtils.FileGetAttr(params[1]) if iAttr > 0 then -- 我们得到了一个有效的属性? if math.floor(iAttr / 0x00000010) % 2 ~= 0 then -- 第4位被设置?所以它是一个目录。 DC.ExecuteCommand("cm_NewTab") DC.ExecuteCommand("cm_ChangeDir", params[1]) end end end
في المثال أعلا ه ،params[1] هي المعلمة الأولى التي تمرير ها إلى البرنامج النصي.
عند استخدام الأمر الداخليcm ExecuteScript ، س تكون الوسيطة الأولى التي يتم تمرير ها بعد اسم الملف النصي.
ل ذلك ، في مثال نا ، يمكن نا تكوين زر شريط الأدوات على النحو التالي:

في هذا المثال ، المعلمات%"0%p و س يتم تمرير ها إلى السيناريو.يمثل هذا اسم ملف العنصر المحدد في لوحة النشاط الحالية غير المعلنة علامة اقتباس.
في المثال النصي التالي ، س نقوم ب مسح محتوى الدليل الذي تم تلقي ه في الوسيطة و نخزن بيانات النتائج في ملف نصي ب اسم الملف الذي تم تم تمرير ه ب الوسيطة الثانية.
و هذا س يعطي نا ف هما جيدا.FindFirst、FindNext وFindClose الاستخدام.
local params = {...} if #params == 2 then -- 我们得到了两个参数? local Result = nil local hOutputFile = nil hOutputFile = io.output(params[2]) local Handle, FindData = SysUtils.FindFirst(params[1] .. "\\*") if Handle ~= nil then repeat io.write(FindData.Name .. "\r") io.write(FindData.Size .. "\r") io.write("---------------\r") Result, FindData = SysUtils.FindNext(Handle) until Result == nil SysUtils.FindClose(Handle) io.close(hOutputFile) end end
في المثال أعلا ه ، نحتاج إلى تمرير اثنين من المعلمات إلى البرنامج النصي:
ل ذلك ، من السهل استخدام الأمر الداخليcm ExecuteScript ل تكوين زر شريط الأدوات و تمرير المعلمات ل لقيام ب كل شيء.

في هذا المثال ، المعلمات%"0%Ds و س يتم تمرير ها إلى البرنامج النصي كوسيطة أولى.يمثل هذا الدليل الذي يظهر في لوحة النشاط غير المقتبسة.
يوفر Double Commander وظيفة الحافظة الخارجية ل لبرنامج النصي لوا.
و يبين الجدول التالي الوظائف ذات الصلة:
| حزمة الحافظة | |
|---|---|
| اسم | الوصف |
|
Clipbrd.Clear () إزالة محتوى الحافظة. |
|
|
sVar = Clipbrd.GetAsText () احصل على محتوى النص الحالي ل لحافظة و تعيين ه إلىsVar.إذا كانت الحافظة لا تحتوي على نص ، ف س ترجع الدالة سلسلة فارغة. |
|
|
Clipbrd.SetAsText(sVar) قم ب تخزين محتوى النص منsVarفي الحافظة. |
|
|
Clipbrd.SetAsHtml(sHtml) إضافة النص ب تنسيق HTMLsHtml إلى الحافظة ( س يتم إدراج هذا المحتوى في التطبيقات التي تدعم تنسيق الحافظة هذا ، مثل MS Word وWriter LO و غير ها. الاستخدام على سبيل المثال ، قد يكون لدي نا ما يلي:
إذا قمنا ب التبديل إلى دفتر المفكرة في محاولة ل صق شيء ما ، ف س يتم ل صق نص عادي ل نا. |
|
يستخدم المثال التالي ثلاث وظائف مرتبطة ب الحافظة:Clear、GetAsText وSetAsText。
هذا برنامج نصي طويل نسبيًا ، لكن ه يجمع ب شكل جيد بعض الوظائف التي رأيت أعلا ه.
يفترض أن لوحة النشاط لدي نا موجودة حاليًا في دليل يحتوي على العديد من الملفات النصية المصدرية.
كما يفترض أن لدي نا كلمة واحدة حاليًا في الحافظة ، و سوف يتلقى مجلد النشاط الحالي كوسيطة واحدة.
يقوم البرنامج البرنامجي ب مسح الملفات على مستوى الدليل الحالي و قراءة محتويات ها تلو الآخر ل لكشف عن سطر النص الذي يحتوي على كلمات في الحافظة.
بعد ذلك ، س يتم وضع اسم الملف الذي يحتوي على سطر واحد على الأقل من هذه الكلمة في الحافظة.
بعد ذلك ، س يستخدم البرنامج النصي الأمر الداخليcm LoadSectionFromClip ، و س يتم تحديد الملف الذي يحتوي على هذه الكلمة.
ب الإضافة إلى ذلك ، في النهاية ، س نعيد الكلمات الأصلية التي نحتاج إلى البحث عن ها إلى الحافظة.
local params = {...} local Result = nil local iAttr local bFound = false local sCompleteFilename = "" local hInputFile = nil local sLine = "" local iPosS local iPosE local sFileToSelect = "" local sSearchString = "" if #params == 1 then -- 我们得到了参数? sSearchString = Clipbrd.GetAsText() -- 获取要搜索的表达式。 Clipbrd.Clear() -- 确保剪贴板中没有任何内容。 DC.ExecuteCommand("cm_MarkUnmarkAll") -- 确保没有选中任何内容。 -- 让我们逐个扫描目录中的所有文件。 local Handle, FindData = SysUtils.FindFirst(params[1] .. "\\*") if Handle ~= nil then repeat sCompleteFilename = params[1] .. "\\" .. FindData.Name iAttr = SysUtils.FileGetAttr(sCompleteFilename) if iAttr > 0 then -- 我们得到了一个有效的属性? -- 我们需要文件,而不是目录! if math.floor(iAttr / 0x00000010) % 2 == 0 then -- 现在让我们逐行读取文件,直到结束或找到。 hInputFile = io.open(sCompleteFilename, "r") bFound = false while bFound == false do sLine = hInputFile:read() if sLine == nil then break end iPosS, iPosE = string.find(sLine, sSearchString) if iPosS ~= nil then bFound = true end end if bFound == true then sFileToSelect = sFileToSelect .. FindData.Name .. "\n" end io.close(hInputFile) end end Result, FindData = SysUtils.FindNext(Handle) until Result == nil SysUtils.FindClose(Handle) end -- 如果我们找到了什么,就选中它! if sFileToSelect ~= "" then Clipbrd.SetAsText(sFileToSelect) DC.ExecuteCommand("cm_LoadSelectionFromClip") end Clipbrd.SetAsText(sSearchString) -- 恢复我们在剪贴板中的内容。 end
تسمح المكتبة ل لبرمجة النصية ب التفاعل مع المستخدمين و عرض الرسائل و المطالبات ب إدخال الإجابات و ما إلى ذلك.
و يبين الجدول التالي الوظائف ذات الصلة:
| إطار الحوار | |
|---|---|
| اسم | الوصف |
|
iTel = Dialogs.MessageBox(sMessage, sButton, iFlags) عرض مربع رسالة يطلب من المستخدمين النقر على زر يتم إرجاع ه ب واسطة وظيفة:
|
|
|
b Result, snswer = Dialogs.InputQuery(s Title, sMessage, bMask, sDefault) عرض مربع طلب حيث يمكن ل لمستخدم إدخال سلسلة:
|
|
|
sItem, iItem = Dialogs.InputListBox(s Title, sessage, a Items, sDefault) عرض مربع حوار يسمح ل لمستخدمين ب الاختيار من قائمة المشاريع:
|
|
Dialogs.MessageBox يتم التحكم في الأزرار التي تظهر ها الدالة ب واسطة بت أو قيم الثابت التالي:
| Dialogs.MessageBox يعرض الثابت ButFlags على زر | |
|---|---|
| تظهر | القيمة الثابتة زرًا | من اليسار إلى اليمين
0x0000 MB OK |
|
0x0001 MB OKCANCEL |
|
0x0002 MB ABORTTRYIGNORE |
|
0x0003 MB YESNOCCANCEL |
|
0x0004 MB YESNO |
|
0x0005 MB RETRYCANCEL |
|
Dialogs.MessageBox يتم التحكم في نمط النافذة الذي تظهر ه الدالة ب واسطة بت أو قيم الثوابت التالية:
| Dialogs.MessageBox ثابت ButFlags ل أيقونات و أنماط | |
|---|---|
| نمط | النافذة الثابتة |
0x0040 MB ICONINFORMATION |
|
0x0030 MB ICONWARNING |
|
0x0020 MB ICONQUESTION |
|
0x0010 MB ICONERROR |
|
Dialogs.MessageBox يتم التحكم في زر النشاط الافتراضي الذي تظهر ه الدالة ب واسطة بت أو قيمة الثوابت التالية:
| Dialogs.MessageBox الثابت ButFlags على زر افتراضي | |
|---|---|
| القيمة الثابتة | زر افتراضي |
0x0000 FB DEUTTON1 |
الزر الأول على اليسار |
0 x0100 FB DEUTTON2 |
الزر الثاني على اليسار |
0x0200 FB DEUTTON3 |
الزر الثالث على اليسار. |
Dialogs.MessageBox تشير الأرقام التي تُرجع ها الدالة إلى الزر الذي يضغط علي ه المستخدم ، ك ما يلي:
| Dialogs.MessageBox قيمة ButPressed التي يتم إرجاع ها عند الضغط على الزر | |
|---|---|
| الضغط على الزر | الثابت |
0x0000 mrNone |
لم يضغط على أي زر |
0x0001 mrOK |
|
0x0002 MRCancel |
|
0x0003 mrAbort |
|
0x0004 mrRetry |
|
0x0005 mrIgnore |
|
0x0006 mrYes |
|
0x00007 mrNo |
|
ملاحظة: إذا اضغط على "x" في الزاوية اليمنى السفلى أو اضغط علىEsc قم ب إغلاق النافذة ، ب إرجاع قيمة الزر "إلغاء".
و فيما يلي استخدامDialogs.MessageBox البرامج النصية الصغيرة و ك ذلك النتائج التي سوف تظهر في نافذة:
-- 显示的按钮 MB_OK = 0x0000 MB_OKCANCEL = 0x0001 MB_ABORTRETRYIGNORE = 0x0002 MB_YESNOCANCEL = 0x0003 MB_YESNO = 0x0004 MB_RETRYCANCEL = 0x0005 -- 窗口样式 MB_ICONINFORMATION = 0x0040 MB_ICONWARNING = 0x0030 MB_ICONQUESTION = 0x0020 MB_ICONERROR = 0x0010 -- 默认按钮 MB_DEFBUTTON1 = 0x0000 MB_DEFBUTTON2 = 0x0100 MB_DEFBUTTON3 = 0x0200 -- 返回按下的按钮 mrNone = 0x0000 mrOK = 0x0001 mrCancel = 0x0002 mrAbort = 0x0003 mrRetry = 0x0004 mrIgnore = 0x0005 mrYes = 0x0006 mrNo = 0x0007 iFlags = MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2 iButton = Dialogs.MessageBox("您想要退出吗?", "问题", iFlags) if iButton == mrYes then DC.ExecuteCommand("cm_Exit") end

و فيما يلي استخدامDialogs.InputQuery البرامج النصية الصغيرة و ك ذلك النتائج التي سوف تظهر في نافذة:
bResult, sAnswer = Dialogs.InputQuery("身份验证", "请输入您的姓名:", false, "约翰") if bResult == true then Dialogs.MessageBox("您好 " .. sAnswer .. "!", "欢迎!", 0x0040) end

توفر هذه المكتبة الدعم الأساسي ل ترميز UTF-8.
إن ها فيLazUtf8 يتم تقديم جميع الوظائف في الجدول.
| مكتبة UTF-8 | |
|---|---|
| اسم | الوصف |
|
iResult = LazUtf8. Pos (SearchText, SourceText, Offset) ابدأ ب البحث عن سلسلة فرعية من موقع محدد في السلسلة.البحث يميز الأحرف الكبيرة. إرجاع المكان الذي ظهرت في ه السلسلة الفرعيةSearchText ل أول مرة فيSourceText ،و بدأ البحث منالموقعOffset إذا لم يظهرSearchTextفيSourceText بعد |
|
|
LazUtf8. Next (String) وظيفة مكرر تقوم ب إرجاع الحرف التالي فيString فيكل مرة يتم استدعاء ها و مكان بدء الحرف (ب البايتات). مثال: -- 以 "位置 : 字符" 的形式打印值对 for iPos, sChar in LazUtf8.Next(String) do DC.LogWrite(iPos .. " : " .. sChar) end |
|
|
sult = LazUtf8. Copy (String, iIndex, iCount) نسخ جزء من سلسلة النص. يعيد Copy سلسلة نصية هي نسخة من حرفiCount فيString يبدأمنموقع iIndex. إذاكان iCount أكبر من طولسلسلة String، ف س يتم اقتطاع النتيجة.إذاكان iIndex أكبر منطول سلسلة String ، يتم إرجاع سلسلة فارغة. |
|
|
iResult = LazUtf8. Length (String) إرجاع عدد أحرف UTF-8 في السلسلة. |
|
|
sult = LazUtf8. UpperCase (String) تلقي سلسلة نصية و إرجاع نسخة من السلسلة حيث تم تغيير جميع الأحرف الصغيرة إلى أحرف كبيرة. |
|
|
sResult = LazUtf8. LowerCase (String) تلقي سلسلة نصية و إرجاع نسخة من السلسلة حيث تم تغيير جميع الأحرف الكبيرة إلى أحرف صغيرة. |
|
|
sult = LazUtf8. ConvertEncoding (String, FromEnc, ToEnc) تحويل ترميزStringمنFromEnc إلىToEnc. قائمة قيم الترميز المدعومة:
في Windows (الإنجليزية أو الروسية):
|
|
|
sEnc = LazUtf8. DetectEncoding (String) إرجاع قيمة الترميز ل لنص المنقول. |
|
تحتوي المكتبة على وظائف ل لتحقق م ما إذا كانت الأحرف تنتمي إلى فئة Unicode معينة ، فضلاً عن وظائف ل لحصول على فئات الأحرف.
قائمة ب الدالات المتاحة في المكتبة:
| مكتبة الأحرف | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| اسم | الوظيفة | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
iResult = Char. GetUnicodeCaracter) عودة الحرف
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
bult = Char.IsDigit(Caracter) إذا كان حرفCharacter في فئةNd، يتم إرجاع ه |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
bult = Char.IsLetter(Caracter) إذا كان حرفCharacter في فئةLu أوL أوLt أوLm أوLo ، فس يتم إرجاع حرف Character |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
bult = Char.IsLetterOrDigit(Caracter) إذا كانت أحرفCharacterموجودة في فئةLu أوL أوLt أوLm أوLoأوNd أوNl ، ف |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
bult = Char.IsLower(Caracter) إذا كان حرفCharacter في فئةLl، يتم إرجاع الحرف |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
bult = Char.IsUpper(Caracter) إذا كان حرفCharacter في فئةLu، يتم إرجاع ه |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ب الإضافة إلى ذلك ، تدعم هذه الوظائف استخدام وسيطتين: يمكن نا تحديد مكان السلسلة و مكان الأحرف في تلك السلسلة بدلاً من الأحرف الفردية.
تحتوي المكتبة على وظائف مرتبطة ب نظام التشغيل الذي يعمل في ه Double Commander.
فيما يلي قائمة ب الدالات المتوفرة في المكتبة:
| مكتبة نظم التشغيل | |
|---|---|
| اسم | الوظيفة |
|
iResultCode = os.execute(sCommand) س يتمتشغيل sCommand ك ما لو أدخل في سطر الأوامر ، و إرجاع رمز النتيجة ل لعملية. يمكن أن تكونsCommand:
|
|
|
sTempName = os.tmpname () س يتم إرجاع اسم ملف يستخدم كاسم ملف مؤقت (في فهرس الملفات المؤقت ل ل نظام). |
|
|
b Result, sError, iError = os.remove(sFName) س يتم حذف الملفات أو الدليلات التيتسمىsName. إذا نجحت ، ف إن الوظيفة تعود إذا فشلت الدالة ، تُرجع ثلاثة أشياء:
|
|
|
bult, sError, iError = os.rename(sOldName, newsName) س يتم إعادة تسميةالملف sOldNameب اسم جديدsNewName. ملاحظة: إذا كان الملف الذي يحمل اسم NewsName موجودًا ب الفعل ، س يتم استبدال ه! إذا نجحت ، ف إن الوظيفة تعود إذا فشلت الدالة ، تُرجع ثلاثة أشياء:
|
|
|
Value = os.getenv(VariableName) س يتم إرجاعقيمةالمتغيرVariableNameالذي يتم تمرير هفي الوسيطة. |
|
|
os.setenv(VariableName, Value) إضافة أو تغيير متغيرات بيئةVariableName.في حالة حدوث خطأ ، ترجع الدالة-1 |
|
|
os.unsetenv(VariableName) قم ب إزالة متغيرات بيئةVariableName.في حالة حدوث خطأ ، ترجع الدالة-1 |
|