;;; oni-core.el --- Core Emacs configuration -*- lexical-binding: t; -*- ;; Copyright (C) 2019 Tom Willemse ;; Author: Tom Willemse ;; Keywords: local ;; Version: 2020.1019.134634 ;; Package-Requires: (oni-data-dir expand-region multiple-cursors embrace gcmh diminish ws-butler) ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; Core Emacs configuration, doesn't need any requires from within ;; Emacs. These settings don't seem to go anywhere else. ;;; Code: (require 'diminish) (require 'gcmh) (require 'oni-data-dir) (require 'recentf) (require 'ws-butler) (defconst oni-core--auto-save-directory (oni-data-dir-locate "auto-save-files/") "Directory where auto-saves go.") (defalias 'yes-or-no-p 'y-or-n-p) (defvar oni-core--recentf-idle-timer nil "Internal variable keeping track of a timer started for ‘recentf-save-list’.") (defun oni-core--switch-newline-keys () "Switch the ‘C-j’ and ‘RET’ keys in the local buffer." (if electric-indent-mode (progn (local-set-key (kbd "C-j") 'newline) (local-set-key (kbd "RET") 'electric-newline-and-maybe-indent)) (local-unset-key (kbd "C-j")) (local-unset-key (kbd "RET")))) (defun oni-core--ensure-autosave-directory-exists () "Create the autosave directory if doesn't exist." (mkdir oni-core--auto-save-directory t)) (defun oni-core-move-beginning-of-dwim () "Move to beginning of line either after indentation or before." (interactive) (let ((start (point))) (back-to-indentation) (unless (/= start (point)) (move-beginning-of-line 1)))) (defun oni-core-move-end-of-dwim () "Move to end of line, either before any comments or after." (interactive) (let ((start (point)) (eolpos (line-end-position))) (beginning-of-line) (if (and comment-start (not (looking-at (regexp-quote comment-start))) (comment-search-forward eolpos t)) (progn (search-backward-regexp (concat "[^ \t" comment-start "]")) (forward-char) (when (or (bolp) (= start (point))) (end-of-line))) (end-of-line)))) (defun oni-core-recentf-save-list-silently () "Call ‘recentf-save-list’ but without showing a message about it." (let ((inhibit-message t)) (recentf-save-list))) (add-to-list 'auto-save-file-name-transforms `(".*" ,oni-core--auto-save-directory t) :append) (setq backup-directory-alist `((".*" . ,(oni-data-dir-locate "backup-files")))) (setq auto-save-list-file-prefix (oni-data-dir-locate "auto-save-list/.saves-")) (setq abbrev-file-name (oni-data-dir-locate "abbrev_defs")) (setq recentf-save-file (oni-data-dir-locate "recentf")) ;;; Get rid of the default help tooltip on the mode-line. (setq mode-line-default-help-echo nil) (setq user-full-name "Tom Willemse" user-mail-address "tom@ryuslash.org") (setq delete-old-versions t) (setq kept-new-versions 20) (setq kept-old-versions 20) (setq vc-make-backup-files t) (setq version-control t) (setq require-final-newline t) (setq sentence-end-double-space nil) (setq inhibit-startup-screen t) (setq electric-pair-skip-whitespace 'chomp) (setq fit-window-to-buffer-horizontally t) ;; Increase the threshold for garbage collection for increased performance. ;; Apparently there are some (lsp-mode for example) packages that generate a lot ;; of garbage. (setq gc-cons-threshold 100000000) (setq auth-sources (remove "~/.authinfo" auth-sources)) (setq-default indent-tabs-mode nil) (setq-default tab-width 4) (setq-default truncate-lines t) (setq-default fill-column 80) (add-hook 'before-save-hook 'time-stamp) (add-hook 'electric-indent-local-mode-hook #'oni-core--switch-newline-keys) (add-hook 'minibuffer-setup-hook 'electric-pair-local-mode) (add-hook 'prog-mode-hook 'goto-address-prog-mode) (add-hook 'auto-save-hook #'oni-core--ensure-autosave-directory-exists) (add-hook 'after-save-hook 'executable-make-buffer-file-executable-if-script-p) (global-set-key (kbd "C-M-SPC") 'er/expand-region) (global-set-key (kbd "M-+") 'mc/mark-next-like-this) (global-set-key (kbd "C-c (") 'embrace-commander) (global-set-key (kbd "C-x M-f") 'ffap) (global-set-key (kbd "C-x C-b") 'ibuffer-jump) (global-set-key [remap move-beginning-of-line] #'oni-core-move-beginning-of-dwim) (global-set-key [remap move-end-of-line] #'oni-core-move-end-of-dwim) (global-set-key (kbd "C-S-n") 'windmove-down) (global-set-key (kbd "C-S-p") 'windmove-up) (global-set-key (kbd "C-S-f") 'windmove-right) (global-set-key (kbd "C-S-b") 'windmove-left) (global-set-key (kbd "C-") 'winner-undo) (global-set-key (kbd "C-") 'winner-redo) (unless oni-core--recentf-idle-timer (setq oni-core--recentf-idle-timer (run-with-idle-timer 10 t #'oni-core-recentf-save-list-silently))) (diminish 'gcmh-mode) (diminish 'ws-butler-mode) (electric-indent-mode -1) (winner-mode) (recentf-mode) (gcmh-mode) (ws-butler-global-mode) (add-to-list 'display-buffer-alist `(,(rx string-start "*" (any ?h ?H) "elp") display-buffer-in-side-window (side . bottom) (slot . 0) (window-height . 0.33))) (when (eql system-type 'windows-nt) (add-to-list 'load-path (locate-user-emacs-file "vendor/p4-vc")) (add-to-list 'exec-path "c:/Program Files/Git/bin") (add-to-list 'exec-path "C:/Program Files/Git/usr/bin") (add-to-list 'exec-path "c:/cygwin64/bin") (setq delete-by-moving-to-trash t) (setq-default buffer-file-coding-system 'utf-8-unix)) ;;;###autoload(require 'oni-core) (provide 'oni-core) ;;; oni-core.el ends here