【2画面ファイラ】 内骨格 Part1 【Python拡張】

このエントリーをはてなブックマークに追加
230名無しさん@お腹いっぱい。
                  /\___/ヽ
                /''''''       \
  i´`Y´`Y`ヽ(⌒)    /  (●),     ''''''\
  ヽ_人_.人_ノ `~ヽ  ./      ノ(、_, )ヽ (●) .|
    \___    \ |.      / ̄〉     .|
           \_ 〉 \    /ー-〈  (⌒) ./
                 .   `ニニ´ ノ  Y`Y´`Yヽ
  あふと間違えた         (´ ̄   .i__人_人_ノ
                      ` ̄ヽ      /
                         ` ̄ ̄
231名無しさん@お腹いっぱい。:2008/07/09(水) 00:50:00 ID:BKGcOCSP0
バージョンまだぁー?
232名無しさん@お腹いっぱい。:2008/07/11(金) 19:57:44 ID:LJBHHPO80
内骨格のカスタマイズを書いているページを探したけどあまり見つからない

http://vinokourov.blog76.fc2.com/category9-1.html
http://d.hatena.ne.jp/odz/20080125/1201277905
233名無しさん@お腹いっぱい。:2008/07/12(土) 00:00:57 ID:ojtwyCLd0
これちょっと弄ったけど、カスタマイズしてーんなら、ソース展開して
自分のPythonインタプリタから
pythonw -m cfiler_main
で実行したほうが便利

でも、config.pyからのカスタマイズには限界あると感じた
Emacs風に言うとフックが十分に用意されてないという感じ
特にイベントハンドラまわりはCの実装にコンストラクタで渡したらそれっきりで、
外から/後から弄りようが無いんだよな
234名無しさん@お腹いっぱい。:2008/07/14(月) 12:14:29 ID:J2f0+XhF0
フックが足りないっていうのは同感。

例えばテキストビューアをQでも終了するように改造するためには、
command_Viewのコードを持ってきてonKeyDown関数を書き換えた
command_View2みたいな関数を定義するか、
↓みたいなことをやってTextViewerのonKeyDownメソッドを書き換えないといけないし。

from cfiler_textviewer import *
tvKeyDown = getattr(TextViewer, 'onKeyDown')
def tvKeyDown2(self, vk, mod):
if tvKeyDown(self, vk,mod):
return
if vk==ord('Q') and mod==0:
self.destroy()
setattr(TextViewer, 'onKeyDown', tvKeyDown2)
235名無しさん@お腹いっぱい。:2008/07/14(月) 12:39:11 ID:94v6sBk40
またpythonか…
236名無しさん@お腹いっぱい。:2008/07/16(水) 14:17:41 ID:QqWfCBpq0
弄り途中のconfig.pyをupしてみた。
http://www-2ch.net:8080/up/download/1216185153903730.i11rmq

ジャンプリストにデスクトップ等を追加したり、IPアドレスでジャンプリストを変更したりとか
キーを押したらすぐに実行/ジャンプするメニューとか、
標準では付いてない選択を反転させるコマンドとか思いついた物を適当に書いてます。
237名無しさん@お腹いっぱい。:2008/07/22(火) 03:06:57 ID:GbWJybTm0
それなりに期待して起動してみたんだが・・・無茶苦茶重いのな。
ソース見たら殆んどPython・・・そりゃ更新も早かろうよ。
上の方でなぜかC++製ってことになってるけど騙されないよう注意な。
238名無しさん@お腹いっぱい。:2008/07/22(火) 14:21:03 ID:5PhRs6Mq0
【2画面ファイラ】 内骨格 Part1 【Python拡張】
239名無しさん@お腹いっぱい。:2008/07/22(火) 15:03:51 ID:eA8/peTS0
>>237
内骨格より軽くて高機能かつ拡張性が高い2画面ファイラをあげてくれ。
240名無しさん@お腹いっぱい。:2008/07/22(火) 15:10:52 ID:5PhRs6Mq0
ま、あふで十分だな
241名無しさん@お腹いっぱい。:2008/07/22(火) 17:12:09 ID:eA8/peTS0
軽さで比較すると、ウチではあふも内骨格も変わらんが。
まあ基本あふ使いだけどさ。
242名無しさん@お腹いっぱい。:2008/07/22(火) 18:55:08 ID:rHbzusF30
1 .47 - 2008/07/22
- Ctrl + ↑↓キーの際、ファイルが選択されていないときは、ブックマークにカーソル移動するようにした。

- テキストビューアのカスタマイズ機能を追加 (実験的)
config.py の configure_TextViewer() を呼び出す。

- ホットキー設定ウインドウで、キーコード入力部品にフォーカスを持っていった際に、エラーが発生するのを修正

- Grep機能でアクセス権のエラーが発生したときに、Grepが続行しなくなっていたのを修正。ファイルをスキップして続行するようにした。

- デフォルトの設定ファイルで フィルタクラスに与えるパターン文字列をユニコード形式にした。(ユニコード形式ではないまま日本語を使用したときにエラーが発生するため)

- 存在しないパスにジャンプしようとしたときに、適切なエラーメッセージを表示するようにした。

- ジャンプリスト中のファイルパスがUNICODE形式でなかった場合はエラー処理するようにした。
243名無しさん@お腹いっぱい。:2008/07/22(火) 21:12:14 ID:33UdUKYf0
わしょーい
244名無しさん@お腹いっぱい。:2008/07/22(火) 21:38:40 ID:49J+wrsW0
ソースパッケージにはpythonの標準配布物とpy2exe以外は全部含めておいて、
python setup.py py2exeできちんとcfiler.exeが出来る構成にしておいて欲しいなぁ。
245名無しさん@お腹いっぱい。:2008/07/23(水) 06:07:14 ID:SuNEQowl0
1 .48 - 2008/07/22
- config.py のなかに、configure_TextViewer() が定義されていないと、テキストビューアを開いたときに、エラーメッセージが表示されるのを修正。

- Bookmarkの順序が、起動のたびに逆転しているのを修正

- diffviewerでCtrl-Upしたとき、マイナスの行番号として、ファイルの末尾が見えてしまうのを修正
246名無しさん@お腹いっぱい。:2008/07/28(月) 02:38:44 ID:+/tgBrZJ0
1 .49 - 2008/07/27
- 補完候補ウインドウが、画面の下にはみ出る場合は、画面の上方向に配置するようにした。
247名無しさん@お腹いっぱい。:2008/07/28(月) 22:37:47 ID:vJVsXiIa0
削除が出来ない
なにこれ
248名無しさん@お腹いっぱい。:2008/07/29(火) 00:09:57 ID:8xA3mwNq0
だがそれがいい
249名無しさん@お腹いっぱい。:2008/07/29(火) 11:14:47 ID:szHxeaQq0
1 .50 - 2008/07/29
- Filter、Select、Search、の履歴を残すようにした。
- 露骨なエラーメッセージが出ていた箇所を調整。
250名無しさん@お腹いっぱい。:2008/08/05(火) 20:36:10 ID:RcS7rvto0
1 .51 - 2008/08/05
- 補完候補ウインドウの右と下のフレーム部分が、再描画されずにゴミが残ることがあったのを修正

- 再描画をすこし高速化

- WindowsXPでクラシックテーマを使用したときに、ウインドウの一部が再描画されないまま残ってしまう、WindowsXPの問題 (http://support.microsoft.com/kb/436093/ja) を回避するオプションを設定メニュー2に追加
251名無しさん@お腹いっぱい。:2008/08/07(木) 07:13:44 ID:IyAnfIhH0
1 .52 - 2008/08/07
- GREPの検索パターンを履歴に残すようにした。

- ファイルのコピー時に、上書き対象のファイルがオープンできなかった場合の動作がおかしかったのを修正。
(上書き対象が削除されようとして、削除も失敗していた。)

- 今後の品質向上のため、Pythonのインタプリタが1秒間以上ロックしたままになったことを検出するデバッグ機能を追加。
内骨格が長時間操作を受け付けなくなる現象を排除していくための技術的な情報を収集するため。
( ini ファイルの [DEBUG] セクションの detect_block を 1 に設定すると有効になる。)
252名無しさん@お腹いっぱい。:2008/08/09(土) 15:19:32 ID:oPiru59g0
w2k
ショートカットで実行時の大きさに最大化を選んで起動して内骨格を終了すると
Errors occurred
See the logfile 'X:\tools\cfiler\cfiler.exe.log'for details
とダイアログがでる。

logファイルは
Traceback (most recent call last):
File "cfiler_mainwindow.pyo", line 553, in _onSize
AttributeError: 'MainWindow' object has no attribute 'left_window_width'
253名無しさん@お腹いっぱい。:2008/08/10(日) 17:26:00 ID:AAZLgpPX0
1 .53 - 2008/08/09
- テキストビューアに検索機能を追加。Fキーを使って検索ダイアログを表示し、スペースキーで次の検索を実行する。

- テキストビューアにステータスバーを追加。ステータスバーに、行数、スクロール位置、文字エンコーディングを表示するようにした。

- 画像ビューアにステータスバーを追加。ステータスバーに、画像サイズ、画像フォーマット、画像モードなどを表示するようにした。

- 画像ビューアのカスタマイズ機能を追加 (実験的)
config.py の configure_ImageViewer() を呼び出す。
254名無しさん@お腹いっぱい。:2008/08/10(日) 17:26:30 ID:AAZLgpPX0
1 .54 - 2008/08/10
- インクリメンタルサーチにMigemoを使用できるようにした。(設定メニュー2)

- 画像ビューアのステータスバーにズームポリシーと倍率を表示するようにした。

- 画像ビューアのデコード処理が多数キューイングされたときに、すこし挙動がおかしいのを修正。ひとつずつデコードするようにした。

- 画像ビューアでズームインしたとき、画像がステータスバーの上に重なってしまうのを修正。(1.53で混入した問題)

- 画像ビューアのリサイズ時に、ステータスバーの文字が上方に残ってしまうのを修正。(1.53で混入した問題)

- 画像ビューアのズームポリシーがオリジナルモードのとき、ウインドウのリサイズ時にステータスバーが追従しないのを修正。(1.53で混入した問題)
255名無しさん@お腹いっぱい。:2008/08/15(金) 14:57:04 ID:FZlAF8vx0
キーバインドをあふ互換に出来るようにして欲しいな
256名無しさん@お腹いっぱい。:2008/08/15(金) 21:13:00 ID:wldYzL/u0
>>255
Ctrl+z → キー割り当て
257名無しさん@お腹いっぱい。:2008/08/16(土) 10:59:15 ID:RCpkmBfC0
早くメジャーなソフトになって欲しい
258名無しさん@お腹いっぱい。:2008/08/18(月) 17:27:27 ID:NTS2G+0e0
1 .55 - 2008/08/18
- ファイルリストのタイムスタンプとファイルサイズの表示On/Off機能を追加 (設定メニュー)

- ヒストリとブックマークを、DEL キーで削除できるようにした。

- 補完候補ウインドウで DEL キーを押したときに候補を削除するようにした。

- ログペインのサイズ変更時、ログの可視領域の下端を基準にスクロール位置の調整をするようにした。これまでは上端を基準にしていた。

- 垂直セパレータの太さと色を調整。

- クリップボードにコピーしたテキストの改行コードが LF になっていたので、CR+LF になるように修正。

- コマンドラインのファイル名補完の動きがおかしいのを修正

- メディアの入っていないドライブを選択したときのエラーメッセージが変だったのを修正。

- Migemo の辞書ファイルのパスが相対パスだったので、絶対パスに変更。

- 仮想ディレクトリなどに対して、ディレクトリ比較を適用しようとしたときに、露骨なエラーが発生していたのを修正。無理な場合は、その旨を表示するようにした。

- コンテキストメニューを出すときの Python インタプリタのブロックを解消

- テキストビューアと画像ビューアのタイトルバーのアプリケーション名部分が、[ 内骨格 ] のままカスタマイズが効いていなかったのを修正。
259名無しさん@お腹いっぱい。:2008/08/18(月) 17:40:14 ID:YlxHQ2hZ0
毎回ウゼェ
260名無しさん@お腹いっぱい。:2008/08/18(月) 19:44:08 ID:sNnNvbXz0
>>259
拡張NGもできないおばかさんですか?
261名無しさん@お腹いっぱい。:2008/08/18(月) 20:06:35 ID:YlxHQ2hZ0
まじレスすんな、ボケ
262名無しさん@お腹いっぱい。:2008/08/18(月) 20:23:40 ID:HpMdb1640
これから内骨格を使っていこうと思っているのですが、キーコンフィグのやり方がわかりません
複雑なことをするつもりはありませんので、誰か親切な方、config.pyにどう書けばキーの機能を入れ替えられるか教えて頂けませんか?
263名無しさん@お腹いっぱい。:2008/08/18(月) 21:28:38 ID:wYM3H3lB0
pythonの基本的な文法は自分で勉強してくれ。
それを前提の上で説明する。

_config.pyの57行目のようにconfigure関数の中で
window.keymap[ KeyEvent(ord('X'), MODKEY_SHIFT) ] = command_ProgramMenu
みたいにすると、シフトキーを押しながらXキーを押した場合にcommand_ProgramMenuという関数を呼ぶ動作が設定される。
標準で用意されている主な関数は >>232 の1個めのサイトにまとまってる。
それ以外の関数については内骨格のソースを見ないと駄目。
cfiler_main.pyの1360行目あたりから標準のキー割り当てが並んでる。
264名無しさん@お腹いっぱい。:2008/08/18(月) 22:22:59 ID:HpMdb1640
素早いお返事ありがとうございます
見よう見まねでconfig.pyに書き込んでみたところ関数が見つからないと表示されたので、先ほどの質問をさせて頂きました
くだらない質問に答えて頂いてありがとうございます
265名無しさん@お腹いっぱい。:2008/08/18(月) 22:34:21 ID:wYM3H3lB0
上記の例ではcommand_ProgramMenuはconfigure関数の中で定義されてるから
= command_ProgramMenuとそのまま代入してるけど、
>>232 に載ってる関数は = window.command_JumpList みたいに window. を付けてやらないと参照できない。
関数が見つからないって理由はこれかもね。
266名無しさん@お腹いっぱい。:2008/08/18(月) 23:09:16 ID:dLtz+8vb0
他PCのフォルダを開く方法を教えてください
Shift+Jで\\IPアドレスだと無理でした
267名無しさん@お腹いっぱい。:2008/08/18(月) 23:38:16 ID:wYM3H3lB0
\\IPアドレス
\\pc名
は移動失敗する。

\\IPアドレス\フォルダ名
\\pc名\フォルダ名
みたいにしないと駄目。
268名無しさん@お腹いっぱい。:2008/08/19(火) 00:00:03 ID:sRSEuU220
おお、出来ました
ありがとう

でも、この辺りは自動表示してくれるあふの方がいいですね
269名無しさん@お腹いっぱい。:2008/08/20(水) 20:41:20 ID:8iK8ALdV0
>>265
返事が遅くなりました
その通りの理由で、無事キー割り当てができるようになりました
ありがとうございます
大したことをするつもりがなくても、このファイラを扱うためには少しpythonを勉強する必要があるみたいですね
270名無しさん@お腹いっぱい。:2008/08/23(土) 19:52:18 ID:igmNb3ug0
少しずつ進化してくのが楽しいね
271名無しさん@お腹いっぱい。:2008/08/26(火) 01:29:35 ID:VQAe6nrT0
誰か内骨格の起動パスの変数知りません?
あふで言うところの$V"afx"とか%afx%とかなんですが
272名無しさん@お腹いっぱい。:2008/08/26(火) 01:57:44 ID:5dOUxPCD0
cfiler.exeのフルパスはsys.argv[0]
cfiler.exeのあるフォルダが欲しければos.path.split(sys.argv[0])[0]

↓みたいな関数を用意しておくと便利かも。
cfiler_path("hoge")で (cfiler.exeのあるパス)\hoge が得られる。

def cfiler_path(rpath):
os.path.join( os.path.split(sys.argv[0])[0], rpath )
273272:2008/08/26(火) 11:41:09 ID:8BQO+7//0
returnが抜けてた。

def cfiler_path(rpath):
return os.path.join( os.path.split(sys.argv[0])[0], rpath )
274名無しさん@お腹いっぱい。:2008/08/26(火) 19:27:59 ID:VQAe6nrT0
>>273
ありがとうございます、助かります
275名無しさん@お腹いっぱい。:2008/09/07(日) 12:50:27 ID:wn3W/Ne1O
まとめwikiってないの?
276名無しさん@お腹いっぱい。:2008/09/10(水) 21:18:23 ID:Mi9D1AtpO
気に入ったけど,,

アーカイブ展開したての初回起動なのにメモリ17MB消費とかww
作者さん、もう少し消費メモリ抑えてください
277名無しさん@お腹いっぱい。:2008/09/10(水) 22:25:52 ID:e4qycDs60
全体的な動作が速ければ、いくらメモリ食ってもいいわ。と言っても1GBくらいまでなら。
278名無しさん@お腹いっぱい。:2008/09/11(木) 16:04:23 ID:F5oRIKJr0
内部でPythonエンジン使ってるからしゃーない
279名無しさん@お腹いっぱい。:2008/09/12(金) 12:22:00 ID:jFs790J10
http://sites.google.com/site/craftware/cfiler

1 .56 - 2008/09/12
- 設定メニュー2に、[ config.py をリロード ] を追加。
- 設定メニューのサブメニューを閉じたとき、上位階層のメニューに戻るようにした。
- Grepダイアログと、テキストビューアの検索ダイアログの状態を、ダイアログをキャンセルで閉じたときも保存するようにした。
- ほとんど使われない .ogg ファイルのサポートをやめて、Audiere を使用しないようにした。
- ファイルリストの取得をするNative関数が、PythonインタプリタをのGILを長時間ロックすることがあったのを修正。
- ファイルリストの取得時にメモリリークしていたのを修正。
- Alt+↑↓でログペインのサイズを変えようとして、それ以上大きく/小さく出来なかったときでも、必ずスクロールしてしまうのを修正。(1.55で混入した問題)
280名無しさん@お腹いっぱい。:2008/09/13(土) 01:00:18 ID:bVPMKMps0
ええええーー
ogg演奏できるのが便利だなーって思ってたのに
281名無しさん@お腹いっぱい。:2008/09/13(土) 01:24:10 ID:EUpU2T/k0
>>280
俺もがっかりだ
282名無しさん@お腹いっぱい。:2008/09/13(土) 12:45:39 ID:XvzPns/60
単に外すだけじゃなくてextensionにしてconfig.pyにちょっと追加すれば使えるような状態にしてあればよいのに。
283名無しさん@お腹いっぱい。:2008/09/13(土) 23:39:15 ID:l8peI4HT0
だいぶ使いやすくなってきたよねー
intypeと内骨格の組み合わせがかなり気に入ってる(intypeにソースツリーがないから)
sconsとgitの操作を内骨格からできるようにちまちま拡張していけば結構シンプルな開発環境になりそうだ
284名無しさん@お腹いっぱい。:2008/09/15(月) 06:21:20 ID:3MYy76ph0
>>283
あるぞ
285名無しさん@お腹いっぱい。:2008/09/15(月) 10:32:05 ID:C1cIPiRNO
作者さん
要望を聞いてください

・画像表示はSuise-Pluginを利用してください
・メディアの再生機能は省いてください
・CraftLaunch/EXを一緒に(統合)しないでください
・Jamp/Findなどの機能はCraftLaunch/EXでやっているんで削ってください
・付加的な機能(GmailFS等)はプラグイン形式にしてください
・'あふこまんど'みたいなのを作ってください
・軽くしてください

以上おねがいです
上記の点でなかなかあふから乗り換えられません。
286名無しさん@お腹いっぱい。:2008/09/15(月) 10:40:16 ID:C1cIPiRNO
と、書いたあとに更新発見!!

1 .57 - 2008/09/15
- Grep / Search 機能を使って列挙した、ディレクトリ名付のファイルリストを使ってコピーや移動を行う際、平たくコピー/移動する機能を追加。コピー直前に確認ダイアログを表示するようにした。

- Grep / Search 結果 から ディレクトリアイテムを移動する際に、移動元のディレクトリの削除に失敗するのを修正。

- 起動直後に開かれるディレクトリの読み込みをサブスレッドで行うように変更し、起動時のウインドウが出るまでの時間をを若干短縮した。

- フォントのリストアップ処理でメモリリークしていたのを修正。

- ファイルのコピー、移動、削除で、処理が終わったアイテムは、選択を解除する。

- バックグラウンドでファイルの削除をしている間に、フィルタを変更すると、削除処理に使われるフィルタも変化してしまっていたのを修正。

- バックグラウンドでディレクトリ比較をしている間に、違うディレクトリに移動すると、エラーになってしまうのを修正。

- バックグラウンドでアーカイブを作成中に、違うディレクトリに移動すると、正しくアーカイブが作成されていなかったのを修正。

- バックグラウンドでアーカイブを展開中に、違うディレクトリに移動すると、正しくアーカイブが展開されていなかったのを修正。
287名無しさん@お腹いっぱい。:2008/09/15(月) 12:19:18 ID:5I+KkzbH0
ところで、作者ってここを見てるんだろうか。
288名無しさん@お腹いっぱい。:2008/09/15(月) 12:47:35 ID:/H75glu10
>>285
どうせでかいインタプリタが乗ってるので削っても限界あります。
動作が軽快にして欲しいというのはありますが、機能は削らなくても結構です。
289名無しさん@お腹いっぱい。:2008/09/15(月) 20:01:27 ID:KLALt7Ow0
柔らかい要望ってことで、透過ウィンドウおよび背景画像の半透明表示が欲しいなー

ところでpopen4経由でscons呼べるようにしてみたんだけど(shellexecuteは子画面開けちゃうから)、
soconsから呼んでるbuilderが吐いたエラーがログペインに乗ってこないなー
内骨格はたぶん悪くないけどなんでだろ
cmd.exe上でscons呼び出すとちゃんとメッセージ出てるんだけどな
290名無しさん@お腹いっぱい。:2008/09/15(月) 21:11:12 ID:7NTJ8pPi0
>>289

shellExecuteじゃなくて、window.subProcessCall()を使えば、
ログウインドウにリダイレクトできるよ。
config.pyのcommand_Substで使われてるから、
見てみるといいかも。
291名無しさん@お腹いっぱい。:2008/09/15(月) 21:18:47 ID:KLALt7Ow0
>>290
それは知らなかったありがとう
popen4で標準出力とエラー出力を読んで、一行ずつprintしてログペインに書いてってやってたんだけど、
>>289の問題がなかったとしても、処理が終了してから一度にログペインに反映されるって動きになっちゃう問題があったんだった
window.subProcessCall()ならそのへんうまいこと処理してくれるかな
試してみる
292「手段を選んでいるいとまはない。」 ◆8RHckg48Fc :2008/09/16(火) 18:43:35 ID:wuaghSqoO
あふとは違うのだよ、あふとは
293名無しさん@お腹いっぱい。:2008/09/17(水) 02:52:48 ID:GyH9dT990
あふとは違うのだよ、あふとは
294名無しさん@お腹いっぱい。:2008/09/17(水) 08:55:16 ID:xW8aPt6g0
あふとは違うのだよ、あふとは
295名無しさん@お腹いっぱい。:2008/09/17(水) 10:01:49 ID:GyH9dT990
>>294
真似はいかんよ
296名無しさん@お腹いっぱい。:2008/09/17(水) 13:35:11 ID:iF+owCl40
http://sites.google.com/site/craftware/cfiler
1.58 - 2008/09/16
- ブックマークのリストを出す際に、現在のディレクトリ以下のブックマークのみに絞り込んで表示する機能を追加。
- pysvn をインストールしなくても、Subversionフィルタが使えるように、デフォルト設定ファイルを変更した。
- デフォルト設定ファイルに、イメージビューアのカスタマイズ例を追加。
- 内骨格が、最大化オプションつきで起動されたときに、エラーログが出力されていたのを修正。
- オープンに失敗する壊れた画像をビューアで開こうとしたとき、露骨なエラーが出力されていたのを修正。画像ビューアのステータスバーに、エラーメッセージを表示するようにした。
- ReadOnly属性付のファイルのタイムスタンプを更新するときにエラーになってしまうので、ReadOnly属性をいったん解除するようにした。
- 選択されているファイルアイテムの配列を、簡単に取得する関数を追加。
MainWindow.leftSelectedItems()
MainWindow.rightSelectedItems()
MainWindow.activeSelectedItems()
MainWindow.inactiveSelectedItems()
- カーソル位置のファイルアイテムを、簡単に取得する関数を追加。
MainWindow.leftCursorItem()
MainWindow.rightCursorItem()
MainWindow.activeCursorItem()
MainWindow.inactiveCursorItem()
297名無しさん@お腹いっぱい。:2008/09/20(土) 23:55:08 ID:Mr66UXdP0
ディレクトリの内容を降順でソートしたいときってどうやるの?
298名無しさん@お腹いっぱい。:2008/09/21(日) 01:27:09 ID:2yccBCk90
>>287
こんな感じ

class sorter_ByNameRev:
def __call__( self, left, right ):
if left.isdir() and not right.isdir() :
return -1
elif not left.isdir() and right.isdir() :
return 1
return -cmp( left.name.lower(), right.name.lower() )
class sorter_ByExtRev:
def __call__( self, left, right ):
if left.isdir() and not right.isdir() :
return -1
elif not left.isdir() and right.isdir() :
return 1
cmp_result_ext = cmp( os.path.splitext(left.name)[1].lower(), os.path.splitext(right.name)[1].lower() )
if cmp_result_ext : return cmp_result_ext
return -cmp( left.name.lower(), right.name.lower() )
299名無しさん@お腹いっぱい。:2008/09/21(日) 01:28:15 ID:2yccBCk90
>>298 続き
class sorter_BySizeRev:
def __call__( self, left, right ):
if left.isdir() and not right.isdir() :
return -1
elif not left.isdir() and right.isdir() :
return 1
return -cmp( left.size(), right.size() )
class sorter_ByTimeStampRev:
def __call__( self, left, right ):
if left.isdir() and not right.isdir() :
return -1
elif not left.isdir() and right.isdir() :
return 1
return -cmp( left.time(), right.time() )
window.sorter_list += [
( u"G : ファイル名(逆順)", sorter_ByNameRev() ),
( u"R : 拡張子(逆順)", sorter_ByExtRev() ),
( u"D : サイズ(逆順)", sorter_BySizeRev() ),
( u"Y : タイムスタンプ(逆順)", sorter_ByTimeStampRev() ),
]
300名無しさん@お腹いっぱい。:2008/09/21(日) 01:31:46 ID:2yccBCk90
インデントは適宜推察して。
というか基本的にcfiler_filelist.pyの1290行目あたりからのsorter_By*をコピーして
クラス名の後ろにRevをつけて、__call__関数の最後のreturnの符号を変えただけ。
301名無しさん@お腹いっぱい。:2008/09/21(日) 20:00:57 ID:RR9EzFfl0
どうもありがとう
手に馴染み始めてきたなー
302名無しさん@お腹いっぱい。:2008/09/22(月) 14:50:21 ID:+8RYDkGL0
http://sites.google.com/site/craftware/cfiler
1.59 - 2008/09/21
- Migemoでのインクリメンタルサーチ時に、ステータスバーには正規表現ではなく、一致したファイル名の一部を表示するようにした。
- Migemoでのインクリメンタルサーチ時に、英単語のカタカナ表記が正しく検索できていなかったのを修正。
( 例 : SaisinSoftware -> 最新ソフトウェア、など )
- ネットワークアップデートのためのバージョン情報の取得時に、プロキシのキャッシュを使って誤判定することがあったのを修正。プロキシのキャッシュを使わないようにした。
- ファイルのコピー、移動、削除で、処理を中断したときに、処理中のアイテムの選択を解除していたのを修正。処理が中断されたアイテムは選択を解除しないようにした。
- [平たくコピーしますか?]のダイアログをキャンセルしたとき、コピー処理自体をキャンセルするべきだったので、そのように修正した。
- ログを大量に出力している間に、ログペインのサイズを変更すると、エラーが発生することがあるのを修正。
- コマンドラインのコマンドとして、メモリの統計情報を出力する "MemoryStat" を追加。(デバッグ目的)
- Subversionフィルタの改良。svnで管理されていないディレクトリは、その親ディレクトリがsvnで管理されているときは非表示にし、そうでない場合は表示する。
303名無しさん@お腹いっぱい。:2008/09/23(火) 06:15:19 ID:YzErY0jk0
イメージビューアがメインウィンドウの上にかぶるのがうざいので少し調べてみたら
cfiler_imageviewer.ImageViewerの生成オプションで親ウィンドウを0にしてやれば
独立したウィンドウになることがわかった。

あとは表示中の画像サイズにウィンドウをフィットさせる処理を書きたいんだけど、うまくいかない。

生のウィンドウサイズはgetWindowRectで得られるけど、
setPosSizeで指定するサイズは生のサイズじゃない。
getCharSizeで得られる文字サイズが絡んでるのはわかるんだけど、
生サイズ/文字サイズってわけではなくてよくわからん。
304名無しさん@お腹いっぱい。:2008/09/23(火) 07:01:10 ID:YzErY0jk0
うまくいかないってのはフィットさせるたびにサイズが小さくなっていくことだったんだけど、
よくわからんけどwindow.fit = Falseとしておけば大丈夫だということがわかった。

とりあえずこんな感じのをconfigure_ImageViewerの中で定義してやれば現在表示中の画像サイズにウィンドウサイズを調整出来る。

def command_WindowFit():
x, y, w, h = window.getWindowRect()
iw, ih = window.img.getSize()
cw, ch = window.getCharSize()
iw *= window._zoom
ih *= window._zoom
w = int(round(iw/cw))
h = int(round(ih/ch))+1
window.fit = False
window.setPosSize(x,y,w,h,0)
305名無しさん@お腹いっぱい。:2008/09/23(火) 12:08:41 ID:YzErY0jk0
cfiler_imageviewer.ImageViewerの生成オプションを弄らなくても
configure_ImageViewerでwindow.main_window = 0ってしてやれば独立ウィンドウになるみたい。
TextViewerのほうも同様。
306名無しさん@お腹いっぱい。:2008/09/23(火) 12:14:58 ID:YzErY0jk0
↑勘違いだったorz
307名無しさん@お腹いっぱい。:2008/09/23(火) 20:24:09 ID:YzErY0jk0
MainWindow.image_file_ext_listに".psd"もあるから一応psdに対応したつもりなんだろうけど、
exeの中にはPsdImagePlugin.pyoが入ってないからデコードに失敗する。

PILのPsdImagePlugin.pyをextensionフォルダに入れてやれば再起動後に表示できるようになる。
308名無しさん@お腹いっぱい。:2008/09/24(水) 01:55:05 ID:DnA9AUe+0
http://sites.google.com/site/craftware/cfiler
1.60 - 2008/09/24
- Grep / Search / Compare などで作られたファイルリストのディレクトリ名部分には、それぞれ [grep] [search] [compare] というプレフィックスを付けるようにした。
- Subversion フィルタの修正。grep 結果など、アイテムの名前にディレクトリ名が含まれる場合に、Subversionフィルタで除外されてしまっていた。
- アップデート後の再起動で、前回の起動時の状態で起動してしまうのを修正。前回の終了時の状態で起動するようにした。
- ウインドウを最大化した状態で終了させた後、次回起動時のウインドウサイズを通常のサイズになるようにした。
- ウインドウを最小化した状態で終了させたとき、次回起動時にウインドウが見えなくなっていたのを修正。
- ウインドウを最大化したときに、ウインドウの右端と下端の隙間が、左端と上端に比べて太ってしまうのを修正。上下と左右を均等に太らせるようにした。
- APIリファレンスのために、ソースコードにdoxygen用のコメントを埋め込んだ。
309名無しさん@お腹いっぱい。:2008/09/24(水) 20:34:26 ID:DnA9AUe+0
http://www-2ch.net:8080/up/download/1222251295712076.Y78r1V

Susie plug-inを使って画像読み込みを行うpythonスクリプトを書いてみた。
これを使ってPILのImagePluginを書いてやれば画像の対応形式が増やせると思う。
310名無しさん@お腹いっぱい。:2008/09/25(木) 12:51:26 ID:cI5T2eAK0
ctermcore.cppのWindow::_createFont()でクラッシュするんだが……
典型的な1個外れのエラーっぽい

----------------------------------------
- int * char_width_table = (int*)malloc(0xffff*sizeof(int));
+ int * char_width_table = (int*)malloc(0x10000*sizeof(int));
GetCharWidth32( hDC, 0, 0xffff, char_width_table );
  :
311名無しさん@お腹いっぱい。:2008/09/25(木) 13:03:17 ID:cI5T2eAK0
ああそれと、ctermcore.cppでvfw.hを#includeするまえにwindows.hを
インクルードしてほしい
#include <algorithm>も必要
これらを直さないと、標準環境であるVC++7.1でビルドできない
312名無しさん@お腹いっぱい。:2008/09/26(金) 01:17:11 ID:zHh06K3s0
1.61 - 2008/09/26
- フォントの初期化処理で、メモリが破壊されて、場合によっては落ちてしまうのを修正。
- API リファレンスのためのコメントを拡充した。

>>310 の修正みたいですね。
313309:2008/09/27(土) 23:32:46 ID:bj+5ZIrZ0
http://www-2ch.net:8080/up/download/1222525720143596.WPeT6K

Susie Plug-inを使って内骨格の対応画像形式を増やすスクリプトです。
*.pyはextensionフォルダにおいて、
SusieImagePlugin.pyのspi_base_pathをSusie Plug-inの置いてあるフォルダに設定して下さい。
サンプルとしてifjp2.spiとifdds.spiを使って.jp2, .j2k, .ddsを開けるようにしてあります。
314名無しさん@お腹いっぱい。:2008/09/28(日) 18:06:24 ID:Wl8gAL+M0
SusieプラグインはSPI処理するpyd作って
imageviewerのソース勝手に弄って使ってる。

Pythonから直でDLLやC互換の構造体使えるのは知らなかったんで
>313
のソースは勉強になりました。
315313:2008/09/28(日) 19:30:29 ID:2AcXB2o90
ちなみに、パレットとかの扱いがわからなかったので、
インデックスカラーとかグレースケール画像には対応してません。
16, 24, 32bitカラーのものに対応してます。

>>314
作ってるんだったら公開してくれ。w
316314:2008/09/29(月) 06:40:16 ID:ErwyCzJq0
>315
真似してアップしてみましたよ。
ttp://www-2ch.net:8080/up/download/1222637354290437.wQxs9Z

PythonもDLLも素人なので、多分、凄く行儀悪いことしてる。
どうしても使いたい人向け。
本体バージョンアップでちょくちょく動かなくなるし。
本家で対応してくれるといいんだけどなぁ…。


ついでに個人的に欲しくて作ったカレンダー表示も
ttp://www-2ch.net:8080/up/download/1222637846199678.YyVbkQ

つか、内骨格絡みのこういうものって公開していいのかな?
317314:2008/09/29(月) 06:53:43 ID:ErwyCzJq0
カレンダー、見直してみたらバグあったんで更新しました
ttp://www-2ch.net:8080/up/download/1222638766450346.6geaAo
318名無しさん@お腹いっぱい。:2008/09/29(月) 22:21:00 ID:vSB10hZT0
http://sites.google.com/site/craftware/cfiler
1.62 - 2008/09/29
- ファイルのコピー処理の後、GREPやSearchのときに、プログレスバーが出なくなってしまうことがあるのを修正。
- ファイルパスのディレクトリ区切り文字に / を設定している場合でも、 \ が使われてしまう箇所があったのを、いくつか修正。
319315:2008/09/30(火) 02:08:06 ID:86k80yJd0
http://www-2ch.net:8080/up/download/1222708020679847.ML3AnN

Susie.pyを8bitインデックスカラーに対応させました。
320名無しさん@お腹いっぱい。:2008/10/03(金) 22:51:32 ID:/YtHbvJ10
内骨格で開いてるフォルダの中身をエクスプローラで弄っても更新されないし、
両方に同じフォルダ開いて新規フォルダを作っても逆側には作ったフォルダが表示されない。
内骨格って定期的に読み込み直すとかしないの?
321名無しさん@お腹いっぱい。:2008/10/04(土) 18:23:54 ID:7PYB1yIE0
DirectShow版のミュージックプレイヤー書いてみた
http://codepad.org/texvdWLA
DirectShowなんで、DirectShow用のコーデック入れれば
何でも再生できると思う

config.pyのconfigure()の中で
window.musicplayer = MyMusicPlayer(window)
とかやるとこっちが使われる
再生したい拡張子は、同じくconfigure()の中で
MainWindow.music_file_ext_list = (
'.wav', '.mid', '.mp3', '.ogg', '.m4a')
とか(お好みで)設定するとよさげ

超怪しいんで、使う場合は自己責任でおながい
322名無しさん@お腹いっぱい。:2008/10/04(土) 22:23:47 ID:mMfr20YF0
WMPでは再生できるのにDirectShowでは再生できないmp3ファイルがあるなぁ。
GraphEditで開いてみたら適切なフィルタが見つからないって事みたいだけど、なんでだろう?
mp3ファイルが全部駄目ってんならわからないでもないけど、再生できる物もあるんだよね。
323名無しさん@お腹いっぱい。:2008/10/04(土) 22:53:36 ID:7PYB1yIE0
>>322
それはちょっとわからんね
俺の環境でDirectShow Filter Toolで見てみると
MPEG-1 Audio Decoderではffdshow Audio Decoderが一番優先度高くなってるけど
324名無しさん@お腹いっぱい。:2008/10/04(土) 23:15:55 ID:mMfr20YF0
デコーダは同じくffdshowのが優先度が高くなってる。
問題はスプリッタの方みたい。といってもMPEG-1 Splitterには標準のMPEG-I Stream Splitterしかないわけだが。

GraphEditで再生できるmp3とできないのを両方ともFile Source(Async)でフィルタ追加して、
MPEG-I Stream Splitterと接続してみると、再生できる奴はきちんと繋がるんだけど、
駄目な方はこの時点で繋がらない。

mp3ファイルの構造に何か特徴があるのかもしれんけど、良く解らん。

まぁ、外部プレイヤーで再生すれば良いだけだから特に困るわけではないけど。
325名無しさん@お腹いっぱい。:2008/10/05(日) 05:07:24 ID:Q0OflG6W0
どうもID3タグが原因っぽい。
ID3 v2.4形式だとほぼ全滅。v2.2はOKっぽいけど駄目な物もある。

本来スプリッターが解釈できない形式だけど、
うまい具合にスルーされるようなデータの並びだった場合は再生されるってことなのかも。
326名無しさん@お腹いっぱい。:2008/10/05(日) 10:05:21 ID:GSTzhBdS0
ttp://homepage3.nifty.com/k-takata/diary/2006-03.html
にちょうどそれっぽいことが書いてあるね
327名無しさん@お腹いっぱい。:2008/10/05(日) 10:45:45 ID:Q0OflG6W0
DirectShow ID3v2でぐぐると>>326 の他にも色々出てきますね。
適当なスプリッタを入れてDirectShow Filter Toolで優先度を弄ればよいって事なんでしょうけど、
外部プレイヤーで再生するほうが面倒が無くて良いですね。
328名無しさん@お腹いっぱい。:2008/10/06(月) 16:33:11 ID:qfvTS808O
軽 く し て く れ
329名無しさん@お腹いっぱい。:2008/10/06(月) 17:29:01 ID:5hyJ9n8f0
どの辺が重いと感じてる?
330名無しさん@お腹いっぱい。:2008/10/09(木) 12:33:50 ID:LiwvLTFBO
メモリ消費量の話だよ
ノートに2GBしか積んでないから約20MBも消費してもらったら困るのだよ(・ω・`)o
エクスプローラが30MB消費してて嫌っているのに内骨格まで,,,
331名無しさん@お腹いっぱい。:2008/10/09(木) 12:57:44 ID:IhayzhVc0
>>330
2GB積んでて20MB程度の消費を気にするって、どんな使い方してんの?

ウチは2.5GB積んでるけど、Web、FTP、SMTP、RDBMS2種、各種チャット鯖等動かしていて、
さらにチャットツール10プロセスくらい、セキュリティ系数種、ランチャー等ユーティリティをいくつか常駐してても
メモリ消費が1GB超える事は滅多に無いんだが。

フォトショップとかメモリ喰いまくるツールを常用してるって事か?
332名無しさん@お腹いっぱい。:2008/10/10(金) 16:59:50 ID:colJBaxJ0
cfiler_main.pyを弄らないとどうにもならないような変更をしたい場合は
ソースを弄ってpy2exeでビルドしないといけないけどビルド環境を整えるのが面倒。

py2exeはメインスクリプトだけをexeに入れてあとはzipファイルに入れることができて、
cfiler.exeはzipファイルとしても読み込めるようなので、
extension/cfiler_main.py(のmain関数)を呼び出すような構成のexeファイルを作ってみた。

http://www-2ch.net:8080/up/download/1223624618976031.QBXxNZ

cfilerx.exeとextensionフォルダを内骨格のフォルダにコピーしてcfiler.exeの代わりに
cfilerx.exeを実行すればOK。
cfiler.exe内蔵のモジュールよりもextensionフォルダのが優先してインポートされるので
cfiler_*.pyの改造には便利だと思います。
333330:2008/10/12(日) 02:59:29 ID:jgl5K68fO
>331
Adobe CreativeSuite CS3, Visual Stadio 2005 Professional,同2008 Professional,
Office2003 Professional,同2007 Professional
だいたい重そうなのはこれら
入れすぎたせいかOS起動時間が17秒→35秒と倍以上になった
メモリ使用率は起動直後使用0.64GB 空き1.22GBとなってるけど
上記5つ起動すると使用1.79GB空き0.09GBとなる
90MBしかないメモリーで20MB使われたらたまらん
334名無しさん@お腹いっぱい。:2008/10/12(日) 04:00:51 ID:T1PyJGmZ0
ヤツあたりだなそりゃ
全然内骨格のせいじゃないじゃん
だいたい90MBも70MBも大して変んねえだろ
PCの使い方が間違ってる
335名無しさん@お腹いっぱい。:2008/10/12(日) 08:40:08 ID:vZGKmrF00
90MBでAdobe CreativeSuiteとかVisualStudioとかアホかw
336335:2008/10/12(日) 08:45:11 ID:vZGKmrF00
よく読んでなかったすまん
337名無しさん@お腹いっぱい。:2008/10/12(日) 09:39:53 ID:AfXBasM10
>>333
他のファイラに比べて、あからさまにメモリ喰うとかだったらまだしも、
この場合、どう考えても、金出して買った商品のほうに依頼だすべきだろ。

しかも、挙げたツールを全部一度に起動して常用するなんて事がありえない。
作者さんも、こんなレス見たら不愉快になるわ。
338名無しさん@お腹いっぱい。:2008/10/12(日) 10:44:32 ID:ooNpteYb0
>>333
ニーズにあってないなら、他のファイラー使いなよ。
もっと使用量少ないファイラーなんていくらでもあるんだからさ。
339名無しさん@お腹いっぱい。:2008/10/12(日) 11:18:16 ID:qm9ryLJ40
>>333
それらを「同時に」使わなければならない理由が俺には全く分からないのだが
何でバージョン違いのVSやOfficeを同時に起動しておく必要があるんだよ

VS入れてるってことは開発すんのか?
開発者とは思えないほどアホだな
340名無しさん@お腹いっぱい。:2008/10/12(日) 13:18:40 ID:arT3h50T0
まあまあ皆さん落ち着いて
内骨格がいろんな考え方の人に使われるようになって来ているということですよ
ユーザーが増えることが最も重要
341名無しさん@お腹いっぱい。:2008/10/12(日) 16:10:45 ID:kxl9R+uq0
http://sites.google.com/site/craftware/cfiler
1.64 - 2008/10/12
- 履歴ジャンプウインドウ、ブックマーク選択ウインドウ、音楽プレイリストウインドウで、インクリメンタルサーチを使えるようにした。
- ソート方法を選択するとき、Shiftを押しながら決定すると、降順になるようにした。
- UNC形式パスの共有名部分 ( \\servername\share\dirname の share の部分 ) を補完する処理を追加。
- リストウインドウをカスタマイズ出来るようにするため、config.py の configure_ListWindow() を呼び出すようにした。
- MainWindow.editor に 呼び出し可能オブジェクトを設定しているとき、設定メニューから [ config.py を編集 ] がエラーになっていたのを修正。
- cfiler.exe に バージョン情報を埋め込むようにした。
- 画像ビューアで .psd と .tga がデコードできていなかったのを修正。
- cfiler.ini ファイルの読み書きが、プロセス間で同時に起こってしまう可能性があったのを修正。
- 各種リストウインドウの最大サイズが、メインウインドウより少し小さくなるように調整。
- インクリメンタルサーチの背景のグラデーション模様の上端が目立つように少し調整
342名無しさん@お腹いっぱい。:2008/10/12(日) 17:18:30 ID:WZpBsai60
>>337
のIDがあふ
343名無しさん@お腹いっぱい。:2008/10/12(日) 17:38:26 ID:AfXBasM10
勝った!(何が?
あふスレに自慢しにいこー
344名無しさん@お腹いっぱい。:2008/10/13(月) 12:06:15 ID:PV3dD2kL0
1 .66 - 2008/10/13
- 1.65でiniファイルをutf8にした影響で、フォントがカスタマイズされなくなってしまっていたのを修正。
- 拡張子に非ASCII文字が含まれているときは、分離表示しない。

1 .65 - 2008/10/13
- 音楽再生中、ステータスバーの右端に、再生位置を表示するようにした。
- Musicプレイヤウインドウの Ctrl + ←/→ で、再生位置をシークするようにした。
- 音楽プレイヤの最後の状態(プレイリストと再生位置)を記憶し、再起動後に復活させるようにした。
- 比較選択ツールに、もう片方のペインで選択されているアイテムを選択する機能を追加
- テキスト差分ウインドウに、ステータスバーを追加
- テキスト差分ウインドウをカスタマイズ出来るようにするため、config.py の configure_DiffViewer() を呼び出すようにした。
- 指定したパスにジャンプする関数を追加。
MainWindow.leftJump()
MainWindow.rightJump()
MainWindow.activeJump()
MainWindow.inactiveJump()
- いくつかの処理の間のプログレスバーを、2段表示にした。
- 1.64 の変更で、初めての起動で ini ファイルが存在しないときに、起動できなくなっていた問題を修正。
- ini ファイルの文字エンコーディングを S-JIS から utf8 に変更。UNICODEでしか表現できない文字を含むパスが、履歴やブックマークに残らない問題あったのを修正。
345名無しさん@お腹いっぱい。:2008/10/13(月) 17:10:07 ID:N3vcwcWF0

俺しか使ってねーと思うけどDirectShowメディアプレイヤーを1.65仕様に追従した
http://codepad.org/7R9idMQS

使う場合はconfigure()ん中で
cfiler_musicplayer.MusicPlayer = DSMusicPlayer
とかやって、クラス自体を置き換えるしかなさげ
346名無しさん@お腹いっぱい。:2008/10/14(火) 08:35:41 ID:6TPlJGxm0
1.67 - 2008/10/14
- UNC形式のパスで、必要に応じてネットワーク接続のユーザー名とパスワードの入力ダイアログを表示するようにした。
- 比較選択ツールのウインドウは、先頭文字の入力で即時決定するようにした。
- ディレクトリ比較ツールのウインドウは、先頭文字の入力で即時決定するようにした。
- ディレクトリ比較で、アクセスできないファイルなどがあったときに、露骨なエラーが表示されてしまうのを修正。
347名無しさん@お腹いっぱい。:2008/10/14(火) 19:15:44 ID:6TPlJGxm0
>>345
クラスの置き換えだったらSongMCIをSongDirectShowで置き換えても良いんじゃない?
348名無しさん@お腹いっぱい。:2008/10/14(火) 19:30:17 ID:D2nUNt7X0
>>347
ああ、確かにそうだなあ
そっちのが手っ取りはやいね
349 ◆Nana...Z5Q :2008/10/14(火) 22:10:26 ID:ktagsRpR0
>>1からこのスレ見てきたら成長具合がすさまじくて正直惚れた・・・///
ちょっとあふから浮気しちゃいそうな・・・・あぁっ!!ダメっ!!わたしったら・・・
350名無しさん@お腹いっぱい。:2008/10/15(水) 08:21:15 ID:613Z9rbF0
あふに比べると画面のチラツキが少ないところがいいね
351名無しさん@お腹いっぱい。:2008/10/15(水) 12:22:08 ID:Hp9xrBxM0
ジャンプリストで頭文字がUのフォルダを登録すると呼び出した時にリストが空白になってしまう。
例)
D:\User
E:\U
E:\hogehoge\U

