~ chicken-core (chicken-5) 335a0d2e230f7e004370c0243ed6dd498770cef0
commit 335a0d2e230f7e004370c0243ed6dd498770cef0
Author: felix <felix@call-with-current-continuation.org>
AuthorDate: Fri Nov 23 19:54:09 2012 +0100
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Fri Nov 23 19:54:09 2012 +0100
added elisp files and flymake script
diff --git a/misc/chicken-flymake.el b/misc/chicken-flymake.el
new file mode 100644
index 00000000..62c7b82a
--- /dev/null
+++ b/misc/chicken-flymake.el
@@ -0,0 +1,56 @@
+;;;; flymake for CHICKEN
+
+;; Taken from:
+;; https://github.com/sroccaserra/emacs/blob/master/flymake-lua.el
+
+;;
+;; Flymake for Lua
+;;
+;; Usage:
+;; (require 'flymake-lua)
+;; (add-hook 'lua-mode-hook 'flymake-lua-load)
+;;
+;; Note: litterally stolen from Steve Purcell's Flymake Ruby.
+;; See http://github.com/purcell/emacs.d/blob/master/site-lisp/flymake-ruby/flymake-ruby.el
+;;
+
+(require 'flymake)
+
+(defgroup flymake-chicken nil
+ "Flymake Chicken Customizations")
+
+(defcustom flymake-chicken-program "chicken-flymake"
+ "How to invoke csc."
+ :type 'file
+ :group 'flymake-chicken)
+
+(defun flymake-create-temp-in-system-tempdir (filename prefix)
+ (make-temp-file (or prefix "flymake-chicken")))
+
+(defun flymake-chicken-init ()
+ (list flymake-chicken-program
+ (list (flymake-init-create-temp-buffer-copy
+ 'flymake-create-temp-in-system-tempdir))))
+
+(defvar flymake-chicken-allowed-file-name-masks
+ '(("\\.scm\\'" flymake-chicken-init)))
+
+(defvar flymake-chicken-err-line-patterns
+ '((" *(\\(.+\\):\\([0-9]+\\)) *"
+ 1 2)
+ ("\\(Error\\|Warning\\|Note\\): *(line \\([0-9.]*\\))"
+ nil 2)))
+
+;(defvar flymake-lua-err-line-patterns
+; '(("^.*luac[0-9.]*\\(.exe\\)?: *\\(.*\\):\\([0-9]+\\): \\(.*\\)$"
+; 2 3 nil 4)))
+
+;;;###autoload
+(defun flymake-chicken-mode ()
+ (interactive)
+ (when (and (not (null buffer-file-name)) (file-writable-p buffer-file-name))
+ (set (make-local-variable 'flymake-allowed-file-name-masks) flymake-chicken-allowed-file-name-masks)
+ (set (make-local-variable 'flymake-err-line-patterns) flymake-chicken-err-line-patterns)
+ (flymake-mode t)))
+
+(provide 'flymake-chicken)
diff --git a/misc/chicken.el b/misc/chicken.el
new file mode 100644
index 00000000..970fba2f
--- /dev/null
+++ b/misc/chicken.el
@@ -0,0 +1,202 @@
+;;;; chicken.el - Scheme mode modified for use with CHICKEN
+
+
+(require 'cmuscheme)
+(require 'cl)
+
+(define-key scheme-mode-map "\C-c\C-l" 'chicken-load-current-file)
+(define-key scheme-mode-map "\C-c\C-k" 'chicken-compile-current-file)
+(define-key scheme-mode-map "\C-x\C-e" 'chicken-send-last-sexp-with-info)
+(define-key scheme-mode-map "\C-c\C-a" 'chicken-apropos)
+(define-key scheme-mode-map "\C-c\C-t" 'chicken-trace)
+(define-key scheme-mode-map "\C-c\C-c" 'scheme-compile-definition)
+
+(global-set-key "\C-c\C-d" 'chicken-doc)
+(global-set-key "\C-c\C-t" 'chicken-trace)
+(global-set-key "\C-c\C-g" 'scheme-grep-current-word)
+(define-key inferior-scheme-mode-map "\C-c\C-d" 'chicken-doc)
+(define-key inferior-scheme-mode-map "\C-c\C-t" 'chicken-trace)
+(define-key inferior-scheme-mode-map "\C-c\C-a" 'chicken-apropos)
+
+(defun chicken-load-current-file (&optional switch)
+ (interactive "P")
+ (let ((file-name (buffer-file-name)))
+ (comint-check-source file-name)
+ (setq chicken-prev-l/c-dir/file
+ (cons (file-name-directory file-name)
+ (file-name-nondirectory file-name)))
+ (comint-send-string
+ (scheme-proc)
+ (concat "(begin (load \"" file-name "\"\) (newline))\n"))
+ (if switch
+ (switch-to-scheme t)
+ (message "\"%s\" loaded." file-name) ) ) )
+
+(defun chicken-compile-current-file (&optional switch)
+ (interactive "P")
+ (let ((file-name (buffer-file-name)))
+ (comint-check-source file-name)
+ (setq chicken-prev-l/c-dir/file
+ (cons (file-name-directory file-name)
+ (file-name-nondirectory file-name)))
+ (message "compiling \"%s\" ..." file-name)
+ (comint-send-string
+ (scheme-proc)
+ (concat "(compile-file \"" file-name "\"\)\n"))
+ (if switch
+ (switch-to-scheme t)
+ (message "\"%s\" compiled and loaded." file-name) ) ) )
+
+(defun chicken-send-last-sexp-with-info ()
+ "hacked version from cmuscheme.el"
+ (interactive)
+ (let* ((str (buffer-substring (save-excursion (backward-sexp) (point)) (point)))
+ (lnbreak (position ?\n str)))
+ (comint-send-string (scheme-proc) str)
+ (comint-send-string
+ (scheme-proc)
+ (concat
+ "(display #<<EOFEOF\n\n;;; "
+ (if lnbreak
+ (substring str 0 lnbreak)
+ str)
+ " ...\n\nEOFEOF\n)\n"))))
+
+(defun chicken-doc (&optional arg)
+ (interactive "P")
+ (let ((words
+ (if current-prefix-arg
+ (split-string (read-from-minibuffer "chicken-doc: ") " ")
+ (list (current-word)))))
+ (unless (null words)
+ (run-chicken-doc words))))
+
+(defun chicken-toc (&optional arg)
+ (interactive "P")
+ (let ((words
+ (if current-prefix-arg
+ (split-string (read-from-minibuffer "chicken-doc: ") " ")
+ (list (current-word)))))
+ (unless (null words)
+ (run-chicken-doc (cons "-c" words)))))
+
+(defun run-chicken-doc (args)
+ (with-current-buffer (get-buffer-create "*chicken-doc*")
+ (erase-buffer)
+ (when (zerop (apply 'call-process "chicken-doc" nil "*chicken-doc*" t args))
+ (goto-char (point-min))))
+ (unless (string= "*chicken-doc*" (buffer-name (current-buffer)))
+ (display-buffer "*chicken-doc*" t)))
+
+(defun chicken-apropos ()
+ (interactive)
+ (let ((func (current-word)))
+ (when func
+ (process-send-string "*scheme*" (concat "(begin (newline) (apropos \"" func "\"))\n"))
+ (unless (string= (buffer-name (current-buffer)) "*scheme*")
+ (display-buffer "*scheme*" t)))))
+
+(defun chicken-trace ()
+ (interactive)
+ (let ((func (current-word)))
+ (when func
+ (process-send-string "*scheme*" (concat "(begin (newline) (trace/untrace " func "))\n"))
+ (unless (string= (buffer-name (current-buffer)) "*scheme*")
+ (display-buffer "*scheme*" t)))))
+
+(defun scheme-grep-current-word (&optional arg)
+ (interactive "P")
+ (let ((word (or (and (not current-prefix-arg)
+ (current-word))
+ (read-from-minibuffer
+ (concat grep-command " <word> *.scm: ")))))
+ (grep (concat grep-command " \'" word "\' " "*.scm"))))
+
+(setq scheme-program-name "csi -:c")
+
+(setq chicken-keyword-list
+ '((receive 2)
+ (match 1)
+ (match-lambda 0)
+ (match-lambda* 0)
+ (match-let scheme-let-indent)
+ (match-let* 1)
+ (match-letrec 1)
+ (and-let* 1)
+ (declare 0)
+ (cond-expand 0)
+ (let-values scheme-let-indent)
+ (let*-values scheme-let-indent)
+ (letrec-values 1)
+ (parameterize scheme-let-indent)
+ (let-location 1)
+ (foreign-lambda 2)
+ (foreign-lambda* 2)
+ (foreign-safe-lambda 2)
+ (foreign-safe-lambda* 2)
+ (set! 1)
+ (let-optionals* 2)
+ (let-optionals 2)
+ (condition-case 1)
+ (fluid-let 1)
+ (and-let* 1)
+ (assume 1)
+ (cut 1)
+ (cute 1)
+ (when 1)
+ (unless 1)
+ (dotimes 1)
+ (compiler-typecase 1)
+ (ecase 1)
+ (use 0)
+ (require-extension 0)
+ (import 0)
+ (handle-exceptions 2)
+ (regex-case 1)
+ (define-inline 1)
+ (define-constant 1)
+ (define-syntax-rule 1)
+ (define-record-type 1)
+ (define-values 1)
+ (define-record 1)
+ (define-specialization 1)
+ (define-type 1)
+ (with-input-from-pipe 1)
+ (select 1)
+ (functor 3)
+ (define-interface 1)
+ (module 2) ) )
+
+(setq chicken-indent-list
+ '((printf 1)
+ (fprintf 2)
+ (sprintf 1)))
+
+;(put 'module 'scheme-indent-function 'chicken-module-indent)
+;(defun chicken-module-indent (state indent-point normal-indent) 0)
+
+(defun chicken-build-keyword-regexp (kwl)
+ (let ((str "\\<\\(module\\>"))
+ (dolist (kw kwl)
+ (put (car kw) 'scheme-indent-hook (cadr kw))
+ (setq str (concat str "\\|" (regexp-quote (symbol-name (car kw))) "\\>")))
+ (concat str "\\)")))
+
+(setq chicken-keyword-regexp
+ (chicken-build-keyword-regexp chicken-keyword-list))
+
+(dolist (e chicken-indent-list)
+ (put (car e) 'scheme-indent-hook (cadr e)))
+
+(add-hook
+ 'scheme-mode-hook
+ (lambda ()
+ (font-lock-add-keywords
+ 'scheme-mode
+ `(("\\<\\sw+\\>:" . font-lock-constant-face) ;XXX doesn't work, yet
+ ("##\\(core\\|sys\\)#\\sw+\\>" . font-lock-builtin-face)
+ (,chicken-keyword-regexp . font-lock-keyword-face)
+ )
+ 1)))
+
+(provide 'chicken)
diff --git a/scripts/chicken-flymake b/scripts/chicken-flymake
new file mode 100644
index 00000000..af8f690a
--- /dev/null
+++ b/scripts/chicken-flymake
@@ -0,0 +1,5 @@
+#!/bin/sh
+#
+# usage: chicken-flymake OPTION-OR-FILENAME ...
+
+csc -SAv "$@" || true
Trap