前述の投稿の通り、広めの昇降デスクを取り入れてデスク環境を刷新しているのですが、 作業領域が広がった分、目とディスプレイの距離がだいぶ離れてしまいました。
インターネットの記事によりますと、27インチのディスプレイを使っている場合、 デスクワーク時に目に優しいディスプレイの距離は 50 〜 60 cm 前後 みたいです1。
そうすると、この状態だとメニューバーに常駐している Google IME のアイコンや、 IME 切替時にカーソル位置に標示されるポップアップがどうも見えにくい…。困った。
ということで、サウンドの音量調整のときよろしく、 IME 切替時にディスプレイ中央にドドン!と OSD(On Screen Display)が出たら 非常にわかりやすいんじゃないかなと思ったので挑戦してみました。
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()
↓↓ 実際の動作イメージ ↓↓

すばらしいですねー。
もはや 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
すばらしいですねー。