VS code Extension 개발 3 (터미널 활용 2)

Hong·2022년 8월 28일
0

VS code Extionsion

목록 보기
3/3

개발환경

  • mac

터미널에서 쉘 스크립트 사용하기

터미널1에서 만든 기능을 쉘스크립트를 활용하여 구현하려고 한다.

프로젝트 주소 받아오기

extension.ts-activate 함수에 브레이크 포인트를 걸고

지난번에 만든 Make Folder 기능을 실행하면 디버그가 걸린다.

매개변수 context를 확인하면 해당 익스텐션의 정보들이 있는데

해당 정보들 중 extensionPath가 있는데 이 path는 현재는 해당 익스텐션 프로젝트의 경로이다.

따라서 해당 프로젝트에 스크립트를 추가해서 배포한다면 스크립트를 사용 할 수 있을 것이다.

스크립트 추가

프로젝트에 script/mkdir.sh 스크립트를 추가하고

command를 추가했다.

기능 추가

terminal.ts 에 mkdir 함수를 복사해 mkdirInScript 함수를 생성하고

프로젝트 경로가 필요하기 때문에 매개변수를 추가한다.

export async function mkdirInScript(context: vscode.ExtensionContext) {
	const openFolder = await vscode.window.showOpenDialog({
		filters: {
			'All files (*.*)': ['*']
		},
		canSelectFolders: true,
		canSelectFiles: false,
		canSelectMany: false,
		openLabel: 'Select Folder',
	});
	if (!openFolder || openFolder.length < 1) {
		vscode.window.showErrorMessage("다시 선택하세요.");
		return;
	}

	const folderName = await vscode.window.showInputBox({
		placeHolder: "Folder Name",
		prompt: "Folder Name",
	});

	if(folderName === "" || folderName === "undefined"){
		vscode.window.showErrorMessage("다시 입력해주세요.");
		return;
	}

	let terminal = vscode.window.createTerminal({
		name: "Make Folder",
		hideFromUser: false,
	});
	const forderPath = openFolder[0].fsPath;

	terminal.show();
	terminal.sendText("mkdir " + forderPath + "/" + folderName);
}

맨밑 sendText함수를 수정한다.

	terminal.sendText("bash " + context.extensionPath + "/script/mkdir.sh " + folderName + " " + forderPath);

extension.ts에 기능을 추가한다.

	let makeFolderInScript = vscode.commands.registerCommand('terminal.mkdirinscript', async () => terminal.mkdirInScript(context));
	context.subscriptions.push(makeFolderInScript);

실행

Make Folder기능과 똑같이 실행시키면

쉘 스크립트로 폴더가 만들어진걸 확인할 수 있다.

응용

블로그에서는 터미널에서 간단히 폴더만 만들었지만

터미널에서는 압축, 서버 접속해서 업로드, DB 실행, 쿼리 실행, 빌드, 정보 출력하기, 프로그램 실행 등

모든 것을 할 수 있기 때문에 두 기능만 이용하더라도 자동화를 쉽게 할 수 있다.

아래는 Java프로젝트를 익스텐션에서 실행하는 간단한 예제이다.

java 프로젝트를 생성하고

utils.ts 파일 생성, javaBuild 함수 추가
javatest.buildtest command를 추가해주었다.

extension.ts.activate에 추가
	let javaBuild = vscode.commands.registerCommand('javatest.buildtest', async () => utils.javaBuild(context));
	context.subscriptions.push(javaBuild);

utils.ts에 추가
import * as vscode from 'vscode';

export async function javaBuild(context: vscode.ExtensionContext) {
    let terminal = vscode.window.createTerminal({
		name: "Java Build",
		hideFromUser: false,
	});
	terminal.show();
	terminal.sendText("javac " + context.extensionPath + "/Test/src/App.java");
	terminal.sendText("java -cp " + context.extensionPath + "/Test/src/ App");
}

실행되었다.

(만약 터미널에 자바가 설치되지 않은경우는 자바를 설치하게 하고 싶다면 스크립트를 통해 자바 설치가 안된 경우 자바를 설치하도록 할 수있다.)

추가로 후에 작성하겠지만

다른 익스텐션과의 연동또는 설정을 통한다면

직접 복잡한 익스텐션, 코드를 구현하지 않아도 보다 쉽게 더 많은 것들을 할 수 있다.

profile
게임 개발자

0개의 댓글