adds flavor of interactive filtering to the traditional pipe concept of UNIX shell

Overview

percol

                                __
    ____  ___  ______________  / /
   / __ \/ _ \/ ___/ ___/ __ \/ /
  / /_/ /  __/ /  / /__/ /_/ / /
 / .___/\___/_/   \___/\____/_/
/_/

percol adds flavor of interactive selection to the traditional pipe concept on UNIX.

What's this

optimized

percol is an interactive grep tool in your terminal. percol

  1. receives input lines from stdin or a file,
  2. lists up the input lines,
  3. waits for your input that filter/select the line(s),
  4. and finally outputs the selected line(s) to stdout.

Since percol just filters the input and output the result to stdout, it can be used in command-chains with | in your shell (UNIX philosophy!).

Features

  • Efficient: With lazy loads of input lines and query caching, percol handles huge inputs efficiently.
  • Customizable: Through configuration file (rc.py), percol's behavior including prompts, keymaps, and color schemes can be heavily customizable.
  • Migemo support: By supporting C/Migemo, percol filters Japanese inputs blazingly fast.

Related projects

Installation

percol currently supports only Python 2.x.

PyPI

$ sudo pip install percol

Manual

First, clone percol repository and go into the directory.

$ git clone git://github.com/mooz/percol.git
$ cd percol

Then, run a command below.

$ sudo python setup.py install

If you don't have a root permission (or don't wanna install percol with sudo), try next one.

$ python setup.py install --prefix=~/.local
$ export PATH=~/.local/bin:$PATH

Usage

Specifying a filename.

$ percol /var/log/syslog

Specifying a redirection.

$ ps aux | percol

Example

Interactive pgrep / pkill

Here is an interactive version of pgrep,

$ ps aux | percol | awk '{ print $2 }'

and here is an interactive version of pkill.

$ ps aux | percol | awk '{ print $2 }' | xargs kill

For zsh users, command versions are here (ppkill accepts options like -9).

function ppgrep() {
    if [[ $1 == "" ]]; then
        PERCOL=percol
    else
        PERCOL="percol --query $1"
    fi
    ps aux | eval $PERCOL | awk '{ print $2 }'
}

function ppkill() {
    if [[ $1 =~ "^-" ]]; then
        QUERY=""            # options only
    else
        QUERY=$1            # with a query
        [[ $# > 0 ]] && shift
    fi
    ppgrep $QUERY | xargs kill $*
}

zsh history search

In your .zshrc, put the lines below.

function exists { which $1 &> /dev/null }

if exists percol; then
    function percol_select_history() {
        local tac
        exists gtac && tac="gtac" || { exists tac && tac="tac" || { tac="tail -r" } }
        BUFFER=$(fc -l -n 1 | eval $tac | percol --query "$LBUFFER")
        CURSOR=$#BUFFER         # move cursor
        zle -R -c               # refresh
    }

    zle -N percol_select_history
    bindkey '^R' percol_select_history
fi

Then, you can display and search your zsh histories incrementally by pressing Ctrl + r key.

tmux

Here are some examples of tmux and percol integration.

bind b split-window "tmux lsw | percol --initial-index $(tmux lsw | awk '/active.$/ {print NR-1}') | cut -d':' -f 1 | tr -d '\n' | xargs -0 tmux select-window -t"
bind B split-window "tmux ls | percol --initial-index $(tmux ls | awk \"/^$(tmux display-message -p '#{session_name}'):/ {print NR-1}\") | cut -d':' -f 1 | tr -d '\n' | xargs -0 tmux switch-client -t"

By putting above 2 settings into tmux.conf, you can select a tmux window with ${TMUX_PREFIX} b keys and session with ${TMUX_PREFIX} B keys.

Attaching to running tmux sessions can also be made easier with percol with this function(tested to work in bash and zsh)

function pattach() {
    if [[ $1 == "" ]]; then
        PERCOL=percol
    else
        PERCOL="percol --query $1"
    fi

    sessions=$(tmux ls)
    [ $? -ne 0 ] && return

    session=$(echo $sessions | eval $PERCOL | cut -d : -f 1)
    if [[ -n "$session" ]]; then
        tmux att -t $session
    fi
}

Calling percol from Python

Even though Percol is mainly designed as a UNIX command line tool, you can call it from your Python code like so:

from cStringIO import StringIO
from percol import Percol
from percol.actions import no_output

def main(candidates):
    si, so, se = StringIO(), StringIO(), StringIO()
    with Percol(
            actions=[no_output],
            descriptors={'stdin': si, 'stdout': so, 'stderr': se},
            candidates=iter(candidates)) as p:
        p.loop()
    results = p.model_candidate.get_selected_results_with_index()
    return [r[0] for r in results]

if __name__ == "__main__":
    candidates = ['foo', 'bar', 'baz']
    results = main(candidates)
    print("You picked: {!r}".format(results))

Configuration

Configuration file for percol should be placed under ${HOME}/.percol.d/ and named rc.py.

Here is an example ~/.percol.d/rc.py.

# X / _ / X
percol.view.PROMPT  = ur"<bold><yellow>X / _ / X</yellow></bold> %q"

# Emacs like
percol.import_keymap({
    "C-h" : lambda percol: percol.command.delete_backward_char(),
    "C-d" : lambda percol: percol.command.delete_forward_char(),
    "C-k" : lambda percol: percol.command.kill_end_of_line(),
    "C-y" : lambda percol: percol.command.yank(),
    "C-t" : lambda percol: percol.command.transpose_chars(),
    "C-a" : lambda percol: percol.command.beginning_of_line(),
    "C-e" : lambda percol: percol.command.end_of_line(),
    "C-b" : lambda percol: percol.command.backward_char(),
    "C-f" : lambda percol: percol.command.forward_char(),
    "M-f" : lambda percol: percol.command.forward_word(),
    "M-b" : lambda percol: percol.command.backward_word(),
    "M-d" : lambda percol: percol.command.delete_forward_word(),
    "M-h" : lambda percol: percol.command.delete_backward_word(),
    "C-n" : lambda percol: percol.command.select_next(),
    "C-p" : lambda percol: percol.command.select_previous(),
    "C-v" : lambda percol: percol.command.select_next_page(),
    "M-v" : lambda percol: percol.command.select_previous_page(),
    "M-<" : lambda percol: percol.command.select_top(),
    "M->" : lambda percol: percol.command.select_bottom(),
    "C-m" : lambda percol: percol.finish(),
    "C-j" : lambda percol: percol.finish(),
    "C-g" : lambda percol: percol.cancel(),
})

Customizing prompt

In percol, a prompt consists of two part: PROMPT and RPROMPT, like zsh. As the following example shows, each part appearance can be customized by specifying a prompt format into percol.view.PROMPT and percol.view.RPROMPT respectively.

percol.view.PROMPT = ur"<blue>Input:</blue> %q"
percol.view.RPROMPT = ur"(%F) [%i/%I]"

In prompt formats, a character preceded by % indicates a prompt format specifier and is expanded into a corresponding system value.

  • %%
    • Display % itself
  • %q
    • Display query and caret
  • %Q
    • Display query without caret
  • %n
    • Page number
  • %N
    • Total page number
  • %i
    • Current line number
  • %I
    • Total line number
  • %c
    • Caret position
  • %k
    • Last input key

Dynamic prompt

By changing percol.view.PROMPT into a getter, percol prompts becomes more fancy.

# Change prompt in response to the status of case sensitivity
percol.view.__class__.PROMPT = property(
    lambda self:
    ur"<bold><blue>QUERY </blue>[a]:</bold> %q" if percol.model.finder.case_insensitive
    else ur"<bold><green>QUERY </green>[A]:</bold> %q"
)

Custom format specifiers

# Display finder name in RPROMPT
percol.view.prompt_replacees["F"] = lambda self, **args: self.model.finder.get_name()
percol.view.RPROMPT = ur"(%F) [%i/%I]"

Customizing styles

For now, styles of following 4 items can be customized in rc.py.

percol.view.CANDIDATES_LINE_BASIC    = ("on_default", "default")
percol.view.CANDIDATES_LINE_SELECTED = ("underline", "on_yellow", "white")
percol.view.CANDIDATES_LINE_MARKED   = ("bold", "on_cyan", "black")
percol.view.CANDIDATES_LINE_QUERY    = ("yellow", "bold")

Each RHS is a tuple of style specifiers listed below.

Foreground Colors

  • "black" for curses.COLOR_BLACK
  • "red" for curses.COLOR_RED
  • "green" for curses.COLOR_GREEN
  • "yellow" for curses.COLOR_YELLOW
  • "blue" for curses.COLOR_BLUE
  • "magenta" for curses.COLOR_MAGENTA
  • "cyan" for curses.COLOR_CYAN
  • "white" for curses.COLOR_WHITE

Background Color

  • "on_black" for curses.COLOR_BLACK
  • "on_red" for curses.COLOR_RED
  • "on_green" for curses.COLOR_GREEN
  • "on_yellow" for curses.COLOR_YELLOW
  • "on_blue" for curses.COLOR_BLUE
  • "on_magenta" for curses.COLOR_MAGENTA
  • "on_cyan" for curses.COLOR_CYAN
  • "on_white" for curses.COLOR_WHITE

Attributes

  • "altcharset" for curses.A_ALTCHARSET
  • "blink" for curses.A_BLINK
  • "bold" for curses.A_BOLD
  • "dim" for curses.A_DIM
  • "normal" for curses.A_NORMAL
  • "standout" for curses.A_STANDOUT
  • "underline" for curses.A_UNDERLINE
  • "reverse" for curses.A_REVERSE

Matching Method

By default, percol interprets input queries by users as string. If you prefer regular expression, try --match-method command line option.

$ percol --match-method regex

Migemo support

percol supports migemo (http://0xcc.net/migemo/) matching, which allows us to search Japanese documents with ASCII characters.

$ percol --match-method migemo

To use this feature, you need to install C/Migemo (https://github.com/koron/cmigemo). In Ubuntu, it's simple:

$ sudo apt-get install cmigemo

After that, by specifying a command line argument --match-method migemo, you can use migemo in percol.

NOTE: This feature uses python-cmigemo package (https://github.com/mooz/python-cmigemo). Doing pip install percol also installs this package too.

Dictionary settings

By default, percol assumes the path of a dictionary for migemo is /usr/local/share/migemo/utf-8/migemo-dict. If the dictionary is located in a different place, you should tell the location via rc.py.

For example, if the path of the dictionary is /path/to/a/migemo-dict, put lines below into your rc.py.

from percol.finder import FinderMultiQueryMigemo
FinderMultiQueryMigemo.dictionary_path = "/path/to/a/migemo-dict"

Minimum query length

If the query length is too short, migemo generates very long regular expression. To deal with this problem, percol does not pass a query if the length of the query is shorter than 2 and treat the query as raw regular expression.

To change this behavior, change the value of FinderMultiQueryMigemo.minimum_query_length like following settings.

from percol.finder import FinderMultiQueryMigemo
FinderMultiQueryMigemo.minimum_query_length = 1

Pinyin support

Now percol supports pinyin (http://en.wikipedia.org/wiki/Pinyin) for matching Chinese characters.

$ percol --match-method pinyin

In this matching method, first char of each Chinese character's pinyin sequence is used for matching. For example, 'zw' matches '中文' (ZhongWen), '中午'(ZhongWu), '作为' (ZuoWei) etc.

Extra package pinin(https://pypi.python.org/pypi/pinyin/0.2.5) needed.

Switching matching method dynamically

Matching method can be switched dynamically (at run time) by executing percol.command.specify_finder(FinderClass) or percol.command.toggle_finder(FinderClass). In addition, percol.command.specify_case_sensitive(case_sensitive) and percol.command.toggle_case_sensitive() change the matching status of case sensitivity.

from percol.finder import FinderMultiQueryMigemo, FinderMultiQueryRegex
percol.import_keymap({
    "M-c" : lambda percol: percol.command.toggle_case_sensitive(),
    "M-m" : lambda percol: percol.command.toggle_finder(FinderMultiQueryMigemo),
    "M-r" : lambda percol: percol.command.toggle_finder(FinderMultiQueryRegex)
})

Tips

Selecting multiple candidates

You can select and let percol to output multiple candidates by percol.command.toggle_mark_and_next() (which is bound to C-SPC by default).

percol.command.mark_all(), percol.command.unmark_all() and percol.command.toggle_mark_all() are useful to mark / unmark all candidates at once.

Z Shell support

A zsh completing-function for percol is available in https://github.com/mooz/percol/blob/master/tools/zsh/_percol .

Comments
  • make releases

    make releases

    Hi!

    I'm looking at packaging this for Debian, and for that purpose it would be useful to have release numbers. Otherwise I'd just package it as 0~20140716 (for example).

    Thanks

    opened by anarcat 4
  • Spaces in search query

    Spaces in search query

    Is it somehow possible to have search queries contain spaces, because whenever I have a space in a query, it seems to interpret it as two separate queries.

    For example (in regex mode): [0-9]{2} USER (i.e. a space, two numbers, a space and then the string USER) should match

    CHAPTER 26 USER: 180
    CHAPTER 26 USER: 2
    

    But also matches:

    BOOK 6 USER: 787
    BOOK 6 USER: 89
    LOCATION 111 USER: 709
    LOCATION 120 USER: 2
    

    Is there anyway to tell Percol to interpret the spaces as part of the search query?

    opened by troeggla 3
  • Using `percol` from `fish` shell

    Using `percol` from `fish` shell

    Trying to use percol from fish as output to other commands doesn't work.

    ls | percol works as expected.

    cd (ls | percol) (not a typo, fish uses (...) instead of bash/zsh's $(...)) closes without doing anything.

    opened by ghost 3
  • Prompt at the bottom

    Prompt at the bottom

    I'd like to have prompt at the bottom because you need to change your focus to the top of the terminal when start using percol. It would be nice if percol can show candidates and prompt "upside down", like this:

    |
    |
    | candidate 3
    | candidate 2
    | candidate 1
    | QUERY>
    

    Can percol have an option to do this?

    opened by tkf 3
  • Add feature to dynamically change case sensitive and match method

    Add feature to dynamically change case sensitive and match method

    I've implemented a feature to toggle options in the same percol session.

    Because I'm a begginer of Python, would you like to review my code? If you like this feature, please pull the commit.

    Sincerely, kbkbkbkb1

    opened by kai2nenobu 3
  • locale.Error: unsupported locale setting

    locale.Error: unsupported locale setting

    Hi I run percol right after installing but I got an error. So I looked in the code and found the reason why I got this error. Anybody else got the same error?

    Traceback (most recent call last):
      File "/usr/local/bin/percol", line 14, in <module>
        main()
      File "/usr/local/lib/python2.7/site-packages/percol/cli.py", line 186, in main
        output_encoding = set_proper_locale(options)
      File "/usr/local/lib/python2.7/site-packages/percol/cli.py", line 122, in set_proper_locale
        locale.setlocale(locale.LC_ALL, '')
      File "/usr/local/Cellar/python/2.7.12_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/locale.py", line 581,in setlocale
        return _setlocale(category, locale)
    locale.Error: unsupported locale setting
    

    I fixed this proble by just putting specific locale "C" into the second parameter. @line 122

    locale.setlocale(locale.LC_ALL, 'C')
    
    opened by dyong0 2
  • Problem binding C-j and RET

    Problem binding C-j and RET

    When I rebind C-j, the binding for RET is also changed. When I bind RET, neither binding is changed.

    REPRODUCE CASE 1: Put this in ~/.percol.d/rc.py:

    percol.import_keymap({
        "C-j" : lambda percol: percol.command.select_next(),
    })
    

    While using percol, press RET

    Expected result: selected entry is printed to stdout (default RET binding) Actual result: the next entry becomes selected

    REPRODUCE CASE 2: Put this in ~/.percol.d/rc.py:

    percol.import_keymap({
        "RET" : lambda percol: percol.command.select_next(),
    })
    

    While using percol, press RET

    Expected result: the next entry becomes selected Actual result: selected entry is printed to stdout (default C-j binding)

    opened by guiniol 2
  • Incorrect fsf address

    Incorrect fsf address

    Hello.

    I've package percol for Fedora and discower you have outdated file headers:

    percol.x86_64: E: incorrect-fsf-address /usr/bin/percol
    percol.x86_64: E: incorrect-fsf-address /usr/lib/python3.4/site-packages/percol/command.py
    percol.x86_64: E: incorrect-fsf-address /usr/lib/python3.4/site-packages/percol/debug.py
    percol.x86_64: E: incorrect-fsf-address /usr/lib/python3.4/site-packages/percol/view.py
    percol.x86_64: E: incorrect-fsf-address /usr/lib/python3.4/site-packages/percol/tty.py
    percol.x86_64: E: incorrect-fsf-address /usr/lib/python3.4/site-packages/percol/ansi.py
    percol.x86_64: E: incorrect-fsf-address /usr/lib/python3.4/site-packages/percol/markup.py
    percol.x86_64: E: incorrect-fsf-address /usr/lib/python3.4/site-packages/percol/display.py
    percol.x86_64: E: incorrect-fsf-address /usr/lib/python3.4/site-packages/percol/action.py
    percol.x86_64: E: incorrect-fsf-address /usr/lib/python3.4/site-packages/percol/lazyarray.py
    percol.x86_64: E: incorrect-fsf-address /usr/lib/python3.4/site-packages/percol/__init__.py
    percol.x86_64: E: incorrect-fsf-address /usr/lib/python3.4/site-packages/percol/info.py
    percol.x86_64: E: incorrect-fsf-address /usr/lib/python3.4/site-packages/percol/model.py
    percol.x86_64: E: incorrect-fsf-address /usr/lib/python3.4/site-packages/percol/actions.py
    percol.x86_64: E: incorrect-fsf-address /usr/lib/python3.4/site-packages/percol/cli.py
    percol.x86_64: E: incorrect-fsf-address /usr/lib/python3.4/site-packages/percol/key.py
    percol.x86_64: E: incorrect-fsf-address /usr/lib/python3.4/site-packages/percol/finder.py
    

    By our guidelines https://fedoraproject.org/wiki/Common_Rpmlint_issues#incorrect-fsf-address I shoul inform you.

    opened by Hubbitus 2
  • --auto-match drops 2nd item in list

    --auto-match drops 2nd item in list

    Hello,

    I found an interesting bug when using the --auto-match flag. I can reproduce it with 0.1.0 installed from pypi on linux and osx. I am using python 2.7.

    First, the correct behavior, without --auto-match:

    $ echo -e "1\n2\n3\n4\n5" | percol
    QUERY>                                                                                                     (1/5) [1/1]
    1
    2
    3
    4
    5
    

    Next, the buggy behavior with --auto-match, the 2nd list item is dropped:

    $ echo -e "1\n2\n3\n4\n5" | percol --auto-match
    QUERY>                                                                                                     (1/4) [1/1]
    1
    3
    4
    5
    

    Interesting, huh? :smile_cat:

    If I check out the original commit where this feature was added, 00b5417f, then I get the correct behavior. If I check out the commit where this feature was refactored, bd59b87d, then I get the buggy behavior. So perhaps that refactoring is now doing something unsafe (consuming the 2nd element somehow).

    opened by lost-theory 2
  • Request: Customizable colors

    Request: Customizable colors

    I like that Percol colorizes text and the selected line background, but the white-on-magenta of the selected line is not very readable on my screen, because the contrast between the text and the magenta background is not very strong. After some digging I found where I can change the colors in view.py, but maintaining my own fork for this seems like overkill.

    It'd be really nice if Percol supported customizable colors, perhaps by command-line options, or by a config file.

    Thanks a lot for Percol!

    opened by alphapapa 2
  • Allow running as a symlink.

    Allow running as a symlink.

    If the percol executable is a symlink, abspath returns the directory containing the link, while realpath returns the directory containing the target. So now I can create

    local/bin/percol -> local/src/percol/bin/percol
    

    and I don't need local/src/percol/bin in my $PATH.

    opened by ChickenProp 2
  • Percol marked as broken in Nix

    Percol marked as broken in Nix

    I've been getting an environment stood up using nixpkgs. To my delight I found that I can install packages that normally are part of a language runtime (such as percol). percol even has a Nix package! However it is marked as broken as of writing. This typically stops a nix install of this package or any of its dependents.

    The nix file mentions "missing cmigemo package which is missing libmigemo.so" as the direct reason for being marked as broken. I am unfamiliar with the Python ecosystem as well as Nix so I can't really speak to any of that. I'm mostly sharing awareness here and possibly hoping that maybe the information is dated :)

    It also mentions that percol doesn't support Python 3. It's not clear if that's a requirement to no longer be marked as broken. I see there's some tickets in the issue tracker about that. I would think with Nix this would be fine conceptually, but I don't see anything in the package that jumps out as demanding Python 2.x (again, I'm unfamiliar with both ecosystems here).

    For what it's worth, there is an allowBroken = true value that Nix consumers can set in their configuration to allow the installation to go forward. My limited reading on the topic suggests that the flag is kind of the equivalent of saying the tests don't pass for the package in question.

    Thanks for maintaining a very helpful program!

    opened by LoganBarnett 0
  • Example code in readme does not work with latest PyPI percol 0.2.1

    Example code in readme does not work with latest PyPI percol 0.2.1

    Hi!

    I would like to vote for for a new release. The readme changes merged from 4b28037e328da3d0fe8165c11b800cbaddcb525e are not supported: Once I fix the sting IO import for Python 3 (#107) I get ImportError: cannot import name 'no_output' from 'percol.actions' for a good reason: It does not exist in release 0.2.1. Can we have a new release please please?

    If anyone needs a version of the example that works with Python 3.7:

    from io import StringIO
    from percol import Percol
    from percol.actions import action
    
    @action()
    def no_output(lines, percol):
        "ignore all output"
        pass
    
    def main(candidates):
        si, so, se = StringIO(), StringIO(), StringIO()
        with Percol(
                actions=[no_output],
                descriptors={'stdin': si, 'stdout': so, 'stderr': se},
                candidates=iter(candidates)) as p:
            p.loop()
        if p.args_for_action is None:
            raise KeyboardInterrupt
        results = p.model_candidate.get_selected_results_with_index()
        return [r[0] for r in results]
    
    if __name__ == "__main__":
        candidates = ['foo', 'bar', 'baz']
        results = main(candidates)
        print("You picked: {!r}".format(results))
    

    Best, Sebastian

    opened by hartwork 0
  • python 3 support?

    python 3 support?

    The readme says that only python 2 is supported. Is that still the case?

    Googling "python 3 percol" revieled a bunch of clones in the while, allegedly with support for python 3.

    opened by plainas 1
Releases(v0.1.0)
  • v0.1.0(Mar 18, 2015)

    Do pip install percol -U to upgrade to the latest release.

    • Supports Python 3
    • Add a match method 'pinin'
    • Add an option -v, which inverts matches as in grep
    • Now percol displays runtime errors to screen
    • Use python-cmigemo for C/Migemo feature (Frees users from installing the extra package C/Migemo native Python extension)
    Source code(tar.gz)
    Source code(zip)
Owner
Masafumi Oyamada
Masafumi Oyamada
Analysis of a daily word game "Wordle"

Wordle Analysis of a daily word game "Wordle" https://www.powerlanguage.co.uk/wordle/ Description Worlde is a daily word game in which a player attemp

Bartek 1 Feb 07, 2022
Un module simple pour demander l'accord de l'utilisateur dans une CLI.

Demande de confirmation utilisateur pour CLI Présentation ask_lib est un module pour le langage Python proposant une seule fonction; ask(). Le but pri

CallMePixelMan 7 May 09, 2022
flora-dev-cli (fd-cli) is command line interface software to interact with flora blockchain.

Install git clone https://github.com/Flora-Network/fd-cli.git cd fd-cli python3 -m venv venv source venv/bin/activate pip install -e . --extra-index-u

14 Sep 11, 2022
PwnWiki command line searching tool & bindings written in Python

pwsearch PwnWiki 数据库搜索命令行工具。 安装 您可以直接用 pip 命令从 PyPI 安装 pwsearch: pip3 install -U pwsearch 您也可以 clone 该仓库并直接从源码启动

PwnWiki 20 Jun 21, 2021
Darkdump - Search The Deep Web Straight From Your Terminal

Darkdump - Search The Deep Web Straight From Your Terminal About Darkdump Darkdump is a simple script written in Python3.9 in which it allows users to

Josh Schiavone 264 Dec 30, 2022
Simple CLI tool to track your cryptocurrency portfolio in real time.

Simple tool to track your crypto portfolio in realtime. It can be used to track any coin on the BNB network, even obscure coins that are not listed or trackable by major portfolio tracking applicatio

Trevor White 69 Oct 24, 2022
Custom function scheduler TUI (text-based user interface) in the console

Custom function scheduler TUI (text-based user interface) in the console

Luke 1 Oct 26, 2022
A begginer reverse shell tool python.

A begginer tools for hacking. The theme of this repository is to bring some ready-made open-source tools for anyone new to the world of hacking. This

Dio brando 2 Jan 05, 2022
Python3 library for multimedia functions at the command terminal

TERMINEDIA This is a Python library allowing using a text-terminal as a low-resolution graphics output, along with keyboard realtime reading, and a co

Joao S. O. Bueno 89 Dec 17, 2022
This a simple tool to query the awesome ippsec.rocks website from your terminal

ippsec-cli This a simple tool to query the awesome ippsec.rocks website from your terminal Installation and usage cd /opt git clone https://github.com

stark0de 5 Nov 26, 2022
MsfMania is a command line tool developed in Python that is designed to bypass antivirus software on Windows and Linux/Mac in the future

MsfMania MsfMania is a command line tool developed in Python that is designed to bypass antivirus software on Windows and Linux/Mac in the future. Sum

446 Dec 21, 2022
Text based command line webcam photobooth app

Skunkbooth Why See it in action Usage Installation Run Media location Contributing Install Poetry Clone the repo Activate poetry shell Install dev dep

David Yang 45 Dec 26, 2022
A terminal utility to sort image files based on their characteristics.

About A terminal utility to sort image files based on their characteristics. Motivation This program was developed after I've realized that I had too

José Ferreira 1 Dec 10, 2022
Command line interface for testing internet bandwidth using speedtest.net

speedtest-cli Command line interface for testing internet bandwidth using speedtest.net Versions speedtest-cli works with Python 2.4-3.7 Installation

Matt Martz 12.4k Jan 08, 2023
Commandline Python app to Autodownload mediafire folders and files.

Commandline Python app to Autodownload mediafire folders and files.

Tharuk Renuja 3 May 12, 2022
A CLI based task manager tool which helps you track your daily task and activity.

CLI based task manager tool This is the simple CLI tool can be helpful in increasing your productivity. More like your todolist. It uses Postgresql as

ritik 1 Jan 19, 2022
Python implementation of SSH file transfer across servers.

SSH Transfer Python implementation of SSH file transfer across servers. Requirements paramiko=2.7.2 Usage Config Preparation Configure some informatio

Zhe Kong 1 Nov 23, 2021
A webmining CLI tool & library for python.

minet is a webmining command line tool & library for python (= 3.6) that can be used to collect and extract data from a large variety of web sources

médialab Sciences Po 165 Dec 17, 2022
A Python script for finding a food-truck based on latitude and longitude coordinates that you can run in your shell

Food Truck Finder Project Description This repository contains a Python script for finding a food-truck based on latitude and longitude coordinates th

1 Jan 22, 2022