#!/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();
|