Как добавлять только в буфер обмена (но не перезаписывать текущие данные)?

Это можно установить, добавив строку в xorg.conf. Уделите внимание выбору раздела монитора.

Section "Monitor"
...
    Option    "Primary" "true"
EndSection

Я могу подтвердить, что это сработало для меня с помощью карты ATI Radeon + производителя: Catalyst 11.9 (Ubuntu 11.04). Возможно, это также применимо в разных конфигурациях.

1
задан 10 July 2016 в 23:32

2 ответа

Сервер X имеет несколько буферов обмена. Один с Ctrl + C называется буфер обмена, тот, где вы выделяете что-то, называется первичным. xclip позволяет вставлять вывод. Например, я скопировал часть вашего вопроса, но выделил другой текст в терминале:

Вы можете использовать эту идею в сценарии, который связан с быстрым сочетанием клавиш. Фактически, я написал сценарий, который размещен как

. Основная идея - связать его с ярлыком клавиатуры. Выделите то, что вы хотите добавить, затем нажмите ярлык. Например, я привязал мой к Ctrl + Alt + C . Exact command python /path/to/file.py

Пример использования:

Выделите часть I have a rather large file из вашего сообщения и скопируйте с помощью Ctrl + C. Выделите что-то еще, например That is so that I can have a keyboard shortcut Нажмите shortcut (мой был Ctrl + Alt + V) Отпустите добавленный буфер обмена где-нибудь с Ctrl + V. Результирующий результат: I have a rather large fileThat is so that I can have a keyboard shortcut

Источник скрипта

 import gi
    gi.require_version('Notify', '0.7')
    from gi.repository import Notify
    import subprocess
    import os
    import sys

    # This script is meant to be bound to keyboard shortcut

    def send_notification(title, text):
        Notify.init(sys.argv[0])
        n = Notify.Notification.new(title, text)
        n.show()


    def run_cmd(cmdlist):
        # function for running 
        try:
            stdout = subprocess.check_output(cmdlist)
        except subprocess.CalledProcessError:
              send_notification(sys.argv[0],"Clipboard error")
              sys.exit(1)
        else:
            if stdout:
                return  stdout



    # get contents of both clipboards
    clip = run_cmd("xclip -o -sel clip".split())
    primary = run_cmd("xclip -o -sel primary".split())

    # write to temp file contents
    # of both clipboards appended
    temp_file = "/tmp/append.clip"
    f = open(temp_file, "w")
    f.write( clip + primary  )
    f.close()

    # Read the new contents into clipboard
    run_cmd(("xclip -sel clip " + temp_file).split())

    # clean up
    os.remove(temp_file)

Примечания:

xclip необходимо установить через sudo apt-get install xclip Я написал индикатор менеджера буфера обмена для Ubuntu с рабочим столом Unity, который может использовать регулярные выражения (sed и стиль re python] для добавления повторяющейся строки в буфер обмена. Например, если вам часто приходится добавлять одну и ту же строку снова и снова, вы можете использовать следующее python re regex:

enter image description here

5
ответ дан 23 May 2018 в 08:18
  • 1
    «Отпустите добавленный буфер обмена где-нибудь с помощью Ctrl + C . & quot ;? Разве это не должно быть Ctrl + V ? – Paranoid Panda 13 July 2016 в 21:39
  • 2
    @ParanoidPanda да, это была эпическая опечатка;) – Sergiy Kolodyazhnyy 13 July 2016 в 23:41
  • 3
    @ParanoidPanda Я отредактировал свой ответ, чтобы добавить немного новой информации. Я сделал индикатор, который использует регулярное выражение для редактирования буфера обмена, поэтому, если вы хотите добавить одну и ту же строку снова и снова, вы можете использовать это. – Sergiy Kolodyazhnyy 23 January 2017 в 00:56

Вот еще один очень простой метод, который использует короткий скрипт Bash. Сначала убедитесь, что у вас установлен xclip. Затем создайте свой скрипт bash следующим образом:

#!bin/bash
p=$(xclip -selection primary -o)
c=$(xclip -selection clipboard -o)
new=$'\n'
echo "$c$new$p" | xclip -selection clip

Назовите этот файл apndpc.sh и поместите его в какую-нибудь папку, скажем ~ / myscripts. Теперь привяжите к ней определенный пользователем ключ. Сделайте это с помощью системных настроек >> Клавиатура и перейдите на вкладку «Ярлыки». Нажмите «Пользовательские ярлыки», а затем нажмите «+», чтобы добавить нужную комбинацию клавиш. В командной строке поставьте:

bash -c 'bash ~ / myscripts / apndclp.sh'

Затем определите свою комбинацию клавиш. Я использую ALT + 3 для запуска действия.

Вот и все. Вы готовы к крупномасштабной операции копирования. Для копирования первого фрагмента текста используйте обычный Ctrl + c (или щелчок правой кнопкой мыши и выберите копию). Выберите следующий фрагмент (выберите NOT NOT copy), а затем нажмите комбинацию клавиш (ATL + 3). Это добавит выделенный текст в буфер обмена. Продолжайте делать это, пока не закончите. Затем вставьте как обычно, т.е. CTRL + v (или righclick и select paste), чтобы выгрузить окончательный накопленный текст.

Если вам не нравятся манипуляции с строкой в ​​приведенном выше скрипте, используйте вместо этого сценарий:

#!bin/bash
# this is another version of clipboard append tool
# here we use a temporary file to append highlighted text to the clipboard
# the temporary file is deleted at the end of the operation

tmpfile="file111000111"
xclip -selection clipboard -o  > $tmpfile   # first dump the current clipboard to the tmpfile
printf '\n' >> $tmpfile                     # then add new line
xclip -selection primary -o >> $tmpfile     # and finally add the highlighted text
cat $tmpfile | xclip -selection clip        # now read the file back into the clipboard
rm $tmpfile             # and remove the tempfile
2
ответ дан 23 May 2018 в 08:18

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

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