Instant coding answers via the command line
Project description
howdoi
instant coding answers via the command line
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
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.py [-h] [-p POS] [-n NUM] [-a] [-l] [-c] [-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 -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)
And more!
Notes
Works with Python2 and Python3
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 HOWDOI_DISABLE_CACHE environment variable. The cache is stored in ~/.cache/howdoi.
You can set the HOWDOI_URL 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 HOWDOI_SEARCH_ENGINE 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.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:
On the Visual Studio Code MarketPlace:
Head over to the MarketPlace to install the extension.
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.
News
2.0.10
Hotfix for new Google classnames
Separate requirements.txt files for prod and dev
2.0.9
Cleaner command line options that also include environment variables
README updates
2.0.8
Fix issue for answers that have no code in the answer but code in the comments
Add range checks for -n and -p flags
Moved from Travis to Github Actions
Dropped Python 2.7 support
2.0.7
Update for new Google CSS style
2.0.6
Fix issue where -a would not return a proper response due to updated CSS on StackOverflow
2.0.5
New logo and colors!
2.0.4
Cachelib rollback to support Python 2.7
Better error message when Google is being blocked (for example in China)
2.0.3
Bring back Python 2.7 support (for now)
2.0.2
Fixed keep support for stashing and viewing answers
2.0.1
Added JSON output with the -j flag (great for consuming howdoi results for use in other apps)
Added stashing ability for saving useful answer for later (based on https://github.com/OrkoHunter/keep)
Added caching for tests to prevent being rate limited by Google while developing
Added easier method for calling howdoi when imported (howdoi.howdoi)
1.2.1
Fix dependency issue
1.2.0
Massive speed improvements of startup, answer fetching, and caching
Command line flags for alternate search engines
Remove duplicate answers
1.1.14
Links displayed with markdown syntax
Improved performance and caching (again)
1.1.13
Improved performance and caching
More friendly answer display
Added support for Python 3.6
Removed support for Python 2.6
1.1.12
Add additional search engine support
1.1.11
Fix issue with UTF-8 encoding
1.1.10
Include the link in output when asking for >1 answer
Compatibility with linuxbrew
1.1.9
Fix issue with upload to PyPI
1.1.8
Fix colorization when HOWDOI_COLORIZE env variable is enabled
Fix certificate validation when SSL disabled
1.1.7
Add Localization support with HOWDOI_LOCALIZATION env variable (Currently only pt-br and en)
1.1.6
Updates for Python3
Updates for caching
1.1.5
Updates for Python3
Fix issues with cache
Allow disabling SSL when accessing Google
1.1.4
Added caching
1.1.3
Added fix to handle change in Google search page HTML
Updated Travis CI tests
1.1.2
Compatibility fixes for Python3.2
Travis CI tests now being run for Python 2.6, 2.7, 3.2, and 3.3
1.1.1
Added message when question has no answer
1.1
Added multiple answers with -n/–num-answers flag
Added colorized output with -c/–color flag
Added answer link to the bottom of questions with -a/–all flag
Unit tests now managed through Travis CI
1.0
Added support for Python3
Switched to the requests library instead of urllib2
Project status changed to Production/Stable
Added troubleshooting steps to the README
0.2
Added sane flags
Now using /usr/bin/env python instead of /usr/bin/python
Updated README for brew installation instructions
0.1.2
Added Windows executable
Updated README for pip installation instructions
0.1.1
Added to PyPI
0.1
We’re doing it live!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.