OS X:ダブルクリックでファイルを開くためのアプリケーションとしてプログラムのカスタムコマンドライン呼び出しを指定する


4

私は主に最近MacBook Airを買収したLinuxユーザーであり、現在、コマンドライン呼び出しでアプリケーションを定義できるLinuxのデスクトップ定義ファイルに相当するものがあるかどうかを必死に探しています。そのアプリケーションに関連付けられているファイルタイプのファイルがダブルクリックされたときにX11から渡されるファイル。

たとえば、Linuxでは、次.txtemacsclientような特定のコマンドライン呼び出しで開くファイルを設定できます。

emacsclient -c -a "" %f

where %fは、ダブルクリックした実際のファイルへのパスに置き換えられるプレースホルダーです。(一般に、Linuxファイルマネージャでは、[ファイル情報]ウィンドウでこのコマンドラインを指定できます。)

OS Xでこれを実現する簡単な方法はありますか?私はAppleScriptをいじくり回したり、Googleで解決策を試したりしたが、役に立たなかった。正しい言葉で正しい質問をすることができるように、Appleテクノロジー関連の知識と語彙を増やす必要があると思います。


どのコマンドをファイルに適用しますか?
ニコラスバルブレスコ14年

特定のファイル、または特定の接尾辞を持つすべてのファイルを処理しますか?
ニコラスバルブレスコ14年

Finderでファイルをダブルクリックすると、ダブルクリックしたファイルを引数として指定したコマンドラインが実行されます。たとえばfoo.txt、ホームフォルダーをクリックすると、emacsclient -c -a "" ~/foo.txt実行されます。しかし、Automatorワークフローを使用して満足しているソリューションを見つけたと思います(Stephen Sの答えに対する2番目のコメントを参照)-トレイで実行中のワークフローを示す迷惑な回転ギアホイールを除いて、つまり でもありがとう!
dlukes

ところで、シェルスクリプトをカスタムURLスキームに関連付けたい場合は、Lincastor
Sergei

回答:


1

AppleScriptはあなたの友達です。

AppleScriptエディタ、次のソースコードで、新しいスクリプトを作成します。

(* This script is destined to be saved as an application droplet. It will process the items dropped onto it. *)

-- This routine processes the dropped item(s)
on open theDroppedItems
  repeat with i from 1 to the count of theDroppedItems
    set aDroppedItem to item i of theDroppedItems
    processItem(aDroppedItem)
  end repeat
end open

-- This routine processes an item
on processItem(anItemToProcess)
  set pathUnix to POSIX path of anItemToProcess
  set pathUnixQuoted to quoted form of pathUnix
  -- Here you make your shell command !
  set commandToRun to "cat " & pathUnixQuoted
  do shell script commandToRun
end processItem

シェルコマンドの場合、必要に応じて調整commandToRunします。

スクリプトを保存します。で保存  ダイアログ:

  • スクリプトにOpenItemsという名前を  付けます。
  • スクリプトを好きな場所に置きます。たとえば、スクリプトを/ Applicationsに配置でき  ます
  • 形式を選択します:  アプリケーション
  • 2つのチェックボックスをオフのままにします。

ソースコードで、構造を見てください  on open theDroppedItems。AppleScriptのこの種のは、呼ばれた液滴保存したアプリケーションOpenItemsのアイコンを見てください  。その上の大きな矢印は、それが液滴であることを示しています。これは、アプリケーションがドロップされたアイテムを受け入れることを意味します。

ここで、目的のファイルをアプリケーションOpenItemsにドラッグアンドドロップします  。これにより、ファイルでコマンドが起動します。

次のステップは、ファイルをドロップレットに関連付けることです。必要なファイルを選択し、Apple I (   I )を押して  情報を取得します。では  で開き、アプリケーションを選択  OpenItemsを。これにより、ファイルがドロップレットに関連付けられます。そのため、ファイルをダブルクリックすると、ファイルはドロップレットOpenItemsで開か  れ、ファイルのシェルコマンドが実行されます。同じタイプのすべてのファイルに対してこれを行う場合は、[ すべて変更... ]ボタンをクリックします 

このソリューションをMavericksでテストしました。できます。


1
AppleScriptの広範囲にわたる綿密な例のおかげで、視野を広げるのに間違いなく役立ちました(以前は水滴については知りませんでした)!Automatorワークフローを使用するソリューションは既に少し異なりますが、これはよりクリーンでシンプルな可能性があるため、同様に調査します。
dlukes

1

私の知る限り、二重スクリプトでスクリプトを自動的に実行するものは何もありません(おそらく間違いです)。私が見つけた最良の解決策はAutomatorです。プレインストールされています。スクリプトをコンテキストメニュー(ファイルを右クリック)に配置するサービスを作成します。アクションについては、「シェルスクリプトの実行」アクションを検索する必要があります。そこから、ファイルパスやディレクトリパスなど、Finderからの入力を受け取ることができます。入力をstdinに渡す場合、シェルスクリプトで使用する変数は$@です。

if [[ ! -d "$@" ]]
then
    emacsclient -c -a "" $@;
    exit
fi

そのスクリプトが完全に正しいかどうかはわかりませんが、正しい軌道に乗れるはずです。


1
おかげで、それは私が今までに得たよりもはるかに近い!それでも、答えを受け入れられたものとしてマークする前に少し待って、最初に概説したような解決策を誰かが思いつくかどうかを確認します。
賛成票を投じ

1
実際、あなたは本当に近くにいました!AutomatorとRun Shell Scriptを使用してソリューションをまとめることができましたが、この投稿への回答で説明されているように、「Pass input:As arguments」オプションを使用してワークフローをアプリケーションとして保存しました。これをソリューションに追加して、承認済みとしてマークしたいですか?そうでない場合は、リンクとともに自分の回答を投稿します。
2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.