class Canis::HelpManager
manages the help file of an application and the inbuilt help the application provides
for the widgets.
Public Class Methods
new(form, config={})
click to toggle source
# File lib/canis/core/util/helpmanager.rb, line 18 def initialize form, config={}, &block @form = form #super #instance_eval &block if block_given? end
Public Instance Methods
display_help()
click to toggle source
Displays help provided by program. If no program is specified, then default help is displayed. If help was provided, then default help is also displayed on next page after program's help
# File lib/canis/core/util/helpmanager.rb, line 37 def display_help require 'canis/core/util/textutils' filename = CANIS_DOCPATH + "index.txt" stylesheet = CANIS_DOCPATH + "style_help.yml" # defarr contains default help if File.exists?(filename) defarr = File.open(filename,'r').read.split("\n") # convert help file into styles for use by tmux # quick dirty converter for the moment defarr = Canis::TextUtils::help2tmux defarr else arr = [] arr << " Could not find help file for application " arr << " " arr << "Most applications provide the following keys, unless overriden:" arr << " " arr << " F10 - exit application " arr << " C-q - exit application " arr << " ? (or M-?) - current widget key bindings " arr << " " arr << " Alt-x - select commands " arr << " : (or M-:) - select commands " arr << " " defarr = arr end defhelp = true if @help_text defhelp = false arr = @help_text arr = arr.split("\n") if arr.is_a? String arr = Canis::TextUtils::help2tmux arr # FIXME can this happen automatically if it is help format else arr = defarr end #w = arr.max_by(&:length).length h = FFI::NCurses.LINES - 4 w = FFI::NCurses.COLS - 10 wbkgd = get_color($reversecolor, :black, :cyan) require 'canis/core/util/viewer' # this was the old layout that centered with a border, but was a slight bit confusing since the bg was the same # as the lower window. _layout = [h, w, 2, 4] sh = Ncurses.LINES-1 sc = Ncurses.COLS-0 # this is the new layout that is much like bline's command list. no border, a thick app header on top # and no side margin # Suppressing border means that title will not be updated on app_header, we have to do so FIXME _layout = [ h, sc, sh - h, 0] doc = TextDocument.new :text => arr, :content_type => :tmux, :stylesheet => stylesheet Canis::Viewer.view(doc, :layout => _layout, :close_key => KEY_F10, :title => "[ Help ]", :print_footer => true, :app_header => true ) do |t, items| # would have liked it to be 'md' or :help #t.content_type = :tmux #t.stylesheet = stylesheet t.suppress_borders = true t.print_footer = false t.bgcolor = :black t.bgcolor = 16 t.color = :white ah = items[:header] t.bind(:PROPERTY_CHANGE) { |eve| # title is not a property, so we check if text has changed and then look for title. if eve.property_name == :text #$log.debug " PROP NAME IS #{eve.property_name} , title is #{t.title} " ah.text_center = t.title end } #t.text_patterns[:link] = Regexp.new(/\[[^\]]\]/) t.text_patterns[:link] = Regexp.new(/\[\w+\]/) t.bind_key(KEY_TAB, "goto link") { t.next_regex(:link) } # FIXME bgcolor add only works if numberm not symbol t.bind_key(?a, "increment bgcolor") { t.bgcolor += 1 ; t.bgcolor = 1 if t.bgcolor > 256; $log.debug " HELP BGCOLOR is #{t.bgcolor} "; t.clear_pad; t.render_all } t.bind(:PRESS){|eve| link = nil s = eve.word_under_cursor if is_link?(t, s) link = get_link(t, s) end #alert "word under cursor is #{eve.word_under_cursor}, link is #{link}" if link arr = read_help_file link if arr doc = TextDocument.new :text => arr, :content_type => :tmux, :stylesheet => stylesheet, :title => link #t.add_content arr, :title => link t.add_content doc #items[:header].text_center = "[#{link}]" t.buffer_last else alert "No help file for #{link}" end else end } # help was provided, so default help is provided in second buffer unless defhelp doc = TextDocument.new :text => defarr, :content_type => :tmux, :stylesheet => stylesheet, :title => " General Help " #t.add_content defarr, :title => ' General Help ', :stylesheet => stylesheet, :content_type => :tmux t.add_content doc end end end
get_link(t, s)
click to toggle source
# File lib/canis/core/util/helpmanager.rb, line 145 def get_link t, s s.match(t.text_patterns[:link])[0].gsub!(/[\[\]]/,"") end
help_text(text=nil)
click to toggle source
# File lib/canis/core/util/helpmanager.rb, line 23 def help_text text=nil if text @help_text = text end return @help_text end
help_text=(text)
click to toggle source
Assign help text to variable @param [String] help text is a string with newlines, or an Array. Will be split if String
.
May use markup for help files which is a very limited subset of markdown.
# File lib/canis/core/util/helpmanager.rb, line 32 def help_text=(text); help_text(text); end
is_link?(t, s)
click to toggle source
# File lib/canis/core/util/helpmanager.rb, line 142 def is_link? t, s s.index(t.text_patterns[:link]) >= 0 end
read_help_file(link)
click to toggle source
# File lib/canis/core/util/helpmanager.rb, line 148 def read_help_file link filename = CANIS_DOCPATH + "#{link}.txt" defarr = nil # defarr contains default help if File.exists?(filename) defarr = File.open(filename,'r').read.split("\n") # convert help file into styles for use by tmux # quick dirty converter for the moment defarr = Canis::TextUtils::help2tmux defarr end end