From 690dcb42a5f5183d2abc4ba0800484ee5c8ab08d Mon Sep 17 00:00:00 2001 From: Olivier Matz Date: Wed, 2 Jun 2021 15:37:27 +0200 Subject: [PATCH] update --- .Xresources | 59 +++ .emacs | 2 +- .emacs.d/lisp/flatbuffers/flatbuffers-mode.el | 118 ++++++ .emacs.d/lisp/yang/yang-mode.el | 392 ++++++++++++++++++ 4 files changed, 570 insertions(+), 1 deletion(-) create mode 100644 .Xresources create mode 100644 .emacs.d/lisp/flatbuffers/flatbuffers-mode.el create mode 100644 .emacs.d/lisp/yang/yang-mode.el diff --git a/.Xresources b/.Xresources new file mode 100644 index 0000000..87bcd8e --- /dev/null +++ b/.Xresources @@ -0,0 +1,59 @@ +URxvt.font: -misc-fixed-medium-*-*-*-14-*-*-*-*-*-iso10646-* +URxvt.background: #000000 +URxvt.foreground: #bbbbbb +Rxvt.reverseVideo: false +URxvt.scrollBar: false +URxvt.cursorColor: #0000ff +URxvt.cursorBlink: true +URxvt.termName: xterm +URxvt.iso14755 : false +URxvt.color4: #103a87 +URxvt.color12: #2455e0 + +xterm*font:-misc-fixed-medium-*-*-*-14-*-*-*-*-*-iso10646-* +xterm*background: black +xterm*foreground: #cccccc +xterm*dynamicColors: true +xterm*color0: black +xterm*color1: #cd0000 +xterm*color2: #00cd00 +xterm*color3: #cdcd00 +xterm*color4: #1e50ff +xterm*color5: #cd00cd +xterm*color6: #00cdcd +xterm*color7: #cccccc +xterm*color8: #4c4c4c +xterm*color9: red +xterm*color10: green +xterm*color11: yellow +xterm*color12: #4682b4 +xterm*color13: magenta +xterm*color14: cyan +xterm*color15: white +xterm*cursorColor: orange +xterm*cursorBlink: true + +xterm*metaSendsEscape: true +XTerm*metaSendsEscape: true +XTerm*selectToClipboard: false +xterm*VT100.Translations: #override \ + Ctrl Shift V: insert-selection(CLIPBOARD) \n\ + Ctrl Shift C: copy-selection(CLIPBOARD) + +xterm*utf8: 2 +xterm*eightBitInput: false +xterm*saveLines: 65536 +xterm*scrollKey: true +xterm*scrollTtyOutput: false +xterm*scrollBar: false +xterm*jumpScroll: true +xterm*multiScroll: true +xterm*toolBar: false +xterm*loginShell: true +xterm*fullscreen: never +xterm*termName: xterm-256color + +xterm*on2Clicks: regex [^/@ \n]+ +xterm*on3Clicks: regex [^ \n]+ +xterm*on4Clicks: regex [^#$]+ +xterm*on5Clicks: line diff --git a/.emacs b/.emacs index 0cd101c..c811a39 100644 --- a/.emacs +++ b/.emacs @@ -9,7 +9,7 @@ (add-to-list 'load-path "~/.emacs.d/lisp/yang") (load "yang-mode.el") -(add-to-list 'load-path "~/.emacs.d/flatbuffers") +(add-to-list 'load-path "~/.emacs.d/lisp/flatbuffers") (load "flatbuffers-mode.el") (editorconfig-mode 1) diff --git a/.emacs.d/lisp/flatbuffers/flatbuffers-mode.el b/.emacs.d/lisp/flatbuffers/flatbuffers-mode.el new file mode 100644 index 0000000..3633650 --- /dev/null +++ b/.emacs.d/lisp/flatbuffers/flatbuffers-mode.el @@ -0,0 +1,118 @@ +;;; flatbuffers-mode.el --- Major mode for editing flatbuffers -*- lexical-binding: t; -*- + +;; Copyright (C) 2019-2020 Asal Mirzaieva + +;; Author: Asal Mirzaieva +;; Created: 12-Nov-2019 +;; Version: 0.2 +;; Keywords: flatbuffers languages +;; Homepage: https://github.com/Asalle/flatbuffers-mode +;; Package-Requires: ((emacs "24.3")) + +;; This file is not part of GNU Emacs. + +;; This program 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 3 of the License, or +;; (at your option) any later version. +;; +;; This program 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 this program. If not, see . + +;;; Commentary: + +;; FlatBuffers is an efficient cross platform serialization library for C++, C#, C, Go, Java, Kotlin, JavaScript, Lobster, Lua, TypeScript, PHP, Python, Rust and Swift. It was originally created at Google for game development and other performance-critical applications. +;; https://google.github.io/flatbuffers/ + +;; Installation: +;; - Put `flatbuffers-mode.el' in your Emacs load-path. +;; - Add this line to your .emacs file: +;; (require 'flatbuffers-mode) +;; +;;; Code: + +;; Font-locking definitions and helpers +(defconst flatbuffers-mode-keywords + '("namespace" "root_type" "struct" "table" "enum" "union" "required" "include" "attribute" "rpc_service" "file_extension" "file_identifier")) + +(defconst flatbuffers-special-types + '("double" "bool" "uint" "ulong")) + +(defconst flatbuffers-comment-start "//") + +(defconst flatbuffers-re-ident "[[:word:][:multibyte:]_][[:word:][:multibyte:]_[:digit:]]*") + +(defconst flatbuffers-re-generic + (concat "<[[:space:]]*'" flatbuffers-re-ident "[[:space:]]*>")) + +(defun flatbuffers-re-word (inner) "Generate word regex. INNER is the word to enclose." (concat "\\<" inner "\\>")) +(defun flatbuffers-re-grab (inner) "Generate grab regex. INNER is the expression to enclose." (concat "\\(" inner "\\)")) +(defun flatbuffers-re-shy (inner) "Generate shy regex. INNER is the expression to enclose." (concat "\\(?:" inner "\\)")) + +(defun flatbuffers-re-item-def (itype) + "Highlight the keywords. ITYPE is the type of the keyword." + (concat (flatbuffers-re-word itype) + (flatbuffers-re-shy flatbuffers-re-generic) "?" + "[[:space:]]+" (flatbuffers-re-grab flatbuffers-re-ident))) + +(defvar flatbuffers-mode-font-lock-keywords + (append + `( + ;; Keywords + (,(regexp-opt flatbuffers-mode-keywords 'symbols) . font-lock-keyword-face) + + ;; Special types + (,(regexp-opt flatbuffers-special-types 'symbols) . font-lock-type-face) + + (,(concat (flatbuffers-re-grab flatbuffers-re-ident) "[[:space:]]*:[^:]") 1 font-lock-variable-name-face) + + ;; Ensure we highlight `Foo' in a:Foo + (,(concat ":[[:space:]]*" (flatbuffers-re-grab flatbuffers-re-ident)) 1 font-lock-type-face)) + + ;; Ensure we highlight `Foo` in `struct Foo` as a type. + (mapcar (lambda (x) + (list (flatbuffers-re-item-def (car x)) + 1 (cdr x))) + '(("enum" . font-lock-type-face) + ("struct" . font-lock-type-face) + ("union" . font-lock-type-face) + ("root_type" . font-lock-type-face) + ("table" . font-lock-type-face))))) + +(defvar flatbuffers-mode-syntax-table + (let ((table (make-syntax-table))) + (modify-syntax-entry ?/ ". 14") + table)) + +;;;###autoload +(define-derived-mode flatbuffers-mode prog-mode "Flatbuffers" + "Major mode for Flatbuffers code. + +\\{flatbuffers-mode-map}" + :group 'flatbuffers-mode + :syntax-table flatbuffers-mode-syntax-table + + ;; Fonts + (setq-local font-lock-defaults '(flatbuffers-mode-font-lock-keywords + nil nil nil nil + (font-lock-syntactic-face-function . flatbuffers-mode-syntactic-face-function))) + (font-lock-add-keywords nil `((,(concat flatbuffers-comment-start ".*") 0 font-lock-comment-face t)))) + +;;;###autoload +(add-to-list 'auto-mode-alist '("\\.fbs\\'" . flatbuffers-mode)) + +(defun flatbuffers-mode-reload () + "Reload the flatbuffers mode in current buffer." + (interactive) + (unload-feature 'flatbuffers-mode) + (require 'flatbuffers-mode) + (flatbuffers-mode)) + +(provide 'flatbuffers-mode) + +;;; flatbuffers-mode.el ends here diff --git a/.emacs.d/lisp/yang/yang-mode.el b/.emacs.d/lisp/yang/yang-mode.el new file mode 100644 index 0000000..6d405a2 --- /dev/null +++ b/.emacs.d/lisp/yang/yang-mode.el @@ -0,0 +1,392 @@ +;;; yang-mode.el --- major mode for editing YANG files + +;; This program 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 program 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 this program; see the file COPYING. If not, write to +;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;; Author: Martin Bjorklund +;; Version: 0.9.7 + +;;; Commentary: + +;; Note: The interface used in this file requires CC Mode 5.30 or +;; later. + +;; History: +;; 0.9.7 - 2017-03-23 +;; one more autoload fix +;; 0.9.6 - 2017-03-21 +;; autoload fix, tested with use-package +;; 0.9.5 - 2017-02-13 +;; autoload fix +;; 0.9.4 - 2016-12-20 +;; derive from prog-mode if available, otherwise nil +;; use proper syntax-table +;; 0.9.3 - 2016-12-13 +;; derive from nil +;; 0.9.2 - 2016-12-13 +;; derive mode from prog-mode in order to get correct hook behavior +;; 0.9.1 - 2016-12-12 +;; use define-derived-mode +;; yang-fill-paragraph now works in Emacs 23 +;; 0.9 - 2016-12-09 +;; workaround Emacs bug #18845 (for 24.4+) +;; 00.8 - 2016-10-27 +;; rfc7950 compliant +;; added yang-fill-paragraph for better string fill +;; 00.7 - 2016-03-15 +;; draft-ietf-netmod-rfc6020bis-11 compliant +;; added support for new 1.1 keywords +;; 00.6 - 2012-02-01 +;; removed unused defcustom yang-font-lock-extra-types +;; made emacs24 to give a warning +;; 00.5 - 2010-10-07 +;; rfc6020 compliant +;; classify all keywords as decl-start gives better indentation +;; 00.4 - 2010-04-30 +;; draft-ietf-netmod-yang-12 compliant, +;; added instructions for Emacs 23 +;; 00.3 - 2009-12-19 +;; draft-ietf-netmod-yang-09 compliant, +;; 00.2 - 2008-11-04 +;; draft-ietf-netmod-yang-02 compliant. +;; 00.1 - 2007-11-14 +;; Initial version, draft-bjorklund-netconf-yang-00 compliant. + +;; Useful tips: +;; +;; If you're using use-package, put this in your .emacs: +;; (use-package yang-mode +;; :ensure t) +;; +;; Otherwise, put this in your .emacs: +;; (require 'yang-mode) +;; +;; For use with Emacs 23, put this in your .emacs: +;; (autoload 'yang-mode "yang-mode" "Major mode for editing YANG modules." +;; t) +;; (add-to-list 'auto-mode-alist '("\\.yang$" . yang-mode)) +;; +;; Some users have reported other errors with Emacs 23, and have found +;; that removing the byte-compiled cc-mode.elc file fixes these problems. +;; (e.g. /usr/share/emacs/23.1/lisp/progmodes/cc-mode.elc) +;; +;; +;; For editing somewhat larger YANG modules, add this to your .emacs +;; (setq blink-matching-paren-distance nil) +;; +;; Common YANG layout: +;; (defun my-yang-mode-hook () +;; "Configuration for YANG Mode. Add this to `yang-mode-hook'." +;; (if window-system +;; (progn +;; (c-set-style "BSD") +;; (setq indent-tabs-mode nil) +;; (setq c-basic-offset 2) +;; (setq font-lock-maximum-decoration t) +;; (font-lock-mode t)))) +;; +;; (add-hook 'yang-mode-hook 'my-yang-mode-hook) +;; +;; Using the oultine minor mode for YANG is very useful to get a +;; good overview of the structure of a module. +;; +;; Put this in your .emacs: +;; +;; (defun show-onelevel () +;; "show entry and children in outline mode" +;; (interactive) +;; (show-entry) +;; (show-children)) +;; +;; (defun my-outline-bindings () +;; "sets shortcut bindings for outline minor mode" +;; (interactive) +;; (local-set-key [?\C-,] 'hide-body) +;; (local-set-key [?\C-.] 'show-all) +;; (local-set-key [C-up] 'outline-previous-visible-heading) +;; (local-set-key [C-down] 'outline-next-visible-heading) +;; (local-set-key [C-left] 'hide-subtree) +;; (local-set-key [C-right] 'show-onelevel) +;; (local-set-key [M-up] 'outline-backward-same-level) +;; (local-set-key [M-down] 'outline-forward-same-level) +;; (local-set-key [M-left] 'hide-subtree) +;; (local-set-key [M-right] 'show-subtree)) +;; +;; (add-hook +;; 'outline-minor-mode-hook +;; 'my-outline-bindings) +;; +;; (defconst sort-of-yang-identifier-regexp "[-a-zA-Z0-9_\\.:]*") +;; +;; (add-hook +;; 'yang-mode-hook +;; '(lambda () +;; (outline-minor-mode) +;; (setq outline-regexp +;; (concat "^ *" sort-of-yang-identifier-regexp " *" +;; sort-of-yang-identifier-regexp +;; " *{")))) + +;;; Code: + +(require 'cc-mode) + +;; These are only required at compile time to get the sources for the +;; language constants. (The cc-fonts require and the font-lock +;; related constants could additionally be put inside an +;; (eval-after-load "font-lock" ...) but then some trickery is +;; necessary to get them compiled.) +(eval-when-compile + (require 'cc-langs) + (require 'cc-fonts)) + +(eval-and-compile + ;; Make our mode known to the language constant system. Use Java + ;; mode as the fallback for the constants we don't change here. + ;; This needs to be done also at compile time since the language + ;; constants are evaluated then. + (c-add-language 'yang-mode 'java-mode)) + +;; Work around Emacs bug #18845, cc-mode expects cl to be loaded +(eval-and-compile + (if (and (= emacs-major-version 24) (>= emacs-minor-version 4)) + (require 'cl))) + +;; YANG has no primitive types in the C/Java sense. +(c-lang-defconst c-primitive-type-kwds + yang '()) + +(c-lang-defconst c-modifier-kwds + yang '()) + +(c-lang-defconst c-label-kwds + yang '()) + +(c-lang-defconst c-before-label-kwds + yang '()) + +(c-lang-defconst c-class-decl-kwds + yang '()) + +(c-lang-defconst c-decl-start-kwds + yang '( + "action" + "anydata" + "anyxml" + "argument" + "augment" + "base" + "belongs-to" + "bit" + "case" + "choice" + "config" + "contact" + "container" + "default" + "description" + "deviate" + "deviation" + "enum" + "error-app-tag" + "error-message" + "extension" + "feature" + "fraction-digits" + "grouping" + "identity" + "if-feature" + "import" + "include" + "input" + "key" + "leaf" + "leaf-list" + "length" + "list" + "mandatory" + "max-elements" + "min-elements" + "modifier" + "module" + "must" + "namespace" + "notification" + "ordered-by" + "organization" + "output" + "path" + "pattern" + "position" + "prefix" + "presence" + "range" + "reference" + "refine" + "require-instance" + "revision" + "revision-date" + "rpc" + "status" + "submodule" + "type" + "typedef" + "unique" + "units" + "uses" + "value" + "when" + "yang-version" + "yin-element" + )) + +;; No cpp in this language. (The definitions for the extra keywords +;; above are enough to incorporate them into the fontification regexps +;; for types and keywords, so no additional font-lock patterns are +;; required.) +(c-lang-defconst c-cpp-matchers + yang + ;; There are some other things in `c-cpp-matchers' besides the + ;; preprocessor support, so include it. + (c-lang-const c-cpp-matchers)) + +;; '-' is part of an identifier in YANG +;; FIXME: how do I make '.' part of the identifier? +(c-lang-defconst c-identifier-syntax-modifications + yang (append '((?- . "w") (?: . "w")) + (c-lang-const c-identifier-syntax-modifications))) + +(c-lang-defconst c-symbol-chars + yang (concat c-alnum ":_-")) + +;; YANG does not have labels +(c-lang-defconst c-recognize-colon-labels + yang nil) + +(defconst yang-font-lock-keywords-1 (c-lang-const c-matchers-1 yang) + "Minimal highlighting for YANG mode.") + +(defconst yang-font-lock-keywords-2 (c-lang-const c-matchers-2 yang) + "Fast normal highlighting for YANG mode.") + +(defconst yang-font-lock-keywords-3 (c-lang-const c-matchers-3 yang) + "Accurate normal highlighting for YANG mode.") + +(defvar yang-font-lock-keywords yang-font-lock-keywords-3 + "Default expressions to highlight in YANG mode.") + +(defvar yang-mode-syntax-table nil + "Syntax table used in `yang-mode' buffers.") +(or yang-mode-syntax-table + (setq yang-mode-syntax-table + (funcall (c-lang-const c-make-mode-syntax-table yang)))) + +(defvar yang-mode-map (let ((map (c-make-inherited-keymap))) + ;; Add bindings which are only useful for YANG + map) + "Keymap used in `yang-mode' buffers.") + +(easy-menu-define yang-menu yang-mode-map "YANG Mode Commands" + ;; Can use `yang' as the language for `c-mode-menu' + ;; since its definition covers any language. In + ;; this case the language is used to adapt to the + ;; nonexistence of a cpp pass and thus removing some + ;; irrelevant menu alternatives. + (cons "YANG" (c-lang-const c-mode-menu yang))) + +(defun yang-fill-paragraph (&optional arg) + "Like \\[c-fill-paragraph] but handles first line in strings properly. + + Optional prefix ARG means justify paragraph as well." + ;; c-fill-paragraph narrows the region to the contents of a string + ;; before filling, and this means that the start quote character + ;; will be in column 1 in the narrowed region. Thus the first line + ;; line will not be filled properly. + ;; This function handles this by temporarily inserting a newline + ;; followed by whitespaces to line up the first line before filling. + (interactive) + (save-excursion + (let ((limits (c-literal-limits)) + (tmppoint nil) + (col nil)) + (if (eq (c-literal-type limits) 'string) + (let ((curpoint (point))) + (backward-paragraph) + (if (< (point) (car limits)) + ;; do this in the first paragraph of a string + (let ((first-char (+ 1 (car limits)))) + (goto-char first-char) + (beginning-of-line) + (setq col (- first-char (point))) + (goto-char first-char) + (setq tmppoint (point)) + (insert-char ?\n 1) + (insert-char ?\s col)) + (goto-char curpoint)))) + (c-fill-paragraph arg) + (if tmppoint + (progn + (goto-char tmppoint) + (delete-char (+ 1 col)))))) + ;; Always return t. This has the effect that if filling isn't done + ;; above, it isn't done at all, and it's therefore effectively + ;; disabled in normal code. + t) + +;; It doesn't suffice to put `yang-fill-paragraph' on +;; `fill-paragraph-function' since `yang-fill-paragraph' must be called +;; before any fill prefix adaption is done. +(substitute-key-definition 'c-fill-paragraph 'yang-fill-paragraph + yang-mode-map c-mode-map) + +;; derive from prog-mode if it is defined +(if (fboundp 'prog-mode) + (defmacro yang-define-derived-mode (mode &rest args) + `(define-derived-mode ,mode prog-mode ,@args)) + (defmacro yang-define-derived-mode (mode &rest args) + `(define-derived-mode ,mode nil ,@args))) + +;;;###autoload(autoload 'yang-mode "yang-mode" "" t nil) +(yang-define-derived-mode yang-mode "YANG" + "Major mode for editing YANG modules. + +The hook `c-mode-common-hook' is run with no args at mode +initialization, then `yang-mode-hook'. + +Key bindings: +\\{yang-mode-map}" + :syntax-table yang-mode-syntax-table + (c-initialize-cc-mode t) + (c-init-language-vars yang-mode) + (c-common-init 'yang-mode) + + ;; Allow auto-fill in strings + (setq c-ignore-auto-fill '(cpp code)) + + ;; Install `yang-fill-paragraph' on `fill-paragraph-function' so + ;; that a direct call to `fill-paragraph' behaves better. + (make-local-variable fill-paragraph-function) + (setq fill-paragraph-function 'yang-fill-paragraph) + ;; we derive from prog-mode/nil rather than c-mode in order to not run + ;; c-mode-hooks; this means that we need to run c-mode-common-hook + ;; explicitly. + (c-run-mode-hooks 'c-mode-common-hook)) + +;;;###autoload +(add-to-list 'auto-mode-alist '("\\.yang\\'" . yang-mode)) + +(provide 'yang-mode) + +;;; yang-mode.el ends here -- 2.20.1