669 lines
20 KiB
EmacsLisp
669 lines
20 KiB
EmacsLisp
;; add melpa
|
|
(package-initialize)
|
|
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
|
|
|
|
;; sets :defer t in use-package as default
|
|
;; (setq use-package-always-defer t)
|
|
|
|
;; remove menu bar, tool bar, scroll bar
|
|
(menu-bar-mode 0)
|
|
(tool-bar-mode 0)
|
|
(scroll-bar-mode 0)
|
|
|
|
;; highlight parens when on them
|
|
(show-paren-mode 1)
|
|
|
|
;; better line numbers
|
|
(global-display-line-numbers-mode)
|
|
|
|
(setq display-line-numbers 'relative)
|
|
|
|
;; y or n instead of yes or no
|
|
(setopt use-short-answers t)
|
|
|
|
;; dynamic loading of file in init dir to put custom
|
|
(setq custom-file (replace-regexp-in-string "/[^/]+$" "/custom.el" user-init-file))
|
|
(load custom-file)
|
|
|
|
;; enable dracula theme
|
|
;; (use-package dracula-theme :ensure t :config (load-theme 'dracula) :hook after-init)
|
|
;; mark dracula as safe, so it doesnt have to be in custom.el
|
|
;; (setq custom-safe-themes
|
|
;; '("0223215a464167d93b9cfef9b1cdf9b0768ab660f33b3068b647f7b12aa453a0"
|
|
;; "0223215a464167d93b9cfef9b1cdf9b0768ab660f33b3068b647f7b12aa453a0"
|
|
;; default))
|
|
;; (use-package dracula-theme :ensure t :config (load-theme 'dracula))
|
|
;; (use-package gruber-darker-theme :ensure t :config (load-theme 'gruber-darker))
|
|
;; (load-theme 'modus-vivendi-tinted)
|
|
(load-theme 'modus-operandi-tinted)
|
|
;; fixes line number scaling:
|
|
(set-face-attribute 'line-number nil :inherit 'default)
|
|
|
|
|
|
|
|
;; add time in modeline
|
|
(setopt display-time-format "%a %d %T")
|
|
(setopt display-time-interval 1)
|
|
(display-time-mode)
|
|
;; add column number in modeline
|
|
(column-number-mode 1)
|
|
|
|
;; add which key
|
|
(use-package which-key :ensure t :hook after-init)
|
|
(which-key-mode)
|
|
|
|
;; install and add hook(s) for paredit mode
|
|
(use-package paredit :ensure t)
|
|
|
|
(defun turn-on-paredit ()
|
|
(interactive)
|
|
(paredit-mode))
|
|
|
|
(add-hook 'emacs-lisp-mode-hook 'turn-on-paredit)
|
|
|
|
|
|
(use-package emacs-everywhere :ensure t :hook after-init)
|
|
|
|
;; --- from better-defaults ---
|
|
;; ibuffer as default buffer list
|
|
(global-set-key (kbd "C-x C-b") 'ibuffer)
|
|
|
|
;; regex isearches as default
|
|
(global-set-key (kbd "C-s") 'isearch-forward-regexp)
|
|
(global-set-key (kbd "C-r") 'isearch-backward-regexp)
|
|
(global-set-key (kbd "C-M-S-s") 'isearch-forward)
|
|
(global-set-key (kbd "C-M-S-r") 'isearch-backward)
|
|
|
|
;; (global-set-key (kbd "C-M-s") 'isearch-forward-regexp)
|
|
;; (global-set-key (kbd "C-M-r") 'isearch-backward-regexp)
|
|
|
|
|
|
|
|
;; i don't really use find-file-read-only so i switched in recentf
|
|
(global-set-key (kbd "C-x C-S-r") 'find-file-read-only)
|
|
(global-set-key (kbd "C-x C-r") 'recentf)
|
|
;; apropos?
|
|
(setq apropos-do-all t)
|
|
|
|
;; ignore case for file name, buffer name, competion
|
|
(setq read-file-name-completion-ignore-case t)
|
|
(setq read-buffer-completion-ignore-case t)
|
|
(setq completion-ignore-case t)
|
|
|
|
;; --- from emacs bedrock ---
|
|
|
|
;; Automatically reread from disk if the underlying file changes
|
|
(setopt auto-revert-avoid-polling t)
|
|
;; Some systems don't do file notifications well; see
|
|
;; https://todo.sr.ht/~ashton314/emacs-bedrock/11
|
|
(setopt auto-revert-interval 5)
|
|
(setopt auto-revert-check-vc-info t)
|
|
(global-auto-revert-mode)
|
|
|
|
|
|
;; Move through windows with Ctrl-<arrow keys>
|
|
;; (windmove-default-keybindings 'control) ; You can use other modifiers here
|
|
|
|
;; Fix archaic defaults
|
|
(setopt sentence-end-double-space nil)
|
|
|
|
;; magit <3
|
|
(use-package magit
|
|
:ensure t
|
|
:bind (("C-x g" . magit-status)))
|
|
|
|
;; (add-hook 'prog-mode 'electric-pair-mode)
|
|
|
|
|
|
;; completion stuff
|
|
|
|
;; Vertico: better vertical completion for minibuffer commands
|
|
(use-package vertico
|
|
:ensure t
|
|
:init
|
|
;; You'll want to make sure that e.g. fido-mode isn't enabled
|
|
(vertico-mode))
|
|
|
|
(use-package vertico-directory
|
|
:ensure nil
|
|
:after vertico
|
|
:bind (:map vertico-map
|
|
("M-DEL" . vertico-directory-delete-word)))
|
|
|
|
(use-package consult
|
|
:ensure t
|
|
:bind (
|
|
;; Drop-in replacements
|
|
("C-x b" . consult-buffer) ; orig. switch-to-buffer
|
|
("M-y" . consult-yank-pop) ; orig. yank-pop
|
|
;; Searching
|
|
("C-S-f". consult-fd)
|
|
("C-S-r" . consult-ripgrep)
|
|
("C-S-s" . consult-line) ; Alternative: rebind C-s to use
|
|
("M-s s" . consult-line) ; consult-line instead of isearch, bind
|
|
("M-s L" . consult-line-multi) ; isearch to M-s s
|
|
("M-s o" . consult-outline)
|
|
;; Isearch integration
|
|
:map isearch-mode-map
|
|
("M-e" . consult-isearch-history) ; orig. isearch-edit-string
|
|
("M-s e" . consult-isearch-history) ; orig. isearch-edit-string
|
|
("M-s l" . consult-line) ; needed by consult-line to detect isearch
|
|
("M-s L" . consult-line-multi) ; needed by consult-line to detect innsearch
|
|
)
|
|
:config
|
|
;; Narrowing lets you restrict results to certain groups of candidates
|
|
(setq consult-narrow-key "<"))
|
|
|
|
;; Vertico: better vertical completion for minibuffer commands
|
|
(use-package vertico
|
|
:ensure t
|
|
:init
|
|
;; You'll want to make sure that e.g. fido-mode isn't enabled
|
|
(vertico-mode))
|
|
|
|
(use-package vertico-directory
|
|
:ensure nil
|
|
:after vertico
|
|
:bind (:map vertico-map
|
|
("M-DEL" . vertico-directory-delete-word)))
|
|
|
|
;; Marginalia: annotations for minibuffer
|
|
(use-package marginalia
|
|
:ensure t
|
|
:config
|
|
(marginalia-mode))
|
|
|
|
;; Corfu: Popup completion-at-point
|
|
(use-package corfu
|
|
:ensure t
|
|
:init
|
|
(global-corfu-mode)
|
|
:bind
|
|
(:map corfu-map
|
|
("SPC" . corfu-insert-separator)
|
|
("C-n" . corfu-next)
|
|
("C-p" . corfu-previous)))
|
|
|
|
;; Part of corfu
|
|
(use-package corfu-popupinfo
|
|
:after corfu
|
|
:ensure nil
|
|
:hook (corfu-mode . corfu-popupinfo-mode)
|
|
:custom
|
|
(corfu-popupinfo-delay '(0.25 . 0.1))
|
|
(corfu-popupinfo-hide nil)
|
|
:config
|
|
(corfu-popupinfo-mode))
|
|
|
|
;; Make corfu popup come up in terminal overlay
|
|
(use-package corfu-terminal
|
|
:if (not (display-graphic-p))
|
|
:ensure t
|
|
:config
|
|
(corfu-terminal-mode))
|
|
|
|
;; Fancy completion-at-point functions; there's too much in the cape package to
|
|
;; configure here; dive in when you're comfortable!
|
|
(use-package cape
|
|
:ensure t
|
|
:init
|
|
(add-to-list 'completion-at-point-functions #'cape-dabbrev)
|
|
(add-to-list 'completion-at-point-functions #'cape-file))
|
|
|
|
;; Pretty icons for corfu
|
|
(use-package kind-icon
|
|
:if (display-graphic-p)
|
|
:ensure t
|
|
:after corfu
|
|
:config
|
|
(add-to-list 'corfu-margin-formatters #'kind-icon-margin-formatter))
|
|
|
|
;; Orderless: powerful completion style
|
|
(use-package orderless
|
|
:ensure t
|
|
:config
|
|
(setq completion-styles '(orderless)))
|
|
|
|
|
|
|
|
|
|
;; highlight todo
|
|
;; (use-package hl-todo :ensure t :hook (prog-mode . hl-todo-mode) (latex-mode . hl-todo-mode))
|
|
(use-package hl-todo :ensure t)
|
|
(global-hl-todo-mode)
|
|
(setq hl-todo-keyword-faces
|
|
'(("TODO" . "#FF0000")
|
|
("FIXME" . "#FF0000")
|
|
("DEBUG" . "#A020F0")
|
|
("GOTCHA" . "#FF4500")
|
|
("STUB" . "#1E90FF")))
|
|
(add-hook 'after-init-hook 'hl-todo-mode)
|
|
|
|
;; with magit
|
|
(with-eval-after-load 'magit
|
|
(add-hook 'magit-log-wash-summary-hook
|
|
#'hl-todo-search-and-highlight t)
|
|
(add-hook 'magit-revision-wash-message-hook
|
|
#'hl-todo-search-and-highlight t))
|
|
|
|
;; make color codes be highlighted in their color
|
|
(use-package rainbow-mode :ensure t :hook (prog-mode . rainbow-mode))
|
|
(add-hook 'after-init-hook 'rainbow-mode)
|
|
|
|
|
|
;; TODO add fast rudimentary spell check
|
|
;; leaving this in for now, maybe i could add fast rudimentary spell checking and then use languagetool for slower more thorough spell checks
|
|
;; doesnt work yet?
|
|
;; it should only do these when ispell is loaded
|
|
;; idk
|
|
;; (eval-after-load "ispell"
|
|
;; '(progn
|
|
;; (setq ispell-really-hunspell)
|
|
;; (setq ispell-program-name "hunspell")
|
|
;; (setq ispell-dictionary "en_US,de_DE")
|
|
;; (ispell-set-spellchecker-params)
|
|
;; (ispell-hunspell-add-multi-dic "en_US,de_DE")))
|
|
|
|
|
|
|
|
|
|
(use-package flycheck :ensure t :hook after-init)
|
|
;; (use-package flycheck-languagetool
|
|
;; :ensure t
|
|
;; :hook (text-mode . flycheck-languagetool-setup)
|
|
;; :init
|
|
;; (setq flycheck-languagetool-server-jar "~/.languagetool-server.jar"))
|
|
|
|
|
|
(use-package company :ensure t :hook after-init)
|
|
(add-hook 'after-init-hook 'global-company-mode)
|
|
|
|
|
|
;;; multiple cursors
|
|
(use-package multiple-cursors
|
|
:ensure t
|
|
|
|
:hook after-init
|
|
:bind (
|
|
( "C-S-c" . mc/edit-lines)
|
|
( "C->" . mc/mark-next-like-this)
|
|
( "C-<" . mc/mark-previous-like-this)
|
|
( "C-c C-<" . mc/mark-all-like-this)
|
|
( "C-^\"" . mc/skip-to-next-like-this)
|
|
( "C-:" . mc/skip-to-previous-like-this)
|
|
)
|
|
)
|
|
|
|
(setq mc/always-run-for-all t)
|
|
;; make emacs remember last session
|
|
(setq save-place-file (concat user-emacs-directory ".saveplace"))
|
|
(setq desktop-dirname (concat user-emacs-directory ".desktop.d"))
|
|
;; (setq-default save-place t)
|
|
;; (require 'saveplace)
|
|
(save-place-mode 1)
|
|
(desktop-save-mode 1)
|
|
|
|
(setq recentf-save-file (concat user-emacs-directory ".recentf"))
|
|
;; Save history of minibuffer
|
|
(savehist-mode)
|
|
(setq savehist-file (concat user-emacs-directory ".history"))
|
|
|
|
|
|
;; Helpful resources:
|
|
;;
|
|
;; - https://www.masteringemacs.org/article/seamlessly-merge-multiple-documentation-sources-eldoc
|
|
|
|
(use-package eglot
|
|
;; no :ensure t here because it's built-in
|
|
;; Configure hooks to automatically turn-on eglot for selected modes
|
|
; :hook
|
|
; (((python-mode ruby-mode elixir-mode) . eglot-ensure))
|
|
:custom
|
|
(eglot-send-changes-idle-time 0.1)
|
|
(eglot-extend-to-xref t) ; activate Eglot in referenced non-project files
|
|
:config
|
|
(fset #'jsonrpc--log-event #'ignore) ; massive perf boost---don't log every event
|
|
;; Sometimes you need to tell Eglot where to find the language server
|
|
; (add-to-list 'eglot-server-programs
|
|
; '(haskell-mode . ("haskell-language-server-wrapper" "--lsp")))
|
|
)
|
|
|
|
;; spell checking with languagetool, slow but thorough
|
|
;; downloaded:
|
|
;; https://languagetool.org/download/ngram-data/ngrams-de-20150819.zip
|
|
;; https://languagetool.org/download/ngram-data/ngrams-en-20150817.zip
|
|
;; https://languagetool.org/download/LanguageTool-stable.zip
|
|
;; and put them in a directory like this:
|
|
;; emacs-init-dir/.languagetool/contents of LanguageTool-stable.zip like languagetool-server
|
|
;; emacs-init-dir/.languagetool/contents of ngram.* like de or en
|
|
(use-package languagetool
|
|
:ensure t
|
|
|
|
:commands (languagetool-check
|
|
languagetool-clear-suggestions
|
|
languagetool-correct-at-point
|
|
languagetool-correct-buffer
|
|
languagetool-set-language
|
|
languagetool-server-mode
|
|
languagetool-server-start
|
|
languagetool-server-stop)
|
|
:config (setq languagetool-java-arguments '("-Dfile.encoding=UTF-8")
|
|
languagetool-console-command (concat user-emacs-directory "languagetool/languagetool-commandline.jar")
|
|
languagetool-console-arguments (list "--languagemodel" (concat user-emacs-directory "languagetool/ngram-data"))
|
|
languagetool-server-command (concat user-emacs-directory "languagetool/languagetool-server.jar")
|
|
languagetool-server-arguments (list "--languageModel" (concat user-emacs-directory "languagetool/ngram-data"))
|
|
)
|
|
)
|
|
|
|
|
|
|
|
;; TODO make languagetool language toggle function
|
|
;; defun my/languagetool-toggle-language
|
|
;; switch between auto, en, de
|
|
;; have it be auto or de by default and then switch either to en or to de
|
|
;; like auto -> de
|
|
;; or de -> en
|
|
;; or maybe just like that
|
|
;; first auto then de then en
|
|
;; TODO evaluate how i wanna do this
|
|
|
|
|
|
|
|
;; (with-eval-after-load 'eglot
|
|
;; (add-to-list 'eglot-server-programs
|
|
;; '(text-mode . ("harper-ls" "--stdio"))
|
|
;; '(markdown-mode . ("harper-ls" "--stdio"))
|
|
;; ))
|
|
|
|
;; make screen flash instead of annoying bell
|
|
(setq visible-bell t)
|
|
|
|
;; bind super - m to maximize emacs-everywhere
|
|
(global-set-key (kbd "s-m") 'toggle-frame-maximized)
|
|
|
|
;; for Calendar
|
|
(setq calendar-week-start-day 1)
|
|
|
|
(setq calendar-intermonth-text
|
|
'(propertize
|
|
(format "%2d"
|
|
(car
|
|
(calendar-iso-from-absolute
|
|
(calendar-absolute-from-gregorian (list month day year)))))
|
|
'font-lock-face 'font-lock-warning-face))
|
|
|
|
(setq calendar-intermonth-header
|
|
(propertize "W" ; or e.g. "KW" in Germany
|
|
'font-lock-face 'font-lock-keyword-face))
|
|
|
|
(setq calendar-set-date-style 'european)
|
|
|
|
(setq calendar-month-header
|
|
'(propertize
|
|
(format "%s (%d) %d" (calendar-month-name month) month year)
|
|
'font-lock-face 'calendar-month-header))
|
|
|
|
|
|
;; stole from prelude:
|
|
|
|
;; reduce the frequency of garbage collection by making it happen on
|
|
;; each 50MB of allocated data (the default is on every 0.76MB)
|
|
(setq gc-cons-threshold 50000000)
|
|
|
|
;; warn when opening files bigger than 100MB
|
|
(setq large-file-warning-threshold 100000000)
|
|
|
|
;; latex
|
|
(use-package pdf-tools :ensure t)
|
|
(pdf-tools-install)
|
|
(setq pdf-annot-activate-created-annotations t)
|
|
(setq pdf-view-resize-factor 1.1)
|
|
;; pdfview
|
|
;; (add-hook 'pdf-view-mode-hook (lambda () (pdf-view-themed-minor-mode t)))
|
|
(setq pdf-view-themed-minor-mode t)
|
|
(add-to-list 'pdf-view-incompatible-modes 'display-line-numbers-mode)
|
|
(add-hook 'pdf-view-mode-hook (lambda () (display-line-numbers-mode -1)))
|
|
(add-hook 'pdf-view-mode-hook (lambda () (hl-todo-mode)))
|
|
(add-hook 'TeX-after-compilation-finished-functions #'TeX-revert-document-buffer)
|
|
|
|
(add-hook 'LaTeX-mode-hook 'TeX-source-correlate-mode)
|
|
(setq TeX-source-correlate-method 'synctex)
|
|
|
|
;; (with-eval-after-load 'tex
|
|
;; (add-to-list 'TeX-view-program-selection
|
|
;; '(output-pdf ("PDF Tools"))))
|
|
(setq TeX-view-program-selection '((output-pdf "PDF Tools"))
|
|
TeX-source-correlate-start-server t)
|
|
|
|
;; idk
|
|
;; (define-key LaTeX-mode-map (kbd "C-c C-x") (TeX-command (TeX-command-default (TeX-master-file)) 'TeX-master-file -1))
|
|
|
|
;; for pdf tools run (pdf-tools-install)
|
|
|
|
(use-package auctex :ensure t)
|
|
(use-package company-auctex :ensure t)
|
|
(company-auctex-init)
|
|
(use-package auctex-latexmk :ensure t)
|
|
(auctex-latexmk-setup)
|
|
(use-package latex-preview-pane :ensure t)
|
|
(latex-preview-pane-enable)
|
|
(use-package company-math :ensure t)
|
|
(add-to-list 'company-backends 'company-math-symbols-unicode)
|
|
|
|
|
|
(use-package citar
|
|
:ensure t
|
|
:custom
|
|
(org-cite-global-bibliography '("~/Bachelor/Literatur/Bibliothek/Bibliothek.bib"))
|
|
(citar-bibliography '("~/Bachelor/Literatur/Bibliothek/Bibliothek.bib")))
|
|
|
|
(define-key LaTeX-mode-map (kbd "C-c c") 'citar-insert-citation)
|
|
|
|
;; make invisible characters visible
|
|
(setq glyphless-char-display-control '((format-control . empty-box) (variation-selectors . thin-space) (no-font . hex-code)))
|
|
|
|
(use-package yasnippet :ensure t)
|
|
|
|
(setq yas-snippet-dirs
|
|
'("~/.emacs.d/snippets" ;; personal snippets
|
|
))
|
|
(yas-reload-all)
|
|
(yas-global-mode 1) ;; or M-x yas-reload-all if you've started YASnippet already.
|
|
|
|
;; Add yasnippet support for all company backends
|
|
;; https://github.com/syl20bnr/spacemacs/pull/179
|
|
(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))
|
|
|
|
;; vterm
|
|
;; vterm doesnt work on windows so I'm only installing it, if the system is not windows
|
|
(if (not (eq system-type 'windows-nt))
|
|
(use-package vterm :ensure t))
|
|
|
|
;; (setq doom-font (font-spec :family "Go Mono" :size 18))
|
|
;; (setq doom-variable-pitch-font (font-spec :family "Alegreya" :size 20))
|
|
;; (append mixed-pitch-fixed-pitch-faces '(line-number line-number-current-line cursor))
|
|
|
|
|
|
(windmove-default-keybindings)
|
|
|
|
(global-font-lock-mode)
|
|
|
|
|
|
|
|
;; for guile scheme
|
|
(use-package geiser-guile :ensure t)
|
|
|
|
;; TODO: git-timemachine
|
|
;; TODO: mu4e
|
|
;; TODO: mindstream
|
|
;; TODO: goggles
|
|
;; TODO: vc gutter
|
|
;; TODO: look at this: https://baty.net/posts/2025/03/i-went-a-little-nuts-with-remember-mode-in-emacs/
|
|
|
|
;; csv mode
|
|
|
|
(use-package csv-mode :ensure t)
|
|
|
|
;; for better csv handling
|
|
;; disable line wrap
|
|
(add-hook 'csv-mode-hook (lambda () (visual-line-mode 'nil)))
|
|
(add-hook 'csv-mode-hook (lambda () (toggle-truncate-lines 't)))
|
|
;; auto detect separator
|
|
(add-hook 'csv-mode-hook 'csv-guess-set-separator)
|
|
;; turn on field alignment
|
|
(add-hook 'csv-mode-hook 'csv-align-mode)
|
|
;; add csv header line
|
|
(add-hook 'csv-mode-hook 'csv-header-line)
|
|
|
|
|
|
(defun toggle-csv-mode ()
|
|
"Toggle my CSV mode, with extra settings."
|
|
(interactive)
|
|
(with-current-buffer (current-buffer) (if (eq major-mode 'csv-mode)
|
|
(progn
|
|
(text-mode)
|
|
(visual-line-mode 't)
|
|
(toggle-truncate-lines 'nil)
|
|
(csv-align-mode 0)
|
|
(message "deactivated csv-mode"))
|
|
(progn
|
|
(csv-mode)
|
|
(font-lock-mode)
|
|
(message "activated csv-mode")))))
|
|
|
|
;; (global-set-key (kbd "C-c ;") 'toggle-csv-mode)
|
|
(define-key csv-mode-map (kbd "C-c ;") 'toggle-csv-mode)
|
|
|
|
;; (global-set-key (kbd "C-x S-u") 'undo-redo)
|
|
;; doesn't work for some reason:
|
|
;; https://stackoverflow.com/questions/24177014/how-to-create-a-case-sensitive-keybinding-in-emacs
|
|
;; https://stackoverflow.com/questions/38180797/why-the-key-binding-m-s-t-fails-while-c-s-t-works
|
|
;; https://emacs.stackexchange.com/questions/83254/clarification-on-how-emacs-binds-capital-letters
|
|
|
|
(global-set-key (kbd "C-x U") 'undo-redo)
|
|
|
|
|
|
(use-package ob-cypher
|
|
:ensure t
|
|
:config
|
|
(add-to-list 'org-babel-load-languages '(cypher . t))
|
|
(org-babel-do-load-languages 'org-babel-load-languages org-babel-load-languages)
|
|
(add-to-list 'org-babel-tangle-lang-exts '("cypher" . "cypher")))
|
|
|
|
(setq dired-dwim-target t)
|
|
|
|
|
|
;; from https://emacsredux.com/blog/2026/04/07/stealing-from-the-best-emacs-configs/
|
|
|
|
;; Disable Bidirectional Text Scanning
|
|
(setq-default bidi-display-reordering 'left-to-right
|
|
bidi-paragraph-direction 'left-to-right)
|
|
(setq bidi-inhibit-bpa t)
|
|
|
|
;; Skip Fontification During Input
|
|
(setq redisplay-skip-fontification-on-input t)
|
|
|
|
;; Increase Process Output Buffer for LSP
|
|
(setq read-process-output-max (* 4 1024 1024)) ; 4MB
|
|
|
|
;; Save the Clipboard Before Killing
|
|
(setq save-interprogram-paste-before-kill t)
|
|
|
|
;; No Duplicates in the Kill Ring
|
|
(setq kill-do-not-save-duplicates t)
|
|
|
|
;; Persist the Kill Ring Across Sessions
|
|
(setq savehist-additional-variables
|
|
'(search-ring regexp-search-ring kill-ring))
|
|
;; Strip text properties before saving to kill ring
|
|
(add-hook 'savehist-save-hook
|
|
(lambda ()
|
|
(setq kill-ring
|
|
(mapcar #'substring-no-properties
|
|
(cl-remove-if-not #'stringp kill-ring)))))
|
|
|
|
;; Repeat mode
|
|
(repeat-mode 1)
|
|
|
|
;; Live Regexp Feedback
|
|
(minibuffer-regexp-mode 1)
|
|
;; keep M-x re-builder in mind
|
|
(setq reb-re-syntax 'string)
|
|
|
|
;; Auto-Chmod Scripts on Save
|
|
(add-hook 'after-save-hook
|
|
#'executable-make-buffer-file-executable-if-script-p)
|
|
|
|
;; Prevent ffap from Pinging Hostnames
|
|
(setq ffap-machine-p-known 'reject)
|
|
|
|
;; Proportional Window Resizing
|
|
(setq window-combination-resize t)
|
|
|
|
;; Reversible C-x 1
|
|
(winner-mode +1)
|
|
|
|
(defun toggle-delete-other-windows ()
|
|
"Delete other windows in frame if any, or restore previous window config."
|
|
(interactive)
|
|
(if (and winner-mode
|
|
(equal (selected-window) (next-window)))
|
|
(winner-undo)
|
|
(delete-other-windows)))
|
|
|
|
(global-set-key (kbd "C-x 1") #'toggle-delete-other-windows)
|
|
|
|
;; Faster Mark Popping
|
|
;; after the first C-u C-SPC you can keep pressing just C-SPC to continue popping
|
|
(setq set-mark-command-repeat-pop t)
|
|
|
|
;; Auto-Select Help Window
|
|
(setq help-window-select t)
|
|
|
|
;; Recenter After save-place Restores Position
|
|
(advice-add 'save-place-find-file-hook :after
|
|
(lambda (&rest _)
|
|
(when buffer-file-name (ignore-errors (recenter)))))
|
|
|
|
;; Reveal.js + Org mode
|
|
(use-package ox-reveal :ensure t :after org )
|
|
;; (require 'ox-reveal)
|
|
;; (setq Org-Reveal-title-slide nil)
|
|
|
|
(setq dired-dwim-target t)
|
|
|
|
;; recovery utf8 function:
|
|
;; \344 ä
|
|
;; \366 ö
|
|
;; \374 ü
|
|
;; \337 ß
|
|
|
|
(prefer-coding-system 'utf-8)
|
|
(set-default-coding-systems 'utf-8)
|
|
(set-terminal-coding-system 'utf-8)
|
|
(set-keyboard-coding-system 'utf-8)
|
|
;; backwards compatibility as default-buffer-file-coding-system
|
|
;; is deprecated in 23.2.
|
|
|
|
(if (boundp 'buffer-file-coding-system)
|
|
(setq-default buffer-file-coding-system 'utf-8)
|
|
(setq default-buffer-file-coding-system 'utf-8)
|
|
)
|
|
|
|
;; Treat clipboard input as UTF-8 string first; compound text next, etc.
|
|
(setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING))
|
|
|
|
|
|
;; flycheck told me to do this:
|
|
(provide 'init)
|
|
;;; init.el ends here
|