「突然の死」Alfred Workflowをつくってみた

「突然の死」をコピペしたいけれども、いちいちジェネレータをググるのが面倒になったのでAlfred Workflowにしました。

使い方

スクリーンショット 2014-07-10 12.43.36

まずは「突然の死」Alfred Workflowをダウンロード。Workflowをインストール後、Alfredを起動してsd [中に入れたい文字]を打ち込んでエンターキーを押すと、自動的にクリップボードにコピーされます。

_人人人人人人_
> 突然の死 <
 ̄YYYYYY ̄

Alfred -> Rubyにマルチバイト文字列が適切にutf-8で渡らない問題

ヘッダでcoding: utf-8としていても、Alfredからマルチバイト文字列がRubyスクリプトに渡されるときにASCII-8BITの形で渡ってきてしまうため、そのままだとincompatible character encodings: UTF-8 and ASCII-8BITというエラーになってしまう問題がありました。

上手い解決方法もなかったので、以下のようにforce_encoding('UTF-8')として問題回避しています。

# coding: utf-8
class String
  class SuddenDeath
    def initialize(str)
      @str = str.dup.force_encoding('utf-8')
    end

    def to_s
      [header, body, footer].join("\n")
    end

    private

    def wrapper_length
      @str.chars.map{|c| c.bytes.size > 1 ? 2 : 1}.inject(&:+) / 2 + 2
    end

    def header
      ['_', '人' * wrapper_length, '_'].join
    end

    def footer
      [' ̄', 'Y' * wrapper_length, ' ̄'].join
    end

    def body
      ['> ', @str, ' <'].join
    end
  end

  def to_sudden_death
    SuddenDeath.new(self).to_s
  end
end

if $0 == __FILE__
  puts ARGV[0].to_sudden_death
end