aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhybrid <hybrid@hybridlabs.pro>2026-06-03 04:51:45 +0300
committerhybrid <hybrid@hybridlabs.pro>2026-06-03 04:51:45 +0300
commitfe05286a9c1fdb6ec59c00a00daa0d34fe380906 (patch)
tree595e16c959d45a6095905a680537990e054e2534
parentd3d1167575fd5809bc01e89f609e78e08e0d6c71 (diff)
downloadsqf-mode-fe05286a9c1fdb6ec59c00a00daa0d34fe380906.tar.gz
sqf-mode-fe05286a9c1fdb6ec59c00a00daa0d34fe380906.tar.bz2
sqf-mode-fe05286a9c1fdb6ec59c00a00daa0d34fe380906.zip
add: sqf-mode v0.1.0v0.1.0
-rw-r--r--sqf-mode.el61
1 files changed, 61 insertions, 0 deletions
diff --git a/sqf-mode.el b/sqf-mode.el
new file mode 100644
index 0000000..e8c758b
--- /dev/null
+++ b/sqf-mode.el
@@ -0,0 +1,61 @@
+;;; sqf-mode.el --- Major mode for SQF scripts in Arma -*- lexical-binding: t; -*-
+
+;; Author: hybrid <hybrid@hybridlabs.pro>
+;; 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