Skip to content(if available)orjump to list(if available)

Using Ed(1) as My Static Site Generator

snackbroken

> But then, ed is so simple and more or less standard

More or less? ED IS THE STANDARD TEXT EDITOR! [1]

[1] https://www.gnu.org/fun/jokes/ed-msg.html

staplung

""" When I use an editor, I don't want eight extra KILOBYTES of worthless help screens and cursor positioning code! I just want an EDitor!! Not a “viitor”. Not a “emacsitor”. Those aren't even WORDS!!!! ED! ED! ED IS THE STANDARD!!! """

strogonoff

> Of course, on the system I administrate, vi is symlinked to ed. Emacs has been replaced by a shell script which 1) Generates a syslog message at level LOG_EMERG; 2) reduces the user's disk quota by 100K; and 3) RUNS ED!!!!!!

wtetzner

> Note the consistent user interface and error reportage. Ed is generous enough to flag errors, yet prudent enough not to overwhelm the novice with verbosity.

01HNNWZ0MV43FF

More? Less? Why are we talking about pagers? Who's on first?

fredoralive

who on first? I don’t think you can use who as init.

Henchman21

Not with that attitude!

EuAndreh

Besides being the stardand, it also has a standard:

https://pubs.opengroup.org/onlinepubs/9799919799/utilities/e...

aartaka

And my scripts are fully POSIX-compliant, running on GNU, slewsys, and OpenBSD ed(1), so the standard is pretty reasonable.

adamors

Was hoping to see this here, still makes me laugh after discovering it 20 years ago.

BoingBoomTschak

The quite cool journey of a hacker trying to find his favourite SSG itch scratching position.

What inspired me to post it is that I cobbled a fun HTML preprocessor using cpp to someone today: https://git.sr.ht/~q3cpma/html-cpp (I use a Common Lisp contraption for myself).

tonymet

I love how much utility 60+ year old Unix commands have. Very powerful, requiring only a few kB of ram, and even 20+ years later, I’m still discovering new utilities.

I did something similar for https://isgithubipv6.web.app/ . Most static site generators are huge ( I was aiming for < 5mb docker container) . I went with `envsubst` , env vars and a simple HTML template.

xelxebar

Nice! Another tantalizing rabbit hole.

I go full in on ed sporadically. It requires a bit of a brain rewire, but tye UX is closer to pencil and paper, which is hard to beat for encouraging deeper thought, IMHO.

Also, check out edbrowse for a line-oriented browser:

https://en.wikipedia.org/wiki/Edbrowse

It's developed by a blind coder and has a nice core following.

aartaka

I'm aware of edbrowse and am trying to use it more!

WD-42

Fantastic. The Unix hackers are alive and well. Keep it real.

Rendello

I did my resume in groff once, formatted like a man page. It didn't look half-bad either.

fiddlerwoaroof

This is a great idea

DaSHacka

100%, I'd love to see the template if GP ever makes a blog post about it

aartaka

I think Unix hackers would get horrified by how wrong and non do-one-thing-well my setup is. ed(1) was never intended to be an SSG, after all.

sgt

I once used m4 to generate my blog. Worked like a charm!

somat

Oh man massive nostalgia hit.

When I was younger I was trying to learn the traditional unix tools, so I sat down with a copy of openbsd and made a wiki using only what was found in the base system, and perl was cheating. The templating engine was m4, web server in shell, page history in rcs, a really neat back reference system in awk(when you square linked to another page, it would put a link back in the backreference section of that other page, inspired by everything2) ...

Now I am trying to see if I have any of the code saved... It was probably one huge pile of injection vectors... but they were my injection vectors.

Hah, found it, Apologies for inflicting it on everyone, But I was having too much fun trying to figure out what past me was on.

https://nl1.outband.net/fossil/gami/dir?ci=tip&type=tree

smlavine

I once used m4 to generate my blog. Hated it. Escaping was a nightmare and I was always afraid I'd quote something wrong.

PhilipRoman

I use m4 with -P option and m4_changequote({{,}})

Personally I find it quite reasonable for code that you don't plan on changing any time soon.

kragen

Those seem like they would make it bearable. Also GNU m4 has an extension to standard m4 which doesn't replace builtin macro names that take arguments if you omit the (). Without that, every unquoted occurrence of words like format, index, join, quote, builtin, define, copy, or capitalize silently vanishes. It's a nightmare. You can also avoid this problem with changeword or -P.

aartaka

Same experience, that's why I've decided on something more down-to-the-earth and imperative.

susam

Impressive! Only three leaps away from using butterflies as static site generator!

kevin_thibedeau

> It has no file inclusion, for one. So C Preprocessor's #include is no longer accessible. I manage without it

m4 is always there with better macros than CPP.

aartaka

Actually, I figured file inclusion: https://codeberg.org/aartaka/pages/commit/a7204e7cb1d389d8e7...

Only required recursively calling ed with a pre-baked script :D

regus

I really like the idea of ed. I tried using it recently but having to constantly reprint the block of code you are editing was really tedious.

skydhash

I think the idea of ed is to embrace the edit-compile-cycle. So the error tell you the specific line to go to. Then after the obvious errors are out, you do a full printout to handle logic errors.

Avshalom

The idea of Ed is that you have a large spool of paper and you make little editing marks on the printout until you decide you've reached some threshold and then print out a fresh up-to-date copy

cardiffspaceman

It’s always fun to figure out the path through the error messages that changes the error line numbers the least, so you don’t have to search or recompile.

null

[deleted]

djoldman

> Should You Use ed As Site Generator?

> No, not at all.

Well, it (totxt.ed) looks pretty inscrutable to me:

  H
  !# Include proxy title
  !# Insert fallback values
  ?<head>?a
  <SUBTITLE></SUBTITLE>
  <DESCRIPTION></DESCRIPTION>
  <IMAGE></IMAGE>
  <IMAGE_ALT></IMAGE_ALT>
  .
  w
  !# Include the template files via script
  g/\(<!--\)*[<#]include \(file=\)*"*\([^">]*\)"* *-*\/*>*/s//&\
  \/[<#]include\/d\
  -1r \3\
  wq\
  /
  g/[<#]include "*\([^">]*\)"*\/*>*/d\
  .,+3w !ed %
  E
  !# Repeat the second time for recursive includes
  g/\(<!--\)*[<#]include \(file=\)*"*\([^">]*\)"* *-*\/*>*/s//&\
  \/[<#]include\/d\
  -1r \3\
  wq\
  /

kragen

Huh, I didn't know you could do that in ed. It doesn't look inscrutable to me, just confusing.

rahen

It still looks a lot more legible than a TECO script. ed was a big improvement in ergonomics.

aartaka

It was never supposed to be read by a sane mortal.