mirror of
https://codeberg.org/scip/note.git
synced 2025-12-17 20:51:02 +01:00
FIXED: oops - the new suptopic feature confused the commandline-mode of
note! quickly corrected! so subtopics also available from command-
line.
FIXED: a small bug fiyed, it was impossible to use -D or -I from command-
line, if $ALWAYS_INT was turned on, now it is.
FIXED: fixed problem with local/global variable $time, which confused
the script under certain circumstances, now $time is no more global,
it will be read in (using &getdate) locally by &new and &edit.
CHANGED: The Topic separator is no longer hardcoded, one can customize
it using the $TopicSep variable, the default is now /, the backslash
will no mor work!
CHANGED: use perl buildin localtime() function instead of
GNU date, which is possibly not installed on every target
system (i.e. win32), therefore better portability!
CHANGED: use now the strict module
ADDED: Support for subtopics added (and sub-sub-..-topics).
CHANGED: Removed the "T" command, it is now obsolete.
CHANGED: behavior of list command changed, now shows topics as well as
notes under the current topic(if there are some).
CHANGED: The ".." command takes you now one level higher in your topic-
structure.
ADDED: A new config option $PreferredEditor, which you can use to
specify your own choice of editor.
FIXED: A bug at line 769 causing single note where smaller than note-
listings
This commit is contained in:
60
Changelog
60
Changelog
@@ -1,3 +1,39 @@
|
|||||||
|
==================================================================================
|
||||||
|
|
||||||
|
|
||||||
|
0.6:
|
||||||
|
FIXED: oops - the new suptopic feature confused the commandline-mode of
|
||||||
|
note! quickly corrected! so subtopics also available from command-
|
||||||
|
line.
|
||||||
|
FIXED: a small bug fiyed, it was impossible to use -D or -I from command-
|
||||||
|
line, if $ALWAYS_INT was turned on, now it is.
|
||||||
|
FIXED: fixed problem with local/global variable $time, which confused
|
||||||
|
the script under certain circumstances, now $time is no more global,
|
||||||
|
it will be read in (using &getdate) locally by &new and &edit.
|
||||||
|
CHANGED: The Topic separator is no longer hardcoded, one can customize
|
||||||
|
it using the $TopicSep variable, the default is now /, the backslash
|
||||||
|
will no mor work!
|
||||||
|
CHANGED: use perl buildin localtime() function instead of
|
||||||
|
GNU date, which is possibly not installed on every target
|
||||||
|
system (i.e. win32), therefore better portability!
|
||||||
|
CHANGED: use now the strict module
|
||||||
|
ADDED: Support for subtopics added (and sub-sub-..-topics).
|
||||||
|
CHANGED: Removed the "T" command, it is now obsolete.
|
||||||
|
CHANGED: behavior of list command changed, now shows topics as well as
|
||||||
|
notes under the current topic(if there are some).
|
||||||
|
CHANGED: The ".." command takes you now one level higher in your topic-
|
||||||
|
structure.
|
||||||
|
ADDED: A new config option $PreferredEditor, which you can use to
|
||||||
|
specify your own choice of editor.
|
||||||
|
FIXED: A bug at line 769 causing single note where smaller than note-
|
||||||
|
listings
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
==================================================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
0.5:
|
0.5:
|
||||||
ADDED: Topic support(requested). You can sort the various notes under
|
ADDED: Topic support(requested). You can sort the various notes under
|
||||||
different topics now.
|
different topics now.
|
||||||
@@ -5,6 +41,11 @@ FIXED: There was another bug, which caused the list command to display
|
|||||||
the notes with a too high value of $maxlen.
|
the notes with a too high value of $maxlen.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
==================================================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
0.4.2:
|
0.4.2:
|
||||||
ADDED: If run in interactive mode, note will at first do a list command.
|
ADDED: If run in interactive mode, note will at first do a list command.
|
||||||
FIXED: A bug caused note to save bogus timestamps after editing a note.
|
FIXED: A bug caused note to save bogus timestamps after editing a note.
|
||||||
@@ -14,6 +55,10 @@ FIXED: Some more vars will be resetted during each loop in interactive mode.
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
==================================================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
0.4.1:
|
0.4.1:
|
||||||
ADDED: The install.sh script for the mysql version is no able to install the
|
ADDED: The install.sh script for the mysql version is no able to install the
|
||||||
required Mysql module directly from CPAN, thanks to David A. Bandel!
|
required Mysql module directly from CPAN, thanks to David A. Bandel!
|
||||||
@@ -28,6 +73,11 @@ FIXED: the function num_bereich() had a bug, which caused ot to ignore under
|
|||||||
some circumstances one number (i.e. "note -d 4-13" did nothing).
|
some circumstances one number (i.e. "note -d 4-13" did nothing).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
==================================================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
0.4:
|
0.4:
|
||||||
CHANGED: ok, mysql support is back again (upon requests). therefore there
|
CHANGED: ok, mysql support is back again (upon requests). therefore there
|
||||||
are two different version of the script in the same time with
|
are two different version of the script in the same time with
|
||||||
@@ -43,12 +93,20 @@ ADDED: sub num_bereich(), which allows one to specify more then one
|
|||||||
number for deletion or displaying (i.e.: "-d 1,4,7" or "-d 4-9")
|
number for deletion or displaying (i.e.: "-d 1,4,7" or "-d 4-9")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
==================================================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
0.3:
|
0.3:
|
||||||
CHANGED: it uses no more a mysql database, but a binary file instead.
|
CHANGED: it uses no more a mysql database, but a binary file instead.
|
||||||
This is much faster!
|
This is much faster!
|
||||||
ADDED: note can display the notes with colors, it is turned off by default
|
ADDED: note can display the notes with colors, it is turned off by default
|
||||||
|
|
||||||
|
|
||||||
|
==================================================================================
|
||||||
|
|
||||||
|
|
||||||
0.2:
|
0.2:
|
||||||
FIXED: now any occurence of ' will be masked with \' before storage
|
FIXED: now any occurence of ' will be masked with \' before storage
|
||||||
to the mysql database.
|
to the mysql database.
|
||||||
@@ -57,5 +115,7 @@ FIXED: now numbers of notes will be recounted, if one delete one note,
|
|||||||
CHANGED: the look of the list output has been changed, similar to a table
|
CHANGED: the look of the list output has been changed, similar to a table
|
||||||
|
|
||||||
|
|
||||||
|
==================================================================================
|
||||||
|
|
||||||
0.1:
|
0.1:
|
||||||
INITIAL RELEASE.
|
INITIAL RELEASE.
|
||||||
|
|||||||
68
README
68
README
@@ -1,4 +1,4 @@
|
|||||||
note 0.5 by Thomas Linden, 23/01/2000
|
note 0.6 by Thomas Linden, 21/02/2000
|
||||||
|
|
||||||
|
|
||||||
Introduction
|
Introduction
|
||||||
@@ -89,11 +89,11 @@ Usage
|
|||||||
If you want to get an overview of all notes, type "note -l".
|
If you want to get an overview of all notes, type "note -l".
|
||||||
You will get a list of all notes, containing the number,
|
You will get a list of all notes, containing the number,
|
||||||
the first line and the creation date. If topic-support is
|
the first line and the creation date. If topic-support is
|
||||||
turned on (which is by default), then "-l" will display a list
|
turned on (which is by default), then all subtopics under the
|
||||||
of all existing topics. If you want to get a listing of all
|
current topic will be displayed first.
|
||||||
notes under a certain topic, use "-l topicname". You will get
|
If you want to get a listing of all
|
||||||
timestamps, if you use "-L" instead of "-l". Read more about
|
If you want to see the timestamps, use "-L" instead of "-l".
|
||||||
topics below in the section "Topics".
|
Read more about topics below in the section "Topics".
|
||||||
|
|
||||||
To edit a certain note, type "note -e 1". It will invoke your
|
To edit a certain note, type "note -e 1". It will invoke your
|
||||||
editor (vi or pico). You can edit it, after saving, note
|
editor (vi or pico). You can edit it, after saving, note
|
||||||
@@ -137,30 +137,62 @@ Topics
|
|||||||
notes are sorted under various topics. There is no special database
|
notes are sorted under various topics. There is no special database
|
||||||
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 back-
|
If the first line of your note contains some text bordered by slashes
|
||||||
slashes, then note will consider it as the topic of this certain
|
(or whatever you prefer, set $TopicSep in your config! default is slash),
|
||||||
note. For examle:
|
then note will consider it as the topic of this certain note. For examle:
|
||||||
\TodoList\
|
/TodoList/
|
||||||
|
|
||||||
If you are in interactive mode, you can "cd" to a different note simply
|
If you are in interactive mode, you can "cd" to a different note simply
|
||||||
by typing it's name at the command-prompt. The list-command will only
|
by typing it's name at the command-prompt. The list-command will only
|
||||||
show you notes under this topic. If you create a new note, it will auto-
|
show you notes under this topic. If you create a new note, it will auto-
|
||||||
magically inserted under the current topic (note will prepend the string
|
magically inserted under the current topic (note will prepend the string
|
||||||
"\topicname\" to the text of your note).
|
"/topicname/" to the text of your note).
|
||||||
|
|
||||||
You can create at any time form 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 yourself the name of the new topic bordered by backslashes
|
note and type the name of the new topic bordered by slashes (or $TopicSep)
|
||||||
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.
|
||||||
|
|
||||||
If a note does not contain the "magic" \topic\ construction on the first
|
You can create as many subtopics as you like, the format is similar to a
|
||||||
line, it will be listed under the topic "default". Therefore never use the
|
filesystem-path. An example, say, you want to create such a structure:
|
||||||
word "default" as a topic-name :-)
|
|
||||||
|
(root - top level)
|
||||||
|
|
|
||||||
|
|----test
|
||||||
|
| |----subtopic
|
||||||
|
| | |--note 1
|
||||||
|
| | |--note 2
|
||||||
|
| |
|
||||||
|
| |--note 4
|
||||||
|
|
|
||||||
|
|--note 3
|
||||||
|
|
||||||
|
Then you may create those 4 new notes:
|
||||||
|
--- snip ---
|
||||||
|
/test/subtopic/
|
||||||
|
note 1
|
||||||
|
--- snip ---
|
||||||
|
/test/subtopic/
|
||||||
|
note 2
|
||||||
|
--- snip ---
|
||||||
|
note 3
|
||||||
|
--- snip ---
|
||||||
|
/test/
|
||||||
|
note 4
|
||||||
|
--- snip ---
|
||||||
|
|
||||||
|
I hope, you got the point ;-)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
If a note does not contain the "magic" /topic/ construction on the first
|
||||||
|
line, it will be listed under the "root" of note, that is the point you are
|
||||||
|
at the startup of note.
|
||||||
|
|
||||||
You can subsequently move a note without a topic to a certain topic. Simply
|
You can subsequently move a note without a topic to a certain topic. Simply
|
||||||
edit it and insert at the first line the above mentioned construction.
|
edit it and insert at the first line the above mentioned construction.
|
||||||
|
|
||||||
Note: Please don't forget the prepending and appending backslash of a topic.
|
Note: Please don't forget the prepending and appending a slash of a topic.
|
||||||
You will get strange results without it!
|
You will get strange results without it!
|
||||||
|
|
||||||
|
|
||||||
@@ -303,4 +335,4 @@ Author
|
|||||||
Last changed
|
Last changed
|
||||||
============
|
============
|
||||||
|
|
||||||
23.01.2000
|
21.02.2000
|
||||||
|
|||||||
413
binary-db/note
413
binary-db/note
@@ -1,5 +1,30 @@
|
|||||||
#!/usr/bin/perl
|
#!/usr/bin/perl
|
||||||
#
|
#
|
||||||
|
# $Id: note,v 1.7 2000/02/25 21:00:15 tom Exp tom $ $Author: tom $ $Revision: 1.7 $
|
||||||
|
#
|
||||||
|
# $Log: note,v $
|
||||||
|
# Revision 1.7 2000/02/25 21:00:15 tom
|
||||||
|
# corrected small timestamp problem in &edit and &new
|
||||||
|
#
|
||||||
|
# Revision 1.6 2000/02/25 13:23:25 tom
|
||||||
|
# fixed a small bug, that caused to use the last line for a note title instead the 2nd.
|
||||||
|
#
|
||||||
|
# Revision 1.5 2000/02/25 10:19:58 tom
|
||||||
|
# help modified about topic sep...
|
||||||
|
#
|
||||||
|
# Revision 1.4 2000/02/25 10:13:06 tom
|
||||||
|
# added $TopicSep
|
||||||
|
#
|
||||||
|
# Revision 1.3 2000/02/25 09:46:06 tom
|
||||||
|
# removed usage of gnu date, use localtime instead
|
||||||
|
#
|
||||||
|
# Revision 1.2 2000/02/25 09:24:27 tom
|
||||||
|
# changed to use strict, seems all still working ;-)
|
||||||
|
#
|
||||||
|
# Revision 1.1 2000/02/25 08:23:20 tom
|
||||||
|
# Initial revision
|
||||||
|
#
|
||||||
|
#
|
||||||
# this is the small console program "note" (BINARY version)
|
# this is the small console program "note" (BINARY version)
|
||||||
# It works similar to some well known GUI note programs,
|
# It works similar to some well known GUI note programs,
|
||||||
# but instead of using X11 it uses the UN*X console.
|
# but instead of using X11 it uses the UN*X console.
|
||||||
@@ -13,6 +38,41 @@
|
|||||||
# If you find it usefull or find a bug, please let me know:
|
# If you find it usefull or find a bug, please let me know:
|
||||||
# Thomas Linden <tom@daemon.de>
|
# Thomas Linden <tom@daemon.de>
|
||||||
|
|
||||||
|
#use Data::Dumper;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
sub usage;
|
||||||
|
sub find_editor;
|
||||||
|
sub output;
|
||||||
|
sub C;
|
||||||
|
sub uen;
|
||||||
|
sub ude;
|
||||||
|
sub num_bereich;
|
||||||
|
sub getdate;
|
||||||
|
|
||||||
|
sub new;
|
||||||
|
sub edit;
|
||||||
|
sub del;
|
||||||
|
sub display;
|
||||||
|
sub list;
|
||||||
|
sub help;
|
||||||
|
sub import;
|
||||||
|
|
||||||
|
use IO::Seekable;
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
|
||||||
|
my (
|
||||||
|
$maxlen, $timelen, $TOPIC, $TYPE, $mode, $NOTEDB,
|
||||||
|
$version, $number, $CurTopic, $CurDepth, $PATH, $CONF,
|
||||||
|
$sizeof, $MAX_TIME, $PreferredEditor, %TP, $TopicSep,
|
||||||
|
$ListType, $searchstring, $dump_file, $ALWAYS_INT,
|
||||||
|
$BORDERC, $BORDER_COLOR, $_BORDERC, $NOTEC, $NOTE_COLOR,
|
||||||
|
$NUMC, $NUM_COLOR, $_NUMC, $_NOTEC, $TIMEC, $TIME_COLOR,
|
||||||
|
$_TIMEC, $TOPICC, $TOPIC_COLOR, $_TOPICC, $SetTitle, $COLOR,
|
||||||
|
$typedef, $MAX_NOTE, $MAX_TIME, @NumBlock, $ALWAYS_EDIT, $HOME
|
||||||
|
);
|
||||||
|
|
||||||
#################################################
|
#################################################
|
||||||
# define some default values.
|
# define some default values.
|
||||||
@@ -42,30 +102,19 @@ $TOPIC_COLOR = "BLACK";
|
|||||||
|
|
||||||
# Turns Topic Support on
|
# Turns Topic Support on
|
||||||
$TOPIC = 1;
|
$TOPIC = 1;
|
||||||
|
|
||||||
|
# Default topic separator: \
|
||||||
|
$TopicSep = '/';
|
||||||
|
|
||||||
|
$version = "0.6 (binary database)";
|
||||||
|
|
||||||
|
if($TOPIC)
|
||||||
|
{
|
||||||
|
$CurDepth = 1; # the current depth inside the topic "directory" structure...
|
||||||
|
}
|
||||||
#################################################
|
#################################################
|
||||||
|
|
||||||
|
|
||||||
sub usage;
|
|
||||||
sub find_editor;
|
|
||||||
sub output;
|
|
||||||
sub C;
|
|
||||||
sub uen;
|
|
||||||
sub ude;
|
|
||||||
sub num_bereich;
|
|
||||||
|
|
||||||
sub new;
|
|
||||||
sub edit;
|
|
||||||
sub del;
|
|
||||||
sub display;
|
|
||||||
sub list;
|
|
||||||
sub help;
|
|
||||||
sub import;
|
|
||||||
|
|
||||||
use IO::Seekable;
|
|
||||||
|
|
||||||
$version = "0.5 (binary database)";
|
|
||||||
|
|
||||||
|
|
||||||
# process command line args
|
# process command line args
|
||||||
if($ARGV[0] eq "")
|
if($ARGV[0] eq "")
|
||||||
{
|
{
|
||||||
@@ -95,7 +144,9 @@ else
|
|||||||
elsif($ARGV[0] eq "-l" || $ARGV[0] eq "--list")
|
elsif($ARGV[0] eq "-l" || $ARGV[0] eq "--list")
|
||||||
{
|
{
|
||||||
$mode = "list";
|
$mode = "list";
|
||||||
$CurTopic = $ARGV[1];
|
my @ArgTopics = split /$TopicSep/,$ARGV[1];
|
||||||
|
$CurDepth += $#ArgTopics + 1 if $ARGV[1];
|
||||||
|
$CurTopic = $ArgTopics[$#ArgTopics]; # use the last element everytime...
|
||||||
$ARGV[0] = "";
|
$ARGV[0] = "";
|
||||||
}
|
}
|
||||||
elsif($ARGV[0] eq "-L" || $ARGV[0] eq "--longlist")
|
elsif($ARGV[0] eq "-L" || $ARGV[0] eq "--longlist")
|
||||||
@@ -187,7 +238,7 @@ if(-e $CONF)
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Always interactive?
|
# Always interactive?
|
||||||
if($ALWAYS_INT eq "YES")
|
if($ALWAYS_INT eq "YES" && $mode ne "dump" && $mode ne "import")
|
||||||
{
|
{
|
||||||
$mode = "interactive";
|
$mode = "interactive";
|
||||||
}
|
}
|
||||||
@@ -219,8 +270,6 @@ $_TIMEC = "</$TIME_COLOR>";
|
|||||||
$TOPICC = "<$TOPIC_COLOR>";
|
$TOPICC = "<$TOPIC_COLOR>";
|
||||||
$_TOPICC = "</$TOPIC_COLOR>";
|
$_TOPICC = "</$TOPIC_COLOR>";
|
||||||
|
|
||||||
$time = `date +%d\".\"%m\".\"%Y\" \"%T`;
|
|
||||||
chomp $time;
|
|
||||||
|
|
||||||
$typedef = "i a$MAX_NOTE a$MAX_TIME";
|
$typedef = "i a$MAX_NOTE a$MAX_TIME";
|
||||||
$sizeof = length pack($typedef, () );
|
$sizeof = length pack($typedef, () );
|
||||||
@@ -232,7 +281,6 @@ if($ListType ne "LONG" && $mode ne "interactive")
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# main loop: ###############
|
# main loop: ###############
|
||||||
if($mode eq "display")
|
if($mode eq "display")
|
||||||
{
|
{
|
||||||
@@ -284,7 +332,7 @@ exit(0);
|
|||||||
############################### DISPLAY ##################################
|
############################### DISPLAY ##################################
|
||||||
sub display
|
sub display
|
||||||
{
|
{
|
||||||
print "\n";
|
my($N,$address,$buffer,$n,$t,$match,$note,$time,$num);
|
||||||
open (NOTE, "+<$NOTEDB") or die "could not open .notedb\n";
|
open (NOTE, "+<$NOTEDB") or die "could not open .notedb\n";
|
||||||
&num_bereich; # get @NumBlock from $numer
|
&num_bereich; # get @NumBlock from $numer
|
||||||
foreach $N (@NumBlock)
|
foreach $N (@NumBlock)
|
||||||
@@ -313,6 +361,7 @@ sub display
|
|||||||
############################### SEARCH ##################################
|
############################### SEARCH ##################################
|
||||||
sub search
|
sub search
|
||||||
{
|
{
|
||||||
|
my($n,$t,$match,$note,$time,$num,$buffer);
|
||||||
$maxlen += $timelen;
|
$maxlen += $timelen;
|
||||||
if($searchstring eq "")
|
if($searchstring eq "")
|
||||||
{
|
{
|
||||||
@@ -345,27 +394,19 @@ sub search
|
|||||||
############################### LIST ##################################
|
############################### LIST ##################################
|
||||||
sub list
|
sub list
|
||||||
{
|
{
|
||||||
|
#system("clear") or print "\n\n\n\n";
|
||||||
|
my(@topic,@RealTopic, $i,$buffer,$t,$n,$num,$note,$time,@CurItem,$top,$in);
|
||||||
if($mode ne "interactive")
|
if($mode ne "interactive")
|
||||||
{
|
|
||||||
if($TOPIC && $CurTopic eq "")
|
|
||||||
{
|
|
||||||
print "List of all available topics:\n\n";
|
|
||||||
}
|
|
||||||
elsif($TOPIC && $CurTopic ne "")
|
|
||||||
{
|
|
||||||
print "List of all notes under topic \"$CurTopic\":\n\n";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
print "List of all existing notes:\n\n";
|
print "List of all existing notes:\n\n";
|
||||||
}
|
}
|
||||||
}
|
|
||||||
open (NOTE, "+<$NOTEDB") or die "could not open .notedb\n";
|
open (NOTE, "+<$NOTEDB") or die "could not open .notedb\n";
|
||||||
seek(NOTE, 0, 0); # START FROM BEGINNING
|
seek(NOTE, 0, 0); # START FROM BEGINNING
|
||||||
if($TOPIC && $CurTopic eq "")
|
if($TOPIC)
|
||||||
{
|
{
|
||||||
undef %TP;
|
undef %TP; # the beginning!
|
||||||
}
|
}
|
||||||
|
$i = 0;
|
||||||
while(read(NOTE, $buffer, $sizeof))
|
while(read(NOTE, $buffer, $sizeof))
|
||||||
{
|
{
|
||||||
($num, $note, $time) = unpack($typedef, $buffer);
|
($num, $note, $time) = unpack($typedef, $buffer);
|
||||||
@@ -374,39 +415,49 @@ sub list
|
|||||||
if($TOPIC)
|
if($TOPIC)
|
||||||
{
|
{
|
||||||
# this allows us to have multiple topics (subtopics!)
|
# this allows us to have multiple topics (subtopics!)
|
||||||
@topic = split(/\\/,$n);
|
my ($firstline,$dummy) = split /\n/, $n, 2;
|
||||||
if($CurTopic eq "")
|
if($firstline =~ /^($TopicSep)/)
|
||||||
{
|
{
|
||||||
# looks like: "\topic\"
|
@topic = split(/$TopicSep/,$firstline);
|
||||||
# collect:
|
|
||||||
if($topic[1] eq "")
|
|
||||||
{
|
|
||||||
$topic[1] = "default";
|
|
||||||
}
|
|
||||||
if(exists $TP{$topic[1]})
|
|
||||||
{
|
|
||||||
$TP{$topic[1]}++;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$TP{$topic[1]} = 1;
|
@topic = ();
|
||||||
|
}
|
||||||
|
# looks like: "\topic\"
|
||||||
|
# collect a list of topics under the current topic
|
||||||
|
if($topic[$CurDepth-1] eq $CurTopic && $topic[$CurDepth] ne "")
|
||||||
|
{
|
||||||
|
if(exists $TP{$topic[$CurDepth]})
|
||||||
|
{
|
||||||
|
$TP{$topic[$CurDepth]}++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
# only if the next item *is* a topic!
|
||||||
|
$TP{$topic[$CurDepth]} = 1 if(($CurDepth) <= $#topic);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elsif($topic[$CurDepth-1] eq $CurTopic || ($topic[$CurDepth] eq "" && $CurDepth ==1))
|
||||||
|
{
|
||||||
|
# cut the topic off the note-text
|
||||||
|
if($n =~ /^($TopicSep)/)
|
||||||
|
{
|
||||||
|
$CurItem[$i]->{'note'} = $dummy;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$CurItem[$i]->{'note'} = $n;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
# save for later output() call
|
||||||
else
|
$CurItem[$i]->{'num'} = $num;
|
||||||
|
$CurItem[$i]->{'time'} = $t;
|
||||||
|
$i++;
|
||||||
|
# use this note for building the $PATH!
|
||||||
|
if($RealTopic[0] eq "")
|
||||||
{
|
{
|
||||||
if($topic[1] eq $CurTopic)
|
@RealTopic = @topic;
|
||||||
{
|
|
||||||
# cut the topic from the note-text
|
|
||||||
if($n =~ /^\\$CurTopic\\\n*/)
|
|
||||||
{
|
|
||||||
$n = $';
|
|
||||||
}
|
|
||||||
output($num, $n, $t);
|
|
||||||
}
|
|
||||||
elsif($topic[1] eq "" && $CurTopic eq "default")
|
|
||||||
{
|
|
||||||
output($num, $n, $t);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -415,12 +466,33 @@ sub list
|
|||||||
output($num, $n, $t);
|
output($num, $n, $t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if($TOPIC && $CurTopic eq "")
|
if($TOPIC)
|
||||||
{
|
{
|
||||||
|
if($CurTopic ne "")
|
||||||
|
{
|
||||||
|
undef $PATH;
|
||||||
|
foreach (@RealTopic)
|
||||||
|
{
|
||||||
|
$PATH .= $_ . $TopicSep;
|
||||||
|
last if($_ eq $CurTopic);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$PATH = $TopicSep;
|
||||||
|
}
|
||||||
|
|
||||||
# we are at top level, print a list of topics...
|
# we are at top level, print a list of topics...
|
||||||
foreach $top (sort(keys %TP))
|
foreach $top (sort(keys %TP))
|
||||||
{
|
{
|
||||||
print C " => " . $BORDERC. "[" . $_BORDERC . $TOPICC . $top . $_TOPICC . $BORDERC . "]" .$_BORDERC ." ($TP{$top} notes)\n";
|
output("-", " => ". $top . "$TopicSep ($TP{$top} notes)",
|
||||||
|
" Sub Topic ");
|
||||||
|
}
|
||||||
|
for($in=0;$in<$i;$in++)
|
||||||
|
{
|
||||||
|
output( $CurItem[$in]->{'num'},
|
||||||
|
$CurItem[$in]->{'note'},
|
||||||
|
$CurItem[$in]->{'time'} );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
close(NOTE);
|
close(NOTE);
|
||||||
@@ -431,6 +503,8 @@ sub list
|
|||||||
############################### NEW ##################################
|
############################### NEW ##################################
|
||||||
sub new
|
sub new
|
||||||
{
|
{
|
||||||
|
my($time, $TEMP,$editor, $note, $WARN, $c, $line, $num, $te, $me, $buff,$buffer, @topic,$n,$t);
|
||||||
|
$time = &getdate;
|
||||||
if($ALWAYS_EDIT eq "YES")
|
if($ALWAYS_EDIT eq "YES")
|
||||||
{
|
{
|
||||||
$TEMP = "/tmp/note.$$";
|
$TEMP = "/tmp/note.$$";
|
||||||
@@ -468,7 +542,7 @@ sub new
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
$note = "";
|
$note = "";
|
||||||
local $line = "";
|
$line = "";
|
||||||
#local $num = 0;
|
#local $num = 0;
|
||||||
# create a new note
|
# create a new note
|
||||||
print "enter the text of the note, end with .\n";
|
print "enter the text of the note, end with .\n";
|
||||||
@@ -494,18 +568,19 @@ sub new
|
|||||||
|
|
||||||
if($TOPIC && $CurTopic ne "")
|
if($TOPIC && $CurTopic ne "")
|
||||||
{
|
{
|
||||||
@topic = split(/\\/,$note);
|
@topic = split(/$TopicSep/,$note);
|
||||||
if($topic[1] eq "")
|
if($topic[1] eq "")
|
||||||
{
|
{
|
||||||
$note = "\\$CurTopic\\\n$note";
|
#$note = "\\$CurTopic\\\n$note";
|
||||||
|
$note = $PATH . "\n$note";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
open (NOTE, "+<$NOTEDB") or die "could not open .notedb\n";
|
open (NOTE, "+<$NOTEDB") or die "could not open .notedb\n";
|
||||||
seek(NOTE, 0, SEEK_END); # APPEND
|
seek(NOTE, 0, SEEK_END); # APPEND
|
||||||
local $n = uen($note);
|
$n = uen($note);
|
||||||
local $t = uen($time);
|
$t = uen($time);
|
||||||
$buffer = pack($typedef, $num, $n, $t);
|
$buffer = pack($typedef, $num, $n, $t);
|
||||||
|
|
||||||
print NOTE $buffer;
|
print NOTE $buffer;
|
||||||
@@ -517,6 +592,7 @@ sub new
|
|||||||
############################### DELETE ##################################
|
############################### DELETE ##################################
|
||||||
sub del
|
sub del
|
||||||
{
|
{
|
||||||
|
my($TEMP,$count, $buff, %Merk, $num, $note, $time, $droped, $buffer);
|
||||||
&num_bereich; # get @NumBlock from $number
|
&num_bereich; # get @NumBlock from $number
|
||||||
$TEMP = "/tmp/note.$$"; # save temporarily in $TEMP
|
$TEMP = "/tmp/note.$$"; # save temporarily in $TEMP
|
||||||
system("/bin/touch", $TEMP);
|
system("/bin/touch", $TEMP);
|
||||||
@@ -530,10 +606,10 @@ sub del
|
|||||||
# read from notedb and write to temp (without number to
|
# read from notedb and write to temp (without number to
|
||||||
# be deleted, and with recounted numbers)
|
# be deleted, and with recounted numbers)
|
||||||
|
|
||||||
foreach $N (@NumBlock)
|
foreach (@NumBlock)
|
||||||
{
|
{
|
||||||
# define $Merk's for the exists() test later on...
|
# define $Merk's for the exists() test later on...
|
||||||
$Merk{$N} = "got";
|
$Merk{$_} = "got";
|
||||||
}
|
}
|
||||||
|
|
||||||
while(read(NOTE, $buff, $sizeof))
|
while(read(NOTE, $buff, $sizeof))
|
||||||
@@ -578,6 +654,8 @@ sub del
|
|||||||
############################### EDIT ##################################
|
############################### EDIT ##################################
|
||||||
sub edit
|
sub edit
|
||||||
{
|
{
|
||||||
|
my($time,$editor, $TEMP, $address, $n, $buff, $c, $note, $t, $buffer, $num);
|
||||||
|
$time = &getdate;
|
||||||
$address = ($number -1 ) * $sizeof;
|
$address = ($number -1 ) * $sizeof;
|
||||||
open (NOTE, "+<$NOTEDB") or die "could not open .notedb\n";
|
open (NOTE, "+<$NOTEDB") or die "could not open .notedb\n";
|
||||||
seek(NOTE, $address, SEEK_SET);
|
seek(NOTE, $address, SEEK_SET);
|
||||||
@@ -624,7 +702,7 @@ sub edit
|
|||||||
seek(NOTE, $address, SEEK_SET);
|
seek(NOTE, $address, SEEK_SET);
|
||||||
$n = "";
|
$n = "";
|
||||||
$n = uen($note);
|
$n = uen($note);
|
||||||
local $t = uen($time);
|
$t = uen($time);
|
||||||
$buffer = pack($typedef, $number, $n, $t);
|
$buffer = pack($typedef, $number, $n, $t);
|
||||||
print NOTE $buffer;
|
print NOTE $buffer;
|
||||||
close(NOTE);
|
close(NOTE);
|
||||||
@@ -634,6 +712,7 @@ sub edit
|
|||||||
|
|
||||||
sub dump
|
sub dump
|
||||||
{
|
{
|
||||||
|
my($buffer,$num, $note, $time,$n, $t);
|
||||||
# $dump_file
|
# $dump_file
|
||||||
open (DUMP, ">$dump_file") or die "could not open $dump_file\n";
|
open (DUMP, ">$dump_file") or die "could not open $dump_file\n";
|
||||||
select DUMP;
|
select DUMP;
|
||||||
@@ -655,6 +734,7 @@ sub dump
|
|||||||
|
|
||||||
sub import
|
sub import
|
||||||
{
|
{
|
||||||
|
my($buff, $num,$te, $me, $start, $complete, $dummi, $n, $t, $buffer, $note, $time, $date);
|
||||||
open (N, "<$NOTEDB") or die "could not open .notedb\n";
|
open (N, "<$NOTEDB") or die "could not open .notedb\n";
|
||||||
# since we have not number, look for the next available:
|
# since we have not number, look for the next available:
|
||||||
seek(N, 0, 0); # START FROM BEGINNING
|
seek(N, 0, 0); # START FROM BEGINNING
|
||||||
@@ -668,8 +748,8 @@ sub import
|
|||||||
|
|
||||||
# open $dump_file and import it into the notedb
|
# open $dump_file and import it into the notedb
|
||||||
open (DUMP, "<$dump_file") or die "could not open $dump_file\n";
|
open (DUMP, "<$dump_file") or die "could not open $dump_file\n";
|
||||||
local $complete=0;
|
$complete=0;
|
||||||
local $start = 0;
|
$start = 0;
|
||||||
open (NOTE, "+<$NOTEDB") or die "could not open .notedb\n";
|
open (NOTE, "+<$NOTEDB") or die "could not open .notedb\n";
|
||||||
while(<DUMP>)
|
while(<DUMP>)
|
||||||
{
|
{
|
||||||
@@ -687,8 +767,8 @@ sub import
|
|||||||
# we got a complete record, save it!
|
# we got a complete record, save it!
|
||||||
|
|
||||||
seek(NOTE, 0, SEEK_END); # APPEND
|
seek(NOTE, 0, SEEK_END); # APPEND
|
||||||
local $n = uen($note);
|
$n = uen($note);
|
||||||
local $t = uen($date);
|
$t = uen($date);
|
||||||
$buffer = pack($typedef, $num, $n, $t);
|
$buffer = pack($typedef, $num, $n, $t);
|
||||||
print NOTE $buffer;
|
print NOTE $buffer;
|
||||||
$num++;
|
$num++;
|
||||||
@@ -715,8 +795,8 @@ sub import
|
|||||||
{
|
{
|
||||||
# the last record, if existent
|
# the last record, if existent
|
||||||
seek(NOTE, 0, SEEK_END); # APPEND
|
seek(NOTE, 0, SEEK_END); # APPEND
|
||||||
local $n = uen($note);
|
$n = uen($note);
|
||||||
local $t = uen($date);
|
$t = uen($date);
|
||||||
$buffer = pack($typedef, $num, $n, $t);
|
$buffer = pack($typedef, $num, $n, $t);
|
||||||
print NOTE $buffer;
|
print NOTE $buffer;
|
||||||
print "note number $number from $dump_file inserted into notedb.\n";
|
print "note number $number from $dump_file inserted into notedb.\n";
|
||||||
@@ -731,48 +811,51 @@ sub import
|
|||||||
|
|
||||||
sub interactive
|
sub interactive
|
||||||
{
|
{
|
||||||
|
my($maxlen_save, $B, $BB, $menu, $time, $char, @LastTopic);
|
||||||
$maxlen_save = $maxlen;
|
$maxlen_save = $maxlen;
|
||||||
# create menu:
|
# create menu:
|
||||||
local $B = "<blackI>";
|
$B = "<blackI>";
|
||||||
local $BB = "</blackI>";
|
$BB = "</blackI>";
|
||||||
local $menu = "[" . $B . "L" . $BB . " List "
|
$menu = "[" . $B . "L" . $BB . " List "
|
||||||
. $B . "N" . $BB . " New "
|
. $B . "N" . $BB . " New "
|
||||||
. $B . "D" . $BB . " Delete "
|
. $B . "D" . $BB . " Delete "
|
||||||
. $B . "S" . $BB . " Search "
|
. $B . "S" . $BB . " Search "
|
||||||
. $B . "E" . $BB . " Edit ";
|
. $B . "E" . $BB . " Edit "
|
||||||
if($TOPIC)
|
. $B . "?" . $BB . " Help "
|
||||||
{
|
|
||||||
$menu .= $B . "T" . $BB . " Topic ";
|
|
||||||
}
|
|
||||||
$menu .= $B . "?" . $BB . " Help "
|
|
||||||
. $B . "Q" . $BB . " Quit] "; # $CurTopic will be empty if $TOPIC is off!
|
. $B . "Q" . $BB . " Quit] "; # $CurTopic will be empty if $TOPIC is off!
|
||||||
# Initially do a list command!
|
# Initially do a list command!
|
||||||
$maxlen += $timelen;
|
$maxlen += $timelen;
|
||||||
print "\n";
|
print "\n";
|
||||||
&list;
|
&list;
|
||||||
|
undef $SetTitle;
|
||||||
# per default let's list all the stuff:
|
# per default let's list all the stuff:
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
# reset time
|
# reset time
|
||||||
$time = `date +%d\".\"%m\".\"%Y\" \"%T`;
|
|
||||||
chomp $time;
|
|
||||||
$ListType = "";
|
$ListType = "";
|
||||||
$maxlen = $maxlen_save;
|
$maxlen = $maxlen_save;
|
||||||
|
if($CurDepth > 2)
|
||||||
|
{
|
||||||
|
print C $menu . $TOPICC . "../" . $CurTopic . $_TOPICC . ">";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
print C $menu . $TOPICC . $CurTopic . $_TOPICC . ">";
|
print C $menu . $TOPICC . $CurTopic . $_TOPICC . ">";
|
||||||
|
}
|
||||||
# endless until user press "Q" or "q"!
|
# endless until user press "Q" or "q"!
|
||||||
$char = <STDIN>;
|
$char = <STDIN>;
|
||||||
chomp $char;
|
chomp $char;
|
||||||
if($char =~ /^\d+/)
|
if($char =~ /^\d+/)
|
||||||
{
|
{
|
||||||
# display notes
|
# display notes
|
||||||
|
$maxlen += $timelen;
|
||||||
$number = $char;
|
$number = $char;
|
||||||
&display;
|
&display;
|
||||||
|
undef $SetTitle;
|
||||||
}
|
}
|
||||||
elsif($char =~ /^n$/i)
|
elsif($char =~ /^n$/i)
|
||||||
{
|
{
|
||||||
# create a new one
|
# create a new one
|
||||||
$time = `date +%d\".\"%m\".\"%Y\" \"%T`;
|
|
||||||
chomp $time;
|
|
||||||
&new;
|
&new;
|
||||||
}
|
}
|
||||||
elsif($char =~ /^l$/ || $char =~ /^$/)
|
elsif($char =~ /^l$/ || $char =~ /^$/)
|
||||||
@@ -814,8 +897,6 @@ sub interactive
|
|||||||
elsif($char =~ /^e\s+(\d+\-*\,*\d*)/i)
|
elsif($char =~ /^e\s+(\d+\-*\,*\d*)/i)
|
||||||
{
|
{
|
||||||
# edit one!
|
# edit one!
|
||||||
$time = `date +%d\".\"%m\".\"%Y\" \"%T`;
|
|
||||||
chomp $time;
|
|
||||||
$number = $1;
|
$number = $1;
|
||||||
&edit;
|
&edit;
|
||||||
}
|
}
|
||||||
@@ -852,19 +933,10 @@ sub interactive
|
|||||||
print "\n\ngood bye\n";
|
print "\n\ngood bye\n";
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
elsif($char =~ /^t$/i && $TOPIC)
|
|
||||||
{
|
|
||||||
$SaveTopic = $CurTopic;
|
|
||||||
$CurTopic = "";
|
|
||||||
#$maxlen += $timelen;
|
|
||||||
print "\n";
|
|
||||||
&list;
|
|
||||||
$CurTopic = $SaveTopic;
|
|
||||||
undef $SetTitle;
|
|
||||||
}
|
|
||||||
elsif($char =~ /^\.\.$/)
|
elsif($char =~ /^\.\.$/)
|
||||||
{
|
{
|
||||||
$CurTopic = "default";
|
$CurDepth-- if ($CurDepth > 1);
|
||||||
|
$CurTopic = $LastTopic[$CurDepth];
|
||||||
$maxlen += $timelen;
|
$maxlen += $timelen;
|
||||||
print "\n";
|
print "\n";
|
||||||
&list;
|
&list;
|
||||||
@@ -875,8 +947,10 @@ sub interactive
|
|||||||
# unknown
|
# unknown
|
||||||
if(exists $TP{$char})
|
if(exists $TP{$char})
|
||||||
{
|
{
|
||||||
|
$LastTopic[$CurDepth] = $CurTopic;
|
||||||
$CurTopic = $char;
|
$CurTopic = $char;
|
||||||
$maxlen += $timelen;
|
$maxlen += $timelen;
|
||||||
|
$CurDepth++;
|
||||||
print "\n";
|
print "\n";
|
||||||
&list;
|
&list;
|
||||||
undef $SetTitle;
|
undef $SetTitle;
|
||||||
@@ -926,11 +1000,15 @@ Options:
|
|||||||
exit 1;
|
exit 1;
|
||||||
}
|
}
|
||||||
sub find_editor {
|
sub find_editor {
|
||||||
return $ENV{"VISUAL"} || $ENV{"EDITOR"} || "vim" || "vi" || "pico";
|
return $PreferredEditor || $ENV{"VISUAL"} || $ENV{"EDITOR"} || "vim" || "vi" || "pico";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#/
|
||||||
|
|
||||||
sub output
|
sub output
|
||||||
{
|
{
|
||||||
|
my($SSS, $LINE, $num, $note, $time, $TYPE, $L, $LONGSPC, $R, $PathLen, $SP, $title, $CUTSPACE,
|
||||||
|
$len, $diff, $Space);
|
||||||
# 0 = Num, 1 = Note, 2 = Time
|
# 0 = Num, 1 = Note, 2 = Time
|
||||||
if($ListType ne "LONG")
|
if($ListType ne "LONG")
|
||||||
{
|
{
|
||||||
@@ -940,27 +1018,28 @@ sub output
|
|||||||
{
|
{
|
||||||
$SSS = "-" x ($maxlen + 31);
|
$SSS = "-" x ($maxlen + 31);
|
||||||
}
|
}
|
||||||
local $LINE = "$BORDERC $SSS $_BORDERC\n";
|
$LINE = "$BORDERC $SSS $_BORDERC\n";
|
||||||
local $num = $_[0];
|
$num = $_[0];
|
||||||
local $note = $_[1];
|
$note = $_[1];
|
||||||
local $time = $_[2];
|
$time = $_[2];
|
||||||
local $TYPE = $_[3];
|
$TYPE = $_[3];
|
||||||
local $L = $BORDERC . "[" . $_BORDERC;
|
$L = $BORDERC . "[" . $_BORDERC;
|
||||||
local $LONGSPC = " " x (22 + 3);
|
$LONGSPC = " " x (22 + 3);
|
||||||
local $R = $BORDERC . "]" . $_BORDERC;
|
$R = $BORDERC . "]" . $_BORDERC;
|
||||||
|
$PathLen = length($PATH); # will be ZERO, if not in TOPIC mode!
|
||||||
if($TYPE ne "SINGLE")
|
if($TYPE ne "SINGLE")
|
||||||
{
|
{
|
||||||
if(!$SetTitle)
|
if(!$SetTitle)
|
||||||
{
|
{
|
||||||
local $SP = "";
|
$SP = "";
|
||||||
# print only if it is the first line!
|
# print only if it is the first line!
|
||||||
if($ListType ne "LONG")
|
if($ListType ne "LONG")
|
||||||
{
|
{
|
||||||
$SP = " " x ($maxlen-2 - $timelen);
|
$SP = " " x ($maxlen-2 - $timelen - $PathLen);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$SP = " " x ($maxlen-2);
|
$SP = " " x ($maxlen-2 - $PathLen);
|
||||||
}
|
}
|
||||||
print C $LINE;
|
print C $LINE;
|
||||||
|
|
||||||
@@ -973,27 +1052,47 @@ sub output
|
|||||||
{
|
{
|
||||||
print $LONGSPC;
|
print $LONGSPC;
|
||||||
}
|
}
|
||||||
|
if($TOPIC)
|
||||||
|
{
|
||||||
|
print C $TOPICC . "$PATH $_TOPICC$SP$R\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
print C $NOTEC . "note$_NOTEC$SP$R\n";
|
print C $NOTEC . "note$_NOTEC$SP$R\n";
|
||||||
|
}
|
||||||
|
|
||||||
print C $LINE;
|
print C $LINE;
|
||||||
$SetTitle = 1;
|
$SetTitle = 1;
|
||||||
}
|
}
|
||||||
local $title = "";
|
$title = "";
|
||||||
$CUTSPACE = " " x $maxlen;
|
$CUTSPACE = " " x $maxlen;
|
||||||
$note =~ s/\n/$CUTSPACE/g;
|
$note =~ s/\n/$CUTSPACE/g;
|
||||||
local $len = length($note);
|
$len = length($note);
|
||||||
if($len < $maxlen-3)
|
if($len < $maxlen-3)
|
||||||
{
|
{
|
||||||
local $diff = $maxlen - $len;
|
$diff = $maxlen - $len;
|
||||||
local $Space = " " x $diff;
|
$Space = " " x $diff;
|
||||||
|
if($num eq "-")
|
||||||
|
{
|
||||||
|
$title = $BORDERC . $TOPICC . "\"" . $note . "\"" . $_TOPICC . $Space . "$_BORDERC";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
$title = $BORDERC . $NOTEC . "\"" . $note . "\"" . $_NOTEC . $Space . "$_BORDERC";
|
$title = $BORDERC . $NOTEC . "\"" . $note . "\"" . $_NOTEC . $Space . "$_BORDERC";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$title = substr($note,0,$maxlen - 3);
|
$title = substr($note,0,$maxlen - 3);
|
||||||
|
if($num eq "-")
|
||||||
|
{
|
||||||
|
$title = $BORDERC . $TOPICC . "\"" . $title . "...\"$_TOPICC$_BORDERC";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
$title = $BORDERC . $NOTEC . "\"" . $title . "...\"$_NOTEC$_BORDERC";
|
$title = $BORDERC . $NOTEC . "\"" . $title . "...\"$_NOTEC$_BORDERC";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
# $title should now look as: "A sample note "
|
# $title should now look as: "A sample note "
|
||||||
print C "$L $NUMC$num$_NUMC $R";
|
print C "$L $NUMC$num$_NUMC $R";
|
||||||
if($ListType eq "LONG")
|
if($ListType eq "LONG")
|
||||||
@@ -1008,8 +1107,8 @@ sub output
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
chomp $note;
|
chomp $note;
|
||||||
local $Space = " " x ($maxlen - 16);
|
$Space = " " x ($maxlen - 16);
|
||||||
local $SP = " " x ($maxlen + 13);
|
$SP = " " x ($maxlen + 13);
|
||||||
#print C $LINE;
|
#print C $LINE;
|
||||||
#print C "$L $NUMC#$_NUMC " . $TIMEC . "creation date$_TIMEC$SP$R\n";
|
#print C "$L $NUMC#$_NUMC " . $TIMEC . "creation date$_TIMEC$SP$R\n";
|
||||||
print C $LINE;
|
print C $LINE;
|
||||||
@@ -1025,8 +1124,9 @@ sub output
|
|||||||
|
|
||||||
sub C
|
sub C
|
||||||
{
|
{
|
||||||
|
my(%Color, $default, $S, $Col, $NC, $T);
|
||||||
# \033[1m%30s\033[0m
|
# \033[1m%30s\033[0m
|
||||||
local %Color = ( 'black' => '0;30',
|
%Color = ( 'black' => '0;30',
|
||||||
'red' => '0;31',
|
'red' => '0;31',
|
||||||
'green' => '0;32',
|
'green' => '0;32',
|
||||||
'yellow' => '0;33',
|
'yellow' => '0;33',
|
||||||
@@ -1085,14 +1185,16 @@ sub C
|
|||||||
|
|
||||||
sub uen
|
sub uen
|
||||||
{
|
{
|
||||||
local $T = pack("u", $_[0]);
|
my($T);
|
||||||
|
$T = pack("u", $_[0]);
|
||||||
chomp $T;
|
chomp $T;
|
||||||
return $T;
|
return $T;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub ude
|
sub ude
|
||||||
{
|
{
|
||||||
local $T = unpack("u", $_[0]);
|
my($T);
|
||||||
|
$T = unpack("u", $_[0]);
|
||||||
return $T;
|
return $T;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1100,7 +1202,7 @@ sub num_bereich
|
|||||||
{
|
{
|
||||||
# $number is the one we want to delete!
|
# $number is the one we want to delete!
|
||||||
# But does it contain kommas?
|
# But does it contain kommas?
|
||||||
local $m = 0;
|
my($m,@LR,@Sorted_LR,$i);
|
||||||
if($number =~ /\,/)
|
if($number =~ /\,/)
|
||||||
{
|
{
|
||||||
# accept -d 3,4,7
|
# accept -d 3,4,7
|
||||||
@@ -1109,8 +1211,8 @@ sub num_bereich
|
|||||||
elsif($number =~ /^\d+\-\d+$/)
|
elsif($number =~ /^\d+\-\d+$/)
|
||||||
{
|
{
|
||||||
# accept -d 3-9
|
# accept -d 3-9
|
||||||
local @LR = split(/\-/,$number);
|
@LR = split(/\-/,$number);
|
||||||
local @Sorted_LR = ();
|
@Sorted_LR = ();
|
||||||
|
|
||||||
if($LR[0] > $LR[1])
|
if($LR[0] > $LR[1])
|
||||||
{
|
{
|
||||||
@@ -1141,6 +1243,19 @@ sub num_bereich
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub getdate
|
||||||
|
{
|
||||||
|
my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
|
||||||
|
$year += 1900;
|
||||||
|
$mon += 1;
|
||||||
|
$mon =~ s/^(\d)$/0$1/;
|
||||||
|
$hour =~ s/^(\d)$/0$1/;
|
||||||
|
$min =~ s/^(\d)$/0$1/;
|
||||||
|
$sec =~ s/^(\d)$/0$1/;
|
||||||
|
$mday =~ s/^(\d)$/0$1/;
|
||||||
|
return "$mday.$mon.$year $hour:$min:$sec";
|
||||||
|
}
|
||||||
|
|
||||||
sub help
|
sub help
|
||||||
{
|
{
|
||||||
print qq~
|
print qq~
|
||||||
@@ -1149,25 +1264,31 @@ HELP for interactive note $version
|
|||||||
|
|
||||||
The following commands are available:
|
The following commands are available:
|
||||||
L/l List notes. L=long, with timestamp and l=short without timestamp.
|
L/l List notes. L=long, with timestamp and l=short without timestamp.
|
||||||
You can also just hit <enter> for short list.
|
You can also just hit <enter> for short list.~;
|
||||||
|
if($TOPIC)
|
||||||
|
{
|
||||||
|
print qq~
|
||||||
|
If a "note" starts with a - instead of a number, then it is a
|
||||||
|
topic. In the brackets you will se, how many notes exists under
|
||||||
|
that specific topic. Just type the name of the topic to change
|
||||||
|
to that, it works, just like using cd on a filesystem (without the
|
||||||
|
cd command). If you type just "..", you will go to the last topic,
|
||||||
|
you were before (works like "cd ..").
|
||||||
|
You can create a new topic by creating a new note, the first line
|
||||||
|
must be the topic borderd by "$TopicSep", i.e.: "/newtopic/". The default
|
||||||
|
topic separator is "/".
|
||||||
|
You can have as many subtopics, as you like, i.e.: "/pc/games/x11/".
|
||||||
|
If you create a new note without a topic-specification, then it
|
||||||
|
will be put into the current subtopic.~;
|
||||||
|
}
|
||||||
|
print qq~
|
||||||
N Create a new note.
|
N Create a new note.
|
||||||
D Delete a note. You can either hit "d 1" or "d 1-4" or just hit "d".
|
D Delete a note. You can either hit "d 1" or "d 1-4" or just hit "d".
|
||||||
If you don't specify a number, you will be asked for.
|
If you don't specify a number, you will be asked for.
|
||||||
S Search trough the notes database. Usage is similar to Delete, use
|
S Search trough the notes database. Usage is similar to Delete, use
|
||||||
a string instead of a number to search for.
|
a string instead of a number to search for.
|
||||||
E Edit a note. Usage is similar to Delete but you can only edit note
|
E Edit a note. Usage is similar to Delete but you can only edit note
|
||||||
a time.~;
|
a time.
|
||||||
if($TOPIC)
|
|
||||||
{
|
|
||||||
print qq~
|
|
||||||
T print a list of all existing topics. You can change the actual
|
|
||||||
topic by simply typing it's name. You can create a new topic by
|
|
||||||
creating a new note, the first line must be the topic borderd by
|
|
||||||
backslashes, i.e.: "\\newtopic\\". If you type just ".." instead
|
|
||||||
of a topic, you will go to the "default" topic, which contains
|
|
||||||
all notes without a topic.~;
|
|
||||||
}
|
|
||||||
print qq~
|
|
||||||
?/H This help screen.
|
?/H This help screen.
|
||||||
Q Exit the program.
|
Q Exit the program.
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# 0.5
|
# 0.6
|
||||||
# This is a sample config for the note script
|
# This is a sample config for the note script
|
||||||
# You do not need it, if you keep the values
|
# You do not need it, if you keep the values
|
||||||
# here unchanged.
|
# here unchanged.
|
||||||
@@ -38,9 +38,13 @@
|
|||||||
# uncomment this, if you want to use always your
|
# uncomment this, if you want to use always your
|
||||||
# favorite editor (even for creating notes) instead
|
# favorite editor (even for creating notes) instead
|
||||||
# of <STDIN>
|
# of <STDIN>
|
||||||
#$ALWAYS_EDIT = "YES"
|
#$ALWAYS_EDIT = "YES";
|
||||||
|
|
||||||
|
|
||||||
|
# uncomment and edit it, if you want to use another
|
||||||
|
# editor than the default $EDITOR or as fallback vi.
|
||||||
|
#$PreferredEditor = "emacs";
|
||||||
|
|
||||||
# This option turns topic-support on or off
|
# This option turns topic-support on or off
|
||||||
# comment it out, if you don't need it
|
# comment it out, if you don't need it
|
||||||
$TOPIC = 1;
|
$TOPIC = 1;
|
||||||
|
|||||||
353
mysql-db/note
353
mysql-db/note
@@ -1,4 +1,20 @@
|
|||||||
#!/usr/bin/perl
|
#!/usr/bin/perl
|
||||||
|
# $Author: tom $ $Id: note.mysql,v 1.5 2000/02/25 20:59:30 tom Exp tom $ $Revision: 1.5 $
|
||||||
|
#
|
||||||
|
# $Log: note.mysql,v $
|
||||||
|
# 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" (MYSQL version)
|
# this is the small console program "note" (MYSQL version)
|
||||||
# It works similar to some well known GUI note programs,
|
# It works similar to some well known GUI note programs,
|
||||||
# but instead of using X11 it uses the UN*X console.
|
# but instead of using X11 it uses the UN*X console.
|
||||||
@@ -17,6 +33,38 @@
|
|||||||
# note is GPL software.
|
# note is GPL software.
|
||||||
|
|
||||||
use Mysql;
|
use Mysql;
|
||||||
|
use strict;
|
||||||
|
use Data::Dumper;
|
||||||
|
|
||||||
|
sub usage;
|
||||||
|
sub find_editor;
|
||||||
|
sub output;
|
||||||
|
sub C;
|
||||||
|
sub uen;
|
||||||
|
sub ude;
|
||||||
|
sub num_bereich;
|
||||||
|
sub getdate;
|
||||||
|
|
||||||
|
sub new;
|
||||||
|
sub edit;
|
||||||
|
sub del;
|
||||||
|
sub display;
|
||||||
|
sub list;
|
||||||
|
sub help;
|
||||||
|
sub import;
|
||||||
|
|
||||||
|
my (
|
||||||
|
$maxlen, $timelen, $TOPIC, $TYPE, $mode, $NOTEDB,
|
||||||
|
$version, $number, $CurTopic, $CurDepth, $PATH, $CONF,
|
||||||
|
$sizeof, $MAX_TIME, $PreferredEditor, %TP, $TopicSep,
|
||||||
|
$ListType, $searchstring, $dump_file, $ALWAYS_INT,
|
||||||
|
$BORDERC, $BORDER_COLOR, $_BORDERC, $NOTEC, $NOTE_COLOR,
|
||||||
|
$NUMC, $NUM_COLOR, $_NUMC, $_NOTEC, $TIMEC, $TIME_COLOR,
|
||||||
|
$_TIMEC, $TOPICC, $TOPIC_COLOR, $_TOPICC, $SetTitle, $COLOR,
|
||||||
|
$typedef, $MAX_NOTE, $MAX_TIME, @NumBlock, $ALWAYS_EDIT, $HOME,
|
||||||
|
$db, $dbname, $dbhost, $DEFAULTDBNAME, $dbuser, $USER, $dbpasswd,
|
||||||
|
$table, $fnum, $fnote, $fdate, $date
|
||||||
|
);
|
||||||
|
|
||||||
##################################
|
##################################
|
||||||
# define some default values.
|
# define some default values.
|
||||||
@@ -25,8 +73,7 @@ use Mysql;
|
|||||||
$maxlen = 20;
|
$maxlen = 20;
|
||||||
$timelen = 22;
|
$timelen = 22;
|
||||||
|
|
||||||
$date = `date +%e\".\"%m\".\"%Y\" \"%T`;
|
$date = &getdate;
|
||||||
chomp $date;
|
|
||||||
|
|
||||||
$USER = getlogin || getpwuid($<);
|
$USER = getlogin || getpwuid($<);
|
||||||
chomp $USER;
|
chomp $USER;
|
||||||
@@ -60,27 +107,18 @@ $TOPIC_COLOR = "BLACK";
|
|||||||
|
|
||||||
# Turns Topic Support on
|
# Turns Topic Support on
|
||||||
$TOPIC = 1;
|
$TOPIC = 1;
|
||||||
|
|
||||||
|
# Default topic separator: \
|
||||||
|
$TopicSep = '/';
|
||||||
|
|
||||||
|
$version = "0.6 (mysql database)";
|
||||||
|
|
||||||
|
if($TOPIC)
|
||||||
|
{
|
||||||
|
$CurDepth = 1; # the current depth inside the topic "directory" structure...
|
||||||
|
}
|
||||||
###################################
|
###################################
|
||||||
|
|
||||||
|
|
||||||
sub usage;
|
|
||||||
sub find_editor;
|
|
||||||
sub output;
|
|
||||||
sub C;
|
|
||||||
sub uen;
|
|
||||||
sub ude;
|
|
||||||
sub num_bereich;
|
|
||||||
|
|
||||||
sub new;
|
|
||||||
sub edit;
|
|
||||||
sub del;
|
|
||||||
sub display;
|
|
||||||
sub list;
|
|
||||||
sub help;
|
|
||||||
sub import;
|
|
||||||
|
|
||||||
$version = "0.5 (mysql database)";
|
|
||||||
|
|
||||||
# process command line args
|
# process command line args
|
||||||
if($ARGV[0] eq "")
|
if($ARGV[0] eq "")
|
||||||
{
|
{
|
||||||
@@ -110,7 +148,9 @@ else
|
|||||||
elsif($ARGV[0] eq "-l" || $ARGV[0] eq "--list")
|
elsif($ARGV[0] eq "-l" || $ARGV[0] eq "--list")
|
||||||
{
|
{
|
||||||
$mode = "list";
|
$mode = "list";
|
||||||
$CurTopic = $ARGV[1];
|
my @ArgTopics = split /$TopicSep/,$ARGV[1];
|
||||||
|
$CurDepth += $#ArgTopics + 1 if $ARGV[1];
|
||||||
|
$CurTopic = $ArgTopics[$#ArgTopics]; # use the last element everytime...
|
||||||
$ARGV[0] = "";
|
$ARGV[0] = "";
|
||||||
}
|
}
|
||||||
elsif($ARGV[0] eq "-L" || $ARGV[0] eq "--longlist")
|
elsif($ARGV[0] eq "-L" || $ARGV[0] eq "--longlist")
|
||||||
@@ -205,7 +245,7 @@ if(-e $CONF)
|
|||||||
|
|
||||||
|
|
||||||
# Always interactive?
|
# Always interactive?
|
||||||
if($ALWAYS_INT eq "YES")
|
if($ALWAYS_INT eq "YES" && $mode ne "dump" && $mode ne "import")
|
||||||
{
|
{
|
||||||
$mode = "interactive";
|
$mode = "interactive";
|
||||||
}
|
}
|
||||||
@@ -223,8 +263,6 @@ $_TIMEC = "</$TIME_COLOR>";
|
|||||||
$TOPICC = "<$TOPIC_COLOR>";
|
$TOPICC = "<$TOPIC_COLOR>";
|
||||||
$_TOPICC = "</$TOPIC_COLOR>";
|
$_TOPICC = "</$TOPIC_COLOR>";
|
||||||
|
|
||||||
$time = `date +%d\".\"%m\".\"%Y\" \"%T`;
|
|
||||||
chomp $time;
|
|
||||||
|
|
||||||
|
|
||||||
if($ListType ne "LONG" && $mode ne "interactive")
|
if($ListType ne "LONG" && $mode ne "interactive")
|
||||||
@@ -233,6 +271,7 @@ if($ListType ne "LONG" && $mode ne "interactive")
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ok, if still here, we got it all, now let's connect to the database
|
# ok, if still here, we got it all, now let's connect to the database
|
||||||
$db = Mysql->connect($dbhost,$dbname,$dbuser,$dbpasswd)
|
$db = Mysql->connect($dbhost,$dbname,$dbuser,$dbpasswd)
|
||||||
or die "ERROR: $Mysql::dberrstr\n";
|
or die "ERROR: $Mysql::dberrstr\n";
|
||||||
@@ -290,6 +329,7 @@ exit(0);
|
|||||||
############################### DISPLAY ##################################
|
############################### DISPLAY ##################################
|
||||||
sub display
|
sub display
|
||||||
{
|
{
|
||||||
|
my($N,$address,$buffer,$n,$t,$match,$note,$time,$num,@row,$res);
|
||||||
# display a certain note
|
# display a certain note
|
||||||
print "\n";
|
print "\n";
|
||||||
&num_bereich; # get @NumBlock from $numer
|
&num_bereich; # get @NumBlock from $numer
|
||||||
@@ -312,6 +352,7 @@ sub display
|
|||||||
############################### SEARCH ##################################
|
############################### SEARCH ##################################
|
||||||
sub search
|
sub search
|
||||||
{
|
{
|
||||||
|
my($n,$t,$match,$note,$time,$num,$buffer,@row,$res, $sqlstatement);
|
||||||
$maxlen += $timelen;
|
$maxlen += $timelen;
|
||||||
if($searchstring eq "")
|
if($searchstring eq "")
|
||||||
{
|
{
|
||||||
@@ -343,26 +384,16 @@ sub search
|
|||||||
############################### LIST ##################################
|
############################### LIST ##################################
|
||||||
sub list
|
sub list
|
||||||
{
|
{
|
||||||
|
my(@topic,@RealTopic, $i,$buffer,$t,$n,$num,$note,$time,@CurItem,$top,$in, $res, @row);
|
||||||
if($mode ne "interactive")
|
if($mode ne "interactive")
|
||||||
{
|
|
||||||
if($TOPIC && $CurTopic eq "")
|
|
||||||
{
|
|
||||||
print "List of all available topics:\n\n";
|
|
||||||
}
|
|
||||||
elsif($TOPIC && $CurTopic ne "")
|
|
||||||
{
|
|
||||||
print "List of all notes under topic \"$CurTopic\":\n\n";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
print "List of all existing notes:\n\n";
|
print "List of all existing notes:\n\n";
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
# list all available notes (number and firstline)
|
# list all available notes (number and firstline)
|
||||||
$res = $db->query("SELECT $fnum,$fnote,$fdate FROM $table ORDER BY $fnum")
|
$res = $db->query("SELECT $fnum,$fnote,$fdate FROM $table ORDER BY $fnum")
|
||||||
or die "ERROR: $Mysql::dberrstr\n";
|
or die "ERROR: $Mysql::dberrstr\n";
|
||||||
if($TOPIC && $CurTopic eq "")
|
if($TOPIC)
|
||||||
{
|
{
|
||||||
undef %TP;
|
undef %TP;
|
||||||
}
|
}
|
||||||
@@ -373,38 +404,49 @@ sub list
|
|||||||
$num = $row[0]; $n = $row[1]; $t = $row[2];
|
$num = $row[0]; $n = $row[1]; $t = $row[2];
|
||||||
if($TOPIC)
|
if($TOPIC)
|
||||||
{
|
{
|
||||||
@topic = split(/\\/,$n); # this allows us to have multiple topics (subtopics!)
|
# this allows us to have multiple topics (subtopics!)
|
||||||
if($CurTopic eq "")
|
my ($firstline,$dummy) = split /\n/, $n, 2;
|
||||||
|
if($firstline =~ /^($TopicSep)/)
|
||||||
{
|
{
|
||||||
|
@topic = split(/$TopicSep/,$firstline);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
@topic = ();
|
||||||
|
}
|
||||||
# looks like: "\topic\"
|
# looks like: "\topic\"
|
||||||
# collect:
|
# collect a list of topics under the current topic
|
||||||
if($topic[1] eq "")
|
if($topic[$CurDepth-1] eq $CurTopic && $topic[$CurDepth] ne "")
|
||||||
{
|
{
|
||||||
$topic[1] = "default";
|
if(exists $TP{$topic[$CurDepth]})
|
||||||
}
|
|
||||||
if(exists $TP{$topic[1]})
|
|
||||||
{
|
{
|
||||||
$TP{$topic[1]}++;
|
$TP{$topic[$CurDepth]}++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$TP{$topic[1]} = 1;
|
# only if the next item *is* a topic!
|
||||||
|
$TP{$topic[$CurDepth]} = 1 if(($CurDepth) <= $#topic);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
elsif($topic[$CurDepth-1] eq $CurTopic || ($topic[$CurDepth] eq "" && $CurDepth ==1))
|
||||||
|
{
|
||||||
|
# cut the topic off the note-text
|
||||||
|
if($n =~ /^($TopicSep)/)
|
||||||
|
{
|
||||||
|
$CurItem[$i]->{'note'} = $dummy;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if($topic[1] eq $CurTopic)
|
$CurItem[$i]->{'note'} = $n;
|
||||||
{
|
|
||||||
# cut the topic from the note-text
|
|
||||||
if($n =~ /^\\$CurTopic\\\n*/)
|
|
||||||
{
|
|
||||||
$n = $';
|
|
||||||
}
|
}
|
||||||
output($num, $n, $t);
|
# save for later output() call
|
||||||
}
|
$CurItem[$i]->{'num'} = $num;
|
||||||
elsif($topic[1] eq "" && $CurTopic eq "default")
|
$CurItem[$i]->{'time'} = $t;
|
||||||
|
$i++;
|
||||||
|
# use this note for building the $PATH!
|
||||||
|
if($RealTopic[0] eq "")
|
||||||
{
|
{
|
||||||
output($num, $n, $t);
|
@RealTopic = @topic;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -412,16 +454,35 @@ sub list
|
|||||||
{
|
{
|
||||||
output($num, $n, $t);
|
output($num, $n, $t);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if($TOPIC)
|
||||||
|
{
|
||||||
|
if($CurTopic ne "")
|
||||||
|
{
|
||||||
|
undef $PATH;
|
||||||
|
foreach (@RealTopic)
|
||||||
|
{
|
||||||
|
$PATH .= $_ . $TopicSep;
|
||||||
|
last if($_ eq $CurTopic);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$PATH = $TopicSep;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
|
||||||
if($TOPIC && $CurTopic eq "")
|
|
||||||
{
|
|
||||||
# we are at top level, print a list of topics...
|
# we are at top level, print a list of topics...
|
||||||
foreach $top (sort(keys %TP))
|
foreach $top (sort(keys %TP))
|
||||||
{
|
{
|
||||||
print C " => " . $BORDERC. "[" . $_BORDERC . $TOPICC
|
output("-", " => ". $top . "$TopicSep ($TP{$top} notes)",
|
||||||
. $top . $_TOPICC . $BORDERC . "]"
|
" Sub Topic ");
|
||||||
.$_BORDERC ." ($TP{$top} notes)\n";
|
}
|
||||||
|
#print Dumper(@CurItem);
|
||||||
|
for($in=0;$in<$i;$in++)
|
||||||
|
{
|
||||||
|
output( $CurItem[$in]->{'num'},
|
||||||
|
$CurItem[$in]->{'note'},
|
||||||
|
$CurItem[$in]->{'time'} );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -431,6 +492,8 @@ sub list
|
|||||||
############################### NEW ##################################
|
############################### NEW ##################################
|
||||||
sub new
|
sub new
|
||||||
{
|
{
|
||||||
|
my($TEMP,$editor, $time, $note, $WARN, $c, $line, $num, $te, $me, $buff,$buffer, @topic,$n,$t,$res, @row,$sqlstatement);
|
||||||
|
$time = &getdate;
|
||||||
if($ALWAYS_EDIT eq "YES")
|
if($ALWAYS_EDIT eq "YES")
|
||||||
{
|
{
|
||||||
$TEMP = "/tmp/note.$$";
|
$TEMP = "/tmp/note.$$";
|
||||||
@@ -458,7 +521,7 @@ sub new
|
|||||||
$c = 0;
|
$c = 0;
|
||||||
while(<E>)
|
while(<E>)
|
||||||
{
|
{
|
||||||
$_ =~ s/'/\\'/g;
|
$_ =~ s/'/`/g;
|
||||||
$note = $note . $_;
|
$note = $note . $_;
|
||||||
}
|
}
|
||||||
chomp $note;
|
chomp $note;
|
||||||
@@ -469,8 +532,8 @@ sub new
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
$note = "";
|
$note = "";
|
||||||
local $line = "";
|
$line = "";
|
||||||
#local $num = 0;
|
#$num = 0;
|
||||||
# create a new note
|
# create a new note
|
||||||
print "enter the text of the note, end with .\n";
|
print "enter the text of the note, end with .\n";
|
||||||
do
|
do
|
||||||
@@ -493,10 +556,10 @@ sub new
|
|||||||
$number++;
|
$number++;
|
||||||
if($TOPIC && $CurTopic ne "")
|
if($TOPIC && $CurTopic ne "")
|
||||||
{
|
{
|
||||||
@topic = split(/\\/,$note);
|
@topic = split(/$TopicSep/,$note);
|
||||||
if($topic[1] eq "")
|
if($topic[1] eq "")
|
||||||
{
|
{
|
||||||
$note = "\\$CurTopic\\\n$note";
|
$note = $PATH . "\n$note";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -504,7 +567,6 @@ sub new
|
|||||||
$note =~ s/\\/\\\\/g;
|
$note =~ s/\\/\\\\/g;
|
||||||
|
|
||||||
$sqlstatement = "INSERT INTO $table VALUES ($number,'$note','$date')";
|
$sqlstatement = "INSERT INTO $table VALUES ($number,'$note','$date')";
|
||||||
|
|
||||||
$db->query($sqlstatement)
|
$db->query($sqlstatement)
|
||||||
or die "ERROR: $Mysql::dberrstr\n";
|
or die "ERROR: $Mysql::dberrstr\n";
|
||||||
|
|
||||||
@@ -516,21 +578,22 @@ sub new
|
|||||||
############################### DELETE ##################################
|
############################### DELETE ##################################
|
||||||
sub del
|
sub del
|
||||||
{
|
{
|
||||||
|
my($i,@count, $setnum, $buff, %Merk, $num, $note, $pos, $droped, $buffer, $sqlstatement,$res, @row, $ERR);
|
||||||
# delete a note
|
# delete a note
|
||||||
&num_bereich; # get @NumBlock from $number
|
&num_bereich; # get @NumBlock from $number
|
||||||
|
|
||||||
foreach $N (@NumBlock)
|
foreach $_ (@NumBlock)
|
||||||
{
|
{
|
||||||
$sqlstatement = "DELETE FROM $table WHERE $fnum = $N";
|
$sqlstatement = "DELETE FROM $table WHERE $fnum = $_";
|
||||||
$res = $db->query($sqlstatement) or $ERR = $Mysql::dberrstr;
|
$res = $db->query($sqlstatement) or $ERR = $Mysql::dberrstr;
|
||||||
# do not exit if an error occurs - good for int mode!
|
# do not exit if an error occurs - good for int mode!
|
||||||
if($ERR)
|
if($ERR)
|
||||||
{
|
{
|
||||||
print "no note with number $N found!\n";
|
print "no note with number $_ found!\n";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
print "note number $N has been deleted.\n";
|
print "note number $_ has been deleted.\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
# recount the notenumbers:
|
# recount the notenumbers:
|
||||||
@@ -555,7 +618,9 @@ sub del
|
|||||||
############################### EDIT ##################################
|
############################### EDIT ##################################
|
||||||
sub edit
|
sub edit
|
||||||
{
|
{
|
||||||
|
my($time, $editor, $TEMP, $address, $n, $buff, $c, $note, $t, $buffer, $num, $sqlstatement, $res, @row, $match);
|
||||||
# edit a note
|
# edit a note
|
||||||
|
$time = &getdate;
|
||||||
$sqlstatement = "SELECT $fnote FROM $table WHERE $fnum = $number";
|
$sqlstatement = "SELECT $fnote FROM $table WHERE $fnum = $number";
|
||||||
$res = $db->query($sqlstatement) or die "ERROR: $Mysql::dberrstr\n";
|
$res = $db->query($sqlstatement) or die "ERROR: $Mysql::dberrstr\n";
|
||||||
while(@row = $res->fetchrow)
|
while(@row = $res->fetchrow)
|
||||||
@@ -590,7 +655,7 @@ sub edit
|
|||||||
$c = 0;
|
$c = 0;
|
||||||
while(<NOTE>)
|
while(<NOTE>)
|
||||||
{
|
{
|
||||||
$_ =~ s/'/\\'/g;
|
$_ =~ s/'/`/g;
|
||||||
$note = $note . $_;
|
$note = $note . $_;
|
||||||
}
|
}
|
||||||
chomp $note;
|
chomp $note;
|
||||||
@@ -603,7 +668,8 @@ sub edit
|
|||||||
|
|
||||||
# we got it, now save to db
|
# we got it, now save to db
|
||||||
$sqlstatement = "UPDATE $table SET "
|
$sqlstatement = "UPDATE $table SET "
|
||||||
. "$fnote = '$note' "
|
. "$fnote = '$note', "
|
||||||
|
. "$fdate = '$time' "
|
||||||
. "WHERE $fnum = $number";
|
. "WHERE $fnum = $number";
|
||||||
$db->query($sqlstatement) or die "ERROR: $Mysql::dberrstr\n";
|
$db->query($sqlstatement) or die "ERROR: $Mysql::dberrstr\n";
|
||||||
|
|
||||||
@@ -613,6 +679,7 @@ sub edit
|
|||||||
|
|
||||||
sub dump
|
sub dump
|
||||||
{
|
{
|
||||||
|
my($buffer,$num, $note, $time,$n, $t, $res, @row);
|
||||||
# $dump_file
|
# $dump_file
|
||||||
open (DUMP, ">$dump_file") or die "could not open $dump_file\n";
|
open (DUMP, ">$dump_file") or die "could not open $dump_file\n";
|
||||||
select DUMP;
|
select DUMP;
|
||||||
@@ -633,10 +700,11 @@ sub dump
|
|||||||
|
|
||||||
sub import
|
sub import
|
||||||
{
|
{
|
||||||
|
my($buff, $num,$te, $me, $start, $complete, $dummi, $n, $t, $buffer, $note, $time, $date);
|
||||||
# open $dump_file and import it into the notedb
|
# open $dump_file and import it into the notedb
|
||||||
open (DUMP, "<$dump_file") or die "could not open $dump_file\n";
|
open (DUMP, "<$dump_file") or die "could not open $dump_file\n";
|
||||||
local $complete=0;
|
$complete=0;
|
||||||
local $start = 0;
|
$start = 0;
|
||||||
while(<DUMP>)
|
while(<DUMP>)
|
||||||
{
|
{
|
||||||
chomp $_;
|
chomp $_;
|
||||||
@@ -684,47 +752,51 @@ sub import
|
|||||||
|
|
||||||
sub interactive
|
sub interactive
|
||||||
{
|
{
|
||||||
|
my($maxlen_save, $B, $BB, $menu, $char, @LastTopic);
|
||||||
$maxlen_save = $maxlen;
|
$maxlen_save = $maxlen;
|
||||||
# create menu:
|
# create menu:
|
||||||
local $B = "<blackI>";
|
$B = "<blackI>";
|
||||||
local $BB = "</blackI>";
|
$BB = "</blackI>";
|
||||||
local $menu = "[" . $B . "L" . $BB . " List "
|
$menu = "[" . $B . "L" . $BB . " List "
|
||||||
. $B . "N" . $BB . " New "
|
. $B . "N" . $BB . " New "
|
||||||
. $B . "D" . $BB . " Delete "
|
. $B . "D" . $BB . " Delete "
|
||||||
. $B . "S" . $BB . " Search "
|
. $B . "S" . $BB . " Search "
|
||||||
. $B . "E" . $BB . " Edit ";
|
. $B . "E" . $BB . " Edit "
|
||||||
if($TOPIC)
|
. $B . "?" . $BB . " Help "
|
||||||
{
|
|
||||||
$menu .= $B . "T" . $BB . " Topic ";
|
|
||||||
}
|
|
||||||
$menu .= $B . "?" . $BB . " Help "
|
|
||||||
. $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;
|
||||||
print "\n";
|
print "\n";
|
||||||
&list;
|
&list;
|
||||||
|
undef $SetTitle;
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
$time = `date +%d\".\"%m\".\"%Y\" \"%T`;
|
|
||||||
chomp $time;
|
|
||||||
$ListType = "";
|
$ListType = "";
|
||||||
$maxlen = $maxlen_save;
|
$maxlen = $maxlen_save;
|
||||||
|
if($CurDepth > 2)
|
||||||
|
{
|
||||||
|
print C $menu . $TOPICC . "../" . $CurTopic . $_TOPICC . ">";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
print C $menu . $TOPICC . $CurTopic . $_TOPICC . ">";
|
print C $menu . $TOPICC . $CurTopic . $_TOPICC . ">";
|
||||||
|
}
|
||||||
|
|
||||||
# endless until user press "Q" or "q"!
|
# endless until user press "Q" or "q"!
|
||||||
$char = <STDIN>;
|
$char = <STDIN>;
|
||||||
chomp $char;
|
chomp $char;
|
||||||
if($char =~ /^\d+/)
|
if($char =~ /^\d+/)
|
||||||
{
|
{
|
||||||
# display notes
|
# display notes
|
||||||
|
$maxlen += $timelen;
|
||||||
$number = $char;
|
$number = $char;
|
||||||
&display;
|
&display;
|
||||||
|
undef $SetTitle;
|
||||||
}
|
}
|
||||||
elsif($char =~ /^n$/i)
|
elsif($char =~ /^n$/i)
|
||||||
{
|
{
|
||||||
# create a new one
|
# create a new one
|
||||||
$time = `date +%d\".\"%m\".\"%Y\" \"%T`;
|
|
||||||
chomp $time;
|
|
||||||
&new;
|
&new;
|
||||||
}
|
}
|
||||||
elsif($char =~ /^l$/ || $char =~ /^$/)
|
elsif($char =~ /^l$/ || $char =~ /^$/)
|
||||||
@@ -766,8 +838,6 @@ sub interactive
|
|||||||
elsif($char =~ /^e\s+(\d+\-*\,*\d*)/i)
|
elsif($char =~ /^e\s+(\d+\-*\,*\d*)/i)
|
||||||
{
|
{
|
||||||
# edit one!
|
# edit one!
|
||||||
$time = `date +%d\".\"%m\".\"%Y\" \"%T`;
|
|
||||||
chomp $time;
|
|
||||||
$number = $1;
|
$number = $1;
|
||||||
&edit;
|
&edit;
|
||||||
}
|
}
|
||||||
@@ -803,19 +873,10 @@ sub interactive
|
|||||||
print "\n\ngood bye\n";
|
print "\n\ngood bye\n";
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
elsif($char =~ /^t$/i && $TOPIC)
|
|
||||||
{
|
|
||||||
$SaveTopic = $CurTopic;
|
|
||||||
$CurTopic = "";
|
|
||||||
#$maxlen += $timelen;
|
|
||||||
print "\n";
|
|
||||||
&list;
|
|
||||||
$CurTopic = $SaveTopic;
|
|
||||||
undef $SetTitle;
|
|
||||||
}
|
|
||||||
elsif($char =~ /^\.\.$/)
|
elsif($char =~ /^\.\.$/)
|
||||||
{
|
{
|
||||||
$CurTopic = "default";
|
$CurDepth-- if ($CurDepth > 1);
|
||||||
|
$CurTopic = $LastTopic[$CurDepth];
|
||||||
$maxlen += $timelen;
|
$maxlen += $timelen;
|
||||||
print "\n";
|
print "\n";
|
||||||
&list;
|
&list;
|
||||||
@@ -826,8 +887,10 @@ sub interactive
|
|||||||
# unknown
|
# unknown
|
||||||
if(exists $TP{$char})
|
if(exists $TP{$char})
|
||||||
{
|
{
|
||||||
|
$LastTopic[$CurDepth] = $CurTopic;
|
||||||
$CurTopic = $char;
|
$CurTopic = $char;
|
||||||
$maxlen += $timelen;
|
$maxlen += $timelen;
|
||||||
|
$CurDepth++;
|
||||||
print "\n";
|
print "\n";
|
||||||
&list;
|
&list;
|
||||||
undef $SetTitle;
|
undef $SetTitle;
|
||||||
@@ -877,11 +940,13 @@ Options:
|
|||||||
exit 1;
|
exit 1;
|
||||||
}
|
}
|
||||||
sub find_editor {
|
sub find_editor {
|
||||||
return $ENV{"VISUAL"} || $ENV{"EDITOR"} || "vim" || "vi" || "pico";
|
return $PreferredEditor || $ENV{"VISUAL"} || $ENV{"EDITOR"} || "vim" || "vi" || "pico";
|
||||||
}
|
}
|
||||||
|
#/
|
||||||
sub output
|
sub output
|
||||||
{
|
{
|
||||||
|
my($SSS, $LINE, $num, $note, $time, $TYPE, $L, $LONGSPC, $R, $PathLen, $SP, $title, $CUTSPACE,
|
||||||
|
$len, $diff, $Space);
|
||||||
# 0 = Num, 1 = Note, 2 = Time
|
# 0 = Num, 1 = Note, 2 = Time
|
||||||
if($ListType ne "LONG")
|
if($ListType ne "LONG")
|
||||||
{
|
{
|
||||||
@@ -891,27 +956,28 @@ sub output
|
|||||||
{
|
{
|
||||||
$SSS = "-" x ($maxlen + 31);
|
$SSS = "-" x ($maxlen + 31);
|
||||||
}
|
}
|
||||||
local $LINE = "$BORDERC $SSS $_BORDERC\n";
|
$LINE = "$BORDERC $SSS $_BORDERC\n";
|
||||||
local $num = $_[0];
|
$num = $_[0];
|
||||||
local $note = $_[1];
|
$note = $_[1];
|
||||||
local $time = $_[2];
|
$time = $_[2];
|
||||||
local $TYPE = $_[3];
|
$TYPE = $_[3];
|
||||||
local $L = $BORDERC . "[" . $_BORDERC;
|
$L = $BORDERC . "[" . $_BORDERC;
|
||||||
local $LONGSPC = " " x (22 + 3);
|
$LONGSPC = " " x (22 + 3);
|
||||||
local $R = $BORDERC . "]" . $_BORDERC;
|
$R = $BORDERC . "]" . $_BORDERC;
|
||||||
|
$PathLen = length($PATH); # will be ZERO, if not in TOPIC mode!
|
||||||
if($TYPE ne "SINGLE")
|
if($TYPE ne "SINGLE")
|
||||||
{
|
{
|
||||||
if(!$SetTitle)
|
if(!$SetTitle)
|
||||||
{
|
{
|
||||||
local $SP = "";
|
$SP = "";
|
||||||
# print only if it is the first line!
|
# print only if it is the first line!
|
||||||
if($ListType ne "LONG")
|
if($ListType ne "LONG")
|
||||||
{
|
{
|
||||||
$SP = " " x ($maxlen-2 - $timelen);
|
$SP = " " x ($maxlen-2 - $timelen - $PathLen);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$SP = " " x ($maxlen-2);
|
$SP = " " x ($maxlen-2 - $PathLen);
|
||||||
}
|
}
|
||||||
print C $LINE;
|
print C $LINE;
|
||||||
|
|
||||||
@@ -924,22 +990,36 @@ sub output
|
|||||||
{
|
{
|
||||||
print $LONGSPC;
|
print $LONGSPC;
|
||||||
}
|
}
|
||||||
|
if($TOPIC)
|
||||||
|
{
|
||||||
|
print C $TOPICC . "$PATH $_TOPICC$SP$R\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
print C $NOTEC . "note$_NOTEC$SP$R\n";
|
print C $NOTEC . "note$_NOTEC$SP$R\n";
|
||||||
|
}
|
||||||
|
|
||||||
print C $LINE;
|
print C $LINE;
|
||||||
$SetTitle = 1;
|
$SetTitle = 1;
|
||||||
}
|
}
|
||||||
local $title = "";
|
$title = "";
|
||||||
$CUTSPACE = " " x $maxlen;
|
$CUTSPACE = " " x $maxlen;
|
||||||
$note =~ s/\n/$CUTSPACE/g;
|
$note =~ s/\n/$CUTSPACE/g;
|
||||||
local $len = length($note);
|
$len = length($note);
|
||||||
if($len < $maxlen-3)
|
if($len < $maxlen-3)
|
||||||
{
|
{
|
||||||
local $diff = $maxlen - $len;
|
$diff = $maxlen - $len;
|
||||||
local $Space = " " x $diff;
|
$Space = " " x $diff;
|
||||||
|
if($num eq "-")
|
||||||
|
{
|
||||||
|
$title = $BORDERC . $TOPICC . "\"" . $note . "\"" . $_TOPICC . $Space . "$_BORDERC";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
$title = $BORDERC . $NOTEC . "\"" . $note . "\"" . $_NOTEC . $Space . "$_BORDERC";
|
$title = $BORDERC . $NOTEC . "\"" . $note . "\"" . $_NOTEC . $Space . "$_BORDERC";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$title = substr($note,0,$maxlen - 3);
|
$title = substr($note,0,$maxlen - 3);
|
||||||
@@ -959,8 +1039,8 @@ sub output
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
chomp $note;
|
chomp $note;
|
||||||
local $Space = " " x ($maxlen - 16);
|
$Space = " " x ($maxlen - 16);
|
||||||
local $SP = " " x ($maxlen + 13);
|
$SP = " " x ($maxlen + 13);
|
||||||
#print C $LINE;
|
#print C $LINE;
|
||||||
#print C "$L $NUMC#$_NUMC " . $TIMEC . "creation date$_TIMEC$SP$R\n";
|
#print C "$L $NUMC#$_NUMC " . $TIMEC . "creation date$_TIMEC$SP$R\n";
|
||||||
print C $LINE;
|
print C $LINE;
|
||||||
@@ -976,8 +1056,9 @@ sub output
|
|||||||
|
|
||||||
sub C
|
sub C
|
||||||
{
|
{
|
||||||
|
my(%Color, $default, $S, $Col, $NC, $T);
|
||||||
# \033[1m%30s\033[0m
|
# \033[1m%30s\033[0m
|
||||||
local %Color = ( 'black' => '0;30',
|
%Color = ( 'black' => '0;30',
|
||||||
'red' => '0;31',
|
'red' => '0;31',
|
||||||
'green' => '0;32',
|
'green' => '0;32',
|
||||||
'yellow' => '0;33',
|
'yellow' => '0;33',
|
||||||
@@ -1036,22 +1117,25 @@ sub C
|
|||||||
|
|
||||||
sub uen
|
sub uen
|
||||||
{
|
{
|
||||||
local $T = pack("u", $_[0]);
|
my($T);
|
||||||
|
$T = pack("u", $_[0]);
|
||||||
chomp $T;
|
chomp $T;
|
||||||
return $T;
|
return $T;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub ude
|
sub ude
|
||||||
{
|
{
|
||||||
local $T = unpack("u", $_[0]);
|
my($T);
|
||||||
|
$T = unpack("u", $_[0]);
|
||||||
return $T;
|
return $T;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub num_bereich
|
sub num_bereich
|
||||||
{
|
{
|
||||||
|
my($m,@LR,@Sorted_LR,$i);
|
||||||
# $number is the one we want to delete!
|
# $number is the one we want to delete!
|
||||||
# But does it contain kommas?
|
# But does it contain kommas?
|
||||||
local $m = 0;
|
$m = 0;
|
||||||
if($number =~ /\,/)
|
if($number =~ /\,/)
|
||||||
{
|
{
|
||||||
# accept -d 3,4,7
|
# accept -d 3,4,7
|
||||||
@@ -1060,8 +1144,8 @@ sub num_bereich
|
|||||||
elsif($number =~ /^\d+\-\d+$/)
|
elsif($number =~ /^\d+\-\d+$/)
|
||||||
{
|
{
|
||||||
# accept -d 3-9
|
# accept -d 3-9
|
||||||
local @LR = split(/\-/,$number);
|
@LR = split(/\-/,$number);
|
||||||
local @Sorted_LR = ();
|
@Sorted_LR = ();
|
||||||
|
|
||||||
if($LR[0] > $LR[1])
|
if($LR[0] > $LR[1])
|
||||||
{
|
{
|
||||||
@@ -1091,6 +1175,19 @@ sub num_bereich
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub getdate
|
||||||
|
{
|
||||||
|
my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
|
||||||
|
$year += 1900;
|
||||||
|
$mon += 1;
|
||||||
|
$mon =~ s/^(\d)$/0$1/;
|
||||||
|
$hour =~ s/^(\d)$/0$1/;
|
||||||
|
$min =~ s/^(\d)$/0$1/;
|
||||||
|
$sec =~ s/^(\d)$/0$1/;
|
||||||
|
$mday =~ s/^(\d)$/0$1/;
|
||||||
|
return "$mday.$mon.$year $hour:$min:$sec";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
sub help
|
sub help
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -4,3 +4,5 @@ CREATE TABLE note (
|
|||||||
date text,
|
date text,
|
||||||
PRIMARY KEY (number)
|
PRIMARY KEY (number)
|
||||||
);
|
);
|
||||||
|
# sample grant statement:
|
||||||
|
#GRANT ALL PRIVILEGES ON tom_note TO tom@localhost IDENTIFIED BY 'password';
|
||||||
|
|||||||
Reference in New Issue
Block a user