web-dev-qa-db-ja.com

bashのctrl-rのような検索可能なクリップボードマネージャー

検索機能を備えたクリップボードマネージャーを探しています。私は愛してる CtrlR bashシェルで、デスクトップのクリップボードマネージャーと同じ機能を使用したいと考えています。

これまでdiodonを使用していましたが、この機能はdiodonには存在しません。関連する質問を参照してください https://answers.launchpad.net/diodon/+question/403507

使用事例:

  • 以前に「国際化」をコピーして貼り付けました。
  • 次のテキストを入力します。
  • 「国際化」をもう一度挿入したい。
  • 魔法のキーストロークを打った。次に、「inter」と、最後の日にコピーして貼り付けたすべての文字列のリストを表示します。
  • 欲しいものを選びます。できた.

diodonを使用すると、最後の一致の長いリストが得られます。これは良いことですが、完全ではありません。

7
guettli

前書き

コメントで述べたように、Python 3といくつかのzenityダイアログを使用して、クリップボードの内容を操作したり、検索機能を備えたシンプルなクリップボードマネージャーインジケーターを作成しました。

特に、検索機能はPythonのreモジュールを使用します。つまり、正規表現を使用してより詳細な検索を行うことができます。各テキストエントリには、サブメニューに4つのオプションがあります。クリップボードにテキストを挿入し、現在クリボードにあるものの末尾にテキストを追加し、現在のコンテンツの先頭にテキストを追加し、履歴から削除します。

Installation

ターミナルで、次のコマンドを実行します。

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

デモ

以下のアニメーションでは、コピーされるテキストのデモ、インジケーターが追加されたクリップボードを確認でき、最後に簡単な検索ダイアログを介してテスト文字列が検索されます。見つかったコンテンツは、ユーザーのロケール(設定されている場合)のタイムスタンプとともに、シンプルなテキストビューダイアログに表示されます。見つかったテキストは、テキストを選択し、標準を使用してコピーできます Ctrl+C ショートカット。 enter image description here

誰かが疑問に思っている場合:

  • アニメーションは silentcast appで作成されます
  • デスクトップとアイコンのテーマはUbuntu Kylinテーマ、16.04バージョンです
  • はい、Ubuntu(16.04)で 下部のランチャー です。

さらなる開発

インジケーターは1日で作成されたため、現時点ではかなりミニマルです。将来的には、設定ダイアログなどの追加機能が追加される予定です。現在、メニューの長さとテキストの幅は、インジケータで10項目、各エントリで最大30文字にハードコードされています。

機能のリクエストを行う場合は、プロジェクトの GitHubページ で発行チケットを送信してください。ソースコードも入手可能です。

更新:

2017年2月14日:

  • ファイル操作機能の実装-テキストファイルをクリップボードに読み込み、クリップボードの内容をファイルに書き込みます。
  • 日付ごとのエントリ範囲の表示を実装しました。このオプションは、YYYY/MM/DD/HH:SS形式の開始日と終了日を必要とするzenityフォームダイアログを呼び出します。事実上、これは this と同じ日付範囲内のログ読み取りです
  • カップルバグ修正

2017年2月15日:

  • 編集サブメニューを追加しました。ユーザーは、クリップボードの内容を大文字/小文字に変換し、テキストの先頭または末尾から単語/文字を削除し、式を置換できます(Pythonのre正規表現を使用)。

2017年2月17日:

  • テキストファイルで履歴項目を開くためのオプションを追加しました(bashfceditに似ています)。これまでのところ、これはプレーンテキストのファイルタイプに設定されたデフォルトのプログラムのみを開きます。
  • いくつかの改善とバグ修正。

2017年2月19日:

  • Base64操作(エンコード/デコード)を追加しました。

2017年3月3日:

  • 「ピン留めされたサブメニュー」とクリップボード履歴から特定のアイテムを「固定」する機能を追加しました。コードをリファクタリングし、特定の部分を繰り返し使用するために書き直しました。
5

1.クリップボードの履歴をすばやく検索(動的に更新)する最小限のクリップボードユーティリティ

以下の設定では、最近コピーされた(文字列から)テキストを検索し、ダブルクリックでドキュメントに貼り付けることが非常に簡単です。設定は最も簡単ではありません(現在)、使用方法は非常に簡単です。

実際の仕組み

  1. ショートカットを押すと、小さなウィンドウが表示されます:

    enter image description here

  2. 1つ以上の文字を入力して、選択を制限します。

    enter image description here

  3. 挿入する文字列をダブルクリックします。

    enter image description here

  4. 文字列がドキュメントに貼り付けられ、ウィンドウが閉じます。

    enter image description here

セットアップ

セットアップには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()

設定方法

  1. スクリプトには、python3-pyperclippython3-tkinter、およびxdotoolが必要です。

    Sudo apt-get install xdotool python3-pyperclip python3-tkinter
    
  2. スクリプト1を空のファイルにコピーし、watch_clipboard.pyとして保存します
  3. スクリプト2を空のファイルにコピーし、paste_recent.pyとして保存します
  4. (テスト-)次のコマンドを使用して、スクリプト1をバックグラウンドスクリプトとして実行します。

    python3 /path/to/watch_clipboard.py
    

    自動的に記憶されるtekstのコピーを開始します(任意の数の文字列まで、最後のn文字列を記憶します)。

  5. スクリプト2をショートカットに追加します。[システム設定]> [キーボード]> [ショートカット]> [カスタムショートカット]を選択します。 「+」をクリックして、コマンドを追加します。

    python3 /path/to/paste_recent.py
    

    geditウィンドウを開き、ショートカットを使用して小さなウィンドウを呼び出し、概要で説明されているユーティリティを使用します。

  6. すべてが正常に機能する場合は、スクリプト1をスタートアップアプリケーションに追加します:ダッシュ>スタートアップアプリケーション>追加。コマンドを追加します。

    python3 /path/to/watch_clipboard.py
    

オプション

スクリプトのheadセクションでは、クリップボードの履歴に表示される文字列の最小長(文字数)を設定できます。

minlength = 1

また、履歴に保持する文字列の数(データベースのサイズ)を設定できます。

size = 500

ノート

  • 現在、このユーティリティは、以下と互換性のあるすべてのアプリケーションで動作します Ctrl+Alt+V。以下のバージョンもgnome-terminalに貼り付けます。

2.optionalキーボードショートカットを使用したインジケーターバージョン(シングルスクリプト、シンプルなセットアップ)、gnome-terminalにも正しく貼り付け

enter image description here

#!/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. オプション1と同様に、スクリプトにはpython3-pyperclippython3-tkinterおよびxdotoolが必要です。

    Sudo apt-get install xdotool python3-pyperclip python3-tkinter
    
  2. スクリプトを空のファイルにコピーし、history_indicator.pyとして保存します

  3. 次のコマンドで実行します:

    python3 /path/to/history_indicator.py run
    

    インジケータ+バックグラウンドスクリプトを開始します。選ぶ Search clipboard history メニューから小さなウィンドウを呼び出します。

    または

    別の方法でウィンドウを呼び出すには、次を実行します

    python3 /path/to/history_indicator.py search
    
4
Jacob Vlijm

Ask Ubuntu内からの推奨事項

これから( Clipboard Manager for Ubuntu 16.04 )ユーザーから学びます:

  • Clipitはすべての中で最高です。
  • CopyQは、クロスプラットフォームで、適切に設計されたフル機能のクリップボードマネージャーです(私のお気に入り)。とりわけ(非常に便利な)コマンドラインインターフェイスを備えています。

これから( buntu 14.04 Clipboard Manager? )ユーザーから学びます:

  • Glipperはクリップボードマネージャーであり、Software Centerからインストールできます。
  • 私はClipItを使用します。これはUbuntuメニュー統合を備えたParceliteフォークです。 (このパッケージは上記の最初のセクションにリストされていました)
  • 私はGPasteを使用しています
  • Keepboardを試すことができます。使いやすく、安定性と信頼性があるようです。
  • Diodonは、GTKとUnityの両方で利用できるもう1つの優れたオプションです。既に与えられた答えの中で他のものとほとんど同じように機能します。ただし、ダッシュを使用して最近の「クリップ」を検索できます。 (あなたはすでにこのバージョンを使用しているので気に入らない)
  • 私はClippyを使用します。これはPlankで機能するドックレットです(Unityは使用しません)。 ClippyにはDockyも付属していると思います。

Ask Ubuntu以外の推奨事項

Ubuntuユーザーに負けないようにするために( tecmint.com-Linuxのベスト10クリップボードマネージャー )推奨:

  • CopyQは、すべてではないにしてもほとんどのプラットフォームで利用可能な高度なクリップボードマネージャーです。
  • GPasteは、GNOMEベースのディストリビューション用の強力で優れたクリップボードマネージャーですが、さまざまなデスクトップ環境でも機能します
  • Diodonは、軽量でありながら強力なクリップボードマネージャーであり、UnityおよびGNOMEデスクトップ環境と統合した場合に最適に機能するように設計されています。 (もう一度このパッケージが気に入らない)
  • PastieはUbuntu用のシンプルなクリップボードマネージャーで、AppIndicatorを利用します。いくつかのクールな機能があります。
  • Parcelliteは、Linux用の基本的な機能を備えたクリップボードマネージャーで、軽量で軽量なGTK + 2です。
  • GlipperはGNOMEデスクトップ環境用のクリップボード管理ツールです。ユーザーはプラグインを使用してその機能を拡張できます。現在、UbuntuでUnityおよびGnome Classicデスクトップ環境をサポートするためにApp Indicatorを使用しています。
  • Clipitは軽量のGTK +クリップボードマネージャーです。機能が豊富で、実際にはParcelliteから分岐していますが、いくつかの追加機能とバグ修正が含まれています。
  • Keepboardは、ユーザーがクリップボード履歴を保存できるクロスプラットフォームクリップボードマネージャーです。
  • Ubuntuで動作しないものをリストから削除しました。そのため、記事のタイトルに最大10は追加されません。

makeuseof.com-Linuxクリップボードを管理するための6つのツール )と( maketecheasier.com-クリップボードマネージャーでLinuxクリップボードを強化 =)。

概要

結局のところ、あなたが選ぶパッケージはあなたが最も快適なものです。どのパッケージになるかを確実に言うことはできません。それらのほとんどは、あなたが望むように検索可能な履歴を提供しますが、あなたの考え方に最も合ったインターフェイスを持っているのはどれですか?

4

CopyQは素晴らしい高度なLinuxクリップボードマネージャーです。多数の貴重な機能があります(検索のようなCtrl-Rを含む)。

インストール:

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

そして、挿入のためのグローバルショートカットを追加します。

トレイアイコン>設定>ショートカットタブ>カスタムアクションとグローバルショートカット..>追加>メインウィンドウの表示/非表示

0

アプリunity-scope-diodonはこれをサポートします。

しかし、インターフェイスは私が好きな方法ではありません:

スーパーbを押すと、同じ大きなアイコンの12 * 7 = 84倍が表示されますが、これにはまったく興味がありません。

Diodon自体がこれをサポートしてくれるといいですね。

0
guettli