Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Shortcuts engine for note taking

by munchie (Monk)
on Apr 02, 2002 at 20:42 UTC ( #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();
    }
}

Comment on Shortcuts engine for note taking
Download Code

Back to Code Catacombs

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (19)
As of 2014-10-23 16:17 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (125 votes), past polls