当嵌入到运行脚本中时,如何自定义IRB的提示?

时间:2012-01-21 13:59:16

标签: ruby prompt irb

我试过了:

@CONF[:PROMPT_MODE] = :SIMPLE

但它不会改变我的提示。我正在使用rvm和ruby 1.9.2 Linux。

#!/usr/bin/env ruby
# encoding: utf-8
require 'irb'
module IRB # :nodoc:
    def self.start_session(binding)
    unless @__initialized
        args = ARGV
        ARGV.replace(ARGV.dup)
        IRB.setup(nil)
        ARGV.replace(args)
        @__initialized = true
    end
    workspace = WorkSpace.new(binding)
    irb = Irb.new(workspace)
    @CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]
    @CONF[:MAIN_CONTEXT] = irb.context
    @CONF[:AUTO_INDENT] = true
    @CONF[:PROMPT_MODE] = :SIMPLE
    catch(:IRB_EXIT) do
        irb.eval_input
    end
end
end
IRB.start_session(binding)

1 个答案:

答案 0 :(得分:0)

配置分配:

@CONF[:PROMPT_MODE] = :SIMPLE

需要在创建 Irb 对象之前出现:

irb = Irb.new(workspace)

我不确定其他设置必须尽早完成,但一般情况下,尽快完成此操作会更好。下面的代码有这些修改。

#!/usr/bin/env rub
# encoding: utf-8
require 'irb'
module IRB # :nodoc:
    def self.start_session(binding)
        unless @__initialized
            args = ARGV
            ARGV.replace(ARGV.dup)
            IRB.setup(nil)
            ARGV.replace(args)
            @__initialized = true
        end
        @CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]
        @CONF[:AUTO_INDENT] = true
        @CONF[:PROMPT_MODE] = :SIMPLE
        IRB.run_config
        workspace = WorkSpace.new(binding)
        irb = Irb.new(workspace)
        @CONF[:MAIN_CONTEXT] = irb.context
        catch(:IRB_EXIT) do
            irb.eval_input
        end
    end
end
IRB.start_session(binding)

抱歉,我没有早点看到这一点。