FIXED: the T (and t respectively) printed nothing out since 1.0.3! It does

it now again...
ADDED:          a new database backend added, NOTEDB::dbm, which uses DBM files for
                storage.
FIXED:          &display-tree returns now, if there is no note, otherwise it
                would die because of an undefined refernce.
CHANGED:        Changed the config file format completely. It is now no more a perl
                file, instead it is a simple plain text file which note parses.
CHANGED:        Changed the way, note loads it database backend. It uses now the
                $dbdriver variable as module-name, which makes it possible easily
                to write your own backend without the need to change note itself.
FIXED:          Removed Getopt::Long option "bundling", causes errors with perl
                5.6.0 and is not senceful.
FIXED:          Added the Getopt::Long option "no_ignore_case". In 1.0.4 options
                were case insensitive causing -i to be interpreted as --import
                instead of --interactive ;-(((
ADDED:          a new config option $DEFAULT_LIST, which causes note,  \
                if turned to "LONG", to use long-listing as default.    |
                But it will still be able to use short-listing if you   |
                explicit specify that.                                  |    submitted by
FIXED:          sub search prints now an appropriate error-message in   |==> Peter Palmreuther
                case no searchstring was given instead of jumping to    |    thanks a lot!
                usage.                                                  |
CHANGED:        Changed the text in the interactive help to reflect     |
                changes of verion 1.0.3 (t and T).                     /
This commit is contained in:
TLINDEN
2012-02-10 20:15:05 +01:00
parent 332db5a3dd
commit 9a2d07e0e0
8 changed files with 830 additions and 309 deletions

View File

@@ -1,5 +1,34 @@
================================================================================== ==================================================================================
1.0.5:
FIXED: the T (and t respectively) printed nothing out since 1.0.3! It does
it now again...
ADDED: a new database backend added, NOTEDB::dbm, which uses DBM files for
storage.
FIXED: &display-tree returns now, if there is no note, otherwise it
would die because of an undefined refernce.
CHANGED: Changed the config file format completely. It is now no more a perl
file, instead it is a simple plain text file which note parses.
CHANGED: Changed the way, note loads it database backend. It uses now the
$dbdriver variable as module-name, which makes it possible easily
to write your own backend without the need to change note itself.
FIXED: Removed Getopt::Long option "bundling", causes errors with perl
5.6.0 and is not senceful.
FIXED: Added the Getopt::Long option "no_ignore_case". In 1.0.4 options
were case insensitive causing -i to be interpreted as --import
instead of --interactive ;-(((
ADDED: a new config option $DEFAULT_LIST, which causes note, \
if turned to "LONG", to use long-listing as default. |
But it will still be able to use short-listing if you |
explicit specify that. | submitted by
FIXED: sub search prints now an appropriate error-message in |==> Peter Palmreuther
case no searchstring was given instead of jumping to | thanks a lot!
usage. |
CHANGED: Changed the text in the interactive help to reflect |
changes of verion 1.0.3 (t and T). /
==================================================================================
1.0.4: 1.0.4:
CHANGED: Moved from @ARGV-parsing to Getopt::Long, adding options is now CHANGED: Moved from @ARGV-parsing to Getopt::Long, adding options is now
much easier and I do now understand my own code ;-) much easier and I do now understand my own code ;-)

View File

@@ -23,6 +23,19 @@ sub chk_mod
print "\n"; print "\n";
} }
&chk_mod(
"Getopt::Long",
"WARNING: Getopt::Long seems not to be installed on your system!\n"
."But it is strongly required in order to run note!\n"
);
&chk_mod(
"DB_File",
"WARNING: DB_File seems not to be installed on your system!\n"
."It is required, if you want to use the DBM backend.\n"
);
&chk_mod( &chk_mod(
"DBI", "DBI",
" WARNING: module DBI is not installed on your system.\n" " WARNING: module DBI is not installed on your system.\n"
@@ -73,7 +86,7 @@ $install = `which install`;
open M, "> Makefile" || die $!; open M, "> Makefile" || die $!;
print M qq~BIN = bin/note print M qq~BIN = bin/note
LIBS = NOTEDB/mysql.pm NOTEDB/binary.pm LIBS = NOTEDB/mysql.pm NOTEDB/binary.pm NOTEDB/dbm.pm
INSTBIN = $BINDIR INSTBIN = $BINDIR
INSTLIB = $LIBDIR INSTLIB = $LIBDIR
INSTALL = $install INSTALL = $install

261
NOTEDB/dbm.pm Normal file
View File

@@ -0,0 +1,261 @@
#!/usr/bin/perl
# $Id: dbm.pm,v 1.1 2000/05/14 00:55:28 thomas Exp thomas $
# Perl module for note
# DBM database backend. see docu: perldoc NOTEDB::dbm
#
use DB_File;
#use Data::Dumper;
use strict;
package NOTEDB;
BEGIN {
# make sure, it works, although encryption
# not supported on this system!
eval { require Crypt::CBC; };
if($@) {
$NOTEDB::crypt_supported = 0;
}
else {
$NOTEDB::crypt_supported = 1;
}
}
# Globals:
my ($dbm_dir, $notefile, $timefile, $version, $cipher, %note, %date);
$notefile = "note.dbm";
$timefile = "date.dbm";
$version = "(NOTEDB::dbm, 1.1)";
sub new
{
my($this, $dbdriver, $dbm_dir) = @_;
my $class = ref($this) || $this;
my $self = {};
bless($self,$class);
tie %note, "DB_File", "$dbm_dir/$notefile" || die $!;
tie %date, "DB_File", "$dbm_dir/$timefile" || die $!;
return $self;
}
sub DESTROY
{
# clean the desk!
untie %note, %date;
}
sub version {
return $version;
}
sub no_crypt {
$NOTEDB::crypt_supported = 0;
}
sub use_crypt {
my($this, $key, $method) = @_;
if($NOTEDB::crypt_supported == 1) {
eval {
$cipher = new Crypt::CBC($key, $method);
};
if($@) {
$NOTEDB::crypt_supported == 0;
}
}
else{
print "warning: Crypt::CBC not supported by system!\n";
}
}
sub get_single
{
my($this, $num) = @_;
my($note, $date);
return ude ($note{$num}), ude($date{$num});
}
sub get_all
{
my($this, $num, $note, $date, %res, $real);
foreach $num (sort {$a <=> $b} keys %date) {
$res{$num}->{'note'} = ude($note{$num});
$res{$num}->{'date'} = ude($date{$num});
}
return %res;
}
sub get_nextnum
{
my($this, $num);
foreach (sort {$a <=> $b} keys %date) {
$num = $_;
}
$num++;
return $num;
}
sub get_search
{
my($this, $searchstring) = @_;
my($num, $note, $date, %res);
foreach $num (sort {$a <=> $b} keys %date) {
if (ude($note{$num}) =~ /$searchstring/i) {
$res{$num}->{'note'} = ude($note{$num});
$res{$num}->{'date'} = ude($date{$num});
}
}
return %res;
}
sub set_recountnums
{
my $this = shift;
my(%Note, %Date, $num, $setnum);
$setnum = 1;
foreach $num (sort {$a <=> $b} keys %note) {
$Note{$setnum} = $note{$num};
$Date{$setnum} = $date{$num};
$setnum++;
}
%note = %Note;
%date = %Date;
}
sub set_edit
{
my($this, $num, $note, $date) = @_;
$note{$num} = uen($note);
$date{$num} = uen($date);
}
sub set_new
{
my($this, $num, $note, $date) = @_;
$this->set_edit($num, $note, $date); # just the same thing
}
sub set_del
{
my($this, $num) = @_;
my($note, $date, $T);
($note, $date) = $this->get_single($num);
return "ERROR" if ($date !~ /^\d/);
delete $note{$num};
delete $date{$num};
}
sub set_del_all
{
my($this) = @_;
%note = ();
%date = ();
return;
}
sub uen
{
my($T);
if($NOTEDB::crypt_supported == 1) {
eval {
$T = pack("u", $cipher->encrypt($_[0]));
};
}
else {
$T = $_[0];
}
chomp $T;
return $T;
}
sub ude
{
my($T);
if($NOTEDB::crypt_supported == 1) {
eval {
$T = $cipher->decrypt(unpack("u",$_[0]))
};
return $T;
}
else {
return $_[0];
}
}
1; # keep this!
__END__
=head1 NAME
NOTEDB::dbm - module lib for accessing a notedb from perl
=head1 SYNOPSIS
# include the module
use NOTEDB;
# create a new NOTEDB object (the last 4 params are db table/field names)
$db = new NOTEDB("mysql","note","/home/user/.notedb/");
# get a single note
($note, $date) = $db->get_single(1);
# search for a certain note
%matching_notes = $db->get_search("somewhat");
# format of returned hash:
#$matching_notes{$numberofnote}->{'note' => 'something', 'date' => '23.12.2000 10:33:02'}
# get all existing notes
%all_notes = $db->get_all();
# format of returnes hash like the one from get_search above
# get the next noteid available
$next_num = $db->get_nextnum();
# recount all noteids starting by 1 (usefull after deleting one!)
$db->set_recountnums();
# modify a certain note
$db->set_edit(1, "any text", "23.12.2000 10:33:02");
# create a new note
$db->set_new(5, "any new text", "23.12.2000 10:33:02");
# delete a certain note
$db->set_del(5);
=head1 DESCRIPTION
You can use this module for accessing a note database. This is the dbm module.
It uses the DB_FILE module to store it's data and it uses DBM files for tis purpose.
Currently, NOTEDB module is only used by note itself. But feel free to use it
within your own project! Perhaps someone want to implement a webinterface to
note...
=head1 USAGE
please see the section SYNOPSIS, it says it all.
=head1 AUTHOR
Thomas Linden <tom@daemon.de>.
=cut

114
README
View File

@@ -1,5 +1,5 @@
note 1.0.4 by Thomas Linden, 12/05/2000 note 1.0.5 by Thomas Linden, 14/05/2000
=======================================
Introduction Introduction
============ ============
@@ -8,17 +8,7 @@ Introduction
perl, which allows you to manage notes similar perl, which allows you to manage notes similar
to programs like "knotes" from commandline. to programs like "knotes" from commandline.
This version is completely rewritten and it is There are currently three different database backends,
able to display colored output.
You can add, edit, list and delete as many notes
as you want. You can run note from the commandline
or interactive from within your console. You can
sort your notes in different topics, which is usefull
if you have a lot of them. Additional it is possible
to encrypt your notes for protection.
There are currently two different database backends,
which you can use with note: which you can use with note:
o NOTEDB::binary - this is the default backend o NOTEDB::binary - this is the default backend
and uses a binary file to store your notes. and uses a binary file to store your notes.
@@ -27,6 +17,66 @@ Introduction
easily to another DBMS since this module uses easily to another DBMS since this module uses
the Perl standard module "DBI" for database- the Perl standard module "DBI" for database-
access. See below for more info on this topic! access. See below for more info on this topic!
o NOTEDB::dbm - this module uses two DBM files
for data storage and requires the module DB_FILE,
which is part of the perl standard distribution.
See below for more details about the DBM module.
Where to get?
=============
By now at
http://www.daemon.de/software.html
or
ftp://www.0c49.org/pub/scip/note/
You may also try your nearest tucows mirror.
Features
========
o Three different database backends, mysql(DBI), dbm, binary(bin file).
o Commandline interface using the standard perl module
Getopt::Long, which allows you to use short or long
command-line options.
o Interactive interface(pure ascii), the following functions
are available in interactive mode: list, display, topic,
delete, edit, help.
o Highly confiurable using a perlish configfile ~/.noterc.
although it is configurable it is not required, note can
run without a configfile using useful default presets.
o Colourized output is supported using ASCII Escape-Sequences.
o The user can customize the color for each item.
o Data can be stored in various different database backends,
since all database access is excluded from the program itself
in perl modules.
o Notes can be deleted, edited and you can search trough your notes.
o Notes can be categorized. Each category(topic) can contain multiple
notes and even more sup-topics. There is no limitation about
sub topics.
o You can view all notes in a list and it is possible only to view
notes under a certain topic.
o There is a tree-view, which allows you to get an overview of your
topic-hierarchy.
o Notes can be encrypted using DES or IDEA algorythms and Crypt::CBC.
o You can dump the contents of your note database into a plain text
file, which can later be imported. Imports can be appended or it can
overwrite an existing database (-o).
o Note has scripting capabilities, you can create a new note by piping
another commands output to note, you can also import a notedump from
stdin as well es duming to stdout instead a file. Additional, there
is an option --raw available, which prints everything out completely
without formatting.
o It can be installed without root-privileges.
o Last, a while ago a user stated: "... it simply does, what it says ..."
Requirements Requirements
@@ -39,7 +89,8 @@ Requirements
you want to use the binary database backend. you want to use the binary database backend.
o DBI module and DBI::mysql if you want to use the o DBI module and DBI::mysql if you want to use the
mysql database backend. mysql database backend.
o Getopt::Long o The module DB_FILE if you want to use the DBM module.
o Getopt::Long (part of perl std ditribution)
@@ -59,11 +110,17 @@ Installation
see mysql/README. see mysql/README.
If want to use another SQL database, i.e. postgresql then set If want to use another SQL database, i.e. postgresql then set
the option "$DRIVER" to the name of the responding DBI-driver the option "DbDriver" to the name of the responding DBI-driver
and create a symlink of this name like this: and create a symlink of this name like this:
/usr/lib/perl5/siteperl/NOTEDB $ ln -s mysql.pm oracle.pm /usr/lib/perl5/siteperl/NOTEDB $ ln -s mysql.pm oracle.pm
The functionality is the same, but not the name! The functionality is the same, but not the name!
The default binary file backend does not need any special installation
procedure, you need only to spceify a filename in your config file.
The DBM backend(NOTEDB::dbm) requires the existence of a directory,
which you must specify in your config using the option "DbName".
Configuration Configuration
@@ -154,8 +211,8 @@ Usage
What the hell, does it?! Step by step: What the hell, does it?! Step by step:
o "note -D -" creates a note-database dump and prints it out o "note -D -" creates a note-database dump and prints it out
to stantdard output. to stantdard output.
o "|" this is the shell's pipe command. It does take the output o "|" this is the shell's pipe command. It takes the output
of the left program and gives it to the right progrem as standard of the left program and gives it to the right program as standard
input. input.
o "note -o -I -" imports a note-database dump from standard input o "note -o -I -" imports a note-database dump from standard input
and overwrites an existing database. and overwrites an existing database.
@@ -172,7 +229,7 @@ Topics
field for the topic. Instead the topic will be stored right in the field for the topic. Instead the topic will be stored right in the
note. note.
If the first line of your note contains some text bordered by slashes If the first line of your note contains some text bordered by slashes
(or whatever you prefer, set $TopicSep in your config! default is slash), (or whatever you prefer, set "TopicSeparator" in your config! default is slash),
then note will consider it as the topic of this certain note. For examle: then note will consider it as the topic of this certain note. For examle:
/TodoList/ /TodoList/
If you are using topics, no data after the topic is allowed, if there If you are using topics, no data after the topic is allowed, if there
@@ -187,7 +244,7 @@ Topics
will prepend the string "/topicname/" to the text of your note). will prepend the string "/topicname/" to the text of your note).
You can create at any time from any point a new topic. Just create a new You can create at any time from any point a new topic. Just create a new
note and type the name of the new topic bordered by slashes (or $TopicSep) note and type the name of the new topic bordered by slashes (or TopicSeparator)
at the first line of this note. After saving, there will be available a at the first line of this note. After saving, there will be available a
new topic with one note in it. new topic with one note in it.
@@ -258,7 +315,7 @@ Scripting
If the variable is present, note will not ask you for a passphrase! If the variable is present, note will not ask you for a passphrase!
Another thingy you might find useful is the -r (--raw) command-line flag. This Another thingy you might find useful is the -r (--raw) command-line flag. This
turns note into raw mode being silent, which means it will only print the turns note into raw mode , which means it will only print the
data without any formatting. Raw mode is available for list and display, data without any formatting. Raw mode is available for list and display,
since it makes no sense, interactive mode doe not support raw mode. since it makes no sense, interactive mode doe not support raw mode.
@@ -336,7 +393,7 @@ Security
the permission 0600 of the file "~/.notedb" is strongly required! the permission 0600 of the file "~/.notedb" is strongly required!
Additional, you can turn on encryption from the config file. Additional, you can turn on encryption from the config file.
Simply set $USE_CRYPT to "YES". Please note, that you need Simply set UseEncryption to 1. Please note, that you need
to decide, if you want to use encryption before the first use to decide, if you want to use encryption before the first use
of note! If have already a note database and want to "migrate" of note! If have already a note database and want to "migrate"
to encryption, I suggest you to follow the directions in the to encryption, I suggest you to follow the directions in the
@@ -411,7 +468,20 @@ Author and Copyright
Contributors / Credits
======================
Shouts to those guys who helped me to enhance note: THANKS A LOT!
Jens Heunemann <jens.heunemann@consol.de> - sub tree.
Peter Palmreuther - various additions.
And many other people who sended bug reports, feature requests. If you feel that
I forgot your name in this list, then please send me an email and I'll add you.
Last changed Last changed
============ ============
12/05/2000 14/05/2000

23
UPGRADE
View File

@@ -1,3 +1,26 @@
1.0.5 important note upgrade information
========================================
If you are upgrading from previous versions of note, you
will need to create a new config file, since the format of
that file has completely changed!
Take a look at the sample in config/noterc for details.
note will NOT work with an existing database and an old config.
You have to create a new config based on your old settings.
Please don't forget to make a backup of your database before
upgrading! I am not responsible for data loss!
I told ya...
Thomas Linden <tom@daemon.de>
READ THIS FILE, IF YOU ARE UPGRADING FROM 0.9 TO 1.0.x READ THIS FILE, IF YOU ARE UPGRADING FROM 0.9 TO 1.0.x
====================================================== ======================================================

View File

@@ -1 +1 @@
1.0.4 1.0.5

516
bin/note
View File

@@ -1,191 +1,164 @@
#!/usr/bin/perl #!/usr/bin/perl
# $Author: thomas $ $Id: note,v 1.24 2000/05/10 22:59:44 thomas Exp thomas $ $Revision: 1.24 $ # $Id: note,v 1.26 2000/05/13 01:05:17 thomas Exp thomas $
# #
# $Log: note,v $
# Revision 1.24 2000/05/10 22:59:44 thomas
# updated usage to reflect --raw and build it into output
# and display subs.
# #
# Revision 1.23 2000/05/10 22:19:04 thomas # note - console notes management with database and encryption support.
# changed to Getopt::Long, added --raw # Copyright (C) 1999-2000 Thomas Linden (see README for details!)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# #
# Revision 1.22 2000/05/01 18:51:40 thomas # You should have received a copy of the GNU General Public License
# added "-" to sub dump # along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# #
# Revision 1.21 2000/05/01 00:17:27 thomas # - Thomas Linden <tom@daemon.de>
# *** empty log message ***
# #
# Revision 1.20 2000/04/30 23:31:38 thomas # latest version on:
# added -o and coloured sub help. # http://www.daemon.de/software.html
# ftp://www.0x49.org/pub/scip/note/
# #
# Revision 1.19 2000/04/30 16:07:23 thomas
# *** empty log message ***
#
# Revision 1.18 2000/04/30 14:58:21 thomas
# updated the usage and help subs
#
# Revision 1.17 2000/04/30 14:44:38 thomas
# added colors to the tree functions
#
# Revision 1.16 2000/04/30 14:28:38 thomas
# added the t command, which displays a topic-tree.
# and enhanced the list command in interactive mode
#
# Revision 1.15 2000/03/19 23:41:04 thomas
# changed set_del, now no extra TEMP file is required!
# instead I get it from $this->get_all() !
#
# Revision 1.14 2000/03/19 22:51:49 thomas
# Bug in NOTEDB::binary fixed, recount of nubers was
# incorrect.
#
# Revision 1.13 2000/03/19 11:53:32 thomas
# edit bug fixed (ude => uen)
#
# Revision 1.12 2000/03/19 03:06:51 thomas
# backend support completed.
# mysql and binary backends now excluded in separate files
#
# Revision 1.11 2000/03/18 00:16:47 thomas
# added NOTEDB::mysql and changed note to work with that.
# thus, from now on there is only one script to maintain and
# it is possible to provide more bacjends as well as making
# additional scripts upon them, i.e. cgi script...
#
# Revision 1.8 2000/03/13 22:48:43 thomas
# small width bug fixed
#
# Revision 1.7 2000/03/08 23:11:19 tom
# added cd
#
# Revision 1.6 2000/03/08 22:50:41 tom
# Added the $KEEP_TIMESTAMP option and fixed a bug regarding topic names
# and invalid resolution of them in case it started with "1 name".
#
# Revision 1.5 2000/02/25 20:59:30 tom
# corrected small timestamp problem in &edit and &new
#
# Revision 1.4 2000/02/25 13:24:11 tom
# fixed a small bug, that caused to use the last line for a note title instead the 2nd.
#
# Revision 1.3 2000/02/25 11:28:53 tom
# all changes from bin version applied to sql version
#
# Revision 1.2 2000/02/25 10:30:06 tom
# *** empty log message ***
#
#
# this is the small console program "note"
# It works similar to some well known GUI note programs,
# but instead of using X11 it uses the UN*X console.
# You can edit existing notes, delete them, create new
# ones and, of course display them.
# The notes will be stored in a mysql database. Refer to
# the README of the desitribution for details about
# installation.
# It requires a configfile named .noterc in the users home.
# If it does not exist, note will create one for you, which
# you will have to edit.
#
# If you find it usefull or find a bug, please let me know:
# Thomas Linden <tom@daemon.de>
#
# note is GPL software.
use strict; use strict;
#use Data::Dumper; #use Data::Dumper;
use Getopt::Long; use Getopt::Long;
sub usage; #
sub find_editor; # prototypes
sub output; #
sub C; sub usage; # print usage message for us thumb userz :-)
sub uen; sub find_editor; # returns an external editor for use
sub ude; sub output; # used by &list and &display
sub num_bereich; sub C; # print colourized
sub getdate; sub num_bereich; # returns array from "1-4" (1,2,3,4)
sub getdate; # return pretty formatted day
sub new; # crate new note
sub edit; # edit a note
sub del; # delete a note
sub display; # display one or more notes
sub list; # note-listing
sub help; # interactive help screen
sub import; # import from notedb-dump
sub display_tree; # show nice tree-view
sub tree; # build the tree
sub print_tree; # print the tree, contributed by Jens Heunemann <Jens.Heunemann@consol.de>. THX!
sub new;
sub edit;
sub del;
sub display;
sub list;
sub help;
sub import;
sub display_tree;
sub tree;
sub print_tree;
#
# globals
#
my ( my (
$maxlen, $timelen, $TOPIC, $TYPE, $mode, $NOTEDB, $NoteKey, $ImportType, $NewType, #
$version, $number, $CurTopic, $CurDepth, $PATH, $CONF, $WantTopic, # commandline options
$sizeof, $MAX_TIME, $PreferredEditor, %TP, $TopicSep, #
$TreeType, $ListType, $searchstring, $dump_file, $ALWAYS_INT, $KEEP_TIMESTAMP, $opt_, $opt_i, $opt_r, $opt_e, $opt_d,
$BORDERC, $BORDER_COLOR, $_BORDERC, $NOTEC, $NOTE_COLOR, $opt_s, $opt_t, $opt_T, $opt_l, $opt_L,
$NUMC, $NUM_COLOR, $_NUMC, $_NOTEC, $TIMEC, $TIME_COLOR, $opt_D, $opt_I, $opt_o, $opt_h, $opt_n, $opt_v,
$_TIMEC, $TOPICC, $TOPIC_COLOR, $_TOPICC, $SetTitle, $COLOR,
$typedef, $MAX_NOTE, $MAX_TIME, @NumBlock, $ALWAYS_EDIT, $HOME, $has_nothing, #
$db, $dbname, $dbhost, $DEFAULTDBNAME, $dbuser, $USER, $dbpasswd, # set from commandline (or interactive)
$table, $fnum, $fnote, $fdate, $date, $dbdriver, $libpath, $db, @ArgTopics, $Raw, #
$USE_CRYPT, $CRYPT_METHOD, $key, $number, $searchstring, $dump_file, $ImportType, $NewType, $Raw,
$opt_, $opt_i, $opt_r, $opt_e, $opt_d, $opt_s,
$opt_t, $opt_T, $opt_l, $opt_L, $opt_D, $opt_I, #
$opt_o, $opt_h, $opt_n, $opt_v # options from config file .noterc
#
$maxlen, $timelen, $TOPIC, $NOTEDB, $MAX_TIME, $PreferredEditor,
$ALWAYS_INT, $KEEP_TIMESTAMP, $COLOR, $ALWAYS_EDIT, $HOME,
$BORDER_COLOR, $NOTE_COLOR, $NUM_COLOR, $TOPIC_COLOR, $MAX_NOTE,
$USE_CRYPT, $CRYPT_METHOD, $TopicSep, $DEFAULT_LIST, $TIME_COLOR,
#
# db specifics from .noterc
#
$db, $dbname, $dbhost, $dbuser, $dbpasswd,
$table, $fnum, $fnote, $fdate, $date, $dbdriver, $libpath,
#
# processed colors
#
$BORDERC, $_BORDERC, $NOTEC, $NUMC, $_NUMC, $_NOTEC, $TIMEC,
$_TIMEC, $TOPICC, $_TOPICC,
#
# config presets
#
$DEFAULTDBNAME, $USER, $PATH, $CONF,
#
# internals
#
$TYPE, $mode, $NoteKey,
$version, $number, $CurTopic, $CurDepth, $WantTopic,
$sizeof, %TP, $TreeType, $ListType, $SetTitle,
@ArgTopics, $key, $typedef, @NumBlock, $has_nothing,
); );
####################################################################
# DEFAULTS, allows one to use note without a config ################ #
# don't change them, instead use the config file! ################ # DEFAULTS, allows one to use note without a config
#################################################################### # don't change them, instead use the config file!
$maxlen = 30; #
$timelen = 22; $maxlen = 30;
$date = &getdate; $timelen = 22;
$USER = getlogin || getpwuid($<); $date = &getdate;
$USER = getlogin || getpwuid($<);
chomp $USER; chomp $USER;
$HOME = $ENV{'HOME'}; $HOME = $ENV{'HOME'};
$CONF = $HOME . "/.noterc"; $CONF = $HOME . "/.noterc";
$dbdriver = "binary"; $dbdriver = "binary";
$libpath = "/usr/local/lib"; $libpath = "/usr/local/lib";
$NOTEDB = $HOME . "/.notedb"; $NOTEDB = $HOME . "/.notedb";
$MAX_NOTE = 4096; $MAX_NOTE = 4096;
$MAX_TIME = 64; $MAX_TIME = 64;
$COLOR = "YES"; $COLOR = "YES";
$BORDER_COLOR = "BLACK"; $BORDER_COLOR = "BLACK";
$NUM_COLOR = "blue"; $NUM_COLOR = "blue";
$NOTE_COLOR = "green"; $NOTE_COLOR = "green";
$TIME_COLOR = "black"; $TIME_COLOR = "black";
$TOPIC_COLOR = "BLACK"; $TOPIC_COLOR = "BLACK";
$TOPIC = 1; $TOPIC = 1;
$TopicSep = '/'; $TopicSep = '/';
$version = "1.0.4"; $version = "1.0.5";
if($TOPIC) if($TOPIC)
{ {
$CurDepth = 1; # the current depth inside the topic "directory" structure... $CurDepth = 1; # the current depth inside the topic "directory" structure...
} }
$USE_CRYPT = "NO"; $USE_CRYPT = "NO";
####################################################################
#
# process command line args # process command line args
#
if($ARGV[0] eq "") if($ARGV[0] eq "")
{ {
$mode = "new"; $mode = "new";
} }
elsif($#ARGV == 0 && $ARGV[0] eq "-") { elsif($#ARGV == 0 && $ARGV[0] eq "-") {
$mode = "new"; $mode = "new";
$NewType = 1; $NewType = 1; # read from STDIN until EOF
shift; shift;
undef $has_nothing; undef $has_nothing;
} }
else else
{ {
Getopt::Long::Configure( qw(bundling)); # allow -lr Getopt::Long::Configure( qw(no_ignore_case));
GetOptions ( GetOptions (
"interactive|i!" => \$opt_i, # no arg "interactive|i!" => \$opt_i, # no arg
"raw|r!" => \$opt_r, # no arg "raw|r!" => \$opt_r, # no arg
"edit|e=i" => \$opt_e, # integer, required "edit|e=i" => \$opt_e, # integer, required
"delete|d=s" => \$opt_d, # integer, required "delete|d=s" => \$opt_d, # integer, required
"search|s=s" => \$opt_s, # string, required "search|s=s" => \$opt_s, # string, required
"tree|t!" => \$opt_t, # no arg "tree|topic|t!" => \$opt_t, # no arg
"long_tree|T!" => \$opt_T, # no arg "long_tree|T!" => \$opt_T, # no arg
"list|l:s" => \$opt_l, # string, optional "list|l:s" => \$opt_l, # string, optional
"long_list|L:s" => \$opt_L, # string, optional "long_list|L:s" => \$opt_L, # string, optional
@@ -198,7 +171,9 @@ else
$opt_n = shift; # after that @ARGV contains eventually $opt_n = shift; # after that @ARGV contains eventually
# a note-number # a note-number
# $opt_ is a single dash, in case of existence! # $opt_ is a single dash, in case of existence!
#
# determine mode # determine mode
#
if($opt_i) { if($opt_i) {
$mode = "interactive"; $mode = "interactive";
} }
@@ -305,10 +280,10 @@ if($has_nothing && $mode eq "")
} }
# open the configfile. # read the configfile.
if(-e $CONF) if(-e $CONF)
{ {
eval `cat $CONF`; &getconfig($CONF);
} }
@@ -318,29 +293,40 @@ if($ALWAYS_INT eq "YES" && $mode ne "dump" && $mode ne "import")
$mode = "interactive"; $mode = "interactive";
} }
# OK ... Long-Listing shall be default ... You wanted it!!!
if($DEFAULT_LIST eq "LONG")
{
# takes only precedence in commandline mode
$ListType="LONG";
}
# *if* loading of the config was successful, try to load the # *if* loading of the config was successful, try to load the
# configured database backend. Currently supported: mysql and binary. # configured database backend. Currently supported: mysql and binary.
push @INC, $libpath; push @INC, $libpath;
if($dbdriver eq "mysql") { #if($dbdriver eq "mysql") {
eval { # eval {
require NOTEDB::mysql; # require NOTEDB::mysql;
$db = new NOTEDB($dbdriver, $dbname, $dbhost, $dbuser, $dbpasswd, $table, $fnum, $fnote, $fdate); # $db = new NOTEDB($dbdriver, $dbname, $dbhost, $dbuser, $dbpasswd, $table, $fnum, $fnote, $fdate);
} # }
} #}
elsif($dbdriver eq "binary") { if($dbdriver eq "binary") {
eval { eval {
require NOTEDB::binary; require NOTEDB::binary;
$db = new NOTEDB($dbdriver, $NOTEDB, $MAX_NOTE, $MAX_TIME, $dbdriver); $db = new NOTEDB($dbdriver, $NOTEDB, $MAX_NOTE, $MAX_TIME, $dbdriver);
} }
} }
else { else {
print "Unsupported database backend: NOTEDB::$dbdriver!\n"; eval {
exit 1; require "NOTEDB/$dbdriver.pm";
$db = new NOTEDB($dbdriver, $dbname, $dbhost, $dbuser, $dbpasswd, $table, $fnum, $fnote, $fdate);
};
} }
if($@) { if($@) {
print "backend-error: " . $@; print "Unsupported database backend: NOTEDB::$dbdriver!\n";
exit 1; print "The following error has occured:\n------------------------\n" . $@ . "\n------------------------\n";
exit 1;
} }
# add the backend version to the note version: # add the backend version to the note version:
@@ -490,28 +476,28 @@ sub display
############################### SEARCH ################################## ############################### SEARCH ##################################
sub search sub search
{ {
my($n,$match,$note,$date,$num,%res); my($n,$match,$note,$date,$num,%res);
$maxlen += $timelen; $maxlen += $timelen;
if($searchstring eq "") if($searchstring eq "")
{ {
&usage; print "No searchstring specified!\n";
} }
print "searching the database $dbname for \"$searchstring\"...\n\n"; else {
print "searching the database $dbname for \"$searchstring\"...\n\n";
%res = $db->get_search($searchstring); %res = $db->get_search($searchstring);
foreach $num (sort { $a <=> $b } keys %res) foreach $num (sort { $a <=> $b } keys %res)
{ {
output($num, $res{$num}->{'note'}, $res{$num}->{'date'}); output($num, $res{$num}->{'note'}, $res{$num}->{'date'});
$match = 1; $match = 1;
} }
if(!$match)
{
if(!$match) print "no matching note found!\n";
{ }
print "no matching note found!\n"; print "\n";
} }
print "\n";
} }
@@ -872,7 +858,8 @@ sub import
sub interactive sub interactive
{ {
my($maxlen_save, $B, $BB, $menu, $char, @LastTopic); my($maxlen_save, $B, $BB, $menu, $char, @LastTopic, $Channel);
$Channel = $|;
$maxlen_save = $maxlen; $maxlen_save = $maxlen;
# create menu: # create menu:
$B = "<blackI>"; $B = "<blackI>";
@@ -889,7 +876,7 @@ sub interactive
. $B . "Q" . $BB . "-Quit] "; # $CurTopic will be empty if $TOPIC is off! . $B . "Q" . $BB . "-Quit] "; # $CurTopic will be empty if $TOPIC is off!
# per default let's list all the stuff: # per default let's list all the stuff:
# Initially do a list command! # Initially do a list command!
$maxlen += $timelen; $maxlen += $timelen if($DEFAULT_LIST ne "LONG");
print "\n"; print "\n";
&list; &list;
undef $SetTitle; undef $SetTitle;
@@ -927,8 +914,13 @@ sub interactive
{ {
# list # list
print "\n"; print "\n";
$ListType = ""; if($DEFAULT_LIST eq "LONG" && $char =~ /^$/) {
$maxlen += $timelen; $ListType = "LONG";
}
else {
$ListType = "";
$maxlen += $timelen;
}
&list; &list;
undef $SetTitle; undef $SetTitle;
} }
@@ -994,11 +986,13 @@ sub interactive
elsif($char =~ /^q$/i) elsif($char =~ /^q$/i)
{ {
# schade!!! # schade!!!
print "\n\ngood bye\n"; $| = $Channel;
print "\n\ngood bye!\n";
exit(0); exit(0);
} }
elsif($char =~ /^t$/) elsif($char =~ /^t$/)
{ {
$TreeType = "";
&display_tree; &display_tree;
} }
elsif($char =~ /^T$/) elsif($char =~ /^T$/)
@@ -1092,7 +1086,7 @@ Options:
which causes note, silently to read in a dump from STDIN. which causes note, silently to read in a dump from STDIN.
-o --overwrite only suitable for use with --Import. Overwrites an -o --overwrite only suitable for use with --Import. Overwrites an
existing notedb. existing notedb.
-r --raw raw mode, out will not be formatted. Works not in interactive -r --raw raw mode, output will not be formatted. Works not in interactive
mode, only on cmd-line for list and display. mode, only on cmd-line for list and display.
-i --interactive interactive mode -i --interactive interactive mode
- if you run note only with one dash: "note -", then it will - if you run note only with one dash: "note -", then it will
@@ -1103,8 +1097,8 @@ Options:
number will be displayed. number will be displayed.
o you can specify more then one number for delete and display, for example: o you can specify more then one number for delete and display, for example:
"note -d 3,4" deletes #3 and #4. "note 5-7" displays #5, #6 and #7. "note -d 3,4" deletes #3 and #4. "note 5-7" displays #5, #6 and #7.
o if you run note without any parameter and if \$ALWAYS_INT in the config is o if you run note without any parameter and if "AlwaysInteractive" in the config
not set, then note will create a new note and prompt you for new text. set off, then note will create a new note and prompt you for new text.
o If it finds \~/.noterc, it will process it. Refer to the manpage for more o If it finds \~/.noterc, it will process it. Refer to the manpage for more
informations about the configuration. informations about the configuration.
o In interactive mode you can get help at any time by typing "?" or "h" at o In interactive mode you can get help at any time by typing "?" or "h" at
@@ -1308,20 +1302,6 @@ sub C
} }
sub uen
{
my($T);
$T = pack("u", $_[0]);
chomp $T;
return $T;
}
sub ude
{
my($T);
$T = unpack("u", $_[0]);
return $T;
}
sub num_bereich sub num_bereich
{ {
@@ -1431,7 +1411,7 @@ $T print a list of all existing topics as a tree. T prints the tree
} }
print C qq~ print C qq~
$NOTEC $NOTEC
All commands except the List command are case insensitive. $_NOTEC $BORDERC All commands except the List and Topic commands are case insensitive. $_NOTEC $BORDERC
----------------------------------------------------------------------$_BORDERC ----------------------------------------------------------------------$_BORDERC
~; ~;
} }
@@ -1459,10 +1439,10 @@ sub display_tree {
} }
&tree($num, $text, \%TREE, @nodes); &tree($num, $text, \%TREE, @nodes);
} }
#return if ($num == 0);
# now that we have build our tree (in %TREE) go on t display it: # now that we have build our tree (in %TREE) go on t display it:
print C $BORDERC . "\n[" . $TopicSep . $BORDERC . "]\n"; print C $BORDERC . "\n[" . $TopicSep . $BORDERC . "]\n";
&print_tree(\%{$TREE{''}},""); &print_tree(\%{$TREE{''}},"") if(%TREE);
print C $BORDERC . $_BORDERC . "\n"; print C $BORDERC . $_BORDERC . "\n";
} }
@@ -1506,3 +1486,135 @@ sub print_tree {
} }
} }
sub getconfig
{
my($configfile) = @_;
my ($home, $value, $option);
# checks are already done, so trust myself and just open it!
open CONFIG, "<$configfile" || die $!;
while(<CONFIG>) {
chomp;
next if(/^\s*$/ || /^\s*#/);
my ($option,$value) = split /\s\s*/, $_, 2;
$value =~ s/\s*$//;
$home = $value if (/^Home/);
$libpath = $value if (/^LibPath/);
$dbdriver = $value if (/^DbDriver/);
$dbhost = $value if (/^DbHost/);
$dbuser = $value if (/^DbUser/);
$dbpasswd = $value if (/^DbPasswd/);
$dbname = $value if (/^DbName/);
$table = $value if (/^DbTable/);
$fnum = $value if (/^FieldNumber/);
$fnote = $value if (/^FieldNote/);
$fdate = $value if (/^FieldDate/);
$NOTEDB = $value if (/^NoteDb/);
$MAX_NOTE = $value if (/^MaxNoteByte/);
$MAX_TIME = $value if (/^MaxTimeByte/);
$USE_CRYPT = "YES" if (/^UseEncryption/ && $value == 1);
$CRYPT_METHOD = $value if (/^CryptMethod/);
$ALWAYS_INT = "YES" if (/^AlwaysInteractive/ && $value == 1);
$DEFAULT_LIST = "LONG" if (/^DefaultLong/ && $value == 1);
$ALWAYS_EDIT = "YES" if (/^AlwaysEditor/ && $value == 1);
$KEEP_TIMESTAMP = "YES" if (/^KeepTimeStamp/ && $value == 1);
$TopicSep = $value if (/^TopicSeparator/);
$maxlen = $value if (/^MaxLen/);
$COLOR = "YES" if (/^UseColors/ && $value == 1);
$BORDER_COLOR = $value if (/^BorderColor/);
$NUM_COLOR = $value if (/^NumberColor/);
$NOTE_COLOR = $value if(/^NoteColor/);
$TIME_COLOR = $value if (/^TimeColor/);
$TOPIC_COLOR = $value if (/^TopicColor/);
}
chomp $home;
$home =~ s/\/*$//;
$HOME = eval($home);
if($NOTEDB =~ /^(~\/)(.*)$/) {
$NOTEDB = "/home/" . $USER . "/" . $2;
}
$libpath =~ s/\/*$//;
close CONFIG;
}
__END__
#
# $Log: note,v $
# Revision 1.26 2000/05/13 01:05:17 thomas
# changed config format and fixed some bugs
# as well as some other additions...
#
# Revision 1.25 2000/05/11 23:42:43 thomas
# --tree changed to --topic
#
# Revision 1.24 2000/05/10 22:59:44 thomas
# updated usage to reflect --raw and build it into output
# and display subs.
#
# Revision 1.23 2000/05/10 22:19:04 thomas
# changed to Getopt::Long, added --raw
#
# Revision 1.22 2000/05/01 18:51:40 thomas
# added "-" to sub dump
#
# Revision 1.21 2000/05/01 00:17:27 thomas
# *** empty log message ***
#
# Revision 1.20 2000/04/30 23:31:38 thomas
# added -o and coloured sub help.
#
# Revision 1.19 2000/04/30 16:07:23 thomas
# *** empty log message ***
#
# Revision 1.18 2000/04/30 14:58:21 thomas
# updated the usage and help subs
#
# Revision 1.17 2000/04/30 14:44:38 thomas
# added colors to the tree functions
#
# Revision 1.16 2000/04/30 14:28:38 thomas
# added the t command, which displays a topic-tree.
# and enhanced the list command in interactive mode
#
# Revision 1.15 2000/03/19 23:41:04 thomas
# changed set_del, now no extra TEMP file is required!
# instead I get it from $this->get_all() !
# Revision 1.14 2000/03/19 22:51:49 thomas
# Bug in NOTEDB::binary fixed, recount of nubers was
# incorrect.
#
# Revision 1.13 2000/03/19 11:53:32 thomas
# edit bug fixed (ude => uen)
#
# Revision 1.12 2000/03/19 03:06:51 thomas
# backend support completed.
# mysql and binary backends now excluded in separate files
#
# Revision 1.11 2000/03/18 00:16:47 thomas
# added NOTEDB::mysql and changed note to work with that.
# thus, from now on there is only one script to maintain and
# it is possible to provide more bacjends as well as making
# additional scripts upon them, i.e. cgi script...
#
# Revision 1.8 2000/03/13 22:48:43 thomas
# small width bug fixed
#
# Revision 1.7 2000/03/08 23:11:19 tom
# added cd
#
# Revision 1.6 2000/03/08 22:50:41 tom
# Added the $KEEP_TIMESTAMP option and fixed a bug regarding topic names
# and invalid resolution of them in case it started with "1 name".
#
# Revision 1.5 2000/02/25 20:59:30 tom
# corrected small timestamp problem in &edit and &new
#
# Revision 1.4 2000/02/25 13:24:11 tom
# fixed a small bug, that caused to use the last line for a note title instead the 2nd.
#
# Revision 1.3 2000/02/25 11:28:53 tom
# all changes from bin version applied to sql version

View File

@@ -1,130 +1,143 @@
# 1.0.0 # 1.0.5 -*- sh -*-
# This is a sample config for the note script # This is a sample config for the note script
# There are usefully defaults set in note itself. # There are useful defaults set in note itself.
# #
# The default database backend is NOTEDB::binary.
#
# Copy it to your $HOME as .noterc # Copy it to your $HOME as .noterc
#
# This config has to be valid perl code. Therefore
# please be careful!
# #
# note is Copyright (c) 1999-2000 Thomas Linden.
# You can contact me per email: <tom@daemon.de> # You can contact me per email: <tom@daemon.de>
# #
# Thomas Linden, 18/04/2000 # comments start with #, empty lines will be ignored.
# 1 turns an option on, 0 turns it off.
# An option consists of an atribute-value pair separated
# by minimum one space (more spaces and/or tabs are allowed)
# Your home, better do not change it! # Your home directory, better do not change it!
$HOME = $ENV{'HOME'}; # can be an environment variable or a path
Home $ENV{'HOME'}
# specify the path, where the NOTEDB directory # specify the path, where the NOTEDB lib directory
# resides. This will only used if it is not # resides. This will only used if it is not
# installed inside the perl-lib directory structure! # installed inside the perl-lib directory structure!
$libpath = "/usr/local/lib"; LibPath /usr/local/lib
# you need to decide which database backend you want # you need to decide which database backend you want
# to use. Please refer to the corresponding documentation # to use. Please refer to the corresponding documentation
# for closer information about the certain backend! # for closer information about the certain backend!
# Currently supported types: "binary" or "mysql". # Currently supported types: "binary", "dbm" or "mysql".
$dbdriver = "binary"; # You must also edit/uncomment one section below for the
# backend you want to use!
DbDriver binary
# backend specific settings: # backend specific settings for sql backend
####### mysql ############### #DbHost localhost
# sql database settings. #DbUser you
$dbhost = ""; # mysql server (hostname) #DbPasswd
$dbuser = ""; # mysql username #DbName mynotes
$dbpasswd = ""; # her password #DbTable note
$dbname = ""; # database name #FieldNumber number
$table = "note"; # Table and field names. #FieldNote note
$fnum = "number"; #FieldDate date
$fnote = "note"; #### specific end ###
$fdate = "date";
######## end mysql ###########
####### binary db ################## # backend specific settings for binary(default) backend
# The location of the note-database. If it does NoteDb ~/.notedb
# not exist, it will be created. Only if $driver = "binary" # Define the maximum bytes fields can have in a
$NOTEDB = $HOME . "/.notedb"; # note-entry. Do not change MaxTimeByte to less than 64!
# Define the maximum bytes a note can have in a
# note-entry.
$MAX_NOTE = 4096;
# Define the maximum bytes a timestamp can have MaxNoteByte 4096
# in a note-entry. MaxTimeByte 64
$MAX_TIME = 64; #### specific end ###
####### end binary #################
# ENCRYPTION # backend specific settings for DBM backend
# if you want to encrypt your note-data, turn this on # this must be an existing directory!
# by setting to "YES". The default is no. #DbName /home/you/.notedbm
# if turned on, note will ask you for a passphrase #### specific end ###
$USE_CRYPT = "NO";
# takes only affect if $USE_CRYPT is on! # You can use encryption with note, that means notes and
# Possible values: IDEA or DES # timestamps will be stored encrypted. This is supported
$CRYPT_METHOD = "IDEA"; # requires Crypt::IDEA # by every db-backend.
# Set to 1 to turn it on. The Default is 0 (off)
UseEncryption 0
# Specify the encryption protocol. The appropriate perl
# module needs to be installed. Possible velues are
# IDEA, DES or BLOWFISH, the default is IDEA.
CryptMethod IDEA
# uncomment this, if you want to run note always # You can run note always in interactive mode by simply
# in interactive mode # typing "note". Set this option to 1 to turn it on.
#$ALWAYS_INT = "YES"; # The default is 0 (off).
AlwaysInteractive 0
# uncomment this, if you want to use always your # In interactive mode, note issues a list command if you
# favorite editor (even for creating notes) instead # simply hit enter. By turning this on, it will issue a
# of <STDIN> # longlist command instead if you hit just enter.
#$ALWAYS_EDIT = "YES"; # The default is 0 (off)
DefaultLong 0
# uncomment this, if you dont prefer that note updates
# the timestamp of a note after editing it. It will # You can use an external editor everytime from note instead
# keep the original timestamp if this option is set. # of STDIN for creating new notes. Set to 1 to turn it on.
#$KEEP_TIMESTAMP = "YES"; # The default is 0 (off).
AlwaysEditor 0
# uncomment and edit it, if you want to use another # uncomment and edit it, if you want to use another
# editor than the default $EDITOR or as fallback vi. # editor than the default $EDITOR or as fallback vi.
#$PreferredEditor = "emacs"; #PreferredEditor emacs
# This option turns topic-support on or off # If you dont prefer that note updates the timestamp of a
# comment it out, if you don't need it # note after editing, turn this on. It will
$TOPIC = 1; # keep the original timestamp if this option is set.
# The default is 0(off), to turn it on set to 1.
KeepTimeStamp 0
# You can specify your own topic separator here. # You can specify your own topic separator here.
# the default topic separator is a normal slash: "/" # the default topic separator is a normal slash: "/"
#$TopicSep = '/'; # see README for details about topics!
TopicSeparator /
# The maximum width for displaying a note. # The maximum width for displaying a note, in CHARS.
$maxlen = 30; # Depends on your screen-size. You can set it to
# "auto", if you wish that note sould determine the
# available size, but it experimental, be aware!
MaxLen 30
# if $COLOR equals NO, then everything will be # note can use colors for output, set this option to
# displayed with your default colors (mostly black) # 1, if you don't want it, or if your terminal does
$COLOR = "YES"; # not support it, set to 0. The default is 1 (on).
UseColors 1
# Color-definitions of the various fields. Will be # Color-definitions of the various items. Will only
# ignored if $COLOR = "NO". # take effect, if "UseColors" is turned on!
$BORDER_COLOR = "BLACK"; # Borders BorderColor BLACK
$NUM_COLOR = "blue"; # Note number NumberColor blue
$NOTE_COLOR = "green"; # The note itself NoteColor green
$TIME_COLOR = "black"; # The time TimeColor black
$TOPIC_COLOR = "BLACK"; # The topic "prompt" TopicColor BLACK
# The following colors are available: # The following colors are available:
# black, red, green, yellow, blue, magenta, cyan and white. # black, red, green, yellow, blue, magenta, cyan and white.
# It will be bold if it is uppercase. # for bold color write it uppercase (BLACK will be bold black)
# You can append an underscore, if you like it underscored, # for underlined color append an underscore (blue_ will be underlined blue)
# ie: blue_ # for inverted color append an "I" (greenI will be inverted green)
# Or, you can append an "I", if you like it inverted
# keep this "1;" please!
1;
# That's all about it for now.
# If you still have any questiosn, please feel free to contact
# me by email: Thomas Linden <tom@daemon.de>