mirror of
https://codeberg.org/scip/note.git
synced 2025-12-16 20:21:04 +01:00
STDIN related fixes
- fixed https://rt.cpan.org/Ticket/Display.html?id=155578: adding a new entry from STDIN now works regardless of interactive seting. - added new flag -n - fixed note number argument - code reorganized
This commit is contained in:
19
Changelog
19
Changelog
@@ -1,4 +1,23 @@
|
|||||||
-*-text-*-
|
-*-text-*-
|
||||||
|
1.4.1:
|
||||||
|
Fixed https://rt.cpan.org/Ticket/Display.html?id=155578:
|
||||||
|
|
||||||
|
Feeding a new entry into note from STDIN didn't work correctly
|
||||||
|
anymore. Using the default builtin config and no config file it didn't
|
||||||
|
work at all. Now it works as one would expect. A bare - as argument
|
||||||
|
ALWAYS reads a new entry from STDIN. The same happens if one uses -n
|
||||||
|
-. In addition note now prints a message if it attempts to read from
|
||||||
|
STDIN to avoid confusion.
|
||||||
|
|
||||||
|
The parameter -n has been added to be able to force note to create a
|
||||||
|
new entry directly from commandline, regardless of any configuration.
|
||||||
|
|
||||||
|
Fixed regex to check if a note has been specified as argument. Now it
|
||||||
|
does not match a bare - anymore.
|
||||||
|
|
||||||
|
Reorganized a little code.
|
||||||
|
|
||||||
|
|
||||||
1.4.1:
|
1.4.1:
|
||||||
Fixed https://github.com/TLINDEN/note/issues/11:
|
Fixed https://github.com/TLINDEN/note/issues/11:
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# note - a perl script for maintaining notes.
|
# note - a perl script for maintaining notes.
|
||||||
|
|
||||||
This is the perl script 'note' in version 1.4.1 from 05/09/2024.
|
This is the perl script 'note' in version 1.4.2 from 24/09/2024.
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
||||||
|
|||||||
178
bin/note
178
bin/note
@@ -73,12 +73,12 @@ my (
|
|||||||
$opt_, $opt_i, $opt_r, $opt_e, $opt_d, $opt_enc,
|
$opt_, $opt_i, $opt_r, $opt_e, $opt_d, $opt_enc,
|
||||||
$opt_s, $opt_t, $opt_T, $opt_l, $opt_L, $opt_c,
|
$opt_s, $opt_t, $opt_T, $opt_l, $opt_L, $opt_c,
|
||||||
$opt_D, $opt_I, $opt_o, $opt_h, $opt_n, $opt_v,
|
$opt_D, $opt_I, $opt_o, $opt_h, $opt_n, $opt_v,
|
||||||
$opt_j,
|
$opt_j, $opt_new,
|
||||||
|
|
||||||
#
|
#
|
||||||
# set from commandline (or interactive)
|
# set from commandline (or interactive)
|
||||||
#
|
#
|
||||||
$number, $searchstring, $dump_file, $ImportType, $NewType, $Raw, $TOPIC,
|
$number, $searchstring, $dump_file, $ImportType, $StdinMode, $Raw, $TOPIC,
|
||||||
|
|
||||||
#
|
#
|
||||||
# configuration options
|
# configuration options
|
||||||
@@ -145,7 +145,7 @@ $hardparams = "(readonly|maxlen|dbdriver|useencryption|cryptmethod)";
|
|||||||
$CONF = File::Spec->catfile($ENV{HOME}, ".noterc");
|
$CONF = File::Spec->catfile($ENV{HOME}, ".noterc");
|
||||||
$USER = getlogin || getpwuid($<); chomp $USER;
|
$USER = getlogin || getpwuid($<); chomp $USER;
|
||||||
$TOPIC = 1;
|
$TOPIC = 1;
|
||||||
$VERSION = "1.4.1";
|
$VERSION = "1.4.2";
|
||||||
$CurDepth = 1; # the current depth inside the topic "directory" structure...
|
$CurDepth = 1; # the current depth inside the topic "directory" structure...
|
||||||
$maxlen = "auto";
|
$maxlen = "auto";
|
||||||
$timelen = 22;
|
$timelen = 22;
|
||||||
@@ -200,7 +200,7 @@ if ($ARGV[0] eq "") {
|
|||||||
}
|
}
|
||||||
elsif ($#ARGV == 0 && $ARGV[0] eq "-") {
|
elsif ($#ARGV == 0 && $ARGV[0] eq "-") {
|
||||||
$mode = "new";
|
$mode = "new";
|
||||||
$NewType = 1; # read from STDIN until EOF
|
$StdinMode = 1; # read from STDIN until EOF
|
||||||
shift;
|
shift;
|
||||||
undef $has_nothing;
|
undef $has_nothing;
|
||||||
}
|
}
|
||||||
@@ -210,6 +210,7 @@ else {
|
|||||||
"interactive|i!" => \$opt_i, # no arg
|
"interactive|i!" => \$opt_i, # no arg
|
||||||
"config|c=s" => \$opt_c, # string, required
|
"config|c=s" => \$opt_c, # string, required
|
||||||
"raw|r!" => \$opt_r, # no arg
|
"raw|r!" => \$opt_r, # no arg
|
||||||
|
"new|n:s" => \$opt_new, # no arg or optional string
|
||||||
"edit|e=i" => \$opt_e, # integer, required
|
"edit|e=i" => \$opt_e, # integer, required
|
||||||
"delete|d=s" => \$opt_d, # integer, required
|
"delete|d=s" => \$opt_d, # integer, required
|
||||||
"search|s=s" => \$opt_s, # string, required
|
"search|s=s" => \$opt_s, # string, required
|
||||||
@@ -224,16 +225,23 @@ else {
|
|||||||
"help|h|?!" => \$opt_h, # no arg
|
"help|h|?!" => \$opt_h, # no arg
|
||||||
"version|v!" => \$opt_v, # no arg
|
"version|v!" => \$opt_v, # no arg
|
||||||
"encrypt=s" => \$opt_enc, # string, required
|
"encrypt=s" => \$opt_enc, # string, required
|
||||||
);
|
);
|
||||||
$opt_n = shift; # after that @ARGV contains eventually
|
|
||||||
# a note-number
|
# after that @ARGV contains eventually a note-number or a single dash
|
||||||
# $opt_ is a single dash, in case of existence!
|
$opt_n = shift;
|
||||||
|
|
||||||
#
|
#
|
||||||
# determine mode
|
# determine mode
|
||||||
#
|
#
|
||||||
if ($opt_i) {
|
if ($opt_i) {
|
||||||
$mode = "interactive";
|
$mode = "interactive";
|
||||||
}
|
}
|
||||||
|
elsif (defined $opt_new) {
|
||||||
|
$mode = "new";
|
||||||
|
if ($opt_new eq "-") {
|
||||||
|
$StdinMode = 1; # read from STDIN
|
||||||
|
}
|
||||||
|
}
|
||||||
elsif (defined $opt_l || defined $opt_L) {
|
elsif (defined $opt_l || defined $opt_L) {
|
||||||
$mode = "list";
|
$mode = "list";
|
||||||
if (defined $opt_l) {
|
if (defined $opt_l) {
|
||||||
@@ -302,7 +310,7 @@ else {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif ($opt_v) {
|
elsif ($opt_v) {
|
||||||
print "This is note $VERSION by Thomas Linden <tom at linden dot at>.\n";
|
print "This is note $VERSION by Thomas von Dein <tom at vondein dot org>.\n";
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
elsif ($opt_h) {
|
elsif ($opt_h) {
|
||||||
@@ -319,18 +327,23 @@ else {
|
|||||||
$has_nothing = 1;
|
$has_nothing = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
### determine generic options
|
### determine generic options
|
||||||
if ($opt_n =~ /^[\d+\-?\,*]+$/) {
|
if ($opt_n =~ /^\d[\d\-?\,]*$/) {
|
||||||
# first arg is a digit!
|
# first arg is a digit!
|
||||||
if ($mode eq "") {
|
if ($mode eq "") {
|
||||||
$number = $opt_n;
|
$number = $opt_n;
|
||||||
$mode = "display";
|
$mode = "display";
|
||||||
undef $has_nothing;
|
undef $has_nothing;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
print "mode <$mode> does not take a numerical argument!\n";
|
print "mode <$mode> does not take a numerical argument!\n";
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
elsif ($opt_n eq "-") {
|
||||||
|
$StdinMode = 1; # read from STDIN
|
||||||
|
$mode = "new";
|
||||||
}
|
}
|
||||||
elsif ($opt_n ne "") {
|
elsif ($opt_n ne "") {
|
||||||
print "Unknown option: $opt_n\n";
|
print "Unknown option: $opt_n\n";
|
||||||
@@ -352,7 +365,6 @@ if ($has_nothing && $mode eq "") {
|
|||||||
&usage;
|
&usage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# read the configfile.
|
# read the configfile.
|
||||||
$CONF = $opt_c if($opt_c); # if given by commandline, use this.
|
$CONF = $opt_c if($opt_c); # if given by commandline, use this.
|
||||||
if (-e $CONF) {
|
if (-e $CONF) {
|
||||||
@@ -371,8 +383,8 @@ if ($mode eq "encrypt_passwd") {
|
|||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Always interactive?
|
# Always interactive? with the exception if stdin was requested
|
||||||
if ($conf{alwaysinteractive} && $mode ne "dump" && $mode ne "import") {
|
if ($conf{alwaysinteractive} && $mode ne "dump" && $mode ne "import" && !$StdinMode && !defined $opt_new) {
|
||||||
$mode = "interactive";
|
$mode = "interactive";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -715,69 +727,75 @@ sub list {
|
|||||||
sub new {
|
sub new {
|
||||||
my($TEMP,$editor, $date, $note, $WARN, $c, $line, $num, @topic);
|
my($TEMP,$editor, $date, $note, $WARN, $c, $line, $num, @topic);
|
||||||
if ($conf{readonly}) {
|
if ($conf{readonly}) {
|
||||||
print "readonly\n";
|
print "readonly\n";
|
||||||
return;
|
|
||||||
}
|
|
||||||
$date = &getdate;
|
|
||||||
return if $db->lock();
|
|
||||||
if ($conf{alwayseditor}) {
|
|
||||||
$TEMP = &gettemp;
|
|
||||||
# security!
|
|
||||||
unlink $TEMP;
|
|
||||||
# let the user edit it...
|
|
||||||
$editor = &find_editor;
|
|
||||||
if ($editor) {
|
|
||||||
# create the temp file
|
|
||||||
open NEW, "> $TEMP" or die "Could not write $TEMP: $!\n";
|
|
||||||
close NEW;
|
|
||||||
system "chattr", "+s", $TEMP; # ignore errors, since only on ext2 supported!
|
|
||||||
system $editor, $TEMP;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
print "Could not find an editor to use!\n";
|
|
||||||
$db->unlock();
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
# read it in ($note)
|
|
||||||
$note = "";
|
|
||||||
open E, "<$TEMP" or $WARN = 1;
|
|
||||||
if ($WARN) {
|
|
||||||
print "...edit process interupted! No note has been saved.\n";
|
|
||||||
undef $WARN;
|
|
||||||
$db->unlock();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$c = 0;
|
|
||||||
while (<E>) {
|
$date = &getdate;
|
||||||
$note = $note . $_;
|
$note = "";
|
||||||
}
|
$line = "";
|
||||||
chomp $note;
|
|
||||||
close E;
|
return if $db->lock();
|
||||||
# privacy!
|
|
||||||
unlink $TEMP;
|
if ($StdinMode) {
|
||||||
|
# create a new note from STDIN
|
||||||
|
print STDERR "Reading from STDIN ...\n";
|
||||||
|
while (<STDIN>) {
|
||||||
|
$note .= $_;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elsif ($conf{alwayseditor} && &is_interactive()) {
|
||||||
|
# read a new note interactively or by using the editor
|
||||||
|
$TEMP = &gettemp;
|
||||||
|
# security!
|
||||||
|
unlink $TEMP;
|
||||||
|
|
||||||
|
# let the user edit it...
|
||||||
|
$editor = &find_editor;
|
||||||
|
if ($editor) {
|
||||||
|
# create the temp file
|
||||||
|
open NEW, "> $TEMP" or die "Could not write $TEMP: $!\n";
|
||||||
|
close NEW;
|
||||||
|
system "chattr", "+s", $TEMP; # ignore errors, since only on ext2 supported!
|
||||||
|
system $editor, $TEMP;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
print "Could not find an editor to use!\n";
|
||||||
|
$db->unlock();
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
# read it in ($note)
|
||||||
|
$note = "";
|
||||||
|
open E, "<$TEMP" or $WARN = 1;
|
||||||
|
if ($WARN) {
|
||||||
|
print "...edit process interupted! No note has been saved.\n";
|
||||||
|
undef $WARN;
|
||||||
|
$db->unlock();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$c = 0;
|
||||||
|
while (<E>) {
|
||||||
|
$note = $note . $_;
|
||||||
|
}
|
||||||
|
chomp $note;
|
||||||
|
close E;
|
||||||
|
|
||||||
|
# privacy!
|
||||||
|
unlink $TEMP;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$note = "";
|
|
||||||
$line = "";
|
|
||||||
# create a new note
|
|
||||||
if ($NewType) {
|
|
||||||
# be silent! read from STDIN until EOF.
|
|
||||||
while (<STDIN>) {
|
|
||||||
$note .= $_;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
print "enter the text of the note, end with a single .\n";
|
print "enter the text of the note, end with a single .\n";
|
||||||
do
|
do {
|
||||||
{
|
|
||||||
$line = <STDIN>;
|
$line = <STDIN>;
|
||||||
$note = $note . $line;
|
$note = $note . $line;
|
||||||
} until $line eq ".\n";
|
} until $line eq ".\n";
|
||||||
# remove the . !
|
# remove the . !
|
||||||
chop $note;
|
chop $note;
|
||||||
chop $note;
|
chop $note;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# look if the note was empty, so don't store it!
|
# look if the note was empty, so don't store it!
|
||||||
if ($note =~ /^\s*$/) {
|
if ($note =~ /^\s*$/) {
|
||||||
print "...your note was empty and will not be saved.\n";
|
print "...your note was empty and will not be saved.\n";
|
||||||
@@ -1341,6 +1359,9 @@ Options:
|
|||||||
-c, --config file
|
-c, --config file
|
||||||
Use another config file than the default \$HOME/.noterc.
|
Use another config file than the default \$HOME/.noterc.
|
||||||
|
|
||||||
|
-n, --new
|
||||||
|
Create a new note entry.
|
||||||
|
|
||||||
-l, --list [topic]
|
-l, --list [topic]
|
||||||
Lists all existing notes. If no topic were specified, it will
|
Lists all existing notes. If no topic were specified, it will
|
||||||
display a list of all existing topics. See the section TOPICS for
|
display a list of all existing topics. See the section TOPICS for
|
||||||
@@ -1886,4 +1907,9 @@ sub load_driver {
|
|||||||
sub ticket {
|
sub ticket {
|
||||||
return join "", (map { $randomlist[int(rand($#randomlist))] } (0 .. 10) );
|
return join "", (map { $randomlist[int(rand($#randomlist))] } (0 .. 10) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub is_interactive {
|
||||||
|
return -t STDIN && -t STDOUT;
|
||||||
|
}
|
||||||
|
|
||||||
__END__
|
__END__
|
||||||
|
|||||||
Reference in New Issue
Block a user