Until today, I've been looking for a way to solve a problem I have running irb under Windows. The problem is that I'm using an international keyboard layout and keys like [, ], { and } (which are really useful in Ruby) could not be inputted in irb when readline is enabled.
I did some research on the web, but the solution did not worked for me (and it looks like I'm not the only one). A few weeks ago, I stopped looking for a solution as I decided to do my RoR work on a Linux Virtual machine. For some reason, I had to start working on Windows again. So today, I decided to dig a bit deeper. As the proposed solution used an .inputrc file, I investigated the format of the file and came across a post that described a problem using the Meta key shortcut (M-) in a .inputrc file. The response to the problem suggested to use "\e" instead of "M-". So I did that and guess what? it worked!
So putting everything together :
- Add the HOME environment variable => HOME=%USERPROFILE%
- Create a .inputrc file in your home folder (cd %USERPROFILE%) with the following content :
- For added completion/history management, create a .irbrc file in your home folder with the following content:
"\e[": "[" "\e]": "]" "\e{": "{" "\e}": "}" "\e\": "\" "\e|": "|" "\e@": "@" "\e~": "~"
require 'irb/completion'
ARGV.concat([ "--readline", "--prompt-mode", "simple" ])
module Readline
module History
LOG = "#{ENV['HOME']}/.irb-history"
def self.write_log(line)
File.open(LOG, 'ab') {|f| f << "#{line}\n"}
end
def self.start_session_log
write_log("\n# session start: #{Time.now}\n\n")
at_exit { write_log("\n# session stop: #{Time.now}\n") }
end
end
alias :old_readline :readline
def readline(*args)
ln = old_readline(*args)
begin
History.write_log(ln)
rescue
end
ln
end
end
#Readline::History.start_session_log
require 'irb/ext/save-history'
IRB.conf[:SAVE_HISTORY] = 100
IRB.conf[:HISTORY_FILE] = "#{ENV['HOME']}/.irb-save-history"
4 comments:
Great, it works perfectly, thank you!
Wow It works! Thank you so much. On Vista it works even if the file is called .inputrc.txt
Yeah, works perfectly, thank you.
By the way: Windows XP might prevent you from creating a file that starts with a '.' from the windows explorer. A way to work around that is to go to the command line and use the good old MS-Dos-Editor. Just type
edit .irbrcand save the file from within the editor.
Hi there!
Thanks a lot for this post, the lack of keys on irb was driving me crazy.
I extended this with the "#" and "\" keys, which are also "special" on some layouts.
"\e[": "["
"\e]": "]"
"\e{": "{"
"\e}": "}"
"\e\": "\"
"\e|": "|"
"\e@": "@"
"\e~": "~"
"\e#": "#"
"\e\\": "\\"
Note that "\" had to be escaped, this is not a typo.
Post a Comment