;;; package.use-mode.el --- Emacs mode for editing Gentoo package.use files -*- lexical-binding: t; -*- ;; Copyright (C) 2020 C-xC-c ;; Author: C-xC-c . ;;; Commentary: ;; Emacs mode for Gentoo package.use ;; ;; Thanks to nginx-mode where I stole most of this. ;;; Code: (defvar package.use-mode-syntax-table (let ((table (make-syntax-table))) (modify-syntax-entry ?# "< b" table) (modify-syntax-entry ?\n "> b" table) table) "Syntax table for `package.use-mode'.") (defvar package.use--version-bit (rx line-start (? (or "=" ">" "<" ">=" "<=")))) (defconst package.use--characters `(1+ (any alnum "_" "." "+" "*" "-")) "The characters allowed in a package.use catagory or name bit.") (defvar package.use--catagory-bit (rx (eval package.use--characters) "/")) (defvar package.use--name-bit (rx (group (eval package.use--characters)))) (defvar package.use-font-lock-keywords (list ;; >=www-servers/ ;; www-servers/ `(,(concat package.use--version-bit package.use--catagory-bit) 0 font-lock-function-name-face) ;; >=nginx-1.19.1 ;; nginx `(,(concat package.use--version-bit package.use--name-bit) 0 font-lock-keyword-face) ;; >=www-servers/nginx-1.19.1 ;; www-servers/nginx `(,(concat package.use--version-bit package.use--catagory-bit package.use--name-bit) (1 font-lock-variable-name-face t)) ;; dev-langs/python:3.7 `(,(rx ":" (1+ (any digit "."))) 0 font-lock-type-face t) ;; www-servers/nginx NGINX_MODULES_HTTP: `(,(rx (1+ whitespace) (1+ (any alnum "_" "-")) ":") 0 font-lock-constant-face t))) (define-derived-mode package.use-mode prog-mode "package.use" :syntax-table package.use-mode-syntax-table :keymap nil (setq-local comment-start "# ") (setq-local comment-start-skip "#+ *") (setq-local comment-end "") (setq-local comment-auto-fill-only-comments t) (setq-local require-final-newline t) (setq-local font-lock-defaults '(package.use-font-lock-keywords nil))) ;;;###autoload (add-to-list 'auto-mode-alist `(,(rx "package." (or "use" "accept_keywords" "mask" "unmask" "license") (or eol "/")) . package.use-mode)) (provide 'package.use-mode) ;;; package.use-mode.el ends here