ファイルパスとしてペースト機能を、ClipMenuに追加

Cocoa, Mac, ソフトウェア No Comments »

ClipMenuの開発途上版に、二つのアクションを追加しました。

ファイルパスとしてペースト」と「HFSファイルパスとしてペースト」です。

Finderでファイルをコピーした履歴に対して適用すると、ファイルパスに変換して、エディタなどにペーストできるようになります。

» 開発途上版 – ClipMenu.com

通常動作

例として、ClipMenuの環境設定ファイル(”/Users/< username >/Library/Preferences/com.naotaka.ClipMenu.plist”)を、Finderでコピーしてみます。

環境設定ファイル

その後、エディタ(CotEditorやmi)にペーストすると、ファイル名だけがペーストされます。

com.naotaka.ClipMenu.plist

ClipMenuのアクションを適用

ClipMenuを呼び出し、コピーしたファイルの履歴にポインタをあわせます。

ClipMenu

右クリック(Control+クリック)でアクションメニューを呼び出し、「ファイルパスとしてペースト」アクションを適用します。

ファイルパスとしてペースト

すると、ファイル名ではなく、POSIXファイルパスがペーストされます。

/Users/naotaka/Library/Preferences/com.naotaka.ClipMenu.plist

今度は、「HFSファイルパスとしてペースト」アクションを適用してみます。

HFSファイルパスとしてペースト

ペーストされるのは、HFSファイルパスです。

Macintosh HD:Users:naotaka:Library:Preferences:com.naotaka.ClipMenu.plist

コピーしたファイルが複数ある場合は、改行コード(LF)が間に挿入されます。

/Applications/AppCleaner.app
/Applications/0xED.app
/Applications/1Password.app
/Applications/Address Book.app

他の選択肢

ClipMenuを使わずにパスをコピーするには、コンテキストメニューのプラグインをインストールするのが一般的なようです。

こちらのサイトが大変参考になります:

Mac OS Xでの、アクセシビリティ製品開発関連情報のまとめ

Cocoa, Mac, ソフトウェア No Comments »

Mac OS Xでの、アクセシビリティ製品開発について、ちょっと調べてみたので、まとめておきます。

一般的な情報

  • Apple – Accessibility

    Apple社のアクセシビリティのホームページ。日本のアップル社のサイトでは、現在は見あたらず。

開発者向け情報

メーリングリスト

サンプルコード

  • UIElementInspector

    Accessibility APIのサンプルコード。

    マウスポインタの位置にあるAXUIElementsの情報を取得して、その要素の種類や動作内容がわかります。

    例えば、ボタン要素なら、ボタンのタイトル、大きさ、スクリーン座標、押し下げ可能かどうか、フォーカスされているかどうかなどがリスト表示されます。また、割り当てられている動作は「press」とわかります。

    尚、情報を取得するためには、システム環境設定のユニバーサルアクセスで、「補助装置にアクセスできるようにする」をオンにする必要があります。

  • Cocoa Break!

    他にも、こちらのサイトでアクセシビリティのサンプルコードがまとめられています。

Spacesに対応

Cocoa, Mac, ソフトウェア No Comments »

引き続き、ClipMenuを修正中。今回は、Mac OS X v10.5で導入されたSpacesに対応しました。

これまでは、ClipMenuを起動したスペース以外のスペースで、メニューをポップアップさせたり、環境設定画面を開くと、画面が遷移していました。次期バージョンでは、不要な画面遷移が無くなります。

こちらのサイトを参考にさせて頂きました。

Snow Leopardの出る前に、Leopardの新機能に対応できて良かったです :)

また、ショートカットキーに「Command + Option + V」が割り当てられないというご連絡を頂いたので、こちらの方も修正しておきました。

開発版のダウンロードは、こちらからどうぞ。

» ClipMenu 0.3.4a

ClipMenuのバグを修正

Cocoa, Mac, ソフトウェア No Comments »

ClipMenu 0.3.3で、「削除したスニペットがSnippets.xmlに残ってしまう問題」を発見したので、修正版を作成しました。

» ClipMenu 0.3.4a

環境設定画面で、登録したスニペットをフォルダごと削除すれば問題ないんですが、フォルダ内の項目だけを削除すると、上記の問題が発生してしまいます。

Core Dataのドキュメントに一通り目を通しているときに、FAQに気になる項目を見つけて、確認してみると、見事にミスをやらかしていました。

Core Data Programming Guide: Core Data FAQの、「When I remove objects from a detail table view managed by an array controller, why are they not removed from the object graph?」です。

正式版は、後日改めてリリースする予定です。

Command + V の送信の仕方を変更

Cocoa, Mac, ソフトウェア 9 Comments »

ClipMenuでメニュー項目を選択すると、ペーストするために、Command + v を送信するようになっています。これまでは、Cocoabuilderで紹介されていたCarbon APIを使っていました。

CGPostKeyboardEvent( (CGCharCode)0, (CGKeyCode)55, true );      // command key down
CGPostKeyboardEvent( (CGCharCode)'v', (CGKeyCode)9, true );     // 'v' key down
CGPostKeyboardEvent( (CGCharCode)'v', (CGKeyCode)9, false );    // 'v' key up
CGPostKeyboardEvent( (CGCharCode)0, (CGKeyCode)55, false );     // command key up

でも、これだと、Shiftキーを押しながらメニュー項目を選択すると、Command + v ではなく、Command + Shift + v が送信されてしまいます。CGPostKeyboardEventを呼び出した時点で押し下げされているキーと混ざってしまうんですね。

これまでは問題なかったんですが、新しく、「修飾キー + クリック」にいろいろな機能を割り当てられるように変更したので、問題が生じるようになりました。

そこで、Xcode 3.1のAPIリファレンスを検索してみると、どうもCGPostKeyboardEvent関数の利用は非推奨になっていて、代わりにCGEventCreateKeyboardEvent関数の利用がおすすめのようです。

こちらを使えば、キーボードイベントの作成と、そのイベントをカスタマイズしてからイベントシステムへの送信ができるようになるそうです。対応環境は、Mac OS X 10.4以降と、新しめのAPIですね。

早速試してみました。CGPostKeyboardEventと同じように、command down → v down → v up → command upという手順で呼んでみると、うまく動かない?そこで、CocoabuilderでCGEventCreateKeyboardEventを検索してみると、Dave DeLongさんの質問から始まった二つのスレッドを発見。

DeLongさんは、数時間悪戦苦闘し、思いつく限りググった末に質問を投稿されたようです。お陰で、この関数の使い方が解りました。感謝です!

修飾キーの入力はそれ用のイベントを作るのではなく、CGEventSetFlags関数を使って、文字キーの入力イベントに追加する形にすれば良いんですね。修正したコードは、こうなりました。

CGEventSourceRef sourceRef = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState);
if (!sourceRef) {
    NSLog(@"No event source");
    return;
}
CGEventRef eventDown, eventUp;
eventDown = CGEventCreateKeyboardEvent(sourceRef, (CGKeyCode)9, true);      // v key down
CGEventSetFlags(eventDown, kCGEventFlagMaskCommand);                        // command key press
eventUp = CGEventCreateKeyboardEvent(sourceRef, (CGKeyCode)9, false);       // v key up
CGEventPost(kCGSessionEventTap, eventDown);
CGEventPost(kCGSessionEventTap, eventUp);
CFRelease(eventDown);
CFRelease(eventUp);
CFRelease(sourceRef);

同じスレッドに、CGPostKeyboardEvent関数を使った方法も掲載されていました。Keyboard Maestroの作者さんの投稿?

Cocoabuilder – (Peter N Lewis) Re: Posting Keyboard Events

CGEnableEventStateCombining関数で、キーやマウスの状態を、アプリケーション側で生成するイベントに混ぜ合わせるかどうかを切り替えられるようです。ただ、こちらの関数も、今は非推奨の扱いになっているようで、Mac OS X 10.4よりも古いバージョンに対応させる必要がなければ、積極的に使わない方が良さそうです。

Quartz Event Servicesのリファレンスをざっと眺めてみましたが、キーボードやマウスに関するイベントが作れるので、結構重宝しそうです。

メニュー項目上で、右クリックが補足できた

Cocoa, Mac, Slicehost, ソフトウェア, ハードウェア No Comments »

ClipMenu 0.2 のリリース以来、アクションメニューを右クリックで呼び出せないのが不満でした。

これまで何度試しても、ClipMenuの履歴項目上での、マウスの右ボタンクリックや、Controlといった修飾キーを押しながらのクリックが全く補足できませんでした。

今日もいろいろと試行錯誤しても解決せず、一応捕捉できるNSEventの情報だけでも確認しておこうとしたところ、なんと、きちんと右クリックの入力が捕捉できているではないですか!修飾キーの検出の方も、問題なし。

以前書いて、コメントアウトしていたコードなので、使い方が間違っていたわけでもなさそうですし、ちょっと驚きました。思い当たることといえば、TigerからLeopardに開発環境を変えたからでしょうか。

何はともあれ、これでアクションメニューの呼び出し方法を、これまでの「Shift+クリック」から「マウスの右クリック」や「Control+クリック」に変更することができます。

以前Travellers TalesのHiroさんも仰っていましたし、こちらの方が自然な入力方法だと思います。

クリックの方は shift+クリックではなく、ctrl+クリックにしたら、マウスの右クリックやトラックパッド2本タッチ+クリックで呼び出せるようになるでしょうか。

CLCLにも近づけますしね :)

テスト版をアップしましたので、興味のある方はお試しください。

» ClipMenu 0.3.2a

ClipMenu 0.3.1 リリース

Cocoa, Mac, ソフトウェア 7 Comments »

Mac OS X用クリップボード・ユーティリティ、ClipMenuのバージョン0.3.1をリリースしました。

前回リリースしたClipMenu 0.3.0には、PowerPC搭載機で環境設定が開けない重大な不具合がありました。Power Mac、PowerBook、iBookをお使いの方は、お手数ですが、問題の修正された、新しいバージョンへの更新をお願いします。

また、ご要望いただいた設定項目も追加してあります。

通常なら、履歴項目上でアクションを呼び出すと、登録したアクションがメニューとしてポップアップされます。新しく追加した設定をオンにし、アクションを一つしか登録していなければ、メニューのポップアップなしにアクションを即実行できます。

「プレーンテキストとしてペースト」など、いつも特定のアクションしか使用する予定がない場合などにご利用ください。

主な変更点

  • PowerPC搭載のMacで、環境設定画面が開けなかった問題を修正。
  • 登録したアクションが一つだけだった場合は、メニューをポップアップせず、即座にアクションを適用できる設定を追加。
  • ツールチップの表示/非表示を選択できる設定を追加。
  • 環境設定画面の設定項目の整理。

ダウンロード

ダウンロードはこちらからどうぞ。

» ClipMenu – naotaka.com

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS ログイン