Как скопировать в графический буфер обмена из командной строки в KDE?

pdftkможет вывести "закладки" с помощью, например, pdftk file.pdf dump_data_utf8; вы получите кучу записей Bookmark *, скрытых в остальных метаданных. grepмогу дать только их:

$ pdftk whatever.pdf dump_data_utf8 | grep ^Bookmark
BookmarkBegin
BookmarkTitle: Cover
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
BookmarkTitle: Agenda
BookmarkLevel: 1
BookmarkPageNumber: 2

«Уровень» — это уровень отступа (, поэтому уровень 2 имеет отступ от уровня 1 ). Вы можете отформатировать это в любой формат, который вы хотите для печати.

Вот сценарий Perl для печати в формате LaTeX, который затем можно передать, например, pdflatexдля получения PDF-файла (, который вы даже можете использовать pdftk для добавления в исходный PDF-файл ). Обратите внимание, что это также доступно по адресу https://gitlab.com/derobert/random-toys/blob/master/pdf/pdftoc-to-latex(. Это хорошее место для отправки запросов на вытягивание, если вы хотите его улучшить ):

.

#!/usr/bin/perl
use 5.024;
use strict;
use warnings qw(all);
use IPC::Run3;
use LaTeX::Encode;
use Encode qw(decode);

my @levels
    = qw(chapter section subsection subsubsection paragraph subparagraph);
my @counters;

my ($data_enc, $data);
run3 ['pdftk', $ARGV[0], 'dump_data_utf8'], undef, \$data_enc;
$data = decode('UTF-8', $data_enc, Encode::FB_CROAK);

my @latex_bm;

my $bm;
foreach (split(/\n/, $data)) {
    /^Bookmark/ or next;
    if (/^BookmarkBegin$/) {
        add_latex_bm($bm) if $bm;
        $bm = {};
    } elsif (/^BookmarkLevel: (\d+)$/a) {
        ++$counters[$1 - 1];
        $#counters = $1 - 1;
        $bm->{number} = join(q{.}, @counters);
        $bm->{level} = $1 - 1;
    } elsif (/^BookmarkTitle: (.+)$/) {
        $bm->{title} = latex_encode($1);
    } elsif (/^BookmarkPageNumber: (\d+)$/a) {
        $bm->{page} = $1;
    } else {
        die "Unknown Bookmark tag in $_\n";
    }
}
add_latex_bm($bm) if $bm;

print <{level}];
    my $number = $bm->{number};
    my $title  = $bm->{title};
    my $page   = $bm->{page};

    push @latex_bm, <

Вот как использовать этот скрипт:

  1. Загрузитеhttps://gitlab.com/derobert/random-toys/raw/master/pdf/pdftoc-to-latex?inline=falseи сохраните как pdftoc -в -latex.pl
  2. Сделайте его исполняемым, запустив chmod +x /path/to/pdftoc-to-latex.plв терминале
  3. Установить Latex ::Кодировать perl-пакет. В Debian Stretch вы можете сделать это через sudo apt install liblatex-encode-perl. В других дистрибутивах вам, вероятно, потребуется сделать что-то еще.
  4. Запустите скрипт следующим образом:/path/to/pdftoc-to-latex.pl /path/to/pdf/file.pdf > /path/to/where/you/want/tex/file.tex
  5. Скомпилируйте полученный tex-файл в pdf с помощью вашего любимого компилятора LaTeX (, например,cd /path/to/where/you/want/tex; pdflatex file.tex)

0
06.02.2021, 05:41
2 ответа

Есть два набора команд, которые могут это сделать, xclipи xsel, и они взаимозаменяемы. Чтобы использовать буфер обмена, используемый графическими приложениями (, а не буфер выбора терминала ), необходимо указать параметр.

Для копирования в буфер обмена:

uptime | xclip -selection clipboard
# or
uptime | xclip -sel clip
# or
uptime | xsel -ib

Вставить из буфера обмена в командной строке:

xclip -o -selection clipboard
# or
xclip -o -sel clip
# or
xsel -ob

Если печатать в командной строке, xselбыстрее печатать; при присвоении псевдонима или включении в скрипт, то подробная xclipформа более информативна -.

0
18.03.2021, 22:32

Лично я предпочитаю XSel вместо xclip по той же причине :в руководстве проще увидеть, как переключать выделение для копирования.

После установки попробуйте это:

uptime | xsel -ib

Между прочим, как только вы привыкнете к тому, что есть и первичный выбор, и буфер обмена, вы обнаружите, что это действительно удобно. С первичным выбором часто быстрее работать, и также приятно иметь возможность хранить два разных элемента информации одновременно. Кроме того, если у вас есть игровая мышь, вы можете использовать ratbagd/piper, чтобы связать запасные клавиши для манипулирования выборками, например, поменять местами основную и буфер обмена, используя кнопку мыши 4 большим пальцем.

1
18.03.2021, 22:32

Теги

Похожие вопросы