[#7356] Q: jcode.rb tr(String + nil) — WATANABE Tetsuya <tetsu@...>

ruby-1.1b9_08 (07 からみたいですが)での話です。

15 messages 1998/04/08
[#7358] Re: Q: jcode.rb tr(String + nil) — matz@... (Yukihiro Matsumoto) 1998/04/08

まつもと ゆきひろです

[#7376] [Q] Thread — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

19 messages 1998/04/08
[#7384] Re: [Q] Thread — keiju@... (Keiju ISHITSUKA) 1998/04/09

けいじゅ@日本ラショナルソフトウェアです.

[#7385] Re: [Q] Thread — matz@... (Yukihiro Matsumoto) 1998/04/09

まつもと ゆきひろです

[#7391] Re: [Q] Thread — keiju@... (石塚圭樹 ) 1998/04/09

けいじゅ@日本ラショナルソフトウェアです.

[#7471] scope — Wakou Aoyama <wakou@...>

青山です。

22 messages 1998/04/15
[#7474] Re: scope — WATANABE Hirofumi <watanabe@...> 1998/04/15

わたなべです.

[#7475] Re: scope — Wakou Aoyama <wakou@...> 1998/04/15

青山です。

[#7500] List on List — WATANABE Hirofumi <watanabe@...>

わたなべです.

26 messages 1998/04/15
[#7501] Re: List on List — matz@... (Yukihiro Matsumoto) 1998/04/15

まつもと ゆきひろです

[#7509] クラスの変更 — Mitsuru Ogino <ogino@...>

荻野といいます。すみませんが、ご指導ください。プログラミング初心者です。

13 messages 1998/04/15

[#7591] How to write Perl's `@a[@b] = @c' in ruby — Inaba Hiroto <inaba@...>

えーと、既に「Perlのmapをrubyでどう書くか」という話題がで出てしまった

29 messages 1998/04/16
[#7601] Re: How to write Perl's `@a[@b] = @c' in ruby — WATANABE Hirofumi <watanabe@...> 1998/04/17

わたなべです.

[#7614] Re: How to write Perl's `@a[@b] = @c' in ruby — Shin-ichiro HARA <sinara@...> 1998/04/17

原です。

[#7626] Re: How to write Perl's `@a[@b] = @c' in ruby — Inaba Hiroto <inaba@...> 1998/04/19

From: Shin-ichiro HARA <sinara@blade.nagaokaut.ac.jp>

[#7628] Re: How to write Perl's `@a[@b] = @c' in ruby — Shin-ichiro Hara <sinara@...> 1998/04/19

原です。

[#7659] iteration with index (Re: How to write Perl's `@a[@b] = @c' in ruby) — shugo@... (Shugo Maeda) 1998/04/20

前田です。

[#7671] How to install beta versions — Shin-ichiro HARA <sinara@...>

原です。

32 messages 1998/04/21
[#7672] Re: How to install beta versions — matz@... (Yukihiro Matsumoto) 1998/04/21

まつもと ゆきひろです

[#7674] Re: How to install beta versions — WATANABE Hirofumi <watanabe@...> 1998/04/21

わたなべです.

[#7675] Re: How to install beta versions — WATANABE Tetsuya <tetsu@...> 1998/04/21

>>>>> "W" == WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp> writes:

[#7677] Re: How to install beta versions — Shin-ichiro HARA <sinara@...> 1998/04/21

原です。

[#7679] Re: How to install beta versions — WATANABE Hirofumi <watanabe@...> 1998/04/21

わたなべです.

[#7690] Re: How to install beta versions — Toshihiko SHIMOKAWA / 下川俊彦 <toshi@...> 1998/04/21

From: WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>

[#7700] Re: How to install beta versions — matz@... (Yukihiro Matsumoto) 1998/04/22

まつもと ゆきひろです

[#7710] Re: How to install beta versions — Toshihiko SHIMOKAWA / 下川俊彦 <toshi@...> 1998/04/22

From: matz@netlab.co.jp (Yukihiro Matsumoto)

[#7711] Re: How to install beta versions — matz@... (Yukihiro Matsumoto) 1998/04/22

まつもと ゆきひろです

[#7720] Re: How to install beta versions — chisaka@... 1998/04/23

[#7721] Re: How to install beta versions — matz@... (Yukihiro Matsumoto) 1998/04/24

まつもと ゆきひろです

[#7724] Re: How to install beta versions — NAGAI Hidetoshi <nagai@...> 1998/04/25

永井@知能.九工大です.

[#7729] mail index sort by From: — Kikutani Makoto <kikutani@...>

きくたにです。

27 messages 1998/04/26
[#7730] mail index sort by From: — gotoken@... (GOTO Kentaro) 1998/04/26

ごとけんです

[#7738] Re: mail index sort by From: — Kikutani Makoto <kikutani@...> 1998/04/27

きくたにです。

[#7757] Re: mail index sort by From: — gotoken@... (GOTO Kentaro) 1998/04/28

ごとけんです

[#7758] Re: mail index sort by From: — akira yamada / やまだあきら <akira@...> 1998/04/28

[#7760] Re: mail index sort by From: — gotoken@... (GOTO Kentaro) 1998/04/28

ごとけんです

[ruby-list:7382] Re: call for scripts

From: Kazunori NISHI <kazunori@...>
Date: 1998-04-09 00:49:45 UTC
List: ruby-list #7382
西@九大です。

From: matz@netlab.co.jp (Yukihiro Matsumoto)
>   標準ライブラリにある部分を除いて100〜200行程度以下
>   # 必要な部分を標準ライブラリに追加してしまうのはアリです.

Ruby の*簡易*クラスブラウザを作ってみました。
まだ間に合うようでしたら、エントリさせて下さい。

あ、"tkscrollbox" を読み込んでいますが、いいんでしょうか?

>   簡単な使い方の説明付き

% ./TkSimpleClassBrowser.rb [ClassName]

クラス名を引数(省略可)として起動します。クラス名をダブルクリックすると、
メソッドが表示され、あれば下位の階層も表示します。メソッドをクリックし
ても何もおきません(寂しいです)。"Control-q" で終了します。

最初は、実用性を重視していたのですが、予想より Tk の敷居が高く、「どれ
だけ短くなるか(Simple)」を目標にした第2の人生が始まり現在に至る、です。

「ちょっとメソッド名を忘れてしまった」時ぐらいには役に立つと思います。
もう少し GUI と Ruby を勉強して、本格的なものを作りたいです。

それでは。
------------------------------------------------------------------
九州大学大学院システム情報科学研究科 情報工学専攻 博士後期課程二年
      西 和則   ( e-mail: kazunori@swlab.csce.kyushu-u.ac.jp )
------------------------------------------------------------------

#!/usr/local/bin/ruby

### TkSimpleClassBrowser.rb - Ruby Simple Class Browser with Tk
###       by Kazunori Nishi <kazunori@swlab.csce.kyushu-u.ac.jp>

### [usage] TkSimpleClassBrowser.rb [InitialClassName]
### Type "Control-q" to exit the program

require "tkscrollbox"

### Global Variables #################################################

$initial_class	= ARGV .shift || 'Object'
$top_widget	= TkFrame .new
$widgets	= {}
$sub_classes	= {}

### Functions ########################################################

def hierarchy_label (a_class, label = '+')
  ($sub_classes[a_class] ? label : ' ') + " #{a_class}"
end

def update_widget (name, items)
  $widgets[name] .delete 0, 'end'
  $widgets[name] .insert 'end', "*** #{name}(#{items .length}) ***"
  items .each do |item|
    $widgets[name] .insert 'end', hierarchy_label(item)
  end
end

def update_class (class_name)
  begin
    a_class = eval(class_name)
    class_methods = a_class .methods + a_class .singleton_methods
    update_widget('Class Method', class_methods .sort)
    update_widget('Instance Method', a_class .instance_methods .sort)
  rescue
    update_widget('Class Method', ["[BUG???]", "#{$!}"])
  end
end

def update_class_with_hierarchy (class_name)
  $widgets['Class'] .insert 'end', "*** Class ***"
  begin
    (nest = eval(class_name) .ancestors) .reverse .each_with_index do |c, i|
      $widgets['Class'] .insert 'end', '  ' * i +
	hierarchy_label(c .to_s, i == nest .length - 1 ? '+' : '-')
    end
  rescue
    update_widget('Class Method', ["[BUG???]", "#{$!}"])
  end
end

### Main Routine #####################################################

ObjectSpace .each_object(Class) do |a_class|
  class_name, is_module = a_class .to_s .split('::')
  parent = is_module ? class_name : a_class .superclass .to_s
  client = is_module ? a_class .to_s : class_name
  $sub_classes[parent] = (($sub_classes[parent] || []) << client) .compact
end

for name in ['Class', 'Class Method', 'Instance Method']
  $widgets[name] = TkScrollbox .new($top_widget) {
    relief 'raised'; width 30; height 20
    pack('side'=>'left')
  }
end

$widgets['Class'] .bind "Double-Button-1", proc {
  this = $widgets['Class']
  a_class = (selection = (this .get 'active')) .split .pop
  prefix = '  ' * (selection .index(a_class) / 2)
  if (pos = (this .index 'active') .to_i) > 0
    update_class(a_class)
    case (selection .split)[0]
    when '+'
      this .insert pos, selection .sub('\+','-')
      this .delete pos + 1
      $sub_classes[a_class] .sort .reverse .each do |c|
	this .insert pos + 1, prefix + hierarchy_label(c)
      end
    when '-'
      this .insert pos, selection .sub('-','+')
      this .delete pos + 1
      while ((this .get pos + 1)[prefix .length, 1] =~ /[ +-]/)
	this .delete pos + 1
      end
    end
  end
}

$top_widget .bind "Control-q", proc {exit}
$top_widget .pack('fill'=>'both')
$top_widget .focus

update_class_with_hierarchy($initial_class)

Tk.mainloop

In This Thread