Могу ли я получить визуальную обратную связь от копирования с помощью Ctrl + C?

Текущая версия пакета надежного ядра - 3.13.0.32.38, которая переводится в версию linux 3.13.0-32, поэтому ваш штраф: -)

6
задан 15 November 2017 в 13:52

5 ответов

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

здесь

#!/usr/bin/env python3

# Configuration:
APPNAME = "Clipboard Notifier"  # an arbitrary application name
TITLE = "Clipboard modified"    # the bold headline of each notification
ICON = "edit-paste"             # name of the icon to show
MAXLENGTH = 100                 # maximum message length

# Imports:
import gi
import signal
import notify2
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk

# Set up signal handler for killing the script with Ctrl+C from terminal:
signal.signal(signal.SIGINT, signal.SIG_DFL)

# Initialize the notifications library:
notify2.init(APPNAME)

# Callback function to handle clipboard modification events:
def callback(*args):
    # Get new clipboard content:
    text = clip.wait_for_text()
    # Truncate long content to avoid huge notification bubbles:
    body = text if len(text) < MAXLENGTH else text[:MAXLENGTH] + "..."
    # Create and show notification bubble:
    notify2.Notification(TITLE, body, ICON).show()

# Set up clipboard and register callback for change events
clip = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
clip.connect("owner-change", callback)

# Start Gtk main loop and wait for events:
Gtk.main()

Сохраните это где-нибудь (например, как /usr/local/bin/clipboard-notifier - вам нужно sudo, чтобы разрешить писать в этом месте, но, альтернативно, поместить его в ~/bin) и сделать его исполняемым с помощью команды chmod +x FILENAME.

Мой скрипт использует пакет Python 3 notify2 для отображения собственных пузырьков уведомлений. Этот пакет обычно не устанавливается по умолчанию, вы должны сначала добавить его с помощью следующей команды:

sudo apt install python3-notify2

Если вы хотите, вы можете изменить значения капитализированных переменных рядом с началом сценария, чтобы ваши потребности, особенно TITLE и MAXLENGTH, могут быть полезны для изменения.

Затем просто добавьте его в свои приложения для запуска и автоматически запустится при входе в систему в следующий раз. Вы также можете запустить сценарий вручную, например. Alt + F2 HUD в Unity.

5
ответ дан 22 May 2018 в 17:58
  • 1
    Кажется, у меня нет требования. ImportError: нет модуля с именем 'notify2' – Elder Geek 1 October 2017 в 05:26
  • 2
    @ElderGeek Да, я только заметил, что забыл написать, что вы должны сначала sudo apt install python3-notify2. Добавлено это сейчас, спасибо за внимание. – Byte Commander 1 October 2017 в 13:59
  • 3
    Это сделал трюк. ;-) – Elder Geek 1 October 2017 в 22:41

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

здесь

#!/usr/bin/env python3 # Configuration: APPNAME = "Clipboard Notifier" # an arbitrary application name TITLE = "Clipboard modified" # the bold headline of each notification ICON = "edit-paste" # name of the icon to show MAXLENGTH = 100 # maximum message length # Imports: import gi import signal import notify2 gi.require_version("Gtk", "3.0") from gi.repository import Gtk, Gdk # Set up signal handler for killing the script with Ctrl+C from terminal: signal.signal(signal.SIGINT, signal.SIG_DFL) # Initialize the notifications library: notify2.init(APPNAME) # Callback function to handle clipboard modification events: def callback(*args): # Get new clipboard content: text = clip.wait_for_text() # Truncate long content to avoid huge notification bubbles: body = text if len(text) < MAXLENGTH else text[:MAXLENGTH] + "..." # Create and show notification bubble: notify2.Notification(TITLE, body, ICON).show() # Set up clipboard and register callback for change events clip = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) clip.connect("owner-change", callback) # Start Gtk main loop and wait for events: Gtk.main()

Сохраните это где-нибудь (например, как /usr/local/bin/clipboard-notifier - вам нужно sudo, чтобы разрешить писать в этом месте, но, альтернативно, поместить его в ~/bin) и сделать его исполняемым с помощью команды chmod +x FILENAME.

Мой скрипт использует пакет Python 3 notify2 для отображения собственных пузырьков уведомлений. Этот пакет обычно не устанавливается по умолчанию, вы должны сначала добавить его с помощью следующей команды:

sudo apt install python3-notify2

Если вы хотите, вы можете изменить значения капитализированных переменных рядом с началом сценария, чтобы ваши потребности, особенно TITLE и MAXLENGTH, могут быть полезны для изменения.

Затем просто добавьте его в свои приложения для запуска и автоматически запустится при входе в систему в следующий раз. Вы также можете запустить сценарий вручную, например. Alt + F2 HUD в Unity.

5
ответ дан 18 July 2018 в 05:57

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

здесь

#!/usr/bin/env python3 # Configuration: APPNAME = "Clipboard Notifier" # an arbitrary application name TITLE = "Clipboard modified" # the bold headline of each notification ICON = "edit-paste" # name of the icon to show MAXLENGTH = 100 # maximum message length # Imports: import gi import signal import notify2 gi.require_version("Gtk", "3.0") from gi.repository import Gtk, Gdk # Set up signal handler for killing the script with Ctrl+C from terminal: signal.signal(signal.SIGINT, signal.SIG_DFL) # Initialize the notifications library: notify2.init(APPNAME) # Callback function to handle clipboard modification events: def callback(*args): # Get new clipboard content: text = clip.wait_for_text() # Truncate long content to avoid huge notification bubbles: body = text if len(text) < MAXLENGTH else text[:MAXLENGTH] + "..." # Create and show notification bubble: notify2.Notification(TITLE, body, ICON).show() # Set up clipboard and register callback for change events clip = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) clip.connect("owner-change", callback) # Start Gtk main loop and wait for events: Gtk.main()

Сохраните это где-нибудь (например, как /usr/local/bin/clipboard-notifier - вам нужно sudo, чтобы разрешить писать в этом месте, но, альтернативно, поместить его в ~/bin) и сделать его исполняемым с помощью команды chmod +x FILENAME.

Мой скрипт использует пакет Python 3 notify2 для отображения собственных пузырьков уведомлений. Этот пакет обычно не устанавливается по умолчанию, вы должны сначала добавить его с помощью следующей команды:

sudo apt install python3-notify2

Если вы хотите, вы можете изменить значения капитализированных переменных рядом с началом сценария, чтобы ваши потребности, особенно TITLE и MAXLENGTH, могут быть полезны для изменения.

Затем просто добавьте его в свои приложения для запуска и автоматически запустится при входе в систему в следующий раз. Вы также можете запустить сценарий вручную, например. Alt + F2 HUD в Unity.

5
ответ дан 24 July 2018 в 18:28

Я создал более стандартное решение с использованием сценариев bash только без дополнительных библиотек:

Вот как я это сделал:

Создайте файл с именем: clp-notify и сделайте это исполняемый файл.

Сохраните файл: /home/$USER/add-ons/scripts/clp-notify

#!/bin/bash

echo "Script $0 started..."
notify-send -u normal -t 3000 -i info 'Script Started!' $0

clip_command="xclip -selection clipboard -o"
current_value=`$clip_command`

while true
do
   new_value=`$clip_command`

   if [[ ! ("$current_value" == "$new_value") ]];
   then      
      echo 'Clipboard Modified...'
      notify-send -u normal -t 3000 -i info 'Clipboard Modified!' 'Your clipboard has been modified.'

      current_value=$new_value
   else
      echo "Polliing..."
   fi

   sleep 1.5
done

Затем я создал второй файл с именем start-clipboard-polling, который вызывает вышеупомянутый скрипт, и это второй файл который добавляется к запуску:

#!/bin/bash

script_path=/home/$USER/add-ons/scripts/clp-notify

function IsClipboardPollingRunning
{
   if (ps -A | grep -q "clp-notify")
   then
      return 1;
   else
      return 0;        
   fi
}

if (IsClipboardPollingRunning == 0)
then
   echo "Starting $script_path"   
   nohup $script_path &
else
   echo "$script_path is already running"
   notify-send -u normal -t 3000 -i info 'Clipboard Notify' "$script_path is already running."
fi

Цель этого второго файла состоит в том, чтобы предотвратить запуск исходного clp-notify несколько раз, потому что скрипт clp-notify будет продолжать работать, даже если вы входите в систему (! d5)

Затем вам нужно добавить это start-clipboard-polling в свои приложения для запуска.

Существует только одна проблема с этим. Хотя второй скрипт заботится о том, чтобы предотвратить clp-notify от запуска несколько раз, когда вы выходите из системы и из него (поскольку исходный экземпляр все еще работает с предыдущего сеанса), во второй раз, когда вы входите в систему по какой-либо причине, следующие условие не выполняется:

if [[ ! ("$current_value" == "$new_value") ]];

, и это означает, что уведомления не будут работать. Для этого нужно закончить исходный экземпляр из start-clipboard-polling и перезапустить clp-notify как новый экземпляр, и это все, и вы можете удалить раздел, который проверяет, работает ли clp-notify, но я не хочу

В противном случае он будет продолжать работать нормально, пока вы не выйдете из системы.

Кстати, вам нужно: [!d10 ]

sudo apt install xclip
2
ответ дан 22 May 2018 в 17:58
  • 1
    Как реализовано, IsClipboardPollingRunning следует называть IsClipboardPollingNotRunning, потому что в сценариях оболочки (в отличие от большинства программ) 1 означает false, а 0 означает true. Код, подобный if (IsClipboardPollingRunning == 0) в bash, является ошибкой - он не сравнивает что-либо с 0 - и в этом случае ошибка устраняет ошибку в IsClipboardPollingRunning. То, что if (IsClipboardPollingRunning == 0) делает, заключается в использовании подоболочки (( )) для вызова IsClipboardPollingRunning и передачи двух аргументов == и 0, которые игнорируются. В этом скрипте if IsClipboardPollingRunning имеет тот же эффект. – Eliah Kagan 1 October 2017 в 11:48
  • 2
    Я попробовал свой оригинальный скрипт, когда он существовал Сен 30 21:27. и сбросил его в мой каталог ~ / bin, выполнил исполняемый файл. и тестировали. Конечно, это бесконечный цикл, но это сработало для меня. Я не пытался выходить из системы, так как это не то, что я лично хотел автоматизировать. Он уведомляется, как ожидалось, при изменении буфера обмена. Я не тестировал ваш второй скрипт. Вы можете найти этот Q & amp; A для булевых переменных bash интересным. stackoverflow.com/questions/2953646/&hellip – Elder Geek 1 October 2017 в 22:35
  • 3
    Спасибо, как я уже сказал, вы всегда можете завершить все clp-уведомления процессов со второго скрипта (который будет запускаться при запуске) и просто повторно вызвать первый скрипт, и это решит проблему (уже протестировало ее). Я оставил старую версию сценария здесь только для других людей, чтобы увидеть, как я это изначально. – marko 1 October 2017 в 22:55

