GIMPで「保存しないですぐに閉じたい」
けど
(Cmd+Dが一番速いかも)

GIMPを使っていて、ちょっとした画像を開いて軽く編集し、閉じようとしたときに毎回出てくるあのメッセージ。「保存されていません。変更を保存しますか?」。

<svg class="eyecatch-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 192 192">
  <!-- 背景:白の角丸四角形 -->
  <rect x="0" y="0" width="192" height="192" rx="32" ry="32" fill="#FFFFFF" />

  <!-- ベースグループ -->
  <g transform="translate(24,24)">
    <!-- ウィンドウ風カード(薄いグレーのプレート) -->
    <rect x="0" y="0" width="144" height="144" rx="12" ry="12" fill="#E0E0E0" stroke="#607D8B" stroke-width="2" />

    <!-- ドキュメント本体(青) -->
    <g transform="translate(28,24)">
      <rect x="0" y="0" width="72" height="96" rx="8" ry="8" fill="#2196F3" stroke="#607D8B" stroke-width="3" />
      <!-- 折り返し(ドッグイヤー) -->
      <path d="M72 0 L72 24 L48 0 Z" fill="#9E9E9E" stroke="#607D8B" stroke-width="2" />
    </g>

    <!-- 「保存しない」を象徴する赤いX(ドキュメントに重ねる) -->
    <g transform="translate(28,24)">
      <path d="M14 18 L58 70" stroke="#F44336" stroke-width="6" />
      <path d="M58 18 L14 70" stroke="#F44336" stroke-width="6" />
    </g>

    <!-- 自動化:稲妻(オレンジ) -->
    <g transform="translate(100,78)">
      <path d="M12 0 L0 24 L10 24 L4 44 L24 16 L14 16 Z" fill="#FF9800" stroke="#607D8B" stroke-width="2" />
    </g>

    <!-- クローズボタン(右上・赤) -->
    <g transform="translate(116,8)">
      <rect x="-6" y="-6" width="28" height="28" rx="6" ry="6" fill="#FFFFFF" stroke="#607D8B" stroke-width="2" />
      <path d="M0 0 L16 16 M16 0 L0 16" stroke="#F44336" stroke-width="3" />
    </g>

    <!-- 補助の緑チェック(自動処理が成功して閉じるイメージ) -->
    <g transform="translate(96,116)">
      <circle cx="14" cy="14" r="12" fill="#FFFFFF" stroke="#4CAF50" stroke-width="3" />
      <path d="M8 14 L12 18 L20 10" stroke="#4CAF50" stroke-width="3" fill="none" />
    </g>
  </g>
</svg>
GIMPで「保存しないですぐに閉じたい」<br class="chiilabo-br is-on">けど<br class="chiilabo-br is-on">(Cmd+Dが一番速いかも)

すでに上書きエクスポートした後でも、.xcfで保存しなければ確認ダイアログが出るのは、地味にストレスでした12。なんとかしたくて、「確認ダイアログを出さずに閉じる方法」を探りました。

ただし、結論としては、Cmd+W, Cmd+Dを続けて押すのが一番手っ取り早いかもしれません3
4
5

関連記事

1. 試み1:GIMPの設定を探す

最初に試したのは、設定の中に「保存確認をしない」オプションがあるのでは?というシンプルな発想です。環境設定を開いて、「ウィンドウ」「入力コントローラー」「環境」……一通り見てみましたが、それらしい項目は見つかりませんでした。

GIMPは安全設計が徹底していて、ユーザーがうっかり作業を失わないよう、保存確認を無効にできないようになっています6
78

2. 試み2:スクリプトで自動化できないか

それなら、スクリプトで「強制的に閉じる」ことはできないだろうか。そう考えて、GIMPのスクリプト機能に目を向けました。GIMPではPython-Fu(Python)とScript-Fu(Scheme)という2種類のスクリプト言語が使えます。

2.1. Python-Fuで試す

まずPythonで試してみました。プラグイン用フォルダ(~/Library/Application Support/GIMP/3.0/plug-ins)にスクリプトを保存し、GIMPを再起動してみました。ところが、メニューには新しい項目が出ませんでした。Python案は一旦保留にしました9

2.2. Script-Fuで再挑戦

次に、Schemeで書けるScript-Fuを試してみました。~/Library/Application Support/GIMP/3.0/scripts.scm ファイルを保存し、スクリプトを再読み込み10

2.2. Script-Fuで再挑戦
; force-close-no-prompt.scm
(define (script-fu-close-without-saving image drawable)
  ;; 1) 未保存フラグを消して「保存済み」扱いに
  (gimp-image-clean-all image)

  ;; 2) その画像に紐づく全ての表示(ビュー)を先に閉じる
  (let* ((res   (gimp-image-get-displays image)) ; => (count vector)
         (count (car  res))
         (vec   (cadr res)))
    (while (> count 0)
      (set! count (- count 1))
      (gimp-display-delete (aref vec count))))

  ;; 3) 画像そのものを削除(= 完全クローズ)
  (gimp-image-delete image))

(script-fu-register
 "script-fu-close-without-saving"
 "Close Without Saving (force)"
 "Marks image clean, closes all displays, then deletes the image (no prompt)."
 "you" "you" "2025"
 "RGB*, GRAY*, INDEXED*"
 SF-IMAGE    "Image"    0
 SF-DRAWABLE "Drawable" 0)

(script-fu-menu-register
 "script-fu-close-without-saving" "<Image>/File")
Code language: PHP (php)

すると、ちゃんとメニューに「Close Without Saving (force)」が追加されました!これは手応えありです。

ただ、実行してみるとエラー。Error: Procedure execution of gimp-image-delete failed。つまり、画像を閉じようとして失敗しているようでした。

エラーメッセージを読むと、どうやら「表示(Display)が残ったままでは画像を削除できない」らしい。Script-Fuで表示を削除してから画像を消せばいけるのでは?と考え、gimp-image-get-displaysgimp-display-deleteを使うコードに書き換えました。

2.2. Script-Fuで再挑戦

ところが、今度はunbound variableという別のエラー。調べると、GIMP 3ではこれらの関数自体がPDB(GIMPの内部API)から削除されていたのです。つまり、GIMP 3ではスクリプトから表示を閉じること自体ができなくなっていました。

PDB の gimp_image_delete は 表示が一つも紐づいていない時だけ成功します。
ただし ユーザーが UI で開いた表示は PDB から削除不可(=gimp-display-delete の対象外)なので、結果として スクリプト単独では閉じられません11

3. 試み3:macOS側での自動化に切り替える

GIMPの内部で閉じられないなら、外から押してしまえばいい。つまり、macOSの自動化ツールで「Cmd+W → 保存しないボタンを自動クリック」させる方法です。

Automator(AppleScript)なら、

  1. ショートカット.app で新規「クイックアクション」を作成
  2. アクション「AppleScript を実行」に下を貼り付け:
  3. システム設定 → キーボード → キーボードショートカット → サービスで、このクイックアクションに ⌘W を割り当て(アプリ限定で GIMP を指定すると安全)。
on run {input, parameters}
  tell application "System Events"
    tell process "GIMP"
      -- まず ⌘W を送る
      keystroke "w" using command down
      delay 0.2
      -- ダイアログが出ていたら「保存しない」をクリック(日本語UI)
      if (exists button "保存しない" of window 1) then
        click button "保存しない" of window 1
      else if (exists button "Don't Save" of window 1) then
        click button "Don't Save" of window 1
      end if
    end tell
  end tell
  return input
end run
Code language: JavaScript (javascript)

4. 制限と納得

今回いろいろ試してみて、GIMPの設計思想がよくわかりました。ユーザーがミスをしてもデータを失わないよう、内部APIまで制限されている。それを理解したうえで、どうしても違う動作をしたいなら、OS側で工夫するしかない。

  1. GIMPは「cleanでない(未保存の変更がある)」画像を閉じる際に確認を求める仕様です。 – 2.19. Close View — GIMP User Manual
  2. 同様の挙動は終了時(Quit)にも適用されます。 – 2.21. Quit — GIMP User Manual
  3. GIMP 2.8.16でCtrl+Dが「保存しない」に相当するとの報告。 – GIMP: Close edited image without asking for confirmation(Super User)
  4. 同様の提案(Ctrl+Q→Ctrl+D)。 – Stop prompt from Gimp to save image(Ubuntu MATE Community)
  5. macOSの一般的な「Don’t Save」へのキーボード操作参照(Cmd+D)。 – Keyboard shortcut for \”Revert Changes\”/\”Don’t Save\”(Apple Discussions)
  6. 2.8系に存在した「未保存画像のクローズ確認」設定は2.10で消えたという報告が複数あります。 – Confirm closing of unsaved images — gimp-forum.net
  7. 同旨の話題(2.8.10→2.8.18での消失)もあります。 – Confirm Closing of Unsaved images – Missing(pixls.us)
  8. 無効化オプション追加を求める要望Issue(=現状は不可)。 – Allow to disable \”Save on exit\” prompt dialog — GNOME/GIMP Issue #4849
  9. macOSでPython-Fuが登録されないという報告。 – macOS: Python-Fu plugins are not registered(GNOME/GIMP Issue #14440)
  10. 公式Script-Fuチュートリアル(GIMP 3.0)。 – 3. A Script-Fu Tutorial — GIMP User Manual
  11. GIMP 3 APIの記述。「ユーザーが作成した表示が結びつく画像はPDBから削除できない」。 – Gimp.Image.delete — GIMP 3 API