2022年12月31日土曜日

PPv中心の連動ビュー(mapkey編)

PPv中心の連動ビューには、「PPvを複数起動すると挙動が意図しないものになる」というデメリットがあった。これを避ける方法として、PPcとPPvのIDを一対一対応させる等色々試みてたが(参考:PPcとPPvのIDを一対一対応させる - つかさのほえほえ日記跡地)、*mapkeyで解決しそうだなと最近気づいた。

準備

以下を編集して取込。

E_cr = { ; [Enter]用判別
TXT ,*ppv %*name(CD,"%R","%1") -k *mapkey use,K_syncppv %%: *string i,ppcid=%%*rightstr("%n", 1)
PNG ,*ppv %*name(CD,"%R","%1") -k *mapkey use,K_syncppv %%: *string i,ppcid=%%*rightstr("%n", 1)
}

K_syncppv	= {
UP	,*execute C%si"ppcid",%%K"@UP" %: %v%*extract(C%si"ppcid""%(%*name(CD,"%R","%1")%)")
DOWN	,*execute C%si"ppcid",%%K"@DOWN" % %v%*extract(C%si"ppcid""%(%*name(CD,"%R","%1")%)")
LEFT	,*execute C%si"ppcid",%%K"@LEFT" % %v%*extract(C%si"ppcid""%(%*name(CD,"%R","%1")%)")
RIGHT	,*execute C%si"ppcid",%%K"@RIGHT" % %v%*extract(C%si"ppcid""%(%*name(CD,"%R","%1")%)")
SPACE    ,*execute C%si"ppcid",%%K"@SPACE" % %v%*extract(C%si"ppcid""%(%*name(CD,"%R","%1")%)")
\SPACE    ,*execute C%si"ppcid",%%K"@\SPACE" % %v%*extract(C%si"ppcid""%(%*name(CD,"%R","%1")%)")
}

やり方

PPcでE_crに登録した拡張子(ここではtxtかpng)にカーソルをあわせ、EnterでPPvを起動。PPvでカーソルを動かすと、起動元のPPcのカーソルが連動し、対応したファイルを表示する。

2023-01-15追記

シンプルに書き直した

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年11月27日日曜日

moeをgithub pagesに移転しました

moeをgithub pagesに移行しました。


それにあわせて色々と内容を見直してます。以前よりも導入が容易になっているので、メモの方法論に興味がある方はどうぞ!なにかあれば、ここのコメント欄に書くか、twitter、Mail等で連絡して下さい。

私が運営している他のgithub pagesについてもよろしく! 

2022年11月18日金曜日

howmのタイトル表示方法変更

最近、moeのHPをgoogleSiteからGitHub Pagesに移行しようと画策しており、その過程でスクリプトを見直している。 今までは、howmファイルのファイル名と一行目を対応させたコメントファイルを作成していたが、これを各エントリのコメントを変更するだけにする。コメントファイルは、XC_cwrtで自動作成すればいい。これなら、スクリプトをLOADEVENTに登録しても、以前のように無限ループに陥る心配をする必要がなくなるわけだ(多分)。

やり方

以下を編集して取込み。

XC_cwrt    = 2    ; コメントファイル作成は    0:手動 1:確認有 2:自動

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

title2comment.js

//!*script

// コメントのないhowmファイルの一行目をコメントに

for (var a = PPx.Entry.AllEntry; !a.atEnd(); a.moveNext() ){
  // フォルダを除外
  if (a.Attributes & 16){
    continue;
  // .howmかつコメントがないファイルへの処理
  } else if (a.Name.match(/.howm$/i) && a.Comment.match(/^$/i)){
    var dir = PPx.Extract('%1');
    var entryName = a.Name;
    var f = dir + "\\" + entryName;
    // 一行目を読み込む。文字化けする場合は"sjis"を"utf-8"に
    var s = readFile(f, "sjis");
    // 2~40字を切り取ったものをコメントに
    a.Comment = s.slice( 2,40 );
  }
}

