2015年8月28日金曜日

Windows 10:U+2661の挙動

Windows 10上でのコメント表示は、製品版ビルドになっても結局プレビュー版で見たのと変わってないようでした。日本語版にGulimやMingLiU(PMingLiU)はインストールされておらず、Gulim化やMingLiU化は起きません。
やはりストレージ容量への配慮から、よけいなフォントはオプション扱いにしているようです:

Windows 10 の一部のアプリでテキストの一部が正方形で表示される理由 - Microsoftサポート

それにしてもGulim化のケースが妙なのでもうちょっと見てみました。
下図はひらがなのみのコメント(上段)と、その先頭にGulim化文字U+2661を置いた場合(下段)を比較しています。


10ではひらがながGulimのかわりにゴシックで表示されます。ただしMS Pゴシックではなく、なぜかMS UI Gothicになっています。MingLiU化だと代わりに表示されるのはMS Pゴシックです。


下図は下段のコメントの先頭へさらにSimSun化文字U+2609を追加したところです(U+2588はMingLiU属性も持つためここでは使いません)。


8.1以前ならU+2609に従ってひらがなもSimSunに変化します。一方10では何も変化が起きません。
これがMingLiU化の場合だと、10でもひらがなは8.1以前と同様に変化します。


上の10でのGulim化文字による挙動は、U+2661とひらがなが直接隣接しないと起きなくなるようです。


Gulim化を起こさないU+2661の隣接は、CJKフォント変化そのものを無効化しているように見えます。

ところで、上の図の上段ではU+2661が豆腐になっています。
SimSunにトランプのマークは無いため、8.1以前であればフォントリンク先であるMicrosoft Sans SerifのU+2661が代替で表示されます。10のSimSunのリンク先は増えているものの、途中までは8.1と同じです。


Microsoft Sans Serifを調べてみたところ、10ではこのフォントからU+2661が消えていました。元々ここにあったのはバグだと思われるので、10でようやく消えたのでしょう。


しかし、それであれば同じくリンク先のMS P明朝で表示できるはずです(現に他のトランプマークはそうであると思われます)。

ところがあらためて下図のように見てみると、どうもそういう問題ではないようでした。デフォルトが豆腐です。
この豆腐はArialではないかと思います。Arialに白抜きのトランプマークはありません。


そしてSimSun化させた時も、フォントリンクは使われず豆腐のままです。
ひらがなと隣接したケースだけ、8.1と同じようにSegoe UI Symbolが表示されています。Segoe UI Symbolが表示されるのは8以降の挙動ですが、フォントリンクとは別の理由によるものと考えられます。
豆腐は10特有の挙動なのか、Gulimが無い場合の挙動なのかは確かめていません。

2015年8月3日月曜日

Windows 10:OneDriveフォルダの変更

Windows 8.1から10にアップグレードしてみて、デスクトップPCでは今のところ大きな問題はありません。
ところがタブレットでは一つ困ったことが起きました。OneDriveフォルダをCドライブではなくSDカード(Dドライブ)に保存していたのですが、10ではこれが認識されずエラーになってしまいます。


OneDriveの設定からSDカードの場所を指定し直してもエラーになります。


デスクトップPCでも元々C以外のデータドライブ(HDD)に保存していました。しかしそちらではこのようなエラーは起きていません。SDカードだとだめなんでしょうか。
とりあえず解決するのは簡単でした。SDカードをCドライブに作成した空フォルダにマウントすれば問題ありませんでした。

あらかじめ「C:\SD」というフォルダを作り、コントロールパネルからディスクの管理を開きます。
Dドライブを選択→「ドライブ文字とパスの変更」


「追加」


「次の空のNTFSフォルダにマウントする」で「C:\SD」


後はOneDriveの設定からC:\SD経由でSDカード内の場所を指定すればエラーは出ませんでした。
そう言えば8.1の時からSDカードに保存したアプリがタスクバーにピン止めできなかったのですが、それもこれで解決しました。

上の方法を試す前に、SDカードに仮想HDDを作って解決したという情報を見つけていました。

Windows10のOnedriveフォルダは移動できない? - マイクロソフト コミュニティ

これも試したところ確かにできました
ただしVHDは自動では認識されないため、起動時に自動でマウントする仕掛けが必要でした。バッチファイルでdiskpart.exeを起動して、VHDをマウントするスクリプトを実行させます。

diskpartに実行させるスクリプト(d:\vhdmount.txt):
select vdisk file="d:\Data.vhd"
attach vdisk

上のスクリプトをdiskpartに実行させるバッチファイル(d:\automount.bat):
diskpart -s d:\vhdmount.txt

このautomount.batをタスクスケジューラに登録し、トリガーをログオン時に設定しました。
Windowsを起動したところ、バッチファイル実行→仮想HDDマウント→OneDrive同期開始となり一応うまくいきました。
と言っても起動時にコマンドプロンプトが表示されてしまうこと、特にメリットがないことから前者の方法でやることにしました。