• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
Keine Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Ruby GTK3移行後のメインリポジトリ


Commit MetaInfo

Revision8d8391d00f95fa8ea979381f6b80b5c8658eeb1d (tree)
Zeit2015-03-28 21:15:25
AutorShyouzou Sugitani <shy@user...>
CommiterShyouzou Sugitani

Log Message

assorted fixes

Ändern Zusammenfassung

Diff

--- a/lib/ninix/alias.rb
+++ b/lib/ninix/alias.rb
@@ -87,7 +87,7 @@ module Alias
8787 table[key] = []
8888 for value in values[1, values.length - 2].split(',')
8989 begin
90- value = str(int(value))
90+ value = value.to_i.to_s
9191 rescue
9292 #except ValueError:
9393 #pass
--- a/lib/ninix/balloon.rb
+++ b/lib/ninix/balloon.rb
@@ -1862,7 +1862,7 @@ module Balloon
18621862 def show(default)
18631863 if default != nil
18641864 begin
1865- text = str(default)
1865+ text = default.to_s
18661866 rescue # except:
18671867 text = ''
18681868 end
--- a/lib/ninix/config.rb
+++ b/lib/ninix/config.rb
@@ -23,7 +23,7 @@ module NConfig
2323 keylist = [name]
2424 end
2525 for key in keylist
26- if self.has_key?(key)
26+ if has_key?(key)
2727 return self[key]
2828 end
2929 end
--- a/lib/ninix/install.rb
+++ b/lib/ninix/install.rb
@@ -428,13 +428,13 @@ module Install
428428 filelist << [thumbnail_pnr,
429429 File.join(prefix, 'thumbnail.pnr')]
430430 end
431- for path in self.list_all_files(ghost_src, '')
431+ for path in list_all_files(ghost_src, '')
432432 filelist << [File.join(ghost_src, path),
433433 File.join(ghost_dst, path)]
434434 end
435435 ghost_name = inst.get('name')
436436 # find shell
437- for path in self.list_all_files(shell_src, '')
437+ for path in list_all_files(shell_src, '')
438438 filelist << [File.join(shell_src, path),
439439 File.join(shell_dst, path)]
440440 end
@@ -544,7 +544,7 @@ module Install
544544 #logging.info('not found')
545545 return nil, nil, 4
546546 else
547- target = self.select(candidates)
547+ target = select(candidates)
548548 if target == nil
549549 return nil, nil, 4
550550 end
--- a/lib/ninix/kinoko.rb
+++ b/lib/ninix/kinoko.rb
@@ -289,7 +289,7 @@ module Kinoko
289289 @__shown = false
290290 @surface_id = 0 # dummy
291291 @window = Pix::TransparentWindow.new()
292- ##self.window.set_title(''.join(('surface.', name)))
292+ ##@window.set_title(['surface.', name].join(''))
293293 @window.set_skip_taskbar_hint(true)
294294 @window.signal_connect('delete_event') do |w, e|
295295 delete(w, e)
@@ -487,7 +487,7 @@ module Kinoko
487487 if File.exists?(path)
488488 @path = path
489489 else
490- #self.path = None
490+ #path = nil
491491 @path = File.join(@data['dir'], @data['base'])
492492 end
493493 end
--- a/lib/ninix/ngm.rb
+++ b/lib/ninix/ngm.rb
@@ -916,7 +916,7 @@ module NGM
916916
917917 def install_current
918918 begin
919- filetype, target_dir = @installer.install(self.get('ArchiveUrl'),
919+ filetype, target_dir = @installer.install(get('ArchiveUrl'),
920920 Home.get_ninix_home())
921921 rescue #except:
922922 target_dir = nil
@@ -928,7 +928,7 @@ module NGM
928928 end
929929
930930 def update_current ## FIXME
931- @parent.handle_request('NOTIFY', 'update_sakura', self.get('Name'), 'NGM')
931+ @parent.handle_request('NOTIFY', 'update_sakura', get('Name'), 'NGM')
932932 end
933933 end
934934 end
--- a/lib/ninix/sakura.rb
+++ b/lib/ninix/sakura.rb
@@ -15,6 +15,7 @@
1515
1616 require "gtk3"
1717 require "gst"
18+require "cgi"
1819
1920 require "ninix/surface"
2021 require "ninix/balloon"
@@ -78,12 +79,6 @@ module Sakura
7879 # script origins
7980 FROM_SSTP_CLIENT = 1
8081 FROM_GHOST = 2
81- # HTML entity definitions
82- begin
83- from html.entities import name2codepoint
84- rescue # except:
85- name2codepoint = nil
86- end
8782
8883 def initialize
8984 @parent = nil
@@ -215,7 +210,7 @@ module Sakura
215210 def notify_installedshellname()
216211 installed = []
217212 for key in @shells
218- installed.append(@shells[key].baseinfo[0])
213+ installed << @shells[key].baseinfo[0]
219214 end
220215 notify_event('installedshellname', *installed)
221216 end
@@ -317,21 +312,21 @@ module Sakura
317312 f = open(path, 'r')
318313 for line in f
319314 if not line.include?(',')
320- continue
315+ next
321316 end
322317 key, value = line.split(',', 1)
323318 key = key.strip()
324319 if key == 'time'
325320 begin
326- ghost_time = int(value.strip())
321+ ghost_time = value.strip().to_i
327322 rescue #except:
328- pass
323+ #pass
329324 end
330325 elsif key == 'vanished_count'
331326 begin
332- ghost_vanished_count = int(value.strip())
327+ ghost_vanished_count = value.strip().to_i
333328 rescue #except:
334- pass
329+ #pass
335330 end
336331 end
337332 end
@@ -356,7 +351,7 @@ module Sakura
356351 f = open(path, 'r')
357352 for line in f
358353 if not line.include?(',')
359- continue
354+ next
360355 end
361356 key, value = line.split(',', 1)
362357 if key.strip() == 'balloon_directory'
@@ -510,9 +505,9 @@ module Sakura
510505 end
511506 reset_script(1)
512507 end
513- @script_queue.append([event, script, sender, handle, host,
514- show_sstp_marker, use_translator,
515- db, request_handler])
508+ @script_queue << [event, script, sender, handle, host,
509+ show_sstp_marker, use_translator,
510+ db, request_handler]
516511 end
517512
518513 reset_event = ['OnGhostChanging', 'OnShellChanging', 'OnVanishSelected']
@@ -528,7 +523,7 @@ module Sakura
528523 if @reset_event.include?(event)
529524 reset_script(1)
530525 end
531- @event_queue.append([event, arglist, argdict])
526+ @event_queue << [event, arglist, argdict]
532527 end
533528
534529 EVENT_SCRIPTS = {
@@ -553,7 +548,7 @@ module Sakura
553548 argdict = {'default' => EVENT_SCRIPTS.get(event)}
554549 if notify_event(event, *arglist, **argdict)
555550 if proc != nil
556- @script_post_proc.append(proc)
551+ @script_post_proc << proc
557552 end
558553 return 1
559554 elsif proc != nil
@@ -785,10 +780,10 @@ module Sakura
785780 for line in response.splitlines()
786781 line = str(line, @__charset, 'ignore').strip()
787782 if not line
788- continue
783+ next
789784 end
790785 if not line.include?(':')
791- continue
786+ next
792787 end
793788 key, value = line.split(':', 1)
794789 key = key.strip()
@@ -839,9 +834,9 @@ module Sakura
839834 value = ref[i]
840835 if value != nil
841836 value = value if isinstance(value, str) \
842- else str(value)
837+ else value.to_s
843838 header = ''.join([header,
844- 'Reference', str(i), ': ',
839+ 'Reference', i.to_s, ': ',
845840 value, '\r\n'])
846841 end
847842 end
@@ -950,7 +945,7 @@ module Sakura
950945 notify_event('OnBoot', @surface.name, default=default)
951946 end
952947 else
953- pass ## FIXME
948+ #pass ## FIXME
954949 end
955950 end
956951
@@ -1219,7 +1214,7 @@ module Sakura
12191214 value = arglist[n]
12201215 if value != nil
12211216 value = value if isinstance(value, str) \
1222- else str(value)
1217+ else value.to_s
12231218 logging.debug(
12241219 'Reference{0:d}: {1}'.format(n, value))
12251220 end
@@ -1274,7 +1269,7 @@ module Sakura
12741269 start_script(script)
12751270 @balloon.hide_sstp_message()
12761271 if @boot_event.include?(event)
1277- @script_finally.append(@surface_bootup)
1272+ @script_finally << @surface_bootup
12781273 end
12791274 def proc(flag_break=false)
12801275 @parent.handle_request(
@@ -1285,7 +1280,7 @@ module Sakura
12851280 flag_break, communication,
12861281 nil, false, script, arglist)
12871282 end
1288- @script_finally.append(proc)
1283+ @script_finally << proc
12891284 return 1
12901285 end
12911286
@@ -1374,11 +1369,11 @@ module Sakura
13741369 color_g = getstring('menu.background.font.color.g')
13751370 color_b = getstring('menu.background.font.color.b')
13761371 begin
1377- color_r = max(0, min(255, int(color_r)))
1378- color_g = max(0, min(255, int(color_g)))
1379- color_b = max(0, min(255, int(color_b)))
1372+ color_r = max(0, min(255, color_r.to_i))
1373+ color_g = max(0, min(255, color_g.to_i))
1374+ color_b = max(0, min(255, color_b.to_i))
13801375 rescue #except:
1381- pass
1376+ #pass
13821377 else
13831378 background = [color_r, color_g, color_b]
13841379 end
@@ -1386,11 +1381,11 @@ module Sakura
13861381 color_g = getstring('menu.foreground.font.color.g')
13871382 color_b = getstring('menu.foreground.font.color.b')
13881383 begin
1389- color_r = max(0, min(255, int(color_r)))
1390- color_g = max(0, min(255, int(color_g)))
1391- color_b = max(0, min(255, int(color_b)))
1384+ color_r = max(0, min(255, color_r.to_i))
1385+ color_g = max(0, min(255, color_g.to_i))
1386+ color_b = max(0, min(255, color_b.to_i))
13921387 rescue #except:
1393- pass
1388+ #pass
13941389 else
13951390 foreground = [color_r, color_g, color_b]
13961391 end
@@ -1469,7 +1464,7 @@ module Sakura
14691464 end
14701465
14711466 def get_uptime()
1472- uptime = (int(time.time() - @start_time) / 3600).to_i
1467+ uptime = ((time.time() - @start_time).to_i / 3600).to_i
14731468 if uptime < 0
14741469 @start_time = time.time()
14751470 return 0
@@ -1745,13 +1740,13 @@ module Sakura
17451740 @old_otherghostname = otherghostname
17461741 end
17471742 if not @__running
1748- pass
1743+ #pass
17491744 elsif [PAUSE_MODE, PAUSE_NOCLEAR_MODE].include?(@script_mode)
17501745 ##if idle > PAUSE_TIMEOUT:
17511746 ## @script_mode = BROWSE_MODE
1752- pass
1747+ #pass
17531748 elsif @script_mode == WAIT_MODE
1754- pass
1749+ #pass
17551750 elsif @processed_script or @processed_text
17561751 interpret_script()
17571752 elsif @script_post_proc
@@ -1766,7 +1761,7 @@ module Sakura
17661761 @script_finally = []
17671762 elsif @script_mode == SELECT_MODE
17681763 if @passivemode
1769- pass
1764+ #pass
17701765 elsif idle > SELECT_TIMEOUT
17711766 @script_mode = BROWSE_MODE
17721767 if @sstp_request_handler
@@ -1780,7 +1775,7 @@ module Sakura
17801775 elsif @sstp_handle != nil
17811776 close_sstp_handle()
17821777 elsif @balloon.user_interaction
1783- pass
1778+ #pass
17841779 elsif idle > @__balloon_life > 0 and not @passivemode
17851780 @__balloon_life = 0
17861781 for side in range(@char)
@@ -1795,7 +1790,7 @@ module Sakura
17951790 @surface.lower_all()
17961791 end
17971792 elsif @event_queue and handle_event()
1798- pass
1793+ #pass
17991794 elsif @script_queue and not @passivemode
18001795 if get_silent_time() > 0
18011796 keep_silence(true) # extend silent time
@@ -1821,7 +1816,7 @@ module Sakura
18211816 flag_break, nil,
18221817 [sender, host], (not use_translator), script, [])
18231818 end
1824- @script_finally.append(proc)
1819+ @script_finally << proc
18251820 end
18261821 elsif get_silent_time() > 0
18271822 if now - get_silent_time() > SILENT_TIME
@@ -1832,13 +1827,13 @@ module Sakura
18321827 @surface.get_mikire(),
18331828 @surface.get_kasanari(),
18341829 (not @passivemode and @cantalk))
1835- pass
1830+ #pass
18361831 elsif @clock[1] != minute and \
18371832 notify_event('OnMinuteChange', get_uptime(),
18381833 @surface.get_mikire(),
18391834 @surface.get_kasanari(),
18401835 (not @passivemode and @cantalk))
1841- pass
1836+ #pass
18421837 elsif @surface_mouse_motion != nil
18431838 side, x, y, part = @surface_mouse_motion
18441839 notify_event('OnMouseMove', x, y, '', side, part)
@@ -1992,7 +1987,7 @@ module Sakura
19921987
19931988 def __yen_p(args)
19941989 begin
1995- chr_id = int(args[0])
1990+ chr_id = args[0].to_i
19961991 rescue #except:
19971992 return
19981993 end
@@ -2082,7 +2077,7 @@ module Sakura
20822077 @balloon.hide(@script_side)
20832078 else
20842079 begin
2085- balloon_id = (int(args[0]) / 2).to_i
2080+ balloon_id = (args[0].to_i / 2).to_i
20862081 rescue #except ValueError:
20872082 balloon_id = 0
20882083 else
@@ -2125,7 +2120,7 @@ module Sakura
21252120
21262121 def __set_weight(value, unit)
21272122 begin
2128- amount = int(value) * unit - 0.01
2123+ amount = value.to_i * unit - 0.01
21292124 rescue #except ValueError:
21302125 amount = 0
21312126 end
@@ -2161,7 +2156,7 @@ module Sakura
21612156 def __yen__s(args)
21622157 list = []
21632158 for arg in args
2164- list.append(int(arg))
2159+ list << arg.to_i
21652160 end
21662161 set_synchronized_session(list)
21672162 end
@@ -2230,9 +2225,9 @@ module Sakura
22302225
22312226 def __yen_i(args)
22322227 begin
2233- actor_id = int(args[0])
2228+ actor_id = args[0].to_i
22342229 rescue #except ValueError:
2235- pass
2230+ #pass
22362231 else
22372232 @surface.invoke(@script_side, actor_id)
22382233 end
@@ -2264,13 +2259,9 @@ module Sakura
22642259 end
22652260
22662261 def __yen_and(args)
2267- if @name2codepoint != nil
2268- begin
2269- text = chr(@name2codepoint.get(args[0]))
2270- rescue #except:
2271- text = nil
2272- end
2273- else
2262+ begin
2263+ text = CGI.unescape_html("&" + args[0].to_s +";")
2264+ rescue #except:
22742265 text = nil
22752266 end
22762267 if text == nil
@@ -2281,7 +2272,7 @@ module Sakura
22812272
22822273 def __yen__m(args)
22832274 begin
2284- num = int(args[0], 16)
2275+ num = args[0].to_i(16)
22852276 rescue #except ValueError:
22862277 num = 0
22872278 end
@@ -2356,7 +2347,7 @@ module Sakura
23562347 argc = len(args)
23572348 args = []
23582349 for s in args
2359- args.append(expand_meta(s))
2350+ args << expand_meta(s)
23602351 end
23612352 if args[0] == 'raise' and argc >= 2
23622353 notify_event(*args[1, 9])
@@ -2486,7 +2477,7 @@ module Sakura
24862477 elsif args[2] == 'enable'
24872478 @balloon.set_autoscroll(true)
24882479 else
2489- pass ## FIXME
2480+ #pass ## FIXME
24902481 end
24912482 elsif args[0, 2] == ['set', 'windowstate'] and argc > 2
24922483 if args[2] == 'minimize'
@@ -2544,7 +2535,7 @@ module Sakura
25442535 ''.join(['file://', path]))
25452536 gsettings.set_string('picture-options', opt)
25462537 else
2547- pass # not implemented yet
2538+ #pass # not implemented yet
25482539 end
25492540 end
25502541 elsif args[0, 2] == ['set', 'otherghosttalk'] and argc > 2
@@ -2553,7 +2544,7 @@ module Sakura
25532544 elsif args[2] == 'false'
25542545 @__listening['OnOtherGhostTalk'] = false
25552546 else
2556- pass ## FIXME
2547+ #pass ## FIXME
25572548 end
25582549 elsif args[0, 2] == ['set', 'othersurfacechange'] and argc > 2
25592550 if args[2] == 'true'
@@ -2561,14 +2552,14 @@ module Sakura
25612552 elsif args[2] == 'false'
25622553 @__listening['OnOtherSurfaceChange'] = false
25632554 else
2564- pass ## FIXME
2555+ #pass ## FIXME
25652556 end
25662557 elsif args[0, 2] == ['set', 'balloonoffset'] and argc > 3
25672558 begin
2568- x = int(args[2])
2569- y = int(args[3])
2559+ x = args[2].to_i
2560+ y = args[3].to_i
25702561 rescue #except:
2571- pass
2562+ #pass
25722563 else
25732564 @surface.set_balloon_offset(@script_side, [x, y])
25742565 end
@@ -2595,7 +2586,7 @@ module Sakura
25952586 elsif command == 'cdplay' and argc > 2
25962587 @audio_player.set_state(Gst::State::NULL)
25972588 begin
2598- track = int(args[2])
2589+ track = args[2].to_i
25992590 rescue #except:
26002591 return
26012592 end
@@ -2631,7 +2622,7 @@ module Sakura
26312622 @audio_player.set_state(Gst::State::PLAYING)
26322623 end
26332624 else
2634- pass ## FIXME
2625+ #pass ## FIXME
26352626 end
26362627 elsif args[0] == '*'
26372628 @balloon.append_sstp_marker(@script_side)
@@ -2641,7 +2632,7 @@ module Sakura
26412632 elsif args[1] == 'false'
26422633 @quick_session = 0
26432634 else
2644- pass ## FIXME
2635+ #pass ## FIXME
26452636 end
26462637 elsif args[0] == 'bind' and argc > 2
26472638 category = args[1]
@@ -2655,26 +2646,26 @@ module Sakura
26552646 for key in bind
26562647 group = bind[key][0].split(',')
26572648 if category != group[0]
2658- continue
2649+ next
26592650 end
26602651 if name and name != group[1]
2661- continue
2652+ next
26622653 end
26632654 if ['true', '1'].include?(flag)
26642655 if bind[key][1]
2665- continue
2656+ next
26662657 end
26672658 elsif ['false', '0'].include?(flag)
26682659 if not bind[key][1]
2669- continue
2660+ next
26702661 end
26712662 else # 'toggle'
2672- pass
2663+ #pass
26732664 end
26742665 @surface.toggle_bind([@script_side, key])
26752666 end
26762667 else
2677- pass ## FIXME
2668+ #pass ## FIXME
26782669 end
26792670 end
26802671
@@ -2720,7 +2711,7 @@ module Sakura
27202711 tag = '</u>'
27212712 end
27222713 else
2723- pass ## FIXME
2714+ #pass ## FIXME
27242715 end
27252716 if tag != nil
27262717 @balloon.append_meta(@script_side, tag)
@@ -2804,7 +2795,7 @@ module Sakura
28042795 if @__script_tag.include?(name)
28052796 @__script_tag[name].call(self, args)
28062797 else
2807- pass ## FIMXE
2798+ #pass ## FIMXE
28082799 end
28092800 elsif node[0] == ninix.script.SCRIPT_TEXT
28102801 text = expand_meta(node[1])
@@ -2863,48 +2854,47 @@ module Sakura
28632854 buf = []
28642855 for chunk in text_node
28652856 if chunk[0] == ninix.script.TEXT_STRING
2866- buf.append(chunk[1])
2857+ buf << chunk[1]
28672858 elsif chunk[1] == '%month'
2868- buf.append(str(@current_time[1]))
2859+ buf << @current_time[1].to_s
28692860 elsif chunk[1] == '%day'
2870- buf.append(str(@current_time[2]))
2861+ buf << @current_time[2].to_s
28712862 elsif chunk[1] == '%hour'
2872- buf.append(str(@current_time[3]))
2863+ buf << @current_time[3].to_s
28732864 elsif chunk[1] == '%minute'
2874- buf.append(str(@current_time[4]))
2865+ buf << @current_time[4].to_s
28752866 elsif chunk[1] == '%second'
2876- buf.append(str(@current_time[5]))
2867+ buf << @current_time[5].to_s
28772868 elsif ['%username', '%c'].include?(chunk[1])
2878- buf.append(get_username())
2869+ buf << get_username()
28792870 elsif chunk[1] == '%selfname'
2880- buf.append(get_selfname())
2871+ buf << get_selfname()
28812872 elsif chunk[1] == '%selfname2'
2882- buf.append(get_selfname2())
2873+ buf << get_selfname2()
28832874 elsif chunk[1] == '%keroname'
2884- buf.append(get_keroname())
2875+ buf << get_keroname()
28852876 elsif chunk[1] == '%friendname'
2886- buf.append(get_friendname())
2877+ buf << get_friendname()
28872878 elsif chunk[1] == '%screenwidth'
28882879 left, top, scrn_w, scrn_h = ninix.pix.get_workarea()
2889- buf.append(str(scrn_w))
2880+ buf << scrn_w.to_s
28902881 elsif chunk[1] == '%screenheight'
28912882 left, top, scrn_w, scrn_h = ninix.pix.get_workarea()
2892- buf.append(str(scrn_h))
2883+ buf << scrn_h.to_s
28932884 elsif chunk[1] == '%et'
2894- buf.append('{0:d}万年'.format(@current_time[7]))
2885+ buf << '{0:d}万年'.format(@current_time[7])
28952886 elsif chunk[1] == '%wronghour'
28962887 wrongtime = time.time() + random.choice([-2, -1, 1, 2]) * 3600
2897- buf.append(str(time.localtime(wrongtime)[3]))
2888+ buf << time.localtime(wrongtime)[3].to_s
28982889 elsif chunk[1] == '%exh'
2899- buf.append(str(get_uptime()))
2890+ buf << get_uptime().to_s
29002891 elsif ['%ms', '%mz', '%ml', '%mc', '%mh', \
29012892 '%mt', '%me', '%mp', '%m?'].include?(chunk[1])
2902- buf.append(
2903- getword(''.join(['\\', chunk[1][1..-1]])))
2893+ buf << getword(''.join(['\\', chunk[1][1..-1]]))
29042894 elsif chunk[1] == '%dms'
2905- buf.append(getdms())
2895+ buf << getdms()
29062896 else # %c, %songname
2907- buf.append(chunk[1])
2897+ buf << chunk[1]
29082898 end
29092899 end
29102900 return ''.join(buf)
@@ -2919,7 +2909,7 @@ module Sakura
29192909 begin
29202910 @sstp_handle.send(''.join([data, '\n']))
29212911 rescue #except socket.error:
2922- pass
2912+ #pass
29232913 end
29242914 end
29252915
@@ -2940,7 +2930,7 @@ module Sakura
29402930 begin
29412931 @sstp_handle.close()
29422932 rescue #except socket.error
2943- pass
2933+ #pass
29442934 end
29452935 @sstp_handle = nil
29462936 end
--- a/lib/ninix/sstplib.rb
+++ b/lib/ninix/sstplib.rb
@@ -21,7 +21,6 @@ module SSTPLib
2121
2222 def initialize(hostname="", port)
2323 super(hostname, port)
24- #allow_reuse_address = True
2524 setsockopt(Socket::SOL_SOCKET, Socket::SO_REUSEADDR, true)
2625 end
2726 end
@@ -29,7 +28,7 @@ module SSTPLib
2928 class AsynchronousSSTPServer < SSTPServer
3029
3130 def handle_request
32- r, w, e = select.select([self.socket], [], [], 0)
31+ r, w, e = select.select([@socket], [], [], 0)
3332 if not r
3433 return
3534 end
--- a/lib/ninix/update.rb
+++ b/lib/ninix/update.rb
@@ -226,7 +226,7 @@ module Update
226226 return
227227 elsif @state == 2 # updates2.dau
228228 enqueue_event(
229- 'OnUpdateFailure', str(code), 'updates2.dau', '',
229+ 'OnUpdateFailure', code.to_s, 'updates2.dau', '',
230230 'ghost') # XXX
231231 @state = nil
232232 return