月別アーカイブ: 2015年7月

PyObjC

PyObjC で Python から Cocoa にアクセスしてみよう (フェンリル | デベロッパーズブログ)

なんだよ、Mac で Python は全然役立たずじゃないヤン!
ただ Python2 専用だろうな、次期版は Python3 になるかな。

Simple PyObjC Example ? Python recipes ? ActiveState Code

Window も作れ、更にサブクラスも当然のように使えるようだ。
しかし日本語情報が全然見つからない。
日本人は Mac で Python でも計算ばかりやって喜んでいるようだ。
何が面白くてプログラミングしているか理解できないが人それぞれかと。

よし上記をコピーして動かしてみよう。

拡張子を外して実行パーミッションを付けて。
シバンで pythonw を指定してと。

#!/usr/bin/pythonw
#-*- coding:utf8 -*-

これで Finder から command+O してみる。

mac_pythonw

端末エミュレーターが開くジャン!
pythonw は Windows と仕様が違うの?

Macintosh で Python を使う ? Python 2.7ja1 documentation
Windows で Python を使う ? Python 2.7ja1 documentation

確かに Mac のドキュメントには”ターミナル無し”とは書いていない。
ヤラレタって感じ、結局アップルスクリプトと変わらない結果に。
オマケに初期化が凄く遅い、おまえは IronPython か!

やはりスクリプトで GUI はあきらめたほうが良さげ。
でも Objective-C 関数が Python で使えるのは嬉しいかも。
いや、初期化が遅いと結局使わなくなるのは経験済みで。
あー”コレだ!”てのがまだ見つからないYO!

Mac Application System Event

mac にてスクリプトのみで GUI がやりたい。
つまり Linux の PyGObject のようにしたい。

AppleScript: Graphic User Interface (GUI) Scripting

やっとヒントが見つかった。
System Event で Application を作れば空のアプリになるようだ。
コレを利用して別途で GUI を作ればなんとかなりそう。

シバンで osascript を指定して実行パーミッションを付けて。
拡張子を取っ払わないとデフォルトアプリ起動になるので注意。

#!/usr/bin/osascript -l JavaScript

var app = Application("System Events");
app.includeStandardAdditions = true;
app.displayDialog("はろーわーるど");

javascript_dlg

よし、ダイアログのみを出すスクリプトはイケた!
でも Finder にて command+O では端末が開く…

Python でも試したけど拡張子が無ければシバンで開いてくれる。
けれど Windows と同様に端末が開いてしまう。
pythonw がある時点で気がつけよ俺、Linux には無いてか不要。

端末を開かずに osascript を実行する方法、あるのか?
Windows で PowerShell をブン投げた時を再現するとは。

Mac は想像していたほど Linux 的には使えないかも。

Mac gvfs-open

Mac で”デフォルトアプリにて開く”は open コマンド。
Linux の gvfs-open と同じ、説明が逆の気がするけど。

ということは Finder で /usr/bin を開くには

cd /usr/bin
open .

usr_bin

おぉ、コマンドからなら普通に開くことができるんだ。
open `pwd` でもいいけどドットのほうが簡単。

端末もいいけどたまに GUI でファイルを確認したい時があるのよ。
隠し属性ファイルを Finder に表示する必要なんて無いんだな。
finder コマンドが存在しなくて困っていたけどこんな方法が。

ドットディレクトリ内を探したい時は ls -a コマンドで。
Linux を使っている人なら常識だけど。

後はパスの通った場所にコレを用意して。

#!/bin/sh
open -a /Applications/Atom.app $@
#!/bin/sh
open -a /Applications/iHex.app $@

osx_support

よしコレでファイルの確認作業が格段に楽になった。
本当は Nautilus の拡張みたくやりたいけどまだ手段がワカラン。
iHex は無償だったので選んだけど確認用途なら十分かな。
しかしまあ、同じ UNIX というだけでありがたいYO!

Mac JavaScript

mac ではスクリプトは何を使おう?

筆者が主に Python を使っているのは Linux だったから。
書くまでもなく PyGObject という究極便利なものがあったから。
Linux なんてアップデートマネージャや dnf が Python 製。

使う言語はフレームワークやライブラリで決まる。
簡易な CMS ツールなら wordpress ベースなので PHP に。
スマホゲームなら Unity 一択に近いので C# に。

Mac で Python はどう考えたって役立たずだよなぁ。
Apple スクリプトを覚えても他で応用が効かないのが痛い。
ならば JavaScript なんてどうだ?

なんたって上記のドレも JavaScript が絡む。
今や GNOME デフォルトアプリでさえ Gjs 製がある。
Unity(mono) は JavaScript も使える、というように。
mac でも Gjs のようなものがあれば便利だけど。

知らないうちにMacがシステム標準でJavaScriptで操作できるようになってた (JXA) – Qiita

って思っていたら Yosemite なら普通に使えるんかい!

早速 .bashrc にエイリアスを用意しよう、mjs でいいかな。
どうでもいいけど mac には標準で nano が入っている。
ドットファイルの編集をする場合なんかに便利だね。

nano

PS1='[\u@\h \W]$ '

mjs()
{
        if [ $# -eq 0 ]; then
                osascript -l JavaScript -i
        else
                osascript -l JavaScript $@
        fi
}

普通にエイリアスを登録でもいいけど筆者は関数にした。
これなら Gjs や Python 同様に引数の有無でインタラクティブシェルに。
同じようにしたい人は関数名をお好みで変更してね。

再ログインで使えるようになったのを確認してと。
control+D で終了できるけど終了時に改行はしてくれないようだ。
さて、Gjs 並には使えるのかな?

mac_js

let は無理か、まあ Safari でも使えないからね。
JavaScript エンジンは Safari と同じ Nitro だろうし。
でも Gjs のようにタプルは問題なく使えるようです。
SpiderMonky に統一ってわけにはいかないよな。

標準出力は console.log() を使えば可能。
print() を用意してほしいな、手段を知らないだけかもだが。

さて言語は使えることが解ったので GUI を作る方法でも。

OS X YosemiteからJSでMacアプリを作れるようになったって!?と聞いてみたものの | mah365

こんなのを見つけたけど osascript では動かないや。
スクリプトエディタ.app で command+R の必要がある。
うーん、これじゃたいして役に立たないぞ。

何か手段があるのだろうけど検索しても出てこない。
そりゃこんな Mac らしくないことがしたい人は少ないよNE。
もう少し調べる。