組織モード-貼り付け時にリッチHTMLを直接解析しますか?


12

現在、EvernoteおよびのようなメモツールでQuiverは、お気に入りのブラウザーからHTMLコンテンツを直接コピーして、すべての書式設定+リンクを保持したまま、アプリに貼り付けることができます。ただし、orgmodeでは、すべてのフォーマット情報が失われているようです。

誰かがを使用ewwしてWebを閲覧し、コンテンツをコピーすることを提案しているのをeww-org見てきました。しかし、それは私が使用してウェブブラウジング多くの人々が存在することになるとは思わない(本当に退屈でeww、今日の代わりに、現代のブラウザを。私は再びそのリンクを開く必要がありますeww、コピーをしてください、時には言及しないewwんではありませんコンテンツを適切にレンダリングします)。

Emacs貼り付け時にコピーしたHTMLを直接解析させることはできますか?そのための既存のツールがまだない場合でも、それを作成することは可能ですか?

これがorgmode、他のメモ作成ツールからの切り替えを妨げるほぼ唯一の理由です。


「コピーされたHTMLを直接解析する」という意味を明確にしてください
mankoff

@mankoff OK私は私の説明では十分に明確ではなかったと思います。私が欲しいのは、たとえば、元のHTMLが<b>text</b>その上にあった後、貼り付けるときに何らかの方法でCmd + C変換できる場合です。または、いいえの場合は、少なくとも元のHTMLコードを保持して、後で元の適切な形式で表示できるようにします。現在の状況では、どういうわけかプレーンテキストのみがレンダリングされます。*text*org mode
xji

たとえば、ここにあります<p>I've seen somebody <a href="http://emacs.stackexchange.com/q/7171/115">suggest using <code>eww</code> to browse the web and copy the content via <code>eww-org</code></a>. However that is really tedious(I don't think there would be a lot of people browsing the web using <code>eww</code> instead of modern browsers nowadays. I'll have to open that link again in <code>eww</code> and do the copying, not to mention sometimes <code>eww</code> doesn't render the contents nicely). </p>。この段落をコピーすると、その書式をで再現できるようになりorgmodeます。
xji

1
@mankoff素晴らしい!機能した!あなたは男です!Emacsパッケージなどとして提出することも考えられると思います。これによりorg mode、はるかにユーザーフレンドリーになります。実際、私はそれがより多くの情報を保存するので、中間RTF変換なしのフォーマットでそれをより好きです。例えば、#+BEGIN_QUOTEそして#+BEGIN_EXAMPLEあなたの答えには、追加の変換で保存されません。
xji

1
@incandescentmanこれは、Webページ内のCSSなど、一部のフォーマット情報を取り除こうとするものです。あなたはそれを自分で試して、それがどのような違いをもたらすかを見ることができます。
xji

回答:


12

作ることは可能ですか?

これはemacsなので、はい

私のアプローチは、HTMLを取得してプレーンテキストに変換したり、直接Org形式に変換したりできるサードパーティツールを使用することです。これは醜いハックだと思います。これを行うにはもっと良い方法があるかもしれませんが、私のテストケースではうまくいくようです。

(defun kdm/html2org-clipboard ()
  "Convert clipboard contents from HTML to Org and then paste (yank)."
  (interactive)
  (kill-new (shell-command-to-string "osascript -e 'the clipboard as \"HTML\"' | perl -ne 'print chr foreach unpack(\"C*\",pack(\"H*\",substr($_,11,-3)))' | pandoc -f html -t json | pandoc -f json -t org"))
  (yank))

残念ながら、HTMLは今では信じられないほど複雑になりました-単純な手書きタグはもうありません。この複雑なHTMLタグ付けには、上記の複雑なシェルコマンドが必要です。次のことを行います。

  1. osascriptクリップボードからHTMLテキストを取得します。16進数でエンコードされているため、
  2. perlは16進数を文字列に変換します
  3. そのHTMLをpandocでOrgに直接変換することもできますが、HTMLは複雑なタグでいっぱいなので、大量のOrgコードを生成します。HTMLを単純にフォーマットをキャプチャするために必要な最小限のタグセットにするには、
  4. HTMLをjsonに変換し、次に
  5. jsonをOrgに変換します(これらの2つのステップはHTMLを単純化します)。

osascriptMacOSのためのものです。Linuxの手順1〜2を変更するには、shell-command-to-stringの引数を

"xclip -o -t text/html | pandoc -f html -t json | pandoc -f json -t org"

いずれの場合も、pandocコマンドの出力はemacsに返され、バッファに挿入されます。

新しいEmacsコマンドを「paste」と同様のキーにバインドしますが、これは「paste-and-convert-from-html」を意味し、機能するはずです。

または、どの貼り付けコマンドを使用するかを考えたくない場合は、次のLinuxバージョンを使用します。これは、クリップボードでHTMLが利用可能な場合にHTMLを変換し、それ以外の場合はプレーンテキストにフォールバックします。

"xclip -o -t TARGETS | grep -q text/html && (xclip -o -t text/html | pandoc -f html -t json | pandoc -f json -t org) || xclip -o"

1つの追加:既定では認識されない書式付きのインラインテキスト(太字、斜体、コードなど)を変換すると、通常のスペースの代わりに改行しないスペースpandoc自動的に多く使用されるようです。これらのテキストをで正しくフォーマットするには、それを()に追加する必要があります。orgmodeorg-emphasis-regexp-componentsorgmode
xji

特に、「リリース」バージョンのxclipはオプション-tをサポートしていません。したがって、xclipはgithubからビルドする必要があります。また、pandocの入力と出力をパイプ処理する必要がある場合がありますiconv utf-8
malcook

xclipOS Xにもあります(おそらくX11および/またはDeveloper Toolsがインストールされているだけですか?)。したがって、改善された回答はOS Xでも機能します。
mankoff 2016年

@JIXiang改行されていないスペースも通常のスペースに変換するように、受け入れられた回答をどのように変更しますか?
白熱

1
@incandescentman私は元々org-modeのパッケージファイルを変更して、改行しないスペースをセパレーターとして認識するようにしました。ただし、バージョンの変更は面倒な作業でした。次に、検索可能なpandocのリポジトリに関する問題を提起しました。基本的に、パンドックの「フィルター」を使用して自動置換を実行できます。しかし、それも時々失敗します。だから今私はほとんど手動で貼り付けたコンテンツを選択して置換を実行します。私の最後の代替はほとんど常にこれですので、私は自分の代替履歴を上にスクロールして適用します。
xji 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.