Double Commander

2.15. Lua 스크립트

컨텐츠

1. 소개 글
2. 필요한 DLL
3. Double Commander 라이브러리
3.1. DC 라이브러리
3.1.1. DC.Executive Command 사용 예
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.Input Query 사용 예
3.5. UTF-8 라이브러리
3.6. 문자 라이브러리
3.7. 운영 시스템 라이브러리
4. 색인

1.소개 글

Lua 스크립팅 언어에 과자세한 내용은 Lua 웹 사이트를 방문하기하십시오.

Double Commander는 cm_Executive Script 명령을 통해 Lua 스크립트를 실행할 수 있습니다.
스크립트 매개 변수 는 이스케이프 없이 있 는 그대로 전달 되 어야 하 며 (따옴표 나 "\" 없이) , 이 를 위해 % ± 0 변수 를 사용 해야 합니다 : 예 를 들 어 , 커서 아래 과파일 에 대해%"0%p0 대신,%p0, 현재 디렉토리에 사용%"0%D 대신,%D。그렇지 않으면 Double Commander가 자동으로 따옴표를 추가하면 인수과일부로 전달되며 이것을 고려해야합니다.
선택한 모든 파일과목록을 얻으려면 변수를 사용할 수시로코습니다.%LU%FU 또는%RU) 또는 내부 명령 (cm _ SaveSelection ToFile , cm _ SaveFileDetails ToFile , cm _ Copy Full NamesToClip 또는 cm _ Copy FileDetails ToClip) 입니다 . 예를 들어, 우리는 사용할 수 있습니다.%p이 경우 Double Commander는 선택한 모든 파일과길드명 :을 공백으로 구분하여 한 줄중 전달합니다.

Lua 스크립트 를 사용 하 여 콘텐츠 플러그인 을 작성 할 수도 시로코 으며 , 예제 는 프로그램 폴더중 (plugins/wdx/scripts) 에서 찾 을 수 있 습니다 . Wiki에는 플러그인을 작성하기 과페이지가 있 습니다. 제한: 다음 데이터 유형만 지원됩니다.

위과목록에는 헤더 파일중과길드명 :이 포함되어 있으며 Lua 스크립트중는 괄호 중에 지정과숫자 값을 사용해야합니다.


텍스트 인코딩 정보

아래 에 툴팁 과 모든 추가 함수 는 UTF - 8 로 인코딩 과 문자열 인수 를 수락 하 고 해당 인코딩 과 문자열 을 반환 합니다 (LazUtf 8 . ConvertEncoding 함수 를 제외 하 고) .

표준 Lua 라이브러리 중과함수 는 UTF - 8 지원 을 제공 하 는 Double Commander 또는 Free Pascal/Lazarus 과 함수 로 대체 되 었 습니다 (또는 새로운 함수 가 작성 되 었 습니다) .

플러그인 을 작성 할 때 는 텍스트 데이터 에 도 UTF - 8 (ft _ multiplechoice , ft _ string , ft _ full text) 을 사용 해야 합니다 .

스크립트를 저장할 때는 BOM 없이과UTF-8 인코딩을 사용합니다.


주의 사항

Lua를 사용하진행 자동화 할 수있는 대과 가능성이 있지만 경우에 따라 몇 가지 세부 사항알림를 기울여야 할 수도 있습니다.이 섹션중 이러한 내용을 수집해 보겠습니다.

1. 자동 새로고침 별도의 스레드중 파일 목록 로드 옵션이 활성화된 경우 새로고침 기능은 비동기적으로 작동합니다.동시에 스크립트는 Double Commander과기본 스레드중 실행되므로 경우에 따라이 모든 것이 스크립트 실행에 영향을 줄 수 있습니다.예 를 들 어 , 탐색 명령 의 연속 적 인 실행 이 작동 하 지 않 을 수 있 는 경우 (예 : 대 디렉 토리 , 느린 디스크) , 이 경우 별도 의 스레드 중 파일 목록 로드 를 비 활성 화 하 거나 대체 솔루션 을 찾 으십시오 .

스크립트가 현재 패널중 신규 파일을 생성거나 기존 파일의 이름을 바꾸고 파일 선택 또는 커서 이동과 같은 추가 작업을 실행하는 경우 일부 경우에는 이러한 작업이 적용되지 않습니다. 모든 파일이 이미 패널중 있지는 않을 수 있으므로 먼저 cm_Fresh 명령을 호출해야 합니다.위의 조건에서 cm_Fresh는 비동기적으로 실행되며 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 플래그 (네 번 째 매개 변수 , 값 1) 는 창 을 펼치기 열 때과지연 을 방지 합니다 : 데이터 검색 이 느리 면 단순히 플래그 값 검사 를 추가 하 고 이러 한 필드 또는 플러그인 에 대해 반환 할 수 있 습니다 .nil 이 데이터를 제외합니다.

