Lua スクリプトプログラミング言語の詳細については、Lua Webサイトをご覧ください。
Double Commander は cm_ExecuteScript コマンドで Lua スクリプトを実行できます。
スクリプトパラメータはエスケープせずにそのまま渡す必要があります(引用符や「\」は不要)。このためには %"0 変数を使用する必要があります。例えば、カーソル下のファイルには %p0 ではなく %"0%p0 を、現在のディレクトリには %D ではなく %"0%D を使用します。そうしないと、Double Commander が自動的に引用符を追加し、それらがパラメータの一部として渡されてしまうため、その点を考慮する必要があります。
すべての選択されたファイルのリストを取得するには、変数(%LU、%FU、または %RU)または内部コマンド(cm_SaveSelectionToFile、cm_SaveFileDetailsToFile、cm_CopyFullNamesToClip、または cm_CopyFileDetailsToClip)を使用できます。
たとえば、%p を使用できます。この場合、Double Commander はすべての選択されたファイル名を1行にスペース区切りで渡します。
Lua スクリプトを使用してコンテンツプラグインを作成することも可能です。例はプログラムフォルダ内にあります(plugins/wdx/scripts)。 プラグイン作成専用のページが Wiki にあります。 制限事項:以下のデータ型のみサポートされています
上記リストはヘッダーファイル内の名前を含んでおり、Lua スクリプトでは括弧内に指定された数値を使用する必要があります。
テキストエンコーディングについて
以下に記述されているすべての追加関数は、UTF-8 エンコードされた文字列パラメータを受け入れ、このエンコーディングの文字列を返します(LazUtf8.ConvertEncoding 関数を除く)。
いくつかの標準 Lua ライブラリの関数は、Double Commander または Free Pascal/Lazarus の関数に置き換えられている(または新しい関数が作成されている)ため、UTF-8 サポートが提供されます。
プラグインを作成する際には、テキストデータにも UTF-8 を使用すべきです(ft_multiplechoice、ft_string、および ft_fulltext)。
スクリプトを保存する際は、BOMなしの UTF-8 エンコーディングを使用してください。
注意事項
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. Lua 関数 io.open は標準 C 関数 fopen を使用します。テキストモードでは、この関数は読み書き時に改行コードの種類(CRLF、LF、または CR)を変換する可能性があり、予期せぬ結果を招くことがあります。異なる改行コードを持つファイルを扱う場合やクロスプラットフォームスクリプトを書く場合は、これを考慮する必要があります。より現実的な解決策としては、バイナリモードを優先的に使用することです。
3. Linux および他の Unix 系オペレーティングシステムでは、ファイル属性ダイアログボックスにおいて、ContentGetValue 関数を呼び出す際に CONTENT_DELAYIFSLOW フラグ(第4引数、値は1)が設定されます。これによりウィンドウを開く際の遅延を回避できます。データ取得が遅い場合、単純にフラグ値チェックを追加し、これらのフィールドまたはプラグインに対して nil を返すことで、これらのデータを除外できます。
4. プラグインが空の文字列を返すべき場合、"" を渡すよりも nil を渡す方が高速です。
Lua スクリプトファイルを解釈できるようにするには、Lua DLL ファイルが必要です。Double Commander はバージョン 5.1 - 5.4 をサポートしています。
LuaJIT プロジェクトからの DLL ファイルを使用できます。LuaJIT はアセンブリで書かれた高速インタープリターと高度な JIT コンパイラーを組み合わせています。さらに、FFI ライブラリも利用可能になり、純粋な Lua コードから外部 C 関数を呼び出し、C データ構造を使用できます。
Windows 版の DC にはデフォルトで Lua DLL が含まれています(DC 0.9.7 以降では LuaJIT プロジェクトからのもの)。その他の環境では、パッケージマネージャーで検索・インストールするか、自分でコンパイルする必要があります。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 固有の関数 | |
| SysUtils | 各種システム関数 | |
| Clipbrd | 外部クリップボード機能 | |
| Dialogs | ユーザーとの対話 | |
| LazUtf8 | UTF-8 文字列関数 | |
| Char | 文字情報の取得 | |
| os | オペレーティングシステム関連の関数 | |
このライブラリには Double Commander 固有の関数が含まれています。
すべての関数は DC テーブルで提供されます。
| DC ライブラリ | |
|---|---|
| 関数名 | 説明 |
|
DC.LogWrite(sMessage, iMsgType, bForce, bLogFile) ログウィンドウにメッセージを書き込みます:
|
|
|
iPanel = DC.CurrentPanel() アクティブパネルを取得:左パネルがアクティブの場合は0、そうでない場合は1を返します。 DC.CurrentPanel(iPanel) アクティブパネルを設定:iPanel が0の場合は左パネル、1の場合は右パネルになります。 |
|
|
DC.ExecuteCommand(sCommand, Param1, Param2,...,ParamX) これにより、スクリプトは Double Commander の 内部コマンドを呼び出すことができます。 sCommand は実際の内部コマンド名です。 コマンドがサポートする任意の数の Param... 引数を提供できます。 |
|
内部コマンドに加えて、スクリプトでは特別なコマンド cm_ExecuteToolBarItem を使用できます。このコマンドにより識別子を通じてツールバーボタンを呼び出すことができます(プログラム内では、この機能によりツールバーボタンにショートカットキーを使用できます)。このコマンドは通常の内部コマンドと同様に使用されます(以下の例を参照)が、以下のパラメータを持ちます:
| パラメータ | 値 | 説明 |
|---|---|---|
| ToolBarID | TfrmOptionsToolbar | メインツールバーのボタン |
| TfrmOptionsToolbarMiddle | 中央ツールバーのボタン | |
| (存在しない) | メインツールバーのボタン | |
| ToolItemID | 識別子 | ボタンの一意の識別子 |
一意の識別子は 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 テーブルで提供されます。
| システムライブラリ | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 関数名 | 説明 | ||||||||||
|
SysUtils.Sleep(iMilliseconds) 指定されたミリ秒数 iMilliseconds の間、スクリプトの実行を一時停止します。 |
|||||||||||
|
SysUtils.GetTickCount() 増加するクロックティックカウントを返します。時間測定に使用できますが、ティック間隔を前提とすべきではありません。 |
|||||||||||
|
bExists = SysUtils.FileExists(sFileName) ファイルシステムに特定のファイルが存在するかどうかを確認します。 ディスク上に sFileName という名前のファイルが存在する場合、bExists に |
|||||||||||
|
bExists = SysUtils.DirectoryExists(sDirectory) sDirectory がファイルシステムに存在し、実際にディレクトリであるかどうかを確認します。 そのような場合、関数は bExists に |
|||||||||||
|
iAttr = SysUtils.FileGetAttr(sFileName) iAttr にファイル sFileName の属性設定を返します。 戻り値の詳細についてはこちらを参照してください。 |
|||||||||||
|
Handle, FindData = SysUtils.FindFirst(sPath) sPath に一致するファイルを検索します。通常ワイルドカードを使用します。 ファイルが見つからない場合、Handle は 少なくとも1つの項目が見つかった場合、返された Handle は同じパターンの他の一致項目を検索するために後続の FindData テーブルには見つかったファイルまたはディレクトリの情報が含まれます。 FindData テーブルのフィールドは以下の通りです:
|
|||||||||||
|
Result, FindData = SysUtils.FindNext(Handle) 以前に返された Handle を再利用して、 ファイルまたはディレクトリが見つかった場合、返された Result は空ではなくなり、そうでない場合は
備考:最後の |
|||||||||||
|
SysUtils.FindClose(Handle)
これらの呼び出しで使用されたメモリを解放します。 この呼び出しは絶対に必要であり、そうしないとメモリリークが発生する可能性があります。 |
|||||||||||
|
bResult = SysUtils.CreateDirectory(sDirectory) 一連のディレクトリを作成します。sDirectory はディレクトリの完全なパスです。 sDirectory が既に存在するか、正常に作成された場合は |
|||||||||||
|
bResult = SysUtils.CreateHardLink(sFileName, sLinkName) ファイル sFileName のハードリンク sLinkName を作成します。 成功した場合は |
|||||||||||
|
bResult = SysUtils.CreateSymbolicLink(sFileName, sLinkName) ファイルまたはディレクトリ sFileName のシンボリックリンク sLinkName を作成します。 成功した場合は |
|||||||||||
|
sTarget = SysUtils.ReadSymbolicLink(sLinkName, bRecursive) シンボリックリンク sLinkName のターゲットを読み取ります。 bRecursive が シンボリックリンク sLinkName が指すパスを返します。リンクが無効または指すファイルが存在せず、かつ bRecursive が |
|||||||||||
|
sName = SysUtils.ExtractFileName(sFileName) 完全なパスのファイル名からファイル名部分を抽出します。 ファイル名は最後のディレクトリ区切り文字(「/」または「\」)またはドライブ文字の後のすべての文字で構成されます。 |
|||||||||||
|
sExt = SysUtils.ExtractFileExt(sFileName) ファイル名の拡張子(最後の「.」(ドット)以降のすべての文字、「.」文字を含む)を返します。 |
|||||||||||
|
sPath = SysUtils.ExtractFilePath(sFileName) ファイル名からパス(ドライブ文字を含む)を抽出します。 パスは最後のディレクトリ区切り文字(「/」または「\」)より前のすべての文字で構成され、ディレクトリ区切り文字自体も含まれます。 |
|||||||||||
|
sDir = SysUtils.ExtractFileDir(sFileName) sFileName のディレクトリ部分のみを抽出します。ドライブ文字も含みます。 ディレクトリ名には末尾のディレクトリ区切り文字が含まれず、これは |
|||||||||||
|
sDrive = SysUtils.ExtractFileDrive(sFileName) ファイル名からドライブ部分を抽出します。 一部のオペレーティングシステムではドライブ文字がサポートされていないことに注意してください。 |
|||||||||||
|
sName = SysUtils.GetAbsolutePath(sFileName, sBaseDirectory) ファイルの絶対(完全)パスを返します:
絶対パスを取得できない場合、関数は sFileName の値を返します。 |
|||||||||||
|
sName = SysUtils.GetRelativePath(sFileName, sBaseDirectory) 指定されたディレクトリに対する相対ファイル名を返します:
sFileName と sBaseDirectory が同じ値を含む場合、関数は空文字列("")を返します。相対パスのファイル名を取得できない場合、関数は sFileName の値を返します。 |
|||||||||||
|
bResult = SysUtils.MatchesMask(sFileName, sMask, iMaskOptions) sFileName が渡されたマスク sMask に一致する場合、 iMaskOptions(オプションパラメータ、デフォルトは0)は以下の値の合計に設定されます:
|
|||||||||||
|
bResult = SysUtils.MatchesMaskList(sFileName, sMaskList, sSeparator, iMaskOptions) sFileName が sSeparator(デフォルトは「;」)で区切られた渡されたマスクリスト sMaskList の少なくとも1つに一致する場合、 sSeparator と iMaskOptions(上記参照)はオプションパラメータです。 |
|||||||||||
|
sTempFileName = SysUtils.GetTempName() 一時ファイル名として使用されるファイル名(システムの一時ファイルディレクトリ内)を返します。os.tmpname 関数と似ていますが、ファイルは Double Commander が閉じられたときに自動削除されるサブディレクトリ内に作成されます。 |
|||||||||||
|
SysUtils.PathDelim 現在のオペレーティングシステムで完全なファイル名中のディレクトリ名を区切るために使用される文字。 Unix/Linux システムではディレクトリ区切り文字は「/」、Windows では「\」になります。 |
|||||||||||
FileGetAttr はファイル sFileName の属性設定を返します。
属性は以下の定数の OR 組み合わせです:
| SysUtils.FileGetAttr の戻り値で使用される定数 | |
|---|---|
| 値 | 意味 |
0x00000001 faReadOnly |
ファイルは読み取り専用です。 |
0x00000002 faHidden |
ファイルは隠しファイルです。 Unix/Linux では、ファイル名がドットで始まることを意味します。 |
0x00000004 faSysFile |
ファイルはシステムファイルです。 Unix/Linux では、ファイルがキャラクタデバイスまたはブロックデバイス、名前付きパイプ (FIFO) であることを意味します。 |
0x00000008 faVolumeId |
ボリュームラベルです。 DOS/Windows 上の標準的な FAT(VFAT または FAT32 ではない)ファイルシステムでのみ有効です。 |
0x00000010 faDirectory |
ファイルはディレクトリです。 |
0x00000020 faArchive |
ファイルはアーカイブされています。 Unix/Linux では不可能です。 |
0x00000400 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 は、Lua スクリプトに外部クリップボード機能を提供できます。
関連する関数は以下の表の通りです:
| クリップボードライブラリ | |
|---|---|
| 関数名 | 説明 |
|
Clipbrd.Clear() クリップボードの内容をクリアします。 |
|
|
sVar = Clipbrd.GetAsText() クリップボードの現在のテキスト内容を取得し、sVar に割り当てます。クリップボードにテキストがない場合、関数は空の文字列を返します。 |
|
|
Clipbrd.SetAsText(sVar) sVar のテキスト内容をクリップボードに保存します。 |
|
|
Clipbrd.SetAsHtml(sHtml) HTML 形式のテキスト sHtml をクリップボードに追加します( これらの内容は、MS Word や LO Writer などのこのクリップボード形式に対応するアプリケーションに挿入されます。
例えば、次のような内容があります:
メモ帳に切り替えて何かを貼り付けようとした場合、 |
|
以下の例では、クリップボードに関連する3つの関数:Clear、GetAsText、および SetAsText を使用しています。
これは比較的長いスクリプトですが、上で見たいくつかの関数をうまく組み合わせています。
これは、アクティブパネルが多数のソーステキストファイルを含むディレクトリにあることを前提としています。
また、現在クリップボードに単語があり、現在のアクティブフォルダを単一の引数として受け取ることを前提としています。
スクリプトは現在のディレクトリレベルのファイルをスキャンし、それぞれの内容を1行ずつ読み込んで、クリップボード内の単語を含むテキスト行を検出します。
その後、少なくとも1行その単語を含むファイル名がクリップボードに配置されます。
そして、スクリプトは内部コマンド 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") -- 何も選択されていないことを確認。 -- ディレクトリ内のすべてのファイルを1つずつスキャンしましょう。 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 -- 今度はファイルを1行ずつ読み込んで、終了または見つかるまで続けます。 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
このライブラリにより、スクリプトはユーザーと対話でき、メッセージを表示し、回答の入力を求めることができます。
関連する関数は以下の表にリストされています:
| ダイアログライブラリ | |
|---|---|
| 関数名 | 説明 |
|
iButton = Dialogs.MessageBox(sMessage, sTitle, iFlags) メッセージボックスを表示し、ユーザーがボタンをクリックするのを促し、そのボタンが関数によって返されます: |
|
|
bResult, sAnswer = Dialogs.InputQuery(sTitle, sMessage, bMask, sDefault) ユーザーが文字列を入力できるリクエストボックスを表示します:
|
|
|
sItem, iItem = Dialogs.InputListBox(sTitle, sMessage, aItems, sDefault) ユーザーがアイテムリストから選択できるダイアログを表示します:
|
|
Dialogs.MessageBox関数に表示されるボタンは、以下の定数のビット単位のOR値で制御されます:
| Dialogs.MessageBoxボタン表示のButFlags定数 | |
|---|---|
| 定数値 | 表示されるボタン(左から右へ) |
0x0000 MB_OK |
|
0x0001 MB_OKCANCEL |
|
0x0002 MB_ABORTRETRYIGNORE |
|
0x0003 MB_YESNOCANCEL |
|
0x0004 MB_YESNO |
|
0x0005 MB_RETRYCANCEL |
|
Dialogs.MessageBox関数に表示されるウィンドウスタイルは、以下の定数のビット単位のOR値で制御されます:
| Dialogs.MessageBoxアイコンとスタイルのButFlags定数 | |
|---|---|
| 定数値 | ウィンドウスタイル |
0x0040 MB_ICONINFORMATION |
|
0x0030 MB_ICONWARNING |
|
0x0020 MB_ICONQUESTION |
|
0x0010 MB_ICONERROR |
|
Dialogs.MessageBox関数に表示されるデフォルトアクティブボタンは、以下の定数のビット単位のOR値で制御されます:
| Dialogs.MessageBoxデフォルトボタンのButFlags定数 | |
|---|---|
| 定数値 | デフォルトボタン |
0x0000 MB_DEFBUTTON1 |
デフォルトは左側の最初のボタン |
0x0100 MB_DEFBUTTON2 |
デフォルトは左側の2番目のボタン |
0x0200 MB_DEFBUTTON3 |
デフォルトは左側の3番目のボタン |
Dialogs.MessageBox関数が返す数値は、ユーザーが押したボタンを示します:
| Dialogs.MessageBoxボタン押下時のButPressed戻り値 | |
|---|---|
| 定数値 | 押されたボタン |
0x0000 mrNone |
ボタンが押されていない |
0x0001 mrOK |
|
0x0002 mrCancel |
|
0x0003 mrAbort |
|
0x0004 mrRetry |
|
0x0005 mrIgnore |
|
0x0006 mrYes |
|
0x0007 mrNo |
|
注意:右上の「×」をクリックするか、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(デフォルトは1)から開始されます。 指定された Offset の後に SearchText が SourceText 内に出現しない場合、ゼロが返されます。 |
|
|
LazUtf8.Next(String) イテレータ関数で、呼び出されるたびに String 内の次の文字とその開始位置(バイト単位)を返します。 例: -- "位置 : 文字" の形式で値のペアを出力 for iPos, sChar in LazUtf8.Next(String) do DC.LogWrite(iPos .. " : " .. sChar) end |
|
|
sResult = LazUtf8.Copy(String, iIndex, iCount) 文字列の一部をコピーします。 Copy は String 内の位置 iIndex から始まる iCount 文字のコピーである文字列を返します。 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 に変換します。 サポートされるエンコーディング値のリスト:
Windows での例(英語またはロシア語):
|
|
|
sEnc = LazUtf8.DetectEncoding(String) 転送テキストのエンコーディング値を返します。 |
|
このライブラリには、文字が特定の Unicode カテゴリに属するかどうかをチェックする関数と、文字のカテゴリを取得する関数が含まれています。
このライブラリで利用可能な関数の一覧です:
| 文字ライブラリ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 関数名 | 説明 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
iResult = Char.GetUnicodeCategory(Character) 文字
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
bResult = Char.IsDigit(Character) Character 文字が Nd カテゴリに属する場合、 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
bResult = Char.IsLetter(Character) Character 文字が Lu、Ll、Lt、Lm、または Lo カテゴリに属する場合、 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
bResult = Char.IsLetterOrDigit(Character) Character 文字が Lu、Ll、Lt、Lm、Lo、Nd、または Nl カテゴリに属する場合、 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
bResult = Char.IsLower(Character) Character 文字が Ll カテゴリに属する場合、 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
bResult = Char.IsUpper(Character) Character 文字が Lu カテゴリに属する場合、 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
さらに、これらの関数は2つの引数を使用することもできます:単一の文字ではなく、文字列とその文字列内の文字の位置を指定できます。
このライブラリには、Double Commander が実行されているオペレーティングシステムに関連する関数が含まれています。
このライブラリで利用可能な関数の一覧です:
| オペレーティングシステムライブラリ | |
|---|---|
| 関数名 | 説明 |
|
iResultCode = os.execute(sCommand) sCommand をコマンドラインに入力した場合と同様に実行し、操作の結果コードを返します。 sCommand は以下のようになります:
|
|
|
sTempFileName = os.tmpname() 一時ファイル名として使用されるファイル名(システムの一時ファイルディレクトリ内)を返します。 |
|
|
bResult, sError, iError = os.remove(sFileName) sFileName という名前のファイルまたはディレクトリを削除します。 成功した場合、関数は 失敗した場合、関数は以下の3つを返します:
|
|
|
bResult, sError, iError = os.rename(sOldName, sNewName) sOldName という名前のファイルを新しい名前 sNewName に変更します。 注意:sNewName という名前のファイルが既に存在する場合、それは置き換えられます! 成功した場合、関数は 失敗した場合、関数は以下の3つを返します:
|
|
|
Value = os.getenv(VariableName) 引数で渡された変数 VariableName の Value を返します。 |
|
|
os.setenv(VariableName, Value) VariableName 環境変数を追加または変更します。エラーが発生した場合、関数は -1 を返します。 |
|
|
os.unsetenv(VariableName) VariableName 環境変数を削除します。エラーが発生した場合、関数は -1 を返します。 |
|