ラベル サブ窓 の投稿を表示しています。 すべての投稿を表示
ラベル サブ窓 の投稿を表示しています。 すべての投稿を表示

2022年12月5日月曜日

サブ窓を使ってファイルを投げる

Shift+Xでファイル判別をし、以下のように動作させる。

  • EXEファイル:サブ窓で選択したファイルあるいはフォルダを開き、そのパスを記憶
  • EXE以外:サブ窓で選択したEXEファイルで開き、拡張子ごとにパスを記憶
  • フォルダ:サブ窓で選択したEXEファイルで開き、そのパスを記憶

例:xyzzy.exeにカーソルをあわせてShift+Xを押す。

PPC[X]が開く。

テキストファイルにカーソルをあわせてShift+Enter

テキストファイルが開く。

次にxyzzy.exeにカーソルをあわせてShift+Xを押した際、PPC[X]が以前選択したテキストファイルにカーソルをあわせた状態で開くことになる。

_Command	= {	; ユーザコマンド・関数
opensubwin	= *ppc -r -bootid:x -single -k *jumppath %*arg(1) -entry %%: *fitwindow %NC,%%NC,20 %%: *mapkey use,K_subwin %%: *linemessage %*arg(2)
}

E_subwin	= {
*	,*setcust _User:temp_exec=%%Ob %%FCD %%*extract(%n"%%%%#FCD") %%: %%K"@Q" %%: *setcust S_ext2exe:%%*extract(%n"%%%%FT")=%%FCD
	*opensubwin %*getcust(S_ext2exe:%FT),EXEファイルを選択してください
EXE	,*setcust _User:temp_exec=%%Ob %%*extract(%n"%%%%FCD") %%#FCD %%: %%K"@Q" %%: *setcust S_exe2dist:%%*extract(%n"%%%%FCD")=%%1%\%%R
	*opensubwin %*getcust(S_exe2dist:%FDC),実行対象のファイルあるいはフォルダを選択してください
:DIR	,*setcust _User:temp_exec=%%Ob %%FCD %%*extract(%n"%%%%#FCD") %%: %%K"@Q" %%: *setcust S_dir2exe:%%*extract(%n"%%%%1")=%%FCD
	*opensubwin %*getcust(S_dir2exe:%1),EXEファイルを選択してください
}

KC_main	= {	; PPcメイン窓
\X	,%ME_subwin
}

K_subwin	= {
\ENTER	,*execute ,%*getcust(_User:temp_exec)
}


2022年10月19日水曜日

ファイルのアプリケーション関連付けをサブ窓で

ファイルのアプリケーション関連付けを、サブ窓でできるようにする。

KC_main    = {
\ENTER    ,*ifmatch "o:e,a:d" %: %K"@\ENTER" %: *stop
    *ifmatch !0,0%*getcust(E_execList:%T) %: %ME_execList %FCD %: *stop
    *setcust _User:sorce_id=%n %: *setcust _User:sorce_wh=%NC
    *ppc -r -bootid:x -single -k %(*fitwindow %su"sorce_wh",%NC,20 %: *mapkey use,K_subwin %: *linemessage EXEファイルを選択してください %: *string i,temp_exec=%%Ob %%FCD %%*extract(%su"sorce_id""%%%%#FCD") %%: %%K"@Q" %%: *setcust E_execList:%%*extract(%su"sorce_id""%%%%FT"),%%FCD%)
\X    ,*setcust _User:sorce_id=%n %: *setcust _User:sorce_wh=%NC
    *ppc -r -bootid:x -single -k *jumppath %ME_execList -entry %(%: *fitwindow %su"sorce_wh",%NC,20 %: *mapkey use,K_subwin %: *linemessage EXEファイルを選択してください %: *string i,temp_exec=%%Ob %%FCD %%*extract(%su"sorce_id""%%%%#FCD") %%: %%K"@Q" %%: *setcust E_execList:%%*extract(%su"sorce_id""%%%%FT"),%%FCD%)
}
								    
K_subwin    = {
\ENTER    ,*execute ,%'ppcx_cmd'
}

