第33回 Ruby/Rails 勉強会 - 演習 2 - また修正

--- cat.rb	2009-05-11 18:28:58.552712500 +0900
+++ /cygdrive/g/cat.rb	2009-05-11 18:34:02.000000000 +0900
@@ -1,10 +1,7 @@
-#! /usr/local/bin/ruby19
+#! /usr/local/bin/ruby19 -EASCII-8BIT
 
 require 'optparse'
 
-Encoding.default_internal = Encoding.find('ASCII-8BIT')
-Encoding.default_external = Encoding.find('ASCII-8BIT')
-
 $NUMBER_WIDTH = 6
 
 $C_OFFSET   = "\C-@".ord - '@'.ord
@@ -46,6 +43,7 @@
   opt[:show][:tabs] = true
   opt[:show][:nonprinting] = true
 end
+parser.on('-u', '(ignored)')  # Don't care
 parser.on('-v', '--show-nonprinting',
           'use ^ and M- notation, except for LFD and TAB') do
   opt[:show][:nonprinting] = true
@@ -73,7 +71,7 @@
 
   if opt == :all || opt == :nonblank && /^\r?$/ !~ line
     n += 1
-    printf("%*d  ", $NUMBER_WIDTH, n)
+    printf("%*d\t", $NUMBER_WIDTH, n)
   end
 
   n
@@ -93,9 +91,9 @@
 end
 
 def show_nonprinting_hash
-  c  = to_printable_array('@'..'_', $C_OFFSET){|c| "^#{c}"} << [0177.chr, "^?"]
-  m  = to_printable_array('@'..'_', $M_OFFSET){|c| "M-#{c}"}
-  mc = to_printable_array('@'..'_', $M_C_OFFSET){|c| "M-^#{c}"}
+  c  = to_printable_array('@'..'_', $C_OFFSET){|c| "^#{c}"} << [0x7f.chr, "^?"]
+  m  = to_printable_array(' '..'~', $M_OFFSET){|c| "M-#{c}"}
+  mc = to_printable_array('@'..'_', $M_C_OFFSET){|c| "M-^#{c}"} << [0xff.chr, "M-^?"]
 
   nltab = to_printable_array(%W[I J], $C_OFFSET){|c| "^#{c}"}
 
  • Encoding.default_external を設定するだけでよかった。
  • 何もしない -u オプションも重要。
  • 行番号のフォーマットが微妙に違った。
  • M- の範囲を間違ってた。