Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
[go: Go Back, main page]

アキレス亀日記 - 2004/04a Diary
「アキレスの亀を追いかける日々」
2004/04版 その1

[前日へ続く]

2004/04/01 (木)

いろいろ

_ まさか万愚節ネタということじゃないよね? ^^; 主宰のプレッシャーを感じることなど何もありません。 私なんて半分以上失敗してるくせに偉そうにしています。

_ さて、毎朝のお楽しみ「天花」を見ましょう。 こんなことを言うのは今日だけですけどね!

screen と w3m と rdic」の改良の試み: w3m 以外からでも辞書を引けるようにする

_ 普段から矛盾ネタ、詭弁ネタ、でたらめ、つまらん冗談などなど適当なことしか 書いていないこのサイトですが、せめて今日のような特別な日ぐらいは 真面目なネタを書くことにしましょう。

_ うえちさんのこのスクリプト (ともちろん rdic も) は大変便利だと感じていましたが、 w3m からしか使えないのが残念に思っていました。 そこで、任意の Screen のウィンドウから使える方法を新たに考えてみました ([追記] xclip 使う方法は4月5日の日記を参照のこと)。

解決方法:

  1. “rdic” という名のタイトルが付けられたウィンドウ上で rdic が動いているとします (これはうえちさんの場合と同じ環境)。
  2. 現在のウィンドウ上で検索コマンドを入力すると、カーソル位置から一番近い 英単語を Screen のコピー機能を使って切り出します。このとき、 コピーモードとなっているウィンドウへ Screen の stuff コマンドを使って制御します。 実は“screen -X stuff "W"”とすれば、単語を簡単にレジスタへ格納することができるのです。
  3. うえちさんの方法では、(1)まず rdic へ切り出した単語をペーストするために 画面のリージョンを w3m と rdic のリージョンへ分割(split)して、 (2)一時的に rdic リージョンへフォーカスを移して 英単語をペーストし、(3)フォーカスを元の w3m リージョンへ戻る、という方法を とっています。しかしこの方法では次のようなことがあります:
    • 必ず画面を split する。したがって画面を広く使いたい場合は若干不便。
    • split が失敗するとうまく動かない。
  4. そこで、Screen のフォーカス切替コマンド“focus”を使わずに、 Screen の“at”コマンドを使うことにしました。 これを使うと、現在のウィンドウを変更せずに、 (裏で動く)特定のウィンドウへコマンドを送ることができます。 例えば、“screen -X at rdic command”と書くだけで、 “rdic”というタイトルがつけられてるウィンドウへ command を送ることができます。 この方法で、rdic ウィンドウへペーストすることにしました。
  5. rdic の前回に検索した単語の削除には ESC が割り当てられていますが、 ESC で消すと少し遅いです。そこで、単語の行頭へ C-a で移動後に C-k で 行削除をするようにしました。この動作も stuff による流し込みで実現します。
  6. これら一連のコマンドの実行の際、メッセージ表示にデフォルトで 1秒の wait がかかってしまいます。 そこで“msgminwait 0”としてメッセージ表示の際に生じる wait を 0 にしました。

結果、作成したスクリプトはこんな感じになりました:

#!/bin/sh

screen -X eval "msgminwait 0" "copy" "stuff \"W\"" "at rdic stuff \"\"" "at rdic paste \".\"" "echo \"looking up...\"" "msgminwait 1"
なんとたった一行です(スクリプトファイルはこちら)。 素晴しいです Screen は。 あとは、これをファイルに実行形式で保存して(ここでは lookup.sh とした)、 そして .screenrc へ
bind ^W exec lookup.sh
とするだけです。 これだけで、w3m であろうが Emacs であろうが vi であろうが、 どんなウィンドウ上でも“C-a C-w”とするだけで rdic が使えてしまいます。 しかも、画面を rdic 用に分割しなくても使えます。 分割されていない場合は、 裏の rdic ウィンドウに英単語がペーストされて意味が検索されているはずです。 また、rdic ウィンドウが無い場合は、単語がどのウィンドウへもペーストされません。 もしも画面分割を強制したい場合は、 このスクリプトにうえちさん作の“split.sh”を追加するだけでよいでしょう。

_ 今後も screen を使った、簡単で便利なスクリプトをいろいろ考えていきます。


2004/04/02 (金)

Re: screen と w3m と rdic

_ 取り上げていただいてありがとうございます。 簡単なスクリプトでも喜んでいただけると嬉しいものです。

_ 昨日のスプリプト lookup.sh はコントロールコードをそのまま書いてあってあまり良くないので、 こちらに置きました。 ちなみに、eval 以降を .screenrc の bind 部分に直接書けば、 シェルスクリプトを使う必要すらありません。

Screen 小ネタ: 新聞見出しをステータス行に次々表示する

_ ひきつづき簡単な小ネタ。

