私のクリップボード管理ツールのメインはDittoです。Dittoは軽量で手軽に使えますが、カスタマイズ機能はありません。最近CopyQを再インストールし、いくつかの設定やカスタムコマンドを試してみました。これによりクリップボード操作をニーズに応じて処理でき、作業効率を向上させられます。この記事では、私が作成したいくつかのカスタム機能を紹介します。皆さんのクリップボード活用の参考になれば幸いです。

CopyQはQTで書かれたソフトウェアで、Windows・macOS・Linux上で動作し、GitHubでオープンソース公開されています。
CopyQでコピーした内容は「History」と呼ばれる領域に順次保存されます。Ctrl+Cを押すと、Clipboardタブに履歴として記録されます。History内の項目をクリックすると、その内容がシステムのクリップボードに取り込まれ、アクティブなアプリケーションに貼り付けられます。

1. 私のクリップボード拡張

1.1. 内容のバックアップ

最初の拡張は特定の内容を追加したタブにバックアップすることです。
必要な情報を素早く見つけやすくするための工夫です。デフォルトのClipboardタブでもCtrl+Fで検索できますが、自動分類されていれば再利用したい内容をさらに素早く探せます。

  1. コピーした内容が画像なら自動的に Images タブへ
  2. コピーした内容がURL(http://https://を含む)なら自動的に URL タブへ
  3. コピーした内容が ドライブ名:\ で始まる場合は自動的に Folders タブへ

1.2. 特定の項目を直接コピー

次の拡張は、n番目の項目を直接コピーする方法です:

  1. Alt+1 で1番目の項目をコピー
  2. Alt+2 で2番目の項目をコピー
  3. Alt+3 で3番目の項目をコピー
  4. Alt+V で選択した項目を連続コピー

2. カスタムコマンド追加手順

CopyQのメインウィンドウを開き、F6またはメニュー【File】→【Commands...】でカスタムコマンドを管理できます。

gh|486

2.1. 操作概要

  1. 〔Add〕→【New command】を選択(他のプリセットも選択可能)

gh|700

  1. 左側の【Name:】でコマンド名を指定
  2. 右下の【Show Advanced】にチェックを入れると【Advanced】タブが表示され、追加設定が可能
  3. 【Command】タブにスクリプトを入力。一般的には「copyq:」で始め、CopyQのスクリプト構文を使用。他にも「python:」や「powershell:」といった構文も利用可能
  4. コマンドタイプ(Type)は以下の切り替えが可能:
    1. Automatic: Ctrl+C後に自動実行するか
    2. In Menu: 項目の右クリックメニューに表示するか
    3. Global shortcut: グローバルショートカットを設定するか
    4. Display: 表示前にクリップボード内容を変更するか
メモ

AutomaticとGlobal shortcutは通常同時に選択しない

2.2. Historyにタブを追加

メニュー【Tabs】→【New Tab】で新しいタブを追加できます。例: Images、URL、Foldersなど。

デバッグ

popup(タイトル, 内容) を使うと通知として右下に内容を表示可能

3. バックアップ例

3.1. 画像の保存

  • クリップボードのフォーマットがimage/pngなら Images タブにコピー
    gh|700

スクリプト例:

copyq:

var currentFormats = dataFormats();

// 画像形式を含むか判定
if (currentFormats.indexOf("image/png") !== -1 ||
    currentFormats.indexOf("image/jpeg") !== -1 ||
    currentFormats.indexOf("image/gif") !== -1) {
  setData(mimeOutputTab, "Images")
} 

3.2. URLのバックアップ

  • 【Automatic】をチェック
  • 最初のURLだけをコピー
  • Add command の Copy web URL オプションも利用可能
copyq:
var text = str(clipboard());
var _iIndex = -1;
var _iIndex1 = text.indexOf('http://');
var _iIndex2 = text.indexOf('https://');
if (_iIndex1 >= 0) {
  text = text.substring(_iIndex1);
  _iIndex = text.indexOf(')', _iIndex1+1);
  if (_iIndex > 0) text = text.substring(0, _iIndex);
  _iIndex = _iIndex1;
}
if (_iIndex2 >= 0) {
  text = text.substring(_iIndex2);
  _iIndex = text.indexOf(')', _iIndex1+1);
  if (_iIndex > 0) text = text.substring(0, _iIndex);
  _iIndex = _iIndex2;
}
if (_iIndex >= 0) {
  tab('URL');
  add(text);
}

3.3. フォルダのバックアップ

  • 【Automatic】をチェック
copyq:
var text = str(clipboard());
var drive = text.toUpperCase().substr(0,2);
colon = text.substr(1,2);

if (colon == ':' && drive >= 'C:' && drive <= 'Z:') {
  tab('Folders');
  add(text);
}

4. 直接コピー例

4.1. 1番目の項目をコピー

  • Global shortcutを選択し、Alt+1を設定
  • 項目番号は0から始まるので select(0) が最初の項目
copyq:
select(0);
paste();

4.2. 2番目の項目をコピー

  • Global shortcutを選択し、Alt+2を設定
copyq:
select(1);
paste();

4.3. 連続貼り付け

  • Global shortcutを選択し、Alt+Vを設定
  • メインウィンドウで開始項目をクリックし、アプリに戻ってAlt+Vを押すと貼り付けが進む
copyq:
var _iItem = currentItem();
popup("msg", str(_iItem));
select(_iItem);
paste();
next();

5. 💡 関連リンク

✅ 解説記事(繁体字中国語): https://jdev.tw/blog/8881/
Explanation article(English)
解説記事(日本語)

Ditto Clipboard Manager
GitHub CopyQ: Clipboard manager with advanced features
CopyQ documentation

##