]> gitweb.factorcode.org Git - factor.git/blob - misc/fuel/fuel-base.el
Use lexical scoping in all fuel sources
[factor.git] / misc / fuel / fuel-base.el
1 ;;; fuel-base.el --- Basic FUEL support code -*- lexical-binding: t -*-
2
3 ;; Copyright (C) 2008 Jose Antonio Ortega Ruiz
4 ;; See http://factorcode.org/license.txt for BSD license.
5
6 ;; Author: Jose Antonio Ortega Ruiz <jao@gnu.org>
7 ;; Keywords: languages, fuel, factor
8
9 ;;; Commentary:
10
11 ;; Basic definitions likely to be used by all FUEL modules.
12
13 ;;; Code:
14
15 (defconst fuel-version "1.1")
16
17 ;;;###autoload
18 (defsubst fuel-version ()
19   "Echoes FUEL's version."
20   (interactive)
21   (message "FUEL %s" fuel-version))
22
23 ;;; Customization:
24
25 ;;;###autoload
26 (defgroup fuel nil
27   "Factor's Ultimate Emacs Library."
28   :group 'languages)
29
30 ;;; Compatibility with Emacs 24.3
31 (unless (fboundp 'setq-local)
32   (defmacro setq-local (var val)
33     (list 'set (list 'make-local-variable (list 'quote var)) val)))
34
35 (unless (fboundp 'defvar-local)
36   (defmacro defvar-local (var val &optional docstring)
37     (declare (debug defvar) (doc-string 3))
38     (list 'progn (list 'defvar var val docstring)
39           (list 'make-variable-buffer-local (list 'quote var)))))
40
41 (unless (fboundp 'alist-get)
42   (defun alist-get (key alist)
43     (cdr (assoc key alist))))
44
45 ;;; Utilities:
46 (defun fuel-shorten-str (str len)
47   (let ((sl (length str)))
48     (if (<= sl len) str
49       (let* ((sep " ... ")
50              (sepl (length sep))
51              (segl (/ (- len sepl) 2)))
52         (format "%s%s%s" (substring str 0 segl)
53                 sep (substring str (- sl segl)))))))
54
55 (defun fuel-shorten-region (begin end len)
56   (fuel-shorten-str
57    (mapconcat 'identity
58               (split-string (buffer-substring begin end) nil t) " ") len))
59
60 (defsubst fuel-region-to-string (begin &optional end)
61   (let ((end (or end (point))))
62     (if (< begin end)
63         (mapconcat 'identity
64                    (split-string (buffer-substring-no-properties begin end)
65                                  nil t) " ") "")))
66
67 (defun fuel-respecting-message (format &rest format-args)
68   "Display TEXT as a message, without hiding any minibuffer contents."
69   (let ((text (format " [%s]" (apply #'format format format-args))))
70     (if (minibuffer-window-active-p (minibuffer-window))
71         (minibuffer-message text)
72       (message "%s" text))))
73
74 (defun fuel-mode--read-file (arg)
75   (let* ((file (or (and arg (read-file-name "File: " nil (buffer-file-name) t))
76                    (buffer-file-name)))
77          (file (expand-file-name file))
78          (buffer (find-file-noselect file)))
79     (when (and  buffer
80                 (buffer-modified-p buffer)
81                 (y-or-n-p "Save file? "))
82       (save-buffer buffer))
83     (cons file buffer)))
84
85 ;; I think it is correct to put almost all punctuation characters in
86 ;; the word class because Factor words can be made up of almost
87 ;; anything. Otherwise you get incredibly annoying regexps.
88 (defun fuel-syntax-table ()
89     (let ((table (make-syntax-table prog-mode-syntax-table)))
90     (modify-syntax-entry ?\" "\"" table)
91     (modify-syntax-entry ?# "_" table)
92     (modify-syntax-entry ?! "_" table)
93     (modify-syntax-entry ?\n ">   " table)
94     (modify-syntax-entry ?$ "_" table)
95     (modify-syntax-entry ?@ "_" table)
96     (modify-syntax-entry ?? "_" table)
97     (modify-syntax-entry ?_ "_" table)
98     (modify-syntax-entry ?: "_" table)
99     (modify-syntax-entry ?< "_" table)
100     (modify-syntax-entry ?> "_" table)
101     (modify-syntax-entry ?. "_" table)
102     (modify-syntax-entry ?, "_" table)
103     (modify-syntax-entry ?& "_" table)
104     (modify-syntax-entry ?| "_" table)
105     (modify-syntax-entry ?% "_" table)
106     (modify-syntax-entry ?= "_" table)
107     (modify-syntax-entry ?/ "_" table)
108     (modify-syntax-entry ?+ "_" table)
109     (modify-syntax-entry ?* "_" table)
110     (modify-syntax-entry ?- "_" table)
111     (modify-syntax-entry ?\; "_" table)
112     (modify-syntax-entry ?\' "_" table)
113     (modify-syntax-entry ?^ "_" table)
114     (modify-syntax-entry ?~ "_" table)
115     (modify-syntax-entry ?\( "()" table)
116     (modify-syntax-entry ?\) ")(" table)
117     (modify-syntax-entry ?\{ "(}" table)
118     (modify-syntax-entry ?\} "){" table)
119     (modify-syntax-entry ?\[ "(]" table)
120     (modify-syntax-entry ?\] ")[" table)
121     table))
122
123 (provide 'fuel-base)
124
125 ;;; fuel-base.el ends here