2023年6月19日月曜日

一行編集でコマンドを自動補完?

コマンドラインランチャでよくあるコマンドの自動補完を、以下のようにして擬似的に行う。

  • 補完候補リストの選択あり→選択中のアイテムを実行
  • 補完候補リストの選択なし→補完一覧リストの一番上を選択して実行

以下を編集して取込。

K_pplaunch = {
ENTER	,*ifmatch -1,%*sendmessage(%N-L,392,0,0) %: %K"@DOWN @ENTER" %: *stop
	%K"@ENTER"
^V	,*completelist -close %: *mapkey delete,K_pplaunch %: %K"@^V"
^D	,*deletehistory h,"%*edittext" %: *linemessage ヒストリから履歴を消去しました
}

以下のコマンドを実行する。補完候補ファイルはPPxフォルダ内のlaunch.txtという想定。

*string o,name=%*input("" -title:"PPlauncher" -mode:h -k:"*completelist /set /file:%%0launch.txt -match:6  %%: *mapkey use,K_pplaunch") %: *execute,%so"name"

[^V]はコピペのための処理。また、履歴に不要なものがあると意図しない動作をしうるので、[^D]で履歴を削除できるようにしている。 補完候補リストの選択位置の取得方法については、作者さんに教えていただいた。感謝!

2023年6月17日土曜日

一行編集で音楽ファイルを検索

一行編集でmigemoが使えるなら、音楽ファイルを検索してプレイヤーに投げるのにも使えるんじゃないか、と思いついた。

準備

音楽ファイルパスを各行に記載した補完候補ファイルを予め作成しておく。D:\Data\Music以下にmp3とflac形式で保存しているなら、以下のコマンドで作成できる。

*whereis -mask1:"a:d+;.mp3;.flac" -path:"D:\Data\Music" -dir:on -subdir:on -listfile:%0data\musicpath -name

以下を編集して取込。

_Command	= {
musicsearch	= *ifmatch 0,0%*getcust(_User:musicplayer) %: *setcust _User:musicplayer=%*input("D:\bin\AIMP5\AIMP.exe" -title:"音楽プレイヤーのパスを入力してください" -mode:e)
	*string o,name=%*input("" -title:"musicplayer - %*getcust(_User:musicplayer)" -mode:e -k:"*completelist /set /file:%%0data\\musicpath -match:6  %%: *mapkey use,K_musicplayer")
	*ifmatch !0,0%so"name" %: *launch %*getcust(_User:musicplayer) %so"name"
}

-|K_musicplayer=

K_musicplayer = {
ENTER	,*ifmatch -1,%*sendmessage(%N-L,392,0,0) %: %K"@DOWN @ENTER" %: *stop
	%K"@ENTER"
^O	,%M_musicplayer,P
^P	,%M_musicplayer,!START/STOP
LEFT	,*ifmatch !-1,%*sendmessage(%N-L,392,0,0) %: *replace %*name(D,%*edittext) %: %K"@^\A" %: *stop
	%K"@LEFT"
}

-|M_musicplayer=

M_musicplayer	= {
Playerの変更	=*setcust _User:musicplayer=%{%*getcust(_User:musicplayer)%|%} %: *setcaption musicplayer - %*getcust(_User:musicplayer)
AIMP5	=*setcust _User:musicplayer=D:\bin\AIMP5\AIMP.exe %: *setcaption musicplayer - %*getcust(_User:musicplayer)
AIMP5に追加	=*setcust _User:musicplayer=D:\bin\AIMP5\AIMP.exe /INSERT %: *setcaption musicplayer - %*getcust(_User:musicplayer)
--	= 
START/STOP	=D:\bin\AIMP5\AIMP.exe /PLAYPAUSE
--	= 
SCAN	=*whereis -mask1:"a:d+;.mp3;.flac" -path:"D:\Data\Music" -dir:on -subdir:on -listfile:%0data\musicpath -name
}

実行

*musicsearchで一行編集が開く。migemoでインクリメンタルサーチをしてENTERで、音楽プレイヤーで再生できる。 一行編集上でのその他のキーバインドは以下。

  • [Ctrl+O] 設定メニュー
  • [Ctrl+P] START/STOP
  • [LEFT] リスト選択時に階層を一つ上へ

