#!/bin/sh # This grossness allows expect to be anywhere in PATH: \ exec expect -f "$0" ${1+"$@"} # # dvorak-to-qwerty 1.01 # by Adam M. Costello # # # (based on h.soav 1.11) # # Simulates a qwerty keyboard (given a Dvorak keyboard). # # Control characters are not mapped, because many of them can't be. # Instead, TAB acts as a dead key, causing the next character to be # CTRL'd if it is pressed within 1 second. Also, two TABs, separated # by less than one second, map immediately to a TAB. Exit is automatic # upon EOF on the shell's stdout, but TAB ~! can be used to force an # exit (attempting to close the shell first). set @ \00 set A \01 set B \02 set C \03 set D \04 set E \05 set F \06 set G \07 set H \10 set I \11 set J \12 set K \13 set L \14 set M \15 set N \16 set O \17 set P \20 set Q \21 set R \22 set S \23 set T \24 set U \25 set V \26 set W \27 set X \30 set Y \31 set Z \32 set \[ \33 set bs \34 set \] \35 set ^ \36 set _ \37 log_user 0 spawn $env(SHELL) log_user 1 set timeout 1 interact { ${I}@ {send ${@}} ${I}^ {send ${^}} \] {send -- -} \[ {send _} ${I}\[ {send ${_}} ' {send q} \" {send Q} ${I}' {send $Q} , {send w} < {send W} ${I}, {send $W} . {send e} > {send E} ${I}. {send $E} p {send r} P {send R} ${I}p {send $R} y {send t} Y {send T} ${I}y {send $T} f {send y} F {send Y} ${I}f {send $Y} g {send u} G {send U} ${I}g {send $U} c {send i} C {send I} ${I}c {send $I} r {send o} R {send O} ${I}r {send $O} l {send p} L {send P} ${I}l {send $P} / {send \[} ? {send \{} ${I}/ {send ${[}} \} {send \]} \{ {send \}} ${I}\} {send ${]}} ${I}\\ {send $bs} ${I}a {send $A} o {send s} O {send S} ${I}o {send $S} e {send d} E {send D} ${I}e {send $D} u {send f} U {send F} ${I}u {send $F} i {send g} I {send G} ${I}i {send $G} d {send h} D {send H} ${I}d {send $H} h {send j} H {send J} ${I}h {send $J} t {send k} T {send K} ${I}t {send $K} n {send l} N {send L} ${I}n {send $L} s {send \;} S {send :} -- - {send '} _ {send \"} \; {send z} : {send Z} ${I}\; {send $Z} q {send x} Q {send X} ${I}q {send $X} j {send c} J {send C} ${I}j {send $C} k {send v} K {send V} ${I}k {send $V} x {send b} X {send B} ${I}x {send $B} b {send n} B {send N} ${I}b {send $N} ${I}m {send $M} w {send ,} W {send <} v {send .} V {send >} z {send /} Z {send ?} $I$I {send $I} $I~! {close; exit} timeout 1 {} }