自前で Google IME の OSD を作って表示させてみた話

まえがき

前述の投稿の通り、広めの昇降デスクを取り入れてデスク環境を刷新しているのですが、 作業領域が広がった分、目とディスプレイの距離がだいぶ離れてしまいました。

インターネットの記事によりますと、27インチのディスプレイを使っている場合、 デスクワーク時に目に優しいディスプレイの距離は 50 〜 60 cm 前後 みたいです1

そうすると、この状態だとメニューバーに常駐している Google IME のアイコンや、 IME 切替時にカーソル位置に標示されるポップアップがどうも見えにくい…。困った。

ということで、サウンドの音量調整のときよろしく、 IME 切替時にディスプレイ中央にドドン!と OSD(On Screen Display)が出たら 非常にわかりやすいんじゃないかなと思ったので挑戦してみました。

やったこと① Hammerspoon の導入

ChatGPT ↑のことを聞いてみたらおすすめしてくれたものが Hammerspoon というもの。

What is Hammerspoon?

This is a tool for powerful automation of macOS. At its core, Hammerspoon is just a bridge between the operating system and a Lua scripting engine. What gives Hammerspoon its power is a set of extensions that expose specific pieces of system functionality, to the user.

引用: Hammerspoon 公式

つまるところ、Lua のスクリプトから Mac OS の様々な機能を拡張することができるもの、と理解すれば良さそうです。

具体的なインストール方法については割愛しますが、こちらのアプリケーションをインストールしたうえで、 所定のスクリプト(~/.hammerspoon/init.lua)を作成することでやりたいことが実現できました。

以下、ご参考まで。

-- Google日本語入力 OSD表示スクリプト

-- 入力ソース名に応じて表示文字を返す関数
local function getImeSymbol()
    local sourceId = hs.keycodes.currentSourceID()

    if string.find(sourceId, "google") and string.find(sourceId, "base") then
        return "あ"  -- 日本語入力
    elseif string.find(sourceId, "google") and string.find(sourceId, "Roman") then
        return "A"  -- 英数入力
    else
        -- 他のIMEやレイアウトの場合
        return sourceId
    end
end

-- IME切り替え時に表示する処理
local function showImeOsd()
    local symbol = getImeSymbol()
    hs.alert.closeAll()
    hs.alert.show(symbol, {
        fillColor = {red=0, green=0, blue=0, alpha=0.6},
        textColor = {red=1, green=1, blue=1, alpha=1},
        textSize = 100,
        radius = 20,
        atScreenEdge = 0
    }, hs.screen.mainScreen(), 0.6) -- 0.6秒表示
end

-- 入力ソース変更イベントを監視
hs.keycodes.inputSourceChanged(showImeOsd)

-- 初回ロード時にも現在の状態を表示(お好みで)
showImeOsd()

↓↓ 実際の動作イメージ ↓↓

動作イメージ

すばらしいですねー。

やったこと② OS 標準のポップアップ表示の停止

もはや IME 変更時に標示される標準のポップアップもいりませんので、 先人たちの知恵を参考にポップアップする吹き出しも無効化しました2

↓↓ 無効化手順 ↓↓

sudo mkdir -p /Library/Preferences/FeatureFlags/Domain
sudo /usr/libexec/PlistBuddy -c "Add 'redesigned_text_cursor:Enabled' bool false" /Library/Preferences/FeatureFlags/Domain/UIKit.plist
sudo reboot

↓↓ 復活手順 ↓↓

sudo rm /Library/Preferences/FeatureFlags/Domain/UIKit.plist

すばらしいですねー。

Footnotes

  1. 視力低下を防ぐ!PCモニターの最適な距離と解像度の選び方|Kei | MBA| 元銀行員
  2. macOS Sonomaのかな漢字変換で表示される吹き出しを消す方法|TechRacho by BPS株式会社
© 2021 czu.jp