Gerenciador de área de transferência pesquisável, como ctrl-r no bash

7

Estou procurando um gerenciador de área de transferência com funcionalidade de pesquisa. Eu amo Ctrl R no shell bash e gostaria de ter a mesma funcionalidade como no gerenciador da área de transferência para o meu desktop.

Até agora, tenho usado diodon , mas esse recurso não existe em diodon . Veja a pergunta relacionada link

Caso de uso:

  • copio "internacionalização" colada antes.
  • eu digito o próximo texto.
  • Eu quero inserir "internacionalização" novamente.
  • acertei um toque de tecla mágica. Em seguida, "inter" e, em seguida, quero ver uma lista de todas as cadeias que copio e colei nos últimos dias.
  • Eu escolho o que eu quero. Feito.

Com diodon , obtenho uma longa lista dos últimos jogos, isso é bom, mas não perfeito.

    
por guettli 27.10.2016 / 13:42

5 respostas

5

Introdução

Como dito nos comentários, escrevi um indicador simples do gerenciador da área de transferência com o uso do Python 3 e alguns diálogos zenity , que permitem manipular o conteúdo da área de transferência, assim como a funcionalidade de pesquisa.

A funcionalidade de pesquisa, em particular, faz uso do módulo re do Python, o que significa que você pode usar expressões regex para pesquisas mais refinadas. Cada entrada de texto tem 4 opções em seu submenu: insira texto na área de transferência, acrescente o texto ao final do que está atualmente no bloco, anexe o texto ao início do conteúdo atual e remova-o do histórico.

Instalação

No terminal, execute os seguintes comandos:

sudo add-apt-repository ppa:1047481448-2/sergkolo
sudo apt-get update
sudo apt-get install indicator-bulletin

Demo

Na animação abaixo, você pode ver a demonstração do texto sendo copiado, a área de transferência anexada ao indicador e, finalmente, a sequência de teste é pesquisada por meio da caixa de diálogo de pesquisa simples. Os conteúdos encontrados são exibidos em um diálogo de exibição de texto simples com registro de data e hora na localidade do usuário (se estiver definido). O texto encontrado pode então ser copiado através da seleção de texto e usando o atalho padrão Ctrl + C .

Casoalguémestejaseperguntando:

  • aanimaçãoéfeitacom silentcast app
  • o tema do desktop e do ícone é o tema do Ubuntu Kylin, versão 16.04
  • Sim, é o Ubuntu (16.04) com o iniciador na parte inferior .

Desenvolvimento adicional

O indicador foi feito em um dia, portanto é de natureza bastante minimalista no momento. No futuro, haverá recursos adicionais adicionados, como o diálogo de preferências. O tamanho do menu e a largura do texto estão atualmente codificados para 10 itens no indicador e 30 caracteres no máximo para cada entrada.

Se você quiser fazer uma solicitação de recurso, envie um ticket de problema na página do GitHub do projeto, onde seu código-fonte também está disponível.

Atualizações:

14 de fevereiro de 2017:

  • Recurso de operações de arquivos implementados - carregar um arquivo de texto na área de transferência e gravar o conteúdo da área de transferência no arquivo.
  • Implementado exibindo o intervalo de entradas por data. A opção solicita a caixa de diálogo zenity forms, que requer a data inicial e final em YYYY/MM/DD/HH:SS format. Efetivamente, este é o log de leitura dentro do intervalo de datas, o mesmo que isso
  • correções de erros em pares

15 de fevereiro de 2017:

  • Adicionado submenu de edição. Os usuários agora podem converter o conteúdo da área de transferência em maiúsculas / minúsculas, cortar palavras / caracteres do início ou no final do texto e substituir expressões (usa re regex do python).