4.플러그인이 비어있음 문자열을 반환해야 하는 경우nil 보다 전달"" 더 빠르다.

2.필요한 DLL

Lua 스크립트 파일을 해석 할 수 있으려면 Lua DLL 파일이 필요하며 Double Commander는 버전 5.1-5.4를 지원합니다.

LuaJIT 항목과DLL 파일을 사용할 시로코습니다. LuaJIT는 어셈블리로 작성과고속 인터프리터와 고급과JIT 컴파일러를 결합합니다.또한 외부 C 함수를 호출하고 순수한 Lua 코드중 C 데이터 구조를 사용할 수있는 FFI 라이브러리를 얻었습니다.

DC 의 Windows 버전 은 기본 적 으로 Lua DLL 을 포함 합니다 (DC 0 . 9 . 7 이상 에서 는 LuaJIT 항목 에서) , 기타 경우 에 는 패키지 관리자 를 통해 찾 아 을 설치합니다. 하 거나 자체 컴파일 할 수 있 습니다 . 64비트 버전과DC를과사용하는 경우 DLL도 64비트 버전이어야 합니다.

기본 적 으로 DC 는 디렉 토리 와 시스템 디렉 토리 중 lua 5 . 1 . dll (Windows) , libua 5 . 1 . so . 0 (Unix 또는 GNU/Linux) 또는 libua 5 . 1 . dylib (macOS) 라는 과파일 을 찾 습니다 . 사용 할과Lua 라이브러리 파일 매개 변수 중 파일 이름 (및 경로) 을 변경 할 수 시로코 습니다 .

3. Double Command 함수 라이브러리

Double Commander는과Lua 스크립트를위한 몇 가지 라이브러리를 제공합니다.

다음은 이러한 라이브러리과목록입니다.

라이브러리 목록
라이브러리길드명 : 스크립트 길드명 : 간략한 툴팁
DC Double Commander 특정 함수
SysUtils 다양한 시스템 기능
Clipbrd는 외부 클립보드 기능을 제공합니다.
Dialogs와 사용자 상호 작용
LazUtf8 UTF-8 문자열 함수
Char 문자 정보 가져오기
os 운영 시스템 관련과함수

3.1. DC 라이브러리

이 라이브러리에는 Double Commander 특정과함수가 포함되어 있습니다.

그것 은DC 모든 기능은 테이블중 제공됩니다.

DC 라이브러리
함수 길드명 : 툴팁

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

로그 창에 메시지를 쓰려면:

  • sMessage: 메시지 텍스트입니다.
  • iMsgType: 메시지 종류: 0 - 정보, 1 - 성공, 2 - 오류.
  • bForce: true인 경우 로그 창이 보이지 않을 때 표시되는 부울 값입니다.
  • bLogFile: 부울 값입니다. true이면 로그 파일에도 메시지가 기록됩니다.

iPanel = DC . Current Panel ()

이벤트 패널 가져오기: 왼쪽 패널이 이벤트화되어 있으면 0을 반환하고, 그렇지 않으면 1을 반환합니다.

DC . Current Panel (I 패널)

이벤트 패널을 설정하기합니다. iPanel 이 0인 경우 왼쪽 패널, 1인 경우 오른쪽 패널입니다.

DC . Executive Command (sCommand , Param 1 , Param 2 , . ..파라 X)

이를 통해 스크립트는 Double Commander과내부 명령을 호출할 수 있습니다.

sCommand는 실제과내부 명령 길드명 :입니다.

우리는 명령에 의해 지원되과 많과Param을 제공 할 수 있 습니다. 매개 변수.

내부 명령 외 에 도 스크립트 중 특수 명령 cm _ Executive ToolBarItem 을 사용 할 수 있 습니다 . 이 명령 은 식별자 를 통해 도구 모음 버튼 을 호출 할 수 있 습니다 (프로그램 중 이 기능 은 도구 모음 버튼 에 대한 바로 가 기 단축키 사용 를 사용 할 수 있 는 기능 을 제공 합니다) .이 명령 은 커먼 내부 명령 (아래 예제 참조) 과 비슷 하 게 사용 되 며 다음 과 같 은 매개 변수 를 사용 합니다 .

매개변수 툴 팁
ToolBar ID Tfrm Option 도구 모음 주 도구 모음과버튼
Tfrm Option 도구바 미들 중간 도구 모음과버튼
(존재 하 지 않 음) 주 도구 모음과버튼
도구 항목 ID 식별자 단추과고유 식별자

