I have been using to use a feature of ImageMagick 'Display' utility, namely, what is documented as Keyboard Accelerators.
Those are keybindings to various functionalities that are otherwise available on menus. As far as I can tell, they all work quite well, except the ones using Alt as a modifier key, except the Alt+<Arrow Key> to trim off pixels on the side of the image, which do work as documented.
On the other hand, the bindings using Meta (M-) work fine.
xev tells me that pressing the Alt key actually sends
state 0x0, keycode 64 (keysym 0xffe9, Alt_L)
xmodmap tells me that mod1 is mapped to Alt_L (0x40), Meta_L (0xcd)
I am not super familiar with the subtle technicalities of modifier keys handling. Moreover, as far as I can tell, a lot of it is 'software-related', especially regarding the Alt/Meta situation, and things happen at several levels (hardware, OS, individual softwares).
I have tried hacking a bit (not that much, I confess) with xmodmap to remap both Alt and Meta modifiers to different keys, and nothing has worked so far, though it is very likely that I was not completely aware of what I was doing and that there exists, in fact, a simple solution using xmodmap.
Is there a way to use display-im6's "keyboard accelerators" using Alt+key, while still having access to those using Meta as a modifier ? If possible, I would like to keep the current behaviour for other sofwares (that is, if the solution involves heavily remapping modifier keys to the point that other softwares are unable to work as before, it might be a problem ...) ?
Related
I have recently started using Autokey on a Raspberry Pi. I have it installed and operating as expected. The one issue I have encountered for which I cannot find a solution is that I would like to use the backtick key to trigger text expansion.
I have used back tick key previously with other text expansion/hotkey utilities (namely I used it with AutoHotkey on a Windows machine for years). I prefer to have a trigger key to avoid any unexpected triggers. I am so used to using the backtick key that I hit it instead of Tab. I chose the back tick key a decade or more ago for this purpose because I seldom use it (whereas Tab I use constantly). That muscle memory is a hard thing to go against.
I cannot find this discussed anywhere in the documentation and had no luck searching for an answer around the webs. I dug around in the Autokey program files, but didn't find anything so far. Seems like choosing a custom trigger key should be doable.
I haven't been able to solve this in the way I mentioned in my question (setting the backtick key as the trigger rather than the Tab key). I have however come up with a simple work around.
In all of my abbreviations I include the backtick as the last character. Doing this in combination with using the 'trigger immediately (don't require a trigger character)' accomplishes what I was seeking to do.
I am still interested to hear if anyone knows how to do this more directly (changing a setting, rewriting part of the program, etc.).
AutoKey has an option to trigger expansions on all non-word characters. The problem is that it does not consider the backtick a non-word character. To change that, you would have to edit the source code and add the backtick to that list.
I'm not sure where that is in the source code, but if you ask on our Gitter page https://gitter.im/autokey/autokey , one of our developers or advanced users may be able to help you.
This still isn't exactly what you want, but it's closer.
You could also replace the tab key with the backtick key in the source code, but that sounds a bit more dicey and might have other side effects.
Do you change the key binding in the OS to be, i.e., Ctrl-Q?
Do you manage to stretch your left hand to the C key?
Do you use right ctrl and press shortcuts with your right hand?
When I switched to Dvorak, I was using primarily Ctrl+Ins and Shift+Ins for copy/paste. Now I use Ctrl+C and Ctrl+V and other program-specific shortcuts, but I have just learned to use them in their "weird" locations.
A similar question was asked on SuperUser, with the following answers:
Use an AutoHotKey script to remap the keys. (Link)
Use Microsoft Keyboard Creator to remap them. (Link)
Install a third-party app that will remap them automatically. (Link, Link)
macs have it built in. there is a keyboard layout for dvorak with querty shortcuts. for windows, i use https://code.google.com/p/dvorak-qwerty/ it works well with ctrl and alt but dosen't work with the Win Key, which is not that bad.
The program AutoHotKey is what I use to map C,X, and V to their Querty origin.
I use none of the proposed solutions: instead, I modify CapsLock so that it becomes a dead-key that I use to program various actions. For example, when I press CapsLock and the key marked (in QWERTY)
S, this is mapped to Ctrl-X (and thus cut)
D, this is mapped to Ctrl-C (and thus copy)
F, this is mapped to Ctrl-V (and thus paste)
I, this is mapped to up-arrow
K, this is mapped to down-arrow
J, this is mapped to left-arrow
L, this is mapped to right-arrow
etc.
This is was dubbed 'Home Row computing' by Gustavo Duarte when he introduced this idea in https://manybutfinite.com/post/home-row-computing/ and then https://manybutfinite.com/post/home-row-computing-on-mac/
I'm pretty sure that this amounts for a large part of the speed I gained when typing, in addition to touch-typing.
On Linux, the solution that works great with some versions of Gnome on Wayland is this. It will set up all the rules on installation and will work transparently.
Previous answer:
Using Cinnamon, the following works when typing in some applications (i.e. vscode editor):
In keyboard settings, add QWERTY keyboard layout as the first in the list,
add Dvorak layout as the second
When typing text in an editor using the Dvorak layout, pressing Ctrl will still use the first (qwerty) layout.
This does not work in other applications, like Firefox browser, for example so can be pretty confusing.
Having a shortcut (i.e. Alt+Shift) for switching layouts assists in those cases.
While can be difficult at times, the advantage of this approach seems to be that it does not require additional software.
I've written Dvertkey, an AutoHotKey script, for this.
I've been a dvorak user for sixteen years, and for years I've used the various alternative keymaps mentioned in this thread, but all of them fall down when using a number of recent incarnations of Microsoft applications, such as the Office apps and SQL Server Management Studio. They seem to ignore Windows' own keymaps when using meta keys, rendering the hybrid layouts useless. AutoHotKey gets around this to ensure I get exactly what I want in any application.
I've been using Dvorak for so long now that I couldn't imagine remapping ctrl-c and other hotkeys to be in any other location than where they are supposed to be on the Dvorak keyboard. As for hotkeys, it's much easier and more natural to just use two hands to do the combinations. Use the left hand for ctrl and the other hand for the c-key. It would be too confusing to try and think ctrl-c and then press something else.
For the occasional windows game that requires WASD, I just switch the keyboard for the duration and if that means typing QWERTY sentences in chat then I just mentally switch and type a little bit slower.
Those characters are accessible with the right control key (a bit of a stretch for the x). If you are right handed, and have your right hand on the mouse, just move your left hand to the right control key and do the key combination
I've been using some mappings in Vim to avoid having to switch keyboard layouts to type in diacritics in my language (Croatian). However, now I wanted to move these mappings "up" so that they're available globally. I tried using AutoHotkey for this. Here are the mappings I wrote
#CommentFlag //
!;::Send {U+010D} // č
!'::Send {U+0107} // ć
!]::Send {U+0111} // đ
![::Send {U+0161} // š
!\::Send {U+017E} // ž
These work great in every application I've tried (browsers, notepad, MS Word), but don't work in Vim, which is pretty annoying as I do most of my typing there. More specifically, only 'š' and 'ž' work as expected, while both Alt-; and Alt-' give me a 'c' (instead of 'č' and 'ć'), and Alt-] gives a 'd' (instead of a 'đ').
I'm using AutoHotkey_L (though I had the same results with the "regular" AHK), Vim 7.3 (trying this in gVim; it doesn't work in the terminal version either (in a slightly different way) but I don't really care about that) on Win8.
I can give more info on the Vim version, but it's basically one of those windows binaries from vim.org. Things I guess might be important is that it has +multi_byte, and I've been using Unicode in it with no problems whatsoever.
Update:
As per Ingo's suggestion below, I've tried using IfWinNotActive to not have the mappings present in Vim and continue to use my old ones there. Here's one example I've tried
SetTitleMatchMode 2
IfWinNotActive GVIM
{
#CommentFlag //
!;::Send {U+010D} // č
!'::Send {U+0107} // ć
!]::Send {U+0111} // đ
![::Send {U+0161} // š
!\::Send {U+017E} // ž
}
I've also tried many other variations with the Vim window class (using ahk_class), with #IfWindowNotActive etc., but to no avail... The mappings are still there in Vim. Btw, the window title always contains the string "GVIM", and AHK sees that as I've confirmed with WinGetTitle.
I don't have a solution, but a workaround: When I faced with the same issue, I decided to emulate Vim's digraphs globally (also using AutoHotkey), and just except Vim (and applications like Remote Desktop) from that feature (so that the full range can still be used there; my script only supports a subset). You can find my implementation here.
You can also edit a keyboard layout itself, using Microsoft Keyboard Layout Creator.
For example, the English one that you use: choose combination of some character and some function key (Ctrl or Right-Alt, with or without Shift − e.g. for Caps).
Here’s how it looks:
I find the Apple International US layout very good for this purpose, having all the accents available using dead keys, so I've implemented it with Microsoft Keyboard Layout creator like stansult suggested.
Then I came up with the problem of having only one "Alt" key usable, so I ended up remapping my Windows and Alt keys using ScanCodemap. This is a viable solution if you don't use the Windows key that often. One caveat of this method is, that you'll have to use Win+Tab instead of Alt+Tab from now on to switch between windows, it takes a couple of days to get used to that.
Windows Registry Editor Version 5.00
; 0x003a001d: Caps Lock (0x3a) -> Left Ctrl (0x1d)
; 0x0038e038: Left Alt (0xe05c) -> Right Alt (0x38)
; 0xe05b0038: Left Windows (0xe05b) -> Left Alt (0x38)
; 0xe05c0038: Right Windows (0xe05c) -> Left Alt (0x38)
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,05,00,00,00,1d,00,3a,00,38,e0,38,00,38,00,5b,e0,38,00,5c,e0,00,00,00,00
I can't use any shortcut that has meta-shift (alt and shift) in it because ubuntu will treat it as "change keyboard layout" shortcut (I map it to alt-shift since I use the same shortcut in windows) as soon as I press m-s. In windows change keyboard layout shortcut doesn't register until you release the key so any shortcut with m-s is usable in windows.
Is there any work-around without changing shortcut or meta key ? I kinda used to it.
Change the Ubuntu change-keyboard-layout shortcut, to something else.
Or use Esc as Meta
Nothing easy that I know of.
You can manually bind everything that's M-S-??? to C-M-S-??? in your .emacs or at least all of the ones that you use...
Or you can just change the short-cut... how often do you change the keyboard layout? (I use dvorak, and qwerty, but I've never needed a shortcut for it, I just use the button...)
I have tried different things, and in my opinion it is best to change the layout shortcut to something else. The power of emacs is all in its shortcuts that are available right there under your fingers. If you move the M key away and make it harder to reach, it will most surely have a negative impact on your editing speed.
Right now I'm trying to get used to switching layouts with the right Alt key. I almost never use it for anything, so missing it won't be a problem. And from my experience teaching yourself to switch layouts with another combination is a matter of several days.
P.S. Also it pays to use Caps-Lock as an additional Ctrl key, it helps tremendously!
Business as usual: I've logged into my Linux machine from my MacBook Pro using NX, opened a terminal, and ... key bindings with M- (Meta-) do not work. (Talking about bash, of course.) Wait for it. I'm using a PC keyboard hooked up to my Mac (I cannot work on a cramped laptop keyboard). So I decided to investigate: used xev to capture events. When I press left 'Alt' on the PC keyboard, 'xev' reports that 'Meta_L' got depressed. Problem is, it seems that it gets ignored for some reason (no idea why).
It is really annoying, because the same is true for Eclipse. Practically all key bindings with Alt- in them are gone.
My hunch would be to use xmodmap to force the left Alt key to actually emit 'Alt_L', but I wanted to hear a second opinion.
It turns out, the problem was that, according to 'xmodmap -pm', Meta_L and Meta_R were not in Mod1 special modifier category. When I moved them there, everything started to work. (Turns out, some programs assume, incorrectly, that 'Mod1' is Meta/Alt, and ignore keysyms like Meta_L.)