-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfunctional-data-structures.el
More file actions
126 lines (104 loc) · 3.7 KB
/
functional-data-structures.el
File metadata and controls
126 lines (104 loc) · 3.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
;;; functional-data-structures.el --- Emacs configuration for Functional Data Structures project
;;; Commentary:
;; Project-specific Emacs configuration for Scheme development
;; with Geiser, Guile, org-mode, TRAMP, and paredit support
;;; Code:
;; Package initialization
(require 'package)
(setq package-archives '(("melpa" . "https://melpa.org/packages/")
("gnu" . "https://elpa.gnu.org/packages/")))
(package-initialize)
;; Install required packages if not present
(defvar required-packages
'(geiser
geiser-guile
paredit
org
company
flycheck
rainbow-delimiters))
(dolist (pkg required-packages)
(unless (package-installed-p pkg)
(package-refresh-contents)
(package-install pkg)))
;; Geiser configuration for Guile
(require 'geiser)
(require 'geiser-guile)
(setq geiser-guile-binary "guile3")
(setq geiser-active-implementations '(guile))
(setq geiser-default-implementation 'guile)
;; Add project directories to Guile load path
(defvar project-root (or (getenv "PROJECT_ROOT") default-directory))
(setq geiser-guile-load-path
(list (expand-file-name "scheme" project-root)
(expand-file-name "." project-root)))
;; Paredit for structured editing
(require 'paredit)
(add-hook 'scheme-mode-hook 'paredit-mode)
(add-hook 'geiser-repl-mode-hook 'paredit-mode)
(add-hook 'emacs-lisp-mode-hook 'paredit-mode)
;; Rainbow delimiters for better visibility
(require 'rainbow-delimiters)
(add-hook 'prog-mode-hook 'rainbow-delimiters-mode)
;; Company mode for auto-completion
(require 'company)
(add-hook 'after-init-hook 'global-company-mode)
(setq company-idle-delay 0.2)
(setq company-minimum-prefix-length 2)
;; Org-mode configuration for literate programming
(require 'org)
(setq org-babel-load-languages
'((scheme . t)
(emacs-lisp . t)
(python . t)
(shell . t)))
(org-babel-do-load-languages 'org-babel-load-languages org-babel-load-languages)
(setq org-confirm-babel-evaluate nil)
(setq org-src-preserve-indentation t)
(setq org-src-fontify-natively t)
;; TRAMP configuration for remote development
(require 'tramp)
(setq tramp-default-method "ssh")
(setq tramp-persistency-file-name
(expand-file-name ".tramp" project-root))
;; Flycheck for syntax checking
(require 'flycheck)
(add-hook 'scheme-mode-hook 'flycheck-mode)
;; Project-specific key bindings
(global-set-key (kbd "C-c g") 'geiser-mode-switch-to-repl)
(global-set-key (kbd "C-c C-g") 'geiser-mode-switch-to-repl-and-enter)
(global-set-key (kbd "C-c r") 'geiser-eval-region)
(global-set-key (kbd "C-c b") 'geiser-eval-buffer)
(global-set-key (kbd "C-c d") 'geiser-doc-symbol-at-point)
;; Custom functions for project
(defun fds-run-tests ()
"Run project tests."
(interactive)
(compile "make test"))
(defun fds-tangle-org ()
"Tangle org files."
(interactive)
(compile "make tangle"))
(defun fds-open-repl ()
"Open Guile REPL with project configuration."
(interactive)
(run-geiser 'guile))
;; Key bindings for custom functions
(global-set-key (kbd "C-c t") 'fds-run-tests)
(global-set-key (kbd "C-c o") 'fds-tangle-org)
(global-set-key (kbd "C-c R") 'fds-open-repl)
;; Set up project files
(when (file-exists-p project-root)
(cd project-root)
(message "Functional Data Structures project loaded from %s" project-root))
;; Scheme-specific configuration
(add-to-list 'auto-mode-alist '("\\.scm\\'" . scheme-mode))
(add-hook 'scheme-mode-hook
(lambda ()
(setq-local indent-tabs-mode nil)
(setq-local tab-width 2)
(setq-local scheme-indent-offset 2)))
;; Start with a clean environment
(message "Emacs configured for Functional Data Structures project")
(provide 'functional-data-structures)
;;; functional-data-structures.el ends here