Windows でも Mac の commandキーを使いたい

眠いのでとりあえずメモだけ。
後で書き直す。
会社のWindowsでもMacみたいにControlキーとCommandキーを使い分けたい。なぜなら、Unixキーバインド(Ctrl-d 等)を使用しても、Firefoxのショートカットキー(Command-d 等)に影響を与えないから。

実行手順

窓使いの憂鬱で、WindowsキーをAltに割り当てる
Firefoxの設定で、ショートカットキーのプレフィックスをControlからAltに変更する

いまここ。できるか分からないので要調査。
keyconfigを使えばいいのかもしれないけど、あくまでもショートカットキーのプレフィックスのみを変更できれば嬉しい。できなかったらkeyconfigで地道に変更する。
追記
keyconfigではAltとの組み合わせは無理っぽい。Shiftにするか…。

窓使いの憂鬱の設定方法は分かったので、後はFirefoxのショットカットキーのプレフィックスをCtrlからAltに変える方法が見つかれば望みが叶う。

追記 (2009/03/13(金))

できたので、忘れない内にメモ。

手順

1. Firefoxの accelKey を Control から Alt に変更
「%APPDATA%\Mozilla\Firefox\Profiles\xxxxxxxx.default\」に user.js を以下の内容で作成する。
コメントで教えていただいた。
(なぜかabout:configでは設定が有効とならなかった)

user_pref("ui.key.accelKey", 18);
user_pref("ui.key.generalAccessKey", 0);
user_pref("ui.key.menuAccessKey", 0);

2. 窓使いの憂鬱を使用して、LWinキーをAltに割り当て & Emacs(というよりUnix?)風キーバインド設定
以下の内容で作成する。
[TODO]
全て選択を追加(C-a でとられてしっまている)
検索を追加(C-f でとられてしまっている)

keymap Global

# HHK Pro は104キーボード
include "104.mayu"

# LeftWindowsキーをaltに割り当てる
# refer to http://mayu.sourceforge.net/mayu/doc/README-ja.html (iii. モディファイヤキー割り当ての変更)
mod alt = LWin
key *LWin = *LAlt

# PuTTy 起動時はEmacs風キーバインドを使用しないようにする
# refer to:
# http://jisx6004.client.jp/mayu2.html#9
# http://jisx6004.client.jp/mayu2.html#9
# 正規表現に否定の先読み /(?!PuTTy.exe)/ を利用して、PuTTy以外を指定したかったが、できない模様。。
window PuTTY /(firefox|iexplore|gvim|TeraPad)\.exe/ : Global


# 存在するとskkimeなどに干渉するEmacsのキーバインドもあるので、
# 適宜必要なものだけを定義。
include "default.mayu"
#include "emacsedit.mayu"

 key C-A		= Home			# 行頭
 key C-B		= Left			# ←
 key M-B		= C-Left		# ←(単語)
 key C-E		= End			# 行末
 key C-F		= Right			# →
 key M-F		= C-Right		# →(単語)
 key C-G		= Escape		# CANCEL
 key C-N		= Down			# ↓
 key C-P		= Up			# ↑
 key C-D		= Delete				# 削除
 key C-K		= $EmacsEdit/kill-line	l		# 行末まで削除
 key C-M		= Return				# RETURN
# Redoと被るので保留
# key C-Y		= C-V


これで大分Macの操作感に近付いた。


後は出来れば、コピー・ペーストを Control-* の組み合わせの替りに Alt-* で実行できるようにしたい。また、Firefoxで、マウスを使用して新規タブでウインドウを開くときは変わらず Control-クリック なので、できればこちらも Alt-クリックにしたい。


今日これで寝る。また進捗があれば追記する。


追記

結局いろいろ障害があって、FirefoxのaccelキーにAltを使うのは諦めたorz
FirefoxではC-hのみを使って、TeraPadなどではEmacsキーバインドにしておく。
.mayu

# HHK Pro は104キーボード
include "104.mayu"

keyseq $WindowClose = A-F4



