[HN Gopher] lc: List files in categories (and columns) - from Co...
       ___________________________________________________________________
        
       lc: List files in categories (and columns) - from Coherent Unix
       clone
        
       Author : networked
       Score  : 72 points
       Date   : 2025-01-10 10:10 UTC (12 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | oguz-ismail wrote:
       | No colorful text, no emojis, no Unicode decorations. Nice.
        
         | _benj wrote:
         | No rust either?
        
           | PittleyDunkin wrote:
           | Next we gotta jettison capital letters to really trim the
           | cruft
        
           | buserror wrote:
           | The day is still young. Wait for it, there'll be one (or 3)
           | soon.
           | 
           | With 865 dependencies pulled in by cargo :-)
        
             | rbanffy wrote:
             | is there a leftpad crate?
        
           | pjmlp wrote:
           | Old news, now it is all about RIIZ.
        
           | networked wrote:
           | This thread gave me an idea to port lc. lc has a hardcoded
           | line width of 79 characters, and I wanted it to detect the
           | terminal width. I realized this would be convenient and
           | portable in Go. Here is my port:
           | https://github.com/dbohdan/lc-go. I submitted the story, but
           | I swear I didn't plan this from the start. Maybe I'll add
           | color next...
        
       | hk__2 wrote:
       | If the author sees this: please copy/paste the manual in your
       | README instead of including an image with text on it. You'll help
       | blind people and search engines.
        
         | lewiscollard wrote:
         | Not author, but lc was posted on HN some years ago and at the
         | time I was like "oh, I should really port over the original man
         | page some day". After which I half did it, then forgot about
         | it. I'm commenting here to commit myself to actually finishing
         | that!
        
           | oguz-ismail wrote:
           | There's a man page here <https://github.com/gspu/Coherent/blo
           | b/a00b86ea22c66625cf1838...>
        
             | lewiscollard wrote:
             | There's also one in this PR now :) Saying I'm going to do
             | something is more likely to get it done than just thinking
             | about it! https://github.com/gdm85/lc/pull/1/files
             | 
             | But, yes, that is the manual page I converted from
             | (actually I grabbed it from the tarballs linked in the
             | README - should be the same thing). My entire experience of
             | troff would fit on the inside of a Rizla packet with some
             | space to spare, but looking at the original I think it was
             | using some special macro package that doesn't exist on
             | modern systems. So I re-wrote it to use `-man` macros as
             | best I could, but also included the original man page
             | source for anyone that thinks they can do a better job in
             | future.
        
               | hk__2 wrote:
               | Thank you for the PR!
        
               | lewiscollard wrote:
               | <3
        
       | jll29 wrote:
       | Nice to read an older piece of clean C code once in a while.
       | Gives me that cozy retro feel and fond childhood memories.
       | 
       | Beautifying the output sounds like a good idea, perhaps something
       | like this should be an option of standard ls?
       | 
       | What strikes me is that the code (which is very idiomatic of C
       | code) is very expressive at the function level, but most of it
       | happens inside the few functions, and the function bodies are
       | much less readable for those who don't write C ls clones all day.
       | The main function is very long because it handles command line
       | switches, that boilerplate could be moved to a function or
       | library.
       | 
       | The file lc.1 (UNIX man pasge) is missing, as has already. been
       | pointed out.
       | 
       | * simple/compact: single file
       | 
       | * small: 446 lines of C code
       | 
       | * flat/monolithic: lots of global variables, no separation
       | between functionality and I/O, no separation between command and
       | library API that does the core part of the work.
       | 
       | (Just posting what was on my mind, not my intention to attack
       | this fine work!)
        
         | christophilus wrote:
         | I think it's fine. The code is clear enough and easy enough to
         | maintain. There's nothing wrong with a good top-down flow
         | through a long function in my opinion. Especially when you're
         | dealing with a small, focused tool like this.
        
       | boxed wrote:
       | The categories being "files" and "directories"? So just two
       | categories?
        
         | tyingq wrote:
         | if (dflag) prtype(dirs, "Directories"); if (fflag)
         | prtype(files, "Files"); if (lflag) prtype(links, "Symlinks");
         | if (cflag) prtype(chars, "Character special files"); if (bflag)
         | prtype(blocks, "Block special files"); if (pflag) prtype(pipes,
         | "Pipes"); if (mflag) prtype(mults, "Multiplexed files");
        
         | mrweasel wrote:
         | Categories are difference from what I expected as well, I was
         | thinking file types.
         | 
         | This is really nice though. I do like that directories and
         | files are separate. You could probably hack this a bit and give
         | you directories, git repos and files. I know that a git repo is
         | just a directory, with special files, but it's surprisingly
         | often that I find myself wondering if a directory is a git
         | repo.
        
       | BSDobelix wrote:
       | BTW, one can download Coherent as a VM:
       | 
       | https://www.icl1900.co.uk/unix4fun/coherent/ftp/vms/
       | 
       | Additional Information:
       | 
       | https://www.icl1900.co.uk/unix4fun/coherent/
       | 
       | http://www.nesssoftware.com/home/mwc/
        
         | ForOldHack wrote:
         | Thank you. In the dawn to f the unix wars, after giving up on
         | Xenix, and getting a fast 386, someone loaned me a copy of the
         | runtime - what a breath of fresh air. After a week, I ordered
         | the full package. I remember some things it would do - like it
         | snapped. Then documentation left something to be desired, so
         | the company send me a disk of the updated documentation,and
         | it's short comings were no longer a concern.
         | 
         | Apparently it impressed Dennis R. Enough to say it was the very
         | best clone, and no, it did not infringe on the source code.
        
           | rbanffy wrote:
           | I remember one reviewer that couldn't make the Coherent copy
           | of uucp to talk to another Unix machine's uucp, but that it
           | worked fine between two Coherent machines and, therefore,
           | joked it should be renamed cccp (as in Coherent to Coherent
           | Copy Program)
        
       | Rucadi wrote:
       | Hacked pretty fast a version with json support, not pretty but
       | just as a concept: https://github.com/Rucadi/lc
        
         | choffee wrote:
         | I give you the file called ":
        
           | oguz-ismail wrote:
           | What's the point of JSON output anyway? UNIX filenames can
           | contain arbitrary sequences of bytes except NUL and /, they
           | can't be represented as JSON strings.
        
       | ZoomZoomZoom wrote:
       | Not to be confused with another lc, which is a highly
       | configurable "multi-dimensional"[1] file lister focused on
       | flexibility and configurability, written in Nim.
       | 
       | https://github.com/c-blake/lc
       | 
       | Key features:
       | 
       | - Multi-level sorting by combinations of attributes like size,
       | time, and file type, with user-defined precedence
       | 
       | - Configurable file kind sorting order
       | 
       | - Value-dependent coloring for file attributes such as
       | timestamps, permissions, or sizes.
       | 
       | - Abbreviations: Automatically shorten filenames, user/group
       | names or symlink targets.
       | 
       | - File type classification: Integrates libmagic for file type
       | inspection.
       | 
       | - Hyperlink support
       | 
       | - Per-directory configs: custom behaviors for specific
       | directories using local tweak files (.lc).
       | 
       | - Lightweight (~900 lines of code) with only author's CLI library
       | "cligen" and Nim's stdlib as dependencies.
       | 
       | and more.
       | 
       | [1]: https://github.com/c-blake/lc#vector-typemulti-
       | dimensionalit...
        
       | jmclnx wrote:
       | I was a Coherent User and lc was my goto file list.
        
       | layer8 wrote:
       | I wouldn't call it listed in columns when the order is row-major.
       | Rather listed in rows.
        
       ___________________________________________________________________
       (page generated 2025-01-10 23:02 UTC)