Double Commander

2.15. लुआ स्क्रिप्ट (Lua Script)

सामग्री

1. परिचय
2. आवश्यक DLL
3. Double Commander फ़ंक्शन लाइब्रेरी
3.1. DC लाइब्रेरी
3.1.1. DC.ExecuteCommand उपयोग उदाहरण
3.2. सिस्टम लाइब्रेरी
3.2.1. SysUtils.FileGetAttr रिटर्न मान विवरण
3.2.2. SysUtils.FileGetAttr उपयोग उदाहरण
3.2.3. FindFirst, FindNext और FindClose उपयोग उदाहरण
3.3. क्लिपबोर्ड लाइब्रेरी
3.3.1. क्लिपबोर्ड लाइब्रेरी उपयोग उदाहरण
3.4. संवाद लाइब्रेरी
3.4.1. Dialogs.MessageBox में प्रदर्शित बटन
3.4.2. Dialogs.MessageBox की विंडो शैलियाँ
3.4.3. Dialogs.MessageBox का डिफ़ॉल्ट सक्रिय बटन
3.4.4. Dialogs.MessageBox के रिटर्न मान
3.4.5. Dialogs.MessageBox उपयोग उदाहरण
3.4.6. Dialogs.InputQuery उपयोग उदाहरण
3.5. UTF-8 लाइब्रेरी
3.6. वर्ण लाइब्रेरी
3.7. ऑपरेटिंग सिस्टम लाइब्रेरी
4. अनुक्रमणिका

1. परिचय

लुआ (Lua) स्क्रिप्टिंग प्रोग्रामिंग भाषा के बारे में विस्तृत जानकारी के लिए, कृपया Lua वेबसाइट पर जाएं।

Double Commander, cm_ExecuteScript कमांड के माध्यम से लुआ स्क्रिप्ट निष्पादित कर सकता है।
स्क्रिप्ट मापदंडों (Parameters) को बिना एस्केप किए (बिना उद्धरण चिह्नों या “\” के) वैसे ही पास किया जाना चाहिए, इसके लिए हमें %"0 चर (Variable) का उपयोग करने की आवश्यकता है: उदाहरण के लिए, कर्सर के नीचे की फ़ाइल के लिए %p0 के बजाय %"0%p0 का उपयोग करें, और वर्तमान निर्देशिका के लिए %D के बजाय %"0%D का उपयोग करें। अन्यथा, यदि Double Commander स्वचालित रूप से उद्धरण चिह्न जोड़ता है, तो वे पैरामीटर के हिस्से के रूप में पास हो जाएंगे और आपको इस पर विचार करना होगा।
सभी चयनित फ़ाइलों की सूची प्राप्त करने के लिए, हम चरों (%LU, %FU या %RU) या आंतरिक कमांडों (cm_SaveSelectionToFile, cm_SaveFileDetailsToFile, cm_CopyFullNamesToClip या cm_CopyFileDetailsToClip) का उपयोग कर सकते हैं। उदाहरण के लिए, हम %p का उपयोग कर सकते हैं: इस मामले में, Double Commander सभी चयनित फ़ाइलों के नामों को एक ही पंक्ति में स्पेस द्वारा अलग करके पास करेगा।

सामग्री प्लगइन्स (Content Plugins) लिखने के लिए भी लुआ स्क्रिप्ट का उपयोग किया जा सकता है, इसके उदाहरण प्रोग्राम फ़ोल्डर में मिल सकते हैं (plugins/wdx/scripts)। Wiki पर प्लगइन्स लिखने के लिए एक समर्पित पृष्ठ भी है। सीमाएँ: केवल निम्नलिखित डेटा प्रकार समर्थित हैं:

उपरोक्त सूची में हेडर फ़ाइल के नाम शामिल हैं, लुआ स्क्रिप्ट में हमें कोष्ठक में निर्दिष्ट संख्यात्मक मानों का उपयोग करना होगा।


टेक्स्ट एन्कोडिंग के बारे में

नीचे वर्णित सभी अतिरिक्त फ़ंक्शन UTF-8 एन्कोडेड स्ट्रिंग मापदंडों को स्वीकार करते हैं और इसी एन्कोडिंग की स्ट्रिंग लौटाते हैं (सिवाय LazUtf8.ConvertEncoding फ़ंक्शन के)।

कुछ मानक लुआ लाइब्रेरी फ़ंक्शनों को Double Commander या Free Pascal/Lazarus के फ़ंक्शनों द्वारा बदल दिया गया है (या नए फ़ंक्शन लिखे गए हैं), जो UTF-8 समर्थन प्रदान करते हैं।

प्लगइन्स लिखते समय, हमें टेक्स्ट डेटा के लिए भी UTF-8 का उपयोग करना चाहिए (ft_multiplechoice, ft_string और ft_fulltext)।

स्क्रिप्ट सहेजते समय, कृपया बिना BOM के UTF-8 एन्कोडिंग का उपयोग करें।


महत्वपूर्ण बातें

स्वचालन (Automation) के लिए लुआ का उपयोग करने की अपार संभावनाएँ हैं, लेकिन कुछ मामलों में कुछ विवरणों पर ध्यान देने की आवश्यकता हो सकती है। आइए इस उपधारा में उन्हें एकत्र करने का प्रयास करें।

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. लुआ फ़ंक्शन io.open मानक C फ़ंक्शन fopen का उपयोग करता है: टेक्स्ट मोड में, यह फ़ंक्शन पढ़ने और लिखने के दौरान लाइन एंडिंग प्रकारों (CRLF, LF या CR) को बदल सकता है, जिससे अप्रत्याशित परिणाम हो सकते हैं। यदि आपके पास अलग-अलग लाइन एंडिंग प्रकारों वाली फ़ाइलें हैं या आप क्रॉस-प्लेटफ़ॉर्म स्क्रिप्ट लिख रहे हैं, तो आपको इस पर विचार करना होगा, या बाइनरी मोड को प्राथमिकता देना अधिक व्यावहारिक होगा।

3. Linux और अन्य Unix जैसी प्रणालियों में, फ़ाइल विशेषताएँ संवाद के लिए, ContentGetValue फ़ंक्शन को CONTENT_DELAYIFSLOW ध्वज (चौथा पैरामीटर, मान 1) के साथ कॉल किया जाता है, जो विंडो खोलते समय होने वाले विलंब से बचाता है: यदि डेटा पुनर्प्राप्ति धीमी है, तो हम केवल ध्वज मान की जाँच करके और इन फ़ील्ड्स या प्लगइन्स के लिए nil लौटाकर इस डेटा को बाहर कर सकते हैं।

4. यदि प्लगइन को खाली स्ट्रिंग वापस करनी चाहिए, तो "" पास करने की तुलना में nil पास करना अधिक तेज़ है।

2. आवश्यक DLL

लुआ स्क्रिप्ट फ़ाइलों की व्याख्या करने में सक्षम होने के लिए, हमें एक लुआ DLL फ़ाइल की आवश्यकता होती है, Double Commander इसके 5.1 - 5.4 संस्करणों का समर्थन करता है।

हम LuaJIT प्रोजेक्ट से DLL फ़ाइलों का उपयोग कर सकते हैं। LuaJIT असेंबली में लिखे गए एक उच्च-गति दुभाषिए (Interpreter) और एक उन्नत JIT कंपाइलर को जोड़ता है। इसके अलावा, हमें FFI लाइब्रेरी भी मिलती है, जो शुद्ध लुआ कोड से बाहरी C फ़ंक्शनों को कॉल करने और C डेटा संरचनाओं का उपयोग करने की अनुमति देती है।

DC के Windows संस्करण में डिफ़ॉल्ट रूप से लुआ DLL शामिल होता है (DC 0.9.7 और इसके बाद के संस्करणों में LuaJIT प्रोजेक्ट से), अन्य मामलों में, हम इसे पैकेज मैनेजर के माध्यम से ढूंढ और इंस्टॉल कर सकते हैं, या इसे स्वयं संकलित कर सकते हैं। यदि हम DC के 64-बिट संस्करण का उपयोग कर रहे हैं, तो DLL भी 64-बिट संस्करण होना चाहिए।

डिफ़ॉल्ट रूप से, DC अपनी निर्देशिका और सिस्टम निर्देशिका में lua5.1.dll (Windows), liblua5.1.so.0 (Unix या GNU/Linux) या liblua5.1.dylib (macOS) नामक फ़ाइलों की तलाश करता है। हम उपयोग की जाने वाली लुआ लाइब्रेरी फ़ाइल पैरामीटर में फ़ाइल का नाम (और पथ) बदल सकते हैं।

3. Double Commander फ़ंक्शन लाइब्रेरी

Double Commander हमारी लुआ स्क्रिप्ट के लिए कुछ फ़ंक्शन लाइब्रेरी प्रदान करता है।

नीचे इन पुस्तकालयों (Libraries) की सूची दी गई है।

लाइब्रेरी सूची
लाइब्रेरी नामस्क्रिप्ट नामसंक्षिप्त विवरण
DCDouble Commander विशिष्ट फ़ंक्शन
SysUtilsविभिन्न सिस्टम फ़ंक्शन
Clipbrdबाहरी क्लिपबोर्ड सुविधा प्रदान करता है
Dialogsउपयोगकर्ता के साथ बातचीत
LazUtf8UTF-8 स्ट्रिंग फ़ंक्शन
Charवर्ण जानकारी प्राप्त करना
osऑपरेटिंग सिस्टम से संबंधित फ़ंक्शन

3.1. DC लाइब्रेरी

इस लाइब्रेरी में Double Commander विशिष्ट फ़ंक्शन शामिल हैं।

यह DC तालिका (Table) में सभी फ़ंक्शन प्रदान करता है।

DC लाइब्रेरी
फ़ंक्शन नामविवरण

DC.LogWrite(sMessage, iMsgType, bForce, bLogFile)

लॉग विंडो में संदेश लिखता है:

  • sMessage : संदेश टेक्स्ट।
  • iMsgType : संदेश का प्रकार: 0 - सूचना, 1 - सफलता, 2 - त्रुटि।
  • bForce : बूलियन मान, यदि true है, तो लॉग विंडो अदृश्य होने पर भी प्रदर्शित होगी।
  • bLogFile : बूलियन मान, यदि true है, तो संदेश लॉग फ़ाइल में भी लिखा जाएगा।

iPanel = DC.CurrentPanel()

सक्रिय पैनल प्राप्त करें: यदि बायां पैनल सक्रिय है तो 0 लौटाता है, अन्यथा 1 लौटाता है।

DC.CurrentPanel(iPanel)

सक्रिय पैनल सेट करें: iPanel का मान 0 होने पर बायां पैनल, और 1 होने पर दायां पैनल सेट होता है।

DC.ExecuteCommand(sCommand, Param1, Param2,...,ParamX)

यह स्क्रिप्ट को Double Commander के आंतरिक कमांडों को कॉल करने की अनुमति देता है।

sCommand वास्तविक आंतरिक कमांड का नाम है।

हम कमांड द्वारा समर्थित किसी भी संख्या में Param... पैरामीटर प्रदान कर सकते हैं।

आंतरिक कमांडों के अलावा, स्क्रिप्ट में हम विशेष कमांड cm_ExecuteToolBarItem का भी उपयोग कर सकते हैं, जो पहचानकर्ता (Identifier) द्वारा टूलबार बटन को कॉल करने की अनुमति देता है (प्रोग्राम में, यह सुविधा टूलबार बटनों के लिए हॉटकीज़ का उपयोग करने की क्षमता प्रदान करती है)। इस कमांड का उपयोग सामान्य आंतरिक कमांडों के समान ही किया जाता है (नीचे उदाहरण देखें), और इसके निम्नलिखित पैरामीटर हैं:

पैरामीटर मान विवरण
ToolBarID TfrmOptionsToolbar मुख्य टूलबार के बटन
TfrmOptionsToolbarMiddle मध्य टूलबार के बटन
(मौजूद नहीं है) मुख्य टूलबार के बटन
ToolItemID पहचानकर्ता बटन का विशिष्ट पहचानकर्ता (Unique ID)

विशिष्ट पहचानकर्ता ID टैग में संग्रहीत होता है, और इसे प्राप्त करने के हमारे पास कई तरीके हैं: इसे doublecmd.xml फ़ाइल, टूलबार बैकअप फ़ाइल में पाया जा सकता है, या केवल बटन को क्लिपबोर्ड पर कॉपी करके टेक्स्ट एडिटर में उसका कोड पेस्ट किया जा सकता है।

ध्यान दें: पहचानकर्ता स्वचालित रूप से उत्पन्न होते हैं और प्रोग्राम की किसी अन्य प्रति में समान बटनों के पहचानकर्ताओं से मेल खाना आवश्यक नहीं है, लेकिन यदि आवश्यक हो, तो हम मैन्युअल रूप से अपना मान सेट कर सकते हैं।

3.1.1. DC.ExecuteCommand उपयोग उदाहरण

इस उदाहरण में, हमने एक सरल स्क्रिप्ट लिखी है जो निम्नलिखित कार्य करेगी:

  1. दाएं पैनल पर फ़ोकस करें
  2. सभी खुले हुए टैब बंद करें
  3. विशिष्ट फ़ोल्डर में स्विच करें
  4. बाएं पैनल पर फ़ोकस करें
  5. सभी खुले हुए टैब बंद करें
  6. विशिष्ट फ़ोल्डर में स्विच करें
  7. नया टैब खोलें
  8. विशिष्ट फ़ोल्डर में स्विच करें
-- 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 एक्सटेंशन वाला है, तो आंतरिक संपादक इसे पहचान लेगा और लुआ भाषा के लिए सिंटैक्स हाइलाइटिंग प्रदान करेगा:

आंतरिक संपादक का उपयोग करके लुआ सिंटैक्स हाइलाइटिंग

3.2. सिस्टम लाइब्रेरी

इस लाइब्रेरी में विभिन्न सिस्टम फ़ंक्शन शामिल हैं।

यह SysUtils तालिका में सभी फ़ंक्शन प्रदान करता है।

सिस्टम लाइब्रेरी
फ़ंक्शन नामविवरण

SysUtils.Sleep(iMilliseconds)

निर्दिष्ट मिलीसेकंड iMilliseconds के लिए स्क्रिप्ट निष्पादन को निलंबित (Pause) करता है।
निर्दिष्ट समय बीत जाने के बाद, स्क्रिप्ट निष्पादन फिर से शुरू हो जाएगा।

SysUtils.GetTickCount()

एक बढ़ता हुआ घड़ी टिक काउंट (Tick count) लौटाता है। इसका उपयोग समय माप के लिए किया जा सकता है, लेकिन यह नहीं माना जाना चाहिए कि यह टिकों के बीच की सटीक अवधि है।

bExists = SysUtils.FileExists(sFileName)

जांच करता है कि फ़ाइल सिस्टम में कोई विशिष्ट फ़ाइल मौजूद है या नहीं।

यदि डिस्क पर sFileName नामक फ़ाइल मौजूद है, तो bExists में true मान लौटाता है, अन्यथा false लौटाता है।

bExists = SysUtils.DirectoryExists(sDirectory)

जांच करता है कि फ़ाइल सिस्टम में sDirectory मौजूद है और क्या यह वास्तव में एक निर्देशिका है।

यदि ऐसा है, तो फ़ंक्शन bExists में true मान लौटाएगा, अन्यथा false लौटाएगा।

iAttr = SysUtils.FileGetAttr(sFileName)

iAttr में फ़ाइल sFileName की विशेषता सेटिंग्स (Attributes) लौटाता है।

रिटर्न मानों के विस्तृत विवरण के लिए, कृपया यहाँ देखें।

Handle, FindData = SysUtils.FindFirst(sPath)

आमतौर पर वाइल्डकार्ड का उपयोग करके sPath से मेल खाने वाली फ़ाइलों की खोज करता है।

यदि कोई फ़ाइल नहीं मिलती है, तो Handle का मान nil होगा।

जब कम से कम एक आइटम मिल जाता है, तो लौटाया गया Handle उसी पैटर्न के अन्य मिलान खोजने के लिए बाद के SysUtils.FindNext कॉल में उपयोग किया जा सकता है।

FindData तालिका में मिली फ़ाइल या निर्देशिका की जानकारी होती है।

FindData तालिका के फ़ील्ड इस प्रकार हैं:

  • Name : फ़ाइल का नाम (पथ के बिना)।
  • Attr : फ़ाइल की विशेषताएं (विवरण के लिए यहाँ देखें)।
  • Size : फ़ाइल का आकार (बाइट्स में)।
  • Time : फ़ाइल का टाइमस्टैम्प (1 जनवरी 1970 से बीत चुके सेकंड)।

Result, FindData = SysUtils.FindNext(Handle)

पहले लौटाए गए Handle का पुनरुपयोग करके, FindFirst द्वारा शुरू की गई खोज अनुक्रम के अगले मिलान की खोज करता है।

यदि फ़ाइल या निर्देशिका मिलती है, तो लौटाया गया Result गैर-रिक्त होगा, अन्यथा nil होगा।

SysUtils.FindFirst के समान ही महत्वपूर्ण बातें यहाँ भी लागू होती हैं।

नोट: अंतिम SysUtils.FindNext कॉल के बाद हमेशा उसी Handle के साथ एक SysUtils.FindClose कॉल होना चाहिए। अन्यथा मेमोरी लीक (Memory Leak) हो सकती है।

SysUtils.FindClose(Handle)

SysUtils.FindFirst/SysUtils.FindNext कॉलों की श्रृंखला समाप्त करता है।

इन कॉलों द्वारा उपयोग की गई किसी भी मेमोरी को मुक्त (Free) करता है।

यह कॉल करना अत्यंत आवश्यक है, अन्यथा मेमोरी लीक हो सकती है।

bResult = SysUtils.CreateDirectory(sDirectory)

निर्देशिकाओं की एक श्रृंखला बनाता है, जहाँ sDirectory निर्देशिका का पूर्ण पथ है।

यदि sDirectory पहले से मौजूद है या सफलतापूर्वक बनाई गई है, तो true लौटाता है। यदि किसी भी हिस्से का निर्माण विफल रहता है, तो false लौटाता है।

bResult = SysUtils.CreateHardLink(sFileName, sLinkName)

फ़ाइल sFileName के लिए हार्ड लिंक sLinkName बनाता है।

यदि सफल होता है तो true लौटाता है, अन्यथा false लौटाता है।

bResult = SysUtils.CreateSymbolicLink(sFileName, sLinkName)

फ़ाइल या निर्देशिका sFileName के लिए सिंबॉलिक लिंक sLinkName बनाता है।

यदि सफल होता है तो true लौटाता है, अन्यथा false लौटाता है।

sTarget = SysUtils.ReadSymbolicLink(sLinkName, bRecursive)

सिंबॉलिक लिंक sLinkName के लक्ष्य (Target) को पढ़ता है।

यदि bRecursive का मान true है और लिंक किसी अन्य लिंक को इंगित करता है, तो यह तब तक पुनरावर्ती रूप से (Recursively) विश्लेषण करेगा जब तक कि कोई मान्य गैर-लिंक फ़ाइल नाम न मिल जाए।

सिंबॉलिक लिंक sLinkName द्वारा इंगित पथ लौटाता है, या लिंक अमान्य होने या इंगित की गई फ़ाइल मौजूद न होने और bRecursive मान true होने पर खाली स्ट्रिंग लौटाता है।

sName = SysUtils.ExtractFileName(sFileName)

पूर्ण पथ वाले फ़ाइल नाम से केवल फ़ाइल नाम का हिस्सा निकालता है।

फ़ाइल नाम अंतिम निर्देशिका विभाजक वर्ण (“/” या “\”) या ड्राइव लेटर के बाद के सभी वर्णों से बना होता है।

sExt = SysUtils.ExtractFileExt(sFileName)

फ़ाइल नाम का एक्सटेंशन लौटाता है (अंतिम “.” (बिंदु) के बाद के सभी वर्ण, जिसमें “.” वर्ण भी शामिल है)।

sPath = SysUtils.ExtractFilePath(sFileName)

फ़ाइल नाम से पथ (ड्राइव लेटर सहित) निकालता है।

पथ अंतिम निर्देशिका विभाजक वर्ण (“/” या “\”) से पहले के सभी वर्णों से बना होता है, जिसमें निर्देशिका विभाजक स्वयं भी शामिल होता है।

sDir = SysUtils.ExtractFileDir(sFileName)

केवल sFileName की निर्देशिका का हिस्सा निकालता है, जिसमें ड्राइव लेटर शामिल होता है।

निर्देशिका नाम के अंत में निर्देशिका विभाजक नहीं होता है, जो इसे SysUtils.ExtractFilePath से अलग बनाता है।

sDrive = SysUtils.ExtractFileDrive(sFileName)

फ़ाइल नाम से ड्राइव का हिस्सा निकालता है।

कृपया ध्यान दें कि कुछ ऑपरेटिंग सिस्टम ड्राइव लेटर का समर्थन नहीं करते हैं।

sName = SysUtils.GetAbsolutePath(sFileName, sBaseDirectory)

फ़ाइल का पूर्ण (Absolute) पथ लौटाता है:

  • sFileName : सापेक्ष पथ के साथ फ़ाइल का नाम।
  • sBaseDirectory : वह निर्देशिका जिसका उपयोग sFileName के लिए मूल निर्देशिका के रूप में किया जाएगा।

यदि पूर्ण पथ प्राप्त करना असंभव है, तो फ़ंक्शन sFileName का मान लौटाएगा।

sName = SysUtils.GetRelativePath(sFileName, sBaseDirectory)

निर्दिष्ट निर्देशिका के सापेक्ष फ़ाइल का नाम लौटाता है:

  • sFileName : पूर्ण (Absolute) फ़ाइल नाम।
  • sBaseDirectory : वह निर्देशिका जिसका उपयोग sFileName के लिए मूल निर्देशिका के रूप में किया जाएगा।

यदि sFileName और sBaseDirectory में समान मान हैं, तो फ़ंक्शन खाली स्ट्रिंग ("") लौटाएगा। यदि सापेक्ष पथ के साथ फ़ाइल का नाम प्राप्त करना असंभव है, तो फ़ंक्शन sFileName का मान लौटाएगा।

bResult = SysUtils.MatchesMask(sFileName, sMask, iMaskOptions)

यदि sFileName पास किए गए मास्क sMask से मेल खाता है, तो true लौटाता है।

iMaskOptions (वैकल्पिक पैरामीटर, डिफ़ॉल्ट रूप से 0) निम्नलिखित मानों के योग पर सेट होता है:

मान विवरण
1
केस-संवेदी (Case sensitive)
2
उच्चारण चिह्नों और लिगचर की उपेक्षा करें
4
विंडोज शैली फ़िल्टर: “*.*” बिना एक्सटेंशन वाली फ़ाइलों से भी मेल खाता है आदि।
8
पिनयिन समर्थन सक्षम करें (फ़ाइल pinyin.tbl का उपयोग किया जाएगा)

bResult = SysUtils.MatchesMaskList(sFileName, sMaskList, sSeparator, iMaskOptions)

यदि sFileName, sSeparator (डिफ़ॉल्ट रूप से “;”) द्वारा अलग की गई पास की गई मास्क सूची sMaskList में से कम से कम एक से मेल खाता है, तो true लौटाता है।

sSeparator और iMaskOptions (ऊपर देखें) वैकल्पिक पैरामीटर हैं।

sTempFileName = SysUtils.GetTempName()

एक अस्थायी फ़ाइल नाम (सिस्टम अस्थायी फ़ाइल निर्देशिका में) लौटाएगा, जो os.tmpname फ़ंक्शन के समान है, लेकिन फ़ाइल एक ऐसी उपनिर्देशिका में बनाई जाएगी जो Double Commander बंद होने पर स्वचालित रूप से हटा दी जाती है।
यदि फ़ंक्शन एक विशिष्ट नाम बनाने में असमर्थ है, तो यह खाली स्ट्रिंग लौटाएगा।

SysUtils.PathDelim

वह वर्ण जिसका उपयोग वर्तमान ऑपरेटिंग सिस्टम द्वारा पूर्ण फ़ाइल नाम में निर्देशिका नामों को अलग करने के लिए किया जाता है।

Unix/Linux प्रणालियों में, निर्देशिका विभाजक “/” होगा, और Windows में यह “\” होगा।

3.2.1. SysUtils.FileGetAttr रिटर्न मान विवरण

FileGetAttr फ़ाइल sFileName की विशेषता सेटिंग्स (Attributes) लौटाता है।

विशेषताएं निम्नलिखित स्थिरांकों (Constants) का OR संयोजन हैं:

SysUtils.FileGetAttr रिटर्न मानों में उपयोग किए जाने वाले स्थिरांक
मानअर्थ
0x00000001
faReadOnly
फ़ाइल केवल-पठनीय (Read-Only) है।
0x00000002
faHidden
फ़ाइल छिपी हुई (Hidden) है।
Unix/Linux में, इसका मतलब है कि फ़ाइल का नाम बिंदु से शुरू होता है।
0x00000004
faSysFile
फ़ाइल सिस्टम फ़ाइल है।
Unix/Linux में, इसका मतलब है कि फ़ाइल एक वर्ण या ब्लॉक डिवाइस, या नामित पाइप (FIFO) है।
0x00000008
faVolumeId
वॉल्यूम लेबल (Volume ID)।
केवल DOS/Windows पर सामान्य FAT (गैर VFAT या FAT32) फ़ाइल सिस्टम पर लागू होता है।
0x00000010
faDirectory
फ़ाइल एक निर्देशिका (Directory) है।
0x00000020
faArchive
फ़ाइल संग्रहीत (Archive) है।
Unix/Linux में संभव नहीं है।
0x00000400
faSymLink
फ़ाइल एक सिंबॉलिक लिंक है।
नोट: त्रुटि के मामले में, -1 लौटाया जाएगा।

कृपया अगले अनुभाग में उदाहरण देखें।

3.2.2. SysUtils.FileGetAttr उपयोग उदाहरण

निम्नलिखित स्क्रिप्ट 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
      -- क्या चौथा बिट सेट है? तो यह एक निर्देशिका है।
      DC.ExecuteCommand("cm_NewTab")
      DC.ExecuteCommand("cm_ChangeDir", params[1])
    end
  end
end

उपरोक्त उदाहरण में, params[1] स्क्रिप्ट को पास किया गया पहला पैरामीटर है।

आंतरिक कमांड cm_ExecuteScript का उपयोग करते समय, यह स्क्रिप्ट फ़ाइल नाम के बाद पास किया गया पहला पैरामीटर होगा।

इसलिए, हमारे उदाहरण में, हम टूलबार बटन को निम्न प्रकार से कॉन्फ़िगर कर सकते हैं:

cm_ExecuteScript मापदंडों का उपयोग करना

इस उदाहरण में, पैरामीटर %"0%p स्क्रिप्ट को पहले पैरामीटर के रूप में पास किया जाएगा। यह वर्तमान सक्रिय पैनल में चयनित आइटम का बिना उद्धरण वाला फ़ाइल नाम प्रस्तुत करेगा।

3.2.3. FindFirst, FindNext और FindClose उपयोग उदाहरण

निम्नलिखित स्क्रिप्ट उदाहरण में, हम मापदंड में प्राप्त निर्देशिका की सामग्री को स्कैन करेंगे, और परिणामी डेटा को दूसरे मापदंड के रूप में पास किए गए फ़ाइल नाम वाली एक टेक्स्ट फ़ाइल में सहेजेंगे।

यह हमें 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

उपरोक्त उदाहरण में, हमें स्क्रिप्ट को दो पैरामीटर पास करने की आवश्यकता है:

  1. params[1] - वह निर्देशिका जिसकी सामग्री हम चाहते हैं
  2. params[2] - परिणाम संग्रहीत करने के लिए आउटपुट फ़ाइल नाम

इसलिए, आंतरिक कमांड cm_ExecuteScript का उपयोग करके टूलबार बटन को कॉन्फ़िगर करना और मापदंड पास करके यह सब करना बहुत आसान है।

cm_ExecuteScript मापदंडों का उपयोग करना

इस उदाहरण में, पैरामीटर %"0%Ds स्क्रिप्ट को पहले पैरामीटर के रूप में पास किया जाएगा। यह सक्रिय पैनल द्वारा प्रदर्शित निर्देशिका को बिना उद्धरण के प्रस्तुत करेगा।

3.3. क्लिपबोर्ड लाइब्रेरी

Double Commander हमारी लुआ स्क्रिप्ट के लिए बाहरी क्लिपबोर्ड कार्यक्षमता प्रदान कर सकता है।

नीचे दी गई तालिका में संबंधित फ़ंक्शन दिए गए हैं:

क्लिपबोर्ड लाइब्रेरी
फ़ंक्शन नामविवरण

Clipbrd.Clear()

क्लिपबोर्ड की सामग्री को साफ़ करता है।

sVar = Clipbrd.GetAsText()

क्लिपबोर्ड की वर्तमान टेक्स्ट सामग्री प्राप्त करता है और उसे sVar को सौंपता है। यदि क्लिपबोर्ड में कोई टेक्स्ट नहीं है, तो फ़ंक्शन एक खाली स्ट्रिंग लौटाएगा।

Clipbrd.SetAsText(sVar)

क्लिपबोर्ड में sVar की टेक्स्ट सामग्री संग्रहीत करता है।

Clipbrd.SetAsHtml(sHtml)

html प्रारूप वाले टेक्स्ट sHtml को क्लिपबोर्ड (CF_HTML क्लिपबोर्ड प्रारूप) में जोड़ता है।

यह सामग्री उन अनुप्रयोगों में सम्मिलित की जाएगी जो इस क्लिपबोर्ड प्रारूप का समर्थन करते हैं, जैसे MS Word, LO Writer आदि।

डेटा संग्रहीत करने के लिए Clipbrd.SetAsText और Clipbrd.SetAsHtml दोनों का उपयोग करना सही है। जब हम पेस्ट करेंगे, तो एप्लिकेशन अपने द्वारा समर्थित सर्वोत्तम प्रारूप का उपयोग करेगा।

उदाहरण के लिए, हमारे पास निम्नलिखित हो सकते हैं:

  • Clipbrd.SetAsText("Double Commander में आपका स्वागत है!")
  • Clipbrd.SetAsHtml("<b>Double Commander</b> में आपका स्वागत है!")

यदि हम नोटपैड पर स्विच करके कुछ पेस्ट करने का प्रयास करते हैं, तो यह उस संदेश को सादे टेक्स्ट के रूप में पेस्ट करेगा जिसे हमने Clipbrd.SetAsText के साथ कॉपी किया था। लेकिन यदि हम Microsoft Word पर स्विच करके पेस्ट करते हैं, तो यह दूसरा वाला पेस्ट करेगा, यानी Double Commander मोटे (Bold) अक्षरों में दिखाई देगा, क्योंकि Microsoft Word इस क्लिपबोर्ड सामग्री प्रकार को पहचानता है और इसका समर्थन करता है।

3.3.1. क्लिपबोर्ड लाइब्रेरी उपयोग उदाहरण

निम्नलिखित उदाहरण क्लिपबोर्ड से संबंधित तीन फ़ंक्शनों का उपयोग करता है: Clear, GetAsText और SetAsText

यह अपेक्षाकृत लंबा स्क्रिप्ट है, लेकिन यह ऊपर देखे गए कुछ फ़ंक्शनों को अच्छी तरह से जोड़ता है।

यह मानता है कि हमारा सक्रिय पैनल वर्तमान में एक ऐसी निर्देशिका में है जिसमें कई स्रोत टेक्स्ट फ़ाइलें हैं।

यह यह भी मानता है कि हमारे पास वर्तमान में क्लिपबोर्ड में एक शब्द है, और यह वर्तमान सक्रिय फ़ोल्डर को एकल मापदंड के रूप में प्राप्त करेगा।

स्क्रिप्ट वर्तमान निर्देशिका स्तर की फ़ाइलों को स्कैन करेगी, और एक-एक करके उनकी सामग्री को पढ़ेगी ताकि यह पता लगाया जा सके कि कौन सी पंक्तियाँ क्लिपबोर्ड वाले शब्द को समाहित करती हैं।

फिर, उस शब्द को समाहित करने वाली कम से कम एक पंक्ति वाली फ़ाइलों के नामों को क्लिपबोर्ड में रखा जाएगा।

इसके बाद, स्क्रिप्ट आंतरिक कमांड cm_LoadSelectionFromClip का उपयोग करेगी, और उस शब्द वाली फ़ाइलें चुनी जाएंगी।

इसके अलावा, अंत में, हम खोजे जाने वाले मूल शब्द को वापस क्लिपबोर्ड में रख देंगे।

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

3.4. संवाद लाइब्रेरी

यह लाइब्रेरी हमारी स्क्रिप्ट को उपयोगकर्ता के साथ बातचीत करने, संदेश प्रदर्शित करने, उत्तर मांगने आदि की अनुमति देती है।

नीचे दी गई तालिका संबंधित फ़ंक्शनों को सूचीबद्ध करती है:

संवाद लाइब्रेरी
फ़ंक्शन नामविवरण

iButton = Dialogs.MessageBox(sMessage, sTitle, iFlags)

एक संदेश बॉक्स प्रदर्शित करता है, जो उपयोगकर्ता को एक बटन पर क्लिक करने के लिए प्रेरित करता है, जिसे फ़ंक्शन द्वारा लौटाया जाएगा:

  • sMessage:संदेश बॉक्स में प्रदर्शित टेक्स्ट।
  • sTitle:संदेश बॉक्स का शीर्षक।
  • iFlags:स्थिरांकों का बिटवाइज़ OR मान, जो प्रदर्शित बटन, विंडो शैली और डिफ़ॉल्ट बटन को निर्धारित करता है। कृपया प्रदर्शित बटन, विंडो शैली या डिफ़ॉल्ट बटन जानने के लिए संबंधित तालिकाएँ देखें।
  • iButton:रिटर्न मान, जो उपयोगकर्ता द्वारा दबाए गए बटन को दर्शाता है (देखें यह तालिका)।

bResult, sAnswer = Dialogs.InputQuery(sTitle, sMessage, bMask, sDefault)

एक इनपुट बॉक्स प्रदर्शित करता है जहाँ उपयोगकर्ता एक स्ट्रिंग दर्ज कर सकता है:

  • sTitle:इनपुट बॉक्स का शीर्षक।
  • sMessage:इनपुट बॉक्स में प्रदर्शित टेक्स्ट।
  • bMask:बूलियन मान, true होने पर वर्णों को छिपाने के लिए “तारे (Asterisk)” प्रदर्शित किए जाएंगे।
  • sDefault:डिफ़ॉल्ट रूप से सुझाया गया टेक्स्ट, जिसे उपयोगकर्ता आवश्यकतानुसार बदल सकता है।
  • bResult:बूलियन मान लौटाता है, जो दर्शाता है कि उपयोगकर्ता ने वास्तव में कुछ इनपुट किया है या नहीं।
  • sAnswer:स्ट्रिंग लौटाता है, जब उपयोगकर्ता इनपुट करके ठीक (OK) पर क्लिक करता है।

sItem, iItem = Dialogs.InputListBox(sTitle, sMessage, aItems, sDefault)

एक संवाद बॉक्स प्रदर्शित करता है जो उपयोगकर्ता को आइटम सूची में से चुनने की अनुमति देता है:

  • sTitle:संवाद बॉक्स का शीर्षक।
  • sMessage:संवाद बॉक्स में प्रदर्शित टेक्स्ट।
  • aItems:एक लुआ तालिका, जहाँ प्रत्येक तत्व एक स्ट्रिंग होना चाहिए।
  • sDefault:सूची में डिफ़ॉल्ट रूप से चुना गया आइटम।
  • sItem:चुने गए आइटम को स्ट्रिंग के रूप में लौटाता है, यदि संवाद रद्द कर दिया जाता है तो nil लौटाता है।
  • iItem:चुने गए आइटम का सूचकांक (Index) (लुआ तालिका की आदत के अनुसार 1 से शुरू होता है)।

3.4.1. Dialogs.MessageBox में प्रदर्शित बटन

Dialogs.MessageBox फ़ंक्शन द्वारा प्रदर्शित बटनों को निम्नलिखित स्थिरांकों के बिटवाइज़ OR मान द्वारा नियंत्रित किया जाता है:

Dialogs.MessageBox प्रदर्शित बटनों के लिए ButFlags स्थिरांक
स्थिरांक मानप्रदर्शित बटन, बाएं से दाएं
0x0000
MB_OK
बटन OK
0x0001
MB_OKCANCEL
बटन OK बटन CANCEL
0x0002
MB_ABORTRETRYIGNORE
बटन ABORT बटन RETRY बटन IGNORE
0x0003
MB_YESNOCANCEL
बटन YES बटन NO बटन CANCEL
0x0004
MB_YESNO
बटन YES बटन NO
0x0005
MB_RETRYCANCEL
बटन RETRY बटन CANCEL

3.4.2. Dialogs.MessageBox की विंडो शैलियाँ

Dialogs.MessageBox फ़ंक्शन द्वारा प्रदर्शित विंडो शैलियाँ निम्नलिखित स्थिरांकों के बिटवाइज़ OR मान द्वारा नियंत्रित की जाती हैं:

Dialogs.MessageBox आइकन और शैलियों के लिए ButFlags स्थिरांक
स्थिरांक मानविंडो शैली
0x0040
MB_ICONINFORMATION
आइकन INFORMATION सूचना विंडो
0x0030
MB_ICONWARNING
आइकन WARNING चेतावनी विंडो
0x0020
MB_ICONQUESTION
आइकन QUESTION पुष्टि विंडो
0x0010
MB_ICONERROR
आइकन ERROR त्रुटि विंडो

3.4.3. Dialogs.MessageBox का डिफ़ॉल्ट सक्रिय बटन

Dialogs.MessageBox फ़ंक्शन द्वारा प्रदर्शित डिफ़ॉल्ट सक्रिय बटन निम्नलिखित स्थिरांकों के बिटवाइज़ OR मान द्वारा नियंत्रित किया जाता है:

Dialogs.MessageBox डिफ़ॉल्ट बटनों के लिए ButFlags स्थिरांक
स्थिरांक मानडिफ़ॉल्ट बटन
0x0000
MB_DEFBUTTON1
डिफ़ॉल्ट रूप से बाईं ओर से पहला बटन
0x0100
MB_DEFBUTTON2
डिफ़ॉल्ट रूप से बाईं ओर से दूसरा बटन
0x0200
MB_DEFBUTTON3
डिफ़ॉल्ट रूप से बाईं ओर से तीसरा बटन

3.4.4. Dialogs.MessageBox के रिटर्न मान

Dialogs.MessageBox फ़ंक्शन द्वारा लौटाया गया नंबर उपयोगकर्ता द्वारा दबाए गए बटन को इंगित करता है, जैसा कि नीचे दिखाया गया है:

Dialogs.MessageBox बटन दबाए जाने पर लौटाए जाने वाले ButPressed मान
स्थिरांक मानदबाया गया बटन
0x0000
mrNone
कोई बटन नहीं दबाया गया
0x0001
mrOK
परिणाम OK
0x0002
mrCancel
परिणाम CANCEL
0x0003
mrAbort
परिणाम ABORT
0x0004
mrRetry
परिणाम RETRY
0x0005
mrIgnore
परिणाम IGNORE
0x0006
mrYes
परिणाम YES
0x0007
mrNo
परिणाम NO

नोट: यदि आप ऊपरी दाएं कोने में “x” दबाकर या Esc दबाकर विंडो बंद करते हैं, तो “रद्द करें” (Cancel) बटन का मान लौटाया जाएगा।

3.4.5. Dialogs.MessageBox उपयोग उदाहरण

निम्नलिखित 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.MessageBox उपयोग उदाहरण

3.4.6. Dialogs.InputQuery उपयोग उदाहरण

निम्नलिखित Dialogs.InputQuery का उपयोग करने वाला एक छोटा स्क्रिप्ट है और परिणामी विंडो प्रदर्शित की जाएगी:

bResult, sAnswer = Dialogs.InputQuery("पहचान सत्यापन", "कृपया अपना नाम दर्ज करें:", false, "जॉन")

if bResult == true then
  Dialogs.MessageBox("नमस्ते " .. sAnswer .. "!", "स्वागत है!", 0x0040)
end

Dialogs.InputQuery उपयोग उदाहरण

3.5. UTF-8 लाइब्रेरी

यह लाइब्रेरी UTF-8 एन्कोडिंग के लिए बुनियादी समर्थन प्रदान करती है।

यह LazUtf8 तालिका में सभी फ़ंक्शन प्रदान करती है।

UTF-8 लाइब्रेरी
फ़ंक्शन नामविवरण

iResult = LazUtf8.Pos(SearchText, SourceText, Offset)

निर्दिष्ट स्थिति से शुरू करके स्ट्रिंग में उप-स्ट्रिंग (Substring) की खोज करता है। खोज केस-संवेदी होती है।

SourceText स्ट्रिंग में पहली बार SearchText उप-स्ट्रिंग के प्रकट होने की स्थिति लौटाता है, खोज Offset स्थिति (डिफ़ॉल्ट रूप से 1) से शुरू होती है।

यदि दिए गए Offset के बाद SearchText उप-स्ट्रिंग SourceText में प्रकट नहीं होती है, तो यह शून्य (0) लौटाएगा।

LazUtf8.Next(String)

एक पुनरावृत्त (Iterator) फ़ंक्शन, जो हर बार कॉल किए जाने पर String का अगला वर्ण और बाइट्स में उस वर्ण की प्रारंभिक स्थिति लौटाता है।

उदाहरण:

-- "स्थिति : वर्ण" के रूप में मान मुद्रित करें
for iPos, sChar in LazUtf8.Next(String) do
  DC.LogWrite(iPos .. " : " .. sChar)
end

sResult = LazUtf8.Copy(String, iIndex, iCount)

स्ट्रिंग के एक हिस्से को कॉपी करता है।

Copy एक स्ट्रिंग लौटाता है जो String में iIndex स्थिति से शुरू होने वाले iCount वर्णों की प्रतिलिपि (Copy) होती है।

यदि iCount का मान String की लंबाई से अधिक है, तो परिणाम को छोटा कर दिया जाएगा। यदि iIndex का मान String की लंबाई से अधिक है, तो यह खाली स्ट्रिंग लौटाएगा।

iResult = LazUtf8.Length(String)

स्ट्रिंग में UTF-8 वर्णों की संख्या लौटाता है।

sResult = LazUtf8.UpperCase(String)

एक स्ट्रिंग प्राप्त करता है और उस स्ट्रिंग की एक प्रतिलिपि लौटाता है जहाँ सभी छोटे अक्षरों को बड़े अक्षरों में बदल दिया गया है।

sResult = LazUtf8.LowerCase(String)

एक स्ट्रिंग प्राप्त करता है और उस स्ट्रिंग की एक प्रतिलिपि लौटाता है जहाँ सभी बड़े अक्षरों को छोटे अक्षरों में बदल दिया गया है।

sResult = LazUtf8.ConvertEncoding(String, FromEnc, ToEnc)

String की एन्कोडिंग को FromEnc से ToEnc में परिवर्तित करता है।

समर्थित एन्कोडिंग मानों की सूची:

  • डिफ़ॉल्ट सिस्टम एन्कोडिंग (सिस्टम लोकेल पर निर्भर): "default"।
  • डिफ़ॉल्ट ANSI (Windows) एन्कोडिंग (सिस्टम लोकेल पर निर्भर): "ansi"।
  • डिफ़ॉल्ट OEM (DOS) एन्कोडिंग (सिस्टम लोकेल पर निर्भर): "oem"।
  • Unicode:"utf8"、"utf8bom"、"ucs2le"、"ucs2be"。
  • ANSI (Windows):"cp1250", "cp1251", "cp1252", "cp1253", "cp1254", "cp1255", "cp1256", "cp1257", "cp1258"。
  • OEM (DOS):"cp437", "cp850", "cp852", "cp865", "cp866", "cp874", "cp932", "cp936", "cp949", "cp950"。
  • ISO 8859:"iso88591", "iso88592", "iso88593", "iso88594", "iso88595", "iso88597", "iso88599", "iso885910", "iso885913", "iso885914", "iso885915", "iso885916"。
  • अन्य:"macintosh"、"koi8r"、"koi8u"、"koi8ru"。
विशेष एन्कोडिंग का अर्थ (उदाहरण)।

Windows में (अंग्रेजी या रूसी):
  • "default" - cp1252 या cp1251
  • "ansi" - cp1252 या cp1251
  • "oem" - cp850 या cp866
Linux में (अंग्रेजी या रूसी):
  • "default" - utf8
  • "ansi" - cp1252 या cp1251
  • "oem" - cp850 या cp866

sEnc = LazUtf8.DetectEncoding(String)

स्थानांतरित टेक्स्ट का एन्कोडिंग मान लौटाता है।
समर्थित एन्कोडिंग सूची LazUtf8.ConvertEncoding फ़ंक्शन में उपयोग की जाने वाली सूची के समान है।

3.6. वर्ण लाइब्रेरी

इस लाइब्रेरी में यह जांचने के फ़ंक्शन शामिल हैं कि क्या कोई वर्ण किसी विशिष्ट यूनिकोड श्रेणी से संबंधित है, और उस वर्ण की श्रेणी प्राप्त करने के फ़ंक्शन भी हैं।

इस लाइब्रेरी में उपलब्ध फ़ंक्शनों की सूची:

वर्ण लाइब्रेरी
फ़ंक्शन नामविवरण

iResult = Char.GetUnicodeCategory(Character)

वर्ण Character की यूनिकोड श्रेणी लौटाता है, जो निम्न में से कोई एक मान हो सकता है:

मानविवरण
  अक्षर (Letters):
0बड़ा अक्षर (Lu)
1छोटा अक्षर (Ll)
2शीर्षक अक्षर (Lt)
3संशोधक अक्षर (Lm)
4अन्य अक्षर (Lo)
  चिह्न (Marks):
5गैर-अंतराली चिह्न (Mn)
6अंतराली संयोजन चिह्न (Mc)
7संलग्न चिह्न (Me)
  संख्या (Numbers):
8दशमलव संख्या (Nd)
9अक्षर संख्या (Nl)
10अन्य संख्या (No)
  विराम चिह्न (Punctuation):
11योजक विराम चिह्न (Pc)
12डैश विराम चिह्न (Pd)
13प्रारंभिक विराम चिह्न (Ps)
14अंतिम विराम चिह्न (Pe)
15प्रारंभिक उद्धरण चिह्न (Pi)
16अंतिम उद्धरण चिह्न (Pf)
17अन्य विराम चिह्न (Po)
  प्रतीक (Symbols):
18गणितीय प्रतीक (Sm)
19मुद्रा प्रतीक (Sc)
20संशोधक प्रतीक (Sk)
21अन्य प्रतीक (So)
  विभाजक (Separators):
22स्पेस विभाजक (Zs)
23पंक्ति विभाजक (Zl)
24पैराग्राफ विभाजक (Zp)
  अन्य (Other):
25नियंत्रण (Cc)
26प्रारूप (Cf)
27सरोगेट (Cs)
28निजी उपयोग (Co)
29अनावंटित (Cn)

bResult = Char.IsDigit(Character)

यदि Character वर्ण Nd श्रेणी में है, तो true लौटाता है।

bResult = Char.IsLetter(Character)

यदि Character वर्ण Lu, Ll, Lt, Lm या Lo श्रेणी में है, तो true लौटाता है।

bResult = Char.IsLetterOrDigit(Character)

यदि Character वर्ण Lu, Ll, Lt, Lm, Lo, Nd या Nl श्रेणी में है, तो true लौटाता है।

bResult = Char.IsLower(Character)

यदि Character वर्ण Ll श्रेणी में है, तो true लौटाता है।

bResult = Char.IsUpper(Character)

यदि Character वर्ण Lu श्रेणी में है, तो true लौटाता है।

इसके अलावा, ये फ़ंक्शन दो मापदंडों के उपयोग का समर्थन करते हैं: हम एकल वर्ण के बजाय एक स्ट्रिंग और उस स्ट्रिंग में वर्ण की स्थिति निर्दिष्ट कर सकते हैं।

3.7. ऑपरेटिंग सिस्टम लाइब्रेरी

यह लाइब्रेरी उस ऑपरेटिंग सिस्टम से संबंधित फ़ंक्शन प्रदान करती है जिस पर Double Commander चल रहा है।

इस लाइब्रेरी में उपलब्ध फ़ंक्शनों की सूची नीचे दी गई है:

ऑपरेटिंग सिस्टम लाइब्रेरी
फ़ंक्शन नामविवरण

iResultCode = os.execute(sCommand)

sCommand को निष्पादित करेगा, ठीक वैसे ही जैसे कमांड लाइन में दर्ज किया गया हो, और ऑपरेशन का परिणाम कोड (Result Code) लौटाएगा।

sCommand हो सकता है:

  • टर्मिनल कमांड, जैसे os.execute("dir > all.txt")
  • निष्पादन योग्य फ़ाइल (Executable File), जैसे os.execute("C:\\Windows\\System32\\calc.exe")
  • मापदंडों के साथ निष्पादन योग्य फ़ाइल:
    os.execute("C:\\Utils\\fsum.exe -md5 test.bin > md5.txt")

sTempFileName = os.tmpname()

एक अस्थायी फ़ाइल नाम (सिस्टम अस्थायी फ़ाइल निर्देशिका में) लौटाएगा।
यदि फ़ंक्शन एक विशिष्ट नाम बनाने में असमर्थ है, तो यह खाली स्ट्रिंग लौटाएगा।

bResult, sError, iError = os.remove(sFileName)

sFileName नामक फ़ाइल या निर्देशिका को हटा देगा।

यदि सफल होता है, तो फ़ंक्शन true लौटाता है।

यदि विफल रहता है, तो फ़ंक्शन तीन चीजें लौटाता है:

  1. विफलता दर्शाने के लिए nil
  2. त्रुटि संदेश विवरण के रूप में sError
  3. त्रुटि कोड संख्या के रूप में iError

bResult, sError, iError = os.rename(sOldName, sNewName)

sOldName फ़ाइल का नाम बदलकर नया नाम sNewName कर देगा।

नोट: यदि sNewName नामक फ़ाइल पहले से मौजूद है, तो उसे बदल (Replace) दिया जाएगा!

यदि सफल होता है, तो फ़ंक्शन true लौटाता है।

यदि विफल रहता है, तो फ़ंक्शन तीन चीजें लौटाता है:

  1. विफलता दर्शाने के लिए nil
  2. त्रुटि संदेश विवरण के रूप में sError
  3. त्रुटि कोड संख्या के रूप में iError

Value = os.getenv(VariableName)

मापदंड में पास किए गए VariableName चर का Value लौटाएगा।
यदि उस नाम का कोई चर मौजूद नहीं है, तो यह nil लौटाएगा।

os.setenv(VariableName, Value)

VariableName पर्यावरण चर (Environment Variable) जोड़ता है या बदलता है। त्रुटि के मामले में, फ़ंक्शन -1 लौटाता है।

os.unsetenv(VariableName)

VariableName पर्यावरण चर को हटाता है। त्रुटि के मामले में, फ़ंक्शन -1 लौटाता है।

4. अनुक्रमणिका (Index)

DC लाइब्रेरी

DC.CurrentPanel
DC.ExecuteCommand
DC.LogWrite


सिस्टम लाइब्रेरी

SysUtils.CreateDirectory
SysUtils.CreateHardLink
SysUtils.CreateSymbolicLink
SysUtils.DirectoryExists
SysUtils.ExtractFileDir
SysUtils.ExtractFileDrive
SysUtils.ExtractFileExt
SysUtils.ExtractFileName
SysUtils.ExtractFilePath
SysUtils.FileExists
SysUtils.FileGetAttr
SysUtils.FindClose
SysUtils.FindFirst
SysUtils.FindNext
SysUtils.GetAbsolutePath
SysUtils.GetRelativePath
SysUtils.GetTempName
SysUtils.GetTickCount
SysUtils.MatchesMask
SysUtils.MatchesMaskList
SysUtils.PathDelim
SysUtils.ReadSymbolicLink
SysUtils.Sleep


क्लिपबोर्ड लाइब्रेरी

Clipbrd.Clear
Clipbrd.GetAsText
Clipbrd.SetAsHtml
Clipbrd.SetAsText


संवाद लाइब्रेरी

Dialogs.InputListBox
Dialogs.InputQuery
Dialogs.MessageBox


UTF-8 लाइब्रेरी

LazUtf8.ConvertEncoding
LazUtf8.Copy
LazUtf8.DetectEncoding
LazUtf8.Length
LazUtf8.LowerCase
LazUtf8.Next
LazUtf8.Pos
LazUtf8.UpperCase


वर्ण लाइब्रेरी

Char.GetUnicodeCategory
Char.IsDigit
Char.IsLetter
Char.IsLetterOrDigit
Char.IsLower
Char.IsUpper


ऑपरेटिंग सिस्टम लाइब्रेरी

os.execute
os.getenv
os.remove
os.rename
os.setenv
os.tmpname
os.unsetenv


Valid HTML 4.0 Transitional CSS Valid!