| Add gph major-mode file for emacs. - geomyidae - A small C-based gopherd. | |
| git clone git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfri… | |
| Log | |
| Files | |
| Refs | |
| Tags | |
| README | |
| LICENSE | |
| --- | |
| commit 9f6992fbf205ebf60a0674c9ec29a86c73cb4fa9 | |
| parent b8f2f9e71128445ed61141bb7eec1d241790fb43 | |
| Author: Christoph Lohmann <[email protected]> | |
| Date: Wed, 3 Aug 2022 18:24:55 +0200 | |
| Add gph major-mode file for emacs. | |
| Thanks Athas! | |
| Diffstat: | |
| M gph/README.md | 6 ++++++ | |
| A gph/emacs/gph-mode.el | 61 +++++++++++++++++++++++++++++… | |
| 2 files changed, 67 insertions(+), 0 deletions(-) | |
| --- | |
| diff --git a/gph/README.md b/gph/README.md | |
| @@ -9,3 +9,9 @@ | |
| cp vim/ftdetect/gph.vim ~/.vim/ftdetect | |
| cp vim/syntax/gph.vim ~/.vim/syntax | |
| +## emacs | |
| + | |
| +Please read this on how emacs finds its major mode files: | |
| + | |
| + https://www.gnu.org/software/emacs/manual/html_node/elisp/Auto-Major-M… | |
| + | |
| diff --git a/gph/emacs/gph-mode.el b/gph/emacs/gph-mode.el | |
| @@ -0,0 +1,61 @@ | |
| +;;; gph-mode.el --- major mode for gph files -*- lexical-binding: t; -*- | |
| + | |
| +;; Copyright (C) Troels Henriksen ([email protected]) 2022 | |
| +;; | |
| +;; URL: https://github.com/diku-dk/futhark-mode | |
| +;; Keywords: gopher | |
| +;; Version: 1.0 | |
| +;; Package-Requires: ((emacs "25.1")) | |
| + | |
| +;; This file is not part of GNU Emacs. | |
| + | |
| +;;; License: | |
| +;; GPL-3+ | |
| + | |
| +;;; Commentary: | |
| +;; .gph is the map file format used by the geomyidae Gopher daemon. | |
| +;; This Emacs mode provides basic understanding of the link syntax, | |
| +;; such that highlighting and folding works properly. | |
| +;; | |
| +;; Files with the ".gph" extension are automatically handled by this mode. | |
| +;; | |
| +;; For extensions: Define local keybindings in `gph-mode-map'. Add | |
| +;; startup functions to `gph-mode-hook'. | |
| + | |
| +;;; Code: | |
| + | |
| +(eval-when-compile | |
| + (require 'rx)) | |
| + | |
| +(defvar gph--font-lock-defaults | |
| + (let* ((type-rx '(or "0" "1" "3" "7" "8" "9" "g" "I" "h" "i")) | |
| + (desc-rx '(* (not "|"))) | |
| + (path-rx '(* (not "|"))) | |
| + (host-rx '(* (not "|"))) | |
| + (port-rx '(+ digit)) | |
| + (link-rx `(: line-start "[" ,type-rx "|" ,desc-rx "|" ,path-rx "|" ,h… | |
| + (badlink-rx `(: line-start "[" (* anything)))) | |
| + `((,(rx-to-string link-rx) 0 font-lock-doc-markup-face) | |
| + (,(rx-to-string badlink-rx) 0 font-lock-warning-face)))) | |
| + | |
| +(defvar gph-mode-hook nil | |
| + "Hook for `gph-mode'. Is run whenever the mode is entered.") | |
| + | |
| +(defvar gph-mode-map | |
| + (let ((map (make-keymap))) | |
| + map) | |
| + "Keymap for `gph-mode'.") | |
| + | |
| +;;;###autoload | |
| +(add-to-list 'auto-mode-alist '("\\.gph" . gph-mode)) | |
| + | |
| +;;;###autoload | |
| +(define-derived-mode gph-mode text-mode "gph" | |
| + "Major mode for .gph files as used by geomyidae." | |
| + (setq-local paragraph-start (concat "^\\[|\\|[ \t]*$\\|" page-delimiter)) | |
| + (setq-local paragraph-separate (concat "^\\[\\|[ \t]*$\\|" page-delimiter)) | |
| + (setq-local font-lock-defaults '(gph--font-lock-defaults))) | |
| + | |
| +(provide 'gph-mode) | |
| + | |
| +;;; gph-mode.el ends here |