;; -*- lexical-binding: t; -*- (defvar lh/filepath-delims "[\"']") (defun lh/region-bounds-full-lines (start end) (cons (save-excursion (goto-char start) (line-beginning-position)) (save-excursion (goto-char end) (line-end-position)))) (defun lh/move-region-up () (interactive) (let* ((deactivate-mark nil) (bounds (lh/region-bounds-full-lines (region-beginning) (region-end))) (text (buffer-substring (car bounds) (cdr bounds)))) (delete-region (car bounds) (cdr bounds)) (transpose-lines 1) (forward-line -2) (set-mark (point)) (insert text) (activate-mark))) (defun lh/move-line-up () (interactive) (if (region-active-p) (lh/move-region-up) (transpose-lines 1) (forward-line -2))) (defun lh/move-region-down () (interactive) (let* ((deactivate-mark nil) (bounds (lh/region-bounds-full-lines (region-beginning) (region-end))) (text (buffer-substring (car bounds) (cdr bounds)))) (delete-region (car bounds) (cdr bounds)) (forward-line) (transpose-lines 1) (forward-line -1) (set-mark (point)) (insert text) (activate-mark))) (defun lh/move-line-down () (interactive) (if (region-active-p) (lh/move-region-down) (forward-line) (transpose-lines 1) (forward-line -1))) (defun lh/extern-open-file (file) (shell-command (concat "xdg-open " (shell-quote-argument file)))) (defun lh/extern-open-current-file () (interactive) (let ((files (if (eq major-mode 'dired-mode) (dired-get-marked-files) (list (buffer-file-name))))) (mapc #'lh/extern-open-file files))) (defun lh/file-name-from-cursor () (save-excursion (let ((start (progn (search-backward-regexp lh/filepath-delims) (forward-char) (point))) (end (progn (search-forward-regexp lh/filepath-delims) (backward-char) (point)))) (buffer-substring start end)))) (defun lh/extern-open-file-at-cursor () (interactive) (lh/extern-open-file (lh/file-name-from-cursor))) (defun lh/base64-encode-file (filename) (with-temp-buffer (insert-file-contents filename) (base64-encode-region (point-min) (point-max)) (buffer-string))) (defun lh/root-current-buffer (sudo) (let ((old-point (point)) (old (current-buffer))) (find-file (concat "/" sudo "::" (buffer-file-name))) (goto-char old-point) (kill-buffer old))) (defun lh/doas-current-buffer () (interactive) (lh/root-current-buffer "doas")) (defun lh/sudo-current-buffer () (interactive) (lh/root-current-buffer "sudo")) (defun lh/buffer-create-new () (interactive) (let ((buf (generate-new-buffer "new"))) (switch-to-buffer buf) (setq-local buffer-offer-save t) buf)) (defun lh/pop-out-buffer () (interactive) (make-frame) (switch-to-prev-buffer)) (provide 'lh)