;;; -*- lexical-binding: t -*- ;;; ;;; this file: ;;; http://user.it.uu.se/~embe8573/emacs-init/align-new.el ;;; https://dataswamp.org/~incal/emacs-init/align-new.el (require 'my-string) (defun insert-at-col (str col) (interactive "s string: \nncol: ") (let*((beg-col (or (current-column) 0)) (step (- col beg-col)) ) (when (> step 0) (insert (make-string step ?\s) str) ))) (defun pad-to-col (&optional set-new-col) (interactive "p") (let*((plist (symbol-plist #'pad-to-col)) (prop 'pad-col) (pad-col (or (plist-get plist prop) 0)) (beg-col (or (current-column) 4)) ) (if (and set-new-col (= 4 set-new-col)) (progn (plist-put plist prop beg-col) (message "pad col set: %s" beg-col) ) (let ((step (- pad-col beg-col))) (when (> step 0) (insert (make-string step ?\s)) (forward-line 1) (forward-char beg-col) ))))) (defun eat-space () "When on a blank line, `delete-blank-lines'. Else, if spaces and/or tabs are to the _right_ of point, delete them. Else, ditto _left_, but save one whitespace." (interactive) (let ((start (point)) (same-line-whitespace " \t") ) (beginning-of-line) (if (looking-at (format "^[%s]*$" same-line-whitespace)) (delete-blank-lines) (goto-char start) (if (= 0 (skip-chars-forward same-line-whitespace)) (progn (delete-horizontal-space) (insert "\s") ) (delete-region start (point)) )))) (defconst stop-char-default "\\(^\\|[[:punct:]]\\|[[:space:]][[:alnum:]]\\)") (defvar stop-char stop-char-default) (defun align-from-left (&optional set-char) (interactive "p") (let ((start (point))) (if (= 4 set-char) ; set stop-char (setq stop-char (regexp-quote (char-to-string (read-char)))) (when (= 16 set-char) ; reset stop-char (setq stop-char stop-char-default) )) (re-search-backward stop-char (line-beginning-position) t) ; NOERROR (let*((hit-str-prop (substring-no-properties (match-string 0))) (hit-str (unless (empty-string-p hit-str-prop) (substring hit-str-prop 0 1)))) (when (empty-string-p hit-str) (forward-char 1))) (insert (make-string (- start (point)) ?\s)) )) (provide 'align-new)