# v4.4 - Change Log

v4.4 features two new builtins, improvements in testing, and automatic generation of autocompletion suggestions backed by man page parsing. Plus there has been a lot of focus on improving _readline_ responsiveness

### Breaking Changes

* 'Name' field dropped from `onCommandCompletion` interrupt (this field was never documented)

### Features

* New builtin, `round`, which can perform rounding operations on numerical inputs ([#630](https://github.com/lmorg/murex/issues/630), [read more](../commands/round.md)) 

* Vastly improved automatic man page parsing. Now descriptions are pulled alongside the flags and results are cached

* `man-get-flags` now includes a `-d` / `--description` flag to expose the improved man page parser

* New builtin, `return`, which exits a given function scope (eg `function`, `private`, **Dynamic** block in `autocomplete`, etc)

* Improved `git` autocompletions

* `find` autocompletions added

* builtin profiles are now imported as separate modules. This makes debugging easier

* `/integrations` directory added to Murex source, the aim of which is to make it easier for people to contribute autocompletions and other integrations with common command line tools ([Github](https://github.com/lmorg/murex/tree/master/intergrations))

* readline: new word jump hotkeys `ctrl`+`left` / `ctrl`+`right` (PC)

* readline: new word jump hotkeys `option`+`left` / `option`+`right` (Mac)

### Bug Fixes:

* `test` would always run first in any block, regardless of the preferred order of execution. This was because `test (unit|state|config)` required altering the execution state of the shell. The drawback was that `test (run|define|report)` would also run unexpectedly. This lead to hacks like `try { test run * }` to force the correct order of operations. Now the parameters of `test` are checked to determine when to execute the builtin.

* `int` types couldn't be compared against `num` types with `>`, `>=`, `<`, `<=` operators

* readline: `^d` will not send EOF if line is not empty. The original behaviour was by design however after pressing `^d` a few too many times when I intended to press `^f` or `^r`, I decided the original design was wrong

* `FileRef` wasn't being set in `test`. This caused some tests to fail if they called private functions

* Check `~/.ssh/config` exists before trying to parse it in `getHostsFile` private (used for SSH and similar tools autocompletions)

* readline: lots of work done on speeding up redraws and overall responsiveness. eg buffered autocompletion menus

* readline: hint text should _never_ be displayed if disabled via `config`

* readline: soft timeout halved (this can be overridden via `config`)

* readline: cropped autocompletion suggestions in gridded layout were one character too short (off by one error)

<hr>

Published: 12.07.2023 at 22:33

## See Also

* [FileRef](../user-guide/fileref.md):
  How to track what code was loaded and from where
* [`autocomplete`](../commands/autocomplete.md):
  Set definitions for tab-completion in the command line
* [`config`](../commands/config.md):
  Query or define Murex runtime settings
* [`event`](../commands/event.md):
  Event driven programming for shell scripts
* [`expr`](../commands/expr.md):
  Expressions: mathematical, string comparisons, logical operators
* [`function`](../commands/function.md):
  Define a function block
* [`int` ](../types/int.md):
  Whole number (primitive)
* [`man-get-flags` ](../commands/man-get-flags.md):
  Parses man page files for command line flags 
* [`num` (number)](../types/num.md):
  Floating point number (primitive)
* [`onCommandCompletion`](../events/oncommandcompletion.md):
  Trigger an event upon a command's completion
* [`private`](../commands/private.md):
  Define a private function block
* [`return`](../commands/return.md):
  Exits current function scope
* [`round` ](../commands/round.md):
  Round a number by a user defined precision
* [`test`](../commands/test.md):
  Murex's test framework - define tests, run tests and debug shell scripts