Я хотел бы расширить консольное приложение по умолчанию, которое встроено в стандартное с bundle gem
, применяя некоторые параметры конфигурации IRB.Настройка консоли IRB для gem
Looking at the documentation, я вижу, что должно быть возможно, например, изменить приглашение, и это отлично работает на интерактивном сеансе. Например, я могу играть с отображаемой строкой, как это:
2.1.4 :001 > conf.prompt_mode=:SIMPLE
=> :SIMPLE
>>
?> conf.prompt_mode=:DEFAULT
=> :DEFAULT
irb(main):004:0>
Однако, я не могу найти, как перевести это в синтаксис для использования в приложении консоли. Например, этот сценарий:
require 'irb'
IRB.conf[:PROMPT_MODE] = :SIMPLE
IRB.start
Просто начинается с общей сконфигурированной строкой:
2.1.4 :001 >
я провел некоторое время, пытаясь найти пример использование IRB для пользовательского РЕПЛ без загрузки глобальных значений по умолчанию, но не нашел ничего, что я могу скопировать.
Я вижу, что недокументированный метод IRB.setup
имеет какое-то отношение к этому, он каким-то образом устанавливает всю конфигурацию. Я единственный вариант, чтобы написать свою собственную версию IRB.start
, которая применяет мою желаемую конфигурацию после вызова IRB.setup
, или есть поддержка того, что я хочу сделать встроенным, но не задокументированным в стандартном местоположении?
E.g. следующие работы, но я чувствую, что это немного тяжело, расширяет IRB-модуль таким образом (а также подвержен ошибкам при изменении внутренних элементов IRB).
require 'irb'
def IRB.custom_start custom_conf = {}
STDOUT.sync = true
IRB.setup(nil)
custom_conf.each do |k,v|
IRB.conf[k] = v
end
if @CONF[:SCRIPT]
irb = IRB::Irb.new(nil, @CONF[:SCRIPT])
else
irb = IRB::Irb.new
end
@CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]
@CONF[:MAIN_CONTEXT] = irb.context
trap("SIGINT") do
irb.signal_handle
end
begin
catch(:IRB_EXIT) do
irb.eval_input
end
ensure
irb_at_exit
end
end
IRB.custom_start :PROMPT_MODE => :SIMPLE
Благодарим за то, что вы указали мне снова в Pry. Я смотрел на него раньше, но основное внимание на функции отладки заставило меня подумать, что это не подходит. Это может быть лучше, чем «irb» для меня, даже если для корректно документированной поддержки для изменения конфигурации программно. –