Sha256: eb8299f8512ff32af8d784d2098fe84eaf3982128b3c49376f1609f582027f1c
Contents?: true
Size: 1.82 KB
Versions: 3
Compression:
Stored size: 1.82 KB
Contents
module Ruco class CommandBar attr_accessor :cursor_line, :form delegate :move, :delete, :insert, :selecting, :selection, :text_in_selection, :to => :form SHORTCUTS = [ '^W Exit', '^S Save', '^F Find', '^R Replace', '^D Delete line', '^G Go to line', '^B Select mode' ] def initialize(options) @options = options @forms_cache = {} reset end def view if @form @form.view else available_shortcuts end end def style_map if @form map = @form.style_map map.invert! map.prepend(:reverse, 0, 0..@options[:columns]) map else StyleMap.single_line_reversed(@options[:columns]) end end def ask(question, options={}, &block) @form = cached_form_if(options[:cache], question) do Form.new(question, :columns => @options[:columns]) do |result| @form = nil block.call(result) end end end def reset @forms_cache[@forms_cache.key(@form)] = nil @form = nil end def cursor if @form Position.new cursor_line, @form.cursor.column else Position.new cursor_line, 0 end end private def cached_form_if(cache, question) if cache new_form = yield new_form.insert(@forms_cache[question].value) if @forms_cache[question] @forms_cache[question] = new_form else yield end end def available_shortcuts used_columns = 0 spacer = ' ' shortcuts_that_fit = SHORTCUTS.select do |shortcut| used_columns += shortcut.size it_fits = (used_columns <= @options[:columns]) used_columns += spacer.size it_fits end shortcuts_that_fit * spacer end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
ruco-0.0.53 | lib/ruco/command_bar.rb |
ruco-0.0.52 | lib/ruco/command_bar.rb |
ruco-0.0.51 | lib/ruco/command_bar.rb |