AutoHotkey로 Mac US 키보드 완전 호환을 목표로
7157 단어 AutoHotkeyMacWindowsEmacs
이 기사의 목적
Windows 환경 + Mac의 US 키보드를 사용하여,
마치 Mac + US 키보드에서 Karabiner를 사용하는 환경을 구축합니다.
이 방법은 다음 단계로 구성됩니다.
1, 좌우 windows 키를 부작용이 없는 다른 키로 변경
2, AutoHotkey를 사용하여 키 조합을 모든 기능에 할당
3, IME 설정에서 command 키 단체를 눌러 IME ON 및 IME OFF에 할당
키 할당 변경
우선 changeKey등의 레지스트리의 키보드 맵을 만지는 툴을 사용해, command키(windows에서는 win키라고 인식된다)를 부작용이 없는 다른 키에 할당한다. 부작용은 키를 누르면 무언가 동작이 일어난다는 것을 의미합니다. 나중에 AutoHotkey에서 조합 바로 가기를 기능에 할당하지만 그 때 키의 원래 기능을 완전히 비활성화 할 수 없기 때문입니다.
내 경우에는 왼쪽 win 키를 Pause, 오른쪽 win 키를 scroll lock에 할당했습니다.
(나중에 깨달았습니다만, scroll lock의 기능은, 엑셀등으로 커서 키로 이웃의 셀로 이동할지, 스크롤할까를 바꾸기 때문에, 완전히 부작용 없음으로는 가지 않습니다.누군가 다른 부작용 없는 키가 있으면 알려주세요.)
changeKey로 보면 다음과 같습니다.
(왼쪽 Alt와 ctrl은 자신의 취미입니다. 여기서는 필수는 아닙니다)
changeKey
AutoHotkey
AutoHotkey에서 할당을 변경한 Pause 키와 모든 키 조합에 기능을 할당합니다.
여기에서는, 키 단체를 눌렀을 때의 설정은 실시하지 않습니다.
어디까지나 콤비네이션의 할당만입니다.
AutoHotkey.ahk#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
SetTitleMatchMode,2
#InstallKeybdHook
#UseHook
#ifWinActive Lightshot.exe
enter::
winGetTitle, window_title, ahk_exe Lightshot.exe
if inStr(window_title, "save")
msgbox, "LWin+4"
; send {enter}
else send ^{s}
return
#ifWinActive
;LControl::LAlt
vkFF::Send, {vk1D} ;左Windowsキー to 無変換キー
ScrollLock::Send, {vk1C} ;右Windowsキー to 変換キー
vkFF & Space::Send, ^{Esc}
vkFF & Enter::Send, ^{Enter}
vkFF & n::Send, ^{n}
vkFF & x::Send, ^{x}
vkFF & c::Send, ^{c}
vkFF & v::Send, ^{v}
vkFF & s::Send, ^{s}
vkFF & o::Send, ^{o}
vkFF & p::Send, ^{p}
vkFF & a::Send, ^{a}
vkFF & f::Send, ^{f}
vkFF & l::Send, ^{l}
vkFF & w::Send, ^{w}
vkFF & t::Send, ^{t}
vkFF & g::Send, ^{g}
vkFF & z::Send, ^{z}
Shift & Backspace::Send, {Del}
vkFF & Tab::AltTab
RAlt & Up::Send, {PgUp}
RAlt & Down::Send, {PgDn}
RAlt & Left::Send, {Home}
RAlt & Right::Send, {End}
vkFF & 4::
If GetKeyState("Shift", "P")
send, {PrintScreen}
Else
msgbox, "LWin+4"
Return
vkFF & 3::
If GetKeyState("Shift", "P")
send, #{s}
Else
msgbox, "LWin+4"
Return
;;
;; An autohotkey script that provides emacs-like keybinding on Windows
; The following line is a contribution of NTEmacs wiki http://www49.atwiki.jp/ntemacs/pages/20.html
SetKeyDelay 0
; turns to be 1 when ctrl-x is pressed
is_pre_x = 0
; turns to be 1 when ctrl-space is pressed
is_pre_spc = 0
; Applications you want to disable emacs-like keybindings
; (Please comment out applications you don't use)
is_target()
{
IfWinActive,ahk_class VirtualConsoleClass
Return 1
IfWinActive,ahk_class ConsoleWindowClass ; Cygwin
Return 1
IfWinActive,ahk_class MEADOW ; Meadow
Return 1
IfWinActive,ahk_class cygwin/x X rl-xterm-XTerm-0
Return 1
IfWinActive,ahk_class MozillaUIWindowClass ; keysnail on Firefox
Return 1
; Avoid VMwareUnity with AutoHotkey
IfWinActive,ahk_class VMwareUnityHostWndClass
Return 1
IfWinActive,ahk_class Vim ; GVIM
Return 1
; IfWinActive,ahk_class SWT_Window0 ; Eclipse
; Return 1
; IfWinActive,ahk_class Xming X
; Return 1
; IfWinActive,ahk_class SunAwtFrame
; Return 1
; IfWinActive,ahk_class Emacs ; NTEmacs
; Return 1
; IfWinActive,ahk_class XEmacs ; XEmacs on Cygwin
; Return 1
Return 0
}
tab_window()
{
Send !{Tab}
global is_pre_spc = 0
Return
}
delete_char()
{
Send {Del}
global is_pre_spc = 0
Return
}
delete_backward_char()
{
Send {BS}
global is_pre_spc = 0
Return
}
kill_line()
{
Send {ShiftDown}{END}{SHIFTUP}
Sleep 50 ;[ms] this value depends on your environment
Send ^x
global is_pre_spc = 0
Return
}
open_line()
{
Send {END}{Enter}{Up}
global is_pre_spc = 0
Return
}
quit()
{
Send {ESC}
global is_pre_spc = 0
Return
}
newline()
{
Send {Enter}
global is_pre_spc = 0
Return
}
indent_for_tab_command()
{
Send {Tab}
global is_pre_spc = 0
Return
}
newline_and_indent()
{
Send {Enter}{Tab}
global is_pre_spc = 0
Return
}
isearch_forward()
{
Send ^f
global is_pre_spc = 0
Return
}
isearch_backward()
{
Send ^f
global is_pre_spc = 0
Return
}
kill_region()
{
Send ^x
global is_pre_spc = 0
Return
}
kill_ring_save()
{
Send ^c
global is_pre_spc = 0
Return
}
yank()
{
Send ^v
global is_pre_spc = 0
Return
}
undo()
{
Send ^z
global is_pre_spc = 0
Return
}
find_file()
{
Send ^o
global is_pre_x = 0
Return
}
save_buffer()
{
Send, ^s
global is_pre_x = 0
Return
}
kill_emacs()
{
Send !{F4}
global is_pre_x = 0
Return
}
move_beginning_of_line()
{
global
if is_pre_spc
Send +{HOME}
Else
Send {HOME}
Return
}
move_end_of_line()
{
global
if is_pre_spc
Send +{END}
Else
Send {END}
Return
}
previous_line()
{
global
if is_pre_spc
Send +{Up}
Else
Send {Up}
Return
}
next_line()
{
global
if is_pre_spc
Send +{Down}
Else
Send {Down}
Return
}
forward_char()
{
global
if is_pre_spc
Send +{Right}
Else
Send {Right}
Return
}
backward_char()
{
global
if is_pre_spc
Send +{Left}
Else
Send {Left}
Return
}
scroll_up()
{
global
if is_pre_spc
Send +{PgUp}
Else
Send {PgUp}
Return
}
scroll_down()
{
global
if is_pre_spc
Send +{PgDn}
Else
Send {PgDn}
Return
}
;vkFF & Tab::
; If is_target()
; Send %A_ThisHotkey%
; Else
; tab_window()
; Return
^f::
If is_target()
Send %A_ThisHotkey%
Else
forward_char()
Return
^d::
If is_target()
Send %A_ThisHotkey%
Else
delete_char()
Return
^h::
If is_target()
Send %A_ThisHotkey%
Else
delete_backward_char()
Return
^w::
If is_target()
Send %A_ThisHotkey%
Else
kill_region()
Return
^g::
If is_target()
Send %A_ThisHotkey%
Else
quit()
Return
^m::
If is_target()
Send %A_ThisHotkey%
Else
newline()
Return
!s::
If is_target()
Send %A_ThisHotkey%
Else
isearch_forward()
Return
^s::
If is_target()
Send %A_ThisHotkey%
Else
isearch_forward()
Return
^@::
Suspend, Toggle
Return
^a::
If is_target()
Send %A_ThisHotkey%
Else
move_beginning_of_line()
Return
^e::
If is_target()
Send %A_ThisHotkey%
Else
move_end_of_line()
Return
^p::
If is_target()
Send %A_ThisHotkey%
Else
previous_line()
Return
^n::
If is_target()
Send %A_ThisHotkey%
Else
next_line()
Return
^b::
If is_target()
Send %A_ThisHotkey%
Else
backward_char()
Return
IME 설정
그리고는, IME의 설정으로 키 단체 누르었을 때를 IME ON 과 IME OFF에 할당합니다.
Reference
이 문제에 관하여(AutoHotkey로 Mac US 키보드 완전 호환을 목표로), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/maoutokagura/items/7b64b17783a29f63b2c6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
SetTitleMatchMode,2
#InstallKeybdHook
#UseHook
#ifWinActive Lightshot.exe
enter::
winGetTitle, window_title, ahk_exe Lightshot.exe
if inStr(window_title, "save")
msgbox, "LWin+4"
; send {enter}
else send ^{s}
return
#ifWinActive
;LControl::LAlt
vkFF::Send, {vk1D} ;左Windowsキー to 無変換キー
ScrollLock::Send, {vk1C} ;右Windowsキー to 変換キー
vkFF & Space::Send, ^{Esc}
vkFF & Enter::Send, ^{Enter}
vkFF & n::Send, ^{n}
vkFF & x::Send, ^{x}
vkFF & c::Send, ^{c}
vkFF & v::Send, ^{v}
vkFF & s::Send, ^{s}
vkFF & o::Send, ^{o}
vkFF & p::Send, ^{p}
vkFF & a::Send, ^{a}
vkFF & f::Send, ^{f}
vkFF & l::Send, ^{l}
vkFF & w::Send, ^{w}
vkFF & t::Send, ^{t}
vkFF & g::Send, ^{g}
vkFF & z::Send, ^{z}
Shift & Backspace::Send, {Del}
vkFF & Tab::AltTab
RAlt & Up::Send, {PgUp}
RAlt & Down::Send, {PgDn}
RAlt & Left::Send, {Home}
RAlt & Right::Send, {End}
vkFF & 4::
If GetKeyState("Shift", "P")
send, {PrintScreen}
Else
msgbox, "LWin+4"
Return
vkFF & 3::
If GetKeyState("Shift", "P")
send, #{s}
Else
msgbox, "LWin+4"
Return
;;
;; An autohotkey script that provides emacs-like keybinding on Windows
; The following line is a contribution of NTEmacs wiki http://www49.atwiki.jp/ntemacs/pages/20.html
SetKeyDelay 0
; turns to be 1 when ctrl-x is pressed
is_pre_x = 0
; turns to be 1 when ctrl-space is pressed
is_pre_spc = 0
; Applications you want to disable emacs-like keybindings
; (Please comment out applications you don't use)
is_target()
{
IfWinActive,ahk_class VirtualConsoleClass
Return 1
IfWinActive,ahk_class ConsoleWindowClass ; Cygwin
Return 1
IfWinActive,ahk_class MEADOW ; Meadow
Return 1
IfWinActive,ahk_class cygwin/x X rl-xterm-XTerm-0
Return 1
IfWinActive,ahk_class MozillaUIWindowClass ; keysnail on Firefox
Return 1
; Avoid VMwareUnity with AutoHotkey
IfWinActive,ahk_class VMwareUnityHostWndClass
Return 1
IfWinActive,ahk_class Vim ; GVIM
Return 1
; IfWinActive,ahk_class SWT_Window0 ; Eclipse
; Return 1
; IfWinActive,ahk_class Xming X
; Return 1
; IfWinActive,ahk_class SunAwtFrame
; Return 1
; IfWinActive,ahk_class Emacs ; NTEmacs
; Return 1
; IfWinActive,ahk_class XEmacs ; XEmacs on Cygwin
; Return 1
Return 0
}
tab_window()
{
Send !{Tab}
global is_pre_spc = 0
Return
}
delete_char()
{
Send {Del}
global is_pre_spc = 0
Return
}
delete_backward_char()
{
Send {BS}
global is_pre_spc = 0
Return
}
kill_line()
{
Send {ShiftDown}{END}{SHIFTUP}
Sleep 50 ;[ms] this value depends on your environment
Send ^x
global is_pre_spc = 0
Return
}
open_line()
{
Send {END}{Enter}{Up}
global is_pre_spc = 0
Return
}
quit()
{
Send {ESC}
global is_pre_spc = 0
Return
}
newline()
{
Send {Enter}
global is_pre_spc = 0
Return
}
indent_for_tab_command()
{
Send {Tab}
global is_pre_spc = 0
Return
}
newline_and_indent()
{
Send {Enter}{Tab}
global is_pre_spc = 0
Return
}
isearch_forward()
{
Send ^f
global is_pre_spc = 0
Return
}
isearch_backward()
{
Send ^f
global is_pre_spc = 0
Return
}
kill_region()
{
Send ^x
global is_pre_spc = 0
Return
}
kill_ring_save()
{
Send ^c
global is_pre_spc = 0
Return
}
yank()
{
Send ^v
global is_pre_spc = 0
Return
}
undo()
{
Send ^z
global is_pre_spc = 0
Return
}
find_file()
{
Send ^o
global is_pre_x = 0
Return
}
save_buffer()
{
Send, ^s
global is_pre_x = 0
Return
}
kill_emacs()
{
Send !{F4}
global is_pre_x = 0
Return
}
move_beginning_of_line()
{
global
if is_pre_spc
Send +{HOME}
Else
Send {HOME}
Return
}
move_end_of_line()
{
global
if is_pre_spc
Send +{END}
Else
Send {END}
Return
}
previous_line()
{
global
if is_pre_spc
Send +{Up}
Else
Send {Up}
Return
}
next_line()
{
global
if is_pre_spc
Send +{Down}
Else
Send {Down}
Return
}
forward_char()
{
global
if is_pre_spc
Send +{Right}
Else
Send {Right}
Return
}
backward_char()
{
global
if is_pre_spc
Send +{Left}
Else
Send {Left}
Return
}
scroll_up()
{
global
if is_pre_spc
Send +{PgUp}
Else
Send {PgUp}
Return
}
scroll_down()
{
global
if is_pre_spc
Send +{PgDn}
Else
Send {PgDn}
Return
}
;vkFF & Tab::
; If is_target()
; Send %A_ThisHotkey%
; Else
; tab_window()
; Return
^f::
If is_target()
Send %A_ThisHotkey%
Else
forward_char()
Return
^d::
If is_target()
Send %A_ThisHotkey%
Else
delete_char()
Return
^h::
If is_target()
Send %A_ThisHotkey%
Else
delete_backward_char()
Return
^w::
If is_target()
Send %A_ThisHotkey%
Else
kill_region()
Return
^g::
If is_target()
Send %A_ThisHotkey%
Else
quit()
Return
^m::
If is_target()
Send %A_ThisHotkey%
Else
newline()
Return
!s::
If is_target()
Send %A_ThisHotkey%
Else
isearch_forward()
Return
^s::
If is_target()
Send %A_ThisHotkey%
Else
isearch_forward()
Return
^@::
Suspend, Toggle
Return
^a::
If is_target()
Send %A_ThisHotkey%
Else
move_beginning_of_line()
Return
^e::
If is_target()
Send %A_ThisHotkey%
Else
move_end_of_line()
Return
^p::
If is_target()
Send %A_ThisHotkey%
Else
previous_line()
Return
^n::
If is_target()
Send %A_ThisHotkey%
Else
next_line()
Return
^b::
If is_target()
Send %A_ThisHotkey%
Else
backward_char()
Return
Reference
이 문제에 관하여(AutoHotkey로 Mac US 키보드 완전 호환을 목표로), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/maoutokagura/items/7b64b17783a29f63b2c6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)