<

![endif]-->

fc2ブログ

mirrorMan 2.23版


昨日発売された小説1Q84のBook3から逃げたくて別の何かにやたら集中してしまう。読んでも何も残らないとか単なる娯楽だなどといわれながら、一方では世界中で読まれ、雰囲気を楽しむ娯楽モノ以上の評価があるのはどうしてだろう。たとえば東野圭吾ミステリーなら登場人物が性同一性障害で殺人者でめちゃくちゃな裏切り者だったとしても読んだ後のリアリティは損なわれない。しかし村上春樹は、同じような都会の孤独と死とセックスの話ではあっても、その中の世界に入り込んで読まないとハルキ節に浸っておしまいになってしまう。

UI変更の続き。

お気に入りの追加と削除でマウスに手を伸ばすのが面倒だったので、
F6キー:お気に入り追加(ダイアログではなくテキストボックス)
Delキー:選択しているのがお気に入りであればそれを削除

新規テキストと新規フォルダの作成でマウスに手を伸ばすのが面倒だったので、
Ctrl+N:新規テキスト作成
Shift+Ctrl+N:新規フォルダ

エディタで開く拡張子の設定を思い出すのが面倒だったので、
Shift+Enter:選択しているのがファイルであれば関連付けによらずエディタでオープン。




mirrorMan 2.22版

UIを変えた。

まず右上のチェックマークのボタンをばっさり削除。

散髪したようなサッパリ感だ。

フォルダを左右同時に移動するときはどうすんのか。
Shift+Ctrlキー同時押しながらクリックorエンター。

同時移動でずりずり動きたいときはShift+Ctrl押しっぱとだけ覚えておけば、
それ以外のことは全て忘れてしまっていいのだ。
もう一方にも同じ名前のフォルダがあれば同時に移動する、ただそれだけのことだ。

そしてお気に入りの場合。クリックorエンターで左右両方開くのは従来通りだが、
Shift押しながらで左側だけ、Ctrl押しながらで右側だけ開くという操作をできるようにした。

この開放感は何だ。





mirrorMan 2.20

DFでファイル/フォルダの比較をするときは、アイテムを1つ選択したら同名ファイルを左右ペインから探して起動というUIでしたが、これは我ながら不便でした。それでどのアイテムでも自由に2つ選択できるように。

F12キーまたは右端のDFアイコンクリックで、DFで起動するファイルを選択するモードを示すタイトルバー表示に変わります。

dfimg01.png

dfimg03.png

この状態でファイルまたはフォルダをエンターキーまたはマウスクリックで選択すると、そのアイテムの背景色がオレンジに切り替わります。オレンジのアイテムがもう一度選択されると白に戻って選択はキャンセルされます。

dfimg04.png

二つ目のどれかが選択されると、DF.exeが起動して選択したアイテムが差分表示されます。
フォルダの場合はフォルダ比較画面が表示されます。

内部的には、二つ目の選択アイテムも背景色をオレンジに変更し、オレンジのアイテムを走査して二つあったら起動、起動したら全て白に戻すという感じですが、画面上はただちにDFが立ち上がっているので二つ目のオレンジはDF画面の裏に消える前の一瞬しか見えませんね。IE8だと全く見えません。
画面表示状態と内部動作状態を連動させ、画面が嘘をついてないように制御するのは気を使います。

バイナリモードはバイナリファイルに含まれる文字列をxdoc2txtでテキストダンプしてから比較するモードで、DF.EXEのバイナリ解析モードのことではありません。「更新しました」とかいってExcelだのWordだののファイルをもらったが、変えた箇所や変わってない箇所をDFでくまなくチェックしてやんぞ、という機能です。

もちろんDF.EXEをバイナリ解析モードに設定しておいて、タイトルバーがバイナリモードではない状態で選択すればDF.EXEのバイナリ解析で見ることもできます。




mirrorMan2.08

jquery-ui.jsを読み込むファイル名が間違っていて起動に失敗していたため修正。


mirrorMan2.07 xdoc2txt→DFでデグry

DFアイコンを2回クリックしてファイルを選択する場合の機能、バイナリファイルやUnicode、EUCのファイルをDF.exeでみるときにテキストダンプしてから表示するのがデグッていた。
拡張子を.txtに変えたファイル名をDFに渡していたのでDFからそんなもんありませんエラーだった。

また、拡張子名が取得できないファイル名もxdoc2txtは動作しないのではじくように変更した。
    var txtfnm = sfs.GetBaseName(fnm) +".txt";
if(ssh.NameSpace(lFol).ParseName(txtfnm))
if(6 != wsh.popup(txtfnm +
"\n\n拡張子がtxtのファイル名はxdoc2txtで使用します。"+
"上書きしてもよいですか?",0,title,36))
return title = fds.titleName;
if(! sfs.GetExtensionName(fnm)){
wsh.popup("拡張子が取得できないファイル名は実行できません。",0,title,64);
return title = fds.titleName;
}

また、削除はごみ箱へ移動なので、しまったと思ったらファイルは既に黄泉の彼方ということもなくなった。
    if(6 == wsh.popup(
"xdoc2txtのダンプファイル\n\n"+ txtfnm +"\n\nを削除しますか?",0,title,36)){
ssh.NameSpace(10).MoveHere(txtlPth, 64);
ssh.NameSpace(10).MoveHere(txtrPth, 64);
loadItms(1);
}

PowerShellを勉強するかJavaScript2を待つかどっちか迷っている。
一度に複数を勉強すると、応用的な面に触手を伸ばすエネルギーが落ちる。

ヨーロッパ向けWindows7は独禁対応としてIEのバンドルを外すというアナウンスがあったが、
Tridentエンジンはどうなるのだろうか。HTTPのダウンロードとか、はたまたMSHTAはどうなってしまうのか。



mirrorManに致命的バグ

右端のDFアイコンのボタンを2回押してバイナリファイルの比較をするとき、一度xdoc2txtでテキストファイルにダンプしてからDF.exeに渡しているのだが、xdoc2txtは元のファイル名の拡張子をtxtにして出力しているので、拡張子がtxtのファイルを選択した場合、無条件に上書きしてしまう。

DF.exeはEUCやUnicodeに対応していないので、これはありえる操作だ。

しかもご丁寧に「削除しますかポップアップ」を表示しているので、ほいほいと「はい」を押すとゴミ箱ではなく上書きしてしまったファイルを完全削除までしていた。これはもう地獄への後戻りできない道を舗装しているようなものである。

というわけでバージョンは2.06。ごめんなさい。



mirrorMan2.05+7用.zip

windows7rcでとりあえず動く用。7rcではshell.applicationのフォルダオブジェクト直下にぶらさがってたIsFileSystemとかIsFolderのプロパティがなくなって、.Self配下を参照しないといけなくなっている。それから、デスクトップは特殊フォルダだが、そのParentFolderもnullになっている。なんか結構変わっているみたいだ。

窓の杜 - 【REVIEW】フォルダを同期させるMS純正の高機能コマンド“robocopy”をGUIで「RichCopy」
robocopy、mirrorManでもGUIで使えるようにすると便利かな。

#最近自分のソースがダサく見えてしょうがない。


mirrorMan ver2.05

りそな銀行の国有化が日本が景気のコーナーを曲がる交差点になったと考えるのが現在では一般的だそうだ。サブプライム問題のきっかけは2007/8/6にアメリカン・ホーム・モーゲージ社が従業員の半分以上を一時休職処分にしたうえで倒産を申請したときだったと、ジョージ・ソロスは『ソロスは警告する』に書いている。歴史の当事者はそれが歴史に残るということが分からないし、何が歴史に記録されるかは後の議論によって共有されるものだから、新しい発見があればまた経済史も変わる。

