VSCodeで選択テキストをGoogle検索する(だけの)マクロ

この記事は公開から4年以上経過しています。

過去のエントリで紹介したVSCode Macros拡張を使って、エディタで選択されているテキストをブラウザでグーグル検索するマクロの作り方を紹介します。例はグーグル検索ですが、応用次第でHTTP GETが利用できる様々なウェブサービスで利用できます。

本サンプルではブラウザの起動にシェルを利用しています。マクロからシェルを呼び出す際には入力データでコマンドインジェクションが発生しなように注意が必要です。

動作イメージ

マクロを実行してVSCodeエディタ上で選択されている文字をGoogle検索している様子です。

image

サンプルソースコード

※マクロコンフィギュレーション部分のマクロ名と順番は、現在お使い頂いているマクロファイルに合わせてご利用ください。

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;
}

GitHub Gist

ちなみにMacについては動作未確認です。もし動作しない場合は、JavaScriptのOS判定している部分のopenコマンドあたりを修正してみてください。

参考ウェブサイトなど

以上です。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする