AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 960892
Accepted
eri0o
eri0o
Asked: 2017-10-01 12:58:13 +0800 CST2017-10-01 12:58:13 +0800 CST 2017-10-01 12:58:13 +0800 CST

Posso obter feedback visual ao copiar com Ctrl+C?

  • 772

Muitas vezes eu preciso Ctrl+ C(ou Ctrl+ Insert) várias vezes para copiar algo. Eu apreciaria um feedback visual que diga "uma coisa nova foi copiada" ou algo assim. Existe alguma maneira de adicionar isso ao Ubuntu?

unity
  • 2 2 respostas
  • 524 Views

2 respostas

  • Voted
  1. Best Answer
    Byte Commander
    2017-10-01T14:51:58+08:002017-10-01T14:51:58+08:00

    Eu adaptei meu script para reagir às alterações da área de transferência daqui para que ele mostre um balão de notificação nativo sempre que você copiar algo:

    insira a descrição da imagem aqui

    #!/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()
    

    Salve-o em algum lugar (por exemplo, como /usr/local/bin/clipboard-notifier- você precisa sudoter permissão para escrever nesse local, alternativamente, coloque-o em ~/bin) e torne-o executável usando o comando chmod +x FILENAME.

    Meu script usa o pacote Python 3 notify2para exibir os balões de notificação nativos. Este pacote normalmente não é instalado por padrão, você deve adicioná-lo primeiro com o comando abaixo:

    sudo apt install python3-notify2
    

    Se desejar, você pode modificar os valores das variáveis ​​em letras maiúsculas próximo ao início do script de acordo com suas necessidades, especialmente TITLEe MAXLENGTHpode ser útil alterar.

    Em seguida, basta adicioná-lo aos seus aplicativos de inicialização e ele será iniciado automaticamente quando você fizer login na próxima vez. Você também pode iniciar o script manualmente, por exemplo, Alt+ F2HUD no Unity.

    • 6
  2. marko
    2017-10-01T17:29:38+08:002017-10-01T17:29:38+08:00

    Eu criei uma solução mais padrão usando apenas scripts bash sem bibliotecas extras:

    Aqui está como eu fiz isso:

    Crie um arquivo chamado: clp-notifye torne-o executável.

    Salve o arquivo em:/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
    

    Em seguida, criei um segundo arquivo chamado start-clipboard-pollingque invoca o script acima e é esse segundo arquivo que é adicionado à inicialização:

    #!/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
    

    O objetivo desse segundo arquivo é impedir que o original clp-notifyseja iniciado várias vezes porque o clp-notifyscript continuará a ser executado mesmo se você fizer logout e login ou reiniciar o servidor X.

    Então você precisa adicionar isso start-clipboard-pollingaos seus aplicativos de inicialização.

    Há apenas um problema com isso. Embora o segundo script cuide para impedir clp-notifyque você inicie várias vezes quando você fizer logout e login (porque a instância original ainda estaria em execução na sessão anterior), na segunda vez que você fizer login, por algum motivo, a seguinte condição falhará:

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

    e isso significa que as notificações não funcionarão. A solução alternativa para isso é encerrar a instância original de dentro start-clipboard-pollinge reiniciar clp-notifycomo uma nova instância e é isso e então você pode excluir a seção que verifica se clp-notifyestá em execução, mas não quero usar a solução alternativa, estou mais interessado de por que ele falha.

    Caso contrário, ele continuará funcionando bem até você sair.

    Aliás, você precisa:

    sudo apt install xclip
    
    • 3

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve