بسم الله الرحمن الرحيم

Latar Belakang

Sebagai pemrogram yang menggunakan bahasa Ruby, pasti kita cukup sering berinteraksi dengan IRB (Interactive Ruby Shell).

Namun, saya tidak begitu menyukai prompt default dari IRB, karena cukup panjang.

irb(main):001:0> _

Sehingga, apabila digunakan, dalam banyak baris, baru akan terlihat “cukup mengganggu” –subjektif saya.

irb(main):001:0> 1 + 2
=> 3
irb(main):002:0> class Foo
irb(main):003:1>  def foo
irb(main):004:2>    print 1
irb(main):005:2>  end
irb(main):006:1> end
=> nil

Saya lebih menyukai prompt yang minimalis saja.

Seperti ini.

>> _

Solusi

Kita dapat meng-override bentuk dari IRB prompt dengan menambahkan beberapa konfigurasi yang kita tulis pada file ~/.irbrc.

Kalau file tersebut belum ada, buat dan tambahkan seperti baris di bawah.

1. Simple >>

FILE$HOME/.irbrc
1
2
3
4
5
6
7
8
9
IRB.conf[:PROMPT][:CUSTOM] = {
  :PROMPT_I => ">> ",
  :PROMPT_S => "%l> ",
  :PROMPT_C => ".. ",
  :PROMPT_N => ".. ",
  :RETURN   => "=> %s\n"
}
IRB.conf[:PROMPT_MODE] = :CUSTOM
IRB.conf[:AUTO_INDENT] = true

Hasilnya akan seperti ini.

>> 1 + 1
=> 2
.. class Foo
..   def foo
..     print 1
..   end
>> end
=> :foo
>> _

2. Line Number [01]>>

Kita juga dapat mengkostumisasi dengan menambahkan beberapa spesial string yang disediakan.

%N    # command name which is running
%m # to_s of main object (self)
%l # type of string(", ', /, ]), `]' is inner %w[...]
%NNi # indent level. NN is digits and means as same as printf("%NNd").
%NNn # line number.

Misal, Untuk memberikan Line Number.

FILE$HOME/.irbrc
1
2
3
4
5
6
7
8
9
IRB.conf[:PROMPT][:CUSTOM] = {
  :PROMPT_I => "[%02n]>> ",
  :PROMPT_S => "[%02n]%l> ",
  :PROMPT_C => "[%02n].. ",
  :PROMPT_N => "[%02n].. ",
  :RETURN => "=> %s\n"
}
IRB.conf[:PROMPT_MODE] = :CUSTOM
IRB.conf[:AUTO_INDENT] = true

%02n adalah jumlah digit dari line number 01.

Kalau ingin 3 digit, berarti %03n => 001.

Hasilnya,

[01]>> 1 + 1
=> 2
[02].. class Foo
[03]..   def foo
[04]..     print 1
[05]..   end
[06]>> end
=> :foo
[07]>> _

Nah, silahkan teman-teman berkreasi sendiri apabila ingin prompt yang berbeda.

Saya lebih suka menggunakan yang sederhan seperti ini.

Tips

1. Pry (IRB with Steroid)

Sebelum versi Ruby 2.7. IRB memiliki tampilan yang flat tanpa sintax highlighting. Namun, IRB sudah di-facelift pada versi 2.7 sehingga memiliki sintaks color yang sangat mempermudah.

Nah, sebelum IRB mendapatkan facelift tersebut, saya sudah lebih dahulu menggunakan alternatif dari IRB, yaitu Pry.

gambar_1

Pry sudah lebih dahulu menggunakan sintax highlighting dan juga memiliki beberapa fitur-fitur yang dapat mempermudah pekerjaan. Beberapa fitur dari Pry dapat kalian lihat di sini.

Instalasinya juga sangat mudah.

$ gem install pry

Apabila ingin meng-override IRB agar saat kita panggil, langsung menjalankan Pry.

Tambahkan baris berikut pada ~/.irbrc.

FILE$HOME/.irbrc
1
2
3
4
5
6
7
8
9
10
11
# ...
# ...

# Force IRB to use Pry
begin
  require "pry"
  Pry.start
  exit
rescue LoadError => e
  warn "=> Unable to load pry"
end

Sekarang, saat kita jalankan IRB di Terminal.

$ irb
[1] pry(main)> _

Kalau ingin sedikit kostumisasi Pry pormpt, dapat melakukannya dengan membuat file ~/.pryrc.

Bisa, isikan seperti ini, misalnya:

FILE$HOME/.pryrc
1
2
3
4
5
Pry.config.prompt = Pry::Prompt.new(
  "custom",
  "my custom prompt",
  [ proc { ">> " }, proc { ".. " }]
)

Hasilnya,

>> 1 + 1
=> 2
>> class Foo
..   def foo
..     print 1
..   end
.. end
=> :foo
>> _

Jika ingin lebih jauh mengetahui tentang Pry, kalian dapat mengunjuni GitHub repositorinya, di sini.

Pesan Penulis

Sepertinya, segini dulu yang dapat saya tuliskan.

Mudah-mudahan dapat bermanfaat.

Terima kasih.

(^_^)

Referensi

  1. stackoverflow.com/a/6041003/4862516
    Diakses tanggal: 2020/09/13

  2. ruby-doc.org/stdlib-2.7.1/libdoc/irb/rdoc/IRB.html
    Diakses tanggal: 2020/09/13

  3. rubyguides.com/2018/12/what-is-a-repl-in-ruby/
    Diakses tanggal: 2020/09/13

  4. blog.joshsoftware.com/2020/01/20/making-your-rails-console-interesting/
    Diakses tanggal: 2020/09/13

  5. github.com/pry/pry
    Diakses tanggal: 2020/09/13


Penulis

bandithijo

My journey kicks off from reading textbooks as a former Medical Student to digging bugs as a Software Engineer – a delightful rollercoaster of career twists. Embracing failure with the grace of a Cat avoiding water, I've seamlessly transitioned from Stethoscope to Keyboard. Armed with ability for learning and adapting faster than a Heart Beat, I'm on a mission to turn Code into a Product.

- Rizqi Nur Assyaufi

d98d8237fef8f1017d0be931b6e291341cbe6ca8