7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

EmacsのFunction key設定を公開

Last updated at Posted at 2019-09-03

あまり役に立つTipsではありませんが、自分の設定を公開します。みなさんの「私の場合は…」というのを教えていただけると嬉しいです。

F1:help-command

F1は、Deaultでいろんなhelp-commadへのprifixとして設定されているのでそのまま使います。which-key.el を導入することで各コマンドのガイドがミニバファーに表示されるので便利です。
Alt Text

(use-package which-key)
(add-hook 'after-init-hook #'which-key-mode)

F2:hydra-compile

一般的には此処に、M-x compileを割り当てている人が多いと思います。私はいろんな作業をmakefaileで自動化しているので目的に応じてコマンドを使い分けられるようにhydraでメニュー設定しています。

Alt Text

(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

ごくたまに perlruby などのミニスクリプトを自作することもあるのでquickrunで簡単に試運転できるようにしています。

(use-package quickrun)
(bind-key [f5] 'quickrun)

F6:counsel commands

多機能なcounselのコマンド群をキーバインドしてもとても覚えきれませんね。
よく使う主要コマンドだけキーバインドし、あとはF6を叩くとcounsel-M-xが勝手に絞り込んでくれるので必要なコマンドをセレクトできます。
Alt Text

(bind-key [f6] (lambda ()
		   (interactive)
		   (counsel-M-x "^counsel ")))

F7:calendar

リタイアしてからは、EmacsでのGTDはやめてしまいましたが、作業中にカレンダーをチラ見したいときもあります。Calfwまでは必要ないので標準機能のcalendarを使っています。F7を押すことで、表示/非表示をトグルします。

Alt Text

(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してます。

Alt Text

(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

定番の設定ですね。

Alt Text

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)))
7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?