2016年12月21日水曜日

動的メニューの考察その2


//!*script

// メニューの削除
PPx.Execute("*setcust -|M_hoehoe =");

// メニュー項目の登録
PPx.Execute('*setcust M_hoehoe:項目その(&1)=echo hoge');
PPx.Execute('*setcust M_hoehoe:項目その(&2)=*linemessage hoge');

このようなスクリプトを作り、

*script %0\Script\hoe.js %: %M_hoehoe

とコマンドを実行することで、メニューを動的に変更することができる。
例えば

  • %*getcust()で取得したカスタマイズ状況
  • エイリアス
  • フォルダ内のファイル

等に応じて、その時々で異なるメニューを表示できるわけだ。

今まではメニューの表示もスクリプト内に含めていたが、これを分離したほうが、動的メニューを他のメニューの一階層として使えたりして、よりいいんじゃないかと思うようになった。

参考





2016年12月17日土曜日

コピー/移動/解凍先フォルダ選択を別窓で

Paper Plane xUI まとめサイトにある


を、一行編集を開かずにできるようにする。

例えば、移動させたいファイルをマークした後、Shift+Mを押せばPPC[Z]が起動。



PPC[Z]で移動先フォルダを表示した後、Shift+Enterを押せば、そこにマークファイルが移動し、PPC[Z]を閉じる。


準備


以下を編集して取込。解凍に使っているwrap_7zG.jsについては



を参照。

KC_main    = {
ESC    ,*ifmatch /C[A-Y]/,%n %:%K"@ESC"%:*stop
        *ifmatch CZ,%n %:%K"@Q"
\M    ,*ifmatch /C[A-Y]/,%n %: *alias ppcz_cmd = *file !move ,%%*extract(%n"%%%%@*8FCDN"),%%1 %: *ppc -bootid:z -single
\C    ,*ifmatch /C[A-Y]/,%n %: *alias ppcz_cmd = *file !copy ,%%*extract(%n"%%%%@*8FCDN"),%%1 %: *ppc -bootid:z -single
\U    ,*ifmatch /C[A-Y]/,%n %: *alias ppcz_cmd = *script %0Script\wrap_7zG.js,%%*extract(%n"%%%%a8FDC"),%%1 %: *ppc -bootid:z -single
\ENTER    ,*ifmatch CZ,%n %: *execute ,%'ppcz_cmd' %: %K"@Q" %: *stop
    %K"@\ENTER"
}


やり方


処理元のファイルをマークする。ファイルが一つのみの場合はカーソルをあわせるだけでもいい。



  • 移動:Shift+M
  • コピー:Shift+C
  • 解凍:Shift+U

を押すと、PPC[Z]が開く。




この窓で処理先のフォルダを表示したのち、Shift+Enterを押す。すると、カレントフォルダにマークファイルが移動/コピー/解凍したのち、PPC[Z]が閉じる。

2016年12月5日月曜日

複数の設定をメニューで切り替え

僕は今、PPxを1画面タブ型メインで使っているが、たまに2画面型や独立窓型も使いたくなったりする。
そこで、それぞれの設定ごとにCFGファイルを用意しておき、簡単に切り替えられるようにする。


準備


PPxフォルダにCFGFILEフォルダを作り、そこに使い分けしたいCFGファイルを移動する。



以下をScriptフォルダに保存。

CFGmenu.cfg

//!*script
// CFGファイル取込用メニュー

fs = PPx.CreateObject("Scripting.FileSystemObject");
var objFileSys = new ActiveXObject("Scripting.FileSystemObject");
var fn = PPx.Extract('%0')+"CFGFILE";

// フォルダの有無をチェック
if (objFileSys.FolderExists(fn) == false) {
    PPx.Echo(fn+"は存在しません");
    PPx.Quit(-1);
}

// メニューの削除
PPx.Execute("*setcust -|M_hoehoe =");

// フォルダリストを取得し動的メニューの登録
objFolder = objFileSys.GetFolder(fn);
e = new Enumerator(objFolder.Files); 
for( ; !e.atEnd(); e.moveNext()) {
  var basename = objFileSys.GetBaseName(e.item().Name);
  var filepath = fn+"\\"+e.item().Name;
  PPx.Execute('*setcust M_hoehoe:'+basename+'=%Ob *PPCUST CS '+filepath);
}

// メニューを開く
PPx.Execute("%M_hoehoe");

以下を編集して取込。

-|M_Omake =
-|M_BgType =
-|M_cust =

M_cust    = { ** comment **
カスタマイザ(&C) = %K"@CUSTOMIZE"
編集して取込(&E) = %Ob *PPCUST /edit
-- = 
取り込み(&1) = %Q"%FCを取り込みます"%:%Ob *PPCUST CS "%FCD"
追加(&2) = %Q"追加取込します"%:*customize @%FCD
-- = 
CFGFILEに書き出し(&3) = %Ob *PPCUST CD %0\CFGFILE\%${%*getcust(_User:SAVEDATA)%}.CFG %: *setcust _User:SAVEDATA=%${%*getcust(_User:SAVEDATA)%}
CFGFILEから読み込み(&4) = *script %0\Script\CFGMenu.js
指定書き出し(&5) = %"指定ファイルに書き出します"%Ob *PPCUST CD %{%1\PPX-%*nowdatetime(y-N-D)%|.CFG%}
-- = 
初期化(&I) =  %Q"初期化します"%:%Ob *PPCUST CINIT
-- = 
壁紙の設定(&W) = %M_Omake
窓オプション(&O) = %K"@C_WIND"
-- = 
再起動(&R) =  *closeppx %: *ppc
アップデート(&U) = %Ob *checkupdate p
バージョン情報(&V) = %K"@ABOUT"
}

M_Omake    = {    ** comment **
壁紙を表示する位置(&T) = %M_BgType
壁紙を明るさ(&B) = *customize X_bg:Bright=%"明るさ(Bright)"%{%*getcust(X_bg:Bright)%}
壁紙を透明度(&O) = *customize X_bg:Opaque=%"透明度(Opaque)"%{%*getcust(X_bg:Opaque)%}
}