HTMLとJavaScriptでローカルアプリケーションを作成するというのは、MSにとっては敵であるGoogleやAdobeに米を送るようなものなのかもしれない。HTAファイルをwindows 7で使うのに、もう指定席を設けることができなくなった。タスクバーは大きなアイコンが並ぶだけになり、それを右クリックして「タスクバーに表示しておく」を選択すればいつも表示させておくことができるが、HTAはそれができない。

MicrosoftはHTML5とJavaScript2に準拠する姿勢を示しているのではなかったか?ならば、IE嫌いのWeb業界の人間もHTAには興味を示すようになると思う。WindowsがAeroでリッチなアニメーションを誇るように、jQueryUIでセキュリティの制限に邪魔されずにOSの上を自由に飛べるはずなのだ。ガジェットは箱庭のようだし。

先日mirrorManがいきなり動作しなくなって、iniファイルが空っぽの初期設定でしか保存されなくなった。理由は今も分からない。ソース上の原因箇所は以前から触ってないところだし、あらためて見てみれば、なぜそんな書き方をしていたのかも分からない。ともかく直したが、JavaScript2はJSON形式がバインドされるそうだから、ごっそりそれに代えようかと思う。





HTMLでコンボボックス風に マウス長押しで切替えてみる

HTMLのformタグにはコンボボックスがありません。codessさんのマウス長押しハンドリングのライブラリを使って、ちょい長押しでテキストボックスに切り替えてみた。IEでは動いているが、firefoxは長押しがきかず、chromeは切り替えがきかない。なんでだろう。

←サンプルデモ。マウスで長押しでトグル。

jQueryライブラリのmouse_action.jsは上記リンクにあるデモページからいただきました。

上のサンプルデモのソース
<span class="mouseaction">
<select id="downlist">
<option value="クルーグマンと">クルーグマンと</option>
<option value="池田信夫って">池田信夫って</option>
<option value="似てる?">似てる?</option>
</select>
<input type=text id="txtbox" value=""/>
</span>
長押しイベントをアイヤーさせたいタグにclass="mouseaction"します。
<script type="text/javascript">
$('.mouseaction').mousedown(MouseAction._down);
$('.mouseaction').mouseup(MouseAction._up);
$('.mouseaction').mouseover(MouseAction._over);
$('.mouseaction').mouseout(MouseAction._out);
$('.mouseaction').click(MouseAction._click);
$(txtbox).toggle();

MouseAction.click = function(){;}
MouseAction.press = function(){
  txtbox.value = downlist.options[downlist.options.selectedIndex].value;
  $(downlist).toggle();
  $(txtbox).toggle();
}
</script>
プルダウンリストで表示されている値を取ってテキストボックスの値にします。
このサンプルでは使ってませんが、イベント発生元のノードオブジェクト(e)はこちらからでもアクセスできます。

mirrorManにも入れたのでversionは2.04です。IE6環境ではうまく動きませんでしたが、もう知りません。
mirrorMan204.png



mirrorMan ver2.03

画面を複数個開けるようにしました。
(htaタグのsingleinstance属性をyesに変えるだけ)
iniファイルは共有なので、最後に閉じた設定が有効になります。

ファイルパスなんかのストリングは複数箇所にに記述すること自体がだめであり、
したがって変数化する必要もないなんて考えてましたが、
今さら一箇所にまとめました。
var fds = {
dfexe : "ap\\DF\\DF.exe",
xdoc2txtexe:"ap\\xdoc2txt\\xdoc2txt.exe",
chkoffImg : "./img/chkoff.png",
chkonImg : "./img/chkon.png",
handImg : "./img/Hand.png",
smkhandImg : "./img/smkHand.png",
refreshImg :"./img/refresh.png",
restartImg :"./img/Restart.png",
mMnIni : "mirrorMan.ini",
folImg : "./img/fol.bmp",
readMeTxt : "readMe.txt",
titleName : "mirrorMan"
}



ContextMenu.jsのonContextMenu

