;;; -*- lexical-binding: t -*- ;; ;; this file: ;; https://dataswamp.org/~incal/emacs-init/ll/ll-align.el ;; ;; -------------------------------------------------------------------------- (require 'cl-lib) (cl-pushnew "." load-path :test #'string=) (require 'luki-lisp) ;; -------------------------------------------------------------------------- (defun insert-at-col (str col) (interactive "s string: \nncol: ") (let* ((beg (or (current-column) 0)) (pad-len (- col beg))) (when (< 0 pad-len) (insert (make-string pad-len ?\s) str)))) ;; -------------------------------------------------------------------------- (let ((push-col 0)) (defun push-to-col (&optional set-col) (interactive "P") (if (integerp set-col) (setq push-col set-col) (if (& set-col (listp set-col)) (progn (setq push-col (or (current-column) 0)) ($ "done: %s" push-col)) (let* ((beg (or (current-column) 0)) (pad-len (- push-col beg))) (when (< 0 pad-len) (insert (make-string pad-len ?\s)) (forward-line) (unless (looking-at "$") (forward-char beg)))))))) (declare-function push-to-col nil) ;; -------------------------------------------------------------------------- (defun eat-space () (i) (let ((beg (point)) (same-line-whitespace " \t")) (beginning-of-line) (if (looking-at (@f "^[%s]*$" same-line-whitespace)) (delete-blank-lines) (goto-char beg) (if (!z (skip-chars-forward same-line-whitespace)) (delete-region beg (point)) (delete-horizontal-space) (insert-char ?\s))))) ;; -------------------------------------------------------------------------- (let ((alf-re)) (defun align-from-left (&optional set-re) (interactive "p") (let ((def-re "^\\|[[:punct:]]\\|[[:space:]][[:alnum:]]")) (unless (s set-re) (cl-case set-re (4 (setq alf-re (read-regexp "regexp: "))) (16 (setq alf-re def-re)) (t (unless alf-re (setq alf-re def-re)))))) (let ((beg (point)) (re (or (& (s set-re) set-re) alf-re))) (when (re-search-backward re (pos-bol) 'noerror) (while (looking-at "[[:space:]]") (forward-char)) (insert (make-string (- beg (point)) ?\s)))))) (declare-function align-from-left nil) ;; -------------------------------------------------------------------------- (<- 'll-align)