あまり役に立つTipsではありませんが、自分の設定を公開します。みなさんの「私の場合は…」というのを教えていただけると嬉しいです。
F1:help-command
F1は、Deaultでいろんなhelp-commadへのprifixとして設定されているのでそのまま使います。which-key.el を導入することで各コマンドのガイドがミニバファーに表示されるので便利です。
(use-package which-key)
(add-hook 'after-init-hook #'which-key-mode)
F2:hydra-compile
一般的には此処に、M-x compile
を割り当てている人が多いと思います。私はいろんな作業をmakefaileで自動化しているので目的に応じてコマンドを使い分けられるようにhydraでメニュー設定しています。
(bind-key
[f2]
(defhydra hydra-compile (:color red :hint nil)
"
🗿 Compile: make _k_ _a_ll _u_pftp _m_ove _b_klog _g_it _c_lean 🐾 "
("k" my:make-k :exit t)
("a" my:make-all :exit t)
("u" my:make-upftp :exit t)
("m" my:make-move :exit t)
("g" my:make-git :exit t)
("b" my:make-bklog :exit t)
("c" my:make-clean)))
F3:term-current-dir-open
開いているbufferのカレントでシステムのterminalを開きます。また、Shift+F3でFilerを開きます。
(bind-key
[f3]
(defun term-current-dir-open ()
"Open terminal application in current dir."
(interactive)
(let ((dir default-directory))
(when (eq system-type 'darwin)
(shell-command (concat "open -a iterm.app " dir)))
(when (eq system-type 'gnu/linux)
(shell-command (concat "gnome-terminal --maximize " dir))))))
(bind-key
[S-f3]
(defun filer-current-dir-open ()
"Open filer in current dir."
(interactive)
(when (eq system-type 'darwin)
(shell-command "open ."))
(when (eq system-type 'gnu/linux)
(shell-command (concat "xdg-open " default-directory)))))
F4: goto-chg
テキストを編集していて前の編集した箇所に戻りたいときがよくあります。その際に便利なのがgoto-chg.elになります。
(use-package goto-chg
:bind
([f4] . goto-last-change)
([S-f4] . goto-last-change-reverse))
F5:quickrun
ごくたまに perl
や ruby
などのミニスクリプトを自作することもあるのでquickrunで簡単に試運転できるようにしています。
(use-package quickrun)
(bind-key [f5] 'quickrun)
F6:counsel commands
多機能なcounselのコマンド群をキーバインドしてもとても覚えきれませんね。
よく使う主要コマンドだけキーバインドし、あとはF6を叩くとcounsel-M-xが勝手に絞り込んでくれるので必要なコマンドをセレクトできます。
(bind-key [f6] (lambda ()
(interactive)
(counsel-M-x "^counsel ")))
F7:calendar
リタイアしてからは、EmacsでのGTDはやめてしまいましたが、作業中にカレンダーをチラ見したいときもあります。Calfwまでは必要ないので標準機能のcalendarを使っています。F7を押すことで、表示/非表示をトグルします。
(use-package calendar
:commands calendar
:bind (([f7] . calendar)
:map calendar-mode-map
("n" . calendar-forward-day)
("b" . calendar-backward-day)
([f7] . calendar-exit))
:config
(setq calendar-mark-holidays-flag t))
F8 : iconfy-or-deiconfy-frame
Emacsの非表示(最小化)/再表示をtoggleします。
;; Iconify-frame
(bind-key [f8] 'iconify-or-deiconify-frame)
F9:display-line-numbers-mode
linum-modeは重いので使ってなかったのですが、Emacs26以降になって動作の軽い display-line-numbers-mode
が使えるようになったので、F9でtoggleしています。
(add-hook 'prog-mode-hook 'display-line-numbers-mode)
(add-hook 'text-mode-hook 'display-line-numbers-mode)
(bind-key [f9] 'display-line-numbers-mode)
F10:dashboard
Emacsでの作業をリセットするときはdashboardに戻るようにしています。また戻るときにはdashboard bufferをRefreshしてます。
(use-package dashboard
:bind (([f10] . open-dashboard)
:map dashboard-mode-map
([f10] . quit-dashboard))
:hook
(after-init . dashboard-setup-startup-hook)
:config
(defun open-dashboard ()
"Open the *dashboard* buffer and jump to the first widget."
(interactive)
(delete-other-windows)
;; Refresh dashboard buffer
(if (get-buffer dashboard-buffer-name)
(kill-buffer dashboard-buffer-name))
(dashboard-insert-startupify-lists)
(switch-to-buffer dashboard-buffer-name)
;; Jump to the first section
(goto-char (point-min))
(dashboard-goto-recent-files))
(defun quit-dashboard ()
"Quit dashboard window."
(interactive)
(quit-window t)
(when (and dashboard-recover-layout-p
(bound-and-true-p winner-mode))
(winner-undo)
(setq dashboard-recover-layout-p nil)))
(defun dashboard-goto-recent-files ()
"Go to recent files."
(interactive)
(funcall (local-key-binding "r"))))
F11:neotree-toggle
定番の設定ですね。
F12:darkroom-mode
私のEmacsは文章書きがメインなのでDarkroom-modeをF12のtoggleで使っています。darkroom-modeで作業する時は、flycheck-mode
git-gutter-mode
display-line-numbers-mode
をそれぞれOFFにします。
(use-package darkroom
:bind (([f12] . my:darkroom-mode-in)
:map darkroom-mode-map
([f12] . my:darkroom-mode-out ))
:config
(defun my:darkroom-mode-in ()
"Darkroom mode in."
(interactive)
(display-line-numbers-mode 0)
(flycheck-mode 0)
(git-gutter-mode 0)
(darkroom-mode 1))
(defun my:darkroom-mode-out ()
"Darkroom mode out."
(interactive)
(darkroom-mode 0)
(git-gutter-mode 1)
(flycheck-mode 1)
(display-line-numbers-mode 1)))