[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/free-keys 79205af5f5 01/19: Initial commit
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/free-keys 79205af5f5 01/19: Initial commit |
Date: |
Sat, 29 Jan 2022 08:02:48 -0500 (EST) |
branch: elpa/free-keys
commit 79205af5f5d46c43ba646143025d265de3b6ffda
Author: Matus Goljer <dota.keys@gmail.com>
Commit: Matus Goljer <dota.keys@gmail.com>
Initial commit
---
README.md | 24 +++++++++++
free-keys.el | 133 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 157 insertions(+)
diff --git a/README.md b/README.md
new file mode 100644
index 0000000000..fa80d0f241
--- /dev/null
+++ b/README.md
@@ -0,0 +1,24 @@
+# free-keys
+
+Show free bindings in current buffer. Based on
https://gist.github.com/bjorne/3796607
+
+To use, call the command `free-keys`. This package takes into account the
major mode bindigns as well as any bindings occupied by minor modes active in
current buffer. If called with prefix argument `C-u`, you can specify a prefix
map to be used, such as `C-c` or `C-c C-x` (these are specified as a string).
+
+You can customize the variable `free-keys-modifiers` if you use non-standard
modifiers, such as `H` for hyper, `s` for super or `S` for shift. By default
this list contains `C`, `M`, `C-M` and no modifier.
+
+You can customize the variable `free-keys-keys` if you use non-english
keyboard layout and want to show free bindings for keys such as č, í, ö, è, å
etc.
+
+These bindings are available inside the `*Free keys*` buffer:
+
+Keybinding | Description
+-----------|---------------
+`b` | Change the "active" buffer
+`p` | Change the prefix
+`q` | Quit
+
+
+# Installation
+
+The easiest way is to install this via `package.el` from MELPA repository. If
you want to install manually, clone the git repo and add it to your `load-path`:
+
+ (add-to-list 'load-path "path-to-this-git-repo")
diff --git a/free-keys.el b/free-keys.el
new file mode 100644
index 0000000000..43b0a4a216
--- /dev/null
+++ b/free-keys.el
@@ -0,0 +1,133 @@
+;;; free-keys.el --- Show free keybindings for modkeys or prefixes
+
+;; Copyright (C) 2013 Matus Goljer
+
+;; Author: Matus Goljer <matus.goljer@gmail.com>
+;; Maintainer: Matus Goljer <matus.goljer@gmail.com>
+;; Version: 0.1
+;; Created: 3rd November 2013
+;; Keywords: convenience
+
+;; This file is not part of GNU Emacs.
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Show free keybindings for modkeys or prefixes. Based on code
+;; located here: https://gist.github.com/bjorne/3796607
+
+;;; Code:
+
+(defgroup free-keys ()
+ "Free keys."
+ :group 'convenience)
+
+(defcustom free-keys-modifiers '("" "C" "M" "C-M")
+ "List of modifiers that can be used in front of keys."
+ :type '(repeat string)
+ :group 'free-keys)
+
+(defcustom free-keys-keys
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()-=[]{};'\\:\"|,./<>?`~"
+ "String of keys that can be used as bindings."
+ :type 'string
+ :group 'free-keys)
+
+(defvar free-keys-mode-map
+ (let ((map (make-keymap)))
+ (define-key map "b" 'free-keys-change-buffer)
+ (define-key map "p" 'free-keys-set-prefix)
+ map)
+ "Keymap for Free Keys mode.")
+
+(defvar free-keys-original-buffer nil
+ "Buffer from which `free-keys' was called.")
+
+(defun free-keys--print-in-columns (key-list &optional columns)
+ (setq columns (or columns 80))
+ (let* ((len (+ 5 (length (car key-list))))
+ (cols (/ columns len))
+ (rows (/ (length key-list) cols))
+ (cur-col 0)
+ (cur-row 0))
+ (dotimes (i (length key-list))
+ (insert (nth (+ (* cur-col rows) cur-row) key-list) " ")
+ (cl-incf cur-col)
+ (when (= cur-col cols)
+ (insert "\n")
+ (setq cur-col 0)
+ (cl-incf cur-row)))))
+
+(defun free-keys-set-prefix (prefix)
+ "Change the prefix and update the display."
+ (interactive "sPrefix: ")
+ (free-keys prefix free-keys-original-buffer))
+
+(defun free-keys-change-buffer (buffer)
+ (interactive "bShow free bindings for buffer: ")
+ (free-keys nil (get-buffer-create buffer)))
+
+;;;###autoload
+(defun free-keys (&optional prefix buffer)
+ (interactive (list (when current-prefix-arg
+ (read-from-minibuffer "Prefix: "))))
+ (setq prefix (or prefix ""))
+ (setq free-keys-original-buffer (or buffer (current-buffer)))
+ (let ((buf (get-buffer-create "*Free keys*")))
+ (pop-to-buffer buf)
+ (with-current-buffer buf
+ (read-only-mode -1)
+ (erase-buffer)
+ (insert "Help: (b) change buffer (p) change prefix (q) quit\n"
+ "--------------------------------------------------\n\n")
+ (insert "Free keys"
+ (if (not (equal prefix "")) (format " with prefix %s" prefix) "")
+ " in buffer "
+ (buffer-name free-keys-original-buffer)
+ " (major mode: " (with-current-buffer free-keys-original-buffer
(symbol-name major-mode)) ")\n\n")
+ (mapc (lambda (modifier)
+ (if (not (equal modifier ""))
+ (insert "With modifier " modifier
"\n=========================\n")
+ (insert "With no modifier\n=========================\n"))
+ (let (empty-keys)
+ (mapc (lambda (key)
+ (let* ((key-name
+ (if (not (equal modifier ""))
+ (concat modifier "-" (char-to-string key))
+ (char-to-string key)))
+ (full-name
+ (if prefix (concat prefix " " key-name)
key-name))
+ (binding
+ (with-current-buffer free-keys-original-buffer
(key-binding (read-kbd-macro full-name)))))
+ (when (not binding)
+ (push full-name empty-keys))))
+ free-keys-keys)
+ (free-keys--print-in-columns (nreverse empty-keys)))
+ (insert "\n\n"))
+ free-keys-modifiers)
+ (setq buffer-read-only t)
+ (make-local-variable 'buffer-read-only)
+ (goto-char 0)
+ (free-keys-mode))))
+
+;;;###autoload
+(define-derived-mode free-keys-mode special-mode "Free Keys"
+ "Free keys mode.
+
+Display the free keybindings in current buffer.
+
+\\{free-keys-mode-map}")
+
+(provide 'free-keys)
+;;; free-keys.el ends here
- [nongnu] branch elpa/free-keys created (now 7348ce6819), ELPA Syncer, 2022/01/29
- [nongnu] elpa/free-keys d681a3fba0 12/19: Fix the "overflow" bug on the last/first row if the displayed list was not rectangular, ELPA Syncer, 2022/01/29
- [nongnu] elpa/free-keys 3b4a18417b 06/19: Add revert function, ELPA Syncer, 2022/01/29
- [nongnu] elpa/free-keys a975b8fe62 15/19: Suppress byte-compile warning, ELPA Syncer, 2022/01/29
- [nongnu] elpa/free-keys 11241fd518 07/19: Display keys for which keybinding is 'undefined., ELPA Syncer, 2022/01/29
- [nongnu] elpa/free-keys f5db0a1e43 02/19: Add the note about `bind-key`, fix typos, ELPA Syncer, 2022/01/29
- [nongnu] elpa/free-keys f5d882d4c7 11/19: Better display of empty keys (no empty groups, fixed nil modifiers), ELPA Syncer, 2022/01/29
- [nongnu] elpa/free-keys 8c9ea744c1 08/19: Move header help into header-line-format, ELPA Syncer, 2022/01/29
- [nongnu] elpa/free-keys 79205af5f5 01/19: Initial commit,
ELPA Syncer <=
- [nongnu] elpa/free-keys 452d26a3fc 03/19: Do not autoload the major-mode, ELPA Syncer, 2022/01/29
- [nongnu] elpa/free-keys aca6032c3e 05/19: Merge pull request #1 from syohex/support-for-old-emacs, ELPA Syncer, 2022/01/29
- [nongnu] elpa/free-keys 9cc42a07a6 04/19: Support old emacs(<= 24.2), ELPA Syncer, 2022/01/29
- [nongnu] elpa/free-keys 982aea30d1 09/19: Add docstrings & readme, ELPA Syncer, 2022/01/29
- [nongnu] elpa/free-keys 845d7bc367 10/19: Update readme, ELPA Syncer, 2022/01/29
- [nongnu] elpa/free-keys e23ec255d4 13/19: Add option to ignore certain keybindings (shadowed by WM etc.), ELPA Syncer, 2022/01/29
- [nongnu] elpa/free-keys 368820cb36 16/19: Merge pull request #2 from syohex/byte-compile-warning, ELPA Syncer, 2022/01/29
- [nongnu] elpa/free-keys edfd69dc36 17/19: [Fix #3] Add an option to specify multi-character keys, ELPA Syncer, 2022/01/29
- [nongnu] elpa/free-keys 6f9172376a 18/19: Bump version to 1.0, ELPA Syncer, 2022/01/29
- [nongnu] elpa/free-keys 7348ce6819 19/19: Merge pull request #6 from phikal/patch-1, ELPA Syncer, 2022/01/29