1. 3
    ( brilliant(,)
    	( if
    		( only
    			( it
    				( wasn\'t
    					( lisp :))))))
    
    1. 13

      I don’t know why people have this learned hatred of parenthesis.

      1. 2

        LISP value lies beyond its syntax. But when your world is only C-like/Python-like syntax it is hard to look beyond just the syntax of any new language.

        Mainly: https://wiki.haskell.org/Wadler's_Law

        In any language design, the total time spent discussing a feature in this list is proportional to two raised to the power of its position.

              0. Semantics
              1. Syntax
              2. Lexical syntax
              3. Lexical syntax of comments
        
        1. 2

          LISP value lies beyond its syntax. But when your world is only C-like/Python-like syntax it is hard to look beyond just the syntax of any new language.

          My world is not only C-like/Python-like syntax. and LISP is not a new language to me. It was my first real exposure to programming to get real work done (not counting some hello-world stuff in other languages and copy/paste POSIX/BAT script script stuff I didn’t really understand at the time) and I kept up with it for years through my next couple languages (Perl being my next major stop). I realize it has value, but even knowing where some of that value lies it’s hard to to make fun of how obtuse it can be.

          1. 2

            I don’t know why people have this learned hatred of parenthesis.

            Experience.

            Mine with LISP being from before the days when editors had syntax highlighting of any kind, much less nested parenthesis color matching.

            1. 2

              i often use my editors in monochrome mode: vi has the % command to check on matching parens, emacs has the full suite of s-expr commands.

        1. 6

          I really love the redesign of David Foster Wallace’s essay Host (https://www.theatlantic.com/magazine/archive/2005/04/host/303812/). In print, there’s lines going everywhere and it’s kind of a mess, but the way the annotations expand and nest within each other is very pleasing.

          1. 4

            I worked at The Atlantic when it was reworked for the then new CMS. IIRC, it was a labor of love by Chris Barna to make it work in a responsive design.

            1. 1

              Thank you for sharing that link. It’s quite cool indeed and the recursive notes are done very well.

              My only gripe would be that you have to click on the footnotes to expand them and that they are also part of the text flow, which breaks down in reader mode, as they are inlined into the main text.

            1. 6

              So merkle-trees are a data structure used by cryptocurrency, but the data structure is used in other contexts as well. I suppose it’s possible there will be crypto currencies that don’t rely on such trees.

              Perhaps add the suffix for cryptography and add a separate cryptocurrency tag?

              1. 23

                my understanding is that the merkle-trees tag is a sort of implicit “this content isn’t welcome here” for cryptocurrency-related articles that don’t immediately focus on the technology involved.

                1. 2

                  What’s the point of having this coded language? What is somebody posts something that is actually about Merkle trees? Should it then not use the tag?

                  1. 2

                    Technical discussions around Merkle trees are on topic.

                    Cryptocurrencies outside that are not.

                    That’s the reason for the tag denomination change.

                    1. 1

                      in my experience most cryptocurrency articles are literal spam or written by scammers. the only ones that aren’t discuss the technology or design separate from the tokenomics/economics of the currency involved. I don’t know why the topic isn’t banned outright, you’d have to ask the admins here about that.

                      incidentally, I wonder what the most filtered tags are. Merkle-trees is probably up there.

                      1. 1

                        I think that what janus meant is that Merkle trees are used in a wide variety of domains totally unrelated to cryptocurrencies.

                        1. 1

                          And those areas are on topic, as there is a tag for them…

                    2. 1

                      Ah, that makes perfect sense.

                  1. 6

                    This is very subjective! I also don’t think it is good to downvote comments based on quality. Just upvote the good ones. Off-topic and spam flag categories make the assumption that it was done in bad faith, which I think is fair to flag. Already posted and broken link are informative.

                    1. 5

                      I agree. Positive reinforcement is far better than negative. It is better to reward new users for good comments (with upvotes) rather than “punish” them for low quality ones.

                      1. 4

                        Even with the ability to downvote comments for low quality, Reddit comments are routinely extremely low effort. I wouldn’t like to see pun threads and “hey do you guys remember Queen?” threads here, but I already see some bad puns getting upvoted pretty often.

                        1. 3

                          It is in the same category as “off-topic” but adds more nuance. So if the former is valid, I suggest that this is too.

                          1. 3

                            I don’t think the nuance is necessary. Low effort comments that are snarky or negative are probably “troll” or “unkind”, else they’re on-topic and discussion remains reasonably free and open.

                        1. 22

                          As much as I love lisps, ‘totalitarian’ and ‘policing’ is a bit of an odd spin to put on languages with a more constrained operational model. You know what’s a really totalitarian move? Your program crashing. The CPU, that dictator, doing exactly what you told it and shitting the bed as a result.

                          When a language enforces strong, static typing, memory safety, or immutability, it doesn’t feel like I’m being policed; it feels like I’m using the computing resources in front of me to improve my chances that my program will work once it’s running.

                          1. 44

                            You know what’s a really totalitarian move? Your program crashing. The CPU, that dictator, doing exactly what you told it and shitting the bed as a result.

                            You know what’s really totalitarian? Killing political dissenters. “Totalitarian” is a silly word to apply to programming languages.

                            1. 7

                              In line with the author’s distinction between Common Lisp’s, erm, adaptability, I suppose? and the “grand ideas” languages, I’d suggest replacing the obviously out-of-place “totalitarian” with the much nicer “hedgehogs-like”.

                              I’m nodding at Isiah Berlin’s The Hedgehog and The Fox (itself an allusion to a much older line) here, although nowadays Philip Tetlock’s study about political experts and forecasters may be more widely known nowadays. I’m specifically mentioning Berlin’s essay, though, because Tetlock sort of makes a value judgement in his study, whereas Berlin is far less categorical in this regard, and it’s sort of what I’m trying to do here, too.

                              By analogy with Berlin’s classification, “hedgehog” languages, like Haskell or Rust, or more generally, hedgehog systems, like Unix (“everything is a file”) have this single, elegant, unifying philosophy, a sort of lens through which they view everything, whereas “fox-like” languages like Perl, Python, Common Lisp or C# have no single grand idea that permeates their entire design. (One could argue that C#‘s grand idea is OOP but there are plenty of functional idioms in it, for example; I guess C++ would’ve been an even better example?)

                              Both have good and bad sides – this is why I specifically cautioned against following Tetlock’s analogy too much (in his study, foxes are better at forecasting than hedgehogs, but this is really not about forecasting).

                              Lots of “hedgehog” languages have a well-earned reputation for elegance and solid design, and they push all sorts of things forward. But grand unifying theories fare no better in computer science than they do in physics: oftentimes, reality just won’t bloody fit their elegant design, and elegant designs often get a bloody nose when they run into the real world. This is further complicated by the human factor, as people tend to get attached to their tools more than it’s healthy, and the results are often baffling.

                              “Fox” languages may feel more pragmatic, and the fact that they’re not attached to a particular world model means that sometimes they really are substantially better at handling things that just don’t fit the damn model. But lack of a “higher” unifying idea in a language often descends upon the programs written in that language, too, and they can end up messy. This, too, is further complicated by the human factor: just because they have multiple tools at their disposal doesn’t mean people will end up using the right one, and all this flexibility sometimes encourages them to do things just because they can, without wondering if they should, too.

                              Also, hedgehogs and foxes are really cute and that alone would suffice, just sayin’ :-D.

                              (Edit: obviously, this is an informal classification :P. One could argue, for example, that Common Lisp belongs in the “hedgehog” category because homoiconicity is the grand idea around which the entire language is built. Like any classification that isn’t based on numbers, it’s hard to say exactly where the border is, but that doesn’t make it any less useful, because most of the time, it’s pretty easy to figure out when two languages (say, Rust and C++, or Haskell and Common Lisp) are on different sides of the border.

                              1. 6

                                I reject the fox/hedgehog classification. Haskell and Rust are every bit as general purpose as Common Lisp. They can be used for all of the same problems.

                                In addition to the syntax, Lisp’s grand unifying idea is that everything can be represented by (mostly) mutable, garbage collected objects, with a notion of object identity that you can test using ‘eq’. No other language worked this way when Lisp was introduced.

                                The fact that this idea has become mainstream does not change the fact that Lisp’s “everything is a garbage collected mutable object” is not a good fit for every problem. Haskell and Rust stand out by the fact that they don’t use this model. Haskell is based on pure functions and immutable values. Rust also has elevated support for immutability, and is not garbage collected.

                                Lisp’s grand idea works great for single-core CPU programming. It’s terrible and unusable for GPU programming. Shared mutable objects are not great for concurrent programming in general. That’s where programming with immutable values instead of mutable objects has clear benefits. There are also lots of contexts where garbage collection is a liability, and where Rust is moving in.

                                1. 1

                                  The point of the classification is not general purpose vs. special purpose, just how many different, sometimes conflicting ideas a language accommodates. For example, Haskell is obviously just as general-purpose as Common Lisp, but while Common Lisp happily includes both imperative and functional idioms, Haskell is far less willing to accommodate the former. Similarly, C++‘s memory model, far less constrained that Rust’s, will accommodate plenty of things that Rust won’t. Not that it’s a good thing.

                              2. 5

                                I suppose a CS forum would be among the tougher crowds for metaphor.

                                1. 11

                                  Calling a language “totalitarian” is like me calling you a Qanon supporter: while there might be some technical denotative merit to the analogy, it’s so hyperbolic to completely ruin the point you’re trying to make. There’s a difference between a metaphor and a good metaphor.

                                  (You’re just like a Qaon supporter in that I disagree with you.)

                                  1. 2

                                    I can’t get behind this totalitarian language policing, even if it weren’t a good metaphor, which I think it is.

                                    1. 6

                                      Calling a metaphor bad isn’t totalitarian language policing, it’s criticizing the quality of the article. Which is a totally normal and reasonable thing for writers to do. Anyway, this is now pretty off-topic for the OP, feel free to DM if you want to continue chatting aesthetics.

                              3. 4

                                also both of these languages do allow you to do whatever nonsense you would like, with unsafePerformIO in haskell and unsafe blocks in Rust.

                                1. 2

                                  Yeah this seems like the same bad argument against static typing - you can just use Object/Any types and voila you have dynamic typing. As you say, these constructs are a superset of what was possible before and arguing that they limit you is silly

                                  1. 4

                                    I don’t think this is a great response. Sure, you can emulate some features of dynamic types with Any everywhere, but the language isn’t holistically designed around dynamic types, so you’re swimming upstream when you want to do anything. Kinda like how you can emulate HOFs with the strategy pattern, but it’s not the same as having HOFs as a primitive.

                                    1. 2

                                      You say emulate some features - are there any features of dynamically typed languages that you can’t emulate in a statically typed language? Sure, additional boilerplate of Any is annoying. But the article talks about certain things being impossible to do in languages, not just annoying.

                                      1. 2

                                        Sure, some dynamically typed scripting languages can have programs rewrite their own code as strings and immediately interpret it without losing state. You can technically do that in Haskell by writing a dynamic Haskell interpreter and running that, but I’d call that a whole new language.

                                        Side note, I think Haskell has some dynamic typing features that I haven’t seen in actual dynamic languages, like witness types. You can have a value become untyped and later cast it (or a computation result) back to the right type because it was witnessed.

                                    2. 2

                                      Technologies have affordances, because technologies are opinionated. So, yes, you can reproduce certain alien patterns in various languages, but you’re going to be fighting uphill the whole time.

                                      1. 2

                                        Sure, but the article frames them as being impossible to do “Encouraging you to avoid something, however, is quite different from banning it outright.”

                                  2. 3

                                    The CPU, that dictator, doing exactly what you told it and shitting the bed as a result.

                                    Dictator being defined as something that does exactly what I tell it sounds a bit odd.

                                  1. 3

                                    Having this available is actually pretty exciting. The fact that it doesn’t do encryption itself is a little limiting, though. On my personal machines, I’ll probably install Pantalaimon to get it working (and give encryption support to Fractal, too), but that’s not so much an option for my Windows machine at work.

                                    1. 2

                                      Encryption is pretty rare on third party implementations of matrix from what I’ve seen. I don’t know if the protocol is difficult or if people don’t feel up to the task of implementing it.

                                      1. 3

                                        Well, you know what they say about implementing encryption yourself. :)

                                        One issue is that libolm is not usable from within Emacs, unless someone were to write a wrapper to use it as a dynamic module. Even then, there would still be much potential to make mistakes that would result in weaknesses. Then there are all the complex UX issues regarding key management, verification, etc. Since Pantalaimon is available and works well, it seems like a good solution.

                                    1. 6

                                      Debian has become my favorite Linux distro recently. It is surprisingly good.

                                      1. 10

                                        Why surprisingly? It’s the foundation of a lot lot lot of distros

                                        1. 5

                                          That’s interesting, because I can’t stand it. Things are changed at random so programs are different, and package management seems to like to break at random. What makes it your favourite?

                                          1. 4

                                            I’ve been using stable since 2008. I can remember one instance where pulling in a package update broke a program: it was when Chromium switched to requiring a GPU and then had a horrid CVE that no one could backport to stable; suddenly I couldn’t use it over ssh -X any more. Hard to place much blame on Debian for that though.

                                            I’d imagine you’d see more breakage running unstable but like … that’s literally what it says on the tin.

                                            1. 2

                                              What in the world? There is hardly a less “things break at random” system than Debian.

                                              1. 2

                                                Apache’s configs being entirely different for no reason has bitten me more than once. Still not sure why that is, it’s pretty horribly annoying.

                                                1. 1

                                                  Why would you think it’s for no reason? Actually that’s an example of exceptional care being taken to avoid things breaking at random. It means that you can have packages that provide Apache modules, and packages that provide entire websites (say, Wordpress or netdata), and expressible dependencies between them, and they don’t step on each other, local config is never blown away by upgrading packages, and generally speaking the sysadmin doesn’t get unpleasant surprises.

                                                  Admittedly, it doesn’t really feel “different” to me, because I got used to it 20 years ago and have only rarely had to deal with Apache on systems that didn’t do it that way, but what I will say is that it works, and that it’s not arbitrary — basically all of the packaging guidelines (which amounts to a book worth of material) come from a place of “how to be predictable, reproducible, and avoid breakage”. But it is assumed that admins know their system; being different from some other distro or upstream defaults isn’t breakage in and of itself, when those differences are justified and documented (which they certainly are in the case of Apache).

                                                  1. 2

                                                    I’d rather have the config files match with examples online (and the official docs!) than have any of those features, though. What do other distros do with Apache modules? I’ve never had breakage in them and they don’t do anything like debian.

                                                2. 1

                                                  This might have been around 2004, when I encountered a legacy Debian Stable that had missed out on a stable release. So it was like oldoldstable.

                                                  Upgraded directly to the contemporary stable and everything went perfectly, despite skipping over a major release altogether.

                                                  It was beautiful.

                                              2. 3

                                                It’s been mine since around 1996. I try running other operating systems but I’m so used to the availability of software, the stability of updates and the general attention to detail that I have a hard time using anything else.

                                              1. 1

                                                I’m always curious what people see in reader… Why not just pass Context as the first argument and do it that way? What does the monad wrapper get you?

                                                1. 1

                                                  not having to pass Context as the argument in the rhs is nice enough, I think. Adding exceptions or any other monad effect is also a breeze with monad transformers.

                                                1. 3

                                                  you can do this with state as well: I think the local-scope function for state is withState but I can’t quite remember. Reader is great because then you know for absolute sure that you won’t have any scoping headaches.

                                                  1. 2

                                                    That is true and I should have pointed it out. Another nice quality of doing this with Reader is that you don’t have the ability to mutate the state for a given scoping.

                                                  1. 1

                                                    That’s a pretty long list, is there anything in it other than more hairshirting?

                                                    1. 4

                                                      a lot of hairshirting, I think. Some of these projects feel kind of cargo-culted— “if we imitate the look of old computers, maybe we’ll last as long as they did! If we imitate their character set, or their languages, or their architecture, it’ll last forever just like how I remember them!”

                                                      maybe I’m being too cynical, though.

                                                      1. 3

                                                        I understand the desire for longevity in platforms. But if there were a disaster that wrecks society to the point chip production ends, the hardware we have left (that is rootable) is x86. If you want software that will run without (static) recompiling for decades, we already have that in both x86 and JVM.

                                                        When it’s just done for fun / art, like UXN, I’m all for it tho :)

                                                    1. 1

                                                      applying to more places, reading “journey to the end of the night.” getting my second vaccine, also.

                                                      1. 1

                                                        Skimming through the article, I get the sense that a career’s-worth of skill and knowledge went into performing that analysis.

                                                        Now, in 2021, could someone let me know what books, articles and/or papers I can read as a cryptography beginner to be able to understand this article, say six months down the line.

                                                        For example, what’s a Level 3 and a Level 1 hash? I need to learn the background which will help me understand concepts like that.

                                                        1. 2

                                                          “Hash Levels” is pretty non-standard terminology I think. The source is this: http://nohatcoder.dk/2019-05-19-1.html. It seems that some cryptographers dislike these categories– the reddit comments for this article have one complaining about the lack of rigor in the level descriptions.

                                                          For learning cryptography, I really, really enjoyed reading Prof. Rosulek’s Joy Of Cryptography: https://web.engr.oregonstate.edu/~rosulekm/crypto/. I think it’s still a work in progress, though.

                                                          1. 1

                                                            Wow, that looks great, and also links to other good resources. Bookmarked. Thank you!

                                                        1. 2

                                                          Can someone expand on the relevance of this?

                                                          1. 4

                                                            “Plan 9 is not for you” — http://fqa.9front.org/fqa0.html#0.1.3

                                                            1. 4

                                                              It’s a release of a niche operating system. Normally there’s not much to say about these, but the switch to git9 and git/fs is really cool. I want to check out more of that.

                                                            1. 25

                                                              Find lots of tools I have in my ~/bin here: https://leahneukirchen.org/dotfiles/tools.html

                                                              Interesting is, maybe:

                                                              And lots of more goodies in my .zshrc.

                                                              1. 3

                                                                Thanks, these are helpful.

                                                                Would you happen to have a script that turns a top-posted email (reply on top of the quote) into a bottom-posted one? I’ve been trying to find the time to make it myself, as I couldn’t find one already, but haven’t yet.

                                                                Ditto with a wrapper of Git to allow named staging areas.

                                                                1. 1

                                                                  Conversion, no, there is t-prot which strips the bottom full quote.

                                                                  You can do the latter with multiple GIT_INDEX_FILE but it gets messy. I don’t know better tooling on top.

                                                                  1. 1

                                                                    (Personally, I use git-revise to amend to older patches.)

                                                                2. 3

                                                                  These date tools are hilarious. Do you actually have use for the days since the french revolution? Is that what it does?

                                                                  1. 5

                                                                    my favorite date tool: https://linux.die.net/man/1/ddate. It’s a shame it was removed from coreutils.

                                                                    $ ddate
                                                                    Today is Boomtime, the 51st day of Confusion in the YOLD 3187
                                                                    
                                                                    1. 5

                                                                      It’s the French “metric” calendar they used for a few years after the revolution. It’s one part that didn’t really stick.

                                                                      At any rate, this is a nice date-related script I often use (tz):

                                                                      #!/bin/zsh
                                                                      
                                                                      [ -n "$1" ] && time="-d @$(date -d "$1" +%s)" || time=
                                                                      printf '%-15s' 'US West';     TZ='America/Los_Angeles' date '+%H:%M %z %Z' $time
                                                                      printf '%-15s' 'US East';     TZ='America/New_York'    date '+%H:%M %z %Z' $time
                                                                      printf '%-15s' 'UTC';         TZ='UTC'                 date '+%H:%M %z %Z' $time
                                                                      printf '%-15s' 'Ireland/UK';  TZ='Europe/Dublin'       date '+%H:%M %z %Z' $time
                                                                      printf '%-15s' 'West Europe'; TZ='Europe/Amsterdam'    date '+%H:%M %z %Z' $time
                                                                      printf '%-15s' 'New Zealand'; TZ='NZ'                  date '+%H:%M %z %Z' $time
                                                                      printf '\n\x1b[1m%-15s' 'Current'; date '+%H:%M %z %Z' $time; printf '\x1b[0m'
                                                                      

                                                                      Just tz will print the times in all the timezones, and tz 1900 (or tz 19:00, tz 7pm) will print the times corresponding to 19:00 in all the timezones.

                                                                      1. 1

                                                                        I was mostly interested in the decimal time, but then I went with it and implemented the calendar too.

                                                                      2. 1

                                                                        Huh, I’m intrigued by that cupless script (as I’ve never enjoyed dealing with cups…). Seems very neat. I’d be interested to know how it is used. Is it only for network printers, or local ones too?

                                                                        1. 1

                                                                          Network printers that speak JetDirect.

                                                                      1. 4

                                                                        TBH, I’m not sure why one would do this other than e-Cred. You can find e-waste that will outperform this for dirt cheap; business desktops and even laptops.

                                                                        1. 2

                                                                          I personally did this back in 2012 when my 2008 Mac Pro died. I didn’t have any money to replace it and so used my Raspberry Pi as a daily driver for nearly two years until I had enough saved to buy a new computer.

                                                                          1. 1

                                                                            weight, power consumption, replaceability of hardware, maybe? you are right, I’m pretty sure buying a dirt cheap old thinkpad would be a much better experience, but they’re pretty heavy.

                                                                            1. 3

                                                                              It’s not like a Pi is a laptop without having to add a bunch of awkward peripherals.

                                                                            2. 1

                                                                              Cost of the unit isn’t necessarily the only factor. For me, having something that is energy efficient is important, especially if it’s on for many hours a day, ever day. It’s hard to beat the power consumption of a rpi or other ARM SBC with any ageing business desktop/laptop. Of course I’m assuming a typical workflow that doesn’t need a powerful system to begin with…

                                                                              1. 4

                                                                                I’d think if you were looking at a laptop, something like a Pinebook might be more appropriate than a Pi. (I would also suggest the M1 Macs, but I suspect someone using IceWM on a Pi probably wouldn’t want one no matter how good it is.)

                                                                                1. 1

                                                                                  Yeah good point. Though if I were looking for a “desktop”, the rpi or something like it would be better than the pinebook since I’d want to use my own display and keyboard (so paying the premium for those in the pinebook doesn’t make a lot of sense)

                                                                            1. 9

                                                                              Will this improve the reader’s next program? Will it deepen their understanding of their last program?

                                                                              This is the big one for me. With open source projects, there’s at least a chance I could look at the code, or if it’s a library actually use it in my next project. If it’s closed source, all I “learn” is that there’s another thing out there that I could buy.

                                                                              1. 5

                                                                                Though notably, even for FOSS projects, posting every single release here can IMO be considered spammy. One interesting case study is andyc’s blog posts about Oil shell; they are much more than just “releases”, they tend to provide interesting insights every time, I love reading each of them with highest attention - yet apparently a notable portion of lobster.rs readers still started getting tired even of them at some point, and I think the current (unspoken?) compromise is more or less that Andy mostly refrains from submitting his own articles, but others occasionally do and that is seen as OK.

                                                                                1. 1

                                                                                  If it’s closed source, all I “learn” is that there’s another thing out there that I could buy.

                                                                                  Or about the models people use for computation.

                                                                                1. 13

                                                                                  Context: https://github.com/microsoft/terminal/issues/10362

                                                                                  unfortunately the ms folks locked the thread, what a pity. wonder if anyone’s sent the video to them yet :-)

                                                                                  1. 12

                                                                                    Even though they might be wrong, leaving the thread open would only allow the randos on github pile abuse on them, and that’s not really necessary.

                                                                                    I hope that they can watch the video and introspect if the main reason they quote: code maintainability, really warrants the 2, 3 orders of magnitude slower code. I personally doubt it.

                                                                                    1. 5

                                                                                      I really doubt it as well. if anything, Muratori’s code here is even more maintainable just by virtue of less lines of code— I think the only excuse that sort of holds water is super-backwards compatibility constraints, and even then I don’t know if that’s legit.

                                                                                    2. 6

                                                                                      They’ve seen it, and they’re working on it, see (and please don’t spam…) : https://github.com/microsoft/terminal/issues/10461

                                                                                    1. 6

                                                                                      Having terminal text be editable is really nice. Instead of having to fiddle with history, you can just scroll up and modify the command you sent yourself. Plan9’s shell lets you do this and it’s great.

                                                                                      1. 4

                                                                                        Although I’ve never used the Plan9 shell myself, I’m a fan of eshell’s smart display, which seems to come from Plan9 https://masteringemacs.org/article/complete-guide-mastering-eshell#plan-9-smart-shell

                                                                                        1. 1

                                                                                          I don’t get why it can possibly be great.

                                                                                          • Plan 9 terminal makes it easy to mess up commands and output history which I’m used to being immutable and append-only.
                                                                                          • When you want to repeat a command, you have to scroll up through multiple screens of text (using the mouse) and then copy the command with a mouse chord, and then scroll back to the end of the output and paste it. I find pressing Ctrl-P or the up arrow in any modern shell much more ergonomic.
                                                                                          • When I need to copy text output from the shell, I can use either the terminal emulator selection or tmux selection mode.
                                                                                          1. 1

                                                                                            I can speak about the eshell behavior that I like that seems to come from Plan9 (I may be mistaken on origin here)…

                                                                                            It’s hard to explain, eshell’s smart display leaves the cursor over executed command and allows editing to refine the command after seeing its output… unless you write a different command and you’re dropped to an empty prompt. That prolly didn’t make much sense… Here’s a gif https://imgur.com/a/0JIMrmS

                                                                                            1. 1

                                                                                              Yes, that looks much saner than the Plan9 terminal, with its minimalism laudable in theory, but painful in practice.

                                                                                            2. 1

                                                                                              Plan 9 terminal makes it easy to mess up commands and output history which I’m used to being immutable and append-only.

                                                                                              this is a change in expectations. I don’t expect my output history to be immutable and append only. it’s a bit like a printout, that I might want to write some temporary notes in.

                                                                                              When you want to repeat a command, you have to scroll up through multiple screens of text (using the mouse) and then copy the command with a mouse chord, and then scroll back to the end of the output and paste it. I find pressing Ctrl-P or the up arrow in any modern shell much more ergonomic.

                                                                                              I think the use shines in not repeating a command, but repeating a command with some modifications. I often find myself having to hit up arrow a bunch of times, left arrow to the spot I want to change, make the change. I don’t see how this is more ergonomic than “scroll up, click on spot I want to change, change, copy line and paste line.” Combining this with output modifications is great too: I can ls a directory and then write out the operations I want to do to each file in the output.

                                                                                              When I need to copy text output from the shell, I can use either the terminal emulator selection or tmux selection mode.

                                                                                              Right, and if you want to make any nontrivial edits to that output you then have to open it in an editor.