Releases: PaulJuliusMartinez/jless
v0.9.0
The newest version of jless ships with a handful of new helpful features:
- A
ys
command to copy unescaped string literals to the clipboard - A family of printing
p
commands, analogous to they
commands, that print simply content to the screen. Useful for viewing long string values, or if the clipboard functionality isn't working - Line numbers! Both absolute and relative
C
andE
commands, analogous to the existingc
ande
commands, for deeply collapsing/expanding values
Full list of changes
New features
- A new command
ys
will copy unescaped string literals to the clipboard. Control characters remain escaped. - The length of Arrays and size of Objects is now shown before the container previews, e.g., (
foo: (3) ["apple", "banana", "cherry"]
) - Add a new family of "print" commands, that nearly map to the existing copy commands, that will simply print a value to the screen. This is useful for viewing the entirety of long string values all at once, or if the clipboard functionality is not working; mouse-tracking will be temporarily disabled, allowing you to use your terminal's native clipboard capabilities to select and copy the desired text.
- Support showing line numbers, both absolute and/or relative. Absolute line numbers refer to what line number a given node would appear on if the document were pretty printed. This means there are discontinuities when in data mode because closing brackets and braces aren't displayed. Relative line numbers show how far a line is relative to the currently focused line. The behavior of the various combinations of these settings matches vim: when using just relative line numbers alone, the focused line will show
0
, but when both flags are enabled the focused line will show its absolute line number.- Absolute line numbers are enabled by default, but not relative line numbers. These can be enabled/disabled/re-enabled via command line flags
--line-numbers
,--no-line-numbers
,--relative-line-numbers
and--no-relative-line-numbers
, or via the short flags-n
,-N
,-r
, and-R
respectively. - These settings can also be modified while jless is running. Entering
:set number
/:set relativenumber
will enable these settings,:set nonumber
/:set norelativenumber
will disable them, and:set number!
/:set relativenumber!
will toggle them, matching vim's behavior. - There is not yet support for a jless config file, so if you would like relative line numbers by default, it is recommended to set up an alias:
alias jless=jless --line-numbers --relative-line-numbers
.
- Absolute line numbers are enabled by default, but not relative line numbers. These can be enabled/disabled/re-enabled via command line flags
- You can jump to an exact line number using
<count>g
or<count>G
. When using<count>g
(lowercase 'g'), if the desired line number is hidden inside of a collapsed container, the last visible line number before the desired one will be focused. When using<count>G
(uppercase 'G'), all the ancestors of the desired line will be expanded to ensure it is visible. - Add
C
andE
commands, analogous to the existingc
ande
commands, to deeply collapse/expand a node and all its siblings.
Improvements
- In data mode, when a array element is focused, the highlighting on the index label (e.g., "[8]") is now inverted. Additionally, a '▶' is always displayed next to the currently focused line, even if the focused node is a primitive. Together these changes should make it more clear which line is focused, especially when the terminal's current style doesn't support dimming (
ESC [ 2 m
). - When using the
c
ande
commands (and the newC
andE
commands), the focused row will stay at the same spot on the screen. (Previously jless would try to keep the same row visible at the top of the screen, which didn't make sense.)
Bug fixes
- Scrolling with the mouse will now move the viewing window, rather than the cursor.
- When searching, jless will do a better job jumping to the first match after the cursor; previously if a user started a search while focused on the opening of a Object or Array, any matches inside that container were initially skipped over.
- When jumping to a search match that is inside a collapsed container, search matches will continue to be highlighted after expanding the container.
- Issue #71/PR #98: jless will return a non-zero exit code if it fails to parse the input.
Other notes
- The minimum supported Rust version has been updated to 1.67.
- jless now re-renders the screen by emitting "clear line" escape codes (
ESC [ 2 K
) for each line, instead of a single "clear screen" escape code (ESC [ 2 J
), in the hopes of reducing flicking when scrolling.
v0.8.0
This new release of jless
ships with two major new features: basic YAML support and copying to clipboard!
jless
will now check the file extension of the input file, and automatically parse .yml
and .yaml
files as YAML and use the same viewer as for JSON data. Alternatively passing in a --yaml
flag will force jless
to parse the input as YAML and can be used when reading in YAML data from stdin
. (alias yless="jless --yaml"
perhaps?) YAML aliases are automatically expanded, but their corresponding anchors are not visible, nor are comments. YAML supports non-string keys, and even non-scalar keys in mappings (e.g., the key of map can be an array with multiple elements). Non-string keys are shown with square brackets, e.g., [true]: "value"
, instead of quotes. Non-scalar keys are handled on the screen and displayed properly, but you cannot expand and collapse their individual elements.
While navigating data, jless
also now supports copying various items to your system clipboard.
yy
will copy the value of the currently focused node, pretty printedyv
will copy the value of the currently focused node in a "nicely" printed one-line formatyk
will copy the key of the current key/value pairyp
will copy the path from the root JSON element to the currently focused node, e.g.,.foo[3].bar
yb
functions likeyp
, but always uses the bracket form for object keys, e.g.,["foo"][3]["bar"]
, which is useful if the environment where you'll paste the path doesn't support the.key
format, like in Pythonyq
will copy ajq
style path that will select the currently focused node, e.g.,.foo[].bar
This release also includes a couple of new movement commands, and some stability fixes. The full list of changes can be seen below.
Full list of changes
New features:
- Support displaying YAML files with autodetection via file extension, or explicit
--yaml
or--json
flags. - Support copying values (with
yy
oryv
), object keys (withyk
), and paths to the currently focused node (withyp
,yb
oryq
). - Implement
ctrl-u
andctrl-d
commands to jump up and down by half the screen's height, or by a specified number of lines. - Implement
ctrl-b
andctrl-f
commands for scrolling up and down by the height of the screen. (Aliases forPageUp
andPageDown
)
Improvements:
- Keep focused line in same place on screen when toggling between line and data modes; fix a crash when focused on a closing delimiter and switching to data mode.
- Pressing Escape will clear the input buffer and stop highlighting search matches.
Bug Fixes:
- Ignore clicks on the status bar or below rather than focusing on hidden lines, and don't re-render the screen, allowing the path in the status bar to be highlighted and copied.
- Issue #61: Display error message for unrecognized CSI escape sequences and other IO errors instead of panicking.
- Issue #62: Fix broken window resizing / SIGWINCH detection caused by clashing signal handler registered by rustyline.
- PR #54: Fix panic when using Ctrl-C or Ctrl-D to cancel entering search input.
Other Notes:
- Upgraded regex crate to 1.5.5 due to CVE-2022-24713. jless accepts and compiles untrusted input as regexes, but you'd only DDOS yourself, so it's not terribly threatening vulnerability.
v0.7.2
New features / changes:
- Space now toggles the collapsed state of the currently focused node, rather than moving down a line. (Functionality was previous available via
i
, but was undocumented;i
has been unmapped.)
Bug fixes:
- Searching now works even when input is provided via STDIN.
Internal:
- Upgraded from structopt to clap v3
v0.7.1
New features:
- F1 now opens help page
- Search initialization commands (
/
,?
,*
,#
) all now accept count arguments
Internal code cleanup:
- Address a lot of issues reported by clippy
- Remove chunks of unused code, including serde dependency
- Fix typos in help page
v0.7.0
Introducing jless, a command-line JSON viewer.
This release represents the significant milestone: a complete set of basic functionality, without any major bugs.
This GitHub issue details much of the functionality implemented to get to this point. Spiritually, completion of many of the tasks listed there represent versions 0.1 - 0.6.
The intention is to not release a 1.0 version until Windows support is added.