From: Evan Driscoll <driscoll@cs.wisc.edu>
To: help-gnu-emacs@gnu.org
Subject: Emacs programming question
Date: Thu, 04 Oct 2012 22:19:07 -0500 [thread overview]
Message-ID: <506E51AB.6020204@cs.wisc.edu> (raw)
Hi,
I want to write an emacs mode to display a particular type of file.
However, the way I'd like to display the file isn't the literal text
contents in the file, but rather a (text) rendering of parts of the
information contained within. Unfortunately, I don't know any modes that
do something comparable; the closest ones I can think of are what you
get if you load an image. As a postscript I've included a fairly wordy
description of what I'm trying to do to set some context; It's step (2)
in that description that I foresee the most problems with.
What I want is something to the effect of opening the file normally but
then (1) saving the contents of the buffer into a lisp variable, (2)
clearing the buffer, (3) inserting into the buffer some computed
contents from step (1). (Fortunately, I can set the buffer to read-only
for my purposes and I don't have to worry about user edits to it.)
The programming reference talks about functions for visiting a file and
also inserting the contents of a file into a buffer without visiting it
(insert-file-contents), but neither of these are what I want, really.
Evan
What I want to do:
Before starting, let me say that I'm not so interested in catching lots
of edge cases; something that will work for the common case is good
enough. (In case it's not clear from the following, this is going to be
a debugging aid to help trace back incorrect output to the point in the
code that created it. And don't say that point may not be where a
write(2) call is actually finally made because of buffering, because I
know, and if that's a problem in practice I'll fix it. :-) But the emacs
part can remain unchanged.)
I have a program which will run another program under ptrace and each
time it makes a write(2) system call, will record information consisting
of (1) the size of the write, (2) the target "file" name (could be
/dev/pts/blah), (3) the offset in that file (or that it is appended if
the file is unseekable), (4) a stack trace of the program (file/line,
via debugging information). In addition, assume the actual data of the
write is available either in a separate file or in the trace file. (I'm
flexible on this point, and can pick whichever makes things easier. I
think that may mean putting the data into the trace file.) Call the
information for each write(2) call a "chunk".
I want some functions (perhaps a whole mode?) that will load a trace
file in emacs and do the following:
1. Let the user choose a file of interest, and ignore the parts of the
trace not pertaining to that file. (If it would make things simpler, I
could preprocess the trace to extract the information for each file
separately.)
2. Reconstruct the final state of that file, displaying it to the user
in the "data" buffer. If the trace file and file contents are loaded
separately this is just loading the file. If the data is in the trace
file itself, this will mean looking at the data for each chunk and
putting the data at the appropriate place in the buffer. Set that buffer
read-only.
3. Open a new buffer in another window. As the user moves the point
around that buffer, find the chunk that corresponds to the (last) time
the byte under the point was written. Grab the stack trace from that
chunk, and display it in this other buffer. (Call it the "stack trace
buffer.")
4. If the user selects a file/line in the stack trace buffer, open the
corresponding file and navigate to that line.
5. Ideally, add some styling to the data buffer to show where the chunk
boundaries are, e.g. alternate between two different faces.
next reply other threads:[~2012-10-05 3:19 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-05 3:19 Evan Driscoll [this message]
2012-10-05 9:11 ` Emacs programming question Jambunathan K
2012-10-05 9:22 ` Jambunathan K
2012-10-05 12:54 ` Doug Lewan
[not found] <mailman.10325.1349416176.855.help-gnu-emacs@gnu.org>
2012-10-05 11:57 ` Pascal J. Bourguignon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=506E51AB.6020204@cs.wisc.edu \
--to=driscoll@cs.wisc.edu \
--cc=help-gnu-emacs@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.