From 3a53751880ba1c284c60028d644f86b1bd367282 Mon Sep 17 00:00:00 2001 From: Andreas Gerler Date: Sat, 25 Nov 2023 11:31:43 +0100 Subject: [PATCH] update edit-indirect Signed-off-by: Andreas Gerler --- .../edit-indirect-pkg.el | 2 - .../edit-indirect-autoloads.el | 10 +++- .../edit-indirect-pkg.el | 12 ++++ .../edit-indirect.el | 58 ++++++++++++++++--- 4 files changed, 69 insertions(+), 13 deletions(-) delete mode 100644 elpa/edit-indirect-20211201.1541/edit-indirect-pkg.el rename elpa/{edit-indirect-20211201.1541 => edit-indirect-20220511.1124}/edit-indirect-autoloads.el (87%) create mode 100644 elpa/edit-indirect-20220511.1124/edit-indirect-pkg.el rename elpa/{edit-indirect-20211201.1541 => edit-indirect-20220511.1124}/edit-indirect.el (89%) diff --git a/elpa/edit-indirect-20211201.1541/edit-indirect-pkg.el b/elpa/edit-indirect-20211201.1541/edit-indirect-pkg.el deleted file mode 100644 index cbb7232e..00000000 --- a/elpa/edit-indirect-20211201.1541/edit-indirect-pkg.el +++ /dev/null @@ -1,2 +0,0 @@ -;;; Generated package description from edit-indirect.el -*- no-byte-compile: t -*- -(define-package "edit-indirect" "20211201.1541" "Edit regions in separate buffers" '((emacs "24.3")) :commit "7fffd87ac3b027d10a26e8492629da01a4cd7633" :authors '(("Fanael Linithien" . "fanael4@gmail.com")) :maintainer '("Fanael Linithien" . "fanael4@gmail.com") :url "https://github.com/Fanael/edit-indirect") diff --git a/elpa/edit-indirect-20211201.1541/edit-indirect-autoloads.el b/elpa/edit-indirect-20220511.1124/edit-indirect-autoloads.el similarity index 87% rename from elpa/edit-indirect-20211201.1541/edit-indirect-autoloads.el rename to elpa/edit-indirect-20220511.1124/edit-indirect-autoloads.el index 861c3e15..b22cd119 100644 --- a/elpa/edit-indirect-20211201.1541/edit-indirect-autoloads.el +++ b/elpa/edit-indirect-20220511.1124/edit-indirect-autoloads.el @@ -1,4 +1,4 @@ -;;; edit-indirect-autoloads.el --- automatically extracted autoloads +;;; edit-indirect-autoloads.el --- automatically extracted autoloads -*- lexical-binding: t -*- ;; ;;; Code: @@ -27,6 +27,8 @@ properties, which happens surprisingly often when the font-lock mode is used. Edit-indirect buffers use the `edit-indirect-mode-map' keymap. +Regions with active edit-indirect buffers use the +`edit-indirect-overlay-map' keymap. If there's already an edit-indirect buffer for BEG..END, use that. If there's already an edit-indirect buffer active overlapping any @@ -40,7 +42,11 @@ In any case, return the edit-indirect buffer. \(fn BEG END &optional DISPLAY-BUFFER)" t nil) -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "edit-indirect" '("edit-indirect-"))) +(register-definition-prefixes "edit-indirect" '("edit-indirect-")) + +;;;*** + +;;;### (autoloads nil nil ("edit-indirect-pkg.el") (0 0 0 0)) ;;;*** diff --git a/elpa/edit-indirect-20220511.1124/edit-indirect-pkg.el b/elpa/edit-indirect-20220511.1124/edit-indirect-pkg.el new file mode 100644 index 00000000..d75030d8 --- /dev/null +++ b/elpa/edit-indirect-20220511.1124/edit-indirect-pkg.el @@ -0,0 +1,12 @@ +(define-package "edit-indirect" "20220511.1124" "Edit regions in separate buffers" + '((emacs "24.3")) + :commit "f80f63822ffae78de38dbe72cacaeb1aaa96c732" :authors + '(("Fanael Linithien" . "fanael4@gmail.com")) + :maintainers + '(("Fanael Linithien" . "fanael4@gmail.com")) + :maintainer + '("Fanael Linithien" . "fanael4@gmail.com") + :url "https://github.com/Fanael/edit-indirect") +;; Local Variables: +;; no-byte-compile: t +;; End: diff --git a/elpa/edit-indirect-20211201.1541/edit-indirect.el b/elpa/edit-indirect-20220511.1124/edit-indirect.el similarity index 89% rename from elpa/edit-indirect-20211201.1541/edit-indirect.el rename to elpa/edit-indirect-20220511.1124/edit-indirect.el index 81d0755d..307f9695 100644 --- a/elpa/edit-indirect-20211201.1541/edit-indirect.el +++ b/elpa/edit-indirect-20220511.1124/edit-indirect.el @@ -2,16 +2,14 @@ ;; Author: Fanael Linithien ;; URL: https://github.com/Fanael/edit-indirect -;; Package-Version: 20211201.1541 -;; Package-Commit: 7fffd87ac3b027d10a26e8492629da01a4cd7633 -;; Version: 0.1.6 +;; Version: 0.1.10 ;; Package-Requires: ((emacs "24.3")) ;; This file is NOT part of GNU Emacs. ;; SPDX-License-Identifier: BSD-2-clause ;; -;; Copyright (c) 2014-2020, Fanael Linithien +;; Copyright (c) 2014-2022, Fanael Linithien ;; All rights reserved. ;; ;; Redistribution and use in source and binary forms, with or without @@ -121,6 +119,7 @@ end of the changed region." (defvar edit-indirect--overlay) (defvar edit-indirect--should-quit-window nil) +(put 'edit-indirect--should-quit-window 'permanent-local t) ;;;###autoload (defun edit-indirect-region (beg end &optional display-buffer) @@ -141,6 +140,8 @@ properties, which happens surprisingly often when the font-lock mode is used. Edit-indirect buffers use the `edit-indirect-mode-map' keymap. +Regions with active edit-indirect buffers use the +`edit-indirect-overlay-map' keymap. If there's already an edit-indirect buffer for BEG..END, use that. If there's already an edit-indirect buffer active overlapping any @@ -158,14 +159,12 @@ In any case, return the edit-indirect buffer." (user-error "No region"))) (let ((buffer (edit-indirect--get-edit-indirect-buffer beg end))) (when display-buffer - (with-current-buffer buffer - (setq-local edit-indirect--should-quit-window t)) - (select-window (display-buffer buffer))) + (edit-indirect--display-buffer buffer)) buffer)) (defvar edit-indirect-mode-map (let ((map (make-sparse-keymap))) - (define-key map (kbd "C-x C-s") #'edit-indirect-save) + (define-key map [remap save-buffer] #'edit-indirect-save) (define-key map (kbd "C-c '") #'edit-indirect-commit) (define-key map (kbd "C-c C-c") #'edit-indirect-commit) (define-key map (kbd "C-c C-k") #'edit-indirect-abort) @@ -174,6 +173,14 @@ In any case, return the edit-indirect buffer." \\{edit-indirect-mode-map}") +(defvar edit-indirect-overlay-map + (let ((map (make-sparse-keymap))) + (define-key map (kbd "RET") #'edit-indirect-display-active-buffer) + map) + "Keymap for regions with active edit-indirect buffers. + +\\{edit-indirect-overlay-map}") + (defun edit-indirect-commit () "Commit the modifications done in an edit-indirect buffer. That is, replace the original region in the parent buffer with the @@ -221,6 +228,16 @@ BUFFER defaults to the current buffer." It's done by calling `normal-mode'." (normal-mode)) +(defun edit-indirect-display-active-buffer () + "Display the active edit-indirect buffer of the region the point is in." + (interactive) + (let ((overlay + (let ((p (point))) + (edit-indirect--search-for-edit-indirect p (1+ p))))) + (unless overlay + (signal 'edit-indirect-not-indirect '())) + (edit-indirect--display-buffer (overlay-get overlay 'edit-indirect-buffer)))) + (defvar edit-indirect--overlay nil "The overlay spanning the region of the parent buffer being edited. @@ -240,6 +257,13 @@ OVERLAY is the value to set `edit-indirect--overlay' to." (add-minor-mode 'edit-indirect--overlay " indirect" edit-indirect-mode-map nil #'ignore)) +(defun edit-indirect--display-buffer (buffer) + "Display the given BUFFER in some window and select it." + (with-current-buffer buffer + (setq-local edit-indirect--should-quit-window t)) + (select-window (display-buffer buffer)) + nil) + (defun edit-indirect--get-edit-indirect-buffer (beg end) "Return an edit-indirect buffer for the region BEG..END. If there's already an edit-indirect buffer active overlapping any @@ -281,6 +305,7 @@ VARIABLE shall be a symbol." BEG..END is the parent buffer region to insert. OVERLAY is the overlay, see `edit-indirect--overlay'." + (add-hook 'after-change-major-mode-hook #'edit-indirect--rebind-save-hooks) (let ((buffer (generate-new-buffer (format "*edit-indirect %s*" (buffer-name)))) (parent-buffer (current-buffer))) (overlay-put overlay 'edit-indirect-buffer buffer) @@ -316,6 +341,7 @@ BEG and END specify the region the overlay should encompass." (overlay-put overlay 'face 'edit-indirect-edited-region) (overlay-put overlay 'modification-hooks '(edit-indirect--barf-read-only)) (overlay-put overlay 'insert-in-front-hooks '(edit-indirect--barf-read-only)) + (overlay-put overlay 'keymap edit-indirect-overlay-map) overlay)) (defvar edit-indirect--inhibit-read-only nil @@ -351,7 +377,8 @@ No error is signaled if `inhibit-read-only' or (edit-indirect--run-hook-with-positions 'edit-indirect-after-commit-functions beg-marker (point)) (set-marker beg-marker nil) - (set-marker end-marker nil)))))) + (set-marker end-marker nil)))) + (set-buffer-modified-p nil))) (defun edit-indirect--run-hook-with-positions (hook beg end) "Run HOOK with the specified positions BEG and END. @@ -384,6 +411,19 @@ called with updated positions." (quit-window t) (kill-buffer))) +(defun edit-indirect--rebind-save-hooks () + "Bind our `save-buffer' hooks in the current buffer. +Does nothing if the current buffer is not an edit-indirect buffer." + (when (edit-indirect-buffer-indirect-p) + (setq buffer-offer-save t) + (add-hook 'write-contents-functions #'edit-indirect--commit-on-save nil t))) + +(defun edit-indirect--commit-on-save () + "Commit the indirect edit. +Should only be called from `write-contents-functions'." + (edit-indirect--commit) + t) + (defun edit-indirect--abort-on-kill-buffer () "Abort indirect edit. Should be called only from `kill-buffer-hook'." -- 2.47.3