構文強調表示されたコードをRTFまたはHTMLとしてコピーするにはどうすればよいですか?


7

Emacsを使用して、後でMS-Word文書に貼り付けて構文の強調表示を維持したいコードサンプルを作成しています。これを行うには、テキストをRTFまたはHTML形式でコピーする必要があることを理解しています。

現在私はEmacsからhttp://www.tohtml.comに殺し、そこからコピーしてWordに貼り付けています。誰かがどこかでおそらくこのプロセスを少なくとも数回のキーストロークを短くするためにいくつかのLispを書いたと思われますが、既存の解決策やこれが可能であることを示唆するドキュメントで何かを見つけることができません。

だから私は自分の構成に含めることができる既製のソリューションがあるかどうか、またはこれを達成するために何かを書く方法について誰かがポインタを持っているかどうか知りたいと思っています。

私はEmacsをかなり愛していますが、それを愛していますが、私のe-Lispは現在非常に基本的です。

回答:


6

パッケージhttps://github.com/Lindydancer/highlight2clipboardは、要求されたとおりのことを行います。htmlize代替の貼り付けテキストとして追加するテキストのHTMLバージョンを作成するために使用します。(注:これは重要な操作であり、クリップボードとのインターフェースが必要です。これはオペレーティングシステム固有であり、現在OS XおよびMS-Windowsがサポートされています。)

MS-Wordなどのアプリケーションに貼り付けると、構文の強調表示が保持されます。


5

htmlizeパッケージには、これを行うことができます。でインストールするとM-x package-install htmlize、コマンドにアクセスできますhtmlize-region

(htmlize-region BEG END)

リージョンをHTMLに変換し、色と装飾を保持します。

そして htmlize-region-for-paste

(htmlize-region-for-paste BEG END)

領域をHTML化し、HTMLだけを文字列として返します。これは 'inline-css'スタイルを強制し、HTML本体のみを返しますが、BODYタグはありません。これにより、テキストを別のHTMLバッファに挿入するのに役立ちます。


2
ほとんどの場合、MS-Wordに貼り付けると、このメソッドを使用するとRAW HTMLコードが表示されます。
Lindydancer、2015

2

私はこのカスタムelisp関数を使用して、選択した領域またはバッファー全体を、フォントを構文化したHTMLに変換します。

(defvar modi/htmlize-output-directory
  (let ((dir (concat temporary-file-directory
                     (getenv "USER") "/.htmlize/"))) ; must end with /
    (make-directory dir :parents)
    dir)
  "Output directory for files exported by `modi/htmlize-region-to-file'.")

(defvar modi/htmlize-css-file (concat user-emacs-directory
                                      "misc/css/leuven_theme.css")
  "CSS file to be embedded in the html file created using the
             `modi/htmlize-region-to-file' function.")

(defun modi/htmlize-region-to-file (option)
  "Export the selected region to an html file. If a region is not
selected, export the whole buffer.

The output file is saved to `modi/htmlize-output-directory' and its fontification
is done using `modi/htmlize-css-file'.

If OPTION is non-nil (for example, using `\\[universal-argument]' prefix), copy
the output file name to kill ring.
If OPTION is \\='(16) (using `\\[universal-argument] \\[universal-argument]' prefix),
do the above and also open the html file in the default browser."
  (interactive "P")
  (let ((org-html-htmlize-output-type 'css)
        (org-html-htmlize-font-prefix "org-")
        (fname (concat modi/htmlize-output-directory
                       (if (buffer-file-name)
                           (file-name-nondirectory (buffer-file-name))
                         "temp")
                       ".html"))
        start end html-string)
    (if (use-region-p)
        (progn
          (setq start (region-beginning))
          (setq end (region-end)))
      (progn
        (setq start (point-min))
        (setq end (point-max))))
    (setq html-string (org-html-htmlize-region-for-paste start end))
    (with-temp-buffer
      ;; Insert the `modi/htmlize-css-file' contents in the temp buffer
      (insert-file-contents modi/htmlize-css-file nil nil nil :replace)
      ;; Go to the beginning of the buffer and insert comments and
      ;; opening tags for `html', `head' and `style'. These are
      ;; inserted *above* the earlier inserted css code.
      (goto-char (point-min))
      (insert (concat "<!-- This file is generated using the "
                      "`modi/htmlize-region-to-file' function\n"
                      "from https://github.com/kaushalmodi/.emacs.d/"
                      "blob/master/setup-files/setup-org.el -->\n"))
      (insert "<html>\n<head>\n<style media=\"screen\" type=\"text/css\">\n")
      ;; Go to the end of the buffer (end of the css code) and
      ;; insert the closing tags for `style' and `head' and opening
      ;; tag for `body'.
      (goto-char (point-max))
      (insert "</style>\n</head>\n<body>\n")
      ;; Insert the HTML for fontified text in `html-string'.
      (insert html-string)
      ;; Close the `body' and `html' tags.
      (insert "</body>\n</html>\n")
      (write-file fname)
      (when option
        (kill-new fname)
        (when (= 16 (car option))
          (browse-url-of-file fname))))))

modi/htmlize-region-to-file関数に関するいくつかのポイントを次に示します。

  • 地域を選択すると、その地域のみがmodi/htmlize-output-directoryディレクトリ内のHTMLファイルにエクスポートされます。
  • リージョンが選択されていない場合、バッファ全体がエクスポートされます。
  • 舞台裏でパッケージを使用する関数を使用し、フォント化のためにCSSをHTMLコードに関連付ける方法をカスタマイズできるようにするため、ox-htmlorg-modeHTMLエクスポーター)が必要です。org-html-htmlize-region-for-pastehtmlize
  • modi/htmlize-css-file変数で指定されたcssファイルに基づいてコードをフォント化できます。この関数をすぐに使用するには、このカスタムルーベンテーマベースのcssファイルをどこかに保存し、この変数をそのファイルパスに設定します。そのcssファイルを使用する場合、エクスポートされたコードには、emacsテーマに関係なく常にLeuvenテーマが含まれます(これは、この関数を書くための唯一の目的でした)。
  • region-bindings-modeパッケージのインストールをお勧めします。それがインストールされたら、エクスポートしたいリージョンを選択してヒットしHます。コードはのHTMLファイルに保存されmodi/htmlize-output-directoryます。

    (with-eval-after-load 'region-bindings-mode
        (define-key region-bindings-mode-map (kbd "H") #'modi/htmlize-region-to-file))
  • 実行するC-u Hと、コードがエクスポートされ、出力ファイル名がkill-ringにコピーされます。

  • その場合はC-u C-u H代わりに、それは上記とも使用してデフォルトのブラウザでHTMLファイルを開いて行いますbrowse-url-of-file機能を。

以下はC-u C-u H、上記のコードの一部を実行したときにWebブラウザーで取得したものです。

ここに画像の説明を入力してください

注: HTMLをファイルに保存する必要があります。Outlook / Wordに貼り付けるときに、クリップボードのHTMLコードをレンダリングされたHTMLに直接変換する方法がわからないため、HTML注釈付きコードをクリップボードに保存するだけでは機能しません。


0

ESHはこれを行うことができます:

  • ESHリポジトリのクローンを作成し、に追加(add-to-list 'load-path "/path/to/the/repo")します.emacs
  • M-x load-library RET esh RETESHの読み込みに使用します
  • コードファイルを開いて実行しますM-x esh-htmlfontify-display(これにより、ESHによって(ローカルで)生成されたWebページを表示するブラウザーが開きます)。
  • ブラウザからアプリケーションにコピーします。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.