SVX日記

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|

2006-05-29(Mon) キーボードのキーボード化、ソフトの巻

  とりあえず、帰りの電車の中で「キーの入力検出部」を作り始めてみた。例によってCygwin上でRubyを使って組んでみる。

  作り始めてすぐ、Rubyでリアルタイムキー入力(ちょっと違うけど)って、どうやってやるの? という疑問にブチ当たった。うーん……今回やりたいコトは、以前にcccdct(wavカッター)で作ったインスタントプレイ機能に極めて近いんだよな。すかさず、オイラ用cvsリポジトリからcccdctをチェックアウトして、内容を確認……ん? cursesライブラリを使うと、$stdin.getcの挙動が変わる!? なんだかよくわからんが、特に必要はないけどcursesライブラリはインクルードしとこうか……うんうん、これこれッ!! キーを叩いたらリアルタイムに反応。これでよし。

  あとはキーとサンプルファイルとのテーブルを作りこむだけの単純作業。ただしオイラは「窓使いの憂鬱」を使って、日本語キーボードの上に英語キーボードの定義を被せているので、一部のキーが死んでいる。そこで、チョイチョイとdot.mayuを変更し、死んでいるキーに意味もなく中カッコを割り当てたりする……よっしゃ!! ほとんどのキーが利用できるようになった。キーの入力検出部、完成!!

      1 #!/usr/bin/ruby
      2
      3 require 'curses'
      4
      5 Curses.init_screen
      6
      7 winX = Curses.cols  - 0
      8 winY = Curses.lines - 0
      9 win  = Curses::Window.new(winY, winX, 0, 0)
     10
     11 table = Hash[*[                                                 27, ["Esc",'2cs'],
     12                                              9, ["Tab",'2d'],   ?1, ["1",  '2ds'],
     13                                             ?q, ["q",  '2e'],   ?2, ["2",  '   '],
     14                         ?a, ["a",  '0gs'],  ?w, ["w",  '2f'],   ?3, ["3",  '2fs'],
     15     ?z, ["z",  '0a'],   ?s, ["s",  '0as'],  ?e, ["e",  '2g'],   ?4, ["4",  '2gs'],
     16     ?x, ["x",  '0b'],   ?d, ["d",  '   '],  ?r, ["r",  '2a'],   ?5, ["5",  '2as'],
     17     ?c, ["c",  '1c'],   ?f, ["f",  '1cs'],  ?t, ["t",  '2b'],   ?6, ["6",  '   '],
     18     ?v, ["v",  '1d'],   ?g, ["g",  '1ds'],  ?y, ["y",  '3c'],   ?7, ["7",  '3cs'],
     19     ?b, ["b",  '1e'],   ?h, ["h",  '   '],  ?u, ["u",  '3d'],   ?8, ["8",  '3ds'],
     20     ?n, ["n",  '1f'],   ?j, ["j",  '1fs'],  ?i, ["i",  '3e'],   ?9, ["9",  '   '],
     21     ?m, ["m",  '1g'],   ?k, ["k",  '1gs'],  ?o, ["o",  '3f'],   ?0, ["0",  '3fs'],
     22     ?,, [",",  '1a'],   ?l, ["l",  '1as'],  ?p, ["p",  '3g'],   ?-, ["-",  '3gs'],
     23     ?., [".",  '1b'],   ?;, [";",  '   '],  ?[, ["[",  '3a'],   ?=, ["=",  '3as'],
     24     ?/, ["/",  '2c'],   ?', ["'",  '2cs'],  ?], ["]",  '3b'],   ?\\,["\\", '   '],
     25     ?{, ["{",  '2d'],   ?}, ["}",  '2ds'],  13, ["Ent",'4c'],    8, ["BS", '4cs']
     26 ]]
     27
     28 loop {
     29     key = $stdin.getc
     30     p key
     31     p table[key]
     32 }

  おぉっと!! 次はオイラの降りる駅ではないか。ではまた。