Windows

Todoist for Windows の中華フォント問題を解決する

今回のアップデートで直ってなかったので。

漢字が変なフォントで表示されるやつです。

結論としては、中国語の言語ファイルを削除すればOKです。

Todoistのインストールフォルダ(Windows7ではC:\Program Files (x86)\Todoist)内のlocaleフォルダに、言語ファイルが格納されています。

この中の、zh-CN.pakおよびzh-TW.pakを削除/移動/リネームすれば、日本語フォントが適用され、正常に表示されます。

まあ、フォント選ばせてくれれば済む話なんですけどね。

iCloud DriveはたぶんWindows 7でも使える

iCloud Drive が「Winodows 8 以降」表記になっているのは日本語版だけ

なお、中国語版でもWindows 7 或更新版本的 PC 上という表記になっていますね。

結論としては、iCloud DriveはWindows 7でも使えるということでいいのではないでしょうか。

考えてた対策がムダになった

私の母艦PCはWindows 7なので、一応iCloud Driveでサポートされない場合の対策も考えていました。

といっても、単にMacローカルでiCloud DriveフォルダとDropboxフォルダを同期するだけなのですが。

このへんを使って。

Vistaなら使えるかもしれませんね。

MacもすなるターミナルからSublime Textといふものを、Windowsもしてみむとてするなり

つまり、Jekyllとか静的サイトジェネレータの動作検証のために適当にでっち上げたプロジェクトフォルダをSublime Text 3に投げたい!

ほぼメモです。

コマンドプロンプトの場合

C:\Program Files\Sublime Text 3にパスを通す。=環境変数設定のPATHのとこに;区切りでC:\Program Files\Sublime Text 3を追加。

sublime_text.exe test.txt

こんな感じでいける。Macでもそうだが、存在しないファイルも作成できる。

Powershellの場合

上記を参考に。

subl test.txt

これでいけた。

ckw+nyaosの場合

_nya(拡張子なし設定ファイル)に以下を追加。

# 以下エイリアス
alias subl=sublime_text.exe

最初イコールの右側をC:\Program Files\Sublime Text 3にしたらC:\Program Files\Sublimeまでしか反映されなかった。エイリアスにスペース含むパス指定できない、二重引用符でくくってもダメ。

パス通した後exe直指定なら、スペース含まないのでOK。

subl test.txt

これでいけた。

おまけ:Bluewindの場合

特定のフォルダに新規ファイルを作りたい、具体的にはResophNotesの同期が怪しいのでResophNotes使わずにnvALTの同期フォルダに新規メモ作りたい場合など。

まず、BluewindSublime Text 3を登録。今回、キーワードはstとした。

高度な設定(H)>入力時のパラメータにキーワードを使う(P)を有効化。

メモを入れるフォルダを登録。キーワードはnotesとした。

例えば、

st notes

でメモフォルダをSublime Text 3で開く

ST notes\test.txt

でtest.txtをメモフォルダに作成して開く。

ファイル名に半角スペースを含めたい場合はパラメータ全体を二重引用符でくくる。

ST "notes\test test.txt"

さらに、別のアイテムとして、作業フォルダ=メモフォルダでSublime Text 3を登録。キーワードはnstとした。

この場合、以下のコマンドでメモフォルダにtest.txtを作成して開くことができる。

nst test.txt

Sublime Textは存在しないファイルを与えるとバッファ作成してくれるので、このような使い方ができる。

AutoHotKeyのスニペット展開で、特定アプリのみ挙動を変える

※追記アリ

一部アプリとの干渉

上記ページの方法で、IMEの状態を問わず、AutoHotKeyを利用したTextExpanderライクなスニペット展開ができます。
スニペットの指定は、例えば以下のようになります。

1
2
3
::ahk::
PasteString("AutoHotKey")
return

ただし、例えばResophNotesでは正常に展開されず、単なる「クリップボードからのペースト」になりました。どうもクリップボードのハンドルがうまくいっていないようだったので、以下のようにすると作動しました。

1
2
3
4
PasteString(String){
Clipboard := String
Send,^v
}

ただし、こうすると当然クリップボードに残ってしまうので、たまに鬱陶しいことになります。eClipも併用しているので使えないこともないのですが。

そこで、以下のような形で切り分けを行いました。

解決策

