Richard Stallman writes: [...] > Instead the user says: "This piece of text is a paragraph, because > I hit RET when I finished writing it. I want it to be a paragraph > of the type "Standard Text". I want "Standard Text" paragraphs to > be indented on the left by 1 cm and to have a font size of 10 pt. > Exept here, I want this paragraph to have an indentation of 2 cm." > > Now you're talking about the user interface concepts. That too is > distinct from the question of representing text inside Emacs. The > Emacs text representation needs to include a representation of the > specification of a type of paragraph, in order to implement this user > interface. Exactly! However, it is important to discuss implementation issues together with the user interface concepts in order to account for the semantics of the representation. > But it also needs to have spaces in the buffer where there is > indentation, so as to be compatible with how the whole Emacs Lisp > world understands indentation. This is where I disagree. The box model I was talking about is an abstact model, it can be implemented by different means. For instance, its left margin can indeed be implemented by spaces. I have been working with nothing but that so far. So, to a certain extent, I agree with you here. But a few notes: - The semantics of space characters used to implement a box model and space chars used for indentation in a non-WP Emacs buffer (like in this message buffer in this paragraph) are different. The former don't belong to the abstract document, they are only a means of rendering it visually. The latter are both part of the abstract document (the text/plain e-mail) and of its visual representation, because for text/plain there is no meaningful difference between both. Because of this semantic difference, existing Emacs Lisp functions would not do the right thing when working on them. I wouldn't expect them either to do the right thing. `fill-paragraph' does not work well in a dired buffer. `query-replace' does not work in a Gnus *group* buffer. - Even when working with space characters for indentation, it would probably not be as you seem to expect. When working on a graphical user interface, we would have to deal with proportional fonts of varying sizes. This is what people expect from a word processor. For this reason, all implementation techniques I have examined so far work by putting a single space character with a display property specifying the indentation column in canonical character units. Like this: (progn (switch-to-buffer (generate-new-buffer "*tmp*")) (insert (propertize " " 'display '(space :align-to 20))) (insert (propertize "lirum larum" 'face '(face :height 140 :inherit variable-pitch)))) Lisp functions, not intentionally written to deal with paragraphs in a WP buffer, would not expect this. The reason being that proportional fonts are up to today are hardly used in Emacs. (I might add, that it is also rather a bit tedious to use them without a box model supported by the display engine ...) - Implementing a box model by means of space and newline characters works for some common cases, but it doesn't scale well to the full capabilities of all abstract documents that can be expressed by various formats. I already mentioned tables as a point where it does not scale at all. But if we want to implement XML/HTML + CSS (and I definitely want), then some nested boxes with borders and background colours are not possible to display, but it would be an understatement that implementing a way to let the user interact with them (for example by typing text) would be "difficult". It is not that I have not tried ... I don't worry about that much yet! I am content with implementing a box model by means of space and newline characters for now. The Emacs word processor can do useful work without it. If I am not able to hack the display engine, then that's life. The Emacs word processor can do useful work without it. That's why I talked about "in the long run", meaning: years. But it won't be complete! I am not religious about the particular implementation of a box model! All I do care about are the design principles of WP functionality. I must say that I have felt very frustrated in the last days, because it seemed to me that we have a fundamental disagreement about concepts and design principles. Right now I am not sure. Maybe what you called a "hybrid solution" would be perfectly in order, depending on the specific features that you have in mind. Maybe we should discuss this on a concrete implementation. I have assembled a quick example from (now abandoned) code that I have written almost a year ago: