commit b4432f2922e0b1c8562e2b28e8697dcb807f6143 Author: TLINDEN Date: Fri Feb 10 19:58:52 2012 +0100 first commit diff --git a/README b/README new file mode 100644 index 0000000..7f06dab --- /dev/null +++ b/README @@ -0,0 +1,140 @@ +note 0.1 by Thomas Linden, 1999 + + +Introduction +============ + + This is a small console program written in + perl, which allows you to manage notes similar + to programs like "knotes" from commandline. + + You can add, edit, list and delete as many notes + as you want. The notes are stored in a mysql + database. You might think, "what an overkill...", + but doing it this way provides some important + advantages: + o data integrity + o no need of another proprietary file format + o no new engine to maintain this file format + o speed + o portability + o availability + ... + + +Requirements +============ + + You need the following things: + o perl installed (5.004x) + o mysql database installed and running + o Mysql perlmodule (you can find it on + http://www.mysql.org) PLEASE NOTE: + It needs the Module "Mysql". Newer versions + are DBI, which you can also use to access + mysql databases. If you want to use it, you + have to rewrite the program. Please let me + know, if you did it :-) + o permissions to create a new database and + to write data to this database. + + + +Installation +============ + + First, make sure all these things above are ok. + You can use the script "install.sh" to create a new + database and the table structure. You might edit + the script before running it. + + If you getting trouble, i.e. if you have not the + required permissions to do that, please make sure, + you can. + As user root, you have to give your username the + neccessary permissions. Please refer to the mysql + documentation, how to do that. + After that repeat the step above. + + As root, copy the perl-script "note" to /usr/bin. + + This should be all. + + + +Configuration +============= + + If you created the database with install.sh, you + do not need to do anything further. Simply run + "note" without any commandline parameters. It will + create a configfile ~/.noterc for you. + You might take a look to this file and change something, + if neccessary. + + + + +Usage +===== + + If you don't know, how to run note, try "note -h" first. + It will tell you all available commandline options. + + To create a new note, simply run "note". You can enter + the note (there is no limitation on length of the note). + End by typing a . on a line itself. note will tell you the + number of the note. + + If you want to view the note, type "note 1", if the notenumber + was 1. + + If you want to get an overview of all notes, type "note -l". + You will get a list of all notes, containing the number, + the first line and the creation date. + + To edit a certain note, type "note -e 1". It will invoke your + editor (vi or pico). You can edit it, after saving, note + will store the changed note to the database. + + Of course you can drop a certain note: "note -d 1" deletes + note number 1. + + If you cannot remember, which note you are looking for, you + can use the search capability of note: "note -s ". + note will search the whole note database case insensitive for + an occurence of this string and tell you the number and first- + line it have. + + + + +Comments +======== + + You can send any comments to Thomas Linden . + + + + +License +======= + + This program is GPL. + + + + +Author +====== + + The author os Thomas Linden. + + + + +Last changed +============ + + 07.11.1999 + diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..49d5957 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.1 diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..c9cec31 --- /dev/null +++ b/install.sh @@ -0,0 +1,19 @@ +#!/bin/sh +# installs note + +echo "Welcome to note `cat VERSION` installation." +echo "the install script will ask you a view questions," +echo "make sure to answer them correctly!" +echo + +/bin/echo -n "creating the note database..." +NAME="_note" +DBNAME="$USER$NAME" +echo "DBNAME=$DBNAME" +mysqladmin create $DBNAME +echo "done." +/bin/echo -n "creating the table structure using defaults..." +mysql $DBNAME < sql +echo "done." + + diff --git a/note b/note new file mode 100755 index 0000000..6e647bb --- /dev/null +++ b/note @@ -0,0 +1,367 @@ +#!/usr/bin/perl +# 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 +# +# note is GPL software. + + +use Mysql; + +################################## +# define some default values. +# don't change them, instead use the config file! + +$version = "0.1"; +$date = `date +%e\".\"%m\".\"%Y\" \"%T`; +chomp $date; + +$USER = getlogin || getpwuid($<); +chomp $USER; + +$HOME = `echo \$HOME`; +chomp $HOME; + +$CONF = $HOME . "/.noterc"; + +$DEFAULTDBNAME = $USER . "_note"; +$dbhost = ""; +$dbuser = ""; +$dbpasswd = ""; +$dbname = ""; +$dbname = ""; +$searchstring = ""; +################################### + + +sub usage; +sub find_editor; + +# process command line args +if($ARGV[0] eq "") +{ + $mode = "new"; +} +else +{ + while($ARGV[0] ne "" ) + { + if($ARGV[0] =~ /\d+/) + { + # first arg is a digit! + $number = $ARGV[0]; + if($mode eq "") + { + # change mode only, if started with an option + # ($mode will be already set) + $mode = "display"; + } + $ARGV[0] = ""; + } + elsif($ARGV[0] eq "-l") + { + $mode = "list"; + $ARGV[0] = ""; + } + elsif($ARGV[0] eq "-s") + { + # searching + $mode = "search"; + $searchstring = $ARGV[1]; + $ARGV[0] = ""; + } + elsif($ARGV[0] eq "-e") + { + if($mode eq "edit") + { + # note -e -e ! + &usage; + exit(1); + } + else + { + $mode = "edit"; + shift; + } + } + elsif($ARGV[0] eq "-d") + { + if($mode eq "delete") + { + &usage; + exit(1); + } + else + { + $mode = "delete"; + shift; + } + } + elsif($ARGV[0] eq "-v" || $ARGV[0] eq "--version") + { + print "note $version\nfrom Thomas Linden \n"; + exit(0); + } + elsif($ARGV[0] eq "-h" || $ARGV[0] eq "--help") + { + &usage; + exit(0); + } + else + { + &usage; + exit(0); + } + } +} + +# Now we have the following variables set: +# $mode (delete | new | edit | list) +# $number ("", -l was given) + + +# open the configfile. + + + +if(-e $CONF) +{ + eval `cat $CONF`; +} +else +{ + # no config, create one and inform the user. + open FILE, ">$CONF" or die "Could not create $CONF!\n"; + select FILE; + print qq~\#config for note $version +\#automaticallly created by note, $date. +\#please refer to the man page for more informations! + +\#the database to be used +\$dbname = "$DEFAULTDBNAME"; + +\#the database host +\$dbhost = "localhost"; + +\#the user to connect +\$dbuser = $USER; + +\#the password to be used +\$dbpasswd = ""; + +\# db descriptors... +\$table = "note"; +\$fnum = "number"; +\$ffirst = "firstline"; +\$fnote = "note"; +\$fdate = "date"; +~; + close FILE; + select STDOUT; + print "$CONF has been created for you. Please don't forget to edit it!\n"; + exit(0); +} + +# ok, if still here, we got it all, now let's connect to the database +$db = Mysql->connect($dbhost,$dbname,$dbuser,$dbpasswd) + or die "ERROR: $Mysql::dberrstr\n"; + + +# start processing +if($mode eq "display") +{ + # display a certain note + print "\ndisplaying note number $number:\n"; + $res = $db->query("SELECT $ffirst,$fnote,$fdate FROM $table WHERE $fnum = $number") + or die "ERROR: $Mysql::dberrstr\n"; + while(@row = $res->fetchrow) + { + print "$row[0]\n$row[1]\n\nlast changed: $row[2]\n\n"; + $match = "yes"; + } + if($match eq "") + { + print "\nno note with that number found!\n\n"; + } +} +elsif($mode eq "search") +{ + if($searchstring eq "") + { + &usage; + exit(1); + } + print "\nsearching the database $dbname for \"$searchstring\"...\n\n"; + $sqlstatement = "SELECT DISTINCT $fnum,$ffirst,$fdate FROM $table WHERE " + . "$ffirst LIKE '%$searchstring%' OR $fnote LIKE '%$searchstring%'" + . " ORDER BY $fnum"; + + $res = $db->query($sqlstatement) or die "ERROR: $Mysql::dberrstr\n"; + while(@row = $res->fetchrow) + { + print "[ $row[0]\t\"$row[1]\"\t$row[2] ]\n"; + $match = "yes"; + } + if($match eq "") + { + print "\nno matching note found!\n\n"; + exit(0); + } + print "\n"; +} +elsif($mode eq "list") +{ + print "\nlisting all existing notes:\n"; + # list all available notes (number and firstline) + $res = $db->query("SELECT $fnum,$ffirst,$fdate FROM $table ORDER BY $fnum") + or die "ERROR: $Mysql::dberrstr\n"; + while(@row = $res->fetchrow) + { + print "[ $row[0]\t\"$row[1]\"\t$row[2] ]\n"; + } + print "\n"; +} +elsif($mode eq "new") +{ + # create a new note + print "\nenter the text of the note, end with .\n"; + while($linenum != 1) + { + $line = ; + $firstline = $line; + $linenum = 1; + } + do + { + $line = ; + $note = $note . $line; + } until $line eq ".\n"; + # remove the . ! + chop $note; + chop $note; + chomp $firstline; + #print "1: $firstline\n2: $note\n"; + + # since we have not number, look for the next available: + $res = $db->query("SELECT max($fnum) FROM $table") or die "ERROR: $Mysql::dberrstr\n"; + while(@row = $res->fetchrow) + { + $number = $row[0]; + } + $number++; + $sqlstatement = "INSERT INTO $table VALUES (0,$number,'$firstline','$note','$date')"; + + $db->query($sqlstatement) + or die "ERROR: $Mysql::dberrstr\n"; + + # everything ok until here! + print "note stored. it has been assigned the number $number.\n\n"; +} +elsif($mode eq "delete") +{ + # delete a note + $sqlstatement = "DELETE FROM $table WHERE $fnum = $number"; + $res = $db->query($sqlstatement) or die "ERROR: $Mysql::dberrstr\n"; + print "\nnote number $number has been deleted.\n\n"; +} +elsif($mode eq "edit") +{ + # edit a note + $sqlstatement = "SELECT $ffirst,$fnote FROM $table WHERE $fnum = $number"; + $res = $db->query($sqlstatement) or die "ERROR: $Mysql::dberrstr\n"; + while(@row = $res->fetchrow) + { + $firstline = $row[0]; + $note = $row[1]; + $match = "yes"; + } + if($match eq "") + { + print "\nno note with that number found!\n\n"; + exit(0); + } + $TEMP = "/tmp/note.$USER.$$"; + open NOTE,">$TEMP" or die "Could not open $TEMP\n"; + select NOTE; + print $firstline . "\n"; + print $note . "\n"; + close NOTE; + select STDOUT; + $editor = &find_editor; + if($editor) + { + system $editor, $TEMP; + } + else + { + print "Could not find an editor to use!\n"; + exit(0); + } + $note = ""; + open NOTE,"<$TEMP" or die "Could not open $TEMP\n"; + $c = 0; + while() + { + if($c == 0) + { + $firstline = $_; + chomp $firstline; + } + else + { + $note = $note . $_; + } + $c++; + } + chomp $note; + close NOTE; + + system "/bin/rm -f $TEMP"; + + # we got it, now save to db + $sqlstatement = "UPDATE $table SET " + . "$ffirst = '$firstline', " + . "$fnote = '$note' " + . "WHERE $fnum = $number"; + $db->query($sqlstatement) or die "ERROR: $Mysql::dberrstr\n"; + + print "\nnote number $number has been changed.\n\n"; +} +else +{ + #undefined :-( +} + + +# the end. +exit(0); + +sub usage +{ + print "\nusage: \nnote [-l | -h | -v] | [-s ] | [-e | -d ] | []\n"; + print "Options: -l lists all existing notes\n"; + print " -h displays this help screen\n"; + print " -v displays the version number\n"; + print " -s searches trough the notes database\n"; + print " -e edit note number \n"; + print " -d delete note number \n"; + print "If you specify only a number (i.e.\"note 4\"), then this note will be\n"; + print "displayed. If you run note without any parameter, it will create a\n"; + print "new note and store it.\n\n"; + + exit 1; +} +sub find_editor { + return $ENV{"VISUAL"} || $ENV{"EDITOR"} || "vim" || "vi" || "pico"; +} diff --git a/sql b/sql new file mode 100644 index 0000000..dec6864 --- /dev/null +++ b/sql @@ -0,0 +1,8 @@ +CREATE TABLE note ( + id int(10) DEFAULT '0' NOT NULL auto_increment, + number int(10), + firstline text, + note text, + date text, + PRIMARY KEY (id) +);