TLINDEN 332db5a3dd CHANGED: Moved from @ARGV-parsing to Getopt::Long, adding options is now
much easier and I do now understand my own code ;-)
ADDED:          --raw, the "Raw Mode", which turns off any formatting of output.
2012-02-10 20:14:49 +01:00
2012-02-10 19:58:52 +01:00

note 1.0.4 by Thomas Linden, 12/05/2000


Introduction
============

	This is a small console program written in
	perl, which allows you to manage notes similar
	to programs like "knotes" from commandline.

	This version is completely rewritten and it is
	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:
		o NOTEDB::binary - this is the default backend
		  and uses a binary file to store your notes.
		o NOTEDB::mysql  - this backend uses a mysql
		  database to store your notes. You can switch
		  easily to another DBMS since this module uses
		  the Perl standard module "DBI" for database-
		  access. See below for more info on this topic!


Requirements
============

	You need the following things:
		o perl installed (5.004x)
		o The module IO::Seekable and Fcntl, which should be 
		  already installed with your perl distributuion if
		  you want to use the binary database backend.
		o DBI module and DBI::mysql if you want to use the 
		  mysql database backend.
		o Getopt::Long



Installation
============

	Unpack the tar-ball and issue the command:
	$ perl Makefile.PL
	It will ask you a few questions about file destinations.
	The script will find itself the proper destinations for
	the files. So, if you agree with it, simply press ENTER.
	However, you may decide to use other destinations. In this
	case, enter it, when asked. This maybe usefull, if you are
	installing it in your ome-directory and if you are not root! 

	For installation instructions for the mysql database installation
	see mysql/README.

	If want to use another SQL database, i.e. postgresql then set
	the option "$DRIVER" to the name of the responding DBI-driver
	and create a symlink of this name like this:
	/usr/lib/perl5/siteperl/NOTEDB $ ln -s mysql.pm oracle.pm
	The functionality is the same, but not the name!



Configuration
=============

	This version of note doesn't neccessarily need
	a configuration file. But you can have one and change
	some default values. Take a look to the file config/noterc
	provided with this tarball. There are detailed instructions
	about every available parameter.
	Simply copy this file into your home-directory and name it
	.noterc
	If you decide not to use the default database backend (a binary
	file), you will *need* a configuration!



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 (the length is by default limited to 4096 bytes,
	which you can change from your config file if you are using
	the binary backend, therwise there is no limitation).
	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. If topic-support is
	turned on (which is by default), then all subtopics under the 
	current topic will be displayed first.
	If you want to get a listing of all
	If you want to see the timestamps, use "-L" instead of "-l". 
	Read more about topics below in the section "Topics".
	You can also specify the topic which notes you want to see:
	"-l mytopic" does the trick.
	Additional, you might want to get an overview of your topic-
	strcture. You can use the command "-t" in this case, which
	will display a tree-view of your tpic-structure. You can
	use the command "-T" if you want to see the notes under each
	topic too. "-T" will also show the number of each note.

	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 a note in the middle or the beginning of
	the database will be deleted, note will recount the other
	existent notes. For example there are 3 notes, number 1, 2
	and 3. If you delete number 2, then number 3 will become
	number 2.
	You can also make use of the extended delete-syntax:
	To delete note 1 and 2, use "-d 1,2"
	To delete note 1,2 and 3, use "-d 1-3".

	If you cannot remember, which note you are looking for, you
	can use the search capability of note: "note -s <searchstring>".
	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.

	Instead of using note from the commandline you can use the
	interactive mode. Run note with "note -i". If you need assistance
	type "?" or "h" at the ">" prompt. The interactive mode
	provides you the most functions of note.

	You can also dump the contents of your note-database into a 
	ASCII-textfile(-D). You can use this file later to import it into
	your note-database(-I). This is usefull, if you want quickly trans-
	fer your notes from one host to another (i.e. you could mail
	your note-dump form your office to home and import it there
	for further use).
	The dumps from the two versions of note are in the same format.
	Using dumps it is also possible to reinitialize your database. You
	can use the "-o" switch whcih causes note to overwrite your existing 
	database. This is very handy if you changed heavily your config. And 
	it is required, if you changed: encryption, db-driver, (binary-format)
	and the password. You can use the following command for reinitializing:
		$ note -D - | note -o -I -
	What the hell, does it?! Step by step:
		o "note -D -" creates a note-database dump and prints it out
		  to stantdard output.
		o "|" this is the shell's pipe command. It does take the output
		  of the left program and gives it to the right progrem as standard
		  input.
		o "note -o -I -" imports a note-database dump from standard input
		  and overwrites an existing database.
	Before you use the "-o" switch, I consider yuo to make a backup!




