303 lines
9.8 KiB
Plaintext
303 lines
9.8 KiB
Plaintext
(require 'package)
|
|
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
|
|
(package-initialize)
|
|
|
|
(defun setup-vi-keys-for-splits (mode-map)
|
|
; https://www.gnu.org/software/emacs/manual/html_node/elisp/Conditionals.html
|
|
(unless (eq 'mode-map 'eww-mode-map)
|
|
(define-key mode-map (kbd "C-w H") 'evil-window-move-far-left)
|
|
(define-key mode-map (kbd "C-w L") 'evil-window-move-far-right))
|
|
(define-key mode-map (kbd "C-w K") 'evil-window-move-very-top)
|
|
(define-key mode-map (kbd "C-w J") 'evil-window-move-very-bottom)
|
|
|
|
(define-key mode-map (kbd "C-w v") 'evil-window-vsplit)
|
|
(define-key mode-map (kbd "C-w s") 'evil-window-split)
|
|
(define-key mode-map (kbd "C-w w") 'evil-window-next)
|
|
|
|
(define-key mode-map (kbd "C-w k") 'evil-window-up)
|
|
(define-key mode-map (kbd "C-w h") 'evil-window-left)
|
|
(define-key mode-map (kbd "C-w l") 'evil-window-right)
|
|
(define-key mode-map (kbd "C-w j") 'evil-window-down)
|
|
|
|
(define-key mode-map (kbd "C-w <") 'evil-window-decrease-width)
|
|
(define-key mode-map (kbd "C-w >") 'evil-window-increase-width)
|
|
(define-key mode-map (kbd "C-w -") 'evil-window-decrease-height)
|
|
(define-key mode-map (kbd "C-w +") 'evil-window-increase-height)
|
|
(define-key mode-map (kbd "C-w =") 'balance-windows)
|
|
(define-key mode-map (kbd "C-w |") 'evil-window-set-width))
|
|
|
|
;;; General
|
|
;
|
|
;; Don't show welcome screen every time
|
|
(setq inhibit-startup-screen t)
|
|
;
|
|
;; Turn off 'bell sounds'
|
|
; https://emacs.stackexchange.com/questions/28906/how-to-switch-off-the-sounds
|
|
(setq ring-bell-function 'ignore)
|
|
;
|
|
;; Enable word wrap
|
|
;(setq-default word-wrap t)
|
|
;
|
|
;; Set default evil-mode state
|
|
(setq evil-default-state 'normal)
|
|
;
|
|
;; Wrap long lines
|
|
; https://www.gnu.org/software/emacs/manual/html_node/emacs/Visual-Line-Mode.html
|
|
; http://ergoemacs.org/emacs/emacs_long_line_wrap.html
|
|
(global-visual-line-mode 1)
|
|
;
|
|
;; Make pdfs continuous in doc-view
|
|
; C-n and C-p gives continuous scrolling anyway?
|
|
;(setq doc-view-continuous t)
|
|
;
|
|
;; Stop crashing when loading Kannada text files in older emacs
|
|
;(push "Noto Serif Kannada" face-ignored-fonts)
|
|
;
|
|
;; Split vertically by default instead of horizontally
|
|
; https://www.gnu.org/software/emacs/manual/html_node/elisp/Choosing-Window-Options.html
|
|
; https://stackoverflow.com/questions/2081577/setting-emacs-to-split-buffers-side-by-side
|
|
;(setq split-height-threshold nil)
|
|
;(setq split-width-threshold 0)
|
|
;
|
|
;; Scroll buffer without moving cursor
|
|
; https://www.emacswiki.org/emacs/Scrolling#h5o-2
|
|
(defun gcm-scroll-down ()
|
|
(interactive)
|
|
(scroll-up 1))
|
|
;
|
|
(defun gcm-scroll-up ()
|
|
(interactive)
|
|
(scroll-down 1))
|
|
;
|
|
; C-Down scroll down without moving cursor
|
|
(global-set-key [(control down)] 'gcm-scroll-down)
|
|
;
|
|
; C-Up scroll up without moving cursor
|
|
(global-set-key [(control up)] 'gcm-scroll-up)
|
|
;
|
|
;; Zooming
|
|
; https://stackoverflow.com/questions/5533110/emacs-zoom-in-zoom-out
|
|
;
|
|
; zoom in with mouse scroll up
|
|
(global-set-key [C-mouse-4] 'text-scale-increase)
|
|
;
|
|
; zoom out with mouse scroll down
|
|
(global-set-key [C-mouse-5] 'text-scale-decrease)
|
|
;
|
|
;; Show emacs startup time
|
|
(add-hook 'emacs-startup-hook
|
|
(lambda ()
|
|
(message (format "Emacs started in %s" (emacs-init-time)))))
|
|
;
|
|
;; Disable automatic indentation
|
|
(setq electric-indent-mode nil)
|
|
;
|
|
;; Display current column
|
|
; https://www.gnu.org/software/emacs/manual/html_node/efaq/Displaying-the-current-line-or-column.html
|
|
(setq column-number-mode t)
|
|
;
|
|
;; Set default encoding as UTF-8
|
|
(set-terminal-coding-system 'utf-8)
|
|
(set-keyboard-coding-system 'utf-8)
|
|
(set-selection-coding-system 'utf-8)
|
|
(setq locale-coding-system 'utf-8)
|
|
(prefer-coding-system 'utf-8)
|
|
|
|
|
|
|
|
;;; Evil mode
|
|
; https://www.emacswiki.org/emacs/Evil
|
|
;
|
|
;; Activate evil mode
|
|
(require 'evil)
|
|
(evil-mode t)
|
|
;
|
|
;; Make :q not quit entire emacs and just try to delete current split
|
|
(evil-ex-define-cmd "q[uit]" 'evil-window-delete )
|
|
;
|
|
;; Shortcuts to go back/forth between current buffers
|
|
(evil-global-set-key 'normal (kbd "gt") 'next-buffer)
|
|
(evil-global-set-key 'normal (kbd "gT") 'previous-buffer)
|
|
;
|
|
;; Shortcut to switch to last buffer
|
|
(evil-global-set-key 'normal (kbd "gl") 'evil-buffer)
|
|
;
|
|
;; Vim digraphs
|
|
(load-file "~/.config/emacs/digraphs.el")
|
|
|
|
|
|
;; Themes
|
|
; https://github.com/bbatsov/zenburn-emacs
|
|
;(add-to-list 'custom-theme-load-path "~/.emacs.d/themes/")
|
|
;(load-theme 'gruvbox t)
|
|
|
|
;;; Org mode
|
|
;
|
|
;; Enable org mode
|
|
(org-mode)
|
|
;
|
|
;; Don't split line when doing M-RET at an item to make new item
|
|
; https://irreal.org/blog/?p=6297
|
|
(setq org-M-RET-may-split-line '((default . nil)))
|
|
;(setq org-M-RET-may-split-line nil)
|
|
;
|
|
;; States
|
|
; https://orgmode.org/manual/Workflow-states.html
|
|
;
|
|
; org-mode needs to be restarted after changing this variable
|
|
;
|
|
; TODO: To be done
|
|
; DONE: Completed
|
|
; NODO: Can't be done or not going to be done anymore
|
|
;
|
|
; and maybe the following as well:
|
|
; DING: Doing. In-progress. Useful for events that span multiple days
|
|
; POST: Postponed
|
|
(setq org-todo-keywords
|
|
'((sequence "TODO" "|" "DONE" "NODO")))
|
|
;
|
|
;; Set the colours of the state names
|
|
; https://orgmode.org/manual/Faces-for-TODO-keywords.html
|
|
(setq org-todo-keyword-faces
|
|
'(("NODO" . "dark red")))
|
|
;
|
|
;; Save clock history across Emacs sessions
|
|
; https://orgmode.org/manual/Clocking-Work-Time.html
|
|
(setq org-clock-persist 'history)
|
|
(org-clock-persistence-insinuate)
|
|
;
|
|
;; org-agenda
|
|
; https://stackoverflow.com/questions/44094125/org-mode-c-c-a-undefined/44096106
|
|
(define-key global-map "\C-ca" 'org-agenda)
|
|
;
|
|
;; Have a couple of vi-like keys in agenda view
|
|
; https://lists.gnu.org/archive/html/emacs-orgmode/2013-04/msg01119.html
|
|
; https://gist.github.com/amirrajan/301e74dc844a4c9ffc3830dc4268f177
|
|
(with-eval-after-load 'org-agenda
|
|
; Cursor movement
|
|
;(define-key org-agenda-mode-map "j" 'evil-next-line)
|
|
;(define-key org-agenda-mode-map "k" 'evil-previous-line))
|
|
(define-key org-agenda-mode-map "j" 'org-agenda-next-line)
|
|
(define-key org-agenda-mode-map "k" 'org-agenda-previous-line)
|
|
|
|
; Scrolling
|
|
(define-key org-agenda-mode-map (kbd "C-f") 'evil-scroll-page-down)
|
|
(define-key org-agenda-mode-map (kbd "C-b") 'evil-scroll-page-up)
|
|
;(define-key org-agenda-mode-map (kbd "C-b") 'org-agenda-show-scroll-down)
|
|
(define-key org-agenda-mode-map (kbd "C-e") 'evil-scroll-line-down)
|
|
(define-key org-agenda-mode-map (kbd "C-y") 'evil-scroll-line-up)
|
|
|
|
; Misc
|
|
(define-key org-agenda-mode-map (kbd "C-c C-g") 'org-agenda-redo-all)
|
|
; (define-key org-agenda-mode-map (kbd "g g") 'evil-goto-first-line)
|
|
; (define-key org-agenda-mode-map (kbd "g l") 'evil-buffer)
|
|
|
|
(define-key org-agenda-mode-map (kbd "h") 'evil-backward-char)
|
|
(define-key org-agenda-mode-map (kbd "C-c C-l") 'org-agenda-holidays)
|
|
|
|
(define-key org-agenda-mode-map (kbd "l") 'evil-forward-char)
|
|
(define-key org-agenda-mode-map (kbd "C-c C-l") 'org-agenda-log-mode)
|
|
|
|
(setup-vi-keys-for-splits org-agenda-mode-map))
|
|
;
|
|
;; vi keys for docview
|
|
; https://github.com/emacs-evil/evil-collection
|
|
; https://emacs.stackexchange.com/questions/7540/doc-view-mode-hook
|
|
(with-eval-after-load 'doc-view
|
|
(define-key doc-view-mode-map "j" 'doc-view-next-line-or-next-page)
|
|
(define-key doc-view-mode-map "k" 'doc-view-previous-line-or-previous-page)
|
|
(define-key doc-view-mode-map "l" 'image-forward-hscroll)
|
|
(define-key doc-view-mode-map "h" 'image-backward-hscroll)
|
|
(define-key doc-view-mode-map (kbd "C-f") 'image-scroll-up)
|
|
(define-key doc-view-mode-map (kbd "C-b") 'image-scroll-down)
|
|
(define-key doc-view-mode-map "J" 'doc-view-next-page)
|
|
(define-key doc-view-mode-map "K" 'doc-view-previous-page)
|
|
(define-key doc-view-mode-map (kbd "C-c C-k") 'doc-view-kill-proc)
|
|
|
|
(setup-vi-keys-for-splits doc-view-mode-map))
|
|
|
|
|
|
;
|
|
;; Set agenda files for org-agenda
|
|
(setq org-agenda-files (quote ("~/today/agenda.org" "~/org.org")))
|
|
;
|
|
;; Open pdf in external pdf-viewer
|
|
; https://emacs.stackexchange.com/questions/28037/org-mode-file-hyperlinks-always-use-doc-view-cant-force-it-to-use-external-pdf
|
|
; Now C-c C-o will open evince and C-u C-u C-c C-o will open docview
|
|
(add-to-list 'org-file-apps '("pdf" . "zathura %s"))
|
|
|
|
|
|
;;; Added with Custom
|
|
; Proof general: Change colour of highlighting for executed part (light green)
|
|
(custom-set-faces
|
|
'(proof-locked-face ((t (:extend t :background "#bcffbd")))))
|
|
|
|
|
|
;;; Proof-general mode
|
|
;
|
|
;; Show goal and in vertical splits
|
|
(eval-after-load "proof-script"
|
|
'(setq proof-three-window-mode-policy 'hybrid))
|
|
|
|
|
|
;;; tab-bar
|
|
; https://www.emacswiki.org/emacs/TabBarMode
|
|
; https://github.com/noctuid/evil-guide
|
|
; https://stackoverflow.com/a/7790759
|
|
(when (require 'tab-bar nil 'noerror)
|
|
(setq tab-bar-show 1) ; hide tab bar when there's only one tab
|
|
(evil-ex-define-cmd "tabc[lose]" 'tab-bar-close-tab)
|
|
(evil-ex-define-cmd "tabon[ly]" 'tab-bar-close-other-tabs))
|
|
|
|
|
|
; (defun get-buffer-contents (buffer)
|
|
; (with-current-buffer buffer
|
|
; (save-restriction
|
|
; (widen)
|
|
; (buffer-substring-no-properties (point-min) (point-max)))))
|
|
;
|
|
; (defun coq-insert-output-as-comment (buffer description)
|
|
; ; can be bound to a key combination
|
|
; (interactive)
|
|
;
|
|
; ; save current cursor position
|
|
; (save-excursion
|
|
;
|
|
; ; go to end of current line
|
|
; (end-of-line)
|
|
;
|
|
; ; insert text
|
|
; (insert
|
|
; (concat
|
|
; "\n(*\n#+BEGIN_OUTPUT ("
|
|
; description
|
|
; ")\n\n"
|
|
; (get-buffer-contents buffer)
|
|
; "\n#+END_OUTPUT ("
|
|
; description
|
|
; ")\n*)\n"))))
|
|
;
|
|
;
|
|
; (eval-after-load "proof-script"
|
|
; '(progn
|
|
; ; change key combination for undo previous line
|
|
; (define-key proof-mode-map
|
|
; (kbd "C- C-u") 'proof-prf)
|
|
;
|
|
; (define-key proof-mode-map
|
|
; (kbd "C- C-p") 'proof-undo-last-successful-command)
|
|
;
|
|
; ; Add key combinations to display Info and Goal
|
|
; (define-key proof-mode-map
|
|
; (kbd "C-c i")
|
|
; (lambda ()
|
|
; (interactive)
|
|
; (coq-insert-output-as-comment "*response*" "Info")))
|
|
;
|
|
; (define-key proof-mode-map
|
|
; (kbd "C-c j")
|
|
; (lambda ()
|
|
; (interactive)
|
|
; (coq-insert-output-as-comment "*goals*" "Goal")))
|
|
; ))
|