EXWM/Helm: Bind global Helm commands with ambrevar/exwm-global-set-key.

master
Pierre Neidhardt 2021-04-12 11:30:05 +02:00
parent 8d96f5b6c3
commit bca3245dc5
1 changed files with 50 additions and 49 deletions

View File

@ -12,6 +12,15 @@
;;; See https://github.com/ch11ng/exwm/issues/285 ;;; See https://github.com/ch11ng/exwm/issues/285
;;; and https://gitlab.com/interception/linux/plugins/caps2esc/issues/2. ;;; and https://gitlab.com/interception/linux/plugins/caps2esc/issues/2.
;; Looks like there is a bug between Helm and EXWM global keys which leads Helm
;; to display nothing when only `exwm-input-set-key' is used.
;; https://github.com/ch11ng/exwm/issues/816
(defun ambrevar/exwm-global-set-key (keys command)
"Bind KEYS to COMMAND.
KEYS is passed to `kbd'."
(define-key exwm-mode-map (kbd keys) command)
(global-set-key (kbd keys) command))
;;; Rename buffer to window title. ;;; Rename buffer to window title.
(defun ambrevar/exwm-rename-buffer-to-title () (exwm-workspace-rename-buffer exwm-title)) (defun ambrevar/exwm-rename-buffer-to-title () (exwm-workspace-rename-buffer exwm-title))
(add-hook 'exwm-update-title-hook 'ambrevar/exwm-rename-buffer-to-title) (add-hook 'exwm-update-title-hook 'ambrevar/exwm-rename-buffer-to-title)
@ -38,12 +47,8 @@
(exwm-input-set-key (kbd "s-k") #'windmove-up) (exwm-input-set-key (kbd "s-k") #'windmove-up)
(exwm-input-set-key (kbd "s-l") #'windmove-right) (exwm-input-set-key (kbd "s-l") #'windmove-right)
(exwm-input-set-key (kbd "s-D") #'kill-this-buffer) (exwm-input-set-key (kbd "s-D") #'kill-this-buffer)
;; WARNING: helm-mini and helm-find-files sometimes display nothing when bound (ambrevar/exwm-global-set-key "s-b" #'list-buffers)
;; with `exwm-input-set-key'. See below. (ambrevar/exwm-global-set-key "s-f" #'find-file)
(define-key exwm-mode-map (kbd "s-b") #'list-buffers)
(global-set-key (kbd "s-b") #'list-buffers)
(define-key exwm-mode-map (kbd "s-f") #'find-file)
(global-set-key (kbd "s-f") #'find-file)
(when (require 'windower nil 'noerror) (when (require 'windower nil 'noerror)
(exwm-input-set-key (kbd "s-<tab>") 'windower-switch-to-last-buffer) (exwm-input-set-key (kbd "s-<tab>") 'windower-switch-to-last-buffer)
@ -65,21 +70,16 @@
;; Need `with-eval-after-load' here since 'helm-map is not defined in 'helm-config. ;; Need `with-eval-after-load' here since 'helm-map is not defined in 'helm-config.
(ambrevar/define-keys helm-map (ambrevar/define-keys helm-map
"s-\\" 'helm-toggle-resplit-and-swap-windows) "s-\\" 'helm-toggle-resplit-and-swap-windows)
(exwm-input-set-key (kbd "s-c") #'helm-resume) (ambrevar/exwm-global-set-key "s-c" #'helm-resume)
;; WARNING: helm-mini and helm-find-files sometimes display nothing when bound (ambrevar/exwm-global-set-key "s-b" #'helm-mini)
;; with `exwm-input-set-key'. (ambrevar/exwm-global-set-key "s-f" #'helm-find-files)
(define-key exwm-mode-map (kbd "s-b") #'helm-mini) (ambrevar/exwm-global-set-key "s-F" #'helm-locate)
(global-set-key (kbd "s-b") #'helm-mini)
(define-key exwm-mode-map (kbd "s-f") #'helm-find-files)
(global-set-key (kbd "s-f") #'helm-find-files)
;; (push `(,(kbd "s-f") . helm-find-files) exwm-input-global-keys)
(exwm-input-set-key (kbd "s-F") #'helm-locate)
(when (fboundp 'ambrevar/helm-locate-meta) (when (fboundp 'ambrevar/helm-locate-meta)
(exwm-input-set-key (kbd "s-F") #'ambrevar/helm-locate-meta)) (ambrevar/exwm-global-set-key "s-F" #'ambrevar/helm-locate-meta))
(exwm-input-set-key (kbd "s-g") 'ambrevar/helm-grep-git-or-ag) (ambrevar/exwm-global-set-key "s-g" 'ambrevar/helm-grep-git-or-ag)
(exwm-input-set-key (kbd "s-G") 'ambrevar/helm-grep-git-all-or-ag) (ambrevar/exwm-global-set-key "s-G" 'ambrevar/helm-grep-git-all-or-ag)
;; Launcher ;; Launcher
(exwm-input-set-key (kbd "s-r") 'helm-run-external-command)) (ambrevar/exwm-global-set-key "s-r" 'helm-run-external-command))
(when (require 'evil nil t) (when (require 'evil nil t)
(exwm-input-set-key (kbd "s-<tab>") #'evil-switch-to-windows-last-buffer) (exwm-input-set-key (kbd "s-<tab>") #'evil-switch-to-windows-last-buffer)
@ -92,60 +92,61 @@
(exwm-input-set-key (kbd "s-t") (lambda () (exwm-input-set-key (kbd "s-t") (lambda ()
(interactive) (interactive)
(find-file (car org-agenda-files)))) (find-file (car org-agenda-files))))
(exwm-input-set-key (kbd "s-<return>") #'eshell) (exwm-input-set-key (kbd "s-<return>") 'eshell)
(exwm-input-set-key (kbd "s-m") #'notmuch-hello) (exwm-input-set-key (kbd "s-m") 'notmuch-hello)
(exwm-input-set-key (kbd "s-n") #'elfeed) (exwm-input-set-key (kbd "s-n") 'elfeed)
(exwm-input-set-key (kbd "s-e") #'eww)) (exwm-input-set-key (kbd "s-e") 'eww))
(exwm-input-set-key (kbd "s-t") 'helm-selector-org) (ambrevar/exwm-global-set-key "s-t" 'helm-selector-org)
(exwm-input-set-key (kbd "s-T") 'helm-selector-org-other-window) (ambrevar/exwm-global-set-key "s-T" 'helm-selector-org-other-window)
(exwm-input-set-key (kbd "s-<return>") 'ambrevar/helm-selector-sly) (ambrevar/exwm-global-set-key "s-<return>" 'ambrevar/helm-selector-sly)
(exwm-input-set-key (kbd "S-s-<return>") 'ambrevar/helm-selector-sly-other-window) (ambrevar/exwm-global-set-key "S-s-<return>" 'ambrevar/helm-selector-sly-other-window)
(exwm-input-set-key (kbd "s-m") #'helm-selector-notmuch) (ambrevar/exwm-global-set-key "s-m" 'helm-selector-notmuch)
(exwm-input-set-key (kbd "s-M") #'helm-selector-notmuch-other-window) (ambrevar/exwm-global-set-key "s-M" 'helm-selector-notmuch-other-window)
(exwm-input-set-key (kbd "s-n") #'helm-selector-elfeed) (ambrevar/exwm-global-set-key "s-n" 'helm-selector-elfeed)
(exwm-input-set-key (kbd "s-N") #'helm-selector-elfeed-other-window) ; "n" for "news" (ambrevar/exwm-global-set-key "s-N" 'helm-selector-elfeed-other-window) ; "n" for "news"
(exwm-input-set-key (kbd "s-e") #'helm-selector-eww) (ambrevar/exwm-global-set-key "s-e" 'helm-selector-eww)
(exwm-input-set-key (kbd "s-E") #'helm-selector-eww-other-window)) (ambrevar/exwm-global-set-key "s-E" 'helm-selector-eww-other-window))
(when (fboundp 'magit-status) (when (fboundp 'magit-status)
(if (require 'helm-selector-magit nil :noerror) (if (require 'helm-selector-magit nil :noerror)
(progn (progn
(exwm-input-set-key (kbd "s-v") #'helm-selector-magit) (ambrevar/exwm-global-set-key "s-v" #'helm-selector-magit)
(exwm-input-set-key (kbd "s-V") #'magit-status)) (exwm-input-set-key (kbd "s-V") #'magit-status))
(exwm-input-set-key (kbd "s-v") #'magit-status))) (exwm-input-set-key (kbd "s-v") #'magit-status)))
(when (fboundp 'emms-all) (when (fboundp 'emms-all)
(exwm-input-set-key (kbd "s-a") #'emms-smart-browse) (exwm-input-set-key (kbd "s-a") #'emms-smart-browse)
(exwm-input-set-key (kbd "S-s-<kp-enter>") #'emms-pause) (exwm-input-set-key (kbd "S-s-<kp-enter>") #'emms-pause)
(if (fboundp 'helm-emms) (if (fboundp 'helm-emms)
(exwm-input-set-key (kbd "s-A") #'helm-emms) (ambrevar/exwm-global-set-key "s-A" #'helm-emms)
(exwm-input-set-key (kbd "s-A") #'emms))) (exwm-input-set-key (kbd "s-A") #'emms)))
(when (fboundp 'helm-pass) (when (fboundp 'helm-pass)
(exwm-input-set-key (kbd "s-p") #'helm-pass)) (ambrevar/exwm-global-set-key "s-p" #'helm-pass))
(autoload 'ambrevar/slime-to-repl "lisp") (autoload 'ambrevar/slime-to-repl "lisp")
(exwm-input-set-key (kbd "s-<backspace>") #'helm-selector-sly) (ambrevar/exwm-global-set-key "s-<backspace>" #'ambrevar/helm-selector-sly-non-ambrevar)
;; TODO: Apparently, S-s-<backspace> is not recognized.
(ambrevar/exwm-global-set-key "M-s-<backspace>" #'ambrevar/helm-selector-sly-non-ambrevar-other-window)
(defun ambrevar/repl-switcher () (defun ambrevar/repl-switcher ()
"Switch between Geiser and SLIME REPLs." "Switch between Geiser and SLIME REPLs."
(interactive) (interactive)
;; TODO: Apparently, S-s-<backspace> is not recognized.
(pcase (pcase
(completing-read "Lisp: " '(cider geiser slime sly racket)) (completing-read "Lisp: " '(cider geiser slime sly racket))
("cider" ("cider"
(exwm-input-set-key (kbd "s-<backspace>") 'helm-selector-cider) (ambrevar/exwm-global-set-key "s-<backspace>" 'helm-selector-cider)
(exwm-input-set-key (kbd "M-s-<backspace>") 'helm-selector-cider-other-window)) (ambrevar/exwm-global-set-key "M-s-<backspace>" 'helm-selector-cider-other-window))
("geiser" ("geiser"
(autoload 'helm-geiser-repl-switch "init-scheme") (autoload 'helm-geiser-repl-switch "init-scheme")
(exwm-input-set-key (kbd "s-<backspace>") 'helm-selector-geiser) (ambrevar/exwm-global-set-key "s-<backspace>" 'helm-selector-geiser)
(exwm-input-set-key (kbd "M-s-<backspace>") 'helm-selector-geiser-other-window)) (ambrevar/exwm-global-set-key "M-s-<backspace>" 'helm-selector-geiser-other-window))
("slime" ("slime"
(exwm-input-set-key (kbd "s-<backspace>") 'helm-selector-slime) (ambrevar/exwm-global-set-key "s-<backspace>" 'helm-selector-slime)
(exwm-input-set-key (kbd "M-s-<backspace>") 'helm-selector-slime-other-window)) (ambrevar/exwm-global-set-key "M-s-<backspace>" 'helm-selector-slime-other-window))
("sly" ("sly"
(exwm-input-set-key (kbd "s-<backspace>") 'helm-selector-sly) (ambrevar/exwm-global-set-key "s-<backspace>" 'helm-selector-sly)
(exwm-input-set-key (kbd "<M-s-backspace>") 'helm-selector-sly-other-window)) (ambrevar/exwm-global-set-key "<M-s-backspace>" 'helm-selector-sly-other-window))
("racket" ("racket"
(exwm-input-set-key (kbd "s-<backspace>") #'racket-repl)))) (ambrevar/exwm-global-set-key "s-<backspace>" #'racket-repl))))
(exwm-input-set-key (kbd "s-C-<backspace>") #'ambrevar/repl-switcher) (exwm-input-set-key (kbd "s-C-<backspace>") #'ambrevar/repl-switcher)
;;; External application shortcuts. ;;; External application shortcuts.
@ -170,8 +171,8 @@
"M-d" 'helm-buffer-run-kill-persistent "M-d" 'helm-buffer-run-kill-persistent
"S-<return>" 'helm-buffer-switch-other-window) "S-<return>" 'helm-buffer-switch-other-window)
;; Web browser ;; Web browser
(exwm-input-set-key (kbd "s-w") #'helm-exwm-switch-browser) (ambrevar/exwm-global-set-key "s-w" #'helm-exwm-switch-browser)
(exwm-input-set-key (kbd "s-W") #'helm-exwm-switch-browser-other-window)) (ambrevar/exwm-global-set-key "s-W" #'helm-exwm-switch-browser-other-window))
(when (require 'desktop-environment nil 'noerror) (when (require 'desktop-environment nil 'noerror)
;; REVIEW: Remove the override on next version release: ;; REVIEW: Remove the override on next version release: