### Home Classes Methods

### In Files

- lib/termtter/config.rb
- lib/termtter/system_extensions/termtter_compatibles.rb
- lib/termtter/system_extensions/windows.rb
- lib/plugins/quicklook.rb
- lib/plugins/url.rb
- lib/plugins/whois.rb
- lib/plugins/copy.rb
- lib/plugins/fib_filter.rb
- lib/plugins/gyazo.rb
- lib/plugins/truncate.rb
- lib/plugins/w3mimg.rb
- lib/plugins/growl.rb
- lib/plugins/defaults/keyword.rb
- lib/plugins/defaults/confirm.rb
- lib/plugins/defaults/fib.rb
- lib/plugins/say.rb
- lib/plugins/wassr.rb
- lib/plugins/hugeurl.rb
- lib/plugins/translate_tweet.rb
- lib/plugins/system_status.rb
- lib/plugins/primes.rb
- lib/plugins/draft.rb
- lib/plugins/source.rb
- lib/plugins/db.rb
- lib/plugins/expand_url.rb
- lib/plugins/notify-send2.rb
- lib/plugins/crypt.rb
- lib/plugins/notify-send3.rb

### Parent

BasicObject

### Methods

- #__dir__
- #addr?
- #config
- #confirm
- #copy_to_clipboard
- #decrypt
- #encrypt
- #expand_url
- #fib
- #filter
- #get_draft_index
- #get_icon_path
- #let
- #list_drafts
- #load_keywords
- #multibyte_string
- #out_put_status
- #plugin
- #post_gyazo
- #primes
- #print
- #print_statuses
- #puts
- #quicklook
- #say
- #select_matched
- #source
- #translate_by_google
- #truncate
- #url_by_tweet
- #whois?

### Files

- README.rdoc

### Class/Module Index

Quicksearch

- Termtter
- Termtter::API
- Termtter::ActiveRubytter
- Termtter::Client
- Termtter::Client::UserSearchEvent
- Termtter::Command
- Termtter::CommandLine
- Termtter::Config
- Termtter::ConfigSetup
- Termtter::Crypt
- Termtter::Event
- Termtter::HTTPpool
- Termtter::Hook
- Termtter::HookCanceled
- Termtter::Hookable
- Termtter::JSONError
- Termtter::MemoryCache
- Termtter::MemoryCache::MemCacheMock
- Termtter::OptParser
- Termtter::Plugin
- Termtter::Plugin::Screen
- Termtter::Plugins
- Termtter::Plugins::Haml
- Termtter::RubytterProxy
- Termtter::RubytterProxy::FrequentAccessError
- Termtter::RubytterProxy::LimitManager
- Termtter::Status
- Termtter::Storage
- Termtter::Storage::Status
- Termtter::Task
- Termtter::TaskManager
- Termtter::UserStreamReceiver
- OAuth
- OAuth::AccessToken
- Array
- Growl
- IRB
- Object
- Readline
- Status
- String
- Symbol
- TermColor
- User

No matching classes.

# Object

### Constants

DB
HUGEURL_TARGET_PATTERN
URL_SHORTTERS

### Public Instance Methods

__dir__() click to toggle source

    # File lib/plugins/source.rb, line 1
    def __dir__
      File.dirname(File.expand_path(__FILE__))
    end

addr?(arg) click to toggle source

    # File lib/plugins/whois.rb, line 40
    def addr?(arg)
      Resolv::AddressRegex =~ arg
    end

config() click to toggle source

    # File lib/termtter/config.rb, line 94
    def config
      Termtter::Config.instance
    end

confirm(message) click to toggle source

    # File lib/plugins/defaults/confirm.rb, line 3
    def confirm(message)
      if config.confirm && !Termtter::Client.confirm(message)
        raise Termtter::CommandCanceled
      end
    end

copy_to_clipboard(str) click to toggle source

    # File lib/plugins/copy.rb, line 3
    def copy_to_clipboard(str)
      if /darwin/ =~ RUBY_PLATFORM
        IO.popen("pbcopy", "w") do |io|
          io.print str
        end
      else
        puts "Sorry, this plugin is only in Mac OS X."
      end
      str
    end