shift+Enterを押した時、カーソル下ファイルの拡張子がアプリケーションに関連付けられてるか否かによって以下のように分岐。

  • 関連付け登録済み→登録したアプリケーションで実行する
  • 関連付け未登録→別窓が開く。開きたいアプリケーションを選択してShift+Enterでカーソル下ファイルを実行し、かつ関連付け登録

Shift+Xを押した時は、登録、未登録に関わらず別窓が開く。

2021年12月23日木曜日

サブ窓の起動パスをフォルダごとに記憶

前回の記事のコピー/移動バージョンです。

僕は、移動やコピーをする際は、サブ窓で処理先を指定している。

  1. 処理元のファイルを選択
  2. Shift+Cを押してサブ窓を起動
  3. 処理先のフォルダに移動してShift+Enter


という順序だ。

今回は、サブ窓の起動パスをフォルダごとに記憶するようにする。

KC_main	= {	; PPcメイン窓
\C	,*string o,dest=%*getcust(S_destlist:%1)
	*ifmatch 0,0%so"dest" %: *string o,dest=%1
	*ppc -r -bootid:x -single -k %%j%so"dest" %%: *mapkey use,K_subwin %%: *linemessage コピー先を選択してください %%: *string i,temp_exec=*file !copy ,%%%%*extract(%n"%%%%%%%%@*8FCDN"),%%%%1 %%%%: *setcust S_destlist:%%%%*extract(%n"%%%%%%%%1")=%%%%1 %%%%: %%%%K"@Q"
\M	,*string o,dest=%*getcust(S_destlist:%1)
	*ifmatch 0,0%so"dest" %: *string o,dest=%1
	*ppc -r -bootid:x -single -k %%j%so"dest" %%: *mapkey use,K_subwin %%: *linemessage 移動先を選択してください %%: *string i,temp_exec=*file !move ,%%%%*extract(%n"%%%%%%%%@*8FCDN"),%%%%1 %%%%: *setcust S_destlist:%%%%*extract(%n"%%%%%%%%1")=%%%%1 %%%%: %%%%K"@Q"
}

K_subwin	= {
\ENTER	,*execute ,%si"temp_exec"
}

S_destlistに処理元のフォルダパスと処理先のフォルダパスをセットにして保存している。ここに記載がない場合はカレントディレクトリが起動パスになる。

参考

2021年12月22日水曜日

サブ窓から実行ファイルに投げる(拡張子ごとにパスを記憶)

僕はファイルを特定のプログラムで開きたいとき、

  1. 処理元のファイルを選択
  2. Shift+Xを押してサブ窓を起動
  3. 実行ファイルにカーソルをあわせてShift+Enter

という操作で実現できるようにしている。

今回は、サブ窓で最初に開くフォルダを拡張子ごとに記憶できるようにする。


以下を編集して取込。

KC_main	= {	; PPcメイン窓
\X	,*ppc -r -bootid:x -single -k %%J%ME_execList %%: *mapkey use,K_subwin %%: *linemessage EXEファイルを選択してください %%: *string i,temp_exec=*ifmatch .exe %%%%: %%%%Ob %%%%FCD %%%%*extract(%n"%%%%%%%%#FCD") %%%%: %%%%K"@Q" %%%%: *ifmatch !0,0%%%%*extract(%n"%%%%%%%%FT") %%%%: *setcust E_execList:%%%%*extract(%n"%%%%%%%%FT"),%%%%FCD
}

K_subwin	= {	** comment **
\ENTER	,*execute ,%si"temp_exec"
}

E_execList	= {
*	,D:\bin
}

実行ファイルをE_execListに登録、次回からはそのパスを開くようにしている。 E_execList:*は登録した拡張子がない場合にサブ窓で開くパス。各自読み替えてください。

参考

2021年6月14日月曜日

サブ窓中心の操作(mapkey編)

*mapkeyを使うことで、以前よりスマートにできるようになったので紹介。PPx 1.77+5以降とKey Module R5が必要。

操作は前と同じ。
処理元のファイルをマークしたあと、

  • 移動:Shift+M
  • コピー:Shift+C

でサブ窓PPC[X]が開くので、パス移動してShift+Enter。

KC_main    = {
\M ,*alias ppcx_cmd = *file !move ,%%*extract(%n"%%%%@*8FCDN"),%%1 %%: %%K"@Q" %: *ppc -r -bootid:x -single "%1" -k *mapkey use,K_subwin %%: *linemessage 移動先を選択してください
\C ,*alias ppcx_cmd = *file !copy ,%%*extract(%n"%%%%@*8FCDN"),%%1 %%: %%K"@Q" %: *ppc -r -bootid:x -single "%1" -k *mapkey use,K_subwin %%: *linemessage コピー先を選択してください
}

K_subwin    = {
\ENTER    ,*execute ,%'ppcx_cmd'
}

追記 2021-06-15

特殊環境変数の%si"name"を使えばエイリアスを使う必要がなくなることに気づいた。ただエスケープのせいで視認性が悪くなるので一長一短。

KC_main    = {
\M ,*ppc -r -bootid:x -single "%1" -k *mapkey use,K_subwin %%: *linemessage 移動先を選択してください %%: *string i,temp_exec=*file !move ,%%%%*extract(%n"%%%%%%%%@*8FCDN"),%%%%1 %%%%: %%%%K"@Q"
\C ,*ppc -r -bootid:x -single "%1" -k *mapkey use,K_subwin %%: *linemessage コピー先を選択してください %%: *string i,temp_exec=*file !copy ,%%%%*extract(%n"%%%%%%%%@*8FCDN"),%%%%1 %%%%: %%%%K"@Q"
}

K_subwin	= {
\ENTER    ,*execute ,%si"temp_exec"
}

追記 2022-01-30

1.83からマクロ文字展開抑制ができるようになったので、見やすく書き直し。

KC_main    = {
\M ,*setcust _User:sorce_id=%n %: *ppc -r -bootid:x -single "%1" -k %(*mapkey use,K_subwin %: *linemessage 移動先を選択してください %: *string i,temp_exec=%(*file !move ,%*extract(%su"sorce_id""%%@*8FCDN"),%1 %: %K"@Q"%)%)
\C ,*setcust _User:sorce_id=%n %: *ppc -r -bootid:x -single "%1" -k %(*mapkey use,K_subwin %: *linemessage コピー先を選択してください %: *string i,temp_exec=%(*file !copy ,%*extract(%su"sorce_id""%%@*8FCDN"),%1 %: %K"@Q"%)%)
}

K_subwin	= {
\ENTER    ,*execute ,%si"temp_exec"
}

2021年3月27日土曜日

ファイルを他のファイルと紐付け

僕はhowm形式でメモを取っている(参考:MOE)。
メモファイルを他のファイルと紐付けしたい時がある。

・関連するメモ
・画像ファイル
・PDFファイル
・etc

アウトラインプロセッサならこういう機能のやつもありそうだが、ファイラだと実装は無理かなとあまり追求してこなかった。
最近、リストファイルを利用すれば可能なことに気づいた。

やり方

Paper Plane xUI Module Junk parts が必要。

KC_main	= {	; PPcメイン窓
\ENTER    ,*ifmatch CX,%n %: *execute ,%'ppcx_cmd' %: *stop
    %K"@\ENTER"
CLOSEEVENT ,*ifmatch CX,%n %: *alias ppcx_cmd = %%K"@\ENTER" %: *stop
^\ENTER	,*ifmatch CX,%n %: *stop
	*ifmatch "o:e,a:d-",%0%Y.txt %: *execute C,*jumppath "%0%Y.txt" %: *stop
	*alias ppcx_cmd = *makelistfile %0%Y.txt -basic -comment -marked %%: %%K"@Q" %: *ppc -r -bootid:x -single %1 -k *linemessage 登録するファイルを選択してください
BS ,*ifmatch 4,%*DirectoryType %: %K"@^LEFT %: *stop
	%K"@BS
}

1.メモファイル上でCtrl+Shift+Enterを押すと、独立窓が開く。紐付けしたいファイルをマークして、Shift+Enter。これでPPxフォルダに、「メモファイルのファイル名.txt」というリストファイルが作成される。
2.次からはCtrl+Shift+Enterでそのリストファイルに潜れる。

解説

・ファイル名が同じリストファイルを作って開いているだけ。howm形式だとかぶることがないので機能する。
・この方法でリストファイルに潜ると、BackSpaceでListFileを保存したフォルダに移動してしまう。なのでPaper Plane xUI Module Junk partsを使い、リストファイルか否かを判別して「履歴を戻る」をしている。
・これだと一つのフォルダ内のファイルしか登録できない。あとで追加したい場合は*ppcfileを使うといい。

