🧢
Macのスクリーンショットでファイルとクリップボード両方に保存したい
my環境:
MacBook Pro(2019 intel)
macOS Ventura 13.3
Karabiner-Elements 14.12.0
やりたいこと
Macのスクリーンショットで、「選択部分をファイルとして保存」「選択部分をクリップボードにコピー」は同時にできないようです。
(下記設定画面では警告が出ていて、ショートカットを入力するとクリップボードのみ実行される)
解決方法
スクリプトで無理やりやることにしました。
使うもの
-
Karabiner Elements
https://karabiner-elements.pqrs.org/ -
pngpaste
https://github.com/jcsalterego/pngpaste
brew install pngpaste
スクリプト
- 下記ファイルを好きなところに置く(あとで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を実行
"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