Coder Social home page Coder Social logo

plankcipher / kabmat Goto Github PK

View Code? Open in Web Editor NEW
349.0 10.0 17.0 1.87 MB

TUI program for managing kanban boards with vim-like keybindings

License: GNU General Public License v3.0

Makefile 1.23% C++ 98.38% C 0.40%
kanban kanban-board ncurses terminal tui linux vim

kabmat's Introduction

kabmat

Buy Me a Coffee at ko-fi.com

TUI program for managing kanban boards with vim-like keybindings

Preview

kabmat

kabmat

Dependencies

  • ncurses for the UI
  • make and g++/gcc for compiling and installing

Installation

  1. get the source code from latest release or clone this repo => git clone https://github.com/PlankCipher/kabmat.git
  2. cd into the source code or cloned repo => cd kabmat
  3. run make to build the program
  4. run sudo make install to install it

Usage

kabmat 2.8.0
TUI program for managing kanban boards with vim-like keybindings

Usage: kabmat [OPTION]...

Options:
  -h, --help              print this help message
  -v, --version           print program version

  -l, --list              list all boards
  -c, --create <name>     create a new board with the name <name>
  -o, --open <name>       open board with name <name>
  -d, --delete <name>     delete board with name <name>

  -t, --text              disable tui
  -b, --card-at-bottom    when moving cards between columns, put them at the bottom

Consult the man page for more information

Keybindings in kabmat

I tried making the keybindings as intuitive and expected as possible, and for the most part they are. For example, generally c creates an entity, d deletes, k moves up, j moves down, etc...

Help Window:

Key Function
k scroll up one line
j scroll down one line
q close the window

Main Menu:

Key Function
q quit
? show help window
k highlight the above board name
j highlight the below board name
g highlight the first board name
G highlight the last board name
K move highlighted board up
J move highlighted board down
d delete the currently highlighted board
r, e rename the currently highlighted board
c create a new board and highlight it
<Enter> open the currently highlighted board

Input Field:

Normal mode:

Key Function
<Esc>, q cancel and close the input field
<Enter> submit and close the input field
h move cursor one character to the left
l move cursor one character to the right
0 move cursor to the start of the line
$ move cursor to the end of the line
k move cursor up one line (in multi-row input only)
j move cursor down one line (in multi-row input only)
g move cursor to the first line (in multi-row input only)
G move cursor to the last line (in multi-row input only)
i change mode to insert
a move cursor one character to the right and change mode to insert
I move cursor to the start of the line and change mode to insert
A move cursor to the end of the line and change mode to insert
S delete everything on the line and change mode to insert
d delete line under cursor (in multi-row input only)

Insert mode:

Key Function
<Esc> change mode to normal
<Enter> submit and close the input field (or add a new line in multi-row input)
<Backspace>/<Delete> delete the character before the cursor
any other key inserted before the cursor

Confirmation Window:

Key Function
<Enter>, y confirm action (yes)
<Esc>, n cancel action (no)

Board Screen:

Key Function
q quit to where the board was opened from (main menu or cli)
? show help window
h focus the left column
l focus the right column
k focus the above card
j focus the below card
g focus the first card
G focus the last card
H move focused card to the left column
L move focused card to the right column
K move focused card up
J move focused card down
<C-h>, <C-p> move focused column to the left
<C-l>, <C-n> move focused column to the right
C create a new column
E edit title of focused column
D delete focused column
c create a new card in focused column
e edit focused card
d delete focused card

Card Info Window:

Key Function
<Esc>, q cancel and close (if in normal mode)
<Enter> submit and close (if in normal mode)
<Tab> switch focused input (content or description)
c open checklist items window
any other key handled by the focused input

Checklist Window:

Key Function
q close the window
k highlight the item above
j highlight the item below
g highlight the first item
G highlight the last item
K move highlighted item up
J move highlighted item down
c add a new item to the list
e edit content of highlighted item
<Space> toggle highlighted item (done/not done)
d delete highlighted item

Window Manager Integration

If you want to launch it sort of like an application you can make a keybinding to launch your terminal with kabmat running instead of the shell. For example, here is how I do it with st and dwm.

st -e sh -c kabmat
static Key keys[] = {
    /* modifier                                key                        function        argument */
    ....
    { (Mod4Mask|Mod1Mask),                     XK_t,                      spawn,          SHCMD("st -e sh -c kabmat") },
    ....
};

kabmat's People

Contributors

joshuavial avatar plankcipher avatar samuel-de-oliveira avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kabmat's Issues

