From mboxrd@z Thu Jan 1 00:00:00 1970 Path: main.gmane.org!not-for-mail From: "Stefan Monnier" Newsgroups: gmane.emacs.help Subject: Re: Controling modifications and cuting invisible ? Date: 21 May 2003 19:08:02 -0400 Organization: Yale University Sender: help-gnu-emacs-bounces+gnu-help-gnu-emacs=m.gmane.org@gnu.org Message-ID: <5l8ysznbjh.fsf@rum.cs.yale.edu> References: <87d6icj5kk.fsf@noos.fr> NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: main.gmane.org 1053565139 13947 80.91.224.249 (22 May 2003 00:58:59 GMT) X-Complaints-To: usenet@main.gmane.org NNTP-Posting-Date: Thu, 22 May 2003 00:58:59 +0000 (UTC) Original-X-From: help-gnu-emacs-bounces+gnu-help-gnu-emacs=m.gmane.org@gnu.org Thu May 22 02:58:57 2003 Return-path: Original-Received: from monty-python.gnu.org ([199.232.76.173]) by main.gmane.org with esmtp (Exim 3.35 #1 (Debian)) id 19IeQ4-0003cc-00 for ; Thu, 22 May 2003 02:58:56 +0200 Original-Received: from localhost ([127.0.0.1] helo=monty-python.gnu.org) by monty-python.gnu.org with esmtp (Exim 4.20) id 19IdaB-00034E-1o for gnu-help-gnu-emacs@m.gmane.org; Wed, 21 May 2003 20:05:19 -0400 Original-Path: shelby.stanford.edu!newsfeed.stanford.edu!logbridge.uoregon.edu!canoe.uoregon.edu!news.wss.yale.edu!rum.cs.yale.edu!rum.cs.yale.edu Original-Newsgroups: gnu.emacs.help Original-Lines: 63 Original-NNTP-Posting-Host: rum.cs.yale.edu Original-X-Trace: news.wss.yale.edu 1053558486 27462 128.36.229.169 (21 May 2003 23:08:06 GMT) Original-X-Complaints-To: news@news.wss.yale.edu Original-NNTP-Posting-Date: Wed, 21 May 2003 23:08:06 +0000 (UTC) User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50 X-Original-NNTP-Posting-Host: rum.cs.yale.edu X-Original-Trace: 21 May 2003 19:08:02 -0400, rum.cs.yale.edu Original-Xref: shelby.stanford.edu gnu.emacs.help:113496 Original-To: help-gnu-emacs@gnu.org X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1b5 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Help: List-Post: List-Subscribe: , List-Archive: List-Unsubscribe: , Errors-To: help-gnu-emacs-bounces+gnu-help-gnu-emacs=m.gmane.org@gnu.org Xref: main.gmane.org gmane.emacs.help:9990 X-Report-Spam: http://spam.gmane.org/gmane.emacs.help:9990 > 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