Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

53 lines (45 sloc) 1.456 kb
#!/usr/bin/env ruby
#
require "rubygems"
#if ENV["DISPLAY"] != ":1"
#puts "$DISPLAY is wrong."
#exit 1
#end
def type(string)
system("xdotool", "type", "--clearmodifiers", "--delay", "100", string)
puts "Typing: #{string}"
#puts string.inspect
#$stdout.flush
end
def run(string)
command = string[3..-1].chomp
system(command)
end
def key(string)
keyseq = string[3..-1].chomp.split(/ +/)
system("xdotool", "key", "--clearmodifiers", *keyseq)
puts keyseq.inspect
#puts string.inspect
#$stdout.flush
end
handlers = [
[/^[,]/m, proc { |s| type(s); sleep(0.4) } ], # comma
[/^[.;:?!]+/m, proc { |s| type(s); sleep(1) } ], # punctuation
[/^[\n]{2}/m, proc { |s| type(s); sleep(1) } ], # new paragraph
#[/^[\n](?! *[*-])/m, proc { |s| type(" ") } ], # continuation of a paragraph
#[/^[\n](?= *[*-])/m, proc { |s| type("\n") } ], # lists or other itemized things
[/^[\n]/m, proc { |s| type(s) } ], # lists or other itemized things
[/^%E[^\n]*\n/m, proc { |s| run(s) } ], # execute a command
[/^%K[^\n]*\n/m, proc { |s| key(s) } ], # type a specific keystroke
[/^[^,.;:?!\n]+/m, proc { |s| type(s) } ], # otherwise just type it
]
data = $stdin.read
while data.length > 0
match, func = handlers.collect { |re, f| [re.match(data), f] }\
.select { |m,f| m.begin(0) == 0 rescue false }.first
str = match.to_s
func.call(str)
$stdout.flush
#sleep 3
data = data[match.end(0)..-1]
end
Jump to Line
Something went wrong with that request. Please try again.