source: project/wiki/emacs @ 31126

Last change on this file since 31126 was 31126, checked in by Mario Domenech Goulart, 7 years ago

Properly capitalize CHICKEN on the wiki directory (only first level).

I used the following shell script to change things:

while IFS= read -d $'\0' -r file ; do

sed -i 's/Chicken/CHICKEN/g' "$file"

done < <(find wiki -maxdepth 1 -type f -print0 )

Some files have been manually reverted after that, since some
substitutions don't apply:

  • friedly-chicken (repl banner)
  • survey2011 (Chicken in URI paths)
  • chickenista-guide (Chickenista)

I hope the link canonicalization thing will be on my side.

File size: 5.4 KB
Line 
1[[tags: emacs editors]]
2
3[[toc:]]
4
5== Using CHICKEN with emacs
6
7
8Various packages exist for supporting Scheme programming
9with the [[http://www.gnu.org/software/emacs/|emacs]] editor.
10
11CHICKEN's git repository contains two emacs modes that can be helpful for writing CHICKEN code: [[http://code.call-cc.org/cgi-bin/gitweb.cgi?p=chicken-core.git;a=blob_plain;f=misc/chicken.el;hb=HEAD|chicken.el]] and [[http://code.call-cc.org/cgi-bin/gitweb.cgi?p=chicken-core.git;a=blob_plain;f=misc/flymake-chicken.el;hb=HEAD|flymake-chicken.el]]
12
13=== scheme-complete
14
15Particularly recommended is [[/users/alex-shinn|Alex Shinn's]]
16{{scheme-complete}}, which provides intelligent autocompletion:
17
18[[http://synthcode.com/emacs/scheme-complete-0.8.7.el.gz]]
19[[http://synthcode.com/wiki/scheme-complete]]
20
21=== Dan's Emacs Extensions
22
23[[dans-custom-emacs]] provides a set of extensions that enable full offline auto-complete w/ chicken-doc integration, complete font-lock support including prefixed modules, and support for all presently installed chicken modules.
24
25Recommended for those who find themselves coding without a reliable REPL.
26
27=== hen.el
28
29{{hen.el}} is an emacs mode specifically for CHICKEN, but is
30currently unmaintained:
31
32http://www.call-with-current-continuation.org/hen.el
33
34To use it, copy it somewhere into a location you normally use for
35emacs extensions and add this to your emacs initialization file:
36
37  (require 'hen)
38
39To enable it, do an {{M-x hen-mode}} or add the following to 
40your emacs initialization file to use Hen for all CHICKEN files:
41
42  (setq auto-mode-alist (append 
43                       '(("\\.scm$" . hen-mode)
44                         ("\\.meta$" . hen-mode)
45                         ("\\.setup$" . hen-mode)) auto-mode-alist))
46=== paredit
47
48{{paredit}} provides structural editing for Scheme and Lisp code:
49
50http://mumble.net/~campbell/emacs/paredit.el
51
52=== Quack
53
54Neil van Dyke's Quack enhances Emacs support for Scheme and can be used for editing CHICKEN code.
55
56[[image:http://parenteses.org/mario/misc/chicken-repl+emacs.png|quack]]
57
58The screenshot above shows [[http://www.gnu.org/software/emacs|GNU Emacs]] using Quack to edit a "hello world" program and the CHICKEN REPL being executed from within Emacs.
59
60=== Cluck
61
62[[cluck]] is a clone of Quack but specialized for CHICKEN scheming.
63
64=== Builtin Scheme support
65
66Emacs has builtin support for syntax-highlighting of Scheme code
67and running a Scheme interpreter in an interactive buffer.
68To use it with CHICKEN, add this to your {{~/.emacs}} file:
69
70  (setq scheme-program-name "csi -:c")
71
72The {{-:c}} is to force interactive mode, which is required on some platforms (most
73notably Windows).
74
75This variable is customizable, which is the preferred way in GNU Emacs
76and XEmacs to set user preferences: menu Options -> Customize Emacs ->
77Specific Option, type in {{scheme-program-name}}. Emacs displays a form;
78fill in {{csi -:c}} for the program name, click "Set for Current Session",
79and then "Save for Future Sessions". This will update (or create if it
80does not already exist) the {{custom-set-variables}} section in your {{~/.emacs}}
81file.
82=== Useful elisp snippets
83
84I have these definitions in my {{~/.emacs}} file, which allow loading 
85the current buffer, optionally by compiling it first to native code:
86
87<enscript highlight=elisp>
88(define-key scheme-mode-map "\C-c\C-l" 'scheme-load-current-file)
89(define-key scheme-mode-map "\C-c\C-k" 'scheme-compile-current-file)
90
91(require 'cmuscheme)
92
93(define-key scheme-mode-map "\C-c\C-l" 'scheme-load-current-file)
94(define-key scheme-mode-map "\C-c\C-k" 'scheme-compile-current-file)
95
96(defun scheme-load-current-file (&optional switch)
97  (interactive "P")
98  (let ((file-name (buffer-file-name)))
99    (comint-check-source file-name)
100    (setq scheme-prev-l/c-dir/file (cons (file-name-directory    file-name)
101                                         (file-name-nondirectory file-name)))
102    (comint-send-string (scheme-proc) (concat "(load \""
103                                              file-name
104                                              "\"\)\n"))
105    (if switch
106      (switch-to-scheme t)
107      (message "\"%s\" loaded." file-name) ) ) )
108
109(defun scheme-compile-current-file (&optional switch)
110  (interactive "P")
111  (let ((file-name (buffer-file-name)))
112    (comint-check-source file-name)
113    (setq scheme-prev-l/c-dir/file (cons (file-name-directory    file-name)
114                                         (file-name-nondirectory file-name)))
115    (message "compiling \"%s\" ..." file-name)
116    (comint-send-string (scheme-proc) (concat "(compile-file \""
117                                              file-name
118                                              "\"\)\n"))
119    (if switch
120      (switch-to-scheme t)
121      (message "\"%s\" compiled and loaded." file-name) ) ) )
122</enscript>
123
124
125==== Tweaking stock scheme-mode indentation
126
127<enscript higlight=elisp>
128;; Indenting module body code at column 0
129(defun scheme-module-indent (state indent-point normal-indent) 0)
130(put 'module 'scheme-indent-function 'scheme-module-indent)
131
132(put 'and-let* 'scheme-indent-function 1)
133(put 'parameterize 'scheme-indent-function 1)
134(put 'handle-exceptions 'scheme-indent-function 1)
135(put 'when 'scheme-indent-function 1)
136(put 'unless 'scheme-indent-function 1)
137(put 'match 'scheme-indent-function 1)
138</enscript>
139
140
141==== Auto-inserting portable shebang boilerplate on creating a scheme file
142
143See also the [[/writing portable scripts|writing portable scripts]] page.
144
145<enscript higlight=elisp>
146(require 'autoinsert)
147(add-hook 'find-file-hooks 'auto-insert)
148
149(setq auto-insert-alist 
150      '(("\\.scm" . 
151         (insert "#!/bin/sh\n#| -*- scheme -*-\nexec csi -s $0 \"$@\"\n|#\n"))))
152</enscript>
Note: See TracBrowser for help on using the repository browser.