special characters - żźćó ....

Hi there,
I'm starting to use your app, but there is one issue that emerged.

While in insert mode, in fields like Content or Description i cannot use special polish characters, while in the same terminal window they are perfectly fine to insert.

Is there anyway to fix this? We do thoose letters with right alt + a/x/c/o/l/s/...

The keys in my system are loaded as:
loadkeys pl.map.gz
setfont Lat2-Terminus16

make install fails on macOS

macOS 12.3.1
Screenshot 2022-04-20 at 10 37 03

I do have coreutils installed via brew, so changing install to ginstall in the makefile makes it work.

Maybe there should be a check for OS version

Missing highlight coloring

no_color.mov

Hey all! Having an interesting issue. My highlight color doesn't seem to be appearing. I'm including a quick screen capture. Right now, there is no color change to indicate which card is in my focus.

Where can I go to get any useful log output to help with this, and/or does anyone have any ideas? Thanks!

Using MacOS Monterey 12.2.1

I know, I know, I should just use Linux... But my work wants to be a full Mac shop, and this is my work machine. :(

@PlankCipher @mdartmann

Having an Issue where colours are all the same, so I an unable to see when an item is highlighted

Just installed this and I notice that on my PC all the colours are white. Text, non highlighted items and highlighted items including borders.
so i am unable to see when i have a card highlighted.

It would be nice if you could add a config file under .config/kabmat/
where we could specify specific colours for our kabmat install.
This would also allow the community to create colour files for different popualr colour schemes i.e gruvbox, dracula etc.

keybindings and other things could also be added to the config 😊

[Bug report] The program don't open for me

So i have installed Kabmat, but for any reason is giving me an error message like in the image:

kabmat_error

I tried use --help and --version parameters but it's give me the same error.

Date filters

Hello,

I emailed plankcipher before requesting this feature who asked that I post it here:

It would be really useful to have date filters for each panel (Yesterday, Today, Tomorrow (Or Monday if tomorrow is the weekend))

Currently our stand-ups involve
What we were working on yesterday (open or complete)
What we are working on today (only open)
What is coming up tomorrow

Many Thanks,
NB

Using <C-h> (move column to the left) is not moving the focused column

The current key bind for trying to move the focused column is not causing it to move.

Moving the column to the right using does work, however.

Steps to reproduce:

  1. Create a new board
  2. Add 2 columns
  3. Move the leftmost column to the right ()
  4. Try to move it back to the left (, FAIL)

Options file to change colors and hide taskabr.

Hello.
How can I hide the taskbar and change TUI colors? is there an options files I can create?

PS: Thank you for this awesome app! it works well and it doesn't have a 100+ dependencies like other kanban apps I came across.

Editing card description

I have created a new card with a title and a description. When I try to edit this card again afterwards, I can successfully change the title, but not the description.
It looks like it doesn't detect existing input. When I change to input mode in the description field which contains already text, I can just add new text in the beginning and I am not able to modify the existing text.

Sometimes this leads to the following error as well:
terminate called after throwing an instance of 'std::length_error'

[Feature Request] Ability to key blind configs

I believe having configs for key blind would be created
I at least want to have
ctrl+a, ctrl+e, ctrl+w during insert mode to be support
(ctrl+a allows to go to the start of the line, ctrl+e allows move cursor to end of the line,
ctrl+w is the same as db in vim, delete word backward)

I use those often during terminal/weechat/terminal
And I think those would be useful

Maybe we can set key blinding for each field? (one for main menu, input etc)
I think it could get complex and maybe stick with simple overall blinding for all?

Please define the file format

Could you formally document how the expected file format for kanbans should look like?

Would be great, both for auxiliary tools and possible migration if the project diverges with the personal needs

Installation blocked by -D option on Monterey Mac

Hello! I am having trouble finishing installation.

for dirname in $(find src -type d | sed 's/'src'/'bin'/'); do mkdir -p $dirname; done
mkdir -p ~/.local/share/kabmat
touch ~/.local/share/kabmat/data
/Library/Developer/CommandLineTools/usr/bin/make kabmat
c++ -std=c++17 -Wall -Wextra -c src/ArgsParser/ArgsParser.cpp -o bin/ArgsParser/ArgsParser.o -lncurses
clang: warning: -lncurses: 'linker' input unused [-Wunused-command-line-argument]
c++ -std=c++17 -Wall -Wextra -c src/ui/screens/Board/Board.cpp -o bin/ui/screens/Board/Board.o -lncurses
clang: warning: -lncurses: 'linker' input unused [-Wunused-command-line-argument]
c++ -std=c++17 -Wall -Wextra -c src/ui/screens/MainMenu/MainMenu.cpp -o bin/ui/screens/MainMenu/MainMenu.o -lncurses
clang: warning: -lncurses: 'linker' input unused [-Wunused-command-line-argument]
c++ -std=c++17 -Wall -Wextra -c src/ui/components/Footer/Footer.cpp -o bin/ui/components/Footer/Footer.o -lncurses
clang: warning: -lncurses: 'linker' input unused [-Wunused-command-line-argument]
c++ -std=c++17 -Wall -Wextra -c src/ui/components/Input/Input.cpp -o bin/ui/components/Input/Input.o -lncurses
clang: warning: -lncurses: 'linker' input unused [-Wunused-command-line-argument]
c++ -std=c++17 -Wall -Wextra -c src/ui/components/ConfirmDialog/ConfirmDialog.cpp -o bin/ui/components/ConfirmDialog/ConfirmDialog.o -lncurses
clang: warning: -lncurses: 'linker' input unused [-Wunused-command-line-argument]
c++ -std=c++17 -Wall -Wextra -c src/ui/components/CardWin/CardWin.cpp -o bin/ui/components/CardWin/CardWin.o -lncurses
clang: warning: -lncurses: 'linker' input unused [-Wunused-command-line-argument]
c++ -std=c++17 -Wall -Wextra -c src/ui/components/ColumnWin/ColumnWin.cpp -o bin/ui/components/ColumnWin/ColumnWin.o -lncurses
clang: warning: -lncurses: 'linker' input unused [-Wunused-command-line-argument]
c++ -std=c++17 -Wall -Wextra -c src/ui/components/CardInfo/CardInfo.cpp -o bin/ui/components/CardInfo/CardInfo.o -lncurses
clang: warning: -lncurses: 'linker' input unused [-Wunused-command-line-argument]
c++ -std=c++17 -Wall -Wextra -c src/ui/components/Header/Header.cpp -o bin/ui/components/Header/Header.o -lncurses
clang: warning: -lncurses: 'linker' input unused [-Wunused-command-line-argument]
c++ -std=c++17 -Wall -Wextra -c src/ui/components/Help/Help.cpp -o bin/ui/components/Help/Help.o -lncurses
clang: warning: -lncurses: 'linker' input unused [-Wunused-command-line-argument]
c++ -std=c++17 -Wall -Wextra -c src/ui/components/Checklist/Checklist.cpp -o bin/ui/components/Checklist/Checklist.o -lncurses
clang: warning: -lncurses: 'linker' input unused [-Wunused-command-line-argument]
c++ -std=c++17 -Wall -Wextra -c src/ui/helpers/win_fit_text/win_fit_text.cpp -o bin/ui/helpers/win_fit_text/win_fit_text.o -lncurses
clang: warning: -lncurses: 'linker' input unused [-Wunused-command-line-argument]
c++ -std=c++17 -Wall -Wextra -c src/ui/helpers/win_center_text/win_center_text.cpp -o bin/ui/helpers/win_center_text/win_center_text.o -lncurses
clang: warning: -lncurses: 'linker' input unused [-Wunused-command-line-argument]
c++ -std=c++17 -Wall -Wextra -c src/DataManager/Column.cpp -o bin/DataManager/Column.o -lncurses
clang: warning: -lncurses: 'linker' input unused [-Wunused-command-line-argument]
c++ -std=c++17 -Wall -Wextra -c src/DataManager/DataManager.cpp -o bin/DataManager/DataManager.o -lncurses
clang: warning: -lncurses: 'linker' input unused [-Wunused-command-line-argument]
c++ -std=c++17 -Wall -Wextra -c src/DataManager/Board.cpp -o bin/DataManager/Board.o -lncurses
clang: warning: -lncurses: 'linker' input unused [-Wunused-command-line-argument]
c++ -std=c++17 -Wall -Wextra -c src/DataManager/Card.cpp -o bin/DataManager/Card.o -lncurses
clang: warning: -lncurses: 'linker' input unused [-Wunused-command-line-argument]
c++ -std=c++17 -Wall -Wextra -c src/helpers/trim_spaces/trim_spaces.cpp -o bin/helpers/trim_spaces/trim_spaces.o -lncurses
clang: warning: -lncurses: 'linker' input unused [-Wunused-command-line-argument]
c++ -std=c++17 -Wall -Wextra -c src/main.cpp -o bin/main.o -lncurses
clang: warning: -lncurses: 'linker' input unused [-Wunused-command-line-argument]
c++  bin/ArgsParser/ArgsParser.o  bin/ui/screens/Board/Board.o  bin/ui/screens/MainMenu/MainMenu.o  bin/ui/components/Footer/Footer.o  bin/ui/components/Input/Input.o  bin/ui/components/ConfirmDialog/ConfirmDialog.o  bin/ui/components/CardWin/CardWin.o  bin/ui/components/ColumnWin/ColumnWin.o  bin/ui/components/CardInfo/CardInfo.o  bin/ui/components/Header/Header.o  bin/ui/components/Help/Help.o  bin/ui/components/Checklist/Checklist.o  bin/ui/helpers/win_fit_text/win_fit_text.o  bin/ui/helpers/win_center_text/win_center_text.o  bin/DataManager/Column.o  bin/DataManager/DataManager.o  bin/DataManager/Board.o  bin/DataManager/Card.o  bin/helpers/trim_spaces/trim_spaces.o  bin/main.o -std=c++17 -Wall -Wextra -o kabmat -lncurses
❯ sudo make
for dirname in $(find src -type d | sed 's/'src'/'bin'/'); do mkdir -p $dirname; done
mkdir -p ~/.local/share/kabmat
touch ~/.local/share/kabmat/data
/Library/Developer/CommandLineTools/usr/bin/make kabmat
make[1]: `kabmat' is up to date.
❯ sudo make install
install -dm755 /usr/local/bin /usr/local/share/man/man1
install -Dm755 ./kabmat /usr/local/bin
install: illegal option -- D
usage: install [-bCcpSsv] [-B suffix] [-f flags] [-g group] [-m mode]
               [-o owner] file1 file2
       install [-bCcpSsv] [-B suffix] [-f flags] [-g group] [-m mode]
               [-o owner] file1 ... fileN directory
       install -d [-v] [-g group] [-m mode] [-o owner] directory ...
make: *** [install] Error 64

After running make install --help, I get:

❯ make install --help
Usage: make [options] [target] ...
Options:
  -b, -m                      Ignored for compatibility.
  -B, --always-make           Unconditionally make all targets.
  -C DIRECTORY, --directory=DIRECTORY
                              Change to DIRECTORY before doing anything.
  -d                          Print lots of debugging information.
  --debug[=FLAGS]             Print various types of debugging information.
  -e, --environment-overrides
                              Environment variables override makefiles.
  -f FILE, --file=FILE, --makefile=FILE
                              Read FILE as a makefile.
  -h, --help                  Print this message and exit.
  -i, --ignore-errors         Ignore errors from commands.
  -I DIRECTORY, --include-dir=DIRECTORY
                              Search DIRECTORY for included makefiles.
  -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no arg.
  -k, --keep-going            Keep going when some targets can't be made.
  -l [N], --load-average[=N], --max-load[=N]
                              Don't start multiple jobs unless load is below N.
  -L, --check-symlink-times   Use the latest mtime between symlinks and target.
  -n, --just-print, --dry-run, --recon
                              Don't actually run any commands; just print them.
  -o FILE, --old-file=FILE, --assume-old=FILE
                              Consider FILE to be very old and don't remake it.
  -p, --print-data-base       Print make's internal database.
  -q, --question              Run no commands; exit status says if up to date.
  -r, --no-builtin-rules      Disable the built-in implicit rules.
  -R, --no-builtin-variables  Disable the built-in variable settings.
  -s, --silent, --quiet       Don't echo commands.
  -S, --no-keep-going, --stop
                              Turns off -k.
  -t, --touch                 Touch targets instead of remaking them.
  -v, --version               Print the version number of make and exit.
  -w, --print-directory       Print the current directory.
  --no-print-directory        Turn off -w, even if it was turned on implicitly.
  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE
                              Consider FILE to be infinitely new.
  --warn-undefined-variables  Warn when an undefined variable is referenced.
  -N OPTION, --NeXT-option=OPTION
                              Turn on value of NeXT OPTION.

This program built for i386-apple-darwin11.3.0
Report bugs to <[email protected]>

So it looks like I'm missing the directory options needed to finish this, and I'm not sure replacing with C in my case will work, since it looks like this takes more than just changing directories. Please advise!

I am running zsh and macOS Monterey 12.2.1.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.