🧢

Macのスクリーンショットでファイルとクリップボード両方に保存したい

2023/06/06に公開

my環境:
MacBook Pro(2019 intel)
macOS Ventura 13.3
Karabiner-Elements 14.12.0

やりたいこと

Macのスクリーンショットで、「選択部分をファイルとして保存」「選択部分をクリップボードにコピー」は同時にできないようです。
(下記設定画面では警告が出ていて、ショートカットを入力するとクリップボードのみ実行される)

解決方法

スクリプトで無理やりやることにしました。

使うもの

スクリプト

  • 下記ファイルを好きなところに置く(あとでKarabinerでpathを指定する)
  • やっていること
    • screencapture -ciで範囲を指定してクリップボード保存
      • -c にすると画面全体
    • pngpasteでファイル名を指定してクリップボードからpng保存
  • 保存場所、ファイル名も自由に設定する。Full pathにする
    • 例ではPictures/Schreenshot/に日時名($currentDate.png)で保存
clipboard_pngpaste.sh
#!/bin/bash
currentDate=$(date '+%Y-%m-%d-%H.%M.%S')
screencapture -ci

# Full path
/usr/local/bin/pngpaste "$HOME/Pictures/Screenshot/$currentDate.png"

権限設定

  • Karabiner Elements
    • Accessibility
    • Full Disk Access
    • Input Monitoring(入力監視)
  • karabiner_console_user_service (※mackbook airのとき)
    • 画面収録

bashで実行する

Karabiner Elementsの設定

既に使っていた~/.config/karabiner/karabiner.jsonのrulesに追記しました。

  • 上記のclipboard_pngpaste.shのパスを書き込みます
  • command + shift + 3 で動作させる
    • bash ...shを実行

- 公式のkarabiner.json


"rules": [
    {
	"description": "Command+Shift+3 to run screenshot scripts",
	"manipulators": [
	    {
		"type": "basic",
		"from": {
		    "key_code": "3",
		    "modifiers": {
			"mandatory": [
			    "command",
			    "shift"
			]
		    }
		},
		"to": [
		    {
			"shell_command": "bash /full/path/to/clipboard_pngpaste.sh"
		    }
		]
	    }
	]
    }

Conmplex Modificationに現れたらOKです。

Makbookキーボードの設定

上記設定で外部キーボードは動作しましたが、Mackbookのキーボードでは動作しませんでした。同じkarabiner.jsonのdevicesの部分で当該Macbookのキーボードの部分を探して、"ignore": falseにセットして有効化できます。"vendor_id": 1452がアップル製品だそうです。"product_id": 635,はたまたまこの値(たぶん)。

"devices": [
{
    "disable_built_in_keyboard_if_exists": false,
    "fn_function_keys": [],
    "identifiers": {
	"is_keyboard": true,
	"is_pointing_device": false,
	"product_id": 635,
	"vendor_id": 1452
    },
    "ignore": false,
    ...

ハマったところ

権限周りと、ファイルがフルパスでないと動かないところでハマってました

まとめ

  • 自分がよく使うMacの「選択部分のピクチャをファイルとして保存」「選択部分のピクチャをクリップボードにコピー」を一つのショートカットキーで実行できるようにしました
  • (Ubuntu標準のscreenshotではデフォルトで同時に保存されます。設計思想の違いでしょうか)

Discussion