# 🚂 sl — Steam Locomotive [![GitHub stars](https://img.shields.io/github/stars/developtheweb/slTrain?style=social)](https://github.com/developtheweb/slTrain/stargazers) [![GitHub forks](https://img.shields.io/github/forks/developtheweb/slTrain?style=social)](https://github.com/developtheweb/slTrain/network/members) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Python](https://img.shields.io/badge/python-3.6+-blue.svg)](https://www.python.org/downloads/) [![Platform](https://img.shields.io/badge/platform-linux%20%7C%20macos%20%7C%20unix-lightgrey.svg)](https://github.com/developtheweb/slTrain) [![Dependencies](https://img.shields.io/badge/dependencies-none-brightgreen.svg)](requirements.txt) [![Maintained](https://img.shields.io/badge/maintained-yes-green.svg)](https://github.com/developtheweb/slTrain/commits/main) [![Website](https://img.shields.io/badge/website-StevenMilanese.com-blue.svg)](https://stevenmilanese.com) > You typed `sl`. You meant `ls`. The railroad thanks you for your patronage. ``` ==== ________ ___________ _D _| |_______/ \__I_I_____===__|_________| |(_)--- | H\________/ | | =|___ ___| / | | H | | | | ||_| |_|| | | | H |__--------------------| [___] | | ________|___H__/__|_____/[][]~\_______| | |/ | |-----------I_____I [][] [] D |=======|__ __/ =| o |=-~~\ /~~\ /~~\ /~~\ ____Y___________|__ |/-=|___|= || || || |_____/~\___/ \_/ \O=====O=====O=====O_/ \_/ ``` Every other command punishes a typo with an error message. `sl` rewards it with a steam locomotive. The entire point is maximal output for minimal input — two mistyped letters buy you a train, and you *will* watch it cross your terminal, because that is the punishment and the prize. This is a single-file, zero-dependency Python train that takes the joke entirely too seriously: a flicker-free double-buffered renderer, wheels that actually turn, smoke that drifts and dissipates, coal cars, a whistle, and a crash mode that earns its flag. ## ðŸŽē No two typos look alike A bare `sl` — the classic fumbled `ls` — rolls the dice on everything: locomotive type, coal-car count, color livery (four named themes plus fully random one-offs), and speed. Sometimes it whistles. Rarely, it flies. Very rarely, it does not make it across. | Event | Odds | |-------|------| | ⚓ The typo turns out to be nautical | about 1 in 3 | | ðŸ“Ģ The train (or ship) whistles | 1 in 4 | | 🐎 A dolphin escorts the voyage | 1 in 5 sea voyages | | ✈ïļ The train takes flight | 1 in 10 | | ðŸ’Ĩ The journey does not reach its destination | 1 in 20 | Pass any flag and the dice are off — explicit options are fully deterministic, so your customizations always behave exactly as written. ## ⚓ New in 4.0: the rails end at a shoreline Four vessels join the roster. Type `sl -t galleon` and a three-masted pirate ship crosses your terminal on an animated sea — flapping Jolly Roger, turning nothing, fearing nothing, figurehead shaped like a rubber duck. Her name is SQUEAKY. She has gunports. ``` |~~~~~~, ` ` ` ` |x_x__/ ` ` ` ` ` | ` ` ` |> | ` ` ` .___|___. .___|___. |> ( | \ ( | \ | ( | \ ( | \ .____|____. (___________\ (___________\ ( ( | ) \ ` | | ( ( | ) \ .____|____. .____|____. ( ( | ) \ ` ( ( | ) \ ( ( | ) \ (__)_________(__\ ` /| ( ( | ) \ ( ( | ) \ | / | ( ( | ) \ ( ( | ) \ /| _____ ` / |(__)_________(__\ (__)_________(__\ / | __|~ ~ ~| / | /|\ /|\ / || o o | file.txt` is a train. There is no escaping the train, only escape codes, and those are omitted. ## ðŸĪ” Why does this exist? We've all done it — typed `sl` when we meant `ls`. Instead of `command not found`, why not a gentle reminder in the form of a steam locomotive chugging across your terminal? - 📚 **Typing discipline through consequences** — muscle memory training, enforced by rail - 😄 **Whimsy in the command line** — terminals can be fun too - 🎭 **Coworker delight** — watch confusion turn to joy, then back to confusion when it crashes - 🧘 **Mandatory micro-breaks** — the train cannot be skipped, only awaited ## ❓ FAQ **Can I stop the train?** Ctrl+C works and exits cleanly. Learning to type `ls` also works, but nobody has ever managed it. **The train crashed. Is that a bug?** If you passed `-a`, that's a feature. If you didn't, that's a 1-in-20 roll of surprise mode, and honestly, it's a little bit on you for typing `sl`. **Why would a train fly?** 1-in-10 odds say you'll find out. **I asked for a dolphin and got a ship.** A dolphin will not follow a train. Requesting one books sea passage. **Why does the tug move diagonally?** It was drawn in three-quarter perspective, so it sails the angle its art implies — toward you. It appears to grow because it is, in the only sense that matters, getting closer. **Is this compatible with the original `sl`?** The spirit, the D51/C51 art heritage, and the `-a`/`-F`/`-l`/`-c` flags are all honored. The renderer, particles, and surprise mode are new. ## ðŸĪ Contributing Contributions are welcome — new locomotives, new liveries, new disasters. See the [Contributing Guidelines](CONTRIBUTING.md). ```bash git clone https://github.com/YOUR_USERNAME/slTrain.git cd slTrain git checkout -b feature/amazing-feature ./sl -F # test your changes git commit -m "Add amazing feature" git push origin feature/amazing-feature ``` ## 💖 Support the Project - ⭐ **Star this repository** — it helps others discover the train - 🐛 **Report bugs** — [open an issue](https://github.com/developtheweb/slTrain/issues) - ðŸ’Ą **Suggest features** — new train types, animations, or calamities - 🌐 **Visit my website** — [StevenMilanese.com](https://stevenmilanese.com) - ☕ **Buy me a coffee** — [buymeacoffee.com/strangequark](https://buymeacoffee.com/strangequark) ## 📝 License MIT — see [LICENSE](LICENSE). The train is free. The train has always been free. ## ðŸ‘Ļ‍ðŸ’ŧ Author **Reverend Steven Milanese** - 🌐 Website: [StevenMilanese.com](https://stevenmilanese.com) - 📧 Email: [contact@stevenmilanese.com](mailto:contact@stevenmilanese.com) - 🐙 GitHub: [@developtheweb](https://github.com/developtheweb) - 💞 LinkedIn: [Connect with me](https://stevenmilanese.com/linkedin) ## 🙏 Acknowledgments - Inspired by the original `sl` by **Toyoda Masashi** (1993), who understood that the punishment for a typo should be beautiful - The coal car art is adapted from the original `sl` - Thanks to all [contributors](https://github.com/developtheweb/slTrain/graphs/contributors) - Special thanks to the first stargazer who inspired this update ⭐ ## 📊 Project Stats ![GitHub commit activity](https://img.shields.io/github/commit-activity/m/developtheweb/slTrain) ![GitHub last commit](https://img.shields.io/github/last-commit/developtheweb/slTrain) ![GitHub code size](https://img.shields.io/github/languages/code-size/developtheweb/slTrain) ---

It's not a bug, it's a locomotive. 🚂

Made with âĪïļ by Reverend Steven Milanese
Visit StevenMilanese.com for more projects