diff --git a/.github/assets/screenshot.png b/.github/assets/screenshot.png new file mode 100644 index 0000000..3a3147d Binary files /dev/null and b/.github/assets/screenshot.png differ diff --git a/README.md b/README.md index 1f9e009..61426dd 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,64 @@ # kage-mode + An emacs mode for the kage shader language + +![Screenshot](https://github.com/TLINDEN/kage-mode/blob/main/.github/assets/screenshot.png) + +The mode provides all the features of [go-mode](https://github.com/dominikh/go-mode.el). + +Please note, that you can't use +[lsp-mode](https://github.com/emacs-lsp/lsp-mode) with kage-mode +though, because the go-backend doesn't support it. + +# Install + +Copy the file `kage-mode.el` into some directory in your `load-path`. + +A Melpa package will be available in the future. + +# Configuration + +This is my configuration for kage-mode: + +```lisp +(use-package kage-mode + :ensure nil ;; installed locally in site-lisp + :defer nil + :mode "\\.kg\\'" ;; you must use a different suffix for kage files! + :commands kage-gofmt-before-save + + :init + (defun tvd-kage-install-hooks() + ;; remove the lsp-mode stuff, since unsupported + (remove-hook 'before-save-hook #'lsp-format-buffer t) + (remove-hook 'before-save-hook #'lsp-organize-imports t) + + ;; use gofmt -s + (add-hook 'before-save-hook #'kage-gofmt-before-save t t)) + + :config + (add-hook 'kage-mode-hook #'tvd-kage-install-hooks) + + ;; ignore warnings about no kage lsp backend + (setq lsp-warn-no-matched-clients nil)) +``` +# Meta + +Copyright (C) 2024, T.v.Dein tlinden AT cpan.org + +This file is NOT part of 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, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +USA diff --git a/kage-mode.el b/kage-mode.el new file mode 100644 index 0000000..5b9a7c4 --- /dev/null +++ b/kage-mode.el @@ -0,0 +1,57 @@ +;;; kage-mode.el --- mode for the kage shader language -*- lexical-binding: t; -*- + +;; Copyright (C) 2024, T.v.Dein + +;; This file is NOT part of 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, write to the Free Software +;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +;; USA + +;; Version: 0.0.1 +;; Package-Version: 20240319.100 +;; Author: T.v.Dein +;; Keywords: languages go +;; URL: https://github.com/tlinden/kage-mode +;; License: GNU General Public License >= 3 +;; Package-Requires: ((emacs "24.1")) +;; SPDX-License-Identifier: GPL-3.0 + + +;; kage-mode is simply derived from go-mode +(define-derived-mode kage-mode go-mode "Kage shader script" + "Major mode for editing Ebitengine Kage shader files. + +This mode provides all the features go-mode provides, since kage files +are go compatible. + +It also supports the use of gofmt -s. If you want to use it, add this +to your config: + +\(add-hook 'before-save-hook #'kage-gofmt-before-save)" + (run-hooks 'kage-mode-hook)) + +;; we need to have our own call to gofmt, because the one in go-mode +;; only works with *.go files, but we use the original call to it anyway +(defun kage-gofmt-before-save () + "Execute gofmt, intended to be put into before-safe-hook" + (interactive) + (when (eq major-mode 'kage-mode) (gofmt))) + +;; autoloaders +(autoload 'kage-mode "kage-mode") +(autoload 'kage-gofmt-before-save "execute gofmt on write") + + +(provide 'kage-mode)