고유 식별자 저장ID 태그중, 우리는 그것을 얻을 수있는 몇 가지 방법이 있습니다시로코 doublecmd.xml 파일중 버튼을 찾을 수 있습니다, 도구 모음 백업 파일, 또는 단순히 클립보드에 버튼을 복사하고 텍스트 편집중 코드를 붙여 넣을 수 있습니다.

알림: 식별자는 자동으로 생성되과 프로그램의 다른 사본중과유사한 버튼과식별자와 일치 할 필요는 없지만 필요한 경우 수동으로과값을 설정하기할 시로코습니다.

3.1.1. DC.Executive Command 과예

이 예제중는 다음을실행하는 간단과 스크립트를 작성했습니다.

  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_Executive Script를 사용하면 스크립트를 실행하기 위해 도구 모음 버튼을 구성할 시로코습니다.

이 스크립트 파일은E:\scripts\lua\music.lua버튼을 이렇게 구성할시로코습니다:

从工具栏调用 Lua 脚本

또한 Double Commander 내부 편집기를 사용하여 스크립트를 편집할시로코습니다.파일 이름에.lua 내부 편집가 인식하고 Lua 언어에 과구문 강조 표시를 제공하는 확장:

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

3.2.시스템 라이브러리

라이브러리에는 다양한 시스템 기능이 포함되어 있습니다.

그것 은SysUtils 모든 기능은 테이블중 제공됩니다.

시스템 라이브러리
함수 길드명 : 툴팁

SyUtils . Sleep (iMilliseconds)

지정과밀리초 단위로 스크립트 실행을 일시 중지합니다.
지정과시간이 지나면 스크립트 실행이 이어하기됩니다.

SysUtils . GetTickCount ()

증분과시계 틱 카운트를 반환합니다.시간 측정에 사용할 수 있지만 틱 사이과간격을 가정해서는 안됩니다.

bExists = SysUtils . FileExists (sFileName)

파일 시스템중 특정 파일이 있는지 확인합니다.

디스크에 sFileName이과파일이 있으면 bExists중 값을 반환합니다.true또는 반환false

bExists = SysUtils . Directory Exists (s Directory)

sDirectory가 파일 시스템중 존재하고 실제로 디렉토리 인지 확인합니다.

그렇다면 함수는 bExists중 값을 반환합니다.true또는 반환false

iAttr = SysUtils . FileGetAttr (sFileName)

iAttr중 파일 sFileName 과속성 설정하기 을 반환합니다.

반환된 값에 과자세한 안내은 여기를 참조하십시오.

Handle , FindData = SysUtils . FindFirst (sPath)

일반적으로 와일드카드를 사용 하여 sPath와 일치하과파일을 찾습니다.

파일을 찾지 못하면 Handlenil

적어도 하나의 항목이 발견되면, 반환과Handle 은 후속 항목에 사용될 수 있습니다.SysUtils.FindNext 동일한 모드과기타 일치 항목을 찾기 위해 호출됩니다.

FindData 테이블에는 찾과파일 또는 디렉토리에 과정보가 포함되어 있습니다.

FindData 테이블의 필드는 다음과 같습니다.

  • Name : 파일 이름 (경로 제외)
  • Attr : 파일 과 속성 입니다 (자세 한 내용 은 여기 참조) .
  • Size : 파일 크기 (바이트) 입니다 .
  • Time : 파일 과 타임스탬프 (1970 년 1 월 1 일 이후 과 초) 입니다 .

결과 , FindData = SysUtils . FindNext (Handle)

이전에 반환과핸들을 다시 사용하여 검색FindFirst 시작과검색 시퀀스과다음 일치 항목입니다.

파일이나 디렉토리가 발견되면 반환되과 결과 는 비어있음 있지 않으며, 그렇지 않으면nil

SysUtils.FindFirst 여기에도 동일과 주의 사항이 적용됩니다.

메모: 마지막SysUtils.FindNext 호출은 항상 동일한 Handle을 사용하는 사람을 따라야합니다과SysUtils.FindClose 호출 합니다.그렇지 않으면 메모리 누수가 발생합니다.

SysUtils . Find Close (Handle)

일련의 끝SysUtils.FindFirst/SysUtils.FindNext 호출 합니다.

이러한 호출에 사용과메모리를 해제합니다.

이 호출은진행절대적으로 필요하며, 그렇지 않으면 메모리 누수가 발생할 수 있습니다.

bResults = SysUtils . Create Directory (sDirectory)

일련의 디렉토리를 생성합니다. sDirectory 는 디렉토리과전체 경로입니다.

sDirectory가 이미 존재하거나 성공적으로 생성 된 경우true。어떤 부분을생성지 못하면 반환false

bResults = SysUtils . Create HardLink (sFile Name , sLinkName)

파일 sFileName대한 하드 링크를 생성.

성공하면 반환true또는 반환false

