15
15

More than 5 years have passed since last update.

OS Xのマウスポインターを半透明にする

Last updated at Posted at 2015-03-16

マウスポインターは通常、先端にしか当たり判定がないので、多少透過していた方がよいのではないかと考えた。特に僕はポインターを通常より大きくしているので、リンクなどにポインターを乗せると、下の文字が見えなくて困ることがある。

non-transparent.png

もしポインターが半透明であれば、マウスポインターをこのように巨大なものにしていたとしても下の文字が読めて快適になると考えた。

マウスポインターを半透明にするための全体的な流れは次のようになっている。

  1. Mousecapeで、現在のマウスポインターのデータをダンプする
  2. Pythonスクリプトでマウスポインターのデータを読み込み、半透明にする
  3. Pythonで処理したデータを読み込む
  4. Mousecapeをコンピュータの起動時に有効化するため、Helper Toolをインストールする
  5. Mousecapeのバグを補うAppleScriptをスタートアップに登録する

準備

この記事の内容を実行するにあたり、次のものが必要になる。

Mousecapeはマウスポインターを簡単に変更するためのツールである。現在の最新版である0.0.5をダウンロードして使うことにする。

ダウンロードしたものを解凍して出てきた app ファイルを開くと次のようなウィンドウが現われる。

スクリーンショット 2015-03-16 17.08.10.png

現在のマウスポインターをダンプする

ツールバーの Capes -> Dump Cusros.. をクリックして、現在の設定をダンプする。完了すると次のようになる。

スクリーンショット 2015-03-16 17.15.43.png

この青くなっている部分を右クリックし、 Show in Finder を選択すると、ダンプされた cape ファイルがFinderで表示されるので、それをコピーして cape ファイルを入手する。これはテキストエディタで開くなどすると明らかになるが、内部にはマウスポインターの画像をBase64エンコードして格納した巨大なXMLファイルである。

マウスポインターを半透明にする

先ほど入手した cape ファイルを処理するPythonスクリプトを実行する。ただし、このPythonスクリプトは次のライブラリが必要になる。

$ pip install Pillow

などとするとインストールできる。

そして、次のスクリプトをどこかに保存する。

convert.py
from base64 import decodestring, encodestring
from xml.etree.ElementTree import ElementTree
import sys
import io
from PIL import Image

inputfile  = sys.argv[1].strip()
outputfile = sys.argv[2].strip()
opacity    = sys.argv[3].strip()

tree = ElementTree()
tree.parse(inputfile)

imagedata = tree.findall("dict/dict/dict/array/data")

for i in imagedata:
    img = decodestring(i.text)

    img  = Image.open(io.BytesIO(img))
    img  = img.convert('RGBA')
    data = img.getdata()

    new = []
    for p in data:
        new.append((p[0], p[1], p[2], int(p[3] * opacity)))

    img.putdata(new)
    img.save('temp.png', 'PNG')

    result = open('temp.png', 'r')
    base64 = encodestring(result.read())
    result.close()

    i.text = base64

tree.write(outputfile)

次のようにして実行する。

$ python convert.py /path/to/dumpfile.cape output.cape 0.5

このスクリプトは次のようなコマンドライン引数を取る。

第一引数
ダンプしたcapeファイル
第二引数
出力先のファイルパス
第三引数
透過率(0〜1)

しばらく待つと output.cape といったファイルができる。

処理したデータをMousecapeで読み込む

ツールバーの File -> Import Cape をクリックし、先ほど生成した cape ファイルを読み込む。次のようになる。

スクリーンショット 2015-03-16 17.37.48.png

この時点でダンプしたものは消しても構わない。右クリックして Remove で消すことができる。
そして、透過している方を選択し、右クリックして Apply で適用する。

Helper Toolのインストール

コンピュータの起動時にマウスポインターを透過させるために、Helper Toolをインストールする。Mousecapeを起動して、ツールバーから Mousecape -> Install Helper Tool でインストールができる。

Mousecapeのバグとその補完

マウスポインターを大きくしているのだが、再起動するとポインターのサイズが元に戻ってしまった。今からソースコードを解析してバグを発見するのは大変そうだったので、サイズを大きくするAppleScriptを作り、コンピュータへのログイン時にそのスクリプトを起動するようにして回避する。

set_cursor_size.scpt
tell application "Mousecape"
    activate
end tell

delay 0.1

tell application "System Events" to tell application process "Mousecape"
    click (menu item 3 of menu 1 of menu bar item 2 of menu bar 1)
    set theSlider to slider 1 of window 1
    set value of theSlider to 3.0
end tell

quit application "Mousecape"

3.0の部分を好きな数字に書き換えれば、大きさを変更できる。
このコードをスクリプトエディタへ貼り付けて、ツールバーから ファイル -> 書き出す でアプリケーションとして書き出して適当な場所に保存する。
実行すると、Yosemiteでは次のように権限を要求される。

スクリーンショット 2015-03-16 17.55.50.png

システムの環境設定を開き、権限を与える。

スクリーンショット 2015-03-16 17.56.55.png

そして、このアプリケーションが起動時に実行されるように、 システム環境設定 -> ユーザとグループ -> ログイン項目 を選び、アプリケーションを登録する。

スクリーンショット 2015-03-16 18.00.24.png

まとめ

これでマウスポインターを半透明にすることができると思う。まだYosemiteでしか試していないので、もしかしたら他のバージョンでは上手くいかないかもしれない。

semi-transparent.png

15
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
15