これってどうすれば登録出来るかなぁ?
352名無しさん@お腹いっぱい。:2008/10/15(水) 14:34:12 ID:W3pIaVcF0
\を、\\か/にしないといけない
353名無しさん@お腹いっぱい。:2008/10/15(水) 15:11:06 ID:AL+84oe40
もしくはrを頭に付ける。
r"D:\User"
全角文字がある場合はur。
ur"E:\ドキュメント"
354名無しさん@お腹いっぱい。:2008/10/15(水) 16:05:40 ID:7ayP46Wr0
http://sites.google.com/site/craftware/cfiler
1.68 - 2008/10/15
- デフォルト設定ファイルのコマンドラインの設定に "SelectEmpty" コマンドを追加。このコマンドを実行すると、アクティブなペインのディレクトリのうち、空のものを選択する。
- UNC形式のパスをつかったコピーや移動処理のあとの再読み込みで、操作不能になっていたのを修正
- ディレクトリ区切り文字をスラッシュに設定していると、UNC形式のファイルに対して Ctrl-Enter を使うことが出来なかったのを修正。
355351:2008/10/15(水) 16:48:31 ID:Hp9xrBxM0
>>352
うまくいった!ありがとう。

>>353
うまくいかなかった!でもありがとう。
356名無しさん@お腹いっぱい。:2008/10/29(水) 16:43:40 ID:CXNA6QvP0
なんか過疎ってる?
とりあえずイメージビューワでデフォルトのfitモードでも
画面サイズより小さい画像は拡大しないようにするコード
(config.pyに記述)

def configure_ImageViewer(window):

original_reset = window.reset
def reset():
if window.zoom_policy == "fit":
img_size = window.img.getSize()
client_rect = window.getClientRect()
offset_x, offset_y = window.charToClient(0, 0)
char_w, char_h = window.getCharSize()

area_size = (client_rect[2] - client_rect[0],
(window.height()-1)*char_h + offset_y)
if img_size[0] < area_size[0] \
and img_size[1] < area_size[1]:
window._zoom = 1.0
window.fit = False
window.pos = [0,0]
else:
original_reset()
window.reset = reset

zoom_policy=originalでもちょっと使ってみたが、
スクロールがかなりガタガタ言って、ぶっちゃけ遅くて使い物にならんな
スクロールするだけでpane一から作り直し&全再描画は、さすがに重いんだと思う
357356:2008/10/29(水) 16:46:37 ID:CXNA6QvP0
ごめん
インデント多分ガタガタになってるよな
おまけにちょっとミス

    original_reset = window.reset
    def reset():
        if window.zoom_policy == "fit":
            img_size = window.img.getSize()
            client_rect = window.getClientRect()
            offset_x, offset_y = window.charToClient(0, 0)
            char_w, char_h = window.getCharSize()

            area_size = (client_rect[2] - client_rect[0],
                    (window.height()-1)*char_h + offset_y)
            if img_size[0] < area_size[0] \
                    and img_size[1] < area_size[1]:
                window._zoom = 1.0
                window.fit = False
                window.pos = [0,0]
                return
        original_reset()
    window.reset = reset
358名無しさん@お腹いっぱい。:2008/11/01(土) 15:57:53 ID:QFBYvYmL0
ためしに画像ビューワ作ってみた
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7908.zip

通常は画像サイズにウィンドウをあわせて等倍表示
フルスクリーン表示、スライドショウあり
内骨格内臓のやつよりはスクロール軽いけどズームとかはない
359名無しさん@お腹いっぱい。:2008/11/02(日) 18:31:04 ID:FXLtnyE/0
内骨格のリスト上のディレクトリでエディタ(や他のアプリ)をshift-xで実行して内骨格に戻ったとき、
リストを自動でリフレッシュしてくれるって機能は難しいのかな
新しくできたファイルがリストに載らないからいっぺん上のディレクトリに上がって、戻るって手順を踏んでるんだけど、
いまいちだなと思ってる
360名無しさん@お腹いっぱい。:2008/11/02(日) 20:15:43 ID:8K6SiT4d0
>>359
完全に自動でやりたければディレクトリ監視が必要だが、手動でいいんなら
config.pyの中で
window.keymap[VK_F5] = window.command_Refresh
とかやればいいよ

これだと(explorer風に)F5でリフレッシュするようになるが、
割り当てるキーはお好みで
361名無しさん@お腹いっぱい。:2008/11/02(日) 22:03:12 ID:lbqTvNF20
どうもありがとう
とりあえず手動でしのごう
内骨格のwindowにフォーカスが戻ったときのイベントでリフレッシュしてくれればいいんだと思うんだけど、config.pyじゃできないよねこれ

そういえばhotokey設定して内骨格呼び出したとき、全画面表示してたのがウィンドウ表示になってしまうってのも困って(ってほどじゃないけど)る
800*600くらいで全画面表示だととすごく使いやすいんだよなー内骨格
362名無しさん@お腹いっぱい。:2008/11/02(日) 22:27:32 ID:8K6SiT4d0
>>361
多分cfiler_mainwindow.pyのMainWindow._onActivate()を書き換えるしかねえかな

config.pyのconfigure()が呼ばれる時点で
_onActivate()はcterm側にコールバックとして渡されてしまっているので
configure()の中で_onActivate()を再定義しても手遅れなんだよな

まあ配布物の中身を書き換えるってのもなるべくしたくないだろうし、
もっといい手があるかもしれんがな
363名無しさん@お腹いっぱい。:2008/11/02(日) 23:22:12 ID:Hftvj5k70
config.pyのconfigure()の中にこんな感じのを書いて
一定時間ごとにファイルリスト更新させるというのはどうだろう。

def command_RefreshBoth(self):
   self.refreshFileList( self.activePane(), True, False )
   self.refreshFileList( self.inactivePane(), True, False )
   self.paint(PAINT_ALL)

window.setTimer(command_RefreshBoth, 1000) # 1000ms ごとに第1引数を実行
364名無しさん@お腹いっぱい。:2008/11/03(月) 00:05:53 ID:mVyLBJ2y0
超絶に怪しいが俺も書いてみた
こっちはディレクトリ監視をマジでやる
http://codepad.org/83WhqC7o

config.pyのconfigure()の中に書いてみてくれ
365364:2008/11/03(月) 00:21:01 ID:mVyLBJ2y0
書いたけどこれはやっぱりダメだな、使わないでくれ

裏スレッドから無理やりリフレッシュさせてるんで、
場合によってはあっさりクラッシュしたりするようだ
表にメッセージをPOSTして再描画させられればいいんだが、ウィンドウプロシジャを
自由に弄れないから仕方が無いな
366名無しさん@お腹いっぱい。:2008/11/03(月) 00:30:00 ID:Pz1Fd6H80
>>363
うーんそれはちょっと好みと外れる...
たしかAPIにディレクトリの変更通知があったよな、と思ったら
>>364
すご
と思ったけどこれ内骨格本体モロとも落ちてしまうw
最初一回ちゃんと動いた
おおと思ってもう一回やってみたら内骨格固まった
再起動したら新ファイルできる度に落ちるような
367名無しさん@お腹いっぱい。:2008/11/03(月) 00:31:35 ID:Pz1Fd6H80
>>365
了解です
368364:2008/11/03(月) 12:54:34 ID:mVyLBJ2y0
昨日のコードだけど、内骨格が落ちてしまう原因は(何となくだが)分かった
MainWindow.subThreadCall()が再入不可で、別スレッドから並列で呼ばれると、
subThreadCall()内部で待ちに使っているメッセージループを終わらせるための
window.quit()で本当に終了してしまうようだ

cfiler_threadutilのJobQueueを使って、もう少し穏当に再描画させるコードを
書いた。これで上の問題は起きなくなるはず

それと、内骨格が実際に終了するときのフックがうまく取れない(window.quit()は
上記のように、subThreadCall()の中でも呼ばれる)ようなので、
1秒タイムアウトで監視して、IsWindow()でウィンドウが有効かチェックするようにした

ttp://codepad.org/t80s7vnv
369名無しさん@お腹いっぱい。:2008/11/03(月) 14:47:34 ID:CBP0T9O30
>>368
window.command_Refresh()だとカーソルのあるほうしか更新されないから
両方とも同じフォルダを表示しておいて外部プログラムでそのフォルダにファイルを作っても
片側しか更新されない。
370369:2008/11/03(月) 15:15:18 ID:CBP0T9O30
適当に修正してみた。
http://codepad.org/zYFNP249

rebind_setListerにはpaneを渡すようにして、DirectoryWatchThreadの初期化ではpaneとlisterを渡すようにした。
371364:2008/11/03(月) 15:16:44 ID:mVyLBJ2y0
>>369-370
おお、修正サンクス
372364:2008/11/04(火) 19:39:16 ID:y4scTvX50
使ってみていたが、ファイルリネーム後にキーを受け付けなくなったりするな。
やはりsubThreadCall()がネックのようだ。

キーイベントはsubThreadCall()内でハンドラを摩り替えているが、
タイマは動いたままなので、UIスレッドからでもタイマ経由で
subThreadCall()実行中にsubThreadCall()に再入する可能性があり、
その場合は余裕で問題が発生する。

とりあえずsubThreadCall()前後でonTimerJob()とonTimerSyncCall()が走らないように
摩り替えるようにしてみた。

http://codepad.org/t2j940nG

今回のはextensionに入れることを念頭に書いた。
foo.pyとかいう名前で保存してextensionに入れた場合は、
configure()の中で、
import hoge
foo.start_directory_watch(window)
とかやればおk。
373名無しさん@お腹いっぱい。:2008/11/04(火) 19:41:12 ID:zSoA+Q1n0
import hogeじゃ駄目だろw
import fooだな。
374364:2008/11/04(火) 19:44:01 ID:y4scTvX50
>>373
><
375364:2008/11/05(水) 00:00:56 ID:y4scTvX50
ウザくてすまん
あげなおし
http://codepad.org/Df2LOmLF

WaitForMultipleObjectsの最後の引数を1から500に変えた
1ミリ秒タイムアウトは無いわ……デフォの分解能だと10ミリは寝るだろうから
CPU負荷全然かかってなくて気づかんかった
376名無しさん@お腹いっぱい。:2008/11/06(木) 13:58:52 ID:52AN3cia0
377名無しさん@お腹いっぱい。:2008/11/09(日) 23:21:26 ID:/V4H/JXd0
手抜きPythonコンソール作ってみた
http://codepad.org/rsdkWANY
補完とか自動インデントとかカッコイイ機能はない
新たにPythonインタプリタを立ち上げるわけではないので
起動だけは爆速、ただし簡単に内骨格を道連れにできるので危険

>>358のzipの中にあるvensterと、
http://www.scintilla.org/
で配布してるScintilla(のSciLexer.dll)に依存してるんで
まとめてextensionの中に放り込んでもらえればおk

console.pyとかいう名前で保存したら
config.pyに↓のような感じで

def command_Console():
import console
con = console.ConsoleWindow()
con.start_interp({'window': window, 'console': con})
window.keymap[VK_F3] = command_Console

start_interp()の引数は無くてもいいけど、
こんな感じでwindowインスタンスを与えてやると
コンソールから内骨格のwindowインスタンスが可視になる
378名無しさん@お腹いっぱい。:2008/11/10(月) 00:37:07 ID:5kaSuGXo0
なんかよさそうな拡張だねえ
これipython組み込める?
379名無しさん@お腹いっぱい。:2008/11/10(月) 01:45:23 ID:ryZKA2JN0
>>378
すまんが、かなり弄らんと無理だと思う
ipythonは端末とコネクトされている&readline前提のはずだし
380377:2008/11/10(月) 16:12:32 ID:ryZKA2JN0
ちょっと直した
http://codepad.org/1FMoSxfh

・コピペで複数行一度に入力した場合にまともに動いてなかったんで直した
・↑↓でヒストリを行き来できるようにした

なんつうかEmacs風キーバインドに慣れてる人はごめんなさいなんだが
ScintillaのキーバインドはデフォでWin風なので
カーソルキー、Home、Endなどを使うかコードを書き換えてください
381364:2008/11/11(火) 20:40:38 ID:Mg6hT/QX0
ディレクトリ監視用のソースをちょっと直した
監視スレッドがちゃんと解放されないという凶悪なバグだった
途中の版でエンバグしてたらしい
それと、キューを左右のペイン両方に持つようにした
http://codepad.org/ugsU82p6

382名無しさん@お腹いっぱい。:2008/11/13(木) 20:28:18 ID:AaHgjMpF0
作者さん別のもの作りだしちゃった?
倉EXと同様に内骨格も放置されちゃうのかな?
383名無しさん@お腹いっぱい。:2008/11/13(木) 21:27:44 ID:qnH+rrmF0
>>382
どうだろな

誰も使ってないだろうけど
>>358の画像ビューワをGIFアニメ対応にした
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8024.zip
384383:2008/11/13(木) 22:45:47 ID:qnH+rrmF0
385名無しさん@お腹いっぱい。:2008/11/16(日) 01:03:44 ID:2HVCJRp60
http://sites.google.com/site/craftware/cfiler
1.72 - 2008/11/15
- ファイルリストを自動的にリロードする処理を追加
- デフォルト設定ファイルに、左右のペインから重複ファイルを探すコマンド CheckDuplicate を追加。
- デフォルト設定ファイルに含まれている SelectEmpty コマンドを CheckEmpty コマンドに変更。
(バックグラウンドで処理している関係で、アイテムを選択することができない場合があるので、ログに出力するだけにした。)
- 左右のペインに含まれる全てのアイテムを返す関数を追加。
MainWindow.leftItems()
MainWindow.rightItems()
MainWindow.activeItems()
MainWindow.inactiveItems()
- 一括変名機能で正規表現のパターンの記述が間違っていたときに、エラーが発生して操作不能になってしまうのを修正。
- ウインドウのクラス名を、CtermWindowClass から CfilerWindowClassに変更。
- iniファイル中のバージョン番号が更新されていなかったのを修正。
- ディレクトリの変更のためにサブスレッド中でアイテムリストを作成している間に、ほかのスレッドがアイテムリストにアクセスしてエラーになる場合が稀にあったのを修正。
386名無しさん@お腹いっぱい。:2008/11/16(日) 01:49:28 ID:/4TVgKTE0
おお、作者さんがディレクトリ監視機能作ってくれたのか
これで俺の怪しいコードは安心して削除できるな
387名無しさん@お腹いっぱい。:2008/11/16(日) 01:52:01 ID:2HVCJRp60
cfiler_nativeに監視用の機能が追加されてるみたいです。
388名無しさん@お腹いっぱい。:2008/11/16(日) 02:16:28 ID:MqCfj//Y0
>>386
短い間だったけどつかってたよー
サンキュー
作者さんもサンキュー
389名無しさん@お腹いっぱい。:2008/11/16(日) 12:18:01 ID:/4TVgKTE0
新バージョン1.72での現象(>>364の拡張は外してある)

内骨格で表示してるディレクトリを他のプログラムからまるっと削除したら
[Error 32] プロセスはファイルにアクセスできません。別のプロセスが使用中です。
[Error 5] アクセスが拒否されました。
とコンソールペインに表示されて、その後キー、マウス入力を受け付けなくなった。
完全にフリーズしているわけではなくて、最小化はできるし再描画もされる。

どーも>>372と同じ現象っぽい。
390名無しさん@お腹いっぱい。:2008/11/16(日) 17:41:16 ID:2HVCJRp60
1.73 - 2008/11/16
- ログペインのテキストを、マウスで選択してクリップボードにコピーできるようにした。
(選択するだけで、自動的にクリップボードにコピーされます。)
- ログペインをマウスのホイールでスクロールできるようにした。
- Ctrl + Alt + ↑↓←→ で、すばやくセパレータを移動するようにした。
- 1.72で入れた自動リロードが原因で、操作不能になってしまうことがあったのを修正。
- 大きなサイズのバイナリファイル比較のときに、メモリ不足で失敗しないようにした。
- tgzファイルを作成するとき、日本語文字が含まれているパスに作成できなかったのを修正。
391名無しさん@お腹いっぱい。:2008/11/16(日) 20:16:49 ID:/4TVgKTE0
相変わらず作者さん対応速いなあ
392名無しさん@お腹いっぱい。:2008/11/17(月) 01:20:17 ID:KGEhMk9D0
まだ怪しい感じだな。
最小化して放置してたら、いつの間にか固まって復帰しなくなってた。
以下は作者さん宛だが。

やはりsubThreadCall()の問題だと思いますよ。
1. 現在のマウス、キーフックをセーブし、書き換える(ESCしか効かなくなる)
2. ワーカースレッドを起動し、メッセージループを回す
3. ワーカースレッドが終了すると、window.quit()を呼び、メッセージループを止める
4. 1.でバックアップを取ったマウス、キーフックに戻す

といった流れですが、タイマーを止めていないので、2.のメッセージループを
回して待っている間にファイル変更が発生すると、2.の間にsubThreadCall()が
再び呼ばれてしまう。

この二番目のsubThreadCall()の流れでは、
Step1.で、無効になっているキーフックやマウスフラグを「保存」してしまう。
一番目のsubThreadCall()の後に二番目のが終了すると、4.では、
無効になっているものに「戻す」ことになってしまうわけだ。
393名無しさん@お腹いっぱい。:2008/11/18(火) 00:07:39 ID:bSvAqLtE0
修正来た。

1 .74 - 2008/11/18
- MainWindow.subThreadCall() のサブスレッドの中で、MainWindow.quit() を使っていたのを修正。
subThreadCall() をネストして呼び出すケースで、外側のループを抜けるつもりの quit() が、内側のループを抜けるつもりの quit() よりも先に呼ばれてしまって、(さらにSyncCallなどの合わせ技により)、メインスレッドがデッドロックしてしまう危険があった。
394名無しさん@お腹いっぱい。:2008/11/23(日) 15:51:55 ID:tlLQO17i0
Scintillaを使ってシンタクスハイライトつきの手抜きテキストビューワ作ってみた
>>383の画像ビューワにもちょっと手を入れたので、同梱してある
ttp://iroiro.zapto.org/cmn/jb2/data2/jb5313.zip
395名無しさん@お腹いっぱい。:2008/11/24(月) 00:43:08 ID:4c47A63Z0
http://sites.google.com/site/craftware/cfiler
1.75 - 2008/11/23
- ドライブ選択で存在しないディレクトリに移動しようとしたときに、ディレクトリ監視スレッドを作れずに、エラーになってしまうのを修正。
- ローカルなブックマークリストで、ブックマークの削除が出来なかったのを修正。
- ブックマークリストからのブックマーク削除で、即座にファイルリストの表示に反映するようにした。
396名無しさん@お腹いっぱい。:2008/11/24(月) 13:27:13 ID:vAoOotoJ0
394のテキストビューアとか
本家に取り込んでもらうには
どうしたらいいんだろう?

397名無しさん@お腹いっぱい。:2008/11/24(月) 15:36:12 ID:ttm4loU80
>>396
いや取り込んで貰っても全然構わないというか、有難い話なんだが

・2004年以降止まったプロジェクトであるvensterに対する俺俺パッチに依存
・Scintillaに対する俺俺パッチに依存
・extensionであることをいいことに、カスタマイズ機能なし(スクリプトの中
 直接弄ってねの世界)

という怪しい代物なので、どうなのか
正式配布物に含めるんなら、色々作者さん手直しいると思うわ
398名無しさん@お腹いっぱい。:2008/11/25(火) 22:05:31 ID:GjwnUsph0
ムービープレイヤーを作ってみた
それと、数が増えてきたんで物置きページを作って
今まで作った拡張をまとめて上げといた
ttp://www9.atpages.jp/untitled/index.html
399名無しさん@お腹いっぱい。:2008/11/30(日) 12:48:18 ID:xYhBVKRV0
連携用の拡張を作ってみた
ttp://www9.atpages.jp/untitled/pipeserver.html
他のプログラムから内骨格を操作できます
400名無しさん@お腹いっぱい。:2008/12/15(月) 18:41:31 ID:1tOm7dI/0
作者さんには是非取り込んで貰いたいなー
拡張が細かく大量に増えてしまったり現時点で派生版が出来てしまったりするとちょっとね・・・
401名無しさん@お腹いっぱい。:2008/12/15(月) 19:21:43 ID:KqxG3NOk0
>>399
これ使うとあふみたく倉から使えるようになるの?
402名無しさん@お腹いっぱい。:2008/12/15(月) 22:41:04 ID:XU2/Yk5l0
>>401
うん。

もう見てないと思うけど、>>322あたりで問題になっていた
DirectShowでのID3v2タグつきMP3への対応をしてみた。
標準でデフォで使われるFile Source + MPEG-I Stream Splitterの
かわりに、WM ASF Readerを使うと、どうやらID3タグへの対応がマシに
なるようなので。
ttp://www9.atpages.jp/untitled/songdirectshow.html
403名無しさん@お腹いっぱい。:2008/12/17(水) 08:47:06 ID:WFUUFPrj0
拡張ってアップデート毎にconfig.pyを修正していくのでしょうか?
簡単なものでいいからconfig.py configure末尾辺りに
ユーザ設定呼び出しのSTUBが欲しいです。

try:
import user_config
except ImportError:
pass
else:
user_config.congigure(window)

404名無しさん@お腹いっぱい。:2008/12/17(水) 12:53:25 ID:W0R4wBlJ0
>>403
ちょっち意味わからん。
俺は内骨格がバージョンアップしても、
config.pyをいちいち入れ替えずに同じものを使い続けてるよ。
405名無しさん@お腹いっぱい。:2008/12/17(水) 17:49:53 ID:WFUUFPrj0
>>404
readme.txtに記述見つけました。
バージョンアップでconfig.pyが更新(上書き)される事があるのだったら、
ユーザ設定とわけた方がいいのではないかなと思ったのだけど、
初回起動時にのみconfig.pyが作られるようなので、杞憂だったみたいです。

よく見ると組み込みの設定はEXE内で、
config.py自体がユーザ設定ファイルだったんですね。
406名無しさん@お腹いっぱい。:2008/12/17(水) 18:19:15 ID:WFUUFPrj0
あれ、でも _config.py が更新されているような気がする。
diff 取ってみると config.py に変更した覚えのないコードが _config.py にありました。

407名無しさん@お腹いっぱい。:2008/12/17(水) 19:43:42 ID:mToSUAzl0
そりゃ_config.pyは何回か更新されてるし。
408名無しさん@お腹いっぱい。:2008/12/17(水) 21:56:47 ID:WFUUFPrj0
>>407
ということは、_config.py の更新をconfig.pyへ反映するのはユーザの手作業?



409名無しさん@お腹いっぱい。:2008/12/17(水) 22:21:14 ID:W0R4wBlJ0
>>408
差分を反映する必要は全く無いよ
config.pyはあくまでユーザのカスタマイズ用のスクリプトで、
_config.pyはただのサンプルでしかないんだから
410名無しさん@お腹いっぱい。:2008/12/18(木) 07:22:11 ID:TnabzMpo0
>_config.pyはただのサンプル
config.py/_config.pyのファイルの運用のされ方について
もし、config.pyが標準で何もしないのならそれでもいいのだけど、
_config.py に機能追加の更新があり、尚且つそれが初回起動時のconfig.pyになるようなので

自動更新と、後のバージョンからインストールした場合で
デフォルトのconfig.pyの状態が変わってしまわないか、という懸念があります。


自動更新した人は、_config.pyの追加設定を手作業でconfig.pyに反映しないといけないのに対して、
後のバージョンからインストールした人は、標準で機能追加後の状態から開始することになります。

config.pyはユーザ・カスタマイズ設定なので、環境によって違うのは勿論当然ですが、
それでもデフォルトの、ユーザが設定を弄っていない状態での差異が出るのは、
同じバージョンなのに、標準で あれが出来た・出来ないという状態が出来るので、
ソフトを保守していく上では好ましくないんじゃないかなと思います。

インストール時のバージョン/現在のバージョンで機能/動作が異なる可能性が出てくるため
バグ報告等にはインストール時のバージョンと現在のバージョンが必要になる。-> メンテナンス・コスト増に繋がります。
↑はワースト・ケースのシナリオなので、実際には…少なくとも現時点では、それ程影響はありませんが、
運用で簡単にカバーできる事なので、検討をお願いしたいです。


具体的な対策としては、ユーザ設定とアプリの更新範囲の完全な切り分けで、二つ程方法を挙げると。
a. デフォルトのconfig.pyは、何もしない。ただ呼び出されるだけに留める。
b. config.py から別のユーザ設定を呼び出す。


ユーザとして利用してる分には、
- config.pyは更新時に上書きされないので、ユーザ側で編集しても問題ない
- _config.py更新時の差分は、必要ならconfig.pyに持ってくきて編集
で、とりあえずは問題ないようなので。返答を下さった方、ありがとうございました。
411名無しさん@お腹いっぱい。:2008/12/18(木) 17:27:50 ID:ttqEKvgp0

あふとは違うのだよ、あふとは
412名無しさん@お腹いっぱい。:2008/12/18(木) 20:00:17 ID:w6AJdTOm0
>>410
それはその通りだと思う
内骨格のコンセプトがあんな感じである以上作者さんも煮詰め切れてない部分があるんだろうね
413名無しさん@お腹いっぱい。:2008/12/18(木) 21:09:29 ID:Kl/A5AWx0
作者視点で言うと、

・いままで使ってるユーザーを、設定をいきなり変えることでびっくりさせたくない(←あたりまえ)
・でも新規ユーザーには推奨の設定で使ってほしい(←そういうときもあるよね)

ってのは、アプリケーション作ってるとよく出会う場面だよ。
自分も経験あるけど、どんな新機能がつくかなんて作者でも予測できないもんだよ
414名無しさん@お腹いっぱい。:2008/12/18(木) 21:13:35 ID:tpt2nZZ30
半月ぐらいレスついてなかったのに急にレスが増えたな
何かあったんかw
415名無しさん@お腹いっぱい。:2008/12/21(日) 09:34:20 ID:0ZGbTRvo0
今北産業

あふとの違いなんだ?
あふから乗り換える意義はあるのか?
416名無しさん@お腹いっぱい。:2008/12/21(日) 11:44:02 ID:q0gDujwF0
>>415
そんなことを聞く奴には向いてない。
おまえはあふを使い続けた方が良い。
417名無しさん@お腹いっぱい。:2008/12/21(日) 12:48:24 ID:1SC+aVB20
>>415
違いは色々あるが、Pythonというインタプリタ言語で拡張可能なのが最大の違い
というか、内骨格自身がPythonインタプリタ上で走っている
418名無しさん@お腹いっぱい。:2008/12/31(水) 18:35:23 ID:YS0yHJn90
シャレで内骨格をPython2.6で動かしてみた。
pydとか全部自分でビルドしないとダメなのであまりお勧めは出来ない。

気づいた点。

1) md5モジュールの代わりにhashlib使えと文句を言われる。
2) 俺の環境だけかもしらんが、tar.gzの閲覧に失敗する。

cfiler_filelist.pyの
lister_Tar.__call__()の中で、

if names[-1]:
    # print "name[%d]=%s" % (-1,names[-1])
    child = ArchiveNode( ( names[-1], info.size, time.localtime(info.mtime)[:6], info.isdir() and cfiler_misc.FILE_ATTRIBUTE_DIRECTORY or 0) )
    current_node.children[ names[-1] ] = child

こんな感じに変えてやると上手くいった。要は、パス名の最後の部分の
ノードを作るときに、0決め打ちだったのを、ディレクトリかどうか見るようにした。
正直なんでこれが2.5/2.6で関係あるのか分からんが、こうしないと2.6では
動かなかった。

3) これは2.6関係ないけど、cfiler_mainwindowの
leftJump()の中でself._jump()に渡してる引数足りてないですね。
419名無しさん@お腹いっぱい。:2009/01/04(日) 21:46:16 ID:r/oBpA410
あっふでーとこけた
420名無しさん@お腹いっぱい。:2009/01/04(日) 21:57:10 ID:r/oBpA410
ランタイム入れたら起動しました
421名無しさん@お腹いっぱい。:2009/01/09(金) 01:55:15 ID:60FqKlkG0
作者さんは3.0にはどれくらいに対応する予定なんだろうか。
422名無しさん@お腹いっぱい。:2009/01/14(水) 22:44:00 ID:S2z26Ts90
3.0になったらconfig.py他ユーザが書いたコードも書き直しだから
ちょっとな
423名無しさん@お腹いっぱい。:2009/01/16(金) 13:12:42 ID:9nurCy3E0
いつの間にか Python2.6対応? python26.dll が入ってた。
424名無しさん@お腹いっぱい。:2009/01/16(金) 15:29:30 ID:9nurCy3E0
> tar.gzの閲覧に失敗

2.6でtarfileに多くの変更があったらしい。
暫定的な対応でよければ config.py 内で以下のように記述。(要 python2.5のtarfile.py)
# http://svn.python.org/view/python/tags/r254/Lib/tarfile.py?rev=67917&view=log

import sys, imp
sys.modules['tarfile'] = imp.load_source('tarfile', r'c:\Python25\Lib\tarfile.py')
425名無しさん@お腹いっぱい。:2009/01/16(金) 17:14:27 ID:9nurCy3E0
>>418
追っかけてみた。

原因は、tarfileのバージョン、info.name の文字列の扱いで。
以前は、ディレクトリは foo/ と区切り文字が末尾に付いていたのが、
2.6のtarfileでは付かなくなった為。info.name をsplitした後の値が異なる。
(変数 names が 2.5 で ['foo',''] だったのが 2.6 では ['foo'] となる)

tarfileのバージョン
python2.5 - tarfile 0.8.0
python2.6 - tarfile 0.9.0 (will backport to 2.5) らしいので、将来の 2.5.x でも問題になりそう。
426名無しさん@お腹いっぱい。:2009/01/16(金) 21:58:55 ID:X2ow/YTy0
おお、乙
以前は作者さんこのスレ見てたっぽいけど
今は見てねーのかね

過疎ってるからなぁ
427名無しさん@お腹いっぱい。:2009/01/18(日) 06:55:00 ID:PWZ+MY420
>python3.0対応
ユーザ数やコード量が増えるにつれて、移植コストは増大するので、
バージョンアップには積極的になるべきだと思う。
今すぐ対応のは(周辺ライブラリの対応状況があるので)無理だろうけど。

2.6 -> 3.0 への移行は2to3ってツールがあるので、
config.pyの書き直しは*思ったほど*多くはない。(経験上)
python使いでないユーザの人達には、混乱を強いる時期が来るかもしれないが、
その辺はサポートでカバーするしかないんじゃない?
428名無しさん@お腹いっぱい。:2009/01/18(日) 07:10:44 ID:PWZ+MY420
>>233, >>362 辺りの興味ありそうな話題を振ってみる。
元コードを変更しないで、config.py内で出来る方法。簡単そうなのを。

_original_on_activate = window._onActivate.im_func
def _on_activate(self, active):
_original_on_activate(self, active)
......
window._onActivate.im_func.__code__ = _on_activate.__code__

C のコンストラクタに渡っているのは、入れ物(instancemethodオブジェクト)なので
その中身(関数オブジェクト内のコード・オブジェクト)だけ入れ替えるアプローチ。

注意点は、_on_activateが呼び出されるときのコンテキストは MainWindow._onActivateが定義されてる場所になるので、
登録する関数のスコープでのグローバル変数やclosure等、外側のスコープのオブジェクトの利用は出来ない。
※ 出来るけど、更に面倒な手続きが必要な上、MainWindowへの副作用が心配。関数内で新たにimportする方が無難。
429428:2009/01/18(日) 07:24:17 ID:PWZ+MY420
自分で注意書いて忘れてた。
この_original_on_activateの呼び出しは無理なので、
グローバル変数の利用法も兼ねて修正。

from types import FunctionType
_onActivate = window._onActivate.im_func
_original_on_activate = FunctionType(_onActivate.__code__, _onActivate.__globals__)
def _on_activate(self, active):
  _original_on_activate(self, active)
  # your code
_onActivate.__code__ = _on_activate.__code__
_onActivate.__globals__['_original_on_activate'] = _original_on_activate
430428:2009/01/18(日) 08:27:38 ID:PWZ+MY420
透過window