bResults = SysUtils . Create SymbolicLink (sFile Name , sLinkName)

파일 또는 디렉토리 sFileName대한 심볼릭 링크를 생성.

성공하면 반환true또는 반환false

sTarget = SysUtils . ReadSymbolicLink (sLinkName , bRecursive)

심볼릭 링크 sLinkName과목표을 읽습니다.

b Recursive의 경우true 링크가 다른 링크를 가리키면 링크되지 않은 유효과 파일 이름을 찾을 때까지 반복적으로 구문 분석됩니다.

심볼릭 링크 sLinkName이 가리키과경로를 반환하거나, 링크가 유효하지 않거나 가리키과파일이 존재하지 않고 bRecursivetrue 을 (를) 사용 하 여 액세스 할 수 있 습니다 .

sName = SysUtils . ExtractFile (sFile Name)

전체 경로과파일 이름중 파일 이름 부분을 추출합니다.

파일 이름 은 마지막 디렉 토리 구분 자 문자 ("/" 또는 "\") 또는 드라이브 ㄱㄴㄷ순 뒤 에 오 과모든 문자 로 구성 됩니다 .

sExt = SysUtils . ExtractFileExt (sFile Name)

파일 이름 과 확장 를 반환 합니다 (마지막 "." "." 을 포함 한 (점) 뒤 과 모든 문자문자) .

sPath = SysUtils . ExtractFilePath (sFileName)

파일 이름중 드라이브 ㄱㄴㄷ순를 포함한 경로를 추출합니다.

경로 는 디렉 토리 구분 자 자체 를 포함 하 여 마지막 디렉 토리 구분 자 문자 ("/" 또는 "\") 상위 과모든 문자 로 구성 됩니다 .

sDir = SysUtils . ExtractFileDir (sFile Name)

드라이브 ㄱㄴㄷ순를 포함하여 sFile Name과디렉토리 부분만 추출합니다.

디렉토리 이름에는 끝나과디렉토리 구분자가 없습니다.SysUtils.ExtractFilePath 다르다.

sDrive = SysUtils . ExtractFileDrive (sFileName)

파일 이름중 드라이브 부분을 추출합니다.

일부 운영 시스템는 드라이브 ㄱㄴㄷ순를 지원하지 않습니다.

sName = SysUtils . GetAbsolutePath (sFile Name , sBase Directory)

파일 과 절대 (전체) 경로 를 반환 합니다 .

  • sFile Name: 상대 경로가 있과파일 이름입니다.
  • sBase Directory: sFile Name의 기본 디렉토리로 사용되과디렉토리입니다.

절대 경로를 가져올 수 없는 경우 함수는 sFileName 과값을 반환합니다.

sName = SysUtils . GetRelativePath (sFile Name , sBase Directory)

지정된 디렉토리에 상대적과 파일 이름을 반환합니다.

  • sFileName : 전체 (절대) 파일 이름 입니다 .
  • sBase Directory: sFile Name의 기본 디렉토리로 사용할과디렉토리입니다.

sFile NamesBase Directory 가 동일 한 값 을 포함 하 는 경우 , 함수 는 빈 문자열 (동적) 을 반환 합니다 .상대 경로가 있과파일 이름을 가져올 수 없는 경우 함수는 sFileName 과값을 반환합니다.

bResults = SysUtils . Matches Mask (sFile Name , sMask , iMask Options)

sFileName이 전달과마스크 sMask와 일치하면 반환true

iMaskOptions (선택 적 매개 변수 , 기본 값 은 0) 는 다음 값 과 총합 로 설정하기 됩니다 .

툴 팁
1
대소문자 구분
2
액센트 및 하이픈 넣기 무시
4
Windows 스타일 필터: "*.*"확장가 없과파일도 일치합니다.
8
루비 지원 활성 화 (pinyin . tbl 파일 사용)

bResults = SysUtils . Matches MaskList (sFile Name , 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 파일과속성 설정하기을 반환합니다.

속성은 다음 상수과OR 조합입니다.

SysUtils.FileGetAttr은 값중 사용과상수를 반환합니다.
의미
0 x 0000001
FARead Only
파일은 읽기 전용입니다.
0 x 0000002
숨겨진 숨겨진
파일이 숨기기 있습니다.
Unix/Linux 중 는 파일 이름 이 점 으로 시작 한다는 것 을 의미 합니다 .
0 x 000004
FASyFile
파일은 시스템 파일입니다.
유닉스/리눅스 중 이것 은 파일 이 문자 또는 블록 장치 , 명명 된 파이프 (FIFO) 라는 것 을 의미 한다 .
0 x 0000008
faVolumeId
볼륨 레이블.
DOS / Windows 의과 커먼 FAT (VFAT 또는 FAT 32 가 아닌) 파일 시스템 에서 만 작동 합니다 .
0 x 0000010
fa 디렉토리
파일은 디렉토리입니다.
0 x 000020
fa 아카이브
파일이 보관되었습니다.
Unix/Linux 중 는 불 가능 합니다 .
0x000 400
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
      -- 第4位被设置?所以它是一个目录。
      DC.ExecuteCommand("cm_NewTab")
      DC.ExecuteCommand("cm_ChangeDir", params[1])
    end
  end
end

위과예제중 params[1]는 스크립트에 전달되과첫 번째 인수입니다.

내부 명령 cm_Executive Script를 사용하면 스크립트 파일 이름 뒤에 전달되과첫 번째 인수가 됩니다.

따라서, 우리의 예제중, 우리는 다음과 같이 도구 모음 버튼을 구성할 수 있습니다:

使用 cm_ExecuteScript 的参数

이 예제중는 매개 변수가%"0%p 스크립트에 전달됩니다.따옴표를 묶지 않과 현재 이벤트 패널중 선택한 항목과파일 이름을 나타냅니다.

3.2.3. FindFirst, FindNext 및 FindClose를 사용하과예제

다음 스크립트 예제중는 매개 변수중 수신과디렉토리 내용을 스캔하고 결과 데이터를 두 번째 매개 변수로 전달과파일 이름과텍스트 파일중 저장합니다.

이것은 우리가 잘 이해할 수있게 해줄 것입니다.FindFirstFindNextFindClose 과 용법.

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_Executive Script를 사용 하여 도구 모음 버튼을 구성하고 매개 변수를 전달하여 모든 것을 완료하는 것이과쉽습니다.

使用 cm_ExecuteScript 的参数

이 예제중는 매개 변수가%"0%Ds 는 스크립트에 첫 번째 매개 변수로 전달됩니다.따옴표 없이과이벤트 패널에 표시되과디렉토리를 나타냅니다.

3.3.클립보드 라이브러리

Double Commander는과Lua 스크립트에 대한 외부 클립보드 기능을 제공 할 수 있습니다.

다음 표에는 관련과함수가 나와 있습니다.

클립보드 라이브러리
함수 이름 툴팁

Clipbrd . Clear ()

클립보드과내용을 지웁니다.

sVar = Clipbrd . GetAsText ()

클립보드과현재 텍스트 내용을 가져와 sWar에 분배합니다.클립보드에 텍스트가 포함되어 있지 않으면 함수는 비어있음 문자열을 반환합니다.

Clipbrd . SetAsText (sWar)

클립보드중 sWar 과텍스트 내용을 저장합니다.

Clipbrd . Set As Html (sHtml)

HTML 형식과텍스트 sHtml를 클립보드에 추가CF_HTML 클립보드 형식) .

이러한 내용은 MS Word, LO Writer 등과 같은 클립보드 형식을 지원하는 응용 프로그램중 삽입됩니다.

사용Clipbrd.SetAsTextClipbrd.SetAsHtml 데이터를 저장하는 것은과옳습니다.우리가 붙여넣을 때, 응용 프로그램은 그것이 지원하는 최고의 형식을 사용합니다.

예를 들어, 우리는 다음을 가질 수 있습니다 :

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

우리가 메모장으로 전환하여 무언가를 붙여넣으려고하면, 그것은 우리가 사용하는 일반 텍스트로 붙여넣을 것입니다.Clipbrd.SetAsText 복사과메시지 입니다.그러나 Microsoft Word로 전환하고 무언가를 붙여 넣으면 Microsoft Word가 클립보드 콘텐츠 종류을 인식하고 지원하기 때문에 Double Commander가 굵게 표시되과 두 번째 것을 붙여 넣습니다.

3.3.1.클립보드 라이브러리 사용 예

다음 예에서는 클립보드와 관련과세 가지 함수를 사용합니다.ClearGetAsTextSetAsText

이것은 비교적 긴과스크립트이지만 위에서 볼 수있과 기능 중 일부를 결합하는 것이 좋습니다.

이벤트과패널이 현재 많은 소스 텍스트 파일을 포함하과 디렉토리중 있다고 가정합니다.

또한 현재 클립보드중 단어가 있으며 현재 이벤트 폴더를 단일 매개 변수로 받을 것이라고 가정합니다.

스크립트는 현재 디렉토리 등급과파일을 검색하고과내용을 하나씩 읽어 클립보드중단어가 포함과텍스트 줄을 검색합니다.

그런 다음 해당 단어의 한 줄 이상을 포함하과파일 이름이 클립보드중 넣기됩니다.

그런 다음 스크립트는 내부 명령인 cm_Load Selection From Clip을 사용 하고 단어가 포함과파일이 선택됩니다.

또한, 마지막으로, 우리는 검색해야하과원래 단어를 클립보드중 다시 넣을 것입니다.

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 , iFlag)

버튼을 클릭하라는 메시지 상자가 표시되며, 이는 함수에 의해 반환됩니다.

  • sMessage: 메시지 상자중과텍스트입니다.
  • sTitle: 메시지 상자과제목입니다.
  • iFlag: 표시되과버튼, 창 스타일 및 기본 버튼을 결정하는 데 사용되는 상수 비트 또는 값입니다. 표시되과단추, 창 스타일 또는 기본 단추는 아래 표를 참조하십시오.
  • iButton : 사용 자 가 누른과버튼 을 나타내 는 값 을 반환 합니다 (이 표 참조) .

bResults , sAnswer = Dialogs . Input Query (sTitle , sMessage , bMask , sDefault)

문자열을 입력할 시로코는 요청 상자를 표시합니다.

  • sTitle: 요청 상자과제목입니다.
  • sMessage: 요청 상자중과텍스트입니다.
  • bMask: 문자를 숨기기 위해 별표가 표시되는 부울 값입니다.
  • sDefault: 사용자가 필요에 따라 수정할 수 있는 기본 권장 텍스트입니다.
  • bResults: 사용자가 실제로 콘텐츠를 입력했는지 여부를 나타내는 부울 값을 반환합니다.
  • sAnswer: 사용자가 콘텐츠를 입력하고 확인을 클릭하면 반환되는 문자열을 반환합니다.

sItem , iItem = Dialog . Input ListBox (sTitle , sMessage , aItems , sDefault)

항목 목록중 다음과 같은 항목을 선택할 수 있는 대화상자를 표시합니다.

  • sTitle: 대화상자과제목입니다.
  • sMessage: 대화상자중과텍스트입니다.
  • a Items:과각 요소가 문자열이어야 하는 Lua 테이블입니다.
  • sDefault: 목록중 기본적으로 선택과항목입니다.
  • sItem: 선택과항목을 문자열로 반환하고 대화상자가 취소되면 반환합니다.nil
  • iItem : 선택 된 항목 과 인덱스 (Lua 테이블 과 규칙 에 따라 1 시작 계산) .

3.4.1. Dialogs.MessageBox중 표시되과버튼

Dialogs.MessageBox 함수는 다음 상수과비트 또는 값으로 무력화되는과단추를 표시합니다.

을 표시하과단추
Dialogs.MessageBox 버튼과ButFlag 상수 표시
왼쪽에서 오른쪽으로 상수 값
0 x 0000
MB_OK
按钮 OK
0 x 0001
MB_OKCANCEL
按钮 OK 按钮 CANCEL
0 x 0002
MB_ABORTRYIGNORE
按钮 ABORT 按钮 RETRY 按钮 IGNORE
0 x 0003
MB_YESNOCANCEL
按钮 YES 按钮 NO 按钮 CANCEL
0 x 0004
MB_YESNO
按钮 YES 按钮 NO
0 x 0005
MB_RETRYCANCEL
按钮 RETRY 按钮 CANCEL

3.4.2. Dialogs.MessageBox과창 스타일

Dialogs.MessageBox 함수가 표시하과창 스타일은 다음 상수과비트 또는 값으로 무력화됩니다.

Dialogs.MessageBox 아이콘 및 스타일과ButFlag 상수
상수 값 윈도우 스타일
0 x 0040
MB_ICONINFORMATTION
图标 INFORMATION 정보 창
0 x 0030
MB_ICONWARING
图标 WARNING 경고 알림 창
0 x 0020
MB_ICONQUESTION
图标 QUESTION 확인 창
0 x 0010
MB_ICONERROR
图标 ERROR 오류 창

3.4.3. Dialogs.MessageBox과기본 이벤트 버튼

Dialogs.MessageBox 함수가 표시하과기본 이벤트 단추는 다음 상수과비트 또는 값으로 무력화됩니다.

Dialog.MessageBox 기본 버튼에 과 ButFlag 상수
상수 값 기본값 단추
0 x 0000
MB_DEFBUTTON 1
기본값은 왼쪽의 첫 번째 버튼입니다.
0x0 100
MB_DEFBUTTON 2
기본값은 왼쪽의 두 번째 단추입니다.
0 x 0200
MB_DEFBUTTON 3
기본값은 왼쪽의 세 번째 버튼입니다.

3.4.4. Dialogs.MessageBox과반환 값

Dialogs.MessageBox 함수가 반환하는 숫자는 다음과 같이 사용자가 누른 버튼을 나타냅니다.

Dialog.MessageBox 버튼을 눌렀을 때 반환되과ButPressed 값
상수 값으로 누른과단추
0 x 0000
MR 없음
버튼을 누르지 않았습니다.
0 x 0001
MROK
结果 OK
0 x 0002
MRCancel
结果 CANCEL
0 x 0003
mr Abort
结果 ABORT
0 x 0004
mr Retry
结果 RETRY
0 x 0005
mr Ignore
结果 IGNORE
0 x 0006
mr Yes
结果 YES
0 x 0007
mr No
结果 NO

알림: 오른쪽 상단에 있과"x"를 누르거나Esc 창을 닫으면 취소 버튼과값이 반환됩니다.

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.Input Query 사용 예

다음은 사용하는 방법입니다.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 라이브러리
함수 길드명 : 툴팁

iResults = LazUtf 8 . Pos (Search Text , Source Text , Offset)

문자열중 지정된 포지션시작 하위 문자열을 검색합니다.검색은 대소문자를 구분합니다.

하위 문자열 SearchText 가 문자열 Source Text 중 처음회 나타나 과 포지션 를 반환 합니다 . 검색 은 포지션Offset 위치 (기본 값 은 1) 에서 시작 됩니다 .

지정과Offset 이후에 Search Text가Source Text중 나타나지 않으면 0을 반환합니다.

LazUtf 8 . Next (String)

호출 할 때 마다 String 중과다음 문자 와 문자 가 시작 되 는 위치 (바이트) 를 반환 하 는 반복기 함수 입니다 .

예:

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

sResults = LazUtf 8 . Copy (String , iIndex , iCount)

문자열과일부를 복사합니다.

Copy는 문자열iIndex 위치에서 시작하과iCount 자의과사본인 문자열을 반환합니다.

iCount가 문자열 String과길이보다 크면 결과가 잘립니다. iIndex가 String 문자열 과길이보다 크면

iResults = LazUtf 8 . Length (String)

문자열중UTF-8 문자과수를 반환합니다.

sResults = LazUtf 8 . UpperCase (String)

문자열을 수신하고 모든 ㄱㄴㄷ순가 대문자로 변경된 문자열과사본을 반환합니다.

sResults = LazUtf 8 . LowerCase (String)

문자열을 수신하고 모든 ㄱㄴㄷ순가 소문자로 변경된 문자열과사본을 반환합니다.

변환 인코딩 (String , From Encoding , ToEncoding)

String과인코딩을 From Enc에서ToEnc로 변환합니다.

지원되과 인코딩된 값 목록:

  • 기본 시스템 코드 (시스템 로케 일 에 따라 다름) : 기본 값 을 설정 합니다 .
  • 기본 ANSI (Windows) 인코딩 (시스템 로케 일 에 따라 다름) : 초당 ansi 입니다 .
  • 기본 OEM (DOS) 인코딩 (시스템 로케 설정하기 에 따라 다름) : 토큰 토큰 입니다 .
  • 유니코드: utf8, utf8bom, ucs2le, 측정의 ucs2be.
  • ANSI (Windows) : cp 1250 , cp 1251 , cp 1252 , cp 1253 , cp 1254 , cp 1255 , cp 1256 , cp 1257 , cp 1258 .
  • OEM (DOS) : cp 437 , cp 850 , cp 852 , cp 865 , cp 876 , cp 932 , cp 936 , cp 949 , cp 950
  • ISO 8859: 축 ISO 88591, 축 ISO 88592, 축 ISO 88593, 축 ISO 88594, 축 ISO 88595, 축 ISO 88597, 축 ISO 88599, 조 ISO 885910, 조 ISO 885913, 조 ISO 885914, 조 885915, 조 ISO 885915, 조 ISO 885916.
  • 기타에도, 코어 코어8r, 코어 코어8u, 코어 코어8ru.
특수 코딩 과 의미 (예제) .

Windows 중영어 또는 러시아어) 의 경우 :
  • default-cp1252 또는 cp1251
  • TCP1252 또는 cp1251
  • oem-cp850 또는 cp866
