From 229647da08c6db68c7aba112ad8a5c4213cb5619 Mon Sep 17 00:00:00 2001 From: Aryadev Chavali Date: Sun, 9 Aug 2020 14:10:17 +0100 Subject: ~long lines -> auto-fill-mode In my config.org, and from now on in all text documents, auto fill mode will be employed. I've added a text-mode-hook for auto-fill-mode. I've found difficulty in handling long lines through truncate lines, which doesn't have full control over movement in lines that run over the terminal width. I've had to use '$' or move-end-of-line to move to a point which visually should just require next-line to move to. This inconsistency between visuals and movement is very frustrating and abrupt when it occurs. Though auto fill mode has its own issues (sets all text to 80 characters, which can be annoying in terms of version control) it is far better than any other solution that I can find. --- Emacs/.config/emacs/config.org | 197 ++++++++++++++++++++++++++--------------- 1 file changed, 126 insertions(+), 71 deletions(-) (limited to 'Emacs/.config/emacs/config.org') diff --git a/Emacs/.config/emacs/config.org b/Emacs/.config/emacs/config.org index 2f1062b..2afce3a 100644 --- a/Emacs/.config/emacs/config.org +++ b/Emacs/.config/emacs/config.org @@ -20,13 +20,15 @@ Bootstrap of straight (from github) (load bootstrap-file nil 'nomessage)) #+END_SRC ** Setup use package -Straight clone use-package and state that all use-package statements implicity use straight. +Straight clone use-package and state that all use-package statements +implicity use straight. #+BEGIN_SRC emacs-lisp (straight-use-package 'use-package) (setq straight-use-package-by-default t) #+END_SRC ** Setup alpha and yes-or-no-p -This just sets the alpha to 85% and all yes or no questions to single letter responses. +This just sets the alpha to 85% and all yes or no questions to single +letter responses. #+BEGIN_SRC emacs-lisp (add-to-list 'default-frame-alist '(alpha . 85)) (fset 'yes-or-no-p 'y-or-n-p) @@ -37,7 +39,8 @@ Turn on hs minor mode for all prog-mode. (add-hook 'prog-mode-hook #'hs-minor-mode) #+END_SRC ** Set backup directory -Set the backup directory to =user-emacs-directory=/saves so I don't get those annoying '~' files. +Set the backup directory to =user-emacs-directory=/saves so I don't +get those annoying '~' files. #+BEGIN_SRC emacs-lisp (setq backup-directory-alist `(("." . "~/.config/emacs/saves"))) #+END_SRC @@ -57,19 +60,29 @@ Load my custom "Grayscale" theme (look at [[file:Grayscale-theme.el][this file]] #+BEGIN_SRC emacs-lisp (setq inhibit-startup-screen t) #+END_SRC +** Set auto-fill-mode for all text-modes +Auto fill mode is nice for most text modes, 80 char limit is great. + +#+BEGIN_SRC emacs-lisp +(add-hook 'text-mode-hook #'auto-fill-mode) +#+END_SRC * Emacs Mode-line -Firstly, declare a variable for the number of spaces between each module in the modeline. +Firstly, declare a variable for the number of spaces between each +module in the modeline. #+BEGIN_SRC emacs-lisp (defconst +modeline/sep-spaces 4 "Number of spaces separating modules.") #+END_SRC -Then, declare a list of reserved characters for which the previously declared seperator won't be applied when placed at the end of a module string. +Then, declare a list of reserved characters for which the previously +declared seperator won't be applied when placed at the end of a module +string. #+BEGIN_SRC emacs-lisp (defconst +modeline/reserved-chars (list "[" "(") "Characters that, when at the end of a module string, won't have the separator applied to them.") #+END_SRC -Now declare a function that applies the separator with respect to the reserved characters to any one string. +Now declare a function that applies the separator with respect to the +reserved characters to any one string. #+BEGIN_SRC emacs-lisp (defun +modeline/handle-string (STR) (condition-case nil @@ -102,13 +115,20 @@ Finally, set the mode-line-format. * Custom Functions These are custom functions I have defined ** New line function -Vim bindings don't have a nice way of adding new lines before or after the current line while staying in normal mode. -You can use =o/O= to enter insert mode at a new line, but this isn't the same as being able to stay in normal mode, and only adds extra keypresses if your only purpose was to open up some lines. -As this is Emacs I can extend it as I wish, so I decided to define a new line function that won't remove me from normal state. +Vim bindings don't have a nice way of adding new lines before or after +the current line while staying in normal mode. You can use =o/O= to +enter insert mode at a new line, but this isn't the same as being able +to stay in normal mode while opening newlines and only adds extra +keypresses if your only purpose was to open up some lines. + +As this is Emacs I can extend it as I wish, so I decided to define a +new line function that won't remove me from normal state. The logic is pretty simple: -- Use the predefined vim functions for opening new lines above and below with insert mode - - Given the argument =BACKWARD= to assess whether to open lines above or below +- Use the predefined vim functions for opening new lines above and + below with insert mode + - Given the argument =BACKWARD= to assess whether to open lines + above or below - Return to previous location - Enter normal state @@ -137,7 +157,9 @@ Steps are as follows: (start-process-shell-command "" nil (format "cd %s; ctags -Re ." root)))) #+END_SRC * General -Setup general, a good package for defining keys. +Setup general, a good package for defining keys. In this case, I +generate a new definer for the "LEADER" keys. Leader is bound to SPC +and it's functionally equivalent the doom/spacemacs leader. #+BEGIN_SRC emacs-lisp (use-package general :config @@ -176,8 +198,8 @@ Setup general, a good package for defining keys. #+END_SRC * Evil ** Evil default -Setup the evil package, with some basic keybinds. -Also declare a leader-map at "SPC". +Setup the evil package, with some basic keybinds. Also declare a +leader-map at "SPC". #+BEGIN_SRC emacs-lisp (use-package evil :init @@ -209,10 +231,13 @@ Also declare a leader-map at "SPC". (evil-commentary-mode)) #+END_SRC ** Evil mc -Setup for multicursors in Evil mode. -Don't let evil-mc setup it's own keymap because it uses 'gr' as its prefix, which I don't like. -Instead, bind some useful functions to my personal =dx:evil-mc-map= which is bound to 'gz'. -Furthermore, define a function =dx:evil-mc-cursor-here= which pauses cursors upon placing a cursor at the current position. +Setup for multicursors in Evil mode. Don't let evil-mc setup it's own +keymap because it uses 'gr' as its prefix, which I don't like. + +Instead, bind some useful functions to my personal =dx:evil-mc-map= +which is bound to 'gz'. Furthermore, define a function +=dx:evil-mc-cursor-here= which pauses cursors upon placing a cursor at +the current position. #+BEGIN_SRC emacs-lisp (use-package evil-mc :after evil @@ -239,20 +264,22 @@ Furthermore, define a function =dx:evil-mc-cursor-here= which pauses cursors upo (evil-mc-pause-cursors))) #+END_SRC ** Evil collection -Setup evil collection, but don't turn on the mode. -Instead, I'll turn on setups for specific modes I think benefit from it. +Setup evil collection, but don't turn on the mode. Instead, I'll turn +on setups for specific modes I think benefit from it. #+BEGIN_SRC emacs-lisp (use-package evil-collection :after evil) #+END_SRC * Ivy -Ivy is a completion framework for Emacs, and my preferred (sometimes second favourite) one. -It has a great set of features with little to no pain with setting up. +Ivy is a completion framework for Emacs, and my preferred (sometimes +second favourite) one. It has a great set of features with little to +no pain with setting up. ** Ivy -Setup for ivy, in preparation for counsel. -Turn on ivy-mode just after init. -Setup vim-like bindings for the minibuffer ("C-(j|k)" for down|up the selection list) -Also setup evil-collection for ivy. +Setup for ivy, in preparation for counsel. Turn on ivy-mode just +after init. + +Setup vim-like bindings for the minibuffer ("C-(j|k)" for down|up the +selection list). Also setup evil-collection for ivy. #+BEGIN_SRC emacs-lisp (use-package ivy :hook (after-init . ivy-mode) @@ -279,15 +306,15 @@ Also setup evil-collection for ivy. (evil-collection-ivy-setup)) #+END_SRC ** Counsel -Setup for counsel. -Load after ivy and helpful. +Setup for counsel. Load after ivy and helpful. Bind: - Swiper to "C-s" - Switch buffer to "C-x b" - Counsel ripgrep to "M-s r" (search namespace) -Along with that, set the help function and variable functions to their helpful counterparts. +Along with that, set the help function and variable functions to their +helpful counterparts. #+BEGIN_SRC emacs-lisp (use-package counsel :defer t @@ -310,8 +337,10 @@ Along with that, set the help function and variable functions to their helpful c counsel-describe-variable-function #'helpful-variable)) #+END_SRC ** Counsel etags -Counsel etags allows me to search generated tag files for tags. -I already have a function defined [[*Generate tags][here]] to generate the tags, so it's just searching them which I find to be a bit of a hassle, and where this package comes in. +Counsel etags allows me to search generated tag files for tags. I +already have a function defined to generate the tags, so it's just +searching them which I find to be a bit of a hassle, and where this +package comes in. #+BEGIN_SRC emacs-lisp (use-package counsel-etags :after counsel @@ -330,8 +359,8 @@ Setup avy with leader. "g" #'avy-goto-char-2)) #+END_SRC * Projectile -Setup projectile, along with the tags command. -Also bind "C-c C-p" to the projectile command map for quick access. +Setup projectile, along with the tags command. Also bind "C-c C-p" to +the projectile command map for quick access. #+BEGIN_SRC emacs-lisp (use-package projectile :after evil @@ -387,11 +416,13 @@ Counsel projectile provides the ivy interface to projectile commands, which is r #+END_SRC * Dired -Setup for dired. -Firstly, as it's an inbuilt package don't let straight try and download it. -Make dired-hide-details-mode the default mode when dired-mode, as it removes the clutter. -Create a keymap =dx:dired-map= which is bound to the prefix "C-c d", binding useful dired functions. -Setup evil collection for dired (even though dired doesn't really conflict with evil, there are some black corners I'd like to adjust) +Setup for dired. Firstly, as it's an inbuilt package don't let +straight try and download it. Make dired-hide-details-mode the +default mode when dired-mode, as it removes the clutter. Create a +keymap =dx:dired-map= which is bound to the prefix "C-c d", binding +useful dired functions. Setup evil collection for dired (even though +dired doesn't really conflict with evil, there are some black corners +I'd like to adjust) #+BEGIN_SRC emacs-lisp (use-package dired :straight nil @@ -408,6 +439,7 @@ Setup evil collection for dired (even though dired doesn't really conflict with #+END_SRC * Hydra Use hydras for stuff that I use often, currently buffer manipulation + #+BEGIN_SRC emacs-lisp (use-package hydra :after evil @@ -462,8 +494,9 @@ Pretty simple, just activate after init. :hook (after-init . which-key-mode)) #+END_SRC * Yasnippet -Yasnippet is a great package for snippets, which I use heavily in programming and org-mode. -I setup here the global mode for yasnippet and a collection of snippets for ease of use. +Yasnippet is a great package for snippets, which I use heavily in +programming and org-mode. I setup here the global mode for yasnippet +and a collection of snippets for ease of use. ** Yasnippet default Setup global mode after evil mode has been loaded #+BEGIN_SRC emacs-lisp @@ -489,8 +522,8 @@ Collection of snippets, activate after yasnippet has been loaded. (yatemplate-fill-alist)) #+END_SRC * Keychord -Keychord is only really here for this one chord I wish to define: "jk" for exiting insert state. -Otherwise, I don't really need it. +Keychord is only really here for this one chord I wish to define: "jk" +for exiting insert state. Otherwise, I don't really need it. #+BEGIN_SRC emacs-lisp (use-package key-chord :after evil @@ -499,8 +532,10 @@ Otherwise, I don't really need it. (key-chord-mode +1)) #+END_SRC * Ripgrep -The ripgrep package provides utilities to grep projects and files for strings via the rg tool. -Though [[*Ivy][ivy]] comes with =counsel-rg= using it makes me dependent on the ivy framework, and this configuration is intentionally built to be modular and switchable. +The ripgrep package provides utilities to grep projects and files for +strings via the rg tool. Though [[*Ivy][ivy]] comes with =counsel-rg= using it +makes me dependent on the ivy framework, and this configuration is +intentionally built to be modular and switchable. #+BEGIN_SRC emacs-lisp (use-package rg :after evil @@ -519,9 +554,11 @@ Though [[*Ivy][ivy]] comes with =counsel-rg= using it makes me dependent on the rg-default-alias-fallback "all")) #+END_SRC * Magit -Magit is *the* git porcelain for Emacs, which perfectly encapsulates the git cli. -In this case, I just need to setup the bindings for it. -As magit will definitely load after evil (as it must be run by a binding, and evil will load after init), I can use evil-collection freely. +Magit is *the* git porcelain for Emacs, which perfectly encapsulates +the git cli. In this case, I just need to setup the bindings for it. +As magit will definitely load after evil (as it must be run by a +binding, and evil will load after init), I can use evil-collection +freely. #+BEGIN_SRC emacs-lisp (use-package magit :general @@ -531,9 +568,9 @@ As magit will definitely load after evil (as it must be run by a binding, and ev :after magit) #+END_SRC * Company -Company is the auto complete system I use. -I don't like having heavy setups for company, as it only makes it worse to use. -In this case, just setup some evil binds for company +Company is the auto complete system I use. I don't like having heavy +setups for company, as it only makes it worse to use. In this case, +just setup some evil binds for company #+BEGIN_SRC emacs-lisp (use-package company :hook (prog-mode . company-mode) @@ -543,9 +580,10 @@ In this case, just setup some evil binds for company ("M-k" . company-select-previous))) #+END_SRC * Elfeed -Elfeed is the perfect RSS feed reader, integrated into Emacs perfectly. -I've got a set of feeds that I use for a large variety of stuff, mostly media and entertainment. -I've also bound "C-c r" to elfeed for loading the system. +Elfeed is the perfect RSS feed reader, integrated into Emacs +perfectly. I've got a set of feeds that I use for a large variety of +stuff, mostly media and entertainment. I've also bound "C-c r" to +elfeed for loading the system. #+BEGIN_SRC emacs-lisp (use-package elfeed :general @@ -578,8 +616,10 @@ I've also bound "C-c r" to elfeed for loading the system. #+END_SRC * Org mode ** Org default with evil -Setup for org mode, currently basically nothing. -Has evil-org for evil bindings. +Setup for org mode, currently basically nothing. Has evil-org for +evil bindings. + +Also setup a lot of variables, particularly for latex exports. #+BEGIN_SRC emacs-lisp (use-package org :hook (org-mode . yas-minor-mode) @@ -637,9 +677,10 @@ Has evil-org for evil bindings. ("C-c C-a" . flyspell-correct-at-point))) #+END_SRC * Window management -Window management is really important. -I find the default window handling of Emacs incredibly annoying: sometimes consuming my windows, sometimes creating new ones. -So, as Emacs is the ultimate editor, I want to configure and fine tune the window management of Emacs. +Window management is really important. I find the default window +handling of Emacs incredibly annoying: sometimes consuming my windows, +sometimes creating new ones. So, as Emacs is the ultimate editor, I +want to configure and fine tune the window management of Emacs. #+BEGIN_SRC emacs-lisp (setq display-buffer-alist '(("\\*e?shell\\*" @@ -692,10 +733,11 @@ So, as Emacs is the ultimate editor, I want to configure and fine tune the windo )) #+END_SRC * Major modes and Programming -Setups for common major modes and languages -Here are some basic packages for programming first +Setups for common major modes and languages. Here are some basic +packages for programming first ** Smartparens -Smartparens is a smarter electric-parens, it's much more aware of stuff and easier to use. +Smartparens is a smarter electric-parens, it's much more aware of +stuff and easier to use. #+BEGIN_SRC emacs-lisp (use-package smartparens :hook (prog-mode . smartparens-mode) @@ -726,10 +768,10 @@ Show parenthesis for Emacs (use-package eldoc-box :hook (eldoc-mode . eldoc-box-hover-mode)) #+END_SRC - ** Eglot -Eglot is a library of packages to communicate with LSP servers for better programming capabilities. -Interactions with a server provide results to the client, done through JSON. +Eglot is a library of packages to communicate with LSP servers for +better programming capabilities. Interactions with a server provide +results to the client, done through JSON. #+BEGIN_SRC emacs-lisp (use-package eglot :hook (c++-mode . eglot-ensure) @@ -747,8 +789,10 @@ Interactions with a server provide results to the client, done through JSON. (add-to-list 'eglot-server-programs '((c-mode c++-mode) "clangd"))) #+END_SRC ** Flycheck -Flycheck is the checking system for Emacs. -I don't necessarily like having all my code checked all the time, so I haven't added a hook to prog-mode as it would be better for me to decide when I want checking and when I don't. +Flycheck is the checking system for Emacs. I don't necessarily like +having all my code checked all the time, so I haven't added a hook to +prog-mode as it would be better for me to decide when I want checking +and when I don't. #+BEGIN_SRC emacs-lisp (use-package flycheck :commands flycheck-mode @@ -774,10 +818,22 @@ Add a function to activate tabs mode. (setq indent-tabs-mode t)) #+END_SRC ** C/C++ -Setup for C and C++ modes via the cc-mode package. -Firstly hook the C and C++ modes to activate tabs. -Then set the offset to 2, and the general style to user. -Finally, add a user style that mimics the Microsoft guidelines for C# (open braces everywhere). +Setup for C and C++ modes via the cc-mode package. Firstly hook the C +and C++ modes to activate tabs. Then set the offset to 2, and the +general style to user. Finally, add a user style that mimics the +Microsoft guidelines for C# (open braces everywhere) because I've got +a lot of screen real estate and I like the newline brace folds more +than same line brace folds: + +#+begin_example +if (cond) {...} +#+end_example +vs +#+begin_example +if (cond) +{....} +#+end_example + #+BEGIN_SRC emacs-lisp (use-package cc-mode :hook (c-mode . dx:activate-tabs) @@ -890,4 +946,3 @@ Lisp function does not specify a special indentation." (funcall method indent-point state)))))))) (add-hook 'emacs-lisp-mode-hook #'(lambda () (interactive) (setq-local lisp-indent-function #'+modded/lisp-indent-function)))) #+END_SRC - -- cgit v1.2.3-13-gbd6f