decrypt(msg, salt) click to toggle source

    # File lib/plugins/crypt.rb, line 13
    def decrypt(msg, salt)
      decoder = OpenSSL::Cipher::DES.new
      decoder.decrypt
      decoder.pkcs5_keyivgen(salt)
      decoder.update([msg].pack('H*')) + decoder.final
    end

encrypt(msg, salt) click to toggle source

    # File lib/plugins/crypt.rb, line 6
    def encrypt(msg, salt)
      encoder = OpenSSL::Cipher::DES.new
      encoder.encrypt
      encoder.pkcs5_keyivgen(salt)
      (encoder.update(msg) + encoder.final).unpack('H*').to_s
    end

expand_url(host, path) click to toggle source

    # File lib/plugins/expand_url.rb, line 44
    def expand_url(host, path)
      res = Termtter::HTTPpool.start(host) do |h|
        h.get(path, { 'User-Agent' => 'Mozilla' })
      end
      return nil unless res.code =~ /\A30/
      newurl = res['Location']
      newurl.respond_to?(:force_encoding) ? newurl.force_encoding(Encoding::UTF_8) : newurl
    rescue Exception => e
      Termtter::Client.handle_error(e)
      nil
    end

fib(n) click to toggle source

    # File lib/plugins/fib_filter.rb, line 2
    def fib(n)i=0;j=1;n.times{j=i+i=j};i end

filter(name, init = {}) click to toggle source

    # File lib/termtter/system_extensions/termtter_compatibles.rb, line 14
    def filter(name, init = {})
      warn "filter method will be removed. Use plugin instead."
      plugin(name, init)
    end

get_draft_index(arg) click to toggle source

    # File lib/plugins/draft.rb, line 9
    def get_draft_index(arg)
      case arg
      when /^\d+$/
        arg.to_i
      when ''
        -1
      else
        nil
      end
    end

get_icon_path(s) click to toggle source

    # File lib/plugins/w3mimg.rb, line 9
    def get_icon_path(s)
      FileUtils.mkdir_p(config.plugins.notify_send.icon_cache_dir) unless File.exist?(config.plugins.notify_send.icon_cache_dir)
      cache_file = "%s/%s%s" % [  config.plugins.notify_send.icon_cache_dir,
                                  s.user.screen_name,
                                  File.extname(s.user.profile_image_url)  ]
      if !File.exist?(cache_file) || (File.atime(cache_file) + 24*60*60) < Time.now
        File.open(cache_file, "wb") do |f|
          begin
            http_class = Net::HTTP
            unless config.proxy.host.nil? or config.proxy.host.empty?
              http_class = Net::HTTP::Proxy(config.proxy.host,
                                            config.proxy.port,
                                            config.proxy.user_name,
                                            config.proxy.password)
            end
            uri = URI.parse(URI.escape(s.user.profile_image_url))
            image = http_class.get(uri.host, uri.path, uri.port)
            rimage = Magick::Image.from_blob(image).first
            rimage = rimage.resize_to_fill(48, 48)
            f << rimage.to_blob
          rescue Net::ProtocolError, Magick::ImageMagickError
            return nil
          end
        end
      end
      cache_file
    end

let(o) click to toggle source

    # File lib/plugins/source.rb, line 5
    def let(o)
      yield o
    end

list_drafts(drafts) click to toggle source

    # File lib/plugins/draft.rb, line 3
    def list_drafts(drafts)
      drafts.each_with_index do |draft, index|
        puts "#{index}: #{draft}"
      end
    end

load_keywords() click to toggle source

    # File lib/plugins/defaults/keyword.rb, line 29
    def load_keywords
      public_storage[:keywords] += config.plugins.keyword.keywords
      file = File.expand_path(config.plugins.keyword.file)
      if File.exists?(file)
        public_storage[:keywords] += File.read(file).split(/\n/)
      end
    end

multibyte_string(text) click to toggle source

    # File lib/plugins/truncate.rb, line 2
    def multibyte_string(text)
      text.unpack('U*')
    end

out_put_status(status, color) click to toggle source

    # File lib/plugins/system_status.rb, line 9
    def out_put_status(status, color)
      formatted_status = ERB.new(config.plugins.system_status.format).result(binding)
      colored_status = color(formatted_status, color)
      print "\e[s\e[1000G\e[#{status.size - 1}D#{colored_status}\e[u"
      $stdout.flush
    end

plugin(name, init = {}) click to toggle source

    # File lib/termtter/system_extensions/termtter_compatibles.rb, line 2
    def plugin(name, init = {})
      warn "plugin method will be removed. Use Termtter::Client.plug instead."
      unless init.empty?
        init.each do |key, value|
          config.plugins.__refer__(name.to_sym).__assign__(key.to_sym, value)
        end
      end
      load "plugins/#{name}.rb"
    rescue Exception => e
      Termtter::Client.handle_error(e)
    end

post_gyazo() click to toggle source

    # File lib/plugins/gyazo.rb, line 3
    def post_gyazo
      browser_cmd = 'firefox'
      gyazo_url = ""

      idfile = ENV['HOME'] + "/.gyazo.id"

      id = nil
      if File.exist?(idfile)
        id = File.read(idfile).chomp
      else
        id = Time.new.strftime("%Y%m%d%H%M%S")
        File.open(idfile,"w").print(id+"\n")
      end

      tmpfile = "/tmp/image_upload#{$$}.png"

      system import, tmpfile

      imagedata = File.read(tmpfile)
      File.delete(tmpfile)

      boundary = '----BOUNDARYBOUNDARY----'

      data = --#{boundary}\rcontent-disposition: form-data; name="id"\r\r#{id}\r--#{boundary}\rcontent-disposition: form-data; name="imagedata"\r\r#{imagedata}\r\r--#{boundary}--\r

      header = {
        'Content-Length' => data.length.to_s,
        'Content-type' => "multipart/form-data; boundary=#{boundary}"
      }

      Net::HTTP.start("gyazo.com", 80){|http|
        res = http.post("/upload.cgi", data, header)
        url = res.response.to_ary[1]
        puts url
        system "#{browser_cmd} #{url}"
        gyazo_url = url
      }
      gyazo_url
    end

primes(n) click to toggle source

    # File lib/plugins/primes.rb, line 2
    def primes(n)
      return "" if n < 3
      table = []
      (2 .. n).each do |i|
        table << i
      end

      prime = []
      loop do
        prime << table[0]
        table = table.delete_if {|x| x % prime.max == 0 }
        break if table.max < (prime.max ** 2)
      end

      r = (table+prime).sort {|a, b| a<=>b }
      r.join(', ')
    end

print(str) click to toggle source

    # File lib/termtter/system_extensions/windows.rb, line 58
    def print(str)
      str.to_s.gsub("\xef\xbd\x9e", "\xe3\x80\x9c").split(/(\e\[\d*[a-zA-Z])/).each do |token|
        case token
        when /\e\[(\d+)m/
          color = $1.to_i > 90 ? ($1.to_i % 60) : $1.to_i
          $wSetConsoleTextAttribute.call $hStdOut, $colorMap[color].to_i
        when /\e\[\d*[a-zA-Z]/
          # do nothing
        else
          loop do
            begin
              STDOUT.print $iconv_u8_to_sj.iconv(token)
              break
            rescue Iconv::Failure
              STDOUT.print "#{$!.success}?"
              token = $!.failed[1..-1]
            end
          end
        end
      end
      $wSetConsoleTextAttribute.call $hStdOut, $oldColor
      $iconv_u8_to_sj.iconv(nil)
    end

print_statuses(statuses, sort = true, time_format = nil) click to toggle source

    # File lib/plugins/wassr.rb, line 48
    def print_statuses(statuses, sort = true, time_format = nil)
      return unless statuses and statuses.first
      unless time_format
        t0 = Time.now
        t1 = Time.at(statuses.first[:epoch])
        t2 = Time.at(statuses.last[:epoch])
        time_format =
          if [t0.year, t0.month, t0.day] == [t1.year, t1.month, t1.day]          and [t1.year, t1.month, t1.day] == [t2.year, t2.month, t2.day]
            '%H:%M:%S'
          else
            '%y/%m/%d %H:%M'
          end
      end

      output_text = ''

      user_login_ids = []
      statuses.sort{|a, b| a.epoch <=> b.epoch}.each do |s|
        text = s.text
        user_login_ids << s.user_login_id unless user_login_ids.include?(s.user_login_id)
        status_color = config.plugins.stdout.colors[user_login_ids.index(s.user_login_id) % config.plugins.stdout.colors.size]
        status = "#{s.user.screen_name}: #{TermColor.escape(text)}"

        time = "[wassr] [#{Time.at(s.epoch).strftime(time_format)}]"
        id = s.id
        source =
          case s.source
          when />(.*?)</ then $1
          when 'web' then 'web'
          end

        erbed_text = ERB.new('<90><%=time%></90> <<%=status_color%>><%=status%></<%=status_color%>>').result(binding)
        output_text << TermColor.parse(erbed_text) + "\n"
      end

      if config.plugins.stdout.enable_pager && ENV['LINES'] && statuses.size > ENV['LINES'].to_i
        file = Tempfile.new('termtter')
        file.print output_text
        file.close
        system "#{config.plugins.stdout.pager} #{file.path}"
        file.close(true)
      else
        print output_text
      end
    end

puts(str) click to toggle source

    # File lib/termtter/system_extensions/windows.rb, line 81
    def puts(str)
      print str
      STDOUT.puts
    end

quicklook(url) click to toggle source

    # File lib/plugins/quicklook.rb, line 11
    def quicklook(url)
      tmpdir = Pathname.new(config.plugins.quicklook.quicklook_tmpdir)
      path   = tmpdir + Pathname.new(url).basename

      Thread.new do
        open(path, 'w') do |f|
          f.write(open(url).read)
        end
        system("qlmanage -p #{path} > /dev/null 2>&1")
      end
    end

say :: String → String → IO () click to toggle source

    # File lib/plugins/say.rb, line 6
    def say(who, what)
      voices = %(Alex Alex Bruce Fred Ralph Agnes Kathy Vicki)
      voice = voices[who.hash % voices.size]
      system 'say', '-v', voice, what
    end

select_matched(statuses) click to toggle source

    # File lib/plugins/defaults/keyword.rb, line 21
    def select_matched(statuses)
      regexp = Regexp.union(*public_storage[:keywords].map(&:to_s))
      statuses.select do |status|
        /#{regexp}/ =~ status.text ||
          (config.plugins.keyword.apply_user_name == true && /#{regexp}/ =~ status[:user][:screen_name])
      end
    end

source(pluginname) click to toggle source

    # File lib/plugins/source.rb, line 9
    def source(pluginname)
      File.read(
        let(
          Pathname(__dir__) + "#{pluginname}.rb") {|a|
            File.exist?(a) ? a : Pathname(__dir__) + "defaults/#{pluginname}.rb" })
    end

translate_by_google(text,o={}) click to toggle source

    # File lib/plugins/translate_tweet.rb, line 8
    def translate_by_google(text,o={})
      opt = {:from => "",:to => "en"}.merge(o)
      j = JSON.parse(open(
        "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q="     +"#{CGI.escape(text)}&langpair=#{CGI.escape("#{opt[:from]}|#{opt[:to]}")}").read)
      j["responseData"]["translatedText"] rescue nil
    end

truncate(text, length = 140, omission = "...") click to toggle source

    # File lib/plugins/truncate.rb, line 6
    def truncate(text, length = 140, omission = "...")
      chars = multibyte_string(text)
      if chars.length > length
        _, text_base, urls =
          text.match(/\A(.*?)((?:\s+#{URI.regexp(%w(http https ftp))}\S*)*)\z/).to_a
        chars_base = multibyte_string(text_base)
        o = multibyte_string(omission + urls)
        if o.length >= length
          o = multibyte_string(omission)
          chars_base = chars
        end
        (chars_base[0...(length - o.length)] + o).pack('U*')
      else
        text
      end
    end

url_by_tweet(t) click to toggle source

    # File lib/plugins/url.rb, line 1
    def url_by_tweet(t)
      "http://twitter.com/#{t.user.screen_name}/status/#{t.id}"
    end

whois?(arg) click to toggle source

    # File lib/plugins/whois.rb, line 24
    def whois?(arg)
      if addr? arg
        begin
          Resolv.getname(arg)
        rescue => e
          e.message
        end
      else
        begin
          Resolv.getaddress(arg)
        rescue => e
          e.message
        end
      end
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.