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
;;; 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.
(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)
@ -38,12 +47,8 @@
(exwm-input-set-key (kbd "s-k") #'windmove-up)
(exwm-input-set-key (kbd "s-l") #'windmove-right)
(exwm-input-set-key (kbd "s-D") #'kill-this-buffer)
;; WARNING: helm-mini and helm-find-files sometimes display nothing when bound
;; with `exwm-input-set-key'. See below.
(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)
(ambrevar/exwm-global-set-key "s-b" #'list-buffers)
(ambrevar/exwm-global-set-key "s-f" #'find-file)
(when (require 'windower nil 'noerror)
(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.
(ambrevar/define-keys helm-map
"s-\\" 'helm-toggle-resplit-and-swap-windows)
(exwm-input-set-key (kbd "s-c") #'helm-resume)
;; WARNING: helm-mini and helm-find-files sometimes display nothing when bound
;; with `exwm-input-set-key'.
(define-key exwm-mode-map (kbd "s-b") #'helm-mini)
(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)
(ambrevar/exwm-global-set-key "s-c" #'helm-resume)
(ambrevar/exwm-global-set-key "s-b" #'helm-mini)
(ambrevar/exwm-global-set-key "s-f" #'helm-find-files)
(ambrevar/exwm-global-set-key "s-F" #'helm-locate)
(when (fboundp 'ambrevar/helm-locate-meta)
(exwm-input-set-key (kbd "s-F") #'ambrevar/helm-locate-meta))
(exwm-input-set-key (kbd "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-F" #'ambrevar/helm-locate-meta))
(ambrevar/exwm-global-set-key "s-g" 'ambrevar/helm-grep-git-or-ag)
(ambrevar/exwm-global-set-key "s-G" 'ambrevar/helm-grep-git-all-or-ag)
;; 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)
(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 ()
(interactive)
(find-file (car org-agenda-files))))
(exwm-input-set-key (kbd "s-<return>") #'eshell)
(exwm-input-set-key (kbd "s-m") #'notmuch-hello)
(exwm-input-set-key (kbd "s-n") #'elfeed)
(exwm-input-set-key (kbd "s-e") #'eww))
(exwm-input-set-key (kbd "s-t") 'helm-selector-org)
(exwm-input-set-key (kbd "s-T") 'helm-selector-org-other-window)
(exwm-input-set-key (kbd "s-<return>") 'ambrevar/helm-selector-sly)
(exwm-input-set-key (kbd "S-s-<return>") 'ambrevar/helm-selector-sly-other-window)
(exwm-input-set-key (kbd "s-m") #'helm-selector-notmuch)
(exwm-input-set-key (kbd "s-M") #'helm-selector-notmuch-other-window)
(exwm-input-set-key (kbd "s-n") #'helm-selector-elfeed)
(exwm-input-set-key (kbd "s-N") #'helm-selector-elfeed-other-window) ; "n" for "news"
(exwm-input-set-key (kbd "s-e") #'helm-selector-eww)
(exwm-input-set-key (kbd "s-E") #'helm-selector-eww-other-window))
(exwm-input-set-key (kbd "s-<return>") 'eshell)
(exwm-input-set-key (kbd "s-m") 'notmuch-hello)
(exwm-input-set-key (kbd "s-n") 'elfeed)
(exwm-input-set-key (kbd "s-e") 'eww))
(ambrevar/exwm-global-set-key "s-t" 'helm-selector-org)
(ambrevar/exwm-global-set-key "s-T" 'helm-selector-org-other-window)
(ambrevar/exwm-global-set-key "s-<return>" 'ambrevar/helm-selector-sly)
(ambrevar/exwm-global-set-key "S-s-<return>" 'ambrevar/helm-selector-sly-other-window)
(ambrevar/exwm-global-set-key "s-m" 'helm-selector-notmuch)
(ambrevar/exwm-global-set-key "s-M" 'helm-selector-notmuch-other-window)
(ambrevar/exwm-global-set-key "s-n" 'helm-selector-elfeed)
(ambrevar/exwm-global-set-key "s-N" 'helm-selector-elfeed-other-window) ; "n" for "news"
(ambrevar/exwm-global-set-key "s-e" 'helm-selector-eww)
(ambrevar/exwm-global-set-key "s-E" 'helm-selector-eww-other-window))
(when (fboundp 'magit-status)
(if (require 'helm-selector-magit nil :noerror)
(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)))
(when (fboundp 'emms-all)
(exwm-input-set-key (kbd "s-a") #'emms-smart-browse)
(exwm-input-set-key (kbd "S-s-<kp-enter>") #'emms-pause)
(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)))
(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")
(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 ()
"Switch between Geiser and SLIME REPLs."
(interactive)
;; TODO: Apparently, S-s-<backspace> is not recognized.
(pcase
(completing-read "Lisp: " '(cider geiser slime sly racket))
("cider"
(exwm-input-set-key (kbd "s-<backspace>") 'helm-selector-cider)
(exwm-input-set-key (kbd "M-s-<backspace>") 'helm-selector-cider-other-window))
(ambrevar/exwm-global-set-key "s-<backspace>" 'helm-selector-cider)
(ambrevar/exwm-global-set-key "M-s-<backspace>" 'helm-selector-cider-other-window))
("geiser"
(autoload 'helm-geiser-repl-switch "init-scheme")
(exwm-input-set-key (kbd "s-<backspace>") 'helm-selector-geiser)
(exwm-input-set-key (kbd "M-s-<backspace>") 'helm-selector-geiser-other-window))
(ambrevar/exwm-global-set-key "s-<backspace>" 'helm-selector-geiser)
(ambrevar/exwm-global-set-key "M-s-<backspace>" 'helm-selector-geiser-other-window))
("slime"
(exwm-input-set-key (kbd "s-<backspace>") 'helm-selector-slime)
(exwm-input-set-key (kbd "M-s-<backspace>") 'helm-selector-slime-other-window))
(ambrevar/exwm-global-set-key "s-<backspace>" 'helm-selector-slime)
(ambrevar/exwm-global-set-key "M-s-<backspace>" 'helm-selector-slime-other-window))
("sly"
(exwm-input-set-key (kbd "s-<backspace>") 'helm-selector-sly)
(exwm-input-set-key (kbd "<M-s-backspace>") 'helm-selector-sly-other-window))
(ambrevar/exwm-global-set-key "s-<backspace>" 'helm-selector-sly)
(ambrevar/exwm-global-set-key "<M-s-backspace>" 'helm-selector-sly-other-window))
("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)
;;; External application shortcuts.
@ -170,8 +171,8 @@
"M-d" 'helm-buffer-run-kill-persistent
"S-<return>" 'helm-buffer-switch-other-window)
;; Web browser
(exwm-input-set-key (kbd "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)
(ambrevar/exwm-global-set-key "s-W" #'helm-exwm-switch-browser-other-window))
(when (require 'desktop-environment nil 'noerror)
;; REVIEW: Remove the override on next version release: