Double Commander

2.15. Lua Kịch bản

nội dung

1. Giới thiệu
2. Yêu cầu DLL
3. Thư viện chức năng Double Commander
3.1. Thư Viện DC
3.1.1. DC. Ví dụ về việc sử dụng ExecuteCommand
3.2. Thư viện hệ thống
3.2.1. SysUtils.FileGetAttr Giá trị trả về Chi tiết
3.2.2. Ví dụ sử dụng SysUtils.FileGetAttr
3.2.3. Ví dụ sử dụng FindFirst, FindNext và FindClose
3.3. Thư viện Clipboard
3.3.1. Ví dụ về sử dụng thư viện Clipboard
3.4. Thư viện hộp thoại
3.4.1. Nút được hiển thị trong hộp thoại.MessageBox
3.4.2. Kiểu cửa sổ cho hộp thoại.MessageBox
3.4.3. Nút hoạt động mặc định cho hộp thoại.MessageBox
3.4.4. Giá trị trả về của hộp thoại.MessageBox
3.4.5. Ví dụ sử dụng Dialogs.MessageBox
3.4.6. Ví dụ sử dụng Dialogs.InputQuery
3.5. Thư viện UTF-8
3.6. Thư viện ký tự
3.7. Thư viện hệ điều hành
4. chỉ mục

1. Giới thiệu

Để biết thêm thông tin về ngôn ngữ lập trình Lua script, hãy truy cậptrang web của Lua.

