Я ищу менеджера по буферу обмена с функциональностью поиска. Я люблю CtrlR в bash
окружите и хотел бы иметь ту же функциональность как этот в менеджере по буферу обмена для моего рабочего стола.
До сих пор я использовал diodon
, но эта функция не существует в diodon
. Посмотрите связанный вопрос там https://answers.launchpad.net/diodon / + вопрос/403507
Вариант использования:
С diodon
Я получаю длинный список последних соответствий, это хорошо, но не прекрасно.
От этого ( менеджер по Буферу обмена для Ubuntu 16.04 ), мы учимся от пользователей:
От этого ( менеджер по Буферу обмена Ubuntu 14.04? ), мы учимся от пользователей:
Не была превзойдена пользователями Ubuntu, которых это ( tecmint.com - 10 лучших менеджеров по буферу обмена для Linux) рекомендует:
существуют другие обзоры тех же пакетов, упомянутых выше найденный в ( makeuseof.com - 6 Инструментов для управления буфером обмена Linux ) и в (, maketecheasier.com - Улучшает буфер обмена Linux с менеджером по буферу обмена ).
В конце дня пакет, который Вы выбираете, является тем, которым Вы являетесь самыми довольными. Никто не может сказать наверняка, какой пакет, который будет. Почти все они предлагают доступную для поиска историю как Вы, хотят это, но какой интерфейс лучше всего настроил к Вашему образу мыслей?
Приложение unity-scope-diodon
поддерживает это.
, Но интерфейс не способ, которым мне нравится он:
, Если я совершил нападки превосходный, мои глаза видят 12*7 = 84 раза тот же большой значок, которым я не интересуюсь вообще.
было бы хорошо, если сам diodon будет поддерживать это.
Как указано в комментариях, я записал простой индикатор менеджера по буферу обмена с использованием Python 3 и некоторых zenity
диалоговые окна, который позволяет управлять содержанием буфера обмена, а также имеет функциональность поиска.
Функциональность поиска, в частности, использует Python re
модуль, что означает Вас, может использовать regex выражения для более мелкомодульного поиска. Каждый ввод текста имеет 4 опции в своем подменю: вставьте текст в буфер обмена, добавьте текст в конец того, что в настоящее время находится в cliboard, предварительно ожидайте текст к началу текущего содержания и удалите его из истории.
В терминале, выполненном следующие команды:
sudo add-apt-repository ppa:1047481448-2/sergkolo
sudo apt-get update
sudo apt-get install indicator-bulletin
В анимации ниже Вас видят демонстрацию скопированного текста, буфер обмена, добавленный к с индикатором, и наконец тестовая строка ищется через простое поисковое диалоговое окно. Найденное содержание отображено в простом текстовом диалоговом окне представления с меткой времени в локали пользователя (если это установлено). Найденный текст затем может быть скопирован через выбор текста и использование стандартного ярлыка Ctrl+C.
В случае, если кто-либо задается вопросом:
Индикатор был сделан за один день, таким образом это является довольно минималистическим по своей природе с прямо сейчас. В будущем будут добавленные дополнительные опции, такие как предпочтительное диалоговое окно. Длина меню и текстовая ширина в настоящее время трудно кодируются к 10 объектам в индикаторе и 30 символам макс. для каждой записи.
Если Вы хотите сделать запрос новых функций, отправьте билет проблемы на странице GitHub проекта, где ее исходный код также доступен.
Февраль 14,2017:
zenity
диалоговое окно форм, которое требует запуска и конечной даты в YYYY/MM/DD/HH:SS
формат. Эффективно, это - показания в диапазоне дат, то же как этоФевраль 15,2017:
re
regex).Февраль 17,2017:
bash
fcedit
). До сих пор это только открывает набор программы по умолчанию для типа файла простого текста. Февраль 19,2017:
3-го марта 2017:
С установкой ниже, чрезвычайно легко искать недавно скопированный (строки с) текст и вставить его двойным щелчком в Ваши документы. Установка не является самой простой из всех (в настоящее время), использование чрезвычайно просто все же.
Нажмите ярлык, маленькое окно появляется:
Введите один или несколько символов для ограничения выбора:
Дважды щелкните по строке, которую требуется вставить:
Строка вставляется в Вашем документе, окно закрывает себя:
Установка включает два маленьких сценария
сценарий 1; фоновый сценарий для наблюдения за изменениями в буфере обмена
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
сценарий 2; звонить от сочетания клавиш
#!/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()
Как настроить
Потребности сценария python3-pyperclip
, python3-tkinter
и xdotool
:
sudo apt-get install xdotool python3-pyperclip python3-tkinter
watch_clipboard.py
paste_recent.py
(Тест-) выполненный сценарий 1 как фоновый сценарий с командой:
python3 /path/to/watch_clipboard.py
Начните копировать tekst, который автоматически помнят (до произвольного числа строк, помня последние строки n-).
Добавьте сценарий 2 к ярлыку: выберите: Параметры настройки системы> "Клавиатура"> "Ярлыки"> "Пользовательские Ярлыки". Нажмите "+" и добавьте команду:
python3 /path/to/paste_recent.py
Открытый a gedit
окно и вызов небольшое окно с Вашим ярлыком и использование утилита, как объяснено во введении.
Если все хорошо работает, добавьте сценарий 1 для Запущения Приложений: Тире> Приложения Запуска> Добавляет. Добавьте команду:
python3 /path/to/watch_clipboard.py
В главном разделе сценария можно установить минимальную длину строки, чтобы быть перечисленными в истории буфера обмена (количество символов):
minlength = 1
Кроме того, можно установить, сколько строк должно быть сохранено в истории (размер базы данных):
size = 500
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()
Эта версия имеет в значительной степени ту же функциональность как сценарии в [1]
, но как индикатор и более простой настроить:
Как в опции 1, потребностях сценария python3-pyperclip
, python3-tkinter
и xdotool
:
sudo apt-get install xdotool python3-pyperclip python3-tkinter
Скопируйте сценарий в пустой файл, сохраните как history_indicator.py
Выполните его командой:
python3 /path/to/history_indicator.py run
запустить индикатор + фоновый сценарий. Выберите историю буфера обмена Search из меню для вызова небольшого окна.
или
Для вызова окна альтернативным способом работать
python3 /path/to/history_indicator.py search
CopyQ является удивительным усовершенствованным менеджером по буферу обмена Linux. Это имеет тонны ценных функций (включая Ctrl-R как поиск).
Установка:
$ sudo add-apt-repository ppa:hluk/copyq
$ sudo apt update
$ sudo apt install copyq
И добавьте глобальный ярлык для вставки:
Значок панели задач> Предпочтения> Вкладка Ярлыков> Пользовательские действия и Глобальные Ярлыки..> Главное окно Add> Show/hide