>From 32d82cb967c25cc845cc844bd8946af51174a81c Mon Sep 17 00:00:00 2001 From: Eliza Velasquez <4576666+elizagamedev@users.noreply.github.com> Date: Thu, 13 Jul 2023 16:39:12 -0700 Subject: [PATCH 3/4] po-mode.el: Allow custom major mode for subedit --- gettext-tools/emacs/po-mode.el | 40 ++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/gettext-tools/emacs/po-mode.el b/gettext-tools/emacs/po-mode.el index 171dc0bf3..a5d28d193 100644 --- a/gettext-tools/emacs/po-mode.el +++ b/gettext-tools/emacs/po-mode.el @@ -479,7 +479,9 @@ or remove the -m if you are not using the GNU version of 'uuencode'." (defvar po-subedit-mode-syntax-table (copy-syntax-table text-mode-syntax-table) - "Syntax table used while in PO mode.") + "Syntax table used while in PO mode. +For compatibility reasons, only used when +`po-subedit-mode-major-mode' is `text-mode'.") (defcustom po-subedit-mode-use-terminator t "Whether to use the terminator in subedit mode. @@ -488,8 +490,16 @@ The terminator is a \"<\" character which is inserted in trailing whitespace in a string. See the gettext manual for details." :type 'boolean - :group 'po - :local t) + :local t + :group 'po) + +(defcustom po-subedit-mode-major-mode #'text-mode + "Major mode to use when editing messages. +This mode is used when creating subedit buffers. This option +supercedes `po-subedit-mode-syntax-table'." + :type 'symbol + :local t + :group 'po) ;;; Emacs portability matters - part II. @@ -1080,6 +1090,12 @@ all reachable through 'M-x customize', in group 'Emacs.Editing.I18n.Po'." (run-hooks 'po-mode-hook) (message (_"You may type 'h' or '?' for a short PO mode reminder."))) +(defvar po-subedit-mode-hook nil + "Hook run after entering `po-subedit-mode'.") + +(defvar-local po-subedit-mode nil + "Non-nil if `po-subedit-mode' is enabled.") + (defvar po-subedit-mode-map ;; Use (make-keymap) because (make-sparse-keymap) does not work on Demacs. (let ((po-subedit-mode-map (make-keymap))) @@ -1089,6 +1105,8 @@ all reachable through 'M-x customize', in group 'Emacs.Editing.I18n.Po'." (define-key po-subedit-mode-map "\C-c\C-k" 'po-subedit-abort) po-subedit-mode-map) "Keymap while editing a PO mode entry (or the full PO file).") + +(add-to-list 'minor-mode-map-alist (cons 'po-subedit-mode po-subedit-mode-map)) ;;; Window management. @@ -2251,7 +2269,10 @@ When done with the `ediff' session press \\[exit-recursive-edit] exit to TYPE may be 'comment or 'msgstr. If EXPAND-TABS, expand tabs to spaces. Run functions on po-subedit-mode-hook." (let ((marker (make-marker)) - (subedit-use-terminator po-subedit-mode-use-terminator)) + (subedit-use-terminator po-subedit-mode-use-terminator) + (subedit-major-mode (if (eq type 'msgstr) + po-subedit-mode-major-mode + #'text-mode))) (set-marker marker (cond ((eq type 'comment) po-start-of-msgid) ((eq type 'msgstr) po-start-of-msgstr-form))) (if (po-check-for-pending-edit marker) @@ -2275,10 +2296,8 @@ Run functions on po-subedit-mode-hook." (setq slot (list marker edit-buffer overlay) po-edited-fields (cons slot po-edited-fields)) (pop-to-buffer edit-buffer) - (text-mode) + (funcall subedit-major-mode) (set (make-local-variable 'po-subedit-back-pointer) slot) - (set (make-local-variable 'indent-line-function) - 'indent-relative) (setq buffer-file-coding-system edit-coding) (setq local-abbrev-table po-mode-abbrev-table) (erase-buffer) @@ -2287,11 +2306,14 @@ Run functions on po-subedit-mode-hook." (insert "<")) (goto-char (point-min)) (and expand-tabs (setq indent-tabs-mode nil)) - (use-local-map po-subedit-mode-map) + (setq po-subedit-mode t) (if (fboundp 'easy-menu-define) (easy-menu-define po-subedit-mode-menu po-subedit-mode-map "" po-subedit-mode-menu-layout)) - (set-syntax-table po-subedit-mode-syntax-table) + (when (eq subedit-major-mode #'text-mode) + (set (make-local-variable 'indent-line-function) + 'indent-relative) + (set-syntax-table po-subedit-mode-syntax-table)) (run-hooks 'po-subedit-mode-hook) (message po-subedit-message))))) -- 2.40.1