termtterで補完
list ユーザ名 とか、uri-open ってうつのがめんどくさいので、補完できるようにした。
require 'set' class Termtter::Client public_storage[:users] ||= Set.new add_hook do |statuses, event, t| if !statuses.empty? case event when :update_friends_timeline, :replies, :list_user_timeline statuses.each do |s| public_storage[:users].add(s.user_screen_name) s.text.scan(/@[a-zA-Z_0-9]*/).each do |u| # reply public_storage[:users].add(u.gsub("@","")) unless u == "@" end end end end end end module Termtter module InputCompletor Commands = %w[exit help list pause update resume replies search show uri-open] CompletionProc = proc {|input| case input when /^l(ist)? +(.*)/ username = $2 if username.empty? Termtter::Client.public_storage[:users].to_a else Termtter::Client.public_storage[:users].to_a. grep(/^#{Regexp.quote username}/).map{|u| "list #{u}"} end when /^uri-open +(.*)/ uri_open_com = $1 if uri_open_com.empty? %w[clear list] else %w[clear list]. grep(/^#{Regexp.quote uri_open_com}/).map{|c| "uri-open #{c}"} end else Commands.grep(/^#{Regexp.quote input}/) end } end end Readline.basic_word_break_characters= "\t\n\"\\'`><=;|&{(" Readline.completion_proc = Termtter::InputCompletor::CompletionProc
これを適当に保存して、.termtter から require すれば、補完できるようになる。
たとえば、
list ってうってタブ押すと、
ユーザ名が出てくるし、
そこで、適当にいれてタブ押すと
こんな感じで補完できる。
コマンドに関しても同様で
urまでうってタブ押せば、
こんな感じに補完される。