2014年10月7日火曜日

Macで英語配列のRealforceを使う

環境

  • Mac OS X 10.8.5 (Mountain Lion)
  • Realforce 86u

RealforceはWindows用キーボードなので、デフォルトではWinキーはCommand、AltキーはOptionに割り当てられたり等、Mac用のキーボードとかなりレイアウトが異なります。ここではKarabiner(旧KeyRemap4MacBook)、Seil(旧PCKeyboardHack)を使ってMac用キーボードのレイアウトに近づける方法を紹介します。

まずは以下2つのソフトをインストールして下さい。
- Karabiner
https://pqrs.org/osx/karabiner/index.html.ja
- Seil
https://pqrs.org/osx/karabiner/seil.html.ja

CtrlとCaps Lockの入れ替え

この変更は鉄板ですね。色々方法はありますが、僕はRealforceのDip Switch 1を使用しました(スイッチをONにすると入れ替え)。USBを一旦抜かないと有効にならないので注意。

Option、Commandキーの入れ替え

System Preferencesのキーボード設定でモディファイアキーを以下のように設定します。キーボード選択ボックスでRealforceを選択してから設定して下さい。Caps LockをNo Actionにするのは後でSeilを使ってCaps LockにFnキーを割り当てるためです。

  • Caps Lock -> No Action
  • Option -> Command
  • Command -> Option

Caps LockをFnに

SeilでCaps Lockに未使用のキー(今回はF19を使用)を割り当てます。(Fnキーは63となっていますが、63ではFnキーとして動作しません)

Karabinerのprivate.xmlを編集してF19をFnキーに割り当てます。private.xmlの読み込み方についてはhttps://pqrs.org/osx/karabiner/document.html.jaを参照して下さい。

<item>
  <name>F19 Key to Fn (Change CapsLock to F19(80) in Seil)</name>
  <identifier>remap.f192fn</identifier>
  <autogen>__KeyToKey__ KeyCode::F19, KeyCode::FN</autogen>
</item>

Fn+F1,F2…F12の特殊キーを有効

ディスプレイをスリープ(Ctrl+Shift+Eject)のショートカットを設定

この設定はBetterTouchToolを使って行います。
http://blog.boastr.net/downloads-secondbar-bettertouchtool-2/

ApplicationキーをOptionに割り当て

Karabinerのprivate.xmlに以下を追加。Realforceのキーボードのみで有効になるようにしています。

  <devicevendordef>
    <vendorname>TopreCorporation</vendorname>
    <vendorid>0x853</vendorid>
  </devicevendordef>

  <item>
    <name>App to Option</name>
    <identifier>private.deviceproductdef.topre.app_to_option</identifier>
    <device_only>DeviceVendor::TopreCorporation</device_only>
    <autogen>--KeyToKey-- KeyCode::PC_APPLICATION, KeyCode::OPTION_R</autogen>
  </item>

Home/Endキーの設定

private.xmlに以下を追加。

  <item>
    <name>Home/End</name>
    <identifier>private.deviceproductdef.topre.home_end</identifier>
    <device_only>DeviceVendor::TopreCorporation</device_only>
    <autogen>--KeyToKey-- KeyCode::HOME, KeyCode::CURSOR_LEFT, VK_COMMAND</autogen>
    <autogen>--KeyToKey-- KeyCode::END, KeyCode::CURSOR_RIGHT, VK_COMMAND</autogen>
  </item>

かな・英数の切り替え

Macでの日本語入力モードの切り替え方法は悩ましいですが、僕はワンショットモディファイアを使用しています。Shiftだけを押すとかな、Altだけを押すと英数に切り替わるようになっています。

<item>
  <name>When type Command_L only, send JIS_EISUU(except in Virtual Machine, RDC)</name>
  <identifier>private.cmdL_only_to_eisuu</identifier>
  <not>VIRTUALMACHINE, REMOTEDESKTOPCONNECTION</not>
  <autogen>--KeyOverlaidModifier--
    KeyCode::COMMAND_L, ModifierFlag::COMMAND_L | ModifierFlag::NONE,
    KeyCode::COMMAND_L, KeyCode::JIS_EISUU
  </autogen>
</item>

<item>
  <name>When type Shift_L only, send JIS_KANA(except in Virtual Machine, RDC)</name>
  <identifier>private.shiftL_only_to_kana</identifier>
  <not>VIRTUALMACHINE, REMOTEDESKTOPCONNECTION</not>
  <autogen>--KeyOverlaidModifier--
    KeyCode::SHIFT_L, ModifierFlag::SHIFT_L | ModifierFlag::NONE,
    KeyCode::SHIFT_L, KeyCode::JIS_KANA
  </autogen>
</item>

private.xmlのまとめ

