TL; DR
Alfredで翻訳ワークフローを使うときにクリップボード履歴に保存しない方法を探して、解決策を見つけたので知見としてまとめます。
実例として下記翻訳ワークフローを使用しています(作者様に感謝)。
Alfredの翻訳ワークフローv2リリース(DeepL翻訳や言語選択などに対応)
環境
- macOS Catalina 10.15.5
- Alfred 4.1
前提知識
Alfredは範囲選択した文字列をホットキーで取得する際にクリップボードに一時的に保存します。
そのため、Workflow内でHotkeyアクションの引数にSelection in macOS
を指定すると、Copy to Clipboardアクションを使用しなくてもクリップボードに保存されるので、必ずクリップボード履歴に残ってしまいます。
これはSelection HotkeysをRestore previous clipboard item
に設定しても回避できません。
解決策
現状の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件を削除します。
他に処理する必要もないので、あとはecho
でHotkeyアクションから受け取った引数を出力してそのまま後続のアクションに渡すだけです。
まとめ
直接DBを操作しているのでアップデートで使えなくなる可能性もありますが、翻訳ワークフローに限らず、範囲選択した文字列を色々加工したいときに加工前の文字列がクリップボード履歴に不要な場合は、今回の方法で回避できるので是非活用してみてください。
(そもそもクリップボード履歴に保存されてしまう現象自体、フォーラムのコメントでもバグレポートとして提出する旨が書かれているので、そのうち修正されるとは思いますが……。)