contextmenujs.png
jQueryプラグインのContextMenu pluginの下のほうにある Example3 より。

ファイルかフォルダをフォーカスしてないときは右クリックしてもメニューを表示しないように変更。
フォーカスといってもIEのそれではなくtextRangeですが。








<div class="contextMenu" id="conMenuLftItms">
<ul>
<li id="deleteItm" >削除 (D)</li>
  :
  :
<li id="verbPropty" >プロパティ</li>
</ul>
</div>
  $('#rhtClkLftItmsAra').contextMenu('conMenuLftItms',{
onContextMenu: function(){return (selItmObj ? true : false)},
menuStyle: { width:'95px' },
itemStyle: { fontFamily:'MS UI Gothic',fontSize:'9pt',border:'none',padding:'0px'},
itemHoverStyle: { border:'none'},
bindings:{
'deleteItm' : function(t){ delItm()},
    :
    :
'verbPropty' : function(t){ invokeVerbs('properties')},
}
});
selItmObjはマウスオーバーでファイル/フォルダオブジェクトを代入し、マウスアウトで削除している変数です。


右クリックメニュー追加とライブサーチ選択の設定追加

filterrhtClickMenu.png
ver2.02。

ファイル名フィルタとファイル内文字列フィルタのテキストボックス2つ、
マウスでも操作できるように右クリックメニューを追加。



090102mirIni.png
遅いマシンでは文字入力ごとの画面更新がストレスなので、エンターキー押下までフィルタしない設定を追加。

iniファイルはCtrl+F1で開いてください。





←[livSch]の値を0に変更する。デフォルトは1。

あとフォルダはフィルタしないようにも変更。


jQuery.uiも1.6rc4にしといた。




mirrorMan - ファイル/フォルダの名前変更

ファイルやフォルダの名前を変更するにはNameプロパティの値を変更するが、
同じ名前のものがすでに存在したとき、
XPとVistaでのShell.Applicationの挙動の違いが大きい。

reNameDupName.png

ここでキャンセルを押すと、-2144927744で落ちてハンドリングできない。
XPだとエラーオブジェクトも拾えなかったので放置。
tryで逃がすことにした。
try{
ssh.NameSpace(ふぉるだ).ParseName(sfs.GetFileName(ふぁいる)).Name = なまえ;
}catch(e){
if(e.number == -2144927744) rollbackRenameItm();
return;
}




mirrorMan 2.00

デグレ修正のマイナーバージョンアップで1.99から2.00になってしまった。あいやー

ファイルかフォルダを移動したときにエラーが表示されていたのを修正。
ファイル名変更中にカーソルを移動して戻ったとき、最後にフォーカスした別のファイルを名前変更してしまっていたのを修正。




作り手の身勝手さ

ファイル内文字列検索で入力ごとにライブフィルタができるといいな
→そうだxdoc2txt使おう
→ActiveX版があった
→コマンドライン経由で起動してファイルI/Oしなくていいなら
→できた!
と、自己満足の高みに達したが、

→ファイルに出せばそのままDFに渡して使える
→なんだこっちのほうがよっぽど使いそう
→自動でインストールするスクリプト作る
→mirrorManで操作されたらそれを促す
→できた!あれ?

だったらEXE版でいい。

でも作ったものを削除すのはためらわれる。
ソースとにらめっこしていると作り手の身勝手な良心が決心の邪魔をする。
自分が得られたものと、使う人が得られるものを混同してしまっている。

あれこれ考え、使用頻度に沿って整理した結果は、作った順序とは逆になった。
DFで差分表示 →EXEも使用
右クリックでテキスト出力 →EXEも使用
ファイル内の文字列検索でのフィルタ表示 →OCXをレジストリ登録した場合のみテキストボックス表示



while(aho.atEndofStream)

笹部 政宏
笹部 政宏
mail




フリーソフツ
Category
はてブ
Monthly Archive
New Entry
New Comment
New Trackback
RSS
Copyright © Kittens flewby me All Rights Reserved.