ここまで紹介したprivate.xmlをまとめたものを以下に貼ります。

  <!-- Devices -->
  <devicevendordef>
    <vendorname>TopreCorporation</vendorname>
    <vendorid>0x853</vendorid>
  </devicevendordef>

  <item>
    <name>Topre Realforce</name>

    <item>
      <name>F19 Key to Fn (Change CapsLock to F19(80) in Seil)</name>
      <identifier>remap.f192fn</identifier>
      <autogen>__KeyToKey__ KeyCode::F19, KeyCode::FN</autogen>
    </item>

    <item>
      <name>App to Option</name>
      <identifier>private.deviceproductdef.topre.app_to_option</identifier>
      <device_only>DeviceVendor::TopreCorporation</device_only>
      <autogen>--KeyToKey-- KeyCode::PC_APPLICATION, KeyCode::OPTION_R</autogen>
    </item>

    <item>
      <name>Home/End</name>
      <identifier>private.deviceproductdef.topre.home_end</identifier>
      <device_only>DeviceVendor::TopreCorporation</device_only>
      <autogen>--KeyToKey-- KeyCode::HOME, KeyCode::CURSOR_LEFT, VK_COMMAND</autogen>
      <autogen>--KeyToKey-- KeyCode::END, KeyCode::CURSOR_RIGHT, VK_COMMAND</autogen>
    </item>

    <item>
      <name>When type Command_L only, send JIS_EISUU(except in Virtual Machine, RDC)</name>
      <identifier>private.cmdL_only_to_eisuu</identifier>
      <not>VIRTUALMACHINE, REMOTEDESKTOPCONNECTION</not>
      <autogen>--KeyOverlaidModifier--
        KeyCode::COMMAND_L, ModifierFlag::COMMAND_L | ModifierFlag::NONE,
        KeyCode::COMMAND_L, KeyCode::JIS_EISUU
      </autogen>
    </item>

    <item>
      <name>When type Shift_L only, send JIS_KANA(except in Virtual Machine, RDC)</name>
      <identifier>private.shiftL_only_to_kana</identifier>
      <not>VIRTUALMACHINE, REMOTEDESKTOPCONNECTION</not>
      <autogen>--KeyOverlaidModifier--
        KeyCode::SHIFT_L, ModifierFlag::SHIFT_L | ModifierFlag::NONE,
        KeyCode::SHIFT_L, KeyCode::JIS_KANA
      </autogen>
    </item>
  </item>

2014年9月8日月曜日

Qt CreatorでCMake+Ninjaを使う (Mac)

環境

  • Mac OS X Mountain Lion
  • Qt 5.3
  • cmake 3.0.1

qmakeからCMakeベースのプロジェクトに移行

まずはCMake, NinjaをHomebrewからインストール

    brew install cmake ninja

qmakeベースのプロジェクトからCMakeベースのプロジェクトに移行するため、下記のようなCMakeLists.txtを作成。

cmake_minimum_required(VERSION 2.8.11)

project(hello)

# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Instruct CMake to run moc automatically when needed.
set(CMAKE_AUTOMOC ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(hello_SOURCES main.cpp)

# Find the QtWidgets library
find_package(Qt5Widgets REQUIRED)

# Tell CMake to create the helloworld executable
add_executable(hello MACOSX_BUNDLE ${hello_SOURCES})

# Use the Widgets module from Qt 5.
target_link_libraries(hello Qt5::Widgets)

ちなみに下記のサイトを参考にした。
http://www.executionunit.com/blog/2014/01/22/moving-from-qmake-to-cmake/

コマンドラインでビルドしてみる

% cmake CMakeLists.txt -G Ninja
% ninja

エラーがなければhello.appが作成される。

Qt CreatorでCMakeのプロジェクトとしてオープンする

  1. Qt Creatorの設定でCMakeのパスを設定
  2. “Prefer Ninja generator”にチェックを入れる
  3. “File” -> “Open File or Project”でCMakeLists.txtを指定する
  4. 色々聞かれた後”Run CMake”をする時にGeneratorで”Ninja Generator”を選択して”Run CMake”をクリック
  5. 以下のようなエラーが出た場合、Qt CreatorがNinjaを認識していないので、代わりに”Unix Generator”を選択して”Run CMake”をする
  6. 上記ステップでエラーが出た場合、Projectの”Build Environment”のPATHにninjaへのパスが通っているか確認
  7. ビルドディレクトリ(xxx-build)を削除
  8. 再度”File” -> “Open File or Project”でCMakeLists.txtを指定し、”Run CMake”をする時にGeneratorで”Ninja Generator”を選択して”Run CMake”をクリックすると今度は成功する
CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly.
Missing variable is:
CMAKE_C_COMPILER_ENV_VAR
CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly.
Missing variable is:
CMAKE_C_COMPILER
CMake Error: Could not find cmake module file: /Users/shinichi/Code/untitled-build/CMakeFiles/3.0.1/CMakeCCompiler.cmake
CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly.
Missing variable is:
CMAKE_CXX_COMPILER_ENV_VAR
CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly.
Missing variable is:
CMAKE_CXX_COMPILER
CMake Error: Could not find cmake module file: /Users/shinichi/Code/untitled-build/CMakeFiles/3.0.1/CMakeCXXCompiler.cmake
CMake Error at CMakeLists.txt:1 (project):
  No CMAKE_C_COMPILER could be found.

  Tell CMake where to find the compiler by setting the CMake cache entry
  CMAKE_C_COMPILER to the full path to the compiler, or to the compiler name
  if it is in the PATH.


CMake Error at CMakeLists.txt:1 (project):
  No CMAKE_CXX_COMPILER could be found.

  Tell CMake where to find the compiler by setting the CMake cache entry
  CMAKE_CXX_COMPILER to the full path to the compiler, or to the compiler
  name if it is in the PATH.


CMake Error: CMake was unable to find a build program corresponding to "Ninja".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.
-- Configuring incomplete, errors occurred!