_ Screen の echo コマンドを使うと、数秒おきに異なるメッセージを ステータス行に出力するようなスクリプトを簡単に書くことが出来ます。 そこで、朝日新聞の見出しを取得して電光掲示ニュースのように 次々にニュースを表示するスクリプト news.sh を作ってみました。

まず、あらかじめ

$ news.sh -g 5
などとします。 この場合、asahi.com の各ページから HTML記事を取得して、いつものように sed でタグ除去などを行って 上位 5つの見出しを取得し、結果を /tmp/newslist.txt へ格納します。 これは crontab へ登録して定期的に起動するようにするといいでしょう (Screen の backtick でやりたかったんですが指定がまずかったのか動きませんでした)。

で、電光掲示ニュースを実行したいときは

$ news.sh -s
とします。 すると、(もし記事取得済みならば) 5 秒おきに見出しを出力するのをひたすら繰り返します。 停止は C-c とかを送ってやってください(苦笑)。 工夫の余地あり。 やってることは
while [ -f $tmp ] ; do
  while read i ; do
    screen -X echo "$i"
      sleep 5
  done < $tmp
done
というシェルスクリプトお約束のループ処理の中に screen を入れているだけです。

_ ちょっと工夫すれば、朝日とサンケイの見出しを交互に表示するという 夢のコラボレーションも可能に。

スネ夫を正面から見たら (from シェルター)

_ 恐い!

_ 撮影角度とかにこだわってそう。 ドラえもんの撮影時も「この角度だと映えるから」などとうるさい注文。

ジャ○ーズ事務所@小山市

_ 関西ジャ○ーズのに続く新たな勢力・栃木ジャ○ーズが誕生していた。 「三丁目の角のタバコ屋のおばあちゃんにはけっこう評判よかったんですよね」 とかいうぐらいの人気か。ってそりゃ茨城だろ。


2004/04/03 (土)

今週の朝の連続ツッコミ小説・天花 (BS2)

_ これまで散々文句を書いてきた天花。 でも実は凄いドラマの目撃者となってしまったのかもしれない。 以後決して再放送もされず、NHK 局内でも禁句になってしまう幻の作品の……。 皆も歴史の目撃者となれ!

screen と rdic

_ おお、素晴しい。実はそういうのを目指していたんですが、 xclip を忘れていたのでした(苦笑)。

いろいろ

_ 名古屋はええよやっとかめ・つボイ版と山本版の徹底比較が素晴しい。


2004/04/04 (日)

[Screen] 他のウィンドウ情報の取得

_ こんなスクリプト test.sh をあらかじめ用意しておきます。

#!/bin/sh

screen -X msgminwait 0
tmp=/tmp/screen-win

if [ ! -d $tmp ] ; then
    mkdir $tmp
fi

env > $tmp/$WINDOW

_ ここで任意のウィンドウから Screen の at コマンドを使って例えば

screen -X at w3m exec test.sh
とやると、w3m というタイトルのついたウィンドウ内の 環境変数の一覧を“/tmp/screen-win/(w3m というタイトルのついたウィンドウの番号)”に 格納できます。この方法で何かおもしろいことができないものかなと。

夢幻の心臓II

_ ちょっとやってみたいですな。 クリスタルソフトというと、 アスピック も気になってた。

_ 他、PC の RPG で面白そうなのは、 名古屋雁道出身の円丈によるサバッシュ2かな。

いろいろ

