37

私は Emacs Org モードを調査ログとして使用しているため、スクリーンショット画像を介して何かを追跡したいことがありますが、それらを保存したくはありません。それで、クリップボードからそれらをコピーする単語のように、これらの図を組織モードファイルに挿入する方法はあるのでしょうか?

4

8 に答える 8

25

あなたが望む正確な機能は現在実装されていませんが、あなたの意見が「絶対に保存したくない」という場合は、多くの画像を調査ログに保存することに懐疑的です.

とにかく、あなたが望む機能は、近年組織モードのメーリングリストで数回表明されています - チェックしてください

http://comments.gmane.org/gmane.emacs.orgmode/33770

http://www.mail-archive.com/emacs-orgmode@gnu.org/msg50862.html

最初のリンクには、(ImageMagick を介して) スクリーンショット ユーティリティを起動して [一意に] ファイルを保存し、組織モード バッファーにインライン リンクを挿入するためのコードが含まれています。

そのスレッドで述べたように、コードは改善され、組織モードのハック ページに追加されました。このページには、便利な宝石がたくさんあります。

http://orgmode.org/worg/org-hacks.html

(defun my-org-screenshot ()
  "Take a screenshot into a time stamped unique-named file in the
same directory as the org-buffer and insert a link to this file."
  (interactive)
  (setq filename
        (concat
         (make-temp-name
          (concat (buffer-file-name)
                  "_"
                  (format-time-string "%Y%m%d_%H%M%S_")) ) ".png"))
  (call-process "import" nil nil nil filename)
  (insert (concat "[[" filename "]]"))
  (org-display-inline-images))
于 2013-07-03T01:08:05.470 に答える
4

org-downloadパッケージはこのために設計されています。

于 2016-09-15T15:48:35.733 に答える
4

私の解決策は、Windows プラットフォーム用です。私が私のベースにしたソリューションを提供してくれたAssemに感謝します。

CbImage2Fileコマンド ライン引数として指定されたパスにクリップボード (ある場合) に画像を書き込むC# コンソール アプリを作成しました。System.Windows.Formsアセンブリへの参照が必要になります。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CbImage2File
{
    class Program
    {
        private static int FAILURE = 1;

        private static void Failure(string description)
        {
            Console.Error.WriteLine("Clipboard does not contain image data");
            Environment.Exit(FAILURE);
        }

        [STAThread]
        static void Main(string[] args)
        {
            var image = System.Windows.Forms.Clipboard.GetImage();

            if (image == null)
            {
                Failure("Clipboard does not contain image data");
            }

            if (args.Length == 0)
            {
                Failure("You have not specified an output path for the image");
            }

            if (args.Length > 1)
            {
                Failure("You must only specify a file path (1 argument)");
            }

            var filePath = args[0];
            var folderInfo = new System.IO.FileInfo(filePath).Directory;

            if (!folderInfo.Exists)
            {
                System.IO.Directory.CreateDirectory(folderInfo.FullName);
            }

            image.Save(filePath);
        }
    }
}

私は Greenshot を使用してスクリーンショットを撮ります。これにより、(構成を介して) スクリーンショットがクリップボードに自動的にコピーされます。

次に、ショートカットC-S-vを使用して、関数を使用して組織モード バッファーに画像を貼り付けますorg-insert-image-from-clipboard

(defun org-insert-image-from-clipboard ()
  (interactive)
  (let* ((the-dir (file-name-directory buffer-file-name))
     (attachments-dir (concat the-dir "attachments"))
     (png-file-name (format-time-string "%a%d%b%Y_%H%M%S.png"))
     (png-path (concat attachments-dir "/" png-file-name))
     (temp-buffer-name "CbImage2File-buffer"))
    (call-process "C:/_code/CbImage2File/CbImage2File/bin/Debug/CbImage2File.exe" nil temp-buffer-name nil png-path)
    (let ((result (with-current-buffer temp-buffer-name (buffer-string))))
      (progn
    (kill-buffer temp-buffer-name)
    (if (string= result "")
        (progn 
          (insert (concat "[[./attachments/" png-file-name "]]"))
          (org-display-inline-images))
      (insert result))))))

(define-key org-mode-map (kbd "C-S-v") 'org-insert-image-from-clipboard)

この関数はファイル パスを計算し、C# アプリを呼び出してpngファイルを作成し、イメージ タグを追加して呼び出しorg-display-inline-images、イメージを表示します。クリップボードに画像がない場合は、C# アプリからの応答に貼り付けられます。

于 2016-08-05T11:34:05.883 に答える