【2画面ファイラ】 内骨格 Part1 【Python拡張】
3の方が主流になったらPython覚える
Pythonって全然難しくないのになぁ。
極端な話、関数または条件文の次の行は文字下げ(インデント)するってことさえ知ってれば
何とかなると思う。
インデントは嫌われる理由になっていても難しいと思われる原因にはなってないと思われ。
プログラマー気質の人がそんなにいないということだな
ファイラーにあふ以上の機能が必要という一般人は
作業のありかたを見直した方が早い
>>631 細かなところまで内部を好き勝手に書き換えられるのがいいね
みんなが作ったカスタマイズに関するノウハウやスクリプトを共有できたりすると、もうちょっと流行るんじゃないかと思うけど
>>634 vimでオートインデントすんのどうやんの?
:help autoindent
てかvimスレかと思ったわ。そっちもお気に入りに入ってるから。
>>631 多分キーボメインだから
普通の人はマウスメインのファイラ使ってると思う
>>631 afxの人が言ってるみたいに年取ると設定ファイルガリガリ書くのがしんどいから
もっと包括的な設定のフロントエンドがあればいいと思う(shift+zである程度は設定できるけど)。
>>636 そういうスクリプトのアーカイブがあればありがたいねぇ。
俺は、なるべくextensionフォルダにスクリプト放り込んで、config.pyでimportするようにしてるんだが、
いかんせん改造のレベルが、「元のソースから関数コピって、必要なとこだけ直す」ってのが多くて、公開するにはちと恥ずかしすぎるw
643 :
名無しさん@お腹いっぱい。:2011/11/08(火) 14:00:12.31 ID:fRdEdt1L0
設定ファイルとかも展開した本体フォルダに格納するようにしてほしい。
デフォだと現状user/appdateにフォルダ作られるのがなぁ・・・
設定いじればなんとかなるんかね?
>>643 本体側にあればそっちを読むって仕様じゃなかったっけ?
>>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のパスや選択したファイルのリストを渡して起動って使い方が主です。内骨格本体はあまり拡張してません。
(いろいろとロードして内骨格本体のプロセスが肥大化するのは避けたいのと、内骨格への依存を避ける為。)
内骨格内部でいろいろやるというよりは、外部アプリの起動拠点として使ってます。# ・・・なので、内骨格へフィードバックするようなことがあまりない(^^;
647 :
名無しさん@お腹いっぱい。:2011/11/08(火) 15:35:48.29 ID:fRdEdt1L0
>>644 あ、ほんとだ。お騒がせした。
以前やったけど何度も何度もappdateにフォルダ作られて諦めてた・・・なんだったんだろう。
>>646 乙です。
自分もnon-programmerな人間なのでafxwのマクロでゴニョゴニョやるのが精一杯です。
basic位判りやすかったらなぁ。インデント見ると怯む。
648 :
646: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を書きました。
649 :
646: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
650 :
646: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 すべての登録を解除
登録した場所の一覧情報は、保存されません。
ソートに数字順による並び換えを追加する
# ./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
>>651 nice!
ソートの比較関数に関して、
Pythonはリストやタプルのデータでも比較してくれるので、
数値とそれ以外の文字のリストに分解すると、より簡潔になるよ。
ttp://codepad.org/eEXhZoJv 自分の場合は、画像の連番だったら桁数揃えてリネームしてる。
ファイル名にバージョン番号が付いてる場合だったら、
日付順ソートで目的の並びを得られる場合もあります。
## ディレクトリの中身を隣のpaneで覗き見する拡張機能です
# ./extension/peep_plugin.py
ttp://codepad.org/5v6F01eT プラグインの読み込みは
>>645を参考に
# キーの設定
window.command_PeepDir にキーを割り当ててください
カーソル移動と併用して使えるように、左手で使えるキーへの割り当てをお勧めします。
# 使い方
ディレクトリの上で割り当てたキーを押すと、隣のPaneがその中の場所に移動します。
キーを離すと元の場所に戻ります。
※ 注意点
_onKeyUpをフックしてます。
_onKeyUpの利用が競合する人は何らかの対策が必要になるかもしれません。
>>645のローダでは、プラグインを読む込む順序を保障できないので、その辺は今後の課題。
ジャンプリストで階層メニューを表示するサンプル
# ./extension/JumpList_plugin.py
ttp://codepad.org/J0Hx4Kxy 使い方などはスクリプト内のコメントを参考にしてください
ワンキー決定にしてるのは私の好みです
標準と同じようにエンターで決定するようにするには、onekey_decide=Trueの所をFalseにしてください
面倒臭いので上の階層には戻れませんw
ESCで閉じて最初から選び直せばいいと思うしw
ええで、ええで!
# ショートカットの作成
ttp://codepad.org/t6IU288b 手元の内骨格(version 2.10) では comtypes.shelllink が含まれていなかったので、
コメント中にあるURLよりファイルを./extension/shelllink.py に保存して下さい。
# Tips
ワン・キーで移動できる場所に、ショートカットを纏めておくと、
ディレクトリを利用して階層メニュー的な運用が出来ます。
>>657 ttp://codepad.org/LROhdKbx いろいろと弄ってみました。
内骨格本体と重複する部分を排除して、フック関数を差分のみに変更。
フックを元の関数の前・後を設定できるように・・どちらでも効果はかわりませんが、サンプルってことで。
# config.pyリロードに対応したプラグインのsetup関数について (プログラム書く人向け)
内骨格がconfig.pyリロード時にリセットしてくれない項目に関して、
例えばフック等の追加には、追加済みかどうかをどこかに覚えておく必要があります。
現状では、プラグイン・モジュールはリロードされずにsetup関数が呼ばれてる状態なので、
モジュールのグローバル変数が使えそうですが、プラグインのリロードをサポートした場合、
そのようなグローバル変数の使い方が出来なくなり、変更を強いられます。
とりあえず自分は、windowオブジェクトの属性に放り込んでいますが、
プラグインが増えてくると、この方法もあまり好ましくないので、
拡張機能の為に何らかの名前空間が欲しいところです。
※
>>653 の onKeyUp のフックは、config.pyのリロードに対応していません。
リロードする度に無駄に多くの onKeyUp 関数を呼び出すようになってしまう。=>内骨格の再起動で解消
※
>>658 は元のメソッドを呼び出さずに上書きしているので、このリロード対応の問題はありません。
>>659 訂正
文章末尾の >658 -> >657 でした
# 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 のリロードに対応
リロードすると、無限ループに陥ってた(汗
>>658 !!!
onenoteの運用に思うところがあって
これをリクエストしに久しぶりにこのスレきたんだよ!
ありがとうあとで試してみる
内骨格なんてあったなあと思って作者のサイトいったらpythonスクリプト対応とかで驚いた
作者の他のソフトみたらみんなPython関係だった
これはもうPython勉強するしかないのか
Macで気に入るファイラーが無いからWineで動かして使ってる。
Wine上の内骨格からMacのアプリを呼び出せるしすこぶる快適。
>>664 マジで!?Macで使えんの!?
ワインなに?ワインボトラー?みくいんすとら?それともMacportsやHomebrewのワイン?
>>665 ボトラーでいけた。
msvcr90.dllが無いと起動しないので、vcredist_x86.exeのインストールは必須かも。
内骨格からMacのアプリも起動できるのだけど、WindowsのパスとMacのパスの変換は
してやらないと行けなかったので、アドホックは関数書いて対応。
でも、今日使っていたら日本語入力できないのに気がついた。
色って変えれんの?
拡張子によって色変えたい
2.18を使用してます。
mキーの挙動をカスタマイズしたいけどできない。
myCommandを定義して、
window.keymap[ 'm' ] = myCommand
と書いても、mキーを押したらMakeDirが走る。
カスタマイズできてる人がいたら、どうやってるか教えてください。
書いてる場所が悪いんじゃないの
configure関数の中に書かないとダメ
下の方はリストウィンドウ用の関数(configure_ListWindow)
>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が走ってファイルの移動ができる。
window.keymap[ ckit.KeyEvent( ord('M'), 0, extra=0 ) ] = command_Move
が正しいみたい
extra=0が未選択状態、extra=1が選択有状態
設定メニューのキー割り当てが101もしくは106だと、この方法でmキーに二つのコマンドが割り当てられる仕組みの様子
自分は106afxにしてたから分からんかったw
>>670 ごく最近の更新でその辺の仕様が変わって、今はkeymapテーブルのキーとして文字列を
使うことになったみたい(古いやりかたもまだ一応動くけど、VK_HOMEみたいなのを
キーに使うとdeprecatedだと言われる)
cfiler_mainwindow.pyのconfigure()を見てみると雰囲気は分かる、さらに詳しくは
ckit_key.pyで文字列とWindowsの仮想キーコードのマッピングが行われている
その目的なら、キーとして'm'ではなく'M'を使えばいいはず
673 :
670:2012/04/23(月) 19:17:24.25 ID:+KsecEZk0
>671,672
ありがとうございます。
window.keymap[ ckit.KeyEvent( ord('M'), 0, extra=0 ) ] = command_Move
でいけました。
'M' はダメでした。
zipファイル内に「表」を含むファイル名があると、化けますな。
展開・仮想展開・圧縮、すべて化ける。
すでに内骨格が起動している状態で外部ツールから cfiler.exe -L"ディレクトリ" とかされたときに
ディレクトリだけ移動してくれるようにはできないのかな。
二重起動させたくないんだけどやりかたありますか?
>>399 の拡張で希望な動作できました。
さきにログ読んでおくべきですね、すいません。
user_keymap.py 更新しました. KeyEvent->新しい仕様の文字を返すよう変更
このモジュールで読み込むキー表記は、新しい仕様の表記(S-X等)には対応してません
ttp://codepad.org/tVxlughC 本体側のkeymapが文字列に対応されたので,同様の機能はもっと簡単に実装できますね
今回は以前の設定を読み込んでエラー/警告が出ないようにするのみに留めておきます
>>675 7zipだと化けないみたいなので、簡単な対応方法
7zipのDLLを入手・配置した上で、.zip ファイルも 7zip を使うように設定。
# config.py configure関数内
import cfiler_filelist
cfiler_filelist.lister_Zip = cfiler_filelist.lister_Archive
681 :
675:
>>680 たった2行で修正できるということで、わけもわからずやってみましたら
ファイル名は化けなくなりました。
でもファイルの中身が正しく表示されなかったりなんだか怪しいです。
展開するとやっぱりおかしいので、内蔵のzipを扱う部分はあちこち
修正が必要みたいです。