_ だいぶお疲れじゃありませんか、はやまさん? (^^;;;


2004/04/05 (月)

[Screen] rdic 連携機能の改良

_ shinichiro.h さんから教えていただいた xclip を 使って、前回のスクリプトをさらに改良をしてみる。

_ Screen には、ペーストバッファの内容をファイルに書き出せる writebuf という コマンドが用意されている。そこで、次のような方法に基いてスクリプトを書いてみた。

  1. 前回の方法と同様にして 英単語をペーストバッファに入れる。
  2. ペーストバッファの内容を writebuf で /tmp/screen-xclip へ書き出す。
  3. xclip /tmp/screen-xclip する。

これでうまくいくはずだが……。

_ 何故かうまくいかない。 xclip がフォアグラウンドで動いているのであれば、 ファイル内容を読んで xclip が終了し、間もなくスクリプトも終了するはず。 ちなみに /tmp/screen-xclip にはちゃんと書き出している。

_ と思っていたら、xclip はバックグラウンドで動くものらしい。 スクリプトの終了が早過ぎるからかと思い xclip 直後に sleep 1 を入れてみたら、 案の定 xclip に渡る。

_ なるほど、どうやらスクリプトが終わるときに SIGHUP を食らってしまい、 xclip が /tmp/screen-xclip の内容をもらう前に終了させられちゃうのか、 たぶん。という推測に基づき(← Screen のソース読めよ)、 SIGHUP を trap するようにしたら……ヤッター、動いたよ。

_ その結果がこの lookup2.sh です。 前回同様

bind ^W exec lookup2.sh
とすれば、C-a C-w で Screen の外で動いている rdic へも単語を渡せます。 どうぞご自由にお使いください。

_ ……なんか trap の使い方が怪しい気がするのだがこれであってるんかな? (ぉ

_ [追記] 挙動が怪しかったので書き直しました。これで大丈夫かな?

いろいろ

_ スポーツマン決定戦を見て。 これでワッキーも本格的に全国区進出だねえ。 全国に飛ばされ続けながらも

_ ちと上の文を書き直し。


2004/04/06 (火)

_ 私は大ウケでしたよ!!!

_ ローカルニュースより、名古屋市営地下鉄名城線が今年10月、 ついに環状化するらしい。 八事日赤駅が登山口になる可能性大。

_ いかチョコ! 製造元のタクマ食品といい、それを店に置くヴィレッジ・ヴァンガードといい、 どうして愛知企業はこうもチャレンジングなのか。

_ 「天花」私評マラソン。 まさに苦行。

[Screen] 続・Screen と rdic 連携機能の改良

_ 取り上げていただいて光栄です。Screen と rdic は本当に便利です。

_ 昨日のスクリプトだと単語の取りこぼしがあったので、 lookup2.sh を書き直しました

ワッキー

_ たまにオンエアバトルに出てますよね。最近あの番組を全然見ていないんですが、 オンエア率は高そう。

_ 三重に着いても、 次はまだ訪れていない県をたどる 「地名しりとり全国制覇」の企画が 待っているんじゃないかとにらんでます。 なんせ「ノブナガ」ですからね :-)


2004/04/07 (水)

_ フォローどうもです。

_ nohup(1) は最初使ってみたんですが、テストの時に nohup.out が出来るのが ちょっと嫌だったんですよね。名前付きパイプは使うまでもないかなと 思ったんですが、少し速くなるかもしれないですね。使ってみることにします。

_ 天花の主人公は表情筋を鍛える必要がある。

_ 一方の沢口靖子は笑顔が素晴しい。

_ ↑「天花の主人公」ってなんだよ。「天花」でいいだろが。

[Screen] Screen と rdic 連携機能: 和英辞書も引けるスクリプト

_ 英和もいいけど和英もね(c)かとうかずこ。 実は和英連携機能を作ることが目標でした。で、Chonan さんから 指摘された mkfifo(1) を使う方法で作ってみました。 それがこの wlookup.sh です。 [4月9日追記] 挙動とか FIFO の使い方が怪しいので誰か改良してください(マテ

_ アルゴリズムの概略は以下のとおり:

  1. 検索対象語の上にカーソルが置かれているとする。
  2. カーソルのある行の現在位置から最左端までを Screen の機能でコピーする(これをコピー1とする)。
  3. カーソルのある行全体を同じくコピー(コピー2)。
  4. コピー1, 2 それぞれから ASCII 英数字・記号を除去。
  5. コピー2 を形態素解析器 kakasi でわかち書きにする。わかち書きできるコマンドであればなんでもいい(MeCab など)。
  6. 分解された各単語を前方から連結し、辞書順がコピー1と同じか越えたときの単語(それが検索対象のはず)を あおきさんの xclipstr へ渡す。 xclip では日本語を渡せなかったので、こちらを使いました。

_ 使い方はこれまで同様、.screenrc などに

bind W wlookup.sh(←間違ってました
bind W exec wlookup.sh
などとするだけです。 形態素解析器と xclipstr は別に用意してください。 “C-a W”とすれば、Screen 内から和英検索対象語 を rdic に渡せます。

_ ttyplay 用のデモも用意しました。 ただしこのデモでは、 和英検索は xclipstr を使わずに rdic ウィンドウへ直接ペーストする 方法を使ってますので、ちょっと和英検索が遅いです。

_ 上のデモ、w3m の表示が崩れてますが気にしないでください(苦笑

細木数子さんの占い特番

_ 以外のチャンネルをチェック。


2004/04/08 (木)

いろいろ

_ コピー文字列が空だと Screen の writebuf は FIFO に何も渡さないようだ。 そんなー。

_ ペナルティーのドイツ語会話出演はあちこちで話題になってるようですね。 今度見てみます。 しかし何回ぐらいロケ地と本業の不毛な往復をしているのでしょうかね ^^; 私は全国制覇に期待してますよ!


2004/04/09 (金)

いろいろ

_ Screen の和英連携スクリプト、アルゴリズムはいいと思うんだが

するので、もうちょっとちゃんと作りたいところ。


2004/04/10 (土)

まだまだ爆笑大掃除だよ

_ ハウスダストとの闘い。


[後日へ続く]

[最新版へ]

メールはこちらへ...[シンX]

この日記は、GNSを使用して作成されています。

2003年2月1日より 名の訪問