17 de fevereiro de 2017:

  • Opção adicionada para abrir um item de histórico no arquivo de texto (semelhante a bash 's fcedit ). Até agora isso só abre programa padrão definido para o tipo de arquivo de texto sem formatação.
  • melhorias de pares e correções de bugs.

Fevereiro 19,2017:

  • Adicionadas operações base64 (codificar / decodificar).

3 de março de 2017:

  • Adicionado "submenu fixo" e capacidade de "fixar" itens específicos do histórico da área de transferência. Código refatorado, certas partes reescritas para uso repetido.
por Sergiy Kolodyazhnyy 13.02.2017 / 08:46
4

Recomendações de dentro do Ask Ubuntu

A partir disso ( Clipboard Manager for Ubuntu 16.04 ) aprendemos com os usuários :

  • Clipit é o melhor entre todos.
  • CopyQ é um gerenciador de pranchetas multi-plataforma, bem projetado e completo (meu favorito). Possui, entre outros, uma interface de linha de comando (muito útil).

A partir disso ( Gerenciador de área de transferência do Ubuntu 14.04? ) aprendemos com os usuários:

  • Glipper é um gerenciador de área de transferência, pode ser instalado a partir do Centro de Software.
  • Eu uso ClipIt é um fork Parcelite com integração de menu do Ubuntu. (Este pacote foi listado na primeira seção acima)
  • Estou usando o GPaste
  • Você pode tentar o Keepboard . É fácil de usar e parece ser estável e confiável.
  • O Diodon é outra boa opção disponível para o GTK e o Unity. Funciona muito bem como os outros nas respostas já dadas. No entanto, você pode pesquisar seus "clipes" recentes usando o Dash. (Você já está usando esta versão e não gosta disso.)
  • Eu uso Clippy , um docklet que funciona com o Plank (não uso o Unity). Eu acho que o Clippy também vem com o Docky.

Recomendações fora do Ask Ubuntu

Não ficar para trás pelos usuários do Ubuntu ( tecmint.com - 10 melhores gerenciadores de clipboard para Linux ) recomenda:

  • O CopyQ é um gerenciador avançado da área de transferência que está disponível na maioria, se não em todas as plataformas.
  • O GPaste é um poderoso e ótimo gerenciador de clipboard para distribuições baseadas no GNOME, mas também pode trabalhar em uma variedade de ambientes de desktop
  • O Diodon é um gerenciador de prancheta leve, mas poderoso, projetado para funcionar melhor quando integrado aos ambientes de área de trabalho Unity e GNOME. (Mais uma vez você não gosta deste pacote)
  • Pastie é um gerenciador de prancheta simples para o Ubuntu e faz uso do AppIndicator. Tem alguns recursos interessantes.
  • O Parcellite é um gerenciador de área de transferência de recursos básicos GTK + 2 leve e despojado para Linux.
  • Glipper é uma ferramenta de gerenciamento de área de transferência para o ambiente de área de trabalho GNOME, os usuários podem estender sua funcionalidade usando plug-ins. Agora ele usa o Indicador App para suportar ambientes de desktop Unity e Gnome Classic no Ubuntu.
  • O Clipit é um gerenciador de pranchetas GTK + leve. Ele é rico em recursos e, na verdade, bifurcado a partir do Parcellite, mas inclui alguns recursos extras e correções de bugs.
  • O Keepboard é um gerenciador de área de transferência de plataforma cruzada que permite aos usuários salvar o histórico da área de transferência.
  • Eu removi alguns da lista daqueles que não funcionam com o Ubuntu. Por isso, não somam 10 no título do artigo.

Existem outras revisões dos mesmos pacotes listados acima em ( makeuseof.com - 6 Ferramentas para gerenciar a área de transferência do Linux ) e em ( maketecheasier.com - Aprimore a área de transferência do Linux com gerenciador de área de transferência ).

Resumo

No final do dia, o pacote escolhido é aquele com o qual você se sente mais confortável. Ninguém pode dizer com certeza qual pacote será. Quase todos eles oferecem uma história pesquisável como você quer, mas qual deles tem a interface mais adequada ao seu modo de pensar?

    
por WinEunuuchs2Unix 14.02.2017 / 01:17
4

1. Utilitário de área de transferência minimalista para pesquisar rapidamente (atualizado dinamicamente) o histórico da área de transferência

Com a configuração abaixo, é extremamente fácil pesquisar textos copiados recentemente (sequências de caracteres) e colá-los com um duplo clique nos seus documentos. A configuração não é a mais simples de todas (atualmente), o uso é extremamente simples.

Como funciona na prática

  1. Pressione um atalho, uma pequena janela é exibida:

  2. Digiteumoumaiscaracteresparalimitaraseleção:

  3. Cliqueduasvezesnasequênciaquegostariadeinserir:

  4. Astringécoladanoseudocumento,ajanelasefecha:

Configurar

Aconfiguraçãoincluidoispequenosscripts

script1;umscriptdesegundoplanoparaobservaralteraçõesnaáreadetransferência

import time import pyperclip import os # set the minimum length of a string to be listed minlength = 3 # set the number of recently copied strings to be remembered size = 500 clipdb = os.path.join(os.environ["HOME"], ".wordlist") def update_words(words): try: currwords = open(clipdb).read().splitlines() except FileNotFoundError: currwords = [] add = list(set(words.split())) newwords = [s for s in add+currwords if len(s) >= minlength][:size] open(clipdb, "wt").write("\n".join(newwords)) clp1 = "" while True: time.sleep(0.2) clp2 = pyperclip.paste() if clp2 != clp1: update_words(clp2) clp1 = clp2

script 2; para chamar de uma tecla de atalho

#!/usr/bin/env python3
import subprocess
import os
import sys
from tkinter import*
from operator import itemgetter
import pyperclip
import time

def sortlist(l):
    low = sorted(list(enumerate([s.lower() for s in set(l)])), key=itemgetter(1))
    return [l[i] for i in [item[0] for item in low]]   

def limit(*args):
    listbox.delete(0, END)
    for w in [s for s in show if s.lower().startswith(insert.get())]:
        listbox.insert(END, w)

def getpaste(*args):
    test = listbox.get(ACTIVE)
    pyperclip.copy(test)
    master.destroy()
    subprocess.Popen(["xdotool", "key", "Control_L+v"])

clipdb = os.path.join(os.environ["HOME"], ".wordlist")

try:
    currwords = open(clipdb).read().splitlines()
except FileNotFoundError:
    pass
else:   
    show = sortlist(currwords)
    master = Tk()
    master.resizable(False, False)
    master.title("Insert")
    listbox = Listbox(
        master,
        highlightbackground = "white",
        highlightthickness=0,
        highlightcolor="blue",
        relief=FLAT,
        )
    listbox.bind(
        "<Double-Button-1>",
        getpaste,
        )
    listbox.pack()
    insert = Entry(
        master,
        highlightbackground = "white",
        highlightthickness=1,
        highlightcolor="#C8C8C8",
        relief=FLAT,
        )
    insert.pack()
    insert.bind("<KeyRelease>", limit)
    insert.focus_set()

    for item in show:
        listbox.insert(END, item)
    mainloop()

Como configurar

  1. O script precisa de python3-pyperclip , python3-tkinter e xdotool :

    sudo apt-get install xdotool python3-pyperclip python3-tkinter
    
  2. Copie o script 1 em um arquivo vazio, salve-o como watch_clipboard.py
  3. Copie o script 2 em um arquivo vazio, salve-o como paste_recent.py
  4. (Teste-) execute o script 1 como um script de segundo plano com o comando:

    python3 /path/to/watch_clipboard.py
    

    Comece a copiar o tekst, que é automaticamente lembrado (até um número arbitrário de strings, lembrando as últimas strings).

  5. Adicione o script 2 a um atalho: escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione o comando:

    python3 /path/to/paste_recent.py
    

    Abra uma janela gedit e chame a pequena janela com seu atalho e use o utilitário conforme explicado na introdução.

  6. Se tudo funcionar bem, adicione o script 1 a Startup Applications: Dash > Aplicativos de inicialização > Adicionar. Adicione o comando:

    python3 /path/to/watch_clipboard.py
    

Opções

Na seção head do script, você pode definir o comprimento mínimo de uma string, a ser listada no histórico da área de transferência (número de caracteres):

minlength = 1

Além disso, você pode definir quantas strings devem ser mantidas no histórico (tamanho do banco de dados):

size = 500

Notas

  • Atualmente, o utilitário funciona com todas as aplicações compatíveis com Ctrl + Alt + V . A versão abaixo também cola em gnome-terminal .

2. Versão do indicador (single-script, setup simples) com atalho de teclado opcional , também colando corretamente no gnome-terminal

#!/usr/bin/env python3 import subprocess import os import time import signal import gi gi.require_version('Gtk', '3.0') gi.require_version('AppIndicator3', '0.1') from gi.repository import Gtk, AppIndicator3 from threading import Thread import pyperclip import sys from tkinter import* from operator import itemgetter #--- clipdb = os.path.join(os.environ["HOME"], ".wordlist") minlength = 5 size = 500 arg = sys.argv[1] pyperclip.copy("") def get(cmd): return subprocess.check_output(cmd).decode("utf-8").strip() def check_terminal(): return get(["xdotool", "getwindowfocus"]) in get(["xdotool", "search", "--class", "terminal"]) def getfromfile(): try: return open(clipdb).read().splitlines() except FileNotFoundError: return [] def update_words(words): currwords = getfromfile() add = list(set(words.split())) newwords = [s for s in add+currwords if len(s) >= minlength][:size] open(clipdb, "wt").write("\n".join(newwords)) class SearchClip(): def __init__(self): self.currwords = list(set(getfromfile())) self.showwin() def sortlist(self, l): low = sorted(list(enumerate([s.lower() for s in set(l)])), key=itemgetter(1)) return [l[i] for i in [item[0] for item in low]] def limit(self, *args): self.listbox.delete(0, END) for w in [s for s in self.show if s.lower().startswith(self.insert.get())]: self.listbox.insert(END, w) def getpaste(self, *args): test = self.listbox.get(ACTIVE) pyperclip.copy(test) self.master.destroy() time.sleep(0.2) cmd = ["xdotool", "key", "Control_L+Shift+v"] if\ check_terminal() else ["xdotool", "key", "Control_L+v"] subprocess.Popen(cmd) def showwin(self): self.show = self.sortlist(self.currwords) self.master = Tk() self.master.resizable(False, False) self.master.title("Insert") self.listbox = Listbox( self.master, highlightbackground = "white", highlightthickness=0, highlightcolor="blue", relief=FLAT, ) self.listbox.bind( "<Double-Button-1>", self.getpaste, ) self.listbox.pack() self.insert = Entry( self.master, highlightbackground = "white", highlightthickness=1, highlightcolor="#C8C8C8", relief=FLAT, ) self.insert.pack() self.insert.bind("<KeyRelease>", self.limit) self.insert.focus_set() for item in self.show: self.listbox.insert(END, item) mainloop() class ClipTrip(): def __init__(self): self.app = "ClipTrip" iconpath = "mail-attachment" self.indicator = AppIndicator3.Indicator.new( self.app, iconpath, AppIndicator3.IndicatorCategory.OTHER) self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE) self.indicator.set_menu(self.create_menu()) self.watchclip = Thread(target=self.clipwatch) self.watchclip.setDaemon(True) self.watchclip.start() def clipwatch(self): clp1 = "" while True: time.sleep(0.2) clp2 = pyperclip.paste() if clp2 != clp1: update_words(clp2) clp1 = clp2 def create_menu(self): self.menu = Gtk.Menu() self.item_search = Gtk.MenuItem('Search clipboard history') self.item_search.connect('activate', run_search) self.menu.append(self.item_search) menu_sep = Gtk.SeparatorMenuItem() self.menu.append(menu_sep) self.item_quit = Gtk.MenuItem('Quit') self.item_quit.connect('activate', self.stop) self.menu.append(self.item_quit) self.menu.show_all() return self.menu def stop(self, source): Gtk.main_quit() def run_search(*args): SearchClip() if arg == "run": ClipTrip() signal.signal(signal.SIGINT, signal.SIG_DFL) Gtk.main() elif arg == "search": run_search()

Configurar

Esta versão tem praticamente a mesma funcionalidade que os scripts em [1] , mas como um indicador e mais simples de configurar:

  1. Como na opção 1, o script precisa de python3-pyperclip , python3-tkinter e xdotool :

    sudo apt-get install xdotool python3-pyperclip python3-tkinter
    
  2. Copie o script em um arquivo vazio, salve como history_indicator.py

  3. Execute-o pelo comando:

    python3 /path/to/history_indicator.py run
    

    para iniciar o indicador + script de plano de fundo. Escolha Pesquisar histórico da área de transferência no menu para chamar a janelinha.

    ou

    Para chamar a janela de uma forma alternativa, execute

    python3 /path/to/history_indicator.py search
    
por Jacob Vlijm 13.02.2017 / 21:29
0

O aplicativo unity-scope-diodon suporta isso.

Mas a interface não é do jeito que eu gosto:

Se eu acertar super-b, meus olhos verão 12 * 7 = 84 vezes o mesmo grande ícone, o que não me interessa.

Seria bom se o próprio diodon suportasse isso.

    
por guettli 01.11.2016 / 15:47
0

CopyQ é um excelente gerenciador de área de transferência do Linux. Tem toneladas de recursos valiosos (incluindo Ctrl-R como pesquisa).

Instalar:

$ sudo add-apt-repository ppa:hluk/copyq
$ sudo apt update
$ sudo apt install copyq

Adicione um atalho global para inserção:

ícone da bandeja > Preferências > Guia de atalhos > Ações personalizadas e atalhos globais. > Adicionar > Mostrar / ocultar janela principal

    
por Viktor Kruglikov 02.12.2017 / 13:35