Как создать средство запуска пользовательского приложения, которое копирует текст в мой буфер обмена?

Я хочу сделать Средство запуска Пользовательского приложения и затем добавить его к моей Панели так, чтобы каждый раз я нажал на него, он копия предварительно загруженная строка текста, но я не знаю, как записать команды для него.

Например, если предварительно загруженная строка текста "Привет". Я хотел бы, чтобы это было так, чтобы каждый раз я нажал на него, это копирует слово "Hello" в мой буфер обмена, таким образом, я могу вставить его везде, где.

2
задан 9 July 2015 в 16:41

1 ответ

Ниже примера легко настраиваемой установки. Это существует сценария и a .desktop файл (средство запуска) для запущения скрипта с двумя опциями. Вы можете:

  • нажмите на средство запуска для копирования пред - определенная строка или строка к буферу обмена, или:
  • щелкните правой кнопкой по нему для установки новой строки:

    enter image description here
    enter image description here

Как настроить

Чтобы смочь скопировать текст в буфер обмена, мы должны установить xclip:

sudo apt-get install xclip

Затем нам нужны две вещи:

  1. Сценарий:

    #!/usr/bin/env python3
    import subprocess
    import os
    import sys
    
    wordfile = os.environ["HOME"]+"/.word_file"
    
    def get_word():
        try:
            copy = "xclip -in -selection c "+"'"+wordfile+"'"
            subprocess.Popen(["/bin/bash", "-c", copy])
        except FileNotFoundError:
            pass
    
    def set_word():
        try:
            word = "zenity --entry --title='Change the word' --text='Set a new string or line'"
            new_word = subprocess.check_output(["/bin/bash", "-c", word]).decode("utf-8").strip()
            open(wordfile, "wt").write(new_word)
        except subprocess.CalledProcessError:
            pass
    
    arg = sys.argv[1]
    if arg == "-set":
       set_word()
    elif arg == "-get":
        get_word()
    

    Скопируйте его в пустой файл, сохраните его как copy_text.py и сделайте это исполняемым файлом (!!)

  2. A .desktop file, запускать скрипт с двумя опциями

    [Desktop Entry]
    Name=Paste a string
    Exec=/path/to/copy_text.py -get
    Type=Application
    Icon=/path/to/your/icon.png
    
    Actions=Set a new string;
    
    [Desktop Action Set a new string]
    Name=Set a new string
    Exec=/path/to/copy_text.py -set
    OnlyShowIn=Unity;
    

    Скопируйте его в пустой файл, сохраните его как paste_text.desktop в ~/.local/share/applications, замена в обоих строки, начиная с Exec=:

    /path/to/copy_text.py
    

    фактическим путем к сценарию и заменой в строке, начиная с Icon=

    /path/to/your/icon.png
    

    фактическим путем к допустимому значку (например, a .png значок 64x64 пкс)

Теперь перетащите .desktop файл к Unity у средства запуска и Вас будет Ваша легко настраиваемая установка.

Объяснение

Используя xclip в .desktop файле

xclip утилита, которая может использоваться для управления буфером обмена из командной строки.
Для копирования строки в буфер обмена можно использовать команду:

echo <string> | xclip -sel clip

Скопировать содержание файла к буферу обмена:

xclip -in -selection c <file>

Если это была бы фиксированная строка, в которой Вы нуждаетесь, Вы могли действительно, как упомянуто Serg, делать с a .desktop файл с одним - лайнер:

[Desktop Entry]
Name=Paste a string
Exec=/bin/bash -c "echo Hello World | xclip -sel clip"
Type=Application
Icon=/path/to/icon.png

или, если у Вас только было бы ограниченное количество (фиксированных) строк для использования:

[Desktop Entry]
Name=Paste a string
Exec=/bin/bash -c "echo Monkey | xclip -sel clip"
Type=Application
Icon=/opt/lswitcher/icon/lsw_64.png

Actions=Monkey;eats;banana;

[Desktop Action Monkey]
Name=Copy Monkey
Exec=/bin/bash -c "echo Monkey | xclip -sel clip"
OnlyShowIn=Unity;

[Desktop Action eats]
Name=Copy eats
Exec=/bin/bash -c "echo eats | xclip -sel clip"
OnlyShowIn=Unity;

[Desktop Action banana]
Name=Copy banana
Exec=/bin/bash -c "echo banana | xclip -sel clip"
OnlyShowIn=Unity;

затем создайте файл, как объяснено в ответе, и перетащите его по Unity средство запуска:

enter image description here

Если бы строка для копирования была бы непредсказуемой, это однако означало бы, что необходимо было бы отредактировать .desktop зарегистрируйте вручную каждый раз, когда Вы хотите поменять струну, которая не очень удобна для пользователя.

Для чего сценарий

Therfore, сценарий создает внешний файл, ~/.word_file, с содержанием строки требуется быть скопированными в буфер обмена. Сценарий имеет две функции:

def get_word():
    try:
        copy = "xclip -in -selection c "+"'"+wordfile+"'"
        subprocess.Popen(["/bin/bash", "-c", copy])
    except FileNotFoundError:
        pass

к (пробуют к) читает текст, который будет скопирован в буфер обмена из файла, pass если файл не существует.

и:

def set_word():
    try:
        word = "zenity --entry --title='Change the word' --text='Set a new string or line'"
        new_word = subprocess.check_output(["/bin/bash", "-c", word]).decode("utf-8").strip()
        open(wordfile, "wt").write(new_word)
    except subprocess.CalledProcessError:
        pass

открыть a zenity окно, в котором можно ввести новую строку или строку для записи в файл:

enter image description here

.desktop файл

наконец, вызывает две функции сценария с двумя командами:

Exec=/path/to/copy_text.py -get

назвать сценарий с опцией -get, как "основная" команда в .desktop файл, чтобы быть выполненным простым щелчком по Unity значок средства запуска, и:

Exec=/path/to/copy_text.py -set

назвать сценарий с опцией -set, как щелчок правой кнопкой (quicklist) опция.

enter image description here

4
ответ дан 2 December 2019 в 02:22

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

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