💡

【過去Blogからの移行記事】Hammerspoonを使って「Shift+Space」を「Cmd+Space」イベントにバインドさせる

2022/09/18に公開

先日、MackBook Air の OSX を macOS Sierra にアップデートしたら、以前からお世話になっているキーボード設定カスタマイズアプリ「karabiner」が Sierraでは現状だと動作しないということに気がついた。

※(2016/11/23現在、開発元サイトによるとSierra対応版を開発中である模様)

私が Karabiner を使って設定していたことは「Shift-Space」(Shift押しながらSpaceキーを押す)で入力ソース(英数/かな)を切り替えることぐらいだったけど、これのいい代替手段がなかなか見つからず煩わしい思いをしていた。

が、今日ふと思い立ってこのことをググっていたら、次の記事が見つかった。

macOS Sierra で Karabiner が使えない問題にどう対処したか - Qiita

Karabiner 使えない対策: Hammerspoon で macOS の修飾キーつきホットキーのキーリマップを実現する - Qiita

ここで示されている内容は私の方の問題とはちょっとだけ異なっていたのでそのまま解決とはいかなかったが、記載内容を参考にちょっと応用することで私の方の問題を解決できたので、備忘録として、行なった手順を以下に記載します。

【前提事項】

私の MacBook Air では
システム環境設定>キーボード>ショートカット>入力ソース
にて「⌘スペース (Cmd + Space)」で「前の入力ソースを選択」を実行する設定になっています。

私の場合は上記の前提なので、
「Shift + Space」をHammerspoonで「Cmd + Space」イベントにバインドさせればよいわけです。
次のようにしました。

  1. Hammerspoon をインストールする。
    1. Hammerspoon開発元のページ の DownloadリンクからGitHubで配布されている zipファイルを取得
    2. zipファイルを解凍して得られた Hammerspoon.app を「アプリケーション」へインストール(つまり/Application/配下へ移す)
  2. Hammerspoon を設定する。
    1. Hammerspoon.app を起動する
    2. (※この項目は投稿当初に書き忘れていたので後で追記した) システム設定>セキュリティとプライバシー>プライバシー>アクセシビリティにて「コンピュータの制御を許可」を Hammerspoon.app に対して有効にする。
    3. メニューの File から Open Config を実行する。
      (するとエディタが ~/.hammerspoon/init.lua を編集モードで開く)
    4. 次のluaコード(これを参考にしてちょっと書き換えただけ)を記述して保存し、エディタを終了する。
local function keyCode(key, modifiers)
  modifiers = modifiers or {}

  return function()
      hs.eventtap.event.newKeyEvent(modifiers, string.lower(key), true):post()
      hs.timer.usleep(1000)
      hs.eventtap.event.newKeyEvent(modifiers, string.lower(key), false):post()
  end
end

hs.hotkey.bind({'shift'}, 'space', keyCode('space', {"cmd"}), nil, keyCode('space', {"cmd"}))

  1. Hammerspoon のメニュー File から Reload Config を実行する。
  2. 動作を確認する。
    1. テキスト入力を受け付けるアプリならなんでもいいので起動する。
    2. テキスト入力待ちの状態で「Shift + Space」を実行して、入力ソースがトグルされることを確認する。

【参考情報】

Discussion