Обнаружение события копирования / вставки в буфер обмена и изменение содержимого буфера обмена

После того, как что-то скопировано в буфер обмена (используя ctrl + c), я хочу, чтобы скрипт (bash, python или любой другой язык) автоматически обнаруживал, что новая запись добавлена ​​в буфер обмена, изменял ее содержимое и помещал ее обратно в буфер обмена, чтобы, когда Я вставляю это, я получаю измененный текст. Сценарий должен постоянно работать в фоновом режиме и отслеживать изменения в буфере обмена.

Следующий скрипт описывает необходимые изменения:
Источник: https://superuser.com/questions/796292/is-there-an-efficient-way-to-copy- text-from-a-pdf-without-the-line-breaks

#!/bin/bash

# title: copy_without_linebreaks
# author: Glutanimate (github.com/glutanimate)
# license: MIT license

# Parses currently selected text and removes 
# newlines that aren't preceded by a full stop

SelectedText="$(xsel)"

ModifiedText="$(echo "$SelectedText" | \
    sed 's/\.$/.|/g' | sed 's/^\s*$/|/g' | tr '\n' ' ' | tr '|' '\n')"

#   - first sed command: replace end-of-line full stops with '|' delimiter and keep original periods.
#   - second sed command: replace empty lines with same delimiter (e.g.
#     to separate text headings from text)
#   - subsequent tr commands: remove existing newlines; replace delimiter with
#     newlines
# This is less than elegant but it works.

echo "$ModifiedText" | xsel -bi

Я не хочу использовать привязку сочетаний клавиш для запуска сценария.

1
задан 20 August 2019 в 10:47

1 ответ

Кредит переходит к Kenn.

Я изменил сценарий к своим требованиям и добавил функцию для обнаружения события копии буфера обмена, и изменить это - содержание.

Источник: https://github.com/SidMan2001/Scripts/tree/master/PDF-Copy-without-Linebreaks-Linux

Удалите Разрывы строки при копировании текста с PDF (Linux):

Этот сценарий удара удаляет разрывы строки при копировании текста с PDF. Это работает и на Основной Выбор и на Буфер обмена Linux.


#!/bin/bash

# title: copy_without_linebreaks
# author: Glutanimate (github.com/glutanimate)
# modifier: Siddharth (github.com/SidMan2001)
# license: MIT license

# Parses currently selected text and removes 
# newlines

while ./clipnotify;
do
  SelectedText="$(xsel)"
  CopiedText="$(xsel -b)"
  if [[ $SelectedText != *"file:///"* ]]; then
    ModifiedTextPrimary="$(echo "$SelectedText" | tr -s '\n' ' ')"
    echo -n "$ModifiedTextPrimary" | xsel -i
  fi
  if [[ $CopiedText != *"file:///"* ]]; then
    ModifiedTextClipboard="$(echo "$CopiedText" | tr -s '\n' ' '  )"
    echo -n "$ModifiedTextClipboard" | xsel -bi
  fi
done

Зависимости:

  1. xsel
    sudo apt-get install xsel
  2. clipnotify (https://github.com/cdown/clipnotify)
    Можно использовать предварительно скомпилированный clipnotify, обеспеченный в репозитории, или скомпилировать себя.

Скомпилировать clipnotify самостоятельно:
sudo apt install git build-essential libx11-dev libxtst-dev
git clone https://github.com/cdown/clipnotify.git
cd clipnotify
sudo make

Использовать:

  1. Загрузите этот репозиторий как zip или скопируйте и вставьте сценарий в текстовом редакторе и сохраните его как copy_without_linebreaks.sh.
  2. Удостоверьтесь, что сценарий и clipnotify (загруженный или предварительно скомпилированный) находятся в той же папке.
  3. Откройте терминал в папке сценария и установите разрешение
    chmod +x "copy_without_linebreaks.sh"
  4. Дважды щелкните по сценарию или выполнению путем ввода в терминал:
    .\copy_without_linebreaks.sh
  5. Текст копии в PDF и вставке это где угодно. Повреждения строк будут удалены.
1
ответ дан 7 December 2019 в 14:59

Другие вопросы по тегам:

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