emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/forth-mode 24d3d052fe 003/153: More work. Font lock and na


From: ELPA Syncer
Subject: [nongnu] elpa/forth-mode 24d3d052fe 003/153: More work. Font lock and navigation somewhat usable.
Date: Sat, 29 Jan 2022 08:02:06 -0500 (EST)

branch: elpa/forth-mode
commit 24d3d052fe86b3cc22967bddecf4a5e941bc935d
Author: Lars Brinkhoff <lars@nocrew.org>
Commit: Lars Brinkhoff <lars@nocrew.org>

    More work.  Font lock and navigation somewhat usable.
---
 forth-block-mode.el       |  3 +++
 forth-interaction-mode.el |  3 +++
 forth-mode.el             | 66 ++++++++++++++++++++++++++++++++++++-----------
 3 files changed, 57 insertions(+), 15 deletions(-)

diff --git a/forth-block-mode.el b/forth-block-mode.el
new file mode 100644
index 0000000000..5edbbf0524
--- /dev/null
+++ b/forth-block-mode.el
@@ -0,0 +1,3 @@
+(define-minor-mode forth-block-mode
+  "Minor mode for Forth code in blocks."
+  :lighter " block")
diff --git a/forth-interaction-mode.el b/forth-interaction-mode.el
new file mode 100644
index 0000000000..74dc7696b7
--- /dev/null
+++ b/forth-interaction-mode.el
@@ -0,0 +1,3 @@
+(define-derived-mode forth-interaction-mode comint-mode "Forth Interaction"
+  "Major mode for interacting with Forth."
+  :syntax-table forth-interaction-mode-syntax-table)
diff --git a/forth-mode.el b/forth-mode.el
index 815d18b571..ad55515344 100644
--- a/forth-mode.el
+++ b/forth-mode.el
@@ -1,13 +1,40 @@
 ;;;; -*- emacs-lisp -*-
+;;; Copyright 2014 Lars Brinkhoff
 
-(defvar forth-mode-map)
+(defvar forth-mode-map
+  (let ((map (make-sparse-keymap)))
+    ;; (define-key (kbd "C-x C-e") #'forth-eval-last-sexp)
+    ;; (define-key (kbd "C-M-x") #'forth-eval-defun)
+    ;; (define-key (kbd "C-c C-r") #'forth-eval-region)
+    ;; eval-buffer
+    ;; compile-region
+    ;; (define-key (kbd "C-x C-e") #'forth-eval-last-sexp)
+    ;; (define-key (kbd "C-M-x") #'forth-eval-defun)
+    ;; (define-key (kbd "C-c C-r") #'forth-eval-region)
+    ;; (define-key (kbd "C-c C-l") #'forth-load-file)
+    ;; (define-key (kbd "C-c :") #'forth-eval-expression)
+    ;; (define-key (kbd "C-c C-c") #'forth-compile-defun)
+    ;; (define-key (kbd "C-c C-k") #'forth-compile-and-load-file)
+    ;; (define-key (kbd "C-c M-k") #'forth-compile-file)
+    ;; (define-key (kbd "C-x `") #'forth-next-error)
+    ;; (define-key (kbd "M-n") #'forth-next-note)
+    ;; (define-key (kbd "M-p") #'forth-previous-note)
+    ;; (define-key (kbd "M-TAB") #'forth-complete-symbol)
+    ;; (define-key (kbd "M-.") #'forth-edit-definition)
+    ;; (define-key (kbd "C-c M-d") #'forth-disassemble-symbol)
+    ;; (define-key (kbd "C-c M-d") #'forth-disassemble-symbol)
+    ;; (define-key (kbd "C-c C-z") #'forth-switch-to-output-buffer)
+    map))
 
 (defvar forth-mode-syntax-table
   (let ((table (make-syntax-table)))
     (modify-syntax-entry ?\\ "<" table)
     (modify-syntax-entry ?\n ">" table)
-    (modify-syntax-entry ?\( "<" table)
-    (modify-syntax-entry ?\) ">" table)
+    (modify-syntax-entry ?\( "<1" table)
+    (modify-syntax-entry ?\) ">4" table)
+    (modify-syntax-entry ?* "_23n" table)
+    (modify-syntax-entry ?\{ "<" table)
+    (modify-syntax-entry ?\} ">" table)
     (modify-syntax-entry ?\: "(" table)
     (modify-syntax-entry ?\; ")" table)
     (modify-syntax-entry ?[ "(" table)
@@ -21,30 +48,39 @@
     (modify-syntax-entry ?, "_" table)
     table))
 
-(defvar forth-mode-hooks)
+(defvar forth-mode-hook)
+
+(defvar forth-font-lock-keywords
+  '((forth-match-colon-definition 3 font-lock-function-name-face)))
 
 ;;;### autoload
-(defun forth-mode ()
-  "Major mode for editing Forth files."
-  (interactive)
-  (kill-all-local-variables)
-  (set-syntax-table forth-mode-syntax-table)
-  ;; (make-local-variable ...)
-  (setq major-mode 'forth-mode
-       mode-name "Forth"
-       ;; font-lock-defaults
+(define-derived-mode forth-mode prog-mode "Forth"
+                    "Major mode for editing Forth files."
+                    :syntax-table forth-mode-syntax-table
+  (setq font-lock-defaults '(forth-font-lock-keywords))
+  (setq ;; font-lock-defaults
        indent-line-function #'forth-indent
        comment-indent-function #'forth-indent-comment
        comment-start-skip "\\((\\*?\\|\\\\\\) *"
        comment-start "("
-       comment-end ")")
-  (run-mode-hooks 'forth-mode-hooks))
+       comment-end ")"
+       imenu-generic-expression
+       '(("Words"
+          "^\\s-*\\(:\\|code\\|defer\\)\\s-+\\(\\(\\sw\\|\\s_\\)+\\)" 2)
+         ("Variables"
+          
"^\\s-*2?\\(variable\\|create\\|value\\)\\s-+\\(\\(\\sw\\|\\s_\\)+\\)" 2)
+         ("Constants"
+          "\\s-2?constant\\s-+\\(\\(\\sw\\|\\s_\\)+\\)" 1))))
 
 (add-to-list 'auto-mode-alist '("\\.\\(f\\|fs\\|fth\\)\\'" . forth-mode))
 
 ;;; : ; does> variable constant value
 ;;; if else then  do loop begin while repeat again until  postpone
 
+(defun forth-match-colon-definition (limit)
+  (search-forward-regexp 
"\\(^\\|\\s-\\)\\(\\S-*:\\|code\\|defer\\|2?variable\\|create\\|2?value\\|2?constant\\)\\s-+\\([[:graph:]]+\\)"
+                        limit t))
+
 (defun forth-forward-sexp ())
 (defun forth-backward-sexp ())
 (defun forth-kill-sexp ())



reply via email to

[Prev in Thread] Current Thread [Next in Thread]