デザインやプログラミングなどテキストを多く扱う作業をやっていると,txtファイルから内容をコピー&ペーストすることがよくあります。でも,Finderで選択してテキストエディタで開く動作って結構集中力を削ぎませんか?
MacOS 10.10(Yosemite)では,設定すればQuick Lookで見えているテキストをコピーできました。そのため,Finderで選択,スペースを押してQuick Look,コピーという流れがとてもスムーズにつながります。
ところが,その設定は10.11(El Capitan)で廃止になってしまいました。なんてことをするんでしょう。
幸いなことに,Spotlight検索フィールド(Finder検索でない)に出てくるテキストファイルはなぜかコピー可能です。この挙動が使えそうですね。
そこで今回はFinderで選択しているファイルを,Spotlight検索欄に表示する機能を紹介します。
準備
以下のファイルをダウンロードしてください。
sttk3-showAtSpotlight.zip
kmmacrosファイルとworkflowファイルがありますが,使うのはどちらか片方です。Keyboard Maestroを持っていればkmmacros,なければworkflowをFinderで開きます。
準備手順はどちらを選んだかによって分岐します。
workflowファイルを選んだ場合
Automatorサービスを使用します。以下の場所を開いてショートカットを設定してください。
システム環境設定:キーボード:ショートカット:サービス:ファイルとフォルダ:show_at_spotlight
kmmacrosファイルを選んだ場合
Automatorサービスを使う場合,Spotlight呼び出しキーを環境設定から読み出して押すスクリプトを実行します。しかしこちらにはそういう処理を入れていません。Keyboard Maestroの場合は,スクリプトをなるべく少なくした方が快適に使えるからです。
そのため,Spotlight呼び出しキーを押す部分を自分の環境に合わせて変える必要があります。kmmacrosファイルではcontrol+spaceにしてあるので,command+spaceなど別のキーにしている方は,Type the ^Space Keystrokeの部分を編集してください。
ちなみに,この機能を呼び出すショートカットはshift+spaceにしてみました。
使いかた
Finderでファイルを選択して,ショートカットを押してください。Spotlight検索欄にそのファイルの名前がペーストされ,プレビューが出ます。
あとは出てきたテキストをコピーするだけです。
注意
ファイルの名前で検索するので,同じ名前の別ファイルも出てきます。混同しないようご注意ください。
これでまた少し仕事が速くなりました。今日もさっさと仕事を切り上げて好きなことをしましょう!
コードはこちら
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
ObjC.import('Cocoa') ; function run() { const none = 0 ; const shift = 131072 ; const control = 262144 ; const option = 524288 ; const command = 1048576 ; // Finderで選択されているファイルの名前を取得する var finderApp = Application('Finder') ; var sel = finderApp.selection() ; if(!sel) {return ;} var destName = sel[0].name() ; // 選択ファイル名をコピーする var stdApp = Application.currentApplication() ; stdApp.includeStandardAdditions = true ; stdApp.setTheClipboardTo(destName) ; // ショートカット環境設定からSpotlightに割り当てられたキーを取得する。 // 設定変更からplistファイル変更までは数秒のタイムラグがある var hotkeyArray = readPlist('~/Library/Preferences/com.apple.symbolichotkeys.plist') ; if(!hotkeyArray) {return ;} var showSpotlightFunc = hotkeyArray.AppleSymbolicHotKeys['64'] ; if(!showSpotlightFunc.enabled) {return ;} ; var param = showSpotlightFunc.value.parameters ; // そのショートカットキーを押してSpotlight検索フィールドを開く postKey(param[1], param[2]) ; delay(0.15) ; // プレビュー上のテキストを選択しているとき,フォーカスを検索フィールドに移す postKey(49, none) ; // space フォーカスを移す postKey(0, control) ; // ctrl+a 行頭へ postKey(40, control) ; // ctrl+k 末尾まで文字を削除 // 検索フィールドに選択ファイル名をペーストする postKey(9, command) ; // cmd+v } /** * plistを読み出してObject(連想配列)にする。 * 流用 https://forum.keyboardmaestro.com/t/reading-and-writing-plists-from-execute-script-actions/3976 * @param {String} strPath plistのファイルパス * @return {Object} */ function readPlist(strPath) { var strFullPath = $(strPath).stringByStandardizingPath ; return ObjC.deepUnwrap($.NSDictionary.dictionaryWithContentsOfFile(strFullPath)) || ObjC.deepUnwrap($.NSArray.arrayWithContentsOfFile(strFullPath)) ; } /** * AppleScriptのkey codeみたいな機能 * @param {Integer} keyCode 打つキー * @param {Integer} modifiers 修飾キー。shift:131072, control:262144, option:524288, command:1048576 の足し算 * @return なし */ function postKey(keyCode, modifiers) { var source = $.CGEventSourceCreate($.kCGEventSourceStateCombinedSessionState) ; var keyDown = $.CGEventCreateKeyboardEvent(source, keyCode, true) ; $.CGEventSetFlags(keyDown, modifiers) ; $.CGEventPost($.kCGHIDEventTap, keyDown) ; var keyUp = $.CGEventCreateKeyboardEvent(source, keyCode, false) ; $.CGEventSetFlags(keyUp, modifiers) ; $.CGEventPost($.kCGHIDEventTap, keyUp) ; $.CFRelease(keyDown) ; $.CFRelease(keyUp) ; $.CFRelease(source) ; } |
このサイトで配布しているスクリプトやその他のファイルを,無断で転載・配布・販売することを禁じます。
それらの使用により生じたあらゆる損害について,私どもは責任を負いません。
スクリプトやファイルのダウンロードを行った時点で,上記の規定に同意したとみなします。