Skip to content

Instantly share code, notes, and snippets.

@awwaiid
Created October 22, 2013 00:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save awwaiid/7093309 to your computer and use it in GitHub Desktop.
Save awwaiid/7093309 to your computer and use it in GitHub Desktop.
#!/usr/bin/perl
use strict;
use IO::Handle;
STDOUT->autoflush();
STDERR->autoflush();
print "1\n";
my $is_swapped = `xmodmap -pke | grep 'keycode 10 = exclam'`;
print "2\n";
my $is_qwerty = `xmodmap -pke | grep 'keycode 39 = s'`;
my $keymap_unswapped = q{
keycode 10 = 1 exclam 1 exclam
keycode 11 = 2 at 2 at
keycode 12 = 3 numbersign 3 numbersign
keycode 13 = 4 dollar 4 dollar
keycode 14 = 5 percent 5 percent
keycode 15 = 6 asciicircum 6 asciicircum
keycode 16 = 7 ampersand 7 ampersand
keycode 17 = 8 asterisk 8 asterisk
keycode 18 = 9 parenleft 9 parenleft
keycode 19 = 0 parenright 0 parenright
keycode 34 = bracketleft braceleft bracketleft braceleft
keycode 35 = bracketright braceright bracketright braceright
};
my $keymap_swapped = q{
keycode 10 = exclam 1 exclam 1
keycode 11 = at 2 at 2
keycode 12 = numbersign 3 numbersign 3
keycode 13 = dollar 4 dollar 4
keycode 14 = percent 5 percent 5
keycode 15 = asciicircum 6 asciicircum 6
keycode 16 = ampersand 7 ampersand 7
keycode 17 = asterisk 8 asterisk 8
keycode 18 = parenleft 9 parenleft 9
keycode 19 = parenright 0 parenright 0
keycode 34 = braceleft bracketleft braceleft bracketleft
keycode 35 = braceright bracketright braceright bracketright
};
my $keymap_colemak = q{
keycode 24 = q Q adiaeresis Adiaeresis
keycode 25 = w W aring Aring
keycode 26 = f F atilde Atilde
keycode 27 = p P oslash Ooblique
keycode 28 = g G dead_ogonek asciitilde
keycode 29 = j J dstroke Dstroke
keycode 30 = l L lstroke Lstroke
keycode 31 = u U uacute Uacute
keycode 32 = y Y udiaeresis Udiaeresis
keycode 33 = semicolon colon odiaeresis Odiaeresis
keycode 38 = a A aacute Aacute
keycode 39 = r R dead_grave asciitilde
keycode 40 = s S ssharp asciitilde
keycode 41 = t T dead_acute dead_doubleacute
keycode 42 = d D dead_diaeresis asciitilde
keycode 43 = h H dead_caron asciitilde
keycode 44 = n N ntilde Ntilde
keycode 45 = e E eacute Eacute
keycode 46 = i I iacute Iacute
keycode 47 = o O oacute Oacute
keycode 52 = z Z ae AE
keycode 53 = x X dead_circumflex asciitilde
keycode 54 = c C ccedilla Ccedilla
keycode 55 = v V oe OE
keycode 56 = b B dead_breve asciitilde
keycode 57 = k K dead_abovering asciitilde
keycode 58 = m M dead_macron asciitilde
};
my $keymap_qwerty = q{
keycode 24 = q Q q Q
keycode 25 = w W w W
keycode 26 = e E e E
keycode 27 = r R r R
keycode 28 = t T t T
keycode 29 = y Y y Y
keycode 30 = u U u U
keycode 31 = i I i I
keycode 32 = o O o O
keycode 33 = p P p P
keycode 38 = a A a A
keycode 39 = s S s S
keycode 40 = d D d D
keycode 41 = f F f F
keycode 42 = g G g G
keycode 43 = h H h H
keycode 44 = j J j J
keycode 45 = k K k K
keycode 46 = l L l L
keycode 47 = semicolon colon semicolon colon
keycode 52 = z Z z Z
keycode 53 = x X x X
keycode 54 = c C c C
keycode 55 = v V v V
keycode 56 = b B b B
keycode 57 = n N n N
keycode 58 = m M m M
};
print "3\n";
my $keymap;
if($is_swapped && $is_qwerty) {
system("notify-send 'Swapped Colemak'");
print "3.1\n";
$keymap = $keymap_swapped . $keymap_colemak;
}
elsif($is_swapped && ! $is_qwerty) {
# Let's switch to unswapped and qwerty
system("notify-send 'Un-swapped QWERTY [BORING]'");
print "3.1\n";
$keymap = $keymap_unswapped . $keymap_qwerty;
}
else {
system("notify-send 'swapped QWERTY'");
print "3.1\n";
$keymap = $keymap_swapped . $keymap_qwerty;
}
print "4\n";
# Execute the new xmodmap
system(qq{echo "$keymap" | xmodmap -});
print "5\n";
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment