* Is intellisense features integration in Emacs technically possible? @ 2014-01-21 2:01 Jorge Araya Navarro 2014-01-21 18:59 ` Tom 0 siblings, 1 reply; 65+ messages in thread From: Jorge Araya Navarro @ 2014-01-21 2:01 UTC (permalink / raw) To: emacs-devel [-- Attachment #1: Type: text/plain, Size: 1100 bytes --] Hello! I'm a Python and C++ programmer using Emacs 24.3! :D I wasn't complete happy with Emacs incapacity to have intellisense for C ++ (and Python have some sort of it through Jedi), so I decide to use CEDET but for me was a painful job to make it work on Emacs, because those elisp functions from CEDET that actually were void-functions, no intellisense after trying to fix those errors, etc. (I cannot make it works actually). It is amazing for me that something so useful as CEDET is proportionally hard to make it work for the majority (I guess) of Emasc users. Anyway, I was wondering if Emacs will grow on functionality not through elisp libraries but native code (I remember that Gimp have this issue too), because intellisense for a wide range of programming languages (with simple hooks and configuration to use as back-end for other libraries like auto-complete) is a very good idea to integrate into Emacs code. If it were technically possible, of course! -- Pax et bonum. Jorge Araya Navarro. Diseñador publicitario, programador Python/C++ y colaborador en Parabola GNU/Linux-libre. [-- Attachment #2: Type: text/html, Size: 1458 bytes --] ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-21 2:01 Is intellisense features integration in Emacs technically possible? Jorge Araya Navarro @ 2014-01-21 18:59 ` Tom 2014-01-21 19:29 ` Eli Zaretskii 2014-01-21 19:53 ` David Engster 0 siblings, 2 replies; 65+ messages in thread From: Tom @ 2014-01-21 18:59 UTC (permalink / raw) To: emacs-devel Jorge Araya Navarro <elcorreo <at> deshackra.com> writes: > Anyway, I was wondering if Emacs will grow on functionality not through elisp libraries but native code (I remember that Gimp have this issue too), because intellisense for a wide range of programming languages (with simple hooks and configuration to use as back-end for other libraries like auto- complete) is a very good idea to integrate into Emacs code. If it were technically possible, of course! Creating mature and extensive intellisense features is hard work, it requires lots of man hours and while it's technically possible to implement it in emacs it is unlikely to happen, because emacs lacks the developing resources. A better way is to build on the hard work of other and interface emacs with an external tool. Here are solutions for C++ and you can find more with Google: https://github.com/Sarcasm/irony-mode http://root42.blogspot.hu/2012/07/nice-c-autocomplete-configuration-for.html Similarly, for Java Eclim is a good solution, because it can instantly provide features which are not available from other emacs completion packages (e.g. code refactoring, suggestions for code fixes, etc.) It makes more sense to improve these interfacing solutions, because implementing code sense which provide the same level of support like Eclipse will never happen with an emacs native solutions (lack of resources, Eclipse has many thousand developer hours in its code). ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-21 18:59 ` Tom @ 2014-01-21 19:29 ` Eli Zaretskii 2014-01-21 19:58 ` Tom ` (2 more replies) 2014-01-21 19:53 ` David Engster 1 sibling, 3 replies; 65+ messages in thread From: Eli Zaretskii @ 2014-01-21 19:29 UTC (permalink / raw) To: Tom; +Cc: emacs-devel > From: Tom <adatgyujto@gmail.com> > Date: Tue, 21 Jan 2014 18:59:10 +0000 (UTC) > > Creating mature and extensive intellisense features is hard work, > it requires lots of man hours and while it's technically possible to > implement it in emacs it is unlikely to happen, because emacs lacks > the developing resources. According to this logic something like the rewrite of the display engine that happened between Emacs 20 and Emacs 21, or bidirectional editing support for Emacs 24 would never have happened. But it did. Each one of these took many man-months of work. Look at the amount of changes that get committed every day to the Emacs repository, and try to estimate the effort that goes into that. Sometimes I wish I had such resources at my disposal on my daytime job. I think the shortage is not in development resources, but in motivated individuals who'd sit down and do the job, and lobby others to come on board and help. Volunteers are welcome. > A better way is to build on the hard work of other and interface > emacs with an external tool. Personally, I think implementing such features via external programs is a terrible design. It will never be smooth and responsive enough, and on top of that you'd need to track development of those other tools. And what if they become abandoned some day? ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-21 19:29 ` Eli Zaretskii @ 2014-01-21 19:58 ` Tom 2014-01-22 3:53 ` Eli Zaretskii 2014-01-21 20:03 ` Andreas Röhler 2014-01-22 17:29 ` Phillip Lord 2 siblings, 1 reply; 65+ messages in thread From: Tom @ 2014-01-21 19:58 UTC (permalink / raw) To: emacs-devel Eli Zaretskii <eliz <at> gnu.org> writes: > > According to this logic something like the rewrite of the display > engine that happened between Emacs 20 and Emacs 21, or bidirectional > editing support for Emacs 24 would never have happened. But it did. > Each one of these took many man-months of work. Yes, but I don't think their complexity is comparable to, for example, the Java support of Eclipse which has been continously developed for many years by a bunch of people. Repeating this effort is no small feat. > Look at the amount of changes that get committed every day to the > Emacs repository, and try to estimate the effort that goes into that. > Sometimes I wish I had such resources at my disposal on my daytime > job. Yet, Emacs cannot provide the same level of language support like other tools for Java and C++, so it is apparent the language support part has not enough resources. > I think the shortage is not in development resources, but in motivated > individuals who'd sit down and do the job, and lobby others to come on > board and help. Volunteers are welcome. Motivation can have multiple forms. For example, my idea was financial motivation: http://lists.gnu.org/archive/html/emacs-devel/2012-04/msg00476.html The idea is to make it possible for people to sponsor specific features and there is enough bounty then someone will come and do it. If people don't want to work on them in their free time, then users can create a money pool (everyone giving a small amount) and if enough users donates money then someone can work on it full time until the feature is implemented. > Personally, I think implementing such features via external programs > is a terrible design. It will never be smooth and responsive enough, > and on top of that you'd need to track development of those other > tools. I agree a native solution would be better, but for Java Eclim provides these features right now, while a native solution (if it happens at all) will provide them next year, or a year after that? http://www.skybert.net/emacs/java/ > And what if they become abandoned some day? These interface packages should not be complicated. They just talk to the server and then present the data to an emacs frontend (like autocomplete). So if a tool is abandoned then there is an other tool instead, and only this interface layer needs to be reimplemented which shouldn't be a lot of work. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-21 19:58 ` Tom @ 2014-01-22 3:53 ` Eli Zaretskii 2014-01-22 4:36 ` Óscar Fuentes 0 siblings, 1 reply; 65+ messages in thread From: Eli Zaretskii @ 2014-01-22 3:53 UTC (permalink / raw) To: Tom; +Cc: emacs-devel > From: Tom <adatgyujto@gmail.com> > Date: Tue, 21 Jan 2014 19:58:21 +0000 (UTC) > > Eli Zaretskii <eliz <at> gnu.org> writes: > > > > > According to this logic something like the rewrite of the display > > engine that happened between Emacs 20 and Emacs 21, or bidirectional > > editing support for Emacs 24 would never have happened. But it did. > > Each one of these took many man-months of work. > > Yes, but I don't think their complexity is comparable to, for example, > the Java support of Eclipse which has been continously developed > for many years by a bunch of people. Repeating this effort is > no small feat. The Emacs display engine is many tens of thousands of C code plus many thousands of Lisp. I'm quite sure rewriting all that is more than would be needed for intellisense support. > > Look at the amount of changes that get committed every day to the > > Emacs repository, and try to estimate the effort that goes into that. > > Sometimes I wish I had such resources at my disposal on my daytime > > job. > > Yet, Emacs cannot provide the same level of language support like > other tools for Java and C++, so it is apparent the language support > part has not enough resources. Like I said: lack of motivation, not lack of resources. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 3:53 ` Eli Zaretskii @ 2014-01-22 4:36 ` Óscar Fuentes 2014-01-22 6:31 ` David Kastrup ` (3 more replies) 0 siblings, 4 replies; 65+ messages in thread From: Óscar Fuentes @ 2014-01-22 4:36 UTC (permalink / raw) To: emacs-devel Eli Zaretskii <eliz@gnu.org> writes: > The Emacs display engine is many tens of thousands of C code plus many > thousands of Lisp. AFAIU this is largely a consequence of the development baggage of Emacs. That is, the complexity of the current code base is far greater than the complexity of its purpose. > I'm quite sure rewriting all that is more than would be needed for > intellisense support. Writing a C++ parser and semantic analyzer from scratch requires several man-years of work for world-class compiler writers. And with every new C++ standard that comes out the effort increases significantly. [snip] ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 4:36 ` Óscar Fuentes @ 2014-01-22 6:31 ` David Kastrup 2014-01-22 7:26 ` Stephen J. Turnbull 2014-01-22 8:49 ` Rüdiger Sonderfeld ` (2 subsequent siblings) 3 siblings, 1 reply; 65+ messages in thread From: David Kastrup @ 2014-01-22 6:31 UTC (permalink / raw) To: emacs-devel Óscar Fuentes <ofv@wanadoo.es> writes: > Eli Zaretskii <eliz@gnu.org> writes: > >> The Emacs display engine is many tens of thousands of C code plus many >> thousands of Lisp. > > AFAIU this is largely a consequence of the development baggage of Emacs. > That is, the complexity of the current code base is far greater than the > complexity of its purpose. If I understand correctly, It has been more or less rewritten from scratch for Emacs 21. That's not all that long in terms of the total development history. -- David Kastrup ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 6:31 ` David Kastrup @ 2014-01-22 7:26 ` Stephen J. Turnbull 2014-01-22 8:13 ` David Kastrup 2014-01-22 16:04 ` Eli Zaretskii 0 siblings, 2 replies; 65+ messages in thread From: Stephen J. Turnbull @ 2014-01-22 7:26 UTC (permalink / raw) To: emacs-devel I apologize for responding to DAK's post but I lost Óscar's. > Óscar Fuentes <ofv@wanadoo.es> writes: > > > Eli Zaretskii <eliz@gnu.org> writes: > > > >> The Emacs display engine is many tens of thousands of C code plus many > >> thousands of Lisp. > > > > AFAIU this is largely a consequence of the development baggage of Emacs. > > That is, the complexity of the current code base is far greater than the > > complexity of its purpose. It could surely be a lot smaller if it were restricted to a single multiplatform toolkit such as wxWindows. However, users seem to prefer platform-specific code, leading to a lot of duplication. It's not clear to me that's bad, given that both user preference and developer skills are often very platform-specific. By comparison, it's hard to say exactly (depends on what you mean by "display"), but XEmacs's display engine is about 3.5KLOC of C code, of which less than 1.5KLOC are in the platform-independent parts. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 7:26 ` Stephen J. Turnbull @ 2014-01-22 8:13 ` David Kastrup 2014-01-22 9:33 ` Stephen J. Turnbull 2014-01-22 13:35 ` Stefan Monnier 2014-01-22 16:04 ` Eli Zaretskii 1 sibling, 2 replies; 65+ messages in thread From: David Kastrup @ 2014-01-22 8:13 UTC (permalink / raw) To: emacs-devel "Stephen J. Turnbull" <stephen@xemacs.org> writes: > I apologize for responding to DAK's post but I lost Óscar's. > > > Óscar Fuentes <ofv@wanadoo.es> writes: > > > > > Eli Zaretskii <eliz@gnu.org> writes: > > > > > >> The Emacs display engine is many tens of thousands of C code plus many > > >> thousands of Lisp. > > > > > > AFAIU this is largely a consequence of the development baggage of Emacs. > > > That is, the complexity of the current code base is far greater than the > > > complexity of its purpose. > > It could surely be a lot smaller if it were restricted to a single > multiplatform toolkit such as wxWindows. However, users seem to > prefer platform-specific code, leading to a lot of duplication. It's > not clear to me that's bad, given that both user preference and > developer skills are often very platform-specific. > > By comparison, it's hard to say exactly (depends on what you mean by > "display"), but XEmacs's display engine is about 3.5KLOC of C code, of > which less than 1.5KLOC are in the platform-independent parts. IIUC correctly, XEmacs' display engine factors quite more code and behavior into a platform independent part of the code base. From an engineering and maintenance perspective that seems like a sane thing to do and certainly factored in significantly in the headstart XEmacs had over Emacs regarding the support of graphical interfaces. In the long run, it may have made it harder for XEmacs to keep up with the changing evolution of desktop environment looks, never mind how little this may have actually to do with engineering or usability. XEmacs looks a lot like XEmacs on every platform, or at least it did so when I looked at it the last time, admittedly considerable time ago. And that look makes it quite more apparent that XEmacs was competing with the likes of the Athena widget set and Motif than one can see with Emacs. I am actually grateful that I can compile my Emacs with --without-toolkit-scroll-bars (why is that only a compile-time option?) and get the Lucid scrollbars for my otherwise GTK+ Emacs since, ugly looks aside, the semantics of the old Athena scrollbar design are vastly superior over that of the prettier GTK+ scrollbars, and the GTK+ maintainers are usually quite opposed to provide configurability. But as the user interface wars we had in Emacs alone over the issue of whether the scrollbar should be to the left or the right side of the window show, for a lot of people blending into the respective environment feels very important. -- David Kastrup ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 8:13 ` David Kastrup @ 2014-01-22 9:33 ` Stephen J. Turnbull 2014-01-22 11:02 ` David Kastrup 2014-01-22 13:35 ` Stefan Monnier 1 sibling, 1 reply; 65+ messages in thread From: Stephen J. Turnbull @ 2014-01-22 9:33 UTC (permalink / raw) To: David Kastrup; +Cc: emacs-devel David Kastrup writes: > In the long run, [XEmacs-style factoring of (re-)display > functionality] may have made it harder for XEmacs to keep up with > the changing evolution of desktop environment looks, Unlikely. XEmacs developers just emphasized application functionality over desktop integration (except with X, where ICCCM conformance was an early goal -- of course platforms like Windows and Mac OS X make it easy to conform at that level, whereas in practice ICCCM conformance is impossible). True, the native widget support was poorly done, which made everything except Xt/Athena look like crap when compared with implementing directly as done in Emacs. The widgets look like a 14-year-old boy at a sock hop, never quite able to fit in with the cool kids. But that's because they guy who implemented native widget support thought like a Windows programmer, and didn't really like the idea of delegating to widgets. So his code tries to control everything from the Emacs window level down, in C. Yuck. Not to mention hard to modify at all, let alone beautify. OTOH, Bill Perry's original work on GTK+ support had all the cool stuff -- tear off menus, Glade and GNOME integration, and an FFI for anything that came along later. That all bitrotted because BeOpen went under so financial support for GTK+ did too, and the people who ported to GTK+ v2 again just wanted the toplevel effect of the GTK look, and so didn't do a great job of bringing the cool stuff along with them. N.B. While obviously I have strong opinions on how these things *should* have been done in retrospect, it's not clear to me what was the right thing to do at the time. The main point here is that I think what we would need to improve platform integration is *more* refactoring, not less. > XEmacs looks a lot like XEmacs on every platform, or at least it > did so when I looked at it the last time, admittedly considerable > time ago. So does Emacs. On the Mac as supplied by MacPorts it looks a lot like a late '90s X application. :-) And spews ugly GTK QA warnings like crazy -- uh, excuse me, like all the other GTK apps. > I am actually grateful that I can compile my Emacs with > --without-toolkit-scroll-bars (why is that only a compile-time > option?) Because nobody really took the Lucid Widget promise of true toolkit independence seriously, and that's probably because they never really delivered on it. It's not really possible to plug and play different toolkits at runtime, although it *is* possible to mix and match at compile time. So you'd have to rewrite lwlib for that kind of feature. > But as the user interface wars we had in Emacs alone over the issue > of whether the scrollbar should be to the left or the right side of > the window show, for a lot of people blending into the respective > environment feels very important. Apparently so. But few of them were XEmacs developers, so that has never been emphasized in XEmacs. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 9:33 ` Stephen J. Turnbull @ 2014-01-22 11:02 ` David Kastrup 0 siblings, 0 replies; 65+ messages in thread From: David Kastrup @ 2014-01-22 11:02 UTC (permalink / raw) To: Stephen J. Turnbull; +Cc: emacs-devel "Stephen J. Turnbull" <stephen@xemacs.org> writes: > N.B. While obviously I have strong opinions on how these things > *should* have been done in retrospect, it's not clear to me what was > the right thing to do at the time. Oh, hindsight is clearly 100/100. Whatever else the great Emacs schism might have caused, it has given me two histories to extrapolate from and pontificate about. I may be overgeneralizing a lot, but then two data points are a dream constellation for curve fitting. While two data points do not seem like exactly much in the vast space of the Emacsen universe, this adds a whole new dimension over one data point. And things like Joe, Microemacs, Hemlock are just too distant viewpoints for facilitating depth perception and for being considered part of a quackworthy continuity. -- David Kastrup ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 8:13 ` David Kastrup 2014-01-22 9:33 ` Stephen J. Turnbull @ 2014-01-22 13:35 ` Stefan Monnier 1 sibling, 0 replies; 65+ messages in thread From: Stefan Monnier @ 2014-01-22 13:35 UTC (permalink / raw) To: David Kastrup; +Cc: emacs-devel > --without-toolkit-scroll-bars (why is that only a compile-time option?) Because nobody went through the trouble to make it a run-time option. There's no technical difficulty, AFAIR. And I'd welcome a patch for that. Stefan ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 7:26 ` Stephen J. Turnbull 2014-01-22 8:13 ` David Kastrup @ 2014-01-22 16:04 ` Eli Zaretskii 2014-01-23 8:13 ` Stephen J. Turnbull 1 sibling, 1 reply; 65+ messages in thread From: Eli Zaretskii @ 2014-01-22 16:04 UTC (permalink / raw) To: Stephen J. Turnbull; +Cc: emacs-devel > From: "Stephen J. Turnbull" <stephen@xemacs.org> > Date: Wed, 22 Jan 2014 16:26:49 +0900 > > By comparison, it's hard to say exactly (depends on what you mean by > "display") I meant the core device-independent portions of it, which in Emacs are xdisp.c, dispnew.c, dispextern.h, composite.c, and bidi.c -- everything required for basic layout of text and redisplay. Together they weigh in at about 45KLOC. This still leaves out other parts, like fringe.c, image.c, xfaces.c, the font stuff, the menu support, and the device dependent code (*term.c, *fns.c, etc.). If I add everything together, I get about 135KLOC in the current development code (up from about 93KLOC in Emacs 21). > but XEmacs's display engine is about 3.5KLOC of C code, of > which less than 1.5KLOC are in the platform-independent parts. Not sure how you get these numbers. Just redisplay.c, redisplay.h, and redisplay-out.c are about 13KLOC. Maybe our concept of what constitutes the display engine are very different, or maybe I don't know how to count lines. As a reference point, the total number of LOC in both projects is almost identical: around 370K. Emacs has display features that XEmacs doesn't (like bidi), so I would expect the code to be smaller, but certainly not by an order of magnitude. Again, this doesn't seem to be relevant at all to the issue at hand, which is whether introducing intellisense for select languages is or isn't practically possible in Emacs development. I just brought the 2 examples of features that required a comparable, if not greater, effort, and were implemented juts recently, because there was someone who picked up the gauntlet. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 16:04 ` Eli Zaretskii @ 2014-01-23 8:13 ` Stephen J. Turnbull 2014-01-23 8:44 ` David Kastrup 2014-01-23 16:19 ` Eli Zaretskii 0 siblings, 2 replies; 65+ messages in thread From: Stephen J. Turnbull @ 2014-01-23 8:13 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel Eli Zaretskii writes: > > From: "Stephen J. Turnbull" <stephen@xemacs.org> > > Date: Wed, 22 Jan 2014 16:26:49 +0900 > > > > By comparison, it's hard to say exactly (depends on what you mean by > > "display") > > I meant the core device-independent portions of it, which in Emacs are > xdisp.c, dispnew.c, dispextern.h, composite.c, and bidi.c -- > everything required for basic layout of text and redisplay. Together > they weigh in at about 45KLOC. This still leaves out other parts, > like fringe.c, image.c, xfaces.c, the font stuff, the menu support, > and the device dependent code (*term.c, *fns.c, etc.). If I add > everything together, I get about 135KLOC in the current development > code (up from about 93KLOC in Emacs 21). > > > but XEmacs's display engine is about 3.5KLOC of C code, of > > which less than 1.5KLOC are in the platform-independent parts. > > Not sure how you get these numbers. Just redisplay.c, redisplay.h, > and redisplay-out.c are about 13KLOC. Maybe our concept of what > constitutes the display engine are very different, or maybe I don't > know how to count lines. No, you're right. It's me that has lived in Japan too long and started counting by 10,000s instead of 1,000s. So the core is about 13KLOC (redisplay.c, redisplay.h, and redisplay-output.c). By contrast, if you take out composite.c and bidi.c (features XEmacs doesn't have), xdisp.c, dispnew.c, and dispextern.h are about 40KLOC, 3X as much. I'm sure by now Emacs has additional features that XEmacs doesn't, but even so that doesn't account for factor of 3. The point is that XEmacs code is very differently factored. Whether overall that's good or bad is in the eye of the beholder, but for two beholders (Bill Perry who did the GTK+ port and helped produce a prototype Qt port) and Andrew Choi (who did "Carbon" ports for both Emacs and XEmacs) praised XEmacs for the ease with which they were able to support new GUI platforms. > Again, this doesn't seem to be relevant at all to the issue at > hand Not as you put it. However, David made a claim that highly factored design could make development slower, and I wanted to put that claim to rest because it's *easy* to factor intellisense given Emacs's current architecture, and I want to argue that people shouldn't argue about how hard it is to do comprehensively. They should just jump in and do the language and features *they* need and let others do what they want to do. (Which I believe is your point, too!) > which is whether introducing intellisense for select languages is or > isn't practically possible in Emacs development. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-23 8:13 ` Stephen J. Turnbull @ 2014-01-23 8:44 ` David Kastrup 2014-01-23 16:19 ` Eli Zaretskii 1 sibling, 0 replies; 65+ messages in thread From: David Kastrup @ 2014-01-23 8:44 UTC (permalink / raw) To: emacs-devel "Stephen J. Turnbull" <stephen@xemacs.org> writes: > Not as you put it. However, David made a claim that highly factored > design could make development slower, and I wanted to put that claim > to rest I think the usual way to get rid of strawmen is to burn them. What I was talking about is that basically factoring the whole look-and-feel into a unified display engine in XEmacs might have sped up its initial spread across platforms but has had drawbacks in its long-term popularity. With one result being that it has not rallied enough interest behind it to cover all basic desktop environments well in _spite_ of the porting possibly being easier. It may well be easier to provide the display engine support for "Intellisense" on four different major platforms on XEmacs than on Emacs. > because it's *easy* to factor intellisense given Emacs's current > architecture, and I want to argue that people shouldn't argue about > how hard it is to do comprehensively. They should just jump in and do > the language and features *they* need and let others do what they want > to do. (Which I believe is your point, too!) Emacs 21 started with a number of features only being available under X11. That's a viable starting point, and with its current developers I consider it likely that the support for an interesting feature would not remain stuck in that state for as long the overall graphic display support did in the past. At any rate, I doubt that the main stumbling block is the display support. > > which is whether introducing intellisense for select languages is > > or isn't practically possible in Emacs development. I lost context here, but in typical programming styles, R2L is mostly relevant for comments. -- David Kastrup ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-23 8:13 ` Stephen J. Turnbull 2014-01-23 8:44 ` David Kastrup @ 2014-01-23 16:19 ` Eli Zaretskii 2014-01-24 2:57 ` Stephen J. Turnbull 1 sibling, 1 reply; 65+ messages in thread From: Eli Zaretskii @ 2014-01-23 16:19 UTC (permalink / raw) To: Stephen J. Turnbull; +Cc: emacs-devel > From: "Stephen J. Turnbull" <stephen@xemacs.org> > Cc: emacs-devel@gnu.org > Date: Thu, 23 Jan 2014 17:13:50 +0900 > > So the core is about 13KLOC (redisplay.c, redisplay.h, and > redisplay-output.c). By contrast, if you take out composite.c and > bidi.c (features XEmacs doesn't have), xdisp.c, dispnew.c, and > dispextern.h are about 40KLOC, 3X as much. Not sure it's worth to continue this line counting, but just for the record: AFAIU, you should add more XEmacs files to the "core", because xdisp.c covers some areas which in XEmacs are on separate files. For example, display of the tool bar, echo-area messages, frame titles, horizontal scrolling, glyphs, and mouse highlight are all implemented on xdisp.c. Also, about 1500 lines in xdisp.c are due to bidi support, so they should be subtracted from the Emacs numbers. I actually believe that the only meaningful comparison is if we add everything that is somehow related to display, because different architectures and modularization, as well as non-overlapping features, make it very hard to compare some arbitrary parts of the display engine. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-23 16:19 ` Eli Zaretskii @ 2014-01-24 2:57 ` Stephen J. Turnbull 2014-01-24 7:43 ` Eli Zaretskii 0 siblings, 1 reply; 65+ messages in thread From: Stephen J. Turnbull @ 2014-01-24 2:57 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel Eli Zaretskii writes: > > From: "Stephen J. Turnbull" <stephen@xemacs.org> > > Cc: emacs-devel@gnu.org > > Date: Thu, 23 Jan 2014 17:13:50 +0900 > > > > So the core is about 13KLOC (redisplay.c, redisplay.h, and > > redisplay-output.c). By contrast, if you take out composite.c and > > bidi.c (features XEmacs doesn't have), xdisp.c, dispnew.c, and > > dispextern.h are about 40KLOC, 3X as much. > > Not sure it's worth to continue this line counting, but just for the > record: AFAIU, you should add more XEmacs files to the "core", because > xdisp.c covers some areas which in XEmacs are on separate files. No, that's backwards to my point. I don't care if XEmacs has less code to support redisplay than Emacs does (modulo the "less functionality" aspect, I'd be disappointed if the comparison isn't approximately proportional to functionality). My point is precisely that Emacs's "core" is much bigger than XEmacs's because it includes additional functionality. Of course in C (and most languages) division into files is rather arbitrary. Perhaps the size of xdisp.c *doesn't* reflect substantially greater coupling among the functions it defines. But division into more files does help the developer to *reduce* coupling (by use of "static" to remind her that this variable shouldn't be used outside of this file, for example). And reduced coupling often leads to easier porting. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-24 2:57 ` Stephen J. Turnbull @ 2014-01-24 7:43 ` Eli Zaretskii 0 siblings, 0 replies; 65+ messages in thread From: Eli Zaretskii @ 2014-01-24 7:43 UTC (permalink / raw) To: Stephen J. Turnbull; +Cc: emacs-devel > From: "Stephen J. Turnbull" <stephen@xemacs.org> > Date: Fri, 24 Jan 2014 11:57:42 +0900 > Cc: emacs-devel@gnu.org > > > Not sure it's worth to continue this line counting, but just for the > > record: AFAIU, you should add more XEmacs files to the "core", because > > xdisp.c covers some areas which in XEmacs are on separate files. > > No, that's backwards to my point. I don't care if XEmacs has less > code to support redisplay than Emacs does (modulo the "less > functionality" aspect, I'd be disappointed if the comparison isn't > approximately proportional to functionality). My point is precisely > that Emacs's "core" is much bigger than XEmacs's because it includes > additional functionality. Perhaps you could explain why this matters in the context of this discussion. As long as the file is clearly separated into sections that deal with different groups of functionality, the size of the file should matter only to the compiler, no? > division into more files does help the developer to *reduce* coupling > (by use of "static" to remind her that this variable shouldn't be used > outside of this file, for example). It's actually the other way around: the larger the file, the more functions can be static, even if they are interfaces between conceptually separate modules in the program's architectural design, and will have to have external linkage if a large file is subdivided into several smaller ones. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 4:36 ` Óscar Fuentes 2014-01-22 6:31 ` David Kastrup @ 2014-01-22 8:49 ` Rüdiger Sonderfeld 2014-01-22 11:53 ` Óscar Fuentes 2014-01-22 15:59 ` Eli Zaretskii 2014-01-22 16:41 ` David Engster 3 siblings, 1 reply; 65+ messages in thread From: Rüdiger Sonderfeld @ 2014-01-22 8:49 UTC (permalink / raw) To: emacs-devel; +Cc: Óscar Fuentes On Wednesday 22 January 2014 05:36:40 Óscar Fuentes wrote: > > I'm quite sure rewriting all that is more than would be needed for > > intellisense support. > > Writing a C++ parser and semantic analyzer from scratch requires several > man-years of work for world-class compiler writers. And with every new > C++ standard that comes out the effort increases significantly. Why would we have to write a C++ parser and semantic analyzer? There is one in CEDET, there is one in GCC, there is one in libclang, and there is one in the KDevelop libraries. Regards, Rüdiger ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 8:49 ` Rüdiger Sonderfeld @ 2014-01-22 11:53 ` Óscar Fuentes 2014-01-22 15:56 ` Eli Zaretskii 2014-01-22 16:52 ` David Engster 0 siblings, 2 replies; 65+ messages in thread From: Óscar Fuentes @ 2014-01-22 11:53 UTC (permalink / raw) To: emacs-devel Rüdiger Sonderfeld <ruediger@c-plusplus.de> writes: > Why would we have to write a C++ parser and semantic analyzer? If I understood Eli correctly he is advocating the independence of Emacs for that purposes. > There is one in CEDET, there is one in GCC, there is one in libclang, > and there is one in the KDevelop libraries. CEDET is in line with Eli's views, while the other options we should avoid (*) (Except, perhaps, GCC.) OTOH CEDET's internal capabilities for C++ are very limited last time I checked. It is more about "C with classes" with some crude hacks for templates. It does not real C++ semantic analysis. * Again, unless I misunderstood him. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 11:53 ` Óscar Fuentes @ 2014-01-22 15:56 ` Eli Zaretskii 2014-01-22 18:46 ` Stefan Monnier 2014-01-22 16:52 ` David Engster 1 sibling, 1 reply; 65+ messages in thread From: Eli Zaretskii @ 2014-01-22 15:56 UTC (permalink / raw) To: Óscar Fuentes; +Cc: emacs-devel > From: Óscar Fuentes <ofv@wanadoo.es> > Date: Wed, 22 Jan 2014 12:53:08 +0100 > > Rüdiger Sonderfeld <ruediger@c-plusplus.de> writes: > > > Why would we have to write a C++ parser and semantic analyzer? > > If I understood Eli correctly he is advocating the independence of Emacs > for that purposes. Indeed; but so does Rüdiger. > > There is one in CEDET, there is one in GCC, there is one in libclang, > > and there is one in the KDevelop libraries. > > CEDET is in line with Eli's views, while the other options we should > avoid (*) (Except, perhaps, GCC.) > > OTOH CEDET's internal capabilities for C++ are very limited last time I > checked. It is more about "C with classes" with some crude hacks for > templates. It does not real C++ semantic analysis. > > * Again, unless I misunderstood him. You didn't. My point is that we already have a lot of infrastructure in CEDET that can (and IMO should) be leveraged towards these goals. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 15:56 ` Eli Zaretskii @ 2014-01-22 18:46 ` Stefan Monnier 2014-01-22 19:10 ` David Engster 0 siblings, 1 reply; 65+ messages in thread From: Stefan Monnier @ 2014-01-22 18:46 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Óscar Fuentes, emacs-devel >> > Why would we have to write a C++ parser and semantic analyzer? >> If I understood Eli correctly he is advocating the independence of Emacs >> for that purposes. FWIW, for the languages I care about in my work (things like SML, Haskell, OCaml, Coq, Agda, Twelf), parsing the syntax is not sufficient to provide good support: we also want type information; and inferring the type is very much non-trivial (it's a significant part of the whole implementation in some cases). So it is important in the longer run to provide a good way to use external tools to get that info, since re-implementing it in Elisp is illusory. Stefan ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 18:46 ` Stefan Monnier @ 2014-01-22 19:10 ` David Engster 0 siblings, 0 replies; 65+ messages in thread From: David Engster @ 2014-01-22 19:10 UTC (permalink / raw) To: Stefan Monnier; +Cc: Óscar Fuentes, Eli Zaretskii, emacs-devel Stefan Monnier writes: >>> > Why would we have to write a C++ parser and semantic analyzer? >>> If I understood Eli correctly he is advocating the independence of Emacs >>> for that purposes. > > FWIW, for the languages I care about in my work (things like SML, > Haskell, OCaml, Coq, Agda, Twelf), parsing the syntax is not sufficient > to provide good support: we also want type information; and inferring > the type is very much non-trivial (it's a significant part of the whole > implementation in some cases). Yes. Another example are highly dynamic languages like Javascript. > So it is important in the longer run to provide a good way to use > external tools to get that info, since re-implementing it in Elisp > is illusory. In CEDET, the idea is to convert the output of external tools to the tag structures Semantic uses. This is usually not difficult to do, and there are many packages like this already, like for cscope, ectags, clang, and even Firefox through MozRepl (for completing Javascript). -David ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 11:53 ` Óscar Fuentes 2014-01-22 15:56 ` Eli Zaretskii @ 2014-01-22 16:52 ` David Engster 1 sibling, 0 replies; 65+ messages in thread From: David Engster @ 2014-01-22 16:52 UTC (permalink / raw) To: Óscar Fuentes; +Cc: emacs-devel Óscar Fuentes writes: > OTOH CEDET's internal capabilities for C++ are very limited last time I > checked. It is more about "C with classes" with some crude hacks for > templates. It does not real C++ semantic analysis. The template support is very limited, yes. I have a big patch in line which will improve that. Otherwise, I'm not sure what you mean with "real semantic analysis". Our parser is a tagging parser, meaning it does not parse every line of code, but of course it is aware of much more than, say, ctags. -David ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 4:36 ` Óscar Fuentes 2014-01-22 6:31 ` David Kastrup 2014-01-22 8:49 ` Rüdiger Sonderfeld @ 2014-01-22 15:59 ` Eli Zaretskii 2014-01-22 16:41 ` David Engster 3 siblings, 0 replies; 65+ messages in thread From: Eli Zaretskii @ 2014-01-22 15:59 UTC (permalink / raw) To: Óscar Fuentes; +Cc: emacs-devel > From: Óscar Fuentes <ofv@wanadoo.es> > Date: Wed, 22 Jan 2014 05:36:40 +0100 > > Eli Zaretskii <address@hidden> writes: > > > The Emacs display engine is many tens of thousands of C code plus many > > thousands of Lisp. > > AFAIU this is largely a consequence of the development baggage of Emacs. > That is, the complexity of the current code base is far greater than the > complexity of its purpose. For this argument to be taken seriously, you'd have to point to concrete chunks of code or design traits that constitute this "baggage", and perhaps propose an alternative design that would be free of that. (I happen to disagree with your assessment, if it isn't clear.) In any case, this has nothing to do with the issue at hand. Even if the entire effort invested in the rewrite of the display engine was a waste, the point is that it could be, and have been, done. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 4:36 ` Óscar Fuentes ` (2 preceding siblings ...) 2014-01-22 15:59 ` Eli Zaretskii @ 2014-01-22 16:41 ` David Engster 2014-01-22 17:16 ` Dmitry Gutov 2014-01-22 18:12 ` Óscar Fuentes 3 siblings, 2 replies; 65+ messages in thread From: David Engster @ 2014-01-22 16:41 UTC (permalink / raw) To: Óscar Fuentes; +Cc: emacs-devel Óscar Fuentes writes: > Eli Zaretskii <eliz@gnu.org> writes: >> I'm quite sure rewriting all that is more than would be needed for >> intellisense support. > > Writing a C++ parser and semantic analyzer from scratch requires several > man-years of work for world-class compiler writers. You don't need a full parser. For providing completions, it is sufficient to parse only a small subset of the code (declarations, most importantly). -David ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 16:41 ` David Engster @ 2014-01-22 17:16 ` Dmitry Gutov 2014-01-22 17:36 ` David Engster 2014-01-22 18:12 ` Óscar Fuentes 1 sibling, 1 reply; 65+ messages in thread From: Dmitry Gutov @ 2014-01-22 17:16 UTC (permalink / raw) To: Óscar Fuentes; +Cc: emacs-devel David Engster <deng@randomsample.de> writes: >> Writing a C++ parser and semantic analyzer from scratch requires several >> man-years of work for world-class compiler writers. > > You don't need a full parser. For providing completions, it is > sufficient to parse only a small subset of the code (declarations, most > importantly). You may not have to parse every line of code, but you should be able to, no? Otherwise, how would you know which type the variable at point has, or the return type of the method it calls, etc? I believe you should have to parse at least the body of the current function, from the beginning to the current line (maybe farther). ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 17:16 ` Dmitry Gutov @ 2014-01-22 17:36 ` David Engster 0 siblings, 0 replies; 65+ messages in thread From: David Engster @ 2014-01-22 17:36 UTC (permalink / raw) To: Dmitry Gutov; +Cc: Óscar Fuentes, emacs-devel Dmitry Gutov writes: > David Engster <deng@randomsample.de> writes: > >>> Writing a C++ parser and semantic analyzer from scratch requires several >>> man-years of work for world-class compiler writers. >> >> You don't need a full parser. For providing completions, it is >> sufficient to parse only a small subset of the code (declarations, most >> importantly). > > You may not have to parse every line of code, but you should be able to, no? > > Otherwise, how would you know which type the variable at point has, By scanning the function's body for local variable declarations, and simply ignore everything else. The C++ grammar simply has a bunch of pretty generic expression rules without any actions, so we can skip over the uninteresting stuff. So yes, I wasn't specific enough: technically, we do parse function bodies. But practically, we ignore most of it. Of course there's a drawback that we don't fully parse the body - we might get the local context wrong, for instance. But at least from my experience it's working very well. > or the return type of the method it calls By parsing the declaration of the method. -David ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 16:41 ` David Engster 2014-01-22 17:16 ` Dmitry Gutov @ 2014-01-22 18:12 ` Óscar Fuentes 2014-01-22 18:34 ` David Engster 1 sibling, 1 reply; 65+ messages in thread From: Óscar Fuentes @ 2014-01-22 18:12 UTC (permalink / raw) To: emacs-devel David Engster <deng@randomsample.de> writes: >> Writing a C++ parser and semantic analyzer from scratch requires several >> man-years of work for world-class compiler writers. > > You don't need a full parser. For providing completions, it is > sufficient to parse only a small subset of the code (declarations, most > importantly). Even for providing completions you need semantic analysis. The parser turns to be insufficient on very simple cases: auto foo = bar(); foo. ???? The need for semantic analysis is unavoidable even on the "old" C++ 98: template <typename T> struct Foo { typedef T Type; }; struct Bar { int something() { return 42; } }; void some_func() { typename Foo<Bar>::Type t; t. ??? } ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 18:12 ` Óscar Fuentes @ 2014-01-22 18:34 ` David Engster 0 siblings, 0 replies; 65+ messages in thread From: David Engster @ 2014-01-22 18:34 UTC (permalink / raw) To: Óscar Fuentes; +Cc: emacs-devel Óscar Fuentes writes: > David Engster <deng@randomsample.de> writes: > >>> Writing a C++ parser and semantic analyzer from scratch requires several >>> man-years of work for world-class compiler writers. >> >> You don't need a full parser. For providing completions, it is >> sufficient to parse only a small subset of the code (declarations, most >> importantly). > > Even for providing completions you need semantic analysis. Of course you need that. Where did I say otherwise? I'm saying that when you get parsing of declarations right, and have some good heuristics to parse the local context, then this will suffice for most cases. Parsing code like this also has some advantages, mostly that it is more fault-tolerant. This is actually very important, since while you're coding, your code will often be syntactically wrong. > The parser turns to be insufficient on very simple cases: > > auto foo = bar(); > foo. ???? Well, type inference is hard. Currently, C++11 isn't on my agenda. But I'm confident simple cases like the above will be manageable. > The need for semantic analysis is unavoidable even on the "old" C++ 98: > > template <typename T> struct Foo { > typedef T Type; > }; > > struct Bar { > int something() { > return 42; > } > }; > > void some_func() { > typename Foo<Bar>::Type t; > t. ??? > } This will work after I've applied my template patch. -David ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-21 19:29 ` Eli Zaretskii 2014-01-21 19:58 ` Tom @ 2014-01-21 20:03 ` Andreas Röhler 2014-01-22 3:54 ` Eli Zaretskii 2014-01-22 17:29 ` Phillip Lord 2 siblings, 1 reply; 65+ messages in thread From: Andreas Röhler @ 2014-01-21 20:03 UTC (permalink / raw) To: emacs-devel Am 21.01.2014 20:29, schrieb Eli Zaretskii: >> From: Tom <adatgyujto@gmail.com> >> Date: Tue, 21 Jan 2014 18:59:10 +0000 (UTC) >> >> Creating mature and extensive intellisense features is hard work, >> it requires lots of man hours and while it's technically possible to >> implement it in emacs it is unlikely to happen, because emacs lacks >> the developing resources. > > According to this logic something like the rewrite of the display > engine that happened between Emacs 20 and Emacs 21, or bidirectional > editing support for Emacs 24 would never have happened. But it did. > Each one of these took many man-months of work. > > Look at the amount of changes that get committed every day to the > Emacs repository, and try to estimate the effort that goes into that. > Sometimes I wish I had such resources at my disposal on my daytime > job. > > I think the shortage is not in development resources, but in motivated > individuals who'd sit down and do the job, and lobby others to come on > board and help. Volunteers are welcome. > You are missing the point. Bidirection is at the core of any editor - thanks a lot BTW. Intellisense features must come from accessing the programming languages itself. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-21 20:03 ` Andreas Röhler @ 2014-01-22 3:54 ` Eli Zaretskii 2014-01-22 6:28 ` Stephen J. Turnbull 0 siblings, 1 reply; 65+ messages in thread From: Eli Zaretskii @ 2014-01-22 3:54 UTC (permalink / raw) To: Andreas Röhler; +Cc: emacs-devel > Date: Tue, 21 Jan 2014 21:03:29 +0100 > From: Andreas Röhler <andreas.roehler@online.de> > > Bidirection is at the core of any editor - thanks a lot BTW. > Intellisense features must come from accessing the programming languages itself. Both are extremely important for a modern programmer's editor. So I don't see the difference, really. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 3:54 ` Eli Zaretskii @ 2014-01-22 6:28 ` Stephen J. Turnbull 2014-01-22 16:03 ` Eli Zaretskii 0 siblings, 1 reply; 65+ messages in thread From: Stephen J. Turnbull @ 2014-01-22 6:28 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Andreas Röhler, emacs-devel Eli Zaretskii writes: > > Date: Tue, 21 Jan 2014 21:03:29 +0100 > > From: Andreas Röhler <andreas.roehler@online.de> > > > > Bidirection is at the core of any editor - thanks a lot BTW. > > Intellisense features must come from accessing the programming > > languages itself. > > Both are extremely important for a modern programmer's editor. So I > don't see the difference, really. There's a big difference. Specifically, intellisense in the abstract is basically completion, the change in UI is a SMOP, and people have shown a lot of interest in the UI. Something will happen, although I'm not sure how close it will be to Visual Studio. What's left to compare is necessary skills. Adding bidirection requires intimate knowledge of both UAX#9 and the Emacs display engine, and greatly benefits from a native knowledge of what "properly formatted Hebrew" (or Arabic) looks like. Not many folks with those qualifications, or who want to acquire them. It also may as well be done all-at-once because UAX#9 exists -- we don't need to fool around and figure out what is a good algorithm. We already have a good one, the only question is whether our implementation is correct. So it's a big job few can tackle. Adding a new language to intellisense, OTOH, is something anybody who uses the language and knows enough Elisp to write defuns in their .emacs can help with. Nor does it need to be done all-at-once, as long as the basic interface makes it easy to say "shut up and let me type" case by case (this is what annoys the hell out of me about intellisense in Japan input methods -- they're pretty bad about guessing what I'm trying to say, and they don't get out of the way smoothly -- it's like when you meet somebody in a narrow passage and you both move to the east, then to the west, then ...). Adding a new algorithm (eg, based on a full-blown C++ parser) is harder, but unnecessary to make progress. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 6:28 ` Stephen J. Turnbull @ 2014-01-22 16:03 ` Eli Zaretskii 2014-01-23 7:54 ` Stephen J. Turnbull 0 siblings, 1 reply; 65+ messages in thread From: Eli Zaretskii @ 2014-01-22 16:03 UTC (permalink / raw) To: Stephen J. Turnbull; +Cc: andreas.roehler, emacs-devel > From: "Stephen J. Turnbull" <stephen@xemacs.org> > Cc: Andreas Röhler <andreas.roehler@online.de>, > emacs-devel@gnu.org > Date: Wed, 22 Jan 2014 15:28:10 +0900 > > > > Bidirection is at the core of any editor - thanks a lot BTW. > > > Intellisense features must come from accessing the programming > > > languages itself. > > > > Both are extremely important for a modern programmer's editor. So I > > don't see the difference, really. > > There's a big difference. Specifically, intellisense in the abstract > is basically completion, the change in UI is a SMOP, and people have > shown a lot of interest in the UI. Something will happen, although > I'm not sure how close it will be to Visual Studio. > > What's left to compare is necessary skills. Adding bidirection > requires intimate knowledge of both UAX#9 and the Emacs display > engine, and greatly benefits from a native knowledge of what "properly > formatted Hebrew" (or Arabic) looks like. Not many folks with those > qualifications, or who want to acquire them. With around 550 million people speaking R2L languages world wide, I think "not many" is somewhat accurate. According to this: http://java.dzone.com/articles/how-many-java-developers-are there are between 6.8 and 10.7 million Java developers in the world, out of 5 billion people living in developed regions, which means tens of thousands of Java developers in R2L cultures. All of them are potential candidates to want this in Emacs (and that's for Java alone). I won't be surprised if the numbers for Python or Ruby or C++ are higher. > It also may as well be done all-at-once because UAX#9 exists -- we > don't need to fool around and figure out what is a good algorithm. > We already have a good one, the only question is whether our > implementation is correct. Not true. All the implementations of the UBA I know of are not good for Emacs, because they are batch implementations: they reorder chunks of text in one go. By contrast, the Emacs display engine examines buffer text one character at a time, and so needed a _sequential_ implementation of the UBA. Moreover, the UBA itself is described in the Unicode Standard assuming batch-style reordering, evidently because it was written by people who either don't understand the difference between requirements and implementation, or didn't bother to formulate requirements, assuming that only batch-style implementations will be needed anyway. So the job actually constituted mentally reverse-engineering the UBA to formulate the missing requirements, then implementing that. And, to add insult to injury, Unicode 6.3 made 2 significant changes in the UBA, which means Someone™ will now have to go back and extend all that to support the new features. Not really a once-and-for-all job, I'd say. > So it's a big job few can tackle. Not sure how you took this leap of logic: if the algorithm is clear, why shouldn't it be possible for more than "a few" to come up with a suitable implementation? And in fact, at the time the bidi support in Emacs was actively discussed (I'm talking around 2001), there were at least 3 candidate implementations proposed, and 2 of them were actually prototyped in Emacs. More than enough to start with. And still, nothing happened for 10 more years. So clearly, other factors are at work that determine if and when some major feature is implemented in Emacs. > Adding a new language to intellisense, OTOH, is something anybody who > uses the language and knows enough Elisp to write defuns in their > .emacs can help with. Nor does it need to be done all-at-once, as > long as the basic interface makes it easy to say "shut up and let me > type" case by case I think you are arguing here that adding Intellisense is a smaller job than the display rewrite or bidi -- in which case I'm in violent agreement. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 16:03 ` Eli Zaretskii @ 2014-01-23 7:54 ` Stephen J. Turnbull 0 siblings, 0 replies; 65+ messages in thread From: Stephen J. Turnbull @ 2014-01-23 7:54 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel Eli Zaretskii writes: > With around 550 million people speaking R2L languages world wide, I > think "not many" is somewhat accurate. According to this: > > http://java.dzone.com/articles/how-many-java-developers-are > > there are between 6.8 and 10.7 million Java developers in the world, > out of 5 billion people living in developed regions, which means tens > of thousands of Java developers in R2L cultures. All of them are > potential candidates to want this in Emacs (and that's for Java > alone). I won't be surprised if the numbers for Python or Ruby or C++ > are higher. Your math is correct, your statistics suck. Given that developer residence is *highly* biased toward living in the US, you can't just multiply fraction of Java developers by fraction of R2L region residents (and what does Java skill have to do with developing for Emacs, may I ask?) > > It also may as well be done all-at-once because UAX#9 exists -- we > > don't need to fool around and figure out what is a good algorithm. > > We already have a good one, the only question is whether our > > implementation is correct. > > Not true. All the implementations of the UBA I know of are not good > for Emacs, because they are batch implementations: True, but I didn't say there was a good *implementation*, I said there was a good *algorithm*, which you yourself chose to implement. Subject to this caveat: > So the job actually constituted mentally reverse-engineering the UBA > to formulate the missing requirements, then implementing that. Sure, it ain't easy, but that was *my* point, no? That's *why* you need not only the *desire* to have it in Emacs and the *knowledge* of bidi to recognize a bug when you see it, but you *also* need a fairly high level of understanding of Emacs redisplay. Nor was there really a choice of algorithm was there? You still promise to get the same results, right? And people would complain if you didn't, right? > And, to add insult to injury, Unicode 6.3 made 2 significant changes > in the UBA, which means Someone™ will now have to go back and extend > all that to support the new features. Not really a once-and-for-all > job, I'd say. I didn't say "once-and-for-all", and there's no way I would: I'm a guy who can cite chapter and verse (ok, with the help of the IETF website) of the differences among the past versions and future candidates for STD 11 (ie, RFCs 632, 733, 822, 2822, and 5322) -- I know there's no "once-and-for-all" in computing. BTW, they slipped that one past me. My condolences. But it certainly shows you're a promise-keeper that you even think about trying to keep up with that moving target. > > So it's a big job few can tackle. > > Not sure how you took this leap of logic: if the algorithm is clear, > why shouldn't it be possible for more than "a few" to come up with a > suitable implementation? How many people are there with the energy, knowledge, and stubbornness to reengineer a batch algorithm for use in Emacs redisplay? I stand by my statement. This was not a job to be dismissed with "the rest is a SMOP. Why do I (who only dream of being able to do it) have to tell you? > And still, nothing happened for 10 more years. So clearly, other > factors are at work that determine if and when some major feature is > implemented in Emacs. Not my point at all. > > Adding a new language to intellisense, OTOH, is something anybody who > > uses the language and knows enough Elisp to write defuns in their > > .emacs can help with. Nor does it need to be done all-at-once, as > > long as the basic interface makes it easy to say "shut up and let me > > type" case by case > > I think you are arguing here that adding Intellisense is a smaller job > than the display rewrite or bidi -- in which case I'm in violent > agreement. With the emphasis on "violent". Love you too, Eli! :-) Happy (and productive!) New Year to you! And don't spend it all on UBA updates! Steve ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-21 19:29 ` Eli Zaretskii 2014-01-21 19:58 ` Tom 2014-01-21 20:03 ` Andreas Röhler @ 2014-01-22 17:29 ` Phillip Lord 2014-01-22 18:49 ` Jorgen Schaefer 2014-01-23 2:22 ` Eric M. Ludlam 2 siblings, 2 replies; 65+ messages in thread From: Phillip Lord @ 2014-01-22 17:29 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Tom, emacs-devel Eli Zaretskii <eliz@gnu.org> writes: >> A better way is to build on the hard work of other and interface >> emacs with an external tool. > > Personally, I think implementing such features via external programs > is a terrible design. It will never be smooth and responsive enough, > and on top of that you'd need to track development of those other > tools. And what if they become abandoned some day? I think that it depends on the language. Introspecting over, for example, Java would require an awful of elisp, which would be difficult to write. Getting Java to do this work is quite a lot less effort. Hence, the JDEEs use of Java for this (via bsh). Likewise, Clojure and Scala both of which use their own language to do much of the work. Or for that matter, common lisp with slime/swank. Or even, for that matter, English with aspell. I didn't have a problem with responsiveness with any of these. Phil ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 17:29 ` Phillip Lord @ 2014-01-22 18:49 ` Jorgen Schaefer 2014-01-23 9:00 ` Andreas Röhler 2014-01-23 13:20 ` Phillip Lord 2014-01-23 2:22 ` Eric M. Ludlam 1 sibling, 2 replies; 65+ messages in thread From: Jorgen Schaefer @ 2014-01-22 18:49 UTC (permalink / raw) To: emacs-devel On Wed, 22 Jan 2014 17:29:15 +0000 phillip.lord@newcastle.ac.uk (Phillip Lord) wrote: > Eli Zaretskii <eliz@gnu.org> writes: > >> A better way is to build on the hard work of other and interface > >> emacs with an external tool. > > > > Personally, I think implementing such features via external programs > > is a terrible design. It will never be smooth and responsive > > enough, and on top of that you'd need to track development of those > > other tools. And what if they become abandoned some day? > > I think that it depends on the language. Introspecting over, for > example, Java would require an awful of elisp, which would be > difficult to write. Getting Java to do this work is quite a lot less > effort. Hence, the JDEEs use of Java for this (via bsh). Likewise, > Clojure and Scala both of which use their own language to do much of > the work. Or for that matter, common lisp with slime/swank. Or even, > for that matter, English with aspell. I didn't have a problem with > responsiveness with any of these. Yeah, roughly that. "External program" instead of "integrated" means very little these days. I wrote one of the various Emacs modes that provide semantic completion for Python, interfacing with two different Python libraries which do the actual semantic analysis. In this case, Emacs communicates with the external program via a specified protocol, which, from the Emacs side, looks exactly like calling some kind of Emacs Lisp function. (Abstraction is great.) The only problem I have is that keeping state shared between the processes is difficult. Right now, what I'm doing is to re-send the current buffer to the other process, including the position of point, for every completion request. This is highly inefficient, and makes it difficult to create a tighter coupling for better completion or analysis from the Emacs side. To improve on that, there would need to be a way of sharing the current contents of a buffer with a subprocess without writing it to a file. But this is an optimization problem, not a capability problem. The current approach I use is "fast enough", so fast actually that I haven't even implemented a speed-up idea of using temporary files instead of sending the buffer contents as encoded strings to the other process. Considering there already are so many different modes that provide semantic completion for Emacs, the main obstacle for IntelliSense (as far as I understand it) *on the Emacs side* is actually not that big. It's mainly a common interface for such external programs so that we can add more languages more easily. The current effort of unifying the completion interface as well as supporting company mode as a front-end is going a great deal forward in that. The biggest problems are outside of Emacs. Good libraries that provide intelligent completion and code introspection are rare. I know of three for Python, one of which is not maintained anymore, one was mostly-dead for a few years, and all of which have different deficiencies. They also have trouble keeping up with the development of the language. I expect similar problems for other languages. Reimplementing these libraries in Emacs Lisp will just cause more problems keeping them up-to-date. Though if someone wants to do that, do not let that stop you. It's most certainly not "impossible". Regards, Jorgen ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 18:49 ` Jorgen Schaefer @ 2014-01-23 9:00 ` Andreas Röhler 2014-01-23 19:34 ` Jorgen Schaefer 2014-01-23 13:20 ` Phillip Lord 1 sibling, 1 reply; 65+ messages in thread From: Andreas Röhler @ 2014-01-23 9:00 UTC (permalink / raw) To: emacs-devel; +Cc: Stephen J. Turnbull, Eli Zaretskii, Jorgen Schaefer Am 22.01.2014 19:49, schrieb Jorgen Schaefer: > On Wed, 22 Jan 2014 17:29:15 +0000 > phillip.lord@newcastle.ac.uk (Phillip Lord) wrote: > >> Eli Zaretskii <eliz@gnu.org> writes: >>>> A better way is to build on the hard work of other and interface >>>> emacs with an external tool. >>> >>> Personally, I think implementing such features via external programs >>> is a terrible design. It will never be smooth and responsive >>> enough, and on top of that you'd need to track development of those >>> other tools. And what if they become abandoned some day? >> >> I think that it depends on the language. Introspecting over, for >> example, Java would require an awful of elisp, which would be >> difficult to write. Getting Java to do this work is quite a lot less >> effort. Hence, the JDEEs use of Java for this (via bsh). Likewise, >> Clojure and Scala both of which use their own language to do much of >> the work. Or for that matter, common lisp with slime/swank. Or even, >> for that matter, English with aspell. I didn't have a problem with >> responsiveness with any of these. > [ ... ] > > The biggest problems are outside of Emacs. Good libraries that provide > intelligent completion and code introspection are rare. I know of three > for Python, one of which is not maintained anymore, one was mostly-dead > for a few years, and all of which have different deficiencies. They > also have trouble keeping up with the development of the language. I > expect similar problems for other languages. Reimplementing these > libraries in Emacs Lisp will just cause more problems keeping them > up-to-date. > Good point(s). An aspect not seeing mentioned so far: Python for example will cancel all service when encountering a syntax-error. A case where a decent support from Emacs Lips side will be helpful. Seems wise to implement some basic stuff in Emacs Lisp, while accessing the languages resources if available. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-23 9:00 ` Andreas Röhler @ 2014-01-23 19:34 ` Jorgen Schaefer 0 siblings, 0 replies; 65+ messages in thread From: Jorgen Schaefer @ 2014-01-23 19:34 UTC (permalink / raw) To: Andreas Röhler; +Cc: emacs-devel On Thu, 23 Jan 2014 10:00:53 +0100 Andreas Röhler <andreas.roehler@online.de> wrote: > An aspect not seeing mentioned so far: Python for example will cancel > all service when encountering a syntax-error. A case where a decent > support from Emacs Lips side will be helpful. Seems wise to implement > some basic stuff in Emacs Lisp, while accessing the languages > resources if available. I'm not sure I understand what you mean. Both Rope as well as Jedi (the two Python libraries for completion and code introspection I mentioned) handle syntactically incorrect input quite fine, without any special treatment from the Emacs side. What do you mean with "will cancel all service"? Regards, Jorgen ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 18:49 ` Jorgen Schaefer 2014-01-23 9:00 ` Andreas Röhler @ 2014-01-23 13:20 ` Phillip Lord 2014-01-23 15:12 ` Stefan Monnier 1 sibling, 1 reply; 65+ messages in thread From: Phillip Lord @ 2014-01-23 13:20 UTC (permalink / raw) To: Jorgen Schaefer; +Cc: emacs-devel Jorgen Schaefer <forcer@forcix.cx> writes: >> I think that it depends on the language. Introspecting over, for >> example, Java would require an awful of elisp, which would be >> difficult to write. Getting Java to do this work is quite a lot less >> effort. Hence, the JDEEs use of Java for this (via bsh). Likewise, >> Clojure and Scala both of which use their own language to do much of >> the work. Or for that matter, common lisp with slime/swank. Or even, >> for that matter, English with aspell. I didn't have a problem with >> responsiveness with any of these. > > "External program" instead of "integrated" means very little these > days. I wrote one of the various Emacs modes that provide semantic > completion for Python, interfacing with two different Python libraries > which do the actual semantic analysis. In this case, Emacs communicates > with the external program via a specified protocol, which, from the > Emacs side, looks exactly like calling some kind of Emacs Lisp > function. (Abstraction is great.) This also has the considerable advantage that it makes it possible to physically separate the two; consider running ESS on your desktop and the R process somewhere else. > The only problem I have is that keeping state shared between the > processes is difficult. Right now, what I'm doing is to re-send the > current buffer to the other process, including the position of point, > for every completion request. This is highly inefficient, and makes it > difficult to create a tighter coupling for better completion or > analysis from the Emacs side. To improve on that, there would need to > be a way of sharing the current contents of a buffer with a subprocess > without writing it to a file. JDEE for java had that problem. Some operations required that files be saved first or, even worse, compiled first. Languages like clojure tend not to cause this problem, since their unit of compilation is smaller (give or take, it's a function), so you just send a string across the socket. > It's mainly a common interface for such external programs so that we > can add more languages more easily. The current effort of unifying the > completion interface as well as supporting company mode as a front-end > is going a great deal forward in that. I'm not convinced that a single interface would work; again, using clojure as example, this has moved away from a single interface in Emacs (i.e. slime/swank) and toward a single interface for Clojure (so that the Clojure side offers a single server, for different editors). Having said that, there are definately utility functions that could help. One problem with this strategy wrt Emacs is that it's single threaded, but utilities for dealing with this such as generating callbacks would help. No doubt closures will help here. > The biggest problems are outside of Emacs. Good libraries that provide > intelligent completion and code introspection are rare. > I know of three for Python, one of which is not maintained anymore, > one was mostly-dead for a few years, and all of which have different > deficiencies. They also have trouble keeping up with the development > of the language. I expect similar problems for other languages. > Reimplementing these libraries in Emacs Lisp will just cause more > problems keeping them up-to-date. I'm sure this is true. I don't know of any for Java. Phil ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-23 13:20 ` Phillip Lord @ 2014-01-23 15:12 ` Stefan Monnier 2014-01-23 20:56 ` Jorgen Schaefer 0 siblings, 1 reply; 65+ messages in thread From: Stefan Monnier @ 2014-01-23 15:12 UTC (permalink / raw) To: Phillip Lord; +Cc: emacs-devel, Jorgen Schaefer >> It's mainly a common interface for such external programs so that we >> can add more languages more easily. The current effort of unifying the >> completion interface as well as supporting company mode as a front-end >> is going a great deal forward in that. > I'm not convinced that a single interface would work; again, using > clojure as example, this has moved away from a single interface in Emacs > (i.e. slime/swank) and toward a single interface for Clojure (so that > the Clojure side offers a single server, for different editors). He's not advocating a common interface for all languages at the level where Emacs interacts with the external process. He's only advocating a common interface at the Elisp level so that the major mode only needs to adapt this interface to the underlying external process's own interface (or to the Elisp code that does the parsing if it's implemented in Elisp). Stefan ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-23 15:12 ` Stefan Monnier @ 2014-01-23 20:56 ` Jorgen Schaefer 2014-01-23 22:13 ` Stefan Monnier ` (2 more replies) 0 siblings, 3 replies; 65+ messages in thread From: Jorgen Schaefer @ 2014-01-23 20:56 UTC (permalink / raw) To: emacs-devel; +Cc: phillip.lord, Stefan Monnier On Thu, 23 Jan 2014 10:12:44 -0500 Stefan Monnier <monnier@iro.umontreal.ca> wrote: > >> It's mainly a common interface for such external programs so that > >> we can add more languages more easily. The current effort of > >> unifying the completion interface as well as supporting company > >> mode as a front-end is going a great deal forward in that. > > I'm not convinced that a single interface would work; again, using > > clojure as example, this has moved away from a single interface in > > Emacs (i.e. slime/swank) and toward a single interface for Clojure > > (so that the Clojure side offers a single server, for different > > editors). > > He's not advocating a common interface for all languages at the level > where Emacs interacts with the external process. He's only advocating > a common interface at the Elisp level so that the major mode only > needs to adapt this interface to the underlying external process's own > interface (or to the Elisp code that does the parsing if it's > implemented in Elisp). This, exactly. Let me see if I can elaborate. There are currently four main RPC calls that I use Python for. They have more or less good support on the Emacs side. Eldoc ----- Eldoc is a great example. In its basic form, it's exactly what I want: Your major mode sets a variable - `eldoc-documentation-function' - to a function that simply returns the documentation to show. Simple programming interface to implement, and all modes using it provide a unified user interface. There are only two things this is lacking for me right now. First, it could be improved with more output options. For example, emacs-jedi.el provides popup-style display for signatures: http://farm3.staticflickr.com/2845/8793986161_e1c58607f0_o.png Allowing the user to customize eldoc to use one or the other, and then having that user's preference take effect in all programming modes, would be excellent. Second, and this is a recurring thing for Emacs APIs, it does not handle asynchronous calls too well. One of the nice things about using an external process to do the heavy munging of source code is that you can ignore Emacs single-threadedness and simply keep accepting user input until the response is there. I currently work around this by returning the old eldoc string and calling `eldoc-message' in the asynchronous callback, but I have no idea if eldoc actually expects this. In the case of auto-completion, this is a lot more complicated. Completion ----------- The main topic being argued here. I'm currently using auto-complete.el, but I hope to eventually use `completion-at-point-functions' once company-mode is integrated. I'm not sure it will have all the features I'd like, but those likely could be implemented. Important features I haven't seen for c-a-p-f yet: Provide an overlay of the most likely completion candidate while you type for quick completion with TAB; add annotations to completion candidates, for example to indicate symbol type; ability to provide documentation for a completion candidate so that can be shown while browsing candidates. Examples (using auto-complete and elpy): Default completion overlay: http://i.imgur.com/0Fml2dd.png Some annotations and documentation: http://i.imgur.com/Vs7WKRa.png More annotations (using emacs-jedi): http://farm9.staticflickr.com/8261/8804536872_8d266b88ed_o.png Oh, and support for getting completion candidates asynchronously. This is quite tricky, as the user might have moved point in the time the candidates were returned, and it's not always necessary to re-request the candidates then. auto-complete.el handles this "mostly ok" using an init function and caching the response, but has some hard to trace problems. Find Definition --------------- This is what is bound to M-. and M-* in some modes. Providing a single variable to put a function in that goes to definition at point which is then called by M-., instead of hard-coding it to `find-tag', would go a long way. Especially when the definition also keeps track of movement and adds that to the movement ring for M-* by itself. Hell, we could even make emacs-lisp-mode provide that and not force the user to use C-h f all the time to go to the definition! :o) Show Documentation ------------------ C-h f <symbol> does this for Emacs Lisp, and I don't think there's a standard key binding for it. Again, a simple variable that can be changed to return the docstring for the symbol at point which then shows a help buffer like C-h f does would be nice as a standard interface. On the topic of a "unified RPC interface", it does grate me a bit that every mode implements its own RPC with a major language (elpy implements a simple JSON-RPC one, emacs-jedi uses the elaborate EPC library, ropemacs uses Pymacs which uses a very idiosyncratic protocol, slime does the swank stuff, clojure apparently has its own API now, etc. etc.), but I'm not sure if that's a solvable problem. Choice of the RPC mechanism depends as much on Emacs as it does on the capabilities of the language being talked to. The JSON-RPC code in elpy is a total of 450 lines, both the Emacs Lisp as well as the Python side, including docstrings and comments, so not having a standard one is not really a huge problem. Having a simple interface on the Emacs side that can be used by major modes so that Emacs presents a unified interface to the user with minimal effort of reimplementing the wheel every time would be very useful, though, and quite doable. Once we have that, it'd be possible to provide one or more "standard RPC mechanisms" that simply plug in to that API and talk to the compliant subprocess, but that's not nearly as important right now. I hope the above explains my remark about the "single interface" in Emacs. :-) Regards, Jorgen PS. Please do not think that the above is meant as a request that "someone should implement this"; it's just my thoughts on the topic of whether intellisense/IDE features integration in Emacs is possible, and how it could be done. If it happens, great. If not, ok. If it annoys me too much, I'll work on that eventually, if and when I find the time. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-23 20:56 ` Jorgen Schaefer @ 2014-01-23 22:13 ` Stefan Monnier 2014-01-23 22:43 ` Jorgen Schaefer 2014-01-24 11:58 ` Phillip Lord 2014-01-25 23:53 ` Dmitry Gutov 2 siblings, 1 reply; 65+ messages in thread From: Stefan Monnier @ 2014-01-23 22:13 UTC (permalink / raw) To: Jorgen Schaefer; +Cc: phillip.lord, emacs-devel > First, it could be improved with more output options. For example, > emacs-jedi.el provides popup-style display for signatures: > http://farm3.staticflickr.com/2845/8793986161_e1c58607f0_o.png > Allowing the user to customize eldoc to use one or the other, > and then having that user's preference take effect in all programming > modes, would be excellent. eldoc-mode is fairly old and hasn't seen much development, so it's fairly primitive. I'd like to enable it globally by default, and I'd welcome some improvements in the UI as well. I personally really like the fact that it uses the echo area, but I agree that it would be good to provide the user with some alternative UIs. > Second, and this is a recurring thing for Emacs APIs, it does not > handle asynchronous calls too well. Indeed, this is a serious problem for eldoc. But it should be fairly easy to address. E.g. we could decide that instead of returning a string, eldoc-documentation-function can return a function which is then called with a "continuation". Or we could introduce a new eldoc-async-documentation-function. > Important features I haven't seen for c-a-p-f yet: Provide an overlay > of the most likely completion candidate while you type for quick > completion with TAB; add annotations to completion candidates, for > example to indicate symbol type; ability to provide documentation for a > completion candidate so that can be shown while browsing candidates. c-a-p-f AFAIK refers to "completion-at-point-functions", which is where the *backends* live. AFAIK none of what you cite would be affected by or need changes in completion-at-point-functions. Instead those issues affect the completion UI used on top of completion-at-point-functions, which could be completion-at-point, company, icomplete, or anything else. > this. In the case of auto-completion, this is a lot more complicated. Yes, asynchrony and c-a-p-f can be more problematic. For completion-at-point, it's not really a problem because by the time we use c-a-p-f we know we want the answer "right now". But for Company we'd instead want to support asynchrony so the external process can take a little while to return the "current" completion candidates while the user keeps on typing. If the candidates arrive too late (the user has moved on to greener pastures), then just drop the result, and otherwise display it. But returning completion candidates asynchronously is not compatible with the current all-completions/try-completion API, so we'd need a fairly serious rework of minibuffer.el. Stefan ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-23 22:13 ` Stefan Monnier @ 2014-01-23 22:43 ` Jorgen Schaefer 2014-01-24 1:40 ` Stefan Monnier 0 siblings, 1 reply; 65+ messages in thread From: Jorgen Schaefer @ 2014-01-23 22:43 UTC (permalink / raw) To: Stefan Monnier; +Cc: phillip.lord, emacs-devel On Thu, 23 Jan 2014 17:13:47 -0500 Stefan Monnier <monnier@iro.umontreal.ca> wrote: > > Important features I haven't seen for c-a-p-f yet: Provide an > > overlay of the most likely completion candidate while you type for > > quick completion with TAB; add annotations to completion > > candidates, for example to indicate symbol type; ability to provide > > documentation for a completion candidate so that can be shown while > > browsing candidates. > > c-a-p-f AFAIK refers to "completion-at-point-functions", which is > where the *backends* live. AFAIK none of what you cite would be > affected by or need changes in completion-at-point-functions. > Instead those issues affect the completion UI used on top of > completion-at-point-functions, which could be completion-at-point, > company, icomplete, or anything else. I think there is currently no provision for the backend to return annotation information or documentation that complements the actual completions? That I meant is that the completion table returned by a member in `completion-at-point-functions' would need some way of returning not only the possible completions at point, but also additional information in some standard way so that the frontends can display them in addition to the completions. > But returning completion candidates asynchronously is not compatible > with the current all-completions/try-completion API, so we'd need > a fairly serious rework of minibuffer.el. Do you think reworking minibuffer.el to support both types of calls with a unified interface (for example with the possibility to block until the asynchronous call returns if we need the completions "right now") would be the right thing? Alternatively, a separate in-buffer completion behavior akin to or based on auto-complete.el might make more sense? Jorgen ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-23 22:43 ` Jorgen Schaefer @ 2014-01-24 1:40 ` Stefan Monnier 2014-01-24 10:25 ` Jorgen Schaefer 2014-01-25 23:42 ` Dmitry Gutov 0 siblings, 2 replies; 65+ messages in thread From: Stefan Monnier @ 2014-01-24 1:40 UTC (permalink / raw) To: Jorgen Schaefer; +Cc: phillip.lord, emacs-devel > I think there is currently no provision for the backend to return > annotation information or documentation that complements the actual > completions? Yes and no. The completion-at-point-functions can return any number of extra properties, and Company uses that to let the backend provide various extra info (see lisp-completion-at-point in a recent lisp.el for an example). IOW you can provide as much extra info as is currently supported by Company. >> But returning completion candidates asynchronously is not compatible >> with the current all-completions/try-completion API, so we'd need >> a fairly serious rework of minibuffer.el. > Do you think reworking minibuffer.el to support both types of calls > with a unified interface (for example with the possibility to block > until the asynchronous call returns if we need the completions "right > now") would be the right thing? Could be. I haven't thought enough about it to know. The problematic part that immediately springs to mind is things like partial-completion which make various calls to the backend to construct the "list of candidates". This would need to be rewritten in a "continuation passing style" (or event-driven style, if you prefer), I guess, but that'd be rather inconvenient. > Alternatively, a separate in-buffer completion behavior akin to or > based on auto-complete.el might make more sense? Not sure what that would look like. `completion-at-point-functions' has 2 "call levels": - first level is: we call the functions on that hook to know if there's a completion and (if there is) what kind of completion it is (boundaries, completion-table, properties, ...). - second level is: we call the completion-table to get the list of candidates. Doing the second level asynchronously means to rewrite partial-completion and friends in CPS. But maybe we can get by with only doing the first asynchronously. IOW the first level could return an :async property which is a function which you call with a continuation. That function will contact some external process and when it's ready it will call the continuation, passing it the real completion-table. And of course, we'd need to make sure that non-async uses can also just wait for the process to return the completion data. Stefan ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-24 1:40 ` Stefan Monnier @ 2014-01-24 10:25 ` Jorgen Schaefer 2014-01-24 12:46 ` Thien-Thi Nguyen 2014-01-24 13:20 ` Stefan Monnier 2014-01-25 23:42 ` Dmitry Gutov 1 sibling, 2 replies; 65+ messages in thread From: Jorgen Schaefer @ 2014-01-24 10:25 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-devel On Thu, 23 Jan 2014 20:40:36 -0500 Stefan Monnier <monnier@iro.umontreal.ca> wrote: > > I think there is currently no provision for the backend to return > > annotation information or documentation that complements the actual > > completions? > > Yes and no. The completion-at-point-functions can return any number > of extra properties, and Company uses that to let the backend provide > various extra info (see lisp-completion-at-point in a recent lisp.el > for an example). IOW you can provide as much extra info as is > currently supported by Company. Ok, that was what I was missing. Thank you. :-) > `completion-at-point-functions' has 2 "call levels": > - first level is: we call the functions on that hook to know if > there's a completion and (if there is) what kind of completion it is > (boundaries, completion-table, properties, ...). > - second level is: we call the completion-table to get the list > of candidates. > > Doing the second level asynchronously means to rewrite > partial-completion and friends in CPS. > > But maybe we can get by with only doing the first asynchronously. > IOW the first level could return an :async property which is a > function which you call with a continuation. That function will > contact some external process and when it's ready it will call the > continuation, passing it the real completion-table. And of course, > we'd need to make sure that non-async uses can also just wait for the > process to return the completion data. That sounds sensible. The asynchronous calls I use all return a list of possible completion candidates and where they start, which is more robust than auto-complete currently trying to identify the prefix with Emacs Lisp code. This response can then be used to construct the completion table without the need for any further asynchronous calls. Even documentation right now is returned by the initial asynchronous call and then cached for later use by auto-complete.el. I'm not sure about "returns an :async property which is called with a continuation". There does not seem to be a need to return a function which is called to run another function? Just letting the Emacs code know that we might add completions later and then calling some well-known function with additional completions once they are available would be sufficient I think? Jorgen ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-24 10:25 ` Jorgen Schaefer @ 2014-01-24 12:46 ` Thien-Thi Nguyen 2014-01-24 13:20 ` Stefan Monnier 1 sibling, 0 replies; 65+ messages in thread From: Thien-Thi Nguyen @ 2014-01-24 12:46 UTC (permalink / raw) To: emacs-devel [-- Attachment #1: Type: text/plain, Size: 834 bytes --] () Jorgen Schaefer <forcer@forcix.cx> () Fri, 24 Jan 2014 11:25:20 +0100 There does not seem to be a need to return a function which is called to run another function? Just letting the Emacs code know that we might add completions later and then calling some well-known function with additional completions once they are available would be sufficient I think? That is sufficient for 1:1 communication. To support multiple channels (which is likely for Emacs -- think multiple buffers), some kind of tag (identifying cookie) is required. A tag w/ direction is a continuation. -- Thien-Thi Nguyen GPG key: 4C807502 (if you're human and you know it) read my lisp: (responsep (questions 'technical) (not (via 'mailing-list))) => nil [-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --] ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-24 10:25 ` Jorgen Schaefer 2014-01-24 12:46 ` Thien-Thi Nguyen @ 2014-01-24 13:20 ` Stefan Monnier 1 sibling, 0 replies; 65+ messages in thread From: Stefan Monnier @ 2014-01-24 13:20 UTC (permalink / raw) To: Jorgen Schaefer; +Cc: emacs-devel > continuation". There does not seem to be a need to return a function > which is called to run another function? Just letting the Emacs code > know that we might add completions later and then calling some > well-known function with additional completions once they are available > would be sufficient I think? It's the same, except that the "well-known" won't be a function name but the function you receive as argument, which makes it possible for it to be a closure that holds various side-info which can change over time. Stefan ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-24 1:40 ` Stefan Monnier 2014-01-24 10:25 ` Jorgen Schaefer @ 2014-01-25 23:42 ` Dmitry Gutov 1 sibling, 0 replies; 65+ messages in thread From: Dmitry Gutov @ 2014-01-25 23:42 UTC (permalink / raw) To: Stefan Monnier; +Cc: phillip.lord, emacs-devel, Jorgen Schaefer Stefan Monnier <monnier@iro.umontreal.ca> writes: > But maybe we can get by with only doing the first asynchronously. > IOW the first level could return an :async property which is a function > which you call with a continuation. That function will contact some > external process and when it's ready it will call the continuation, > passing it the real completion-table. And of course, we'd need to make > sure that non-async uses can also just wait for the process to return > the completion data. Note that a backend that works asynchronously will probably fetch every kind of data asynchronously, i.e. not only the list of completions, but also their annotations, location, etc. (though completion-at-point only supports :annotation, so I mostly mean :company- properties here). This kind of API would easier to implement in the company-backends, because all actions are treated equally there. So we could support something like ('async . (lambda (cont) ...)) as return value for any action. Except for `prefix', I guess, because that would be weird. And most of the actions, except `candidates' would still work synchronously to the user's eye, because they are triggered by explicit user actions. Still, this would save backend implementers from writing code like `(while (eq value 'trash) (sit-for 0.01))' each time. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-23 20:56 ` Jorgen Schaefer 2014-01-23 22:13 ` Stefan Monnier @ 2014-01-24 11:58 ` Phillip Lord 2014-01-25 23:53 ` Dmitry Gutov 2 siblings, 0 replies; 65+ messages in thread From: Phillip Lord @ 2014-01-24 11:58 UTC (permalink / raw) To: Jorgen Schaefer; +Cc: Stefan Monnier, emacs-devel Jorgen Schaefer <forcer@forcix.cx> writes: > On Thu, 23 Jan 2014 10:12:44 -0500 > Stefan Monnier <monnier@iro.umontreal.ca> wrote: > >> >> It's mainly a common interface for such external programs so that >> >> we can add more languages more easily. The current effort of >> >> unifying the completion interface as well as supporting company >> >> mode as a front-end is going a great deal forward in that. >> > I'm not convinced that a single interface would work; again, using >> > clojure as example, this has moved away from a single interface in >> > Emacs (i.e. slime/swank) and toward a single interface for Clojure >> > (so that the Clojure side offers a single server, for different >> > editors). >> > > On the topic of a "unified RPC interface", it does grate me a bit that > every mode implements its own RPC with a major language (elpy > implements a simple JSON-RPC one, emacs-jedi uses the elaborate EPC > library, ropemacs uses Pymacs which uses a very idiosyncratic protocol, > slime does the swank stuff, clojure apparently has its own API now, > etc. etc.), but I'm not sure if that's a solvable problem. This is the sort of thing I was talking about when I said "I'm not convinced a single interface would work". > Choice of the RPC mechanism depends as much on Emacs as it does on the > capabilities of the language being talked to. The JSON-RPC code in > elpy is a total of 450 lines, both the Emacs Lisp as well as the > Python side, including docstrings and comments, so not having a > standard one is not really a huge problem. But that the mechanism is an RPC, I think, is more or less a given. Having a set of standard call-back functions for instance would help. If they all used the same interface, then you could chain them together and compose them in a sane way. So, for instance, you might be able to pick up an "parse a JSON-RPC into lisp datastructures" callback, an "adapt the lisp data structures from my library", and a "do a completion callback", then compose them and use them. The first could be generic for a given syntax family of RPC calls, the last generic for the functionality. So you'd only need to write the middle bit for a given language. Just a thought. Phil ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-23 20:56 ` Jorgen Schaefer 2014-01-23 22:13 ` Stefan Monnier 2014-01-24 11:58 ` Phillip Lord @ 2014-01-25 23:53 ` Dmitry Gutov 2014-01-26 10:15 ` Jorgen Schaefer 2 siblings, 1 reply; 65+ messages in thread From: Dmitry Gutov @ 2014-01-25 23:53 UTC (permalink / raw) To: Jorgen Schaefer; +Cc: phillip.lord, Stefan Monnier, emacs-devel Hi Jorgen, Jorgen Schaefer <forcer@forcix.cx> writes: > Completion > ----------- > > The main topic being argued here. I'm currently using auto-complete.el, > but I hope to eventually use `completion-at-point-functions' once > company-mode is integrated. Like Stefan mentioned, you can already support Company through `completion-at-point-functions'. Company will need to be installed manually by each user, though. > Important features I haven't seen for c-a-p-f yet: Provide an overlay > of the most likely completion candidate while you type for quick > completion with TAB; add annotations to completion candidates, for > example to indicate symbol type; ability to provide documentation for a > completion candidate so that can be shown while browsing candidates. See above. But what's a "most likely completion"? When there's just one suggested completion, then yes, we show an inline overlay. Otherwise, the full list. > Oh, and support for getting completion candidates asynchronously. This > is quite tricky, as the user might have moved point in the time the > candidates were returned, and it's not always necessary to re-request > the candidates then. auto-complete.el handles this "mostly ok" using > an init function and caching the response, but has some hard to trace > problems. I remember you creating a Company issue, me writing you an example snippet, and you going away seemingly (?) satisfied. Have you had any progress using it? As long as we don't have asynchronous users, there's really not much material for me to work with to improve the API, as well as not much motivation. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-25 23:53 ` Dmitry Gutov @ 2014-01-26 10:15 ` Jorgen Schaefer 2014-01-26 23:04 ` Dmitry Gutov 0 siblings, 1 reply; 65+ messages in thread From: Jorgen Schaefer @ 2014-01-26 10:15 UTC (permalink / raw) To: Dmitry Gutov; +Cc: emacs-devel On Sun, 26 Jan 2014 01:53:09 +0200 Dmitry Gutov <dgutov@yandex.ru> wrote: > > Important features I haven't seen for c-a-p-f yet: Provide an > > overlay of the most likely completion candidate while you type for > > quick completion with TAB; add annotations to completion > > candidates, for example to indicate symbol type; ability to provide > > documentation for a completion candidate so that can be shown while > > browsing candidates. > > [...] > > But what's a "most likely completion"? When there's just one suggested > completion, then yes, we show an inline overlay. Otherwise, the full > list. The "first" one. ;-) Basically, what you get when you hit RET in Company, without typing anything. The delay for this can be a lot shorter, up to "almost instantaneous", than the delay for popping up the completion pop-up. (Come to think of it, isn't there a way of sorting completion results? It's one of the things I want to get auto-complete to do, because completions from Python backends are most of the time of higher quality than, say, dabbrev completions.) > > Oh, and support for getting completion candidates asynchronously. > > This is quite tricky, as the user might have moved point in the > > time the candidates were returned, and it's not always necessary to > > re-request the candidates then. auto-complete.el handles this > > "mostly ok" using an init function and caching the response, but > > has some hard to trace problems. > > I remember you creating a Company issue, me writing you an example > snippet, and you going away seemingly (?) satisfied. > > Have you had any progress using it? As long as we don't have > asynchronous users, there's really not much material for me to work > with to improve the API, as well as not much motivation. I did not look much closer. The solution you provided is more or less what auto-complete does with its init call and caching, which would likely work slightly better than auto-complete because I have more control over it, but well, a-c already has it implemented. Hence, I was quite satisfied - it solves my problem, and I can not and do not expect any more from you, you were very helpful already - but it's not what I was hoping for. Originally, I created the issue because I was hoping Company would be able to fully replace auto-complete just requiring fewer hacks and work on my part. Sadly, while working with it, I realized Company as is does not really replace auto-complete for me. It's close, but not quite there yet. I want to look at Company again at some point in the future and see if I can make a list of things I miss and maybe start working on them, but at the moment I'm very low on time, so I pushed that down my list quite a bit I'm afraid. As I said in my original post, that was not intended as a request to get all of this implemented or even as a complaint, just as a note on what the technical hurdles for Emacs implementing IntelliSense features actually are: Very few. The features are mostly there, and what is missing is mainly a common API and some polishing here and there. Regards, Jorgen ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-26 10:15 ` Jorgen Schaefer @ 2014-01-26 23:04 ` Dmitry Gutov 0 siblings, 0 replies; 65+ messages in thread From: Dmitry Gutov @ 2014-01-26 23:04 UTC (permalink / raw) To: Jorgen Schaefer; +Cc: emacs-devel On 26.01.2014 12:15, Jorgen Schaefer wrote: > The "first" one. ;-) Basically, what you get when you hit RET in > Company, without typing anything. The delay for this can be a lot > shorter, up to "almost instantaneous", than the delay for popping up the > completion pop-up. I don't really see how that's useful: you can indeed type RET and get the same result. The delay is non-zero by default not only so that the user is not constantly interrupted by the popup, but also because the candidates retrieval is not instantaneous (and usually blocks Emacs), and to retrieve the "first" candidate we'll have to retrieve all candidates anyway. On the subject of interruptions, personally I'd be almost as annoyed by the inline hint overlay appearing too quickly, as by the full popup doing the same. > (Come to think of it, isn't there a way of sorting completion > results? It's one of the things I want to get auto-complete to do, > because completions from Python backends are most of the time of higher > quality than, say, dabbrev completions.) In Company, completions from merged backends are sorted automatically (see `company--multi-backend-adapter', it returns nil for `sorted'). But you could write a similar merging adapter that would only sort indivitual candidate lists returned from given backends, and then simply concatenate them. > I did not look much closer. The solution you provided is more or less > what auto-complete does with its init call and caching, which would > likely work slightly better than auto-complete because I have more > control over it, but well, a-c already has it implemented. Hence, I was > quite satisfied - it solves my problem, and I can not and do not expect > any more from you, you were very helpful already - but it's not what I > was hoping for. Well, as long as you're satisfied with the current situation, it's fine, I guess. > I want to look at Company again at some point in the future and see if > I can make a list of things I miss and maybe start working on them, but > at the moment I'm very low on time, so I pushed that down my list quite > a bit I'm afraid. Ok. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 17:29 ` Phillip Lord 2014-01-22 18:49 ` Jorgen Schaefer @ 2014-01-23 2:22 ` Eric M. Ludlam 2014-01-23 13:26 ` Phillip Lord 1 sibling, 1 reply; 65+ messages in thread From: Eric M. Ludlam @ 2014-01-23 2:22 UTC (permalink / raw) To: emacs-devel On 01/22/2014 12:29 PM, Phillip Lord wrote: > Eli Zaretskii<eliz@gnu.org> writes: >>> A better way is to build on the hard work of other and interface >>> emacs with an external tool. >> >> Personally, I think implementing such features via external programs >> is a terrible design. It will never be smooth and responsive enough, >> and on top of that you'd need to track development of those other >> tools. And what if they become abandoned some day? > > > I think that it depends on the language. Introspecting over, for > example, Java would require an awful of elisp, which would be difficult > to write. Getting Java to do this work is quite a lot less effort. > Hence, the JDEEs use of Java for this (via bsh). Likewise, Clojure and > Scala both of which use their own language to do much of the work. Or > for that matter, common lisp with slime/swank. Or even, for that matter, > English with aspell. I didn't have a problem with responsiveness with > any of these. I don't think it is a good idea to consider the problem of doing smart completion in Emacs as "Emacs Lisp VS External library". It is much more advantageous to figure out what each is best at and do that instead. There are certainly examples on both extremes. CEDET and Semantic by themselves can parse surprisingly large C++ code bases and provide smart completion quite accurately, but as the code base grows, it gets slower. It also took a really long time to implement in my spare time in spite of the vast amount of help I've gotten from its users. There are also completion you can implement by passing entire buffers into an external parser as explained by Jorgen for Python, and I think clang could do something similar. These were coded more quickly, and can provide rapid results. I think it would be better to have a strong mix between the two. I am of course a bit biased since I've put support for this in CEDET quite a while ago. The premise for those who haven't studied how the smart completion engine in CEDET works is pretty simple. Emacs is in charge of basic buffer parsing. As David explained, it is a simple tagging parser, but unlike etags/ctags, it collects much more detailed information. It also has a local context parser, allowing it to find local variables, and identify the kind of command the cursor is sitting on, such as an assignment, struct dereferences, etc. Once that basic part is done, the smart completion engine starts looking up symbols. It does this via a series of 'semanticdb' EIEIO objects that are associated with the buffer. With no external program support, it uses an all Emacs solution to lookup header files or whatever that language uses. Alternately, there are external programs wrapped up in this EIEIO class that can provide the same services. Thus for Java there is a 'javap' service that can find symbols in .jar files to provide the answer. There are many external programs such as GNU Global, idutils, cscope, and javap that are already supported, and each provides different levels of support based on what they can do. They all make CEDET faster or more accurate when in use. It is tempting to go with an entirely external solution. They can usually be wrapped up by Emacs in pretty quickly. There are additional advantages aside from smart completion to adding parsing support for a language directly to Emacs however. What CEDET does is place overlays in the buffer identifying the tags and their nesting. Simple queries can tell you exactly where you are structurally in a program with no regexp calls, searching, or other time-consuming activities. You can use this for breadcrumbs, decorations, named bookmarks, navigation, and any kind of function that needs to know where you are by name. Semantic also can provide access to the current buffer tag-list at next to 0 cost when asked (assuming the idle timers have had a chance to run) making think like imenu, which-func, speedbar, and ECB very fast. It seems unlikely an external tool could do all that without quite a bit of effort. Lastly, most parts of CEDET/Semantic's parsing and completion engines can be replaced per-mode at almost any level, not just at the database level. As such, if someone really wants to use an external tool to parse a buffer or provide completion (2 different operations), it will let you do it, and all the existing CEDET tools will then work just fine on top of the result. Eric ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-23 2:22 ` Eric M. Ludlam @ 2014-01-23 13:26 ` Phillip Lord 0 siblings, 0 replies; 65+ messages in thread From: Phillip Lord @ 2014-01-23 13:26 UTC (permalink / raw) To: Eric M. Ludlam; +Cc: emacs-devel "Eric M. Ludlam" <eric@siege-engine.com> writes: >> I think that it depends on the language. Introspecting over, for >> example, Java would require an awful of elisp, which would be difficult >> to write. Getting Java to do this work is quite a lot less effort. >> Hence, the JDEEs use of Java for this (via bsh). Likewise, Clojure and >> Scala both of which use their own language to do much of the work. Or >> for that matter, common lisp with slime/swank. Or even, for that matter, >> English with aspell. I didn't have a problem with responsiveness with >> any of these. > > I don't think it is a good idea to consider the problem of doing smart > completion in Emacs as "Emacs Lisp VS External library". It is much more > advantageous to figure out what each is best at and do that instead. > I think it would be better to have a strong mix between the two. I am of > course a bit biased since I've put support for this in CEDET quite a while > ago. The premise for those who haven't studied how the smart completion > engine in CEDET works is pretty simple. Emacs is in charge of basic buffer > parsing. As David explained, it is a simple tagging parser, but unlike > etags/ctags, it collects much more detailed information. It also has a local > context parser, allowing it to find local variables, and identify the kind of > command the cursor is sitting on, such as an assignment, struct dereferences, > etc. I would agree with this, I think. JDEEs use of CEDET and introspection worked quite nicely together. Combined with (yet another) analysis step for fontification. My main point was to argue that an all elisp solution isn't necessarily sensible. To use a (strained) example in an English buffer `forward-word' is always going to be best implemented in elisp, while having "spell-check" in aspell seems reasonable. Phil ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-21 18:59 ` Tom 2014-01-21 19:29 ` Eli Zaretskii @ 2014-01-21 19:53 ` David Engster 2014-01-21 20:07 ` Tom 1 sibling, 1 reply; 65+ messages in thread From: David Engster @ 2014-01-21 19:53 UTC (permalink / raw) To: Tom; +Cc: emacs-devel Tom writes: > Creating mature and extensive intellisense features is hard work, > it requires lots of man hours and while it's technically possible to > implement it in emacs it is unlikely to happen, because emacs lacks > the developing resources. Most of the hard work for implementing smart completions was already done (and yes, it took many years). We have the necessary infrastructure and fairly well working parsers for C/C++, Java, Python, Fortran90, and others. Yes, there is still a lot of work to do, and more contributors would be nice, for sure, but it is absolutely doable. -David ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-21 19:53 ` David Engster @ 2014-01-21 20:07 ` Tom 2014-01-21 20:13 ` David Engster 0 siblings, 1 reply; 65+ messages in thread From: Tom @ 2014-01-21 20:07 UTC (permalink / raw) To: emacs-devel David Engster <deng <at> randomsample.de> writes: > > Most of the hard work for implementing smart completions was already > done (and yes, it took many years). We have the necessary infrastructure > and fairly well working parsers for C/C++, Java, Python, Fortran90, and > others. Yes, there is still a lot of work to do, and more contributors > would be nice, for sure, but it is absolutely doable. In your assessment when this support can get to the point when it's comparable for example to the support Eclipse provides for Java (refactoring, on the fly syntax checking, offering automatic code solutions for problems, etc.)? ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-21 20:07 ` Tom @ 2014-01-21 20:13 ` David Engster 2014-01-21 20:24 ` Tom 0 siblings, 1 reply; 65+ messages in thread From: David Engster @ 2014-01-21 20:13 UTC (permalink / raw) To: Tom; +Cc: emacs-devel Tom writes: > David Engster <deng <at> randomsample.de> writes: >> >> Most of the hard work for implementing smart completions was already >> done (and yes, it took many years). We have the necessary infrastructure >> and fairly well working parsers for C/C++, Java, Python, Fortran90, and >> others. Yes, there is still a lot of work to do, and more contributors >> would be nice, for sure, but it is absolutely doable. > > In your assessment when this support can get to the point when > it's comparable for example to the support Eclipse provides for > Java (refactoring, on the fly syntax checking, offering automatic > code solutions for problems, etc.)? For Java? Never, unless someone seriously starts working on it. However, your statement that it is futile in the first place will surely not attract anybody, so please don't make such claims. -David ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-21 20:13 ` David Engster @ 2014-01-21 20:24 ` Tom 2014-01-21 22:50 ` David Engster 2014-01-22 3:55 ` Eli Zaretskii 0 siblings, 2 replies; 65+ messages in thread From: Tom @ 2014-01-21 20:24 UTC (permalink / raw) To: emacs-devel David Engster <deng <at> randomsample.de> writes: > For Java? Never, unless someone seriously starts working on it. However, > your statement that it is futile in the first place will surely not > attract anybody, so please don't make such claims. My point was that much more can be gained with much less work by working on interface packages than natively reimplementing these features. For example, a polished Eclim package besides providing an excellent Java support would also provide an excellent way for developers working with Eclipse to try Emacs, because they could use the exact same working environment. They could instantly use Emacs with their projects without any extra setup, so it would be very easy for them to give Emacs a try. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-21 20:24 ` Tom @ 2014-01-21 22:50 ` David Engster 2014-01-22 3:55 ` Eli Zaretskii 1 sibling, 0 replies; 65+ messages in thread From: David Engster @ 2014-01-21 22:50 UTC (permalink / raw) To: Tom; +Cc: emacs-devel Tom writes: > David Engster <deng <at> randomsample.de> writes: > >> For Java? Never, unless someone seriously starts working on it. However, >> your statement that it is futile in the first place will surely not >> attract anybody, so please don't make such claims. > > My point was that much more can be gained with much less work by > working on interface packages than natively reimplementing these > features. Maybe. I've did my fair share in writing interfaces to external binaries, and found it to be mostly frustrating. But anyway: people will work on whatever they want to work on. I for one have no interest in leaving all the actually rewarding and interesting work to an external binary. Where's the fun in that? -David ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-21 20:24 ` Tom 2014-01-21 22:50 ` David Engster @ 2014-01-22 3:55 ` Eli Zaretskii 2014-01-23 9:16 ` Andreas Röhler 1 sibling, 1 reply; 65+ messages in thread From: Eli Zaretskii @ 2014-01-22 3:55 UTC (permalink / raw) To: Tom; +Cc: emacs-devel > From: Tom <adatgyujto@gmail.com> > Date: Tue, 21 Jan 2014 20:24:34 +0000 (UTC) > > David Engster <deng <at> randomsample.de> writes: > > > For Java? Never, unless someone seriously starts working on it. However, > > your statement that it is futile in the first place will surely not > > attract anybody, so please don't make such claims. > > My point was that much more can be gained with much less work by > working on interface packages than natively reimplementing these > features. And even more will be gained by using Visual Studio instead of Emacs, but so what? Like David points out: a lot of required infrastructure already exists, so this is doable, given enough motivation. It's not an unthinkable effort. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 3:55 ` Eli Zaretskii @ 2014-01-23 9:16 ` Andreas Röhler 2014-01-23 17:17 ` Richard Stallman 0 siblings, 1 reply; 65+ messages in thread From: Andreas Röhler @ 2014-01-23 9:16 UTC (permalink / raw) To: emacs-devel; +Cc: Eli Zaretskii Am 22.01.2014 04:55, schrieb Eli Zaretskii: >> From: Tom <adatgyujto@gmail.com> >> Date: Tue, 21 Jan 2014 20:24:34 +0000 (UTC) >> >> David Engster <deng <at> randomsample.de> writes: >> >>> For Java? Never, unless someone seriously starts working on it. However, >>> your statement that it is futile in the first place will surely not >>> attract anybody, so please don't make such claims. >> >> My point was that much more can be gained with much less work by >> working on interface packages than natively reimplementing these >> features. > > And even more will be gained by using Visual Studio instead of Emacs, Really? But seriously: Why not make Emacs user profit the maximum from the environment? ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-23 9:16 ` Andreas Röhler @ 2014-01-23 17:17 ` Richard Stallman 0 siblings, 0 replies; 65+ messages in thread From: Richard Stallman @ 2014-01-23 17:17 UTC (permalink / raw) To: Andreas Röhler; +Cc: eliz, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] But seriously: Why not make Emacs user profit the maximum from the environment? Implicitly that presumes Emacs is an isolated project, assuming that the principal goal is the usefulness and success of Emacs in isolation. The reason we don't make decisions in the way you suggest is that Emacs is part of a larger project (the GNU Project) with a larger goal (freedom for software users). -- Dr Richard Stallman President, Free Software Foundation 51 Franklin St Boston MA 02110 USA www.fsf.org www.gnu.org Skype: No way! That's nonfree (freedom-denying) software. Use Ekiga or an ordinary phone call. ^ permalink raw reply [flat|nested] 65+ messages in thread
[parent not found: <mailman.172802.1390363342.10747.emacs-devel@gnu.org>]
* Re: Is intellisense features integration in Emacs technically possible? [not found] <mailman.172802.1390363342.10747.emacs-devel@gnu.org> @ 2014-01-22 7:39 ` Jorge Araya Navarro 2014-01-22 15:39 ` Eli Zaretskii 0 siblings, 1 reply; 65+ messages in thread From: Jorge Araya Navarro @ 2014-01-22 7:39 UTC (permalink / raw) To: emacs-devel [-- Attachment #1: Type: text/plain, Size: 1153 bytes --] El mar, 21-01-2014 a las 23:02 -0500, emacs-devel-request@gnu.org escribió: > From: Eli Zaretskii <eliz@gnu.org> > > From: Tom <adatgyujto@gmail.com> > > Date: Tue, 21 Jan 2014 20:24:34 +0000 (UTC) > > > > David Engster <deng <at> randomsample.de> writes: > > > > > For Java? Never, unless someone seriously starts working on it. However, > > > your statement that it is futile in the first place will surely not > > > attract anybody, so please don't make such claims. > > > > My point was that much more can be gained with much less work by > > working on interface packages than natively reimplementing these > > features. > > And even more will be gained by using Visual Studio instead of Emacs, > but so what? > > Like David points out: a lot of required infrastructure already > exists, so this is doable, given enough motivation. It's not an > unthinkable effort. Well, I started to learn elisp today! :D. Ok, that may not be so useful for the size of the task, but I have to start in some place, right? -- Pax et bonum. Jorge Araya Navarro. Diseñador publicitario, programador Python/C++ y colaborador en Parabola GNU/Linux-libre. [-- Attachment #2: Type: text/html, Size: 2005 bytes --] ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Is intellisense features integration in Emacs technically possible? 2014-01-22 7:39 ` Jorge Araya Navarro @ 2014-01-22 15:39 ` Eli Zaretskii 0 siblings, 0 replies; 65+ messages in thread From: Eli Zaretskii @ 2014-01-22 15:39 UTC (permalink / raw) To: elcorreo; +Cc: emacs-devel > From: Jorge Araya Navarro <elcorreo@deshackra.com> > Date: Wed, 22 Jan 2014 01:39:02 -0600 > > Well, I started to learn elisp today! :D. Way to go! > Ok, that may not be so useful for the size of the task, but I have > to start in some place, right? Right, and don't be intimidated by a supposedly colossal task, while you are at it. ^ permalink raw reply [flat|nested] 65+ messages in thread
end of thread, other threads:[~2014-01-26 23:04 UTC | newest] Thread overview: 65+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-01-21 2:01 Is intellisense features integration in Emacs technically possible? Jorge Araya Navarro 2014-01-21 18:59 ` Tom 2014-01-21 19:29 ` Eli Zaretskii 2014-01-21 19:58 ` Tom 2014-01-22 3:53 ` Eli Zaretskii 2014-01-22 4:36 ` Óscar Fuentes 2014-01-22 6:31 ` David Kastrup 2014-01-22 7:26 ` Stephen J. Turnbull 2014-01-22 8:13 ` David Kastrup 2014-01-22 9:33 ` Stephen J. Turnbull 2014-01-22 11:02 ` David Kastrup 2014-01-22 13:35 ` Stefan Monnier 2014-01-22 16:04 ` Eli Zaretskii 2014-01-23 8:13 ` Stephen J. Turnbull 2014-01-23 8:44 ` David Kastrup 2014-01-23 16:19 ` Eli Zaretskii 2014-01-24 2:57 ` Stephen J. Turnbull 2014-01-24 7:43 ` Eli Zaretskii 2014-01-22 8:49 ` Rüdiger Sonderfeld 2014-01-22 11:53 ` Óscar Fuentes 2014-01-22 15:56 ` Eli Zaretskii 2014-01-22 18:46 ` Stefan Monnier 2014-01-22 19:10 ` David Engster 2014-01-22 16:52 ` David Engster 2014-01-22 15:59 ` Eli Zaretskii 2014-01-22 16:41 ` David Engster 2014-01-22 17:16 ` Dmitry Gutov 2014-01-22 17:36 ` David Engster 2014-01-22 18:12 ` Óscar Fuentes 2014-01-22 18:34 ` David Engster 2014-01-21 20:03 ` Andreas Röhler 2014-01-22 3:54 ` Eli Zaretskii 2014-01-22 6:28 ` Stephen J. Turnbull 2014-01-22 16:03 ` Eli Zaretskii 2014-01-23 7:54 ` Stephen J. Turnbull 2014-01-22 17:29 ` Phillip Lord 2014-01-22 18:49 ` Jorgen Schaefer 2014-01-23 9:00 ` Andreas Röhler 2014-01-23 19:34 ` Jorgen Schaefer 2014-01-23 13:20 ` Phillip Lord 2014-01-23 15:12 ` Stefan Monnier 2014-01-23 20:56 ` Jorgen Schaefer 2014-01-23 22:13 ` Stefan Monnier 2014-01-23 22:43 ` Jorgen Schaefer 2014-01-24 1:40 ` Stefan Monnier 2014-01-24 10:25 ` Jorgen Schaefer 2014-01-24 12:46 ` Thien-Thi Nguyen 2014-01-24 13:20 ` Stefan Monnier 2014-01-25 23:42 ` Dmitry Gutov 2014-01-24 11:58 ` Phillip Lord 2014-01-25 23:53 ` Dmitry Gutov 2014-01-26 10:15 ` Jorgen Schaefer 2014-01-26 23:04 ` Dmitry Gutov 2014-01-23 2:22 ` Eric M. Ludlam 2014-01-23 13:26 ` Phillip Lord 2014-01-21 19:53 ` David Engster 2014-01-21 20:07 ` Tom 2014-01-21 20:13 ` David Engster 2014-01-21 20:24 ` Tom 2014-01-21 22:50 ` David Engster 2014-01-22 3:55 ` Eli Zaretskii 2014-01-23 9:16 ` Andreas Röhler 2014-01-23 17:17 ` Richard Stallman [not found] <mailman.172802.1390363342.10747.emacs-devel@gnu.org> 2014-01-22 7:39 ` Jorge Araya Navarro 2014-01-22 15:39 ` Eli Zaretskii
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git 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).