[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)