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

このエントリーをはてなブックマークに追加
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を扱う部分はあちこち
修正が必要みたいです。