Giraffe+の開発についてのブログ このページをアンテナに追加 RSSフィード

2006-09-25

[]Giraffe+のFAQ

基本的な質問

何をするソフトウェア

登録してあるファイルを実行したり、目的のパスにアクセスするといった日常的な作業を効率化します。スクリプトを利用した多彩な設定が可能です。

動作するOSは?

Windows 2000/XPで動作します。Vistaでの動作は確認してませんが、7ではデフォルトホットキー以外は問題無いようです。

必要なランタイムなどは?

Visual C++ 7.1(Visual Studio .NET 2003)のMFCランタイムを使用します。起動できない場合はvc71runtime20060711.zipをシステムディレクトリに展開してください。

ウインドウの名称がよく分からない

起動して表示されるのがメインウインドウ、枠の中にある入力領域がエディット、F4キーを押すと表示されるのがリストボックス、F5で出るのが設定ダイアログです。

登録アイテムの管理の仕方は?

ShortcutViewerを使うのが今のところ最善の方法です。

このFAQに載ってない質問がある

このエントリーのコメント欄に書き込んでください。随時追加していくつもりです。

カスタマイズについての質問

動作を軽くしたい

何が重いのか原因が解かれば、その原因を設定によって取り除くことが可能かもしれません。たとえば、アイコンの取得のためにHDDのアクセスが発生し重く感じるのであれば、アイコンを非表示にすればその重さは解消されるでしょう。

F5キーを押して設定ダイアログを表示し、ConfigでLightボタンを押すと軽い設定になります。それを元にいろいろ試してみるのもいいかもしれません。

メインウインドウをアクティブにするホットキーを変更したい

設定ダイアログのSettingsのhotkeyのチェックされてるw-spaceという部分を書き換えます。リストビューのアイテムの編集には、選択してF2キーを押すか選択中のアイテムをクリックします。

大きいアイコンを表示したい

アイコンを表示する領域が34ピクセルを超えていれば大きいアイコンが表示されます。設定ダイアログのConfigのWindow.HeightやList.ItemHeightから設定できます。

スクリプトを使うことでアイコン枠の大きさに関わらずにアイコンの大きさを決めることも可能です。

//エディットとリストボックスのアイコンを大きくする
Giraffe.Edit.SmallIcon.= false
Giraffe.ListBox.SmallIcon.= false
メインウインドウを最前面にして、インアクティブ時(非フォーカス時)に日時を表示したい

設定ダイアログのSettingsのsetupのClockInactiveをチェックすることで、インアクティブ時に日時が表示されるようになります。表示される書式等はスクリプトでグローバル変数を設定することで変更可能です。書式の仕様はhttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/strftime.3.htmlと同じです。

$clock-display:format('%A, %B %d, %Y - %H:%M:%S')

色については、ColorのDeactiveAutocompleteのEach ItemのEdit.Elseを編集してください。最前面にするにはSettingsのsetupのTopMostGiraffeをチェックします。常に表示することを考えると、SwitchInsteadOfHideもチェックすべきかと思います。

ひとつの動作に複数のキーを割り当てたい

設定ダイアログのキー設定の部分で、2とか数字を付けた名前にDuplicateして、キー設定するのが簡単な方法です。

スクリプトを使うほうが簡潔に解決できます。たとえば、Ctrl+MでEnterと同じことをしたいなら、次の一行で可能です。

DuplicateEvent('key/c-m' 'key/enter')
実行区切り文字(コマンドライン引数を置きたいときに使う文字)を変更したい

デフォルトで';'になってる区切り文字は、設定ダイアログのConfigのGeneral.Separatorから変更可能です。設計上は文字列が扱えるようになっています。

特定フォルダのソートを逆順にしたい

ファイル名などが日付になってる場合、逆順になると最新のものが先頭に来て扱いやすくなります。

