Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What is going on with this article?
@lovesaemi

org-modeでスクリーンショットをペーストする方法(Win10/Mac両対応)の完成形

をまとめました。
markdownで疲弊しているみなさまこんにちは。論文執筆もプレゼンテーションもタスク管理も時間計測もできるorg-modeを使ったほうがよいですね。しらんけどおれはorg-mode使うので。
org-modeのよいところはmarkdownは文書をつくることしかできないのにたいしてorg-modeは思考をすすめることができる点がよい。プレビューみながらmarkdownとかで本当に思考できますかね。見た目確認しながら作業してない?しらんけど。

私は~/orgにorgファイルをもっていて、orgを適宜テーマごとにディレクトリ切ってバリバリかいてます。で、インラインのイメージどうするの問題。win/macで絶対パス違うので相対パスにしないと無理。

よくあるやつはルートからのパス打ち込んでるだけなのでwin-macで相互運用できない。
わたしはGoogleDriveにorgおいてシンボリックリンク/ジャーナルリンク?して~/orgにorgファイルがあるところまでは設定してる

画像は~/org/imgに物理的に貯まる

で、冒頭のstackoverflowの色んな人の意見を悪魔合体しました。久々のelisp
うごいているから良いと思う!

(defun get-basename-from-fullpath (fullpath)
  "フルパスから最後のスラッシュまで削除した部分を返します。"
  (let ((parts (split-string fullpath "/")))
    (car (last parts))))

(defun my-org-screenshot-win ()
  "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 (expand-file-name "~/org/img/")
                (get-basename-from-fullpath
                 (concat
                  (make-temp-name
                   (concat (buffer-file-name)
                           "_"
                           (format-time-string "%Y%m%d_%H%M%S_")) ) ".png"))))
  (shell-command "snippingtool /clip")
  (shell-command (concat "powershell -command \"Add-Type -AssemblyName System.Windows.Forms;if ($([System.Windows.Forms.Clipboard]::ContainsImage())) {$image = [System.Windows.Forms.Clipboard]::GetImage();[System.Drawing.Bitmap]$image.Save('" filename "',[System.Drawing.Imaging.ImageFormat]::Png); Write-Output 'clipboard content saved as file'} else {Write-Output 'clipboard does not contain image data'}\""))
  (setq pastepath
        (concat "~/org/img/" (get-basename-from-fullpath filename)))
  (insert (concat "[[" pastepath "]]"))
  (org-display-inline-images))

(defun my-org-screenshot-darwin ()
  "Save a clipboard's screenshot into a time stamped unique-named file
   in a specified directory and insert a link to this file."
  (interactive)
  (setq filename
        (concat
         (make-temp-name
          (concat (buffer-name)
                  "_"
                  (format-time-string "%Y%m%d_%H%M%S_")) ) ".png"))
  (call-process "pngpaste" nil nil nil (concat (expand-file-name "~/org/img/") filename))
  (setq pastepath
        (concat "~/org/img/" filename))
  (insert (concat "[[" pastepath "]]"))
  (org-display-inline-images))

(defun my-org-screenshot ()
  (interactive)
  (if (eq system-type 'darwin)
      (my-org-screenshot-darwin)
    (my-org-screenshot-win)
    )
  )

(global-set-key (kbd "C-^") 'my-org-screenshot)

リファクタの余地は大いにあると思うので適当にいじってみてください。

2
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What is going on with this article?