* Ian Duncan [8-Apr-09 17:37]:
#!/usr/bin/env ruby require "#{ENV['TM_SUPPORT_PATH']}/lib/escape" arg = STDIN.read arg.chomp! arg = e_as arg arg.gsub!("`", "\`") puts("pointfree "" + arg + """)
The puts is just for debugging purposes. When I run this command on the selected text:
\x y -> x `div` y
I am hoping to get:
pointfree "\x y -> x `div` y"
But I get this instead:
pointfree "\x y -> x \x y -> x div\x y -> x `div y"
Short answer: use e_sn
Replacing backslashes is a pain. There are a few things going on:
1. the string interpretation 2. the regular expression engine also uses backslashes as the escape character 3. ` means "the text before the match" -- that's why you're seeing double
To fix it, you can:
1. add more toothpicks arg.gsub('`', '\\`')
2. use the block form of gsub, which only evaluates the string once arg.gsub('`') { '`' }
3. match the space before the backtick, which is what e_sn does arg.gsub(/(?=`)/, '\')