Need help with howdoi?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

gleitz
8.9K Stars 798 Forks MIT License 796 Commits 26 Opened issues

Description

instant coding answers via the command line

Services available

!
?

Need anything else?

Contributors list

howdoi

instant coding answers via the command line

.. image:: https://img.shields.io/github/workflow/status/gleitz/howdoi/Python%20CI?style=plastic&color=78dce8 :target: https://github.com/gleitz/howdoi/actions?query=workflow%3A%22Python+CI%22

.. image:: https://img.shields.io/badge/dynamic/json?style=plastic&color=ab9df2&maxAge=86400&label=downloads&query=%24.total_downloads&url=https%3A%2F%2Fapi.pepy.tech%2Fapi%2Fprojects%2Fhowdoi :target: https://pepy.tech/project/howdoi

.. image:: https://img.shields.io/pypi/pyversions/howdoi.svg?style=plastic&color=ff6188 :target: https://pypi.python.org/pypi/howdoi

|

.. image:: http://sublimate.org/flyers/HowDoIcolor512.png :target: https://pypi.python.org/pypi/howdoi :alt: Sherlock, your neighborhood command-line sloth sleuth

Sherlock, your neighborhood command-line sloth sleuth.


Are you a hack programmer? Do you find yourself constantly Googling for how to do basic programming tasks?

Suppose you want to know how to format a date in bash. Why open your browser and read through blogs (risking major distraction) when you can simply stay in the console and ask howdoi:

::

$ howdoi format date bash
> DATE=`date +%Y-%m-%d`

howdoi will answer all sorts of queries:

::

$ howdoi print stack trace python
> import traceback
>
> try:
>     1/0
> except:
>     print '>>> traceback <<     traceback.print_exc()
>     print '>>> end of traceback << traceback.print_exc()

$ howdoi convert mp4 to animated gif > video=/path/to/video.avi > outdir=/path/to/output.gif > mplayer "$video"
> -ao null
> -ss "00:01:00" \ # starting point > -endpos 10 \ # duration in second > -vo gif89a:fps=13:output=$outdir
> -vf scale=240:180

$ howdoi create tar archive > tar -cf backup.tar --exclude "www/subf3" www

.. image:: http://imgs.xkcd.com/comics/tar.png :target: https://xkcd.com/1168/

Installation

::

pip install howdoi

or

::

pip install git+https://github.com/gleitz/howdoi.git#egg=howdoi

or

::

python setup.py install

New to howdoi?

::

howdoi howdoi

Usage

::

usage: howdoi [-h] [-p POS] [-n NUM] [-a] [-l] [-c] [-x] [-C] [-j] [-v] [-e [ENGINE]] [--save] [--view] [--remove] [--empty] [QUERY ...]

instant coding answers via the command line

positional arguments: QUERY the question to answer

optional arguments: -h, --help show this help message and exit -p POS, --pos POS select answer in specified position (default: 1) -n NUM, --num NUM number of answers to return (default: 1) -a, --all display the full text of the answer -l, --link display only the answer link -c, --color enable colorized output -x, --explain explain how answer was chosen -C, --clear-cache clear the cache -j, --json return answers in raw json format -v, --version displays the current version of howdoi -e [ENGINE], --engine [ENGINE] search engine for this query (google, bing, duckduckgo) --save, --stash stash a howdoi answer --view view your stash --remove remove an entry in your stash --empty empty your stash

environment variable examples: HOWDOI_COLORIZE=1 HOWDOI_DISABLE_CACHE=1 HOWDOI_DISABLE_SSL=1 HOWDOI_SEARCH_ENGINE=google HOWDOI_URL=serverfault.com

Using the howdoi stashing feature (for more advanced features view the

keep documentation 
_).

::

stashing: howdoi --save QUERY
viewing:  howdoi --view
removing: howdoi --remove (will be prompted which answer to delete)
emptying: howdoi --empty (empties entire stash, will be prompted to confirm)

As a shortcut, if you commonly use the same parameters each time and don't want to type them, add something similar to your .bash_profile (or otherwise). This example gives you 5 colored results each time.

::

alias h='function hdi(){ howdoi $* -c -n 5; }; hdi'

And then to run it from the command line simply type:

::

$ h format date bash

Other useful aliases:

::

alias hless='function hdi(){ howdoi $* -c | less --raw-control-chars --quit-if-one-screen --no-init; }; hdi'

