検索機能を備えたクリップボードマネージャーを探しています。私は愛してる CtrlR bash
シェルで、デスクトップのクリップボードマネージャーと同じ機能を使用したいと考えています。
これまでdiodon
を使用していましたが、この機能はdiodon
には存在しません。関連する質問を参照してください https://answers.launchpad.net/diodon/+question/403507
使用事例:
diodon
を使用すると、最後の一致の長いリストが得られます。これは良いことですが、完全ではありません。
コメントで述べたように、Python 3といくつかのzenity
ダイアログを使用して、クリップボードの内容を操作したり、検索機能を備えたシンプルなクリップボードマネージャーインジケーターを作成しました。
特に、検索機能はPythonのre
モジュールを使用します。つまり、正規表現を使用してより詳細な検索を行うことができます。各テキストエントリには、サブメニューに4つのオプションがあります。クリップボードにテキストを挿入し、現在クリボードにあるものの末尾にテキストを追加し、現在のコンテンツの先頭にテキストを追加し、履歴から削除します。
ターミナルで、次のコマンドを実行します。
Sudo add-apt-repository ppa:1047481448-2/sergkolo
Sudo apt-get update
Sudo apt-get install indicator-bulletin
以下のアニメーションでは、コピーされるテキストのデモ、インジケーターが追加されたクリップボードを確認でき、最後に簡単な検索ダイアログを介してテスト文字列が検索されます。見つかったコンテンツは、ユーザーのロケール(設定されている場合)のタイムスタンプとともに、シンプルなテキストビューダイアログに表示されます。見つかったテキストは、テキストを選択し、標準を使用してコピーできます Ctrl+C ショートカット。
誰かが疑問に思っている場合:
インジケーターは1日で作成されたため、現時点ではかなりミニマルです。将来的には、設定ダイアログなどの追加機能が追加される予定です。現在、メニューの長さとテキストの幅は、インジケータで10項目、各エントリで最大30文字にハードコードされています。
機能のリクエストを行う場合は、プロジェクトの GitHubページ で発行チケットを送信してください。ソースコードも入手可能です。
2017年2月14日:
YYYY/MM/DD/HH:SS
形式の開始日と終了日を必要とするzenity
フォームダイアログを呼び出します。事実上、これは this と同じ日付範囲内のログ読み取りです2017年2月15日:
re
正規表現を使用)。2017年2月17日:
bash
のfcedit
に似ています)。これまでのところ、これはプレーンテキストのファイルタイプに設定されたデフォルトのプログラムのみを開きます。2017年2月19日:
2017年3月3日:
以下の設定では、最近コピーされた(文字列から)テキストを検索し、ダブルクリックでドキュメントに貼り付けることが非常に簡単です。設定は最も簡単ではありません(現在)、使用方法は非常に簡単です。
セットアップには2つの小さなスクリプトが含まれます
script 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
script 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
gedit
ウィンドウを開き、ショートカットを使用して小さなウィンドウを呼び出し、概要で説明されているユーティリティを使用します。
すべてが正常に機能する場合は、スクリプト1をスタートアップアプリケーションに追加します:ダッシュ>スタートアップアプリケーション>追加。コマンドを追加します。
python3 /path/to/watch_clipboard.py
スクリプトのheadセクションでは、クリップボードの履歴に表示される文字列の最小長(文字数)を設定できます。
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 clipboard history メニューから小さなウィンドウを呼び出します。
または
別の方法でウィンドウを呼び出すには、次を実行します
python3 /path/to/history_indicator.py search
これから( Clipboard Manager for Ubuntu 16.04 )ユーザーから学びます:
これから( buntu 14.04 Clipboard Manager? )ユーザーから学びます:
Ubuntuユーザーに負けないようにするために( tecmint.com-Linuxのベスト10クリップボードマネージャー )推奨:
( makeuseof.com-Linuxクリップボードを管理するための6つのツール )と( maketecheasier.com-クリップボードマネージャーでLinuxクリップボードを強化 =)。
結局のところ、あなたが選ぶパッケージはあなたが最も快適なものです。どのパッケージになるかを確実に言うことはできません。それらのほとんどは、あなたが望むように検索可能な履歴を提供しますが、あなたの考え方に最も合ったインターフェイスを持っているのはどれですか?
CopyQは素晴らしい高度なLinuxクリップボードマネージャーです。多数の貴重な機能があります(検索のようなCtrl-Rを含む)。
インストール:
$ Sudo add-apt-repository ppa:hluk/copyq
$ Sudo apt update
$ Sudo apt install copyq
そして、挿入のためのグローバルショートカットを追加します。
トレイアイコン>設定>ショートカットタブ>カスタムアクションとグローバルショートカット..>追加>メインウィンドウの表示/非表示
アプリunity-scope-diodon
はこれをサポートします。
しかし、インターフェイスは私が好きな方法ではありません:
スーパーbを押すと、同じ大きなアイコンの12 * 7 = 84倍が表示されますが、これにはまったく興味がありません。
Diodon自体がこれをサポートしてくれるといいですね。