keymap Global
	# windowsキーを一回押したときはWindowsキーに、長押しではshiftキーとして使用する

	mod shift += !!Space # SandS

	key C-H		= BackSpace


keymap KeymapDefault = &Default
	# windowsキーを一回押したときはWindowsキーに、長押しではshiftキーとして使用する
	mod shift += !!Space # SandS

	# LeftWindowsキーをaltに割り当てる
	# refer to http://mayu.sourceforge.net/mayu/doc/README-ja.html (iii. モディファイヤキー割り当ての変更)
#	mod alt = LWin
#	key *LWin = *LAlt

	# LeftAltをLeftlWindowsキーに割り当てる
#	mod windows = LAlt
#	key *LAlt = *LWin


include "emacsedit.mayu"


keymap2 EmacsGlobalC-X : EmacsC-X
# key C-S        = C-S           # 上書き保存(S)
# key C-W        = LAlt F A      # 名前を付けて保存(A)...
# key C-F        = C-O           # 開く(O)...
# key K          = C-N           # 新規作成(N)
# key C-C        = $WindowClose  # 終了(X)

window EmacsGlobal /(iexplore|TeraPad)\.exe/ : EmacsEdit
#	key C-X		= &Prefix(EmacsGlobalC-X)
	key C-X		= &Prefix(KeymapDefault) # mayu に左右されないキー入力(Windowsのショートカットを使いたいとき用)

.emacsedit.mayu

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 窓使いの憂鬱 - emacsedit.mayu
# Copyright (C) 1999-2005, TAGA Nayuta <nayuta@users.sourceforge.net>
#


#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Emacs 風移動コマンド
#

keymap	EmacsMove : Global
 key C-Space		= &Undefined		# Mark
 key C-A		= Home			# 行頭
 key C-B		= Left			# ←
 key C-E		= End			# 行末
 key C-F		= Right			# →
 key C-G		= Escape		# CANCEL
 key C-L		= &WindowRedraw &Recenter # 再描画
 key C-N		= Down			# ↓
 key C-P		= Up			# ↑
# key C-S		= C-F			# 検索

key S-C-A		= S-Home		# 行頭(選択)
key S-C-B		= S-Left		# ←(選択)
key S-C-E		= S-End			# 行末(選択)
key S-C-F		= S-Right		# →(選択)
key S-C-N		= S-Down		# ↓(選択)
key S-C-P		= S-Up			# ↑(選択)
key S-C-V		= S-Next		# 次頁(選択)
key S-M-V		= S-Prior		# 前頁(選択)


#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Emacs 風編集コマンド
#

 keyseq	$EmacsEdit/kill-word		= S-C-Right C-X
 keyseq	$EmacsEdit/backward-kill-word	= S-C-Left C-X
 keyseq	$EmacsEdit/transpose-chars	= S-Right C-X Left C-V Right
 keyseq	$EmacsEdit/upcase-word		= S-C-Right C-C *&Sync \
					  &ClipboardUpcaseWord C-V
 keyseq	$EmacsEdit/downcase-word	= S-C-Right C-C *&Sync \
					  &ClipboardDowncaseWord C-V
 keyseq	$EmacsEdit/kill-line		= &EmacsEditKillLineFunc S-End C-X \
			&Sync &EmacsEditKillLinePred((Delete), (Return Left))
 keyseq	$EmacsMark/cancel		= Left Right


keymap	EmacsEdit : EmacsMove
keymap2	EmacsMark : EmacsEdit = $EmacsMark/cancel &KeymapWindow
keymap2 EmacsMarkEscape : EmacsMark = &KeymapParent

keymap2	EmacsC-X : EmacsEdit
 event prefixed		= &HelpMessage("EmacsEdit C-x-", "C-x u\tundo")
 event before-key-down	= &HelpMessage
 key *U			= C-Z					# UNDO

keymap2 EmacsC-U0_9C-U : Global \
		= &Repeat((&KeymapWindow), 100) &HelpMessage &Variable(0, 0)
 key C-G	= &HelpMessage &Variable(0, 0) &Ignore
 
keymap2 EmacsC-U0_9 : EmacsC-U0_9C-U
 event prefixed		= &HelpVariable("繰り返し")
 key _0 Num0		= &Variable(10, 0) &Prefix(EmacsC-U0_9)
 key _1 Num1		= &Variable(10, 1) &Prefix(EmacsC-U0_9)
 key _2 Num2		= &Variable(10, 2) &Prefix(EmacsC-U0_9)
 key _3 Num3		= &Variable(10, 3) &Prefix(EmacsC-U0_9)
 key _4 Num4		= &Variable(10, 4) &Prefix(EmacsC-U0_9)
 key _5 Num5		= &Variable(10, 5) &Prefix(EmacsC-U0_9)
 key _6 Num6		= &Variable(10, 6) &Prefix(EmacsC-U0_9)
 key _7 Num7		= &Variable(10, 7) &Prefix(EmacsC-U0_9)
 key _8 Num8		= &Variable(10, 8) &Prefix(EmacsC-U0_9)
 key _9 Num9		= &Variable(10, 9) &Prefix(EmacsC-U0_9)
 key C-U		= &Prefix(EmacsC-U0_9C-U)

keymap2 EmacsC-U : EmacsC-U0_9C-U
 event prefixed		= &HelpVariable("繰り返し")
 key _0 Num0		= &Variable(0, 0) &Prefix(EmacsC-U0_9)
 key _1 Num1		= &Variable(0, 1) &Prefix(EmacsC-U0_9)
 key _2 Num2		= &Variable(0, 2) &Prefix(EmacsC-U0_9)
 key _3 Num3		= &Variable(0, 3) &Prefix(EmacsC-U0_9)
 key _4 Num4		= &Variable(0, 4) &Prefix(EmacsC-U0_9)
 key _5 Num5		= &Variable(0, 5) &Prefix(EmacsC-U0_9)
 key _6 Num6		= &Variable(0, 6) &Prefix(EmacsC-U0_9)
 key _7 Num7		= &Variable(0, 7) &Prefix(EmacsC-U0_9)
 key _8 Num8		= &Variable(0, 8) &Prefix(EmacsC-U0_9)
 key _9 Num9		= &Variable(0, 9) &Prefix(EmacsC-U0_9)
 key C-U		= &Variable(4, 0) &Prefix(EmacsC-U)

keymap	EmacsEdit
 key C-Space		= &Prefix(EmacsMark)			# Mark
 key C-C		= C-C
 key C-D		= Delete				# 削除
 key C-H		= BackSpace				# BS
 key C-J		= Return				# RETURN
 key C-K		= $EmacsEdit/kill-line			# 行末まで削除
 key C-U		= &Variable(0, 4) &Prefix(EmacsC-U)
 if ( !ZXCV ) key C-X	= &Prefix(EmacsC-X)
# key C-Y		= C-V					# PASTE
 key C-Slash		= C-Z					# UNDO

keymap2	EmacsMark
 key Home		= S-C-Home	&Prefix(EmacsMark)	# 文頭
 key End		= S-C-End	&Prefix(EmacsMark)	# 文末
 key C-A		= S-Home	&Prefix(EmacsMark)	# 行頭
 key C-B		= S-Left	&Prefix(EmacsMark)	# ←
 key C-E		= S-End		&Prefix(EmacsMark)	# 行末
 key C-F		= S-Right	&Prefix(EmacsMark)	# →
 key C-G		= $EmacsMark/cancel &Undefined		# キャンセル
 key C-N		= S-Down	&Prefix(EmacsMark)	# ↓
 key C-P		= S-Up		&Prefix(EmacsMark)	# ↑
 if ( !ZXCV ) key C-V	= S-Next	&Prefix(EmacsMark)	# 次頁
 key Left		= S-Left	&Prefix(EmacsMark)	# ←
 key Up			= S-Up		&Prefix(EmacsMark)	# ↑
 key Right		= S-Right	&Prefix(EmacsMark)	# →
 key Down		= S-Down	&Prefix(EmacsMark)	# ↓

はぁ、なんだか疲れただけだったなぁー。。
keyremap4macbookみたいなのがWindowsにもあればいいのに。。