Move all *.el files to ./lisp

This commit is contained in:
Jens Luedicke
2025-09-09 16:08:15 +02:00
parent 8567e48c4c
commit a4328ce3ba
19 changed files with 894 additions and 39 deletions

129
lisp/qml-config.el Normal file
View File

@@ -0,0 +1,129 @@
;;; -*- lexical-binding: t -*-
;; QML Mode Configuration (Qt5 - No LSP)
;; This file provides QML mode setup without LSP (Qt5 has no language server)
;; Basic QML mode configuration
(use-package qml-mode
:ensure t
:mode ("\\.qml\\'" . qml-mode)
:config
;; Set up proper indentation
(setq qml-indent-offset 4)
;; Add QML-specific keywords for better syntax highlighting
(font-lock-add-keywords 'qml-mode
'(("\\<\\(readonly\\|default\\|signal\\|alias\\|property\\|required\\)\\>" . font-lock-keyword-face)
("\\<\\(Qt\\|QtQuick\\|QtQuick\\.Controls\\|QtQuick\\.Layouts\\)\\>" . font-lock-constant-face)
("\\<\\(Item\\|Rectangle\\|Text\\|Image\\|MouseArea\\|Column\\|Row\\|Grid\\|ListView\\|GridView\\)\\>" . font-lock-type-face))))
;; Company backends for QML (without LSP)
(with-eval-after-load 'company
(defun setup-qml-company-backends ()
"Set up company backends for QML mode without LSP."
(setq-local company-backends
'((company-dabbrev-code ; Code word completions
company-keywords ; Language keywords
company-files ; File completions
company-yasnippet) ; Snippet completions
company-dabbrev))) ; General word completions
;; Apply to QML mode
(add-hook 'qml-mode-hook 'setup-qml-company-backends))
;; QML snippets configuration
(with-eval-after-load 'yasnippet
;; Create QML snippets directory if it doesn't exist
(let ((qml-snippets-dir (expand-file-name "snippets/qml-mode" user-emacs-directory)))
(unless (file-exists-p qml-snippets-dir)
(make-directory qml-snippets-dir t))))
;; Prevent LSP from being registered for QML
(with-eval-after-load 'lsp-mode
;; Remove QML from LSP language configurations
(setq lsp-language-id-configuration
(assq-delete-all 'qml-mode lsp-language-id-configuration))
;; Unregister any QML LSP clients
(when (boundp 'lsp-clients)
(setq lsp-clients (delq 'qmlls lsp-clients))))
;; Prevent Eglot from activating in QML mode
(with-eval-after-load 'eglot
;; Remove QML from eglot server programs if present
(setq eglot-server-programs
(assq-delete-all 'qml-mode eglot-server-programs)))
;; QML development settings
(add-hook 'qml-mode-hook
(lambda ()
;; Forcefully disable LSP for QML files (Qt5 has no language server)
(when (bound-and-true-p lsp-mode)
(lsp-disconnect)
(lsp-mode -1))
(when (bound-and-true-p lsp-managed-mode)
(lsp-managed-mode -1))
;; Also disable Eglot if it tries to start
(when (bound-and-true-p eglot--managed-mode)
(eglot-shutdown)
(eglot--managed-mode -1))
;; Electric pair mode for automatic bracket/quote pairing
(electric-pair-local-mode 1)
;; Enable automatic indentation
(electric-indent-local-mode 1)
;; Set tab width
(setq tab-width 4)
;; Use spaces instead of tabs
(setq indent-tabs-mode nil)
;; Enable line numbers
(display-line-numbers-mode 1)
;; Disable flycheck (no QML checker for Qt5)
(when (bound-and-true-p flycheck-mode)
(flycheck-mode -1))))
;; Simple navigation functions for QML
(defun qml-find-definition ()
"Simple definition finder using grep."
(interactive)
(let ((thing (thing-at-point 'symbol)))
(when thing
(grep (format "grep -n \"\\b%s\\b\" *.qml" thing)))))
(defun qml-find-references ()
"Simple reference finder using grep."
(interactive)
(let ((thing (thing-at-point 'symbol)))
(when thing
(grep (format "grep -n \"\\b%s\\b\" *.qml" thing)))))
;; Key bindings for QML development (without LSP)
(with-eval-after-load 'qml-mode
(define-key qml-mode-map (kbd "C-c C-d") 'qml-find-definition)
(define-key qml-mode-map (kbd "C-c C-f") 'qml-find-references)
(define-key qml-mode-map (kbd "C-c C-c") 'comment-region)
(define-key qml-mode-map (kbd "C-c C-u") 'uncomment-region))
;; Helper function to insert common QML snippets
(defun qml-insert-property ()
"Insert a QML property declaration."
(interactive)
(insert "property ")
(save-excursion (insert ": ")))
(defun qml-insert-signal ()
"Insert a QML signal declaration."
(interactive)
(insert "signal ")
(save-excursion (insert "()")))
(defun qml-insert-function ()
"Insert a QML function declaration."
(interactive)
(insert "function ")
(save-excursion (insert "() {\n \n}")))
;; Add snippet key bindings
(with-eval-after-load 'qml-mode
(define-key qml-mode-map (kbd "C-c i p") 'qml-insert-property)
(define-key qml-mode-map (kbd "C-c i s") 'qml-insert-signal)
(define-key qml-mode-map (kbd "C-c i f") 'qml-insert-function))
(provide 'qml-config)