[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/eat 417e7d2362 2/2: Auto reload Eat when "semi-char" map i
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/eat 417e7d2362 2/2: Auto reload Eat when "semi-char" map is customized |
Date: |
Thu, 19 Jan 2023 11:58:50 -0500 (EST) |
branch: elpa/eat
commit 417e7d236284bbe02864f1905f65b77c959813d5
Author: Akib Azmain Turja <akib@disroot.org>
Commit: Akib Azmain Turja <akib@disroot.org>
Auto reload Eat when "semi-char" map is customized
* eat.el (eat--load-file-path, eat--being-loaded): New
variable.
* eat.el (eat-semi-char-non-bound-keys)
(eat-eshell-semi-char-non-bound-keys): Reload Eat when
customized. Document what to do if changed from Lisp.
* eat.el (eat-update-semi-char-mode-map)
(eat-eshell-update-semi-char-mode-map): New function.
* eat.el (eat-reload): New command.
* eat.texi (Semi-char Mode): Document what to do if the lists
of not bound keys are changed from Lisp.
---
eat.el | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++-----------
eat.texi | 9 +++++++++
2 files changed, 61 insertions(+), 11 deletions(-)
diff --git a/eat.el b/eat.el
index 35a78cfcfb..010706c5bf 100644
--- a/eat.el
+++ b/eat.el
@@ -83,6 +83,12 @@
(require 'shell)
(require 'url)
+;; Needed by `eat-reload'.
+(defvar eat--being-loaded nil
+ "Non-nil means Eat is being loaded.")
+
+(setq eat--being-loaded t)
+
;;;; User Options.
@@ -167,13 +173,18 @@ Eat might still bound them to do something else (for
example, changing
keybinding mode).
Each element is a vector of form [KEY] or [?\\e KEY], meaning KEY or
-M-KEY shouldn't be bound. KEY shouldn't contain meta (Alt) modifier."
+M-KEY shouldn't be bound. KEY shouldn't contain meta (Alt) modifier.
+
+When changing this from Lisp, make sure to call
+`eat-update-semi-char-mode-map' to update the keymap and reload Eat to
+make the changes effective."
:type '(repeat sexp)
:set (lambda (sym val)
(set-default-toplevel-value sym val)
- (when (boundp 'eat-semi-char-mode-map)
- (setq eat-semi-char-mode-map
- (eat--prepare-semi-char-mode-map))))
+ (when (and (not eat--being-loaded)
+ (boundp 'eat-semi-char-mode-map))
+ (eat-update-semi-char-mode-map)
+ (eat-reload)))
:group 'eat-ui)
(defcustom eat-eshell-semi-char-non-bound-keys
@@ -186,13 +197,18 @@ Eat might still bound them to do something else (for
example, changing
keybinding mode).
Each element is a vector of form [KEY] or [?\\e KEY], meaning KEY or
-M-KEY shouldn't be bound. KEY shouldn't contain meta (Alt) modifier."
+M-KEY shouldn't be bound. KEY shouldn't contain meta (Alt) modifier.
+
+When changing this from Lisp, make sure to call
+`eat-eshell-update-semi-char-mode-map' to update the keymap and reload
+Eat to make the changes effective."
:type '(repeat sexp)
:set (lambda (sym val)
(set-default-toplevel-value sym val)
- (when (boundp 'eat-eshell-semi-char-mode-map)
- (setq eat-eshell-semi-char-mode-map
- (eat--eshell-prepare-semi-char-mode-map))))
+ (when (and (not eat--being-loaded)
+ (boundp 'eat-eshell-semi-char-mode-map))
+ (eat-eshell-update-semi-char-mode-map)
+ (eat-reload)))
:group 'eat-eshell)
(defcustom eat-enable-directory-tracking t
@@ -384,6 +400,9 @@ This value is used by terminal programs to identify the
terminal."
;; Upgrading Eat causes `eat-term-terminfo-directory' and
;; `eat-term-shell-integration-directory' to be outdated, so update it
;; if not modified by user (or something else).
+(defvar eat--load-file-path nil
+ "Path to currently loaded Eat.")
+
(defvar eat--install-path nil
"Path to directory where Eat is installed.")
@@ -393,9 +412,10 @@ This value is used by terminal programs to identify the
terminal."
(defvar eat--shell-integration-path nil
"Path to directory where shell integration scripts are installed.")
+(setq eat--load-file-path (or load-file-name buffer-file-name))
+
(setq eat--install-path
- (copy-sequence (file-name-directory
- (or load-file-name buffer-file-name))))
+ (copy-sequence (file-name-directory eat--load-file-path)))
(defvar eat-term-terminfo-directory)
(defvar eat-term-shell-integration-directory)
@@ -4835,7 +4855,7 @@ STRING and ARG are passed to `yank-pop', which see."
"Handle paste operation EVENT from XTerm."
(interactive "e")
(unless (eq (car-safe event) 'xterm-paste)
- (error "xterm-paste must be found to xterm-paste event"))
+ (error "`eat-xterm-paste' must be bind to `xterm-paste' event"))
(let ((pasted-text (nth 1 event)))
(if (bound-and-true-p xterm-store-paste-on-kill-ring)
;; Put the text onto the kill ring and then insert it into the
@@ -4877,6 +4897,10 @@ STRING and ARG are passed to `yank-pop', which see."
(eat--prepare-semi-char-mode-map))
"Keymap for Eat semi-char mode.")
+(defun eat-update-semi-char-mode-map ()
+ "Update \"semi-char\" keybinding mode's keymap."
+ (setq eat-semi-char-mode-map (eat--prepare-semi-char-mode-map)))
+
(defvar eat-char-mode-map
(let ((map (eat-term-make-keymap
#'eat-self-input '(:ascii :arrow :navigation :function)
@@ -5519,6 +5543,11 @@ PROGRAM can be a shell command."
(eat--eshell-prepare-semi-char-mode-map))
"Keymap for Eat Eshell semi-char mode.")
+(defun eat-eshell-update-semi-char-mode-map ()
+ "Update \"semi-char\" keybinding mode's keymap in Eshell."
+ (setq eat-eshell-semi-char-mode-map
+ (eat--eshell-prepare-semi-char-mode-map)))
+
(defvar eat-eshell-char-mode-map
(let ((map (eat-term-make-keymap
#'eat-self-input '(:ascii :arrow :navigation :function)
@@ -6504,5 +6533,17 @@ N defaults to 1. Interactively, N is the prefix
argument."
"]"))
(add-hook 'kill-buffer-hook #'eat-trace--cleanup nil t))
+
+;;;; Footer.
+
+(defun eat-reload ()
+ "Reload Eat."
+ (interactive)
+ (unless eat--being-loaded
+ ;; Remove .elc suffix to load native compiled version if possible.
+ (load (string-remove-suffix ".elc" eat--load-file-path))))
+
+(setq eat--being-loaded nil)
+
(provide 'eat)
;;; eat.el ends here
diff --git a/eat.texi b/eat.texi
index 885aecdaf6..7fa83f7569 100644
--- a/eat.texi
+++ b/eat.texi
@@ -294,6 +294,15 @@ modifier. To not bind a key with meta modifier, use a
vector of form
@code{[?\e @var{key}]}, where @var{key} is the key without meta
modifier.
+@findex eat-update-semi-char-mode-map
+@findex eat-eshell-update-semi-char-mode-map
+@findex eat-reload
+If you set the user options manually (for example, with @code{setq}),
+you must call @code{eat-update-semi-char-mode-map} or
+@code{eat-eshell-update-semi-char-mode-map} respectively, and finally
+reload Eat (you can do this with the command @command{eat-reload}).
+Or alternatively you can set the user options before Eat is loaded.
+
@anchor{Char Mode}
@cindex char mode
@cindex mode, char