Path: sparky!uunet!stanford.edu!agate!spool.mu.edu!uwm.edu!linac! pacific.mps.ohio-state.edu!cis.ohio-state.edu!lucid.com!rpg From: r...@lucid.com (Richard P. Gabriel) Newsgroups: gnu.emacs.help Subject: Emacs 19 Date: 24 Feb 1993 17:29:09 -0500 Organization: Gatewayed from the GNU Project mailing list help-gnu-em...@prep.ai.mit.edu Lines: 55 Sender: dae...@cis.ohio-state.edu Distribution: world Message-ID: <9302242219.AA14714@inferno.lucid.com> People should keep in mind that the successor of Emacs 18 does not come from Lucid. Its is GNU Emacs 19. I still can't say exactly when public release is going to be, but we are about to start testing at a number of sites. Free software is a great thing - freedom of distribution and use, and freedom from price. It's such a great thing that some companies recognize the value of giving things away, as a mechanism of goodwill, of ``paying back'' the community it serves, and as a mechanism to show potential customers the quality and style of software you can expect from those companies. Four years ago we embarked on a development project one of whose central portions would be Emacs, but an Emacs with enhanced capabilities - active regions, properties of text, fonts, color, menubars, pop-up menus, and true X integration. Free Software Foundation at the time was beginning to work on Emacs 19. Lucid paid the author of the then-current Emacs 19 prototype to help us get it ready. Well, $50,000 poorer and 18 months older, we were no closer to our goal than when we started. So, I assigned 5 of our best developers to work on Emacs 19, and last summer we released it to the world. It runs on a bunch of platforms, it is actively maintained (it is the centerpiece of our user interface for our commercial product), thousands of people use it, we are working with volunteers around the world, and - the best part - we operate just like FSF on it: it's free, source code and all, there's an updated manual for it, and we incorporate all reasonable changes just the way FSF does. The difference is, we have Emacs 19, it is well-tested, and its users love it. Another difference is, we have 35 developers and we don't need handouts to keep maintaining Emacs - it's just good business. The concept of free software doesn't belong to anyone. The dream of those who value free software is that the idea will be so compelling that others will pick up the standard and improve it, that others will take more time, do more things, champion the cause so that the community get more because fresh blood is applied to it. We waited for years and years for Emacs 19. The idea of free software is a good one, and if you cannot live up to its needs, you should let go. Free software is an idea so good that you shouldn't smother it by claiming you own it. Free Software Foundation doesn't own the concept of free software, and it doesn't own the exclusive rights to work on Emacs. Wait for the private tests, wait for the beta tests, wait for general release, wait, wait, wait. Or, FTP it from /pub/gnu/lucid on labrea.stanford.edu today and use it this afternoon. Help us move on from Emacs 19 to Emacs 20. -rpg-
Path: sparky!uunet!UB.com!pacbell.com!sgiblab!swrinde!gatech! howland.reston.ans.net!usenet.ins.cwru.edu!magnus.acs.ohio-state.edu! cis.ohio-state.edu!gnu.ai.mit.edu!rms From: r...@gnu.ai.mit.edu (Richard Stallman) Newsgroups: gnu.emacs.help Subject: Emacs 19 Date: 25 Feb 1993 00:57:45 -0500 Organization: Gatewayed from the GNU Project mailing list help-gnu-em...@prep.ai.mit.edu Lines: 36 Sender: dae...@cis.ohio-state.edu Distribution: world Message-ID: <9302250555.AA04732@mole.gnu.ai.mit.edu> References: <9302242219.AA14714@inferno.lucid.com> Over two years ago, you hired the FSF staff person who I had charged with getting Emacs 19 out the door soon with the features it had then. I got about two weeks notice that he was leaving. While you set him to work implementing new features that I had planned for Emacs 20, I had to try to get Emacs 19 back on track. It took a while for the new maintainer to come up to speed. The result: a long delay. Emacs 19 would have come out two years ago if not for this. Later you assigned programmers to work on another version of Emacs without telling me about it. I found out months later by luck. Why didn't you tell me? Why didn't you ask them to discuss the design with me before they implemented it? Whatever the reason, you didn't, which was not a very cooperative way of working. Well, we have finally dealt with the problem caused two years ago, and what happens? Now you are asking people to make up their minds that GNU Emacs 19 is dead, quickly, before it has a chance to crack the shell. Overall your conduct leaves something to be desired. I would be happy to see someone capable take over the work on Emacs from the FSF. I might have been happy to see Lucid do so, if you had approached it openly and with a good spirit. Lucid can implement things. And some of them are good features. But some of them are clunky. If you had asked the programmers to work with me, I think it would be better. (People will soon be able to compare the design of analogous features and form their own opinions.) Above all, you've shown a bad spirit. I want Emacs to be in more worthy hands than that. I think there are possibilities. I have just about finished updating the Emacs Lisp manual. In the next three weeks I'll update the user's manual.
Path: sparky!uunet!stanford.edu!agate!howland.reston.ans.net!usc! cs.utexas.edu!uwm.edu!linac!pacific.mps.ohio-state.edu!cis.ohio-state.edu! lucid.com!rpg From: r...@lucid.com (Richard P. Gabriel) Newsgroups: gnu.emacs.help Subject: Emacs 19 Date: 25 Feb 1993 16:30:20 -0500 Organization: Gatewayed from the GNU Project mailing list help-gnu-em...@prep.ai.mit.edu Lines: 256 Sender: dae...@cis.ohio-state.edu Distribution: world Message-ID: <9302252123.AA00348@inferno.lucid.com> References: <9302250555.AA04732@mole.gnu.ai.mit.edu> I went back and found the mail exchange that you and I had about Lucid's involement with Emacs 19 and FSF. I still think we tried as hard as any reasonable organization can to work with you and FSF. I am still saddened and puzzled by your peculiar memory of it. I reproduced the exchange below so people can see it (again) and judge for themselves our relative behavior. Our Emacs is used widely and I have yet to hear anything but embarassingly high praise for it. We only want to help the community, but I think you just couldn't let go enough to allow us to help. There are things that I think need to be done to it to make it better, but unfortunately you and I continue to duplicate effort. Everyone loves a race, I suppose. -rpg- Date: Sat, 20 Jun 92 12:38:59 +0100 From: rms%lelu.hut...@lucid.com To: dansm...@autodesk.com Cc: ebu...@ebu.ericsson.se, ep...@cs.uiuc.edu, help-lucid-em...@lucid.com Subject: Epoch and EMACS merger In-Reply-To: Daniel Smith's message of Fri, 19 Jun 1992 12:50:15 PDT <9206191950.AA05392@bermuda.YP.acad> Reply-To: r...@gnu.ai.mit.edu The long delay in releasing Emacs 19 is the FSF's fault. (In some sense, therefore, mine.) While it's regrettable that there are multiple versions, I can't blame people for filling the gap that the FSF left. One of the goals of the copyleft is to allow people to do this--so that one central maintainer's lapse does not hold back the rest of the community. However, the people who wrote the Lucid version didn't try to to make the changes usable for us. They charged ahead without discussing the design with me or with the main Emacs maintainer. They reimplemented things we had already done. I asked them to do some work making parts usable for us, but they said no. The result is that not much of the code in Lucid's version will ever appear in the FSF's version. Some of the features are worth having, but need to be reimplemented. If you'd like this to happen sooner, one way is to volunteer to do some of the work. Emacs 19 already has most of the features of Epoch. ------------------------------ Date: Mon, 22 Jun 92 21:37:51 PDT From: rpg%infe...@lucid.com (Richard P. Gabriel) To: help-lucid-em...@lucid.com, ep...@cs.uiuc.edu Cc: r...@gnu.ai.mit.edu, dansm...@autodesk.com, ebu...@ebu.ericsson.se Subject: Epoch and EMACS merger I read RMS's message with sadness. Over the past two years I have tried very hard to figure out a way to work with FSF on Emacs, and for a lot of that time I thought we were working together, but apparently I failed. For those of you who wish to read about that effort, you can read the postscript to this note, which outlines Lucid's involvement - a sort-of history of the events. We still want to work with FSF and have our contributions become part of FSF Emacs, and we are eager to hear suggestions on how to proceed. -rpg- P.S. RMS's letter paints an unflattering and unfair picture of Lucid's involvement with Emacs, and in particular on the motives and efforts of our hackers. The Free Software Foundation is a remarkable organization - for many years I have supported it personally (and still do), and my company supports it, its goals, and its products. This support is in terms of time, effort, and dollars. RMS says: However, the people who wrote the Lucid version didn't try to to make the changes usable for us. They charged ahead without discussing the design with me or with the main Emacs maintainer. They reimplemented things we had already done. I asked them to do some work making parts usable for us, but they said no. This is not how we at Lucid remember events, although it may be a difference without a distinction. I'll recount the events as I recall them and let the reader supply the characterization. Lucid set a course 4 years ago to develop a C/C++ programming environment, using Emacs as a key component. We needed a small number of specific things: * it had to run under X using multiple windows * it had to support multiple fonts (at least a little) * it had to support embedded glyphs (icons) * it had to support attaching active regions to contiguous blocks of characters (to support a hypertext-like facility) * it had to support menubars * it had to support readonly regions of text My goals with respect to FSF were these: * do anything (including paying money) to get our changes into the official FSF sources * not sacrifice quality or the schedule (which was lengthy, and therefore apparently safe) For the first two years we prototyped the functionality we needed in an X-widget-based text editor and in Epoch. By the Summer of 1990, Emacs 19 appeared to be right around the corner, so we entered discussions with the person at FSF whom we were led to believe was the official Emacs 19 coder - Joe Arceneaux. It appeared that our goals and FSF's were in line, and so he proposed that we pay him a consulting fee to speed up Emacs 19 development plus get our changes in. We agreed, wrote a contract, and volunteered manpower to help. The contract period started October 1990, was to last approximately 9 months. We were to pay him approximately $50k. He was paid on milestones, on which he appeared to deliver. In addition, we provided him office space and his own Sparcstation at Lucid. (At the conclusion of this period, it appeared that Joe Arceneaux was no longer the official Emacs 19 coder.) In the Spring of 1991 it became apparent that the effort was going badly - Emacs 19 as a text editor was slow, and full of bugs. The only people at Lucid who dared use it were Arceneaux and myself. Moreover, Emacs 19 performed hideously in the new areas outlined above. Its behavior was especially bad with respect to active regions -- even worse than our seat-of-the-pants prototype in Epoch. Nevertheless, we persevered: We re-arranged our Emacs team and priorities to work more closely with Arceneaux, and we were confident the arrangement could work. To be safe, I put 4 of our best hackers on it with Arceneaux. By Summer of last year we became aware that RMS had hired/appointed Jim Blandy as the official Emacs 19 person. At that time, one of our hackers went out to Cambridge to talk RMS about how to proceed, and it appeared we reached a reasonable working arrangement. But, as time went on we determined that the FSF code for Emacs 19 was too unwieldy, bug-ridden, and convoluted to work with, so we started rewriting parts of it. In addition to not listening to any design ideas we had, RMS's policy was to require us to provide source diffs and to explain every changed line. Because our efforts towards release were mounting, and we were re-writing massive amounts of the system, source diffs didn't make sense, but RMS and Blandy were unwilling or unable to work at a higher level. I traveled to Cambridge to work things out, and my team had numerous phone conversations with RMS. One area that was completely rewritten was the implementation of active regions. Various attempts were made to discuss the design with RMS, including a 2 hour telephone conversation from one of my hackers, but he was completely unwilling to consider another point of view. At first, he apparently didn't understand the differences between attaching active regions to text and attaching fonts to text, and when he finally did, he was so wedded to his design for putting fonts in the text that he wanted us to implement BOTH his design for fonts and ours for other active region support. Our hacker wanted RMS to cooperate to the extent that we would first implement our version to support all of these features, and see how well it worked, but he wouldn't even agree to that. It is worth noting that with the original FSF version, in spite of some rather elaborate tree-balancing code and other hackery for precomputing display characteristics, Emacs redisplay spent more than 40% of its time in the active regions code. In our much simpler version it spends significantly less than 1% of the redisplay time in the corresponding code, even for buffers with a few thousand active regions. (This isn't to say that the original design couldn't be made to work, but several man-months of effort had gone into their original version, and it took less than 2 man-months to implement and debug the code that we shipped with our version. Finally, our version is approximately 1/2 the number of lines of the original, it is more general, and it uses less memory.) Early last Fall, after spending approximately $70k on Arceneaux, we let his contract expire, but we did put a leased 38.4 kb digital line and an X terminal in Arceneaux's apartment in San Francisco (35 miles away from Lucid), so he could continue to work on Emacs 19 for FSF with Lucid support. When we learned last Summer that FSF had established an Emacs steering committee, and no one from my organization was put on that, or even informed of its existence, we came to the conclusion that the FSF had no interest in working with us, and we stopped trying. The punch line of RMS' statement is true -- we wouldn't do things they way he wanted. But we didn't ``charge ahead'' without talking to FSF. While we did reimplement some things that they had already done, the things we reimplemented were completely broken. It's true that in the end our work has been unusable by the FSF, but that seems to us to have more to do with their willingness to use it than with anything else. RMS concludes: The result is that not much of the code in Lucid's version will ever appear in the FSF's version. Some of the features are worth having, but need to be reimplemented. If you'd like this to happen sooner, one way is to volunteer to do some of the work. I have trouble imagining how anyone could have worked with with them on this. We may have failed in this attempt, but we have a history of trying, and we have succeeded in other areas. In addition to working on Emacs, and contributing to Cygnus initial implementations of some new features for gdb, such as a malloc that supports multiple heaps, code to save the internal gdb ``symbol table'' state for a given executable file, and a various C++ debugging features, (as well as paying $100K to have these features officially incorporated into gdb), during the past year we dedicated approximately 1 person-year, spread over 3 people, to producing a new Emacs manual. In addition we have spent a lot of time trying to figure out how to work amicably with FSF. We have also supported FSF and RMS by selecting several FSF components for our product, an endorsement of their quality and usefulness. Since 1987 Lucid has regularly contributed code (and occasionally money) to FSF. Lucid paid over $200k to support FSF products over the last 2 years. We contributed over 8 hacker-years to improve FSF products. I personally am a member of LPF (not related to FSF, but related to RMS). I travel about debating various people in RMS's name, and I have actively supported RMS in various private ways. I couldn't figure out how to work with FSF and RMS even though I had years to do it, hundreds of thousands of dollars to spend, and 8 man-years to volunteer. What would you have done differently? We offer a free Emacs 19 to anyone who wants it, under exactly the same conditions as the FSF, providing commercial support to our paying customers (all improvements arising out of this support become part of the free version as well, of course), as well as answering questions and incorporating changes received from users on the net, and we will continue to develop it. We will rewrite the redisplay code, and we will very probably do work to internationalize Emacs. We also are using scarce documentation resources on the Emacs manual (copyright still held jointly with RMS). However, unlike the FSF, we will also listen to ideas from other people. For one thing, if someone implements an improved version of a feature, we aren't arrogant or inflexible enough to refuse to consider using it. The hackers that worked on our version are concerned about doing a good job for the sake of Emacs, not just for the sake of our company or their egos. By this time I've ceased expecting that we will work closely with FSF on Emacs, but we would still like to do so. As far as we can tell, the reason that FSF won't use any of our work is that they aren't interested in working *with* us (rather they want us to work *for* them, doing precisely what they tell us to do the way they say to do it, and on their own schedule). Perhaps they assume that our designs and implementations are substandard, but as far as I know they have never really looked at what we have done. ------------------------------
Path: sparky!uunet!stanford.edu!hubcap!emory!swrinde!cs.utexas.edu! usc!hela.iti.org!cs.widener.edu!umn.edu!paperboy.micro.umn.edu! magnus.acs.ohio-state.edu!cis.ohio-state.edu!gnu.ai.mit.edu!rms From: r...@gnu.ai.mit.edu (Richard Stallman) Newsgroups: gnu.emacs.help Subject: Emacs 19 Date: 25 Feb 1993 16:35:23 -0500 Organization: Gatewayed from the GNU Project mailing list help-gnu-em...@prep.ai.mit.edu Lines: 8 Sender: dae...@cis.ohio-state.edu Distribution: world Message-ID: <9302252132.AA06626@mole.gnu.ai.mit.edu> References: <9302252123.AA00348@inferno.lucid.com> Earlier I did not mention in public how you contributed to the delay in Emacs 19, because I was being polite. (Yes, I really do that sometimes.) I took the blame on myself for the sake of amity. But now that you are using our mailing lists to actively urge people not to work with us, I have the feeling that it is too late to seek amity. What you tell the public does not match what you actually do.
Path: sparky!uunet!stanford.edu!hubcap!emory!europa.eng.gtefsd.com! gatech!swrinde!elroy.jpl.nasa.gov!sdd.hp.com!usc!hela.iti.org! cs.widener.edu!dsinc!ub!csn!magnus.acs.ohio-state.edu!cis.ohio-state.edu! gnu.ai.mit.edu!rms From: r...@gnu.ai.mit.edu (Richard Stallman) Newsgroups: gnu.emacs.help Subject: Emacs 19 Message-ID: <9302252230.AA06763@mole.gnu.ai.mit.edu> Date: 25 Feb 93 22:40:51 GMT References: <9302252123.AA00348@inferno.lucid.com> Sender: dae...@cis.ohio-state.edu Organization: Gatewayed from the GNU Project mailing list help-gnu-em...@prep.ai.mit.edu Lines: 40 but I think you just couldn't let go enough to allow us to help. This is a handy cheap shot. It is always easy to make this accusation, and no one can ever disprove it. But I can point out that (1) I gave the work on Emacs to other people within the FSF, (2) I've given maintenance on other programs I wrote to people outside the FSF, and (3) I'm raising funds now to give away the maintenance of GCC to someone outside the FSF. (4) I politely kept quiet last year about your role in the Emacs 19 delay, even when you were criticising me publicly, in the hope of achieving cooperation with you. I wouldn't have done these things if I were the sort of person whose ego would never let go of a project. I hope I will find someone suitable to hand over Emacs maintenance to. Someone competent, cooperative and upright. I don't think I've found someone yet. You would be capable enough if you were sometimes willing to listen. But at every step of the way you have given cooperation only lip service. It takes special gall to present my earlier politeness as indication I am "misremembering" what happened. I believe in cooperating with people who approach me trying to cooperate. At one point I hoped you were that person. But at this point, your actions say no. To the users: I'm not going to ask you to stop cooperating with Lucid. Since Lucid Emacs is free software, it is not wrong for you to cooperate with them about it. But I do appeal to you of GNU Emacs to continue working with the FSF on GNU Emacs, and not to listen when Lucid asks you to stop.
Path: sparky!uunet!stanford.edu!hubcap!emory!europa.eng.gtefsd.com! gatech!swrinde!elroy.jpl.nasa.gov!sdd.hp.com!usc!hela.iti.org! cs.widener.edu!dsinc!ub!csn!magnus.acs.ohio-state.edu!cis.ohio-state.edu! lucid.com!rpg From: r...@lucid.com (Richard P. Gabriel) Newsgroups: gnu.emacs.help Subject: Emacs 19 Message-ID: <9302252247.AA00889@inferno.lucid.com> Date: 25 Feb 93 22:51:39 GMT References: <9302252230.AA06763@mole.gnu.ai.mit.edu> Sender: dae...@cis.ohio-state.edu Organization: Gatewayed from the GNU Project mailing list help-gnu-em...@prep.ai.mit.edu Lines: 10 It's always fun talking with you, Richard. Listening is a skill many of us could stand to learn. I'll try to learn it if that's what you think my problem is. Shall we try an experiment? I am ready and more than eager to try to make this work one more time - I've got over a million $ into Emacs already. Shall we cc our conversations on the design of our cooperative efforts to this list? Tell me and JWZ what it takes to start over. -rpg-
Path: sparky!uunet!UB.com!pacbell.com!sgiblab!sdd.hp.com!cs.utexas.edu! swrinde!gatech!ukma!cs.widener.edu!umn.edu!paperboy.micro.umn.edu! magnus.acs.ohio-state.edu!cis.ohio-state.edu!gnu.ai.mit.edu!rms From: r...@gnu.ai.mit.edu (Richard Stallman) Newsgroups: gnu.emacs.help Subject: Emacs 19 Date: 25 Feb 1993 18:29:48 -0500 Organization: Gatewayed from the GNU Project mailing list help-gnu-em...@prep.ai.mit.edu Lines: 48 Sender: dae...@cis.ohio-state.edu Distribution: world Message-ID: <9302252322.AA06994@mole.gnu.ai.mit.edu> References: <9302252247.AA00889@inferno.lucid.com> Shall we try an experiment? I am ready and more than eager to try to make this work one more time - I've got over a million $ into Emacs already. My understanding is that it is technically very hard to merge the two versions now. Lucid Emacs is set up to use and require an X toolkit; our version does not use one. I think it is too expensive to require a toolkit. Especially since we have already got most of the features we want, without a toolkit. In principle, I like the idea of supporting both modes of operation--with toolkit and without. But the programmers at Lucid told me last summer that using a toolkit required far-reaching changes in many parts of Emacs, including making C-g fail to interrupt a running program (something I worked hard a couple of years ago to make work right). So it sounds impractical to support both modes--at least, unless something is done to change the requirements of the toolkit. I don't blame Lucid for this. If anyone made a mistake, it was those who designed the X toolkits. But here is an idea. You mainly support Suns. They have threads. More and more other systems have threads. Would it be possible to use a separate thread to do the synchronous interaction with the toolkit, and make it mimic the usual kind of asynchronous input interface Emacs expects? And hide that within a toolkit interface file that fits into GNU Emacs 19 in a modular way? This might also make C-g work right in the toolkit case. Perhaps this will make it possible after all to support both toolkit and non-toolkit modes of operation. Perhaps then our versions could be merged. Two other areas of difference are in the design of menus and of events. Lucid Emacs has separate opaque data types for these. GNU Emacs uses pre-existing Lisp objects for the same job: keymaps serve as menus, and ordinary numbers, symbols and lists serve as input events. It should not be very hard to write Lisp functions to imitate the Lucid functions, using these data structures, and then support both interfaces. A final area of difference is in intervals. But if that is the only discrepancy, I'm sure it won't be hard to deal with.
Path: sparky!uunet!stanford.edu!hubcap!gatech!howland.reston.ans.net! usc!hela.iti.org!cs.widener.edu!dsinc!ub!csn!magnus.acs.ohio-state.edu! cis.ohio-state.edu!lucid.com!jwz From: j...@lucid.com (Jamie Zawinski) Newsgroups: gnu.emacs.help Subject: Re: Emacs 19 Message-ID: <9302260127.AA03158@thalidomide.lucid.com> Date: 26 Feb 93 01:30:16 GMT References: jwz@lucid.com (Jamie Zawinski) Sender: dae...@cis.ohio-state.edu Organization: Gatewayed from the GNU Project mailing list help-gnu-em...@prep.ai.mit.edu Lines: 52 Richard Stallman wrote: > > Lucid Emacs is set up to use and require an X toolkit; our version > does not use one. I think it is too expensive to require a toolkit. > Especially since we have already got most of the features we want, > without a toolkit. There are features that you don't have, such as guaranteed correct interaction with X resources and app-defaults files, and the ability to build other widgets into the emacs process. Also, using a toolkit improves portability, since whoever ported the toolkit has done all of the hairy select() hacking for you already. (But if you want to compile without support for X (which is different from running without X) then this is not an issue, because you have to do this system-dependent hacking anyway.) I think the overhead of using Xt is not anything to be concerned about; the speed cost associated with Xt is insignificant, and the increase in executable size is both A: small, and nonexistent if you are using shared libraries, and B: proven to be acceptable by the already widespread use of this toolkit and toolkits derived from it. > In principle, I like the idea of supporting both modes of > operation--with toolkit and without. But the programmers at Lucid > told me last summer that using a toolkit required far-reaching changes > in many parts of Emacs, including making C-g fail to interrupt a > running program (something I worked hard a couple of years ago to make > work right). The event loop was rewritten to support the Xt-based command loop, true; but it was rewritten in what I believe is a much more retargetable way. It is not dependent on Xt; it just happens that currently Xt is the only backend supported. I'm sure it would be much easier to write a home-grown non-Xt backend for the event-loop with lemacs than it would be to make the FSF v19 command loop work with Xt. (In fact, that's why I designed it this way.) Perhaps I was unclear in a previous message, but you seem to be confusing an implementation detail of the C-g handing with the user-visible behavior. I spent a lot of time ensuring that the emacs command loop, including its handling of C-g as an elisp-level interrupt, is identical in behavior to emacs 18 from the user's point of view. We would certainly not break things badly enough that C-g didn't work! > I don't blame Lucid for this. If anyone made a mistake, it was those > who designed the X toolkits. Mistakes were made in the design of the X toolkits, to be sure. But I don't think they have adversely affected Lucid Emacs (aside from the time I had to spend to work around them.) -- Jamie
Path: sparky!uunet!ferkel.ucsb.edu!taco!gatech!howland.reston.ans.net! usc!hela.iti.org!cs.widener.edu!umn.edu!paperboy.micro.umn.edu! magnus.acs.ohio-state.edu!cis.ohio-state.edu!gnu.ai.mit.edu!rms From: r...@gnu.ai.mit.edu (Richard Stallman) Newsgroups: gnu.emacs.help Subject: Emacs 19 Date: 25 Feb 1993 22:45:50 -0500 Organization: Gatewayed from the GNU Project mailing list help-gnu-em...@prep.ai.mit.edu Lines: 44 Sender: dae...@cis.ohio-state.edu Distribution: world Message-ID: <9302260344.AA07305@mole.gnu.ai.mit.edu> References: <9302260127.AA03158@thalidomide.lucid.com> There is a segment of the community that wants an Emacs that uses a toolkit. The people who use Lucid Emacs are part of that segment. There is also a segment of people whose machines won't support that. I think there are a large number of such sites with limited memory and no shared libraries, now using GNU Emacs. I know of some myself. I also know I have always had complaints about how large Emacs is, from people whose machines are small and overloaded. Lucid won't get many complaints from these people. (If you don't like liver, you won't complain to the chef that the chopped liver has liver in it.) But that doesn't mean they are few in number. There is also a segment of users whose machines don't have X windows. If all three segments are large, a program that appeals only to one of them can get an enthusiastic reception. I think that's what Lucid has found. But if the FSF follows suit, a large number of users will be unhappy. So I would like add the capability to use a toolkit, without giving up the ability to work without one. I'd like to add this in a modular way, for the sake of future maintenance. My beliefs and opinions about Lucid's changes in input structure are all based on what Lucid's staff told me last summer. I was told the toolkit insisted on calling Emacs as a subroutine, and would not deliver another event until Emacs returned to it. I recall noting out that this would stop C-g from working, and that someone confirmed this. I asked if the toolkit provided any way to peek ahead, and was told no. This information dissuaded me from the goal of merging the two versions. Other Lucid programmers agreed that it was impossible to support both modes of operation because the changes were too pervasive. Now I think you are saying it is possible, and that you have a clean design to propose. I'm glad to hear it. Can you write up a technical proposal for how to change the Emacs command loop and/or input reading routines in preparation for supporting toolkit, non-toolkit X, and no-X-at-all modes of operation?
Path: sparky!uunet!ferkel.ucsb.edu!taco!gatech!asuvax!ncar!csn! magnus.acs.ohio-state.edu!cis.ohio-state.edu!lucid.com!jwz From: j...@lucid.com (Jamie Zawinski) Newsgroups: gnu.emacs.help Subject: Re: Emacs 19 Date: 25 Feb 1993 23:44:59 -0500 Organization: Gatewayed from the GNU Project mailing list help-gnu-em...@prep.ai.mit.edu Lines: 390 Sender: dae...@cis.ohio-state.edu Distribution: world Message-ID: <9302260442.AA04050@thalidomide.lucid.com> References: <9302260344.AA07305@mole.gnu.ai.mit.edu> Richard Stallman wrote: > > My beliefs and opinions about Lucid's changes in input structure are > all based on what Lucid's staff told me last summer. I was told the > toolkit insisted on calling Emacs as a subroutine, and would not > deliver another event until Emacs returned to it. I recall noting out > that this would stop C-g from working, and that someone confirmed > this. I asked if the toolkit provided any way to peek ahead, and was > told no. Who told you this? If you think it was me, then we had a very serious miscomunication, because none of this is true, and I have never believed it to be true. And I'm the one who wrote basically all of the code in question. > Can you write up a technical proposal for how to change the Emacs > command loop and/or input reading routines in preparation for > supporting toolkit, non-toolkit X, and no-X-at-all modes of operation? Even better, I can point you at a working implementation, liberally commented. I find it upsetting that, despite all of the criticism you heap upon us, it is clear that you have never even *run* Lucid Emacs. Here is a description of what Lucid Emacs currently does at the lowest level. The basic notion is that there is an event_stream structure which encapsulates all system-dependent input, in an analagous way to the v18 redisplay hooks. There is only one event_stream structure in use at a time. struct event_stream { int (*event_pending_p) (int); void (*next_event_cb) (struct Lisp_Event *); void (*handle_magic_event_cb) (struct Lisp_Event *); int (*generate_wakeup_cb) (unsigned int, unsigned int, Lisp_Object, Lisp_Object); void (*disable_wakeup_cb) (int); void (*select_tty_cb) (int); void (*unselect_tty_cb) (int); void (*select_process_cb) (struct Lisp_Process *); void (*unselect_process_cb) (struct Lisp_Process *); #ifdef SIGIO void (*sigio_cb) (); #endif }; next_event_cb A function which fills in an emacs_event struture with the next event available. If there is no event available, then this should block. event_pending_cb A function which says whether there are events to be read. If called with an argument of 0, then this should say whether calling the next_event_cb will block. If called with an argument of 1, then this should say whether there are user-generated events pending (that is, keypresses or mouse-clicks.) This is used for redisplay optimization, among other things. On dumb ttys, these two results are the same, but under a window system, they are not. handle_magic_event_cb Emacs calls this with an event structure which contains window-system dependent information that emacs doesn't need to know about, but which must happen in order. If the next_event_cb never returns an event of type "magic", this will never be used. generate_wakeup_cb Called with an int, the number of milliseconds after which a wakeup event should be generated; the number of milliseconds after which this timeout should *next* occur (or 0 if it's a one-shot); a function to call when the wakeup occurs; and some other object which that function will be called with. This callback should return an int id-number which uniquely identifies this wakeup, and the "resignalled" wakeups. If an implementation doesn't have millisecond granularity, it should round up to the closest value it can deal with. disable_wakeup_cb Called with an int, the id number of a wakeup to discard. This id number must have been returned by the generate_wakeup_cb. If the given wakeup has already expired, this should do nothing. select_process_cb These callbacks tell the underlying implementation to unselect_process_cb add or remove a file descriptor from the list of fds which are polled for inferior-process input. When input becomes available on the given tty, an event of type "process" should be generated. select_tty_cb These callbacks tell the underlying implementation unselect_tty_cb to add or remove a file descriptor from the list of fds which are polled for user-input. Each character read from the fd generates a keypress event. This is dumb-tty-type input; anything more complicated than that needs to be handled differently. (Handwave, handwave.) Possibly we should implement these in terms of select_process_cb. sigio_cb A handler function for SIGIO interrupts, if on a system which generates them. event_streams should should be designed to not *require* SIGIO, but can take advantage of it if it's present. Emacs has its own event structures, which are distinct from the event structures used by X or any other window system. It is the job of the event_stream layer to translate to this format. key_press_event event_channel A token representing which keyboard generated it. For this kind of event, this is a screen object. (This is for eventual support of multiple displays.) timestamp When it happened key What keysym this is; an integer or a symbol. If this is an integer, it will be in the printing ASCII range: >32 and <127. modifiers Bucky-bits on that key: control, meta, etc. For most keys, Shift is not a bit; that is implicit in the keyboard layout. button_press_event button_release_event event_channel A token representing which mouse generated it. For this kind of event, this is a screen object. timestamp When it happened button What button went down or up. modifiers Bucky-bits on that button: shift, control, meta, etc. x, y Where it was at the button-state-change (in pixels). pointer_motion_event event_channel A token representing which mouse generated it. For this kind of event, this is a screen object. timestamp When it happened x, y Where it was after it moved (in pixels). process_event timestamp When it happened process the emacs "process" object in question timeout_event timestamp Now (really, when the timeout was signalled) function The elisp function to call for this timeout. It is called with one argument, the event. object Some lisp object associated with this timeout, to make it easier to tell them apart. eval_event timestamp When it happened. function An elisp function to call with this event object. object Anything. This kind of event is used internally; sometimes the window system interface would like to inform emacs of some user action (such as focusing on another screen) but needs that to happen synchronously with the other user input, like keypresses. menu_event timestamp When it happened. function An elisp function to call with this event object. object Anything. This is similar to an eval_event, except that it is generated by selections in the menubar. It is a "command" event, like key and mouse presses (and unlike mouse motion, process output, and enter and leave window hooks.) In many ways, eval_events are not the same as key- or menu-events. magic_event No user-serviceable parts within. This is for things like KeymapNotify and ExposeRegion events and so on that emacs itself doesn't care about, but which it must do something with for proper interaction with the window system. Magic_events are handled somewhat asynchronously, just like subprocess filters. However, occasionally a magic_event needs to be handled synchronously; in that case, the asynchronous handling of the magic_event will push an eval_event back onto the queue, which will be handled synchronously later. This is why eval_events exist; I'm not entirely happy with this aspect of this event model. The alternative is to make these kinds of magic events be events that emacs knows about at a higher level, but that lets window-system-specific concepts leak higher than I am comfortable with. In the Xt model, the callback functions work like this: emacs_Xt_event_pending_p: If `user_p' is false, then this function returns whether there are any X, timeout, or fd events pending (that is, whether emacs_Xt_next_event() would return immediately without blocking.) if `user_p' is false, then this function returns whether there are any *user generated* events available (that is, whether there are keyboard or mouse-click events ready to be read.) This also implies that emacs_Xt_next_event() would not block. In a non-SIGIO world, this also checks whether the user has typed ^G, since this is a convenient place to do so. We don't need to do this in a SIGIO world, since all input causes an interrupt. emacs_Xt_next_event: This basically calls XtAppNextEvent() and converts it to the appropriate kind of Lisp_Event. (It is a little complicated to work around a design bug in the way XtAppNextEvent() deals with fd and timeout events.) emacs_Xt_handle_magic_event: This calls repaint_lines(), or the emacs functions that handle selection transfers, etc, or XtDispatchEvent() if the event is not destined for emacs. emacs_Xt_select_process: This calls XtAppAddInput() and does some bookkeeping. emacs_Xt_generate_wakeup: This calls XtAppAddTimeOut() and does some bookkeeping. emacs_Xt_event_sigio_handler: This scans the current X event queue for KeyPress events that are C-g (really, that are equivalent to `interrupt_char') and calls interrupt_signal() if appropriate. Since this may be called from a signal handler, it obeys `x_input_blocked'. emacs_Xt_select_tty: This doesn't do anything right now, but will eventually be the function that causes emacs to start interpreting input on an arbitrary fd as user input coming from an ASCII channel. It will do this using XtAppAddInput, which works even if emacs is not connected to an X server. If compiled with Xt support, but not connected to an X server, the above functions (once the select_tty routines are written) would be used. If compiled without any X support, then the event_stream structure would be populated with routines which do exactly what the analagous code in v18 does. I expect this would be a fairly mechanical re-arrangement of the v18 code. If compiled with support for two different window systems (assuming that at some point in the future there is another window system besides X to which emacs is given direct access) then at startup time, the event_stream would be populated with the appropriate set of callback functions. If compiled with X but without Xt, then there are two options: the first is to write another set of event_stream functions. The other option, which is probably easier, is just to write a small simulation of Xt, which does no more than what emacs needs. This would probably be easier; you just need to encapsulate the calls to select() and XNextEvent() behind functions with the same interface as the few Xt routines that the emacs_Xt callbacks use. ============================================================================ That explains how the lowest level of interactions with the window system works. At the next level up, the emacs event loop has been rewritten in terms of event objects instead of ASCII characters. An event is a new data type that contains several pieces of information. There are several kinds of event, and corresponding accessor and utility functions. We tried to abstract them so that they would apply equally well to a number of window systems. Events are reused efficiently; the event loop does no consing. key_press_event event_channel A token representing which keyboard generated it. For this kind of event, this is a screen object. (This is for eventual support of multiple displays.) timestamp When it happened key What keysym this is; an integer or a symbol. If this is an integer, it will be in the printing ASCII range: >32 and <127. modifiers Bucky-bits on that key: control, meta, etc. For most keys, Shift is not a bit; that is implicit in the keyboard layout. button_press_event button_release_event event_channel A token representing which mouse generated it. For this kind of event, this is a screen object. timestamp When it happened button What button went down or up. modifiers Bucky-bits on that button: shift, control, meta, etc. x, y Where it was at the button-state-change (in pixels). pointer_motion_event event_channel A token representing which mouse generated it. For this kind of event, this is a screen object. timestamp When it happened x, y Where it was after it moved (in pixels). process_event timestamp When it happened process the emacs "process" object in question timeout_event timestamp Now (really, when the timeout was signalled) function The elisp function to call for this timeout. It is called with one argument, the event. object Some lisp object associated with this timeout, to make it easier to tell them apart. eval_event timestamp When it happened. function An elisp function to call with this event object. object Anything. This kind of event is used internally; sometimes the window system interface would like to inform Emacs of some user action (such as focusing on another screen) but needs that to happen synchronously with the other user input, like keypresses. menu_event timestamp When it happened. function An elisp function to call with this event object. object Anything. This is similar to an eval_event, except that it is generated by selections in the menubar. It is a "command" event, like key and mouse presses (and unlike mouse motion, process output, and enter and leave window hooks.) In many ways, eval_events are not the same as key- or menu-events. magic_event No user-serviceable parts within. This is for things like KeymapNotify and ExposeRegion events and so on that Emacs itself doesn't care about, but which it must do something with for proper interaction with the window system. Magic_events are handled somewhat asynchronously, just like subprocess filters. However, occasionally a magic_event needs to be handled synchronously; in that case, the asynchronous handling of the magic_event will push an eval_event back onto the queue, which will be handled synchronously later. This is why eval_events exist. The function `next-event' blocks and returns one of the above-described event objects. The function `dispatch-event' takes an event and processes it in the appropriate way. For a process-event, dispatch-event calls the process's handler; for a mouse-motion event, the mouse-motion-handler hook is called, and so on. For magic-events, dispatch-event does window-system-dependent things, including calling some non-window-system-dependent hooks: map-screen-hook, unmap-screen-hook, mouse-enter-screen-hook, and mouse-leave-screen-hook. The function `next-command-event' calls `next-event' until it gets a key or button from the user (that is, not a process, motion, timeout, or magic event). If it gets an event that is not a key or button, it calls `dispatch-event' on it immediately and reads another one. The next-command-event function could be implemented in elisp, though it isn't. read-char calls next-command-event; if it doesn't get an event that can be converted to an ASCII character, it signals an error. Otherwise it returns an integer. The variable `last-command-char' always contains an integer, or nil (if the last read event has no ASCII equivalent, as when it is a mouse-click or a non-ASCII character chord.) The new variable `last-command-event' holds an event object, that could be a non-ASCII character, a button click, a menu selection, etc. The variable `unread-command-char' no longer exists, and has been replaced by `unread-command-event'. With the new event model, it is incorrect for code to do (setq unread-command-char (read-char)), because all user-input can't be represented as ASCII characters. This is an incompatible change. Code which sets `unread-command-char' must be updated to use the combination of `next-command-event' and `unread-command-event' instead. The functions `this-command-keys' and `recent-keys' return a vector of event objects, instead of a string of ASCII characters. This also is an incompatible change. Almost nothing happens at interrupt level; the SIGIO handler only looks at the X event queue for KeyPress events which map to ^G, and sets `quit-flag' when appropriate. All redisplay happens in the main thread of the process. It would be possible to make repaint_lines() be called from the SIGIO handler when appropriate, but I don't think it is a good idea, or especially worthwhile. We envision the dumb-tty handler functions doing function-key handling at the lowest level. So the terminal-specific code would set up some data structure that would cause the key sequences that some ttys generate for function keys to be converted to 'f1 and so on before next-event saw them. This will allow the construct like (global-set-key 'f1 'my-function) to work regardless of what terminal or window system you happen to be using. -- Jamie
Path: sparky!uunet!ferkel.ucsb.edu!taco!gatech!asuvax!ncar!csn! magnus.acs.ohio-state.edu!cis.ohio-state.edu!gnu.ai.mit.edu!rms From: r...@gnu.ai.mit.edu (Richard Stallman) Newsgroups: gnu.emacs.help Subject: Emacs 19 Date: 26 Feb 1993 01:10:31 -0500 Organization: Gatewayed from the GNU Project mailing list help-gnu-em...@prep.ai.mit.edu Lines: 23 Sender: dae...@cis.ohio-state.edu Distribution: world Message-ID: <9302260608.AA07530@mole.gnu.ai.mit.edu> References: <9302260442.AA04050@thalidomide.lucid.com> > My beliefs and opinions about Lucid's changes in input structure are > all based on what Lucid's staff told me last summer. I was told the > toolkit insisted on calling Emacs as a subroutine, and would not > deliver another event until Emacs returned to it. I recall noting out > that this would stop C-g from working, and that someone confirmed > this. I asked if the toolkit provided any way to peek ahead, and was > told no. Who told you this? I don't know which person at Lucid told me this. But that doesn't seem important. What matters is that it isn't so. I'm glad, because it was discouraging news at the time. The event_stream mechanism sounds good. Could you send me the code for that part of Lucid Emacs? I think we can install it, if you will do the job of separating it out from the mass of the rest. (This is something you can do much more easily than I.) I doubt it can be installed verbatim, since we've probably made changes in the surrounding context, but at least it sounds like a job worth doing. Where else are changes needed to work with your toolkit-use code?
Path: sparky!uunet!ferkel.ucsb.edu!taco!gatech!howland.reston.ans.net! usc!hela.iti.org!cs.widener.edu!dsinc!ub!csn!magnus.acs.ohio-state.edu! cis.ohio-state.edu!lucid.com!jwz From: j...@lucid.com (Jamie Zawinski) Newsgroups: gnu.emacs.help Subject: Re: Emacs 19 Message-ID: <9302260621.AA04458@thalidomide.lucid.com> Date: 26 Feb 93 06:52:01 GMT References: <9302260608.AA07530@mole.gnu.ai.mit.edu> Sender: dae...@cis.ohio-state.edu Organization: Gatewayed from the GNU Project mailing list help-gnu-em...@prep.ai.mit.edu Lines: 18 Richard Stallman wrote: > > The event_stream mechanism sounds good. Could you send me the code > for that part of Lucid Emacs? I think we can install it, if you will > do the job of separating it out from the mass of the rest. (This is > something you can do much more easily than I.) I doubt it can > be installed verbatim, since we've probably made changes in the > surrounding context, but at least it sounds like a job worth doing. I'll send you the files, but I doubt there is much surrounding context left at all. > Where else are changes needed to work with your toolkit-use code? It's hard to say; our changes have been pervasive. As you said, a merge will be a very large task. -- Jamie
Path: sparky!uunet!stanford.edu!hubcap!gatech!howland.reston.ans.net! usc!hela.iti.org!cs.widener.edu!dsinc!ub!csn!magnus.acs.ohio-state.edu! cis.ohio-state.edu!gnu.ai.mit.edu!rms From: r...@gnu.ai.mit.edu (Richard Stallman) Newsgroups: gnu.emacs.help Subject: Emacs 19 Message-ID: <9302260643.AA07576@mole.gnu.ai.mit.edu> Date: 26 Feb 93 06:47:46 GMT References: <9302260621.AA04458@thalidomide.lucid.com> Sender: dae...@cis.ohio-state.edu Organization: Gatewayed from the GNU Project mailing list help-gnu-em...@prep.ai.mit.edu Lines: 16 > Where else are changes needed to work with your toolkit-use code? It's hard to say; our changes have been pervasive. As you said, a merge will be a very large task. It's almost impossible to merge one program with another as a unit, when there is a lot of difference. By far the easiest way is to find cohesive "unit changes" in one program--various parts that were changed together and need each other to work, but are separate from other changes--and think about them one at a time. The merging in of the changes is most efficiently done by us; the extraction is most efficiently done by you. Please help us merge by doing this.
Newsgroups: gnu.emacs.help Path: sparky!uunet!UB.com!pacbell.com!network.ucsd.edu!usc! howland.reston.ans.net!paladin.american.edu!news.univie.ac.at!hp4at! mcsun!sunic!uts!iesd!abraham From: abra...@research.att.com (Per Abrahamsen) Subject: Re: Emacs 19 (Xview backend) In-Reply-To: jwz@lucid.com's message of 26 Feb 93 01:30:16 GMT Message-ID: <ABRAHAM.93Feb26192249@loke.iesd.auc.dk> Sender: n...@iesd.auc.dk (UseNet News) Organization: AT&T Bell Laboratories, Murray Hill References: jwz@lucid.com (Jamie Zawinski) <9302260127.AA03158@thalidomide.lucid.com> Date: 26 Feb 93 18:22:48 GMT Lines: 22 Sorry to interrupt the peace conference... >>>>> On 26 Feb 93 01:30:16 GMT, j...@lucid.com (Jamie Zawinski) said: Jamie> The event loop was rewritten to support the Xt-based command Jamie> loop, true; but it was rewritten in what I believe is a much Jamie> more retargetable way. It is not dependent on Xt; it just Jamie> happens that currently Xt is the only backend supported. I'm Jamie> sure it would be much easier to write a home-grown non-Xt Jamie> backend for the event-loop with lemacs than it would be to make Jamie> the FSF v19 command loop work with Xt. (In fact, that's why I Jamie> designed it this way.) Would you think it was a good idea to write a XView (really Notifier) backend? It would make it possible to have a free OPEN LOOK compliant GNU Emacs, something that would be much appreciated by two important communities: Solaris and Linux users. To put it differently: IF someone contributed a clean optional XView backend, would you then consider integrating it in a future version of GNU Emacs?
Path: sparky!uunet!stanford.edu!hubcap!emory!europa.eng.gtefsd.com! gatech!swrinde!elroy.jpl.nasa.gov!ncar!csn!magnus.acs.ohio-state.edu! cis.ohio-state.edu!gnu.ai.mit.edu!rms From: r...@gnu.ai.mit.edu (Richard Stallman) Newsgroups: gnu.emacs.help Subject: Emacs 19 (Xview backend) Date: 26 Feb 1993 15:13:41 -0500 Organization: Gatewayed from the GNU Project mailing list help-gnu-em...@prep.ai.mit.edu Lines: 6 Sender: dae...@cis.ohio-state.edu Distribution: world Message-ID: <9302262007.AA09482@mole.gnu.ai.mit.edu> References: <ABRAHAM.93Feb26192249@loke.iesd.auc.dk> To put it differently: IF someone contributed a clean optional XView backend, would you then consider integrating it in a future version of GNU Emacs? Yes. Whether to install it would depend on things like how clean it is, and how much continuing work it would need.
Newsgroups: gnu.emacs.help Path: sparky!uunet!stanford.edu!lucid.com!karoshi!jwz From: Jamie Zawinski <j...@lucid.com> Subject: Re: Emacs 19 (Xview backend) In-Reply-To: abraham@research.att.com's message of 26 Feb 93 18:22:48 GMT Message-ID: <JWZ.93Feb26121818@thalidomide.lucid.com> Lines: 22 Sender: use...@lucid.com Organization: Lucid, Inc., Menlo Park, CA References: <9302260127.AA03158@thalidomide.lucid.com> <ABRAHAM.93Feb26192249@loke.iesd.auc.dk> X-Windows: graphics hacking :: roman numerals : sqrt(pi) Date: Fri, 26 Feb 93 20:18:21 GMT In gnu.emacs.help Per Abrahamsen <abra...@research.att.com> wrote: > > Would you think it was a good idea to write a XView (really Notifier) > backend? It would make it possible to have a free OPEN LOOK compliant > GNU Emacs, something that would be much appreciated by two important > communities: Solaris and Linux users. If by Open Look you don't mean something radically different from what OpenWindows means, then there's a much easier way to go about this than by adding a new event_stream: OLIT gives you the OpenLook-and-feel with an Xt-based interface, so all that needs to happen is that the OLIT code in lwlib (the Lucid Widget Library) be made to work (it's almost done.) But maybe there's a problem with this approach I'm missing; I know next to nothing about Open[A-Z][a-z]*. > To put it differently: IF someone contributed a clean optional XView > backend, would you then consider integrating it in a future version of > GNU Emacs? I would welcome it. -- Jamie
Path: sparky!uunet!stanford.edu!hubcap!gatech!howland.reston.ans.net! spool.mu.edu!uwm.edu!linac!pacific.mps.ohio-state.edu!cis.ohio-state.edu! research.att.com!abraham From: abra...@research.att.com Newsgroups: gnu.emacs.help Subject: Emacs 19 (Xview backend) Date: 26 Feb 1993 15:56:44 -0500 Organization: Gatewayed from the GNU Project mailing list help-gnu-em...@prep.ai.mit.edu Lines: 21 Sender: dae...@cis.ohio-state.edu Distribution: world Message-ID: <9302262050.AA23796@life.ai.mit.edu> References: <9302262007.AA09482@mole.gnu.ai.mit.edu> Reply-To: abra...@research.att.com >>>>> On Fri, 26 Feb 93 15:07:50 -0500, r...@gnu.ai.mit.edu (Richard >>>>> Stallman) said: abraham> To put it differently: IF someone contributed a clean optional XView abraham> backend, would you then consider integrating it in a future version of abraham> GNU Emacs? rms> Yes. Whether to install it would depend on things like rms> how clean it is, and how much continuing work it would need. If GNU Emacs will provide a clean separation between backends, the maintenance required for the Notifier backend would be at the level required by the Xt backend. Supporting a XView GUI (menus, dialog boxes) should be as much work as supporting a widget based GUI, again given a clean generic interface to the GUI front end. I guess there is no reason to start thinking about integrating XView in GNU Emacs before those interfaces have been defined.
Path: sparky!uunet!stanford.edu!hubcap!gatech!howland.reston.ans.net! spool.mu.edu!uwm.edu!linac!pacific.mps.ohio-state.edu!cis.ohio-state.edu! gnu.ai.mit.edu!rms From: r...@gnu.ai.mit.edu (Richard Stallman) Newsgroups: gnu.emacs.help Subject: Emacs 19 (Xview backend) Date: 26 Feb 1993 16:30:40 -0500 Organization: Gatewayed from the GNU Project mailing list help-gnu-em...@prep.ai.mit.edu Lines: 5 Sender: dae...@cis.ohio-state.edu Distribution: world Message-ID: <9302262123.AA09658@mole.gnu.ai.mit.edu> References: <9302262050.AA23796@life.ai.mit.edu> I guess there is no reason to start thinking about integrating XView in GNU Emacs before those interfaces have been defined. I think we will adopt the event-stream data structure and conventions that Lucid uses, for communication with toolkits of any sort.
Path: sparky!uunet!stanford.edu!hubcap!gatech!howland.reston.ans.net! spool.mu.edu!uwm.edu!linac!pacific.mps.ohio-state.edu!cis.ohio-state.edu! research.att.com!abraham From: abra...@research.att.com Newsgroups: gnu.emacs.help Subject: Emacs 19 (Xview backend) Date: 26 Feb 1993 16:51:05 -0500 Organization: Gatewayed from the GNU Project mailing list help-gnu-em...@prep.ai.mit.edu Lines: 13 Sender: dae...@cis.ohio-state.edu Distribution: world Message-ID: <9302262139.AA25171@life.ai.mit.edu> References: <9302262123.AA09658@mole.gnu.ai.mit.edu> Reply-To: abra...@research.att.com >>>>> r...@gnu.ai.mit.edu (Richard Stallman) writes: rms> I think we will adopt the event-stream data structure and conventions rms> that Lucid uses, for communication with toolkits of any sort. That should make it possible to prototype the functionality with Lucid Emacs. Would the backend be an Emacs 19, Emacs 19.xx or Emacs 20 kind of thing? How about generic GUI support (menus, dialog boxes)?
Newsgroups: gnu.emacs.help Path: sparky!uunet!stanford.edu!agate!howland.reston.ans.net! paladin.american.edu!news.univie.ac.at!hp4at!mcsun!dkuug!uts!iesd!abraham From: abra...@research.att.com (Per Abrahamsen) Subject: Re: Emacs 19 (Xview backend) In-Reply-To: Jamie Zawinski's message of Fri, 26 Feb 93 20:18:21 GMT Message-ID: <ABRAHAM.93Feb27040052@galilei.iesd.auc.dk> Sender: n...@iesd.auc.dk (UseNet News) Organization: AT&T Bell Laboratories, Murray Hill References: <9302260127.AA03158@thalidomide.lucid.com> <ABRAHAM.93Feb26192249@loke.iesd.auc.dk> <JWZ.93Feb26121818@thalidomide.lucid.com> Date: 27 Feb 93 03:00:51 GMT Lines: 53 In gnu.emacs.help Per Abrahamsen <abra...@research.att.com> wrote: Per> Would you think it was a good idea to write a XView (really Notifier) Per> backend? It would make it possible to have a free OPEN LOOK compliant Per> GNU Emacs, something that would be much appreciated by two important Per> communities: Solaris and Linux users. >>>>> On Fri, 26 Feb 93 20:18:21 GMT, Jamie Zawinski <j...@lucid.com> said: Jamie> If by Open Look you don't mean something radically different from what Jamie> OpenWindows means, then there's a much easier way to go about this than Jamie> by adding a new event_stream: OLIT gives you the OpenLook-and-feel with Jamie> an Xt-based interface, so all that needs to happen is that the OLIT code Jamie> in lwlib (the Lucid Widget Library) be made to work (it's almost done.) OPEN LOOK is a specification of a user interface. It is completely implementation independent, and described in two books, one for library writers and one application programmers. Anyone writing an application with a GUI (such as Emacs 19) should read the second book, it is very well written and you learn a lot about GUI design that can be used independent of what toolkit you have. OLIT is a specification of a programming interface (API). It is possible to write OPEN LOOK programs with OLIT, but using OLIT is no guarantee that your program will be OPEN LOOK. XView is an alternative interface, the main technical difference being that OLIT is build on top of X Intrinsics, while XView is not. OpenWindows is a collection of programs and libraries, all of which OPEN LOOK specification, except for bugs. One of the libraries also implements the OLIT API, another the XView API. Jamie> But maybe there's a problem with this approach I'm missing; I know next Jamie> to nothing about Open[A-Z][a-z]*. There are no free implementation of the OLIT API. Thus, it would not be usable on a PC running Linux or a SPARC running Hurd, or in fact anything but Solaris and some (other) SVR4 implementations. It would be nice if e.g. Lucid would pay one of their programmers to read the OPEN LOOK specification and make a compliant Emacs implementation using OLIT. However, it would be something you would do purely for business reasons, it would never be free software. Per> To put it differently: IF someone contributed a clean optional XView Per> backend, would you then consider integrating it in a future version of Per> GNU Emacs? Jamie> I would welcome it. Glad to hear that :-) ... and sorry for the lecture.
Path: sparky!uunet!stanford.edu!agate!howland.reston.ans.net! newsserver.jvnc.net!darwin.sura.net!haven.umd.edu!umd5!umd5.umd.edu! anderson From: ander...@sapir.cog.jhu.edu (Stephen Anderson) Newsgroups: gnu.emacs.help Subject: Re: Emacs 19 Message-ID: <ANDERSON.93Mar1085802@sapir.cog.jhu.edu> Date: 1 Mar 93 13:58:02 GMT References: <9302260127.AA03158@thalidomide.lucid.com> <9302260344.AA07305@mole.gnu.ai.mit.edu> Sender: n...@umd5.umd.edu Organization: Dept. of Cognitive Science, The Johns Hopkins University Lines: 27 In-reply-to: rms@gnu.ai.mit.edu's message of 26 Feb 93 03:45:50 GMT All of this sudden flurry of discussion between rms and the Lucid people is very heartening. >>>>> On 26 Feb 93 03:45:50 GMT, r...@gnu.ai.mit.edu (Richard Stallman) said: rms> There is also a segment of people whose machines won't support rms> that. I think there are a large number of such sites with rms> limited memory and no shared libraries, now using GNU Emacs. I rms> know of some myself. I also know I have always had complaints rms> about how large Emacs is, from people whose machines are small rms> and overloaded. [...] rms> There is also a segment of users whose machines don't have X rms> windows. Does this imply that FSF's emacs-19 might support other windowing systems? In particular, I'm interested in the possibility of an emacs-19 that uses NeXTstep windowing natively. I've done a small amount to help get lemacs to work on a NeXT, but given the real problems of getting X to run smoothly on top of NeXTstep, there's no way to make the current heavily-X-dependent version work well for NeXT users. Of course, some may say that (with the recent demise of neXT as a hardware company) that's a vanishingly small segment of the community anyway, but if NeXTstep/Intel (and other proposed ports) should take off, it might not be so small after all. --Steve Anderson
Path: sparky!uunet!stanford.edu!agate!howland.reston.ans.net!usc! cs.utexas.edu!asuvax!ncar!noao!amethyst!arizona!kline From: kl...@cs.arizona.edu (Nick Kline) Newsgroups: gnu.emacs.help Subject: Re: Emacs 19 Message-ID: <33565@optima.cs.arizona.edu> Date: 1 Mar 93 19:46:24 GMT References: <9302260127.AA03158@thalidomide.lucid.com> <9302260344.AA07305@mole.gnu.ai.mit.edu> <ANDERSON.93Mar1085802@sapir.cog.jhu.edu> Sender: n...@cs.arizona.edu Organization: U of Arizona CS Dept, Tucson Lines: 35 ^ ^Does this imply that FSF's emacs-19 might support other windowing ^systems? In particular, I'm interested in the possibility of an ^emacs-19 that uses NeXTstep windowing natively. I've done a small ^amount to help get lemacs to work on a NeXT, but given the real ^problems of getting X to run smoothly on top of NeXTstep, there's no ^way to make the current heavily-X-dependent version work well for NeXT ^users. Of course, some may say that (with the recent demise of neXT as ^a hardware company) that's a vanishingly small segment of the ^community anyway, but if NeXTstep/Intel (and other proposed ports) ^should take off, it might not be so small after all. ^ ^--Steve Anderson I was thinking the same thing. Specifically, if I had a description of the types of events and what they meant to give to this "event stream", then we could write a header function for the next which would convert next events to the form expect by emacs. And we could also write wrapper functions for the next which implemented whatever X calls emacs was making. However, I wonder how gross and low level these calls are. If they are things like moveXY(x,y); drawString(font, "string"); we could do those easily. But if they are like things like oh, I don't know: set opacity of buffer to xyz if(2 bit deep buffer) do this else if 4 bit deep do that and so forth then it would be hard. Of course, I haven't even looked at the X code in emacs. -nick
Newsgroups: gnu.emacs.help Path: sparky!uunet!stanford.edu!lucid.com!karoshi!jwz From: Jamie Zawinski <j...@lucid.com> Subject: Re: Emacs 19 In-Reply-To: kline@cs.arizona.edu's message of 1 Mar 93 19:46:24 GMT Message-ID: <JWZ.93Mar1145925@thalidomide.lucid.com> Lines: 27 Sender: use...@lucid.com Organization: Lucid, Inc., Menlo Park, CA References: <9302260127.AA03158@thalidomide.lucid.com> <9302260344.AA07305@mole.gnu.ai.mit.edu> <ANDERSON.93Mar1085802@sapir.cog.jhu.edu> <33565@optima.cs.arizona.edu> X-Windows: A moment of convenience, a lifetime of regret. Date: Mon, 1 Mar 93 22:59:28 GMT We tried very hard to make the event-stream model general enough to support other window systems, and to keep the X-specific code well isolated. There are currently a lot of Xisms in lemacs, but they're almost entirely related to redisplay, which we haven't done much work on yet. I've always thought that a native NeXTstep port would be great, because I think NeXTstep is a nice window system. Certainly the design won't have been truly vindicated until it is used with a window system other than X. But I suspect that a Windows NT port will be more useful... > And we could also write wrapper functions for the next which > implemented whatever X calls emacs was making. I know of someone who has done this (simulate Xt) for another window system. I think it's a pretty poor way to go about it, though it might be easier in the short term. > However, I wonder how gross and low level these calls are. If they are > things like moveXY(x,y); drawString(font, "string"); we could do those > easily. Lemacs doesn't exercise Xlib very heavily (there are probably some abstractions missing, like getting the pixel-size of a string in a particular font, but that's easy to fix), and all of the Xt stuff is isolated under the event-stream callbacks. -- Jamie
Path: sparky!uunet!stanford.edu!rock!concert!gatech! howland.reston.ans.net!zaphod.mps.ohio-state.edu!cis.ohio-state.edu! gnu.ai.mit.edu!rms From: r...@gnu.ai.mit.edu (Richard Stallman) Newsgroups: gnu.emacs.help Subject: Re: Emacs 19 Date: 7 Mar 1993 14:29:33 -0500 Organization: Gatewayed from the GNU Project mailing list help-gnu-em...@prep.ai.mit.edu Lines: 11 Sender: dae...@cis.ohio-state.edu Distribution: world Message-ID: <9303071926.AA04783@mole.gnu.ai.mit.edu> References: <6962@pdxgate.UUCP> Based on what I've heard in the recent discussion, it ought to be possible for GNU Emacs to support Xt in the future as an optional feature. The first step towards this will be supporting a generic interface for reading input events. GNU Emacs 19 already has a generic event structure, much like the Lucid one, so the main job is supporting general hooks for interface to the program that does the reading. The second step might be to support a new kind of frame that interfaces via Xt instead of via Xlib, and perhaps to create a set of clean hooks for that interfacing.