From dd463916fbecb73732d5a6765c45fde5688b8dc0 Mon Sep 17 00:00:00 2001 From: Colin McDonnell Date: Thu, 22 Jun 2023 21:48:46 -0700 Subject: [PATCH 1/4] Write docs --- README.md | 84 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 69 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index e5cc687..95895b3 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Terminal screenshot tool, which takes the console output and renders an output image that resembles a user interface window. The idea is similar to what [carbon.now.sh](https://carbon.now.sh/), [instaco.de](http://instaco.de/), or [codekeep.io/screenshot](https://codekeep.io/screenshot) do. Instead of applying syntax highlight based on a programming language, `termshot` is using the ANSI escape codes of the program output. The result is clean screenshot (or recreation) of your terminal output. If you want, it has an option to edit the program output before creating the screenshot. This way you can remove unwanted sensitive content. Like `time`, `watch`, or `perf`, just place `termshot` before the command and you are set. -For example, `termshot --show-cmd -- lolcat -f <(figlet -f big foobar)` will create a screenshot which looks like this: ![example](.docs/images/example.png?raw=true "example screenshot") +For example, `termshot --show-cmd -- lolcat -f <(figlet -f big foobar)` will create a screenshot which looks like this: ![example](.docs/images/example.png?raw=true 'example screenshot') ## Installation @@ -21,24 +21,78 @@ Use `homebrew` to install `termshot`: `brew install homeport/tap/termshot` The [releases](https://github.com/homeport/termshot/releases/) section has pre-compiled binaries for Darwin, and Linux. -## Notes +## Usage -- Since both `termshot` and your command can have command line flags, it is recommended to use `--` to separate them. +Prefix the command you want to screenshot with `termshot -- `. Since both `termshot` and your _target command_ (e.g. `ls`) may accept command line flags, the `--` is used to separate the two. - ```sh - termshot --edit -- tool --apply --force - ``` +```sh +termshot -- ls -a +``` -- If you want to run a command and pipe the output into another, you have to use quotes to make this clear on the command line. +This will generate an image file called `out.png` in the current directory. - ```sh - termshot --show-cmd -- "figlet foobar | lolcat" - ``` +![basic termshot](https://github.com/homeport/termshot/assets/3084745/11b578ee-8106-4e71-a1b8-57bbca4b192f) -- In order to work, `termshot` uses a pseudo terminal for the command to be executed. This means you can invoke a fully interactive shell and capture the entire output. The screenshot is created once you terminate the shell. +In some cases—say, if your target command contains _pipes_—there may still be ambiguity, even with `--`. In these cases, wrap your command in double quotes. - ```sh - termshot /bin/zsh - ``` +```sh +termshot -- "ls -a | grep g" +``` -- _Please note:_ This project is work in progress. Although a lot of the ANSI sequences can be parsed, there are definitely commands in existence that create output that cannot be parsed correctly, yet. Also, commands that reset the cursor position are known to create issues. +![out](https://github.com/homeport/termshot/assets/3084745/25c8832b-d2a8-433a-8f20-412e7b3c5232) + +### `--show-cmd`/`-c` + +Include the target command in the screenshot. + +```sh +termshot --show-cmd -- "ls -a" +termshot --c -- "ls -a" +``` + +![out](https://github.com/homeport/termshot/assets/3084745/3fbdd952-785d-4865-b216-f33bdaceb4da) + +### `--edit`/`-e` + +Edit the output before generating the screenshot. This will open the rich text output in the editor configured in `$EDITOR`, using `vi` as a fallback. + +```sh +termshot --edit -- "ls -a" +termshot -e -- "ls -a" +``` + +![out](https://github.com/homeport/termshot/assets/3084745/3fbdd952-785d-4865-b216-f33bdaceb4da) + +### `--filename`/`-f` + +Specify a path where the screenshot should be generated. This can be an absolute path or a relative path; relative paths will be resolved relative to the current working directory. + +```sh +termshot -- "ls -a" # defaults to /out.png +termshot --filename my-image.png -- "ls -a" +termshot --filename screenshots/my-image.png -- "ls -a" +termshot --filename /Desktop/my-image.png -- "ls -a" +``` + +Defaults to `out.png` + +### `--version`/`-v` + +Print the version of `termshot` installed. + +```sh +$ termshot --version +termshot version 0.2.5 +``` + +![out](https://github.com/homeport/termshot/assets/3084745/3fbdd952-785d-4865-b216-f33bdaceb4da) + +### Multiple commands + +In order to work, `termshot` uses a pseudo terminal for the command to be executed. For advanced use cases, you can invoke a fully interactive shell, run several commands, and capture the entire output. The screenshot will be created once you terminate the shell. + +```sh +termshot /bin/zsh +``` + +> _Please note:_ This project is work in progress. Although a lot of the ANSI sequences can be parsed, there are definitely commands in existence that create output that cannot be parsed correctly, yet. Also, commands that reset the cursor position are known to create issues. From 15dd008f78f297c86ffe16d35c27b9090ed04579 Mon Sep 17 00:00:00 2001 From: Colin McDonnell Date: Thu, 22 Jun 2023 21:58:18 -0700 Subject: [PATCH 2/4] More tweaks --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 95895b3..fb37225 100644 --- a/README.md +++ b/README.md @@ -7,23 +7,23 @@ [![Go Reference](https://pkg.go.dev/badge/github.com/homeport/termshot.svg)](https://pkg.go.dev/github.com/homeport/termshot) [![Release](https://img.shields.io/github/release/homeport/termshot.svg)](https://github.com/homeport/termshot/releases/latest) -Terminal screenshot tool, which takes the console output and renders an output image that resembles a user interface window. The idea is similar to what [carbon.now.sh](https://carbon.now.sh/), [instaco.de](http://instaco.de/), or [codekeep.io/screenshot](https://codekeep.io/screenshot) do. Instead of applying syntax highlight based on a programming language, `termshot` is using the ANSI escape codes of the program output. The result is clean screenshot (or recreation) of your terminal output. If you want, it has an option to edit the program output before creating the screenshot. This way you can remove unwanted sensitive content. Like `time`, `watch`, or `perf`, just place `termshot` before the command and you are set. - -For example, `termshot --show-cmd -- lolcat -f <(figlet -f big foobar)` will create a screenshot which looks like this: ![example](.docs/images/example.png?raw=true 'example screenshot') +Generate beautiful screenshots of your terminal, from your terminal. ## Installation -### macOS - -Use `homebrew` to install `termshot`: `brew install homeport/tap/termshot` +To install with Homebrew on macOS or Linux: -### Binaries +```sh +brew install homeport/tap/termshot +``` -The [releases](https://github.com/homeport/termshot/releases/) section has pre-compiled binaries for Darwin, and Linux. +See [Releases](https://github.com/homeport/termshot/releases/) for pre-compiled binaries for Darwin and Linux. ## Usage -Prefix the command you want to screenshot with `termshot -- `. Since both `termshot` and your _target command_ (e.g. `ls`) may accept command line flags, the `--` is used to separate the two. +This tool reads the console output and renders an output image that resembles a user interface window. It's inspired by some other web-based tools like [carbon.now.sh](https://carbon.now.sh/) and [codekeep.io/screenshot](https://codekeep.io/screenshot). Unlike those tools, `termshot` does not blindly apply syntax highlighting to some provided text; instead it reads the ANSI escape codes ("rich text") logged by most command-line tools and uses it to generate a high-fidelity "screenshot" of your terminal output. + +Like `time`, `watch`, or `perf`, just prefix the command you want to screenshot with `termshot -- `. ```sh termshot -- ls -a @@ -54,7 +54,7 @@ termshot --c -- "ls -a" ### `--edit`/`-e` -Edit the output before generating the screenshot. This will open the rich text output in the editor configured in `$EDITOR`, using `vi` as a fallback. +Edit the output before generating the screenshot. This will open the rich text output in the editor configured in `$EDITOR`, using `vi` as a fallback. Use this flag to remove unwanted or sensitive output. ```sh termshot --edit -- "ls -a" From 86ca5c775a3824b393a926f77d478944cd1bbeb6 Mon Sep 17 00:00:00 2001 From: Colin McDonnell Date: Thu, 22 Jun 2023 22:06:01 -0700 Subject: [PATCH 3/4] Update screenshots --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fb37225..6d8032b 100644 --- a/README.md +++ b/README.md @@ -36,10 +36,10 @@ This will generate an image file called `out.png` in the current directory. In some cases—say, if your target command contains _pipes_—there may still be ambiguity, even with `--`. In these cases, wrap your command in double quotes. ```sh -termshot -- "ls -a | grep g" +termshot -- "ls -l | grep go" ``` -![out](https://github.com/homeport/termshot/assets/3084745/25c8832b-d2a8-433a-8f20-412e7b3c5232) +![out](https://github.com/homeport/termshot/assets/3084745/5d0dd1ab-820d-46fc-8af7-8a294193c5ca) ### `--show-cmd`/`-c` From e1f411d4094a107d4a20c70f0dbfca77de3b5e92 Mon Sep 17 00:00:00 2001 From: Colin McDonnell Date: Thu, 22 Jun 2023 22:11:27 -0700 Subject: [PATCH 4/4] Switch to all gh assets, add back original screenshot --- .docs/images/example.png | Bin 41896 -> 0 bytes README.md | 22 ++++++++++++++-------- 2 files changed, 14 insertions(+), 8 deletions(-) delete mode 100644 .docs/images/example.png diff --git a/.docs/images/example.png b/.docs/images/example.png deleted file mode 100644 index 6f28c787cae4cde0906d505c2c289b841588aaf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41896 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 diff --git a/README.md b/README.md index 6d8032b..5f8a48b 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,14 @@ Generate beautiful screenshots of your terminal, from your terminal. +```sh +termshot --show-cmd -- lolcat -f <(figlet -f big foobar) +``` + +This command generates this screenshot: + +![example](https://github.com/homeport/termshot/assets/3084745/8ef3a713-70d0-49e3-98e4-e340763dc0b8) + ## Installation To install with Homebrew on macOS or Linux: @@ -39,9 +47,9 @@ In some cases—say, if your target command contains _pipes_—there may still b termshot -- "ls -l | grep go" ``` -![out](https://github.com/homeport/termshot/assets/3084745/5d0dd1ab-820d-46fc-8af7-8a294193c5ca) +![termshot with pipes](https://github.com/homeport/termshot/assets/3084745/5d0dd1ab-820d-46fc-8af7-8a294193c5ca) -### `--show-cmd`/`-c` +#### `--show-cmd`/`-c` Include the target command in the screenshot. @@ -50,9 +58,9 @@ termshot --show-cmd -- "ls -a" termshot --c -- "ls -a" ``` -![out](https://github.com/homeport/termshot/assets/3084745/3fbdd952-785d-4865-b216-f33bdaceb4da) +![termshot that shows command](https://github.com/homeport/termshot/assets/3084745/3fbdd952-785d-4865-b216-f33bdaceb4da) -### `--edit`/`-e` +#### `--edit`/`-e` Edit the output before generating the screenshot. This will open the rich text output in the editor configured in `$EDITOR`, using `vi` as a fallback. Use this flag to remove unwanted or sensitive output. @@ -61,9 +69,7 @@ termshot --edit -- "ls -a" termshot -e -- "ls -a" ``` -![out](https://github.com/homeport/termshot/assets/3084745/3fbdd952-785d-4865-b216-f33bdaceb4da) - -### `--filename`/`-f` +#### `--filename`/`-f` Specify a path where the screenshot should be generated. This can be an absolute path or a relative path; relative paths will be resolved relative to the current working directory. @@ -76,7 +82,7 @@ termshot --filename /Desktop/my-image.png -- "ls -a" Defaults to `out.png` -### `--version`/`-v` +#### `--version`/`-v` Print the version of `termshot` installed.