1773 lines
59 KiB
EmacsLisp
1773 lines
59 KiB
EmacsLisp
(load-file (config-path "detect_os.el"))
|
|
(load-file "~/.emacs.d/variables.el")
|
|
|
|
;; MELPA
|
|
(add-to-list 'package-archives
|
|
'("melpa" . "https://melpa.org/packages/"))
|
|
|
|
(unless (package-installed-p 'use-package)
|
|
(package-refresh-contents)
|
|
(package-install 'use-package))
|
|
(require 'use-package)
|
|
(use-package use-package-ensure-system-package
|
|
:ensure t)
|
|
|
|
|
|
;; Color theme
|
|
;; disable background in terminal
|
|
(defun on-after-init ()
|
|
(unless (display-graphic-p (selected-frame))
|
|
(set-face-background 'default "unspecified-bg" (selected-frame))))
|
|
|
|
(add-hook 'window-setup-hook 'on-after-init)
|
|
|
|
(when (boundp 'enable-color-theme)
|
|
;; load solarized color theme
|
|
(use-package solarized-theme
|
|
:ensure t
|
|
:config
|
|
(setq solarized-use-variable-pitch nil)
|
|
(setq solarized-scale-org-headlines nil)
|
|
(setq solarized-high-contrast-mode-line t)
|
|
(set-face-inverse-video 'region nil)
|
|
(load-theme 'solarized-light t)))
|
|
|
|
;; smooth scrolling
|
|
(use-package smooth-scrolling
|
|
:ensure t
|
|
:config
|
|
(setq scroll-margin 1
|
|
scroll-conservatively 9999
|
|
scroll-step 1))
|
|
|
|
(use-package deft
|
|
:ensure t
|
|
:bind ("<f5>" . deft)
|
|
:commands (deft)
|
|
:config
|
|
(setq deft-extensions '("md")
|
|
deft-default-extension "md"
|
|
deft-markdown-mode-title-level 1
|
|
deft-auto-save-interval 300.0
|
|
deft-file-limit 50
|
|
deft-use-filename-as-title t
|
|
deft-use-filter-string-for-filename t
|
|
deft-recursive t)
|
|
(setq deft-file-naming-rules
|
|
'((noslash . "-")
|
|
(nospace . "_")
|
|
(case-fn . downcase)))
|
|
(setq deft-directory "~/nextcloud/10_documents/"))
|
|
|
|
(use-package zetteldeft
|
|
:ensure t
|
|
:after deft
|
|
:config (zetteldeft-set-classic-keybindings)
|
|
(setq zetteldeft-link-indicator "[["
|
|
zetteldeft-link-suffix "]]")
|
|
(setq zetteldeft-title-prefix "# "))
|
|
|
|
(use-package dash
|
|
:defer t
|
|
:ensure t)
|
|
|
|
(use-package swiper
|
|
:defer t
|
|
:ensure t)
|
|
|
|
(use-package s
|
|
:defer t
|
|
:ensure t)
|
|
|
|
(when (boundp 'enable-pdf-tools)
|
|
(use-package pdf-tools
|
|
:ensure t
|
|
:mode ("\\.pdf\\'" . pdf-view-mode)
|
|
:config
|
|
(pdf-tools-install)
|
|
(setq-default pdf-view-display-size 'fit-page)
|
|
;; turn off cua so copy works
|
|
(add-hook 'pdf-view-mode-hook (lambda () (cua-mode 0)))
|
|
;; keyboard shortcuts
|
|
(define-key pdf-view-mode-map (kbd "C-w C-w") 'other-window)
|
|
(define-key pdf-view-mode-map (kbd "j") 'pdf-view-next-page-command)
|
|
(define-key pdf-view-mode-map (kbd "k") 'pdf-view-previous-page-command)
|
|
(define-key pdf-view-mode-map (kbd "h") 'pdf-annot-add-highlight-markup-annotation)
|
|
(define-key pdf-view-mode-map (kbd "t") 'pdf-annot-add-text-annotation)
|
|
(define-key pdf-view-mode-map (kbd "D") 'pdf-annot-delete)
|
|
(add-hook 'TeX-after-compilation-finished-functions #'TeX-revert-document-buffer)))
|
|
|
|
(use-package treemacs
|
|
:ensure t
|
|
:bind ("<f12>" . treemacs)
|
|
:config
|
|
(progn
|
|
(use-package treemacs-evil
|
|
:ensure t
|
|
:demand t)))
|
|
|
|
;; enable yasnippet
|
|
(use-package yasnippet
|
|
:ensure t
|
|
:config
|
|
(yas-global-mode 1))
|
|
|
|
;; enable yasnippet
|
|
(use-package yasnippet-snippets
|
|
:ensure t
|
|
:after yasnippet
|
|
:config
|
|
(yas-global-mode 1))
|
|
|
|
;; which key is a package to show which keys can be pressed
|
|
(use-package which-key
|
|
:ensure t
|
|
:diminish which-key-mode
|
|
:config
|
|
(which-key-mode))
|
|
|
|
(use-package discover-my-major
|
|
:ensure t
|
|
:bind ("C-h C-m" . discover-my-major))
|
|
|
|
(when (boundp 'enable-langtool)
|
|
(use-package langtool
|
|
:ensure t))
|
|
|
|
(use-package hydra
|
|
:ensure t)
|
|
|
|
(defhydra hydra-buffer (:color red :columns 3)
|
|
"
|
|
Buffers :
|
|
"
|
|
("n" next-buffer "next")
|
|
("b" ivy-switch-buffer "switch")
|
|
("B" ibuffer "ibuffer")
|
|
("p" previous-buffer "prev")
|
|
("C-b" buffer-menu "buffer menu")
|
|
("N" evil-buffer-new "new")
|
|
("d" kill-this-buffer "delete")
|
|
;; don't come back to previous buffer after delete
|
|
("D" (progn (kill-this-buffer) (next-buffer)) "Delete")
|
|
("s" save-buffer "save"))
|
|
|
|
(defhydra hydra-window-operations (:color red :columns 3)
|
|
"
|
|
Windows :
|
|
"
|
|
("h" windmove-left "left")
|
|
("l" windmove-right "right")
|
|
("j" windmove-down "down")
|
|
("k" windmove-up "up")
|
|
("w" (lambda () (interactive) (other-window 1)) "Unkown")
|
|
("h" split-window-vertically "horizontal split")
|
|
("v" split-window-horizontally "vertical split")
|
|
("o" delete-other-windows "Delete all other")
|
|
("X" delete-window "Delete this")
|
|
("x" (lambda ()
|
|
(interactive)
|
|
(ace-window 16)
|
|
(add-hook 'ace-window-end-once-hook
|
|
'hydra-window/body)) "Unknown")
|
|
("z" (lambda ()
|
|
(interactive)
|
|
(ace-window 4)
|
|
(add-hook 'ace-window-end-once-hook
|
|
'hydra-window/body)) "Swap")
|
|
("=" balance-windows "Balance")
|
|
("K" kill-this-buffer "Kill Buffer")
|
|
("D" kill-all-dired-buffers "Kill all dired")
|
|
("a" ace-window "Ace")
|
|
("S" toggle-window-split "Toggle Split"))
|
|
|
|
;https://www.reddit.com/r/emacs/comments/931la6/tip_how_to_adopt_flycheck_as_your_new_best_friend/
|
|
(defhydra hydra-flycheck (:color blue)
|
|
"
|
|
^
|
|
^Flycheck^ ^Errors^ ^Checker^
|
|
^────────^──────────^──────^────────────^───────^─────
|
|
_q_ quit _<_ previous _?_ describe
|
|
_M_ manual _>_ next _d_ disable
|
|
_v_ verify setup _f_ check _m_ mode
|
|
^^ _l_ list _s_ select
|
|
^^ ^^ ^^
|
|
"
|
|
("q" nil)
|
|
("<" flycheck-previous-error :color pink)
|
|
(">" flycheck-next-error :color pink)
|
|
("?" flycheck-describe-checker)
|
|
("M" flycheck-manual)
|
|
("d" flycheck-disable-checker)
|
|
("f" flycheck-buffer)
|
|
("l" flycheck-list-errors)
|
|
("m" flycheck-mode)
|
|
("s" flycheck-select-checker)
|
|
("v" flycheck-verify-setup))
|
|
|
|
(defhydra hydra-ediff (:color blue :columns 3)
|
|
"
|
|
Ediff :
|
|
"
|
|
("b" ediff-buffers "buffers")
|
|
("B" ediff-buffers3 "buffers 3-way")
|
|
("f" ediff-files "files")
|
|
("F" ediff-files3 "files 3-way")
|
|
("c" ediff-current-file "current file")
|
|
("r" ediff-revision "revision")
|
|
("l" ediff-regions-linewise "linewise")
|
|
("w" ediff-regions-wordwise "wordwise"))
|
|
|
|
(defhydra hydra-yasnippet (:color blue :columns 3)
|
|
"
|
|
Yasnippet:
|
|
"
|
|
("d" yas-load-directory "directory")
|
|
("e" yas-activate-extra-mode "extra")
|
|
("i" yas-insert-snippet "insert")
|
|
("f" yas-visit-snippet-file "file")
|
|
("n" yas-new-snippet "new")
|
|
("t" yas-tryout-snippet "tryout")
|
|
("l" yas-describe-tables "list")
|
|
("a" yas-reload-all "reload"))
|
|
|
|
(defhydra hydra-apropos (:color blue :columns 3)
|
|
"Apropos"
|
|
("a" apropos "apropos")
|
|
("c" apropos-command "cmd")
|
|
("d" apropos-documentation "doc")
|
|
("e" apropos-value "val")
|
|
("l" apropos-library "lib")
|
|
("o" apropos-user-option "option")
|
|
("v" apropos-variable "var")
|
|
("i" info-apropos "info")
|
|
("t" tags-apropos "tags")
|
|
("z" hydra-customize-apropos/body "customize"))
|
|
|
|
(defhydra hydra-customize-apropos (:color blue :columns 3)
|
|
"Apropos (customize)"
|
|
("a" customize-apropos "apropos")
|
|
("f" customize-apropos-faces "faces")
|
|
("g" customize-apropos-groups "groups")
|
|
("o" customize-apropos-options "options"))
|
|
|
|
(define-key Info-mode-map (kbd "?") #'hydra-info/body)
|
|
(defhydra hydra-info (:color blue
|
|
:hint nil)
|
|
"
|
|
Info-mode:
|
|
|
|
^^_]_ forward (next logical node) ^^_l_ast (←) _u_p (↑) _f_ollow reference _T_OC
|
|
^^_[_ backward (prev logical node) ^^_r_eturn (→) _m_enu (↓) (C-u for new window) _i_ndex _d_irectory
|
|
^^_n_ext (same level only) ^^_H_istory _g_oto (C-u for new window) _,_ next index item _c_opy node name
|
|
^^_p_rev (same level only) _<_/_t_op _b_eginning of buffer virtual _I_ndex _C_lone buffer
|
|
regex _s_earch (_S_ case sensitive) ^^_>_ final _e_nd of buffer ^^ _a_propos
|
|
|
|
_1_ .. _9_ Pick first .. ninth item in the node's menu.
|
|
|
|
"
|
|
("]" Info-forward-node)
|
|
("[" Info-backward-node)
|
|
("n" Info-next)
|
|
("p" Info-prev)
|
|
("s" Info-search)
|
|
("S" Info-search-case-sensitively)
|
|
|
|
("l" Info-history-back)
|
|
("r" Info-history-forward)
|
|
("H" Info-history)
|
|
("t" Info-top-node)
|
|
("<" Info-top-node)
|
|
(">" Info-final-node)
|
|
|
|
("u" Info-up)
|
|
("^" Info-up)
|
|
("m" Info-menu)
|
|
("g" Info-goto-node)
|
|
("b" beginning-of-buffer)
|
|
("e" end-of-buffer)
|
|
|
|
("f" Info-follow-reference)
|
|
("i" Info-index)
|
|
("," Info-index-next)
|
|
("I" Info-virtual-index)
|
|
|
|
("T" Info-toc)
|
|
("d" Info-directory)
|
|
("c" Info-copy-current-node-name)
|
|
("C" clone-buffer)
|
|
("a" info-apropos)
|
|
|
|
("1" Info-nth-menu-item)
|
|
("2" Info-nth-menu-item)
|
|
("3" Info-nth-menu-item)
|
|
("4" Info-nth-menu-item)
|
|
("5" Info-nth-menu-item)
|
|
("6" Info-nth-menu-item)
|
|
("7" Info-nth-menu-item)
|
|
("8" Info-nth-menu-item)
|
|
("9" Info-nth-menu-item)
|
|
|
|
("?" Info-summary "Info summary")
|
|
("h" Info-help "Info help"))
|
|
|
|
(defhydra hydra-spellchecking (:color blue :columns 3)
|
|
"
|
|
Spell Checking
|
|
"
|
|
("g" langtool-check "Check grammar")
|
|
("q" langtool-check-done "Finish grammar check")
|
|
("l" langtool-switch-default-language "Switch grammar language")
|
|
("m" langtool-show-message-at-point "unkown")
|
|
("b" langtool-correct-buffer "Correct grammar in buffer")
|
|
("s" ispell "Correct Spelling")
|
|
("d" ispell-change-dictionary "Change dictionary"))
|
|
|
|
;(define-key dired-mode-map (kbd "'") #'hydra-dired/body)
|
|
;https://github.com/abo-abo/hydra/wiki/Dired
|
|
(defhydra hydra-dired (:hint nil :color pink)
|
|
"
|
|
_+_ mkdir _v_iew _m_ark _(_ details _i_nsert-subdir wdired
|
|
_C_opy _O_ view other _U_nmark all _)_ omit-mode _$_ hide-subdir C-x C-q : edit
|
|
_D_elete _o_pen other _u_nmark _l_ redisplay _w_ kill-subdir C-c C-c : commit
|
|
_R_ename _M_ chmod _t_oggle _g_ revert buf _e_ ediff C-c ESC : abort
|
|
_Y_ rel symlink _G_ chgrp _E_xtension mark _s_ort _=_ pdiff
|
|
_S_ymlink ^ ^ _F_ind marked _._ toggle hydra \\ flyspell
|
|
_r_sync ^ ^ ^ ^ ^ ^ _?_ summary
|
|
_z_ compress-file _A_ find regexp
|
|
_Z_ compress _Q_ repl regexp
|
|
|
|
T - tag prefix
|
|
"
|
|
("\\" dired-do-ispell)
|
|
("(" dired-hide-details-mode)
|
|
(")" dired-omit-mode)
|
|
("+" dired-create-directory)
|
|
("=" diredp-ediff) ;; smart diff
|
|
("?" dired-summary)
|
|
("$" diredp-hide-subdir-nomove)
|
|
("A" dired-do-find-regexp)
|
|
("C" dired-do-copy) ;; Copy all marked files
|
|
("D" dired-do-delete)
|
|
("E" dired-mark-extension)
|
|
("e" dired-ediff-files)
|
|
("F" dired-do-find-marked-files)
|
|
("G" dired-do-chgrp)
|
|
("g" revert-buffer) ;; read all directories again (refresh)
|
|
("i" dired-maybe-insert-subdir)
|
|
("l" dired-do-redisplay) ;; relist the marked or singel directory
|
|
("M" dired-do-chmod)
|
|
("m" dired-mark)
|
|
("O" dired-display-file)
|
|
("o" dired-find-file-other-window)
|
|
("Q" dired-do-find-regexp-and-replace)
|
|
("R" dired-do-rename)
|
|
("r" dired-do-rsynch)
|
|
("S" dired-do-symlink)
|
|
("s" dired-sort-toggle-or-edit)
|
|
("t" dired-toggle-marks)
|
|
("U" dired-unmark-all-marks)
|
|
("u" dired-unmark)
|
|
("v" dired-view-file) ;; q to exit, s to search, = gets line #
|
|
("w" dired-kill-subdir)
|
|
("Y" dired-do-relsymlink)
|
|
("z" diredp-compress-this-file)
|
|
("Z" dired-do-compress)
|
|
("q" nil)
|
|
("." nil :color blue))
|
|
|
|
;https://github.com/abo-abo/hydra/wiki/PDF-Tools
|
|
(defhydra hydra-pdftools (:color blue :hint nil)
|
|
"
|
|
╭───────────┐
|
|
Move History Scale/Fit Annotations Search/Link Do │ PDF Tools │
|
|
╭──────────────────────────────────────────────────────────────────┴───────────╯
|
|
^^_g_^^ _B_ ^↧^ _+_ ^ ^ [_al_] list [_s_] search [_u_] revert buffer
|
|
^^^↑^^^ ^↑^ _H_ ^↑^ ↦ _W_ ↤ [_am_] markup [_o_] outline [_i_] info
|
|
^^_p_^^ ^ ^ ^↥^ _0_ ^ ^ [_at_] text [_F_] link [_d_] dark mode
|
|
^^^↑^^^ ^↓^ ╭─^─^─┐ ^↓^ ╭─^ ^─┐ [_ad_] delete [_f_] search link
|
|
_h_ ←pag_e_→ _l_ _N_ │ _P_ │ _-_ _b_ [_aa_] dired
|
|
^^^↓^^^ ^ ^ ╰─^─^─╯ ^ ^ ╰─^ ^─╯ [_y_] yank
|
|
^^_n_^^ ^ ^ _r_eset slice box
|
|
^^^↓^^^
|
|
^^_G_^^
|
|
--------------------------------------------------------------------------------
|
|
"
|
|
("\\" hydra-master/body "back")
|
|
("<ESC>" nil "quit")
|
|
("al" pdf-annot-list-annotations)
|
|
("ad" pdf-annot-delete)
|
|
("aa" pdf-annot-attachment-dired)
|
|
("am" pdf-annot-add-markup-annotation)
|
|
("at" pdf-annot-add-text-annotation)
|
|
("y" pdf-view-kill-ring-save)
|
|
("+" pdf-view-enlarge :color red)
|
|
("-" pdf-view-shrink :color red)
|
|
("0" pdf-view-scale-reset)
|
|
("H" pdf-view-fit-height-to-window)
|
|
("W" pdf-view-fit-width-to-window)
|
|
("P" pdf-view-fit-page-to-window)
|
|
("n" pdf-view-next-page-command :color red)
|
|
("p" pdf-view-previous-page-command :color red)
|
|
("d" pdf-view-dark-minor-mode)
|
|
("b" pdf-view-set-slice-from-bounding-box)
|
|
("r" pdf-view-reset-slice)
|
|
("g" pdf-view-first-page)
|
|
("G" pdf-view-last-page)
|
|
("e" pdf-view-goto-page)
|
|
("o" pdf-outline)
|
|
("s" pdf-occur)
|
|
("i" pdf-misc-display-metadata)
|
|
("u" pdf-view-revert-buffer)
|
|
("F" pdf-links-action-perfom)
|
|
("f" pdf-links-isearch-link)
|
|
("B" pdf-history-backward :color red)
|
|
("N" pdf-history-forward :color red)
|
|
("l" image-forward-hscroll :color red)
|
|
("h" image-backward-hscroll :color red))
|
|
|
|
(defhydra hydra-elpy (:color red)
|
|
"
|
|
Navigate errors
|
|
"
|
|
("n" next-error "next error")
|
|
("p" previous-error "previous error")
|
|
("d" (progn (call-interactively 'elpy-test-django-runner) (elpy-nav-errors/body)) "current test, Django runner" :color blue)
|
|
("t" (progn (call-interactively 'elpy-test-pytest-runner) (elpy-nav-errors/body)) "current test, pytest runner" :color blue)
|
|
("s" (progn
|
|
(switch-to-buffer-other-window "*compilation*")
|
|
(goto-char (point-max))) "switch to compilation buffer" :color blue)
|
|
("w" (venv-workon) "Workon venv…")
|
|
("q" nil "quit")
|
|
("Q" (kill-buffer "*compilation*") "quit and kill compilation buffer" :color blue)
|
|
)
|
|
|
|
(use-package general
|
|
:ensure t
|
|
:config
|
|
(general-def
|
|
:states '(normal visual insert emacs)
|
|
:prefix "SPC"
|
|
:non-normal-prefix "M-SPC"
|
|
"b" '(hydra-buffer/body t :which-key "Buffer")
|
|
"w" '(hydra-window-operations/body t :which-key "Windows")
|
|
"r" '(hydra-restclient/body t :which-key "Restclient")
|
|
"f" '(hydra-flycheck/body t :which-key "Flycheck")
|
|
"s" '(hydra-spellchecking/body t :which-key "Spell Checking")
|
|
"e" '(hydra-ediff/body t :which-key "Diffing")
|
|
"i" '(hydra-yasnippet/body t :which-key "Yasnippets")
|
|
"p" '(hydra-pdftools/body t :which-key "PDF Tools")
|
|
"y" '(hydra-elpy/body t :which-key "Elpy")
|
|
"a" '(hydra-apropos/body t :which-key "Apropos Commands")))
|
|
|
|
(use-package helpful
|
|
:ensure t
|
|
:bind (("C-h f" . helpful-function)
|
|
("C-h v" . helpful-variable)
|
|
("C-h s" . helpful-symbol)
|
|
("C-h k" . helpful-key)
|
|
("C-c h f" . helpful-function)
|
|
("C-c h v" . helpful-variable)
|
|
("C-c h c" . helpful-command)
|
|
("C-c h m" . helpful-macro)
|
|
("<C-tab>" . backward-button)
|
|
:map helpful-mode-map
|
|
("M-?" . helpful-at-point)
|
|
:map emacs-lisp-mode-map
|
|
("M-?" . helpful-at-point)
|
|
:map lisp-interaction-mode-map ; Scratch buffer
|
|
("M-?" . helpful-at-point)))
|
|
|
|
(use-package amx
|
|
:ensure t
|
|
:config
|
|
(amx-mode t))
|
|
(use-package counsel
|
|
:ensure t
|
|
:config
|
|
(ivy-mode 1)
|
|
(counsel-mode 1)
|
|
(setq ivy-use-virtual-buffers t)
|
|
(setq ivy-count-format "(%d/%d) ")
|
|
(setq ivy-initial-inputs-alist nil)
|
|
(with-eval-after-load 'org
|
|
(define-key org-mode-map (kbd "C-c C-q") #'counsel-org-tag))
|
|
(global-set-key (kbd "C-c v") 'ivy-push-view)
|
|
(global-set-key (kbd "C-c V") 'ivy-pop-view)
|
|
;; (global-set-key (kbd "C-s") 'swiper-isearch)
|
|
(evil-define-key 'normal 'global "/" 'swiper-isearch)
|
|
(global-set-key (kbd "C-c g") 'counsel-git)
|
|
(global-set-key (kbd "C-c j") 'counsel-git-grep)
|
|
(global-set-key (kbd "C-c k") 'counsel-ag)
|
|
(define-key ivy-minibuffer-map (kbd "S-SPC") (lambda () (interactive) (insert " ")))
|
|
(global-set-key (kbd "C-c C-r") 'ivy-resume))
|
|
|
|
(use-package eyebrowse
|
|
:ensure t
|
|
:init
|
|
(setq eyebrowse-keymap-prefix (kbd "C-c M-e"))
|
|
(global-unset-key (kbd "C-c C-w"))
|
|
(define-key evil-normal-state-map "gt" 'eyebrowse-next-window-config)
|
|
(define-key evil-normal-state-map "gT" 'eyebrowse-prev-window-config)
|
|
(define-key evil-normal-state-map "gr" 'eyebrowse-rename-window-config)
|
|
(define-key evil-normal-state-map "gc" 'eyebrowse-close-window-config)
|
|
:config
|
|
(setq eyebrowse-new-workspace t)
|
|
(setq eyebrowse-switch-back-and-forth t)
|
|
(setq eyebrowse-wrap-around t)
|
|
(eyebrowse-setup-opinionated-keys)
|
|
(eyebrowse-mode 1))
|
|
|
|
(use-package move-text
|
|
:ensure t
|
|
:config
|
|
(move-text-default-bindings))
|
|
|
|
(use-package gnu-elpa-keyring-update
|
|
:ensure t)
|
|
|
|
;; web-mode for general web development
|
|
(use-package web-mode
|
|
:ensure t
|
|
:mode
|
|
(("\\.phtml\\'" . web-mode)
|
|
("\\.tpl\\'" . web-mode)
|
|
("\\.[agj]sp\\'" . web-mode)
|
|
("\\.as[cp]x\\'" . web-mode)
|
|
("\\.erb\\'" . web-mode)
|
|
("\\.mustache\\'" . web-mode)
|
|
("\\.djhtml\\'" . web-mode)
|
|
("\\.html?\\'" . web-mode))
|
|
:config
|
|
(add-to-list 'auto-mode-alist '("\\.php$" . my/php-setup))
|
|
(add-to-list 'auto-mode-alist '("\\.phpi$" . my/php-setup)))
|
|
|
|
;; add markdown-mode to edit markdown files
|
|
(use-package markdown-mode
|
|
:ensure t
|
|
:commands (markdown-mode gfm-mode)
|
|
:mode (("README\\.md\\'" . gfm-mode)
|
|
("\\.md\\'" . markdown-mode)
|
|
("\\.markdown\\'" . markdown-mode))
|
|
:init
|
|
(setq markdown-command "multimarkdown")
|
|
(setq markdown-enable-wiki-links t
|
|
markdown-wiki-link-alias-first t
|
|
markdown-hide-urls t
|
|
markdown-fontify-code-blocks-natively t
|
|
markdown-wiki-link-search-type '(project)
|
|
markdown-link-space-sub-char " ")
|
|
:config
|
|
(defun insert-file-name-as-wikilink (filename &optional args)
|
|
(interactive "*fInsert file name: \nP")
|
|
(insert (concat "[[" (file-name-sans-extension (file-relative-name
|
|
filename)) "]]")))
|
|
|
|
(define-key markdown-mode-map (kbd "C-c i") 'insert-file-name-as-wikilink))
|
|
|
|
;; enable powershell-mode
|
|
(use-package powershell
|
|
:ensure t
|
|
:mode
|
|
(("\\.ps1\\'" . powershell-mode)
|
|
("\\.psm1\\'" . powershell-mode)))
|
|
|
|
(when (boundp 'enable-auctex)
|
|
;; auctex a greate plugin for latex writing
|
|
(use-package latex
|
|
:if (is-linux-p)
|
|
:ensure auctex
|
|
:mode ("\\.tex\\'" . latex-mode)
|
|
:ensure-system-package
|
|
(pdflatex . texlive-full)
|
|
:config
|
|
(setq-default TeX-master nil)
|
|
(setq TeX-auto-save t)
|
|
(setq TeX-parse-self t)
|
|
(setq TeX-electric-math (quote ("\\(" . "\\)")))
|
|
(setq LaTeX-electric-left-right-brace t)
|
|
(setq TeX-view-program-selection
|
|
(quote
|
|
(((output-dvi has-no-display-manager)
|
|
"dvi2tty")
|
|
((output-dvi style-pstricks)
|
|
"dvips and gv")
|
|
(output-dvi "xdvi")
|
|
(output-pdf "PDF Tools")
|
|
(output-html "xdg-open"))))))
|
|
|
|
(use-package yaml-mode
|
|
:defer t
|
|
:mode
|
|
(("\\.yml\\'" . yaml-mode)
|
|
("\\.yaml\\'" . yaml-mode))
|
|
:interpreter ("yml" . yml-mode)
|
|
:ensure t)
|
|
|
|
(use-package python-mode
|
|
:ensure t
|
|
:defer t
|
|
:config
|
|
(setq python-shell-interpreter "python3"))
|
|
|
|
(use-package elpy
|
|
:ensure t
|
|
:config
|
|
(setq elpy-rpc-python-command "python3")
|
|
(setq elpy-test-runner 'elpy-test-pytest-runner)
|
|
(setq eldoc-idle-delay 1)
|
|
(add-hook 'python-mode-hook (lambda () (highlight-indentation-mode -1)))
|
|
(elpy-enable))
|
|
|
|
(use-package company
|
|
:ensure t
|
|
:bind
|
|
("C-<tab>" . company-complete)
|
|
:config
|
|
(setq company-idle-delay 0)
|
|
(define-key company-active-map (kbd "TAB") 'company-complete-common-or-cycle)
|
|
(define-key company-active-map (kbd "<tab>") 'company-complete-common-or-cycle)
|
|
(setq company-dabbrev-downcase nil)
|
|
(add-hook 'after-init-hook 'global-company-mode)
|
|
|
|
;; Add yasnippet support for all company backends
|
|
(defvar company-mode/enable-yas t
|
|
"Enable yasnippet for all backends.")
|
|
(defun company-mode/backend-with-yas (backend)
|
|
(if (or (not company-mode/enable-yas) (and (listp backend) (member 'company-yasnippet backend)))
|
|
backend
|
|
(append (if (consp backend) backend (list backend))
|
|
'(:with company-yasnippet))))
|
|
(setq company-backends (mapcar #'company-mode/backend-with-yas company-backends)))
|
|
|
|
(when (boundp 'enable-auctex)
|
|
(use-package company-auctex
|
|
:if (is-linux-p)
|
|
:ensure t
|
|
:after auctex
|
|
:defer t
|
|
:init
|
|
(add-hook 'LaTeX-mode-hook 'company-auctex-init)))
|
|
|
|
(use-package company-web
|
|
:ensure t
|
|
:after web-mode
|
|
:commands company-web-html
|
|
:config
|
|
(require 'company-web-html)
|
|
|
|
;; Tide completion support in web-mode with company-mode
|
|
(defun my-web-mode-hook ()
|
|
"Hook for `web-mode'."
|
|
(set (make-local-variable 'company-backends)
|
|
'(company-tide company-web-html company-yasnippet company-files)))
|
|
|
|
(add-hook 'web-mode-hook 'my-web-mode-hook)
|
|
|
|
;; Enable JavaScript completion between <script>...</script> etc.
|
|
(defadvice company-tide (before web-mode-set-up-ac-sources activate)
|
|
"Set `tide-mode' based on current language before running company-tide."
|
|
(if (equal major-mode 'web-mode)
|
|
(let ((web-mode-cur-language
|
|
(web-mode-language-at-pos)))
|
|
(if (or (string= web-mode-cur-language "javascript")
|
|
(string= web-mode-cur-language "jsx"))
|
|
(unless tide-mode (tide-mode))
|
|
(if tide-mode (tide-mode -1)))))))
|
|
|
|
(use-package company-restclient
|
|
:ensure t
|
|
:after (restclient company)
|
|
:config (add-to-list 'company-backends 'company-restclient))
|
|
|
|
;; enable magit a great git porcelain.
|
|
(use-package magit
|
|
:ensure t
|
|
:commands magit-status
|
|
:bind
|
|
("<f10>" . magit-status))
|
|
|
|
;; change the colours of parenthesis the further out they are
|
|
(use-package rainbow-delimiters
|
|
:ensure t
|
|
:config
|
|
(add-hook 'prog-mode-hook #'rainbow-delimiters-mode))
|
|
|
|
(use-package bug-hunter
|
|
:defer t
|
|
:ensure t)
|
|
|
|
(use-package flycheck
|
|
:ensure t)
|
|
|
|
(use-package highlight-indent-guides
|
|
:ensure t
|
|
:config
|
|
(setq highlight-indent-guides-method 'character
|
|
hightlight-indentation-mode nil
|
|
highlight-indent-guides-auto-enabled nil)
|
|
(set-face-background 'highlight-indent-guides-odd-face "darkgray")
|
|
(set-face-background 'highlight-indent-guides-even-face "gray")
|
|
(set-face-foreground 'highlight-indent-guides-character-face "gray")
|
|
(add-hook 'text-mode-hook 'highlight-indent-guides-mode)
|
|
(add-hook 'prog-mode-hook 'highlight-indent-guides-mode))
|
|
|
|
(use-package direnv
|
|
:config
|
|
(direnv-mode))
|
|
|
|
(use-package format-all
|
|
:ensure t
|
|
:hook
|
|
((prog-mode . format-all-ensure-formatter)
|
|
(yaml-mode . format-all-ensure-formatter)
|
|
(prog-mode . format-all-mode))
|
|
:preface
|
|
(defun nebucatnetzer/format-code ()
|
|
"format buffer."
|
|
(interactive)
|
|
(format-all-buffer))
|
|
:config
|
|
(global-set-key (kbd "C-c C-f") #'nebucatnetzer/format-code)
|
|
(setq format-all-show-errors 'errors)
|
|
(setq format-all-default-formatters
|
|
'(("Assembly" asmfmt)
|
|
("ATS" atsfmt)
|
|
("Bazel" buildifier)
|
|
("BibTeX" emacs-bibtex)
|
|
("C" clang-format)
|
|
("C#" clang-format)
|
|
("C++" clang-format)
|
|
("Cabal Config" cabal-fmt)
|
|
("Clojure" zprint)
|
|
("CMake" cmake-format)
|
|
("Crystal" crystal)
|
|
("CSS" prettier)
|
|
("Cuda" clang-format)
|
|
("D" dfmt)
|
|
("Dart" dart-format)
|
|
("Dhall" dhall)
|
|
("Dockerfile" dockfmt)
|
|
("Elixir" mix-format)
|
|
("Elm" elm-format)
|
|
("Emacs Lisp" emacs-lisp)
|
|
("Erlang" efmt)
|
|
("F#" fantomas)
|
|
("Fish" fish-indent)
|
|
("Fortran Free Form" fprettify)
|
|
("GLSL" clang-format)
|
|
("Go" gofmt)
|
|
("GraphQL" prettier)
|
|
("Haskell" brittany)
|
|
("HTML" html-tidy)
|
|
("Java" clang-format)
|
|
("JavaScript" prettier)
|
|
("JSON" prettier)
|
|
("JSON5" prettier)
|
|
("Jsonnet" jsonnetfmt)
|
|
("JSX" prettier)
|
|
("Kotlin" ktlint)
|
|
("LaTeX" latexindent)
|
|
("Less" prettier)
|
|
("Literate Haskell" brittany)
|
|
("Lua" lua-fmt)
|
|
("Markdown" prettier)
|
|
("Nix" nixpkgs-fmt)
|
|
("Objective-C" clang-format)
|
|
("OCaml" ocp-indent)
|
|
("Perl" perltidy)
|
|
("PHP" prettier)
|
|
("Protocol Buffer" clang-format)
|
|
("PureScript" purty)
|
|
("Python" autopep8)
|
|
("R" styler)
|
|
("Reason" bsrefmt)
|
|
("ReScript" rescript)
|
|
("Ruby" rufo)
|
|
("Rust" rustfmt)
|
|
("Scala" scalafmt)
|
|
("SCSS" prettier)
|
|
("Shell" shfmt)
|
|
("Solidity" prettier)
|
|
("SQL" sqlformat)
|
|
("Svelte" prettier)
|
|
("Swift" swiftformat)
|
|
("Terraform" terraform-fmt)
|
|
("TOML" prettier)
|
|
("TSX" prettier)
|
|
("TypeScript" prettier)
|
|
("V" v-fmt)
|
|
("Verilog" istyle-verilog)
|
|
("Vue" prettier)
|
|
("XML" html-tidy)
|
|
("YAML" prettier)
|
|
("Zig" zig)
|
|
("_Angular" prettier)
|
|
("_Flow" prettier)
|
|
("_Gleam" gleam)
|
|
("_Ledger" ledger-mode)
|
|
("_Nginx" nginxfmt)
|
|
("_Snakemake" snakefmt)))
|
|
)
|
|
|
|
(when (boundp 'enable-email)
|
|
(use-package mu4e
|
|
:if (is-linux-p)
|
|
:config
|
|
(require 'smtpmail)
|
|
|
|
;; use msmtp
|
|
(setq message-send-mail-function 'message-send-mail-with-sendmail)
|
|
(setq sendmail-program "msmtp")
|
|
|
|
(require 'mu4e)
|
|
(require 'org-mu4e)
|
|
|
|
(setq mu4e-completing-read-function (quote ivy-completing-read))
|
|
(setq mail-user-agent 'mu4e-user-agent)
|
|
|
|
(setq mu4e-drafts-folder "/personal/Drafts")
|
|
(setq mu4e-sent-folder "/personal/Sent")
|
|
(setq mu4e-trash-folder "/personal/Trash")
|
|
(setq mu4e-refile-folder "/personal/Archive")
|
|
|
|
(setq browse-url-browser-function 'browse-url-generic
|
|
browse-url-generic-program "firefox")
|
|
|
|
(require 'mu4e-contrib)
|
|
(setq mu4e-html2text-command 'mu4e-shr2text)
|
|
(add-to-list 'mu4e-view-actions
|
|
'("ViewInBrowser" . mu4e-action-view-in-browser) t)
|
|
|
|
(setq mu4e-headers-fields
|
|
'((:date . 10) ;; alternatively, use :human-date
|
|
(:flags . 5)
|
|
(:from . 22)
|
|
(:subject . nil))) ;; alternatively, use :thread-subject
|
|
|
|
(setq mu4e-get-mail-command "offlineimap -qo"
|
|
mu4e-update-interval 120
|
|
mu4e-headers-auto-update t
|
|
mu4e-compose-format-flowed t
|
|
mu4e-index-update-in-background t
|
|
mu4e-compose-dont-reply-to-self t
|
|
mu4e-attachment-dir "~/nextcloud/10_documents/01_inbox"
|
|
mu4e-compose-signature-auto-include nil)
|
|
|
|
(add-hook 'mu4e-view-mode-hook 'visual-line-mode)
|
|
|
|
(setq mu4e-maildir-shortcuts
|
|
'(("/personal/INBOX" . ?i)
|
|
("/personal/Sent" . ?s)
|
|
("/personal/Trash" . ?t)
|
|
("/personal/Archive" . ?a)
|
|
("/personal/Drafts" . ?d)))
|
|
|
|
;; show images
|
|
(setq mu4e-show-images t)
|
|
|
|
;; general emacs mail settings; used when composing e-mail
|
|
;; the non-mu4e-* stuff is inherited from emacs/message-mode
|
|
(setq mu4e-reply-to-address "andreas@zweili.ch")
|
|
|
|
(setq message-kill-buffer-on-exit t)
|
|
;; Don't ask for a 'context' upon opening mu4e
|
|
(setq mu4e-context-policy 'pick-first)
|
|
;; Don't ask to quit
|
|
(setq mu4e-confirm-quit nil)
|
|
|
|
;; spell check
|
|
(add-hook 'mu4e-compose-mode-hook
|
|
(defun my-do-compose-stuff ()
|
|
"My settings for message composition."
|
|
(setq mu4e-compose-format-flowed t)
|
|
(use-hard-newlines -1)
|
|
(electric-indent-local-mode -1)
|
|
(turn-off-auto-fill)
|
|
(flyspell-mode)))))
|
|
|
|
;; disable menu and toolbar
|
|
(tool-bar-mode -1)
|
|
(menu-bar-mode -99)
|
|
(when (boundp 'enable-scroll-bar)
|
|
(scroll-bar-mode -1))
|
|
|
|
; Proper line wrapping
|
|
(global-visual-line-mode 1)
|
|
|
|
(when (boundp 'disable-fringe)
|
|
; Disable fringe because I use visual-line-mode
|
|
(set-fringe-mode '(0 . 0)))
|
|
|
|
; Disable splash screen
|
|
(setq inhibit-splash-screen t)
|
|
|
|
(tooltip-mode -1)
|
|
(setq tooltip-use-echo-area t)
|
|
|
|
;; disable or reconfigure prompts
|
|
(fset 'yes-or-no-p 'y-or-n-p) ;; remap yes or no to y or n
|
|
|
|
(setq confirm-nonexistent-file-or-buffer nil);; just create buffers don't ask
|
|
(setq ido-create-new-buffer 'always)
|
|
|
|
;; highlight bad whitespace
|
|
(use-package whitespace
|
|
:ensure t
|
|
:config
|
|
(setq whitespace-style '(face lines-tail tabs trailing))
|
|
(set-face-attribute 'whitespace-line nil :foreground "#af005f")
|
|
(global-whitespace-mode t))
|
|
|
|
(when (boundp 'enable-font)
|
|
(set-face-attribute 'default nil
|
|
:family "Source Code Pro"
|
|
:height 120
|
|
:weight 'normal
|
|
:width 'normal))
|
|
|
|
(when (boundp 'enable-pdf-tools)
|
|
;; improve the resolution of doc-view
|
|
(setq doc-view-resolution 200))
|
|
|
|
(toggle-frame-maximized)
|
|
|
|
(setq-default mode-line-format
|
|
'("%e"
|
|
mode-line-front-space
|
|
;; mode-line-mule-info
|
|
mode-line-client
|
|
mode-line-modified
|
|
mode-line-remote
|
|
mode-line-frame-identification
|
|
mode-line-buffer-identification
|
|
" "
|
|
mode-line-position
|
|
(vc-mode vc-mode)
|
|
;; " "
|
|
;; mode-line-modes
|
|
" "
|
|
mode-line-misc-info
|
|
;; battery-mode-line-string
|
|
;; mode-line-end-spaces
|
|
))
|
|
|
|
(setq display-line-numbers-type 'visual)
|
|
(add-hook 'prog-mode-hook (lambda ()
|
|
(when (version<= "26.0.50" emacs-version )
|
|
(display-line-numbers-mode))))
|
|
|
|
(setq inhibit-compacting-font-caches t)
|
|
|
|
(when (boundp 'enable-org-bullets)
|
|
;; Enable pretty bullets in org mode
|
|
(use-package org-superstar
|
|
:ensure t
|
|
:config
|
|
(add-hook 'org-mode-hook (lambda ()
|
|
(org-superstar-mode 1)))))
|
|
|
|
;; add a package to convert the agenda view to HTML
|
|
(use-package htmlize
|
|
:ensure t
|
|
:after org)
|
|
|
|
(when (is-linux-p)
|
|
;;; org-man.el - Support for links to manpages in Org
|
|
|
|
(org-add-link-type "man" 'org-man-open)
|
|
(add-hook 'org-store-link-functions 'org-man-store-link)
|
|
|
|
(defcustom org-man-command 'man
|
|
"The Emacs command to be used to display a man page."
|
|
:group 'org-link
|
|
:type '(choice (const man) (const woman)))
|
|
|
|
(defun org-man-open (path)
|
|
"Visit the manpage on PATH.
|
|
PATH should be a topic that can be thrown at the man command."
|
|
(funcall org-man-command path))
|
|
|
|
(defun org-man-store-link ()
|
|
"Store a link to a manpage."
|
|
(when (memq major-mode '(Man-mode woman-mode))
|
|
;; This is a man page, we do make this link
|
|
(let* ((page (org-man-get-page-name))
|
|
(link (concat "man:" page))
|
|
(description (format "Manpage for %s" page)))
|
|
(org-store-link-props
|
|
:type "man"
|
|
:link link
|
|
:description description))))
|
|
|
|
(defun org-man-get-page-name ()
|
|
"Extract the page name from the buffer name."
|
|
;; This works for both `Man-mode' and `woman-mode'.
|
|
(if (string-match " \\(\\S-+\\)\\*" (buffer-name))
|
|
(match-string 1 (buffer-name))
|
|
(error "Cannot create link to this man page")))
|
|
|
|
(provide 'org-man)
|
|
|
|
;;; org-man.el ends here
|
|
(require 'org-man))
|
|
|
|
(use-package org-ref
|
|
:ensure t
|
|
:after org
|
|
:init
|
|
(setq org-ref-completion-library 'org-ref-ivy-cite)
|
|
:config
|
|
(setq org-ref-default-citation-link "footcite")
|
|
(setq reftex-default-bibliography '("~/nextcloud/03_documents/org/notes/_resources/references.bib"))
|
|
(setq org-ref-bibliography-notes "~/nextcloud/03_documents/org/notes/bibliography_notes.org"
|
|
org-ref-default-bibliography '("~/nextcloud/03_documents/org/notes/_resources/references.bib")
|
|
org-ref-pdf-directory "~/nextcloud/03_documents/org/notes/_resources/"))
|
|
|
|
(when (boundp 'enable-ox-pandoc)
|
|
(use-package ox-pandoc
|
|
:ensure t
|
|
:after org))
|
|
|
|
(use-package org
|
|
:ensure t
|
|
:pin gnu
|
|
:config
|
|
|
|
;; enable org-mode keys
|
|
(when (or (boundp 'enable-personal-agenda)
|
|
(boundp 'enable-work-agenda))
|
|
(define-key global-map "\C-ca" 'org-agenda))
|
|
|
|
(global-set-key "\C-cl" 'org-store-link)
|
|
(global-set-key "\C-cc" 'org-capture)
|
|
(global-set-key "\C-cb" 'org-iswitchb)
|
|
|
|
;; evilificate calendar in org-mode
|
|
(define-key org-read-date-minibuffer-local-map (kbd "M-h")
|
|
(lambda ()
|
|
(interactive) (org-eval-in-calendar '(calendar-backward-day 1))))
|
|
(define-key org-read-date-minibuffer-local-map (kbd "M-l")
|
|
(lambda ()
|
|
(interactive) (org-eval-in-calendar '(calendar-forward-day 1))))
|
|
(define-key org-read-date-minibuffer-local-map (kbd "M-k")
|
|
(lambda ()
|
|
(interactive) (org-eval-in-calendar '(calendar-backward-week 1))))
|
|
(define-key org-read-date-minibuffer-local-map (kbd "M-j")
|
|
(lambda ()
|
|
(interactive) (org-eval-in-calendar '(calendar-forward-week 1))))
|
|
(define-key org-read-date-minibuffer-local-map (kbd "M-H")
|
|
(lambda ()
|
|
(interactive) (org-eval-in-calendar '(calendar-backward-month 1))))
|
|
(define-key org-read-date-minibuffer-local-map (kbd "M-L")
|
|
(lambda ()
|
|
(interactive) (org-eval-in-calendar '(calendar-forward-month 1))))
|
|
(define-key org-read-date-minibuffer-local-map (kbd "M-K")
|
|
(lambda ()
|
|
(interactive) (org-eval-in-calendar '(calendar-backward-year 1))))
|
|
(define-key org-read-date-minibuffer-local-map (kbd "M-J")
|
|
(lambda ()
|
|
(interactive) (org-eval-in-calendar '(calendar-forward-year 1))))
|
|
|
|
;; evil keybindings for the org-agenda
|
|
(evil-add-hjkl-bindings org-agenda-mode-map 'emacs
|
|
;;(kbd "/") 'evil-search-forward
|
|
(kbd "n") 'evil-search-next
|
|
(kbd "N") 'evil-search-previous
|
|
(kbd "C-d") 'evil-scroll-down
|
|
(kbd "C-u") 'evil-scroll-up
|
|
(kbd "c") 'org-capture
|
|
(kbd "C-w C-w") 'other-window)
|
|
|
|
;; disable line split with M-RET
|
|
(setq org-M-RET-may-split-line (quote ((default))))
|
|
|
|
;; enable the correct intdentation for source code blocks
|
|
(setq org-edit-src-content-indentation 0)
|
|
(setq org-src-tab-acts-natively t)
|
|
(setq org-src-preserve-indentation t)
|
|
|
|
;; archive files to a monthly file
|
|
(when (boundp 'enable-personal-agenda)
|
|
(when (is-linux-p)
|
|
(setq org-archive-location
|
|
(concat "~/nextcloud/10_documents/99_archive/2022/projects/"
|
|
(format-time-string "%Y-%m" (current-time)) "-%s::datetree/"))))
|
|
(when (boundp 'enable-work-agenda)
|
|
(when (is-windows-p)
|
|
(setq org-archive-location
|
|
(concat "~/nextcloud/03_documents/org/archive/work/"
|
|
(format-time-string "%Y-%m" (current-time)) "-%s::datetree/"))))
|
|
|
|
;; enable todo and checkbox depencies
|
|
(setq org-enforce-todo-dependencies t)
|
|
(setq org-enforce-todo-checkbox-dependencies t)
|
|
|
|
;; quick access for todo states
|
|
(setq org-todo-keywords
|
|
'((sequence "TODO(t)" "NEXT(n)" "WAITING(w!)" "PROJECT(p)" "|" "DONE(d)")
|
|
(sequence "|" "CANCELLED(c)")))
|
|
|
|
(setq org-log-done 'time)
|
|
|
|
(setq org-log-into-drawer t)
|
|
|
|
;; enable org-indent
|
|
(setq org-startup-indented t)
|
|
|
|
;; capture templates
|
|
(defun my/org-capture-read-file-name ()
|
|
(concat (expand-file-name (read-file-name "PROMPT: " "~/nextcloud/12_tasks/")) ".org"))
|
|
|
|
(when (boundp 'enable-personal-agenda)
|
|
(when (is-linux-p)
|
|
(setq org-capture-templates
|
|
(quote
|
|
(("t" "Adds a Next entry" entry
|
|
(file+headline "~/nextcloud/12_tasks/personal.org" "Capture")
|
|
(file "~/nextcloud/10_documents/99_archive/0000/settings/templates/temp_personal_todo.txt")
|
|
:empty-lines 1)
|
|
("n" "Add note" plain (file my/org-capture-read-file-name)
|
|
(file "~/nextcloud/10_documents/99_archive/0000/settings/templates/temp_note.txt"))
|
|
)))))
|
|
|
|
(when (boundp 'enable-work-agenda)
|
|
(when (is-windows-p)
|
|
(setq org-capture-templates
|
|
(quote
|
|
(("j" "Journal Entry" entry
|
|
(file+headline "~/nextcloud/03_documents/org/agenda/work/work.org" "Clock")
|
|
(file "~/nextcloud/10_documents/99_archive/0000/settings/templates/temp_clock_note.txt")
|
|
:empty-lines 1)
|
|
("c" "Phone call" entry (file+headline "~/nextcloud/03_documents/org/agenda/work/work.org" "Clock")
|
|
"* %U PHONE %?" :clock-in t :clock-resume t)
|
|
("t" "Adds a Next entry" entry
|
|
(file+headline "~/nextcloud/03_documents/org/agenda/work/work.org" "Capture")
|
|
(file "~/nextcloud/10_documents/99_archive/0000/settings/templates/temp_work_todo.txt")
|
|
:clock-in t :clock-resume t)
|
|
("p" "Small Project" entry
|
|
(file+headline "~/nextcloud/03_documents/org/agenda/work/work.org" "Capture")
|
|
(file "~/nextcloud/10_documents/99_archive/0000/settings/templates/temp_work_small_project.txt"))
|
|
("m" "Meeting" entry (file+headline "~/nextcloud/03_documents/org/agenda/work/work.org" "Capture")
|
|
"* %U MEETING: with %?\n" :clock-in t :clock-resume t :empty-lines 1)
|
|
("n" "Add note" plain (file my/org-capture-read-file-name)
|
|
(file "~/nextcloud/10_documents/99_archive/0000/settings/templates/temp_note.txt"))
|
|
)))))
|
|
|
|
;; org-columns format
|
|
(setq org-columns-default-format
|
|
"%40ITEM(Task) %8Effort(Estimated Effort){:} %8CLOCKSUM %10TAGS")
|
|
|
|
;; available effort times
|
|
(setq org-global-properties
|
|
(quote
|
|
(("Effort_ALL" . "0 0:10 0:30 1:00 2:00 3:00 4:00 5:00 6:00 7:00"))))
|
|
|
|
;; org-refile options
|
|
(setq org-refile-allow-creating-parent-nodes (quote confirm))
|
|
(setq org-refile-use-outline-path 'file
|
|
org-outline-path-complete-in-steps nil)
|
|
|
|
(defun nebucatnetzer-org-files-list ()
|
|
(delq nil
|
|
(mapcar (lambda (buffer)
|
|
(buffer-file-name buffer))
|
|
(org-buffer-list 'files t))))
|
|
|
|
(setq org-refile-targets '((nebucatnetzer-org-files-list :maxlevel . 6)))
|
|
|
|
(setq org-src-fontify-natively t)
|
|
|
|
(setq org-highlight-latex-and-related '(latex))
|
|
|
|
(setq org-image-actual-width (quote (500)))
|
|
(setq org-startup-with-inline-images t)
|
|
|
|
(setq org-id-link-to-org-use-id 'create-if-interactive-and-no-custom-id
|
|
org-clone-delete-id t)
|
|
|
|
(setq org-blank-before-new-entry
|
|
(quote ((heading . t)
|
|
(plain-list-item . auto))))
|
|
|
|
(setq org-footnote-section "Resources")
|
|
|
|
(setq org-attach-directory "~/nextcloud/10_documents/99_archive/2022/resources/")
|
|
|
|
(setq org-todo-keyword-faces
|
|
`(("WAITING" :foreground "#0087ff" :weight bold)
|
|
("TODO" :foreground "#d75f00" :weight bold)
|
|
("PROJECT" :foreground "#626262" :weight bold)
|
|
("NEXT" :foreground "#d70000" :weight bold)))
|
|
|
|
|
|
(set-face-attribute 'org-agenda-structure nil :inherit 'default :height 1.00)
|
|
(set-face-attribute 'org-agenda-date-weekend nil :height 1.00 :weight 'medium)
|
|
(set-face-attribute 'org-agenda-calendar-event nil :weight 'medium)
|
|
(set-face-attribute 'org-agenda-date nil :inherit 'default :height 1.00 :weight 'bold)
|
|
(set-face-attribute 'org-agenda-date-today nil :slant 'normal :weight 'bold :height 1.00)
|
|
(set-face-attribute 'org-done nil :foreground "#5f8700" :weight 'bold)
|
|
(set-face-attribute 'org-link nil :foreground "#0087ff" :underline t)
|
|
(set-face-attribute 'org-scheduled nil :foreground "#5f8700" :slant 'italic :weight 'normal)
|
|
(set-face-attribute 'org-scheduled-previously nil :foreground "#d70000" :weight 'normal)
|
|
(set-face-attribute 'org-scheduled-today nil :foreground "#5f8700" :slant 'italic :weight 'normal)
|
|
(set-face-attribute 'org-todo nil :background "nil" :foreground "#d70000" :weight 'bold)
|
|
(set-face-attribute 'org-upcoming-deadline nil :foreground "#d70000" :weight 'normal)
|
|
(set-face-attribute 'org-warning nil :foreground "#d70000" :weight 'normal)
|
|
|
|
(setq org-startup-shrink-all-tables t)
|
|
|
|
;; org-export formats
|
|
;;(setq org-export-backends (quote (beamer html latex md odt reveal)))
|
|
|
|
(setq org-html-html5-fancy t
|
|
org-html-doctype "html5")
|
|
|
|
;; disable the Todo keywords in the export
|
|
(setq org-export-with-todo-keywords nil)
|
|
|
|
;; disable the tags in the export
|
|
(setq org-export-with-tags nil)
|
|
|
|
(setq org-latex-caption-above nil)
|
|
|
|
(setq org-export-with-sub-superscripts nil)
|
|
|
|
(setq org-export-with-smart-quotes t)
|
|
|
|
(setq org-export-headline-levels 5)
|
|
|
|
;; options for beamer exports
|
|
(setq org-beamer-frame-level 2)
|
|
(setq org-beamer-outline-frame-options "")
|
|
(setq org-beamer-outline-frame-title "Inhalt")
|
|
(setq org-beamer-theme "metropolis")
|
|
|
|
;; options for latex exports
|
|
(setq org-latex-classes
|
|
(quote
|
|
(("beamer" "\\documentclass{beamer}"
|
|
("\\section{%s}" . "\\section*{%s}")
|
|
("\\subsection{%s}" . "\\subsection*{%s}")
|
|
("\\subsubsection{%s}" . "\\subsubsection*{%s}"))
|
|
("article" "\\documentclass{article}"
|
|
("\\section{%s}" . "\\section*{%s}")
|
|
("\\subsection{%s}" . "\\subsection*{%s}")
|
|
("\\subsubsection{%s}" . "\\subsubsection*{%s}")
|
|
("\\paragraph{%s}" . "\\paragraph*{%s}")
|
|
("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
|
|
("report" "\\documentclass[11pt]{report}"
|
|
("\\part{%s}" . "\\part*{%s}")
|
|
("\\chapter{%s}" . "\\chapter*{%s}")
|
|
("\\section{%s}" . "\\section*{%s}")
|
|
("\\subsection{%s}" . "\\subsection*{%s}")
|
|
("\\subsubsection{%s}" . "\\subsubsection*{%s}"))
|
|
("book" "\\documentclass[11pt]{book}"
|
|
("\\part{%s}" . "\\part*{%s}")
|
|
("\\chapter{%s}" . "\\chapter*{%s}")
|
|
("\\section{%s}" . "\\section*{%s}")
|
|
("\\subsection{%s}" . "\\subsection*{%s}")
|
|
("\\subsubsection{%s}" . "\\subsubsection*{%s}")))))
|
|
(setq org-latex-default-packages-alist nil)
|
|
(setq org-latex-listings 'listings)
|
|
(setq org-latex-title-command "\\maketitle\\newpage")
|
|
(setq org-latex-toc-command "\\tableofcontents
|
|
\\newpage
|
|
")
|
|
|
|
;; Set the agenda separator to a space character.
|
|
(setq org-agenda-block-separator " ")
|
|
|
|
;; a function to call the custom agenda view.
|
|
(defun az/custom-agenda (&optional arg)
|
|
(interactive "P")
|
|
(org-agenda arg "A"))
|
|
|
|
(global-set-key [f9] 'az/custom-agenda)
|
|
|
|
;; hide done tasks in the agenda
|
|
(setq org-agenda-skip-deadline-if-done t)
|
|
(setq org-agenda-skip-scheduled-if-done t)
|
|
(setq org-agenda-skip-timestamp-if-done t)
|
|
|
|
;; Custom agenda command to list the stuck projects in the normal
|
|
;; agenda view.
|
|
(setq org-stuck-projects '("/PROJECT" ("NEXT") nil ""))
|
|
(setq org-agenda-custom-commands
|
|
(quote (("A" "Custom Agenda"
|
|
((agenda "" nil)
|
|
(stuck ""
|
|
((org-agenda-overriding-header "Stuck Projects")
|
|
(org-agenda-sorting-strategy
|
|
'(category-up))))
|
|
(tags-todo "TODO=\"PROJECT\" "
|
|
((org-agenda-overriding-header "Projects")
|
|
(org-agenda-sorting-strategy
|
|
'(category-up))))
|
|
nil))
|
|
;; Show all headings with the corresponding TODO state
|
|
("N" occur-tree "NEXT")
|
|
("O" occur-tree "TODO")
|
|
("W" occur-tree "WAITING"))))
|
|
|
|
;; don't show the warnings for deadlines if the item is scheduled
|
|
(setq org-agenda-skip-deadline-prewarning-if-scheduled t)
|
|
|
|
;; start the agenda on the current day and show the next 13 days
|
|
(setq org-agenda-span 14
|
|
org-agenda-start-on-weekday nil)
|
|
(setq org-agenda-tags-column -80)
|
|
(setq org-agenda-show-future-repeats (quote next))
|
|
(setq org-agenda-sorting-strategy
|
|
(quote
|
|
((agenda todo-state-up priority-down category-up))))
|
|
|
|
;; dimm open tasks
|
|
(setq org-agenda-dim-blocked-tasks t)
|
|
|
|
;; automatically refresh the agenda after adding a task
|
|
(add-hook 'org-capture-after-finalize-hook 'nebucatnetzer:org-agenda-redo)
|
|
|
|
(defun nebucatnetzer:org-agenda-redo ()
|
|
(interactive)
|
|
(when (get-buffer "*Org Agenda*")
|
|
(with-current-buffer "*Org Agenda*"
|
|
(org-agenda-redo t)
|
|
(message "[org agenda] refreshed!"))))
|
|
|
|
(setq org-clock-out-remove-zero-time-clocks t)
|
|
|
|
(when (boundp 'enable-clocking)
|
|
(defun start-heading-clock (id file)
|
|
"Start clock programmatically for heading with ID in FILE."
|
|
(require 'org-id)
|
|
(if-let (marker (org-id-find-id-in-file id file t))
|
|
(save-current-buffer
|
|
(save-excursion
|
|
(set-buffer (marker-buffer marker))
|
|
(goto-char (marker-position marker))
|
|
(org-clock-in)))
|
|
(warn "Clock not started (Could not find ID '%s' in file '%s')" id file)))
|
|
|
|
(defun start-main-clock ()
|
|
"This functions always clocks in to the * Clock heading"
|
|
(interactive)
|
|
(start-heading-clock "e9f71012-4370-4dd2-af8e-9ae14d86508a" "~/nextcloud/03_documents/org/agenda/work/work.org"))
|
|
|
|
(global-set-key (kbd "<f6>") 'start-main-clock))
|
|
|
|
(org-clock-persistence-insinuate)
|
|
|
|
(setq org-clock-out-when-done t)
|
|
|
|
(setq org-clock-persist t)
|
|
;; Do not prompt to resume an active clock
|
|
(setq org-clock-persist-query-resume nil)
|
|
|
|
(global-set-key (kbd "<f7>") 'org-clock-in)
|
|
(global-set-key (kbd "<f8>") 'org-clock-out)
|
|
(global-set-key (kbd "C-x C-d") 'org-clock-mark-default-task)
|
|
|
|
(setq org-duration-format (quote (("h") (special . 2))))
|
|
|
|
(setq org-agenda-clockreport-parameter-plist
|
|
(quote (:link t :maxlevel 4 :tcolumns 3)))
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;; add image from conference phone upload ;;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;; use case is taking a photo of a slide in a conference and uploading
|
|
;; it to google drive or dropbox or whatever to get it on your
|
|
;; computer. You then want to embed it in an org-mode document by
|
|
;; moving it to the same folder and renaming according to the current
|
|
;; section of the org file, avoiding name clashes
|
|
|
|
;; required libraries
|
|
(require 'dash)
|
|
(require 'swiper)
|
|
(require 's)
|
|
|
|
(global-set-key (kbd "C-c i") 'org-insert-image)
|
|
;; start directory
|
|
(defvar bjm/conference-image-dir (expand-file-name "~/Downloads/"))
|
|
|
|
(defun org-insert-image ()
|
|
"Insert image from conference directory, rename and add link in current file.
|
|
The file is taken from a start directory set by
|
|
`bjm/conference-image-dir' and moved to the current directory, renamed
|
|
and embedded at the point as an org-mode link. The user is presented
|
|
with a list of files in the start directory, from which to select the
|
|
file to move, sorted by most recent first."
|
|
(interactive)
|
|
(let (file-list target-dir file-list-sorted start-file start-file-full file-ext end-file end-file-base end-file-full file-number)
|
|
;; clean directories from list but keep times
|
|
(setq file-list
|
|
(-remove (lambda (x) (nth 1 x))
|
|
(directory-files-and-attributes bjm/conference-image-dir)))
|
|
|
|
;; get target directory
|
|
(setq target-dir (concat (file-name-directory buffer-file-name) "_resources/"))
|
|
(unless (file-exists-p target-dir)
|
|
(make-directory target-dir))
|
|
;; sort list by most recent
|
|
;; http://stackoverflow.com/questions/26514437/emacs-sort-list-of-directories-files-by-modification-date
|
|
(setq file-list-sorted
|
|
(mapcar #'car
|
|
(sort file-list
|
|
#'(lambda (x y) (time-less-p (nth 6 y) (nth 6 x))))))
|
|
|
|
;; use ivy to select start-file
|
|
(setq start-file (ivy-read
|
|
(concat "Move selected file to " target-dir ":")
|
|
file-list-sorted
|
|
:re-builder #'ivy--regex
|
|
:sort nil
|
|
:initial-input nil))
|
|
|
|
;; add full path to start file and end-file
|
|
(setq start-file-full
|
|
(expand-file-name start-file bjm/conference-image-dir))
|
|
;; generate target file name from current org section
|
|
(setq file-ext
|
|
(file-name-extension start-file t))
|
|
|
|
;; get section heading and clean it up
|
|
(setq end-file-base (s-downcase (s-dashed-words (nth 4 (org-heading-components)))))
|
|
;; shorten to first 40 chars to avoid long file names
|
|
(setq end-file-base (s-left 40 end-file-base))
|
|
;; number to append to ensure unique name
|
|
(setq file-number 1)
|
|
(setq end-file (concat
|
|
end-file-base
|
|
(format "-%s" file-number)
|
|
file-ext))
|
|
|
|
;; increment number at end of name if file exists
|
|
(while (file-exists-p (concat "_resources/" end-file))
|
|
;; increment
|
|
(setq file-number (+ file-number 1))
|
|
(setq end-file (concat
|
|
end-file-base
|
|
(format "-%s" file-number)
|
|
file-ext)))
|
|
|
|
;; final file name including path
|
|
(setq end-file-full
|
|
(expand-file-name end-file target-dir))
|
|
;; rename file
|
|
(rename-file start-file-full end-file-full)
|
|
(message "moved %s to _resources/%s" start-file-full end-file)
|
|
;; insert link
|
|
(insert (org-make-link-string (format "file:_resources/%s" end-file)))
|
|
;; display image
|
|
(org-display-inline-images t t)))
|
|
|
|
(load-library "find-lisp")
|
|
(when (boundp 'enable-personal-agenda)
|
|
(when (is-linux-p)
|
|
(setq org-agenda-files
|
|
(find-lisp-find-files "~/nextcloud/12_tasks" "\.org$"))))
|
|
(when (boundp 'enable-work-agenda)
|
|
(when (is-windows-p)
|
|
(setq org-agenda-files
|
|
(find-lisp-find-files "~/nextcloud/03_documents/org/agenda/work" "\.org$"))))
|
|
|
|
(defun org-update-cookies-after-save()
|
|
(interactive)
|
|
(let ((current-prefix-arg '(4)))
|
|
(org-update-statistics-cookies "ALL")))
|
|
|
|
(add-hook 'org-mode-hook
|
|
(lambda ()
|
|
(add-hook 'before-save-hook 'org-update-cookies-after-save nil 'make-it-local)))
|
|
|
|
(defun org-summary-todo (n-done n-not-done)
|
|
"Switch entry to DONE when all subentries are done, to TODO otherwise."
|
|
(let (org-log-done org-log-states) ; turn off logging
|
|
(org-todo (if (= n-not-done 0) "DONE" "TODO"))))
|
|
|
|
(add-hook 'org-after-todo-statistics-hook 'org-summary-todo))
|
|
|
|
;; keymap for my personal.org file
|
|
(when (boundp 'enable-personal-agenda)
|
|
(when (is-linux-p)
|
|
(global-set-key (kbd "C-c p")
|
|
(lambda () (interactive) (find-file "~/nextcloud/12_tasks/personal.org")))))
|
|
(when (boundp 'enable-work-agenda)
|
|
(when (is-windows-p)
|
|
(global-set-key (kbd "C-c p")
|
|
(lambda () (interactive) (find-file "~/nextcloud/03_documents/org/agenda/work/work.org")))))
|
|
|
|
;; My details
|
|
|
|
(setq user-full-name "Andreas Zweili")
|
|
(setq user-mail-address "andreas@zweili.ch")
|
|
|
|
;; a function to toggle the splits
|
|
(defun toggle-window-split ()
|
|
(interactive)
|
|
(if (= (count-windows) 2)
|
|
(let* ((this-win-buffer (window-buffer))
|
|
(next-win-buffer (window-buffer (next-window)))
|
|
(this-win-edges (window-edges (selected-window)))
|
|
(next-win-edges (window-edges (next-window)))
|
|
(this-win-2nd (not (and (<= (car this-win-edges)
|
|
(car next-win-edges))
|
|
(<= (cadr this-win-edges)
|
|
(cadr next-win-edges)))))
|
|
(splitter
|
|
(if (= (car this-win-edges)
|
|
(car (window-edges (next-window))))
|
|
'split-window-horizontally
|
|
'split-window-vertically)))
|
|
(delete-other-windows)
|
|
(let ((first-win (selected-window)))
|
|
(funcall splitter)
|
|
(if this-win-2nd (other-window 1))
|
|
(set-window-buffer (selected-window) this-win-buffer)
|
|
(set-window-buffer (next-window) next-win-buffer)
|
|
(select-window first-win)
|
|
(if this-win-2nd (other-window 1))))))
|
|
|
|
(define-key ctl-x-map "4" 'toggle-window-split)
|
|
|
|
(defun nebucatnetzer:split-window-below-and-move-cursor ()
|
|
(interactive)
|
|
(split-window-below)
|
|
(other-window 1))
|
|
|
|
(defun nebucatnetzer:split-window-right-and-move-cursor ()
|
|
(interactive)
|
|
(split-window-right)
|
|
(other-window 1))
|
|
|
|
(global-set-key (kbd "C-x 2") 'nebucatnetzer:split-window-below-and-move-cursor)
|
|
(global-set-key (kbd "C-x 3") 'nebucatnetzer:split-window-right-and-move-cursor)
|
|
|
|
;; Spaces instead of TABs
|
|
(setq-default indent-tabs-mode nil)
|
|
(setq-default tab-width 4)
|
|
(setq indent-line-function 'insert-tab)
|
|
|
|
;; keymap for buffer switching
|
|
(global-set-key (kbd "C-x C-b") 'ibuffer)
|
|
(global-set-key (kbd "C-x b") 'ivy-switch-buffer)
|
|
|
|
;; kill THIS buffer
|
|
(global-set-key (kbd "C-x C-k") 'kill-this-buffer)
|
|
|
|
;; copy the complete buffer to the clipboard
|
|
(defun copy-all ()
|
|
"Copy entire buffer to clipboard"
|
|
(interactive)
|
|
(clipboard-kill-ring-save (point-min) (point-max)))
|
|
|
|
(global-set-key (kbd "C-S-c") 'copy-all)
|
|
|
|
;; keybinding for new frame
|
|
(global-set-key (kbd "C-x N") 'make-frame)
|
|
|
|
;; switch to frame
|
|
(global-set-key (kbd "C-x O") 'other-frame)
|
|
|
|
;; kill frame
|
|
(global-set-key (kbd "C-x K") 'delete-frame)
|
|
|
|
;; enable hippie expand on M-Space
|
|
(global-set-key "\M- " 'hippie-expand)
|
|
|
|
(defun switch-to-minibuffer () "Switch to minibuffer window."
|
|
(interactive) (if (active-minibuffer-window)
|
|
(select-window
|
|
(active-minibuffer-window)) (error "Minibuffer is not active")))
|
|
|
|
(bind-key "M-m" 'switch-to-minibuffer)
|
|
|
|
;; file encodings
|
|
(prefer-coding-system 'utf-8-unix)
|
|
|
|
(setq backup-directory-alist
|
|
`((".*" . ,temporary-file-directory)))
|
|
(setq auto-save-file-name-transforms
|
|
`((".*" ,temporary-file-directory t)))
|
|
|
|
;; hide temporary buffers
|
|
(add-hook 'ibuffer-mode-hook
|
|
(lambda ()
|
|
(ibuffer-filter-by-name "^[^*]")))
|
|
|
|
(setq ibuffer-saved-filter-groups
|
|
(quote (("default"
|
|
("Org" ;; all org-related buffers
|
|
(mode . org-mode))
|
|
("Programming" ;; prog stuff not already in MyProjectX
|
|
(or
|
|
(mode . python-mode)
|
|
(mode . web-mode)
|
|
(mode . php-mode)
|
|
(mode . csharp-mode)
|
|
(mode . javascript-mode)
|
|
(mode . sql-mode)
|
|
(mode . powershell-mode)
|
|
(mode . nix-mode)
|
|
(mode . yaml-mode)
|
|
(mode . emacs-lisp-mode)))
|
|
;; etc
|
|
("Dired"
|
|
(mode . dired-mode))))))
|
|
|
|
(add-hook 'ibuffer-mode-hook
|
|
(lambda ()
|
|
(ibuffer-switch-to-saved-filter-groups "default")))
|
|
|
|
;; initial buffers should use text-mode
|
|
(setq-default major-mode 'text-mode)
|
|
|
|
; Calender should start on Monday
|
|
(setq calendar-week-start-day 1)
|
|
|
|
;; ispell settings
|
|
(setenv "DICTIONARY" "en_US")
|
|
(setq ispell-program-name "hunspell")
|
|
(setq ispell-local-dictionary "en_US")
|
|
(setq ispell-local-dictionary-alist
|
|
'(("en_US" "[[:alpha:]]" "[^[:alpha:]]" "[']" nil ("-d" "en_US") nil utf-8)
|
|
("de_CH" "[[:alpha:]]" "[^[:alpha:]]" "[']" nil ("-d" "de_CH") nil utf-8)))
|
|
|
|
;; insert only one space after a period
|
|
(setq sentence-end-double-space nil)
|
|
|
|
; Matches parentheses and such in every mode
|
|
(show-paren-mode 1)
|
|
|
|
;; pair parentheses
|
|
(electric-pair-mode 1)
|
|
|
|
(add-hook 'text-mode-hook 'turn-on-auto-fill)
|
|
|
|
(setq ad-redefinition-action 'accept)
|
|
|
|
(add-hook 'before-save-hook 'whitespace-cleanup)
|
|
|
|
(global-auto-revert-mode t)
|
|
|
|
(setq-default fill-column 79)
|
|
|
|
(setq column-number-mode 1)
|
|
|
|
(when (boundp 'enable-emojis)
|
|
(when (is-linux-p)
|
|
(set-fontset-font t nil "Symbola" nil 'prepend)))
|
|
|
|
(defun kill-other-buffers ()
|
|
"Kill all other buffers."
|
|
(interactive)
|
|
(mapc 'kill-buffer
|
|
(delq
|
|
(current-buffer)
|
|
(buffer-list))))
|
|
|
|
(defun insert-date ()
|
|
"Insert the current date."
|
|
(interactive)
|
|
(let ((format "%d.%m.%Y")
|
|
(system-time-locale "de_CH"))
|
|
(insert (format-time-string format))))
|
|
|
|
(defun insert-iso-date ()
|
|
"Insert the current date in the ISO format."
|
|
(interactive)
|
|
(let ((format "%Y-%m-%d")
|
|
(system-time-locale "de_CH"))
|
|
(insert (format-time-string format))))
|
|
|
|
(defun insert-full-date ()
|
|
"Insert the current date, write out the day and month name."
|
|
(interactive)
|
|
(let ((format "%A, %d. %B %Y")
|
|
(system-time-locale "de_CH"))
|
|
(insert (format-time-string format))))
|
|
|
|
(defun buffer-too-big-p ()
|
|
(or (> (buffer-size) (* 5000 64))
|
|
(> (line-number-at-pos (point-max)) 5000)))
|
|
(defun generic-setup ()
|
|
;; turn off `linum-mode' when there are more than 5000 lines
|
|
(if (buffer-too-big-p) (display-line-numbers-mode -1)))
|
|
|
|
(add-hook 'prog-mode-hook 'generic-setup)
|
|
(add-hook 'text-mode-hook 'generic-setup)
|
|
|
|
(setq history-delete-duplicates t)
|
|
|
|
(xterm-mouse-mode 1)
|
|
|
|
(add-hook 'text-mode-hook (lambda () (electric-indent-local-mode -1)))
|
|
|
|
(add-hook 'eshell-mode-hook
|
|
(lambda ()
|
|
(setq pcomplete-cycle-completions nil)))
|
|
|
|
(setq tramp-default-method "ssh")
|
|
|
|
(when (boundp 'enable-auctex)
|
|
(defun LaTeX-collapse-table ()
|
|
(interactive)
|
|
(save-excursion
|
|
(LaTeX-mark-environment)
|
|
(while (re-search-forward "[[:space:]]+\\(&\\|\\\\\\\\\\)" (region-end) t)
|
|
(replace-match " \\1"))))
|
|
|
|
(defun LaTeX-align-environment (arg)
|
|
(interactive "P")
|
|
(if arg
|
|
(LaTeX-collapse-table)
|
|
(save-excursion
|
|
(LaTeX-mark-environment)
|
|
(align (region-beginning) (region-end))))))
|
|
|
|
(when (boundp 'enable-auctex)
|
|
(defcustom LaTeX-inhibited-auto-fill-environments
|
|
'("tabular" "tikzpicture") "For which LaTeX environments not to run auto-fill.")
|
|
|
|
(defun LaTeX-limited-auto-fill ()
|
|
(let ((environment (LaTeX-current-environment)))
|
|
(when (not (member environment LaTeX-inhibited-auto-fill-environments))
|
|
(do-auto-fill)))))
|
|
|
|
(when (boundp 'enable-auctex)
|
|
(global-set-key (kbd "C-c f") 'LaTeX-align-environment)
|
|
(setq auto-fill-function 'LaTeX-limited-auto-fill))
|
|
|
|
(put 'dired-find-alternate-file 'disabled nil)
|
|
|
|
(setq-default dired-listing-switches "-alh")
|
|
|
|
;; keymap for dired
|
|
(global-set-key (kbd "C-c d") 'dired-jump)
|
|
|
|
(bind-keys :map dired-mode-map ("q" . az-kill-dired-buffers))
|
|
|
|
;;a function to kill all dired buffers
|
|
(defun az-kill-dired-buffers ()
|
|
(interactive)
|
|
(mapc (lambda (buffer)
|
|
(when (eq 'dired-mode (buffer-local-value 'major-mode buffer))
|
|
(kill-buffer buffer)))
|
|
(buffer-list)))
|
|
|
|
(use-package dired-hide-dotfiles
|
|
:ensure t
|
|
:init
|
|
(defun my-dired-mode-hook ()
|
|
"My `dired' mode hook."
|
|
;; To hide dot-files by default
|
|
(dired-hide-dotfiles-mode)
|
|
|
|
;; To toggle hiding
|
|
|
|
(add-hook 'dired-mode-hook #'my-dired-mode-hook))
|
|
:bind
|
|
(:map dired-mode-map
|
|
("." . dired-hide-dotfiles-mode)))
|