まず、ResophNotes専用の関数を別に用意します。これは、同じスクリプトファイル内に同名の関数を記述することができないためです。

1
2
3
4
PasteString2(String){
Clipboard := String
Send,^v
}

ホットストリングの内部で、IfWinActiveコマンドを用いて分岐処理を行います。QWidgetはResophNotesのウインドウクラスです。

1
2
3
4
5
6
::ahk::
IfWinActive, ahk_class QWidget
PasteString2("AutoHotKey")
else
PasteString("AutoHotKey")
return

このようにすると、ResophNotesではPasteString2が、その他のウインドウではPasteStringが実行されます。

なお、複数のウインドウを指定する場合、以下のように記述します。

1
2
3
4
5
If WinActive(ahk_class QWidget) or WinActive("ahk_class Notepad")
PasteString2("AutoHotKey")
else
PasteString("AutoHotKey")
return

既存のスニペットを置換するため、oeditで以下の通り正規表現置換を行いました。

検索
: :{2}(.*):{2}\nPasteString\("(.*)"\)\nreturn

置換
: ::\1::\nIfWinActive, ahk_class QWidget\n\tPasteString2("\2")\nelse\n\tPasteString("\2")\nreturn

これで、特定のウインドウを除き、クリップボードを汚さないスニペット展開が可能になりました。

ところがどっこい

あとで思い直して、sleep時間を延ばすだけで解決しました。

アプリが重くて、Ctrl+Vの処理が、クリップボード復元処理の後に行われてしまったのが原因の模様。

AutoHotKeyでTextExpander

これも全てPhraseExpressってヤツのせいなんだ

MacでDashやらTextExpanderやらを覚えて数ヶ月。Windowsでもアプリケーション汎用的なスニペット展開アプリが欲しくなってきました。

最初に試したのが自称「TextExpander for Windows」ことPhraseExpressだったのですが、何も考えずに登録すると「確定待ち状態で展開される」上、動作があからさまに遅いものでした。

「TextExpanderよりAutoHotKeyに近い」とか書いてて思ったわけです。数年ぶりにAutoHotKey使おうよ、と。

AutoHotKeyの現在

なにげにまとまった日本語資料がなかったので簡単にまとめると…

  • AutoHotKeyの開発は一度停滞した
  • Forkとして「AutoHotKey L」が開発された
  • 一部機能が本家に取り入れられたりした
  • それにとどまらず、派生版が本家として配布されるに至った

「AutoHotKey L」がどこでも配布されていないし、「AutoHotKey L」特有の機能が、本家(AutoHotkey: macro and automation Windows scripting language)でダウンロードしたヤツでも利用できたので、間違いないと思われます。

で、インストールとか基本的な利用方法はAutoHotkey Wiki参照。

TextExpanderとして利用するためのPasteString関数

AutoHotKeyでは、ホットストリングを利用して、TextExpander的なスニペット展開ができます。

前にも書きましたが、辞書登録と比較した場合のTextExpanderの基本的な優位点は、「候補の中から選ぶ必要がない」ことと、「確定の手間が省ける」ことです。

現在のAutoHotKeyでは、sendコマンドで日本語も挿入できるのですが、IMEオン状態で実行すると「確定待ち状態で展開される」ことに変わりはありません。

そこで、文字列を一発入力するAutoHotkeyスクリプト - AutoHotkeyサンプル集を丸パクリして、PasteString関数をスクリプトファイルに組み込みます。

ついでに、日付を展開できるようにFormatTimeコマンドを利用して関数化します。

1
2
3
4
PasteDate(){
FormatTime, s,, yyyy-MM-dd
PasteString(s)
}

また、ホットストリングの終了文字を;に限定したかったので、以下のように指定しました。エスケープ文字に注意する必要があります。

1
#Hotstring EndChars ';

その上で、個々のスニペットは以下のように登録します。スクリプト実行型にする必要があります。

1
2
3
4
5
6
7
::ahk::
PasteString("AutoHotKey")
return
::dt::
PasteDate()
return

こうすると、「ahk;」とタイプすると「AutoHotKey」が、「dt;」とタイプすると「2014-07-20」のような文字列が展開されます。ペースト処理なので、IMEオンでも確定状態で展開されます。

スニペットを登録する際も、適当にテンプレートをコピペして穴埋めするだけで済むので非常に楽です。

さらに、スニペットを登録するスニペットを作ってみました。

PhraseExpress と日本語入力の干渉を解決する

PhraseExpress とは

このように、MacでいうTextExpanderのような定型文入力支援アプリケーションであると、公式サイトのtitleで堂々と謳い上げています。しかし、これはかなり語弊のある表現で、どちらかといえば、汎アプリケーション的なマクロ実行プログラムであるとするのが正確でしょう。

というのは、PhraseExpressには以下のような特徴があるためです。

  • キー操作、外部アプリケーション実行、スクリプトなどを登録できる。
  • Phrase(定型文)ごとにショートカットキーを設定できる。
  • Phraseごとにどのアプリケーションで実行するかを設定できる。

ここまで来ると、もはや文章入力支援という表現では足りず、あらゆるアプリケーションをコントロールできるマクロプログラムと考えるべきでしょう。どちらかと言えば、TextExpanderよりもAutoHotKeyに近いといえます。

日本語入力との干渉

当初はTextExpanderそのままの感じで使おうとしたのですが、PhraseExpressでは、Google日本語入力などが「IMEオン」の状態でPhraseを展開すると、「変換前のテキスト」として出力されます。つまり、エンターキーで確定する必要があります。

TextExpanderの場合、「TEIMPrefsetter」で日本語入力時にも実行されるよう設定すれば、確定済みのテキストが直接展開されます。辞書登録と比較した場合のTextExpanderの基本的な優位点は、「候補の中から選ぶ必要がない」ことと、「確定の手間が省ける」ことだといえますが、PhraseExpressではその半分が失われているわけです。

「IMEオフ」の状態で展開すれば当然問題ないわけですが、いちいち切り替えるのは業腹です。しかし、PhraseExpressでは、Phraseにキー操作を含むことができるので、IMEのオンオフ切り替えを自動的に実行すればよいのではないかと考えました。

Google日本語入力の場合の設定

Google日本語入力のキー設定

PhraseExpressで実行できるキー操作は、「Modifier」+「”Function key” or “Char”」+「Count」です。

  • Modifier: Ctrl/Alt/Shift/Win の組み合わせ
  • Function key: F1~16/Enter/Tab/Esc/Del/Backspase/矢印キーなど
  • Char: A~Z、0~9のいずれか(必ずModifierと組み合わせる)
  • Count: 回数を指定

ここで、「Function key」には、日本語JISキーボード特有の「半角/全角」などは含まれないため、それを考慮した上でGoogle日本語入力のキー設定を行う必要があります。

例えば、「プロパティ>一般>(キー設定)>キー設定の選択」で、以下のように設定します。

モード 入力キー コマンド
入力文字なし Ctrl Shift F12 IMEを無効化
直接入力 Ctrl Shift F11 IMEを有効化

PhraseExpressへのPhrase登録

以下のようなPhraseを登録します。

1
{#CTRL {#SHIFT {#F12}}}PhraseExpress{#CTRL {#SHIFT {#F11}}}

キー操作部分は、「Phrase content」フィールドで「右クリック>Macro>Simulate entering a special key>more…」などで入力できます。上記のソースをペーストしても大丈夫です。

IMEオンの状態で、上記のPhraseに対するAutotext(省略形)またはHotkeyを入力すると、

「IMEオフ」→「文字列入力」→「IMEオン」

の順で実行され、結果として、確定済みのテキストが入力された状態でIMEがオンに戻ります。

補足

TextExpanderでも同様ですが、Autotextが例えば「pe」のようなローマ字変換される組み合わせの場合、文字数が減るため、Autotext以外の文字まで削除されてしまいます。IMEがオフになるのはAutotextが展開された後であるため、この現象は今回のテクニックで防ぐことができません。Autotextは基本的に子音+記号で構成すべきです。

また、テンプレートとなるPhraseを用意しておくと、Phraseの登録を省力化することができます。例えば、 {#CTRL {#SHIFT {#F12}}}{#CTRL {#SHIFT {#F11}}} のようなPhraseを用意しておき、これにはAutotextもHotkeyも設定しないようにします。あとは、このPhraseをDuplicate(右クリックメニューから選択/Ctrl+D)して、複製されたPhraseを編集すると楽です。