Chciałbym rozszerzyć domyślną aplikację konsoli, która jest standardowo wyposażona w bundle gem
, stosując niektóre opcje konfiguracji IRB.Dostosowywanie konsoli IRB do klejnotów
Looking at the documentation, Widzę, że powinno być możliwe na przykład zmienić monit, a to działa poprawnie podczas sesji interaktywnej. Na przykład mogę grać z wyświetlonej wierszu tak:
2.1.4 :001 > conf.prompt_mode=:SIMPLE
=> :SIMPLE
>>
?> conf.prompt_mode=:DEFAULT
=> :DEFAULT
irb(main):004:0>
Jednak nie mogę znaleźć jak przełożyć to na składni do wykorzystania w aplikacji konsoli. Na przykład ten skrypt:
require 'irb'
IRB.conf[:PROMPT_MODE] = :SIMPLE
IRB.start
Właśnie rozpoczyna się ogólnym skonfigurowanego wierszu:
2.1.4 :001 >
spędziłem trochę czasu próbując znaleźć przykład wykorzystania IRB dla niestandardowego repl bez ładowania globalnych ustawień domyślnych, ale nie znaleziono niczego, z czego mogę skopiować.
Widzę, że nieudokumentowana metoda IRB.setup
ma coś z tym wspólnego, to jakoś ustawia całą konfigurację. Czy moja jedyna możliwość napisania własnej wersji IRB.start
, która dotyczy mojej pożądanej konfiguracji po wywołaniu IRB.setup
, czy też istnieje wsparcie dla tego, co chcę zrobić, ale nie udokumentowane w standardowej lokalizacji?
Np. następujące prace, ale uważam, że w ten sposób jest to trochę ciężko rozbudowywany moduł IRB (a także podatność na błędy w przypadku zmiany wewnętrznych elementów 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
Dziękuję za ponowne skierowanie mnie na Pry. Patrzyłem na to wcześniej, ale skupienie się na funkcjach debugowania sprawiło, że myślałem, że to nie jest odpowiednie. Może to być dla mnie lepsze niż 'irb', nawet jeśli specjalnie udokumentowane wsparcie dla zmiany konfiguracji programowo. –