X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=lib%2Fsup%2Fbuffer.rb;h=8eedf9697c26f1aa94c8a6769aa4f7c9e5752406;hb=dce9d58c2ed6ebe76ab530e8bafb9c369f7b1fe7;hp=2fbb679a47ac490f107ecc64fcd714ec93a0c840;hpb=10a7c245e718e8f05d1d4891c98de017385bd3d9;p=sup diff --git a/lib/sup/buffer.rb b/lib/sup/buffer.rb index 2fbb679..8eedf96 100644 --- a/lib/sup/buffer.rb +++ b/lib/sup/buffer.rb @@ -51,8 +51,8 @@ module Redwood class InputSequenceAborted < StandardError; end class Buffer - attr_reader :mode, :x, :y, :width, :height, :title - bool_reader :dirty + attr_reader :mode, :x, :y, :width, :height, :title, :atime + bool_reader :dirty, :system bool_accessor :force_to_top def initialize window, mode, width, height, opts={} @@ -63,6 +63,8 @@ class Buffer @title = opts[:title] || "" @force_to_top = opts[:force_to_top] || false @x, @y, @width, @height = 0, 0, width, height + @atime = Time.at 0 + @system = opts[:system] || false end def content_height; @height - 1; end @@ -97,6 +99,7 @@ class Buffer @mode.draw draw_status status commit + @atime = Time.now end ## s nil means a blank line! @@ -105,10 +108,16 @@ class Buffer @w.attrset Colormap.color_for(opts[:color] || :none, opts[:highlight]) s ||= "" - maxl = @width - x - @w.mvaddstr y, x, s[0 ... maxl] - unless s.length >= maxl || opts[:no_fill] - @w.mvaddstr(y, x + s.length, " " * (maxl - s.length)) + maxl = @width - x # maximum display width width + stringl = maxl # string "length" + ## the next horribleness is thanks to ruby's lack of widechar support + stringl += 1 while stringl < s.length && s[0 ... stringl].display_length < maxl + @w.mvaddstr y, x, s[0 ... stringl] + unless opts[:no_fill] + l = s.display_length + unless l >= maxl + @w.mvaddstr(y, x + l, " " * (maxl - l)) + end end end @@ -338,7 +347,7 @@ EOS ## w = Ncurses::WINDOW.new(height, width, (opts[:top] || 0), ## (opts[:left] || 0)) w = Ncurses.stdscr - b = Buffer.new w, mode, width, height, :title => realtitle, :force_to_top => (opts[:force_to_top] || false) + b = Buffer.new w, mode, width, height, :title => realtitle, :force_to_top => opts[:force_to_top], :system => opts[:system] mode.buffer = b @name_map[realtitle] = b @@ -486,7 +495,7 @@ EOS return unless answer - user_labels = answer.split(/\s+/).map { |l| l.intern } + user_labels = answer.symbolistize user_labels.each do |l| if forbidden_labels.include?(l) || LabelManager::RESERVED_LABELS.include?(l) BufferManager.flash "'#{l}' is a reserved label!"