//D:\howm以下のソートを逆順にしつつフォルダは上に
Giraffe.Event.GetSortMode:@ `*[
  Giraffe.Edit.Text.istarts_with('d:\howm\\').? [{arg.at(0) -1 1}.return]
].& (Giraffe.Event.GetSortMode$)

スクリプトについての質問

スクリプト言語の仕様が知りたい

ブログのスクリプト言語についてのエントリーを読んだり、ソースを見るのがいいと思います。

自分で編集したスクリプトはどこに置く?

Script2に置きます。スクリプトを実行しようとした時の探索順は、デフォルトで、カレントディレクトリ -> Script2 -> Scriptとなっており、Script2にはデフォルトで何もありませんので、アップデート時に自分のスクリプトが上書きされる事故を防げます。

.giraffeとsiteinit.giraffeって何?

起動時に自動的に実行されるスクリプトです。先ず.giraffe、次にsiteinit.giraffeの順です。大きな違いとして、.giraffeはScriptフォルダにデフォルトで存在し、siteinit.giraffeは存在しないというのがあります。デフォルトの.giraffeはGiraffe+の動作に必要なスクリプトを実行します。ですから、自動実行されるスクリプトを追加したい場合、.giraffeではなく、siteinit.giraffeを利用します。他のスクリプト同様、自分のスクリプトのためのフォルダであるScript2フォルダにsiteinit.giraffeを作成し、そこに起動時に実行したいスクリプトを書き込みます。

スクリプトでいろいろやってたら起動できなくなった

.giraffeやsiteinit.giraffe、iniファイル、Scriptフォルダやカレントディレクトリなど、さまざまな要因によって起動時のスクリプトにエラーが発生し、起動に失敗します。起動時のスクリプトエラーはエラーダイアログを表示して終了しますが、エラーメッセージから簡単に推測できる場合は少ないです。Script2や.giraffeを一時的にリネームして、それで起動できるか確認するなどして、エラー箇所を特定していくのがいいかと思います。

スクリプトデバッグ方法

Trace関数引数の文字列をデバッグ出力できます。デバッグ出力には他にもDoutオブジェクトが使えます。デバッグ出力の表示にはSysinternalsのDebugViewを使うと便利です。ブレークポイント等、他に有効な手段は特にありません。

fujisanfujisan 2006/09/28 02:20 いつもGiraffe+にはお世話になっております。
おそらくですが、最近のバージョンはWin2K(SP4)で起動できないようです。起動時に「user32.dllにPrintWindowが見つかりません」といった旨のエラーが出てしまいます。

ijuhsijuhs 2006/09/28 02:59 ご報告ありがとうございます。修正しました。

IshidaIshida 2008/03/06 01:18 Create Shortcutで相対パスでプログラムを登録することはできないでしょうか?

ijuhsijuhs 2008/03/06 01:33 Typeを.sesにするといけるみたいです。
.lnkだと.lnkの仕様として無理みたいです。

kzkz 2012/10/20 02:37 フォルダの中の候補を表示する際、絶対パスでなくフォルダ or ファイル名のみ表示するようにできますか?

ijuhsijuhs 2012/10/21 17:10 Virtual.AutoCompleteShowList@ `typing_in_target_column[
Giraffe.ListIsHistory.! [
Giraffe.ListBox.each& `i[
i.SetDisplayText(i.Text.path_get_name)
]
]
Giraffe.ListBox.GetHistoryFlag.not.&& [Giraffe.Config.List.OpenMode],
[typing_in_target_column].? [ShowListAfterAutoComplete]
]

これで表示だけはそうなりますが、リストの大きさや位置を整えたり、ソートした際等、他のスクリプトとの兼ね合いも考えると、あまりいい結果にはなりません。

kzkz 2012/10/24 22:58 回答ありがとうございます。 そのようですね。 ウィンドウのサイズが
絶対パスで決定されているようで右に空白が目立ちます。

つづけて申し訳ないのですが、Dataフォルダ内にフォルダを作ってグループ
のようにアイテムを管理しようとしたのですが、そのフォルダ名をタイプ
すると、そのフォルダ内のアイテムが全てオートコンプリートの候補にあがって
しまいます。 オートコンプリート時にサブディレクトリ内のアイテムを
表示しないようにすることは可能でしょうか?

P.S.
同じ投稿を別のページに誤爆してしまいました。ごめんなさい。

ijuhsijuhs 2012/10/25 00:09 設定ダイアログ(F5) -> Settings -> setup -> (AC)FlatRegItems
のチェックをoffでそうなります。と思ったんですが、
設定ダイアログ(F5) -> Settings -> setup -> ~(AC)CacheRegisteredItems
もoffにしないとダメみたいですね。キャッシュスクリプトが常に平坦化して保持するようです。

ディレクトリ名のテキスト選択がある状態で\ではなく/を打つと、/が最後に追加され、サブディレクトリ内がオートコンプリートされます。

誤爆の方は消しときました。

kzkz 2012/11/01 10:00 ありがとうございます。 結構おもいどおりの状態に近づいてきました。

gs では、制御構文、例えば if などが複数の書き方(他の言語に似た if や、? or ! 関数とブロックを使ったものなど)ができますが、推奨の書き方はあるのでしょうか?

ijuhsijuhs 2012/11/01 12:55 基本的に括弧の省略のために演算子の方を使います。
ifなら?を使った、x.== y.? [ z ] という書き方です。if(==(x y) [z])
は演算子とメソッドが無い時代のものであり推奨しませんが、関数中心の方が綺麗になりそうな気もしてます。
whileでやることの大半はeachを使い、whileでなければいけない時だけ、[z].* [x.== y] とします。関数版は
while([==(x y)] [z]) です。
forはRangeとeachで、0...10.each& `i[ ... ] という風になります。for関数はfor('i' 0 [<($i 10)]
[$i.++] [ ... ]) と、まあ、使い物になりません。

kzkz 2012/11/02 00:50 わかりました。 基本的には演算子の方を使用するようにします。

動作報告です。
Windows7 pro 64bit で香り屋さんの「バイナリ(DLL) 1.3 64bit版 for Windows」を使用したところ、migemo の設定が完了しませんでした。
dll と辞書を指定したのですが、辞書の指定で OK ボタンを押すと「migemo の
設定に失敗しました」とかそのようなダイアログが出ます。
何度か繰り返したのですが駄目でした。

ijuhsijuhs 2012/11/02 01:59 32bitアプリは32bitのDLLを使います。
Giraffe+の64bit版は作ろうとは思ってますが、ちょっと時間がかかると思います。

ijuhsijuhs 2012/11/02 19:15 migemo.dll、そういえば数年前に更新してみたらcalling conventionが変わってて、旧来のアプリから使えなくなってたのを思い出しました。
香り屋さんに書かれてる不具合がそれなのかは知りませんが、なんかややこしいので、自分が普段使ってる、migemo.dllとmigemo-dictをuploadしておきます。
http://www.ric.hi-ho.ne.jp/giraffe/arc/migemo1.3c_cdecl.zip

kzkz 2012/11/02 20:32 migemo のセットありがとうございます。
64 bit 版、期待して待ってます。

Win7 64 bit で、bluewind の呼び出しホットキーの設定が全くできなくなってから代わりになるものを探してたどり着いた Giraffe+ ですが、スクリプトによる拡張が可能なため、自分の使用状況だとさらに良い物に思えます。
Execute.giraffe に拡張子判別実行処理を仕込むと、ポータブルアプリの実行や環境の移行が非常に簡単にでき、満足しています。

kzkz 2012/11/04 09:29 ホットキーの詳細な仕様はどこかで閲覧できますか?
s-alt あるいは s-kana を ShowGiraffe に割り当てているのですが表示されません。

ijuhsijuhs 2012/11/04 11:44 ホットキーに使うキー名はdoc/keymaps.txtで確認できますが、仕様はWindowsのRegisterHotkeyの仕様であり、あまり融通は効きません。
altを使う場合、その時点でaltが押されてるので、modifierにaも、さらにaltは左右があるのでlaltかraltかのどちらかで、sa-laltとしないとダメですが、Windows的に、してもダメなようです。
kanaに関しては、たぶんIMEの支配下にあって触れられないのではないかと思います。
キー名が分からない場合、実際にキーコードが何になるかを
http://www.ric.hi-ho.ne.jp/giraffe/arc/Keycode.exe で確認して、数値を入力するのが確実です。

今丁度、Windows 7のデフォルトホットキーの問題を回避すべく、RegisterHotkeyを使わないホットキーを試しているところですが、
それならsa-laltも使えるようです。

kzkz 2012/11/11 10:45 こんにちは。
「/」で data フォルダ内の階層を降りていくと、フォルダのリンクに到達した時に「¥」を押さないと更に潜れません。
「/」で潜れるようにできる設定などありますでしょうか?

ijuhsijuhs 2012/11/11 12:22 設定はありません。
単純に/を\のように、リンク先がフォルダの場合だけ扱う、というなら、\に設定されているsettings/key/SetTextFilePath.giraffeを少し書き換えた、

target: Giraffe.Edit.GetTextTargetPart
new_target: Giraffe:GetExecutee.compose_executee.target

Giraffe:Edit:GetCaret.< (target.size).&& [target.iequals(new_target).not],
[Giraffe.GetRegisteredItemPath(target).iequals(new_target).not].? [
BeforeTextChange
Giraffe:Edit:SetText:Target(new_target.path_is_dir.? [new_target.+ '\\'],
[new_target])
AfterTextChange
], [
Giraffe.Edit.SendMessage(WM_CHAR \/)
]

を、/に設定すればいいと思います。

登録アイテム->フルパスのテキストの変換をせずにリンク先がフォルダのアイテムに/を付けてフルパスのように扱う、というならできません。(したくない、と言った方が適切かもしれません。)
基本的な仕様として、テキストが指してるものが登録アイテムなのかフルパスなのかを明確に分けたいためです。そのためにテキストの変換という手段でそれを切り替えています。

kzkz 2012/11/23 18:01 スクリプトありがとうございます。上手くいきました。

> テキストが指してるものが登録アイテムなのかフルパスなのかを明確に分けたい
これはプログラム的な都合でしょうか?

ijuhsijuhs 2012/11/24 20:03 はい、作る側として圧倒的に楽です。
使う側としても、世間一般には内部を隠蔽する方が好まれるんですが、自分としては内部が見えてる方が好きです。

kzkz 2012/12/01 09:39 わかりました。
個人的には双方同等に扱えた方が良いと思います。
しかし、今のままでも十分有用ですし、実装した場合の恩恵と実装のコストが
見合っているかどうかは分からないので、この件はこれ以上突っ込みません。

kzkz 2012/12/02 11:30 こんにちは。
マウスの入力を Giraffe+ 上でのみ処理することは可能でしょうか?

具体的にやろうとしていることは、"SwitchWindow.giraffe" をマウスの
拡張ボタンから呼び出して、アクティブウィンドウの切り替えを行うまで
他のウィンドウに対する操作を制限し、以下の様な挙動を追加したいです。

・マウススクロールで選択を切り替え、画面のどこでもクリックすると、
現在選択中のウィンドウをアクティブにする。

・項目を直接クリックした場合、現在はダブルクリック
で実行されていますが、これをワンクリックで行えるようにする。

ijuhsijuhs 2012/12/02 19:09 グローバルなマウスイベントは用意してないので現verでは無理です。
どうせマウス設定ソフトの類を使うことになるので、そちらで、と思ってましたが、SwitchWindow時のみ、となると難しそうですね。
グローバルなマウスイベントではなく、単なるグローバルなフックなら、マウスキーボード共に、あると万能に、かつ設定ソフトの類とは違い動的に使えていいとは思うので、たぶん次verで追加します。
マウスホイールのイベント自体は他のマウスイベントがあるのにないのは不自然だと思うので、こちらも次verで。

>項目を直接クリックした場合、現在はダブルクリック
これは、
Giraffe.Event.Mouse.list-ld$$.&= (Giraffe.Event.Mouse.list-lw$)
で大体いけますが、設定によって、
EditのテキストとListの選択中のアイテムのどちらを優先するか(デフォルトではhistory表示時のみEdit優先)が違い、さらに、リスト選択
後にEditが変化する時間も設定によるので、そのあたりにも対応するなら、ちょっと違うスクリプトを書くことになります。
デフォルトのlist-ruもこの問題があるので、次verでちょっと整理します。

そういうわけで、次verをお待ちください。

kzkz 2012/12/06 22:39 はーい、楽しみに待ってまーす。

kzkz 2012/12/18 11:15 こんにちは。
作業ディレクトリをスクリプトで変えることはできますか?
ファイラから呼び出した際、作業ディレクトリをファイラが指していた場所にしたいです。 コマンドプロンプトとか使うときに。

ijuhsijuhs 2012/12/18 11:42 Kernel32.SetCurrentDirectory(str)

で、作業ディレクトリがstrになります。

起動後に作業ディレクトリが変わっても問題ない仕組みにしてますが、意図的にユーザーが変えて使うことは想定してないので、何か問題があるかもしれません。

kzkz 2012/12/18 23:51 わかりました、できるだけ使わないようにします。

kzkz 2015/03/29 11:06 String.expand_env の呼び出し方を教えていただけますか?

ijuhsijuhs 2015/03/29 12:06 String.expand_envvarですね。実装したようなしてないような曖昧な記憶でしたが、Script/String.giraffeにありました。
使い方は、%%で囲まれた環境変数を含むfile pathを展開する目的のものなので、特定の環境変数の値を得たい場合、例えばtmpだと、
'%tmp%'.expand_envvar
とします。

2015-03-29 11:07 GMT+09:00 hatenadiary <hatena-d-comment@hatena.ne.jp>:

> ijuhsさんのはてなダイアリーにコメントが登録されました。
>
> kz (114.148.250.18)
> 『String.expand_env の呼び出し方を教えていただけますか?』
> http://d.hatena.ne.jp/ijuhs/20060925/1159187873
>
> 以下のアドレスにメールを送信すると、コメントに返信できます。
> d-comment+qidzqth06o.120983867@hatena.ne.jp
> 以下のURLでコメントの確認・削除を行えます。
> http://d.hatena.ne.jp/ijuhs/commentlist
>
> このメールは「はてなメッセージ」にて送信しています。
> 受信停止、受信方法の変更はこちらから
> http://m.hatena.ne.jp/
> http://m.hatena.ne.jp/help
>

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証