Skip to content
rthrd edited this page Oct 22, 2014 · 8 revisions

The BufferManager contains several handy dialog functions:

These functions display a prompt at the bottom of the screen; answers may be typed directly or choosen by tab-completion

The names of the functions are quite self-explanatory.

Common arguments are:

domain : token for internal use of BufferManager question : string used as prompt completions : array of possible answers, that can be completed by using the tab key default : default value, it is written after the prompt and has to be deleted in order to substitute it!

Of use for writing interacive hooks are namely:

BufferManager::ask_with_completions domain, question, completions, default=nil
BufferManager::ask_many_with_completions domain, question, completions, default=nil
BufferManager::ask_many_emails_with_completions domain, question, completions, default=nil
BufferManager::ask_for_filename domain, question, default=nil, allow_directory=falseer::
BufferManager::ask_for_labels domain, question, default_labels, forbidden_labels=[]
BufferManager::ask_for_contacts domain, question, default_contacts=[]
BufferManager::ask_for_account domain, question
BufferManager::ask_yes_or_no question

This is an example of an interactive signature hook. It prompts the user for a keyword to choose the signature that should be used for this message

### signature.rb -- generate signature
### This example demonstrates how to generate the signature interactively


## Configuration

# Hash containing name => signature pairs
signatures = {
        "professional" => """
This is the Grand Professional Signature.
""",
        "familiar" => """
This is the Good Familiar Signature.
""",
        "private" => """
This is the Great Private Signature.
""",
        "no signature" => "",
}
# default signature key
default = "professional"
# prompt
prompt = "Choose signature"
help = "(<tab> for list of choices, empty line for #{default} signature)"


## Globals
# The signature hook is called every time the message has to be generated.
# we'll store our choice in a global hash with the message id as key
# to avoid being asked again and again 
$signature = {} unless $signature


## Logic
# ask for signature, if there is none stored for this message_id
signature_key = nil
unless $signature[message_id]
  # ensure signature_key is in signatures.keys
  until signatures.key? signature_key
    # use BufferManager's dialog function (compare lib/sup/buffer.rb)                  
    signature_key = BufferManager.ask_many_with_completions(
            :sign,           # token for BufferManager's sake.
            "#{prompt}: ",          # Prompt
            signatures.keys) # Array with posible completions
    # add help in case the first attempt was not successful
    prompt = "#{prompt} #{help}"
    # check for empty line and select default signature
    if signature_key  == ""
     signature_key = default
      break
    end
  end
 # store chosen signature in global variable for later reuse
  $signature[message_id] = signatures[signature_key]
end

# return chosen signature
$signature[message_id]
Clone this wiki locally