lib/sup/buffer.rb in sup-0.0.1 vs lib/sup/buffer.rb in sup-0.0.2
- old
+ new
@@ -130,11 +130,11 @@
@focus_buf = nil
@dirty = true
@minibuf_stack = []
@textfields = {}
@flash = nil
- @shelled_out = false
+ @freeze = false
self.class.i_am_the_instance self
end
def buffers; @name_map.to_a; end
@@ -176,26 +176,26 @@
raise ArgumentError, "duplicate buffer name" if b && @name_map.member?(n)
@name_map[n] = b
end
def completely_redraw_screen
- return if @shelled_out
+ return if @freeze
Ncurses.clear
@dirty = true
draw_screen
end
def handle_resize
- return if @shelled_out
+ return if @freeze
rows, cols = Ncurses.rows, Ncurses.cols
@buffers.each { |b| b.resize rows - 1, cols }
completely_redraw_screen
flash "resized to #{rows}x#{cols}"
end
def draw_screen skip_minibuf=false
- return if @shelled_out
+ return if @freeze
## disabling this for the time being, to help with debugging
## (currently we only have one buffer visible at a time).
## TODO: reenable this if we allow multiple buffers
false && @buffers.inject(@dirty) do |dirty, buf|
@@ -214,11 +214,11 @@
## doesn't already exist. this is useful in the case that generating
## the mode is expensive, as it often is.
def spawn_unless_exists title, opts={}
if @name_map.member? title
Redwood::log "buffer '#{title}' already exists, raising to front"
- raise_to_front @name_map[title]
+ raise_to_front @name_map[title] unless opts[:hidden]
else
mode = yield
spawn title, mode, opts
end
@name_map[title]
@@ -289,15 +289,17 @@
## entire screen not disappear and have the cursor in the right
## place is TOO FUCKING COMPLICATED.
tf.activate question, default
@dirty = true
draw_screen true
- tf.position_cursor
- Ncurses.refresh
ret = nil
+ @freeze = true
+ tf.position_cursor
+ Ncurses.refresh
while tf.handle_input(Ncurses.nonblocking_getch); end
+ @freeze = false
ret = tf.value
tf.deactivate
@dirty = true
@@ -313,30 +315,39 @@
Ncurses.move Ncurses.rows - 1, question.length + 1
Ncurses.refresh
ret = nil
done = false
+ @freeze = true
until done
key = Ncurses.nonblocking_getch
if key == Ncurses::KEY_CANCEL
done = true
elsif (accept && accept.member?(key)) || !accept
ret = key
done = true
end
end
-
+ @freeze = false
Ncurses.curs_set 0
erase_flash
draw_screen
Ncurses.curs_set 0
ret
end
def ask_yes_or_no question
- [?y, ?Y].member? ask_getch(question, "ynYN")
+ r = ask_getch(question, "ynYN")
+ case r
+ when ?y, ?Y
+ true
+ when nil
+ nil
+ else
+ false
+ end
end
def draw_minibuf
s = @flash || @minibuf_stack.reverse.find { |x| x } || ""
@@ -346,23 +357,23 @@
end
def say s, id=nil
id ||= @minibuf_stack.length
@minibuf_stack[id] = s
- unless @shelled_out
- draw_minibuf
+ unless @freeze
+ draw_screen
Ncurses.refresh
end
id
end
def erase_flash; @flash = nil; end
def flash s
@flash = s
- unless @shelled_out
- draw_minibuf
+ unless @freeze
+ draw_screen
Ncurses.refresh
end
end
def clear id
@@ -371,21 +382,21 @@
id.downto(0) do |i|
break unless @minibuf_stack[i].nil?
@minibuf_stack.delete_at i
end
end
- unless @shelled_out
- draw_minibuf
+ unless @freeze
+ draw_screen
Ncurses.refresh
end
end
def shell_out command
- @shelled_out = true
+ @freeze = true
Ncurses.endwin
system command
Ncurses.refresh
Ncurses.curs_set 0
- @shelled_out = false
+ @freeze = false
end
end
end