2023年6月9日金曜日

一行編集の行頭コメント+migemo検索

コマンドの呼び出し方は忘却する

作ったコマンドをどうやって呼び出すか、という問題がある。 簡単なのは使っていないキーに登録することだが、そのコマンドが頻繁に使われないものである場合、そのキーを忘れてしまうわけだ。

  • キーバインドをコマンドに関係したものにする(RenameならRというように)
  • 2バインドキーを使う
  • エイリアスやユーザコマンドにして覚えやすい名前を付ける
  • メニューにしてまとめる

他、色々対策はありそうだが、僕の場合はどれも有効ではなかった。数ヶ月もすれば、どれも忘却してしまうからである。 最近は、補完候補ファイルにコマンドをまとめ、一行編集で呼び出すことでこの問題に対処していて、これはかなりうまくいっていた。行頭コメントとmigemo検索を利用すれば、さらに便利になりそうだと気づいたので、この記事で紹介する。

行頭コメント+migemo検索

一行編集には、任意の補完候補ファイルを読み込ませることができる。この補完候補ファイルには、以下のようにして行頭コメントを付けることができる。コメントが行頭にあれば、コマンドが長すぎてコメントが見えないという事態がなくなるのである。

;<comment>; text

migemo検索は、*completelistの-match:nオプションを使うとできるようになる。これにより、行頭コメントに日本語を使っても、それを検索できるわけだ。

*completelist -match:6

やり方

以下のような補完候補ファイルをPPxフォルダに保存する。

launch.txt

git
	add .
	commit -m"%*input("%*now" -title:"commit message")"
	push
	pull
	status
;<単独PPv用PPcを起動>; *ppc -r -bootid:v -single -k *mapkey use,K_forppv
;<反対窓にカーソル下フォルダを連動表示>; *mapkey use,K_openbyotherwin %: *string i,ppcid=%N %: *linecust obow,KC_main:SELECTEVENT,*ifmatch !0,0%(%si"ppcid" %: *execute ~,%%j%FCD%) %: %K"loadcust" %: *linemessage  Open by other Window MODE [ESC]QUIT
;<git add commit push>; *string o,commit_message="%*input("%*now" -title:"commit message")" %: %Os git add . %: git commit -m %so"commit_message" %: git push
;<aliasに登録>; *string o,name=%*input("%X" -title:"エイリアス名を入力してください" -mode:g) %: *alias %so"name"=%FCD
;<ハイライトモード>; *linecust highlight,KC_main:LOADEVENT,*ifmatch "o:e,a:d-","00_LISTFILE.txt" %%: *markentry -set:00_LISTFILE.txt %: *mapkey use,K_highlightmode %: *string i,hlnum=1 %: *linemessage HIGHLIGHT MODE [1-7]CHANGE COLOR ^[S]SAVE [ESC]QUIT
;<FastCopyモード>; *mapkey use,K_fastcopymode %: *linemessage FASTCOPY MODE [C]COPY [M]MOVE [D]DELETE [F2]MIRROR [ESC]QUIT
;<7-Zipモード>; *mapkey use,K_7zipmode %: *linemessage 7-Zip MODE [U]展開 [P]圧縮 [I]個別圧縮 [Esc]QUIT
;<markdownをhtmlに変換>; browser https://ikapper.github.io/md2html/
;<ダイアログで順次リネーム>; *script %0Script\rename.js
;<外部エディタでリネーム>; *script %0Script\batchRename.js
;<サブモニターを縦に>; *run -d:D:\bin\dc2 dc2.exe -configure="tate.xml"
;<サブモニターを横に>; *run -d:D:\bin\dc2 dc2.exe -configure="yoko.xml"
;<ゴミ箱メニュー>; %z"#10:\",B
;<rubyでローカルサーバーの起動>; C:\Ruby31-x64\bin\ruby.exe C:\Ruby31-x64\bin\bundle exec C:\Ruby31-x64\bin\jekyll serve -w --baseurl ""
editor %0launch.txt ;編集

以下のコマンドで、補完候補ファイルを読み込んで一行編集が起動。選択したコマンドが実行される。

*string o,name=%*input("" -title:"PPlauncher" -mode:h -k:"*completelist /set /file:%%0launch.txt -match:6 ") %: *execute,%so"name"