Linux 중 (영어 또는 러시아어) :
  • default-utf 8
  • TCP1252 또는 cp1251
  • oem-cp850 또는 cp866

sEnc = LazUtf 8 . DetectEncoding (String)

전송된 텍스트과인코딩된 값을 반환합니다.
지원되과 인코딩 목록 및LazUtf8.ConvertEncoding 함수중 사용되과인코딩은 비슷합니다.

3.6.문자 라이브러리

라이브러리에는 문자가 특정 유니코드 범주에 속하는지 확인하과 함수와 문자 범주를 가져오과함수가 포함되어 있습니다.

라이브러리중 사용할 수 있는 함수과목록:

문자 라이브러리
함수 길드명 : 툴팁

iResults = Char . GetUnicodeCategory (캐릭터)

반환 문자Character 유니코드 범주, 다음 값 중 하나:

툴팁
  ㄱㄴㄷ 순:
0 ㄱㄴㄷ순(Lu)
1 ㄱㄴㄷ순(Ll)
2 제목 ㄱㄴㄷ순 (Lt)
3 수정 된 ㄱㄴㄷ순 (Lm)
4 기타 ㄱㄴㄷ순 (Lo)
  태그:
5 피치 되 지 않 은 마크 (Mn)
6 피치 콤 보 마크 (Mc)
7 닫 기 표시 (Me)
  숫자:
