Skip to content

Instantly share code, notes, and snippets.

@pgdad
Created September 10, 2021 19:23
Show Gist options
  • Save pgdad/947ba37bd0506f395df739f1e1f4a33a to your computer and use it in GitHub Desktop.
Save pgdad/947ba37bd0506f395df739f1e1f4a33a to your computer and use it in GitHub Desktop.
emacs edit indirect use for cfn lambda
(defvar-local lainedev-edit-indirect-leading-spaces 0)
(defun lainedev--leading-spaces ()
(interactive)
(let* ((current-line (thing-at-point 'line 't))
(line-length (length current-line))
(trimmed-line (replace-regexp-in-string "^ +" "" current-line))
(trimmed-line-length (length trimmed-line)))
(- line-length trimmed-line-length)))
(defun lainedev--edit-indirect-cfn-create ()
(goto-char (point-min))
(let* ((parent-buffer (overlay-buffer edit-indirect--overlay))
(leading-spaces (lainedev--leading-spaces))
(regexp (concat "^" (make-string leading-spaces ? ))))
(with-current-buffer parent-buffer
(setq lainedev-edit-indirect-leading-spaces leading-spaces))
(replace-regexp regexp "" nil (point-min) (point-max))))
(add-hook 'edit-indirect-after-creation-hook 'lainedev--edit-indirect-cfn-create)
(defun lainedev--edit-indirect-cfn-after-commit (begin end)
(dbg "---------")
(dbg (format "begin/end %d/%d" begin end))
(let* ((prefix (make-string lainedev-edit-indirect-leading-spaces ? ))
(replacement (concat prefix "\\&"))
(resulting-text
(replace-regexp-in-string "^.+" replacement
(buffer-substring-no-properties begin end)))
(moved-end (+ end (length resulting-text))))
(goto-char begin)
(insert resulting-text)
(dbg (format "point/end %d/%d" (point) moved-end))
(kill-region (point) moved-end)))
(defun dbg (message)
(with-current-buffer (get-buffer-create "*dbg*")
(insert message)
(insert "\n")))
(add-hook 'edit-indirect-after-commit-functions 'lainedev--edit-indirect-cfn-after-commit)
(defun lainedev--edit-indirect-guess-python-mode (parent begin end)
(python-mode))
(setq edit-indirect-guess-mode-function 'lainedev--edit-indirect-guess-python-mode)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment