Successfully reported this slideshow.

completion_proc and history

2

Share

Upcoming SlideShare
Collecting user input
Collecting user input
Loading in …3
×
1 of 15
1 of 15

More Related Content

Related Books

Free with a 14 day trial from Scribd

See all

Related Audiobooks

Free with a 14 day trial from Scribd

See all

completion_proc and history

  1. 1. completion_proc no6v (Nobuhiro IMAI) RubyKansai Sat, 21 Jul 2012
  2. 2. require "readline" line edit (←→) history (↑↓) completion (Tab) 01 14
  3. 3. line edit Readline.readline("⚡ ") ⚡ ←→ 02 14
  4. 4. history Readline.readline("⚡ ", true) ⚡ Readline::HISTORY.clear ⚡ Readline::HISTORY << "a" ⚡ Readline::HISTORY << "b" ⚡ ↑↓ 03 14
  5. 5. completion Readline.completion_proc Readline.completion_proc = ->(word){%w[word1 word2 ...]} 04 14
  6. 6. demo demo
  7. 7. memo of demo github.com/jugyo/earthquake github.com/no6v/ rubykansai55/blob/master/ completion_proc.rb 06 14
  8. 8. fat man in readline puts Readline. methods(false). grep(->m{/[=?]$/!~m}). sort_by(&:size). reverse # refs hp12c http://bit.ly/QnKcDS 07 14
  9. 9. GJ! Thanks!! http://bit.ly/QnFG8r 08 14
  10. 10. break break
  11. 11. Array-like object Readline::HISTORY.class # => Object Readline::HISTORY.singleton_methods(false) # => [:to_s, :[], :[]=, :<<, :push, :pop, :shift, :each, :length, :size, :empty?, :delete_at, :clear] Enumerable === Readline::HISTORY # => true 10 14
  12. 12. but, somethings lack... unshift(*obj) last first(n)/last(n) delete_if{|x| ... } 11 14
  13. 13. HISTORY.delete_if require "readline" class << Readline::HISTORY def delete_if(&block) return enum_for(__method__) unless block raise SecurityError if $SAFE == 4 i = 0 while (size > i) do break unless entry = self[i] if block.call(entry) delete_at(i) else i += 1 end end return self end end 12 14
  14. 14. hist_delete_if static VALUE hist_delete_if(VALUE self) { HIST_ENTRY *entry; int i = 0; RETURN_ENUMERATOR(self, 0, 0); rb_secure(4); while (history_length > i) { entry = history_get(history_get_offset_func(i)); if (entry == NULL) break; if (RTEST(rb_yield(rb_locale_str_new_cstr(entry->line)))) rb_remove_history(i); else i++; } return self; } 13 14
  15. 15. Thanks & Q? Thanks & Q?

×