日本語の行頭コメントがあるため、長いコマンドであっても視認しやすい。さらに、migemoにより絞り込みも容易である。

2023年6月7日水曜日

反対窓にカーソル下フォルダを連動表示

現在窓のカーソルに連動して、反対窓でカーソル下フォルダを表示するようにする。 つかさのほえほえ日記: サブディレクトリを連動表示からの変化は以下の通り。

  • コマンドを実行したPPcでのみ有効に
  • SELECTEVENTを使うことで、マウスでの選択も有効に

以下を編集して取込。

K_openbyotherwin    = {
ESC    ,*mapkey delete,K_openbyotherwin %: *linecust obow,KC_main:SELECTEVENT, %: *linemessage Open by other Window MODE END

以下を実行する。

*mapkey use,K_openbyotherwin %: *string i,ppcid=%N %: *linecust obow,KC_main:SELECTEVENT,*ifmatch !0,0%(%si"ppcid" %: *execute ~,%%j%FCD%) %: %K"loadcust" %: *linemessage  Open by other Window MODE [ESC]QUIT

2023年5月9日火曜日

ハイライトモードを改良

つかさのほえほえ日記: ハイライトモードの使い勝手がいまいちだったので、改良した。大きな変更点は以下。

  • 00_LISTFILE.txtがディレクトリにある場合はハイライトを自動で再現
  • ハイライトエントリ上で[SPACE]でハイライト解除

まずは以下を編集して取込。

-|K_highlightmode =

K_highlightmode = {
SPACE	,*if !%si"hlnum" %: %K"@SPACE" %: *stop
	*if %*js("PPx.result=PPx.EntryHighlight") %: *markentry -highlight:0 %R %: %K"@DOWN" %: *stop
	*markentry -highlight:%si"hlnum" %R %: %K"@DOWN"
\SPACE	,*if !%si"hlnum" %: %K"@\SPACE" %: *stop
	*if %*js("PPx.result=PPx.EntryHighlight") %: *markentry -highlight:0 %R %: %K"@UP" %: *stop
	*markentry -highlight:%si"hlnum" %R %: %K"@UP"
^S	, *makelistfile 00_LISTFILE.txt -basic -highlight %: *linemessage ハイライトを保存しました
ESC	, *linecust highlight,KC_main:LOADEVENT, %: *mapkey delete,K_highlightmode %: *linemessage HIGHLIGHT MODE END
0	, *linemessage ファイルマークに変更しました %: *string i,hlnum=0
1	, *linemessage ハイライト1に変更しました %: *string i,hlnum=1
2	, *linemessage ハイライト2に変更しました %: *string i,hlnum=2
3	, *linemessage ハイライト3に変更しました %: *string i,hlnum=3
4	, *linemessage ハイライト4に変更しました %: *string i,hlnum=4
5	, *linemessage ハイライト5に変更しました %: *string i,hlnum=5
6	, *linemessage ハイライト6に変更しました %: *string i,hlnum=6
7	, *linemessage ハイライト7に変更しました %: *string i,hlnum=7
}

以下のコマンドを実行。

*linecust highlight,KC_main:LOADEVENT,*ifmatch "o:e,a:d-","00_LISTFILE.txt" %%: *markentry -set:00_LISTFILE.txt %: *mapkey use,K_highlightmode %: *string i,hlnum=1 %: *linemessage HIGHLIGHT MODE [1-7]CHANGE COLOR ^[S]SAVE [ESC]QUIT

キーバインドは以下の通り。

  • [SPACE] カーソル位置のファイルをハイライト & [↓]
  • \[SPACE] カーソル位置のファイルをハイライト & [↓]
  • [数字] ハイライト色切り替え
  • ^[S] ハイライトを00_LISTFILE.txtに保存
  • [ESC] ハイライトモード終了

2023年4月28日金曜日

管理者権限のPPbを介してwifiをON/OFF

僕はasus t90chiという2in1PCを使っている。外で文章を打ち込む用途では、今でも最高の機種だと思っているのだが、一つだけ欠点があった。それは、チャタリングを起こしやすいこと。t90chi本体とキーボードをつなげているbluetoothが、wifiと干渉してチャタリングが起こしているらしい(多分)。文章を打ち込んでいる際、チャタリングを起こしてこおおおおおおおおおおおおおんなふうになるだけならまだしも、そのまま操作が効かなくなり、強制シャットダウンをするはめになることが多々ある。 これを解決するため、

  • 管理者権限のPPbをWindowsTerminalで起動し常駐
  • 管理者権限PPbを介してコマンドラインでwifiをオンオフ

できるようにする。どれだけ効果があるかは定かではない。

WindowsTerminalの設定

PPbのプロファイル作成

  • 名前をPPbに
  • コマンドラインにPPBW.EXEのパスを入力
  • 「このプロファイルを管理者として実行する」をオンに

スタートアップ

  • 既定のプロファイルをPPbに
  • 起動モードをフォーカスに

外観

  • 「ターミナルを最小化したときに通知領域で非表示にする」をオンに

やり方

  • WindowsTerminalを起動する。認証ダイアログが出るので許可する。
  • 以下のコマンドでwifiをオンオフする
netsh interface set interface "Wi-Fi" disable
netsh interface set interface "Wi-Fi" enabled

2023年4月6日木曜日

LIVA Z2 CMOSバッテリー交換

LIVA Z2を起動すると、「CMOS Settings Wrong」と言ってBIOS画面で止まるようになってしまった。CMOSバッテリーが切れてしまったらしい。起動のたびに時間を設定し直すのも面倒なので、LIVA Z2を分解して交換することにする。

必要なもの

  • ドライバー大小
  • ラジオペンチ
  • ピンセット
  • カッター
  • 両面テープ

ケースから取り出す

底部のネジをゆるめる。

下にスライドさせて外す。

中はこのようになっている。

2.5インチベイの取り外し

SSDの増設は、2.5インチベイに差し込むだけだ。

メモリ交換をするには、2.5インチベイを取り外す必要がある。 留具が引っかかっているだけなので、うまくずらして取り外そう。この際、基盤とつながっているコードが傷つかないように注意。

基盤からケーブル類を外す

メモリの増設や交換は、スロットに差し込むだけだ。

CMOSバッテリーを交換するには、さらに分解する必要がある。

まずは、真ん中にあるネジを外す。

次に、WiFiカードを取り外す。ネジを外して、スロットから引き抜こう。WiFiカードにつながってる二本の線は取れやすいので慎重に。取れた場合は、指で押し込めばつなげ直すことができる。

次に、2.5インチベイと基盤をつなげているコードを引き抜く。指でつかむのが難しい場合は、ピンセットを使うといい。

以上で、次のような状態になる。

ヒートシンクの取り外し

CMOSバッテリーは、この基盤の裏側、ヒートシンクの下にある。次は、ヒートシンクを取り外そう。

ヒートシンクとマザーボードを止めているのは、四箇所のプラスチックの留具だ。下から差し込むと、先が傘のように開いて固定する仕組みになっている。ラジオペンチで傘の先をつまんですぼめ、上から押し込むか、下から引っ張るかして取り外そう。

CMOSバッテリーの交換

基盤の裏面はこのようになっている。写真は既に取り外した状態だが、CMOSバッテリーはコネクタでつながっていて、電池は両面テープで固定されている。両面テープを外し、指でコネクタをつまんで取り外そう。

次に、新しく買ってきたCMOSバッテリーをコネクタに差し込み、両面テープで固定する。

注意点は、ケーブルに極性があること。プラスマイナスが逆だと動いてくれない。元からささっていたCMOSバッテリーと、買ってきたCMOSバッテリーを見比べ、ケーブルの色が逆になっている時は入れ替える必要がある。僕が買ったのは「TM CR2032 ケーブル2PINコネクタ付」という商品だったが、そのまま差し込んでも動かず、ケーブルを入れ替える必要があった。

コネクタの写真の箇所を、カッターかなにかで手前に少し曲げると、ケーブルを引き抜くことができる。引き抜いたら、左右を入れ替えて差し直そう。

CMOSバッテリーは5年くらいしたら切れてしまうようだ。ボタン電池をソケットに差し込むタイプのCMOSバッテリーも売っているようなので、後々のことを考えればそういうのを買う方がいいのかもしれない。

参考