hilfer 0.10.0 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/ChangeLog CHANGED
@@ -1,3 +1,35 @@
1
+ 2009-08-03 15:52 panic
2
+
3
+ * [r4358] History.txt, lib/hilfer/scite_editor.rb,
4
+ lib/hilfer/tree_viewer.rb:
5
+ Change pipe names. Add some comments.
6
+
7
+ 2009-08-03 15:12 panic
8
+
9
+ * [r4357] lib/hilfer/scite_editor.rb:
10
+ Fix the process launching and waiting for scite. Change to
11
+ debug?. Other debug message tweaks.
12
+
13
+ 2009-08-03 14:32 panic
14
+
15
+ * [r4356] lib/hilfer/tree_viewer.rb:
16
+ whitespace changes
17
+
18
+ 2009-08-01 18:53 panic
19
+
20
+ * [r4355] lib/hilfer/version.rb:
21
+ bump version
22
+
23
+ 2009-08-01 18:52 panic
24
+
25
+ * [r4353] Manifest.txt, lib/hilfer/window.rb:
26
+ Remove debug output. Add files to Manifest.
27
+
28
+ 2009-08-01 18:40 panic
29
+
30
+ * [r4352] History.txt, README.txt:
31
+ Notes and docs
32
+
1
33
  2009-08-01 18:28 panic
2
34
 
3
35
  * [r4351] bin/hilfer, lib/hilfer/extensions.rb,
data/History.txt CHANGED
@@ -1,3 +1,8 @@
1
+ === 0.10.1 / 2009-08-03
2
+
3
+ * Rework process launching and waiting for more robustity (sic)
4
+ * rename pipes for easier manual cleanup when necessary
5
+
1
6
  === 0.10.0 / 2009-08-01
2
7
 
3
8
  * Use wmctrl to raise SciTE window.
@@ -5,8 +5,9 @@ class SciteEditor
5
5
  # options can contain :debug
6
6
  # view is a GtkTreeView
7
7
  def initialize( options = {} )
8
- @scite_pipe_name = "/tmp/#{ENV['USER']}.#{Process.pid}.scite"
9
- @director_pipe_name = "/tmp/#{ENV['USER']}.#{Process.pid}.director"
8
+ @scite_pipe_name = "/tmp/hilfer.#{ENV['USER']}.#{Process.pid}.scite"
9
+ @director_pipe_name = "/tmp/hilfer.#{ENV['USER']}.#{Process.pid}.director"
10
+ @pipe_name_file = "/tmp/hilfer.#{ENV['USER']}.scite"
10
11
 
11
12
  cleanup
12
13
 
@@ -18,11 +19,17 @@ class SciteEditor
18
19
 
19
20
  attr_reader :options
20
21
  attr_reader :scite_pid
22
+ attr_reader :pipe_name_file
23
+
24
+ def debug?
25
+ @options[:debug]
26
+ end
21
27
 
22
28
  def launched?
23
29
  !@scite_pid.nil?
24
30
  end
25
31
 
32
+ # return a Window object for the editor.
26
33
  def window
27
34
  @window ||= Window.pid( @scite_pid )
28
35
  end
@@ -49,20 +56,24 @@ class SciteEditor
49
56
  launch
50
57
  File.open( @scite_pipe_name, 'a' ) do |file|
51
58
  file.puts "#{cmd.to_s}:#{arg.to_s}"
52
- puts "sending: #{cmd.to_s}:#{arg.to_s}" if @options[:debug]
59
+ puts "sending: #{cmd.to_s}:#{arg.to_s}" if debug?
53
60
  end
54
61
  end
55
62
 
56
63
  # bring the SciTE instance to the current
57
64
  # desktop and raise it.
58
65
  def activate
59
- window.activate unless window.nil?
66
+ unless window.nil?
67
+ puts "activating scite" if debug?
68
+ window.activate
69
+ puts "finished activating scite" if debug?
70
+ end
60
71
  end
61
72
 
62
73
  # open files in scite
63
74
  def open_action( files )
64
75
  files.each { |x| send_cmd "open", x.path }
65
- send_cmd :identity, 0
76
+ #~ send_cmd :identity, 0
66
77
  activate
67
78
  end
68
79
 
@@ -78,6 +89,7 @@ class SciteEditor
78
89
 
79
90
  # shut down editor, if it's open
80
91
  def quit
92
+ # check for launched?, otherwise send_cmd will attempt to auto-launch.
81
93
  send_cmd :quit if launched?
82
94
  end
83
95
 
@@ -97,6 +109,7 @@ class SciteEditor
97
109
  @views.each { |v| v.synchronise_editor_path( fs_path ) }
98
110
  end
99
111
 
112
+ # view must respond to synchronise_editor_path( fs_path )
100
113
  def register_view( view )
101
114
  @views << view
102
115
  end
@@ -105,10 +118,6 @@ class SciteEditor
105
118
  @views.delete( view )
106
119
  end
107
120
 
108
- def pipe_name_file
109
- @pipe_name_file ||= "/tmp/#{ENV['USER']}.hilfer.scite"
110
- end
111
-
112
121
  def write_pipe_name
113
122
  File.open( pipe_name_file, 'w' ) do |f|
114
123
  f.write @scite_pipe_name
@@ -116,8 +125,10 @@ class SciteEditor
116
125
  end
117
126
  end
118
127
 
119
- # start up the editor if there isn't already one
120
- # calling it when the editor is already open does nothing
128
+ # Start up the editor if there isn't already one.
129
+ # Calling it when the editor is already open does nothing.
130
+ # Store a Window object for raising, and store the pid for
131
+ # other things. Will also install a handler for SIGCHLD
121
132
  def launch
