From c14ab0580c549ea11f5d23fbb948c83297d68578 Mon Sep 17 00:00:00 2001 From: gzj <0x7c00zeno@gmail.com> Date: Wed, 3 Mar 2021 09:01:06 +0800 Subject: add persp-switch-by-number command. --- README.md | 1 + perspective.el | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) 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..774bd40 100644 --- a/perspective.el +++ b/perspective.el @@ -292,6 +292,17 @@ 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") 'persp-switch-1) +(define-key perspective-map (kbd "2") 'persp-switch-2) +(define-key perspective-map (kbd "3") 'persp-switch-3) +(define-key perspective-map (kbd "4") 'persp-switch-4) +(define-key perspective-map (kbd "5") 'persp-switch-5) +(define-key perspective-map (kbd "6") 'persp-switch-6) +(define-key perspective-map (kbd "7") 'persp-switch-7) +(define-key perspective-map (kbd "8") 'persp-switch-8) +(define-key perspective-map (kbd "9") 'persp-switch-9) +(define-key perspective-map (kbd "0") 'persp-switch-10) (defun perspectives-hash (&optional frame) "Return a hash containing all perspectives in FRAME. @@ -638,6 +649,68 @@ 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 "nEnter your num:") + (let ((counter 0) + (persp-seq (frame-parameter nil 'persp--modestring))) + (dolist (n persp-seq) + (if (eq (text-properties-at 0 n) nil) + () + (setq counter (+ counter 1)) + (if (eq counter num) + (persp-switch n)))))) + +(defun persp-switch-1 () + "Switch to perspective 1." + (interactive) + (persp-switch-by-number 1)) + +(defun persp-switch-2 () + "Switch to perspective 2." + (interactive) + (persp-switch-by-number 2)) + +(defun persp-switch-3 () + "Switch to perspective 3." + (interactive) + (persp-switch-by-number 3)) + +(defun persp-switch-4 () + "Switch to perspective 4." + (interactive) + (persp-switch-by-number 4)) + +(defun persp-switch-5 () + "Switch to perspective 5." + (interactive) + (persp-switch-by-number 5)) + +(defun persp-switch-6 () + "Switch to perspective 6." + (interactive) + (persp-switch-by-number 6)) + +(defun persp-switch-7 () + "Switch to perspective 7." + (interactive) + (persp-switch-by-number 7)) + +(defun persp-switch-8 () + "Switch to perspective 8." + (interactive) + (persp-switch-by-number 8)) + +(defun persp-switch-9 () + "Switch to perspective 9." + (interactive) + (persp-switch-by-number 9)) + +(defun persp-switch-10 () + "Switch to perspective 10." + (interactive) + (persp-switch-by-number 10)) + (defun persp-activate (persp) "Activate the perspective given by the persp struct PERSP." (check-persp persp) -- cgit v1.0 From c3f96164174dc34b76cae3c5a41bb53f6d85b168 Mon Sep 17 00:00:00 2001 From: gzj <0x7c00zeno@gmail.com> Date: Thu, 4 Mar 2021 10:41:42 +0800 Subject: refactor persp-switch-by-number command. --- perspective.el | 81 +++++++++------------------------------------------------- 1 file changed, 12 insertions(+), 69 deletions(-) diff --git a/perspective.el b/perspective.el index 774bd40..868b78d 100644 --- a/perspective.el +++ b/perspective.el @@ -293,16 +293,16 @@ Run with the activated perspective active.") (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") 'persp-switch-1) -(define-key perspective-map (kbd "2") 'persp-switch-2) -(define-key perspective-map (kbd "3") 'persp-switch-3) -(define-key perspective-map (kbd "4") 'persp-switch-4) -(define-key perspective-map (kbd "5") 'persp-switch-5) -(define-key perspective-map (kbd "6") 'persp-switch-6) -(define-key perspective-map (kbd "7") 'persp-switch-7) -(define-key perspective-map (kbd "8") 'persp-switch-8) -(define-key perspective-map (kbd "9") 'persp-switch-9) -(define-key perspective-map (kbd "0") 'persp-switch-10) +(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))) (defun perspectives-hash (&optional frame) "Return a hash containing all perspectives in FRAME. @@ -651,65 +651,8 @@ If NORECORD is non-nil, do not update the (defun persp-switch-by-number (num) "Switch to the perspective given by NUMBER." - (interactive "nEnter your num:") - (let ((counter 0) - (persp-seq (frame-parameter nil 'persp--modestring))) - (dolist (n persp-seq) - (if (eq (text-properties-at 0 n) nil) - () - (setq counter (+ counter 1)) - (if (eq counter num) - (persp-switch n)))))) - -(defun persp-switch-1 () - "Switch to perspective 1." - (interactive) - (persp-switch-by-number 1)) - -(defun persp-switch-2 () - "Switch to perspective 2." - (interactive) - (persp-switch-by-number 2)) - -(defun persp-switch-3 () - "Switch to perspective 3." - (interactive) - (persp-switch-by-number 3)) - -(defun persp-switch-4 () - "Switch to perspective 4." - (interactive) - (persp-switch-by-number 4)) - -(defun persp-switch-5 () - "Switch to perspective 5." - (interactive) - (persp-switch-by-number 5)) - -(defun persp-switch-6 () - "Switch to perspective 6." - (interactive) - (persp-switch-by-number 6)) - -(defun persp-switch-7 () - "Switch to perspective 7." - (interactive) - (persp-switch-by-number 7)) - -(defun persp-switch-8 () - "Switch to perspective 8." - (interactive) - (persp-switch-by-number 8)) - -(defun persp-switch-9 () - "Switch to perspective 9." - (interactive) - (persp-switch-by-number 9)) - -(defun persp-switch-10 () - "Switch to perspective 10." - (interactive) - (persp-switch-by-number 10)) + (interactive "NEnter perspective number") + (persp-switch (nth (- num 1) (persp-names)))) (defun persp-activate (persp) "Activate the perspective given by the persp struct PERSP." -- cgit v1.0 From 76cc607d4e38c2be6661b1fbc29204f16f1d887f Mon Sep 17 00:00:00 2001 From: Constantine Vetoshev Date: Sat, 6 Mar 2021 11:32:09 -0800 Subject: No need to quote lambdas. --- perspective.el | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/perspective.el b/perspective.el index 868b78d..909e835 100644 --- a/perspective.el +++ b/perspective.el @@ -293,16 +293,17 @@ Run with the activated perspective active.") (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))) + +(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))) (defun perspectives-hash (&optional frame) "Return a hash containing all perspectives in FRAME. -- cgit v1.0 From 37f962cddb2f39a596505355e2fa1709a575e7e3 Mon Sep 17 00:00:00 2001 From: Constantine Vetoshev Date: Sat, 6 Mar 2021 11:32:23 -0800 Subject: Improve which-key feedback for persp-switch-by-number. --- perspective.el | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/perspective.el b/perspective.el index 909e835..ae79c89 100644 --- a/perspective.el +++ b/perspective.el @@ -305,6 +305,21 @@ Run with the activated perspective active.") (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. FRAME defaults to the currently selected frame. The keys are the -- cgit v1.0 From 0a0cd16d480b310067a3347a8d794b8499b47d61 Mon Sep 17 00:00:00 2001 From: Constantine Vetoshev Date: Sat, 6 Mar 2021 11:32:50 -0800 Subject: Add error reporting to persp-switch-by-number. --- perspective.el | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/perspective.el b/perspective.el index ae79c89..93c9731 100644 --- a/perspective.el +++ b/perspective.el @@ -667,8 +667,15 @@ If NORECORD is non-nil, do not update the (defun persp-switch-by-number (num) "Switch to the perspective given by NUMBER." - (interactive "NEnter perspective number") - (persp-switch (nth (- num 1) (persp-names)))) + (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." -- cgit v1.0