diff options
author | Ulrich Müller <ulm@gentoo.org> | 2013-07-04 23:40:23 +0200 |
---|---|---|
committer | Ulrich Müller <ulm@gentoo.org> | 2013-07-04 23:40:23 +0200 |
commit | 70500045344b0cc9481a481fc026cb43f95d082b (patch) | |
tree | b1d3a66c559fabd7591c23bff70cef56cba1d12a /misc | |
parent | Update version to 1.3.5. (diff) | |
download | eselect-70500045344b0cc9481a481fc026cb43f95d082b.tar.gz eselect-70500045344b0cc9481a481fc026cb43f95d082b.tar.bz2 eselect-70500045344b0cc9481a481fc026cb43f95d082b.zip |
Add editing mode for Emacs, moved from emacs-tools repository to here.
* misc/eselect-mode.el: New file, editing mode for Emacs,
split off from app-emacs/gentoo-syntax.
* misc/Makefile.am (EXTRA_DIST): Add eselect-mode.el.
Diffstat (limited to 'misc')
-rw-r--r-- | misc/Makefile.am | 2 | ||||
-rw-r--r-- | misc/eselect-mode.el | 129 |
2 files changed, 130 insertions, 1 deletions
diff --git a/misc/Makefile.am b/misc/Makefile.am index 626fe95..1933dee 100644 --- a/misc/Makefile.am +++ b/misc/Makefile.am @@ -1,2 +1,2 @@ -EXTRA_DIST = eselect.bashcomp +EXTRA_DIST = eselect.bashcomp eselect-mode.el MAINTAINERCLEANFILES = *~ Makefile.in diff --git a/misc/eselect-mode.el b/misc/eselect-mode.el new file mode 100644 index 0000000..065ee15 --- /dev/null +++ b/misc/eselect-mode.el @@ -0,0 +1,129 @@ +;;; eselect-mode.el --- edit eselect files + +;; Copyright 2006-2013 Gentoo Foundation + +;; Author: Matthew Kennedy <mkennedy@gentoo.org> +;; Diego Pettenò <flameeyes@gentoo.org> +;; Christian Faulhammer <fauli@gentoo.org> +;; Ulrich Müller <ulm@gentoo.org> +;; Maintainer: <emacs@gentoo.org> +;; Keywords: languages + +;; This file is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 2 of the License, or +;; (at your option) any later version. + +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. + +;;; Commentary: + +;;; Code: + +(require 'sh-script) +(require 'font-lock) + +;;; Font-lock. + +(defvar eselect-mode-keywords-warn + '(("eval") + font-lock-warning-face)) + +(defvar eselect-mode-keywords-core + '(("die" "check_do" "do_action" "inherit" "sed") + font-lock-type-face)) + +(defvar eselect-mode-keywords-output + '(("write_error_msg" "write_warning_msg" "write_list_start" + "write_numbered_list_entry" "write_kv_list_entry" + "write_numbered_list" "highlight" "highlight_warning" + "highlight_marker" "is_output_mode" "space") + font-lock-type-face)) + +(defvar eselect-mode-keywords-tests + '(("has" "is_function" "is_number") + font-lock-type-face)) + +(defvar eselect-mode-keywords-path-manipulation + '(("basename" "dirname" "canonicalise" "relative_name") + font-lock-type-face)) + +(defvar eselect-mode-keywords-config + '(("store_config" "load_config" "append_config") + font-lock-type-face)) + +(defvar eselect-mode-keywords-multilib + '(("list_libdirs") + font-lock-type-face)) + +(defvar eselect-mode-keywords-package-manager + '(("arch" "envvar" "best_version" "has_version" "get_repositories" + "get_repo_news_dir") + font-lock-type-face)) + +(defun eselect-mode-make-keywords-list (keywords-list face + &optional prefix suffix) + ;; based on `generic-make-keywords-list' from generic.el + ;; Note: XEmacs doesn't have generic.el + (unless (listp keywords-list) + (error "Keywords argument must be a list of strings")) + (cons (concat prefix "\\<" + (regexp-opt keywords-list t) + "\\>" suffix) + face)) + +(defvar eselect-mode-font-lock-keywords + (mapcar + (lambda (x) (apply 'eselect-mode-make-keywords-list x)) + (list + eselect-mode-keywords-warn + eselect-mode-keywords-core + eselect-mode-keywords-output + eselect-mode-keywords-tests + eselect-mode-keywords-path-manipulation + eselect-mode-keywords-config + eselect-mode-keywords-multilib + eselect-mode-keywords-package-manager))) + +;;; Mode definitions. + +(defun eselect-mode-before-save () + ;;(delete-trailing-whitespace) ; doesn't exist in XEmacs + (save-excursion + (goto-char (point-min)) + (while (re-search-forward "[ \t]+$" nil t) + (delete-region (match-beginning 0) (point)))) + ;; return nil, otherwise the file is presumed to be written + nil) + +;;;###autoload +(define-derived-mode eselect-mode shell-script-mode "Eselect" + "Major mode for .eselect files." + (if (featurep 'xemacs) + (make-local-hook 'write-contents-hooks)) + (add-hook 'write-contents-hooks 'eselect-mode-before-save t t) + (sh-set-shell "bash") + (setq tab-width 4) + (setq indent-tabs-mode t)) + +(add-hook 'eselect-mode-hook + (lambda () (font-lock-add-keywords + nil eselect-mode-font-lock-keywords))) + + +;;;###autoload +(add-to-list 'auto-mode-alist '("\\.eselect\\'" . eselect-mode)) + +(provide 'eselect-mode) + +;; Local Variables: +;; coding: utf-8 +;; End: + +;;; eselect-mode.el ends here |