M_BgType    = {    ** comment **
しない = *customize X_bg:Type=0
左上 = *customize X_bg:Type=1
右上 = *customize X_bg:Type=3
デスクトップと同じ = *customize X_bg:Type=10
一体化窓内でつながるように調整 = *customize X_bg:Type=20
}

KC_main = { ; PPcメイン窓
F12 ,%M_cust,C
}
KV_main = { ; PPcメイン窓
F12 ,%M_cust,C
}

やり方


F12を押すと、カスタマイズ用メニューが表示される。



「CFGFILEから読み込み」を選択すると、CFGFILEフォルダ内のファイルがメニュー表示される。選択すると、その設定を取り込む。





「CFGFILEに書き出し」を選択すると、一行編集ダイアログが表示されるので、適当な名前を入力する。これで、現在の設定をCFGFILEフォルダに保存する。入力した名前は_User:SAVEDATAに保存され、次回「CFGFILEに書き出し」選択時のデフォルト名になる。




2016年9月26日月曜日

ImageMagickで画像処理(改)

以前にもImageMagickで画像処理で記事にしたのだが、それ以降の更新によって使えなくなっていたので書き直し。

  • convert.exeがmagick.exeに
  • コマンドラインの順序が微妙に変わる

という変更があったようである(多分)。


やり方



以下を編集して取込。これで、拡張子がJPG、PNG、JPEG、BMPのファイル上でShift+Enterを押せば、画像処理メニューが出る。

-|M_Picture =

A_exec = { ; エイリアス
imagemagic    = "C:\Program Files\ImageMagick-7.0.2-Q16\magick.exe"
azpainter    = D:\bin\azpt\AzPainter2.exe
}

M_Picture = { ** comment **
&Azpainter = %Ob %'azpainter' %FCD
ペイント(&P) = mspaint %FCD
-- = 
左に90度回転(&L) = %Ob %'imagemagic'  %FCD -rotate 270 %FCD
右に90度回転(&R) = %Ob %'imagemagic' %FCD -rotate 90 %FCD
拡大縮小 = %Ob %'imagemagic' %FCD -geometry %"数値を入力してください"%{30%}%% %"ファイル名を入力してください"%{%|%X%|.%T%}
拡張子を変換 = %Ob %'imagemagic' %FCD %X.%"拡張子を入力してください"%{%|%T%|%}
マークファイルを横に連結 = %Ob %'imagemagic' %#FCD +append %"ファイル名を入力してください"%{%|%*nowdatetime(Y-N-D-HMS)%|.png%}
非透過に = %Ob %'imagemagic' %FCD -background white -alpha remove %FCD
-- = 
壁紙にする(&W) = *customize X_bg:Path=%FDC %: *customize X_bg:Type=10
}

E_scr = { ; \[Enter]用判別
JPG ,%M_Picture,A
PNG ,%M_Picture,A
JPEG ,%M_Picture,A
BMP ,%M_Picture,A
}

リンク


コマンドライン一覧

追記 2017/07/29


エラーが出てうまく動かないなと思いながら放置してたが、Visual C++ 2013 Redistributable Packageをインスコして再起動するといいらしい。

2016年9月24日土曜日

マウスジェスチャーのカスタマイズ

XC_GestとXV_dragを設定することでマウスジェスチャーが可能になる。例えばこんな感じだ。

XC_Gest = 1 ; 右ボタンでジェスチャーを 0:しない 1:する 2:する+D&D可
XV_drag = 0,1,3,2 ; ドラッグ開始ボタン スクロール,選択,窓移動,ジェスチャ(右のみ)
  ; 0:使用しない 1:左 2:右 3:中/ホイール 4:左右同時 5:第4 6:第5

今回は、このマウスジェスチャーをカスタマイズする方法について。

カスタマイザーでの設定方法


マウス割当てタブを開き、種類からMC_clic(PPcの場合。PPvの場合はMV_clic)を。右上の項目から新規を選択。①のドロップダウンリストから、「RG 右ジェスチャ」を選択する。ドロップダウンリストの最初にあるが、一度ドロップダウンリストを開き、選択をし直す必要がある。



すると、アクション欄に「RG_」と記入される。



割当てたいマウスジェスチャーを設定する。矢印ボタンをクリックすれば、アクション欄に矢印に応じた文字が入力されていく。


次に登録内容詳細を記述する。直接入力してもいいし、コマンド一覧から選択しても、②のドロップダウンリストから選択してもいい。
それが終わったら、設定を押せば、この割当てが登録される。
設定が全て終わったら、下部のOKボタンか適用を押せば、設定が反映される。


CFGで編集


CFGのMC_clic(PPcの場合。PPvの場合はMV_clic)を編集することでも、マウスジェスチャーをカスタマイズすることができる。  書式は次のようになっている。
MC_click = { ; PPc メイン窓
RG_DR ,*pane closetab
RG_DU ,%K"@BS"
RG_L ,*pane select h-1
RG_LR ,*pane newtab
RG_R ,*pane select h+1
RG_U ,%K"@BS"
RG_UL = @'\'
RG_UR ,*cursor 8,1,13,0,13,0
}

左側が

RG_(ジェスチャー)

となっており、右側が実行内容だ。ジェスチャーは


L:左
R:右
U:上
D:下


である。

マウスクリック割当てのカスタマイズ



マウスクリック割当てのカスタマイズは
  1. ボタンの種類
  2. 対象領域
  3. コマンド

の三つを設定することになる。

カスタマイザーでもCFGでも設定することができるが、まずはカスタマイザーを用いる方法から。

カスタマイザーでの設定方法



マウス割当てタブを開き、種類からMC_clic(PPcの場合。PPvの場合はMV_clic)を。右上の項目から新規を選択。①のドロップダウンリストから、割り当てたいボタン種を選択する。



試しに、左クリックを選択してみよう。



すると、アクション欄に「L_」と記入され、①の下に②のドロップダウンリストが新たに現れる。




②のドロップダウンリストから対象領域を選択する。ここでは空欄を選択してみる。


次に登録内容詳細を記述する。直接入力してもいいし、コマンド一覧から選択しても、③のドロップダウンリストから選択してもいい。
それが終わったら、設定を押せば、この割当てが登録される。
設定が全て終わったら、下部のOKボタンか適用を押せば、設定が反映される。




