aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorConstantine Vetoshev <gepardcv@gmail.com>2021-03-06 11:36:29 -0800
committerConstantine Vetoshev <gepardcv@gmail.com>2021-03-06 11:36:29 -0800
commit541bba258cfea8a8e9d9583d71dfc3e4c59c519b (patch)
treeacab92f0d29857b1c45d490fbee4e7217e80c7bb
parent697d95f24e055eb9725781d179d7db63d6afd2b5 (diff)
parent0a0cd16d480b310067a3347a8d794b8499b47d61 (diff)
Merge branch 'GZJ-master'
-rw-r--r--README.md1
-rw-r--r--perspective.el39
2 files changed, 40 insertions, 0 deletions
diff --git a/README.md b/README.md
index 9964ebb..5380352 100644
--- a/README.md
+++ b/README.md
@@ -142,6 +142,7 @@ customize `persp-mode-prefix-key`. Additionally, creating a key binding for
Here are the main commands defined in `persp-mode-map`:
- `s` — `persp-switch`: Query a perspective to switch to, or create
+- `` ` `` — `persp-switch-by-number`: Switch to perspective by number, or switch quickly through number keys `1, 2, 3.. 0`
- `k` — `persp-remove-buffer`: Query a buffer to remove from current perspective
- `c` — `persp-kill` : Query a perspective to kill
- `r` — `persp-rename`: Rename current perspective
diff --git a/perspective.el b/perspective.el
index 103fe50..93c9731 100644
--- a/perspective.el
+++ b/perspective.el
@@ -292,6 +292,33 @@ Run with the activated perspective active.")
(define-key perspective-map persp-mode-prefix-key 'persp-switch-last)
(define-key perspective-map (kbd "C-s") 'persp-state-save)
(define-key perspective-map (kbd "C-l") 'persp-state-load)
+(define-key perspective-map (kbd "`") 'persp-switch-by-number)
+
+(define-key perspective-map (kbd "1") (lambda () (interactive) (persp-switch-by-number 1)))
+(define-key perspective-map (kbd "2") (lambda () (interactive) (persp-switch-by-number 2)))
+(define-key perspective-map (kbd "3") (lambda () (interactive) (persp-switch-by-number 3)))
+(define-key perspective-map (kbd "4") (lambda () (interactive) (persp-switch-by-number 4)))
+(define-key perspective-map (kbd "5") (lambda () (interactive) (persp-switch-by-number 5)))
+(define-key perspective-map (kbd "6") (lambda () (interactive) (persp-switch-by-number 6)))
+(define-key perspective-map (kbd "7") (lambda () (interactive) (persp-switch-by-number 7)))
+(define-key perspective-map (kbd "8") (lambda () (interactive) (persp-switch-by-number 8)))
+(define-key perspective-map (kbd "9") (lambda () (interactive) (persp-switch-by-number 9)))
+(define-key perspective-map (kbd "0") (lambda () (interactive) (persp-switch-by-number 10)))
+
+(when (featurep 'which-key)
+ (declare-function which-key-add-keymap-based-replacements "which-key.el")
+ (when (fboundp 'which-key-add-keymap-based-replacements)
+ (which-key-add-keymap-based-replacements perspective-map
+ "1" "switch to 1"
+ "2" "switch to 2"
+ "3" "switch to 3"
+ "4" "switch to 4"
+ "5" "switch to 5"
+ "6" "switch to 6"
+ "7" "switch to 7"
+ "8" "switch to 8"
+ "9" "switch to 9"
+ "0" "switch to 10")))
(defun perspectives-hash (&optional frame)
"Return a hash containing all perspectives in FRAME.
@@ -638,6 +665,18 @@ If NORECORD is non-nil, do not update the
(run-hooks 'persp-switch-hook))
name)))
+(defun persp-switch-by-number (num)
+ "Switch to the perspective given by NUMBER."
+ (interactive "NSwitch to perspective number: ")
+ (let* ((persps (persp-names))
+ (max-persps (length persps)))
+ (if (<= num max-persps)
+ (persp-switch (nth (- num 1) persps))
+ (message "Perspective %s not available, there are only %s" num max-persps)))
+ ;; XXX: Have to force the modestring to update in this case, since the call
+ ;; inside persp-switch happens too early.
+ (persp-update-modestring))
+
(defun persp-activate (persp)
"Activate the perspective given by the persp struct PERSP."
(check-persp persp)