- #!/usr/bin/env perl
-
- =pod
-
- =head1 NAME
-
- notes-links-for - show links for a given target in my notes
-
- =head1 SYNOPSIS
-
- Currently this is vimwiki-dependent.
-
- # Show links for foo
- vimwiki-links-for --target foo
-
- # Show links for foo.wiki:
- vimwiki-links-for --file ./foo.wiki
-
- =head1 AUTHOR
-
- Brennen Bearnes
-
- =cut
-
- use warnings;
- use strict;
- use 5.10.0;
-
- use Cwd;
- use Data::Dumper;
- use DBI;
- use File::Basename;
- use File::Spec;
- use Getopt::Long;
- use Pod::Usage;
- use SQL::Abstract;
- use Sys::Hostname;
-
- use App::CommandLog;
-
- # Handle options, including help generated from the POD above.
- my $debug = 0;
- my $target;
- my $file;
- GetOptions(
- 'debug' => \$debug,
- 'target=s' => \$target,
- 'file=s' => \$file,
- 'help' => sub { pod2usage(0) },
- ) or pod2usage(2);
-
- if (defined $file) {
- my ($name, $path, $suffix) = fileparse($file, '.wiki');
- $target = $name;
- }
-
- unless (defined $target) {
- die "Must give a --target or a --file";
- }
-
- my %where = ();
- $where{target} = $target;
-
- my $dbfile = $ENV{HOME} . "/notes/metadata.db";
- my $dbh = DBI->connect("dbi:SQLite:dbname=$dbfile", "", "");
-
- my $sql = SQL::Abstract->new;
- my ($query, @bind) = $sql->select(
- 'links JOIN pages ON links.page = pages.page',
- '*',
- \%where,
- {-desc => 'target'}
- );
-
- if ($debug) {
- say STDERR $query;
- say STDERR Dumper(%where);
- }
-
- my $sth = $dbh->prepare($query);
- $sth->execute(@bind);
-
- # TODO: Note that the "1" here is, theoretically, a line number.
- # Unfortunately, there's no obvious way to extract that from Pandoc's parsing
- # of the original file, and thus no non-hacky way for notes-collect-metadata to
- # store an approximate value in the database. We _could_ read the file
- # line-by-line, or run grep, looking for the file's basename, but this is
- # tricky to get right.
- #
- # If I keep using this long-term, I should solve this problem.
-
- while (my $data = $sth->fetchrow_hashref()) {
- print "$ENV{HOME}/notes/vimwiki/$data->{page}.wiki";
- if ($data->{title}) {
- print ":1:$data->{title}";
- } else {
- print ":1:$data->{page}"
- }
- print "\n";
- }
-
- $sth->execute();
|