Topics
======

	If topic-support is turned on (which is by default), the various 
	notes are sorted under various topics. There is no special database
	field for the topic. Instead the topic will be stored right in the
	note.
	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), 
	then note will consider it as the topic of this certain note. For examle:
	/TodoList/
	If you are using topics, no data after the topic is allowed, if there	
	is any text, note will consider it as a subtopic! Therefore, don't for-
	get to put a newline after the topic-line.
	
	If you are in interactive mode, you can "cd" to a different note simply
	by typing it's name at the command-prompt, or you can use the well-known
	syntax "cd topic". 
	The list-command will only show you notes under this topic. If you create
	a new note, it will automagically inserted under the current topic (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
	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
	new topic with one note in it.

	You can create as many subtopics as you like, the format is similar to a 
	filesystem-path. An example, say, you want to create such a structure:
	
	(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
	edit it and insert at the first line the above mentioned construction.

	Note: 	Please don't forget the prepending and appending a slash of a topic. 
		You will get strange results without it!



Scripting
=========

	Since version 1.0.3 there are some additions which allows you to use note in 
	scripts, without user-interaction. You might run a special script as cronjob,
	which adds a note under a certain topic every week. Or the like.

	Here are the possibilies you have:
	
	You can add a new note through a pipe, another commands output becomes
	note's input:
		$ cat /var/spool/news/daily | note -
	This command adds the content of a file "daily" as a new note. Note the dash.
	it stands for "Standard Input". Note will be completely silent and it will not 
	ask for something.

	Suppose you are using encryption. You might wonder, how note will get your 
	passphrase? The solution: You need to set up an environment variable which 
	contains the password:
		$ export NOTE_PASSWD=secret
	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
	turns note into raw mode being silent, which means it will only print the
	data without any formatting. Raw mode is available for list and display,
	since it makes no sense, interactive mode doe not support raw mode.


	


Format of the notedb (binary backend)
=====================================

	The database where the notes are stored is a binary file of
	the following format:
	It consists of three fixed length fields per entry. The fields
	have the following types:
		o Number: Integer (1 byte)
		o Note:   String (default 1024 bytes)
		o Time:   String (default 64 bytes)
	You can change the sizes of the fields "Note" and "Time" in
	the configfile "~/.noterc". If it does not exist, the above
	defaults will be used.
	If the data to be stored is smaller then the size of the field,
	it will be filled with ZERO's ("\0"). The Note and the Time
	fields will be uuencoded before storage. Of course, this is
	no security, never mind...



The note-database (mysql backend)
=================================
	
	The sql-database for the mysql version has the following design:
	+--------+---------+------+-----+---------+----------------+
	| Field  | Type    | Null | Key | Default | Extra          |
	+--------+---------+------+-----+---------+----------------+
	| number | int(10) |      | PRI | 0       | auto_increment |
	| note   | text    | YES  |     | NULL    |                |
	| date   | text    | YES  |     | NULL    |                |
	+--------+---------+------+-----+---------+----------------+



Format of the ASCII-dump file (note -D)
=======================================

	The dump of a note-database (if you use note -D) has the following
	format:
	
	--- snip ---
	Number: 1
	Timestamp: 14.01.2000 00:25:01
	This is a sample text
	in a sample note.

	Number: 2
	Timestamp: 14.01.2000 02:37:40
	And this is another sample
	of a note.
	--- snip ---
	
	You can reimport a dump into your note-database with "note -I <file>"
	Existing notes will not overwritten, note will append the imported
	data to your note-database.




Security
========

	If you are using the MySQL driver, refer to the mysql
	manual for more informations about security of mysql databases:
	http://www.mysql.org/Manual_chapter/manual_Privilege_system.html
	
	If you are using notes proprietary binary driver, then
	the permission 0600 of the file "~/.notedb" is strongly required!

	Additional, you can turn on encryption from the config file.
	Simply set $USE_CRYPT to "YES". Please note, that you need
	to decide, if you want to use encryption before the first use
	of note! If have already a note database and want to "migrate"	
	to encryption, I suggest you to follow the directions in the 
	file UPGRADE!

	You can choose from different encryption algorythms. The default
	is IDEA, but DES or BLOWFISH is also possible. You need to have
	installed the following additional perl-modules on your system:
		MD5
		Crypt::IDEA
		Crypt::DES
		Crypt::CBC

	After turning on encryption, note will ask you for a passphrase
	everytime it runs! It will *not* store this passphrase!
	So, don't forget it! Be careful!
	
	Once note have encrypted some data using this passphrase, you 
	cannot simply switch to another passphrase, because all data
	within the database needs to be encrypted using the same passphrase!
	If you want to change the passphrase for any reason, please read
	the file UPGRADE and follow it's directions!
	Someday I will add a "change passwd" function, which will do all
	these things for you. Someday, I said...
	For now you can use the "re-initialze database" functionality, mentioned
	earlier in the "Usage" section (at the end of the section).
	
	Note: To make sure, the encrypted data can be stored properly,
	      it will be uuencoded after encryption.
	
	Note: *If* you forgot your passphrase and *if* you don't have
	      a backup of your database without encryption, PLEASE
	      don't bother me with "helpme" emails! If you don't know
	      the phrase, then the data can't be decrypted. Even if it
	      is possible - I am not responsible for that!
	
	Note: How does note know, if the passphrase was incorrect? It uses the
	      specified phrase and encodes at least one note (the first one)
	      and checks if the decrypted timestamp field matches the following
	      expression: "^\d+\.\d+". Translated from perl to human:
	      the timestamp must begin with minimum one digit (possibly more),
	      followed by one dot, followed by minimum one digit (possibly more).
	      Chances are bad, that a wrong passphrase will cause a timestamp
	      matching the rule above. If you have other experiences, please
	      drop me a mail!	


Comments
========

	You can send any comments to Thomas Linden <tom@daemon.de>.
	If you find a bug or if you have a suggestion for improvement of the script
	feel free to send me a patch ;-)



License
=======

	This script comes with absolutely NO WARRANTY. It is distributed under the
	terms of the GNU General Public License. Use it at your own risk :-)
	You can read the complete GPL at: http://www.gnu.org/copyleft/gpl.html



Author and Copyright
====================

	The author is Thomas Linden.
	note is Copyright of Thomas Linden.




Last changed
============

	12/05/2000	
Description
No description provided
Readme 785 KiB
Languages
Perl 98.8%
Shell 1.2%