CFGで編集


CFGのMC_clic(PPcの場合。PPvの場合はMV_clic)を編集することでも、マウスクリックの割当てをカスタマイズすることができる。

書式は次のようになっている。

MC_click = { ; PPc メイン窓
&LD_ENT = @&ENTER
&LD_ICON = @&ENTER
LD_ENT = @ENTER
LD_FRAM = @&F6
M_ENT = @N
RG_L = @^LEFT
RG_R = @^RIGHT
R_ENT = @^ENTER
W_ENT = @N
X_ENT = @^LEFT
^LD_ENT = @^\A
}

左側は

(シフトキー)(ボタン種)_(領域名)

となっており、右側が実行内容だ。

LD_ENTであれば「エントリ(ENT)を左ダブルクリック(LD)した時」の意味であり、L_FRAMであれば「フレーム(FRAM)を左クリック(L)した時」の意味。
&や^は修飾キーで、&LD_ENTであれば「エントリ(ENT)をAltキー(&)を押しながら左ダブルクリック(LD)した時」になるわけだ。
慣れたら、カスタマイザーを使うよりはCFGを編集する方が、早くて楽かもしれない。


ボタン種


L  左
LD  左ダブル
LH  左長押し
M  中
MD  中ダブル
MH  中長押し
R  右
RD  右ダブル
RH  右長押し
W  左右同時
WH  左右同時長押し
X  第4ボタン
XD  第4ボタンダブル
XH  第4ボタン長押し
Y  第5ボタン
YD  第5ボタンダブル
YH  第5ボタン長押し
H  左チルト
I  右チルト

領域名,PPc,PPv


FRAM  窓枠
SYSM  窓枠アイコン
TITL  タイトルバー
MINI  最小化ボタン
ZOOM  最大化ボタン
CLOS  [閉じる]ボタン
SCRL  スクロールバー
MENU  メニュー
LINE  ステータス行 PPc,PPvの最上位の1行
HMNU  Hidden Menu PPcの情報行,PPvのステータス行に表示されるメニュー
SPC  空欄(PPcの空欄エントリ,PPvの表示領域)

(PPc)
PATH  パス表示行 一体化時のみ表示される現在ディレクトリ名
INFO  情報行 2行分のエントリの詳細を表示する
ICON  アイコン表示 情報行の左端に表示されるアイコン
MARK  マーク エントリ表示行の左端約2文字分のマークチェック用
ENT  エントリ カーソル移動可能な行
TABB  タブボタン
TABS  タブボタン一覧の空欄部分
HEAD  カラムヘッダ(R_HEADのみ指定可能、%si"HeaderSortU"でクリックしたカラムの昇順、%si"HeaderSortD"で降順の値を取得でき、*sortentry 等で使用できます。)

(PPtray)
ICON  タスクトレイアイコン


2016年9月23日金曜日

隠しメニューのカスタマイズ


PPc下部にある情報行に注目しよう。



情報行にマウスカーソルをあわせると



このように隠し項目が表示される。これが隠しメニューだ。現れた各項目をクリックすると、何らかのコマンドを実行する。

同様の隠しメニューは、PPvにも存在する。



今回は、この隠しメニューをカスタマイズする方法について。

カスタマイズのポイント


  • HM_ppcを編集することにより、PPcの隠しメニューを。HM_ppvを編集することにより、PPvの隠しメニューをカスタマイズすることができる。ツールバーメニューのように、新規に作って登録する、ということはできないようだ。
  • PPcだと隠しメニューは二段表示になる。前半にある項目が上段、後半にある項目が下段になる。
  • 表示する文字には、4文字のアルファベットの他にも、2文字の漢字を利用することもできる。視認性を高めるには、漢字にしてみてもいいかも?

カスタマイザーを使う場合


ボタンタブを開き、種類からHM_ppcを選択すればいい。PPvの場合はHM_ppvだ。



①が表示名で、②が実行するコマンド。①の右にある「文字色」と「背景色」で、色を変更する。項目の設定が終わったら、忘れずに「設定」を押そう。
新しい項目を追加したい場合は、右上から新規を選択。不要な項目は「削除」で削除する。

CFGを直接編集する場合


