diff options
author | dx <aryadevchavali1@gmail.com> | 2020-06-11 00:59:09 +0100 |
---|---|---|
committer | dx <aryadevchavali1@gmail.com> | 2020-06-11 00:59:09 +0100 |
commit | e84183f4bb4cdf96ddfac02980efd2d4367957b9 (patch) | |
tree | b1733fd59d58e254bb3f85e4d1a49464361532ef /Doom/.doom.d/org/personal.org | |
parent | 9f2c086dfdddc2eef37abf2fa17098bb1892c617 (diff) | |
download | dotfiles-e84183f4bb4cdf96ddfac02980efd2d4367957b9.tar.gz dotfiles-e84183f4bb4cdf96ddfac02980efd2d4367957b9.tar.bz2 dotfiles-e84183f4bb4cdf96ddfac02980efd2d4367957b9.zip |
+auto-fill-lines -> truncate-lines function
This function just converts auto-fill to long lines. This is easier to
manage and is just easier for me to use.
Diffstat (limited to 'Doom/.doom.d/org/personal.org')
-rw-r--r-- | Doom/.doom.d/org/personal.org | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/Doom/.doom.d/org/personal.org b/Doom/.doom.d/org/personal.org index c9d6fbb..93caa50 100644 --- a/Doom/.doom.d/org/personal.org +++ b/Doom/.doom.d/org/personal.org @@ -80,3 +80,39 @@ Insert a newline without having to exit normal mode! (goto-char (+ old 1)) (evil-normal-state))) #+END_SRC +* Convert auto-fill lines to long truncate-lines +Consider some org file with auto filled lines. +I don't like auto-filled lines. +So I want to convert them. +I've setup macros countless times to do this operation for me, may as well formalize it as a function. + +Firstly, I need a function to count the number of instances of some substring occur in some other string. +Shamelessly copied from rosetta code. +#+BEGIN_SRC elisp +(defun dx:org/count-sub (str pat) + (loop with z = 0 with s = 0 while s do + (when (setf s (search pat str :start2 s)) + (incf z) (incf s (length pat))) + finally (return z))) +#+END_SRC + +Then the main function, works like so: +1) Search the text in the region for newlines then join the lines to make a single segment +2) Search for sentences through Emacs builtin =forward-sentence= and =forward-char= functions then newline via sentences +#+BEGIN_SRC elisp +(defun dx:org/fill-to-long-lines () + (interactive) + (let* ((beg (region-beginning)) + (end (region-end)) + (region-text (buffer-substring-no-properties beg end)) + (n-sentences (dx:org/count-sub region-text ".")) + (parsed-text (apply #'concatenate 'string (cl-loop for c from beg to end collect + (if (string= (buffer-substring-no-properties c (+ c 1)) "\n") " " + c))))) + (delete-region beg end) + (insert parsed-text) + (message "%s" n-sentences) + (evil-normal-state) + (evil-digit-argument-or-evil-beginning-of-line) + (cl-loop for i from 1 to n-sentences do (forward-sentence) (forward-char) (newline)))) +#+END_SRC |