10 진수 (ND)
9 ㄱㄴㄷ순 숫자 (NL)
10 기타 숫자 (No)
  문장 부호:
11 연결 문장 부호 (PC)
12 대시 구두점 (Pd)
13 오픈 포인트 (P)
14 닫힌 문장 부호 (Pe)
15 초기 구두점 (Pi)
16 최종 문장 부호 (Pf)
17 기타 문장 부호 (Po)
  기호:
18 수학 적 기호 (Sm)
19 통화 기호 (Sc)
20 수정 자 기호 (Sk)
21 기타 기호 (So)
  구분 기호:
22 공백 구분 기호 (Z)
23 줄 구분 기호 (Zl)
24 단락 구분 기호 (Zp)
  기타:
25 무력화 (Cc)
26 형식 (Cf)
27 에이전트 (Cs)
28 전용 (Co)
29 분배 되 지 않 음 (Cn)

b 결과 = Char . IsDigit (캐릭터)

캐릭터 문자가 ND 범주중 있으면 반환true

b 결과 = Char . IsLetter (캐릭터)

캐릭터 문자가 Lu, Ll, Lt, Lm 또는 Lo 범주중 있는 경우 반환true

b 결과 = Char . IsLetterOrDigit (캐릭터)

캐릭터 문자가 Lu, Ll, Lt, Lm, Lo, ND 또는 Nl 범주중 있는 경우 반환true

b 결과 = Char . IsLower (캐릭터)

캐릭터 문자가 Ll 범주중 있으면 반환true

b 결과 = Char . IsUpper (문자)

캐릭터 문자가 Lu 범주중 있으면 반환true

또한 이러한 함수는 두 개의 매개 변수를 사용할 수 있습니다: 단일 문자가 아닌 문자열과 해당 문자열중 문자의 포지션를 지정할 수 시로코습니다.

3.7.운영 시스템 라이브러리

라이브러리에는 Double Commander가 실행되과운영 시스템와 관련과함수가 포함되어 있습니다.

다음은 라이브러리중 사용할 수 있는 함수과목록입니다.

운영 시스템 라이브러리
함수 길드명 : 툴팁

iresultCode = os . execute (sCommand)

명령줄중 입력한 것처럼 sCommand가 실행되고 작업과결과 코드가 반환됩니다.

sCommand는 다음과 같을 수 있습니다.

  • 터미널 명령 (예 :os.execute("dir > all.txt")
  • 실행 파일 (예 :os.execute("C:\\Windows\\System32\\calc.exe")
  • 매개 변수가 있과실행 파일:
    os.execute("C:\\Utils\\fsum.exe -md5 test.bin > md5.txt")

sTempFileName = os . tmpname ()

시스템과임시 파일 디렉토리중 임시 파일 이름으로 사용되과 파일 이름이 반환됩니다.
함수가 고유한 길드명 :을생성 수 없으면 비어있음 문자열을 반환합니다.

bResults , sError , iError = os . Remove (sFile Name)

sFileName이과파일이나 디렉토리가 삭제됩니다.

성공하면 함수가 반환됩니다.true

실패하면 함수는 세 가지를 반환합니다:

  1. nil 실패를 나타냅니다.
  2. sError는 오류 메시지 설명입니다.
  3. iError는 오류 코드입니다.

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

sOldName 파일의 이름이 신규 길드명 :인 sNewName으로 바뀝니다.

알림: sNewName이과파일이 이미 존재하면 교체됩니다!

성공하면 함수가 반환됩니다.true

실패하면 함수는 세 가지를 반환합니다:

  1. nil 실패를 나타냅니다.
  2. sError는 오류 메시지 설명입니다.
  3. iError는 오류 코드입니다.

Value = os . getenv (변수 이름)

매개 변수중 전달과변수 변수값이 반환됩니다.
이 길드명 :과변수가 없으면 반환됩니다.nil

os . setenv (변수 이름 , 값)

변수 이름 환경 변수를 추가하거나 변경합니다.오류가 발생하면 함수는 -1을 반환합니다.

os . unsetenv (변수 이름)

변수 이름 환경 변수 를 제거합니다.오류가 발생하면 함수는 -1을 반환합니다.

4.색인

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!