diff options
| author | Thomas Voss <mail@thomasvoss.com> | 2026-03-29 23:58:30 +0200 |
|---|---|---|
| committer | Thomas Voss <mail@thomasvoss.com> | 2026-03-30 00:02:43 +0200 |
| commit | 666a8dd7d2d973d77c13415e9e99ca20a2b4fbd4 (patch) | |
| tree | 93f43ac737bbbbe660bf945c752116b1b5a24f47 /contrib/doasedit.el | |
| parent | d7aa6db03629d0fdc8bcce0db71c24aa6a401101 (diff) | |
Add doasedit support for Emacs and Vim
Diffstat (limited to 'contrib/doasedit.el')
| -rw-r--r-- | contrib/doasedit.el | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/contrib/doasedit.el b/contrib/doasedit.el new file mode 100644 index 0000000..5f71026 --- /dev/null +++ b/contrib/doasedit.el @@ -0,0 +1,62 @@ +;;; doasedit.el --- Automatic doasedit major-mode detection -*- lexical-binding: t; -*- + +;; Copyright (C) 2026 Thomas Voss + +;; Author: Thomas Voss <mail@thomasvoss.com> +;; Maintainer: Thomas Voss <mail@thomasvoss.com> +;; URL: https://git.thomasvoss.com/doasutils +;; Package-Version: 1.0.0 +;; Package-Requires: ((emacs "24.4")) +;; Keywords: tools, convenience, files + +;; This file is NOT part of GNU Emacs. + +;;; License: +;; +;; Permission to use, copy, modify, and distribute this software for any +;; purpose with or without fee is hereby granted, provided that the above +;; copyright notice and this permission notice appear in all copies. +;; +;; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL +;; WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED +;; WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE +;; AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL +;; DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA +;; OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +;; TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +;; PERFORMANCE OF THIS SOFTWARE. +;;; Commentary: +;; +;; This package provides `global-doasedit-mode', a minor-mode that +;; ensures that the correct major-mode is set in the current buffer when +;; editing files via the `doasedit' command-line utility. + +;;; Code: + +(defgroup doasedit nil + "Automatic major-mode detection when editing files via doasedit." + :group 'tools) + +(defun doasedit--setup-buffer () + (let* ((tmpdir (or (getenv "TMPDIR") "/tmp")) + (regexp (expand-file-name "\\`doasedit\\."))) + (when (and buffer-file-name (string-match-p regexp buffer-file-name)) + (if-let ((target-file (getenv "DOASEDIT_EDITING"))) + (let ((buffer-file-name target-file)) + (set-auto-mode) + (rename-buffer (format "*doasedit: %s*" target-file) :unique)) + (error "`DOASEDIT_EDITING' is not set."))))) + +;;;###autoload +(define-minor-mode global-doasedit-mode + "Global minor-mode to automatically set correct major-mode in the +current buffer when editing a root-protected file via the doasedit +command-line utility." + :global t + :lighter nil + (if global-doasedit-mode + (add-hook 'find-file-hook #'doasedit--setup-buffer) + (remove-hook 'find-file-hook #'doasedit--setup-buffer))) + +(provide 'doasedit) +;;; doasedit.el ends here |