Skip to content

Toggling a specific workgroup

Junyoung Clare Jang edited this page Dec 14, 2020 · 1 revision

I wanted to have a certain window configuration (Org agenda and buffers) accessible with one key press. This is how:

(defun kk/current-wg-workgroup (default-workgroup)
  "Return the name of the current workgroup, or a `default' name"
  (or (ignore-errors (wg-workgroup-name (or (wg-current-workgroup t (window-frame)))))
      default-workgroup))

(defun kk/make-wg-toggler (workgroup-name default-workgroup)
  (lexical-let ((last-workgroup (kk/current-wg-workgroup default-workgroup)))
    (lambda ()
      (interactive)
      "Toggle showing the `workgroup-name' workgroup"
      (lexical-let
	  ((now-wg (string= (kk/current-wg-workgroup default-workgroup) workgroup-name))
	   (target-workgroup last-workgroup))
	(setq last-workgroup
	      (kk/current-wg-workgroup default-workgroup))
	(message "Toggling workgroup: %s from workgroup: %s" target-workgroup last-workgroup)
	(if now-wg
	    (wg-switch-to-workgroup target-workgroup)
	  (wg-switch-to-workgroup workgroup-name)
	  (wg-restore-wconfig
	   (wg-workgroup-get-saved-wconfig
	    (wg-get-workgroup workgroup-name)
	    workgroup-name))
	  )))))

(in this code if you are not on a workgroup before you toggle, you return to "normal" afterwards).

Now bind:

;; Toggle Org workgroup
(global-set-key (kbd "M-<f12>") (kk/make-wg-toggler "Org" "normal"))

and enjoy!

Clone this wiki locally