unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: "Stefan Monnier" <monnier+gnu.emacs.help/news/@flint.cs.yale.edu>
Subject: Re: Controling modifications and cuting invisible ?
Date: 21 May 2003 19:08:02 -0400	[thread overview]
Message-ID: <5l8ysznbjh.fsf@rum.cs.yale.edu> (raw)
In-Reply-To: 87d6icj5kk.fsf@noos.fr

> The first one is: how to control precisely how the buffer can be
> modified ? So far, the only way I found was to clear the keymap with
> make-sparse-keymap, and redefine any single key remaining that can
> change something (i.e. ^j ^d etc.). This seems pretty dumb to me. What
> would be the "stylish" way ?

How about (setq buffer-read-only t) ?
You can also unbind C-x C-q so that people can't easily change the
read-only status.  If you want to be nastier, you can also use
the `read-only' text-property.  And if you really want to get nasty, you
can add to that the keymap trick you're already using plus
`modification-hooks', `insert-in-front-hooks' and `insert-behind-hooks'
text-properties plus an overlay with the same properties.  Oh and you can
also add some `keymap' and `local-map' properties with the keymap
you've devised.  That should keep the nasty guys out ;-)

> Also, I use the invisible attribute to hide data field in each line
> (basically the filename associated to a mp3), so that I can use those
> field when I invoke mpg321, while keeping a neat display for the
> user. This works pretty well, but for a reason I do not understand,
> cut/paste operation do not preserve this attribute ... Any clue ?

How do you add the attribute ?  I'd guess you're using overlays (which are
not really associated with the text but only with the locations).
If you use text-properties and it doesn't work, then you'll need to
give us more info so we can figure out what's wrong.

> And the last one: I use an overlay to highlight the current mp3. This
> is neat, but I was not able to find how to make the overlay to cover
> the complete line (i.e. all the width, even if the line stops before),
> without creating weird effect when the user modifies the
> buffer. Basically, to make the overlay as large as the window, I used
> something like:
> 
> (move-overlay mp3play-current-overlay (point-at-bol) (1+ (point-at-eol)))

BTW (1+ (point-at-eol)) is the same as (point-at-bol 2), except when
(point-at-eol) == (point-max).

> the 1+ puting the \n in the overlay. This works as long as I do not
> move a line accross the overlay with the following code:
> 
> (transpose-regions (line-beginning-position) (1+ (line-end-position))
>                    (line-beginning-position 2) (1+ (line-end-position 2)))
> 
> Doing that make the overlay include the line I am moving ...

As mentioned, overlays are not associated with the text but only with
locations.  `transpose-regions' will remove some text from one place and
insert it at some other place, but Emacs has no idea that it's the same text
and that the overlay should be moved with it.  If you use text-properties,
it should work better (but it has other problems for this kind of use).

I suggest that you simply reset the overlay after each command.
Or better yet, just use hl-line-mode (or some other such mode, there are
plenty) which do nothing else than "mark the current line with an overlay".

> Any piece of answer for any of those question will be welcome :)

Tout le plaisir était pour moi,


        Stefan

  reply	other threads:[~2003-05-21 23:08 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-05-21 22:30 Controling modifications and cuting invisible ? François Fleuret
2003-05-21 23:08 ` Stefan Monnier [this message]
2003-05-21 23:12 ` Lute Kamstra
2003-05-22 16:33 ` Kai Großjohann
2003-05-23 11:23   ` François Fleuret
2003-05-23 11:40     ` Oliver Scholz
2003-05-23 14:58     ` Stefan Monnier
2003-05-23 12:07 ` Oliver Scholz

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

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5l8ysznbjh.fsf@rum.cs.yale.edu \
    --to=monnier+gnu.emacs.help/news/@flint.cs.yale.edu \
    /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.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).