Simple Google Search from the command line for fish shell
This is a simple fish plugin for Google searching from the command line.
Easy to manipulate Google query parameters with command options.
You can do the things below with this plugin.
- URL encoding for multibyte character (CJK)
- Choose your favorite browser
- Google Search Options (minimal but enough):
- Exact Match
- Image Search
- Specific Language Search
- Disable Personalized Search
- Restrict search results within specified time range
- Exclude multiple words from your search
- Suffix addtinal search parameters
- Autosuggest these options
- Simple search on specific sites:
- Github
- Youtube
- Stack overflow
- fish shell docs
- Specified URL (if query is possible)
- For Japanese Users: Zenn, Qiita
- Interactive Search Mode (Shiny new thing from v1.6.0)
- Option Selective Search Mode (Base mode)
- Sequential Search Mode
- Search Interface for front-end developers (from v1.7.0)
- easy & quick search with sepcific docs using
fin
command (warpper ofggl
)
- easy & quick search with sepcific docs using
This plugin is developed mainly for macOS.
For Linux distributions, ggl
internally excutes xdg-open
instead of macOS's open
command.
- fish shell 3.2.0+
- For Linux distributions: xdg-utils
Using fisher:
fisher install yo-goto/ggl.fish
Update
fisher update yo-goto/ggl.fish
ggl [OPTIONS] SEARCHWORDS
ggl
command can accept mutiple strings (like "how to use fish shell") for searching.
Examples:
ggl how to use fish shell
# search by a phrase "how to use fish shell"
ggl -p how to use fish shell
# search with exact match, ues -p or --perfect option
ggl -l=en English search
ggl -l=ja 日本語検索
# specific language search with -l or --lang option
# language option is helpful to search with non native language
ggl -e English search
# search in English, you can alse use -e or --english option
ggl.fish
internally generates searchable URLs.
To confirm a generated URL, use -t
or --test
option.
This test option can be combined with any other options.
Test Examples:
$ ggl -t how to use fish shell
Keyword : how to use fish shell
Encoded : how+to+use+fish+shell
Search URL : https://www.google.com/search?q=how+to+use+fish+shell
$ ggl -tei cat cute photo
Keyword : cat cute photo
Encoded : cat+cute+photo
Language : English
Search URL : https://www.google.com/search?q=cat+cute+photo&lr=lang_en&tbm=isch
$ ggl fish plugin -g --test
Keyword : fish plugin
Encoded : fish+plugin
Site : Github
Search URL : https://github.com/search?q=fish+plugin
$ ggl fish shell -x=advanced -x=bash --test
Keyword : fish shell
Excluded : advanced bash
Encoded : fish+shell+-advanced+-bash
Search URL : https://www.google.com/search?q=fish+shell+-advanced+-bash
$ ggl fishシェル -x=シェルダー -l=ja --test
Keyword : fishシェル
Excluded : シェルダー
Encoded : fish%E3%82%B7%E3%82%A7%E3%83%AB+-%E3%82%B7%E3%82%A7%E3%83%AB%E3%83%80%E3%83%BC
Language : Japanese
Search URL : https://www.google.com/search?q=fish%E3%82%B7%E3%82%A7%E3%83%AB+-%E3%82%B7%E3%82%A7%E3%83%AB%E3%83%80%E3%83%BC&lr=lang_ja
$ ggl fish plugin -x=fisher -r=y1 -e --test
Keyword : fish plugin
Excluded : fisher
Encoded : fish+plugin+-fisher
Language : English
Time Range : y1
Search URL : https://www.google.com/search?q=fish+plugin+-fisher&lr=lang_en&tbs=qdr:y1
$ ggl --test fish swimming -a=tbm=vid -a=filter=1
Keyword : fish swimming
Encoded : fish+swimming
Search URL : https://www.google.com/search?q=fish+swimming&tbm=vid&filter=1
These test results can be seen with -d
or --debug
option without opening a browser.
The debug option internally runs ggl --test
for some test cases.
To pass a generated URL to any text proceccing, use -o
or --output
option. It just prints the URL.
$ ggl -o how to use fish shell
https://www.google.com/search?q=how+to+use+fish+shell
$ string split '/' (ggl -o how to use fish shell)
https:
www.google.com
search?q=how+to+use+fish+shell
Help Options
-h
,--help
: Show Help-v
,--version
: Show Version Info
Utility Options
-t
,--test
: Test URL Generation-o
,--output
: Print generated URL-d
,--debug
: Print some tests--quiet
: Open URL without printing anything
Special Option
-m
,--mode
: Interactive Search Mode
Browser Options (uppercase letter)
If not specified, ggl opens URL with default browser.
-C
,--Chrome
: Google Chrome-S
,--Safari
: Safari-F
,--Firefox
: Firefox-V
,--Vivaldi
: Vivaldi-B
,--Brave
: Brave-b
,--browser
: Other Browser
After -b
option, type browser name (ex: -b=Opera
).
Google Search Options
-e
,--english
: English Search-i
,--image
: Image Search-p
,--perfect
: Exact Match-n
,--nonperson
: Disable Personalized Search-l
,--lang
: Specific Language Search-r
,--range
: Time Range for Searching-x
,--exclude
: Exclude words from search-a
,--additional
: Suffix addtional search parameters to URL
After language option -l
, specify language flag (ex: -l=en
).
Valid Flag | Language |
---|---|
e or en |
English |
j or ja |
Japanese |
d or de |
German |
f or fr |
French |
i or it |
Italian |
s or es |
Spanish |
r or ru |
Russian |
k or ko |
Korean |
z or zh |
Chinese |
After -r
or --range
option, spcify time range (ex: -r=y2
).
If no numbers are specified (like -r=y
), the time range becomes the same as -r=y1
.
Range | Time | Example |
---|---|---|
h |
Past Hour | h6 (within the last 6 hours) |
d |
Past Day | d5 (within the last 5 days) |
w |
Past Week | w4 (within the last 4 weeks) |
m |
Past Month | m3 (within the last 3 months) |
y |
Past Year | y2 (within the last 2 years) |
Site Options
-g
,--github
: Github-y
,--youtube
: YouTube-s
,--stackoverflow
: Stack overflow-f
,--fishdoc
: fish shell docs
Sites For Japaense Users
-z
,--zenn
: Zenn-q
,--qiita
: Qiita
Other URL options
-u
,--url
: Specified URL with=
-L
,--local
: Open local host with specified port number (by default, ggl openslocalhost:3000
)--site
: Search within specific site--noq
: Open a site without any keywords
$ ggl -t javascript -u=https://developer.mozilla.org/en-US/search?q=
Keyword : javascript
Encoded : javascript
Site : specified URL
Search URL : https://developer.mozilla.org/en-US/search?q=javascript
$ ggl -t --local
Keyword :
Encoded :
Site : localhost:3000
Search URL : https://localhost:3000
$ ggl test/page --local=6000 --test
Keyword : test/page
Encoded : test/page
Site : localhost:6000
Search URL : https://localhost:6000/test/page
$ ggl typescript --site=deno.land --test
Keyword : typescript
Encoded : typescript
Site : Within "deno.land" on Google
Search URL : https://www.google.com/search?q=typescript&as_sitesearch=deno.land
To enter the interactive search mode, use -m
or --mode
option flag.
In this mode, you can interactively set search options, and you can search for the things with the same options you set once.
$ ggl --mode
> Interactive Mode
>> Base Mode
<< [y/yes | k/keyword | t/test | s/seq-mode | o/option | c/check-option | e/exit] >>
ggl? :
From v1.7.0, you can use fin
command which is the ggl
wrapper for frontend developers and learners. "fin" is the abbreviation of "Frontend search INterface"
fin
has many subcommands to search for the things familiar to frontend dev. fin
is a just wrapper, so you can also use ggl
command option flags like -t
or --test
.
Usage:
Usage:
fin [KEYWORDS...] [ggl options]
fin g [KEYWORDS...] [ggl options]
fin ggl [KEYWORDS...] [ggl options]
fin SUBCOMMAND [KEYWORDS...] [ggl options]
Options:
-v, --version : Show version info
-h, --help : Show help
-d, --debug : Show debug tests
Available subcommands:
[base] g(ggl) help
[basic] youtube github stackoverflow,
[japanese] zenn qiita
[emoji] emojipedia
[MDN] mdn
[js runtime] node deno
[pkg manger] npm yarn
[framework] vue react angular nextjs storybook
[language] rust typescript
[css] bem
[other] codepen
To see help, use -h
or --help
option flags (fin help
is also available).
If you want to add some options familiar to frontend dev, you can create a pull request. I'm planning to add more options.
Test Examples:
$ fin deno fetch -t
Keyword : fetch
Encoded : fetch
Site : Within "deno.land" on Google
Search URL : https://www.google.com/search?q=fetch&as_sitesearch=deno.land
$ fin npm gray-matter --test
Keyword : gray-matter
Encoded : gray-matter
Search URL : https://www.npmjs.com/search?q=gray-matter
$ fin mdn JavaScript --test
Keyword : JavaScript
Encoded : JavaScript
Search URL : https://developer.mozilla.org/search?q=JavaScript
These test results can be seen with -d
or --debug
option without opening a browser.
For any developers and learners like me, searching and then gaining knowledge about the technology we are learning as soon as possible is such an important skill. Whenever we get something ambiguous, unknown things or usage of any commands in our mind while touching the terminal and shell, we should be able to search for keywords seamlessly and quickly from the command line. (Of course, help
and man
commands are also important.)
I found other tools to search from the command line, but there is no ideal tool fit for my use case.
For instance, those who are not native to English need a feature to search by both their mother tongue and English (with -e
flag). Also, I prefer to use a modern browser such as Chrome and Vivaldi for reading articles. No need to use my terminal as a browser.
Just a helpful wrapper of the open
command is enough for me.
I wanted a minimal and easy-to-use searching tool with useful search options for my use case and fish shell, so I've developed this plugin for my study and practical use. This is my motivation.
- This code is originally based on my gist.
- Code explanation is here (in Japanese).
- Logo font: Fish font
- I got my base idea and inspired by this article - WhiteNote
- The article about Google URL parameters is this - fragment.database.
fin
command was inspired by ohmyzsh/plugins/frontend-search
Pull requests are welcom.