私は Emacs Org モードを調査ログとして使用しているため、スクリーンショット画像を介して何かを追跡したいことがありますが、それらを保存したくはありません。それで、クリップボードからそれらをコピーする単語のように、これらの図を組織モードファイルに挿入する方法はあるのでしょうか?
8 に答える
あなたが望む正確な機能は現在実装されていませんが、あなたの意見が「絶対に保存したくない」という場合は、多くの画像を調査ログに保存することに懐疑的です.
とにかく、あなたが望む機能は、近年組織モードのメーリングリストで数回表明されています - チェックしてください
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))
org-downloadパッケージはこのために設計されています。
私の解決策は、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# アプリからの応答に貼り付けられます。