Actually, forget about the comparison to the shell. (It's misleading unless you are old enough to remember the commands fg, bg and jobs. Nowadays everyone uses the windowing system instead of fg, bg and jobs.) My bad.
Proving you wrong about 3 items on your list sound like too much work, but let me try again to make my basic point.
In Emacs, start a new shell process by saying M-! sleep 10 && echo hello && echo world &
The ampersand at the end is important. If you leave it off, Emacs remains unresponsive for the ten seconds during which the shell process runs.
If you include the ampersand at the end, on the other hand, you can switch buffers and perform unrelated tasks while the shell process is running. Then after ten seconds, when the shell process ends, Emacs shows you a message in the echo area informing you that the shell process is done, and if you switch to the buffer named "Async Shell Command", you can see its output.
Emacs has been able to do that for decades, and it is definitely not what great great great grandparent meant by "multithreading" but it is the only kind of "concurrency" I have ever needed or wanted in Emacs to the best of my recollection -- and when I send an email, search a buffer or look up someone's phone number in my address book, I am using an Emacs command I wrote.
Emacs has been able to do that for decades, and it is definitely not what great great great grandparent meant by "multithreading"
You've been talking to the same guy for this entire thread. (i.e. the "great great great grandparent" is the same as the person you just responded to.)
I have ever needed or wanted in Emacs to the best of my recollection -- and when I send an email, search a buffer or look up someone's phone number in my address book, I am using an Emacs command I wrote.
It seems like you've had a lot of experience with Emacs. Can Emacs of today do any of the things that he listed that are things he wants to improve his workflow? i.e. Instead of proving him wrong about 3 things, can you prove him wrong about 1 thing?
I'm curious about the state-of-the-art when it comes to Emacs, so it would be cool to get some solid answers.
>Instead of proving him wrong about 3 things, can you prove him wrong about 1 thing?
OK. One of the things on his list is, "Concurrent url fetching and downloads". In Emacs Lisp a programmer can call START-PROCESS to invoke wget "asynchronously" (i.e., in such a way that the Emacs process can continue to respond to the user's commands). Moreover, Emacs Lisp includes a way (which I do not remember and cannot easily look up) to arrange for code to be run when the wget process terminates. So obviously this code can read the file downloaded by the wget process, load it into an editing buffer, then bring that buffer (or more precisely a window onto that buffer) into the foreground (or notify the user that it is ready in some other way).
I know enough about Unix to know that START-PROCESS is doing a fork and an exec, and my reading of the source code file /lisp/man.el told me that Unix signals would almost certainly be involved in notifying the Emacs Lisp code when the wget process is done.
START-PROCESS probably does not work on Windows BTW.
ADDED. The above example of concurrency is so simple that it might give the reader a misleading impression about Emacs. So let me just say that although I use OS X, I almost never use Terminal or iTerm or such because I prefer to use Emacs buffers (in shell mode) to interact with Unix shells and other programs with command-line interfaces. If I were to start a long-running computation in one (shell-mode) buffer, I could use Emacs for unrelated tasks while the computation is running.
Proving you wrong about 3 items on your list sound like too much work, but let me try again to make my basic point.
In Emacs, start a new shell process by saying M-! sleep 10 && echo hello && echo world &
The ampersand at the end is important. If you leave it off, Emacs remains unresponsive for the ten seconds during which the shell process runs.
If you include the ampersand at the end, on the other hand, you can switch buffers and perform unrelated tasks while the shell process is running. Then after ten seconds, when the shell process ends, Emacs shows you a message in the echo area informing you that the shell process is done, and if you switch to the buffer named "Async Shell Command", you can see its output.
Emacs has been able to do that for decades, and it is definitely not what great great great grandparent meant by "multithreading" but it is the only kind of "concurrency" I have ever needed or wanted in Emacs to the best of my recollection -- and when I send an email, search a buffer or look up someone's phone number in my address book, I am using an Emacs command I wrote.