Double Commander có thể thực thi Lua script thông qua lệnhcm_ExecuteScript
Các tham số script phải được truyền như hiện tại mà không cần thoát (không có dấu ngoặc kép hoặc "\"), để làm điều này chúng ta cần sử dụng biến%"0: ví dụ, đối với các tập tin dưới con trỏ%"0%p0 mà không phải%p0, Đối với thư mục hiện tại sử dụng%"0%D mà không phải%D。Nếu không, nếu Double Commander tự động thêm dấu ngoặc kép, chúng sẽ được truyền như một phần của đối số và bạn sẽ phải xem xét điều này.
Để có được một danh sách tất cả các tập tin được chọn, chúng ta có thể sử dụngcác biến (%LU%FU hoặc%RU) hoặc các lệnh nội bộ (cm_SaveSelectionToFile,cm_SaveFileDetailsToFile,cm_CopyFullNamesToClip hoặccm_CopyFileDetailsToClip). Ví dụ, ta có thể dùng%p: Trong trường hợp này, Double Commander sẽ vượt qua tên của tất cả các tệp được chọn trên một dòng, cách nhau bằng dấu cách.

Nội dung plug-in cũng có thể được viết bằng cách sử dụng Lua script, ví dụ có thể được tìm thấy trong thư mục chương trình (plugins/wdx/scripts). Wiki có một trang dành riêng để viết các plugin. Hạn chế: Chỉ hỗ trợ các kiểu dữ liệu sau

Danh sách trên chứa tên trong tệp tiêu đề và trong tập lệnh Lua, chúng ta phải sử dụng giá trị số được chỉ định trong dấu ngoặc đơn.


Về mã hóa văn bản

Tất cả các hàm bổ sung được mô tả dưới đây chấp nhận các đối số chuỗi được mã hóa bởi UTF-8 và trả về chuỗi được mã hóa này (ngoại trừ hàmLazUtf8. ConvertCoding).

Một số chức năng trong thư viện Lua tiêu chuẩn đã được thay thế (hoặc các chức năng mới được viết) bằng các chức năng từ Double Commander hoặc Free Pascal/Lazarus, cung cấp hỗ trợ UTF-8.

Khi viết plugin, chúng ta cũng nên sử dụng UTF-8 (ft_multiplechoice,ft_stringft_fulltext) cho dữ liệu văn bản.

Khi bạn lưu tập lệnh, hãy sử dụng mã hóa UTF-8 mà không có BOM.


Chú ý

Tự động hóa với Lua có khả năng cao, nhưng trong một số trường hợp có thể cần chú ý đến một số chi tiết. Chúng ta hãy thử thu thập chúng trong phần này.

1. Chức năng làm mới sẽ hoạt động không đồng bộ nếu tùy chọnlàm mới tự độngtải danh sách tệp trong các luồng riêng biệt đượcbật. Trong khi đó, các tập lệnh được thực thi trong luồng chính của Double Commander, vì vậy trong một số trường hợp, tất cả những điều này có thể ảnh hưởng đến hoạt động của tập lệnh của bạn. Ví dụ, đôi khi thực hiện liên tụccác lệnh điều hướng có thể không hoạt động (ví dụ: thư mục lớn, đĩa chậm), trong trường hợp đó hãy thử vô hiệu hóaviệc tải danh sách tệp trong các luồng riêng biệt hoặc tìm giải pháp thay thế.

Nếu tập lệnh của bạn tạo một tệp mới hoặc đổi tên tệp hiện có trong bảng điều khiển hiện tại, nhưng sau đó không hoàn thành và thực hiện một số thao tác bổ sung (ví dụ: chọn tệp hoặc di chuyển con trỏ), trong một số trường hợp, chúng sẽ không có hiệu lực: không phải tất cả các tệp có thể đã ở trong bảng điều khiển, trước tiên bạn cần gọi lệnhcm_Refresh. Trong các điều kiện được mô tả,cm_Refresh cũng sẽ được thực hiện không đồng bộ và Double Commander có thể không có thời gian để làm mới hoàn toàn danh sách tệp sau khi thay đổi của bạn.

Tự động làm mới và tải danh sách các tệp trong các luồng riêng biệt là các tính năng tiện dụng của trình quản lý tệp, vì vậy một phương pháp làm việc ổn định đã được tìm thấy thông qua thử nghiệm, tức là tạm thời trả lại quyền kiểm soát cho chương trình và cho phép danh sách tệp được làm mới hoàn toàn:

DC.ExecuteCommand("cm_Refresh")
i = 10
while i > 0 do
  SysUtils.Sleep(10)
  DC.ExecuteCommand("")
  i = i - 1
end

2. Chức năng Luaio.open Sử dụng các chức năng C chuẩnfopenTrong chế độ văn bản, hàm này có thể chuyển đổi kiểu kết thúc dòng (CRLF, LF hoặc CR) khi đọc và viết, có thể dẫn đến kết quả không mong muốn.Điều này phải được xem xét nếu bạn gặp phải các tệp có kiểu kết thúc dòng khác nhau hoặc đang viết các tập lệnh đa nền tảng, hoặc thực tế hơn là ưu tiên sử dụng chế độ nhị phân.

3. Trong Linux và các hệ điều hành giống Unix khác, đối với hộp thoạithuộc tính tệp, hãy gọiContentGetValue Các chức năng vớiCONTENT_DELAYIFSLOW Flag (tham số thứ tư, giá trị 1), tránh sự chậm trễ khi mở cửa sổ: nếu dữ liệu được truy xuất chậm, chúng ta có thể kiểm tra và trả về các trường hoặc plugin này bằng cách chỉ cần thêm giá trị cờnil để loại trừ các dữ liệu này.

4. Nếu một plugin nên trả về một chuỗi rỗng, nó sẽ vượt quanil hơn truyền qua"" Nhanh hơn.

2. Yêu cầu DLL

Để có thể giải thích file Lua script, chúng ta cần file Lua DLL, và Double Commander hỗ trợ phiên bản 5.1 - 5.4.

Chúng tôi có thể sử dụng các tệp DLL từdự án LuaJIT. LuaJIT kết hợp một trình thông dịch tốc độ cao được viết bằng Assembly và một trình biên dịch JIT tiên tiến. Ngoài ra, chúng tôi có được thư viện FFI, cho phép gọi các hàm C bên ngoài và sử dụng cấu trúc dữ liệu C từ mã Lua thuần túy.

Các phiên bản Windows của DC chứa Lua DLL theo mặc định (từ dự án Lua JIT trong DC 0.9.7 trở lên) và trong các trường hợp khác, chúng ta có thể tìm và cài đặt nó thông qua trình quản lý gói hoặc tự biên dịch. Nếu chúng ta đang sử dụng phiên bản 64 bit của DC, DLL cũng phải là phiên bản 64 bit.

Theo mặc định, DC sẽ tìm kiếm các tệp cótênlua5.1.dll (Windows),liblua5.1.so.0(Unix hoặc GNU/Linux) hoặcliblua5.1.dylib(macOS) trong thư mục hệ thống và thư mục hệ thống của nó. Chúng ta có thể thay đổi tên tập tin (và đường dẫn) trong tham sốtập tin thư viện Lua mà chúng ta muốn sử dụng.

3. Thư viện Chức năng Double Commander

Double Commander cung cấp một số thư viện chức năng cho tập lệnh Lua của chúng tôi.

Dưới đây là danh sách các thư viện này.

Danh sách các thư viện
Tên thư việnTên tập lệnhMô tả ngắn gọn
DCDouble Commander Chức năng cụ thể
SysUtils cácchức năng hệ thống khác nhau
Clipbrdcung cấp khả năng clipboard bên ngoài
Tương tác với người dùng
LazUtf8UTF-8 Chức năng chuỗi
CharNhận thông tin ký tự
Cácchức năng liên quan đến hệ điều hành của hệ điều hành

3.1. Thư Viện DC

Thư viện chứa các hàm cụ thể của Double Commander.

Nó được tìm thấy trongDC Tất cả các chức năng được cung cấp trong một bảng

Thư Viện DC
Mô tảtên chức năng

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

Viết một thông điệp đến cửa sổ nhật ký:

  • sMessage: văn bản tin nhắn.
  • iMsgType: Kiểu thông báo: 0 -Thông tin, 1 -Thành công, 2 -Lỗi.
  • bForce: boolean, nếu đúng, sẽ được hiển thị khi cửa sổ nhật ký không hiển thị.
  • bLogFile: Giá trị boolean, nếu đúng, cũng sẽ ghi thông báo vào tệp nhật ký.

iPanel = DC.CurrentPanel(): Giao diện

Nhận bảng điều khiển hoạt động: Trả về 0 nếu bảng điều khiển bên trái đang hoạt động, nếu không thì 1.

DC. Bảng điều khiển hiện tại (iPanel)

Thiết lập Active Panel: Bảng điều khiển bên trái khiiPanelbằng 0 và bảng điều khiển bên phải khi bằng 1.

DC.ExecuteCommand(sCommand, Param1, Param2,..., bởi ParamX)

Điều này cho phép script gọicác lệnh bên trongcủa Double Commander.

SCommandlà tên thực tế của lệnh nội bộ.

Chúng tôi có thể cung cấp bao nhiêu Param tùy thích được hỗ trợ bởi lệnh... Các parameter được

Ngoài các lệnh nội bộ, trong các tập lệnh chúng ta có thể sử dụng lệnh đặc biệtcm_ExecuteToolBarItem, cho phép các nút trên thanh công cụ được gọi thông qua một định danh (trong chương trình, chức năng này cung cấp khả năng sử dụng phím tắt cho các nút trên thanh công cụ). Lệnh này được sử dụng theo cách tương tự như lệnh nội bộ thông thường (xem ví dụ bên dưới) và có các tham số sau:

tham số giá trị miêu tả
Công cụ BarID Thanh công cụ TfrmOptionsBar Các nút trên thanh công cụ chính
TfrmOptionsToolbarMiddle Nút trên thanh công cụ ở giữa
(không tồn tại) Các nút trên thanh công cụ chính
ToolItemID Số nhận dạng Số nhận dạng duy nhất cho các nút

Số nhận dạng duy nhất được lưu trữ trongID Trong tab, chúng ta có một số cách để lấy nó: nút có thể được tìm thấy trong tệpdoublecmd.xml, tệp sao lưu thanh công cụ hoặc chỉ cần sao chép nút vào clipboard và dán mã của nó trong trình soạn thảo văn bản.

Lưu ý: Mã định danh được tạo tự động và không nhất thiết phải khớp với mã định danh của một nút tương tự trong một bản sao khác của chương trình, nhưng chúng ta có thể đặt giá trị của riêng mình theo cách thủ công nếu cần.

3.1.1. Ví dụ về việc sử dụng DC.ExecuteCommand

Trong ví dụ này, chúng tôi đã viết một kịch bản đơn giản sẽ làm như sau:

  1. Tập trung vào bảng bên phải
  2. Đóng tất cả các tab đã mở
  3. Chuyển đổi sang một thư mục cụ thể
  4. Tập trung vào panel bên trái
  5. Đóng tất cả các tab đã mở
  6. Chuyển đổi sang một thư mục cụ thể
  7. Mở một tab mới
  8. Chuyển đổi sang một thư mục cụ thể
-- 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")

Sử dụng lệnh nội bộcm_ExecuteScript, chúng ta có thể cấu hình một nút trên thanh công cụ để thực thi tập lệnh của mình.

Giả sử file văn bản này làE:\scripts\lua\music.lua, chúng ta có thể định cấu hình các nút như sau:

从工具栏调用 Lua 脚本

Ngoài ra, chúng ta cũng có thể sử dụng trình biên tập nội bộ Double Commander để chỉnh sửa các tập lệnh. Nếu tên tập tin có.lua Phần mở rộng, biên tập viên nội bộ sẽ nhận ra nó và cung cấp cú pháp nổi bật cho ngôn ngữ Lua:

使用内部编辑器进行 Lua 语法高亮显示

3.2. Thư viện hệ thống

Thư viện chứa các chức năng hệ thống khác nhau.

Nó được tìm thấy trongSysUtils Tất cả các chức năng được cung cấp trong một bảng

Thư viện hệ thống
Mô tảtên chức năng

SysUtils.Sleep(iMilliseconds)

Tạm dừng thực thi tập lệnh trong một số mili giây được chỉ định, iMilliseconds.
Sau một khoảng thời gian xác định, việc thực thi kịch bản sẽ tiếp tục.

SysUtils.GetTickCount() Xem bản đồ

Trả về một đồng hồ đếm ngày càng tăng. Nó có thể được sử dụng để đo thời gian, nhưng không nên giả định khoảng thời gian giữa các lần đánh dấu.

bExists = SysUtils.FileExists(sFileName)

Kiểm tra sự hiện diện của một file cụ thể trong hệ thống file.

Giá trị được trả về trongbExistsnếu một tập tin có tênsFileNametồn tại trên đĩatrueNếu không trở vềfalse

bExists = SysUtils.DirectoryExists(sDirectory)/Các thư mục

Kiểm traxem sDirectory có tồn tại trong hệ thống tệp và thực sự là một thư mục hay không.

Nếu vậy, hàm sẽ trả về một giá trị trongbExiststrueNếu không trở vềfalse

iAttr = SysUtils.FileGetAttr(sFileName)

Trả về các thiết lập thuộc tính của filesFileName trongiAttr.

Để biết thêm chi tiết về giá trị trả về, xemtại đây.

Handle, FindData = SysUtils.FindFirst(sPath)-Xử lý, FindData = SysUtils.FindFirst(sPath)

Tìm tập tin phù hợp vớisPath, thường sử dụng ký tự đại diện.

Nếu tập tin không được tìm thấy,xử lý sẽ cung cấp cho bạnnil

Khi ít nhất một mục được tìm thấy,Handletrả về có thể được sử dụng để theo dõiSysUtils.FindNext Gọi để tìm các trận đấu khác của cùng một mẫu.

BảngFindDatachứa thông tin về các tệp hoặc thư mục được tìm thấy.

Các lĩnh vực của bảngFindDatalà:

  • Name: Tên tập tin (không bao gồm đường dẫn).
  • Attr: Thuộc tính của file (xem chi tiết tạiđây).
  • Size: Kích thước tập tin tính bằng byte.
  • Thời gian: Dấu thời gian của tập tin (giây kể từ ngày 1 tháng 1 năm 1970).

Kết quả, FindData = SysUtils.FindNext(Handle)

Bằng cách sử dụnglại Handleđược trả về trước đó, tìm kiếm được cung cấp bởiFindFirst Kết quả tiếp theo của chuỗi tìm kiếm bắt đầu.

Nếu một tập tin hoặc thư mục được tìm thấy,kết quảtrả về sẽ không trống, nếu không thìnil

Cùng vớiSysUtils.FindFirst Những lưu ý tương tự cũng được áp dụng ở đây.

Lời bài hát: Last TimeSysUtils.FindNext Cuộc gọi phải luôn luôn theo sau một người sử dụng cùng mộttay cầmSysUtils.FindClose cuộc gọi. Làm như vậy sẽ gây ra rò rỉ bộ nhớ.

SysUtils.FindClose(Handle)

Kết thúc một chuỗiSysUtils.FindFirst/SysUtils.FindNext cuộc gọi.

Giải phóng bất kỳ bộ nhớ nào được sử dụng bởi những cuộc gọi này.

Thực hiện cuộc gọi này là hoàn toàn cần thiết, nếu không nó có thể dẫn đến rò rỉ bộ nhớ.

bResult = SysUtils.CreateDirectory(sDirectory): tạo thư mục mới

Tạo một chuỗi các thư mục vàsDirectory là đường dẫn đầy đủ đến các thư mục.

Trả về nếusDirectoryđã tồn tại hoặc được tạo thành côngtrue。Nếu không thành công trong việc tạo ra bất kỳ phần nào, hãy quay trở lạifalse

bResult = SysUtils.CreateHardLink(sFileName, sLinkName)

Tạo liên kết cứngsLinkName cho filesFileName.

Trở về nếu thành côngtrueNếu không trở vềfalse

bResult = SysUtils.CreateSymbolicLink(sFileName, sLinkName)

Tạo liên kết tượng trưngsLinkName cho tập tin hoặc thư mụcsFileName.

Nếu thành công sẽ quay lạitrueNếu không trở vềfalse

sTarget = SysUtils.ReadSymbolicLink(sLinkName, bRec)

Đọc đích đến của liên kết tượng trưngsLinkName.

NếuBRectrue Và liên kết trỏ đến một liên kết khác, sau đó phân tích cú pháp đệ quy cho đến khi tìm thấy một tên tệp không liên kết hợp lệ.

Trả về đường dẫn đến liên kết tượng trưngsLinkName hoặc nếu liên kết không hợp lệ hoặc tập tin trỏ đến không tồn tại vàbRecorsivetrue Khi một chuỗi rỗng được trả về.

sName = SysUtils.ExtractFileName(sFileName)

Trích xuất phần tên tập tin từ tên tập tin của đường dẫn đầy đủ.

Tên tệp bao gồm ký tự tách ra thư mục cuối cùng ("/" hoặc "\") hoặc tất cả các ký tự sau chữ cái của ổ đĩa.

sExt = SysUtils.ExtractFileExt (sFileName)/sExt = SysUtils.ExtractFileExt (sFileName)

Trả về phần mở rộng của tên tập tin ("cuối cùng") Tất cả các ký tự sau (điểm), kể cả "." nhân vật).

sPath = SysUtils.ExtractFilePath(sFileName)

Trích xuất đường dẫn (bao gồm cả chữ cái ổ đĩa) từ tên tập tin.

Đường dẫn bao gồm tất cả các ký tự trước ký tự tách ra thư mục cuối cùng ("/" hoặc "\"), kể cả bản thân dấu tách ra thư mục.

sDir = SysUtils.ExtractFileDir(sFileName)

Chỉ trích xuất các phần củathư mục sFileName, bao gồm các chữ cái ổ đĩa.

Tên thư mục không có dấu tách thư mục ở cuối, điều này khác vớiSysUtils.ExtractFilePath khác nhau.

sDrive = SysUtils.ExtractFileDrive(sFileName)

Trích xuất phần ổ đĩa từ tên tệp.

Xin lưu ý rằng một số hệ điều hành không hỗ trợ chữ cái ổ đĩa.

sName = SysUtils.GetAbsolutePath(sFileName, sBaseDirectory)

Trả về đường dẫn tuyệt đối (đầy đủ) của tập tin:

  • sFileName: Tên file với đường dẫn tương đối.
  • sBaseDirectory: thư mục được sử dụng làm thư mục cơ sởcủa sFileName.

Nếu bạn không thể có được đường dẫn tuyệt đối, hàm sẽ trả về giá trị củasFileName.

sName = SysUtils.GetRelativePath(sFileName, sBaseDirectory)

Trả về tên tập tin liên quan đến thư mục được chỉ định:

  • sFileName: Tên file hoàn chỉnh (tuyệt đối).
  • sBaseDirectory: Một thư mục sẽ được sử dụng làm thư mục cơ sởcủa sFileName.

NếusFileNamesBaseDirectory có cùng giá trị, hàm sẽ trả về một chuỗi rỗng (""). Nếu bạn không thể lấy tên file với đường dẫn tương đối, hàm sẽ trả về giá trị củasFileName.

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

NếusFileName khớp với mặt nạsMaskđược truyền, trả vềtrue

iMaskOptions(đối số tùy chọn, mặc định 0) được đặt thành tổng của các giá trị sau:

giá trị miêu tả
1
Phân biệt chữ hoa chữ thường
2
Bỏ qua dấu và dấu gạch nối
4
Các bộ lọc kiểu Windows: "*.*" Cũng phù hợp với các tập tin không có phần mở rộng, vv.
8
Bật hỗ trợ pinyin (tập tinpinyin.tblsẽ được sử dụng)

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

NếusFileName khớp với ít nhất một trong các mặt nạ truyềnsMaskListđược phân tách bởisSeparator(mặc định là ";"), trả vềtrue

sSeparatoriMaskOptions (xem bên trên) là các tham số tùy chọn.

sTempFileName = SysUtils.GetTempName()(tên miền)

Một tên tệp được sử dụng làm tên tệp tạm thời (trong thư mục tệp tạm thời của hệ thống) sẽ được trả về, tương tự như chức năngos.tmpname, nhưng tệp sẽ được tạo trong thư mục con sẽ tự động bị xóa khi Double Commander đóng.
Nếu hàm không thể tạo một tên duy nhất, nó sẽ trả về một chuỗi rỗng.

SysUtils.PathDelim

Hệ điều hành hiện hành được sử dụng để phân cách các ký tự của tên thư mục trong tên tệp đầy đủ.

Trong các hệ thống Unix/Linux, dấu phân cách thư mục sẽ là "/" và trong Windows sẽ là "\".

3.2.1. SysUtils.FileGetAttr Giá trị trả về Chi tiết

FileGetAttr Trả về các thiết lập thuộc tính của tập tinsFileName

Một thuộc tính là một tổ hợpORcủa các hằng số sau:

SysUtils.FileGetAttr Trả về hằng số được sử dụng trong giá trị
Từ đồng nghĩavới value
0x0.000.001
faReadOnly
File là read-only
0x00000002 0x000000002 0x00000002
faHidden
File bị ẩn
Trong Unix/Linux, điều này có nghĩa là tên tệp bắt đầu bằng một dấu chấm.
0x00000004 lượt xem
faSysFile (Tập tin)
File là file hệ thống.
Trong Unix/Linux, điều này có nghĩa là một tập tin là một ký tự hoặc một thiết bị khối, một đường ống được đặt tên (FIFO).
0x0000008 lượt xem
maVolumeId
nhãn nhãn.
Chỉ hoạt động với các hệ thống tệp FAT (không phải VFAT hoặc FAT32) thông thường trên DOS/Windows.
0x0000010
faDirectory
File là một thư mục.
0x0000020 lượt xem
faArchive (tiếng Việt)
Tài liệu đã được nộp.
Không thể dùng Unix/Linux.
0x00000400
faSymLink
Tập tin là một liên kết tượng trưng.
Lưu ý:-1 sẽ được trả về nếu có lỗi xảy ra.

Xem ví dụ trongphần tiếp theo.

3.2.2. Ví dụ sử dụng SysUtils.FileGetAttr

Các kịch bản sau đây làSysUtils.FileGetAttr Một ví dụ về cách sử dụng

Khi phát hiện tham số là một thư mục, nó sẽ mở một tab mới trong bảng điều khiển hoạt động và chuyển sang thư mục đó.

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

Trong ví dụ trên,params[1] là tham số đầu tiên được truyền vào tập lệnh.

Khi sử dụng lệnh nội bộcm_ExecuteScript, nó sẽ là tham số đầu tiên được truyền sau tên tệp của tập lệnh.

Vì vậy, trong ví dụ của chúng tôi, chúng tôi có thể cấu hình một nút thanh công cụ như thế này:

使用 cm_ExecuteScript 的参数

Trong ví dụ này, tham số%"0%p sẽ được chuyển sang kịch bản.Điều này sẽ đại diện cho tên tập tin của mục được chọn trong bảng điều khiển hiện hoạt không được trích dẫn.

3.2.3. Ví dụ sử dụng FindFirst, FindNext và FindClose

Trong ví dụ tập lệnh sau đây, chúng tôi sẽ quét nội dung thư mục nhận được trong các tham số và lưu trữ dữ liệu kết quả vào tệp văn bản với tên tệp được truyền bằng tham số thứ hai.

Điều này sẽ cho chúng ta một ý tưởng tốt vềFindFirstFindNext hòaFindClose Sử dụng.

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

Trong ví dụ trên, chúng ta cần truyền hai tham số vào tập lệnh:

  1. params[1]-thư mục mà chúng tôi muốn nội dung
  2. params[2]-tên tập tin đầu ra để lưu kết quả

Vì vậy, thật dễ dàng để cấu hình các nút trên thanh công cụ bằng cách sử dụng lệnh nội bộcm_ExecuteScriptvà vượt qua các tham số để làm tất cả.

使用 cm_ExecuteScript 的参数

Trong ví dụ này, tham số%"0%Ds Tham số đầu tiên sẽ được truyền vào kịch bản.Điều này sẽ đại diện cho thư mục được hiển thị bởi bảng điều khiển hoạt động không được trích dẫn.

3.3. Thư viện Clipboard

Double Commander có thể cung cấp khả năng clipboard bên ngoài cho các tập lệnh Lua của chúng tôi.

Bảng sau đây cung cấp các chức năng liên quan:

Thư Viện Clipboard
Tên hàmSự miêu tả

Clipbrd. Xóa ()

Xóa nội dung của Clipboard.

sVar = Clipbrd.GetAsText() Giá trị mặc định

Lấy nội dung văn bản hiện tại của clipboard và gán nó chosVar. Nếu clipboard không chứa văn bản, hàm sẽ trả về một chuỗi rỗng.

Clipbrd.SetAsText(sVar)

Lưu trữ nội dung văn bản củasVartrong clipboard.

nhẬp vÀo Clipbrd.SetAsHtml (sHtml)

Hướng dẫn càiđặt ứng dụng HTML (CF_HTML định dạng Clipboard).

Nội dung này sẽ được chèn vào các ứng dụng hỗ trợ định dạng clipboard này, chẳng hạn như MS Word, LO Writer, v.v.

Sử dụngClipbrd.SetAsText hòaClipbrd.SetAsHtml Tất cả các dữ liệu được lưu trữ đều đúng. Khi chúng ta dán, ứng dụng sẽ sử dụng định dạng tốt nhất mà nó hỗ trợ.

Ví dụ, chúng tôi có thể có những điều sau đây:

  • Clipbrd.SetAsText("欢迎使用 Double Commander!")
  • Clipbrd.SetAsHtml("欢迎使用 <b>Double Commander</b>!")

Nếu chúng ta chuyển sang Notepad để cố gắng dán một cái gì đó, nó sẽ dán dưới dạng văn bản thuần túy mà chúng ta sử dụngClipbrd.SetAsText Copy tin nhắn. Nhưng nếu chúng ta chuyển sang Microsoft Word và dán một cái gì đó, nó sẽ dán cái thứ hai, cái màDouble Commanderin đậm, vì Microsoft Word nhận ra và hỗ trợ loại nội dung clipboard đó.

3.3.1. Ví dụ về sử dụng thư viện Clipboard

Ví dụ sau đây sử dụng ba chức năng liên quan đến clipboard:ClearGetAsText hòaSetAsText

Đây là một kịch bản tương đối dài, nhưng nó hoạt động tốt để kết hợp một số chức năng đã thấy ở trên.

Nó giả định rằng bảng điều khiển hoạt động của chúng tôi hiện đang ở trong một thư mục có chứa nhiều tệp văn bản nguồn.

Nó cũng giả định rằng chúng ta hiện có một từ trong clipboard và nó sẽ nhận được thư mục hoạt động hiện tại dưới dạng một tham số duy nhất.

Kịch bản sẽ quét các tập tin ở cấp độ thư mục hiện tại và đọc nội dung của chúng từng cái một để phát hiện các dòng văn bản có chứa các từ trong clipboard.

Sau đó, tên tập tin có chứa ít nhất một dòng của từ đó sẽ được đặt vào clipboard.

Kịch bản sau đó sẽ sử dụng lệnh nội bộcm_LoadSelFromtionClip và tệp có chứa từ đó sẽ được chọn.

Ngoài ra, cuối cùng, chúng tôi sẽ đặt các từ gốc mà chúng tôi cần tìm kiếm trở lại vào clipboard.

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. Thư viện hộp thoại

Thư viện cho phép các tập lệnh của chúng tôi tương tác với người dùng, hiển thị tin nhắn, nhắc nhở câu trả lời và hơn thế nữa.

Các chức năng liên quan được liệt kê trong bảng sau:

Thư viện hộp thoại
Mô tảtên chức năng

iButton = Đối thoại.MessageBox(sMessage, sTitle, iFlags)

Hiển thị một hộp thông báo nhắc người dùng nhấp vào nút sẽ được trả về bởi hàm:

  • sMessage: văn bản trong hộp tin nhắn.
  • Tiêu đề: Tiêu đề của hộp thông báo.
  • iFlags: bitwise hoặc giá trị của hằng số, được sử dụng để xác định nút nào được hiển thị, kiểu cửa sổ và nút mặc định. Xem bảng sau đây để biếtcác nút được hiển thị,kiểu cửa sổ hoặc cácnút mặc định.
  • iButton: Trả về một giá trị đại diện cho một nút được nhấn bởi người dùng (xembảng này).

bResult, sAnswer = Dialogs.InputQuery(sTitle, sMessage, bMask, sDefault) Sửa đổi

Một hộp yêu cầu được hiển thị, nơi người dùng có thể nhập chuỗi:

  • sTitle: Tiêu đề của hộp yêu cầu.
  • sMessage: Nội dung trong hộp yêu cầu.
  • bMask: Giá trị boolean, khi true,"ngôi sao" được hiển thị để ẩn ký tự.
  • sDefault: văn bản được đề xuất mặc định, có thể được sửa đổi bởi người dùng khi cần thiết.
  • bResult: Trả về giá trị boolean để cho biết liệu người dùng có thực sự nhập nội dung hay không.
  • sAnswer: Trả về một chuỗi khi người dùng nhập nội dung và nhấp vào OK.

sItem, iItem = Đối thoại.InputListBox(sTitle, sMessage, aItems, sDefault)

Hiển thị một hộp thoại cho phép người dùng chọn từ danh sách các mục:

  • sTitle: Tiêu đề của hộp thoại.
  • sMessage: Văn bản trong hộp thoại.
  • aItems: Một bảng Lua, nơi mỗi phần tử trong bảng phải là một chuỗi.
  • sDefault: Mục được chọn theo mặc định trong danh sách.
  • sItem: Trả về các mục đã chọn dưới dạng chuỗi, nếu hộp thoại bị hủynil
  • iItem: Chỉ số của các mục đã chọn (đếm từ 1, phù hợp với thói quen của bảng Lua).

3.4.1. Nút được hiển thị trong hộp thoại.MessageBox

Dialogs.MessageBox Nút được hiển thị bởi hàm được điều khiển bởi bitwise hoặc giá trị của hằng số sau:

, từ trái sang phải
Hộp thoại.MessageBox Hiển thị hằng số ButFlags cho các nút
Nút hiển thịgiá trị hằng số
0x0.000
MB_OK
按钮 OK
0x0001
MB_OKCANCEL (tiếng Anh)
按钮 OK 按钮 CANCEL
0x0002 lượt xem
MB_ABORTRYIGNORE
按钮 ABORT 按钮 RETRY 按钮 IGNORE
0x0003
MB_YESNOCANCEL
按钮 YES 按钮 NO 按钮 CANCEL
0x0004
MB_YESNO
按钮 YES 按钮 NO
0x0005 0x0005 (Tiếng Việt)
MB_RETRYCANCEL
按钮 RETRY 按钮 CANCEL

3.4.2. Kiểu cửa sổ cho hộp thoại.MessageBox

Dialogs.MessageBox Kiểu cửa sổ được hiển thị bởi hàm được điều khiển bởi bitwise hoặc giá trị của hằng số sau:

Hội thoại.MessageBox Biểu tượng và kiểu ButFlags hằng số
Kiểu cửa sổgiá trị không đổi
0x0040
MB_ICONFORMATION
图标 INFORMATION Cửa sổ thông tin
0x0030
MB_ICONWARNING
图标 WARNING Cửa sổ cảnh báo
0x0020
MB_ICONQUESTION
图标 QUESTION Cửa sổ xác nhận
0x0010
MB_ICONERROR
图标 ERROR Cửa sổ lỗi

3.4.3. Nút hoạt động mặc định cho hộp thoại.MessageBox

Dialogs.MessageBox Nút hoạt động mặc định được hiển thị bởi một hàm được điều khiển bởi bitwise hoặc giá trị của hằng số sau:

Hội thoại.MessageBox Hằng số ButFlags cho nút mặc định
Giá trị hằngNút mặc định
0x0.000
MB_DEUTFBTON1
Mặc định cho nút đầu tiên ở bên trái
0x0100
MB_DEUTFBTON2
Mặc định cho nút thứ hai ở bên trái
0x0200
MB_DEUTFBTON3 (Tiếng Việt)
Mặc định là nút thứ ba bên trái

3.4.4. Giá trị trả về của hộp thoại.MessageBox

Dialogs.MessageBox Số được trả về bởi hàm đại diện cho nút được nhấn bởi người dùng, như sau:

Giá trị ButPressed được trả về khi nút Dialogs.MessageBox được nhấn
Nút được nhấn bởigiá trị hằng số
0x0.000
mrNone
Không nút nào được nhấn
0x0001
mrOK
结果 OK
0x0002 (Tiếng Việt)
mrCancel
结果 CANCEL
0x0003
mrAbort
结果 ABORT
0x0004
mrRetry
结果 RETRY
0x0005 0x0005 (Tiếng Việt)
mrIgnore
结果 IGNORE
0x0006
mrVâng
结果 YES
0x0007 lần xem
mrNo
结果 NO

Lưu ý: Nếu bạn nhấn "x" ở góc trên bên phải hoặcEsc Đóng cửa sổ và giá trị của nút Cancel được trả về.

3.4.5. Ví dụ sử dụng Dialogs.MessageBox

Sau đây là một cách sử dụngDialogs.MessageBox Kịch bản nhỏ và cửa sổ kết quả sẽ được hiển thị:

-- 显示的按钮
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. Ví dụ sử dụng Dialogs.InputQuery

Sau đây là một cách sử dụngDialogs.InputQuery Kịch bản nhỏ và cửa sổ kết quả sẽ hiển thị:

bResult, sAnswer = Dialogs.InputQuery("身份验证", "请输入您的姓名:", false, "约翰")

if bResult == true then
  Dialogs.MessageBox("您好 " .. sAnswer .. "!", "欢迎!", 0x0040)
end

Dialogs.InputQuery 使用示例

3.5. Thư Viện UTF-8

Thư viện này cung cấp hỗ trợ cơ bản cho mã hóa UTF-8.

Nó được tìm thấy trongLazUtf8 Tất cả các chức năng được cung cấp trong bảng.

Thư viện UTF-8
Mô tảtên chức năng

iResult = LazUtf8. Pos (Tìm kiếm văn bản, SourceText, Offset)

Tìm kiếm chuỗi con trong chuỗi bắt đầu từ vị trí được chỉ định. Trường hợp tìm kiếm nhạy cảm.

Trả về nơi chuỗi conSearchText xuất hiện lần đầu tiên trong chuỗiSourceTextvà tìm kiếm bắt đầu từ vị tríOffset(mặc định là 1).

Trả về 0 nếuSearchText không xuất hiện trongSourceText sau khiđã choOffset.

LazUtf8. Tiếp theo (String)

Một hàm iterator trả về ký tự tiếp theo trongStringvà nơi ký tự đó bắt đầu, tính bằng byte, mỗi lần được gọi.

Ví dụ:

-- 以 "位置 : 字符" 的形式打印值对
for iPos, sChar in LazUtf8.Next(String) do
  DC.LogWrite(iPos .. " : " .. sChar)
end

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

Sao chép một phần của chuỗi

Copy trả về một chuỗi là một bản sao củaiCountký tự trongString bắt đầu từ vị tríiIndex.

NếuiCount lớn hơn độ dài củaString, kết quả sẽ bị cắt ngắn. NếuiIndex lớn hơn chiều dài củaString, một chuỗi rỗng sẽ được trả về.

iResult = LazUtf8. Length (String)(chuỗi)

Trả về số lượng ký tự UTF-8 trong chuỗi.

sResult = LazUtf8.UpperCase(String)(chuỗi)

Nhận một chuỗi và trả về một bản sao của chuỗi đó, trong đó tất cả các chữ cái viết thường đã được thay đổi thành chữ hoa.

sResult = LazUtf8.LowerCase(String)(chuỗi)

Nhận một chuỗi và trả về một bản sao của chuỗi đó, trong đó tất cả các chữ hoa đã được thay đổi thành chữ thường.

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

Chuyển đổi mã hóa củaStringtừFromEncsangToEnc.

Danh sách các giá trị mã hóa được hỗ trợ:

  • Mã hóa hệ thống mặc định (tùy thuộc vào cài đặt khu vực hệ thống):"mặc định".
  • Mã hóa ANSI (Windows) mặc định (tùy thuộc vào cài đặt khu vực hệ thống):"ansi".
  • Mã hóa OEM (DOS) mặc định (tùy thuộc vào cài đặt khu vực hệ thống):"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","iso85914","iso85915","iso85916".
  • Khác:"mactosh","koi8r","koi8u","koi8ru".
Ý nghĩa của mã hóa đặc biệt (ví dụ).

Trong Windows (tiếng Anh hoặc tiếng Nga):
  • "mặc định"-cp 1252 hoặc cp1251
  • 'ansi'-cp 1252 hoặc cp1251
  • "OEM" - cp850 hoặc cp866
Trong Linux (tiếng Anh hoặc tiếng Nga):
  • "mặc định"-utf8
  • 'ansi'-cp 1252 hoặc cp1251
  • "OEM" - cp850 hoặc cp866

sEnc = LazUtf8.DetectCoding (String)

Trả về giá trị được mã hóa của văn bản được truyền.
Danh sách mã hóa được hỗ trợ so vớiLazUtf8.ConvertEncoding Mã hóa được sử dụng trong các chức năng là tương tự.

3.6. Thư viện ký tự

Thư viện chứa các hàm để kiểm tra xem các ký tự có thuộc về một thể loại Unicode cụ thể hay không, cũng như các hàm để lấy thể loại ký tự.

Danh sách các hàm có sẵn trong thư viện này:

Thư viện ký tự
Mô tảtên chức năng

iResult = Char.GetUnicodeCategory (Tính năng)

Nhân vật trở lạiCharacter Danh mục Unicode, một trong những giá trị sau:

dấu gạch ngang (Pd)dòng (Zl)
Giá trịmô tả
  Chữ cái:
0Chữ hoa (Lu)
1Chữ thường (Ll)
2Chữ cái tiêu đề (Lt)
3Chữ cái sửa đổi (Lm)
4 Cácchữ cái khác (Lo)
  Đánh dấu:
5Đánh dấu không gian (Mn)
6Đánh dấu kết hợp khoảng cách (Mc)
7Dấu đóng (Me)
  số:
8Số thập phân (Nd)
9chữ số (Nl)
10Số khác (No)
  Chấm câu:
11 dấuchấm câu nối (Pc)
Dấu chấm câu12
13Điểm mở thầu (Ps)
14Dấu câu đóng (Pe)
15Dấu câu ban đầu (Pi)
16Chấm câu cuối cùng (Pf)
17Dấu câu khác (Po)
  Các biểu tượng:
18Biểu tượng toán học (Sm)
19Biểu tượng tiền tệ (Sc)
20Ký hiệu sửa đổi (Sk)
21Biểu tượng khác (SO)
  Dấu phân cách:
22Dấu cách cách (Zs)
Dấu phân cách23
24Dấu phân cách đoạn văn (Zp)
  Khác:
25kiểm soát (CC)
26định dạng (Cf)
27Đại lý (Cs)
28Đặc biệt (Co)
29Chưa phân phối (Cn)

bResult = Xa.IsDigit(Tính cách)

Trả về nếu ký tựCharacternằm trong lớpNdtrue

bResult = Char.IsLetter(Character)(Tính cách)

Trả về nếu ký tựCharacternằm trong các lớpLu,Ll,Lt,Lm hoặcLotrue

bResult = Xa.IsLetterOrDigit(Character)

Trả về nếu kýtự Characternằm trong các lớpLu,Ll,Lt,Lm,Lo,Nd hoặcNltrue

bResult = Char.IsLower(Tính cách)

Nếu ký tựCharacternằm trong lớpLl, trả vềtrue

bResult = Xa.IsUpper(Character)

Nếu ký tựCharacternằm trong lớpLu, trả vềtrue

Ngoài ra, các hàm này hỗ trợ việc sử dụng hai tham số: thay vì một ký tự duy nhất, chúng ta có thể chỉ định một chuỗi và vị trí của các ký tự trong chuỗi đó.

3.7. Hệ điều hành Thư viện

Thư viện này chứa các chức năng liên quan đến hệ điều hành mà Double Commander đang chạy.

Dưới đây là danh sách các chức năng có sẵn trong thư viện đó:

Thư viện hệ điều hành
Mô tảtên chức năng

iResultCode = os.execute (sCommand)(mã lệnh)

sCommandsẽ được thực hiện như thể nó được nhập vào dòng lệnh và mã kết quả của hành động được trả về.

sCommandcó thể là:

  • Các lệnh terminal nhưos.execute("dir > all.txt")
  • Tập tin thực thi, ví dụos.execute("C:\\Windows\\System32\\calc.exe")
  • Thực thi với các thông số:
    os.execute("C:\\Utils\\fsum.exe -md5 test.bin > md5.txt")

sTempFileName = os.tmpname ()

Một tên tệp được sử dụng như một tên tệp tạm thời (trong cặp tệp tạm thời của hệ thống) được trả về.
Nếu hàm không thể tạo một tên duy nhất, nó sẽ trả về một chuỗi rỗng.

bResult, sError, iError = os.remove (sFileName) Sửa đổi

Tập tin hoặc thư mục có tênsFileNamesẽ bị xóa.

Nếu thành công, hàm trả vềtrue

Nếu thất bại, hàm trả về ba điều:

  1. nil biểu thị thất bại
  2. sErrorlà mô tả thông báo lỗi
  3. iErrorlà số mã lỗi

bResult, sError, iError = os.rename (sOldName, NewsName)/sOldName (sOldName)/sLỗi, iError = os.rename (sOldName, NewsName)

Tập tinsOldNamesẽđượcđổi tên với tên mới sNewName.

Lưu ý: Nếu tập tin có tên sNewName đã tồn tại, nó sẽ được thay thế!

Nếu thành công, hàm trả vềtrue

Nếu thất bại, hàm trả về ba điều:

  1. nil biểu thị thất bại
  2. sErrorlà mô tả thông báo lỗi
  3. iErrorlà số mã lỗi

Giá trị = os.getenv (VariableName)

Giá trịcủa biếnVariableNameđược truyền trong đối số sẽ được trả về.
Nếu một biến cho tên đó không tồn tại, nó sẽ trả vềnil

os.setenv (VariableName, Value)

Thêm hoặc thay đổi biến môi trườngVariableName. Nếu có lỗi xảy ra, hàm trả về-1.

os.unsetenv (VariableName)

Gỡ bỏ biến môi trườngVariableName. Nếu có lỗi xảy ra, hàm trả về-1.

4. chỉ số

Thư viện DC

DC.CurrentPanel
DC.ExecuteCommand
DC.LogWrite


Thư viện hệ thống

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


Thư viện Clipboard

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


Thư viện hộp thoại

Dialogs.InputListBox
Dialogs.InputQuery
Dialogs.MessageBox


Thư viện UTF-8

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


Thư viện ký tự

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


Thư viện hệ điều hành

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


Valid HTML 4.0 Transitional CSS Valid!