Contributors

  • Benjamin Gleitzman (
    @gleitz 
    _)
  • Yanlam Ko (
    @YKo20010 
    _)
  • Diana Arreola (
    @diarreola 
    _)
  • Eyitayo Ogunbiyi (
    @tayoogunbiyi 
    _)
  • Chris Nguyen (
    @chrisngyn 
    _)
  • Shageldi Ovezov (
    @ovezovs 
    _)
  • Mwiza Simbeye (
    @mwizasimbeye11 
    _)
  • Shantanu Verma (
    @SaurusXI 
    _)
  • And
    more! 
    _

Notes

  • Works with Python 3.5 and newer. Unfortunately Python 2.7 support has been discontinued :(
  • There is a
    GUI that wraps howdoi 
    _.
  • There is a
    Flask webapp that wraps howdoi 
    _.
  • An Alfred Workflow for howdoi can be found at
    http://blog.gleitzman.com/post/48539944559/howdoi-alfred-even-more-instant-answers 
    _.
  • Slack integration available through
    slack-howdoi 
    _.
  • Telegram integration available through
    howdoi-telegram 
    _.
  • Howdoi uses a cache for faster access to previous questions. Caching functionality can be disabled by setting the HOWDOIDISABLECACHE environment variable. The cache is stored in
    ~/.cache/howdoi
    .
  • You can set the HOWDOIURL environment variable to change the source url for answers (default:
    stackoverflow.com
    , also supported:
    serverfault.com
    ,
    pt.stackoverflow.com
    ,
    full list 
    ).
  • You can set the HOWDOISEARCHENGINE environment variable to change the underlying search engine for StackOverflow links (default:
    google
    , also supported:
    bing
    ,
    duckduckgo
    ). The -e flag will switch the underlying engine for a single query.
  • Setting the HOWDOI_COLORIZE environment variable will colorize the output by default.
  • Special thanks to Rich Jones (
    @miserlou 
    _) for the idea.
  • More thanks to
    Ben Bronstein 
    _ for the logo.

Development

  • Checkout the repo
  • Run
    python -m howdoi QUERY
    (if you try running
    python howdoi/howdoi.py
    you might get
    ValueError: Attempted relative import in non-package
    ).

If you would like to use howdoi from within a python script, just pass your query to

howdoi.howdoi()
: ::
from howdoi import howdoi

query = "for loop python" output = howdoi.howdoi(query)

Or parse it yourself (either work):

::

from howdoi import howdoi

query = "for loop python" parser = howdoi.get_parser() args = vars(parser.parse_args(query.split(' ')))

output = howdoi.howdoi(args)

Or get the results as JSON:

::

from howdoi import howdoi
import json

query = "for loop python"

output_json = json.loads(howdoi.howdoi(f'{query} -j'))

Extension Development

To simplify the process of integrating howdoi as a code editor extension, edit the files within the

extension/code-editor-integration folder 
_.

To improve upon the Visual Studio Code howdoi extension, edit the files within the

extension/vscode-ext folder 
_ and republish the extension.

Code Editor Integration ~~~~~~~~~~~~~~~~~~~~~~~

Head over to the

README.md 
_ for an in depth explanation on beginning development for the howdoi code editor integration plug-in.

Visual Studio Code Extension ~~~~~~~~~~~~~~~~~~~~~~~~~~~~

To begin development for the Visual Studio Code extension, install all necessary packages:

::

npm install

Then, precompile the extension:

::

npm run precompile

To run and test the extension, utilize Visual Studio Code's

debugging tools 
_.

Visual Studio Code Extension Installation

howdoi can now be installed as an extension on Visual Studio Code! There are two ways to install it:

  1. On the Visual Studio Code MarketPlace:
  • Head over to the
    MarketPlace 
    _ to install the extension.
  1. Directly from the packaged extension:
  • Head over
    here 
    _ to locally install the howdoi Visual Studio Code package.

Contributing

I'm happy to accept pull requests that make howdoi better. If you're thinking of contributing and want a little feedback before you jump into the codebase, post an

issue 
_ on Github.

Before PRs are accepted they must pass all

tests 
_ and not have any flake8 or pylint warnings or errors. This projects uses vanilla configuration files for both linters (
.flake8rc
and
.pylintrc
in the root directory), but with a max line length of 119.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.