2020年9月8日火曜日

サブ窓の起動パスをフォルダごとに指定

僕は、移動やコピーや解凍をする際は、サブ窓で処理先を指定している(参考:コピー/移動/解凍先フォルダ選択を別窓で)。

サブ窓の起動パスを、フォルダごとにリストファイルで指定できるようにする。


準備

以下を編集して取り込み。ちなみに展開に使ってるwrap_7z.jsについては、一つ前の記事を参照のこと。

KC_main    = {
\ENTER    ,*ifmatch CX,%n %: *execute ,%'ppcx_cmd' %: *stop
    %K"@\ENTER"
CLOSEEVENT ,*ifmatch CX,%n %: *alias ppcx_cmd = %%K"@\ENTER" %: *stop
\M ,*ifmatch !CX,%n %: *alias ppcx_cmd = *file !move ,%%*extract(%n"%%%%@*8FCDN"),%%1 %%: %%K"@Q" %: *ppc -r -bootid:x -single %*getfileto()
\C ,*ifmatch !CX,%n %: *alias ppcx_cmd = *file !copy ,%%*extract(%n"%%%%@*8FCDN"),%%1 %%: %%K"@Q" %: *ppc -r -bootid:x -single %*getfileto()
\U ,*ifmatch !CX,%n %: *alias ppcx_cmd = *script %0Script\wrap_7z.js,%%*extract(%n"%%%%a8FDC"),%%1 %%: %%K"@Q" %: *ppc -r -bootid:x -single %*getfileto()
}

_Command = {
getfileto = *ifmatch "o:e,a:d-","fileto.txt" %: *return "fileto.txt"
  %1
}

次に、起動パスを指定したいフォルダに、リストファイルのfileto.txtを用意する。例えばdownloadフォルダから、binフォルダやTempフォルダを処理先に選ぶことが多い場合は、downloadフォルダにfileto.txtをおいて、その中身を以下のようにする。

D:\bin
D:\Temp

カレントフォルダにfileto.txtがあればそれを、なければカレントフォルダパスを返すユーザーコマンドgetfiletoを使い、サブ窓のパスを変更するという仕組みになっている。

やり方

コピーの例で説明する。コピーしたいファイルにマークしてShift+C。するとサブ窓が開く。サブ窓の起動フォルダは、カレントフォルダにfileto.txtがあればそれを参照したものに、なければカレントディレクトリになる。

サブ窓で処理先のフォルダ内に移動し、Shift+Enterを押すと、先にマークしたファイルはそこにコピーされ、サブ窓は消える。


移動したい場合はShift+M、書庫を展開したい場合はShift+Uで同じようにする。

2020年4月25日土曜日

DialogHandler+PPc



画像とかをtwitterにうpするとき、PPcから選べるようにする。DialogHandlerを利用。以前はPPvから起動できるようにしてたが、使い勝手が悪く使わなくなっていた。

以下を編集して取込。

KC_main = { ; PPcメイン窓
\ENTER ,*ifmatch CX,%n %: *execute ,%'ppcx_cmd' %: *stop
 %K"@\ENTER"
}
_Command = { ; ユーザコマンド・関数
changedialog = *ifmatch !CX,%n %: *alias ppcx_cmd = %%Ob D:\bin\DialogHandler\DialogHandler.x86-64.exe %%#FCD %%: %%K"@Q" %: *ppc -r -bootid:x -single
}

一行編集から*changedialogを実行すると、PPC[X]が起動する。目的のファイルにカーソルを合わせてShift+Enterで、ダイアログが切り替わる。
ちなみにエイリアスをかませたりとややこしいことをしてるのは、PPC[X]を別の用途でも使いたいから

2019年9月25日水曜日

連番付き変数で一時ブックマーク

一時ブックマークを実装する。以前はエイリアスを利用していたが、今回はユーザーデータを利用する。

  • setSeqUserData.js
  • getSeqUserData.js
  • SeqUserData2file.js
  • file2SeqUserData.js

は以下にあり。


設定


A_exec = { ; エイリアス
xyzzy = D:\bin\xyzzy\xyzzy.exe
}