Я создал более стандартное решение с использованием сценариев bash только без дополнительных библиотек:

Вот как я это сделал:

Создайте файл с именем: clp-notify и сделайте это исполняемый файл.

Сохраните файл: /home/$USER/add-ons/scripts/clp-notify

#!/bin/bash echo "Script $0 started..." notify-send -u normal -t 3000 -i info 'Script Started!' $0 clip_command="xclip -selection clipboard -o" current_value=`$clip_command` while true do new_value=`$clip_command` if [[ ! ("$current_value" == "$new_value") ]]; then echo 'Clipboard Modified...' notify-send -u normal -t 3000 -i info 'Clipboard Modified!' 'Your clipboard has been modified.' current_value=$new_value else echo "Polliing..." fi sleep 1.5 done

Затем я создал второй файл с именем start-clipboard-polling, который вызывает вышеупомянутый скрипт, и это второй файл который добавляется к запуску:

#!/bin/bash script_path=/home/$USER/add-ons/scripts/clp-notify function IsClipboardPollingRunning { if (ps -A | grep -q "clp-notify") then return 1; else return 0; fi } if (IsClipboardPollingRunning == 0) then echo "Starting $script_path" nohup $script_path & else echo "$script_path is already running" notify-send -u normal -t 3000 -i info 'Clipboard Notify' "$script_path is already running." fi

Цель этого второго файла состоит в том, чтобы предотвратить запуск исходного clp-notify несколько раз, потому что скрипт clp-notify будет продолжать работать, даже если вы входите в систему (! d5)

Затем вам нужно добавить это start-clipboard-polling в свои приложения для запуска.

Существует только одна проблема с этим. Хотя второй скрипт заботится о том, чтобы предотвратить clp-notify от запуска несколько раз, когда вы выходите из системы и из него (поскольку исходный экземпляр все еще работает с предыдущего сеанса), во второй раз, когда вы входите в систему по какой-либо причине, следующие условие не выполняется:

if [[ ! ("$current_value" == "$new_value") ]];

, и это означает, что уведомления не будут работать. Для этого нужно закончить исходный экземпляр из start-clipboard-polling и перезапустить clp-notify как новый экземпляр, и это все, и вы можете удалить раздел, который проверяет, работает ли clp-notify, но я не хочу

В противном случае он будет продолжать работать нормально, пока вы не выйдете из системы.

Кстати, вам нужно:

sudo apt install xclip
3
ответ дан 24 July 2018 в 18:28
  • 1
    Как реализовано, IsClipboardPollingRunning следует называть IsClipboardPollingNotRunning, потому что в сценариях оболочки (в отличие от большинства программ) 1 означает false, а 0 означает true. Код, подобный if (IsClipboardPollingRunning == 0) в bash, является ошибкой - он не сравнивает что-либо с 0 - и в этом случае ошибка устраняет ошибку в IsClipboardPollingRunning. То, что if (IsClipboardPollingRunning == 0) делает, заключается в использовании подоболочки (( )) для вызова IsClipboardPollingRunning и передачи двух аргументов == и 0, которые игнорируются. В этом скрипте if IsClipboardPollingRunning имеет тот же эффект. – Eliah Kagan 1 October 2017 в 11:48
  • 2
    Я попробовал свой оригинальный скрипт, когда он существовал Сен 30 21:27. и сбросил его в мой каталог ~ / bin, выполнил исполняемый файл. и тестировали. Конечно, это бесконечный цикл, но это сработало для меня. Я не пытался выходить из системы, так как это не то, что я лично хотел автоматизировать. Он уведомляется, как ожидалось, при изменении буфера обмена. Я не тестировал ваш второй скрипт. Вы можете найти этот Q & amp; A для булевых переменных bash интересным. [D0] stackoverflow.com/questions/2953646/&hellip – Elder Geek 1 October 2017 в 22:35
  • 3
    Спасибо, как я уже сказал, вы всегда можете завершить все clp-уведомления процессов со второго скрипта (который будет запускаться при запуске) и просто повторно вызвать первый скрипт, и это решит проблему (уже протестировало ее). Я оставил старую версию сценария здесь только для других людей, чтобы увидеть, как я это изначально. – marko 1 October 2017 в 22:55

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

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