macOS Sierra の日本語入力 JapaneseIM 環境

もうそろそろ High Sierra だという中、今更ながらに、Sierra 版に改訂しておこうと思いましたので。

やることにしました。


きっかけと目的
----------
OSX Yosemite になって日本語入力環境が変わったこと切っ掛けでエントリしたのが前回。

以来、OSX El Capitan にて SIP の導入により対象の `plist` ファイルへのアクセス方法が変わり、さらに macOS Sierra になって `plist` の格納場所が変わりました。
まず、この変化を吸収しておこうかと思いました。

正直、「意味あるかな」とも思ったのですが、以下の切り口から、あまり目にしない内容かも？、と思ったので残して更新することにしました。

### "スペース" だけでなく、他のキャラクタも
ひとつは、同様のテーマで、"スペース" に関するレポートは良く目にするのですが、それ以外のキャラクタについて言及したものはどうも少ないかもな、と思ったこと。

### 設定は、シェルスクリプトを使って
そしてもうひとつは、その手続きとしてシェルスクリプトを使っている、と言うのも余り見掛けないな、と思ったこと。  
「ファイルを開いて、○行目を探して～」という方法より、より楽に作業を行う事が出来るのではないかな、と考えています。[^00]



結果
----------
これを走らせるには、リカバリモードで `csrutil disable` で rootless モードを無効にしておく必要があります。
具体的な手続きについては[こちら][20]にて触れられておりますのでご参照ください。

[20]: http://news.mynavi.jp/column/osxhack/142/ "新・OS X ハッキング! (142) Terminalから見た「El Capitan」の変更点(1) | マイナビニュース"

こんなかんじ．[^10];