import ctypes
def make_transparent(hwnd, alpha):
    GWL_EXSTYLE = 0xffffffec
    WS_EX_LAYERED = 0x00080000
    LWA_ALPHA = 2
    user32 = ctypes.windll.user32
    style = user32.GetWindowLongA(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED
    user32.SetWindowLongA(hwnd, GWL_EXSTYLE, style)
    user32.SetLayeredWindowAttributes(hwnd, 0, alpha, LWA_ALPHA)
make_transparent(window.getHWND(), 200)

431428:2009/01/18(日) 21:23:08 ID:3UbrRIpC0
壁紙 ※ リサイズ未対応。planeの開放のタイミング自信なし(コメント行)

def set_wallpaper(target, filepath):
    import Image
    import cterm
    image = Image.open(filepath).convert('RGBA')
    image = cterm.Image.fromString(image.size, image.tostring())
    rect = target.getClientRect()
    plane = cterm.Plane(target, rect[:2], rect[2:], 4)
    plane.setImage(image)
    # import atexit;atexit.register(plane.destroy)

set_wallpaper(window, r'foo.jpg')
432名無しさん@お腹いっぱい。:2009/01/18(日) 23:59:23 ID:mBaXp+l80
おお透過がきたー
試してみる

ところで内骨格ってwineでもすかっと動きそうだよね?
内骨格とxyzzyがlinuxに持ち込めたら俺もう快適過ぎて死ぬかも
433名無しさん@お腹いっぱい。:2009/01/19(月) 09:59:02 ID:0sKvuX7J0
>>432
screen,vimやemacs内で普通に2画面ファイラー出来ますよ。
快適にするには自分で設定や環境を育てないといけないけど。

linuxで使える物、検索してみるとmfiler2というファイラーがあった。
こっちは逆にwinで動かす時cygwinが必要みたい。
434名無しさん@お腹いっぱい。:2009/01/24(土) 11:56:31 ID:RPcOSZuP0
>>428-429
うほ、これはいいモンキーパッチ
だが、なるべく避けて通りたい黒魔術ですねぇ

>>431
リサイズに対応するには、WM_SIZE系のフックがいるんでしょうな
435名無しさん@お腹いっぱい。:2009/01/25(日) 05:28:29 ID:1X3A6Eq20
触媒作ってみました。

import sys
from types import FunctionType, ModuleType, CodeType

def hide_closure(func):
  to_s = lambda xs:''.join(map(chr,xs))
  code = func.func_code
  names = ()
  flags = 79 # OPTIMIZED|NEWLOCALS|VARARGS|VARKEYWORDS|NOFREE
  consts = tuple([func])
  varnames = tuple(['argv', 'kwargv'])
  bytecode = [0x64,0,0, 0x7c,0,0, 0x7c,1,0, 0x8e,0,0, 0x53]
  funcname = code.co_name
  filename = code.co_filename
  return CodeType(0, 2, 1, flags, to_s(bytecode), consts,
    names, varnames, filename, funcname, 0, '\x00\x01')

class FunctionHook(object):
  def __init__(self, module_name):
    self.module = sys.modules[module_name] = ModuleType(module_name)
  def hook(self, srcfunc):
    def _hook(newfunc):
      func_name = newfunc.__name__
      oldfunc = FunctionType(srcfunc.func_code, srcfunc.func_globals)
      setattr(self.module, "prev_"+func_name, oldfunc)
      srcfunc.func_code = hide_closure(newfunc)
      return newfunc
    return _hook
436名無しさん@お腹いっぱい。:2009/01/25(日) 05:35:48 ID:1X3A6Eq20
使い方。_onSizeをフックする例。

hook = FunctionHook('hook_handler').hook
value = 10

@hook(window._onSize.im_func)
def window_on_size(self, width, height):
# import hook_handler
# hook_handler.prev_window_on_size(self, width, height)
print value
pass

コンストラクタでは、前のハンドラを保存する為に 'hook_handler' モジュールを生成します。
"prev_"+関数名で前のハンドラを保存するので、モジュール名と関数名は他と衝突しないように注意。

437名無しさん@お腹いっぱい。:2009/01/25(日) 06:11:19 ID:1X3A6Eq20
※ 注意 ※
動的コード生成でスコープの問題を解消。…出来てるはずだけど、
怪しい事してるので、何かあったら真っ先に疑ってください。
# 十分な動作検証をしていないので副作用が心配。

尚、このFunctionHookクラスでは、window._onXXX のフックしか出来ません。

>>434
メッセージのフックで出来るものは、そちらでやる方が良いですね。
デバッグの事とか考えると、自分でも避けたいと思います(苦笑
438名無しさん@お腹いっぱい。:2009/01/25(日) 09:49:25 ID:1X3A6Eq20
メッセージ・プロシージャ・フックのサンプル。
# TODO: 例外処理。フックする関数を呼んだ後の戻り値の扱い。

  import ctypes
  from ctypes import windll, c_long, c_int, cast, POINTER, WINFUNCTYPE
  from ctypes.wintypes import RECT
  user32 = windll.user32
  WNDPROC = WINFUNCTYPE(c_long, c_int, c_int, c_int, c_int)
  GWL_WNDPROC = -4
  CallWindowProc = user32.CallWindowProcA

  lparam_to_rect = lambda x: cast(x, POINTER(RECT)).contents
  rect_to_size = lambda x: ((x.right-x.left), (x.bottom-x.top))
  lparam_to_size = lambda x: rect_to_size(lparam_to_rect(x))

  class MessageHook(dict):
    def __init__(self, hwnd):
      self.hwnd = hwnd
      self.newWndProc = WNDPROC(self._wndproc)
      self.prevWndProc = user32.SetWindowLongA(self.hwnd, GWL_WNDPROC, self.newWndProc)
          
    def __call__(self, msg):
      return lambda func: (self.__setitem__(msg,func), func)[-1]
      
    def _wndproc(self, hwnd, msg, wparam, lparam):
      if msg in self:
        self[msg](hwnd, msg, wparam, lparam)
      return CallWindowProc(self.prevWndProc, hwnd, msg, wparam, lparam)
439名無しさん@お腹いっぱい。:2009/01/25(日) 09:49:46 ID:1X3A6Eq20
# 〜続き

  WM_SIZING = 0x214
  msghook = MessageHook(window.getHWND())
  
  @msghook(WM_SIZING)
  def on_sizing(hwnd, msg, wparam, lparam):
    size = lparam_to_size(lparam)
    print "SIZE", size
    return 0
440名無しさん@お腹いっぱい。:2009/01/25(日) 12:30:28 ID:RUk0x67a0
>>435-439
GJ。
戻り値に関しては、処理済かどうかをフックプロシジャに示してもらう
(ATL/WTL方式)のほうがよさげですね。
それと、ctermはunicode windowなので、W版APIを使うほうがよいのでは
ないでしょうか。

http://pastie.org/369970

ユーザのフックプロシジャは、引数としてhwnd, nmsg, ...のかわりに
Eventクラスのインスタンスを受け取ります。

元のウィンドウプロシジャに回したい場合は、Eventの
handledをFalseに、そうでなければTrueにセットするようにします。
handledがTrueの場合は、ユーザのプロシジャの戻り値をそのままウィンドウ
プロシジャの戻り値として返却します。
441名無しさん@お腹いっぱい。:2009/01/25(日) 15:17:15 ID:1X3A6Eq20
>>440

パッと見た感じでは、handledの書き換えが気になるかな。
# ATL/WTL方式の慣習には慣れ親しみが無いからかもしれない。

StopIterationの様な感覚で、こんなのはどうだろう。
例外を使って中断/継続を制御する方法。(アイデアのみの擬似コード。命名も適当なので要リファクタリング)

http://pastie.org/370021

ところで、WTLと言えば、vensterのメンテナンスってどうなるんだろう。
3.0対応を見据えると、これから拡張を作る場合 win32guiベース の方が良かったりするのかな?
442名無しさん@お腹いっぱい。:2009/01/25(日) 15:26:45 ID:RUk0x67a0
>>431を試してみたら尋常でなく描画が遅くなるのでちょっと調べてみました。

ctermでは、WM_WINDOWPOSCHANGINGを捕まえて、WINDOWPOS構造体の
flagsメンバのSWP_NOSIZEビットなどを見てサイズ変更かどうかを判断し、
サイズ変更の場合は、フル再描画を行っています。

残念ながら、自分の環境(XP SP3)では、ウィンドウの移動(サイズ変更ではない)
において、移動中(マウスドラッグ中)に飛んでくるメッセージでは、
NOZORDER, NOACTIVATE, NOOWNERZORDERのビットが立っていますが、NOSIZEビットは
立っていません。
移動完了時(マウスを放した瞬間)だけ、NOSIZEビットの立ったメッセージが
飛んできます。

結果として、不必要な再描画が大量に発生してしまっているようですね。
443名無しさん@お腹いっぱい。:2009/01/25(日) 15:28:42 ID:RUk0x67a0
>>441
ATLでは、bHandledのような参照渡し引数を用います。
が、Pythonではそのようなものが使えないので……
444名無しさん@お腹いっぱい。:2009/01/25(日) 15:31:32 ID:RUk0x67a0
>>442の確認に用いたコードです。
>>440のコードをsubclass.pyという名前で保存して、importしています。

http://pastie.org/370038
445名無しさん@お腹いっぱい。:2009/01/25(日) 16:01:34 ID:RUk0x67a0
>>441
コードを見てみましたが、
そういえば2.6になったからnamedtuple使えるんだな、と気づきましたw

vensterの中の人はctypes/comtypesの人なのですが
venster自体はここ4,5年ぐらい絶賛放置中なので……

気が向いたら3.0で動くか試そうと思っていますが、マンドクセという感じですね。
pywin32の方が堅いことは堅いでしょう。
446名無しさん@お腹いっぱい。:2009/01/25(日) 16:34:47 ID:RUk0x67a0
>>441をマージしました。
http://codepad.org/BYCMqj82

↓は、>>442の問題への暫定対策です。
↑をsubclass.pyという名前でextension以下に置いてあることを仮定します。
ウィンドウを動かすだけで全体が再描画されることは無くなります。
http://codepad.org/0CPgKIOL
447名無しさん@お腹いっぱい。:2009/01/25(日) 16:46:39 ID:RUk0x67a0
定義部分が抜けていたので張りなおし。
http://codepad.org/tAiYTk4L
448441:2009/01/25(日) 23:13:02 ID:1X3A6Eq20
うーん。自分にとってはwin32が黒魔術。詳細とか突っ込んだ所は解らないけど、
うちの環境(Vista 多分無印)ではなんとも無かった様です。対策感謝。>>442,446

>>445
ベンチ取って見ると、インスタンス生成は大体同じくらいで
属性の参照ではクラスの方が2倍程早いみたい。(namedtuple使ったのは手抜)
wndprocは頻繁に呼ばれる事になるので、使うとしたら少しでも早いクラスの方がよさそーですね。

>vensterの中の人
同じ人だったんだ。comtypesは、もう3.0対応してるのになぁ。

最近のコミットを追いかけてみると、面白そうなもの発見…もしかして、コレ
ttp://svn.python.org/view/ctypes/branches/ctypeslib-cpp/ (Branch for ctypes C++ bindings)
で、ATL/WTLが使えるようになったりしないかな。(密かに期待
449名無しさん@お腹いっぱい。:2009/01/25(日) 23:25:22 ID:RUk0x67a0
>>448
えーと、説明不足だったかもしれませんので、念のため。
>>442の問題は、>>431のコードの問題というわけではありません。
背景画像の再描画はそれなりに重いので、不要な再描画が発生することによる負担が
顕在化しやすくなるだけです。

多分XPのGDIまわりのバグか何かでは?と思いますが、
自分も詳しいわけじゃないので、何とも……

vensterは、中の人を考えれば、大本命なんですけどねぇ。
まあ、忙しいんだろうな、とは思います。
450名無しさん@お腹いっぱい。:2009/01/28(水) 00:01:12 ID:WwUbQ9BL0
>>449
ユーザ拡張側で出来る対策としては、
リサイズ終了時のみを捕まえて、画像を描画するようにした方がいいのだろうけど、
コード量が増えそうなので敬遠して…

壁紙のリサイズ対応(最大化には未対応)
追加する場所は431のset_wrappper関数の末尾。
差分のみなので、>>431,>>438,>>439,>>440,>>444,>>446,>>447を追従して
って長いな。最大化対応した頃にでもまとめます。(TODO)

@msg_hook(WM_SIZING)
def on_sizing(hwnd, msg, wparam, lparam):
  plane.setSize(target.getClientRect()[2:4])

# 注意点:set_wallpaperを2回以上呼ぶ場合、前のウィンドウに対してのリサイズ対応が無効になる。
451名無しさん@お腹いっぱい。:2009/01/28(水) 16:47:42 ID:j+/2p2BZ0
>>450
好みの問題ですが、↓のようにすると等倍表示になりますね。
十分大きい壁紙を指定すれば、ウィンドウリサイズへの対応が不要です。

def set_wallpaper(target, filepath):
    import Image
    import cterm
    image = Image.open(filepath).convert('RGBA')
    ctimage = cterm.Image.fromString(image.size, image.tostring())
    plane = cterm.Plane(target, (0,0), image.size, 4)
    plane.setImage(ctimage)

それと、これもXP onlyの話かもしれませんが、>>446の対応をしても、
カーソル移動などがかなりモタつきます。

ctermcore.cppのWindow::_drawBitmapLayer()で
SetStretchBltMode( hDC, STRETCH_HALFTONE );
をコメントアウトしてしまえば、描画速度は大幅に改善されます。
言うまでも無くC++のコード変更とctermcore.pydのリビルドを必要としますので
推奨できない方法ですが。

内骨格は、dirty rect管理+クリッピングリージョンを用いて再描画を
最小に抑える作りになっているようです。
が、上記のHALFTONEが指定されいると、クリッピングされていようが
StretchBlt()はまずビットマップ全体の再レンダリング計算を行ってから
ブリットしてるんじゃないのかなあ……というぐらいに負荷のかかりかたが
大きいです。
452450:2009/01/29(木) 00:45:14 ID:GNR3Z4Dp0
>>451
デバイスの描画速度に依存する問題だとしたら、環境によってはまだ問題が残ってそうですね。

全然試してないので、ソース見ての推測ですが、
Plane::SetImage -> Window::appendDirtyRectと追っていくと、
Window::_onTimerでdirty_rectの描画が発生してるのが原因だと思われます。

cterm_mainwindow.WindowでPlane.setImageを使うこと自体が問題になるみたいです。
別のアプローチでの壁紙を考えよう。

ところで、この問題ってImageViewerの方では起こってないのでしょうか?
453名無しさん@お腹いっぱい。:2009/01/29(木) 01:22:11 ID:aW4rPG6c0
>>452
えーと、dirty rectが再描画されることは必要ですから、それ自体が
問題なのではありません。

内骨格が描画領域を必要最低限に限定している(=クリッピングしている)にも
関わらず、私の環境では
背景ビットマップをHALFTONE指定でのStretchBlt()で描画すると、
背景画像なしの場合に比べて、目に見えて描画速度が落ちる、ということです。
カーソルを動かした時に、ファイルのリストのスクロールが発生するのであれば
ペイン全体が再描画されるので仕方が無いのですが、スクロールしない場合
(カーソル位置を示す横線だけが動く場合)も、相当遅くなります。

まあ、HALFTONEはパフォーマンスを犠牲にして拡大縮小を綺麗にするという
オプションですので、ある程度は当たり前の話なんですが。
速度の低下が許容範囲かどうかは、OS/CPU/グラフィックボード等に依存するところが
大でしょうね。
454名無しさん@お腹いっぱい。:2009/01/29(木) 01:36:46 ID:aW4rPG6c0
ImageViewerに関しては、
・デフォでは等倍表示なので拡大縮小は発生しない
・フルスクリーンモードではロード時に画面サイズに合わせた縮小を
 必要に応じて行ってしまう

ので、リアルタイムでの拡大縮小は行いません。再描画時には
単なるblitが実行されます。
縮小アルゴリズムはBILINEARですが、これが重い人は、スクリプトを書き換えて
NEARESTに変更すると、フルスクリーンモードでの大きい画像のロードが軽くなります
(そのかわり、画面はやや荒くなります)。

まあ、私の環境はPentium M1.7GHz程度の、最新のデスクトップPCに比べると
随分貧弱なノートPCですが……。
455452:2009/01/30(金) 04:21:58 ID:0PLOaP9w0
>>453-454 詳細解説 Thanks。突っ込んだ所までは理解していないので、
原因と言っていいかどうかは解りませんが、問題点は把握できました。

Plane.setImageを避けて別の方法で画像を描画すればいいんだろうけど、
描画イベントやバッファの管理を、ユーザ拡張の範囲内で自分で行うのも面倒なので、
壁紙の描画問題の改善については、簡単に出来そうな方法を思いつくまで中断しようと思います。
456名無しさん@お腹いっぱい。:2009/01/30(金) 04:22:19 ID:0PLOaP9w0
小ネタで、左右ペインの入替。(Ctrl-X)
コメント行は、ペインのサイズも変更する場合。

def command_SwapPane():
  win = window
  win.left_pane, win.right_pane = win.right_pane, win.left_pane
  #win.left_window_width = win.window_normal_width - win.left_window_width
  #win.skinUpdate()
  win.paint()
window.keymap[KeyEvent(ord('X'), MODKEY_CTRL)] = command_SwapPane
457名無しさん@お腹いっぱい。:2009/01/31(土) 08:39:02 ID:EtdStOQU0
keymapを設定ファイルで管理
hg clone http://freehg.org/u/nix/cfiler_user_keymap/

---- 利用方法 sample

# configure.py
import user_map
register_command = user_map.set_command_decorator(window)
@register_command
def command_ForceQuit():
  import sys;sys.exit()

user_map.install(window, u'./extension/user.keymap')

# ./extension/user.keymap
ForceQuit = Ctrl+Alt+Q

458457:2009/01/31(土) 08:46:31 ID:EtdStOQU0
モジュール名typo: s/user_map/user_keymap/
459名無しさん@お腹いっぱい。:2009/01/31(土) 15:02:04 ID:Byartw170
nice hack.
落とさせて貰いました。
460名無しさん@お腹いっぱい。:2009/01/31(土) 18:30:08 ID:EtdStOQU0
hg clone -r 0.0.2 http://freehg.org/u/nix/cfiler_user_keymap/

READMEに、現在登録済みのコマンド=キーの一覧出力のサンプル追加。

command_*** が docstring等のメタデータに対応したら、
ユーザが登録してるキーでのリファレンス生成が出来るかも。
461名無しさん@お腹いっぱい。:2009/02/01(日) 09:50:15 ID:HC4JZAoL0
ペインの先頭・最後尾にカーソル移動したいってキー一発でできない?
462名無しさん@お腹いっぱい。:2009/02/01(日) 09:59:40 ID:uBTFTPVC0
>>461
http://www9.atpages.jp/untitled/tips.html#t02
こんな例で良ければ
最後の二行がキー割り当てなので、そこは好みに合わせて
463名無しさん@お腹いっぱい。:2009/02/01(日) 16:01:54 ID:FpsjefEg0
>>462
どうもありがとう
小技ページいいね
464名無しさん@お腹いっぱい。:2009/02/06(金) 08:41:18 ID:+RLDH+dA0
# ディレクトリを隣のPaneで開く
@bind_key('Shift + Return')
def command_ReturnOnInactivePane():
  import os
  pane = window.activePane()
  item = pane.file_list.getItem(pane.cursor)
  if item.isdir():
    window.inactiveJump(os.path.join(item.location, item.name))
    

# 再起動
@bind_key('Ctrl + Alt + F5')
def command_Reboot():
  import os
  import sys
  import cfiler_misc
  from cfiler_msgbox import popMessageBox, MSGBOX_TYPE_YESNO, RESULT_YES
  caption,message = u'確認',u'再起動します'
  result = popMessageBox(window, MSGBOX_TYPE_YESNO, caption, message)
  if result == RESULT_YES:
    cfiler_path = os.path.abspath(sys.argv[0])
    window.saveState()
    cfiler_misc.shellExecute(None,None,cfiler_path,u"",u"")
    window.quit()
    sys.exit(0)

465名無しさん@お腹いっぱい。:2009/02/06(金) 08:45:36 ID:+RLDH+dA0
↑@bind_keyデコレータはuser_keymap.py利用です。キー割り当ての所は適当に。
466名無しさん@お腹いっぱい。:2009/02/06(金) 08:57:12 ID:+RLDH+dA0
日本語が何か変な気がするので訂正。
↑@bind_keyデコレータは>457のuser_keymap.pyを利用したキー割り当てです。
467名無しさん@お腹いっぱい。:2009/02/06(金) 11:12:37 ID:+RLDH+dA0
diff for >464

- pane = window.activePane()
- item = pane.file_list.getItem(pane.cursor)
+ item = window.activeCursorItem()
468名無しさん@お腹いっぱい。:2009/02/06(金) 16:43:07 ID:Mr5x3omw0
キーのアサインは「あふ互換モード」以外に自由にカスタマイズできないでしょうか?
469cap005-096.kcn.ne.jp cap005-096.kcn.ne.jp :2009/02/06(金) 23:41:21 ID:+RLDH+dA0
>468
configで出来ますよ。
470cap005-096.kcn.ne.jp :2009/02/06(金) 23:48:23 ID:+RLDH+dA0
ソースファイルから抽出したコマンドの一覧です。
http://freehg.org/u/nix/cfiler_user_keymap/file/192f09292a62/commands.yaml

command_*** ってメソッドをconfig.pyのconfigure関数内に、以下のように記述します。
window.keymap[key] = window.command_***

↑レポジトリ内のuser_keymap.pyでは
デコレータや設定ファイルによる登録方法を提供しています。
※ ChrEvent, アイテム選択時の指定は未対応

471名無しさん@お腹いっぱい。:2009/02/07(土) 23:37:40 ID:XFmREf9P0
質問なのですが

多重起動を抑止して, 起動しているcfilerがあったらアクティブにする
ようなことはできませんか?
あと, コマンドラインでディレクトリを渡してアクティブにするには
どうすればいいですか?

この二つができたらdynaから乗り換えを考えています.
472名無しさん@お腹いっぱい。:2009/02/08(日) 00:33:28 ID:xgbpZA9E0
>>471
内骨格自体には今のところそういう機能は無いんだが、

http://www9.atpages.jp/untitled/pipeserver.html
で一応できるよ
そこの拡張を入れて、config.pyのconfigure()関数に設定を追加する
さらに、>>471のような機能を持つ外部の連携ツールがページの下のほうに
あるんで、cfiler.exeを直接実行するかわりにそっちを実行すればおk
473名無しさん@お腹いっぱい。:2009/02/08(日) 05:46:28 ID:8rpEip/k0
# ログのクリア
def command_ClearLogPane():
  window.log_pane.log.log = [u'']
  window.paint()
window.launcher.command_list.append((u'clear', command_ClearLogPane))
474471:2009/02/08(日) 12:54:39 ID:+xfdrR+Q0
>>472
cfiler_launcher試してみました.
引数がふたつとれて左右同時にディレクトリ変更できるとベスト
なのですが, cppソースもあるので自力でなんとかできそうです.
ありがとうございました.
475471:2009/02/08(日) 12:58:04 ID:+xfdrR+Q0
extensionディレクトリのモジュールを先に読み込んでくれる
cfilerx.exeが以前どこかにあったともうのですが, もうないですかね?

CraftLaunchのソースでは多重起動防止ロジックが組み込まれているみたい
なので, そちらからの対応も考えてみたいので, cfilerx あると便利かと
考えているのですが...
476名無しさん@お腹いっぱい。:2009/02/08(日) 13:26:02 ID:xgbpZA9E0
>>474
えーと、すみません。
今の版ではパイプに書き込む時にlocaleをimbue()し忘れていたので、日本語入りの
ディレクトリを表示させようとするとエラーになると思います。
修正版を上げておきました。

左右のディレクトリを変更したい場合は、window.inactiveJump()のかわりに
window.leftJump()とwindow.rightJump()で良いはずなのですが、
今のバージョンのwindow.leftJump()は>>418にあるとおり
ちょっとバグっているので、
直接window._jump()を呼ぶとよいでしょう。cfiler_mainwindow.pyの中を見て
参考にしてください。
477332:2009/02/08(日) 13:43:34 ID:teU/EffN0
>>475

>>332 のは既に消えてるのか、だとするともう無い。まぁ、あったとしてもPythonのバージョンが違うからだめだと思う。

cfilerx.exeのソースなら↓

boot.py: http://codepad.org/cc8SYCfK
setup.py: http://codepad.org/9fT9Sd30

python setup.py py2exeでcfilerx.exeが出来る。
こいつはexeと同じ場所にあるcfilerx.zipをライブラリパスに追加してcfilerx.pyを実行する。

cfilerx.pyはcfilerのソースのcfiler.pyをコピーして来ればよい。
cfilerx.zipは元々のcfiler.exeを名前を変えてやるか
cfilerx.pyの中でcfiler.exeをライブラリパスに追加してやればよい。
478471:2009/02/08(日) 18:29:22 ID:+xfdrR+Q0
>>476
cfiler_launcherの新版いただきました. 試してみます.

>>477
cfilerx.exeのソースいただきました. こちらも試してみます.


5年以上使ってきたdynaのカスタマイズをほぼ内骨格に移行できる
めどが立ちました. みなさんありがとう.
479名無しさん@お腹いっぱい。:2009/02/09(月) 14:55:44 ID:t9nahcLJ0
Pythonスクリプトの実行。(要インストールPython)
Pythonのバージョンを選択して実行。でも、引数は取らない。

hg clone -r 0.0.1 http://freehg.org/u/nix/cfiler_runpy/

cfiler_runpy.setup(window) で、windowのクラスに以下のコマンドを追加。
* command_RunPy ... cfiler_misc.shellExecuteで実行。
* command_RunPyWithWindow ... window.subProcessCallで実行。出力/エラーは内骨格のログPaneへ。
キー割当はその後適当に。※注意点※ subProcessCallを使う方では、ServerやGUIアプリの実行は出来ない。

480名無しさん@お腹いっぱい。:2009/02/09(月) 15:27:28 ID:t9nahcLJ0
>>476
pipeserverとxconsole使わせてもらってます。

leftJumpは何処からも使われていないようなので、拡張向けのAPIなのかな。
うちでは、とりあえずはこんなので凌いでます。

from cfiler_mainwindow import PAINT_LEFT
def leftJump(self, path):
  self._jump(self.left_pane, path)
  self.paint(PAINT_LEFT)
window.__class__.leftJump = leftJump

# こんなとこでついでに言うのも恐縮ですが typo報告 tipsのメニューのとこ s/popupMenu/popMenu
481名無しさん@お腹いっぱい。:2009/02/09(月) 17:18:21 ID:UVIwRVu00
>>480
ありゃ。指摘ありがとうございます。
記述を修正しときました。
482名無しさん@お腹いっぱい。:2009/02/16(月) 11:24:42 ID:9zPQuLVb0
http://sites.google.com/site/craftware/cfiler
1.79 - 2009/02/16
- 子ウインドウに貼る壁紙の一部が、壁紙の範囲の外側を参照してしまって、画像が壊れているように見えてしまうケースがあったのを修正。
- 音楽プレイヤのプレイリストに含まれるファイルを削除すると、内骨格が起動できなくなるケースがあったのを修正。
483名無しさん@お腹いっぱい。:2009/02/19(木) 20:35:23 ID:M1g5Pk9q0
ちと質問。
484名無しさん@お腹いっぱい。:2009/02/19(木) 20:40:14 ID:M1g5Pk9q0
>>483 はミス。途中で送信しちまった。

この内骨格で気になってる部分が二つあるんだ。

1.ファイルサイズの単位が勝手に変わるんだけど、それを固定できるのか。
2.起動すると、毎回隠しファイルの表示がOFFになるっぽいけど、ONで固定できるのか。

これって、スクリプトを書き換えれば対応出来たりするんかな。
485名無しさん@お腹いっぱい。:2009/02/19(木) 21:19:20 ID:MXrF5N8T0
>>484
1.は常にKB単位とかで表示したいってことかな

cfiler_filelist.pyのitemformat_Name_Ext_Size_YYMMDD_HHMMSS()
のような関数が表示するときのフォーマッティングをやっているので、
それを真似してconfig.pyに適当な関数(myformatterとする)を作って
window.setItemFormat(myformatter)
のようにすれば出来るはず
逆に言うと、自分で関数を書かないとできない

2.は、なんかiniファイルに保存してないっぽいね
config.pyに
window.showHiddenFile(True)
とか書いておけばいいよ
486484:2009/02/20(金) 00:21:54 ID:PWKoirGd0
>>485
サンクス!
487484:2009/02/20(金) 03:32:46 ID:PWKoirGd0
>>485
おかげさまで、なんとかなりました。

このスクリプトは初めていじるので苦労しましたが、
なんとか思った通りに表示できました。
下の画像は実際にバイト単位でサイズを表示した内骨格のSS。
http://al-eiru.hp.infoseek.co.jp/naikokkaku.png

桁ごとにカンマ入れるのが面倒でした。
こういうのを一発でやってくれる関数(API?)があったら、ちょっと涙目w
でも、良い勉強になったと思うことにします。
488名無しさん@お腹いっぱい。:2009/02/20(金) 14:59:52 ID:FcEAjNDD0
>>487

>>> import locale
>>> locale.setlocale(locale.LC_ALL, '')
'Japanese_Japan.932'
>>> locale.format_string("%d", 10000, True)
'10,000'
489484:2009/02/20(金) 16:26:39 ID:PWKoirGd0
>>488
サンクス!
やっつけで作った関数が消せて、スッキリしました。
Python使えば、かなり色々といじれるんですね。
いろいろと勉強になりました。
490名無しさん@お腹いっぱい。:2009/02/26(木) 01:11:38 ID:0R9eONPq0
ALTを使用したショートカットキーを押すとパンって警告音がなるのを
消したいんだけど、やり方がわからない。

pythonでできるのだろうか。
491名無しさん@お腹いっぱい。:2009/02/27(金) 18:17:29 ID:p3KWN1gs0
内骨格に限らず無効にしたければ、デバイスマネージャでBeepを無効にするのが簡単みたい。
内骨格内だけで無効にしたいなら、何らかの方法でキー入力をフックする必要があると思う、
python/config.py内で…となると、とりあえず思いついたのは、
すべてのAlt付きショートカットに、何もしない関数を割り当てる方法。
(※ 除く Alt+F, Alt+Space, Alt+Tab 等の標準のショートカット)
492490:2009/03/01(日) 12:17:07 ID:ABXltIoX0
>>491
レスサンクス。

説明不足でスマン。
ALT+○に関数割り当てて実際に関数が割り当たってて想定どおりの動作を
するんだけど、その動作と一緒に警告音がなるのを消したいってことなんだよね。

cfiler_mainwindowの_OnKeyDownでreturn True必ずするとか
いろいろ試してみたけどわかんない。
493名無しさん@お腹いっぱい。:2009/04/08(水) 22:28:55 ID:PVrh0dQuO
lzhファイル内の仮想ディレクトリからファイルのコピーを行おうとした場合、
タイムスタンプの比較が正しく機能してない様子です。
# 「新しければ上書き」してくれない

zip、tgz形式で確認したところ正しく動作したので、これはアーカイバ側の問題なのでしょうか?
ご存知の方おられましたらご教授ください。

内骨格 Ver.1.79
XP Pro. SP3
494名無しさん@お腹いっぱい。:2009/04/10(金) 15:28:03 ID:VBdtzHSQ0
最近内骨格使い始めて、とりあえず使いやすいようにキーマップをしてみたんだけど、
/ や : がマップできない。
VK_A みたいにどこかに書いてありますか?
495494:2009/04/10(金) 16:02:29 ID:VBdtzHSQ0
すみません。
ググったら、解決しました。
496名無しさん@お腹いっぱい。:2009/04/11(土) 14:20:56 ID:g7sjyC1b0
インクリメンタルサーチでは、CTRL-H で前の文字を削除できるけど、リネームやコマンドラインではできません。
これってどこか変更すれば実現可能ですか?
他にも、CTRL-M で決定 (Enter と同じ動作) にしたりしたいんですが、できますか?
497名無しさん@お腹いっぱい。:2009/04/14(火) 10:31:48 ID:sa012nT50
Portable Python登場、移動可能な開発スタック 2009/04/06 後藤大地

実験的な位置づけが強いが、Pythonプロジェクトから新しい開発環境スタック
Portable Python 1.1が公開された。Portable Pythonはポータブルデバイスで
持ち運びができるようにまとめられたPython開発スタック。
Windows XP、2000、98がサポートされ、Python 2.5.4、Python 2.6.1、Python
3.0.1のバージョンがサポートされている。スタックに含まれている成果物は次のとおり。

* Python 2.5.4版スタック(Django-1.0.2-final、IPython-0.9.1、Matplotlib-0.98.5.2、
Numpy- 1.2.1、PIL-1.1.6、Py2exe-0.6.9、PyGame-1.8.1、PyReadline-1.5、
PyScripter v1.9.9.6、PyWin32-212、Rpyc-2.60、Scipy-0.7.0b1、SPE-0.8.4.c、
VPython-3.2.11、 wxPython-unicode-2.8.9.1)
* Python 2.6.1版スタック(Django-1.0.2-final、IPython-0.9.1、PIL-1.1.6、Py2exe-0.6.9、
PyGame-1.8.1、PyReadline-1.5、PyScripter v1.9.9.6、PyWin32-212、Rpyc-2.60、
SPE-0.8.4.c、wxPython-unicode-2.8.9.1)
* Python 3.0.1版スタック(PyScripter v1.9.9.6、Rpyc-2.60)
498名無しさん@お腹いっぱい。:2009/04/14(火) 10:33:26 ID:sa012nT50
Portable Python登場、移動可能な開発スタック 2009/04/06 後藤大地

実験的な位置づけが強いが、Pythonプロジェクトから新しい開発環境スタック
Portable Python 1.1が公開された。Portable Pythonはポータブルデバイスで
持ち運びができるようにまとめられたPython開発スタック。
Windows XP、2000、98がサポートされ、Python 2.5.4、Python 2.6.1、Python
3.0.1のバージョンがサポートされている。スタックに含まれている成果物は次のとおり。
* Python 2.5.4版スタック(Django-1.0.2-final、IPython-0.9.1、Matplotlib-0.98.5.2、Numpy- 1.2.1、PIL-1.1.6、Py2exe-0.6.9、PyGame-1.8.1、PyReadline-1.5、
PyScripter v1.9.9.6、PyWin32-212、Rpyc-2.60、Scipy-0.7.0b1、SPE-0.8.4.c、VPython-3.2.11、 wxPython-unicode-2.8.9.1)
* Python 2.6.1版スタック(Django-1.0.2-final、IPython-0.9.1、PIL-1.1.6、Py2exe-0.6.9、 PyGame-1.8.1、PyReadline-1.5、PyScripter v1.9.9.6、PyWin32-212、Rpyc-2.60、SPE-0.8.4.c、wxPython-unicode-2.8.9.1)
* Python 3.0.1版スタック(PyScripter v1.9.9.6、Rpyc-2.60)
499名無しさん@お腹いっぱい。:2009/04/14(火) 10:55:00 ID:sa012nT50
Portable Python登場、移動可能な開発スタック 2009/04/06 後藤大地

実験的な位置づけが強いが、Pythonプロジェクトから新しい開発環境スタックPortable Python 1.1が公開された。
Portable Pythonはポータブルデバイスで持ち運びができるようにまとめられたPython開発スタック。
Windows XP、2000、98がサポートされ、Python 2.5.4、Python 2.6.1、Python3.0.1のバージョンがサポートされている。
スタックに含まれている成果物は次のとおり。
* Python 2.5.4版スタック(Django-1.0.2-final、IPython-0.9.1、Matplotlib-0.98.5.2、Numpy- 1.2.1、PIL-1.1.6、Py2exe-0.6.9、PyGame-1.8.1、PyReadline-1.5、
PyScripter v1.9.9.6、PyWin32-212、Rpyc-2.60、Scipy-0.7.0b1、SPE-0.8.4.c、VPython-3.2.11、 wxPython-unicode-2.8.9.1)
* Python 2.6.1版スタック(Django-1.0.2-final、IPython-0.9.1、PIL-1.1.6、Py2exe-0.6.9、 PyGame-1.8.1、PyReadline-1.5、PyScripter v1.9.9.6、PyWin32-212、Rpyc-2.60、SPE-0.8.4.c、wxPython-unicode-2.8.9.1)
* Python 3.0.1版スタック(PyScripter v1.9.9.6、Rpyc-2.60)
500名無しさん@お腹いっぱい。:2009/04/18(土) 18:21:20 ID:JqkwIg5j0
内骨格で.lnkのリンク先を開くにはどうしたらいいの?
501名無しさん@お腹いっぱい。:2009/04/19(日) 00:01:09 ID:YyJT2uUj0
自力でEnterをhookして、win32使ってやってたが
今見直したらちゃんと動かないやwいつの間に・・・
502名無しさん@お腹いっぱい。:2009/04/19(日) 00:05:16 ID:FsOIckkD0
cfiler_mainwindow.pyに下記がある。
if 0: # TEST

if ext in (".lnk",".pif"):
linkinfo = cfiler_native.getShellLinkInfo(item.getFullpath())
print linkinfo

elif ext in (".url",):
urlinfo = cfiler_native.getInternetShortcutInfo(item.getFullpath())
print urlinfo
503500:2009/04/20(月) 20:39:45 ID:1lQ6YCRy0
>>501 >>502

とりあえずEnterのフックで拡張子を判別してできそうですね。

本体を直接改造できればいいんですが、ビルドがうまくできなかったんですよね・・・

誰かビルドの環境と手順を解説してくれないかなぁ。
504名無しさん@お腹いっぱい。:2009/04/21(火) 04:53:30 ID:5xiM18n70
ジャンプリストをテンキーに割り当てようと思ったんだが、
これだとどの数字を押しても最後のフォルダに飛んでしまう
lambdaの部分が駄目だと思うんだけど、どう書けばいい?

window.keymap[ KeyEvent(ord(str(0))+48, 0) ] = lambda: window.activeJump(window.jump_list[3][1]) # OK
for index, item in enumerate(window.jump_list):
  if index < 9:
    window.keymap[ KeyEvent(ord(str(index+1))+48, 0) ] = lambda: window.activeJump(item[1]) # NG
    print str(index+1), ord(str(index+1))+48, item[1] # 確認
505名無しさん@お腹いっぱい。:2009/04/28(火) 13:20:59 ID:qNtwJcua0
>>504
繰り返しで廻す変数(index,item)をクロージャ内で使った時の落とし穴。
lambda内の変数itemは遅延評価される為、常に最後の値が入る事になる。
forの外で関数定義する。lambda使うなら下の様なのをforの事前に準備。

jump = lambda x: lambda: window.activeJump(x)
506 ◆Nana...Z5Q :2009/05/03(日) 22:16:55 ID:BtTfz9LK0 BE:1253988566-2BP(200)
あふみたいな擬似D&Dはないでつか?
507 ◆Nana...Z5Q :2009/05/07(木) 10:45:35 ID:HaZ7qVp00 BE:835992746-2BP(200)
あふみたいな画像のサムネ表示ってないでつか?
508名無しさん@お腹いっぱい。:2009/05/09(土) 13:54:46 ID:i+CnQzeS0
version 1.81にしてからGmailDriveにアクセス出来なくなったんだけどさ。
自分のところだけかな・・・。
509名無しさん@お腹いっぱい。:2009/05/09(土) 13:58:40 ID:i+CnQzeS0
わりぃsage忘れた。
510名無しさん@お腹いっぱい。:2009/05/09(土) 19:13:22 ID:DkuGc0/n0
>>508
GmailDriveエクスプローラではちゃんと見れてる?
みれないのは内骨格だけ?
511名無しさん@お腹いっぱい。:2009/05/09(土) 22:07:24 ID:i+CnQzeS0
>>510
GmailDriveエクスプローラからはちゃんと見られますね。
512名無しさん@お腹いっぱい。:2009/05/09(土) 22:10:40 ID:i+CnQzeS0
>>510
すみません>>511は途中で送ってしまいました。

それで、GmailDriveエクスプローラからはちゃんと見られます。
ファイルを持ってきたりすることも出来ました。
でも、内骨格で閲覧しようとすると、Gmailアクセス中のダイアログが出た後に、
以下のようなエラーが出てアクセスできませんでした。。

移動失敗 : \
list.remove(x): x not in list
513名無しさん@お腹いっぱい。:2009/05/10(日) 03:39:58 ID:LbunPN7Q0
>>512
更に調査結果追加。
新しく来た1.82でも同じエラーがでているので、直っておりません。
試しに、1.82を新しくダウンロードしてきて、
デスクトップに展開して起動させても無理でした。
1.80をダウンロードしてきて、同じくデスクトップで展開した場合は問題なく使えました。
よって、自分の環境ではバージョンを1.80まで落とさないと
GmailDrive使えなくなったようです。
514名無しさん@お腹いっぱい。:2009/05/10(日) 22:43:36 ID:LbunPN7Q0
>>513
GmailDriveの件ですが、新しく来たバージョン1.83にて対応されたみたいです。

1 .83 - 2009/05/10
- 1.81 から、GmailDrive と FTP が使えなくなっていたのを修正
- CheckSimilar コマンドの結果に、同じファイルが複数リストアップされてしまうのを修正
- ファイルの比較処理をキャンセルできるようにした。

早速チェックしたら、問題なくファイルのやりとりが出来ました。
ここを見ている方達にとってはわかりきっている事かもしれませんが、
質問をした者として、一応報告させていただきます。
また、レスをくれた方もありがとうございました。
515 ◆Nana...Z5Q :2009/05/12(火) 12:37:21 ID:74E5IHxDO
Gmail Driveなんだけど、ドライブ内でのフォルダ間移動とか、重複ファイルの確認ダイアログとかがいちいち全部出るおよ(ノД`)

確認ダイアログとか出ないようにはどうやったらできるぽ?

スレチでごめんち(;><)
516名無しさん@お腹いっぱい。:2009/05/17(日) 23:55:08 ID:xzQDQQGl0
ファイル名のインクリメンタルサーチがファイル名の部分一致もしてくれると使いやすいんだけどなー
下部ペーンで内骨格のpythonのインタプリタが動いたらsugeeeんだけど
タブ切り替えとかで
517名無しさん@お腹いっぱい。:2009/06/10(水) 10:51:33 ID:h4Uj2HaP0
昨日から使い始めた。

けど、なんで内骨格って名前なの?
518名無しさん@お腹いっぱい。:2009/06/10(水) 12:24:08 ID:azy9FtcJ0
519名無しさん@お腹いっぱい。:2009/06/30(火) 00:06:30 ID:dS1HEMXU0
カーソルが差してるファイル・ディレクトリのフルパスをクリップボードに取りたいんだけど、pythonからクリップボードっていじれるのかな・・・
ていうか、誰か、書いてくださいお願いします。
520名無しさん@お腹いっぱい。:2009/06/30(火) 01:31:21 ID:KJbifOWM0
>>519
書いてみた。

# Ctrl+C でフルパスを取得してクリップボードへコピー
def copy_fullpath():
pane = window.activePane()
item = pane.file_list.getItem(pane.cursor)
path = item.getFullpath()
cfiler_misc.setClipboardText(path)
print path + u"をクリップボードにコピーしました"

window.keymap[ KeyEvent(ord('C'),MODKEY_CTRL) ] = copy_fullpath

configure直下に書くとCtrl+Cでフルパスをコピーする。
521名無しさん@お腹いっぱい。:2009/06/30(火) 19:47:09 ID:m2g3sIMZ0
>>520
バッチリでした!キーアサインとメッセージまで想像してたのと一緒
どうもありがとう
522名無しさん@お腹いっぱい。:2009/07/04(土) 19:08:08 ID:QnIAcriS0
だいなみたいに、
カーソルがある位置のファイル名を自動的にステータスバー or
タイトルバーに表示させられないでしょうか?

目的は、ファイル名が...で省略されているときに、
カーソルをあわせるだけで完全なファイル名を知ることです。

returnを押して内容を表示させればファイル名がタイトルバーに出る
ので、それをカーソル移動させた時点で見せる方法があれば
よいのですが…
523 ◆Nana...Z5Q :2009/07/28(火) 22:41:12 ID:xnBqFNdmO
>>522
ボクもステータスバーにファイル名表示は欲しいと思うお!!(^ω^)

臨時対策として『Shift + -』押してまつ(ノД`)
524名無しさん@お腹いっぱい。:2009/07/29(水) 15:06:17 ID:cLW0+P0u0
プログラミング初心者だけど一応できた。
カーソルキーを押したときにタイトルバーを変更するようにしてあるので
起動した直後は表示されてません
コピペするときは全角スペースを半角に直してください。
もっとうまく書ける方がいれば直してください

def display_name_on_titlebar():
  pane = window.activePane()
  window.setTitle(pane.file_list.items[pane.cursor].name)

def push_downkey():
  window.command_CursorDown()
  display_name_on_titlebar()

def push_upkey():
  window.command_CursorUp()
  display_name_on_titlebar()

def push_leftkey():
  window.command_FocusLeftOrGotoParentDir()
  display_name_on_titlebar()

def push_rightkey():
  window.command_FocusRightOrGotoParentDir()
  display_name_on_titlebar()
 
window.keymap[VK_UP] = push_upkey
window.keymap[VK_DOWN] = push_downkey
window.keymap[VK_LEFT] = push_leftkey
window.keymap[VK_RIGHT] = push_rightkey
525名無しさん@お腹いっぱい。:2009/07/30(木) 18:01:46 ID:18UBJbVu0
>>524
ありがとう!! いただきます
526 ◆Nana...Z5Q :2009/08/04(火) 16:47:56 ID:IRo0GnIkO
>>524
Σ( ゜Д゜) スッ、スゲー!!

できたらアプリケーション名はそのまま左端に残すようにしてほしいお(^ω^)
お願いしますぽ
527名無しさん@お腹いっぱい。:2009/08/05(水) 05:45:22 ID:ZOIrwz/g0
display_name_on_titlebar関数を書き換える

def display_name_on_titlebar():
  pane = window.activePane()
  filename = pane.file_list.items[pane.cursor].name
  appname = cfiler_resource.cfiler_appname
  title = " - ".join([filename, appname])
  window.setTitle(title)

書式は5行目をいじれば変えられる
title = " ".join([appname, filename])
だと
アプリケーション名 ファイル名
528 ◆Nana...Z5Q :2009/08/05(水) 19:38:02 ID:YteaO0Ic0 BE:1950648678-2BP(200)
>>527
すごいですっ!!
ありがとうございまつ(´;ω;`)

無事にappname - filenameと表示できますた(・∀・)
もっと勉強しますお(^ω^)
529 ◆Nana...Z5Q :2009/08/08(土) 22:48:50 ID:8Lv8GhRJO
←↓→↑だけだと、Enterでディレクトリを潜った時とBackspaceで一階層ディレクトリ遡った時にはタイトルバーが変更されないことをハケーン
530名無しさん@お腹いっぱい。:2009/08/08(土) 22:52:02 ID:DZuuZ23F0
そんなのソース見れば一目瞭然なんだから
書き加えればいいじゃないか・・・
531名無しさん@お腹いっぱい。:2009/08/09(日) 04:43:11 ID:OSUAVjMm0
このファイラ、Pythonで機能を追加すればSVNの操作もできるのか・・・
すげぇな・・・
532 ◆Nana...Z5Q :2009/08/09(日) 16:28:06 ID:uCiGHELH0 BE:1671984768-2BP(200)
>>530
ごめんなさいお><
自分で書き加えマスタ(・∀・)

ソース見ればわかんだから一々書かなくていいわしねっ!!!1
って言われるかもしれないけどももももしかしたらわからない人もいるかもしれないので書いておくお(^ω^)
>>524

def push_enterkey():
window.command_Enter()
display_name_on_titlebar()

def push_backkey():
window.command_GotoParentDir()
display_name_on_titlebar()

window.keymap[VK_RETURN] = push_enterkey
window.keymap[VK_BACK] = push_backkey

を追加お(^ω^)
533名無しさん@お腹いっぱい。:2009/08/09(日) 18:05:36 ID:QJ4VVORsP
いっそのこと、以下のようにしちゃった方が楽だよ
def foo( func ):
〜事前処理〜
func()
〜事後処理〜

window.keymap[hoge] = foo(window.command_CursorUp)
534 ◆Nana...Z5Q :2009/08/09(日) 21:32:43 ID:uCiGHELH0 BE:1253988566-2BP(200)
>>533
意味わかんないお(^ω^)
535名無しさん@お腹いっぱい。:2009/08/10(月) 08:01:49 ID:cMgQyL7CP
lambda : が抜けてるだけじゃね

def display_name_on_titlebar( func=None ):
  if func:
    func()
  pane = window.activePane()
  filename = pane.file_list.items[pane.cursor].name
  appname = cfiler_resource.cfiler_appname
  title = " - ".join([filename, appname])
  window.setTitle(title)

window.keymap[VK_UP] = lambda : display_name_on_titlebar(window.command_CursorUp)
window.keymap[VK_DOWN] = lambda : display_name_on_titlebar(window.command_CursorDown)
window.keymap[VK_LEFT] = lambda : display_name_on_titlebar(window.command_FocusLeftOrGotoParentDir)
window.keymap[VK_RIGHT] = lambda : display_name_on_titlebar(window.command_FocusRightOrGotoParentDir)
window.keymap[ KeyEvent( ord('H'), 0 ) ] = lambda : display_name_on_titlebar(window.command_JumpHistory)
window.keymap[ KeyEvent( ord('J'), 0 ) ] = lambda : display_name_on_titlebar(window.command_JumpList)

いちいち各キーの定義をし直すのが面倒というなら、
keydown_hook で、自前でコマンド起動した後に、タイトル更新呼ぶようにすればいいと思う。
(cfiler_mainwindow.pyの#787〜#800あたりを複製する)
536 ◆Nana...Z5Q :2009/08/10(月) 13:08:51 ID:2Pjouz0m0 BE:1253988566-2BP(200)
ラムダ・・・( ゚д゚ )

式でつかφ(゚Д゚ )フムフム…
537名無しさん@お腹いっぱい。:2009/09/15(火) 11:55:48 ID:PcDTfY+g0
過疎w
538名無しさん@お腹いっぱい。:2009/09/15(火) 15:03:12 ID:WUk+yYaQ0
まだまだ発展途上だと思うんだけど、ここ一月半ほどは何も動きがないからね

拡張子色分けなどの機能面も充実して欲しいけど、
中身の方もとりあえず実装優先なのかけっこうベタに書かれてる部分もあるんで、
拡張しやすいようにクラス分けやフックの整理とかして欲しい
539名無しさん@お腹いっぱい。:2009/10/07(水) 23:21:17 ID:I8lu8GIS0
アイコン表示機能つかないかな〜
540名無しさん@お腹いっぱい。:2009/10/08(木) 23:24:34 ID:LoZM9sot0
そろそろ更新ないと心配になってくるな・・・
541名無しさん@お腹いっぱい。:2009/10/27(火) 13:22:36 ID:5/vY5MXZ0
スレが立ってまるっと二年
542sage:2009/11/29(日) 01:13:50 ID:4iM7TOrD0
サイトが404・・・
543名無しさん@お腹いっぱい。:2009/11/29(日) 01:19:57 ID:IU6s7gOr0
>>542
普通に開けたぜ
544名無しさん@お腹いっぱい。:2009/11/29(日) 01:20:38 ID:IU6s7gOr0
>>542
ごめん、途中でおくってしまった…orz

普通に開けたので、ちょっとサーバー再起動とかメンテしてただけじゃね?
545名無しさん@お腹いっぱい。:2009/12/08(火) 00:49:17 ID:X47cxi+q0
おしえてください。
仮想フォルダ内のファイルをエディタに渡したいのですが
デフォルトでは用意されていない機能ですか?
546名無しさん@お腹いっぱい。:2009/12/15(火) 00:14:46 ID:D/gGw0AS0
履歴で上から連続で削除すると "KeyError" になるぞ。
547名無しさん@お腹いっぱい。:2009/12/18(金) 00:45:01 ID:qIS0/BeW0
このファイラ、xyzzy 感覚で拡張できておもしろいね。
手段と目的が入れ替わりそうだw
ただ、インタラクティブな関数の中に実処理が丸ごと
実装されているものが多いようで拡張しづらい。
python よくわからんけど、関数内でクラスを定義する
メリットってあるのかな?

あと拡張子と当日タイムスタンプの色づけが実装されれば
最高だな。
548名無しさん@お腹いっぱい。:2009/12/18(金) 09:34:48 ID:/X6Fa3BcP
>>関数内でクラスを定義する

スコープと名前空間が制限される
pythonは関数もファーストクラスオブジェクトだし、
クラスがネストされているようなものだと思えば分かりやすいかも

実装がベタだという点は同感
今手を入れても将来整理されて無駄になるのではと思い、その辺が更新されるのを待っているのだけど、
ここしばらく音沙汰が無いのが何とももどかしい
549名無しさん@お腹いっぱい。:2009/12/24(木) 06:51:24 ID:Szl9qfGk0
更新したろ?
550名無しさん@お腹いっぱい。:2009/12/24(木) 06:59:19 ID:Szl9qfGk0
何が変わったのかがわからない
551名無しさん@お腹いっぱい。:2009/12/24(木) 23:53:46 ID:XdqL7+090
version 1.86:
http://sites.google.com/site/craftware/

- ディレクトリ区切り文字をスラッシュにしているときに、ファイルのドラッグ&
ドロップや、テキストエディタの起動でもスラッシュ区切りで渡していたのを修正。

- ドライブ名の大文字/小文字をそろえる設定を追加

- ソート方法の選択ウインドウを、Shift-Enterで決定できなかったのを修正。
Shiftを押しながら決定すると、逆順になる。

- 逆順でソートした後、再度ソート方法の選択ウインドウを開いたとき、初期選択
位置がリセットされてしまうのを修正。
552名無しさん@お腹いっぱい。:2009/12/28(月) 19:46:27 ID:Xyhkthxa0
SkyDrive Explorer
http://www.forest.impress.co.jp/docs/review/20091030_325502.html

今日知ったソフトなんだけどさ
GmailDriveみたいな感じに、コレも扱えるようになればスゲェ便利そうだよね
553名無しさん@お腹いっぱい。:2009/12/28(月) 22:46:57 ID:21/etdiF0
その手のやつは
Dokan
http://dokan-dev.net/
Pismo File Mount
http://www.pismotechnic.com/pfm/
みたいなユーザーモードファイルシステムを使って
普通にファイルシステムとして使えるように実装したほうが、皆が幸せになれるかな
554名無しさん@お腹いっぱい。:2009/12/28(月) 22:56:01 ID:w2mwu93f0
WindowsがFUSEを標準でサポートしてればねぇ
555名無しさん@お腹いっぱい。:2009/12/29(火) 16:38:00 ID:Tf78eDFS0
>>552
次回のリリースで普通のハードディスクと同じように他のソフトからも
いじれるようにしたいとか書いてるから、更新待ち。
556名無しさん@お腹いっぱい。:2009/12/29(火) 16:52:11 ID:17JiCgzF0
>>555
マジで!?
待ち遠しいな
557名無しさん@お腹いっぱい。:2010/01/05(火) 15:47:19 ID:uG9wSu4C0
履歴検索ができそうでできないなw俺だけ?
558名無しさん@お腹いっぱい。:2010/01/05(火) 17:24:01 ID:hmr7VsdR0
履歴窓でfキーで検索できんか?
559名無しさん@お腹いっぱい。:2010/01/08(金) 16:41:22 ID:ttQukMvl0
やっぱ普通に出来るのか
何故かできないんだよね.設定見直してみるわ
560名無しさん@お腹いっぱい。:2010/02/03(水) 01:19:36 ID:Sv9mme3R0
Ver1.90が公開されてるのに今気づいた…orz
自動アップデートはされないから、手動でアップデートしなきゃ駄目だそうな。

craftwave: 内骨格 1.90
http://craftwave.blogspot.com/2010/01/190.html
561名無しさん@お腹いっぱい。:2010/02/03(水) 23:12:15 ID:o6svijwH0
拡張子色づけ(できればアイコン)とかの表示関連は、まだまだ
先なのかな〜?
562名無しさん@お腹いっぱい。:2010/02/04(木) 00:42:41 ID:+8hA+cQ10
>>561
要望リスト (craftware)
http://sites.google.com/site/craftware/cfiler/requirement

要望リストを見る限り、アイコン表示はそのうち実装されそうやね。
拡張子毎の色づけは特に触れられていないっぽい?

てか、アイコン毎に色変更なら自分でスクリプト書いた方が早いんじゃね?
もちろん、実装されればそれにこしたことは無いけどさ。
563名無しさん@お腹いっぱい。:2010/02/07(日) 09:43:29 ID:Gq4/xOts0
エクスプローラで右ドラッグ&ドロップした時に出るメニューが出せたらいいな
・・・と思ったけどその度にフォーカスがよそに行くのも面倒か
564名無しさん@お腹いっぱい。:2010/02/21(日) 10:30:55 ID:wq6HEe6p0
もう8年ぐらい使ってきたあふの代わりにと内骨格を試し始めた。

>>313>>457 を試してみたいんだけど、消えてるみたい。
どなたか持っていませんか?

自分でやれということかもしれないけど、
カスタマイズの情報があんまり無いような。
wikiとかあって、もっと盛り上がってるのかなー、
と思ってたんだけど。
565名無しさん@お腹いっぱい。:2010/02/24(水) 19:10:10 ID:rUYftWnB0
過疎ってるなーメインで使ってる人いるの
566名無しさん@お腹いっぱい。:2010/02/24(水) 22:16:45 ID:Z5g46Eyl0
>>565
ユーザーが少ない上に、大きな更新も無いから仕方ない

俺はメインで使ってるよ
Pythonである程度好きに弄れるから重宝してる
567名無しさん@お腹いっぱい。:2010/02/27(土) 01:46:13 ID:avxdI/bU0
結局、SkyDriveには対応出来ないっぽいね
まぁ、GMailDriveとはまた違った構造みたいだし仕方ないのかな…
もうちょっといろいろ出来るようになると使い勝手が格段に上がるんだけどねぇ

・SkyDriveの対応
・ハードリンク、ジャンクション、シンボリックリンクの作成や削除、そして視覚的な判別(文字色を変えるとか)
・複数ファイルの上書き確認を簡略化
(一つ一つ上書き確認するのも大切だけど、例えば全部同じ処理で上書きを行うみたいなのが欲しい)

ここで言ってもあまり意味ないのかな?
568名無しさん@お腹いっぱい。:2010/03/01(月) 04:12:29 ID:N5IzVUpA0

拡張子や特定のtagがついたflie名の色分け機能は欲しいな。

あふで使ってるmenuの移植ができれば、内骨格mainで使えると思う。
現在menuを内骨格に移そうと格闘中。listに&CDみたいなcommandとか
アプリ直指定で簡単に動いてくれれば嬉しいんだけど。
地道にdefでcommand定義しまくってる。

569名無しさん@お腹いっぱい。:2010/03/01(月) 09:04:06 ID:aT+qD3qd0
色分けなんかは、item_CommonPaint.paint()をちょっといじればすぐ出来そうなんだが、
いかにも将来実装されそうな部分に手を入れるのは無駄になりそうであまり気乗りがしないんだよな
570名無しさん@お腹いっぱい。:2010/03/03(水) 16:45:26 ID:PvoJef7E0
>>569
見てみたけど、なんか下層にあってちょっとがっくり。
プログラムあんまり分からんのですが、compile無しでは
機能拡張できないような。

Systemの構成に破綻が出来てしまうからなのかもしれないけど、
そういうのを簡単に拡張部としてadd-onしていければ、
作者も楽だしみんなも嬉しいと思うんだけど。
それともsupportの組み合わせ範囲が逆に増えるかな?
571名無しさん@お腹いっぱい。:2010/03/03(水) 19:30:35 ID:cAuyyw/o0
>>570
いやPythonで実装されてる部分はさすがにコンパイルは要らないよ
動的言語のプログラムコードを実行時に置き換えるのを俗にモンキーパッチと言うが、
Pythonでもそういうことができる
この場合、内骨格の実装は一切変更する必要がない

MainWindowクラスのメソッドを単純に置き換えるのは比較的容易
>>569のケースは比較的面倒だけど、>>428の手法を使えば大抵のことができる
# 黒魔術だが……

参考までに>>569のケースのやりかたね
http://codepad.org/Y6MDMwXB
これをpaint.pyという名前でextensionに保存して、
config.pyのconfigure()の中で
import paint
を実行すると、cfiler_filelist.item_CommonPaint.paint()の実装が
paint.pyのmypaint()によって置き換えられる

後は、paint.pyのgetattr_fg()あたりを弄れば、文字色を好きなように変更できるよ
572571:2010/03/03(水) 19:32:35 ID:cAuyyw/o0
ごめん
paint.pyじゃなくて、painter.pyとしてください
その名前をもし変えたい場合は、mypaint()の中のpainterという文字列も
同時に変更する必要があります
573名無しさん@お腹いっぱい。:2010/03/03(水) 19:37:05 ID:U47/MUATP
>>570
クラスのitem_CommonPaint.paint()メソッドを置き換えればいい
config.py内に以下を記述すると、拡張子txtが赤字で表示される

def my_paint( self, window, x, y, width, cursor, itemformat, userdata ):
  # 省略
  if self.name[-3:] == u'txt':
    attr_fg=(255,0,0)
  # 省略
item_CommonPaint.paint = my_paint

※省略した部分は、cfiler_filelist.pyのitem_CommonPaint.paint()メソッドからコピペしてくる
574571:2010/03/03(水) 19:54:08 ID:cAuyyw/o0
>>573
あら、それだけで良かったか
継承されてるからどうかな、とちょっと気にしてたw
575名無しさん@お腹いっぱい。:2010/03/04(木) 21:18:38 ID:KmGd2+mn0
拡張子だけ色つけるのは無理ですか?
576名無しさん@お腹いっぱい。:2010/03/04(木) 21:50:00 ID:chRH5qwsP
ソース見たけど、一行単位で画面に描いてるので拡張子だけというのは無理そうだ
577名無しさん@お腹いっぱい。:2010/03/05(金) 05:16:33 ID:Vh7OzxHX0
>>571 >>573
どうもです。レスが2つもついて結構びっくり。
時間なくてまだ試してなけど、勉強になります。

拡張子だけ色をつけるのはむりっぽい? って話ですが、
他にもいろいろ応用できそうで、ちょっと楽しみ。
578名無しさん@お腹いっぱい。:2010/03/05(金) 16:16:01 ID:Vh7OzxHX0
window.putString( x, y, 64, 1, attr, s )
window.putString( 64, y, 4, 1, attr, s )

みたいな感じで分割して二度書きするといけそうな感じかな。。。
attrも拡張子用の奴を作って、separatorの位置からwidthも
計算。でも、window.putStringはoffset指定できなさそう。
やっぱり無理か。

何気にwindow.putStringはyもあるからfocusの扱いを拡張できれば、
file listの上下分割もできそうな。今のところ興味ないんだが。
579名無しさん@お腹いっぱい。:2010/03/25(木) 19:52:43 ID:Js87edka0
pythonググりながら拡張子の色変更に挑戦してみたら、>>578で結論がでていた
>>573 を参考にmy_paintをつくって
window.putString( x + body_width って感じにx座標を調整しながら、
ファイル名、拡張子、タイムスタンプと別々に描画してみたら一応できた
body_widthはitemformat_Name_Ext_Size_YYMMDD_HHMMSSの中で使われていた変数
それぞれの描画文字列を得るために、s = itemformat(略 のところを消して、
itemformat_Name_Ext_Size_YYMMDD_HHMMSSの中身コピぺした
将来的に不安
580578:2010/04/04(日) 07:03:30 ID:UdiNrABj0
あれ?
拡張子の色分け、早々に出来ないと思ってあきらめてた。
がんばってみよう。
581578:2010/04/05(月) 06:33:07 ID:PIU6fO4a0
>>579 の方法を試してみようと思ったけど頭悪くて出来なかった。orz

けど別の方法を思いついた。

attr_ext = cterm.Attribute( fg = attr_fg, bg_gradation = attr_bg_gradation, underline = attr_underline )
if self.name[-4:] == u'.exe':
attr_ext = cterm.Attribute( fg = (255,0,0), bg_gradation = attr_bg_gradation, underline = attr_underline )

window.putString( x, y, width, 1, attr, s )
window.putString( x, y, 106, 1, attr_ext, s )
window.putString( x, y, 101, 1, attr, s )

3回上書きするんだけど、2回目はtimestamp部は上書きしない、
3回目はtimestamp部と拡張子部を上書きしないでfile名のみ描画。
なんでもっと早く思いつかなかったんだろう。orz



582名無しさん@お腹いっぱい。:2010/04/05(月) 18:00:13 ID:VzSQ4sScP
誰か外部からパスを変更したり、コマンドを実行するI/Fを実装してください
今のところはキーを送るくらいしか手は無い?
583名無しさん@お腹いっぱい。:2010/05/18(火) 13:48:52 ID:rBvt0yg40
>>564
もういないかな… 457 のファイルです。githubで公開しました。
http://bit.ly/CFilerUserKeyMap

READMEやTODOに書いてる更新予定はありません。
今のバージョンで動くかどうかも未検証です。
584564:2010/05/23(日) 08:52:48 ID:u/kTJBGU0

>>583
います。
わざわざどうもありがとうございます。

頭が悪いので一見して、何をやってるのか分かりませんでしたが、
いろいろ弄ってみます。
585名無しさん@お腹いっぱい。:2010/05/30(日) 11:23:50 ID:QbwIDqFK0
>>584
機能紹介も兼ねて補足です。2通りの使い方があって。

1)user_key.install(window, path_to_resource_file)

pythonスクリプトで

window.keymap[KeyEvent(ord('Q'), MODKEY_CTRL|MODKEY_ALT)] = command_ForceQuit

と書くところを、設定ファイルで以下のように定義出来ます。

ForceQuit = Ctrl+Alt Q

コマンド名は、window.command_* が捜査対象となるので、
前準備として、windowオブジェクトへ command_ PREFIX付で関数を登録しておきます。

register_command = user_keymap.set_command_decorator(window)

で生成した関数をデコレータとして使うと簡単に記述できます。記述例 >>457

2)bind_key = user_keymap.set_keyevent_decorator(window.keymap)

関数定義時に、keymapへの登録をするデコレータ 使い方の例は >>464

586名無しさん@お腹いっぱい。:2010/05/30(日) 11:24:30 ID:QbwIDqFK0
>>535
解決済っぽいけど、汎用的な方法を紹介。(内骨格での動作確認はしてません。動かない場合、誰かフォローよろしく)
例: http://pastebin.org/291303

nothing = lambda:None

def command_hook(target, name, pre=nothing, post=nothing):
    method = getattr(target, name, None)
    if method: setattr(target, name, lambda:(pre(),method(),post()))

for name in ('CursorUp', 'CursorDown', 'FocusLeftOrGotoParentDir', 'FocusRightOrGotoParentDir', 'JumpHistory', 'JumpList'):
    command_hook(window, 'command_'+name, post=display_name_on_titlebar)
587名無しさん@お腹いっぱい。:2010/07/30(金) 02:26:07 ID:SJMKycqn0
ずっと放置されているかと思っていたが、こまめに Verup されてるんだな。
よかったよかった。

1 .98 - 2010/07/11
o 起動引数に -L と -R を追加し、開く左右のファイルリストのパスを設定できるようにした。例)
cfiler.exe -L"c:/" -R"d:/dirname"
o Alt-Z で、もうひとつ内骨格を起動できるようにした。
o Ctrl - TAB が効かなくなっていたのを修正。
o configure_ImageViewer で maximize() したときにエラーになっていたのを修正。
o ZipとTar系の仮想ディレクトリからファイルをコピーしている間に、ほかのディレクトリに移動すると、ア
ーカイブファイルがクローズされてしまって、コピーに失敗してしまっていたのを修正。
o ファイルのコピーが稀に失敗してしまうのを修正 (setFileTime中のCreateFileのリトライ処理追加。http:/
/support.microsoft.com/kb/316609/ja)

1 .97 - 2010/06/17
1 .96 - 2010/04/11
1 .95 - 2010/03/13
1 .94 - 2010/02/27
1 .93 - 2010/02/22
1 .92 - 2010/02/13
1 .91 - 2010/02/12
588名無しさん@お腹いっぱい。:2010/08/16(月) 04:01:51 ID:sEMEuBu80
ちょっと質問なんですが
デフォルトの状態で、ヘルプに書いてある
Yでルートディレクトリへ移動というのが効かないような

self.keymap[ KeyEvent( VK_OEM_5, 0 ) ] = self.command_GotoRootDir
ここの事なんでしょうか?
ともかくconfig.pyに
window.keymap[ 'y' ] = window.command_GotoParentDir
と書き加えて問題はないのですが
(スクリプトとか全然なのでこんだけの事にも苦労しましたが……)

どうにも腑に落ちません
589名無しさん@お腹いっぱい。:2010/08/16(月) 09:03:03 ID:eUCcrnJ9P
デフォで定義されているのは、Yじゃなくて\(Yen)
ヘルプにもそう書かれているはず
(VK_OEM_5は\キー表す)

定義はその方法で問題ない
RootDirじゃなくParentDirになっているけど…
590名無しさん@お腹いっぱい。:2010/08/16(月) 14:59:35 ID:sEMEuBu80
ぐえあ、返答ありがとうございます

Yじゃなくて\でした……
しかも/のほうキーだと思ってたという。右上のほうのこれか……

RootDirよりParentDirのほうが好きなんで、そうしました
なんにしろ、python勉強しようかな、と思わせるソフトですね
591名無しさん@お腹いっぱい。:2010/09/05(日) 16:00:14 ID:sBw9e/wm0
アップデートしたらスキン上書きされた
592名無しさん@お腹いっぱい。:2010/10/06(水) 17:19:52 ID:I14AyFwp0
メジャーアップデート来たと思ったらスキンだった
593名無しさん@お腹いっぱい。:2010/10/11(月) 21:43:44 ID:DaDZoPMFP
アップデートでconfig.py読み込めなくなった
594名無しさん@お腹いっぱい。:2010/10/26(火) 03:32:07 ID:bIwHKWZf0
白テーマかっこいいな
なんかグレーの枠みたいのが適当に立体でカッコ悪いと思ってたんだけどこれだとデスクトップに常駐しててもいいかもしんない
595名無しさん@お腹いっぱい。:2010/10/29(金) 14:27:17 ID:GzSsw1WZ0
更新履歴書いてくれよ
596名無しさん@お腹いっぱい。:2010/11/02(火) 22:25:00 ID:UbNDdsfz0
597名無しさん@お腹いっぱい。:2010/11/27(土) 22:43:47 ID:g660KYcg0
window.SubProcessCallをキューに突っ込んでバックグランド実行みたいなことってできないのかな
SubProcessCallをjobitemにするとプロセスが完了しても制御が帰ってこないようなんだけど
598名無しさん@お腹いっぱい。:2010/11/29(月) 08:27:36 ID:ABQjLhEv0
>>597

以前試してできなかった。地道に別の内骨格立ち上げてる。
599名無しさん@お腹いっぱい。:2010/11/29(月) 08:28:33 ID:ABQjLhEv0
アクティブペインにあるフォルダへwindow.command_MoveInput()を使ってファイルを移動させると、
そのフォルダを後で簡単に消せなくなる。中身のファイルは消えるけどフォルダは残ってしまう。
一度内骨格を終わらせて、タスクマネジャーに残ってるcfilerも消すとそのフォルダも無くなるけど。
何でだろ。
600名無しさん@お腹いっぱい。:2010/12/03(金) 03:42:13 ID:8W+Z0TTK0
>2.05 - 2010/12/02
> * CopyInput や MoveInput を実行したときに、入力したディレクトリの監視用スレッドが残り続けてしまっていたのを修正。
> 内骨格のプロセスがいる間、そのディレクトリが削除できなくなってしまっていた。また、その状態では、
> ウインドウを閉じても、内骨格のプロセスが残存してしまっていた。

対応ありがとうございます。

601名無しさん@お腹いっぱい。:2010/12/03(金) 10:12:00 ID:MPrUy/320
俺も大分前からそういう現象に気づいてたけど、トリガが何かわかってなかったわ
気づいた>>599はえらい
602名無しさん@お腹いっぱい。:2010/12/08(水) 19:59:29 ID:T1EBzDMf0
>>597
遅レスだけど
subProcessCall()はsubThreadCall()で処理を行うようになっていて
subThreadCall()はちょっと特殊なのでそういう使いかたは無理だな
なので、直接cfiler_subprocess.SubProcessをつかえばいい

def run_subprocess(*args, **kw):
    import cfiler_subprocess
    import ckit
    p = cfiler_subprocess.SubProcess(*args, **kw)
    window.taskEnqueue(ckit.JobItem(lambda item: p()))

例えば、上のような関数をconfigure()の中に作っておいて
run_subprocess(['tar', '-xvf', path, '-C', dst])
という具合に呼べばいい
run_subprocessが受け付ける引数は、cfiler_subprocess.SubProcessの
コンストラクタの引数と同じ
603602:2010/12/08(水) 20:12:01 ID:T1EBzDMf0
ただし、書いといて何だけど、俺としてはお薦めできないんだな

cfiler_subprocess.SubProcessの中で使っているのは
Python標準のsubprocessモジュールなんだけど
これがCreateProcessAを呼んでいるのでUnicode非対応だというのが一つ

もう一点は、cfiler_subprocess.SubProcess.__call__()の中で
> self.stdout_writer( self.p.stdout.read() )
このようにしてパイプから読みこんでるんだけど、無引数read()なので、
プロセスの全部の出力をこの一文で一気に読み込むことになる
つまり、終わるまで出力が一切出ないし、データ流量が多い場合はつまって
酷いことになるかもしれない
(ここは作者さんに直して欲しいところ、俺は使ってないけどw)

というわけで、どうしても内骨格の下のログペインに出力を出したいのでなければ、
単にckit.shellExecute()を直接呼ぶのが手軽でおすすめ(taskEnqueue()で
キューイングする必要も無い)
そうでなければ、ctypesで自分でCreateProcessWを叩くか
604名無しさん@お腹いっぱい。:2010/12/26(日) 21:38:39 ID:Z0w5TCsh0
最近のバージョンになってから、Craftlaunchや内骨格が起動しなくなりました。
注意書きにある、マイクロソフトのランタイムライブラリを入れてもなおりません。
同じ症状の方はいないでしょうか?

OSはWin2000SP4です。
cfiler_206 clnch_324ともに起動できませんでした。
605名無しさん@お腹いっぱい。:2010/12/27(月) 03:23:30 ID:XuTxBiBF0
何かメッセージとかでないの?
606名無しさん@お腹いっぱい。:2010/12/27(月) 05:47:11 ID:gK0i2cpf0
See the logfile 'D:\bin\cfiler\cfiler.exe.log' for details

とウィンドウが出ます。Craftlaunchも同様です。
cfiler.exe.logの中身は

Traceback (most recent call last):
File "cfiler_main.py", line 9, in <module>
File "cfiler_mainwindow.pyo", line 17, in <module>
File "pyauto\__init__.pyo", line 3, in <module>
File "pyauto\pyautocore.pyo", line 12, in <module>
File "pyauto\pyautocore.pyo", line 10, in __load
ImportError: DLL load failed: 指定されたプロシージャが見つかりません。

です。
あと、手持ちの過去のバージョンで試したところ、内骨格はver1.98aまで。Craftlaunchはver3.14までは問題なく起動します。
607名無しさん@お腹いっぱい。:2011/01/07(金) 19:03:53 ID:h3vhE8SW0
608名無しさん@お腹いっぱい。:2011/01/07(金) 22:26:48 ID:Ux+QgJyF0
作者さま

テキストビューア、バイナリビューア、テキスト比較で
ページ単位のスクロールが、1行多いっす。
609名無しさん@お腹いっぱい。:2011/01/15(土) 16:54:45 ID:Yl6ucW360
EncodePointerとDecodePointerが呼ばれてるな……

ttp://blog.livedoor.jp/blackwingcat/archives/1299806.html
これでも放り込めば動くんじゃないかな……?
610名無しさん@お腹いっぱい。:2011/02/10(木) 16:07:13 ID:IJSQpPEA0
起動時に最新バージョンチェックをしにいってるみたいなんだけれど、
これを止めるようには出来ない?
611名無しさん@お腹いっぱい。:2011/02/10(木) 17:43:07 ID:kU6s927I0
>>610
ソースを見る限りでは
cfiler.iniの
[UPDATE]
check_frequency
の値を0にすれば、チェックしなくなりそう(確認はしてない)
612名無しさん@お腹いっぱい。:2011/02/11(金) 09:27:05 ID:CbqzBWYO0
>>610
ありがとう!!
613名無しさん@お腹いっぱい。:2011/02/11(金) 09:27:49 ID:CbqzBWYO0
すみません。アンカ間違い
610 → 611
614名無しさん@お腹いっぱい。:2011/02/11(金) 15:29:49 ID:01/AUsiji
Shift Z の設定メニューからも
無効にできるぞ
615名無しさん@お腹いっぱい。:2011/02/14(月) 01:08:20 ID:0lCL5nyf0
>>614
ありがとうございます。できました!!
616名無しさん@お腹いっぱい。:2011/03/20(日) 07:57:47.96 ID:D07CNDHm0
内骨格 ver 2.07 公開
内骨格の ver 2.07 を公開した。

2.07 - 2011/03/08

* Python27 を使うようにした。
* migemo のバージョン 1.3c を使うようにした。
* SubProcess クラスを cfiler 名前空間に export した。
* SubProcess クラスを使ったサブプロセスの実行時に、 ログのリダイレクト処理が1行ごとに行われるようにした。
* GmailDrive の対応を廃止 (ほかにDropBoxのような便利なサービスがあるため)
* テキストビューア、バイナリビューア、テキスト差分ビューアのページ単位の スクロールが1行多くスクロールしてしまっていたのを修正。
617名無しさん@お腹いっぱい。:2011/04/25(月) 12:32:57.52 ID:71P39EWRP
2.08 - 2011/04/24
終了時の設定ファイルの保存が失敗しにくいようにした。 (保存時にタイムアウトしないようにした。テンポラリファイルを使うようにした。)
ディレクトリの削除の途中で、別のタスクが割り込むことができるようにした。
デフォルト設定ファイルに定義している NetDrive コマンドで、net use に /yes を渡すようにした。
618名無しさん@お腹いっぱい。:2011/05/01(日) 03:56:06.26 ID:NEUd4nX00
アイコンはくるのか?
619名無しさん@お腹いっぱい。:2011/06/01(水) 01:38:07.91 ID:6aVuaKFh0
620名無しさん@お腹いっぱい。:2011/06/02(木) 02:07:59.72 ID:1kAwafq10
comtypes使いたいと思ってとりあえずpython2.5の環境でインストールし
comtypesってフォルダをコピーしてみたんだけど全然ダメだ。
どうすれば使えるんです?
621名無しさん@お腹いっぱい。:2011/06/02(木) 09:18:22.43 ID:GJKhaI9QP
comtypesは内骨格に標準で入ってるから、他所からインストールする必要はないよ
import comtypes をやれば使えるはず
622名無しさん@お腹いっぱい。:2011/06/02(木) 19:38:25.32 ID:1kAwafq10
>>621
本当ですね。ありがとう!
623名無しさん@お腹いっぱい。:2011/06/17(金) 16:19:41.14 ID:Pcodw5gN0
内骨格を使ってたらジャンプができなくなってました
エスパーの方いましたら回答お願いします
624名無しさん@お腹いっぱい。:2011/07/01(金) 08:51:41.13 ID:qMfKcDpoP
2.09 - 2011/06/26
テキストビューアで、shift-jis の代わりに、内部的に cp932 を使用するようにして、 Windows用の機種依存文字が表示できるようにした。
テーマの切り替えでエラーが発生するようになってしまっていたのを修正。
625名無しさん@お腹いっぱい。:2011/08/21(日) 08:27:13.79 ID:8MzmjRZTP
2.10 - 2011/08/21
・Ctrl-J で Search や Grep の検索結果をリストウインドウで表示するようにした。
・Python の標準ライブラリと comtypes を同梱するようにした。
・Window.maximize(), Window.minimize(), Window.restore() に、SetWindowPlacement() ではなく、
WM_SYSCOMMAND を使うようにした。 これにより、最大化したまま最小化したウインドウを restore() するときに、
通常サイズに戻ることなく、最大化状態で復帰するようにした。
・パスワードつきZipファイルを扱ったときのエラー表示を整理。
・ビルド方法の整理。C++部分は Visual C++ 2008 (Express)を使うようにした。
・ドキュメント生成に使用している Doxygen のバージョンアップ
626名無しさん@お腹いっぱい。:2011/08/21(日) 09:49:07.93 ID:5wA/KYsh0
書庫の圧縮・展開はDLLに任せちゃえばいいのに、ってのは素人考えですか?
627名無しさん@お腹いっぱい。:2011/09/16(金) 06:04:05.23 ID:D6KRFxVS0
拡張子.jarファイル上でリターンキー押した時にもzipと同じように中に入っていくっていう設定をしたいんですが
どうやればいいでしょう
628名無しさん@お腹いっぱい。:2011/09/16(金) 07:53:16.91 ID:UCO76uSBP
アーカイブの判定はハードコードされてるので、
cfiler_mainwindow.pyのcommand_Enter()を複製してそれを書き換えるか、
hook_Enter()に同じような処理を追記すればいいと思う

def hook_Enter():
  pane = window.activePane()
  item = pane.file_list.getItem(pane.cursor)
  if hasattr(item,"getLink"):
    link_entity = item.getLink()
    if link_entity:
      item = link_entity

  if not item.isdir() and os.path.splitext(item.name)[1].lower() == ".jar":
    window.appendHistory(pane)
    new_lister = cfiler_filelist.lister_Zip( window, item.getFullpath(), "" )
    window.jumpLister( pane, new_lister )
    return True
629名無しさん@お腹いっぱい。:2011/09/16(金) 08:38:03.58 ID:D6KRFxVS0
いけた!ありがとう!
630名無しさん@お腹いっぱい。:2011/10/29(土) 02:04:15.98 ID:e0qqPeju0
既出かもしれないけど、圧縮ファイル展開時の属性とタイムスタンプが変?
7z,rar ファイル属性もタイムスタンプも保持
zip,tgz ファイル属性もタイムスタンプも保持されない
lzh ファイル属性は保持されず、タイムスタンプは保持される
631 忍法帖【Lv=6,xxxP】 :2011/11/02(水) 12:14:09.80 ID:ae/i8Giq0
このソフトすごい良いのに、なんで人気ないんだろ
非同期だしあふwとかより高機能じゃない?
632名無しさん@お腹いっぱい。:2011/11/02(水) 17:32:19.05 ID:1RCSMnIJ0
3の方が主流になったらPython覚える
633名無しさん@お腹いっぱい。:2011/11/02(水) 22:03:25.45 ID:YeQVPsBX0
Pythonって全然難しくないのになぁ。
極端な話、関数または条件文の次の行は文字下げ(インデント)するってことさえ知ってれば
何とかなると思う。
634名無しさん@お腹いっぱい。:2011/11/03(木) 00:39:06.56 ID:vGprgav00
インデントは嫌われる理由になっていても難しいと思われる原因にはなってないと思われ。
635名無しさん@お腹いっぱい。:2011/11/03(木) 03:22:50.25 ID:oR2+MyqV0
プログラマー気質の人がそんなにいないということだな

ファイラーにあふ以上の機能が必要という一般人は
作業のありかたを見直した方が早い
636名無しさん@お腹いっぱい。:2011/11/03(木) 08:40:56.60 ID:09D56FXsP
>>631
細かなところまで内部を好き勝手に書き換えられるのがいいね
みんなが作ったカスタマイズに関するノウハウやスクリプトを共有できたりすると、もうちょっと流行るんじゃないかと思うけど
637 忍法帖【Lv=7,xxxP】 :2011/11/04(金) 20:49:12.63 ID:Su4tMa1M0
>>634
vimでオートインデントすんのどうやんの?
638名無しさん@お腹いっぱい。:2011/11/04(金) 21:03:45.81 ID:oByPPIKh0
:help autoindent
てかvimスレかと思ったわ。そっちもお気に入りに入ってるから。
639名無しさん@お腹いっぱい。:2011/11/07(月) 20:25:39.95 ID:6wet46HV0
>>631
多分キーボメインだから
普通の人はマウスメインのファイラ使ってると思う
640名無しさん@お腹いっぱい。:2011/11/08(火) 10:38:04.98 ID:fRdEdt1L0
>>631
afxの人が言ってるみたいに年取ると設定ファイルガリガリ書くのがしんどいから
もっと包括的な設定のフロントエンドがあればいいと思う(shift+zである程度は設定できるけど)。
>>636
そういうスクリプトのアーカイブがあればありがたいねぇ。

641名無しさん@お腹いっぱい。:2011/11/08(火) 10:53:24.46 ID:4LrLJqdVP
俺は、なるべくextensionフォルダにスクリプト放り込んで、config.pyでimportするようにしてるんだが、
いかんせん改造のレベルが、「元のソースから関数コピって、必要なとこだけ直す」ってのが多くて、公開するにはちと恥ずかしすぎるw
642 忍法帖【Lv=8,xxxP】 :2011/11/08(火) 11:49:24.30 ID:ZfPe6gcQ0
>>641
いんじゃない?公開してよ
643名無しさん@お腹いっぱい。:2011/11/08(火) 14:00:12.31 ID:fRdEdt1L0
設定ファイルとかも展開した本体フォルダに格納するようにしてほしい。
デフォだと現状user/appdateにフォルダ作られるのがなぁ・・・
設定いじればなんとかなるんかね?
644名無しさん@お腹いっぱい。:2011/11/08(火) 14:07:56.63 ID:at/P7tAx0
>>643
本体側にあればそっちを読むって仕様じゃなかったっけ?
645名無しさん@お腹いっぱい。:2011/11/08(火) 14:18:07.52 ID:/Jzyht/w0
>>636
pythonで細かく拡張できるのがメリットな反面で、
普及に関してはnon-programmerな人達にとっての敷居になってる部分もあると思います

>カスタマイズに関するノウハウやスクリプトを共有

現状ではコード断片を各自 config.py に貼り付けなので、この点はまだまだ改善の余地あり。
拡張機能を共有する為の枠組みが整備されるといいですね。

指しあたっては、拡張機能の実装とユーザ定義コンフィグ(キー割り当て等)の分離だろうけど・・・
拡張機能の自動読み込み、叩き台だしてみよ。

http://codepad.org/BxlGzCAt

./extension内に配置した *_plugin.* モジュールを読み込んでsetup関数を呼び出します。
setup内でwindow.command_XXX = command_XXX と登録して、config.py 側でキー・アサインといった利用を想定してます。
登録するコマンド名は他と重複してしまわないように注意。

# 自動読み込みを経由しないで使いたい場合は、自分で config.py configure() 内に import して setupを呼び出す処理を書きます。
# import hello_plugin
# hello_plugin.setup(window)

プラグイン管理用のユーザ・インターフェースも欲しいところだけど、
プラグイン保管用のフォルダとextensionフォルダを内骨格の左右で開いて、
有効にするプラグインをextensionへコピーする等。手抜き^h^h^h工夫して運用でカバー。プラグインの反映は内骨格を再起動する事で対応。
(config.pyの再読み込みでは、読み込み済みプラグインの再読み込みや解除はできない。。多分。

自分の利用方法では、
適当なフォルダに pythonスクリプトやよく使うプログラムのショートカット、batファイル等をまとめて置いて、(unixの/usr/local/bin的な場所
アクティブなpaneのパスや選択したファイルのリストを渡して起動って使い方が主です。内骨格本体はあまり拡張してません。
(いろいろとロードして内骨格本体のプロセスが肥大化するのは避けたいのと、内骨格への依存を避ける為。)
内骨格内部でいろいろやるというよりは、外部アプリの起動拠点として使ってます。# ・・・なので、内骨格へフィードバックするようなことがあまりない(^^;
646名無しさん@お腹いっぱい。:2011/11/08(火) 14:28:41.28 ID:/Jzyht/w0
このスレに挙がったカスタマイズのサマリー作ってみました。
本文長すぎるって何度も怒られたので外部へ投稿。

ttp://pastebin.com/cBdwTgCs
647名無しさん@お腹いっぱい。:2011/11/08(火) 15:35:48.29 ID:fRdEdt1L0
>>644
あ、ほんとだ。お騒がせした。
以前やったけど何度も何度もappdateにフォルダ作られて諦めてた・・・なんだったんだろう。

>>646
乙です。
自分もnon-programmerな人間なのでafxwのマクロでゴニョゴニョやるのが精一杯です。
basic位判りやすかったらなぁ。インデント見ると怯む。

648646:2011/11/08(火) 19:48:38.94 ID:/Jzyht/w0
キーボード操作がメインでPythonが拡張言語って時点で
利用者が限定されるんじゃないかなと思ってたんだけど、そうでもないのですね。

>インデント見ると怯む。
タブと混在してエラーになったり、掲示板からコピペする時に障害となったり・・・。確かに、煩わしい部分はありますね。

non-programmerな人向けのpythonスクリプト編集のノウハウなんかもだしてったほうがいいかな。

例えば、メモ帳でのconfig.py編集はあまりお勧めしません。
インデントがtab文字と空白文字が混在してしまうとエラーの原因になったりするので、
TABをスペースに展開してくれて、全角・半角空白・タブの区別が出来るエディタの利用をお勧めします。
pythonでのインデントは、TAB文字は使わず半角のスペースが基本です。

それでもメモ帳で編集する場合のTip、間違えて全角の空白をいれてしまわないように、
Sfhit + Space でスペースを打ち込むと、少しだけ安心です(MS-IME利用の場合)


もうひとつ厄介なインデントの問題ですが、
掲示板に投稿されたコードの半角スペースやタブのインデントは、
ブラウザ経由で見る場合には省略される為、単純にコピペ出来ない事があります。

インデントがタブや全角スペース ... コピペ後に修正が必要

スペースを HTMLのエスケープ文字 に置き換えて投稿。(ブラウザで見たときスペースとして表示される)
... コピペ可。但し、コードを貼り付ける場所によってはインデントの深さを調整する必要がある。

外部サイトへ乗せる。github, pastebin.com, codepad.org 等。
... ファイルとしてダウンロード可能。

スムーズな拡張機能の共有の為には、
コードの断片でなく、ファイル単位で機能を共有する枠組みが必須です。# ってことで、>>645を書きました。
649646:2011/11/08(火) 19:51:28.21 ID:/Jzyht/w0
user_keymap.py の最近の内骨格への対応。 # githubへはそのうち更新させます
- from cterm import cterm_const as key_constants
+ from ckit import ckit_const as key_constants


再起動も動かなくなってたので、>>645利用のサンプルも兼ねて書き直し。
# ./extension/reboot_plugin.py
ttp://codepad.org/sH7y093r


# config.py configure() 内での設定例

# reboot_pluginを読み込まなかった場合、
# window.command_Rebootの参照でエラーになってしまうので事前にチェック。
# hasattrはpythonの組み込み関数でimport等しなくても使えます。

if hasattr(window, "command_Reboot"):
  # x キーで呼び出すコマンドへ登録
  window.launcher.command_list.append((u'reboot', window.command_Reboot))

  # Ctrl + Alt + F5 へ割り当て
  window.keymap[KeyEvent(VK_F5, MODKEY_CTRL|MODKEY_ALT)] = window.command_Reboot
650646:2011/11/09(水) 16:48:45.58 ID:Mtf4AkJn0
# user_keymap.py 更新。取り急ぎcodepadで
#
# 変更点:
# * 新しいバージョンの内骨格に対応。
# * コメント開始文字の後にスペースがない場合、コメントとして扱われなかったのを修正。
# * 行末コメントの対応。

ttp://codepad.org/mjDokeON

# ./extension/dirs_plugin.py
ttp://codepad.org/cVhicbnH

popd/pushd 相当の拡張機能です。

内骨格にはジャンプリスト、ヒストリ、ブックマーク等の移動手段がありますが、
わざわざ登録する程でもない一時的な作業場所に、頻繁に行ったりきたりする場合や、
一時的な作業場所が3箇所以上になる時、移動が煩わしい事があります。

この拡張機能では、短期的な作業で複数の離れた場所を頻繁に行き来するといった状況で、
より少ないキー・ストロークでの移動手段を提供します。


使い方:
DirsPush で、現在の場所を登録します。
DirsNext, DirsPrev で登録した場所を行き来できます。タブの切り替え感覚で場所移動。
DirsPop で、現在の場所が登録されている場合、それを解除します。
DirsPrint 登録した場所の一覧表示
DirsClear すべての登録を解除

登録した場所の一覧情報は、保存されません。
651名無しさん@お腹いっぱい。:2011/11/10(木) 09:19:50.16 ID:Rgpa5GMYP
ソートに数字順による並び換えを追加する

# ./extension/SortByNumber_plugin.py
ttp://codepad.org/Zr69tIQC

こんな感じ
1.jpg
11.jpg
2.jpg
hoge_10.txt
hoge_3.txt

1.jpg
2.jpg
11.jpg
hoge_3.txt
hoge_10.txt
652名無しさん@お腹いっぱい。:2011/11/10(木) 16:16:39.93 ID:OM1iiudX0
>>651
nice!

ソートの比較関数に関して、
Pythonはリストやタプルのデータでも比較してくれるので、
数値とそれ以外の文字のリストに分解すると、より簡潔になるよ。

ttp://codepad.org/eEXhZoJv

自分の場合は、画像の連番だったら桁数揃えてリネームしてる。
ファイル名にバージョン番号が付いてる場合だったら、
日付順ソートで目的の並びを得られる場合もあります。
653名無しさん@お腹いっぱい。:2011/11/11(金) 08:20:34.14 ID:E8iesBkU0
## ディレクトリの中身を隣のpaneで覗き見する拡張機能です

# ./extension/peep_plugin.py
ttp://codepad.org/5v6F01eT

プラグインの読み込みは >>645を参考に

# キーの設定
window.command_PeepDir にキーを割り当ててください

カーソル移動と併用して使えるように、左手で使えるキーへの割り当てをお勧めします。

# 使い方

ディレクトリの上で割り当てたキーを押すと、隣のPaneがその中の場所に移動します。
キーを離すと元の場所に戻ります。


※ 注意点
_onKeyUpをフックしてます。
_onKeyUpの利用が競合する人は何らかの対策が必要になるかもしれません。
>>645のローダでは、プラグインを読む込む順序を保障できないので、その辺は今後の課題。
654名無しさん@お腹いっぱい。:2011/11/11(金) 10:01:40.94 ID:1fJBFtuJP
ジャンプリストで階層メニューを表示するサンプル

# ./extension/JumpList_plugin.py
ttp://codepad.org/J0Hx4Kxy

使い方などはスクリプト内のコメントを参考にしてください
ワンキー決定にしてるのは私の好みです
標準と同じようにエンターで決定するようにするには、onekey_decide=Trueの所をFalseにしてください

面倒臭いので上の階層には戻れませんw
ESCで閉じて最初から選び直せばいいと思うしw
655名無しさん@お腹いっぱい。:2011/11/11(金) 17:12:42.19 ID:E8iesBkU0
>>654
bookmarkをそんな感じで階層表示させたいですね

forkさせてもらいました。

* 上の階層へ戻る (TODO: オプションで選択出来るように)
* 設定項目を config.py 側で設定できるように変更
* jump_main を他の .py ファイルから読み込む

http://codepad.org/Th9lLpKD
http://codepad.org/qqwh6jXl

656名無しさん@お腹いっぱい。:2011/11/11(金) 17:27:59.32 ID:44j/AsV20
ええで、ええで!
657名無しさん@お腹いっぱい。:2011/11/11(金) 17:38:48.56 ID:1fJBFtuJP
ものすごくどうでもいい拡張

はい/いいえのメッセージボックスをY/Nキーで決定できるようにする

ttp://codepad.org/0sh0JdLE
658名無しさん@お腹いっぱい。:2011/11/11(金) 20:36:07.65 ID:E8iesBkU0
# ショートカットの作成

ttp://codepad.org/t6IU288b

手元の内骨格(version 2.10) では comtypes.shelllink が含まれていなかったので、
コメント中にあるURLよりファイルを./extension/shelllink.py に保存して下さい。

# Tips
ワン・キーで移動できる場所に、ショートカットを纏めておくと、
ディレクトリを利用して階層メニュー的な運用が出来ます。
659名無しさん@お腹いっぱい。:2011/11/12(土) 10:48:40.05 ID:Lg+YhBo60
>>657
ttp://codepad.org/LROhdKbx
いろいろと弄ってみました。
内骨格本体と重複する部分を排除して、フック関数を差分のみに変更。
フックを元の関数の前・後を設定できるように・・どちらでも効果はかわりませんが、サンプルってことで。


# config.pyリロードに対応したプラグインのsetup関数について (プログラム書く人向け)

内骨格がconfig.pyリロード時にリセットしてくれない項目に関して、
例えばフック等の追加には、追加済みかどうかをどこかに覚えておく必要があります。

現状では、プラグイン・モジュールはリロードされずにsetup関数が呼ばれてる状態なので、
モジュールのグローバル変数が使えそうですが、プラグインのリロードをサポートした場合、
そのようなグローバル変数の使い方が出来なくなり、変更を強いられます。

とりあえず自分は、windowオブジェクトの属性に放り込んでいますが、
プラグインが増えてくると、この方法もあまり好ましくないので、
拡張機能の為に何らかの名前空間が欲しいところです。

>>653 の onKeyUp のフックは、config.pyのリロードに対応していません。
リロードする度に無駄に多くの onKeyUp 関数を呼び出すようになってしまう。=>内骨格の再起動で解消
>>658 は元のメソッドを呼び出さずに上書きしているので、このリロード対応の問題はありません。
660名無しさん@お腹いっぱい。:2011/11/12(土) 10:50:36.01 ID:Lg+YhBo60
>>659 訂正
文章末尾の >658 -> >657 でした
661名無しさん@お腹いっぱい。:2011/11/12(土) 11:51:21.71 ID:Lg+YhBo60
# Reload 対応

# >>645 ./extension/plugin_manager.py
http://codepad.org/u1KCYTIk

但し、plugin_manger.py 自体はリロードされないので、
ファイルを更新後、内骨格を再起動してください。


(non-programmerな人向け)

Pythonでは通常モジュールをimportする時、
既に読み込み済みであれば、そのキャッシュを使う仕組みになってます。

このローダを使わず、独自にリロードを行いたい場合 組み込みのreload関数 を使えますが、
きちんとリロード処理しようとすると、読み込み済みかどうかの判定も必要になってきます。

ローダを使わない場合の方法では、モジュール自体はロードされずに、
setup(window)のみもう一度呼ばれることになる点を留意しておいて下さい。

----
# >>653 ./extension/peep_plugin.py
http://codepad.org/Sp53BkXQ

setupをconfig.py のリロードに対応
リロードすると、無限ループに陥ってた(汗
662名無しさん@お腹いっぱい。:2011/11/24(木) 13:46:26.11 ID:yO/A+Hut0
>>658
!!!
onenoteの運用に思うところがあって
これをリクエストしに久しぶりにこのスレきたんだよ!
ありがとうあとで試してみる
663名無しさん@お腹いっぱい。:2011/12/17(土) 18:24:00.64 ID:IyK7GcW/0
内骨格なんてあったなあと思って作者のサイトいったらpythonスクリプト対応とかで驚いた
作者の他のソフトみたらみんなPython関係だった
これはもうPython勉強するしかないのか
664名無しさん@お腹いっぱい。:2011/12/20(火) 17:43:21.26 ID:hn+1omOk0
Macで気に入るファイラーが無いからWineで動かして使ってる。
Wine上の内骨格からMacのアプリを呼び出せるしすこぶる快適。
665 忍法帖【Lv=28,xxxPT】 :2011/12/21(水) 19:34:42.95 ID:0mqkwxMIi
>>664
マジで!?Macで使えんの!?
ワインなに?ワインボトラー?みくいんすとら?それともMacportsやHomebrewのワイン?
666名無しさん@お腹いっぱい。:2011/12/21(水) 20:31:09.78 ID:h81OqdDg0
>>665
ボトラーでいけた。
msvcr90.dllが無いと起動しないので、vcredist_x86.exeのインストールは必須かも。
内骨格からMacのアプリも起動できるのだけど、WindowsのパスとMacのパスの変換は
してやらないと行けなかったので、アドホックは関数書いて対応。
でも、今日使っていたら日本語入力できないのに気がついた。
667 忍法帖【Lv=5,xxxP】 :2012/04/12(木) 05:27:22.05 ID:vogNy9K50
色って変えれんの?
拡張子によって色変えたい
668名無しさん@お腹いっぱい。:2012/04/22(日) 20:24:51.01 ID:6+VwNyL40
2.18を使用してます。

mキーの挙動をカスタマイズしたいけどできない。
myCommandを定義して、
window.keymap[ 'm' ] = myCommand
と書いても、mキーを押したらMakeDirが走る。
カスタマイズできてる人がいたら、どうやってるか教えてください。
669名無しさん@お腹いっぱい。:2012/04/22(日) 21:10:12.06 ID:RrTQXuKkP
書いてる場所が悪いんじゃないの
configure関数の中に書かないとダメ
下の方はリストウィンドウ用の関数(configure_ListWindow)
670名無しさん@お腹いっぱい。:2012/04/22(日) 23:47:04.35 ID:6+VwNyL40
>669
configureの中に書いてるんですけどねー。
やりたいことはファイル(やディレクトリ)を未選択の状態で m を押すと
カーソルの位置のファイル(やディレクトリ)を逆のペインに移動させたいのです。

def command_Move():
 if len(window.activeSelectedItems()) == 0:
  window.command_Select()
 window.command_Move()

window.keymap[ 'm' ] = command_Move
と書いてます。

cキーでのコピーはほぼ同じコードを書いて、未選択の状態で c を押すとちゃんとコピーしてくれる。
また、ファイルを選択した状態だと m を押すとcommand_Moveが走ってファイルの移動ができる。
671名無しさん@お腹いっぱい。:2012/04/23(月) 08:12:16.84 ID:vOfWPkLfP
window.keymap[ ckit.KeyEvent( ord('M'), 0, extra=0 ) ] = command_Move
が正しいみたい

extra=0が未選択状態、extra=1が選択有状態
設定メニューのキー割り当てが101もしくは106だと、この方法でmキーに二つのコマンドが割り当てられる仕組みの様子

自分は106afxにしてたから分からんかったw
672名無しさん@お腹いっぱい。:2012/04/23(月) 09:53:52.64 ID:QjHnGvNS0
>>670
ごく最近の更新でその辺の仕様が変わって、今はkeymapテーブルのキーとして文字列を
使うことになったみたい(古いやりかたもまだ一応動くけど、VK_HOMEみたいなのを
キーに使うとdeprecatedだと言われる)
cfiler_mainwindow.pyのconfigure()を見てみると雰囲気は分かる、さらに詳しくは
ckit_key.pyで文字列とWindowsの仮想キーコードのマッピングが行われている

その目的なら、キーとして'm'ではなく'M'を使えばいいはず
673670:2012/04/23(月) 19:17:24.25 ID:+KsecEZk0
>671,672
ありがとうございます。
window.keymap[ ckit.KeyEvent( ord('M'), 0, extra=0 ) ] = command_Move
でいけました。
'M' はダメでした。
674名無しさん@お腹いっぱい。:2012/04/24(火) 08:04:06.49 ID:i2x1MQ8Zi
>>667
を誰か
675名無しさん@お腹いっぱい。:2012/05/23(水) 23:48:28.04 ID:3Vcbw7Ie0
zipファイル内に「表」を含むファイル名があると、化けますな。
展開・仮想展開・圧縮、すべて化ける。
676名無しさん@お腹いっぱい。:2012/05/27(日) 21:15:36.45 ID:DSnawOzG0
すでに内骨格が起動している状態で外部ツールから cfiler.exe -L"ディレクトリ" とかされたときに
ディレクトリだけ移動してくれるようにはできないのかな。
二重起動させたくないんだけどやりかたありますか?
677名無しさん@お腹いっぱい。:2012/05/27(日) 23:00:06.06 ID:DSnawOzG0
>>399 の拡張で希望な動作できました。
さきにログ読んでおくべきですね、すいません。
678名無しさん@お腹いっぱい。:2012/06/25(月) 18:28:41.68 ID:GMbkiGfk0
user_keymap.py 更新しました. KeyEvent->新しい仕様の文字を返すよう変更
このモジュールで読み込むキー表記は、新しい仕様の表記(S-X等)には対応してません

ttp://codepad.org/tVxlughC

本体側のkeymapが文字列に対応されたので,同様の機能はもっと簡単に実装できますね
今回は以前の設定を読み込んでエラー/警告が出ないようにするのみに留めておきます
679名無しさん@お腹いっぱい。:2012/06/25(月) 22:32:03.37 ID:GMbkiGfk0

>>649のreboot_plugin.py更新
ttp://codepad.org/iZ7XtSyH

ついでに MsgBoxYN_plugin.py
MessageBox のはい/いいえをY/Nキーで選べるようにする(フックを登録)
ttp://codepad.org/7tfYMDbe
680名無しさん@お腹いっぱい。:2012/06/26(火) 10:37:40.03 ID:wx8EB7qi0
>>675
7zipだと化けないみたいなので、簡単な対応方法

7zipのDLLを入手・配置した上で、.zip ファイルも 7zip を使うように設定。

# config.py configure関数内
import cfiler_filelist
cfiler_filelist.lister_Zip = cfiler_filelist.lister_Archive
681675
>>680

たった2行で修正できるということで、わけもわからずやってみましたら
ファイル名は化けなくなりました。
でもファイルの中身が正しく表示されなかったりなんだか怪しいです。

展開するとやっぱりおかしいので、内蔵のzipを扱う部分はあちこち
修正が必要みたいです。