122
133
  return if launched?
123
134
 
@@ -128,9 +139,23 @@ class SciteEditor
128
139
 
129
140
  scite_cmd = "/usr/bin/scite"
130
141
 
131
- # start a process to clean up when scite exits
132
- @scite_pid = fork()
133
- if @scite_pid.nil?
142
+ # wait for scite shutdown by SIGCHLD, and clean up fifo files.
143
+ @handler ||= trap( "CHLD" ) do |signal|
144
+ child_pid = Process.wait( -1, Process::WNOHANG )
145
+ # copy this now, before something else grabs it
146
+ process_status = $?
147
+ if @scite_pid == child_pid
148
+ puts "process_status: #{process_status.inspect}" if debug?
149
+ puts "cleaning pipes" if debug?
150
+ cleanup
151
+ reset
152
+ puts "finished cleaning pipes" if debug?
153
+ end
154
+ end
155
+
156
+ # fork and exec scite, so we can get scite's pid
157
+ if ( @scite_pid = fork() ).nil?
158
+ puts "in child" if debug?
134
159
  # in child, so exec scite from here, so this pid will become scite's pid
135
160
  # not passing the first arg as a 2 element array doesn't work. So
136
161
  # use the same value for the command and as argv[0]
@@ -139,43 +164,25 @@ class SciteEditor
139
164
  "-ipc.director.name=#{@director_pipe_name}",
140
165
  "-ipc.scite.name=#{@scite_pipe_name}"
141
166
  )
142
- else
143
- start_cleanup
144
167
  end
145
168
 
146
- puts "scite launched with pid #{@scite_pid}" if @options[:debug]
169
+ puts "in parent: scite launched with pid #{@scite_pid}" if debug?
147
170
 
148
- # start the listener thread
171
+ # listen for incoming scite events, like file change and open
149
172
  start_listener
150
173
  end
151
174
 
152
175
  protected
153
-
154
- def start_cleanup
155
- Thread.new do
156
- # wait for Scite to end, and cleanup
157
- begin
158
- puts "waiting for scite(#{@scite_pid})" if @options[:debug]
159
- Process.wait( @scite_pid )
160
- cleanup
161
- reset
162
- puts "cleaned up scite pipes" if @options[:debug]
163
- rescue Exception => e
164
- puts "e: #{e.inspect}"
165
- puts e.backtrace
166
- end
167
- end
168
- end
169
176
 
170
177
  def start_listener
171
178
 
172
179
  sleep 0.1 while !File.exists? @scite_pipe_name
173
180
 
174
- Thread.new( self ) do |arg|
181
+ Thread.new do
175
182
  begin
176
- arg.listen
183
+ listen
177
184
  rescue Errno::ENOENT
178
- break
185
+ puts "pipe gone away, so stop listening" if debug?
179
186
  rescue Exception => e
180
187
  print "listener thread ended: ", e.inspect, "\n"
181
188
  puts e.backtrace
@@ -189,7 +196,7 @@ protected
189
196
  File.open( @director_pipe_name ).each( "\x0" ) do |line|
190
197
  begin
191
198
  line = line.slice(0...-1) if line[-1] = 0
192
- print "heard #{line}\n" if @options[:debug]
199
+ print "heard #{line}\n" if debug?
193
200
  case line
194
201
  # scite sends one of these for each file opened
195
202
  when /^opened:(.*)$/
@@ -207,13 +214,13 @@ protected
207
214
  # TODO could check that it exists and add it if not.
208
215
  when /^saved:(.*)$/
209
216
 
210
- when /^closed$/
217
+ when /^closing$/
211
218
  puts "SciTE closing"
212
219
  break
213
220
 
214
221
  # print it out
215
222
  else
216
- print "unknown: ", line, "\n" if @options[:debug]
223
+ print "unknown from scite: ", line, "\n" if debug?
217
224
  end
218
225
  rescue Exception => e
219
226
  print "caught Exception in listen: ", e.inspect, "\n"
@@ -396,7 +396,7 @@ class TreeViewer
396
396
  @editor.insert paths
397
397
 
398
398
  # ctrl-c copies current selections as text
399
- when event.c? && event.state.control_mask? && !event.state.shift_mask?
399
+ when event.c? && event.state.control_mask? && !event.state.shift_mask?
400
400
  paths = ""
401
401
 
402
402
  # fetch all selected items
@@ -438,7 +438,7 @@ class TreeViewer
438
438
  when event.r? && event.state.control_mask?
439
439
  refresh
440
440
 
441
- # ctrl-t opens a terminal window on the given directorties.
441
+ # ctrl-t opens a terminal window on the given directories.
442
442
  # Uses gnome-terminal and opens directories in tabs
443
443
  when event.t? && event.state.control_mask? && !event.state.shift_mask?
444
444
  # collect all unique directories
@@ -527,7 +527,7 @@ class TreeViewer
527
527
  end
528
528
  break
529
529
  end
530
-
530
+
531
531
  # ctrl-down means go to next sibling with children
532
532
  when event.down? && event.state.control_mask?
533
533
  widget.selection.selected_each do |model, path, iter|
@@ -1,3 +1,3 @@
1
1
  module Hilfer
2
- VERSION = '0.10.0'
2
+ VERSION = '0.10.1'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hilfer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.10.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Anderson
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-08-01 00:00:00 +02:00
12
+ date: 2009-08-03 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency