この記事は公開から4年以上経過しています。
過去のエントリで紹介したVSCode Macros拡張を使って、エディタで選択されているテキストをブラウザでグーグル検索するマクロの作り方を紹介します。例はグーグル検索ですが、応用次第でHTTP GETが利用できる様々なウェブサービスで利用できます。
本サンプルではブラウザの起動にシェルを利用しています。マクロからシェルを呼び出す際には入力データでコマンドインジェクションが発生しなように注意が必要です。
動作イメージ
マクロを実行してVSCodeエディタ上で選択されている文字をGoogle検索している様子です。
サンプルソースコード
※マクロコンフィギュレーション部分のマクロ名と順番は、現在お使い頂いているマクロファイルに合わせてご利用ください。
const vscode = require('vscode');
const process = require('process');
const cp = require('child_process');
module.exports.macroCommands = {
グーグル検索: {
no: 1,
func: searchOnGoogle,
},
};
async function searchOnGoogle() {
const text = await getSearchWords();
if (text?.length) launchDefaultBrowser(text);
}
function launchDefaultBrowser(keywords) {
let launcher;
// プラットフォーム(OS)判定
switch (process.platform) {
case 'linux':
launcher = 'xdg-open';
break;
case 'darwin':
launcher = 'open';
break;
case 'win32':
launcher = 'start "" ';
break;
}
// URLをデフォルトブラウザで開く
if (launcher?.length) cp.exec(`${launcher} "https://www.google.com/search?q=${encodeURI(keywords)}"`);
}
async function getSearchWords() {
const editor = vscode.window.activeTextEditor;
let searchWords;
if (editor) {
const document = editor.document;
const selection = editor.selection;
searchWords = document.getText(selection);
}
if (!searchWords?.length) {
// テキストが選択されていない場合は入力ボックスで検索ワードを入力
searchWords = await vscode.window.showInputBox({ prompt: 'Enter search words' });
}
return searchWords;
}
ちなみにMacについては動作未確認です。もし動作しない場合は、JavaScriptのOS判定している部分のopen
コマンドあたりを修正してみてください。
参考ウェブサイトなど
- Node.js
Node.js Documentation
以上です。