KC_main = { ; PPcメイン窓
^S ,*setnextkey K_bookmark
}

K_bookmark = { ** comment **
S ,*script %0\Script\setSeqUserData.js,BM,%FCD
^S ,%J %*script(%0\Script\getSeqUserData.js,BM)
E ,*ppb -c *string o,name=%%*script(%%0\Script\SeqUserData2file.js,BM) %%: %%Obsq xyzzy %%so"name" %%: *script %%0\Script\file2SeqUserData.js,BM,%%so"name"
^E ,*ifmatch !CX,%n %: *alias ppcx_cmd = *execute %n,%%%%J%%FCD %%: %%K"@Q" %: *ppc -bootid:x -single %*script(%0\Script\SeqUserData2file.js,BM)
}

キーバインド


2ストロークキーを利用。
例えばC_s,sなら「Ctrl+Sのあと、Sを押す」の意味。

・C_s,s カーソル下のファイルを登録
・C_s,C_s 登録したパスに順番に移動
・C_s,e 登録したパスをエディタで編集
・C_s,C_e 登録したパスをPPCで表示

使い方


C_s,s カーソル下のファイルを登録



C_s,C_s 登録したパスに順番に移動



C_s,e 登録したパスをエディタで編集




C_s,C_e 登録したパスをPPCで表示。Shift+Enterでジャンプ



参考


つかさのほえほえ日記 - PPxで一時ブックマーク

2019年9月21日土曜日

サブ窓中心の運用③実行ファイルに投げる

1.メイン窓でファイルを選択してから、Shift+X
2.実行ファイルをサブ窓で選び、Shift+Enter



あらかじめ、実行ファイルのパスを並べたListFileを作成しておく。ここでは、PPXフォルダにbin.txtという名前で保存している。
KC_main    = {
\ENTER    ,*ifmatch CX,%n %: *execute ,%'ppcx_cmd' %: *stop
    %K"@\ENTER"
CLOSEEVENT ,*ifmatch CX,%n %: *alias ppcx_cmd = %%K"@\ENTER" %: *stop
\X ,*alias ppcx_cmd = %%Ob %%{%%FCD %%|%%} %%*extract(%n"%%%%#FCD") %%: %%K"@Q" %: *ppc -bootid:x -single %0bin.txt
}

サブ窓中心の運用②「戻る」履歴一覧

1.メイン窓でShift+Gを押して、「戻る」の履歴一覧をサブ窓で表示
2.サブ窓でShift+Enterを押し、メイン窓のパスを変更する



「戻る」の履歴は、それぞれのPPCごとに記録され、%*dirhistoryで取得できるもの。ちなみに全PPC共通のヒストリは%hnで取得できる。

KC_main    = {
\ENTER    ,*ifmatch CX,%n %: *execute ,%'ppcx_cmd' %: *stop
    %K"@\ENTER"
CLOSEEVENT ,*ifmatch CX,%n %: *alias ppcx_cmd = %%K"@\ENTER" %: *stop
\G ,*ifmatch !CX,%n %: *alias ppcx_cmd = *execute %n,%%%%j%%FCD %%: %%K"@Q" %: *ppc -r -bootid:x -single %*script(%0\Script\dirhistory2file.js9)
}

dirhistory2file.js9

//!*script

// %*dirhistory(n)をListfile形式でファイルに保存。そのファイルパスを返す
// %j %*script(%0\Script\dirhistory2file.js9,fuga.txt)
// *ppc -bootid:z -single %*script(%0\Script\dirhistory2file.js9)
// という具合に使う

// 第一引数 : 保存先のファイルパス(省略可能。その場合はテンポラリファイルに保存)

// テンポラリファイル名の作成
function getTempFile() {
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  var tDir = fso.GetSpecialFolder(2);
  var tFile = fso.GetTempName();
  return tDir + "\\" + tFile;
}

var arr1 = new Array();

var stream         = new ActiveXObject("ADODB.Stream");
    stream.type    = 2;
    stream.charset = 'UNICODE';

stream.open();
stream.WriteText( ";ListFile", 1);  // 第2引数が 0:改行なし, 1:改行あり
for (var i = 0; i < 10; i++) {
  if (PPx.Extract("%*dirhistory\("+i+"\)") != ""){
    arr1.push(PPx.Extract("%*dirhistory\("+i+"\)")); // 配列に登録
  } else {
    break;
  }
}

