読者です 読者をやめる 読者になる 読者になる

osx yosemite の入力環境が色々とかったるかったので、アゲイン。で、今度は全部やっつけてやるよ。

tech macos settings

世間は osx 10.11 el capitan とか言っているのに...ねw

以前のこんなエントリーで、;

分からなかったのが、ハイフン(マイナス)とダブルクォーテーション。
これってどうしたら良いのでしょう。どなたか...

このハイフンとダブルクォーテーション、加えてその時盲点だったスラッシュ、バックスラッシュについても分かったので改めて。

こんな風にしてみました。とりあえず必要箇所のみ。;

pb=/usr/libexec/PlistBuddy
plistis=/System/Library/Input\ Methods/JapaneseIM.app/Contents/Resources/KeySetting_Default.plist


# -   minus
sudo "${pb}" -c "Set :keys:*:\''-\'':character '-'" "${plistis}"

# ”   double quotation
sudo "${pb}" -c "Set :keys:*:\''"'\"'"\'':character '"'\"'"'" "${plistis}"

# / slash (solidus)
val=$("${pb}" -c "Print :keys:before_typing:\''/\'':character" "${plistis}" 2>/dev/null || true)
if [ "${val}" = "" ]; then
  sudo "${pb}" -c "Add :keys:before_typing:\''/\'':character string '/'" "${plistis}"
else
  sudo "${pb}" -c "Set :keys:before_typing:\''/\'':character '/'" "${plistis}"
fi
val=$("${pb}" -c "Print :keys:typing:\''/\'':character" "${plistis}" 2>/dev/null || true)
if [ "${val}" = "" ]; then
  sudo "${pb}" -c "Add :keys:typing:\''/\'':character string '/'" "${plistis}"
else
  sudo "${pb}" -c "Set :keys:typing:\''/\'':character '/'" "${plistis}"
fi

# \ backslash (reverse solidus)
val=$("${pb}" -c "Print :keys:before_typing:\''\\\\\'':character" "${plistis}" 2>/dev/null || true)
if [ "${val}" = "" ]; then
  sudo "${pb}" -c "Add :keys:before_typing:\''\\\\\'':character string '\\\'" "${plistis}"
else
  sudo "${pb}" -c "Set :keys:before_typing:\''\\\\\'':character '\\\'" "${plistis}"
fi
val=$("${pb}" -c "Print :keys:typing:\''\\\\\'':character" "${plistis}" 2>/dev/null || true)
if [ "${val}" = "" ]; then
  sudo "${pb}" -c "Add :keys:typing:\''\\\\\'':character string '\\\'" "${plistis}"
else
  sudo "${pb}" -c "Set :keys:typing:\''\\\\\'':character '\\\'" "${plistis}"
fi

sudo killall -HUP JapaneseIM

echo "now, its done!"

にしても、このエスケープさ、どうにかなんないもんかね。めぐせ。

先日「google chrome の動作が嫌がらせを凌駕したレベルで遅くなって..」という話をしましたが、そのいちいち強いられる "待て" に耐え切れず、結局 os を再インストールしたのでした。
そんな中での話。

いつもの通り shellscript を走らせてマシンの前に戻ってきたら、途中でスクリプトが止まってしまっている模様。

: ()
osx.sh==> Input: 記号はシングルバイトでの入力にする. [Y/n]
Set: Entry, ":keys:before_typing:'/':character", Does Not Exist

選りによってまたこいつ。しかもスラッシュ / とかバックスラッシュ \ とかって orz

あー...かったり。

でもな、と。

osx 10.11 el capitan プレビューのレビューがチラホラ見られるような感じにまで時は流れているわけで。いい加減ここら辺りで決着をつけておいた方いいか、と自らに鞭を打つ。...なぜか、そう思った。*1

と言う事でご覧の通り、スラッシュとバックスラッシュは元々値として存在しない様子。
確かにそうだったこと思い出し*2、なので、それぞれ値の有無により 'Add' か 'Set' かを決めれば良い、と。

アイディアはこの辺りを見て、まあイケるかな、と思った。

» bash - plistbuddy - How to intercept errors (Key does not exist) - Stack Overflow

一応、上手く行く模様。

最終的にこうしました

記号類の常時半角入力の部分に関しては、こんな感じ。
前述のスラッシュ辺りでやっている値の存在チェック結果による制御はやはり冗長なので、オリジナルの関数を用意してまかなうことに。内容は上述のまんま。ちなみに 1 行目の ask ってのはシェルスクリプト内で定義しているオリジナルの関数。;

