An open API service indexing awesome lists of open source software.

https://github.com/z-shell/zsh-cmd-architect

⚙️ Zsh Command Architect
https://github.com/z-shell/zsh-cmd-architect

command-line-tool history-management zsh zsh-plugins

Last synced: 11 months ago
JSON representation

⚙️ Zsh Command Architect

Awesome Lists containing this project

README

          



Logo
❮ Zsh Command Architect ❯



ZCA allows to copy segments of commands in history, rearrange segments of current command, delete segments of current command.


This way user glues command from parts without using a mouse.

Advanced history search (multi word, without duplicate lines) allows to quickly find the parts.

[![🐧 Test sh (Linux)](https://github.com/z-shell/zsh-cmd-architect/actions/workflows/test-sh.yml/badge.svg)](https://github.com/z-shell/zsh-cmd-architect/actions/workflows/test-sh.yml) [![✅ Zsh](https://github.com/z-shell/zsh-cmd-architect/actions/workflows/zsh-n.yml/badge.svg)](https://github.com/z-shell/zsh-cmd-architect/actions/workflows/zsh-n.yml)

## 💡 Wiki: [ZCA](https://wiki.zshell.dev/ecosystem/plugins/zsh-cmd-architect) - [Plugins](https://wiki.zshell.dev/ecosystem/category/%EF%B8%8F-plugins)

| Keys | Description |
| ------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
| Ctrl+T | Start Zsh Command Architect (Zshell binding) |
| Enter | Delete selected segment (command window) or add selected segment (history window) |
| [ or ] | Move active segment (when in command window) |
| Shift+left or Shift+right | Move active segment (when in command window) |
| Tab | Switch between the two available windows |
| g, G | Beginning and end of the list |
| / | Start incremental search |
| Esc | Exit incremental search, clearing filter |
| <,>, {,} | Horizontal scroll |
| Ctrl+L | Redraw of whole display |
| Ctrl+O, o | Enter uniq mode (no duplicate lines) |
| Ctrl+W | (in incremental search) - delete whole word |
| Ctrl+K | (in incremental search) - delete whole line |
| Ctrl+D, Ctrl+U | Half page up or down |
| Ctrl+P, Ctrl+N | Previous and next (also done with vim's j,k) |

## Installation

### [Zi](https://github.com/z-shell/zi)

Add `zi load z-shell/zsh-cmd-architect` to `.zshrc`.

### Zgen

Add `zgen load z-shell/zsh-cmd-architect` to `.zshrc` and issue a `zgen reset` (this assumes that there is a proper `zgen save` construct in `.zshrc`).

### Antigen

Add `antigen bundle z-shell/zsh-cmd-architect@main` to `.zshrc`. There also should be `antigen apply`.

### Standalone

```sh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/z-shell/zsh-cmd-architect/main/doc/install.sh)"
```

To update run the command again.

`ZCA` will be installed at `~/.config/zca/zsh-cmd-architect`, config files will be copied to `~/.config/zca`. `.zshrc` will be updated with code snippet at the bottom.

> After installing and reloading shell give `ZCA` a quick try with Ctrl+T.

#### Manual

After extracting `ZCA` to `{some-directory}` add following two lines to `~/.zshrc`:

```shell
fpath+=( {some-directory} )
source "{some-directory}/zsh-cmd-architect.plugin.zsh"
```

As you can see, no plugin manager is needed to use the `*.plugin.zsh`
file. The above two lines of code are all that almost **all** plugin
managers do. In fact, what's actually needed is only:

```shell
source "{some-directory}/zsh-cmd-architect.plugin.zsh"
```

`ZCA` detects if it is used by **any** plugin manager and can
handle `$fpath` update by itself.

#### Single File

Running script `doc/generate_single_file` will create single-file version of `ZCA`.

It can be sourced from `.zshrc`.

> **Note:**
>
> - Don't forget about configuration files (copy them to `~/.config/zca`).

## Performance

`ZCA` is fastest with `Zsh` before `5.0.6` and starting from `5.2`

Fixing tmux, screen and linux vt

If `TERM=screen-256color` (often a case for `tmux` and `screen` sessions) then
`ncv` terminfo capability will have `2`nd bit set. This in general means that
underline won't work. To fix this by creating your own `ncv=0`-equipped
terminfo file, run:

```shell
{ infocmp -x screen-256color; printf '\t%s\n' 'ncv@,'; } > /tmp/t && tic -x /tmp/t
```

A file will be created in directory `~/.terminfo` and will be automatically
used, `tmux` and `screen` will work. Similar is for Linux virtual terminal:

```shell
{ infocmp -x linux; printf '\t%s\n' 'ncv@,'; } > /tmp/t && tic -x /tmp/t
```

It will not display underline properly, but will instead highlight by a color,
which is quite nice. The same will not work for FreeBSD's vt, `ZCA` will detect
if that vt is used and will revert to highlighting elements via `reverse` mode.


> Also check out [Zsh Navigation Tools](https://github.com/z-shell/zsh-navigation-tools) and [Zsh Editing Workbench](https://github.com/z-shell/zsh-editing-workbench)