デフォルトは以下。カスタマイザーよりは、CFGを直接編集する方がやりやすいかも。
HM_ppc = { ; PPc(前半が上段、後半が下段
Root , _CYA,_AUTO = @'\'
allM , _AUTO,_AUTO = @HOME
Driv , _AUTO,_AUTO = @\L
Copy , _AUTO,_AUTO = @C
Edit , _AUTO,_AUTO = E
Pack , _AUTO,_AUTO = P
Ren  , _AUTO,_AUTO = @R
Sort , _AUTO,_AUTO = @S
MkDr , _AUTO,_AUTO = @K
Tree , _AUTO,_AUTO = @\T
Exec , _AUTO,_AUTO = @X
Shel , _AUTO,_AUTO = @H
Up   , _CYA,_AUTO = @BS
revM , _AUTO,_AUTO = @\HOME
Pjmp , _AUTO,_AUTO = @0
Move , _AUTO,_AUTO = @M
View , _AUTO,_AUTO = @N
Unpk , _AUTO,_AUTO = @U
Del  , _AUTO,_AUTO = @D
Writ , _AUTO,_AUTO = @W
Wid  , _AUTO,_AUTO = @';'
Attr , _AUTO,_AUTO = @A
Find , _AUTO,_AUTO = @F
}
HM_ppv = { ; PPv
disp , _AUTO,_AUTO = @':'
code , _AUTO,_AUTO = @'@'
Find , _AUTO,_DBLU = @F
F ^  , _AUTO,_DBLU = @'['
F v  , _AUTO,_DBLU = @']'
}

2016年9月21日水曜日

最近のコピー(移動/解凍)先フォルダをメニュー表示

最近、ファイルのコピー(移動/解凍)先にしたパスをメニュー表示。それを選択すればコピー(移動/解凍)できるようにする。


 

準備


以下をScriptフォルダに保存。

stackalias.js

//!*script
// 第一引数 : エイリアスのベースネーム
// 第二引数 : 登録内容

// 「第一引数+連番」のエイリアスに、第二引数を登録する
// 第一引数がhogehogeであれば、最初はhogehoge0、次はhogehoge1という具合
// 第二引数が既に登録済みであれば、それがhogehoge0になるよう順番を入れ替える

// 引数がなければ終了
if (PPx.Arguments.Length < 2){
  PPx.SetPopLineMessage("引数が正しくありません。");
  PPx.Quit(-1);
}

MAX_CMD = 5; // 連番の最大値

var cmd = PPx.Arguments.Item(0);
var macro = PPx.Arguments.Item(1);

// 既に登録されているかチェック。登録されていれば末尾の数値を取得
for (var i = 0; i <= MAX_CMD; i++) {
  if (PPx.Extract("%'"+cmd + i + "'") == PPx.Extract(macro)){
    var i2 = i;
    break;
  }
}

// パスを登録する。パスが登録済みかどうかで分岐
if (i2==null) { // パスが未登録なら登録
  for (var i = MAX_CMD; i > 0; i--) {
    PPx.Execute("*alias "+cmd+i+" = %'"+cmd+(i-1)+"'");
  }
  PPx.Execute("*alias "+cmd+0+" = "+macro);
} else if (i2!=0) { // パスが登録済みかつ末尾が0以外の時は、登録内容の順番を入れ替える
  for (var i = i2; i > 0; i--) {
    PPx.Execute("*alias "+cmd+i+" = %'"+cmd+(i-1)+"'");
  }
  PPx.Execute("*alias "+cmd+0+" = "+macro);
}

以下を編集して取込。解凍に使っているwrap_7zG.jsについては、


を参照。

-|M_CopyDestDir =
-|M_MoveDestDir =
-|M_UnpackDestDir =

KC_main = { ; PPcメイン窓
C ,*ppcfile copy /compcmd *script %0\Script\stackalias.js,copy_dest,%%hd0
M ,*ppcfile move /compcmd *script %0\Script\stackalias.js,move_dest,%%hd0
U ,*set hoge=%"解凍先"%eRd%!2 %: *script %0\Script\wrap_7zG.js,"%a8FDC",%'hoge' %: *script %0\Script\stackalias.js,unpack_dest,%'hoge'
}
M_CopyDestDir = { ** comment **
&A %'copy_dest0' = *ppcfile !copy /dest:%*name(DC,%'copy_dest0')
&B %'copy_dest1' = *ppcfile !copy /dest:%*name(DC,%'copy_dest1') /compcmd *script %%0\Script\stackalias.js,copy_dest,%%'copy_dest1'
&C %'copy_dest2' = *ppcfile !copy /dest:%*name(DC,%'copy_dest2') /compcmd *script %%0\Script\stackalias.js,copy_dest,%%'copy_dest2'
&D %'copy_dest3' = *ppcfile !copy /dest:%*name(DC,%'copy_dest3') /compcmd *script %%0\Script\stackalias.js,copy_dest,%%'copy_dest3'
&E %'copy_dest4' = *ppcfile !copy /dest:%*name(DC,%'copy_dest4') /compcmd *script %%0\Script\stackalias.js,copy_dest,%%'copy_dest4'
}

M_MoveDestDir = { ** comment **
&A %'move_dest0' = *ppcfile !move /dest:%*name(DC,%'move_dest0')
&B %'move_dest1' = *ppcfile !move /dest:%*name(DC,%'move_dest1') /compcmd *script %%0\Script\stackalias.js,move_dest,%%'move_dest1'
&C %'move_dest2' = *ppcfile !move /dest:%*name(DC,%'move_dest2') /compcmd *script %%0\Script\stackalias.js,move_dest,%%'move_dest2'
&D %'move_dest3' = *ppcfile !move /dest:%*name(DC,%'move_dest3') /compcmd *script %%0\Script\stackalias.js,move_dest,%%'move_dest3'
&E %'move_dest4' = *ppcfile !move /dest:%*name(DC,%'move_dest4') /compcmd *script %%0\Script\stackalias.js,move_dest,%%'move_dest4'
}
M_UnpackDestDir = { ** comment **
&A %'unpack_dest0' = *script %0\Script\wrap_7zG.js,"%a8FDC",%'unpack_dest0'
&B %'unpack_dest1' = *script %0\Script\wrap_7zG.js,"%a8FDC",%'unpack_dest1' %: *script %0\Script\stackalias.js,unpack_dest,%'unpack_dest1'
&C %'unpack_dest2' = *script %0\Script\wrap_7zG.js,"%a8FDC",%'unpack_dest2' %: *script %0\Script\stackalias.js,unpack_dest,%'unpack_dest2'
&D %'unpack_dest3' = *script %0\Script\wrap_7zG.js,"%a8FDC",%'unpack_dest3' %: *script %0\Script\stackalias.js,unpack_dest,%'unpack_dest3'
&E %'unpack_dest4' = *script %0\Script\wrap_7zG.js,"%a8FDC",%'unpack_dest4' %: *script %0\Script\stackalias.js,unpack_dest,%'unpack_dest4'
}

やり方


Cを押してファイルをコピー。



すると、コピー先のパスがエイリアスcopy_dest0に保存される。



次にファイルをコピーすると、そのコピー先パスはcopy_dest1に登録される。さらにその次のコピー先パスはcopy_dest2に……。

移動(M)のときは

move_dest0
move_dest1
move_dest2
move_dest3


解凍(U)のときは

unpack_dest0
unpack_dest1
unpack_dest2
unpack_dest3

の順番で処理先のパスが登録される。

パスは5つまで登録でき、新しく実行したものは自動でメニューの上の方に来るようにする。ちなみに、記憶数を変えたいときはstackalias.jsのMAX_CMD = 5;の数値をいじる。

蓄積したメニューは


%M_CopyDestDir
%M_MoveDestDir
%M_UnpackDestDir

を実行すれば表示される。適当なキー等に登録しよう。僕は右クリックメニューに登録している。



追記 2016/09/25


ファイル名に空白があると書庫の展開がうまくいかない場合があったので、一部修正。"%a8FCDN"を"%a8FDC"にした。

2016年9月16日金曜日

タブの色をパスで分岐


パスで条件分岐し、タブに色を付けてみる。



以下を編集して取込。
KC_main = { ; PPcメイン窓
LOADEVENT ,*ifmatch "/C:\\Users\\tukasa\\Dropbox/",%1 %: *pane color ,_BLA,H507fff %: *stop
 *ifmatch "/D:\\bin/",%1 %: *pane color ,_BLA,He0feff %: *stop
 *ifmatch "/D:\\Data/",%1 %: *pane color ,_BLA,H7aa0ff %: *stop
 *ifmatch "/D:\\Download/",%1 %: *pane color ,_BLA,Heeeeaf %: *stop
 *ifmatch "/D:\\Temp/",%1 %: *pane color ,_BLA,H98fb98 %: *stop
 *ifmatch "/D:\\Work/",%1 %: *pane color ,_BLA,Hcce5ff %: *stop
 *pane color ,_AUTO,_AUTO
FIRSTEVENT ,*ifmatch "/C:\\Users\\tukasa\\Dropbox/",%1 %: *pane color ,_BLA,H507fff %: *stop
 *ifmatch "/D:\\bin/",%1 %: *pane color ,_BLA,He0feff %: *stop
 *ifmatch "/D:\\Data/",%1 %: *pane color ,_BLA,H7aa0ff %: *stop
 *ifmatch "/D:\\Download/",%1 %: *pane color ,_BLA,Heeeeaf %: *stop
 *ifmatch "/D:\\Temp/",%1 %: *pane color ,_BLA,H98fb98 %: *stop
 *ifmatch "/D:\\Work/",%1 %: *pane color ,_BLA,Hcce5ff %: *stop
 *pane color ,_AUTO,_AUTO
}

解説


LOADEVENTとFIRSTEVENTを使い、ディレクトリ読み込み時のイベントと、窓を開いた時のイベントを捉えている。

*ifmatchで条件分岐。この例では、

  • C:\Users\tukasa\Dropbox
  • D:\bin
  • D:\Data
  • D:\Download
  • D:\Temp
  • D:\Work

がパスに含まれているかどうかで分岐させているわけだ。各自の環境にあわせ、パスは置き換えよう。

タブの色は、

*pane color [ID][,[text color][,back color]]

で変えている。text color と back color の箇所を好きな色に変えればよい。色の指定は、

文字形式:
_BLA : 黒 _BLU : 青 _RED : 赤 _MAG : 紫
_GRE : 緑 _CYA : 明水色 _BRO : 黄色 _WHI : 白
_DBLA: 暗灰 _DBLU: 暗青 _DRED: 暗赤/茶 _DMAG: 暗紫
_DGRE: 暗緑 _DCYA: 暗水 _DBRO: 暗黄 _DWHI: 灰
_MGRE: 明緑 _SBLU: 水色/空 _CREM: 暗白 _GRAY: 明灰
_AUTO: 既定の色を使います。使用する色は項目毎に異なります。
※_MGRE,_SBLU,_CREM は 256色で正しく表示できません。

数値形式:
基本色以外は、Hbbggrr と、16進数で指定する。

とのこと。

2016年9月14日水曜日

PPxでツールバーのカスタマイズ

挨拶


つかさです。
今回はツールバーのカスタマイズについて。


今まではキーボード操作が基本でほとんど手を出してこなかったが、マウスを使うようになって、やっぱここもいじっといた方がいいよなと思うようになった。


ボタン用アイコンの準備


使用したいアイコン画像を、横並びに連結した画像ファイルを用意する。使用できる画像形式はbmpだが、各種プラグインがあれば他の形式でもいいみたいだ。



カスタマイザーでメニューを作成


カスタマイザーを開き、ボタンタブを選択する。
「種類」に表示されているのは登録済みのメニュー。B_から始まるのがツールバーメニューで、HM_から始まるのが隠しメニューだ。

まずは、「PPc標準ツールバー /B_cdf」を選択してみよう。



青い線で囲った箇所に、メニュー名「B_cdef」が入力されている。これを消して、新規メニュー名を入力する。ここでは「B_test」とする。


参照をクリックし、先に準備した画像を選択する。これでアイコン一覧が表示される。


  1. 利用したいアイコンをクリック
  2. 項目名に、ツールチップに表示する文字列を記述
  3. 登録内容詳細に、実行する内容を記述
  4. 設定をクリック


すると、新たにツールバーメニューB_testが作成され、そこに先に登録した項目が登録される。



次いで、2つ目の項目を登録する。

  1. 「種類」からB_testを選択
  2. 右上から新規を選択
  3. 利用したいアイコンをクリック
  4. 項目名に、ツールチップに表示する文字列を記述
  5. 登録内容詳細に、実行する内容を記述
  6. 設定をクリック



これで、二つ目の項目が登録される。 同様にして、項目を追加していく。
区切り線を挿入したい場合は、「線S」をクリックして、区切り線を挿入する。


項目を全て追加したら、適用をクリックしよう。

作成したツールバーを登録


「メニューバー - 表示 - レイアウト - 上部ドック」から、先に作成したツールバー(ここではB_test)を選択する。




 これで、B_testが登録される。


2016年9月10日土曜日

PPxをタブ型一画面で使う


挨拶


つかさです。
PPxをタブ型一画面で使ってみる。




こんなのです。僕は今までタブを活用したことがあまりなかったのだが、マウスを中心にするのならタブも悪くはないのではないかと思うようになった。

タブ型一画面にする


以下を編集して取込。

X_mpane = 1,1 ; 一体化時の最大同時表示ペイン数,起動時のペイン数
X_combo = 1 ; 複数 PPc を一体化 0:しない 1:する

これで

  • 一体型
  • ペイン数を1で固定

となる。

マウスジェスチャーを使えるようにする


マウスジェスチャーを利用し、Webブラウザのようにタブを扱えるようにする。

以下を編集して取込。

XC_Gest = 2 ; 右ボタンでジェスチャーを 0:しない 1:する 2:する+D&D可
MC_click = { ; PPc メイン窓
RG_DU ,%K"@BS"
RG_LR ,*pane newtab
RG_DR ,*pane closetab
RG_L ,*pane select h-1
RG_R ,*pane select h+1
}

これで

↓↑:親フォルダへ
←→:新しいタブを開く
↓→:タブを閉じる
←:左のタブへ
→:右のタブへ

という挙動になる。


2016年9月5日月曜日

PPxでマウスジェスチャー

あいさつ


いつの間にかPPvでもマウスジェスチャーができるようになっていた(俺が気づいてなかっただけだけど)。
これで、俺がいつか遠い昔に目指していた「片方の手だけで画像ファイル等をダラダラ閲覧する」ことが可能になる。そう、ブラウザでマウスジェスチャーだけで適当なサイトをダラダラ閲覧するように!
          ∧_∧         ⊂(´・ω・`)つ-、       ///   /_/:::::/        |:::|/⊂ヽノ|:::| /」     / ̄ ̄旦 ̄ ̄ ̄/|   /______/ | |   | |-----------| |
参考:片方の手だけでだらだらキーボード打ちたい

準備


以下を編集して取込。

XC_Gest = 2 ; 右ボタンでジェスチャーを 0:しない 1:する 2:する+D&D可
XV_drag = 0,1,3,2 ; ドラッグ開始ボタン スクロール,選択,窓移動,ジェスチャ(右のみ)
  ; 0:使用しない 1:左 2:右 3:中/ホイール 4:左右同時 5:第4 6:第5
MC_click = {
RG_L = @^LEFT
RG_R = @^RIGHT
RG_DU    ,%K"@BS"
RG_DR ,%K"@&F4"
}
MV_click = {
RG_L    ,*execute C,*cursor 6, -1 %: %KC"@N"
RG_R    ,*execute C,*cursor 6, 1 %: %KC"@N"
RG_U    ,%KC "@UP @N"
RG_D    ,%KC "@DOWN @N"
RG_DU ,%K-C"@BS@N"
RG_DR ,%K"@&F4"
LD_SPC ,*ifmatch attribute:d,%*extract(C"%%FCDN") %: %K-C"@Enter @N" %: *stop
 %K-C"@BS@N"
}


使い方


マウスジェスチャーは右クリックから行う。

PPc

→:履歴を進む
←:履歴を戻る
↓↑:上の階層へ
↓→:閉じる

PPv

→:右のファイルへ
←:左のファイルへ
↑:上のファイルへ
↓:下のファイルへ
↓↑:上の階層へ
↓→:閉じる
左ダブルクリック:フォルダ上なら下層移動。ファイル上なら上の階層へ


マウスジェスチャーは情報行に表示される。


右クリックから↓のマウスジェスチャーをすると下のファイルを表示する。



 PPvを閉じたい時は右クリックから↓→のマウスジェスチャー。


2016年8月7日日曜日

Linux Mint Xfceインストール時のメモ

Acer Aspire E11のHDDをSSDに換装した後、Linux Mint Xfceを入れてみた。その後にすることのメモ。

日本語化


$ sudo apt update
$ sudo apt dist-upgrade

としてパッケージを最新状態にした後、Fcitx-Mozc をインストールし、有効に。

$ sudo apt install fcitx-mozc --install-recommends
$ im-config -n fcitx

参考: 人気の「Linux Mint 17.2」/早速日本語入力を試す - ハルさんの電脳メモ 


輝度の調整



xbacklightをインストール。

$ sudo aptitude install xbacklight


次に、「セッションと起動」から「自動開始アプリケーション」を選んで「Add」。

名前:ディスプレイ輝度
説明:xbacklightで暗くする
コマンド:xbacklight -set 30

参考:LinuxMint17でのディスプレイ輝度の調整 - Raspi-Linux ガジェットベース


タッチパッドを無効化




僕のPCでは、タッチパッドを有効にしてると、なぜかたまにマウスカーソルが画面上を飛び回る愉快な状態になるので、無効化する。
スタートボタンをクリックし、「設定→マウスとタッチパッド」から無効化。


電池残量をタスクトレイに表示




タスクトレイを右クリックし、「パネル→新しいアイテムの追加」から「電源管理プラグイン」を追加。

Chrome


公式サイトからダウンロードし、インスコする。


Emacs


$ sudo apt install emacs

でインストール。次に、「.emacs」を編集し、以下を追加。

;;起動時の画面を消す
(setq inhibit-startup-message t)

;;アイコンを消す
(tool-bar-mode -1)

; 行番号表示
(require 'linum)
(global-linum-mode)

;; メッセージを消す
(setq initial-scratch-message "")

;; beep音を消す
(setq visible-bell t)
(setq ring-bell-function 'ignore)

;; *.~ とかのバックアップファイルを作らない
(setq make-backup-files nil)

;; .#* とかのバックアップファイルを作らない
(setq auto-save-default nil)

;; .emacs.dにパスを通す
(add-to-list 'load-path "~/.emacs.d")

;; howm-create2dir読み込み
(require 'howm-create2dir)

;; howmファイルをhowm2dirモードで開く
(setq auto-mode-alist
      (cons (cons "\\.howm$" 'howm-create2dir-mode) auto-mode-alist))

;; 文字コードをshift-jisに
(set-language-environment "Japanese")
(prefer-coding-system 'shift_jis)

次に、homeに「.emacs.d」フォルダを作成し、そこに以下のスクリプトを入れる(以前作ったやつをすっごく適当に改変したものなのでそのうち見直したい)。これで、Emacs起動後ミニバッファで「make-howm-create2dir-file」と入力すると、DropboxフォルダのTempフォルダにhowmを作成できる。
makehowm2dir.el 

;;; howmファイルを作成
(defun make-howm-create2dir-file (&optional howm-dir)
  (interactive)
  (let* ((filename (format-time-string "%Y-%m-%d-%H%M%S.howm"))
  (filepath
   (if howm-dir
       (concat (file-name-as-directory howm-dir) (format-time-string "%Y-%m-%d-%H%M%S.howm"))
     (format-time-string "Dropbox/Temp/%Y-%m-%d-%H%M%S.howm"))))
;;;     (format-time-string "%Y-%m-%d-%H%M%S.howm"))))
    (find-file filepath)
    (if (eq (point-max) (point-min))
 (progn
   (insert (format-time-string "= \n\n[%Y-%m-%d %H:%M]\n"))
   (goto-char (+ (point-min) 2))))
    ))

;;; howmファイルを作成2
(defun make-howm-create2dir-file2 ()
  (interactive)
  (let* ((filename (format-time-string "%Y-%m-%d-%H%M%S.howm"))
  (filepath (format-time-string "%Y-%m-%d-%H%M%S.howm")))
    (find-file filepath)
    (if (eq (point-max) (point-min))
 (progn
   (insert (format-time-string "= \n\n[%Y-%m-%d %H:%M]\n"))
   (goto-char (+ (point-min) 2))))
    ))


;;; 本体
(defun howm-create2dir (arg)
  (if (file-directory-p arg)
      (progn
 (make-howm-create2dir-file arg)
 (howm-create2dir-mode))))

;;; メジャーモード
(define-derived-mode howm-create2dir-mode nil "howm2dir"
       "homu mode"
       (define-key howm-create2dir-mode-map "\C-c,c" 'make-howm-create2dir-file2)
       (define-key howm-create2dir-mode-map (kbd "C-:") 'hateda-heading)
       (define-key howm-create2dir-mode-map (kbd "C-]") 'hateda-heading2)
       (font-lock-add-keywords
        nil
        '(("^\\*\\*\\*.*\n" . my-face-b-1)
   ("^\\*\\*.*\n" . my-face-b-2))))

;;; フェイス
(defface my-face-b-1 '((t (:foreground "white" :background "SteelBlue"))) nil)
(defface my-face-b-2 '((t (:foreground "white" :background "blue"))) nil)
(defvar my-face-b-1 'my-face-b-1)
(defvar my-face-b-2 'my-face-b-2)

;;; 行頭に見出しをつける
(defun hateda-heading ()
  (interactive "*")
  (save-excursion
    (beginning-of-line)
    (insert "**")))

(defun hateda-heading2 ()
  (interactive "*")
  (save-excursion
    (beginning-of-line)
    (insert "*")))

(provide 'howm-create2dir)
(provide 'howm-create2dir-mode)

Guake-terminal




F12を押すと上から降りてきて、もう一度F12を押すと戻っていくターミナル。

$ sudo apt-get install guake -y

でインストール。
次に、スタートボタンをクリックし、

「設定→設定マネージャー→セッションと起動→自動開始アプリケーション→追加」から、名前にguake、コマンドに「bash -c 'sleep 5s; guake'」と入力して、システム起動時に起動するようにする。


参考:Linuxmintでguake - 鶏口牛後

DropBox



公式サイトに行ってダウンロードし、インストールする。ついで、

$ dropbox start -i

とコマンドを打つと起動する。


Atom


Markdownをやるためにインスコする。


$ sudo add-apt-repository ppa:webupd8team/atom
$ sudo apt-get update
$ sudo apt-get install atom

参考:Ubuntu 15.04 LinuxMint 17 に Atomをインストールする - VariedTasteFinder

ranger




ターミナルで起動するファイラ。

まずは、ranger本体と必要なパッケージをインストールする。

$ sudo apt-get install ranger nkf w3m lynx highlight atool mediainfo xpdf caca-utils ranger --copy-config=all

次に、設定ファイルを作成する。

$ ranger --copy-config=all

scope.shを編集。テキストファイルが文字化けしないようにし、かつ枠の幅で折り返すようにする。nkfというコマンドとfoldというコマンドを使えばよさそう

#!/usr/bin/env sh
# ranger supports enhanced previews.  If the option "use_preview_script"
# is set to True and this file exists, this script will be called and its
# output is displayed in ranger.  ANSI color codes are supported.

# NOTES: This script is considered a configuration file.  If you upgrade
# ranger, it will be left untouched. (You must update it yourself.)
# Also, ranger disables STDIN here, so interactive scripts won't work properly

# Meanings of exit codes:
# code | meaning    | action of ranger
# -----+------------+-------------------------------------------
# 0    | success    | success. display stdout as preview
# 1    | no preview | failure. display no preview at all
# 2    | plain text | display the plain content of the file
# 3    | fix width  | success. Don't reload when width changes
# 4    | fix height | success. Don't reload when height changes
# 5    | fix both   | success. Don't ever reload

# Meaningful aliases for arguments:
path="$1"    # Full path of the selected file
width="$2"   # Width of the preview pane (number of fitting characters)
height="$3"  # Height of the preview pane (number of fitting characters)

maxln=200    # Stop after $maxln lines.  Can be used like ls | head -n $maxln

# Find out something about the file:
mimetype=$(file --mime-type -Lb "$path")
extension=${path##*.}

# Functions:
# runs a command and saves its output into $output.  Useful if you need
# the return value AND want to use the output in a pipe
try() { output=$(eval '"$@"'); }

# writes the output of the previouosly used "try" command
dump() { echo "$output"; }

# a common post-processing function used after most commands
trim() { head -n "$maxln"; }

# wraps highlight to treat exit code 141 (killed by SIGPIPE) as success
highlight() { command highlight "$@"; test $? = 0 -o $? = 141; }

case "$extension" in
    # Archive extensions:
    7z|a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\
    rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip)
        try als "$path" && { dump | trim; exit 0; }
        try acat "$path" && { dump | trim; exit 3; }
        try bsdtar -lf "$path" && { dump | trim; exit 0; }
        exit 1;;
    rar)
        try unrar -p- lt "$path" && { dump | trim; exit 0; } || exit 1;;
    # PDF documents:
    pdf)
        try pdftotext -l 10 -nopgbrk -q "$path" - && \
            { dump | trim | fmt -s -w $width; exit 0; } || exit 1;;
    # BitTorrent Files
    torrent)
        try transmission-show "$path" && { dump | trim; exit 5; } || exit 1;;
    # HTML Pages:
    htm|html|xhtml)
        try w3m    -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; }
        try lynx   -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; }
        try elinks -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; }
        ;; # fall back to highlight/cat if the text browsers fail
esac

case "$mimetype" in
    # Syntax highlight for text files:
    text/* | */xml)
        try nkf "$path" && { dump | trim | fold -b -w $width; exit 5; } || exit 2;;
    # Ascii-previews of images:
    image/*)
        img2txt --gamma=0.6 --width="$width" "$path" && exit 4 || exit 1;;
    # Display information about media files:
    video/* | audio/*)
        exiftool "$path" && exit 5
        # Use sed to remove spaces so the output fits into the narrow window
        try mediainfo "$path" && { dump | trim | sed 's/  \+:/: /;';  exit 5; } || exit 1;;
esac

exit 1

参考


2016年7月23日土曜日

CyberFoxをインスコした後にやることのメモ

CyberFoxをインスコした時の設定メモです。

日本語化


Language Managerを利用する。

参考:Cyberfoxを簡単に日本語化できる「Language Manager」 - ハルパス


アドオン



FireGesturesは、マウスジェスチャーを有効にするアドオン。設定から、

  • 前のタブへ…マウスを右クリックしながら上にマウスを移動
  • 次のタブへ…マウスを右クリックしながら下にマウスを移動

という割当に変える。 これは、Tab Treeとの関係上こうしたほうが便利なため。



Gmail Notifier は、Gmailが届いたら、ツールバーアイコンとポップアップで知らせてくれるアドオン。特に難しい設定はしなくても、CyberFoxでGmailにログインしていたらいいらしい。

IME自動無効は、ロケーションバーに行ったら自動でIMEを無効にしてくれるアドオン。

Tab Treeは、 タブをツリー型にしてくれるアドオン。ツリー型タブというアドオンもあるが、こっちのほうがkikiっぽくていい。

ツリー型の何が素晴らしいかということは、十年前くらいに散々議論されてきただろうことなので(多分)特に言わないが、調べ物をしててたくさんタブを開きたい、一つのページからリンクを開きまくりたい、という時に、ツリーで階層構造を再現できるというのは非常に便利なのだ。


設定項目がたくさんあるので、いつか調べて記事にしてまとめるかもしれない。

参考

 

KiKiに一目惚れ! - 覚えられませんっ
Firefox2をKIKI似にしたい  - 覚えられませんっ

QuickDragは、調べたい単語とかリンクとかを選択してDrag&Dropすると新しいタブで検索してくれたり開いたりしてくれるアドオン。

uBlock Originは広告をブロックするアドオン。


2016年6月23日木曜日

PC自作した【十数年ぶり二度目】

十何年かぶりにPCを自作したのでそのメモ。
CPU用電源のケーブルを挿し忘れて「なんで起動しないんだよ!」と焦ったのは内緒だ。

about My Machine


  • 【CPU】Intel CPU Core i5-6500 3.2GHz
  • 【マザボ】ASUSTeK H110M-A
  • 【メモリ】CORSAIR DDR4 8GB×2 CMK16GX4M2A2666C16
  • 【電源】ANTEC NE650C
  • 【光学ドライブ】DRW-1814BLT
  • 【HDD】WD HDD 3.5インチ 1TB Blue WD10EZEX/N
  • 【SSD】Crucial CT240BX200SSD1
  • 【ケース】Define R5
  • 【グラボ】無し
  • 【OS】 Windows10



インストール後の設定


  • 環境変数にXYZZYHOMEを登録
  • スタートアップへのソフト登録。パスはC:\Users\ [ユーザー名]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
  • 規定のIMEをGoogle日本語入力に。「コントロールパネル」>「すべてのコントロールパネル項目」>「言語」>「詳細設定」で上から2番めの項目「既定の入力方式の上書き」でGoogle日本語入力を選択
  • Screensaversを適当に設定
  • フォントをインストール

インストールしたソフト


  • マザボ(H110M-A)のドライバ
  • Office2007+SaveAsPDFandXPS.exe
  • Scribus
  • steam
  • Google日本語入力
  • Chrome
  • PDF-XChange Viewer
  • GhostScript
  • PDFTK
  • Caldix
  • MusicBee
  • DropBox
  • 7 Taskbar Tweaker(時刻表示のため)
  • Apache OpenOffice
  • FlashPlayer

2016年2月22日月曜日

拡張コメントを利用したソート

今回は、拡張コメントを利用して柔軟なソートをする方法です。PPx 1.47+1以降とPPx Script Module R15以降が必要です。

EXE、TXT、CFG、ZIPを前方に。それ以外は後方に持ってくるようなソートをしてみます。



以下をScriptフォルダに保存。

excomment.js
//!*script

for (var i = 0; i < PPx.EntryAllCount; i++) {
  if (PPx.Entry(i).Name.match(/.EXE$/i)) {
    PPx.Entry(i).SetComment(1,1);
  } else if (PPx.Entry(i).Name.match(/.TXT$/i)) {
    PPx.Entry(i).SetComment(1,2);
  } else if (PPx.Entry(i).Name.match(/.CFG$/i)) {
    PPx.Entry(i).SetComment(1,3);
  } else if (PPx.Entry(i).Name.match(/.ZIP$/i)) {
    PPx.Entry(i).SetComment(1,4);
  } else {
    PPx.Entry(i).SetComment(1,5);
  }
}

SetCommentで、個々のエントリに拡張コメントを設定してます。

次に、このスクリプトをCOMMENTEVENTに登録します。
以下を編集して取込。
KC_main = { ; PPcメイン窓
COMMENTEVENT1 ,*script %0\Script\excomment.js
}

次に、ソートを実行したいフォルダに行って、以下を実行。

*sortentry -thispath 24,1,0,B11111,1

すると、COMMENTEVENT1が呼び出され、excomment.jsが実行された後に、拡張コメントを用いたソートがなされます。

追記 2017/03/16


XC_dsetで、特定のフォルダでコマンドを実行するよう設定すれば良さげ。
PPxフォルダで拡張コメントのソートをしたいなら、次のようになる。cmd より前は無視しておk。
XC_dset = { 
D:\bin\ppx2window64\ = B0000,-1,-1,11,-1,-1,B011111,B00000000000000000000000001,cmd:"*sortentry -thispath 24,1,0,B11111,1"
}

参考:Paper Plane xUI (PPx) でサーバによって背景色を変える