LoginSignup
6
8

More than 5 years have passed since last update.

High DPI 時のSublimetext3のインライン入力

Last updated at Posted at 2015-03-31

4Kモニタを購入して、DPIを標準から変更して使ってます。ドットバイドットの場合は問題ないのですが、WindowsではDPIを変更するとまま問題が発生します。Windows8.1~はそれでもよくなった気がするのですが。

Sublimetext3もHgih DPI(高DPIともいう)で使うと、タブの日本語が化けたりと微妙に問題が発生するのですが、なにより問題なのがIMESupport プラグインのインライン展開部分がズレることです。

2015-03-31 17_25_59-ABCEFG • (Workspace) - Sublime Text (UNREGISTERED).png

多分、High DPI対応していないのが問題かなぁと思って、手っ取り早くクイックハックしてみました。本来ならマニフェストファイル等でHigh DPI対応を宣言するのですが、この方法ではうまくいかなかったので、SetProcessDPIAware関数をざっくり呼び出します。推奨された関数ではなさそうなのですが。(ちゃんとVSでプロジェクト作ってやればいいのかもしれないですが)

SetProcessDPIAware function
https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms633543%28v=vs.85%29.aspx

以下、手元の環境が64bit版なので、それのDiffです。

index 33574a7..deb40d6 100644
--- a/hook/imesupport_hook.c
+++ b/hook/imesupport_hook.c
@@ -21,6 +21,7 @@ BOOL WINAPI DllMain(HINSTANCE hModuleDLL, DWORD fdwReason, LPVOID lpvReserved)
 {
        hModule = hModuleDLL;

+       SetProcessDPIAware();
        switch (fdwReason) {
        case DLL_PROCESS_ATTACH:
                break;

コンパイルはMakefileがありましたが、VS2013のコマンドプロンプトからさくっと以下を実行すればDLLが作成されます。

cl /wd4996 /LD /Feimesupport_hook_x64.dll imesupport_hook.c imm32.lib user32.lib

あとは、%appdata%\Roaming\Sublime Text 3\Packages\IMESupport あたりにパッケージが入っていると思われるので該当DLLを置換すればOKでしょう。いったんサインアウトしないと誰かがDLLをつかんでいて置換できないかもしれません。

以下、置き換え後です。

2015-03-31 17_53_29-ABC • (Workspace) - Sublime Text (UNREGISTERED).png

とりあえず、見られる位置になりました。しばらく使ってみたいと思います。

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8