JXA: Shell

macOS の Finder で選択したファイルをアーカイブする作業。
zip ならコンテキストメニューで可能だけど筆者は tar.gz でないと困る。
アーカイブ名もディレクトリ名にしたい、Fedora でやっている事と同様に。

上記を一発で作る作業を自動化したい、つまり automation で。
同じ事をしたい人は少ないだろうけど JXA でシェルを使う参考に。

JXA で Finder を拡張でシェルを使おうとした場合。
そういえば起動時のカレントディレクトリはどうなるんだ?

let app = Application.currentApplication();
app.includeStandardAdditions = true;
app.doShellScript("echo $PWD > ~/jxa_pwd.txt");
//=> /

やはりルート。

つまりシェルを使う前にカレントディレクトリを移動しないといけない。
ならばこういう手で、tar.gz をディレクトリ名で自動作成する例。

#!/usr/bin/osascript

// get pwd
let finders = Application("Finder").finderWindows();
let uri = finders[0].target().url();
let pwd = decodeURI(uri).slice(7, uri.length-1);

// get dirname
let dir = pwd.slice(pwd.lastIndexOf("/")+1);

// create command
let sh = `tar -zcvf ${dir}.tar.gz`;
let selections = Application("Finder").selection();
selections.forEach((item)=> {
    sh += ` ${item.name()}`;
});

// create tar.gz
let app = Application.currentApplication();
app.includeStandardAdditions = true;
app.doShellScript(`cd ${pwd}
${sh}`);

できたお!

それにしても、JXA 関連を検索しまくって感じたこと。
DTP 屋やデザイナーなので mac を使っている人達、と筆者では JXA の捉え方に差がある。
彼等は純粋にアプリでの定型作業を自動化する目的で利用しようとしている。
筆者は Fedora でやっていることを mac で再現しようとしてシェルを使っている。

経験値の差で筆者の書いた事のほうが検索順位が上の場合があることは申し訳ない気分に。
純粋にアプリを使っている人のお役立ちより前に言語ヲタのコードが出てきたらイヤだろ。
コレを最低最悪な型でやらかしたのが Ruby だということは絶対に秘密だよ!

つまりガチで mac が必要な人から見ると筆者は完全に異端。
いや当然だよ、筆者は macOS を「ちょっぴり不便な UNIX」としてしか見ていないから。
パーミッションの変更や FTP が GUI でできないとか色々ね。

しかし Windows を仕事以外で使っている人ってマジでどこにいるのだ?
筆者の周辺には本当にいないし名駅ビックカメラに入っても外国人ばかり。
Apple のコーナーなら日本人はいるし試し打ちをする人も結構見るんだが。
JavaScript 関連で検索すると 9 割が mac という事実。
そろそろ「ウインドウズ信者」という言葉が作られてもいいレベル。
現実世界とネット上での差が年々大きくなっている。

JavaScript(ES6) Layer

ES6 Web TestPage にレイヤーを追加。
それにしても web 用 javascript は日本語情報ありすぎで笑える!
gjs や jxa だと英語でしかまともなページが無いのに。

問題はまたしても mobile Safari だ。
iOSのSafariで画面のサイズを取得する | chocolateorange.github.io

document.documentElement.clientHeight は
スクロールでアドレスバーやツールバーが出るのを引いた値に固定のようだ。
どちらも出ていない時だと隙間ができる、うーん。

var ES6Test = class {
    newLayer(text) {
        let element = document.createElement("div");
        element.appendChild(document.createTextNode(text));
        // style
        element.style.backgroundColor = "#000";
        element.style.position = "absolute";
        element.style.display = "block";
        element.style.opacity = "0.7";
        element.style.zIndex = "100";
        element.style.margin = "auto";
        element.style.top = `${window.pageYOffset}px`;
        element.style.width = `${document.documentElement.clientWidth}px`;
        //element.style.height = `${document.documentElement.clientHeight}px`;
        element.style.height = `${window.innerHeight}px`;
        // tap or click
        element.addEventListener("click", ()=> {
            element.parentNode.removeChild(element);
        });
        // add
        document.body.appendChild(element);
    }
}

とりあえず。

ところで Safari は普通に更新するだけで外部リンクの js を更新するみたい。
Ctrl+F5 すればいいだけだがチョロメや狐もそうなってほしいよ。

ついでに、前回のインデントはタブとスペースが混じっていたのでモードラインを付けた。
Python だと実行時に怒られるのですぐ気が付くのにね。

ES6 Web TestPage

Comipoli Web 版の制作が全然進まない。
このままでは更新が滞ってしまい筆者のファン(?)に申し訳ない。
そんなこんなで JavaScript Test Page の ES6 化でも。
まだ途中だけど。

ES6 Web TestPage – L’Isola di Niente

前とは変えて全部一つのクラスにまとめる。
var は class の参照のみに使う、Gjs と同じように。
なるべく無名関数を使う、setInterval しか用が無いような?
id は引数で処理して可搬性を上げる。

JabaScriptCode

こんな感じになった。
Python 等でアプリを作った経験があるならほぼ同じように書けると解る。
とにかく this にくっつけとけばクロージャなんていらないんだよ。
ES6 様々です。

それと let のスコープなんだけど。
同じ HTML(PHP) ファイル内ならタグブロックが違っても参照できるのね。
そのために var は全部グローバル変数になるのかなんて思っていたよ。

しかし ES6 ってこんなに楽なのに普及しないなぁ、IE のせいかな。
一番普及している Shift-JIS を使え!とか糞みたいな企業公式ブログもあるし。
日本企業が中国に抜かれっぱなしな理由が解るわ、古いものから変えようとしないんだもん。
新しいものを全力否定するのはネラーだけにしようよ。

Wayland (Fedora28) ibus

Fedora 28 にアップグレードで Gedit 等の日本語入力がおかしかった件が解決。
GTK_IM_MODULE=ibus が定義されていなかった。

日本語の設定 – Manjaro Linux

Fedora じゃないけど上記を見てあれ?って。
27 では定義されていたと思うんだけど。
.xprofile は必要無いようです。
てか Wayland がコレを参照していたとは思わなかったよ。

set | grep ibus
# if ("GTK_IM_MODULE=ibus" === undefined) {
#     ~/.bashrc_write("GTK_IM_MODULE=ibus")
# }

これで解るよね。

やっと Gedit に戻せる、VSCode の糞仕様にイライラしなくてすむぞ!
スニペットは行頭でしか使えないしショートカットで実行もできないし。
定型文を文字列間に流し込む手段が無いとか、ホント使えねぇ。

ついでに Mozc ってのを試したけど、これ何故人気があるの?
速攻 ibus-kkc に戻したよ、使い込んでいるという理由もあるけど。

mangaz

筆者は comipoli の Web 版をそのうちと思っていたけど。
やりたいことを既に全部やっているサイトがあった。
今頃知ったのか?と思われそうだけど。

マンガ図書館Z – 無料で漫画が全巻読み放題!

スペースキーか左右矢印キーでサクッと見開き観覧ってまんまじゃん。
これじゃ筆者がパクったみたいだ、アレは自分で思いついたのに。

いや、思想はこういう投稿型と少し違っていて。
下記等のリンク先での漫画観覧方法がバラバラなのが気になって。
ちなみに「うめぼし」がお気に入りよ、うふふw

Web漫画100|無料のWebマンガ専門検索サイト

GANMA みたいな観覧に統一されたらいいのに、なんて思いついたけど。
クライアント側ではどうにもならないのでサイト管理人にやってもらう必要がありまして。
それが JavaScript のリンク一行だけで使えるなら皆喜んで使ってくれるかな、みたいな。

そもそも市販コミック読み放題ならネットカフェでいいんだし。
余程のマイナーかオリジナルでないと Web コミックは無意味だと思う。
海賊版サイトが一時期話題になっていたけど理解できなかった。
スパムや詐欺のリスクを考えるならネットカフェのほうがいいとすぐ気が付く。

実際、投稿型サイトもいいけど自分のサイトで全部管理したいという人も多いようだ。
筆者が github 等を使うつもりがないのと似たようなものかも。
自作する時の参考にでもしてくれればそれで満足。

正直、絶賛放置中の JavaScript Test Page をなんとかしたいからなんだけど。
ウチ姫を Web で再現しようとしたページだったけど、もう忘れられたソシャゲだ。
それになんたって ES5 のままだ。
ES6 TestPage とかに変名して少しずつ comipoli の Web 版を作っていく。
…の作業が全然進まないので今回は今後の予定のみ。

ところで comipoli macOS 版ですが。
案の定サムネイル表示でドン詰りのまま止まっています。
情報が皆無ってやはり難しい、JXA 面白いのに人気無いなぁ。