Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Shortcuts engine for note taking

by munchie (Monk)
on Apr 02, 2002 at 20:42 UTC ( [id://156108]=sourcecode: print w/replies, xml ) Need Help??
Category: Text Processing
Author/Contact Info munchie steven@ssrubin.com
Description: This code allows the user to set shortcuts (a character surrounded in brackets) to allow for fast note taking/document writing. (Thank you tilly for the awesome Text::xSV module!)
#! Perl -w
##                                       ##
#shortcuts.pl -shortcut maintaining engine#
##                                       ##
use strict;
use Text::xSV;

my $shortcut_file = 'scuts'; #Define file that contains shortcuts
my $output_file = 'sfile'; #Define file for output

########END OF USER INPUT########

my($sf,$of)=($shortcut_file,$output_file);

sub set_shortcut {
    my $is_taken=0;
    print "Which shortcut character would you like (1 letter!)? (will 
+appear in brackets) ";
    chomp(my $char=<STDIN>);
    print "What text do you want it to print?\n";
    chomp(my $text=<STDIN>);
    my $csv = new Text::xSV;
    $csv->open_file("$sf");
    $csv->bind_header();
    while ($csv->get_row()) {
        my ($shortcut) = $csv->extract(qw(shortcut));
        if ($char eq $shortcut) {
            warn "Shortcut character already used!";
            $is_taken=1;
            last;
        } 
    }
    unless ($is_taken) {
        open(SF, ">>$sf");
        print SF "$char,$text\n";
        close(SF);
    }
}
sub get_shortcuts {
    print"\n";
    my $csv = new Text::xSV;
    $csv->open_file("$sf");
    $csv->bind_header();
    while ($csv->get_row()) {
        my ($shortcut, $output) = $csv->extract(qw(shortcut output));
          print "\{$shortcut\} produces $output\n";
    }
}
sub new_doc {
    print "Type your note/doc (type {e} on a new line to end):\n";
    open(OF, ">>$of");
    while (my $line = <STDIN>) {
        last if $line =~ /\{e\}/;
        my %shortcuts;
        my $csv = new Text::xSV;
        $csv->open_file("$sf");
        $csv->bind_header();
        while ($csv->get_row()) {
            my ($shortcut, $output) = $csv->extract(qw(shortcut output
+));
            $shortcuts{$shortcut} = $output;
        }
        $line =~ s/\{(\w)\}+/$shortcuts{$1}/g;
        print OF $line;
    }
    close(OF);
}
sub get_doc {
    open(OF, "<$of");
    while (<OF>) {
        print;
    }
    close(OF);
}
        
    
unless (-s $sf) {
    open(SF, ">>$sf");
    print SF "shortcut,output\n";
    close(SF);
}

print "Welcome to S.S.E. \{Steven's Shortcut Engine\}\n";
print "\t{s} to set a shortcut\n\t{o} to view the output file's conten
+ts\n\t{n} to start typing to the output file\n\t{g} to view the short
+cuts you've already made\n";
while(1) {
    print "\%> ";
    chomp(my $choice=<STDIN>);

    if ($choice =~ /\{s\}/) {
        set_shortcut();
    } elsif ($choice =~ /\{n\}/) {
        new_doc();
    } elsif ($choice =~ /\{g\}/) {
        get_shortcuts();
    } elsif ($choice =~ /\{o\}/) {
        get_doc();
    }
}

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: sourcecode [id://156108]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (5)
As of 2024-04-23 18:54 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found