Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions Eask
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@
(source "melpa")

(depends-on "emacs" "28.1")
(depends-on "ht" "2.3")
(depends-on "dash" "2.19")

(development
(depends-on "package-lint")
Expand Down
77 changes: 45 additions & 32 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,21 @@ Add `space-tree-modeline-lighter` to your modeline to see the current space:
...))
```

### Level-switch convenience commands

For binding directly to keys, the package defines a family of commands
that switch to a fixed space at each of the first three levels:

| Command family | What it switches to |
|-------------------------------------------------|--------------------------------------|
| `space-tree-to-1` … `space-tree-to-9` | Top-level space N |
| `space-tree-sub-1` … `space-tree-sub-5` | Sub-space N of the current top-level |
| `space-tree-sub-sub-1` … `space-tree-sub-sub-5` | Sub-sub-space N of the current sub |

These exist so you can bind keys without writing a lambda per binding.
For deeper levels or non-contiguous targets, write a small wrapper
around `space-tree-switch-or-create` that passes an explicit address.

## Example Configuration

Here's an example configuration using `general.el` for keybindings:
Expand All @@ -90,47 +105,47 @@ Here's an example configuration using `general.el` for keybindings:

;; Top-level spaces with Super key + number
(general-define-key
"s-1" (lambda () (interactive) (space-tree-switch-or-create '(1)))
"s-2" (lambda () (interactive) (space-tree-switch-or-create '(2)))
"s-3" (lambda () (interactive) (space-tree-switch-or-create '(3)))
"s-4" (lambda () (interactive) (space-tree-switch-or-create '(4)))
"s-5" (lambda () (interactive) (space-tree-switch-or-create '(5)))
"s-6" (lambda () (interactive) (space-tree-switch-or-create '(6)))
"s-7" (lambda () (interactive) (space-tree-switch-or-create '(7)))
"s-8" (lambda () (interactive) (space-tree-switch-or-create '(8)))
"s-9" (lambda () (interactive) (space-tree-switch-or-create '(9)))
"s-1" #'space-tree-to-1
"s-2" #'space-tree-to-2
"s-3" #'space-tree-to-3
"s-4" #'space-tree-to-4
"s-5" #'space-tree-to-5
"s-6" #'space-tree-to-6
"s-7" #'space-tree-to-7
"s-8" #'space-tree-to-8
"s-9" #'space-tree-to-9

;; Second level (within current top-level space)
"s-a" (lambda () (interactive) (space-tree-switch-or-create `(,(nth 0 space-tree-current-address) 1)))
"s-s" (lambda () (interactive) (space-tree-switch-or-create `(,(nth 0 space-tree-current-address) 2)))
"s-d" (lambda () (interactive) (space-tree-switch-or-create `(,(nth 0 space-tree-current-address) 3)))
"s-f" (lambda () (interactive) (space-tree-switch-or-create `(,(nth 0 space-tree-current-address) 4)))
"s-g" (lambda () (interactive) (space-tree-switch-or-create `(,(nth 0 space-tree-current-address) 5)))
"s-a" #'space-tree-sub-1
"s-s" #'space-tree-sub-2
"s-d" #'space-tree-sub-3
"s-f" #'space-tree-sub-4
"s-g" #'space-tree-sub-5

;; Third level (within current second-level space)
"s-A" (lambda () (interactive) (space-tree-switch-or-create `(,(nth 0 space-tree-current-address) ,(nth 1 space-tree-current-address) 1)))
"s-S" (lambda () (interactive) (space-tree-switch-or-create `(,(nth 0 space-tree-current-address) ,(nth 1 space-tree-current-address) 2)))
"s-D" (lambda () (interactive) (space-tree-switch-or-create `(,(nth 0 space-tree-current-address) ,(nth 1 space-tree-current-address) 3)))
"s-F" (lambda () (interactive) (space-tree-switch-or-create `(,(nth 0 space-tree-current-address) ,(nth 1 space-tree-current-address) 4)))
"s-G" (lambda () (interactive) (space-tree-switch-or-create `(,(nth 0 space-tree-current-address) ,(nth 1 space-tree-current-address) 5)))
"s-A" #'space-tree-sub-sub-1
"s-S" #'space-tree-sub-sub-2
"s-D" #'space-tree-sub-sub-3
"s-F" #'space-tree-sub-sub-4
"s-G" #'space-tree-sub-sub-5

;; Navigation
"M-S-<tab>" 'space-tree-switch-space-by-name
"M-<tab>" 'space-tree-go-to-last-space
"C-M-<tab>" 'space-tree-go-right
"C-M-S-<tab>" 'space-tree-go-left
"M-S-<tab>" #'space-tree-switch-space-by-name
"M-<tab>" #'space-tree-go-to-last-space
"C-M-<tab>" #'space-tree-go-right
"C-M-S-<tab>" #'space-tree-go-left

;; Delete current space
"s-_" (lambda () (interactive) (space-tree-delete-space space-tree-current-address)))
;; Delete current space (the command defaults to the current address)
"s-_" #'space-tree-delete-space)

;; Evil/vim-style bindings
(general-define-key
:states '(normal visual)
:keymaps 'override
"gt" 'space-tree-switch-current-level
"gT" 'space-tree-switch-space-by-digit-arg
"g+" 'space-tree-create-space-top-level
"gn" 'space-tree-create-space-current-level))
"gt" #'space-tree-switch-current-level
"gT" #'space-tree-switch-space-by-digit-arg
"g+" #'space-tree-create-space-top-level
"gn" #'space-tree-create-space-current-level))
```

## Customization
Expand Down Expand Up @@ -164,9 +179,7 @@ Each space stores its own window configuration, which is restored when you switc

## Dependencies

- Emacs 28.1+
- [ht](https://github.com/Wilfred/ht.el) (2.3+)
- [dash](https://github.com/magnars/dash.el) (2.19+)
- Emacs 28.1+ (no external packages)

## License

Expand Down
Loading
Loading