AutoHotkey Remapping Keys - autohotkey

I'm trying to remap a couple of keys using a program called AutoHotkey. I don't really have any coding experience but I took a shot at it and ended up unsurprisingly sucking at it haha. Was wondering if anybody could help with my issue
I wanted to remap my left ctrl and l key to send the tilde key (` key next to the 1), and my left ctrl and left shift button to the esc key. I'm trying to use these remapped keybindings in some games, and I've heard that there's some problems using AHK with video games in general. Tried to remedy this problem using the commands AHK help recommended, like SendPlay, or SendMode, Play.
So far this is the code I've written that's ended trying to solve this:
#SingleInstance force
^l::SendMode, Play {`}
{LShift}{LCtrl}::SendMode, Play {Esc}
Would appreciate any help with this...thanks!

<^l::SendPlay ``
LShift & LControl::SendPlay {Escape}
You shouldn't use a hotkey made of two modifier keys though.

Related

Use 'J' key to goto next match in Vrapper

Question
Is there a way to get j to move to the next result in the Eclipse auto-complete popup when using Vrapper?
Rationale
When I use Eclipse auto completion Ctrl+Space, I would like to use the j and k keys to move to the next and previous match. I get so used to moving this way in Vrapper that it is a bit hard to switch tactics in the specific Eclipse situations that Vrapper does not control. The auto-complete popup is the most common of these situations for me.
Possibilities
I see several possibilities for solving this:
Write a feature request for Vrapper to solve this (if it isn't solved already)
Create a key combination in Eclipse if the command for this is exposed
Create a key combination outside of Eclipse that sends a ↓
Live with using the ↓ key like everyone else does
Perhaps there is a .vimrc trick such as mapping j to ↓and Eclipse will capture that ↓
My workaround for this until I find a better one is to use the following AutoHotkey script:
#j:: ; The # stands for the left win key
SendInput {Down}
return
#k::
SendInput {Up}
return
I'm not completely happy using the Win+j combination, but it seems to work fairly well for now.
I asked this same question on github and got the following response which answers the question. I'm re-posting it here.
We have an option :set contentassistmode which will enable Ctrl-n/Ctrl-p to go to next/previous match in the Ctrl-Space pop-up. You can then use :camap to remap and to j and k or any other key you want. I'm sorry but we don't have a solution for the quick-fix pop-up.
See http://vrapper.sourceforge.net/documentation/?topic=configuration#vrapper
Link: https://github.com/vrapper/vrapper/issues/648

With AutoHotKey, how to use ctrl+alt in hotkey without system seeing them as down when sending other keys?

I'm trying to map ctrl+alt+d to delete. Unfortunately, when I press that combination, the system sees ctrl+alt+delete, which naturally brings up the lock screen.
I've tried this to make the ctrl and alt keys look up to the system, but it didn't work:
^!d::Send {Alt Up}{Ctrl Up}{Delete}
I've tried putting ~ and $ in front of the hotkey, but that didn't work either.
I realize I can use KeyWait to wait for the modifier keys to be released:
~^!d::
KeyWait Control
KeyWait Alt
Send {Delete}
return
But then I can't repeatedly press ctrl+alt+delete to quickly delete characters. I have to release the modifier keys between each press, which is awkward.
I realize I can simulate a forward delete with a selection to the right followed by a backspace:
^!d::Send {Shift Down}{Right}{Shift Up}{Backspace}
But that's a bit kludgy, though it does work without releasing the modifiers. It's starting to feel like there isn't a way of accomplishing this, so any help would be appreciated.
You can try SendPlay as that creates a series of events (messages) that flow directly to the active window rather than performing their native operating system function.
^!d::Sendplay {Delete}
Doc link http://ahkscript.org/docs/commands/Send.htm#SendPlayDetail
Hope it helps

Autohotkey can't handle characters? (BitCoin reward for the answer!)

I have the follow autohotkey map:
^j:: Send ^{PgUp}
This works fine. It maps control + j to control+pagedown.
But I would like to map the keycombination
s & j:: Send ^{PgUp}
So when you press s and j simultaneously, it will send control pagedown to Windows.
Then i'm running into the problem that the character 's' never shows up in my input field, but the character 'j' is appearing as normal. That is weird. The combo key is working, by the way. But I want to get the character 's' key working too.
And are there ways to map the key combination sj (when the both are pressed simultaneously) ?
~s & j::
Send ^{PgUp}
return
was the winning answer by the way, got it from the user RCHP on Autohotkey forum :)
This is by design. The first key of a custom hotkey always loses it's original function. To work around this, create a new hotkey for "s" that sends "s".
In AutoHotKey, hotkeys override their normal function, which is generally desirable. In order to avoid this behavior, prefix your hotkey with a tilde.
~s & j:: Send ^{PgUp} return
The terrific AHK docs explain this.

autohotkey does not exist in current keyboard layout - solution examples

I have written a python script for my co-workers, and then created an autohotkey script to run it every time someone presses Ctrl+LShift+Y. Looks something like this:
^+y::Run helper.py
The python script is fine, but the ahk script doesn't work on all the computers. Sometimes it works fine, and sometimes you get this error:
^+y does not exist in current keyboard layout
Now, searching the web this seems to be a problem with multi-language keyboards (we're using both Hebrew and English), because different languages means a different layouts (I guess?). I also found someone explaining that to solve this you need to use scan codes instead of the usual ^ and + and so on (I'd link to it but I cannot seem to find it now).
This all vaguely makes sense to me on a theoretical level, but when I want to realize it with actual code, I don't really know what to do. To me it seems as if this topic is hardly discussed (with the few exceptions being lacking in examples or hard to understand), so I'd love an answer that would include the following:
some simple way of determining the scan code for a key. This should preferably be a pythonic solution (and just out of curiosity, I'd love to know how to do this with linux as well). This is probably the easier part (but I think is an inherent part of a complete answer).
This is the important part: examples of how you implement that scan code in an autohotkey script, including edge-cases (if there are any).
Question 1
As you want to use the key with autohotkey, it makes sense to use autohotkey detect the key in the first place. Obviously this method works only on windows where autohotkey is running.
Write a Autohotkey script with this line and run it.
#InstallKeybdHook
Press the key you want to examine.
Open the script menu by right clicking the icon of the script in the right lower corner of your screen.
Select OPEN, then from the Menu "View / Key history and script info"
There is a line for each keypress.
First column is the VK (Virtual key) code, next is the scancode.
For example for CAPSLOCK the VK is 14 and the Scancode 03a
Question 2:
#InstallKeybdHook
VK14::
msgbox, you pressed capslock!
return
OR
#InstallKeybdHook
SC03a::
msgbox, you pressed capslock!
return
both work.
Note that you can combine two keys into a hotkey by combining them with & (but not 3)
#InstallKeybdHook
RShift & SC03a::
msgbox, you pressed Rshift capslock!
return
You can modify a Scancode with + and ^
#InstallKeybdHook
^+SC02C::
msgbox, you pressed Ctrl Shift and Y(maybe)!
return
Further info about this is on the page "List of Keys, Mouse Buttons, and Joystick Controls" of the autohotkey help file that comes with the default installation.

How to remap keys when in Emacs?

I am looking for a way to have my control key and caps-lock key switched when I am in the emacs window, but when I go to any other program such as Firefox I want to be able to use the normal control button for new windows, tabs and such.
Additional Information: I am using Ubuntu, but answers for all systems are good since someone else may want to know how to do it on their system.
Emacs never actually sees the CapsLock keycode (under X anyway), so you can't remap the key in Lisp. Take a look at this page for details:
http://www.emacswiki.org/emacs/MovingTheCtrlKey
On windows using Auto Hot Key you can achieve this with this piece of code put in default script:
#IfWinActive, emacs#
CapsLock::Control
#IfWinActive
Auto Hot Key is a very handy utility and it is also free software like in GPL.
For globally remapping keys there is xmodmap. xkeycaps is an interactive tool. You can put control on both keys.
Since you want to remap the keys only for Emacs (which I find somewhat ill-advised) you need to look inside Emacs for a solution. It should be possible, because you can rebind all keys, but it may be too tedious to swap all keys around if the modifiers cannot be swapped.
Personally I map CapsLock to Compose, to type all kinds of funny characters like ä, ß, å, þ, «, —, ...