> 기술블로그

Windows PowerShell 에서 클립보드의 이미지를 파일로 저장하기

windowsclipboardpowershellemacs

대부분의 작업은 텍스트 편집기인 Emacs 에서 진행한다. 종종 이미지를 사용하는 경우가 있는데, 이 작업은 매우 번거롭다. 이미지를 클릭하고, 다른 이름으로 저장하고, 경로를 변경하고, 텍스트 에디터에서 해당 경로를 입력하는 등 여려 단계를 거처야하기 때문이다.

클립보드 사용하기

앞서 이야기한 과정을 생각해 보면, 이미지를 먼저 파일로 저장하는 것이 문제가 된다. 단계 뿐만 아니라 다운로드 폴더의 파일도 같이 늘어나기 때문이다. 클립보드를 사용하면 이 과정을 없앨 수 있다.

Windows 에서는 클립보드는 텍스트, 파일 등 다양한 개체를 저장하고, 꺼내어 사용할 수 있도록 한다. 텍스트나 파일을 ctrl+c, ctrl+v 하는 것이 클립보드를 사용하는 대표적인 예이다.

이미지 개체도 클립보드에서 사용할 수 있다. 웹 브라우저에서 이미지를 복사하는 방법은 이미지 복사 명령을 사용한다. 이제 필요한 곳에 붙여 넣기를 하면 된다. 이제 이미지를 쉽게 사용할 수 있다.

PowerShell 에서는 다음과 같이 클립보드의 내용을 파일로 저장하는 명령을 제공한다. 아래에서 FILENAME 은 사용자가 별도로 지정한다.

powershell -c "(Get-Clipboard -format image).save(FILENAME)"

Emacs 명령어 추가하기

앞서 이야기 했듯이 Emacs 에서 파일로 저장할 수 있도록 함수를 하나 만들었다. 함수를 실행하면, 경로를 입력받아 이미지를 저장한다. 그리고 편집기 내 커서가 위치한 곳에 해당 이미지의 경로를 추가한다.

(defun save-image-from-clipboard ()
  "Windows 클립보드에 복사한 이미지를 파일로 저장한다."
  (interactive)
  (let ((filename (file-truename (read-file-name "Write image file from clipboard: "))))
    (shell-command (concat "powershell -c \"(Get-Clipboard -format image).save('" filename "')\""))
    (with-current-buffer (current-buffer)
      (insert "#+ATTR_ORG: :width 900\n")
      (insert (concat "[[./"  (file-name-nondirectory filename)  "]]\n")))))