36

XクリップボードからリッチテキストまたはHTMLソースコードを取得するにはどうすればよいですか?たとえば、Webブラウザからテキストをコピーしてkompozerに貼り付けると、リンクなどが保持されたHTMLとして貼り付けられます。ただし、同じ選択のxclip -oは、の場合と同様の方法で再フォーマットされたプレーンテキストを出力するだけですelinks -dump。HTMLを引き出してテキストエディタ(具体的にはvim)に入れたいのですが。

これを行うためのユーティリティがあることを期待していたので、superuser.comで同じ質問をしましたが、有益な応答がありませんでした。XクリップボードAPIは、私にとってはまだ神秘的な獣です。この情報を引き出すために何かをハッキングするためのヒントは大歓迎です。最近私が選んだ言語はPythonですが、ほとんど何でも大丈夫です。

4

3 に答える 3

56

@rkhayrovの答えを補完するために、そのためのコマンドがすでに存在します:xclip。もっと正確に言うと、2010年の後半に追加されたパッチがxclipありますが、まだリリースされていません。したがって、DebianのようなOSに(2019年の編集:これらの変更を加えたバージョン0.13が最終的に2016年にリリースされた(そして2019年1月 にDebianに組み込まれた))のサブバージョンヘッドが付属していると仮定します。xclipxclip

CLIPBOARD選択のターゲットを一覧表示するには:

$ xclip -selection clipboard -o -t TARGETS
TIMESTAMP
TARGETS
MULTIPLE
SAVE_TARGETS
text/html
text/_moz_htmlcontext
text/_moz_htmlinfo
UTF8_STRING
COMPOUND_TEXT
TEXT
STRING
text/x-moz-url-priv

特定のターゲットを選択するには:

$ xclip -selection clipboard -o -t text/html
 <a href="https://stackoverflow.com/users/200540/rkhayrov" title="3017 reputation" class="comment-user">rkhayrov</a>
$ xclip -selection clipboard -o -t UTF8_STRING
 rkhayrov
$ xclip -selection clipboard -o -t TIMESTAMP
684176350

また、(の代わりに)xclip選択範囲を設定して所有することもできます。-i-o

于 2013-06-06T10:55:18.007 に答える
25

X11では、選択の所有者と通信し、サポートされている形式について質問してから、特定の形式のデータを要求する必要があります。これを行う最も簡単な方法は、既存のウィンドウツールキットを使用することだと思います。例えば。PythonとGTKの場合:

#!/usr/bin/python

import glib, gtk

def test_clipboard():
    clipboard = gtk.Clipboard()
    targets = clipboard.wait_for_targets()
    print "Targets available:", ", ".join(map(str, targets))
    for target in targets:
        print "Trying '%s'..." % str(target)
        contents = clipboard.wait_for_contents(target)
        if contents:
            print contents.data

def main():
    mainloop = glib.MainLoop()
    def cb():
        test_clipboard()
        mainloop.quit()
    glib.idle_add(cb)
    mainloop.run()

if __name__ == "__main__":
    main()

出力は次のようになります。

$ ./clipboard.py 
Targets available: TIMESTAMP, TARGETS, MULTIPLE, text/html, text/_moz_htmlcontext, text/_moz_htmlinfo, UTF8_STRING, COMPOUND_TEXT, TEXT, STRING, text/x-moz-url-priv
...
Trying 'text/html'...
I asked <a href="http://superuser.com/questions/144185/getting-html-source-or-rich-text-from-the-x-clipboard">the same question on superuser.com</a>, because I was hoping there was a utility to do this, but I didn't get any informative responses.
Trying 'text/_moz_htmlcontext'...
<html><body class="question-page"><div class="container"><div id="content"><div id="mainbar"><div id="question"><table><tbody><tr><td class="postcell"><div><div class="post-text"><p></p></div></div></td></tr></tbody></table></div></div></div></div></body></html>
...
Trying 'STRING'...
I asked the same question on superuser.com, because I was hoping there was a utility to do this, but I didn't get any informative responses.
Trying 'text/x-moz-url-priv'...
http://stackoverflow.com/questions/3261379/getting-html-source-or-rich-text-from-the-x-clipboard
于 2010-07-16T09:48:23.710 に答える
3

Stephane Chazelasのアイデアを拡張すると、次のことができます。

  • フォーマットされたソースからコピーします。
  • このコマンドを実行してクリップボードから抽出し、HTMLに変換してから、(パイプ|を使用して)そのHTMLをクリップボードに戻します。これも同じ方法で行いxclipます。
xclip -selection clipboard -o -t text/html | xclip -selection clipboard
  • 次に、Ctrl+を付けて貼り付けるとv、HTMLソースが貼り付けられます。

さらに進んで、それをショートカットにすることができるので、ターミナルを開いて毎回正確なコマンドを実行する必要はありません。✨</p>

それを行うには:

  • OSの設定を開きます(私の場合はUbuntuです)
  • キーボードのセクションを探す
  • 次に、ショートカットのセクションを見つけます
  • 新しいショートカットを作成する
  • 名前を設定します。例:Copy as HTML
  • 次に、ショートカットのコマンドとして、次のように入力します。
bash -c "xclip -selection clipboard -o -t text/html | xclip -selection clipboard"

:上記と同じコマンドですが、インラインBashスクリプト内に配置されていることに注意してください。これは、|(パイプ)を使用して、あるコマンドからの出力を次のコマンドへの入力として送信できるようにするために必要です。

  • ショートカットを任意の組み合わせに設定します。できれば、使用する別のショートカットを上書きしないでください。私の場合、次のように設定します:Ctrl+ Shift+c

  • この後、通常どおりにフォーマットされたテキストをコピーできます:Ctrl+c
  • 次に、貼り付ける前に、次のようにHTMLに変換します。Ctrl++Shiftc
  • 次に、:Ctrl+vを付けて貼り付けると、コンテンツがHTMLとして貼り付けられます。✨</li>

ショートカット版ウィンドウ

于 2021-01-02T14:46:48.023 に答える