// ファイルの一行目を読み込む関数
function readFile(fname, charset) {
  if (charset == undefined) {
    charset = "_autodetect_all";
  }
  var adTypeBinary = 1, adTypeText = 2;
  var adReadAll = -1,   adReadLine = -2;
  var s = new ActiveXObject("ADODB.Stream");
  s.Type = adTypeText;
  s.charset = charset;
  s.Open();
  s.LoadFromFile(fname);
  var text = s.ReadText(adReadLine);
  s.Close();
  return text;
}

howmファイルを入れているフォルダで以下を実行。

*diroption -thisbranch cmd:"*script %0\Script\title2comment.js"

2022年10月30日日曜日

Raspberry PiでGitサーバー

経緯

僕はメモをテキスト形式で保存し、活用している。 今まではPC間のメモの同期にDropBoxを使っていたが、それをラズパイのGitサーバーに切り替える。 GitHubで執筆環境を整える方法がネットにあったりするが、個人的なメモなんかは、ローカルに閉じた環境で管理できたほうがいい気がするのだ。

SSHの鍵を作る

WindowsからラズパイにSSHでアクセスするために、公開鍵と秘密鍵を作る。Windowsで以下のコマンドを実行。

ssh-keygen -t ed25519

これでC:\Users[ユーザー名].sshというディレクトリができ、そのなかに公開鍵と秘密鍵ができる。

microSDカードにラズパイOSをインストール

初期化

ラズパイに入っていたmicroSDカードを上書きして利用する場合、パーティションの分割が原因でOSのインストールがうまくいかないことがある。それへの対処方法についても一応メモ。

  1. コマンドプロンプトを起動
  2. diskpart と入力。新しいウィンドウが開く
  3. list disk と入力
  4. select disk 3 というように、microSDカードを選択
  5. clean を実行

Raspberry PiのmicroSDをwindows10環境で初期化する手順 - Qiita

Raspberry Pi Imager

microSDカードをWindowsに差し込んだあと、Raspberry Pi Imagerを起動し、microSDカードを初期化する。 次にRaspberry Pi OS Lite(32bit)をインストールする。右下の歯車をクリックし、事前に必要な設定をしておく。

  • ホスト名を入力(ここではnasとする)
  • 「SSHを有効化する」をチェック
  • 「公開鍵認証のみを許可する」をチェック
  • 「ユーザーのためのauthorized_keys」に公開鍵の内容をコピペ
  • ユーザー名(ここではtukasaとする)とパスワードを入力
  • 「wifiを設定する」をチェック。SSIDとパスワードを入力
  • 「wifiを使う国」をJPに
  • タイムゾーンをAsia/Tokyoに

ラズパイ側の準備

初期設定

ラズパイにmicroSDカードを差して起動、アクセスできるまでしばし待つ。起動してるか気になる場合は、Advanced IP Scannerでチェック。 起動したら、Windowsで以下のコマンドを実行。

ssh tukasa@nas.local

Advanced IP Scannerで取得したIPアドレスで接続してもいい。

ssh tukasa@192.168.xx.xx

アクセスできたら、以下のコマンドを実行。

tukasa@nas:~ $ sudo apt-get update
tukasa@nas:~ $ sudo apt-get upgrade
tukasa@nas:~ $ sudo apt-get install -y git

これでgitがインストールできた。

リモートリポジトリの作成

ついでラズパイにリモートリポジトリを作成する。

tukasa@nas:~ $ mkdir ~/memo.git
tukasa@nas:~ $ cd ~/memo.git
tukasa@nas:~/memo.git $ git init --bare

クライアント側(Windows)の準備

Git for Windowsをインストール。 ユーザー名とemailアドレスを設定する。

git config --global user.email "user@example.com"
git config --global user.name "user name"

