Как скопировать всю историю буфера обмена в текстовый файл?


10

Я хотел бы вставить всю историю буфера обмена, состоящую из скопированных слов (Ctrl + C / по выделению) во время моих сеансов чтения. Я установил такие программы, как Glippy и ClipIt, но я не мог понять, как вставить все слова, если когда-либо существует такая опция в этих программах, я копирую сразу в простой текстовый файл, а не по одному слову за раз. Кто-нибудь может мне помочь?

Спасибо!


clipit хранит свою историю в ~ / .local / share / clipit / history, формат имеет некоторые управляющие символы, с которыми вы, вероятно, можете разобрать их sed, но это немного сложно
bartekbrak

Ответы:


5

Вы можете увидеть некоторые строки в файле истории клипа с помощью этой команды:

strings ~/.local/share/clipit/history

Но это не лучший способ. Вывод может быть искажен.


3

есть скрипт Python для ClipIt, запустите его так python cliphist.py > clipit.history.txt

#!/usr/bin/env python
"""cliphist.py: utility to print clipit history file.
If an argument is passed on the command line, it will
be used as a separator, otherwise history items are
separated by a blank line. """

import struct, os, sys

homedir  = os.environ['HOME']
histfile = homedir + '/.local/share/clipit/history'
if len(sys.argv) > 1:
    sep = sys.argv[1]
else:
    sep = '---------------------------------------------------------------------'


with open(histfile,'rb') as f:
    f.read(68)
    size,_ = struct.unpack('2i',f.read(8))
    while (size > 0):
        item = f.read(size)
        print item
        _,_,_,size,_ = struct.unpack('5i',f.read(20))
        if size > 0: 
            print sep

еще не пробовал, но выглядит правильно и отвечает на вопрос (относительно Clipit)
user7610

2

В последней версии Parcellite есть пункт меню «Сохранить как» при нажатии на значок. Это сохранит все записи истории в файл. Существует также вставка всех при щелчке правой кнопкой мыши по списку истории, в результате чего весь список истории помещается в буфер обмена. В настройках есть разделитель «Вставить все», который он ставит в конце каждой записи.

https://sourceforge.net/projects/parcellite/files/parcellite/parcellite-1.1.1/ ppa здесь: https://launchpad.net/~rickyrockrat/+archive/ppa


1

Установите KDE Klipper Clipboard Manager Установить клиппер и используйте следующий простой скрипт:

text="nothing yet"
cnt=0
while [ "$text" != "" ]; do
  text=`qdbus org.kde.klipper /klipper getClipboardHistoryItem $cnt`
  echo "==== Clipboard content line $cnt:"
  echo "$text"                      # to terminal output
  echo "$text" > /path/to/file      # to file (EDIT this)
  cnt=$((cnt + 1))
done

Примечание: это выглядит не очень хорошо в Unity, так что кажется. Так что в других средах рабочего стола, кроме KDE: ваш пробег может отличаться .


FWIW, кто-то испытывает проблемы с Klipper и Unity: askubuntu.com/questions/439303/…
Sparhawk

0

Пользователь Parcellite, щелкните левой кнопкой мыши на его значке «Очистить», выберите, сколько раз вы хотите, после этого «Редактировать буфер обмена» и скопируйте все это! Не забывайте так устанавливать предпочтения: используйте первичный выбор, чтобы было проще копировать текст!


Привет Аквариус! Большое спасибо за ответ. Однако, когда я нажимаю кнопку редактирования буфера обмена, я вижу только последнее скопированное слово, а не весь список. Может быть, у вас это работает по-другому? Возможно я должен что-то настроить в настройках.
Пандисвезия

есть этот файл ~ / .local / share / parcellite / history, проблема в том, что в нем есть непечатаемые символы для перехода на новую строку и т. д. Вы можете попробовать заменить их автоматически, но теперь это становится грязным ...
Aquarius Power

0

Модифицированный код из @ stepan-shamaiev для Python 3и без настройки разделителя:

#!/usr/bin/env python3
"""cliphist.py: utility to print clipit history file."""

import struct, os

homedir  = os.environ['HOME']
histfile = homedir + '/.local/share/clipit/history'

with open(histfile,'rb') as f:
  f.read(68)
  size, _ = struct.unpack('2i', f.read(8))
  while size > 0:
    item = f.read(size)
    print(item.decode())
    _,_,_,size,_ = struct.unpack('5i',f.read(20))
    if size > 0: 
      print('------------------')
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.