** Flyspell π
#+BEGIN_SRC emacs-lisp
(use-package flyspell
- :delight flyspell-mode π
+ ; :delight flyspell-mode π
:config
+ (setq flyspell-mode-line-string " π")
(add-hook 'text-mode-hook 'turn-on-flyspell)
(add-hook 'c-mode-common-hook 'flyspell-prog-mode)
(add-hook 'cperl-mode-hook 'flyspell-prog-mode)
:init
(setq ispell-program-name "ispell")
)
-
#+END_SRC
** Flycheck
; (setq-local completion-at-point-functions (list (cape-capf-buster #'lsp-completion-at-point)))
:hook (python-mode . lsp-deferred)
+ (cperl-mode . lsp-deferred)
(lsp-completion-mode . my/lsp-mode-setup-completion)
:custom
(lsp-completion-provider :none) ;; we use Corfu!
+ :config
+ (add-to-list 'lsp-file-watch-ignored-directories "[/\\\\]venv\\'")
)
-;; Provides visual help in the buffer
-;; For example definitions on hover.
-;; The `imenu` lets me browse definitions quickly.
+#+END_SRC
+** LSP mode
+#+BEGIN_SRC emacs-lisp
+;; provides visual help in the buffer
+;; for example definitions on hover.
+;; the `imenu` lets me browse definitions quickly.
(use-package lsp-ui
:defer t
+ :after lsp-mode
:config
- (setq lsp-ui-sideline-enable nil
+ (setq lsp-ui-sideline-enable t
lsp-ui-doc-delay 2)
:hook (lsp-mode . lsp-ui-mode)
:bind (:map lsp-ui-mode-map
("C-c i" . lsp-ui-imenu)))
-;; Language server for Python
-;; Read the docs for the different variables set in the config.
+#+END_SRC
+*** LSP Pyright -- Python language server
+#+BEGIN_SRC emacs-lisp
+;; language server for python
+;; read the docs for the different variables set in the config.
(use-package lsp-pyright
:defer t
:config
** Corfu
#+BEGIN_SRC emacs-lisp
(use-package corfu
- :ensure t
- :demand t
;; Optional customizations
:custom
(corfu-cycle t) ;; Enable cycling for `corfu-next/previous'
(corfu-auto t) ;; Enable auto completion
(corfu-separator ?\s) ;; Orderless field separator
- (corfu-quit-at-boundary nil) ;; Never quit at completion boundary
- (corfu-quit-no-match nil) ;; Never quit, even if there is no match
+ (corfu-quit-at-boundary t)
+ (corfu-quit-no-match 'separator)
(corfu-preview-current nil) ;; Disable current candidate preview
(corfu-preselect 'prompt) ;; Preselect the prompt
(corfu-on-exact-match nil) ;; Configure handling of exact matches
(corfu-scroll-margin 5) ;; Use scroll margin
+ :bind (
+ :map corfu-map
+ ("M-m" . corfu-move-to-minibuffer)
+ )
+ :init
+ (global-corfu-mode)
+ (setq completion-cycle-threshold 3)
+ (setq tab-always-indent 'complete)
:config
- (global-corfu-mode))
+ (defun corfu-move-to-minibuffer ()
+ (interactive)
+ (when completion-in-region--data
+ (let ((completion-extra-properties corfu--extra)
+ completion-cycle-threshold completion-cycling)
+ (apply #'consult-completion-in-region completion-in-region--data))))
+ (add-to-list 'corfu-continue-commands #'corfu-move-to-minibuffer)
+ )
#+END_SRC
** Dabbrv
#+BEGIN_SRC emacs-lisp
)
(use-package magit-annex
:defer t
+ :after magit
)
(use-package magit-vcsh
:defer t
+ :after magit
)
#+END_SRC
*** Forge (github/gitlab)
#+BEGIN_SRC emacs-lisp
(use-package forge
+ :defer t
:after magit
)
#+END_SRC
** Perl
#+BEGIN_SRC emacs-lisp
(use-package cperl-mode
+ :mode ("\\.pl'" . cperl-mode)
+ ("\\.perl5\\'" . cperl-mode)
+ ("\\.perl\\'" . cperl-mode)
+ ("\\.miniperl\\'" . cperl-mode)
+ ("\\.\\([Pp][Llm]\\|al\\)\\'" . cperl-mode)
+ ;; use c-mode for perl .xs files
+ ("\\.xs\\'" . c-mode)
:config
- (progn
- ;; Use c-mode for perl .xs files
- (add-to-list 'auto-mode-alist '("\\.xs\\'" . c-mode))
- (add-to-list 'auto-mode-alist '("\\.\\([pP][Llm]\\|al\\)\\'" . cperl-mode))
- (add-to-list 'interpreter-mode-alist '("perl" . cperl-mode))
- (add-to-list 'interpreter-mode-alist '("perl5" . cperl-mode))
- (add-to-list 'interpreter-mode-alist '("miniperl" . cperl-mode))
- (setq cperl-hairy t
+ (setq cperl-hairy t
cperl-indent-level 4
cperl-auto-newline nil
cperl-auto-newline-after-colon nil
cperl-tab-always-indent t)
(setq cperl-lazy-help-time nil)
;;(add-hook 'cperl-mode-hook (lambda () (cperl-set-style "PerlStyle")))
-))
+)
#+END_SRC
** Markdown mode
#+BEGIN_SRC emacs-lisp
(use-package markdown-mode
- :ensure t
:defer t
:mode (("\\.md\\'" . markdown-mode)
("\\.mdwn\\'" . markdown-mode)
#+BEGIN_SRC emacs-lisp
; load sql-indent when sql is loaded
(use-package sql-indent
+ :after sql
:hook sql-mode
)
(use-package sql
+ :commands (sql-mode)
:mode (("\\.sql\\'" . sql-mode))
)
#+END_SRC
** Orderless: advanced completion style
#+begin_src emacs-lisp
(use-package orderless
- :demand t
- :config
+ :init
;; Configure a custom style dispatcher (see the Consult wiki)
;; (setq orderless-style-dispatchers '(+orderless-dispatch)
;; orderless-component-separator #'orderless-escapable-split-on-space)
:hook
(embark-collect-mode . consult-preview-at-point-mode))
#+end_src
+** which-key (show possible completions of a key combination)
+#+BEGIN_SRC emacs-lisp
+(use-package which-key
+ :demand t
+ )
+#+END_SRC
** Consult
#+begin_src emacs-lisp
(use-package consult
** Reftex
#+BEGIN_SRC emacs-lisp
(use-package reftex
+ :hook ((LaTeX-mode latex-mode) . reftex-mode)
:config
(setq-default reftex-default-bibliography
- '("~/projects/research/references.bib")))
+ '("~/projects/research/references.bib"))
+ (setq-default reftex-plug-into-AUCTeX t)
+ )
#+END_SRC
** BibTex
#+BEGIN_SRC emacs-lisp
(use-package bibtex
+ :mode "\\.bib\\'"
:config (setq bibtex-user-optional-fields
(quote (("annote" "Personal annotation (ignored)")
("abstract" "")
#+END_SRC
** LaTeX
#+BEGIN_SRC emacs-lisp
-(use-package tex-site
+(use-package tex
:straight auctex
:mode ("\\.tex\\'" . LaTeX-mode)
- :mode ("\\.bib\\'" . bibtex-mode)
:config
; (add-to-list 'TeX-style-path '"/home/don/lib/emacs_el/auctex/style")
- ;; REFTEX (much enhanced management of cross-ref, labels, etc)
- ;; http://www.strw.leidenuniv.nl/~dominik/Tools/reftex/
- ; (autoload 'reftex-mode "reftex" "RefTeX Minor Mode" t)
- ; (autoload 'turn-on-reftex "reftex" "RefTeX Minor Mode" nil)
- ; (autoload 'reftex-citation "reftex-cite" "Make citation" nil)
- ; (autoload 'reftex-index-phrase-mode "reftex-index" "Phrase mode" t)
- (add-hook 'LaTeX-mode-hook 'turn-on-reftex) ; with AUCTeX LaTeX mode
- (add-hook 'latex-mode-hook 'turn-on-reftex) ; with Emacs latex mode
(add-hook 'LaTeX-mode-hook 'outline-minor-mode) ; with AUCTeX LaTeX mode
(add-hook 'latex-mode-hook 'outline-minor-mode) ; with Emacs latex mode
- (setq-default reftex-plug-into-AUCTeX t)
;; support fake section headers
(setq TeX-outline-extra
'(("%chapter" 1)
#+BEGIN_SRC emacs-lisp
(use-package rainbow-mode
+ :hook ((LaTeX-mode ess-mode python-mode cperl-mode) . rainbow-mode)
+ :delight π
;; add ess to the x major mode
:config (add-to-list 'rainbow-x-colors-major-mode-list 'ESS[S])
(add-to-list 'rainbow-x-colors-major-mode-list 'ESS[R])
:mode ("\\.Rmd" . poly-markdown+r-mode)
)
(use-package polymode
+ :defer t
)
#+END_SRC
:straight nil
:delight
:init
- (setq outline-minor-mode-prefix "C-c C-2")
+ ; (setq outline-minor-mode-prefix nil)
+ :config
+ (define-prefix-command 'cm-map nil "Outline-")
+ (global-set-key "\M-o" cm-map)
+ ; Outline-minor-mode key map
+; HIDE
+(define-key cm-map "q" 'outline-hide-sublevels) ; Hide everything but the top-level headings
+(define-key cm-map "t" 'outline-hide-body) ; Hide everything but headings (all body lines)
+(define-key cm-map "o" 'outline-hide-other) ; Hide other branches
+(define-key cm-map "c" 'outline-hide-entry) ; Hide this entry's body
+(define-key cm-map "l" 'outline-hide-leaves) ; Hide body lines in this entry and sub-entries
+(define-key cm-map "d" 'outline-hide-subtree) ; Hide everything in this entry and sub-entries
+; SHOW
+(define-key cm-map "a" 'outline-show-all) ; Show (expand) everything
+(define-key cm-map "e" 'outline-show-entry) ; Show this heading's body
+(define-key cm-map "i" 'outline-show-children) ; Show this heading's immediate child sub-headings
+(define-key cm-map "k" 'outline-show-branches) ; Show all sub-headings under this heading
+(define-key cm-map "s" 'outline-show-subtree) ; Show (expand) everything in this heading & below
+; MOVE
+(define-key cm-map "u" 'outline-up-heading) ; Up
+(define-key cm-map "n" 'outline-next-visible-heading) ; Next
+(define-key cm-map "p" 'outline-previous-visible-heading) ; Previous
+(define-key cm-map "f" 'outline-forward-same-level) ; Forward - same level
+(define-key cm-map "b" 'outline-backward-same-level) ; Backward - same level
+
)
#+END_SRC
*** outshine (outlining) integration
#+BEGIN_SRC emacs-lisp
-(use-package outshine
- :after outline
- :hook (outline-minor-mode . outshine-mode)
-)
+; (use-package outshine
+; :after outline
+; :hook (outline-minor-mode . outshine-mode)
+; )
#+END_SRC
** Writeroom Mode
#+BEGIN_SRC emacs-lisp
(use-package writeroom-mode
+ :commands (writeroom-mode)
:config
(defun my/writing-mode ()
"Start my writing mode; enable visual-line-mode and auto-fill-mode"
(use-package python-mode
:delight Py π
:hook
- (python-mode . pyenv-mode)
+ (python-mode . pyvenv-mode)
(python-mode . flycheck-mode)
(python-mode . blacken-mode)
(python-mode . yas-minor-mode)
(python-mode . anaconda-mode)
)
-(use-package pyenv-mode
+(use-package pyvenv
+ :delight
:after python-mode
)
(use-package blacken
- :delight β
+ :delight
:after python-mode
+ :commands (blacken-buffer)
:config
(setq-default blacken-fast-unsafe t)
)
*** Black
#+begin_src emacs-lisp :tangle yes
(use-package python-black
- :demand t
+ :delight
+ :commands (python-black-buffer python-black-statement)
:after python)
#+end_src
*** Sphinx Documentation
:bind (:map python-mode-map
("C-c C-n" . numpydoc-generate)))
(use-package sphinx-doc
+ :delight π
:config
- (sphinx-doc-mode t)
(setq sphinx-doc-include-types t)
:after python
- :hook (python-mode . sphinx-doc)
+ :hook (python-mode . sphinx-doc-mode)
)
(use-package python-docstring
:delight
:hook (python-mode . python-docstring-mode)
)
#+end_src
+*** Anaconda Mode (Documentation lookup and completion)
+#+BEGIN_SRC emacs-lisp
+(use-package anaconda-mode
+ :delight
+ :after python
+)
+#+END_SRC
** Go language
#+BEGIN_SRC emacs-lisp
(use-package go-mode
** Beancount
#+BEGIN_SRC emacs-lisp
(use-package beancount
- :straight nil
+ :straight (beancount
+ :type git
+ :host github
+ :repo "cnsunyour/beancount.el")
:load-path "~/lib/emacs_el/beancount-mode/"
- :mode "\\.beancount\\'"
+ :mode "\\.bean\\(?:count\\)?\\'"
)
#+END_SRC
:mode "apache\\.conf\\'"
)
#+END_SRC
+** ELDoc
+#+BEGIN_SRC emacs-lisp
+(use-package eldoc
+ :delight
+ :commands eldoc-mode
+ :straight nil
+ )
+#+END_SRC
+
* Email
** Mutt
*** Message-mode
(use-package mutt-mode
:mode "muttngrc"
:mode "muttrc"
+ :config
+ (setq mutt-alias-file-list (quote ("~/.mutt/aliases" "~/.mail_aliases")))
)
#+END_SRC
*** Set mail User agent
#+BEGIN_SRC emacs-lisp
(setq mail-user-agent (quote sendmail-user-agent))
#+END_SRC
-*** Mail aliases
-#+BEGIN_SRC emacs-lisp
-; (use-package
-; :straight t
-; :hook message
-; :config
-; (setq mutt-alias-file-list (quote ("~/.mutt/aliases" "~/.mail_aliases")))
-; )
-#+END_SRC
* Base emacs
** Reverting buffers
#+BEGIN_SRC emacs-lisp
(use-package autorevert
:delight auto-revert-mode
+ :demand t
:config
(setq global-auto-revert-non-file-buffers t
global-auto-revert-ignore-modes '(pdf-view-mode)
(use-package org
:delight (org-mode "ΓΈ")
:mode ("\\.\\(org\\|org_archive\\|txt\\)\\'" . org-mode)
- :bind (("C-c l" . org-store-link)
+ :bind (("C-c l l" . org-store-link)
("C-c a" . org-agenda)
("C-c b" . org-iswitchb))
#+END_SRC
#+END_SRC
** appt integration
#+BEGIN_SRC emacs-lisp
- (use-package appt
- :ensure f
- :config
- ;; Show notification 10 minutes before event
- (setq appt-message-warning-time 10)
- ;; Disable multiple reminders
- (setq appt-display-interval appt-message-warning-time)
- (setq appt-display-mode-line nil)
-
- ;; add automatic reminders for appointments
- (defun my/org-agenda-to-appt ()
- (interactive)
- (setq appt-time-msg-list nil)
- (org-agenda-to-appt))
- ;; add reminders when starting emacs
+(use-package appt
+ :straight nil
+ :config
+ ;; Show notification 10 minutes before event
+ (setq appt-message-warning-time 10)
+ ;; Disable multiple reminders
+ (setq appt-display-interval appt-message-warning-time)
+ (setq appt-display-mode-line nil)
+
+ ;; add automatic reminders for appointments
+ (defun my/org-agenda-to-appt ()
+ (interactive)
+ (setq appt-time-msg-list nil)
+ (org-agenda-to-appt))
+ ;; add reminders when starting emacs
+ (my/org-agenda-to-appt)
+ ;; when rebuilding the agenda
+ (defadvice org-agenda-redo (after org-agenda-redo-add-appts)
+ "Pressing `r' on the agenda will also add appointments."
(my/org-agenda-to-appt)
- ;; when rebuilding the agenda
- (defadvice org-agenda-redo (after org-agenda-redo-add-appts)
- "Pressing `r' on the agenda will also add appointments."
- (my/org-agenda-to-appt)
- )
- ;; when saving all org buffers
- (defadvice org-save-all-org-buffers (after org-save-all-org-buffers-add-appts)
- "Re-add appts after saving all org buffers"
- (my/org-agenda-to-appt))
- ;; Display appointments as a window manager notification
- (setq appt-disp-window-function 'my/appt-display)
- (setq appt-delete-window-function (lambda () t))
-
- (setq my/appt-notification-app (concat (getenv "HOME") "/bin/appt_notification"))
-
- (defun my/appt-display (min-to-app new-time msg)
- (if (atom min-to-app)
- (start-process "my/appt-notification-app" nil my/appt-notification-app min-to-app msg)
- (dolist (i (number-sequence 0 (1- (length min-to-app))))
- (start-process "my/appt-notification-app" nil my/appt-notification-app
- (nth i min-to-app) (nth i msg))))
- )
)
+ ;; when saving all org buffers
+ (defadvice org-save-all-org-buffers (after org-save-all-org-buffers-add-appts)
+ "Re-add appts after saving all org buffers"
+ (my/org-agenda-to-appt))
+ ;; Display appointments as a window manager notification
+ (setq appt-disp-window-function 'my/appt-display)
+ (setq appt-delete-window-function (lambda () t))
+
+ (setq my/appt-notification-app (concat (getenv "HOME") "/bin/appt_notification"))
+
+ (defun my/appt-display (min-to-app new-time msg)
+ (if (atom min-to-app)
+ (start-process "my/appt-notification-app" nil my/appt-notification-app min-to-app msg)
+ (dolist (i (number-sequence 0 (1- (length min-to-app))))
+ (start-process "my/appt-notification-app" nil my/appt-notification-app
+ (nth i min-to-app) (nth i msg))))
+ )
+ )
#+END_SRC
(put 'downcase-region 'disabled nil)
(put 'narrow-to-region 'disabled nil)
-; Outline-minor-mode key map
-(define-prefix-command 'cm-map nil "Outline-")
-; HIDE
-(define-key cm-map "q" 'outline-hide-sublevels) ; Hide everything but the top-level headings
-(define-key cm-map "t" 'outline-hide-body) ; Hide everything but headings (all body lines)
-(define-key cm-map "o" 'outline-hide-other) ; Hide other branches
-(define-key cm-map "c" 'outline-hide-entry) ; Hide this entry's body
-(define-key cm-map "l" 'outline-hide-leaves) ; Hide body lines in this entry and sub-entries
-(define-key cm-map "d" 'outline-hide-subtree) ; Hide everything in this entry and sub-entries
-; SHOW
-(define-key cm-map "a" 'outline-show-all) ; Show (expand) everything
-(define-key cm-map "e" 'outline-show-entry) ; Show this heading's body
-(define-key cm-map "i" 'outline-show-children) ; Show this heading's immediate child sub-headings
-(define-key cm-map "k" 'outline-show-branches) ; Show all sub-headings under this heading
-(define-key cm-map "s" 'outline-show-subtree) ; Show (expand) everything in this heading & below
-; MOVE
-(define-key cm-map "u" 'outline-up-heading) ; Up
-(define-key cm-map "n" 'outline-next-visible-heading) ; Next
-(define-key cm-map "p" 'outline-previous-visible-heading) ; Previous
-(define-key cm-map "f" 'outline-forward-same-level) ; Forward - same level
-(define-key cm-map "b" 'outline-backward-same-level) ; Backward - same level
-(global-set-key "\M-o" cm-map)
; fix up tmux xterm keys
; stolen from http://unix.stackexchange.com/questions/24414/shift-arrow-not-working-in-emacs-within-tmux
(defun fix-up-tmux-keys ()