```sh:japaneseim.sh
#!/bin/bash -eu


# PlistBuddy
pb=/usr/libexec/PlistBuddy

#  KeySetting_Default.plist
plistis=/System/Library/Input\ Methods/JapaneseIM.app/Contents/PlugIns/JapaneseIM.appex/Contents/Resources/KeySetting_Default.plist

function keyCheck {

  val=$("${pb}" -c "Print :keys:${1}:${2}:character" "${plistis}" 2>/dev/null || true)

  if [ "${val}" = "" ]; then
    sudo "${pb}" -c "Add :keys:${1}:${2}:character string ${3}" "${plistis}"
  else
    sudo "${pb}" -c "Set :keys:${1}:${2}:character ${3}" "${plistis}"
  fi
}

# 確認します
while true; do
  printf "スペース，記号を常時，半角入力に設定します．よろしいですか? [y/n]: "
  read res

  case ${res} in
    [Yy]*)
      break ;;
    [Nn]*)
      echo "中止しました．"
      exit 1;;
    *)
      echo "正しいキーを入力してください．" ;;
  esac
done


# plist バックアップ
[ ! -e ${HOME}/temp ] && mkdir ${HOME}/temp
sudo cp -f "${plistis}" "${HOME}/temp/KeySetting_Default.plist~$(date '+%Y%m%d%H%M')"

echo "以下のキャラクタを，常時，半角入力に設定しました．;"
echo "  スペース '␣'"
sudo "${pb}" -c "Set :keys:before_typing:\'' \'':character ' '" "${plistis}"  # 　   space
# echo "  音引き 'ー'"
#sudo "${pb}" -c "Set :keys:*:\''-\'':character '-'" "${plistis}"             # －   minus
# echo "  鉤括弧 '「」'"
#sudo "${pb}" -c "Set :keys:*:\''[\'':character '['" "${plistis}"             # 「」 bracket
#sudo "${pb}" -c "Set :keys:*:\'']\'':character ']'" "${plistis}"
echo "  縦線(パイプ) '｜'"
sudo "${pb}" -c "Set :keys:*:\''|\'':character '|'" "${plistis}"              # ｜   vertical bar
echo "  感嘆符 '！'"
sudo "${pb}" -c "Set :keys:*:\''\!\'':character '\!'" "${plistis}"            # ！   exclamation
echo "  ダブルクォーテーション '\"'"
sudo "${pb}" -c "Set :keys:*:\''"'\"'"\'':character '"'\"'"'" "${plistis}"    # ”   double quotation
echo "  シャープ '＃'"
sudo "${pb}" -c "Set :keys:*:\''#\'':character '#'" "${plistis}"              # ＃   sharp
echo "  ドル記号 '＄'"
sudo "${pb}" -c "Set :keys:*:\''$\'':character '$'" "${plistis}"              # ＄   dollar
echo "  パーセント '％'"
sudo "${pb}" -c "Set :keys:*:\''%\'':character '%'" "${plistis}"              # ％   percent
echo "  アンパサンド '＆'"
sudo "${pb}" -c "Set :keys:*:\''&\'':character '&'" "${plistis}"              # ＆   ampersand
echo "  シングルクォーテーション '''"
sudo "${pb}" -c "Set :keys:*:\''\'\'':character '\''" "${plistis}"            # ’   apostrophe(single quotation)
echo "  丸括弧 '（）'"
sudo "${pb}" -c "Set :keys:*:\''(\'':character '('" "${plistis}"              # （） parentheses
sudo "${pb}" -c "Set :keys:*:\'')\'':character ')'" "${plistis}"
echo "  アスタリスク '*'"
sudo "${pb}" -c "Set :keys:*:\''*\'':character '*'" "${plistis}"              # ＊   asterisk
echo "  プラス '＋'"
sudo "${pb}" -c "Set :keys:*:\''+\'':character '+'" "${plistis}"              # ＋   plus
echo "  コロン '：'"
sudo "${pb}" -c "Set :keys:*:\''\:\'':character ':'" "${plistis}"             # ：   colon
echo "  セミコロン '；'"
sudo "${pb}" -c "Set :keys:*:\'';\'':character ';'" "${plistis}"              # ；   semicolon
echo "  山括弧(大なり，小なり) '＜＞'"
sudo "${pb}" -c "Set :keys:*:\''<\'':character '<'" "${plistis}"              # ＜＞ angle bracket
sudo "${pb}" -c "Set :keys:*:\''>\'':character '>'" "${plistis}"
echo "  イコール '＝'"
sudo "${pb}" -c "Set :keys:*:\''=\'':character '='" "${plistis}"              # ＝   equals
echo "  クエスチョン '？'"
sudo "${pb}" -c "Set :keys:*:\''?\'':character '?'" "${plistis}"              # ？   question
echo "  アットマーク '＠'"
sudo "${pb}" -c "Set :keys:*:\''@\'':character '@'" "${plistis}"              # ＠   at
echo "  サーカムフレックス '＾'"
sudo "${pb}" -c "Set :keys:*:\''^\'':character '^'" "${plistis}"              # ＾   caret
echo "  アンダースコア '＿'"
sudo "${pb}" -c "Set :keys:*:\''_\'':character '_'" "${plistis}"              # ＿   underscore
echo "  バッククォート '｀'"
sudo "${pb}" -c "Set :keys:*:\''\`\'':character '\`'" "${plistis}"            # ‘   back quote
echo "  スラッシュ '／'"
keyCheck "before_typing" "\''/\''" "'/'"                                      # ／ slash (solidus)
keyCheck "typing" "\''/\''" "'/'"
echo "  バックスラッシュ '＼'"
keyCheck "before_typing" "\''\\\\\''" "'\\\'"                                 # ＼ backslash (reverse solidus)
keyCheck "typing" "\''\\\\\''" "'\\\'"


sudo killall -HUP JapaneseIM

echo "*** おわり ***"

```

ハイフン `-` は、"音引き" `ー` として、そしてブラケット `[]` も "鍵括弧" `「」` の方が都合よいので、そのままにしてます。
個人的な好みです。


おしまいです。



[^00]: 編集した `plist` を gist に置いておく、と言うのもありますがｗ
[^10]: もしコード的におかしい，作法的にイカレてる，とかありましたら，是非とも御指南をば．