xyzzyとperlの連携でテキスト処理最強環境

こないだからごそごそいじってるxyzzyのマクロとそこから連携するperlのスクリプト。
xyzzyのあまりの便利さ、ラクチンさ、フロントとしての有能さに今さらながら驚いた。もう15年ぐらい使ってるっちゅーのに。
エディタはxyzzy一択だろう(主語:おれ)
自分環境・自分作業内容に特化したマクロなので、誰にとっても有用・便利に使えるものではないけど、備忘録としてメモしておこう。
lispは手強い、というか他とは別モノなので、今回ごそごそ作ってるようなわずか数行のものでもネットで検索しまくり、デフォルトのlispフォルダをgrepしまくってやっと。明日にはもう忘れているであろう自分のためにもメモが必要なのだ。
てことで、先日までのマクロの振り返り。。
1)編集中のバッファの内容をtempファイルに書き出して
2)perlのスクリプトで処理して
3)処理された内容をバッファに読み込む
てところがキモ。
(2)のところ。
今日までは、処理してほしい内容について
(interactive "s[D]elSpace [T]ab4Space [M]akeEPUB [C]heck")
などと、マクロを起動したらperlでどういう処理をして欲しいのか、ユーザー入力を取得してperlに引数として渡すようにしていた。
でも、このユーザー入力のひと手間がけっこう面倒くさい。
面倒くさいものは続かない。そのうち使わなくなるのが目に見えている。
20分ぐらい考えて、macのCotEditorが外部スクリプトの引数に編集中のファイル名(フルパスで)を渡すことを思い出した。この動作をそのままxyzzyのマクロでも使うことにした。
そもそも、マクロを起動したらば。
編集中のファイルの拡張子が.plとか.pmだったらperlのシンタックスチェックをして欲しいし、編集中のファイルがeasy_epubフォルダ以下の.txtファイルだったらeasy_epub.plでEPUB電子書籍を作ってくれ。自分としては、いちいちユーザー入力を待って判定する必要はない。
ファイルと結びつかない新規バッファや*scratch*バッファで作業しているものに関しては、空白の削除やタブを空白4つに変換するなど、その時その場の小ネタ処理で決めうちできないので、ここはユーザー入力で動作を振り分けてもらいたい。
・フルパスのファイル名がわかっているものに関しては、パス・ファイル名を処理・動作の判断にしてくれ。
・ファイル名がわからないものに関しては、指示するからちょっと待てよ。
という自分リクエストを満たしたxyzzyのマクロがこの10行。
やってることは。
01:関数
02:この関数はマクロで呼び出せますよ
03:バッファを書き出すためのtempファイル名の設定
04:編集中のバッファがファイルと結びついてなければどんな処理をするのかユーザー入力待ち
05:tempファイルの削除
06:編集中のバッファをtempファイルに書き出し
07:perlに渡すためのバッチファイル(WINDOWSのダセエところだ)
引数としてフルパスのファイル名と、04の場合の入力された文字。標準入力経由でtemp-file、perlが処理した内容を受けとるところとして「*scratch*」バッファを設定。
08:バッファ全体をマークして
09:バッファをクリップボードにコピー
受けとるperl側は以下。長いのでpackageについては端折るけど。
・フルパスファイル名がわかっているものは、ファイルを読み込んで処理。
・ファイル名がないものは、一行ずつ処理したり、全部読み込んでから処理したり。
(第一引数はファイル名。第二引数がマクロの04で入力した文字)
いやもうほんと滅茶苦茶最強のテキスト処理環境のできあがりだ。
どのぐらい最強かというと、今日まさに立川で観てきた爆音「マッドマックス FR」のお婆ちゃんズぐらい最強だ(実写版ジブリだったなあ)
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
macのキーバインド設定

