5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Alfredで範囲選択した文字列をホットキーで取得する際にクリップボード履歴を汚さない方法

Posted at

TL; DR

Alfredで翻訳ワークフローを使うときにクリップボード履歴に保存しない方法を探して、解決策を見つけたので知見としてまとめます。

実例として下記翻訳ワークフローを使用しています(作者様に感謝)。
Alfredの翻訳ワークフローv2リリース(DeepL翻訳や言語選択などに対応)

環境

  • macOS Catalina 10.15.5
  • Alfred 4.1

前提知識

Alfredは範囲選択した文字列をホットキーで取得する際にクリップボードに一時的に保存します。
selection_hotkeys.png

そのため、Workflow内でHotkeyアクションの引数にSelection in macOSを指定すると、Copy to Clipboardアクションを使用しなくてもクリップボードに保存されるので、必ずクリップボード履歴に残ってしまいます。
hotkey_settings.png

これはSelection HotkeysRestore previous clipboard itemに設定しても回避できません。
image.png

解決策

現状のAlfredの機能ではクリップボード履歴に保存しない方法がないので、クリップボード履歴に保存された直後に直接削除します。

Alfredのフォーラムにも投稿されていたのですが、Alfredのクリップボード履歴はSQLite3に保存されているので、直接シェルスクリプト内で削除クエリを発行すればWorkflow内で削除できます。

実例

下記のようなシェルスクリプトをRun Scriptに書いて、Hotkeyアクションに接続します。

sql="DELETE FROM clipboard WHERE dataType = 0 ORDER BY ts DESC LIMIT 1;"
/usr/bin/sqlite3 ~/Library/Application\ Support/Alfred/Databases/clipboard.alfdb $sql

echo -n $1

スクリプト自体はとても単純で、SQLite3のclipboardテーブル内の最新の1件を削除します。
他に処理する必要もないので、あとはechoHotkeyアクションから受け取った引数を出力してそのまま後続のアクションに渡すだけです。

まとめ

直接DBを操作しているのでアップデートで使えなくなる可能性もありますが、翻訳ワークフローに限らず、範囲選択した文字列を色々加工したいときに加工前の文字列がクリップボード履歴に不要な場合は、今回の方法で回避できるので是非活用してみてください。
(そもそもクリップボード履歴に保存されてしまう現象自体、フォーラムのコメントでもバグレポートとして提出する旨が書かれているので、そのうち修正されるとは思いますが……。)

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?