Question: I want to define some key bindings for my new found usage of helm, amazing mode btw, and I want to do it without overwriting the usage of other keys. I realize that the number of different key combinations is infinite, but is there some way to see all *undefined* key bindings for say 1 level deep? 

For example, I want to know what key bindings are available after hitting `C-c`, and then get a buffer with a listing of `C-c some_keys`. 

Assuming this feature doesn't currently exist?

Answer: 
Check out the [`free-keys`](https://github.com/Fuco1/free-keys) package, which gives you a function of the same name that shows you all your currently unused key-bindings.

[`bind-key`](https://github.com/jwiegley/use-package/blob/master/bind-key.el) is also a helpful tool which gives you a cleaner syntax for defining your own bindings, i.e.:

```
(bind-key "C-h C-k" 'free-keys)

```

`bind-key` also comes with a handy defun called `describe-personal-keybindings` to see all the key-bindings you've set as well as if and what bindings you've overridden.
[**Icicles** key completion](https://www.emacswiki.org/emacs/Icicles_-_Key_Completion) - `S-TAB` - shows you all key sequences currently available for use (i.e., bound, not free), including after you hit a prefix key. 

For example, `C-x r S-TAB` shows key sequences with the prefix `C-x r`.

Keys that are not listed are unbound (free).

You can sort the displayed key sequences in different ways, using `C-,`.