Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/guicho271828/file-local-variable
File-local variable independent from ASDF
https://github.com/guicho271828/file-local-variable
Last synced: 29 days ago
JSON representation
File-local variable independent from ASDF
- Host: GitHub
- URL: https://github.com/guicho271828/file-local-variable
- Owner: guicho271828
- Created: 2016-02-06T03:58:40.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2016-02-07T01:13:13.000Z (almost 9 years ago)
- Last Synced: 2024-10-15T14:11:00.536Z (3 months ago)
- Language: Common Lisp
- Size: 27.3 KB
- Stars: 4
- Watchers: 4
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.org
Awesome Lists containing this project
README
* File-Local-Variable - File-local variable independent from ASDF
[[https://circleci.com/gh/guicho271828/file-local-variable][https://circleci.com/gh/guicho271828/file-local-variable.svg?style=svg]]
Implements a file-local variable using a carefully designed file-reloading scheme.
#+BEGIN_SRC lisp
(defpackage file-local-variable.example
(:use :cl))(in-package :file-local-variable.example)
(defun myhook (macrofn form env)
(print form)
(funcall macrofn form env))(flv:file-local-bind *macroexpand-hook* 'myhook
*read-default-float-format* 'double-float)(eval-when (:compile-toplevel) (print :compile-toplevel))
(eval-when (:load-toplevel) (print :load-toplevel))
(eval-when (:execute) (print :execute))(eval-when (:compile-toplevel :load-toplevel :execute)
(print '#.*macroexpand-hook*) ; 'myhook
(print (type-of 3.0))) ; 'double-float#+END_SRC
** syntax
The syntax is the same as =setf=.
: (file-local-bind var val &rest more)
** Related work
ASDF-FLV, but it depends on ASDF. by Didier Verna.
http://www.cliki.net/asdf-flv
CDR 9 proposal (File-local variables) by Didier Verna.
https://common-lisp.net/project/cdr/document/9/verna.11.cdr2.pdf
** How It Works
1. =flv:file-local-bind= dynamically binds the variable using =progv=, and
opens the current =*compile-pathanme*=. Within the dynamic environment
of =progv=, reread the file as follows:
1. Skip the forms until the first appearance of =flv:file-local-bind=.
2. Skip the =flv:file-local-bind= form.
3. Read, then macroexpands the rest of the forms. Currently it depends
on the implementation-specific =macroexpand-all=.
4. =flv:file-local-bind= expands into a =progn= containing their
expansion results.
2. Skips the rest of the forms by assigning =*dumb-readtable*= to
=*readtable*= , i.e., a readtable which treats all characters
as [[http://www.lispworks.com/documentation/HyperSpec/Body/02_ad.htm][whitespace characters]].
3. Since =*readtable*= is file-local as specified by ANSI, it is unbound when the file
compilation finishes.** Dependencies
This library is at least tested on implementation listed below:
+ SBCL 1.3.2 on X86-64 Linux 3.19.0-49-generic (author's environment)
Also, it depends on the following libraries:
+ iterate by ::
Jonathan Amsterdam's iterator/gatherer/accumulator facility+ alexandria by ::
Alexandria is a collection of portable public domain utilities.+ trivia ::
** Installation
** Author
+ Masataro Asai ([email protected])
* Copyright
Copyright (c) 2016 Masataro Asai ([email protected])
* License
Licensed under the LLGPL License.