リモートリポジトリをクローンする。適当なディレクトリに行って以下を実行。

git clone tukasa@nas.local:/home/tukasa/memo.git

公開鍵未登録のクライアント

公開鍵を登録していないPCを使う場合、公開鍵の登録が必要になる。

ssh-keygen -t ed25519

で鍵を作成したあと、既に公開鍵を登録済みのWindowsを経由して、公開鍵を送るのが簡単そうだ。

scp id_ed25519.pub tukasa@nas.local:
ssh tukasa@nas.local
tukasa@nas:~ $ cat id_ed25519.pub >> .ssh/authorized_keys
tukasa@nas:~ $ rm id_ed25519.pub

参考

2022年10月21日金曜日

マークファイルの内容をクリップボードにコピー(utf-8版)

以前、マークファイルの内容をクリップボードにコピーするclipmarkfile.jsを作ったのだが、s-jisしか読み込めなかった。そこでutf-8版を作成。

_autodetect_allを使えば自動判別するらしいのだが、僕の環境だとうまく判別してくれないので、s-jis版とutf-8版に分けて運用したいと思う。

climparkfileU.js

//!*script

// マークファイルの内容をutf-8で読み込みクリップボードに保存

if (PPx.EntryFirstMark == 0){
  var f = PPx.Extract("%FCD");
  var s = readFile(f, "utf-8");
  PPx.Clipboard = s;
} else {
  strLine = ""
  while(true){
    var dir = PPx.Extract('%1');
    var entryName = PPx.EntryName;
    var f = dir + "\\" + entryName;
    var s = readFile(f, "utf-8");
    strLine=strLine+s+"\n";
    if(PPx.EntryNextMark == 0) break;
  }
  PPx.Clipboard = strLine
}

// ファイルの読込み
function readFile(fname, charset) {
  if (charset == undefined) {
    charset = "_autodetect_all";
  }
  var adTypeBinary = 1, adTypeText = 2;
  var adReadAll = -1,   adReadLine = -2;
  var s = new ActiveXObject("ADODB.Stream");
  s.Type = adTypeText;
  s.charset = charset;
  s.Open();
  s.LoadFromFile(fname);
  var text = s.ReadText(adReadAll);
  s.Close();
  return text;
}

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を押した時は、登録、未登録に関わらず別窓が開く。

2022年6月25日土曜日

「初期化して特定のカスタマイズを試す」を効率的に

やりたいこと

現在のカスタマイズを一時的に初期化して、特定のカスタマイズを試したい場合がある。 このとき、以下の過程をたどることになる。

  1. 現在のカスタマイズを一時的に保存
  2. 初期化
  3. 試したいカスタマイズを追加して色々試す
  4. 初期化
  5. 一時的に保存したカスタマイズを追加

毎回やるのは割と面倒なので、この手順を省略したい。

やり方

PPXDEF.CFGの末尾に以下を追加。PPxディレクトリにPPXDEF.CFGがあると、初期化時にそれによる初期カスタマイズが行われる。

-|M_cust =
M_cust    = {
カスタマイザ(&C) = %K"@CUSTOMIZE"
編集して取込(&E) = %OB *PPCUST /edit
-- =
取り込み = %OB *PPCUST CS %FCD
追加 = %OB *customize @%FCD
-- =
PPX.CFGを取り込み = %OB *PPCUST CS %0\PPX.CFG
PPX.CFGに書き出し = %OB *PPCUST CD %0\PPX.CFG
指定書き出し = %OB *PPCUST CD %{%1\PPX-%*nowdatetime(y-N-D)%|.CFG%}
-- =
初期化(&I) =  *PPCUST CINIT
設定を一時保存して初期化 =  %OBs *PPCUST CD %0\QUICKSAVE.CFG %: *PPCUST CINIT
一時保存した設定に戻す(&R) =  %OBs *PPCUST CINIT %: *PPCUST CS %0\QUICKSAVE.CFG
-- =
アップデート(&U) = %OB *checkupdate p
バージョン情報(&V) = %K"@ABOUT"
}

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