オサレなmacユーザーは優雅にコーヒーを飲みながらタッチパッドやマウスを駆使するんだろうが、昭和レトロなわたしは麦茶をすすりながらもエディタを使ってる時にキーボードから手を離したくない・ホームポジションにしがみつきたい。
なんでタブを入れるのにいちいちタブキーなわけ?control+iにしてくれよ。
なんで改行するのにいちいちエンターキーなわけ?control+mにしてくれよ。
てことだ。
検索してみるとやはりmacの(というかcocoaの)キーカスタマイズ記事がかなりヒットした。
こちらの 『テキスト編集のキー操作を自在にコントロールする』 が丁寧でわかりやすい解説と有用なリンクがあってオススメ。
システム全体のキーバインド設定は
→「/System/Library/Frameworks/AppKit.framework/Versions/C/Resources/StandardKeyBinding.dict」
でも、こいつはテキストエディタで開くと文字化けして何のことやら皆目見当もつかないし、システム全体のものをいじるのはおっかないので、自分専用のキーバインド設定ファイルを使うことができる。
→「~/Library/KeyBindings/DefaultKeyBinding.dict」
わたしのmac OS 10.10.3にはディレクトリもファイルもなかったので
ホームディレクトリの下の「Library」フォルダに
「KeyBindings/DefaultKeyBinding.dict」を作成した。上記サイトを参考にcontorl+iでタブ入力というのだけの設定ファイル。
→{ "^i" = "insertTab:" }
その後「KeyBindingsEditor」というGUIでキーバインドの設定、キーカスタマイズができるアプリをダウンロードして(https://www.cocoabits.com/KeyBindingsEditor/)DefaultKeyBinding.dictに設定追加していった。
できあがったDefaultKeyBinding.dictが以下。xmlなのでわかりやすい。
これで、emacsもどきでxyzzyもどきとなった。
contol+xをプレフィックスキーにしたキーバインディングなんかも実現できる。
・control+spaceでカーソル位置をマーク
・control+iでタブ入力
・control+mで改行
・control+zでページアップ
・conrol+x control+vで文書末尾にジャンプ
・conrol+x control+zで文書先頭にジャンプ
・conrol+x uでundo
このあたり、よく使うものを設定した。
ただ、
control+x control+f→ファイルオープン
control+x control+s→ファイル保存
control+x control+w→別名保存
なんかが効かないなぁ。ファイル操作系は別なのかな。
しかし、これだけのことで格段に使いやすくなった。
日頃使うエディタのキー入力でストレスが減るのは本当にありがたい。
もちろん、出先のパソコンは、効率が落ちても、デフォルトで使うしかないけど、ウチで使うものに関しては「手に馴染んだやりかた」で使いたい。
以上、んなもん、とっとと設定しろよ、なにを今さら、という話。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
ゴミ屋敷の整理

季節の変わり目だし、今日は各種バックアップ。
仕事系のディレクトリをzipでまとめて、USBメモリに。
雑記帖の画像をFTPでダウンロードしてzipでまとめて、USBメモリに。
仕事系はWEBにしろ、EPUBにしろ、細かいファイルがどっさりあって、万単位になっててびっくりというか我ながら呆れてしまった。何年分溜めこんで散らかしてんだよ。
雑記帖の画像も画像ディレクトリに1000を超えてたので、ディレクトリ単位でのバックアップが面倒くさくなっていた。
仕事系のファイル
そのまま放り込んでると非力なネットブックはエクスプローラで表示させるのにさえ時間がかかってしまう。意外なことにmacも細かいファイルのてんこ盛りには弱いらしく、Finderの動きが鈍くなってしまう。あちこち、目の前で必要のないものはまとめてUSBメモリに退避してもらった。zipでまとめたりファイルのコピーや移動をしてるだけで半日潰してるんだから、放置しすぎ。
一部バックアップ用のスクリプトを書いたので、明日からは少しはマシになる、はず。
雑記帖の画像
ひとつのディレクトリにたかだか1000程度のファイルがあったところで、レンタルサーバーは問題なしだけど、バックアップする手間を考えて画像フォルダを分けることにした。スクリプト中に散らばっている「images/」という生の単語をgrepしまくり、新たにそれ用に書いたサブルーチンが返すものに変更。さらに増えても今後はサブルーチンの部分を変更するだけで大丈夫(最初からきちんと考えて作っとけ、って話だ)
ついでに中途半端に投げっぱなしのxyzzyのマクロから呼び出すスクリプトも。
easy_epub(などのepub作成スクリプト)を呼び出して、編集中の文書のepubを作成。作成したepubをepubcheckにかけてエラーをチェック。さらにepubをbib/iフォルダに解凍。エディタのバッファに表示されるリンクを叩けばEPUBの確認ができる。
こんなものはバッチファイルでいいじゃん、てことでも、エディタ(xyzzy)作業中にエディタから抜けて別操作するとなけなしの集中力が削がれるので、予想以上に捗る。昭和の頃は、パソコンユーザーはパソコンを使ってる時間の8割以上はエディタを使ってる、と言われてたくらいだ、エディタべったりで安心できる。
また、今までは、作ったepubファイルをいちいちmacにコピーしてibooksでチェックしてたけど、 BiB/i のおかげでwindowsのネットブック、chromeでの確認となってひと手間減った(最終的にはibooksで確認するけど、途中途中での確認作業はwindowsでイケるのがありがたい)
これはほぼそのままCotEditorのスクリプトメニューに登録しても使えるなあ。
はなっからmacでCotEditorで作ればいろいろ捗りそうに思われるかもしれんが、我が家のアドビ神はすべてwindows版なのだ。うーむ。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
Ingress Lv16への仕込み

今日、Sojournerがプラチナとなった。
これは24時間以内にHackし続けた日数=毎日Hackし続けた日数が実績となるメダル。雨の日も風の日もカンカン照りの日も毎日最低1回、180日間休まずにポータル詣したらご褒美にプラチナをいただけた。健康祈願の御百度参りみたいなもんだ。
オニキス(黒)メダルは360日間…さすがにこれはどうだろか。
これでとりあえずレベル上限のlv16が見えてきた。
今、lv14(獲得APが約2200万)で、lv15にはメダルは揃っていて後APが200万ほど。
lv16はオニキス(黒)メダルが2つ、プラチナメダルが4つ、APは4000万(lv15からだと1600万)。前にも書いたけど、「Recharger」「Sojourner」「Translator」「Trekker」は難易度の低いメダル。
この4つ、Recharger以外は後から追加されたメダルでlv16に必要なプラチナ4とオニキス2つはこの4つで行けてしまう。黎明期からやってる古参エージェントのlv16よりはハードルが低い。他のメダルでプラチナはかなり大変。先が見えなくて気が遠くなるか、朝昼晩深夜と四六時中アクションしている廃人になるか、だろう。
lv16に向けてAP稼ぎをしている間にも、たぶんRechargerとTranslatorかTrekkerでオニキス2つは獲得できそう=lv16のメダル条件クリア。
(Rechargerの伸びが意外だった。自分のレベルが上がるとリチャージできる量も増えるので、Rechargerメダルの実績が稼ぎやすくなるんだなあ)
プラチナ
Recharger 遠隔で見方ポータルの回復
Sojourner 24時間単位でハックし続けた日数
Translator グリフハック成功ポイント
Trekker 歩いた距離
金
Builder デプロイ数
Connector リンクを張った回数
Explorer ユニークポータルのハック数
Guardian 自ポータルの維持日数
Mind Controller CF作成数
Pioneer 初めてキャプチャしたポータル数
銀
Engineer 自陣ポータルへのmod差し回数
Hacker ハック回数
Illuminator CF作成時のmu獲得数
Liberator ポータルのキャプチャ数
Purifier 敵のレゾネーター破壊数
SpecOps クリアミッション数
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」