
Show HN: Anycomplete - nathancahill
https://github.com/nathancahill/hammerspoon-config
======
stroebjo
This uses the Google Autocomplete API which seems a bit risky to use [0] and
according to this Google blog post should be already shut down [1]. Do you
have any newer information on how reliable the API is?

[0]: [http://stackoverflow.com/questions/6428502/google-search-
aut...](http://stackoverflow.com/questions/6428502/google-search-autocomplete-
api) [1]: [https://webmasters.googleblog.com/2015/07/update-on-
autocomp...](https://webmasters.googleblog.com/2015/07/update-on-autocomplete-
api.html)

~~~
AlphaWeaver
Instructions are also included to use DuckDuckGo.

~~~
jxy
Wonderful. I decided to put a script together.

    
    
      #!/bin/bash
      S="$(echo "$@" | sed -E 's, +,+,g')"
      g(){
       curl -sS "https://suggestqueries.google.com/complete/search?client=firefox&q=$1" \
        | sed -E 's,.*\[([^]]*)\].*,\1,;s,",,g' | tr , '\n'
      }
      d(){
       curl -sS "https://duckduckgo.com/ac/?q=$1" \
        | sed -E 's,"phrase":|[][{}"],,g' | tr , '\n'
      }
      paste -d , <(g $S) <(d $S) | column -t -s ,

------
jxy
If you have your shell ready,

    
    
        curl -sS 'https://www.google.com/complete/search?client=hp&hl=en&xhr=t&q=aurora' \
            | json_pp | sed -nE '/<\/?b>/{s```g;s`"|,|^ *``g;p}'

~~~
jsrn
Nice!

To run this with macOS, I had to use the GNU version of sed. I installed it
with

    
    
        $ brew install gnu-sed
    

And it is then called with 'gsed' instead of 'sed'.

As an avid Perl programmer, I had json_pp in my $PATH - for everyone else - it
is here:
[https://metacpan.org/pod/JSON::PP](https://metacpan.org/pod/JSON::PP)

You can install it with cpanm:

    
    
        $ cpanm JSON::PP
    

If you don't have cpanm, you can install it with

    
    
        $ curl -L https://cpanmin.us | perl - App::cpanminus
    

The modified command line from above then becomes:

    
    
        $ curl -sS 'https://www.google.com/complete/search?client=hp&hl=en&xhr=t&q=aurora' \
            | json_pp | gsed -nE '/<\/?b>/{s```g;s`"|,|^ *``g;p}'
    

Here is a little Bash function to encapsulate this:

    
    
        $ function c() { curl -sS "https://www.google.com/complete/search?client=hp&hl=en&xhr=t&q=$1" | json_pp | gsed -nE '/<\/?b>/{s```g;s`"|,|^ *``g;p}'; }
    

Which then allows you to use it like this:

    
    
        $ c hacker
        hacker news
        hacker typer
        hackerrank
        hackerman
        hackers movie
        hacker fare
        hackerone
        hackers cast
        hacker pschorr
    

For spaces in your query, use a '+':

    
    
        $ c New+York
        new york times
        new york and company
        new york giants
        new york post
        new york daily news
        new york weather

~~~
ekns
Improved version using jq. This properly URL encodes the query parameter and
uses a much simpler sed command. Additionally the API returns UTF-8 encoded
data when the user agent is specified. Requires curl >= 7.18.0.

    
    
        function c() {
            url='https://www.google.com/complete/search?client=hp&hl=en&xhr=t'
            # NB: user-agent must be specified to get back UTF-8 data!
            curl -H 'user-agent: Mozilla/5.0' -sSG --data-urlencode "q=$*" "$url" |
                jq -r .[1][][0] |
                sed 's,</\?b>,,g'
        }
    

Example:

    
    
        $ c ':)' ':('
        ) ( meaning
        ) ( emoticon
        ) ( ͡° ͜ʖ ͡°)
        ) ( emoticon meaning

------
mooman219
Had this idea a while back: I really enjoyed auto complete in my IDE and
configurable expansions and I wanted that everywhere. I threw together an app
to run in the background to keep track of the last word I typed and manage
suggestions when I hit a hotkey. Read from a local dictionary, used basic
usage frequency and levenshtein distance to recommend, pretty straightforward
hacked together in an afternoon project. I could see Anycomplete using a more
local suggestion list instead of relying on Google.

Ideally it showed a drop down under where you're typing much like most IDEs
would, but support was shotty at best. I really wish there were more OS level
hooks for this sort of thing, or a more standardized way to understand what
the user is typing and where, but that's not something I ever expect to
happen. My app was basically a keylogger while the one in the post is more
like a separate entity altogether.

------
lbotos
I just tried Hammerspoon for the first time this week and it's really, really
powerful. Currently working on an automation suite for a bunch of tedious
"micro-workflows" that I deal with on a daily basis.

~~~
ryanSrich
Is there a place to find inspiration or other examples of Hammerspoon
extensions? Just installed and wrote a few simple scripts, but having a hard
time coming up with anything groundbreaking that I'd want to build.

~~~
lbotos
I'm currently automating any workflow that I use daily:

\- We have a team call and a team agenda doc, I'm using a hotkey to open a
chooser, which has an option "goto team call" that fires up the call window
and the doc.

\- We deal with prod/dev so I made another item in the chooser "log in to dev
server" which opens a chrome incognito window, presses the one password unlock
shortcut and then I'm just waiting there to input 2 factor.

As I uncover more of these, I'll be coding them up and using the master
chooser to deal with any annoying workflows. :)

------
hossbeast
And by "Anywhere", you mean, on macOs

~~~
Ph0X
I'd love to see this as a Keypirinha [1] plugin.

[1] [http://keypirinha.com/](http://keypirinha.com/)

~~~
maturz
Or Wox [http://www.getwox.com/](http://www.getwox.com/)

------
joshuak
Universal autocomplete based on a local index of words? That would be great!

Universal autocomplete via google api? Hmm, something to think about.

1) Keyloggers

2) Filter bubbles

3) Offline tax

------
worldsayshi
Is there any similar tool for linux?

------
sytringy05
That's pretty cool, but I'm fairly certain that sooner or later I would end up
googling my password.

~~~
Aldo_MX
What's the matter? Passwords are intended to be disposable, here, have one:
xAKi2It6XJK7QJR1ROXFK7xmjV6kn6DNÑJU7Pu9hA7OS

~~~
latortuga
Obligatory: [http://bash.org/?244321](http://bash.org/?244321)

~~~
TeMPOraL
Now also popular as a Facebook prank :).

Related, reminds me of the havoc you could wreck on phpBB boards with [you]
command enabled. For those who haven't seen it, a [you] BBcode is replaced _on
display_ with viewing user's name.

So you'd generally write a reasonably sounding comment, with a sentence like
"This is something [you] was supposed to do.", you'd post it and then it was
time to eat popcorn.

------
pdaddyo
This is great, thanks for sharing. I've opened a pull request (#5) with a
tweak I made here - hold shift whilst choosing an option to actually show the
google results instead of pasting. Hammerspoon looks fantastic, can't wait to
automate even more!

------
milge
I built something like this many moons ago for browser history. A service
would run on your machine to aggregate your browser history. Typing
"[http://"](http://") anywhere on your machine would pop up a dialog with your
history of most recently visited sites. I wonder if browsers have gotten
better with APIs for web history and if it's any easier in windows. System-
wide keystrokes had to be checked with win32 calls which could set off
antivirus alarms. Keep up the good work. Maybe this will inspire me to see if
things have gotten better.

------
rm_-rf_slash
This is pretty cool, but it would really impress me if it could autocomplete
_facts_ based on _contexts_. I wish I could open a text editor and begin
writing while Anycomplete(-plus) crawled the web for links to factual data
based on the writing so far. Otherwise the context switching is time-consuming
and discouraging.

~~~
Gracana
That seems both really cool and absolutely terrifying. Automatically find
references when writing a tutorial? Hell yes! Automatically find references to
support an argument you've decided to make? Hmm... maybe not a win for
journalism.

[edit] Actually, I guess the way you described it, it could go the other way.
You start writing some argument, and google shows you some stats that show
you're wrong, or something. That would be neat.

~~~
millettjon
What are the privacy implications of this? Is there a duck duck go version?

~~~
fny
You press the hot key, and a Google search is run.[0] So nothing too
frightening. DDG compatibility should be easy. Just swap the endpoint
([https://duckduckgo.com/ac/?callback=autocompleteCallback&q=Y...](https://duckduckgo.com/ac/?callback=autocompleteCallback&q=YOUR_QUERY_HERE))
and parse the JSON.

[0]:
[https://github.com/nathancahill/anycomplete/blob/master/anyc...](https://github.com/nathancahill/anycomplete/blob/master/anycomplete.lua#L6)

~~~
nathancahill
Thanks. Updated the Readme with that information:
[https://github.com/nathancahill/anycomplete/blob/master/READ...](https://github.com/nathancahill/anycomplete/blob/master/README.md#privacy)

------
outcoldman
Great idea! I use Google so often for "anycomplete". Created similar extension
for Alfred [https://github.com/outcoldman/alfred-
anycomplete](https://github.com/outcoldman/alfred-anycomplete)

------
ChuckMcM
Nicely done. It will be interesting to see if this impacts your robot score
when using Google. There was a blow up a while ago where people used the
completion API to fish for trending searches and front run the Google News API
and get stories onto the news page.

------
rootlocus
This is very useful for people like me who google words to check the correct
spelling. Any plans on adding support for definitions / explanations of words?
Something like the result of "define aurora" google query.

------
known
DIY in PHP [http://php.net/manual/en/function.pspell-
suggest.php](http://php.net/manual/en/function.pspell-suggest.php)

------
willcodeforfoo
Interesting, didn't know Hammerspoon had this "chooser" functionality. I guess
with enough Lua you could replace Alfred!

------
smnplk
nope, I am not sending my keystrokes anywhere

------
justinzollars
How does one get the output into an application? Do I have to use clipboard?
Clicking command 1 simply closes the app

~~~
nathancahill
Please open an issue on Github with the content of your Hammerspoon log
(Hammer menu > Console...).

------
thecity2
Followed the installation steps, but it doesn't seem to work for me.

~~~
nathancahill
Can you open an issue with the content of the Hammerspoon log (Hammer menu >
Console...)

~~~
thecity2
sure thing!

------
erelde
Would love to have that inside something like drun or rofi.

------
SimonSelg
This sounds grad from the ux perspective! Thanks!

------
pluma
> (macOS)

FTFY

~~~
nathancahill
Doesn't quite have the same markety ring to it.

