[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
READ-ONLY Fred windows
- To: burke@ils.nwu.edu
- Subject: READ-ONLY Fred windows
- From: cgay@phloem.uoregon.edu (Carl Gay)
- Date: Sun, 26 Jan 92 21:20:50 PST
- Cc: info-mcl@cambridge.apple.com
- In-reply-to: Robin Burke's message of 26 Jan 92 19:10:12 GMT <1992Jan26.191012.6040@ils.nwu.edu>
From: burke@ils.nwu.edu (Robin Burke)
Newsgroups: comp.lang.lisp.mcl
Date: 26 Jan 92 19:10:12 GMT
...
I need a way to make locked files READ-ONLY, so that typing
in the window has no effect or beeps. I've considered replacing
the local COMTAB, but I would have to have each key that can
cause a modification defined as "beep", and even this would fail
if the user has some crazy set of key definitions. There must be
a better way.
I hope you're planning to share your VC system when it's done!
I poked around a bit and there are some promising looking places to
start. Both buffer-delete and buffer-insert call ccl::%%buf-changed
and ccl::%%buf-read-only, so it looks like Fred might already have
some basic support for what you want to do. ccl::%%buf-read-only
seems to just call error unconditionally, but I couldn't figure out
how to set a buffer to read-only (if there is a way). Maybe someone
else who is better at deciphering assembly can figure it out.
Anyway, on the theory that Apple set things up so that any time the
buffer is modified ccl::%%buf-changed would be called, maybe it is
enough to ADVISE the callers of ccl::%%buf-changed to not do anything
if the buffer is read-only, or to warn the user that their changes
will be thrown away. Here are some of the callers, but I don't
guarantee this is a complete list:
? (get-callers 'ccl::%%buf-changed)
(BUFFER-INSERT BUFFER-DELETE
CCL::%%BUF-INSERT-IN-GAP
CCL::%BUFFER-INSERT-FILE)
? (get-callers 'ccl::%%buf-read-only)
(BUFFER-INSERT BUFFER-DELETE
BUFFER-INSERT-SUBSTRING
BUFFER-CHAR-REPLACE
CCL::ADD-BUFFER-FONT
CCL::%BUFFER-INSERT-FILE
CCL::BUFFER-CHANGE-FONT-INDEX)
Note that advising or redefining a kernel function causes MCL to die
horribly...
-Carl