;;; sqf-mode.el --- Major mode for SQF scripts in Arma -*- lexical-binding: t; -*- ;; Author: hybrid ;; Version: 0.1.0 ;; Keywords: languages, sqf, arma, arma3, arma2, syntax ;; URL: https://git.hybridlabs.pro/sqf-mode.git ;; Package-Requires: ((emacs "30.2") (lsp-mode "10.0.0")) ;; This file is not part of GNU Emacs. ;;; Comment: ;; Major mode for editing SQF scripts used in Arma 2/3 series. ;; Provides basic syntax highlighting and integrates with HEMTT LSP server ;;; Code: (require 'prog-mode) (defgroup sqf nil "Major mode for SQF scripts." :group 'languages) ;;;###autoload (define-derived-mode sqf-mode prog-mode "SQF" "Major mode for editing SQF files. Provides basic font-lock keywords and relies on LSP (HEMTT) for advanced features when available. \\{sqf-mode-map}" ;; Comments setup (setq-local comment-start "//") (setq-local comment-end "") (setq-local comment-start-skip "\\(//+\\|/\\*+\\)\\s *") ;; Syntax table: double-quoted strings, ;; processing '/' and '*' symbols and '\n' for multi-line commentaries (modify-syntax-entry ?/ ". 124b") (modify-syntax-entry ?* ". 23") (modify-syntax-entry ?\n "> b") (modify-syntax-entry ?\" "\"") ;; Basic keywords for font-lock (instant highlighting) (setq-local font-lock-defaults `((,(regexp-opt '("if" "then" "else" "while" "for" "do" "switch" "case" "default" "private" "public" "param" "params" "nil" "true" "false" "exitWith" "forEach" "select" "format" "hint" "call" "spawn" "execVM" "and" "or" "not" "mod" "isEqualTo" "in" "this" "player" "server" "local" "global" "remoteExec" "remoteExecCall") 'words) (0 font-lock-keyword-face)))) ;; Soft LSP start (can be configured to disable) (add-hook 'lsp-mode-hook #'lsp--open-after-save nil t) (lsp-deferred)) ;;;###autoload (add-to-list 'auto-mode-alist '("\\.sqf\\'" . sqf-mode)) (provide 'sqf-mode) ;;; sqf-mode.el ends here