Config::Model::TermUI - Interactive command line interface for cme
Contents
Bugs
• Auto-completion is not complete.
• Auto-completion provides wrong choice when you try to "cd" in a hash where the index contains a white
space. I.e. the correct command is "cd foo:"a b"" instead of "cd foo: "a b"" as proposed by auto
completion.
Constructor
parameters
root
Root node of the configuration tree
title
UI title
prompt
UI prompt. The prompt will be completed with the location of the current node.
Copyright And License
This software is Copyright (c) 2005-2022 by Dominique Dumont.
This is free software, licensed under:
The GNU Lesser General Public License, Version 2.1, February 1999
perl v5.40.0 2024-11-30 Config::Model::TermUI(3pm)
Dependencies
This module is optional and depends on Term::ReadLine to work. To reduce the dependency list of
Config::Model, "Term::ReadLine" is only recommended. cme gracefully degrades to Config::Model::SimpleUI
when necessary.
Description
This module provides a helper to construct pure ASCII user interface on top of Term::ReadLine. To get
better interaction you must install either Term::ReadLine::Gnu or Term::ReadLine::Perl.
Depending on your installation, either Term::ReadLine::Gnu or Term::ReadLine::Perl is used. See
Term::ReadLine to override default choice.
Methods
run_loop
Engage in user interaction until user enters '^D' (CTRL-D).
Name
Config::Model::TermUI - Interactive command line interface for cme
See Also
Config::Model, Config::Model::Instance, Config::Model::Node,
Synopsis
use Config::Model;
use Config::Model::TermUI ;
# define configuration tree object
my $model = Config::Model->new;
$model->create_config_class(
name => "Foo",
element => [
[qw/foo bar/] => {
type => 'leaf',
value_type => 'string'
},
]
);
$model ->create_config_class (
name => "MyClass",
element => [
[qw/foo bar/] => {
type => 'leaf',
value_type => 'string'
},
hash_of_nodes => {
type => 'hash', # hash id
index_type => 'string',
cargo => {
type => 'node',
config_class_name => 'Foo'
},
},
],
) ;
my $inst = $model->instance(root_class_name => 'MyClass' );
my $root = $inst->config_root ;
# put data
my $steps = 'foo=FOO hash_of_nodes:fr foo=bonjour -
hash_of_nodes:en foo=hello ';
$root->load( steps => $steps );
my $ui = Config::Model::TermUI->new(
root => $root ,
title => 'My class ui',
prompt => 'class ui',
);
# engage in user interaction
$ui -> run_loop ;
print $root->dump_tree ;
Once the synopsis above has been saved in "my_test.pl", you can achieve the same interactions as with
"Config::Model::SimpleUI". Except that you can use TAB completion:
class ui:$ ls
foo bar hash_of_nodes
class ui:$ ll hash_of_nodes
name value type comment
hash_of_nodes <Foo> node hash keys: "en" "fr"
class ui:$ cd hash_of_nodes:en
class ui: hash_of_nodes:en $ ll
name value type comment
foo hello string
bar [undef] string
class ui: hash_of_nodes:en $ set bar=bonjour
class ui: hash_of_nodes:en $ ll
name value type comment
foo hello string
bar bonjour string
class ui: hash_of_nodes:en $ ^D
At the end, the test script dumps the configuration tree. The modified "bar" value can be found in there:
foo=FOO
hash_of_nodes:en
foo=hello
bar=bonjour -
hash_of_nodes:fr
foo=bonjour - -
User Command Syntax
See "USER COMMAND SYNTAX" in Config::Model::SimpleUI.
Version
version 2.155
