옵시디언 RunJS를 사용하여 활성화된 노트를 Total Commander에서 여는 방법을 소개합니다.
이 글은 옵시디언 RunJS: 외부 프로그램 실행하기 1 (VSCode)에서 이어지는 내용으로, 이번에는 Total Commander에서 노트 파일을 여는 RunJS 코드를 다룹니다.
이 코드는 조금만 수정하면 다른 응용 프로그램에도 쉽게 적용할 수 있습니다.
옵시디언에서 Total Commander 실행하기
아래 그림을 보면 RunJS 코드목록 패널에 네 개의 Total Commander 실행 항목과 두 개의 관련 모듈 항목(Total Commander, RunJS/Utils)을 확인할 수 있습니다. 각 실행 항목을 클릭하면 Total Commander에서 옵시디언의 활성화된 노트 파일을 열 수 있습니다.
RunJS 코드목록 패널에 코드 추가하기
코드블럭으로 된 실행 코드와 모듈 코드들은 노트에 삽입하고 자바스크립트 파일로 된 코드들은 RunJS의 스크립프 폴더에 넣어줘야 합니다.
실행 코드 소스
다음 네 개의 코드블록은 RunJS 코드목록 패널에 실행 항목을 추가합니다. 이 코드는 옵시디언의 노트에 그대로 복사하여 사용할 수 있습니다.
- 활성화된 옵시디언 노트를 Total Commander의 왼쪽(1)/오른쪽(2)/활성화(3)된 패널에서 열기
- 마지막 코드블럭(selection)은 선택한 텍스트를 파일 경로로 인식하여 Total Commander에서 열기(4)
모든 코드블럭에서는 'Open with/Total Commander'이라는 모듈을 사용하고 있습니다.
```js RunJS="{n:'Open with/Total Commander - Left',t:'s'}"
import { openWithTotalCommander } from 'Open with/Total Commander';
openWithTotalCommander("left");
```
```js RunJS="{n:'Open with/Total Commander - Right',t:'s'}"
import { openWithTotalCommander } from 'Open with/Total Commander';
openWithTotalCommander("right");
```
```js RunJS="{n:'Open with/Total Commander - active',t:'s'}"
import { openWithTotalCommander } from 'Open with/Total Commander';
openWithTotalCommander();
```
```js RunJS="{n:'Open with/Total Commander - selection',t:'s'}"
import { openWithTotalCommander_selection } from 'Open with/Total Commander';
// openWithTotalCommander_selection(this.app, "left");
openWithTotalCommander_selection(this.app);
```
Total Commander 모듈 코드 소스
실행 코드에서 사용하는 공통 함수는 코드블럭으로 만들어진 다음 모듈 코드에서 정의됩니다. 이 코드 또한 옵시디언의 노트에 복사하여 사용하면 됩니다.
Total Commander의 설치 위치가 다른 경우 exeFilePath 변수의 값을 바꾸어 주세요.
```js RunJS="{n:'Open with/Total Commander',t:'m'}"
/*
* Command line parameters - TotalcmdWiki
* https://www.ghisler.ch/wiki/index.php/Command_line_parameters
*
* totalcmd.exe [/o] [/n] [Drive1:\Directory1 [Drive2:\Directory2]] [/i=name.ini] [/f=ftpname.ini]
* totalcmd.exe [/o] [/n] [/L=Drive1:\Directory1] [/R=Drive2:\Directory2] [/i=name.ini] [/f=ftpname.ini]
*/
import { getSelection } from 'RunJS/Utils';
const exeFilePath = "C:\\Program Files\\totalcmd\\TOTALCMD64.EXE";
function getActiveFilePath() {
const leaf = app.workspace.getLeaf();
app.workspace.setActiveLeaf(leaf);
const file = leaf.view.file;
console.log("file:", file);
const url = require('url');
let filePath = url.fileURLToPath(app.vault.adapter.getFilePath(file.path));
console.log("filePath:", filePath);
return filePath;
}
const { spawn } = require('child_process');
const path = require('path');
function _openWithTotalCommander(...args) {
// "C:\Program Files\totalcmd\TOTALCMD64.EXE" /I=D:\totalcmd00\wincmd.ini /F=D:\totalcmd00\wcx_ftp.ini
// 프로세스 실행
const exeProcess = spawn(exeFilePath, [...args]);
// 오류 처리
exeProcess.on('error', (error) => {
console.error('TC 실행 도중 오류가 발생했습니다:', error);
});
// 종료 처리
exeProcess.on('exit', (code) => {
if (code === 0) {
console.log('파일이 TC에서 열렸습니다.');
} else {
console.error('파일 열기 도중 오류가 발생했습니다.');
}
});
}
export function openWithTotalCommander(where) {
if (where === "right") {
_openWithTotalCommander('/o', '/R=' + getActiveFilePath());
} else if (where === "left") {
_openWithTotalCommander('/o', '/L=' + getActiveFilePath());
} else {
_openWithTotalCommander('/o', '/S', getActiveFilePath());
}
}
export async function openWithTotalCommander_selection(app, where) {
let filePath = await getSelection(app);
if (filePath.startsWith("file:")) {
const url = require('url');
filePath = url.fileURLToPath(filePath);
}
if (where === "right") {
_openWithTotalCommander('/o', '/R=' + filePath);
} else if (where === "left") {
_openWithTotalCommander('/o', '/L=' + filePath);
} else {
_openWithTotalCommander('/o', '/S', filePath);
}
}
```
공용 모듈(RunJS/Utils)
위 Total Commander 모듈 코드에서는 'RunJS/Utils' 모듈을 사용합니다. 'RunJS/Utils'는 코드블록이 아닌 별도의 모듈 파일로 제공됩니다. 설치 방법은 이전 글(옵시디언 RunJS: 외부 프로그램 실행하기 1 (VSCode))에서 확인하세요. 이미 설치한 경우 건너뛰면 됩니다.
마치며
이번 포스트에서는 옵시디언 RunJS를 활용하여 외부 프로그램, 특히 Total Commander에서 노트를 여는 방법을 알아보았습니다.
이 글은 GitHub Discussions에서도 확인할 수 있습니다
이제 필요에 따라 다른 외부 프로그램(Everything, Notepad++ 등)에도 응용해 보세요. RunJS를 잘 활용하면 옵시디언의 생산성을 높일 수 있습니다! 😊
궁금한 점이나 의견이 있다면 댓글로 알려주세요!
'RunJS - Obsidian Plugin > Codes' 카테고리의 다른 글
옵시디언 RunJS: 파일 탐색기에 "파일 경로 복사(클립보드)" 메뉴 추가하기 (1) | 2025.01.03 |
---|---|
옵시디언 RunJS: 파일 탐색기에 "VSCode에서 열기" 메뉴 추가하기 (0) | 2024.12.29 |
옵시디언 RunJS: 이벤트 다루기 (데일리 노트에 시간 자동 추가) (0) | 2024.12.24 |
옵시디언 RunJS: 외부 프로그램 실행하기 1 (VSCode) (1) | 2024.12.18 |
옵시디언 RunJS: Callout 넣기 (1) | 2024.12.12 |