lots of ncurses fighting involved!
if opts.member? :status
[opts[:status], opts[:title]]
else
if opts.member? :status
[opts[:status], opts[:title]]
else
- get_status_and_title(@focus_buf) # must be called outside of the ncurses lock
+ raise "status must be supplied if draw_screen is called within a sync" if opts[:sync] == false
+ get_status_and_title @focus_buf # must be called outside of the ncurses lock
end
print "\033]2;#{title}\07" if title
end
print "\033]2;#{title}\07" if title
+ ## for simplicitly, we always place the question at the very bottom of the
+ ## screen
def ask domain, question, default=nil, &block
raise "impossible!" if @asking
@asking = true
def ask domain, question, default=nil, &block
raise "impossible!" if @asking
@asking = true
tf = @textfields[domain]
completion_buf = nil
tf = @textfields[domain]
completion_buf = nil
- ## this goddamn ncurses form shit is a fucking 1970's nightmare.
- ## jesus christ. the exact sequence of ncurses events that needs
- ## to happen in order to display a form and have the entire screen
- ## not disappear and have the cursor in the right place can only
- ## be determined by hours of trial and error and is TOO FUCKING
- ## COMPLICATED.
+ status, title = get_status_and_title @focus_buf
+
Ncurses.sync do
tf.activate Ncurses.stdscr, Ncurses.rows - 1, 0, Ncurses.cols, question, default, &block
Ncurses.sync do
tf.activate Ncurses.stdscr, Ncurses.rows - 1, 0, Ncurses.cols, question, default, &block
- @dirty = true
- draw_screen :skip_minibuf => true, :sync => false
+ @dirty = true # for some reason that blanks the whole fucking screen
+ draw_screen :sync => false, :status => status, :title => title
tf.position_cursor
Ncurses.refresh
end
tf.position_cursor
Ncurses.refresh
end
Ncurses.sync { Ncurses.refresh }
end
Ncurses.sync { Ncurses.refresh }
end
- Ncurses.sync { tf.deactivate }
kill_buffer completion_buf if completion_buf
kill_buffer completion_buf if completion_buf
@dirty = true
@asking = false
@dirty = true
@asking = false
+ Ncurses.sync do
+ tf.deactivate
+ draw_screen :sync => false, :status => status, :title => title
+ end
- ## some pretty lame code in here!
def ask_getch question, accept=nil
def ask_getch question, accept=nil
+ raise "impossible!" if @asking
+ @asking = true
+
accept = accept.split(//).map { |x| x[0] } if accept
accept = accept.split(//).map { |x| x[0] } if accept
+ status, title = get_status_and_title @focus_buf
+ draw_screen :sync => false, :status => status, :title => title
+ Ncurses.mvaddstr Ncurses.rows - 1, 0, question
Ncurses.move Ncurses.rows - 1, question.length + 1
Ncurses.move Ncurses.rows - 1, question.length + 1
Ncurses.refresh
end
ret = nil
done = false
Ncurses.refresh
end
ret = nil
done = false
until done
key = Ncurses.nonblocking_getch or next
if key == Ncurses::KEY_CANCEL
done = true
until done
key = Ncurses.nonblocking_getch or next
if key == Ncurses::KEY_CANCEL
done = true
- elsif (accept && accept.member?(key)) || !accept
+ elsif accept.nil? || accept.empty? || accept.member?(key)
ret = key
done = true
end
end
ret = key
done = true
end
end
Ncurses.sync do
Ncurses.curs_set 0
Ncurses.sync do
Ncurses.curs_set 0
- erase_flash
- draw_screen :sync => false
- Ncurses.curs_set 0
+ draw_screen :sync => false, :status => status, :title => title
@minibuf_mutex.synchronize do
m = @minibuf_stack.compact
m << @flash if @flash
@minibuf_mutex.synchronize do
m = @minibuf_stack.compact
m << @flash if @flash
+ m << "" if m.empty? unless @asking # to clear it
end
Ncurses.mutex.lock unless opts[:sync] == false
end
Ncurses.mutex.lock unless opts[:sync] == false
@w, @y, @x, @width = window, y, x, width
@question = question
@completion_block = block
@w, @y, @x, @width = window, y, x, width
@question = question
@completion_block = block
- @field = Ncurses::Form.new_field 1, @width - question.length,
- @y, @x + question.length, 0, 0
+ @field = Ncurses::Form.new_field 1, @width - question.length, @y, @x + question.length, 0, 0
@form = Ncurses::Form.new_form [@field]
@value = default
Ncurses::Form.post_form @form
@form = Ncurses::Form.new_form [@field]
@value = default
Ncurses::Form.post_form @form
@w.mvaddstr @y, 0, @question
Ncurses.curs_set 1
Ncurses::Form.form_driver @form, Ncurses::Form::REQ_END_FIELD
@w.mvaddstr @y, 0, @question
Ncurses.curs_set 1
Ncurses::Form.form_driver @form, Ncurses::Form::REQ_END_FIELD
- Ncurses::Form.form_driver @form, Ncurses::Form::REQ_NEXT_CHAR if @value && @value =~ / $/ # fucking RETARDED!!!!
+ Ncurses::Form.form_driver @form, Ncurses::Form::REQ_NEXT_CHAR if @value && @value =~ / $/ # fucking RETARDED