特定のカスタマイズを試したい場合は、F12を押して「設定を一時保存して初期化」を選択。元に戻したい場合は、F12を押して「一時保存した設定に戻す(&R)」を選択する。

2022年4月7日木曜日

サブディレクトリを連動表示

現在窓でのカーソルに連動して、反対窓でサブディレクトリを開くようにする。 F1でモード開始。ESCで終了。

KC_main = {
F1    ,*mapkey use,K_openbyotherwin %: *linemessage Open by other Window MODE
}

K_openbyotherwin    = {
UP    ,%K"@UP" %: *execute ~,%%j%FCD
DOWN    ,%K"@DOWN" %: *execute ~,%%j%FCD
ESC    ,*mapkey delete,K_openbyotherwin %: *linemessage Open by other Window MODE END
}

2022年2月8日火曜日

Windows10のEmacsにEPWING形式の辞書を導入

xyzzyだと外字を表示できないので、Emacsで辞書を引く方法を調べた。

辞書

EPWING形式の辞書を予め用意しておく。

eblook

Kazuhiro's blog - eblook 1.6.1+media

からダウンロード。 ダウンロードしたファイルをeblook.exeにリネームし、パスを通した場所に置く。僕はEmacsのbinフォルダにパスを通し、その中に入れている。

lookup

Kazuhiro's blog - Lookup 1.4+media

からダウンロードし、適当な場所に解凍しておく。

C-x dで解凍したフォルダを指定すると、ファイラのdiredが開く。install.elにカーソルをあわせてShift+Lで、インストールが開始される。



init.el

init.elに以下を追加。辞書のパスは読み替えてください。

;; lookup
(setq lookup-enable-splash nil)
(autoload 'lookup "lookup" nil t)
(autoload 'lookup-region "lookup" nil t)
(autoload 'lookup-pattern "lookup" nil t)
(autoload 'lookup-word "lookup" nil t)
(setq lookup-search-agents
      '((ndeb "~/emacs/Dictionary/eld-morph")
	(ndeb "~/emacs/Dictionary/F2J2")))
(global-set-key [mouse-2] 'lookup-word)

使い方

辞書を引きたい単語にカーソルをあわせて、M-xからlookup-wordとするか、マウスホイールクリックで辞書を引けるようになる。



参考

2022年2月7日月曜日

GNU EmacsをWindows10にインストール

lookupでEPWING辞書を引くためにEmacsをインストールする。今はGNU Emacsがスタンダードらしいので、それを使う。

インストール

GNU Emacs download - GNU Project

からemacs-27.2-x86_64.zipをダウンロード、解凍する。 binフォルダにあるrunemacs.exeを実行すると、emacsが起動する。

ホームディレクトリの設定

ホームディレクトリを自分の使いやすい場所に設定する。 環境変数のHOMEを新規に追加すればいい。



再ログインしEmacsを起動すると、登録したフォルダに.emacs.dが自動的に作成される。この中にinit.elファイルを作成。設定はここに書き込んでいく。

PATHを通す

環境変数のPATHにbinフォルダを登録する。


init.el

init.elに初期設定を追加する。僕の初期設定は以下。

;; ビープ音を消す
(setq ring-bell-function 'ignore)
;; スタートアップメッセージなし
(setq inhibit-startup-message t)
;; スクラッチを空に
(setq initial-scratch-message "") 
;; ツールバーなし
(tool-bar-mode -1)
;; 対応するカッコをハイライト
(show-paren-mode t)
;; 単語で折返し
(global-visual-line-mode)
;; 行番号表示
(global-linum-mode t)
(column-number-mode t)

;; スクロールを1行ずつに
(setq scroll-conservatively 1)
;; スクロール速度を無視
(setq mouse-wheel-progressive-speed nil)
;; scroll window under mouse
(setq mouse-wheel-follow-mouse t)
;; スクロール時にカーソルの画面上の位置をなるべく変えない
(setq scroll-preserve-screen-position t)
 ;; スクロール開始のマージンの行数
(setq scroll-margin 5)

;; yes, no は,y, n で済むように
(fset 'yes-or-no-p 'y-or-n-p)


;;; ~がついたバックアップファイルを作らない
(setq make-backup-files nil)

;; txtファイルはtextモードに
(add-to-list 'auto-mode-alist '("\\.txt\\'" . text-mode))


参考

2022年2月4日金曜日

xyzzyでEPWING形式の辞書を引く

最近暇すぎてラテン語で書かれた本を読んでる。読みたい文献をテキストファイル化してxyzzyで表示し、単語クリックで辞書を引けるようにしたら完璧じゃねと思いついて色々調べてみた。EPWING for the classicsで公開されている羅英辞書は、なんと変化形から引くことができるのだ!

オフライン辞書について

そもそもEPWINGとは何かというと、30年ほど前に富士通が中心になってまとめた共通規格。市販されているCD-ROM辞書のデファクトスタンダードになっているようだ。名前はWINGビルで会議をしたことにちなむらしい。

他に有名な規格として、PDICがある。PDICはDOS時代から公開されている辞書ソフト。当初は単語帳のような使い方が主流だったが、後に多くの辞書データが公開され、辞書の形式として定着したらしい。

辞書の用意

ではやり方を見ていこう。

EPWING形式の辞書を予め用意しておく。

EBライブラリ

*Megahurtz:xyzzy:ebdict:manual

からeb-4.2.2-win32.exeをダウンロードし、インストール。

インストールフォルダにあるbin/eb.dllをxyzzyのetcフォルダにコピーする。

ebdictのインストール

GitHub - deecay/ebdict: EPWING for xyzzy

からeb.lをダウンロードして、site-lispフォルダに入れる。 ついで、「.xyzzy」に以下を追加。辞書フォルダのパスは各自読み替えてください。

(require "eb")
(setq *ebdict-directories* '("D:/work/Dictionary/eld-morph" "D:/work/Dictionary/F2J2"))
(global-set-key #\MBtnDown 'ebdict-lookup)

使い方

テキストを読み込み、単語にカーソルをあわせて、M-x ebdict-lookup [C-M-,]


僕は、ホイールクリックでも辞書を引けるようにしている。ちなみに、検索結果を表示しているバッファからさらに辞書を引くことも可能。 ただ、xyzzyだと外字を表示できず、文字化けしてしまうようだ。emacsにもlookpupという拡張があり、こちらだと文字化けしない。こちらの使用方法については次回。

2022年2月1日火曜日

7-Zipモード

展開、圧縮に7-Zipを使う。 以下をScriptフォルダに保存。

wrap_7z.js

//!*script
// 7-zipを利用して展開/圧縮/個別圧縮を行う
// 第一引数: オプション u:展開 p:圧縮 ip:個別圧縮
// 第二引数: レスポンスファイル
// 第三引数: 処理先フォルダ
//
// コマンド例
// 展開:*script %0\Script\wrap_7z.js,u,%a*8FCDN,%2
// 圧縮:*script %0\Script\wrap_7z.js,p,%a*8FCDN,%*input("%2%*addchar(\)|%*extract(C"%%X")|.zip" -title:"7zipで圧縮" -select:i)

// 個別圧縮:*script %0\Script\wrap_7z.js,ip,%a*8FCDN,%2

if (PPx.Arguments.Length < 3){
  PPx.SetPopLineMessage("引数が正しくありません。");
  PPx.Quit(-1);
}

//  7z.exeのパス
//var Exec = "C:\\Program Files\\7-Zip\\7z.exe";
var Exec = PPx.Extract('%\'7z\'');

var option = PPx.Arguments.Item(0);
var responseFile = PPx.Arguments.Item(1);
var outputFolder = PPx.Arguments.Item(2);

var fso = PPx.CreateObject("Scripting.FileSystemObject");
var archiveList = GetList(responseFile);
var parentFolder = fso.GetParentFolderName(archiveList[0]);

if (option == "u") {
  // 展開
  for (x in archiveList){
    if (archiveList[x] == ""){
      break;}
    PPx.Execute('%OBsq '+Exec+' x -o\"'+outputFolder+'\\*\" \"'+archiveList[x]+'\"');
  }
} else if (option == "p") {
  // 圧縮
  var sorceFiles = "";
  for (x in archiveList){
    if (archiveList[x] == ""){
      break;}
    sorceFiles += '\"' + fso.GetFileName(archiveList[x]) + "\" "
    }
  PPx.Execute('*cd '+parentFolder+' %: %OBsq '+Exec+' a \"'+outputFolder+'\" '+sorceFiles);
} else if (option == "ip") {
  // 個別圧縮
  // フォルダの時は入れ子構造を避けるパターン。
  for (x in archiveList){
    if (archiveList[x] == ""){
      break;}
    var fullpath=PPx.Extract('%*name(CDN,\"'+archiveList[x]+'\",\"%1\")');
    if(PPx.GetFileInformation(fullpath)==":DIR"){
      PPx.Execute('*cd \"'+fullpath+'\" %: '+Exec+' a \"'+outputFolder+'\\'+fso.GetBaseName(archiveList[x])+'.zip\" *');
    } else {
      PPx.Execute('%OBsq '+Exec+' a \"'+outputFolder+'\\'+fso.GetBaseName(archiveList[x])+'.zip\" \"'+archiveList[x]+'\"');
    }
  }
  // フォルダでも入れ子構造を避けないパターン
  /*
  for (x in archiveList){
    if (archiveList[x] == ""){
      break;}
    PPx.Execute(Exec+' a \"'+outputFolder+'\\'+fso.GetBaseName(archiveList[x])+'.zip\" \"'+archiveList[x]+'\"');
  }
   */
}

// レスポンスファイルからファイル名のリストを作成
function GetList(list)
{
  var f = CreateObject("ADODB.Stream");
  
  f.type = 2;
  f.charset = "UTF-8";
  f.open;
  f.LoadFromFile(list);
  text = f.readText(-1).split("\r\n");
  f.close;
  return text;
}

以前は、個別、圧縮、個別圧縮とそれぞれ違うスクリプトを用いていたが、それを統合した。 以下を編集して取込。

A_exec	= {
7z	= "C:\Program Files\7-Zip\7z.exe"
}

KC_main = {
F1	,*mapkey use,K_7zipmode %: *linemessage 7-Zip MODE: Press H for HELP
}

K_7zipmode	= {
U	,*script %0\Script\wrap_7z.js,u,%a*8FCDN,%2
P	,*script %0\Script\wrap_7z.js,p,%a*8FCDN,%*input("%2%*addchar(\)|%*extract(C"%%X")|.zip" -title:"7zipで圧縮" -select:i)
I	,*script %0\Script\wrap_7z.js,ip,%a*8FCDN,%2
\U ,*setcust _User:sorce_id=%n %: *ppc -r -bootid:x -single "%1" -k %(*mapkey use,K_subwin %: *linemessage 展開先を選択してください %: *string i,temp_exec=%(*script %0\Script\wrap_7z.js,u,%*extract(%su"sorce_id""%%a*8FCDN"),%1 %: %K"@Q"%)%)
\P ,*setcust _User:sorce_id=%n %: *ppc -r -bootid:x -single "%1" -k %(*mapkey use,K_subwin %: *linemessage 圧縮先を選択してください %: *string i,temp_exec=%(*script %0\Script\wrap_7z.js,p,%*extract(%su"sorce_id""%%a*8FCDN"),%*input("%1%*addchar(\)|%*extract(C"%%X")|.zip" -title:"7zipで圧縮" -select:i) %: %K"@Q"%)%)
\I ,*setcust _User:sorce_id=%n %: *ppc -r -bootid:x -single "%1" -k %(*mapkey use,K_subwin %: *linemessage 展開先を選択してください %: *string i,temp_exec=%(*script %0\Script\wrap_7z.js,ip,%*extract(%su"sorce_id""%%a*8FCDN"),%1 %: %K"@Q"%)%)
ESC	, *mapkey delete,K_7zipmode %: *linemessage 7-Zip MODE END
H	, %"7-Zip mode"%I"U%bt:展開%bnP%bt:圧縮%bnI%bt:個別圧縮%bn\U%bt:サブ窓で展開%bn\P%bt:サブ窓で圧縮%bn\I%bt:サブ窓で個別圧縮%bnESC%bt:モード終了"
}

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

F1を押すと7-Zipモードになり、一時的にキーバインドが

  • U: 7-Zipで展開
  • P: 7-Zipで圧縮
  • I: 7-Zipで個別圧縮
  • \U: サブ窓を使って7-Zipで展開
  • \P: サブ窓を使って7-Zipで圧縮
  • \I: サブ窓を使って7-Zipで個別圧縮
  • H: ヘルプ表示
  • Esc: モード終了

となる。

2022年1月30日日曜日

7-Zipで圧縮形式を変換

1.書庫を一時ディレクトリに解凍

2.解凍したものを圧縮

するだけ。


A_exec	= {
7z	= "C:\Program Files\7-Zip\7z.exe"
}

_Command	= {	; ユーザコマンド・関数
convert	= *string o,folder="%*temp(%X,d)"
	*string o,fname=%*name(CD,"%*input("%X.zip" -select:es)","%1")
	%OBsq %'7z' x %FCD -o%so"folder"
	*cd %so"folder"
	%'7z' a %so"fname" *
}

2022年1月24日月曜日

FastCopyモード

PPxのコピー、移動、削除、ミラー処理にFastCopyを使う方法。最近v4.0.0正式版が出て、コマンドライン版のfcp.exeが追加されたのでそれを使ってみる。

以下を編集して取込。

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

KC_main = {
F1	,*mapkey use,K_fastcopymode %: *linemessage FASTCOPY MODE: Press H for HELP
}

K_fastcopymode	= {
C	,%OB %'fastcopy' /cmd=update /auto_close /bufsize=1024 /error_stop /srcfile=%a*8FDC /to=%*input("%2" -title:"コピー先を指定してください" -mode:d -select:l)\
M	,%OB %'fastcopy' /cmd=move /auto_close /bufsize=1024 /error_stop /srcfile=%a*8FDC /to=%*input("%2" -title:"移動先を指定してください" -mode:d -select:l)\
D	,%OB %'fastcopy' /cmd=delete /auto_close /bufsize=1024 /error_stop /srcfile=%a*8FDC
F2	,%OB %'fastcopy' /cmd=sync /auto_close /bufsize=1024 /error_stop /srcfile=%a*8FDC /to=%*input("%2" -title:"ミラー先を指定してください" -mode:d -select:l)\
ESC	, *mapkey delete,K_fastcopymode %: *linemessage FASTCOPY MODE END
H	, %"fastcopy mode"%I"C%bt:コピー%bnM%bt:移動%bnD%bt:削除%bnF2%bt:ミラー処理%bnESC%bt:モード終了"
}

F1を押すとFastCopyモードになり、一時的にキーバインドが

  • C: fastcopyでコピー
  • M: fastcopyで移動
  • D: fastcopyで削除
  • F2: fastcopyでミラー処理
  • H: ヘルプ表示
  • Esc: モード終了

となる。