if ask 'Input: 記号はシングルバイトでの入力にする.' Y; then
    sudo cp -f "${plistis}" "$HOME/KeySetting_Default.plist.org"

    sudo "${pb}" -c "Set :keys:before_typing:\'' \'':character ' '" "${plistis}" #    space
    sudo "${pb}" -c "Set :keys:*:\''-\'':character '-'" "${plistis}"             # -   minus
    sudo "${pb}" -c "Set :keys:*:\''|\'':character '|'" "${plistis}"             # |   vertical bar
    sudo "${pb}" -c "Set :keys:*:\''\!\'':character '\!'" "${plistis}"           # !   exclamation
    sudo "${pb}" -c "Set :keys:*:\''"'\"'"\'':character '"'\"'"'" "${plistis}"   # ”   double quotation
    sudo "${pb}" -c "Set :keys:*:\''#\'':character '#'" "${plistis}"             # #   sharp
    sudo "${pb}" -c "Set :keys:*:\''$\'':character '$'" "${plistis}"             # $   dollar
    sudo "${pb}" -c "Set :keys:*:\''%\'':character '%'" "${plistis}"             # %   percent
    sudo "${pb}" -c "Set :keys:*:\''&\'':character '&'" "${plistis}"             # &   ampersand
    sudo "${pb}" -c "Set :keys:*:\''\'\'':character '\''" "${plistis}"           # ’   apostrophe(single quotation)
    sudo "${pb}" -c "Set :keys:*:\''(\'':character '('" "${plistis}"             # () parentheses
    sudo "${pb}" -c "Set :keys:*:\'')\'':character ')'" "${plistis}"
    sudo "${pb}" -c "Set :keys:*:\''*\'':character '*'" "${plistis}"             # *   asterisk
    sudo "${pb}" -c "Set :keys:*:\''+\'':character '+'" "${plistis}"             # +   plus
    sudo "${pb}" -c "Set :keys:*:\''\:\'':character ':'" "${plistis}"            # :   colon
    sudo "${pb}" -c "Set :keys:*:\'';\'':character ';'" "${plistis}"             # ;   semicolon
    sudo "${pb}" -c "Set :keys:*:\''<\'':character '<'" "${plistis}"             # <> angle bracket
    sudo "${pb}" -c "Set :keys:*:\''>\'':character '>'" "${plistis}"
    sudo "${pb}" -c "Set :keys:*:\''=\'':character '='" "${plistis}"             # =   equals
    sudo "${pb}" -c "Set :keys:*:\''?\'':character '?'" "${plistis}"             # ?   question
    sudo "${pb}" -c "Set :keys:*:\''@\'':character '@'" "${plistis}"             # @   at
    sudo "${pb}" -c "Set :keys:*:\''^\'':character '^'" "${plistis}"             # ^   caret
    sudo "${pb}" -c "Set :keys:*:\''_\'':character '_'" "${plistis}"             # _   underscore
    sudo "${pb}" -c "Set :keys:*:\''\`\'':character '\`'" "${plistis}"           # ‘   back quote
    keyCharExistence "before_typing" "\''/\''" "'/'"                             # / slash (solidus)
    keyCharExistence "typing" "\''/\''" "'/'"
    keyCharExistence "before_typing" "\''\\\\\''" "'\\\'"                        # \ backslash (reverse solidus)
    keyCharExistence "typing" "\''\\\\\''" "'/'"
fi

マイナス とダブルクォート については、賢い方がいらっしゃって助けられました
そしてエントリーでコメントを入れてくださった匿名の方。

いずれも感謝です。ありがとうございます。

でもね

何か osx 10.11 el capitan では日本語の入力周りの振る舞いが変わるようで、今後この営みは全く役に立たないものになるかもしれませんwww

増えた語彙と改良された言語エンジンを活用して、あなたがひらがなを入力するのとほぼ同時に、自動的に変換していきます。

ライブ変換》 とか言うらしいですよ。

本当に使えるのかなぁ。
これまでの振る舞いを見るに、そう期待できるようなものにはならないような気もするんだけどなぁ、と言うのが正直なところ(笑

「どうせ..」に結果「..あぁ、やっぱりな」と言う、"いつもの感じ" でさ。

にしても、アップルって "劇的" とか "飛躍的" とかこの手の表現好きでだよねー。
何かスマートな感じなくって、何だかな..って思うのですが。

はい、おしまいです。

*1:んな事言っても、モチベーションはすんごい痩せていたので、ぼんやり気の向いた時に手をつけ、飽きたら止める、な感じで、3、4 日間ほどだらだらと要すwww

*2:以前やったのは、一旦 'Add' したのに対し 'Set' で試行錯誤していたんだろう。注意力足んない。