// 配列から重複を除く
var arr2 = arr1.filter(function (x, i, self) {
  return self.indexOf(x) === i;
});

arr2.forEach(function( value ) {
  stream.WriteText(value , 1);  // 第2引数が 0:改行なし, 1:改行あり
});


// 第ニ引数(保存先のファイルパス)があればそこに、なければテンポラリファイルに保存
var filepath;
if (PPx.Arguments.Length < 1){
  filepath = getTempFile();
} else {
  filepath = PPx.Arguments.Item(0);
}
stream.saveToFile(filepath, 2);    //1:新規作成 2:新規作成 or 上書き
stream.close();

PPx.Result = filepath;


2019年9月20日金曜日

サブ窓中心の運用①基本的な仕組み


やりたいこと


今回行いたいのは、以下の動作。

1.メイン窓から操作元のファイルを指定し、サブ窓を開く
2.サブ窓で操作先のファイルを選択し、Shift+Enter
3.操作が実行され、サブ窓が閉じる



例えばファイルをコピーしたい場合、思考の流れとしては、

1.コピーしたいファイルを窓Aで選択
2.コピー先のフォルダを窓Bで選択
3.実行

となる。「窓A→窓B」で操作は終わるはずなのだ。しかし、通常の操作では

1.コピーしたいファイルを窓Aで選択
2.コピー先のフォルダを窓Bで選択
3.窓Aへ戻り、コピー操作を実行

となる。「窓A→窓B→窓A」と窓間移動が一度増えるのである。それを解消するのが今回の目的(ちなみにこれは、サブ窓を使う以外にも、「反対窓でマークしたファイルを操作」「fenrirを使う」「一行編集を使う」といった解決方法が存在する)。

準備


ポイントは、サブ窓のキーバインドの一時的な変更。

KC_main    = {
\ENTER    ,*ifmatch CX,%n %: *execute ,%'ppcx_cmd' %: *stop
    %K"@\ENTER"
CLOSEEVENT ,*ifmatch CX,%n %: *alias ppcx_cmd = %%K"@\ENTER" %: *stop
}


こうすると、エイリアスppcx_cmdに実行したい内容を登録すれば、サブ窓に使うPPC[X]のShift+ENTERの挙動を変更することが可能になる。

ファイル移動、コピー、解凍


KC_main    = {
\ENTER    ,*ifmatch CX,%n %: *execute ,%'ppcx_cmd' %: *stop
    %K"@\ENTER"
CLOSEEVENT ,*ifmatch CX,%n %: *alias ppcx_cmd = %%K"@\ENTER" %: *stop
\M ,*ifmatch !CX,%n %: *alias ppcx_cmd = *file !move ,%%*extract(%n"%%%%@*8FCDN"),%%1 %%: %%K"@Q" %: *ppc -r -bootid:x -single %1
\C ,*ifmatch !CX,%n %: *alias ppcx_cmd = *file !copy ,%%*extract(%n"%%%%@*8FCDN"),%%1 %%: %%K"@Q" %: *ppc -r -bootid:x -single %1
\U ,*ifmatch !CX,%n %: *alias ppcx_cmd = *script %0Script\wrap_7zG.js,%%*extract(%n"%%%%a8FDC"),%%1 %%: %%K"@Q" %: *ppc -r -bootid:x -single %1
}

やってることは以前の記事と同じ。ただ少し書き方を変えている
処理元のファイルにカーソルをあわせるか、マークするかしたあと、

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

でサブ窓PPC[X]が開く。あとは処理先のディレクトリで、Shift+Enterを押せばいい。

参考


PPx 逆引き辞典 - PC-98ファイラーHFやPyxisのような感覚でコピー/移動/解凍
キャズムを超えろ! - Pyxisという偉大なファイラ / OSSの魅力
つかさのほえほえ日記 - コピー/移動/解凍先フォルダ選択を別窓で
つかさのほえほえ日記 - 反対窓でマークしたファイルを現在窓に移動/コピー
つかさのほえほえ日記跡地 - PPxとfenrirの連携

追記


2019/09/20 サブ窓をZからXに変更